exceptions.c:_PyVectorcall_NARGS:
   34|   101k|{
   35|   101k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|   101k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   101k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|   101k|}
listobject.c:_PyVectorcall_NARGS:
   34|    362|{
   35|    362|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    362|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    362|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|    362|}
longobject.c:_PyVectorcall_NARGS:
   34|    868|{
   35|    868|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    868|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    868|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|    868|}
dictobject.c:_PyVectorcall_NARGS:
   34|     48|{
   35|     48|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     48|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     48|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|     48|}
dictobject.c:PyObject_CallMethodOneArg:
   70|    152|{
   71|    152|    PyObject *args[2] = {self, arg};
   72|    152|    size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    152|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    152|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   73|    152|    assert(arg != NULL);
  ------------------
  |  Branch (73:5): [True: 152, False: 0]
  ------------------
   74|    152|    return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
  ------------------
  |  |   57|    152|#  define _Py_NULL NULL
  ------------------
   75|    152|}
object.c:_PyVectorcall_NARGS:
   34|      2|{
   35|      2|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      2|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      2|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|      2|}
rangeobject.c:_PyVectorcall_NARGS:
   34|    360|{
   35|    360|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    360|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    360|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|    360|}
setobject.c:_PyVectorcall_NARGS:
   34|  18.2k|{
   35|  18.2k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|  18.2k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  18.2k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|  18.2k|}
tupleobject.c:_PyVectorcall_NARGS:
   34|      4|{
   35|      4|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      4|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      4|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|      4|}
typeobject.c:_PyVectorcall_NARGS:
   34|  1.54k|{
   35|  1.54k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|  1.54k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  1.54k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|  1.54k|}
unicodeobject.c:_PyVectorcall_NARGS:
   34|   150k|{
   35|   150k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|   150k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   150k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|   150k|}
weakrefobject.c:_PyVectorcall_NARGS:
   34|    398|{
   35|    398|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    398|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    398|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|    398|}
bltinmodule.c:_PyVectorcall_NARGS:
   34|      7|{
   35|      7|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      7|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      7|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|      7|}
import.c:PyObject_CallMethodOneArg:
   70|     22|{
   71|     22|    PyObject *args[2] = {self, arg};
   72|     22|    size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     22|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     22|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   73|     22|    assert(arg != NULL);
  ------------------
  |  Branch (73:5): [True: 22, False: 0]
  ------------------
   74|     22|    return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
  ------------------
  |  |   57|     22|#  define _Py_NULL NULL
  ------------------
   75|     22|}
pylifecycle.c:PyObject_CallMethodNoArgs:
   63|      6|{
   64|      6|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      6|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      6|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|      6|#  define _Py_NULL NULL
  ------------------
   66|      6|}
_iomodule.c:PyObject_CallMethodNoArgs:
   63|     99|{
   64|     99|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     99|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     99|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|     99|#  define _Py_NULL NULL
  ------------------
   66|     99|}
iobase.c:PyObject_CallMethodNoArgs:
   63|    192|{
   64|    192|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    192|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    192|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|    192|#  define _Py_NULL NULL
  ------------------
   66|    192|}
fileio.c:PyObject_CallMethodOneArg:
   70|     93|{
   71|     93|    PyObject *args[2] = {self, arg};
   72|     93|    size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     93|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     93|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   73|     93|    assert(arg != NULL);
  ------------------
  |  Branch (73:5): [True: 93, False: 0]
  ------------------
   74|     93|    return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
  ------------------
  |  |   57|     93|#  define _Py_NULL NULL
  ------------------
   75|     93|}
bufferedio.c:PyObject_CallMethodOneArg:
   70|  48.4k|{
   71|  48.4k|    PyObject *args[2] = {self, arg};
   72|  48.4k|    size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|  48.4k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  48.4k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   73|  48.4k|    assert(arg != NULL);
  ------------------
  |  Branch (73:5): [True: 48.4k, False: 0]
  ------------------
   74|  48.4k|    return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
  ------------------
  |  |   57|  48.4k|#  define _Py_NULL NULL
  ------------------
   75|  48.4k|}
bufferedio.c:PyObject_CallMethodNoArgs:
   63|    301|{
   64|    301|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|    301|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    301|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|    301|#  define _Py_NULL NULL
  ------------------
   66|    301|}
bufferedio.c:_PyVectorcall_NARGS:
   34|     93|{
   35|     93|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     93|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     93|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|     93|}
textio.c:PyObject_CallMethodNoArgs:
   63|     22|{
   64|     22|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     22|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     22|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|     22|#  define _Py_NULL NULL
  ------------------
   66|     22|}
textio.c:PyObject_CallMethodOneArg:
   70|  48.4k|{
   71|  48.4k|    PyObject *args[2] = {self, arg};
   72|  48.4k|    size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|  48.4k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  48.4k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   73|  48.4k|    assert(arg != NULL);
  ------------------
  |  Branch (73:5): [True: 48.4k, False: 0]
  ------------------
   74|  48.4k|    return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
  ------------------
  |  |   57|  48.4k|#  define _Py_NULL NULL
  ------------------
   75|  48.4k|}
_abc.c:PyObject_CallMethodOneArg:
   70|     90|{
   71|     90|    PyObject *args[2] = {self, arg};
   72|     90|    size_t nargsf = 2 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     90|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     90|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   73|     90|    assert(arg != NULL);
  ------------------
  |  Branch (73:5): [True: 90, False: 0]
  ------------------
   74|     90|    return PyObject_VectorcallMethod(name, args, nargsf, _Py_NULL);
  ------------------
  |  |   57|     90|#  define _Py_NULL NULL
  ------------------
   75|     90|}
_functoolsmodule.c:_PyVectorcall_NARGS:
   34|      3|{
   35|      3|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      3|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      3|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|      3|}
abstract.c:_PyVectorcall_NARGS:
   34|     85|{
   35|     85|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     85|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     85|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|     85|}
abstract.c:PyObject_CallMethodNoArgs:
   63|     84|{
   64|     84|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     84|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     84|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|     84|#  define _Py_NULL NULL
  ------------------
   66|     84|}
boolobject.c:_PyVectorcall_NARGS:
   34|      6|{
   35|      6|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      6|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      6|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|      6|}
call.c:_PyVectorcall_NARGS:
   34|   735k|{
   35|   735k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|   735k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   735k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|   735k|}
descrobject.c:_PyVectorcall_NARGS:
   34|   148k|{
   35|   148k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|   148k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   148k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|   148k|}
descrobject.c:PyObject_CallMethodNoArgs:
   63|     86|{
   64|     86|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|     86|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|     86|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|     86|#  define _Py_NULL NULL
  ------------------
   66|     86|}
enumobject.c:_PyVectorcall_NARGS:
   34|  38.0k|{
   35|  38.0k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|  38.0k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  38.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|  38.0k|}
fileobject.c:PyObject_CallMethodNoArgs:
   63|  48.6k|{
   64|  48.6k|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|  48.6k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  48.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   65|       |    return PyObject_VectorcallMethod(name, &self, nargsf, _Py_NULL);
  ------------------
  |  |   57|  48.6k|#  define _Py_NULL NULL
  ------------------
   66|  48.6k|}
methodobject.c:_PyVectorcall_NARGS:
   34|   148k|{
   35|   148k|    return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|   148k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   148k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   36|   148k|}

longobject.c:PyByteArray_AS_STRING:
   25|    104|{
   26|    104|    return _PyByteArray_CAST(op)->ob_start;
  ------------------
  |  |   22|    104|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (26:12): [True: 104, False: 0]
  ------------------
   27|    104|}
typeobject.c:PyByteArray_AS_STRING:
   25|    512|{
   26|    512|    return _PyByteArray_CAST(op)->ob_start;
  ------------------
  |  |   22|    512|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|    512|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (26:12): [True: 512, False: 0]
  ------------------
   27|    512|}
bytearrayobject.c:PyByteArray_GET_SIZE:
   30|   180k|static inline Py_ssize_t PyByteArray_GET_SIZE(PyObject *op) {
   31|   180k|    PyByteArrayObject *self = _PyByteArray_CAST(op);
  ------------------
  |  |   22|   180k|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|   180k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:31): [True: 180k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(self)->ob_size));
   34|       |#else
   35|   180k|    return Py_SIZE(self);
  ------------------
  |  |  214|   180k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   180k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   180k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   180k|#endif
   37|   180k|}
bytearrayobject.c:PyByteArray_AS_STRING:
   25|   977k|{
   26|   977k|    return _PyByteArray_CAST(op)->ob_start;
  ------------------
  |  |   22|   977k|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|   977k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (26:12): [True: 977k, False: 0]
  ------------------
   27|   977k|}

exceptions.c:PyBytes_GET_SIZE:
   29|  2.21k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|  2.21k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|  2.21k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  2.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 2.21k, False: 0]
  ------------------
   31|  2.21k|    return Py_SIZE(self);
  ------------------
  |  |  214|  2.21k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|  2.21k|}
exceptions.c:PyBytes_AS_STRING:
   24|  1.34k|{
   25|  1.34k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  1.34k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  1.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 1.34k, False: 0]
  ------------------
   26|  1.34k|}
longobject.c:PyBytes_AS_STRING:
   24|    279|{
   25|    279|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|    279|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|    279|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 279, False: 0]
  ------------------
   26|    279|}
typeobject.c:PyBytes_GET_SIZE:
   29|     28|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|     28|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|     28|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 28, False: 0]
  ------------------
   31|     28|    return Py_SIZE(self);
  ------------------
  |  |  214|     28|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|     28|}
typeobject.c:PyBytes_AS_STRING:
   24|     28|{
   25|     28|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|     28|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 28, False: 0]
  ------------------
   26|     28|}
unicodeobject.c:PyBytes_GET_SIZE:
   29|   258k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|   258k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|   258k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   258k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 258k, False: 0]
  ------------------
   31|   258k|    return Py_SIZE(self);
  ------------------
  |  |  214|   258k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   258k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   258k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|   258k|}
unicodeobject.c:PyBytes_AS_STRING:
   24|  90.3k|{
   25|  90.3k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  90.3k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  90.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 90.3k, False: 0]
  ------------------
   26|  90.3k|}
ceval.c:PyBytes_AS_STRING:
   24|  46.3k|{
   25|  46.3k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  46.3k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  46.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 46.3k, False: 0]
  ------------------
   26|  46.3k|}
ceval.c:PyBytes_GET_SIZE:
   29|  46.3k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|  46.3k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|  46.3k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  46.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 46.3k, False: 0]
  ------------------
   31|  46.3k|    return Py_SIZE(self);
  ------------------
  |  |  214|  46.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  46.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|  46.3k|}
flowgraph.c:PyBytes_GET_SIZE:
   29|  7.14k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|  7.14k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|  7.14k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  7.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 7.14k, False: 0]
  ------------------
   31|  7.14k|    return Py_SIZE(self);
  ------------------
  |  |  214|  7.14k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  7.14k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|  7.14k|}
import.c:PyBytes_AS_STRING:
   24|     43|{
   25|     43|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|     43|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 43, False: 0]
  ------------------
   26|     43|}
importdl.c:PyBytes_AS_STRING:
   24|     30|{
   25|     30|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|     30|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|     30|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 30, False: 0]
  ------------------
   26|     30|}
fileutils.c:PyBytes_AS_STRING:
   24|  5.50k|{
   25|  5.50k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  5.50k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  5.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 5.50k, False: 0]
  ------------------
   26|  5.50k|}
posixmodule.c:PyBytes_GET_SIZE:
   29|    572|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|    572|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|    572|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 572, False: 0]
  ------------------
   31|    572|    return Py_SIZE(self);
  ------------------
  |  |  214|    572|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    572|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|    572|}
posixmodule.c:PyBytes_AS_STRING:
   24|    572|{
   25|    572|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|    572|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 572, False: 0]
  ------------------
   26|    572|}
fileio.c:PyBytes_AS_STRING:
   24|     93|{
   25|     93|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|     93|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 93, False: 0]
  ------------------
   26|     93|}
bytes_methods.c:PyBytes_AS_STRING:
   24|   129k|{
   25|   129k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|   129k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 129k, False: 0]
  ------------------
   26|   129k|}
bytes_methods.c:PyBytes_GET_SIZE:
   29|   129k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|   129k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|   129k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 129k, False: 0]
  ------------------
   31|   129k|    return Py_SIZE(self);
  ------------------
  |  |  214|   129k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|   129k|}
bytearrayobject.c:PyBytes_GET_SIZE:
   29|   899k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|   899k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|   899k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   899k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 899k, False: 0]
  ------------------
   31|   899k|    return Py_SIZE(self);
  ------------------
  |  |  214|   899k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   899k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   899k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|   899k|}
bytearrayobject.c:PyBytes_AS_STRING:
   24|  1.12M|{
   25|  1.12M|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  1.12M|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  1.12M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 1.12M, False: 0]
  ------------------
   26|  1.12M|}
bytesobject.c:PyBytes_AS_STRING:
   24|  10.0M|{
   25|  10.0M|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  10.0M|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  10.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 10.0M, False: 0]
  ------------------
   26|  10.0M|}
bytesobject.c:PyBytes_GET_SIZE:
   29|  28.5M|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|  28.5M|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|  28.5M|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  28.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 28.5M, False: 0]
  ------------------
   31|  28.5M|    return Py_SIZE(self);
  ------------------
  |  |  214|  28.5M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  28.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|  28.5M|}
codeobject.c:PyBytes_GET_SIZE:
   29|   632k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|   632k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|   632k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   632k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 632k, False: 0]
  ------------------
   31|   632k|    return Py_SIZE(self);
  ------------------
  |  |  214|   632k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   632k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   632k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|   632k|}
codeobject.c:PyBytes_AS_STRING:
   24|   464k|{
   25|   464k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|   464k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   464k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 464k, False: 0]
  ------------------
   26|   464k|}
frameobject.c:PyBytes_AS_STRING:
   24|      2|{
   25|      2|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|      2|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 2, False: 0]
  ------------------
   26|      2|}
frameobject.c:PyBytes_GET_SIZE:
   29|      2|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|      2|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|      2|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 2, False: 0]
  ------------------
   31|      2|    return Py_SIZE(self);
  ------------------
  |  |  214|      2|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|      2|}
memoryobject.c:PyBytes_AS_STRING:
   24|      4|{
   25|      4|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|      4|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 4, False: 0]
  ------------------
   26|      4|}
pegen.c:PyBytes_GET_SIZE:
   29|  1.02M|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|  1.02M|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|  1.02M|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  1.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 1.02M, False: 0]
  ------------------
   31|  1.02M|    return Py_SIZE(self);
  ------------------
  |  |  214|  1.02M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.02M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|  1.02M|}
lexer.c:PyBytes_GET_SIZE:
   29|    231|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|    231|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|    231|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 231, False: 0]
  ------------------
   31|    231|    return Py_SIZE(self);
  ------------------
  |  |  214|    231|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    231|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|    231|}
action_helpers.c:PyBytes_AS_STRING:
   24|  3.95k|{
   25|  3.95k|    return _PyBytes_CAST(op)->ob_sval;
  ------------------
  |  |   21|  3.95k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  3.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (25:12): [True: 3.95k, False: 0]
  ------------------
   26|  3.95k|}
action_helpers.c:PyBytes_GET_SIZE:
   29|  8.71k|static inline Py_ssize_t PyBytes_GET_SIZE(PyObject *op) {
   30|  8.71k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|  8.71k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  8.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (30:27): [True: 8.71k, False: 0]
  ------------------
   31|  8.71k|    return Py_SIZE(self);
  ------------------
  |  |  214|  8.71k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  8.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|  8.71k|}

classobject.c:PyMethod_GET_SELF:
   39|  38.9k|static inline PyObject* PyMethod_GET_SELF(PyObject *meth) {
   40|  38.9k|    return _PyMethod_CAST(meth)->im_self;
  ------------------
  |  |   30|  38.9k|    (assert(PyMethod_Check(meth)), _Py_CAST(PyMethodObject*, meth))
  |  |  ------------------
  |  |  |  |   37|  38.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (40:12): [True: 38.9k, False: 0]
  ------------------
   41|  38.9k|}
classobject.c:PyMethod_GET_FUNCTION:
   34|  38.9k|static inline PyObject* PyMethod_GET_FUNCTION(PyObject *meth) {
   35|  38.9k|    return _PyMethod_CAST(meth)->im_func;
  ------------------
  |  |   30|  38.9k|    (assert(PyMethod_Check(meth)), _Py_CAST(PyMethodObject*, meth))
  |  |  ------------------
  |  |  |  |   37|  38.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (35:12): [True: 38.9k, False: 0]
  ------------------
   36|  38.9k|}

typeobject.c:PyUnstable_Code_GetFirstFree:
  175|     14|static inline int PyUnstable_Code_GetFirstFree(PyCodeObject *op) {
  176|     14|    assert(PyCode_Check(op));
  ------------------
  |  Branch (176:5): [True: 14, False: 0]
  ------------------
  177|     14|    return op->co_nlocalsplus - op->co_nfreevars;
  178|     14|}
bltinmodule.c:PyCode_GetNumFree:
  170|    117|static inline Py_ssize_t PyCode_GetNumFree(PyCodeObject *op) {
  171|    117|    assert(PyCode_Check(op));
  ------------------
  |  Branch (171:5): [True: 117, False: 0]
  ------------------
  172|    117|    return op->co_nfreevars;
  173|    117|}
codegen.c:PyUnstable_Code_GetFirstFree:
  175|  10.9k|static inline int PyUnstable_Code_GetFirstFree(PyCodeObject *op) {
  176|  10.9k|    assert(PyCode_Check(op));
  ------------------
  |  Branch (176:5): [True: 10.9k, False: 0]
  ------------------
  177|  10.9k|    return op->co_nlocalsplus - op->co_nfreevars;
  178|  10.9k|}

listobject.c:PyDict_GET_SIZE:
   53|     18|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|     18|    PyDictObject *mp;
   55|     18|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 18, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|     18|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|     18|    return mp->ma_used;
   61|     18|#endif
   62|     18|}
setobject.c:PyDict_GET_SIZE:
   53|    159|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|    159|    PyDictObject *mp;
   55|    159|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 159, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|    159|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|    159|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|    159|    return mp->ma_used;
   61|    159|#endif
   62|    159|}
typeobject.c:PyDict_GET_SIZE:
   53|    156|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|    156|    PyDictObject *mp;
   55|    156|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 156, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|    156|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|    156|    return mp->ma_used;
   61|    156|#endif
   62|    156|}
ceval.c:PyDict_GET_SIZE:
   53|     95|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|     95|    PyDictObject *mp;
   55|     95|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 95, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|     95|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|     95|    return mp->ma_used;
   61|     95|#endif
   62|     95|}
compile.c:PyDict_GET_SIZE:
   53|   711k|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|   711k|    PyDictObject *mp;
   55|   711k|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 711k, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|   711k|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|   711k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|   711k|    return mp->ma_used;
   61|   711k|#endif
   62|   711k|}
flowgraph.c:PyDict_GET_SIZE:
   53|   697k|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|   697k|    PyDictObject *mp;
   55|   697k|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 697k, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|   697k|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|   697k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|   697k|    return mp->ma_used;
   61|   697k|#endif
   62|   697k|}
getargs.c:PyDict_GET_SIZE:
   53|    198|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|    198|    PyDictObject *mp;
   55|    198|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 198, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|    198|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|    198|    return mp->ma_used;
   61|    198|#endif
   62|    198|}
sre.c:PyDict_GET_SIZE:
   53|      9|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|      9|    PyDictObject *mp;
   55|      9|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 9, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|      9|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|      9|    return mp->ma_used;
   61|      9|#endif
   62|      9|}
_functoolsmodule.c:PyDict_GET_SIZE:
   53|      1|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|      1|    PyDictObject *mp;
   55|      1|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 1, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|      1|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|      1|    return mp->ma_used;
   61|      1|#endif
   62|      1|}
call.c:PyDict_GET_SIZE:
   53|  1.31k|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|  1.31k|    PyDictObject *mp;
   55|  1.31k|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 1.31k, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|  1.31k|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|  1.31k|    return mp->ma_used;
   61|  1.31k|#endif
   62|  1.31k|}
assemble.c:PyDict_GET_SIZE:
   53|   105k|static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
   54|   105k|    PyDictObject *mp;
   55|   105k|    assert(PyAnyDict_Check(op));
  ------------------
  |  Branch (55:5): [True: 105k, False: 0]
  |  Branch (55:5): [True: 0, False: 0]
  ------------------
   56|   105k|    mp = _Py_CAST(PyDictObject*, op);
  ------------------
  |  |   37|   105k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   57|       |#ifdef Py_GIL_DISABLED
   58|       |    return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
   59|       |#else
   60|   105k|    return mp->ma_used;
   61|   105k|#endif
   62|   105k|}

ceval.c:PyFloat_AS_DOUBLE:
   15|    588|static inline double PyFloat_AS_DOUBLE(PyObject *op) {
   16|    588|    return _PyFloat_CAST(op)->ob_fval;
  ------------------
  |  |   11|    588|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|    588|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (16:12): [True: 588, False: 0]
  ------------------
   17|    588|}
codeobject.c:PyFloat_AS_DOUBLE:
   15|  52.5M|static inline double PyFloat_AS_DOUBLE(PyObject *op) {
   16|  52.5M|    return _PyFloat_CAST(op)->ob_fval;
  ------------------
  |  |   11|  52.5M|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|  52.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (16:12): [True: 52.5M, False: 0]
  ------------------
   17|  52.5M|}
complexobject.c:PyFloat_AS_DOUBLE:
   15|  25.4k|static inline double PyFloat_AS_DOUBLE(PyObject *op) {
   16|  25.4k|    return _PyFloat_CAST(op)->ob_fval;
  ------------------
  |  |   11|  25.4k|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|  25.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (16:12): [True: 25.4k, False: 0]
  ------------------
   17|  25.4k|}
floatobject.c:PyFloat_AS_DOUBLE:
   15|   550k|static inline double PyFloat_AS_DOUBLE(PyObject *op) {
   16|   550k|    return _PyFloat_CAST(op)->ob_fval;
  ------------------
  |  |   11|   550k|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|   550k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (16:12): [True: 550k, False: 0]
  ------------------
   17|   550k|}
ast_unparse.c:PyFloat_AS_DOUBLE:
   15|  23.2k|static inline double PyFloat_AS_DOUBLE(PyObject *op) {
   16|  23.2k|    return _PyFloat_CAST(op)->ob_fval;
  ------------------
  |  |   11|  23.2k|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|  23.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (16:12): [True: 23.2k, False: 0]
  ------------------
   17|  23.2k|}

ceval.c:PyFunction_GET_CODE:
   90|  58.3k|static inline PyObject* PyFunction_GET_CODE(PyObject *func) {
   91|  58.3k|    return _PyFunction_CAST(func)->func_code;
  ------------------
  |  |   86|  58.3k|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|  58.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (91:12): [True: 58.3k, False: 0]
  ------------------
   92|  58.3k|}
specialize.c:PyFunction_GET_CODE:
   90|     18|static inline PyObject* PyFunction_GET_CODE(PyObject *func) {
   91|     18|    return _PyFunction_CAST(func)->func_code;
  ------------------
  |  |   86|     18|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (91:12): [True: 18, False: 0]
  ------------------
   92|     18|}

listobject.c:PyList_GET_SIZE:
   30|   223k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|   223k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   223k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   223k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 223k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|   223k|    return Py_SIZE(list);
  ------------------
  |  |  214|   223k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   223k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   223k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   223k|#endif
   37|   223k|}
listobject.c:PyList_SET_ITEM:
   43|  3.77M|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|  3.77M|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  3.77M|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.77M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 3.77M, False: 0]
  ------------------
   45|  3.77M|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 3.77M, False: 0]
  ------------------
   46|  3.77M|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 3.77M, False: 0]
  ------------------
   47|  3.77M|    list->ob_item[index] = value;
   48|  3.77M|}
dictobject.c:PyList_SET_ITEM:
   43|   231k|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|   231k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   231k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 231k, False: 0]
  ------------------
   45|   231k|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 231k, False: 0]
  ------------------
   46|   231k|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 231k, False: 0]
  ------------------
   47|   231k|    list->ob_item[index] = value;
   48|   231k|}
typeobject.c:PyList_SET_ITEM:
   43|    203|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|    203|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|    203|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    203|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 203, False: 0]
  ------------------
   45|    203|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 203, False: 0]
  ------------------
   46|    203|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 203, False: 0]
  ------------------
   47|    203|    list->ob_item[index] = value;
   48|    203|}
unicodeobject.c:PyList_GET_SIZE:
   30|   275k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|   275k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   275k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 275k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|   275k|    return Py_SIZE(list);
  ------------------
  |  |  214|   275k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   275k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   275k|#endif
   37|   275k|}
unicodeobject.c:PyList_SET_ITEM:
   43|    506|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|    506|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|    506|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    506|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 506, False: 0]
  ------------------
   45|    506|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 506, False: 0]
  ------------------
   46|    506|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 506, False: 0]
  ------------------
   47|    506|    list->ob_item[index] = value;
   48|    506|}
unionobject.c:PyList_GET_SIZE:
   30|     45|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|     45|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|     45|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 45, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|     45|    return Py_SIZE(list);
  ------------------
  |  |  214|     45|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|     45|#endif
   37|     45|}
_warnings.c:PyList_SET_ITEM:
   43|     10|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|     10|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|     10|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 10, False: 0]
  ------------------
   45|     10|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 10, False: 0]
  ------------------
   46|     10|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 10, False: 0]
  ------------------
   47|     10|    list->ob_item[index] = value;
   48|     10|}
_warnings.c:PyList_GET_SIZE:
   30|   290k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|   290k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   290k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   290k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 290k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|   290k|    return Py_SIZE(list);
  ------------------
  |  |  214|   290k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   290k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   290k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   290k|#endif
   37|   290k|}
ceval.c:PyList_GET_SIZE:
   30|   219k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|   219k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   219k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   219k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 219k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|   219k|    return Py_SIZE(list);
  ------------------
  |  |  214|   219k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   219k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   219k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   219k|#endif
   37|   219k|}
ceval.c:PyList_SET_ITEM:
   43|   770k|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|   770k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   770k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   770k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 770k, False: 0]
  ------------------
   45|   770k|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 770k, False: 0]
  ------------------
   46|   770k|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 770k, False: 0]
  ------------------
   47|   770k|    list->ob_item[index] = value;
   48|   770k|}
codegen.c:PyList_GET_SIZE:
   30|  18.5k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|  18.5k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  18.5k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  18.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 18.5k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|  18.5k|    return Py_SIZE(list);
  ------------------
  |  |  214|  18.5k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  18.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|  18.5k|#endif
   37|  18.5k|}
compile.c:PyList_GET_SIZE:
   30|   393k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|   393k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   393k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   393k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 393k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|   393k|    return Py_SIZE(list);
  ------------------
  |  |  214|   393k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   393k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   393k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   393k|#endif
   37|   393k|}
compile.c:PyList_SET_ITEM:
   43|   277k|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|   277k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   277k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 277k, False: 0]
  ------------------
   45|   277k|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 277k, False: 0]
  ------------------
   46|   277k|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 277k, False: 0]
  ------------------
   47|   277k|    list->ob_item[index] = value;
   48|   277k|}
flowgraph.c:PyList_GET_SIZE:
   30|  3.49M|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|  3.49M|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  3.49M|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.49M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 3.49M, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|  3.49M|    return Py_SIZE(list);
  ------------------
  |  |  214|  3.49M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  3.49M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.49M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|  3.49M|#endif
   37|  3.49M|}
gc.c:PyList_GET_SIZE:
   30|  31.0k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|  31.0k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  31.0k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  31.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 31.0k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|  31.0k|    return Py_SIZE(list);
  ------------------
  |  |  214|  31.0k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  31.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  31.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|  31.0k|#endif
   37|  31.0k|}
import.c:PyList_GET_SIZE:
   30|     14|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|     14|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|     14|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 14, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|     14|    return Py_SIZE(list);
  ------------------
  |  |  214|     14|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|     14|#endif
   37|     14|}
initconfig.c:PyList_SET_ITEM:
   43|      8|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|      8|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|      8|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 8, False: 0]
  ------------------
   45|      8|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 8, False: 0]
  ------------------
   46|      8|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 8, False: 0]
  ------------------
   47|      8|    list->ob_item[index] = value;
   48|      8|}
initconfig.c:PyList_GET_SIZE:
   30|      2|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|      2|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|      2|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 2, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|      2|    return Py_SIZE(list);
  ------------------
  |  |  214|      2|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|      2|#endif
   37|      2|}
marshal.c:PyList_GET_SIZE:
   30|  37.4k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|  37.4k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  37.4k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  37.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 37.4k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|  37.4k|    return Py_SIZE(list);
  ------------------
  |  |  214|  37.4k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  37.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|  37.4k|#endif
   37|  37.4k|}
marshal.c:PyList_SET_ITEM:
   43|  1.08k|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|  1.08k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  1.08k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 1.08k, False: 0]
  ------------------
   45|  1.08k|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 1.08k, False: 0]
  ------------------
   46|  1.08k|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 1.08k, False: 0]
  ------------------
   47|  1.08k|    list->ob_item[index] = value;
   48|  1.08k|}
modsupport.c:PyList_SET_ITEM:
   43|    150|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|    150|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|    150|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 150, False: 0]
  ------------------
   45|    150|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 150, False: 0]
  ------------------
   46|    150|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 150, False: 0]
  ------------------
   47|    150|    list->ob_item[index] = value;
   48|    150|}
specialize.c:PyList_GET_SIZE:
   30|     11|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|     11|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|     11|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 11, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|     11|    return Py_SIZE(list);
  ------------------
  |  |  214|     11|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|     11|#endif
   37|     11|}
symtable.c:PyList_GET_SIZE:
   30|   178k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|   178k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   178k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   178k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 178k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|   178k|    return Py_SIZE(list);
  ------------------
  |  |  214|   178k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   178k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   178k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|   178k|#endif
   37|   178k|}
suggestions.c:PyList_GET_SIZE:
   30|     15|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|     15|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|     15|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 15, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|     15|    return Py_SIZE(list);
  ------------------
  |  |  214|     15|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|     15|#endif
   37|     15|}
sre.c:PyList_GET_SIZE:
   30|      9|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|      9|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|      9|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 9, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|      9|    return Py_SIZE(list);
  ------------------
  |  |  214|      9|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|      9|#endif
   37|      9|}
_abc.c:PyList_GET_SIZE:
   30|  1.00k|static inline Py_ssize_t PyList_GET_SIZE(PyObject *op) {
   31|  1.00k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|  1.00k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (31:26): [True: 1.00k, False: 0]
  ------------------
   32|       |#ifdef Py_GIL_DISABLED
   33|       |    return _Py_atomic_load_ssize_relaxed(&(_PyVarObject_CAST(list)->ob_size));
   34|       |#else
   35|  1.00k|    return Py_SIZE(list);
  ------------------
  |  |  214|  1.00k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|  1.00k|#endif
   37|  1.00k|}
abstract.c:PyList_SET_ITEM:
   43|    533|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|    533|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|    533|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    533|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 533, False: 0]
  ------------------
   45|    533|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 533, False: 0]
  ------------------
   46|    533|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 533, False: 0]
  ------------------
   47|    533|    list->ob_item[index] = value;
   48|    533|}
bytesobject.c:PyList_SET_ITEM:
   43|   190k|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|   190k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   190k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   190k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 190k, False: 0]
  ------------------
   45|   190k|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 190k, False: 0]
  ------------------
   46|   190k|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 190k, False: 0]
  ------------------
   47|   190k|    list->ob_item[index] = value;
   48|   190k|}
memoryobject.c:PyList_SET_ITEM:
   43|    128|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|    128|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|    128|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    128|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 128, False: 0]
  ------------------
   45|    128|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 128, False: 0]
  ------------------
   46|    128|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 128, False: 0]
  ------------------
   47|    128|    list->ob_item[index] = value;
   48|    128|}
Python-ast.c:PyList_SET_ITEM:
   43|   132k|PyList_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   44|   132k|    PyListObject *list = _PyList_CAST(op);
  ------------------
  |  |   26|   132k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   132k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (44:26): [True: 132k, False: 0]
  ------------------
   45|   132k|    assert(0 <= index);
  ------------------
  |  Branch (45:5): [True: 132k, False: 0]
  ------------------
   46|   132k|    assert(index < list->allocated);
  ------------------
  |  Branch (46:5): [True: 132k, False: 0]
  ------------------
   47|   132k|    list->ob_item[index] = value;
   48|   132k|}

listobject.c:_PyLong_IsCompact:
  122|  2.22k|_PyLong_IsCompact(const PyLongObject* op) {
  123|  2.22k|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (123:5): [True: 2.22k, False: 0]
  ------------------
  124|  2.22k|    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
  ------------------
  |  |  118|  2.22k|#define _PyLong_NON_SIZE_BITS 3
  ------------------
  125|  2.22k|}
listobject.c:_PyLong_CompactValue:
  131|    918|{
  132|    918|    Py_ssize_t sign;
  133|    918|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (133:5): [True: 918, False: 0]
  ------------------
  134|    918|    assert(PyUnstable_Long_IsCompact(op));
  ------------------
  |  Branch (134:5): [True: 918, False: 0]
  ------------------
  135|    918|    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
  ------------------
  |  |  117|    918|#define _PyLong_SIGN_MASK 3
  ------------------
  136|    918|    if (sign == 0) {
  ------------------
  |  Branch (136:9): [True: 0, False: 918]
  ------------------
  137|       |        // gh-147988: Make sure that the digit is zero.
  138|       |        // It helps detecting the usage of uninitialized digits.
  139|      0|        assert(op->long_value.ob_digit[0] == 0);
  ------------------
  |  Branch (139:9): [True: 0, False: 0]
  ------------------
  140|      0|    }
  141|    918|    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
  142|    918|}
longobject.c:_PyLong_IsCompact:
  122|   371M|_PyLong_IsCompact(const PyLongObject* op) {
  123|   371M|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (123:5): [True: 371M, False: 0]
  ------------------
  124|   371M|    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
  ------------------
  |  |  118|   371M|#define _PyLong_NON_SIZE_BITS 3
  ------------------
  125|   371M|}
longobject.c:_PyLong_CompactValue:
  131|   202M|{
  132|   202M|    Py_ssize_t sign;
  133|   202M|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (133:5): [True: 202M, False: 0]
  ------------------
  134|   202M|    assert(PyUnstable_Long_IsCompact(op));
  ------------------
  |  Branch (134:5): [True: 202M, False: 0]
  ------------------
  135|   202M|    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
  ------------------
  |  |  117|   202M|#define _PyLong_SIGN_MASK 3
  ------------------
  136|   202M|    if (sign == 0) {
  ------------------
  |  Branch (136:9): [True: 4.47M, False: 198M]
  ------------------
  137|       |        // gh-147988: Make sure that the digit is zero.
  138|       |        // It helps detecting the usage of uninitialized digits.
  139|  4.47M|        assert(op->long_value.ob_digit[0] == 0);
  ------------------
  |  Branch (139:9): [True: 4.47M, False: 0]
  ------------------
  140|  4.47M|    }
  141|   202M|    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
  142|   202M|}
bltinmodule.c:_PyLong_IsCompact:
  122|  98.7k|_PyLong_IsCompact(const PyLongObject* op) {
  123|  98.7k|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (123:5): [True: 98.7k, False: 0]
  ------------------
  124|  98.7k|    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
  ------------------
  |  |  118|  98.7k|#define _PyLong_NON_SIZE_BITS 3
  ------------------
  125|  98.7k|}
bltinmodule.c:_PyLong_CompactValue:
  131|  49.3k|{
  132|  49.3k|    Py_ssize_t sign;
  133|  49.3k|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (133:5): [True: 49.3k, False: 0]
  ------------------
  134|  49.3k|    assert(PyUnstable_Long_IsCompact(op));
  ------------------
  |  Branch (134:5): [True: 49.3k, False: 0]
  ------------------
  135|  49.3k|    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
  ------------------
  |  |  117|  49.3k|#define _PyLong_SIGN_MASK 3
  ------------------
  136|  49.3k|    if (sign == 0) {
  ------------------
  |  Branch (136:9): [True: 29.2k, False: 20.0k]
  ------------------
  137|       |        // gh-147988: Make sure that the digit is zero.
  138|       |        // It helps detecting the usage of uninitialized digits.
  139|  29.2k|        assert(op->long_value.ob_digit[0] == 0);
  ------------------
  |  Branch (139:9): [True: 29.2k, False: 0]
  ------------------
  140|  29.2k|    }
  141|  49.3k|    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
  142|  49.3k|}
ceval.c:_PyLong_CompactValue:
  131|  59.7M|{
  132|  59.7M|    Py_ssize_t sign;
  133|  59.7M|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (133:5): [True: 59.7M, False: 0]
  ------------------
  134|  59.7M|    assert(PyUnstable_Long_IsCompact(op));
  ------------------
  |  Branch (134:5): [True: 59.7M, False: 0]
  ------------------
  135|  59.7M|    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
  ------------------
  |  |  117|  59.7M|#define _PyLong_SIGN_MASK 3
  ------------------
  136|  59.7M|    if (sign == 0) {
  ------------------
  |  Branch (136:9): [True: 950k, False: 58.8M]
  ------------------
  137|       |        // gh-147988: Make sure that the digit is zero.
  138|       |        // It helps detecting the usage of uninitialized digits.
  139|   950k|        assert(op->long_value.ob_digit[0] == 0);
  ------------------
  |  Branch (139:9): [True: 950k, False: 0]
  ------------------
  140|   950k|    }
  141|  59.7M|    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
  142|  59.7M|}
ceval.c:_PyLong_IsCompact:
  122|   260M|_PyLong_IsCompact(const PyLongObject* op) {
  123|   260M|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (123:5): [True: 260M, False: 0]
  ------------------
  124|   260M|    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
  ------------------
  |  |  118|   260M|#define _PyLong_NON_SIZE_BITS 3
  ------------------
  125|   260M|}
specialize.c:_PyLong_CompactValue:
  131|  42.6k|{
  132|  42.6k|    Py_ssize_t sign;
  133|  42.6k|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (133:5): [True: 42.6k, False: 0]
  ------------------
  134|  42.6k|    assert(PyUnstable_Long_IsCompact(op));
  ------------------
  |  Branch (134:5): [True: 42.6k, False: 0]
  ------------------
  135|  42.6k|    sign = 1 - (op->long_value.lv_tag & _PyLong_SIGN_MASK);
  ------------------
  |  |  117|  42.6k|#define _PyLong_SIGN_MASK 3
  ------------------
  136|  42.6k|    if (sign == 0) {
  ------------------
  |  Branch (136:9): [True: 283, False: 42.3k]
  ------------------
  137|       |        // gh-147988: Make sure that the digit is zero.
  138|       |        // It helps detecting the usage of uninitialized digits.
  139|    283|        assert(op->long_value.ob_digit[0] == 0);
  ------------------
  |  Branch (139:9): [True: 283, False: 0]
  ------------------
  140|    283|    }
  141|  42.6k|    return sign * (Py_ssize_t)op->long_value.ob_digit[0];
  142|  42.6k|}
specialize.c:_PyLong_IsCompact:
  122|  87.1k|_PyLong_IsCompact(const PyLongObject* op) {
  123|  87.1k|    assert(PyType_HasFeature(op->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS));
  ------------------
  |  Branch (123:5): [True: 87.1k, False: 0]
  ------------------
  124|  87.1k|    return op->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS);
  ------------------
  |  |  118|  87.1k|#define _PyLong_NON_SIZE_BITS 3
  ------------------
  125|  87.1k|}

typeobject.c:PyCFunction_GET_FUNCTION:
   40|    743|static inline PyCFunction PyCFunction_GET_FUNCTION(PyObject *func) {
   41|    743|    return _PyCFunctionObject_CAST(func)->m_ml->ml_meth;
  ------------------
  |  |   17|    743|    (assert(PyCFunction_Check(func)), \
  |  |   18|    743|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|    743|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (41:12): [True: 743, False: 0]
  ------------------
   42|    743|}
ceval.c:PyCFunction_GET_FUNCTION:
   40|  17.3M|static inline PyCFunction PyCFunction_GET_FUNCTION(PyObject *func) {
   41|  17.3M|    return _PyCFunctionObject_CAST(func)->m_ml->ml_meth;
  ------------------
  |  |   17|  17.3M|    (assert(PyCFunction_Check(func)), \
  |  |   18|  17.3M|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|  17.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (41:12): [True: 17.3M, False: 0]
  ------------------
   42|  17.3M|}
ceval.c:PyCFunction_GET_SELF:
   45|  17.3M|static inline PyObject* PyCFunction_GET_SELF(PyObject *func_obj) {
   46|  17.3M|    PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj);
  ------------------
  |  |   17|  17.3M|    (assert(PyCFunction_Check(func)), \
  |  |   18|  17.3M|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|  17.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (46:31): [True: 17.3M, False: 0]
  ------------------
   47|  17.3M|    if (func->m_ml->ml_flags & METH_STATIC) {
  ------------------
  |  |  105|  17.3M|#define METH_STATIC   0x0020
  ------------------
  |  Branch (47:9): [True: 0, False: 17.3M]
  ------------------
   48|      0|        return _Py_NULL;
  ------------------
  |  |   57|      0|#  define _Py_NULL NULL
  ------------------
   49|      0|    }
   50|  17.3M|    return func->m_self;
   51|  17.3M|}
ceval.c:PyCFunction_GET_FLAGS:
   54|  17.3M|static inline int PyCFunction_GET_FLAGS(PyObject *func) {
   55|  17.3M|    return _PyCFunctionObject_CAST(func)->m_ml->ml_flags;
  ------------------
  |  |   17|  17.3M|    (assert(PyCFunction_Check(func)), \
  |  |   18|  17.3M|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|  17.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (55:12): [True: 17.3M, False: 0]
  ------------------
   56|  17.3M|}
specialize.c:PyCFunction_GET_FUNCTION:
   40|    502|static inline PyCFunction PyCFunction_GET_FUNCTION(PyObject *func) {
   41|    502|    return _PyCFunctionObject_CAST(func)->m_ml->ml_meth;
  ------------------
  |  |   17|    502|    (assert(PyCFunction_Check(func)), \
  |  |   18|    502|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (41:12): [True: 502, False: 0]
  ------------------
   42|    502|}
specialize.c:PyCFunction_GET_FLAGS:
   54|    502|static inline int PyCFunction_GET_FLAGS(PyObject *func) {
   55|    502|    return _PyCFunctionObject_CAST(func)->m_ml->ml_flags;
  ------------------
  |  |   17|    502|    (assert(PyCFunction_Check(func)), \
  |  |   18|    502|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (55:12): [True: 502, False: 0]
  ------------------
   56|    502|}
methodobject.c:PyCFunction_GET_FUNCTION:
   40|   148k|static inline PyCFunction PyCFunction_GET_FUNCTION(PyObject *func) {
   41|   148k|    return _PyCFunctionObject_CAST(func)->m_ml->ml_meth;
  ------------------
  |  |   17|   148k|    (assert(PyCFunction_Check(func)), \
  |  |   18|   148k|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|   148k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (41:12): [True: 148k, False: 0]
  ------------------
   42|   148k|}
methodobject.c:PyCFunction_GET_SELF:
   45|   148k|static inline PyObject* PyCFunction_GET_SELF(PyObject *func_obj) {
   46|   148k|    PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj);
  ------------------
  |  |   17|   148k|    (assert(PyCFunction_Check(func)), \
  |  |   18|   148k|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|   148k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (46:31): [True: 148k, False: 0]
  ------------------
   47|   148k|    if (func->m_ml->ml_flags & METH_STATIC) {
  ------------------
  |  |  105|   148k|#define METH_STATIC   0x0020
  ------------------
  |  Branch (47:9): [True: 0, False: 148k]
  ------------------
   48|      0|        return _Py_NULL;
  ------------------
  |  |   57|      0|#  define _Py_NULL NULL
  ------------------
   49|      0|    }
   50|   148k|    return func->m_self;
   51|   148k|}
methodobject.c:PyCFunction_GET_FLAGS:
   54|    115|static inline int PyCFunction_GET_FLAGS(PyObject *func) {
   55|    115|    return _PyCFunctionObject_CAST(func)->m_ml->ml_flags;
  ------------------
  |  |   17|    115|    (assert(PyCFunction_Check(func)), \
  |  |   18|    115|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|    115|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (55:12): [True: 115, False: 0]
  ------------------
   56|    115|}
methodobject.c:PyCFunction_GET_CLASS:
   59|  1.96M|static inline PyTypeObject* PyCFunction_GET_CLASS(PyObject *func_obj) {
   60|  1.96M|    PyCFunctionObject *func = _PyCFunctionObject_CAST(func_obj);
  ------------------
  |  |   17|  1.96M|    (assert(PyCFunction_Check(func)), \
  |  |   18|  1.96M|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|  1.96M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (60:31): [True: 1.96M, False: 0]
  ------------------
   61|  1.96M|    if (func->m_ml->ml_flags & METH_METHOD) {
  ------------------
  |  |  133|  1.96M|#define METH_METHOD 0x0200
  ------------------
  |  Branch (61:9): [True: 277, False: 1.95M]
  ------------------
   62|    277|        return _PyCMethodObject_CAST(func)->mm_class;
  ------------------
  |  |   29|    277|    (assert(PyCMethod_Check(func)), \
  |  |   30|    277|     _Py_CAST(PyCMethodObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|    277|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (62:16): [True: 277, False: 0]
  ------------------
   63|    277|    }
   64|  1.95M|    return _Py_NULL;
  ------------------
  |  |   57|  1.95M|#  define _Py_NULL NULL
  ------------------
   65|  1.96M|}

object.c:_PyObject_SIZE:
    5|  63.5k|static inline size_t _PyObject_SIZE(PyTypeObject *type) {
    6|  63.5k|    return _Py_STATIC_CAST(size_t, type->tp_basicsize);
  ------------------
  |  |   34|  63.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
    7|  63.5k|}
object.c:_PyObject_VAR_SIZE:
   23|  56.1k|static inline size_t _PyObject_VAR_SIZE(PyTypeObject *type, Py_ssize_t nitems) {
   24|  56.1k|    size_t size = _Py_STATIC_CAST(size_t, type->tp_basicsize);
  ------------------
  |  |   34|  56.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
   25|  56.1k|    size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
  ------------------
  |  |   34|  56.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                  size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
  ------------------
  |  |   34|  56.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
   26|  56.1k|    return _Py_SIZE_ROUND_UP(size, SIZEOF_VOID_P);
  ------------------
  |  |  238|  56.1k|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|  56.1k|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
   27|  56.1k|}
typeobject.c:_PyObject_VAR_SIZE:
   23|  1.52M|static inline size_t _PyObject_VAR_SIZE(PyTypeObject *type, Py_ssize_t nitems) {
   24|  1.52M|    size_t size = _Py_STATIC_CAST(size_t, type->tp_basicsize);
  ------------------
  |  |   34|  1.52M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
   25|  1.52M|    size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
  ------------------
  |  |   34|  1.52M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                  size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
  ------------------
  |  |   34|  1.52M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
   26|  1.52M|    return _Py_SIZE_ROUND_UP(size, SIZEOF_VOID_P);
  ------------------
  |  |  238|  1.52M|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|  1.52M|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
   27|  1.52M|}
gc.c:_PyObject_SIZE:
    5|   791k|static inline size_t _PyObject_SIZE(PyTypeObject *type) {
    6|   791k|    return _Py_STATIC_CAST(size_t, type->tp_basicsize);
  ------------------
  |  |   34|   791k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
    7|   791k|}
gc.c:_PyObject_VAR_SIZE:
   23|  48.7M|static inline size_t _PyObject_VAR_SIZE(PyTypeObject *type, Py_ssize_t nitems) {
   24|  48.7M|    size_t size = _Py_STATIC_CAST(size_t, type->tp_basicsize);
  ------------------
  |  |   34|  48.7M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
   25|  48.7M|    size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
  ------------------
  |  |   34|  48.7M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                  size += _Py_STATIC_CAST(size_t, nitems) * _Py_STATIC_CAST(size_t, type->tp_itemsize);
  ------------------
  |  |   34|  48.7M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
   26|  48.7M|    return _Py_SIZE_ROUND_UP(size, SIZEOF_VOID_P);
  ------------------
  |  |  238|  48.7M|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|  48.7M|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
   27|  48.7M|}

longobject.c:_Py_atomic_load_int:
  248|    972|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
obmalloc.c:_Py_atomic_compare_exchange_uint8:
  105|      4|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  106|      4|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
typeobject.c:_Py_atomic_load_uint_relaxed:
  379|    416|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
typeobject.c:_Py_atomic_compare_exchange_uint:
  100|    416|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  101|    416|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
typeobject.c:_Py_atomic_load_int64:
  264|    416|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
typeobject.c:_Py_atomic_add_int64:
   31|    416|{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); }
typeobject.c:_Py_atomic_compare_exchange_uint8:
  105|     24|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  106|     24|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
unicodeobject.c:_Py_atomic_load_ptr:
  300|  5.91k|{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_SEQ_CST); }
unicodeobject.c:_Py_atomic_store_ptr:
  450|      1|{ __atomic_store_n((void **)obj, value, __ATOMIC_SEQ_CST); }
_warnings.c:_Py_atomic_load_uint8:
  272|  48.4k|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
ceval.c:_Py_atomic_load_uintptr_relaxed:
  375|  54.3M|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
gc.c:_Py_atomic_compare_exchange_int:
   70|  8.38k|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
   71|  8.38k|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
gc.c:_Py_atomic_store_int:
  402|  8.38k|{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); }
gc.c:_Py_atomic_load_uintptr_relaxed:
  375|  33.0M|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
gc.c:_Py_atomic_or_uintptr:
  241|  8.38k|{ return __atomic_fetch_or(obj, value, __ATOMIC_SEQ_CST); }
gc.c:_Py_atomic_load_int_relaxed:
  307|  33.0M|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
getargs.c:_Py_atomic_load_uint8:
  272|  2.26k|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
getargs.c:_Py_atomic_load_ptr:
  300|      4|{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_SEQ_CST); }
getargs.c:_Py_atomic_compare_exchange_ptr:
  135|      4|{ return __atomic_compare_exchange_n((void **)obj, (void **)expected, desired, 0,
  136|      4|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
ceval_gil.c:_Py_atomic_load_int_acquire:
  589|  56.0k|{ return __atomic_load_n(obj, __ATOMIC_ACQUIRE); }
ceval_gil.c:_Py_atomic_load_int_relaxed:
  307|   112k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
ceval_gil.c:_Py_atomic_load_ptr_relaxed:
  387|  56.0k|{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_RELAXED); }
ceval_gil.c:_Py_atomic_store_ptr_relaxed:
  509|  56.0k|{ __atomic_store_n((void **)obj, value, __ATOMIC_RELAXED); }
ceval_gil.c:_Py_atomic_store_int_release:
  573|      2|{ __atomic_store_n(obj, value, __ATOMIC_RELEASE); }
ceval_gil.c:_Py_atomic_store_int_relaxed:
  461|   112k|{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
ceval_gil.c:_Py_atomic_and_uintptr:
  218|  56.1k|{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); }
ceval_gil.c:_Py_atomic_load_int32_relaxed:
  347|   112k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
ceval_gil.c:_Py_atomic_load_uintptr_relaxed:
  375|   168k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
import.c:_Py_atomic_add_ssize:
   63|     51|{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); }
import.c:_Py_atomic_compare_exchange_uint8:
  105|    110|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  106|    110|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
lock.c:_Py_atomic_load_uint8_relaxed:
  359|  97.9k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
lock.c:_Py_atomic_compare_exchange_uint8:
  105|   198k|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  106|   198k|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
lock.c:_Py_atomic_load_uint8:
  272|      5|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
lock.c:_Py_atomic_exchange_uint8:
  171|      5|{ return __atomic_exchange_n(obj, value, __ATOMIC_SEQ_CST); }
lock.c:_Py_atomic_load_ullong_relaxed:
  391|   103k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
lock.c:_Py_atomic_store_ullong_relaxed:
  518|   101k|{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
pylifecycle.c:_Py_atomic_load_ptr_relaxed:
  387|  96.9k|{ return (void *)__atomic_load_n((void * const *)obj, __ATOMIC_RELAXED); }
pylifecycle.c:_Py_atomic_load_int:
  248|  2.28k|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
pylifecycle.c:_Py_atomic_store_ptr_relaxed:
  509|      2|{ __atomic_store_n((void **)obj, value, __ATOMIC_RELAXED); }
pylifecycle.c:_Py_atomic_store_uint64_relaxed:
  497|      2|{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
pylifecycle.c:_Py_atomic_store_int:
  402|      6|{ __atomic_store_n(obj, value, __ATOMIC_SEQ_CST); }
pystate.c:_Py_atomic_load_int:
  248|      4|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
pystate.c:_Py_atomic_compare_exchange_uint8:
  105|      8|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  106|      8|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
pystate.c:_Py_atomic_load_uintptr_relaxed:
  375|      2|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
pystate.c:_Py_atomic_load_int_relaxed:
  307|   224k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
pystate.c:_Py_atomic_exchange_ptr:
  195|      2|{ return __atomic_exchange_n((void **)obj, value, __ATOMIC_SEQ_CST); }
thread.c:_Py_atomic_compare_exchange_uint8:
  105|  97.2k|{ return __atomic_compare_exchange_n(obj, expected, desired, 0,
  106|  97.2k|                                     __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); }
fileutils.c:_Py_atomic_load_int_relaxed:
  307|    186|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
fileutils.c:_Py_atomic_store_int_relaxed:
  461|      2|{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
signalmodule.c:_Py_atomic_store_int_relaxed:
  461|    128|{ __atomic_store_n(obj, value, __ATOMIC_RELAXED); }
signalmodule.c:_Py_atomic_load_uintptr_relaxed:
  375|   861k|{ return __atomic_load_n(obj, __ATOMIC_RELAXED); }
signalmodule.c:_Py_atomic_and_uintptr:
  218|  8.18k|{ return __atomic_fetch_and(obj, value, __ATOMIC_SEQ_CST); }
signalmodule.c:_Py_atomic_load_int:
  248|   861k|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }
codeobject.c:_Py_atomic_add_uint64:
   55|  53.6k|{ return __atomic_fetch_add(obj, value, __ATOMIC_SEQ_CST); }
Python-ast.c:_Py_atomic_load_uint8:
  272|  1.89k|{ return __atomic_load_n(obj, __ATOMIC_SEQ_CST); }

obmalloc.c:_PyMutex_Lock:
   53|      2|{
   54|      2|    uint8_t expected = _Py_UNLOCKED;
  ------------------
  |  |    9|      2|#define _Py_UNLOCKED    0
  ------------------
   55|      2|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) {
  ------------------
  |  |   10|      2|#define _Py_LOCKED      1
  ------------------
  |  Branch (55:9): [True: 0, False: 2]
  ------------------
   56|      0|        PyMutex_Lock(m);
   57|      0|    }
   58|      2|}
obmalloc.c:_PyMutex_Unlock:
   64|      2|{
   65|      2|    uint8_t expected = _Py_LOCKED;
  ------------------
  |  |   10|      2|#define _Py_LOCKED      1
  ------------------
   66|      2|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) {
  ------------------
  |  |    9|      2|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (66:9): [True: 0, False: 2]
  ------------------
   67|      0|        PyMutex_Unlock(m);
   68|      0|    }
   69|      2|}
typeobject.c:_PyMutex_Lock:
   53|     12|{
   54|     12|    uint8_t expected = _Py_UNLOCKED;
  ------------------
  |  |    9|     12|#define _Py_UNLOCKED    0
  ------------------
   55|     12|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) {
  ------------------
  |  |   10|     12|#define _Py_LOCKED      1
  ------------------
  |  Branch (55:9): [True: 0, False: 12]
  ------------------
   56|      0|        PyMutex_Lock(m);
   57|      0|    }
   58|     12|}
typeobject.c:_PyMutex_Unlock:
   64|     12|{
   65|     12|    uint8_t expected = _Py_LOCKED;
  ------------------
  |  |   10|     12|#define _Py_LOCKED      1
  ------------------
   66|     12|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) {
  ------------------
  |  |    9|     12|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (66:9): [True: 0, False: 12]
  ------------------
   67|      0|        PyMutex_Unlock(m);
   68|      0|    }
   69|     12|}
_warnings.c:_PyMutex_IsLocked:
   75|  48.4k|{
   76|  48.4k|    return (_Py_atomic_load_uint8(&m->_bits) & _Py_LOCKED) != 0;
  ------------------
  |  |   10|  48.4k|#define _Py_LOCKED      1
  ------------------
   77|  48.4k|}
import.c:_PyMutex_Lock:
   53|     55|{
   54|     55|    uint8_t expected = _Py_UNLOCKED;
  ------------------
  |  |    9|     55|#define _Py_UNLOCKED    0
  ------------------
   55|     55|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) {
  ------------------
  |  |   10|     55|#define _Py_LOCKED      1
  ------------------
  |  Branch (55:9): [True: 0, False: 55]
  ------------------
   56|      0|        PyMutex_Lock(m);
   57|      0|    }
   58|     55|}
import.c:_PyMutex_Unlock:
   64|     55|{
   65|     55|    uint8_t expected = _Py_LOCKED;
  ------------------
  |  |   10|     55|#define _Py_LOCKED      1
  ------------------
   66|     55|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) {
  ------------------
  |  |    9|     55|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (66:9): [True: 0, False: 55]
  ------------------
   67|      0|        PyMutex_Unlock(m);
   68|      0|    }
   69|     55|}
lock.c:_PyMutex_Lock:
   53|  50.1k|{
   54|  50.1k|    uint8_t expected = _Py_UNLOCKED;
  ------------------
  |  |    9|  50.1k|#define _Py_UNLOCKED    0
  ------------------
   55|  50.1k|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) {
  ------------------
  |  |   10|  50.1k|#define _Py_LOCKED      1
  ------------------
  |  Branch (55:9): [True: 0, False: 50.1k]
  ------------------
   56|      0|        PyMutex_Lock(m);
   57|      0|    }
   58|  50.1k|}
lock.c:_PyMutex_Unlock:
   64|  50.8k|{
   65|  50.8k|    uint8_t expected = _Py_LOCKED;
  ------------------
  |  |   10|  50.8k|#define _Py_LOCKED      1
  ------------------
   66|  50.8k|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) {
  ------------------
  |  |    9|  50.8k|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (66:9): [True: 0, False: 50.8k]
  ------------------
   67|      0|        PyMutex_Unlock(m);
   68|      0|    }
   69|  50.8k|}
pystate.c:_PyMutex_Unlock:
   64|      4|{
   65|      4|    uint8_t expected = _Py_LOCKED;
  ------------------
  |  |   10|      4|#define _Py_LOCKED      1
  ------------------
   66|      4|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) {
  ------------------
  |  |    9|      4|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (66:9): [True: 0, False: 4]
  ------------------
   67|      0|        PyMutex_Unlock(m);
   68|      0|    }
   69|      4|}
thread.c:_PyMutex_Unlock:
   64|  97.2k|{
   65|  97.2k|    uint8_t expected = _Py_LOCKED;
  ------------------
  |  |   10|  97.2k|#define _Py_LOCKED      1
  ------------------
   66|  97.2k|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_UNLOCKED)) {
  ------------------
  |  |    9|  97.2k|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (66:9): [True: 0, False: 97.2k]
  ------------------
   67|      0|        PyMutex_Unlock(m);
   68|      0|    }
   69|  97.2k|}

listobject.c:PySet_GET_SIZE:
   64|  84.2k|static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) {
   65|       |#ifdef Py_GIL_DISABLED
   66|       |    return _Py_atomic_load_ssize_relaxed(&(_PySet_CAST(so)->used));
   67|       |#else
   68|  84.2k|    return _PySet_CAST(so)->used;
  ------------------
  |  |   62|  84.2k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  84.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (68:12): [True: 84.2k, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  ------------------
   69|  84.2k|#endif
   70|  84.2k|}
setobject.c:PySet_GET_SIZE:
   64|  35.6k|static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) {
   65|       |#ifdef Py_GIL_DISABLED
   66|       |    return _Py_atomic_load_ssize_relaxed(&(_PySet_CAST(so)->used));
   67|       |#else
   68|  35.6k|    return _PySet_CAST(so)->used;
  ------------------
  |  |   62|  35.6k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  35.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (68:12): [True: 326, False: 35.3k]
  |  Branch (68:12): [True: 35.3k, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  ------------------
   69|  35.6k|#endif
   70|  35.6k|}
_abc.c:PySet_GET_SIZE:
   64|     51|static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) {
   65|       |#ifdef Py_GIL_DISABLED
   66|       |    return _Py_atomic_load_ssize_relaxed(&(_PySet_CAST(so)->used));
   67|       |#else
   68|     51|    return _PySet_CAST(so)->used;
  ------------------
  |  |   62|     51|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (68:12): [True: 51, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  ------------------
   69|     51|#endif
   70|     51|}
codeobject.c:PySet_GET_SIZE:
   64|  5.43k|static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) {
   65|       |#ifdef Py_GIL_DISABLED
   66|       |    return _Py_atomic_load_ssize_relaxed(&(_PySet_CAST(so)->used));
   67|       |#else
   68|  5.43k|    return _PySet_CAST(so)->used;
  ------------------
  |  |   62|  5.43k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  5.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (68:12): [True: 0, False: 5.43k]
  |  Branch (68:12): [True: 5.43k, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  |  Branch (68:12): [True: 0, False: 0]
  ------------------
   69|  5.43k|#endif
   70|  5.43k|}

exceptions.c:PyTuple_GET_SIZE:
   23|  74.4k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  74.4k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  74.4k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  74.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 74.4k, False: 0]
  ------------------
   25|  74.4k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  74.4k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  74.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  74.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  74.4k|}
listobject.c:PyTuple_GET_SIZE:
   23|  1.33k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  1.33k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.33k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 1.33k, False: 0]
  ------------------
   25|  1.33k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  1.33k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.33k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  1.33k|}
longobject.c:PyTuple_GET_SIZE:
   23|    168|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    168|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    168|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 168, False: 0]
  ------------------
   25|    168|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    168|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    168|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    168|}
dictobject.c:PyTuple_SET_ITEM:
   33|    634|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    634|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    634|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    634|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 634, False: 0]
  ------------------
   35|    634|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 634, False: 0]
  ------------------
   36|    634|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 634, False: 0]
  ------------------
   37|    634|    tuple->ob_item[index] = value;
   38|    634|}
dictobject.c:PyTuple_GET_SIZE:
   23|  1.05k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  1.05k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.05k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.05k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 1.05k, False: 0]
  ------------------
   25|  1.05k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  1.05k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.05k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.05k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  1.05k|}
moduleobject.c:PyTuple_GET_SIZE:
   23|    117|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    117|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    117|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 117, False: 0]
  ------------------
   25|    117|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    117|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    117|}
sentinelobject.c:PyTuple_GET_SIZE:
   23|      3|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|      3|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      3|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 3, False: 0]
  ------------------
   25|      3|    return Py_SIZE(tuple);
  ------------------
  |  |  214|      3|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|      3|}
structseq.c:PyTuple_SET_ITEM:
   33|    214|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    214|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    214|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    214|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 214, False: 0]
  ------------------
   35|    214|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 214, False: 0]
  ------------------
   36|    214|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 214, False: 0]
  ------------------
   37|    214|    tuple->ob_item[index] = value;
   38|    214|}
tupleobject.c:PyTuple_GET_SIZE:
   23|  56.3k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  56.3k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  56.3k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  56.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 56.3k, False: 0]
  ------------------
   25|  56.3k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  56.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  56.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  56.3k|}
tupleobject.c:PyTuple_SET_ITEM:
   33|    612|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    612|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    612|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    612|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 612, False: 0]
  ------------------
   35|    612|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 612, False: 0]
  ------------------
   36|    612|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 612, False: 0]
  ------------------
   37|    612|    tuple->ob_item[index] = value;
   38|    612|}
typeobject.c:PyTuple_GET_SIZE:
   23|  19.6M|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  19.6M|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  19.6M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  19.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 19.6M, False: 0]
  ------------------
   25|  19.6M|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  19.6M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  19.6M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  19.6M|}
typeobject.c:PyTuple_SET_ITEM:
   33|  3.62k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  3.62k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  3.62k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 3.62k, False: 0]
  ------------------
   35|  3.62k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 3.62k, False: 0]
  ------------------
   36|  3.62k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 3.62k, False: 0]
  ------------------
   37|  3.62k|    tuple->ob_item[index] = value;
   38|  3.62k|}
unicodeobject.c:PyTuple_GET_SIZE:
   23|    208|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    208|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    208|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    208|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 208, False: 0]
  ------------------
   25|    208|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    208|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    208|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    208|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    208|}
unicodeobject.c:PyTuple_SET_ITEM:
   33|  3.47k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  3.47k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  3.47k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 3.47k, False: 0]
  ------------------
   35|  3.47k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 3.47k, False: 0]
  ------------------
   36|  3.47k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 3.47k, False: 0]
  ------------------
   37|  3.47k|    tuple->ob_item[index] = value;
   38|  3.47k|}
weakrefobject.c:PyTuple_SET_ITEM:
   33|  1.40k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  1.40k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.40k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 1.40k, False: 0]
  ------------------
   35|  1.40k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 1.40k, False: 0]
  ------------------
   36|  1.40k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 1.40k, False: 0]
  ------------------
   37|  1.40k|    tuple->ob_item[index] = value;
   38|  1.40k|}
_warnings.c:PyTuple_GET_SIZE:
   23|   242k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|   242k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   242k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 242k, False: 0]
  ------------------
   25|   242k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|   242k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   242k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|   242k|}
bltinmodule.c:PyTuple_GET_SIZE:
   23|    999|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    999|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    999|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    999|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 999, False: 0]
  ------------------
   25|    999|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    999|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    999|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    999|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    999|}
bltinmodule.c:PyTuple_SET_ITEM:
   33|    147|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    147|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    147|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    147|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 147, False: 0]
  ------------------
   35|    147|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 147, False: 0]
  ------------------
   36|    147|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 147, False: 0]
  ------------------
   37|    147|    tuple->ob_item[index] = value;
   38|    147|}
ceval.c:PyTuple_GET_SIZE:
   23|  1.36M|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  1.36M|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.36M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.36M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 1.36M, False: 0]
  ------------------
   25|  1.36M|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  1.36M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.36M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.36M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  1.36M|}
codecs.c:PyTuple_GET_SIZE:
   23|  39.3k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  39.3k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  39.3k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  39.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 39.3k, False: 0]
  ------------------
   25|  39.3k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  39.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  39.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  39.3k|}
codecs.c:PyTuple_SET_ITEM:
   33|  41.1k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  41.1k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  41.1k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 41.1k, False: 0]
  ------------------
   35|  41.1k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 41.1k, False: 0]
  ------------------
   36|  41.1k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 41.1k, False: 0]
  ------------------
   37|  41.1k|    tuple->ob_item[index] = value;
   38|  41.1k|}
codegen.c:PyTuple_SET_ITEM:
   33|  23.7k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  23.7k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  23.7k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  23.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 23.7k, False: 0]
  ------------------
   35|  23.7k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 23.7k, False: 0]
  ------------------
   36|  23.7k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 23.7k, False: 0]
  ------------------
   37|  23.7k|    tuple->ob_item[index] = value;
   38|  23.7k|}
compile.c:PyTuple_GET_SIZE:
   23|  2.63k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  2.63k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  2.63k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  2.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 2.63k, False: 0]
  ------------------
   25|  2.63k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  2.63k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.63k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  2.63k|}
flowgraph.c:PyTuple_GET_SIZE:
   23|   540k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|   540k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   540k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   540k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 540k, False: 0]
  ------------------
   25|   540k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|   540k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   540k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   540k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|   540k|}
flowgraph.c:PyTuple_SET_ITEM:
   33|  90.7k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  90.7k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  90.7k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  90.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 90.7k, False: 0]
  ------------------
   35|  90.7k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 90.7k, False: 0]
  ------------------
   36|  90.7k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 90.7k, False: 0]
  ------------------
   37|  90.7k|    tuple->ob_item[index] = value;
   38|  90.7k|}
getargs.c:PyTuple_GET_SIZE:
   23|  68.6k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  68.6k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  68.6k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  68.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 68.6k, False: 0]
  ------------------
   25|  68.6k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  68.6k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  68.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  68.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  68.6k|}
import.c:PyTuple_GET_SIZE:
   23|      6|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|      6|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      6|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 6, False: 0]
  ------------------
   25|      6|    return Py_SIZE(tuple);
  ------------------
  |  |  214|      6|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|      6|}
initconfig.c:PyTuple_GET_SIZE:
   23|      6|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|      6|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      6|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 6, False: 0]
  ------------------
   25|      6|    return Py_SIZE(tuple);
  ------------------
  |  |  214|      6|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|      6|}
initconfig.c:PyTuple_SET_ITEM:
   33|      2|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|      2|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      2|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 2, False: 0]
  ------------------
   35|      2|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 2, False: 0]
  ------------------
   36|      2|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 2, False: 0]
  ------------------
   37|      2|    tuple->ob_item[index] = value;
   38|      2|}
marshal.c:PyTuple_SET_ITEM:
   33|  48.6k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  48.6k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  48.6k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 48.6k, False: 0]
  ------------------
   35|  48.6k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 48.6k, False: 0]
  ------------------
   36|  48.6k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 48.6k, False: 0]
  ------------------
   37|  48.6k|    tuple->ob_item[index] = value;
   38|  48.6k|}
modsupport.c:PyTuple_SET_ITEM:
   33|   154k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|   154k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   154k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   154k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 154k, False: 0]
  ------------------
   35|   154k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 154k, False: 0]
  ------------------
   36|   154k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 154k, False: 0]
  ------------------
   37|   154k|    tuple->ob_item[index] = value;
   38|   154k|}
specialize.c:PyTuple_GET_SIZE:
   23|    144|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    144|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    144|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 144, False: 0]
  ------------------
   25|    144|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    144|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    144|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    144|}
sysmodule.c:PyTuple_SET_ITEM:
   33|    594|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    594|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    594|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    594|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 594, False: 0]
  ------------------
   35|    594|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 594, False: 0]
  ------------------
   36|    594|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 594, False: 0]
  ------------------
   37|    594|    tuple->ob_item[index] = value;
   38|    594|}
_collectionsmodule.c:PyTuple_GET_SIZE:
   23|     25|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|     25|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|     25|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 25, False: 0]
  ------------------
   25|     25|    return Py_SIZE(tuple);
  ------------------
  |  |  214|     25|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|     25|}
fileio.c:PyTuple_GET_SIZE:
   23|     99|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|     99|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|     99|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 99, False: 0]
  ------------------
   25|     99|    return Py_SIZE(tuple);
  ------------------
  |  |  214|     99|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|     99|}
bufferedio.c:PyTuple_GET_SIZE:
   23|     99|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|     99|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|     99|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 99, False: 0]
  ------------------
   25|     99|    return Py_SIZE(tuple);
  ------------------
  |  |  214|     99|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|     99|}
textio.c:PyTuple_GET_SIZE:
   23|      6|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|      6|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      6|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 6, False: 0]
  ------------------
   25|      6|    return Py_SIZE(tuple);
  ------------------
  |  |  214|      6|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|      6|}
itertoolsmodule.c:PyTuple_SET_ITEM:
   33|    291|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    291|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    291|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    291|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 291, False: 0]
  ------------------
   35|    291|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 291, False: 0]
  ------------------
   36|    291|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 291, False: 0]
  ------------------
   37|    291|    tuple->ob_item[index] = value;
   38|    291|}
itertoolsmodule.c:PyTuple_GET_SIZE:
   23|    462|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    462|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    462|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    462|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 462, False: 0]
  ------------------
   25|    462|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    462|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    462|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    462|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    462|}
sre.c:PyTuple_GET_SIZE:
   23|     12|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|     12|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|     12|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 12, False: 0]
  ------------------
   25|     12|    return Py_SIZE(tuple);
  ------------------
  |  |  214|     12|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|     12|}
_abc.c:PyTuple_GET_SIZE:
   23|  1.02k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  1.02k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.02k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 1.02k, False: 0]
  ------------------
   25|  1.02k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  1.02k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  1.02k|}
_functoolsmodule.c:PyTuple_GET_SIZE:
   23|      3|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|      3|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      3|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 3, False: 0]
  ------------------
   25|      3|    return Py_SIZE(tuple);
  ------------------
  |  |  214|      3|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|      3|}
_functoolsmodule.c:PyTuple_SET_ITEM:
   33|      3|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|      3|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      3|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 3, False: 0]
  ------------------
   35|      3|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 3, False: 0]
  ------------------
   36|      3|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 3, False: 0]
  ------------------
   37|      3|    tuple->ob_item[index] = value;
   38|      3|}
getpath.c:PyTuple_GET_SIZE:
   23|     24|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|     24|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|     24|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 24, False: 0]
  ------------------
   25|     24|    return Py_SIZE(tuple);
  ------------------
  |  |  214|     24|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|     24|}
abstract.c:PyTuple_GET_SIZE:
   23|    109|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    109|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    109|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    109|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 109, False: 0]
  ------------------
   25|    109|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    109|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    109|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    109|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    109|}
bytearrayobject.c:PyTuple_GET_SIZE:
   23|   239k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|   239k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   239k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 239k, False: 0]
  ------------------
   25|   239k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|   239k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|   239k|}
bytesobject.c:PyTuple_GET_SIZE:
   23|  19.4k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  19.4k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  19.4k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  19.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 19.4k, False: 0]
  ------------------
   25|  19.4k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  19.4k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  19.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  19.4k|}
call.c:PyTuple_GET_SIZE:
   23|  94.7k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|  94.7k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  94.7k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  94.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 94.7k, False: 0]
  ------------------
   25|  94.7k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|  94.7k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  94.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  94.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|  94.7k|}
call.c:PyTuple_SET_ITEM:
   33|  1.38k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  1.38k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.38k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 1.38k, False: 0]
  ------------------
   35|  1.38k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 1.38k, False: 0]
  ------------------
   36|  1.38k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 1.38k, False: 0]
  ------------------
   37|  1.38k|    tuple->ob_item[index] = value;
   38|  1.38k|}
codeobject.c:PyTuple_SET_ITEM:
   33|   115M|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|   115M|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   115M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   115M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 115M, False: 0]
  ------------------
   35|   115M|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 115M, False: 0]
  ------------------
   36|   115M|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 115M, False: 0]
  ------------------
   37|   115M|    tuple->ob_item[index] = value;
   38|   115M|}
codeobject.c:PyTuple_GET_SIZE:
   23|   999k|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|   999k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   999k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   999k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 999k, False: 0]
  ------------------
   25|   999k|    return Py_SIZE(tuple);
  ------------------
  |  |  214|   999k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   999k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   999k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|   999k|}
descrobject.c:PyTuple_GET_SIZE:
   23|    591|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|    591|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    591|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    591|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 591, False: 0]
  ------------------
   25|    591|    return Py_SIZE(tuple);
  ------------------
  |  |  214|    591|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    591|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    591|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|    591|}
enumobject.c:PyTuple_SET_ITEM:
   33|  1.24M|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|  1.24M|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.24M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 1.24M, False: 0]
  ------------------
   35|  1.24M|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 1.24M, False: 0]
  ------------------
   36|  1.24M|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 1.24M, False: 0]
  ------------------
   37|  1.24M|    tuple->ob_item[index] = value;
   38|  1.24M|}
frameobject.c:PyTuple_GET_SIZE:
   23|      2|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|      2|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|      2|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 2, False: 0]
  ------------------
   25|      2|    return Py_SIZE(tuple);
  ------------------
  |  |  214|      2|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|      2|}
memoryobject.c:PyTuple_GET_SIZE:
   23|     95|static inline Py_ssize_t PyTuple_GET_SIZE(PyObject *op) {
   24|     95|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|     95|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (24:28): [True: 95, False: 0]
  ------------------
   25|     95|    return Py_SIZE(tuple);
  ------------------
  |  |  214|     95|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   26|     95|}
Python-ast.c:PyTuple_SET_ITEM:
   33|    230|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|    230|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|    230|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    230|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 230, False: 0]
  ------------------
   35|    230|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 230, False: 0]
  ------------------
   36|    230|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 230, False: 0]
  ------------------
   37|    230|    tuple->ob_item[index] = value;
   38|    230|}
assemble.c:PyTuple_SET_ITEM:
   33|   200k|PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
   34|   200k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|   200k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   200k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (34:28): [True: 200k, False: 0]
  ------------------
   35|   200k|    assert(0 <= index);
  ------------------
  |  Branch (35:5): [True: 200k, False: 0]
  ------------------
   36|   200k|    assert(index < Py_SIZE(tuple));
  ------------------
  |  Branch (36:5): [True: 200k, False: 0]
  ------------------
   37|   200k|    tuple->ob_item[index] = value;
   38|   200k|}

exceptions.c:PyUnicode_GET_LENGTH:
  296|     34|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|     34|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|     34|    (assert(PyUnicode_Check(op)), \
  |  |  187|     34|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 34, False: 0]
  ------------------
  298|     34|}
listobject.c:PyUnicode_GET_LENGTH:
  296|  1.01M|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  1.01M|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  1.01M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.01M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.01M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 1.01M, False: 0]
  ------------------
  298|  1.01M|}
listobject.c:_PyUnicode_DATA:
  278|   937k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   937k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   937k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   937k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   937k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 937k, False: 0]
  |  |  ------------------
  ------------------
  280|   937k|        return _PyUnicode_COMPACT_DATA(op);
  281|   937k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   937k|}
listobject.c:PyUnicode_IS_COMPACT:
  231|   937k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   937k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   937k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   937k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   937k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 937k, False: 0]
  ------------------
  233|   937k|}
listobject.c:_PyUnicode_COMPACT_DATA:
  261|   937k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   937k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   937k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   937k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   937k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 914k, False: 23.1k]
  |  |  ------------------
  ------------------
  263|   914k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  1.82M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 914k, False: 0]
  |  |  ------------------
  ------------------
  264|   914k|    }
  265|  23.1k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|  46.2k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 23.1k, False: 0]
  |  |  ------------------
  ------------------
  266|  23.1k|}
listobject.c:PyUnicode_IS_ASCII:
  224|   937k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   937k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   937k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   937k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   937k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 937k, False: 0]
  ------------------
  226|   937k|}
longobject.c:PyUnicode_GET_LENGTH:
  296|    132|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|    132|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|    132|    (assert(PyUnicode_Check(op)), \
  |  |  187|    132|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 132, False: 0]
  ------------------
  298|    132|}
longobject.c:PyUnstable_Unicode_GET_CACHED_HASH:
  303|    132|PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) {
  304|       |#ifdef Py_GIL_DISABLED
  305|       |    return _Py_atomic_load_ssize_relaxed(&_PyASCIIObject_CAST(op)->hash);
  306|       |#else
  307|    132|    return _PyASCIIObject_CAST(op)->hash;
  ------------------
  |  |  186|    132|    (assert(PyUnicode_Check(op)), \
  |  |  187|    132|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (307:12): [True: 132, False: 0]
  ------------------
  308|    132|#endif
  309|    132|}
longobject.c:PyUnicode_CHECK_INTERNED:
  207|    132|static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) {
  208|       |#ifdef Py_GIL_DISABLED
  209|       |    return _Py_atomic_load_uint8_relaxed(&_PyASCIIObject_CAST(op)->state.interned);
  210|       |#else
  211|    132|    return _PyASCIIObject_CAST(op)->state.interned;
  ------------------
  |  |  186|    132|    (assert(PyUnicode_Check(op)), \
  |  |  187|    132|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (211:12): [True: 132, False: 0]
  ------------------
  212|    132|#endif
  213|    132|}
longobject.c:_PyUnicode_DATA:
  278|   205k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   205k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   205k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   205k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   205k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 205k, False: 0]
  |  |  ------------------
  ------------------
  280|   205k|        return _PyUnicode_COMPACT_DATA(op);
  281|   205k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   205k|}
longobject.c:PyUnicode_IS_COMPACT:
  231|   205k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   205k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   205k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   205k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   205k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 205k, False: 0]
  ------------------
  233|   205k|}
longobject.c:_PyUnicode_COMPACT_DATA:
  261|   205k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   205k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   205k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   205k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   205k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 205k, False: 0]
  |  |  ------------------
  ------------------
  263|   205k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|   410k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 205k, False: 0]
  |  |  ------------------
  ------------------
  264|   205k|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
longobject.c:PyUnicode_IS_ASCII:
  224|   206k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   206k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   206k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   206k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   206k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 206k, False: 0]
  ------------------
  226|   206k|}
dictobject.c:PyUnstable_Unicode_GET_CACHED_HASH:
  303|  18.1M|PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) {
  304|       |#ifdef Py_GIL_DISABLED
  305|       |    return _Py_atomic_load_ssize_relaxed(&_PyASCIIObject_CAST(op)->hash);
  306|       |#else
  307|  18.1M|    return _PyASCIIObject_CAST(op)->hash;
  ------------------
  |  |  186|  18.1M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  18.1M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  18.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (307:12): [True: 18.1M, False: 0]
  ------------------
  308|  18.1M|#endif
  309|  18.1M|}
dictobject.c:PyUnicode_GET_LENGTH:
  296|   655k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   655k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   655k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   655k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   655k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 655k, False: 0]
  ------------------
  298|   655k|}
dictobject.c:_PyUnicode_DATA:
  278|   655k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   655k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   655k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   655k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   655k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 655k, False: 0]
  |  |  ------------------
  ------------------
  280|   655k|        return _PyUnicode_COMPACT_DATA(op);
  281|   655k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   655k|}
dictobject.c:PyUnicode_IS_COMPACT:
  231|   655k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   655k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   655k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   655k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   655k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 655k, False: 0]
  ------------------
  233|   655k|}
dictobject.c:_PyUnicode_COMPACT_DATA:
  261|   655k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   655k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   655k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   655k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   655k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 551k, False: 103k]
  |  |  ------------------
  ------------------
  263|   551k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  1.10M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 551k, False: 0]
  |  |  ------------------
  ------------------
  264|   551k|    }
  265|   103k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|   207k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 103k, False: 0]
  |  |  ------------------
  ------------------
  266|   103k|}
dictobject.c:PyUnicode_IS_ASCII:
  224|   655k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   655k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   655k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   655k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   655k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 655k, False: 0]
  ------------------
  226|   655k|}
setobject.c:PyUnicode_GET_LENGTH:
  296|   116k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   116k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   116k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   116k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   116k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 116k, False: 0]
  ------------------
  298|   116k|}
setobject.c:_PyUnicode_DATA:
  278|   116k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   116k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   116k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   116k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   116k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 116k, False: 0]
  |  |  ------------------
  ------------------
  280|   116k|        return _PyUnicode_COMPACT_DATA(op);
  281|   116k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   116k|}
setobject.c:PyUnicode_IS_COMPACT:
  231|   116k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   116k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   116k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   116k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   116k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 116k, False: 0]
  ------------------
  233|   116k|}
setobject.c:_PyUnicode_COMPACT_DATA:
  261|   116k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   116k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   116k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   116k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   116k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 214, False: 115k]
  |  |  ------------------
  ------------------
  263|    214|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|    428|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 214, False: 0]
  |  |  ------------------
  ------------------
  264|    214|    }
  265|   115k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|   231k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 115k, False: 0]
  |  |  ------------------
  ------------------
  266|   115k|}
setobject.c:PyUnicode_IS_ASCII:
  224|   116k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   116k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   116k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   116k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   116k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 116k, False: 0]
  ------------------
  226|   116k|}
typeobject.c:PyUnicode_CHECK_INTERNED:
  207|  6.10M|static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) {
  208|       |#ifdef Py_GIL_DISABLED
  209|       |    return _Py_atomic_load_uint8_relaxed(&_PyASCIIObject_CAST(op)->state.interned);
  210|       |#else
  211|  6.10M|    return _PyASCIIObject_CAST(op)->state.interned;
  ------------------
  |  |  186|  6.10M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  6.10M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  6.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (211:12): [True: 6.10M, False: 0]
  ------------------
  212|  6.10M|#endif
  213|  6.10M|}
typeobject.c:PyUnstable_Unicode_GET_CACHED_HASH:
  303|  82.7k|PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) {
  304|       |#ifdef Py_GIL_DISABLED
  305|       |    return _Py_atomic_load_ssize_relaxed(&_PyASCIIObject_CAST(op)->hash);
  306|       |#else
  307|  82.7k|    return _PyASCIIObject_CAST(op)->hash;
  ------------------
  |  |  186|  82.7k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  82.7k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  82.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (307:12): [True: 82.7k, False: 0]
  ------------------
  308|  82.7k|#endif
  309|  82.7k|}
typeobject.c:PyUnicode_GET_LENGTH:
  296|  49.6k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  49.6k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  49.6k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  49.6k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  49.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 49.6k, False: 0]
  ------------------
  298|  49.6k|}
typeobject.c:_PyUnicode_DATA:
  278|    343|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|    343|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|    343|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    343|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    343|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 343, False: 0]
  |  |  ------------------
  ------------------
  280|    343|        return _PyUnicode_COMPACT_DATA(op);
  281|    343|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|    343|}
typeobject.c:PyUnicode_IS_COMPACT:
  231|    343|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|    343|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|    343|    (assert(PyUnicode_Check(op)), \
  |  |  187|    343|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    343|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 343, False: 0]
  ------------------
  233|    343|}
typeobject.c:_PyUnicode_COMPACT_DATA:
  261|    343|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|    343|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|    343|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    343|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    343|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 343, False: 0]
  |  |  ------------------
  ------------------
  263|    343|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|    686|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 343, False: 0]
  |  |  ------------------
  ------------------
  264|    343|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
typeobject.c:PyUnicode_IS_ASCII:
  224|    343|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|    343|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|    343|    (assert(PyUnicode_Check(op)), \
  |  |  187|    343|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    343|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 343, False: 0]
  ------------------
  226|    343|}
unicode_formatter.c:_PyUnicode_DATA:
  278|    264|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|    264|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|    264|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    264|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    264|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 264, False: 0]
  |  |  ------------------
  ------------------
  280|    264|        return _PyUnicode_COMPACT_DATA(op);
  281|    264|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|    264|}
unicode_formatter.c:PyUnicode_IS_COMPACT:
  231|    264|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|    264|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|    264|    (assert(PyUnicode_Check(op)), \
  |  |  187|    264|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    264|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 264, False: 0]
  ------------------
  233|    264|}
unicode_formatter.c:_PyUnicode_COMPACT_DATA:
  261|    264|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|    264|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|    264|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    264|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    264|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 264, False: 0]
  |  |  ------------------
  ------------------
  263|    264|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|    528|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 264, False: 0]
  |  |  ------------------
  ------------------
  264|    264|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
unicode_formatter.c:PyUnicode_IS_ASCII:
  224|    264|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|    264|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|    264|    (assert(PyUnicode_Check(op)), \
  |  |  187|    264|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    264|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 264, False: 0]
  ------------------
  226|    264|}
unicode_formatter.c:PyUnicode_READ:
  342|  1.45k|{
  343|  1.45k|    assert(index >= 0);
  ------------------
  |  Branch (343:5): [True: 1.45k, False: 0]
  ------------------
  344|  1.45k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (344:9): [True: 1.45k, False: 0]
  ------------------
  345|  1.45k|        return _Py_STATIC_CAST(const Py_UCS1*, data)[index];
  ------------------
  |  |   34|  1.45k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  346|  1.45k|    }
  347|      0|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (347:9): [True: 0, False: 0]
  ------------------
  348|      0|        return _Py_STATIC_CAST(const Py_UCS2*, data)[index];
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  349|      0|    }
  350|      0|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (350:5): [True: 0, False: 0]
  ------------------
  351|      0|    return _Py_STATIC_CAST(const Py_UCS4*, data)[index];
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  352|      0|}
unicode_writer.c:PyUnstable_Unicode_GET_CACHED_HASH:
  303|   730k|PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) {
  304|       |#ifdef Py_GIL_DISABLED
  305|       |    return _Py_atomic_load_ssize_relaxed(&_PyASCIIObject_CAST(op)->hash);
  306|       |#else
  307|   730k|    return _PyASCIIObject_CAST(op)->hash;
  ------------------
  |  |  186|   730k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   730k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   730k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (307:12): [True: 730k, False: 0]
  ------------------
  308|   730k|#endif
  309|   730k|}
unicode_writer.c:PyUnicode_CHECK_INTERNED:
  207|   730k|static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) {
  208|       |#ifdef Py_GIL_DISABLED
  209|       |    return _Py_atomic_load_uint8_relaxed(&_PyASCIIObject_CAST(op)->state.interned);
  210|       |#else
  211|   730k|    return _PyASCIIObject_CAST(op)->state.interned;
  ------------------
  |  |  186|   730k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   730k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   730k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (211:12): [True: 730k, False: 0]
  ------------------
  212|   730k|#endif
  213|   730k|}
unicode_writer.c:PyUnicode_WRITE:
  318|  10.0k|{
  319|  10.0k|    assert(index >= 0);
  ------------------
  |  Branch (319:5): [True: 10.0k, False: 0]
  ------------------
  320|  10.0k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (320:9): [True: 9.36k, False: 663]
  ------------------
  321|  9.36k|        assert(value <= 0xffU);
  ------------------
  |  Branch (321:9): [True: 9.36k, False: 0]
  ------------------
  322|  9.36k|        _Py_STATIC_CAST(Py_UCS1*, data)[index] = _Py_STATIC_CAST(Py_UCS1, value);
  ------------------
  |  |   34|  9.36k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                      _Py_STATIC_CAST(Py_UCS1*, data)[index] = _Py_STATIC_CAST(Py_UCS1, value);
  ------------------
  |  |   34|  9.36k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  323|  9.36k|    }
  324|    663|    else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (324:14): [True: 244, False: 419]
  ------------------
  325|    244|        assert(value <= 0xffffU);
  ------------------
  |  Branch (325:9): [True: 244, False: 0]
  ------------------
  326|    244|        _Py_STATIC_CAST(Py_UCS2*, data)[index] = _Py_STATIC_CAST(Py_UCS2, value);
  ------------------
  |  |   34|    244|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                      _Py_STATIC_CAST(Py_UCS2*, data)[index] = _Py_STATIC_CAST(Py_UCS2, value);
  ------------------
  |  |   34|    244|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  327|    244|    }
  328|    419|    else {
  329|    419|        assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (329:9): [True: 419, False: 0]
  ------------------
  330|    419|        assert(value <= 0x10ffffU);
  ------------------
  |  Branch (330:9): [True: 419, False: 0]
  ------------------
  331|    419|        _Py_STATIC_CAST(Py_UCS4*, data)[index] = value;
  ------------------
  |  |   34|    419|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  332|    419|    }
  333|  10.0k|}
unicode_writer.c:PyUnicode_GET_LENGTH:
  296|  1.29M|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  1.29M|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  1.29M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.29M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.29M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 1.29M, False: 0]
  ------------------
  298|  1.29M|}
unicode_writer.c:PyUnicode_MAX_CHAR_VALUE:
  387|   877k|{
  388|   877k|    int kind;
  389|       |
  390|   877k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   877k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   877k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   877k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 496k, False: 381k]
  |  |  ------------------
  ------------------
  391|   496k|        return 0x7fU;
  392|   496k|    }
  393|       |
  394|   381k|    kind = PyUnicode_KIND(op);
  ------------------
  |  |  258|   381k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   762k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 381k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|   381k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (395:9): [True: 102k, False: 278k]
  ------------------
  396|   102k|       return 0xffU;
  397|   102k|    }
  398|   278k|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (398:9): [True: 254k, False: 24.3k]
  ------------------
  399|   254k|        return 0xffffU;
  400|   254k|    }
  401|   278k|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (401:5): [True: 24.3k, False: 0]
  ------------------
  402|  24.3k|    return 0x10ffffU;
  403|  24.3k|}
unicode_writer.c:PyUnicode_IS_ASCII:
  224|  1.45M|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  1.45M|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  1.45M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.45M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.45M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 1.45M, False: 0]
  ------------------
  226|  1.45M|}
unicode_writer.c:_PyUnicode_DATA:
  278|   581k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   581k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   581k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   581k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   581k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 581k, False: 0]
  |  |  ------------------
  ------------------
  280|   581k|        return _PyUnicode_COMPACT_DATA(op);
  281|   581k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   581k|}
unicode_writer.c:PyUnicode_IS_COMPACT:
  231|   581k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   581k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   581k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   581k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   581k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 581k, False: 0]
  ------------------
  233|   581k|}
unicode_writer.c:_PyUnicode_COMPACT_DATA:
  261|   581k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   581k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   581k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   581k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   581k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 280k, False: 301k]
  |  |  ------------------
  ------------------
  263|   280k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|   561k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 280k, False: 0]
  |  |  ------------------
  ------------------
  264|   280k|    }
  265|   301k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|   602k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 301k, False: 0]
  |  |  ------------------
  ------------------
  266|   301k|}
unicodeobject.c:PyUnicode_CHECK_INTERNED:
  207|  4.14M|static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) {
  208|       |#ifdef Py_GIL_DISABLED
  209|       |    return _Py_atomic_load_uint8_relaxed(&_PyASCIIObject_CAST(op)->state.interned);
  210|       |#else
  211|  4.14M|    return _PyASCIIObject_CAST(op)->state.interned;
  ------------------
  |  |  186|  4.14M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  4.14M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  4.14M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (211:12): [True: 4.14M, False: 0]
  ------------------
  212|  4.14M|#endif
  213|  4.14M|}
unicodeobject.c:_PyUnicode_DATA:
  278|   145M|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   145M|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   145M|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   145M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   145M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 145M, False: 7]
  |  |  ------------------
  ------------------
  280|   145M|        return _PyUnicode_COMPACT_DATA(op);
  281|   145M|    }
  282|      7|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   145M|}
unicodeobject.c:_PyUnicode_COMPACT_DATA:
  261|   145M|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   145M|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   145M|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   145M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   145M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 16.4M, False: 129M]
  |  |  ------------------
  ------------------
  263|  16.4M|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  32.8M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 16.4M, False: 0]
  |  |  ------------------
  ------------------
  264|  16.4M|    }
  265|   129M|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|   258M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 129M, False: 0]
  |  |  ------------------
  ------------------
  266|   129M|}
unicodeobject.c:_PyUnicode_NONCOMPACT_DATA:
  268|      7|static inline void* _PyUnicode_NONCOMPACT_DATA(PyObject *op) {
  269|      7|    void *data;
  270|      7|    assert(!PyUnicode_IS_COMPACT(op));
  ------------------
  |  Branch (270:5): [True: 7, False: 0]
  ------------------
  271|      7|    data = _PyUnicodeObject_CAST(op)->data.any;
  ------------------
  |  |  192|      7|    (assert(PyUnicode_Check(op)), \
  |  |  193|      7|     _Py_CAST(PyUnicodeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (271:12): [True: 7, False: 0]
  ------------------
  272|      7|    assert(data != NULL);
  ------------------
  |  Branch (272:5): [True: 7, False: 0]
  ------------------
  273|      7|    return data;
  274|      7|}
unicodeobject.c:PyUnicode_READ:
  342|   209M|{
  343|   209M|    assert(index >= 0);
  ------------------
  |  Branch (343:5): [True: 209M, False: 0]
  ------------------
  344|   209M|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (344:9): [True: 45.4M, False: 164M]
  ------------------
  345|  45.4M|        return _Py_STATIC_CAST(const Py_UCS1*, data)[index];
  ------------------
  |  |   34|  45.4M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  346|  45.4M|    }
  347|   164M|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (347:9): [True: 150M, False: 13.6M]
  ------------------
  348|   150M|        return _Py_STATIC_CAST(const Py_UCS2*, data)[index];
  ------------------
  |  |   34|   150M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  349|   150M|    }
  350|   164M|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (350:5): [True: 13.6M, False: 0]
  ------------------
  351|  13.6M|    return _Py_STATIC_CAST(const Py_UCS4*, data)[index];
  ------------------
  |  |   34|  13.6M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  352|  13.6M|}
unicodeobject.c:PyUnicode_GET_LENGTH:
  296|  91.6M|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  91.6M|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  91.6M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  91.6M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  91.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 91.6M, False: 0]
  ------------------
  298|  91.6M|}
unicodeobject.c:PyUnicode_IS_COMPACT:
  231|   172M|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   172M|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   172M|    (assert(PyUnicode_Check(op)), \
  |  |  187|   172M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   172M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 172M, False: 0]
  ------------------
  233|   172M|}
unicodeobject.c:PyUnicode_IS_ASCII:
  224|   151M|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   151M|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   151M|    (assert(PyUnicode_Check(op)), \
  |  |  187|   151M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   151M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 151M, False: 0]
  ------------------
  226|   151M|}
unicodeobject.c:PyUnicode_IS_COMPACT_ASCII:
  238|  24.4M|static inline int PyUnicode_IS_COMPACT_ASCII(PyObject *op) {
  239|  48.9M|    return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
  ------------------
  |  |  186|  24.4M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  24.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  24.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
                  return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
  ------------------
  |  |  234|  3.26M|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.26M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.26M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 3.26M, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (239:13): [True: 24.4M, False: 0]
  |  Branch (239:13): [True: 3.26M, False: 21.2M]
  ------------------
  240|  24.4M|}
unicodeobject.c:PyUnicode_WRITE:
  318|  2.55M|{
  319|  2.55M|    assert(index >= 0);
  ------------------
  |  Branch (319:5): [True: 2.55M, False: 0]
  ------------------
  320|  2.55M|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (320:9): [True: 1.18M, False: 1.37M]
  ------------------
  321|  1.18M|        assert(value <= 0xffU);
  ------------------
  |  Branch (321:9): [True: 1.18M, False: 0]
  ------------------
  322|  1.18M|        _Py_STATIC_CAST(Py_UCS1*, data)[index] = _Py_STATIC_CAST(Py_UCS1, value);
  ------------------
  |  |   34|  1.18M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                      _Py_STATIC_CAST(Py_UCS1*, data)[index] = _Py_STATIC_CAST(Py_UCS1, value);
  ------------------
  |  |   34|  1.18M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  323|  1.18M|    }
  324|  1.37M|    else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (324:14): [True: 880k, False: 490k]
  ------------------
  325|   880k|        assert(value <= 0xffffU);
  ------------------
  |  Branch (325:9): [True: 880k, False: 0]
  ------------------
  326|   880k|        _Py_STATIC_CAST(Py_UCS2*, data)[index] = _Py_STATIC_CAST(Py_UCS2, value);
  ------------------
  |  |   34|   880k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
                      _Py_STATIC_CAST(Py_UCS2*, data)[index] = _Py_STATIC_CAST(Py_UCS2, value);
  ------------------
  |  |   34|   880k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  327|   880k|    }
  328|   490k|    else {
  329|   490k|        assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (329:9): [True: 490k, False: 0]
  ------------------
  330|   490k|        assert(value <= 0x10ffffU);
  ------------------
  |  Branch (330:9): [True: 490k, False: 0]
  ------------------
  331|   490k|        _Py_STATIC_CAST(Py_UCS4*, data)[index] = value;
  ------------------
  |  |   34|   490k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  332|   490k|    }
  333|  2.55M|}
unicodeobject.c:PyUnstable_Unicode_GET_CACHED_HASH:
  303|  3.26M|PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) {
  304|       |#ifdef Py_GIL_DISABLED
  305|       |    return _Py_atomic_load_ssize_relaxed(&_PyASCIIObject_CAST(op)->hash);
  306|       |#else
  307|  3.26M|    return _PyASCIIObject_CAST(op)->hash;
  ------------------
  |  |  186|  3.26M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  3.26M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.26M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (307:12): [True: 3.26M, False: 0]
  ------------------
  308|  3.26M|#endif
  309|  3.26M|}
unicodeobject.c:PyUnicode_MAX_CHAR_VALUE:
  387|  1.73M|{
  388|  1.73M|    int kind;
  389|       |
  390|  1.73M|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  1.73M|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 811k, False: 918k]
  |  |  ------------------
  ------------------
  391|   811k|        return 0x7fU;
  392|   811k|    }
  393|       |
  394|   918k|    kind = PyUnicode_KIND(op);
  ------------------
  |  |  258|   918k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.83M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 918k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|   918k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (395:9): [True: 62.0k, False: 856k]
  ------------------
  396|  62.0k|       return 0xffU;
  397|  62.0k|    }
  398|   856k|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (398:9): [True: 769k, False: 87.5k]
  ------------------
  399|   769k|        return 0xffffU;
  400|   769k|    }
  401|   856k|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (401:5): [True: 87.5k, False: 0]
  ------------------
  402|  87.5k|    return 0x10ffffU;
  403|  87.5k|}
unicodeobject.c:Py_UNICODE_IS_LOW_SURROGATE:
   22|  1.27k|static inline int Py_UNICODE_IS_LOW_SURROGATE(Py_UCS4 ch) {
   23|  1.27k|    return (0xDC00 <= ch && ch <= 0xDFFF);
  ------------------
  |  Branch (23:13): [True: 1.07k, False: 197]
  |  Branch (23:29): [True: 1.05k, False: 17]
  ------------------
   24|  1.27k|}
unicodeobject.c:Py_UNICODE_JOIN_SURROGATES:
   27|    528|static inline Py_UCS4 Py_UNICODE_JOIN_SURROGATES(Py_UCS4 high, Py_UCS4 low)  {
   28|    528|    assert(Py_UNICODE_IS_HIGH_SURROGATE(high));
  ------------------
  |  Branch (28:5): [True: 528, False: 0]
  ------------------
   29|    528|    assert(Py_UNICODE_IS_LOW_SURROGATE(low));
  ------------------
  |  Branch (29:5): [True: 528, False: 0]
  ------------------
   30|    528|    return 0x10000 + (((high & 0x03FF) << 10) | (low & 0x03FF));
   31|    528|}
unicodeobject.c:Py_UNICODE_IS_HIGH_SURROGATE:
   19|  6.21k|static inline int Py_UNICODE_IS_HIGH_SURROGATE(Py_UCS4 ch) {
   20|  6.21k|    return (0xD800 <= ch && ch <= 0xDBFF);
  ------------------
  |  Branch (20:13): [True: 4.08k, False: 2.12k]
  |  Branch (20:29): [True: 1.58k, False: 2.50k]
  ------------------
   21|  6.21k|}
unicodeobject.c:Py_UNICODE_IS_SURROGATE:
   16|   394k|static inline int Py_UNICODE_IS_SURROGATE(Py_UCS4 ch) {
   17|   394k|    return (0xD800 <= ch && ch <= 0xDFFF);
  ------------------
  |  Branch (17:13): [True: 239k, False: 154k]
  |  Branch (17:29): [True: 277, False: 239k]
  ------------------
   18|   394k|}
unicodeobject.c:Py_UNICODE_ISSPACE:
  742|     52|static inline int Py_UNICODE_ISSPACE(Py_UCS4 ch) {
  743|     52|    if (ch < 128) {
  ------------------
  |  Branch (743:9): [True: 52, False: 0]
  ------------------
  744|     52|        return _Py_ascii_whitespace[ch];
  745|     52|    }
  746|      0|    return _PyUnicode_IsWhitespace(ch);
  747|     52|}
bltinmodule.c:PyUnicode_GET_LENGTH:
  296|  30.3M|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  30.3M|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  30.3M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  30.3M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  30.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 30.3M, False: 0]
  ------------------
  298|  30.3M|}
bltinmodule.c:PyUnicode_READ_CHAR:
  363|  15.1M|{
  364|  15.1M|    int kind;
  365|       |
  366|  15.1M|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 15.1M, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  15.1M|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 15.1M, False: 0]
  ------------------
  369|       |
  370|  15.1M|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  15.1M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  30.3M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 15.1M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  15.1M|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 4.04M, False: 11.1M]
  ------------------
  372|  4.04M|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  4.04M|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  4.04M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  4.04M|    }
  374|  11.1M|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 10.3M, False: 777k]
  ------------------
  375|  10.3M|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|  10.3M|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  10.3M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|  10.3M|    }
  377|  11.1M|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 777k, False: 0]
  ------------------
  378|   777k|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|   777k|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   777k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|   777k|}
bltinmodule.c:_PyUnicode_DATA:
  278|  15.1M|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  15.1M|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  15.1M|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.1M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 15.1M, False: 0]
  |  |  ------------------
  ------------------
  280|  15.1M|        return _PyUnicode_COMPACT_DATA(op);
  281|  15.1M|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  15.1M|}
bltinmodule.c:PyUnicode_IS_COMPACT:
  231|  15.1M|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  15.1M|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  15.1M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  15.1M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  15.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 15.1M, False: 0]
  ------------------
  233|  15.1M|}
bltinmodule.c:_PyUnicode_COMPACT_DATA:
  261|  15.1M|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  15.1M|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  15.1M|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.1M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 3.79M, False: 11.3M]
  |  |  ------------------
  ------------------
  263|  3.79M|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  7.58M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 3.79M, False: 0]
  |  |  ------------------
  ------------------
  264|  3.79M|    }
  265|  11.3M|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|  22.7M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 11.3M, False: 0]
  |  |  ------------------
  ------------------
  266|  11.3M|}
bltinmodule.c:PyUnicode_IS_ASCII:
  224|  15.1M|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  15.1M|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  15.1M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  15.1M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  15.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 15.1M, False: 0]
  ------------------
  226|  15.1M|}
ceval.c:PyUnicode_IS_COMPACT_ASCII:
  238|  2.23k|static inline int PyUnicode_IS_COMPACT_ASCII(PyObject *op) {
  239|  4.46k|    return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
  ------------------
  |  |  186|  2.23k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  2.23k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  2.23k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
                  return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
  ------------------
  |  |  234|  2.22k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 2.22k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (239:13): [True: 2.23k, False: 0]
  |  Branch (239:13): [True: 2.22k, False: 10]
  ------------------
  240|  2.23k|}
ceval.c:PyUnicode_IS_COMPACT:
  231|  12.3M|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  12.3M|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  12.3M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  12.3M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 12.3M, False: 0]
  ------------------
  233|  12.3M|}
ceval.c:PyUnicode_GET_LENGTH:
  296|  24.6M|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  24.6M|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  24.6M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  24.6M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  24.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 24.6M, False: 0]
  ------------------
  298|  24.6M|}
ceval.c:_PyUnicode_DATA:
  278|  12.3M|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  12.3M|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  12.3M|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 12.3M, False: 0]
  |  |  ------------------
  ------------------
  280|  12.3M|        return _PyUnicode_COMPACT_DATA(op);
  281|  12.3M|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  12.3M|}
ceval.c:_PyUnicode_COMPACT_DATA:
  261|  12.3M|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  12.3M|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  12.3M|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 2.21k, False: 12.3M]
  |  |  ------------------
  ------------------
  263|  2.21k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  4.43k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 2.21k, False: 0]
  |  |  ------------------
  ------------------
  264|  2.21k|    }
  265|  12.3M|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|  24.6M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 12.3M, False: 0]
  |  |  ------------------
  ------------------
  266|  12.3M|}
ceval.c:PyUnicode_IS_ASCII:
  224|  12.3M|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  12.3M|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  12.3M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  12.3M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 12.3M, False: 0]
  ------------------
  226|  12.3M|}
ceval.c:PyUnicode_READ_CHAR:
  363|  12.3M|{
  364|  12.3M|    int kind;
  365|       |
  366|  12.3M|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 12.3M, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  12.3M|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 12.3M, False: 0]
  ------------------
  369|       |
  370|  12.3M|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  12.3M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  24.6M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 12.3M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  12.3M|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 73.0k, False: 12.2M]
  ------------------
  372|  73.0k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  73.0k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  73.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  73.0k|    }
  374|  12.2M|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 11.4M, False: 768k]
  ------------------
  375|  11.4M|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|  11.4M|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  11.4M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|  11.4M|    }
  377|  12.2M|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 768k, False: 0]
  ------------------
  378|   768k|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|   768k|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   768k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|   768k|}
codegen.c:PyUnicode_GET_LENGTH:
  296|  14.2k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  14.2k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  14.2k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  14.2k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  14.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 14.2k, False: 0]
  ------------------
  298|  14.2k|}
codegen.c:PyUnicode_READ_CHAR:
  363|  4.22k|{
  364|  4.22k|    int kind;
  365|       |
  366|  4.22k|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 4.22k, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  4.22k|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 4.22k, False: 0]
  ------------------
  369|       |
  370|  4.22k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  4.22k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  8.44k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 4.22k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  4.22k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 3.52k, False: 699]
  ------------------
  372|  3.52k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  3.52k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  3.52k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  3.52k|    }
  374|    699|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 500, False: 199]
  ------------------
  375|    500|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|    500|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    500|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|    500|    }
  377|    699|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 199, False: 0]
  ------------------
  378|    199|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|    199|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    199|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|    199|}
codegen.c:_PyUnicode_DATA:
  278|  4.22k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  4.22k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  4.22k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 4.22k, False: 0]
  |  |  ------------------
  ------------------
  280|  4.22k|        return _PyUnicode_COMPACT_DATA(op);
  281|  4.22k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  4.22k|}
codegen.c:PyUnicode_IS_COMPACT:
  231|  4.22k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  4.22k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  4.22k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  4.22k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  4.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 4.22k, False: 0]
  ------------------
  233|  4.22k|}
codegen.c:_PyUnicode_COMPACT_DATA:
  261|  4.22k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  4.22k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  4.22k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 3.20k, False: 1.02k]
  |  |  ------------------
  ------------------
  263|  3.20k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  6.40k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 3.20k, False: 0]
  |  |  ------------------
  ------------------
  264|  3.20k|    }
  265|  1.02k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|  2.04k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 1.02k, False: 0]
  |  |  ------------------
  ------------------
  266|  1.02k|}
codegen.c:PyUnicode_IS_ASCII:
  224|  4.22k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  4.22k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  4.22k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  4.22k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  4.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 4.22k, False: 0]
  ------------------
  226|  4.22k|}
compile.c:PyUnicode_READ_CHAR:
  363|  79.1k|{
  364|  79.1k|    int kind;
  365|       |
  366|  79.1k|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 79.1k, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  79.1k|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 79.1k, False: 0]
  ------------------
  369|       |
  370|  79.1k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  79.1k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   158k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 79.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  79.1k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 79.1k, False: 0]
  ------------------
  372|  79.1k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  79.1k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  79.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  79.1k|    }
  374|      0|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 0, False: 0]
  ------------------
  375|      0|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|      0|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|      0|    }
  377|      0|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 0, False: 0]
  ------------------
  378|      0|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|      0|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|      0|}
compile.c:PyUnicode_GET_LENGTH:
  296|  79.1k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  79.1k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  79.1k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  79.1k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  79.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 79.1k, False: 0]
  ------------------
  298|  79.1k|}
compile.c:_PyUnicode_DATA:
  278|  79.1k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  79.1k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  79.1k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  79.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  79.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 79.1k, False: 0]
  |  |  ------------------
  ------------------
  280|  79.1k|        return _PyUnicode_COMPACT_DATA(op);
  281|  79.1k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  79.1k|}
compile.c:PyUnicode_IS_COMPACT:
  231|  79.1k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  79.1k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  79.1k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  79.1k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  79.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 79.1k, False: 0]
  ------------------
  233|  79.1k|}
compile.c:_PyUnicode_COMPACT_DATA:
  261|  79.1k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  79.1k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  79.1k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  79.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  79.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 79.1k, False: 0]
  |  |  ------------------
  ------------------
  263|  79.1k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|   158k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 79.1k, False: 0]
  |  |  ------------------
  ------------------
  264|  79.1k|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
compile.c:PyUnicode_IS_ASCII:
  224|  79.1k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  79.1k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  79.1k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  79.1k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  79.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 79.1k, False: 0]
  ------------------
  226|  79.1k|}
flowgraph.c:PyUnicode_GET_LENGTH:
  296|   125k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   125k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   125k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   125k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   125k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 125k, False: 0]
  ------------------
  298|   125k|}
import.c:PyUnicode_GET_LENGTH:
  296|   595k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   595k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   595k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   595k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   595k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 595k, False: 0]
  ------------------
  298|   595k|}
intrinsics.c:PyUnicode_READ_CHAR:
  363|  1.66k|{
  364|  1.66k|    int kind;
  365|       |
  366|  1.66k|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 1.66k, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  1.66k|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 1.66k, False: 0]
  ------------------
  369|       |
  370|  1.66k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  1.66k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  3.33k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.66k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  1.66k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 1.66k, False: 0]
  ------------------
  372|  1.66k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  1.66k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  1.66k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  1.66k|    }
  374|      0|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 0, False: 0]
  ------------------
  375|      0|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|      0|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|      0|    }
  377|      0|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 0, False: 0]
  ------------------
  378|      0|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|      0|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|      0|}
intrinsics.c:PyUnicode_GET_LENGTH:
  296|  1.66k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  1.66k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  1.66k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.66k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 1.66k, False: 0]
  ------------------
  298|  1.66k|}
intrinsics.c:_PyUnicode_DATA:
  278|  1.66k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  1.66k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  1.66k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.66k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 1.66k, False: 0]
  |  |  ------------------
  ------------------
  280|  1.66k|        return _PyUnicode_COMPACT_DATA(op);
  281|  1.66k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  1.66k|}
intrinsics.c:PyUnicode_IS_COMPACT:
  231|  1.66k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  1.66k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  1.66k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.66k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 1.66k, False: 0]
  ------------------
  233|  1.66k|}
intrinsics.c:_PyUnicode_COMPACT_DATA:
  261|  1.66k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  1.66k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  1.66k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.66k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 1.66k, False: 0]
  |  |  ------------------
  ------------------
  263|  1.66k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  3.33k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 1.66k, False: 0]
  |  |  ------------------
  ------------------
  264|  1.66k|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
intrinsics.c:PyUnicode_IS_ASCII:
  224|  1.66k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  1.66k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  1.66k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.66k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 1.66k, False: 0]
  ------------------
  226|  1.66k|}
specialize.c:PyUnicode_IS_COMPACT_ASCII:
  238|   175k|static inline int PyUnicode_IS_COMPACT_ASCII(PyObject *op) {
  239|   351k|    return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
  ------------------
  |  |  186|   175k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   175k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   175k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
                  return (_PyASCIIObject_CAST(op)->state.ascii && PyUnicode_IS_COMPACT(op));
  ------------------
  |  |  234|     10|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 10, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (239:13): [True: 175k, False: 0]
  |  Branch (239:13): [True: 10, False: 175k]
  ------------------
  240|   175k|}
specialize.c:PyUnicode_IS_COMPACT:
  231|     10|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|     10|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|     10|    (assert(PyUnicode_Check(op)), \
  |  |  187|     10|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 10, False: 0]
  ------------------
  233|     10|}
symtable.c:PyUnicode_GET_LENGTH:
  296|  1.10M|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  1.10M|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  1.10M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.10M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 1.10M, False: 0]
  ------------------
  298|  1.10M|}
symtable.c:PyUnicode_READ_CHAR:
  363|   799k|{
  364|   799k|    int kind;
  365|       |
  366|   799k|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 799k, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|   799k|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 799k, False: 0]
  ------------------
  369|       |
  370|   799k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|   799k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.59M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 799k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|   799k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 598k, False: 200k]
  ------------------
  372|   598k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|   598k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   598k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|   598k|    }
  374|   200k|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 199k, False: 1.20k]
  ------------------
  375|   199k|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|   199k|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   199k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|   199k|    }
  377|   200k|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 1.20k, False: 0]
  ------------------
  378|  1.20k|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|  1.20k|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  1.20k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|  1.20k|}
symtable.c:_PyUnicode_DATA:
  278|   799k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|   799k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|   799k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   799k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   799k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 799k, False: 0]
  |  |  ------------------
  ------------------
  280|   799k|        return _PyUnicode_COMPACT_DATA(op);
  281|   799k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|   799k|}
symtable.c:PyUnicode_IS_COMPACT:
  231|   799k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|   799k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|   799k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   799k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   799k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 799k, False: 0]
  ------------------
  233|   799k|}
symtable.c:_PyUnicode_COMPACT_DATA:
  261|   799k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|   799k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|   799k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   799k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   799k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 572k, False: 226k]
  |  |  ------------------
  ------------------
  263|   572k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  1.14M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 572k, False: 0]
  |  |  ------------------
  ------------------
  264|   572k|    }
  265|   226k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|   453k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 226k, False: 0]
  |  |  ------------------
  ------------------
  266|   226k|}
symtable.c:PyUnicode_IS_ASCII:
  224|   799k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   799k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   799k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   799k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   799k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 799k, False: 0]
  ------------------
  226|   799k|}
typecache.c:PyUnicode_CHECK_INTERNED:
  207|  6.09M|static inline unsigned int PyUnicode_CHECK_INTERNED(PyObject *op) {
  208|       |#ifdef Py_GIL_DISABLED
  209|       |    return _Py_atomic_load_uint8_relaxed(&_PyASCIIObject_CAST(op)->state.interned);
  210|       |#else
  211|  6.09M|    return _PyASCIIObject_CAST(op)->state.interned;
  ------------------
  |  |  186|  6.09M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  6.09M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  6.09M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (211:12): [True: 6.09M, False: 0]
  ------------------
  212|  6.09M|#endif
  213|  6.09M|}
typecache.c:PyUnstable_Unicode_GET_CACHED_HASH:
  303|  6.10M|PyUnstable_Unicode_GET_CACHED_HASH(PyObject *op) {
  304|       |#ifdef Py_GIL_DISABLED
  305|       |    return _Py_atomic_load_ssize_relaxed(&_PyASCIIObject_CAST(op)->hash);
  306|       |#else
  307|  6.10M|    return _PyASCIIObject_CAST(op)->hash;
  ------------------
  |  |  186|  6.10M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  6.10M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  6.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (307:12): [True: 6.10M, False: 0]
  ------------------
  308|  6.10M|#endif
  309|  6.10M|}
fileutils.c:Py_UNICODE_IS_SURROGATE:
   16|   180k|static inline int Py_UNICODE_IS_SURROGATE(Py_UCS4 ch) {
   17|   180k|    return (0xD800 <= ch && ch <= 0xDFFF);
  ------------------
  |  Branch (17:13): [True: 0, False: 180k]
  |  Branch (17:29): [True: 0, False: 0]
  ------------------
   18|   180k|}
_codecsmodule.c:PyUnicode_GET_LENGTH:
  296|    243|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|    243|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|    243|    (assert(PyUnicode_Check(op)), \
  |  |  187|    243|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    243|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 243, False: 0]
  ------------------
  298|    243|}
textio.c:PyUnicode_GET_LENGTH:
  296|   290k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   290k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   290k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   290k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   290k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 290k, False: 0]
  ------------------
  298|   290k|}
textio.c:PyUnicode_IS_ASCII:
  224|   145k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   145k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   145k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   145k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   145k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 145k, False: 0]
  ------------------
  226|   145k|}
textio.c:_PyUnicode_DATA:
  278|  48.4k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  48.4k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  48.4k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
  280|  48.4k|        return _PyUnicode_COMPACT_DATA(op);
  281|  48.4k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  48.4k|}
textio.c:PyUnicode_IS_COMPACT:
  231|  48.4k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  48.4k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  48.4k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  48.4k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 48.4k, False: 0]
  ------------------
  233|  48.4k|}
textio.c:_PyUnicode_COMPACT_DATA:
  261|  48.4k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  48.4k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  48.4k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
  263|  48.4k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  96.9k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
  264|  48.4k|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
sre.c:PyUnicode_GET_LENGTH:
  296|     13|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|     13|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|     13|    (assert(PyUnicode_Check(op)), \
  |  |  187|     13|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 13, False: 0]
  ------------------
  298|     13|}
sre.c:_PyUnicode_DATA:
  278|     13|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|     13|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|     13|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 13, False: 0]
  |  |  ------------------
  ------------------
  280|     13|        return _PyUnicode_COMPACT_DATA(op);
  281|     13|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|     13|}
sre.c:PyUnicode_IS_COMPACT:
  231|     13|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|     13|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|     13|    (assert(PyUnicode_Check(op)), \
  |  |  187|     13|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 13, False: 0]
  ------------------
  233|     13|}
sre.c:_PyUnicode_COMPACT_DATA:
  261|     13|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|     13|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|     13|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 12, False: 1]
  |  |  ------------------
  ------------------
  263|     12|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|     24|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  264|     12|    }
  265|      1|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      2|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  266|      1|}
sre.c:PyUnicode_IS_ASCII:
  224|     13|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|     13|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|     13|    (assert(PyUnicode_Check(op)), \
  |  |  187|     13|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 13, False: 0]
  ------------------
  226|     13|}
getpath.c:PyUnicode_GET_LENGTH:
  296|     12|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|     12|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|     12|    (assert(PyUnicode_Check(op)), \
  |  |  187|     12|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 12, False: 0]
  ------------------
  298|     12|}
helpers.c:PyUnicode_GET_LENGTH:
  296|  3.15k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  3.15k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  3.15k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  3.15k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 3.15k, False: 0]
  ------------------
  298|  3.15k|}
abstract.c:PyUnicode_GET_LENGTH:
  296|    132|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|    132|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|    132|    (assert(PyUnicode_Check(op)), \
  |  |  187|    132|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 132, False: 0]
  ------------------
  298|    132|}
bytesobject.c:PyUnicode_IS_ASCII:
  224|    861|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|    861|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|    861|    (assert(PyUnicode_Check(op)), \
  |  |  187|    861|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    861|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 861, False: 0]
  ------------------
  226|    861|}
bytesobject.c:_PyUnicode_DATA:
  278|    861|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|    861|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|    861|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    861|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    861|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 861, False: 0]
  |  |  ------------------
  ------------------
  280|    861|        return _PyUnicode_COMPACT_DATA(op);
  281|    861|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|    861|}
bytesobject.c:PyUnicode_IS_COMPACT:
  231|    861|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|    861|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|    861|    (assert(PyUnicode_Check(op)), \
  |  |  187|    861|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    861|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 861, False: 0]
  ------------------
  233|    861|}
bytesobject.c:_PyUnicode_COMPACT_DATA:
  261|    861|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|    861|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|    861|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    861|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    861|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 861, False: 0]
  |  |  ------------------
  ------------------
  263|    861|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  1.72k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 861, False: 0]
  |  |  ------------------
  ------------------
  264|    861|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
codeobject.c:PyUnicode_IS_ASCII:
  224|   124k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   124k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   124k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   124k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   124k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 124k, False: 0]
  ------------------
  226|   124k|}
codeobject.c:_PyUnicode_DATA:
  278|  49.2k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  49.2k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  49.2k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  49.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 49.2k, False: 0]
  |  |  ------------------
  ------------------
  280|  49.2k|        return _PyUnicode_COMPACT_DATA(op);
  281|  49.2k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  49.2k|}
codeobject.c:PyUnicode_IS_COMPACT:
  231|  49.2k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  49.2k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  49.2k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  49.2k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  49.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 49.2k, False: 0]
  ------------------
  233|  49.2k|}
codeobject.c:_PyUnicode_COMPACT_DATA:
  261|  49.2k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  49.2k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  49.2k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  49.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 49.2k, False: 0]
  |  |  ------------------
  ------------------
  263|  49.2k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  98.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 49.2k, False: 0]
  |  |  ------------------
  ------------------
  264|  49.2k|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
codeobject.c:PyUnicode_GET_LENGTH:
  296|  49.2k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  49.2k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  49.2k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  49.2k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  49.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 49.2k, False: 0]
  ------------------
  298|  49.2k|}
unicode_format.c:PyUnicode_IS_ASCII:
  224|     21|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|     21|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|     21|    (assert(PyUnicode_Check(op)), \
  |  |  187|     21|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 21, False: 0]
  ------------------
  226|     21|}
unicode_format.c:_PyUnicode_DATA:
  278|     21|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|     21|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|     21|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 21, False: 0]
  |  |  ------------------
  ------------------
  280|     21|        return _PyUnicode_COMPACT_DATA(op);
  281|     21|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|     21|}
unicode_format.c:PyUnicode_IS_COMPACT:
  231|     21|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|     21|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|     21|    (assert(PyUnicode_Check(op)), \
  |  |  187|     21|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 21, False: 0]
  ------------------
  233|     21|}
unicode_format.c:_PyUnicode_COMPACT_DATA:
  261|     21|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|     21|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|     21|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 21, False: 0]
  |  |  ------------------
  ------------------
  263|     21|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|     42|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 21, False: 0]
  |  |  ------------------
  ------------------
  264|     21|    }
  265|      0|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|}
unicode_format.c:PyUnicode_GET_LENGTH:
  296|     42|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|     42|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|     42|    (assert(PyUnicode_Check(op)), \
  |  |  187|     42|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 42, False: 0]
  ------------------
  298|     42|}
unicode_format.c:PyUnicode_READ:
  342|    399|{
  343|    399|    assert(index >= 0);
  ------------------
  |  Branch (343:5): [True: 399, False: 0]
  ------------------
  344|    399|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (344:9): [True: 399, False: 0]
  ------------------
  345|    399|        return _Py_STATIC_CAST(const Py_UCS1*, data)[index];
  ------------------
  |  |   34|    399|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  346|    399|    }
  347|      0|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (347:9): [True: 0, False: 0]
  ------------------
  348|      0|        return _Py_STATIC_CAST(const Py_UCS2*, data)[index];
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  349|      0|    }
  350|      0|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (350:5): [True: 0, False: 0]
  ------------------
  351|      0|    return _Py_STATIC_CAST(const Py_UCS4*, data)[index];
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  352|      0|}
ast_preprocess.c:_PyUnicode_DATA:
  278|  27.5k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  27.5k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  27.5k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 27.5k, False: 0]
  |  |  ------------------
  ------------------
  280|  27.5k|        return _PyUnicode_COMPACT_DATA(op);
  281|  27.5k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  27.5k|}
ast_preprocess.c:PyUnicode_IS_COMPACT:
  231|  27.5k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  27.5k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  27.5k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  27.5k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  27.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 27.5k, False: 0]
  ------------------
  233|  27.5k|}
ast_preprocess.c:_PyUnicode_COMPACT_DATA:
  261|  27.5k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  27.5k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  27.5k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 15.6k, False: 11.9k]
  |  |  ------------------
  ------------------
  263|  15.6k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  31.2k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 15.6k, False: 0]
  |  |  ------------------
  ------------------
  264|  15.6k|    }
  265|  11.9k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|  23.8k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 11.9k, False: 0]
  |  |  ------------------
  ------------------
  266|  11.9k|}
ast_preprocess.c:PyUnicode_IS_ASCII:
  224|  27.5k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  27.5k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  27.5k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  27.5k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  27.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 27.5k, False: 0]
  ------------------
  226|  27.5k|}
ast_preprocess.c:PyUnicode_READ:
  342|   431k|{
  343|   431k|    assert(index >= 0);
  ------------------
  |  Branch (343:5): [True: 431k, False: 0]
  ------------------
  344|   431k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (344:9): [True: 203k, False: 228k]
  ------------------
  345|   203k|        return _Py_STATIC_CAST(const Py_UCS1*, data)[index];
  ------------------
  |  |   34|   203k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  346|   203k|    }
  347|   228k|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (347:9): [True: 143k, False: 84.3k]
  ------------------
  348|   143k|        return _Py_STATIC_CAST(const Py_UCS2*, data)[index];
  ------------------
  |  |   34|   143k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  349|   143k|    }
  350|   228k|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (350:5): [True: 84.3k, False: 0]
  ------------------
  351|  84.3k|    return _Py_STATIC_CAST(const Py_UCS4*, data)[index];
  ------------------
  |  |   34|  84.3k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  352|  84.3k|}
ast_preprocess.c:PyUnicode_GET_LENGTH:
  296|  40.6k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  40.6k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  40.6k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  40.6k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  40.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 40.6k, False: 0]
  ------------------
  298|  40.6k|}
ast_preprocess.c:PyUnicode_READ_CHAR:
  363|  19.5k|{
  364|  19.5k|    int kind;
  365|       |
  366|  19.5k|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 19.5k, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  19.5k|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 19.5k, False: 0]
  ------------------
  369|       |
  370|  19.5k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  19.5k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  39.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 19.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  19.5k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 11.5k, False: 8.02k]
  ------------------
  372|  11.5k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  11.5k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  11.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  11.5k|    }
  374|  8.02k|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 755, False: 7.26k]
  ------------------
  375|    755|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|    755|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    755|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|    755|    }
  377|  8.02k|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 7.26k, False: 0]
  ------------------
  378|  7.26k|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|  7.26k|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  7.26k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|  7.26k|}
pegen.c:PyUnicode_GET_LENGTH:
  296|  14.6k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  14.6k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  14.6k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  14.6k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  14.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 14.6k, False: 0]
  ------------------
  298|  14.6k|}
pegen.c:PyUnicode_IS_ASCII:
  224|   123k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|   123k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|   123k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   123k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   123k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 123k, False: 0]
  ------------------
  226|   123k|}
lexer.c:PyUnicode_GET_LENGTH:
  296|   195k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   195k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   195k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   195k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   195k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 195k, False: 0]
  ------------------
  298|   195k|}
lexer.c:PyUnicode_READ_CHAR:
  363|    331|{
  364|    331|    int kind;
  365|       |
  366|    331|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 331, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|    331|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 331, False: 0]
  ------------------
  369|       |
  370|    331|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|    331|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    662|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 331, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|    331|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 70, False: 261]
  ------------------
  372|     70|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|     70|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     70|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|     70|    }
  374|    261|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 113, False: 148]
  ------------------
  375|    113|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|    113|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    113|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|    113|    }
  377|    261|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 148, False: 0]
  ------------------
  378|    148|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|    148|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    148|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|    148|}
lexer.c:_PyUnicode_DATA:
  278|    331|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|    331|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|    331|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 331, False: 0]
  |  |  ------------------
  ------------------
  280|    331|        return _PyUnicode_COMPACT_DATA(op);
  281|    331|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|    331|}
lexer.c:PyUnicode_IS_COMPACT:
  231|    331|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|    331|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|    331|    (assert(PyUnicode_Check(op)), \
  |  |  187|    331|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 331, False: 0]
  ------------------
  233|    331|}
lexer.c:_PyUnicode_COMPACT_DATA:
  261|    331|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|    331|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|    331|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 331]
  |  |  ------------------
  ------------------
  263|      0|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  264|      0|    }
  265|    331|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|    662|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 331, False: 0]
  |  |  ------------------
  ------------------
  266|    331|}
lexer.c:PyUnicode_IS_ASCII:
  224|    331|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|    331|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|    331|    (assert(PyUnicode_Check(op)), \
  |  |  187|    331|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 331, False: 0]
  ------------------
  226|    331|}
action_helpers.c:PyUnicode_READ_CHAR:
  363|  14.0k|{
  364|  14.0k|    int kind;
  365|       |
  366|  14.0k|    assert(index >= 0);
  ------------------
  |  Branch (366:5): [True: 14.0k, False: 0]
  ------------------
  367|       |    // Tolerate reading the NUL character at str[len(str)]
  368|  14.0k|    assert(index <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (368:5): [True: 14.0k, False: 0]
  ------------------
  369|       |
  370|  14.0k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  14.0k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  28.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 14.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|  14.0k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (371:9): [True: 14.0k, False: 39]
  ------------------
  372|  14.0k|        return PyUnicode_1BYTE_DATA(unicode)[index];
  ------------------
  |  |  291|  14.0k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  14.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  373|  14.0k|    }
  374|     39|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (374:9): [True: 38, False: 1]
  ------------------
  375|     38|        return PyUnicode_2BYTE_DATA(unicode)[index];
  ------------------
  |  |  292|     38|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     38|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  376|     38|    }
  377|     39|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (377:5): [True: 1, False: 0]
  ------------------
  378|      1|    return PyUnicode_4BYTE_DATA(unicode)[index];
  ------------------
  |  |  293|      1|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      1|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  379|      1|}
action_helpers.c:_PyUnicode_DATA:
  278|  14.0k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  14.0k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  14.0k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 14.0k, False: 0]
  |  |  ------------------
  ------------------
  280|  14.0k|        return _PyUnicode_COMPACT_DATA(op);
  281|  14.0k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  14.0k|}
action_helpers.c:PyUnicode_IS_COMPACT:
  231|  14.0k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  14.0k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  14.0k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  14.0k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  14.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 14.0k, False: 0]
  ------------------
  233|  14.0k|}
action_helpers.c:_PyUnicode_COMPACT_DATA:
  261|  14.0k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  14.0k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  14.0k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 14.0k, False: 53]
  |  |  ------------------
  ------------------
  263|  14.0k|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|  28.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 14.0k, False: 0]
  |  |  ------------------
  ------------------
  264|  14.0k|    }
  265|     53|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|    106|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 53, False: 0]
  |  |  ------------------
  ------------------
  266|     53|}
action_helpers.c:PyUnicode_IS_ASCII:
  224|  14.0k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  14.0k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  14.0k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  14.0k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  14.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 14.0k, False: 0]
  ------------------
  226|  14.0k|}
action_helpers.c:PyUnicode_GET_LENGTH:
  296|   215k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|   215k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   215k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   215k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   215k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 215k, False: 0]
  ------------------
  298|   215k|}
string_parser.c:_PyUnicode_DATA:
  278|  35.3k|static inline void* _PyUnicode_DATA(PyObject *op) {
  279|  35.3k|    if (PyUnicode_IS_COMPACT(op)) {
  ------------------
  |  |  234|  35.3k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 35.3k, False: 0]
  |  |  ------------------
  ------------------
  280|  35.3k|        return _PyUnicode_COMPACT_DATA(op);
  281|  35.3k|    }
  282|      0|    return _PyUnicode_NONCOMPACT_DATA(op);
  283|  35.3k|}
string_parser.c:PyUnicode_IS_COMPACT:
  231|  35.3k|static inline unsigned int PyUnicode_IS_COMPACT(PyObject *op) {
  232|  35.3k|    return _PyASCIIObject_CAST(op)->state.compact;
  ------------------
  |  |  186|  35.3k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  35.3k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (232:12): [True: 35.3k, False: 0]
  ------------------
  233|  35.3k|}
string_parser.c:_PyUnicode_COMPACT_DATA:
  261|  35.3k|static inline void* _PyUnicode_COMPACT_DATA(PyObject *op) {
  262|  35.3k|    if (PyUnicode_IS_ASCII(op)) {
  ------------------
  |  |  227|  35.3k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 35.3k]
  |  |  ------------------
  ------------------
  263|      0|        return _Py_STATIC_CAST(void*, (_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  264|      0|    }
  265|  35.3k|    return _Py_STATIC_CAST(void*, (_PyCompactUnicodeObject_CAST(op) + 1));
  ------------------
  |  |   34|  70.7k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (34:47): [True: 35.3k, False: 0]
  |  |  ------------------
  ------------------
  266|  35.3k|}
string_parser.c:PyUnicode_IS_ASCII:
  224|  35.3k|static inline unsigned int PyUnicode_IS_ASCII(PyObject *op) {
  225|  35.3k|    return _PyASCIIObject_CAST(op)->state.ascii;
  ------------------
  |  |  186|  35.3k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  35.3k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (225:12): [True: 35.3k, False: 0]
  ------------------
  226|  35.3k|}
string_parser.c:PyUnicode_GET_LENGTH:
  296|  35.3k|static inline Py_ssize_t PyUnicode_GET_LENGTH(PyObject *op) {
  297|  35.3k|    return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|  35.3k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  35.3k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (297:12): [True: 35.3k, False: 0]
  ------------------
  298|  35.3k|}
string_parser.c:PyUnicode_READ:
  342|   210k|{
  343|   210k|    assert(index >= 0);
  ------------------
  |  Branch (343:5): [True: 210k, False: 0]
  ------------------
  344|   210k|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (344:9): [True: 184k, False: 26.2k]
  ------------------
  345|   184k|        return _Py_STATIC_CAST(const Py_UCS1*, data)[index];
  ------------------
  |  |   34|   184k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  346|   184k|    }
  347|  26.2k|    if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (347:9): [True: 23.1k, False: 3.04k]
  ------------------
  348|  23.1k|        return _Py_STATIC_CAST(const Py_UCS2*, data)[index];
  ------------------
  |  |   34|  23.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  349|  23.1k|    }
  350|  26.2k|    assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (350:5): [True: 3.04k, False: 0]
  ------------------
  351|  3.04k|    return _Py_STATIC_CAST(const Py_UCS4*, data)[index];
  ------------------
  |  |   34|  3.04k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  ------------------
  352|  3.04k|}

obmalloc.c:mi_atomic_once:
  306|      6|static inline bool mi_atomic_once( mi_atomic_once_t* once ) {
  307|      6|  if (mi_atomic_load_relaxed(once) != 0) return false;     // quick test
  ------------------
  |  |   61|      6|#define mi_atomic_load_relaxed(p)                mi_atomic(load_explicit)(p,mi_memory_order(relaxed))
  |  |  ------------------
  |  |  |  |   42|      6|#define  mi_atomic(name)        atomic_##name
  |  |  ------------------
  |  |               #define mi_atomic_load_relaxed(p)                mi_atomic(load_explicit)(p,mi_memory_order(relaxed))
  |  |  ------------------
  |  |  |  |   43|      6|#define  mi_memory_order(name)  memory_order_##name
  |  |  ------------------
  ------------------
  |  Branch (307:7): [True: 4, False: 2]
  ------------------
  308|      2|  uintptr_t expected = 0;
  309|       |  return mi_atomic_cas_strong_acq_rel(once, &expected, (uintptr_t)1); // try to set to 1
  ------------------
  |  |   69|      2|#define mi_atomic_cas_strong_acq_rel(p,exp,des)  mi_atomic_cas_strong(p,exp,des,mi_memory_order(acq_rel),mi_memory_order(acquire))
  |  |  ------------------
  |  |  |  |   58|      2|  mi_atomic(compare_exchange_strong_explicit)(p,expected,desired,mem_success,mem_fail)
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|      2|#define  mi_atomic(name)        atomic_##name
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|      6|}

obmalloc.c:mi_heap_is_initialized:
  374|      4|static inline bool mi_heap_is_initialized(mi_heap_t* heap) {
  375|      4|  mi_assert_internal(heap != NULL);
  376|      4|  return (heap != &_mi_heap_empty);
  377|      4|}

obmalloc.c:mi_prim_get_default_heap:
  318|      6|static inline mi_heap_t* mi_prim_get_default_heap(void) {
  319|       |  #if defined(MI_TLS_RECURSE_GUARD)
  320|       |  if (mi_unlikely(!_mi_process_is_initialized)) return _mi_heap_main_get();
  321|       |  #endif
  322|      6|  return _mi_heap_default;
  323|      6|}
obmalloc.c:_mi_prim_thread_id:
  214|      4|static inline mi_threadid_t _mi_prim_thread_id(void) mi_attr_noexcept {
  215|       |  #if defined(__BIONIC__)
  216|       |    // issue #384, #495: on the Bionic libc (Android), slot 1 is the thread id
  217|       |    // see: https://github.com/aosp-mirror/platform_bionic/blob/c44b1d0676ded732df4b3b21c5f798eacae93228/libc/platform/bionic/tls_defines.h#L86
  218|       |    return (uintptr_t)mi_prim_tls_slot(1);
  219|       |  #else
  220|       |    // in all our other targets, slot 0 is the thread id
  221|       |    // glibc: https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=sysdeps/x86_64/nptl/tls.h
  222|       |    // apple: https://github.com/apple/darwin-xnu/blob/main/libsyscall/os/tsd.h#L36
  223|      4|    return (uintptr_t)mi_prim_tls_slot(0);
  224|      4|  #endif
  225|      4|}
obmalloc.c:mi_prim_tls_slot:
  161|      4|static inline void* mi_prim_tls_slot(size_t slot) mi_attr_noexcept {
  162|      4|  void* res;
  163|      4|  const size_t ofs = (slot*sizeof(void*));
  164|       |  #if defined(__i386__)
  165|       |    __asm__("movl %%gs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : );  // x86 32-bit always uses GS
  166|       |  #elif defined(__APPLE__) && defined(__x86_64__)
  167|       |    __asm__("movq %%gs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : );  // x86_64 macOSX uses GS
  168|       |  #elif defined(__x86_64__) && (MI_INTPTR_SIZE==4)
  169|       |    __asm__("movl %%fs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : );  // x32 ABI
  170|       |  #elif defined(__x86_64__)
  171|       |    __asm__("movq %%fs:%1, %0" : "=r" (res) : "m" (*((void**)ofs)) : );  // x86_64 Linux, BSD uses FS
  172|       |  #elif defined(__arm__)
  173|       |    void** tcb; MI_UNUSED(ofs);
  174|       |    __asm__ volatile ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tcb));
  175|       |    res = tcb[slot];
  176|       |  #elif defined(__aarch64__)
  177|       |    void** tcb; MI_UNUSED(ofs);
  178|       |    #if defined(__APPLE__) // M1, issue #343
  179|       |    __asm__ volatile ("mrs %0, tpidrro_el0\nbic %0, %0, #7" : "=r" (tcb));
  180|       |    #else
  181|       |    __asm__ volatile ("mrs %0, tpidr_el0" : "=r" (tcb));
  182|       |    #endif
  183|       |    res = tcb[slot];
  184|       |  #endif
  185|      4|  return res;
  186|      4|}

listobject.c:_PyIndex_Check:
   14|  2.68k|{
   15|  2.68k|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|  2.68k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|  2.68k|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 2.59k, False: 85]
  |  Branch (16:37): [True: 2.59k, False: 0]
  ------------------
   17|  2.68k|}
rangeobject.c:_PyIndex_Check:
   14|     40|{
   15|     40|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|     40|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|     40|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 0, False: 40]
  |  Branch (16:37): [True: 0, False: 0]
  ------------------
   17|     40|}
sliceobject.c:_PyIndex_Check:
   14|     40|{
   15|     40|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|     40|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|     40|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 40, False: 0]
  |  Branch (16:37): [True: 40, False: 0]
  ------------------
   17|     40|}
tupleobject.c:_PyIndex_Check:
   14|  2.28k|{
   15|  2.28k|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|  2.28k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|  2.28k|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 1.87k, False: 411]
  |  Branch (16:37): [True: 1.77k, False: 99]
  ------------------
   17|  2.28k|}
unicodeobject.c:_PyIndex_Check:
   14|  9.15M|{
   15|  9.15M|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|  9.15M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  9.15M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.15M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|  9.15M|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 9.14M, False: 1.17k]
  |  Branch (16:37): [True: 9.14M, False: 40]
  ------------------
   17|  9.15M|}
ceval.c:_PyIndex_Check:
   14|  1.67k|{
   15|  1.67k|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|  1.67k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.67k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.67k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|  1.67k|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 1.67k, False: 1]
  |  Branch (16:37): [True: 631, False: 1.04k]
  ------------------
   17|  1.67k|}
abstract.c:_PyIndex_Check:
   14|  55.0k|{
   15|  55.0k|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|  55.0k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  55.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  55.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|  55.0k|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 54.9k, False: 84]
  |  Branch (16:37): [True: 50.1k, False: 4.79k]
  ------------------
   17|  55.0k|}
bytes_methods.c:_PyIndex_Check:
   14|     78|{
   15|     78|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|     78|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     78|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     78|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|     78|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 78, False: 0]
  |  Branch (16:37): [True: 78, False: 0]
  ------------------
   17|     78|}
bytearrayobject.c:_PyIndex_Check:
   14|    691|{
   15|    691|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|    691|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    691|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    691|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|    691|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 580, False: 111]
  |  Branch (16:37): [True: 580, False: 0]
  ------------------
   17|    691|}
bytesobject.c:_PyIndex_Check:
   14|   671k|{
   15|   671k|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|   671k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   671k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   671k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|   671k|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 622k, False: 48.6k]
  |  Branch (16:37): [True: 622k, False: 55]
  ------------------
   17|   671k|}
memoryobject.c:_PyIndex_Check:
   14|     93|{
   15|     93|    PyNumberMethods *tp_as_number = Py_TYPE(obj)->tp_as_number;
  ------------------
  |  |  213|     93|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   16|     93|    return (tp_as_number != NULL && tp_as_number->nb_index != NULL);
  ------------------
  |  Branch (16:13): [True: 0, False: 93]
  |  Branch (16:37): [True: 0, False: 0]
  ------------------
   17|     93|}

ceval.c:backoff_counter_triggers:
  106|  27.0M|{
  107|       |    /* Test whether the value is zero and the backoff is not UNREACHABLE_BACKOFF */
  108|  27.0M|    return counter.value_and_backoff < UNREACHABLE_BACKOFF;
  ------------------
  |  |   40|  27.0M|#define UNREACHABLE_BACKOFF 7
  ------------------
  109|  27.0M|}
ceval.c:forge_backoff_counter:
   72|  27.0M|{
   73|  27.0M|    _Py_BackoffCounter result;
   74|  27.0M|    result.value_and_backoff = counter;
   75|  27.0M|    return result;
   76|  27.0M|}
ceval.c:advance_backoff_counter:
   98|  26.8M|{
   99|  26.8M|    _Py_BackoffCounter result;
  100|  26.8M|    result.value_and_backoff = counter.value_and_backoff - (1 << BACKOFF_BITS);
  ------------------
  |  |   37|  26.8M|#define BACKOFF_BITS 3
  ------------------
  101|  26.8M|    return result;
  102|  26.8M|}
specialize.c:initial_jump_backoff_counter:
  138|  56.1k|{
  139|  56.1k|    return make_backoff_counter(
  140|  56.1k|        opt_config->jump_backward_initial_value,
  141|  56.1k|        opt_config->jump_backward_initial_backoff);
  142|  56.1k|}
specialize.c:make_backoff_counter:
   62|   351k|{
   63|   351k|    assert(backoff <= UNREACHABLE_BACKOFF);
  ------------------
  |  Branch (63:5): [True: 351k, False: 0]
  ------------------
   64|   351k|    assert(value <= MAX_VALUE);
  ------------------
  |  Branch (64:5): [True: 351k, False: 0]
  ------------------
   65|   351k|    return ((_Py_BackoffCounter){
   66|   351k|        .value_and_backoff = MAKE_VALUE_AND_BACKOFF(value, backoff)
  ------------------
  |  |   44|   351k|    ((uint16_t)(((value) << BACKOFF_BITS) | (backoff)))
  |  |  ------------------
  |  |  |  |   37|   351k|#define BACKOFF_BITS 3
  |  |  ------------------
  ------------------
   67|   351k|    });
   68|   351k|}
specialize.c:initial_resume_backoff_counter:
  152|  56.1k|{
  153|  56.1k|    return make_backoff_counter(
  154|  56.1k|        opt_config->resume_initial_value,
  155|  56.1k|        opt_config->resume_initial_backoff);
  156|  56.1k|}
specialize.c:restart_backoff_counter:
   80|  3.73k|{
   81|  3.73k|    uint16_t backoff = counter.value_and_backoff & BACKOFF_MASK;
  ------------------
  |  |   38|  3.73k|#define BACKOFF_MASK 7
  ------------------
   82|  3.73k|    assert(backoff <= MAX_BACKOFF);
  ------------------
  |  Branch (82:5): [True: 3.73k, False: 0]
  ------------------
   83|  3.73k|    return ((_Py_BackoffCounter){
   84|  3.73k|        .value_and_backoff = value_and_backoff_next[backoff]
   85|  3.73k|    });
   86|  3.73k|}

longobject.c:_Py_bit_length:
  147|   245k|{
  148|   245k|#if (defined(__clang__) || defined(__GNUC__))
  149|   245k|    if (x != 0) {
  ------------------
  |  Branch (149:9): [True: 245k, False: 0]
  ------------------
  150|       |        // __builtin_clzl() is available since GCC 3.4.
  151|       |        // Undefined behavior for x == 0.
  152|   245k|        return (int)sizeof(unsigned long) * 8 - __builtin_clzl(x);
  153|   245k|    }
  154|      0|    else {
  155|      0|        return 0;
  156|      0|    }
  157|       |#elif defined(_MSC_VER)
  158|       |    // _BitScanReverse() is documented to search 32 bits.
  159|       |    Py_BUILD_ASSERT(sizeof(unsigned long) <= 4);
  160|       |    unsigned long msb;
  161|       |    if (_BitScanReverse(&msb, x)) {
  162|       |        return (int)msb + 1;
  163|       |    }
  164|       |    else {
  165|       |        return 0;
  166|       |    }
  167|       |#else
  168|       |    const int BIT_LENGTH_TABLE[32] = {
  169|       |        0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
  170|       |        5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
  171|       |    };
  172|       |    int msb = 0;
  173|       |    while (x >= 32) {
  174|       |        msb += 6;
  175|       |        x >>= 6;
  176|       |    }
  177|       |    msb += BIT_LENGTH_TABLE[x];
  178|       |    return msb;
  179|       |#endif
  180|   245k|}
dictobject.c:_Py_bit_length:
  147|   484k|{
  148|   484k|#if (defined(__clang__) || defined(__GNUC__))
  149|   484k|    if (x != 0) {
  ------------------
  |  Branch (149:9): [True: 484k, False: 0]
  ------------------
  150|       |        // __builtin_clzl() is available since GCC 3.4.
  151|       |        // Undefined behavior for x == 0.
  152|   484k|        return (int)sizeof(unsigned long) * 8 - __builtin_clzl(x);
  153|   484k|    }
  154|      0|    else {
  155|      0|        return 0;
  156|      0|    }
  157|       |#elif defined(_MSC_VER)
  158|       |    // _BitScanReverse() is documented to search 32 bits.
  159|       |    Py_BUILD_ASSERT(sizeof(unsigned long) <= 4);
  160|       |    unsigned long msb;
  161|       |    if (_BitScanReverse(&msb, x)) {
  162|       |        return (int)msb + 1;
  163|       |    }
  164|       |    else {
  165|       |        return 0;
  166|       |    }
  167|       |#else
  168|       |    const int BIT_LENGTH_TABLE[32] = {
  169|       |        0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
  170|       |        5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
  171|       |    };
  172|       |    int msb = 0;
  173|       |    while (x >= 32) {
  174|       |        msb += 6;
  175|       |        x >>= 6;
  176|       |    }
  177|       |    msb += BIT_LENGTH_TABLE[x];
  178|       |    return msb;
  179|       |#endif
  180|   484k|}
hamt.c:_Py_popcount32:
   96|      2|{
   97|      2|#if (defined(__clang__) || defined(__GNUC__))
   98|       |
   99|      2|#if SIZEOF_INT >= 4
  100|      2|    Py_BUILD_ASSERT(sizeof(x) <= sizeof(unsigned int));
  ------------------
  |  |  192|      2|        do { \
  |  |  193|      2|            static_assert((cond), #cond); \
  |  |  194|      2|        } while (0)
  |  |  ------------------
  |  |  |  Branch (194:18): [Folded, False: 2]
  |  |  ------------------
  ------------------
  101|      2|    return __builtin_popcount(x);
  102|       |#else
  103|       |    // The C standard guarantees that unsigned long will always be big enough
  104|       |    // to hold a uint32_t value without losing information.
  105|       |    Py_BUILD_ASSERT(sizeof(x) <= sizeof(unsigned long));
  106|       |    return __builtin_popcountl(x);
  107|       |#endif
  108|       |
  109|       |#else
  110|       |    // 32-bit SWAR (SIMD Within A Register) popcount
  111|       |
  112|       |    // Binary: 0 1 0 1 ...
  113|       |    const uint32_t M1 = 0x55555555;
  114|       |    // Binary: 00 11 00 11. ..
  115|       |    const uint32_t M2 = 0x33333333;
  116|       |    // Binary: 0000 1111 0000 1111 ...
  117|       |    const uint32_t M4 = 0x0F0F0F0F;
  118|       |
  119|       |    // Put count of each 2 bits into those 2 bits
  120|       |    x = x - ((x >> 1) & M1);
  121|       |    // Put count of each 4 bits into those 4 bits
  122|       |    x = (x & M2) + ((x >> 2) & M2);
  123|       |    // Put count of each 8 bits into those 8 bits
  124|       |    x = (x + (x >> 4)) & M4;
  125|       |    // Sum of the 4 byte counts.
  126|       |    // Take care when considering changes to the next line. Portability and
  127|       |    // correctness are delicate here, thanks to C's "integer promotions" (C99
  128|       |    // §6.3.1.1p2). On machines where the `int` type has width greater than 32
  129|       |    // bits, `x` will be promoted to an `int`, and following C's "usual
  130|       |    // arithmetic conversions" (C99 §6.3.1.8), the multiplication will be
  131|       |    // performed as a multiplication of two `unsigned int` operands. In this
  132|       |    // case it's critical that we cast back to `uint32_t` in order to keep only
  133|       |    // the least significant 32 bits. On machines where the `int` type has
  134|       |    // width no greater than 32, the multiplication is of two 32-bit unsigned
  135|       |    // integer types, and the (uint32_t) cast is a no-op. In both cases, we
  136|       |    // avoid the risk of undefined behaviour due to overflow of a
  137|       |    // multiplication of signed integer types.
  138|       |    return (uint32_t)(x * 0x01010101U) >> 24;
  139|       |#endif
  140|      2|}

bytesobject.c:_PyBytesWriter_GetData:
  112|  11.2M|{
  113|  11.2M|    if (writer->obj == NULL) {
  ------------------
  |  Branch (113:9): [True: 2.51M, False: 8.73M]
  ------------------
  114|  2.51M|        return writer->small_buffer;
  115|  2.51M|    }
  116|  8.73M|    else if (writer->use_bytearray) {
  ------------------
  |  Branch (116:14): [True: 0, False: 8.73M]
  ------------------
  117|      0|        return PyByteArray_AS_STRING(writer->obj);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|      0|    }
  119|  8.73M|    else {
  120|  8.73M|        return PyBytes_AS_STRING(writer->obj);
  ------------------
  |  |   27|  8.73M|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|  8.73M|    }
  122|  11.2M|}
bytesobject.c:_PyBytesWriter_GetSize:
  106|  5.27M|{
  107|  5.27M|    return writer->size;
  108|  5.27M|}

dictobject.c:_PyObject_CallNoArgs:
  157|     16|_PyObject_CallNoArgs(PyObject *func) {
  158|     16|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|     16|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  159|     16|    PyThreadState *tstate = _PyThreadState_GET();
  160|     16|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  161|     16|}
dictobject.c:_PyObject_VectorcallTstate:
  132|     16|{
  133|     16|    vectorcallfunc func;
  134|     16|    PyObject *res;
  135|       |
  136|     16|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 16, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|     16|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 0, False: 16]
  |  Branch (137:5): [True: 16, False: 0]
  ------------------
  138|       |
  139|     16|    func = _PyVectorcall_FunctionInline(callable);
  140|     16|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 16]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|     16|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|     16|}
dictobject.c:_PyVectorcall_FunctionInline:
   92|     16|{
   93|     16|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 16, False: 0]
  ------------------
   94|       |
   95|     16|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|     16|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|     16|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|     16|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 16]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|     16|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 16, False: 0]
  ------------------
  100|       |
  101|     16|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|     16|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 16, False: 0]
  ------------------
  103|       |
  104|     16|    vectorcallfunc ptr;
  105|     16|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|     16|    return ptr;
  107|     16|}
object.c:_PyObject_CallNoArgs:
  157|      2|_PyObject_CallNoArgs(PyObject *func) {
  158|      2|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|      2|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  159|      2|    PyThreadState *tstate = _PyThreadState_GET();
  160|      2|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  161|      2|}
object.c:_PyObject_VectorcallTstate:
  132|      2|{
  133|      2|    vectorcallfunc func;
  134|      2|    PyObject *res;
  135|       |
  136|      2|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 2, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|      2|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 0, False: 2]
  |  Branch (137:5): [True: 2, False: 0]
  ------------------
  138|       |
  139|      2|    func = _PyVectorcall_FunctionInline(callable);
  140|      2|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 2]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|      2|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|      2|}
object.c:_PyVectorcall_FunctionInline:
   92|      2|{
   93|      2|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 2, False: 0]
  ------------------
   94|       |
   95|      2|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      2|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|      2|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 2]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|      2|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 2, False: 0]
  ------------------
  100|       |
  101|      2|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|      2|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 2, False: 0]
  ------------------
  103|       |
  104|      2|    vectorcallfunc ptr;
  105|      2|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|      2|    return ptr;
  107|      2|}
typeobject.c:_PyObject_VectorcallTstate:
  132|    613|{
  133|    613|    vectorcallfunc func;
  134|    613|    PyObject *res;
  135|       |
  136|    613|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 613, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|    613|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 613, False: 0]
  |  Branch (137:5): [True: 0, False: 0]
  ------------------
  138|       |
  139|    613|    func = _PyVectorcall_FunctionInline(callable);
  140|    613|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 613]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|    613|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|    613|}
typeobject.c:_PyVectorcall_FunctionInline:
   92|    613|{
   93|    613|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 613, False: 0]
  ------------------
   94|       |
   95|    613|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|    613|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    613|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    613|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|    613|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|    613|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 613]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|    613|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 613, False: 0]
  ------------------
  100|       |
  101|    613|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|    613|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 613, False: 0]
  ------------------
  103|       |
  104|    613|    vectorcallfunc ptr;
  105|    613|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|    613|    return ptr;
  107|    613|}
bltinmodule.c:_PyObject_VectorcallTstate:
  132|     72|{
  133|     72|    vectorcallfunc func;
  134|     72|    PyObject *res;
  135|       |
  136|     72|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 72, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|     72|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 72, False: 0]
  |  Branch (137:5): [True: 0, False: 0]
  ------------------
  138|       |
  139|     72|    func = _PyVectorcall_FunctionInline(callable);
  140|     72|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 72]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|     72|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|     72|}
bltinmodule.c:_PyVectorcall_FunctionInline:
   92|     72|{
   93|     72|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 72, False: 0]
  ------------------
   94|       |
   95|     72|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|     72|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|     72|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|     72|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 72]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|     72|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 72, False: 0]
  ------------------
  100|       |
  101|     72|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|     72|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 72, False: 0]
  ------------------
  103|       |
  104|     72|    vectorcallfunc ptr;
  105|     72|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|     72|    return ptr;
  107|     72|}
bufferedio.c:_PyObject_CallNoArgs:
  157|     93|_PyObject_CallNoArgs(PyObject *func) {
  158|     93|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|     93|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  159|     93|    PyThreadState *tstate = _PyThreadState_GET();
  160|     93|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  161|     93|}
bufferedio.c:_PyObject_VectorcallTstate:
  132|     93|{
  133|     93|    vectorcallfunc func;
  134|     93|    PyObject *res;
  135|       |
  136|     93|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 93, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|     93|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 0, False: 93]
  |  Branch (137:5): [True: 93, False: 0]
  ------------------
  138|       |
  139|     93|    func = _PyVectorcall_FunctionInline(callable);
  140|     93|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 93]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|     93|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|     93|}
bufferedio.c:_PyVectorcall_FunctionInline:
   92|     93|{
   93|     93|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 93, False: 0]
  ------------------
   94|       |
   95|     93|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|     93|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|     93|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|     93|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 93]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|     93|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 93, False: 0]
  ------------------
  100|       |
  101|     93|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|     93|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 93, False: 0]
  ------------------
  103|       |
  104|     93|    vectorcallfunc ptr;
  105|     93|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|     93|    return ptr;
  107|     93|}
_functoolsmodule.c:_PyObject_CallNoArgs:
  157|      1|_PyObject_CallNoArgs(PyObject *func) {
  158|      1|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|      1|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  159|      1|    PyThreadState *tstate = _PyThreadState_GET();
  160|      1|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  161|      1|}
_functoolsmodule.c:_PyObject_VectorcallTstate:
  132|      2|{
  133|      2|    vectorcallfunc func;
  134|      2|    PyObject *res;
  135|       |
  136|      2|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 1, False: 1]
  |  Branch (136:5): [True: 1, False: 0]
  ------------------
  137|      2|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 1, False: 1]
  |  Branch (137:5): [True: 1, False: 0]
  ------------------
  138|       |
  139|      2|    func = _PyVectorcall_FunctionInline(callable);
  140|      2|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 1, False: 1]
  ------------------
  141|      1|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      1|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      1|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      1|    }
  144|      1|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|      2|}
_functoolsmodule.c:_PyVectorcall_FunctionInline:
   92|      2|{
   93|      2|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 2, False: 0]
  ------------------
   94|       |
   95|      2|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      2|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|      2|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 2]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|      2|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 2, False: 0]
  ------------------
  100|       |
  101|      2|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|      2|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 2, False: 0]
  ------------------
  103|       |
  104|      2|    vectorcallfunc ptr;
  105|      2|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|      2|    return ptr;
  107|      2|}
abstract.c:_PyObject_CallNoArgs:
  157|     85|_PyObject_CallNoArgs(PyObject *func) {
  158|     85|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|     85|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  159|     85|    PyThreadState *tstate = _PyThreadState_GET();
  160|     85|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  161|     85|}
abstract.c:_PyObject_VectorcallTstate:
  132|     85|{
  133|     85|    vectorcallfunc func;
  134|     85|    PyObject *res;
  135|       |
  136|     85|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 85, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|     85|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 0, False: 85]
  |  Branch (137:5): [True: 85, False: 0]
  ------------------
  138|       |
  139|     85|    func = _PyVectorcall_FunctionInline(callable);
  140|     85|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 85]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|     85|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|     85|}
abstract.c:_PyVectorcall_FunctionInline:
   92|     85|{
   93|     85|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 85, False: 0]
  ------------------
   94|       |
   95|     85|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|     85|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     85|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     85|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|     85|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|     85|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 85]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|     85|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 85, False: 0]
  ------------------
  100|       |
  101|     85|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|     85|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 85, False: 0]
  ------------------
  103|       |
  104|     85|    vectorcallfunc ptr;
  105|     85|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|     85|    return ptr;
  107|     85|}
call.c:_PyObject_VectorcallTstate:
  132|   838k|{
  133|   838k|    vectorcallfunc func;
  134|   838k|    PyObject *res;
  135|       |
  136|   838k|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 837k, False: 899]
  |  Branch (136:5): [True: 899, False: 0]
  ------------------
  137|   838k|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 836k, False: 2.00k]
  |  Branch (137:5): [True: 2.00k, False: 0]
  ------------------
  138|       |
  139|   838k|    func = _PyVectorcall_FunctionInline(callable);
  140|   838k|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 354k, False: 484k]
  ------------------
  141|   354k|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|   354k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|   354k|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|   354k|    }
  144|   484k|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|   838k|}
call.c:_PyVectorcall_FunctionInline:
   92|   953k|{
   93|   953k|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 953k, False: 0]
  ------------------
   94|       |
   95|   953k|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|   953k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   953k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   953k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|   953k|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|   953k|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 626, False: 953k]
  ------------------
   97|    626|        return NULL;
   98|    626|    }
   99|   953k|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 953k, False: 0]
  ------------------
  100|       |
  101|   953k|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|   953k|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 953k, False: 0]
  ------------------
  103|       |
  104|   953k|    vectorcallfunc ptr;
  105|   953k|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|   953k|    return ptr;
  107|   953k|}
call.c:_PyObject_CallNoArgsTstate:
  150|  2.00k|_PyObject_CallNoArgsTstate(PyThreadState *tstate, PyObject *func) {
  151|  2.00k|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  152|  2.00k|}
enumobject.c:_PyObject_CallNoArgs:
  157|    274|_PyObject_CallNoArgs(PyObject *func) {
  158|    274|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|    274|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  159|    274|    PyThreadState *tstate = _PyThreadState_GET();
  160|    274|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  161|    274|}
enumobject.c:_PyObject_VectorcallTstate:
  132|    274|{
  133|    274|    vectorcallfunc func;
  134|    274|    PyObject *res;
  135|       |
  136|    274|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (136:5): [True: 274, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  ------------------
  137|    274|    assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
  ------------------
  |  Branch (137:5): [True: 0, False: 274]
  |  Branch (137:5): [True: 274, False: 0]
  ------------------
  138|       |
  139|    274|    func = _PyVectorcall_FunctionInline(callable);
  140|    274|    if (func == NULL) {
  ------------------
  |  Branch (140:9): [True: 0, False: 274]
  ------------------
  141|      0|        Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      0|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  142|      0|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwnames);
  143|      0|    }
  144|    274|    res = func(callable, args, nargsf, kwnames);
  145|       |    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  146|    274|}
enumobject.c:_PyVectorcall_FunctionInline:
   92|    274|{
   93|    274|    assert(callable != NULL);
  ------------------
  |  Branch (93:5): [True: 274, False: 0]
  ------------------
   94|       |
   95|    274|    PyTypeObject *tp = Py_TYPE(callable);
  ------------------
  |  |  213|    274|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|    274|    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
  ------------------
  |  |  510|    274|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (96:9): [True: 0, False: 274]
  ------------------
   97|      0|        return NULL;
   98|      0|    }
   99|    274|    assert(PyCallable_Check(callable));
  ------------------
  |  Branch (99:5): [True: 274, False: 0]
  ------------------
  100|       |
  101|    274|    Py_ssize_t offset = tp->tp_vectorcall_offset;
  102|    274|    assert(offset > 0);
  ------------------
  |  Branch (102:5): [True: 274, False: 0]
  ------------------
  103|       |
  104|    274|    vectorcallfunc ptr;
  105|    274|    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
  106|    274|    return ptr;
  107|    274|}

typeobject.c:PyCell_GetRef:
   39|     14|{
   40|     14|    PyObject *res;
   41|     14|    Py_BEGIN_CRITICAL_SECTION(cell);
  ------------------
  |  |   51|     14|    {
  ------------------
   42|       |#ifdef Py_GIL_DISABLED
   43|       |    res = _Py_XNewRefWithLock(cell->ob_ref);
   44|       |#else
   45|     14|    res = Py_XNewRef(cell->ob_ref);
  ------------------
  |  |  551|     14|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|     14|#endif
   47|     14|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     14|    }
  ------------------
   48|     14|    return res;
   49|     14|}
bltinmodule.c:PyCell_GetRef:
   39|     20|{
   40|     20|    PyObject *res;
   41|     20|    Py_BEGIN_CRITICAL_SECTION(cell);
  ------------------
  |  |   51|     20|    {
  ------------------
   42|       |#ifdef Py_GIL_DISABLED
   43|       |    res = _Py_XNewRefWithLock(cell->ob_ref);
   44|       |#else
   45|     20|    res = Py_XNewRef(cell->ob_ref);
  ------------------
  |  |  551|     20|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|     20|#endif
   47|     20|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     20|    }
  ------------------
   48|     20|    return res;
   49|     20|}
ceval.c:PyCell_SwapTakeRef:
   20|  1.12k|{
   21|  1.12k|    PyObject *old_value;
   22|  1.12k|    Py_BEGIN_CRITICAL_SECTION(cell);
  ------------------
  |  |   51|  1.12k|    {
  ------------------
   23|  1.12k|    old_value = cell->ob_ref;
   24|  1.12k|    FT_ATOMIC_STORE_PTR_RELEASE(cell->ob_ref, value);
  ------------------
  |  |  164|  1.12k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
   25|  1.12k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.12k|    }
  ------------------
   26|  1.12k|    return old_value;
   27|  1.12k|}
ceval.c:_PyCell_GetStackRef:
   53|  6.69k|{
   54|  6.69k|    PyObject *value;
   55|       |#ifdef Py_GIL_DISABLED
   56|       |    value = _PyObject_CAST(_Py_atomic_load_ptr(&cell->ob_ref));
   57|       |    if (value == NULL) {
   58|       |        return PyStackRef_NULL;
   59|       |    }
   60|       |    _PyStackRef ref;
   61|       |    if (_Py_TryIncrefCompareStackRef(&cell->ob_ref, value, &ref)) {
   62|       |        return ref;
   63|       |    }
   64|       |#endif
   65|  6.69k|    value = PyCell_GetRef(cell);
   66|  6.69k|    if (value == NULL) {
  ------------------
  |  Branch (66:9): [True: 0, False: 6.69k]
  ------------------
   67|      0|        return PyStackRef_NULL;
   68|      0|    }
   69|  6.69k|    return PyStackRef_FromPyObjectSteal(value);
   70|  6.69k|}
ceval.c:PyCell_GetRef:
   39|  6.69k|{
   40|  6.69k|    PyObject *res;
   41|  6.69k|    Py_BEGIN_CRITICAL_SECTION(cell);
  ------------------
  |  |   51|  6.69k|    {
  ------------------
   42|       |#ifdef Py_GIL_DISABLED
   43|       |    res = _Py_XNewRefWithLock(cell->ob_ref);
   44|       |#else
   45|  6.69k|    res = Py_XNewRef(cell->ob_ref);
  ------------------
  |  |  551|  6.69k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  6.69k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.69k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|  6.69k|#endif
   47|  6.69k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  6.69k|    }
  ------------------
   48|  6.69k|    return res;
   49|  6.69k|}
ceval.c:PyCell_SetTakeRef:
   31|  1.12k|{
   32|  1.12k|    PyObject *old_value = PyCell_SwapTakeRef(cell, value);
   33|  1.12k|    Py_XDECREF(old_value);
  ------------------
  |  |  524|  1.12k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.12k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.12k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   34|  1.12k|}
cellobject.c:PyCell_SetTakeRef:
   31|    451|{
   32|    451|    PyObject *old_value = PyCell_SwapTakeRef(cell, value);
   33|    451|    Py_XDECREF(old_value);
  ------------------
  |  |  524|    451|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    451|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    451|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   34|    451|}
cellobject.c:PyCell_SwapTakeRef:
   20|    451|{
   21|    451|    PyObject *old_value;
   22|    451|    Py_BEGIN_CRITICAL_SECTION(cell);
  ------------------
  |  |   51|    451|    {
  ------------------
   23|    451|    old_value = cell->ob_ref;
   24|    451|    FT_ATOMIC_STORE_PTR_RELEASE(cell->ob_ref, value);
  ------------------
  |  |  164|    451|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
   25|    451|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    451|    }
  ------------------
   26|    451|    return old_value;
   27|    451|}

object.c:_Py_EnterRecursiveCallTstate:
  234|  19.9M|                                               const char *where) {
  235|  19.9M|    return (_Py_ReachedRecursionLimit(tstate) && _Py_CheckRecursiveCall(tstate, where));
  ------------------
  |  Branch (235:13): [True: 0, False: 19.9M]
  |  Branch (235:50): [True: 0, False: 0]
  ------------------
  236|  19.9M|}
object.c:_Py_ReachedRecursionLimit:
  211|  19.9M|static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate)  {
  212|  19.9M|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  213|  19.9M|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  214|       |    // Possible overflow if stack pointer is beyond the soft limit.
  215|       |    // _Py_CheckRecursiveCall will check for corner cases and
  216|       |    // report an error if there is an overflow.
  217|  19.9M|#if _Py_STACK_GROWS_DOWN
  218|  19.9M|    return here_addr < _tstate->c_stack_soft_limit;
  219|       |#else
  220|       |    return here_addr > _tstate->c_stack_soft_limit;
  221|       |#endif
  222|  19.9M|}
object.c:_Py_LeaveRecursiveCallTstate:
  243|  19.9M|static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
  244|  19.9M|    (void)tstate;
  245|  19.9M|}
ceval.c:_PyEval_EvalFrame:
  119|   141k|{
  120|   141k|    EVAL_CALL_STAT_INC(EVAL_CALL_TOTAL);
  ------------------
  |  |   79|   141k|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
  121|   141k|    if (tstate->interp->eval_frame == NULL) {
  ------------------
  |  Branch (121:9): [True: 141k, False: 0]
  ------------------
  122|   141k|        return _PyEval_EvalFrameDefault(tstate, frame, throwflag);
  123|   141k|    }
  124|      0|    return tstate->interp->eval_frame(tstate, frame, throwflag);
  125|   141k|}
ceval.c:_Py_EnterRecursiveCallTstate:
  234|  8.64M|                                               const char *where) {
  235|  8.64M|    return (_Py_ReachedRecursionLimit(tstate) && _Py_CheckRecursiveCall(tstate, where));
  ------------------
  |  Branch (235:13): [True: 0, False: 8.64M]
  |  Branch (235:50): [True: 0, False: 0]
  ------------------
  236|  8.64M|}
ceval.c:_Py_ReachedRecursionLimit:
  211|  27.2M|static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate)  {
  212|  27.2M|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  213|  27.2M|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  214|       |    // Possible overflow if stack pointer is beyond the soft limit.
  215|       |    // _Py_CheckRecursiveCall will check for corner cases and
  216|       |    // report an error if there is an overflow.
  217|  27.2M|#if _Py_STACK_GROWS_DOWN
  218|  27.2M|    return here_addr < _tstate->c_stack_soft_limit;
  219|       |#else
  220|       |    return here_addr > _tstate->c_stack_soft_limit;
  221|       |#endif
  222|  27.2M|}
ceval.c:_Py_LeaveRecursiveCallTstate:
  243|  18.6M|static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
  244|  18.6M|    (void)tstate;
  245|  18.6M|}
ceval.c:_Py_EnterRecursiveCall:
  238|  8.45M|static inline int _Py_EnterRecursiveCall(const char *where) {
  239|  8.45M|    PyThreadState *tstate = _PyThreadState_GET();
  240|  8.45M|    return _Py_EnterRecursiveCallTstate(tstate, where);
  241|  8.45M|}
ceval.c:_Py_LeaveRecursiveCall:
  254|  5.93M|static inline void _Py_LeaveRecursiveCall(void)  {
  255|  5.93M|}
gc.c:_Py_eval_breaker_bit_is_set:
  372|  33.0M|{
  373|  33.0M|    uintptr_t b = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker);
  374|  33.0M|    return (b & bit) != 0;
  375|  33.0M|}
gc.c:_Py_set_eval_breaker_bit:
  360|  8.38k|{
  361|  8.38k|    _Py_atomic_or_uintptr(&tstate->eval_breaker, bit);
  362|  8.38k|}
ceval_gil.c:_Py_eval_breaker_bit_is_set:
  372|  56.0k|{
  373|  56.0k|    uintptr_t b = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker);
  374|  56.0k|    return (b & bit) != 0;
  375|  56.0k|}
ceval_gil.c:_Py_unset_eval_breaker_bit:
  366|  56.1k|{
  367|  56.1k|    _Py_atomic_and_uintptr(&tstate->eval_breaker, ~bit);
  368|  56.1k|}
signalmodule.c:_Py_unset_eval_breaker_bit:
  366|  8.18k|{
  367|  8.18k|    _Py_atomic_and_uintptr(&tstate->eval_breaker, ~bit);
  368|  8.18k|}
abstract.c:_Py_EnterRecursiveCallTstate:
  234|    221|                                               const char *where) {
  235|    221|    return (_Py_ReachedRecursionLimit(tstate) && _Py_CheckRecursiveCall(tstate, where));
  ------------------
  |  Branch (235:13): [True: 0, False: 221]
  |  Branch (235:50): [True: 0, False: 0]
  ------------------
  236|    221|}
abstract.c:_Py_ReachedRecursionLimit:
  211|    221|static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate)  {
  212|    221|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  213|    221|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  214|       |    // Possible overflow if stack pointer is beyond the soft limit.
  215|       |    // _Py_CheckRecursiveCall will check for corner cases and
  216|       |    // report an error if there is an overflow.
  217|    221|#if _Py_STACK_GROWS_DOWN
  218|    221|    return here_addr < _tstate->c_stack_soft_limit;
  219|       |#else
  220|       |    return here_addr > _tstate->c_stack_soft_limit;
  221|       |#endif
  222|    221|}
abstract.c:_Py_LeaveRecursiveCallTstate:
  243|    221|static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
  244|    221|    (void)tstate;
  245|    221|}
call.c:_Py_EnterRecursiveCallTstate:
  234|   374k|                                               const char *where) {
  235|   374k|    return (_Py_ReachedRecursionLimit(tstate) && _Py_CheckRecursiveCall(tstate, where));
  ------------------
  |  Branch (235:13): [True: 0, False: 374k]
  |  Branch (235:50): [True: 0, False: 0]
  ------------------
  236|   374k|}
call.c:_Py_ReachedRecursionLimit:
  211|   374k|static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate)  {
  212|   374k|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  213|   374k|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  214|       |    // Possible overflow if stack pointer is beyond the soft limit.
  215|       |    // _Py_CheckRecursiveCall will check for corner cases and
  216|       |    // report an error if there is an overflow.
  217|   374k|#if _Py_STACK_GROWS_DOWN
  218|   374k|    return here_addr < _tstate->c_stack_soft_limit;
  219|       |#else
  220|       |    return here_addr > _tstate->c_stack_soft_limit;
  221|       |#endif
  222|   374k|}
call.c:_Py_LeaveRecursiveCallTstate:
  243|   374k|static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
  244|   374k|    (void)tstate;
  245|   374k|}
descrobject.c:_Py_EnterRecursiveCallTstate:
  234|   148k|                                               const char *where) {
  235|   148k|    return (_Py_ReachedRecursionLimit(tstate) && _Py_CheckRecursiveCall(tstate, where));
  ------------------
  |  Branch (235:13): [True: 0, False: 148k]
  |  Branch (235:50): [True: 0, False: 0]
  ------------------
  236|   148k|}
descrobject.c:_Py_ReachedRecursionLimit:
  211|   148k|static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate)  {
  212|   148k|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  213|   148k|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  214|       |    // Possible overflow if stack pointer is beyond the soft limit.
  215|       |    // _Py_CheckRecursiveCall will check for corner cases and
  216|       |    // report an error if there is an overflow.
  217|   148k|#if _Py_STACK_GROWS_DOWN
  218|   148k|    return here_addr < _tstate->c_stack_soft_limit;
  219|       |#else
  220|       |    return here_addr > _tstate->c_stack_soft_limit;
  221|       |#endif
  222|   148k|}
descrobject.c:_Py_LeaveRecursiveCallTstate:
  243|  99.7k|static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
  244|  99.7k|    (void)tstate;
  245|  99.7k|}
descrobject.c:_Py_LeaveRecursiveCall:
  254|  48.5k|static inline void _Py_LeaveRecursiveCall(void)  {
  255|  48.5k|}
genobject.c:_PyEval_EvalFrame:
  119|  50.7k|{
  120|  50.7k|    EVAL_CALL_STAT_INC(EVAL_CALL_TOTAL);
  ------------------
  |  |   79|  50.7k|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
  121|  50.7k|    if (tstate->interp->eval_frame == NULL) {
  ------------------
  |  Branch (121:9): [True: 50.7k, False: 0]
  ------------------
  122|  50.7k|        return _PyEval_EvalFrameDefault(tstate, frame, throwflag);
  123|  50.7k|    }
  124|      0|    return tstate->interp->eval_frame(tstate, frame, throwflag);
  125|  50.7k|}
methodobject.c:_Py_EnterRecursiveCallTstate:
  234|   148k|                                               const char *where) {
  235|   148k|    return (_Py_ReachedRecursionLimit(tstate) && _Py_CheckRecursiveCall(tstate, where));
  ------------------
  |  Branch (235:13): [True: 0, False: 148k]
  |  Branch (235:50): [True: 0, False: 0]
  ------------------
  236|   148k|}
methodobject.c:_Py_ReachedRecursionLimit:
  211|   148k|static inline int _Py_ReachedRecursionLimit(PyThreadState *tstate)  {
  212|   148k|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  213|   148k|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  214|       |    // Possible overflow if stack pointer is beyond the soft limit.
  215|       |    // _Py_CheckRecursiveCall will check for corner cases and
  216|       |    // report an error if there is an overflow.
  217|   148k|#if _Py_STACK_GROWS_DOWN
  218|   148k|    return here_addr < _tstate->c_stack_soft_limit;
  219|       |#else
  220|       |    return here_addr > _tstate->c_stack_soft_limit;
  221|       |#endif
  222|   148k|}
methodobject.c:_Py_LeaveRecursiveCallTstate:
  243|   148k|static inline void _Py_LeaveRecursiveCallTstate(PyThreadState *tstate) {
  244|   148k|    (void)tstate;
  245|   148k|}

typeobject.c:_PyLocals_GetKind:
  205|     28|{
  206|     28|    assert(PyBytes_Check(kinds));
  ------------------
  |  Branch (206:5): [True: 28, False: 0]
  ------------------
  207|     28|    assert(0 <= i && i < PyBytes_GET_SIZE(kinds));
  ------------------
  |  Branch (207:5): [True: 28, False: 0]
  |  Branch (207:5): [True: 28, False: 0]
  ------------------
  208|     28|    const char *ptr = PyBytes_AS_STRING(kinds);
  ------------------
  |  |   27|     28|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|     28|    return (_PyLocals_Kind)(ptr[i]);
  210|     28|}
ceval.c:read_u16:
  364|   108M|{
  365|   108M|    return *p;
  366|   108M|}
ceval.c:read_obj:
  386|  3.76M|{
  387|  3.76M|    PyObject *val;
  388|  3.76M|    memcpy(&val, p, sizeof(val));
  389|  3.76M|    return val;
  390|  3.76M|}
ceval.c:read_u32:
  370|  14.9M|{
  371|  14.9M|    uint32_t val;
  372|  14.9M|    memcpy(&val, p, sizeof(val));
  373|  14.9M|    return val;
  374|  14.9M|}
ceval.c:parse_varint:
  395|   309k|parse_varint(unsigned char *p, int *result) {
  396|   309k|    int val = p[0] & 63;
  397|   457k|    while (p[0] & 64) {
  ------------------
  |  Branch (397:12): [True: 148k, False: 309k]
  ------------------
  398|   148k|        p++;
  399|   148k|        val = (val << 6) | (p[0] & 63);
  400|   148k|    }
  401|   309k|    *result = val;
  402|   309k|    return p+1;
  403|   309k|}
specialize.c:adaptive_counter_warmup:
  480|  56.1k|adaptive_counter_warmup(void) {
  481|  56.1k|    return adaptive_counter_bits(ADAPTIVE_WARMUP_VALUE,
  ------------------
  |  |  454|  56.1k|#define ADAPTIVE_WARMUP_VALUE 1
  ------------------
  482|  56.1k|                                 ADAPTIVE_WARMUP_BACKOFF);
  ------------------
  |  |  455|  56.1k|#define ADAPTIVE_WARMUP_BACKOFF 1
  ------------------
  483|  56.1k|}
specialize.c:adaptive_counter_bits:
  475|   239k|adaptive_counter_bits(uint16_t value, uint16_t backoff) {
  476|   239k|    return make_backoff_counter(value, backoff);
  477|   239k|}
specialize.c:adaptive_counter_cooldown:
  486|   183k|adaptive_counter_cooldown(void) {
  487|   183k|    return adaptive_counter_bits(ADAPTIVE_COOLDOWN_VALUE,
  ------------------
  |  |  463|   183k|#define ADAPTIVE_COOLDOWN_VALUE 52
  ------------------
  488|   183k|                                 ADAPTIVE_COOLDOWN_BACKOFF);
  ------------------
  |  |  464|   183k|#define ADAPTIVE_COOLDOWN_BACKOFF 0
  ------------------
  489|   183k|}
specialize.c:adaptive_counter_backoff:
  492|  3.73k|adaptive_counter_backoff(_Py_BackoffCounter counter) {
  493|  3.73k|    return restart_backoff_counter(counter);
  494|  3.73k|}
specialize.c:write_u32:
  346|  1.66k|{
  347|  1.66k|    memcpy(p, &val, sizeof(val));
  348|  1.66k|}
specialize.c:write_ptr:
  358|    459|{
  359|    459|    memcpy(p, &val, sizeof(val));
  360|    459|}
codeobject.c:_PyLocals_SetKind:
  214|   110k|{
  215|   110k|    assert(PyBytes_Check(kinds));
  ------------------
  |  Branch (215:5): [True: 110k, False: 0]
  ------------------
  216|   110k|    assert(0 <= i && i < PyBytes_GET_SIZE(kinds));
  ------------------
  |  Branch (216:5): [True: 110k, False: 0]
  |  Branch (216:5): [True: 110k, False: 0]
  ------------------
  217|   110k|    char *ptr = PyBytes_AS_STRING(kinds);
  ------------------
  |  |   27|   110k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   110k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   110k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|   110k|    ptr[i] = (char) kind;
  219|   110k|}
codeobject.c:_PyLocals_GetKind:
  205|   241k|{
  206|   241k|    assert(PyBytes_Check(kinds));
  ------------------
  |  Branch (206:5): [True: 241k, False: 0]
  ------------------
  207|   241k|    assert(0 <= i && i < PyBytes_GET_SIZE(kinds));
  ------------------
  |  Branch (207:5): [True: 241k, False: 0]
  |  Branch (207:5): [True: 241k, False: 0]
  ------------------
  208|   241k|    const char *ptr = PyBytes_AS_STRING(kinds);
  ------------------
  |  |   27|   241k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   241k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   241k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|   241k|    return (_PyLocals_Kind)(ptr[i]);
  210|   241k|}
frameobject.c:_PyLocals_GetKind:
  205|      2|{
  206|      2|    assert(PyBytes_Check(kinds));
  ------------------
  |  Branch (206:5): [True: 2, False: 0]
  ------------------
  207|      2|    assert(0 <= i && i < PyBytes_GET_SIZE(kinds));
  ------------------
  |  Branch (207:5): [True: 2, False: 0]
  |  Branch (207:5): [True: 2, False: 0]
  ------------------
  208|      2|    const char *ptr = PyBytes_AS_STRING(kinds);
  ------------------
  |  |   27|      2|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|      2|    return (_PyLocals_Kind)(ptr[i]);
  210|      2|}
assemble.c:write_location_entry_start:
  434|  1.71M|{
  435|  1.71M|    assert((code & 15) == code);
  ------------------
  |  Branch (435:5): [True: 1.71M, False: 0]
  ------------------
  436|  1.71M|    *ptr = 128 | (uint8_t)(code << 3) | (uint8_t)(length - 1);
  437|  1.71M|    return 1;
  438|  1.71M|}
assemble.c:write_signed_varint:
  420|   967k|{
  421|   967k|    unsigned int uval;
  422|   967k|    if (val < 0) {
  ------------------
  |  Branch (422:9): [True: 27.1k, False: 940k]
  ------------------
  423|       |        // (unsigned int)(-val) has an undefined behavior for INT_MIN
  424|  27.1k|        uval = ((0 - (unsigned int)val) << 1) | 1;
  425|  27.1k|    }
  426|   940k|    else {
  427|   940k|        uval = (unsigned int)val << 1;
  428|   940k|    }
  429|   967k|    return write_varint(ptr, uval);
  430|   967k|}
assemble.c:write_varint:
  407|  3.86M|{
  408|  3.86M|    int written = 1;
  409|  5.82M|    while (val >= 64) {
  ------------------
  |  Branch (409:12): [True: 1.96M, False: 3.86M]
  ------------------
  410|  1.96M|        *ptr++ = 64 | (val & 63);
  411|  1.96M|        val >>= 6;
  412|  1.96M|        written++;
  413|  1.96M|    }
  414|  3.86M|    *ptr = (uint8_t)val;
  415|  3.86M|    return written;
  416|  3.86M|}

dictobject.c:DK_ENTRIES:
  285|  3.97M|static inline PyDictKeyEntry* DK_ENTRIES(PyDictKeysObject *dk) {
  286|  3.97M|    assert(dk->dk_kind == DICT_KEYS_GENERAL);
  ------------------
  |  Branch (286:5): [True: 3.97M, False: 0]
  ------------------
  287|  3.97M|    return (PyDictKeyEntry*)_DK_ENTRIES(dk);
  288|  3.97M|}
dictobject.c:_DK_ENTRIES:
  279|  29.5M|static inline void* _DK_ENTRIES(PyDictKeysObject *dk) {
  280|  29.5M|    int8_t *indices = (int8_t*)(dk->dk_indices);
  281|  29.5M|    size_t index = (size_t)1 << dk->dk_log2_index_bytes;
  282|  29.5M|    return (&indices[index]);
  283|  29.5M|}
dictobject.c:DK_UNICODE_ENTRIES:
  289|  11.6M|static inline PyDictUnicodeEntry* DK_UNICODE_ENTRIES(PyDictKeysObject *dk) {
  290|  11.6M|    assert(dk->dk_kind != DICT_KEYS_GENERAL);
  ------------------
  |  Branch (290:5): [True: 11.6M, False: 0]
  ------------------
  291|  11.6M|    return (PyDictUnicodeEntry*)_DK_ENTRIES(dk);
  292|  11.6M|}
dictobject.c:get_insertion_order_array:
  340|  2.16k|{
  341|  2.16k|    return (uint8_t *)&values->values[values->capacity];
  342|  2.16k|}
dictobject.c:_PyDict_NotifyEvent:
  322|  5.43M|{
  323|  5.43M|    assert(Py_REFCNT((PyObject*)mp) > 0);
  ------------------
  |  Branch (323:5): [True: 5.43M, False: 0]
  ------------------
  324|  5.43M|    int watcher_bits = FT_ATOMIC_LOAD_UINT64_ACQUIRE(mp->_ma_watcher_tag) & DICT_WATCHER_MASK;
  ------------------
  |  |  160|  5.43M|#define FT_ATOMIC_LOAD_UINT64_ACQUIRE(value) value
  ------------------
                  int watcher_bits = FT_ATOMIC_LOAD_UINT64_ACQUIRE(mp->_ma_watcher_tag) & DICT_WATCHER_MASK;
  ------------------
  |  |  297|  5.43M|#define DICT_WATCHER_MASK ((1 << DICT_MAX_WATCHERS) - 1)
  |  |  ------------------
  |  |  |  |   11|  5.43M|#define DICT_MAX_WATCHERS 8
  |  |  ------------------
  ------------------
  325|  5.43M|    if (watcher_bits) {
  ------------------
  |  Branch (325:9): [True: 9.11k, False: 5.42M]
  ------------------
  326|  9.11k|        RARE_EVENT_STAT_INC(watched_dict_modification);
  ------------------
  |  |   89|  9.11k|#define RARE_EVENT_STAT_INC(name) ((void)0)
  ------------------
  327|  9.11k|        _PyDict_SendEvent(watcher_bits, event, mp, key, value);
  328|  9.11k|    }
  329|  5.43M|}
dictobject.c:_PyDictValues_AddToInsertionOrder:
  346|  2.16k|{
  347|  2.16k|    assert(ix < SHARED_KEYS_MAX_SIZE);
  ------------------
  |  Branch (347:5): [True: 2.16k, False: 0]
  ------------------
  348|  2.16k|    int size = values->size;
  349|  2.16k|    uint8_t *array = get_insertion_order_array(values);
  350|  2.16k|    assert(size < values->capacity);
  ------------------
  |  Branch (350:5): [True: 2.16k, False: 0]
  ------------------
  351|  2.16k|    assert(((uint8_t)ix) == ix);
  ------------------
  |  Branch (351:5): [True: 2.16k, False: 0]
  ------------------
  352|  2.16k|    array[size] = (uint8_t)ix;
  353|  2.16k|    values->size = size+1;
  354|  2.16k|}
dictobject.c:shared_keys_usable_size:
  362|  51.5k|{
  363|       |    // dk_usable will decrease for each instance that is created and each
  364|       |    // value that is added.  dk_nentries will increase for each value that
  365|       |    // is added.  We want to always return the right value or larger.
  366|       |    // We therefore increase dk_nentries first and we decrease dk_usable
  367|       |    // second, and conversely here we read dk_usable first and dk_entries
  368|       |    // second (to avoid the case where we read entries before the increment
  369|       |    // and read usable after the decrement)
  370|  51.5k|    Py_ssize_t dk_usable = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_usable);
  ------------------
  |  |  148|  51.5k|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
  371|  51.5k|    Py_ssize_t dk_nentries = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_nentries);
  ------------------
  |  |  148|  51.5k|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
  372|  51.5k|    return dk_nentries + dk_usable;
  373|  51.5k|}
dictobject.c:_PyDictKeys_AsSharedKeys:
  249|    362|{
  250|    362|    assert(keys->dk_kind == DICT_KEYS_SPLIT);
  ------------------
  |  Branch (250:5): [True: 362, False: 0]
  ------------------
  251|    362|    return _Py_CONTAINER_OF(keys, struct _instancekeysobject, dsk_keys);
  ------------------
  |  |  298|    362|    (type*)((char*)ptr - offsetof(type, member))
  ------------------
  252|    362|}
typeobject.c:_PyInlineValuesSize:
  377|  51.2k|{
  378|  51.2k|    PyDictKeysObject *keys = ((PyHeapTypeObject*)tp)->ht_cached_keys;
  379|  51.2k|    assert(keys != NULL);
  ------------------
  |  Branch (379:5): [True: 51.2k, False: 0]
  ------------------
  380|  51.2k|    size_t size = shared_keys_usable_size(keys);
  381|  51.2k|    size_t prefix_size = _Py_SIZE_ROUND_UP(size, sizeof(PyObject *));
  ------------------
  |  |  238|  51.2k|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|  51.2k|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
  382|  51.2k|    assert(prefix_size < 256);
  ------------------
  |  Branch (382:5): [True: 51.2k, False: 0]
  ------------------
  383|  51.2k|    return prefix_size + (size + 1) * sizeof(PyObject *);
  384|  51.2k|}
typeobject.c:shared_keys_usable_size:
  362|  51.2k|{
  363|       |    // dk_usable will decrease for each instance that is created and each
  364|       |    // value that is added.  dk_nentries will increase for each value that
  365|       |    // is added.  We want to always return the right value or larger.
  366|       |    // We therefore increase dk_nentries first and we decrease dk_usable
  367|       |    // second, and conversely here we read dk_usable first and dk_entries
  368|       |    // second (to avoid the case where we read entries before the increment
  369|       |    // and read usable after the decrement)
  370|  51.2k|    Py_ssize_t dk_usable = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_usable);
  ------------------
  |  |  148|  51.2k|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
  371|  51.2k|    Py_ssize_t dk_nentries = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_nentries);
  ------------------
  |  |  148|  51.2k|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
  372|  51.2k|    return dk_nentries + dk_usable;
  373|  51.2k|}
ceval.c:DK_UNICODE_ENTRIES:
  289|  33.2M|static inline PyDictUnicodeEntry* DK_UNICODE_ENTRIES(PyDictKeysObject *dk) {
  290|  33.2M|    assert(dk->dk_kind != DICT_KEYS_GENERAL);
  ------------------
  |  Branch (290:5): [True: 33.2M, False: 0]
  ------------------
  291|  33.2M|    return (PyDictUnicodeEntry*)_DK_ENTRIES(dk);
  292|  33.2M|}
ceval.c:_DK_ENTRIES:
  279|  33.2M|static inline void* _DK_ENTRIES(PyDictKeysObject *dk) {
  280|  33.2M|    int8_t *indices = (int8_t*)(dk->dk_indices);
  281|  33.2M|    size_t index = (size_t)1 << dk->dk_log2_index_bytes;
  282|  33.2M|    return (&indices[index]);
  283|  33.2M|}
ceval.c:_PyDictValues_AddToInsertionOrder:
  346|   443k|{
  347|   443k|    assert(ix < SHARED_KEYS_MAX_SIZE);
  ------------------
  |  Branch (347:5): [True: 443k, False: 0]
  ------------------
  348|   443k|    int size = values->size;
  349|   443k|    uint8_t *array = get_insertion_order_array(values);
  350|   443k|    assert(size < values->capacity);
  ------------------
  |  Branch (350:5): [True: 443k, False: 0]
  ------------------
  351|   443k|    assert(((uint8_t)ix) == ix);
  ------------------
  |  Branch (351:5): [True: 443k, False: 0]
  ------------------
  352|   443k|    array[size] = (uint8_t)ix;
  353|   443k|    values->size = size+1;
  354|   443k|}
ceval.c:get_insertion_order_array:
  340|   443k|{
  341|   443k|    return (uint8_t *)&values->values[values->capacity];
  342|   443k|}

listobject.c:_Py_freelists_GET:
   19|  1.81M|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  1.81M|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  1.81M|    return &interp->object_state.freelists;
   30|  1.81M|#endif
   31|  1.81M|}
listobject.c:_PyFreeList_Pop:
   88|   905k|{
   89|   905k|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|   905k|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 811k, False: 93.8k]
  ------------------
   91|   811k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|   811k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|   811k|        _Py_NewReference(op);
   93|   811k|    }
   94|   905k|    return op;
   95|   905k|}
listobject.c:_PyFreeList_PopNoStats:
   76|   905k|{
   77|   905k|    void *obj = fl->freelist;
   78|   905k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 811k, False: 93.8k]
  ------------------
   79|   811k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 811k, False: 0]
  ------------------
   80|   811k|        fl->freelist = *(void **)obj;
   81|   811k|        fl->size--;
   82|   811k|    }
   83|   905k|    return obj;
   84|   905k|}
listobject.c:_PyFreeList_Free:
   68|   905k|{
   69|   905k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 93.2k, False: 812k]
  ------------------
   70|  93.2k|        dofree(obj);
   71|  93.2k|    }
   72|   905k|}
listobject.c:_PyFreeList_Push:
   54|   905k|{
   55|   905k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 812k, False: 93.2k]
  |  Branch (55:31): [True: 812k, False: 0]
  ------------------
   56|   812k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|   812k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|   812k|        fl->freelist = obj;
   58|   812k|        fl->size++;
   59|   812k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|   812k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|   812k|        return 1;
   61|   812k|    }
   62|  93.2k|    return 0;
   63|   905k|}
longobject.c:_PyFreeList_Pop:
   88|  12.7M|{
   89|  12.7M|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|  12.7M|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 12.1M, False: 528k]
  ------------------
   91|  12.1M|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|  12.1M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|  12.1M|        _Py_NewReference(op);
   93|  12.1M|    }
   94|  12.7M|    return op;
   95|  12.7M|}
longobject.c:_PyFreeList_PopNoStats:
   76|  12.7M|{
   77|  12.7M|    void *obj = fl->freelist;
   78|  12.7M|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 12.1M, False: 528k]
  ------------------
   79|  12.1M|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 12.1M, False: 0]
  ------------------
   80|  12.1M|        fl->freelist = *(void **)obj;
   81|  12.1M|        fl->size--;
   82|  12.1M|    }
   83|  12.7M|    return obj;
   84|  12.7M|}
longobject.c:_PyFreeList_Free:
   68|  12.7M|{
   69|  12.7M|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 532k, False: 12.1M]
  ------------------
   70|   532k|        dofree(obj);
   71|   532k|    }
   72|  12.7M|}
longobject.c:_PyFreeList_Push:
   54|  12.7M|{
   55|  12.7M|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 12.1M, False: 532k]
  |  Branch (55:31): [True: 12.1M, False: 0]
  ------------------
   56|  12.1M|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  12.1M|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  12.1M|        fl->freelist = obj;
   58|  12.1M|        fl->size++;
   59|  12.1M|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  12.1M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  12.1M|        return 1;
   61|  12.1M|    }
   62|   532k|    return 0;
   63|  12.7M|}
longobject.c:_Py_freelists_GET:
   19|  25.4M|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  25.4M|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  25.4M|    return &interp->object_state.freelists;
   30|  25.4M|#endif
   31|  25.4M|}
dictobject.c:_Py_freelists_GET:
   19|  3.12M|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  3.12M|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  3.12M|    return &interp->object_state.freelists;
   30|  3.12M|#endif
   31|  3.12M|}
dictobject.c:_PyFreeList_Pop:
   88|   882k|{
   89|   882k|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|   882k|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 488k, False: 393k]
  ------------------
   91|   488k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|   488k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|   488k|        _Py_NewReference(op);
   93|   488k|    }
   94|   882k|    return op;
   95|   882k|}
dictobject.c:_PyFreeList_PopNoStats:
   76|  1.56M|{
   77|  1.56M|    void *obj = fl->freelist;
   78|  1.56M|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 1.10M, False: 461k]
  ------------------
   79|  1.10M|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 1.10M, False: 0]
  ------------------
   80|  1.10M|        fl->freelist = *(void **)obj;
   81|  1.10M|        fl->size--;
   82|  1.10M|    }
   83|  1.56M|    return obj;
   84|  1.56M|}
dictobject.c:_PyFreeList_PopMem:
   99|   682k|{
  100|   682k|    void *op = _PyFreeList_PopNoStats(fl);
  101|   682k|    if (op != NULL) {
  ------------------
  |  Branch (101:9): [True: 615k, False: 67.2k]
  ------------------
  102|   615k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|   615k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  103|   615k|    }
  104|   682k|    return op;
  105|   682k|}
dictobject.c:_PyFreeList_Free:
   68|  1.56M|{
   69|  1.56M|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 457k, False: 1.10M]
  ------------------
   70|   457k|        dofree(obj);
   71|   457k|    }
   72|  1.56M|}
dictobject.c:_PyFreeList_Push:
   54|  1.56M|{
   55|  1.56M|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 1.10M, False: 457k]
  |  Branch (55:31): [True: 1.10M, False: 0]
  ------------------
   56|  1.10M|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  1.10M|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  1.10M|        fl->freelist = obj;
   58|  1.10M|        fl->size++;
   59|  1.10M|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  1.10M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  1.10M|        return 1;
   61|  1.10M|    }
   62|   457k|    return 0;
   63|  1.56M|}
object.c:_PyFreeList_PopNoStats:
   76|  12.5k|{
   77|  12.5k|    void *obj = fl->freelist;
   78|  12.5k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 12.2k, False: 280]
  ------------------
   79|  12.2k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 12.2k, False: 0]
  ------------------
   80|  12.2k|        fl->freelist = *(void **)obj;
   81|  12.2k|        fl->size--;
   82|  12.2k|    }
   83|  12.5k|    return obj;
   84|  12.5k|}
rangeobject.c:_PyFreeList_Free:
   68|    758|{
   69|    758|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 0, False: 758]
  ------------------
   70|      0|        dofree(obj);
   71|      0|    }
   72|    758|}
rangeobject.c:_PyFreeList_Push:
   54|    758|{
   55|    758|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 758, False: 0]
  |  Branch (55:31): [True: 758, False: 0]
  ------------------
   56|    758|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|    758|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|    758|        fl->freelist = obj;
   58|    758|        fl->size++;
   59|    758|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|    758|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|    758|        return 1;
   61|    758|    }
   62|      0|    return 0;
   63|    758|}
rangeobject.c:_Py_freelists_GET:
   19|  1.51k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  1.51k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  1.51k|    return &interp->object_state.freelists;
   30|  1.51k|#endif
   31|  1.51k|}
rangeobject.c:_PyFreeList_Pop:
   88|    758|{
   89|    758|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|    758|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 746, False: 12]
  ------------------
   91|    746|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|    746|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|    746|        _Py_NewReference(op);
   93|    746|    }
   94|    758|    return op;
   95|    758|}
rangeobject.c:_PyFreeList_PopNoStats:
   76|    758|{
   77|    758|    void *obj = fl->freelist;
   78|    758|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 746, False: 12]
  ------------------
   79|    746|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 746, False: 0]
  ------------------
   80|    746|        fl->freelist = *(void **)obj;
   81|    746|        fl->size--;
   82|    746|    }
   83|    758|    return obj;
   84|    758|}
sliceobject.c:_PyFreeList_Pop:
   88|  39.5k|{
   89|  39.5k|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|  39.5k|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 32.1k, False: 7.42k]
  ------------------
   91|  32.1k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|  32.1k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|  32.1k|        _Py_NewReference(op);
   93|  32.1k|    }
   94|  39.5k|    return op;
   95|  39.5k|}
sliceobject.c:_PyFreeList_PopNoStats:
   76|  39.5k|{
   77|  39.5k|    void *obj = fl->freelist;
   78|  39.5k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 32.1k, False: 7.42k]
  ------------------
   79|  32.1k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 32.1k, False: 0]
  ------------------
   80|  32.1k|        fl->freelist = *(void **)obj;
   81|  32.1k|        fl->size--;
   82|  32.1k|    }
   83|  39.5k|    return obj;
   84|  39.5k|}
sliceobject.c:_Py_freelists_GET:
   19|  79.0k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  79.0k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  79.0k|    return &interp->object_state.freelists;
   30|  79.0k|#endif
   31|  79.0k|}
sliceobject.c:_PyFreeList_Free:
   68|  39.4k|{
   69|  39.4k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 7.30k, False: 32.1k]
  ------------------
   70|  7.30k|        dofree(obj);
   71|  7.30k|    }
   72|  39.4k|}
sliceobject.c:_PyFreeList_Push:
   54|  39.4k|{
   55|  39.4k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 32.1k, False: 7.30k]
  |  Branch (55:31): [True: 32.1k, False: 0]
  ------------------
   56|  32.1k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  32.1k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  32.1k|        fl->freelist = obj;
   58|  32.1k|        fl->size++;
   59|  32.1k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  32.1k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  32.1k|        return 1;
   61|  32.1k|    }
   62|  7.30k|    return 0;
   63|  39.4k|}
tupleobject.c:_PyFreeList_Pop:
   88|  54.9M|{
   89|  54.9M|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|  54.9M|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 6.37M, False: 48.5M]
  ------------------
   91|  6.37M|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|  6.37M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|  6.37M|        _Py_NewReference(op);
   93|  6.37M|    }
   94|  54.9M|    return op;
   95|  54.9M|}
tupleobject.c:_PyFreeList_PopNoStats:
   76|  54.9M|{
   77|  54.9M|    void *obj = fl->freelist;
   78|  54.9M|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 6.37M, False: 48.5M]
  ------------------
   79|  6.37M|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 6.37M, False: 0]
  ------------------
   80|  6.37M|        fl->freelist = *(void **)obj;
   81|  6.37M|        fl->size--;
   82|  6.37M|    }
   83|  54.9M|    return obj;
   84|  54.9M|}
tupleobject.c:_PyFreeList_Free:
   68|  9.82k|{
   69|  9.82k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 0, False: 9.82k]
  ------------------
   70|      0|        dofree(obj);
   71|      0|    }
   72|  9.82k|}
tupleobject.c:_PyFreeList_Push:
   54|  54.9M|{
   55|  54.9M|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 6.38M, False: 48.5M]
  |  Branch (55:31): [True: 6.38M, False: 0]
  ------------------
   56|  6.38M|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  6.38M|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  6.38M|        fl->freelist = obj;
   58|  6.38M|        fl->size++;
   59|  6.38M|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  6.38M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  6.38M|        return 1;
   61|  6.38M|    }
   62|  48.5M|    return 0;
   63|  54.9M|}
tupleobject.c:_Py_freelists_GET:
   19|   109M|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|   109M|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|   109M|    return &interp->object_state.freelists;
   30|   109M|#endif
   31|   109M|}
unicode_writer.c:_PyFreeList_PopMem:
   99|  82.4k|{
  100|  82.4k|    void *op = _PyFreeList_PopNoStats(fl);
  101|  82.4k|    if (op != NULL) {
  ------------------
  |  Branch (101:9): [True: 80.0k, False: 2.40k]
  ------------------
  102|  80.0k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|  80.0k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  103|  80.0k|    }
  104|  82.4k|    return op;
  105|  82.4k|}
unicode_writer.c:_PyFreeList_PopNoStats:
   76|  82.4k|{
   77|  82.4k|    void *obj = fl->freelist;
   78|  82.4k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 80.0k, False: 2.40k]
  ------------------
   79|  80.0k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 80.0k, False: 0]
  ------------------
   80|  80.0k|        fl->freelist = *(void **)obj;
   81|  80.0k|        fl->size--;
   82|  80.0k|    }
   83|  82.4k|    return obj;
   84|  82.4k|}
unicode_writer.c:_Py_freelists_GET:
   19|   164k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|   164k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|   164k|    return &interp->object_state.freelists;
   30|   164k|#endif
   31|   164k|}
unicode_writer.c:_PyFreeList_Free:
   68|  82.4k|{
   69|  82.4k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 2.40k, False: 80.0k]
  ------------------
   70|  2.40k|        dofree(obj);
   71|  2.40k|    }
   72|  82.4k|}
unicode_writer.c:_PyFreeList_Push:
   54|  82.4k|{
   55|  82.4k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 80.0k, False: 2.40k]
  |  Branch (55:31): [True: 80.0k, False: 0]
  ------------------
   56|  80.0k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  80.0k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  80.0k|        fl->freelist = obj;
   58|  80.0k|        fl->size++;
   59|  80.0k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  80.0k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  80.0k|        return 1;
   61|  80.0k|    }
   62|  2.40k|    return 0;
   63|  82.4k|}
context.c:_PyFreeList_Pop:
   88|      1|{
   89|      1|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|      1|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 0, False: 1]
  ------------------
   91|      0|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|      0|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|      0|        _Py_NewReference(op);
   93|      0|    }
   94|      1|    return op;
   95|      1|}
context.c:_PyFreeList_PopNoStats:
   76|      1|{
   77|      1|    void *obj = fl->freelist;
   78|      1|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 0, False: 1]
  ------------------
   79|      0|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 0, False: 0]
  ------------------
   80|      0|        fl->freelist = *(void **)obj;
   81|      0|        fl->size--;
   82|      0|    }
   83|      1|    return obj;
   84|      1|}
context.c:_Py_freelists_GET:
   19|      1|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|      1|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|      1|    return &interp->object_state.freelists;
   30|      1|#endif
   31|      1|}
bytesobject.c:_PyFreeList_PopMem:
   99|   234k|{
  100|   234k|    void *op = _PyFreeList_PopNoStats(fl);
  101|   234k|    if (op != NULL) {
  ------------------
  |  Branch (101:9): [True: 129k, False: 105k]
  ------------------
  102|   129k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|   129k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  103|   129k|    }
  104|   234k|    return op;
  105|   234k|}
bytesobject.c:_PyFreeList_PopNoStats:
   76|   234k|{
   77|   234k|    void *obj = fl->freelist;
   78|   234k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 129k, False: 105k]
  ------------------
   79|   129k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 129k, False: 0]
  ------------------
   80|   129k|        fl->freelist = *(void **)obj;
   81|   129k|        fl->size--;
   82|   129k|    }
   83|   234k|    return obj;
   84|   234k|}
bytesobject.c:_PyFreeList_Free:
   68|   234k|{
   69|   234k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 105k, False: 129k]
  ------------------
   70|   105k|        dofree(obj);
   71|   105k|    }
   72|   234k|}
bytesobject.c:_PyFreeList_Push:
   54|   234k|{
   55|   234k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 129k, False: 105k]
  |  Branch (55:31): [True: 129k, False: 0]
  ------------------
   56|   129k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|   129k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|   129k|        fl->freelist = obj;
   58|   129k|        fl->size++;
   59|   129k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|   129k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|   129k|        return 1;
   61|   129k|    }
   62|   105k|    return 0;
   63|   234k|}
bytesobject.c:_Py_freelists_GET:
   19|   469k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|   469k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|   469k|    return &interp->object_state.freelists;
   30|   469k|#endif
   31|   469k|}
classobject.c:_PyFreeList_Pop:
   88|  2.32k|{
   89|  2.32k|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|  2.32k|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 2.17k, False: 157]
  ------------------
   91|  2.17k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|  2.17k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|  2.17k|        _Py_NewReference(op);
   93|  2.17k|    }
   94|  2.32k|    return op;
   95|  2.32k|}
classobject.c:_PyFreeList_PopNoStats:
   76|  2.32k|{
   77|  2.32k|    void *obj = fl->freelist;
   78|  2.32k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 2.17k, False: 157]
  ------------------
   79|  2.17k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 2.17k, False: 0]
  ------------------
   80|  2.17k|        fl->freelist = *(void **)obj;
   81|  2.17k|        fl->size--;
   82|  2.17k|    }
   83|  2.32k|    return obj;
   84|  2.32k|}
classobject.c:_Py_freelists_GET:
   19|  4.52k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  4.52k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  4.52k|    return &interp->object_state.freelists;
   30|  4.52k|#endif
   31|  4.52k|}
classobject.c:_PyFreeList_Free:
   68|  2.19k|{
   69|  2.19k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 0, False: 2.19k]
  ------------------
   70|      0|        dofree(obj);
   71|      0|    }
   72|  2.19k|}
classobject.c:_PyFreeList_Push:
   54|  2.19k|{
   55|  2.19k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 2.19k, False: 0]
  |  Branch (55:31): [True: 2.19k, False: 0]
  ------------------
   56|  2.19k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  2.19k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  2.19k|        fl->freelist = obj;
   58|  2.19k|        fl->size++;
   59|  2.19k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  2.19k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  2.19k|        return 1;
   61|  2.19k|    }
   62|      0|    return 0;
   63|  2.19k|}
complexobject.c:_PyFreeList_Pop:
   88|   260k|{
   89|   260k|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|   260k|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 154k, False: 105k]
  ------------------
   91|   154k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|   154k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|   154k|        _Py_NewReference(op);
   93|   154k|    }
   94|   260k|    return op;
   95|   260k|}
complexobject.c:_PyFreeList_PopNoStats:
   76|   260k|{
   77|   260k|    void *obj = fl->freelist;
   78|   260k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 154k, False: 105k]
  ------------------
   79|   154k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 154k, False: 0]
  ------------------
   80|   154k|        fl->freelist = *(void **)obj;
   81|   154k|        fl->size--;
   82|   154k|    }
   83|   260k|    return obj;
   84|   260k|}
complexobject.c:_Py_freelists_GET:
   19|   520k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|   520k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|   520k|    return &interp->object_state.freelists;
   30|   520k|#endif
   31|   520k|}
complexobject.c:_PyFreeList_Free:
   68|   260k|{
   69|   260k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 104k, False: 155k]
  ------------------
   70|   104k|        dofree(obj);
   71|   104k|    }
   72|   260k|}
complexobject.c:_PyFreeList_Push:
   54|   260k|{
   55|   260k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 155k, False: 104k]
  |  Branch (55:31): [True: 155k, False: 0]
  ------------------
   56|   155k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|   155k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|   155k|        fl->freelist = obj;
   58|   155k|        fl->size++;
   59|   155k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|   155k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|   155k|        return 1;
   61|   155k|    }
   62|   104k|    return 0;
   63|   260k|}
floatobject.c:_PyFreeList_Pop:
   88|   275k|{
   89|   275k|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|   275k|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 206k, False: 68.9k]
  ------------------
   91|   206k|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|   206k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|   206k|        _Py_NewReference(op);
   93|   206k|    }
   94|   275k|    return op;
   95|   275k|}
floatobject.c:_PyFreeList_PopNoStats:
   76|   275k|{
   77|   275k|    void *obj = fl->freelist;
   78|   275k|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 206k, False: 68.9k]
  ------------------
   79|   206k|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 206k, False: 0]
  ------------------
   80|   206k|        fl->freelist = *(void **)obj;
   81|   206k|        fl->size--;
   82|   206k|    }
   83|   275k|    return obj;
   84|   275k|}
floatobject.c:_Py_freelists_GET:
   19|   550k|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|   550k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|   550k|    return &interp->object_state.freelists;
   30|   550k|#endif
   31|   550k|}
floatobject.c:_PyFreeList_Free:
   68|   275k|{
   69|   275k|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 68.2k, False: 207k]
  ------------------
   70|  68.2k|        dofree(obj);
   71|  68.2k|    }
   72|   275k|}
floatobject.c:_PyFreeList_Push:
   54|   275k|{
   55|   275k|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 207k, False: 68.2k]
  |  Branch (55:31): [True: 207k, False: 0]
  ------------------
   56|   207k|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|   207k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|   207k|        fl->freelist = obj;
   58|   207k|        fl->size++;
   59|   207k|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|   207k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|   207k|        return 1;
   61|   207k|    }
   62|  68.2k|    return 0;
   63|   275k|}
methodobject.c:_PyFreeList_Pop:
   88|  1.94M|{
   89|  1.94M|    PyObject *op = _PyFreeList_PopNoStats(fl);
   90|  1.94M|    if (op != NULL) {
  ------------------
  |  Branch (90:9): [True: 1.94M, False: 1.56k]
  ------------------
   91|  1.94M|        OBJECT_STAT_INC(from_freelist);
  ------------------
  |  |   77|  1.94M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   92|  1.94M|        _Py_NewReference(op);
   93|  1.94M|    }
   94|  1.94M|    return op;
   95|  1.94M|}
methodobject.c:_PyFreeList_PopNoStats:
   76|  1.94M|{
   77|  1.94M|    void *obj = fl->freelist;
   78|  1.94M|    if (obj != NULL) {
  ------------------
  |  Branch (78:9): [True: 1.94M, False: 1.56k]
  ------------------
   79|  1.94M|        assert(fl->size > 0);
  ------------------
  |  Branch (79:9): [True: 1.94M, False: 0]
  ------------------
   80|  1.94M|        fl->freelist = *(void **)obj;
   81|  1.94M|        fl->size--;
   82|  1.94M|    }
   83|  1.94M|    return obj;
   84|  1.94M|}
methodobject.c:_Py_freelists_GET:
   19|  3.88M|{
   20|       |#ifdef Py_DEBUG
   21|       |    _Py_AssertHoldsTstate();
   22|       |#endif
   23|       |
   24|       |#ifdef Py_GIL_DISABLED
   25|       |    PyThreadState *tstate = _PyThreadState_GET();
   26|       |    return &((_PyThreadStateImpl*)tstate)->freelists;
   27|       |#else
   28|  3.88M|    PyInterpreterState *interp = _PyInterpreterState_GET();
   29|  3.88M|    return &interp->object_state.freelists;
   30|  3.88M|#endif
   31|  3.88M|}
methodobject.c:_PyFreeList_Free:
   68|  1.94M|{
   69|  1.94M|    if (!_PyFreeList_Push(fl, obj, maxsize)) {
  ------------------
  |  Branch (69:9): [True: 0, False: 1.94M]
  ------------------
   70|      0|        dofree(obj);
   71|      0|    }
   72|  1.94M|}
methodobject.c:_PyFreeList_Push:
   54|  1.94M|{
   55|  1.94M|    if (fl->size < maxsize && fl->size >= 0) {
  ------------------
  |  Branch (55:9): [True: 1.94M, False: 0]
  |  Branch (55:31): [True: 1.94M, False: 0]
  ------------------
   56|  1.94M|        FT_ATOMIC_STORE_PTR_RELAXED(*(void **)obj, fl->freelist);
  ------------------
  |  |  163|  1.94M|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
   57|  1.94M|        fl->freelist = obj;
   58|  1.94M|        fl->size++;
   59|  1.94M|        OBJECT_STAT_INC(to_freelist);
  ------------------
  |  |   77|  1.94M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
   60|  1.94M|        return 1;
   61|  1.94M|    }
   62|      0|    return 0;
   63|  1.94M|}

typeobject.c:_PyFunction_IsVersionValid:
   26|      9|{
   27|      9|    return version >= FUNC_VERSION_FIRST_VALID;
  ------------------
  |  |   20|      9|#define FUNC_VERSION_FIRST_VALID 2
  ------------------
   28|      9|}
specialize.c:_PyFunction_IsVersionValid:
   26|    428|{
   27|    428|    return version >= FUNC_VERSION_FIRST_VALID;
  ------------------
  |  |   20|    428|#define FUNC_VERSION_FIRST_VALID 2
  ------------------
   28|    428|}

exceptions.c:_PyObject_GC_UNTRACK:
  253|  62.0k|{
  254|  62.0k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  62.0k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 62.0k, False: 0]
  |  |  ------------------
  |  |  417|  62.0k|      ? (void)(0) \
  |  |  418|  62.0k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  62.0k|                          "object not tracked by the garbage collector",
  256|  62.0k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  62.0k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  62.0k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  62.0k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  62.0k|    _PyGCHead_SET_NEXT(prev, next);
  265|  62.0k|    _PyGCHead_SET_PREV(next, prev);
  266|  62.0k|    gc->_gc_next = 0;
  267|  62.0k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  62.0k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  62.0k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  62.0k|    gcstate->heap_size--;
  270|  62.0k|#endif
  271|  62.0k|}
exceptions.c:_PyObject_GC_IS_TRACKED:
   73|  62.1k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  62.1k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  62.1k|    return (gc->_gc_next != 0);
   79|  62.1k|#endif
   80|  62.1k|}
exceptions.c:_Py_AS_GC:
   17|   124k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|   124k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|   124k|    return (PyGC_Head*)gc;
   20|   124k|}
exceptions.c:_PyGCHead_PREV:
  155|  62.0k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  62.0k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  62.0k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  62.0k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  62.0k|    return (PyGC_Head*)prev;
  158|  62.0k|}
exceptions.c:_PyGCHead_NEXT:
  146|  62.0k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  62.0k|    uintptr_t next = gc->_gc_next;
  148|  62.0k|    return (PyGC_Head*)next;
  149|  62.0k|}
exceptions.c:_PyGCHead_SET_NEXT:
  150|  62.1k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  62.1k|    gc->_gc_next = (uintptr_t)next;
  152|  62.1k|}
exceptions.c:_PyGCHead_SET_PREV:
  160|  62.1k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  62.1k|    uintptr_t uprev = (uintptr_t)prev;
  162|  62.1k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 62.1k, False: 0]
  ------------------
  163|  62.1k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  62.1k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  62.1k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  62.1k|}
exceptions.c:_PyObject_GC_TRACK:
  213|     54|{
  214|     54|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     54|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 54, False: 0]
  |  |  ------------------
  |  |  417|     54|      ? (void)(0) \
  |  |  418|     54|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|     54|                          "object already tracked by the garbage collector",
  216|     54|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|     54|    PyGC_Head *gc = _Py_AS_GC(op);
  221|     54|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|     54|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 54, False: 0]
  |  |  ------------------
  |  |  417|     54|      ? (void)(0) \
  |  |  418|     54|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|     54|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|     54|                          "object is in generation which is garbage collected",
  224|     54|                          filename, lineno, __func__);
  225|       |
  226|     54|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|     54|    PyGC_Head *generation0 = gcstate->generation0;
  228|     54|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|     54|    _PyGCHead_SET_NEXT(last, gc);
  230|     54|    _PyGCHead_SET_PREV(gc, last);
  231|     54|    _PyGCHead_SET_NEXT(gc, generation0);
  232|     54|    generation0->_gc_prev = (uintptr_t)gc;
  233|     54|    gcstate->heap_size++;
  234|     54|#endif
  235|     54|}
genericaliasobject.c:_PyObject_GC_UNTRACK:
  253|      5|{
  254|      5|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      5|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 5, False: 0]
  |  |  ------------------
  |  |  417|      5|      ? (void)(0) \
  |  |  418|      5|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|      5|                          "object not tracked by the garbage collector",
  256|      5|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|      5|    PyGC_Head *gc = _Py_AS_GC(op);
  262|      5|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|      5|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|      5|    _PyGCHead_SET_NEXT(prev, next);
  265|      5|    _PyGCHead_SET_PREV(next, prev);
  266|      5|    gc->_gc_next = 0;
  267|      5|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|      5|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|      5|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|      5|    gcstate->heap_size--;
  270|      5|#endif
  271|      5|}
genericaliasobject.c:_PyObject_GC_IS_TRACKED:
   73|      5|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|      5|    PyGC_Head *gc = _Py_AS_GC(op);
   78|      5|    return (gc->_gc_next != 0);
   79|      5|#endif
   80|      5|}
genericaliasobject.c:_Py_AS_GC:
   17|     10|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|     10|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|     10|    return (PyGC_Head*)gc;
   20|     10|}
genericaliasobject.c:_PyGCHead_PREV:
  155|      5|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|      5|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|      5|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      5|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|      5|    return (PyGC_Head*)prev;
  158|      5|}
genericaliasobject.c:_PyGCHead_NEXT:
  146|      5|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|      5|    uintptr_t next = gc->_gc_next;
  148|      5|    return (PyGC_Head*)next;
  149|      5|}
genericaliasobject.c:_PyGCHead_SET_NEXT:
  150|      5|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|      5|    gc->_gc_next = (uintptr_t)next;
  152|      5|}
genericaliasobject.c:_PyGCHead_SET_PREV:
  160|      5|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|      5|    uintptr_t uprev = (uintptr_t)prev;
  162|      5|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 5, False: 0]
  ------------------
  163|      5|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|      5|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      5|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|      5|}
listobject.c:_PyObject_GC_TRACK:
  213|   905k|{
  214|   905k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|   905k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 905k, False: 0]
  |  |  ------------------
  |  |  417|   905k|      ? (void)(0) \
  |  |  418|   905k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|   905k|                          "object already tracked by the garbage collector",
  216|   905k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|   905k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|   905k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|   905k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 905k, False: 0]
  |  |  ------------------
  |  |  417|   905k|      ? (void)(0) \
  |  |  418|   905k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|   905k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|   905k|                          "object is in generation which is garbage collected",
  224|   905k|                          filename, lineno, __func__);
  225|       |
  226|   905k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|   905k|    PyGC_Head *generation0 = gcstate->generation0;
  228|   905k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|   905k|    _PyGCHead_SET_NEXT(last, gc);
  230|   905k|    _PyGCHead_SET_PREV(gc, last);
  231|   905k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|   905k|    generation0->_gc_prev = (uintptr_t)gc;
  233|   905k|    gcstate->heap_size++;
  234|   905k|#endif
  235|   905k|}
listobject.c:_PyObject_GC_IS_TRACKED:
   73|   942k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   942k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   942k|    return (gc->_gc_next != 0);
   79|   942k|#endif
   80|   942k|}
listobject.c:_Py_AS_GC:
   17|  1.88M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  1.88M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  1.88M|    return (PyGC_Head*)gc;
   20|  1.88M|}
listobject.c:_PyGCHead_SET_NEXT:
  150|  1.84M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  1.84M|    gc->_gc_next = (uintptr_t)next;
  152|  1.84M|}
listobject.c:_PyGCHead_SET_PREV:
  160|   942k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|   942k|    uintptr_t uprev = (uintptr_t)prev;
  162|   942k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 942k, False: 0]
  ------------------
  163|   942k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|   942k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   942k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|   942k|}
listobject.c:_PyObject_GC_UNTRACK:
  253|  36.9k|{
  254|  36.9k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  36.9k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 36.9k, False: 0]
  |  |  ------------------
  |  |  417|  36.9k|      ? (void)(0) \
  |  |  418|  36.9k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  36.9k|                          "object not tracked by the garbage collector",
  256|  36.9k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  36.9k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  36.9k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  36.9k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  36.9k|    _PyGCHead_SET_NEXT(prev, next);
  265|  36.9k|    _PyGCHead_SET_PREV(next, prev);
  266|  36.9k|    gc->_gc_next = 0;
  267|  36.9k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  36.9k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  36.9k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  36.9k|    gcstate->heap_size--;
  270|  36.9k|#endif
  271|  36.9k|}
listobject.c:_PyGCHead_PREV:
  155|  36.9k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  36.9k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  36.9k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  36.9k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  36.9k|    return (PyGC_Head*)prev;
  158|  36.9k|}
listobject.c:_PyGCHead_NEXT:
  146|  36.9k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  36.9k|    uintptr_t next = gc->_gc_next;
  148|  36.9k|    return (PyGC_Head*)next;
  149|  36.9k|}
dictobject.c:_PyObject_GC_IS_TRACKED:
   73|   886k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   886k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   886k|    return (gc->_gc_next != 0);
   79|   886k|#endif
   80|   886k|}
dictobject.c:_Py_AS_GC:
   17|  1.77M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  1.77M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  1.77M|    return (PyGC_Head*)gc;
   20|  1.77M|}
dictobject.c:_PyObject_GC_TRACK:
  213|   883k|{
  214|   883k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|   883k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 883k, False: 0]
  |  |  ------------------
  |  |  417|   883k|      ? (void)(0) \
  |  |  418|   883k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|   883k|                          "object already tracked by the garbage collector",
  216|   883k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|   883k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|   883k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|   883k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 883k, False: 0]
  |  |  ------------------
  |  |  417|   883k|      ? (void)(0) \
  |  |  418|   883k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|   883k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|   883k|                          "object is in generation which is garbage collected",
  224|   883k|                          filename, lineno, __func__);
  225|       |
  226|   883k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|   883k|    PyGC_Head *generation0 = gcstate->generation0;
  228|   883k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|   883k|    _PyGCHead_SET_NEXT(last, gc);
  230|   883k|    _PyGCHead_SET_PREV(gc, last);
  231|   883k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|   883k|    generation0->_gc_prev = (uintptr_t)gc;
  233|   883k|    gcstate->heap_size++;
  234|   883k|#endif
  235|   883k|}
dictobject.c:_PyGCHead_SET_NEXT:
  150|  1.76M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  1.76M|    gc->_gc_next = (uintptr_t)next;
  152|  1.76M|}
dictobject.c:_PyGCHead_SET_PREV:
  160|   883k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|   883k|    uintptr_t uprev = (uintptr_t)prev;
  162|   883k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 883k, False: 0]
  ------------------
  163|   883k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|   883k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   883k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|   883k|}
dictobject.c:_PyObject_GC_UNTRACK:
  253|    575|{
  254|    575|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|    575|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 575, False: 0]
  |  |  ------------------
  |  |  417|    575|      ? (void)(0) \
  |  |  418|    575|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|    575|                          "object not tracked by the garbage collector",
  256|    575|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|    575|    PyGC_Head *gc = _Py_AS_GC(op);
  262|    575|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|    575|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|    575|    _PyGCHead_SET_NEXT(prev, next);
  265|    575|    _PyGCHead_SET_PREV(next, prev);
  266|    575|    gc->_gc_next = 0;
  267|    575|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|    575|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|    575|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|    575|    gcstate->heap_size--;
  270|    575|#endif
  271|    575|}
dictobject.c:_PyGCHead_PREV:
  155|    575|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|    575|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|    575|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    575|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|    575|    return (PyGC_Head*)prev;
  158|    575|}
dictobject.c:_PyGCHead_NEXT:
  146|    575|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|    575|    uintptr_t next = gc->_gc_next;
  148|    575|    return (PyGC_Head*)next;
  149|    575|}
object.c:_PyGC_FINALIZED:
  166|  1.43k|static inline int _PyGC_FINALIZED(PyObject *op) {
  167|       |#ifdef Py_GIL_DISABLED
  168|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_FINALIZED);
  169|       |#else
  170|  1.43k|    PyGC_Head *gc = _Py_AS_GC(op);
  171|  1.43k|    return ((gc->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0);
  ------------------
  |  |  117|  1.43k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  172|  1.43k|#endif
  173|  1.43k|}
object.c:_PyGC_SET_FINALIZED:
  174|  1.43k|static inline void _PyGC_SET_FINALIZED(PyObject *op) {
  175|       |#ifdef Py_GIL_DISABLED
  176|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_FINALIZED);
  177|       |#else
  178|  1.43k|    PyGC_Head *gc = _Py_AS_GC(op);
  179|  1.43k|    gc->_gc_prev |= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  1.43k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  180|  1.43k|#endif
  181|  1.43k|}
object.c:_PyObject_GC_IS_TRACKED:
   73|  3.10k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  3.10k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  3.10k|    return (gc->_gc_next != 0);
   79|  3.10k|#endif
   80|  3.10k|}
object.c:_PyObject_GC_UNTRACK:
  253|    834|{
  254|    834|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|    834|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 834, False: 0]
  |  |  ------------------
  |  |  417|    834|      ? (void)(0) \
  |  |  418|    834|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|    834|                          "object not tracked by the garbage collector",
  256|    834|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|    834|    PyGC_Head *gc = _Py_AS_GC(op);
  262|    834|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|    834|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|    834|    _PyGCHead_SET_NEXT(prev, next);
  265|    834|    _PyGCHead_SET_PREV(next, prev);
  266|    834|    gc->_gc_next = 0;
  267|    834|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|    834|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|    834|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|    834|    gcstate->heap_size--;
  270|    834|#endif
  271|    834|}
object.c:_PyGCHead_PREV:
  155|    834|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|    834|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|    834|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    834|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|    834|    return (PyGC_Head*)prev;
  158|    834|}
object.c:_PyGCHead_NEXT:
  146|    834|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|    834|    uintptr_t next = gc->_gc_next;
  148|    834|    return (PyGC_Head*)next;
  149|    834|}
object.c:_PyGCHead_SET_NEXT:
  150|    834|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|    834|    gc->_gc_next = (uintptr_t)next;
  152|    834|}
object.c:_PyGCHead_SET_PREV:
  160|    834|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|    834|    uintptr_t uprev = (uintptr_t)prev;
  162|    834|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 834, False: 0]
  ------------------
  163|    834|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|    834|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    834|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|    834|}
object.c:_Py_AS_GC:
   17|  6.80k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  6.80k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  6.80k|    return (PyGC_Head*)gc;
   20|  6.80k|}
sentinelobject.c:_PyObject_GC_TRACK:
  213|      3|{
  214|      3|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      3|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 3, False: 0]
  |  |  ------------------
  |  |  417|      3|      ? (void)(0) \
  |  |  418|      3|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|      3|                          "object already tracked by the garbage collector",
  216|      3|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|      3|    PyGC_Head *gc = _Py_AS_GC(op);
  221|      3|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|      3|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 3, False: 0]
  |  |  ------------------
  |  |  417|      3|      ? (void)(0) \
  |  |  418|      3|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|      3|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|      3|                          "object is in generation which is garbage collected",
  224|      3|                          filename, lineno, __func__);
  225|       |
  226|      3|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|      3|    PyGC_Head *generation0 = gcstate->generation0;
  228|      3|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|      3|    _PyGCHead_SET_NEXT(last, gc);
  230|      3|    _PyGCHead_SET_PREV(gc, last);
  231|      3|    _PyGCHead_SET_NEXT(gc, generation0);
  232|      3|    generation0->_gc_prev = (uintptr_t)gc;
  233|      3|    gcstate->heap_size++;
  234|      3|#endif
  235|      3|}
sentinelobject.c:_PyObject_GC_IS_TRACKED:
   73|      3|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|      3|    PyGC_Head *gc = _Py_AS_GC(op);
   78|      3|    return (gc->_gc_next != 0);
   79|      3|#endif
   80|      3|}
sentinelobject.c:_Py_AS_GC:
   17|      6|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|      6|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|      6|    return (PyGC_Head*)gc;
   20|      6|}
sentinelobject.c:_PyGCHead_SET_NEXT:
  150|      6|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|      6|    gc->_gc_next = (uintptr_t)next;
  152|      6|}
sentinelobject.c:_PyGCHead_SET_PREV:
  160|      3|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|      3|    uintptr_t uprev = (uintptr_t)prev;
  162|      3|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 3, False: 0]
  ------------------
  163|      3|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|      3|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      3|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|      3|}
setobject.c:_PyObject_GC_UNTRACK:
  253|  61.1k|{
  254|  61.1k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  61.1k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 61.1k, False: 0]
  |  |  ------------------
  |  |  417|  61.1k|      ? (void)(0) \
  |  |  418|  61.1k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  61.1k|                          "object not tracked by the garbage collector",
  256|  61.1k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  61.1k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  61.1k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  61.1k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  61.1k|    _PyGCHead_SET_NEXT(prev, next);
  265|  61.1k|    _PyGCHead_SET_PREV(next, prev);
  266|  61.1k|    gc->_gc_next = 0;
  267|  61.1k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  61.1k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  61.1k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  61.1k|    gcstate->heap_size--;
  270|  61.1k|#endif
  271|  61.1k|}
setobject.c:_PyObject_GC_IS_TRACKED:
   73|   726k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   726k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   726k|    return (gc->_gc_next != 0);
   79|   726k|#endif
   80|   726k|}
setobject.c:_Py_AS_GC:
   17|  1.44M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  1.44M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  1.44M|    return (PyGC_Head*)gc;
   20|  1.44M|}
setobject.c:_PyGCHead_PREV:
  155|  61.1k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  61.1k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  61.1k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  61.1k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  61.1k|    return (PyGC_Head*)prev;
  158|  61.1k|}
setobject.c:_PyGCHead_NEXT:
  146|  61.1k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  61.1k|    uintptr_t next = gc->_gc_next;
  148|  61.1k|    return (PyGC_Head*)next;
  149|  61.1k|}
setobject.c:_PyGCHead_SET_NEXT:
  150|  1.38M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  1.38M|    gc->_gc_next = (uintptr_t)next;
  152|  1.38M|}
setobject.c:_PyGCHead_SET_PREV:
  160|   721k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|   721k|    uintptr_t uprev = (uintptr_t)prev;
  162|   721k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 721k, False: 0]
  ------------------
  163|   721k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|   721k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   721k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|   721k|}
setobject.c:_PyObject_GC_MAY_BE_TRACKED:
   85|  35.1k|static inline int _PyObject_GC_MAY_BE_TRACKED(PyObject *obj) {
   86|  35.1k|    if (!PyObject_IS_GC(obj)) {
  ------------------
  |  Branch (86:9): [True: 29.9k, False: 5.24k]
  ------------------
   87|  29.9k|        return 0;
   88|  29.9k|    }
   89|  5.24k|    if (PyTuple_CheckExact(obj)) {
  ------------------
  |  |   28|  5.24k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  5.24k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 5.19k, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|  5.19k|        return _PyObject_GC_IS_TRACKED(obj);
  ------------------
  |  |   81|  5.19k|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  5.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   91|  5.19k|    }
   92|     52|    return 1;
   93|  5.24k|}
setobject.c:_PyObject_GC_TRACK:
  213|   659k|{
  214|   659k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|   659k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 659k, False: 0]
  |  |  ------------------
  |  |  417|   659k|      ? (void)(0) \
  |  |  418|   659k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|   659k|                          "object already tracked by the garbage collector",
  216|   659k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|   659k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|   659k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|   659k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 659k, False: 0]
  |  |  ------------------
  |  |  417|   659k|      ? (void)(0) \
  |  |  418|   659k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|   659k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|   659k|                          "object is in generation which is garbage collected",
  224|   659k|                          filename, lineno, __func__);
  225|       |
  226|   659k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|   659k|    PyGC_Head *generation0 = gcstate->generation0;
  228|   659k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|   659k|    _PyGCHead_SET_NEXT(last, gc);
  230|   659k|    _PyGCHead_SET_PREV(gc, last);
  231|   659k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|   659k|    generation0->_gc_prev = (uintptr_t)gc;
  233|   659k|    gcstate->heap_size++;
  234|   659k|#endif
  235|   659k|}
sliceobject.c:_PyObject_GC_TRACK:
  213|  39.5k|{
  214|  39.5k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  39.5k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 39.5k, False: 0]
  |  |  ------------------
  |  |  417|  39.5k|      ? (void)(0) \
  |  |  418|  39.5k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  39.5k|                          "object already tracked by the garbage collector",
  216|  39.5k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  39.5k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  39.5k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  39.5k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 39.5k, False: 0]
  |  |  ------------------
  |  |  417|  39.5k|      ? (void)(0) \
  |  |  418|  39.5k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  39.5k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  39.5k|                          "object is in generation which is garbage collected",
  224|  39.5k|                          filename, lineno, __func__);
  225|       |
  226|  39.5k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  39.5k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  39.5k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  39.5k|    _PyGCHead_SET_NEXT(last, gc);
  230|  39.5k|    _PyGCHead_SET_PREV(gc, last);
  231|  39.5k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  39.5k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  39.5k|    gcstate->heap_size++;
  234|  39.5k|#endif
  235|  39.5k|}
sliceobject.c:_PyObject_GC_IS_TRACKED:
   73|  39.5k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  39.5k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  39.5k|    return (gc->_gc_next != 0);
   79|  39.5k|#endif
   80|  39.5k|}
sliceobject.c:_Py_AS_GC:
   17|  79.1k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  79.1k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  79.1k|    return (PyGC_Head*)gc;
   20|  79.1k|}
sliceobject.c:_PyGCHead_SET_NEXT:
  150|  79.1k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  79.1k|    gc->_gc_next = (uintptr_t)next;
  152|  79.1k|}
sliceobject.c:_PyGCHead_SET_PREV:
  160|  39.5k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  39.5k|    uintptr_t uprev = (uintptr_t)prev;
  162|  39.5k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 39.5k, False: 0]
  ------------------
  163|  39.5k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  39.5k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  39.5k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  39.5k|}
tupleobject.c:_PyObject_GC_TRACK:
  213|  54.3M|{
  214|  54.3M|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  54.3M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 54.3M, False: 0]
  |  |  ------------------
  |  |  417|  54.3M|      ? (void)(0) \
  |  |  418|  54.3M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  54.3M|                          "object already tracked by the garbage collector",
  216|  54.3M|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  54.3M|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  54.3M|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  54.3M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 54.3M, False: 0]
  |  |  ------------------
  |  |  417|  54.3M|      ? (void)(0) \
  |  |  418|  54.3M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  54.3M|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  54.3M|                          "object is in generation which is garbage collected",
  224|  54.3M|                          filename, lineno, __func__);
  225|       |
  226|  54.3M|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  54.3M|    PyGC_Head *generation0 = gcstate->generation0;
  228|  54.3M|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  54.3M|    _PyGCHead_SET_NEXT(last, gc);
  230|  54.3M|    _PyGCHead_SET_PREV(gc, last);
  231|  54.3M|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  54.3M|    generation0->_gc_prev = (uintptr_t)gc;
  233|  54.3M|    gcstate->heap_size++;
  234|  54.3M|#endif
  235|  54.3M|}
tupleobject.c:_Py_AS_GC:
   17|   286M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|   286M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|   286M|    return (PyGC_Head*)gc;
   20|   286M|}
tupleobject.c:_PyGCHead_SET_NEXT:
  150|   155M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|   155M|    gc->_gc_next = (uintptr_t)next;
  152|   155M|}
tupleobject.c:_PyGCHead_SET_PREV:
  160|   100M|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|   100M|    uintptr_t uprev = (uintptr_t)prev;
  162|   100M|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 100M, False: 0]
  ------------------
  163|   100M|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|   100M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   100M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|   100M|}
tupleobject.c:_PyObject_GC_IS_TRACKED:
   73|   185M|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   185M|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   185M|    return (gc->_gc_next != 0);
   79|   185M|#endif
   80|   185M|}
tupleobject.c:_PyObject_GC_MAY_BE_TRACKED:
   85|   277M|static inline int _PyObject_GC_MAY_BE_TRACKED(PyObject *obj) {
   86|   277M|    if (!PyObject_IS_GC(obj)) {
  ------------------
  |  Branch (86:9): [True: 239M, False: 38.3M]
  ------------------
   87|   239M|        return 0;
   88|   239M|    }
   89|  38.3M|    if (PyTuple_CheckExact(obj)) {
  ------------------
  |  |   28|  38.3M|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  38.3M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  38.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  38.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 38.3M, False: 16.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|  38.3M|        return _PyObject_GC_IS_TRACKED(obj);
  ------------------
  |  |   81|  38.3M|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  38.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   91|  38.3M|    }
   92|  16.1k|    return 1;
   93|  38.3M|}
tupleobject.c:_PyObject_GC_UNTRACK:
  253|  46.5M|{
  254|  46.5M|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  46.5M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 46.5M, False: 0]
  |  |  ------------------
  |  |  417|  46.5M|      ? (void)(0) \
  |  |  418|  46.5M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  46.5M|                          "object not tracked by the garbage collector",
  256|  46.5M|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  46.5M|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  46.5M|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  46.5M|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  46.5M|    _PyGCHead_SET_NEXT(prev, next);
  265|  46.5M|    _PyGCHead_SET_PREV(next, prev);
  266|  46.5M|    gc->_gc_next = 0;
  267|  46.5M|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  46.5M|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  46.5M|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  46.5M|    gcstate->heap_size--;
  270|  46.5M|#endif
  271|  46.5M|}
tupleobject.c:_PyGCHead_PREV:
  155|  46.5M|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  46.5M|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  46.5M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  46.5M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  46.5M|    return (PyGC_Head*)prev;
  158|  46.5M|}
tupleobject.c:_PyGCHead_NEXT:
  146|  46.5M|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  46.5M|    uintptr_t next = gc->_gc_next;
  148|  46.5M|    return (PyGC_Head*)next;
  149|  46.5M|}
typeobject.c:_PyObject_GC_TRACK:
  213|  1.09M|{
  214|  1.09M|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  1.09M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.09M, False: 0]
  |  |  ------------------
  |  |  417|  1.09M|      ? (void)(0) \
  |  |  418|  1.09M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  1.09M|                          "object already tracked by the garbage collector",
  216|  1.09M|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  1.09M|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  1.09M|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  1.09M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.09M, False: 0]
  |  |  ------------------
  |  |  417|  1.09M|      ? (void)(0) \
  |  |  418|  1.09M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  1.09M|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  1.09M|                          "object is in generation which is garbage collected",
  224|  1.09M|                          filename, lineno, __func__);
  225|       |
  226|  1.09M|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  1.09M|    PyGC_Head *generation0 = gcstate->generation0;
  228|  1.09M|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  1.09M|    _PyGCHead_SET_NEXT(last, gc);
  230|  1.09M|    _PyGCHead_SET_PREV(gc, last);
  231|  1.09M|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  1.09M|    generation0->_gc_prev = (uintptr_t)gc;
  233|  1.09M|    gcstate->heap_size++;
  234|  1.09M|#endif
  235|  1.09M|}
typeobject.c:_PyObject_GC_IS_TRACKED:
   73|  1.09M|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  1.09M|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  1.09M|    return (gc->_gc_next != 0);
   79|  1.09M|#endif
   80|  1.09M|}
typeobject.c:_Py_AS_GC:
   17|  2.18M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  2.18M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  2.18M|    return (PyGC_Head*)gc;
   20|  2.18M|}
typeobject.c:_PyGCHead_SET_NEXT:
  150|  2.18M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  2.18M|    gc->_gc_next = (uintptr_t)next;
  152|  2.18M|}
typeobject.c:_PyGCHead_SET_PREV:
  160|  1.09M|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  1.09M|    uintptr_t uprev = (uintptr_t)prev;
  162|  1.09M|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 1.09M, False: 0]
  ------------------
  163|  1.09M|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  1.09M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  1.09M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  1.09M|}
typeobject.c:_PyObject_GC_UNTRACK:
  253|    794|{
  254|    794|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|    794|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 794, False: 0]
  |  |  ------------------
  |  |  417|    794|      ? (void)(0) \
  |  |  418|    794|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|    794|                          "object not tracked by the garbage collector",
  256|    794|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|    794|    PyGC_Head *gc = _Py_AS_GC(op);
  262|    794|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|    794|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|    794|    _PyGCHead_SET_NEXT(prev, next);
  265|    794|    _PyGCHead_SET_PREV(next, prev);
  266|    794|    gc->_gc_next = 0;
  267|    794|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|    794|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|    794|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|    794|    gcstate->heap_size--;
  270|    794|#endif
  271|    794|}
typeobject.c:_PyGCHead_PREV:
  155|    794|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|    794|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|    794|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    794|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|    794|    return (PyGC_Head*)prev;
  158|    794|}
typeobject.c:_PyGCHead_NEXT:
  146|    794|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|    794|    uintptr_t next = gc->_gc_next;
  148|    794|    return (PyGC_Head*)next;
  149|    794|}
unicodeobject.c:_PyObject_GC_UNTRACK:
  253|  18.4k|{
  254|  18.4k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  18.4k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 18.4k, False: 0]
  |  |  ------------------
  |  |  417|  18.4k|      ? (void)(0) \
  |  |  418|  18.4k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  18.4k|                          "object not tracked by the garbage collector",
  256|  18.4k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  18.4k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  18.4k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  18.4k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  18.4k|    _PyGCHead_SET_NEXT(prev, next);
  265|  18.4k|    _PyGCHead_SET_PREV(next, prev);
  266|  18.4k|    gc->_gc_next = 0;
  267|  18.4k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  18.4k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  18.4k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  18.4k|    gcstate->heap_size--;
  270|  18.4k|#endif
  271|  18.4k|}
unicodeobject.c:_PyObject_GC_IS_TRACKED:
   73|  36.9k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  36.9k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  36.9k|    return (gc->_gc_next != 0);
   79|  36.9k|#endif
   80|  36.9k|}
unicodeobject.c:_Py_AS_GC:
   17|  73.8k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  73.8k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  73.8k|    return (PyGC_Head*)gc;
   20|  73.8k|}
unicodeobject.c:_PyGCHead_PREV:
  155|  18.4k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  18.4k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  18.4k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  18.4k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  18.4k|    return (PyGC_Head*)prev;
  158|  18.4k|}
unicodeobject.c:_PyGCHead_NEXT:
  146|  18.4k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  18.4k|    uintptr_t next = gc->_gc_next;
  148|  18.4k|    return (PyGC_Head*)next;
  149|  18.4k|}
unicodeobject.c:_PyGCHead_SET_NEXT:
  150|  55.4k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  55.4k|    gc->_gc_next = (uintptr_t)next;
  152|  55.4k|}
unicodeobject.c:_PyGCHead_SET_PREV:
  160|  36.9k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  36.9k|    uintptr_t uprev = (uintptr_t)prev;
  162|  36.9k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 36.9k, False: 0]
  ------------------
  163|  36.9k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  36.9k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  36.9k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  36.9k|}
unicodeobject.c:_PyObject_GC_TRACK:
  213|  18.4k|{
  214|  18.4k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  18.4k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 18.4k, False: 0]
  |  |  ------------------
  |  |  417|  18.4k|      ? (void)(0) \
  |  |  418|  18.4k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  18.4k|                          "object already tracked by the garbage collector",
  216|  18.4k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  18.4k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  18.4k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  18.4k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 18.4k, False: 0]
  |  |  ------------------
  |  |  417|  18.4k|      ? (void)(0) \
  |  |  418|  18.4k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  18.4k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  18.4k|                          "object is in generation which is garbage collected",
  224|  18.4k|                          filename, lineno, __func__);
  225|       |
  226|  18.4k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  18.4k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  18.4k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  18.4k|    _PyGCHead_SET_NEXT(last, gc);
  230|  18.4k|    _PyGCHead_SET_PREV(gc, last);
  231|  18.4k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  18.4k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  18.4k|    gcstate->heap_size++;
  234|  18.4k|#endif
  235|  18.4k|}
unionobject.c:_PyObject_GC_UNTRACK:
  253|      1|{
  254|      1|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      1|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  417|      1|      ? (void)(0) \
  |  |  418|      1|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|      1|                          "object not tracked by the garbage collector",
  256|      1|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|      1|    PyGC_Head *gc = _Py_AS_GC(op);
  262|      1|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|      1|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|      1|    _PyGCHead_SET_NEXT(prev, next);
  265|      1|    _PyGCHead_SET_PREV(next, prev);
  266|      1|    gc->_gc_next = 0;
  267|      1|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|      1|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|      1|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|      1|    gcstate->heap_size--;
  270|      1|#endif
  271|      1|}
unionobject.c:_PyObject_GC_IS_TRACKED:
   73|     46|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|     46|    PyGC_Head *gc = _Py_AS_GC(op);
   78|     46|    return (gc->_gc_next != 0);
   79|     46|#endif
   80|     46|}
unionobject.c:_Py_AS_GC:
   17|     92|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|     92|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|     92|    return (PyGC_Head*)gc;
   20|     92|}
unionobject.c:_PyGCHead_PREV:
  155|      1|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|      1|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|      1|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      1|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|      1|    return (PyGC_Head*)prev;
  158|      1|}
unionobject.c:_PyGCHead_NEXT:
  146|      1|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|      1|    uintptr_t next = gc->_gc_next;
  148|      1|    return (PyGC_Head*)next;
  149|      1|}
unionobject.c:_PyGCHead_SET_NEXT:
  150|     91|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|     91|    gc->_gc_next = (uintptr_t)next;
  152|     91|}
unionobject.c:_PyGCHead_SET_PREV:
  160|     46|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|     46|    uintptr_t uprev = (uintptr_t)prev;
  162|     46|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 46, False: 0]
  ------------------
  163|     46|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|     46|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     46|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|     46|}
unionobject.c:_PyObject_GC_TRACK:
  213|     45|{
  214|     45|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     45|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 45, False: 0]
  |  |  ------------------
  |  |  417|     45|      ? (void)(0) \
  |  |  418|     45|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|     45|                          "object already tracked by the garbage collector",
  216|     45|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|     45|    PyGC_Head *gc = _Py_AS_GC(op);
  221|     45|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|     45|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 45, False: 0]
  |  |  ------------------
  |  |  417|     45|      ? (void)(0) \
  |  |  418|     45|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|     45|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|     45|                          "object is in generation which is garbage collected",
  224|     45|                          filename, lineno, __func__);
  225|       |
  226|     45|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|     45|    PyGC_Head *generation0 = gcstate->generation0;
  228|     45|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|     45|    _PyGCHead_SET_NEXT(last, gc);
  230|     45|    _PyGCHead_SET_PREV(gc, last);
  231|     45|    _PyGCHead_SET_NEXT(gc, generation0);
  232|     45|    generation0->_gc_prev = (uintptr_t)gc;
  233|     45|    gcstate->heap_size++;
  234|     45|#endif
  235|     45|}
bltinmodule.c:_PyObject_GC_IS_TRACKED:
   73|     68|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|     68|    PyGC_Head *gc = _Py_AS_GC(op);
   78|     68|    return (gc->_gc_next != 0);
   79|     68|#endif
   80|     68|}
bltinmodule.c:_Py_AS_GC:
   17|     68|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|     68|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|     68|    return (PyGC_Head*)gc;
   20|     68|}
context.c:_PyObject_GC_TRACK:
  213|      1|{
  214|      1|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      1|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  417|      1|      ? (void)(0) \
  |  |  418|      1|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|      1|                          "object already tracked by the garbage collector",
  216|      1|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|      1|    PyGC_Head *gc = _Py_AS_GC(op);
  221|      1|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|      1|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  417|      1|      ? (void)(0) \
  |  |  418|      1|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|      1|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|      1|                          "object is in generation which is garbage collected",
  224|      1|                          filename, lineno, __func__);
  225|       |
  226|      1|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|      1|    PyGC_Head *generation0 = gcstate->generation0;
  228|      1|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|      1|    _PyGCHead_SET_NEXT(last, gc);
  230|      1|    _PyGCHead_SET_PREV(gc, last);
  231|      1|    _PyGCHead_SET_NEXT(gc, generation0);
  232|      1|    generation0->_gc_prev = (uintptr_t)gc;
  233|      1|    gcstate->heap_size++;
  234|      1|#endif
  235|      1|}
context.c:_PyObject_GC_IS_TRACKED:
   73|      1|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|      1|    PyGC_Head *gc = _Py_AS_GC(op);
   78|      1|    return (gc->_gc_next != 0);
   79|      1|#endif
   80|      1|}
context.c:_Py_AS_GC:
   17|      2|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|      2|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|      2|    return (PyGC_Head*)gc;
   20|      2|}
context.c:_PyGCHead_SET_NEXT:
  150|      2|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|      2|    gc->_gc_next = (uintptr_t)next;
  152|      2|}
context.c:_PyGCHead_SET_PREV:
  160|      1|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|      1|    uintptr_t uprev = (uintptr_t)prev;
  162|      1|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 1, False: 0]
  ------------------
  163|      1|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|      1|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      1|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|      1|}
context.c:_PyObject_GC_MAY_BE_TRACKED:
   85|      4|static inline int _PyObject_GC_MAY_BE_TRACKED(PyObject *obj) {
   86|      4|    if (!PyObject_IS_GC(obj)) {
  ------------------
  |  Branch (86:9): [True: 4, False: 0]
  ------------------
   87|      4|        return 0;
   88|      4|    }
   89|      0|    if (PyTuple_CheckExact(obj)) {
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      0|        return _PyObject_GC_IS_TRACKED(obj);
  ------------------
  |  |   81|      0|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   91|      0|    }
   92|      0|    return 1;
   93|      0|}
frame.c:_PyObject_GC_IS_TRACKED:
   73|  8.43k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  8.43k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  8.43k|    return (gc->_gc_next != 0);
   79|  8.43k|#endif
   80|  8.43k|}
frame.c:_Py_AS_GC:
   17|  12.6k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  12.6k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  12.6k|    return (PyGC_Head*)gc;
   20|  12.6k|}
frame.c:_PyObject_GC_TRACK:
  213|  4.21k|{
  214|  4.21k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  4.21k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |  417|  4.21k|      ? (void)(0) \
  |  |  418|  4.21k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  4.21k|                          "object already tracked by the garbage collector",
  216|  4.21k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  4.21k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  4.21k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  4.21k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |  417|  4.21k|      ? (void)(0) \
  |  |  418|  4.21k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  4.21k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  4.21k|                          "object is in generation which is garbage collected",
  224|  4.21k|                          filename, lineno, __func__);
  225|       |
  226|  4.21k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  4.21k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  4.21k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  4.21k|    _PyGCHead_SET_NEXT(last, gc);
  230|  4.21k|    _PyGCHead_SET_PREV(gc, last);
  231|  4.21k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  4.21k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  4.21k|    gcstate->heap_size++;
  234|  4.21k|#endif
  235|  4.21k|}
frame.c:_PyGCHead_SET_NEXT:
  150|  8.43k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  8.43k|    gc->_gc_next = (uintptr_t)next;
  152|  8.43k|}
frame.c:_PyGCHead_SET_PREV:
  160|  4.21k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  4.21k|    uintptr_t uprev = (uintptr_t)prev;
  162|  4.21k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 4.21k, False: 0]
  ------------------
  163|  4.21k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  4.21k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  4.21k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  4.21k|}
gc.c:_PyGCHead_NEXT:
  146|   154M|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|   154M|    uintptr_t next = gc->_gc_next;
  148|   154M|    return (PyGC_Head*)next;
  149|   154M|}
gc.c:_PyGCHead_PREV:
  155|   106M|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|   106M|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|   106M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   106M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|   106M|    return (PyGC_Head*)prev;
  158|   106M|}
gc.c:_PyGCHead_SET_NEXT:
  150|   106M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|   106M|    gc->_gc_next = (uintptr_t)next;
  152|   106M|}
gc.c:_PyGCHead_SET_PREV:
  160|   200M|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|   200M|    uintptr_t uprev = (uintptr_t)prev;
  162|   200M|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 200M, False: 0]
  ------------------
  163|   200M|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|   200M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   200M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|   200M|}
gc.c:_Py_FROM_GC:
   23|   187M|static inline PyObject* _Py_FROM_GC(PyGC_Head *gc) {
   24|   187M|    char *op = ((char *)gc) + sizeof(PyGC_Head);
   25|   187M|    return (PyObject *)op;
   26|   187M|}
gc.c:_PyObject_GC_IS_TRACKED:
   73|   124M|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   124M|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   124M|    return (gc->_gc_next != 0);
   79|   124M|#endif
   80|   124M|}
gc.c:_PyObject_GC_TRACK:
  213|  97.3k|{
  214|  97.3k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  97.3k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 97.3k, False: 0]
  |  |  ------------------
  |  |  417|  97.3k|      ? (void)(0) \
  |  |  418|  97.3k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  97.3k|                          "object already tracked by the garbage collector",
  216|  97.3k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  97.3k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  97.3k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  97.3k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 97.3k, False: 0]
  |  |  ------------------
  |  |  417|  97.3k|      ? (void)(0) \
  |  |  418|  97.3k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  97.3k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  97.3k|                          "object is in generation which is garbage collected",
  224|  97.3k|                          filename, lineno, __func__);
  225|       |
  226|  97.3k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  97.3k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  97.3k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  97.3k|    _PyGCHead_SET_NEXT(last, gc);
  230|  97.3k|    _PyGCHead_SET_PREV(gc, last);
  231|  97.3k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  97.3k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  97.3k|    gcstate->heap_size++;
  234|  97.3k|#endif
  235|  97.3k|}
gc.c:_PyObject_GC_UNTRACK:
  253|  13.2M|{
  254|  13.2M|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  13.2M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 13.2M, False: 0]
  |  |  ------------------
  |  |  417|  13.2M|      ? (void)(0) \
  |  |  418|  13.2M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  13.2M|                          "object not tracked by the garbage collector",
  256|  13.2M|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  13.2M|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  13.2M|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  13.2M|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  13.2M|    _PyGCHead_SET_NEXT(prev, next);
  265|  13.2M|    _PyGCHead_SET_PREV(next, prev);
  266|  13.2M|    gc->_gc_next = 0;
  267|  13.2M|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  13.2M|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  13.2M|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  13.2M|    gcstate->heap_size--;
  270|  13.2M|#endif
  271|  13.2M|}
gc.c:_Py_AS_GC:
   17|   410M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|   410M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|   410M|    return (PyGC_Head*)gc;
   20|   410M|}
gc.c:_PyGC_FINALIZED:
  166|  1.49k|static inline int _PyGC_FINALIZED(PyObject *op) {
  167|       |#ifdef Py_GIL_DISABLED
  168|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_FINALIZED);
  169|       |#else
  170|  1.49k|    PyGC_Head *gc = _Py_AS_GC(op);
  171|  1.49k|    return ((gc->_gc_prev & _PyGC_PREV_MASK_FINALIZED) != 0);
  ------------------
  |  |  117|  1.49k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  172|  1.49k|#endif
  173|  1.49k|}
hamt.c:_PyObject_GC_TRACK:
  213|      1|{
  214|      1|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      1|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  417|      1|      ? (void)(0) \
  |  |  418|      1|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|      1|                          "object already tracked by the garbage collector",
  216|      1|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|      1|    PyGC_Head *gc = _Py_AS_GC(op);
  221|      1|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|      1|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  417|      1|      ? (void)(0) \
  |  |  418|      1|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|      1|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|      1|                          "object is in generation which is garbage collected",
  224|      1|                          filename, lineno, __func__);
  225|       |
  226|      1|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|      1|    PyGC_Head *generation0 = gcstate->generation0;
  228|      1|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|      1|    _PyGCHead_SET_NEXT(last, gc);
  230|      1|    _PyGCHead_SET_PREV(gc, last);
  231|      1|    _PyGCHead_SET_NEXT(gc, generation0);
  232|      1|    generation0->_gc_prev = (uintptr_t)gc;
  233|      1|    gcstate->heap_size++;
  234|      1|#endif
  235|      1|}
hamt.c:_PyObject_GC_IS_TRACKED:
   73|      1|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|      1|    PyGC_Head *gc = _Py_AS_GC(op);
   78|      1|    return (gc->_gc_next != 0);
   79|      1|#endif
   80|      1|}
hamt.c:_Py_AS_GC:
   17|      2|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|      2|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|      2|    return (PyGC_Head*)gc;
   20|      2|}
hamt.c:_PyGCHead_SET_NEXT:
  150|      2|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|      2|    gc->_gc_next = (uintptr_t)next;
  152|      2|}
hamt.c:_PyGCHead_SET_PREV:
  160|      1|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|      1|    uintptr_t uprev = (uintptr_t)prev;
  162|      1|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 1, False: 0]
  ------------------
  163|      1|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|      1|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      1|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|      1|}
fileio.c:_PyObject_GC_UNTRACK:
  253|     93|{
  254|     93|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     93|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 93, False: 0]
  |  |  ------------------
  |  |  417|     93|      ? (void)(0) \
  |  |  418|     93|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|     93|                          "object not tracked by the garbage collector",
  256|     93|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|     93|    PyGC_Head *gc = _Py_AS_GC(op);
  262|     93|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|     93|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|     93|    _PyGCHead_SET_NEXT(prev, next);
  265|     93|    _PyGCHead_SET_PREV(next, prev);
  266|     93|    gc->_gc_next = 0;
  267|     93|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|     93|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|     93|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|     93|    gcstate->heap_size--;
  270|     93|#endif
  271|     93|}
fileio.c:_PyObject_GC_IS_TRACKED:
   73|     93|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|     93|    PyGC_Head *gc = _Py_AS_GC(op);
   78|     93|    return (gc->_gc_next != 0);
   79|     93|#endif
   80|     93|}
fileio.c:_Py_AS_GC:
   17|    186|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|    186|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|    186|    return (PyGC_Head*)gc;
   20|    186|}
fileio.c:_PyGCHead_PREV:
  155|     93|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|     93|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|     93|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     93|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|     93|    return (PyGC_Head*)prev;
  158|     93|}
fileio.c:_PyGCHead_NEXT:
  146|     93|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|     93|    uintptr_t next = gc->_gc_next;
  148|     93|    return (PyGC_Head*)next;
  149|     93|}
fileio.c:_PyGCHead_SET_NEXT:
  150|     93|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|     93|    gc->_gc_next = (uintptr_t)next;
  152|     93|}
fileio.c:_PyGCHead_SET_PREV:
  160|     93|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|     93|    uintptr_t uprev = (uintptr_t)prev;
  162|     93|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 93, False: 0]
  ------------------
  163|     93|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|     93|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     93|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|     93|}
bufferedio.c:_PyObject_GC_UNTRACK:
  253|     93|{
  254|     93|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     93|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 93, False: 0]
  |  |  ------------------
  |  |  417|     93|      ? (void)(0) \
  |  |  418|     93|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|     93|                          "object not tracked by the garbage collector",
  256|     93|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|     93|    PyGC_Head *gc = _Py_AS_GC(op);
  262|     93|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|     93|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|     93|    _PyGCHead_SET_NEXT(prev, next);
  265|     93|    _PyGCHead_SET_PREV(next, prev);
  266|     93|    gc->_gc_next = 0;
  267|     93|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|     93|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|     93|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|     93|    gcstate->heap_size--;
  270|     93|#endif
  271|     93|}
bufferedio.c:_PyObject_GC_IS_TRACKED:
   73|     93|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|     93|    PyGC_Head *gc = _Py_AS_GC(op);
   78|     93|    return (gc->_gc_next != 0);
   79|     93|#endif
   80|     93|}
bufferedio.c:_Py_AS_GC:
   17|    186|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|    186|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|    186|    return (PyGC_Head*)gc;
   20|    186|}
bufferedio.c:_PyGCHead_PREV:
  155|     93|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|     93|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|     93|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     93|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|     93|    return (PyGC_Head*)prev;
  158|     93|}
bufferedio.c:_PyGCHead_NEXT:
  146|     93|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|     93|    uintptr_t next = gc->_gc_next;
  148|     93|    return (PyGC_Head*)next;
  149|     93|}
bufferedio.c:_PyGCHead_SET_NEXT:
  150|     93|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|     93|    gc->_gc_next = (uintptr_t)next;
  152|     93|}
bufferedio.c:_PyGCHead_SET_PREV:
  160|     93|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|     93|    uintptr_t uprev = (uintptr_t)prev;
  162|     93|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 93, False: 0]
  ------------------
  163|     93|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|     93|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     93|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|     93|}
bytearrayobject.c:_PyObject_GC_UNTRACK:
  253|      2|{
  254|      2|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      2|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  417|      2|      ? (void)(0) \
  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|      2|                          "object not tracked by the garbage collector",
  256|      2|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|      2|    PyGC_Head *gc = _Py_AS_GC(op);
  262|      2|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|      2|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|      2|    _PyGCHead_SET_NEXT(prev, next);
  265|      2|    _PyGCHead_SET_PREV(next, prev);
  266|      2|    gc->_gc_next = 0;
  267|      2|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|      2|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|      2|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|      2|    gcstate->heap_size--;
  270|      2|#endif
  271|      2|}
bytearrayobject.c:_PyObject_GC_IS_TRACKED:
   73|      4|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|      4|    PyGC_Head *gc = _Py_AS_GC(op);
   78|      4|    return (gc->_gc_next != 0);
   79|      4|#endif
   80|      4|}
bytearrayobject.c:_Py_AS_GC:
   17|      8|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|      8|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|      8|    return (PyGC_Head*)gc;
   20|      8|}
bytearrayobject.c:_PyGCHead_PREV:
  155|      2|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|      2|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|      2|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      2|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|      2|    return (PyGC_Head*)prev;
  158|      2|}
bytearrayobject.c:_PyGCHead_NEXT:
  146|      2|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|      2|    uintptr_t next = gc->_gc_next;
  148|      2|    return (PyGC_Head*)next;
  149|      2|}
bytearrayobject.c:_PyGCHead_SET_NEXT:
  150|      6|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|      6|    gc->_gc_next = (uintptr_t)next;
  152|      6|}
bytearrayobject.c:_PyGCHead_SET_PREV:
  160|      4|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|      4|    uintptr_t uprev = (uintptr_t)prev;
  162|      4|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 4, False: 0]
  ------------------
  163|      4|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|      4|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      4|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|      4|}
bytearrayobject.c:_PyObject_GC_TRACK:
  213|      2|{
  214|      2|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      2|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  417|      2|      ? (void)(0) \
  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|      2|                          "object already tracked by the garbage collector",
  216|      2|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|      2|    PyGC_Head *gc = _Py_AS_GC(op);
  221|      2|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|      2|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  417|      2|      ? (void)(0) \
  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|      2|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|      2|                          "object is in generation which is garbage collected",
  224|      2|                          filename, lineno, __func__);
  225|       |
  226|      2|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|      2|    PyGC_Head *generation0 = gcstate->generation0;
  228|      2|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|      2|    _PyGCHead_SET_NEXT(last, gc);
  230|      2|    _PyGCHead_SET_PREV(gc, last);
  231|      2|    _PyGCHead_SET_NEXT(gc, generation0);
  232|      2|    generation0->_gc_prev = (uintptr_t)gc;
  233|      2|    gcstate->heap_size++;
  234|      2|#endif
  235|      2|}
bytesobject.c:_PyObject_GC_UNTRACK:
  253|      2|{
  254|      2|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      2|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  417|      2|      ? (void)(0) \
  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|      2|                          "object not tracked by the garbage collector",
  256|      2|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|      2|    PyGC_Head *gc = _Py_AS_GC(op);
  262|      2|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|      2|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|      2|    _PyGCHead_SET_NEXT(prev, next);
  265|      2|    _PyGCHead_SET_PREV(next, prev);
  266|      2|    gc->_gc_next = 0;
  267|      2|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|      2|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|      2|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|      2|    gcstate->heap_size--;
  270|      2|#endif
  271|      2|}
bytesobject.c:_PyObject_GC_IS_TRACKED:
   73|      4|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|      4|    PyGC_Head *gc = _Py_AS_GC(op);
   78|      4|    return (gc->_gc_next != 0);
   79|      4|#endif
   80|      4|}
bytesobject.c:_Py_AS_GC:
   17|      8|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|      8|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|      8|    return (PyGC_Head*)gc;
   20|      8|}
bytesobject.c:_PyGCHead_PREV:
  155|      2|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|      2|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|      2|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      2|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|      2|    return (PyGC_Head*)prev;
  158|      2|}
bytesobject.c:_PyGCHead_NEXT:
  146|      2|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|      2|    uintptr_t next = gc->_gc_next;
  148|      2|    return (PyGC_Head*)next;
  149|      2|}
bytesobject.c:_PyGCHead_SET_NEXT:
  150|      6|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|      6|    gc->_gc_next = (uintptr_t)next;
  152|      6|}
bytesobject.c:_PyGCHead_SET_PREV:
  160|      4|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|      4|    uintptr_t uprev = (uintptr_t)prev;
  162|      4|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 4, False: 0]
  ------------------
  163|      4|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|      4|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|      4|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|      4|}
bytesobject.c:_PyObject_GC_TRACK:
  213|      2|{
  214|      2|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|      2|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  417|      2|      ? (void)(0) \
  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|      2|                          "object already tracked by the garbage collector",
  216|      2|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|      2|    PyGC_Head *gc = _Py_AS_GC(op);
  221|      2|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|      2|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  417|      2|      ? (void)(0) \
  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|      2|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|      2|                          "object is in generation which is garbage collected",
  224|      2|                          filename, lineno, __func__);
  225|       |
  226|      2|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|      2|    PyGC_Head *generation0 = gcstate->generation0;
  228|      2|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|      2|    _PyGCHead_SET_NEXT(last, gc);
  230|      2|    _PyGCHead_SET_PREV(gc, last);
  231|      2|    _PyGCHead_SET_NEXT(gc, generation0);
  232|      2|    generation0->_gc_prev = (uintptr_t)gc;
  233|      2|    gcstate->heap_size++;
  234|      2|#endif
  235|      2|}
cellobject.c:_PyObject_GC_TRACK:
  213|  1.50k|{
  214|  1.50k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  1.50k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.50k, False: 0]
  |  |  ------------------
  |  |  417|  1.50k|      ? (void)(0) \
  |  |  418|  1.50k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  1.50k|                          "object already tracked by the garbage collector",
  216|  1.50k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  1.50k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  1.50k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  1.50k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.50k, False: 0]
  |  |  ------------------
  |  |  417|  1.50k|      ? (void)(0) \
  |  |  418|  1.50k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  1.50k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  1.50k|                          "object is in generation which is garbage collected",
  224|  1.50k|                          filename, lineno, __func__);
  225|       |
  226|  1.50k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  1.50k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  1.50k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  1.50k|    _PyGCHead_SET_NEXT(last, gc);
  230|  1.50k|    _PyGCHead_SET_PREV(gc, last);
  231|  1.50k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  1.50k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  1.50k|    gcstate->heap_size++;
  234|  1.50k|#endif
  235|  1.50k|}
cellobject.c:_PyObject_GC_IS_TRACKED:
   73|  2.86k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  2.86k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  2.86k|    return (gc->_gc_next != 0);
   79|  2.86k|#endif
   80|  2.86k|}
cellobject.c:_Py_AS_GC:
   17|  5.72k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  5.72k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  5.72k|    return (PyGC_Head*)gc;
   20|  5.72k|}
cellobject.c:_PyGCHead_SET_NEXT:
  150|  4.37k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  4.37k|    gc->_gc_next = (uintptr_t)next;
  152|  4.37k|}
cellobject.c:_PyGCHead_SET_PREV:
  160|  2.86k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  2.86k|    uintptr_t uprev = (uintptr_t)prev;
  162|  2.86k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 2.86k, False: 0]
  ------------------
  163|  2.86k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  2.86k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  2.86k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  2.86k|}
cellobject.c:_PyObject_GC_UNTRACK:
  253|  1.35k|{
  254|  1.35k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  1.35k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.35k, False: 0]
  |  |  ------------------
  |  |  417|  1.35k|      ? (void)(0) \
  |  |  418|  1.35k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  1.35k|                          "object not tracked by the garbage collector",
  256|  1.35k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  1.35k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  1.35k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  1.35k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  1.35k|    _PyGCHead_SET_NEXT(prev, next);
  265|  1.35k|    _PyGCHead_SET_PREV(next, prev);
  266|  1.35k|    gc->_gc_next = 0;
  267|  1.35k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  1.35k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  1.35k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  1.35k|    gcstate->heap_size--;
  270|  1.35k|#endif
  271|  1.35k|}
cellobject.c:_PyGCHead_PREV:
  155|  1.35k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  1.35k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  1.35k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  1.35k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  1.35k|    return (PyGC_Head*)prev;
  158|  1.35k|}
cellobject.c:_PyGCHead_NEXT:
  146|  1.35k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  1.35k|    uintptr_t next = gc->_gc_next;
  148|  1.35k|    return (PyGC_Head*)next;
  149|  1.35k|}
classobject.c:_PyObject_GC_TRACK:
  213|  2.32k|{
  214|  2.32k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  2.32k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.32k, False: 0]
  |  |  ------------------
  |  |  417|  2.32k|      ? (void)(0) \
  |  |  418|  2.32k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  2.32k|                          "object already tracked by the garbage collector",
  216|  2.32k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  2.32k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  2.32k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  2.32k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.32k, False: 0]
  |  |  ------------------
  |  |  417|  2.32k|      ? (void)(0) \
  |  |  418|  2.32k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  2.32k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  2.32k|                          "object is in generation which is garbage collected",
  224|  2.32k|                          filename, lineno, __func__);
  225|       |
  226|  2.32k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  2.32k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  2.32k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  2.32k|    _PyGCHead_SET_NEXT(last, gc);
  230|  2.32k|    _PyGCHead_SET_PREV(gc, last);
  231|  2.32k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  2.32k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  2.32k|    gcstate->heap_size++;
  234|  2.32k|#endif
  235|  2.32k|}
classobject.c:_PyObject_GC_IS_TRACKED:
   73|  4.52k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  4.52k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  4.52k|    return (gc->_gc_next != 0);
   79|  4.52k|#endif
   80|  4.52k|}
classobject.c:_Py_AS_GC:
   17|  9.04k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  9.04k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  9.04k|    return (PyGC_Head*)gc;
   20|  9.04k|}
classobject.c:_PyGCHead_SET_NEXT:
  150|  6.84k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  6.84k|    gc->_gc_next = (uintptr_t)next;
  152|  6.84k|}
classobject.c:_PyGCHead_SET_PREV:
  160|  4.52k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  4.52k|    uintptr_t uprev = (uintptr_t)prev;
  162|  4.52k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 4.52k, False: 0]
  ------------------
  163|  4.52k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  4.52k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  4.52k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  4.52k|}
classobject.c:_PyObject_GC_UNTRACK:
  253|  2.19k|{
  254|  2.19k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  2.19k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.19k, False: 0]
  |  |  ------------------
  |  |  417|  2.19k|      ? (void)(0) \
  |  |  418|  2.19k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  2.19k|                          "object not tracked by the garbage collector",
  256|  2.19k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  2.19k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  2.19k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  2.19k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  2.19k|    _PyGCHead_SET_NEXT(prev, next);
  265|  2.19k|    _PyGCHead_SET_PREV(next, prev);
  266|  2.19k|    gc->_gc_next = 0;
  267|  2.19k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  2.19k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  2.19k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  2.19k|    gcstate->heap_size--;
  270|  2.19k|#endif
  271|  2.19k|}
classobject.c:_PyGCHead_PREV:
  155|  2.19k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  2.19k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  2.19k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  2.19k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  2.19k|    return (PyGC_Head*)prev;
  158|  2.19k|}
classobject.c:_PyGCHead_NEXT:
  146|  2.19k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  2.19k|    uintptr_t next = gc->_gc_next;
  148|  2.19k|    return (PyGC_Head*)next;
  149|  2.19k|}
descrobject.c:_PyObject_GC_UNTRACK:
  253|    471|{
  254|    471|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|    471|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 471, False: 0]
  |  |  ------------------
  |  |  417|    471|      ? (void)(0) \
  |  |  418|    471|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|    471|                          "object not tracked by the garbage collector",
  256|    471|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|    471|    PyGC_Head *gc = _Py_AS_GC(op);
  262|    471|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|    471|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|    471|    _PyGCHead_SET_NEXT(prev, next);
  265|    471|    _PyGCHead_SET_PREV(next, prev);
  266|    471|    gc->_gc_next = 0;
  267|    471|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|    471|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|    471|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|    471|    gcstate->heap_size--;
  270|    471|#endif
  271|    471|}
descrobject.c:_PyObject_GC_IS_TRACKED:
   73|    961|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|    961|    PyGC_Head *gc = _Py_AS_GC(op);
   78|    961|    return (gc->_gc_next != 0);
   79|    961|#endif
   80|    961|}
descrobject.c:_Py_AS_GC:
   17|  1.92k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  1.92k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  1.92k|    return (PyGC_Head*)gc;
   20|  1.92k|}
descrobject.c:_PyGCHead_PREV:
  155|    471|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|    471|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|    471|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    471|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|    471|    return (PyGC_Head*)prev;
  158|    471|}
descrobject.c:_PyGCHead_NEXT:
  146|    471|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|    471|    uintptr_t next = gc->_gc_next;
  148|    471|    return (PyGC_Head*)next;
  149|    471|}
descrobject.c:_PyGCHead_SET_NEXT:
  150|  1.45k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  1.45k|    gc->_gc_next = (uintptr_t)next;
  152|  1.45k|}
descrobject.c:_PyGCHead_SET_PREV:
  160|    961|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|    961|    uintptr_t uprev = (uintptr_t)prev;
  162|    961|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 961, False: 0]
  ------------------
  163|    961|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|    961|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    961|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|    961|}
descrobject.c:_PyObject_GC_TRACK:
  213|    490|{
  214|    490|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|    490|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 490, False: 0]
  |  |  ------------------
  |  |  417|    490|      ? (void)(0) \
  |  |  418|    490|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|    490|                          "object already tracked by the garbage collector",
  216|    490|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|    490|    PyGC_Head *gc = _Py_AS_GC(op);
  221|    490|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|    490|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 490, False: 0]
  |  |  ------------------
  |  |  417|    490|      ? (void)(0) \
  |  |  418|    490|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|    490|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|    490|                          "object is in generation which is garbage collected",
  224|    490|                          filename, lineno, __func__);
  225|       |
  226|    490|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|    490|    PyGC_Head *generation0 = gcstate->generation0;
  228|    490|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|    490|    _PyGCHead_SET_NEXT(last, gc);
  230|    490|    _PyGCHead_SET_PREV(gc, last);
  231|    490|    _PyGCHead_SET_NEXT(gc, generation0);
  232|    490|    generation0->_gc_prev = (uintptr_t)gc;
  233|    490|    gcstate->heap_size++;
  234|    490|#endif
  235|    490|}
enumobject.c:_PyObject_GC_IS_TRACKED:
   73|   659k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   659k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   659k|    return (gc->_gc_next != 0);
   79|   659k|#endif
   80|   659k|}
enumobject.c:_Py_AS_GC:
   17|   697k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|   697k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|   697k|    return (PyGC_Head*)gc;
   20|   697k|}
enumobject.c:_PyObject_GC_TRACK:
  213|  37.5k|{
  214|  37.5k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  37.5k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 37.5k, False: 0]
  |  |  ------------------
  |  |  417|  37.5k|      ? (void)(0) \
  |  |  418|  37.5k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  37.5k|                          "object already tracked by the garbage collector",
  216|  37.5k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  37.5k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  37.5k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  37.5k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 37.5k, False: 0]
  |  |  ------------------
  |  |  417|  37.5k|      ? (void)(0) \
  |  |  418|  37.5k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  37.5k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  37.5k|                          "object is in generation which is garbage collected",
  224|  37.5k|                          filename, lineno, __func__);
  225|       |
  226|  37.5k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  37.5k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  37.5k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  37.5k|    _PyGCHead_SET_NEXT(last, gc);
  230|  37.5k|    _PyGCHead_SET_PREV(gc, last);
  231|  37.5k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  37.5k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  37.5k|    gcstate->heap_size++;
  234|  37.5k|#endif
  235|  37.5k|}
enumobject.c:_PyGCHead_SET_NEXT:
  150|  75.0k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  75.0k|    gc->_gc_next = (uintptr_t)next;
  152|  75.0k|}
enumobject.c:_PyGCHead_SET_PREV:
  160|  37.5k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  37.5k|    uintptr_t uprev = (uintptr_t)prev;
  162|  37.5k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 37.5k, False: 0]
  ------------------
  163|  37.5k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  37.5k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  37.5k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  37.5k|}
genobject.c:_PyObject_GC_UNTRACK:
  253|  2.49k|{
  254|  2.49k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  2.49k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.49k, False: 0]
  |  |  ------------------
  |  |  417|  2.49k|      ? (void)(0) \
  |  |  418|  2.49k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  2.49k|                          "object not tracked by the garbage collector",
  256|  2.49k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  2.49k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  2.49k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  2.49k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  2.49k|    _PyGCHead_SET_NEXT(prev, next);
  265|  2.49k|    _PyGCHead_SET_PREV(next, prev);
  266|  2.49k|    gc->_gc_next = 0;
  267|  2.49k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  2.49k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  2.49k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  2.49k|    gcstate->heap_size--;
  270|  2.49k|#endif
  271|  2.49k|}
genobject.c:_PyObject_GC_IS_TRACKED:
   73|  4.98k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  4.98k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  4.98k|    return (gc->_gc_next != 0);
   79|  4.98k|#endif
   80|  4.98k|}
genobject.c:_Py_AS_GC:
   17|  9.97k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  9.97k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  9.97k|    return (PyGC_Head*)gc;
   20|  9.97k|}
genobject.c:_PyGCHead_PREV:
  155|  2.49k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  2.49k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  2.49k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  2.49k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  2.49k|    return (PyGC_Head*)prev;
  158|  2.49k|}
genobject.c:_PyGCHead_NEXT:
  146|  2.49k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  2.49k|    uintptr_t next = gc->_gc_next;
  148|  2.49k|    return (PyGC_Head*)next;
  149|  2.49k|}
genobject.c:_PyGCHead_SET_NEXT:
  150|  7.48k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  7.48k|    gc->_gc_next = (uintptr_t)next;
  152|  7.48k|}
genobject.c:_PyGCHead_SET_PREV:
  160|  4.98k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  4.98k|    uintptr_t uprev = (uintptr_t)prev;
  162|  4.98k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 4.98k, False: 0]
  ------------------
  163|  4.98k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  4.98k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  4.98k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  4.98k|}
genobject.c:_PyObject_GC_TRACK:
  213|  2.49k|{
  214|  2.49k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  2.49k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.49k, False: 0]
  |  |  ------------------
  |  |  417|  2.49k|      ? (void)(0) \
  |  |  418|  2.49k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  2.49k|                          "object already tracked by the garbage collector",
  216|  2.49k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  2.49k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  2.49k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  2.49k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.49k, False: 0]
  |  |  ------------------
  |  |  417|  2.49k|      ? (void)(0) \
  |  |  418|  2.49k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  2.49k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  2.49k|                          "object is in generation which is garbage collected",
  224|  2.49k|                          filename, lineno, __func__);
  225|       |
  226|  2.49k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  2.49k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  2.49k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  2.49k|    _PyGCHead_SET_NEXT(last, gc);
  230|  2.49k|    _PyGCHead_SET_PREV(gc, last);
  231|  2.49k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  2.49k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  2.49k|    gcstate->heap_size++;
  234|  2.49k|#endif
  235|  2.49k|}
frameobject.c:_PyObject_GC_IS_TRACKED:
   73|  27.3k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  27.3k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  27.3k|    return (gc->_gc_next != 0);
   79|  27.3k|#endif
   80|  27.3k|}
frameobject.c:_Py_AS_GC:
   17|  31.5k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  31.5k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  31.5k|    return (PyGC_Head*)gc;
   20|  31.5k|}
frameobject.c:_PyObject_GC_UNTRACK:
  253|  4.21k|{
  254|  4.21k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  4.21k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |  417|  4.21k|      ? (void)(0) \
  |  |  418|  4.21k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  4.21k|                          "object not tracked by the garbage collector",
  256|  4.21k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  4.21k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  4.21k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  4.21k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  4.21k|    _PyGCHead_SET_NEXT(prev, next);
  265|  4.21k|    _PyGCHead_SET_PREV(next, prev);
  266|  4.21k|    gc->_gc_next = 0;
  267|  4.21k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  4.21k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  4.21k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  4.21k|    gcstate->heap_size--;
  270|  4.21k|#endif
  271|  4.21k|}
frameobject.c:_PyGCHead_PREV:
  155|  4.21k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  4.21k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  4.21k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  4.21k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  4.21k|    return (PyGC_Head*)prev;
  158|  4.21k|}
frameobject.c:_PyGCHead_NEXT:
  146|  4.21k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  4.21k|    uintptr_t next = gc->_gc_next;
  148|  4.21k|    return (PyGC_Head*)next;
  149|  4.21k|}
frameobject.c:_PyGCHead_SET_NEXT:
  150|  4.21k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  4.21k|    gc->_gc_next = (uintptr_t)next;
  152|  4.21k|}
frameobject.c:_PyGCHead_SET_PREV:
  160|  4.21k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  4.21k|    uintptr_t uprev = (uintptr_t)prev;
  162|  4.21k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 4.21k, False: 0]
  ------------------
  163|  4.21k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  4.21k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  4.21k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  4.21k|}
funcobject.c:_PyObject_GC_TRACK:
  213|  5.10k|{
  214|  5.10k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  5.10k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 5.10k, False: 0]
  |  |  ------------------
  |  |  417|  5.10k|      ? (void)(0) \
  |  |  418|  5.10k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  5.10k|                          "object already tracked by the garbage collector",
  216|  5.10k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  5.10k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  5.10k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  5.10k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 5.10k, False: 0]
  |  |  ------------------
  |  |  417|  5.10k|      ? (void)(0) \
  |  |  418|  5.10k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  5.10k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  5.10k|                          "object is in generation which is garbage collected",
  224|  5.10k|                          filename, lineno, __func__);
  225|       |
  226|  5.10k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  5.10k|    PyGC_Head *generation0 = gcstate->generation0;
  228|  5.10k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  5.10k|    _PyGCHead_SET_NEXT(last, gc);
  230|  5.10k|    _PyGCHead_SET_PREV(gc, last);
  231|  5.10k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  5.10k|    generation0->_gc_prev = (uintptr_t)gc;
  233|  5.10k|    gcstate->heap_size++;
  234|  5.10k|#endif
  235|  5.10k|}
funcobject.c:_PyObject_GC_IS_TRACKED:
   73|  7.69k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  7.69k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  7.69k|    return (gc->_gc_next != 0);
   79|  7.69k|#endif
   80|  7.69k|}
funcobject.c:_Py_AS_GC:
   17|  15.3k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  15.3k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  15.3k|    return (PyGC_Head*)gc;
   20|  15.3k|}
funcobject.c:_PyGCHead_SET_NEXT:
  150|  12.8k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  12.8k|    gc->_gc_next = (uintptr_t)next;
  152|  12.8k|}
funcobject.c:_PyGCHead_SET_PREV:
  160|  7.69k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  7.69k|    uintptr_t uprev = (uintptr_t)prev;
  162|  7.69k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 7.69k, False: 0]
  ------------------
  163|  7.69k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  7.69k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  7.69k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  7.69k|}
funcobject.c:_PyObject_GC_UNTRACK:
  253|  2.58k|{
  254|  2.58k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  2.58k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 2.58k, False: 0]
  |  |  ------------------
  |  |  417|  2.58k|      ? (void)(0) \
  |  |  418|  2.58k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|  2.58k|                          "object not tracked by the garbage collector",
  256|  2.58k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|  2.58k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|  2.58k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|  2.58k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|  2.58k|    _PyGCHead_SET_NEXT(prev, next);
  265|  2.58k|    _PyGCHead_SET_PREV(next, prev);
  266|  2.58k|    gc->_gc_next = 0;
  267|  2.58k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|  2.58k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|  2.58k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|  2.58k|    gcstate->heap_size--;
  270|  2.58k|#endif
  271|  2.58k|}
funcobject.c:_PyGCHead_PREV:
  155|  2.58k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|  2.58k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|  2.58k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  2.58k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|  2.58k|    return (PyGC_Head*)prev;
  158|  2.58k|}
funcobject.c:_PyGCHead_NEXT:
  146|  2.58k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|  2.58k|    uintptr_t next = gc->_gc_next;
  148|  2.58k|    return (PyGC_Head*)next;
  149|  2.58k|}
iterobject.c:_PyObject_GC_TRACK:
  213|     63|{
  214|     63|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     63|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 63, False: 0]
  |  |  ------------------
  |  |  417|     63|      ? (void)(0) \
  |  |  418|     63|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|     63|                          "object already tracked by the garbage collector",
  216|     63|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|     63|    PyGC_Head *gc = _Py_AS_GC(op);
  221|     63|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|     63|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 63, False: 0]
  |  |  ------------------
  |  |  417|     63|      ? (void)(0) \
  |  |  418|     63|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|     63|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|     63|                          "object is in generation which is garbage collected",
  224|     63|                          filename, lineno, __func__);
  225|       |
  226|     63|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|     63|    PyGC_Head *generation0 = gcstate->generation0;
  228|     63|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|     63|    _PyGCHead_SET_NEXT(last, gc);
  230|     63|    _PyGCHead_SET_PREV(gc, last);
  231|     63|    _PyGCHead_SET_NEXT(gc, generation0);
  232|     63|    generation0->_gc_prev = (uintptr_t)gc;
  233|     63|    gcstate->heap_size++;
  234|     63|#endif
  235|     63|}
iterobject.c:_PyObject_GC_IS_TRACKED:
   73|    126|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|    126|    PyGC_Head *gc = _Py_AS_GC(op);
   78|    126|    return (gc->_gc_next != 0);
   79|    126|#endif
   80|    126|}
iterobject.c:_Py_AS_GC:
   17|    252|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|    252|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|    252|    return (PyGC_Head*)gc;
   20|    252|}
iterobject.c:_PyGCHead_SET_NEXT:
  150|    189|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|    189|    gc->_gc_next = (uintptr_t)next;
  152|    189|}
iterobject.c:_PyGCHead_SET_PREV:
  160|    126|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|    126|    uintptr_t uprev = (uintptr_t)prev;
  162|    126|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 126, False: 0]
  ------------------
  163|    126|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|    126|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|    126|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|    126|}
iterobject.c:_PyObject_GC_UNTRACK:
  253|     63|{
  254|     63|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     63|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 63, False: 0]
  |  |  ------------------
  |  |  417|     63|      ? (void)(0) \
  |  |  418|     63|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|     63|                          "object not tracked by the garbage collector",
  256|     63|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|     63|    PyGC_Head *gc = _Py_AS_GC(op);
  262|     63|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|     63|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|     63|    _PyGCHead_SET_NEXT(prev, next);
  265|     63|    _PyGCHead_SET_PREV(next, prev);
  266|     63|    gc->_gc_next = 0;
  267|     63|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|     63|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|     63|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|     63|    gcstate->heap_size--;
  270|     63|#endif
  271|     63|}
iterobject.c:_PyGCHead_PREV:
  155|     63|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|     63|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|     63|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     63|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|     63|    return (PyGC_Head*)prev;
  158|     63|}
iterobject.c:_PyGCHead_NEXT:
  146|     63|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|     63|    uintptr_t next = gc->_gc_next;
  148|     63|    return (PyGC_Head*)next;
  149|     63|}
lazyimportobject.c:_PyObject_GC_TRACK:
  213|     13|{
  214|     13|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|     13|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 13, False: 0]
  |  |  ------------------
  |  |  417|     13|      ? (void)(0) \
  |  |  418|     13|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|     13|                          "object already tracked by the garbage collector",
  216|     13|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|     13|    PyGC_Head *gc = _Py_AS_GC(op);
  221|     13|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|     13|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 13, False: 0]
  |  |  ------------------
  |  |  417|     13|      ? (void)(0) \
  |  |  418|     13|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|     13|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|     13|                          "object is in generation which is garbage collected",
  224|     13|                          filename, lineno, __func__);
  225|       |
  226|     13|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|     13|    PyGC_Head *generation0 = gcstate->generation0;
  228|     13|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|     13|    _PyGCHead_SET_NEXT(last, gc);
  230|     13|    _PyGCHead_SET_PREV(gc, last);
  231|     13|    _PyGCHead_SET_NEXT(gc, generation0);
  232|     13|    generation0->_gc_prev = (uintptr_t)gc;
  233|     13|    gcstate->heap_size++;
  234|     13|#endif
  235|     13|}
lazyimportobject.c:_PyObject_GC_IS_TRACKED:
   73|     13|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|     13|    PyGC_Head *gc = _Py_AS_GC(op);
   78|     13|    return (gc->_gc_next != 0);
   79|     13|#endif
   80|     13|}
lazyimportobject.c:_Py_AS_GC:
   17|     26|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|     26|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|     26|    return (PyGC_Head*)gc;
   20|     26|}
lazyimportobject.c:_PyGCHead_SET_NEXT:
  150|     26|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|     26|    gc->_gc_next = (uintptr_t)next;
  152|     26|}
lazyimportobject.c:_PyGCHead_SET_PREV:
  160|     13|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|     13|    uintptr_t uprev = (uintptr_t)prev;
  162|     13|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 13, False: 0]
  ------------------
  163|     13|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|     13|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|     13|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|     13|}
memoryobject.c:_PyObject_GC_UNTRACK:
  253|   144k|{
  254|   144k|    _PyObject_ASSERT_FROM(op, _PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|   144k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 144k, False: 0]
  |  |  ------------------
  |  |  417|   144k|      ? (void)(0) \
  |  |  418|   144k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  255|   144k|                          "object not tracked by the garbage collector",
  256|   144k|                          filename, lineno, __func__);
  257|       |
  258|       |#ifdef Py_GIL_DISABLED
  259|       |    _PyObject_CLEAR_GC_BITS(op, _PyGC_BITS_TRACKED);
  260|       |#else
  261|   144k|    PyGC_Head *gc = _Py_AS_GC(op);
  262|   144k|    PyGC_Head *prev = _PyGCHead_PREV(gc);
  263|   144k|    PyGC_Head *next = _PyGCHead_NEXT(gc);
  264|   144k|    _PyGCHead_SET_NEXT(prev, next);
  265|   144k|    _PyGCHead_SET_PREV(next, prev);
  266|   144k|    gc->_gc_next = 0;
  267|   144k|    gc->_gc_prev &= _PyGC_PREV_MASK_FINALIZED;
  ------------------
  |  |  117|   144k|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
  268|   144k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  269|   144k|    gcstate->heap_size--;
  270|   144k|#endif
  271|   144k|}
memoryobject.c:_PyObject_GC_IS_TRACKED:
   73|   289k|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|   289k|    PyGC_Head *gc = _Py_AS_GC(op);
   78|   289k|    return (gc->_gc_next != 0);
   79|   289k|#endif
   80|   289k|}
memoryobject.c:_Py_AS_GC:
   17|   578k|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|   578k|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|   578k|    return (PyGC_Head*)gc;
   20|   578k|}
memoryobject.c:_PyGCHead_PREV:
  155|   144k|static inline PyGC_Head* _PyGCHead_PREV(PyGC_Head *gc) {
  156|   144k|    uintptr_t prev = (gc->_gc_prev & _PyGC_PREV_MASK);
  ------------------
  |  |  122|   144k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   144k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  157|   144k|    return (PyGC_Head*)prev;
  158|   144k|}
memoryobject.c:_PyGCHead_NEXT:
  146|   144k|static inline PyGC_Head* _PyGCHead_NEXT(PyGC_Head *gc) {
  147|   144k|    uintptr_t next = gc->_gc_next;
  148|   144k|    return (PyGC_Head*)next;
  149|   144k|}
memoryobject.c:_PyGCHead_SET_NEXT:
  150|   433k|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|   433k|    gc->_gc_next = (uintptr_t)next;
  152|   433k|}
memoryobject.c:_PyGCHead_SET_PREV:
  160|   289k|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|   289k|    uintptr_t uprev = (uintptr_t)prev;
  162|   289k|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 289k, False: 0]
  ------------------
  163|   289k|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|   289k|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|   289k|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|   289k|}
memoryobject.c:_PyObject_GC_TRACK:
  213|   144k|{
  214|   144k|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|   144k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 144k, False: 0]
  |  |  ------------------
  |  |  417|   144k|      ? (void)(0) \
  |  |  418|   144k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|   144k|                          "object already tracked by the garbage collector",
  216|   144k|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|   144k|    PyGC_Head *gc = _Py_AS_GC(op);
  221|   144k|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|   144k|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 144k, False: 0]
  |  |  ------------------
  |  |  417|   144k|      ? (void)(0) \
  |  |  418|   144k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|   144k|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|   144k|                          "object is in generation which is garbage collected",
  224|   144k|                          filename, lineno, __func__);
  225|       |
  226|   144k|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|   144k|    PyGC_Head *generation0 = gcstate->generation0;
  228|   144k|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|   144k|    _PyGCHead_SET_NEXT(last, gc);
  230|   144k|    _PyGCHead_SET_PREV(gc, last);
  231|   144k|    _PyGCHead_SET_NEXT(gc, generation0);
  232|   144k|    generation0->_gc_prev = (uintptr_t)gc;
  233|   144k|    gcstate->heap_size++;
  234|   144k|#endif
  235|   144k|}
methodobject.c:_PyObject_GC_TRACK:
  213|  1.94M|{
  214|  1.94M|    _PyObject_ASSERT_FROM(op, !_PyObject_GC_IS_TRACKED(op),
  ------------------
  |  |  416|  1.94M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.94M, False: 0]
  |  |  ------------------
  |  |  417|  1.94M|      ? (void)(0) \
  |  |  418|  1.94M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  215|  1.94M|                          "object already tracked by the garbage collector",
  216|  1.94M|                          filename, lineno, __func__);
  217|       |#ifdef Py_GIL_DISABLED
  218|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_TRACKED);
  219|       |#else
  220|  1.94M|    PyGC_Head *gc = _Py_AS_GC(op);
  221|  1.94M|    _PyObject_ASSERT_FROM(op,
  ------------------
  |  |  416|  1.94M|    ((expr) \
  |  |  ------------------
  |  |  |  Branch (416:6): [True: 1.94M, False: 0]
  |  |  ------------------
  |  |  417|  1.94M|      ? (void)(0) \
  |  |  418|  1.94M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  ------------------
  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  ------------------
  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  ------------------
  222|  1.94M|                          (gc->_gc_prev & _PyGC_PREV_MASK_COLLECTING) == 0,
  223|  1.94M|                          "object is in generation which is garbage collected",
  224|  1.94M|                          filename, lineno, __func__);
  225|       |
  226|  1.94M|    struct _gc_runtime_state *gcstate = &_PyInterpreterState_GET()->gc;
  227|  1.94M|    PyGC_Head *generation0 = gcstate->generation0;
  228|  1.94M|    PyGC_Head *last = (PyGC_Head*)(generation0->_gc_prev);
  229|  1.94M|    _PyGCHead_SET_NEXT(last, gc);
  230|  1.94M|    _PyGCHead_SET_PREV(gc, last);
  231|  1.94M|    _PyGCHead_SET_NEXT(gc, generation0);
  232|  1.94M|    generation0->_gc_prev = (uintptr_t)gc;
  233|  1.94M|    gcstate->heap_size++;
  234|  1.94M|#endif
  235|  1.94M|}
methodobject.c:_PyObject_GC_IS_TRACKED:
   73|  1.94M|static inline int _PyObject_GC_IS_TRACKED(PyObject *op) {
   74|       |#ifdef Py_GIL_DISABLED
   75|       |    return _PyObject_HAS_GC_BITS(op, _PyGC_BITS_TRACKED);
   76|       |#else
   77|  1.94M|    PyGC_Head *gc = _Py_AS_GC(op);
   78|  1.94M|    return (gc->_gc_next != 0);
   79|  1.94M|#endif
   80|  1.94M|}
methodobject.c:_Py_AS_GC:
   17|  3.88M|static inline PyGC_Head* _Py_AS_GC(PyObject *op) {
   18|  3.88M|    char *gc = ((char*)op) - sizeof(PyGC_Head);
   19|  3.88M|    return (PyGC_Head*)gc;
   20|  3.88M|}
methodobject.c:_PyGCHead_SET_NEXT:
  150|  3.88M|static inline void _PyGCHead_SET_NEXT(PyGC_Head *gc, PyGC_Head *next) {
  151|  3.88M|    gc->_gc_next = (uintptr_t)next;
  152|  3.88M|}
methodobject.c:_PyGCHead_SET_PREV:
  160|  1.94M|static inline void _PyGCHead_SET_PREV(PyGC_Head *gc, PyGC_Head *prev) {
  161|  1.94M|    uintptr_t uprev = (uintptr_t)prev;
  162|  1.94M|    assert((uprev & ~_PyGC_PREV_MASK) == 0);
  ------------------
  |  Branch (162:5): [True: 1.94M, False: 0]
  ------------------
  163|  1.94M|    gc->_gc_prev = ((gc->_gc_prev & ~_PyGC_PREV_MASK) | uprev);
  ------------------
  |  |  122|  1.94M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  1.94M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
  164|  1.94M|}

ceval.c:_PyGen_GetGeneratorFromFrame:
   18|  50.9k|{
   19|  50.9k|    assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
  ------------------
  |  Branch (19:5): [True: 50.9k, False: 0]
  ------------------
   20|  50.9k|    size_t offset_in_gen = offsetof(PyGenObject, gi_iframe);
   21|  50.9k|    return (PyGenObject *)(((char *)frame) - offset_in_gen);
   22|  50.9k|}
frame.c:_PyGen_GetGeneratorFromFrame:
   18|  1.24k|{
   19|  1.24k|    assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
  ------------------
  |  Branch (19:5): [True: 1.24k, False: 0]
  ------------------
   20|  1.24k|    size_t offset_in_gen = offsetof(PyGenObject, gi_iframe);
   21|  1.24k|    return (PyGenObject *)(((char *)frame) - offset_in_gen);
   22|  1.24k|}

flowgraph.c:_Py_hashtable_get_entry:
  124|   935k|{
  125|   935k|    return ht->get_entry_func(ht, key);
  126|   935k|}
import.c:_Py_hashtable_get_entry:
  124|     51|{
  125|     51|    return ht->get_entry_func(ht, key);
  126|     51|}

pylifecycle.c:_PyInterpreterState_GetFinalizing:
   31|  48.4k|_PyInterpreterState_GetFinalizing(PyInterpreterState *interp) {
   32|  48.4k|    return (PyThreadState*)_Py_atomic_load_ptr_relaxed(&interp->_finalizing);
   33|  48.4k|}

sentinelobject.c:_PyFrame_GetFunction:
   96|      3|static inline PyFunctionObject *_PyFrame_GetFunction(_PyInterpreterFrame *f) {
   97|      3|    PyObject *func = PyStackRef_AsPyObjectBorrow(f->f_funcobj);
   98|      3|    assert(PyFunction_Check(func));
  ------------------
  |  Branch (98:5): [True: 3, False: 0]
  ------------------
   99|      3|    return (PyFunctionObject *)func;
  100|      3|}
typeobject.c:_PyThreadState_GetFrame:
  314|     14|{
  315|     14|    return _PyFrame_GetFirstComplete(tstate->current_frame);
  316|     14|}
typeobject.c:_PyFrame_GetFirstComplete:
  305|     14|{
  306|     14|    while (frame && _PyFrame_IsIncomplete(frame)) {
  ------------------
  |  Branch (306:12): [True: 14, False: 0]
  |  Branch (306:21): [True: 0, False: 14]
  ------------------
  307|      0|        frame = frame->previous;
  308|      0|    }
  309|     14|    return frame;
  310|     14|}
typeobject.c:_PyFrame_IsIncomplete:
  294|     14|{
  295|     14|    if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) {
  ------------------
  |  Branch (295:9): [True: 0, False: 14]
  ------------------
  296|      0|        return true;
  297|      0|    }
  298|     14|    return frame->owner != FRAME_OWNED_BY_GENERATOR &&
  ------------------
  |  Branch (298:12): [True: 14, False: 0]
  ------------------
  299|     14|           frame->instr_ptr < _PyFrame_GetBytecode(frame) +
  ------------------
  |  Branch (299:12): [True: 0, False: 14]
  ------------------
  300|     14|                                  _PyFrame_GetCode(frame)->_co_firsttraceable;
  301|     14|}
typeobject.c:_PyFrame_GetBytecode:
   60|     14|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|     14|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|     14|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|     14|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|     14|#endif
   69|     14|}
typeobject.c:_PyFrame_GetCode:
   21|     56|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|     56|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 56, False: 0]
  ------------------
   23|     56|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|     56|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 56, False: 0]
  ------------------
   25|     56|    return (PyCodeObject *)executable;
   26|     56|}
typeobject.c:_PyFrame_GetLocalsArray:
  226|     28|{
  227|     28|    return frame->localsplus;
  228|     28|}
ceval.c:_PyFrame_GetCode:
   21|  59.5M|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|  59.5M|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 59.5M, False: 0]
  ------------------
   23|  59.5M|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|  59.5M|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 59.5M, False: 0]
  ------------------
   25|  59.5M|    return (PyCodeObject *)executable;
   26|  59.5M|}
ceval.c:_PyFrame_GetStackPointer:
  235|  90.6M|{
  236|  90.6M|    return frame->stackpointer;
  237|  90.6M|}
ceval.c:_PyFrame_StackPointerInvalidate:
  259|   334M|{
  260|       |#ifdef Py_DEBUG
  261|       |/* Avoid bloating the JIT code */
  262|       |#ifndef _Py_JIT
  263|       |    assert(frame->stackpointer_valid == 1);
  264|       |#endif
  265|       |    frame->stackpointer_valid = 0;
  266|       |#endif
  267|   334M|}
ceval.c:_PyFrame_SetStackPointer:
  241|   257M|{
  242|   257M|    frame->stackpointer = stack_pointer;
  243|   257M|}
ceval.c:_PyFrame_StackPointerValidate:
  247|   334M|{
  248|       |#ifdef Py_DEBUG
  249|       |/* Avoid bloating the JIT code */
  250|       |#ifndef _Py_JIT
  251|       |    assert(frame->stackpointer_valid == 0);
  252|       |#endif
  253|       |    frame->stackpointer_valid = 1;
  254|       |#endif
  255|   334M|}
ceval.c:_PyFrame_StackAssertInvalid:
  271|   570M|{
  272|       |#ifdef Py_DEBUG
  273|       |/* Avoid bloating the JIT code */
  274|       |#ifndef _Py_JIT
  275|       |    assert(frame->stackpointer_valid == 0);
  276|       |#endif
  277|       |#endif
  278|   570M|}
ceval.c:_PyThreadState_HasStackSpace:
  384|  6.46M|{
  385|  6.46M|    assert(
  ------------------
  |  Branch (385:5): [True: 0, False: 6.46M]
  |  Branch (385:5): [True: 0, False: 0]
  |  Branch (385:5): [True: 6.46M, False: 0]
  |  Branch (385:5): [True: 6.46M, False: 0]
  ------------------
  386|  6.46M|        (tstate->datastack_top == NULL && tstate->datastack_limit == NULL)
  387|  6.46M|        ||
  388|  6.46M|        (tstate->datastack_top != NULL && tstate->datastack_limit != NULL)
  389|  6.46M|    );
  390|  6.46M|    return tstate->datastack_top != NULL &&
  ------------------
  |  Branch (390:12): [True: 6.46M, False: 0]
  ------------------
  391|  6.46M|        size < tstate->datastack_limit - tstate->datastack_top;
  ------------------
  |  Branch (391:9): [True: 6.46M, False: 0]
  ------------------
  392|  6.46M|}
ceval.c:_PyFrame_PushUnchecked:
  405|  6.46M|{
  406|  6.46M|    CALL_STAT_INC(frames_pushed);
  ------------------
  |  |   76|  6.46M|#define CALL_STAT_INC(name) ((void)0)
  ------------------
  407|  6.46M|    PyFunctionObject *func_obj = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(func);
  408|  6.46M|    PyCodeObject *code = (PyCodeObject *)func_obj->func_code;
  409|  6.46M|    _PyInterpreterFrame *new_frame = (_PyInterpreterFrame *)tstate->datastack_top;
  410|  6.46M|    tstate->datastack_top += code->co_framesize;
  411|  6.46M|    assert(tstate->datastack_top < tstate->datastack_limit);
  ------------------
  |  Branch (411:5): [True: 6.46M, False: 0]
  ------------------
  412|  6.46M|    _PyFrame_Initialize(tstate, new_frame, func, NULL, code, null_locals_from,
  413|  6.46M|                        previous);
  414|  6.46M|    return new_frame;
  415|  6.46M|}
ceval.c:_PyFrame_PushTrampolineUnchecked:
  421|  1.21k|{
  422|  1.21k|    CALL_STAT_INC(frames_pushed);
  ------------------
  |  |   76|  1.21k|#define CALL_STAT_INC(name) ((void)0)
  ------------------
  423|  1.21k|    _PyInterpreterFrame *frame = (_PyInterpreterFrame *)tstate->datastack_top;
  424|  1.21k|    tstate->datastack_top += code->co_framesize;
  425|  1.21k|    assert(tstate->datastack_top < tstate->datastack_limit);
  ------------------
  |  Branch (425:5): [True: 1.21k, False: 0]
  ------------------
  426|  1.21k|    frame->previous = previous;
  427|  1.21k|    frame->f_funcobj = PyStackRef_None;
  ------------------
  |  |  485|  1.21k|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  ------------------
  |  |  |  |   55|  1.21k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  428|  1.21k|    frame->f_executable = PyStackRef_FromPyObjectNew(code);
  ------------------
  |  |  611|  1.21k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|       |#ifdef Py_DEBUG
  430|       |    frame->f_builtins = NULL;
  431|       |    frame->f_globals = NULL;
  432|       |#endif
  433|  1.21k|    frame->f_locals = NULL;
  434|  1.21k|    assert(stackdepth <= code->co_stacksize);
  ------------------
  |  Branch (434:5): [True: 1.21k, False: 0]
  ------------------
  435|  1.21k|    frame->stackpointer = frame->localsplus + code->co_nlocalsplus + stackdepth;
  436|  1.21k|    frame->frame_obj = NULL;
  437|       |#ifdef Py_GIL_DISABLED
  438|       |    _PyFrame_InitializeTLBC(tstate, frame, code);
  439|       |#else
  440|  1.21k|    frame->instr_ptr = _PyCode_CODE(code);
  ------------------
  |  |   16|  1.21k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  1.21k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  441|  1.21k|#endif
  442|  1.21k|    frame->owner = FRAME_OWNED_BY_THREAD;
  443|  1.21k|    frame->visited = 0;
  444|       |#ifdef Py_DEBUG
  445|       |    frame->stackpointer_valid = 1;
  446|       |    frame->lltrace = 0;
  447|       |#endif
  448|  1.21k|    frame->return_offset = 0;
  449|  1.21k|    return frame;
  450|  1.21k|}
ceval.c:_PyFrame_GetBytecode:
   60|  26.8M|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|  26.8M|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|  26.8M|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  26.8M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|  26.8M|#endif
   69|  26.8M|}
ceval.c:_PyFrame_StackPush:
  118|  45.6k|static inline void _PyFrame_StackPush(_PyInterpreterFrame *f, _PyStackRef value) {
  119|  45.6k|    *f->stackpointer = value;
  120|  45.6k|    f->stackpointer++;
  121|  45.6k|}
ceval.c:_PyFrame_Stackbase:
  102|  6.86M|static inline _PyStackRef *_PyFrame_Stackbase(_PyInterpreterFrame *f) {
  103|  6.86M|    return (f->localsplus + _PyFrame_GetCode(f)->co_nlocalsplus);
  104|  6.86M|}
ceval.c:_PyFrame_IsIncomplete:
  294|   328k|{
  295|   328k|    if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) {
  ------------------
  |  Branch (295:9): [True: 242k, False: 86.4k]
  ------------------
  296|   242k|        return true;
  297|   242k|    }
  298|  86.4k|    return frame->owner != FRAME_OWNED_BY_GENERATOR &&
  ------------------
  |  Branch (298:12): [True: 86.4k, False: 0]
  ------------------
  299|  86.4k|           frame->instr_ptr < _PyFrame_GetBytecode(frame) +
  ------------------
  |  Branch (299:12): [True: 0, False: 86.4k]
  ------------------
  300|  86.4k|                                  _PyFrame_GetCode(frame)->_co_firsttraceable;
  301|   328k|}
ceval.c:_PyFrame_Copy:
  135|  1.24k|{
  136|  1.24k|    dest->f_executable = PyStackRef_MakeHeapSafe(src->f_executable);
  137|       |    // Don't leave a dangling pointer to the old frame when creating generators
  138|       |    // and coroutines:
  139|  1.24k|    dest->previous = NULL;
  140|  1.24k|    dest->f_funcobj = PyStackRef_MakeHeapSafe(src->f_funcobj);
  141|  1.24k|    dest->f_globals = src->f_globals;
  142|  1.24k|    dest->f_builtins = src->f_builtins;
  143|  1.24k|    dest->f_locals = src->f_locals;
  144|  1.24k|    dest->frame_obj = src->frame_obj;
  145|  1.24k|    dest->instr_ptr = src->instr_ptr;
  146|       |#ifdef Py_GIL_DISABLED
  147|       |    dest->tlbc_index = src->tlbc_index;
  148|       |#endif
  149|  1.24k|    assert(src->stackpointer != NULL);
  ------------------
  |  Branch (149:5): [True: 1.24k, False: 0]
  ------------------
  150|  1.24k|    int stacktop = (int)(src->stackpointer - src->localsplus);
  151|  1.24k|    assert(stacktop >= 0);
  ------------------
  |  Branch (151:5): [True: 1.24k, False: 0]
  ------------------
  152|  1.24k|    dest->stackpointer = dest->localsplus + stacktop;
  153|       |    // visited is GC bookkeeping for the current stack walk, not frame state.
  154|  1.24k|    dest->visited = 0;
  155|       |#ifdef Py_DEBUG
  156|       |    dest->stackpointer_valid =  src->stackpointer_valid;
  157|       |    dest->lltrace = src->lltrace;
  158|       |#endif
  159|  6.11k|    for (int i = 0; i < stacktop; i++) {
  ------------------
  |  Branch (159:21): [True: 4.86k, False: 1.24k]
  ------------------
  160|  4.86k|        dest->localsplus[i] = PyStackRef_MakeHeapSafe(src->localsplus[i]);
  161|  4.86k|    }
  162|  1.24k|}
ceval.c:_PyFrame_GetFrameObject:
  345|  42.9k|{
  346|       |
  347|  42.9k|    assert(!_PyFrame_IsIncomplete(frame));
  ------------------
  |  Branch (347:5): [True: 42.9k, False: 0]
  ------------------
  348|  42.9k|    PyFrameObject *res = (PyFrameObject*)FT_ATOMIC_LOAD_PTR_ACQUIRE(frame->frame_obj);
  ------------------
  |  |  150|  42.9k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  349|  42.9k|    if (res != NULL) {
  ------------------
  |  Branch (349:9): [True: 22.5k, False: 20.3k]
  ------------------
  350|  22.5k|        return res;
  351|  22.5k|    }
  352|  20.3k|    return _PyFrame_MakeAndSetFrameObject(frame);
  353|  42.9k|}
ceval.c:_PyFrame_StackPop:
  112|   120k|static inline _PyStackRef _PyFrame_StackPop(_PyInterpreterFrame *f) {
  113|   120k|    assert(f->stackpointer > _PyFrame_Stackbase(f));
  ------------------
  |  Branch (113:5): [True: 120k, False: 0]
  ------------------
  114|   120k|    f->stackpointer--;
  115|   120k|    return *f->stackpointer;
  116|   120k|}
ceval.c:_PyFrame_Initialize:
  192|  6.66M|{
  193|  6.66M|    frame->previous = previous;
  194|  6.66M|    frame->f_funcobj = func;
  195|  6.66M|    frame->f_executable = PyStackRef_FromPyObjectNew(code);
  ------------------
  |  |  611|  6.66M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  6.66M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.66M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  196|  6.66M|    PyFunctionObject *func_obj = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(func);
  197|  6.66M|    frame->f_builtins = func_obj->func_builtins;
  198|  6.66M|    frame->f_globals = func_obj->func_globals;
  199|  6.66M|    frame->f_locals = locals;
  200|  6.66M|    frame->stackpointer = frame->localsplus + code->co_nlocalsplus;
  201|  6.66M|    frame->frame_obj = NULL;
  202|       |#ifdef Py_GIL_DISABLED
  203|       |    _PyFrame_InitializeTLBC(tstate, frame, code);
  204|       |#else
  205|  6.66M|    (void)tstate;
  206|  6.66M|    frame->instr_ptr = _PyCode_CODE(code);
  ------------------
  |  |   16|  6.66M|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  6.66M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  207|  6.66M|#endif
  208|  6.66M|    frame->return_offset = 0;
  209|  6.66M|    frame->owner = FRAME_OWNED_BY_THREAD;
  210|  6.66M|    frame->visited = 0;
  211|       |#ifdef Py_DEBUG
  212|       |    frame->stackpointer_valid = 1;
  213|       |    frame->lltrace = 0;
  214|       |#endif
  215|       |
  216|  17.1M|    for (int i = null_locals_from; i < code->co_nlocalsplus; i++) {
  ------------------
  |  Branch (216:36): [True: 10.4M, False: 6.66M]
  ------------------
  217|  10.4M|        frame->localsplus[i] = PyStackRef_NULL;
  218|  10.4M|    }
  219|  6.66M|}
ceval.c:_PyThreadState_GetFrame:
  314|  52.2k|{
  315|  52.2k|    return _PyFrame_GetFirstComplete(tstate->current_frame);
  316|  52.2k|}
ceval.c:_PyFrame_GetFirstComplete:
  305|  52.2k|{
  306|   103k|    while (frame && _PyFrame_IsIncomplete(frame)) {
  ------------------
  |  Branch (306:12): [True: 52.2k, False: 51.6k]
  |  Branch (306:21): [True: 51.6k, False: 593]
  ------------------
  307|  51.6k|        frame = frame->previous;
  308|  51.6k|    }
  309|  52.2k|    return frame;
  310|  52.2k|}
frame.c:_PyFrame_GetCode:
   21|  51.7k|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|  51.7k|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 51.7k, False: 0]
  ------------------
   23|  51.7k|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|  51.7k|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 51.7k, False: 0]
  ------------------
   25|  51.7k|    return (PyCodeObject *)executable;
   26|  51.7k|}
frame.c:_PyFrame_Copy:
  135|  4.21k|{
  136|  4.21k|    dest->f_executable = PyStackRef_MakeHeapSafe(src->f_executable);
  137|       |    // Don't leave a dangling pointer to the old frame when creating generators
  138|       |    // and coroutines:
  139|  4.21k|    dest->previous = NULL;
  140|  4.21k|    dest->f_funcobj = PyStackRef_MakeHeapSafe(src->f_funcobj);
  141|  4.21k|    dest->f_globals = src->f_globals;
  142|  4.21k|    dest->f_builtins = src->f_builtins;
  143|  4.21k|    dest->f_locals = src->f_locals;
  144|  4.21k|    dest->frame_obj = src->frame_obj;
  145|  4.21k|    dest->instr_ptr = src->instr_ptr;
  146|       |#ifdef Py_GIL_DISABLED
  147|       |    dest->tlbc_index = src->tlbc_index;
  148|       |#endif
  149|  4.21k|    assert(src->stackpointer != NULL);
  ------------------
  |  Branch (149:5): [True: 4.21k, False: 0]
  ------------------
  150|  4.21k|    int stacktop = (int)(src->stackpointer - src->localsplus);
  151|  4.21k|    assert(stacktop >= 0);
  ------------------
  |  Branch (151:5): [True: 4.21k, False: 0]
  ------------------
  152|  4.21k|    dest->stackpointer = dest->localsplus + stacktop;
  153|       |    // visited is GC bookkeeping for the current stack walk, not frame state.
  154|  4.21k|    dest->visited = 0;
  155|       |#ifdef Py_DEBUG
  156|       |    dest->stackpointer_valid =  src->stackpointer_valid;
  157|       |    dest->lltrace = src->lltrace;
  158|       |#endif
  159|  34.5k|    for (int i = 0; i < stacktop; i++) {
  ------------------
  |  Branch (159:21): [True: 30.2k, False: 4.21k]
  ------------------
  160|  30.2k|        dest->localsplus[i] = PyStackRef_MakeHeapSafe(src->localsplus[i]);
  161|  30.2k|    }
  162|  4.21k|}
frame.c:_PyFrame_IsIncomplete:
  294|  17.3k|{
  295|  17.3k|    if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) {
  ------------------
  |  Branch (295:9): [True: 3.02k, False: 14.3k]
  ------------------
  296|  3.02k|        return true;
  297|  3.02k|    }
  298|  14.3k|    return frame->owner != FRAME_OWNED_BY_GENERATOR &&
  ------------------
  |  Branch (298:12): [True: 14.3k, False: 0]
  ------------------
  299|  14.3k|           frame->instr_ptr < _PyFrame_GetBytecode(frame) +
  ------------------
  |  Branch (299:12): [True: 0, False: 14.3k]
  ------------------
  300|  14.3k|                                  _PyFrame_GetCode(frame)->_co_firsttraceable;
  301|  17.3k|}
frame.c:_PyFrame_GetFirstComplete:
  305|  4.21k|{
  306|  7.24k|    while (frame && _PyFrame_IsIncomplete(frame)) {
  ------------------
  |  Branch (306:12): [True: 5.98k, False: 1.26k]
  |  Branch (306:21): [True: 3.02k, False: 2.95k]
  ------------------
  307|  3.02k|        frame = frame->previous;
  308|  3.02k|    }
  309|  4.21k|    return frame;
  310|  4.21k|}
frame.c:_PyFrame_GetFrameObject:
  345|  2.95k|{
  346|       |
  347|  2.95k|    assert(!_PyFrame_IsIncomplete(frame));
  ------------------
  |  Branch (347:5): [True: 2.95k, False: 0]
  ------------------
  348|  2.95k|    PyFrameObject *res = (PyFrameObject*)FT_ATOMIC_LOAD_PTR_ACQUIRE(frame->frame_obj);
  ------------------
  |  |  150|  2.95k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  349|  2.95k|    if (res != NULL) {
  ------------------
  |  Branch (349:9): [True: 225, False: 2.73k]
  ------------------
  350|    225|        return res;
  351|    225|    }
  352|  2.73k|    return _PyFrame_MakeAndSetFrameObject(frame);
  353|  2.95k|}
frame.c:_PyFrame_GetBytecode:
   60|  14.3k|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|  14.3k|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|  14.3k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  14.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|  14.3k|#endif
   69|  14.3k|}
gc.c:_PyFrame_GetLocalsArray:
  226|     10|{
  227|     10|    return frame->localsplus;
  228|     10|}
pystate.c:_PyThreadState_HasStackSpace:
  384|   201k|{
  385|   201k|    assert(
  ------------------
  |  Branch (385:5): [True: 2, False: 201k]
  |  Branch (385:5): [True: 2, False: 0]
  |  Branch (385:5): [True: 201k, False: 0]
  |  Branch (385:5): [True: 201k, False: 0]
  ------------------
  386|   201k|        (tstate->datastack_top == NULL && tstate->datastack_limit == NULL)
  387|   201k|        ||
  388|   201k|        (tstate->datastack_top != NULL && tstate->datastack_limit != NULL)
  389|   201k|    );
  390|   201k|    return tstate->datastack_top != NULL &&
  ------------------
  |  Branch (390:12): [True: 201k, False: 2]
  ------------------
  391|   201k|        size < tstate->datastack_limit - tstate->datastack_top;
  ------------------
  |  Branch (391:9): [True: 201k, False: 0]
  ------------------
  392|   201k|}
sysmodule.c:_PyFrame_IsIncomplete:
  294|      6|{
  295|      6|    if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) {
  ------------------
  |  Branch (295:9): [True: 0, False: 6]
  ------------------
  296|      0|        return true;
  297|      0|    }
  298|      6|    return frame->owner != FRAME_OWNED_BY_GENERATOR &&
  ------------------
  |  Branch (298:12): [True: 6, False: 0]
  ------------------
  299|      6|           frame->instr_ptr < _PyFrame_GetBytecode(frame) +
  ------------------
  |  Branch (299:12): [True: 0, False: 6]
  ------------------
  300|      6|                                  _PyFrame_GetCode(frame)->_co_firsttraceable;
  301|      6|}
sysmodule.c:_PyFrame_GetBytecode:
   60|      6|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|      6|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|      6|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|      6|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|      6|#endif
   69|      6|}
sysmodule.c:_PyFrame_GetCode:
   21|     12|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|     12|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 12, False: 0]
  ------------------
   23|     12|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|     12|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 12, False: 0]
  ------------------
   25|     12|    return (PyCodeObject *)executable;
   26|     12|}
sysmodule.c:_PyFrame_GetFrameObject:
  345|      2|{
  346|       |
  347|      2|    assert(!_PyFrame_IsIncomplete(frame));
  ------------------
  |  Branch (347:5): [True: 2, False: 0]
  ------------------
  348|      2|    PyFrameObject *res = (PyFrameObject*)FT_ATOMIC_LOAD_PTR_ACQUIRE(frame->frame_obj);
  ------------------
  |  |  150|      2|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  349|      2|    if (res != NULL) {
  ------------------
  |  Branch (349:9): [True: 0, False: 2]
  ------------------
  350|      0|        return res;
  351|      0|    }
  352|      2|    return _PyFrame_MakeAndSetFrameObject(frame);
  353|      2|}
traceback.c:_PyFrame_GetCode:
   21|  42.9k|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|  42.9k|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 42.9k, False: 0]
  ------------------
   23|  42.9k|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|  42.9k|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 42.9k, False: 0]
  ------------------
   25|  42.9k|    return (PyCodeObject *)executable;
   26|  42.9k|}
traceback.c:_PyFrame_GetBytecode:
   60|  42.9k|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|  42.9k|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|  42.9k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  42.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|  42.9k|#endif
   69|  42.9k|}
genobject.c:_PyFrame_StackPush:
  118|  50.7k|static inline void _PyFrame_StackPush(_PyInterpreterFrame *f, _PyStackRef value) {
  119|  50.7k|    *f->stackpointer = value;
  120|  50.7k|    f->stackpointer++;
  121|  50.7k|}
genobject.c:_PyFrame_NumSlotsForCodeObject:
  127|  1.24k|{
  128|       |    /* This function needs to remain in sync with the calculation of
  129|       |     * co_framesize in Tools/build/deepfreeze.py */
  130|  1.24k|    assert(code->co_framesize >= FRAME_SPECIALS_SIZE);
  ------------------
  |  Branch (130:5): [True: 1.24k, False: 0]
  ------------------
  131|  1.24k|    return code->co_framesize - FRAME_SPECIALS_SIZE;
  ------------------
  |  |  123|  1.24k|#define FRAME_SPECIALS_SIZE ((int)((sizeof(_PyInterpreterFrame)-1)/sizeof(PyObject *)))
  ------------------
  132|  1.24k|}
genobject.c:_PyFrame_GetCode:
   21|     20|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|     20|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 20, False: 0]
  ------------------
   23|     20|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|     20|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 20, False: 0]
  ------------------
   25|     20|    return (PyCodeObject *)executable;
   26|     20|}
frameobject.c:_PyFrame_GetLocalsArray:
  226|  4.21k|{
  227|  4.21k|    return frame->localsplus;
  228|  4.21k|}
frameobject.c:_PyFrame_IsIncomplete:
  294|    370|{
  295|    370|    if (frame->owner >= FRAME_OWNED_BY_INTERPRETER) {
  ------------------
  |  Branch (295:9): [True: 0, False: 370]
  ------------------
  296|      0|        return true;
  297|      0|    }
  298|    370|    return frame->owner != FRAME_OWNED_BY_GENERATOR &&
  ------------------
  |  Branch (298:12): [True: 370, False: 0]
  ------------------
  299|    370|           frame->instr_ptr < _PyFrame_GetBytecode(frame) +
  ------------------
  |  Branch (299:12): [True: 0, False: 370]
  ------------------
  300|    370|                                  _PyFrame_GetCode(frame)->_co_firsttraceable;
  301|    370|}
frameobject.c:_PyFrame_GetCode:
   21|  1.14k|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|  1.14k|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 1.14k, False: 0]
  ------------------
   23|  1.14k|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|  1.14k|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 1.14k, False: 0]
  ------------------
   25|  1.14k|    return (PyCodeObject *)executable;
   26|  1.14k|}
frameobject.c:_PyFrame_GetBytecode:
   60|    370|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|    370|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|    370|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|    370|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|    370|#endif
   69|    370|}
lazyimportobject.c:_PyFrame_GetCode:
   21|     26|static inline PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *f) {
   22|     26|    assert(!PyStackRef_IsNull(f->f_executable));
  ------------------
  |  Branch (22:5): [True: 26, False: 0]
  ------------------
   23|     26|    PyObject *executable = PyStackRef_AsPyObjectBorrow(f->f_executable);
   24|     26|    assert(PyCode_Check(executable));
  ------------------
  |  Branch (24:5): [True: 26, False: 0]
  ------------------
   25|     26|    return (PyCodeObject *)executable;
   26|     26|}
lazyimportobject.c:_PyFrame_GetBytecode:
   60|     13|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    PyCodeObject *co = _PyFrame_GetCode(f);
   63|       |    _PyCodeArray *tlbc = _PyCode_GetTLBCArray(co);
   64|       |    assert(f->tlbc_index >= 0 && f->tlbc_index < tlbc->size);
   65|       |    return (_Py_CODEUNIT *)tlbc->entries[f->tlbc_index];
   66|       |#else
   67|     13|    return _PyCode_CODE(_PyFrame_GetCode(f));
  ------------------
  |  |   16|     13|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|     13|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   68|     13|#endif
   69|     13|}

listobject.c:_PyList_AppendTakeRef:
   38|  4.03M|{
   39|  4.03M|    assert(self != NULL && newitem != NULL);
  ------------------
  |  Branch (39:5): [True: 4.03M, False: 0]
  |  Branch (39:5): [True: 4.03M, False: 0]
  ------------------
   40|  4.03M|    assert(PyList_Check(self));
  ------------------
  |  Branch (40:5): [True: 4.03M, False: 0]
  ------------------
   41|  4.03M|    Py_ssize_t len = Py_SIZE(self);
  ------------------
  |  |  214|  4.03M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.03M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.03M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|  4.03M|    Py_ssize_t allocated = self->allocated;
   43|  4.03M|    assert((size_t)len + 1 < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (43:5): [True: 4.03M, False: 0]
  ------------------
   44|  4.03M|    if (allocated > len) {
  ------------------
  |  Branch (44:9): [True: 3.77M, False: 263k]
  ------------------
   45|       |#ifdef Py_GIL_DISABLED
   46|       |        _Py_atomic_store_ptr_release(&self->ob_item[len], newitem);
   47|       |#else
   48|  3.77M|        PyList_SET_ITEM(self, len, newitem);
  ------------------
  |  |   50|  3.77M|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  3.77M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.77M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  3.77M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.77M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|  3.77M|#endif
   50|  3.77M|        Py_SET_SIZE(self, len + 1);
  ------------------
  |  |  216|  3.77M|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  3.77M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.77M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|  3.77M|        return 0;
   52|  3.77M|    }
   53|   263k|    return _PyList_AppendTakeRefListResize(self, newitem);
   54|  4.03M|}
tupleobject.c:_Py_memory_repeat:
   59|  22.9k|{
   60|  22.9k|    assert(len_src > 0);
  ------------------
  |  Branch (60:5): [True: 22.9k, False: 0]
  ------------------
   61|  22.9k|    Py_ssize_t copied = len_src;
   62|   177k|    while (copied < len_dest) {
  ------------------
  |  Branch (62:12): [True: 154k, False: 22.9k]
  ------------------
   63|   154k|        Py_ssize_t bytes_to_copy = Py_MIN(copied, len_dest - copied);
  ------------------
  |  |  120|   154k|       __extension__ \
  |  |  121|   154k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   154k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|   154k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   154k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|   154k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 131k, False: 22.9k]
  |  |  ------------------
  ------------------
   64|   154k|        memcpy(dest + copied, dest, (size_t)bytes_to_copy);
   65|   154k|        copied += bytes_to_copy;
   66|   154k|    }
   67|  22.9k|}
ceval.c:_PyList_AppendTakeRef:
   38|  1.16M|{
   39|  1.16M|    assert(self != NULL && newitem != NULL);
  ------------------
  |  Branch (39:5): [True: 1.16M, False: 0]
  |  Branch (39:5): [True: 1.16M, False: 0]
  ------------------
   40|  1.16M|    assert(PyList_Check(self));
  ------------------
  |  Branch (40:5): [True: 1.16M, False: 0]
  ------------------
   41|  1.16M|    Py_ssize_t len = Py_SIZE(self);
  ------------------
  |  |  214|  1.16M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.16M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.16M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|  1.16M|    Py_ssize_t allocated = self->allocated;
   43|  1.16M|    assert((size_t)len + 1 < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (43:5): [True: 1.16M, False: 0]
  ------------------
   44|  1.16M|    if (allocated > len) {
  ------------------
  |  Branch (44:9): [True: 770k, False: 398k]
  ------------------
   45|       |#ifdef Py_GIL_DISABLED
   46|       |        _Py_atomic_store_ptr_release(&self->ob_item[len], newitem);
   47|       |#else
   48|   770k|        PyList_SET_ITEM(self, len, newitem);
  ------------------
  |  |   50|   770k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   770k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   770k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   770k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   770k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|   770k|#endif
   50|   770k|        Py_SET_SIZE(self, len + 1);
  ------------------
  |  |  216|   770k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   770k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   770k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|   770k|        return 0;
   52|   770k|    }
   53|   398k|    return _PyList_AppendTakeRefListResize(self, newitem);
   54|  1.16M|}
abstract.c:_PyList_AppendTakeRef:
   38|    165|{
   39|    165|    assert(self != NULL && newitem != NULL);
  ------------------
  |  Branch (39:5): [True: 165, False: 0]
  |  Branch (39:5): [True: 165, False: 0]
  ------------------
   40|    165|    assert(PyList_Check(self));
  ------------------
  |  Branch (40:5): [True: 165, False: 0]
  ------------------
   41|    165|    Py_ssize_t len = Py_SIZE(self);
  ------------------
  |  |  214|    165|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    165|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    165|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|    165|    Py_ssize_t allocated = self->allocated;
   43|    165|    assert((size_t)len + 1 < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (43:5): [True: 165, False: 0]
  ------------------
   44|    165|    if (allocated > len) {
  ------------------
  |  Branch (44:9): [True: 157, False: 8]
  ------------------
   45|       |#ifdef Py_GIL_DISABLED
   46|       |        _Py_atomic_store_ptr_release(&self->ob_item[len], newitem);
   47|       |#else
   48|    157|        PyList_SET_ITEM(self, len, newitem);
  ------------------
  |  |   50|    157|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    157|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    157|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    157|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    157|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|    157|#endif
   50|    157|        Py_SET_SIZE(self, len + 1);
  ------------------
  |  |  216|    157|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|    157|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    157|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|    157|        return 0;
   52|    157|    }
   53|      8|    return _PyList_AppendTakeRefListResize(self, newitem);
   54|    165|}
bytesobject.c:_PyList_AppendTakeRef:
   38|   187k|{
   39|   187k|    assert(self != NULL && newitem != NULL);
  ------------------
  |  Branch (39:5): [True: 187k, False: 0]
  |  Branch (39:5): [True: 187k, False: 0]
  ------------------
   40|   187k|    assert(PyList_Check(self));
  ------------------
  |  Branch (40:5): [True: 187k, False: 0]
  ------------------
   41|   187k|    Py_ssize_t len = Py_SIZE(self);
  ------------------
  |  |  214|   187k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   187k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   187k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|   187k|    Py_ssize_t allocated = self->allocated;
   43|   187k|    assert((size_t)len + 1 < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (43:5): [True: 187k, False: 0]
  ------------------
   44|   187k|    if (allocated > len) {
  ------------------
  |  Branch (44:9): [True: 183k, False: 4.45k]
  ------------------
   45|       |#ifdef Py_GIL_DISABLED
   46|       |        _Py_atomic_store_ptr_release(&self->ob_item[len], newitem);
   47|       |#else
   48|   183k|        PyList_SET_ITEM(self, len, newitem);
  ------------------
  |  |   50|   183k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|   183k|#endif
   50|   183k|        Py_SET_SIZE(self, len + 1);
  ------------------
  |  |  216|   183k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   183k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|   183k|        return 0;
   52|   183k|    }
   53|  4.45k|    return _PyList_AppendTakeRefListResize(self, newitem);
   54|   187k|}

pystate.c:llist_init:
   55|      8|{
   56|      8|    head->next = head;
   57|      8|    head->prev = head;
   58|      8|}
_threadmodule.c:llist_init:
   55|      2|{
   56|      2|    head->next = head;
   57|      2|    head->prev = head;
   58|      2|}

getargs.c:_PyOnceFlag_CallOnce:
  157|  2.26k|{
  158|  2.26k|    if (_Py_atomic_load_uint8(&flag->v) == _Py_ONCE_INITIALIZED) {
  ------------------
  |  |   18|  2.26k|#define _Py_ONCE_INITIALIZED 4
  ------------------
  |  Branch (158:9): [True: 2.25k, False: 4]
  ------------------
  159|  2.25k|        return 0;
  160|  2.25k|    }
  161|      4|    return _PyOnceFlag_CallOnceSlow(flag, fn, arg);
  162|  2.26k|}
pystate.c:PyMutex_LockFlags:
   67|      4|{
   68|      4|    uint8_t expected = _Py_UNLOCKED;
  ------------------
  |  |    9|      4|#define _Py_UNLOCKED    0
  ------------------
   69|      4|    if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &expected, _Py_LOCKED)) {
  ------------------
  |  |   10|      4|#define _Py_LOCKED      1
  ------------------
  |  Branch (69:9): [True: 0, False: 4]
  ------------------
   70|      0|        _PyMutex_LockTimed(m, -1, flags);
   71|      0|    }
   72|      4|}
Python-ast.c:_PyOnceFlag_CallOnce:
  157|  1.89k|{
  158|  1.89k|    if (_Py_atomic_load_uint8(&flag->v) == _Py_ONCE_INITIALIZED) {
  ------------------
  |  |   18|  1.89k|#define _Py_ONCE_INITIALIZED 4
  ------------------
  |  Branch (158:9): [True: 1.89k, False: 1]
  ------------------
  159|  1.89k|        return 0;
  160|  1.89k|    }
  161|      1|    return _PyOnceFlag_CallOnceSlow(flag, fn, arg);
  162|  1.89k|}

longobject.c:_PyLong_InitTag:
  292|  1.24M|{
  293|  1.24M|    assert(PyLong_Check(op));
  ------------------
  |  Branch (293:5): [True: 1.24M, False: 0]
  ------------------
  294|  1.24M|    op->long_value.lv_tag = SIGN_ZERO; /* non-immortal zero */
  ------------------
  |  |  173|  1.24M|#define SIGN_ZERO 1
  ------------------
  295|  1.24M|}
longobject.c:_PyLong_GetZero:
   73|  78.6k|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|  78.6k|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|  78.6k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  78.6k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|  78.6k|#define _PY_NSMALLNEGINTS           5
  ------------------
longobject.c:_PyLong_SetSignAndDigitCount:
  302|  13.8M|{
  303|  13.8M|    assert(size >= 0);
  ------------------
  |  Branch (303:5): [True: 13.8M, False: 0]
  ------------------
  304|  13.8M|    assert(-1 <= sign && sign <= 1);
  ------------------
  |  Branch (304:5): [True: 13.8M, False: 0]
  |  Branch (304:5): [True: 13.8M, False: 0]
  ------------------
  305|  13.8M|    assert(sign != 0 || size == 0);
  ------------------
  |  Branch (305:5): [True: 13.8M, False: 39.8k]
  |  Branch (305:5): [True: 39.8k, False: 0]
  ------------------
  306|  13.8M|    assert(!_PyLong_IsSmallInt(op));
  ------------------
  |  Branch (306:5): [True: 13.8M, False: 0]
  ------------------
  307|  13.8M|    op->long_value.lv_tag = TAG_FROM_SIGN_AND_SIZE(sign, size);
  ------------------
  |  |  298|  13.8M|    ((uintptr_t)(1 - (sign)) | ((uintptr_t)(size) << NON_SIZE_BITS))
  |  |  ------------------
  |  |  |  |  175|  13.8M|#define NON_SIZE_BITS 3
  |  |  ------------------
  ------------------
  308|  13.8M|}
longobject.c:_PyLong_CompactSign:
  268|   327k|{
  269|   327k|    assert(PyLong_Check(op));
  ------------------
  |  Branch (269:5): [True: 327k, False: 0]
  ------------------
  270|   327k|    assert(_PyLong_IsCompact((PyLongObject *)op));
  ------------------
  |  Branch (270:5): [True: 327k, False: 0]
  ------------------
  271|   327k|    return 1 - (op->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|   327k|#define SIGN_MASK 3
  ------------------
  272|   327k|}
longobject.c:_PyLong_NonCompactSign:
  276|  11.6M|{
  277|  11.6M|    assert(PyLong_Check(op));
  ------------------
  |  Branch (277:5): [True: 11.6M, False: 0]
  ------------------
  278|  11.6M|    assert(!_PyLong_IsCompact((PyLongObject *)op));
  ------------------
  |  Branch (278:5): [True: 11.6M, False: 0]
  ------------------
  279|  11.6M|    return 1 - (op->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|  11.6M|#define SIGN_MASK 3
  ------------------
  280|  11.6M|}
longobject.c:_PyLong_DigitCount:
  252|  22.1M|{
  253|  22.1M|    assert(PyLong_Check(op));
  ------------------
  |  Branch (253:5): [True: 22.1M, False: 0]
  ------------------
  254|  22.1M|    return (Py_ssize_t)(op->long_value.lv_tag >> NON_SIZE_BITS);
  ------------------
  |  |  175|  22.1M|#define NON_SIZE_BITS 3
  ------------------
  255|  22.1M|}
longobject.c:_PyLong_FlipSign:
  322|  88.6k|{
  323|  88.6k|    assert(!_PyLong_IsSmallInt(op));
  ------------------
  |  Branch (323:5): [True: 88.6k, False: 0]
  ------------------
  324|  88.6k|    unsigned int flipped_sign = 2 - (op->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|  88.6k|#define SIGN_MASK 3
  ------------------
  325|  88.6k|    op->long_value.lv_tag &= NON_SIZE_MASK;
  ------------------
  |  |  318|  88.6k|#define NON_SIZE_MASK ~(uintptr_t)((1 << NON_SIZE_BITS) - 1)
  |  |  ------------------
  |  |  |  |  175|  88.6k|#define NON_SIZE_BITS 3
  |  |  ------------------
  ------------------
  326|  88.6k|    op->long_value.lv_tag |= flipped_sign;
  327|  88.6k|}
longobject.c:_PyLong_IsNonNegativeCompact:
  205|  69.7k|_PyLong_IsNonNegativeCompact(const PyLongObject* op) {
  206|  69.7k|    assert(PyLong_Check(op));
  ------------------
  |  Branch (206:5): [True: 69.7k, False: 0]
  ------------------
  207|  69.7k|    return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS));
  ------------------
  |  |  176|  69.7k|#define IMMORTALITY_BIT_MASK (1 << 2)
  ------------------
                  return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS));
  ------------------
  |  |  175|  69.7k|#define NON_SIZE_BITS 3
  ------------------
  208|  69.7k|}
longobject.c:_PyLong_IsNegative:
  225|  1.10M|{
  226|  1.10M|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
  ------------------
  |  |  172|  1.10M|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
  ------------------
  |  |  174|  1.10M|#define SIGN_NEGATIVE 2
  ------------------
  227|  1.10M|}
longobject.c:_PyLong_IsPositive:
  231|   121k|{
  232|   121k|    return (op->long_value.lv_tag & SIGN_MASK) == 0;
  ------------------
  |  |  172|   121k|#define SIGN_MASK 3
  ------------------
  233|   121k|}
longobject.c:_PyLong_IsZero:
  219|  86.5k|{
  220|  86.5k|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  172|  86.5k|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  173|  86.5k|#define SIGN_ZERO 1
  ------------------
  221|  86.5k|}
longobject.c:_PyLong_SetDigitCount:
  312|   141k|{
  313|   141k|    assert(size >= 0);
  ------------------
  |  Branch (313:5): [True: 141k, False: 0]
  ------------------
  314|   141k|    assert(!_PyLong_IsSmallInt(op));
  ------------------
  |  Branch (314:5): [True: 141k, False: 0]
  ------------------
  315|   141k|    op->long_value.lv_tag = (((size_t)size) << NON_SIZE_BITS) | (op->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  175|   141k|#define NON_SIZE_BITS 3
  ------------------
                  op->long_value.lv_tag = (((size_t)size) << NON_SIZE_BITS) | (op->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|   141k|#define SIGN_MASK 3
  ------------------
  316|   141k|}
longobject.c:_PyLong_IsSmallInt:
  238|  27.4M|{
  239|  27.4M|    assert(PyLong_Check(op));
  ------------------
  |  Branch (239:5): [True: 27.4M, False: 0]
  ------------------
  240|  27.4M|    bool is_small_int = (op->long_value.lv_tag & IMMORTALITY_BIT_MASK) != 0;
  ------------------
  |  |  176|  27.4M|#define IMMORTALITY_BIT_MASK (1 << 2)
  ------------------
  241|  27.4M|    if (is_small_int) {
  ------------------
  |  Branch (241:9): [True: 0, False: 27.4M]
  ------------------
  242|      0|        assert(PyLong_CheckExact(op));
  ------------------
  |  Branch (242:9): [True: 0, False: 0]
  ------------------
  243|      0|        assert(_Py_IsImmortal(op));
  ------------------
  |  Branch (243:9): [True: 0, False: 0]
  ------------------
  244|      0|        assert((_PyLong_IsCompact(op)
  ------------------
  |  Branch (244:9): [True: 0, False: 0]
  |  Branch (244:9): [True: 0, False: 0]
  |  Branch (244:9): [True: 0, False: 0]
  ------------------
  245|      0|                && _PY_IS_SMALL_INT(_PyLong_CompactValue(op))));
  246|      0|    }
  247|  27.4M|    return is_small_int;
  248|  27.4M|}
longobject.c:_PyLong_BothAreCompact:
  212|  36.1M|_PyLong_BothAreCompact(const PyLongObject* a, const PyLongObject* b) {
  213|  36.1M|    assert(PyLong_Check(a));
  ------------------
  |  Branch (213:5): [True: 36.1M, False: 0]
  ------------------
  214|  36.1M|    assert(PyLong_Check(b));
  ------------------
  |  Branch (214:5): [True: 36.1M, False: 0]
  ------------------
  215|  36.1M|    return (a->long_value.lv_tag | b->long_value.lv_tag) < (2 << NON_SIZE_BITS);
  ------------------
  |  |  175|  36.1M|#define NON_SIZE_BITS 3
  ------------------
  216|  36.1M|}
longobject.c:_PyLong_SignedDigitCount:
  260|   975k|{
  261|   975k|    assert(PyLong_Check(op));
  ------------------
  |  Branch (261:5): [True: 975k, False: 0]
  ------------------
  262|   975k|    Py_ssize_t sign = 1 - (op->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|   975k|#define SIGN_MASK 3
  ------------------
  263|   975k|    return sign * (Py_ssize_t)(op->long_value.lv_tag >> NON_SIZE_BITS);
  ------------------
  |  |  175|   975k|#define NON_SIZE_BITS 3
  ------------------
  264|   975k|}
longobject.c:_PyLong_SameSign:
  285|  1.94M|{
  286|  1.94M|    return (a->long_value.lv_tag & SIGN_MASK) == (b->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|  1.94M|#define SIGN_MASK 3
  ------------------
                  return (a->long_value.lv_tag & SIGN_MASK) == (b->long_value.lv_tag & SIGN_MASK);
  ------------------
  |  |  172|  1.94M|#define SIGN_MASK 3
  ------------------
  287|  1.94M|}
longobject.c:_PyLong_GetOne:
   78|  15.5k|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   59|  15.5k|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|  15.5k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  15.5k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   98|  15.5k|#define _PY_NSMALLNEGINTS           5
  ------------------
object.c:_PyLong_GetZero:
   73|      2|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|      2|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|      2|#define _PY_NSMALLNEGINTS           5
  ------------------
object.c:_PyLong_GetOne:
   78|      2|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   59|      2|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   98|      2|#define _PY_NSMALLNEGINTS           5
  ------------------
rangeobject.c:_PyLong_GetZero:
   73|    740|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|    740|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|    740|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    740|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|    740|#define _PY_NSMALLNEGINTS           5
  ------------------
rangeobject.c:_PyLong_GetOne:
   78|    820|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   59|    820|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|    820|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    820|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   98|    820|#define _PY_NSMALLNEGINTS           5
  ------------------
rangeobject.c:_PyLong_IsZero:
  219|      9|{
  220|      9|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  172|      9|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  173|      9|#define SIGN_ZERO 1
  ------------------
  221|      9|}
typeobject.c:_PyLong_IsNegative:
  225|    145|{
  226|    145|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
  ------------------
  |  |  172|    145|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
  ------------------
  |  |  174|    145|#define SIGN_NEGATIVE 2
  ------------------
  227|    145|}
_warnings.c:_PyLong_GetZero:
   73|     10|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|     10|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|     10|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     10|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|     10|#define _PY_NSMALLNEGINTS           5
  ------------------
ceval.c:_PyLong_CheckExactAndCompact:
  345|   141M|{
  346|   141M|    return PyLong_CheckExact(op) && _PyLong_IsCompact((const PyLongObject *)op);
  ------------------
  |  |   14|   141M|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|   282M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   141M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   141M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 141M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (346:37): [True: 141M, False: 6.30k]
  ------------------
  347|   141M|}
ceval.c:_PyLong_BothAreCompact:
  212|  34.7M|_PyLong_BothAreCompact(const PyLongObject* a, const PyLongObject* b) {
  213|  34.7M|    assert(PyLong_Check(a));
  ------------------
  |  Branch (213:5): [True: 34.7M, False: 0]
  ------------------
  214|  34.7M|    assert(PyLong_Check(b));
  ------------------
  |  Branch (214:5): [True: 34.7M, False: 0]
  ------------------
  215|  34.7M|    return (a->long_value.lv_tag | b->long_value.lv_tag) < (2 << NON_SIZE_BITS);
  ------------------
  |  |  175|  34.7M|#define NON_SIZE_BITS 3
  ------------------
  216|  34.7M|}
ceval.c:_PyLong_IsNonNegativeCompact:
  205|  12.3M|_PyLong_IsNonNegativeCompact(const PyLongObject* op) {
  206|  12.3M|    assert(PyLong_Check(op));
  ------------------
  |  Branch (206:5): [True: 12.3M, False: 0]
  ------------------
  207|  12.3M|    return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS));
  ------------------
  |  |  176|  12.3M|#define IMMORTALITY_BIT_MASK (1 << 2)
  ------------------
                  return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS));
  ------------------
  |  |  175|  12.3M|#define NON_SIZE_BITS 3
  ------------------
  208|  12.3M|}
ceval.c:_PyLong_DigitCount:
  252|  59.3M|{
  253|  59.3M|    assert(PyLong_Check(op));
  ------------------
  |  Branch (253:5): [True: 59.3M, False: 0]
  ------------------
  254|  59.3M|    return (Py_ssize_t)(op->long_value.lv_tag >> NON_SIZE_BITS);
  ------------------
  |  |  175|  59.3M|#define NON_SIZE_BITS 3
  ------------------
  255|  59.3M|}
ceval.c:_PyLong_IsZero:
  219|  49.8k|{
  220|  49.8k|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  172|  49.8k|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  173|  49.8k|#define SIGN_ZERO 1
  ------------------
  221|  49.8k|}
codegen.c:_PyLong_GetOne:
   78|  2.66k|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   59|  2.66k|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|  2.66k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.66k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   98|  2.66k|#define _PY_NSMALLNEGINTS           5
  ------------------
codegen.c:_PyLong_GetZero:
   73|  2.49k|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|  2.49k|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|  2.49k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.49k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|  2.49k|#define _PY_NSMALLNEGINTS           5
  ------------------
flowgraph.c:_PyLong_IsZero:
  219|   138k|{
  220|   138k|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  172|   138k|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_ZERO;
  ------------------
  |  |  173|   138k|#define SIGN_ZERO 1
  ------------------
  221|   138k|}
flowgraph.c:_PyLong_IsPositive:
  231|  46.3k|{
  232|  46.3k|    return (op->long_value.lv_tag & SIGN_MASK) == 0;
  ------------------
  |  |  172|  46.3k|#define SIGN_MASK 3
  ------------------
  233|  46.3k|}
instrumentation.c:_PyLong_GetZero:
   73|      2|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|      2|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|      2|#define _PY_NSMALLNEGINTS           5
  ------------------
specialize.c:_PyLong_IsNonNegativeCompact:
  205|   352k|_PyLong_IsNonNegativeCompact(const PyLongObject* op) {
  206|   352k|    assert(PyLong_Check(op));
  ------------------
  |  Branch (206:5): [True: 352k, False: 0]
  ------------------
  207|   352k|    return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS));
  ------------------
  |  |  176|   352k|#define IMMORTALITY_BIT_MASK (1 << 2)
  ------------------
                  return ((op->long_value.lv_tag & ~IMMORTALITY_BIT_MASK) <= (1 << NON_SIZE_BITS));
  ------------------
  |  |  175|   352k|#define NON_SIZE_BITS 3
  ------------------
  208|   352k|}
specialize.c:_PyLong_CheckExactAndCompact:
  345|  1.08k|{
  346|  1.08k|    return PyLong_CheckExact(op) && _PyLong_IsCompact((const PyLongObject *)op);
  ------------------
  |  |   14|  1.08k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  2.16k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.06k, False: 13]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (346:37): [True: 634, False: 433]
  ------------------
  347|  1.08k|}
textio.c:_PyLong_GetZero:
   73|      6|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   59|      6|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; }
  ------------------
  |  |   98|      6|#define _PY_NSMALLNEGINTS           5
  ------------------
abstract.c:_PyLong_IsNegative:
  225|    466|{
  226|    466|    return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
  ------------------
  |  |  172|    466|#define SIGN_MASK 3
  ------------------
                  return (op->long_value.lv_tag & SIGN_MASK) == SIGN_NEGATIVE;
  ------------------
  |  |  174|    466|#define SIGN_NEGATIVE 2
  ------------------
  227|    466|}
bytesobject.c:_PyLong_FromUnsignedChar:
   81|   622k|{
   82|   622k|    return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i];
  ------------------
  |  |   59|   622k|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|   622k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   622k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i];
  ------------------
  |  |   98|   622k|#define _PY_NSMALLNEGINTS           5
  ------------------
   83|   622k|}
enumobject.c:_PyLong_GetOne:
   78|  37.5k|{ return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   59|  37.5k|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|  37.5k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  37.5k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; }
  ------------------
  |  |   98|  37.5k|#define _PY_NSMALLNEGINTS           5
  ------------------

obmalloc.c:_PyAnnotateMemoryMap:
   39|  1.73k|{
   40|  1.73k|    return 0;
   41|  1.73k|}

moduleobject.c:_PyModule_GetDefOrNull:
   48|     43|static inline PyModuleDef *_PyModule_GetDefOrNull(PyObject *arg) {
   49|     43|    PyModuleObject *mod = _PyModule_CAST(arg);
  ------------------
  |  |   46|     43|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (49:27): [True: 43, False: 0]
  ------------------
   50|     43|    if (mod->md_token_is_def) {
  ------------------
  |  Branch (50:9): [True: 43, False: 0]
  ------------------
   51|     43|        return (PyModuleDef *)mod->md_token;
   52|     43|    }
   53|      0|    return NULL;
   54|     43|}
moduleobject.c:_PyModule_GetDict:
   67|    821|static inline PyObject* _PyModule_GetDict(PyObject *mod) {
   68|    821|    PyObject *dict = _PyModule_CAST(mod)->md_dict;
  ------------------
  |  |   46|    821|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    821|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (68:22): [True: 821, False: 0]
  ------------------
   69|       |    // _PyModule_GetDict(mod) must not be used after calling module_clear(mod)
   70|    821|    assert(dict != NULL);
  ------------------
  |  Branch (70:5): [True: 821, False: 0]
  ------------------
   71|    821|    return dict;  // borrowed reference
   72|    821|}
moduleobject.c:_PyModule_GetState:
   63|    162|static inline void* _PyModule_GetState(PyObject* mod) {
   64|    162|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|    162|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 162, False: 0]
  ------------------
   65|    162|}
typeobject.c:_PyModule_GetToken:
   57|    446|static inline PyModuleDef *_PyModule_GetToken(PyObject *arg) {
   58|    446|    PyModuleObject *mod = _PyModule_CAST(arg);
  ------------------
  |  |   46|    446|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    446|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (58:27): [True: 446, False: 0]
  ------------------
   59|      0|    return (PyModuleDef *)mod->md_token;
   60|    446|}
import.c:_PyModule_GetDefOrNull:
   48|      8|static inline PyModuleDef *_PyModule_GetDefOrNull(PyObject *arg) {
   49|      8|    PyModuleObject *mod = _PyModule_CAST(arg);
  ------------------
  |  |   46|      8|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (49:27): [True: 8, False: 0]
  ------------------
   50|      8|    if (mod->md_token_is_def) {
  ------------------
  |  Branch (50:9): [True: 8, False: 0]
  ------------------
   51|      8|        return (PyModuleDef *)mod->md_token;
   52|      8|    }
   53|      0|    return NULL;
   54|      8|}
posixmodule.c:_PyModule_GetState:
   63|    549|static inline void* _PyModule_GetState(PyObject* mod) {
   64|    549|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|    549|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    549|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 549, False: 0]
  ------------------
   65|    549|}
_collectionsmodule.c:_PyModule_GetState:
   63|     19|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     19|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     19|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 19, False: 0]
  ------------------
   65|     19|}
_iomodule.c:_PyModule_GetState:
   63|    121|static inline void* _PyModule_GetState(PyObject* mod) {
   64|    121|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|    121|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    121|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 121, False: 0]
  ------------------
   65|    121|}
bufferedio.c:_PyModule_GetState:
   63|     99|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     99|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     99|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 99, False: 0]
  ------------------
   65|     99|}
textio.c:_PyModule_GetState:
   63|      6|static inline void* _PyModule_GetState(PyObject* mod) {
   64|      6|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|      6|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 6, False: 0]
  ------------------
   65|      6|}
itertoolsmodule.c:_PyModule_GetState:
   63|     19|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     19|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     19|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 19, False: 0]
  ------------------
   65|     19|}
sre.c:_PyModule_GetState:
   63|     32|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     32|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     32|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 32, False: 0]
  ------------------
   65|     32|}
_threadmodule.c:_PyModule_GetState:
   63|    695|static inline void* _PyModule_GetState(PyObject* mod) {
   64|    695|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|    695|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    695|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 695, False: 0]
  ------------------
   65|    695|}
timemodule.c:_PyModule_GetState:
   63|     22|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     22|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     22|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 22, False: 0]
  ------------------
   65|     22|}
_abc.c:_PyModule_GetState:
   63|    378|static inline void* _PyModule_GetState(PyObject* mod) {
   64|    378|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|    378|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    378|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 378, False: 0]
  ------------------
   65|    378|}
_functoolsmodule.c:_PyModule_GetState:
   63|     23|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     23|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     23|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 23, False: 0]
  ------------------
   65|     23|}
_operator.c:_PyModule_GetState:
   63|     19|static inline void* _PyModule_GetState(PyObject* mod) {
   64|     19|    return _PyModule_CAST(mod)->md_state;
  ------------------
  |  |   46|     19|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (64:12): [True: 19, False: 0]
  ------------------
   65|     19|}

listobject.c:_Py_RefcntAdd:
  135|     33|{
  136|     33|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     33|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 33, False: 0]
  |  |  ------------------
  ------------------
  137|     33|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     33|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  138|     33|        return;
  139|     33|    }
  140|      0|#ifndef Py_GIL_DISABLED
  141|      0|    Py_ssize_t refcnt = _Py_REFCNT(op);
  142|      0|    Py_ssize_t new_refcnt = refcnt + n;
  143|      0|    if (new_refcnt >= (Py_ssize_t)_Py_IMMORTAL_MINIMUM_REFCNT) {
  ------------------
  |  |   48|      0|#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
  ------------------
  |  Branch (143:9): [True: 0, False: 0]
  ------------------
  144|      0|        new_refcnt = _Py_IMMORTAL_INITIAL_REFCNT;
  ------------------
  |  |   47|      0|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  145|      0|    }
  146|      0|#  if SIZEOF_VOID_P > 4
  147|      0|    op->ob_refcnt = (uint32_t)new_refcnt;
  148|       |#  else
  149|       |    op->ob_refcnt = new_refcnt;
  150|       |#  endif
  151|       |#  ifdef Py_REF_DEBUG
  152|       |    _Py_AddRefTotal(_PyThreadState_GET(), new_refcnt - refcnt);
  153|       |#  endif
  154|       |#else
  155|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  156|       |        uint32_t local = op->ob_ref_local;
  157|       |        Py_ssize_t refcnt = (Py_ssize_t)local + n;
  158|       |#  if PY_SSIZE_T_MAX > UINT32_MAX
  159|       |        if (refcnt > (Py_ssize_t)UINT32_MAX) {
  160|       |            // Make the object immortal if the 32-bit local reference count
  161|       |            // would overflow.
  162|       |            refcnt = _Py_IMMORTAL_REFCNT_LOCAL;
  163|       |        }
  164|       |#  endif
  165|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, (uint32_t)refcnt);
  166|       |    }
  167|       |    else {
  168|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (n << _Py_REF_SHARED_SHIFT));
  169|       |    }
  170|       |#  ifdef Py_REF_DEBUG
  171|       |    _Py_AddRefTotal(_PyThreadState_GET(), n);
  172|       |#  endif
  173|       |#endif
  174|       |    // Although the ref count was increased by `n` (which may be greater than 1)
  175|       |    // it is only a single increment (i.e. addition) operation, so only 1 refcnt
  176|       |    // increment operation is counted.
  177|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  178|      0|}
longobject.c:_PyObject_Init:
  478|  1.24M|{
  479|  1.24M|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 1.24M, False: 0]
  ------------------
  480|  1.24M|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|  1.24M|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|  1.24M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  1.24M|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 1.24M]
  |  Branch (481:5): [True: 1.24M, False: 0]
  ------------------
  482|  1.24M|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|  1.24M|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  1.24M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.24M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  1.24M|    _Py_NewReference(op);
  484|  1.24M|}
longobject.c:_PyType_HasFeature:
  284|  1.24M|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  1.24M|    return ((type->tp_flags) & feature) != 0;
  286|  1.24M|}
longobject.c:_Py_DECREF_SPECIALIZED:
  234|   127k|{
  235|   127k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   127k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   127k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   127k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 140, False: 127k]
  |  |  ------------------
  ------------------
  236|    140|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    140|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  237|    140|        return;
  238|    140|    }
  239|   127k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   127k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  240|       |#ifdef Py_REF_DEBUG
  241|       |    _Py_DEC_REFTOTAL(PyInterpreterState_Get());
  242|       |#endif
  243|   127k|    if (--op->ob_refcnt != 0) {
  ------------------
  |  Branch (243:9): [True: 99, False: 127k]
  ------------------
  244|     99|        assert(op->ob_refcnt > 0);
  ------------------
  |  Branch (244:9): [True: 99, False: 0]
  ------------------
  245|     99|    }
  246|   127k|    else {
  247|       |#ifdef Py_TRACE_REFS
  248|       |        _Py_ForgetReference(op);
  249|       |#endif
  250|       |        _PyReftracerTrack(op, PyRefTracer_DESTROY);
  ------------------
  |  |  112|   127k|    do { \
  |  |  113|   127k|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|   127k|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 127k]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|   127k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 127k]
  |  |  ------------------
  ------------------
  251|   127k|        destruct(op);
  252|   127k|    }
  253|   127k|}
longobject.c:_PyObject_IsUniquelyReferenced:
  185|  39.1k|{
  186|  39.1k|#if !defined(Py_GIL_DISABLED)
  187|  39.1k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|  39.1k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  39.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|  39.1k|}
dictobject.c:_Py_INCREF_MORTAL:
 1023|  32.5k|{
 1024|  32.5k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (1024:5): [True: 32.5k, False: 0]
  ------------------
 1025|  32.5k|    op->ob_refcnt++;
 1026|  32.5k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  32.5k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
 1027|       |#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
 1028|       |    if (!_Py_IsImmortal(op)) {
 1029|       |        _Py_INCREF_IncRefTotal();
 1030|       |    }
 1031|       |#endif
 1032|  32.5k|}
dictobject.c:Py_DECREF_MORTAL:
  445|  5.10k|{
  446|  5.10k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 5.10k, False: 0]
  ------------------
  447|  5.10k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  5.10k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|  5.10k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 0, False: 5.10k]
  ------------------
  449|      0|        _Py_Dealloc(op);
  450|      0|    }
  451|  5.10k|}
dictobject.c:_PyObject_HashDictKey:
  839|  13.7M|{
  840|  13.7M|    if (PyUnicode_CheckExact(op)) {
  ------------------
  |  |  104|  13.7M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  13.7M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  13.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  13.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 9.66M, False: 4.07M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  841|  9.66M|        Py_hash_t hash = PyUnstable_Unicode_GET_CACHED_HASH(op);
  842|  9.66M|        if (hash != -1) {
  ------------------
  |  Branch (842:13): [True: 9.50M, False: 156k]
  ------------------
  843|  9.50M|            return hash;
  844|  9.50M|        }
  845|  9.66M|    }
  846|  4.23M|    return PyObject_Hash(op);
  847|  13.7M|}
dictobject.c:_PyObject_ResurrectStart:
  674|   879k|{
  675|   879k|    assert(Py_REFCNT(op) == 0);
  ------------------
  |  Branch (675:5): [True: 879k, False: 0]
  ------------------
  676|       |#ifdef Py_REF_DEBUG
  677|       |    _Py_IncRefTotal(_PyThreadState_GET());
  678|       |#endif
  679|       |#ifdef Py_GIL_DISABLED
  680|       |    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId());
  681|       |    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1);
  682|       |    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
  683|       |#else
  684|   879k|    Py_SET_REFCNT(op, 1);
  ------------------
  |  |  201|   879k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|   879k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   879k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|   879k|#endif
  686|       |#ifdef Py_TRACE_REFS
  687|       |    _Py_ResurrectReference(op);
  688|       |#endif
  689|   879k|}
dictobject.c:_PyObject_ResurrectEnd:
  696|   879k|{
  697|       |#ifdef Py_REF_DEBUG
  698|       |    _Py_DecRefTotal(_PyThreadState_GET());
  699|       |#endif
  700|   879k|#ifndef Py_GIL_DISABLED
  701|   879k|    Py_SET_REFCNT(op, Py_REFCNT(op) - 1);
  ------------------
  |  |  201|   879k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|   879k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   879k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|   879k|    if (Py_REFCNT(op) == 0) {
  ------------------
  |  |  119|   879k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   879k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   879k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (702:9): [True: 879k, False: 0]
  ------------------
  703|       |# ifdef Py_TRACE_REFS
  704|       |        _Py_ForgetReference(op);
  705|       |# endif
  706|   879k|        return 0;
  707|   879k|    }
  708|      0|    return 1;
  709|       |#else
  710|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  711|       |    Py_ssize_t shared = _Py_atomic_load_ssize_acquire(&op->ob_ref_shared);
  712|       |    if (_Py_IsOwnedByCurrentThread(op) && local == 1 && shared == 0) {
  713|       |        // Fast-path: object has a single refcount and is owned by this thread
  714|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 0);
  715|       |# ifdef Py_TRACE_REFS
  716|       |        _Py_ForgetReference(op);
  717|       |# endif
  718|       |        return 0;
  719|       |    }
  720|       |    // Slow-path: object has a shared refcount or is not owned by this thread
  721|       |    return _PyObject_ResurrectEndSlow(op);
  722|       |#endif
  723|   879k|}
dictobject.c:_PyObject_IsUniquelyReferenced:
  185|  1.10k|{
  186|  1.10k|#if !defined(Py_GIL_DISABLED)
  187|  1.10k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|  1.10k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|  1.10k|}
dictobject.c:_PyObject_InlineValues:
  947|   555k|{
  948|   555k|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|   555k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   555k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   555k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  949|   555k|    assert(tp->tp_basicsize > 0 && (size_t)tp->tp_basicsize % sizeof(PyObject *) == 0);
  ------------------
  |  Branch (949:5): [True: 555k, False: 0]
  |  Branch (949:5): [True: 555k, False: 0]
  ------------------
  950|   555k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  ------------------
  |  Branch (950:5): [True: 555k, False: 0]
  ------------------
  951|   555k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (951:5): [True: 555k, False: 0]
  ------------------
  952|   555k|    return (PyDictValues *)((char *)obj + tp->tp_basicsize);
  953|   555k|}
dictobject.c:_PyObject_ManagedDictPointer:
  933|   115k|{
  934|   115k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (934:5): [True: 115k, False: 0]
  ------------------
  935|   115k|    return (PyManagedDictPointer *)((char *)obj + MANAGED_DICT_OFFSET);
  ------------------
  |  |  923|   115k|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
  936|   115k|}
dictobject.c:_PyObject_GetManagedDict:
  940|  51.7k|{
  941|  51.7k|    PyManagedDictPointer *dorv = _PyObject_ManagedDictPointer(obj);
  942|  51.7k|    return (PyDictObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(dorv->dict);
  ------------------
  |  |  150|  51.7k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  943|  51.7k|}
dictobject.c:_PyType_HasFeature:
  284|   417k|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|   417k|    return ((type->tp_flags) & feature) != 0;
  286|   417k|}
object.c:_PyObject_Init:
  478|   119k|{
  479|   119k|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 119k, False: 0]
  ------------------
  480|   119k|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|   119k|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|   119k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|   119k|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 119k]
  |  Branch (481:5): [True: 119k, False: 0]
  ------------------
  482|   119k|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|   119k|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|   119k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   119k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|   119k|    _Py_NewReference(op);
  484|   119k|}
object.c:_PyObject_InitVar:
  488|  56.1k|{
  489|  56.1k|    assert(op != NULL);
  ------------------
  |  Branch (489:5): [True: 56.1k, False: 0]
  ------------------
  490|  56.1k|    assert(typeobj != &PyLong_Type);
  ------------------
  |  Branch (490:5): [True: 56.1k, False: 0]
  ------------------
  491|  56.1k|    _PyObject_Init((PyObject *)op, typeobj);
  492|  56.1k|    Py_SET_SIZE(op, size);
  ------------------
  |  |  216|  56.1k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  56.1k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  56.1k|}
object.c:_PyType_HasFeature:
  284|   319k|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|   319k|    return ((type->tp_flags) & feature) != 0;
  286|   319k|}
object.c:_PyObject_ResurrectStart:
  674|  1.43k|{
  675|  1.43k|    assert(Py_REFCNT(op) == 0);
  ------------------
  |  Branch (675:5): [True: 1.43k, False: 0]
  ------------------
  676|       |#ifdef Py_REF_DEBUG
  677|       |    _Py_IncRefTotal(_PyThreadState_GET());
  678|       |#endif
  679|       |#ifdef Py_GIL_DISABLED
  680|       |    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId());
  681|       |    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1);
  682|       |    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
  683|       |#else
  684|  1.43k|    Py_SET_REFCNT(op, 1);
  ------------------
  |  |  201|  1.43k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|  1.43k|#endif
  686|       |#ifdef Py_TRACE_REFS
  687|       |    _Py_ResurrectReference(op);
  688|       |#endif
  689|  1.43k|}
object.c:_PyObject_ResurrectEnd:
  696|  1.43k|{
  697|       |#ifdef Py_REF_DEBUG
  698|       |    _Py_DecRefTotal(_PyThreadState_GET());
  699|       |#endif
  700|  1.43k|#ifndef Py_GIL_DISABLED
  701|  1.43k|    Py_SET_REFCNT(op, Py_REFCNT(op) - 1);
  ------------------
  |  |  201|  1.43k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|  1.43k|    if (Py_REFCNT(op) == 0) {
  ------------------
  |  |  119|  1.43k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (702:9): [True: 1.43k, False: 0]
  ------------------
  703|       |# ifdef Py_TRACE_REFS
  704|       |        _Py_ForgetReference(op);
  705|       |# endif
  706|  1.43k|        return 0;
  707|  1.43k|    }
  708|      0|    return 1;
  709|       |#else
  710|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  711|       |    Py_ssize_t shared = _Py_atomic_load_ssize_acquire(&op->ob_ref_shared);
  712|       |    if (_Py_IsOwnedByCurrentThread(op) && local == 1 && shared == 0) {
  713|       |        // Fast-path: object has a single refcount and is owned by this thread
  714|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 0);
  715|       |# ifdef Py_TRACE_REFS
  716|       |        _Py_ForgetReference(op);
  717|       |# endif
  718|       |        return 0;
  719|       |    }
  720|       |    // Slow-path: object has a shared refcount or is not owned by this thread
  721|       |    return _PyObject_ResurrectEndSlow(op);
  722|       |#endif
  723|  1.43k|}
object.c:_PyObject_GetManagedDict:
  940|  41.3k|{
  941|  41.3k|    PyManagedDictPointer *dorv = _PyObject_ManagedDictPointer(obj);
  942|  41.3k|    return (PyDictObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(dorv->dict);
  ------------------
  |  |  150|  41.3k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  943|  41.3k|}
object.c:_PyObject_ManagedDictPointer:
  933|  42.7k|{
  934|  42.7k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (934:5): [True: 42.7k, False: 0]
  ------------------
  935|  42.7k|    return (PyManagedDictPointer *)((char *)obj + MANAGED_DICT_OFFSET);
  ------------------
  |  |  923|  42.7k|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
  936|  42.7k|}
object.c:Py_DECREF_MORTAL:
  445|  1.92M|{
  446|  1.92M|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 1.92M, False: 0]
  ------------------
  447|  1.92M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.92M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|  1.92M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 0, False: 1.92M]
  ------------------
  449|      0|        _Py_Dealloc(op);
  450|      0|    }
  451|  1.92M|}
object.c:_PyObject_IsUniquelyReferenced:
  185|   178k|{
  186|   178k|#if !defined(Py_GIL_DISABLED)
  187|   178k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|   178k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   178k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   178k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|   178k|}
setobject.c:_PyObject_IsUniquelyReferenced:
  185|    248|{
  186|    248|#if !defined(Py_GIL_DISABLED)
  187|    248|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|    248|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    248|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    248|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|    248|}
structseq.c:_PyType_HasFeature:
  284|    529|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|    529|    return ((type->tp_flags) & feature) != 0;
  286|    529|}
tupleobject.c:_PyObject_IsUniquelyReferenced:
  185|     35|{
  186|     35|#if !defined(Py_GIL_DISABLED)
  187|     35|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|     35|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|     35|}
tupleobject.c:_PyType_HasFeature:
  284|  55.2M|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  55.2M|    return ((type->tp_flags) & feature) != 0;
  286|  55.2M|}
tupleobject.c:_Py_RefcntAdd:
  135|  57.4k|{
  136|  57.4k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  57.4k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  57.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  57.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.12k, False: 56.3k]
  |  |  ------------------
  ------------------
  137|  1.12k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.12k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  138|  1.12k|        return;
  139|  1.12k|    }
  140|  56.3k|#ifndef Py_GIL_DISABLED
  141|  56.3k|    Py_ssize_t refcnt = _Py_REFCNT(op);
  142|  56.3k|    Py_ssize_t new_refcnt = refcnt + n;
  143|  56.3k|    if (new_refcnt >= (Py_ssize_t)_Py_IMMORTAL_MINIMUM_REFCNT) {
  ------------------
  |  |   48|  56.3k|#define _Py_IMMORTAL_MINIMUM_REFCNT (1ULL << 31)
  ------------------
  |  Branch (143:9): [True: 0, False: 56.3k]
  ------------------
  144|      0|        new_refcnt = _Py_IMMORTAL_INITIAL_REFCNT;
  ------------------
  |  |   47|      0|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  145|      0|    }
  146|  56.3k|#  if SIZEOF_VOID_P > 4
  147|  56.3k|    op->ob_refcnt = (uint32_t)new_refcnt;
  148|       |#  else
  149|       |    op->ob_refcnt = new_refcnt;
  150|       |#  endif
  151|       |#  ifdef Py_REF_DEBUG
  152|       |    _Py_AddRefTotal(_PyThreadState_GET(), new_refcnt - refcnt);
  153|       |#  endif
  154|       |#else
  155|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  156|       |        uint32_t local = op->ob_ref_local;
  157|       |        Py_ssize_t refcnt = (Py_ssize_t)local + n;
  158|       |#  if PY_SSIZE_T_MAX > UINT32_MAX
  159|       |        if (refcnt > (Py_ssize_t)UINT32_MAX) {
  160|       |            // Make the object immortal if the 32-bit local reference count
  161|       |            // would overflow.
  162|       |            refcnt = _Py_IMMORTAL_REFCNT_LOCAL;
  163|       |        }
  164|       |#  endif
  165|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, (uint32_t)refcnt);
  166|       |    }
  167|       |    else {
  168|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (n << _Py_REF_SHARED_SHIFT));
  169|       |    }
  170|       |#  ifdef Py_REF_DEBUG
  171|       |    _Py_AddRefTotal(_PyThreadState_GET(), n);
  172|       |#  endif
  173|       |#endif
  174|       |    // Although the ref count was increased by `n` (which may be greater than 1)
  175|       |    // it is only a single increment (i.e. addition) operation, so only 1 refcnt
  176|       |    // increment operation is counted.
  177|  56.3k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  56.3k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  178|  56.3k|}
typeobject.c:_Py_TryIncref:
  728|      8|{
  729|       |#ifdef Py_GIL_DISABLED
  730|       |    return _Py_TryIncrefFast(op) || _Py_TryIncRefShared(op);
  731|       |#else
  732|      8|    if (Py_REFCNT(op) > 0) {
  ------------------
  |  |  119|      8|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (732:9): [True: 8, False: 0]
  ------------------
  733|      8|        Py_INCREF(op);
  ------------------
  |  |  310|      8|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  734|      8|        return 1;
  735|      8|    }
  736|      0|    return 0;
  737|      8|#endif
  738|      8|}
typeobject.c:_PyType_HasFeature:
  284|  6.48M|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  6.48M|    return ((type->tp_flags) & feature) != 0;
  286|  6.48M|}
typeobject.c:_PyType_PreHeaderSize:
  851|  1.52M|{
  852|  1.52M|    return (
  853|  1.52M|#ifndef Py_GIL_DISABLED
  854|  1.52M|        (size_t)_PyType_IS_GC(tp) * sizeof(PyGC_Head) +
  ------------------
  |  |  820|  1.52M|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  1.52M|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  ------------------
  855|  1.52M|#endif
  856|  1.52M|        (size_t)_PyType_HasFeature(tp, Py_TPFLAGS_PREHEADER) * 2 * sizeof(PyObject *)
  ------------------
  |  |  487|  1.52M|#define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
  |  |  ------------------
  |  |  |  |  477|  1.52M|#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3)
  |  |  ------------------
  |  |               #define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
  |  |  ------------------
  |  |  |  |  482|  1.52M|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  |  |  ------------------
  ------------------
  857|  1.52M|    );
  858|  1.52M|}
typeobject.c:_PyObject_Init:
  478|  1.52M|{
  479|  1.52M|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 1.52M, False: 0]
  ------------------
  480|  1.52M|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|  1.52M|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|  1.52M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.52M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  1.52M|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 467k, False: 1.05M]
  |  Branch (481:5): [True: 1.05M, False: 0]
  ------------------
  482|  1.52M|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|  1.52M|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  1.52M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.52M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.52M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  1.52M|    _Py_NewReference(op);
  484|  1.52M|}
typeobject.c:_PyObject_InitVar:
  488|  1.20k|{
  489|  1.20k|    assert(op != NULL);
  ------------------
  |  Branch (489:5): [True: 1.20k, False: 0]
  ------------------
  490|  1.20k|    assert(typeobj != &PyLong_Type);
  ------------------
  |  Branch (490:5): [True: 1.20k, False: 0]
  ------------------
  491|  1.20k|    _PyObject_Init((PyObject *)op, typeobj);
  492|  1.20k|    Py_SET_SIZE(op, size);
  ------------------
  |  |  216|  1.20k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  1.20k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  1.20k|}
typeobject.c:Py_DECREF_MORTAL:
  445|   246k|{
  446|   246k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 246k, False: 0]
  ------------------
  447|   246k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   246k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|   246k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 0, False: 246k]
  ------------------
  449|      0|        _Py_Dealloc(op);
  450|      0|    }
  451|   246k|}
typeobject.c:_PyObject_HashDictKey:
  839|  82.7k|{
  840|  82.7k|    if (PyUnicode_CheckExact(op)) {
  ------------------
  |  |  104|  82.7k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  82.7k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  82.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  82.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 82.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  841|  82.7k|        Py_hash_t hash = PyUnstable_Unicode_GET_CACHED_HASH(op);
  842|  82.7k|        if (hash != -1) {
  ------------------
  |  Branch (842:13): [True: 77.3k, False: 5.41k]
  ------------------
  843|  77.3k|            return hash;
  844|  77.3k|        }
  845|  82.7k|    }
  846|  5.41k|    return PyObject_Hash(op);
  847|  82.7k|}
typeobject.c:_Py_INCREF_MORTAL:
 1023|  77.9k|{
 1024|  77.9k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (1024:5): [True: 77.9k, False: 0]
  ------------------
 1025|  77.9k|    op->ob_refcnt++;
 1026|  77.9k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  77.9k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
 1027|       |#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
 1028|       |    if (!_Py_IsImmortal(op)) {
 1029|       |        _Py_INCREF_IncRefTotal();
 1030|       |    }
 1031|       |#endif
 1032|  77.9k|}
typeobject.c:_PyObject_XDecRefDelayed:
  745|      5|{
  746|      5|    Py_XDECREF(obj);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|      5|}
unicodeobject.c:_PyObject_Init:
  478|  23.4M|{
  479|  23.4M|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 23.4M, False: 0]
  ------------------
  480|  23.4M|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|  23.4M|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|  23.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  23.4M|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 23.4M]
  |  Branch (481:5): [True: 23.4M, False: 0]
  ------------------
  482|  23.4M|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|  23.4M|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  23.4M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  23.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  23.4M|    _Py_NewReference(op);
  484|  23.4M|}
unicodeobject.c:_PyType_HasFeature:
  284|  23.4M|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  23.4M|    return ((type->tp_flags) & feature) != 0;
  286|  23.4M|}
unicodeobject.c:_PyObject_IsUniquelyReferenced:
  185|   207k|{
  186|   207k|#if !defined(Py_GIL_DISABLED)
  187|   207k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|   207k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   207k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   207k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|   207k|}
weakrefobject.c:_PyType_SUPPORTS_WEAKREFS:
  869|   469k|static inline int _PyType_SUPPORTS_WEAKREFS(PyTypeObject *type) {
  870|   469k|    return (type->tp_weaklistoffset != 0);
  871|   469k|}
weakrefobject.c:_PyObject_GET_WEAKREFS_LISTPTR:
  785|   470k|{
  786|   470k|    if (PyType_Check(op) &&
  ------------------
  |  |  766|   940k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   470k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   470k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 1.74k, False: 468k]
  |  |  ------------------
  ------------------
  787|  1.74k|            ((PyTypeObject *)op)->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.74k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (787:13): [True: 594, False: 1.14k]
  ------------------
  788|    594|        PyInterpreterState *interp = _PyInterpreterState_GET();
  789|    594|        managed_static_type_state *state = _PyStaticType_GetState(
  790|    594|                                                interp, (PyTypeObject *)op);
  791|    594|        return _PyStaticType_GET_WEAKREFS_LISTPTR(state);
  792|    594|    }
  793|       |    // Essentially _PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET():
  794|   469k|    Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset;
  ------------------
  |  |  213|   469k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   469k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   469k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|   469k|    return (PyObject **)((char *)op + offset);
  796|   470k|}
weakrefobject.c:_Py_TryIncref:
  728|  1.62k|{
  729|       |#ifdef Py_GIL_DISABLED
  730|       |    return _Py_TryIncrefFast(op) || _Py_TryIncRefShared(op);
  731|       |#else
  732|  1.62k|    if (Py_REFCNT(op) > 0) {
  ------------------
  |  |  119|  1.62k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (732:9): [True: 1.62k, False: 0]
  ------------------
  733|  1.62k|        Py_INCREF(op);
  ------------------
  |  |  310|  1.62k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  734|  1.62k|        return 1;
  735|  1.62k|    }
  736|      0|    return 0;
  737|  1.62k|#endif
  738|  1.62k|}
bltinmodule.c:_PyObject_IsUniquelyReferenced:
  185|     69|{
  186|     69|#if !defined(Py_GIL_DISABLED)
  187|     69|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|     69|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|     69|}
ceval.c:Py_DECREF_MORTAL:
  445|  62.4M|{
  446|  62.4M|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 62.4M, False: 0]
  ------------------
  447|  62.4M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  62.4M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|  62.4M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 24.5M, False: 37.8M]
  ------------------
  449|  24.5M|        _Py_Dealloc(op);
  450|  24.5M|    }
  451|  62.4M|}
ceval.c:Py_DECREF_MORTAL_SPECIALIZED:
  455|  10.3M|{
  456|  10.3M|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (456:5): [True: 10.3M, False: 0]
  ------------------
  457|  10.3M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  10.3M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  458|  10.3M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (458:9): [True: 10.1M, False: 136k]
  ------------------
  459|       |        _PyReftracerTrack(op, PyRefTracer_DESTROY);
  ------------------
  |  |  112|  10.1M|    do { \
  |  |  113|  10.1M|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|  10.1M|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 10.1M]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|  10.1M|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 10.1M]
  |  |  ------------------
  ------------------
  460|  10.1M|        destruct(op);
  461|  10.1M|    }
  462|  10.3M|}
ceval.c:_Py_INCREF_MORTAL:
 1023|  44.3M|{
 1024|  44.3M|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (1024:5): [True: 44.3M, False: 0]
  ------------------
 1025|  44.3M|    op->ob_refcnt++;
 1026|  44.3M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  44.3M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
 1027|       |#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
 1028|       |    if (!_Py_IsImmortal(op)) {
 1029|       |        _Py_INCREF_IncRefTotal();
 1030|       |    }
 1031|       |#endif
 1032|  44.3M|}
ceval.c:_PyObject_InlineValues:
  947|  1.39M|{
  948|  1.39M|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|  1.39M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.39M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.39M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  949|  1.39M|    assert(tp->tp_basicsize > 0 && (size_t)tp->tp_basicsize % sizeof(PyObject *) == 0);
  ------------------
  |  Branch (949:5): [True: 1.39M, False: 0]
  |  Branch (949:5): [True: 1.39M, False: 0]
  ------------------
  950|  1.39M|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  ------------------
  |  Branch (950:5): [True: 1.39M, False: 0]
  ------------------
  951|  1.39M|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (951:5): [True: 1.39M, False: 0]
  ------------------
  952|  1.39M|    return (PyDictValues *)((char *)obj + tp->tp_basicsize);
  953|  1.39M|}
ceval.c:_PyType_HasFeature:
  284|  3.66M|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  3.66M|    return ((type->tp_flags) & feature) != 0;
  286|  3.66M|}
ceval.c:_PyObject_GetManagedDict:
  940|   893k|{
  941|   893k|    PyManagedDictPointer *dorv = _PyObject_ManagedDictPointer(obj);
  942|   893k|    return (PyDictObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(dorv->dict);
  ------------------
  |  |  150|   893k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  943|   893k|}
ceval.c:_PyObject_ManagedDictPointer:
  933|   893k|{
  934|   893k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (934:5): [True: 893k, False: 0]
  ------------------
  935|   893k|    return (PyManagedDictPointer *)((char *)obj + MANAGED_DICT_OFFSET);
  ------------------
  |  |  923|   893k|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
  936|   893k|}
frame.c:Py_DECREF_MORTAL:
  445|  10.0M|{
  446|  10.0M|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 10.0M, False: 0]
  ------------------
  447|  10.0M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  10.0M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|  10.0M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 2.14M, False: 7.91M]
  ------------------
  449|  2.14M|        _Py_Dealloc(op);
  450|  2.14M|    }
  451|  10.0M|}
frame.c:_PyObject_IsUniquelyReferenced:
  185|  23.1k|{
  186|  23.1k|#if !defined(Py_GIL_DISABLED)
  187|  23.1k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|  23.1k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  23.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|  23.1k|}
frame.c:_Py_INCREF_MORTAL:
 1023|  4.21k|{
 1024|  4.21k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (1024:5): [True: 4.21k, False: 0]
  ------------------
 1025|  4.21k|    op->ob_refcnt++;
 1026|  4.21k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  4.21k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
 1027|       |#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
 1028|       |    if (!_Py_IsImmortal(op)) {
 1029|       |        _Py_INCREF_IncRefTotal();
 1030|       |    }
 1031|       |#endif
 1032|  4.21k|}
gc.c:_PyType_SUPPORTS_WEAKREFS:
  869|  2.98k|static inline int _PyType_SUPPORTS_WEAKREFS(PyTypeObject *type) {
  870|  2.98k|    return (type->tp_weaklistoffset != 0);
  871|  2.98k|}
gc.c:_PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET:
  812|    554|{
  813|    554|    assert(!PyType_Check(op) ||
  ------------------
  |  Branch (813:5): [True: 538, False: 16]
  |  Branch (813:5): [True: 16, False: 0]
  ------------------
  814|    554|            ((PyTypeObject *)op)->tp_flags & Py_TPFLAGS_HEAPTYPE);
  815|    554|    Py_ssize_t offset = Py_TYPE(op)->tp_weaklistoffset;
  ------------------
  |  |  213|    554|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    554|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    554|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|    554|    return (PyWeakReference **)((char *)op + offset);
  817|    554|}
gc.c:_PyObject_IS_GC:
  825|  1.03G|{
  826|  1.03G|    PyTypeObject *type = Py_TYPE(obj);
  ------------------
  |  |  213|  1.03G|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.03G|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.03G|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  827|  1.03G|    return (_PyType_IS_GC(type)
  ------------------
  |  |  820|  2.07G|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  1.03G|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (820:26): [True: 347M, False: 689M]
  |  |  ------------------
  ------------------
  828|   347M|            && (type->tp_is_gc == NULL || type->tp_is_gc(obj)));
  ------------------
  |  Branch (828:17): [True: 208M, False: 139M]
  |  Branch (828:43): [True: 142k, False: 139M]
  ------------------
  829|  1.03G|}
gc.c:_PyType_PreHeaderSize:
  851|   100M|{
  852|   100M|    return (
  853|   100M|#ifndef Py_GIL_DISABLED
  854|   100M|        (size_t)_PyType_IS_GC(tp) * sizeof(PyGC_Head) +
  ------------------
  |  |  820|   100M|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|   100M|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  ------------------
  855|   100M|#endif
  856|   100M|        (size_t)_PyType_HasFeature(tp, Py_TPFLAGS_PREHEADER) * 2 * sizeof(PyObject *)
  ------------------
  |  |  487|   100M|#define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
  |  |  ------------------
  |  |  |  |  477|   100M|#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3)
  |  |  ------------------
  |  |               #define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
  |  |  ------------------
  |  |  |  |  482|   100M|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  |  |  ------------------
  ------------------
  857|   100M|    );
  858|   100M|}
gc.c:_PyType_HasFeature:
  284|  1.28G|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  1.28G|    return ((type->tp_flags) & feature) != 0;
  286|  1.28G|}
gc.c:_PyObject_Init:
  478|  49.5M|{
  479|  49.5M|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 49.5M, False: 0]
  ------------------
  480|  49.5M|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|  49.5M|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|  49.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  49.5M|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 555, False: 49.5M]
  |  Branch (481:5): [True: 49.5M, False: 0]
  ------------------
  482|  49.5M|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|  49.5M|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  49.5M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  49.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  49.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  49.5M|    _Py_NewReference(op);
  484|  49.5M|}
gc.c:_PyObject_InitVar:
  488|  48.7M|{
  489|  48.7M|    assert(op != NULL);
  ------------------
  |  Branch (489:5): [True: 48.7M, False: 0]
  ------------------
  490|  48.7M|    assert(typeobj != &PyLong_Type);
  ------------------
  |  Branch (490:5): [True: 48.7M, False: 0]
  ------------------
  491|  48.7M|    _PyObject_Init((PyObject *)op, typeobj);
  492|  48.7M|    Py_SET_SIZE(op, size);
  ------------------
  |  |  216|  48.7M|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  48.7M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  48.7M|}
import.c:_Py_TryIncref:
  728|      2|{
  729|       |#ifdef Py_GIL_DISABLED
  730|       |    return _Py_TryIncrefFast(op) || _Py_TryIncRefShared(op);
  731|       |#else
  732|      2|    if (Py_REFCNT(op) > 0) {
  ------------------
  |  |  119|      2|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (732:9): [True: 2, False: 0]
  ------------------
  733|      2|        Py_INCREF(op);
  ------------------
  |  |  310|      2|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  734|      2|        return 1;
  735|      2|    }
  736|      0|    return 0;
  737|      2|#endif
  738|      2|}
intrinsics.c:_PyObject_IsUniquelyReferenced:
  185|    165|{
  186|    165|#if !defined(Py_GIL_DISABLED)
  187|    165|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|    165|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    165|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    165|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|    165|}
specialize.c:_PyObject_GetManagedDict:
  940|    649|{
  941|    649|    PyManagedDictPointer *dorv = _PyObject_ManagedDictPointer(obj);
  942|    649|    return (PyDictObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(dorv->dict);
  ------------------
  |  |  150|    649|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  943|    649|}
specialize.c:_PyObject_ManagedDictPointer:
  933|    649|{
  934|    649|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (934:5): [True: 649, False: 0]
  ------------------
  935|    649|    return (PyManagedDictPointer *)((char *)obj + MANAGED_DICT_OFFSET);
  ------------------
  |  |  923|    649|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
  936|    649|}
specialize.c:_PyObject_InlineValues:
  947|  1.23k|{
  948|  1.23k|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|  1.23k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.23k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.23k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  949|  1.23k|    assert(tp->tp_basicsize > 0 && (size_t)tp->tp_basicsize % sizeof(PyObject *) == 0);
  ------------------
  |  Branch (949:5): [True: 1.23k, False: 0]
  |  Branch (949:5): [True: 1.23k, False: 0]
  ------------------
  950|  1.23k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  ------------------
  |  Branch (950:5): [True: 1.23k, False: 0]
  ------------------
  951|  1.23k|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (951:5): [True: 1.23k, False: 0]
  ------------------
  952|  1.23k|    return (PyDictValues *)((char *)obj + tp->tp_basicsize);
  953|  1.23k|}
typecache.c:_Py_INCREF_MORTAL:
 1023|  2.32M|{
 1024|  2.32M|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (1024:5): [True: 2.32M, False: 0]
  ------------------
 1025|  2.32M|    op->ob_refcnt++;
 1026|  2.32M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  2.32M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
 1027|       |#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
 1028|       |    if (!_Py_IsImmortal(op)) {
 1029|       |        _Py_INCREF_IncRefTotal();
 1030|       |    }
 1031|       |#endif
 1032|  2.32M|}
_datetimemodule.c:_PyObject_Init:
  478|      8|{
  479|      8|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 8, False: 0]
  ------------------
  480|      8|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|      8|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|      8|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 8]
  |  Branch (481:5): [True: 8, False: 0]
  ------------------
  482|      8|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|      8|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|      8|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|      8|    _Py_NewReference(op);
  484|      8|}
_datetimemodule.c:_PyType_HasFeature:
  284|      8|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|      8|    return ((type->tp_flags) & feature) != 0;
  286|      8|}
itertoolsmodule.c:_PyObject_IsUniquelyReferenced:
  185|    135|{
  186|    135|#if !defined(Py_GIL_DISABLED)
  187|    135|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|    135|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    135|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    135|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|    135|}
_functoolsmodule.c:_PyObject_IsUniquelyReferenced:
  185|      1|{
  186|      1|#if !defined(Py_GIL_DISABLED)
  187|      1|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|      1|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|      1|}
abstract.c:Py_DECREF_MORTAL:
  445|    112|{
  446|    112|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 112, False: 0]
  ------------------
  447|    112|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    112|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|    112|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 0, False: 112]
  ------------------
  449|      0|        _Py_Dealloc(op);
  450|      0|    }
  451|    112|}
bytesobject.c:_PyObject_InitVar:
  488|  2.00M|{
  489|  2.00M|    assert(op != NULL);
  ------------------
  |  Branch (489:5): [True: 2.00M, False: 0]
  ------------------
  490|  2.00M|    assert(typeobj != &PyLong_Type);
  ------------------
  |  Branch (490:5): [True: 2.00M, False: 0]
  ------------------
  491|  2.00M|    _PyObject_Init((PyObject *)op, typeobj);
  492|  2.00M|    Py_SET_SIZE(op, size);
  ------------------
  |  |  216|  2.00M|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  2.00M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.00M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  2.00M|}
bytesobject.c:_PyObject_Init:
  478|  2.00M|{
  479|  2.00M|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 2.00M, False: 0]
  ------------------
  480|  2.00M|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|  2.00M|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|  2.00M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.00M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  2.00M|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 2.00M]
  |  Branch (481:5): [True: 2.00M, False: 0]
  ------------------
  482|  2.00M|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|  2.00M|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  2.00M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.00M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.00M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  2.00M|    _Py_NewReference(op);
  484|  2.00M|}
bytesobject.c:_PyType_HasFeature:
  284|  2.00M|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  2.00M|    return ((type->tp_flags) & feature) != 0;
  286|  2.00M|}
bytesobject.c:_PyObject_IsUniquelyReferenced:
  185|   252k|{
  186|   252k|#if !defined(Py_GIL_DISABLED)
  187|   252k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|   252k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   252k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   252k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|   252k|}
call.c:Py_DECREF_MORTAL:
  445|   147k|{
  446|   147k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 147k, False: 0]
  ------------------
  447|   147k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   147k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|   147k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 90, False: 147k]
  ------------------
  449|     90|        _Py_Dealloc(op);
  450|     90|    }
  451|   147k|}
codeobject.c:_PyObject_ResurrectStart:
  674|  53.6k|{
  675|  53.6k|    assert(Py_REFCNT(op) == 0);
  ------------------
  |  Branch (675:5): [True: 53.6k, False: 0]
  ------------------
  676|       |#ifdef Py_REF_DEBUG
  677|       |    _Py_IncRefTotal(_PyThreadState_GET());
  678|       |#endif
  679|       |#ifdef Py_GIL_DISABLED
  680|       |    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId());
  681|       |    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1);
  682|       |    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
  683|       |#else
  684|  53.6k|    Py_SET_REFCNT(op, 1);
  ------------------
  |  |  201|  53.6k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|  53.6k|#endif
  686|       |#ifdef Py_TRACE_REFS
  687|       |    _Py_ResurrectReference(op);
  688|       |#endif
  689|  53.6k|}
codeobject.c:_PyObject_ResurrectEnd:
  696|  53.6k|{
  697|       |#ifdef Py_REF_DEBUG
  698|       |    _Py_DecRefTotal(_PyThreadState_GET());
  699|       |#endif
  700|  53.6k|#ifndef Py_GIL_DISABLED
  701|  53.6k|    Py_SET_REFCNT(op, Py_REFCNT(op) - 1);
  ------------------
  |  |  201|  53.6k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|  53.6k|    if (Py_REFCNT(op) == 0) {
  ------------------
  |  |  119|  53.6k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (702:9): [True: 53.6k, False: 0]
  ------------------
  703|       |# ifdef Py_TRACE_REFS
  704|       |        _Py_ForgetReference(op);
  705|       |# endif
  706|  53.6k|        return 0;
  707|  53.6k|    }
  708|      0|    return 1;
  709|       |#else
  710|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  711|       |    Py_ssize_t shared = _Py_atomic_load_ssize_acquire(&op->ob_ref_shared);
  712|       |    if (_Py_IsOwnedByCurrentThread(op) && local == 1 && shared == 0) {
  713|       |        // Fast-path: object has a single refcount and is owned by this thread
  714|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 0);
  715|       |# ifdef Py_TRACE_REFS
  716|       |        _Py_ForgetReference(op);
  717|       |# endif
  718|       |        return 0;
  719|       |    }
  720|       |    // Slow-path: object has a shared refcount or is not owned by this thread
  721|       |    return _PyObject_ResurrectEndSlow(op);
  722|       |#endif
  723|  53.6k|}
complexobject.c:_PyObject_Init:
  478|   105k|{
  479|   105k|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 105k, False: 0]
  ------------------
  480|   105k|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|   105k|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|   105k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   105k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|   105k|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 105k]
  |  Branch (481:5): [True: 105k, False: 0]
  ------------------
  482|   105k|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|   105k|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|   105k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   105k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   105k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|   105k|    _Py_NewReference(op);
  484|   105k|}
complexobject.c:_PyType_HasFeature:
  284|   105k|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|   105k|    return ((type->tp_flags) & feature) != 0;
  286|   105k|}
enumobject.c:_PyObject_IsUniquelyReferenced:
  185|   622k|{
  186|   622k|#if !defined(Py_GIL_DISABLED)
  187|   622k|    return Py_REFCNT(ob) == 1;
  ------------------
  |  |  119|   622k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |#else
  189|       |    // NOTE: the entire ob_ref_shared field must be zero, including flags, to
  190|       |    // ensure that other threads cannot concurrently create new references to
  191|       |    // this object.
  192|       |    return (_Py_IsOwnedByCurrentThread(ob) &&
  193|       |            _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local) == 1 &&
  194|       |            _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared) == 0);
  195|       |#endif
  196|   622k|}
genobject.c:Py_DECREF_MORTAL:
  445|  1.24k|{
  446|  1.24k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 1.24k, False: 0]
  ------------------
  447|  1.24k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.24k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|  1.24k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 0, False: 1.24k]
  ------------------
  449|      0|        _Py_Dealloc(op);
  450|      0|    }
  451|  1.24k|}
floatobject.c:_PyObject_Init:
  478|  68.9k|{
  479|  68.9k|    assert(op != NULL);
  ------------------
  |  Branch (479:5): [True: 68.9k, False: 0]
  ------------------
  480|  68.9k|    Py_SET_TYPE(op, typeobj);
  ------------------
  |  |  217|  68.9k|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|  68.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  68.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  68.9k|    assert(_PyType_HasFeature(typeobj, Py_TPFLAGS_HEAPTYPE) || _Py_IsImmortal(typeobj));
  ------------------
  |  Branch (481:5): [True: 0, False: 68.9k]
  |  Branch (481:5): [True: 68.9k, False: 0]
  ------------------
  482|  68.9k|    _Py_INCREF_TYPE(typeobj);
  ------------------
  |  |  307|  68.9k|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  68.9k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  68.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  68.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  68.9k|    _Py_NewReference(op);
  484|  68.9k|}
floatobject.c:_PyType_HasFeature:
  284|  68.9k|_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
  285|  68.9k|    return ((type->tp_flags) & feature) != 0;
  286|  68.9k|}
frameobject.c:Py_DECREF_MORTAL:
  445|  22.6k|{
  446|  22.6k|    assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (446:5): [True: 22.6k, False: 0]
  ------------------
  447|  22.6k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  22.6k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  448|  22.6k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (448:9): [True: 7.91k, False: 14.7k]
  ------------------
  449|  7.91k|        _Py_Dealloc(op);
  450|  7.91k|    }
  451|  22.6k|}
funcobject.c:_PyObject_ResurrectStart:
  674|  2.58k|{
  675|  2.58k|    assert(Py_REFCNT(op) == 0);
  ------------------
  |  Branch (675:5): [True: 2.58k, False: 0]
  ------------------
  676|       |#ifdef Py_REF_DEBUG
  677|       |    _Py_IncRefTotal(_PyThreadState_GET());
  678|       |#endif
  679|       |#ifdef Py_GIL_DISABLED
  680|       |    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId());
  681|       |    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1);
  682|       |    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
  683|       |#else
  684|  2.58k|    Py_SET_REFCNT(op, 1);
  ------------------
  |  |  201|  2.58k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|  2.58k|#endif
  686|       |#ifdef Py_TRACE_REFS
  687|       |    _Py_ResurrectReference(op);
  688|       |#endif
  689|  2.58k|}
funcobject.c:_PyObject_ResurrectEnd:
  696|  2.58k|{
  697|       |#ifdef Py_REF_DEBUG
  698|       |    _Py_DecRefTotal(_PyThreadState_GET());
  699|       |#endif
  700|  2.58k|#ifndef Py_GIL_DISABLED
  701|  2.58k|    Py_SET_REFCNT(op, Py_REFCNT(op) - 1);
  ------------------
  |  |  201|  2.58k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|  2.58k|    if (Py_REFCNT(op) == 0) {
  ------------------
  |  |  119|  2.58k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (702:9): [True: 2.58k, False: 0]
  ------------------
  703|       |# ifdef Py_TRACE_REFS
  704|       |        _Py_ForgetReference(op);
  705|       |# endif
  706|  2.58k|        return 0;
  707|  2.58k|    }
  708|      0|    return 1;
  709|       |#else
  710|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  711|       |    Py_ssize_t shared = _Py_atomic_load_ssize_acquire(&op->ob_ref_shared);
  712|       |    if (_Py_IsOwnedByCurrentThread(op) && local == 1 && shared == 0) {
  713|       |        // Fast-path: object has a single refcount and is owned by this thread
  714|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 0);
  715|       |# ifdef Py_TRACE_REFS
  716|       |        _Py_ForgetReference(op);
  717|       |# endif
  718|       |        return 0;
  719|       |    }
  720|       |    // Slow-path: object has a shared refcount or is not owned by this thread
  721|       |    return _PyObject_ResurrectEndSlow(op);
  722|       |#endif
  723|  2.58k|}

typeobject.c:_PyObject_MallocWithType:
   40|  1.52M|{
   41|       |#ifdef Py_GIL_DISABLED
   42|       |    _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
   43|       |    struct _mimalloc_thread_state *m = &tstate->mimalloc;
   44|       |    m->current_object_heap = _PyObject_GetAllocationHeap(tstate, tp);
   45|       |#endif
   46|  1.52M|    void *mem = PyObject_Malloc(size);
   47|       |#ifdef Py_GIL_DISABLED
   48|       |    m->current_object_heap = &m->heaps[_Py_MIMALLOC_HEAP_OBJECT];
   49|       |#endif
   50|  1.52M|    return mem;
   51|  1.52M|}
gc.c:_PyObject_MallocWithType:
   40|  49.5M|{
   41|       |#ifdef Py_GIL_DISABLED
   42|       |    _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
   43|       |    struct _mimalloc_thread_state *m = &tstate->mimalloc;
   44|       |    m->current_object_heap = _PyObject_GetAllocationHeap(tstate, tp);
   45|       |#endif
   46|  49.5M|    void *mem = PyObject_Malloc(size);
   47|       |#ifdef Py_GIL_DISABLED
   48|       |    m->current_object_heap = &m->heaps[_Py_MIMALLOC_HEAP_OBJECT];
   49|       |#endif
   50|  49.5M|    return mem;
   51|  49.5M|}
gc.c:_PyObject_ReallocWithType:
   55|      2|{
   56|       |#ifdef Py_GIL_DISABLED
   57|       |    _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
   58|       |    struct _mimalloc_thread_state *m = &tstate->mimalloc;
   59|       |    m->current_object_heap = _PyObject_GetAllocationHeap(tstate, tp);
   60|       |#endif
   61|      2|    void *mem = PyObject_Realloc(ptr, size);
   62|       |#ifdef Py_GIL_DISABLED
   63|       |    m->current_object_heap = &m->heaps[_Py_MIMALLOC_HEAP_OBJECT];
   64|       |#endif
   65|      2|    return mem;
   66|      2|}

_PyOpcode_num_popped:
   37|  5.88M|int _PyOpcode_num_popped(int opcode, int oparg)  {
   38|  5.88M|    switch(opcode) {
   39|      0|        case ANNOTATIONS_PLACEHOLDER:
  ------------------
  |  |  244|      0|#define ANNOTATIONS_PLACEHOLDER                256
  ------------------
  |  Branch (39:9): [True: 0, False: 5.88M]
  ------------------
   40|      0|            return 0;
   41|   466k|        case BINARY_OP:
  ------------------
  |  |   55|   466k|#define BINARY_OP                               42
  ------------------
  |  Branch (41:9): [True: 466k, False: 5.41M]
  ------------------
   42|   466k|            return 2;
   43|      0|        case BINARY_OP_ADD_FLOAT:
  ------------------
  |  |  131|      0|#define BINARY_OP_ADD_FLOAT                    129
  ------------------
  |  Branch (43:9): [True: 0, False: 5.88M]
  ------------------
   44|      0|            return 2;
   45|      0|        case BINARY_OP_ADD_INT:
  ------------------
  |  |  132|      0|#define BINARY_OP_ADD_INT                      130
  ------------------
  |  Branch (45:9): [True: 0, False: 5.88M]
  ------------------
   46|      0|            return 2;
   47|      0|        case BINARY_OP_ADD_UNICODE:
  ------------------
  |  |  133|      0|#define BINARY_OP_ADD_UNICODE                  131
  ------------------
  |  Branch (47:9): [True: 0, False: 5.88M]
  ------------------
   48|      0|            return 2;
   49|      0|        case BINARY_OP_EXTEND:
  ------------------
  |  |  134|      0|#define BINARY_OP_EXTEND                       132
  ------------------
  |  Branch (49:9): [True: 0, False: 5.88M]
  ------------------
   50|      0|            return 2;
   51|      0|        case BINARY_OP_INPLACE_ADD_UNICODE:
  ------------------
  |  |   16|      0|#define BINARY_OP_INPLACE_ADD_UNICODE            3
  ------------------
  |  Branch (51:9): [True: 0, False: 5.88M]
  ------------------
   52|      0|            return 2;
   53|      0|        case BINARY_OP_MULTIPLY_FLOAT:
  ------------------
  |  |  135|      0|#define BINARY_OP_MULTIPLY_FLOAT               133
  ------------------
  |  Branch (53:9): [True: 0, False: 5.88M]
  ------------------
   54|      0|            return 2;
   55|      0|        case BINARY_OP_MULTIPLY_INT:
  ------------------
  |  |  136|      0|#define BINARY_OP_MULTIPLY_INT                 134
  ------------------
  |  Branch (55:9): [True: 0, False: 5.88M]
  ------------------
   56|      0|            return 2;
   57|      0|        case BINARY_OP_SUBSCR_DICT:
  ------------------
  |  |  137|      0|#define BINARY_OP_SUBSCR_DICT                  135
  ------------------
  |  Branch (57:9): [True: 0, False: 5.88M]
  ------------------
   58|      0|            return 2;
   59|      0|        case BINARY_OP_SUBSCR_GETITEM:
  ------------------
  |  |  138|      0|#define BINARY_OP_SUBSCR_GETITEM               136
  ------------------
  |  Branch (59:9): [True: 0, False: 5.88M]
  ------------------
   60|      0|            return 2;
   61|      0|        case BINARY_OP_SUBSCR_LIST_INT:
  ------------------
  |  |  139|      0|#define BINARY_OP_SUBSCR_LIST_INT              137
  ------------------
  |  Branch (61:9): [True: 0, False: 5.88M]
  ------------------
   62|      0|            return 2;
   63|      0|        case BINARY_OP_SUBSCR_LIST_SLICE:
  ------------------
  |  |  140|      0|#define BINARY_OP_SUBSCR_LIST_SLICE            138
  ------------------
  |  Branch (63:9): [True: 0, False: 5.88M]
  ------------------
   64|      0|            return 2;
   65|      0|        case BINARY_OP_SUBSCR_STR_INT:
  ------------------
  |  |  141|      0|#define BINARY_OP_SUBSCR_STR_INT               139
  ------------------
  |  Branch (65:9): [True: 0, False: 5.88M]
  ------------------
   66|      0|            return 2;
   67|      0|        case BINARY_OP_SUBSCR_TUPLE_INT:
  ------------------
  |  |  142|      0|#define BINARY_OP_SUBSCR_TUPLE_INT             140
  ------------------
  |  Branch (67:9): [True: 0, False: 5.88M]
  ------------------
   68|      0|            return 2;
   69|      0|        case BINARY_OP_SUBSCR_USTR_INT:
  ------------------
  |  |  143|      0|#define BINARY_OP_SUBSCR_USTR_INT              141
  ------------------
  |  Branch (69:9): [True: 0, False: 5.88M]
  ------------------
   70|      0|            return 2;
   71|      0|        case BINARY_OP_SUBTRACT_FLOAT:
  ------------------
  |  |  144|      0|#define BINARY_OP_SUBTRACT_FLOAT               142
  ------------------
  |  Branch (71:9): [True: 0, False: 5.88M]
  ------------------
   72|      0|            return 2;
   73|      0|        case BINARY_OP_SUBTRACT_INT:
  ------------------
  |  |  145|      0|#define BINARY_OP_SUBTRACT_INT                 143
  ------------------
  |  Branch (73:9): [True: 0, False: 5.88M]
  ------------------
   74|      0|            return 2;
   75|  1.15k|        case BINARY_SLICE:
  ------------------
  |  |   14|  1.15k|#define BINARY_SLICE                             1
  ------------------
  |  Branch (75:9): [True: 1.15k, False: 5.88M]
  ------------------
   76|  1.15k|            return 3;
   77|  2.92k|        case BUILD_INTERPOLATION:
  ------------------
  |  |   56|  2.92k|#define BUILD_INTERPOLATION                     43
  ------------------
  |  Branch (77:9): [True: 2.92k, False: 5.87M]
  ------------------
   78|  2.92k|            return 2 + (oparg & 1);
   79|  9.61k|        case BUILD_LIST:
  ------------------
  |  |   57|  9.61k|#define BUILD_LIST                              44
  ------------------
  |  Branch (79:9): [True: 9.61k, False: 5.87M]
  ------------------
   80|  9.61k|            return oparg;
   81|  25.6k|        case BUILD_MAP:
  ------------------
  |  |   58|  25.6k|#define BUILD_MAP                               45
  ------------------
  |  Branch (81:9): [True: 25.6k, False: 5.85M]
  ------------------
   82|  25.6k|            return oparg*2;
   83|  21.5k|        case BUILD_SET:
  ------------------
  |  |   59|  21.5k|#define BUILD_SET                               46
  ------------------
  |  Branch (83:9): [True: 21.5k, False: 5.86M]
  ------------------
   84|  21.5k|            return oparg;
   85|  9.92k|        case BUILD_SLICE:
  ------------------
  |  |   60|  9.92k|#define BUILD_SLICE                             47
  ------------------
  |  Branch (85:9): [True: 9.92k, False: 5.87M]
  ------------------
   86|  9.92k|            return oparg;
   87|  3.28k|        case BUILD_STRING:
  ------------------
  |  |   61|  3.28k|#define BUILD_STRING                            48
  ------------------
  |  Branch (87:9): [True: 3.28k, False: 5.87M]
  ------------------
   88|  3.28k|            return oparg;
   89|  1.88k|        case BUILD_TEMPLATE:
  ------------------
  |  |   15|  1.88k|#define BUILD_TEMPLATE                           2
  ------------------
  |  Branch (89:9): [True: 1.88k, False: 5.87M]
  ------------------
   90|  1.88k|            return 2;
   91|  67.0k|        case BUILD_TUPLE:
  ------------------
  |  |   62|  67.0k|#define BUILD_TUPLE                             49
  ------------------
  |  Branch (91:9): [True: 67.0k, False: 5.81M]
  ------------------
   92|  67.0k|            return oparg;
   93|      0|        case CACHE:
  ------------------
  |  |   13|      0|#define CACHE                                    0
  ------------------
  |  Branch (93:9): [True: 0, False: 5.88M]
  ------------------
   94|      0|            return 0;
   95|  93.3k|        case CALL:
  ------------------
  |  |   63|  93.3k|#define CALL                                    50
  ------------------
  |  Branch (95:9): [True: 93.3k, False: 5.78M]
  ------------------
   96|  93.3k|            return 2 + oparg;
   97|      0|        case CALL_ALLOC_AND_ENTER_INIT:
  ------------------
  |  |  146|      0|#define CALL_ALLOC_AND_ENTER_INIT              144
  ------------------
  |  Branch (97:9): [True: 0, False: 5.88M]
  ------------------
   98|      0|            return 2 + oparg;
   99|      0|        case CALL_BOUND_METHOD_EXACT_ARGS:
  ------------------
  |  |  147|      0|#define CALL_BOUND_METHOD_EXACT_ARGS           145
  ------------------
  |  Branch (99:9): [True: 0, False: 5.88M]
  ------------------
  100|      0|            return 2 + oparg;
  101|      0|        case CALL_BOUND_METHOD_GENERAL:
  ------------------
  |  |  148|      0|#define CALL_BOUND_METHOD_GENERAL              146
  ------------------
  |  Branch (101:9): [True: 0, False: 5.88M]
  ------------------
  102|      0|            return 2 + oparg;
  103|      0|        case CALL_BUILTIN_CLASS:
  ------------------
  |  |  149|      0|#define CALL_BUILTIN_CLASS                     147
  ------------------
  |  Branch (103:9): [True: 0, False: 5.88M]
  ------------------
  104|      0|            return 2 + oparg;
  105|      0|        case CALL_BUILTIN_FAST:
  ------------------
  |  |  150|      0|#define CALL_BUILTIN_FAST                      148
  ------------------
  |  Branch (105:9): [True: 0, False: 5.88M]
  ------------------
  106|      0|            return 2 + oparg;
  107|      0|        case CALL_BUILTIN_FAST_WITH_KEYWORDS:
  ------------------
  |  |  151|      0|#define CALL_BUILTIN_FAST_WITH_KEYWORDS        149
  ------------------
  |  Branch (107:9): [True: 0, False: 5.88M]
  ------------------
  108|      0|            return 2 + oparg;
  109|      0|        case CALL_BUILTIN_O:
  ------------------
  |  |  152|      0|#define CALL_BUILTIN_O                         150
  ------------------
  |  Branch (109:9): [True: 0, False: 5.88M]
  ------------------
  110|      0|            return 2 + oparg;
  111|      0|        case CALL_EX_NON_PY_GENERAL:
  ------------------
  |  |  153|      0|#define CALL_EX_NON_PY_GENERAL                 151
  ------------------
  |  Branch (111:9): [True: 0, False: 5.88M]
  ------------------
  112|      0|            return 4;
  113|      0|        case CALL_EX_PY:
  ------------------
  |  |  154|      0|#define CALL_EX_PY                             152
  ------------------
  |  Branch (113:9): [True: 0, False: 5.88M]
  ------------------
  114|      0|            return 4;
  115|  3.95k|        case CALL_FUNCTION_EX:
  ------------------
  |  |   17|  3.95k|#define CALL_FUNCTION_EX                         4
  ------------------
  |  Branch (115:9): [True: 3.95k, False: 5.87M]
  ------------------
  116|  3.95k|            return 4;
  117|  76.9k|        case CALL_INTRINSIC_1:
  ------------------
  |  |   64|  76.9k|#define CALL_INTRINSIC_1                        51
  ------------------
  |  Branch (117:9): [True: 76.9k, False: 5.80M]
  ------------------
  118|  76.9k|            return 1;
  119|  18.7k|        case CALL_INTRINSIC_2:
  ------------------
  |  |   65|  18.7k|#define CALL_INTRINSIC_2                        52
  ------------------
  |  Branch (119:9): [True: 18.7k, False: 5.86M]
  ------------------
  120|  18.7k|            return 2;
  121|      0|        case CALL_ISINSTANCE:
  ------------------
  |  |  155|      0|#define CALL_ISINSTANCE                        153
  ------------------
  |  Branch (121:9): [True: 0, False: 5.88M]
  ------------------
  122|      0|            return 4;
  123|    643|        case CALL_KW:
  ------------------
  |  |   66|    643|#define CALL_KW                                 53
  ------------------
  |  Branch (123:9): [True: 643, False: 5.88M]
  ------------------
  124|    643|            return 3 + oparg;
  125|      0|        case CALL_KW_BOUND_METHOD:
  ------------------
  |  |  156|      0|#define CALL_KW_BOUND_METHOD                   154
  ------------------
  |  Branch (125:9): [True: 0, False: 5.88M]
  ------------------
  126|      0|            return 3 + oparg;
  127|      0|        case CALL_KW_NON_PY:
  ------------------
  |  |  157|      0|#define CALL_KW_NON_PY                         155
  ------------------
  |  Branch (127:9): [True: 0, False: 5.88M]
  ------------------
  128|      0|            return 3 + oparg;
  129|      0|        case CALL_KW_PY:
  ------------------
  |  |  158|      0|#define CALL_KW_PY                             156
  ------------------
  |  Branch (129:9): [True: 0, False: 5.88M]
  ------------------
  130|      0|            return 3 + oparg;
  131|      0|        case CALL_LEN:
  ------------------
  |  |  159|      0|#define CALL_LEN                               157
  ------------------
  |  Branch (131:9): [True: 0, False: 5.88M]
  ------------------
  132|      0|            return 3;
  133|      0|        case CALL_LIST_APPEND:
  ------------------
  |  |  160|      0|#define CALL_LIST_APPEND                       158
  ------------------
  |  Branch (133:9): [True: 0, False: 5.88M]
  ------------------
  134|      0|            return 3;
  135|      0|        case CALL_METHOD_DESCRIPTOR_FAST:
  ------------------
  |  |  161|      0|#define CALL_METHOD_DESCRIPTOR_FAST            159
  ------------------
  |  Branch (135:9): [True: 0, False: 5.88M]
  ------------------
  136|      0|            return 2 + oparg;
  137|      0|        case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
  ------------------
  |  |  162|      0|#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 160
  ------------------
  |  Branch (137:9): [True: 0, False: 5.88M]
  ------------------
  138|      0|            return 2 + oparg;
  139|      0|        case CALL_METHOD_DESCRIPTOR_NOARGS:
  ------------------
  |  |  163|      0|#define CALL_METHOD_DESCRIPTOR_NOARGS          161
  ------------------
  |  Branch (139:9): [True: 0, False: 5.88M]
  ------------------
  140|      0|            return 2 + oparg;
  141|      0|        case CALL_METHOD_DESCRIPTOR_O:
  ------------------
  |  |  164|      0|#define CALL_METHOD_DESCRIPTOR_O               162
  ------------------
  |  Branch (141:9): [True: 0, False: 5.88M]
  ------------------
  142|      0|            return 2 + oparg;
  143|      0|        case CALL_NON_PY_GENERAL:
  ------------------
  |  |  165|      0|#define CALL_NON_PY_GENERAL                    163
  ------------------
  |  Branch (143:9): [True: 0, False: 5.88M]
  ------------------
  144|      0|            return 2 + oparg;
  145|      0|        case CALL_PY_EXACT_ARGS:
  ------------------
  |  |  166|      0|#define CALL_PY_EXACT_ARGS                     164
  ------------------
  |  Branch (145:9): [True: 0, False: 5.88M]
  ------------------
  146|      0|            return 2 + oparg;
  147|      0|        case CALL_PY_GENERAL:
  ------------------
  |  |  167|      0|#define CALL_PY_GENERAL                        165
  ------------------
  |  Branch (147:9): [True: 0, False: 5.88M]
  ------------------
  148|      0|            return 2 + oparg;
  149|      0|        case CALL_STR_1:
  ------------------
  |  |  168|      0|#define CALL_STR_1                             166
  ------------------
  |  Branch (149:9): [True: 0, False: 5.88M]
  ------------------
  150|      0|            return 3;
  151|      0|        case CALL_TUPLE_1:
  ------------------
  |  |  169|      0|#define CALL_TUPLE_1                           167
  ------------------
  |  Branch (151:9): [True: 0, False: 5.88M]
  ------------------
  152|      0|            return 3;
  153|      0|        case CALL_TYPE_1:
  ------------------
  |  |  170|      0|#define CALL_TYPE_1                            168
  ------------------
  |  Branch (153:9): [True: 0, False: 5.88M]
  ------------------
  154|      0|            return 3;
  155|  1.46k|        case CHECK_EG_MATCH:
  ------------------
  |  |   18|  1.46k|#define CHECK_EG_MATCH                           5
  ------------------
  |  Branch (155:9): [True: 1.46k, False: 5.88M]
  ------------------
  156|  1.46k|            return 2;
  157|    285|        case CHECK_EXC_MATCH:
  ------------------
  |  |   19|    285|#define CHECK_EXC_MATCH                          6
  ------------------
  |  Branch (157:9): [True: 285, False: 5.88M]
  ------------------
  158|    285|            return 2;
  159|  35.2k|        case CLEANUP_THROW:
  ------------------
  |  |   20|  35.2k|#define CLEANUP_THROW                            7
  ------------------
  |  Branch (159:9): [True: 35.2k, False: 5.84M]
  ------------------
  160|  35.2k|            return 4;
  161|   135k|        case COMPARE_OP:
  ------------------
  |  |   67|   135k|#define COMPARE_OP                              54
  ------------------
  |  Branch (161:9): [True: 135k, False: 5.74M]
  ------------------
  162|   135k|            return 2;
  163|      0|        case COMPARE_OP_FLOAT:
  ------------------
  |  |  171|      0|#define COMPARE_OP_FLOAT                       169
  ------------------
  |  Branch (163:9): [True: 0, False: 5.88M]
  ------------------
  164|      0|            return 2;
  165|      0|        case COMPARE_OP_INT:
  ------------------
  |  |  172|      0|#define COMPARE_OP_INT                         170
  ------------------
  |  Branch (165:9): [True: 0, False: 5.88M]
  ------------------
  166|      0|            return 2;
  167|      0|        case COMPARE_OP_STR:
  ------------------
  |  |  173|      0|#define COMPARE_OP_STR                         171
  ------------------
  |  Branch (167:9): [True: 0, False: 5.88M]
  ------------------
  168|      0|            return 2;
  169|  12.5k|        case CONTAINS_OP:
  ------------------
  |  |   68|  12.5k|#define CONTAINS_OP                             55
  ------------------
  |  Branch (169:9): [True: 12.5k, False: 5.86M]
  ------------------
  170|  12.5k|            return 2;
  171|      0|        case CONTAINS_OP_DICT:
  ------------------
  |  |  174|      0|#define CONTAINS_OP_DICT                       172
  ------------------
  |  Branch (171:9): [True: 0, False: 5.88M]
  ------------------
  172|      0|            return 2;
  173|      0|        case CONTAINS_OP_SET:
  ------------------
  |  |  175|      0|#define CONTAINS_OP_SET                        173
  ------------------
  |  Branch (173:9): [True: 0, False: 5.88M]
  ------------------
  174|      0|            return 2;
  175|  4.12k|        case CONVERT_VALUE:
  ------------------
  |  |   69|  4.12k|#define CONVERT_VALUE                           56
  ------------------
  |  Branch (175:9): [True: 4.12k, False: 5.87M]
  ------------------
  176|  4.12k|            return 1;
  177|   196k|        case COPY:
  ------------------
  |  |   70|   196k|#define COPY                                    57
  ------------------
  |  Branch (177:9): [True: 196k, False: 5.68M]
  ------------------
  178|   196k|            return 1 + (oparg-1);
  179|  10.9k|        case COPY_FREE_VARS:
  ------------------
  |  |   71|  10.9k|#define COPY_FREE_VARS                          58
  ------------------
  |  Branch (179:9): [True: 10.9k, False: 5.87M]
  ------------------
  180|  10.9k|            return 0;
  181|      0|        case DELETE_DEREF:
  ------------------
  |  |   72|      0|#define DELETE_DEREF                            59
  ------------------
  |  Branch (181:9): [True: 0, False: 5.88M]
  ------------------
  182|      0|            return 0;
  183|  3.12k|        case DELETE_FAST:
  ------------------
  |  |   73|  3.12k|#define DELETE_FAST                             60
  ------------------
  |  Branch (183:9): [True: 3.12k, False: 5.87M]
  ------------------
  184|  3.12k|            return 0;
  185|     98|        case DELETE_SUBSCR:
  ------------------
  |  |   21|     98|#define DELETE_SUBSCR                            8
  ------------------
  |  Branch (185:9): [True: 98, False: 5.88M]
  ------------------
  186|     98|            return 2;
  187|  1.59k|        case DICT_MERGE:
  ------------------
  |  |   74|  1.59k|#define DICT_MERGE                              61
  ------------------
  |  Branch (187:9): [True: 1.59k, False: 5.88M]
  ------------------
  188|  1.59k|            return 5 + (oparg - 1);
  189|    677|        case DICT_UPDATE:
  ------------------
  |  |   75|    677|#define DICT_UPDATE                             62
  ------------------
  |  Branch (189:9): [True: 677, False: 5.88M]
  ------------------
  190|    677|            return 2 + (oparg - 1);
  191|  1.20k|        case END_ASYNC_FOR:
  ------------------
  |  |   76|  1.20k|#define END_ASYNC_FOR                           63
  ------------------
  |  Branch (191:9): [True: 1.20k, False: 5.88M]
  ------------------
  192|  1.20k|            return 2;
  193|  4.66k|        case END_FOR:
  ------------------
  |  |   22|  4.66k|#define END_FOR                                  9
  ------------------
  |  Branch (193:9): [True: 4.66k, False: 5.87M]
  ------------------
  194|  4.66k|            return 1;
  195|  55.2k|        case END_SEND:
  ------------------
  |  |   23|  55.2k|#define END_SEND                                10
  ------------------
  |  Branch (195:9): [True: 55.2k, False: 5.82M]
  ------------------
  196|  55.2k|            return 3;
  197|      0|        case ENTER_EXECUTOR:
  ------------------
  |  |  242|      0|#define ENTER_EXECUTOR                         254
  ------------------
  |  Branch (197:9): [True: 0, False: 5.88M]
  ------------------
  198|      0|            return 0;
  199|      0|        case EXIT_INIT_CHECK:
  ------------------
  |  |   24|      0|#define EXIT_INIT_CHECK                         11
  ------------------
  |  Branch (199:9): [True: 0, False: 5.88M]
  ------------------
  200|      0|            return 1;
  201|      0|        case EXTENDED_ARG:
  ------------------
  |  |   77|      0|#define EXTENDED_ARG                            64
  ------------------
  |  Branch (201:9): [True: 0, False: 5.88M]
  ------------------
  202|      0|            return 0;
  203|  4.13k|        case FORMAT_SIMPLE:
  ------------------
  |  |   25|  4.13k|#define FORMAT_SIMPLE                           12
  ------------------
  |  Branch (203:9): [True: 4.13k, False: 5.87M]
  ------------------
  204|  4.13k|            return 1;
  205|  3.23k|        case FORMAT_WITH_SPEC:
  ------------------
  |  |   26|  3.23k|#define FORMAT_WITH_SPEC                        13
  ------------------
  |  Branch (205:9): [True: 3.23k, False: 5.87M]
  ------------------
  206|  3.23k|            return 2;
  207|  4.93k|        case FOR_ITER:
  ------------------
  |  |   78|  4.93k|#define FOR_ITER                                65
  ------------------
  |  Branch (207:9): [True: 4.93k, False: 5.87M]
  ------------------
  208|  4.93k|            return 2;
  209|      0|        case FOR_ITER_GEN:
  ------------------
  |  |  176|      0|#define FOR_ITER_GEN                           174
  ------------------
  |  Branch (209:9): [True: 0, False: 5.88M]
  ------------------
  210|      0|            return 2;
  211|      0|        case FOR_ITER_LIST:
  ------------------
  |  |  177|      0|#define FOR_ITER_LIST                          175
  ------------------
  |  Branch (211:9): [True: 0, False: 5.88M]
  ------------------
  212|      0|            return 2;
  213|      0|        case FOR_ITER_RANGE:
  ------------------
  |  |  178|      0|#define FOR_ITER_RANGE                         176
  ------------------
  |  Branch (213:9): [True: 0, False: 5.88M]
  ------------------
  214|      0|            return 2;
  215|      0|        case FOR_ITER_TUPLE:
  ------------------
  |  |  179|      0|#define FOR_ITER_TUPLE                         177
  ------------------
  |  Branch (215:9): [True: 0, False: 5.88M]
  ------------------
  216|      0|            return 2;
  217|      0|        case FOR_ITER_VIRTUAL:
  ------------------
  |  |  180|      0|#define FOR_ITER_VIRTUAL                       178
  ------------------
  |  Branch (217:9): [True: 0, False: 5.88M]
  ------------------
  218|      0|            return 2;
  219|  1.69k|        case GET_AITER:
  ------------------
  |  |   27|  1.69k|#define GET_AITER                               14
  ------------------
  |  Branch (219:9): [True: 1.69k, False: 5.87M]
  ------------------
  220|  1.69k|            return 1;
  221|  1.69k|        case GET_ANEXT:
  ------------------
  |  |   28|  1.69k|#define GET_ANEXT                               15
  ------------------
  |  Branch (221:9): [True: 1.69k, False: 5.87M]
  ------------------
  222|  1.69k|            return 1;
  223|  53.5k|        case GET_AWAITABLE:
  ------------------
  |  |   79|  53.5k|#define GET_AWAITABLE                           66
  ------------------
  |  Branch (223:9): [True: 53.5k, False: 5.82M]
  ------------------
  224|  53.5k|            return 1;
  225|  4.68k|        case GET_ITER:
  ------------------
  |  |   80|  4.68k|#define GET_ITER                                67
  ------------------
  |  Branch (225:9): [True: 4.68k, False: 5.87M]
  ------------------
  226|  4.68k|            return 1;
  227|      0|        case GET_ITER_SELF:
  ------------------
  |  |  181|      0|#define GET_ITER_SELF                          179
  ------------------
  |  Branch (227:9): [True: 0, False: 5.88M]
  ------------------
  228|      0|            return 1;
  229|      0|        case GET_ITER_VIRTUAL:
  ------------------
  |  |  182|      0|#define GET_ITER_VIRTUAL                       180
  ------------------
  |  Branch (229:9): [True: 0, False: 5.88M]
  ------------------
  230|      0|            return 1;
  231|  2.40k|        case GET_LEN:
  ------------------
  |  |   29|  2.40k|#define GET_LEN                                 16
  ------------------
  |  Branch (231:9): [True: 2.40k, False: 5.87M]
  ------------------
  232|  2.40k|            return 1;
  233|  12.3k|        case IMPORT_FROM:
  ------------------
  |  |   81|  12.3k|#define IMPORT_FROM                             68
  ------------------
  |  Branch (233:9): [True: 12.3k, False: 5.86M]
  ------------------
  234|  12.3k|            return 1;
  235|  20.8k|        case IMPORT_NAME:
  ------------------
  |  |   82|  20.8k|#define IMPORT_NAME                             69
  ------------------
  |  Branch (235:9): [True: 20.8k, False: 5.86M]
  ------------------
  236|  20.8k|            return 2;
  237|      0|        case INSTRUMENTED_CALL:
  ------------------
  |  |  237|      0|#define INSTRUMENTED_CALL                      249
  ------------------
  |  Branch (237:9): [True: 0, False: 5.88M]
  ------------------
  238|      0|            return 2 + oparg;
  239|      0|        case INSTRUMENTED_CALL_FUNCTION_EX:
  ------------------
  |  |  239|      0|#define INSTRUMENTED_CALL_FUNCTION_EX          251
  ------------------
  |  Branch (239:9): [True: 0, False: 5.88M]
  ------------------
  240|      0|            return 4;
  241|      0|        case INSTRUMENTED_CALL_KW:
  ------------------
  |  |  238|      0|#define INSTRUMENTED_CALL_KW                   250
  ------------------
  |  Branch (241:9): [True: 0, False: 5.88M]
  ------------------
  242|      0|            return 3 + oparg;
  243|      0|        case INSTRUMENTED_END_ASYNC_FOR:
  ------------------
  |  |  235|      0|#define INSTRUMENTED_END_ASYNC_FOR             247
  ------------------
  |  Branch (243:9): [True: 0, False: 5.88M]
  ------------------
  244|      0|            return 2;
  245|      0|        case INSTRUMENTED_END_FOR:
  ------------------
  |  |  221|      0|#define INSTRUMENTED_END_FOR                   233
  ------------------
  |  Branch (245:9): [True: 0, False: 5.88M]
  ------------------
  246|      0|            return 3;
  247|      0|        case INSTRUMENTED_END_SEND:
  ------------------
  |  |  223|      0|#define INSTRUMENTED_END_SEND                  235
  ------------------
  |  Branch (247:9): [True: 0, False: 5.88M]
  ------------------
  248|      0|            return 3;
  249|      0|        case INSTRUMENTED_FOR_ITER:
  ------------------
  |  |  224|      0|#define INSTRUMENTED_FOR_ITER                  236
  ------------------
  |  Branch (249:9): [True: 0, False: 5.88M]
  ------------------
  250|      0|            return 2;
  251|      0|        case INSTRUMENTED_INSTRUCTION:
  ------------------
  |  |  225|      0|#define INSTRUMENTED_INSTRUCTION               237
  ------------------
  |  Branch (251:9): [True: 0, False: 5.88M]
  ------------------
  252|      0|            return 0;
  253|      0|        case INSTRUMENTED_JUMP_BACKWARD:
  ------------------
  |  |  240|      0|#define INSTRUMENTED_JUMP_BACKWARD             252
  ------------------
  |  Branch (253:9): [True: 0, False: 5.88M]
  ------------------
  254|      0|            return 0;
  255|      0|        case INSTRUMENTED_JUMP_FORWARD:
  ------------------
  |  |  226|      0|#define INSTRUMENTED_JUMP_FORWARD              238
  ------------------
  |  Branch (255:9): [True: 0, False: 5.88M]
  ------------------
  256|      0|            return 0;
  257|      0|        case INSTRUMENTED_LINE:
  ------------------
  |  |  241|      0|#define INSTRUMENTED_LINE                      253
  ------------------
  |  Branch (257:9): [True: 0, False: 5.88M]
  ------------------
  258|      0|            return 0;
  259|      0|        case INSTRUMENTED_LOAD_SUPER_ATTR:
  ------------------
  |  |  236|      0|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  ------------------
  |  Branch (259:9): [True: 0, False: 5.88M]
  ------------------
  260|      0|            return 3;
  261|      0|        case INSTRUMENTED_NOT_TAKEN:
  ------------------
  |  |  227|      0|#define INSTRUMENTED_NOT_TAKEN                 239
  ------------------
  |  Branch (261:9): [True: 0, False: 5.88M]
  ------------------
  262|      0|            return 0;
  263|      0|        case INSTRUMENTED_POP_ITER:
  ------------------
  |  |  222|      0|#define INSTRUMENTED_POP_ITER                  234
  ------------------
  |  Branch (263:9): [True: 0, False: 5.88M]
  ------------------
  264|      0|            return 2;
  265|      0|        case INSTRUMENTED_POP_JUMP_IF_FALSE:
  ------------------
  |  |  229|      0|#define INSTRUMENTED_POP_JUMP_IF_FALSE         241
  ------------------
  |  Branch (265:9): [True: 0, False: 5.88M]
  ------------------
  266|      0|            return 1;
  267|      0|        case INSTRUMENTED_POP_JUMP_IF_NONE:
  ------------------
  |  |  230|      0|#define INSTRUMENTED_POP_JUMP_IF_NONE          242
  ------------------
  |  Branch (267:9): [True: 0, False: 5.88M]
  ------------------
  268|      0|            return 1;
  269|      0|        case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  231|      0|#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE      243
  ------------------
  |  Branch (269:9): [True: 0, False: 5.88M]
  ------------------
  270|      0|            return 1;
  271|      0|        case INSTRUMENTED_POP_JUMP_IF_TRUE:
  ------------------
  |  |  228|      0|#define INSTRUMENTED_POP_JUMP_IF_TRUE          240
  ------------------
  |  Branch (271:9): [True: 0, False: 5.88M]
  ------------------
  272|      0|            return 1;
  273|      0|        case INSTRUMENTED_RESUME:
  ------------------
  |  |  232|      0|#define INSTRUMENTED_RESUME                    244
  ------------------
  |  Branch (273:9): [True: 0, False: 5.88M]
  ------------------
  274|      0|            return 0;
  275|      0|        case INSTRUMENTED_RETURN_VALUE:
  ------------------
  |  |  233|      0|#define INSTRUMENTED_RETURN_VALUE              245
  ------------------
  |  Branch (275:9): [True: 0, False: 5.88M]
  ------------------
  276|      0|            return 1;
  277|      0|        case INSTRUMENTED_YIELD_VALUE:
  ------------------
  |  |  234|      0|#define INSTRUMENTED_YIELD_VALUE               246
  ------------------
  |  Branch (277:9): [True: 0, False: 5.88M]
  ------------------
  278|      0|            return 1;
  279|      0|        case INTERPRETER_EXIT:
  ------------------
  |  |   31|      0|#define INTERPRETER_EXIT                        18
  ------------------
  |  Branch (279:9): [True: 0, False: 5.88M]
  ------------------
  280|      0|            return 1;
  281|  7.88k|        case IS_OP:
  ------------------
  |  |   83|  7.88k|#define IS_OP                                   70
  ------------------
  |  Branch (281:9): [True: 7.88k, False: 5.87M]
  ------------------
  282|  7.88k|            return 2;
  283|  20.8k|        case JUMP:
  ------------------
  |  |  245|  20.8k|#define JUMP                                   257
  ------------------
  |  Branch (283:9): [True: 20.8k, False: 5.86M]
  ------------------
  284|  20.8k|            return 0;
  285|      0|        case JUMP_BACKWARD:
  ------------------
  |  |   84|      0|#define JUMP_BACKWARD                           71
  ------------------
  |  Branch (285:9): [True: 0, False: 5.88M]
  ------------------
  286|      0|            return 0;
  287|      0|        case JUMP_BACKWARD_JIT:
  ------------------
  |  |  183|      0|#define JUMP_BACKWARD_JIT                      181
  ------------------
  |  Branch (287:9): [True: 0, False: 5.88M]
  ------------------
  288|      0|            return 0;
  289|      0|        case JUMP_BACKWARD_NO_INTERRUPT:
  ------------------
  |  |   85|      0|#define JUMP_BACKWARD_NO_INTERRUPT              72
  ------------------
  |  Branch (289:9): [True: 0, False: 5.88M]
  ------------------
  290|      0|            return 0;
  291|      0|        case JUMP_BACKWARD_NO_JIT:
  ------------------
  |  |  184|      0|#define JUMP_BACKWARD_NO_JIT                   182
  ------------------
  |  Branch (291:9): [True: 0, False: 5.88M]
  ------------------
  292|      0|            return 0;
  293|      0|        case JUMP_FORWARD:
  ------------------
  |  |   86|      0|#define JUMP_FORWARD                            73
  ------------------
  |  Branch (293:9): [True: 0, False: 5.88M]
  ------------------
  294|      0|            return 0;
  295|  1.04k|        case JUMP_IF_FALSE:
  ------------------
  |  |  246|  1.04k|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (295:9): [True: 1.04k, False: 5.88M]
  ------------------
  296|  1.04k|            return 1;
  297|    898|        case JUMP_IF_TRUE:
  ------------------
  |  |  247|    898|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (297:9): [True: 898, False: 5.88M]
  ------------------
  298|    898|            return 1;
  299|   180k|        case JUMP_NO_INTERRUPT:
  ------------------
  |  |  248|   180k|#define JUMP_NO_INTERRUPT                      260
  ------------------
  |  Branch (299:9): [True: 180k, False: 5.70M]
  ------------------
  300|   180k|            return 0;
  301|  61.1k|        case LIST_APPEND:
  ------------------
  |  |   87|  61.1k|#define LIST_APPEND                             74
  ------------------
  |  Branch (301:9): [True: 61.1k, False: 5.82M]
  ------------------
  302|  61.1k|            return 2 + (oparg-1);
  303|  5.41k|        case LIST_EXTEND:
  ------------------
  |  |   88|  5.41k|#define LIST_EXTEND                             75
  ------------------
  |  Branch (303:9): [True: 5.41k, False: 5.87M]
  ------------------
  304|  5.41k|            return 2 + (oparg-1);
  305|  14.1k|        case LOAD_ATTR:
  ------------------
  |  |   89|  14.1k|#define LOAD_ATTR                               76
  ------------------
  |  Branch (305:9): [True: 14.1k, False: 5.86M]
  ------------------
  306|  14.1k|            return 1;
  307|      0|        case LOAD_ATTR_CLASS:
  ------------------
  |  |  185|      0|#define LOAD_ATTR_CLASS                        183
  ------------------
  |  Branch (307:9): [True: 0, False: 5.88M]
  ------------------
  308|      0|            return 1;
  309|      0|        case LOAD_ATTR_CLASS_WITH_METACLASS_CHECK:
  ------------------
  |  |  186|      0|#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   184
  ------------------
  |  Branch (309:9): [True: 0, False: 5.88M]
  ------------------
  310|      0|            return 1;
  311|      0|        case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
  ------------------
  |  |  187|      0|#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      185
  ------------------
  |  Branch (311:9): [True: 0, False: 5.88M]
  ------------------
  312|      0|            return 1;
  313|      0|        case LOAD_ATTR_INSTANCE_VALUE:
  ------------------
  |  |  188|      0|#define LOAD_ATTR_INSTANCE_VALUE               186
  ------------------
  |  Branch (313:9): [True: 0, False: 5.88M]
  ------------------
  314|      0|            return 1;
  315|      0|        case LOAD_ATTR_METHOD_LAZY_DICT:
  ------------------
  |  |  189|      0|#define LOAD_ATTR_METHOD_LAZY_DICT             187
  ------------------
  |  Branch (315:9): [True: 0, False: 5.88M]
  ------------------
  316|      0|            return 1;
  317|      0|        case LOAD_ATTR_METHOD_NO_DICT:
  ------------------
  |  |  190|      0|#define LOAD_ATTR_METHOD_NO_DICT               188
  ------------------
  |  Branch (317:9): [True: 0, False: 5.88M]
  ------------------
  318|      0|            return 1;
  319|      0|        case LOAD_ATTR_METHOD_WITH_VALUES:
  ------------------
  |  |  191|      0|#define LOAD_ATTR_METHOD_WITH_VALUES           189
  ------------------
  |  Branch (319:9): [True: 0, False: 5.88M]
  ------------------
  320|      0|            return 1;
  321|      0|        case LOAD_ATTR_MODULE:
  ------------------
  |  |  192|      0|#define LOAD_ATTR_MODULE                       190
  ------------------
  |  Branch (321:9): [True: 0, False: 5.88M]
  ------------------
  322|      0|            return 1;
  323|      0|        case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
  ------------------
  |  |  193|      0|#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        191
  ------------------
  |  Branch (323:9): [True: 0, False: 5.88M]
  ------------------
  324|      0|            return 1;
  325|      0|        case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
  ------------------
  |  |  194|      0|#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    192
  ------------------
  |  Branch (325:9): [True: 0, False: 5.88M]
  ------------------
  326|      0|            return 1;
  327|      0|        case LOAD_ATTR_PROPERTY:
  ------------------
  |  |  195|      0|#define LOAD_ATTR_PROPERTY                     193
  ------------------
  |  Branch (327:9): [True: 0, False: 5.88M]
  ------------------
  328|      0|            return 1;
  329|      0|        case LOAD_ATTR_SLOT:
  ------------------
  |  |  196|      0|#define LOAD_ATTR_SLOT                         194
  ------------------
  |  Branch (329:9): [True: 0, False: 5.88M]
  ------------------
  330|      0|            return 1;
  331|      0|        case LOAD_ATTR_WITH_HINT:
  ------------------
  |  |  197|      0|#define LOAD_ATTR_WITH_HINT                    195
  ------------------
  |  Branch (331:9): [True: 0, False: 5.88M]
  ------------------
  332|      0|            return 1;
  333|  25.0k|        case LOAD_BUILD_CLASS:
  ------------------
  |  |   32|  25.0k|#define LOAD_BUILD_CLASS                        19
  ------------------
  |  Branch (333:9): [True: 25.0k, False: 5.85M]
  ------------------
  334|  25.0k|            return 0;
  335|  18.4k|        case LOAD_CLOSURE:
  ------------------
  |  |  249|  18.4k|#define LOAD_CLOSURE                           261
  ------------------
  |  Branch (335:9): [True: 18.4k, False: 5.86M]
  ------------------
  336|  18.4k|            return 0;
  337|   307k|        case LOAD_COMMON_CONSTANT:
  ------------------
  |  |   90|   307k|#define LOAD_COMMON_CONSTANT                    77
  ------------------
  |  Branch (337:9): [True: 307k, False: 5.57M]
  ------------------
  338|   307k|            return 0;
  339|   627k|        case LOAD_CONST:
  ------------------
  |  |   91|   627k|#define LOAD_CONST                              78
  ------------------
  |  Branch (339:9): [True: 627k, False: 5.25M]
  ------------------
  340|   627k|            return 0;
  341|  37.7k|        case LOAD_DEREF:
  ------------------
  |  |   92|  37.7k|#define LOAD_DEREF                              79
  ------------------
  |  Branch (341:9): [True: 37.7k, False: 5.84M]
  ------------------
  342|  37.7k|            return 0;
  343|  18.9k|        case LOAD_FAST:
  ------------------
  |  |   93|  18.9k|#define LOAD_FAST                               80
  ------------------
  |  Branch (343:9): [True: 18.9k, False: 5.86M]
  ------------------
  344|  18.9k|            return 0;
  345|  6.54k|        case LOAD_FAST_AND_CLEAR:
  ------------------
  |  |   94|  6.54k|#define LOAD_FAST_AND_CLEAR                     81
  ------------------
  |  Branch (345:9): [True: 6.54k, False: 5.87M]
  ------------------
  346|  6.54k|            return 0;
  347|      0|        case LOAD_FAST_BORROW:
  ------------------
  |  |   95|      0|#define LOAD_FAST_BORROW                        82
  ------------------
  |  Branch (347:9): [True: 0, False: 5.88M]
  ------------------
  348|      0|            return 0;
  349|      0|        case LOAD_FAST_BORROW_LOAD_FAST_BORROW:
  ------------------
  |  |   96|      0|#define LOAD_FAST_BORROW_LOAD_FAST_BORROW       83
  ------------------
  |  Branch (349:9): [True: 0, False: 5.88M]
  ------------------
  350|      0|            return 0;
  351|  8.21k|        case LOAD_FAST_CHECK:
  ------------------
  |  |   97|  8.21k|#define LOAD_FAST_CHECK                         84
  ------------------
  |  Branch (351:9): [True: 8.21k, False: 5.87M]
  ------------------
  352|  8.21k|            return 0;
  353|  2.83k|        case LOAD_FAST_LOAD_FAST:
  ------------------
  |  |   98|  2.83k|#define LOAD_FAST_LOAD_FAST                     85
  ------------------
  |  Branch (353:9): [True: 2.83k, False: 5.87M]
  ------------------
  354|  2.83k|            return 0;
  355|  5.68k|        case LOAD_FROM_DICT_OR_DEREF:
  ------------------
  |  |   99|  5.68k|#define LOAD_FROM_DICT_OR_DEREF                 86
  ------------------
  |  Branch (355:9): [True: 5.68k, False: 5.87M]
  ------------------
  356|  5.68k|            return 1;
  357|  27.2k|        case LOAD_FROM_DICT_OR_GLOBALS:
  ------------------
  |  |  100|  27.2k|#define LOAD_FROM_DICT_OR_GLOBALS               87
  ------------------
  |  Branch (357:9): [True: 27.2k, False: 5.85M]
  ------------------
  358|  27.2k|            return 1;
  359|   158k|        case LOAD_GLOBAL:
  ------------------
  |  |  101|   158k|#define LOAD_GLOBAL                             88
  ------------------
  |  Branch (359:9): [True: 158k, False: 5.72M]
  ------------------
  360|   158k|            return 0;
  361|      0|        case LOAD_GLOBAL_BUILTIN:
  ------------------
  |  |  198|      0|#define LOAD_GLOBAL_BUILTIN                    196
  ------------------
  |  Branch (361:9): [True: 0, False: 5.88M]
  ------------------
  362|      0|            return 0;
  363|      0|        case LOAD_GLOBAL_MODULE:
  ------------------
  |  |  199|      0|#define LOAD_GLOBAL_MODULE                     197
  ------------------
  |  Branch (363:9): [True: 0, False: 5.88M]
  ------------------
  364|      0|            return 0;
  365|  17.4k|        case LOAD_LOCALS:
  ------------------
  |  |   33|  17.4k|#define LOAD_LOCALS                             20
  ------------------
  |  Branch (365:9): [True: 17.4k, False: 5.86M]
  ------------------
  366|  17.4k|            return 0;
  367|   302k|        case LOAD_NAME:
  ------------------
  |  |  102|   302k|#define LOAD_NAME                               89
  ------------------
  |  Branch (367:9): [True: 302k, False: 5.57M]
  ------------------
  368|   302k|            return 0;
  369|   265k|        case LOAD_SMALL_INT:
  ------------------
  |  |  103|   265k|#define LOAD_SMALL_INT                          90
  ------------------
  |  Branch (369:9): [True: 265k, False: 5.61M]
  ------------------
  370|   265k|            return 0;
  371|  22.8k|        case LOAD_SPECIAL:
  ------------------
  |  |  104|  22.8k|#define LOAD_SPECIAL                            91
  ------------------
  |  Branch (371:9): [True: 22.8k, False: 5.85M]
  ------------------
  372|  22.8k|            return 1;
  373|    521|        case LOAD_SUPER_ATTR:
  ------------------
  |  |  105|    521|#define LOAD_SUPER_ATTR                         92
  ------------------
  |  Branch (373:9): [True: 521, False: 5.88M]
  ------------------
  374|    521|            return 3;
  375|      0|        case LOAD_SUPER_ATTR_ATTR:
  ------------------
  |  |  200|      0|#define LOAD_SUPER_ATTR_ATTR                   198
  ------------------
  |  Branch (375:9): [True: 0, False: 5.88M]
  ------------------
  376|      0|            return 3;
  377|      0|        case LOAD_SUPER_ATTR_METHOD:
  ------------------
  |  |  201|      0|#define LOAD_SUPER_ATTR_METHOD                 199
  ------------------
  |  Branch (377:9): [True: 0, False: 5.88M]
  ------------------
  378|      0|            return 3;
  379|  11.9k|        case MAKE_CELL:
  ------------------
  |  |  106|  11.9k|#define MAKE_CELL                               93
  ------------------
  |  Branch (379:9): [True: 11.9k, False: 5.86M]
  ------------------
  380|  11.9k|            return 0;
  381|  83.0k|        case MAKE_FUNCTION:
  ------------------
  |  |   34|  83.0k|#define MAKE_FUNCTION                           21
  ------------------
  |  Branch (381:9): [True: 83.0k, False: 5.79M]
  ------------------
  382|  83.0k|            return 1;
  383|  1.02k|        case MAP_ADD:
  ------------------
  |  |  107|  1.02k|#define MAP_ADD                                 94
  ------------------
  |  Branch (383:9): [True: 1.02k, False: 5.88M]
  ------------------
  384|  1.02k|            return 3 + (oparg - 1);
  385|     40|        case MATCH_CLASS:
  ------------------
  |  |  108|     40|#define MATCH_CLASS                             95
  ------------------
  |  Branch (385:9): [True: 40, False: 5.88M]
  ------------------
  386|     40|            return 3;
  387|     10|        case MATCH_KEYS:
  ------------------
  |  |   35|     10|#define MATCH_KEYS                              22
  ------------------
  |  Branch (387:9): [True: 10, False: 5.88M]
  ------------------
  388|     10|            return 2;
  389|     16|        case MATCH_MAPPING:
  ------------------
  |  |   36|     16|#define MATCH_MAPPING                           23
  ------------------
  |  Branch (389:9): [True: 16, False: 5.88M]
  ------------------
  390|     16|            return 1;
  391|  1.55k|        case MATCH_SEQUENCE:
  ------------------
  |  |   37|  1.55k|#define MATCH_SEQUENCE                          24
  ------------------
  |  Branch (391:9): [True: 1.55k, False: 5.88M]
  ------------------
  392|  1.55k|            return 1;
  393|  8.36k|        case NOP:
  ------------------
  |  |   38|  8.36k|#define NOP                                     25
  ------------------
  |  Branch (393:9): [True: 8.36k, False: 5.87M]
  ------------------
  394|  8.36k|            return 0;
  395|  66.6k|        case NOT_TAKEN:
  ------------------
  |  |   39|  66.6k|#define NOT_TAKEN                               26
  ------------------
  |  Branch (395:9): [True: 66.6k, False: 5.81M]
  ------------------
  396|  66.6k|            return 0;
  397|      0|        case POP_BLOCK:
  ------------------
  |  |  250|      0|#define POP_BLOCK                              262
  ------------------
  |  Branch (397:9): [True: 0, False: 5.88M]
  ------------------
  398|      0|            return 0;
  399|  31.1k|        case POP_EXCEPT:
  ------------------
  |  |   40|  31.1k|#define POP_EXCEPT                              27
  ------------------
  |  Branch (399:9): [True: 31.1k, False: 5.85M]
  ------------------
  400|  31.1k|            return 1;
  401|  4.66k|        case POP_ITER:
  ------------------
  |  |   41|  4.66k|#define POP_ITER                                28
  ------------------
  |  Branch (401:9): [True: 4.66k, False: 5.87M]
  ------------------
  402|  4.66k|            return 2;
  403|   211k|        case POP_JUMP_IF_FALSE:
  ------------------
  |  |  109|   211k|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (403:9): [True: 211k, False: 5.67M]
  ------------------
  404|   211k|            return 1;
  405|  3.00k|        case POP_JUMP_IF_NONE:
  ------------------
  |  |  110|  3.00k|#define POP_JUMP_IF_NONE                        97
  ------------------
  |  Branch (405:9): [True: 3.00k, False: 5.87M]
  ------------------
  406|  3.00k|            return 1;
  407|  2.31k|        case POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  111|  2.31k|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  |  Branch (407:9): [True: 2.31k, False: 5.87M]
  ------------------
  408|  2.31k|            return 1;
  409|  30.7k|        case POP_JUMP_IF_TRUE:
  ------------------
  |  |  112|  30.7k|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (409:9): [True: 30.7k, False: 5.85M]
  ------------------
  410|  30.7k|            return 1;
  411|   388k|        case POP_TOP:
  ------------------
  |  |   42|   388k|#define POP_TOP                                 29
  ------------------
  |  Branch (411:9): [True: 388k, False: 5.49M]
  ------------------
  412|   388k|            return 1;
  413|  15.8k|        case PUSH_EXC_INFO:
  ------------------
  |  |   43|  15.8k|#define PUSH_EXC_INFO                           30
  ------------------
  |  Branch (413:9): [True: 15.8k, False: 5.86M]
  ------------------
  414|  15.8k|            return 1;
  415|   103k|        case PUSH_NULL:
  ------------------
  |  |   44|   103k|#define PUSH_NULL                               31
  ------------------
  |  Branch (415:9): [True: 103k, False: 5.77M]
  ------------------
  416|   103k|            return 0;
  417|  28.6k|        case RAISE_VARARGS:
  ------------------
  |  |  113|  28.6k|#define RAISE_VARARGS                          100
  ------------------
  |  Branch (417:9): [True: 28.6k, False: 5.85M]
  ------------------
  418|  28.6k|            return oparg;
  419|  37.3k|        case RERAISE:
  ------------------
  |  |  114|  37.3k|#define RERAISE                                101
  ------------------
  |  Branch (419:9): [True: 37.3k, False: 5.84M]
  ------------------
  420|  37.3k|            return 1 + oparg;
  421|      0|        case RESERVED:
  ------------------
  |  |   30|      0|#define RESERVED                                17
  ------------------
  |  Branch (421:9): [True: 0, False: 5.88M]
  ------------------
  422|      0|            return 0;
  423|   162k|        case RESUME:
  ------------------
  |  |  130|   162k|#define RESUME                                 128
  ------------------
  |  Branch (423:9): [True: 162k, False: 5.71M]
  ------------------
  424|   162k|            return 0;
  425|      0|        case RESUME_CHECK:
  ------------------
  |  |  202|      0|#define RESUME_CHECK                           200
  ------------------
  |  Branch (425:9): [True: 0, False: 5.88M]
  ------------------
  426|      0|            return 0;
  427|      0|        case RESUME_CHECK_JIT:
  ------------------
  |  |  203|      0|#define RESUME_CHECK_JIT                       201
  ------------------
  |  Branch (427:9): [True: 0, False: 5.88M]
  ------------------
  428|      0|            return 0;
  429|  5.92k|        case RETURN_GENERATOR:
  ------------------
  |  |   45|  5.92k|#define RETURN_GENERATOR                        32
  ------------------
  |  Branch (429:9): [True: 5.92k, False: 5.87M]
  ------------------
  430|  5.92k|            return 0;
  431|   112k|        case RETURN_VALUE:
  ------------------
  |  |   46|   112k|#define RETURN_VALUE                            33
  ------------------
  |  Branch (431:9): [True: 112k, False: 5.76M]
  ------------------
  432|   112k|            return 1;
  433|  70.5k|        case SEND:
  ------------------
  |  |  115|  70.5k|#define SEND                                   102
  ------------------
  |  Branch (433:9): [True: 70.5k, False: 5.81M]
  ------------------
  434|  70.5k|            return 3;
  435|      0|        case SEND_ASYNC_GEN:
  ------------------
  |  |  204|      0|#define SEND_ASYNC_GEN                         202
  ------------------
  |  Branch (435:9): [True: 0, False: 5.88M]
  ------------------
  436|      0|            return 3;
  437|      0|        case SEND_GEN:
  ------------------
  |  |  205|      0|#define SEND_GEN                               203
  ------------------
  |  Branch (437:9): [True: 0, False: 5.88M]
  ------------------
  438|      0|            return 3;
  439|      0|        case SEND_VIRTUAL:
  ------------------
  |  |  206|      0|#define SEND_VIRTUAL                           204
  ------------------
  |  Branch (439:9): [True: 0, False: 5.88M]
  ------------------
  440|      0|            return 3;
  441|  3.98k|        case SETUP_ANNOTATIONS:
  ------------------
  |  |   47|  3.98k|#define SETUP_ANNOTATIONS                       34
  ------------------
  |  Branch (441:9): [True: 3.98k, False: 5.87M]
  ------------------
  442|  3.98k|            return 0;
  443|  40.4k|        case SETUP_CLEANUP:
  ------------------
  |  |  251|  40.4k|#define SETUP_CLEANUP                          263
  ------------------
  |  Branch (443:9): [True: 40.4k, False: 5.84M]
  ------------------
  444|  40.4k|            return 0;
  445|  86.3k|        case SETUP_FINALLY:
  ------------------
  |  |  252|  86.3k|#define SETUP_FINALLY                          264
  ------------------
  |  Branch (445:9): [True: 86.3k, False: 5.79M]
  ------------------
  446|  86.3k|            return 0;
  447|  22.8k|        case SETUP_WITH:
  ------------------
  |  |  253|  22.8k|#define SETUP_WITH                             265
  ------------------
  |  Branch (447:9): [True: 22.8k, False: 5.85M]
  ------------------
  448|  22.8k|            return 0;
  449|  7.68k|        case SET_ADD:
  ------------------
  |  |  116|  7.68k|#define SET_ADD                                103
  ------------------
  |  Branch (449:9): [True: 7.68k, False: 5.87M]
  ------------------
  450|  7.68k|            return 2 + (oparg-1);
  451|  37.5k|        case SET_FUNCTION_ATTRIBUTE:
  ------------------
  |  |  117|  37.5k|#define SET_FUNCTION_ATTRIBUTE                 104
  ------------------
  |  Branch (451:9): [True: 37.5k, False: 5.84M]
  ------------------
  452|  37.5k|            return 2;
  453|  18.3k|        case SET_UPDATE:
  ------------------
  |  |  118|  18.3k|#define SET_UPDATE                             105
  ------------------
  |  Branch (453:9): [True: 18.3k, False: 5.86M]
  ------------------
  454|  18.3k|            return 2 + (oparg-1);
  455|  5.83k|        case STORE_ATTR:
  ------------------
  |  |  119|  5.83k|#define STORE_ATTR                             106
  ------------------
  |  Branch (455:9): [True: 5.83k, False: 5.87M]
  ------------------
  456|  5.83k|            return 2;
  457|      0|        case STORE_ATTR_INSTANCE_VALUE:
  ------------------
  |  |  207|      0|#define STORE_ATTR_INSTANCE_VALUE              205
  ------------------
  |  Branch (457:9): [True: 0, False: 5.88M]
  ------------------
  458|      0|            return 2;
  459|      0|        case STORE_ATTR_SLOT:
  ------------------
  |  |  208|      0|#define STORE_ATTR_SLOT                        206
  ------------------
  |  Branch (459:9): [True: 0, False: 5.88M]
  ------------------
  460|      0|            return 2;
  461|      0|        case STORE_ATTR_WITH_HINT:
  ------------------
  |  |  209|      0|#define STORE_ATTR_WITH_HINT                   207
  ------------------
  |  Branch (461:9): [True: 0, False: 5.88M]
  ------------------
  462|      0|            return 2;
  463|  19.8k|        case STORE_DEREF:
  ------------------
  |  |  120|  19.8k|#define STORE_DEREF                            107
  ------------------
  |  Branch (463:9): [True: 19.8k, False: 5.86M]
  ------------------
  464|  19.8k|            return 1;
  465|  76.0k|        case STORE_FAST:
  ------------------
  |  |  121|  76.0k|#define STORE_FAST                             108
  ------------------
  |  Branch (465:9): [True: 76.0k, False: 5.80M]
  ------------------
  466|  76.0k|            return 1;
  467|  3.20k|        case STORE_FAST_LOAD_FAST:
  ------------------
  |  |  122|  3.20k|#define STORE_FAST_LOAD_FAST                   109
  ------------------
  |  Branch (467:9): [True: 3.20k, False: 5.87M]
  ------------------
  468|  3.20k|            return 1;
  469|  13.0k|        case STORE_FAST_MAYBE_NULL:
  ------------------
  |  |  254|  13.0k|#define STORE_FAST_MAYBE_NULL                  266
  ------------------
  |  Branch (469:9): [True: 13.0k, False: 5.86M]
  ------------------
  470|  13.0k|            return 1;
  471|  14.9k|        case STORE_FAST_STORE_FAST:
  ------------------
  |  |  123|  14.9k|#define STORE_FAST_STORE_FAST                  110
  ------------------
  |  Branch (471:9): [True: 14.9k, False: 5.86M]
  ------------------
  472|  14.9k|            return 2;
  473|  1.07k|        case STORE_GLOBAL:
  ------------------
  |  |  124|  1.07k|#define STORE_GLOBAL                           111
  ------------------
  |  Branch (473:9): [True: 1.07k, False: 5.88M]
  ------------------
  474|  1.07k|            return 1;
  475|   238k|        case STORE_NAME:
  ------------------
  |  |  125|   238k|#define STORE_NAME                             112
  ------------------
  |  Branch (475:9): [True: 238k, False: 5.64M]
  ------------------
  476|   238k|            return 1;
  477|    524|        case STORE_SLICE:
  ------------------
  |  |   48|    524|#define STORE_SLICE                             35
  ------------------
  |  Branch (477:9): [True: 524, False: 5.88M]
  ------------------
  478|    524|            return 4;
  479|  41.3k|        case STORE_SUBSCR:
  ------------------
  |  |   49|  41.3k|#define STORE_SUBSCR                            36
  ------------------
  |  Branch (479:9): [True: 41.3k, False: 5.84M]
  ------------------
  480|  41.3k|            return 3;
  481|      0|        case STORE_SUBSCR_DICT:
  ------------------
  |  |  210|      0|#define STORE_SUBSCR_DICT                      208
  ------------------
  |  Branch (481:9): [True: 0, False: 5.88M]
  ------------------
  482|      0|            return 3;
  483|      0|        case STORE_SUBSCR_LIST_INT:
  ------------------
  |  |  211|      0|#define STORE_SUBSCR_LIST_INT                  209
  ------------------
  |  Branch (483:9): [True: 0, False: 5.88M]
  ------------------
  484|      0|            return 3;
  485|  95.8k|        case SWAP:
  ------------------
  |  |  126|  95.8k|#define SWAP                                   113
  ------------------
  |  Branch (485:9): [True: 95.8k, False: 5.78M]
  ------------------
  486|  95.8k|            return 2 + (oparg-2);
  487|   107k|        case TO_BOOL:
  ------------------
  |  |   50|   107k|#define TO_BOOL                                 37
  ------------------
  |  Branch (487:9): [True: 107k, False: 5.77M]
  ------------------
  488|   107k|            return 1;
  489|      0|        case TO_BOOL_ALWAYS_TRUE:
  ------------------
  |  |  212|      0|#define TO_BOOL_ALWAYS_TRUE                    210
  ------------------
  |  Branch (489:9): [True: 0, False: 5.88M]
  ------------------
  490|      0|            return 1;
  491|      0|        case TO_BOOL_BOOL:
  ------------------
  |  |  213|      0|#define TO_BOOL_BOOL                           211
  ------------------
  |  Branch (491:9): [True: 0, False: 5.88M]
  ------------------
  492|      0|            return 1;
  493|      0|        case TO_BOOL_INT:
  ------------------
  |  |  214|      0|#define TO_BOOL_INT                            212
  ------------------
  |  Branch (493:9): [True: 0, False: 5.88M]
  ------------------
  494|      0|            return 1;
  495|      0|        case TO_BOOL_LIST:
  ------------------
  |  |  215|      0|#define TO_BOOL_LIST                           213
  ------------------
  |  Branch (495:9): [True: 0, False: 5.88M]
  ------------------
  496|      0|            return 1;
  497|      0|        case TO_BOOL_NONE:
  ------------------
  |  |  216|      0|#define TO_BOOL_NONE                           214
  ------------------
  |  Branch (497:9): [True: 0, False: 5.88M]
  ------------------
  498|      0|            return 1;
  499|      0|        case TO_BOOL_STR:
  ------------------
  |  |  217|      0|#define TO_BOOL_STR                            215
  ------------------
  |  Branch (499:9): [True: 0, False: 5.88M]
  ------------------
  500|      0|            return 1;
  501|      0|        case TRACE_RECORD:
  ------------------
  |  |  243|      0|#define TRACE_RECORD                           255
  ------------------
  |  Branch (501:9): [True: 0, False: 5.88M]
  ------------------
  502|      0|            return 0;
  503|  1.35k|        case UNARY_INVERT:
  ------------------
  |  |   51|  1.35k|#define UNARY_INVERT                            38
  ------------------
  |  Branch (503:9): [True: 1.35k, False: 5.88M]
  ------------------
  504|  1.35k|            return 1;
  505|  26.6k|        case UNARY_NEGATIVE:
  ------------------
  |  |   52|  26.6k|#define UNARY_NEGATIVE                          39
  ------------------
  |  Branch (505:9): [True: 26.6k, False: 5.85M]
  ------------------
  506|  26.6k|            return 1;
  507|    142|        case UNARY_NOT:
  ------------------
  |  |   53|    142|#define UNARY_NOT                               40
  ------------------
  |  Branch (507:9): [True: 142, False: 5.88M]
  ------------------
  508|    142|            return 1;
  509|    838|        case UNPACK_EX:
  ------------------
  |  |  127|    838|#define UNPACK_EX                              114
  ------------------
  |  Branch (509:9): [True: 838, False: 5.88M]
  ------------------
  510|    838|            return 1;
  511|  46.8k|        case UNPACK_SEQUENCE:
  ------------------
  |  |  128|  46.8k|#define UNPACK_SEQUENCE                        115
  ------------------
  |  Branch (511:9): [True: 46.8k, False: 5.83M]
  ------------------
  512|  46.8k|            return 1;
  513|      0|        case UNPACK_SEQUENCE_LIST:
  ------------------
  |  |  218|      0|#define UNPACK_SEQUENCE_LIST                   216
  ------------------
  |  Branch (513:9): [True: 0, False: 5.88M]
  ------------------
  514|      0|            return 1;
  515|      0|        case UNPACK_SEQUENCE_TUPLE:
  ------------------
  |  |  219|      0|#define UNPACK_SEQUENCE_TUPLE                  217
  ------------------
  |  Branch (515:9): [True: 0, False: 5.88M]
  ------------------
  516|      0|            return 1;
  517|      0|        case UNPACK_SEQUENCE_TWO_TUPLE:
  ------------------
  |  |  220|      0|#define UNPACK_SEQUENCE_TWO_TUPLE              218
  ------------------
  |  Branch (517:9): [True: 0, False: 5.88M]
  ------------------
  518|      0|            return 1;
  519|  11.4k|        case WITH_EXCEPT_START:
  ------------------
  |  |   54|  11.4k|#define WITH_EXCEPT_START                       41
  ------------------
  |  Branch (519:9): [True: 11.4k, False: 5.87M]
  ------------------
  520|  11.4k|            return 5;
  521|  56.3k|        case YIELD_VALUE:
  ------------------
  |  |  129|  56.3k|#define YIELD_VALUE                            116
  ------------------
  |  Branch (521:9): [True: 56.3k, False: 5.82M]
  ------------------
  522|  56.3k|            return 1;
  523|      0|        default:
  ------------------
  |  Branch (523:9): [True: 0, False: 5.88M]
  ------------------
  524|      0|            return -1;
  525|  5.88M|    }
  526|  5.88M|}
_PyOpcode_num_pushed:
  532|  5.88M|int _PyOpcode_num_pushed(int opcode, int oparg)  {
  533|  5.88M|    switch(opcode) {
  534|      0|        case ANNOTATIONS_PLACEHOLDER:
  ------------------
  |  |  244|      0|#define ANNOTATIONS_PLACEHOLDER                256
  ------------------
  |  Branch (534:9): [True: 0, False: 5.88M]
  ------------------
  535|      0|            return 0;
  536|   466k|        case BINARY_OP:
  ------------------
  |  |   55|   466k|#define BINARY_OP                               42
  ------------------
  |  Branch (536:9): [True: 466k, False: 5.41M]
  ------------------
  537|   466k|            return 1;
  538|      0|        case BINARY_OP_ADD_FLOAT:
  ------------------
  |  |  131|      0|#define BINARY_OP_ADD_FLOAT                    129
  ------------------
  |  Branch (538:9): [True: 0, False: 5.88M]
  ------------------
  539|      0|            return 1;
  540|      0|        case BINARY_OP_ADD_INT:
  ------------------
  |  |  132|      0|#define BINARY_OP_ADD_INT                      130
  ------------------
  |  Branch (540:9): [True: 0, False: 5.88M]
  ------------------
  541|      0|            return 1;
  542|      0|        case BINARY_OP_ADD_UNICODE:
  ------------------
  |  |  133|      0|#define BINARY_OP_ADD_UNICODE                  131
  ------------------
  |  Branch (542:9): [True: 0, False: 5.88M]
  ------------------
  543|      0|            return 1;
  544|      0|        case BINARY_OP_EXTEND:
  ------------------
  |  |  134|      0|#define BINARY_OP_EXTEND                       132
  ------------------
  |  Branch (544:9): [True: 0, False: 5.88M]
  ------------------
  545|      0|            return 1;
  546|      0|        case BINARY_OP_INPLACE_ADD_UNICODE:
  ------------------
  |  |   16|      0|#define BINARY_OP_INPLACE_ADD_UNICODE            3
  ------------------
  |  Branch (546:9): [True: 0, False: 5.88M]
  ------------------
  547|      0|            return 1;
  548|      0|        case BINARY_OP_MULTIPLY_FLOAT:
  ------------------
  |  |  135|      0|#define BINARY_OP_MULTIPLY_FLOAT               133
  ------------------
  |  Branch (548:9): [True: 0, False: 5.88M]
  ------------------
  549|      0|            return 1;
  550|      0|        case BINARY_OP_MULTIPLY_INT:
  ------------------
  |  |  136|      0|#define BINARY_OP_MULTIPLY_INT                 134
  ------------------
  |  Branch (550:9): [True: 0, False: 5.88M]
  ------------------
  551|      0|            return 1;
  552|      0|        case BINARY_OP_SUBSCR_DICT:
  ------------------
  |  |  137|      0|#define BINARY_OP_SUBSCR_DICT                  135
  ------------------
  |  Branch (552:9): [True: 0, False: 5.88M]
  ------------------
  553|      0|            return 1;
  554|      0|        case BINARY_OP_SUBSCR_GETITEM:
  ------------------
  |  |  138|      0|#define BINARY_OP_SUBSCR_GETITEM               136
  ------------------
  |  Branch (554:9): [True: 0, False: 5.88M]
  ------------------
  555|      0|            return 0;
  556|      0|        case BINARY_OP_SUBSCR_LIST_INT:
  ------------------
  |  |  139|      0|#define BINARY_OP_SUBSCR_LIST_INT              137
  ------------------
  |  Branch (556:9): [True: 0, False: 5.88M]
  ------------------
  557|      0|            return 1;
  558|      0|        case BINARY_OP_SUBSCR_LIST_SLICE:
  ------------------
  |  |  140|      0|#define BINARY_OP_SUBSCR_LIST_SLICE            138
  ------------------
  |  Branch (558:9): [True: 0, False: 5.88M]
  ------------------
  559|      0|            return 1;
  560|      0|        case BINARY_OP_SUBSCR_STR_INT:
  ------------------
  |  |  141|      0|#define BINARY_OP_SUBSCR_STR_INT               139
  ------------------
  |  Branch (560:9): [True: 0, False: 5.88M]
  ------------------
  561|      0|            return 1;
  562|      0|        case BINARY_OP_SUBSCR_TUPLE_INT:
  ------------------
  |  |  142|      0|#define BINARY_OP_SUBSCR_TUPLE_INT             140
  ------------------
  |  Branch (562:9): [True: 0, False: 5.88M]
  ------------------
  563|      0|            return 1;
  564|      0|        case BINARY_OP_SUBSCR_USTR_INT:
  ------------------
  |  |  143|      0|#define BINARY_OP_SUBSCR_USTR_INT              141
  ------------------
  |  Branch (564:9): [True: 0, False: 5.88M]
  ------------------
  565|      0|            return 1;
  566|      0|        case BINARY_OP_SUBTRACT_FLOAT:
  ------------------
  |  |  144|      0|#define BINARY_OP_SUBTRACT_FLOAT               142
  ------------------
  |  Branch (566:9): [True: 0, False: 5.88M]
  ------------------
  567|      0|            return 1;
  568|      0|        case BINARY_OP_SUBTRACT_INT:
  ------------------
  |  |  145|      0|#define BINARY_OP_SUBTRACT_INT                 143
  ------------------
  |  Branch (568:9): [True: 0, False: 5.88M]
  ------------------
  569|      0|            return 1;
  570|  1.15k|        case BINARY_SLICE:
  ------------------
  |  |   14|  1.15k|#define BINARY_SLICE                             1
  ------------------
  |  Branch (570:9): [True: 1.15k, False: 5.88M]
  ------------------
  571|  1.15k|            return 1;
  572|  2.92k|        case BUILD_INTERPOLATION:
  ------------------
  |  |   56|  2.92k|#define BUILD_INTERPOLATION                     43
  ------------------
  |  Branch (572:9): [True: 2.92k, False: 5.87M]
  ------------------
  573|  2.92k|            return 1;
  574|  9.61k|        case BUILD_LIST:
  ------------------
  |  |   57|  9.61k|#define BUILD_LIST                              44
  ------------------
  |  Branch (574:9): [True: 9.61k, False: 5.87M]
  ------------------
  575|  9.61k|            return 1;
  576|  25.6k|        case BUILD_MAP:
  ------------------
  |  |   58|  25.6k|#define BUILD_MAP                               45
  ------------------
  |  Branch (576:9): [True: 25.6k, False: 5.85M]
  ------------------
  577|  25.6k|            return 1;
  578|  21.5k|        case BUILD_SET:
  ------------------
  |  |   59|  21.5k|#define BUILD_SET                               46
  ------------------
  |  Branch (578:9): [True: 21.5k, False: 5.86M]
  ------------------
  579|  21.5k|            return 1;
  580|  9.92k|        case BUILD_SLICE:
  ------------------
  |  |   60|  9.92k|#define BUILD_SLICE                             47
  ------------------
  |  Branch (580:9): [True: 9.92k, False: 5.87M]
  ------------------
  581|  9.92k|            return 1;
  582|  3.28k|        case BUILD_STRING:
  ------------------
  |  |   61|  3.28k|#define BUILD_STRING                            48
  ------------------
  |  Branch (582:9): [True: 3.28k, False: 5.87M]
  ------------------
  583|  3.28k|            return 1;
  584|  1.88k|        case BUILD_TEMPLATE:
  ------------------
  |  |   15|  1.88k|#define BUILD_TEMPLATE                           2
  ------------------
  |  Branch (584:9): [True: 1.88k, False: 5.87M]
  ------------------
  585|  1.88k|            return 1;
  586|  67.0k|        case BUILD_TUPLE:
  ------------------
  |  |   62|  67.0k|#define BUILD_TUPLE                             49
  ------------------
  |  Branch (586:9): [True: 67.0k, False: 5.81M]
  ------------------
  587|  67.0k|            return 1;
  588|      0|        case CACHE:
  ------------------
  |  |   13|      0|#define CACHE                                    0
  ------------------
  |  Branch (588:9): [True: 0, False: 5.88M]
  ------------------
  589|      0|            return 0;
  590|  93.3k|        case CALL:
  ------------------
  |  |   63|  93.3k|#define CALL                                    50
  ------------------
  |  Branch (590:9): [True: 93.3k, False: 5.78M]
  ------------------
  591|  93.3k|            return 1;
  592|      0|        case CALL_ALLOC_AND_ENTER_INIT:
  ------------------
  |  |  146|      0|#define CALL_ALLOC_AND_ENTER_INIT              144
  ------------------
  |  Branch (592:9): [True: 0, False: 5.88M]
  ------------------
  593|      0|            return 0;
  594|      0|        case CALL_BOUND_METHOD_EXACT_ARGS:
  ------------------
  |  |  147|      0|#define CALL_BOUND_METHOD_EXACT_ARGS           145
  ------------------
  |  Branch (594:9): [True: 0, False: 5.88M]
  ------------------
  595|      0|            return 0;
  596|      0|        case CALL_BOUND_METHOD_GENERAL:
  ------------------
  |  |  148|      0|#define CALL_BOUND_METHOD_GENERAL              146
  ------------------
  |  Branch (596:9): [True: 0, False: 5.88M]
  ------------------
  597|      0|            return 0;
  598|      0|        case CALL_BUILTIN_CLASS:
  ------------------
  |  |  149|      0|#define CALL_BUILTIN_CLASS                     147
  ------------------
  |  Branch (598:9): [True: 0, False: 5.88M]
  ------------------
  599|      0|            return 1;
  600|      0|        case CALL_BUILTIN_FAST:
  ------------------
  |  |  150|      0|#define CALL_BUILTIN_FAST                      148
  ------------------
  |  Branch (600:9): [True: 0, False: 5.88M]
  ------------------
  601|      0|            return 1;
  602|      0|        case CALL_BUILTIN_FAST_WITH_KEYWORDS:
  ------------------
  |  |  151|      0|#define CALL_BUILTIN_FAST_WITH_KEYWORDS        149
  ------------------
  |  Branch (602:9): [True: 0, False: 5.88M]
  ------------------
  603|      0|            return 1;
  604|      0|        case CALL_BUILTIN_O:
  ------------------
  |  |  152|      0|#define CALL_BUILTIN_O                         150
  ------------------
  |  Branch (604:9): [True: 0, False: 5.88M]
  ------------------
  605|      0|            return 1;
  606|      0|        case CALL_EX_NON_PY_GENERAL:
  ------------------
  |  |  153|      0|#define CALL_EX_NON_PY_GENERAL                 151
  ------------------
  |  Branch (606:9): [True: 0, False: 5.88M]
  ------------------
  607|      0|            return 1;
  608|      0|        case CALL_EX_PY:
  ------------------
  |  |  154|      0|#define CALL_EX_PY                             152
  ------------------
  |  Branch (608:9): [True: 0, False: 5.88M]
  ------------------
  609|      0|            return 0;
  610|  3.95k|        case CALL_FUNCTION_EX:
  ------------------
  |  |   17|  3.95k|#define CALL_FUNCTION_EX                         4
  ------------------
  |  Branch (610:9): [True: 3.95k, False: 5.87M]
  ------------------
  611|  3.95k|            return 1;
  612|  76.9k|        case CALL_INTRINSIC_1:
  ------------------
  |  |   64|  76.9k|#define CALL_INTRINSIC_1                        51
  ------------------
  |  Branch (612:9): [True: 76.9k, False: 5.80M]
  ------------------
  613|  76.9k|            return 1;
  614|  18.7k|        case CALL_INTRINSIC_2:
  ------------------
  |  |   65|  18.7k|#define CALL_INTRINSIC_2                        52
  ------------------
  |  Branch (614:9): [True: 18.7k, False: 5.86M]
  ------------------
  615|  18.7k|            return 1;
  616|      0|        case CALL_ISINSTANCE:
  ------------------
  |  |  155|      0|#define CALL_ISINSTANCE                        153
  ------------------
  |  Branch (616:9): [True: 0, False: 5.88M]
  ------------------
  617|      0|            return 1;
  618|    643|        case CALL_KW:
  ------------------
  |  |   66|    643|#define CALL_KW                                 53
  ------------------
  |  Branch (618:9): [True: 643, False: 5.88M]
  ------------------
  619|    643|            return 1;
  620|      0|        case CALL_KW_BOUND_METHOD:
  ------------------
  |  |  156|      0|#define CALL_KW_BOUND_METHOD                   154
  ------------------
  |  Branch (620:9): [True: 0, False: 5.88M]
  ------------------
  621|      0|            return 0;
  622|      0|        case CALL_KW_NON_PY:
  ------------------
  |  |  157|      0|#define CALL_KW_NON_PY                         155
  ------------------
  |  Branch (622:9): [True: 0, False: 5.88M]
  ------------------
  623|      0|            return 1;
  624|      0|        case CALL_KW_PY:
  ------------------
  |  |  158|      0|#define CALL_KW_PY                             156
  ------------------
  |  Branch (624:9): [True: 0, False: 5.88M]
  ------------------
  625|      0|            return 0;
  626|      0|        case CALL_LEN:
  ------------------
  |  |  159|      0|#define CALL_LEN                               157
  ------------------
  |  Branch (626:9): [True: 0, False: 5.88M]
  ------------------
  627|      0|            return 1;
  628|      0|        case CALL_LIST_APPEND:
  ------------------
  |  |  160|      0|#define CALL_LIST_APPEND                       158
  ------------------
  |  Branch (628:9): [True: 0, False: 5.88M]
  ------------------
  629|      0|            return 1;
  630|      0|        case CALL_METHOD_DESCRIPTOR_FAST:
  ------------------
  |  |  161|      0|#define CALL_METHOD_DESCRIPTOR_FAST            159
  ------------------
  |  Branch (630:9): [True: 0, False: 5.88M]
  ------------------
  631|      0|            return 1;
  632|      0|        case CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS:
  ------------------
  |  |  162|      0|#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 160
  ------------------
  |  Branch (632:9): [True: 0, False: 5.88M]
  ------------------
  633|      0|            return 1;
  634|      0|        case CALL_METHOD_DESCRIPTOR_NOARGS:
  ------------------
  |  |  163|      0|#define CALL_METHOD_DESCRIPTOR_NOARGS          161
  ------------------
  |  Branch (634:9): [True: 0, False: 5.88M]
  ------------------
  635|      0|            return 1;
  636|      0|        case CALL_METHOD_DESCRIPTOR_O:
  ------------------
  |  |  164|      0|#define CALL_METHOD_DESCRIPTOR_O               162
  ------------------
  |  Branch (636:9): [True: 0, False: 5.88M]
  ------------------
  637|      0|            return 1;
  638|      0|        case CALL_NON_PY_GENERAL:
  ------------------
  |  |  165|      0|#define CALL_NON_PY_GENERAL                    163
  ------------------
  |  Branch (638:9): [True: 0, False: 5.88M]
  ------------------
  639|      0|            return 1;
  640|      0|        case CALL_PY_EXACT_ARGS:
  ------------------
  |  |  166|      0|#define CALL_PY_EXACT_ARGS                     164
  ------------------
  |  Branch (640:9): [True: 0, False: 5.88M]
  ------------------
  641|      0|            return 0;
  642|      0|        case CALL_PY_GENERAL:
  ------------------
  |  |  167|      0|#define CALL_PY_GENERAL                        165
  ------------------
  |  Branch (642:9): [True: 0, False: 5.88M]
  ------------------
  643|      0|            return 0;
  644|      0|        case CALL_STR_1:
  ------------------
  |  |  168|      0|#define CALL_STR_1                             166
  ------------------
  |  Branch (644:9): [True: 0, False: 5.88M]
  ------------------
  645|      0|            return 1;
  646|      0|        case CALL_TUPLE_1:
  ------------------
  |  |  169|      0|#define CALL_TUPLE_1                           167
  ------------------
  |  Branch (646:9): [True: 0, False: 5.88M]
  ------------------
  647|      0|            return 1;
  648|      0|        case CALL_TYPE_1:
  ------------------
  |  |  170|      0|#define CALL_TYPE_1                            168
  ------------------
  |  Branch (648:9): [True: 0, False: 5.88M]
  ------------------
  649|      0|            return 1;
  650|  1.46k|        case CHECK_EG_MATCH:
  ------------------
  |  |   18|  1.46k|#define CHECK_EG_MATCH                           5
  ------------------
  |  Branch (650:9): [True: 1.46k, False: 5.88M]
  ------------------
  651|  1.46k|            return 2;
  652|    285|        case CHECK_EXC_MATCH:
  ------------------
  |  |   19|    285|#define CHECK_EXC_MATCH                          6
  ------------------
  |  Branch (652:9): [True: 285, False: 5.88M]
  ------------------
  653|    285|            return 2;
  654|  35.2k|        case CLEANUP_THROW:
  ------------------
  |  |   20|  35.2k|#define CLEANUP_THROW                            7
  ------------------
  |  Branch (654:9): [True: 35.2k, False: 5.84M]
  ------------------
  655|  35.2k|            return 3;
  656|   135k|        case COMPARE_OP:
  ------------------
  |  |   67|   135k|#define COMPARE_OP                              54
  ------------------
  |  Branch (656:9): [True: 135k, False: 5.74M]
  ------------------
  657|   135k|            return 1;
  658|      0|        case COMPARE_OP_FLOAT:
  ------------------
  |  |  171|      0|#define COMPARE_OP_FLOAT                       169
  ------------------
  |  Branch (658:9): [True: 0, False: 5.88M]
  ------------------
  659|      0|            return 1;
  660|      0|        case COMPARE_OP_INT:
  ------------------
  |  |  172|      0|#define COMPARE_OP_INT                         170
  ------------------
  |  Branch (660:9): [True: 0, False: 5.88M]
  ------------------
  661|      0|            return 1;
  662|      0|        case COMPARE_OP_STR:
  ------------------
  |  |  173|      0|#define COMPARE_OP_STR                         171
  ------------------
  |  Branch (662:9): [True: 0, False: 5.88M]
  ------------------
  663|      0|            return 1;
  664|  12.5k|        case CONTAINS_OP:
  ------------------
  |  |   68|  12.5k|#define CONTAINS_OP                             55
  ------------------
  |  Branch (664:9): [True: 12.5k, False: 5.86M]
  ------------------
  665|  12.5k|            return 1;
  666|      0|        case CONTAINS_OP_DICT:
  ------------------
  |  |  174|      0|#define CONTAINS_OP_DICT                       172
  ------------------
  |  Branch (666:9): [True: 0, False: 5.88M]
  ------------------
  667|      0|            return 1;
  668|      0|        case CONTAINS_OP_SET:
  ------------------
  |  |  175|      0|#define CONTAINS_OP_SET                        173
  ------------------
  |  Branch (668:9): [True: 0, False: 5.88M]
  ------------------
  669|      0|            return 1;
  670|  4.12k|        case CONVERT_VALUE:
  ------------------
  |  |   69|  4.12k|#define CONVERT_VALUE                           56
  ------------------
  |  Branch (670:9): [True: 4.12k, False: 5.87M]
  ------------------
  671|  4.12k|            return 1;
  672|   196k|        case COPY:
  ------------------
  |  |   70|   196k|#define COPY                                    57
  ------------------
  |  Branch (672:9): [True: 196k, False: 5.68M]
  ------------------
  673|   196k|            return 2 + (oparg-1);
  674|  10.9k|        case COPY_FREE_VARS:
  ------------------
  |  |   71|  10.9k|#define COPY_FREE_VARS                          58
  ------------------
  |  Branch (674:9): [True: 10.9k, False: 5.87M]
  ------------------
  675|  10.9k|            return 0;
  676|      0|        case DELETE_DEREF:
  ------------------
  |  |   72|      0|#define DELETE_DEREF                            59
  ------------------
  |  Branch (676:9): [True: 0, False: 5.88M]
  ------------------
  677|      0|            return 0;
  678|  3.12k|        case DELETE_FAST:
  ------------------
  |  |   73|  3.12k|#define DELETE_FAST                             60
  ------------------
  |  Branch (678:9): [True: 3.12k, False: 5.87M]
  ------------------
  679|  3.12k|            return 0;
  680|     98|        case DELETE_SUBSCR:
  ------------------
  |  |   21|     98|#define DELETE_SUBSCR                            8
  ------------------
  |  Branch (680:9): [True: 98, False: 5.88M]
  ------------------
  681|     98|            return 0;
  682|  1.59k|        case DICT_MERGE:
  ------------------
  |  |   74|  1.59k|#define DICT_MERGE                              61
  ------------------
  |  Branch (682:9): [True: 1.59k, False: 5.88M]
  ------------------
  683|  1.59k|            return 4 + (oparg - 1);
  684|    677|        case DICT_UPDATE:
  ------------------
  |  |   75|    677|#define DICT_UPDATE                             62
  ------------------
  |  Branch (684:9): [True: 677, False: 5.88M]
  ------------------
  685|    677|            return 1 + (oparg - 1);
  686|  1.20k|        case END_ASYNC_FOR:
  ------------------
  |  |   76|  1.20k|#define END_ASYNC_FOR                           63
  ------------------
  |  Branch (686:9): [True: 1.20k, False: 5.88M]
  ------------------
  687|  1.20k|            return 0;
  688|  4.66k|        case END_FOR:
  ------------------
  |  |   22|  4.66k|#define END_FOR                                  9
  ------------------
  |  Branch (688:9): [True: 4.66k, False: 5.87M]
  ------------------
  689|  4.66k|            return 0;
  690|  55.2k|        case END_SEND:
  ------------------
  |  |   23|  55.2k|#define END_SEND                                10
  ------------------
  |  Branch (690:9): [True: 55.2k, False: 5.82M]
  ------------------
  691|  55.2k|            return 1;
  692|      0|        case ENTER_EXECUTOR:
  ------------------
  |  |  242|      0|#define ENTER_EXECUTOR                         254
  ------------------
  |  Branch (692:9): [True: 0, False: 5.88M]
  ------------------
  693|      0|            return 0;
  694|      0|        case EXIT_INIT_CHECK:
  ------------------
  |  |   24|      0|#define EXIT_INIT_CHECK                         11
  ------------------
  |  Branch (694:9): [True: 0, False: 5.88M]
  ------------------
  695|      0|            return 0;
  696|      0|        case EXTENDED_ARG:
  ------------------
  |  |   77|      0|#define EXTENDED_ARG                            64
  ------------------
  |  Branch (696:9): [True: 0, False: 5.88M]
  ------------------
  697|      0|            return 0;
  698|  4.13k|        case FORMAT_SIMPLE:
  ------------------
  |  |   25|  4.13k|#define FORMAT_SIMPLE                           12
  ------------------
  |  Branch (698:9): [True: 4.13k, False: 5.87M]
  ------------------
  699|  4.13k|            return 1;
  700|  3.23k|        case FORMAT_WITH_SPEC:
  ------------------
  |  |   26|  3.23k|#define FORMAT_WITH_SPEC                        13
  ------------------
  |  Branch (700:9): [True: 3.23k, False: 5.87M]
  ------------------
  701|  3.23k|            return 1;
  702|  4.93k|        case FOR_ITER:
  ------------------
  |  |   78|  4.93k|#define FOR_ITER                                65
  ------------------
  |  Branch (702:9): [True: 4.93k, False: 5.87M]
  ------------------
  703|  4.93k|            return 3;
  704|      0|        case FOR_ITER_GEN:
  ------------------
  |  |  176|      0|#define FOR_ITER_GEN                           174
  ------------------
  |  Branch (704:9): [True: 0, False: 5.88M]
  ------------------
  705|      0|            return 2;
  706|      0|        case FOR_ITER_LIST:
  ------------------
  |  |  177|      0|#define FOR_ITER_LIST                          175
  ------------------
  |  Branch (706:9): [True: 0, False: 5.88M]
  ------------------
  707|      0|            return 3;
  708|      0|        case FOR_ITER_RANGE:
  ------------------
  |  |  178|      0|#define FOR_ITER_RANGE                         176
  ------------------
  |  Branch (708:9): [True: 0, False: 5.88M]
  ------------------
  709|      0|            return 3;
  710|      0|        case FOR_ITER_TUPLE:
  ------------------
  |  |  179|      0|#define FOR_ITER_TUPLE                         177
  ------------------
  |  Branch (710:9): [True: 0, False: 5.88M]
  ------------------
  711|      0|            return 3;
  712|      0|        case FOR_ITER_VIRTUAL:
  ------------------
  |  |  180|      0|#define FOR_ITER_VIRTUAL                       178
  ------------------
  |  Branch (712:9): [True: 0, False: 5.88M]
  ------------------
  713|      0|            return 3;
  714|  1.69k|        case GET_AITER:
  ------------------
  |  |   27|  1.69k|#define GET_AITER                               14
  ------------------
  |  Branch (714:9): [True: 1.69k, False: 5.87M]
  ------------------
  715|  1.69k|            return 1;
  716|  1.69k|        case GET_ANEXT:
  ------------------
  |  |   28|  1.69k|#define GET_ANEXT                               15
  ------------------
  |  Branch (716:9): [True: 1.69k, False: 5.87M]
  ------------------
  717|  1.69k|            return 2;
  718|  53.5k|        case GET_AWAITABLE:
  ------------------
  |  |   79|  53.5k|#define GET_AWAITABLE                           66
  ------------------
  |  Branch (718:9): [True: 53.5k, False: 5.82M]
  ------------------
  719|  53.5k|            return 1;
  720|  4.68k|        case GET_ITER:
  ------------------
  |  |   80|  4.68k|#define GET_ITER                                67
  ------------------
  |  Branch (720:9): [True: 4.68k, False: 5.87M]
  ------------------
  721|  4.68k|            return 2;
  722|      0|        case GET_ITER_SELF:
  ------------------
  |  |  181|      0|#define GET_ITER_SELF                          179
  ------------------
  |  Branch (722:9): [True: 0, False: 5.88M]
  ------------------
  723|      0|            return 2;
  724|      0|        case GET_ITER_VIRTUAL:
  ------------------
  |  |  182|      0|#define GET_ITER_VIRTUAL                       180
  ------------------
  |  Branch (724:9): [True: 0, False: 5.88M]
  ------------------
  725|      0|            return 2;
  726|  2.40k|        case GET_LEN:
  ------------------
  |  |   29|  2.40k|#define GET_LEN                                 16
  ------------------
  |  Branch (726:9): [True: 2.40k, False: 5.87M]
  ------------------
  727|  2.40k|            return 2;
  728|  12.3k|        case IMPORT_FROM:
  ------------------
  |  |   81|  12.3k|#define IMPORT_FROM                             68
  ------------------
  |  Branch (728:9): [True: 12.3k, False: 5.86M]
  ------------------
  729|  12.3k|            return 2;
  730|  20.8k|        case IMPORT_NAME:
  ------------------
  |  |   82|  20.8k|#define IMPORT_NAME                             69
  ------------------
  |  Branch (730:9): [True: 20.8k, False: 5.86M]
  ------------------
  731|  20.8k|            return 1;
  732|      0|        case INSTRUMENTED_CALL:
  ------------------
  |  |  237|      0|#define INSTRUMENTED_CALL                      249
  ------------------
  |  Branch (732:9): [True: 0, False: 5.88M]
  ------------------
  733|      0|            return 1;
  734|      0|        case INSTRUMENTED_CALL_FUNCTION_EX:
  ------------------
  |  |  239|      0|#define INSTRUMENTED_CALL_FUNCTION_EX          251
  ------------------
  |  Branch (734:9): [True: 0, False: 5.88M]
  ------------------
  735|      0|            return 1;
  736|      0|        case INSTRUMENTED_CALL_KW:
  ------------------
  |  |  238|      0|#define INSTRUMENTED_CALL_KW                   250
  ------------------
  |  Branch (736:9): [True: 0, False: 5.88M]
  ------------------
  737|      0|            return 1;
  738|      0|        case INSTRUMENTED_END_ASYNC_FOR:
  ------------------
  |  |  235|      0|#define INSTRUMENTED_END_ASYNC_FOR             247
  ------------------
  |  Branch (738:9): [True: 0, False: 5.88M]
  ------------------
  739|      0|            return 0;
  740|      0|        case INSTRUMENTED_END_FOR:
  ------------------
  |  |  221|      0|#define INSTRUMENTED_END_FOR                   233
  ------------------
  |  Branch (740:9): [True: 0, False: 5.88M]
  ------------------
  741|      0|            return 2;
  742|      0|        case INSTRUMENTED_END_SEND:
  ------------------
  |  |  223|      0|#define INSTRUMENTED_END_SEND                  235
  ------------------
  |  Branch (742:9): [True: 0, False: 5.88M]
  ------------------
  743|      0|            return 1;
  744|      0|        case INSTRUMENTED_FOR_ITER:
  ------------------
  |  |  224|      0|#define INSTRUMENTED_FOR_ITER                  236
  ------------------
  |  Branch (744:9): [True: 0, False: 5.88M]
  ------------------
  745|      0|            return 3;
  746|      0|        case INSTRUMENTED_INSTRUCTION:
  ------------------
  |  |  225|      0|#define INSTRUMENTED_INSTRUCTION               237
  ------------------
  |  Branch (746:9): [True: 0, False: 5.88M]
  ------------------
  747|      0|            return 0;
  748|      0|        case INSTRUMENTED_JUMP_BACKWARD:
  ------------------
  |  |  240|      0|#define INSTRUMENTED_JUMP_BACKWARD             252
  ------------------
  |  Branch (748:9): [True: 0, False: 5.88M]
  ------------------
  749|      0|            return 0;
  750|      0|        case INSTRUMENTED_JUMP_FORWARD:
  ------------------
  |  |  226|      0|#define INSTRUMENTED_JUMP_FORWARD              238
  ------------------
  |  Branch (750:9): [True: 0, False: 5.88M]
  ------------------
  751|      0|            return 0;
  752|      0|        case INSTRUMENTED_LINE:
  ------------------
  |  |  241|      0|#define INSTRUMENTED_LINE                      253
  ------------------
  |  Branch (752:9): [True: 0, False: 5.88M]
  ------------------
  753|      0|            return 0;
  754|      0|        case INSTRUMENTED_LOAD_SUPER_ATTR:
  ------------------
  |  |  236|      0|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  ------------------
  |  Branch (754:9): [True: 0, False: 5.88M]
  ------------------
  755|      0|            return 1 + (oparg & 1);
  756|      0|        case INSTRUMENTED_NOT_TAKEN:
  ------------------
  |  |  227|      0|#define INSTRUMENTED_NOT_TAKEN                 239
  ------------------
  |  Branch (756:9): [True: 0, False: 5.88M]
  ------------------
  757|      0|            return 0;
  758|      0|        case INSTRUMENTED_POP_ITER:
  ------------------
  |  |  222|      0|#define INSTRUMENTED_POP_ITER                  234
  ------------------
  |  Branch (758:9): [True: 0, False: 5.88M]
  ------------------
  759|      0|            return 0;
  760|      0|        case INSTRUMENTED_POP_JUMP_IF_FALSE:
  ------------------
  |  |  229|      0|#define INSTRUMENTED_POP_JUMP_IF_FALSE         241
  ------------------
  |  Branch (760:9): [True: 0, False: 5.88M]
  ------------------
  761|      0|            return 0;
  762|      0|        case INSTRUMENTED_POP_JUMP_IF_NONE:
  ------------------
  |  |  230|      0|#define INSTRUMENTED_POP_JUMP_IF_NONE          242
  ------------------
  |  Branch (762:9): [True: 0, False: 5.88M]
  ------------------
  763|      0|            return 0;
  764|      0|        case INSTRUMENTED_POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  231|      0|#define INSTRUMENTED_POP_JUMP_IF_NOT_NONE      243
  ------------------
  |  Branch (764:9): [True: 0, False: 5.88M]
  ------------------
  765|      0|            return 0;
  766|      0|        case INSTRUMENTED_POP_JUMP_IF_TRUE:
  ------------------
  |  |  228|      0|#define INSTRUMENTED_POP_JUMP_IF_TRUE          240
  ------------------
  |  Branch (766:9): [True: 0, False: 5.88M]
  ------------------
  767|      0|            return 0;
  768|      0|        case INSTRUMENTED_RESUME:
  ------------------
  |  |  232|      0|#define INSTRUMENTED_RESUME                    244
  ------------------
  |  Branch (768:9): [True: 0, False: 5.88M]
  ------------------
  769|      0|            return 0;
  770|      0|        case INSTRUMENTED_RETURN_VALUE:
  ------------------
  |  |  233|      0|#define INSTRUMENTED_RETURN_VALUE              245
  ------------------
  |  Branch (770:9): [True: 0, False: 5.88M]
  ------------------
  771|      0|            return 1;
  772|      0|        case INSTRUMENTED_YIELD_VALUE:
  ------------------
  |  |  234|      0|#define INSTRUMENTED_YIELD_VALUE               246
  ------------------
  |  Branch (772:9): [True: 0, False: 5.88M]
  ------------------
  773|      0|            return 1;
  774|      0|        case INTERPRETER_EXIT:
  ------------------
  |  |   31|      0|#define INTERPRETER_EXIT                        18
  ------------------
  |  Branch (774:9): [True: 0, False: 5.88M]
  ------------------
  775|      0|            return 0;
  776|  7.88k|        case IS_OP:
  ------------------
  |  |   83|  7.88k|#define IS_OP                                   70
  ------------------
  |  Branch (776:9): [True: 7.88k, False: 5.87M]
  ------------------
  777|  7.88k|            return 1;
  778|  20.8k|        case JUMP:
  ------------------
  |  |  245|  20.8k|#define JUMP                                   257
  ------------------
  |  Branch (778:9): [True: 20.8k, False: 5.86M]
  ------------------
  779|  20.8k|            return 0;
  780|      0|        case JUMP_BACKWARD:
  ------------------
  |  |   84|      0|#define JUMP_BACKWARD                           71
  ------------------
  |  Branch (780:9): [True: 0, False: 5.88M]
  ------------------
  781|      0|            return 0;
  782|      0|        case JUMP_BACKWARD_JIT:
  ------------------
  |  |  183|      0|#define JUMP_BACKWARD_JIT                      181
  ------------------
  |  Branch (782:9): [True: 0, False: 5.88M]
  ------------------
  783|      0|            return 0;
  784|      0|        case JUMP_BACKWARD_NO_INTERRUPT:
  ------------------
  |  |   85|      0|#define JUMP_BACKWARD_NO_INTERRUPT              72
  ------------------
  |  Branch (784:9): [True: 0, False: 5.88M]
  ------------------
  785|      0|            return 0;
  786|      0|        case JUMP_BACKWARD_NO_JIT:
  ------------------
  |  |  184|      0|#define JUMP_BACKWARD_NO_JIT                   182
  ------------------
  |  Branch (786:9): [True: 0, False: 5.88M]
  ------------------
  787|      0|            return 0;
  788|      0|        case JUMP_FORWARD:
  ------------------
  |  |   86|      0|#define JUMP_FORWARD                            73
  ------------------
  |  Branch (788:9): [True: 0, False: 5.88M]
  ------------------
  789|      0|            return 0;
  790|  1.04k|        case JUMP_IF_FALSE:
  ------------------
  |  |  246|  1.04k|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (790:9): [True: 1.04k, False: 5.88M]
  ------------------
  791|  1.04k|            return 1;
  792|    898|        case JUMP_IF_TRUE:
  ------------------
  |  |  247|    898|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (792:9): [True: 898, False: 5.88M]
  ------------------
  793|    898|            return 1;
  794|   180k|        case JUMP_NO_INTERRUPT:
  ------------------
  |  |  248|   180k|#define JUMP_NO_INTERRUPT                      260
  ------------------
  |  Branch (794:9): [True: 180k, False: 5.70M]
  ------------------
  795|   180k|            return 0;
  796|  61.1k|        case LIST_APPEND:
  ------------------
  |  |   87|  61.1k|#define LIST_APPEND                             74
  ------------------
  |  Branch (796:9): [True: 61.1k, False: 5.82M]
  ------------------
  797|  61.1k|            return 1 + (oparg-1);
  798|  5.41k|        case LIST_EXTEND:
  ------------------
  |  |   88|  5.41k|#define LIST_EXTEND                             75
  ------------------
  |  Branch (798:9): [True: 5.41k, False: 5.87M]
  ------------------
  799|  5.41k|            return 1 + (oparg-1);
  800|  14.1k|        case LOAD_ATTR:
  ------------------
  |  |   89|  14.1k|#define LOAD_ATTR                               76
  ------------------
  |  Branch (800:9): [True: 14.1k, False: 5.86M]
  ------------------
  801|  14.1k|            return 1 + (oparg&1);
  802|      0|        case LOAD_ATTR_CLASS:
  ------------------
  |  |  185|      0|#define LOAD_ATTR_CLASS                        183
  ------------------
  |  Branch (802:9): [True: 0, False: 5.88M]
  ------------------
  803|      0|            return 1 + (oparg & 1);
  804|      0|        case LOAD_ATTR_CLASS_WITH_METACLASS_CHECK:
  ------------------
  |  |  186|      0|#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   184
  ------------------
  |  Branch (804:9): [True: 0, False: 5.88M]
  ------------------
  805|      0|            return 1 + (oparg & 1);
  806|      0|        case LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN:
  ------------------
  |  |  187|      0|#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      185
  ------------------
  |  Branch (806:9): [True: 0, False: 5.88M]
  ------------------
  807|      0|            return 0;
  808|      0|        case LOAD_ATTR_INSTANCE_VALUE:
  ------------------
  |  |  188|      0|#define LOAD_ATTR_INSTANCE_VALUE               186
  ------------------
  |  Branch (808:9): [True: 0, False: 5.88M]
  ------------------
  809|      0|            return 1 + (oparg & 1);
  810|      0|        case LOAD_ATTR_METHOD_LAZY_DICT:
  ------------------
  |  |  189|      0|#define LOAD_ATTR_METHOD_LAZY_DICT             187
  ------------------
  |  Branch (810:9): [True: 0, False: 5.88M]
  ------------------
  811|      0|            return 2;
  812|      0|        case LOAD_ATTR_METHOD_NO_DICT:
  ------------------
  |  |  190|      0|#define LOAD_ATTR_METHOD_NO_DICT               188
  ------------------
  |  Branch (812:9): [True: 0, False: 5.88M]
  ------------------
  813|      0|            return 2;
  814|      0|        case LOAD_ATTR_METHOD_WITH_VALUES:
  ------------------
  |  |  191|      0|#define LOAD_ATTR_METHOD_WITH_VALUES           189
  ------------------
  |  Branch (814:9): [True: 0, False: 5.88M]
  ------------------
  815|      0|            return 2;
  816|      0|        case LOAD_ATTR_MODULE:
  ------------------
  |  |  192|      0|#define LOAD_ATTR_MODULE                       190
  ------------------
  |  Branch (816:9): [True: 0, False: 5.88M]
  ------------------
  817|      0|            return 1 + (oparg & 1);
  818|      0|        case LOAD_ATTR_NONDESCRIPTOR_NO_DICT:
  ------------------
  |  |  193|      0|#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        191
  ------------------
  |  Branch (818:9): [True: 0, False: 5.88M]
  ------------------
  819|      0|            return 1;
  820|      0|        case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES:
  ------------------
  |  |  194|      0|#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    192
  ------------------
  |  Branch (820:9): [True: 0, False: 5.88M]
  ------------------
  821|      0|            return 1;
  822|      0|        case LOAD_ATTR_PROPERTY:
  ------------------
  |  |  195|      0|#define LOAD_ATTR_PROPERTY                     193
  ------------------
  |  Branch (822:9): [True: 0, False: 5.88M]
  ------------------
  823|      0|            return 0;
  824|      0|        case LOAD_ATTR_SLOT:
  ------------------
  |  |  196|      0|#define LOAD_ATTR_SLOT                         194
  ------------------
  |  Branch (824:9): [True: 0, False: 5.88M]
  ------------------
  825|      0|            return 1 + (oparg & 1);
  826|      0|        case LOAD_ATTR_WITH_HINT:
  ------------------
  |  |  197|      0|#define LOAD_ATTR_WITH_HINT                    195
  ------------------
  |  Branch (826:9): [True: 0, False: 5.88M]
  ------------------
  827|      0|            return 1 + (oparg & 1);
  828|  25.0k|        case LOAD_BUILD_CLASS:
  ------------------
  |  |   32|  25.0k|#define LOAD_BUILD_CLASS                        19
  ------------------
  |  Branch (828:9): [True: 25.0k, False: 5.85M]
  ------------------
  829|  25.0k|            return 1;
  830|  18.4k|        case LOAD_CLOSURE:
  ------------------
  |  |  249|  18.4k|#define LOAD_CLOSURE                           261
  ------------------
  |  Branch (830:9): [True: 18.4k, False: 5.86M]
  ------------------
  831|  18.4k|            return 1;
  832|   307k|        case LOAD_COMMON_CONSTANT:
  ------------------
  |  |   90|   307k|#define LOAD_COMMON_CONSTANT                    77
  ------------------
  |  Branch (832:9): [True: 307k, False: 5.57M]
  ------------------
  833|   307k|            return 1;
  834|   627k|        case LOAD_CONST:
  ------------------
  |  |   91|   627k|#define LOAD_CONST                              78
  ------------------
  |  Branch (834:9): [True: 627k, False: 5.25M]
  ------------------
  835|   627k|            return 1;
  836|  37.7k|        case LOAD_DEREF:
  ------------------
  |  |   92|  37.7k|#define LOAD_DEREF                              79
  ------------------
  |  Branch (836:9): [True: 37.7k, False: 5.84M]
  ------------------
  837|  37.7k|            return 1;
  838|  18.9k|        case LOAD_FAST:
  ------------------
  |  |   93|  18.9k|#define LOAD_FAST                               80
  ------------------
  |  Branch (838:9): [True: 18.9k, False: 5.86M]
  ------------------
  839|  18.9k|            return 1;
  840|  6.54k|        case LOAD_FAST_AND_CLEAR:
  ------------------
  |  |   94|  6.54k|#define LOAD_FAST_AND_CLEAR                     81
  ------------------
  |  Branch (840:9): [True: 6.54k, False: 5.87M]
  ------------------
  841|  6.54k|            return 1;
  842|      0|        case LOAD_FAST_BORROW:
  ------------------
  |  |   95|      0|#define LOAD_FAST_BORROW                        82
  ------------------
  |  Branch (842:9): [True: 0, False: 5.88M]
  ------------------
  843|      0|            return 1;
  844|      0|        case LOAD_FAST_BORROW_LOAD_FAST_BORROW:
  ------------------
  |  |   96|      0|#define LOAD_FAST_BORROW_LOAD_FAST_BORROW       83
  ------------------
  |  Branch (844:9): [True: 0, False: 5.88M]
  ------------------
  845|      0|            return 2;
  846|  8.21k|        case LOAD_FAST_CHECK:
  ------------------
  |  |   97|  8.21k|#define LOAD_FAST_CHECK                         84
  ------------------
  |  Branch (846:9): [True: 8.21k, False: 5.87M]
  ------------------
  847|  8.21k|            return 1;
  848|  2.83k|        case LOAD_FAST_LOAD_FAST:
  ------------------
  |  |   98|  2.83k|#define LOAD_FAST_LOAD_FAST                     85
  ------------------
  |  Branch (848:9): [True: 2.83k, False: 5.87M]
  ------------------
  849|  2.83k|            return 2;
  850|  5.68k|        case LOAD_FROM_DICT_OR_DEREF:
  ------------------
  |  |   99|  5.68k|#define LOAD_FROM_DICT_OR_DEREF                 86
  ------------------
  |  Branch (850:9): [True: 5.68k, False: 5.87M]
  ------------------
  851|  5.68k|            return 1;
  852|  27.2k|        case LOAD_FROM_DICT_OR_GLOBALS:
  ------------------
  |  |  100|  27.2k|#define LOAD_FROM_DICT_OR_GLOBALS               87
  ------------------
  |  Branch (852:9): [True: 27.2k, False: 5.85M]
  ------------------
  853|  27.2k|            return 1;
  854|   158k|        case LOAD_GLOBAL:
  ------------------
  |  |  101|   158k|#define LOAD_GLOBAL                             88
  ------------------
  |  Branch (854:9): [True: 158k, False: 5.72M]
  ------------------
  855|   158k|            return 1 + (oparg & 1);
  856|      0|        case LOAD_GLOBAL_BUILTIN:
  ------------------
  |  |  198|      0|#define LOAD_GLOBAL_BUILTIN                    196
  ------------------
  |  Branch (856:9): [True: 0, False: 5.88M]
  ------------------
  857|      0|            return 1 + (oparg & 1);
  858|      0|        case LOAD_GLOBAL_MODULE:
  ------------------
  |  |  199|      0|#define LOAD_GLOBAL_MODULE                     197
  ------------------
  |  Branch (858:9): [True: 0, False: 5.88M]
  ------------------
  859|      0|            return 1 + (oparg & 1);
  860|  17.4k|        case LOAD_LOCALS:
  ------------------
  |  |   33|  17.4k|#define LOAD_LOCALS                             20
  ------------------
  |  Branch (860:9): [True: 17.4k, False: 5.86M]
  ------------------
  861|  17.4k|            return 1;
  862|   302k|        case LOAD_NAME:
  ------------------
  |  |  102|   302k|#define LOAD_NAME                               89
  ------------------
  |  Branch (862:9): [True: 302k, False: 5.57M]
  ------------------
  863|   302k|            return 1;
  864|   265k|        case LOAD_SMALL_INT:
  ------------------
  |  |  103|   265k|#define LOAD_SMALL_INT                          90
  ------------------
  |  Branch (864:9): [True: 265k, False: 5.61M]
  ------------------
  865|   265k|            return 1;
  866|  22.8k|        case LOAD_SPECIAL:
  ------------------
  |  |  104|  22.8k|#define LOAD_SPECIAL                            91
  ------------------
  |  Branch (866:9): [True: 22.8k, False: 5.85M]
  ------------------
  867|  22.8k|            return 2;
  868|    521|        case LOAD_SUPER_ATTR:
  ------------------
  |  |  105|    521|#define LOAD_SUPER_ATTR                         92
  ------------------
  |  Branch (868:9): [True: 521, False: 5.88M]
  ------------------
  869|    521|            return 1 + (oparg & 1);
  870|      0|        case LOAD_SUPER_ATTR_ATTR:
  ------------------
  |  |  200|      0|#define LOAD_SUPER_ATTR_ATTR                   198
  ------------------
  |  Branch (870:9): [True: 0, False: 5.88M]
  ------------------
  871|      0|            return 1;
  872|      0|        case LOAD_SUPER_ATTR_METHOD:
  ------------------
  |  |  201|      0|#define LOAD_SUPER_ATTR_METHOD                 199
  ------------------
  |  Branch (872:9): [True: 0, False: 5.88M]
  ------------------
  873|      0|            return 2;
  874|  11.9k|        case MAKE_CELL:
  ------------------
  |  |  106|  11.9k|#define MAKE_CELL                               93
  ------------------
  |  Branch (874:9): [True: 11.9k, False: 5.86M]
  ------------------
  875|  11.9k|            return 0;
  876|  83.0k|        case MAKE_FUNCTION:
  ------------------
  |  |   34|  83.0k|#define MAKE_FUNCTION                           21
  ------------------
  |  Branch (876:9): [True: 83.0k, False: 5.79M]
  ------------------
  877|  83.0k|            return 1;
  878|  1.02k|        case MAP_ADD:
  ------------------
  |  |  107|  1.02k|#define MAP_ADD                                 94
  ------------------
  |  Branch (878:9): [True: 1.02k, False: 5.88M]
  ------------------
  879|  1.02k|            return 1 + (oparg - 1);
  880|     40|        case MATCH_CLASS:
  ------------------
  |  |  108|     40|#define MATCH_CLASS                             95
  ------------------
  |  Branch (880:9): [True: 40, False: 5.88M]
  ------------------
  881|     40|            return 1;
  882|     10|        case MATCH_KEYS:
  ------------------
  |  |   35|     10|#define MATCH_KEYS                              22
  ------------------
  |  Branch (882:9): [True: 10, False: 5.88M]
  ------------------
  883|     10|            return 3;
  884|     16|        case MATCH_MAPPING:
  ------------------
  |  |   36|     16|#define MATCH_MAPPING                           23
  ------------------
  |  Branch (884:9): [True: 16, False: 5.88M]
  ------------------
  885|     16|            return 2;
  886|  1.55k|        case MATCH_SEQUENCE:
  ------------------
  |  |   37|  1.55k|#define MATCH_SEQUENCE                          24
  ------------------
  |  Branch (886:9): [True: 1.55k, False: 5.88M]
  ------------------
  887|  1.55k|            return 2;
  888|  8.36k|        case NOP:
  ------------------
  |  |   38|  8.36k|#define NOP                                     25
  ------------------
  |  Branch (888:9): [True: 8.36k, False: 5.87M]
  ------------------
  889|  8.36k|            return 0;
  890|  66.6k|        case NOT_TAKEN:
  ------------------
  |  |   39|  66.6k|#define NOT_TAKEN                               26
  ------------------
  |  Branch (890:9): [True: 66.6k, False: 5.81M]
  ------------------
  891|  66.6k|            return 0;
  892|      0|        case POP_BLOCK:
  ------------------
  |  |  250|      0|#define POP_BLOCK                              262
  ------------------
  |  Branch (892:9): [True: 0, False: 5.88M]
  ------------------
  893|      0|            return 0;
  894|  31.1k|        case POP_EXCEPT:
  ------------------
  |  |   40|  31.1k|#define POP_EXCEPT                              27
  ------------------
  |  Branch (894:9): [True: 31.1k, False: 5.85M]
  ------------------
  895|  31.1k|            return 0;
  896|  4.66k|        case POP_ITER:
  ------------------
  |  |   41|  4.66k|#define POP_ITER                                28
  ------------------
  |  Branch (896:9): [True: 4.66k, False: 5.87M]
  ------------------
  897|  4.66k|            return 0;
  898|   211k|        case POP_JUMP_IF_FALSE:
  ------------------
  |  |  109|   211k|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (898:9): [True: 211k, False: 5.67M]
  ------------------
  899|   211k|            return 0;
  900|  3.00k|        case POP_JUMP_IF_NONE:
  ------------------
  |  |  110|  3.00k|#define POP_JUMP_IF_NONE                        97
  ------------------
  |  Branch (900:9): [True: 3.00k, False: 5.87M]
  ------------------
  901|  3.00k|            return 0;
  902|  2.31k|        case POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  111|  2.31k|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  |  Branch (902:9): [True: 2.31k, False: 5.87M]
  ------------------
  903|  2.31k|            return 0;
  904|  30.7k|        case POP_JUMP_IF_TRUE:
  ------------------
  |  |  112|  30.7k|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (904:9): [True: 30.7k, False: 5.85M]
  ------------------
  905|  30.7k|            return 0;
  906|   388k|        case POP_TOP:
  ------------------
  |  |   42|   388k|#define POP_TOP                                 29
  ------------------
  |  Branch (906:9): [True: 388k, False: 5.49M]
  ------------------
  907|   388k|            return 0;
  908|  15.8k|        case PUSH_EXC_INFO:
  ------------------
  |  |   43|  15.8k|#define PUSH_EXC_INFO                           30
  ------------------
  |  Branch (908:9): [True: 15.8k, False: 5.86M]
  ------------------
  909|  15.8k|            return 2;
  910|   103k|        case PUSH_NULL:
  ------------------
  |  |   44|   103k|#define PUSH_NULL                               31
  ------------------
  |  Branch (910:9): [True: 103k, False: 5.77M]
  ------------------
  911|   103k|            return 1;
  912|  28.6k|        case RAISE_VARARGS:
  ------------------
  |  |  113|  28.6k|#define RAISE_VARARGS                          100
  ------------------
  |  Branch (912:9): [True: 28.6k, False: 5.85M]
  ------------------
  913|  28.6k|            return 0;
  914|  37.3k|        case RERAISE:
  ------------------
  |  |  114|  37.3k|#define RERAISE                                101
  ------------------
  |  Branch (914:9): [True: 37.3k, False: 5.84M]
  ------------------
  915|  37.3k|            return oparg;
  916|      0|        case RESERVED:
  ------------------
  |  |   30|      0|#define RESERVED                                17
  ------------------
  |  Branch (916:9): [True: 0, False: 5.88M]
  ------------------
  917|      0|            return 0;
  918|   162k|        case RESUME:
  ------------------
  |  |  130|   162k|#define RESUME                                 128
  ------------------
  |  Branch (918:9): [True: 162k, False: 5.71M]
  ------------------
  919|   162k|            return 0;
  920|      0|        case RESUME_CHECK:
  ------------------
  |  |  202|      0|#define RESUME_CHECK                           200
  ------------------
  |  Branch (920:9): [True: 0, False: 5.88M]
  ------------------
  921|      0|            return 0;
  922|      0|        case RESUME_CHECK_JIT:
  ------------------
  |  |  203|      0|#define RESUME_CHECK_JIT                       201
  ------------------
  |  Branch (922:9): [True: 0, False: 5.88M]
  ------------------
  923|      0|            return 0;
  924|  5.92k|        case RETURN_GENERATOR:
  ------------------
  |  |   45|  5.92k|#define RETURN_GENERATOR                        32
  ------------------
  |  Branch (924:9): [True: 5.92k, False: 5.87M]
  ------------------
  925|  5.92k|            return 1;
  926|   112k|        case RETURN_VALUE:
  ------------------
  |  |   46|   112k|#define RETURN_VALUE                            33
  ------------------
  |  Branch (926:9): [True: 112k, False: 5.76M]
  ------------------
  927|   112k|            return 1;
  928|  70.5k|        case SEND:
  ------------------
  |  |  115|  70.5k|#define SEND                                   102
  ------------------
  |  Branch (928:9): [True: 70.5k, False: 5.81M]
  ------------------
  929|  70.5k|            return 3;
  930|      0|        case SEND_ASYNC_GEN:
  ------------------
  |  |  204|      0|#define SEND_ASYNC_GEN                         202
  ------------------
  |  Branch (930:9): [True: 0, False: 5.88M]
  ------------------
  931|      0|            return 3;
  932|      0|        case SEND_GEN:
  ------------------
  |  |  205|      0|#define SEND_GEN                               203
  ------------------
  |  Branch (932:9): [True: 0, False: 5.88M]
  ------------------
  933|      0|            return 2;
  934|      0|        case SEND_VIRTUAL:
  ------------------
  |  |  206|      0|#define SEND_VIRTUAL                           204
  ------------------
  |  Branch (934:9): [True: 0, False: 5.88M]
  ------------------
  935|      0|            return 3;
  936|  3.98k|        case SETUP_ANNOTATIONS:
  ------------------
  |  |   47|  3.98k|#define SETUP_ANNOTATIONS                       34
  ------------------
  |  Branch (936:9): [True: 3.98k, False: 5.87M]
  ------------------
  937|  3.98k|            return 0;
  938|  40.4k|        case SETUP_CLEANUP:
  ------------------
  |  |  251|  40.4k|#define SETUP_CLEANUP                          263
  ------------------
  |  Branch (938:9): [True: 40.4k, False: 5.84M]
  ------------------
  939|  40.4k|            return 2;
  940|  86.3k|        case SETUP_FINALLY:
  ------------------
  |  |  252|  86.3k|#define SETUP_FINALLY                          264
  ------------------
  |  Branch (940:9): [True: 86.3k, False: 5.79M]
  ------------------
  941|  86.3k|            return 1;
  942|  22.8k|        case SETUP_WITH:
  ------------------
  |  |  253|  22.8k|#define SETUP_WITH                             265
  ------------------
  |  Branch (942:9): [True: 22.8k, False: 5.85M]
  ------------------
  943|  22.8k|            return 1;
  944|  7.68k|        case SET_ADD:
  ------------------
  |  |  116|  7.68k|#define SET_ADD                                103
  ------------------
  |  Branch (944:9): [True: 7.68k, False: 5.87M]
  ------------------
  945|  7.68k|            return 1 + (oparg-1);
  946|  37.5k|        case SET_FUNCTION_ATTRIBUTE:
  ------------------
  |  |  117|  37.5k|#define SET_FUNCTION_ATTRIBUTE                 104
  ------------------
  |  Branch (946:9): [True: 37.5k, False: 5.84M]
  ------------------
  947|  37.5k|            return 1;
  948|  18.3k|        case SET_UPDATE:
  ------------------
  |  |  118|  18.3k|#define SET_UPDATE                             105
  ------------------
  |  Branch (948:9): [True: 18.3k, False: 5.86M]
  ------------------
  949|  18.3k|            return 1 + (oparg-1);
  950|  5.83k|        case STORE_ATTR:
  ------------------
  |  |  119|  5.83k|#define STORE_ATTR                             106
  ------------------
  |  Branch (950:9): [True: 5.83k, False: 5.87M]
  ------------------
  951|  5.83k|            return 0;
  952|      0|        case STORE_ATTR_INSTANCE_VALUE:
  ------------------
  |  |  207|      0|#define STORE_ATTR_INSTANCE_VALUE              205
  ------------------
  |  Branch (952:9): [True: 0, False: 5.88M]
  ------------------
  953|      0|            return 0;
  954|      0|        case STORE_ATTR_SLOT:
  ------------------
  |  |  208|      0|#define STORE_ATTR_SLOT                        206
  ------------------
  |  Branch (954:9): [True: 0, False: 5.88M]
  ------------------
  955|      0|            return 0;
  956|      0|        case STORE_ATTR_WITH_HINT:
  ------------------
  |  |  209|      0|#define STORE_ATTR_WITH_HINT                   207
  ------------------
  |  Branch (956:9): [True: 0, False: 5.88M]
  ------------------
  957|      0|            return 0;
  958|  19.8k|        case STORE_DEREF:
  ------------------
  |  |  120|  19.8k|#define STORE_DEREF                            107
  ------------------
  |  Branch (958:9): [True: 19.8k, False: 5.86M]
  ------------------
  959|  19.8k|            return 0;
  960|  76.0k|        case STORE_FAST:
  ------------------
  |  |  121|  76.0k|#define STORE_FAST                             108
  ------------------
  |  Branch (960:9): [True: 76.0k, False: 5.80M]
  ------------------
  961|  76.0k|            return 0;
  962|  3.20k|        case STORE_FAST_LOAD_FAST:
  ------------------
  |  |  122|  3.20k|#define STORE_FAST_LOAD_FAST                   109
  ------------------
  |  Branch (962:9): [True: 3.20k, False: 5.87M]
  ------------------
  963|  3.20k|            return 1;
  964|  13.0k|        case STORE_FAST_MAYBE_NULL:
  ------------------
  |  |  254|  13.0k|#define STORE_FAST_MAYBE_NULL                  266
  ------------------
  |  Branch (964:9): [True: 13.0k, False: 5.86M]
  ------------------
  965|  13.0k|            return 0;
  966|  14.9k|        case STORE_FAST_STORE_FAST:
  ------------------
  |  |  123|  14.9k|#define STORE_FAST_STORE_FAST                  110
  ------------------
  |  Branch (966:9): [True: 14.9k, False: 5.86M]
  ------------------
  967|  14.9k|            return 0;
  968|  1.07k|        case STORE_GLOBAL:
  ------------------
  |  |  124|  1.07k|#define STORE_GLOBAL                           111
  ------------------
  |  Branch (968:9): [True: 1.07k, False: 5.88M]
  ------------------
  969|  1.07k|            return 0;
  970|   238k|        case STORE_NAME:
  ------------------
  |  |  125|   238k|#define STORE_NAME                             112
  ------------------
  |  Branch (970:9): [True: 238k, False: 5.64M]
  ------------------
  971|   238k|            return 0;
  972|    524|        case STORE_SLICE:
  ------------------
  |  |   48|    524|#define STORE_SLICE                             35
  ------------------
  |  Branch (972:9): [True: 524, False: 5.88M]
  ------------------
  973|    524|            return 0;
  974|  41.3k|        case STORE_SUBSCR:
  ------------------
  |  |   49|  41.3k|#define STORE_SUBSCR                            36
  ------------------
  |  Branch (974:9): [True: 41.3k, False: 5.84M]
  ------------------
  975|  41.3k|            return 0;
  976|      0|        case STORE_SUBSCR_DICT:
  ------------------
  |  |  210|      0|#define STORE_SUBSCR_DICT                      208
  ------------------
  |  Branch (976:9): [True: 0, False: 5.88M]
  ------------------
  977|      0|            return 0;
  978|      0|        case STORE_SUBSCR_LIST_INT:
  ------------------
  |  |  211|      0|#define STORE_SUBSCR_LIST_INT                  209
  ------------------
  |  Branch (978:9): [True: 0, False: 5.88M]
  ------------------
  979|      0|            return 0;
  980|  95.8k|        case SWAP:
  ------------------
  |  |  126|  95.8k|#define SWAP                                   113
  ------------------
  |  Branch (980:9): [True: 95.8k, False: 5.78M]
  ------------------
  981|  95.8k|            return 2 + (oparg-2);
  982|   107k|        case TO_BOOL:
  ------------------
  |  |   50|   107k|#define TO_BOOL                                 37
  ------------------
  |  Branch (982:9): [True: 107k, False: 5.77M]
  ------------------
  983|   107k|            return 1;
  984|      0|        case TO_BOOL_ALWAYS_TRUE:
  ------------------
  |  |  212|      0|#define TO_BOOL_ALWAYS_TRUE                    210
  ------------------
  |  Branch (984:9): [True: 0, False: 5.88M]
  ------------------
  985|      0|            return 1;
  986|      0|        case TO_BOOL_BOOL:
  ------------------
  |  |  213|      0|#define TO_BOOL_BOOL                           211
  ------------------
  |  Branch (986:9): [True: 0, False: 5.88M]
  ------------------
  987|      0|            return 1;
  988|      0|        case TO_BOOL_INT:
  ------------------
  |  |  214|      0|#define TO_BOOL_INT                            212
  ------------------
  |  Branch (988:9): [True: 0, False: 5.88M]
  ------------------
  989|      0|            return 1;
  990|      0|        case TO_BOOL_LIST:
  ------------------
  |  |  215|      0|#define TO_BOOL_LIST                           213
  ------------------
  |  Branch (990:9): [True: 0, False: 5.88M]
  ------------------
  991|      0|            return 1;
  992|      0|        case TO_BOOL_NONE:
  ------------------
  |  |  216|      0|#define TO_BOOL_NONE                           214
  ------------------
  |  Branch (992:9): [True: 0, False: 5.88M]
  ------------------
  993|      0|            return 1;
  994|      0|        case TO_BOOL_STR:
  ------------------
  |  |  217|      0|#define TO_BOOL_STR                            215
  ------------------
  |  Branch (994:9): [True: 0, False: 5.88M]
  ------------------
  995|      0|            return 1;
  996|      0|        case TRACE_RECORD:
  ------------------
  |  |  243|      0|#define TRACE_RECORD                           255
  ------------------
  |  Branch (996:9): [True: 0, False: 5.88M]
  ------------------
  997|      0|            return 0;
  998|  1.35k|        case UNARY_INVERT:
  ------------------
  |  |   51|  1.35k|#define UNARY_INVERT                            38
  ------------------
  |  Branch (998:9): [True: 1.35k, False: 5.88M]
  ------------------
  999|  1.35k|            return 1;
 1000|  26.6k|        case UNARY_NEGATIVE:
  ------------------
  |  |   52|  26.6k|#define UNARY_NEGATIVE                          39
  ------------------
  |  Branch (1000:9): [True: 26.6k, False: 5.85M]
  ------------------
 1001|  26.6k|            return 1;
 1002|    142|        case UNARY_NOT:
  ------------------
  |  |   53|    142|#define UNARY_NOT                               40
  ------------------
  |  Branch (1002:9): [True: 142, False: 5.88M]
  ------------------
 1003|    142|            return 1;
 1004|    838|        case UNPACK_EX:
  ------------------
  |  |  127|    838|#define UNPACK_EX                              114
  ------------------
  |  Branch (1004:9): [True: 838, False: 5.88M]
  ------------------
 1005|    838|            return 1 + (oparg & 0xFF) + (oparg >> 8);
 1006|  46.8k|        case UNPACK_SEQUENCE:
  ------------------
  |  |  128|  46.8k|#define UNPACK_SEQUENCE                        115
  ------------------
  |  Branch (1006:9): [True: 46.8k, False: 5.83M]
  ------------------
 1007|  46.8k|            return oparg;
 1008|      0|        case UNPACK_SEQUENCE_LIST:
  ------------------
  |  |  218|      0|#define UNPACK_SEQUENCE_LIST                   216
  ------------------
  |  Branch (1008:9): [True: 0, False: 5.88M]
  ------------------
 1009|      0|            return oparg;
 1010|      0|        case UNPACK_SEQUENCE_TUPLE:
  ------------------
  |  |  219|      0|#define UNPACK_SEQUENCE_TUPLE                  217
  ------------------
  |  Branch (1010:9): [True: 0, False: 5.88M]
  ------------------
 1011|      0|            return oparg;
 1012|      0|        case UNPACK_SEQUENCE_TWO_TUPLE:
  ------------------
  |  |  220|      0|#define UNPACK_SEQUENCE_TWO_TUPLE              218
  ------------------
  |  Branch (1012:9): [True: 0, False: 5.88M]
  ------------------
 1013|      0|            return 2;
 1014|  11.4k|        case WITH_EXCEPT_START:
  ------------------
  |  |   54|  11.4k|#define WITH_EXCEPT_START                       41
  ------------------
  |  Branch (1014:9): [True: 11.4k, False: 5.87M]
  ------------------
 1015|  11.4k|            return 6;
 1016|  56.3k|        case YIELD_VALUE:
  ------------------
  |  |  129|  56.3k|#define YIELD_VALUE                            116
  ------------------
  |  Branch (1016:9): [True: 56.3k, False: 5.82M]
  ------------------
 1017|  56.3k|            return 1;
 1018|      0|        default:
  ------------------
  |  Branch (1018:9): [True: 0, False: 5.88M]
  ------------------
 1019|      0|            return -1;
 1020|  5.88M|    }
 1021|  5.88M|}
flowgraph.c:is_pseudo_target:
 2139|  31.5k|is_pseudo_target(int pseudo, int target) {
 2140|  31.5k|    if (pseudo < 256 || pseudo >= 267) {
  ------------------
  |  Branch (2140:9): [True: 0, False: 31.5k]
  |  Branch (2140:25): [True: 0, False: 31.5k]
  ------------------
 2141|      0|        return false;
 2142|      0|    }
 2143|  31.5k|    for (int i = 0; _PyOpcode_PseudoTargets[pseudo-256].targets[i]; i++) {
  ------------------
  |  Branch (2143:21): [True: 31.5k, False: 0]
  ------------------
 2144|  31.5k|        if (_PyOpcode_PseudoTargets[pseudo-256].targets[i] == target) return true;
  ------------------
  |  Branch (2144:13): [True: 31.5k, False: 0]
  ------------------
 2145|  31.5k|    }
 2146|      0|    return false;
 2147|  31.5k|}
assemble.c:is_pseudo_target:
 2139|   172k|is_pseudo_target(int pseudo, int target) {
 2140|   172k|    if (pseudo < 256 || pseudo >= 267) {
  ------------------
  |  Branch (2140:9): [True: 0, False: 172k]
  |  Branch (2140:25): [True: 0, False: 172k]
  ------------------
 2141|      0|        return false;
 2142|      0|    }
 2143|   258k|    for (int i = 0; _PyOpcode_PseudoTargets[pseudo-256].targets[i]; i++) {
  ------------------
  |  Branch (2143:21): [True: 258k, False: 0]
  ------------------
 2144|   258k|        if (_PyOpcode_PseudoTargets[pseudo-256].targets[i] == target) return true;
  ------------------
  |  Branch (2144:13): [True: 172k, False: 86.0k]
  ------------------
 2145|   258k|    }
 2146|      0|    return false;
 2147|   172k|}

dictobject.c:_PyErr_Occurred:
   76|    525|{
   77|    525|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 525, False: 0]
  ------------------
   78|    525|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 525, False: 0]
  ------------------
   79|    525|        return NULL;
   80|    525|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|    525|}
object.c:_PyErr_Occurred:
   76|     36|{
   77|     36|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 36, False: 0]
  ------------------
   78|     36|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 36, False: 0]
  ------------------
   79|     36|        return NULL;
   80|     36|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|     36|}
typeobject.c:_PyErr_Occurred:
   76|   374k|{
   77|   374k|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 374k, False: 0]
  ------------------
   78|   374k|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 374k, False: 55]
  ------------------
   79|   374k|        return NULL;
   80|   374k|    }
   81|     55|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|     55|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|   374k|}
ceval.c:_PyErr_Occurred:
   76|  20.7M|{
   77|  20.7M|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 20.7M, False: 0]
  ------------------
   78|  20.7M|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 20.7M, False: 55.5k]
  ------------------
   79|  20.7M|        return NULL;
   80|  20.7M|    }
   81|  55.5k|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|  55.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  55.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  55.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  20.7M|}
ceval.c:_PyErr_ClearExcState:
   85|  1.23k|{
   86|       |    Py_CLEAR(exc_state->exc_value);
  ------------------
  |  |  484|  1.23k|    do { \
  |  |  485|  1.23k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  1.23k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  1.23k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  1.23k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  1.23k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  1.23k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 1.23k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  1.23k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1.23k]
  |  |  ------------------
  ------------------
   87|  1.23k|}
errors.c:_PyErr_Occurred:
   76|  4.36M|{
   77|  4.36M|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 4.36M, False: 0]
  ------------------
   78|  4.36M|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 4.20M, False: 158k]
  ------------------
   79|  4.20M|        return NULL;
   80|  4.20M|    }
   81|   158k|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|   158k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   158k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   158k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  4.36M|}
gc.c:_PyErr_Occurred:
   76|  33.1M|{
   77|  33.1M|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 33.1M, False: 0]
  ------------------
   78|  33.1M|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 33.1M, False: 0]
  ------------------
   79|  33.1M|        return NULL;
   80|  33.1M|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  33.1M|}
import.c:_PyErr_Occurred:
   76|  52.0k|{
   77|  52.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 52.0k, False: 0]
  ------------------
   78|  52.0k|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 52.0k, False: 0]
  ------------------
   79|  52.0k|        return NULL;
   80|  52.0k|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  52.0k|}
pylifecycle.c:_PyErr_Occurred:
   76|      6|{
   77|      6|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 6, False: 0]
  ------------------
   78|      6|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 6, False: 0]
  ------------------
   79|      6|        return NULL;
   80|      6|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|      6|}
sysmodule.c:_PyErr_Occurred:
   76|     10|{
   77|     10|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 10, False: 0]
  ------------------
   78|     10|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 10, False: 0]
  ------------------
   79|     10|        return NULL;
   80|     10|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|     10|}
abstract.c:_PyErr_Occurred:
   76|  73.0k|{
   77|  73.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 73.0k, False: 0]
  ------------------
   78|  73.0k|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 70.2k, False: 2.75k]
  ------------------
   79|  70.2k|        return NULL;
   80|  70.2k|    }
   81|  2.75k|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|  2.75k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.75k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.75k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  73.0k|}
call.c:_PyErr_Occurred:
   76|  16.6M|{
   77|  16.6M|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 16.6M, False: 0]
  ------------------
   78|  16.6M|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 16.6M, False: 26.4k]
  ------------------
   79|  16.6M|        return NULL;
   80|  16.6M|    }
   81|  26.4k|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|  26.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  26.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  26.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  16.6M|}
genobject.c:_PyErr_ClearExcState:
   85|     12|{
   86|       |    Py_CLEAR(exc_state->exc_value);
  ------------------
  |  |  484|     12|    do { \
  |  |  485|     12|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     12|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     12|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     12|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     12|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     12|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 12]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
   87|     12|}
genobject.c:_PyErr_Occurred:
   76|  49.6k|{
   77|  49.6k|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 49.6k, False: 0]
  ------------------
   78|  49.6k|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 49.6k, False: 0]
  ------------------
   79|  49.6k|        return NULL;
   80|  49.6k|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  49.6k|}
methodobject.c:_PyErr_Occurred:
   76|  73.3k|{
   77|  73.3k|    assert(tstate != NULL);
  ------------------
  |  Branch (77:5): [True: 73.3k, False: 0]
  ------------------
   78|  73.3k|    if (tstate->current_exception == NULL) {
  ------------------
  |  Branch (78:9): [True: 73.3k, False: 0]
  ------------------
   79|  73.3k|        return NULL;
   80|  73.3k|    }
   81|      0|    return (PyObject *)Py_TYPE(tstate->current_exception);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  73.3k|}

hashtable.c:_Py_HashPointerRaw:
   11|  2.17M|{
   12|  2.17M|    uintptr_t x = (uintptr_t)ptr;
   13|  2.17M|    Py_BUILD_ASSERT(sizeof(x) == sizeof(ptr));
  ------------------
  |  |  192|  2.17M|        do { \
  |  |  193|  2.17M|            static_assert((cond), #cond); \
  |  |  194|  2.17M|        } while (0)
  |  |  ------------------
  |  |  |  Branch (194:18): [Folded, False: 2.17M]
  |  |  ------------------
  ------------------
   14|       |
   15|       |    // Bottom 3 or 4 bits are likely to be 0; rotate x by 4 to the right
   16|       |    // to avoid excessive hash collisions for dicts and sets.
   17|  2.17M|    x = (x >> 4) | (x << (8 * sizeof(uintptr_t) - 4));
   18|       |
   19|       |    Py_BUILD_ASSERT(sizeof(x) == sizeof(Py_hash_t));
  ------------------
  |  |  192|  2.17M|        do { \
  |  |  193|  2.17M|            static_assert((cond), #cond); \
  |  |  194|  2.17M|        } while (0)
  |  |  ------------------
  |  |  |  Branch (194:18): [Folded, False: 2.17M]
  |  |  ------------------
  ------------------
   20|  2.17M|    return (Py_hash_t)x;
   21|  2.17M|}
pyhash.c:_Py_HashPointerRaw:
   11|  53.0M|{
   12|  53.0M|    uintptr_t x = (uintptr_t)ptr;
   13|  53.0M|    Py_BUILD_ASSERT(sizeof(x) == sizeof(ptr));
  ------------------
  |  |  192|  53.0M|        do { \
  |  |  193|  53.0M|            static_assert((cond), #cond); \
  |  |  194|  53.0M|        } while (0)
  |  |  ------------------
  |  |  |  Branch (194:18): [Folded, False: 53.0M]
  |  |  ------------------
  ------------------
   14|       |
   15|       |    // Bottom 3 or 4 bits are likely to be 0; rotate x by 4 to the right
   16|       |    // to avoid excessive hash collisions for dicts and sets.
   17|  53.0M|    x = (x >> 4) | (x << (8 * sizeof(uintptr_t) - 4));
   18|       |
   19|       |    Py_BUILD_ASSERT(sizeof(x) == sizeof(Py_hash_t));
  ------------------
  |  |  192|  53.0M|        do { \
  |  |  193|  53.0M|            static_assert((cond), #cond); \
  |  |  194|  53.0M|        } while (0)
  |  |  ------------------
  |  |  |  Branch (194:18): [Folded, False: 53.0M]
  |  |  ------------------
  ------------------
   20|  53.0M|    return (Py_hash_t)x;
   21|  53.0M|}

complexobject.c:_Py_ADJUST_ERANGE2:
   46|  47.0k|{
   47|  47.0k|    if (x == INFINITY || x == -INFINITY ||
  ------------------
  |  Branch (47:9): [True: 924, False: 46.1k]
  |  Branch (47:26): [True: 821, False: 45.3k]
  ------------------
   48|  45.3k|        y == INFINITY || y == -INFINITY)
  ------------------
  |  Branch (48:9): [True: 7, False: 45.3k]
  |  Branch (48:26): [True: 1.02k, False: 44.2k]
  ------------------
   49|  2.77k|    {
   50|  2.77k|        if (errno == 0) {
  ------------------
  |  Branch (50:13): [True: 2.77k, False: 0]
  ------------------
   51|  2.77k|            errno = ERANGE;
   52|  2.77k|        }
   53|  2.77k|    }
   54|  44.2k|    else if (errno == ERANGE) {
  ------------------
  |  Branch (54:14): [True: 0, False: 44.2k]
  ------------------
   55|       |        errno = 0;
   56|      0|    }
   57|  47.0k|}
floatobject.c:_Py_ADJUST_ERANGE1:
   34|  4.33k|{
   35|  4.33k|    if (errno == 0) {
  ------------------
  |  Branch (35:9): [True: 2.26k, False: 2.06k]
  ------------------
   36|  2.26k|        if (x == INFINITY || x == -INFINITY) {
  ------------------
  |  Branch (36:13): [True: 0, False: 2.26k]
  |  Branch (36:30): [True: 0, False: 2.26k]
  ------------------
   37|      0|            errno = ERANGE;
   38|      0|        }
   39|  2.26k|    }
   40|  2.06k|    else if (errno == ERANGE && x == 0.0) {
  ------------------
  |  Branch (40:14): [True: 2.06k, False: 0]
  |  Branch (40:33): [True: 634, False: 1.43k]
  ------------------
   41|       |        errno = 0;
   42|    634|    }
   43|  4.33k|}

object.c:_PyMem_IsPtrFreed:
   54|   759M|{
   55|   759M|    uintptr_t value = (uintptr_t)ptr;
   56|   759M|#if SIZEOF_VOID_P == 8
   57|   759M|    return (value <= 0xff  // NULL, 0x1, 0x2, ..., 0xff
  ------------------
  |  Branch (57:13): [True: 0, False: 759M]
  ------------------
   58|   759M|            || value == (uintptr_t)0xCDCDCDCDCDCDCDCD
  ------------------
  |  Branch (58:16): [True: 0, False: 759M]
  ------------------
   59|   759M|            || value == (uintptr_t)0xDDDDDDDDDDDDDDDD
  ------------------
  |  Branch (59:16): [True: 0, False: 759M]
  ------------------
   60|   759M|            || value == (uintptr_t)0xFDFDFDFDFDFDFDFD
  ------------------
  |  Branch (60:16): [True: 0, False: 759M]
  ------------------
   61|   759M|            || value >= (uintptr_t)0xFFFFFFFFFFFFFF00);  // -0xff, ..., -2, -1
  ------------------
  |  Branch (61:16): [True: 0, False: 759M]
  ------------------
   62|       |#elif SIZEOF_VOID_P == 4
   63|       |    return (value <= 0xff
   64|       |            || value == (uintptr_t)0xCDCDCDCD
   65|       |            || value == (uintptr_t)0xDDDDDDDD
   66|       |            || value == (uintptr_t)0xFDFDFDFD
   67|       |            || value >= (uintptr_t)0xFFFFFF00);
   68|       |#else
   69|       |#  error "unknown pointer size"
   70|       |#endif
   71|   759M|}
flowgraph.c:_PyMem_IsPtrFreed:
   54|   967k|{
   55|   967k|    uintptr_t value = (uintptr_t)ptr;
   56|   967k|#if SIZEOF_VOID_P == 8
   57|   967k|    return (value <= 0xff  // NULL, 0x1, 0x2, ..., 0xff
  ------------------
  |  Branch (57:13): [True: 0, False: 967k]
  ------------------
   58|   967k|            || value == (uintptr_t)0xCDCDCDCDCDCDCDCD
  ------------------
  |  Branch (58:16): [True: 0, False: 967k]
  ------------------
   59|   967k|            || value == (uintptr_t)0xDDDDDDDDDDDDDDDD
  ------------------
  |  Branch (59:16): [True: 0, False: 967k]
  ------------------
   60|   967k|            || value == (uintptr_t)0xFDFDFDFDFDFDFDFD
  ------------------
  |  Branch (60:16): [True: 0, False: 967k]
  ------------------
   61|   967k|            || value >= (uintptr_t)0xFFFFFFFFFFFFFF00);  // -0xff, ..., -2, -1
  ------------------
  |  Branch (61:16): [True: 0, False: 967k]
  ------------------
   62|       |#elif SIZEOF_VOID_P == 4
   63|       |    return (value <= 0xff
   64|       |            || value == (uintptr_t)0xCDCDCDCD
   65|       |            || value == (uintptr_t)0xDDDDDDDD
   66|       |            || value == (uintptr_t)0xFDFDFDFD
   67|       |            || value >= (uintptr_t)0xFFFFFF00);
   68|       |#else
   69|       |#  error "unknown pointer size"
   70|       |#endif
   71|   967k|}
pystate.c:_PyMem_IsPtrFreed:
   54|   224k|{
   55|   224k|    uintptr_t value = (uintptr_t)ptr;
   56|   224k|#if SIZEOF_VOID_P == 8
   57|   224k|    return (value <= 0xff  // NULL, 0x1, 0x2, ..., 0xff
  ------------------
  |  Branch (57:13): [True: 0, False: 224k]
  ------------------
   58|   224k|            || value == (uintptr_t)0xCDCDCDCDCDCDCDCD
  ------------------
  |  Branch (58:16): [True: 0, False: 224k]
  ------------------
   59|   224k|            || value == (uintptr_t)0xDDDDDDDDDDDDDDDD
  ------------------
  |  Branch (59:16): [True: 0, False: 224k]
  ------------------
   60|   224k|            || value == (uintptr_t)0xFDFDFDFDFDFDFDFD
  ------------------
  |  Branch (60:16): [True: 0, False: 224k]
  ------------------
   61|   224k|            || value >= (uintptr_t)0xFFFFFFFFFFFFFF00);  // -0xff, ..., -2, -1
  ------------------
  |  Branch (61:16): [True: 0, False: 224k]
  ------------------
   62|       |#elif SIZEOF_VOID_P == 4
   63|       |    return (value <= 0xff
   64|       |            || value == (uintptr_t)0xCDCDCDCD
   65|       |            || value == (uintptr_t)0xDDDDDDDD
   66|       |            || value == (uintptr_t)0xFDFDFDFD
   67|       |            || value >= (uintptr_t)0xFFFFFF00);
   68|       |#else
   69|       |#  error "unknown pointer size"
   70|       |#endif
   71|   224k|}

exceptions.c:_PyInterpreterState_GET:
  225|  67.8k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  67.8k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  67.8k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  67.8k|}
genericaliasobject.c:_PyInterpreterState_GET:
  225|      5|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      5|#if !defined(Py_BUILD_CORE_MODULE)
  231|      5|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      5|}
listobject.c:_PyInterpreterState_GET:
  225|  2.75M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  2.75M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  2.75M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  2.75M|}
longobject.c:_PyInterpreterState_GET:
  225|  25.4M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  25.4M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  25.4M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  25.4M|}
dictobject.c:_PyInterpreterState_GET:
  225|  4.02M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  4.02M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  4.02M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  4.02M|}
dictobject.c:_PyThreadState_GET:
  117|    541|{
  118|    541|#if !defined(Py_BUILD_CORE_MODULE)
  119|    541|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|    541|}
moduleobject.c:_PyInterpreterState_GET:
  225|     43|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     43|#if !defined(Py_BUILD_CORE_MODULE)
  231|     43|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     43|}
object.c:_PyThreadState_GET:
  117|  88.6M|{
  118|  88.6M|#if !defined(Py_BUILD_CORE_MODULE)
  119|  88.6M|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  88.6M|}
object.c:_Py_get_machine_stack_pointer:
  336|  80.2M|_Py_get_machine_stack_pointer(void) {
  337|  80.2M|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|  80.2M|    return result;
  351|  80.2M|}
object.c:_PyInterpreterState_GET:
  225|    834|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|    834|#if !defined(Py_BUILD_CORE_MODULE)
  231|    834|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|    834|}
object.c:_Py_RecursionLimit_GetMargin:
  355|  60.3M|{
  356|  60.3M|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  357|  60.3M|    assert(_tstate->c_stack_hard_limit != 0);
  ------------------
  |  Branch (357:5): [True: 60.3M, False: 0]
  ------------------
  358|  60.3M|    intptr_t here_addr = _Py_get_machine_stack_pointer();
  359|  60.3M|#if _Py_STACK_GROWS_DOWN
  360|  60.3M|    return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, here_addr - (intptr_t)_tstate->c_stack_soft_limit, _PyOS_STACK_MARGIN_SHIFT);
  ------------------
  |  |  226|  60.3M|#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J))
  ------------------
  361|       |#else
  362|       |    return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, (intptr_t)_tstate->c_stack_soft_limit - here_addr, _PyOS_STACK_MARGIN_SHIFT);
  363|       |#endif
  364|  60.3M|}
object.c:_Py_AssertHoldsTstateFunc:
  320|   178k|{
  321|   178k|    PyThreadState *tstate = _PyThreadState_GET();
  322|   178k|    _Py_EnsureFuncTstateNotNULL(func, tstate);
  323|   178k|}
object.c:_Py_EnsureFuncTstateNotNULL:
  195|   178k|{
  196|   178k|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 178k]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|   178k|}
obmalloc.c:_PyInterpreterState_GET:
  225|   182M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   182M|#if !defined(Py_BUILD_CORE_MODULE)
  231|   182M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   182M|}
obmalloc.c:_Py_IsMainInterpreter:
   61|      2|{
   62|      2|    return (interp == _PyInterpreterState_Main());
   63|      2|}
rangeobject.c:_PyInterpreterState_GET:
  225|  1.51k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  1.51k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  1.51k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  1.51k|}
sentinelobject.c:_PyInterpreterState_GET:
  225|      3|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      3|#if !defined(Py_BUILD_CORE_MODULE)
  231|      3|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      3|}
sentinelobject.c:_PyThreadState_GET:
  117|      3|{
  118|      3|#if !defined(Py_BUILD_CORE_MODULE)
  119|      3|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|      3|}
setobject.c:_PyInterpreterState_GET:
  225|   721k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   721k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   721k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   721k|}
sliceobject.c:_PyInterpreterState_GET:
  225|   118k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   118k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   118k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   118k|}
tupleobject.c:_PyInterpreterState_GET:
  225|   210M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   210M|#if !defined(Py_BUILD_CORE_MODULE)
  231|   210M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   210M|}
typeobject.c:_PyInterpreterState_GET:
  225|  2.07M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  2.07M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  2.07M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  2.07M|}
typeobject.c:_PyThreadState_GET:
  117|   613k|{
  118|   613k|#if !defined(Py_BUILD_CORE_MODULE)
  119|   613k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   613k|}
typeobject.c:_Py_IsMainInterpreter:
   61|    406|{
   62|    406|    return (interp == _PyInterpreterState_Main());
   63|    406|}
unicode_writer.c:_PyInterpreterState_GET:
  225|   164k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   164k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   164k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   164k|}
unicodeobject.c:_PyInterpreterState_GET:
  225|   342k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   342k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   342k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   342k|}
unicodeobject.c:_Py_IsMainInterpreter:
   61|      6|{
   62|      6|    return (interp == _PyInterpreterState_Main());
   63|      6|}
unionobject.c:_PyInterpreterState_GET:
  225|     46|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     46|#if !defined(Py_BUILD_CORE_MODULE)
  231|     46|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     46|}
weakrefobject.c:_PyInterpreterState_GET:
  225|    594|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|    594|#if !defined(Py_BUILD_CORE_MODULE)
  231|    594|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|    594|}
_warnings.c:_PyThreadState_GET:
  117|  48.4k|{
  118|  48.4k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  48.4k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  48.4k|}
_warnings.c:_PyInterpreterState_GET:
  225|      2|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      2|#if !defined(Py_BUILD_CORE_MODULE)
  231|      2|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      2|}
bltinmodule.c:_PyThreadState_GET:
  117|    830|{
  118|    830|#if !defined(Py_BUILD_CORE_MODULE)
  119|    830|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|    830|}
ceval.c:_Py_get_machine_stack_pointer:
  336|   159M|_Py_get_machine_stack_pointer(void) {
  337|   159M|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|   159M|    return result;
  351|   159M|}
ceval.c:_PyThreadState_GET:
  117|  8.96M|{
  118|  8.96M|#if !defined(Py_BUILD_CORE_MODULE)
  119|  8.96M|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  8.96M|}
ceval.c:_Py_EnsureFuncTstateNotNULL:
  195|   192k|{
  196|   192k|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 192k]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|   192k|}
codecs.c:_PyInterpreterState_GET:
  225|  44.3k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  44.3k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  44.3k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  44.3k|}
context.c:_PyInterpreterState_GET:
  225|      2|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      2|#if !defined(Py_BUILD_CORE_MODULE)
  231|      2|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      2|}
context.c:_PyThreadState_GET:
  117|  48.4k|{
  118|  48.4k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  48.4k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  48.4k|}
errors.c:_PyThreadState_GET:
  117|  9.11M|{
  118|  9.11M|#if !defined(Py_BUILD_CORE_MODULE)
  119|  9.11M|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  9.11M|}
errors.c:_Py_AssertHoldsTstateFunc:
  320|  4.27M|{
  321|  4.27M|    PyThreadState *tstate = _PyThreadState_GET();
  322|  4.27M|    _Py_EnsureFuncTstateNotNULL(func, tstate);
  323|  4.27M|}
errors.c:_Py_EnsureFuncTstateNotNULL:
  195|  4.27M|{
  196|  4.27M|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 4.27M]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|  4.27M|}
flowgraph.c:_PyInterpreterState_GET:
  225|  46.3k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  46.3k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  46.3k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  46.3k|}
frame.c:_PyThreadState_GET:
  117|  6.66M|{
  118|  6.66M|#if !defined(Py_BUILD_CORE_MODULE)
  119|  6.66M|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  6.66M|}
frame.c:_PyInterpreterState_GET:
  225|  4.21k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  4.21k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  4.21k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  4.21k|}
gc.c:_PyInterpreterState_GET:
  225|  64.1M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  64.1M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  64.1M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  64.1M|}
gc.c:_PyThreadState_GET:
  117|   100M|{
  118|   100M|#if !defined(Py_BUILD_CORE_MODULE)
  119|   100M|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   100M|}
ceval_gil.c:_PyThreadState_GET:
  117|  56.0k|{
  118|  56.0k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  56.0k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  56.0k|}
ceval_gil.c:_Py_EnsureFuncTstateNotNULL:
  195|   112k|{
  196|   112k|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 112k]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|   112k|}
hamt.c:_PyInterpreterState_GET:
  225|      2|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      2|#if !defined(Py_BUILD_CORE_MODULE)
  231|      2|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      2|}
import.c:_PyThreadState_GET:
  117|   496k|{
  118|   496k|#if !defined(Py_BUILD_CORE_MODULE)
  119|   496k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   496k|}
import.c:_PyInterpreterState_GET:
  225|  4.05k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  4.05k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  4.05k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  4.05k|}
import.c:_Py_IsMainInterpreter:
   61|     47|{
   62|     47|    return (interp == _PyInterpreterState_Main());
   63|     47|}
marshal.c:_PyInterpreterState_GET:
  225|  17.0k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  17.0k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  17.0k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  17.0k|}
pylifecycle.c:_Py_IsMainInterpreter:
   61|      8|{
   62|      8|    return (interp == _PyInterpreterState_Main());
   63|      8|}
pystate.c:_Py_EnsureFuncTstateNotNULL:
  195|   192k|{
  196|   192k|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 192k]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|   192k|}
pystate.c:_Py_IsMainInterpreter:
   61|      4|{
   62|      4|    return (interp == _PyInterpreterState_Main());
   63|      4|}
pythonrun.c:_PyThreadState_GET:
  117|      3|{
  118|      3|#if !defined(Py_BUILD_CORE_MODULE)
  119|      3|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|      3|}
specialize.c:_PyThreadState_GET:
  117|  56.1k|{
  118|  56.1k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  56.1k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  56.1k|}
specialize.c:_PyInterpreterState_GET:
  225|  2.93k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  2.93k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  2.93k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  2.93k|}
symtable.c:_PyThreadState_GET:
  117|  10.8k|{
  118|  10.8k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  10.8k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  10.8k|}
sysmodule.c:_PyThreadState_GET:
  117|  61.1k|{
  118|  61.1k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  61.1k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  61.1k|}
sysmodule.c:_PyInterpreterState_GET:
  225|     47|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     47|#if !defined(Py_BUILD_CORE_MODULE)
  231|     47|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     47|}
sysmodule.c:_Py_EnsureFuncTstateNotNULL:
  195|    336|{
  196|    336|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 336]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|    336|}
thread.c:_PyInterpreterState_GET:
  225|      2|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      2|#if !defined(Py_BUILD_CORE_MODULE)
  231|      2|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      2|}
typecache.c:_PyInterpreterState_GET:
  225|   932k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   932k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   932k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   932k|}
dtoa.c:_PyInterpreterState_GET:
  225|  1.46M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  1.46M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  1.46M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  1.46M|}
fileutils.c:_Py_AssertHoldsTstateFunc:
  320|  54.1k|{
  321|  54.1k|    PyThreadState *tstate = _PyThreadState_GET();
  322|  54.1k|    _Py_EnsureFuncTstateNotNULL(func, tstate);
  323|  54.1k|}
fileutils.c:_PyThreadState_GET:
  117|  54.1k|{
  118|  54.1k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  54.1k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  54.1k|}
fileutils.c:_Py_EnsureFuncTstateNotNULL:
  195|  54.1k|{
  196|  54.1k|    if (tstate == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 54.1k]
  ------------------
  197|      0|#ifndef Py_GIL_DISABLED
  198|      0|        _Py_FatalErrorFunc(func,
  199|      0|            "the function must be called with the GIL held, "
  200|      0|            "after Python initialization and before Python finalization, "
  201|      0|            "but the GIL is released (the current Python thread state is NULL)");
  202|       |#else
  203|       |        _Py_FatalErrorFunc(func,
  204|       |            "the function must be called with an active thread state, "
  205|       |            "after Python initialization and before Python finalization, "
  206|       |            "but it was called without an active thread state. "
  207|       |            "Are you trying to call the C API inside of a Py_BEGIN_ALLOW_THREADS block?");
  208|       |#endif
  209|      0|    }
  210|  54.1k|}
dynload_shlib.c:_PyInterpreterState_GET:
  225|     20|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     20|#if !defined(Py_BUILD_CORE_MODULE)
  231|     20|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     20|}
signalmodule.c:_Py_IsMainInterpreter:
   61|   861k|{
   62|   861k|    return (interp == _PyInterpreterState_Main());
   63|   861k|}
signalmodule.c:_PyThreadState_GET:
  117|   861k|{
  118|   861k|#if !defined(Py_BUILD_CORE_MODULE)
  119|   861k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   861k|}
signalmodule.c:_Py_ThreadCanHandleSignals:
   84|   861k|{
   85|   861k|    return (_Py_IsMainThread() && _Py_IsMainInterpreter(interp));
  ------------------
  |  Branch (85:13): [True: 861k, False: 0]
  |  Branch (85:35): [True: 861k, False: 0]
  ------------------
   86|   861k|}
fileio.c:_PyInterpreterState_GET:
  225|     93|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     93|#if !defined(Py_BUILD_CORE_MODULE)
  231|     93|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     93|}
bufferedio.c:_PyInterpreterState_GET:
  225|     93|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     93|#if !defined(Py_BUILD_CORE_MODULE)
  231|     93|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     93|}
bufferedio.c:_PyThreadState_GET:
  117|     93|{
  118|     93|#if !defined(Py_BUILD_CORE_MODULE)
  119|     93|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|     93|}
textio.c:_PyInterpreterState_GET:
  225|      6|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      6|#if !defined(Py_BUILD_CORE_MODULE)
  231|      6|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      6|}
_functoolsmodule.c:_PyThreadState_GET:
  117|      2|{
  118|      2|#if !defined(Py_BUILD_CORE_MODULE)
  119|      2|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|      2|}
getpath.c:_PyThreadState_GET:
  117|      2|{
  118|      2|#if !defined(Py_BUILD_CORE_MODULE)
  119|      2|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|      2|}
abstract.c:_PyThreadState_GET:
  117|   662k|{
  118|   662k|#if !defined(Py_BUILD_CORE_MODULE)
  119|   662k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   662k|}
abstract.c:_Py_get_machine_stack_pointer:
  336|    221|_Py_get_machine_stack_pointer(void) {
  337|    221|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|    221|    return result;
  351|    221|}
bytearrayobject.c:_PyInterpreterState_GET:
  225|      4|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|      4|#if !defined(Py_BUILD_CORE_MODULE)
  231|      4|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|      4|}
bytesobject.c:_PyInterpreterState_GET:
  225|   469k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   469k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   469k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   469k|}
call.c:_PyThreadState_GET:
  117|  16.2M|{
  118|  16.2M|#if !defined(Py_BUILD_CORE_MODULE)
  119|  16.2M|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  16.2M|}
call.c:_Py_get_machine_stack_pointer:
  336|   374k|_Py_get_machine_stack_pointer(void) {
  337|   374k|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|   374k|    return result;
  351|   374k|}
cellobject.c:_PyInterpreterState_GET:
  225|  2.86k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  2.86k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  2.86k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  2.86k|}
classobject.c:_PyInterpreterState_GET:
  225|  9.04k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  9.04k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  9.04k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  9.04k|}
classobject.c:_PyThreadState_GET:
  117|  38.9k|{
  118|  38.9k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  38.9k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  38.9k|}
codeobject.c:_PyInterpreterState_GET:
  225|   394k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   394k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   394k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   394k|}
complexobject.c:_PyInterpreterState_GET:
  225|   520k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   520k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   520k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   520k|}
descrobject.c:_PyInterpreterState_GET:
  225|    961|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|    961|#if !defined(Py_BUILD_CORE_MODULE)
  231|    961|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|    961|}
descrobject.c:_PyThreadState_GET:
  117|   148k|{
  118|   148k|#if !defined(Py_BUILD_CORE_MODULE)
  119|   148k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   148k|}
descrobject.c:_Py_get_machine_stack_pointer:
  336|   148k|_Py_get_machine_stack_pointer(void) {
  337|   148k|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|   148k|    return result;
  351|   148k|}
enumobject.c:_PyInterpreterState_GET:
  225|  37.5k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  37.5k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  37.5k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  37.5k|}
enumobject.c:_PyThreadState_GET:
  117|    274|{
  118|    274|#if !defined(Py_BUILD_CORE_MODULE)
  119|    274|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|    274|}
genobject.c:_PyInterpreterState_GET:
  225|  4.98k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  4.98k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  4.98k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  4.98k|}
genobject.c:_PyThreadState_GET:
  117|  50.7k|{
  118|  50.7k|#if !defined(Py_BUILD_CORE_MODULE)
  119|  50.7k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|  50.7k|}
floatobject.c:_PyInterpreterState_GET:
  225|   550k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   550k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   550k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   550k|}
frameobject.c:_PyInterpreterState_GET:
  225|  4.21k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  4.21k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  4.21k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  4.21k|}
funcobject.c:_PyInterpreterState_GET:
  225|  76.7k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  76.7k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  76.7k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  76.7k|}
iterobject.c:_PyInterpreterState_GET:
  225|    126|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|    126|#if !defined(Py_BUILD_CORE_MODULE)
  231|    126|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|    126|}
lazyimportobject.c:_PyInterpreterState_GET:
  225|     13|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|     13|#if !defined(Py_BUILD_CORE_MODULE)
  231|     13|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|     13|}
memoryobject.c:_PyInterpreterState_GET:
  225|   289k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   289k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   289k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   289k|}
methodobject.c:_PyInterpreterState_GET:
  225|  5.83M|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  5.83M|#if !defined(Py_BUILD_CORE_MODULE)
  231|  5.83M|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  5.83M|}
methodobject.c:_PyThreadState_GET:
  117|   148k|{
  118|   148k|#if !defined(Py_BUILD_CORE_MODULE)
  119|   148k|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|   148k|}
methodobject.c:_Py_get_machine_stack_pointer:
  336|   148k|_Py_get_machine_stack_pointer(void) {
  337|   148k|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|   148k|    return result;
  351|   148k|}
Python-ast.c:_PyInterpreterState_GET:
  225|  1.89k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  1.89k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  1.89k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  1.89k|}
crossinterp.c:_Py_IsMainInterpreter:
   61|      2|{
   62|      2|    return (interp == _PyInterpreterState_Main());
   63|      2|}
pegen.c:_PyInterpreterState_GET:
  225|   123k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|   123k|#if !defined(Py_BUILD_CORE_MODULE)
  231|   123k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|   123k|}
pegen.c:_PyThreadState_GET:
  117|      2|{
  118|      2|#if !defined(Py_BUILD_CORE_MODULE)
  119|      2|    return _Py_tss_tstate;
  120|       |#else
  121|       |    return _PyThreadState_GetCurrent();
  122|       |#endif
  123|      2|}
parser.c:_Py_get_machine_stack_pointer:
  336|   132M|_Py_get_machine_stack_pointer(void) {
  337|   132M|    uintptr_t result;
  338|       |#if defined(_M_ARM64)
  339|       |    result = __getReg(31);
  340|       |#elif defined(_M_X64) || defined(_M_IX86)
  341|       |    result = (uintptr_t)_AddressOfReturnAddress();
  342|       |#elif defined(__aarch64__)
  343|       |    __asm__ ("mov %0, sp" : "=r" (result));
  344|       |#elif defined(__x86_64__)
  345|       |    __asm__("{movq %%rsp, %0" : "=r" (result));
  346|       |#else
  347|       |    char here;
  348|       |    result = (uintptr_t)&here;
  349|       |#endif
  350|   132M|    return result;
  351|   132M|}
action_helpers.c:_PyInterpreterState_GET:
  225|  9.40k|static inline PyInterpreterState* _PyInterpreterState_GET(void) {
  226|       |#ifdef Py_DEBUG
  227|       |    PyThreadState *tstate = _PyThreadState_GET();
  228|       |    _Py_EnsureTstateNotNULL(tstate);
  229|       |#endif
  230|  9.40k|#if !defined(Py_BUILD_CORE_MODULE)
  231|  9.40k|    return _Py_tss_interp;
  232|       |#else
  233|       |    return _PyThreadState_GET()->interp;
  234|       |#endif
  235|  9.40k|}

pylifecycle.c:_PyRuntimeState_GetFinalizing:
   36|  48.4k|_PyRuntimeState_GetFinalizing(_PyRuntimeState *runtime) {
   37|  48.4k|    return (PyThreadState*)_Py_atomic_load_ptr_relaxed(&runtime->_finalizing);
   38|  48.4k|}
pylifecycle.c:_PyRuntimeState_GetCoreInitialized:
   63|      4|_PyRuntimeState_GetCoreInitialized(_PyRuntimeState *runtime) {
   64|      4|    return _Py_atomic_load_int(&runtime->core_initialized);
   65|      4|}
pylifecycle.c:_PyRuntimeState_GetInitialized:
   73|  2.28k|_PyRuntimeState_GetInitialized(_PyRuntimeState *runtime) {
   74|  2.28k|    return _Py_atomic_load_int(&runtime->initialized);
   75|  2.28k|}
pylifecycle.c:_PyRuntimeState_SetFinalizing:
   46|      2|_PyRuntimeState_SetFinalizing(_PyRuntimeState *runtime, PyThreadState *tstate) {
   47|      2|    _Py_atomic_store_ptr_relaxed(&runtime->_finalizing, tstate);
   48|      2|    if (tstate == NULL) {
  ------------------
  |  Branch (48:9): [True: 2, False: 0]
  ------------------
   49|      2|        _Py_atomic_store_ulong_relaxed(&runtime->_finalizing_id, 0);
  ------------------
  |  |  619|      2|    _Py_atomic_store_uint64_relaxed((uint64_t *)p, v)
  ------------------
   50|      2|    }
   51|      0|    else {
   52|       |        // XXX Re-enable this assert once gh-109860 is fixed.
   53|       |        //assert(tstate->thread_id == PyThread_get_thread_ident());
   54|      0|        _Py_atomic_store_ulong_relaxed(&runtime->_finalizing_id,
  ------------------
  |  |  619|      0|    _Py_atomic_store_uint64_relaxed((uint64_t *)p, v)
  ------------------
   55|      0|                                       tstate->thread_id);
   56|      0|    }
   57|      2|}
pylifecycle.c:_PyRuntimeState_SetCoreInitialized:
   68|      2|_PyRuntimeState_SetCoreInitialized(_PyRuntimeState *runtime, int initialized) {
   69|      2|    _Py_atomic_store_int(&runtime->core_initialized, initialized);
   70|      2|}
pylifecycle.c:_PyRuntimeState_SetInitialized:
   78|      2|_PyRuntimeState_SetInitialized(_PyRuntimeState *runtime, int initialized) {
   79|      2|    _Py_atomic_store_int(&runtime->initialized, initialized);
   80|      2|}
pystate.c:_PyRuntimeState_GetCoreInitialized:
   63|      2|_PyRuntimeState_GetCoreInitialized(_PyRuntimeState *runtime) {
   64|      2|    return _Py_atomic_load_int(&runtime->core_initialized);
   65|      2|}
pystate.c:_PyRuntimeState_GetInitialized:
   73|      2|_PyRuntimeState_GetInitialized(_PyRuntimeState *runtime) {
   74|      2|    return _Py_atomic_load_int(&runtime->initialized);
   75|      2|}

typeobject.c:_PySlot_heaptype_apply_field_slot:
  381|    840|{
  382|    840|    switch (slot.sl_id) {
  ------------------
  |  Branch (382:13): [True: 839, False: 1]
  ------------------
  383|      1|        case Py_mp_subscript:
  ------------------
  |  |   13|      1|#define Py_mp_subscript 5
  ------------------
  |  Branch (383:9): [True: 1, False: 839]
  ------------------
  384|      1|            ht->as_mapping.mp_subscript = (binaryfunc)slot.sl_func;
  385|      1|            break;
  386|      0|        case Py_nb_absolute:
  ------------------
  |  |   14|      0|#define Py_nb_absolute 6
  ------------------
  |  Branch (386:9): [True: 0, False: 840]
  ------------------
  387|      0|            ht->as_number.nb_absolute = (unaryfunc)slot.sl_func;
  388|      0|            break;
  389|      0|        case Py_nb_add:
  ------------------
  |  |   15|      0|#define Py_nb_add 7
  ------------------
  |  Branch (389:9): [True: 0, False: 840]
  ------------------
  390|      0|            ht->as_number.nb_add = (binaryfunc)slot.sl_func;
  391|      0|            break;
  392|      0|        case Py_nb_and:
  ------------------
  |  |   16|      0|#define Py_nb_and 8
  ------------------
  |  Branch (392:9): [True: 0, False: 840]
  ------------------
  393|      0|            ht->as_number.nb_and = (binaryfunc)slot.sl_func;
  394|      0|            break;
  395|      0|        case Py_nb_bool:
  ------------------
  |  |   17|      0|#define Py_nb_bool 9
  ------------------
  |  Branch (395:9): [True: 0, False: 840]
  ------------------
  396|      0|            ht->as_number.nb_bool = (inquiry)slot.sl_func;
  397|      0|            break;
  398|      0|        case Py_nb_divmod:
  ------------------
  |  |   18|      0|#define Py_nb_divmod 10
  ------------------
  |  Branch (398:9): [True: 0, False: 840]
  ------------------
  399|      0|            ht->as_number.nb_divmod = (binaryfunc)slot.sl_func;
  400|      0|            break;
  401|      0|        case Py_nb_float:
  ------------------
  |  |   19|      0|#define Py_nb_float 11
  ------------------
  |  Branch (401:9): [True: 0, False: 840]
  ------------------
  402|      0|            ht->as_number.nb_float = (unaryfunc)slot.sl_func;
  403|      0|            break;
  404|      0|        case Py_nb_floor_divide:
  ------------------
  |  |   20|      0|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (404:9): [True: 0, False: 840]
  ------------------
  405|      0|            ht->as_number.nb_floor_divide = (binaryfunc)slot.sl_func;
  406|      0|            break;
  407|      0|        case Py_nb_index:
  ------------------
  |  |   21|      0|#define Py_nb_index 13
  ------------------
  |  Branch (407:9): [True: 0, False: 840]
  ------------------
  408|      0|            ht->as_number.nb_index = (unaryfunc)slot.sl_func;
  409|      0|            break;
  410|      0|        case Py_nb_inplace_add:
  ------------------
  |  |   22|      0|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (410:9): [True: 0, False: 840]
  ------------------
  411|      0|            ht->as_number.nb_inplace_add = (binaryfunc)slot.sl_func;
  412|      0|            break;
  413|      0|        case Py_nb_inplace_and:
  ------------------
  |  |   23|      0|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (413:9): [True: 0, False: 840]
  ------------------
  414|      0|            ht->as_number.nb_inplace_and = (binaryfunc)slot.sl_func;
  415|      0|            break;
  416|      0|        case Py_nb_inplace_floor_divide:
  ------------------
  |  |   24|      0|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (416:9): [True: 0, False: 840]
  ------------------
  417|      0|            ht->as_number.nb_inplace_floor_divide = (binaryfunc)slot.sl_func;
  418|      0|            break;
  419|      0|        case Py_nb_inplace_lshift:
  ------------------
  |  |   25|      0|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (419:9): [True: 0, False: 840]
  ------------------
  420|      0|            ht->as_number.nb_inplace_lshift = (binaryfunc)slot.sl_func;
  421|      0|            break;
  422|      0|        case Py_nb_inplace_multiply:
  ------------------
  |  |   26|      0|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (422:9): [True: 0, False: 840]
  ------------------
  423|      0|            ht->as_number.nb_inplace_multiply = (binaryfunc)slot.sl_func;
  424|      0|            break;
  425|      0|        case Py_nb_inplace_or:
  ------------------
  |  |   27|      0|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (425:9): [True: 0, False: 840]
  ------------------
  426|      0|            ht->as_number.nb_inplace_or = (binaryfunc)slot.sl_func;
  427|      0|            break;
  428|      0|        case Py_nb_inplace_power:
  ------------------
  |  |   28|      0|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (428:9): [True: 0, False: 840]
  ------------------
  429|      0|            ht->as_number.nb_inplace_power = (ternaryfunc)slot.sl_func;
  430|      0|            break;
  431|      0|        case Py_nb_inplace_remainder:
  ------------------
  |  |   29|      0|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (431:9): [True: 0, False: 840]
  ------------------
  432|      0|            ht->as_number.nb_inplace_remainder = (binaryfunc)slot.sl_func;
  433|      0|            break;
  434|      0|        case Py_nb_inplace_rshift:
  ------------------
  |  |   30|      0|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (434:9): [True: 0, False: 840]
  ------------------
  435|      0|            ht->as_number.nb_inplace_rshift = (binaryfunc)slot.sl_func;
  436|      0|            break;
  437|      0|        case Py_nb_inplace_subtract:
  ------------------
  |  |   31|      0|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (437:9): [True: 0, False: 840]
  ------------------
  438|      0|            ht->as_number.nb_inplace_subtract = (binaryfunc)slot.sl_func;
  439|      0|            break;
  440|      0|        case Py_nb_inplace_true_divide:
  ------------------
  |  |   32|      0|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (440:9): [True: 0, False: 840]
  ------------------
  441|      0|            ht->as_number.nb_inplace_true_divide = (binaryfunc)slot.sl_func;
  442|      0|            break;
  443|      0|        case Py_nb_inplace_xor:
  ------------------
  |  |   33|      0|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (443:9): [True: 0, False: 840]
  ------------------
  444|      0|            ht->as_number.nb_inplace_xor = (binaryfunc)slot.sl_func;
  445|      0|            break;
  446|      0|        case Py_nb_int:
  ------------------
  |  |   34|      0|#define Py_nb_int 26
  ------------------
  |  Branch (446:9): [True: 0, False: 840]
  ------------------
  447|      0|            ht->as_number.nb_int = (unaryfunc)slot.sl_func;
  448|      0|            break;
  449|      0|        case Py_nb_invert:
  ------------------
  |  |   35|      0|#define Py_nb_invert 27
  ------------------
  |  Branch (449:9): [True: 0, False: 840]
  ------------------
  450|      0|            ht->as_number.nb_invert = (unaryfunc)slot.sl_func;
  451|      0|            break;
  452|      0|        case Py_nb_lshift:
  ------------------
  |  |   36|      0|#define Py_nb_lshift 28
  ------------------
  |  Branch (452:9): [True: 0, False: 840]
  ------------------
  453|      0|            ht->as_number.nb_lshift = (binaryfunc)slot.sl_func;
  454|      0|            break;
  455|      0|        case Py_nb_multiply:
  ------------------
  |  |   37|      0|#define Py_nb_multiply 29
  ------------------
  |  Branch (455:9): [True: 0, False: 840]
  ------------------
  456|      0|            ht->as_number.nb_multiply = (binaryfunc)slot.sl_func;
  457|      0|            break;
  458|      0|        case Py_nb_negative:
  ------------------
  |  |   38|      0|#define Py_nb_negative 30
  ------------------
  |  Branch (458:9): [True: 0, False: 840]
  ------------------
  459|      0|            ht->as_number.nb_negative = (unaryfunc)slot.sl_func;
  460|      0|            break;
  461|      5|        case Py_nb_or:
  ------------------
  |  |   39|      5|#define Py_nb_or 31
  ------------------
  |  Branch (461:9): [True: 5, False: 835]
  ------------------
  462|      5|            ht->as_number.nb_or = (binaryfunc)slot.sl_func;
  463|      5|            break;
  464|      0|        case Py_nb_positive:
  ------------------
  |  |   40|      0|#define Py_nb_positive 32
  ------------------
  |  Branch (464:9): [True: 0, False: 840]
  ------------------
  465|      0|            ht->as_number.nb_positive = (unaryfunc)slot.sl_func;
  466|      0|            break;
  467|      0|        case Py_nb_power:
  ------------------
  |  |   41|      0|#define Py_nb_power 33
  ------------------
  |  Branch (467:9): [True: 0, False: 840]
  ------------------
  468|      0|            ht->as_number.nb_power = (ternaryfunc)slot.sl_func;
  469|      0|            break;
  470|      0|        case Py_nb_remainder:
  ------------------
  |  |   42|      0|#define Py_nb_remainder 34
  ------------------
  |  Branch (470:9): [True: 0, False: 840]
  ------------------
  471|      0|            ht->as_number.nb_remainder = (binaryfunc)slot.sl_func;
  472|      0|            break;
  473|      0|        case Py_nb_rshift:
  ------------------
  |  |   43|      0|#define Py_nb_rshift 35
  ------------------
  |  Branch (473:9): [True: 0, False: 840]
  ------------------
  474|      0|            ht->as_number.nb_rshift = (binaryfunc)slot.sl_func;
  475|      0|            break;
  476|      0|        case Py_nb_subtract:
  ------------------
  |  |   44|      0|#define Py_nb_subtract 36
  ------------------
  |  Branch (476:9): [True: 0, False: 840]
  ------------------
  477|      0|            ht->as_number.nb_subtract = (binaryfunc)slot.sl_func;
  478|      0|            break;
  479|      0|        case Py_nb_true_divide:
  ------------------
  |  |   45|      0|#define Py_nb_true_divide 37
  ------------------
  |  Branch (479:9): [True: 0, False: 840]
  ------------------
  480|      0|            ht->as_number.nb_true_divide = (binaryfunc)slot.sl_func;
  481|      0|            break;
  482|      0|        case Py_nb_xor:
  ------------------
  |  |   46|      0|#define Py_nb_xor 38
  ------------------
  |  Branch (482:9): [True: 0, False: 840]
  ------------------
  483|      0|            ht->as_number.nb_xor = (binaryfunc)slot.sl_func;
  484|      0|            break;
  485|      1|        case Py_sq_ass_item:
  ------------------
  |  |   47|      1|#define Py_sq_ass_item 39
  ------------------
  |  Branch (485:9): [True: 1, False: 839]
  ------------------
  486|      1|            ht->as_sequence.sq_ass_item = (ssizeobjargproc)slot.sl_func;
  487|      1|            break;
  488|      1|        case Py_sq_concat:
  ------------------
  |  |   48|      1|#define Py_sq_concat 40
  ------------------
  |  Branch (488:9): [True: 1, False: 839]
  ------------------
  489|      1|            ht->as_sequence.sq_concat = (binaryfunc)slot.sl_func;
  490|      1|            break;
  491|      1|        case Py_sq_contains:
  ------------------
  |  |   49|      1|#define Py_sq_contains 41
  ------------------
  |  Branch (491:9): [True: 1, False: 839]
  ------------------
  492|      1|            ht->as_sequence.sq_contains = (objobjproc)slot.sl_func;
  493|      1|            break;
  494|      1|        case Py_sq_inplace_concat:
  ------------------
  |  |   50|      1|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (494:9): [True: 1, False: 839]
  ------------------
  495|      1|            ht->as_sequence.sq_inplace_concat = (binaryfunc)slot.sl_func;
  496|      1|            break;
  497|      1|        case Py_sq_inplace_repeat:
  ------------------
  |  |   51|      1|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (497:9): [True: 1, False: 839]
  ------------------
  498|      1|            ht->as_sequence.sq_inplace_repeat = (ssizeargfunc)slot.sl_func;
  499|      1|            break;
  500|      1|        case Py_sq_item:
  ------------------
  |  |   52|      1|#define Py_sq_item 44
  ------------------
  |  Branch (500:9): [True: 1, False: 839]
  ------------------
  501|      1|            ht->as_sequence.sq_item = (ssizeargfunc)slot.sl_func;
  502|      1|            break;
  503|      1|        case Py_sq_length:
  ------------------
  |  |   53|      1|#define Py_sq_length 45
  ------------------
  |  Branch (503:9): [True: 1, False: 839]
  ------------------
  504|      1|            ht->as_sequence.sq_length = (lenfunc)slot.sl_func;
  505|      1|            break;
  506|      1|        case Py_sq_repeat:
  ------------------
  |  |   54|      1|#define Py_sq_repeat 46
  ------------------
  |  Branch (506:9): [True: 1, False: 839]
  ------------------
  507|      1|            ht->as_sequence.sq_repeat = (ssizeargfunc)slot.sl_func;
  508|      1|            break;
  509|     21|        case Py_tp_alloc:
  ------------------
  |  |   55|     21|#define Py_tp_alloc 47
  ------------------
  |  Branch (509:9): [True: 21, False: 819]
  ------------------
  510|     21|            ht->ht_type.tp_alloc = (allocfunc)slot.sl_func;
  511|     21|            break;
  512|      0|        case Py_tp_base:
  ------------------
  |  |   56|      0|#define Py_tp_base 48
  ------------------
  |  Branch (512:9): [True: 0, False: 840]
  ------------------
  513|      0|            ht->ht_type.tp_base = slot.sl_ptr;
  514|      0|            break;
  515|      0|        case Py_tp_bases:
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (515:9): [True: 0, False: 840]
  ------------------
  516|      0|            ht->ht_type.tp_bases = slot.sl_ptr;
  517|      0|            break;
  518|      8|        case Py_tp_call:
  ------------------
  |  |   58|      8|#define Py_tp_call 50
  ------------------
  |  Branch (518:9): [True: 8, False: 832]
  ------------------
  519|      8|            ht->ht_type.tp_call = (ternaryfunc)slot.sl_func;
  520|      8|            break;
  521|     55|        case Py_tp_clear:
  ------------------
  |  |   59|     55|#define Py_tp_clear 51
  ------------------
  |  Branch (521:9): [True: 55, False: 785]
  ------------------
  522|     55|            ht->ht_type.tp_clear = (inquiry)slot.sl_func;
  523|     55|            break;
  524|    125|        case Py_tp_dealloc:
  ------------------
  |  |   60|    125|#define Py_tp_dealloc 52
  ------------------
  |  Branch (524:9): [True: 125, False: 715]
  ------------------
  525|    125|            ht->ht_type.tp_dealloc = (destructor)slot.sl_func;
  526|    125|            break;
  527|      0|        case Py_tp_del:
  ------------------
  |  |   61|      0|#define Py_tp_del 53
  ------------------
  |  Branch (527:9): [True: 0, False: 840]
  ------------------
  528|      0|            ht->ht_type.tp_del = (destructor)slot.sl_func;
  529|      0|            break;
  530|      3|        case Py_tp_descr_get:
  ------------------
  |  |   62|      3|#define Py_tp_descr_get 54
  ------------------
  |  Branch (530:9): [True: 3, False: 837]
  ------------------
  531|      3|            ht->ht_type.tp_descr_get = (descrgetfunc)slot.sl_func;
  532|      3|            break;
  533|      1|        case Py_tp_descr_set:
  ------------------
  |  |   63|      1|#define Py_tp_descr_set 55
  ------------------
  |  Branch (533:9): [True: 1, False: 839]
  ------------------
  534|      1|            ht->ht_type.tp_descr_set = (descrsetfunc)slot.sl_func;
  535|      1|            break;
  536|      0|        case Py_tp_doc:
  ------------------
  |  |   64|      0|#define Py_tp_doc 56
  ------------------
  |  Branch (536:9): [True: 0, False: 840]
  ------------------
  537|      0|            ht->ht_type.tp_doc = slot.sl_ptr;
  538|      0|            break;
  539|      0|        case Py_tp_getattr:
  ------------------
  |  |   65|      0|#define Py_tp_getattr 57
  ------------------
  |  Branch (539:9): [True: 0, False: 840]
  ------------------
  540|      0|            ht->ht_type.tp_getattr = (getattrfunc)slot.sl_func;
  541|      0|            break;
  542|     40|        case Py_tp_getattro:
  ------------------
  |  |   66|     40|#define Py_tp_getattro 58
  ------------------
  |  Branch (542:9): [True: 40, False: 800]
  ------------------
  543|     40|            ht->ht_type.tp_getattro = (getattrofunc)slot.sl_func;
  544|     40|            break;
  545|      2|        case Py_tp_hash:
  ------------------
  |  |   67|      2|#define Py_tp_hash 59
  ------------------
  |  Branch (545:9): [True: 2, False: 838]
  ------------------
  546|      2|            ht->ht_type.tp_hash = (hashfunc)slot.sl_func;
  547|      2|            break;
  548|     25|        case Py_tp_init:
  ------------------
  |  |   68|     25|#define Py_tp_init 60
  ------------------
  |  Branch (548:9): [True: 25, False: 815]
  ------------------
  549|     25|            ht->ht_type.tp_init = (initproc)slot.sl_func;
  550|     25|            break;
  551|      0|        case Py_tp_is_gc:
  ------------------
  |  |   69|      0|#define Py_tp_is_gc 61
  ------------------
  |  Branch (551:9): [True: 0, False: 840]
  ------------------
  552|      0|            ht->ht_type.tp_is_gc = (inquiry)slot.sl_func;
  553|      0|            break;
  554|     34|        case Py_tp_iter:
  ------------------
  |  |   70|     34|#define Py_tp_iter 62
  ------------------
  |  Branch (554:9): [True: 34, False: 806]
  ------------------
  555|     34|            ht->ht_type.tp_iter = (getiterfunc)slot.sl_func;
  556|     34|            break;
  557|     39|        case Py_tp_iternext:
  ------------------
  |  |   71|     39|#define Py_tp_iternext 63
  ------------------
  |  Branch (557:9): [True: 39, False: 801]
  ------------------
  558|     39|            ht->ht_type.tp_iternext = (iternextfunc)slot.sl_func;
  559|     39|            break;
  560|     98|        case Py_tp_methods:
  ------------------
  |  |   72|     98|#define Py_tp_methods 64
  ------------------
  |  Branch (560:9): [True: 98, False: 742]
  ------------------
  561|     98|            ht->ht_type.tp_methods = slot.sl_ptr;
  562|     98|            break;
  563|     84|        case Py_tp_new:
  ------------------
  |  |   73|     84|#define Py_tp_new 65
  ------------------
  |  Branch (563:9): [True: 84, False: 756]
  ------------------
  564|     84|            ht->ht_type.tp_new = (newfunc)slot.sl_func;
  565|     84|            break;
  566|     65|        case Py_tp_repr:
  ------------------
  |  |   74|     65|#define Py_tp_repr 66
  ------------------
  |  Branch (566:9): [True: 65, False: 775]
  ------------------
  567|     65|            ht->ht_type.tp_repr = (reprfunc)slot.sl_func;
  568|     65|            break;
  569|      7|        case Py_tp_richcompare:
  ------------------
  |  |   75|      7|#define Py_tp_richcompare 67
  ------------------
  |  Branch (569:9): [True: 7, False: 833]
  ------------------
  570|      7|            ht->ht_type.tp_richcompare = (richcmpfunc)slot.sl_func;
  571|      7|            break;
  572|      0|        case Py_tp_setattr:
  ------------------
  |  |   76|      0|#define Py_tp_setattr 68
  ------------------
  |  Branch (572:9): [True: 0, False: 840]
  ------------------
  573|      0|            ht->ht_type.tp_setattr = (setattrfunc)slot.sl_func;
  574|      0|            break;
  575|      4|        case Py_tp_setattro:
  ------------------
  |  |   77|      4|#define Py_tp_setattro 69
  ------------------
  |  Branch (575:9): [True: 4, False: 836]
  ------------------
  576|      4|            ht->ht_type.tp_setattro = (setattrofunc)slot.sl_func;
  577|      4|            break;
  578|      1|        case Py_tp_str:
  ------------------
  |  |   78|      1|#define Py_tp_str 70
  ------------------
  |  Branch (578:9): [True: 1, False: 839]
  ------------------
  579|      1|            ht->ht_type.tp_str = (reprfunc)slot.sl_func;
  580|      1|            break;
  581|    117|        case Py_tp_traverse:
  ------------------
  |  |   79|    117|#define Py_tp_traverse 71
  ------------------
  |  Branch (581:9): [True: 117, False: 723]
  ------------------
  582|    117|            ht->ht_type.tp_traverse = (traverseproc)slot.sl_func;
  583|    117|            break;
  584|      0|        case Py_tp_members:
  ------------------
  |  |   80|      0|#define Py_tp_members 72
  ------------------
  |  Branch (584:9): [True: 0, False: 840]
  ------------------
  585|      0|            ht->ht_type.tp_members = slot.sl_ptr;
  586|      0|            break;
  587|     48|        case Py_tp_getset:
  ------------------
  |  |   81|     48|#define Py_tp_getset 73
  ------------------
  |  Branch (587:9): [True: 48, False: 792]
  ------------------
  588|     48|            ht->ht_type.tp_getset = slot.sl_ptr;
  589|     48|            break;
  590|     40|        case Py_tp_free:
  ------------------
  |  |   82|     40|#define Py_tp_free 74
  ------------------
  |  Branch (590:9): [True: 40, False: 800]
  ------------------
  591|     40|            ht->ht_type.tp_free = (freefunc)slot.sl_func;
  592|     40|            break;
  593|      0|        case Py_nb_matrix_multiply:
  ------------------
  |  |   83|      0|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (593:9): [True: 0, False: 840]
  ------------------
  594|      0|            ht->as_number.nb_matrix_multiply = (binaryfunc)slot.sl_func;
  595|      0|            break;
  596|      0|        case Py_nb_inplace_matrix_multiply:
  ------------------
  |  |   84|      0|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (596:9): [True: 0, False: 840]
  ------------------
  597|      0|            ht->as_number.nb_inplace_matrix_multiply = (binaryfunc)slot.sl_func;
  598|      0|            break;
  599|      0|        case Py_am_await:
  ------------------
  |  |   85|      0|#define Py_am_await 77
  ------------------
  |  Branch (599:9): [True: 0, False: 840]
  ------------------
  600|      0|            ht->as_async.am_await = (unaryfunc)slot.sl_func;
  601|      0|            break;
  602|      0|        case Py_am_aiter:
  ------------------
  |  |   86|      0|#define Py_am_aiter 78
  ------------------
  |  Branch (602:9): [True: 0, False: 840]
  ------------------
  603|      0|            ht->as_async.am_aiter = (unaryfunc)slot.sl_func;
  604|      0|            break;
  605|      0|        case Py_am_anext:
  ------------------
  |  |   87|      0|#define Py_am_anext 79
  ------------------
  |  Branch (605:9): [True: 0, False: 840]
  ------------------
  606|      0|            ht->as_async.am_anext = (unaryfunc)slot.sl_func;
  607|      0|            break;
  608|      4|        case Py_tp_finalize:
  ------------------
  |  |   88|      4|#define Py_tp_finalize 80
  ------------------
  |  Branch (608:9): [True: 4, False: 836]
  ------------------
  609|      4|            ht->ht_type.tp_finalize = (destructor)slot.sl_func;
  610|      4|            break;
  611|      0|        case Py_am_send:
  ------------------
  |  |   89|      0|#define Py_am_send 81
  ------------------
  |  Branch (611:9): [True: 0, False: 840]
  ------------------
  612|      0|            ht->as_async.am_send = (sendfunc)slot.sl_func;
  613|      0|            break;
  614|      0|        case Py_tp_vectorcall:
  ------------------
  |  |   90|      0|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (614:9): [True: 0, False: 840]
  ------------------
  615|      0|            ht->ht_type.tp_vectorcall = (vectorcallfunc)slot.sl_func;
  616|      0|            break;
  617|      2|        case Py_bf_getbuffer:
  ------------------
  |  |   96|      2|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|      2|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (617:9): [True: 2, False: 838]
  ------------------
  618|      2|            ht->as_buffer.bf_getbuffer = (getbufferproc)slot.sl_func;
  619|      2|            break;
  620|      2|        case Py_bf_releasebuffer:
  ------------------
  |  |   97|      2|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|      2|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (620:9): [True: 2, False: 838]
  ------------------
  621|      2|            ht->as_buffer.bf_releasebuffer = (releasebufferproc)slot.sl_func;
  622|      2|            break;
  623|      0|        case Py_mp_ass_subscript:
  ------------------
  |  |   98|      0|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (623:9): [True: 0, False: 840]
  ------------------
  624|      0|            ht->as_mapping.mp_ass_subscript = (objobjargproc)slot.sl_func;
  625|      0|            break;
  626|      0|        case Py_mp_length:
  ------------------
  |  |   99|      0|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (626:9): [True: 0, False: 840]
  ------------------
  627|      0|            ht->as_mapping.mp_length = (lenfunc)slot.sl_func;
  628|      0|            break;
  629|    840|    }
  630|    840|}
typeobject.c:_PySlot_resolve_type_slot:
    8|   414k|{
    9|   414k|    switch (slot_id) {
   10|      0|        case 1:
  ------------------
  |  Branch (10:9): [True: 0, False: 414k]
  ------------------
   11|      0|            return Py_bf_getbuffer;
  ------------------
  |  |   96|      0|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   12|      0|        case 2:
  ------------------
  |  Branch (12:9): [True: 0, False: 414k]
  ------------------
   13|      0|            return Py_bf_releasebuffer;
  ------------------
  |  |   97|      0|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   14|      0|        case 3:
  ------------------
  |  Branch (14:9): [True: 0, False: 414k]
  ------------------
   15|      0|            return Py_mp_ass_subscript;
  ------------------
  |  |   98|      0|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   16|      0|        case 4:
  ------------------
  |  Branch (16:9): [True: 0, False: 414k]
  ------------------
   17|      0|            return Py_mp_length;
  ------------------
  |  |   99|      0|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   18|      0|        case Py_slot_end:
  ------------------
  |  |   12|      0|#define Py_slot_end 0
  ------------------
  |  Branch (18:9): [True: 0, False: 414k]
  ------------------
   19|      0|        case Py_mp_subscript:
  ------------------
  |  |   13|      0|#define Py_mp_subscript 5
  ------------------
  |  Branch (19:9): [True: 0, False: 414k]
  ------------------
   20|      0|        case Py_nb_absolute:
  ------------------
  |  |   14|      0|#define Py_nb_absolute 6
  ------------------
  |  Branch (20:9): [True: 0, False: 414k]
  ------------------
   21|      0|        case Py_nb_add:
  ------------------
  |  |   15|      0|#define Py_nb_add 7
  ------------------
  |  Branch (21:9): [True: 0, False: 414k]
  ------------------
   22|      0|        case Py_nb_and:
  ------------------
  |  |   16|      0|#define Py_nb_and 8
  ------------------
  |  Branch (22:9): [True: 0, False: 414k]
  ------------------
   23|      0|        case Py_nb_bool:
  ------------------
  |  |   17|      0|#define Py_nb_bool 9
  ------------------
  |  Branch (23:9): [True: 0, False: 414k]
  ------------------
   24|      0|        case Py_nb_divmod:
  ------------------
  |  |   18|      0|#define Py_nb_divmod 10
  ------------------
  |  Branch (24:9): [True: 0, False: 414k]
  ------------------
   25|      0|        case Py_nb_float:
  ------------------
  |  |   19|      0|#define Py_nb_float 11
  ------------------
  |  Branch (25:9): [True: 0, False: 414k]
  ------------------
   26|      0|        case Py_nb_floor_divide:
  ------------------
  |  |   20|      0|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (26:9): [True: 0, False: 414k]
  ------------------
   27|      0|        case Py_nb_index:
  ------------------
  |  |   21|      0|#define Py_nb_index 13
  ------------------
  |  Branch (27:9): [True: 0, False: 414k]
  ------------------
   28|      0|        case Py_nb_inplace_add:
  ------------------
  |  |   22|      0|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (28:9): [True: 0, False: 414k]
  ------------------
   29|      0|        case Py_nb_inplace_and:
  ------------------
  |  |   23|      0|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (29:9): [True: 0, False: 414k]
  ------------------
   30|      0|        case Py_nb_inplace_floor_divide:
  ------------------
  |  |   24|      0|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (30:9): [True: 0, False: 414k]
  ------------------
   31|      0|        case Py_nb_inplace_lshift:
  ------------------
  |  |   25|      0|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (31:9): [True: 0, False: 414k]
  ------------------
   32|      0|        case Py_nb_inplace_multiply:
  ------------------
  |  |   26|      0|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (32:9): [True: 0, False: 414k]
  ------------------
   33|      0|        case Py_nb_inplace_or:
  ------------------
  |  |   27|      0|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (33:9): [True: 0, False: 414k]
  ------------------
   34|      0|        case Py_nb_inplace_power:
  ------------------
  |  |   28|      0|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (34:9): [True: 0, False: 414k]
  ------------------
   35|      0|        case Py_nb_inplace_remainder:
  ------------------
  |  |   29|      0|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (35:9): [True: 0, False: 414k]
  ------------------
   36|      0|        case Py_nb_inplace_rshift:
  ------------------
  |  |   30|      0|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (36:9): [True: 0, False: 414k]
  ------------------
   37|      0|        case Py_nb_inplace_subtract:
  ------------------
  |  |   31|      0|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (37:9): [True: 0, False: 414k]
  ------------------
   38|      0|        case Py_nb_inplace_true_divide:
  ------------------
  |  |   32|      0|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (38:9): [True: 0, False: 414k]
  ------------------
   39|      0|        case Py_nb_inplace_xor:
  ------------------
  |  |   33|      0|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (39:9): [True: 0, False: 414k]
  ------------------
   40|      0|        case Py_nb_int:
  ------------------
  |  |   34|      0|#define Py_nb_int 26
  ------------------
  |  Branch (40:9): [True: 0, False: 414k]
  ------------------
   41|      0|        case Py_nb_invert:
  ------------------
  |  |   35|      0|#define Py_nb_invert 27
  ------------------
  |  Branch (41:9): [True: 0, False: 414k]
  ------------------
   42|      0|        case Py_nb_lshift:
  ------------------
  |  |   36|      0|#define Py_nb_lshift 28
  ------------------
  |  Branch (42:9): [True: 0, False: 414k]
  ------------------
   43|      0|        case Py_nb_multiply:
  ------------------
  |  |   37|      0|#define Py_nb_multiply 29
  ------------------
  |  Branch (43:9): [True: 0, False: 414k]
  ------------------
   44|      0|        case Py_nb_negative:
  ------------------
  |  |   38|      0|#define Py_nb_negative 30
  ------------------
  |  Branch (44:9): [True: 0, False: 414k]
  ------------------
   45|      0|        case Py_nb_or:
  ------------------
  |  |   39|      0|#define Py_nb_or 31
  ------------------
  |  Branch (45:9): [True: 0, False: 414k]
  ------------------
   46|      0|        case Py_nb_positive:
  ------------------
  |  |   40|      0|#define Py_nb_positive 32
  ------------------
  |  Branch (46:9): [True: 0, False: 414k]
  ------------------
   47|      0|        case Py_nb_power:
  ------------------
  |  |   41|      0|#define Py_nb_power 33
  ------------------
  |  Branch (47:9): [True: 0, False: 414k]
  ------------------
   48|      0|        case Py_nb_remainder:
  ------------------
  |  |   42|      0|#define Py_nb_remainder 34
  ------------------
  |  Branch (48:9): [True: 0, False: 414k]
  ------------------
   49|      0|        case Py_nb_rshift:
  ------------------
  |  |   43|      0|#define Py_nb_rshift 35
  ------------------
  |  Branch (49:9): [True: 0, False: 414k]
  ------------------
   50|      0|        case Py_nb_subtract:
  ------------------
  |  |   44|      0|#define Py_nb_subtract 36
  ------------------
  |  Branch (50:9): [True: 0, False: 414k]
  ------------------
   51|      0|        case Py_nb_true_divide:
  ------------------
  |  |   45|      0|#define Py_nb_true_divide 37
  ------------------
  |  Branch (51:9): [True: 0, False: 414k]
  ------------------
   52|      0|        case Py_nb_xor:
  ------------------
  |  |   46|      0|#define Py_nb_xor 38
  ------------------
  |  Branch (52:9): [True: 0, False: 414k]
  ------------------
   53|      0|        case Py_sq_ass_item:
  ------------------
  |  |   47|      0|#define Py_sq_ass_item 39
  ------------------
  |  Branch (53:9): [True: 0, False: 414k]
  ------------------
   54|      0|        case Py_sq_concat:
  ------------------
  |  |   48|      0|#define Py_sq_concat 40
  ------------------
  |  Branch (54:9): [True: 0, False: 414k]
  ------------------
   55|      0|        case Py_sq_contains:
  ------------------
  |  |   49|      0|#define Py_sq_contains 41
  ------------------
  |  Branch (55:9): [True: 0, False: 414k]
  ------------------
   56|      0|        case Py_sq_inplace_concat:
  ------------------
  |  |   50|      0|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (56:9): [True: 0, False: 414k]
  ------------------
   57|      0|        case Py_sq_inplace_repeat:
  ------------------
  |  |   51|      0|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (57:9): [True: 0, False: 414k]
  ------------------
   58|      0|        case Py_sq_item:
  ------------------
  |  |   52|      0|#define Py_sq_item 44
  ------------------
  |  Branch (58:9): [True: 0, False: 414k]
  ------------------
   59|      0|        case Py_sq_length:
  ------------------
  |  |   53|      0|#define Py_sq_length 45
  ------------------
  |  Branch (59:9): [True: 0, False: 414k]
  ------------------
   60|      0|        case Py_sq_repeat:
  ------------------
  |  |   54|      0|#define Py_sq_repeat 46
  ------------------
  |  Branch (60:9): [True: 0, False: 414k]
  ------------------
   61|      0|        case Py_tp_alloc:
  ------------------
  |  |   55|      0|#define Py_tp_alloc 47
  ------------------
  |  Branch (61:9): [True: 0, False: 414k]
  ------------------
   62|      0|        case Py_tp_base:
  ------------------
  |  |   56|      0|#define Py_tp_base 48
  ------------------
  |  Branch (62:9): [True: 0, False: 414k]
  ------------------
   63|      0|        case Py_tp_bases:
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (63:9): [True: 0, False: 414k]
  ------------------
   64|      0|        case Py_tp_call:
  ------------------
  |  |   58|      0|#define Py_tp_call 50
  ------------------
  |  Branch (64:9): [True: 0, False: 414k]
  ------------------
   65|      0|        case Py_tp_clear:
  ------------------
  |  |   59|      0|#define Py_tp_clear 51
  ------------------
  |  Branch (65:9): [True: 0, False: 414k]
  ------------------
   66|      0|        case Py_tp_dealloc:
  ------------------
  |  |   60|      0|#define Py_tp_dealloc 52
  ------------------
  |  Branch (66:9): [True: 0, False: 414k]
  ------------------
   67|      0|        case Py_tp_del:
  ------------------
  |  |   61|      0|#define Py_tp_del 53
  ------------------
  |  Branch (67:9): [True: 0, False: 414k]
  ------------------
   68|      0|        case Py_tp_descr_get:
  ------------------
  |  |   62|      0|#define Py_tp_descr_get 54
  ------------------
  |  Branch (68:9): [True: 0, False: 414k]
  ------------------
   69|      0|        case Py_tp_descr_set:
  ------------------
  |  |   63|      0|#define Py_tp_descr_set 55
  ------------------
  |  Branch (69:9): [True: 0, False: 414k]
  ------------------
   70|      0|        case Py_tp_doc:
  ------------------
  |  |   64|      0|#define Py_tp_doc 56
  ------------------
  |  Branch (70:9): [True: 0, False: 414k]
  ------------------
   71|      0|        case Py_tp_getattr:
  ------------------
  |  |   65|      0|#define Py_tp_getattr 57
  ------------------
  |  Branch (71:9): [True: 0, False: 414k]
  ------------------
   72|      0|        case Py_tp_getattro:
  ------------------
  |  |   66|      0|#define Py_tp_getattro 58
  ------------------
  |  Branch (72:9): [True: 0, False: 414k]
  ------------------
   73|      0|        case Py_tp_hash:
  ------------------
  |  |   67|      0|#define Py_tp_hash 59
  ------------------
  |  Branch (73:9): [True: 0, False: 414k]
  ------------------
   74|      0|        case Py_tp_init:
  ------------------
  |  |   68|      0|#define Py_tp_init 60
  ------------------
  |  Branch (74:9): [True: 0, False: 414k]
  ------------------
   75|      0|        case Py_tp_is_gc:
  ------------------
  |  |   69|      0|#define Py_tp_is_gc 61
  ------------------
  |  Branch (75:9): [True: 0, False: 414k]
  ------------------
   76|      0|        case Py_tp_iter:
  ------------------
  |  |   70|      0|#define Py_tp_iter 62
  ------------------
  |  Branch (76:9): [True: 0, False: 414k]
  ------------------
   77|      0|        case Py_tp_iternext:
  ------------------
  |  |   71|      0|#define Py_tp_iternext 63
  ------------------
  |  Branch (77:9): [True: 0, False: 414k]
  ------------------
   78|      0|        case Py_tp_methods:
  ------------------
  |  |   72|      0|#define Py_tp_methods 64
  ------------------
  |  Branch (78:9): [True: 0, False: 414k]
  ------------------
   79|      0|        case Py_tp_new:
  ------------------
  |  |   73|      0|#define Py_tp_new 65
  ------------------
  |  Branch (79:9): [True: 0, False: 414k]
  ------------------
   80|      0|        case Py_tp_repr:
  ------------------
  |  |   74|      0|#define Py_tp_repr 66
  ------------------
  |  Branch (80:9): [True: 0, False: 414k]
  ------------------
   81|      0|        case Py_tp_richcompare:
  ------------------
  |  |   75|      0|#define Py_tp_richcompare 67
  ------------------
  |  Branch (81:9): [True: 0, False: 414k]
  ------------------
   82|      0|        case Py_tp_setattr:
  ------------------
  |  |   76|      0|#define Py_tp_setattr 68
  ------------------
  |  Branch (82:9): [True: 0, False: 414k]
  ------------------
   83|      0|        case Py_tp_setattro:
  ------------------
  |  |   77|      0|#define Py_tp_setattro 69
  ------------------
  |  Branch (83:9): [True: 0, False: 414k]
  ------------------
   84|      0|        case Py_tp_str:
  ------------------
  |  |   78|      0|#define Py_tp_str 70
  ------------------
  |  Branch (84:9): [True: 0, False: 414k]
  ------------------
   85|      0|        case Py_tp_traverse:
  ------------------
  |  |   79|      0|#define Py_tp_traverse 71
  ------------------
  |  Branch (85:9): [True: 0, False: 414k]
  ------------------
   86|      0|        case Py_tp_members:
  ------------------
  |  |   80|      0|#define Py_tp_members 72
  ------------------
  |  Branch (86:9): [True: 0, False: 414k]
  ------------------
   87|      0|        case Py_tp_getset:
  ------------------
  |  |   81|      0|#define Py_tp_getset 73
  ------------------
  |  Branch (87:9): [True: 0, False: 414k]
  ------------------
   88|   414k|        case Py_tp_free:
  ------------------
  |  |   82|   414k|#define Py_tp_free 74
  ------------------
  |  Branch (88:9): [True: 414k, False: 0]
  ------------------
   89|   414k|        case Py_nb_matrix_multiply:
  ------------------
  |  |   83|   414k|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (89:9): [True: 0, False: 414k]
  ------------------
   90|   414k|        case Py_nb_inplace_matrix_multiply:
  ------------------
  |  |   84|   414k|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (90:9): [True: 0, False: 414k]
  ------------------
   91|   414k|        case Py_am_await:
  ------------------
  |  |   85|   414k|#define Py_am_await 77
  ------------------
  |  Branch (91:9): [True: 0, False: 414k]
  ------------------
   92|   414k|        case Py_am_aiter:
  ------------------
  |  |   86|   414k|#define Py_am_aiter 78
  ------------------
  |  Branch (92:9): [True: 0, False: 414k]
  ------------------
   93|   414k|        case Py_am_anext:
  ------------------
  |  |   87|   414k|#define Py_am_anext 79
  ------------------
  |  Branch (93:9): [True: 0, False: 414k]
  ------------------
   94|   414k|        case Py_tp_finalize:
  ------------------
  |  |   88|   414k|#define Py_tp_finalize 80
  ------------------
  |  Branch (94:9): [True: 0, False: 414k]
  ------------------
   95|   414k|        case Py_am_send:
  ------------------
  |  |   89|   414k|#define Py_am_send 81
  ------------------
  |  Branch (95:9): [True: 0, False: 414k]
  ------------------
   96|   414k|        case Py_tp_vectorcall:
  ------------------
  |  |   90|   414k|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (96:9): [True: 0, False: 414k]
  ------------------
   97|   414k|        case Py_tp_token:
  ------------------
  |  |   91|   414k|#define Py_tp_token 83
  ------------------
  |  Branch (97:9): [True: 0, False: 414k]
  ------------------
   98|   414k|        case Py_bf_getbuffer:
  ------------------
  |  |   96|   414k|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|   414k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (98:9): [True: 0, False: 414k]
  ------------------
   99|   414k|        case Py_bf_releasebuffer:
  ------------------
  |  |   97|   414k|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|   414k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (99:9): [True: 0, False: 414k]
  ------------------
  100|   414k|        case Py_mp_ass_subscript:
  ------------------
  |  |   98|   414k|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|   414k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (100:9): [True: 0, False: 414k]
  ------------------
  101|   414k|        case Py_mp_length:
  ------------------
  |  |   99|   414k|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|   414k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (101:9): [True: 0, False: 414k]
  ------------------
  102|   414k|        case Py_slot_subslots:
  ------------------
  |  |  100|   414k|#define Py_slot_subslots 92
  ------------------
  |  Branch (102:9): [True: 0, False: 414k]
  ------------------
  103|   414k|        case Py_tp_slots:
  ------------------
  |  |  101|   414k|#define Py_tp_slots 93
  ------------------
  |  Branch (103:9): [True: 0, False: 414k]
  ------------------
  104|   414k|        case Py_tp_name:
  ------------------
  |  |  103|   414k|#define Py_tp_name 95
  ------------------
  |  Branch (104:9): [True: 0, False: 414k]
  ------------------
  105|   414k|        case Py_tp_basicsize:
  ------------------
  |  |  104|   414k|#define Py_tp_basicsize 96
  ------------------
  |  Branch (105:9): [True: 0, False: 414k]
  ------------------
  106|   414k|        case Py_tp_extra_basicsize:
  ------------------
  |  |  105|   414k|#define Py_tp_extra_basicsize 97
  ------------------
  |  Branch (106:9): [True: 0, False: 414k]
  ------------------
  107|   414k|        case Py_tp_itemsize:
  ------------------
  |  |  106|   414k|#define Py_tp_itemsize 98
  ------------------
  |  Branch (107:9): [True: 0, False: 414k]
  ------------------
  108|   414k|        case Py_tp_flags:
  ------------------
  |  |  107|   414k|#define Py_tp_flags 99
  ------------------
  |  Branch (108:9): [True: 0, False: 414k]
  ------------------
  109|   414k|        case Py_tp_metaclass:
  ------------------
  |  |  115|   414k|#define Py_tp_metaclass 107
  ------------------
  |  Branch (109:9): [True: 0, False: 414k]
  ------------------
  110|   414k|        case Py_tp_module:
  ------------------
  |  |  116|   414k|#define Py_tp_module 108
  ------------------
  |  Branch (110:9): [True: 0, False: 414k]
  ------------------
  111|   414k|            return slot_id;
  112|      0|        default:
  ------------------
  |  Branch (112:9): [True: 0, False: 414k]
  ------------------
  113|      0|            return Py_slot_invalid;
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  114|   414k|    }
  115|   414k|}
typeobject.c:_PySlot_type_getslot:
  153|   414k|{
  154|   414k|    switch (slot_id) {
  ------------------
  |  Branch (154:13): [True: 414k, False: 0]
  ------------------
  155|      0|        case Py_mp_subscript:
  ------------------
  |  |   13|      0|#define Py_mp_subscript 5
  ------------------
  |  Branch (155:9): [True: 0, False: 414k]
  ------------------
  156|      0|            if (!(tp->tp_as_mapping)) return NULL;
  ------------------
  |  Branch (156:17): [True: 0, False: 0]
  ------------------
  157|      0|            return (void*)tp->tp_as_mapping->mp_subscript;
  158|      0|        case Py_nb_absolute:
  ------------------
  |  |   14|      0|#define Py_nb_absolute 6
  ------------------
  |  Branch (158:9): [True: 0, False: 414k]
  ------------------
  159|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (159:17): [True: 0, False: 0]
  ------------------
  160|      0|            return (void*)tp->tp_as_number->nb_absolute;
  161|      0|        case Py_nb_add:
  ------------------
  |  |   15|      0|#define Py_nb_add 7
  ------------------
  |  Branch (161:9): [True: 0, False: 414k]
  ------------------
  162|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (162:17): [True: 0, False: 0]
  ------------------
  163|      0|            return (void*)tp->tp_as_number->nb_add;
  164|      0|        case Py_nb_and:
  ------------------
  |  |   16|      0|#define Py_nb_and 8
  ------------------
  |  Branch (164:9): [True: 0, False: 414k]
  ------------------
  165|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (165:17): [True: 0, False: 0]
  ------------------
  166|      0|            return (void*)tp->tp_as_number->nb_and;
  167|      0|        case Py_nb_bool:
  ------------------
  |  |   17|      0|#define Py_nb_bool 9
  ------------------
  |  Branch (167:9): [True: 0, False: 414k]
  ------------------
  168|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (168:17): [True: 0, False: 0]
  ------------------
  169|      0|            return (void*)tp->tp_as_number->nb_bool;
  170|      0|        case Py_nb_divmod:
  ------------------
  |  |   18|      0|#define Py_nb_divmod 10
  ------------------
  |  Branch (170:9): [True: 0, False: 414k]
  ------------------
  171|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (171:17): [True: 0, False: 0]
  ------------------
  172|      0|            return (void*)tp->tp_as_number->nb_divmod;
  173|      0|        case Py_nb_float:
  ------------------
  |  |   19|      0|#define Py_nb_float 11
  ------------------
  |  Branch (173:9): [True: 0, False: 414k]
  ------------------
  174|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (174:17): [True: 0, False: 0]
  ------------------
  175|      0|            return (void*)tp->tp_as_number->nb_float;
  176|      0|        case Py_nb_floor_divide:
  ------------------
  |  |   20|      0|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (176:9): [True: 0, False: 414k]
  ------------------
  177|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (177:17): [True: 0, False: 0]
  ------------------
  178|      0|            return (void*)tp->tp_as_number->nb_floor_divide;
  179|      0|        case Py_nb_index:
  ------------------
  |  |   21|      0|#define Py_nb_index 13
  ------------------
  |  Branch (179:9): [True: 0, False: 414k]
  ------------------
  180|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (180:17): [True: 0, False: 0]
  ------------------
  181|      0|            return (void*)tp->tp_as_number->nb_index;
  182|      0|        case Py_nb_inplace_add:
  ------------------
  |  |   22|      0|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (182:9): [True: 0, False: 414k]
  ------------------
  183|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (183:17): [True: 0, False: 0]
  ------------------
  184|      0|            return (void*)tp->tp_as_number->nb_inplace_add;
  185|      0|        case Py_nb_inplace_and:
  ------------------
  |  |   23|      0|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (185:9): [True: 0, False: 414k]
  ------------------
  186|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (186:17): [True: 0, False: 0]
  ------------------
  187|      0|            return (void*)tp->tp_as_number->nb_inplace_and;
  188|      0|        case Py_nb_inplace_floor_divide:
  ------------------
  |  |   24|      0|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (188:9): [True: 0, False: 414k]
  ------------------
  189|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (189:17): [True: 0, False: 0]
  ------------------
  190|      0|            return (void*)tp->tp_as_number->nb_inplace_floor_divide;
  191|      0|        case Py_nb_inplace_lshift:
  ------------------
  |  |   25|      0|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (191:9): [True: 0, False: 414k]
  ------------------
  192|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (192:17): [True: 0, False: 0]
  ------------------
  193|      0|            return (void*)tp->tp_as_number->nb_inplace_lshift;
  194|      0|        case Py_nb_inplace_multiply:
  ------------------
  |  |   26|      0|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (194:9): [True: 0, False: 414k]
  ------------------
  195|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (195:17): [True: 0, False: 0]
  ------------------
  196|      0|            return (void*)tp->tp_as_number->nb_inplace_multiply;
  197|      0|        case Py_nb_inplace_or:
  ------------------
  |  |   27|      0|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (197:9): [True: 0, False: 414k]
  ------------------
  198|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (198:17): [True: 0, False: 0]
  ------------------
  199|      0|            return (void*)tp->tp_as_number->nb_inplace_or;
  200|      0|        case Py_nb_inplace_power:
  ------------------
  |  |   28|      0|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (200:9): [True: 0, False: 414k]
  ------------------
  201|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (201:17): [True: 0, False: 0]
  ------------------
  202|      0|            return (void*)tp->tp_as_number->nb_inplace_power;
  203|      0|        case Py_nb_inplace_remainder:
  ------------------
  |  |   29|      0|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (203:9): [True: 0, False: 414k]
  ------------------
  204|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (204:17): [True: 0, False: 0]
  ------------------
  205|      0|            return (void*)tp->tp_as_number->nb_inplace_remainder;
  206|      0|        case Py_nb_inplace_rshift:
  ------------------
  |  |   30|      0|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (206:9): [True: 0, False: 414k]
  ------------------
  207|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (207:17): [True: 0, False: 0]
  ------------------
  208|      0|            return (void*)tp->tp_as_number->nb_inplace_rshift;
  209|      0|        case Py_nb_inplace_subtract:
  ------------------
  |  |   31|      0|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (209:9): [True: 0, False: 414k]
  ------------------
  210|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (210:17): [True: 0, False: 0]
  ------------------
  211|      0|            return (void*)tp->tp_as_number->nb_inplace_subtract;
  212|      0|        case Py_nb_inplace_true_divide:
  ------------------
  |  |   32|      0|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (212:9): [True: 0, False: 414k]
  ------------------
  213|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (213:17): [True: 0, False: 0]
  ------------------
  214|      0|            return (void*)tp->tp_as_number->nb_inplace_true_divide;
  215|      0|        case Py_nb_inplace_xor:
  ------------------
  |  |   33|      0|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (215:9): [True: 0, False: 414k]
  ------------------
  216|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (216:17): [True: 0, False: 0]
  ------------------
  217|      0|            return (void*)tp->tp_as_number->nb_inplace_xor;
  218|      0|        case Py_nb_int:
  ------------------
  |  |   34|      0|#define Py_nb_int 26
  ------------------
  |  Branch (218:9): [True: 0, False: 414k]
  ------------------
  219|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (219:17): [True: 0, False: 0]
  ------------------
  220|      0|            return (void*)tp->tp_as_number->nb_int;
  221|      0|        case Py_nb_invert:
  ------------------
  |  |   35|      0|#define Py_nb_invert 27
  ------------------
  |  Branch (221:9): [True: 0, False: 414k]
  ------------------
  222|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (222:17): [True: 0, False: 0]
  ------------------
  223|      0|            return (void*)tp->tp_as_number->nb_invert;
  224|      0|        case Py_nb_lshift:
  ------------------
  |  |   36|      0|#define Py_nb_lshift 28
  ------------------
  |  Branch (224:9): [True: 0, False: 414k]
  ------------------
  225|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (225:17): [True: 0, False: 0]
  ------------------
  226|      0|            return (void*)tp->tp_as_number->nb_lshift;
  227|      0|        case Py_nb_multiply:
  ------------------
  |  |   37|      0|#define Py_nb_multiply 29
  ------------------
  |  Branch (227:9): [True: 0, False: 414k]
  ------------------
  228|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (228:17): [True: 0, False: 0]
  ------------------
  229|      0|            return (void*)tp->tp_as_number->nb_multiply;
  230|      0|        case Py_nb_negative:
  ------------------
  |  |   38|      0|#define Py_nb_negative 30
  ------------------
  |  Branch (230:9): [True: 0, False: 414k]
  ------------------
  231|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (231:17): [True: 0, False: 0]
  ------------------
  232|      0|            return (void*)tp->tp_as_number->nb_negative;
  233|      0|        case Py_nb_or:
  ------------------
  |  |   39|      0|#define Py_nb_or 31
  ------------------
  |  Branch (233:9): [True: 0, False: 414k]
  ------------------
  234|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (234:17): [True: 0, False: 0]
  ------------------
  235|      0|            return (void*)tp->tp_as_number->nb_or;
  236|      0|        case Py_nb_positive:
  ------------------
  |  |   40|      0|#define Py_nb_positive 32
  ------------------
  |  Branch (236:9): [True: 0, False: 414k]
  ------------------
  237|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (237:17): [True: 0, False: 0]
  ------------------
  238|      0|            return (void*)tp->tp_as_number->nb_positive;
  239|      0|        case Py_nb_power:
  ------------------
  |  |   41|      0|#define Py_nb_power 33
  ------------------
  |  Branch (239:9): [True: 0, False: 414k]
  ------------------
  240|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (240:17): [True: 0, False: 0]
  ------------------
  241|      0|            return (void*)tp->tp_as_number->nb_power;
  242|      0|        case Py_nb_remainder:
  ------------------
  |  |   42|      0|#define Py_nb_remainder 34
  ------------------
  |  Branch (242:9): [True: 0, False: 414k]
  ------------------
  243|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (243:17): [True: 0, False: 0]
  ------------------
  244|      0|            return (void*)tp->tp_as_number->nb_remainder;
  245|      0|        case Py_nb_rshift:
  ------------------
  |  |   43|      0|#define Py_nb_rshift 35
  ------------------
  |  Branch (245:9): [True: 0, False: 414k]
  ------------------
  246|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (246:17): [True: 0, False: 0]
  ------------------
  247|      0|            return (void*)tp->tp_as_number->nb_rshift;
  248|      0|        case Py_nb_subtract:
  ------------------
  |  |   44|      0|#define Py_nb_subtract 36
  ------------------
  |  Branch (248:9): [True: 0, False: 414k]
  ------------------
  249|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (249:17): [True: 0, False: 0]
  ------------------
  250|      0|            return (void*)tp->tp_as_number->nb_subtract;
  251|      0|        case Py_nb_true_divide:
  ------------------
  |  |   45|      0|#define Py_nb_true_divide 37
  ------------------
  |  Branch (251:9): [True: 0, False: 414k]
  ------------------
  252|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (252:17): [True: 0, False: 0]
  ------------------
  253|      0|            return (void*)tp->tp_as_number->nb_true_divide;
  254|      0|        case Py_nb_xor:
  ------------------
  |  |   46|      0|#define Py_nb_xor 38
  ------------------
  |  Branch (254:9): [True: 0, False: 414k]
  ------------------
  255|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (255:17): [True: 0, False: 0]
  ------------------
  256|      0|            return (void*)tp->tp_as_number->nb_xor;
  257|      0|        case Py_sq_ass_item:
  ------------------
  |  |   47|      0|#define Py_sq_ass_item 39
  ------------------
  |  Branch (257:9): [True: 0, False: 414k]
  ------------------
  258|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (258:17): [True: 0, False: 0]
  ------------------
  259|      0|            return (void*)tp->tp_as_sequence->sq_ass_item;
  260|      0|        case Py_sq_concat:
  ------------------
  |  |   48|      0|#define Py_sq_concat 40
  ------------------
  |  Branch (260:9): [True: 0, False: 414k]
  ------------------
  261|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (261:17): [True: 0, False: 0]
  ------------------
  262|      0|            return (void*)tp->tp_as_sequence->sq_concat;
  263|      0|        case Py_sq_contains:
  ------------------
  |  |   49|      0|#define Py_sq_contains 41
  ------------------
  |  Branch (263:9): [True: 0, False: 414k]
  ------------------
  264|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (264:17): [True: 0, False: 0]
  ------------------
  265|      0|            return (void*)tp->tp_as_sequence->sq_contains;
  266|      0|        case Py_sq_inplace_concat:
  ------------------
  |  |   50|      0|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (266:9): [True: 0, False: 414k]
  ------------------
  267|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (267:17): [True: 0, False: 0]
  ------------------
  268|      0|            return (void*)tp->tp_as_sequence->sq_inplace_concat;
  269|      0|        case Py_sq_inplace_repeat:
  ------------------
  |  |   51|      0|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (269:9): [True: 0, False: 414k]
  ------------------
  270|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (270:17): [True: 0, False: 0]
  ------------------
  271|      0|            return (void*)tp->tp_as_sequence->sq_inplace_repeat;
  272|      0|        case Py_sq_item:
  ------------------
  |  |   52|      0|#define Py_sq_item 44
  ------------------
  |  Branch (272:9): [True: 0, False: 414k]
  ------------------
  273|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (273:17): [True: 0, False: 0]
  ------------------
  274|      0|            return (void*)tp->tp_as_sequence->sq_item;
  275|      0|        case Py_sq_length:
  ------------------
  |  |   53|      0|#define Py_sq_length 45
  ------------------
  |  Branch (275:9): [True: 0, False: 414k]
  ------------------
  276|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (276:17): [True: 0, False: 0]
  ------------------
  277|      0|            return (void*)tp->tp_as_sequence->sq_length;
  278|      0|        case Py_sq_repeat:
  ------------------
  |  |   54|      0|#define Py_sq_repeat 46
  ------------------
  |  Branch (278:9): [True: 0, False: 414k]
  ------------------
  279|      0|            if (!(tp->tp_as_sequence)) return NULL;
  ------------------
  |  Branch (279:17): [True: 0, False: 0]
  ------------------
  280|      0|            return (void*)tp->tp_as_sequence->sq_repeat;
  281|      0|        case Py_tp_alloc:
  ------------------
  |  |   55|      0|#define Py_tp_alloc 47
  ------------------
  |  Branch (281:9): [True: 0, False: 414k]
  ------------------
  282|      0|            return (void*)tp->tp_alloc;
  283|      0|        case Py_tp_base:
  ------------------
  |  |   56|      0|#define Py_tp_base 48
  ------------------
  |  Branch (283:9): [True: 0, False: 414k]
  ------------------
  284|      0|            return (void*)tp->tp_base;
  285|      0|        case Py_tp_bases:
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (285:9): [True: 0, False: 414k]
  ------------------
  286|      0|            return (void*)tp->tp_bases;
  287|      0|        case Py_tp_call:
  ------------------
  |  |   58|      0|#define Py_tp_call 50
  ------------------
  |  Branch (287:9): [True: 0, False: 414k]
  ------------------
  288|      0|            return (void*)tp->tp_call;
  289|      0|        case Py_tp_clear:
  ------------------
  |  |   59|      0|#define Py_tp_clear 51
  ------------------
  |  Branch (289:9): [True: 0, False: 414k]
  ------------------
  290|      0|            return (void*)tp->tp_clear;
  291|      0|        case Py_tp_dealloc:
  ------------------
  |  |   60|      0|#define Py_tp_dealloc 52
  ------------------
  |  Branch (291:9): [True: 0, False: 414k]
  ------------------
  292|      0|            return (void*)tp->tp_dealloc;
  293|      0|        case Py_tp_del:
  ------------------
  |  |   61|      0|#define Py_tp_del 53
  ------------------
  |  Branch (293:9): [True: 0, False: 414k]
  ------------------
  294|      0|            return (void*)tp->tp_del;
  295|      0|        case Py_tp_descr_get:
  ------------------
  |  |   62|      0|#define Py_tp_descr_get 54
  ------------------
  |  Branch (295:9): [True: 0, False: 414k]
  ------------------
  296|      0|            return (void*)tp->tp_descr_get;
  297|      0|        case Py_tp_descr_set:
  ------------------
  |  |   63|      0|#define Py_tp_descr_set 55
  ------------------
  |  Branch (297:9): [True: 0, False: 414k]
  ------------------
  298|      0|            return (void*)tp->tp_descr_set;
  299|      0|        case Py_tp_doc:
  ------------------
  |  |   64|      0|#define Py_tp_doc 56
  ------------------
  |  Branch (299:9): [True: 0, False: 414k]
  ------------------
  300|      0|            return (void*)tp->tp_doc;
  301|      0|        case Py_tp_getattr:
  ------------------
  |  |   65|      0|#define Py_tp_getattr 57
  ------------------
  |  Branch (301:9): [True: 0, False: 414k]
  ------------------
  302|      0|            return (void*)tp->tp_getattr;
  303|      0|        case Py_tp_getattro:
  ------------------
  |  |   66|      0|#define Py_tp_getattro 58
  ------------------
  |  Branch (303:9): [True: 0, False: 414k]
  ------------------
  304|      0|            return (void*)tp->tp_getattro;
  305|      0|        case Py_tp_hash:
  ------------------
  |  |   67|      0|#define Py_tp_hash 59
  ------------------
  |  Branch (305:9): [True: 0, False: 414k]
  ------------------
  306|      0|            return (void*)tp->tp_hash;
  307|      0|        case Py_tp_init:
  ------------------
  |  |   68|      0|#define Py_tp_init 60
  ------------------
  |  Branch (307:9): [True: 0, False: 414k]
  ------------------
  308|      0|            return (void*)tp->tp_init;
  309|      0|        case Py_tp_is_gc:
  ------------------
  |  |   69|      0|#define Py_tp_is_gc 61
  ------------------
  |  Branch (309:9): [True: 0, False: 414k]
  ------------------
  310|      0|            return (void*)tp->tp_is_gc;
  311|      0|        case Py_tp_iter:
  ------------------
  |  |   70|      0|#define Py_tp_iter 62
  ------------------
  |  Branch (311:9): [True: 0, False: 414k]
  ------------------
  312|      0|            return (void*)tp->tp_iter;
  313|      0|        case Py_tp_iternext:
  ------------------
  |  |   71|      0|#define Py_tp_iternext 63
  ------------------
  |  Branch (313:9): [True: 0, False: 414k]
  ------------------
  314|      0|            return (void*)tp->tp_iternext;
  315|      0|        case Py_tp_methods:
  ------------------
  |  |   72|      0|#define Py_tp_methods 64
  ------------------
  |  Branch (315:9): [True: 0, False: 414k]
  ------------------
  316|      0|            return (void*)tp->tp_methods;
  317|      0|        case Py_tp_new:
  ------------------
  |  |   73|      0|#define Py_tp_new 65
  ------------------
  |  Branch (317:9): [True: 0, False: 414k]
  ------------------
  318|      0|            return (void*)tp->tp_new;
  319|      0|        case Py_tp_repr:
  ------------------
  |  |   74|      0|#define Py_tp_repr 66
  ------------------
  |  Branch (319:9): [True: 0, False: 414k]
  ------------------
  320|      0|            return (void*)tp->tp_repr;
  321|      0|        case Py_tp_richcompare:
  ------------------
  |  |   75|      0|#define Py_tp_richcompare 67
  ------------------
  |  Branch (321:9): [True: 0, False: 414k]
  ------------------
  322|      0|            return (void*)tp->tp_richcompare;
  323|      0|        case Py_tp_setattr:
  ------------------
  |  |   76|      0|#define Py_tp_setattr 68
  ------------------
  |  Branch (323:9): [True: 0, False: 414k]
  ------------------
  324|      0|            return (void*)tp->tp_setattr;
  325|      0|        case Py_tp_setattro:
  ------------------
  |  |   77|      0|#define Py_tp_setattro 69
  ------------------
  |  Branch (325:9): [True: 0, False: 414k]
  ------------------
  326|      0|            return (void*)tp->tp_setattro;
  327|      0|        case Py_tp_str:
  ------------------
  |  |   78|      0|#define Py_tp_str 70
  ------------------
  |  Branch (327:9): [True: 0, False: 414k]
  ------------------
  328|      0|            return (void*)tp->tp_str;
  329|      0|        case Py_tp_traverse:
  ------------------
  |  |   79|      0|#define Py_tp_traverse 71
  ------------------
  |  Branch (329:9): [True: 0, False: 414k]
  ------------------
  330|      0|            return (void*)tp->tp_traverse;
  331|      0|        case Py_tp_members:
  ------------------
  |  |   80|      0|#define Py_tp_members 72
  ------------------
  |  Branch (331:9): [True: 0, False: 414k]
  ------------------
  332|      0|            return (void*)tp->tp_members;
  333|      0|        case Py_tp_getset:
  ------------------
  |  |   81|      0|#define Py_tp_getset 73
  ------------------
  |  Branch (333:9): [True: 0, False: 414k]
  ------------------
  334|      0|            return (void*)tp->tp_getset;
  335|   414k|        case Py_tp_free:
  ------------------
  |  |   82|   414k|#define Py_tp_free 74
  ------------------
  |  Branch (335:9): [True: 414k, False: 0]
  ------------------
  336|   414k|            return (void*)tp->tp_free;
  337|      0|        case Py_nb_matrix_multiply:
  ------------------
  |  |   83|      0|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (337:9): [True: 0, False: 414k]
  ------------------
  338|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (338:17): [True: 0, False: 0]
  ------------------
  339|      0|            return (void*)tp->tp_as_number->nb_matrix_multiply;
  340|      0|        case Py_nb_inplace_matrix_multiply:
  ------------------
  |  |   84|      0|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (340:9): [True: 0, False: 414k]
  ------------------
  341|      0|            if (!(tp->tp_as_number)) return NULL;
  ------------------
  |  Branch (341:17): [True: 0, False: 0]
  ------------------
  342|      0|            return (void*)tp->tp_as_number->nb_inplace_matrix_multiply;
  343|      0|        case Py_am_await:
  ------------------
  |  |   85|      0|#define Py_am_await 77
  ------------------
  |  Branch (343:9): [True: 0, False: 414k]
  ------------------
  344|      0|            if (!(tp->tp_as_async)) return NULL;
  ------------------
  |  Branch (344:17): [True: 0, False: 0]
  ------------------
  345|      0|            return (void*)tp->tp_as_async->am_await;
  346|      0|        case Py_am_aiter:
  ------------------
  |  |   86|      0|#define Py_am_aiter 78
  ------------------
  |  Branch (346:9): [True: 0, False: 414k]
  ------------------
  347|      0|            if (!(tp->tp_as_async)) return NULL;
  ------------------
  |  Branch (347:17): [True: 0, False: 0]
  ------------------
  348|      0|            return (void*)tp->tp_as_async->am_aiter;
  349|      0|        case Py_am_anext:
  ------------------
  |  |   87|      0|#define Py_am_anext 79
  ------------------
  |  Branch (349:9): [True: 0, False: 414k]
  ------------------
  350|      0|            if (!(tp->tp_as_async)) return NULL;
  ------------------
  |  Branch (350:17): [True: 0, False: 0]
  ------------------
  351|      0|            return (void*)tp->tp_as_async->am_anext;
  352|      0|        case Py_tp_finalize:
  ------------------
  |  |   88|      0|#define Py_tp_finalize 80
  ------------------
  |  Branch (352:9): [True: 0, False: 414k]
  ------------------
  353|      0|            return (void*)tp->tp_finalize;
  354|      0|        case Py_am_send:
  ------------------
  |  |   89|      0|#define Py_am_send 81
  ------------------
  |  Branch (354:9): [True: 0, False: 414k]
  ------------------
  355|      0|            if (!(tp->tp_as_async)) return NULL;
  ------------------
  |  Branch (355:17): [True: 0, False: 0]
  ------------------
  356|      0|            return (void*)tp->tp_as_async->am_send;
  357|      0|        case Py_tp_vectorcall:
  ------------------
  |  |   90|      0|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (357:9): [True: 0, False: 414k]
  ------------------
  358|      0|            return (void*)tp->tp_vectorcall;
  359|      0|        case Py_tp_token:
  ------------------
  |  |   91|      0|#define Py_tp_token 83
  ------------------
  |  Branch (359:9): [True: 0, False: 414k]
  ------------------
  360|      0|            if (!(tp->tp_flags & Py_TPFLAGS_HEAPTYPE)) return NULL;
  ------------------
  |  |  503|      0|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (360:17): [True: 0, False: 0]
  ------------------
  361|      0|            return (void*)((PyHeapTypeObject*)tp)->ht_token;
  362|      0|        case Py_bf_getbuffer:
  ------------------
  |  |   96|      0|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (362:9): [True: 0, False: 414k]
  ------------------
  363|      0|            if (!(tp->tp_as_buffer)) return NULL;
  ------------------
  |  Branch (363:17): [True: 0, False: 0]
  ------------------
  364|      0|            return (void*)tp->tp_as_buffer->bf_getbuffer;
  365|      0|        case Py_bf_releasebuffer:
  ------------------
  |  |   97|      0|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (365:9): [True: 0, False: 414k]
  ------------------
  366|      0|            if (!(tp->tp_as_buffer)) return NULL;
  ------------------
  |  Branch (366:17): [True: 0, False: 0]
  ------------------
  367|      0|            return (void*)tp->tp_as_buffer->bf_releasebuffer;
  368|      0|        case Py_mp_ass_subscript:
  ------------------
  |  |   98|      0|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (368:9): [True: 0, False: 414k]
  ------------------
  369|      0|            if (!(tp->tp_as_mapping)) return NULL;
  ------------------
  |  Branch (369:17): [True: 0, False: 0]
  ------------------
  370|      0|            return (void*)tp->tp_as_mapping->mp_ass_subscript;
  371|      0|        case Py_mp_length:
  ------------------
  |  |   99|      0|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (371:9): [True: 0, False: 414k]
  ------------------
  372|      0|            if (!(tp->tp_as_mapping)) return NULL;
  ------------------
  |  Branch (372:17): [True: 0, False: 0]
  ------------------
  373|      0|            return (void*)tp->tp_as_mapping->mp_length;
  374|   414k|    }
  375|      0|    _PySlot_err_bad_slot("PyType_GetSlot", slot_id);
  376|       |    return NULL;
  377|   414k|}
slots.c:_PySlot_resolve_type_slot:
    8|  2.29k|{
    9|  2.29k|    switch (slot_id) {
   10|      0|        case 1:
  ------------------
  |  Branch (10:9): [True: 0, False: 2.29k]
  ------------------
   11|      0|            return Py_bf_getbuffer;
  ------------------
  |  |   96|      0|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   12|      0|        case 2:
  ------------------
  |  Branch (12:9): [True: 0, False: 2.29k]
  ------------------
   13|      0|            return Py_bf_releasebuffer;
  ------------------
  |  |   97|      0|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   14|      0|        case 3:
  ------------------
  |  Branch (14:9): [True: 0, False: 2.29k]
  ------------------
   15|      0|            return Py_mp_ass_subscript;
  ------------------
  |  |   98|      0|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   16|      0|        case 4:
  ------------------
  |  Branch (16:9): [True: 0, False: 2.29k]
  ------------------
   17|      0|            return Py_mp_length;
  ------------------
  |  |   99|      0|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
   18|    262|        case Py_slot_end:
  ------------------
  |  |   12|    262|#define Py_slot_end 0
  ------------------
  |  Branch (18:9): [True: 262, False: 2.02k]
  ------------------
   19|    264|        case Py_mp_subscript:
  ------------------
  |  |   13|    264|#define Py_mp_subscript 5
  ------------------
  |  Branch (19:9): [True: 2, False: 2.28k]
  ------------------
   20|    264|        case Py_nb_absolute:
  ------------------
  |  |   14|    264|#define Py_nb_absolute 6
  ------------------
  |  Branch (20:9): [True: 0, False: 2.29k]
  ------------------
   21|    264|        case Py_nb_add:
  ------------------
  |  |   15|    264|#define Py_nb_add 7
  ------------------
  |  Branch (21:9): [True: 0, False: 2.29k]
  ------------------
   22|    264|        case Py_nb_and:
  ------------------
  |  |   16|    264|#define Py_nb_and 8
  ------------------
  |  Branch (22:9): [True: 0, False: 2.29k]
  ------------------
   23|    264|        case Py_nb_bool:
  ------------------
  |  |   17|    264|#define Py_nb_bool 9
  ------------------
  |  Branch (23:9): [True: 0, False: 2.29k]
  ------------------
   24|    264|        case Py_nb_divmod:
  ------------------
  |  |   18|    264|#define Py_nb_divmod 10
  ------------------
  |  Branch (24:9): [True: 0, False: 2.29k]
  ------------------
   25|    264|        case Py_nb_float:
  ------------------
  |  |   19|    264|#define Py_nb_float 11
  ------------------
  |  Branch (25:9): [True: 0, False: 2.29k]
  ------------------
   26|    264|        case Py_nb_floor_divide:
  ------------------
  |  |   20|    264|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (26:9): [True: 0, False: 2.29k]
  ------------------
   27|    264|        case Py_nb_index:
  ------------------
  |  |   21|    264|#define Py_nb_index 13
  ------------------
  |  Branch (27:9): [True: 0, False: 2.29k]
  ------------------
   28|    264|        case Py_nb_inplace_add:
  ------------------
  |  |   22|    264|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (28:9): [True: 0, False: 2.29k]
  ------------------
   29|    264|        case Py_nb_inplace_and:
  ------------------
  |  |   23|    264|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (29:9): [True: 0, False: 2.29k]
  ------------------
   30|    264|        case Py_nb_inplace_floor_divide:
  ------------------
  |  |   24|    264|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (30:9): [True: 0, False: 2.29k]
  ------------------
   31|    264|        case Py_nb_inplace_lshift:
  ------------------
  |  |   25|    264|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (31:9): [True: 0, False: 2.29k]
  ------------------
   32|    264|        case Py_nb_inplace_multiply:
  ------------------
  |  |   26|    264|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (32:9): [True: 0, False: 2.29k]
  ------------------
   33|    264|        case Py_nb_inplace_or:
  ------------------
  |  |   27|    264|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (33:9): [True: 0, False: 2.29k]
  ------------------
   34|    264|        case Py_nb_inplace_power:
  ------------------
  |  |   28|    264|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (34:9): [True: 0, False: 2.29k]
  ------------------
   35|    264|        case Py_nb_inplace_remainder:
  ------------------
  |  |   29|    264|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (35:9): [True: 0, False: 2.29k]
  ------------------
   36|    264|        case Py_nb_inplace_rshift:
  ------------------
  |  |   30|    264|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (36:9): [True: 0, False: 2.29k]
  ------------------
   37|    264|        case Py_nb_inplace_subtract:
  ------------------
  |  |   31|    264|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (37:9): [True: 0, False: 2.29k]
  ------------------
   38|    264|        case Py_nb_inplace_true_divide:
  ------------------
  |  |   32|    264|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (38:9): [True: 0, False: 2.29k]
  ------------------
   39|    264|        case Py_nb_inplace_xor:
  ------------------
  |  |   33|    264|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (39:9): [True: 0, False: 2.29k]
  ------------------
   40|    264|        case Py_nb_int:
  ------------------
  |  |   34|    264|#define Py_nb_int 26
  ------------------
  |  Branch (40:9): [True: 0, False: 2.29k]
  ------------------
   41|    264|        case Py_nb_invert:
  ------------------
  |  |   35|    264|#define Py_nb_invert 27
  ------------------
  |  Branch (41:9): [True: 0, False: 2.29k]
  ------------------
   42|    264|        case Py_nb_lshift:
  ------------------
  |  |   36|    264|#define Py_nb_lshift 28
  ------------------
  |  Branch (42:9): [True: 0, False: 2.29k]
  ------------------
   43|    264|        case Py_nb_multiply:
  ------------------
  |  |   37|    264|#define Py_nb_multiply 29
  ------------------
  |  Branch (43:9): [True: 0, False: 2.29k]
  ------------------
   44|    264|        case Py_nb_negative:
  ------------------
  |  |   38|    264|#define Py_nb_negative 30
  ------------------
  |  Branch (44:9): [True: 0, False: 2.29k]
  ------------------
   45|    274|        case Py_nb_or:
  ------------------
  |  |   39|    274|#define Py_nb_or 31
  ------------------
  |  Branch (45:9): [True: 10, False: 2.28k]
  ------------------
   46|    274|        case Py_nb_positive:
  ------------------
  |  |   40|    274|#define Py_nb_positive 32
  ------------------
  |  Branch (46:9): [True: 0, False: 2.29k]
  ------------------
   47|    274|        case Py_nb_power:
  ------------------
  |  |   41|    274|#define Py_nb_power 33
  ------------------
  |  Branch (47:9): [True: 0, False: 2.29k]
  ------------------
   48|    274|        case Py_nb_remainder:
  ------------------
  |  |   42|    274|#define Py_nb_remainder 34
  ------------------
  |  Branch (48:9): [True: 0, False: 2.29k]
  ------------------
   49|    274|        case Py_nb_rshift:
  ------------------
  |  |   43|    274|#define Py_nb_rshift 35
  ------------------
  |  Branch (49:9): [True: 0, False: 2.29k]
  ------------------
   50|    274|        case Py_nb_subtract:
  ------------------
  |  |   44|    274|#define Py_nb_subtract 36
  ------------------
  |  Branch (50:9): [True: 0, False: 2.29k]
  ------------------
   51|    274|        case Py_nb_true_divide:
  ------------------
  |  |   45|    274|#define Py_nb_true_divide 37
  ------------------
  |  Branch (51:9): [True: 0, False: 2.29k]
  ------------------
   52|    274|        case Py_nb_xor:
  ------------------
  |  |   46|    274|#define Py_nb_xor 38
  ------------------
  |  Branch (52:9): [True: 0, False: 2.29k]
  ------------------
   53|    276|        case Py_sq_ass_item:
  ------------------
  |  |   47|    276|#define Py_sq_ass_item 39
  ------------------
  |  Branch (53:9): [True: 2, False: 2.28k]
  ------------------
   54|    278|        case Py_sq_concat:
  ------------------
  |  |   48|    278|#define Py_sq_concat 40
  ------------------
  |  Branch (54:9): [True: 2, False: 2.28k]
  ------------------
   55|    280|        case Py_sq_contains:
  ------------------
  |  |   49|    280|#define Py_sq_contains 41
  ------------------
  |  Branch (55:9): [True: 2, False: 2.28k]
  ------------------
   56|    282|        case Py_sq_inplace_concat:
  ------------------
  |  |   50|    282|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (56:9): [True: 2, False: 2.28k]
  ------------------
   57|    284|        case Py_sq_inplace_repeat:
  ------------------
  |  |   51|    284|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (57:9): [True: 2, False: 2.28k]
  ------------------
   58|    286|        case Py_sq_item:
  ------------------
  |  |   52|    286|#define Py_sq_item 44
  ------------------
  |  Branch (58:9): [True: 2, False: 2.28k]
  ------------------
   59|    288|        case Py_sq_length:
  ------------------
  |  |   53|    288|#define Py_sq_length 45
  ------------------
  |  Branch (59:9): [True: 2, False: 2.28k]
  ------------------
   60|    290|        case Py_sq_repeat:
  ------------------
  |  |   54|    290|#define Py_sq_repeat 46
  ------------------
  |  Branch (60:9): [True: 2, False: 2.28k]
  ------------------
   61|    332|        case Py_tp_alloc:
  ------------------
  |  |   55|    332|#define Py_tp_alloc 47
  ------------------
  |  Branch (61:9): [True: 42, False: 2.24k]
  ------------------
   62|    332|        case Py_tp_base:
  ------------------
  |  |   56|    332|#define Py_tp_base 48
  ------------------
  |  Branch (62:9): [True: 0, False: 2.29k]
  ------------------
   63|    332|        case Py_tp_bases:
  ------------------
  |  |   57|    332|#define Py_tp_bases 49
  ------------------
  |  Branch (63:9): [True: 0, False: 2.29k]
  ------------------
   64|    348|        case Py_tp_call:
  ------------------
  |  |   58|    348|#define Py_tp_call 50
  ------------------
  |  Branch (64:9): [True: 16, False: 2.27k]
  ------------------
   65|    458|        case Py_tp_clear:
  ------------------
  |  |   59|    458|#define Py_tp_clear 51
  ------------------
  |  Branch (65:9): [True: 110, False: 2.18k]
  ------------------
   66|    708|        case Py_tp_dealloc:
  ------------------
  |  |   60|    708|#define Py_tp_dealloc 52
  ------------------
  |  Branch (66:9): [True: 250, False: 2.04k]
  ------------------
   67|    708|        case Py_tp_del:
  ------------------
  |  |   61|    708|#define Py_tp_del 53
  ------------------
  |  Branch (67:9): [True: 0, False: 2.29k]
  ------------------
   68|    714|        case Py_tp_descr_get:
  ------------------
  |  |   62|    714|#define Py_tp_descr_get 54
  ------------------
  |  Branch (68:9): [True: 6, False: 2.28k]
  ------------------
   69|    716|        case Py_tp_descr_set:
  ------------------
  |  |   63|    716|#define Py_tp_descr_set 55
  ------------------
  |  Branch (69:9): [True: 2, False: 2.28k]
  ------------------
   70|    914|        case Py_tp_doc:
  ------------------
  |  |   64|    914|#define Py_tp_doc 56
  ------------------
  |  Branch (70:9): [True: 198, False: 2.09k]
  ------------------
   71|    914|        case Py_tp_getattr:
  ------------------
  |  |   65|    914|#define Py_tp_getattr 57
  ------------------
  |  Branch (71:9): [True: 0, False: 2.29k]
  ------------------
   72|    994|        case Py_tp_getattro:
  ------------------
  |  |   66|    994|#define Py_tp_getattro 58
  ------------------
  |  Branch (72:9): [True: 80, False: 2.21k]
  ------------------
   73|    998|        case Py_tp_hash:
  ------------------
  |  |   67|    998|#define Py_tp_hash 59
  ------------------
  |  Branch (73:9): [True: 4, False: 2.28k]
  ------------------
   74|  1.04k|        case Py_tp_init:
  ------------------
  |  |   68|  1.04k|#define Py_tp_init 60
  ------------------
  |  Branch (74:9): [True: 50, False: 2.24k]
  ------------------
   75|  1.04k|        case Py_tp_is_gc:
  ------------------
  |  |   69|  1.04k|#define Py_tp_is_gc 61
  ------------------
  |  Branch (75:9): [True: 0, False: 2.29k]
  ------------------
   76|  1.11k|        case Py_tp_iter:
  ------------------
  |  |   70|  1.11k|#define Py_tp_iter 62
  ------------------
  |  Branch (76:9): [True: 68, False: 2.22k]
  ------------------
   77|  1.19k|        case Py_tp_iternext:
  ------------------
  |  |   71|  1.19k|#define Py_tp_iternext 63
  ------------------
  |  Branch (77:9): [True: 78, False: 2.21k]
  ------------------
   78|  1.39k|        case Py_tp_methods:
  ------------------
  |  |   72|  1.39k|#define Py_tp_methods 64
  ------------------
  |  Branch (78:9): [True: 196, False: 2.09k]
  ------------------
   79|  1.55k|        case Py_tp_new:
  ------------------
  |  |   73|  1.55k|#define Py_tp_new 65
  ------------------
  |  Branch (79:9): [True: 168, False: 2.12k]
  ------------------
   80|  1.68k|        case Py_tp_repr:
  ------------------
  |  |   74|  1.68k|#define Py_tp_repr 66
  ------------------
  |  Branch (80:9): [True: 130, False: 2.16k]
  ------------------
   81|  1.70k|        case Py_tp_richcompare:
  ------------------
  |  |   75|  1.70k|#define Py_tp_richcompare 67
  ------------------
  |  Branch (81:9): [True: 14, False: 2.27k]
  ------------------
   82|  1.70k|        case Py_tp_setattr:
  ------------------
  |  |   76|  1.70k|#define Py_tp_setattr 68
  ------------------
  |  Branch (82:9): [True: 0, False: 2.29k]
  ------------------
   83|  1.71k|        case Py_tp_setattro:
  ------------------
  |  |   77|  1.71k|#define Py_tp_setattro 69
  ------------------
  |  Branch (83:9): [True: 8, False: 2.28k]
  ------------------
   84|  1.71k|        case Py_tp_str:
  ------------------
  |  |   78|  1.71k|#define Py_tp_str 70
  ------------------
  |  Branch (84:9): [True: 2, False: 2.28k]
  ------------------
   85|  1.94k|        case Py_tp_traverse:
  ------------------
  |  |   79|  1.94k|#define Py_tp_traverse 71
  ------------------
  |  Branch (85:9): [True: 234, False: 2.05k]
  ------------------
   86|  2.09k|        case Py_tp_members:
  ------------------
  |  |   80|  2.09k|#define Py_tp_members 72
  ------------------
  |  Branch (86:9): [True: 150, False: 2.14k]
  ------------------
   87|  2.19k|        case Py_tp_getset:
  ------------------
  |  |   81|  2.19k|#define Py_tp_getset 73
  ------------------
  |  Branch (87:9): [True: 96, False: 2.19k]
  ------------------
   88|  2.27k|        case Py_tp_free:
  ------------------
  |  |   82|  2.27k|#define Py_tp_free 74
  ------------------
  |  Branch (88:9): [True: 80, False: 2.21k]
  ------------------
   89|  2.27k|        case Py_nb_matrix_multiply:
  ------------------
  |  |   83|  2.27k|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (89:9): [True: 0, False: 2.29k]
  ------------------
   90|  2.27k|        case Py_nb_inplace_matrix_multiply:
  ------------------
  |  |   84|  2.27k|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (90:9): [True: 0, False: 2.29k]
  ------------------
   91|  2.27k|        case Py_am_await:
  ------------------
  |  |   85|  2.27k|#define Py_am_await 77
  ------------------
  |  Branch (91:9): [True: 0, False: 2.29k]
  ------------------
   92|  2.27k|        case Py_am_aiter:
  ------------------
  |  |   86|  2.27k|#define Py_am_aiter 78
  ------------------
  |  Branch (92:9): [True: 0, False: 2.29k]
  ------------------
   93|  2.27k|        case Py_am_anext:
  ------------------
  |  |   87|  2.27k|#define Py_am_anext 79
  ------------------
  |  Branch (93:9): [True: 0, False: 2.29k]
  ------------------
   94|  2.28k|        case Py_tp_finalize:
  ------------------
  |  |   88|  2.28k|#define Py_tp_finalize 80
  ------------------
  |  Branch (94:9): [True: 8, False: 2.28k]
  ------------------
   95|  2.28k|        case Py_am_send:
  ------------------
  |  |   89|  2.28k|#define Py_am_send 81
  ------------------
  |  Branch (95:9): [True: 0, False: 2.29k]
  ------------------
   96|  2.28k|        case Py_tp_vectorcall:
  ------------------
  |  |   90|  2.28k|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (96:9): [True: 0, False: 2.29k]
  ------------------
   97|  2.28k|        case Py_tp_token:
  ------------------
  |  |   91|  2.28k|#define Py_tp_token 83
  ------------------
  |  Branch (97:9): [True: 2, False: 2.28k]
  ------------------
   98|  2.28k|        case Py_bf_getbuffer:
  ------------------
  |  |   96|  2.28k|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|  2.28k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (98:9): [True: 4, False: 2.28k]
  ------------------
   99|  2.29k|        case Py_bf_releasebuffer:
  ------------------
  |  |   97|  2.29k|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|  2.29k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (99:9): [True: 4, False: 2.28k]
  ------------------
  100|  2.29k|        case Py_mp_ass_subscript:
  ------------------
  |  |   98|  2.29k|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|  2.29k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (100:9): [True: 0, False: 2.29k]
  ------------------
  101|  2.29k|        case Py_mp_length:
  ------------------
  |  |   99|  2.29k|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|  2.29k|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (101:9): [True: 0, False: 2.29k]
  ------------------
  102|  2.29k|        case Py_slot_subslots:
  ------------------
  |  |  100|  2.29k|#define Py_slot_subslots 92
  ------------------
  |  Branch (102:9): [True: 0, False: 2.29k]
  ------------------
  103|  2.29k|        case Py_tp_slots:
  ------------------
  |  |  101|  2.29k|#define Py_tp_slots 93
  ------------------
  |  Branch (103:9): [True: 0, False: 2.29k]
  ------------------
  104|  2.29k|        case Py_tp_name:
  ------------------
  |  |  103|  2.29k|#define Py_tp_name 95
  ------------------
  |  Branch (104:9): [True: 0, False: 2.29k]
  ------------------
  105|  2.29k|        case Py_tp_basicsize:
  ------------------
  |  |  104|  2.29k|#define Py_tp_basicsize 96
  ------------------
  |  Branch (105:9): [True: 0, False: 2.29k]
  ------------------
  106|  2.29k|        case Py_tp_extra_basicsize:
  ------------------
  |  |  105|  2.29k|#define Py_tp_extra_basicsize 97
  ------------------
  |  Branch (106:9): [True: 0, False: 2.29k]
  ------------------
  107|  2.29k|        case Py_tp_itemsize:
  ------------------
  |  |  106|  2.29k|#define Py_tp_itemsize 98
  ------------------
  |  Branch (107:9): [True: 0, False: 2.29k]
  ------------------
  108|  2.29k|        case Py_tp_flags:
  ------------------
  |  |  107|  2.29k|#define Py_tp_flags 99
  ------------------
  |  Branch (108:9): [True: 0, False: 2.29k]
  ------------------
  109|  2.29k|        case Py_tp_metaclass:
  ------------------
  |  |  115|  2.29k|#define Py_tp_metaclass 107
  ------------------
  |  Branch (109:9): [True: 0, False: 2.29k]
  ------------------
  110|  2.29k|        case Py_tp_module:
  ------------------
  |  |  116|  2.29k|#define Py_tp_module 108
  ------------------
  |  Branch (110:9): [True: 0, False: 2.29k]
  ------------------
  111|  2.29k|            return slot_id;
  112|      0|        default:
  ------------------
  |  Branch (112:9): [True: 0, False: 2.29k]
  ------------------
  113|      0|            return Py_slot_invalid;
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  114|  2.29k|    }
  115|  2.29k|}
slots.c:_PySlot_resolve_mod_slot:
  119|    418|{
  120|    418|    switch (slot_id) {
  121|      0|        case 1:
  ------------------
  |  Branch (121:9): [True: 0, False: 418]
  ------------------
  122|      0|            return Py_mod_create;
  ------------------
  |  |   92|      0|#define Py_mod_create _Py_SLOT_COMPAT_VALUE(1, 84)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  123|      8|        case 2:
  ------------------
  |  Branch (123:9): [True: 8, False: 410]
  ------------------
  124|      8|            return Py_mod_exec;
  ------------------
  |  |   93|      8|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|      8|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  125|      8|        case 3:
  ------------------
  |  Branch (125:9): [True: 8, False: 410]
  ------------------
  126|      8|            return Py_mod_multiple_interpreters;
  ------------------
  |  |   94|      8|#define Py_mod_multiple_interpreters _Py_SLOT_COMPAT_VALUE(3, 86)
  |  |  ------------------
  |  |  |  |    7|      8|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  127|      8|        case 4:
  ------------------
  |  Branch (127:9): [True: 8, False: 410]
  ------------------
  128|      8|            return Py_mod_gil;
  ------------------
  |  |   95|      8|#define Py_mod_gil _Py_SLOT_COMPAT_VALUE(4, 87)
  |  |  ------------------
  |  |  |  |    7|      8|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  129|     86|        case Py_slot_end:
  ------------------
  |  |   12|     86|#define Py_slot_end 0
  ------------------
  |  Branch (129:9): [True: 86, False: 332]
  ------------------
  130|     86|        case Py_mod_create:
  ------------------
  |  |   92|     86|#define Py_mod_create _Py_SLOT_COMPAT_VALUE(1, 84)
  |  |  ------------------
  |  |  |  |    7|     86|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (130:9): [True: 0, False: 418]
  ------------------
  131|    160|        case Py_mod_exec:
  ------------------
  |  |   93|    160|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|    160|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (131:9): [True: 74, False: 344]
  ------------------
  132|    238|        case Py_mod_multiple_interpreters:
  ------------------
  |  |   94|    238|#define Py_mod_multiple_interpreters _Py_SLOT_COMPAT_VALUE(3, 86)
  |  |  ------------------
  |  |  |  |    7|    238|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (132:9): [True: 78, False: 340]
  ------------------
  133|    316|        case Py_mod_gil:
  ------------------
  |  |   95|    316|#define Py_mod_gil _Py_SLOT_COMPAT_VALUE(4, 87)
  |  |  ------------------
  |  |  |  |    7|    316|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (133:9): [True: 78, False: 340]
  ------------------
  134|    316|        case Py_slot_subslots:
  ------------------
  |  |  100|    316|#define Py_slot_subslots 92
  ------------------
  |  Branch (134:9): [True: 0, False: 418]
  ------------------
  135|    316|        case Py_mod_slots:
  ------------------
  |  |  102|    316|#define Py_mod_slots 94
  ------------------
  |  Branch (135:9): [True: 0, False: 418]
  ------------------
  136|    316|        case Py_mod_name:
  ------------------
  |  |  108|    316|#define Py_mod_name 100
  ------------------
  |  Branch (136:9): [True: 0, False: 418]
  ------------------
  137|    316|        case Py_mod_doc:
  ------------------
  |  |  109|    316|#define Py_mod_doc 101
  ------------------
  |  Branch (137:9): [True: 0, False: 418]
  ------------------
  138|    316|        case Py_mod_state_size:
  ------------------
  |  |  110|    316|#define Py_mod_state_size 102
  ------------------
  |  Branch (138:9): [True: 0, False: 418]
  ------------------
  139|    316|        case Py_mod_methods:
  ------------------
  |  |  111|    316|#define Py_mod_methods 103
  ------------------
  |  Branch (139:9): [True: 0, False: 418]
  ------------------
  140|    316|        case Py_mod_state_traverse:
  ------------------
  |  |  112|    316|#define Py_mod_state_traverse 104
  ------------------
  |  Branch (140:9): [True: 0, False: 418]
  ------------------
  141|    316|        case Py_mod_state_clear:
  ------------------
  |  |  113|    316|#define Py_mod_state_clear 105
  ------------------
  |  Branch (141:9): [True: 0, False: 418]
  ------------------
  142|    316|        case Py_mod_state_free:
  ------------------
  |  |  114|    316|#define Py_mod_state_free 106
  ------------------
  |  Branch (142:9): [True: 0, False: 418]
  ------------------
  143|    394|        case Py_mod_abi:
  ------------------
  |  |  117|    394|#define Py_mod_abi 109
  ------------------
  |  Branch (143:9): [True: 78, False: 340]
  ------------------
  144|    394|        case Py_mod_token:
  ------------------
  |  |  118|    394|#define Py_mod_token 110
  ------------------
  |  Branch (144:9): [True: 0, False: 418]
  ------------------
  145|    394|            return slot_id;
  146|      0|        default:
  ------------------
  |  Branch (146:9): [True: 0, False: 418]
  ------------------
  147|      0|            return Py_slot_invalid;
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  148|    418|    }
  149|    418|}
slots.c:_PySlot_get_dtype:
  634|  5.79k|{
  635|  5.79k|    switch (slot_id) {
  636|      0|        case Py_slot_end: return _PySlot_DTYPE_VOID;
  ------------------
  |  |   12|      0|#define Py_slot_end 0
  ------------------
  |  Branch (636:9): [True: 0, False: 5.79k]
  ------------------
  637|      5|        case Py_mp_subscript: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   13|      5|#define Py_mp_subscript 5
  ------------------
  |  Branch (637:9): [True: 5, False: 5.78k]
  ------------------
  638|      0|        case Py_nb_absolute: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   14|      0|#define Py_nb_absolute 6
  ------------------
  |  Branch (638:9): [True: 0, False: 5.79k]
  ------------------
  639|      0|        case Py_nb_add: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   15|      0|#define Py_nb_add 7
  ------------------
  |  Branch (639:9): [True: 0, False: 5.79k]
  ------------------
  640|      0|        case Py_nb_and: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   16|      0|#define Py_nb_and 8
  ------------------
  |  Branch (640:9): [True: 0, False: 5.79k]
  ------------------
  641|      0|        case Py_nb_bool: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   17|      0|#define Py_nb_bool 9
  ------------------
  |  Branch (641:9): [True: 0, False: 5.79k]
  ------------------
  642|      0|        case Py_nb_divmod: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   18|      0|#define Py_nb_divmod 10
  ------------------
  |  Branch (642:9): [True: 0, False: 5.79k]
  ------------------
  643|      0|        case Py_nb_float: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   19|      0|#define Py_nb_float 11
  ------------------
  |  Branch (643:9): [True: 0, False: 5.79k]
  ------------------
  644|      0|        case Py_nb_floor_divide: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   20|      0|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (644:9): [True: 0, False: 5.79k]
  ------------------
  645|      0|        case Py_nb_index: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   21|      0|#define Py_nb_index 13
  ------------------
  |  Branch (645:9): [True: 0, False: 5.79k]
  ------------------
  646|      0|        case Py_nb_inplace_add: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   22|      0|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (646:9): [True: 0, False: 5.79k]
  ------------------
  647|      0|        case Py_nb_inplace_and: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   23|      0|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (647:9): [True: 0, False: 5.79k]
  ------------------
  648|      0|        case Py_nb_inplace_floor_divide: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   24|      0|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (648:9): [True: 0, False: 5.79k]
  ------------------
  649|      0|        case Py_nb_inplace_lshift: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   25|      0|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (649:9): [True: 0, False: 5.79k]
  ------------------
  650|      0|        case Py_nb_inplace_multiply: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   26|      0|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (650:9): [True: 0, False: 5.79k]
  ------------------
  651|      0|        case Py_nb_inplace_or: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   27|      0|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (651:9): [True: 0, False: 5.79k]
  ------------------
  652|      0|        case Py_nb_inplace_power: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   28|      0|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (652:9): [True: 0, False: 5.79k]
  ------------------
  653|      0|        case Py_nb_inplace_remainder: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   29|      0|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (653:9): [True: 0, False: 5.79k]
  ------------------
  654|      0|        case Py_nb_inplace_rshift: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   30|      0|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (654:9): [True: 0, False: 5.79k]
  ------------------
  655|      0|        case Py_nb_inplace_subtract: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   31|      0|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (655:9): [True: 0, False: 5.79k]
  ------------------
  656|      0|        case Py_nb_inplace_true_divide: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   32|      0|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (656:9): [True: 0, False: 5.79k]
  ------------------
  657|      0|        case Py_nb_inplace_xor: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   33|      0|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (657:9): [True: 0, False: 5.79k]
  ------------------
  658|      0|        case Py_nb_int: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   34|      0|#define Py_nb_int 26
  ------------------
  |  Branch (658:9): [True: 0, False: 5.79k]
  ------------------
  659|      0|        case Py_nb_invert: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   35|      0|#define Py_nb_invert 27
  ------------------
  |  Branch (659:9): [True: 0, False: 5.79k]
  ------------------
  660|      0|        case Py_nb_lshift: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   36|      0|#define Py_nb_lshift 28
  ------------------
  |  Branch (660:9): [True: 0, False: 5.79k]
  ------------------
  661|      0|        case Py_nb_multiply: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   37|      0|#define Py_nb_multiply 29
  ------------------
  |  Branch (661:9): [True: 0, False: 5.79k]
  ------------------
  662|      0|        case Py_nb_negative: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   38|      0|#define Py_nb_negative 30
  ------------------
  |  Branch (662:9): [True: 0, False: 5.79k]
  ------------------
  663|     25|        case Py_nb_or: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   39|     25|#define Py_nb_or 31
  ------------------
  |  Branch (663:9): [True: 25, False: 5.76k]
  ------------------
  664|      0|        case Py_nb_positive: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   40|      0|#define Py_nb_positive 32
  ------------------
  |  Branch (664:9): [True: 0, False: 5.79k]
  ------------------
  665|      0|        case Py_nb_power: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   41|      0|#define Py_nb_power 33
  ------------------
  |  Branch (665:9): [True: 0, False: 5.79k]
  ------------------
  666|      0|        case Py_nb_remainder: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   42|      0|#define Py_nb_remainder 34
  ------------------
  |  Branch (666:9): [True: 0, False: 5.79k]
  ------------------
  667|      0|        case Py_nb_rshift: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   43|      0|#define Py_nb_rshift 35
  ------------------
  |  Branch (667:9): [True: 0, False: 5.79k]
  ------------------
  668|      0|        case Py_nb_subtract: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   44|      0|#define Py_nb_subtract 36
  ------------------
  |  Branch (668:9): [True: 0, False: 5.79k]
  ------------------
  669|      0|        case Py_nb_true_divide: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   45|      0|#define Py_nb_true_divide 37
  ------------------
  |  Branch (669:9): [True: 0, False: 5.79k]
  ------------------
  670|      0|        case Py_nb_xor: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   46|      0|#define Py_nb_xor 38
  ------------------
  |  Branch (670:9): [True: 0, False: 5.79k]
  ------------------
  671|      5|        case Py_sq_ass_item: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   47|      5|#define Py_sq_ass_item 39
  ------------------
  |  Branch (671:9): [True: 5, False: 5.78k]
  ------------------
  672|      5|        case Py_sq_concat: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   48|      5|#define Py_sq_concat 40
  ------------------
  |  Branch (672:9): [True: 5, False: 5.78k]
  ------------------
  673|      5|        case Py_sq_contains: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   49|      5|#define Py_sq_contains 41
  ------------------
  |  Branch (673:9): [True: 5, False: 5.78k]
  ------------------
  674|      5|        case Py_sq_inplace_concat: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   50|      5|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (674:9): [True: 5, False: 5.78k]
  ------------------
  675|      5|        case Py_sq_inplace_repeat: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   51|      5|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (675:9): [True: 5, False: 5.78k]
  ------------------
  676|      5|        case Py_sq_item: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   52|      5|#define Py_sq_item 44
  ------------------
  |  Branch (676:9): [True: 5, False: 5.78k]
  ------------------
  677|      5|        case Py_sq_length: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   53|      5|#define Py_sq_length 45
  ------------------
  |  Branch (677:9): [True: 5, False: 5.78k]
  ------------------
  678|      5|        case Py_sq_repeat: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   54|      5|#define Py_sq_repeat 46
  ------------------
  |  Branch (678:9): [True: 5, False: 5.78k]
  ------------------
  679|    105|        case Py_tp_alloc: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   55|    105|#define Py_tp_alloc 47
  ------------------
  |  Branch (679:9): [True: 105, False: 5.68k]
  ------------------
  680|      0|        case Py_tp_base: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   56|      0|#define Py_tp_base 48
  ------------------
  |  Branch (680:9): [True: 0, False: 5.79k]
  ------------------
  681|      0|        case Py_tp_bases: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (681:9): [True: 0, False: 5.79k]
  ------------------
  682|     40|        case Py_tp_call: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   58|     40|#define Py_tp_call 50
  ------------------
  |  Branch (682:9): [True: 40, False: 5.75k]
  ------------------
  683|    275|        case Py_tp_clear: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   59|    275|#define Py_tp_clear 51
  ------------------
  |  Branch (683:9): [True: 275, False: 5.51k]
  ------------------
  684|    625|        case Py_tp_dealloc: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   60|    625|#define Py_tp_dealloc 52
  ------------------
  |  Branch (684:9): [True: 625, False: 5.16k]
  ------------------
  685|      0|        case Py_tp_del: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   61|      0|#define Py_tp_del 53
  ------------------
  |  Branch (685:9): [True: 0, False: 5.79k]
  ------------------
  686|     15|        case Py_tp_descr_get: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   62|     15|#define Py_tp_descr_get 54
  ------------------
  |  Branch (686:9): [True: 15, False: 5.77k]
  ------------------
  687|      5|        case Py_tp_descr_set: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   63|      5|#define Py_tp_descr_set 55
  ------------------
  |  Branch (687:9): [True: 5, False: 5.78k]
  ------------------
  688|    396|        case Py_tp_doc: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   64|    396|#define Py_tp_doc 56
  ------------------
  |  Branch (688:9): [True: 396, False: 5.39k]
  ------------------
  689|      0|        case Py_tp_getattr: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   65|      0|#define Py_tp_getattr 57
  ------------------
  |  Branch (689:9): [True: 0, False: 5.79k]
  ------------------
  690|    200|        case Py_tp_getattro: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   66|    200|#define Py_tp_getattro 58
  ------------------
  |  Branch (690:9): [True: 200, False: 5.59k]
  ------------------
  691|     10|        case Py_tp_hash: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   67|     10|#define Py_tp_hash 59
  ------------------
  |  Branch (691:9): [True: 10, False: 5.78k]
  ------------------
  692|    125|        case Py_tp_init: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   68|    125|#define Py_tp_init 60
  ------------------
  |  Branch (692:9): [True: 125, False: 5.66k]
  ------------------
  693|      0|        case Py_tp_is_gc: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   69|      0|#define Py_tp_is_gc 61
  ------------------
  |  Branch (693:9): [True: 0, False: 5.79k]
  ------------------
  694|    170|        case Py_tp_iter: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   70|    170|#define Py_tp_iter 62
  ------------------
  |  Branch (694:9): [True: 170, False: 5.62k]
  ------------------
  695|    195|        case Py_tp_iternext: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   71|    195|#define Py_tp_iternext 63
  ------------------
  |  Branch (695:9): [True: 195, False: 5.59k]
  ------------------
  696|    490|        case Py_tp_methods: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   72|    490|#define Py_tp_methods 64
  ------------------
  |  Branch (696:9): [True: 490, False: 5.30k]
  ------------------
  697|    420|        case Py_tp_new: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   73|    420|#define Py_tp_new 65
  ------------------
  |  Branch (697:9): [True: 420, False: 5.37k]
  ------------------
  698|    325|        case Py_tp_repr: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   74|    325|#define Py_tp_repr 66
  ------------------
  |  Branch (698:9): [True: 325, False: 5.46k]
  ------------------
  699|     35|        case Py_tp_richcompare: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   75|     35|#define Py_tp_richcompare 67
  ------------------
  |  Branch (699:9): [True: 35, False: 5.75k]
  ------------------
  700|      0|        case Py_tp_setattr: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   76|      0|#define Py_tp_setattr 68
  ------------------
  |  Branch (700:9): [True: 0, False: 5.79k]
  ------------------
  701|     20|        case Py_tp_setattro: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   77|     20|#define Py_tp_setattro 69
  ------------------
  |  Branch (701:9): [True: 20, False: 5.77k]
  ------------------
  702|      5|        case Py_tp_str: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   78|      5|#define Py_tp_str 70
  ------------------
  |  Branch (702:9): [True: 5, False: 5.78k]
  ------------------
  703|    585|        case Py_tp_traverse: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   79|    585|#define Py_tp_traverse 71
  ------------------
  |  Branch (703:9): [True: 585, False: 5.20k]
  ------------------
  704|    375|        case Py_tp_members: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   80|    375|#define Py_tp_members 72
  ------------------
  |  Branch (704:9): [True: 375, False: 5.41k]
  ------------------
  705|    240|        case Py_tp_getset: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   81|    240|#define Py_tp_getset 73
  ------------------
  |  Branch (705:9): [True: 240, False: 5.55k]
  ------------------
  706|    200|        case Py_tp_free: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   82|    200|#define Py_tp_free 74
  ------------------
  |  Branch (706:9): [True: 200, False: 5.59k]
  ------------------
  707|      0|        case Py_nb_matrix_multiply: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   83|      0|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (707:9): [True: 0, False: 5.79k]
  ------------------
  708|      0|        case Py_nb_inplace_matrix_multiply: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   84|      0|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (708:9): [True: 0, False: 5.79k]
  ------------------
  709|      0|        case Py_am_await: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   85|      0|#define Py_am_await 77
  ------------------
  |  Branch (709:9): [True: 0, False: 5.79k]
  ------------------
  710|      0|        case Py_am_aiter: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   86|      0|#define Py_am_aiter 78
  ------------------
  |  Branch (710:9): [True: 0, False: 5.79k]
  ------------------
  711|      0|        case Py_am_anext: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   87|      0|#define Py_am_anext 79
  ------------------
  |  Branch (711:9): [True: 0, False: 5.79k]
  ------------------
  712|     20|        case Py_tp_finalize: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   88|     20|#define Py_tp_finalize 80
  ------------------
  |  Branch (712:9): [True: 20, False: 5.77k]
  ------------------
  713|      0|        case Py_am_send: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   89|      0|#define Py_am_send 81
  ------------------
  |  Branch (713:9): [True: 0, False: 5.79k]
  ------------------
  714|      0|        case Py_tp_vectorcall: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   90|      0|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (714:9): [True: 0, False: 5.79k]
  ------------------
  715|      4|        case Py_tp_token: return _PySlot_DTYPE_PTR;
  ------------------
  |  |   91|      4|#define Py_tp_token 83
  ------------------
  |  Branch (715:9): [True: 4, False: 5.79k]
  ------------------
  716|      0|        case Py_mod_create: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   92|      0|#define Py_mod_create _Py_SLOT_COMPAT_VALUE(1, 84)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (716:9): [True: 0, False: 5.79k]
  ------------------
  717|    246|        case Py_mod_exec: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   93|    246|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|    246|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (717:9): [True: 246, False: 5.54k]
  ------------------
  718|    172|        case Py_mod_multiple_interpreters: return _PySlot_DTYPE_UINT64;
  ------------------
  |  |   94|    172|#define Py_mod_multiple_interpreters _Py_SLOT_COMPAT_VALUE(3, 86)
  |  |  ------------------
  |  |  |  |    7|    172|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (718:9): [True: 172, False: 5.62k]
  ------------------
  719|    172|        case Py_mod_gil: return _PySlot_DTYPE_UINT64;
  ------------------
  |  |   95|    172|#define Py_mod_gil _Py_SLOT_COMPAT_VALUE(4, 87)
  |  |  ------------------
  |  |  |  |    7|    172|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (719:9): [True: 172, False: 5.62k]
  ------------------
  720|     10|        case Py_bf_getbuffer: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   96|     10|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|     10|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (720:9): [True: 10, False: 5.78k]
  ------------------
  721|     10|        case Py_bf_releasebuffer: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   97|     10|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|     10|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (721:9): [True: 10, False: 5.78k]
  ------------------
  722|      0|        case Py_mp_ass_subscript: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   98|      0|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (722:9): [True: 0, False: 5.79k]
  ------------------
  723|      0|        case Py_mp_length: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |   99|      0|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (723:9): [True: 0, False: 5.79k]
  ------------------
  724|      0|        case Py_slot_subslots: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  100|      0|#define Py_slot_subslots 92
  ------------------
  |  Branch (724:9): [True: 0, False: 5.79k]
  ------------------
  725|      0|        case Py_tp_slots: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  101|      0|#define Py_tp_slots 93
  ------------------
  |  Branch (725:9): [True: 0, False: 5.79k]
  ------------------
  726|      0|        case Py_mod_slots: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  102|      0|#define Py_mod_slots 94
  ------------------
  |  Branch (726:9): [True: 0, False: 5.79k]
  ------------------
  727|      0|        case Py_tp_name: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  103|      0|#define Py_tp_name 95
  ------------------
  |  Branch (727:9): [True: 0, False: 5.79k]
  ------------------
  728|      0|        case Py_tp_basicsize: return _PySlot_DTYPE_SIZE;
  ------------------
  |  |  104|      0|#define Py_tp_basicsize 96
  ------------------
  |  Branch (728:9): [True: 0, False: 5.79k]
  ------------------
  729|      0|        case Py_tp_extra_basicsize: return _PySlot_DTYPE_SIZE;
  ------------------
  |  |  105|      0|#define Py_tp_extra_basicsize 97
  ------------------
  |  Branch (729:9): [True: 0, False: 5.79k]
  ------------------
  730|      0|        case Py_tp_itemsize: return _PySlot_DTYPE_SIZE;
  ------------------
  |  |  106|      0|#define Py_tp_itemsize 98
  ------------------
  |  Branch (730:9): [True: 0, False: 5.79k]
  ------------------
  731|      0|        case Py_tp_flags: return _PySlot_DTYPE_UINT64;
  ------------------
  |  |  107|      0|#define Py_tp_flags 99
  ------------------
  |  Branch (731:9): [True: 0, False: 5.79k]
  ------------------
  732|      0|        case Py_mod_name: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  108|      0|#define Py_mod_name 100
  ------------------
  |  Branch (732:9): [True: 0, False: 5.79k]
  ------------------
  733|      0|        case Py_mod_doc: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  109|      0|#define Py_mod_doc 101
  ------------------
  |  Branch (733:9): [True: 0, False: 5.79k]
  ------------------
  734|      0|        case Py_mod_state_size: return _PySlot_DTYPE_SIZE;
  ------------------
  |  |  110|      0|#define Py_mod_state_size 102
  ------------------
  |  Branch (734:9): [True: 0, False: 5.79k]
  ------------------
  735|      0|        case Py_mod_methods: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  111|      0|#define Py_mod_methods 103
  ------------------
  |  Branch (735:9): [True: 0, False: 5.79k]
  ------------------
  736|      0|        case Py_mod_state_traverse: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |  112|      0|#define Py_mod_state_traverse 104
  ------------------
  |  Branch (736:9): [True: 0, False: 5.79k]
  ------------------
  737|      0|        case Py_mod_state_clear: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |  113|      0|#define Py_mod_state_clear 105
  ------------------
  |  Branch (737:9): [True: 0, False: 5.79k]
  ------------------
  738|      0|        case Py_mod_state_free: return _PySlot_DTYPE_FUNC;
  ------------------
  |  |  114|      0|#define Py_mod_state_free 106
  ------------------
  |  Branch (738:9): [True: 0, False: 5.79k]
  ------------------
  739|      0|        case Py_tp_metaclass: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  115|      0|#define Py_tp_metaclass 107
  ------------------
  |  Branch (739:9): [True: 0, False: 5.79k]
  ------------------
  740|      0|        case Py_tp_module: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  116|      0|#define Py_tp_module 108
  ------------------
  |  Branch (740:9): [True: 0, False: 5.79k]
  ------------------
  741|    234|        case Py_mod_abi: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  117|    234|#define Py_mod_abi 109
  ------------------
  |  Branch (741:9): [True: 234, False: 5.56k]
  ------------------
  742|      0|        case Py_mod_token: return _PySlot_DTYPE_PTR;
  ------------------
  |  |  118|      0|#define Py_mod_token 110
  ------------------
  |  Branch (742:9): [True: 0, False: 5.79k]
  ------------------
  743|      0|        default: return _PySlot_DTYPE_VOID;
  ------------------
  |  Branch (743:9): [True: 0, False: 5.79k]
  ------------------
  744|  5.79k|    }
  745|  5.79k|}
slots.c:_PySlot_get_must_be_static:
  948|  1.34k|{
  949|  1.34k|    switch (slot_id) {
  ------------------
  |  Branch (949:13): [True: 221, False: 1.12k]
  ------------------
  950|     98|        case Py_tp_methods: return true;
  ------------------
  |  |   72|     98|#define Py_tp_methods 64
  ------------------
  |  Branch (950:9): [True: 98, False: 1.24k]
  ------------------
  951|     75|        case Py_tp_members: return true;
  ------------------
  |  |   80|     75|#define Py_tp_members 72
  ------------------
  |  Branch (951:9): [True: 75, False: 1.27k]
  ------------------
  952|     48|        case Py_tp_getset: return true;
  ------------------
  |  |   81|     48|#define Py_tp_getset 73
  ------------------
  |  Branch (952:9): [True: 48, False: 1.29k]
  ------------------
  953|      0|        case Py_mod_methods: return true;
  ------------------
  |  |  111|      0|#define Py_mod_methods 103
  ------------------
  |  Branch (953:9): [True: 0, False: 1.34k]
  ------------------
  954|  1.34k|    }
  955|  1.12k|    return false;
  956|  1.34k|}
slots.c:_PySlot_get_null_handling:
  843|  1.34k|{
  844|  1.34k|    switch (slot_id) {
  845|      0|        case Py_slot_end:
  ------------------
  |  |   12|      0|#define Py_slot_end 0
  ------------------
  |  Branch (845:9): [True: 0, False: 1.34k]
  ------------------
  846|     99|        case Py_tp_doc:
  ------------------
  |  |   64|     99|#define Py_tp_doc 56
  ------------------
  |  Branch (846:9): [True: 99, False: 1.24k]
  ------------------
  847|    100|        case Py_tp_token:
  ------------------
  |  |   91|    100|#define Py_tp_token 83
  ------------------
  |  Branch (847:9): [True: 1, False: 1.34k]
  ------------------
  848|    186|        case Py_mod_multiple_interpreters:
  ------------------
  |  |   94|    186|#define Py_mod_multiple_interpreters _Py_SLOT_COMPAT_VALUE(3, 86)
  |  |  ------------------
  |  |  |  |    7|    186|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (848:9): [True: 86, False: 1.26k]
  ------------------
  849|    272|        case Py_mod_gil:
  ------------------
  |  |   95|    272|#define Py_mod_gil _Py_SLOT_COMPAT_VALUE(4, 87)
  |  |  ------------------
  |  |  |  |    7|    272|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (849:9): [True: 86, False: 1.26k]
  ------------------
  850|    272|        case Py_slot_subslots:
  ------------------
  |  |  100|    272|#define Py_slot_subslots 92
  ------------------
  |  Branch (850:9): [True: 0, False: 1.34k]
  ------------------
  851|    272|        case Py_tp_slots:
  ------------------
  |  |  101|    272|#define Py_tp_slots 93
  ------------------
  |  Branch (851:9): [True: 0, False: 1.34k]
  ------------------
  852|    272|        case Py_mod_slots:
  ------------------
  |  |  102|    272|#define Py_mod_slots 94
  ------------------
  |  Branch (852:9): [True: 0, False: 1.34k]
  ------------------
  853|    272|        case Py_tp_basicsize:
  ------------------
  |  |  104|    272|#define Py_tp_basicsize 96
  ------------------
  |  Branch (853:9): [True: 0, False: 1.34k]
  ------------------
  854|    272|        case Py_tp_extra_basicsize:
  ------------------
  |  |  105|    272|#define Py_tp_extra_basicsize 97
  ------------------
  |  Branch (854:9): [True: 0, False: 1.34k]
  ------------------
  855|    272|        case Py_tp_itemsize:
  ------------------
  |  |  106|    272|#define Py_tp_itemsize 98
  ------------------
  |  Branch (855:9): [True: 0, False: 1.34k]
  ------------------
  856|    272|        case Py_tp_flags:
  ------------------
  |  |  107|    272|#define Py_tp_flags 99
  ------------------
  |  Branch (856:9): [True: 0, False: 1.34k]
  ------------------
  857|    272|        case Py_mod_state_size:
  ------------------
  |  |  110|    272|#define Py_mod_state_size 102
  ------------------
  |  Branch (857:9): [True: 0, False: 1.34k]
  ------------------
  858|    272|            return _PySlot_PROBLEM_ALLOW;
  859|      1|        case Py_mp_subscript:
  ------------------
  |  |   13|      1|#define Py_mp_subscript 5
  ------------------
  |  Branch (859:9): [True: 1, False: 1.34k]
  ------------------
  860|      1|        case Py_nb_absolute:
  ------------------
  |  |   14|      1|#define Py_nb_absolute 6
  ------------------
  |  Branch (860:9): [True: 0, False: 1.34k]
  ------------------
  861|      1|        case Py_nb_add:
  ------------------
  |  |   15|      1|#define Py_nb_add 7
  ------------------
  |  Branch (861:9): [True: 0, False: 1.34k]
  ------------------
  862|      1|        case Py_nb_and:
  ------------------
  |  |   16|      1|#define Py_nb_and 8
  ------------------
  |  Branch (862:9): [True: 0, False: 1.34k]
  ------------------
  863|      1|        case Py_nb_bool:
  ------------------
  |  |   17|      1|#define Py_nb_bool 9
  ------------------
  |  Branch (863:9): [True: 0, False: 1.34k]
  ------------------
  864|      1|        case Py_nb_divmod:
  ------------------
  |  |   18|      1|#define Py_nb_divmod 10
  ------------------
  |  Branch (864:9): [True: 0, False: 1.34k]
  ------------------
  865|      1|        case Py_nb_float:
  ------------------
  |  |   19|      1|#define Py_nb_float 11
  ------------------
  |  Branch (865:9): [True: 0, False: 1.34k]
  ------------------
  866|      1|        case Py_nb_floor_divide:
  ------------------
  |  |   20|      1|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (866:9): [True: 0, False: 1.34k]
  ------------------
  867|      1|        case Py_nb_index:
  ------------------
  |  |   21|      1|#define Py_nb_index 13
  ------------------
  |  Branch (867:9): [True: 0, False: 1.34k]
  ------------------
  868|      1|        case Py_nb_inplace_add:
  ------------------
  |  |   22|      1|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (868:9): [True: 0, False: 1.34k]
  ------------------
  869|      1|        case Py_nb_inplace_and:
  ------------------
  |  |   23|      1|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (869:9): [True: 0, False: 1.34k]
  ------------------
  870|      1|        case Py_nb_inplace_floor_divide:
  ------------------
  |  |   24|      1|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (870:9): [True: 0, False: 1.34k]
  ------------------
  871|      1|        case Py_nb_inplace_lshift:
  ------------------
  |  |   25|      1|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (871:9): [True: 0, False: 1.34k]
  ------------------
  872|      1|        case Py_nb_inplace_multiply:
  ------------------
  |  |   26|      1|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (872:9): [True: 0, False: 1.34k]
  ------------------
  873|      1|        case Py_nb_inplace_or:
  ------------------
  |  |   27|      1|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (873:9): [True: 0, False: 1.34k]
  ------------------
  874|      1|        case Py_nb_inplace_power:
  ------------------
  |  |   28|      1|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (874:9): [True: 0, False: 1.34k]
  ------------------
  875|      1|        case Py_nb_inplace_remainder:
  ------------------
  |  |   29|      1|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (875:9): [True: 0, False: 1.34k]
  ------------------
  876|      1|        case Py_nb_inplace_rshift:
  ------------------
  |  |   30|      1|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (876:9): [True: 0, False: 1.34k]
  ------------------
  877|      1|        case Py_nb_inplace_subtract:
  ------------------
  |  |   31|      1|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (877:9): [True: 0, False: 1.34k]
  ------------------
  878|      1|        case Py_nb_inplace_true_divide:
  ------------------
  |  |   32|      1|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (878:9): [True: 0, False: 1.34k]
  ------------------
  879|      1|        case Py_nb_inplace_xor:
  ------------------
  |  |   33|      1|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (879:9): [True: 0, False: 1.34k]
  ------------------
  880|      1|        case Py_nb_int:
  ------------------
  |  |   34|      1|#define Py_nb_int 26
  ------------------
  |  Branch (880:9): [True: 0, False: 1.34k]
  ------------------
  881|      1|        case Py_nb_invert:
  ------------------
  |  |   35|      1|#define Py_nb_invert 27
  ------------------
  |  Branch (881:9): [True: 0, False: 1.34k]
  ------------------
  882|      1|        case Py_nb_lshift:
  ------------------
  |  |   36|      1|#define Py_nb_lshift 28
  ------------------
  |  Branch (882:9): [True: 0, False: 1.34k]
  ------------------
  883|      1|        case Py_nb_multiply:
  ------------------
  |  |   37|      1|#define Py_nb_multiply 29
  ------------------
  |  Branch (883:9): [True: 0, False: 1.34k]
  ------------------
  884|      1|        case Py_nb_negative:
  ------------------
  |  |   38|      1|#define Py_nb_negative 30
  ------------------
  |  Branch (884:9): [True: 0, False: 1.34k]
  ------------------
  885|      6|        case Py_nb_or:
  ------------------
  |  |   39|      6|#define Py_nb_or 31
  ------------------
  |  Branch (885:9): [True: 5, False: 1.34k]
  ------------------
  886|      6|        case Py_nb_positive:
  ------------------
  |  |   40|      6|#define Py_nb_positive 32
  ------------------
  |  Branch (886:9): [True: 0, False: 1.34k]
  ------------------
  887|      6|        case Py_nb_power:
  ------------------
  |  |   41|      6|#define Py_nb_power 33
  ------------------
  |  Branch (887:9): [True: 0, False: 1.34k]
  ------------------
  888|      6|        case Py_nb_remainder:
  ------------------
  |  |   42|      6|#define Py_nb_remainder 34
  ------------------
  |  Branch (888:9): [True: 0, False: 1.34k]
  ------------------
  889|      6|        case Py_nb_rshift:
  ------------------
  |  |   43|      6|#define Py_nb_rshift 35
  ------------------
  |  Branch (889:9): [True: 0, False: 1.34k]
  ------------------
  890|      6|        case Py_nb_subtract:
  ------------------
  |  |   44|      6|#define Py_nb_subtract 36
  ------------------
  |  Branch (890:9): [True: 0, False: 1.34k]
  ------------------
  891|      6|        case Py_nb_true_divide:
  ------------------
  |  |   45|      6|#define Py_nb_true_divide 37
  ------------------
  |  Branch (891:9): [True: 0, False: 1.34k]
  ------------------
  892|      6|        case Py_nb_xor:
  ------------------
  |  |   46|      6|#define Py_nb_xor 38
  ------------------
  |  Branch (892:9): [True: 0, False: 1.34k]
  ------------------
  893|      7|        case Py_sq_ass_item:
  ------------------
  |  |   47|      7|#define Py_sq_ass_item 39
  ------------------
  |  Branch (893:9): [True: 1, False: 1.34k]
  ------------------
  894|      8|        case Py_sq_concat:
  ------------------
  |  |   48|      8|#define Py_sq_concat 40
  ------------------
  |  Branch (894:9): [True: 1, False: 1.34k]
  ------------------
  895|      9|        case Py_sq_contains:
  ------------------
  |  |   49|      9|#define Py_sq_contains 41
  ------------------
  |  Branch (895:9): [True: 1, False: 1.34k]
  ------------------
  896|     10|        case Py_sq_inplace_concat:
  ------------------
  |  |   50|     10|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (896:9): [True: 1, False: 1.34k]
  ------------------
  897|     11|        case Py_sq_inplace_repeat:
  ------------------
  |  |   51|     11|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (897:9): [True: 1, False: 1.34k]
  ------------------
  898|     12|        case Py_sq_item:
  ------------------
  |  |   52|     12|#define Py_sq_item 44
  ------------------
  |  Branch (898:9): [True: 1, False: 1.34k]
  ------------------
  899|     13|        case Py_sq_length:
  ------------------
  |  |   53|     13|#define Py_sq_length 45
  ------------------
  |  Branch (899:9): [True: 1, False: 1.34k]
  ------------------
  900|     14|        case Py_sq_repeat:
  ------------------
  |  |   54|     14|#define Py_sq_repeat 46
  ------------------
  |  Branch (900:9): [True: 1, False: 1.34k]
  ------------------
  901|     35|        case Py_tp_alloc:
  ------------------
  |  |   55|     35|#define Py_tp_alloc 47
  ------------------
  |  Branch (901:9): [True: 21, False: 1.32k]
  ------------------
  902|     35|        case Py_tp_base:
  ------------------
  |  |   56|     35|#define Py_tp_base 48
  ------------------
  |  Branch (902:9): [True: 0, False: 1.34k]
  ------------------
  903|     35|        case Py_tp_bases:
  ------------------
  |  |   57|     35|#define Py_tp_bases 49
  ------------------
  |  Branch (903:9): [True: 0, False: 1.34k]
  ------------------
  904|     43|        case Py_tp_call:
  ------------------
  |  |   58|     43|#define Py_tp_call 50
  ------------------
  |  Branch (904:9): [True: 8, False: 1.33k]
  ------------------
  905|     98|        case Py_tp_clear:
  ------------------
  |  |   59|     98|#define Py_tp_clear 51
  ------------------
  |  Branch (905:9): [True: 55, False: 1.29k]
  ------------------
  906|    223|        case Py_tp_dealloc:
  ------------------
  |  |   60|    223|#define Py_tp_dealloc 52
  ------------------
  |  Branch (906:9): [True: 125, False: 1.22k]
  ------------------
  907|    223|        case Py_tp_del:
  ------------------
  |  |   61|    223|#define Py_tp_del 53
  ------------------
  |  Branch (907:9): [True: 0, False: 1.34k]
  ------------------
  908|    226|        case Py_tp_descr_get:
  ------------------
  |  |   62|    226|#define Py_tp_descr_get 54
  ------------------
  |  Branch (908:9): [True: 3, False: 1.34k]
  ------------------
  909|    227|        case Py_tp_descr_set:
  ------------------
  |  |   63|    227|#define Py_tp_descr_set 55
  ------------------
  |  Branch (909:9): [True: 1, False: 1.34k]
  ------------------
  910|    227|        case Py_tp_getattr:
  ------------------
  |  |   65|    227|#define Py_tp_getattr 57
  ------------------
  |  Branch (910:9): [True: 0, False: 1.34k]
  ------------------
  911|    267|        case Py_tp_getattro:
  ------------------
  |  |   66|    267|#define Py_tp_getattro 58
  ------------------
  |  Branch (911:9): [True: 40, False: 1.30k]
  ------------------
  912|    269|        case Py_tp_hash:
  ------------------
  |  |   67|    269|#define Py_tp_hash 59
  ------------------
  |  Branch (912:9): [True: 2, False: 1.34k]
  ------------------
  913|    294|        case Py_tp_init:
  ------------------
  |  |   68|    294|#define Py_tp_init 60
  ------------------
  |  Branch (913:9): [True: 25, False: 1.32k]
  ------------------
  914|    294|        case Py_tp_is_gc:
  ------------------
  |  |   69|    294|#define Py_tp_is_gc 61
  ------------------
  |  Branch (914:9): [True: 0, False: 1.34k]
  ------------------
  915|    328|        case Py_tp_iter:
  ------------------
  |  |   70|    328|#define Py_tp_iter 62
  ------------------
  |  Branch (915:9): [True: 34, False: 1.31k]
  ------------------
  916|    367|        case Py_tp_iternext:
  ------------------
  |  |   71|    367|#define Py_tp_iternext 63
  ------------------
  |  Branch (916:9): [True: 39, False: 1.30k]
  ------------------
  917|    465|        case Py_tp_methods:
  ------------------
  |  |   72|    465|#define Py_tp_methods 64
  ------------------
  |  Branch (917:9): [True: 98, False: 1.24k]
  ------------------
  918|    549|        case Py_tp_new:
  ------------------
  |  |   73|    549|#define Py_tp_new 65
  ------------------
  |  Branch (918:9): [True: 84, False: 1.26k]
  ------------------
  919|    614|        case Py_tp_repr:
  ------------------
  |  |   74|    614|#define Py_tp_repr 66
  ------------------
  |  Branch (919:9): [True: 65, False: 1.28k]
  ------------------
  920|    621|        case Py_tp_richcompare:
  ------------------
  |  |   75|    621|#define Py_tp_richcompare 67
  ------------------
  |  Branch (920:9): [True: 7, False: 1.33k]
  ------------------
  921|    621|        case Py_tp_setattr:
  ------------------
  |  |   76|    621|#define Py_tp_setattr 68
  ------------------
  |  Branch (921:9): [True: 0, False: 1.34k]
  ------------------
  922|    625|        case Py_tp_setattro:
  ------------------
  |  |   77|    625|#define Py_tp_setattro 69
  ------------------
  |  Branch (922:9): [True: 4, False: 1.34k]
  ------------------
  923|    626|        case Py_tp_str:
  ------------------
  |  |   78|    626|#define Py_tp_str 70
  ------------------
  |  Branch (923:9): [True: 1, False: 1.34k]
  ------------------
  924|    743|        case Py_tp_traverse:
  ------------------
  |  |   79|    743|#define Py_tp_traverse 71
  ------------------
  |  Branch (924:9): [True: 117, False: 1.22k]
  ------------------
  925|    791|        case Py_tp_getset:
  ------------------
  |  |   81|    791|#define Py_tp_getset 73
  ------------------
  |  Branch (925:9): [True: 48, False: 1.29k]
  ------------------
  926|    831|        case Py_tp_free:
  ------------------
  |  |   82|    831|#define Py_tp_free 74
  ------------------
  |  Branch (926:9): [True: 40, False: 1.30k]
  ------------------
  927|    831|        case Py_nb_matrix_multiply:
  ------------------
  |  |   83|    831|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (927:9): [True: 0, False: 1.34k]
  ------------------
  928|    831|        case Py_nb_inplace_matrix_multiply:
  ------------------
  |  |   84|    831|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (928:9): [True: 0, False: 1.34k]
  ------------------
  929|    831|        case Py_am_await:
  ------------------
  |  |   85|    831|#define Py_am_await 77
  ------------------
  |  Branch (929:9): [True: 0, False: 1.34k]
  ------------------
  930|    831|        case Py_am_aiter:
  ------------------
  |  |   86|    831|#define Py_am_aiter 78
  ------------------
  |  Branch (930:9): [True: 0, False: 1.34k]
  ------------------
  931|    831|        case Py_am_anext:
  ------------------
  |  |   87|    831|#define Py_am_anext 79
  ------------------
  |  Branch (931:9): [True: 0, False: 1.34k]
  ------------------
  932|    835|        case Py_tp_finalize:
  ------------------
  |  |   88|    835|#define Py_tp_finalize 80
  ------------------
  |  Branch (932:9): [True: 4, False: 1.34k]
  ------------------
  933|    835|        case Py_am_send:
  ------------------
  |  |   89|    835|#define Py_am_send 81
  ------------------
  |  Branch (933:9): [True: 0, False: 1.34k]
  ------------------
  934|    835|        case Py_tp_vectorcall:
  ------------------
  |  |   90|    835|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (934:9): [True: 0, False: 1.34k]
  ------------------
  935|    835|        case Py_mod_create:
  ------------------
  |  |   92|    835|#define Py_mod_create _Py_SLOT_COMPAT_VALUE(1, 84)
  |  |  ------------------
  |  |  |  |    7|    835|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (935:9): [True: 0, False: 1.34k]
  ------------------
  936|    837|        case Py_bf_getbuffer:
  ------------------
  |  |   96|    837|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|    837|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (936:9): [True: 2, False: 1.34k]
  ------------------
  937|    839|        case Py_bf_releasebuffer:
  ------------------
  |  |   97|    839|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|    839|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (937:9): [True: 2, False: 1.34k]
  ------------------
  938|    839|        case Py_mp_ass_subscript:
  ------------------
  |  |   98|    839|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|    839|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (938:9): [True: 0, False: 1.34k]
  ------------------
  939|    839|        case Py_mp_length:
  ------------------
  |  |   99|    839|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|    839|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (939:9): [True: 0, False: 1.34k]
  ------------------
  940|    839|            return _PySlot_PROBLEM_DEPRECATED;
  941|    235|        default:
  ------------------
  |  Branch (941:9): [True: 235, False: 1.11k]
  ------------------
  942|    235|            return _PySlot_PROBLEM_REJECT;
  943|  1.34k|    }
  944|  1.34k|}
slots.c:_PySlot_get_duplicate_handling:
  749|  1.34k|{
  750|  1.34k|    switch (slot_id) {
  751|      1|        case Py_mp_subscript:
  ------------------
  |  |   13|      1|#define Py_mp_subscript 5
  ------------------
  |  Branch (751:9): [True: 1, False: 1.34k]
  ------------------
  752|      1|        case Py_nb_absolute:
  ------------------
  |  |   14|      1|#define Py_nb_absolute 6
  ------------------
  |  Branch (752:9): [True: 0, False: 1.34k]
  ------------------
  753|      1|        case Py_nb_add:
  ------------------
  |  |   15|      1|#define Py_nb_add 7
  ------------------
  |  Branch (753:9): [True: 0, False: 1.34k]
  ------------------
  754|      1|        case Py_nb_and:
  ------------------
  |  |   16|      1|#define Py_nb_and 8
  ------------------
  |  Branch (754:9): [True: 0, False: 1.34k]
  ------------------
  755|      1|        case Py_nb_bool:
  ------------------
  |  |   17|      1|#define Py_nb_bool 9
  ------------------
  |  Branch (755:9): [True: 0, False: 1.34k]
  ------------------
  756|      1|        case Py_nb_divmod:
  ------------------
  |  |   18|      1|#define Py_nb_divmod 10
  ------------------
  |  Branch (756:9): [True: 0, False: 1.34k]
  ------------------
  757|      1|        case Py_nb_float:
  ------------------
  |  |   19|      1|#define Py_nb_float 11
  ------------------
  |  Branch (757:9): [True: 0, False: 1.34k]
  ------------------
  758|      1|        case Py_nb_floor_divide:
  ------------------
  |  |   20|      1|#define Py_nb_floor_divide 12
  ------------------
  |  Branch (758:9): [True: 0, False: 1.34k]
  ------------------
  759|      1|        case Py_nb_index:
  ------------------
  |  |   21|      1|#define Py_nb_index 13
  ------------------
  |  Branch (759:9): [True: 0, False: 1.34k]
  ------------------
  760|      1|        case Py_nb_inplace_add:
  ------------------
  |  |   22|      1|#define Py_nb_inplace_add 14
  ------------------
  |  Branch (760:9): [True: 0, False: 1.34k]
  ------------------
  761|      1|        case Py_nb_inplace_and:
  ------------------
  |  |   23|      1|#define Py_nb_inplace_and 15
  ------------------
  |  Branch (761:9): [True: 0, False: 1.34k]
  ------------------
  762|      1|        case Py_nb_inplace_floor_divide:
  ------------------
  |  |   24|      1|#define Py_nb_inplace_floor_divide 16
  ------------------
  |  Branch (762:9): [True: 0, False: 1.34k]
  ------------------
  763|      1|        case Py_nb_inplace_lshift:
  ------------------
  |  |   25|      1|#define Py_nb_inplace_lshift 17
  ------------------
  |  Branch (763:9): [True: 0, False: 1.34k]
  ------------------
  764|      1|        case Py_nb_inplace_multiply:
  ------------------
  |  |   26|      1|#define Py_nb_inplace_multiply 18
  ------------------
  |  Branch (764:9): [True: 0, False: 1.34k]
  ------------------
  765|      1|        case Py_nb_inplace_or:
  ------------------
  |  |   27|      1|#define Py_nb_inplace_or 19
  ------------------
  |  Branch (765:9): [True: 0, False: 1.34k]
  ------------------
  766|      1|        case Py_nb_inplace_power:
  ------------------
  |  |   28|      1|#define Py_nb_inplace_power 20
  ------------------
  |  Branch (766:9): [True: 0, False: 1.34k]
  ------------------
  767|      1|        case Py_nb_inplace_remainder:
  ------------------
  |  |   29|      1|#define Py_nb_inplace_remainder 21
  ------------------
  |  Branch (767:9): [True: 0, False: 1.34k]
  ------------------
  768|      1|        case Py_nb_inplace_rshift:
  ------------------
  |  |   30|      1|#define Py_nb_inplace_rshift 22
  ------------------
  |  Branch (768:9): [True: 0, False: 1.34k]
  ------------------
  769|      1|        case Py_nb_inplace_subtract:
  ------------------
  |  |   31|      1|#define Py_nb_inplace_subtract 23
  ------------------
  |  Branch (769:9): [True: 0, False: 1.34k]
  ------------------
  770|      1|        case Py_nb_inplace_true_divide:
  ------------------
  |  |   32|      1|#define Py_nb_inplace_true_divide 24
  ------------------
  |  Branch (770:9): [True: 0, False: 1.34k]
  ------------------
  771|      1|        case Py_nb_inplace_xor:
  ------------------
  |  |   33|      1|#define Py_nb_inplace_xor 25
  ------------------
  |  Branch (771:9): [True: 0, False: 1.34k]
  ------------------
  772|      1|        case Py_nb_int:
  ------------------
  |  |   34|      1|#define Py_nb_int 26
  ------------------
  |  Branch (772:9): [True: 0, False: 1.34k]
  ------------------
  773|      1|        case Py_nb_invert:
  ------------------
  |  |   35|      1|#define Py_nb_invert 27
  ------------------
  |  Branch (773:9): [True: 0, False: 1.34k]
  ------------------
  774|      1|        case Py_nb_lshift:
  ------------------
  |  |   36|      1|#define Py_nb_lshift 28
  ------------------
  |  Branch (774:9): [True: 0, False: 1.34k]
  ------------------
  775|      1|        case Py_nb_multiply:
  ------------------
  |  |   37|      1|#define Py_nb_multiply 29
  ------------------
  |  Branch (775:9): [True: 0, False: 1.34k]
  ------------------
  776|      1|        case Py_nb_negative:
  ------------------
  |  |   38|      1|#define Py_nb_negative 30
  ------------------
  |  Branch (776:9): [True: 0, False: 1.34k]
  ------------------
  777|      6|        case Py_nb_or:
  ------------------
  |  |   39|      6|#define Py_nb_or 31
  ------------------
  |  Branch (777:9): [True: 5, False: 1.34k]
  ------------------
  778|      6|        case Py_nb_positive:
  ------------------
  |  |   40|      6|#define Py_nb_positive 32
  ------------------
  |  Branch (778:9): [True: 0, False: 1.34k]
  ------------------
  779|      6|        case Py_nb_power:
  ------------------
  |  |   41|      6|#define Py_nb_power 33
  ------------------
  |  Branch (779:9): [True: 0, False: 1.34k]
  ------------------
  780|      6|        case Py_nb_remainder:
  ------------------
  |  |   42|      6|#define Py_nb_remainder 34
  ------------------
  |  Branch (780:9): [True: 0, False: 1.34k]
  ------------------
  781|      6|        case Py_nb_rshift:
  ------------------
  |  |   43|      6|#define Py_nb_rshift 35
  ------------------
  |  Branch (781:9): [True: 0, False: 1.34k]
  ------------------
  782|      6|        case Py_nb_subtract:
  ------------------
  |  |   44|      6|#define Py_nb_subtract 36
  ------------------
  |  Branch (782:9): [True: 0, False: 1.34k]
  ------------------
  783|      6|        case Py_nb_true_divide:
  ------------------
  |  |   45|      6|#define Py_nb_true_divide 37
  ------------------
  |  Branch (783:9): [True: 0, False: 1.34k]
  ------------------
  784|      6|        case Py_nb_xor:
  ------------------
  |  |   46|      6|#define Py_nb_xor 38
  ------------------
  |  Branch (784:9): [True: 0, False: 1.34k]
  ------------------
  785|      7|        case Py_sq_ass_item:
  ------------------
  |  |   47|      7|#define Py_sq_ass_item 39
  ------------------
  |  Branch (785:9): [True: 1, False: 1.34k]
  ------------------
  786|      8|        case Py_sq_concat:
  ------------------
  |  |   48|      8|#define Py_sq_concat 40
  ------------------
  |  Branch (786:9): [True: 1, False: 1.34k]
  ------------------
  787|      9|        case Py_sq_contains:
  ------------------
  |  |   49|      9|#define Py_sq_contains 41
  ------------------
  |  Branch (787:9): [True: 1, False: 1.34k]
  ------------------
  788|     10|        case Py_sq_inplace_concat:
  ------------------
  |  |   50|     10|#define Py_sq_inplace_concat 42
  ------------------
  |  Branch (788:9): [True: 1, False: 1.34k]
  ------------------
  789|     11|        case Py_sq_inplace_repeat:
  ------------------
  |  |   51|     11|#define Py_sq_inplace_repeat 43
  ------------------
  |  Branch (789:9): [True: 1, False: 1.34k]
  ------------------
  790|     12|        case Py_sq_item:
  ------------------
  |  |   52|     12|#define Py_sq_item 44
  ------------------
  |  Branch (790:9): [True: 1, False: 1.34k]
  ------------------
  791|     13|        case Py_sq_length:
  ------------------
  |  |   53|     13|#define Py_sq_length 45
  ------------------
  |  Branch (791:9): [True: 1, False: 1.34k]
  ------------------
  792|     14|        case Py_sq_repeat:
  ------------------
  |  |   54|     14|#define Py_sq_repeat 46
  ------------------
  |  Branch (792:9): [True: 1, False: 1.34k]
  ------------------
  793|     35|        case Py_tp_alloc:
  ------------------
  |  |   55|     35|#define Py_tp_alloc 47
  ------------------
  |  Branch (793:9): [True: 21, False: 1.32k]
  ------------------
  794|     35|        case Py_tp_base:
  ------------------
  |  |   56|     35|#define Py_tp_base 48
  ------------------
  |  Branch (794:9): [True: 0, False: 1.34k]
  ------------------
  795|     35|        case Py_tp_bases:
  ------------------
  |  |   57|     35|#define Py_tp_bases 49
  ------------------
  |  Branch (795:9): [True: 0, False: 1.34k]
  ------------------
  796|     43|        case Py_tp_call:
  ------------------
  |  |   58|     43|#define Py_tp_call 50
  ------------------
  |  Branch (796:9): [True: 8, False: 1.33k]
  ------------------
  797|     98|        case Py_tp_clear:
  ------------------
  |  |   59|     98|#define Py_tp_clear 51
  ------------------
  |  Branch (797:9): [True: 55, False: 1.29k]
  ------------------
  798|    223|        case Py_tp_dealloc:
  ------------------
  |  |   60|    223|#define Py_tp_dealloc 52
  ------------------
  |  Branch (798:9): [True: 125, False: 1.22k]
  ------------------
  799|    223|        case Py_tp_del:
  ------------------
  |  |   61|    223|#define Py_tp_del 53
  ------------------
  |  Branch (799:9): [True: 0, False: 1.34k]
  ------------------
  800|    226|        case Py_tp_descr_get:
  ------------------
  |  |   62|    226|#define Py_tp_descr_get 54
  ------------------
  |  Branch (800:9): [True: 3, False: 1.34k]
  ------------------
  801|    227|        case Py_tp_descr_set:
  ------------------
  |  |   63|    227|#define Py_tp_descr_set 55
  ------------------
  |  Branch (801:9): [True: 1, False: 1.34k]
  ------------------
  802|    227|        case Py_tp_getattr:
  ------------------
  |  |   65|    227|#define Py_tp_getattr 57
  ------------------
  |  Branch (802:9): [True: 0, False: 1.34k]
  ------------------
  803|    267|        case Py_tp_getattro:
  ------------------
  |  |   66|    267|#define Py_tp_getattro 58
  ------------------
  |  Branch (803:9): [True: 40, False: 1.30k]
  ------------------
  804|    269|        case Py_tp_hash:
  ------------------
  |  |   67|    269|#define Py_tp_hash 59
  ------------------
  |  Branch (804:9): [True: 2, False: 1.34k]
  ------------------
  805|    294|        case Py_tp_init:
  ------------------
  |  |   68|    294|#define Py_tp_init 60
  ------------------
  |  Branch (805:9): [True: 25, False: 1.32k]
  ------------------
  806|    294|        case Py_tp_is_gc:
  ------------------
  |  |   69|    294|#define Py_tp_is_gc 61
  ------------------
  |  Branch (806:9): [True: 0, False: 1.34k]
  ------------------
  807|    328|        case Py_tp_iter:
  ------------------
  |  |   70|    328|#define Py_tp_iter 62
  ------------------
  |  Branch (807:9): [True: 34, False: 1.31k]
  ------------------
  808|    367|        case Py_tp_iternext:
  ------------------
  |  |   71|    367|#define Py_tp_iternext 63
  ------------------
  |  Branch (808:9): [True: 39, False: 1.30k]
  ------------------
  809|    465|        case Py_tp_methods:
  ------------------
  |  |   72|    465|#define Py_tp_methods 64
  ------------------
  |  Branch (809:9): [True: 98, False: 1.24k]
  ------------------
  810|    549|        case Py_tp_new:
  ------------------
  |  |   73|    549|#define Py_tp_new 65
  ------------------
  |  Branch (810:9): [True: 84, False: 1.26k]
  ------------------
  811|    614|        case Py_tp_repr:
  ------------------
  |  |   74|    614|#define Py_tp_repr 66
  ------------------
  |  Branch (811:9): [True: 65, False: 1.28k]
  ------------------
  812|    621|        case Py_tp_richcompare:
  ------------------
  |  |   75|    621|#define Py_tp_richcompare 67
  ------------------
  |  Branch (812:9): [True: 7, False: 1.33k]
  ------------------
  813|    621|        case Py_tp_setattr:
  ------------------
  |  |   76|    621|#define Py_tp_setattr 68
  ------------------
  |  Branch (813:9): [True: 0, False: 1.34k]
  ------------------
  814|    625|        case Py_tp_setattro:
  ------------------
  |  |   77|    625|#define Py_tp_setattro 69
  ------------------
  |  Branch (814:9): [True: 4, False: 1.34k]
  ------------------
  815|    626|        case Py_tp_str:
  ------------------
  |  |   78|    626|#define Py_tp_str 70
  ------------------
  |  Branch (815:9): [True: 1, False: 1.34k]
  ------------------
  816|    743|        case Py_tp_traverse:
  ------------------
  |  |   79|    743|#define Py_tp_traverse 71
  ------------------
  |  Branch (816:9): [True: 117, False: 1.22k]
  ------------------
  817|    791|        case Py_tp_getset:
  ------------------
  |  |   81|    791|#define Py_tp_getset 73
  ------------------
  |  Branch (817:9): [True: 48, False: 1.29k]
  ------------------
  818|    831|        case Py_tp_free:
  ------------------
  |  |   82|    831|#define Py_tp_free 74
  ------------------
  |  Branch (818:9): [True: 40, False: 1.30k]
  ------------------
  819|    831|        case Py_nb_matrix_multiply:
  ------------------
  |  |   83|    831|#define Py_nb_matrix_multiply 75
  ------------------
  |  Branch (819:9): [True: 0, False: 1.34k]
  ------------------
  820|    831|        case Py_nb_inplace_matrix_multiply:
  ------------------
  |  |   84|    831|#define Py_nb_inplace_matrix_multiply 76
  ------------------
  |  Branch (820:9): [True: 0, False: 1.34k]
  ------------------
  821|    831|        case Py_am_await:
  ------------------
  |  |   85|    831|#define Py_am_await 77
  ------------------
  |  Branch (821:9): [True: 0, False: 1.34k]
  ------------------
  822|    831|        case Py_am_aiter:
  ------------------
  |  |   86|    831|#define Py_am_aiter 78
  ------------------
  |  Branch (822:9): [True: 0, False: 1.34k]
  ------------------
  823|    831|        case Py_am_anext:
  ------------------
  |  |   87|    831|#define Py_am_anext 79
  ------------------
  |  Branch (823:9): [True: 0, False: 1.34k]
  ------------------
  824|    835|        case Py_tp_finalize:
  ------------------
  |  |   88|    835|#define Py_tp_finalize 80
  ------------------
  |  Branch (824:9): [True: 4, False: 1.34k]
  ------------------
  825|    835|        case Py_am_send:
  ------------------
  |  |   89|    835|#define Py_am_send 81
  ------------------
  |  Branch (825:9): [True: 0, False: 1.34k]
  ------------------
  826|    835|        case Py_tp_vectorcall:
  ------------------
  |  |   90|    835|#define Py_tp_vectorcall 82
  ------------------
  |  Branch (826:9): [True: 0, False: 1.34k]
  ------------------
  827|    836|        case Py_tp_token:
  ------------------
  |  |   91|    836|#define Py_tp_token 83
  ------------------
  |  Branch (827:9): [True: 1, False: 1.34k]
  ------------------
  828|    838|        case Py_bf_getbuffer:
  ------------------
  |  |   96|    838|#define Py_bf_getbuffer _Py_SLOT_COMPAT_VALUE(1, 88)
  |  |  ------------------
  |  |  |  |    7|    838|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (828:9): [True: 2, False: 1.34k]
  ------------------
  829|    840|        case Py_bf_releasebuffer:
  ------------------
  |  |   97|    840|#define Py_bf_releasebuffer _Py_SLOT_COMPAT_VALUE(2, 89)
  |  |  ------------------
  |  |  |  |    7|    840|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (829:9): [True: 2, False: 1.34k]
  ------------------
  830|    840|        case Py_mp_ass_subscript:
  ------------------
  |  |   98|    840|#define Py_mp_ass_subscript _Py_SLOT_COMPAT_VALUE(3, 90)
  |  |  ------------------
  |  |  |  |    7|    840|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (830:9): [True: 0, False: 1.34k]
  ------------------
  831|    840|        case Py_mp_length:
  ------------------
  |  |   99|    840|#define Py_mp_length _Py_SLOT_COMPAT_VALUE(4, 91)
  |  |  ------------------
  |  |  |  |    7|    840|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (831:9): [True: 0, False: 1.34k]
  ------------------
  832|    840|            return _PySlot_PROBLEM_DEPRECATED;
  833|     82|        case Py_mod_exec:
  ------------------
  |  |   93|     82|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|     82|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (833:9): [True: 82, False: 1.26k]
  ------------------
  834|    160|        case Py_mod_abi:
  ------------------
  |  |  117|    160|#define Py_mod_abi 109
  ------------------
  |  Branch (834:9): [True: 78, False: 1.26k]
  ------------------
  835|    160|            return _PySlot_PROBLEM_ALLOW;
  836|    346|        default:
  ------------------
  |  Branch (836:9): [True: 346, False: 1.00k]
  ------------------
  837|    346|            return _PySlot_PROBLEM_REJECT;
  838|  1.34k|    }
  839|  1.34k|}

listobject.c:PyStackRef_AsPyObjectSteal:
  554|  1.12k|{
  555|  1.12k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (555:5): [True: 1.12k, False: 0]
  ------------------
  556|  1.12k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (556:5): [True: 1.12k, False: 0]
  ------------------
  557|  1.12k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (557:9): [True: 161, False: 960]
  ------------------
  558|    161|        return BITS_TO_PTR(ref);
  ------------------
  |  |  476|    161|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  559|    161|    }
  560|    960|    else {
  561|    960|        return Py_NewRef(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  550|    960|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    960|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    960|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    960|    }
  563|  1.12k|}
listobject.c:PyStackRef_IsTaggedInt:
  440|  1.12k|{
  441|  1.12k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  1.12k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  1.12k|#define Py_INT_TAG 3
  ------------------
  442|  1.12k|}
listobject.c:PyStackRef_RefcountOnObject:
  534|  1.12k|{
  535|  1.12k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|  1.12k|#define Py_TAG_REFCNT 1
  ------------------
  536|  1.12k|}
longobject.c:PyStackRef_FromPyObjectBorrow:
  627|  33.2M|{
  628|  33.2M|    assert(obj != NULL);
  ------------------
  |  Branch (628:5): [True: 33.2M, False: 0]
  ------------------
  629|  33.2M|    return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT};
  ------------------
  |  |   55|  33.2M|#define Py_TAG_REFCNT 1
  ------------------
  630|  33.2M|}
longobject.c:PyStackRef_FromPyObjectStealMortal:
  585|  1.51M|{
  586|  1.51M|    assert(obj != NULL);
  ------------------
  |  Branch (586:5): [True: 1.51M, False: 0]
  ------------------
  587|  1.51M|    assert(!_Py_IsImmortal(obj));
  ------------------
  |  Branch (587:5): [True: 1.51M, False: 0]
  ------------------
  588|  1.51M|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  589|  1.51M|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  1.51M|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  590|  1.51M|    return ref;
  591|  1.51M|}
dictobject.c:_PyStackRef_FromPyObjectNew:
  595|  36.1k|{
  596|  36.1k|    assert(obj != NULL);
  ------------------
  |  Branch (596:5): [True: 36.1k, False: 0]
  ------------------
  597|       |#ifdef Py_GIL_DISABLED
  598|       |    if (_PyObject_HasDeferredRefcount(obj)) {
  599|       |        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  600|       |    }
  601|       |#else
  602|  36.1k|    if (_Py_IsImmortal(obj)) {
  ------------------
  |  |  137|  36.1k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  36.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3.59k, False: 32.5k]
  |  |  ------------------
  ------------------
  603|  3.59k|        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  ------------------
  |  |   55|  3.59k|#define Py_TAG_REFCNT 1
  ------------------
  604|  3.59k|    }
  605|  32.5k|#endif
  606|  32.5k|    _Py_INCREF_MORTAL(obj);
  607|  32.5k|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  608|  32.5k|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  32.5k|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  609|  32.5k|    return ref;
  610|  36.1k|}
dictobject.c:PyStackRef_RefcountOnObject:
  534|  5.10k|{
  535|  5.10k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|  5.10k|#define Py_TAG_REFCNT 1
  ------------------
  536|  5.10k|}
dictobject.c:PyStackRef_AsPyObjectBorrow:
  540|  5.10k|{
  541|  5.10k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 5.10k, False: 0]
  ------------------
  542|  5.10k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  5.10k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  5.10k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|  5.10k|}
dictobject.c:PyStackRef_IsTaggedInt:
  440|  5.10k|{
  441|  5.10k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  5.10k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  5.10k|#define Py_INT_TAG 3
  ------------------
  442|  5.10k|}
dictobject.c:PyStackRef_CLOSE:
  700|  5.10k|{
  701|  5.10k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (701:5): [True: 5.10k, False: 0]
  ------------------
  702|  5.10k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (702:9): [True: 5.10k, False: 0]
  ------------------
  703|  5.10k|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  5.10k|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  704|  5.10k|    }
  705|  5.10k|}
object.c:PyStackRef_FromPyObjectSteal:
  567|  1.88M|{
  568|  1.88M|    assert(obj != NULL);
  ------------------
  |  Branch (568:5): [True: 1.88M, False: 0]
  ------------------
  569|       |#ifdef Py_GIL_DISABLED
  570|       |    return (_PyStackRef){ .bits = (uintptr_t)obj };
  571|       |#else
  572|  1.88M|#  if SIZEOF_VOID_P > 4
  573|  1.88M|    unsigned int tag = obj->ob_flags & Py_TAG_REFCNT;
  ------------------
  |  |   55|  1.88M|#define Py_TAG_REFCNT 1
  ------------------
  574|       |#  else
  575|       |    unsigned int tag = _Py_IsImmortal(obj) ? Py_TAG_REFCNT : 0;
  576|       |#  endif
  577|  1.88M|    _PyStackRef ref = ((_PyStackRef){.bits = ((uintptr_t)(obj)) | tag});
  578|  1.88M|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  1.88M|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  579|  1.88M|    return ref;
  580|  1.88M|#endif
  581|  1.88M|}
object.c:PyStackRef_AsPyObjectBorrow:
  540|  6.06M|{
  541|  6.06M|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 6.06M, False: 0]
  ------------------
  542|  6.06M|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  6.06M|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  6.06M|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|  6.06M|}
object.c:PyStackRef_XCLOSE:
  722|  5.66M|{
  723|  5.66M|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 5.66M, False: 0]
  ------------------
  724|  5.66M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 1.92M, False: 3.74M]
  ------------------
  725|  1.92M|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 1.92M, False: 0]
  ------------------
  726|  1.92M|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  1.92M|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  1.92M|    }
  728|  5.66M|}
object.c:PyStackRef_RefcountOnObject:
  534|  5.71M|{
  535|  5.71M|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|  5.71M|#define Py_TAG_REFCNT 1
  ------------------
  536|  5.71M|}
object.c:_PyThreadState_PushCStackRef:
  787|  5.66M|{
  788|       |#ifdef Py_GIL_DISABLED
  789|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  790|       |    ref->next = tstate_impl->c_stack_refs;
  791|       |    tstate_impl->c_stack_refs = ref;
  792|       |#endif
  793|  5.66M|    ref->ref = PyStackRef_NULL;
  794|  5.66M|}
object.c:PyStackRef_AsPyObjectSteal:
  554|  41.1k|{
  555|  41.1k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (555:5): [True: 41.1k, False: 0]
  ------------------
  556|  41.1k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (556:5): [True: 41.1k, False: 0]
  ------------------
  557|  41.1k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (557:9): [True: 25, False: 41.1k]
  ------------------
  558|     25|        return BITS_TO_PTR(ref);
  ------------------
  |  |  476|     25|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  559|     25|    }
  560|  41.1k|    else {
  561|  41.1k|        return Py_NewRef(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  550|  41.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|  41.1k|    }
  563|  41.1k|}
object.c:_PyThreadState_PopCStackRef:
  805|  5.66M|{
  806|       |#ifdef Py_GIL_DISABLED
  807|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  808|       |    assert(tstate_impl->c_stack_refs == ref);
  809|       |    tstate_impl->c_stack_refs = ref->next;
  810|       |#endif
  811|  5.66M|    PyStackRef_XCLOSE(ref->ref);
  812|  5.66M|}
object.c:PyStackRef_IsTaggedInt:
  440|  6.10M|{
  441|  6.10M|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  6.10M|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  6.10M|#define Py_INT_TAG 3
  ------------------
  442|  6.10M|}
sentinelobject.c:PyStackRef_AsPyObjectBorrow:
  540|      3|{
  541|      3|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 3, False: 0]
  ------------------
  542|      3|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|      3|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|      3|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|      3|}
sentinelobject.c:PyStackRef_IsTaggedInt:
  440|      3|{
  441|      3|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|      3|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|      3|#define Py_INT_TAG 3
  ------------------
  442|      3|}
tupleobject.c:PyStackRef_AsPyObjectSteal:
  554|   958k|{
  555|   958k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (555:5): [True: 958k, False: 0]
  ------------------
  556|   958k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (556:5): [True: 958k, False: 0]
  ------------------
  557|   958k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (557:9): [True: 12.9k, False: 945k]
  ------------------
  558|  12.9k|        return BITS_TO_PTR(ref);
  ------------------
  |  |  476|  12.9k|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  559|  12.9k|    }
  560|   945k|    else {
  561|   945k|        return Py_NewRef(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  550|   945k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   945k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   945k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|   945k|    }
  563|   958k|}
tupleobject.c:PyStackRef_IsTaggedInt:
  440|   958k|{
  441|   958k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|   958k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|   958k|#define Py_INT_TAG 3
  ------------------
  442|   958k|}
tupleobject.c:PyStackRef_RefcountOnObject:
  534|   958k|{
  535|   958k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|   958k|#define Py_TAG_REFCNT 1
  ------------------
  536|   958k|}
typeobject.c:PyStackRef_AsPyObjectBorrow:
  540|   234k|{
  541|   234k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 234k, False: 0]
  ------------------
  542|   234k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|   234k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|   234k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|   234k|}
typeobject.c:PyStackRef_IsTaggedInt:
  440|   288k|{
  441|   288k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|   288k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|   288k|#define Py_INT_TAG 3
  ------------------
  442|   288k|}
typeobject.c:PyStackRef_XCLOSE:
  722|   345k|{
  723|   345k|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 345k, False: 0]
  ------------------
  724|   345k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 231k, False: 114k]
  ------------------
  725|   231k|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 231k, False: 0]
  ------------------
  726|   231k|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|   231k|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   231k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|   231k|    }
  728|   345k|}
typeobject.c:PyStackRef_RefcountOnObject:
  534|   414k|{
  535|   414k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|   414k|#define Py_TAG_REFCNT 1
  ------------------
  536|   414k|}
typeobject.c:PyStackRef_FromPyObjectSteal:
  567|   100k|{
  568|   100k|    assert(obj != NULL);
  ------------------
  |  Branch (568:5): [True: 100k, False: 0]
  ------------------
  569|       |#ifdef Py_GIL_DISABLED
  570|       |    return (_PyStackRef){ .bits = (uintptr_t)obj };
  571|       |#else
  572|   100k|#  if SIZEOF_VOID_P > 4
  573|   100k|    unsigned int tag = obj->ob_flags & Py_TAG_REFCNT;
  ------------------
  |  |   55|   100k|#define Py_TAG_REFCNT 1
  ------------------
  574|       |#  else
  575|       |    unsigned int tag = _Py_IsImmortal(obj) ? Py_TAG_REFCNT : 0;
  576|       |#  endif
  577|   100k|    _PyStackRef ref = ((_PyStackRef){.bits = ((uintptr_t)(obj)) | tag});
  578|   100k|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|   100k|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  579|   100k|    return ref;
  580|   100k|#endif
  581|   100k|}
typeobject.c:PyStackRef_CLOSE:
  700|  14.6k|{
  701|  14.6k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (701:5): [True: 14.6k, False: 0]
  ------------------
  702|  14.6k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (702:9): [True: 14.6k, False: 32]
  ------------------
  703|  14.6k|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  14.6k|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  704|  14.6k|    }
  705|  14.6k|}
typeobject.c:PyStackRef_AsPyObjectSteal:
  554|  53.4k|{
  555|  53.4k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (555:5): [True: 53.4k, False: 0]
  ------------------
  556|  53.4k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (556:5): [True: 53.4k, False: 0]
  ------------------
  557|  53.4k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (557:9): [True: 53.4k, False: 56]
  ------------------
  558|  53.4k|        return BITS_TO_PTR(ref);
  ------------------
  |  |  476|  53.4k|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  559|  53.4k|    }
  560|     56|    else {
  561|     56|        return Py_NewRef(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  550|     56|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     56|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     56|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|     56|    }
  563|  53.4k|}
typeobject.c:_PyThreadState_PushCStackRef:
  787|   443k|{
  788|       |#ifdef Py_GIL_DISABLED
  789|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  790|       |    ref->next = tstate_impl->c_stack_refs;
  791|       |    tstate_impl->c_stack_refs = ref;
  792|       |#endif
  793|   443k|    ref->ref = PyStackRef_NULL;
  794|   443k|}
typeobject.c:_PyStackRef_FromPyObjectNew:
  595|  85.9k|{
  596|  85.9k|    assert(obj != NULL);
  ------------------
  |  Branch (596:5): [True: 85.9k, False: 0]
  ------------------
  597|       |#ifdef Py_GIL_DISABLED
  598|       |    if (_PyObject_HasDeferredRefcount(obj)) {
  599|       |        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  600|       |    }
  601|       |#else
  602|  85.9k|    if (_Py_IsImmortal(obj)) {
  ------------------
  |  |  137|  85.9k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  85.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  85.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 8.07k, False: 77.9k]
  |  |  ------------------
  ------------------
  603|  8.07k|        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  ------------------
  |  |   55|  8.07k|#define Py_TAG_REFCNT 1
  ------------------
  604|  8.07k|    }
  605|  77.9k|#endif
  606|  77.9k|    _Py_INCREF_MORTAL(obj);
  607|  77.9k|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  608|  77.9k|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  77.9k|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  609|  77.9k|    return ref;
  610|  85.9k|}
typeobject.c:_PyThreadState_PopCStackRef:
  805|   341k|{
  806|       |#ifdef Py_GIL_DISABLED
  807|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  808|       |    assert(tstate_impl->c_stack_refs == ref);
  809|       |    tstate_impl->c_stack_refs = ref->next;
  810|       |#endif
  811|   341k|    PyStackRef_XCLOSE(ref->ref);
  812|   341k|}
typeobject.c:_PyThreadState_PopCStackRefSteal:
  816|   102k|{
  817|       |#ifdef Py_GIL_DISABLED
  818|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  819|       |    assert(tstate_impl->c_stack_refs == ref);
  820|       |    tstate_impl->c_stack_refs = ref->next;
  821|       |#endif
  822|   102k|    return ref->ref;
  823|   102k|}
typeobject.c:_PyThreadState_PushCStackRefNew:
  798|  1.90k|{
  799|  1.90k|    _PyThreadState_PushCStackRef(tstate, ref);
  800|  1.90k|    ref->ref = PyStackRef_FromPyObjectNew(obj);
  ------------------
  |  |  611|  1.90k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.90k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.90k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  801|  1.90k|}
ceval.c:_PyThreadState_PushCStackRef:
  787|   101k|{
  788|       |#ifdef Py_GIL_DISABLED
  789|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  790|       |    ref->next = tstate_impl->c_stack_refs;
  791|       |    tstate_impl->c_stack_refs = ref;
  792|       |#endif
  793|   101k|    ref->ref = PyStackRef_NULL;
  794|   101k|}
ceval.c:PyStackRef_FromPyObjectBorrow:
  627|  43.5M|{
  628|  43.5M|    assert(obj != NULL);
  ------------------
  |  Branch (628:5): [True: 43.5M, False: 0]
  ------------------
  629|  43.5M|    return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT};
  ------------------
  |  |   55|  43.5M|#define Py_TAG_REFCNT 1
  ------------------
  630|  43.5M|}
ceval.c:PyStackRef_AsPyObjectBorrow:
  540|   850M|{
  541|   850M|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 850M, False: 0]
  ------------------
  542|   850M|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|   850M|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|   850M|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|   850M|}
ceval.c:PyStackRef_XCLOSE:
  722|   153M|{
  723|   153M|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 153M, False: 0]
  ------------------
  724|   153M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 56.2M, False: 97.2M]
  ------------------
  725|  56.2M|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 56.2M, False: 0]
  ------------------
  726|  56.2M|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  56.2M|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.2M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.2M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  56.2M|    }
  728|   153M|}
ceval.c:PyStackRef_RefcountOnObject:
  534|   359M|{
  535|   359M|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|   359M|#define Py_TAG_REFCNT 1
  ------------------
  536|   359M|}
ceval.c:PyStackRef_CLOSE:
  700|  36.0M|{
  701|  36.0M|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (701:5): [True: 36.0M, False: 0]
  ------------------
  702|  36.0M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (702:9): [True: 6.16M, False: 29.8M]
  ------------------
  703|  6.16M|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  6.16M|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.16M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.16M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  704|  6.16M|    }
  705|  36.0M|}
ceval.c:_PyThreadState_PopCStackRefSteal:
  816|   101k|{
  817|       |#ifdef Py_GIL_DISABLED
  818|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  819|       |    assert(tstate_impl->c_stack_refs == ref);
  820|       |    tstate_impl->c_stack_refs = ref->next;
  821|       |#endif
  822|   101k|    return ref->ref;
  823|   101k|}
ceval.c:PyStackRef_TYPE:
  748|  6.35k|PyStackRef_TYPE(_PyStackRef stackref) {
  749|  6.35k|    if (PyStackRef_IsTaggedInt(stackref)) {
  ------------------
  |  Branch (749:9): [True: 0, False: 6.35k]
  ------------------
  750|      0|        return &PyLong_Type;
  751|      0|    }
  752|  6.35k|    return Py_TYPE(PyStackRef_AsPyObjectBorrow(stackref));
  ------------------
  |  |  213|  6.35k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  753|  6.35k|}
ceval.c:PyStackRef_TagInt:
  446|  13.7M|{
  447|  13.7M|    assert(Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, (intptr_t)(((uintptr_t)i) << Py_TAGGED_SHIFT),
  ------------------
  |  Branch (447:5): [True: 13.7M, False: 0]
  ------------------
  448|  13.7M|                                     Py_TAGGED_SHIFT) == i);
  449|  13.7M|    return (_PyStackRef){ .bits = ((((uintptr_t)i) << Py_TAGGED_SHIFT) | Py_INT_TAG) };
  ------------------
  |  |   58|  13.7M|#define Py_TAGGED_SHIFT 2
  ------------------
                  return (_PyStackRef){ .bits = ((((uintptr_t)i) << Py_TAGGED_SHIFT) | Py_INT_TAG) };
  ------------------
  |  |   53|  13.7M|#define Py_INT_TAG 3
  ------------------
  450|  13.7M|}
ceval.c:PyStackRef_FromPyObjectSteal:
  567|  49.4M|{
  568|  49.4M|    assert(obj != NULL);
  ------------------
  |  Branch (568:5): [True: 49.4M, False: 0]
  ------------------
  569|       |#ifdef Py_GIL_DISABLED
  570|       |    return (_PyStackRef){ .bits = (uintptr_t)obj };
  571|       |#else
  572|  49.4M|#  if SIZEOF_VOID_P > 4
  573|  49.4M|    unsigned int tag = obj->ob_flags & Py_TAG_REFCNT;
  ------------------
  |  |   55|  49.4M|#define Py_TAG_REFCNT 1
  ------------------
  574|       |#  else
  575|       |    unsigned int tag = _Py_IsImmortal(obj) ? Py_TAG_REFCNT : 0;
  576|       |#  endif
  577|  49.4M|    _PyStackRef ref = ((_PyStackRef){.bits = ((uintptr_t)(obj)) | tag});
  578|  49.4M|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  49.4M|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  579|  49.4M|    return ref;
  580|  49.4M|#endif
  581|  49.4M|}
ceval.c:PyStackRef_CLOSE_SPECIALIZED:
  710|   162M|{
  711|   162M|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (711:5): [True: 162M, False: 0]
  ------------------
  712|   162M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (712:9): [True: 10.3M, False: 152M]
  ------------------
  713|  10.3M|        Py_DECREF_MORTAL_SPECIALIZED(BITS_TO_PTR(ref), destruct);
  ------------------
  |  |  463|  10.3M|#define Py_DECREF_MORTAL_SPECIALIZED(op, destruct) Py_DECREF_MORTAL_SPECIALIZED(_PyObject_CAST(op), destruct)
  |  |  ------------------
  |  |  |  |  171|  10.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|  10.3M|    }
  715|   162M|}
ceval.c:PyStackRef_IsHeapSafe:
  659|  6.71M|{
  660|       |#ifdef Py_GIL_DISABLED
  661|       |    if ((ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT) {
  662|       |        return true;
  663|       |    }
  664|       |    PyObject *obj = BITS_TO_PTR_MASKED(ref);
  665|       |    return obj == NULL || _PyObject_HasDeferredRefcount(obj);
  666|       |#else
  667|  6.71M|    return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |   56|  6.71M|#define Py_TAG_BITS 3
  ------------------
                  return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |   55|  13.4M|#define Py_TAG_REFCNT 1
  ------------------
                  return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  479|  5.21M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  ------------------
  |  |  |  |   55|  11.9M|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
                  return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  137|  11.9M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.20M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.20M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 4.68M, False: 527k]
  |  |  ------------------
  ------------------
  |  Branch (667:12): [True: 1.50M, False: 5.21M]
  |  Branch (667:57): [True: 1.12k, False: 5.20M]
  ------------------
  668|  6.71M|#endif
  669|  6.71M|}
ceval.c:PyStackRef_AsPyObjectSteal:
  554|  1.84M|{
  555|  1.84M|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (555:5): [True: 1.84M, False: 0]
  ------------------
  556|  1.84M|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (556:5): [True: 1.84M, False: 0]
  ------------------
  557|  1.84M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (557:9): [True: 669k, False: 1.17M]
  ------------------
  558|   669k|        return BITS_TO_PTR(ref);
  ------------------
  |  |  476|   669k|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  559|   669k|    }
  560|  1.17M|    else {
  561|  1.17M|        return Py_NewRef(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  550|  1.17M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.17M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.17M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|  1.17M|    }
  563|  1.84M|}
ceval.c:_PyStackRef_FromPyObjectNew:
  595|  47.5M|{
  596|  47.5M|    assert(obj != NULL);
  ------------------
  |  Branch (596:5): [True: 47.5M, False: 0]
  ------------------
  597|       |#ifdef Py_GIL_DISABLED
  598|       |    if (_PyObject_HasDeferredRefcount(obj)) {
  599|       |        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  600|       |    }
  601|       |#else
  602|  47.5M|    if (_Py_IsImmortal(obj)) {
  ------------------
  |  |  137|  47.5M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  47.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3.68M, False: 43.8M]
  |  |  ------------------
  ------------------
  603|  3.68M|        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  ------------------
  |  |   55|  3.68M|#define Py_TAG_REFCNT 1
  ------------------
  604|  3.68M|    }
  605|  43.8M|#endif
  606|  43.8M|    _Py_INCREF_MORTAL(obj);
  607|  43.8M|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  608|  43.8M|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  43.8M|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  609|  43.8M|    return ref;
  610|  47.5M|}
ceval.c:PyStackRef_Wrap:
  398|  6.51M|{
  399|  6.51M|    assert(ptr != NULL);
  ------------------
  |  Branch (399:5): [True: 6.51M, False: 0]
  ------------------
  400|       |#ifdef Py_DEBUG
  401|       |    assert(((uintptr_t)ptr & Py_TAG_BITS) == 0);
  402|       |    return (_PyStackRef){ .bits = ((uintptr_t)ptr) | Py_TAG_INVALID };
  403|       |#else
  404|  6.51M|    return (_PyStackRef){ .bits = (uintptr_t)ptr };
  405|  6.51M|#endif
  406|  6.51M|}
ceval.c:PyStackRef_Unwrap:
  410|  6.51M|{
  411|       |#ifdef Py_DEBUG
  412|       |    assert ((ref.bits & Py_TAG_BITS) == Py_TAG_INVALID);
  413|       |    return (void *)(ref.bits & ~Py_TAG_BITS);
  414|       |#else
  415|  6.51M|    return (void *)(ref.bits);
  416|  6.51M|#endif
  417|  6.51M|}
ceval.c:PyStackRef_FromPyObjectStealMortal:
  585|   839k|{
  586|   839k|    assert(obj != NULL);
  ------------------
  |  Branch (586:5): [True: 839k, False: 0]
  ------------------
  587|   839k|    assert(!_Py_IsImmortal(obj));
  ------------------
  |  Branch (587:5): [True: 839k, False: 0]
  ------------------
  588|   839k|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  589|   839k|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|   839k|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  590|   839k|    return ref;
  591|   839k|}
ceval.c:PyStackRef_DUP:
  639|  2.52M|{
  640|  2.52M|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (640:5): [True: 2.52M, False: 0]
  ------------------
  641|  2.52M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (641:9): [True: 464k, False: 2.05M]
  ------------------
  642|   464k|        _Py_INCREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  476|   464k|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  643|   464k|    }
  644|  2.52M|    return ref;
  645|  2.52M|}
ceval.c:_PyStackRef_CloseStack:
  873|  2.00M|{
  874|       |    // arguments is a pointer into the GC visible stack,
  875|       |    // so we must NULL out values as we clear them.
  876|  4.53M|    for (int i = total_args-1; i >= 0; i--) {
  ------------------
  |  Branch (876:32): [True: 2.53M, False: 2.00M]
  ------------------
  877|  2.53M|        _PyStackRef tmp = arguments[i];
  878|  2.53M|        arguments[i] = PyStackRef_NULL;
  879|  2.53M|        PyStackRef_CLOSE(tmp);
  880|  2.53M|    }
  881|  2.00M|}
ceval.c:PyStackRef_IsValid:
  433|   660k|{
  434|       |    /* Invalid values are ERROR and NULL */
  435|   660k|    return ref.bits >= Py_INT_TAG;
  ------------------
  |  |   53|   660k|#define Py_INT_TAG 3
  ------------------
  436|   660k|}
ceval.c:PyStackRef_IsError:
  421|  37.4k|{
  422|  37.4k|    return ref.bits == Py_TAG_INVALID;
  ------------------
  |  |   54|  37.4k|#define Py_TAG_INVALID 2
  ------------------
  423|  37.4k|}
ceval.c:PyStackRef_IsTaggedInt:
  440|   930M|{
  441|   930M|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|   930M|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|   930M|#define Py_INT_TAG 3
  ------------------
  442|   930M|}
ceval.c:PyStackRef_UntagInt:
  454|  14.1M|{
  455|  14.1M|    assert(PyStackRef_IsTaggedInt(i));
  ------------------
  |  Branch (455:5): [True: 14.1M, False: 0]
  ------------------
  456|  14.1M|    intptr_t val = (intptr_t)i.bits;
  457|  14.1M|    return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, val, Py_TAGGED_SHIFT);
  ------------------
  |  |  226|  14.1M|#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J))
  ------------------
  458|  14.1M|}
ceval.c:PyStackRef_IncrementTaggedIntNoOverflow:
  463|   201k|{
  464|   201k|    assert((ref.bits & Py_TAG_BITS) == Py_INT_TAG); // Is tagged int
  ------------------
  |  Branch (464:5): [True: 201k, False: 0]
  ------------------
  465|   201k|    assert((ref.bits & (~Py_TAG_BITS)) != (INTPTR_MAX & (~Py_TAG_BITS))); // Isn't about to overflow
  ------------------
  |  Branch (465:5): [True: 201k, False: 0]
  ------------------
  466|   201k|    return (_PyStackRef){ .bits = ref.bits + (1 << Py_TAGGED_SHIFT) };
  ------------------
  |  |   58|   201k|#define Py_TAGGED_SHIFT 2
  ------------------
  467|   201k|}
ceval.c:PyStackRef_MakeHeapSafe:
  673|  6.71M|{
  674|  6.71M|    if (PyStackRef_IsHeapSafe(ref)) {
  ------------------
  |  Branch (674:9): [True: 6.18M, False: 527k]
  ------------------
  675|  6.18M|        return ref;
  676|  6.18M|    }
  677|   527k|    PyObject *obj = BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|   527k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|   527k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  678|   527k|    Py_INCREF(obj);
  ------------------
  |  |  310|   527k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   527k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   527k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  679|   527k|    ref.bits = (uintptr_t)obj;
  680|   527k|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|   527k|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  681|   527k|    return ref;
  682|  6.71M|}
ceval.c:PyStackRef_DupImmortal:
  650|  2.27M|{
  651|  2.27M|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (651:5): [True: 2.27M, False: 0]
  ------------------
  652|  2.27M|    assert(!PyStackRef_RefcountOnObject(ref));
  ------------------
  |  Branch (652:5): [True: 2.27M, False: 0]
  ------------------
  653|  2.27M|    assert(_Py_IsImmortal(BITS_TO_PTR_MASKED(ref)));
  ------------------
  |  Branch (653:5): [True: 2.27M, False: 0]
  ------------------
  654|  2.27M|    return ref;
  655|  2.27M|}
ceval.c:PyStackRef_Borrow:
  547|   189M|{
  548|   189M|    return (_PyStackRef){ .bits = ref.bits | Py_TAG_REFCNT };
  ------------------
  |  |   55|   189M|#define Py_TAG_REFCNT 1
  ------------------
  549|   189M|}
flowgraph.c:PyStackRef_AsPyObjectBorrow:
  540|  46.3k|{
  541|  46.3k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 46.3k, False: 0]
  ------------------
  542|  46.3k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  46.3k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  46.3k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|  46.3k|}
flowgraph.c:PyStackRef_IsTaggedInt:
  440|  46.3k|{
  441|  46.3k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  46.3k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  46.3k|#define Py_INT_TAG 3
  ------------------
  442|  46.3k|}
frame.c:PyStackRef_IsTaggedInt:
  440|  51.8k|{
  441|  51.8k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  51.8k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  51.8k|#define Py_INT_TAG 3
  ------------------
  442|  51.8k|}
frame.c:PyStackRef_XCLOSE:
  722|  27.1M|{
  723|  27.1M|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 27.1M, False: 0]
  ------------------
  724|  27.1M|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 10.0M, False: 17.1M]
  ------------------
  725|  10.0M|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 10.0M, False: 0]
  ------------------
  726|  10.0M|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  10.0M|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  10.0M|    }
  728|  27.1M|}
frame.c:PyStackRef_RefcountOnObject:
  534|  27.1M|{
  535|  27.1M|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|  27.1M|#define Py_TAG_REFCNT 1
  ------------------
  536|  27.1M|}
frame.c:PyStackRef_MakeHeapSafe:
  673|  38.7k|{
  674|  38.7k|    if (PyStackRef_IsHeapSafe(ref)) {
  ------------------
  |  Branch (674:9): [True: 36.7k, False: 1.94k]
  ------------------
  675|  36.7k|        return ref;
  676|  36.7k|    }
  677|  1.94k|    PyObject *obj = BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  1.94k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  1.94k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  678|  1.94k|    Py_INCREF(obj);
  ------------------
  |  |  310|  1.94k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  679|  1.94k|    ref.bits = (uintptr_t)obj;
  680|  1.94k|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  1.94k|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  681|  1.94k|    return ref;
  682|  38.7k|}
frame.c:PyStackRef_IsHeapSafe:
  659|  38.7k|{
  660|       |#ifdef Py_GIL_DISABLED
  661|       |    if ((ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT) {
  662|       |        return true;
  663|       |    }
  664|       |    PyObject *obj = BITS_TO_PTR_MASKED(ref);
  665|       |    return obj == NULL || _PyObject_HasDeferredRefcount(obj);
  666|       |#else
  667|  38.7k|    return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |   56|  38.7k|#define Py_TAG_BITS 3
  ------------------
                  return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |   55|  77.4k|#define Py_TAG_REFCNT 1
  ------------------
                  return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  479|  18.0k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  ------------------
  |  |  |  |   55|  56.7k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
                  return (ref.bits & Py_TAG_BITS) != Py_TAG_REFCNT || ref.bits == PyStackRef_NULL_BITS || _Py_IsImmortal(BITS_TO_PTR_MASKED(ref));
  ------------------
  |  |  137|  50.6k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 10.0k, False: 1.94k]
  |  |  ------------------
  ------------------
  |  Branch (667:12): [True: 20.6k, False: 18.0k]
  |  Branch (667:57): [True: 6.06k, False: 11.9k]
  ------------------
  668|  38.7k|#endif
  669|  38.7k|}
frame.c:PyStackRef_DUP:
  639|  4.21k|{
  640|  4.21k|    assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (640:5): [True: 4.21k, False: 0]
  ------------------
  641|  4.21k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (641:9): [True: 4.21k, False: 0]
  ------------------
  642|  4.21k|        _Py_INCREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  476|  4.21k|#define BITS_TO_PTR(REF) ((PyObject *)((REF).bits))
  ------------------
  643|  4.21k|    }
  644|  4.21k|    return ref;
  645|  4.21k|}
frame.c:PyStackRef_AsPyObjectBorrow:
  540|  51.7k|{
  541|  51.7k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 51.7k, False: 0]
  ------------------
  542|  51.7k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  51.7k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  51.7k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|  51.7k|}
gc.c:PyStackRef_IsTaggedInt:
  440|    388|{
  441|    388|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|    388|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|    388|#define Py_INT_TAG 3
  ------------------
  442|    388|}
gc.c:PyStackRef_RefcountOnObject:
  534|     92|{
  535|     92|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|     92|#define Py_TAG_REFCNT 1
  ------------------
  536|     92|}
gc.c:PyStackRef_AsPyObjectBorrow:
  540|    140|{
  541|    140|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 140, False: 0]
  ------------------
  542|    140|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|    140|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|    140|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|    140|}
pylifecycle.c:PyStackRef_FromPyObjectBorrow:
  627|     28|{
  628|     28|    assert(obj != NULL);
  ------------------
  |  Branch (628:5): [True: 28, False: 0]
  ------------------
  629|     28|    return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT};
  ------------------
  |  |   55|     28|#define Py_TAG_REFCNT 1
  ------------------
  630|     28|}
specialize.c:PyStackRef_AsPyObjectBorrow:
  540|   363k|{
  541|   363k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 363k, False: 0]
  ------------------
  542|   363k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|   363k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|   363k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|   363k|}
specialize.c:PyStackRef_IsTaggedInt:
  440|   363k|{
  441|   363k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|   363k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|   363k|#define Py_INT_TAG 3
  ------------------
  442|   363k|}
specialize.c:PyStackRef_TYPE:
  748|    132|PyStackRef_TYPE(_PyStackRef stackref) {
  749|    132|    if (PyStackRef_IsTaggedInt(stackref)) {
  ------------------
  |  Branch (749:9): [True: 0, False: 132]
  ------------------
  750|      0|        return &PyLong_Type;
  751|      0|    }
  752|    132|    return Py_TYPE(PyStackRef_AsPyObjectBorrow(stackref));
  ------------------
  |  |  213|    132|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  753|    132|}
sysmodule.c:PyStackRef_AsPyObjectBorrow:
  540|     14|{
  541|     14|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 14, False: 0]
  ------------------
  542|     14|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|     14|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|     14|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|     14|}
sysmodule.c:PyStackRef_IsTaggedInt:
  440|     14|{
  441|     14|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|     14|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|     14|#define Py_INT_TAG 3
  ------------------
  442|     14|}
traceback.c:PyStackRef_AsPyObjectBorrow:
  540|  42.9k|{
  541|  42.9k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 42.9k, False: 0]
  ------------------
  542|  42.9k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  42.9k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  42.9k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|  42.9k|}
traceback.c:PyStackRef_IsTaggedInt:
  440|  42.9k|{
  441|  42.9k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  42.9k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  42.9k|#define Py_INT_TAG 3
  ------------------
  442|  42.9k|}
typecache.c:_PyStackRef_FromPyObjectNew:
  595|  3.30M|{
  596|  3.30M|    assert(obj != NULL);
  ------------------
  |  Branch (596:5): [True: 3.30M, False: 0]
  ------------------
  597|       |#ifdef Py_GIL_DISABLED
  598|       |    if (_PyObject_HasDeferredRefcount(obj)) {
  599|       |        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  600|       |    }
  601|       |#else
  602|  3.30M|    if (_Py_IsImmortal(obj)) {
  ------------------
  |  |  137|  3.30M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.30M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.30M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 978k, False: 2.32M]
  |  |  ------------------
  ------------------
  603|   978k|        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  ------------------
  |  |   55|   978k|#define Py_TAG_REFCNT 1
  ------------------
  604|   978k|    }
  605|  2.32M|#endif
  606|  2.32M|    _Py_INCREF_MORTAL(obj);
  607|  2.32M|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  608|  2.32M|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|  2.32M|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  609|  2.32M|    return ref;
  610|  3.30M|}
abstract.c:_PyThreadState_PushCStackRef:
  787|    112|{
  788|       |#ifdef Py_GIL_DISABLED
  789|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  790|       |    ref->next = tstate_impl->c_stack_refs;
  791|       |    tstate_impl->c_stack_refs = ref;
  792|       |#endif
  793|    112|    ref->ref = PyStackRef_NULL;
  794|    112|}
abstract.c:PyStackRef_FromPyObjectBorrow:
  627|    112|{
  628|    112|    assert(obj != NULL);
  ------------------
  |  Branch (628:5): [True: 112, False: 0]
  ------------------
  629|    112|    return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT};
  ------------------
  |  |   55|    112|#define Py_TAG_REFCNT 1
  ------------------
  630|    112|}
abstract.c:PyStackRef_AsPyObjectBorrow:
  540|    224|{
  541|    224|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 224, False: 0]
  ------------------
  542|    224|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|    224|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|    224|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|    224|}
abstract.c:PyStackRef_IsTaggedInt:
  440|    224|{
  441|    224|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|    224|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|    224|#define Py_INT_TAG 3
  ------------------
  442|    224|}
abstract.c:PyStackRef_XCLOSE:
  722|    224|{
  723|    224|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 224, False: 0]
  ------------------
  724|    224|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 112, False: 112]
  ------------------
  725|    112|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 112, False: 0]
  ------------------
  726|    112|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|    112|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    112|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    112|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|    112|    }
  728|    224|}
abstract.c:PyStackRef_RefcountOnObject:
  534|    224|{
  535|    224|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|    224|#define Py_TAG_REFCNT 1
  ------------------
  536|    224|}
abstract.c:_PyThreadState_PopCStackRef:
  805|    112|{
  806|       |#ifdef Py_GIL_DISABLED
  807|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  808|       |    assert(tstate_impl->c_stack_refs == ref);
  809|       |    tstate_impl->c_stack_refs = ref->next;
  810|       |#endif
  811|    112|    PyStackRef_XCLOSE(ref->ref);
  812|    112|}
call.c:_PyThreadState_PushCStackRef:
  787|   294k|{
  788|       |#ifdef Py_GIL_DISABLED
  789|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  790|       |    ref->next = tstate_impl->c_stack_refs;
  791|       |    tstate_impl->c_stack_refs = ref;
  792|       |#endif
  793|   294k|    ref->ref = PyStackRef_NULL;
  794|   294k|}
call.c:PyStackRef_FromPyObjectBorrow:
  627|   147k|{
  628|   147k|    assert(obj != NULL);
  ------------------
  |  Branch (628:5): [True: 147k, False: 0]
  ------------------
  629|   147k|    return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT};
  ------------------
  |  |   55|   147k|#define Py_TAG_REFCNT 1
  ------------------
  630|   147k|}
call.c:_PyThreadState_PopCStackRef:
  805|   294k|{
  806|       |#ifdef Py_GIL_DISABLED
  807|       |    _PyThreadStateImpl *tstate_impl = (_PyThreadStateImpl *)tstate;
  808|       |    assert(tstate_impl->c_stack_refs == ref);
  809|       |    tstate_impl->c_stack_refs = ref->next;
  810|       |#endif
  811|   294k|    PyStackRef_XCLOSE(ref->ref);
  812|   294k|}
call.c:PyStackRef_XCLOSE:
  722|   294k|{
  723|   294k|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 294k, False: 0]
  ------------------
  724|   294k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 147k, False: 147k]
  ------------------
  725|   147k|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 147k, False: 0]
  ------------------
  726|   147k|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|   147k|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   147k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   147k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|   147k|    }
  728|   294k|}
call.c:PyStackRef_RefcountOnObject:
  534|   294k|{
  535|   294k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|   294k|#define Py_TAG_REFCNT 1
  ------------------
  536|   294k|}
call.c:PyStackRef_AsPyObjectBorrow:
  540|   294k|{
  541|   294k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 294k, False: 0]
  ------------------
  542|   294k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|   294k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|   294k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|   294k|}
call.c:PyStackRef_IsTaggedInt:
  440|   294k|{
  441|   294k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|   294k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|   294k|#define Py_INT_TAG 3
  ------------------
  442|   294k|}
genobject.c:PyStackRef_XCLOSE:
  722|  1.24k|{
  723|  1.24k|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 1.24k, False: 0]
  ------------------
  724|  1.24k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 1.24k, False: 0]
  ------------------
  725|  1.24k|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 1.24k, False: 0]
  ------------------
  726|  1.24k|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  1.24k|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  1.24k|    }
  728|  1.24k|}
genobject.c:PyStackRef_RefcountOnObject:
  534|  1.24k|{
  535|  1.24k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|  1.24k|#define Py_TAG_REFCNT 1
  ------------------
  536|  1.24k|}
genobject.c:_PyStackRef_FromPyObjectNew:
  595|  50.7k|{
  596|  50.7k|    assert(obj != NULL);
  ------------------
  |  Branch (596:5): [True: 50.7k, False: 0]
  ------------------
  597|       |#ifdef Py_GIL_DISABLED
  598|       |    if (_PyObject_HasDeferredRefcount(obj)) {
  599|       |        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  600|       |    }
  601|       |#else
  602|  50.7k|    if (_Py_IsImmortal(obj)) {
  ------------------
  |  |  137|  50.7k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  50.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 50.7k, False: 0]
  |  |  ------------------
  ------------------
  603|  50.7k|        return (_PyStackRef){ .bits = (uintptr_t)obj | Py_TAG_REFCNT };
  ------------------
  |  |   55|  50.7k|#define Py_TAG_REFCNT 1
  ------------------
  604|  50.7k|    }
  605|      0|#endif
  606|      0|    _Py_INCREF_MORTAL(obj);
  607|      0|    _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
  608|      0|    PyStackRef_CheckValid(ref);
  ------------------
  |  |  522|      0|#define PyStackRef_CheckValid(REF) ((void)0)
  ------------------
  609|      0|    return ref;
  610|  50.7k|}
genobject.c:PyStackRef_IsTaggedInt:
  440|     20|{
  441|     20|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|     20|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|     20|#define Py_INT_TAG 3
  ------------------
  442|     20|}
genobject.c:PyStackRef_AsPyObjectBorrow:
  540|     20|{
  541|     20|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 20, False: 0]
  ------------------
  542|     20|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|     20|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|     20|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|     20|}
frameobject.c:PyStackRef_AsPyObjectBorrow:
  540|  1.14k|{
  541|  1.14k|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 1.14k, False: 0]
  ------------------
  542|  1.14k|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|  1.14k|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|  1.14k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|  1.14k|}
frameobject.c:PyStackRef_IsTaggedInt:
  440|  1.14k|{
  441|  1.14k|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|  1.14k|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|  1.14k|#define Py_INT_TAG 3
  ------------------
  442|  1.14k|}
frameobject.c:PyStackRef_RefcountOnObject:
  534|  38.7k|{
  535|  38.7k|    return (ref.bits & Py_TAG_REFCNT) == 0;
  ------------------
  |  |   55|  38.7k|#define Py_TAG_REFCNT 1
  ------------------
  536|  38.7k|}
frameobject.c:PyStackRef_XCLOSE:
  722|  38.7k|{
  723|  38.7k|    assert(ref.bits != 0);
  ------------------
  |  Branch (723:5): [True: 38.7k, False: 0]
  ------------------
  724|  38.7k|    if (PyStackRef_RefcountOnObject(ref)) {
  ------------------
  |  Branch (724:9): [True: 22.6k, False: 16.0k]
  ------------------
  725|  22.6k|        assert(!PyStackRef_IsNull(ref));
  ------------------
  |  Branch (725:9): [True: 22.6k, False: 0]
  ------------------
  726|  22.6k|        Py_DECREF_MORTAL(BITS_TO_PTR(ref));
  ------------------
  |  |  452|  22.6k|#define Py_DECREF_MORTAL(op) Py_DECREF_MORTAL(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  22.6k|    }
  728|  38.7k|}
lazyimportobject.c:PyStackRef_AsPyObjectBorrow:
  540|     26|{
  541|     26|    assert(!PyStackRef_IsTaggedInt(ref));
  ------------------
  |  Branch (541:5): [True: 26, False: 0]
  ------------------
  542|     26|    return BITS_TO_PTR_MASKED(ref);
  ------------------
  |  |  477|     26|#define BITS_TO_PTR_MASKED(REF) ((PyObject *)(((REF).bits) & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|     26|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
  543|     26|}
lazyimportobject.c:PyStackRef_IsTaggedInt:
  440|     26|{
  441|     26|    return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   56|     26|#define Py_TAG_BITS 3
  ------------------
                  return (i.bits & Py_TAG_BITS) == Py_INT_TAG;
  ------------------
  |  |   53|     26|#define Py_INT_TAG 3
  ------------------
  442|     26|}

longobject.c:_PyStructSequence_InitBuiltin:
   29|      2|{
   30|      2|    return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0);
   31|      2|}
errors.c:_PyStructSequence_InitBuiltin:
   29|      2|{
   30|      2|    return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0);
   31|      2|}
sysmodule.c:_PyStructSequence_InitBuiltin:
   29|      4|{
   30|      4|    return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0);
   31|      4|}
thread.c:_PyStructSequence_InitBuiltin:
   29|      2|{
   30|      2|    return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0);
   31|      2|}
floatobject.c:_PyStructSequence_InitBuiltin:
   29|      2|{
   30|      2|    return _PyStructSequence_InitBuiltinWithFlags(interp, type, desc, 0);
   31|      2|}

dictobject.c:_PyTuple_Recycle:
   53|    317|{
   54|    317|    _PyTuple_RESET_HASH_CACHE(op);
  ------------------
  |  |   44|    317|    do {                                    \
  |  |   45|    317|        assert(op != NULL);                 \
  |  |   46|    634|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|    317|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    634|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 317]
  |  |  ------------------
  ------------------
  |  Branch (54:5): [True: 317, False: 0]
  |  Branch (54:5): [True: 317, False: 0]
  ------------------
   55|    317|    if (!_PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|    317|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (55:9): [True: 92, False: 225]
  ------------------
   56|     92|        _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|     92|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     92|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     92|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|     92|    }
   58|    317|}
bltinmodule.c:_PyTuple_Recycle:
   53|     68|{
   54|     68|    _PyTuple_RESET_HASH_CACHE(op);
  ------------------
  |  |   44|     68|    do {                                    \
  |  |   45|     68|        assert(op != NULL);                 \
  |  |   46|    136|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|     68|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    136|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 68]
  |  |  ------------------
  ------------------
  |  Branch (54:5): [True: 68, False: 0]
  |  Branch (54:5): [True: 68, False: 0]
  ------------------
   55|     68|    if (!_PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|     68|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (55:9): [True: 0, False: 68]
  ------------------
   56|      0|        _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|      0|    }
   58|     68|}
enumobject.c:_PyTuple_Recycle:
   53|   622k|{
   54|   622k|    _PyTuple_RESET_HASH_CACHE(op);
  ------------------
  |  |   44|   622k|    do {                                    \
  |  |   45|   622k|        assert(op != NULL);                 \
  |  |   46|  1.24M|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|   622k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  1.24M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 622k]
  |  |  ------------------
  ------------------
  |  Branch (54:5): [True: 622k, False: 0]
  |  Branch (54:5): [True: 622k, False: 0]
  ------------------
   55|   622k|    if (!_PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|   622k|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (55:9): [True: 37.5k, False: 584k]
  ------------------
   56|  37.5k|        _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|  37.5k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|  37.5k|    }
   58|   622k|}

object.c:_PyType_IsReady:
  109|  5.86M|{
  110|       |    return _PyType_GetDict(type) != NULL;
  111|  5.86M|}
typeobject.c:_PyType_IsReady:
  109|   106k|{
  110|       |    return _PyType_GetDict(type) != NULL;
  111|   106k|}
weakrefobject.c:_PyStaticType_GET_WEAKREFS_LISTPTR:
   48|    594|{
   49|    594|    assert(state != NULL);
  ------------------
  |  Branch (49:5): [True: 594, False: 0]
  ------------------
   50|    594|    return &state->tp_weaklist;
   51|    594|}
modsupport.c:_PyType_IsReady:
  109|     81|{
  110|       |    return _PyType_GetDict(type) != NULL;
  111|     81|}
specialize.c:_PyType_IsReady:
  109|  1.84k|{
  110|       |    return _PyType_GetDict(type) != NULL;
  111|  1.84k|}
_collectionsmodule.c:_PyType_GetModuleState:
   80|     12|{
   81|     12|    assert(PyType_Check(type));
  ------------------
  |  Branch (81:5): [True: 12, False: 0]
  ------------------
   82|     12|    assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  Branch (82:5): [True: 12, False: 0]
  ------------------
   83|     12|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
   84|     12|    assert(et->ht_module);
  ------------------
  |  Branch (84:5): [True: 12, False: 0]
  ------------------
   85|     12|    PyModuleObject *mod = (PyModuleObject *)(et->ht_module);
   86|     12|    assert(mod != NULL);
  ------------------
  |  Branch (86:5): [True: 12, False: 0]
  ------------------
   87|     12|    return mod->md_state;
   88|     12|}
fileio.c:_PyType_GetModuleState:
   80|     93|{
   81|     93|    assert(PyType_Check(type));
  ------------------
  |  Branch (81:5): [True: 93, False: 0]
  ------------------
   82|     93|    assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  Branch (82:5): [True: 93, False: 0]
  ------------------
   83|     93|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
   84|     93|    assert(et->ht_module);
  ------------------
  |  Branch (84:5): [True: 93, False: 0]
  ------------------
   85|     93|    PyModuleObject *mod = (PyModuleObject *)(et->ht_module);
   86|     93|    assert(mod != NULL);
  ------------------
  |  Branch (86:5): [True: 93, False: 0]
  ------------------
   87|     93|    return mod->md_state;
   88|     93|}
_abc.c:_PyType_GetModuleState:
   80|     76|{
   81|     76|    assert(PyType_Check(type));
  ------------------
  |  Branch (81:5): [True: 76, False: 0]
  ------------------
   82|     76|    assert(type->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  Branch (82:5): [True: 76, False: 0]
  ------------------
   83|     76|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
   84|     76|    assert(et->ht_module);
  ------------------
  |  Branch (84:5): [True: 76, False: 0]
  ------------------
   85|     76|    PyModuleObject *mod = (PyModuleObject *)(et->ht_module);
   86|     76|    assert(mod != NULL);
  ------------------
  |  Branch (86:5): [True: 76, False: 0]
  ------------------
   87|     76|    return mod->md_state;
   88|     76|}

longobject.c:_PyUnicodeWriter_CanWrite:
  114|    132|{
  115|    132|    assert(!writer->readonly);
  ------------------
  |  Branch (115:5): [True: 132, False: 0]
  ------------------
  116|       |
  117|    132|    PyObject *buffer = writer->buffer;
  118|    132|    assert(buffer != NULL);
  ------------------
  |  Branch (118:5): [True: 132, False: 0]
  ------------------
  119|       |
  120|       |    // Code adapted from _PyUnicode_IsModifiable().
  121|       |    // Do not use _PyObject_IsUniquelyReferenced(): the caller can have its own
  122|       |    // lock to prevent a writer from being used by two threads at the same
  123|       |    // time.
  124|    132|    assert(Py_REFCNT(buffer) == 1);
  ------------------
  |  Branch (124:5): [True: 132, False: 0]
  ------------------
  125|    132|    assert(PyUnstable_Unicode_GET_CACHED_HASH(buffer) == -1);
  ------------------
  |  Branch (125:5): [True: 132, False: 0]
  ------------------
  126|    132|    assert(!PyUnicode_CHECK_INTERNED(buffer));
  ------------------
  |  Branch (126:5): [True: 132, False: 0]
  ------------------
  127|    132|    assert(!_Py_IsImmortal(buffer));
  ------------------
  |  Branch (127:5): [True: 132, False: 0]
  ------------------
  128|    132|    return 1;
  129|    132|}
unicode_writer.c:_PyUnicodeWriter_Update:
  134|   554k|{
  135|   554k|    PyObject *buffer = writer->buffer;
  136|   554k|    writer->maxchar = PyUnicode_MAX_CHAR_VALUE(buffer);
  ------------------
  |  |  405|   554k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   554k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   554k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|   554k|    writer->data = PyUnicode_DATA(buffer);
  ------------------
  |  |  284|   554k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   554k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   554k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  138|   554k|    writer->kind = PyUnicode_KIND(buffer);
  ------------------
  |  |  258|   554k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.10M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 554k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|       |
  140|   554k|    if (!writer->readonly) {
  ------------------
  |  Branch (140:9): [True: 457k, False: 96.7k]
  ------------------
  141|   457k|        writer->size = PyUnicode_GET_LENGTH(buffer);
  ------------------
  |  |  299|   457k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   457k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   457k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|   457k|    }
  143|  96.7k|    else {
  144|       |        /* Copy-on-write mode: set buffer size to 0 so
  145|       |         * _PyUnicodeWriter_Prepare() will copy (and enlarge) the buffer on
  146|       |         * next write. */
  147|  96.7k|        writer->size = 0;
  148|  96.7k|    }
  149|   554k|}
unicode_writer.c:_PyUnicodeWriter_CanWrite:
  114|   730k|{
  115|   730k|    assert(!writer->readonly);
  ------------------
  |  Branch (115:5): [True: 730k, False: 0]
  ------------------
  116|       |
  117|   730k|    PyObject *buffer = writer->buffer;
  118|   730k|    assert(buffer != NULL);
  ------------------
  |  Branch (118:5): [True: 730k, False: 0]
  ------------------
  119|       |
  120|       |    // Code adapted from _PyUnicode_IsModifiable().
  121|       |    // Do not use _PyObject_IsUniquelyReferenced(): the caller can have its own
  122|       |    // lock to prevent a writer from being used by two threads at the same
  123|       |    // time.
  124|   730k|    assert(Py_REFCNT(buffer) == 1);
  ------------------
  |  Branch (124:5): [True: 730k, False: 0]
  ------------------
  125|   730k|    assert(PyUnstable_Unicode_GET_CACHED_HASH(buffer) == -1);
  ------------------
  |  Branch (125:5): [True: 730k, False: 0]
  ------------------
  126|   730k|    assert(!PyUnicode_CHECK_INTERNED(buffer));
  ------------------
  |  Branch (126:5): [True: 730k, False: 0]
  ------------------
  127|   730k|    assert(!_Py_IsImmortal(buffer));
  ------------------
  |  Branch (127:5): [True: 730k, False: 0]
  ------------------
  128|   730k|    return 1;
  129|   730k|}
unicode_writer.c:_PyUnicodeWriter_WriteCharInline:
  153|  62.6k|{
  154|  62.6k|    if (ch > writer->maxchar || 1 > writer->size - writer->pos) {
  ------------------
  |  Branch (154:9): [True: 52.6k, False: 10.0k]
  |  Branch (154:33): [True: 42, False: 9.99k]
  ------------------
  155|  52.6k|        if (writer->buffer == NULL && ch <= 255) {
  ------------------
  |  Branch (155:13): [True: 52.6k, False: 42]
  |  Branch (155:39): [True: 52.6k, False: 0]
  ------------------
  156|       |            // If the first write is a Latin1 character, use the singleton
  157|       |            // as a read-only object
  158|  52.6k|            PyObject *obj = _Py_LATIN1_CHR(ch);
  ------------------
  |  |  940|  52.6k|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 52.6k, False: 0]
  |  |  ------------------
  |  |  941|  52.6k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|  52.6k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  52.6k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|  52.6k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|  52.6k|            writer->readonly = 1;
  160|  52.6k|            writer->buffer = obj; // Py_NewRef() is not need on immortal object
  161|  52.6k|            _PyUnicodeWriter_Update(writer);
  162|  52.6k|            assert(writer->pos == 0);
  ------------------
  |  Branch (162:13): [True: 52.6k, False: 0]
  ------------------
  163|  52.6k|            writer->pos = 1;
  164|       |            // The next write will create a new buffer and copy the string
  165|  52.6k|            return 0;
  166|  52.6k|        }
  167|       |
  168|     42|        if (_PyUnicodeWriter_PrepareInternal(writer, 1, ch) == -1) {
  ------------------
  |  Branch (168:13): [True: 0, False: 42]
  ------------------
  169|      0|            return -1;
  170|      0|        }
  171|     42|    }
  172|  62.6k|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (172:5): [True: 10.0k, False: 0]
  ------------------
  173|       |
  174|  10.0k|    PyUnicode_WRITE(writer->kind, writer->data, writer->pos, ch);
  ------------------
  |  |  335|  10.0k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|  10.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|  10.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|  10.0k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|  10.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  175|  10.0k|    writer->pos++;
  176|  10.0k|    return 0;
  177|  10.0k|}
unicodeobject.c:_PyUnicodeWriter_CanWrite:
  114|   488k|{
  115|   488k|    assert(!writer->readonly);
  ------------------
  |  Branch (115:5): [True: 488k, False: 0]
  ------------------
  116|       |
  117|   488k|    PyObject *buffer = writer->buffer;
  118|   488k|    assert(buffer != NULL);
  ------------------
  |  Branch (118:5): [True: 488k, False: 0]
  ------------------
  119|       |
  120|       |    // Code adapted from _PyUnicode_IsModifiable().
  121|       |    // Do not use _PyObject_IsUniquelyReferenced(): the caller can have its own
  122|       |    // lock to prevent a writer from being used by two threads at the same
  123|       |    // time.
  124|   488k|    assert(Py_REFCNT(buffer) == 1);
  ------------------
  |  Branch (124:5): [True: 488k, False: 0]
  ------------------
  125|   488k|    assert(PyUnstable_Unicode_GET_CACHED_HASH(buffer) == -1);
  ------------------
  |  Branch (125:5): [True: 488k, False: 0]
  ------------------
  126|   488k|    assert(!PyUnicode_CHECK_INTERNED(buffer));
  ------------------
  |  Branch (126:5): [True: 488k, False: 0]
  ------------------
  127|   488k|    assert(!_Py_IsImmortal(buffer));
  ------------------
  |  Branch (127:5): [True: 488k, False: 0]
  ------------------
  128|   488k|    return 1;
  129|   488k|}
unicodeobject.c:_PyUnicodeWriter_WriteCharInline:
  153|   208k|{
  154|   208k|    if (ch > writer->maxchar || 1 > writer->size - writer->pos) {
  ------------------
  |  Branch (154:9): [True: 32.0k, False: 176k]
  |  Branch (154:33): [True: 177, False: 176k]
  ------------------
  155|  32.1k|        if (writer->buffer == NULL && ch <= 255) {
  ------------------
  |  Branch (155:13): [True: 327, False: 31.8k]
  |  Branch (155:39): [True: 327, False: 0]
  ------------------
  156|       |            // If the first write is a Latin1 character, use the singleton
  157|       |            // as a read-only object
  158|    327|            PyObject *obj = _Py_LATIN1_CHR(ch);
  ------------------
  |  |  940|    327|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 327, False: 0]
  |  |  ------------------
  |  |  941|    327|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|    327|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    327|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|    327|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|    327|            writer->readonly = 1;
  160|    327|            writer->buffer = obj; // Py_NewRef() is not need on immortal object
  161|    327|            _PyUnicodeWriter_Update(writer);
  162|    327|            assert(writer->pos == 0);
  ------------------
  |  Branch (162:13): [True: 327, False: 0]
  ------------------
  163|    327|            writer->pos = 1;
  164|       |            // The next write will create a new buffer and copy the string
  165|    327|            return 0;
  166|    327|        }
  167|       |
  168|  31.8k|        if (_PyUnicodeWriter_PrepareInternal(writer, 1, ch) == -1) {
  ------------------
  |  Branch (168:13): [True: 0, False: 31.8k]
  ------------------
  169|      0|            return -1;
  170|      0|        }
  171|  31.8k|    }
  172|   208k|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (172:5): [True: 208k, False: 0]
  ------------------
  173|       |
  174|   208k|    PyUnicode_WRITE(writer->kind, writer->data, writer->pos, ch);
  ------------------
  |  |  335|   208k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|   208k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|   208k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|   208k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|   208k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  175|   208k|    writer->pos++;
  176|   208k|    return 0;
  177|   208k|}
unicodeobject.c:_PyUnicodeWriter_Update:
  134|    327|{
  135|    327|    PyObject *buffer = writer->buffer;
  136|    327|    writer->maxchar = PyUnicode_MAX_CHAR_VALUE(buffer);
  ------------------
  |  |  405|    327|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    327|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    327|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|    327|    writer->data = PyUnicode_DATA(buffer);
  ------------------
  |  |  284|    327|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    327|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    327|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  138|    327|    writer->kind = PyUnicode_KIND(buffer);
  ------------------
  |  |  258|    327|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    654|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 327, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|       |
  140|    327|    if (!writer->readonly) {
  ------------------
  |  Branch (140:9): [True: 0, False: 327]
  ------------------
  141|      0|        writer->size = PyUnicode_GET_LENGTH(buffer);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|      0|    }
  143|    327|    else {
  144|       |        /* Copy-on-write mode: set buffer size to 0 so
  145|       |         * _PyUnicodeWriter_Prepare() will copy (and enlarge) the buffer on
  146|       |         * next write. */
  147|    327|        writer->size = 0;
  148|    327|    }
  149|    327|}
unicodeobject.c:_PyUnicode_EnsureUnicode:
  102|   602k|{
  103|   602k|    if (!PyUnicode_Check(obj)) {
  ------------------
  |  |  103|   602k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   602k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (103:9): [True: 0, False: 602k]
  ------------------
  104|      0|        PyErr_Format(PyExc_TypeError,
  105|      0|                     "must be str, not %T", obj);
  106|      0|        return -1;
  107|      0|    }
  108|   602k|    return 0;
  109|   602k|}
unicodeobject.c:_PyUnicode_Fill:
   70|  6.16k|{
   71|  6.16k|    assert(0 <= start);
  ------------------
  |  Branch (71:5): [True: 6.16k, False: 0]
  ------------------
   72|  6.16k|    switch (kind) {
   73|  2.09k|    case PyUnicode_1BYTE_KIND: {
  ------------------
  |  Branch (73:5): [True: 2.09k, False: 4.07k]
  ------------------
   74|  2.09k|        assert(value <= 0xff);
  ------------------
  |  Branch (74:9): [True: 2.09k, False: 0]
  ------------------
   75|  2.09k|        Py_UCS1 ch = (unsigned char)value;
   76|  2.09k|        Py_UCS1 *to = (Py_UCS1 *)data + start;
   77|  2.09k|        memset(to, ch, length);
   78|  2.09k|        break;
   79|  2.09k|    }
   80|  2.96k|    case PyUnicode_2BYTE_KIND: {
  ------------------
  |  Branch (80:5): [True: 2.96k, False: 3.20k]
  ------------------
   81|  2.96k|        assert(value <= 0xffff);
  ------------------
  |  Branch (81:9): [True: 2.96k, False: 0]
  ------------------
   82|  2.96k|        Py_UCS2 ch = (Py_UCS2)value;
   83|  2.96k|        Py_UCS2 *to = (Py_UCS2 *)data + start;
   84|  2.96k|        const Py_UCS2 *end = to + length;
   85|  19.4k|        for (; to < end; ++to) *to = ch;
  ------------------
  |  Branch (85:16): [True: 16.4k, False: 2.96k]
  ------------------
   86|  2.96k|        break;
   87|  2.96k|    }
   88|  1.10k|    case PyUnicode_4BYTE_KIND: {
  ------------------
  |  Branch (88:5): [True: 1.10k, False: 5.06k]
  ------------------
   89|  1.10k|        assert(value <= _Py_MAX_UNICODE);
  ------------------
  |  Branch (89:9): [True: 1.10k, False: 0]
  ------------------
   90|  1.10k|        Py_UCS4 ch = value;
   91|  1.10k|        Py_UCS4 * to = (Py_UCS4 *)data + start;
   92|  1.10k|        const Py_UCS4 *end = to + length;
   93|  7.17k|        for (; to < end; ++to) *to = ch;
  ------------------
  |  Branch (93:16): [True: 6.06k, False: 1.10k]
  ------------------
   94|  1.10k|        break;
   95|  1.10k|    }
   96|      0|    default: Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  |  Branch (96:5): [True: 0, False: 6.16k]
  ------------------
   97|  6.16k|    }
   98|  6.16k|}
unicode_format.c:_PyUnicode_EnsureUnicode:
  102|     21|{
  103|     21|    if (!PyUnicode_Check(obj)) {
  ------------------
  |  |  103|     21|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     21|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (103:9): [True: 0, False: 21]
  ------------------
  104|      0|        PyErr_Format(PyExc_TypeError,
  105|      0|                     "must be str, not %T", obj);
  106|      0|        return -1;
  107|      0|    }
  108|     21|    return 0;
  109|     21|}

unicodeobject.c:_PyUnicode_InitStaticStrings:
   13|      2|_PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
   14|       |    // Offsets avoid a pointer relocation for each string.
   15|      2|    static const uint32_t offsets[] = {
   16|      2|        offsetof(struct _Py_global_strings, identifiers._py_AGEN_CLOSED._ascii.ob_base),
   17|      2|        offsetof(struct _Py_global_strings, identifiers._py_AGEN_CREATED._ascii.ob_base),
   18|      2|        offsetof(struct _Py_global_strings, identifiers._py_AGEN_RUNNING._ascii.ob_base),
   19|      2|        offsetof(struct _Py_global_strings, identifiers._py_AGEN_SUSPENDED._ascii.ob_base),
   20|      2|        offsetof(struct _Py_global_strings, identifiers._py_CANCELLED._ascii.ob_base),
   21|      2|        offsetof(struct _Py_global_strings, identifiers._py_CORO_CLOSED._ascii.ob_base),
   22|      2|        offsetof(struct _Py_global_strings, identifiers._py_CORO_CREATED._ascii.ob_base),
   23|      2|        offsetof(struct _Py_global_strings, identifiers._py_CORO_RUNNING._ascii.ob_base),
   24|      2|        offsetof(struct _Py_global_strings, identifiers._py_CORO_SUSPENDED._ascii.ob_base),
   25|      2|        offsetof(struct _Py_global_strings, identifiers._py_Emax._ascii.ob_base),
   26|      2|        offsetof(struct _Py_global_strings, identifiers._py_Emin._ascii.ob_base),
   27|      2|        offsetof(struct _Py_global_strings, identifiers._py_FINISHED._ascii.ob_base),
   28|      2|        offsetof(struct _Py_global_strings, identifiers._py_False._ascii.ob_base),
   29|      2|        offsetof(struct _Py_global_strings, identifiers._py_GEN_CLOSED._ascii.ob_base),
   30|      2|        offsetof(struct _Py_global_strings, identifiers._py_GEN_CREATED._ascii.ob_base),
   31|      2|        offsetof(struct _Py_global_strings, identifiers._py_GEN_RUNNING._ascii.ob_base),
   32|      2|        offsetof(struct _Py_global_strings, identifiers._py_GEN_SUSPENDED._ascii.ob_base),
   33|      2|        offsetof(struct _Py_global_strings, identifiers._py_JSONDecodeError._ascii.ob_base),
   34|      2|        offsetof(struct _Py_global_strings, identifiers._py_PENDING._ascii.ob_base),
   35|      2|        offsetof(struct _Py_global_strings, identifiers._py_Py_Repr._ascii.ob_base),
   36|      2|        offsetof(struct _Py_global_strings, identifiers._py_TextIOWrapper._ascii.ob_base),
   37|      2|        offsetof(struct _Py_global_strings, identifiers._py_True._ascii.ob_base),
   38|      2|        offsetof(struct _Py_global_strings, identifiers._py_WarningMessage._ascii.ob_base),
   39|      2|        offsetof(struct _Py_global_strings, identifiers._py__WindowsConsoleIO._ascii.ob_base),
   40|      2|        offsetof(struct _Py_global_strings, identifiers._py___IOBase_closed._ascii.ob_base),
   41|      2|        offsetof(struct _Py_global_strings, identifiers._py___abc_tpflags__._ascii.ob_base),
   42|      2|        offsetof(struct _Py_global_strings, identifiers._py___abs__._ascii.ob_base),
   43|      2|        offsetof(struct _Py_global_strings, identifiers._py___abstractmethods__._ascii.ob_base),
   44|      2|        offsetof(struct _Py_global_strings, identifiers._py___add__._ascii.ob_base),
   45|      2|        offsetof(struct _Py_global_strings, identifiers._py___aenter__._ascii.ob_base),
   46|      2|        offsetof(struct _Py_global_strings, identifiers._py___aexit__._ascii.ob_base),
   47|      2|        offsetof(struct _Py_global_strings, identifiers._py___aiter__._ascii.ob_base),
   48|      2|        offsetof(struct _Py_global_strings, identifiers._py___all__._ascii.ob_base),
   49|      2|        offsetof(struct _Py_global_strings, identifiers._py___and__._ascii.ob_base),
   50|      2|        offsetof(struct _Py_global_strings, identifiers._py___anext__._ascii.ob_base),
   51|      2|        offsetof(struct _Py_global_strings, identifiers._py___annotate__._ascii.ob_base),
   52|      2|        offsetof(struct _Py_global_strings, identifiers._py___annotate_func__._ascii.ob_base),
   53|      2|        offsetof(struct _Py_global_strings, identifiers._py___annotations__._ascii.ob_base),
   54|      2|        offsetof(struct _Py_global_strings, identifiers._py___annotations_cache__._ascii.ob_base),
   55|      2|        offsetof(struct _Py_global_strings, identifiers._py___args__._ascii.ob_base),
   56|      2|        offsetof(struct _Py_global_strings, identifiers._py___await__._ascii.ob_base),
   57|      2|        offsetof(struct _Py_global_strings, identifiers._py___bases__._ascii.ob_base),
   58|      2|        offsetof(struct _Py_global_strings, identifiers._py___bool__._ascii.ob_base),
   59|      2|        offsetof(struct _Py_global_strings, identifiers._py___buffer__._ascii.ob_base),
   60|      2|        offsetof(struct _Py_global_strings, identifiers._py___build_class__._ascii.ob_base),
   61|      2|        offsetof(struct _Py_global_strings, identifiers._py___builtins__._ascii.ob_base),
   62|      2|        offsetof(struct _Py_global_strings, identifiers._py___bytes__._ascii.ob_base),
   63|      2|        offsetof(struct _Py_global_strings, identifiers._py___call__._ascii.ob_base),
   64|      2|        offsetof(struct _Py_global_strings, identifiers._py___cantrace__._ascii.ob_base),
   65|      2|        offsetof(struct _Py_global_strings, identifiers._py___ceil__._ascii.ob_base),
   66|      2|        offsetof(struct _Py_global_strings, identifiers._py___class__._ascii.ob_base),
   67|      2|        offsetof(struct _Py_global_strings, identifiers._py___class_getitem__._ascii.ob_base),
   68|      2|        offsetof(struct _Py_global_strings, identifiers._py___classcell__._ascii.ob_base),
   69|      2|        offsetof(struct _Py_global_strings, identifiers._py___classdict__._ascii.ob_base),
   70|      2|        offsetof(struct _Py_global_strings, identifiers._py___classdictcell__._ascii.ob_base),
   71|      2|        offsetof(struct _Py_global_strings, identifiers._py___complex__._ascii.ob_base),
   72|      2|        offsetof(struct _Py_global_strings, identifiers._py___conditional_annotations__._ascii.ob_base),
   73|      2|        offsetof(struct _Py_global_strings, identifiers._py___contains__._ascii.ob_base),
   74|      2|        offsetof(struct _Py_global_strings, identifiers._py___ctypes_from_outparam__._ascii.ob_base),
   75|      2|        offsetof(struct _Py_global_strings, identifiers._py___del__._ascii.ob_base),
   76|      2|        offsetof(struct _Py_global_strings, identifiers._py___delattr__._ascii.ob_base),
   77|      2|        offsetof(struct _Py_global_strings, identifiers._py___delete__._ascii.ob_base),
   78|      2|        offsetof(struct _Py_global_strings, identifiers._py___delitem__._ascii.ob_base),
   79|      2|        offsetof(struct _Py_global_strings, identifiers._py___dict__._ascii.ob_base),
   80|      2|        offsetof(struct _Py_global_strings, identifiers._py___dictoffset__._ascii.ob_base),
   81|      2|        offsetof(struct _Py_global_strings, identifiers._py___dir__._ascii.ob_base),
   82|      2|        offsetof(struct _Py_global_strings, identifiers._py___divmod__._ascii.ob_base),
   83|      2|        offsetof(struct _Py_global_strings, identifiers._py___doc__._ascii.ob_base),
   84|      2|        offsetof(struct _Py_global_strings, identifiers._py___enter__._ascii.ob_base),
   85|      2|        offsetof(struct _Py_global_strings, identifiers._py___eq__._ascii.ob_base),
   86|      2|        offsetof(struct _Py_global_strings, identifiers._py___exit__._ascii.ob_base),
   87|      2|        offsetof(struct _Py_global_strings, identifiers._py___file__._ascii.ob_base),
   88|      2|        offsetof(struct _Py_global_strings, identifiers._py___firstlineno__._ascii.ob_base),
   89|      2|        offsetof(struct _Py_global_strings, identifiers._py___float__._ascii.ob_base),
   90|      2|        offsetof(struct _Py_global_strings, identifiers._py___floor__._ascii.ob_base),
   91|      2|        offsetof(struct _Py_global_strings, identifiers._py___floordiv__._ascii.ob_base),
   92|      2|        offsetof(struct _Py_global_strings, identifiers._py___format__._ascii.ob_base),
   93|      2|        offsetof(struct _Py_global_strings, identifiers._py___fspath__._ascii.ob_base),
   94|      2|        offsetof(struct _Py_global_strings, identifiers._py___ge__._ascii.ob_base),
   95|      2|        offsetof(struct _Py_global_strings, identifiers._py___get__._ascii.ob_base),
   96|      2|        offsetof(struct _Py_global_strings, identifiers._py___getattr__._ascii.ob_base),
   97|      2|        offsetof(struct _Py_global_strings, identifiers._py___getattribute__._ascii.ob_base),
   98|      2|        offsetof(struct _Py_global_strings, identifiers._py___getinitargs__._ascii.ob_base),
   99|      2|        offsetof(struct _Py_global_strings, identifiers._py___getitem__._ascii.ob_base),
  100|      2|        offsetof(struct _Py_global_strings, identifiers._py___getnewargs__._ascii.ob_base),
  101|      2|        offsetof(struct _Py_global_strings, identifiers._py___getnewargs_ex__._ascii.ob_base),
  102|      2|        offsetof(struct _Py_global_strings, identifiers._py___getstate__._ascii.ob_base),
  103|      2|        offsetof(struct _Py_global_strings, identifiers._py___gt__._ascii.ob_base),
  104|      2|        offsetof(struct _Py_global_strings, identifiers._py___hash__._ascii.ob_base),
  105|      2|        offsetof(struct _Py_global_strings, identifiers._py___iadd__._ascii.ob_base),
  106|      2|        offsetof(struct _Py_global_strings, identifiers._py___iand__._ascii.ob_base),
  107|      2|        offsetof(struct _Py_global_strings, identifiers._py___ifloordiv__._ascii.ob_base),
  108|      2|        offsetof(struct _Py_global_strings, identifiers._py___ilshift__._ascii.ob_base),
  109|      2|        offsetof(struct _Py_global_strings, identifiers._py___imatmul__._ascii.ob_base),
  110|      2|        offsetof(struct _Py_global_strings, identifiers._py___imod__._ascii.ob_base),
  111|      2|        offsetof(struct _Py_global_strings, identifiers._py___import__._ascii.ob_base),
  112|      2|        offsetof(struct _Py_global_strings, identifiers._py___imul__._ascii.ob_base),
  113|      2|        offsetof(struct _Py_global_strings, identifiers._py___index__._ascii.ob_base),
  114|      2|        offsetof(struct _Py_global_strings, identifiers._py___init__._ascii.ob_base),
  115|      2|        offsetof(struct _Py_global_strings, identifiers._py___init_subclass__._ascii.ob_base),
  116|      2|        offsetof(struct _Py_global_strings, identifiers._py___instancecheck__._ascii.ob_base),
  117|      2|        offsetof(struct _Py_global_strings, identifiers._py___int__._ascii.ob_base),
  118|      2|        offsetof(struct _Py_global_strings, identifiers._py___invert__._ascii.ob_base),
  119|      2|        offsetof(struct _Py_global_strings, identifiers._py___ior__._ascii.ob_base),
  120|      2|        offsetof(struct _Py_global_strings, identifiers._py___ipow__._ascii.ob_base),
  121|      2|        offsetof(struct _Py_global_strings, identifiers._py___irshift__._ascii.ob_base),
  122|      2|        offsetof(struct _Py_global_strings, identifiers._py___isabstractmethod__._ascii.ob_base),
  123|      2|        offsetof(struct _Py_global_strings, identifiers._py___isub__._ascii.ob_base),
  124|      2|        offsetof(struct _Py_global_strings, identifiers._py___iter__._ascii.ob_base),
  125|      2|        offsetof(struct _Py_global_strings, identifiers._py___itruediv__._ascii.ob_base),
  126|      2|        offsetof(struct _Py_global_strings, identifiers._py___ixor__._ascii.ob_base),
  127|      2|        offsetof(struct _Py_global_strings, identifiers._py___lazy_import__._ascii.ob_base),
  128|      2|        offsetof(struct _Py_global_strings, identifiers._py___lazy_modules__._ascii.ob_base),
  129|      2|        offsetof(struct _Py_global_strings, identifiers._py___le__._ascii.ob_base),
  130|      2|        offsetof(struct _Py_global_strings, identifiers._py___len__._ascii.ob_base),
  131|      2|        offsetof(struct _Py_global_strings, identifiers._py___length_hint__._ascii.ob_base),
  132|      2|        offsetof(struct _Py_global_strings, identifiers._py___lltrace__._ascii.ob_base),
  133|      2|        offsetof(struct _Py_global_strings, identifiers._py___loader__._ascii.ob_base),
  134|      2|        offsetof(struct _Py_global_strings, identifiers._py___lshift__._ascii.ob_base),
  135|      2|        offsetof(struct _Py_global_strings, identifiers._py___lt__._ascii.ob_base),
  136|      2|        offsetof(struct _Py_global_strings, identifiers._py___main__._ascii.ob_base),
  137|      2|        offsetof(struct _Py_global_strings, identifiers._py___match_args__._ascii.ob_base),
  138|      2|        offsetof(struct _Py_global_strings, identifiers._py___matmul__._ascii.ob_base),
  139|      2|        offsetof(struct _Py_global_strings, identifiers._py___missing__._ascii.ob_base),
  140|      2|        offsetof(struct _Py_global_strings, identifiers._py___mod__._ascii.ob_base),
  141|      2|        offsetof(struct _Py_global_strings, identifiers._py___module__._ascii.ob_base),
  142|      2|        offsetof(struct _Py_global_strings, identifiers._py___mro_entries__._ascii.ob_base),
  143|      2|        offsetof(struct _Py_global_strings, identifiers._py___mul__._ascii.ob_base),
  144|      2|        offsetof(struct _Py_global_strings, identifiers._py___name__._ascii.ob_base),
  145|      2|        offsetof(struct _Py_global_strings, identifiers._py___ne__._ascii.ob_base),
  146|      2|        offsetof(struct _Py_global_strings, identifiers._py___neg__._ascii.ob_base),
  147|      2|        offsetof(struct _Py_global_strings, identifiers._py___new__._ascii.ob_base),
  148|      2|        offsetof(struct _Py_global_strings, identifiers._py___newobj__._ascii.ob_base),
  149|      2|        offsetof(struct _Py_global_strings, identifiers._py___newobj_ex__._ascii.ob_base),
  150|      2|        offsetof(struct _Py_global_strings, identifiers._py___next__._ascii.ob_base),
  151|      2|        offsetof(struct _Py_global_strings, identifiers._py___notes__._ascii.ob_base),
  152|      2|        offsetof(struct _Py_global_strings, identifiers._py___or__._ascii.ob_base),
  153|      2|        offsetof(struct _Py_global_strings, identifiers._py___orig_class__._ascii.ob_base),
  154|      2|        offsetof(struct _Py_global_strings, identifiers._py___origin__._ascii.ob_base),
  155|      2|        offsetof(struct _Py_global_strings, identifiers._py___package__._ascii.ob_base),
  156|      2|        offsetof(struct _Py_global_strings, identifiers._py___parameters__._ascii.ob_base),
  157|      2|        offsetof(struct _Py_global_strings, identifiers._py___path__._ascii.ob_base),
  158|      2|        offsetof(struct _Py_global_strings, identifiers._py___pos__._ascii.ob_base),
  159|      2|        offsetof(struct _Py_global_strings, identifiers._py___pow__._ascii.ob_base),
  160|      2|        offsetof(struct _Py_global_strings, identifiers._py___prepare__._ascii.ob_base),
  161|      2|        offsetof(struct _Py_global_strings, identifiers._py___qualname__._ascii.ob_base),
  162|      2|        offsetof(struct _Py_global_strings, identifiers._py___radd__._ascii.ob_base),
  163|      2|        offsetof(struct _Py_global_strings, identifiers._py___rand__._ascii.ob_base),
  164|      2|        offsetof(struct _Py_global_strings, identifiers._py___rdivmod__._ascii.ob_base),
  165|      2|        offsetof(struct _Py_global_strings, identifiers._py___reduce__._ascii.ob_base),
  166|      2|        offsetof(struct _Py_global_strings, identifiers._py___reduce_ex__._ascii.ob_base),
  167|      2|        offsetof(struct _Py_global_strings, identifiers._py___release_buffer__._ascii.ob_base),
  168|      2|        offsetof(struct _Py_global_strings, identifiers._py___repr__._ascii.ob_base),
  169|      2|        offsetof(struct _Py_global_strings, identifiers._py___reversed__._ascii.ob_base),
  170|      2|        offsetof(struct _Py_global_strings, identifiers._py___rfloordiv__._ascii.ob_base),
  171|      2|        offsetof(struct _Py_global_strings, identifiers._py___rlshift__._ascii.ob_base),
  172|      2|        offsetof(struct _Py_global_strings, identifiers._py___rmatmul__._ascii.ob_base),
  173|      2|        offsetof(struct _Py_global_strings, identifiers._py___rmod__._ascii.ob_base),
  174|      2|        offsetof(struct _Py_global_strings, identifiers._py___rmul__._ascii.ob_base),
  175|      2|        offsetof(struct _Py_global_strings, identifiers._py___ror__._ascii.ob_base),
  176|      2|        offsetof(struct _Py_global_strings, identifiers._py___round__._ascii.ob_base),
  177|      2|        offsetof(struct _Py_global_strings, identifiers._py___rpow__._ascii.ob_base),
  178|      2|        offsetof(struct _Py_global_strings, identifiers._py___rrshift__._ascii.ob_base),
  179|      2|        offsetof(struct _Py_global_strings, identifiers._py___rshift__._ascii.ob_base),
  180|      2|        offsetof(struct _Py_global_strings, identifiers._py___rsub__._ascii.ob_base),
  181|      2|        offsetof(struct _Py_global_strings, identifiers._py___rtruediv__._ascii.ob_base),
  182|      2|        offsetof(struct _Py_global_strings, identifiers._py___rxor__._ascii.ob_base),
  183|      2|        offsetof(struct _Py_global_strings, identifiers._py___set__._ascii.ob_base),
  184|      2|        offsetof(struct _Py_global_strings, identifiers._py___set_name__._ascii.ob_base),
  185|      2|        offsetof(struct _Py_global_strings, identifiers._py___setattr__._ascii.ob_base),
  186|      2|        offsetof(struct _Py_global_strings, identifiers._py___setitem__._ascii.ob_base),
  187|      2|        offsetof(struct _Py_global_strings, identifiers._py___setstate__._ascii.ob_base),
  188|      2|        offsetof(struct _Py_global_strings, identifiers._py___sizeof__._ascii.ob_base),
  189|      2|        offsetof(struct _Py_global_strings, identifiers._py___slotnames__._ascii.ob_base),
  190|      2|        offsetof(struct _Py_global_strings, identifiers._py___slots__._ascii.ob_base),
  191|      2|        offsetof(struct _Py_global_strings, identifiers._py___spec__._ascii.ob_base),
  192|      2|        offsetof(struct _Py_global_strings, identifiers._py___static_attributes__._ascii.ob_base),
  193|      2|        offsetof(struct _Py_global_strings, identifiers._py___str__._ascii.ob_base),
  194|      2|        offsetof(struct _Py_global_strings, identifiers._py___sub__._ascii.ob_base),
  195|      2|        offsetof(struct _Py_global_strings, identifiers._py___subclasscheck__._ascii.ob_base),
  196|      2|        offsetof(struct _Py_global_strings, identifiers._py___subclasshook__._ascii.ob_base),
  197|      2|        offsetof(struct _Py_global_strings, identifiers._py___truediv__._ascii.ob_base),
  198|      2|        offsetof(struct _Py_global_strings, identifiers._py___trunc__._ascii.ob_base),
  199|      2|        offsetof(struct _Py_global_strings, identifiers._py___type_params__._ascii.ob_base),
  200|      2|        offsetof(struct _Py_global_strings, identifiers._py___typing_is_unpacked_typevartuple__._ascii.ob_base),
  201|      2|        offsetof(struct _Py_global_strings, identifiers._py___typing_prepare_subst__._ascii.ob_base),
  202|      2|        offsetof(struct _Py_global_strings, identifiers._py___typing_subst__._ascii.ob_base),
  203|      2|        offsetof(struct _Py_global_strings, identifiers._py___typing_unpacked_tuple_args__._ascii.ob_base),
  204|      2|        offsetof(struct _Py_global_strings, identifiers._py___warningregistry__._ascii.ob_base),
  205|      2|        offsetof(struct _Py_global_strings, identifiers._py___weaklistoffset__._ascii.ob_base),
  206|      2|        offsetof(struct _Py_global_strings, identifiers._py___weakref__._ascii.ob_base),
  207|      2|        offsetof(struct _Py_global_strings, identifiers._py___xor__._ascii.ob_base),
  208|      2|        offsetof(struct _Py_global_strings, identifiers._py__abc_impl._ascii.ob_base),
  209|      2|        offsetof(struct _Py_global_strings, identifiers._py__abstract_._ascii.ob_base),
  210|      2|        offsetof(struct _Py_global_strings, identifiers._py__active._ascii.ob_base),
  211|      2|        offsetof(struct _Py_global_strings, identifiers._py__anonymous_._ascii.ob_base),
  212|      2|        offsetof(struct _Py_global_strings, identifiers._py__argtypes_._ascii.ob_base),
  213|      2|        offsetof(struct _Py_global_strings, identifiers._py__as_parameter_._ascii.ob_base),
  214|      2|        offsetof(struct _Py_global_strings, identifiers._py__asyncio_future_blocking._ascii.ob_base),
  215|      2|        offsetof(struct _Py_global_strings, identifiers._py__blksize._ascii.ob_base),
  216|      2|        offsetof(struct _Py_global_strings, identifiers._py__bootstrap._ascii.ob_base),
  217|      2|        offsetof(struct _Py_global_strings, identifiers._py__check_retval_._ascii.ob_base),
  218|      2|        offsetof(struct _Py_global_strings, identifiers._py__dealloc_warn._ascii.ob_base),
  219|      2|        offsetof(struct _Py_global_strings, identifiers._py__feature_version._ascii.ob_base),
  220|      2|        offsetof(struct _Py_global_strings, identifiers._py__field_types._ascii.ob_base),
  221|      2|        offsetof(struct _Py_global_strings, identifiers._py__fields_._ascii.ob_base),
  222|      2|        offsetof(struct _Py_global_strings, identifiers._py__filters._ascii.ob_base),
  223|      2|        offsetof(struct _Py_global_strings, identifiers._py__finalizing._ascii.ob_base),
  224|      2|        offsetof(struct _Py_global_strings, identifiers._py__find_and_load._ascii.ob_base),
  225|      2|        offsetof(struct _Py_global_strings, identifiers._py__find_and_load_lazy_submodule._ascii.ob_base),
  226|      2|        offsetof(struct _Py_global_strings, identifiers._py__fix_up_module._ascii.ob_base),
  227|      2|        offsetof(struct _Py_global_strings, identifiers._py__flags_._ascii.ob_base),
  228|      2|        offsetof(struct _Py_global_strings, identifiers._py__get_sourcefile._ascii.ob_base),
  229|      2|        offsetof(struct _Py_global_strings, identifiers._py__handle_fromlist._ascii.ob_base),
  230|      2|        offsetof(struct _Py_global_strings, identifiers._py__initializing._ascii.ob_base),
  231|      2|        offsetof(struct _Py_global_strings, identifiers._py__internal_use._ascii.ob_base),
  232|      2|        offsetof(struct _Py_global_strings, identifiers._py__io._ascii.ob_base),
  233|      2|        offsetof(struct _Py_global_strings, identifiers._py__is_text_encoding._ascii.ob_base),
  234|      2|        offsetof(struct _Py_global_strings, identifiers._py__isatty_open_only._ascii.ob_base),
  235|      2|        offsetof(struct _Py_global_strings, identifiers._py__length_._ascii.ob_base),
  236|      2|        offsetof(struct _Py_global_strings, identifiers._py__limbo._ascii.ob_base),
  237|      2|        offsetof(struct _Py_global_strings, identifiers._py__lock_unlock_module._ascii.ob_base),
  238|      2|        offsetof(struct _Py_global_strings, identifiers._py__loop._ascii.ob_base),
  239|      2|        offsetof(struct _Py_global_strings, identifiers._py__needs_com_addref_._ascii.ob_base),
  240|      2|        offsetof(struct _Py_global_strings, identifiers._py__only_immortal._ascii.ob_base),
  241|      2|        offsetof(struct _Py_global_strings, identifiers._py__restype_._ascii.ob_base),
  242|      2|        offsetof(struct _Py_global_strings, identifiers._py__showwarnmsg._ascii.ob_base),
  243|      2|        offsetof(struct _Py_global_strings, identifiers._py__shutdown._ascii.ob_base),
  244|      2|        offsetof(struct _Py_global_strings, identifiers._py__slotnames._ascii.ob_base),
  245|      2|        offsetof(struct _Py_global_strings, identifiers._py__strptime._ascii.ob_base),
  246|      2|        offsetof(struct _Py_global_strings, identifiers._py__strptime_datetime_date._ascii.ob_base),
  247|      2|        offsetof(struct _Py_global_strings, identifiers._py__strptime_datetime_datetime._ascii.ob_base),
  248|      2|        offsetof(struct _Py_global_strings, identifiers._py__strptime_datetime_time._ascii.ob_base),
  249|      2|        offsetof(struct _Py_global_strings, identifiers._py__type_._ascii.ob_base),
  250|      2|        offsetof(struct _Py_global_strings, identifiers._py__uninitialized_submodules._ascii.ob_base),
  251|      2|        offsetof(struct _Py_global_strings, identifiers._py__warn_unawaited_coroutine._ascii.ob_base),
  252|      2|        offsetof(struct _Py_global_strings, identifiers._py__xoptions._ascii.ob_base),
  253|      2|        offsetof(struct _Py_global_strings, identifiers._py_abs_tol._ascii.ob_base),
  254|      2|        offsetof(struct _Py_global_strings, identifiers._py_access._ascii.ob_base),
  255|      2|        offsetof(struct _Py_global_strings, identifiers._py_aclose._ascii.ob_base),
  256|      2|        offsetof(struct _Py_global_strings, identifiers._py_add._ascii.ob_base),
  257|      2|        offsetof(struct _Py_global_strings, identifiers._py_add_done_callback._ascii.ob_base),
  258|      2|        offsetof(struct _Py_global_strings, identifiers._py_adobe._ascii.ob_base),
  259|      2|        offsetof(struct _Py_global_strings, identifiers._py_after_in_child._ascii.ob_base),
  260|      2|        offsetof(struct _Py_global_strings, identifiers._py_after_in_parent._ascii.ob_base),
  261|      2|        offsetof(struct _Py_global_strings, identifiers._py_alias._ascii.ob_base),
  262|      2|        offsetof(struct _Py_global_strings, identifiers._py_align._ascii.ob_base),
  263|      2|        offsetof(struct _Py_global_strings, identifiers._py_all._ascii.ob_base),
  264|      2|        offsetof(struct _Py_global_strings, identifiers._py_all_interpreters._ascii.ob_base),
  265|      2|        offsetof(struct _Py_global_strings, identifiers._py_all_threads._ascii.ob_base),
  266|      2|        offsetof(struct _Py_global_strings, identifiers._py_allow_code._ascii.ob_base),
  267|      2|        offsetof(struct _Py_global_strings, identifiers._py_alphabet._ascii.ob_base),
  268|      2|        offsetof(struct _Py_global_strings, identifiers._py_any._ascii.ob_base),
  269|      2|        offsetof(struct _Py_global_strings, identifiers._py_append._ascii.ob_base),
  270|      2|        offsetof(struct _Py_global_strings, identifiers._py_arg._ascii.ob_base),
  271|      2|        offsetof(struct _Py_global_strings, identifiers._py_argdefs._ascii.ob_base),
  272|      2|        offsetof(struct _Py_global_strings, identifiers._py_args._ascii.ob_base),
  273|      2|        offsetof(struct _Py_global_strings, identifiers._py_arguments._ascii.ob_base),
  274|      2|        offsetof(struct _Py_global_strings, identifiers._py_argv._ascii.ob_base),
  275|      2|        offsetof(struct _Py_global_strings, identifiers._py_as_integer_ratio._ascii.ob_base),
  276|      2|        offsetof(struct _Py_global_strings, identifiers._py_asend._ascii.ob_base),
  277|      2|        offsetof(struct _Py_global_strings, identifiers._py_assoclen._ascii.ob_base),
  278|      2|        offsetof(struct _Py_global_strings, identifiers._py_ast._ascii.ob_base),
  279|      2|        offsetof(struct _Py_global_strings, identifiers._py_athrow._ascii.ob_base),
  280|      2|        offsetof(struct _Py_global_strings, identifiers._py_attr._ascii.ob_base),
  281|      2|        offsetof(struct _Py_global_strings, identifiers._py_attribute._ascii.ob_base),
  282|      2|        offsetof(struct _Py_global_strings, identifiers._py_autocommit._ascii.ob_base),
  283|      2|        offsetof(struct _Py_global_strings, identifiers._py_backtick._ascii.ob_base),
  284|      2|        offsetof(struct _Py_global_strings, identifiers._py_base._ascii.ob_base),
  285|      2|        offsetof(struct _Py_global_strings, identifiers._py_before._ascii.ob_base),
  286|      2|        offsetof(struct _Py_global_strings, identifiers._py_big._ascii.ob_base),
  287|      2|        offsetof(struct _Py_global_strings, identifiers._py_binary_form._ascii.ob_base),
  288|      2|        offsetof(struct _Py_global_strings, identifiers._py_bit_offset._ascii.ob_base),
  289|      2|        offsetof(struct _Py_global_strings, identifiers._py_bit_size._ascii.ob_base),
  290|      2|        offsetof(struct _Py_global_strings, identifiers._py_block._ascii.ob_base),
  291|      2|        offsetof(struct _Py_global_strings, identifiers._py_blocking._ascii.ob_base),
  292|      2|        offsetof(struct _Py_global_strings, identifiers._py_bound._ascii.ob_base),
  293|      2|        offsetof(struct _Py_global_strings, identifiers._py_buffer._ascii.ob_base),
  294|      2|        offsetof(struct _Py_global_strings, identifiers._py_buffer_callback._ascii.ob_base),
  295|      2|        offsetof(struct _Py_global_strings, identifiers._py_buffer_size._ascii.ob_base),
  296|      2|        offsetof(struct _Py_global_strings, identifiers._py_buffering._ascii.ob_base),
  297|      2|        offsetof(struct _Py_global_strings, identifiers._py_buffers._ascii.ob_base),
  298|      2|        offsetof(struct _Py_global_strings, identifiers._py_bufsize._ascii.ob_base),
  299|      2|        offsetof(struct _Py_global_strings, identifiers._py_builtins._ascii.ob_base),
  300|      2|        offsetof(struct _Py_global_strings, identifiers._py_byte_offset._ascii.ob_base),
  301|      2|        offsetof(struct _Py_global_strings, identifiers._py_byte_size._ascii.ob_base),
  302|      2|        offsetof(struct _Py_global_strings, identifiers._py_byteorder._ascii.ob_base),
  303|      2|        offsetof(struct _Py_global_strings, identifiers._py_bytes._ascii.ob_base),
  304|      2|        offsetof(struct _Py_global_strings, identifiers._py_bytes_per_sep._ascii.ob_base),
  305|      2|        offsetof(struct _Py_global_strings, identifiers._py_c_call._ascii.ob_base),
  306|      2|        offsetof(struct _Py_global_strings, identifiers._py_c_exception._ascii.ob_base),
  307|      2|        offsetof(struct _Py_global_strings, identifiers._py_c_parameter_type._ascii.ob_base),
  308|      2|        offsetof(struct _Py_global_strings, identifiers._py_c_return._ascii.ob_base),
  309|      2|        offsetof(struct _Py_global_strings, identifiers._py_c_stack._ascii.ob_base),
  310|      2|        offsetof(struct _Py_global_strings, identifiers._py_cache_frames._ascii.ob_base),
  311|      2|        offsetof(struct _Py_global_strings, identifiers._py_cached_datetime_module._ascii.ob_base),
  312|      2|        offsetof(struct _Py_global_strings, identifiers._py_cached_statements._ascii.ob_base),
  313|      2|        offsetof(struct _Py_global_strings, identifiers._py_cadata._ascii.ob_base),
  314|      2|        offsetof(struct _Py_global_strings, identifiers._py_cafile._ascii.ob_base),
  315|      2|        offsetof(struct _Py_global_strings, identifiers._py_call._ascii.ob_base),
  316|      2|        offsetof(struct _Py_global_strings, identifiers._py_call_exception_handler._ascii.ob_base),
  317|      2|        offsetof(struct _Py_global_strings, identifiers._py_call_soon._ascii.ob_base),
  318|      2|        offsetof(struct _Py_global_strings, identifiers._py_callable._ascii.ob_base),
  319|      2|        offsetof(struct _Py_global_strings, identifiers._py_callback._ascii.ob_base),
  320|      2|        offsetof(struct _Py_global_strings, identifiers._py_cancel._ascii.ob_base),
  321|      2|        offsetof(struct _Py_global_strings, identifiers._py_canonical._ascii.ob_base),
  322|      2|        offsetof(struct _Py_global_strings, identifiers._py_capath._ascii.ob_base),
  323|      2|        offsetof(struct _Py_global_strings, identifiers._py_capitals._ascii.ob_base),
  324|      2|        offsetof(struct _Py_global_strings, identifiers._py_capture_features._ascii.ob_base),
  325|      2|        offsetof(struct _Py_global_strings, identifiers._py_category._ascii.ob_base),
  326|      2|        offsetof(struct _Py_global_strings, identifiers._py_cb_type._ascii.ob_base),
  327|      2|        offsetof(struct _Py_global_strings, identifiers._py_certfile._ascii.ob_base),
  328|      2|        offsetof(struct _Py_global_strings, identifiers._py_chain._ascii.ob_base),
  329|      2|        offsetof(struct _Py_global_strings, identifiers._py_check_same_thread._ascii.ob_base),
  330|      2|        offsetof(struct _Py_global_strings, identifiers._py_clamp._ascii.ob_base),
  331|      2|        offsetof(struct _Py_global_strings, identifiers._py_clear._ascii.ob_base),
  332|      2|        offsetof(struct _Py_global_strings, identifiers._py_close._ascii.ob_base),
  333|      2|        offsetof(struct _Py_global_strings, identifiers._py_closed._ascii.ob_base),
  334|      2|        offsetof(struct _Py_global_strings, identifiers._py_closefd._ascii.ob_base),
  335|      2|        offsetof(struct _Py_global_strings, identifiers._py_closure._ascii.ob_base),
  336|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_argcount._ascii.ob_base),
  337|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_cellvars._ascii.ob_base),
  338|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_code._ascii.ob_base),
  339|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_consts._ascii.ob_base),
  340|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_exceptiontable._ascii.ob_base),
  341|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_filename._ascii.ob_base),
  342|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_firstlineno._ascii.ob_base),
  343|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_flags._ascii.ob_base),
  344|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_freevars._ascii.ob_base),
  345|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_kwonlyargcount._ascii.ob_base),
  346|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_linetable._ascii.ob_base),
  347|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_name._ascii.ob_base),
  348|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_names._ascii.ob_base),
  349|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_nlocals._ascii.ob_base),
  350|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_posonlyargcount._ascii.ob_base),
  351|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_qualname._ascii.ob_base),
  352|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_stacksize._ascii.ob_base),
  353|      2|        offsetof(struct _Py_global_strings, identifiers._py_co_varnames._ascii.ob_base),
  354|      2|        offsetof(struct _Py_global_strings, identifiers._py_code._ascii.ob_base),
  355|      2|        offsetof(struct _Py_global_strings, identifiers._py_col_offset._ascii.ob_base),
  356|      2|        offsetof(struct _Py_global_strings, identifiers._py_collector._ascii.ob_base),
  357|      2|        offsetof(struct _Py_global_strings, identifiers._py_command._ascii.ob_base),
  358|      2|        offsetof(struct _Py_global_strings, identifiers._py_comment_factory._ascii.ob_base),
  359|      2|        offsetof(struct _Py_global_strings, identifiers._py_compile_mode._ascii.ob_base),
  360|      2|        offsetof(struct _Py_global_strings, identifiers._py_compression._ascii.ob_base),
  361|      2|        offsetof(struct _Py_global_strings, identifiers._py_config._ascii.ob_base),
  362|      2|        offsetof(struct _Py_global_strings, identifiers._py_consts._ascii.ob_base),
  363|      2|        offsetof(struct _Py_global_strings, identifiers._py_context._ascii.ob_base),
  364|      2|        offsetof(struct _Py_global_strings, identifiers._py_contravariant._ascii.ob_base),
  365|      2|        offsetof(struct _Py_global_strings, identifiers._py_conversion._ascii.ob_base),
  366|      2|        offsetof(struct _Py_global_strings, identifiers._py_cookie._ascii.ob_base),
  367|      2|        offsetof(struct _Py_global_strings, identifiers._py_copy._ascii.ob_base),
  368|      2|        offsetof(struct _Py_global_strings, identifiers._py_copyreg._ascii.ob_base),
  369|      2|        offsetof(struct _Py_global_strings, identifiers._py_coro._ascii.ob_base),
  370|      2|        offsetof(struct _Py_global_strings, identifiers._py_count._ascii.ob_base),
  371|      2|        offsetof(struct _Py_global_strings, identifiers._py_covariant._ascii.ob_base),
  372|      2|        offsetof(struct _Py_global_strings, identifiers._py_ctx._ascii.ob_base),
  373|      2|        offsetof(struct _Py_global_strings, identifiers._py_cwd._ascii.ob_base),
  374|      2|        offsetof(struct _Py_global_strings, identifiers._py_d_parameter_type._ascii.ob_base),
  375|      2|        offsetof(struct _Py_global_strings, identifiers._py_daemon._ascii.ob_base),
  376|      2|        offsetof(struct _Py_global_strings, identifiers._py_data._ascii.ob_base),
  377|      2|        offsetof(struct _Py_global_strings, identifiers._py_database._ascii.ob_base),
  378|      2|        offsetof(struct _Py_global_strings, identifiers._py_date._ascii.ob_base),
  379|      2|        offsetof(struct _Py_global_strings, identifiers._py_day._ascii.ob_base),
  380|      2|        offsetof(struct _Py_global_strings, identifiers._py_days._ascii.ob_base),
  381|      2|        offsetof(struct _Py_global_strings, identifiers._py_debug._ascii.ob_base),
  382|      2|        offsetof(struct _Py_global_strings, identifiers._py_decode._ascii.ob_base),
  383|      2|        offsetof(struct _Py_global_strings, identifiers._py_decoder._ascii.ob_base),
  384|      2|        offsetof(struct _Py_global_strings, identifiers._py_default._ascii.ob_base),
  385|      2|        offsetof(struct _Py_global_strings, identifiers._py_defaultaction._ascii.ob_base),
  386|      2|        offsetof(struct _Py_global_strings, identifiers._py_delete._ascii.ob_base),
  387|      2|        offsetof(struct _Py_global_strings, identifiers._py_depth._ascii.ob_base),
  388|      2|        offsetof(struct _Py_global_strings, identifiers._py_desired_access._ascii.ob_base),
  389|      2|        offsetof(struct _Py_global_strings, identifiers._py_detect_types._ascii.ob_base),
  390|      2|        offsetof(struct _Py_global_strings, identifiers._py_deterministic._ascii.ob_base),
  391|      2|        offsetof(struct _Py_global_strings, identifiers._py_device._ascii.ob_base),
  392|      2|        offsetof(struct _Py_global_strings, identifiers._py_dict._ascii.ob_base),
  393|      2|        offsetof(struct _Py_global_strings, identifiers._py_difference_update._ascii.ob_base),
  394|      2|        offsetof(struct _Py_global_strings, identifiers._py_digest._ascii.ob_base),
  395|      2|        offsetof(struct _Py_global_strings, identifiers._py_digest_size._ascii.ob_base),
  396|      2|        offsetof(struct _Py_global_strings, identifiers._py_digestmod._ascii.ob_base),
  397|      2|        offsetof(struct _Py_global_strings, identifiers._py_dir_fd._ascii.ob_base),
  398|      2|        offsetof(struct _Py_global_strings, identifiers._py_discard._ascii.ob_base),
  399|      2|        offsetof(struct _Py_global_strings, identifiers._py_dispatch_table._ascii.ob_base),
  400|      2|        offsetof(struct _Py_global_strings, identifiers._py_displayhook._ascii.ob_base),
  401|      2|        offsetof(struct _Py_global_strings, identifiers._py_dklen._ascii.ob_base),
  402|      2|        offsetof(struct _Py_global_strings, identifiers._py_doc._ascii.ob_base),
  403|      2|        offsetof(struct _Py_global_strings, identifiers._py_done._ascii.ob_base),
  404|      2|        offsetof(struct _Py_global_strings, identifiers._py_dont_inherit._ascii.ob_base),
  405|      2|        offsetof(struct _Py_global_strings, identifiers._py_dst._ascii.ob_base),
  406|      2|        offsetof(struct _Py_global_strings, identifiers._py_dst_dir_fd._ascii.ob_base),
  407|      2|        offsetof(struct _Py_global_strings, identifiers._py_duration_sec._ascii.ob_base),
  408|      2|        offsetof(struct _Py_global_strings, identifiers._py_eager_start._ascii.ob_base),
  409|      2|        offsetof(struct _Py_global_strings, identifiers._py_effective_ids._ascii.ob_base),
  410|      2|        offsetof(struct _Py_global_strings, identifiers._py_element_factory._ascii.ob_base),
  411|      2|        offsetof(struct _Py_global_strings, identifiers._py_emptyerror._ascii.ob_base),
  412|      2|        offsetof(struct _Py_global_strings, identifiers._py_encode._ascii.ob_base),
  413|      2|        offsetof(struct _Py_global_strings, identifiers._py_encoding._ascii.ob_base),
  414|      2|        offsetof(struct _Py_global_strings, identifiers._py_end._ascii.ob_base),
  415|      2|        offsetof(struct _Py_global_strings, identifiers._py_end_col_offset._ascii.ob_base),
  416|      2|        offsetof(struct _Py_global_strings, identifiers._py_end_lineno._ascii.ob_base),
  417|      2|        offsetof(struct _Py_global_strings, identifiers._py_end_offset._ascii.ob_base),
  418|      2|        offsetof(struct _Py_global_strings, identifiers._py_endpos._ascii.ob_base),
  419|      2|        offsetof(struct _Py_global_strings, identifiers._py_entrypoint._ascii.ob_base),
  420|      2|        offsetof(struct _Py_global_strings, identifiers._py_env._ascii.ob_base),
  421|      2|        offsetof(struct _Py_global_strings, identifiers._py_error_rate._ascii.ob_base),
  422|      2|        offsetof(struct _Py_global_strings, identifiers._py_errors._ascii.ob_base),
  423|      2|        offsetof(struct _Py_global_strings, identifiers._py_event._ascii.ob_base),
  424|      2|        offsetof(struct _Py_global_strings, identifiers._py_eventmask._ascii.ob_base),
  425|      2|        offsetof(struct _Py_global_strings, identifiers._py_exc._ascii.ob_base),
  426|      2|        offsetof(struct _Py_global_strings, identifiers._py_exc_tb._ascii.ob_base),
  427|      2|        offsetof(struct _Py_global_strings, identifiers._py_exc_type._ascii.ob_base),
  428|      2|        offsetof(struct _Py_global_strings, identifiers._py_exc_val._ascii.ob_base),
  429|      2|        offsetof(struct _Py_global_strings, identifiers._py_exc_value._ascii.ob_base),
  430|      2|        offsetof(struct _Py_global_strings, identifiers._py_excepthook._ascii.ob_base),
  431|      2|        offsetof(struct _Py_global_strings, identifiers._py_exception._ascii.ob_base),
  432|      2|        offsetof(struct _Py_global_strings, identifiers._py_existing_file_name._ascii.ob_base),
  433|      2|        offsetof(struct _Py_global_strings, identifiers._py_exit._ascii.ob_base),
  434|      2|        offsetof(struct _Py_global_strings, identifiers._py_exp._ascii.ob_base),
  435|      2|        offsetof(struct _Py_global_strings, identifiers._py_expression._ascii.ob_base),
  436|      2|        offsetof(struct _Py_global_strings, identifiers._py_extend._ascii.ob_base),
  437|      2|        offsetof(struct _Py_global_strings, identifiers._py_extra_tokens._ascii.ob_base),
  438|      2|        offsetof(struct _Py_global_strings, identifiers._py_facility._ascii.ob_base),
  439|      2|        offsetof(struct _Py_global_strings, identifiers._py_factory._ascii.ob_base),
  440|      2|        offsetof(struct _Py_global_strings, identifiers._py_fallback._ascii.ob_base),
  441|      2|        offsetof(struct _Py_global_strings, identifiers._py_false._ascii.ob_base),
  442|      2|        offsetof(struct _Py_global_strings, identifiers._py_family._ascii.ob_base),
  443|      2|        offsetof(struct _Py_global_strings, identifiers._py_fanout._ascii.ob_base),
  444|      2|        offsetof(struct _Py_global_strings, identifiers._py_fd._ascii.ob_base),
  445|      2|        offsetof(struct _Py_global_strings, identifiers._py_fd2._ascii.ob_base),
  446|      2|        offsetof(struct _Py_global_strings, identifiers._py_fdel._ascii.ob_base),
  447|      2|        offsetof(struct _Py_global_strings, identifiers._py_fget._ascii.ob_base),
  448|      2|        offsetof(struct _Py_global_strings, identifiers._py_fields._ascii.ob_base),
  449|      2|        offsetof(struct _Py_global_strings, identifiers._py_file._ascii.ob_base),
  450|      2|        offsetof(struct _Py_global_strings, identifiers._py_file_actions._ascii.ob_base),
  451|      2|        offsetof(struct _Py_global_strings, identifiers._py_filename._ascii.ob_base),
  452|      2|        offsetof(struct _Py_global_strings, identifiers._py_fileno._ascii.ob_base),
  453|      2|        offsetof(struct _Py_global_strings, identifiers._py_filepath._ascii.ob_base),
  454|      2|        offsetof(struct _Py_global_strings, identifiers._py_fillvalue._ascii.ob_base),
  455|      2|        offsetof(struct _Py_global_strings, identifiers._py_filter._ascii.ob_base),
  456|      2|        offsetof(struct _Py_global_strings, identifiers._py_filters._ascii.ob_base),
  457|      2|        offsetof(struct _Py_global_strings, identifiers._py_final._ascii.ob_base),
  458|      2|        offsetof(struct _Py_global_strings, identifiers._py_find_class._ascii.ob_base),
  459|      2|        offsetof(struct _Py_global_strings, identifiers._py_fix_imports._ascii.ob_base),
  460|      2|        offsetof(struct _Py_global_strings, identifiers._py_flags._ascii.ob_base),
  461|      2|        offsetof(struct _Py_global_strings, identifiers._py_flush._ascii.ob_base),
  462|      2|        offsetof(struct _Py_global_strings, identifiers._py_fold._ascii.ob_base),
  463|      2|        offsetof(struct _Py_global_strings, identifiers._py_foldspaces._ascii.ob_base),
  464|      2|        offsetof(struct _Py_global_strings, identifiers._py_follow_symlinks._ascii.ob_base),
  465|      2|        offsetof(struct _Py_global_strings, identifiers._py_format._ascii.ob_base),
  466|      2|        offsetof(struct _Py_global_strings, identifiers._py_format_spec._ascii.ob_base),
  467|      2|        offsetof(struct _Py_global_strings, identifiers._py_frame_buffer._ascii.ob_base),
  468|      2|        offsetof(struct _Py_global_strings, identifiers._py_free_threaded._ascii.ob_base),
  469|      2|        offsetof(struct _Py_global_strings, identifiers._py_from_param._ascii.ob_base),
  470|      2|        offsetof(struct _Py_global_strings, identifiers._py_fromlist._ascii.ob_base),
  471|      2|        offsetof(struct _Py_global_strings, identifiers._py_fromtimestamp._ascii.ob_base),
  472|      2|        offsetof(struct _Py_global_strings, identifiers._py_fromutc._ascii.ob_base),
  473|      2|        offsetof(struct _Py_global_strings, identifiers._py_fset._ascii.ob_base),
  474|      2|        offsetof(struct _Py_global_strings, identifiers._py_fullerror._ascii.ob_base),
  475|      2|        offsetof(struct _Py_global_strings, identifiers._py_func._ascii.ob_base),
  476|      2|        offsetof(struct _Py_global_strings, identifiers._py_function._ascii.ob_base),
  477|      2|        offsetof(struct _Py_global_strings, identifiers._py_future._ascii.ob_base),
  478|      2|        offsetof(struct _Py_global_strings, identifiers._py_gc._ascii.ob_base),
  479|      2|        offsetof(struct _Py_global_strings, identifiers._py_generation._ascii.ob_base),
  480|      2|        offsetof(struct _Py_global_strings, identifiers._py_get._ascii.ob_base),
  481|      2|        offsetof(struct _Py_global_strings, identifiers._py_get_debug._ascii.ob_base),
  482|      2|        offsetof(struct _Py_global_strings, identifiers._py_get_loop._ascii.ob_base),
  483|      2|        offsetof(struct _Py_global_strings, identifiers._py_get_source._ascii.ob_base),
  484|      2|        offsetof(struct _Py_global_strings, identifiers._py_getattr._ascii.ob_base),
  485|      2|        offsetof(struct _Py_global_strings, identifiers._py_getstate._ascii.ob_base),
  486|      2|        offsetof(struct _Py_global_strings, identifiers._py_gid._ascii.ob_base),
  487|      2|        offsetof(struct _Py_global_strings, identifiers._py_globals._ascii.ob_base),
  488|      2|        offsetof(struct _Py_global_strings, identifiers._py_groupindex._ascii.ob_base),
  489|      2|        offsetof(struct _Py_global_strings, identifiers._py_groups._ascii.ob_base),
  490|      2|        offsetof(struct _Py_global_strings, identifiers._py_handle._ascii.ob_base),
  491|      2|        offsetof(struct _Py_global_strings, identifiers._py_handle_seq._ascii.ob_base),
  492|      2|        offsetof(struct _Py_global_strings, identifiers._py_has_location._ascii.ob_base),
  493|      2|        offsetof(struct _Py_global_strings, identifiers._py_hash_name._ascii.ob_base),
  494|      2|        offsetof(struct _Py_global_strings, identifiers._py_header._ascii.ob_base),
  495|      2|        offsetof(struct _Py_global_strings, identifiers._py_headers._ascii.ob_base),
  496|      2|        offsetof(struct _Py_global_strings, identifiers._py_hi._ascii.ob_base),
  497|      2|        offsetof(struct _Py_global_strings, identifiers._py_hook._ascii.ob_base),
  498|      2|        offsetof(struct _Py_global_strings, identifiers._py_host._ascii.ob_base),
  499|      2|        offsetof(struct _Py_global_strings, identifiers._py_hour._ascii.ob_base),
  500|      2|        offsetof(struct _Py_global_strings, identifiers._py_hours._ascii.ob_base),
  501|      2|        offsetof(struct _Py_global_strings, identifiers._py_id._ascii.ob_base),
  502|      2|        offsetof(struct _Py_global_strings, identifiers._py_ident._ascii.ob_base),
  503|      2|        offsetof(struct _Py_global_strings, identifiers._py_identity_hint._ascii.ob_base),
  504|      2|        offsetof(struct _Py_global_strings, identifiers._py_ignore._ascii.ob_base),
  505|      2|        offsetof(struct _Py_global_strings, identifiers._py_ignorechars._ascii.ob_base),
  506|      2|        offsetof(struct _Py_global_strings, identifiers._py_imag._ascii.ob_base),
  507|      2|        offsetof(struct _Py_global_strings, identifiers._py_implieslink._ascii.ob_base),
  508|      2|        offsetof(struct _Py_global_strings, identifiers._py_importlib._ascii.ob_base),
  509|      2|        offsetof(struct _Py_global_strings, identifiers._py_in_fd._ascii.ob_base),
  510|      2|        offsetof(struct _Py_global_strings, identifiers._py_include_aliases._ascii.ob_base),
  511|      2|        offsetof(struct _Py_global_strings, identifiers._py_incoming._ascii.ob_base),
  512|      2|        offsetof(struct _Py_global_strings, identifiers._py_index._ascii.ob_base),
  513|      2|        offsetof(struct _Py_global_strings, identifiers._py_indexgroup._ascii.ob_base),
  514|      2|        offsetof(struct _Py_global_strings, identifiers._py_inf._ascii.ob_base),
  515|      2|        offsetof(struct _Py_global_strings, identifiers._py_infer_variance._ascii.ob_base),
  516|      2|        offsetof(struct _Py_global_strings, identifiers._py_inherit_handle._ascii.ob_base),
  517|      2|        offsetof(struct _Py_global_strings, identifiers._py_inheritable._ascii.ob_base),
  518|      2|        offsetof(struct _Py_global_strings, identifiers._py_initial._ascii.ob_base),
  519|      2|        offsetof(struct _Py_global_strings, identifiers._py_initial_bytes._ascii.ob_base),
  520|      2|        offsetof(struct _Py_global_strings, identifiers._py_initial_owner._ascii.ob_base),
  521|      2|        offsetof(struct _Py_global_strings, identifiers._py_initial_state._ascii.ob_base),
  522|      2|        offsetof(struct _Py_global_strings, identifiers._py_initial_value._ascii.ob_base),
  523|      2|        offsetof(struct _Py_global_strings, identifiers._py_initval._ascii.ob_base),
  524|      2|        offsetof(struct _Py_global_strings, identifiers._py_inner_size._ascii.ob_base),
  525|      2|        offsetof(struct _Py_global_strings, identifiers._py_input._ascii.ob_base),
  526|      2|        offsetof(struct _Py_global_strings, identifiers._py_insert_comments._ascii.ob_base),
  527|      2|        offsetof(struct _Py_global_strings, identifiers._py_insert_pis._ascii.ob_base),
  528|      2|        offsetof(struct _Py_global_strings, identifiers._py_instructions._ascii.ob_base),
  529|      2|        offsetof(struct _Py_global_strings, identifiers._py_intern._ascii.ob_base),
  530|      2|        offsetof(struct _Py_global_strings, identifiers._py_intersection._ascii.ob_base),
  531|      2|        offsetof(struct _Py_global_strings, identifiers._py_interval._ascii.ob_base),
  532|      2|        offsetof(struct _Py_global_strings, identifiers._py_io._ascii.ob_base),
  533|      2|        offsetof(struct _Py_global_strings, identifiers._py_is_compress._ascii.ob_base),
  534|      2|        offsetof(struct _Py_global_strings, identifiers._py_is_raw._ascii.ob_base),
  535|      2|        offsetof(struct _Py_global_strings, identifiers._py_is_running._ascii.ob_base),
  536|      2|        offsetof(struct _Py_global_strings, identifiers._py_is_struct._ascii.ob_base),
  537|      2|        offsetof(struct _Py_global_strings, identifiers._py_isatty._ascii.ob_base),
  538|      2|        offsetof(struct _Py_global_strings, identifiers._py_isinstance._ascii.ob_base),
  539|      2|        offsetof(struct _Py_global_strings, identifiers._py_isoformat._ascii.ob_base),
  540|      2|        offsetof(struct _Py_global_strings, identifiers._py_isolation_level._ascii.ob_base),
  541|      2|        offsetof(struct _Py_global_strings, identifiers._py_istext._ascii.ob_base),
  542|      2|        offsetof(struct _Py_global_strings, identifiers._py_item._ascii.ob_base),
  543|      2|        offsetof(struct _Py_global_strings, identifiers._py_items._ascii.ob_base),
  544|      2|        offsetof(struct _Py_global_strings, identifiers._py_iter._ascii.ob_base),
  545|      2|        offsetof(struct _Py_global_strings, identifiers._py_iterable._ascii.ob_base),
  546|      2|        offsetof(struct _Py_global_strings, identifiers._py_iterations._ascii.ob_base),
  547|      2|        offsetof(struct _Py_global_strings, identifiers._py_iv._ascii.ob_base),
  548|      2|        offsetof(struct _Py_global_strings, identifiers._py_join._ascii.ob_base),
  549|      2|        offsetof(struct _Py_global_strings, identifiers._py_jump._ascii.ob_base),
  550|      2|        offsetof(struct _Py_global_strings, identifiers._py_keepends._ascii.ob_base),
  551|      2|        offsetof(struct _Py_global_strings, identifiers._py_key._ascii.ob_base),
  552|      2|        offsetof(struct _Py_global_strings, identifiers._py_keyfile._ascii.ob_base),
  553|      2|        offsetof(struct _Py_global_strings, identifiers._py_keys._ascii.ob_base),
  554|      2|        offsetof(struct _Py_global_strings, identifiers._py_kind._ascii.ob_base),
  555|      2|        offsetof(struct _Py_global_strings, identifiers._py_kw._ascii.ob_base),
  556|      2|        offsetof(struct _Py_global_strings, identifiers._py_kw1._ascii.ob_base),
  557|      2|        offsetof(struct _Py_global_strings, identifiers._py_kw2._ascii.ob_base),
  558|      2|        offsetof(struct _Py_global_strings, identifiers._py_kwargs._ascii.ob_base),
  559|      2|        offsetof(struct _Py_global_strings, identifiers._py_kwdefaults._ascii.ob_base),
  560|      2|        offsetof(struct _Py_global_strings, identifiers._py_label._ascii.ob_base),
  561|      2|        offsetof(struct _Py_global_strings, identifiers._py_last._ascii.ob_base),
  562|      2|        offsetof(struct _Py_global_strings, identifiers._py_last_exc._ascii.ob_base),
  563|      2|        offsetof(struct _Py_global_strings, identifiers._py_last_node._ascii.ob_base),
  564|      2|        offsetof(struct _Py_global_strings, identifiers._py_last_traceback._ascii.ob_base),
  565|      2|        offsetof(struct _Py_global_strings, identifiers._py_last_type._ascii.ob_base),
  566|      2|        offsetof(struct _Py_global_strings, identifiers._py_last_value._ascii.ob_base),
  567|      2|        offsetof(struct _Py_global_strings, identifiers._py_latin1._ascii.ob_base),
  568|      2|        offsetof(struct _Py_global_strings, identifiers._py_leaf_size._ascii.ob_base),
  569|      2|        offsetof(struct _Py_global_strings, identifiers._py_legacy._ascii.ob_base),
  570|      2|        offsetof(struct _Py_global_strings, identifiers._py_len._ascii.ob_base),
  571|      2|        offsetof(struct _Py_global_strings, identifiers._py_length._ascii.ob_base),
  572|      2|        offsetof(struct _Py_global_strings, identifiers._py_level._ascii.ob_base),
  573|      2|        offsetof(struct _Py_global_strings, identifiers._py_limit._ascii.ob_base),
  574|      2|        offsetof(struct _Py_global_strings, identifiers._py_line._ascii.ob_base),
  575|      2|        offsetof(struct _Py_global_strings, identifiers._py_line_buffering._ascii.ob_base),
  576|      2|        offsetof(struct _Py_global_strings, identifiers._py_lineno._ascii.ob_base),
  577|      2|        offsetof(struct _Py_global_strings, identifiers._py_little._ascii.ob_base),
  578|      2|        offsetof(struct _Py_global_strings, identifiers._py_lo._ascii.ob_base),
  579|      2|        offsetof(struct _Py_global_strings, identifiers._py_locale._ascii.ob_base),
  580|      2|        offsetof(struct _Py_global_strings, identifiers._py_locals._ascii.ob_base),
  581|      2|        offsetof(struct _Py_global_strings, identifiers._py_logoption._ascii.ob_base),
  582|      2|        offsetof(struct _Py_global_strings, identifiers._py_loop._ascii.ob_base),
  583|      2|        offsetof(struct _Py_global_strings, identifiers._py_manual_reset._ascii.ob_base),
  584|      2|        offsetof(struct _Py_global_strings, identifiers._py_mapping._ascii.ob_base),
  585|      2|        offsetof(struct _Py_global_strings, identifiers._py_mask._ascii.ob_base),
  586|      2|        offsetof(struct _Py_global_strings, identifiers._py_match._ascii.ob_base),
  587|      2|        offsetof(struct _Py_global_strings, identifiers._py_max_length._ascii.ob_base),
  588|      2|        offsetof(struct _Py_global_strings, identifiers._py_max_threads._ascii.ob_base),
  589|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxdigits._ascii.ob_base),
  590|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxevents._ascii.ob_base),
  591|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxlen._ascii.ob_base),
  592|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxmem._ascii.ob_base),
  593|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxsize._ascii.ob_base),
  594|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxsplit._ascii.ob_base),
  595|      2|        offsetof(struct _Py_global_strings, identifiers._py_maxvalue._ascii.ob_base),
  596|      2|        offsetof(struct _Py_global_strings, identifiers._py_memLevel._ascii.ob_base),
  597|      2|        offsetof(struct _Py_global_strings, identifiers._py_memlimit._ascii.ob_base),
  598|      2|        offsetof(struct _Py_global_strings, identifiers._py_message._ascii.ob_base),
  599|      2|        offsetof(struct _Py_global_strings, identifiers._py_metaclass._ascii.ob_base),
  600|      2|        offsetof(struct _Py_global_strings, identifiers._py_metadata._ascii.ob_base),
  601|      2|        offsetof(struct _Py_global_strings, identifiers._py_method._ascii.ob_base),
  602|      2|        offsetof(struct _Py_global_strings, identifiers._py_microsecond._ascii.ob_base),
  603|      2|        offsetof(struct _Py_global_strings, identifiers._py_microseconds._ascii.ob_base),
  604|      2|        offsetof(struct _Py_global_strings, identifiers._py_milliseconds._ascii.ob_base),
  605|      2|        offsetof(struct _Py_global_strings, identifiers._py_minute._ascii.ob_base),
  606|      2|        offsetof(struct _Py_global_strings, identifiers._py_minutes._ascii.ob_base),
  607|      2|        offsetof(struct _Py_global_strings, identifiers._py_missed_samples._ascii.ob_base),
  608|      2|        offsetof(struct _Py_global_strings, identifiers._py_mod._ascii.ob_base),
  609|      2|        offsetof(struct _Py_global_strings, identifiers._py_mode._ascii.ob_base),
  610|      2|        offsetof(struct _Py_global_strings, identifiers._py_module._ascii.ob_base),
  611|      2|        offsetof(struct _Py_global_strings, identifiers._py_module_globals._ascii.ob_base),
  612|      2|        offsetof(struct _Py_global_strings, identifiers._py_modules._ascii.ob_base),
  613|      2|        offsetof(struct _Py_global_strings, identifiers._py_modulo._ascii.ob_base),
  614|      2|        offsetof(struct _Py_global_strings, identifiers._py_month._ascii.ob_base),
  615|      2|        offsetof(struct _Py_global_strings, identifiers._py_mro._ascii.ob_base),
  616|      2|        offsetof(struct _Py_global_strings, identifiers._py_msg._ascii.ob_base),
  617|      2|        offsetof(struct _Py_global_strings, identifiers._py_mutex._ascii.ob_base),
  618|      2|        offsetof(struct _Py_global_strings, identifiers._py_mycmp._ascii.ob_base),
  619|      2|        offsetof(struct _Py_global_strings, identifiers._py_n_fields._ascii.ob_base),
  620|      2|        offsetof(struct _Py_global_strings, identifiers._py_n_sequence_fields._ascii.ob_base),
  621|      2|        offsetof(struct _Py_global_strings, identifiers._py_n_unnamed_fields._ascii.ob_base),
  622|      2|        offsetof(struct _Py_global_strings, identifiers._py_name._ascii.ob_base),
  623|      2|        offsetof(struct _Py_global_strings, identifiers._py_name_from._ascii.ob_base),
  624|      2|        offsetof(struct _Py_global_strings, identifiers._py_namespace_separator._ascii.ob_base),
  625|      2|        offsetof(struct _Py_global_strings, identifiers._py_namespaces._ascii.ob_base),
  626|      2|        offsetof(struct _Py_global_strings, identifiers._py_native._ascii.ob_base),
  627|      2|        offsetof(struct _Py_global_strings, identifiers._py_nbytes._ascii.ob_base),
  628|      2|        offsetof(struct _Py_global_strings, identifiers._py_ndigits._ascii.ob_base),
  629|      2|        offsetof(struct _Py_global_strings, identifiers._py_nested._ascii.ob_base),
  630|      2|        offsetof(struct _Py_global_strings, identifiers._py_new_file_name._ascii.ob_base),
  631|      2|        offsetof(struct _Py_global_strings, identifiers._py_new_limit._ascii.ob_base),
  632|      2|        offsetof(struct _Py_global_strings, identifiers._py_newline._ascii.ob_base),
  633|      2|        offsetof(struct _Py_global_strings, identifiers._py_newlines._ascii.ob_base),
  634|      2|        offsetof(struct _Py_global_strings, identifiers._py_next._ascii.ob_base),
  635|      2|        offsetof(struct _Py_global_strings, identifiers._py_nlocals._ascii.ob_base),
  636|      2|        offsetof(struct _Py_global_strings, identifiers._py_node_depth._ascii.ob_base),
  637|      2|        offsetof(struct _Py_global_strings, identifiers._py_node_offset._ascii.ob_base),
  638|      2|        offsetof(struct _Py_global_strings, identifiers._py_ns._ascii.ob_base),
  639|      2|        offsetof(struct _Py_global_strings, identifiers._py_nstype._ascii.ob_base),
  640|      2|        offsetof(struct _Py_global_strings, identifiers._py_nt._ascii.ob_base),
  641|      2|        offsetof(struct _Py_global_strings, identifiers._py_null._ascii.ob_base),
  642|      2|        offsetof(struct _Py_global_strings, identifiers._py_number._ascii.ob_base),
  643|      2|        offsetof(struct _Py_global_strings, identifiers._py_obj._ascii.ob_base),
  644|      2|        offsetof(struct _Py_global_strings, identifiers._py_object._ascii.ob_base),
  645|      2|        offsetof(struct _Py_global_strings, identifiers._py_offset._ascii.ob_base),
  646|      2|        offsetof(struct _Py_global_strings, identifiers._py_offset_dst._ascii.ob_base),
  647|      2|        offsetof(struct _Py_global_strings, identifiers._py_offset_src._ascii.ob_base),
  648|      2|        offsetof(struct _Py_global_strings, identifiers._py_on_type_read._ascii.ob_base),
  649|      2|        offsetof(struct _Py_global_strings, identifiers._py_onceregistry._ascii.ob_base),
  650|      2|        offsetof(struct _Py_global_strings, identifiers._py_only_active_thread._ascii.ob_base),
  651|      2|        offsetof(struct _Py_global_strings, identifiers._py_only_keys._ascii.ob_base),
  652|      2|        offsetof(struct _Py_global_strings, identifiers._py_op._ascii.ob_base),
  653|      2|        offsetof(struct _Py_global_strings, identifiers._py_oparg._ascii.ob_base),
  654|      2|        offsetof(struct _Py_global_strings, identifiers._py_opcode._ascii.ob_base),
  655|      2|        offsetof(struct _Py_global_strings, identifiers._py_opcodes._ascii.ob_base),
  656|      2|        offsetof(struct _Py_global_strings, identifiers._py_open._ascii.ob_base),
  657|      2|        offsetof(struct _Py_global_strings, identifiers._py_opener._ascii.ob_base),
  658|      2|        offsetof(struct _Py_global_strings, identifiers._py_operation._ascii.ob_base),
  659|      2|        offsetof(struct _Py_global_strings, identifiers._py_optimize._ascii.ob_base),
  660|      2|        offsetof(struct _Py_global_strings, identifiers._py_options._ascii.ob_base),
  661|      2|        offsetof(struct _Py_global_strings, identifiers._py_order._ascii.ob_base),
  662|      2|        offsetof(struct _Py_global_strings, identifiers._py_origin._ascii.ob_base),
  663|      2|        offsetof(struct _Py_global_strings, identifiers._py_other._ascii.ob_base),
  664|      2|        offsetof(struct _Py_global_strings, identifiers._py_out_fd._ascii.ob_base),
  665|      2|        offsetof(struct _Py_global_strings, identifiers._py_outgoing._ascii.ob_base),
  666|      2|        offsetof(struct _Py_global_strings, identifiers._py_outpath._ascii.ob_base),
  667|      2|        offsetof(struct _Py_global_strings, identifiers._py_overlapped._ascii.ob_base),
  668|      2|        offsetof(struct _Py_global_strings, identifiers._py_owner._ascii.ob_base),
  669|      2|        offsetof(struct _Py_global_strings, identifiers._py_pad._ascii.ob_base),
  670|      2|        offsetof(struct _Py_global_strings, identifiers._py_padded._ascii.ob_base),
  671|      2|        offsetof(struct _Py_global_strings, identifiers._py_pages._ascii.ob_base),
  672|      2|        offsetof(struct _Py_global_strings, identifiers._py_pair._ascii.ob_base),
  673|      2|        offsetof(struct _Py_global_strings, identifiers._py_parameter._ascii.ob_base),
  674|      2|        offsetof(struct _Py_global_strings, identifiers._py_parent._ascii.ob_base),
  675|      2|        offsetof(struct _Py_global_strings, identifiers._py_password._ascii.ob_base),
  676|      2|        offsetof(struct _Py_global_strings, identifiers._py_path._ascii.ob_base),
  677|      2|        offsetof(struct _Py_global_strings, identifiers._py_pattern._ascii.ob_base),
  678|      2|        offsetof(struct _Py_global_strings, identifiers._py_peek._ascii.ob_base),
  679|      2|        offsetof(struct _Py_global_strings, identifiers._py_persistent_id._ascii.ob_base),
  680|      2|        offsetof(struct _Py_global_strings, identifiers._py_persistent_load._ascii.ob_base),
  681|      2|        offsetof(struct _Py_global_strings, identifiers._py_person._ascii.ob_base),
  682|      2|        offsetof(struct _Py_global_strings, identifiers._py_pi_factory._ascii.ob_base),
  683|      2|        offsetof(struct _Py_global_strings, identifiers._py_pid._ascii.ob_base),
  684|      2|        offsetof(struct _Py_global_strings, identifiers._py_pidfd._ascii.ob_base),
  685|      2|        offsetof(struct _Py_global_strings, identifiers._py_pointer_bits._ascii.ob_base),
  686|      2|        offsetof(struct _Py_global_strings, identifiers._py_policy._ascii.ob_base),
  687|      2|        offsetof(struct _Py_global_strings, identifiers._py_port._ascii.ob_base),
  688|      2|        offsetof(struct _Py_global_strings, identifiers._py_pos._ascii.ob_base),
  689|      2|        offsetof(struct _Py_global_strings, identifiers._py_pos1._ascii.ob_base),
  690|      2|        offsetof(struct _Py_global_strings, identifiers._py_pos2._ascii.ob_base),
  691|      2|        offsetof(struct _Py_global_strings, identifiers._py_posix._ascii.ob_base),
  692|      2|        offsetof(struct _Py_global_strings, identifiers._py_prec._ascii.ob_base),
  693|      2|        offsetof(struct _Py_global_strings, identifiers._py_preserve_exc._ascii.ob_base),
  694|      2|        offsetof(struct _Py_global_strings, identifiers._py_print_file_and_line._ascii.ob_base),
  695|      2|        offsetof(struct _Py_global_strings, identifiers._py_priority._ascii.ob_base),
  696|      2|        offsetof(struct _Py_global_strings, identifiers._py_progress._ascii.ob_base),
  697|      2|        offsetof(struct _Py_global_strings, identifiers._py_progress_callback._ascii.ob_base),
  698|      2|        offsetof(struct _Py_global_strings, identifiers._py_progress_routine._ascii.ob_base),
  699|      2|        offsetof(struct _Py_global_strings, identifiers._py_proto._ascii.ob_base),
  700|      2|        offsetof(struct _Py_global_strings, identifiers._py_protocol._ascii.ob_base),
  701|      2|        offsetof(struct _Py_global_strings, identifiers._py_ps1._ascii.ob_base),
  702|      2|        offsetof(struct _Py_global_strings, identifiers._py_ps2._ascii.ob_base),
  703|      2|        offsetof(struct _Py_global_strings, identifiers._py_qid._ascii.ob_base),
  704|      2|        offsetof(struct _Py_global_strings, identifiers._py_qualname._ascii.ob_base),
  705|      2|        offsetof(struct _Py_global_strings, identifiers._py_query._ascii.ob_base),
  706|      2|        offsetof(struct _Py_global_strings, identifiers._py_queuetype._ascii.ob_base),
  707|      2|        offsetof(struct _Py_global_strings, identifiers._py_quotetabs._ascii.ob_base),
  708|      2|        offsetof(struct _Py_global_strings, identifiers._py_raw._ascii.ob_base),
  709|      2|        offsetof(struct _Py_global_strings, identifiers._py_read._ascii.ob_base),
  710|      2|        offsetof(struct _Py_global_strings, identifiers._py_read1._ascii.ob_base),
  711|      2|        offsetof(struct _Py_global_strings, identifiers._py_readable._ascii.ob_base),
  712|      2|        offsetof(struct _Py_global_strings, identifiers._py_readall._ascii.ob_base),
  713|      2|        offsetof(struct _Py_global_strings, identifiers._py_readinto._ascii.ob_base),
  714|      2|        offsetof(struct _Py_global_strings, identifiers._py_readinto1._ascii.ob_base),
  715|      2|        offsetof(struct _Py_global_strings, identifiers._py_readline._ascii.ob_base),
  716|      2|        offsetof(struct _Py_global_strings, identifiers._py_readonly._ascii.ob_base),
  717|      2|        offsetof(struct _Py_global_strings, identifiers._py_real._ascii.ob_base),
  718|      2|        offsetof(struct _Py_global_strings, identifiers._py_recursive._ascii.ob_base),
  719|      2|        offsetof(struct _Py_global_strings, identifiers._py_reducer_override._ascii.ob_base),
  720|      2|        offsetof(struct _Py_global_strings, identifiers._py_registry._ascii.ob_base),
  721|      2|        offsetof(struct _Py_global_strings, identifiers._py_rel_tol._ascii.ob_base),
  722|      2|        offsetof(struct _Py_global_strings, identifiers._py_release._ascii.ob_base),
  723|      2|        offsetof(struct _Py_global_strings, identifiers._py_reload._ascii.ob_base),
  724|      2|        offsetof(struct _Py_global_strings, identifiers._py_repeat._ascii.ob_base),
  725|      2|        offsetof(struct _Py_global_strings, identifiers._py_repl._ascii.ob_base),
  726|      2|        offsetof(struct _Py_global_strings, identifiers._py_replace._ascii.ob_base),
  727|      2|        offsetof(struct _Py_global_strings, identifiers._py_repr._ascii.ob_base),
  728|      2|        offsetof(struct _Py_global_strings, identifiers._py_reqrefs._ascii.ob_base),
  729|      2|        offsetof(struct _Py_global_strings, identifiers._py_require_ready._ascii.ob_base),
  730|      2|        offsetof(struct _Py_global_strings, identifiers._py_reserved._ascii.ob_base),
  731|      2|        offsetof(struct _Py_global_strings, identifiers._py_reset._ascii.ob_base),
  732|      2|        offsetof(struct _Py_global_strings, identifiers._py_resetids._ascii.ob_base),
  733|      2|        offsetof(struct _Py_global_strings, identifiers._py_restrict._ascii.ob_base),
  734|      2|        offsetof(struct _Py_global_strings, identifiers._py_return._ascii.ob_base),
  735|      2|        offsetof(struct _Py_global_strings, identifiers._py_reverse._ascii.ob_base),
  736|      2|        offsetof(struct _Py_global_strings, identifiers._py_reversed._ascii.ob_base),
  737|      2|        offsetof(struct _Py_global_strings, identifiers._py_rounding._ascii.ob_base),
  738|      2|        offsetof(struct _Py_global_strings, identifiers._py_salt._ascii.ob_base),
  739|      2|        offsetof(struct _Py_global_strings, identifiers._py_sample_interval_us._ascii.ob_base),
  740|      2|        offsetof(struct _Py_global_strings, identifiers._py_sample_rate._ascii.ob_base),
  741|      2|        offsetof(struct _Py_global_strings, identifiers._py_sched_priority._ascii.ob_base),
  742|      2|        offsetof(struct _Py_global_strings, identifiers._py_scheduler._ascii.ob_base),
  743|      2|        offsetof(struct _Py_global_strings, identifiers._py_script._ascii.ob_base),
  744|      2|        offsetof(struct _Py_global_strings, identifiers._py_second._ascii.ob_base),
  745|      2|        offsetof(struct _Py_global_strings, identifiers._py_seconds._ascii.ob_base),
  746|      2|        offsetof(struct _Py_global_strings, identifiers._py_security_attributes._ascii.ob_base),
  747|      2|        offsetof(struct _Py_global_strings, identifiers._py_seek._ascii.ob_base),
  748|      2|        offsetof(struct _Py_global_strings, identifiers._py_seekable._ascii.ob_base),
  749|      2|        offsetof(struct _Py_global_strings, identifiers._py_selectors._ascii.ob_base),
  750|      2|        offsetof(struct _Py_global_strings, identifiers._py_self._ascii.ob_base),
  751|      2|        offsetof(struct _Py_global_strings, identifiers._py_send._ascii.ob_base),
  752|      2|        offsetof(struct _Py_global_strings, identifiers._py_sep._ascii.ob_base),
  753|      2|        offsetof(struct _Py_global_strings, identifiers._py_sequence._ascii.ob_base),
  754|      2|        offsetof(struct _Py_global_strings, identifiers._py_server_hostname._ascii.ob_base),
  755|      2|        offsetof(struct _Py_global_strings, identifiers._py_server_side._ascii.ob_base),
  756|      2|        offsetof(struct _Py_global_strings, identifiers._py_session._ascii.ob_base),
  757|      2|        offsetof(struct _Py_global_strings, identifiers._py_setpgroup._ascii.ob_base),
  758|      2|        offsetof(struct _Py_global_strings, identifiers._py_setsid._ascii.ob_base),
  759|      2|        offsetof(struct _Py_global_strings, identifiers._py_setsigdef._ascii.ob_base),
  760|      2|        offsetof(struct _Py_global_strings, identifiers._py_setsigmask._ascii.ob_base),
  761|      2|        offsetof(struct _Py_global_strings, identifiers._py_setstate._ascii.ob_base),
  762|      2|        offsetof(struct _Py_global_strings, identifiers._py_shape._ascii.ob_base),
  763|      2|        offsetof(struct _Py_global_strings, identifiers._py_shared._ascii.ob_base),
  764|      2|        offsetof(struct _Py_global_strings, identifiers._py_short._ascii.ob_base),
  765|      2|        offsetof(struct _Py_global_strings, identifiers._py_show_cmd._ascii.ob_base),
  766|      2|        offsetof(struct _Py_global_strings, identifiers._py_signed._ascii.ob_base),
  767|      2|        offsetof(struct _Py_global_strings, identifiers._py_signum._ascii.ob_base),
  768|      2|        offsetof(struct _Py_global_strings, identifiers._py_size._ascii.ob_base),
  769|      2|        offsetof(struct _Py_global_strings, identifiers._py_sizehint._ascii.ob_base),
  770|      2|        offsetof(struct _Py_global_strings, identifiers._py_skip_file_prefixes._ascii.ob_base),
  771|      2|        offsetof(struct _Py_global_strings, identifiers._py_skip_non_matching_threads._ascii.ob_base),
  772|      2|        offsetof(struct _Py_global_strings, identifiers._py_sleep._ascii.ob_base),
  773|      2|        offsetof(struct _Py_global_strings, identifiers._py_sock._ascii.ob_base),
  774|      2|        offsetof(struct _Py_global_strings, identifiers._py_sort._ascii.ob_base),
  775|      2|        offsetof(struct _Py_global_strings, identifiers._py_source._ascii.ob_base),
  776|      2|        offsetof(struct _Py_global_strings, identifiers._py_source_traceback._ascii.ob_base),
  777|      2|        offsetof(struct _Py_global_strings, identifiers._py_spam._ascii.ob_base),
  778|      2|        offsetof(struct _Py_global_strings, identifiers._py_src._ascii.ob_base),
  779|      2|        offsetof(struct _Py_global_strings, identifiers._py_src_dir_fd._ascii.ob_base),
  780|      2|        offsetof(struct _Py_global_strings, identifiers._py_stack_frames._ascii.ob_base),
  781|      2|        offsetof(struct _Py_global_strings, identifiers._py_stacklevel._ascii.ob_base),
  782|      2|        offsetof(struct _Py_global_strings, identifiers._py_start._ascii.ob_base),
  783|      2|        offsetof(struct _Py_global_strings, identifiers._py_start_time_us._ascii.ob_base),
  784|      2|        offsetof(struct _Py_global_strings, identifiers._py_statement._ascii.ob_base),
  785|      2|        offsetof(struct _Py_global_strings, identifiers._py_stats._ascii.ob_base),
  786|      2|        offsetof(struct _Py_global_strings, identifiers._py_status._ascii.ob_base),
  787|      2|        offsetof(struct _Py_global_strings, identifiers._py_stderr._ascii.ob_base),
  788|      2|        offsetof(struct _Py_global_strings, identifiers._py_stdin._ascii.ob_base),
  789|      2|        offsetof(struct _Py_global_strings, identifiers._py_stdout._ascii.ob_base),
  790|      2|        offsetof(struct _Py_global_strings, identifiers._py_step._ascii.ob_base),
  791|      2|        offsetof(struct _Py_global_strings, identifiers._py_steps._ascii.ob_base),
  792|      2|        offsetof(struct _Py_global_strings, identifiers._py_stop_exception._ascii.ob_base),
  793|      2|        offsetof(struct _Py_global_strings, identifiers._py_stop_value._ascii.ob_base),
  794|      2|        offsetof(struct _Py_global_strings, identifiers._py_store_name._ascii.ob_base),
  795|      2|        offsetof(struct _Py_global_strings, identifiers._py_strategy._ascii.ob_base),
  796|      2|        offsetof(struct _Py_global_strings, identifiers._py_strftime._ascii.ob_base),
  797|      2|        offsetof(struct _Py_global_strings, identifiers._py_strict._ascii.ob_base),
  798|      2|        offsetof(struct _Py_global_strings, identifiers._py_strict_mode._ascii.ob_base),
  799|      2|        offsetof(struct _Py_global_strings, identifiers._py_string._ascii.ob_base),
  800|      2|        offsetof(struct _Py_global_strings, identifiers._py_sub_key._ascii.ob_base),
  801|      2|        offsetof(struct _Py_global_strings, identifiers._py_subcalls._ascii.ob_base),
  802|      2|        offsetof(struct _Py_global_strings, identifiers._py_symmetric_difference_update._ascii.ob_base),
  803|      2|        offsetof(struct _Py_global_strings, identifiers._py_tabsize._ascii.ob_base),
  804|      2|        offsetof(struct _Py_global_strings, identifiers._py_tag._ascii.ob_base),
  805|      2|        offsetof(struct _Py_global_strings, identifiers._py_take_bytes._ascii.ob_base),
  806|      2|        offsetof(struct _Py_global_strings, identifiers._py_target._ascii.ob_base),
  807|      2|        offsetof(struct _Py_global_strings, identifiers._py_target_is_directory._ascii.ob_base),
  808|      2|        offsetof(struct _Py_global_strings, identifiers._py_targetfd._ascii.ob_base),
  809|      2|        offsetof(struct _Py_global_strings, identifiers._py_task._ascii.ob_base),
  810|      2|        offsetof(struct _Py_global_strings, identifiers._py_tb_frame._ascii.ob_base),
  811|      2|        offsetof(struct _Py_global_strings, identifiers._py_tb_lasti._ascii.ob_base),
  812|      2|        offsetof(struct _Py_global_strings, identifiers._py_tb_lineno._ascii.ob_base),
  813|      2|        offsetof(struct _Py_global_strings, identifiers._py_tb_next._ascii.ob_base),
  814|      2|        offsetof(struct _Py_global_strings, identifiers._py_tell._ascii.ob_base),
  815|      2|        offsetof(struct _Py_global_strings, identifiers._py_template._ascii.ob_base),
  816|      2|        offsetof(struct _Py_global_strings, identifiers._py_term._ascii.ob_base),
  817|      2|        offsetof(struct _Py_global_strings, identifiers._py_text._ascii.ob_base),
  818|      2|        offsetof(struct _Py_global_strings, identifiers._py_third._ascii.ob_base),
  819|      2|        offsetof(struct _Py_global_strings, identifiers._py_threading._ascii.ob_base),
  820|      2|        offsetof(struct _Py_global_strings, identifiers._py_throw._ascii.ob_base),
  821|      2|        offsetof(struct _Py_global_strings, identifiers._py_time._ascii.ob_base),
  822|      2|        offsetof(struct _Py_global_strings, identifiers._py_timeout._ascii.ob_base),
  823|      2|        offsetof(struct _Py_global_strings, identifiers._py_timer._ascii.ob_base),
  824|      2|        offsetof(struct _Py_global_strings, identifiers._py_times._ascii.ob_base),
  825|      2|        offsetof(struct _Py_global_strings, identifiers._py_timespec._ascii.ob_base),
  826|      2|        offsetof(struct _Py_global_strings, identifiers._py_timestamp._ascii.ob_base),
  827|      2|        offsetof(struct _Py_global_strings, identifiers._py_timestamp_us._ascii.ob_base),
  828|      2|        offsetof(struct _Py_global_strings, identifiers._py_timetuple._ascii.ob_base),
  829|      2|        offsetof(struct _Py_global_strings, identifiers._py_timeunit._ascii.ob_base),
  830|      2|        offsetof(struct _Py_global_strings, identifiers._py_top._ascii.ob_base),
  831|      2|        offsetof(struct _Py_global_strings, identifiers._py_traceback._ascii.ob_base),
  832|      2|        offsetof(struct _Py_global_strings, identifiers._py_trailers._ascii.ob_base),
  833|      2|        offsetof(struct _Py_global_strings, identifiers._py_translate._ascii.ob_base),
  834|      2|        offsetof(struct _Py_global_strings, identifiers._py_traps._ascii.ob_base),
  835|      2|        offsetof(struct _Py_global_strings, identifiers._py_true._ascii.ob_base),
  836|      2|        offsetof(struct _Py_global_strings, identifiers._py_truncate._ascii.ob_base),
  837|      2|        offsetof(struct _Py_global_strings, identifiers._py_twice._ascii.ob_base),
  838|      2|        offsetof(struct _Py_global_strings, identifiers._py_txt._ascii.ob_base),
  839|      2|        offsetof(struct _Py_global_strings, identifiers._py_type._ascii.ob_base),
  840|      2|        offsetof(struct _Py_global_strings, identifiers._py_type_params._ascii.ob_base),
  841|      2|        offsetof(struct _Py_global_strings, identifiers._py_tz._ascii.ob_base),
  842|      2|        offsetof(struct _Py_global_strings, identifiers._py_tzinfo._ascii.ob_base),
  843|      2|        offsetof(struct _Py_global_strings, identifiers._py_tzname._ascii.ob_base),
  844|      2|        offsetof(struct _Py_global_strings, identifiers._py_uid._ascii.ob_base),
  845|      2|        offsetof(struct _Py_global_strings, identifiers._py_unboundop._ascii.ob_base),
  846|      2|        offsetof(struct _Py_global_strings, identifiers._py_unlink._ascii.ob_base),
  847|      2|        offsetof(struct _Py_global_strings, identifiers._py_unraisablehook._ascii.ob_base),
  848|      2|        offsetof(struct _Py_global_strings, identifiers._py_updates._ascii.ob_base),
  849|      2|        offsetof(struct _Py_global_strings, identifiers._py_uri._ascii.ob_base),
  850|      2|        offsetof(struct _Py_global_strings, identifiers._py_usedforsecurity._ascii.ob_base),
  851|      2|        offsetof(struct _Py_global_strings, identifiers._py_utcoffset._ascii.ob_base),
  852|      2|        offsetof(struct _Py_global_strings, identifiers._py_value._ascii.ob_base),
  853|      2|        offsetof(struct _Py_global_strings, identifiers._py_values._ascii.ob_base),
  854|      2|        offsetof(struct _Py_global_strings, identifiers._py_version._ascii.ob_base),
  855|      2|        offsetof(struct _Py_global_strings, identifiers._py_volume._ascii.ob_base),
  856|      2|        offsetof(struct _Py_global_strings, identifiers._py_wait_all._ascii.ob_base),
  857|      2|        offsetof(struct _Py_global_strings, identifiers._py_warn_on_full_buffer._ascii.ob_base),
  858|      2|        offsetof(struct _Py_global_strings, identifiers._py_warnings._ascii.ob_base),
  859|      2|        offsetof(struct _Py_global_strings, identifiers._py_warnoptions._ascii.ob_base),
  860|      2|        offsetof(struct _Py_global_strings, identifiers._py_wbits._ascii.ob_base),
  861|      2|        offsetof(struct _Py_global_strings, identifiers._py_week._ascii.ob_base),
  862|      2|        offsetof(struct _Py_global_strings, identifiers._py_weekday._ascii.ob_base),
  863|      2|        offsetof(struct _Py_global_strings, identifiers._py_weeks._ascii.ob_base),
  864|      2|        offsetof(struct _Py_global_strings, identifiers._py_which._ascii.ob_base),
  865|      2|        offsetof(struct _Py_global_strings, identifiers._py_who._ascii.ob_base),
  866|      2|        offsetof(struct _Py_global_strings, identifiers._py_withdata._ascii.ob_base),
  867|      2|        offsetof(struct _Py_global_strings, identifiers._py_wrapcol._ascii.ob_base),
  868|      2|        offsetof(struct _Py_global_strings, identifiers._py_writable._ascii.ob_base),
  869|      2|        offsetof(struct _Py_global_strings, identifiers._py_write._ascii.ob_base),
  870|      2|        offsetof(struct _Py_global_strings, identifiers._py_write_through._ascii.ob_base),
  871|      2|        offsetof(struct _Py_global_strings, identifiers._py_year._ascii.ob_base),
  872|      2|        offsetof(struct _Py_global_strings, identifiers._py_zdict._ascii.ob_base),
  873|      2|        offsetof(struct _Py_global_strings, identifiers._py_zstd_dict._ascii.ob_base),
  874|      2|        offsetof(struct _Py_global_strings, literals._py_empty._ascii.ob_base),
  875|      2|        offsetof(struct _Py_global_strings, literals._py_dbl_percent._ascii.ob_base),
  876|      2|        offsetof(struct _Py_global_strings, literals._py_dot_locals._ascii.ob_base),
  877|      2|        offsetof(struct _Py_global_strings, literals._py_defaults._ascii.ob_base),
  878|      2|        offsetof(struct _Py_global_strings, literals._py_format._ascii.ob_base),
  879|      2|        offsetof(struct _Py_global_strings, literals._py_generic_base._ascii.ob_base),
  880|      2|        offsetof(struct _Py_global_strings, literals._py_kwdefaults._ascii.ob_base),
  881|      2|        offsetof(struct _Py_global_strings, literals._py_type_params._ascii.ob_base),
  882|      2|        offsetof(struct _Py_global_strings, literals._py_str_replace_inf._ascii.ob_base),
  883|      2|        offsetof(struct _Py_global_strings, literals._py_gc._ascii.ob_base),
  884|      2|        offsetof(struct _Py_global_strings, literals._py_anon_null._ascii.ob_base),
  885|      2|        offsetof(struct _Py_global_strings, literals._py_anon_dictcomp._ascii.ob_base),
  886|      2|        offsetof(struct _Py_global_strings, literals._py_anon_genexpr._ascii.ob_base),
  887|      2|        offsetof(struct _Py_global_strings, literals._py_anon_lambda._ascii.ob_base),
  888|      2|        offsetof(struct _Py_global_strings, literals._py_anon_listcomp._ascii.ob_base),
  889|      2|        offsetof(struct _Py_global_strings, literals._py_anon_module._ascii.ob_base),
  890|      2|        offsetof(struct _Py_global_strings, literals._py_native._ascii.ob_base),
  891|      2|        offsetof(struct _Py_global_strings, literals._py_anon_setcomp._ascii.ob_base),
  892|      2|        offsetof(struct _Py_global_strings, literals._py_anon_string._ascii.ob_base),
  893|      2|        offsetof(struct _Py_global_strings, literals._py_anon_unknown._ascii.ob_base),
  894|      2|        offsetof(struct _Py_global_strings, literals._py_json_decoder._ascii.ob_base),
  895|      2|        offsetof(struct _Py_global_strings, literals._py_list_err._ascii.ob_base),
  896|      2|        offsetof(struct _Py_global_strings, literals._py_utf_8._ascii.ob_base),
  897|      2|        offsetof(struct _Py_global_strings, literals._py_dbl_open_br._ascii.ob_base),
  898|      2|        offsetof(struct _Py_global_strings, literals._py_dbl_close_br._ascii.ob_base),
  899|      2|    };
  900|      2|    char *base = (char *)&_Py_SINGLETON(strings);
  ------------------
  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
  901|  1.76k|    for (size_t i = 0; i < Py_ARRAY_LENGTH(offsets); i++) {
  ------------------
  |  |  221|  1.76k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (901:24): [True: 1.76k, False: 2]
  ------------------
  902|  1.76k|        PyObject *string = (PyObject *)(base + offsets[i]);
  903|  1.76k|        _PyUnicode_InternStatic(interp, &string);
  904|  1.76k|        assert(_PyUnicode_CheckConsistency(string, 1));
  ------------------
  |  Branch (904:9): [True: 1.76k, False: 0]
  ------------------
  905|  1.76k|        assert(PyUnicode_GET_LENGTH(string) != 1);
  ------------------
  |  Branch (905:9): [True: 1.76k, False: 0]
  ------------------
  906|  1.76k|    }
  907|      2|}

typeobject.c:_PyWeakref_GET_REF:
   73|      8|{
   74|      8|    assert(PyWeakref_Check(ref_obj));
  ------------------
  |  Branch (74:5): [True: 0, False: 0]
  |  Branch (74:5): [True: 0, False: 0]
  |  Branch (74:5): [True: 8, False: 0]
  ------------------
   75|      8|    PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj);
  ------------------
  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   76|       |
   77|      8|    PyObject *obj = FT_ATOMIC_LOAD_PTR(ref->wr_object);
  ------------------
  |  |  145|      8|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
   78|      8|    if (obj == Py_None) {
  ------------------
  |  |  616|      8|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (78:9): [True: 0, False: 8]
  ------------------
   79|       |        // clear_weakref() was called
   80|      0|        return NULL;
   81|      0|    }
   82|       |
   83|      8|    LOCK_WEAKREFS(obj);
   84|       |#ifdef Py_GIL_DISABLED
   85|       |    if (ref->wr_object == Py_None) {
   86|       |        // clear_weakref() was called
   87|       |        UNLOCK_WEAKREFS(obj);
   88|       |        return NULL;
   89|       |    }
   90|       |#endif
   91|      8|    if (_Py_TryIncref(obj)) {
  ------------------
  |  Branch (91:9): [True: 8, False: 0]
  ------------------
   92|      8|        UNLOCK_WEAKREFS(obj);
   93|      8|        return obj;
   94|      8|    }
   95|      0|    UNLOCK_WEAKREFS(obj);
   96|       |    return NULL;
   97|      8|}
weakrefobject.c:_PyWeakref_GET_REF:
   73|    634|{
   74|    634|    assert(PyWeakref_Check(ref_obj));
  ------------------
  |  Branch (74:5): [True: 0, False: 0]
  |  Branch (74:5): [True: 0, False: 0]
  |  Branch (74:5): [True: 634, False: 0]
  ------------------
   75|    634|    PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj);
  ------------------
  |  |   37|    634|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   76|       |
   77|    634|    PyObject *obj = FT_ATOMIC_LOAD_PTR(ref->wr_object);
  ------------------
  |  |  145|    634|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
   78|    634|    if (obj == Py_None) {
  ------------------
  |  |  616|    634|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (78:9): [True: 0, False: 634]
  ------------------
   79|       |        // clear_weakref() was called
   80|      0|        return NULL;
   81|      0|    }
   82|       |
   83|    634|    LOCK_WEAKREFS(obj);
   84|       |#ifdef Py_GIL_DISABLED
   85|       |    if (ref->wr_object == Py_None) {
   86|       |        // clear_weakref() was called
   87|       |        UNLOCK_WEAKREFS(obj);
   88|       |        return NULL;
   89|       |    }
   90|       |#endif
   91|    634|    if (_Py_TryIncref(obj)) {
  ------------------
  |  Branch (91:9): [True: 634, False: 0]
  ------------------
   92|    634|        UNLOCK_WEAKREFS(obj);
   93|    634|        return obj;
   94|    634|    }
   95|      0|    UNLOCK_WEAKREFS(obj);
   96|       |    return NULL;
   97|    634|}
import.c:_PyWeakref_GET_REF:
   73|      2|{
   74|      2|    assert(PyWeakref_Check(ref_obj));
  ------------------
  |  Branch (74:5): [True: 0, False: 0]
  |  Branch (74:5): [True: 0, False: 0]
  |  Branch (74:5): [True: 2, False: 0]
  ------------------
   75|      2|    PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj);
  ------------------
  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
   76|       |
   77|      2|    PyObject *obj = FT_ATOMIC_LOAD_PTR(ref->wr_object);
  ------------------
  |  |  145|      2|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
   78|      2|    if (obj == Py_None) {
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (78:9): [True: 0, False: 2]
  ------------------
   79|       |        // clear_weakref() was called
   80|      0|        return NULL;
   81|      0|    }
   82|       |
   83|      2|    LOCK_WEAKREFS(obj);
   84|       |#ifdef Py_GIL_DISABLED
   85|       |    if (ref->wr_object == Py_None) {
   86|       |        // clear_weakref() was called
   87|       |        UNLOCK_WEAKREFS(obj);
   88|       |        return NULL;
   89|       |    }
   90|       |#endif
   91|      2|    if (_Py_TryIncref(obj)) {
  ------------------
  |  Branch (91:9): [True: 2, False: 0]
  ------------------
   92|      2|        UNLOCK_WEAKREFS(obj);
   93|      2|        return obj;
   94|      2|    }
   95|      0|    UNLOCK_WEAKREFS(obj);
   96|       |    return NULL;
   97|      2|}
_weakref.c:_PyWeakref_IS_DEAD:
  100|    367|{
  101|    367|    assert(PyWeakref_Check(ref_obj));
  ------------------
  |  Branch (101:5): [True: 0, False: 0]
  |  Branch (101:5): [True: 0, False: 0]
  |  Branch (101:5): [True: 367, False: 0]
  ------------------
  102|    367|    int ret = 0;
  103|    367|    PyWeakReference *ref = _Py_CAST(PyWeakReference*, ref_obj);
  ------------------
  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  104|    367|    PyObject *obj = FT_ATOMIC_LOAD_PTR(ref->wr_object);
  ------------------
  |  |  145|    367|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
  105|    367|    if (obj == Py_None) {
  ------------------
  |  |  616|    367|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (105:9): [True: 367, False: 0]
  ------------------
  106|       |        // clear_weakref() was called
  107|    367|        ret = 1;
  108|    367|    }
  109|      0|    else {
  110|      0|        LOCK_WEAKREFS(obj);
  111|       |        // See _PyWeakref_GET_REF() for the rationale of this test
  112|       |#ifdef Py_GIL_DISABLED
  113|       |        ret = (ref->wr_object == Py_None) || _is_dead(obj);
  114|       |#else
  115|      0|        ret = _is_dead(obj);
  116|      0|#endif
  117|      0|        UNLOCK_WEAKREFS(obj);
  118|      0|    }
  119|    367|    return ret;
  120|    367|}

exceptions.c:PyType_Check:
  762|   107k|static inline int PyType_Check(PyObject *op) {
  763|   107k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   107k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   107k|}
exceptions.c:PyType_HasFeature:
  749|   865k|{
  750|   865k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   865k|    flags = type->tp_flags;
  756|   865k|#endif
  757|   865k|    return ((flags & feature) != 0);
  758|   865k|}
exceptions.c:_Py_SIZE_impl:
  240|  76.6k|{
  241|  76.6k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 76.6k, False: 0]
  ------------------
  242|  76.6k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 76.6k, False: 0]
  ------------------
  243|  76.6k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  76.6k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  76.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  76.6k|}
exceptions.c:_Py_TYPE_impl:
  233|  1.46M|{
  234|  1.46M|    return ob->ob_type;
  235|  1.46M|}
exceptions.c:PyObject_TypeCheck:
  374|   126k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|   126k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|   252k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   126k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   126k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 28.1k, False: 97.9k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  97.9k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  97.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 97.9k, False: 0]
  ------------------
  376|   126k|}
exceptions.c:_Py_IS_TYPE_impl:
  248|   174k|{
  249|   174k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   174k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   174k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   174k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   174k|}
genericaliasobject.c:PyType_HasFeature:
  749|     79|{
  750|     79|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     79|    flags = type->tp_flags;
  756|     79|#endif
  757|     79|    return ((flags & feature) != 0);
  758|     79|}
genericaliasobject.c:_Py_TYPE_impl:
  233|     84|{
  234|     84|    return ob->ob_type;
  235|     84|}
listobject.c:_Py_SET_SIZE_impl:
  254|  5.79M|{
  255|  5.79M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 5.79M, False: 0]
  ------------------
  256|  5.79M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 5.79M, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|  5.79M|    ob->ob_size = size;
  261|  5.79M|#endif
  262|  5.79M|}
listobject.c:PyType_HasFeature:
  749|  18.8M|{
  750|  18.8M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  18.8M|    flags = type->tp_flags;
  756|  18.8M|#endif
  757|  18.8M|    return ((flags & feature) != 0);
  758|  18.8M|}
listobject.c:_Py_TYPE_impl:
  233|  50.2M|{
  234|  50.2M|    return ob->ob_type;
  235|  50.2M|}
listobject.c:_Py_SIZE_impl:
  240|  8.07M|{
  241|  8.07M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 8.07M, False: 0]
  ------------------
  242|  8.07M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 8.07M, False: 0]
  ------------------
  243|  8.07M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  8.07M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  8.07M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  8.07M|}
listobject.c:_Py_IS_TYPE_impl:
  248|  3.13M|{
  249|  3.13M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  3.13M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  3.13M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.13M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  3.13M|}
listobject.c:PyType_Check:
  762|    362|static inline int PyType_Check(PyObject *op) {
  763|    362|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|    362|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|    362|}
longobject.c:Py_SET_TYPE:
  206|  1.24M|{
  207|  1.24M|    ob->ob_type = type;
  208|  1.24M|}
longobject.c:PyType_HasFeature:
  749|   735M|{
  750|   735M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   735M|    flags = type->tp_flags;
  756|   735M|#endif
  757|   735M|    return ((flags & feature) != 0);
  758|   735M|}
longobject.c:_Py_TYPE_impl:
  233|   175M|{
  234|   175M|    return ob->ob_type;
  235|   175M|}
longobject.c:_Py_IS_TYPE_impl:
  248|  13.6M|{
  249|  13.6M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  13.6M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  13.6M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  13.6M|}
longobject.c:_Py_SIZE_impl:
  240|    551|{
  241|    551|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 551, False: 0]
  ------------------
  242|    551|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 551, False: 0]
  ------------------
  243|    551|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    551|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    551|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    551|}
longobject.c:PyObject_TypeCheck:
  374|    312|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    312|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|    624|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    312|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    312|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 312, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    312|}
longobject.c:PyType_Check:
  762|    104|static inline int PyType_Check(PyObject *op) {
  763|    104|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|    104|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|    104|}
dictobject.c:PyType_HasFeature:
  749|  52.0M|{
  750|  52.0M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  52.0M|    flags = type->tp_flags;
  756|  52.0M|#endif
  757|  52.0M|    return ((flags & feature) != 0);
  758|  52.0M|}
dictobject.c:_Py_TYPE_impl:
  233|   117M|{
  234|   117M|    return ob->ob_type;
  235|   117M|}
dictobject.c:PyObject_TypeCheck:
  374|  11.5M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  11.5M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  23.1M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  11.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 315, False: 11.5M]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  11.5M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  11.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 11.5M]
  ------------------
  376|  11.5M|}
dictobject.c:_Py_IS_TYPE_impl:
  248|  50.1M|{
  249|  50.1M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  50.1M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.1M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  50.1M|}
dictobject.c:_Py_SIZE_impl:
  240|  1.68k|{
  241|  1.68k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 1.68k, False: 0]
  ------------------
  242|  1.68k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 1.68k, False: 0]
  ------------------
  243|  1.68k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  1.68k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  1.68k|}
dictobject.c:PyType_Check:
  762|     32|static inline int PyType_Check(PyObject *op) {
  763|     32|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|     32|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|     32|}
moduleobject.c:PyObject_TypeCheck:
  374|  65.1k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  65.1k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|   130k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  65.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  65.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 65.1k, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  65.1k|}
moduleobject.c:Py_SET_TYPE:
  206|     51|{
  207|     51|    ob->ob_type = type;
  208|     51|}
moduleobject.c:PyType_HasFeature:
  749|  10.5k|{
  750|  10.5k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  10.5k|    flags = type->tp_flags;
  756|  10.5k|#endif
  757|  10.5k|    return ((flags & feature) != 0);
  758|  10.5k|}
moduleobject.c:_Py_TYPE_impl:
  233|   776k|{
  234|   776k|    return ob->ob_type;
  235|   776k|}
moduleobject.c:_Py_IS_TYPE_impl:
  248|   766k|{
  249|   766k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   766k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   766k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   766k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   766k|}
moduleobject.c:_Py_SIZE_impl:
  240|    117|{
  241|    117|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 117, False: 0]
  ------------------
  242|    117|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 117, False: 0]
  ------------------
  243|    117|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    117|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    117|}
object.c:_Py_TYPE_impl:
  233|   914M|{
  234|   914M|    return ob->ob_type;
  235|   914M|}
object.c:PyType_HasFeature:
  749|  11.6M|{
  750|  11.6M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  11.6M|    flags = type->tp_flags;
  756|  11.6M|#endif
  757|  11.6M|    return ((flags & feature) != 0);
  758|  11.6M|}
object.c:Py_SET_TYPE:
  206|   119k|{
  207|   119k|    ob->ob_type = type;
  208|   119k|}
object.c:_Py_IS_TYPE_impl:
  248|  28.3M|{
  249|  28.3M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  28.3M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  28.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  28.3M|}
object.c:_Py_SET_SIZE_impl:
  254|  56.1k|{
  255|  56.1k|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 56.1k, False: 0]
  ------------------
  256|  56.1k|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 56.1k, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|  56.1k|    ob->ob_size = size;
  261|  56.1k|#endif
  262|  56.1k|}
rangeobject.c:_Py_IS_TYPE_impl:
  248|    758|{
  249|    758|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    758|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    758|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    758|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    758|}
rangeobject.c:_Py_TYPE_impl:
  233|  2.03k|{
  234|  2.03k|    return ob->ob_type;
  235|  2.03k|}
rangeobject.c:PyType_HasFeature:
  749|  1.20k|{
  750|  1.20k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.20k|    flags = type->tp_flags;
  756|  1.20k|#endif
  757|  1.20k|    return ((flags & feature) != 0);
  758|  1.20k|}
sentinelobject.c:PyType_HasFeature:
  749|     15|{
  750|     15|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     15|    flags = type->tp_flags;
  756|     15|#endif
  757|     15|    return ((flags & feature) != 0);
  758|     15|}
sentinelobject.c:_Py_TYPE_impl:
  233|     65|{
  234|     65|    return ob->ob_type;
  235|     65|}
sentinelobject.c:_Py_IS_TYPE_impl:
  248|     44|{
  249|     44|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     44|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     44|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     44|}
sentinelobject.c:_Py_SIZE_impl:
  240|      3|{
  241|      3|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 3, False: 0]
  ------------------
  242|      3|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 3, False: 0]
  ------------------
  243|      3|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|      3|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|      3|}
setobject.c:PyType_HasFeature:
  749|  1.22M|{
  750|  1.22M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.22M|    flags = type->tp_flags;
  756|  1.22M|#endif
  757|  1.22M|    return ((flags & feature) != 0);
  758|  1.22M|}
setobject.c:_Py_IS_TYPE_impl:
  248|  6.76M|{
  249|  6.76M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  6.76M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.76M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.76M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  6.76M|}
setobject.c:_Py_TYPE_impl:
  233|  8.60M|{
  234|  8.60M|    return ob->ob_type;
  235|  8.60M|}
setobject.c:PyType_Check:
  762|   639k|static inline int PyType_Check(PyObject *op) {
  763|   639k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   639k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   639k|}
sliceobject.c:_Py_IS_TYPE_impl:
  248|  17.6k|{
  249|  17.6k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  17.6k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  17.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  17.6k|}
sliceobject.c:PyType_HasFeature:
  749|     40|{
  750|     40|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     40|    flags = type->tp_flags;
  756|     40|#endif
  757|     40|    return ((flags & feature) != 0);
  758|     40|}
sliceobject.c:_Py_TYPE_impl:
  233|  17.7k|{
  234|  17.7k|    return ob->ob_type;
  235|  17.7k|}
structseq.c:PyType_HasFeature:
  749|  11.0k|{
  750|  11.0k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  11.0k|    flags = type->tp_flags;
  756|  11.0k|#endif
  757|  11.0k|    return ((flags & feature) != 0);
  758|  11.0k|}
structseq.c:_Py_TYPE_impl:
  233|  45.4k|{
  234|  45.4k|    return ob->ob_type;
  235|  45.4k|}
structseq.c:_Py_SET_SIZE_impl:
  254|    543|{
  255|    543|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 543, False: 0]
  ------------------
  256|    543|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 543, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|    543|    ob->ob_size = size;
  261|    543|#endif
  262|    543|}
structseq.c:_Py_SIZE_impl:
  240|  11.0k|{
  241|  11.0k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 11.0k, False: 0]
  ------------------
  242|  11.0k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 11.0k, False: 0]
  ------------------
  243|  11.0k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  11.0k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  11.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  11.0k|}
structseq.c:Py_SET_TYPE:
  206|     16|{
  207|     16|    ob->ob_type = type;
  208|     16|}
tupleobject.c:PyType_HasFeature:
  749|   548M|{
  750|   548M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   548M|    flags = type->tp_flags;
  756|   548M|#endif
  757|   548M|    return ((flags & feature) != 0);
  758|   548M|}
tupleobject.c:_Py_TYPE_impl:
  233|  1.74G|{
  234|  1.74G|    return ob->ob_type;
  235|  1.74G|}
tupleobject.c:_Py_SIZE_impl:
  240|   477M|{
  241|   477M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 477M, False: 0]
  ------------------
  242|   477M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 477M, False: 0]
  ------------------
  243|   477M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   477M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   477M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   477M|}
tupleobject.c:_Py_IS_TYPE_impl:
  248|   140M|{
  249|   140M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   140M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   140M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   140M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   140M|}
tupleobject.c:PyType_Check:
  762|     12|static inline int PyType_Check(PyObject *op) {
  763|     12|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|     12|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|     12|}
typeobject.c:PyType_Check:
  762|   317k|static inline int PyType_Check(PyObject *op) {
  763|   317k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   317k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   317k|}
typeobject.c:_Py_IS_TYPE_impl:
  248|  6.59M|{
  249|  6.59M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  6.59M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.59M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.59M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  6.59M|}
typeobject.c:PyType_HasFeature:
  749|  92.7M|{
  750|  92.7M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  92.7M|    flags = type->tp_flags;
  756|  92.7M|#endif
  757|  92.7M|    return ((flags & feature) != 0);
  758|  92.7M|}
typeobject.c:_Py_TYPE_impl:
  233|   142M|{
  234|   142M|    return ob->ob_type;
  235|   142M|}
typeobject.c:Py_SET_TYPE:
  206|  1.52M|{
  207|  1.52M|    ob->ob_type = type;
  208|  1.52M|}
typeobject.c:_Py_SET_SIZE_impl:
  254|  1.20k|{
  255|  1.20k|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 1.20k, False: 0]
  ------------------
  256|  1.20k|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 1.20k, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|  1.20k|    ob->ob_size = size;
  261|  1.20k|#endif
  262|  1.20k|}
typeobject.c:_Py_SIZE_impl:
  240|  20.4M|{
  241|  20.4M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 20.4M, False: 0]
  ------------------
  242|  20.4M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 20.4M, False: 0]
  ------------------
  243|  20.4M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  20.4M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  20.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  20.4M|}
typeobject.c:PyObject_TypeCheck:
  374|   375k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|   375k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|   751k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   375k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   375k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 370k, False: 5.54k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  5.54k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 5.54k, False: 0]
  ------------------
  376|   375k|}
unicode_formatter.c:PyType_HasFeature:
  749|  1.05k|{
  750|  1.05k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.05k|    flags = type->tp_flags;
  756|  1.05k|#endif
  757|  1.05k|    return ((flags & feature) != 0);
  758|  1.05k|}
unicode_formatter.c:_Py_TYPE_impl:
  233|  1.18k|{
  234|  1.18k|    return ob->ob_type;
  235|  1.18k|}
unicode_formatter.c:_Py_IS_TYPE_impl:
  248|    132|{
  249|    132|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    132|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    132|}
unicode_writer.c:PyType_HasFeature:
  749|  6.71M|{
  750|  6.71M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  6.71M|    flags = type->tp_flags;
  756|  6.71M|#endif
  757|  6.71M|    return ((flags & feature) != 0);
  758|  6.71M|}
unicode_writer.c:_Py_TYPE_impl:
  233|  6.96M|{
  234|  6.96M|    return ob->ob_type;
  235|  6.96M|}
unicodeobject.c:PyType_HasFeature:
  749|  1.24G|{
  750|  1.24G|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.24G|    flags = type->tp_flags;
  756|  1.24G|#endif
  757|  1.24G|    return ((flags & feature) != 0);
  758|  1.24G|}
unicodeobject.c:_Py_TYPE_impl:
  233|  1.28G|{
  234|  1.28G|    return ob->ob_type;
  235|  1.28G|}
unicodeobject.c:Py_SET_TYPE:
  206|  23.4M|{
  207|  23.4M|    ob->ob_type = type;
  208|  23.4M|}
unicodeobject.c:_Py_IS_TYPE_impl:
  248|  6.14M|{
  249|  6.14M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  6.14M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.14M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.14M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  6.14M|}
unicodeobject.c:PyType_Check:
  762|   150k|static inline int PyType_Check(PyObject *op) {
  763|   150k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   150k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   150k|}
unicodeobject.c:_Py_SIZE_impl:
  240|   537k|{
  241|   537k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 537k, False: 0]
  ------------------
  242|   537k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 537k, False: 0]
  ------------------
  243|   537k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   537k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   537k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   537k|}
unicodeobject.c:_Py_SET_SIZE_impl:
  254|    251|{
  255|    251|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 251, False: 0]
  ------------------
  256|    251|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 251, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|    251|    ob->ob_size = size;
  261|    251|#endif
  262|    251|}
unionobject.c:PyType_Check:
  762|     46|static inline int PyType_Check(PyObject *op) {
  763|     46|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|     46|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|     46|}
unionobject.c:PyType_HasFeature:
  749|     91|{
  750|     91|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     91|    flags = type->tp_flags;
  756|     91|#endif
  757|     91|    return ((flags & feature) != 0);
  758|     91|}
unionobject.c:_Py_TYPE_impl:
  233|    228|{
  234|    228|    return ob->ob_type;
  235|    228|}
unionobject.c:_Py_IS_TYPE_impl:
  248|     46|{
  249|     46|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     46|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     46|}
unionobject.c:_Py_SIZE_impl:
  240|     45|{
  241|     45|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 45, False: 0]
  ------------------
  242|     45|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 45, False: 0]
  ------------------
  243|     45|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     45|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     45|}
weakrefobject.c:_Py_TYPE_impl:
  233|  1.44M|{
  234|  1.44M|    return ob->ob_type;
  235|  1.44M|}
weakrefobject.c:PyType_Check:
  762|   470k|static inline int PyType_Check(PyObject *op) {
  763|   470k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   470k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   470k|}
weakrefobject.c:PyObject_TypeCheck:
  374|  21.8k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  21.8k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  43.7k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  21.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 21.4k, False: 367]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|    367|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 367, False: 0]
  ------------------
  376|  21.8k|}
weakrefobject.c:_Py_IS_TYPE_impl:
  248|  23.6k|{
  249|  23.6k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  23.6k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  23.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  23.6k|}
weakrefobject.c:_Py_SIZE_impl:
  240|  1.40k|{
  241|  1.40k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 1.40k, False: 0]
  ------------------
  242|  1.40k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 1.40k, False: 0]
  ------------------
  243|  1.40k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  1.40k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  1.40k|}
weakrefobject.c:PyType_HasFeature:
  749|   473k|{
  750|   473k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   473k|    flags = type->tp_flags;
  756|   473k|#endif
  757|   473k|    return ((flags & feature) != 0);
  758|   473k|}
_warnings.c:PyType_HasFeature:
  749|  2.56M|{
  750|  2.56M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  2.56M|    flags = type->tp_flags;
  756|  2.56M|#endif
  757|  2.56M|    return ((flags & feature) != 0);
  758|  2.56M|}
_warnings.c:_Py_TYPE_impl:
  233|  3.82M|{
  234|  3.82M|    return ob->ob_type;
  235|  3.82M|}
_warnings.c:_Py_SIZE_impl:
  240|   533k|{
  241|   533k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 533k, False: 0]
  ------------------
  242|   533k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 533k, False: 0]
  ------------------
  243|   533k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   533k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   533k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   533k|}
_warnings.c:_Py_IS_TYPE_impl:
  248|   145k|{
  249|   145k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   145k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   145k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   145k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   145k|}
_warnings.c:PyObject_TypeCheck:
  374|  48.4k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  48.4k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  96.9k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 48.4k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  48.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 48.4k]
  ------------------
  376|  48.4k|}
bltinmodule.c:PyType_Check:
  762|  1.38k|static inline int PyType_Check(PyObject *op) {
  763|  1.38k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|  1.38k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|  1.38k|}
bltinmodule.c:_Py_SIZE_impl:
  240|  1.14k|{
  241|  1.14k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 1.14k, False: 0]
  ------------------
  242|  1.14k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 1.14k, False: 0]
  ------------------
  243|  1.14k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  1.14k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  1.14k|}
bltinmodule.c:PyType_HasFeature:
  749|   121M|{
  750|   121M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   121M|    flags = type->tp_flags;
  756|   121M|#endif
  757|   121M|    return ((flags & feature) != 0);
  758|   121M|}
bltinmodule.c:_Py_TYPE_impl:
  233|   121M|{
  234|   121M|    return ob->ob_type;
  235|   121M|}
bltinmodule.c:_Py_IS_TYPE_impl:
  248|  51.8k|{
  249|  51.8k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  51.8k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  51.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  51.8k|}
ceval.c:PyType_HasFeature:
  749|   548M|{
  750|   548M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   548M|    flags = type->tp_flags;
  756|   548M|#endif
  757|   548M|    return ((flags & feature) != 0);
  758|   548M|}
ceval.c:_Py_TYPE_impl:
  233|   590M|{
  234|   590M|    return ob->ob_type;
  235|   590M|}
ceval.c:PyType_Check:
  762|   254k|static inline int PyType_Check(PyObject *op) {
  763|   254k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   254k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   254k|}
ceval.c:_Py_IS_TYPE_impl:
  248|   316M|{
  249|   316M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   316M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   316M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   316M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   316M|}
ceval.c:PyObject_TypeCheck:
  374|  51.9M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  51.9M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|   103M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  51.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 51.9M, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  51.9M|}
ceval.c:_Py_SIZE_impl:
  240|  2.79M|{
  241|  2.79M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 2.79M, False: 0]
  ------------------
  242|  2.79M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 2.79M, False: 0]
  ------------------
  243|  2.79M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  2.79M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  2.79M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  2.79M|}
ceval.c:_Py_SET_SIZE_impl:
  254|   770k|{
  255|   770k|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 770k, False: 0]
  ------------------
  256|   770k|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 770k, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|   770k|    ob->ob_size = size;
  261|   770k|#endif
  262|   770k|}
codecs.c:_Py_IS_TYPE_impl:
  248|  41.1k|{
  249|  41.1k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  41.1k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  41.1k|}
codecs.c:_Py_SIZE_impl:
  240|  80.5k|{
  241|  80.5k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 80.5k, False: 0]
  ------------------
  242|  80.5k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 80.5k, False: 0]
  ------------------
  243|  80.5k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  80.5k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  80.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  80.5k|}
codecs.c:PyType_HasFeature:
  749|   239k|{
  750|   239k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   239k|    flags = type->tp_flags;
  756|   239k|#endif
  757|   239k|    return ((flags & feature) != 0);
  758|   239k|}
codecs.c:_Py_TYPE_impl:
  233|   480k|{
  234|   480k|    return ob->ob_type;
  235|   480k|}
codegen.c:PyType_HasFeature:
  749|   130k|{
  750|   130k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   130k|    flags = type->tp_flags;
  756|   130k|#endif
  757|   130k|    return ((flags & feature) != 0);
  758|   130k|}
codegen.c:_Py_TYPE_impl:
  233|   281k|{
  234|   281k|    return ob->ob_type;
  235|   281k|}
codegen.c:_Py_SIZE_impl:
  240|  42.2k|{
  241|  42.2k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 42.2k, False: 0]
  ------------------
  242|  42.2k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 42.2k, False: 0]
  ------------------
  243|  42.2k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  42.2k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  42.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  42.2k|}
codegen.c:_Py_IS_TYPE_impl:
  248|  50.1k|{
  249|  50.1k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  50.1k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  50.1k|}
codegen.c:PyObject_TypeCheck:
  374|  8.22k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  8.22k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  16.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  8.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 149, False: 8.07k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  8.07k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  8.07k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.07k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 8.07k]
  ------------------
  376|  8.22k|}
compile.c:_Py_SIZE_impl:
  240|   396k|{
  241|   396k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 396k, False: 0]
  ------------------
  242|   396k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 396k, False: 0]
  ------------------
  243|   396k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   396k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   396k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   396k|}
compile.c:PyType_HasFeature:
  749|  2.91M|{
  750|  2.91M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  2.91M|    flags = type->tp_flags;
  756|  2.91M|#endif
  757|  2.91M|    return ((flags & feature) != 0);
  758|  2.91M|}
compile.c:_Py_TYPE_impl:
  233|  7.87M|{
  234|  7.87M|    return ob->ob_type;
  235|  7.87M|}
compile.c:_Py_IS_TYPE_impl:
  248|  4.17M|{
  249|  4.17M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  4.17M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.17M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.17M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  4.17M|}
context.c:_Py_IS_TYPE_impl:
  248|  68.9k|{
  249|  68.9k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  68.9k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  68.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  68.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  68.9k|}
context.c:_Py_TYPE_impl:
  233|  68.9k|{
  234|  68.9k|    return ob->ob_type;
  235|  68.9k|}
context.c:PyType_HasFeature:
  749|      4|{
  750|      4|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|      4|    flags = type->tp_flags;
  756|      4|#endif
  757|      4|    return ((flags & feature) != 0);
  758|      4|}
errors.c:PyType_Check:
  762|   488k|static inline int PyType_Check(PyObject *op) {
  763|   488k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   488k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   488k|}
errors.c:PyType_HasFeature:
  749|  1.71M|{
  750|  1.71M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.71M|    flags = type->tp_flags;
  756|  1.71M|#endif
  757|  1.71M|    return ((flags & feature) != 0);
  758|  1.71M|}
errors.c:_Py_TYPE_impl:
  233|  1.72M|{
  234|  1.72M|    return ob->ob_type;
  235|  1.72M|}
flowgraph.c:_Py_SIZE_impl:
  240|  4.13M|{
  241|  4.13M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 4.13M, False: 0]
  ------------------
  242|  4.13M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 4.13M, False: 0]
  ------------------
  243|  4.13M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  4.13M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  4.13M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  4.13M|}
flowgraph.c:PyType_HasFeature:
  749|  12.7M|{
  750|  12.7M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  12.7M|    flags = type->tp_flags;
  756|  12.7M|#endif
  757|  12.7M|    return ((flags & feature) != 0);
  758|  12.7M|}
flowgraph.c:_Py_TYPE_impl:
  233|  31.1M|{
  234|  31.1M|    return ob->ob_type;
  235|  31.1M|}
flowgraph.c:_Py_IS_TYPE_impl:
  248|  10.1M|{
  249|  10.1M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  10.1M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  10.1M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  10.1M|}
frame.c:_Py_IS_TYPE_impl:
  248|  51.7k|{
  249|  51.7k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  51.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  51.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  51.7k|}
frame.c:_Py_TYPE_impl:
  233|  51.7k|{
  234|  51.7k|    return ob->ob_type;
  235|  51.7k|}
gc.c:_Py_SIZE_impl:
  240|  31.0k|{
  241|  31.0k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 31.0k, False: 0]
  ------------------
  242|  31.0k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 31.0k, False: 0]
  ------------------
  243|  31.0k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  31.0k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  31.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  31.0k|}
gc.c:PyType_HasFeature:
  749|  31.6k|{
  750|  31.6k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  31.6k|    flags = type->tp_flags;
  756|  31.6k|#endif
  757|  31.6k|    return ((flags & feature) != 0);
  758|  31.6k|}
gc.c:_Py_IS_TYPE_impl:
  248|  46.8M|{
  249|  46.8M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  46.8M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  46.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  46.8M|}
gc.c:PyType_Check:
  762|    554|static inline int PyType_Check(PyObject *op) {
  763|    554|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|    554|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|    554|}
gc.c:PyObject_TypeCheck:
  374|  1.49k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  1.49k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  2.98k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 1.49k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  1.49k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 1.49k]
  ------------------
  376|  1.49k|}
gc.c:Py_SET_TYPE:
  206|  49.5M|{
  207|  49.5M|    ob->ob_type = type;
  208|  49.5M|}
gc.c:_Py_TYPE_impl:
  233|  1.32G|{
  234|  1.32G|    return ob->ob_type;
  235|  1.32G|}
gc.c:_Py_SET_SIZE_impl:
  254|  48.7M|{
  255|  48.7M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 48.7M, False: 0]
  ------------------
  256|  48.7M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 48.7M, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|  48.7M|    ob->ob_size = size;
  261|  48.7M|#endif
  262|  48.7M|}
getargs.c:PyType_HasFeature:
  749|   323k|{
  750|   323k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   323k|    flags = type->tp_flags;
  756|   323k|#endif
  757|   323k|    return ((flags & feature) != 0);
  758|   323k|}
getargs.c:_Py_TYPE_impl:
  233|   462k|{
  234|   462k|    return ob->ob_type;
  235|   462k|}
getargs.c:_Py_SIZE_impl:
  240|  68.6k|{
  241|  68.6k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 68.6k, False: 0]
  ------------------
  242|  68.6k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 68.6k, False: 0]
  ------------------
  243|  68.6k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  68.6k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  68.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  68.6k|}
getargs.c:_Py_IS_TYPE_impl:
  248|    337|{
  249|    337|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    337|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    337|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    337|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    337|}
hamt.c:_Py_IS_TYPE_impl:
  248|  20.4k|{
  249|  20.4k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  20.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  20.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  20.4k|}
hamt.c:_Py_TYPE_impl:
  233|  20.4k|{
  234|  20.4k|    return ob->ob_type;
  235|  20.4k|}
hamt.c:_Py_SIZE_impl:
  240|     17|{
  241|     17|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 17, False: 0]
  ------------------
  242|     17|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 17, False: 0]
  ------------------
  243|     17|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     17|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     17|}
hamt.c:_Py_SET_SIZE_impl:
  254|      1|{
  255|      1|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 1, False: 0]
  ------------------
  256|      1|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 1, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|      1|    ob->ob_size = size;
  261|      1|#endif
  262|      1|}
import.c:_Py_SIZE_impl:
  240|     20|{
  241|     20|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 20, False: 0]
  ------------------
  242|     20|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 20, False: 0]
  ------------------
  243|     20|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     20|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     20|}
import.c:PyType_HasFeature:
  749|   946k|{
  750|   946k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   946k|    flags = type->tp_flags;
  756|   946k|#endif
  757|   946k|    return ((flags & feature) != 0);
  758|   946k|}
import.c:_Py_TYPE_impl:
  233|   947k|{
  234|   947k|    return ob->ob_type;
  235|   947k|}
import.c:PyObject_TypeCheck:
  374|    158|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    158|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|    316|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    158|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    158|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 158, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    158|}
import.c:_Py_IS_TYPE_impl:
  248|    554|{
  249|    554|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    554|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    554|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    554|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    554|}
importdl.c:PyType_HasFeature:
  749|     83|{
  750|     83|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     83|    flags = type->tp_flags;
  756|     83|#endif
  757|     83|    return ((flags & feature) != 0);
  758|     83|}
importdl.c:_Py_TYPE_impl:
  233|    169|{
  234|    169|    return ob->ob_type;
  235|    169|}
importdl.c:_Py_IS_TYPE_impl:
  248|     86|{
  249|     86|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     86|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     86|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     86|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     86|}
importdl.c:PyObject_TypeCheck:
  374|     43|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     43|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     86|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 43, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     43|}
initconfig.c:PyType_HasFeature:
  749|     64|{
  750|     64|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     64|    flags = type->tp_flags;
  756|     64|#endif
  757|     64|    return ((flags & feature) != 0);
  758|     64|}
initconfig.c:_Py_TYPE_impl:
  233|    100|{
  234|    100|    return ob->ob_type;
  235|    100|}
initconfig.c:_Py_SIZE_impl:
  240|     10|{
  241|     10|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 10, False: 0]
  ------------------
  242|     10|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 10, False: 0]
  ------------------
  243|     10|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     10|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     10|}
initconfig.c:_Py_IS_TYPE_impl:
  248|     16|{
  249|     16|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     16|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     16|}
intrinsics.c:PyType_HasFeature:
  749|  10.1k|{
  750|  10.1k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  10.1k|    flags = type->tp_flags;
  756|  10.1k|#endif
  757|  10.1k|    return ((flags & feature) != 0);
  758|  10.1k|}
intrinsics.c:_Py_TYPE_impl:
  233|  11.9k|{
  234|  11.9k|    return ob->ob_type;
  235|  11.9k|}
intrinsics.c:_Py_IS_TYPE_impl:
  248|  1.84k|{
  249|  1.84k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  1.84k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.84k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.84k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  1.84k|}
marshal.c:PyType_HasFeature:
  749|   124k|{
  750|   124k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   124k|    flags = type->tp_flags;
  756|   124k|#endif
  757|   124k|    return ((flags & feature) != 0);
  758|   124k|}
marshal.c:_Py_TYPE_impl:
  233|   296k|{
  234|   296k|    return ob->ob_type;
  235|   296k|}
marshal.c:_Py_SIZE_impl:
  240|  86.1k|{
  241|  86.1k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 86.1k, False: 0]
  ------------------
  242|  86.1k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 86.1k, False: 0]
  ------------------
  243|  86.1k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  86.1k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  86.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  86.1k|}
modsupport.c:_Py_TYPE_impl:
  233|   464k|{
  234|   464k|    return ob->ob_type;
  235|   464k|}
modsupport.c:PyType_HasFeature:
  749|   154k|{
  750|   154k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   154k|    flags = type->tp_flags;
  756|   154k|#endif
  757|   154k|    return ((flags & feature) != 0);
  758|   154k|}
modsupport.c:_Py_SIZE_impl:
  240|   154k|{
  241|   154k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 154k, False: 0]
  ------------------
  242|   154k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 154k, False: 0]
  ------------------
  243|   154k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   154k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   154k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   154k|}
modsupport.c:PyObject_TypeCheck:
  374|    803|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    803|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  1.60k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    803|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    803|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 803, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    803|}
modsupport.c:_Py_IS_TYPE_impl:
  248|    803|{
  249|    803|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    803|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    803|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    803|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    803|}
pylifecycle.c:PyType_HasFeature:
  749|      2|{
  750|      2|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|      2|    flags = type->tp_flags;
  756|      2|#endif
  757|      2|    return ((flags & feature) != 0);
  758|      2|}
pylifecycle.c:_Py_TYPE_impl:
  233|      2|{
  234|      2|    return ob->ob_type;
  235|      2|}
pythonrun.c:PyType_HasFeature:
  749|      6|{
  750|      6|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|      6|    flags = type->tp_flags;
  756|      6|#endif
  757|      6|    return ((flags & feature) != 0);
  758|      6|}
pythonrun.c:_Py_TYPE_impl:
  233|      6|{
  234|      6|    return ob->ob_type;
  235|      6|}
specialize.c:PyType_Check:
  762|  2.34k|static inline int PyType_Check(PyObject *op) {
  763|  2.34k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|  2.34k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|  2.34k|}
specialize.c:_Py_TYPE_impl:
  233|  1.32M|{
  234|  1.32M|    return ob->ob_type;
  235|  1.32M|}
specialize.c:_Py_IS_TYPE_impl:
  248|   768k|{
  249|   768k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   768k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   768k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   768k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   768k|}
specialize.c:PyObject_TypeCheck:
  374|  1.04k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  1.04k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  2.09k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  1.04k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.04k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 1.04k, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  1.04k|}
specialize.c:_Py_SIZE_impl:
  240|    155|{
  241|    155|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 155, False: 0]
  ------------------
  242|    155|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 155, False: 0]
  ------------------
  243|    155|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    155|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    155|}
specialize.c:PyType_HasFeature:
  749|   660k|{
  750|   660k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   660k|    flags = type->tp_flags;
  756|   660k|#endif
  757|   660k|    return ((flags & feature) != 0);
  758|   660k|}
symtable.c:_Py_IS_TYPE_impl:
  248|   108k|{
  249|   108k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   108k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   108k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   108k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   108k|}
symtable.c:_Py_SIZE_impl:
  240|   178k|{
  241|   178k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 178k, False: 0]
  ------------------
  242|   178k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 178k, False: 0]
  ------------------
  243|   178k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   178k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   178k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   178k|}
symtable.c:PyType_HasFeature:
  749|  4.87M|{
  750|  4.87M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  4.87M|    flags = type->tp_flags;
  756|  4.87M|#endif
  757|  4.87M|    return ((flags & feature) != 0);
  758|  4.87M|}
symtable.c:_Py_TYPE_impl:
  233|  5.34M|{
  234|  5.34M|    return ob->ob_type;
  235|  5.34M|}
sysmodule.c:PyType_HasFeature:
  749|    957|{
  750|    957|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    957|    flags = type->tp_flags;
  756|    957|#endif
  757|    957|    return ((flags & feature) != 0);
  758|    957|}
sysmodule.c:_Py_TYPE_impl:
  233|  2.18k|{
  234|  2.18k|    return ob->ob_type;
  235|  2.18k|}
sysmodule.c:_Py_IS_TYPE_impl:
  248|     39|{
  249|     39|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     39|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     39|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     39|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     39|}
sysmodule.c:_Py_SIZE_impl:
  240|    594|{
  241|    594|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 594, False: 0]
  ------------------
  242|    594|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 594, False: 0]
  ------------------
  243|    594|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    594|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    594|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    594|}
traceback.c:_Py_IS_TYPE_impl:
  248|  91.2k|{
  249|  91.2k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  91.2k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  91.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  91.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  91.2k|}
traceback.c:PyType_HasFeature:
  749|  42.9k|{
  750|  42.9k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  42.9k|    flags = type->tp_flags;
  756|  42.9k|#endif
  757|  42.9k|    return ((flags & feature) != 0);
  758|  42.9k|}
traceback.c:_Py_TYPE_impl:
  233|   134k|{
  234|   134k|    return ob->ob_type;
  235|   134k|}
typecache.c:_Py_IS_TYPE_impl:
  248|  6.09M|{
  249|  6.09M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  6.09M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.09M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.09M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  6.09M|}
typecache.c:_Py_TYPE_impl:
  233|  18.3M|{
  234|  18.3M|    return ob->ob_type;
  235|  18.3M|}
typecache.c:PyType_HasFeature:
  749|  12.2M|{
  750|  12.2M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  12.2M|    flags = type->tp_flags;
  756|  12.2M|#endif
  757|  12.2M|    return ((flags & feature) != 0);
  758|  12.2M|}
fileutils.c:PyType_HasFeature:
  749|  5.50k|{
  750|  5.50k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  5.50k|    flags = type->tp_flags;
  756|  5.50k|#endif
  757|  5.50k|    return ((flags & feature) != 0);
  758|  5.50k|}
fileutils.c:_Py_TYPE_impl:
  233|  5.50k|{
  234|  5.50k|    return ob->ob_type;
  235|  5.50k|}
suggestions.c:_Py_IS_TYPE_impl:
  248|     15|{
  249|     15|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     15|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     15|}
suggestions.c:_Py_SIZE_impl:
  240|     15|{
  241|     15|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 15, False: 0]
  ------------------
  242|     15|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 15, False: 0]
  ------------------
  243|     15|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     15|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     15|}
suggestions.c:PyType_HasFeature:
  749|    165|{
  750|    165|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    165|    flags = type->tp_flags;
  756|    165|#endif
  757|    165|    return ((flags & feature) != 0);
  758|    165|}
suggestions.c:_Py_TYPE_impl:
  233|    210|{
  234|    210|    return ob->ob_type;
  235|    210|}
posixmodule.c:_Py_IS_TYPE_impl:
  248|    549|{
  249|    549|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    549|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    549|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    549|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    549|}
posixmodule.c:_Py_SIZE_impl:
  240|    572|{
  241|    572|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 572, False: 0]
  ------------------
  242|    572|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 572, False: 0]
  ------------------
  243|    572|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    572|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    572|}
posixmodule.c:_Py_TYPE_impl:
  233|  9.99k|{
  234|  9.99k|    return ob->ob_type;
  235|  9.99k|}
posixmodule.c:PyType_HasFeature:
  749|  8.29k|{
  750|  8.29k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  8.29k|    flags = type->tp_flags;
  756|  8.29k|#endif
  757|  8.29k|    return ((flags & feature) != 0);
  758|  8.29k|}
posixmodule.c:PyObject_TypeCheck:
  374|    549|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    549|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  1.09k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    549|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    549|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 549, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    549|}
_datetimemodule.c:PyObject_TypeCheck:
  374|      4|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|      4|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|      8|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 4, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|      4|}
_datetimemodule.c:_Py_IS_TYPE_impl:
  248|      4|{
  249|      4|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      4|}
_datetimemodule.c:_Py_TYPE_impl:
  233|      4|{
  234|      4|    return ob->ob_type;
  235|      4|}
_datetimemodule.c:Py_SET_TYPE:
  206|      8|{
  207|      8|    ob->ob_type = type;
  208|      8|}
_codecsmodule.c:PyType_HasFeature:
  749|  3.34k|{
  750|  3.34k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  3.34k|    flags = type->tp_flags;
  756|  3.34k|#endif
  757|  3.34k|    return ((flags & feature) != 0);
  758|  3.34k|}
_codecsmodule.c:_Py_TYPE_impl:
  233|  3.34k|{
  234|  3.34k|    return ob->ob_type;
  235|  3.34k|}
_collectionsmodule.c:_Py_TYPE_impl:
  233|    568|{
  234|    568|    return ob->ob_type;
  235|    568|}
_collectionsmodule.c:PyType_HasFeature:
  749|     63|{
  750|     63|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     63|    flags = type->tp_flags;
  756|     63|#endif
  757|     63|    return ((flags & feature) != 0);
  758|     63|}
_collectionsmodule.c:_Py_IS_TYPE_impl:
  248|     19|{
  249|     19|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     19|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     19|}
_collectionsmodule.c:PyObject_TypeCheck:
  374|     19|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     19|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     38|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 19, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     19|}
_collectionsmodule.c:_Py_SIZE_impl:
  240|     25|{
  241|     25|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 25, False: 0]
  ------------------
  242|     25|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 25, False: 0]
  ------------------
  243|     25|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     25|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     25|}
_collectionsmodule.c:PyType_Check:
  762|     12|static inline int PyType_Check(PyObject *op) {
  763|     12|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|     12|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|     12|}
_iomodule.c:PyType_HasFeature:
  749|    285|{
  750|    285|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    285|    flags = type->tp_flags;
  756|    285|#endif
  757|    285|    return ((flags & feature) != 0);
  758|    285|}
_iomodule.c:_Py_TYPE_impl:
  233|    406|{
  234|    406|    return ob->ob_type;
  235|    406|}
_iomodule.c:PyObject_TypeCheck:
  374|    121|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    121|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|    242|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    121|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    121|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 121, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    121|}
_iomodule.c:_Py_IS_TYPE_impl:
  248|    121|{
  249|    121|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    121|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    121|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    121|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    121|}
fileio.c:_Py_TYPE_impl:
  233|  1.09k|{
  234|  1.09k|    return ob->ob_type;
  235|  1.09k|}
fileio.c:PyType_Check:
  762|     93|static inline int PyType_Check(PyObject *op) {
  763|     93|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|     93|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|     93|}
fileio.c:PyType_HasFeature:
  749|    582|{
  750|    582|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    582|    flags = type->tp_flags;
  756|    582|#endif
  757|    582|    return ((flags & feature) != 0);
  758|    582|}
fileio.c:_Py_SIZE_impl:
  240|     99|{
  241|     99|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 99, False: 0]
  ------------------
  242|     99|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 99, False: 0]
  ------------------
  243|     99|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     99|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     99|}
fileio.c:_Py_IS_TYPE_impl:
  248|     99|{
  249|     99|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     99|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     99|}
bufferedio.c:_Py_IS_TYPE_impl:
  248|    297|{
  249|    297|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    297|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    297|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    297|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    297|}
bufferedio.c:_Py_TYPE_impl:
  233|  1.29k|{
  234|  1.29k|    return ob->ob_type;
  235|  1.29k|}
bufferedio.c:PyType_HasFeature:
  749|    483|{
  750|    483|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    483|    flags = type->tp_flags;
  756|    483|#endif
  757|    483|    return ((flags & feature) != 0);
  758|    483|}
bufferedio.c:_Py_SIZE_impl:
  240|     99|{
  241|     99|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 99, False: 0]
  ------------------
  242|     99|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 99, False: 0]
  ------------------
  243|     99|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     99|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     99|}
bufferedio.c:PyObject_TypeCheck:
  374|     99|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     99|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|    198|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 99, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     99|}
textio.c:_Py_SIZE_impl:
  240|      6|{
  241|      6|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 6, False: 0]
  ------------------
  242|      6|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 6, False: 0]
  ------------------
  243|      6|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|      6|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|      6|}
textio.c:PyType_HasFeature:
  749|   678k|{
  750|   678k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   678k|    flags = type->tp_flags;
  756|   678k|#endif
  757|   678k|    return ((flags & feature) != 0);
  758|   678k|}
textio.c:_Py_TYPE_impl:
  233|   727k|{
  234|   727k|    return ob->ob_type;
  235|   727k|}
textio.c:PyObject_TypeCheck:
  374|      6|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|      6|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     12|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 6, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|      6|}
textio.c:_Py_IS_TYPE_impl:
  248|  48.5k|{
  249|  48.5k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  48.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  48.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  48.5k|}
itertoolsmodule.c:PyObject_TypeCheck:
  374|     19|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     19|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     38|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 19, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     19|}
itertoolsmodule.c:_Py_IS_TYPE_impl:
  248|     52|{
  249|     52|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     52|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     52|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     52|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     52|}
itertoolsmodule.c:_Py_TYPE_impl:
  233|  3.18k|{
  234|  3.18k|    return ob->ob_type;
  235|  3.18k|}
itertoolsmodule.c:PyType_HasFeature:
  749|  1.57k|{
  750|  1.57k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.57k|    flags = type->tp_flags;
  756|  1.57k|#endif
  757|  1.57k|    return ((flags & feature) != 0);
  758|  1.57k|}
itertoolsmodule.c:_Py_SIZE_impl:
  240|    753|{
  241|    753|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 753, False: 0]
  ------------------
  242|    753|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 753, False: 0]
  ------------------
  243|    753|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    753|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    753|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    753|}
itertoolsmodule.c:Py_SET_TYPE:
  206|      1|{
  207|      1|    ob->ob_type = type;
  208|      1|}
sre.c:PyType_HasFeature:
  749|    932|{
  750|    932|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    932|    flags = type->tp_flags;
  756|    932|#endif
  757|    932|    return ((flags & feature) != 0);
  758|    932|}
sre.c:_Py_TYPE_impl:
  233|  1.23k|{
  234|  1.23k|    return ob->ob_type;
  235|  1.23k|}
sre.c:PyObject_TypeCheck:
  374|     32|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     32|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     64|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 32, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     32|}
sre.c:_Py_IS_TYPE_impl:
  248|     32|{
  249|     32|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     32|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     32|}
sre.c:_Py_SIZE_impl:
  240|     21|{
  241|     21|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 21, False: 0]
  ------------------
  242|     21|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 21, False: 0]
  ------------------
  243|     21|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     21|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     21|}
_threadmodule.c:_Py_TYPE_impl:
  233|  1.36k|{
  234|  1.36k|    return ob->ob_type;
  235|  1.36k|}
_threadmodule.c:PyObject_TypeCheck:
  374|    695|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    695|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  1.39k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    695|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    695|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 695, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    695|}
_threadmodule.c:_Py_IS_TYPE_impl:
  248|    695|{
  249|    695|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    695|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    695|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    695|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    695|}
timemodule.c:_Py_TYPE_impl:
  233|     22|{
  234|     22|    return ob->ob_type;
  235|     22|}
timemodule.c:PyObject_TypeCheck:
  374|     22|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     22|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     44|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 22, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     22|}
timemodule.c:_Py_IS_TYPE_impl:
  248|     22|{
  249|     22|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     22|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     22|}
_weakref.c:PyType_HasFeature:
  749|    367|{
  750|    367|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    367|    flags = type->tp_flags;
  756|    367|#endif
  757|    367|    return ((flags & feature) != 0);
  758|    367|}
_weakref.c:_Py_TYPE_impl:
  233|  1.83k|{
  234|  1.83k|    return ob->ob_type;
  235|  1.83k|}
_weakref.c:PyObject_TypeCheck:
  374|    734|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    734|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  1.46k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    734|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    734|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 734]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|    734|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    734|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    734|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 734, False: 0]
  ------------------
  376|    734|}
_weakref.c:_Py_IS_TYPE_impl:
  248|    734|{
  249|    734|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    734|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    734|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    734|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    734|}
_abc.c:PyObject_TypeCheck:
  374|    378|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|    378|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|    756|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    378|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    378|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 378, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|    378|}
_abc.c:_Py_IS_TYPE_impl:
  248|    573|{
  249|    573|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    573|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    573|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    573|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    573|}
_abc.c:_Py_TYPE_impl:
  233|  14.2k|{
  234|  14.2k|    return ob->ob_type;
  235|  14.2k|}
_abc.c:PyType_HasFeature:
  749|  7.85k|{
  750|  7.85k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  7.85k|    flags = type->tp_flags;
  756|  7.85k|#endif
  757|  7.85k|    return ((flags & feature) != 0);
  758|  7.85k|}
_abc.c:_Py_SIZE_impl:
  240|  2.02k|{
  241|  2.02k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 2.02k, False: 0]
  ------------------
  242|  2.02k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 2.02k, False: 0]
  ------------------
  243|  2.02k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  2.02k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  2.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  2.02k|}
_abc.c:PyType_Check:
  762|    374|static inline int PyType_Check(PyObject *op) {
  763|    374|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|    374|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|    374|}
_functoolsmodule.c:PyType_HasFeature:
  749|     12|{
  750|     12|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     12|    flags = type->tp_flags;
  756|     12|#endif
  757|     12|    return ((flags & feature) != 0);
  758|     12|}
_functoolsmodule.c:_Py_TYPE_impl:
  233|    122|{
  234|    122|    return ob->ob_type;
  235|    122|}
_functoolsmodule.c:_Py_SIZE_impl:
  240|      6|{
  241|      6|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 6, False: 0]
  ------------------
  242|      6|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 6, False: 0]
  ------------------
  243|      6|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|      6|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|      6|}
_functoolsmodule.c:PyObject_TypeCheck:
  374|     24|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     24|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     48|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 23, False: 1]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 1]
  ------------------
  376|     24|}
_functoolsmodule.c:_Py_IS_TYPE_impl:
  248|     24|{
  249|     24|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     24|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     24|}
_operator.c:_Py_TYPE_impl:
  233|     19|{
  234|     19|    return ob->ob_type;
  235|     19|}
_operator.c:PyObject_TypeCheck:
  374|     19|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|     19|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|     38|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 19, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|     19|}
_operator.c:_Py_IS_TYPE_impl:
  248|     19|{
  249|     19|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     19|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     19|}
_stat.c:PyType_HasFeature:
  749|      2|{
  750|      2|    unsigned long flags;
  751|      2|#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|      2|    flags = PyType_GetFlags(type);
  754|       |#else
  755|       |    flags = type->tp_flags;
  756|       |#endif
  757|      2|    return ((flags & feature) != 0);
  758|      2|}
_stat.c:_Py_TYPE_impl:
  233|      2|{
  234|      2|    return ob->ob_type;
  235|      2|}
getpath.c:_Py_IS_TYPE_impl:
  248|      2|{
  249|      2|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      2|}
getpath.c:_Py_TYPE_impl:
  233|    206|{
  234|    206|    return ob->ob_type;
  235|    206|}
getpath.c:PyType_HasFeature:
  749|    156|{
  750|    156|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    156|    flags = type->tp_flags;
  756|    156|#endif
  757|    156|    return ((flags & feature) != 0);
  758|    156|}
getpath.c:_Py_SIZE_impl:
  240|     24|{
  241|     24|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 24, False: 0]
  ------------------
  242|     24|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 24, False: 0]
  ------------------
  243|     24|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     24|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     24|}
helpers.c:PyType_HasFeature:
  749|  3.15k|{
  750|  3.15k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  3.15k|    flags = type->tp_flags;
  756|  3.15k|#endif
  757|  3.15k|    return ((flags & feature) != 0);
  758|  3.15k|}
helpers.c:_Py_TYPE_impl:
  233|  3.15k|{
  234|  3.15k|    return ob->ob_type;
  235|  3.15k|}
abstract.c:_Py_TYPE_impl:
  233|  38.2M|{
  234|  38.2M|    return ob->ob_type;
  235|  38.2M|}
abstract.c:PyType_HasFeature:
  749|  10.5M|{
  750|  10.5M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  10.5M|    flags = type->tp_flags;
  756|  10.5M|#endif
  757|  10.5M|    return ((flags & feature) != 0);
  758|  10.5M|}
abstract.c:PyType_Check:
  762|   507k|static inline int PyType_Check(PyObject *op) {
  763|   507k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   507k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   507k|}
abstract.c:_Py_IS_TYPE_impl:
  248|  4.88M|{
  249|  4.88M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  4.88M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.88M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.88M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  4.88M|}
abstract.c:PyObject_TypeCheck:
  374|  20.6k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  20.6k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  41.2k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  20.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 20.6k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  20.6k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  20.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 93, False: 20.5k]
  ------------------
  376|  20.6k|}
abstract.c:_Py_SIZE_impl:
  240|    274|{
  241|    274|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 274, False: 0]
  ------------------
  242|    274|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 274, False: 0]
  ------------------
  243|    274|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    274|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    274|}
abstract.c:_Py_SET_SIZE_impl:
  254|    204|{
  255|    204|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 204, False: 0]
  ------------------
  256|    204|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 204, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|    204|    ob->ob_size = size;
  261|    204|#endif
  262|    204|}
abstract.c:PyType_CheckExact:
  772|   312k|static inline int PyType_CheckExact(PyObject *op) {
  773|   312k|    return Py_IS_TYPE(op, &PyType_Type);
  ------------------
  |  |  215|   312k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   312k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   312k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  774|   312k|}
boolobject.c:_Py_IS_TYPE_impl:
  248|  2.69k|{
  249|  2.69k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  2.69k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.69k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.69k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  2.69k|}
boolobject.c:_Py_TYPE_impl:
  233|  2.70k|{
  234|  2.70k|    return ob->ob_type;
  235|  2.70k|}
boolobject.c:PyType_Check:
  762|      6|static inline int PyType_Check(PyObject *op) {
  763|      6|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|      6|}
boolobject.c:PyType_HasFeature:
  749|      6|{
  750|      6|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|      6|    flags = type->tp_flags;
  756|      6|#endif
  757|      6|    return ((flags & feature) != 0);
  758|      6|}
bytes_methods.c:_Py_TYPE_impl:
  233|   774k|{
  234|   774k|    return ob->ob_type;
  235|   774k|}
bytes_methods.c:PyType_HasFeature:
  749|   516k|{
  750|   516k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   516k|    flags = type->tp_flags;
  756|   516k|#endif
  757|   516k|    return ((flags & feature) != 0);
  758|   516k|}
bytes_methods.c:_Py_SIZE_impl:
  240|   129k|{
  241|   129k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 129k, False: 0]
  ------------------
  242|   129k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 129k, False: 0]
  ------------------
  243|   129k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   129k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   129k|}
bytearrayobject.c:PyType_HasFeature:
  749|  2.74M|{
  750|  2.74M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  2.74M|    flags = type->tp_flags;
  756|  2.74M|#endif
  757|  2.74M|    return ((flags & feature) != 0);
  758|  2.74M|}
bytearrayobject.c:_Py_SIZE_impl:
  240|  4.86M|{
  241|  4.86M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 4.86M, False: 0]
  ------------------
  242|  4.86M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 4.86M, False: 0]
  ------------------
  243|  4.86M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  4.86M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  4.86M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  4.86M|}
bytearrayobject.c:_Py_SET_SIZE_impl:
  254|  1.05M|{
  255|  1.05M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 1.05M, False: 0]
  ------------------
  256|  1.05M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 1.05M, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|  1.05M|    ob->ob_size = size;
  261|  1.05M|#endif
  262|  1.05M|}
bytearrayobject.c:PyObject_TypeCheck:
  374|  2.62M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  2.62M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  5.25M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  2.62M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.62M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 2.62M, False: 562]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|    562|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    562|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    562|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 562]
  ------------------
  376|  2.62M|}
bytearrayobject.c:_Py_IS_TYPE_impl:
  248|  2.62M|{
  249|  2.62M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  2.62M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.62M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.62M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  2.62M|}
bytearrayobject.c:_Py_TYPE_impl:
  233|  17.4M|{
  234|  17.4M|    return ob->ob_type;
  235|  17.4M|}
bytesobject.c:Py_SET_TYPE:
  206|  2.00M|{
  207|  2.00M|    ob->ob_type = type;
  208|  2.00M|}
bytesobject.c:PyType_HasFeature:
  749|  60.1M|{
  750|  60.1M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  60.1M|    flags = type->tp_flags;
  756|  60.1M|#endif
  757|  60.1M|    return ((flags & feature) != 0);
  758|  60.1M|}
bytesobject.c:_Py_TYPE_impl:
  233|   139M|{
  234|   139M|    return ob->ob_type;
  235|   139M|}
bytesobject.c:_Py_IS_TYPE_impl:
  248|  12.6M|{
  249|  12.6M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  12.6M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.6M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  12.6M|}
bytesobject.c:_Py_SIZE_impl:
  240|  30.4M|{
  241|  30.4M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 30.4M, False: 0]
  ------------------
  242|  30.4M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 30.4M, False: 0]
  ------------------
  243|  30.4M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  30.4M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  30.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  30.4M|}
bytesobject.c:_Py_SET_SIZE_impl:
  254|  2.44M|{
  255|  2.44M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyLong_Type);
  ------------------
  |  Branch (255:5): [True: 2.44M, False: 0]
  ------------------
  256|  2.44M|    assert(Py_TYPE(_PyObject_CAST(ob)) != &PyBool_Type);
  ------------------
  |  Branch (256:5): [True: 2.44M, False: 0]
  ------------------
  257|       |#ifdef Py_GIL_DISABLED
  258|       |    _Py_atomic_store_ssize_relaxed(&ob->ob_size, size);
  259|       |#else
  260|  2.44M|    ob->ob_size = size;
  261|  2.44M|#endif
  262|  2.44M|}
call.c:_Py_TYPE_impl:
  233|  1.99M|{
  234|  1.99M|    return ob->ob_type;
  235|  1.99M|}
call.c:PyType_HasFeature:
  749|  1.26M|{
  750|  1.26M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.26M|    flags = type->tp_flags;
  756|  1.26M|#endif
  757|  1.26M|    return ((flags & feature) != 0);
  758|  1.26M|}
call.c:_Py_SIZE_impl:
  240|  96.1k|{
  241|  96.1k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 96.1k, False: 0]
  ------------------
  242|  96.1k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 96.1k, False: 0]
  ------------------
  243|  96.1k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  96.1k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  96.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  96.1k|}
call.c:_Py_IS_TYPE_impl:
  248|   141k|{
  249|   141k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   141k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   141k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   141k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   141k|}
capsule.c:_Py_IS_TYPE_impl:
  248|  62.4k|{
  249|  62.4k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  62.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  62.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  62.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  62.4k|}
capsule.c:_Py_TYPE_impl:
  233|  62.4k|{
  234|  62.4k|    return ob->ob_type;
  235|  62.4k|}
cellobject.c:_Py_IS_TYPE_impl:
  248|    451|{
  249|    451|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    451|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    451|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    451|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    451|}
cellobject.c:_Py_TYPE_impl:
  233|    451|{
  234|    451|    return ob->ob_type;
  235|    451|}
classobject.c:_Py_IS_TYPE_impl:
  248|   119k|{
  249|   119k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   119k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   119k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   119k|}
classobject.c:_Py_TYPE_impl:
  233|   119k|{
  234|   119k|    return ob->ob_type;
  235|   119k|}
codeobject.c:PyType_HasFeature:
  749|   237M|{
  750|   237M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   237M|    flags = type->tp_flags;
  756|   237M|#endif
  757|   237M|    return ((flags & feature) != 0);
  758|   237M|}
codeobject.c:_Py_TYPE_impl:
  233|   991M|{
  234|   991M|    return ob->ob_type;
  235|   991M|}
codeobject.c:_Py_SIZE_impl:
  240|   126M|{
  241|   126M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 126M, False: 0]
  ------------------
  242|   126M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 126M, False: 0]
  ------------------
  243|   126M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   126M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   126M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   126M|}
codeobject.c:_Py_IS_TYPE_impl:
  248|   448M|{
  249|   448M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   448M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   448M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   448M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   448M|}
codeobject.c:PyObject_TypeCheck:
  374|  52.5M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  52.5M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|   105M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  52.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 52.5M, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  52.5M|}
complexobject.c:Py_SET_TYPE:
  206|   105k|{
  207|   105k|    ob->ob_type = type;
  208|   105k|}
complexobject.c:PyObject_TypeCheck:
  374|  1.91M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  1.91M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  3.83M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  1.91M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.91M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 1.53M, False: 377k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|   377k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   377k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   377k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 377k]
  ------------------
  376|  1.91M|}
complexobject.c:_Py_IS_TYPE_impl:
  248|  2.18M|{
  249|  2.18M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  2.18M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.18M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.18M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  2.18M|}
complexobject.c:_Py_TYPE_impl:
  233|  2.74M|{
  234|  2.74M|    return ob->ob_type;
  235|  2.74M|}
complexobject.c:PyType_HasFeature:
  749|   183k|{
  750|   183k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   183k|    flags = type->tp_flags;
  756|   183k|#endif
  757|   183k|    return ((flags & feature) != 0);
  758|   183k|}
descrobject.c:PyType_HasFeature:
  749|  4.32k|{
  750|  4.32k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  4.32k|    flags = type->tp_flags;
  756|  4.32k|#endif
  757|  4.32k|    return ((flags & feature) != 0);
  758|  4.32k|}
descrobject.c:PyType_Check:
  762|  1.81k|static inline int PyType_Check(PyObject *op) {
  763|  1.81k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|  1.81k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|  1.81k|}
descrobject.c:_Py_SIZE_impl:
  240|    591|{
  241|    591|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 591, False: 0]
  ------------------
  242|    591|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 591, False: 0]
  ------------------
  243|    591|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    591|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    591|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    591|}
descrobject.c:_Py_TYPE_impl:
  233|  4.30M|{
  234|  4.30M|    return ob->ob_type;
  235|  4.30M|}
descrobject.c:_Py_IS_TYPE_impl:
  248|  2.21M|{
  249|  2.21M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  2.21M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.21M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  2.21M|}
descrobject.c:PyObject_TypeCheck:
  374|  2.21M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  2.21M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  4.43M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  2.21M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 2.14M, False: 70.8k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|  70.8k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  70.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  70.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 70.8k, False: 0]
  ------------------
  376|  2.21M|}
enumobject.c:_Py_TYPE_impl:
  233|  6.41M|{
  234|  6.41M|    return ob->ob_type;
  235|  6.41M|}
enumobject.c:PyType_HasFeature:
  749|  3.26M|{
  750|  3.26M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  3.26M|    flags = type->tp_flags;
  756|  3.26M|#endif
  757|  3.26M|    return ((flags & feature) != 0);
  758|  3.26M|}
enumobject.c:_Py_SIZE_impl:
  240|  1.24M|{
  241|  1.24M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 1.24M, False: 0]
  ------------------
  242|  1.24M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 1.24M, False: 0]
  ------------------
  243|  1.24M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  1.24M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  1.24M|}
enumobject.c:PyType_Check:
  762|   113k|static inline int PyType_Check(PyObject *op) {
  763|   113k|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|   113k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|   113k|}
genobject.c:_Py_IS_TYPE_impl:
  248|  54.3k|{
  249|  54.3k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  54.3k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  54.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  54.3k|}
genobject.c:_Py_TYPE_impl:
  233|  54.3k|{
  234|  54.3k|    return ob->ob_type;
  235|  54.3k|}
fileobject.c:PyType_HasFeature:
  749|     93|{
  750|     93|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     93|    flags = type->tp_flags;
  756|     93|#endif
  757|     93|    return ((flags & feature) != 0);
  758|     93|}
fileobject.c:_Py_TYPE_impl:
  233|     93|{
  234|     93|    return ob->ob_type;
  235|     93|}
floatobject.c:Py_SET_TYPE:
  206|  68.9k|{
  207|  68.9k|    ob->ob_type = type;
  208|  68.9k|}
floatobject.c:PyType_HasFeature:
  749|   196k|{
  750|   196k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   196k|    flags = type->tp_flags;
  756|   196k|#endif
  757|   196k|    return ((flags & feature) != 0);
  758|   196k|}
floatobject.c:_Py_TYPE_impl:
  233|   104M|{
  234|   104M|    return ob->ob_type;
  235|   104M|}
floatobject.c:PyObject_TypeCheck:
  374|   103M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|   103M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|   207M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   103M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   103M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 103M, False: 112k]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|   112k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   112k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   112k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 112k]
  ------------------
  376|   103M|}
floatobject.c:_Py_IS_TYPE_impl:
  248|   104M|{
  249|   104M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   104M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   104M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   104M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   104M|}
frameobject.c:PyObject_TypeCheck:
  374|  23.1k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  23.1k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  46.2k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  23.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 23.1k, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  23.1k|}
frameobject.c:_Py_IS_TYPE_impl:
  248|  24.2k|{
  249|  24.2k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  24.2k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  24.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  24.2k|}
frameobject.c:_Py_SIZE_impl:
  240|      4|{
  241|      4|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 4, False: 0]
  ------------------
  242|      4|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 4, False: 0]
  ------------------
  243|      4|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|      4|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|      4|}
frameobject.c:PyType_HasFeature:
  749|     10|{
  750|     10|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     10|    flags = type->tp_flags;
  756|     10|#endif
  757|     10|    return ((flags & feature) != 0);
  758|     10|}
frameobject.c:_Py_TYPE_impl:
  233|  24.2k|{
  234|  24.2k|    return ob->ob_type;
  235|  24.2k|}
funcobject.c:PyType_HasFeature:
  749|  11.1k|{
  750|  11.1k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  11.1k|    flags = type->tp_flags;
  756|  11.1k|#endif
  757|  11.1k|    return ((flags & feature) != 0);
  758|  11.1k|}
funcobject.c:_Py_TYPE_impl:
  233|  74.6k|{
  234|  74.6k|    return ob->ob_type;
  235|  74.6k|}
funcobject.c:PyObject_TypeCheck:
  374|  3.27k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  3.27k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  6.55k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  3.27k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 3.27k, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  3.27k|}
funcobject.c:_Py_IS_TYPE_impl:
  248|  63.4k|{
  249|  63.4k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  63.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  63.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  63.4k|}
iterobject.c:_Py_IS_TYPE_impl:
  248|    148|{
  249|    148|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    148|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    148|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    148|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    148|}
iterobject.c:_Py_TYPE_impl:
  233|    148|{
  234|    148|    return ob->ob_type;
  235|    148|}
lazyimportobject.c:PyType_HasFeature:
  749|     19|{
  750|     19|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     19|    flags = type->tp_flags;
  756|     19|#endif
  757|     19|    return ((flags & feature) != 0);
  758|     19|}
lazyimportobject.c:_Py_TYPE_impl:
  233|     47|{
  234|     47|    return ob->ob_type;
  235|     47|}
lazyimportobject.c:_Py_IS_TYPE_impl:
  248|     28|{
  249|     28|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     28|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     28|}
memoryobject.c:_Py_IS_TYPE_impl:
  248|    188|{
  249|    188|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|    188|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    188|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    188|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    188|}
memoryobject.c:_Py_TYPE_impl:
  233|    894|{
  234|    894|    return ob->ob_type;
  235|    894|}
memoryobject.c:PyType_HasFeature:
  749|    419|{
  750|    419|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    419|    flags = type->tp_flags;
  756|    419|#endif
  757|    419|    return ((flags & feature) != 0);
  758|    419|}
memoryobject.c:_Py_SIZE_impl:
  240|     97|{
  241|     97|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 97, False: 0]
  ------------------
  242|     97|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 97, False: 0]
  ------------------
  243|     97|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|     97|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     97|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|     97|}
methodobject.c:PyObject_TypeCheck:
  374|  4.29M|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  4.29M|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  8.58M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  4.29M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.29M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 4.29M, False: 620]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|    620|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    620|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    620|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 608, False: 12]
  ------------------
  376|  4.29M|}
methodobject.c:_Py_IS_TYPE_impl:
  248|  6.23M|{
  249|  6.23M|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  6.23M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.23M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.23M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  6.23M|}
methodobject.c:_Py_TYPE_impl:
  233|  6.23M|{
  234|  6.23M|    return ob->ob_type;
  235|  6.23M|}
methodobject.c:PyType_Check:
  762|      6|static inline int PyType_Check(PyObject *op) {
  763|      6|    return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS);
  ------------------
  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  ------------------
  764|      6|}
methodobject.c:PyType_HasFeature:
  749|     12|{
  750|     12|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|     12|    flags = type->tp_flags;
  756|     12|#endif
  757|     12|    return ((flags & feature) != 0);
  758|     12|}
namespaceobject.c:_Py_TYPE_impl:
  233|     30|{
  234|     30|    return ob->ob_type;
  235|     30|}
unicode_format.c:PyType_HasFeature:
  749|    231|{
  750|    231|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|    231|    flags = type->tp_flags;
  756|    231|#endif
  757|    231|    return ((flags & feature) != 0);
  758|    231|}
unicode_format.c:_Py_TYPE_impl:
  233|    273|{
  234|    273|    return ob->ob_type;
  235|    273|}
unicode_format.c:_Py_IS_TYPE_impl:
  248|     42|{
  249|     42|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|     42|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     42|}
Python-ast.c:_Py_TYPE_impl:
  233|   548k|{
  234|   548k|    return ob->ob_type;
  235|   548k|}
Python-ast.c:PyType_HasFeature:
  749|   132k|{
  750|   132k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   132k|    flags = type->tp_flags;
  756|   132k|#endif
  757|   132k|    return ((flags & feature) != 0);
  758|   132k|}
Python-ast.c:_Py_SIZE_impl:
  240|    230|{
  241|    230|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 230, False: 0]
  ------------------
  242|    230|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 230, False: 0]
  ------------------
  243|    230|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    230|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    230|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    230|}
assemble.c:PyType_HasFeature:
  749|   305k|{
  750|   305k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   305k|    flags = type->tp_flags;
  756|   305k|#endif
  757|   305k|    return ((flags & feature) != 0);
  758|   305k|}
assemble.c:_Py_TYPE_impl:
  233|   706k|{
  234|   706k|    return ob->ob_type;
  235|   706k|}
assemble.c:_Py_SIZE_impl:
  240|   200k|{
  241|   200k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 200k, False: 0]
  ------------------
  242|   200k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 200k, False: 0]
  ------------------
  243|   200k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|   200k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|   200k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|   200k|}
ast.c:_Py_TYPE_impl:
  233|  9.65k|{
  234|  9.65k|    return ob->ob_type;
  235|  9.65k|}
ast.c:_Py_IS_TYPE_impl:
  248|  9.65k|{
  249|  9.65k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  9.65k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  9.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  9.65k|}
ast_preprocess.c:PyType_HasFeature:
  749|   157k|{
  750|   157k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   157k|    flags = type->tp_flags;
  756|   157k|#endif
  757|   157k|    return ((flags & feature) != 0);
  758|   157k|}
ast_preprocess.c:_Py_TYPE_impl:
  233|   157k|{
  234|   157k|    return ob->ob_type;
  235|   157k|}
ast_unparse.c:_Py_IS_TYPE_impl:
  248|   334k|{
  249|   334k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   334k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   334k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   334k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   334k|}
ast_unparse.c:_Py_TYPE_impl:
  233|   334k|{
  234|   334k|    return ob->ob_type;
  235|   334k|}
ast_unparse.c:PyObject_TypeCheck:
  374|  23.2k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  23.2k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  46.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  23.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 23.2k, False: 0]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 0, False: 0]
  ------------------
  376|  23.2k|}
crossinterp.c:_Py_TYPE_impl:
  233|      2|{
  234|      2|    return ob->ob_type;
  235|      2|}
pegen.c:PyType_HasFeature:
  749|  1.17M|{
  750|  1.17M|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|  1.17M|    flags = type->tp_flags;
  756|  1.17M|#endif
  757|  1.17M|    return ((flags & feature) != 0);
  758|  1.17M|}
pegen.c:_Py_TYPE_impl:
  233|  3.23M|{
  234|  3.23M|    return ob->ob_type;
  235|  3.23M|}
pegen.c:_Py_SIZE_impl:
  240|  1.02M|{
  241|  1.02M|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 1.02M, False: 0]
  ------------------
  242|  1.02M|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 1.02M, False: 0]
  ------------------
  243|  1.02M|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  1.02M|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  1.02M|}
pegen.c:PyObject_TypeCheck:
  374|  8.74k|static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
  375|  8.74k|    return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  215|  17.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  8.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 8.63k, False: 117]
  |  |  ------------------
  ------------------
                  return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
  ------------------
  |  |  213|    117|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (375:36): [True: 117, False: 0]
  ------------------
  376|  8.74k|}
pegen.c:_Py_IS_TYPE_impl:
  248|  8.74k|{
  249|  8.74k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|  8.74k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  8.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  8.74k|}
lexer.c:PyType_HasFeature:
  749|   196k|{
  750|   196k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   196k|    flags = type->tp_flags;
  756|   196k|#endif
  757|   196k|    return ((flags & feature) != 0);
  758|   196k|}
lexer.c:_Py_TYPE_impl:
  233|   197k|{
  234|   197k|    return ob->ob_type;
  235|   197k|}
lexer.c:_Py_SIZE_impl:
  240|    231|{
  241|    231|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 231, False: 0]
  ------------------
  242|    231|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 231, False: 0]
  ------------------
  243|    231|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|    231|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|    231|}
action_helpers.c:_Py_IS_TYPE_impl:
  248|   327k|{
  249|   327k|    return Py_TYPE(ob) == type;
  ------------------
  |  |  213|   327k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|   327k|}
action_helpers.c:_Py_TYPE_impl:
  233|   629k|{
  234|   629k|    return ob->ob_type;
  235|   629k|}
action_helpers.c:PyType_HasFeature:
  749|   284k|{
  750|   284k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   284k|    flags = type->tp_flags;
  756|   284k|#endif
  757|   284k|    return ((flags & feature) != 0);
  758|   284k|}
action_helpers.c:_Py_SIZE_impl:
  240|  8.71k|{
  241|  8.71k|    assert(Py_TYPE(ob) != &PyLong_Type);
  ------------------
  |  Branch (241:5): [True: 8.71k, False: 0]
  ------------------
  242|  8.71k|    assert(Py_TYPE(ob) != &PyBool_Type);
  ------------------
  |  Branch (242:5): [True: 8.71k, False: 0]
  ------------------
  243|  8.71k|    return  _PyVarObject_CAST(ob)->ob_size;
  ------------------
  |  |  182|  8.71k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  8.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  244|  8.71k|}
string_parser.c:PyType_HasFeature:
  749|   176k|{
  750|   176k|    unsigned long flags;
  751|       |#ifdef Py_LIMITED_API
  752|       |    // PyTypeObject is opaque in the limited C API
  753|       |    flags = PyType_GetFlags(type);
  754|       |#else
  755|   176k|    flags = type->tp_flags;
  756|   176k|#endif
  757|   176k|    return ((flags & feature) != 0);
  758|   176k|}
string_parser.c:_Py_TYPE_impl:
  233|   176k|{
  234|   176k|    return ob->ob_type;
  235|   176k|}

gc.c:PyDTrace_GC_START_ENABLED:
   44|  7.76k|static inline int PyDTrace_GC_START_ENABLED(void) { return 0; }
gc.c:PyDTrace_GC_DONE_ENABLED:
   45|  7.76k|static inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; }
import.c:PyDTrace_IMPORT_FIND_LOAD_START_ENABLED:
   50|    336|static inline int PyDTrace_IMPORT_FIND_LOAD_START_ENABLED(void) { return 0; }
import.c:PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED:
   51|    336|static inline int PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED(void) { return 0; }
sysmodule.c:PyDTrace_AUDIT_ENABLED:
   52|  30.7k|static inline int PyDTrace_AUDIT_ENABLED(void) { return 0; }

exceptions.c:_Py_XNewRef:
  541|   224k|{
  542|   224k|    Py_XINCREF(obj);
  ------------------
  |  |  514|   224k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   224k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   224k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|   224k|    return obj;
  544|   224k|}
exceptions.c:Py_XINCREF:
  508|   224k|{
  509|   224k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   224k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 41.4k, False: 183k]
  ------------------
  510|  41.4k|        Py_INCREF(op);
  ------------------
  |  |  310|  41.4k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  41.4k|    }
  512|   224k|}
exceptions.c:Py_XDECREF:
  518|   374k|{
  519|   374k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   374k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 65.6k, False: 308k]
  ------------------
  520|  65.6k|        Py_DECREF(op);
  ------------------
  |  |  430|  65.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  65.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  65.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  65.6k|    }
  522|   374k|}
exceptions.c:_Py_NewRef:
  535|   351k|{
  536|   351k|    Py_INCREF(obj);
  ------------------
  |  |  310|   351k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   351k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   351k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   351k|    return obj;
  538|   351k|}
exceptions.c:Py_INCREF:
  256|   403k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   403k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   403k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 65.3k, False: 337k]
  ------------------
  288|       |        // the object is immortal
  289|  65.3k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  65.3k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  65.3k|        return;
  291|  65.3k|    }
  292|   337k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   337k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   337k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   337k|#endif
  308|   337k|}
exceptions.c:Py_DECREF:
  418|   543k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   543k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   543k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   543k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   543k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 70.6k, False: 472k]
  |  |  ------------------
  ------------------
  422|  70.6k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  70.6k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  70.6k|        return;
  424|  70.6k|    }
  425|   472k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   472k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   472k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 215k, False: 257k]
  ------------------
  427|   215k|        _Py_Dealloc(op);
  428|   215k|    }
  429|   472k|}
exceptions.c:_Py_IsImmortal:
  127|   543k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   543k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   543k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   543k|}
genericaliasobject.c:Py_DECREF:
  418|     10|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     10|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     10|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 5, False: 5]
  |  |  ------------------
  ------------------
  422|      5|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      5|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      5|        return;
  424|      5|    }
  425|      5|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      5|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      5|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 5, False: 0]
  ------------------
  427|      5|        _Py_Dealloc(op);
  428|      5|    }
  429|      5|}
genericaliasobject.c:_Py_IsImmortal:
  127|     10|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     10|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     10|}
genericaliasobject.c:Py_XDECREF:
  518|     15|{
  519|     15|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     15|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 10, False: 5]
  ------------------
  520|     10|        Py_DECREF(op);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     10|    }
  522|     15|}
genericaliasobject.c:_Py_NewRef:
  535|     79|{
  536|     79|    Py_INCREF(obj);
  ------------------
  |  |  310|     79|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     79|    return obj;
  538|     79|}
genericaliasobject.c:Py_INCREF:
  256|     79|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     79|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     79|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 79, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|     79|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     79|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     79|        return;
  291|     79|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
genericaliasobject.c:_Py_REFCNT:
  105|      5|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|      5|    #if !defined(Py_GIL_DISABLED)
  107|      5|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|      5|    }
listobject.c:Py_DECREF:
  418|  6.51M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  6.51M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  6.51M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.51M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.51M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3.00M, False: 3.51M]
  |  |  ------------------
  ------------------
  422|  3.00M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  3.00M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  3.00M|        return;
  424|  3.00M|    }
  425|  3.51M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  3.51M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  3.51M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 2.66M, False: 840k]
  ------------------
  427|  2.66M|        _Py_Dealloc(op);
  428|  2.66M|    }
  429|  3.51M|}
listobject.c:_Py_IsImmortal:
  127|  7.04M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  7.04M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  7.04M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  7.04M|}
listobject.c:Py_XDECREF:
  518|  6.46M|{
  519|  6.46M|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  6.46M|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 6.31M, False: 152k]
  ------------------
  520|  6.31M|        Py_DECREF(op);
  ------------------
  |  |  430|  6.31M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.31M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.31M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  6.31M|    }
  522|  6.46M|}
listobject.c:_Py_NewRef:
  535|  4.80M|{
  536|  4.80M|    Py_INCREF(obj);
  ------------------
  |  |  310|  4.80M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.80M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.80M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  4.80M|    return obj;
  538|  4.80M|}
listobject.c:Py_INCREF:
  256|  4.94M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  4.94M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  4.94M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 2.48M, False: 2.45M]
  ------------------
  288|       |        // the object is immortal
  289|  2.48M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  2.48M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  2.48M|        return;
  291|  2.48M|    }
  292|  2.45M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  2.45M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  2.45M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  2.45M|#endif
  308|  2.45M|}
listobject.c:_Py_XNewRef:
  541|   138k|{
  542|   138k|    Py_XINCREF(obj);
  ------------------
  |  |  514|   138k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   138k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   138k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|   138k|    return obj;
  544|   138k|}
listobject.c:Py_XINCREF:
  508|   138k|{
  509|   138k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   138k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 138k, False: 0]
  ------------------
  510|   138k|        Py_INCREF(op);
  ------------------
  |  |  310|   138k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   138k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   138k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|   138k|    }
  512|   138k|}
longobject.c:_Py_IsImmortal:
  127|  3.80M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.80M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.80M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.80M|}
longobject.c:Py_DECREF:
  418|   912k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   912k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   912k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   912k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   912k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 647k, False: 265k]
  |  |  ------------------
  ------------------
  422|   647k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   647k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   647k|        return;
  424|   647k|    }
  425|   265k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   265k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   265k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 240k, False: 25.1k]
  ------------------
  427|   240k|        _Py_Dealloc(op);
  428|   240k|    }
  429|   265k|}
longobject.c:Py_XDECREF:
  518|   705k|{
  519|   705k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   705k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 528k, False: 177k]
  ------------------
  520|   528k|        Py_DECREF(op);
  ------------------
  |  |  430|   528k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   528k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   528k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   528k|    }
  522|   705k|}
longobject.c:Py_INCREF:
  256|  1.49M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.49M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.49M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.45M, False: 36.6k]
  ------------------
  288|       |        // the object is immortal
  289|  1.45M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.45M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.45M|        return;
  291|  1.45M|    }
  292|  36.6k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  36.6k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  36.6k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  36.6k|#endif
  308|  36.6k|}
longobject.c:_Py_NewRef:
  535|   247k|{
  536|   247k|    Py_INCREF(obj);
  ------------------
  |  |  310|   247k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   247k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   247k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   247k|    return obj;
  538|   247k|}
longobject.c:_Py_REFCNT:
  105|  47.7k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  47.7k|    #if !defined(Py_GIL_DISABLED)
  107|  47.7k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  47.7k|    }
dictobject.c:_Py_XNewRef:
  541|  1.14M|{
  542|  1.14M|    Py_XINCREF(obj);
  ------------------
  |  |  514|  1.14M|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.14M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.14M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  1.14M|    return obj;
  544|  1.14M|}
dictobject.c:Py_XINCREF:
  508|  1.14M|{
  509|  1.14M|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.14M|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 352k, False: 790k]
  ------------------
  510|   352k|        Py_INCREF(op);
  ------------------
  |  |  310|   352k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   352k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   352k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|   352k|    }
  512|  1.14M|}
dictobject.c:_Py_IsImmortal:
  127|  13.0M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  13.0M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  13.0M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  13.0M|}
dictobject.c:_Py_IsStaticImmortal:
  141|  37.6k|{
  142|  37.6k|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|  37.6k|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|  37.6k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|  37.6k|}
dictobject.c:Py_INCREF:
  256|  18.4M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  18.4M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  18.4M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 10.7M, False: 7.74M]
  ------------------
  288|       |        // the object is immortal
  289|  10.7M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  10.7M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  10.7M|        return;
  291|  10.7M|    }
  292|  7.74M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  7.74M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  7.74M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  7.74M|#endif
  308|  7.74M|}
dictobject.c:Py_DECREF:
  418|  11.2M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  11.2M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  11.2M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.2M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.2M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 7.40M, False: 3.82M]
  |  |  ------------------
  ------------------
  422|  7.40M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  7.40M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  7.40M|        return;
  424|  7.40M|    }
  425|  3.82M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  3.82M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  3.82M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 1.38M, False: 2.43M]
  ------------------
  427|  1.38M|        _Py_Dealloc(op);
  428|  1.38M|    }
  429|  3.82M|}
dictobject.c:_Py_REFCNT:
  105|  8.07M|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  8.07M|    #if !defined(Py_GIL_DISABLED)
  107|  8.07M|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  8.07M|    }
dictobject.c:_Py_NewRef:
  535|  16.7M|{
  536|  16.7M|    Py_INCREF(obj);
  ------------------
  |  |  310|  16.7M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  16.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  16.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  16.7M|    return obj;
  538|  16.7M|}
dictobject.c:Py_XDECREF:
  518|  8.91M|{
  519|  8.91M|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  8.91M|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 8.91M, False: 2.34k]
  ------------------
  520|  8.91M|        Py_DECREF(op);
  ------------------
  |  |  430|  8.91M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.91M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.91M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  8.91M|    }
  522|  8.91M|}
dictobject.c:Py_SET_REFCNT:
  154|  1.75M|static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
  155|  1.75M|    assert(refcnt >= 0);
  ------------------
  |  Branch (155:5): [True: 1.75M, False: 0]
  ------------------
  156|       |#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
  157|       |    || defined(_Py_OPAQUE_PYOBJECT)
  158|       |    // Stable ABI implements Py_SET_REFCNT() as a function call
  159|       |    // on limited C API version 3.13 and newer, and abi3t.
  160|       |    _Py_SetRefcnt(ob, refcnt);
  161|       |#else
  162|       |    // This immortal check is for code that is unaware of immortal objects.
  163|       |    // The runtime tracks these objects and we should avoid as much
  164|       |    // as possible having extensions inadvertently change the refcnt
  165|       |    // of an immortalized object.
  166|  1.75M|    if (_Py_IsImmortal(ob)) {
  ------------------
  |  |  137|  1.75M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.75M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.75M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 1.75M]
  |  |  ------------------
  ------------------
  167|      0|        return;
  168|      0|    }
  169|  1.75M|#ifndef Py_GIL_DISABLED
  170|  1.75M|#if SIZEOF_VOID_P > 4
  171|  1.75M|    ob->ob_refcnt = (uint32_t)refcnt;
  172|       |#else
  173|       |    ob->ob_refcnt = refcnt;
  174|       |#endif
  175|       |#else
  176|       |    if (_Py_IsOwnedByCurrentThread(ob)) {
  177|       |        if ((size_t)refcnt > (size_t)UINT32_MAX) {
  178|       |            // On overflow, make the object immortal
  179|       |            ob->ob_tid = _Py_UNOWNED_TID;
  180|       |            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
  181|       |            ob->ob_ref_shared = 0;
  182|       |        }
  183|       |        else {
  184|       |            // Set local refcount to desired refcount and shared refcount
  185|       |            // to zero, but preserve the shared refcount flags.
  186|       |            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
  187|       |            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
  188|       |        }
  189|       |    }
  190|       |    else {
  191|       |        // Set local refcount to zero and shared refcount to desired refcount.
  192|       |        // Mark the object as merged.
  193|       |        ob->ob_tid = _Py_UNOWNED_TID;
  194|       |        ob->ob_ref_local = 0;
  195|       |        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
  196|       |    }
  197|       |#endif  // Py_GIL_DISABLED
  198|  1.75M|#endif  // Py_LIMITED_API
  199|  1.75M|}
moduleobject.c:Py_SET_REFCNT:
  154|     51|static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
  155|     51|    assert(refcnt >= 0);
  ------------------
  |  Branch (155:5): [True: 51, False: 0]
  ------------------
  156|       |#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
  157|       |    || defined(_Py_OPAQUE_PYOBJECT)
  158|       |    // Stable ABI implements Py_SET_REFCNT() as a function call
  159|       |    // on limited C API version 3.13 and newer, and abi3t.
  160|       |    _Py_SetRefcnt(ob, refcnt);
  161|       |#else
  162|       |    // This immortal check is for code that is unaware of immortal objects.
  163|       |    // The runtime tracks these objects and we should avoid as much
  164|       |    // as possible having extensions inadvertently change the refcnt
  165|       |    // of an immortalized object.
  166|     51|    if (_Py_IsImmortal(ob)) {
  ------------------
  |  |  137|     51|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 51, False: 0]
  |  |  ------------------
  ------------------
  167|     51|        return;
  168|     51|    }
  169|      0|#ifndef Py_GIL_DISABLED
  170|      0|#if SIZEOF_VOID_P > 4
  171|      0|    ob->ob_refcnt = (uint32_t)refcnt;
  172|       |#else
  173|       |    ob->ob_refcnt = refcnt;
  174|       |#endif
  175|       |#else
  176|       |    if (_Py_IsOwnedByCurrentThread(ob)) {
  177|       |        if ((size_t)refcnt > (size_t)UINT32_MAX) {
  178|       |            // On overflow, make the object immortal
  179|       |            ob->ob_tid = _Py_UNOWNED_TID;
  180|       |            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
  181|       |            ob->ob_ref_shared = 0;
  182|       |        }
  183|       |        else {
  184|       |            // Set local refcount to desired refcount and shared refcount
  185|       |            // to zero, but preserve the shared refcount flags.
  186|       |            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
  187|       |            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
  188|       |        }
  189|       |    }
  190|       |    else {
  191|       |        // Set local refcount to zero and shared refcount to desired refcount.
  192|       |        // Mark the object as merged.
  193|       |        ob->ob_tid = _Py_UNOWNED_TID;
  194|       |        ob->ob_ref_local = 0;
  195|       |        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
  196|       |    }
  197|       |#endif  // Py_GIL_DISABLED
  198|      0|#endif  // Py_LIMITED_API
  199|      0|}
moduleobject.c:_Py_IsImmortal:
  127|   345k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   345k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   345k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   345k|}
moduleobject.c:_Py_NewRef:
  535|    176|{
  536|    176|    Py_INCREF(obj);
  ------------------
  |  |  310|    176|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    176|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    176|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|    176|    return obj;
  538|    176|}
moduleobject.c:Py_INCREF:
  256|    176|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    176|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    176|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 80, False: 96]
  ------------------
  288|       |        // the object is immortal
  289|     80|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     80|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     80|        return;
  291|     80|    }
  292|     96|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     96|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     96|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     96|#endif
  308|     96|}
moduleobject.c:Py_DECREF:
  418|   345k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   345k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   345k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   345k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   345k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 343k, False: 2.20k]
  |  |  ------------------
  ------------------
  422|   343k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   343k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   343k|        return;
  424|   343k|    }
  425|  2.20k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.20k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.20k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 1, False: 2.20k]
  ------------------
  427|      1|        _Py_Dealloc(op);
  428|      1|    }
  429|  2.20k|}
moduleobject.c:Py_XDECREF:
  518|    333|{
  519|    333|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    333|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 137, False: 196]
  ------------------
  520|    137|        Py_DECREF(op);
  ------------------
  |  |  430|    137|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    137|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    137|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    137|    }
  522|    333|}
moduleobject.c:_Py_REFCNT:
  105|      1|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|      1|    #if !defined(Py_GIL_DISABLED)
  107|      1|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|      1|    }
object.c:_Py_REFCNT:
  105|   185k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   185k|    #if !defined(Py_GIL_DISABLED)
  107|   185k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   185k|    }
object.c:Py_XDECREF:
  518|    560|{
  519|    560|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    560|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 22, False: 538]
  ------------------
  520|     22|        Py_DECREF(op);
  ------------------
  |  |  430|     22|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     22|    }
  522|    560|}
object.c:Py_INCREF:
  256|  11.7M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  11.7M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  11.7M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 8.26M, False: 3.48M]
  ------------------
  288|       |        // the object is immortal
  289|  8.26M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  8.26M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  8.26M|        return;
  291|  8.26M|    }
  292|  3.48M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  3.48M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  3.48M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  3.48M|#endif
  308|  3.48M|}
object.c:Py_DECREF:
  418|  11.5M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  11.5M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  11.5M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 8.12M, False: 3.43M]
  |  |  ------------------
  ------------------
  422|  8.12M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  8.12M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  8.12M|        return;
  424|  8.12M|    }
  425|  3.43M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  3.43M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  3.43M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 2.32k, False: 3.43M]
  ------------------
  427|  2.32k|        _Py_Dealloc(op);
  428|  2.32k|    }
  429|  3.43M|}
object.c:_Py_NewRef:
  535|   102k|{
  536|   102k|    Py_INCREF(obj);
  ------------------
  |  |  310|   102k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   102k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   102k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   102k|    return obj;
  538|   102k|}
object.c:_Py_IsImmortal:
  127|  19.4M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  19.4M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  19.4M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  19.4M|}
object.c:_Py_IsStaticImmortal:
  141|  1.92M|{
  142|  1.92M|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|  1.92M|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|  1.92M|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|  1.92M|}
object.c:Py_SET_REFCNT:
  154|  2.86k|static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
  155|  2.86k|    assert(refcnt >= 0);
  ------------------
  |  Branch (155:5): [True: 2.86k, False: 0]
  ------------------
  156|       |#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
  157|       |    || defined(_Py_OPAQUE_PYOBJECT)
  158|       |    // Stable ABI implements Py_SET_REFCNT() as a function call
  159|       |    // on limited C API version 3.13 and newer, and abi3t.
  160|       |    _Py_SetRefcnt(ob, refcnt);
  161|       |#else
  162|       |    // This immortal check is for code that is unaware of immortal objects.
  163|       |    // The runtime tracks these objects and we should avoid as much
  164|       |    // as possible having extensions inadvertently change the refcnt
  165|       |    // of an immortalized object.
  166|  2.86k|    if (_Py_IsImmortal(ob)) {
  ------------------
  |  |  137|  2.86k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.86k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.86k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 2.86k]
  |  |  ------------------
  ------------------
  167|      0|        return;
  168|      0|    }
  169|  2.86k|#ifndef Py_GIL_DISABLED
  170|  2.86k|#if SIZEOF_VOID_P > 4
  171|  2.86k|    ob->ob_refcnt = (uint32_t)refcnt;
  172|       |#else
  173|       |    ob->ob_refcnt = refcnt;
  174|       |#endif
  175|       |#else
  176|       |    if (_Py_IsOwnedByCurrentThread(ob)) {
  177|       |        if ((size_t)refcnt > (size_t)UINT32_MAX) {
  178|       |            // On overflow, make the object immortal
  179|       |            ob->ob_tid = _Py_UNOWNED_TID;
  180|       |            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
  181|       |            ob->ob_ref_shared = 0;
  182|       |        }
  183|       |        else {
  184|       |            // Set local refcount to desired refcount and shared refcount
  185|       |            // to zero, but preserve the shared refcount flags.
  186|       |            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
  187|       |            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
  188|       |        }
  189|       |    }
  190|       |    else {
  191|       |        // Set local refcount to zero and shared refcount to desired refcount.
  192|       |        // Mark the object as merged.
  193|       |        ob->ob_tid = _Py_UNOWNED_TID;
  194|       |        ob->ob_ref_local = 0;
  195|       |        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
  196|       |    }
  197|       |#endif  // Py_GIL_DISABLED
  198|  2.86k|#endif  // Py_LIMITED_API
  199|  2.86k|}
rangeobject.c:Py_DECREF:
  418|  1.73k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.73k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.73k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.69k, False: 41]
  |  |  ------------------
  ------------------
  422|  1.69k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.69k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.69k|        return;
  424|  1.69k|    }
  425|     41|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     41|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     41|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 17, False: 24]
  ------------------
  427|     17|        _Py_Dealloc(op);
  428|     17|    }
  429|     41|}
rangeobject.c:_Py_IsImmortal:
  127|  1.73k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.73k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.73k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.73k|}
rangeobject.c:_Py_NewRef:
  535|      6|{
  536|      6|    Py_INCREF(obj);
  ------------------
  |  |  310|      6|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      6|    return obj;
  538|      6|}
rangeobject.c:Py_INCREF:
  256|      8|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      8|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      8|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 6, False: 2]
  ------------------
  288|       |        // the object is immortal
  289|      6|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      6|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      6|        return;
  291|      6|    }
  292|      2|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      2|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      2|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      2|#endif
  308|      2|}
rangeobject.c:Py_XDECREF:
  518|      6|{
  519|      6|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      6|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 6, False: 0]
  ------------------
  520|      6|        Py_DECREF(op);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      6|    }
  522|      6|}
sentinelobject.c:Py_DECREF:
  418|      3|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|      3|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|      3|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1, False: 2]
  |  |  ------------------
  ------------------
  422|      1|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      1|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      1|        return;
  424|      1|    }
  425|      2|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      2|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      2|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 2]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      2|}
sentinelobject.c:_Py_IsImmortal:
  127|      3|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|      3|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|      3|}
sentinelobject.c:_Py_NewRef:
  535|      9|{
  536|      9|    Py_INCREF(obj);
  ------------------
  |  |  310|      9|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      9|    return obj;
  538|      9|}
sentinelobject.c:Py_INCREF:
  256|      9|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      9|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      9|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 5, False: 4]
  ------------------
  288|       |        // the object is immortal
  289|      5|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      5|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      5|        return;
  291|      5|    }
  292|      4|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      4|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      4|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      4|#endif
  308|      4|}
sentinelobject.c:_Py_XNewRef:
  541|      3|{
  542|      3|    Py_XINCREF(obj);
  ------------------
  |  |  514|      3|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      3|    return obj;
  544|      3|}
sentinelobject.c:Py_XINCREF:
  508|      3|{
  509|      3|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      3|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 0, False: 3]
  ------------------
  510|      0|        Py_INCREF(op);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|    }
  512|      3|}
setobject.c:Py_DECREF:
  418|  1.05M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.05M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.05M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.05M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.05M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 560k, False: 489k]
  |  |  ------------------
  ------------------
  422|   560k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   560k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   560k|        return;
  424|   560k|    }
  425|   489k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   489k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   489k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 17.9k, False: 471k]
  ------------------
  427|  17.9k|        _Py_Dealloc(op);
  428|  17.9k|    }
  429|   489k|}
setobject.c:_Py_IsImmortal:
  127|  1.05M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.05M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.05M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.05M|}
setobject.c:Py_INCREF:
  256|  1.38M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.38M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.38M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 575k, False: 805k]
  ------------------
  288|       |        // the object is immortal
  289|   575k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   575k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   575k|        return;
  291|   575k|    }
  292|   805k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   805k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   805k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   805k|#endif
  308|   805k|}
setobject.c:Py_XDECREF:
  518|  56.5k|{
  519|  56.5k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  56.5k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 2, False: 56.5k]
  ------------------
  520|      2|        Py_DECREF(op);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      2|    }
  522|  56.5k|}
setobject.c:_Py_REFCNT:
  105|   790k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   790k|    #if !defined(Py_GIL_DISABLED)
  107|   790k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   790k|    }
setobject.c:_Py_NewRef:
  535|  1.24M|{
  536|  1.24M|    Py_INCREF(obj);
  ------------------
  |  |  310|  1.24M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  1.24M|    return obj;
  538|  1.24M|}
sliceobject.c:Py_DECREF:
  418|   136k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   136k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   136k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   136k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   136k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 111k, False: 25.0k]
  |  |  ------------------
  ------------------
  422|   111k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   111k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   111k|        return;
  424|   111k|    }
  425|  25.0k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  25.0k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  25.0k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 20.5k, False: 4.51k]
  ------------------
  427|  20.5k|        _Py_Dealloc(op);
  428|  20.5k|    }
  429|  25.0k|}
sliceobject.c:_Py_IsImmortal:
  127|   136k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   136k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   136k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   136k|}
sliceobject.c:_Py_NewRef:
  535|   118k|{
  536|   118k|    Py_INCREF(obj);
  ------------------
  |  |  310|   118k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   118k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   118k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   118k|    return obj;
  538|   118k|}
sliceobject.c:Py_INCREF:
  256|   118k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   118k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   118k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 111k, False: 7.40k]
  ------------------
  288|       |        // the object is immortal
  289|   111k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   111k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   111k|        return;
  291|   111k|    }
  292|  7.40k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  7.40k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  7.40k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  7.40k|#endif
  308|  7.40k|}
structseq.c:_Py_IsImmortal:
  127|  10.7k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  10.7k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  10.7k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  10.7k|}
structseq.c:Py_XDECREF:
  518|  10.0k|{
  519|  10.0k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  10.0k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 10.0k, False: 0]
  ------------------
  520|  10.0k|        Py_DECREF(op);
  ------------------
  |  |  430|  10.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  10.0k|    }
  522|  10.0k|}
structseq.c:Py_DECREF:
  418|  10.7k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  10.7k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  10.7k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2.78k, False: 7.93k]
  |  |  ------------------
  ------------------
  422|  2.78k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  2.78k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  2.78k|        return;
  424|  2.78k|    }
  425|  7.93k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  7.93k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  7.93k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 6.88k, False: 1.05k]
  ------------------
  427|  6.88k|        _Py_Dealloc(op);
  428|  6.88k|    }
  429|  7.93k|}
tupleobject.c:_Py_REFCNT:
  105|  56.3k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  56.3k|    #if !defined(Py_GIL_DISABLED)
  107|  56.3k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  56.3k|    }
tupleobject.c:Py_XDECREF:
  518|   334M|{
  519|   334M|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   334M|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 334M, False: 9.82k]
  ------------------
  520|   334M|        Py_DECREF(op);
  ------------------
  |  |  430|   334M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   334M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   334M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   334M|    }
  522|   334M|}
tupleobject.c:_Py_NewRef:
  535|   214M|{
  536|   214M|    Py_INCREF(obj);
  ------------------
  |  |  310|   214M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   214M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   214M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   214M|    return obj;
  538|   214M|}
tupleobject.c:Py_INCREF:
  256|   214M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   214M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   214M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 55.5M, False: 159M]
  ------------------
  288|       |        // the object is immortal
  289|  55.5M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  55.5M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  55.5M|        return;
  291|  55.5M|    }
  292|   159M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   159M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   159M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   159M|#endif
  308|   159M|}
tupleobject.c:Py_DECREF:
  418|   334M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   334M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   334M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   334M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   334M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 57.1M, False: 277M]
  |  |  ------------------
  ------------------
  422|  57.1M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  57.1M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  57.1M|        return;
  424|  57.1M|    }
  425|   277M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   277M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   277M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 53.3M, False: 223M]
  ------------------
  427|  53.3M|        _Py_Dealloc(op);
  428|  53.3M|    }
  429|   277M|}
tupleobject.c:_Py_IsImmortal:
  127|   334M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   334M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   334M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   334M|}
typeobject.c:_Py_NewRef:
  535|  30.7k|{
  536|  30.7k|    Py_INCREF(obj);
  ------------------
  |  |  310|  30.7k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  30.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  30.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  30.7k|    return obj;
  538|  30.7k|}
typeobject.c:_Py_XNewRef:
  541|  1.57k|{
  542|  1.57k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  1.57k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  1.57k|    return obj;
  544|  1.57k|}
typeobject.c:Py_XINCREF:
  508|  2.34k|{
  509|  2.34k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  2.34k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 991, False: 1.35k]
  ------------------
  510|    991|        Py_INCREF(op);
  ------------------
  |  |  310|    991|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    991|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    991|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|    991|    }
  512|  2.34k|}
typeobject.c:Py_INCREF:
  256|  1.55M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.55M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.55M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.07M, False: 475k]
  ------------------
  288|       |        // the object is immortal
  289|  1.07M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.07M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.07M|        return;
  291|  1.07M|    }
  292|   475k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   475k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   475k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   475k|#endif
  308|   475k|}
typeobject.c:Py_DECREF:
  418|   171k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   171k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   171k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   171k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   171k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 51.4k, False: 120k]
  |  |  ------------------
  ------------------
  422|  51.4k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  51.4k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  51.4k|        return;
  424|  51.4k|    }
  425|   120k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   120k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   120k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 3.59k, False: 116k]
  ------------------
  427|  3.59k|        _Py_Dealloc(op);
  428|  3.59k|    }
  429|   120k|}
typeobject.c:_Py_IsImmortal:
  127|  1.31M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.31M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.31M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.31M|}
typeobject.c:_Py_REFCNT:
  105|  2.60k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  2.60k|    #if !defined(Py_GIL_DISABLED)
  107|  2.60k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  2.60k|    }
typeobject.c:_Py_IsStaticImmortal:
  141|   324k|{
  142|   324k|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|   324k|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|   324k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|   324k|}
typeobject.c:Py_XDECREF:
  518|  9.12k|{
  519|  9.12k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  9.12k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 2.73k, False: 6.39k]
  ------------------
  520|  2.73k|        Py_DECREF(op);
  ------------------
  |  |  430|  2.73k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  2.73k|    }
  522|  9.12k|}
unicode_formatter.c:Py_XDECREF:
  518|    132|{
  519|    132|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    132|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 132]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|    132|}
unicode_writer.c:_Py_REFCNT:
  105|   730k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   730k|    #if !defined(Py_GIL_DISABLED)
  107|   730k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   730k|    }
unicode_writer.c:_Py_IsImmortal:
  127|   884k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   884k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   884k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   884k|}
unicode_writer.c:Py_DECREF:
  418|   153k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   153k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   153k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   153k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   153k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 76.4k, False: 77.0k]
  |  |  ------------------
  ------------------
  422|  76.4k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  76.4k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  76.4k|        return;
  424|  76.4k|    }
  425|  77.0k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  77.0k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  77.0k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 69.9k, False: 7.06k]
  ------------------
  427|  69.9k|        _Py_Dealloc(op);
  428|  69.9k|    }
  429|  77.0k|}
unicode_writer.c:_Py_NewRef:
  535|  37.0k|{
  536|  37.0k|    Py_INCREF(obj);
  ------------------
  |  |  310|  37.0k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  37.0k|    return obj;
  538|  37.0k|}
unicode_writer.c:Py_INCREF:
  256|  37.0k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  37.0k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  37.0k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 24.4k, False: 12.5k]
  ------------------
  288|       |        // the object is immortal
  289|  24.4k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  24.4k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  24.4k|        return;
  291|  24.4k|    }
  292|  12.5k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  12.5k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  12.5k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  12.5k|#endif
  308|  12.5k|}
unicode_writer.c:Py_XDECREF:
  518|  3.25k|{
  519|  3.25k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  3.25k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1.83k, False: 1.42k]
  ------------------
  520|  1.83k|        Py_DECREF(op);
  ------------------
  |  |  430|  1.83k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.83k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.83k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  1.83k|    }
  522|  3.25k|}
unicodeobject.c:Py_DECREF:
  418|   768k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   768k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   768k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   768k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   768k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 89.1k, False: 679k]
  |  |  ------------------
  ------------------
  422|  89.1k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  89.1k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  89.1k|        return;
  424|  89.1k|    }
  425|   679k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   679k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   679k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 174k, False: 504k]
  ------------------
  427|   174k|        _Py_Dealloc(op);
  428|   174k|    }
  429|   679k|}
unicodeobject.c:_Py_IsImmortal:
  127|  25.0M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  25.0M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  25.0M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  25.0M|}
unicodeobject.c:_Py_REFCNT:
  105|   726k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   726k|    #if !defined(Py_GIL_DISABLED)
  107|   726k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   726k|    }
unicodeobject.c:_Py_NewRef:
  535|   492k|{
  536|   492k|    Py_INCREF(obj);
  ------------------
  |  |  310|   492k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   492k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   492k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   492k|    return obj;
  538|   492k|}
unicodeobject.c:Py_XDECREF:
  518|   675k|{
  519|   675k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   675k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 131k, False: 544k]
  ------------------
  520|   131k|        Py_DECREF(op);
  ------------------
  |  |  430|   131k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   131k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   131k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   131k|    }
  522|   675k|}
unicodeobject.c:Py_INCREF:
  256|  24.0M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  24.0M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  24.0M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 23.5M, False: 432k]
  ------------------
  288|       |        // the object is immortal
  289|  23.5M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  23.5M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  23.5M|        return;
  291|  23.5M|    }
  292|   432k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   432k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   432k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   432k|#endif
  308|   432k|}
unicodeobject.c:Py_SET_REFCNT:
  154|  30.9k|static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
  155|  30.9k|    assert(refcnt >= 0);
  ------------------
  |  Branch (155:5): [True: 30.9k, False: 0]
  ------------------
  156|       |#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
  157|       |    || defined(_Py_OPAQUE_PYOBJECT)
  158|       |    // Stable ABI implements Py_SET_REFCNT() as a function call
  159|       |    // on limited C API version 3.13 and newer, and abi3t.
  160|       |    _Py_SetRefcnt(ob, refcnt);
  161|       |#else
  162|       |    // This immortal check is for code that is unaware of immortal objects.
  163|       |    // The runtime tracks these objects and we should avoid as much
  164|       |    // as possible having extensions inadvertently change the refcnt
  165|       |    // of an immortalized object.
  166|  30.9k|    if (_Py_IsImmortal(ob)) {
  ------------------
  |  |  137|  30.9k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  30.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  30.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 30.9k]
  |  |  ------------------
  ------------------
  167|      0|        return;
  168|      0|    }
  169|  30.9k|#ifndef Py_GIL_DISABLED
  170|  30.9k|#if SIZEOF_VOID_P > 4
  171|  30.9k|    ob->ob_refcnt = (uint32_t)refcnt;
  172|       |#else
  173|       |    ob->ob_refcnt = refcnt;
  174|       |#endif
  175|       |#else
  176|       |    if (_Py_IsOwnedByCurrentThread(ob)) {
  177|       |        if ((size_t)refcnt > (size_t)UINT32_MAX) {
  178|       |            // On overflow, make the object immortal
  179|       |            ob->ob_tid = _Py_UNOWNED_TID;
  180|       |            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
  181|       |            ob->ob_ref_shared = 0;
  182|       |        }
  183|       |        else {
  184|       |            // Set local refcount to desired refcount and shared refcount
  185|       |            // to zero, but preserve the shared refcount flags.
  186|       |            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
  187|       |            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
  188|       |        }
  189|       |    }
  190|       |    else {
  191|       |        // Set local refcount to zero and shared refcount to desired refcount.
  192|       |        // Mark the object as merged.
  193|       |        ob->ob_tid = _Py_UNOWNED_TID;
  194|       |        ob->ob_ref_local = 0;
  195|       |        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
  196|       |    }
  197|       |#endif  // Py_GIL_DISABLED
  198|  30.9k|#endif  // Py_LIMITED_API
  199|  30.9k|}
unionobject.c:Py_DECREF:
  418|     92|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     92|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     92|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     92|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     92|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 92]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|     92|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     92|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     92|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 92, False: 0]
  ------------------
  427|     92|        _Py_Dealloc(op);
  428|     92|    }
  429|     92|}
unionobject.c:_Py_IsImmortal:
  127|     92|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     92|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     92|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     92|}
unionobject.c:Py_XDECREF:
  518|     49|{
  519|     49|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     49|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 2, False: 47]
  ------------------
  520|      2|        Py_DECREF(op);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      2|    }
  522|     49|}
unionobject.c:_Py_REFCNT:
  105|      1|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|      1|    #if !defined(Py_GIL_DISABLED)
  107|      1|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|      1|    }
weakrefobject.c:Py_INCREF:
  256|  2.47k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  2.47k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  2.47k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 194, False: 2.27k]
  ------------------
  288|       |        // the object is immortal
  289|    194|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|    194|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|    194|        return;
  291|    194|    }
  292|  2.27k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  2.27k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  2.27k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  2.27k|#endif
  308|  2.27k|}
weakrefobject.c:_Py_XNewRef:
  541|  2.25k|{
  542|  2.25k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  2.25k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  2.25k|    return obj;
  544|  2.25k|}
weakrefobject.c:Py_XINCREF:
  508|  2.25k|{
  509|  2.25k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  2.25k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 843, False: 1.41k]
  ------------------
  510|    843|        Py_INCREF(op);
  ------------------
  |  |  310|    843|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    843|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    843|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|    843|    }
  512|  2.25k|}
weakrefobject.c:Py_DECREF:
  418|  1.61k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.61k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.61k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.61k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.61k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 858, False: 761]
  |  |  ------------------
  ------------------
  422|    858|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    858|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    858|        return;
  424|    858|    }
  425|    761|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    761|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    761|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 730, False: 31]
  ------------------
  427|    730|        _Py_Dealloc(op);
  428|    730|    }
  429|    761|}
weakrefobject.c:_Py_IsImmortal:
  127|  1.61k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.61k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.61k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.61k|}
weakrefobject.c:_Py_REFCNT:
  105|   467k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   467k|    #if !defined(Py_GIL_DISABLED)
  107|   467k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   467k|    }
weakrefobject.c:Py_XDECREF:
  518|  1.47k|{
  519|  1.47k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.47k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 27, False: 1.44k]
  ------------------
  520|     27|        Py_DECREF(op);
  ------------------
  |  |  430|     27|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     27|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     27|    }
  522|  1.47k|}
_warnings.c:_Py_NewRef:
  535|  96.9k|{
  536|  96.9k|    Py_INCREF(obj);
  ------------------
  |  |  310|  96.9k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  96.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  96.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  96.9k|    return obj;
  538|  96.9k|}
_warnings.c:Py_INCREF:
  256|   387k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   387k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   387k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 96.9k, False: 290k]
  ------------------
  288|       |        // the object is immortal
  289|  96.9k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  96.9k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  96.9k|        return;
  291|  96.9k|    }
  292|   290k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   290k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   290k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   290k|#endif
  308|   290k|}
_warnings.c:Py_DECREF:
  418|  1.01M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.01M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.01M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.01M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.01M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 192k, False: 825k]
  |  |  ------------------
  ------------------
  422|   192k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   192k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   192k|        return;
  424|   192k|    }
  425|   825k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   825k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   825k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 147k, False: 678k]
  ------------------
  427|   147k|        _Py_Dealloc(op);
  428|   147k|    }
  429|   825k|}
_warnings.c:_Py_IsImmortal:
  127|  1.01M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.01M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.01M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.01M|}
_warnings.c:Py_XDECREF:
  518|   242k|{
  519|   242k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   242k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 242k, False: 0]
  ------------------
  520|   242k|        Py_DECREF(op);
  ------------------
  |  |  430|   242k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   242k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   242k|    }
  522|   242k|}
bltinmodule.c:_Py_NewRef:
  535|  1.52k|{
  536|  1.52k|    Py_INCREF(obj);
  ------------------
  |  |  310|  1.52k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.52k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.52k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  1.52k|    return obj;
  538|  1.52k|}
bltinmodule.c:Py_INCREF:
  256|  2.62k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  2.62k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  2.62k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.19k, False: 1.42k]
  ------------------
  288|       |        // the object is immortal
  289|  1.19k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.19k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.19k|        return;
  291|  1.19k|    }
  292|  1.42k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.42k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.42k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.42k|#endif
  308|  1.42k|}
bltinmodule.c:_Py_REFCNT:
  105|     69|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|     69|    #if !defined(Py_GIL_DISABLED)
  107|     69|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|     69|    }
bltinmodule.c:Py_DECREF:
  418|   386k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   386k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   386k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   386k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   386k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 345k, False: 40.9k]
  |  |  ------------------
  ------------------
  422|   345k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   345k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   345k|        return;
  424|   345k|    }
  425|  40.9k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  40.9k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  40.9k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 37.4k, False: 3.49k]
  ------------------
  427|  37.4k|        _Py_Dealloc(op);
  428|  37.4k|    }
  429|  40.9k|}
bltinmodule.c:_Py_IsImmortal:
  127|   386k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   386k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   386k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   386k|}
bltinmodule.c:Py_XDECREF:
  518|  3.16k|{
  519|  3.16k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  3.16k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 2.41k, False: 751]
  ------------------
  520|  2.41k|        Py_DECREF(op);
  ------------------
  |  |  430|  2.41k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  2.41k|    }
  522|  3.16k|}
bltinmodule.c:_Py_XNewRef:
  541|     20|{
  542|     20|    Py_XINCREF(obj);
  ------------------
  |  |  514|     20|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|     20|    return obj;
  544|     20|}
bltinmodule.c:Py_XINCREF:
  508|     20|{
  509|     20|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     20|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 20, False: 0]
  ------------------
  510|     20|        Py_INCREF(op);
  ------------------
  |  |  310|     20|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|     20|    }
  512|     20|}
ceval.c:_Py_IsImmortal:
  127|  68.0M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  68.0M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  68.0M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  68.0M|}
ceval.c:_Py_NewRef:
  535|  1.21M|{
  536|  1.21M|    Py_INCREF(obj);
  ------------------
  |  |  310|  1.21M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.21M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.21M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  1.21M|    return obj;
  538|  1.21M|}
ceval.c:_Py_IsStaticImmortal:
  141|   117M|{
  142|   117M|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|   117M|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|   117M|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|   117M|}
ceval.c:_Py_REFCNT:
  105|  21.4k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  21.4k|    #if !defined(Py_GIL_DISABLED)
  107|  21.4k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  21.4k|    }
ceval.c:Py_INCREF:
  256|  1.75M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.75M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.75M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.02M, False: 724k]
  ------------------
  288|       |        // the object is immortal
  289|  1.02M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.02M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.02M|        return;
  291|  1.02M|    }
  292|   724k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   724k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   724k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   724k|#endif
  308|   724k|}
ceval.c:Py_XDECREF:
  518|  1.12k|{
  519|  1.12k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.12k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 35, False: 1.08k]
  ------------------
  520|     35|        Py_DECREF(op);
  ------------------
  |  |  430|     35|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     35|    }
  522|  1.12k|}
ceval.c:Py_DECREF:
  418|     35|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     35|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     35|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2, False: 33]
  |  |  ------------------
  ------------------
  422|      2|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      2|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      2|        return;
  424|      2|    }
  425|     33|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     33|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     33|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 9, False: 24]
  ------------------
  427|      9|        _Py_Dealloc(op);
  428|      9|    }
  429|     33|}
ceval.c:Py_XINCREF:
  508|   148k|{
  509|   148k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   148k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 7.45k, False: 141k]
  ------------------
  510|  7.45k|        Py_INCREF(op);
  ------------------
  |  |  310|  7.45k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  7.45k|    }
  512|   148k|}
ceval.c:_Py_XNewRef:
  541|  6.69k|{
  542|  6.69k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  6.69k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.69k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.69k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  6.69k|    return obj;
  544|  6.69k|}
codecs.c:Py_DECREF:
  418|   246k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   246k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   246k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   246k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   246k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 82.8k, False: 163k]
  |  |  ------------------
  ------------------
  422|  82.8k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  82.8k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  82.8k|        return;
  424|  82.8k|    }
  425|   163k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   163k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   163k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 80.3k, False: 83.1k]
  ------------------
  427|  80.3k|        _Py_Dealloc(op);
  428|  80.3k|    }
  429|   163k|}
codecs.c:_Py_IsImmortal:
  127|   246k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   246k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   246k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   246k|}
codecs.c:_Py_NewRef:
  535|   121k|{
  536|   121k|    Py_INCREF(obj);
  ------------------
  |  |  310|   121k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   121k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   121k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   121k|    return obj;
  538|   121k|}
codecs.c:Py_INCREF:
  256|   121k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   121k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   121k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 2.62k, False: 118k]
  ------------------
  288|       |        // the object is immortal
  289|  2.62k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  2.62k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  2.62k|        return;
  291|  2.62k|    }
  292|   118k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   118k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   118k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   118k|#endif
  308|   118k|}
codecs.c:Py_XDECREF:
  518|  5.78k|{
  519|  5.78k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  5.78k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 3.85k, False: 1.92k]
  ------------------
  520|  3.85k|        Py_DECREF(op);
  ------------------
  |  |  430|  3.85k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.85k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.85k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  3.85k|    }
  522|  5.78k|}
codegen.c:Py_DECREF:
  418|   796k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   796k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   796k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   796k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   796k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 664k, False: 132k]
  |  |  ------------------
  ------------------
  422|   664k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   664k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   664k|        return;
  424|   664k|    }
  425|   132k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   132k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   132k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 33.5k, False: 99.2k]
  ------------------
  427|  33.5k|        _Py_Dealloc(op);
  428|  33.5k|    }
  429|   132k|}
codegen.c:_Py_IsImmortal:
  127|   796k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   796k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   796k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   796k|}
codegen.c:_Py_NewRef:
  535|  19.0k|{
  536|  19.0k|    Py_INCREF(obj);
  ------------------
  |  |  310|  19.0k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  19.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  19.0k|    return obj;
  538|  19.0k|}
codegen.c:Py_INCREF:
  256|  25.9k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  25.9k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  25.9k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 25.7k, False: 167]
  ------------------
  288|       |        // the object is immortal
  289|  25.7k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  25.7k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  25.7k|        return;
  291|  25.7k|    }
  292|    167|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    167|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    167|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    167|#endif
  308|    167|}
codegen.c:Py_XDECREF:
  518|    194|{
  519|    194|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    194|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 51, False: 143]
  ------------------
  520|     51|        Py_DECREF(op);
  ------------------
  |  |  430|     51|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     51|    }
  522|    194|}
compile.c:_Py_NewRef:
  535|  1.11M|{
  536|  1.11M|    Py_INCREF(obj);
  ------------------
  |  |  310|  1.11M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.11M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.11M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  1.11M|    return obj;
  538|  1.11M|}
compile.c:Py_DECREF:
  418|  7.93M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  7.93M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  7.93M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.93M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.93M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3.57M, False: 4.36M]
  |  |  ------------------
  ------------------
  422|  3.57M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  3.57M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  3.57M|        return;
  424|  3.57M|    }
  425|  4.36M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  4.36M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  4.36M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 1.90M, False: 2.45M]
  ------------------
  427|  1.90M|        _Py_Dealloc(op);
  428|  1.90M|    }
  429|  4.36M|}
compile.c:_Py_IsImmortal:
  127|  7.93M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  7.93M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  7.93M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  7.93M|}
compile.c:Py_XDECREF:
  518|   149k|{
  519|   149k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   149k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 85.3k, False: 64.2k]
  ------------------
  520|  85.3k|        Py_DECREF(op);
  ------------------
  |  |  430|  85.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  85.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  85.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  85.3k|    }
  522|   149k|}
compile.c:_Py_XNewRef:
  541|   102k|{
  542|   102k|    Py_XINCREF(obj);
  ------------------
  |  |  514|   102k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   102k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   102k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|   102k|    return obj;
  544|   102k|}
compile.c:Py_XINCREF:
  508|   102k|{
  509|   102k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   102k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 37.0k, False: 65.8k]
  ------------------
  510|  37.0k|        Py_INCREF(op);
  ------------------
  |  |  310|  37.0k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  37.0k|    }
  512|   102k|}
compile.c:Py_INCREF:
  256|  1.15M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.15M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.15M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 370k, False: 782k]
  ------------------
  288|       |        // the object is immortal
  289|   370k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   370k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   370k|        return;
  291|   370k|    }
  292|   782k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   782k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   782k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   782k|#endif
  308|   782k|}
context.c:Py_INCREF:
  256|      6|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      6|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      6|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 2, False: 4]
  ------------------
  288|       |        // the object is immortal
  289|      2|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      2|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      2|        return;
  291|      2|    }
  292|      4|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      4|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      4|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      4|#endif
  308|      4|}
context.c:Py_DECREF:
  418|      7|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|      7|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|      7|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3, False: 4]
  |  |  ------------------
  ------------------
  422|      3|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      3|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      3|        return;
  424|      3|    }
  425|      4|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      4|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      4|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 4]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      4|}
context.c:_Py_IsImmortal:
  127|      7|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|      7|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|      7|}
context.c:_Py_NewRef:
  535|      6|{
  536|      6|    Py_INCREF(obj);
  ------------------
  |  |  310|      6|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      6|    return obj;
  538|      6|}
context.c:Py_XINCREF:
  508|  48.4k|{
  509|  48.4k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  48.4k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 0, False: 48.4k]
  ------------------
  510|      0|        Py_INCREF(op);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|    }
  512|  48.4k|}
context.c:Py_XDECREF:
  518|      2|{
  519|      2|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      2|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1, False: 1]
  ------------------
  520|      1|        Py_DECREF(op);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      1|    }
  522|      2|}
context.c:_Py_XNewRef:
  541|      5|{
  542|      5|    Py_XINCREF(obj);
  ------------------
  |  |  514|      5|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      5|    return obj;
  544|      5|}
errors.c:Py_XDECREF:
  518|   502k|{
  519|   502k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   502k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 140k, False: 361k]
  ------------------
  520|   140k|        Py_DECREF(op);
  ------------------
  |  |  430|   140k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   140k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   140k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   140k|    }
  522|   502k|}
errors.c:Py_DECREF:
  418|   337k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   337k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   337k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   337k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   337k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 121k, False: 215k]
  |  |  ------------------
  ------------------
  422|   121k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   121k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   121k|        return;
  424|   121k|    }
  425|   215k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   215k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   215k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 79.6k, False: 136k]
  ------------------
  427|  79.6k|        _Py_Dealloc(op);
  428|  79.6k|    }
  429|   215k|}
errors.c:_Py_IsImmortal:
  127|   337k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   337k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   337k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   337k|}
errors.c:Py_XINCREF:
  508|   115k|{
  509|   115k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   115k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 115k, False: 0]
  ------------------
  510|   115k|        Py_INCREF(op);
  ------------------
  |  |  310|   115k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   115k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|   115k|    }
  512|   115k|}
errors.c:Py_INCREF:
  256|   241k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   241k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   241k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 124k, False: 116k]
  ------------------
  288|       |        // the object is immortal
  289|   124k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   124k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   124k|        return;
  291|   124k|    }
  292|   116k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   116k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   116k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   116k|#endif
  308|   116k|}
errors.c:_Py_NewRef:
  535|   124k|{
  536|   124k|    Py_INCREF(obj);
  ------------------
  |  |  310|   124k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   124k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   124k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   124k|    return obj;
  538|   124k|}
flowgraph.c:_Py_NewRef:
  535|  3.00M|{
  536|  3.00M|    Py_INCREF(obj);
  ------------------
  |  |  310|  3.00M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.00M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.00M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  3.00M|    return obj;
  538|  3.00M|}
flowgraph.c:Py_INCREF:
  256|  3.00M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  3.00M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  3.00M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.07M, False: 1.92M]
  ------------------
  288|       |        // the object is immortal
  289|  1.07M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.07M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.07M|        return;
  291|  1.07M|    }
  292|  1.92M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.92M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.92M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.92M|#endif
  308|  1.92M|}
flowgraph.c:_Py_IsImmortal:
  127|  4.82M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  4.82M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  4.82M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  4.82M|}
flowgraph.c:Py_DECREF:
  418|  4.03M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  4.03M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  4.03M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.03M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.03M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.60M, False: 2.42M]
  |  |  ------------------
  ------------------
  422|  1.60M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.60M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.60M|        return;
  424|  1.60M|    }
  425|  2.42M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.42M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.42M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 4.29k, False: 2.42M]
  ------------------
  427|  4.29k|        _Py_Dealloc(op);
  428|  4.29k|    }
  429|  2.42M|}
frame.c:_Py_IsStaticImmortal:
  141|  10.0M|{
  142|  10.0M|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|  10.0M|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|  10.0M|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|  10.0M|}
frame.c:Py_DECREF:
  418|  23.8k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  23.8k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  23.8k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  23.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 23.8k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  23.8k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  23.8k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  23.8k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 18.8k, False: 4.97k]
  ------------------
  427|  18.8k|        _Py_Dealloc(op);
  428|  18.8k|    }
  429|  23.8k|}
frame.c:_Py_IsImmortal:
  127|  35.8k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  35.8k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  35.8k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  35.8k|}
frame.c:_Py_REFCNT:
  105|  23.1k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  23.1k|    #if !defined(Py_GIL_DISABLED)
  107|  23.1k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  23.1k|    }
frame.c:Py_INCREF:
  256|  4.90k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  4.90k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  4.90k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 4.90k]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|  4.90k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  4.90k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  4.90k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  4.90k|#endif
  308|  4.90k|}
frame.c:_Py_NewRef:
  535|  2.95k|{
  536|  2.95k|    Py_INCREF(obj);
  ------------------
  |  |  310|  2.95k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  2.95k|    return obj;
  538|  2.95k|}
future.c:Py_DECREF:
  418|     19|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     19|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     19|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 19]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|     19|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     19|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     19|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 15, False: 4]
  ------------------
  427|     15|        _Py_Dealloc(op);
  428|     15|    }
  429|     19|}
future.c:_Py_IsImmortal:
  127|     19|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     19|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     19|}
future.c:Py_XDECREF:
  518|     15|{
  519|     15|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     15|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 15, False: 0]
  ------------------
  520|     15|        Py_DECREF(op);
  ------------------
  |  |  430|     15|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     15|    }
  522|     15|}
gc.c:Py_DECREF:
  418|  16.2k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  16.2k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  16.2k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  16.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  16.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 16.2k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  16.2k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  16.2k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  16.2k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 15.7k, False: 477]
  ------------------
  427|  15.7k|        _Py_Dealloc(op);
  428|  15.7k|    }
  429|  16.2k|}
gc.c:_Py_IsImmortal:
  127|  96.3M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  96.3M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  96.3M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  96.3M|}
gc.c:Py_INCREF:
  256|  49.5M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  49.5M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  49.5M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 49.5M, False: 1.23k]
  ------------------
  288|       |        // the object is immortal
  289|  49.5M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  49.5M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  49.5M|        return;
  291|  49.5M|    }
  292|  1.23k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.23k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.23k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.23k|#endif
  308|  1.23k|}
gc.c:_Py_REFCNT:
  105|  46.8M|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  46.8M|    #if !defined(Py_GIL_DISABLED)
  107|  46.8M|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  46.8M|    }
gc.c:Py_XDECREF:
  518|  15.5k|{
  519|  15.5k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  15.5k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 15.5k]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|  15.5k|}
getargs.c:_Py_NewRef:
  535|    635|{
  536|    635|    Py_INCREF(obj);
  ------------------
  |  |  310|    635|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    635|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    635|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|    635|    return obj;
  538|    635|}
getargs.c:Py_INCREF:
  256|    635|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    635|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    635|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 318, False: 317]
  ------------------
  288|       |        // the object is immortal
  289|    318|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|    318|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|    318|        return;
  291|    318|    }
  292|    317|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    317|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    317|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    317|#endif
  308|    317|}
getargs.c:Py_DECREF:
  418|  83.2k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  83.2k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  83.2k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  83.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  83.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 81.5k, False: 1.64k]
  |  |  ------------------
  ------------------
  422|  81.5k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  81.5k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  81.5k|        return;
  424|  81.5k|    }
  425|  1.64k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.64k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.64k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 1.64k]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|  1.64k|}
getargs.c:_Py_IsImmortal:
  127|  83.2k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  83.2k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  83.2k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  83.2k|}
hamt.c:_Py_NewRef:
  535|      3|{
  536|      3|    Py_INCREF(obj);
  ------------------
  |  |  310|      3|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      3|    return obj;
  538|      3|}
hamt.c:Py_INCREF:
  256|      3|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      3|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      3|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1, False: 2]
  ------------------
  288|       |        // the object is immortal
  289|      1|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      1|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      1|        return;
  291|      1|    }
  292|      2|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      2|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      2|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      2|#endif
  308|      2|}
import.c:Py_INCREF:
  256|  1.53M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.53M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.53M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 242k, False: 1.29M]
  ------------------
  288|       |        // the object is immortal
  289|   242k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   242k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   242k|        return;
  291|   242k|    }
  292|  1.29M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.29M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.29M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.29M|#endif
  308|  1.29M|}
import.c:Py_DECREF:
  418|  2.74M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  2.74M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  2.74M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.74M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.74M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 243k, False: 2.49M]
  |  |  ------------------
  ------------------
  422|   243k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   243k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   243k|        return;
  424|   243k|    }
  425|  2.49M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.49M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.49M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 161k, False: 2.33M]
  ------------------
  427|   161k|        _Py_Dealloc(op);
  428|   161k|    }
  429|  2.49M|}
import.c:_Py_IsImmortal:
  127|  2.74M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  2.74M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  2.74M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  2.74M|}
import.c:Py_XDECREF:
  518|   804k|{
  519|   804k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   804k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 803k, False: 576]
  ------------------
  520|   803k|        Py_DECREF(op);
  ------------------
  |  |  430|   803k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   803k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   803k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   803k|    }
  522|   804k|}
import.c:_Py_REFCNT:
  105|      2|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|      2|    #if !defined(Py_GIL_DISABLED)
  107|      2|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|      2|    }
import.c:_Py_NewRef:
  535|   595k|{
  536|   595k|    Py_INCREF(obj);
  ------------------
  |  |  310|   595k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   595k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   595k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   595k|    return obj;
  538|   595k|}
import.c:_Py_XNewRef:
  541|    379|{
  542|    379|    Py_XINCREF(obj);
  ------------------
  |  |  514|    379|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    379|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    379|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|    379|    return obj;
  544|    379|}
import.c:Py_XINCREF:
  508|    390|{
  509|    390|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    390|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 195, False: 195]
  ------------------
  510|    195|        Py_INCREF(op);
  ------------------
  |  |  310|    195|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    195|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    195|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|    195|    }
  512|    390|}
importdl.c:Py_DECREF:
  418|    146|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    146|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    146|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    146|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    146|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 55, False: 91]
  |  |  ------------------
  ------------------
  422|     55|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     55|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     55|        return;
  424|     55|    }
  425|     91|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     91|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     91|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 53, False: 38]
  ------------------
  427|     53|        _Py_Dealloc(op);
  428|     53|    }
  429|     91|}
importdl.c:_Py_IsImmortal:
  127|    146|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    146|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    146|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    146|}
importdl.c:_Py_NewRef:
  535|     53|{
  536|     53|    Py_INCREF(obj);
  ------------------
  |  |  310|     53|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     53|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     53|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     53|    return obj;
  538|     53|}
importdl.c:Py_INCREF:
  256|     63|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     63|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     63|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 47, False: 16]
  ------------------
  288|       |        // the object is immortal
  289|     47|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     47|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     47|        return;
  291|     47|    }
  292|     16|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     16|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     16|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     16|#endif
  308|     16|}
initconfig.c:Py_DECREF:
  418|    288|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    288|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    288|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    288|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    288|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 234, False: 54]
  |  |  ------------------
  ------------------
  422|    234|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    234|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    234|        return;
  424|    234|    }
  425|     54|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     54|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     54|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 54]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|     54|}
initconfig.c:_Py_IsImmortal:
  127|    288|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    288|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    288|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    288|}
initconfig.c:_Py_NewRef:
  535|     32|{
  536|     32|    Py_INCREF(obj);
  ------------------
  |  |  310|     32|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     32|    return obj;
  538|     32|}
initconfig.c:Py_INCREF:
  256|     32|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     32|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     32|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 32, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|     32|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     32|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     32|        return;
  291|     32|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
instrumentation.c:Py_DECREF:
  418|     48|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     48|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     48|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     48|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 30, False: 18]
  |  |  ------------------
  ------------------
  422|     30|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     30|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     30|        return;
  424|     30|    }
  425|     18|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     18|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     18|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 18]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|     18|}
instrumentation.c:_Py_IsImmortal:
  127|     48|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     48|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     48|}
instruction_sequence.c:Py_XDECREF:
  518|   107k|{
  519|   107k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   107k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 107k]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|   107k|}
instruction_sequence.c:Py_DECREF:
  418|    599|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    599|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    599|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    599|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    599|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 599]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|    599|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    599|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    599|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 599, False: 0]
  ------------------
  427|    599|        _Py_Dealloc(op);
  428|    599|    }
  429|    599|}
instruction_sequence.c:_Py_IsImmortal:
  127|    599|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    599|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    599|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    599|}
intrinsics.c:Py_DECREF:
  418|  3.50k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.50k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.50k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.91k, False: 1.59k]
  |  |  ------------------
  ------------------
  422|  1.91k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.91k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.91k|        return;
  424|  1.91k|    }
  425|  1.59k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.59k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.59k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 12, False: 1.57k]
  ------------------
  427|     12|        _Py_Dealloc(op);
  428|     12|    }
  429|  1.59k|}
intrinsics.c:_Py_IsImmortal:
  127|  3.50k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.50k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.50k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.50k|}
intrinsics.c:Py_XDECREF:
  518|  1.68k|{
  519|  1.68k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.68k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1.68k, False: 0]
  ------------------
  520|  1.68k|        Py_DECREF(op);
  ------------------
  |  |  430|  1.68k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  1.68k|    }
  522|  1.68k|}
intrinsics.c:_Py_REFCNT:
  105|    165|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|    165|    #if !defined(Py_GIL_DISABLED)
  107|    165|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|    165|    }
marshal.c:Py_XDECREF:
  518|  34.4k|{
  519|  34.4k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  34.4k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 34.4k, False: 0]
  ------------------
  520|  34.4k|        Py_DECREF(op);
  ------------------
  |  |  430|  34.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  34.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  34.4k|    }
  522|  34.4k|}
marshal.c:_Py_NewRef:
  535|  37.4k|{
  536|  37.4k|    Py_INCREF(obj);
  ------------------
  |  |  310|  37.4k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  37.4k|    return obj;
  538|  37.4k|}
marshal.c:Py_INCREF:
  256|  37.4k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  37.4k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  37.4k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 32.7k, False: 4.66k]
  ------------------
  288|       |        // the object is immortal
  289|  32.7k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  32.7k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  32.7k|        return;
  291|  32.7k|    }
  292|  4.66k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  4.66k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  4.66k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  4.66k|#endif
  308|  4.66k|}
marshal.c:Py_DECREF:
  418|  35.7k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  35.7k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  35.7k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 16.6k, False: 19.0k]
  |  |  ------------------
  ------------------
  422|  16.6k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  16.6k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  16.6k|        return;
  424|  16.6k|    }
  425|  19.0k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  19.0k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  19.0k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 123, False: 18.9k]
  ------------------
  427|    123|        _Py_Dealloc(op);
  428|    123|    }
  429|  19.0k|}
marshal.c:_Py_IsImmortal:
  127|  35.7k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  35.7k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  35.7k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  35.7k|}
modsupport.c:Py_INCREF:
  256|   277k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   277k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   277k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 54.3k, False: 222k]
  ------------------
  288|       |        // the object is immortal
  289|  54.3k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  54.3k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  54.3k|        return;
  291|  54.3k|    }
  292|   222k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   222k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   222k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   222k|#endif
  308|   222k|}
modsupport.c:Py_XDECREF:
  518|    647|{
  519|    647|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    647|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 647, False: 0]
  ------------------
  520|    647|        Py_DECREF(op);
  ------------------
  |  |  430|    647|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    647|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    647|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    647|    }
  522|    647|}
modsupport.c:Py_DECREF:
  418|  1.65k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.65k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.65k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 969, False: 682]
  |  |  ------------------
  ------------------
  422|    969|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    969|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    969|        return;
  424|    969|    }
  425|    682|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    682|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    682|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 682]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|    682|}
modsupport.c:_Py_IsImmortal:
  127|  1.65k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.65k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.65k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.65k|}
pyarena.c:Py_DECREF:
  418|  3.62M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.62M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.62M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.62M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.62M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.64M, False: 1.97M]
  |  |  ------------------
  ------------------
  422|  1.64M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.64M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.64M|        return;
  424|  1.64M|    }
  425|  1.97M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.97M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.97M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 24.5k, False: 1.95M]
  ------------------
  427|  24.5k|        _Py_Dealloc(op);
  428|  24.5k|    }
  429|  1.97M|}
pyarena.c:_Py_IsImmortal:
  127|  3.62M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.62M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.62M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.62M|}
pylifecycle.c:_Py_NewRef:
  535|      2|{
  536|      2|    Py_INCREF(obj);
  ------------------
  |  |  310|      2|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      2|    return obj;
  538|      2|}
pylifecycle.c:Py_INCREF:
  256|      2|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      2|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      2|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 2]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|      2|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      2|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      2|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      2|#endif
  308|      2|}
pylifecycle.c:Py_DECREF:
  418|     72|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     72|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     72|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 14, False: 58]
  |  |  ------------------
  ------------------
  422|     14|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     14|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     14|        return;
  424|     14|    }
  425|     58|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     58|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     58|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 6, False: 52]
  ------------------
  427|      6|        _Py_Dealloc(op);
  428|      6|    }
  429|     58|}
pylifecycle.c:_Py_IsImmortal:
  127|     72|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     72|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     72|}
pylifecycle.c:Py_XDECREF:
  518|     12|{
  519|     12|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     12|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 12, False: 0]
  ------------------
  520|     12|        Py_DECREF(op);
  ------------------
  |  |  430|     12|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     12|    }
  522|     12|}
pythonrun.c:Py_DECREF:
  418|  24.5k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  24.5k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  24.5k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 24.5k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  24.5k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  24.5k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  24.5k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 2.27k, False: 22.2k]
  ------------------
  427|  2.27k|        _Py_Dealloc(op);
  428|  2.27k|    }
  429|  24.5k|}
pythonrun.c:_Py_IsImmortal:
  127|  24.5k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  24.5k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  24.5k|}
pythonrun.c:Py_XDECREF:
  518|      9|{
  519|      9|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      9|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 6, False: 3]
  ------------------
  520|      6|        Py_DECREF(op);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      6|    }
  522|      9|}
specialize.c:Py_XDECREF:
  518|  1.88k|{
  519|  1.88k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.88k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1.20k, False: 680]
  ------------------
  520|  1.20k|        Py_DECREF(op);
  ------------------
  |  |  430|  1.20k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  1.20k|    }
  522|  1.88k|}
specialize.c:Py_DECREF:
  418|  1.22k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.22k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.22k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 20, False: 1.20k]
  |  |  ------------------
  ------------------
  422|     20|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     20|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     20|        return;
  424|     20|    }
  425|  1.20k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.20k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.20k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 1.20k]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|  1.20k|}
specialize.c:_Py_IsImmortal:
  127|  1.22k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.22k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.22k|}
structmember.c:Py_INCREF:
  256|  3.24k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  3.24k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  3.24k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.88k, False: 1.36k]
  ------------------
  288|       |        // the object is immortal
  289|  1.88k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.88k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.88k|        return;
  291|  1.88k|    }
  292|  1.36k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.36k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.36k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.36k|#endif
  308|  1.36k|}
structmember.c:Py_XINCREF:
  508|  2.72k|{
  509|  2.72k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  2.72k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 2.72k, False: 0]
  ------------------
  510|  2.72k|        Py_INCREF(op);
  ------------------
  |  |  310|  2.72k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.72k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  2.72k|    }
  512|  2.72k|}
structmember.c:Py_DECREF:
  418|    246|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    246|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    246|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    246|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    246|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 240, False: 6]
  |  |  ------------------
  ------------------
  422|    240|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    240|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    240|        return;
  424|    240|    }
  425|      6|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      6|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      6|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 6]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      6|}
structmember.c:_Py_IsImmortal:
  127|    246|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    246|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    246|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    246|}
structmember.c:_Py_XNewRef:
  541|  2.71k|{
  542|  2.71k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  2.71k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  2.71k|    return obj;
  544|  2.71k|}
structmember.c:Py_XDECREF:
  518|  2.71k|{
  519|  2.71k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  2.71k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 246, False: 2.46k]
  ------------------
  520|    246|        Py_DECREF(op);
  ------------------
  |  |  430|    246|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    246|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    246|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    246|    }
  522|  2.71k|}
symtable.c:_Py_NewRef:
  535|  1.23M|{
  536|  1.23M|    Py_INCREF(obj);
  ------------------
  |  |  310|  1.23M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.23M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.23M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  1.23M|    return obj;
  538|  1.23M|}
symtable.c:Py_INCREF:
  256|  1.23M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.23M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.23M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.20M, False: 28.6k]
  ------------------
  288|       |        // the object is immortal
  289|  1.20M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.20M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.20M|        return;
  291|  1.20M|    }
  292|  28.6k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  28.6k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  28.6k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  28.6k|#endif
  308|  28.6k|}
symtable.c:Py_XDECREF:
  518|   938k|{
  519|   938k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   938k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 700k, False: 237k]
  ------------------
  520|   700k|        Py_DECREF(op);
  ------------------
  |  |  430|   700k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   700k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   700k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   700k|    }
  522|   938k|}
symtable.c:Py_DECREF:
  418|  3.69M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.69M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.69M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.69M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.69M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.65M, False: 2.03M]
  |  |  ------------------
  ------------------
  422|  1.65M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.65M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.65M|        return;
  424|  1.65M|    }
  425|  2.03M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.03M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.03M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 1.00M, False: 1.03M]
  ------------------
  427|  1.00M|        _Py_Dealloc(op);
  428|  1.00M|    }
  429|  2.03M|}
symtable.c:_Py_IsImmortal:
  127|  3.69M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.69M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.69M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.69M|}
sysmodule.c:Py_XDECREF:
  518|    430|{
  519|    430|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    430|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 342, False: 88]
  ------------------
  520|    342|        Py_DECREF(op);
  ------------------
  |  |  430|    342|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    342|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    342|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    342|    }
  522|    430|}
sysmodule.c:Py_DECREF:
  418|    542|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    542|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    542|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    542|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    542|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 100, False: 442]
  |  |  ------------------
  ------------------
  422|    100|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    100|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    100|        return;
  424|    100|    }
  425|    442|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    442|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    442|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 344, False: 98]
  ------------------
  427|    344|        _Py_Dealloc(op);
  428|    344|    }
  429|    442|}
sysmodule.c:_Py_IsImmortal:
  127|    542|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    542|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    542|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    542|}
sysmodule.c:_Py_XNewRef:
  541|      2|{
  542|      2|    Py_XINCREF(obj);
  ------------------
  |  |  514|      2|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      2|    return obj;
  544|      2|}
sysmodule.c:Py_XINCREF:
  508|      2|{
  509|      2|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      2|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 2, False: 0]
  ------------------
  510|      2|        Py_INCREF(op);
  ------------------
  |  |  310|      2|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      2|    }
  512|      2|}
sysmodule.c:Py_INCREF:
  256|    125|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    125|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    125|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 97, False: 28]
  ------------------
  288|       |        // the object is immortal
  289|     97|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     97|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     97|        return;
  291|     97|    }
  292|     28|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     28|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     28|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     28|#endif
  308|     28|}
sysmodule.c:_Py_NewRef:
  535|     96|{
  536|     96|    Py_INCREF(obj);
  ------------------
  |  |  310|     96|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     96|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     96|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     96|    return obj;
  538|     96|}
traceback.c:Py_INCREF:
  256|  45.6k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  45.6k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  45.6k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 45.6k]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|  45.6k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  45.6k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  45.6k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  45.6k|#endif
  308|  45.6k|}
traceback.c:Py_XINCREF:
  508|  85.8k|{
  509|  85.8k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  85.8k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 45.6k, False: 40.2k]
  ------------------
  510|  45.6k|        Py_INCREF(op);
  ------------------
  |  |  310|  45.6k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  45.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  45.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  45.6k|    }
  512|  85.8k|}
traceback.c:_Py_XNewRef:
  541|  85.8k|{
  542|  85.8k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  85.8k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  85.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  85.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  85.8k|    return obj;
  544|  85.8k|}
traceback.c:Py_XDECREF:
  518|   171k|{
  519|   171k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   171k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 91.2k, False: 80.4k]
  ------------------
  520|  91.2k|        Py_DECREF(op);
  ------------------
  |  |  430|  91.2k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  91.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  91.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  91.2k|    }
  522|   171k|}
traceback.c:Py_DECREF:
  418|  91.2k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  91.2k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  91.2k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  91.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  91.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 91.2k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  91.2k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  91.2k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  91.2k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 6.44k, False: 84.8k]
  ------------------
  427|  6.44k|        _Py_Dealloc(op);
  428|  6.44k|    }
  429|  91.2k|}
traceback.c:_Py_IsImmortal:
  127|  91.2k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  91.2k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  91.2k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  91.2k|}
typecache.c:Py_INCREF:
  256|  9.03k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  9.03k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  9.03k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 6.29k, False: 2.73k]
  ------------------
  288|       |        // the object is immortal
  289|  6.29k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  6.29k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  6.29k|        return;
  291|  6.29k|    }
  292|  2.73k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  2.73k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  2.73k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  2.73k|#endif
  308|  2.73k|}
typecache.c:_Py_IsImmortal:
  127|  3.30M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.30M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.30M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.30M|}
typecache.c:_Py_IsStaticImmortal:
  141|  2.32M|{
  142|  2.32M|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|  2.32M|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|  2.32M|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|  2.32M|}
typecache.c:Py_DECREF:
  418|  4.74k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  4.74k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  4.74k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2.95k, False: 1.79k]
  |  |  ------------------
  ------------------
  422|  2.95k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  2.95k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  2.95k|        return;
  424|  2.95k|    }
  425|  1.79k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.79k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.79k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 1.79k]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|  1.79k|}
fileutils.c:Py_DECREF:
  418|  5.51k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  5.51k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  5.51k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.51k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.51k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 5.51k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  5.51k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  5.51k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  5.51k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 5.51k, False: 0]
  ------------------
  427|  5.51k|        _Py_Dealloc(op);
  428|  5.51k|    }
  429|  5.51k|}
fileutils.c:_Py_IsImmortal:
  127|  5.51k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  5.51k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  5.51k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  5.51k|}
suggestions.c:_Py_XNewRef:
  541|     15|{
  542|     15|    Py_XINCREF(obj);
  ------------------
  |  |  514|     15|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|     15|    return obj;
  544|     15|}
suggestions.c:Py_XINCREF:
  508|     15|{
  509|     15|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     15|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 4, False: 11]
  ------------------
  510|      4|        Py_INCREF(op);
  ------------------
  |  |  310|      4|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      4|    }
  512|     15|}
suggestions.c:Py_INCREF:
  256|      4|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      4|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      4|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 4]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|      4|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      4|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      4|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      4|#endif
  308|      4|}
posixmodule.c:Py_DECREF:
  418|  2.53k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  2.53k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  2.53k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 338, False: 2.19k]
  |  |  ------------------
  ------------------
  422|    338|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    338|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    338|        return;
  424|    338|    }
  425|  2.19k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.19k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.19k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 572, False: 1.62k]
  ------------------
  427|    572|        _Py_Dealloc(op);
  428|    572|    }
  429|  2.19k|}
posixmodule.c:_Py_IsImmortal:
  127|  2.53k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  2.53k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  2.53k|}
posixmodule.c:_Py_NewRef:
  535|  5.96k|{
  536|  5.96k|    Py_INCREF(obj);
  ------------------
  |  |  310|  5.96k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  5.96k|    return obj;
  538|  5.96k|}
posixmodule.c:Py_INCREF:
  256|  6.55k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  6.55k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  6.55k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 12, False: 6.53k]
  ------------------
  288|       |        // the object is immortal
  289|     12|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     12|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     12|        return;
  291|     12|    }
  292|  6.53k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  6.53k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  6.53k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  6.53k|#endif
  308|  6.53k|}
_datetimemodule.c:Py_INCREF:
  256|     12|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     12|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     12|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 8, False: 4]
  ------------------
  288|       |        // the object is immortal
  289|      8|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      8|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      8|        return;
  291|      8|    }
  292|      4|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      4|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      4|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      4|#endif
  308|      4|}
_datetimemodule.c:_Py_NewRef:
  535|      4|{
  536|      4|    Py_INCREF(obj);
  ------------------
  |  |  310|      4|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      4|    return obj;
  538|      4|}
_datetimemodule.c:Py_DECREF:
  418|     32|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     32|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     32|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 32]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|     32|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     32|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     32|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 32]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|     32|}
_datetimemodule.c:_Py_IsImmortal:
  127|     40|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     40|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     40|}
_datetimemodule.c:_Py_XNewRef:
  541|      4|{
  542|      4|    Py_XINCREF(obj);
  ------------------
  |  |  514|      4|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      4|    return obj;
  544|      4|}
_datetimemodule.c:Py_XINCREF:
  508|      4|{
  509|      4|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      4|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 0, False: 4]
  ------------------
  510|      0|        Py_INCREF(op);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|    }
  512|      4|}
_collectionsmodule.c:Py_INCREF:
  256|     13|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     13|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     13|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1, False: 12]
  ------------------
  288|       |        // the object is immortal
  289|      1|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      1|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      1|        return;
  291|      1|    }
  292|     12|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     12|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     12|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     12|#endif
  308|     12|}
_collectionsmodule.c:Py_DECREF:
  418|     13|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     13|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     13|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 13, False: 0]
  |  |  ------------------
  ------------------
  422|     13|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     13|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     13|        return;
  424|     13|    }
  425|      0|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      0|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 0]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      0|}
_collectionsmodule.c:_Py_IsImmortal:
  127|     13|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     13|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     13|}
_collectionsmodule.c:_Py_NewRef:
  535|     12|{
  536|     12|    Py_INCREF(obj);
  ------------------
  |  |  310|     12|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     12|    return obj;
  538|     12|}
_collectionsmodule.c:Py_XDECREF:
  518|      1|{
  519|      1|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      1|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 1]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|      1|}
_collectionsmodule.c:_Py_XNewRef:
  541|      1|{
  542|      1|    Py_XINCREF(obj);
  ------------------
  |  |  514|      1|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      1|    return obj;
  544|      1|}
_collectionsmodule.c:Py_XINCREF:
  508|      1|{
  509|      1|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      1|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 1, False: 0]
  ------------------
  510|      1|        Py_INCREF(op);
  ------------------
  |  |  310|      1|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      1|    }
  512|      1|}
errnomodule.c:Py_DECREF:
  333|    550|static inline void Py_DECREF(PyObject *op) {
  334|    550|#  if Py_LIMITED_API+0 >= 0x030a00A7
  335|    550|    _Py_DecRef(op);
  336|       |#  else
  337|       |    Py_DecRef(op);
  338|       |#  endif
  339|    550|}
_iomodule.c:Py_DECREF:
  418|    598|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    598|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    598|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    598|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    598|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 208, False: 390]
  |  |  ------------------
  ------------------
  422|    208|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    208|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    208|        return;
  424|    208|    }
  425|    390|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    390|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    390|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 198, False: 192]
  ------------------
  427|    198|        _Py_Dealloc(op);
  428|    198|    }
  429|    390|}
_iomodule.c:_Py_IsImmortal:
  127|    598|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    598|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    598|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    598|}
_iomodule.c:_Py_NewRef:
  535|      6|{
  536|      6|    Py_INCREF(obj);
  ------------------
  |  |  310|      6|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|      6|    return obj;
  538|      6|}
_iomodule.c:Py_INCREF:
  256|      6|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|      6|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|      6|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 6, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|      6|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      6|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      6|        return;
  291|      6|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
iobase.c:_Py_REFCNT:
  105|    186|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|    186|    #if !defined(Py_GIL_DISABLED)
  107|    186|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|    186|    }
iobase.c:Py_DECREF:
  418|    471|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    471|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    471|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    471|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    471|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 378, False: 93]
  |  |  ------------------
  ------------------
  422|    378|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    378|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    378|        return;
  424|    378|    }
  425|     93|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     93|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     93|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 93, False: 0]
  ------------------
  427|     93|        _Py_Dealloc(op);
  428|     93|    }
  429|     93|}
iobase.c:_Py_IsImmortal:
  127|    471|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    471|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    471|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    471|}
iobase.c:Py_INCREF:
  256|     93|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     93|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     93|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 93]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|     93|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     93|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     93|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     93|#endif
  308|     93|}
iobase.c:_Py_NewRef:
  535|     93|{
  536|     93|    Py_INCREF(obj);
  ------------------
  |  |  310|     93|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     93|    return obj;
  538|     93|}
iobase.c:Py_XDECREF:
  518|     93|{
  519|     93|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     93|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 93, False: 0]
  ------------------
  520|     93|        Py_DECREF(op);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     93|    }
  522|     93|}
fileio.c:_Py_REFCNT:
  105|     93|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|     93|    #if !defined(Py_GIL_DISABLED)
  107|     93|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|     93|    }
fileio.c:Py_DECREF:
  418|    279|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    279|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    279|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    279|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    279|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 279]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|    279|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    279|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    279|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 186, False: 93]
  ------------------
  427|    186|        _Py_Dealloc(op);
  428|    186|    }
  429|    279|}
fileio.c:_Py_IsImmortal:
  127|    279|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    279|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    279|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    279|}
bufferedio.c:Py_DECREF:
  418|   146k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   146k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   146k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   146k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   146k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 97.0k, False: 48.9k]
  |  |  ------------------
  ------------------
  422|  97.0k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  97.0k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  97.0k|        return;
  424|  97.0k|    }
  425|  48.9k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  48.9k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  48.9k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 48.6k, False: 285]
  ------------------
  427|  48.6k|        _Py_Dealloc(op);
  428|  48.6k|    }
  429|  48.9k|}
bufferedio.c:_Py_IsImmortal:
  127|   146k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   146k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   146k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   146k|}
bufferedio.c:_Py_REFCNT:
  105|     93|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|     93|    #if !defined(Py_GIL_DISABLED)
  107|     93|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|     93|    }
bufferedio.c:Py_XDECREF:
  518|    378|{
  519|    378|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    378|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 93, False: 285]
  ------------------
  520|     93|        Py_DECREF(op);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     93|    }
  522|    378|}
bufferedio.c:_Py_NewRef:
  535|     95|{
  536|     95|    Py_INCREF(obj);
  ------------------
  |  |  310|     95|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     95|    return obj;
  538|     95|}
bufferedio.c:Py_INCREF:
  256|    192|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    192|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    192|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 192]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|    192|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    192|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    192|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    192|#endif
  308|    192|}
bufferedio.c:Py_XINCREF:
  508|     93|{
  509|     93|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     93|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 93, False: 0]
  ------------------
  510|     93|        Py_INCREF(op);
  ------------------
  |  |  310|     93|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|     93|    }
  512|     93|}
textio.c:_Py_NewRef:
  535|  48.4k|{
  536|  48.4k|    Py_INCREF(obj);
  ------------------
  |  |  310|  48.4k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  48.4k|    return obj;
  538|  48.4k|}
textio.c:Py_INCREF:
  256|  96.9k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  96.9k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  96.9k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 96.9k]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|  96.9k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  96.9k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  96.9k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  96.9k|#endif
  308|  96.9k|}
textio.c:Py_DECREF:
  418|   193k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   193k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   193k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   193k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   193k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 48.5k, False: 145k]
  |  |  ------------------
  ------------------
  422|  48.5k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  48.5k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  48.5k|        return;
  424|  48.5k|    }
  425|   145k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   145k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   145k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 48.4k, False: 96.9k]
  ------------------
  427|  48.4k|        _Py_Dealloc(op);
  428|  48.4k|    }
  429|   145k|}
textio.c:_Py_IsImmortal:
  127|   193k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   193k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   193k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   193k|}
textio.c:Py_XDECREF:
  518|     10|{
  519|     10|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     10|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 4, False: 6]
  ------------------
  520|      4|        Py_DECREF(op);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      4|    }
  522|     10|}
itertoolsmodule.c:Py_DECREF:
  418|    462|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    462|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    462|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    462|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    462|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 87, False: 375]
  |  |  ------------------
  ------------------
  422|     87|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     87|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     87|        return;
  424|     87|    }
  425|    375|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    375|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    375|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 114, False: 261]
  ------------------
  427|    114|        _Py_Dealloc(op);
  428|    114|    }
  429|    375|}
itertoolsmodule.c:_Py_IsImmortal:
  127|    462|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    462|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    462|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    462|}
itertoolsmodule.c:_Py_NewRef:
  535|    135|{
  536|    135|    Py_INCREF(obj);
  ------------------
  |  |  310|    135|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    135|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    135|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|    135|    return obj;
  538|    135|}
itertoolsmodule.c:Py_INCREF:
  256|    375|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    375|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    375|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 171, False: 204]
  ------------------
  288|       |        // the object is immortal
  289|    171|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|    171|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|    171|        return;
  291|    171|    }
  292|    204|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    204|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    204|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    204|#endif
  308|    204|}
itertoolsmodule.c:Py_XDECREF:
  518|    114|{
  519|    114|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    114|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 114, False: 0]
  ------------------
  520|    114|        Py_DECREF(op);
  ------------------
  |  |  430|    114|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    114|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    114|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    114|    }
  522|    114|}
itertoolsmodule.c:_Py_REFCNT:
  105|    270|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|    270|    #if !defined(Py_GIL_DISABLED)
  107|    270|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|    270|    }
sre.c:Py_DECREF:
  418|     29|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     29|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     29|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 17, False: 12]
  |  |  ------------------
  ------------------
  422|     17|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     17|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     17|        return;
  424|     17|    }
  425|     12|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     12|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     12|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 1, False: 11]
  ------------------
  427|      1|        _Py_Dealloc(op);
  428|      1|    }
  429|     12|}
sre.c:_Py_IsImmortal:
  127|     29|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     29|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     29|}
sre.c:_Py_NewRef:
  535|     29|{
  536|     29|    Py_INCREF(obj);
  ------------------
  |  |  310|     29|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     29|    return obj;
  538|     29|}
sre.c:Py_INCREF:
  256|     33|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     33|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     33|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 16, False: 17]
  ------------------
  288|       |        // the object is immortal
  289|     16|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     16|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     16|        return;
  291|     16|    }
  292|     17|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     17|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     17|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     17|#endif
  308|     17|}
sre.c:Py_XDECREF:
  518|      4|{
  519|      4|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      4|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 4, False: 0]
  ------------------
  520|      4|        Py_DECREF(op);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      4|    }
  522|      4|}
sre.c:_Py_REFCNT:
  105|      2|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|      2|    #if !defined(Py_GIL_DISABLED)
  107|      2|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|      2|    }
_threadmodule.c:Py_DECREF:
  418|    672|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|    672|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|    672|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    672|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    672|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 672]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|    672|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    672|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    672|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 672]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|    672|}
_threadmodule.c:_Py_IsImmortal:
  127|    672|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|    672|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|    672|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|    672|}
_abc.c:Py_INCREF:
  256|  1.03k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.03k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.03k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.02k, False: 10]
  ------------------
  288|       |        // the object is immortal
  289|  1.02k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.02k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.02k|        return;
  291|  1.02k|    }
  292|     10|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     10|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     10|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     10|#endif
  308|     10|}
_abc.c:Py_DECREF:
  418|  3.41k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.41k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.41k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.16k, False: 2.25k]
  |  |  ------------------
  ------------------
  422|  1.16k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.16k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.16k|        return;
  424|  1.16k|    }
  425|  2.25k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.25k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.25k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 303, False: 1.95k]
  ------------------
  427|    303|        _Py_Dealloc(op);
  428|    303|    }
  429|  2.25k|}
_abc.c:_Py_IsImmortal:
  127|  3.41k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.41k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.41k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.41k|}
_abc.c:Py_XDECREF:
  518|    390|{
  519|    390|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    390|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 286, False: 104]
  ------------------
  520|    286|        Py_DECREF(op);
  ------------------
  |  |  430|    286|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    286|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    286|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    286|    }
  522|    390|}
_abc.c:_Py_NewRef:
  535|     82|{
  536|     82|    Py_INCREF(obj);
  ------------------
  |  |  310|     82|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     82|    return obj;
  538|     82|}
_abc.c:_Py_XNewRef:
  541|     90|{
  542|     90|    Py_XINCREF(obj);
  ------------------
  |  |  514|     90|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|     90|    return obj;
  544|     90|}
_abc.c:Py_XINCREF:
  508|     90|{
  509|     90|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     90|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 90, False: 0]
  ------------------
  510|     90|        Py_INCREF(op);
  ------------------
  |  |  310|     90|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|     90|    }
  512|     90|}
_functoolsmodule.c:Py_INCREF:
  256|     17|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     17|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     17|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 4, False: 13]
  ------------------
  288|       |        // the object is immortal
  289|      4|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      4|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      4|        return;
  291|      4|    }
  292|     13|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     13|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     13|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     13|#endif
  308|     13|}
_functoolsmodule.c:Py_XDECREF:
  518|      1|{
  519|      1|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      1|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 1]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|      1|}
_functoolsmodule.c:Py_DECREF:
  418|     10|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     10|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     10|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2, False: 8]
  |  |  ------------------
  ------------------
  422|      2|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      2|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      2|        return;
  424|      2|    }
  425|      8|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      8|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      8|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 2, False: 6]
  ------------------
  427|      2|        _Py_Dealloc(op);
  428|      2|    }
  429|      8|}
_functoolsmodule.c:_Py_IsImmortal:
  127|     10|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     10|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     10|}
_functoolsmodule.c:_Py_REFCNT:
  105|      2|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|      2|    #if !defined(Py_GIL_DISABLED)
  107|      2|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|      2|    }
_functoolsmodule.c:_Py_NewRef:
  535|     17|{
  536|     17|    Py_INCREF(obj);
  ------------------
  |  |  310|     17|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     17|    return obj;
  538|     17|}
getpath.c:Py_DECREF:
  418|     64|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     64|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     64|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     64|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     64|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 24, False: 40]
  |  |  ------------------
  ------------------
  422|     24|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     24|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     24|        return;
  424|     24|    }
  425|     40|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     40|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     40|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 2, False: 38]
  ------------------
  427|      2|        _Py_Dealloc(op);
  428|      2|    }
  429|     40|}
getpath.c:_Py_IsImmortal:
  127|     64|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     64|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     64|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     64|}
getpath.c:_Py_NewRef:
  535|     16|{
  536|     16|    Py_INCREF(obj);
  ------------------
  |  |  310|     16|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     16|    return obj;
  538|     16|}
getpath.c:Py_INCREF:
  256|     24|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     24|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     24|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 24, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|     24|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     24|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     24|        return;
  291|     24|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
getpath.c:_Py_XNewRef:
  541|      8|{
  542|      8|    Py_XINCREF(obj);
  ------------------
  |  |  514|      8|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      8|    return obj;
  544|      8|}
getpath.c:Py_XINCREF:
  508|      8|{
  509|      8|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      8|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 8, False: 0]
  ------------------
  510|      8|        Py_INCREF(op);
  ------------------
  |  |  310|      8|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      8|    }
  512|      8|}
reader.c:Py_XDECREF:
  518|  49.0k|{
  519|  49.0k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  49.0k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 49.0k]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|  49.0k|}
helpers.c:Py_DECREF:
  418|  54.0k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  54.0k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  54.0k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.85k, False: 52.2k]
  |  |  ------------------
  ------------------
  422|  1.85k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.85k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.85k|        return;
  424|  1.85k|    }
  425|  52.2k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  52.2k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  52.2k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 40.8k, False: 11.3k]
  ------------------
  427|  40.8k|        _Py_Dealloc(op);
  428|  40.8k|    }
  429|  52.2k|}
helpers.c:_Py_IsImmortal:
  127|  54.0k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  54.0k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  54.0k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  54.0k|}
helpers.c:Py_XDECREF:
  518|  11.3k|{
  519|  11.3k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  11.3k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 10.8k, False: 549]
  ------------------
  520|  10.8k|        Py_DECREF(op);
  ------------------
  |  |  430|  10.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  10.8k|    }
  522|  11.3k|}
abstract.c:_Py_NewRef:
  535|  10.2M|{
  536|  10.2M|    Py_INCREF(obj);
  ------------------
  |  |  310|  10.2M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.2M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.2M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  10.2M|    return obj;
  538|  10.2M|}
abstract.c:Py_INCREF:
  256|  10.5M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  10.5M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  10.5M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 9.77M, False: 800k]
  ------------------
  288|       |        // the object is immortal
  289|  9.77M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  9.77M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  9.77M|        return;
  291|  9.77M|    }
  292|   800k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   800k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   800k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   800k|#endif
  308|   800k|}
abstract.c:Py_DECREF:
  418|  10.6M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  10.6M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  10.6M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.6M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 10.0M, False: 629k]
  |  |  ------------------
  ------------------
  422|  10.0M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  10.0M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  10.0M|        return;
  424|  10.0M|    }
  425|   629k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   629k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   629k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 50.1k, False: 579k]
  ------------------
  427|  50.1k|        _Py_Dealloc(op);
  428|  50.1k|    }
  429|   629k|}
abstract.c:_Py_IsImmortal:
  127|  10.6M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  10.6M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  10.6M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  10.6M|}
abstract.c:Py_XDECREF:
  518|  48.6k|{
  519|  48.6k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  48.6k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 48.4k, False: 132]
  ------------------
  520|  48.4k|        Py_DECREF(op);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  48.4k|    }
  522|  48.6k|}
abstract.c:_Py_XNewRef:
  541|   399k|{
  542|   399k|    Py_XINCREF(obj);
  ------------------
  |  |  514|   399k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   399k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   399k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|   399k|    return obj;
  544|   399k|}
abstract.c:Py_XINCREF:
  508|   399k|{
  509|   399k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   399k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 327k, False: 72.1k]
  ------------------
  510|   327k|        Py_INCREF(op);
  ------------------
  |  |  310|   327k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|   327k|    }
  512|   399k|}
abstract.c:_Py_IsStaticImmortal:
  141|    112|{
  142|    112|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|    112|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|    112|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|    112|}
bytearrayobject.c:Py_DECREF:
  418|   239k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   239k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   239k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 239k, False: 300]
  |  |  ------------------
  ------------------
  422|   239k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   239k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   239k|        return;
  424|   239k|    }
  425|    300|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|    300|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|    300|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 300, False: 0]
  ------------------
  427|    300|        _Py_Dealloc(op);
  428|    300|    }
  429|    300|}
bytearrayobject.c:_Py_IsImmortal:
  127|  1.13M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.13M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.13M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.13M|}
bytearrayobject.c:Py_XDECREF:
  518|   239k|{
  519|   239k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   239k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 239k, False: 0]
  ------------------
  520|   239k|        Py_DECREF(op);
  ------------------
  |  |  430|   239k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   239k|    }
  522|   239k|}
bytearrayobject.c:_Py_NewRef:
  535|     12|{
  536|     12|    Py_INCREF(obj);
  ------------------
  |  |  310|     12|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     12|    return obj;
  538|     12|}
bytearrayobject.c:Py_INCREF:
  256|     12|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     12|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     12|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 12]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|     12|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     12|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     12|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     12|#endif
  308|     12|}
bytesobject.c:_Py_IsImmortal:
  127|  17.5M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  17.5M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  17.5M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  17.5M|}
bytesobject.c:Py_INCREF:
  256|  2.01M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  2.01M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  2.01M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 2.01M, False: 235]
  ------------------
  288|       |        // the object is immortal
  289|  2.01M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  2.01M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  2.01M|        return;
  291|  2.01M|    }
  292|    235|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    235|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    235|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    235|#endif
  308|    235|}
bytesobject.c:Py_DECREF:
  418|   231k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   231k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   231k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   231k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 225k, False: 5.23k]
  |  |  ------------------
  ------------------
  422|   225k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   225k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   225k|        return;
  424|   225k|    }
  425|  5.23k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  5.23k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  5.23k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 5.23k, False: 0]
  ------------------
  427|  5.23k|        _Py_Dealloc(op);
  428|  5.23k|    }
  429|  5.23k|}
bytesobject.c:Py_XDECREF:
  518|   234k|{
  519|   234k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   234k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 5.23k, False: 229k]
  ------------------
  520|  5.23k|        Py_DECREF(op);
  ------------------
  |  |  430|  5.23k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.23k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.23k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  5.23k|    }
  522|   234k|}
bytesobject.c:_Py_NewRef:
  535|  5.44k|{
  536|  5.44k|    Py_INCREF(obj);
  ------------------
  |  |  310|  5.44k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.44k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.44k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  5.44k|    return obj;
  538|  5.44k|}
bytesobject.c:_Py_REFCNT:
  105|  14.2M|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  14.2M|    #if !defined(Py_GIL_DISABLED)
  107|  14.2M|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  14.2M|    }
call.c:Py_DECREF:
  418|   815k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   815k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   815k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   815k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   815k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 422k, False: 392k]
  |  |  ------------------
  ------------------
  422|   422k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   422k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   422k|        return;
  424|   422k|    }
  425|   392k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   392k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   392k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 74.6k, False: 317k]
  ------------------
  427|  74.6k|        _Py_Dealloc(op);
  428|  74.6k|    }
  429|   392k|}
call.c:_Py_IsImmortal:
  127|   815k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   815k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   815k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   815k|}
call.c:_Py_IsStaticImmortal:
  141|   147k|{
  142|   147k|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|   147k|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|   147k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|   147k|}
call.c:_Py_NewRef:
  535|  2.76k|{
  536|  2.76k|    Py_INCREF(obj);
  ------------------
  |  |  310|  2.76k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.76k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.76k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  2.76k|    return obj;
  538|  2.76k|}
call.c:Py_INCREF:
  256|  2.76k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  2.76k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  2.76k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.58k, False: 1.18k]
  ------------------
  288|       |        // the object is immortal
  289|  1.58k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.58k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.58k|        return;
  291|  1.58k|    }
  292|  1.18k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.18k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.18k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.18k|#endif
  308|  1.18k|}
capsule.c:Py_DECREF:
  418|      2|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|      2|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|      2|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|      2|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      2|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      2|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 2]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      2|}
capsule.c:_Py_IsImmortal:
  127|      2|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|      2|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|      2|}
capsule.c:Py_XDECREF:
  518|      1|{
  519|      1|    if (op != _Py_NULL) {
  ------------------
  |  |   57|      1|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1, False: 0]
  ------------------
  520|      1|        Py_DECREF(op);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      1|    }
  522|      1|}
cellobject.c:_Py_XNewRef:
  541|  1.95k|{
  542|  1.95k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  1.95k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  1.95k|    return obj;
  544|  1.95k|}
cellobject.c:Py_XINCREF:
  508|  1.95k|{
  509|  1.95k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.95k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 850, False: 1.10k]
  ------------------
  510|    850|        Py_INCREF(op);
  ------------------
  |  |  310|    850|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    850|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    850|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|    850|    }
  512|  1.95k|}
cellobject.c:Py_INCREF:
  256|    850|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    850|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    850|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 13, False: 837]
  ------------------
  288|       |        // the object is immortal
  289|     13|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     13|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     13|        return;
  291|     13|    }
  292|    837|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    837|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    837|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    837|#endif
  308|    837|}
cellobject.c:Py_XDECREF:
  518|  1.80k|{
  519|  1.80k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  1.80k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1.19k, False: 616]
  ------------------
  520|  1.19k|        Py_DECREF(op);
  ------------------
  |  |  430|  1.19k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  1.19k|    }
  522|  1.80k|}
cellobject.c:Py_DECREF:
  418|  1.78k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.78k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.78k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.78k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.78k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 7, False: 1.77k]
  |  |  ------------------
  ------------------
  422|      7|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      7|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      7|        return;
  424|      7|    }
  425|  1.77k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.77k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.77k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 613, False: 1.16k]
  ------------------
  427|    613|        _Py_Dealloc(op);
  428|    613|    }
  429|  1.77k|}
cellobject.c:_Py_IsImmortal:
  127|  1.78k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.78k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.78k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.78k|}
classobject.c:_Py_NewRef:
  535|  4.65k|{
  536|  4.65k|    Py_INCREF(obj);
  ------------------
  |  |  310|  4.65k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  4.65k|    return obj;
  538|  4.65k|}
classobject.c:Py_INCREF:
  256|  4.65k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  4.65k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  4.65k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 4.65k]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|  4.65k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  4.65k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  4.65k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  4.65k|#endif
  308|  4.65k|}
classobject.c:_Py_REFCNT:
  105|  2.19k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  2.19k|    #if !defined(Py_GIL_DISABLED)
  107|  2.19k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  2.19k|    }
classobject.c:Py_DECREF:
  418|  4.38k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  4.38k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  4.38k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 4.38k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  4.38k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  4.38k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  4.38k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 4.38k]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|  4.38k|}
classobject.c:_Py_IsImmortal:
  127|  4.38k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  4.38k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  4.38k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  4.38k|}
classobject.c:Py_XDECREF:
  518|  2.19k|{
  519|  2.19k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  2.19k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 2.19k, False: 0]
  ------------------
  520|  2.19k|        Py_DECREF(op);
  ------------------
  |  |  430|  2.19k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  2.19k|    }
  522|  2.19k|}
codeobject.c:_Py_NewRef:
  535|  64.4M|{
  536|  64.4M|    Py_INCREF(obj);
  ------------------
  |  |  310|  64.4M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  64.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  64.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  64.4M|    return obj;
  538|  64.4M|}
codeobject.c:Py_INCREF:
  256|  64.4M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  64.4M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  64.4M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.99M, False: 62.4M]
  ------------------
  288|       |        // the object is immortal
  289|  1.99M|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.99M|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.99M|        return;
  291|  1.99M|    }
  292|  62.4M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  62.4M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  62.4M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  62.4M|#endif
  308|  62.4M|}
codeobject.c:Py_XDECREF:
  518|   560k|{
  519|   560k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   560k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 504k, False: 56.1k]
  ------------------
  520|   504k|        Py_DECREF(op);
  ------------------
  |  |  430|   504k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   504k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   504k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   504k|    }
  522|   560k|}
codeobject.c:_Py_REFCNT:
  105|   324k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   324k|    #if !defined(Py_GIL_DISABLED)
  107|   324k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   324k|    }
codeobject.c:Py_DECREF:
  418|  1.07M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.07M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.07M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.07M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.07M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 440k, False: 638k]
  |  |  ------------------
  ------------------
  422|   440k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   440k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   440k|        return;
  424|   440k|    }
  425|   638k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   638k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   638k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 153k, False: 484k]
  ------------------
  427|   153k|        _Py_Dealloc(op);
  428|   153k|    }
  429|   638k|}
codeobject.c:_Py_IsImmortal:
  127|  1.18M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.18M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.18M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.18M|}
codeobject.c:Py_SET_REFCNT:
  154|   107k|static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
  155|   107k|    assert(refcnt >= 0);
  ------------------
  |  Branch (155:5): [True: 107k, False: 0]
  ------------------
  156|       |#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
  157|       |    || defined(_Py_OPAQUE_PYOBJECT)
  158|       |    // Stable ABI implements Py_SET_REFCNT() as a function call
  159|       |    // on limited C API version 3.13 and newer, and abi3t.
  160|       |    _Py_SetRefcnt(ob, refcnt);
  161|       |#else
  162|       |    // This immortal check is for code that is unaware of immortal objects.
  163|       |    // The runtime tracks these objects and we should avoid as much
  164|       |    // as possible having extensions inadvertently change the refcnt
  165|       |    // of an immortalized object.
  166|   107k|    if (_Py_IsImmortal(ob)) {
  ------------------
  |  |  137|   107k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   107k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   107k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 107k]
  |  |  ------------------
  ------------------
  167|      0|        return;
  168|      0|    }
  169|   107k|#ifndef Py_GIL_DISABLED
  170|   107k|#if SIZEOF_VOID_P > 4
  171|   107k|    ob->ob_refcnt = (uint32_t)refcnt;
  172|       |#else
  173|       |    ob->ob_refcnt = refcnt;
  174|       |#endif
  175|       |#else
  176|       |    if (_Py_IsOwnedByCurrentThread(ob)) {
  177|       |        if ((size_t)refcnt > (size_t)UINT32_MAX) {
  178|       |            // On overflow, make the object immortal
  179|       |            ob->ob_tid = _Py_UNOWNED_TID;
  180|       |            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
  181|       |            ob->ob_ref_shared = 0;
  182|       |        }
  183|       |        else {
  184|       |            // Set local refcount to desired refcount and shared refcount
  185|       |            // to zero, but preserve the shared refcount flags.
  186|       |            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
  187|       |            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
  188|       |        }
  189|       |    }
  190|       |    else {
  191|       |        // Set local refcount to zero and shared refcount to desired refcount.
  192|       |        // Mark the object as merged.
  193|       |        ob->ob_tid = _Py_UNOWNED_TID;
  194|       |        ob->ob_ref_local = 0;
  195|       |        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
  196|       |    }
  197|       |#endif  // Py_GIL_DISABLED
  198|   107k|#endif  // Py_LIMITED_API
  199|   107k|}
complexobject.c:_Py_IsImmortal:
  127|   105k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   105k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   105k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   105k|}
complexobject.c:Py_INCREF:
  256|   292k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   292k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   292k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 288k, False: 3.55k]
  ------------------
  288|       |        // the object is immortal
  289|   288k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   288k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   288k|        return;
  291|   288k|    }
  292|  3.55k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  3.55k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  3.55k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  3.55k|#endif
  308|  3.55k|}
complexobject.c:Py_DECREF:
  418|     41|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     41|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     41|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 41]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|     41|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     41|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     41|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 41, False: 0]
  ------------------
  427|     41|        _Py_Dealloc(op);
  428|     41|    }
  429|     41|}
complexobject.c:_Py_NewRef:
  535|   187k|{
  536|   187k|    Py_INCREF(obj);
  ------------------
  |  |  310|   187k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   187k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   187k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   187k|    return obj;
  538|   187k|}
descrobject.c:Py_XDECREF:
  518|    775|{
  519|    775|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    775|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 375, False: 400]
  ------------------
  520|    375|        Py_DECREF(op);
  ------------------
  |  |  430|    375|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    375|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    375|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    375|    }
  522|    775|}
descrobject.c:Py_DECREF:
  418|  1.37k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.37k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.37k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 148, False: 1.22k]
  |  |  ------------------
  ------------------
  422|    148|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|    148|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|    148|        return;
  424|    148|    }
  425|  1.22k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.22k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.22k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 564, False: 659]
  ------------------
  427|    564|        _Py_Dealloc(op);
  428|    564|    }
  429|  1.22k|}
descrobject.c:_Py_IsImmortal:
  127|  1.37k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.37k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.37k|}
descrobject.c:_Py_XNewRef:
  541|  5.29k|{
  542|  5.29k|    Py_XINCREF(obj);
  ------------------
  |  |  514|  5.29k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.29k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.29k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  5.29k|    return obj;
  544|  5.29k|}
descrobject.c:Py_XINCREF:
  508|  5.29k|{
  509|  5.29k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  5.29k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 5.22k, False: 74]
  ------------------
  510|  5.22k|        Py_INCREF(op);
  ------------------
  |  |  310|  5.22k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  5.22k|    }
  512|  5.29k|}
descrobject.c:Py_INCREF:
  256|  6.00k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  6.00k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  6.00k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 3.83k, False: 2.16k]
  ------------------
  288|       |        // the object is immortal
  289|  3.83k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  3.83k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  3.83k|        return;
  291|  3.83k|    }
  292|  2.16k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  2.16k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  2.16k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  2.16k|#endif
  308|  2.16k|}
descrobject.c:_Py_NewRef:
  535|    783|{
  536|    783|    Py_INCREF(obj);
  ------------------
  |  |  310|    783|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    783|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    783|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|    783|    return obj;
  538|    783|}
enumobject.c:Py_XDECREF:
  518|   112k|{
  519|   112k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   112k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 75.0k, False: 37.5k]
  ------------------
  520|  75.0k|        Py_DECREF(op);
  ------------------
  |  |  430|  75.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  75.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  75.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  75.0k|    }
  522|   112k|}
enumobject.c:Py_DECREF:
  418|  1.32M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.32M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.32M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.32M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.32M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 942k, False: 377k]
  |  |  ------------------
  ------------------
  422|   942k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   942k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   942k|        return;
  424|   942k|    }
  425|   377k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   377k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   377k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 75.3k, False: 302k]
  ------------------
  427|  75.3k|        _Py_Dealloc(op);
  428|  75.3k|    }
  429|   377k|}
enumobject.c:_Py_IsImmortal:
  127|  1.32M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.32M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.32M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.32M|}
enumobject.c:_Py_REFCNT:
  105|   622k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|   622k|    #if !defined(Py_GIL_DISABLED)
  107|   622k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|   622k|    }
enumobject.c:Py_INCREF:
  256|   622k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   622k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   622k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 622k]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|   622k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   622k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   622k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   622k|#endif
  308|   622k|}
genobject.c:Py_INCREF:
  256|  2.49k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  2.49k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  2.49k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 2.49k, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|  2.49k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  2.49k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  2.49k|        return;
  291|  2.49k|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
genobject.c:_Py_NewRef:
  535|  2.49k|{
  536|  2.49k|    Py_INCREF(obj);
  ------------------
  |  |  310|  2.49k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  2.49k|    return obj;
  538|  2.49k|}
genobject.c:Py_DECREF:
  418|  3.60k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.60k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.60k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.60k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.60k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3.60k, False: 0]
  |  |  ------------------
  ------------------
  422|  3.60k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  3.60k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  3.60k|        return;
  424|  3.60k|    }
  425|      0|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      0|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 0]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      0|}
genobject.c:_Py_IsImmortal:
  127|  54.3k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  54.3k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  54.3k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  54.3k|}
genobject.c:_Py_REFCNT:
  105|  1.24k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  1.24k|    #if !defined(Py_GIL_DISABLED)
  107|  1.24k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  1.24k|    }
genobject.c:_Py_IsStaticImmortal:
  141|  1.24k|{
  142|  1.24k|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|  1.24k|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|  1.24k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|  1.24k|}
fileobject.c:Py_DECREF:
  418|  48.7k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  48.7k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  48.7k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 48.6k, False: 93]
  |  |  ------------------
  ------------------
  422|  48.6k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  48.6k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  48.6k|        return;
  424|  48.6k|    }
  425|     93|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     93|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     93|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 93]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|     93|}
fileobject.c:_Py_IsImmortal:
  127|  48.7k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  48.7k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  48.7k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  48.7k|}
floatobject.c:Py_DECREF:
  418|     69|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     69|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     69|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 69]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|     69|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     69|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     69|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 69, False: 0]
  ------------------
  427|     69|        _Py_Dealloc(op);
  428|     69|    }
  429|     69|}
floatobject.c:_Py_IsImmortal:
  127|  69.0k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  69.0k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  69.0k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  69.0k|}
floatobject.c:Py_INCREF:
  256|  97.4k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  97.4k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  97.4k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 91.4k, False: 5.99k]
  ------------------
  288|       |        // the object is immortal
  289|  91.4k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  91.4k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  91.4k|        return;
  291|  91.4k|    }
  292|  5.99k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  5.99k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  5.99k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  5.99k|#endif
  308|  5.99k|}
floatobject.c:Py_XDECREF:
  518|     69|{
  519|     69|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     69|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 69, False: 0]
  ------------------
  520|     69|        Py_DECREF(op);
  ------------------
  |  |  430|     69|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|     69|    }
  522|     69|}
floatobject.c:_Py_NewRef:
  535|  28.5k|{
  536|  28.5k|    Py_INCREF(obj);
  ------------------
  |  |  310|  28.5k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  28.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  28.5k|    return obj;
  538|  28.5k|}
frameobject.c:Py_INCREF:
  256|    386|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|    386|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|    386|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 386]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|    386|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|    386|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|    386|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|    386|#endif
  308|    386|}
frameobject.c:_Py_IsImmortal:
  127|  2.95k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  2.95k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  2.95k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  2.95k|}
frameobject.c:_Py_IsStaticImmortal:
  141|  22.6k|{
  142|  22.6k|#if defined(Py_GIL_DISABLED) || SIZEOF_VOID_P > 4
  143|  22.6k|    return (op->ob_flags & _Py_STATICALLY_ALLOCATED_FLAG) != 0;
  ------------------
  |  |  583|  22.6k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  ------------------
  144|       |#else
  145|       |    return op->ob_refcnt >= _Py_STATIC_IMMORTAL_MINIMUM_REFCNT;
  146|       |#endif
  147|  22.6k|}
frameobject.c:Py_DECREF:
  418|  2.95k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  2.95k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  2.95k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 2.95k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  2.95k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  2.95k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  2.95k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 479, False: 2.48k]
  ------------------
  427|    479|        _Py_Dealloc(op);
  428|    479|    }
  429|  2.95k|}
frameobject.c:_Py_REFCNT:
  105|  23.1k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  23.1k|    #if !defined(Py_GIL_DISABLED)
  107|  23.1k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  23.1k|    }
frameobject.c:_Py_NewRef:
  535|    386|{
  536|    386|    Py_INCREF(obj);
  ------------------
  |  |  310|    386|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    386|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    386|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|    386|    return obj;
  538|    386|}
funcobject.c:Py_XDECREF:
  518|    308|{
  519|    308|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    308|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 132, False: 176]
  ------------------
  520|    132|        Py_DECREF(op);
  ------------------
  |  |  430|    132|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    132|    }
  522|    308|}
funcobject.c:Py_INCREF:
  256|  27.3k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  27.3k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  27.3k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 14.8k, False: 12.5k]
  ------------------
  288|       |        // the object is immortal
  289|  14.8k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  14.8k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  14.8k|        return;
  291|  14.8k|    }
  292|  12.5k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  12.5k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  12.5k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  12.5k|#endif
  308|  12.5k|}
funcobject.c:_Py_NewRef:
  535|  6.97k|{
  536|  6.97k|    Py_INCREF(obj);
  ------------------
  |  |  310|  6.97k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.97k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  6.97k|    return obj;
  538|  6.97k|}
funcobject.c:_Py_XNewRef:
  541|    435|{
  542|    435|    Py_XINCREF(obj);
  ------------------
  |  |  514|    435|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    435|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    435|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|    435|    return obj;
  544|    435|}
funcobject.c:Py_XINCREF:
  508|    435|{
  509|    435|    if (op != _Py_NULL) {
  ------------------
  |  |   57|    435|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 57, False: 378]
  ------------------
  510|     57|        Py_INCREF(op);
  ------------------
  |  |  310|     57|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     57|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     57|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|     57|    }
  512|    435|}
funcobject.c:_Py_REFCNT:
  105|  18.0k|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  18.0k|    #if !defined(Py_GIL_DISABLED)
  107|  18.0k|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  18.0k|    }
funcobject.c:Py_DECREF:
  418|  24.9k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  24.9k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  24.9k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 14.2k, False: 10.6k]
  |  |  ------------------
  ------------------
  422|  14.2k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  14.2k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  14.2k|        return;
  424|  14.2k|    }
  425|  10.6k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  10.6k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  10.6k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 818, False: 9.82k]
  ------------------
  427|    818|        _Py_Dealloc(op);
  428|    818|    }
  429|  10.6k|}
funcobject.c:_Py_IsImmortal:
  127|  30.0k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  30.0k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  30.0k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  30.0k|}
funcobject.c:Py_SET_REFCNT:
  154|  5.16k|static inline void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
  155|  5.16k|    assert(refcnt >= 0);
  ------------------
  |  Branch (155:5): [True: 5.16k, False: 0]
  ------------------
  156|       |#if (defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030d0000) \
  157|       |    || defined(_Py_OPAQUE_PYOBJECT)
  158|       |    // Stable ABI implements Py_SET_REFCNT() as a function call
  159|       |    // on limited C API version 3.13 and newer, and abi3t.
  160|       |    _Py_SetRefcnt(ob, refcnt);
  161|       |#else
  162|       |    // This immortal check is for code that is unaware of immortal objects.
  163|       |    // The runtime tracks these objects and we should avoid as much
  164|       |    // as possible having extensions inadvertently change the refcnt
  165|       |    // of an immortalized object.
  166|  5.16k|    if (_Py_IsImmortal(ob)) {
  ------------------
  |  |  137|  5.16k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.16k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.16k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 5.16k]
  |  |  ------------------
  ------------------
  167|      0|        return;
  168|      0|    }
  169|  5.16k|#ifndef Py_GIL_DISABLED
  170|  5.16k|#if SIZEOF_VOID_P > 4
  171|  5.16k|    ob->ob_refcnt = (uint32_t)refcnt;
  172|       |#else
  173|       |    ob->ob_refcnt = refcnt;
  174|       |#endif
  175|       |#else
  176|       |    if (_Py_IsOwnedByCurrentThread(ob)) {
  177|       |        if ((size_t)refcnt > (size_t)UINT32_MAX) {
  178|       |            // On overflow, make the object immortal
  179|       |            ob->ob_tid = _Py_UNOWNED_TID;
  180|       |            ob->ob_ref_local = _Py_IMMORTAL_REFCNT_LOCAL;
  181|       |            ob->ob_ref_shared = 0;
  182|       |        }
  183|       |        else {
  184|       |            // Set local refcount to desired refcount and shared refcount
  185|       |            // to zero, but preserve the shared refcount flags.
  186|       |            ob->ob_ref_local = _Py_STATIC_CAST(uint32_t, refcnt);
  187|       |            ob->ob_ref_shared &= _Py_REF_SHARED_FLAG_MASK;
  188|       |        }
  189|       |    }
  190|       |    else {
  191|       |        // Set local refcount to zero and shared refcount to desired refcount.
  192|       |        // Mark the object as merged.
  193|       |        ob->ob_tid = _Py_UNOWNED_TID;
  194|       |        ob->ob_ref_local = 0;
  195|       |        ob->ob_ref_shared = _Py_REF_SHARED(refcnt, _Py_REF_MERGED);
  196|       |    }
  197|       |#endif  // Py_GIL_DISABLED
  198|  5.16k|#endif  // Py_LIMITED_API
  199|  5.16k|}
interpolationobject.c:Py_DECREF:
  418|      2|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|      2|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|      2|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|      2|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      2|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      2|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 2]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      2|}
interpolationobject.c:_Py_IsImmortal:
  127|      2|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|      2|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|      2|}
iterobject.c:_Py_NewRef:
  535|     63|{
  536|     63|    Py_INCREF(obj);
  ------------------
  |  |  310|     63|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     63|    return obj;
  538|     63|}
iterobject.c:Py_INCREF:
  256|     63|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     63|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     63|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 63]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|     63|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     63|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     63|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     63|#endif
  308|     63|}
iterobject.c:Py_XDECREF:
  518|     63|{
  519|     63|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     63|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 63]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|     63|}
iterobject.c:Py_DECREF:
  418|     63|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     63|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     63|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 63]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|     63|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|     63|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|     63|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 63]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|     63|}
iterobject.c:_Py_IsImmortal:
  127|     63|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     63|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     63|}
lazyimportobject.c:_Py_XNewRef:
  541|     26|{
  542|     26|    Py_XINCREF(obj);
  ------------------
  |  |  514|     26|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     26|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     26|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|     26|    return obj;
  544|     26|}
lazyimportobject.c:Py_XINCREF:
  508|     26|{
  509|     26|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     26|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 17, False: 9]
  ------------------
  510|     17|        Py_INCREF(op);
  ------------------
  |  |  310|     17|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|     17|    }
  512|     26|}
lazyimportobject.c:Py_INCREF:
  256|     43|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     43|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     43|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 13, False: 30]
  ------------------
  288|       |        // the object is immortal
  289|     13|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     13|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     13|        return;
  291|     13|    }
  292|     30|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|     30|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|     30|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|     30|#endif
  308|     30|}
lazyimportobject.c:_Py_NewRef:
  535|     26|{
  536|     26|    Py_INCREF(obj);
  ------------------
  |  |  310|     26|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     26|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     26|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     26|    return obj;
  538|     26|}
memoryobject.c:_Py_NewRef:
  535|   144k|{
  536|   144k|    Py_INCREF(obj);
  ------------------
  |  |  310|   144k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   144k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   144k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   144k|    return obj;
  538|   144k|}
memoryobject.c:Py_INCREF:
  256|   144k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   144k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   144k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 0, False: 144k]
  ------------------
  288|       |        // the object is immortal
  289|      0|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      0|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      0|        return;
  291|      0|    }
  292|   144k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   144k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   144k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   144k|#endif
  308|   144k|}
memoryobject.c:Py_DECREF:
  418|   144k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   144k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   144k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   144k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   144k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2, False: 144k]
  |  |  ------------------
  ------------------
  422|      2|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      2|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      2|        return;
  424|      2|    }
  425|   144k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   144k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   144k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 72.2k, False: 72.3k]
  ------------------
  427|  72.2k|        _Py_Dealloc(op);
  428|  72.2k|    }
  429|   144k|}
memoryobject.c:_Py_IsImmortal:
  127|   144k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   144k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   144k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   144k|}
methodobject.c:_Py_NewRef:
  535|    102|{
  536|    102|    Py_INCREF(obj);
  ------------------
  |  |  310|    102|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|    102|    return obj;
  538|    102|}
methodobject.c:Py_INCREF:
  256|  1.94M|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.94M|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.94M|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 2.39k, False: 1.94M]
  ------------------
  288|       |        // the object is immortal
  289|  2.39k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  2.39k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  2.39k|        return;
  291|  2.39k|    }
  292|  1.94M|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  1.94M|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  1.94M|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  1.94M|#endif
  308|  1.94M|}
methodobject.c:_Py_XNewRef:
  541|  3.88M|{
  542|  3.88M|    Py_XINCREF(obj);
  ------------------
  |  |  514|  3.88M|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.88M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  3.88M|    return obj;
  544|  3.88M|}
methodobject.c:Py_XINCREF:
  508|  3.88M|{
  509|  3.88M|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  3.88M|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 1.94M, False: 1.94M]
  ------------------
  510|  1.94M|        Py_INCREF(op);
  ------------------
  |  |  310|  1.94M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  1.94M|    }
  512|  3.88M|}
methodobject.c:_Py_REFCNT:
  105|  1.94M|    static inline Py_ssize_t _Py_REFCNT(PyObject *ob) {
  106|  1.94M|    #if !defined(Py_GIL_DISABLED)
  107|  1.94M|        return ob->ob_refcnt;
  108|       |    #else
  109|       |        uint32_t local = _Py_atomic_load_uint32_relaxed(&ob->ob_ref_local);
  110|       |        if (local == _Py_IMMORTAL_REFCNT_LOCAL) {
  111|       |            return _Py_IMMORTAL_INITIAL_REFCNT;
  112|       |        }
  113|       |        Py_ssize_t shared = _Py_atomic_load_ssize_relaxed(&ob->ob_ref_shared);
  114|       |        return _Py_STATIC_CAST(Py_ssize_t, local) +
  115|       |               Py_ARITHMETIC_RIGHT_SHIFT(Py_ssize_t, shared, _Py_REF_SHARED_SHIFT);
  116|       |    #endif
  117|  1.94M|    }
methodobject.c:Py_XDECREF:
  518|  5.82M|{
  519|  5.82M|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  5.82M|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 1.94M, False: 3.88M]
  ------------------
  520|  1.94M|        Py_DECREF(op);
  ------------------
  |  |  430|  1.94M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  1.94M|    }
  522|  5.82M|}
methodobject.c:Py_DECREF:
  418|  1.94M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  1.94M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  1.94M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.38k, False: 1.94M]
  |  |  ------------------
  ------------------
  422|  1.38k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.38k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.38k|        return;
  424|  1.38k|    }
  425|  1.94M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.94M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.94M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 36, False: 1.94M]
  ------------------
  427|     36|        _Py_Dealloc(op);
  428|     36|    }
  429|  1.94M|}
methodobject.c:_Py_IsImmortal:
  127|  1.94M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  1.94M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  1.94M|}
namespaceobject.c:Py_DECREF:
  418|      2|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|      2|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|      2|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|      2|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      2|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      2|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 2, False: 0]
  ------------------
  427|      2|        _Py_Dealloc(op);
  428|      2|    }
  429|      2|}
namespaceobject.c:_Py_IsImmortal:
  127|      2|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|      2|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|      2|}
unicode_format.c:Py_DECREF:
  418|     21|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|     21|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|     21|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 21, False: 0]
  |  |  ------------------
  ------------------
  422|     21|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|     21|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|     21|        return;
  424|     21|    }
  425|      0|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|      0|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 0]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|      0|}
unicode_format.c:_Py_IsImmortal:
  127|     21|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|     21|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|     21|}
unicode_format.c:_Py_NewRef:
  535|     21|{
  536|     21|    Py_INCREF(obj);
  ------------------
  |  |  310|     21|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|     21|    return obj;
  538|     21|}
unicode_format.c:Py_INCREF:
  256|     21|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|     21|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|     21|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 21, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|     21|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|     21|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|     21|        return;
  291|     21|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
unicode_format.c:Py_XDECREF:
  518|     21|{
  519|     21|    if (op != _Py_NULL) {
  ------------------
  |  |   57|     21|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 21]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|     21|}
Python-ast.c:Py_DECREF:
  418|  3.37M|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.37M|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.37M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.37M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.37M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 1.61M, False: 1.76M]
  |  |  ------------------
  ------------------
  422|  1.61M|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  1.61M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  1.61M|        return;
  424|  1.61M|    }
  425|  1.76M|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  1.76M|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  1.76M|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 414k, False: 1.35M]
  ------------------
  427|   414k|        _Py_Dealloc(op);
  428|   414k|    }
  429|  1.76M|}
Python-ast.c:_Py_IsImmortal:
  127|  3.37M|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.37M|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.37M|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.37M|}
Python-ast.c:Py_INCREF:
  256|   546k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   546k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   546k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 298k, False: 247k]
  ------------------
  288|       |        // the object is immortal
  289|   298k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   298k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   298k|        return;
  291|   298k|    }
  292|   247k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|   247k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|   247k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|   247k|#endif
  308|   247k|}
Python-ast.c:_Py_NewRef:
  535|   546k|{
  536|   546k|    Py_INCREF(obj);
  ------------------
  |  |  310|   546k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   546k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   546k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   546k|    return obj;
  538|   546k|}
assemble.c:Py_DECREF:
  418|   369k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   369k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   369k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   369k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   369k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 100k, False: 268k]
  |  |  ------------------
  ------------------
  422|   100k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|   100k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|   100k|        return;
  424|   100k|    }
  425|   268k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   268k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   268k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 268k]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|   268k|}
assemble.c:_Py_IsImmortal:
  127|   369k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   369k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   369k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   369k|}
assemble.c:_Py_NewRef:
  535|   200k|{
  536|   200k|    Py_INCREF(obj);
  ------------------
  |  |  310|   200k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   200k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   200k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   200k|    return obj;
  538|   200k|}
assemble.c:Py_INCREF:
  256|   200k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|   200k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|   200k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 191k, False: 8.72k]
  ------------------
  288|       |        // the object is immortal
  289|   191k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|   191k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|   191k|        return;
  291|   191k|    }
  292|  8.72k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  8.72k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  8.72k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  8.72k|#endif
  308|  8.72k|}
assemble.c:Py_XDECREF:
  518|   369k|{
  519|   369k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|   369k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 369k, False: 0]
  ------------------
  520|   369k|        Py_DECREF(op);
  ------------------
  |  |  430|   369k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   369k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   369k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|   369k|    }
  522|   369k|}
ast_preprocess.c:Py_DECREF:
  418|  4.05k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  4.05k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  4.05k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.05k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.05k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 4.05k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  4.05k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  4.05k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  4.05k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 3.61k, False: 442]
  ------------------
  427|  3.61k|        _Py_Dealloc(op);
  428|  3.61k|    }
  429|  4.05k|}
ast_preprocess.c:_Py_IsImmortal:
  127|  4.05k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  4.05k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  4.05k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  4.05k|}
ast_unparse.c:Py_DECREF:
  418|   159k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|   159k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|   159k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   159k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   159k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 12.1k, False: 147k]
  |  |  ------------------
  ------------------
  422|  12.1k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  12.1k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  12.1k|        return;
  424|  12.1k|    }
  425|   147k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|   147k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|   147k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 112k, False: 34.9k]
  ------------------
  427|   112k|        _Py_Dealloc(op);
  428|   112k|    }
  429|   147k|}
ast_unparse.c:_Py_IsImmortal:
  127|   159k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|   159k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|   159k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|   159k|}
pegen.c:Py_DECREF:
  418|  46.6k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  46.6k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  46.6k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 15.6k, False: 31.0k]
  |  |  ------------------
  ------------------
  422|  15.6k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  15.6k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  15.6k|        return;
  424|  15.6k|    }
  425|  31.0k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  31.0k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  31.0k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 15.1k, False: 15.8k]
  ------------------
  427|  15.1k|        _Py_Dealloc(op);
  428|  15.1k|    }
  429|  31.0k|}
pegen.c:_Py_IsImmortal:
  127|  46.6k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  46.6k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  46.6k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  46.6k|}
pegen.c:Py_XDECREF:
  518|  31.3k|{
  519|  31.3k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  31.3k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 3.00k, False: 28.3k]
  ------------------
  520|  3.00k|        Py_DECREF(op);
  ------------------
  |  |  430|  3.00k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  3.00k|    }
  522|  31.3k|}
pegen.c:Py_INCREF:
  256|  1.53k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  1.53k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  1.53k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 1.53k, False: 0]
  ------------------
  288|       |        // the object is immortal
  289|  1.53k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  1.53k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  1.53k|        return;
  291|  1.53k|    }
  292|      0|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|      0|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|      0|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|      0|#endif
  308|      0|}
pegen_errors.c:Py_DECREF:
  418|  31.9k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  31.9k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  31.9k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  31.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  31.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2.33k, False: 29.5k]
  |  |  ------------------
  ------------------
  422|  2.33k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  2.33k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  2.33k|        return;
  424|  2.33k|    }
  425|  29.5k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  29.5k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  29.5k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 3.19k, False: 26.3k]
  ------------------
  427|  3.19k|        _Py_Dealloc(op);
  428|  3.19k|    }
  429|  29.5k|}
pegen_errors.c:_Py_IsImmortal:
  127|  31.9k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  31.9k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  31.9k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  31.9k|}
pegen_errors.c:Py_XDECREF:
  518|  7.01k|{
  519|  7.01k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  7.01k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 4.67k, False: 2.33k]
  ------------------
  520|  4.67k|        Py_DECREF(op);
  ------------------
  |  |  430|  4.67k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.67k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.67k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  4.67k|    }
  522|  7.01k|}
lexer.c:Py_DECREF:
  418|  97.8k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  97.8k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  97.8k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 2.25k, False: 95.6k]
  |  |  ------------------
  ------------------
  422|  2.25k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  2.25k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  2.25k|        return;
  424|  2.25k|    }
  425|  95.6k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  95.6k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  95.6k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 95.6k, False: 0]
  ------------------
  427|  95.6k|        _Py_Dealloc(op);
  428|  95.6k|    }
  429|  95.6k|}
lexer.c:_Py_IsImmortal:
  127|  97.8k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  97.8k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  97.8k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  97.8k|}
state.c:Py_XDECREF:
  518|  49.0k|{
  519|  49.0k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  49.0k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 22.6k, False: 26.4k]
  ------------------
  520|  22.6k|        Py_DECREF(op);
  ------------------
  |  |  430|  22.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  22.6k|    }
  522|  49.0k|}
state.c:Py_DECREF:
  418|  22.6k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  22.6k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  22.6k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 3, False: 22.6k]
  |  |  ------------------
  ------------------
  422|      3|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      3|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      3|        return;
  424|      3|    }
  425|  22.6k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  22.6k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  22.6k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 0, False: 22.6k]
  ------------------
  427|      0|        _Py_Dealloc(op);
  428|      0|    }
  429|  22.6k|}
state.c:_Py_IsImmortal:
  127|  22.6k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  22.6k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  22.6k|}
decoder.c:Py_DECREF:
  418|  3.20k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  3.20k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  3.20k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 3.20k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  3.20k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  3.20k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  3.20k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 3.17k, False: 34]
  ------------------
  427|  3.17k|        _Py_Dealloc(op);
  428|  3.17k|    }
  429|  3.20k|}
decoder.c:_Py_IsImmortal:
  127|  3.20k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  3.20k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  3.20k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  3.20k|}
api.c:Py_XINCREF:
  508|  45.2k|{
  509|  45.2k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  45.2k|#  define _Py_NULL NULL
  ------------------
  |  Branch (509:9): [True: 22.6k, False: 22.6k]
  ------------------
  510|  22.6k|        Py_INCREF(op);
  ------------------
  |  |  310|  22.6k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  22.6k|    }
  512|  45.2k|}
api.c:Py_INCREF:
  256|  22.6k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  22.6k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  22.6k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 3, False: 22.6k]
  ------------------
  288|       |        // the object is immortal
  289|      3|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|      3|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|      3|        return;
  291|      3|    }
  292|  22.6k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  22.6k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  22.6k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  22.6k|#endif
  308|  22.6k|}
api.c:Py_XDECREF:
  518|  45.2k|{
  519|  45.2k|    if (op != _Py_NULL) {
  ------------------
  |  |   57|  45.2k|#  define _Py_NULL NULL
  ------------------
  |  Branch (519:9): [True: 0, False: 45.2k]
  ------------------
  520|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|      0|    }
  522|  45.2k|}
action_helpers.c:_Py_NewRef:
  535|  6.18k|{
  536|  6.18k|    Py_INCREF(obj);
  ------------------
  |  |  310|  6.18k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  6.18k|    return obj;
  538|  6.18k|}
action_helpers.c:Py_INCREF:
  256|  6.18k|{
  257|       |#if (defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))) \
  258|       |    || defined(_Py_OPAQUE_PYOBJECT)
  259|       |    // Stable ABI implements Py_INCREF() as a function call on limited C API
  260|       |    // version 3.12 and newer, abi3t, and on Python built in debug mode.
  261|       |    // _Py_IncRef() was added to Python 3.10.0a7, use Py_IncRef() on older versions.
  262|       |    // Py_IncRef() accepts NULL whereas _Py_IncRef() doesn't.
  263|       |#  if Py_LIMITED_API+0 >= 0x030a00A7
  264|       |    _Py_IncRef(op);
  265|       |#  else
  266|       |    Py_IncRef(op);
  267|       |#  endif
  268|       |#else
  269|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  270|       |    // directly PyObject.ob_refcnt.
  271|       |#if defined(Py_GIL_DISABLED)
  272|       |    uint32_t local = _Py_atomic_load_uint32_relaxed(&op->ob_ref_local);
  273|       |    uint32_t new_local = local + 1;
  274|       |    if (new_local == 0) {
  275|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  276|       |        // local is equal to _Py_IMMORTAL_REFCNT_LOCAL: do nothing
  277|       |        return;
  278|       |    }
  279|       |    if (_Py_IsOwnedByCurrentThread(op)) {
  280|       |        _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, new_local);
  281|       |    }
  282|       |    else {
  283|       |        _Py_atomic_add_ssize(&op->ob_ref_shared, (1 << _Py_REF_SHARED_SHIFT));
  284|       |    }
  285|       |#elif SIZEOF_VOID_P > 4
  286|       |    uint32_t cur_refcnt = op->ob_refcnt;
  287|  6.18k|    if (cur_refcnt >= _Py_IMMORTAL_INITIAL_REFCNT) {
  ------------------
  |  |   47|  6.18k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
  |  Branch (287:9): [True: 3.82k, False: 2.36k]
  ------------------
  288|       |        // the object is immortal
  289|  3.82k|        _Py_INCREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   21|  3.82k|#  define _Py_INCREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  290|  3.82k|        return;
  291|  3.82k|    }
  292|  2.36k|    op->ob_refcnt = cur_refcnt + 1;
  293|       |#else
  294|       |    if (_Py_IsImmortal(op)) {
  295|       |        _Py_INCREF_IMMORTAL_STAT_INC();
  296|       |        return;
  297|       |    }
  298|       |    op->ob_refcnt++;
  299|       |#endif
  300|  2.36k|    _Py_INCREF_STAT_INC();
  ------------------
  |  |   19|  2.36k|#  define _Py_INCREF_STAT_INC() ((void)0)
  ------------------
  301|       |#ifdef Py_REF_DEBUG
  302|       |    // Don't count the incref if the object is immortal.
  303|       |    if (!_Py_IsImmortal(op)) {
  304|       |        _Py_INCREF_IncRefTotal();
  305|       |    }
  306|       |#endif
  307|  2.36k|#endif
  308|  2.36k|}
string_parser.c:Py_DECREF:
  418|  42.1k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  42.1k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  42.1k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 11.6k, False: 30.4k]
  |  |  ------------------
  ------------------
  422|  11.6k|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|  11.6k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|  11.6k|        return;
  424|  11.6k|    }
  425|  30.4k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  30.4k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  30.4k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 30.4k, False: 0]
  ------------------
  427|  30.4k|        _Py_Dealloc(op);
  428|  30.4k|    }
  429|  30.4k|}
string_parser.c:_Py_IsImmortal:
  127|  42.1k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  42.1k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  42.1k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  42.1k|}

PyInit__abc:
 1004|      2|{
 1005|      2|    return PyModuleDef_Init(&_abcmodule);
 1006|      2|}
_abc.c:get_abc_state:
   29|    378|{
   30|    378|    void *state = _PyModule_GetState(module);
   31|    378|    assert(state != NULL);
  ------------------
  |  Branch (31:5): [True: 378, False: 0]
  ------------------
   32|    378|    return (_abcmodule_state *)state;
   33|    378|}
_abc.c:get_invalidation_counter:
   37|    166|{
   38|       |#ifdef Py_GIL_DISABLED
   39|       |    return _Py_atomic_load_uint64(&state->abc_invalidation_counter);
   40|       |#else
   41|    166|    return state->abc_invalidation_counter;
   42|    166|#endif
   43|    166|}
_abc.c:_abc__abc_init:
  499|     76|{
  500|     76|    _abcmodule_state *state = get_abc_state(module);
  501|     76|    PyObject *data;
  502|     76|    if (compute_abstract_methods(self) < 0) {
  ------------------
  |  Branch (502:9): [True: 0, False: 76]
  ------------------
  503|      0|        return NULL;
  504|      0|    }
  505|       |
  506|       |    /* Set up inheritance registry. */
  507|     76|    data = abc_data_new(state->_abc_data_type, NULL, NULL);
  508|     76|    if (data == NULL) {
  ------------------
  |  Branch (508:9): [True: 0, False: 76]
  ------------------
  509|      0|        return NULL;
  510|      0|    }
  511|     76|    if (PyObject_SetAttr(self, &_Py_ID(_abc_impl), data) < 0) {
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (511:9): [True: 0, False: 76]
  ------------------
  512|      0|        Py_DECREF(data);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|      0|        return NULL;
  514|      0|    }
  515|     76|    Py_DECREF(data);
  ------------------
  |  |  430|     76|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|       |    /* If __abc_tpflags__ & COLLECTION_FLAGS is set, then set the corresponding bit(s)
  517|       |     * in the new class.
  518|       |     * Used by collections.abc.Sequence and collections.abc.Mapping to indicate
  519|       |     * their special status w.r.t. pattern matching. */
  520|     76|    if (PyType_Check(self)) {
  ------------------
  |  |  766|     76|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 76, False: 0]
  |  |  ------------------
  ------------------
  521|     76|        PyTypeObject *cls = (PyTypeObject *)self;
  522|     76|        PyObject *dict = _PyType_GetDict(cls);
  523|     76|        PyObject *flags = NULL;
  524|     76|        if (PyDict_Pop(dict, &_Py_ID(__abc_tpflags__), &flags) < 0) {
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (524:13): [True: 0, False: 76]
  ------------------
  525|      0|            return NULL;
  526|      0|        }
  527|     76|        if (flags == NULL || !PyLong_CheckExact(flags)) {
  ------------------
  |  |   14|      4|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|      4|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (527:13): [True: 72, False: 4]
  |  Branch (527:30): [True: 0, False: 4]
  ------------------
  528|     72|            Py_XDECREF(flags);
  ------------------
  |  |  524|     72|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|     72|            Py_RETURN_NONE;
  ------------------
  |  |  628|     72|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     72|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  530|     72|        }
  531|       |
  532|      4|        long val = PyLong_AsLong(flags);
  533|      4|        Py_DECREF(flags);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  534|      4|        if (val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (534:13): [True: 0, False: 4]
  |  Branch (534:26): [True: 0, False: 0]
  ------------------
  535|      0|            return NULL;
  536|      0|        }
  537|      4|        if ((val & COLLECTION_FLAGS) == COLLECTION_FLAGS) {
  ------------------
  |  |  484|      4|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|      4|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|      4|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
                      if ((val & COLLECTION_FLAGS) == COLLECTION_FLAGS) {
  ------------------
  |  |  484|      4|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|      4|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|      4|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
  |  Branch (537:13): [True: 0, False: 4]
  ------------------
  538|      0|            PyErr_SetString(PyExc_TypeError, "__abc_tpflags__ cannot be both Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING");
  539|      0|            return NULL;
  540|      0|        }
  541|      4|        _PyType_SetFlags((PyTypeObject *)self, 0, val & COLLECTION_FLAGS);
  ------------------
  |  |  484|      4|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|      4|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|      4|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
  542|      4|    }
  543|      4|    Py_RETURN_NONE;
  ------------------
  |  |  628|      4|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  544|     76|}
_abc.c:compute_abstract_methods:
  363|     76|{
  364|     76|    int ret = -1;
  365|     76|    PyObject *abstracts = PyFrozenSet_New(NULL);
  366|     76|    if (abstracts == NULL) {
  ------------------
  |  Branch (366:9): [True: 0, False: 76]
  ------------------
  367|      0|        return -1;
  368|      0|    }
  369|       |
  370|     76|    PyObject *ns = NULL, *items = NULL, *bases = NULL;  // Py_XDECREF()ed on error.
  371|       |
  372|       |    /* Stage 1: direct abstract methods. */
  373|     76|    ns = PyObject_GetAttr(self, &_Py_ID(__dict__));
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|     76|    if (!ns) {
  ------------------
  |  Branch (374:9): [True: 0, False: 76]
  ------------------
  375|      0|        goto error;
  376|      0|    }
  377|       |
  378|       |    // We can't use PyDict_Next(ns) even when ns is dict because
  379|       |    // _PyObject_IsAbstract() can mutate ns.
  380|     76|    items = PyMapping_Items(ns);
  381|     76|    if (!items) {
  ------------------
  |  Branch (381:9): [True: 0, False: 76]
  ------------------
  382|      0|        goto error;
  383|      0|    }
  384|     76|    assert(PyList_Check(items));
  ------------------
  |  Branch (384:5): [True: 76, False: 0]
  ------------------
  385|    935|    for (Py_ssize_t pos = 0; pos < PyList_GET_SIZE(items); pos++) {
  ------------------
  |  |   38|    935|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    935|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    935|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (385:30): [True: 859, False: 76]
  ------------------
  386|    859|        PyObject *it = PySequence_Fast(
  387|    859|                PyList_GET_ITEM(items, pos),
  ------------------
  |  |   40|    859|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|    859|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (387:17): [True: 859, False: 0]
  ------------------
  388|      0|                "items() returned non-iterable");
  389|    859|        if (!it) {
  ------------------
  |  Branch (389:13): [True: 0, False: 859]
  ------------------
  390|      0|            goto error;
  391|      0|        }
  392|    859|        if (PySequence_Fast_GET_SIZE(it) != 2) {
  ------------------
  |  |   92|    859|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|    859|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    859|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 859]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|    859|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    859|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (392:13): [True: 0, False: 859]
  ------------------
  393|      0|            PyErr_SetString(PyExc_TypeError,
  394|      0|                            "items() returned item which size is not 2");
  395|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  396|      0|            goto error;
  397|      0|        }
  398|       |
  399|       |        // borrowed
  400|    859|        PyObject *key = PySequence_Fast_GET_ITEM(it, 0);
  ------------------
  |  |   97|    859|     (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   25|    859|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    859|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 859]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   29|    859|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|    859|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (400:25): [True: 0, False: 0]
  |  Branch (400:25): [True: 859, False: 0]
  ------------------
  401|    859|        PyObject *value = PySequence_Fast_GET_ITEM(it, 1);
  ------------------
  |  |   97|    859|     (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   25|    859|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    859|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 859]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   29|    859|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|    859|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (401:27): [True: 0, False: 0]
  |  Branch (401:27): [True: 859, False: 0]
  ------------------
  402|       |        // items or it may be cleared while accessing __abstractmethod__
  403|       |        // So we need to keep strong reference for key
  404|    859|        Py_INCREF(key);
  ------------------
  |  |  310|    859|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    859|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|    859|        int is_abstract = _PyObject_IsAbstract(value);
  406|    859|        if (is_abstract < 0 ||
  ------------------
  |  Branch (406:13): [True: 0, False: 859]
  ------------------
  407|    859|                (is_abstract && PySet_Add(abstracts, key) < 0)) {
  ------------------
  |  Branch (407:18): [True: 98, False: 761]
  |  Branch (407:33): [True: 0, False: 98]
  ------------------
  408|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  410|      0|            goto error;
  411|      0|        }
  412|    859|        Py_DECREF(key);
  ------------------
  |  |  430|    859|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    859|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|    859|        Py_DECREF(it);
  ------------------
  |  |  430|    859|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    859|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    859|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|    859|    }
  415|       |
  416|       |    /* Stage 2: inherited abstract methods. */
  417|     76|    bases = PyObject_GetAttr(self, &_Py_ID(__bases__));
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|     76|    if (!bases) {
  ------------------
  |  Branch (418:9): [True: 0, False: 76]
  ------------------
  419|      0|        goto error;
  420|      0|    }
  421|     76|    if (!PyTuple_Check(bases)) {
  ------------------
  |  |   27|     76|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     76|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (421:9): [True: 0, False: 76]
  ------------------
  422|      0|        PyErr_SetString(PyExc_TypeError, "__bases__ is not tuple");
  423|      0|        goto error;
  424|      0|    }
  425|       |
  426|    167|    for (Py_ssize_t pos = 0; pos < PyTuple_GET_SIZE(bases); pos++) {
  ------------------
  |  |   27|    167|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (426:30): [True: 91, False: 76]
  ------------------
  427|     91|        PyObject *item = PyTuple_GET_ITEM(bases, pos);  // borrowed
  ------------------
  |  |   29|     91|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     91|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     91|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (427:26): [True: 91, False: 0]
  ------------------
  428|      0|        PyObject *base_abstracts, *iter;
  429|       |
  430|     91|        if (PyObject_GetOptionalAttr(item, &_Py_ID(__abstractmethods__),
  ------------------
  |  |  936|     91|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     91|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     91|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (430:13): [True: 0, False: 91]
  ------------------
  431|     91|                                 &base_abstracts) < 0) {
  432|      0|            goto error;
  433|      0|        }
  434|     91|        if (base_abstracts == NULL) {
  ------------------
  |  Branch (434:13): [True: 25, False: 66]
  ------------------
  435|     25|            continue;
  436|     25|        }
  437|     66|        if (!(iter = PyObject_GetIter(base_abstracts))) {
  ------------------
  |  Branch (437:13): [True: 0, False: 66]
  ------------------
  438|      0|            Py_DECREF(base_abstracts);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|      0|            goto error;
  440|      0|        }
  441|     66|        Py_DECREF(base_abstracts);
  ------------------
  |  |  430|     66|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     66|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|     66|        PyObject *key, *value;
  443|    236|        while ((key = PyIter_Next(iter))) {
  ------------------
  |  Branch (443:16): [True: 170, False: 66]
  ------------------
  444|    170|            if (PyObject_GetOptionalAttr(self, key, &value) < 0) {
  ------------------
  |  Branch (444:17): [True: 0, False: 170]
  ------------------
  445|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  446|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      0|                goto error;
  448|      0|            }
  449|    170|            if (value == NULL) {
  ------------------
  |  Branch (449:17): [True: 0, False: 170]
  ------------------
  450|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|      0|                continue;
  452|      0|            }
  453|       |
  454|    170|            int is_abstract = _PyObject_IsAbstract(value);
  455|    170|            Py_DECREF(value);
  ------------------
  |  |  430|    170|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    170|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    170|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  456|    170|            if (is_abstract < 0 ||
  ------------------
  |  Branch (456:17): [True: 0, False: 170]
  ------------------
  457|    170|                    (is_abstract && PySet_Add(abstracts, key) < 0))
  ------------------
  |  Branch (457:22): [True: 98, False: 72]
  |  Branch (457:37): [True: 0, False: 98]
  ------------------
  458|      0|            {
  459|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|      0|                goto error;
  462|      0|            }
  463|    170|            Py_DECREF(key);
  ------------------
  |  |  430|    170|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    170|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    170|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|    170|        }
  465|     66|        Py_DECREF(iter);
  ------------------
  |  |  430|     66|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     66|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  466|     66|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (466:13): [True: 0, False: 66]
  ------------------
  467|      0|            goto error;
  468|      0|        }
  469|     66|    }
  470|       |
  471|     76|    if (PyObject_SetAttr(self, &_Py_ID(__abstractmethods__), abstracts) < 0) {
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (471:9): [True: 0, False: 76]
  ------------------
  472|      0|        goto error;
  473|      0|    }
  474|       |
  475|     76|    ret = 0;
  476|     76|error:
  477|     76|    Py_DECREF(abstracts);
  ------------------
  |  |  430|     76|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|     76|    Py_XDECREF(ns);
  ------------------
  |  |  524|     76|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|     76|    Py_XDECREF(items);
  ------------------
  |  |  524|     76|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|     76|    Py_XDECREF(bases);
  ------------------
  |  |  524|     76|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|     76|    return ret;
  482|     76|}
_abc.c:abc_data_new:
  125|     76|{
  126|     76|    _abc_data *self = (_abc_data *) type->tp_alloc(type, 0);
  127|     76|    _abcmodule_state *state = NULL;
  128|     76|    if (self == NULL) {
  ------------------
  |  Branch (128:9): [True: 0, False: 76]
  ------------------
  129|      0|        return NULL;
  130|      0|    }
  131|       |
  132|     76|    state = _PyType_GetModuleState(type);
  133|     76|    if (state == NULL) {
  ------------------
  |  Branch (133:9): [True: 0, False: 76]
  ------------------
  134|      0|        Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|      0|        return NULL;
  136|      0|    }
  137|       |
  138|     76|    self->_abc_registry = NULL;
  139|     76|    self->_abc_cache = NULL;
  140|       |    self->_abc_negative_cache = NULL;
  141|     76|    self->_abc_negative_cache_version = get_invalidation_counter(state);
  142|     76|    return (PyObject *) self;
  143|     76|}
_abc.c:_get_impl:
  166|    140|{
  167|    140|    _abcmodule_state *state = get_abc_state(module);
  168|    140|    PyObject *impl = PyObject_GetAttr(self, &_Py_ID(_abc_impl));
  ------------------
  |  |  936|    140|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    140|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    140|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|    140|    if (impl == NULL) {
  ------------------
  |  Branch (169:9): [True: 0, False: 140]
  ------------------
  170|      0|        return NULL;
  171|      0|    }
  172|    140|    if (!Py_IS_TYPE(impl, state->_abc_data_type)) {
  ------------------
  |  |  215|    140|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    140|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    140|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (172:9): [True: 0, False: 140]
  ------------------
  173|      0|        PyErr_SetString(PyExc_TypeError, "_abc_impl is set to a wrong type");
  174|      0|        Py_DECREF(impl);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|      0|        return NULL;
  176|      0|    }
  177|    140|    return (_abc_data *)impl;
  178|    140|}
_abc.c:get_cache_version:
   74|     90|{
   75|       |#ifdef Py_GIL_DISABLED
   76|       |    return _Py_atomic_load_uint64(&impl->_abc_negative_cache_version);
   77|       |#else
   78|     90|    return impl->_abc_negative_cache_version;
   79|     90|#endif
   80|     90|}
_abc.c:_abc__abc_register_impl:
  560|     82|{
  561|     82|    if (!PyType_Check(subclass)) {
  ------------------
  |  |  766|     82|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (561:9): [True: 0, False: 82]
  ------------------
  562|      0|        PyErr_SetString(PyExc_TypeError, "Can only register classes");
  563|      0|        return NULL;
  564|      0|    }
  565|     82|    int result = PyObject_IsSubclass(subclass, self);
  566|     82|    if (result > 0) {
  ------------------
  |  Branch (566:9): [True: 32, False: 50]
  ------------------
  567|     32|        return Py_NewRef(subclass);  /* Already a subclass. */
  ------------------
  |  |  550|     32|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|     32|    }
  569|     50|    if (result < 0) {
  ------------------
  |  Branch (569:9): [True: 0, False: 50]
  ------------------
  570|      0|        return NULL;
  571|      0|    }
  572|       |    /* Subtle: test for cycles *after* testing for "already a subclass";
  573|       |       this means we allow X.register(X) and interpret it as a no-op. */
  574|     50|    result = PyObject_IsSubclass(self, subclass);
  575|     50|    if (result > 0) {
  ------------------
  |  Branch (575:9): [True: 0, False: 50]
  ------------------
  576|       |        /* This would create a cycle, which is bad for the algorithm below. */
  577|      0|        PyErr_SetString(PyExc_RuntimeError, "Refusing to create an inheritance cycle");
  578|      0|        return NULL;
  579|      0|    }
  580|     50|    if (result < 0) {
  ------------------
  |  Branch (580:9): [True: 0, False: 50]
  ------------------
  581|      0|        return NULL;
  582|      0|    }
  583|     50|    _abc_data *impl = _get_impl(module, self);
  584|     50|    if (impl == NULL) {
  ------------------
  |  Branch (584:9): [True: 0, False: 50]
  ------------------
  585|      0|        return NULL;
  586|      0|    }
  587|     50|    if (_add_to_weak_set(impl, &impl->_abc_registry, subclass) < 0) {
  ------------------
  |  Branch (587:9): [True: 0, False: 50]
  ------------------
  588|      0|        Py_DECREF(impl);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  589|      0|        return NULL;
  590|      0|    }
  591|     50|    Py_DECREF(impl);
  ------------------
  |  |  430|     50|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  592|       |
  593|       |    /* Invalidate negative cache */
  594|     50|    increment_invalidation_counter(get_abc_state(module));
  595|       |
  596|       |    /* Set Py_TPFLAGS_SEQUENCE or Py_TPFLAGS_MAPPING flag */
  597|     50|    if (PyType_Check(self)) {
  ------------------
  |  |  766|     50|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 50, False: 0]
  |  |  ------------------
  ------------------
  598|     50|        unsigned long collection_flag =
  599|     50|            PyType_GetFlags((PyTypeObject *)self) & COLLECTION_FLAGS;
  ------------------
  |  |  484|     50|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|     50|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|     50|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
  600|     50|        if (collection_flag) {
  ------------------
  |  Branch (600:13): [True: 28, False: 22]
  ------------------
  601|     28|            _PyType_SetFlagsRecursive((PyTypeObject *)subclass,
  602|     28|                                      COLLECTION_FLAGS,
  ------------------
  |  |  484|     28|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|     28|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|     28|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
  603|     28|                                      collection_flag);
  604|     28|        }
  605|     50|    }
  606|     50|    return Py_NewRef(subclass);
  ------------------
  |  |  550|     50|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|     50|}
_abc.c:_add_to_weak_set:
  224|    140|{
  225|    140|    PyObject *set;
  226|    140|    Py_BEGIN_CRITICAL_SECTION(impl);
  ------------------
  |  |   51|    140|    {
  ------------------
  227|    140|    set = *pset;
  228|    140|    if (set == NULL) {
  ------------------
  |  Branch (228:9): [True: 66, False: 74]
  ------------------
  229|     66|        set = *pset = PySet_New(NULL);
  230|     66|    }
  231|    140|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    140|    }
  ------------------
  232|    140|    if (set == NULL) {
  ------------------
  |  Branch (232:9): [True: 0, False: 140]
  ------------------
  233|      0|        return -1;
  234|      0|    }
  235|       |
  236|    140|    PyObject *ref, *wr;
  237|    140|    PyObject *destroy_cb;
  238|    140|    wr = PyWeakref_NewRef(set, NULL);
  239|    140|    if (wr == NULL) {
  ------------------
  |  Branch (239:9): [True: 0, False: 140]
  ------------------
  240|      0|        return -1;
  241|      0|    }
  242|    140|    destroy_cb = PyCFunction_NewEx(&_destroy_def, wr, NULL);
  ------------------
  |  |   87|    140|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
  243|    140|    if (destroy_cb == NULL) {
  ------------------
  |  Branch (243:9): [True: 0, False: 140]
  ------------------
  244|      0|        Py_DECREF(wr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|      0|        return -1;
  246|      0|    }
  247|    140|    ref = PyWeakref_NewRef(obj, destroy_cb);
  248|    140|    Py_DECREF(destroy_cb);
  ------------------
  |  |  430|    140|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    140|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    140|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|    140|    if (ref == NULL) {
  ------------------
  |  Branch (249:9): [True: 0, False: 140]
  ------------------
  250|      0|        Py_DECREF(wr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|      0|        return -1;
  252|      0|    }
  253|    140|    int ret = PySet_Add(set, ref);
  254|    140|    Py_DECREF(wr);
  ------------------
  |  |  430|    140|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    140|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    140|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    140|    Py_DECREF(ref);
  ------------------
  |  |  430|    140|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    140|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    140|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|    140|    return ret;
  257|    140|}
_abc.c:increment_invalidation_counter:
   47|     50|{
   48|       |#ifdef Py_GIL_DISABLED
   49|       |    _Py_atomic_add_uint64(&state->abc_invalidation_counter, 1);
   50|       |#else
   51|     50|    state->abc_invalidation_counter++;
   52|     50|#endif
   53|     50|}
_abc.c:_in_weak_set:
  182|    204|{
  183|    204|    PyObject *set;
  184|    204|    Py_BEGIN_CRITICAL_SECTION(impl);
  ------------------
  |  |   51|    204|    {
  ------------------
  185|    204|    set = *pset;
  186|    204|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    204|    }
  ------------------
  187|    204|    if (set == NULL || PySet_GET_SIZE(set) == 0) {
  ------------------
  |  |   71|     51|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (187:9): [True: 153, False: 51]
  |  Branch (187:24): [True: 0, False: 51]
  ------------------
  188|    153|        return 0;
  189|    153|    }
  190|     51|    PyObject *ref = PyWeakref_NewRef(obj, NULL);
  191|     51|    if (ref == NULL) {
  ------------------
  |  Branch (191:9): [True: 0, False: 51]
  ------------------
  192|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (192:13): [True: 0, False: 0]
  ------------------
  193|      0|            PyErr_Clear();
  194|      0|            return 0;
  195|      0|        }
  196|      0|        return -1;
  197|      0|    }
  198|     51|    int res = PySet_Contains(set, ref);
  199|     51|    Py_DECREF(ref);
  ------------------
  |  |  430|     51|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|     51|    return res;
  201|     51|}
_abc.c:_abc__abc_subclasscheck_impl:
  716|     90|{
  717|     90|    if (!PyType_Check(subclass)) {
  ------------------
  |  |  766|     90|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (717:9): [True: 0, False: 90]
  ------------------
  718|      0|        PyErr_SetString(PyExc_TypeError, "issubclass() arg 1 must be a class");
  719|      0|        return NULL;
  720|      0|    }
  721|       |
  722|     90|    PyObject *ok, *subclasses = NULL, *result = NULL;
  723|     90|    _abcmodule_state *state = NULL;
  724|     90|    Py_ssize_t pos;
  725|     90|    int incache;
  726|     90|    _abc_data *impl = _get_impl(module, self);
  727|     90|    if (impl == NULL) {
  ------------------
  |  Branch (727:9): [True: 0, False: 90]
  ------------------
  728|      0|        return NULL;
  729|      0|    }
  730|       |
  731|       |    /* 1. Check cache. */
  732|     90|    incache = _in_weak_set(impl, &impl->_abc_cache, subclass);
  733|     90|    if (incache < 0) {
  ------------------
  |  Branch (733:9): [True: 0, False: 90]
  ------------------
  734|      0|        goto end;
  735|      0|    }
  736|     90|    if (incache > 0) {
  ------------------
  |  Branch (736:9): [True: 0, False: 90]
  ------------------
  737|      0|        result = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|      0|        goto end;
  739|      0|    }
  740|       |
  741|     90|    state = get_abc_state(module);
  742|       |    /* 2. Check negative cache; may have to invalidate. */
  743|     90|    uint64_t invalidation_counter = get_invalidation_counter(state);
  744|     90|    if (get_cache_version(impl) < invalidation_counter) {
  ------------------
  |  Branch (744:9): [True: 34, False: 56]
  ------------------
  745|       |        /* Invalidate the negative cache. */
  746|     34|        PyObject *negative_cache;
  747|     34|        Py_BEGIN_CRITICAL_SECTION(impl);
  ------------------
  |  |   51|     34|    {
  ------------------
  748|     34|        negative_cache = impl->_abc_negative_cache;
  749|     34|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     34|    }
  ------------------
  750|     34|        if (negative_cache != NULL && PySet_Clear(negative_cache) < 0) {
  ------------------
  |  Branch (750:13): [True: 27, False: 7]
  |  Branch (750:39): [True: 0, False: 27]
  ------------------
  751|      0|            goto end;
  752|      0|        }
  753|     34|        set_cache_version(impl, invalidation_counter);
  754|     34|    }
  755|     56|    else {
  756|     56|        incache = _in_weak_set(impl, &impl->_abc_negative_cache, subclass);
  757|     56|        if (incache < 0) {
  ------------------
  |  Branch (757:13): [True: 0, False: 56]
  ------------------
  758|      0|            goto end;
  759|      0|        }
  760|     56|        if (incache > 0) {
  ------------------
  |  Branch (760:13): [True: 0, False: 56]
  ------------------
  761|      0|            result = Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|      0|            goto end;
  763|      0|        }
  764|     56|    }
  765|       |
  766|       |    /* 3. Check the subclass hook. */
  767|     90|    ok = PyObject_CallMethodOneArg(
  768|     90|            (PyObject *)self, &_Py_ID(__subclasshook__), subclass);
  ------------------
  |  |  936|     90|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     90|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     90|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  769|     90|    if (ok == NULL) {
  ------------------
  |  Branch (769:9): [True: 0, False: 90]
  ------------------
  770|      0|        goto end;
  771|      0|    }
  772|     90|    if (ok == Py_True) {
  ------------------
  |  |   26|     90|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (772:9): [True: 32, False: 58]
  ------------------
  773|     32|        Py_DECREF(ok);
  ------------------
  |  |  430|     32|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  774|     32|        if (_add_to_weak_set(impl, &impl->_abc_cache, subclass) < 0) {
  ------------------
  |  Branch (774:13): [True: 0, False: 32]
  ------------------
  775|      0|            goto end;
  776|      0|        }
  777|     32|        result = Py_True;
  ------------------
  |  |   26|     32|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  778|     32|        goto end;
  779|     32|    }
  780|     58|    if (ok == Py_False) {
  ------------------
  |  |   25|     58|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|     58|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     58|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (780:9): [True: 0, False: 58]
  ------------------
  781|      0|        Py_DECREF(ok);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  782|      0|        if (_add_to_weak_set(impl, &impl->_abc_negative_cache, subclass) < 0) {
  ------------------
  |  Branch (782:13): [True: 0, False: 0]
  ------------------
  783|      0|            goto end;
  784|      0|        }
  785|      0|        result = Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  786|      0|        goto end;
  787|      0|    }
  788|     58|    if (ok != Py_NotImplemented) {
  ------------------
  |  |  640|     58|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (788:9): [True: 0, False: 58]
  ------------------
  789|      0|        Py_DECREF(ok);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  790|      0|        PyErr_SetString(PyExc_AssertionError, "__subclasshook__ must return either"
  791|      0|                                              " False, True, or NotImplemented");
  792|      0|        goto end;
  793|      0|    }
  794|     58|    Py_DECREF(ok);
  ------------------
  |  |  430|     58|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     58|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     58|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|       |
  796|       |    /* 4. Check if it's a direct subclass. */
  797|     58|    if (PyType_IsSubtype((PyTypeObject *)subclass, (PyTypeObject *)self)) {
  ------------------
  |  Branch (797:9): [True: 0, False: 58]
  ------------------
  798|      0|        if (_add_to_weak_set(impl, &impl->_abc_cache, subclass) < 0) {
  ------------------
  |  Branch (798:13): [True: 0, False: 0]
  ------------------
  799|      0|            goto end;
  800|      0|        }
  801|      0|        result = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|      0|        goto end;
  803|      0|    }
  804|       |
  805|       |    /* 5. Check if it's a subclass of a registered class (recursive). */
  806|     58|    if (subclasscheck_check_registry(impl, subclass, &result)) {
  ------------------
  |  Branch (806:9): [True: 0, False: 58]
  ------------------
  807|       |        // Exception occurred or result is set.
  808|      0|        goto end;
  809|      0|    }
  810|       |
  811|       |    /* 6. Check if it's a subclass of a subclass (recursive). */
  812|     58|    subclasses = PyObject_CallMethod(self, "__subclasses__", NULL);
  813|     58|    if (subclasses == NULL) {
  ------------------
  |  Branch (813:9): [True: 0, False: 58]
  ------------------
  814|      0|        goto end;
  815|      0|    }
  816|     58|    if (!PyList_Check(subclasses)) {
  ------------------
  |  |   25|     58|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     58|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (816:9): [True: 0, False: 58]
  ------------------
  817|      0|        PyErr_SetString(PyExc_TypeError, "__subclasses__() must return a list");
  818|      0|        goto end;
  819|      0|    }
  820|     66|    for (pos = 0; pos < PyList_GET_SIZE(subclasses); pos++) {
  ------------------
  |  |   38|     66|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     66|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (820:19): [True: 8, False: 58]
  ------------------
  821|      8|        PyObject *scls = PyList_GetItemRef(subclasses, pos);
  822|      8|        if (scls == NULL) {
  ------------------
  |  Branch (822:13): [True: 0, False: 8]
  ------------------
  823|      0|            goto end;
  824|      0|        }
  825|      8|        int r = PyObject_IsSubclass(subclass, scls);
  826|      8|        Py_DECREF(scls);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  827|      8|        if (r > 0) {
  ------------------
  |  Branch (827:13): [True: 0, False: 8]
  ------------------
  828|      0|            if (_add_to_weak_set(impl, &impl->_abc_cache, subclass) < 0) {
  ------------------
  |  Branch (828:17): [True: 0, False: 0]
  ------------------
  829|      0|                goto end;
  830|      0|            }
  831|      0|            result = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  832|      0|            goto end;
  833|      0|        }
  834|      8|        if (r < 0) {
  ------------------
  |  Branch (834:13): [True: 0, False: 8]
  ------------------
  835|      0|            goto end;
  836|      0|        }
  837|      8|    }
  838|       |
  839|       |    /* No dice; update negative cache. */
  840|     58|    if (_add_to_weak_set(impl, &impl->_abc_negative_cache, subclass) < 0) {
  ------------------
  |  Branch (840:9): [True: 0, False: 58]
  ------------------
  841|      0|        goto end;
  842|      0|    }
  843|     58|    result = Py_False;
  ------------------
  |  |   25|     58|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|     58|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     58|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  844|       |
  845|     90|end:
  846|     90|    Py_DECREF(impl);
  ------------------
  |  |  430|     90|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  847|     90|    Py_XDECREF(subclasses);
  ------------------
  |  |  524|     90|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  848|     90|    return Py_XNewRef(result);
  ------------------
  |  |  551|     90|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|     58|}
_abc.c:set_cache_version:
   84|     34|{
   85|       |#ifdef Py_GIL_DISABLED
   86|       |    _Py_atomic_store_uint64(&impl->_abc_negative_cache_version, version);
   87|       |#else
   88|     34|    impl->_abc_negative_cache_version = version;
   89|     34|#endif
   90|     34|}
_abc.c:subclasscheck_check_registry:
  855|     58|{
  856|       |    // Fast path: check subclass is in weakref directly.
  857|     58|    int ret = _in_weak_set(impl, &impl->_abc_registry, subclass);
  858|     58|    if (ret < 0) {
  ------------------
  |  Branch (858:9): [True: 0, False: 58]
  ------------------
  859|      0|        *result = NULL;
  860|      0|        return -1;
  861|      0|    }
  862|     58|    if (ret > 0) {
  ------------------
  |  Branch (862:9): [True: 0, False: 58]
  ------------------
  863|      0|        *result = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|      0|        return 1;
  865|      0|    }
  866|       |
  867|     58|    PyObject *registry_shared;
  868|     58|    Py_BEGIN_CRITICAL_SECTION(impl);
  ------------------
  |  |   51|     58|    {
  ------------------
  869|     58|    registry_shared = impl->_abc_registry;
  870|     58|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     58|    }
  ------------------
  871|     58|    if (registry_shared == NULL) {
  ------------------
  |  Branch (871:9): [True: 31, False: 27]
  ------------------
  872|     31|        return 0;
  873|     31|    }
  874|       |
  875|       |    // Make a local copy of the registry to protect against concurrent
  876|       |    // modifications of _abc_registry.
  877|     27|    PyObject *registry = PyFrozenSet_New(registry_shared);
  878|     27|    if (registry == NULL) {
  ------------------
  |  Branch (878:9): [True: 0, False: 27]
  ------------------
  879|      0|        return -1;
  880|      0|    }
  881|     27|    PyObject *key;
  882|     27|    Py_ssize_t pos = 0;
  883|     27|    Py_hash_t hash;
  884|       |
  885|     77|    while (_PySet_NextEntry(registry, &pos, &key, &hash)) {
  ------------------
  |  Branch (885:12): [True: 50, False: 27]
  ------------------
  886|     50|        PyObject *rkey;
  887|     50|        if (PyWeakref_GetRef(key, &rkey) < 0) {
  ------------------
  |  Branch (887:13): [True: 0, False: 50]
  ------------------
  888|       |            // Someone inject non-weakref type in the registry.
  889|      0|            ret = -1;
  890|      0|            break;
  891|      0|        }
  892|       |
  893|     50|        if (rkey == NULL) {
  ------------------
  |  Branch (893:13): [True: 0, False: 50]
  ------------------
  894|      0|            continue;
  895|      0|        }
  896|     50|        int r = PyObject_IsSubclass(subclass, rkey);
  897|     50|        Py_DECREF(rkey);
  ------------------
  |  |  430|     50|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  898|     50|        if (r < 0) {
  ------------------
  |  Branch (898:13): [True: 0, False: 50]
  ------------------
  899|      0|            ret = -1;
  900|      0|            break;
  901|      0|        }
  902|     50|        if (r > 0) {
  ------------------
  |  Branch (902:13): [True: 0, False: 50]
  ------------------
  903|      0|            if (_add_to_weak_set(impl, &impl->_abc_cache, subclass) < 0) {
  ------------------
  |  Branch (903:17): [True: 0, False: 0]
  ------------------
  904|      0|                ret = -1;
  905|      0|                break;
  906|      0|            }
  907|      0|            *result = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|      0|            ret = 1;
  909|      0|            break;
  910|      0|        }
  911|     50|    }
  912|       |
  913|     27|    Py_DECREF(registry);
  ------------------
  |  |  430|     27|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     27|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|     27|    return ret;
  915|     27|}
_abc.c:_abcmodule_exec:
  949|      2|{
  950|      2|    _abcmodule_state *state = get_abc_state(module);
  951|      2|    state->abc_invalidation_counter = 0;
  952|      2|    state->_abc_data_type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &_abc_data_type_spec, NULL);
  953|      2|    if (state->_abc_data_type == NULL) {
  ------------------
  |  Branch (953:9): [True: 0, False: 2]
  ------------------
  954|      0|        return -1;
  955|      0|    }
  956|       |
  957|      2|    return 0;
  958|      2|}
_abc.c:abc_data_traverse:
   94|    880|{
   95|    880|    _abc_data *self = _abc_data_CAST(op);
  ------------------
  |  |   70|    880|#define _abc_data_CAST(op)  ((_abc_data *)(op))
  ------------------
   96|    880|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|    880|    do {                                                                \
  |  |  195|    880|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 880, False: 0]
  |  |  ------------------
  |  |  196|    880|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    880|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    880|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    880|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 880]
  |  |  ------------------
  |  |  198|    880|                return vret;                                            \
  |  |  199|    880|        }                                                               \
  |  |  200|    880|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 880]
  |  |  ------------------
  ------------------
   97|    880|    Py_VISIT(self->_abc_registry);
  ------------------
  |  |  194|    880|    do {                                                                \
  |  |  195|    880|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 310, False: 570]
  |  |  ------------------
  |  |  196|    310|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    310|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    310|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    310|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 310]
  |  |  ------------------
  |  |  198|    310|                return vret;                                            \
  |  |  199|    310|        }                                                               \
  |  |  200|    880|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 880]
  |  |  ------------------
  ------------------
   98|    880|    Py_VISIT(self->_abc_cache);
  ------------------
  |  |  194|    880|    do {                                                                \
  |  |  195|    880|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 80, False: 800]
  |  |  ------------------
  |  |  196|     80|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     80|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     80|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 80]
  |  |  ------------------
  |  |  198|     80|                return vret;                                            \
  |  |  199|     80|        }                                                               \
  |  |  200|    880|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 880]
  |  |  ------------------
  ------------------
   99|    880|    Py_VISIT(self->_abc_negative_cache);
  ------------------
  |  |  194|    880|    do {                                                                \
  |  |  195|    880|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 354, False: 526]
  |  |  ------------------
  |  |  196|    354|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    354|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    354|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    354|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 354]
  |  |  ------------------
  |  |  198|    354|                return vret;                                            \
  |  |  199|    354|        }                                                               \
  |  |  200|    880|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 880]
  |  |  ------------------
  ------------------
  100|    880|    return 0;
  101|    880|}
_abc.c:_abcmodule_traverse:
  962|     20|{
  963|     20|    _abcmodule_state *state = get_abc_state(module);
  964|     20|    Py_VISIT(state->_abc_data_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  965|     20|    return 0;
  966|     20|}

PyInit__codecs:
 1186|      2|{
 1187|      2|    return PyModuleDef_Init(&codecsmodule);
 1188|      2|}
_codecsmodule.c:_codecs_register:
   67|      4|{
   68|      4|    if (PyCodec_Register(search_function))
  ------------------
  |  Branch (68:9): [True: 0, False: 4]
  ------------------
   69|      0|        return NULL;
   70|       |
   71|      4|    Py_RETURN_NONE;
  ------------------
  |  |  628|      4|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
   72|      4|}
_codecsmodule.c:codec_tuple:
  170|  3.23k|{
  171|  3.23k|    if (decoded == NULL)
  ------------------
  |  Branch (171:9): [True: 460, False: 2.77k]
  ------------------
  172|    460|        return NULL;
  173|  2.77k|    return Py_BuildValue("Nn", decoded, len);
  174|  3.23k|}
_codecsmodule.c:_codecs_utf_8_decode_impl:
  285|      7|{
  286|      7|    Py_ssize_t consumed = data->len;
  287|      7|    PyObject *decoded = PyUnicode_DecodeUTF8Stateful(data->buf, data->len,
  288|      7|                                                     errors,
  289|      7|                                                     final ? NULL : &consumed);
  ------------------
  |  Branch (289:54): [True: 7, False: 0]
  ------------------
  290|      7|    return codec_tuple(decoded, consumed);
  291|      7|}
_codecsmodule.c:_codecs_utf_7_decode_impl:
  265|    170|{
  266|    170|    Py_ssize_t consumed = data->len;
  267|    170|    PyObject *decoded = PyUnicode_DecodeUTF7Stateful(data->buf, data->len,
  268|    170|                                                     errors,
  269|    170|                                                     final ? NULL : &consumed);
  ------------------
  |  Branch (269:54): [True: 170, False: 0]
  ------------------
  270|    170|    return codec_tuple(decoded, consumed);
  271|    170|}
_codecsmodule.c:_codecs_utf_16_decode_impl:
  305|     40|{
  306|     40|    int byteorder = 0;
  307|       |    /* This is overwritten unless final is true. */
  308|     40|    Py_ssize_t consumed = data->len;
  309|     40|    PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len,
  310|     40|                                                      errors, &byteorder,
  311|     40|                                                      final ? NULL : &consumed);
  ------------------
  |  Branch (311:55): [True: 40, False: 0]
  ------------------
  312|     40|    return codec_tuple(decoded, consumed);
  313|     40|}
_codecsmodule.c:_codecs_utf_16_le_decode_impl:
  327|      6|{
  328|      6|    int byteorder = -1;
  329|       |    /* This is overwritten unless final is true. */
  330|      6|    Py_ssize_t consumed = data->len;
  331|      6|    PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len,
  332|      6|                                                      errors, &byteorder,
  333|      6|                                                      final ? NULL : &consumed);
  ------------------
  |  Branch (333:55): [True: 6, False: 0]
  ------------------
  334|      6|    return codec_tuple(decoded, consumed);
  335|      6|}
_codecsmodule.c:_codecs_utf_16_be_decode_impl:
  349|     56|{
  350|     56|    int byteorder = 1;
  351|       |    /* This is overwritten unless final is true. */
  352|     56|    Py_ssize_t consumed = data->len;
  353|     56|    PyObject *decoded = PyUnicode_DecodeUTF16Stateful(data->buf, data->len,
  354|     56|                                                      errors, &byteorder,
  355|     56|                                                      final ? NULL : &consumed);
  ------------------
  |  Branch (355:55): [True: 56, False: 0]
  ------------------
  356|     56|    return codec_tuple(decoded, consumed);
  357|     56|}
_codecsmodule.c:_codecs_utf_32_decode_impl:
  403|      5|{
  404|      5|    int byteorder = 0;
  405|       |    /* This is overwritten unless final is true. */
  406|      5|    Py_ssize_t consumed = data->len;
  407|      5|    PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len,
  408|      5|                                                      errors, &byteorder,
  409|      5|                                                      final ? NULL : &consumed);
  ------------------
  |  Branch (409:55): [True: 5, False: 0]
  ------------------
  410|      5|    return codec_tuple(decoded, consumed);
  411|      5|}
_codecsmodule.c:_codecs_utf_32_le_decode_impl:
  425|      2|{
  426|      2|    int byteorder = -1;
  427|       |    /* This is overwritten unless final is true. */
  428|      2|    Py_ssize_t consumed = data->len;
  429|      2|    PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len,
  430|      2|                                                      errors, &byteorder,
  431|      2|                                                      final ? NULL : &consumed);
  ------------------
  |  Branch (431:55): [True: 2, False: 0]
  ------------------
  432|      2|    return codec_tuple(decoded, consumed);
  433|      2|}
_codecsmodule.c:_codecs_utf_32_be_decode_impl:
  447|      1|{
  448|      1|    int byteorder = 1;
  449|       |    /* This is overwritten unless final is true. */
  450|      1|    Py_ssize_t consumed = data->len;
  451|      1|    PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len,
  452|      1|                                                      errors, &byteorder,
  453|      1|                                                      final ? NULL : &consumed);
  ------------------
  |  Branch (453:55): [True: 1, False: 0]
  ------------------
  454|      1|    return codec_tuple(decoded, consumed);
  455|      1|}
_codecsmodule.c:_codecs_latin_1_decode_impl:
  538|    894|{
  539|    894|    PyObject *decoded = PyUnicode_DecodeLatin1(data->buf, data->len, errors);
  540|    894|    return codec_tuple(decoded, data->len);
  541|    894|}
_codecsmodule.c:_codecs_ascii_decode_impl:
  554|      4|{
  555|      4|    PyObject *decoded = PyUnicode_DecodeASCII(data->buf, data->len, errors);
  556|      4|    return codec_tuple(decoded, data->len);
  557|      4|}
_codecsmodule.c:_codecs_charmap_decode_impl:
  571|  1.68k|{
  572|  1.68k|    PyObject *decoded;
  573|       |
  574|  1.68k|    if (mapping == Py_None)
  ------------------
  |  |  616|  1.68k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (574:9): [True: 0, False: 1.68k]
  ------------------
  575|      0|        mapping = NULL;
  576|       |
  577|  1.68k|    decoded = PyUnicode_DecodeCharmap(data->buf, data->len, mapping, errors);
  578|  1.68k|    return codec_tuple(decoded, data->len);
  579|  1.68k|}
_codecsmodule.c:_codecs_charmap_build_impl:
  925|     20|{
  926|     20|    return PyUnicode_BuildEncodingMap(map);
  927|     20|}
_codecsmodule.c:_codecs_iconv_encode_impl:
  994|    243|{
  995|    243|    return codec_tuple(_PyUnicode_EncodeIconv(encoding, str, errors),
  996|    243|                       PyUnicode_GET_LENGTH(str));
  ------------------
  |  |  299|    243|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    243|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    243|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|    243|}
_codecsmodule.c:_codecs_iconv_decode_impl:
  660|    122|{
  661|    122|    Py_ssize_t consumed = data->len;
  662|    122|    PyObject *decoded = _PyUnicode_DecodeIconv(encoding, data->buf, data->len,
  663|    122|                                               errors,
  664|    122|                                               final ? NULL : &consumed);
  ------------------
  |  Branch (664:48): [True: 122, False: 0]
  ------------------
  665|    122|    return codec_tuple(decoded, consumed);
  666|    122|}
_codecsmodule.c:_codecs_lookup_error_impl:
 1065|     12|{
 1066|     12|    return PyCodec_LookupError(name);
 1067|     12|}
_codecsmodule.c:_codecs__normalize_encoding_impl:
 1083|    366|{
 1084|    366|    Py_ssize_t len;
 1085|    366|    const char *cstr = PyUnicode_AsUTF8AndSize(encoding, &len);
 1086|    366|    if (cstr == NULL) {
  ------------------
  |  Branch (1086:9): [True: 0, False: 366]
  ------------------
 1087|      0|        return NULL;
 1088|      0|    }
 1089|       |
 1090|    366|    if (len > PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|    366|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1090:9): [True: 0, False: 366]
  ------------------
 1091|      0|        PyErr_SetString(PyExc_OverflowError, "encoding is too large");
 1092|      0|        return NULL;
 1093|      0|    }
 1094|       |
 1095|    366|    char *normalized = PyMem_Malloc(len + 1);
 1096|    366|    if (normalized == NULL) {
  ------------------
  |  Branch (1096:9): [True: 0, False: 366]
  ------------------
 1097|      0|        return PyErr_NoMemory();
 1098|      0|    }
 1099|       |
 1100|    366|    if (!_Py_normalize_encoding(cstr, normalized, len + 1, 0)) {
  ------------------
  |  Branch (1100:9): [True: 0, False: 366]
  ------------------
 1101|      0|        PyMem_Free(normalized);
 1102|      0|        return NULL;
 1103|      0|    }
 1104|       |
 1105|    366|    PyObject *result = PyUnicode_FromString(normalized);
 1106|    366|    PyMem_Free(normalized);
 1107|    366|    return result;
 1108|    366|}

PyInit__collections:
 2904|      1|{
 2905|      1|    return PyModuleDef_Init(&_collectionsmodule);
 2906|      1|}
_collectionsmodule.c:collections_exec:
 2865|      1|collections_exec(PyObject *module) {
 2866|      1|    collections_state *state = get_module_state(module);
 2867|      1|    ADD_TYPE(module, &deque_spec, state->deque_type, NULL);
  ------------------
  |  | 2853|      1|#define ADD_TYPE(MOD, SPEC, TYPE, BASE) do {                        \
  |  | 2854|      1|    TYPE = (PyTypeObject *)PyType_FromMetaclass(NULL, MOD, SPEC,    \
  |  | 2855|      1|                                                (PyObject *)BASE);  \
  |  | 2856|      1|    if (TYPE == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (2856:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2857|      0|        return -1;                                                  \
  |  | 2858|      0|    }                                                               \
  |  | 2859|      1|    if (PyModule_AddType(MOD, TYPE) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (2859:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2860|      0|        return -1;                                                  \
  |  | 2861|      0|    }                                                               \
  |  | 2862|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (2862:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2868|      1|    ADD_TYPE(module, &defdict_spec, state->defdict_type, &PyDict_Type);
  ------------------
  |  | 2853|      1|#define ADD_TYPE(MOD, SPEC, TYPE, BASE) do {                        \
  |  | 2854|      1|    TYPE = (PyTypeObject *)PyType_FromMetaclass(NULL, MOD, SPEC,    \
  |  | 2855|      1|                                                (PyObject *)BASE);  \
  |  | 2856|      1|    if (TYPE == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (2856:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2857|      0|        return -1;                                                  \
  |  | 2858|      0|    }                                                               \
  |  | 2859|      1|    if (PyModule_AddType(MOD, TYPE) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (2859:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2860|      0|        return -1;                                                  \
  |  | 2861|      0|    }                                                               \
  |  | 2862|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (2862:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2869|      1|    ADD_TYPE(module, &dequeiter_spec, state->dequeiter_type, NULL);
  ------------------
  |  | 2853|      1|#define ADD_TYPE(MOD, SPEC, TYPE, BASE) do {                        \
  |  | 2854|      1|    TYPE = (PyTypeObject *)PyType_FromMetaclass(NULL, MOD, SPEC,    \
  |  | 2855|      1|                                                (PyObject *)BASE);  \
  |  | 2856|      1|    if (TYPE == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (2856:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2857|      0|        return -1;                                                  \
  |  | 2858|      0|    }                                                               \
  |  | 2859|      1|    if (PyModule_AddType(MOD, TYPE) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (2859:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2860|      0|        return -1;                                                  \
  |  | 2861|      0|    }                                                               \
  |  | 2862|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (2862:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2870|      1|    ADD_TYPE(module, &dequereviter_spec, state->dequereviter_type, NULL);
  ------------------
  |  | 2853|      1|#define ADD_TYPE(MOD, SPEC, TYPE, BASE) do {                        \
  |  | 2854|      1|    TYPE = (PyTypeObject *)PyType_FromMetaclass(NULL, MOD, SPEC,    \
  |  | 2855|      1|                                                (PyObject *)BASE);  \
  |  | 2856|      1|    if (TYPE == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (2856:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2857|      0|        return -1;                                                  \
  |  | 2858|      0|    }                                                               \
  |  | 2859|      1|    if (PyModule_AddType(MOD, TYPE) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (2859:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2860|      0|        return -1;                                                  \
  |  | 2861|      0|    }                                                               \
  |  | 2862|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (2862:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2871|      1|    ADD_TYPE(module, &tuplegetter_spec, state->tuplegetter_type, NULL);
  ------------------
  |  | 2853|      1|#define ADD_TYPE(MOD, SPEC, TYPE, BASE) do {                        \
  |  | 2854|      1|    TYPE = (PyTypeObject *)PyType_FromMetaclass(NULL, MOD, SPEC,    \
  |  | 2855|      1|                                                (PyObject *)BASE);  \
  |  | 2856|      1|    if (TYPE == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (2856:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2857|      0|        return -1;                                                  \
  |  | 2858|      0|    }                                                               \
  |  | 2859|      1|    if (PyModule_AddType(MOD, TYPE) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (2859:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 2860|      0|        return -1;                                                  \
  |  | 2861|      0|    }                                                               \
  |  | 2862|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (2862:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2872|       |
 2873|      1|    if (PyModule_AddType(module, &PyODict_Type) < 0) {
  ------------------
  |  Branch (2873:9): [True: 0, False: 1]
  ------------------
 2874|      0|        return -1;
 2875|      0|    }
 2876|       |
 2877|      1|    return 0;
 2878|      1|}
_collectionsmodule.c:get_module_state:
   22|     19|{
   23|     19|    void *state = _PyModule_GetState(mod);
   24|     19|    assert(state != NULL);
  ------------------
  |  Branch (24:5): [True: 19, False: 0]
  ------------------
   25|     19|    return (collections_state *)state;
   26|     19|}
_collectionsmodule.c:defdict_traverse:
 2448|     14|{
 2449|     14|    defdictobject *self = defdictobject_CAST(op);
  ------------------
  |  | 2222|     14|#define defdictobject_CAST(op)  ((defdictobject *)(op))
  ------------------
 2450|     14|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|     14|    do {                                                                \
  |  |  195|     14|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 14, False: 0]
  |  |  ------------------
  |  |  196|     14|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     14|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 14]
  |  |  ------------------
  |  |  198|     14|                return vret;                                            \
  |  |  199|     14|        }                                                               \
  |  |  200|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 2451|     14|    Py_VISIT(self->default_factory);
  ------------------
  |  |  194|     14|    do {                                                                \
  |  |  195|     14|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 14, False: 0]
  |  |  ------------------
  |  |  196|     14|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     14|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 14]
  |  |  ------------------
  |  |  198|     14|                return vret;                                            \
  |  |  199|     14|        }                                                               \
  |  |  200|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 2452|     14|    return PyDict_Type.tp_traverse(op, visit, arg);
 2453|     14|}
_collectionsmodule.c:defdict_init:
 2465|      1|{
 2466|      1|    defdictobject *dd = defdictobject_CAST(self);
  ------------------
  |  | 2222|      1|#define defdictobject_CAST(op)  ((defdictobject *)(op))
  ------------------
 2467|      1|    PyObject *olddefault = dd->default_factory;
 2468|      1|    PyObject *newdefault = NULL;
 2469|      1|    PyObject *newargs;
 2470|      1|    int result;
 2471|      1|    if (args == NULL || !PyTuple_Check(args))
  ------------------
  |  |   27|      1|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      1|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2471:9): [True: 0, False: 1]
  |  Branch (2471:25): [True: 0, False: 1]
  ------------------
 2472|      0|        newargs = PyTuple_New(0);
 2473|      1|    else {
 2474|      1|        Py_ssize_t n = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      1|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2475|      1|        if (n > 0) {
  ------------------
  |  Branch (2475:13): [True: 1, False: 0]
  ------------------
 2476|      1|            newdefault = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|      1|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      1|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2476:26): [True: 1, False: 0]
  ------------------
 2477|      1|            if (!PyCallable_Check(newdefault) && newdefault != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2477:17): [True: 0, False: 1]
  |  Branch (2477:50): [True: 0, False: 0]
  ------------------
 2478|      0|                PyErr_SetString(PyExc_TypeError,
 2479|      0|                    "first argument must be callable or None");
 2480|      0|                return -1;
 2481|      0|            }
 2482|      1|        }
 2483|      1|        newargs = PySequence_GetSlice(args, 1, n);
 2484|      1|    }
 2485|      1|    if (newargs == NULL)
  ------------------
  |  Branch (2485:9): [True: 0, False: 1]
  ------------------
 2486|      0|        return -1;
 2487|      1|    dd->default_factory = Py_XNewRef(newdefault);
  ------------------
  |  |  551|      1|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2488|      1|    result = PyDict_Type.tp_init(self, newargs, kwds);
 2489|      1|    Py_DECREF(newargs);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2490|      1|    Py_XDECREF(olddefault);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2491|      1|    return result;
 2492|      1|}
_collectionsmodule.c:get_module_state_by_cls:
   30|     12|{
   31|     12|    void *state = _PyType_GetModuleState(cls);
   32|     12|    assert(state != NULL);
  ------------------
  |  Branch (32:5): [True: 12, False: 0]
  ------------------
   33|     12|    return (collections_state *)state;
   34|     12|}
_collectionsmodule.c:tuplegetter_traverse:
 2735|    204|{
 2736|    204|    _tuplegetterobject *tuplegetter = tuplegetterobject_CAST(self);
  ------------------
  |  | 2667|    204|#define tuplegetterobject_CAST(op)  ((_tuplegetterobject *)(op))
  ------------------
 2737|    204|    Py_VISIT(Py_TYPE(tuplegetter));
  ------------------
  |  |  194|    204|    do {                                                                \
  |  |  195|    204|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 204, False: 0]
  |  |  ------------------
  |  |  196|    204|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    204|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    204|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    204|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 204]
  |  |  ------------------
  |  |  198|    204|                return vret;                                            \
  |  |  199|    204|        }                                                               \
  |  |  200|    204|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 204]
  |  |  ------------------
  ------------------
 2738|    204|    Py_VISIT(tuplegetter->doc);
  ------------------
  |  |  194|    204|    do {                                                                \
  |  |  195|    204|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 204, False: 0]
  |  |  ------------------
  |  |  196|    204|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    204|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    204|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    204|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 204]
  |  |  ------------------
  |  |  198|    204|                return vret;                                            \
  |  |  199|    204|        }                                                               \
  |  |  200|    204|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 204]
  |  |  ------------------
  ------------------
 2739|    204|    return 0;
 2740|    204|}
_collectionsmodule.c:tuplegetter_new_impl:
 2681|     12|{
 2682|     12|    _tuplegetterobject* self;
 2683|     12|    self = (_tuplegetterobject *)type->tp_alloc(type, 0);
 2684|     12|    if (self == NULL) {
  ------------------
  |  Branch (2684:9): [True: 0, False: 12]
  ------------------
 2685|      0|        return NULL;
 2686|      0|    }
 2687|     12|    self->index = index;
 2688|     12|    self->doc = Py_NewRef(doc);
  ------------------
  |  |  550|     12|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2689|     12|    return (PyObject *)self;
 2690|     12|}
_collectionsmodule.c:collections_traverse:
 2814|     18|{
 2815|     18|    collections_state *state = get_module_state(mod);
 2816|     18|    Py_VISIT(state->deque_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2817|     18|    Py_VISIT(state->defdict_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2818|     18|    Py_VISIT(state->dequeiter_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2819|     18|    Py_VISIT(state->dequereviter_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2820|     18|    Py_VISIT(state->tuplegetter_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2821|     18|    return 0;
 2822|     18|}

_PyDateTime_InitTypes:
 7552|      2|{
 7553|       |    /* Bases classes must be initialized before subclasses,
 7554|       |     * so capi_types must have the types in the appropriate order. */
 7555|     14|    for (size_t i = 0; i < Py_ARRAY_LENGTH(capi_types); i++) {
  ------------------
  |  |  221|     14|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (7555:24): [True: 12, False: 2]
  ------------------
 7556|     12|        PyTypeObject *type = capi_types[i];
 7557|     12|        if (_PyStaticType_InitForExtension(interp, type) < 0) {
  ------------------
  |  Branch (7557:13): [True: 0, False: 12]
  ------------------
 7558|      0|            return _PyStatus_ERR("could not initialize static types");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 7559|      0|        }
 7560|     12|    }
 7561|       |
 7562|      2|#define DATETIME_ADD_MACRO(dict, c, value_expr)         \
 7563|      2|    do {                                                \
 7564|      2|        assert(!PyErr_Occurred());                      \
 7565|      2|        PyObject *value = (value_expr);                 \
 7566|      2|        if (value == NULL) {                            \
 7567|      2|            goto error;                                 \
 7568|      2|        }                                               \
 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
 7570|      2|            Py_DECREF(value);                           \
 7571|      2|            goto error;                                 \
 7572|      2|        }                                               \
 7573|      2|        Py_DECREF(value);                               \
 7574|      2|    } while(0)
 7575|       |
 7576|       |    /* timedelta values */
 7577|      2|    PyObject *d = _PyType_GetDict(&PyDateTime_DeltaType);
 7578|      2|    DATETIME_ADD_MACRO(d, "resolution", new_delta(0, 0, 1, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7578:5): [True: 2, False: 0]
  ------------------
 7579|      2|    DATETIME_ADD_MACRO(d, "min", new_delta(-MAX_DELTA_DAYS, 0, 0, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7579:5): [True: 2, False: 0]
  ------------------
 7580|      2|    DATETIME_ADD_MACRO(d, "max",
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7580:5): [True: 2, False: 0]
  ------------------
 7581|      2|                        new_delta(MAX_DELTA_DAYS, 24*3600-1, 1000000-1, 0));
 7582|       |
 7583|       |    /* date values */
 7584|      2|    d = _PyType_GetDict(&PyDateTime_DateType);
 7585|      2|    DATETIME_ADD_MACRO(d, "min", new_date(1, 1, 1));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7585:5): [True: 2, False: 0]
  ------------------
 7586|      2|    DATETIME_ADD_MACRO(d, "max", new_date(MAXYEAR, 12, 31));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7586:5): [True: 2, False: 0]
  ------------------
 7587|      2|    DATETIME_ADD_MACRO(d, "resolution", new_delta(1, 0, 0, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7587:5): [True: 2, False: 0]
  ------------------
 7588|       |
 7589|       |    /* time values */
 7590|      2|    d = _PyType_GetDict(&PyDateTime_TimeType);
 7591|      2|    DATETIME_ADD_MACRO(d, "min", new_time(0, 0, 0, 0, Py_None, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7591:5): [True: 2, False: 0]
  ------------------
 7592|      2|    DATETIME_ADD_MACRO(d, "max", new_time(23, 59, 59, 999999, Py_None, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7592:5): [True: 2, False: 0]
  ------------------
 7593|      2|    DATETIME_ADD_MACRO(d, "resolution", new_delta(0, 0, 1, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7593:5): [True: 2, False: 0]
  ------------------
 7594|       |
 7595|       |    /* datetime values */
 7596|      2|    d = _PyType_GetDict(&PyDateTime_DateTimeType);
 7597|      2|    DATETIME_ADD_MACRO(d, "min",
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7597:5): [True: 2, False: 0]
  ------------------
 7598|      2|                        new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None, 0));
 7599|      2|    DATETIME_ADD_MACRO(d, "max", new_datetime(MAXYEAR, 12, 31, 23, 59, 59,
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7599:5): [True: 2, False: 0]
  ------------------
 7600|      2|                                                999999, Py_None, 0));
 7601|      2|    DATETIME_ADD_MACRO(d, "resolution", new_delta(0, 0, 1, 0));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7601:5): [True: 2, False: 0]
  ------------------
 7602|       |
 7603|       |    /* timezone values */
 7604|      2|    d = _PyType_GetDict(&PyDateTime_TimeZoneType);
 7605|      2|    if (PyDict_SetItemString(d, "utc", (PyObject *)&utc_timezone) < 0) {
  ------------------
  |  Branch (7605:9): [True: 0, False: 2]
  ------------------
 7606|      0|        goto error;
 7607|      0|    }
 7608|       |
 7609|       |    /* bpo-37642: These attributes are rounded to the nearest minute for backwards
 7610|       |    * compatibility, even though the constructor will accept a wider range of
 7611|       |    * values. This may change in the future.*/
 7612|       |
 7613|       |    /* -23:59 */
 7614|      2|    DATETIME_ADD_MACRO(d, "min", create_timezone_from_delta(-1, 60, 0, 1));
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7614:5): [True: 2, False: 0]
  ------------------
 7615|       |
 7616|       |    /* +23:59 */
 7617|      2|    DATETIME_ADD_MACRO(
  ------------------
  |  | 7563|      2|    do {                                                \
  |  | 7564|      2|        assert(!PyErr_Occurred());                      \
  |  | 7565|      2|        PyObject *value = (value_expr);                 \
  |  | 7566|      2|        if (value == NULL) {                            \
  |  |  ------------------
  |  |  |  Branch (7566:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7567|      0|            goto error;                                 \
  |  | 7568|      0|        }                                               \
  |  | 7569|      2|        if (PyDict_SetItemString(dict, c, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (7569:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 7570|      0|            Py_DECREF(value);                           \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7571|      0|            goto error;                                 \
  |  | 7572|      0|        }                                               \
  |  | 7573|      2|        Py_DECREF(value);                               \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7574|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (7574:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (7617:5): [True: 2, False: 0]
  ------------------
 7618|      2|            d, "max", create_timezone_from_delta(0, (23 * 60 + 59) * 60, 0, 0));
 7619|       |
 7620|      2|#undef DATETIME_ADD_MACRO
 7621|       |
 7622|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 7623|       |
 7624|      0|error:
 7625|      0|    return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 7626|      2|}
_datetimemodule.c:days_in_month:
  443|      8|{
  444|      8|    assert(month >= 1);
  ------------------
  |  Branch (444:5): [True: 8, False: 0]
  ------------------
  445|      8|    assert(month <= 12);
  ------------------
  |  Branch (445:5): [True: 8, False: 0]
  ------------------
  446|      8|    if (month == 2 && is_leap(year))
  ------------------
  |  Branch (446:9): [True: 0, False: 8]
  |  Branch (446:23): [True: 0, False: 0]
  ------------------
  447|      0|        return 29;
  448|      8|    else
  449|      8|        return _days_in_month[month];
  450|      8|}
_datetimemodule.c:new_delta_ex:
 1389|     16|{
 1390|     16|    PyDateTime_Delta *self;
 1391|       |
 1392|     16|    if (normalize)
  ------------------
  |  Branch (1392:9): [True: 2, False: 14]
  ------------------
 1393|      2|        normalize_d_s_us(&days, &seconds, &microseconds);
 1394|     16|    assert(0 <= seconds && seconds < 24*3600);
  ------------------
  |  Branch (1394:5): [True: 16, False: 0]
  |  Branch (1394:5): [True: 16, False: 0]
  ------------------
 1395|     16|    assert(0 <= microseconds && microseconds < 1000000);
  ------------------
  |  Branch (1395:5): [True: 16, False: 0]
  |  Branch (1395:5): [True: 16, False: 0]
  ------------------
 1396|       |
 1397|     16|    if (check_delta_day_range(days) < 0)
  ------------------
  |  Branch (1397:9): [True: 0, False: 16]
  ------------------
 1398|      0|        return NULL;
 1399|       |
 1400|     16|    self = look_up_delta(days, seconds, microseconds, type);
 1401|     16|    if (self != NULL) {
  ------------------
  |  Branch (1401:9): [True: 0, False: 16]
  ------------------
 1402|      0|        return (PyObject *)self;
 1403|      0|    }
 1404|     16|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (1404:5): [True: 16, False: 0]
  ------------------
 1405|       |
 1406|     16|    self = (PyDateTime_Delta *) (type->tp_alloc(type, 0));
 1407|     16|    if (self != NULL) {
  ------------------
  |  Branch (1407:9): [True: 16, False: 0]
  ------------------
 1408|     16|        self->hashcode = -1;
 1409|     16|        SET_TD_DAYS(self, days);
  ------------------
  |  |  326|     16|#define SET_TD_DAYS(o, v)       ((o)->days = (v))
  ------------------
 1410|     16|        SET_TD_SECONDS(self, seconds);
  ------------------
  |  |  327|     16|#define SET_TD_SECONDS(o, v)    ((o)->seconds = (v))
  ------------------
 1411|     16|        SET_TD_MICROSECONDS(self, microseconds);
  ------------------
  |  |  328|     16|#define SET_TD_MICROSECONDS(o, v) ((o)->microseconds = (v))
  ------------------
 1412|     16|    }
 1413|     16|    return (PyObject *) self;
 1414|     16|}
_datetimemodule.c:normalize_d_s_us:
  748|      2|{
  749|      2|    if (*us < 0 || *us >= 1000000) {
  ------------------
  |  Branch (749:9): [True: 0, False: 2]
  |  Branch (749:20): [True: 0, False: 2]
  ------------------
  750|      0|        normalize_pair(s, us, 1000000);
  751|       |        /* |s| can't be bigger than about
  752|       |         * |original s| + |original us|/1000000 now.
  753|       |         */
  754|       |
  755|      0|    }
  756|      2|    if (*s < 0 || *s >= 24*3600) {
  ------------------
  |  Branch (756:9): [True: 0, False: 2]
  |  Branch (756:19): [True: 0, False: 2]
  ------------------
  757|      0|        normalize_pair(d, s, 24*3600);
  758|       |        /* |d| can't be bigger than about
  759|       |         * |original d| +
  760|       |         * (|original s| + |original us|/1000000) / (24*3600) now.
  761|       |         */
  762|      0|    }
  763|      2|    assert(0 <= *s && *s < 24*3600);
  ------------------
  |  Branch (763:5): [True: 2, False: 0]
  |  Branch (763:5): [True: 2, False: 0]
  ------------------
  764|      2|    assert(0 <= *us && *us < 1000000);
  ------------------
  |  Branch (764:5): [True: 2, False: 0]
  |  Branch (764:5): [True: 2, False: 0]
  ------------------
  765|      2|}
_datetimemodule.c:check_delta_day_range:
  649|     16|{
  650|     16|    if (-MAX_DELTA_DAYS <= days && days <= MAX_DELTA_DAYS)
  ------------------
  |  |  278|     16|#define MAX_DELTA_DAYS 999999999
  ------------------
                  if (-MAX_DELTA_DAYS <= days && days <= MAX_DELTA_DAYS)
  ------------------
  |  |  278|     16|#define MAX_DELTA_DAYS 999999999
  ------------------
  |  Branch (650:9): [True: 16, False: 0]
  |  Branch (650:36): [True: 16, False: 0]
  ------------------
  651|     16|        return 0;
  652|      0|    PyErr_Format(PyExc_OverflowError,
  653|      0|                 "days=%d; must have magnitude <= %d",
  654|      0|                 days, MAX_DELTA_DAYS);
  ------------------
  |  |  278|      0|#define MAX_DELTA_DAYS 999999999
  ------------------
  655|      0|    return -1;
  656|     16|}
_datetimemodule.c:look_up_delta:
 3162|     16|{
 3163|     16|    if (days == 0 && seconds == 0 && microseconds == 0
  ------------------
  |  Branch (3163:9): [True: 8, False: 8]
  |  Branch (3163:22): [True: 6, False: 2]
  |  Branch (3163:38): [True: 0, False: 6]
  ------------------
 3164|      0|            && type == Py_TYPE(&zero_delta))
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3164:16): [True: 0, False: 0]
  ------------------
 3165|      0|    {
 3166|      0|        return &zero_delta;
 3167|      0|    }
 3168|     16|    return NULL;
 3169|     16|}
_datetimemodule.c:check_tzinfo_subclass:
 1493|      8|{
 1494|      8|    if (p == Py_None || PyTZInfo_Check(p))
  ------------------
  |  |  616|     16|#  define Py_None (&_Py_NoneStruct)
  ------------------
                  if (p == Py_None || PyTZInfo_Check(p))
  ------------------
  |  |  103|      0|#define PyTZInfo_Check(op) PyObject_TypeCheck(op, TZINFO_TYPE(NO_STATE))
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1494:9): [True: 8, False: 0]
  ------------------
 1495|      8|        return 0;
 1496|      0|    PyErr_Format(PyExc_TypeError,
 1497|      0|                 "tzinfo argument must be None or of a tzinfo subclass, "
 1498|      0|                 "not type '%s'",
 1499|      0|                 Py_TYPE(p)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1500|      0|    return -1;
 1501|      8|}
_datetimemodule.c:new_date_ex:
 1172|      4|{
 1173|      4|    PyDateTime_Date *self;
 1174|       |
 1175|      4|    if (check_date_args(year, month, day) < 0) {
  ------------------
  |  Branch (1175:9): [True: 0, False: 4]
  ------------------
 1176|      0|        return NULL;
 1177|      0|    }
 1178|       |
 1179|      4|    self = (PyDateTime_Date *)(type->tp_alloc(type, 0));
 1180|      4|    if (self != NULL)
  ------------------
  |  Branch (1180:9): [True: 4, False: 0]
  ------------------
 1181|      4|        set_date_fields(self, year, month, day);
 1182|      4|    return (PyObject *)self;
 1183|      4|}
_datetimemodule.c:check_date_args:
  663|      8|{
  664|       |
  665|      8|    if (year < MINYEAR || year > MAXYEAR) {
  ------------------
  |  |  269|     16|#define MINYEAR 1
  ------------------
                  if (year < MINYEAR || year > MAXYEAR) {
  ------------------
  |  |  270|      8|#define MAXYEAR 9999
  ------------------
  |  Branch (665:9): [True: 0, False: 8]
  |  Branch (665:27): [True: 0, False: 8]
  ------------------
  666|      0|        PyErr_Format(PyExc_ValueError,
  667|      0|                     "year must be in %d..%d, not %d", MINYEAR, MAXYEAR, year);
  ------------------
  |  |  269|      0|#define MINYEAR 1
  ------------------
                                   "year must be in %d..%d, not %d", MINYEAR, MAXYEAR, year);
  ------------------
  |  |  270|      0|#define MAXYEAR 9999
  ------------------
  668|      0|        return -1;
  669|      0|    }
  670|      8|    if (month < 1 || month > 12) {
  ------------------
  |  Branch (670:9): [True: 0, False: 8]
  |  Branch (670:22): [True: 0, False: 8]
  ------------------
  671|      0|        PyErr_Format(PyExc_ValueError,
  672|      0|                     "month must be in 1..12, not %d", month);
  673|      0|        return -1;
  674|      0|    }
  675|      8|    int dim = days_in_month(year, month);
  676|      8|    if (day < 1 || day > dim) {
  ------------------
  |  Branch (676:9): [True: 0, False: 8]
  |  Branch (676:20): [True: 0, False: 8]
  ------------------
  677|      0|        PyErr_Format(PyExc_ValueError,
  678|      0|                     "day %i must be in range 1..%d for month %i in year %i",
  679|      0|                     day, dim, month, year);
  680|      0|        return -1;
  681|      0|    }
  682|      8|    return 0;
  683|      8|}
_datetimemodule.c:set_date_fields:
  914|      8|{
  915|      8|    self->hashcode = -1;
  916|      8|    SET_YEAR(self, y);
  ------------------
  |  |  291|      8|#define SET_YEAR(o, v)          (((o)->data[0] = ((v) & 0xff00) >> 8), \
  |  |  292|      8|                 ((o)->data[1] = ((v) & 0x00ff)))
  ------------------
  917|      8|    SET_MONTH(self, m);
  ------------------
  |  |  293|      8|#define SET_MONTH(o, v)         (PyDateTime_GET_MONTH(o) = (v))
  |  |  ------------------
  |  |  |  |  124|      8|#define PyDateTime_GET_MONTH(o)    (((PyDateTime_Date*)(o))->data[2])
  |  |  ------------------
  ------------------
  918|      8|    SET_DAY(self, d);
  ------------------
  |  |  294|      8|#define SET_DAY(o, v)           (PyDateTime_GET_DAY(o) = (v))
  |  |  ------------------
  |  |  |  |  125|      8|#define PyDateTime_GET_DAY(o)      (((PyDateTime_Date*)(o))->data[3])
  |  |  ------------------
  ------------------
  919|      8|}
_datetimemodule.c:check_time_args:
  690|      8|{
  691|      8|    if (h < 0 || h > 23) {
  ------------------
  |  Branch (691:9): [True: 0, False: 8]
  |  Branch (691:18): [True: 0, False: 8]
  ------------------
  692|      0|        PyErr_Format(PyExc_ValueError, "hour must be in 0..23, not %i", h);
  693|      0|        return -1;
  694|      0|    }
  695|      8|    if (m < 0 || m > 59) {
  ------------------
  |  Branch (695:9): [True: 0, False: 8]
  |  Branch (695:18): [True: 0, False: 8]
  ------------------
  696|      0|        PyErr_Format(PyExc_ValueError, "minute must be in 0..59, not %i", m);
  697|      0|        return -1;
  698|      0|    }
  699|      8|    if (s < 0 || s > 59) {
  ------------------
  |  Branch (699:9): [True: 0, False: 8]
  |  Branch (699:18): [True: 0, False: 8]
  ------------------
  700|      0|        PyErr_Format(PyExc_ValueError, "second must be in 0..59, not %i", s);
  701|      0|        return -1;
  702|      0|    }
  703|      8|    if (us < 0 || us > 999999) {
  ------------------
  |  Branch (703:9): [True: 0, False: 8]
  |  Branch (703:19): [True: 0, False: 8]
  ------------------
  704|      0|        PyErr_Format(PyExc_ValueError,
  705|      0|                     "microsecond must be in 0..999999, not %i", us);
  706|      0|        return -1;
  707|      0|    }
  708|      8|    if (fold != 0 && fold != 1) {
  ------------------
  |  Branch (708:9): [True: 0, False: 8]
  |  Branch (708:22): [True: 0, False: 0]
  ------------------
  709|      0|        PyErr_Format(PyExc_ValueError,
  710|      0|                     "fold must be either 0 or 1, not %i", fold);
  711|      0|        return -1;
  712|      0|    }
  713|      8|    return 0;
  714|      8|}
_datetimemodule.c:create_timezone:
 1435|      4|{
 1436|      4|    PyDateTime_TimeZone *self;
 1437|      4|    PyTypeObject *type = TIMEZONE_TYPE(NO_STATE);
  ------------------
  |  |   83|      4|#define TIMEZONE_TYPE(st) &PyDateTime_TimeZoneType
  ------------------
 1438|       |
 1439|      4|    assert(offset != NULL);
  ------------------
  |  Branch (1439:5): [True: 4, False: 0]
  ------------------
 1440|      4|    assert(PyDelta_Check(offset));
  ------------------
  |  Branch (1440:5): [True: 4, False: 0]
  ------------------
 1441|      4|    assert(name == NULL || PyUnicode_Check(name));
  ------------------
  |  Branch (1441:5): [True: 4, False: 0]
  |  Branch (1441:5): [True: 0, False: 0]
  ------------------
 1442|       |
 1443|      4|    self = look_up_timezone(offset, name);
 1444|      4|    if (self != NULL) {
  ------------------
  |  Branch (1444:9): [True: 0, False: 4]
  ------------------
 1445|      0|        return (PyObject *)self;
 1446|      0|    }
 1447|      4|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (1447:5): [True: 4, False: 0]
  ------------------
 1448|       |
 1449|      4|    self = (PyDateTime_TimeZone *)(type->tp_alloc(type, 0));
 1450|      4|    if (self == NULL) {
  ------------------
  |  Branch (1450:9): [True: 0, False: 4]
  ------------------
 1451|      0|        return NULL;
 1452|      0|    }
 1453|      4|    self->offset = Py_NewRef(offset);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1454|      4|    self->name = Py_XNewRef(name);
  ------------------
  |  |  551|      4|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1455|      4|    return (PyObject *)self;
 1456|      4|}
_datetimemodule.c:look_up_timezone:
 4596|      4|{
 4597|      4|    if (offset == utc_timezone.offset && name == NULL) {
  ------------------
  |  Branch (4597:9): [True: 0, False: 4]
  |  Branch (4597:42): [True: 0, False: 0]
  ------------------
 4598|      0|        return (PyDateTime_TimeZone *)CONST_UTC(NO_STATE);
  ------------------
  |  |  119|      0|#define CONST_UTC(st) ((PyObject *)&utc_timezone)
  ------------------
 4599|      0|    }
 4600|      4|    return NULL;
 4601|      4|}
_datetimemodule.c:time_alloc:
  884|      4|{
  885|      4|    size_t size = aware ? sizeof(PyDateTime_Time) : sizeof(_PyDateTime_BaseTime);
  ------------------
  |  Branch (885:19): [True: 0, False: 4]
  ------------------
  886|      4|    PyObject *self = (PyObject *)PyObject_Malloc(size);
  887|      4|    if (self == NULL) {
  ------------------
  |  Branch (887:9): [True: 0, False: 4]
  ------------------
  888|      0|        return PyErr_NoMemory();
  889|      0|    }
  890|      4|    _PyObject_Init(self, type);
  891|      4|    return self;
  892|      4|}
_datetimemodule.c:new_time_ex2:
 1323|      4|{
 1324|      4|    PyDateTime_Time *self;
 1325|      4|    char aware = tzinfo != Py_None;
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1326|       |
 1327|      4|    if (check_time_args(hour, minute, second, usecond, fold) < 0) {
  ------------------
  |  Branch (1327:9): [True: 0, False: 4]
  ------------------
 1328|      0|        return NULL;
 1329|      0|    }
 1330|      4|    if (check_tzinfo_subclass(tzinfo) < 0) {
  ------------------
  |  Branch (1330:9): [True: 0, False: 4]
  ------------------
 1331|      0|        return NULL;
 1332|      0|    }
 1333|       |
 1334|      4|    self = (PyDateTime_Time *) (type->tp_alloc(type, aware));
 1335|      4|    if (self != NULL) {
  ------------------
  |  Branch (1335:9): [True: 4, False: 0]
  ------------------
 1336|      4|        self->hastzinfo = aware;
 1337|      4|        self->hashcode = -1;
 1338|      4|        TIME_SET_HOUR(self, hour);
  ------------------
  |  |  312|      4|#define TIME_SET_HOUR(o, v)     (PyDateTime_TIME_GET_HOUR(o) = (v))
  |  |  ------------------
  |  |  |  |  139|      4|#define PyDateTime_TIME_GET_HOUR(o)        (((PyDateTime_Time*)(o))->data[0])
  |  |  ------------------
  ------------------
 1339|      4|        TIME_SET_MINUTE(self, minute);
  ------------------
  |  |  313|      4|#define TIME_SET_MINUTE(o, v)   (PyDateTime_TIME_GET_MINUTE(o) = (v))
  |  |  ------------------
  |  |  |  |  140|      4|#define PyDateTime_TIME_GET_MINUTE(o)      (((PyDateTime_Time*)(o))->data[1])
  |  |  ------------------
  ------------------
 1340|      4|        TIME_SET_SECOND(self, second);
  ------------------
  |  |  314|      4|#define TIME_SET_SECOND(o, v)   (PyDateTime_TIME_GET_SECOND(o) = (v))
  |  |  ------------------
  |  |  |  |  141|      4|#define PyDateTime_TIME_GET_SECOND(o)      (((PyDateTime_Time*)(o))->data[2])
  |  |  ------------------
  ------------------
 1341|      4|        TIME_SET_MICROSECOND(self, usecond);
  ------------------
  |  |  316|      4|    (((o)->data[3] = ((v) & 0xff0000) >> 16), \
  |  |  317|      4|     ((o)->data[4] = ((v) & 0x00ff00) >> 8), \
  |  |  318|      4|     ((o)->data[5] = ((v) & 0x0000ff)))
  ------------------
 1342|      4|        if (aware) {
  ------------------
  |  Branch (1342:13): [True: 0, False: 4]
  ------------------
 1343|      0|            self->tzinfo = Py_NewRef(tzinfo);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1344|      0|        }
 1345|      4|        TIME_SET_FOLD(self, fold);
  ------------------
  |  |  319|      4|#define TIME_SET_FOLD(o, v)   (PyDateTime_TIME_GET_FOLD(o) = (v))
  |  |  ------------------
  |  |  |  |  146|      4|#define PyDateTime_TIME_GET_FOLD(o)        (((PyDateTime_Time*)(o))->fold)
  |  |  ------------------
  ------------------
 1346|      4|    }
 1347|      4|    return (PyObject *)self;
 1348|      4|}
_datetimemodule.c:datetime_alloc:
  896|      4|{
  897|      4|    size_t size = aware ? sizeof(PyDateTime_DateTime) : sizeof(_PyDateTime_BaseDateTime);
  ------------------
  |  Branch (897:19): [True: 0, False: 4]
  ------------------
  898|      4|    PyObject *self = (PyObject *)PyObject_Malloc(size);
  899|      4|    if (self == NULL) {
  ------------------
  |  Branch (899:9): [True: 0, False: 4]
  ------------------
  900|      0|        return PyErr_NoMemory();
  901|      0|    }
  902|      4|    _PyObject_Init(self, type);
  903|      4|    return self;
  904|      4|}
_datetimemodule.c:new_datetime_ex2:
 1215|      4|{
 1216|      4|    PyDateTime_DateTime *self;
 1217|      4|    char aware = tzinfo != Py_None;
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1218|       |
 1219|      4|    if (check_date_args(year, month, day) < 0) {
  ------------------
  |  Branch (1219:9): [True: 0, False: 4]
  ------------------
 1220|      0|        return NULL;
 1221|      0|    }
 1222|      4|    if (check_time_args(hour, minute, second, usecond, fold) < 0) {
  ------------------
  |  Branch (1222:9): [True: 0, False: 4]
  ------------------
 1223|      0|        return NULL;
 1224|      0|    }
 1225|      4|    if (check_tzinfo_subclass(tzinfo) < 0) {
  ------------------
  |  Branch (1225:9): [True: 0, False: 4]
  ------------------
 1226|      0|        return NULL;
 1227|      0|    }
 1228|       |
 1229|      4|    self = (PyDateTime_DateTime *) (type->tp_alloc(type, aware));
 1230|      4|    if (self != NULL) {
  ------------------
  |  Branch (1230:9): [True: 4, False: 0]
  ------------------
 1231|      4|        self->hastzinfo = aware;
 1232|      4|        set_date_fields((PyDateTime_Date *)self, year, month, day);
 1233|      4|        DATE_SET_HOUR(self, hour);
  ------------------
  |  |  297|      4|#define DATE_SET_HOUR(o, v)     (PyDateTime_DATE_GET_HOUR(o) = (v))
  |  |  ------------------
  |  |  |  |  127|      4|#define PyDateTime_DATE_GET_HOUR(o)        (((PyDateTime_DateTime*)(o))->data[4])
  |  |  ------------------
  ------------------
 1234|      4|        DATE_SET_MINUTE(self, minute);
  ------------------
  |  |  298|      4|#define DATE_SET_MINUTE(o, v)   (PyDateTime_DATE_GET_MINUTE(o) = (v))
  |  |  ------------------
  |  |  |  |  128|      4|#define PyDateTime_DATE_GET_MINUTE(o)      (((PyDateTime_DateTime*)(o))->data[5])
  |  |  ------------------
  ------------------
 1235|      4|        DATE_SET_SECOND(self, second);
  ------------------
  |  |  299|      4|#define DATE_SET_SECOND(o, v)   (PyDateTime_DATE_GET_SECOND(o) = (v))
  |  |  ------------------
  |  |  |  |  129|      4|#define PyDateTime_DATE_GET_SECOND(o)      (((PyDateTime_DateTime*)(o))->data[6])
  |  |  ------------------
  ------------------
 1236|      4|        DATE_SET_MICROSECOND(self, usecond);
  ------------------
  |  |  301|      4|    (((o)->data[7] = ((v) & 0xff0000) >> 16), \
  |  |  302|      4|     ((o)->data[8] = ((v) & 0x00ff00) >> 8), \
  |  |  303|      4|     ((o)->data[9] = ((v) & 0x0000ff)))
  ------------------
 1237|      4|        if (aware) {
  ------------------
  |  Branch (1237:13): [True: 0, False: 4]
  ------------------
 1238|      0|            self->tzinfo = Py_NewRef(tzinfo);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1239|      0|        }
 1240|      4|        DATE_SET_FOLD(self, fold);
  ------------------
  |  |  304|      4|#define DATE_SET_FOLD(o, v)   (PyDateTime_DATE_GET_FOLD(o) = (v))
  |  |  ------------------
  |  |  |  |  134|      4|#define PyDateTime_DATE_GET_FOLD(o)        (((PyDateTime_DateTime*)(o))->fold)
  |  |  ------------------
  ------------------
 1241|      4|    }
 1242|      4|    return (PyObject *)self;
 1243|      4|}
_datetimemodule.c:create_timezone_from_delta:
 7417|      4|{
 7418|      4|    PyObject *delta = new_delta(days, sec, ms, normalize);
  ------------------
  |  | 1417|      4|    new_delta_ex(d, s, us, normalize, DELTA_TYPE(NO_STATE))
  |  |  ------------------
  |  |  |  |   81|      4|#define DELTA_TYPE(st) &PyDateTime_DeltaType
  |  |  ------------------
  ------------------
 7419|      4|    if (delta == NULL) {
  ------------------
  |  Branch (7419:9): [True: 0, False: 4]
  ------------------
 7420|      0|        return NULL;
 7421|      0|    }
 7422|      4|    PyObject *tz = create_timezone(delta, NULL);
 7423|      4|    Py_DECREF(delta);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7424|      4|    return tz;
 7425|      4|}

PyInit__functools:
 2048|      1|{
 2049|      1|    return PyModuleDef_Init(&_functools_module);
 2050|      1|}
_functoolsmodule.c:get_functools_state:
   39|     23|{
   40|     23|    void *state = _PyModule_GetState(module);
   41|     23|    assert(state != NULL);
  ------------------
  |  Branch (41:5): [True: 23, False: 0]
  ------------------
   42|     23|    return (_functools_state *)state;
   43|     23|}
_functoolsmodule.c:_functools_exec:
 1929|      1|{
 1930|      1|    _functools_state *state = get_functools_state(module);
 1931|      1|    state->kwd_mark = _PyObject_CallNoArgs((PyObject *)&PyBaseObject_Type);
 1932|      1|    if (state->kwd_mark == NULL) {
  ------------------
  |  Branch (1932:9): [True: 0, False: 1]
  ------------------
 1933|      0|        return -1;
 1934|      0|    }
 1935|       |
 1936|      1|    state->placeholder_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
 1937|      1|        &placeholder_type_spec, NULL);
 1938|      1|    if (state->placeholder_type == NULL) {
  ------------------
  |  Branch (1938:9): [True: 0, False: 1]
  ------------------
 1939|      0|        return -1;
 1940|      0|    }
 1941|      1|    if (PyModule_AddType(module, state->placeholder_type) < 0) {
  ------------------
  |  Branch (1941:9): [True: 0, False: 1]
  ------------------
 1942|      0|        return -1;
 1943|      0|    }
 1944|       |
 1945|      1|    PyObject *placeholder = PyObject_CallNoArgs((PyObject *)state->placeholder_type);
 1946|      1|    if (placeholder == NULL) {
  ------------------
  |  Branch (1946:9): [True: 0, False: 1]
  ------------------
 1947|      0|        return -1;
 1948|      0|    }
 1949|      1|    if (PyModule_AddObjectRef(module, "Placeholder", placeholder) < 0) {
  ------------------
  |  Branch (1949:9): [True: 0, False: 1]
  ------------------
 1950|      0|        Py_DECREF(placeholder);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1951|      0|        return -1;
 1952|      0|    }
 1953|      1|    Py_DECREF(placeholder);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1954|       |
 1955|      1|    state->partial_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
 1956|      1|        &partial_type_spec, NULL);
 1957|      1|    if (state->partial_type == NULL) {
  ------------------
  |  Branch (1957:9): [True: 0, False: 1]
  ------------------
 1958|      0|        return -1;
 1959|      0|    }
 1960|      1|    if (PyModule_AddType(module, state->partial_type) < 0) {
  ------------------
  |  Branch (1960:9): [True: 0, False: 1]
  ------------------
 1961|      0|        return -1;
 1962|      0|    }
 1963|       |
 1964|      1|    PyObject *lru_cache_type = PyType_FromModuleAndSpec(module,
 1965|      1|        &lru_cache_type_spec, NULL);
 1966|      1|    if (lru_cache_type == NULL) {
  ------------------
  |  Branch (1966:9): [True: 0, False: 1]
  ------------------
 1967|      0|        return -1;
 1968|      0|    }
 1969|      1|    if (PyModule_AddType(module, (PyTypeObject *)lru_cache_type) < 0) {
  ------------------
  |  Branch (1969:9): [True: 0, False: 1]
  ------------------
 1970|      0|        Py_DECREF(lru_cache_type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1971|      0|        return -1;
 1972|      0|    }
 1973|      1|    Py_DECREF(lru_cache_type);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1974|       |
 1975|      1|    state->keyobject_type = (PyTypeObject *)PyType_FromModuleAndSpec(module,
 1976|      1|        &keyobject_type_spec, NULL);
 1977|      1|    if (state->keyobject_type == NULL) {
  ------------------
  |  Branch (1977:9): [True: 0, False: 1]
  ------------------
 1978|      0|        return -1;
 1979|      0|    }
 1980|       |    // keyobject_type is used only internally.
 1981|       |    // So we don't expose it in module namespace.
 1982|       |
 1983|      1|    state->lru_list_elem_type = (PyTypeObject *)PyType_FromModuleAndSpec(
 1984|      1|        module, &lru_list_elem_type_spec, NULL);
 1985|      1|    if (state->lru_list_elem_type == NULL) {
  ------------------
  |  Branch (1985:9): [True: 0, False: 1]
  ------------------
 1986|      0|        return -1;
 1987|      0|    }
 1988|       |    // lru_list_elem is used only in _lru_cache_wrapper.
 1989|       |    // So we don't expose it in module namespace.
 1990|       |
 1991|      1|    return 0;
 1992|      1|}
_functoolsmodule.c:placeholder_new:
   90|      1|{
   91|      1|    if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
  ------------------
  |  |   27|      2|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 0, False: 1]
  |  |  ------------------
  ------------------
                  if (PyTuple_GET_SIZE(args) || (kwargs && PyDict_GET_SIZE(kwargs))) {
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (63:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (91:36): [True: 0, False: 1]
  ------------------
   92|      0|        PyErr_SetString(PyExc_TypeError, "PlaceholderType takes no arguments");
   93|      0|        return NULL;
   94|      0|    }
   95|      1|    _functools_state *state = get_functools_state_by_type(type);
   96|      1|    if (state->placeholder != NULL) {
  ------------------
  |  Branch (96:9): [True: 0, False: 1]
  ------------------
   97|      0|        return Py_NewRef(state->placeholder);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|      0|    }
   99|       |
  100|      1|    PyObject *placeholder = PyType_GenericNew(type, NULL, NULL);
  101|      1|    if (placeholder == NULL) {
  ------------------
  |  Branch (101:9): [True: 0, False: 1]
  ------------------
  102|      0|        return NULL;
  103|      0|    }
  104|       |
  105|      1|    if (state->placeholder == NULL) {
  ------------------
  |  Branch (105:9): [True: 1, False: 0]
  ------------------
  106|      1|        state->placeholder = Py_NewRef(placeholder);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      1|    }
  108|      1|    return placeholder;
  109|      1|}
_functoolsmodule.c:get_functools_state_by_type:
  151|      4|{
  152|      4|    PyObject *module = PyType_GetModuleByDef(type, &_functools_module);
  153|      4|    if (module == NULL) {
  ------------------
  |  Branch (153:9): [True: 0, False: 4]
  ------------------
  154|      0|        return NULL;
  155|      0|    }
  156|      4|    return get_functools_state(module);
  157|      4|}
_functoolsmodule.c:partial_dealloc:
  349|      1|{
  350|      1|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
  352|      1|    PyObject_GC_UnTrack(self);
  353|      1|    FT_CLEAR_WEAKREFS(self, partialobject_CAST(self)->weakreflist);
  ------------------
  |  |   47|      1|    do {                                            \
  |  |   48|      1|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|      1|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (353:5): [True: 1, False: 0]
  ------------------
  354|      1|    (void)partial_clear(self);
  355|      1|    tp->tp_free(self);
  356|      1|    Py_DECREF(tp);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      1|}
_functoolsmodule.c:partial_clear:
  326|      1|{
  327|      1|    partialobject *pto = partialobject_CAST(self);
  ------------------
  |  |  142|      1|#define partialobject_CAST(op)  ((partialobject *)(op))
  ------------------
  328|      1|    Py_CLEAR(pto->fn);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 0]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  329|      1|    Py_CLEAR(pto->args);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 0]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  330|      1|    Py_CLEAR(pto->kw);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 0]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  331|       |    Py_CLEAR(pto->dict);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 1]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  332|      1|    return 0;
  333|      1|}
_functoolsmodule.c:partial_setvectorcall:
  576|      1|{
  577|      1|    if (PyVectorcall_Function(pto->fn) == NULL) {
  ------------------
  |  Branch (577:9): [True: 0, False: 1]
  ------------------
  578|       |        /* Don't use vectorcall if the underlying function doesn't support it */
  579|      0|        pto->vectorcall = NULL;
  580|      0|    }
  581|       |    /* We could have a special case if there are no arguments,
  582|       |     * but that is unlikely (why use partial without arguments?),
  583|       |     * so we don't optimize that */
  584|      1|    else {
  585|      1|        pto->vectorcall = partial_vectorcall;
  586|      1|    }
  587|      1|}
_functoolsmodule.c:partial_vectorcall:
  371|      1|{
  372|      1|    partialobject *pto = partialobject_CAST(self);;
  ------------------
  |  |  142|      1|#define partialobject_CAST(op)  ((partialobject *)(op))
  ------------------
  373|      1|    PyThreadState *tstate = _PyThreadState_GET();
  374|      1|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      1|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  375|       |
  376|       |    /* Placeholder check */
  377|      1|    Py_ssize_t pto_phcount = pto->phcount;
  378|      1|    if (nargs < pto_phcount) {
  ------------------
  |  Branch (378:9): [True: 0, False: 1]
  ------------------
  379|      0|        PyErr_Format(PyExc_TypeError,
  380|      0|                     "missing positional arguments in 'partial' call; "
  381|      0|                     "expected at least %zd, got %zd", pto_phcount, nargs);
  382|      0|        return NULL;
  383|      0|    }
  384|       |
  385|      1|    PyObject *result = NULL;
  386|      1|    PyObject *partial_function = Py_NewRef(pto->fn);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  387|      1|    PyObject *partial_args = Py_NewRef(pto->args);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|      1|    PyObject *partial_keywords = Py_NewRef(pto->kw);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  389|       |
  390|      1|    PyObject **pto_args = _PyTuple_ITEMS(partial_args);
  ------------------
  |  |   26|      1|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|      2|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  391|      1|    Py_ssize_t pto_nargs = PyTuple_GET_SIZE(partial_args);
  ------------------
  |  |   27|      1|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  392|      1|    Py_ssize_t pto_nkwds = PyDict_GET_SIZE(partial_keywords);
  ------------------
  |  |   63|      1|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  393|      1|    Py_ssize_t nkwds = kwnames == NULL ? 0 : PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (393:24): [True: 1, False: 0]
  ------------------
  394|      1|    Py_ssize_t nargskw = nargs + nkwds;
  395|       |
  396|       |    /* Special cases */
  397|      1|    if (!pto_nkwds) {
  ------------------
  |  Branch (397:9): [True: 0, False: 1]
  ------------------
  398|       |        /* Fast path if we're called without arguments */
  399|      0|        if (nargskw == 0) {
  ------------------
  |  Branch (399:13): [True: 0, False: 0]
  ------------------
  400|      0|            result = _PyObject_VectorcallTstate(tstate, partial_function, pto_args,
  401|      0|                                                pto_nargs, NULL);
  402|      0|            goto done;
  403|      0|        }
  404|       |
  405|       |        /* Use PY_VECTORCALL_ARGUMENTS_OFFSET to prepend a single
  406|       |         * positional argument. */
  407|      0|        if (pto_nargs == 1 && (nargsf & PY_VECTORCALL_ARGUMENTS_OFFSET)) {
  ------------------
  |  |  287|      0|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  |  Branch (407:31): [True: 0, False: 0]
  ------------------
  408|      0|            PyObject **newargs = (PyObject **)args - 1;
  409|      0|            PyObject *tmp = newargs[0];
  410|      0|            newargs[0] = pto_args[0];
  411|      0|            result = _PyObject_VectorcallTstate(tstate, partial_function, newargs,
  412|      0|                                                nargs + 1, kwnames);
  413|      0|            newargs[0] = tmp;
  414|      0|            goto done;
  415|      0|        }
  416|      0|    }
  417|       |
  418|       |    /* Total sizes */
  419|      1|    Py_ssize_t tot_nargs = pto_nargs + nargs - pto_phcount;
  420|      1|    Py_ssize_t tot_nkwds = pto_nkwds + nkwds;
  421|      1|    Py_ssize_t tot_nargskw = tot_nargs + tot_nkwds;
  422|       |
  423|      1|    PyObject *pto_kw_merged = NULL;  // pto_kw with duplicates merged (if any)
  424|      1|    PyObject *tot_kwnames;
  425|       |
  426|       |    /* Allocate Stack
  427|       |     * Note, _PY_FASTCALL_SMALL_STACK is optimal for positional only
  428|       |     * This case might have keyword arguments
  429|       |     *  furthermore, it might use extra stack space for temporary key storage
  430|       |     *  thus, double small_stack size is used, which is 10 * 8 = 80 bytes */
  431|      1|    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK * 2];
  432|      1|    PyObject **tmp_stack, **stack;
  433|      1|    Py_ssize_t init_stack_size = tot_nargskw;
  434|      1|    if (pto_nkwds) {
  ------------------
  |  Branch (434:9): [True: 1, False: 0]
  ------------------
  435|       |        // If pto_nkwds, allocate additional space for temporary new keys
  436|      1|        init_stack_size += nkwds;
  437|      1|    }
  438|      1|    if (init_stack_size <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
  ------------------
  |  |  221|      1|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (438:9): [True: 1, False: 0]
  ------------------
  439|      1|        stack = small_stack;
  440|      1|    }
  441|      0|    else {
  442|      0|        stack = PyMem_Malloc(init_stack_size * sizeof(PyObject *));
  443|      0|        if (stack == NULL) {
  ------------------
  |  Branch (443:13): [True: 0, False: 0]
  ------------------
  444|      0|            PyErr_NoMemory();
  445|      0|            goto done;
  446|      0|        }
  447|      0|    }
  448|       |
  449|       |    /* Copy keywords to stack */
  450|      1|    if (!pto_nkwds) {
  ------------------
  |  Branch (450:9): [True: 0, False: 1]
  ------------------
  451|      0|        tot_kwnames = kwnames;
  452|      0|        if (nkwds) {
  ------------------
  |  Branch (452:13): [True: 0, False: 0]
  ------------------
  453|       |            /* if !pto_nkwds & nkwds, then simply append kw */
  454|      0|            memcpy(stack + tot_nargs, args + nargs, nkwds * sizeof(PyObject*));
  455|      0|        }
  456|      0|    }
  457|      1|    else {
  458|       |        /* stack is now         [<positionals>, <pto_kwds>, <kwds>, <kwds_keys>]
  459|       |         * Will resize later to [<positionals>, <merged_kwds>] */
  460|      1|        PyObject *key, *val;
  461|       |
  462|       |        /* Merge kw to pto_kw or add to tail (if not duplicate) */
  463|      1|        Py_ssize_t n_tail = 0;
  464|      1|        for (Py_ssize_t i = 0; i < nkwds; ++i) {
  ------------------
  |  Branch (464:32): [True: 0, False: 1]
  ------------------
  465|      0|            key = PyTuple_GET_ITEM(kwnames, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (465:19): [True: 0, False: 0]
  ------------------
  466|      0|            val = args[nargs + i];
  467|      0|            int contains = PyDict_Contains(partial_keywords, key);
  468|      0|            if (contains < 0) {
  ------------------
  |  Branch (468:17): [True: 0, False: 0]
  ------------------
  469|      0|                goto clean_stack;
  470|      0|            }
  471|      0|            else if (contains == 1) {
  ------------------
  |  Branch (471:22): [True: 0, False: 0]
  ------------------
  472|      0|                if (pto_kw_merged == NULL) {
  ------------------
  |  Branch (472:21): [True: 0, False: 0]
  ------------------
  473|      0|                    pto_kw_merged = PyDict_Copy(partial_keywords);
  474|      0|                    if (pto_kw_merged == NULL) {
  ------------------
  |  Branch (474:25): [True: 0, False: 0]
  ------------------
  475|      0|                        goto clean_stack;
  476|      0|                    }
  477|      0|                }
  478|      0|                if (PyDict_SetItem(pto_kw_merged, key, val) < 0) {
  ------------------
  |  Branch (478:21): [True: 0, False: 0]
  ------------------
  479|      0|                    Py_DECREF(pto_kw_merged);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|      0|                    goto clean_stack;
  481|      0|                }
  482|      0|            }
  483|      0|            else {
  484|       |                /* Copy keyword tail to stack */
  485|      0|                stack[tot_nargs + pto_nkwds + n_tail] = val;
  486|      0|                stack[tot_nargskw + n_tail] = key;
  487|      0|                n_tail++;
  488|      0|            }
  489|      0|        }
  490|      1|        Py_ssize_t n_merges = nkwds - n_tail;
  491|       |
  492|       |        /* Create total kwnames */
  493|      1|        tot_kwnames = PyTuple_New(tot_nkwds - n_merges);
  494|      1|        if (tot_kwnames == NULL) {
  ------------------
  |  Branch (494:13): [True: 0, False: 1]
  ------------------
  495|      0|            Py_XDECREF(pto_kw_merged);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  496|      0|            goto clean_stack;
  497|      0|        }
  498|      1|        for (Py_ssize_t i = 0; i < n_tail; ++i) {
  ------------------
  |  Branch (498:32): [True: 0, False: 1]
  ------------------
  499|      0|            key = Py_NewRef(stack[tot_nargskw + i]);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  500|      0|            PyTuple_SET_ITEM(tot_kwnames, pto_nkwds + i, key);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|      0|        }
  502|       |
  503|       |        /* Copy pto_keywords with overlapping call keywords merged
  504|       |         * Note, tail is already coppied. */
  505|      1|        Py_ssize_t pos = 0, i = 0;
  506|      1|        PyObject *keyword_dict = n_merges ? pto_kw_merged : partial_keywords;
  ------------------
  |  Branch (506:34): [True: 0, False: 1]
  ------------------
  507|      1|        Py_BEGIN_CRITICAL_SECTION(keyword_dict);
  ------------------
  |  |   51|      1|    {
  ------------------
  508|      4|        while (PyDict_Next(keyword_dict, &pos, &key, &val)) {
  ------------------
  |  Branch (508:16): [True: 3, False: 1]
  ------------------
  509|      3|            assert(i < pto_nkwds);
  ------------------
  |  Branch (509:13): [True: 3, False: 0]
  ------------------
  510|      3|            PyTuple_SET_ITEM(tot_kwnames, i, Py_NewRef(key));
  ------------------
  |  |   40|      3|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      3|            stack[tot_nargs + i] = val;
  512|      3|            i++;
  513|      3|        }
  514|      1|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      1|    }
  ------------------
  515|      1|        assert(i == pto_nkwds);
  ------------------
  |  Branch (515:9): [True: 1, False: 0]
  ------------------
  516|      1|        Py_XDECREF(pto_kw_merged);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|       |
  518|       |        /* Resize Stack if the removing overallocation saves some noticable memory
  519|       |         * NOTE: This whole block can be removed without breaking anything */
  520|      1|        Py_ssize_t noveralloc = n_merges + nkwds;
  521|      1|        if (stack != small_stack && noveralloc > 6 && noveralloc > init_stack_size / 10) {
  ------------------
  |  Branch (521:13): [True: 0, False: 1]
  |  Branch (521:37): [True: 0, False: 0]
  |  Branch (521:55): [True: 0, False: 0]
  ------------------
  522|      0|            tmp_stack = PyMem_Realloc(stack, (tot_nargskw - n_merges) * sizeof(PyObject *));
  523|      0|            if (tmp_stack == NULL) {
  ------------------
  |  Branch (523:17): [True: 0, False: 0]
  ------------------
  524|      0|                Py_DECREF(tot_kwnames);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  525|      0|                PyErr_NoMemory();
  526|      0|                goto clean_stack;
  527|      0|            }
  528|      0|            stack = tmp_stack;
  529|      0|        }
  530|      1|    }
  531|       |
  532|       |    /* Copy Positionals to stack */
  533|      1|    if (pto_phcount) {
  ------------------
  |  Branch (533:9): [True: 0, False: 1]
  ------------------
  534|      0|        Py_ssize_t j = 0;       // New args index
  535|      0|        for (Py_ssize_t i = 0; i < pto_nargs; i++) {
  ------------------
  |  Branch (535:32): [True: 0, False: 0]
  ------------------
  536|      0|            if (pto_args[i] == pto->placeholder) {
  ------------------
  |  Branch (536:17): [True: 0, False: 0]
  ------------------
  537|      0|                stack[i] = args[j];
  538|      0|                j += 1;
  539|      0|            }
  540|      0|            else {
  541|      0|                stack[i] = pto_args[i];
  542|      0|            }
  543|      0|        }
  544|      0|        assert(j == pto_phcount);
  ------------------
  |  Branch (544:9): [True: 0, False: 0]
  ------------------
  545|       |        /* Add remaining args from new_args */
  546|      0|        if (nargs > pto_phcount) {
  ------------------
  |  Branch (546:13): [True: 0, False: 0]
  ------------------
  547|      0|            memcpy(stack + pto_nargs, args + j, (nargs - j) * sizeof(PyObject*));
  548|      0|        }
  549|      0|    }
  550|      1|    else {
  551|      1|        memcpy(stack, pto_args, pto_nargs * sizeof(PyObject*));
  552|      1|        memcpy(stack + pto_nargs, args, nargs * sizeof(PyObject*));
  553|      1|    }
  554|       |
  555|      1|    result = _PyObject_VectorcallTstate(tstate, partial_function, stack,
  556|      1|                                        tot_nargs, tot_kwnames);
  557|      1|    if (pto_nkwds) {
  ------------------
  |  Branch (557:9): [True: 1, False: 0]
  ------------------
  558|      1|        Py_DECREF(tot_kwnames);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  559|      1|    }
  560|       |
  561|      1| clean_stack:
  562|      1|    if (stack != small_stack) {
  ------------------
  |  Branch (562:9): [True: 0, False: 1]
  ------------------
  563|      0|        PyMem_Free(stack);
  564|      0|    }
  565|       |
  566|      1| done:
  567|      1|    Py_DECREF(partial_function);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      1|    Py_DECREF(partial_args);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|      1|    Py_DECREF(partial_keywords);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|      1|    return result;
  571|      1|}
_functoolsmodule.c:partial_new:
  162|      1|{
  163|      1|    PyObject *func, *pto_args, *new_args, *pto_kw, *phold;
  164|      1|    partialobject *pto;
  165|      1|    Py_ssize_t pto_phcount = 0;
  166|      1|    Py_ssize_t new_nargs = PyTuple_GET_SIZE(args) - 1;
  ------------------
  |  |   27|      1|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|       |
  168|      1|    if (new_nargs < 0) {
  ------------------
  |  Branch (168:9): [True: 0, False: 1]
  ------------------
  169|      0|        PyErr_SetString(PyExc_TypeError,
  170|      0|                        "type 'partial' takes at least one argument");
  171|      0|        return NULL;
  172|      0|    }
  173|      1|    func = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|      1|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      1|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (173:12): [True: 1, False: 0]
  ------------------
  174|      1|    if (!PyCallable_Check(func)) {
  ------------------
  |  Branch (174:9): [True: 0, False: 1]
  ------------------
  175|      0|        PyErr_SetString(PyExc_TypeError,
  176|      0|                        "the first argument must be callable");
  177|      0|        return NULL;
  178|      0|    }
  179|       |
  180|      1|    _functools_state *state = get_functools_state_by_type(type);
  181|      1|    if (state == NULL) {
  ------------------
  |  Branch (181:9): [True: 0, False: 1]
  ------------------
  182|      0|        return NULL;
  183|      0|    }
  184|      1|    phold = state->placeholder;
  185|       |
  186|       |    /* Placeholder restrictions */
  187|      1|    if (new_nargs && PyTuple_GET_ITEM(args, new_nargs) == phold) {
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (187:9): [True: 0, False: 1]
  |  Branch (187:22): [True: 0, False: 0]
  |  Branch (187:22): [True: 0, False: 0]
  ------------------
  188|      0|        PyErr_SetString(PyExc_TypeError,
  189|      0|                        "trailing Placeholders are not allowed");
  190|      0|        return NULL;
  191|      0|    }
  192|       |
  193|       |    /* keyword Placeholder prohibition */
  194|      1|    if (kw != NULL) {
  ------------------
  |  Branch (194:9): [True: 1, False: 0]
  ------------------
  195|      1|        PyObject *key, *val;
  196|      1|        Py_ssize_t pos = 0;
  197|      4|        while (PyDict_Next(kw, &pos, &key, &val)) {
  ------------------
  |  Branch (197:16): [True: 3, False: 1]
  ------------------
  198|      3|            if (val == phold) {
  ------------------
  |  Branch (198:17): [True: 0, False: 3]
  ------------------
  199|      0|                PyErr_SetString(PyExc_TypeError,
  200|      0|                                "Placeholder cannot be passed as a keyword argument");
  201|      0|                return NULL;
  202|      0|            }
  203|      3|        }
  204|      1|    }
  205|       |
  206|       |    /* check wrapped function / object */
  207|      1|    pto_args = pto_kw = NULL;
  208|      1|    int res = PyObject_TypeCheck(func, state->partial_type);
  ------------------
  |  |  378|      1|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|      1|    if (res == -1) {
  ------------------
  |  Branch (209:9): [True: 0, False: 1]
  ------------------
  210|      0|        return NULL;
  211|      0|    }
  212|      1|    if (res == 1) {
  ------------------
  |  Branch (212:9): [True: 0, False: 1]
  ------------------
  213|       |        // We can use its underlying function directly and merge the arguments.
  214|      0|        partialobject *part = (partialobject *)func;
  215|      0|        if (part->dict == NULL) {
  ------------------
  |  Branch (215:13): [True: 0, False: 0]
  ------------------
  216|      0|            pto_args = part->args;
  217|      0|            pto_kw = part->kw;
  218|      0|            func = part->fn;
  219|      0|            pto_phcount = part->phcount;
  220|      0|            assert(PyTuple_Check(pto_args));
  ------------------
  |  Branch (220:13): [True: 0, False: 0]
  ------------------
  221|      0|            assert(PyDict_Check(pto_kw));
  ------------------
  |  Branch (221:13): [True: 0, False: 0]
  ------------------
  222|      0|        }
  223|      0|    }
  224|       |
  225|       |    /* create partialobject structure */
  226|      1|    pto = (partialobject *)type->tp_alloc(type, 0);
  227|      1|    if (pto == NULL)
  ------------------
  |  Branch (227:9): [True: 0, False: 1]
  ------------------
  228|      0|        return NULL;
  229|       |
  230|      1|    pto->fn = Py_NewRef(func);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|      1|    pto->placeholder = phold;
  232|       |
  233|      1|    new_args = PyTuple_GetSlice(args, 1, new_nargs + 1);
  234|      1|    if (new_args == NULL) {
  ------------------
  |  Branch (234:9): [True: 0, False: 1]
  ------------------
  235|      0|        Py_DECREF(pto);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|      0|        return NULL;
  237|      0|    }
  238|       |
  239|       |    /* Count placeholders */
  240|      1|    Py_ssize_t phcount = 0;
  241|      1|    for (Py_ssize_t i = 0; i < new_nargs - 1; i++) {
  ------------------
  |  Branch (241:28): [True: 0, False: 1]
  ------------------
  242|      0|        if (PyTuple_GET_ITEM(new_args, i) == phold) {
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (242:13): [True: 0, False: 0]
  |  Branch (242:13): [True: 0, False: 0]
  ------------------
  243|      0|            phcount++;
  244|      0|        }
  245|      0|    }
  246|       |    /* merge args with args of `func` which is `partial` */
  247|      1|    if (pto_phcount > 0 && new_nargs > 0) {
  ------------------
  |  Branch (247:9): [True: 0, False: 1]
  |  Branch (247:28): [True: 0, False: 0]
  ------------------
  248|      0|        Py_ssize_t npargs = PyTuple_GET_SIZE(pto_args);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|      0|        Py_ssize_t tot_nargs = npargs;
  250|      0|        if (new_nargs > pto_phcount) {
  ------------------
  |  Branch (250:13): [True: 0, False: 0]
  ------------------
  251|      0|            tot_nargs += new_nargs - pto_phcount;
  252|      0|        }
  253|      0|        PyObject *item;
  254|      0|        PyObject *tot_args = PyTuple_New(tot_nargs);
  255|      0|        if (tot_args == NULL) {
  ------------------
  |  Branch (255:13): [True: 0, False: 0]
  ------------------
  256|      0|            Py_DECREF(new_args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      0|            Py_DECREF(pto);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|      0|            return NULL;
  259|      0|        }
  260|      0|        for (Py_ssize_t i = 0, j = 0; i < tot_nargs; i++) {
  ------------------
  |  Branch (260:39): [True: 0, False: 0]
  ------------------
  261|      0|            if (i < npargs) {
  ------------------
  |  Branch (261:17): [True: 0, False: 0]
  ------------------
  262|      0|                item = PyTuple_GET_ITEM(pto_args, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (262:24): [True: 0, False: 0]
  ------------------
  263|      0|                if (j < new_nargs && item == phold) {
  ------------------
  |  Branch (263:21): [True: 0, False: 0]
  |  Branch (263:38): [True: 0, False: 0]
  ------------------
  264|      0|                    item = PyTuple_GET_ITEM(new_args, j);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (264:28): [True: 0, False: 0]
  ------------------
  265|      0|                    j++;
  266|      0|                    pto_phcount--;
  267|      0|                }
  268|      0|            }
  269|      0|            else {
  270|      0|                item = PyTuple_GET_ITEM(new_args, j);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (270:24): [True: 0, False: 0]
  ------------------
  271|      0|                j++;
  272|      0|            }
  273|      0|            Py_INCREF(item);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|      0|            PyTuple_SET_ITEM(tot_args, i, item);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|      0|        }
  276|      0|        pto->args = tot_args;
  277|      0|        pto->phcount = pto_phcount + phcount;
  278|      0|        Py_DECREF(new_args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  279|      0|    }
  280|      1|    else if (pto_args == NULL) {
  ------------------
  |  Branch (280:14): [True: 1, False: 0]
  ------------------
  281|      1|        pto->args = new_args;
  282|      1|        pto->phcount = phcount;
  283|      1|    }
  284|      0|    else {
  285|      0|        pto->args = PySequence_Concat(pto_args, new_args);
  286|      0|        pto->phcount = pto_phcount + phcount;
  287|      0|        Py_DECREF(new_args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|      0|        if (pto->args == NULL) {
  ------------------
  |  Branch (288:13): [True: 0, False: 0]
  ------------------
  289|      0|            Py_DECREF(pto);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|      0|            return NULL;
  291|      0|        }
  292|      0|        assert(PyTuple_Check(pto->args));
  ------------------
  |  Branch (292:9): [True: 0, False: 0]
  ------------------
  293|      0|    }
  294|       |
  295|      1|    if (pto_kw == NULL || PyDict_GET_SIZE(pto_kw) == 0) {
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (295:9): [True: 1, False: 0]
  |  Branch (295:27): [True: 0, False: 0]
  ------------------
  296|      1|        if (kw == NULL) {
  ------------------
  |  Branch (296:13): [True: 0, False: 1]
  ------------------
  297|      0|            pto->kw = PyDict_New();
  298|      0|        }
  299|      1|        else if (_PyObject_IsUniquelyReferenced(kw)) {
  ------------------
  |  Branch (299:18): [True: 1, False: 0]
  ------------------
  300|      1|            pto->kw = Py_NewRef(kw);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      1|        }
  302|      0|        else {
  303|      0|            pto->kw = PyDict_Copy(kw);
  304|      0|        }
  305|      1|    }
  306|      0|    else {
  307|      0|        pto->kw = PyDict_Copy(pto_kw);
  308|      0|        if (kw != NULL && pto->kw != NULL) {
  ------------------
  |  Branch (308:13): [True: 0, False: 0]
  |  Branch (308:27): [True: 0, False: 0]
  ------------------
  309|      0|            if (PyDict_Merge(pto->kw, kw, 1) != 0) {
  ------------------
  |  Branch (309:17): [True: 0, False: 0]
  ------------------
  310|      0|                Py_DECREF(pto);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|      0|                return NULL;
  312|      0|            }
  313|      0|        }
  314|      0|    }
  315|      1|    if (pto->kw == NULL) {
  ------------------
  |  Branch (315:9): [True: 0, False: 1]
  ------------------
  316|      0|        Py_DECREF(pto);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|      0|        return NULL;
  318|      0|    }
  319|       |
  320|      1|    partial_setvectorcall(pto);
  321|      1|    return (PyObject *)pto;
  322|      1|}
_functoolsmodule.c:lru_cache_tp_traverse:
 1834|     36|{
 1835|     36|    lru_cache_object *self = lru_cache_object_CAST(op);
  ------------------
  |  | 1234|     36|#define lru_cache_object_CAST(op)   ((lru_cache_object *)(op))
  ------------------
 1836|     36|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1837|     36|    lru_list_elem *link = self->root.next;
 1838|     36|    while (link != &self->root) {
  ------------------
  |  Branch (1838:12): [True: 0, False: 36]
  ------------------
 1839|      0|        lru_list_elem *next = link->next;
 1840|      0|        Py_VISIT(link->key);
  ------------------
  |  |  194|      0|    do {                                                                \
  |  |  195|      0|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1841|      0|        Py_VISIT(link->result);
  ------------------
  |  |  194|      0|    do {                                                                \
  |  |  195|      0|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1842|      0|        Py_VISIT(Py_TYPE(link));
  ------------------
  |  |  194|      0|    do {                                                                \
  |  |  195|      0|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1843|      0|        link = next;
 1844|      0|    }
 1845|     36|    Py_VISIT(self->cache);
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1846|     36|    Py_VISIT(self->func);
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1847|     36|    Py_VISIT(self->kwd_mark);
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1848|     36|    Py_VISIT(self->lru_list_elem_type);
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1849|     36|    Py_VISIT(self->cache_info_type);
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1850|     36|    Py_VISIT(self->dict);
  ------------------
  |  |  194|     36|    do {                                                                \
  |  |  195|     36|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 36, False: 0]
  |  |  ------------------
  |  |  196|     36|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     36|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 36]
  |  |  ------------------
  |  |  198|     36|                return vret;                                            \
  |  |  199|     36|        }                                                               \
  |  |  200|     36|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 36]
  |  |  ------------------
  ------------------
 1851|     36|    return 0;
 1852|     36|}
_functoolsmodule.c:lru_cache_new:
 1621|      2|{
 1622|      2|    PyObject *func, *maxsize_O, *cache_info_type, *cachedict;
 1623|      2|    int typed;
 1624|      2|    lru_cache_object *obj;
 1625|      2|    Py_ssize_t maxsize;
 1626|      2|    PyObject *(*wrapper)(lru_cache_object *, PyObject *, PyObject *);
 1627|      2|    _functools_state *state;
 1628|      2|    static char *keywords[] = {"user_function", "maxsize", "typed",
 1629|      2|                               "cache_info_type", NULL};
 1630|       |
 1631|      2|    if (!PyArg_ParseTupleAndKeywords(args, kw, "OOpO:lru_cache", keywords,
  ------------------
  |  Branch (1631:9): [True: 0, False: 2]
  ------------------
 1632|      2|                                     &func, &maxsize_O, &typed,
 1633|      2|                                     &cache_info_type)) {
 1634|      0|        return NULL;
 1635|      0|    }
 1636|       |
 1637|      2|    if (!PyCallable_Check(func)) {
  ------------------
  |  Branch (1637:9): [True: 0, False: 2]
  ------------------
 1638|      0|        PyErr_SetString(PyExc_TypeError,
 1639|      0|                        "the first argument must be callable");
 1640|      0|        return NULL;
 1641|      0|    }
 1642|       |
 1643|      2|    state = get_functools_state_by_type(type);
 1644|      2|    if (state == NULL) {
  ------------------
  |  Branch (1644:9): [True: 0, False: 2]
  ------------------
 1645|      0|        return NULL;
 1646|      0|    }
 1647|       |
 1648|       |    /* select the caching function, and make/inc maxsize_O */
 1649|      2|    if (maxsize_O == Py_None) {
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1649:9): [True: 0, False: 2]
  ------------------
 1650|      0|        wrapper = infinite_lru_cache_wrapper;
 1651|       |        /* use this only to initialize lru_cache_object attribute maxsize */
 1652|      0|        maxsize = -1;
 1653|      2|    } else if (PyIndex_Check(maxsize_O)) {
  ------------------
  |  Branch (1653:16): [True: 2, False: 0]
  ------------------
 1654|      2|        maxsize = PyNumber_AsSsize_t(maxsize_O, PyExc_OverflowError);
 1655|      2|        if (maxsize == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1655:13): [True: 0, False: 2]
  |  Branch (1655:30): [True: 0, False: 0]
  ------------------
 1656|      0|            return NULL;
 1657|      2|        if (maxsize < 0) {
  ------------------
  |  Branch (1657:13): [True: 0, False: 2]
  ------------------
 1658|      0|            maxsize = 0;
 1659|      0|        }
 1660|      2|        if (maxsize == 0)
  ------------------
  |  Branch (1660:13): [True: 0, False: 2]
  ------------------
 1661|      0|            wrapper = uncached_lru_cache_wrapper;
 1662|      2|        else
 1663|      2|            wrapper = bounded_lru_cache_wrapper;
 1664|      2|    } else {
 1665|      0|        PyErr_SetString(PyExc_TypeError, "maxsize should be integer or None");
 1666|      0|        return NULL;
 1667|      0|    }
 1668|       |
 1669|      2|    if (!(cachedict = PyDict_New()))
  ------------------
  |  Branch (1669:9): [True: 0, False: 2]
  ------------------
 1670|      0|        return NULL;
 1671|       |
 1672|      2|    obj = (lru_cache_object *)type->tp_alloc(type, 0);
 1673|      2|    if (obj == NULL) {
  ------------------
  |  Branch (1673:9): [True: 0, False: 2]
  ------------------
 1674|      0|        Py_DECREF(cachedict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1675|      0|        return NULL;
 1676|      0|    }
 1677|       |
 1678|      2|    obj->root.prev = &obj->root;
 1679|      2|    obj->root.next = &obj->root;
 1680|      2|    obj->wrapper = wrapper;
 1681|      2|    obj->typed = typed;
 1682|      2|    obj->cache = cachedict;
 1683|      2|    obj->func = Py_NewRef(func);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1684|      2|    obj->misses = obj->hits = 0;
 1685|      2|    obj->maxsize = maxsize;
 1686|      2|    obj->kwd_mark = Py_NewRef(state->kwd_mark);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1687|      2|    obj->lru_list_elem_type = (PyTypeObject*)Py_NewRef(state->lru_list_elem_type);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1688|      2|    obj->cache_info_type = Py_NewRef(cache_info_type);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1689|      2|    obj->dict = NULL;
 1690|       |    obj->weakreflist = NULL;
 1691|      2|    return (PyObject *)obj;
 1692|      2|}
_functoolsmodule.c:_functools_traverse:
 1996|     18|{
 1997|     18|    _functools_state *state = get_functools_state(module);
 1998|     18|    Py_VISIT(state->kwd_mark);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 1999|     18|    Py_VISIT(state->placeholder_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2000|     18|    Py_VISIT(state->placeholder);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2001|     18|    Py_VISIT(state->partial_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2002|     18|    Py_VISIT(state->keyobject_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2003|     18|    Py_VISIT(state->lru_list_elem_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 2004|     18|    return 0;
 2005|     18|}

PyNumber_AsOff_t:
  526|    103|{
  527|    103|    Py_off_t result;
  528|    103|    PyObject *runerr;
  529|    103|    PyObject *value = _PyNumber_Index(item);
  530|    103|    if (value == NULL)
  ------------------
  |  Branch (530:9): [True: 0, False: 103]
  ------------------
  531|      0|        return -1;
  532|       |
  533|       |    /* We're done if PyLong_AsSsize_t() returns without error. */
  534|    103|    result = PyLong_AsOff_t(value);
  ------------------
  |  |  109|    103|# define PyLong_AsOff_t     PyLong_AsSsize_t
  ------------------
  535|    103|    if (result != -1 || !(runerr = PyErr_Occurred()))
  ------------------
  |  Branch (535:9): [True: 103, False: 0]
  |  Branch (535:25): [True: 0, False: 0]
  ------------------
  536|    103|        goto finish;
  537|       |
  538|       |    /* Error handling code -- only manage OverflowError differently */
  539|      0|    if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError))
  ------------------
  |  Branch (539:9): [True: 0, False: 0]
  ------------------
  540|      0|        goto finish;
  541|       |
  542|      0|    PyErr_Clear();
  543|       |    /* If no error-handling desired then the default clipping
  544|       |       is sufficient.
  545|       |     */
  546|      0|    if (!err) {
  ------------------
  |  Branch (546:9): [True: 0, False: 0]
  ------------------
  547|      0|        assert(PyLong_Check(value));
  ------------------
  |  Branch (547:9): [True: 0, False: 0]
  ------------------
  548|      0|        if (_PyLong_IsNegative((PyLongObject *)value))
  ------------------
  |  Branch (548:13): [True: 0, False: 0]
  ------------------
  549|      0|            result = PY_OFF_T_MIN;
  ------------------
  |  |  112|      0|# define PY_OFF_T_MIN       PY_SSIZE_T_MIN
  |  |  ------------------
  |  |  |  |  146|      0|#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|      0|        else
  551|      0|            result = PY_OFF_T_MAX;
  ------------------
  |  |  111|      0|# define PY_OFF_T_MAX       PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  552|      0|    }
  553|      0|    else {
  554|       |        /* Otherwise replace the error with caller's error object. */
  555|      0|        PyErr_Format(err,
  556|      0|                     "cannot fit '%.200s' into an offset-sized integer",
  557|      0|                     Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|      0|    }
  559|       |
  560|    103| finish:
  561|    103|    Py_DECREF(value);
  ------------------
  |  |  430|    103|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    103|    return result;
  563|      0|}
PyInit__io:
  745|      2|{
  746|      2|    return PyModuleDef_Init(&_PyIO_Module);
  747|      2|}
_iomodule.c:_io_open_impl:
  204|     99|{
  205|     99|    size_t i;
  206|       |
  207|     99|    int creating = 0, reading = 0, writing = 0, appending = 0, updating = 0;
  208|     99|    int text = 0, binary = 0;
  209|       |
  210|     99|    char rawmode[6], *m;
  211|     99|    int line_buffering, is_number, isatty = 0;
  212|       |
  213|     99|    PyObject *raw, *modeobj = NULL, *buffer, *wrapper, *result = NULL, *path_or_fd = NULL;
  214|       |
  215|     99|    is_number = PyNumber_Check(file);
  216|       |
  217|     99|    if (is_number) {
  ------------------
  |  Branch (217:9): [True: 6, False: 93]
  ------------------
  218|      6|        path_or_fd = Py_NewRef(file);
  ------------------
  |  |  550|      6|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|     93|    } else {
  220|     93|        path_or_fd = PyOS_FSPath(file);
  221|     93|        if (path_or_fd == NULL) {
  ------------------
  |  Branch (221:13): [True: 0, False: 93]
  ------------------
  222|      0|            return NULL;
  223|      0|        }
  224|     93|    }
  225|       |
  226|     99|    if (!is_number &&
  ------------------
  |  Branch (226:9): [True: 93, False: 6]
  ------------------
  227|     99|        !PyUnicode_Check(path_or_fd) &&
  ------------------
  |  |  103|     93|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    192|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (227:9): [True: 0, False: 93]
  ------------------
  228|      0|        !PyBytes_Check(path_or_fd)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (228:9): [True: 0, False: 0]
  ------------------
  229|      0|        PyErr_Format(PyExc_TypeError, "invalid file: %R", file);
  230|      0|        goto error;
  231|      0|    }
  232|       |
  233|       |    /* Decode mode */
  234|    297|    for (i = 0; i < strlen(mode); i++) {
  ------------------
  |  Branch (234:17): [True: 198, False: 99]
  ------------------
  235|    198|        char c = mode[i];
  236|       |
  237|    198|        switch (c) {
  238|      0|        case 'x':
  ------------------
  |  Branch (238:9): [True: 0, False: 198]
  ------------------
  239|      0|            creating = 1;
  240|      0|            break;
  241|     95|        case 'r':
  ------------------
  |  Branch (241:9): [True: 95, False: 103]
  ------------------
  242|     95|            reading = 1;
  243|     95|            break;
  244|      4|        case 'w':
  ------------------
  |  Branch (244:9): [True: 4, False: 194]
  ------------------
  245|      4|            writing = 1;
  246|      4|            break;
  247|      0|        case 'a':
  ------------------
  |  Branch (247:9): [True: 0, False: 198]
  ------------------
  248|      0|            appending = 1;
  249|      0|            break;
  250|      0|        case '+':
  ------------------
  |  Branch (250:9): [True: 0, False: 198]
  ------------------
  251|      0|            updating = 1;
  252|      0|            break;
  253|      0|        case 't':
  ------------------
  |  Branch (253:9): [True: 0, False: 198]
  ------------------
  254|      0|            text = 1;
  255|      0|            break;
  256|     99|        case 'b':
  ------------------
  |  Branch (256:9): [True: 99, False: 99]
  ------------------
  257|     99|            binary = 1;
  258|     99|            break;
  259|      0|        default:
  ------------------
  |  Branch (259:9): [True: 0, False: 198]
  ------------------
  260|      0|            goto invalid_mode;
  261|    198|        }
  262|       |
  263|       |        /* c must not be duplicated */
  264|    198|        if (strchr(mode+i+1, c)) {
  ------------------
  |  Branch (264:13): [True: 0, False: 198]
  ------------------
  265|      0|          invalid_mode:
  266|      0|            PyErr_Format(PyExc_ValueError, "invalid mode: '%s'", mode);
  267|      0|            goto error;
  268|      0|        }
  269|       |
  270|    198|    }
  271|       |
  272|     99|    m = rawmode;
  273|     99|    if (creating)  *(m++) = 'x';
  ------------------
  |  Branch (273:9): [True: 0, False: 99]
  ------------------
  274|     99|    if (reading)   *(m++) = 'r';
  ------------------
  |  Branch (274:9): [True: 95, False: 4]
  ------------------
  275|     99|    if (writing)   *(m++) = 'w';
  ------------------
  |  Branch (275:9): [True: 4, False: 95]
  ------------------
  276|     99|    if (appending) *(m++) = 'a';
  ------------------
  |  Branch (276:9): [True: 0, False: 99]
  ------------------
  277|     99|    if (updating)  *(m++) = '+';
  ------------------
  |  Branch (277:9): [True: 0, False: 99]
  ------------------
  278|     99|    *m = '\0';
  279|       |
  280|       |    /* Parameters validation */
  281|     99|    if (text && binary) {
  ------------------
  |  Branch (281:9): [True: 0, False: 99]
  |  Branch (281:17): [True: 0, False: 0]
  ------------------
  282|      0|        PyErr_SetString(PyExc_ValueError,
  283|      0|                        "can't have text and binary mode at once");
  284|      0|        goto error;
  285|      0|    }
  286|       |
  287|     99|    if (creating + reading + writing + appending > 1) {
  ------------------
  |  Branch (287:9): [True: 0, False: 99]
  ------------------
  288|      0|        PyErr_SetString(PyExc_ValueError,
  289|      0|                        "must have exactly one of create/read/write/append mode");
  290|      0|        goto error;
  291|      0|    }
  292|       |
  293|     99|    if (binary && encoding != NULL) {
  ------------------
  |  Branch (293:9): [True: 99, False: 0]
  |  Branch (293:19): [True: 0, False: 99]
  ------------------
  294|      0|        PyErr_SetString(PyExc_ValueError,
  295|      0|                        "binary mode doesn't take an encoding argument");
  296|      0|        goto error;
  297|      0|    }
  298|       |
  299|     99|    if (binary && errors != NULL) {
  ------------------
  |  Branch (299:9): [True: 99, False: 0]
  |  Branch (299:19): [True: 0, False: 99]
  ------------------
  300|      0|        PyErr_SetString(PyExc_ValueError,
  301|      0|                        "binary mode doesn't take an errors argument");
  302|      0|        goto error;
  303|      0|    }
  304|       |
  305|     99|    if (binary && newline != NULL) {
  ------------------
  |  Branch (305:9): [True: 99, False: 0]
  |  Branch (305:19): [True: 0, False: 99]
  ------------------
  306|      0|        PyErr_SetString(PyExc_ValueError,
  307|      0|                        "binary mode doesn't take a newline argument");
  308|      0|        goto error;
  309|      0|    }
  310|       |
  311|     99|    if (binary && buffering == 1) {
  ------------------
  |  Branch (311:9): [True: 99, False: 0]
  |  Branch (311:19): [True: 0, False: 99]
  ------------------
  312|      0|        if (PyErr_WarnEx(PyExc_RuntimeWarning,
  ------------------
  |  Branch (312:13): [True: 0, False: 0]
  ------------------
  313|      0|                         "line buffering (buffering=1) isn't supported in "
  314|      0|                         "binary mode, the default buffer size will be used",
  315|      0|                         1) < 0) {
  316|      0|           goto error;
  317|      0|        }
  318|      0|    }
  319|       |
  320|       |    /* Create the Raw file stream */
  321|     99|    _PyIO_State *state = get_io_state(module);
  322|     99|    {
  323|     99|        PyObject *RawIO_class = (PyObject *)state->PyFileIO_Type;
  324|       |#ifdef HAVE_WINDOWS_CONSOLE_IO
  325|       |        const PyConfig *config = _Py_GetConfig();
  326|       |        if (!config->legacy_windows_stdio && _PyIO_get_console_type(path_or_fd) != '\0') {
  327|       |            RawIO_class = (PyObject *)state->PyWindowsConsoleIO_Type;
  328|       |            encoding = "utf-8";
  329|       |        }
  330|       |#endif
  331|     99|        raw = PyObject_CallFunction(RawIO_class, "OsOO",
  332|     99|                                    path_or_fd, rawmode,
  333|     99|                                    closefd ? Py_True : Py_False,
  ------------------
  |  |   26|     99|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                                  closefd ? Py_True : Py_False,
  ------------------
  |  |   25|     99|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (333:37): [True: 93, False: 6]
  ------------------
  334|     99|                                    opener);
  335|     99|    }
  336|       |
  337|     99|    if (raw == NULL)
  ------------------
  |  Branch (337:9): [True: 0, False: 99]
  ------------------
  338|      0|        goto error;
  339|     99|    result = raw;
  340|       |
  341|     99|    Py_SETREF(path_or_fd, NULL);
  ------------------
  |  |  354|     99|    do { \
  |  |  355|     99|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     99|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|     99|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     99|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|     99|        *_tmp_dst_ptr = (src); \
  |  |  358|     99|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|     99|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|     99|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 99]
  |  |  ------------------
  ------------------
  342|       |
  343|     99|    modeobj = PyUnicode_FromString(mode);
  344|     99|    if (modeobj == NULL)
  ------------------
  |  Branch (344:9): [True: 0, False: 99]
  ------------------
  345|      0|        goto error;
  346|       |
  347|       |    /* buffering */
  348|     99|    if (buffering < 0) {
  ------------------
  |  Branch (348:9): [True: 99, False: 0]
  ------------------
  349|     99|        PyObject *res = PyObject_CallMethodNoArgs(raw, &_Py_ID(_isatty_open_only));
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|     99|        if (res == NULL)
  ------------------
  |  Branch (350:13): [True: 0, False: 99]
  ------------------
  351|      0|            goto error;
  352|     99|        isatty = PyObject_IsTrue(res);
  353|     99|        Py_DECREF(res);
  ------------------
  |  |  430|     99|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|     99|        if (isatty < 0)
  ------------------
  |  Branch (354:13): [True: 0, False: 99]
  ------------------
  355|      0|            goto error;
  356|     99|    }
  357|       |
  358|     99|    if (buffering == 1 || isatty) {
  ------------------
  |  Branch (358:9): [True: 0, False: 99]
  |  Branch (358:27): [True: 0, False: 99]
  ------------------
  359|      0|        buffering = -1;
  360|      0|        line_buffering = 1;
  361|      0|    }
  362|     99|    else
  363|     99|        line_buffering = 0;
  364|       |
  365|     99|    if (buffering < 0) {
  ------------------
  |  Branch (365:9): [True: 99, False: 0]
  ------------------
  366|     99|        PyObject *blksize_obj;
  367|     99|        blksize_obj = PyObject_GetAttr(raw, &_Py_ID(_blksize));
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|     99|        if (blksize_obj == NULL)
  ------------------
  |  Branch (368:13): [True: 0, False: 99]
  ------------------
  369|      0|            goto error;
  370|     99|        buffering = PyLong_AsLong(blksize_obj);
  371|     99|        Py_DECREF(blksize_obj);
  ------------------
  |  |  430|     99|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  372|     99|        if (buffering == -1 && PyErr_Occurred())
  ------------------
  |  Branch (372:13): [True: 0, False: 99]
  |  Branch (372:32): [True: 0, False: 0]
  ------------------
  373|      0|            goto error;
  374|     99|        buffering = Py_MAX(Py_MIN(buffering, 8192 * 1024), DEFAULT_BUFFER_SIZE);
  ------------------
  |  |  126|     99|       __extension__ \
  |  |  127|    198|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|     99|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  |  Branch (127:32): [True: 99, False: 0]
  |  |  ------------------
  |  |  128|     99|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|     99|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|     99|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 99]
  |  |  ------------------
  ------------------
  375|     99|    }
  376|     99|    if (buffering < 0) {
  ------------------
  |  Branch (376:9): [True: 0, False: 99]
  ------------------
  377|      0|        PyErr_SetString(PyExc_ValueError,
  378|      0|                        "invalid buffering size");
  379|      0|        goto error;
  380|      0|    }
  381|       |
  382|       |    /* if not buffering, returns the raw file object */
  383|     99|    if (buffering == 0) {
  ------------------
  |  Branch (383:9): [True: 0, False: 99]
  ------------------
  384|      0|        if (!binary) {
  ------------------
  |  Branch (384:13): [True: 0, False: 0]
  ------------------
  385|      0|            PyErr_SetString(PyExc_ValueError,
  386|      0|                            "can't have unbuffered text I/O");
  387|      0|            goto error;
  388|      0|        }
  389|       |
  390|      0|        Py_DECREF(modeobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  391|      0|        return result;
  392|      0|    }
  393|       |
  394|       |    /* wraps into a buffered file */
  395|     99|    {
  396|     99|        PyObject *Buffered_class;
  397|       |
  398|     99|        if (updating) {
  ------------------
  |  Branch (398:13): [True: 0, False: 99]
  ------------------
  399|      0|            Buffered_class = (PyObject *)state->PyBufferedRandom_Type;
  400|      0|        }
  401|     99|        else if (creating || writing || appending) {
  ------------------
  |  Branch (401:18): [True: 0, False: 99]
  |  Branch (401:30): [True: 4, False: 95]
  |  Branch (401:41): [True: 0, False: 95]
  ------------------
  402|      4|            Buffered_class = (PyObject *)state->PyBufferedWriter_Type;
  403|      4|        }
  404|     95|        else if (reading) {
  ------------------
  |  Branch (404:18): [True: 95, False: 0]
  ------------------
  405|     95|            Buffered_class = (PyObject *)state->PyBufferedReader_Type;
  406|     95|        }
  407|      0|        else {
  408|      0|            PyErr_Format(PyExc_ValueError,
  409|      0|                         "unknown mode: '%s'", mode);
  410|      0|            goto error;
  411|      0|        }
  412|       |
  413|     99|        buffer = PyObject_CallFunction(Buffered_class, "Oi", raw, buffering);
  414|     99|    }
  415|     99|    if (buffer == NULL)
  ------------------
  |  Branch (415:9): [True: 0, False: 99]
  ------------------
  416|      0|        goto error;
  417|     99|    result = buffer;
  418|     99|    Py_DECREF(raw);
  ------------------
  |  |  430|     99|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  419|       |
  420|       |
  421|       |    /* if binary, returns the buffered file */
  422|     99|    if (binary) {
  ------------------
  |  Branch (422:9): [True: 99, False: 0]
  ------------------
  423|     99|        Py_DECREF(modeobj);
  ------------------
  |  |  430|     99|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|     99|        return result;
  425|     99|    }
  426|       |
  427|       |    /* wraps into a TextIOWrapper */
  428|      0|    wrapper = PyObject_CallFunction((PyObject *)state->PyTextIOWrapper_Type,
  429|      0|                                    "OsssO",
  430|      0|                                    buffer,
  431|      0|                                    encoding, errors, newline,
  432|      0|                                    line_buffering ? Py_True : Py_False);
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                                  line_buffering ? Py_True : Py_False);
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (432:37): [True: 0, False: 0]
  ------------------
  433|      0|    if (wrapper == NULL)
  ------------------
  |  Branch (433:9): [True: 0, False: 0]
  ------------------
  434|      0|        goto error;
  435|      0|    result = wrapper;
  436|      0|    Py_DECREF(buffer);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|       |
  438|      0|    if (PyObject_SetAttr(wrapper, &_Py_ID(mode), modeobj) < 0)
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (438:9): [True: 0, False: 0]
  ------------------
  439|      0|        goto error;
  440|      0|    Py_DECREF(modeobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  441|      0|    return result;
  442|       |
  443|      0|  error:
  444|      0|    if (result != NULL) {
  ------------------
  |  Branch (444:9): [True: 0, False: 0]
  ------------------
  445|      0|        PyObject *exc = PyErr_GetRaisedException();
  446|      0|        PyObject *close_result = PyObject_CallMethodNoArgs(result, &_Py_ID(close));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      0|        _PyErr_ChainExceptions1(exc);
  448|      0|        Py_XDECREF(close_result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  449|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|      0|    }
  451|      0|    Py_XDECREF(path_or_fd);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  452|      0|    Py_XDECREF(modeobj);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|       |    return NULL;
  454|      0|}
_iomodule.c:_io_open_code_impl:
  516|     93|{
  517|     93|    return PyFile_OpenCodeObject(path);
  518|     93|}
_iomodule.c:iomodule_exec:
  652|      2|{
  653|      2|    _PyIO_State *state = get_io_state(m);
  654|       |
  655|       |    /* DEFAULT_BUFFER_SIZE */
  656|      2|    if (PyModule_AddIntMacro(m, DEFAULT_BUFFER_SIZE) < 0)
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (656:9): [True: 0, False: 2]
  ------------------
  657|      0|        return -1;
  658|       |
  659|       |    /* UnsupportedOperation inherits from ValueError and OSError */
  660|      2|    state->unsupported_operation = PyObject_CallFunction(
  661|      2|        (PyObject *)&PyType_Type, "s(OO){}",
  662|      2|        "UnsupportedOperation", PyExc_OSError, PyExc_ValueError);
  663|      2|    if (state->unsupported_operation == NULL)
  ------------------
  |  Branch (663:9): [True: 0, False: 2]
  ------------------
  664|      0|        return -1;
  665|      2|    if (PyObject_SetAttrString(state->unsupported_operation,
  ------------------
  |  Branch (665:9): [True: 0, False: 2]
  ------------------
  666|      2|                               "__module__", &_Py_ID(io)) < 0)
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  667|      0|    {
  668|      0|        return -1;
  669|      0|    }
  670|      2|    if (PyModule_AddObjectRef(m, "UnsupportedOperation",
  ------------------
  |  Branch (670:9): [True: 0, False: 2]
  ------------------
  671|      2|                              state->unsupported_operation) < 0)
  672|      0|    {
  673|      0|        return -1;
  674|      0|    }
  675|       |
  676|       |    /* BlockingIOError, for compatibility */
  677|      2|    if (PyModule_AddObjectRef(m, "BlockingIOError",
  ------------------
  |  Branch (677:9): [True: 0, False: 2]
  ------------------
  678|      2|                              (PyObject *) PyExc_BlockingIOError) < 0) {
  679|      0|        return -1;
  680|      0|    }
  681|       |
  682|       |    // Base classes
  683|      2|    ADD_TYPE(m, state->PyIncrementalNewlineDecoder_Type, &_Py_nldecoder_spec, NULL);
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  684|      2|    ADD_TYPE(m, state->PyBytesIOBuffer_Type, &_Py_bytesiobuf_spec, NULL);
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  685|      2|    ADD_TYPE(m, state->PyIOBase_Type, &_Py_iobase_spec, NULL);
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  686|       |
  687|       |    // PyIOBase_Type subclasses
  688|      2|    ADD_TYPE(m, state->PyTextIOBase_Type, &_Py_textiobase_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  689|      2|             state->PyIOBase_Type);
  690|      2|    ADD_TYPE(m, state->PyBufferedIOBase_Type, &_Py_bufferediobase_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  691|      2|             state->PyIOBase_Type);
  692|      2|    ADD_TYPE(m, state->PyRawIOBase_Type, &_Py_rawiobase_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  693|      2|             state->PyIOBase_Type);
  694|       |
  695|       |    // PyBufferedIOBase_Type(PyIOBase_Type) subclasses
  696|      2|    ADD_TYPE(m, state->PyBytesIO_Type, &_Py_bytesio_spec, state->PyBufferedIOBase_Type);
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  697|      2|    ADD_TYPE(m, state->PyBufferedWriter_Type, &_Py_bufferedwriter_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  698|      2|             state->PyBufferedIOBase_Type);
  699|      2|    ADD_TYPE(m, state->PyBufferedReader_Type, &_Py_bufferedreader_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  700|      2|             state->PyBufferedIOBase_Type);
  701|      2|    ADD_TYPE(m, state->PyBufferedRWPair_Type, &_Py_bufferedrwpair_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  702|      2|             state->PyBufferedIOBase_Type);
  703|      2|    ADD_TYPE(m, state->PyBufferedRandom_Type, &_Py_bufferedrandom_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  704|      2|             state->PyBufferedIOBase_Type);
  705|       |
  706|       |    // PyRawIOBase_Type(PyIOBase_Type) subclasses
  707|      2|    ADD_TYPE(m, state->PyFileIO_Type, &_Py_fileio_spec, state->PyRawIOBase_Type);
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  708|       |
  709|       |#ifdef HAVE_WINDOWS_CONSOLE_IO
  710|       |    ADD_TYPE(m, state->PyWindowsConsoleIO_Type, &_Py_winconsoleio_spec,
  711|       |             state->PyRawIOBase_Type);
  712|       |#endif
  713|       |
  714|       |    // PyTextIOBase_Type(PyIOBase_Type) subclasses
  715|      2|    ADD_TYPE(m, state->PyStringIO_Type, &_Py_stringio_spec, state->PyTextIOBase_Type);
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  716|      2|    ADD_TYPE(m, state->PyTextIOWrapper_Type, &_Py_textiowrapper_spec,
  ------------------
  |  |  638|      2|#define ADD_TYPE(module, type, spec, base)                               \
  |  |  639|      2|do {                                                                     \
  |  |  640|      2|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec,        \
  |  |  641|      2|                                                    (PyObject *)base);   \
  |  |  642|      2|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (642:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  643|      0|        return -1;                                                       \
  |  |  644|      0|    }                                                                    \
  |  |  645|      2|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (645:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  646|      0|        return -1;                                                       \
  |  |  647|      0|    }                                                                    \
  |  |  648|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (648:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
  717|      2|             state->PyTextIOBase_Type);
  718|       |
  719|      2|#undef ADD_TYPE
  720|      2|    return 0;
  721|      2|}
_iomodule.c:iomodule_traverse:
  566|     20|iomodule_traverse(PyObject *mod, visitproc visit, void *arg) {
  567|     20|    _PyIO_State *state = get_io_state(mod);
  568|     20|    Py_VISIT(state->unsupported_operation);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  569|       |
  570|     20|    Py_VISIT(state->PyIOBase_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  571|     20|    Py_VISIT(state->PyIncrementalNewlineDecoder_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  572|     20|    Py_VISIT(state->PyRawIOBase_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  573|     20|    Py_VISIT(state->PyBufferedIOBase_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  574|     20|    Py_VISIT(state->PyBufferedRWPair_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  575|     20|    Py_VISIT(state->PyBufferedRandom_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  576|     20|    Py_VISIT(state->PyBufferedReader_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  577|     20|    Py_VISIT(state->PyBufferedWriter_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  578|     20|    Py_VISIT(state->PyBytesIOBuffer_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  579|     20|    Py_VISIT(state->PyBytesIO_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  580|     20|    Py_VISIT(state->PyFileIO_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  581|     20|    Py_VISIT(state->PyStringIO_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  582|     20|    Py_VISIT(state->PyTextIOBase_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  583|     20|    Py_VISIT(state->PyTextIOWrapper_Type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  584|       |#ifdef HAVE_WINDOWS_CONSOLE_IO
  585|       |    Py_VISIT(state->PyWindowsConsoleIO_Type);
  586|       |#endif
  587|     20|    return 0;
  588|     20|}

_iomodule.c:get_io_state:
  169|    121|{
  170|    121|    void *state = _PyModule_GetState(module);
  171|    121|    assert(state != NULL);
  ------------------
  |  Branch (171:5): [True: 121, False: 0]
  ------------------
  172|    121|    return (_PyIO_State *)state;
  173|    121|}
fileio.c:get_io_state_by_cls:
  177|     93|{
  178|     93|    void *state = _PyType_GetModuleState(cls);
  179|     93|    assert(state != NULL);
  ------------------
  |  Branch (179:5): [True: 93, False: 0]
  ------------------
  180|     93|    return (_PyIO_State *)state;
  181|     93|}
bufferedio.c:find_io_state_by_def:
  185|     99|{
  186|     99|    PyObject *mod = PyType_GetModuleByDef(type, &_PyIO_Module);
  187|     99|    assert(mod != NULL);
  ------------------
  |  Branch (187:5): [True: 99, False: 0]
  ------------------
  188|     99|    return get_io_state(mod);
  189|     99|}
bufferedio.c:get_io_state:
  169|     99|{
  170|     99|    void *state = _PyModule_GetState(module);
  171|     99|    assert(state != NULL);
  ------------------
  |  Branch (171:5): [True: 99, False: 0]
  ------------------
  172|     99|    return (_PyIO_State *)state;
  173|     99|}
textio.c:find_io_state_by_def:
  185|      6|{
  186|      6|    PyObject *mod = PyType_GetModuleByDef(type, &_PyIO_Module);
  187|      6|    assert(mod != NULL);
  ------------------
  |  Branch (187:5): [True: 6, False: 0]
  ------------------
  188|      6|    return get_io_state(mod);
  189|      6|}
textio.c:get_io_state:
  169|      6|{
  170|      6|    void *state = _PyModule_GetState(module);
  171|      6|    assert(state != NULL);
  ------------------
  |  Branch (171:5): [True: 6, False: 0]
  ------------------
  172|      6|    return (_PyIO_State *)state;
  173|      6|}

bufferedio.c:buffered_dealloc:
  426|     93|{
  427|     93|    buffered *self = buffered_CAST(op);
  ------------------
  |  |  267|     93|#define buffered_CAST(op)   ((buffered *)(op))
  ------------------
  428|     93|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|     93|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|     93|    self->finalizing = 1;
  430|     93|    if (_PyIOBase_finalize(op) < 0)
  ------------------
  |  Branch (430:9): [True: 0, False: 93]
  ------------------
  431|      0|        return;
  432|     93|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|     93|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|     93|    self->ok = 0;
  434|     93|    FT_CLEAR_WEAKREFS(op, self->weakreflist);
  ------------------
  |  |   47|     93|    do {                                            \
  |  |   48|     93|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|     93|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 93]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|     93|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  |  Branch (434:5): [True: 93, False: 0]
  ------------------
  435|     93|    if (self->buffer) {
  ------------------
  |  Branch (435:9): [True: 0, False: 93]
  ------------------
  436|      0|        PyMem_Free(self->buffer);
  437|      0|        self->buffer = NULL;
  438|      0|    }
  439|     93|    if (self->lock) {
  ------------------
  |  Branch (439:9): [True: 93, False: 0]
  ------------------
  440|     93|        PyThread_free_lock(self->lock);
  441|     93|        self->lock = NULL;
  442|     93|    }
  443|     93|    (void)buffered_clear(op);
  444|     93|    tp->tp_free(self);
  445|     93|    Py_DECREF(tp);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  446|     93|}
bufferedio.c:buffered_traverse:
  466|     60|{
  467|     60|    buffered *self = buffered_CAST(op);
  ------------------
  |  |  267|     60|#define buffered_CAST(op)   ((buffered *)(op))
  ------------------
  468|     60|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
  469|     60|    Py_VISIT(self->raw);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
  470|     60|    Py_VISIT(self->dict);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 60]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
  471|     60|    return 0;
  472|     60|}
bufferedio.c:buffered_clear:
  416|     93|{
  417|     93|    buffered *self = buffered_CAST(op);
  ------------------
  |  |  267|     93|#define buffered_CAST(op)   ((buffered *)(op))
  ------------------
  418|     93|    self->ok = 0;
  419|     93|    Py_CLEAR(self->raw);
  ------------------
  |  |  484|     93|    do { \
  |  |  485|     93|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     93|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     93|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     93|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     93|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     93|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 93, False: 0]
  |  |  ------------------
  |  |  488|     93|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     93|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     93|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     93|        } \
  |  |  491|     93|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  420|       |    Py_CLEAR(self->dict);
  ------------------
  |  |  484|     93|    do { \
  |  |  485|     93|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     93|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     93|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     93|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     93|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     93|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 93]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|     93|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  421|     93|    return 0;
  422|     93|}
bufferedio.c:buffered_flush_and_rewind_unlocked:
  909|  48.4k|{
  910|  48.4k|    PyObject *res;
  911|       |
  912|  48.4k|    res = _bufferedwriter_flush_unlocked(self);
  913|  48.4k|    if (res == NULL)
  ------------------
  |  Branch (913:9): [True: 0, False: 48.4k]
  ------------------
  914|      0|        return NULL;
  915|  48.4k|    Py_DECREF(res);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|       |
  917|  48.4k|    if (self->readable) {
  ------------------
  |  Branch (917:9): [True: 0, False: 48.4k]
  ------------------
  918|       |        /* Rewind the raw stream so that its position corresponds to
  919|       |           the current logical position. */
  920|      0|        Py_off_t n;
  921|      0|        n = _buffered_raw_seek(self, -RAW_OFFSET(self), 1);
  ------------------
  |  |  402|      0|    (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  385|      0|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  388|      0|    (self->writable && self->write_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (388:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (388:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  403|      0|        && self->raw_pos >= 0) ? self->raw_pos - self->pos : 0)
  |  |  ------------------
  |  |  |  Branch (403:12): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  922|      0|        _bufferedreader_reset_buf(self);
  923|      0|        if (n == -1)
  ------------------
  |  Branch (923:13): [True: 0, False: 0]
  ------------------
  924|      0|            return NULL;
  925|      0|    }
  926|  48.4k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  48.4k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  927|  48.4k|}
bufferedio.c:_bufferedwriter_flush_unlocked:
 2025|  48.4k|{
 2026|  48.4k|    Py_off_t n, rewind;
 2027|       |
 2028|  48.4k|    if (!VALID_WRITE_BUFFER(self) || self->write_pos == self->write_end)
  ------------------
  |  |  388|  96.9k|    (self->writable && self->write_end != -1)
  |  |  ------------------
  |  |  |  Branch (388:6): [True: 48.4k, False: 0]
  |  |  |  Branch (388:24): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2028:38): [True: 0, False: 48.4k]
  ------------------
 2029|      0|        goto end;
 2030|       |    /* First, rewind */
 2031|  48.4k|    rewind = RAW_OFFSET(self) + (self->pos - self->write_pos);
  ------------------
  |  |  402|  48.4k|    (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  385|  96.9k|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 48.4k]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  388|  48.4k|    (self->writable && self->write_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (388:6): [True: 48.4k, False: 0]
  |  |  |  |  |  Branch (388:24): [True: 48.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  403|  48.4k|        && self->raw_pos >= 0) ? self->raw_pos - self->pos : 0)
  |  |  ------------------
  |  |  |  Branch (403:12): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
 2032|  48.4k|    if (rewind != 0) {
  ------------------
  |  Branch (2032:9): [True: 0, False: 48.4k]
  ------------------
 2033|      0|        n = _buffered_raw_seek(self, -rewind, 1);
 2034|      0|        if (n < 0) {
  ------------------
  |  Branch (2034:13): [True: 0, False: 0]
  ------------------
 2035|      0|            goto error;
 2036|      0|        }
 2037|      0|        self->raw_pos -= rewind;
 2038|      0|    }
 2039|  96.9k|    while (self->write_pos < self->write_end) {
  ------------------
  |  Branch (2039:12): [True: 48.4k, False: 48.4k]
  ------------------
 2040|  48.4k|        n = _bufferedwriter_raw_write(self,
 2041|  48.4k|            self->buffer + self->write_pos,
 2042|  48.4k|            Py_SAFE_DOWNCAST(self->write_end - self->write_pos,
  ------------------
  |  |  247|  48.4k|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  48.4k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2043|  48.4k|                             Py_off_t, Py_ssize_t));
 2044|  48.4k|        if (n == -1) {
  ------------------
  |  Branch (2044:13): [True: 0, False: 48.4k]
  ------------------
 2045|      0|            goto error;
 2046|      0|        }
 2047|  48.4k|        else if (n == -2) {
  ------------------
  |  Branch (2047:18): [True: 0, False: 48.4k]
  ------------------
 2048|      0|            _set_BlockingIOError("write could not complete without blocking",
 2049|      0|                                 0);
 2050|      0|            goto error;
 2051|      0|        }
 2052|  48.4k|        self->write_pos += n;
 2053|  48.4k|        self->raw_pos = self->write_pos;
 2054|       |        /* Partial writes can return successfully when interrupted by a
 2055|       |           signal (see write(2)).  We must run signal handlers before
 2056|       |           blocking another time, possibly indefinitely. */
 2057|  48.4k|        if (PyErr_CheckSignals() < 0)
  ------------------
  |  Branch (2057:13): [True: 0, False: 48.4k]
  ------------------
 2058|      0|            goto error;
 2059|  48.4k|    }
 2060|       |
 2061|       |
 2062|  48.4k|end:
 2063|       |    /* This ensures that after return from this function,
 2064|       |       VALID_WRITE_BUFFER(self) returns false.
 2065|       |
 2066|       |       This is a required condition because when a tell() is called
 2067|       |       after flushing and if VALID_READ_BUFFER(self) is false, we need
 2068|       |       VALID_WRITE_BUFFER(self) to be false to have
 2069|       |       RAW_OFFSET(self) == 0.
 2070|       |
 2071|       |       Issue: https://bugs.python.org/issue32228 */
 2072|  48.4k|    _bufferedwriter_reset_buf(self);
 2073|  48.4k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  48.4k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2074|       |
 2075|      0|error:
 2076|       |    return NULL;
 2077|  48.4k|}
bufferedio.c:_bufferedwriter_raw_write:
 1978|  48.4k|{
 1979|  48.4k|    Py_buffer buf;
 1980|  48.4k|    PyObject *memobj, *res;
 1981|  48.4k|    Py_ssize_t n;
 1982|  48.4k|    int errnum;
 1983|       |    /* NOTE: the buffer needn't be released as its object is NULL. */
 1984|  48.4k|    if (PyBuffer_FillInfo(&buf, NULL, start, len, 1, PyBUF_CONTIG_RO) == -1)
  ------------------
  |  |  125|  48.4k|#define PyBUF_CONTIG_RO (PyBUF_ND)
  |  |  ------------------
  |  |  |  |  117|  48.4k|#define PyBUF_ND 0x0008
  |  |  ------------------
  ------------------
  |  Branch (1984:9): [True: 0, False: 48.4k]
  ------------------
 1985|      0|        return -1;
 1986|  48.4k|    memobj = PyMemoryView_FromBuffer(&buf);
 1987|  48.4k|    if (memobj == NULL)
  ------------------
  |  Branch (1987:9): [True: 0, False: 48.4k]
  ------------------
 1988|      0|        return -1;
 1989|       |    /* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals() when EINTR
 1990|       |       occurs so we needn't do it ourselves.
 1991|       |       We then retry writing, ignoring the signal if no handler has
 1992|       |       raised (see issue #10956).
 1993|       |    */
 1994|  48.4k|    do {
 1995|  48.4k|        errno = 0;
 1996|  48.4k|        res = PyObject_CallMethodOneArg(self->raw, &_Py_ID(write), memobj);
  ------------------
  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1997|  48.4k|        errnum = errno;
 1998|  48.4k|    } while (res == NULL && _PyIO_trap_eintr());
  ------------------
  |  Branch (1998:14): [True: 0, False: 48.4k]
  |  Branch (1998:29): [True: 0, False: 0]
  ------------------
 1999|  48.4k|    Py_DECREF(memobj);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2000|  48.4k|    if (res == NULL)
  ------------------
  |  Branch (2000:9): [True: 0, False: 48.4k]
  ------------------
 2001|      0|        return -1;
 2002|  48.4k|    if (res == Py_None) {
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2002:9): [True: 0, False: 48.4k]
  ------------------
 2003|       |        /* Non-blocking stream would have blocked. Special return code!
 2004|       |           Being paranoid we reset errno in case it is changed by code
 2005|       |           triggered by a decref.  errno is used by _set_BlockingIOError(). */
 2006|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2007|      0|        errno = errnum;
 2008|      0|        return -2;
 2009|      0|    }
 2010|  48.4k|    n = PyNumber_AsSsize_t(res, PyExc_ValueError);
 2011|  48.4k|    Py_DECREF(res);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2012|  48.4k|    if (n < 0 || n > len) {
  ------------------
  |  Branch (2012:9): [True: 0, False: 48.4k]
  |  Branch (2012:18): [True: 0, False: 48.4k]
  ------------------
 2013|      0|        PyErr_Format(PyExc_OSError,
 2014|      0|                     "raw write() returned invalid length %zd "
 2015|      0|                     "(should have been between 0 and %zd)", n, len);
 2016|      0|        return -1;
 2017|      0|    }
 2018|  48.4k|    if (n > 0 && self->abs_pos != -1)
  ------------------
  |  Branch (2018:9): [True: 48.4k, False: 0]
  |  Branch (2018:18): [True: 48.4k, False: 0]
  ------------------
 2019|  48.4k|        self->abs_pos += n;
 2020|  48.4k|    return n;
 2021|  48.4k|}
bufferedio.c:_bufferedwriter_reset_buf:
 1926|  48.4k|{
 1927|  48.4k|    self->write_pos = 0;
 1928|  48.4k|    self->write_end = -1;
 1929|  48.4k|}
bufferedio.c:_bufferedreader_reset_buf:
 1579|    188|{
 1580|    188|    self->read_end = -1;
 1581|    188|}
bufferedio.c:_io__Buffered_simple_flush_impl:
  515|     93|{
  516|     93|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|     93|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 93]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  517|     93|    return PyObject_CallMethodNoArgs(self->raw, &_Py_ID(flush));
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|     93|}
bufferedio.c:_io__Buffered_close_impl:
  556|     93|{
  557|     93|    PyObject *res = NULL;
  558|     93|    int r;
  559|       |
  560|     93|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|     93|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 93]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  561|     93|    if (!ENTER_BUFFERED(self)) {
  ------------------
  |  |  330|     93|    ( (PyThread_acquire_lock(self->lock, 0) ? \
  |  |  ------------------
  |  |  |  Branch (330:7): [True: 93, False: 0]
  |  |  |  Branch (330:8): [True: 93, False: 0]
  |  |  ------------------
  |  |  331|     93|       1 : _enter_buffered_busy(self)) \
  |  |  332|     93|     && (self->owner = PyThread_get_thread_ident(), 1) )
  |  |  ------------------
  |  |  |  Branch (332:9): [True: 93, False: 0]
  |  |  ------------------
  ------------------
  562|      0|        return NULL;
  563|      0|    }
  564|       |    /* gh-138720: Use IS_CLOSED to match flush CHECK_CLOSED. */
  565|     93|    r = IS_CLOSED(self);
  ------------------
  |  |  365|     93|    (!self->buffer ? 1 : \
  |  |  ------------------
  |  |  |  Branch (365:6): [True: 0, False: 93]
  |  |  ------------------
  |  |  366|     93|    (self->fast_closed_checks \
  |  |  ------------------
  |  |  |  Branch (366:6): [True: 93, False: 0]
  |  |  ------------------
  |  |  367|     93|     ? _PyFileIO_closed(self->raw) \
  |  |  368|     93|     : buffered_closed(self)))
  ------------------
  566|     93|    if (r < 0)
  ------------------
  |  Branch (566:9): [True: 0, False: 93]
  ------------------
  567|      0|        goto end;
  568|     93|    if (r > 0) {
  ------------------
  |  Branch (568:9): [True: 0, False: 93]
  ------------------
  569|      0|        res = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|      0|        goto end;
  571|      0|    }
  572|       |
  573|     93|    if (self->finalizing) {
  ------------------
  |  Branch (573:9): [True: 0, False: 93]
  ------------------
  574|      0|        PyObject *r = _io__Buffered__dealloc_warn_impl(self, (PyObject *)self);
  575|      0|        if (r)
  ------------------
  |  Branch (575:13): [True: 0, False: 0]
  ------------------
  576|      0|            Py_DECREF(r);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  577|      0|        else
  578|      0|            PyErr_Clear();
  579|      0|    }
  580|       |    /* flush() will most probably re-take the lock, so drop it first */
  581|     93|    LEAVE_BUFFERED(self)
  ------------------
  |  |  335|     93|    do { \
  |  |  336|     93|        self->owner = 0; \
  |  |  337|     93|        PyThread_release_lock(self->lock); \
  |  |  338|     93|    } while(0);
  |  |  ------------------
  |  |  |  Branch (338:13): [Folded, False: 93]
  |  |  ------------------
  ------------------
  582|     93|    r = _PyFile_Flush((PyObject *)self);
  583|     93|    if (!ENTER_BUFFERED(self)) {
  ------------------
  |  |  330|     93|    ( (PyThread_acquire_lock(self->lock, 0) ? \
  |  |  ------------------
  |  |  |  Branch (330:7): [True: 93, False: 0]
  |  |  |  Branch (330:8): [True: 93, False: 0]
  |  |  ------------------
  |  |  331|     93|       1 : _enter_buffered_busy(self)) \
  |  |  332|     93|     && (self->owner = PyThread_get_thread_ident(), 1) )
  |  |  ------------------
  |  |  |  Branch (332:9): [True: 93, False: 0]
  |  |  ------------------
  ------------------
  584|      0|        return NULL;
  585|      0|    }
  586|     93|    PyObject *exc = NULL;
  587|     93|    if (r < 0) {
  ------------------
  |  Branch (587:9): [True: 0, False: 93]
  ------------------
  588|      0|        exc = PyErr_GetRaisedException();
  589|      0|    }
  590|       |
  591|     93|    res = PyObject_CallMethodNoArgs(self->raw, &_Py_ID(close));
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  592|       |
  593|     93|    if (self->buffer) {
  ------------------
  |  Branch (593:9): [True: 93, False: 0]
  ------------------
  594|     93|        PyMem_Free(self->buffer);
  595|     93|        self->buffer = NULL;
  596|     93|    }
  597|       |
  598|     93|    if (exc != NULL) {
  ------------------
  |  Branch (598:9): [True: 0, False: 93]
  ------------------
  599|      0|        _PyErr_ChainExceptions1(exc);
  600|      0|        Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  601|      0|    }
  602|       |
  603|     93|    self->read_end = 0;
  604|     93|    self->pos = 0;
  605|       |
  606|     93|end:
  607|     93|    LEAVE_BUFFERED(self)
  ------------------
  |  |  335|     93|    do { \
  |  |  336|     93|        self->owner = 0; \
  |  |  337|     93|        PyThread_release_lock(self->lock); \
  |  |  338|     93|    } while(0);
  |  |  ------------------
  |  |  |  Branch (338:13): [Folded, False: 93]
  |  |  ------------------
  ------------------
  608|     93|    return res;
  609|     93|}
bufferedio.c:_io__Buffered_seekable_impl:
  642|      6|{
  643|      6|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|      6|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 6]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  644|      6|    return PyObject_CallMethodNoArgs(self->raw, &_Py_ID(seekable));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  645|      6|}
bufferedio.c:_io__Buffered_readable_impl:
  655|      2|{
  656|      2|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|      2|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  657|      2|    return PyObject_CallMethodNoArgs(self->raw, &_Py_ID(readable));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  658|      2|}
bufferedio.c:_io__Buffered_read_impl:
  994|     93|{
  995|     93|    PyObject *res;
  996|       |
  997|     93|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|     93|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 93]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  998|     93|    if (n < -1) {
  ------------------
  |  Branch (998:9): [True: 0, False: 93]
  ------------------
  999|      0|        PyErr_SetString(PyExc_ValueError,
 1000|      0|                        "read length must be non-negative or -1");
 1001|      0|        return NULL;
 1002|      0|    }
 1003|       |
 1004|     93|    CHECK_CLOSED(self, "read of closed file")
  ------------------
  |  |  371|     93|    do { \
  |  |  372|     93|        int _closed = IS_CLOSED(self); \
  |  |  ------------------
  |  |  |  |  365|     93|    (!self->buffer ? 1 : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (365:6): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  |  |  366|     93|    (self->fast_closed_checks \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (366:6): [True: 93, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  367|     93|     ? _PyFileIO_closed(self->raw) \
  |  |  |  |  368|     93|     : buffered_closed(self)))
  |  |  ------------------
  |  |  373|     93|        if (_closed < 0) { \
  |  |  ------------------
  |  |  |  Branch (373:13): [True: 0, False: 93]
  |  |  ------------------
  |  |  374|      0|            return NULL; \
  |  |  375|      0|        } \
  |  |  376|     93|        if (_closed && \
  |  |  ------------------
  |  |  |  Branch (376:13): [True: 0, False: 93]
  |  |  ------------------
  |  |  377|     93|            (Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t) == 0)) \
  |  |  ------------------
  |  |  |  |  247|      0|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (377:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  378|     93|        { \
  |  |  379|      0|            PyErr_SetString(PyExc_ValueError, error_msg); \
  |  |  380|      0|            return NULL; \
  |  |  381|      0|        } \
  |  |  382|     93|    } while (0);
  |  |  ------------------
  |  |  |  Branch (382:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
 1005|       |
 1006|     93|    if (n == -1) {
  ------------------
  |  Branch (1006:9): [True: 93, False: 0]
  ------------------
 1007|       |        /* The number of bytes is unspecified, read until the end of stream */
 1008|     93|        if (!ENTER_BUFFERED(self))
  ------------------
  |  |  330|     93|    ( (PyThread_acquire_lock(self->lock, 0) ? \
  |  |  ------------------
  |  |  |  Branch (330:7): [True: 93, False: 0]
  |  |  |  Branch (330:8): [True: 93, False: 0]
  |  |  ------------------
  |  |  331|     93|       1 : _enter_buffered_busy(self)) \
  |  |  332|     93|     && (self->owner = PyThread_get_thread_ident(), 1) )
  |  |  ------------------
  |  |  |  Branch (332:9): [True: 93, False: 0]
  |  |  ------------------
  ------------------
 1009|      0|            return NULL;
 1010|     93|        res = _bufferedreader_read_all(self);
 1011|     93|    }
 1012|      0|    else {
 1013|      0|        res = _bufferedreader_read_fast(self, n);
 1014|      0|        if (res != Py_None)
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1014:13): [True: 0, False: 0]
  ------------------
 1015|      0|            return res;
 1016|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|      0|        if (!ENTER_BUFFERED(self))
  ------------------
  |  |  330|      0|    ( (PyThread_acquire_lock(self->lock, 0) ? \
  |  |  ------------------
  |  |  |  Branch (330:7): [True: 0, False: 0]
  |  |  |  Branch (330:8): [True: 0, False: 0]
  |  |  ------------------
  |  |  331|      0|       1 : _enter_buffered_busy(self)) \
  |  |  332|      0|     && (self->owner = PyThread_get_thread_ident(), 1) )
  |  |  ------------------
  |  |  |  Branch (332:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1018|      0|            return NULL;
 1019|      0|        res = _bufferedreader_read_generic(self, n);
 1020|      0|    }
 1021|       |
 1022|     93|    LEAVE_BUFFERED(self)
  ------------------
  |  |  335|     93|    do { \
  |  |  336|     93|        self->owner = 0; \
  |  |  337|     93|        PyThread_release_lock(self->lock); \
  |  |  338|     93|    } while(0);
  |  |  ------------------
  |  |  |  Branch (338:13): [Folded, False: 93]
  |  |  ------------------
  ------------------
 1023|     93|    return res;
 1024|     93|}
bufferedio.c:_bufferedreader_read_all:
 1691|     93|{
 1692|     93|    Py_ssize_t current_size;
 1693|     93|    PyObject *res = NULL, *data = NULL, *tmp = NULL, *chunks = NULL, *readall;
 1694|       |
 1695|       |    /* First copy what we have in the current buffer. */
 1696|     93|    current_size = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t);
  ------------------
  |  |  247|     93|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|    558|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (34:47): [True: 93, False: 0]
  |  |  |  |  |  Branch (34:47): [True: 0, False: 93]
  |  |  |  |  |  Branch (34:47): [True: 93, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1697|     93|    if (current_size) {
  ------------------
  |  Branch (1697:9): [True: 0, False: 93]
  ------------------
 1698|      0|        data = PyBytes_FromStringAndSize(
 1699|      0|            self->buffer + self->pos, current_size);
 1700|      0|        if (data == NULL)
  ------------------
  |  Branch (1700:13): [True: 0, False: 0]
  ------------------
 1701|      0|            return NULL;
 1702|      0|        self->pos += current_size;
 1703|      0|    }
 1704|       |    /* We're going past the buffer's bounds, flush it */
 1705|     93|    if (self->writable) {
  ------------------
  |  Branch (1705:9): [True: 0, False: 93]
  ------------------
 1706|      0|        tmp = buffered_flush_and_rewind_unlocked(self);
 1707|      0|        if (tmp == NULL)
  ------------------
  |  Branch (1707:13): [True: 0, False: 0]
  ------------------
 1708|      0|            goto cleanup;
 1709|      0|        Py_CLEAR(tmp);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1710|      0|    }
 1711|     93|    _bufferedreader_reset_buf(self);
 1712|       |
 1713|     93|    if (PyObject_GetOptionalAttr(self->raw, &_Py_ID(readall), &readall) < 0) {
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1713:9): [True: 0, False: 93]
  ------------------
 1714|      0|        goto cleanup;
 1715|      0|    }
 1716|     93|    if (readall) {
  ------------------
  |  Branch (1716:9): [True: 93, False: 0]
  ------------------
 1717|     93|        tmp = _PyObject_CallNoArgs(readall);
 1718|     93|        Py_DECREF(readall);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1719|     93|        if (tmp == NULL)
  ------------------
  |  Branch (1719:13): [True: 0, False: 93]
  ------------------
 1720|      0|            goto cleanup;
 1721|     93|        if (tmp != Py_None && !PyBytes_Check(tmp)) {
  ------------------
  |  |  616|    186|#  define Py_None (&_Py_NoneStruct)
  ------------------
                      if (tmp != Py_None && !PyBytes_Check(tmp)) {
  ------------------
  |  |   28|     93|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     93|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1721:13): [True: 93, False: 0]
  |  Branch (1721:31): [True: 0, False: 93]
  ------------------
 1722|      0|            PyErr_SetString(PyExc_TypeError, "readall() should return bytes");
 1723|      0|            goto cleanup;
 1724|      0|        }
 1725|     93|        if (current_size == 0) {
  ------------------
  |  Branch (1725:13): [True: 93, False: 0]
  ------------------
 1726|     93|            res = tmp;
 1727|     93|        } else {
 1728|      0|            if (tmp != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1728:17): [True: 0, False: 0]
  ------------------
 1729|      0|                PyBytes_Concat(&data, tmp);
 1730|      0|            }
 1731|      0|            res = data;
 1732|      0|        }
 1733|     93|        goto cleanup;
 1734|     93|    }
 1735|       |
 1736|      0|    chunks = PyList_New(0);
 1737|      0|    if (chunks == NULL)
  ------------------
  |  Branch (1737:9): [True: 0, False: 0]
  ------------------
 1738|      0|        goto cleanup;
 1739|       |
 1740|      0|    while (1) {
  ------------------
  |  Branch (1740:12): [True: 0, Folded]
  ------------------
 1741|      0|        if (data) {
  ------------------
  |  Branch (1741:13): [True: 0, False: 0]
  ------------------
 1742|      0|            if (PyList_Append(chunks, data) < 0)
  ------------------
  |  Branch (1742:17): [True: 0, False: 0]
  ------------------
 1743|      0|                goto cleanup;
 1744|      0|            Py_CLEAR(data);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1745|      0|        }
 1746|       |
 1747|       |        /* Read until EOF or until read() would block. */
 1748|      0|        data = PyObject_CallMethodNoArgs(self->raw, &_Py_ID(read));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1749|      0|        if (data == NULL)
  ------------------
  |  Branch (1749:13): [True: 0, False: 0]
  ------------------
 1750|      0|            goto cleanup;
 1751|      0|        if (data != Py_None && !PyBytes_Check(data)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
                      if (data != Py_None && !PyBytes_Check(data)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1751:13): [True: 0, False: 0]
  |  Branch (1751:32): [True: 0, False: 0]
  ------------------
 1752|      0|            PyErr_SetString(PyExc_TypeError, "read() should return bytes");
 1753|      0|            goto cleanup;
 1754|      0|        }
 1755|      0|        if (data == Py_None || PyBytes_GET_SIZE(data) == 0) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
                      if (data == Py_None || PyBytes_GET_SIZE(data) == 0) {
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1755:13): [True: 0, False: 0]
  |  Branch (1755:32): [True: 0, False: 0]
  ------------------
 1756|      0|            if (current_size == 0) {
  ------------------
  |  Branch (1756:17): [True: 0, False: 0]
  ------------------
 1757|      0|                res = data;
 1758|      0|                goto cleanup;
 1759|      0|            }
 1760|      0|            else {
 1761|      0|                tmp = PyBytes_Join((PyObject *)&_Py_SINGLETON(bytes_empty), chunks);
  ------------------
  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
 1762|      0|                res = tmp;
 1763|      0|                goto cleanup;
 1764|      0|            }
 1765|      0|        }
 1766|      0|        current_size += PyBytes_GET_SIZE(data);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1767|      0|        if (self->abs_pos != -1)
  ------------------
  |  Branch (1767:13): [True: 0, False: 0]
  ------------------
 1768|      0|            self->abs_pos += PyBytes_GET_SIZE(data);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1769|      0|    }
 1770|     93|cleanup:
 1771|       |    /* res is either NULL or a borrowed ref */
 1772|     93|    Py_XINCREF(res);
  ------------------
  |  |  514|     93|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1773|     93|    Py_XDECREF(data);
  ------------------
  |  |  524|     93|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1774|     93|    Py_XDECREF(tmp);
  ------------------
  |  |  524|     93|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1775|     93|    Py_XDECREF(chunks);
  ------------------
  |  |  524|     93|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1776|     93|    return res;
 1777|      0|}
bufferedio.c:_buffered_raw_tell:
  785|    103|{
  786|    103|    Py_off_t n;
  787|    103|    PyObject *res;
  788|    103|    res = PyObject_CallMethodNoArgs(self->raw, &_Py_ID(tell));
  ------------------
  |  |  936|    103|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    103|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    103|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|    103|    if (res == NULL)
  ------------------
  |  Branch (789:9): [True: 0, False: 103]
  ------------------
  790|      0|        return -1;
  791|    103|    n = PyNumber_AsOff_t(res, PyExc_ValueError);
  792|    103|    Py_DECREF(res);
  ------------------
  |  |  430|    103|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|    103|    if (n < 0) {
  ------------------
  |  Branch (793:9): [True: 0, False: 103]
  ------------------
  794|      0|        if (!PyErr_Occurred())
  ------------------
  |  Branch (794:13): [True: 0, False: 0]
  ------------------
  795|      0|            PyErr_Format(PyExc_OSError,
  796|      0|                         "Raw stream returned invalid position %" PY_PRIdOFF,
  ------------------
  |  |  114|      0|# define PY_PRIdOFF         "zd"
  ------------------
  797|      0|                         (PY_OFF_T_COMPAT)n);
  798|      0|        return -1;
  799|      0|    }
  800|    103|    self->abs_pos = n;
  801|    103|    return n;
  802|    103|}
bufferedio.c:_io__Buffered_tell_impl:
 1337|      4|{
 1338|      4|    Py_off_t pos;
 1339|       |
 1340|      4|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|      4|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 4]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
 1341|      4|    pos = _buffered_raw_tell(self);
 1342|      4|    if (pos == -1)
  ------------------
  |  Branch (1342:9): [True: 0, False: 4]
  ------------------
 1343|      0|        return NULL;
 1344|      4|    pos -= RAW_OFFSET(self);
  ------------------
  |  |  402|      4|    (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  385|      8|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 4]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  388|      4|    (self->writable && self->write_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (388:6): [True: 4, False: 0]
  |  |  |  |  |  Branch (388:24): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  403|      4|        && self->raw_pos >= 0) ? self->raw_pos - self->pos : 0)
  |  |  ------------------
  |  |  |  Branch (403:12): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1345|       |
 1346|       |    // GH-95782
 1347|      4|    if (pos < 0)
  ------------------
  |  Branch (1347:9): [True: 0, False: 4]
  ------------------
 1348|      0|        pos = 0;
 1349|       |
 1350|      4|    return PyLong_FromOff_t(pos);
  ------------------
  |  |  110|      4|# define PyLong_FromOff_t   PyLong_FromSsize_t
  ------------------
 1351|      4|}
bufferedio.c:_io__Buffered_closed_get_impl:
  543|    186|{
  544|    186|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|    186|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 186]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  545|    186|    return PyObject_GetAttr(self->raw, &_Py_ID(closed));
  ------------------
  |  |  936|    186|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    186|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    186|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|    186|}
bufferedio.c:_io_BufferedReader___init___impl:
 1595|     95|{
 1596|     95|    self->ok = 0;
 1597|     95|    self->detached = 0;
 1598|       |
 1599|     95|    _PyIO_State *state = find_io_state_by_def(Py_TYPE(self));
  ------------------
  |  |  213|     95|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1600|     95|    if (_PyIOBase_check_readable(state, raw, Py_True) == NULL) {
  ------------------
  |  |   26|     95|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1600:9): [True: 0, False: 95]
  ------------------
 1601|      0|        return -1;
 1602|      0|    }
 1603|       |
 1604|     95|    Py_XSETREF(self->raw, Py_NewRef(raw));
  ------------------
  |  |  376|     95|    do { \
  |  |  377|     95|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     95|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     95|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     95|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     95|        *_tmp_dst_ptr = (src); \
  |  |  380|     95|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     95|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     95|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 95]
  |  |  ------------------
  ------------------
 1605|     95|    self->buffer_size = buffer_size;
 1606|     95|    self->readable = 1;
 1607|     95|    self->writable = 0;
 1608|       |
 1609|     95|    if (_buffered_init(self) < 0)
  ------------------
  |  Branch (1609:9): [True: 0, False: 95]
  ------------------
 1610|      0|        return -1;
 1611|     95|    _bufferedreader_reset_buf(self);
 1612|       |
 1613|     95|    self->fast_closed_checks = (
 1614|     95|        Py_IS_TYPE(self, state->PyBufferedReader_Type) &&
  ------------------
  |  |  215|    190|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 95, False: 0]
  |  |  ------------------
  ------------------
 1615|     95|        Py_IS_TYPE(raw, state->PyFileIO_Type)
  ------------------
  |  |  215|     95|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 95, False: 0]
  |  |  ------------------
  ------------------
 1616|     95|    );
 1617|       |
 1618|     95|    self->ok = 1;
 1619|     95|    return 0;
 1620|     95|}
bufferedio.c:_buffered_init:
  839|     99|{
  840|     99|    Py_ssize_t n;
  841|     99|    if (self->buffer_size <= 0) {
  ------------------
  |  Branch (841:9): [True: 0, False: 99]
  ------------------
  842|      0|        PyErr_SetString(PyExc_ValueError,
  843|      0|            "buffer size must be strictly positive");
  844|      0|        return -1;
  845|      0|    }
  846|     99|    if (self->buffer)
  ------------------
  |  Branch (846:9): [True: 0, False: 99]
  ------------------
  847|      0|        PyMem_Free(self->buffer);
  848|     99|    self->buffer = PyMem_Malloc(self->buffer_size);
  849|     99|    if (self->buffer == NULL) {
  ------------------
  |  Branch (849:9): [True: 0, False: 99]
  ------------------
  850|      0|        PyErr_NoMemory();
  851|      0|        return -1;
  852|      0|    }
  853|     99|    if (self->lock)
  ------------------
  |  Branch (853:9): [True: 0, False: 99]
  ------------------
  854|      0|        PyThread_free_lock(self->lock);
  855|     99|    self->lock = PyThread_allocate_lock();
  856|     99|    if (self->lock == NULL) {
  ------------------
  |  Branch (856:9): [True: 0, False: 99]
  ------------------
  857|      0|        PyErr_SetString(PyExc_RuntimeError, "can't allocate read lock");
  858|      0|        return -1;
  859|      0|    }
  860|     99|    self->owner = 0;
  861|       |    /* Find out whether buffer_size is a power of 2 */
  862|       |    /* XXX is this optimization useful? */
  863|  1.78k|    for (n = self->buffer_size - 1; n & 1; n >>= 1)
  ------------------
  |  Branch (863:37): [True: 1.68k, False: 99]
  ------------------
  864|  1.68k|        ;
  865|     99|    if (n == 0)
  ------------------
  |  Branch (865:9): [True: 99, False: 0]
  ------------------
  866|     99|        self->buffer_mask = self->buffer_size - 1;
  867|      0|    else
  868|      0|        self->buffer_mask = 0;
  869|     99|    if (_buffered_raw_tell(self) == -1)
  ------------------
  |  Branch (869:9): [True: 0, False: 99]
  ------------------
  870|      0|        PyErr_Clear();
  871|     99|    return 0;
  872|     99|}
bufferedio.c:_io__Buffered_writable_impl:
  668|      4|{
  669|      4|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|      4|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 4]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  670|      4|    return PyObject_CallMethodNoArgs(self->raw, &_Py_ID(writable));
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  671|      4|}
bufferedio.c:_io_BufferedWriter_write_impl:
 2089|  48.4k|{
 2090|  48.4k|    PyObject *res = NULL;
 2091|  48.4k|    Py_ssize_t written, avail, remaining;
 2092|  48.4k|    Py_off_t offset;
 2093|  48.4k|    int r;
 2094|       |
 2095|  48.4k|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|  48.4k|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 48.4k]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
 2096|       |
 2097|  48.4k|    if (!ENTER_BUFFERED(self))
  ------------------
  |  |  330|  48.4k|    ( (PyThread_acquire_lock(self->lock, 0) ? \
  |  |  ------------------
  |  |  |  Branch (330:7): [True: 48.4k, False: 0]
  |  |  |  Branch (330:8): [True: 48.4k, False: 0]
  |  |  ------------------
  |  |  331|  48.4k|       1 : _enter_buffered_busy(self)) \
  |  |  332|  48.4k|     && (self->owner = PyThread_get_thread_ident(), 1) )
  |  |  ------------------
  |  |  |  Branch (332:9): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
 2098|      0|        return NULL;
 2099|       |
 2100|       |    /* Issue #31976: Check for closed file after acquiring the lock. Another
 2101|       |       thread could be holding the lock while closing the file. */
 2102|  48.4k|    r = IS_CLOSED(self);
  ------------------
  |  |  365|  48.4k|    (!self->buffer ? 1 : \
  |  |  ------------------
  |  |  |  Branch (365:6): [True: 0, False: 48.4k]
  |  |  ------------------
  |  |  366|  48.4k|    (self->fast_closed_checks \
  |  |  ------------------
  |  |  |  Branch (366:6): [True: 48.4k, False: 0]
  |  |  ------------------
  |  |  367|  48.4k|     ? _PyFileIO_closed(self->raw) \
  |  |  368|  48.4k|     : buffered_closed(self)))
  ------------------
 2103|  48.4k|    if (r < 0) {
  ------------------
  |  Branch (2103:9): [True: 0, False: 48.4k]
  ------------------
 2104|      0|        goto error;
 2105|      0|    }
 2106|  48.4k|    if (r > 0) {
  ------------------
  |  Branch (2106:9): [True: 0, False: 48.4k]
  ------------------
 2107|      0|        PyErr_SetString(PyExc_ValueError, "write to closed file");
 2108|      0|        goto error;
 2109|      0|    }
 2110|       |
 2111|       |    /* Fast path: the data to write can be fully buffered. */
 2112|  48.4k|    if (!VALID_READ_BUFFER(self) && !VALID_WRITE_BUFFER(self)) {
  ------------------
  |  |  385|  96.9k|    (self->readable && self->read_end != -1)
  |  |  ------------------
  |  |  |  Branch (385:6): [True: 0, False: 48.4k]
  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                  if (!VALID_READ_BUFFER(self) && !VALID_WRITE_BUFFER(self)) {
  ------------------
  |  |  388|  48.4k|    (self->writable && self->write_end != -1)
  |  |  ------------------
  |  |  |  Branch (388:6): [True: 48.4k, False: 0]
  |  |  |  Branch (388:24): [True: 0, False: 48.4k]
  |  |  ------------------
  ------------------
 2113|  48.4k|        self->pos = 0;
 2114|  48.4k|        self->raw_pos = 0;
 2115|  48.4k|    }
 2116|  48.4k|    avail = Py_SAFE_DOWNCAST(self->buffer_size - self->pos, Py_off_t, Py_ssize_t);
  ------------------
  |  |  247|  48.4k|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  48.4k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2117|  48.4k|    if (buffer->len <= avail && buffer->len < self->buffer_size) {
  ------------------
  |  Branch (2117:9): [True: 48.4k, False: 0]
  |  Branch (2117:33): [True: 48.4k, False: 0]
  ------------------
 2118|  48.4k|        memcpy(self->buffer + self->pos, buffer->buf, buffer->len);
 2119|  48.4k|        if (!VALID_WRITE_BUFFER(self) || self->write_pos > self->pos) {
  ------------------
  |  |  388|  96.9k|    (self->writable && self->write_end != -1)
  |  |  ------------------
  |  |  |  Branch (388:6): [True: 48.4k, False: 0]
  |  |  |  Branch (388:24): [True: 0, False: 48.4k]
  |  |  ------------------
  ------------------
  |  Branch (2119:42): [True: 0, False: 0]
  ------------------
 2120|  48.4k|            self->write_pos = self->pos;
 2121|  48.4k|        }
 2122|  48.4k|        ADJUST_POSITION(self, self->pos + buffer->len);
  ------------------
  |  |  391|  48.4k|    do { \
  |  |  392|  48.4k|        self->pos = _new_pos; \
  |  |  393|  48.4k|        if (VALID_READ_BUFFER(self) && self->read_end < self->pos) \
  |  |  ------------------
  |  |  |  |  385|  96.9k|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 48.4k]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (393:40): [True: 0, False: 0]
  |  |  ------------------
  |  |  394|  48.4k|            self->read_end = self->pos; \
  |  |  395|  48.4k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (395:13): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
 2123|  48.4k|        if (self->pos > self->write_end)
  ------------------
  |  Branch (2123:13): [True: 48.4k, False: 0]
  ------------------
 2124|  48.4k|            self->write_end = self->pos;
 2125|  48.4k|        written = buffer->len;
 2126|  48.4k|        goto end;
 2127|  48.4k|    }
 2128|       |
 2129|       |    /* First write the current buffer */
 2130|      0|    res = _bufferedwriter_flush_unlocked(self);
 2131|      0|    if (res == NULL) {
  ------------------
  |  Branch (2131:9): [True: 0, False: 0]
  ------------------
 2132|      0|        Py_ssize_t *w = _buffered_check_blocking_error();
 2133|      0|        if (w == NULL)
  ------------------
  |  Branch (2133:13): [True: 0, False: 0]
  ------------------
 2134|      0|            goto error;
 2135|      0|        if (self->readable)
  ------------------
  |  Branch (2135:13): [True: 0, False: 0]
  ------------------
 2136|      0|            _bufferedreader_reset_buf(self);
 2137|       |        /* Make some place by shifting the buffer. */
 2138|      0|        assert(VALID_WRITE_BUFFER(self));
  ------------------
  |  Branch (2138:9): [True: 0, False: 0]
  |  Branch (2138:9): [True: 0, False: 0]
  ------------------
 2139|      0|        memmove(self->buffer, self->buffer + self->write_pos,
 2140|      0|                Py_SAFE_DOWNCAST(self->write_end - self->write_pos,
  ------------------
  |  |  247|      0|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2141|      0|                                 Py_off_t, Py_ssize_t));
 2142|      0|        self->write_end -= self->write_pos;
 2143|      0|        self->raw_pos -= self->write_pos;
 2144|      0|        self->pos -= self->write_pos;
 2145|      0|        self->write_pos = 0;
 2146|      0|        avail = Py_SAFE_DOWNCAST(self->buffer_size - self->write_end,
  ------------------
  |  |  247|      0|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2147|      0|                                 Py_off_t, Py_ssize_t);
 2148|      0|        if (buffer->len <= avail) {
  ------------------
  |  Branch (2148:13): [True: 0, False: 0]
  ------------------
 2149|       |            /* Everything can be buffered */
 2150|      0|            PyErr_Clear();
 2151|      0|            memcpy(self->buffer + self->write_end, buffer->buf, buffer->len);
 2152|      0|            self->write_end += buffer->len;
 2153|      0|            self->pos += buffer->len;
 2154|      0|            written = buffer->len;
 2155|      0|            goto end;
 2156|      0|        }
 2157|       |        /* Buffer as much as possible. */
 2158|      0|        memcpy(self->buffer + self->write_end, buffer->buf, avail);
 2159|      0|        self->write_end += avail;
 2160|      0|        self->pos += avail;
 2161|       |        /* XXX Modifying the existing exception e using the pointer w
 2162|       |           will change e.characters_written but not e.args[2].
 2163|       |           Therefore we just replace with a new error. */
 2164|      0|        _set_BlockingIOError("write could not complete without blocking",
 2165|      0|                             avail);
 2166|      0|        goto error;
 2167|      0|    }
 2168|      0|    Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2169|       |
 2170|       |    /* Adjust the raw stream position if it is away from the logical stream
 2171|       |       position. This happens if the read buffer has been filled but not
 2172|       |       modified (and therefore _bufferedwriter_flush_unlocked() didn't rewind
 2173|       |       the raw stream by itself).
 2174|       |       Fixes issue #6629.
 2175|       |    */
 2176|      0|    offset = RAW_OFFSET(self);
  ------------------
  |  |  402|      0|    (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  385|      0|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (((VALID_READ_BUFFER(self) || VALID_WRITE_BUFFER(self)) \
  |  |  ------------------
  |  |  |  |  388|      0|    (self->writable && self->write_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (388:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (388:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  403|      0|        && self->raw_pos >= 0) ? self->raw_pos - self->pos : 0)
  |  |  ------------------
  |  |  |  Branch (403:12): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2177|      0|    if (offset != 0) {
  ------------------
  |  Branch (2177:9): [True: 0, False: 0]
  ------------------
 2178|      0|        if (_buffered_raw_seek(self, -offset, 1) < 0)
  ------------------
  |  Branch (2178:13): [True: 0, False: 0]
  ------------------
 2179|      0|            goto error;
 2180|      0|        self->raw_pos -= offset;
 2181|      0|    }
 2182|       |
 2183|       |    /* Then write buf itself. At this point the buffer has been emptied. */
 2184|      0|    remaining = buffer->len;
 2185|      0|    written = 0;
 2186|      0|    while (remaining >= self->buffer_size) {
  ------------------
  |  Branch (2186:12): [True: 0, False: 0]
  ------------------
 2187|      0|        Py_ssize_t n = _bufferedwriter_raw_write(
 2188|      0|            self, (char *) buffer->buf + written, buffer->len - written);
 2189|      0|        if (n == -1) {
  ------------------
  |  Branch (2189:13): [True: 0, False: 0]
  ------------------
 2190|      0|            goto error;
 2191|      0|        } else if (n == -2) {
  ------------------
  |  Branch (2191:20): [True: 0, False: 0]
  ------------------
 2192|       |            /* Write failed because raw file is non-blocking */
 2193|      0|            if (remaining > self->buffer_size) {
  ------------------
  |  Branch (2193:17): [True: 0, False: 0]
  ------------------
 2194|       |                /* Can't buffer everything, still buffer as much as possible */
 2195|      0|                memcpy(self->buffer,
 2196|      0|                       (char *) buffer->buf + written, self->buffer_size);
 2197|      0|                self->raw_pos = 0;
 2198|      0|                ADJUST_POSITION(self, self->buffer_size);
  ------------------
  |  |  391|      0|    do { \
  |  |  392|      0|        self->pos = _new_pos; \
  |  |  393|      0|        if (VALID_READ_BUFFER(self) && self->read_end < self->pos) \
  |  |  ------------------
  |  |  |  |  385|      0|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (393:40): [True: 0, False: 0]
  |  |  ------------------
  |  |  394|      0|            self->read_end = self->pos; \
  |  |  395|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (395:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2199|      0|                self->write_end = self->buffer_size;
 2200|      0|                written += self->buffer_size;
 2201|      0|                _set_BlockingIOError("write could not complete without "
 2202|      0|                                     "blocking", written);
 2203|      0|                goto error;
 2204|      0|            }
 2205|      0|            PyErr_Clear();
 2206|      0|            break;
 2207|      0|        }
 2208|      0|        written += n;
 2209|      0|        remaining -= n;
 2210|       |        /* Partial writes can return successfully when interrupted by a
 2211|       |           signal (see write(2)).  We must run signal handlers before
 2212|       |           blocking another time, possibly indefinitely. */
 2213|      0|        if (PyErr_CheckSignals() < 0)
  ------------------
  |  Branch (2213:13): [True: 0, False: 0]
  ------------------
 2214|      0|            goto error;
 2215|      0|    }
 2216|      0|    if (self->readable)
  ------------------
  |  Branch (2216:9): [True: 0, False: 0]
  ------------------
 2217|      0|        _bufferedreader_reset_buf(self);
 2218|      0|    if (remaining > 0) {
  ------------------
  |  Branch (2218:9): [True: 0, False: 0]
  ------------------
 2219|      0|        memcpy(self->buffer, (char *) buffer->buf + written, remaining);
 2220|      0|        written += remaining;
 2221|      0|    }
 2222|      0|    self->write_pos = 0;
 2223|       |    /* TODO: sanity check (remaining >= 0) */
 2224|      0|    self->write_end = remaining;
 2225|      0|    ADJUST_POSITION(self, remaining);
  ------------------
  |  |  391|      0|    do { \
  |  |  392|      0|        self->pos = _new_pos; \
  |  |  393|      0|        if (VALID_READ_BUFFER(self) && self->read_end < self->pos) \
  |  |  ------------------
  |  |  |  |  385|      0|    (self->readable && self->read_end != -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (385:6): [True: 0, False: 0]
  |  |  |  |  |  Branch (385:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (393:40): [True: 0, False: 0]
  |  |  ------------------
  |  |  394|      0|            self->read_end = self->pos; \
  |  |  395|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (395:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2226|      0|    self->raw_pos = 0;
 2227|       |
 2228|  48.4k|end:
 2229|  48.4k|    res = PyLong_FromSsize_t(written);
 2230|       |
 2231|  48.4k|error:
 2232|  48.4k|    LEAVE_BUFFERED(self)
  ------------------
  |  |  335|  48.4k|    do { \
  |  |  336|  48.4k|        self->owner = 0; \
  |  |  337|  48.4k|        PyThread_release_lock(self->lock); \
  |  |  338|  48.4k|    } while(0);
  |  |  ------------------
  |  |  |  Branch (338:13): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
 2233|  48.4k|    return res;
 2234|  48.4k|}
bufferedio.c:_io__Buffered_flush_impl:
  937|  48.4k|{
  938|  48.4k|    PyObject *res;
  939|       |
  940|  48.4k|    CHECK_INITIALIZED(self)
  ------------------
  |  |  341|  48.4k|    if (self->ok <= 0) { \
  |  |  ------------------
  |  |  |  Branch (341:9): [True: 0, False: 48.4k]
  |  |  ------------------
  |  |  342|      0|        if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (342:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  343|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  344|      0|                 "raw stream has been detached"); \
  |  |  345|      0|        } else { \
  |  |  346|      0|            PyErr_SetString(PyExc_ValueError, \
  |  |  347|      0|                "I/O operation on uninitialized object"); \
  |  |  348|      0|        } \
  |  |  349|      0|        return NULL; \
  |  |  350|      0|    }
  ------------------
  941|  48.4k|    CHECK_CLOSED(self, "flush of closed file")
  ------------------
  |  |  371|  48.4k|    do { \
  |  |  372|  48.4k|        int _closed = IS_CLOSED(self); \
  |  |  ------------------
  |  |  |  |  365|  48.4k|    (!self->buffer ? 1 : \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (365:6): [True: 0, False: 48.4k]
  |  |  |  |  ------------------
  |  |  |  |  366|  48.4k|    (self->fast_closed_checks \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (366:6): [True: 48.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  367|  48.4k|     ? _PyFileIO_closed(self->raw) \
  |  |  |  |  368|  48.4k|     : buffered_closed(self)))
  |  |  ------------------
  |  |  373|  48.4k|        if (_closed < 0) { \
  |  |  ------------------
  |  |  |  Branch (373:13): [True: 0, False: 48.4k]
  |  |  ------------------
  |  |  374|      0|            return NULL; \
  |  |  375|      0|        } \
  |  |  376|  48.4k|        if (_closed && \
  |  |  ------------------
  |  |  |  Branch (376:13): [True: 0, False: 48.4k]
  |  |  ------------------
  |  |  377|  48.4k|            (Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t) == 0)) \
  |  |  ------------------
  |  |  |  |  247|      0|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (34:47): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (377:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  378|  48.4k|        { \
  |  |  379|      0|            PyErr_SetString(PyExc_ValueError, error_msg); \
  |  |  380|      0|            return NULL; \
  |  |  381|      0|        } \
  |  |  382|  48.4k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (382:14): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
  942|       |
  943|  48.4k|    if (!ENTER_BUFFERED(self))
  ------------------
  |  |  330|  48.4k|    ( (PyThread_acquire_lock(self->lock, 0) ? \
  |  |  ------------------
  |  |  |  Branch (330:7): [True: 48.4k, False: 0]
  |  |  |  Branch (330:8): [True: 48.4k, False: 0]
  |  |  ------------------
  |  |  331|  48.4k|       1 : _enter_buffered_busy(self)) \
  |  |  332|  48.4k|     && (self->owner = PyThread_get_thread_ident(), 1) )
  |  |  ------------------
  |  |  |  Branch (332:9): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
  944|      0|        return NULL;
  945|  48.4k|    res = buffered_flush_and_rewind_unlocked(self);
  946|  48.4k|    LEAVE_BUFFERED(self)
  ------------------
  |  |  335|  48.4k|    do { \
  |  |  336|  48.4k|        self->owner = 0; \
  |  |  337|  48.4k|        PyThread_release_lock(self->lock); \
  |  |  338|  48.4k|    } while(0);
  |  |  ------------------
  |  |  |  Branch (338:13): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
  947|       |
  948|  48.4k|    return res;
  949|  48.4k|}
bufferedio.c:_io_BufferedWriter___init___impl:
 1947|      4|{
 1948|      4|    self->ok = 0;
 1949|      4|    self->detached = 0;
 1950|       |
 1951|      4|    _PyIO_State *state = find_io_state_by_def(Py_TYPE(self));
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1952|      4|    if (_PyIOBase_check_writable(state, raw, Py_True) == NULL) {
  ------------------
  |  |   26|      4|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1952:9): [True: 0, False: 4]
  ------------------
 1953|      0|        return -1;
 1954|      0|    }
 1955|       |
 1956|      4|    Py_INCREF(raw);
  ------------------
  |  |  310|      4|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1957|      4|    Py_XSETREF(self->raw, raw);
  ------------------
  |  |  376|      4|    do { \
  |  |  377|      4|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      4|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      4|        *_tmp_dst_ptr = (src); \
  |  |  380|      4|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1958|      4|    self->readable = 0;
 1959|      4|    self->writable = 1;
 1960|       |
 1961|      4|    self->buffer_size = buffer_size;
 1962|      4|    if (_buffered_init(self) < 0)
  ------------------
  |  Branch (1962:9): [True: 0, False: 4]
  ------------------
 1963|      0|        return -1;
 1964|      4|    _bufferedwriter_reset_buf(self);
 1965|      4|    self->pos = 0;
 1966|       |
 1967|      4|    self->fast_closed_checks = (
 1968|      4|        Py_IS_TYPE(self, state->PyBufferedWriter_Type) &&
  ------------------
  |  |  215|      8|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 1969|      4|        Py_IS_TYPE(raw, state->PyFileIO_Type)
  ------------------
  |  |  215|      4|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 1970|      4|    );
 1971|       |
 1972|      4|    self->ok = 1;
 1973|      4|    return 0;
 1974|      4|}

_iomodule.c:_io_open:
  141|     99|{
  142|     99|    PyObject *return_value = NULL;
  143|     99|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  144|       |
  145|     99|    #define NUM_KEYWORDS 8
  146|     99|    static struct {
  147|     99|        PyGC_Head _this_is_not_used;
  148|     99|        PyObject_VAR_HEAD
  149|     99|        Py_hash_t ob_hash;
  150|     99|        PyObject *ob_item[NUM_KEYWORDS];
  151|     99|    } _kwtuple = {
  152|     99|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     99|    {                                     \
  |  |   98|     99|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     99|    {                               \
  |  |  |  |   91|     99|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     99|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     99|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     99|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     99|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     99|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     99|        (type)                      \
  |  |  |  |   93|     99|    },
  |  |  ------------------
  |  |   99|     99|        (size)                            \
  |  |  100|     99|    },
  ------------------
  153|     99|        .ob_hash = -1,
  154|     99|        .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(buffering), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|     99|    };
  156|     99|    #undef NUM_KEYWORDS
  157|     99|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  158|       |
  159|       |    #else  // !Py_BUILD_CORE
  160|       |    #  define KWTUPLE NULL
  161|       |    #endif  // !Py_BUILD_CORE
  162|       |
  163|     99|    static const char * const _keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL};
  164|     99|    static _PyArg_Parser _parser = {
  165|     99|        .keywords = _keywords,
  166|     99|        .fname = "open",
  167|     99|        .kwtuple = KWTUPLE,
  ------------------
  |  |  157|     99|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  168|     99|    };
  169|     99|    #undef KWTUPLE
  170|     99|    PyObject *argsbuf[8];
  171|     99|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (171:36): [True: 0, False: 99]
  ------------------
  172|     99|    PyObject *file;
  173|     99|    const char *mode = "r";
  174|     99|    int buffering = -1;
  175|     99|    const char *encoding = NULL;
  176|     99|    const char *errors = NULL;
  177|     99|    const char *newline = NULL;
  178|     99|    int closefd = 1;
  179|     99|    PyObject *opener = Py_None;
  ------------------
  |  |  616|     99|#  define Py_None (&_Py_NoneStruct)
  ------------------
  180|       |
  181|     99|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     99|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 99, False: 0]
  |  |  ------------------
  |  |   89|     99|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 99, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 99]
  |  |  |  Branch (89:43): [True: 99, False: 0]
  |  |  |  Branch (89:67): [True: 99, False: 0]
  |  |  ------------------
  |  |   90|     99|      (args) : \
  |  |   91|     99|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  182|     99|            /*minpos*/ 1, /*maxpos*/ 8, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  183|     99|    if (!args) {
  ------------------
  |  Branch (183:9): [True: 0, False: 99]
  ------------------
  184|      0|        goto exit;
  185|      0|    }
  186|     99|    file = args[0];
  187|     99|    if (!noptargs) {
  ------------------
  |  Branch (187:9): [True: 0, False: 99]
  ------------------
  188|      0|        goto skip_optional_pos;
  189|      0|    }
  190|     99|    if (args[1]) {
  ------------------
  |  Branch (190:9): [True: 99, False: 0]
  ------------------
  191|     99|        if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|     99|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     99|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (191:13): [True: 0, False: 99]
  ------------------
  192|      0|            _PyArg_BadArgument("open", "argument 'mode'", "str", args[1]);
  193|      0|            goto exit;
  194|      0|        }
  195|     99|        Py_ssize_t mode_length;
  196|     99|        mode = PyUnicode_AsUTF8AndSize(args[1], &mode_length);
  197|     99|        if (mode == NULL) {
  ------------------
  |  Branch (197:13): [True: 0, False: 99]
  ------------------
  198|      0|            goto exit;
  199|      0|        }
  200|     99|        if (strlen(mode) != (size_t)mode_length) {
  ------------------
  |  Branch (200:13): [True: 0, False: 99]
  ------------------
  201|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  202|      0|            goto exit;
  203|      0|        }
  204|     99|        if (!--noptargs) {
  ------------------
  |  Branch (204:13): [True: 93, False: 6]
  ------------------
  205|     93|            goto skip_optional_pos;
  206|     93|        }
  207|     99|    }
  208|      6|    if (args[2]) {
  ------------------
  |  Branch (208:9): [True: 6, False: 0]
  ------------------
  209|      6|        buffering = PyLong_AsInt(args[2]);
  210|      6|        if (buffering == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (210:13): [True: 6, False: 0]
  |  Branch (210:32): [True: 0, False: 6]
  ------------------
  211|      0|            goto exit;
  212|      0|        }
  213|      6|        if (!--noptargs) {
  ------------------
  |  Branch (213:13): [True: 0, False: 6]
  ------------------
  214|      0|            goto skip_optional_pos;
  215|      0|        }
  216|      6|    }
  217|      6|    if (args[3]) {
  ------------------
  |  Branch (217:9): [True: 6, False: 0]
  ------------------
  218|      6|        if (args[3] == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (218:13): [True: 6, False: 0]
  ------------------
  219|      6|            encoding = NULL;
  220|      6|        }
  221|      0|        else if (PyUnicode_Check(args[3])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      0|            Py_ssize_t encoding_length;
  223|      0|            encoding = PyUnicode_AsUTF8AndSize(args[3], &encoding_length);
  224|      0|            if (encoding == NULL) {
  ------------------
  |  Branch (224:17): [True: 0, False: 0]
  ------------------
  225|      0|                goto exit;
  226|      0|            }
  227|      0|            if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (227:17): [True: 0, False: 0]
  ------------------
  228|      0|                PyErr_SetString(PyExc_ValueError, "embedded null character");
  229|      0|                goto exit;
  230|      0|            }
  231|      0|        }
  232|      0|        else {
  233|      0|            _PyArg_BadArgument("open", "argument 'encoding'", "str or None", args[3]);
  234|      0|            goto exit;
  235|      0|        }
  236|      6|        if (!--noptargs) {
  ------------------
  |  Branch (236:13): [True: 0, False: 6]
  ------------------
  237|      0|            goto skip_optional_pos;
  238|      0|        }
  239|      6|    }
  240|      6|    if (args[4]) {
  ------------------
  |  Branch (240:9): [True: 6, False: 0]
  ------------------
  241|      6|        if (args[4] == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (241:13): [True: 6, False: 0]
  ------------------
  242|      6|            errors = NULL;
  243|      6|        }
  244|      0|        else if (PyUnicode_Check(args[4])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|      0|            Py_ssize_t errors_length;
  246|      0|            errors = PyUnicode_AsUTF8AndSize(args[4], &errors_length);
  247|      0|            if (errors == NULL) {
  ------------------
  |  Branch (247:17): [True: 0, False: 0]
  ------------------
  248|      0|                goto exit;
  249|      0|            }
  250|      0|            if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (250:17): [True: 0, False: 0]
  ------------------
  251|      0|                PyErr_SetString(PyExc_ValueError, "embedded null character");
  252|      0|                goto exit;
  253|      0|            }
  254|      0|        }
  255|      0|        else {
  256|      0|            _PyArg_BadArgument("open", "argument 'errors'", "str or None", args[4]);
  257|      0|            goto exit;
  258|      0|        }
  259|      6|        if (!--noptargs) {
  ------------------
  |  Branch (259:13): [True: 0, False: 6]
  ------------------
  260|      0|            goto skip_optional_pos;
  261|      0|        }
  262|      6|    }
  263|      6|    if (args[5]) {
  ------------------
  |  Branch (263:9): [True: 6, False: 0]
  ------------------
  264|      6|        if (args[5] == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (264:13): [True: 6, False: 0]
  ------------------
  265|      6|            newline = NULL;
  266|      6|        }
  267|      0|        else if (PyUnicode_Check(args[5])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|      0|            Py_ssize_t newline_length;
  269|      0|            newline = PyUnicode_AsUTF8AndSize(args[5], &newline_length);
  270|      0|            if (newline == NULL) {
  ------------------
  |  Branch (270:17): [True: 0, False: 0]
  ------------------
  271|      0|                goto exit;
  272|      0|            }
  273|      0|            if (strlen(newline) != (size_t)newline_length) {
  ------------------
  |  Branch (273:17): [True: 0, False: 0]
  ------------------
  274|      0|                PyErr_SetString(PyExc_ValueError, "embedded null character");
  275|      0|                goto exit;
  276|      0|            }
  277|      0|        }
  278|      0|        else {
  279|      0|            _PyArg_BadArgument("open", "argument 'newline'", "str or None", args[5]);
  280|      0|            goto exit;
  281|      0|        }
  282|      6|        if (!--noptargs) {
  ------------------
  |  Branch (282:13): [True: 0, False: 6]
  ------------------
  283|      0|            goto skip_optional_pos;
  284|      0|        }
  285|      6|    }
  286|      6|    if (args[6]) {
  ------------------
  |  Branch (286:9): [True: 6, False: 0]
  ------------------
  287|      6|        closefd = PyObject_IsTrue(args[6]);
  288|      6|        if (closefd < 0) {
  ------------------
  |  Branch (288:13): [True: 0, False: 6]
  ------------------
  289|      0|            goto exit;
  290|      0|        }
  291|      6|        if (!--noptargs) {
  ------------------
  |  Branch (291:13): [True: 6, False: 0]
  ------------------
  292|      6|            goto skip_optional_pos;
  293|      6|        }
  294|      6|    }
  295|      0|    opener = args[7];
  296|     99|skip_optional_pos:
  297|     99|    return_value = _io_open_impl(module, file, mode, buffering, encoding, errors, newline, closefd, opener);
  298|       |
  299|     99|exit:
  300|     99|    return return_value;
  301|     99|}
_iomodule.c:_io_open_code:
  367|     93|{
  368|     93|    PyObject *return_value = NULL;
  369|     93|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  370|       |
  371|     93|    #define NUM_KEYWORDS 1
  372|     93|    static struct {
  373|     93|        PyGC_Head _this_is_not_used;
  374|     93|        PyObject_VAR_HEAD
  375|     93|        Py_hash_t ob_hash;
  376|     93|        PyObject *ob_item[NUM_KEYWORDS];
  377|     93|    } _kwtuple = {
  378|     93|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     93|    {                                     \
  |  |   98|     93|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     93|    {                               \
  |  |  |  |   91|     93|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     93|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     93|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     93|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     93|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     93|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     93|        (type)                      \
  |  |  |  |   93|     93|    },
  |  |  ------------------
  |  |   99|     93|        (size)                            \
  |  |  100|     93|    },
  ------------------
  379|     93|        .ob_hash = -1,
  380|     93|        .ob_item = { &_Py_ID(path), },
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|     93|    };
  382|     93|    #undef NUM_KEYWORDS
  383|     93|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  384|       |
  385|       |    #else  // !Py_BUILD_CORE
  386|       |    #  define KWTUPLE NULL
  387|       |    #endif  // !Py_BUILD_CORE
  388|       |
  389|     93|    static const char * const _keywords[] = {"path", NULL};
  390|     93|    static _PyArg_Parser _parser = {
  391|     93|        .keywords = _keywords,
  392|     93|        .fname = "open_code",
  393|     93|        .kwtuple = KWTUPLE,
  ------------------
  |  |  383|     93|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  394|     93|    };
  395|     93|    #undef KWTUPLE
  396|     93|    PyObject *argsbuf[1];
  397|     93|    PyObject *path;
  398|       |
  399|     93|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     93|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 93, False: 0]
  |  |  ------------------
  |  |   89|     93|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 93, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 93]
  |  |  |  Branch (89:43): [True: 93, False: 0]
  |  |  |  Branch (89:67): [True: 93, False: 0]
  |  |  ------------------
  |  |   90|     93|      (args) : \
  |  |   91|     93|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  400|     93|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  401|     93|    if (!args) {
  ------------------
  |  Branch (401:9): [True: 0, False: 93]
  ------------------
  402|      0|        goto exit;
  403|      0|    }
  404|     93|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|     93|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     93|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (404:9): [True: 0, False: 93]
  ------------------
  405|      0|        _PyArg_BadArgument("open_code", "argument 'path'", "str", args[0]);
  406|      0|        goto exit;
  407|      0|    }
  408|     93|    path = args[0];
  409|     93|    return_value = _io_open_code_impl(module, path);
  410|       |
  411|     93|exit:
  412|     93|    return return_value;
  413|     93|}

bufferedio.c:_io__Buffered_simple_flush:
  336|     93|{
  337|     93|    PyObject *return_value = NULL;
  338|       |
  339|     93|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|     93|    {
  ------------------
  340|     93|    return_value = _io__Buffered_simple_flush_impl((buffered *)self);
  341|     93|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     93|    }
  ------------------
  342|       |
  343|     93|    return return_value;
  344|     93|}
bufferedio.c:_io__Buffered_close:
  374|     93|{
  375|     93|    PyObject *return_value = NULL;
  376|       |
  377|     93|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|     93|    {
  ------------------
  378|     93|    return_value = _io__Buffered_close_impl((buffered *)self);
  379|     93|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     93|    }
  ------------------
  380|       |
  381|     93|    return return_value;
  382|     93|}
bufferedio.c:_io__Buffered_seekable:
  420|      6|{
  421|      6|    PyObject *return_value = NULL;
  422|       |
  423|      6|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      6|    {
  ------------------
  424|      6|    return_value = _io__Buffered_seekable_impl((buffered *)self);
  425|      6|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      6|    }
  ------------------
  426|       |
  427|      6|    return return_value;
  428|      6|}
bufferedio.c:_io__Buffered_readable:
  443|      2|{
  444|      2|    PyObject *return_value = NULL;
  445|       |
  446|      2|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      2|    {
  ------------------
  447|      2|    return_value = _io__Buffered_readable_impl((buffered *)self);
  448|      2|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      2|    }
  ------------------
  449|       |
  450|      2|    return return_value;
  451|      2|}
bufferedio.c:_io__Buffered_read:
  632|     93|{
  633|     93|    PyObject *return_value = NULL;
  634|     93|    Py_ssize_t n = -1;
  635|       |
  636|     93|    if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
  ------------------
  |  |   31|     93|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 93, False: 0]
  |  |  |  Branch (31:27): [True: 93, False: 0]
  |  |  ------------------
  |  |   32|     93|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  637|      0|        goto exit;
  638|      0|    }
  639|     93|    if (nargs < 1) {
  ------------------
  |  Branch (639:9): [True: 93, False: 0]
  ------------------
  640|     93|        goto skip_optional;
  641|     93|    }
  642|      0|    if (!_Py_convert_optional_to_ssize_t(args[0], &n)) {
  ------------------
  |  Branch (642:9): [True: 0, False: 0]
  ------------------
  643|      0|        goto exit;
  644|      0|    }
  645|     93|skip_optional:
  646|     93|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|     93|    {
  ------------------
  647|     93|    return_value = _io__Buffered_read_impl((buffered *)self, n);
  648|     93|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     93|    }
  ------------------
  649|       |
  650|     93|exit:
  651|     93|    return return_value;
  652|     93|}
bufferedio.c:_io__Buffered_tell:
  814|      4|{
  815|      4|    PyObject *return_value = NULL;
  816|       |
  817|      4|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      4|    {
  ------------------
  818|      4|    return_value = _io__Buffered_tell_impl((buffered *)self);
  819|      4|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      4|    }
  ------------------
  820|       |
  821|      4|    return return_value;
  822|      4|}
bufferedio.c:_io__Buffered_closed_get:
  351|    186|{
  352|    186|    PyObject *return_value = NULL;
  353|       |
  354|    186|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    186|    {
  ------------------
  355|    186|    return_value = _io__Buffered_closed_get_impl((buffered *)self);
  356|    186|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    186|    }
  ------------------
  357|       |
  358|    186|    return return_value;
  359|    186|}
bufferedio.c:_io_BufferedReader___init__:
  923|     95|{
  924|     95|    int return_value = -1;
  925|     95|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  926|       |
  927|     95|    #define NUM_KEYWORDS 2
  928|     95|    static struct {
  929|     95|        PyGC_Head _this_is_not_used;
  930|     95|        PyObject_VAR_HEAD
  931|     95|        Py_hash_t ob_hash;
  932|     95|        PyObject *ob_item[NUM_KEYWORDS];
  933|     95|    } _kwtuple = {
  934|     95|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     95|    {                                     \
  |  |   98|     95|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     95|    {                               \
  |  |  |  |   91|     95|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     95|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     95|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     95|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     95|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     95|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     95|        (type)                      \
  |  |  |  |   93|     95|    },
  |  |  ------------------
  |  |   99|     95|        (size)                            \
  |  |  100|     95|    },
  ------------------
  935|     95|        .ob_hash = -1,
  936|     95|        .ob_item = { &_Py_ID(raw), &_Py_ID(buffer_size), },
  ------------------
  |  |  936|     95|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     95|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     95|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(raw), &_Py_ID(buffer_size), },
  ------------------
  |  |  936|     95|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     95|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     95|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  937|     95|    };
  938|     95|    #undef NUM_KEYWORDS
  939|     95|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  940|       |
  941|       |    #else  // !Py_BUILD_CORE
  942|       |    #  define KWTUPLE NULL
  943|       |    #endif  // !Py_BUILD_CORE
  944|       |
  945|     95|    static const char * const _keywords[] = {"raw", "buffer_size", NULL};
  946|     95|    static _PyArg_Parser _parser = {
  947|     95|        .keywords = _keywords,
  948|     95|        .fname = "BufferedReader",
  949|     95|        .kwtuple = KWTUPLE,
  ------------------
  |  |  939|     95|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  950|     95|    };
  951|     95|    #undef KWTUPLE
  952|     95|    PyObject *argsbuf[2];
  953|     95|    PyObject * const *fastargs;
  954|     95|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     95|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  955|     95|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (955:36): [True: 0, False: 95]
  ------------------
  956|     95|    PyObject *raw;
  957|     95|    Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
  ------------------
  |  |   82|     95|#define DEFAULT_BUFFER_SIZE (128 * 1024)  /* bytes */
  ------------------
  958|       |
  959|     95|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|     95|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 95, Folded]
  |  |  |  Branch (88:23): [True: 95, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|    190|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 95, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 95]
  |  |  |  Branch (89:43): [True: 95, False: 0]
  |  |  |  Branch (89:67): [True: 95, False: 0]
  |  |  |  Branch (89:68): [True: 95, False: 0]
  |  |  ------------------
  |  |   90|    190|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 95, False: 0]
  |  |  ------------------
  |  |   91|     95|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  960|     95|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  961|     95|    if (!fastargs) {
  ------------------
  |  Branch (961:9): [True: 0, False: 95]
  ------------------
  962|      0|        goto exit;
  963|      0|    }
  964|     95|    raw = fastargs[0];
  965|     95|    if (!noptargs) {
  ------------------
  |  Branch (965:9): [True: 0, False: 95]
  ------------------
  966|      0|        goto skip_optional_pos;
  967|      0|    }
  968|     95|    {
  969|     95|        Py_ssize_t ival = -1;
  970|     95|        PyObject *iobj = _PyNumber_Index(fastargs[1]);
  971|     95|        if (iobj != NULL) {
  ------------------
  |  Branch (971:13): [True: 95, False: 0]
  ------------------
  972|     95|            ival = PyLong_AsSsize_t(iobj);
  973|     95|            Py_DECREF(iobj);
  ------------------
  |  |  430|     95|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|     95|        }
  975|     95|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (975:13): [True: 0, False: 95]
  |  Branch (975:27): [True: 0, False: 0]
  ------------------
  976|      0|            goto exit;
  977|      0|        }
  978|     95|        buffer_size = ival;
  979|     95|    }
  980|     95|skip_optional_pos:
  981|     95|    return_value = _io_BufferedReader___init___impl((buffered *)self, raw, buffer_size);
  982|       |
  983|     95|exit:
  984|     95|    return return_value;
  985|     95|}
bufferedio.c:_io__Buffered_writable:
  466|      4|{
  467|      4|    PyObject *return_value = NULL;
  468|       |
  469|      4|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      4|    {
  ------------------
  470|      4|    return_value = _io__Buffered_writable_impl((buffered *)self);
  471|      4|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      4|    }
  ------------------
  472|       |
  473|      4|    return return_value;
  474|      4|}
bufferedio.c:_io_BufferedWriter_write:
 1080|  48.4k|{
 1081|  48.4k|    PyObject *return_value = NULL;
 1082|  48.4k|    Py_buffer buffer = {NULL, NULL};
 1083|       |
 1084|  48.4k|    if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|  48.4k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1084:9): [True: 0, False: 48.4k]
  ------------------
 1085|      0|        goto exit;
 1086|      0|    }
 1087|  48.4k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  48.4k|    {
  ------------------
 1088|  48.4k|    return_value = _io_BufferedWriter_write_impl((buffered *)self, &buffer);
 1089|  48.4k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  48.4k|    }
  ------------------
 1090|       |
 1091|  48.4k|exit:
 1092|       |    /* Cleanup for buffer */
 1093|  48.4k|    if (buffer.obj) {
  ------------------
  |  Branch (1093:9): [True: 48.4k, False: 0]
  ------------------
 1094|  48.4k|       PyBuffer_Release(&buffer);
 1095|  48.4k|    }
 1096|       |
 1097|  48.4k|    return return_value;
 1098|  48.4k|}
bufferedio.c:_io__Buffered_flush:
  565|  48.4k|{
  566|  48.4k|    PyObject *return_value = NULL;
  567|       |
  568|  48.4k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  48.4k|    {
  ------------------
  569|  48.4k|    return_value = _io__Buffered_flush_impl((buffered *)self);
  570|  48.4k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  48.4k|    }
  ------------------
  571|       |
  572|  48.4k|    return return_value;
  573|  48.4k|}
bufferedio.c:_io_BufferedWriter___init__:
 1003|      4|{
 1004|      4|    int return_value = -1;
 1005|      4|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1006|       |
 1007|      4|    #define NUM_KEYWORDS 2
 1008|      4|    static struct {
 1009|      4|        PyGC_Head _this_is_not_used;
 1010|      4|        PyObject_VAR_HEAD
 1011|      4|        Py_hash_t ob_hash;
 1012|      4|        PyObject *ob_item[NUM_KEYWORDS];
 1013|      4|    } _kwtuple = {
 1014|      4|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      4|    {                                     \
  |  |   98|      4|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      4|    {                               \
  |  |  |  |   91|      4|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      4|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      4|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      4|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      4|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      4|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      4|        (type)                      \
  |  |  |  |   93|      4|    },
  |  |  ------------------
  |  |   99|      4|        (size)                            \
  |  |  100|      4|    },
  ------------------
 1015|      4|        .ob_hash = -1,
 1016|      4|        .ob_item = { &_Py_ID(raw), &_Py_ID(buffer_size), },
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(raw), &_Py_ID(buffer_size), },
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|      4|    };
 1018|      4|    #undef NUM_KEYWORDS
 1019|      4|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1020|       |
 1021|       |    #else  // !Py_BUILD_CORE
 1022|       |    #  define KWTUPLE NULL
 1023|       |    #endif  // !Py_BUILD_CORE
 1024|       |
 1025|      4|    static const char * const _keywords[] = {"raw", "buffer_size", NULL};
 1026|      4|    static _PyArg_Parser _parser = {
 1027|      4|        .keywords = _keywords,
 1028|      4|        .fname = "BufferedWriter",
 1029|      4|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1019|      4|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1030|      4|    };
 1031|      4|    #undef KWTUPLE
 1032|      4|    PyObject *argsbuf[2];
 1033|      4|    PyObject * const *fastargs;
 1034|      4|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      4|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|      4|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1035:36): [True: 0, False: 4]
  ------------------
 1036|      4|    PyObject *raw;
 1037|      4|    Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
  ------------------
  |  |   82|      4|#define DEFAULT_BUFFER_SIZE (128 * 1024)  /* bytes */
  ------------------
 1038|       |
 1039|      4|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|      4|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 4, Folded]
  |  |  |  Branch (88:23): [True: 4, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|      8|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 4, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 4]
  |  |  |  Branch (89:43): [True: 4, False: 0]
  |  |  |  Branch (89:67): [True: 4, False: 0]
  |  |  |  Branch (89:68): [True: 4, False: 0]
  |  |  ------------------
  |  |   90|      8|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 4, False: 0]
  |  |  ------------------
  |  |   91|      4|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1040|      4|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1041|      4|    if (!fastargs) {
  ------------------
  |  Branch (1041:9): [True: 0, False: 4]
  ------------------
 1042|      0|        goto exit;
 1043|      0|    }
 1044|      4|    raw = fastargs[0];
 1045|      4|    if (!noptargs) {
  ------------------
  |  Branch (1045:9): [True: 0, False: 4]
  ------------------
 1046|      0|        goto skip_optional_pos;
 1047|      0|    }
 1048|      4|    {
 1049|      4|        Py_ssize_t ival = -1;
 1050|      4|        PyObject *iobj = _PyNumber_Index(fastargs[1]);
 1051|      4|        if (iobj != NULL) {
  ------------------
  |  Branch (1051:13): [True: 4, False: 0]
  ------------------
 1052|      4|            ival = PyLong_AsSsize_t(iobj);
 1053|      4|            Py_DECREF(iobj);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|      4|        }
 1055|      4|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1055:13): [True: 0, False: 4]
  |  Branch (1055:27): [True: 0, False: 0]
  ------------------
 1056|      0|            goto exit;
 1057|      0|        }
 1058|      4|        buffer_size = ival;
 1059|      4|    }
 1060|      4|skip_optional_pos:
 1061|      4|    return_value = _io_BufferedWriter___init___impl((buffered *)self, raw, buffer_size);
 1062|       |
 1063|      4|exit:
 1064|      4|    return return_value;
 1065|      4|}

fileio.c:_io_FileIO_readall:
  313|     93|{
  314|     93|    if (nargs || (kwnames && PyTuple_GET_SIZE(kwnames))) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (314:9): [True: 0, False: 93]
  |  Branch (314:19): [True: 0, False: 93]
  ------------------
  315|      0|        PyErr_SetString(PyExc_TypeError, "readall() takes no arguments");
  316|      0|        return NULL;
  317|      0|    }
  318|     93|    return _io_FileIO_readall_impl((fileio *)self, cls);
  319|     93|}
fileio.c:_io_FileIO_write:
  398|  48.4k|{
  399|  48.4k|    PyObject *return_value = NULL;
  400|  48.4k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  401|  48.4k|    #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
  402|       |    #else
  403|       |    #  define KWTUPLE NULL
  404|       |    #endif
  405|       |
  406|  48.4k|    static const char * const _keywords[] = {"", NULL};
  407|  48.4k|    static _PyArg_Parser _parser = {
  408|  48.4k|        .keywords = _keywords,
  409|  48.4k|        .fname = "write",
  410|  48.4k|        .kwtuple = KWTUPLE,
  ------------------
  |  |  401|  48.4k|    #  define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
  |  |  ------------------
  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|  48.4k|    };
  412|  48.4k|    #undef KWTUPLE
  413|  48.4k|    PyObject *argsbuf[1];
  414|  48.4k|    Py_buffer b = {NULL, NULL};
  415|       |
  416|  48.4k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  48.4k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 48.4k, False: 0]
  |  |  ------------------
  |  |   89|  48.4k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 48.4k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 48.4k]
  |  |  |  Branch (89:43): [True: 48.4k, False: 0]
  |  |  |  Branch (89:67): [True: 48.4k, False: 0]
  |  |  ------------------
  |  |   90|  48.4k|      (args) : \
  |  |   91|  48.4k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  417|  48.4k|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  418|  48.4k|    if (!args) {
  ------------------
  |  Branch (418:9): [True: 0, False: 48.4k]
  ------------------
  419|      0|        goto exit;
  420|      0|    }
  421|  48.4k|    if (PyObject_GetBuffer(args[0], &b, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|  48.4k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (421:9): [True: 0, False: 48.4k]
  ------------------
  422|      0|        goto exit;
  423|      0|    }
  424|  48.4k|    return_value = _io_FileIO_write_impl((fileio *)self, cls, &b);
  425|       |
  426|  48.4k|exit:
  427|       |    /* Cleanup for b */
  428|  48.4k|    if (b.obj) {
  ------------------
  |  Branch (428:9): [True: 48.4k, False: 0]
  ------------------
  429|  48.4k|       PyBuffer_Release(&b);
  430|  48.4k|    }
  431|       |
  432|  48.4k|    return return_value;
  433|  48.4k|}
fileio.c:_io_FileIO_tell:
  497|    103|{
  498|    103|    return _io_FileIO_tell_impl((fileio *)self);
  499|    103|}
fileio.c:_io_FileIO_close:
   50|     93|{
   51|     93|    if (nargs || (kwnames && PyTuple_GET_SIZE(kwnames))) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (51:9): [True: 0, False: 93]
  |  Branch (51:19): [True: 0, False: 93]
  ------------------
   52|      0|        PyErr_SetString(PyExc_TypeError, "close() takes no arguments");
   53|      0|        return NULL;
   54|      0|    }
   55|     93|    return _io_FileIO_close_impl((fileio *)self, cls);
   56|     93|}
fileio.c:_io_FileIO_seekable:
  235|      6|{
  236|      6|    return _io_FileIO_seekable_impl((fileio *)self);
  237|      6|}
fileio.c:_io_FileIO_readable:
  199|     97|{
  200|     97|    return _io_FileIO_readable_impl((fileio *)self);
  201|     97|}
fileio.c:_io_FileIO_writable:
  217|      8|{
  218|      8|    return _io_FileIO_writable_impl((fileio *)self);
  219|      8|}
fileio.c:_io_FileIO_isatty:
  570|      6|{
  571|      6|    return _io_FileIO_isatty_impl((fileio *)self);
  572|      6|}
fileio.c:_io_FileIO__isatty_open_only:
  587|     99|{
  588|     99|    return _io_FileIO__isatty_open_only_impl((fileio *)self);
  589|     99|}
fileio.c:_io_FileIO_closed_get:
  599|    279|{
  600|    279|    PyObject *return_value = NULL;
  601|    279|    int _return_value;
  602|       |
  603|    279|    _return_value = _io_FileIO_closed_get_impl((fileio *)self);
  604|    279|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (604:9): [True: 0, False: 279]
  |  Branch (604:34): [True: 0, False: 0]
  ------------------
  605|      0|        goto exit;
  606|      0|    }
  607|    279|    return_value = PyBool_FromLong((long)_return_value);
  608|       |
  609|    279|exit:
  610|    279|    return return_value;
  611|    279|}
fileio.c:_io_FileIO__blksize_get:
  655|     99|{
  656|     99|    PyObject *return_value = NULL;
  657|     99|    long _return_value;
  658|       |
  659|     99|    _return_value = _io_FileIO__blksize_get_impl((fileio *)self);
  660|     99|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (660:9): [True: 0, False: 99]
  |  Branch (660:34): [True: 0, False: 0]
  ------------------
  661|      0|        goto exit;
  662|      0|    }
  663|     99|    return_value = PyLong_FromLong(_return_value);
  664|       |
  665|     99|exit:
  666|     99|    return return_value;
  667|     99|}
fileio.c:_io_FileIO___init__:
   85|     99|{
   86|     99|    int return_value = -1;
   87|     99|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   88|       |
   89|     99|    #define NUM_KEYWORDS 4
   90|     99|    static struct {
   91|     99|        PyGC_Head _this_is_not_used;
   92|     99|        PyObject_VAR_HEAD
   93|     99|        Py_hash_t ob_hash;
   94|     99|        PyObject *ob_item[NUM_KEYWORDS];
   95|     99|    } _kwtuple = {
   96|     99|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     99|    {                                     \
  |  |   98|     99|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     99|    {                               \
  |  |  |  |   91|     99|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     99|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     99|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     99|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     99|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     99|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     99|        (type)                      \
  |  |  |  |   93|     99|    },
  |  |  ------------------
  |  |   99|     99|        (size)                            \
  |  |  100|     99|    },
  ------------------
   97|     99|        .ob_hash = -1,
   98|     99|        .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(file), &_Py_ID(mode), &_Py_ID(closefd), &_Py_ID(opener), },
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|     99|    };
  100|     99|    #undef NUM_KEYWORDS
  101|     99|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  102|       |
  103|       |    #else  // !Py_BUILD_CORE
  104|       |    #  define KWTUPLE NULL
  105|       |    #endif  // !Py_BUILD_CORE
  106|       |
  107|     99|    static const char * const _keywords[] = {"file", "mode", "closefd", "opener", NULL};
  108|     99|    static _PyArg_Parser _parser = {
  109|     99|        .keywords = _keywords,
  110|     99|        .fname = "FileIO",
  111|     99|        .kwtuple = KWTUPLE,
  ------------------
  |  |  101|     99|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  112|     99|    };
  113|     99|    #undef KWTUPLE
  114|     99|    PyObject *argsbuf[4];
  115|     99|    PyObject * const *fastargs;
  116|     99|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     99|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|     99|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (117:36): [True: 0, False: 99]
  ------------------
  118|     99|    PyObject *nameobj;
  119|     99|    const char *mode = "r";
  120|     99|    int closefd = 1;
  121|     99|    PyObject *opener = Py_None;
  ------------------
  |  |  616|     99|#  define Py_None (&_Py_NoneStruct)
  ------------------
  122|       |
  123|     99|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|     99|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 99, Folded]
  |  |  |  Branch (88:23): [True: 99, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|    198|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 99, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 99]
  |  |  |  Branch (89:43): [True: 99, False: 0]
  |  |  |  Branch (89:67): [True: 99, False: 0]
  |  |  |  Branch (89:68): [True: 99, False: 0]
  |  |  ------------------
  |  |   90|    198|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 99, False: 0]
  |  |  ------------------
  |  |   91|     99|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  124|     99|            /*minpos*/ 1, /*maxpos*/ 4, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  125|     99|    if (!fastargs) {
  ------------------
  |  Branch (125:9): [True: 0, False: 99]
  ------------------
  126|      0|        goto exit;
  127|      0|    }
  128|     99|    nameobj = fastargs[0];
  129|     99|    if (!noptargs) {
  ------------------
  |  Branch (129:9): [True: 0, False: 99]
  ------------------
  130|      0|        goto skip_optional_pos;
  131|      0|    }
  132|     99|    if (fastargs[1]) {
  ------------------
  |  Branch (132:9): [True: 99, False: 0]
  ------------------
  133|     99|        if (!PyUnicode_Check(fastargs[1])) {
  ------------------
  |  |  103|     99|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     99|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (133:13): [True: 0, False: 99]
  ------------------
  134|      0|            _PyArg_BadArgument("FileIO", "argument 'mode'", "str", fastargs[1]);
  135|      0|            goto exit;
  136|      0|        }
  137|     99|        Py_ssize_t mode_length;
  138|     99|        mode = PyUnicode_AsUTF8AndSize(fastargs[1], &mode_length);
  139|     99|        if (mode == NULL) {
  ------------------
  |  Branch (139:13): [True: 0, False: 99]
  ------------------
  140|      0|            goto exit;
  141|      0|        }
  142|     99|        if (strlen(mode) != (size_t)mode_length) {
  ------------------
  |  Branch (142:13): [True: 0, False: 99]
  ------------------
  143|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  144|      0|            goto exit;
  145|      0|        }
  146|     99|        if (!--noptargs) {
  ------------------
  |  Branch (146:13): [True: 0, False: 99]
  ------------------
  147|      0|            goto skip_optional_pos;
  148|      0|        }
  149|     99|    }
  150|     99|    if (fastargs[2]) {
  ------------------
  |  Branch (150:9): [True: 99, False: 0]
  ------------------
  151|     99|        closefd = PyObject_IsTrue(fastargs[2]);
  152|     99|        if (closefd < 0) {
  ------------------
  |  Branch (152:13): [True: 0, False: 99]
  ------------------
  153|      0|            goto exit;
  154|      0|        }
  155|     99|        if (!--noptargs) {
  ------------------
  |  Branch (155:13): [True: 0, False: 99]
  ------------------
  156|      0|            goto skip_optional_pos;
  157|      0|        }
  158|     99|    }
  159|     99|    opener = fastargs[3];
  160|     99|skip_optional_pos:
  161|     99|    return_value = _io_FileIO___init___impl((fileio *)self, nameobj, mode, closefd, opener);
  162|       |
  163|     99|exit:
  164|     99|    return return_value;
  165|     99|}

iobase.c:_io__IOBase_flush:
  170|    186|{
  171|    186|    return _io__IOBase_flush_impl(self);
  172|    186|}
iobase.c:_io__IOBase_close:
  280|     93|{
  281|     93|    return _io__IOBase_close_impl(self);
  282|     93|}
iobase.c:_io__IOBase_readable:
  321|      4|{
  322|      4|    return _io__IOBase_readable_impl(self);
  323|      4|}
iobase.c:_io__IOBase_writable:
  341|      2|{
  342|      2|    return _io__IOBase_writable_impl(self);
  343|      2|}
iobase.c:_io__IOBase___enter__:
  359|     93|{
  360|     93|    return _io__IOBase___enter___impl(self);
  361|     93|}
iobase.c:_io__IOBase___exit__:
  377|     93|{
  378|     93|    PyObject *return_value = NULL;
  379|     93|    PyObject *__clinic_args = NULL;
  380|       |
  381|     93|    __clinic_args = PyTuple_FromArray(args, nargs);
  382|     93|    if (__clinic_args == NULL) {
  ------------------
  |  Branch (382:9): [True: 0, False: 93]
  ------------------
  383|      0|        goto exit;
  384|      0|    }
  385|     93|    return_value = _io__IOBase___exit___impl(self, __clinic_args);
  386|       |
  387|     93|exit:
  388|       |    /* Cleanup for args */
  389|     93|    Py_XDECREF(__clinic_args);
  ------------------
  |  |  524|     93|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  390|       |
  391|     93|    return return_value;
  392|     93|}

textio.c:_io_TextIOWrapper_write:
  779|  48.4k|{
  780|  48.4k|    PyObject *return_value = NULL;
  781|  48.4k|    PyObject *text;
  782|       |
  783|  48.4k|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|  48.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (783:9): [True: 0, False: 48.4k]
  ------------------
  784|      0|        _PyArg_BadArgument("write", "argument", "str", arg);
  785|      0|        goto exit;
  786|      0|    }
  787|  48.4k|    text = arg;
  788|  48.4k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  48.4k|    {
  ------------------
  789|  48.4k|    return_value = _io_TextIOWrapper_write_impl((textio *)self, text);
  790|  48.4k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  48.4k|    }
  ------------------
  791|       |
  792|  48.4k|exit:
  793|  48.4k|    return return_value;
  794|  48.4k|}
textio.c:_io_TextIOWrapper___init__:
  521|      6|{
  522|      6|    int return_value = -1;
  523|      6|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  524|       |
  525|      6|    #define NUM_KEYWORDS 6
  526|      6|    static struct {
  527|      6|        PyGC_Head _this_is_not_used;
  528|      6|        PyObject_VAR_HEAD
  529|      6|        Py_hash_t ob_hash;
  530|      6|        PyObject *ob_item[NUM_KEYWORDS];
  531|      6|    } _kwtuple = {
  532|      6|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      6|    {                                     \
  |  |   98|      6|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      6|    {                               \
  |  |  |  |   91|      6|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      6|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      6|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      6|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      6|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      6|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      6|        (type)                      \
  |  |  |  |   93|      6|    },
  |  |  ------------------
  |  |   99|      6|        (size)                            \
  |  |  100|      6|    },
  ------------------
  533|      6|        .ob_hash = -1,
  534|      6|        .ob_item = { &_Py_ID(buffer), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(line_buffering), &_Py_ID(write_through), },
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(buffer), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(line_buffering), &_Py_ID(write_through), },
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(buffer), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(line_buffering), &_Py_ID(write_through), },
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(buffer), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(line_buffering), &_Py_ID(write_through), },
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(buffer), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(line_buffering), &_Py_ID(write_through), },
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(buffer), &_Py_ID(encoding), &_Py_ID(errors), &_Py_ID(newline), &_Py_ID(line_buffering), &_Py_ID(write_through), },
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  535|      6|    };
  536|      6|    #undef NUM_KEYWORDS
  537|      6|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  538|       |
  539|       |    #else  // !Py_BUILD_CORE
  540|       |    #  define KWTUPLE NULL
  541|       |    #endif  // !Py_BUILD_CORE
  542|       |
  543|      6|    static const char * const _keywords[] = {"buffer", "encoding", "errors", "newline", "line_buffering", "write_through", NULL};
  544|      6|    static _PyArg_Parser _parser = {
  545|      6|        .keywords = _keywords,
  546|      6|        .fname = "TextIOWrapper",
  547|      6|        .kwtuple = KWTUPLE,
  ------------------
  |  |  537|      6|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  548|      6|    };
  549|      6|    #undef KWTUPLE
  550|      6|    PyObject *argsbuf[6];
  551|      6|    PyObject * const *fastargs;
  552|      6|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      6|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  553|      6|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (553:36): [True: 0, False: 6]
  ------------------
  554|      6|    PyObject *buffer;
  555|      6|    const char *encoding = NULL;
  556|      6|    PyObject *errors = Py_None;
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  557|      6|    const char *newline = NULL;
  558|      6|    int line_buffering = 0;
  559|      6|    int write_through = 0;
  560|       |
  561|      6|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|      6|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 6, Folded]
  |  |  |  Branch (88:23): [True: 6, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|     12|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 6, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 6]
  |  |  |  Branch (89:43): [True: 6, False: 0]
  |  |  |  Branch (89:67): [True: 6, False: 0]
  |  |  |  Branch (89:68): [True: 6, False: 0]
  |  |  ------------------
  |  |   90|     12|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 6, False: 0]
  |  |  ------------------
  |  |   91|      6|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  562|      6|            /*minpos*/ 1, /*maxpos*/ 6, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  563|      6|    if (!fastargs) {
  ------------------
  |  Branch (563:9): [True: 0, False: 6]
  ------------------
  564|      0|        goto exit;
  565|      0|    }
  566|      6|    buffer = fastargs[0];
  567|      6|    if (!noptargs) {
  ------------------
  |  Branch (567:9): [True: 0, False: 6]
  ------------------
  568|      0|        goto skip_optional_pos;
  569|      0|    }
  570|      6|    if (fastargs[1]) {
  ------------------
  |  Branch (570:9): [True: 6, False: 0]
  ------------------
  571|      6|        if (fastargs[1] == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (571:13): [True: 0, False: 6]
  ------------------
  572|      0|            encoding = NULL;
  573|      0|        }
  574|      6|        else if (PyUnicode_Check(fastargs[1])) {
  ------------------
  |  |  103|      6|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|      6|            Py_ssize_t encoding_length;
  576|      6|            encoding = PyUnicode_AsUTF8AndSize(fastargs[1], &encoding_length);
  577|      6|            if (encoding == NULL) {
  ------------------
  |  Branch (577:17): [True: 0, False: 6]
  ------------------
  578|      0|                goto exit;
  579|      0|            }
  580|      6|            if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (580:17): [True: 0, False: 6]
  ------------------
  581|      0|                PyErr_SetString(PyExc_ValueError, "embedded null character");
  582|      0|                goto exit;
  583|      0|            }
  584|      6|        }
  585|      0|        else {
  586|      0|            _PyArg_BadArgument("TextIOWrapper", "argument 'encoding'", "str or None", fastargs[1]);
  587|      0|            goto exit;
  588|      0|        }
  589|      6|        if (!--noptargs) {
  ------------------
  |  Branch (589:13): [True: 0, False: 6]
  ------------------
  590|      0|            goto skip_optional_pos;
  591|      0|        }
  592|      6|    }
  593|      6|    if (fastargs[2]) {
  ------------------
  |  Branch (593:9): [True: 6, False: 0]
  ------------------
  594|      6|        errors = fastargs[2];
  595|      6|        if (!--noptargs) {
  ------------------
  |  Branch (595:13): [True: 0, False: 6]
  ------------------
  596|      0|            goto skip_optional_pos;
  597|      0|        }
  598|      6|    }
  599|      6|    if (fastargs[3]) {
  ------------------
  |  Branch (599:9): [True: 6, False: 0]
  ------------------
  600|      6|        if (fastargs[3] == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (600:13): [True: 0, False: 6]
  ------------------
  601|      0|            newline = NULL;
  602|      0|        }
  603|      6|        else if (PyUnicode_Check(fastargs[3])) {
  ------------------
  |  |  103|      6|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|      6|            Py_ssize_t newline_length;
  605|      6|            newline = PyUnicode_AsUTF8AndSize(fastargs[3], &newline_length);
  606|      6|            if (newline == NULL) {
  ------------------
  |  Branch (606:17): [True: 0, False: 6]
  ------------------
  607|      0|                goto exit;
  608|      0|            }
  609|      6|            if (strlen(newline) != (size_t)newline_length) {
  ------------------
  |  Branch (609:17): [True: 0, False: 6]
  ------------------
  610|      0|                PyErr_SetString(PyExc_ValueError, "embedded null character");
  611|      0|                goto exit;
  612|      0|            }
  613|      6|        }
  614|      0|        else {
  615|      0|            _PyArg_BadArgument("TextIOWrapper", "argument 'newline'", "str or None", fastargs[3]);
  616|      0|            goto exit;
  617|      0|        }
  618|      6|        if (!--noptargs) {
  ------------------
  |  Branch (618:13): [True: 0, False: 6]
  ------------------
  619|      0|            goto skip_optional_pos;
  620|      0|        }
  621|      6|    }
  622|      6|    if (fastargs[4]) {
  ------------------
  |  Branch (622:9): [True: 6, False: 0]
  ------------------
  623|      6|        line_buffering = PyObject_IsTrue(fastargs[4]);
  624|      6|        if (line_buffering < 0) {
  ------------------
  |  Branch (624:13): [True: 0, False: 6]
  ------------------
  625|      0|            goto exit;
  626|      0|        }
  627|      6|        if (!--noptargs) {
  ------------------
  |  Branch (627:13): [True: 0, False: 6]
  ------------------
  628|      0|            goto skip_optional_pos;
  629|      0|        }
  630|      6|    }
  631|      6|    write_through = PyObject_IsTrue(fastargs[5]);
  632|      6|    if (write_through < 0) {
  ------------------
  |  Branch (632:9): [True: 0, False: 6]
  ------------------
  633|      0|        goto exit;
  634|      0|    }
  635|      6|skip_optional_pos:
  636|      6|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      6|    {
  ------------------
  637|      6|    return_value = _io_TextIOWrapper___init___impl((textio *)self, buffer, encoding, errors, newline, line_buffering, write_through);
  638|      6|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      6|    }
  ------------------
  639|       |
  640|      6|exit:
  641|      6|    return return_value;
  642|      6|}

_PyFileIO_closed:
   95|   145k|{
   96|   145k|    return (PyFileIO_CAST(self)->fd < 0);
  ------------------
  |  |   88|   145k|#define PyFileIO_CAST(op) ((fileio *)(op))
  ------------------
   97|   145k|}
fileio.c:fileio_dealloc:
  575|     93|{
  576|     93|    fileio *self = PyFileIO_CAST(op);
  ------------------
  |  |   88|     93|#define PyFileIO_CAST(op) ((fileio *)(op))
  ------------------
  577|     93|    self->finalizing = 1;
  578|     93|    if (_PyIOBase_finalize(op) < 0) {
  ------------------
  |  Branch (578:9): [True: 0, False: 93]
  ------------------
  579|      0|        return;
  580|      0|    }
  581|       |
  582|     93|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|     93|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|     93|    if (self->stat_atopen != NULL) {
  ------------------
  |  Branch (583:9): [True: 0, False: 93]
  ------------------
  584|      0|        PyMem_Free(self->stat_atopen);
  585|      0|        self->stat_atopen = NULL;
  586|      0|    }
  587|     93|    FT_CLEAR_WEAKREFS(op, self->weakreflist);
  ------------------
  |  |   47|     93|    do {                                            \
  |  |   48|     93|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|     93|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 93]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|     93|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  |  Branch (587:5): [True: 93, False: 0]
  ------------------
  588|     93|    (void)fileio_clear(op);
  589|       |
  590|     93|    PyTypeObject *tp = Py_TYPE(op);
  ------------------
  |  |  213|     93|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  591|     93|    tp->tp_free(op);
  592|     93|    Py_DECREF(tp);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  593|     93|}
fileio.c:fileio_traverse:
  558|     60|{
  559|     60|    fileio *self = PyFileIO_CAST(op);
  ------------------
  |  |   88|     60|#define PyFileIO_CAST(op) ((fileio *)(op))
  ------------------
  560|     60|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
  561|     60|    Py_VISIT(self->dict);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
  562|     60|    return 0;
  563|     60|}
fileio.c:fileio_clear:
  567|     93|{
  568|     93|    fileio *self = PyFileIO_CAST(op);
  ------------------
  |  |   88|     93|#define PyFileIO_CAST(op) ((fileio *)(op))
  ------------------
  569|       |    Py_CLEAR(self->dict);
  ------------------
  |  |  484|     93|    do { \
  |  |  485|     93|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     93|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     93|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     93|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     93|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     93|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 93, False: 0]
  |  |  ------------------
  |  |  488|     93|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     93|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     93|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     93|        } \
  |  |  491|     93|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  570|     93|    return 0;
  571|     93|}
fileio.c:_io_FileIO_readall_impl:
  757|     93|{
  758|     93|    Py_off_t pos, end;
  759|     93|    PyBytesWriter *writer;
  760|     93|    Py_ssize_t bytes_read = 0;
  761|     93|    Py_ssize_t n;
  762|     93|    size_t bufsize;
  763|       |
  764|     93|    if (self->fd < 0) {
  ------------------
  |  Branch (764:9): [True: 0, False: 93]
  ------------------
  765|      0|        return err_closed();
  766|      0|    }
  767|     93|    if (!self->readable) {
  ------------------
  |  Branch (767:9): [True: 0, False: 93]
  ------------------
  768|      0|        _PyIO_State *state = get_io_state_by_cls(cls);
  769|      0|        return err_mode(state, "reading");
  770|      0|    }
  771|       |
  772|     93|    if (self->stat_atopen != NULL && self->stat_atopen->st_size < _PY_READ_MAX) {
  ------------------
  |  |   59|     93|#   define _PY_READ_MAX  PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|     93|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  |  Branch (772:9): [True: 93, False: 0]
  |  Branch (772:38): [True: 93, False: 0]
  ------------------
  773|     93|        end = (Py_off_t)self->stat_atopen->st_size;
  774|     93|    }
  775|      0|    else {
  776|      0|        end = -1;
  777|      0|    }
  778|     93|    if (end <= 0) {
  ------------------
  |  Branch (778:9): [True: 0, False: 93]
  ------------------
  779|       |        /* Use a default size and resize as needed. */
  780|      0|        bufsize = SMALLCHUNK;
  ------------------
  |  |   52|      0|#  define SMALLCHUNK BUFSIZ
  ------------------
  781|      0|    }
  782|     93|    else {
  783|       |        /* This is probably a real file. */
  784|     93|        if (end > _PY_READ_MAX - 1) {
  ------------------
  |  |   59|     93|#   define _PY_READ_MAX  PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|     93|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  |  Branch (784:13): [True: 0, False: 93]
  ------------------
  785|      0|            bufsize = _PY_READ_MAX;
  ------------------
  |  |   59|      0|#   define _PY_READ_MAX  PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  786|      0|        }
  787|     93|        else {
  788|       |            /* In order to detect end of file, need a read() of at
  789|       |               least 1 byte which returns size 0. Oversize the buffer
  790|       |               by 1 byte so the I/O can be completed with two read()
  791|       |               calls (one for all data, one for EOF) without needing
  792|       |               to resize the buffer. */
  793|     93|            bufsize = (size_t)end + 1;
  794|     93|        }
  795|       |
  796|       |        /* While a lot of code does open().read() to get the whole contents
  797|       |           of a file it is possible a caller seeks/reads a ways into the file
  798|       |           then calls readall() to get the rest, which would result in allocating
  799|       |           more than required. Guard against that for larger files where we expect
  800|       |           the I/O time to dominate anyways while keeping small files fast. */
  801|     93|        if (bufsize > LARGE_BUFFER_CUTOFF_SIZE) {
  ------------------
  |  |   57|     93|#define LARGE_BUFFER_CUTOFF_SIZE 65536
  ------------------
  |  Branch (801:13): [True: 4, False: 89]
  ------------------
  802|      4|            Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|      4|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|      4|                        PyThreadState *_save; \
  |  |  119|      4|                        _save = PyEval_SaveThread();
  ------------------
  803|      4|            _Py_BEGIN_SUPPRESS_IPH
  804|       |#ifdef MS_WINDOWS
  805|       |            pos = _lseeki64(self->fd, 0L, SEEK_CUR);
  806|       |#else
  807|      4|            pos = lseek(self->fd, 0L, SEEK_CUR);
  808|      4|#endif
  809|      4|            _Py_END_SUPPRESS_IPH
  810|      4|            Py_END_ALLOW_THREADS
  ------------------
  |  |  122|      4|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|      4|                 }
  ------------------
  811|       |
  812|      4|            if (end >= pos && pos >= 0 && (end - pos) < (_PY_READ_MAX - 1)) {
  ------------------
  |  |   59|      4|#   define _PY_READ_MAX  PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|      4|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  |  Branch (812:17): [True: 4, False: 0]
  |  Branch (812:31): [True: 4, False: 0]
  |  Branch (812:43): [True: 4, False: 0]
  ------------------
  813|      4|                bufsize = (size_t)(end - pos) + 1;
  814|      4|            }
  815|      4|        }
  816|     93|    }
  817|       |
  818|     93|    writer = PyBytesWriter_Create(bufsize);
  819|     93|    if (writer == NULL) {
  ------------------
  |  Branch (819:9): [True: 0, False: 93]
  ------------------
  820|      0|        return NULL;
  821|      0|    }
  822|       |
  823|    186|    while (1) {
  ------------------
  |  Branch (823:12): [True: 186, Folded]
  ------------------
  824|    186|        if (bytes_read >= (Py_ssize_t)bufsize) {
  ------------------
  |  Branch (824:13): [True: 0, False: 186]
  ------------------
  825|      0|            bufsize = new_buffersize(self, bytes_read);
  826|      0|            if (bufsize > PY_SSIZE_T_MAX || bufsize <= 0) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (826:17): [True: 0, False: 0]
  |  Branch (826:45): [True: 0, False: 0]
  ------------------
  827|      0|                PyErr_SetString(PyExc_OverflowError,
  828|      0|                                "unbounded read returned more bytes "
  829|      0|                                "than a Python bytes object can hold");
  830|      0|                PyBytesWriter_Discard(writer);
  831|      0|                return NULL;
  832|      0|            }
  833|       |
  834|      0|            if (PyBytesWriter_GetSize(writer) < (Py_ssize_t)bufsize) {
  ------------------
  |  Branch (834:17): [True: 0, False: 0]
  ------------------
  835|      0|                if (PyBytesWriter_Resize(writer, bufsize) < 0)
  ------------------
  |  Branch (835:21): [True: 0, False: 0]
  ------------------
  836|      0|                    return NULL;
  837|      0|            }
  838|      0|        }
  839|       |
  840|    186|        n = _Py_read(self->fd,
  841|    186|                     (char*)PyBytesWriter_GetData(writer) + bytes_read,
  842|    186|                     bufsize - bytes_read);
  843|       |
  844|    186|        if (n == 0)
  ------------------
  |  Branch (844:13): [True: 93, False: 93]
  ------------------
  845|     93|            break;
  846|     93|        if (n == -1) {
  ------------------
  |  Branch (846:13): [True: 0, False: 93]
  ------------------
  847|      0|            if (errno == EAGAIN) {
  ------------------
  |  Branch (847:17): [True: 0, False: 0]
  ------------------
  848|      0|                PyErr_Clear();
  849|      0|                if (bytes_read > 0)
  ------------------
  |  Branch (849:21): [True: 0, False: 0]
  ------------------
  850|      0|                    break;
  851|      0|                PyBytesWriter_Discard(writer);
  852|      0|                Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  853|      0|            }
  854|      0|            PyBytesWriter_Discard(writer);
  855|      0|            return NULL;
  856|      0|        }
  857|     93|        bytes_read += n;
  858|     93|    }
  859|       |
  860|     93|    return PyBytesWriter_FinishWithSize(writer, bytes_read);
  861|     93|}
fileio.c:_io_FileIO_write_impl:
  936|  48.4k|{
  937|  48.4k|    Py_ssize_t n;
  938|  48.4k|    int err;
  939|       |
  940|  48.4k|    if (self->fd < 0)
  ------------------
  |  Branch (940:9): [True: 0, False: 48.4k]
  ------------------
  941|      0|        return err_closed();
  942|  48.4k|    if (!self->writable) {
  ------------------
  |  Branch (942:9): [True: 0, False: 48.4k]
  ------------------
  943|      0|        _PyIO_State *state = get_io_state_by_cls(cls);
  944|      0|        return err_mode(state, "writing");
  945|      0|    }
  946|       |
  947|  48.4k|    n = _Py_write(self->fd, b->buf, b->len);
  948|       |    /* copy errno because PyBuffer_Release() can indirectly modify it */
  949|  48.4k|    err = errno;
  950|       |
  951|  48.4k|    if (n < 0) {
  ------------------
  |  Branch (951:9): [True: 0, False: 48.4k]
  ------------------
  952|      0|        if (err == EAGAIN) {
  ------------------
  |  Branch (952:13): [True: 0, False: 0]
  ------------------
  953|      0|            PyErr_Clear();
  954|      0|            Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  955|      0|        }
  956|      0|        return NULL;
  957|      0|    }
  958|       |
  959|  48.4k|    return PyLong_FromSsize_t(n);
  960|  48.4k|}
fileio.c:portable_lseek:
  967|    103|{
  968|    103|    Py_off_t pos, res;
  969|    103|    int fd = self->fd;
  970|       |
  971|    103|#ifdef SEEK_SET
  972|       |    /* Turn 0, 1, 2 into SEEK_{SET,CUR,END} */
  973|    103|    switch (whence) {
  ------------------
  |  Branch (973:13): [Folded, False: 103]
  ------------------
  974|       |#if SEEK_SET != 0
  975|       |    case 0: whence = SEEK_SET; break;
  976|       |#endif
  977|       |#if SEEK_CUR != 1
  978|       |    case 1: whence = SEEK_CUR; break;
  979|       |#endif
  980|       |#if SEEK_END != 2
  981|       |    case 2: whence = SEEK_END; break;
  982|       |#endif
  983|    103|    }
  984|    103|#endif /* SEEK_SET */
  985|       |
  986|    103|    if (posobj == NULL) {
  ------------------
  |  Branch (986:9): [True: 103, False: 0]
  ------------------
  987|    103|        pos = 0;
  988|    103|    }
  989|      0|    else {
  990|       |#if defined(HAVE_LARGEFILE_SUPPORT)
  991|       |        pos = PyLong_AsLongLong(posobj);
  992|       |#else
  993|      0|        pos = PyLong_AsLong(posobj);
  994|      0|#endif
  995|      0|        if (PyErr_Occurred())
  ------------------
  |  Branch (995:13): [True: 0, False: 0]
  ------------------
  996|      0|            return NULL;
  997|      0|    }
  998|       |
  999|    103|    Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|    103|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|    103|                        PyThreadState *_save; \
  |  |  119|    103|                        _save = PyEval_SaveThread();
  ------------------
 1000|    103|    _Py_BEGIN_SUPPRESS_IPH
 1001|       |#ifdef MS_WINDOWS
 1002|       |    HANDLE h = (HANDLE)_get_osfhandle(fd);
 1003|       |    if (h != INVALID_HANDLE_VALUE && GetFileType(h) == FILE_TYPE_PIPE) {
 1004|       |        res = -1;
 1005|       |        errno = ESPIPE;
 1006|       |    }
 1007|       |    else {
 1008|       |        res = _lseeki64(fd, pos, whence);
 1009|       |    }
 1010|       |#else
 1011|    103|    res = lseek(fd, pos, whence);
 1012|    103|#endif
 1013|    103|    _Py_END_SUPPRESS_IPH
 1014|    103|    Py_END_ALLOW_THREADS
  ------------------
  |  |  122|    103|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|    103|                 }
  ------------------
 1015|       |
 1016|    103|    if (self->seekable < 0) {
  ------------------
  |  Branch (1016:9): [True: 99, False: 4]
  ------------------
 1017|     99|        self->seekable = (res >= 0);
 1018|     99|    }
 1019|       |
 1020|    103|    if (res < 0) {
  ------------------
  |  Branch (1020:9): [True: 0, False: 103]
  ------------------
 1021|      0|        if (suppress_pipe_error && errno == ESPIPE) {
  ------------------
  |  Branch (1021:13): [True: 0, False: 0]
  |  Branch (1021:36): [True: 0, False: 0]
  ------------------
 1022|      0|            res = 0;
 1023|      0|        } else {
 1024|      0|            return PyErr_SetFromErrno(PyExc_OSError);
 1025|      0|        }
 1026|      0|    }
 1027|       |
 1028|       |#if defined(HAVE_LARGEFILE_SUPPORT)
 1029|       |    return PyLong_FromLongLong(res);
 1030|       |#else
 1031|    103|    return PyLong_FromLong(res);
 1032|    103|#endif
 1033|    103|}
fileio.c:_io_FileIO_tell_impl:
 1074|    103|{
 1075|    103|    if (self->fd < 0)
  ------------------
  |  Branch (1075:9): [True: 0, False: 103]
  ------------------
 1076|      0|        return err_closed();
 1077|       |
 1078|    103|    return portable_lseek(self, NULL, 1, false);
 1079|    103|}
fileio.c:_io_FileIO_close_impl:
  170|     93|{
  171|     93|    PyObject *res;
  172|     93|    int rc;
  173|     93|    _PyIO_State *state = get_io_state_by_cls(cls);
  174|     93|    res = PyObject_CallMethodOneArg((PyObject*)state->PyRawIOBase_Type,
  175|     93|                                     &_Py_ID(close), (PyObject *)self);
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|     93|    if (!self->closefd) {
  ------------------
  |  Branch (176:9): [True: 0, False: 93]
  ------------------
  177|      0|        self->fd = -1;
  178|      0|        return res;
  179|      0|    }
  180|       |
  181|     93|    PyObject *exc = NULL;
  182|     93|    if (res == NULL) {
  ------------------
  |  Branch (182:9): [True: 0, False: 93]
  ------------------
  183|      0|        exc = PyErr_GetRaisedException();
  184|      0|    }
  185|     93|    if (self->finalizing) {
  ------------------
  |  Branch (185:9): [True: 0, False: 93]
  ------------------
  186|      0|        PyObject *r = _io_FileIO__dealloc_warn_impl(self, (PyObject *)self);
  187|      0|        if (r) {
  ------------------
  |  Branch (187:13): [True: 0, False: 0]
  ------------------
  188|      0|            Py_DECREF(r);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      0|        }
  190|      0|        else {
  191|      0|            PyErr_Clear();
  192|      0|        }
  193|      0|    }
  194|     93|    rc = internal_close(self);
  195|     93|    if (res == NULL) {
  ------------------
  |  Branch (195:9): [True: 0, False: 93]
  ------------------
  196|      0|        _PyErr_ChainExceptions1(exc);
  197|      0|    }
  198|     93|    if (rc < 0) {
  ------------------
  |  Branch (198:9): [True: 0, False: 93]
  ------------------
  199|       |        Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  200|      0|    }
  201|     93|    return res;
  202|     93|}
fileio.c:internal_close:
  130|     93|{
  131|     93|    int err = 0;
  132|     93|    int save_errno = 0;
  133|     93|    if (self->fd >= 0) {
  ------------------
  |  Branch (133:9): [True: 93, False: 0]
  ------------------
  134|     93|        int fd = self->fd;
  135|     93|        self->fd = -1;
  136|       |        /* fd is accessible and someone else may have closed it */
  137|     93|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|     93|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|     93|                        PyThreadState *_save; \
  |  |  119|     93|                        _save = PyEval_SaveThread();
  ------------------
  138|     93|        _Py_BEGIN_SUPPRESS_IPH
  139|     93|        err = close(fd);
  140|     93|        if (err < 0)
  ------------------
  |  Branch (140:13): [True: 0, False: 93]
  ------------------
  141|      0|            save_errno = errno;
  142|     93|        _Py_END_SUPPRESS_IPH
  143|     93|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|     93|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|     93|                 }
  ------------------
  144|     93|    }
  145|     93|    PyMem_Free(self->stat_atopen);
  146|     93|    self->stat_atopen = NULL;
  147|     93|    if (err < 0) {
  ------------------
  |  Branch (147:9): [True: 0, False: 93]
  ------------------
  148|      0|        errno = save_errno;
  149|      0|        PyErr_SetFromErrno(PyExc_OSError);
  150|      0|        return -1;
  151|      0|    }
  152|     93|    return 0;
  153|     93|}
fileio.c:_io_FileIO_seekable_impl:
  663|      6|{
  664|      6|    if (self->fd < 0)
  ------------------
  |  Branch (664:9): [True: 0, False: 6]
  ------------------
  665|      0|        return err_closed();
  666|      6|    if (self->seekable < 0) {
  ------------------
  |  Branch (666:9): [True: 0, False: 6]
  ------------------
  667|       |        /* portable_lseek() sets the seekable attribute */
  668|      0|        PyObject *pos = portable_lseek(self, NULL, SEEK_CUR, false);
  669|      0|        assert(self->seekable >= 0);
  ------------------
  |  Branch (669:9): [True: 0, False: 0]
  ------------------
  670|      0|        if (pos == NULL) {
  ------------------
  |  Branch (670:13): [True: 0, False: 0]
  ------------------
  671|      0|            PyErr_Clear();
  672|      0|        }
  673|      0|        else {
  674|      0|            Py_DECREF(pos);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|      0|        }
  676|      0|    }
  677|      6|    return PyBool_FromLong((long) self->seekable);
  678|      6|}
fileio.c:_io_FileIO_readable_impl:
  633|     97|{
  634|     97|    if (self->fd < 0)
  ------------------
  |  Branch (634:9): [True: 0, False: 97]
  ------------------
  635|      0|        return err_closed();
  636|     97|    return PyBool_FromLong((long) self->readable);
  637|     97|}
fileio.c:_io_FileIO_writable_impl:
  648|      8|{
  649|      8|    if (self->fd < 0)
  ------------------
  |  Branch (649:9): [True: 0, False: 8]
  ------------------
  650|      0|        return err_closed();
  651|      8|    return PyBool_FromLong((long) self->writable);
  652|      8|}
fileio.c:_io_FileIO_isatty_impl:
 1239|      8|{
 1240|      8|    long res;
 1241|       |
 1242|      8|    if (self->fd < 0)
  ------------------
  |  Branch (1242:9): [True: 0, False: 8]
  ------------------
 1243|      0|        return err_closed();
 1244|      8|    Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|      8|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|      8|                        PyThreadState *_save; \
  |  |  119|      8|                        _save = PyEval_SaveThread();
  ------------------
 1245|      8|    _Py_BEGIN_SUPPRESS_IPH
 1246|      8|    res = isatty(self->fd);
 1247|      8|    _Py_END_SUPPRESS_IPH
 1248|      8|    Py_END_ALLOW_THREADS
  ------------------
  |  |  122|      8|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|      8|                 }
  ------------------
 1249|      8|    return PyBool_FromLong(res);
 1250|      8|}
fileio.c:_io_FileIO__isatty_open_only_impl:
 1267|     99|{
 1268|     99|    if (self->stat_atopen != NULL && !S_ISCHR(self->stat_atopen->st_mode)) {
  ------------------
  |  Branch (1268:9): [True: 99, False: 0]
  |  Branch (1268:38): [True: 97, False: 2]
  ------------------
 1269|     97|        Py_RETURN_FALSE;
  ------------------
  |  |   45|     97|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|     97|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     97|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     97|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1270|     97|    }
 1271|      2|    return _io_FileIO_isatty_impl(self);
 1272|     99|}
fileio.c:_io_FileIO_closed_get_impl:
 1308|    279|{
 1309|    279|    return self->fd < 0;
 1310|    279|}
fileio.c:_io_FileIO__blksize_get_impl:
 1350|     99|{
 1351|     99|#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
 1352|     99|    if (self->stat_atopen != NULL && self->stat_atopen->st_blksize > 1) {
  ------------------
  |  Branch (1352:9): [True: 99, False: 0]
  |  Branch (1352:38): [True: 99, False: 0]
  ------------------
 1353|     99|        return self->stat_atopen->st_blksize;
 1354|     99|    }
 1355|      0|#endif /* HAVE_STRUCT_STAT_ST_BLKSIZE */
 1356|      0|    return DEFAULT_BUFFER_SIZE;
  ------------------
  |  |   82|      0|#define DEFAULT_BUFFER_SIZE (128 * 1024)  /* bytes */
  ------------------
 1357|     99|}
fileio.c:_io_FileIO___init___impl:
  260|     99|{
  261|       |#ifdef MS_WINDOWS
  262|       |    wchar_t *widename = NULL;
  263|       |#else
  264|     99|    const char *name = NULL;
  265|     99|#endif
  266|     99|    PyObject *stringobj = NULL;
  267|     99|    const char *s;
  268|     99|    int ret = 0;
  269|     99|    int rwa = 0, plus = 0;
  270|     99|    int flags = 0;
  271|     99|    int fd = -1;
  272|     99|    int fd_is_own = 0;
  273|     99|#ifdef O_CLOEXEC
  274|     99|    int *atomic_flag_works = &_Py_open_cloexec_works;
  275|       |#elif !defined(MS_WINDOWS)
  276|       |    int *atomic_flag_works = NULL;
  277|       |#endif
  278|     99|    int fstat_result;
  279|     99|    int async_err = 0;
  280|       |
  281|       |#ifdef Py_DEBUG
  282|       |    _PyIO_State *state = find_io_state_by_def(Py_TYPE(self));
  283|       |    assert(PyFileIO_Check(state, self));
  284|       |#endif
  285|     99|    if (self->fd >= 0) {
  ------------------
  |  Branch (285:9): [True: 0, False: 99]
  ------------------
  286|      0|        if (self->closefd) {
  ------------------
  |  Branch (286:13): [True: 0, False: 0]
  ------------------
  287|       |            /* Have to close the existing file first. */
  288|      0|            if (internal_close(self) < 0) {
  ------------------
  |  Branch (288:17): [True: 0, False: 0]
  ------------------
  289|      0|                return -1;
  290|      0|            }
  291|      0|        }
  292|      0|        else
  293|      0|            self->fd = -1;
  294|      0|    }
  295|       |
  296|     99|    if (PyBool_Check(nameobj)) {
  ------------------
  |  |   12|     99|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|     99|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 99]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      0|        if (PyErr_WarnEx(PyExc_RuntimeWarning,
  ------------------
  |  Branch (297:13): [True: 0, False: 0]
  ------------------
  298|      0|                "bool is used as a file descriptor", 1))
  299|      0|        {
  300|      0|            return -1;
  301|      0|        }
  302|      0|    }
  303|     99|    fd = PyLong_AsInt(nameobj);
  304|     99|    if (fd < 0) {
  ------------------
  |  Branch (304:9): [True: 93, False: 6]
  ------------------
  305|     93|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (305:13): [True: 0, False: 93]
  ------------------
  306|      0|            PyErr_SetString(PyExc_ValueError,
  307|      0|                            "negative file descriptor");
  308|      0|            return -1;
  309|      0|        }
  310|     93|        PyErr_Clear();
  311|     93|    }
  312|       |
  313|     99|    if (fd < 0) {
  ------------------
  |  Branch (313:9): [True: 93, False: 6]
  ------------------
  314|       |#ifdef MS_WINDOWS
  315|       |        if (!PyUnicode_FSDecoder(nameobj, &stringobj)) {
  316|       |            return -1;
  317|       |        }
  318|       |        widename = PyUnicode_AsWideCharString(stringobj, NULL);
  319|       |        if (widename == NULL)
  320|       |            return -1;
  321|       |#else
  322|     93|        if (!PyUnicode_FSConverter(nameobj, &stringobj)) {
  ------------------
  |  Branch (322:13): [True: 0, False: 93]
  ------------------
  323|      0|            return -1;
  324|      0|        }
  325|     93|        name = PyBytes_AS_STRING(stringobj);
  ------------------
  |  |   27|     93|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  326|     93|#endif
  327|     93|    }
  328|       |
  329|     99|    s = mode;
  330|    198|    while (*s) {
  ------------------
  |  Branch (330:12): [True: 99, False: 99]
  ------------------
  331|     99|        switch (*s++) {
  332|      0|        case 'x':
  ------------------
  |  Branch (332:9): [True: 0, False: 99]
  ------------------
  333|      0|            if (rwa) {
  ------------------
  |  Branch (333:17): [True: 0, False: 0]
  ------------------
  334|      0|            bad_mode:
  335|      0|                PyErr_SetString(PyExc_ValueError,
  336|      0|                                "Must have exactly one of create/read/write/append "
  337|      0|                                "mode and at most one plus");
  338|      0|                goto error;
  339|      0|            }
  340|      0|            rwa = 1;
  341|      0|            self->created = 1;
  342|      0|            self->writable = 1;
  343|      0|            flags |= O_EXCL | O_CREAT;
  344|      0|            break;
  345|     95|        case 'r':
  ------------------
  |  Branch (345:9): [True: 95, False: 4]
  ------------------
  346|     95|            if (rwa)
  ------------------
  |  Branch (346:17): [True: 0, False: 95]
  ------------------
  347|      0|                goto bad_mode;
  348|     95|            rwa = 1;
  349|     95|            self->readable = 1;
  350|     95|            break;
  351|      4|        case 'w':
  ------------------
  |  Branch (351:9): [True: 4, False: 95]
  ------------------
  352|      4|            if (rwa)
  ------------------
  |  Branch (352:17): [True: 0, False: 4]
  ------------------
  353|      0|                goto bad_mode;
  354|      4|            rwa = 1;
  355|      4|            self->writable = 1;
  356|      4|            self->truncate = 1;
  357|      4|            flags |= O_CREAT | O_TRUNC;
  358|      4|            break;
  359|      0|        case 'a':
  ------------------
  |  Branch (359:9): [True: 0, False: 99]
  ------------------
  360|      0|            if (rwa)
  ------------------
  |  Branch (360:17): [True: 0, False: 0]
  ------------------
  361|      0|                goto bad_mode;
  362|      0|            rwa = 1;
  363|      0|            self->writable = 1;
  364|      0|            self->appending = 1;
  365|      0|            flags |= O_APPEND | O_CREAT;
  366|      0|            break;
  367|      0|        case 'b':
  ------------------
  |  Branch (367:9): [True: 0, False: 99]
  ------------------
  368|      0|            break;
  369|      0|        case '+':
  ------------------
  |  Branch (369:9): [True: 0, False: 99]
  ------------------
  370|      0|            if (plus)
  ------------------
  |  Branch (370:17): [True: 0, False: 0]
  ------------------
  371|      0|                goto bad_mode;
  372|      0|            self->readable = self->writable = 1;
  373|      0|            plus = 1;
  374|      0|            break;
  375|      0|        default:
  ------------------
  |  Branch (375:9): [True: 0, False: 99]
  ------------------
  376|      0|            PyErr_Format(PyExc_ValueError,
  377|      0|                         "invalid mode: %.200s", mode);
  378|      0|            goto error;
  379|     99|        }
  380|     99|    }
  381|       |
  382|     99|    if (!rwa)
  ------------------
  |  Branch (382:9): [True: 0, False: 99]
  ------------------
  383|      0|        goto bad_mode;
  384|       |
  385|     99|    if (self->readable && self->writable)
  ------------------
  |  Branch (385:9): [True: 95, False: 4]
  |  Branch (385:27): [True: 0, False: 95]
  ------------------
  386|      0|        flags |= O_RDWR;
  387|     99|    else if (self->readable)
  ------------------
  |  Branch (387:14): [True: 95, False: 4]
  ------------------
  388|     95|        flags |= O_RDONLY;
  389|      4|    else
  390|      4|        flags |= O_WRONLY;
  391|       |
  392|       |#ifdef O_BINARY
  393|       |    flags |= O_BINARY;
  394|       |#endif
  395|       |
  396|       |#ifdef MS_WINDOWS
  397|       |    flags |= O_NOINHERIT;
  398|       |#elif defined(O_CLOEXEC)
  399|     99|    flags |= O_CLOEXEC;
  400|     99|#endif
  401|       |
  402|     99|    if (PySys_Audit("open", "Osi", nameobj, mode, flags) < 0) {
  ------------------
  |  Branch (402:9): [True: 0, False: 99]
  ------------------
  403|      0|        goto error;
  404|      0|    }
  405|       |
  406|     99|    if (fd >= 0) {
  ------------------
  |  Branch (406:9): [True: 6, False: 93]
  ------------------
  407|      6|        self->fd = fd;
  408|      6|        self->closefd = closefd;
  409|      6|    }
  410|     93|    else {
  411|     93|        self->closefd = 1;
  412|     93|        if (!closefd) {
  ------------------
  |  Branch (412:13): [True: 0, False: 93]
  ------------------
  413|      0|            PyErr_SetString(PyExc_ValueError,
  414|      0|                "Cannot use closefd=False with file name");
  415|      0|            goto error;
  416|      0|        }
  417|       |
  418|     93|        errno = 0;
  419|     93|        if (opener == Py_None) {
  ------------------
  |  |  616|     93|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (419:13): [True: 93, False: 0]
  ------------------
  420|     93|            do {
  421|     93|                Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|     93|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|     93|                        PyThreadState *_save; \
  |  |  119|     93|                        _save = PyEval_SaveThread();
  ------------------
  422|       |#ifdef MS_WINDOWS
  423|       |                self->fd = _wopen(widename, flags, 0666);
  424|       |#else
  425|     93|                self->fd = open(name, flags, 0666);
  426|     93|#endif
  427|     93|                Py_END_ALLOW_THREADS
  ------------------
  |  |  122|     93|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|     93|                 }
  ------------------
  428|     93|            } while (self->fd < 0 && errno == EINTR &&
  ------------------
  |  Branch (428:22): [True: 0, False: 93]
  |  Branch (428:38): [True: 0, False: 0]
  ------------------
  429|      0|                     !(async_err = PyErr_CheckSignals()));
  ------------------
  |  Branch (429:22): [True: 0, False: 0]
  ------------------
  430|       |
  431|     93|            if (async_err)
  ------------------
  |  Branch (431:17): [True: 0, False: 93]
  ------------------
  432|      0|                goto error;
  433|       |
  434|     93|            if (self->fd < 0) {
  ------------------
  |  Branch (434:17): [True: 0, False: 93]
  ------------------
  435|      0|                PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj);
  436|      0|                goto error;
  437|      0|            }
  438|     93|        }
  439|      0|        else {
  440|      0|            PyObject *fdobj;
  441|       |
  442|      0|#ifndef MS_WINDOWS
  443|       |            /* the opener may clear the atomic flag */
  444|      0|            atomic_flag_works = NULL;
  445|      0|#endif
  446|       |
  447|      0|            fdobj = PyObject_CallFunction(opener, "Oi", nameobj, flags);
  448|      0|            if (fdobj == NULL)
  ------------------
  |  Branch (448:17): [True: 0, False: 0]
  ------------------
  449|      0|                goto error;
  450|      0|            if (!PyLong_Check(fdobj)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (450:17): [True: 0, False: 0]
  ------------------
  451|      0|                Py_DECREF(fdobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  452|      0|                PyErr_SetString(PyExc_TypeError,
  453|      0|                        "expected integer from opener");
  454|      0|                goto error;
  455|      0|            }
  456|       |
  457|      0|            self->fd = PyLong_AsInt(fdobj);
  458|      0|            Py_DECREF(fdobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|      0|            if (self->fd < 0) {
  ------------------
  |  Branch (459:17): [True: 0, False: 0]
  ------------------
  460|      0|                if (!PyErr_Occurred()) {
  ------------------
  |  Branch (460:21): [True: 0, False: 0]
  ------------------
  461|       |                    /* The opener returned a negative but didn't set an
  462|       |                       exception.  See issue #27066 */
  463|      0|                    PyErr_Format(PyExc_ValueError,
  464|      0|                                 "opener returned %d", self->fd);
  465|      0|                }
  466|      0|                goto error;
  467|      0|            }
  468|      0|        }
  469|     93|        fd_is_own = 1;
  470|       |
  471|     93|#ifndef MS_WINDOWS
  472|     93|        if (_Py_set_inheritable(self->fd, 0, atomic_flag_works) < 0)
  ------------------
  |  Branch (472:13): [True: 0, False: 93]
  ------------------
  473|      0|            goto error;
  474|     93|#endif
  475|     93|    }
  476|       |
  477|     99|    PyMem_Free(self->stat_atopen);
  478|     99|    self->stat_atopen = PyMem_New(struct _Py_stat_struct, 1);
  ------------------
  |  |   64|     99|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|     99|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [Folded, False: 99]
  |  |  ------------------
  |  |   65|     99|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
  479|     99|    if (self->stat_atopen == NULL) {
  ------------------
  |  Branch (479:9): [True: 0, False: 99]
  ------------------
  480|      0|        PyErr_NoMemory();
  481|      0|        goto error;
  482|      0|    }
  483|     99|    Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|     99|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|     99|                        PyThreadState *_save; \
  |  |  119|     99|                        _save = PyEval_SaveThread();
  ------------------
  484|     99|    fstat_result = _Py_fstat_noraise(self->fd, self->stat_atopen);
  485|     99|    Py_END_ALLOW_THREADS
  ------------------
  |  |  122|     99|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|     99|                 }
  ------------------
  486|     99|    if (fstat_result < 0) {
  ------------------
  |  Branch (486:9): [True: 0, False: 99]
  ------------------
  487|       |        /* Tolerate fstat() errors other than EBADF.  See Issue #25717, where
  488|       |        an anonymous file on a Virtual Box shared folder filesystem would
  489|       |        raise ENOENT. */
  490|       |#ifdef MS_WINDOWS
  491|       |        if (GetLastError() == ERROR_INVALID_HANDLE) {
  492|       |            PyErr_SetFromWindowsErr(0);
  493|       |#else
  494|      0|        if (errno == EBADF) {
  ------------------
  |  Branch (494:13): [True: 0, False: 0]
  ------------------
  495|      0|            PyErr_SetFromErrno(PyExc_OSError);
  496|      0|#endif
  497|      0|            goto error;
  498|      0|        }
  499|       |
  500|      0|        PyMem_Free(self->stat_atopen);
  501|      0|        self->stat_atopen = NULL;
  502|      0|    }
  503|     99|    else {
  504|     99|#if defined(S_ISDIR) && defined(EISDIR)
  505|       |        /* On Unix, open will succeed for directories.
  506|       |           In Python, there should be no file objects referring to
  507|       |           directories, so we need a check.  */
  508|     99|        if (S_ISDIR(self->stat_atopen->st_mode)) {
  ------------------
  |  Branch (508:13): [True: 0, False: 99]
  ------------------
  509|      0|            errno = EISDIR;
  510|      0|            PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, nameobj);
  511|      0|            goto error;
  512|      0|        }
  513|     99|#endif /* defined(S_ISDIR) */
  514|     99|    }
  515|       |
  516|       |#if defined(MS_WINDOWS) || defined(__CYGWIN__)
  517|       |    /* don't translate newlines (\r\n <=> \n) */
  518|       |    _setmode(self->fd, O_BINARY);
  519|       |#endif
  520|       |
  521|     99|    if (PyObject_SetAttr((PyObject *)self, &_Py_ID(name), nameobj) < 0)
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (521:9): [True: 0, False: 99]
  ------------------
  522|      0|        goto error;
  523|       |
  524|     99|    if (self->appending) {
  ------------------
  |  Branch (524:9): [True: 0, False: 99]
  ------------------
  525|       |        /* For consistent behaviour, we explicitly seek to the
  526|       |           end of file (otherwise, it might be done only on the
  527|       |           first write()). */
  528|      0|        PyObject *pos = portable_lseek(self, NULL, 2, true);
  529|      0|        if (pos == NULL)
  ------------------
  |  Branch (529:13): [True: 0, False: 0]
  ------------------
  530|      0|            goto error;
  531|      0|        Py_DECREF(pos);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      0|    }
  533|       |
  534|     99|    goto done;
  535|       |
  536|     99| error:
  537|      0|    ret = -1;
  538|      0|    if (!fd_is_own)
  ------------------
  |  Branch (538:9): [True: 0, False: 0]
  ------------------
  539|      0|        self->fd = -1;
  540|      0|    if (self->fd >= 0) {
  ------------------
  |  Branch (540:9): [True: 0, False: 0]
  ------------------
  541|      0|        PyObject *exc = PyErr_GetRaisedException();
  542|      0|        internal_close(self);
  543|      0|        _PyErr_ChainExceptions1(exc);
  544|      0|    }
  545|      0|    PyMem_Free(self->stat_atopen);
  546|      0|    self->stat_atopen = NULL;
  547|       |
  548|     99| done:
  549|       |#ifdef MS_WINDOWS
  550|       |    PyMem_Free(widename);
  551|       |#endif
  552|       |    Py_CLEAR(stringobj);
  ------------------
  |  |  484|     99|    do { \
  |  |  485|     99|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     99|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     99|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     99|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     99|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     99|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 93, False: 6]
  |  |  ------------------
  |  |  488|     93|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     93|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     93|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     93|        } \
  |  |  491|     99|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 99]
  |  |  ------------------
  ------------------
  553|     99|    return ret;
  554|      0|}
fileio.c:fileio_new:
  206|     99|{
  207|     99|    assert(type != NULL && type->tp_alloc != NULL);
  ------------------
  |  Branch (207:5): [True: 99, False: 0]
  |  Branch (207:5): [True: 99, False: 0]
  ------------------
  208|       |
  209|     99|    fileio *self = (fileio *) type->tp_alloc(type, 0);
  210|     99|    if (self == NULL) {
  ------------------
  |  Branch (210:9): [True: 0, False: 99]
  ------------------
  211|      0|        return NULL;
  212|      0|    }
  213|       |
  214|     99|    self->fd = -1;
  215|     99|    self->created = 0;
  216|     99|    self->readable = 0;
  217|     99|    self->writable = 0;
  218|     99|    self->appending = 0;
  219|     99|    self->seekable = -1;
  220|     99|    self->truncate = 0;
  221|     99|    self->stat_atopen = NULL;
  222|     99|    self->closefd = 1;
  223|       |    self->weakreflist = NULL;
  224|     99|    return (PyObject *) self;
  225|     99|}

_PyIOBase_finalize:
  367|    186|{
  368|    186|    int is_zombie;
  369|       |
  370|       |    /* If _PyIOBase_finalize() is called from a destructor, we need to
  371|       |       resurrect the object as calling close() can invoke arbitrary code. */
  372|    186|    is_zombie = (Py_REFCNT(self) == 0);
  ------------------
  |  |  119|    186|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    186|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    186|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|    186|    if (is_zombie)
  ------------------
  |  Branch (373:9): [True: 186, False: 0]
  ------------------
  374|    186|        return PyObject_CallFinalizerFromDealloc(self);
  375|      0|    else {
  376|      0|        PyObject_CallFinalizer(self);
  377|      0|        return 0;
  378|      0|    }
  379|    186|}
_PyIOBase_check_readable:
  478|     95|{
  479|     95|    PyObject *res = PyObject_CallMethodNoArgs(self, &_Py_ID(readable));
  ------------------
  |  |  936|     95|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     95|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     95|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|     95|    if (res == NULL)
  ------------------
  |  Branch (480:9): [True: 0, False: 95]
  ------------------
  481|      0|        return NULL;
  482|     95|    if (res != Py_True) {
  ------------------
  |  |   26|     95|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (482:9): [True: 0, False: 95]
  ------------------
  483|      0|        Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  484|      0|        iobase_unsupported(state, "File or stream is not readable.");
  485|      0|        return NULL;
  486|      0|    }
  487|     95|    if (args == Py_True) {
  ------------------
  |  |   26|     95|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (487:9): [True: 95, False: 0]
  ------------------
  488|     95|        Py_DECREF(res);
  ------------------
  |  |  430|     95|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|     95|    }
  490|     95|    return res;
  491|     95|}
_PyIOBase_check_writable:
  511|      4|{
  512|      4|    PyObject *res = PyObject_CallMethodNoArgs(self, &_Py_ID(writable));
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|      4|    if (res == NULL)
  ------------------
  |  Branch (513:9): [True: 0, False: 4]
  ------------------
  514|      0|        return NULL;
  515|      4|    if (res != Py_True) {
  ------------------
  |  |   26|      4|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (515:9): [True: 0, False: 4]
  ------------------
  516|      0|        Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  517|      0|        iobase_unsupported(state, "File or stream is not writable.");
  518|      0|        return NULL;
  519|      0|    }
  520|      4|    if (args == Py_True) {
  ------------------
  |  |   26|      4|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (520:9): [True: 4, False: 0]
  ------------------
  521|      4|        Py_DECREF(res);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|      4|    }
  523|      4|    return res;
  524|      4|}
iobase.c:iobase_check_closed:
  203|     93|{
  204|     93|    PyObject *res;
  205|     93|    int closed;
  206|       |    /* This gets the derived attribute, which is *not* __IOBase_closed
  207|       |       in most cases! */
  208|     93|    closed = PyObject_GetOptionalAttr(self, &_Py_ID(closed), &res);
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|     93|    if (closed > 0) {
  ------------------
  |  Branch (209:9): [True: 93, False: 0]
  ------------------
  210|     93|        closed = PyObject_IsTrue(res);
  211|     93|        Py_DECREF(res);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|     93|        if (closed > 0) {
  ------------------
  |  Branch (212:13): [True: 0, False: 93]
  ------------------
  213|      0|            PyErr_SetString(PyExc_ValueError, "I/O operation on closed file.");
  214|      0|            return -1;
  215|      0|        }
  216|     93|    }
  217|     93|    return closed;
  218|     93|}
iobase.c:_io__IOBase_flush_impl:
  174|    186|{
  175|       |    /* XXX Should this return the number of bytes written??? */
  176|    186|    int closed = iobase_is_closed(self);
  177|       |
  178|    186|    if (!closed) {
  ------------------
  |  Branch (178:9): [True: 186, False: 0]
  ------------------
  179|    186|        Py_RETURN_NONE;
  ------------------
  |  |  628|    186|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    186|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  180|    186|    }
  181|      0|    if (closed > 0) {
  ------------------
  |  Branch (181:9): [True: 0, False: 0]
  ------------------
  182|      0|        PyErr_SetString(PyExc_ValueError, "I/O operation on closed file.");
  183|      0|    }
  184|       |    return NULL;
  185|    186|}
iobase.c:iobase_is_closed:
   82|    279|{
   83|    279|    return PyObject_HasAttrWithError(self, &_Py_ID(__IOBase_closed));
  ------------------
  |  |  936|    279|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    279|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    279|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|    279|}
iobase.c:_io__IOBase_close_impl:
  302|     93|{
  303|     93|    int rc1, rc2, closed = iobase_is_closed(self);
  304|       |
  305|     93|    if (closed < 0) {
  ------------------
  |  Branch (305:9): [True: 0, False: 93]
  ------------------
  306|      0|        return NULL;
  307|      0|    }
  308|     93|    if (closed) {
  ------------------
  |  Branch (308:9): [True: 0, False: 93]
  ------------------
  309|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  310|      0|    }
  311|       |
  312|     93|    rc1 = _PyFile_Flush(self);
  313|     93|    PyObject *exc = PyErr_GetRaisedException();
  314|     93|    rc2 = PyObject_SetAttr(self, &_Py_ID(__IOBase_closed), Py_True);
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  rc2 = PyObject_SetAttr(self, &_Py_ID(__IOBase_closed), Py_True);
  ------------------
  |  |   26|     93|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|     93|    _PyErr_ChainExceptions1(exc);
  316|     93|    if (rc1 < 0 || rc2 < 0) {
  ------------------
  |  Branch (316:9): [True: 0, False: 93]
  |  Branch (316:20): [True: 0, False: 93]
  ------------------
  317|      0|        return NULL;
  318|      0|    }
  319|       |
  320|     93|    Py_RETURN_NONE;
  ------------------
  |  |  628|     93|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     93|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  321|     93|}
iobase.c:_io__IOBase_readable_impl:
  471|      4|{
  472|      4|    Py_RETURN_FALSE;
  ------------------
  |  |   45|      4|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      4|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  473|      4|}
iobase.c:_io__IOBase_writable_impl:
  504|      2|{
  505|      2|    Py_RETURN_FALSE;
  ------------------
  |  |   45|      2|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      2|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|      2|}
iobase.c:_io__IOBase___enter___impl:
  537|     93|{
  538|     93|    if (iobase_check_closed(self))
  ------------------
  |  Branch (538:9): [True: 0, False: 93]
  ------------------
  539|      0|        return NULL;
  540|       |
  541|     93|    return Py_NewRef(self);
  ------------------
  |  |  550|     93|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  542|     93|}
iobase.c:_io__IOBase___exit___impl:
  554|     93|{
  555|     93|    return PyObject_CallMethodNoArgs(self, &_Py_ID(close));
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|     93|}
iobase.c:iobase_finalize:
  327|    186|{
  328|    186|    PyObject *res;
  329|    186|    int closed;
  330|       |
  331|       |    /* Save the current exception, if any. */
  332|    186|    PyObject *exc = PyErr_GetRaisedException();
  333|       |
  334|       |    /* If `closed` doesn't exist or can't be evaluated as bool, then the
  335|       |       object is probably in an unusable state, so ignore. */
  336|    186|    if (PyObject_GetOptionalAttr(self, &_Py_ID(closed), &res) <= 0) {
  ------------------
  |  |  936|    186|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    186|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    186|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (336:9): [True: 0, False: 186]
  ------------------
  337|      0|        PyErr_Clear();
  338|      0|        closed = -1;
  339|      0|    }
  340|    186|    else {
  341|    186|        closed = PyObject_IsTrue(res);
  342|    186|        Py_DECREF(res);
  ------------------
  |  |  430|    186|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    186|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    186|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|    186|        if (closed == -1)
  ------------------
  |  Branch (343:13): [True: 0, False: 186]
  ------------------
  344|      0|            PyErr_Clear();
  345|    186|    }
  346|    186|    if (closed == 0) {
  ------------------
  |  Branch (346:9): [True: 0, False: 186]
  ------------------
  347|       |        /* Signal close() that it was called as part of the object
  348|       |           finalization process. */
  349|      0|        if (PyObject_SetAttr(self, &_Py_ID(_finalizing), Py_True))
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PyObject_SetAttr(self, &_Py_ID(_finalizing), Py_True))
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (349:13): [True: 0, False: 0]
  ------------------
  350|      0|            PyErr_Clear();
  351|      0|        res = PyObject_CallMethodNoArgs((PyObject *)self, &_Py_ID(close));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|      0|        if (res == NULL) {
  ------------------
  |  Branch (352:13): [True: 0, False: 0]
  ------------------
  353|      0|            PyErr_FormatUnraisable("Exception ignored "
  354|      0|                                   "while finalizing file %R", self);
  355|      0|        }
  356|      0|        else {
  357|      0|            Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|      0|        }
  359|      0|    }
  360|       |
  361|       |    /* Restore the saved exception. */
  362|    186|    PyErr_SetRaisedException(exc);
  363|    186|}

textio.c:textiowrapper_traverse:
 1554|     60|{
 1555|     60|    textio *self = textio_CAST(op);
  ------------------
  |  |  737|     60|#define textio_CAST(op) ((textio *)(op))
  ------------------
 1556|     60|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1557|     60|    Py_VISIT(self->buffer);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1558|     60|    Py_VISIT(self->encoding);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1559|     60|    Py_VISIT(self->encoder);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 40, False: 20]
  |  |  ------------------
  |  |  196|     40|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     40|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 40]
  |  |  ------------------
  |  |  198|     40|                return vret;                                            \
  |  |  199|     40|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1560|     60|    Py_VISIT(self->decoder);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 40]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1561|     60|    Py_VISIT(self->readnl);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1562|     60|    Py_VISIT(self->decoded_chars);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 60]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1563|     60|    Py_VISIT(self->pending_bytes);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 60]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1564|     60|    Py_VISIT(self->snapshot);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 60]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1565|     60|    Py_VISIT(self->errors);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1566|     60|    Py_VISIT(self->raw);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1567|       |
 1568|     60|    Py_VISIT(self->dict);
  ------------------
  |  |  194|     60|    do {                                                                \
  |  |  195|     60|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 60, False: 0]
  |  |  ------------------
  |  |  196|     60|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     60|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 60]
  |  |  ------------------
  |  |  198|     60|                return vret;                                            \
  |  |  199|     60|        }                                                               \
  |  |  200|     60|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 60]
  |  |  ------------------
  ------------------
 1569|     60|    return 0;
 1570|     60|}
textio.c:buffer_access_safe:
  746|  96.9k|{
  747|       |    /* Check self->buffer directly but match errors of CHECK_ATTACHED since this
  748|       |       is called during construction and finalization where self->ok == 0. */
  749|  96.9k|    if (self->buffer == NULL) {
  ------------------
  |  Branch (749:9): [True: 0, False: 96.9k]
  ------------------
  750|      0|        if (self->ok <= 0) {
  ------------------
  |  Branch (750:13): [True: 0, False: 0]
  ------------------
  751|      0|            PyErr_SetString(PyExc_ValueError,
  752|      0|                            "I/O operation on uninitialized object");
  753|      0|        }
  754|      0|        else {
  755|      0|            PyErr_SetString(PyExc_ValueError,
  756|      0|                            "underlying buffer has been detached");
  757|      0|        }
  758|      0|        return NULL;
  759|      0|    }
  760|       |
  761|       |    /* Returning a borrowed reference is safe since TextIOWrapper methods are
  762|       |       protected by critical sections. */
  763|  96.9k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
  764|  96.9k|    return self->buffer;
  765|  96.9k|}
textio.c:_textiowrapper_writeflush:
 1656|  48.4k|{
 1657|  48.4k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
 1658|       |
 1659|  48.4k|    if (self->pending_bytes == NULL)
  ------------------
  |  Branch (1659:9): [True: 0, False: 48.4k]
  ------------------
 1660|      0|        return 0;
 1661|       |
 1662|  48.4k|    PyObject *pending = self->pending_bytes;
 1663|  48.4k|    PyObject *b;
 1664|       |
 1665|  48.4k|    if (PyBytes_Check(pending)) {
  ------------------
  |  |   28|  48.4k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 48.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1666|      0|        b = Py_NewRef(pending);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1667|      0|    }
 1668|  48.4k|    else if (PyUnicode_Check(pending)) {
  ------------------
  |  |  103|  48.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 48.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1669|  48.4k|        assert(PyUnicode_IS_ASCII(pending));
  ------------------
  |  Branch (1669:9): [True: 48.4k, False: 0]
  ------------------
 1670|  48.4k|        assert(PyUnicode_GET_LENGTH(pending) == self->pending_bytes_count);
  ------------------
  |  Branch (1670:9): [True: 48.4k, False: 0]
  ------------------
 1671|  48.4k|        b = PyBytes_FromStringAndSize(
 1672|  48.4k|                PyUnicode_DATA(pending), PyUnicode_GET_LENGTH(pending));
  ------------------
  |  |  284|  48.4k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              PyUnicode_DATA(pending), PyUnicode_GET_LENGTH(pending));
  ------------------
  |  |  299|  48.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1673|  48.4k|        if (b == NULL) {
  ------------------
  |  Branch (1673:13): [True: 0, False: 48.4k]
  ------------------
 1674|      0|            return -1;
 1675|      0|        }
 1676|  48.4k|    }
 1677|      0|    else {
 1678|      0|        assert(PyList_Check(pending));
  ------------------
  |  Branch (1678:9): [True: 0, False: 0]
  ------------------
 1679|      0|        PyBytesWriter *writer = PyBytesWriter_Create(self->pending_bytes_count);
 1680|      0|        if (writer == NULL) {
  ------------------
  |  Branch (1680:13): [True: 0, False: 0]
  ------------------
 1681|      0|            return -1;
 1682|      0|        }
 1683|       |
 1684|      0|        char *buf = PyBytesWriter_GetData(writer);
 1685|      0|        Py_ssize_t pos = 0;
 1686|       |
 1687|      0|        for (Py_ssize_t i = 0; i < PyList_GET_SIZE(pending); i++) {
  ------------------
  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1687:32): [True: 0, False: 0]
  ------------------
 1688|      0|            PyObject *obj = PyList_GET_ITEM(pending, i);
  ------------------
  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1688:29): [True: 0, False: 0]
  ------------------
 1689|      0|            const char *src;
 1690|      0|            Py_ssize_t len;
 1691|      0|            if (PyUnicode_Check(obj)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1692|      0|                assert(PyUnicode_IS_ASCII(obj));
  ------------------
  |  Branch (1692:17): [True: 0, False: 0]
  ------------------
 1693|      0|                src = PyUnicode_DATA(obj);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1694|      0|                len = PyUnicode_GET_LENGTH(obj);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1695|      0|            }
 1696|      0|            else {
 1697|      0|                assert(PyBytes_Check(obj));
  ------------------
  |  Branch (1697:17): [True: 0, False: 0]
  ------------------
 1698|      0|                src = PyBytes_AS_STRING(obj);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1699|      0|                len = PyBytes_GET_SIZE(obj);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1700|      0|            }
 1701|      0|            memcpy(buf + pos, src, len);
 1702|      0|            pos += len;
 1703|      0|        }
 1704|      0|        assert(pos == self->pending_bytes_count);
  ------------------
  |  Branch (1704:9): [True: 0, False: 0]
  ------------------
 1705|       |
 1706|      0|        b = PyBytesWriter_Finish(writer);
 1707|      0|        if (b == NULL) {
  ------------------
  |  Branch (1707:13): [True: 0, False: 0]
  ------------------
 1708|      0|            return -1;
 1709|      0|        }
 1710|      0|    }
 1711|       |
 1712|  48.4k|    self->pending_bytes_count = 0;
 1713|  48.4k|    self->pending_bytes = NULL;
 1714|  48.4k|    Py_DECREF(pending);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1715|       |
 1716|  48.4k|    PyObject *ret;
 1717|  48.4k|    do {
 1718|  48.4k|        ret = buffer_callmethod_onearg(self, &_Py_ID(write), b);
  ------------------
  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1719|  48.4k|    } while (ret == NULL && _PyIO_trap_eintr());
  ------------------
  |  Branch (1719:14): [True: 0, False: 48.4k]
  |  Branch (1719:29): [True: 0, False: 0]
  ------------------
 1720|  48.4k|    Py_DECREF(b);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1721|       |    // NOTE: We cleared buffer but we don't know how many bytes are actually written
 1722|       |    // when an error occurred.
 1723|  48.4k|    if (ret == NULL)
  ------------------
  |  Branch (1723:9): [True: 0, False: 48.4k]
  ------------------
 1724|      0|        return -1;
 1725|  48.4k|    Py_DECREF(ret);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1726|  48.4k|    return 0;
 1727|  48.4k|}
textio.c:buffer_callmethod_onearg:
  791|  48.4k|{
  792|  48.4k|    PyObject *buffer = buffer_access_safe(self);
  793|  48.4k|    if (buffer == NULL) {
  ------------------
  |  Branch (793:9): [True: 0, False: 48.4k]
  ------------------
  794|      0|        return NULL;
  795|      0|    }
  796|       |
  797|  48.4k|    return PyObject_CallMethodOneArg(buffer, name, arg);
  798|  48.4k|}
textio.c:validate_newline:
  914|      6|{
  915|      6|    if (newline && newline[0] != '\0'
  ------------------
  |  Branch (915:9): [True: 6, False: 0]
  |  Branch (915:20): [True: 6, False: 0]
  ------------------
  916|      6|        && !(newline[0] == '\n' && newline[1] == '\0')
  ------------------
  |  Branch (916:14): [True: 6, False: 0]
  |  Branch (916:36): [True: 6, False: 0]
  ------------------
  917|      0|        && !(newline[0] == '\r' && newline[1] == '\0')
  ------------------
  |  Branch (917:14): [True: 0, False: 0]
  |  Branch (917:36): [True: 0, False: 0]
  ------------------
  918|      0|        && !(newline[0] == '\r' && newline[1] == '\n' && newline[2] == '\0')) {
  ------------------
  |  Branch (918:14): [True: 0, False: 0]
  |  Branch (918:36): [True: 0, False: 0]
  |  Branch (918:58): [True: 0, False: 0]
  ------------------
  919|      0|        PyErr_Format(PyExc_ValueError,
  920|      0|                     "illegal newline value: %s", newline);
  921|      0|        return -1;
  922|      0|    }
  923|      6|    return 0;
  924|      6|}
textio.c:set_newline:
  928|      6|{
  929|      6|    PyObject *old = self->readnl;
  930|      6|    if (newline == NULL) {
  ------------------
  |  Branch (930:9): [True: 0, False: 6]
  ------------------
  931|      0|        self->readnl = NULL;
  932|      0|    }
  933|      6|    else {
  934|      6|        self->readnl = PyUnicode_FromString(newline);
  935|      6|        if (self->readnl == NULL) {
  ------------------
  |  Branch (935:13): [True: 0, False: 6]
  ------------------
  936|      0|            self->readnl = old;
  937|      0|            return -1;
  938|      0|        }
  939|      6|    }
  940|      6|    self->readuniversal = (newline == NULL || newline[0] == '\0');
  ------------------
  |  Branch (940:28): [True: 0, False: 6]
  |  Branch (940:47): [True: 0, False: 6]
  ------------------
  941|      6|    self->readtranslate = (newline == NULL);
  942|      6|    self->writetranslate = (newline == NULL || newline[0] != '\0');
  ------------------
  |  Branch (942:29): [True: 0, False: 6]
  |  Branch (942:48): [True: 6, False: 0]
  ------------------
  943|      6|    if (!self->readuniversal && self->readnl != NULL) {
  ------------------
  |  Branch (943:9): [True: 6, False: 0]
  |  Branch (943:33): [True: 6, False: 0]
  ------------------
  944|       |        // validate_newline() accepts only ASCII newlines.
  945|      6|        assert(PyUnicode_KIND(self->readnl) == PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (945:9): [True: 6, False: 0]
  |  Branch (945:9): [True: 6, False: 0]
  ------------------
  946|      6|        self->writenl = (const char *)PyUnicode_1BYTE_DATA(self->readnl);
  ------------------
  |  |  291|      6|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      6|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  947|      6|        if (strcmp(self->writenl, "\n") == 0) {
  ------------------
  |  Branch (947:13): [True: 6, False: 0]
  ------------------
  948|      6|            self->writenl = NULL;
  949|      6|        }
  950|      6|    }
  951|      0|    else {
  952|       |#ifdef MS_WINDOWS
  953|       |        self->writenl = "\r\n";
  954|       |#else
  955|      0|        self->writenl = NULL;
  956|      0|#endif
  957|      0|    }
  958|      6|    Py_XDECREF(old);
  ------------------
  |  |  524|      6|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|      6|    return 0;
  960|      6|}
textio.c:_textiowrapper_set_decoder:
  965|      6|{
  966|      6|    PyObject *res;
  967|      6|    int r;
  968|       |
  969|      6|    res = buffer_callmethod_noargs(self, &_Py_ID(readable));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  970|      6|    if (res == NULL)
  ------------------
  |  Branch (970:9): [True: 0, False: 6]
  ------------------
  971|      0|        return -1;
  972|       |
  973|      6|    r = PyObject_IsTrue(res);
  974|      6|    Py_DECREF(res);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  975|      6|    if (r == -1)
  ------------------
  |  Branch (975:9): [True: 0, False: 6]
  ------------------
  976|      0|        return -1;
  977|       |
  978|      6|    if (r != 1)
  ------------------
  |  Branch (978:9): [True: 4, False: 2]
  ------------------
  979|      4|        return 0;
  980|       |
  981|      2|    Py_CLEAR(self->decoder);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  982|      2|    self->decoder = _PyCodecInfo_GetIncrementalDecoder(codec_info, errors);
  983|      2|    if (self->decoder == NULL)
  ------------------
  |  Branch (983:9): [True: 0, False: 2]
  ------------------
  984|      0|        return -1;
  985|       |
  986|      2|    if (self->readuniversal) {
  ------------------
  |  Branch (986:9): [True: 0, False: 2]
  ------------------
  987|      0|        _PyIO_State *state = self->state;
  988|      0|        PyObject *incrementalDecoder = PyObject_CallFunctionObjArgs(
  989|      0|            (PyObject *)state->PyIncrementalNewlineDecoder_Type,
  990|      0|            self->decoder, self->readtranslate ? Py_True : Py_False, NULL);
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          self->decoder, self->readtranslate ? Py_True : Py_False, NULL);
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (990:28): [True: 0, False: 0]
  ------------------
  991|      0|        if (incrementalDecoder == NULL)
  ------------------
  |  Branch (991:13): [True: 0, False: 0]
  ------------------
  992|      0|            return -1;
  993|      0|        Py_XSETREF(self->decoder, incrementalDecoder);
  ------------------
  |  |  376|      0|    do { \
  |  |  377|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      0|        *_tmp_dst_ptr = (src); \
  |  |  380|      0|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  994|      0|    }
  995|       |
  996|      2|    return 0;
  997|      2|}
textio.c:buffer_callmethod_noargs:
  780|     16|{
  781|     16|    PyObject *buffer = buffer_access_safe(self);
  782|     16|    if (buffer == NULL) {
  ------------------
  |  Branch (782:9): [True: 0, False: 16]
  ------------------
  783|      0|        return NULL;
  784|      0|    }
  785|       |
  786|     16|    return PyObject_CallMethodNoArgs(buffer, name);
  787|     16|}
textio.c:_textiowrapper_set_encoder:
 1021|      6|{
 1022|      6|    PyObject *res;
 1023|      6|    int r;
 1024|       |
 1025|      6|    res = buffer_callmethod_noargs(self, &_Py_ID(writable));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1026|      6|    if (res == NULL)
  ------------------
  |  Branch (1026:9): [True: 0, False: 6]
  ------------------
 1027|      0|        return -1;
 1028|       |
 1029|      6|    r = PyObject_IsTrue(res);
 1030|      6|    Py_DECREF(res);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|      6|    if (r == -1)
  ------------------
  |  Branch (1031:9): [True: 0, False: 6]
  ------------------
 1032|      0|        return -1;
 1033|       |
 1034|      6|    if (r != 1)
  ------------------
  |  Branch (1034:9): [True: 2, False: 4]
  ------------------
 1035|      2|        return 0;
 1036|       |
 1037|      4|    Py_CLEAR(self->encoder);
  ------------------
  |  |  484|      4|    do { \
  |  |  485|      4|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      4|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      4|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 4]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1038|      4|    self->encodefunc = NULL;
 1039|      4|    self->encoder = _PyCodecInfo_GetIncrementalEncoder(codec_info, errors);
 1040|      4|    if (self->encoder == NULL)
  ------------------
  |  Branch (1040:9): [True: 0, False: 4]
  ------------------
 1041|      0|        return -1;
 1042|       |
 1043|       |    /* Get the normalized named of the codec */
 1044|      4|    if (PyObject_GetOptionalAttr(codec_info, &_Py_ID(name), &res) < 0) {
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1044:9): [True: 0, False: 4]
  ------------------
 1045|      0|        return -1;
 1046|      0|    }
 1047|      4|    if (res != NULL && PyUnicode_Check(res)) {
  ------------------
  |  |  103|      4|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1047:9): [True: 4, False: 0]
  ------------------
 1048|      4|        const encodefuncentry *e = encodefuncs;
 1049|     12|        while (e->name != NULL) {
  ------------------
  |  Branch (1049:16): [True: 12, False: 0]
  ------------------
 1050|     12|            if (_PyUnicode_EqualToASCIIString(res, e->name)) {
  ------------------
  |  Branch (1050:17): [True: 4, False: 8]
  ------------------
 1051|      4|                self->encodefunc = e->encodefunc;
 1052|      4|                break;
 1053|      4|            }
 1054|      8|            e++;
 1055|      8|        }
 1056|      4|    }
 1057|      4|    Py_XDECREF(res);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|       |
 1059|      4|    return 0;
 1060|      4|}
textio.c:_textiowrapper_fix_encoder_state:
 1064|      6|{
 1065|      6|    if (!self->seekable || !self->encoder) {
  ------------------
  |  Branch (1065:9): [True: 0, False: 6]
  |  Branch (1065:28): [True: 2, False: 4]
  ------------------
 1066|      2|        return 0;
 1067|      2|    }
 1068|       |
 1069|      4|    self->encoding_start_of_stream = 1;
 1070|       |
 1071|      4|    PyObject *cookieObj = buffer_callmethod_noargs(self, &_Py_ID(tell));
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|      4|    if (cookieObj == NULL) {
  ------------------
  |  Branch (1072:9): [True: 0, False: 4]
  ------------------
 1073|      0|        return -1;
 1074|      0|    }
 1075|       |
 1076|      4|    int cmp = PyObject_RichCompareBool(cookieObj, _PyLong_GetZero(), Py_EQ);
  ------------------
  |  |  654|      4|#define Py_EQ 2
  ------------------
 1077|      4|    Py_DECREF(cookieObj);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1078|      4|    if (cmp < 0) {
  ------------------
  |  Branch (1078:9): [True: 0, False: 4]
  ------------------
 1079|      0|        return -1;
 1080|      0|    }
 1081|       |
 1082|      4|    if (cmp == 0) {
  ------------------
  |  Branch (1082:9): [True: 2, False: 2]
  ------------------
 1083|      2|        self->encoding_start_of_stream = 0;
 1084|      2|        PyObject *res = PyObject_CallMethodOneArg(
 1085|      2|            self->encoder, &_Py_ID(setstate), _PyLong_GetZero());
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1086|      2|        if (res == NULL) {
  ------------------
  |  Branch (1086:13): [True: 0, False: 2]
  ------------------
 1087|      0|            return -1;
 1088|      0|        }
 1089|      2|        Py_DECREF(res);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|      2|    }
 1091|       |
 1092|      4|    return 0;
 1093|      4|}
textio.c:_io_TextIOWrapper_write_impl:
 1739|  48.4k|{
 1740|  48.4k|    PyObject *ret;
 1741|  48.4k|    PyObject *b;
 1742|  48.4k|    Py_ssize_t textlen;
 1743|  48.4k|    int haslf = 0;
 1744|  48.4k|    int needflush = 0, text_needflush = 0;
 1745|       |
 1746|  48.4k|    CHECK_ATTACHED(self);
  ------------------
  |  | 1610|  48.4k|    CHECK_INITIALIZED(self); \
  |  |  ------------------
  |  |  |  | 1603|  48.4k|    if (self->ok <= 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1603:9): [True: 0, False: 48.4k]
  |  |  |  |  ------------------
  |  |  |  | 1604|      0|        PyErr_SetString(PyExc_ValueError, \
  |  |  |  | 1605|      0|            "I/O operation on uninitialized object"); \
  |  |  |  | 1606|      0|        return NULL; \
  |  |  |  | 1607|      0|    }
  |  |  ------------------
  |  | 1611|  48.4k|    if (self->detached) { \
  |  |  ------------------
  |  |  |  Branch (1611:9): [True: 0, False: 48.4k]
  |  |  ------------------
  |  | 1612|      0|        PyErr_SetString(PyExc_ValueError, \
  |  | 1613|      0|             "underlying buffer has been detached"); \
  |  | 1614|      0|        return NULL; \
  |  | 1615|      0|    }
  ------------------
 1747|  48.4k|    CHECK_CLOSED(self);
  ------------------
  |  | 1577|  48.4k|    do { \
  |  | 1578|  48.4k|        int r; \
  |  | 1579|  48.4k|        PyObject *_res; \
  |  | 1580|  48.4k|        if (Py_IS_TYPE(self, self->state->PyTextIOWrapper_Type)) { \
  |  |  ------------------
  |  |  |  |  215|  48.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 48.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1581|  48.4k|            if (self->raw != NULL) \
  |  |  ------------------
  |  |  |  Branch (1581:17): [True: 48.4k, False: 0]
  |  |  ------------------
  |  | 1582|  48.4k|                r = _PyFileIO_closed(self->raw); \
  |  | 1583|  48.4k|            else { \
  |  | 1584|      0|                _res = _io_TextIOWrapper_closed_get_impl(self); \
  |  | 1585|      0|                if (_res == NULL) \
  |  |  ------------------
  |  |  |  Branch (1585:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1586|      0|                    return NULL; \
  |  | 1587|      0|                r = PyObject_IsTrue(_res); \
  |  | 1588|      0|                Py_DECREF(_res); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1589|      0|                if (r < 0) \
  |  |  ------------------
  |  |  |  Branch (1589:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1590|      0|                    return NULL; \
  |  | 1591|      0|            } \
  |  | 1592|  48.4k|            if (r > 0) { \
  |  |  ------------------
  |  |  |  Branch (1592:17): [True: 0, False: 48.4k]
  |  |  ------------------
  |  | 1593|      0|                PyErr_SetString(PyExc_ValueError, \
  |  | 1594|      0|                                "I/O operation on closed file."); \
  |  | 1595|      0|                return NULL; \
  |  | 1596|      0|            } \
  |  | 1597|  48.4k|        } \
  |  | 1598|  48.4k|        else if (_PyIOBase_check_closed((PyObject *)self, Py_True) == NULL) \
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1598:18): [True: 0, False: 0]
  |  |  ------------------
  |  | 1599|      0|            return NULL; \
  |  | 1600|  48.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1600:14): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
 1748|       |
 1749|  48.4k|    if (self->encoder == NULL) {
  ------------------
  |  Branch (1749:9): [True: 0, False: 48.4k]
  ------------------
 1750|      0|        return _unsupported(self->state, "not writable");
 1751|      0|    }
 1752|       |
 1753|  48.4k|    Py_INCREF(text);
  ------------------
  |  |  310|  48.4k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1754|       |
 1755|  48.4k|    textlen = PyUnicode_GET_LENGTH(text);
  ------------------
  |  |  299|  48.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1756|       |
 1757|  48.4k|    if ((self->writetranslate && self->writenl != NULL) || self->line_buffering)
  ------------------
  |  Branch (1757:10): [True: 48.4k, False: 0]
  |  Branch (1757:34): [True: 0, False: 48.4k]
  |  Branch (1757:60): [True: 48.4k, False: 0]
  ------------------
 1758|  48.4k|        if (PyUnicode_FindChar(text, '\n', 0, PyUnicode_GET_LENGTH(text), 1) != -1)
  ------------------
  |  |  299|  48.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1758:13): [True: 48.4k, False: 0]
  ------------------
 1759|  48.4k|            haslf = 1;
 1760|       |
 1761|  48.4k|    if (haslf && self->writetranslate && self->writenl != NULL) {
  ------------------
  |  Branch (1761:9): [True: 48.4k, False: 0]
  |  Branch (1761:18): [True: 48.4k, False: 0]
  |  Branch (1761:42): [True: 0, False: 48.4k]
  ------------------
 1762|      0|        PyObject *newtext = _PyObject_CallMethod(text, &_Py_ID(replace),
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1763|      0|                                                 "ss", "\n", self->writenl);
 1764|      0|        Py_DECREF(text);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1765|      0|        if (newtext == NULL)
  ------------------
  |  Branch (1765:13): [True: 0, False: 0]
  ------------------
 1766|      0|            return NULL;
 1767|      0|        text = newtext;
 1768|      0|    }
 1769|       |
 1770|  48.4k|    if (self->write_through)
  ------------------
  |  Branch (1770:9): [True: 0, False: 48.4k]
  ------------------
 1771|      0|        text_needflush = 1;
 1772|  48.4k|    if (self->line_buffering &&
  ------------------
  |  Branch (1772:9): [True: 48.4k, False: 0]
  ------------------
 1773|  48.4k|        (haslf ||
  ------------------
  |  Branch (1773:10): [True: 48.4k, False: 0]
  ------------------
 1774|      0|         PyUnicode_FindChar(text, '\r', 0, PyUnicode_GET_LENGTH(text), 1) != -1))
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1774:10): [True: 0, False: 0]
  ------------------
 1775|  48.4k|        needflush = 1;
 1776|       |
 1777|       |    /* XXX What if we were just reading? */
 1778|  48.4k|    if (self->encodefunc != NULL) {
  ------------------
  |  Branch (1778:9): [True: 48.4k, False: 0]
  ------------------
 1779|  48.4k|        if (PyUnicode_IS_ASCII(text) &&
  ------------------
  |  |  227|  96.9k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 48.4k, False: 0]
  |  |  ------------------
  ------------------
 1780|       |                // See bpo-43260
 1781|  48.4k|                PyUnicode_GET_LENGTH(text) <= self->chunk_size &&
  ------------------
  |  |  299|  48.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1781:17): [True: 48.4k, False: 0]
  ------------------
 1782|  48.4k|                is_asciicompat_encoding(self->encodefunc)) {
  ------------------
  |  Branch (1782:17): [True: 48.4k, False: 0]
  ------------------
 1783|  48.4k|            b = Py_NewRef(text);
  ------------------
  |  |  550|  48.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1784|  48.4k|        }
 1785|      0|        else {
 1786|      0|            b = (*self->encodefunc)((PyObject *) self, text);
 1787|      0|        }
 1788|  48.4k|        self->encoding_start_of_stream = 0;
 1789|  48.4k|    }
 1790|      0|    else {
 1791|      0|        b = PyObject_CallMethodOneArg(self->encoder, &_Py_ID(encode), text);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1792|      0|    }
 1793|       |
 1794|  48.4k|    Py_DECREF(text);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1795|  48.4k|    if (b == NULL)
  ------------------
  |  Branch (1795:9): [True: 0, False: 48.4k]
  ------------------
 1796|      0|        return NULL;
 1797|  48.4k|    if (b != text && !PyBytes_Check(b)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1797:9): [True: 0, False: 48.4k]
  |  Branch (1797:22): [True: 0, False: 0]
  ------------------
 1798|      0|        PyErr_Format(PyExc_TypeError,
 1799|      0|                     "encoder should return a bytes object, not '%.200s'",
 1800|      0|                     Py_TYPE(b)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1801|      0|        Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1802|      0|        return NULL;
 1803|      0|    }
 1804|       |
 1805|  48.4k|    Py_ssize_t bytes_len;
 1806|  48.4k|    if (b == text) {
  ------------------
  |  Branch (1806:9): [True: 48.4k, False: 0]
  ------------------
 1807|  48.4k|        bytes_len = PyUnicode_GET_LENGTH(b);
  ------------------
  |  |  299|  48.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1808|  48.4k|    }
 1809|      0|    else {
 1810|      0|        bytes_len = PyBytes_GET_SIZE(b);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1811|      0|    }
 1812|       |
 1813|       |    // We should avoid concatenating huge data.
 1814|       |    // Flush the buffer before adding b to the buffer if b is not small.
 1815|       |    // https://github.com/python/cpython/issues/87426
 1816|  48.4k|    if (bytes_len >= self->chunk_size) {
  ------------------
  |  Branch (1816:9): [True: 0, False: 48.4k]
  ------------------
 1817|       |        // _textiowrapper_writeflush() calls buffer.write().
 1818|       |        // self->pending_bytes can be appended during buffer->write()
 1819|       |        // or other thread.
 1820|       |        // We need to loop until buffer becomes empty.
 1821|       |        // https://github.com/python/cpython/issues/118138
 1822|       |        // https://github.com/python/cpython/issues/119506
 1823|      0|        while (self->pending_bytes != NULL) {
  ------------------
  |  Branch (1823:16): [True: 0, False: 0]
  ------------------
 1824|      0|            if (_textiowrapper_writeflush(self) < 0) {
  ------------------
  |  Branch (1824:17): [True: 0, False: 0]
  ------------------
 1825|      0|                Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1826|      0|                return NULL;
 1827|      0|            }
 1828|      0|        }
 1829|      0|    }
 1830|       |
 1831|  48.4k|    if (bytes_len > 0) {
  ------------------
  |  Branch (1831:9): [True: 48.4k, False: 0]
  ------------------
 1832|  48.4k|        if (self->pending_bytes == NULL) {
  ------------------
  |  Branch (1832:13): [True: 48.4k, False: 0]
  ------------------
 1833|  48.4k|            assert(self->pending_bytes_count == 0);
  ------------------
  |  Branch (1833:13): [True: 48.4k, False: 0]
  ------------------
 1834|  48.4k|            self->pending_bytes = b;
 1835|  48.4k|        }
 1836|      0|        else if (!PyList_CheckExact(self->pending_bytes)) {
  ------------------
  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1836:18): [True: 0, False: 0]
  ------------------
 1837|      0|            PyObject *list = PyList_New(2);
 1838|      0|            if (list == NULL) {
  ------------------
  |  Branch (1838:17): [True: 0, False: 0]
  ------------------
 1839|      0|                Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1840|      0|                return NULL;
 1841|      0|            }
 1842|       |            // Since Python 3.12, allocating GC object won't trigger GC and release
 1843|       |            // GIL. See https://github.com/python/cpython/issues/97922
 1844|      0|            assert(!PyList_CheckExact(self->pending_bytes));
  ------------------
  |  Branch (1844:13): [True: 0, False: 0]
  ------------------
 1845|      0|            PyList_SET_ITEM(list, 0, self->pending_bytes);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1846|      0|            PyList_SET_ITEM(list, 1, b);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1847|      0|            self->pending_bytes = list;
 1848|      0|        }
 1849|      0|        else {
 1850|      0|            if (PyList_Append(self->pending_bytes, b) < 0) {
  ------------------
  |  Branch (1850:17): [True: 0, False: 0]
  ------------------
 1851|      0|                Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1852|      0|                return NULL;
 1853|      0|            }
 1854|      0|            Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1855|      0|        }
 1856|       |
 1857|  48.4k|        self->pending_bytes_count += bytes_len;
 1858|  48.4k|    }
 1859|      0|    else {
 1860|      0|        Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1861|      0|    }
 1862|       |
 1863|  48.4k|    if (self->pending_bytes_count >= self->chunk_size || needflush ||
  ------------------
  |  Branch (1863:9): [True: 0, False: 48.4k]
  |  Branch (1863:58): [True: 48.4k, False: 0]
  ------------------
 1864|  48.4k|        text_needflush) {
  ------------------
  |  Branch (1864:9): [True: 0, False: 0]
  ------------------
 1865|  48.4k|        if (_textiowrapper_writeflush(self) < 0)
  ------------------
  |  Branch (1865:13): [True: 0, False: 48.4k]
  ------------------
 1866|      0|            return NULL;
 1867|  48.4k|    }
 1868|       |
 1869|  48.4k|    if (needflush) {
  ------------------
  |  Branch (1869:9): [True: 48.4k, False: 0]
  ------------------
 1870|  48.4k|        PyObject *buffer = buffer_access_safe(self);
 1871|  48.4k|        if (buffer == NULL || _PyFile_Flush(buffer) < 0) {
  ------------------
  |  Branch (1871:13): [True: 0, False: 48.4k]
  |  Branch (1871:31): [True: 0, False: 48.4k]
  ------------------
 1872|      0|            return NULL;
 1873|      0|        }
 1874|  48.4k|    }
 1875|       |
 1876|  48.4k|    if (self->snapshot != NULL) {
  ------------------
  |  Branch (1876:9): [True: 0, False: 48.4k]
  ------------------
 1877|      0|        textiowrapper_set_decoded_chars(self, NULL);
 1878|      0|        Py_CLEAR(self->snapshot);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1879|      0|    }
 1880|       |
 1881|  48.4k|    if (self->decoder) {
  ------------------
  |  Branch (1881:9): [True: 0, False: 48.4k]
  ------------------
 1882|      0|        ret = PyObject_CallMethodNoArgs(self->decoder, &_Py_ID(reset));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1883|      0|        if (ret == NULL)
  ------------------
  |  Branch (1883:13): [True: 0, False: 0]
  ------------------
 1884|      0|            return NULL;
 1885|      0|        Py_DECREF(ret);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1886|      0|    }
 1887|       |
 1888|  48.4k|    return PyLong_FromSsize_t(textlen);
 1889|  48.4k|}
textio.c:is_asciicompat_encoding:
  888|  48.4k|{
  889|  48.4k|    return f == ascii_encode || f == latin1_encode || f == utf8_encode;
  ------------------
  |  Branch (889:12): [True: 0, False: 48.4k]
  |  Branch (889:33): [True: 0, False: 48.4k]
  |  Branch (889:55): [True: 48.4k, False: 0]
  ------------------
  890|  48.4k|}
textio.c:_io_TextIOWrapper___init___impl:
 1176|      6|{
 1177|      6|    PyObject *raw, *codec_info = NULL;
 1178|      6|    PyObject *res;
 1179|      6|    int r;
 1180|       |
 1181|      6|    self->ok = 0;
 1182|      6|    self->detached = 0;
 1183|       |
 1184|      6|    if (encoding == NULL) {
  ------------------
  |  Branch (1184:9): [True: 0, False: 6]
  ------------------
 1185|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
 1186|      0|        if (_PyInterpreterState_GetConfig(interp)->warn_default_encoding) {
  ------------------
  |  Branch (1186:13): [True: 0, False: 0]
  ------------------
 1187|      0|            if (PyErr_WarnEx(PyExc_EncodingWarning,
  ------------------
  |  Branch (1187:17): [True: 0, False: 0]
  ------------------
 1188|      0|                             "'encoding' argument not specified", 1)) {
 1189|      0|                return -1;
 1190|      0|            }
 1191|      0|        }
 1192|      0|    }
 1193|       |
 1194|      6|    if (errors == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1194:9): [True: 0, False: 6]
  ------------------
 1195|      0|        errors = &_Py_ID(strict);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1196|      0|    }
 1197|      6|    else if (!PyUnicode_Check(errors)) {
  ------------------
  |  |  103|      6|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1197:14): [True: 0, False: 6]
  ------------------
 1198|       |        // Check 'errors' argument here because Argument Clinic doesn't support
 1199|       |        // 'str(accept={str, NoneType})' converter.
 1200|      0|        PyErr_Format(
 1201|      0|            PyExc_TypeError,
 1202|      0|            "TextIOWrapper() argument 'errors' must be str or None, not %.50s",
 1203|      0|            Py_TYPE(errors)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1204|      0|        return -1;
 1205|      0|    }
 1206|      6|    else if (io_check_errors(errors)) {
  ------------------
  |  Branch (1206:14): [True: 0, False: 6]
  ------------------
 1207|      0|        return -1;
 1208|      0|    }
 1209|      6|    const char *errors_str = _PyUnicode_AsUTF8NoNUL(errors);
 1210|      6|    if (errors_str == NULL) {
  ------------------
  |  Branch (1210:9): [True: 0, False: 6]
  ------------------
 1211|      0|        return -1;
 1212|      0|    }
 1213|       |
 1214|      6|    if (validate_newline(newline) < 0) {
  ------------------
  |  Branch (1214:9): [True: 0, False: 6]
  ------------------
 1215|      0|        return -1;
 1216|      0|    }
 1217|       |
 1218|      6|    Py_CLEAR(self->buffer);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1219|      6|    Py_CLEAR(self->encoding);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1220|      6|    Py_CLEAR(self->encoder);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1221|      6|    Py_CLEAR(self->decoder);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1222|      6|    Py_CLEAR(self->readnl);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1223|      6|    Py_CLEAR(self->decoded_chars);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1224|      6|    Py_CLEAR(self->pending_bytes);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1225|      6|    Py_CLEAR(self->snapshot);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1226|      6|    Py_CLEAR(self->errors);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1227|      6|    Py_CLEAR(self->raw);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1228|      6|    self->decoded_chars_used = 0;
 1229|      6|    self->pending_bytes_count = 0;
 1230|      6|    self->encodefunc = NULL;
 1231|      6|    self->b2cratio = 0.0;
 1232|       |
 1233|      6|    if (encoding == NULL && _PyRuntime.preconfig.utf8_mode) {
  ------------------
  |  Branch (1233:9): [True: 0, False: 6]
  |  Branch (1233:29): [True: 0, False: 0]
  ------------------
 1234|      0|        _Py_DECLARE_STR(utf_8, "utf-8");
 1235|      0|        self->encoding = &_Py_STR(utf_8);
  ------------------
  |  |  938|      0|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|      0|    }
 1237|      6|    else if (encoding == NULL || (strcmp(encoding, "locale") == 0)) {
  ------------------
  |  Branch (1237:14): [True: 0, False: 6]
  |  Branch (1237:34): [True: 0, False: 6]
  ------------------
 1238|      0|        self->encoding = _Py_GetLocaleEncodingObject();
 1239|      0|        if (self->encoding == NULL) {
  ------------------
  |  Branch (1239:13): [True: 0, False: 0]
  ------------------
 1240|      0|            goto error;
 1241|      0|        }
 1242|      0|        assert(PyUnicode_Check(self->encoding));
  ------------------
  |  Branch (1242:9): [True: 0, False: 0]
  ------------------
 1243|      0|    }
 1244|       |
 1245|      6|    if (self->encoding != NULL) {
  ------------------
  |  Branch (1245:9): [True: 0, False: 6]
  ------------------
 1246|      0|        encoding = PyUnicode_AsUTF8(self->encoding);
 1247|      0|        if (encoding == NULL)
  ------------------
  |  Branch (1247:13): [True: 0, False: 0]
  ------------------
 1248|      0|            goto error;
 1249|      0|    }
 1250|      6|    else if (encoding != NULL) {
  ------------------
  |  Branch (1250:14): [True: 6, False: 0]
  ------------------
 1251|      6|        self->encoding = PyUnicode_FromString(encoding);
 1252|      6|        if (self->encoding == NULL)
  ------------------
  |  Branch (1252:13): [True: 0, False: 6]
  ------------------
 1253|      0|            goto error;
 1254|      6|    }
 1255|      0|    else {
 1256|      0|        PyErr_SetString(PyExc_OSError,
 1257|      0|                        "could not determine default encoding");
 1258|      0|        goto error;
 1259|      0|    }
 1260|       |
 1261|       |    /* Check we have been asked for a real text encoding */
 1262|      6|    codec_info = _PyCodec_LookupTextEncoding(encoding, NULL);
 1263|      6|    if (codec_info == NULL) {
  ------------------
  |  Branch (1263:9): [True: 0, False: 6]
  ------------------
 1264|      0|        Py_CLEAR(self->encoding);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1265|      0|        goto error;
 1266|      0|    }
 1267|       |
 1268|       |    /* XXX: Failures beyond this point have the potential to leak elements
 1269|       |     * of the partially constructed object (like self->encoding)
 1270|       |     */
 1271|       |
 1272|      6|    self->errors = Py_NewRef(errors);
  ------------------
  |  |  550|      6|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1273|      6|    self->chunk_size = 8192;
 1274|      6|    self->line_buffering = line_buffering;
 1275|      6|    self->write_through = write_through;
 1276|      6|    if (set_newline(self, newline) < 0) {
  ------------------
  |  Branch (1276:9): [True: 0, False: 6]
  ------------------
 1277|      0|        goto error;
 1278|      0|    }
 1279|       |
 1280|      6|    self->buffer = Py_NewRef(buffer);
  ------------------
  |  |  550|      6|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1281|       |
 1282|       |    /* Build the decoder object */
 1283|      6|    _PyIO_State *state = find_io_state_by_def(Py_TYPE(self));
  ------------------
  |  |  213|      6|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1284|      6|    self->state = state;
 1285|      6|    if (_textiowrapper_set_decoder(self, codec_info, errors_str) != 0)
  ------------------
  |  Branch (1285:9): [True: 0, False: 6]
  ------------------
 1286|      0|        goto error;
 1287|       |
 1288|       |    /* Build the encoder object */
 1289|      6|    if (_textiowrapper_set_encoder(self, codec_info, errors_str) != 0)
  ------------------
  |  Branch (1289:9): [True: 0, False: 6]
  ------------------
 1290|      0|        goto error;
 1291|       |
 1292|       |    /* Finished sorting out the codec details */
 1293|      6|    Py_CLEAR(codec_info);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1294|       |
 1295|      6|    if (Py_IS_TYPE(buffer, state->PyBufferedReader_Type) ||
  ------------------
  |  |  215|     12|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 2, False: 4]
  |  |  ------------------
  ------------------
 1296|      4|        Py_IS_TYPE(buffer, state->PyBufferedWriter_Type) ||
  ------------------
  |  |  215|     10|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 1297|      0|        Py_IS_TYPE(buffer, state->PyBufferedRandom_Type))
  ------------------
  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1298|      6|    {
 1299|      6|        if (PyObject_GetOptionalAttr(buffer, &_Py_ID(raw), &raw) < 0)
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1299:13): [True: 0, False: 6]
  ------------------
 1300|      0|            goto error;
 1301|       |        /* Cache the raw FileIO object to speed up 'closed' checks */
 1302|      6|        if (raw != NULL) {
  ------------------
  |  Branch (1302:13): [True: 6, False: 0]
  ------------------
 1303|      6|            if (Py_IS_TYPE(raw, state->PyFileIO_Type))
  ------------------
  |  |  215|      6|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 6, False: 0]
  |  |  ------------------
  ------------------
 1304|      6|                self->raw = raw;
 1305|      0|            else
 1306|      0|                Py_DECREF(raw);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|      6|        }
 1308|      6|    }
 1309|       |
 1310|      6|    res = PyObject_CallMethodNoArgs(buffer, &_Py_ID(seekable));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|      6|    if (res == NULL)
  ------------------
  |  Branch (1311:9): [True: 0, False: 6]
  ------------------
 1312|      0|        goto error;
 1313|      6|    r = PyObject_IsTrue(res);
 1314|      6|    Py_DECREF(res);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1315|      6|    if (r < 0)
  ------------------
  |  Branch (1315:9): [True: 0, False: 6]
  ------------------
 1316|      0|        goto error;
 1317|      6|    self->seekable = self->telling = r;
 1318|       |
 1319|      6|    r = PyObject_HasAttrWithError(buffer, &_Py_ID(read1));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1320|      6|    if (r < 0) {
  ------------------
  |  Branch (1320:9): [True: 0, False: 6]
  ------------------
 1321|      0|        goto error;
 1322|      0|    }
 1323|      6|    self->has_read1 = r;
 1324|       |
 1325|      6|    self->encoding_start_of_stream = 0;
 1326|      6|    if (_textiowrapper_fix_encoder_state(self) < 0) {
  ------------------
  |  Branch (1326:9): [True: 0, False: 6]
  ------------------
 1327|      0|        goto error;
 1328|      0|    }
 1329|       |
 1330|      6|    self->ok = 1;
 1331|      6|    return 0;
 1332|       |
 1333|      0|  error:
 1334|      0|    Py_XDECREF(codec_info);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|      0|    return -1;
 1336|      6|}
textio.c:io_check_errors:
 1097|      6|{
 1098|      6|    assert(errors != NULL && errors != Py_None);
  ------------------
  |  Branch (1098:5): [True: 6, False: 0]
  |  Branch (1098:5): [True: 6, False: 0]
  ------------------
 1099|       |
 1100|      6|    PyInterpreterState *interp = _PyInterpreterState_GET();
 1101|      6|#ifndef Py_DEBUG
 1102|       |    /* In release mode, only check in development mode (-X dev) */
 1103|      6|    if (!_PyInterpreterState_GetConfig(interp)->dev_mode) {
  ------------------
  |  Branch (1103:9): [True: 6, False: 0]
  ------------------
 1104|      6|        return 0;
 1105|      6|    }
 1106|       |#else
 1107|       |    /* Always check in debug mode */
 1108|       |#endif
 1109|       |
 1110|       |    /* Avoid calling PyCodec_LookupError() before the codec registry is ready:
 1111|       |       before_PyUnicode_InitEncodings() is called. */
 1112|      0|    if (!interp->unicode.fs_codec.encoding) {
  ------------------
  |  Branch (1112:9): [True: 0, False: 0]
  ------------------
 1113|      0|        return 0;
 1114|      0|    }
 1115|       |
 1116|      0|    const char *name = _PyUnicode_AsUTF8NoNUL(errors);
 1117|      0|    if (name == NULL) {
  ------------------
  |  Branch (1117:9): [True: 0, False: 0]
  ------------------
 1118|      0|        return -1;
 1119|      0|    }
 1120|      0|    PyObject *handler = PyCodec_LookupError(name);
 1121|      0|    if (handler != NULL) {
  ------------------
  |  Branch (1121:9): [True: 0, False: 0]
  ------------------
 1122|      0|        Py_DECREF(handler);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1123|      0|        return 0;
 1124|      0|    }
 1125|      0|    return -1;
 1126|      0|}

PyInit__locale:
 1143|      1|{
 1144|      1|    return PyModuleDef_Init(&_localemodule);
 1145|      1|}
_localemodule.c:get_locale_state:
   42|     15|{
   43|     15|    void *state = PyModule_GetState(m);
   44|     15|    assert(state != NULL);
  ------------------
  |  Branch (44:5): [True: 15, False: 0]
  ------------------
   45|     15|    return (_locale_state *)state;
   46|     15|}
_localemodule.c:_locale_exec:
 1051|      1|{
 1052|      1|#ifdef HAVE_LANGINFO_H
 1053|      1|    int i;
 1054|      1|#endif
 1055|      1|#define ADD_INT(module, value)                                    \
 1056|      1|    do {                                                          \
 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
 1058|      1|            return -1;                                            \
 1059|      1|        }                                                         \
 1060|      1|    } while (0)
 1061|       |
 1062|      1|    ADD_INT(module, LC_CTYPE);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1063|      1|    ADD_INT(module, LC_TIME);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1064|      1|    ADD_INT(module, LC_COLLATE);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1065|      1|    ADD_INT(module, LC_MONETARY);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1066|       |
 1067|      1|#ifdef LC_MESSAGES
 1068|      1|    ADD_INT(module, LC_MESSAGES);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1069|      1|#endif /* LC_MESSAGES */
 1070|       |
 1071|      1|    ADD_INT(module, LC_NUMERIC);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1072|      1|    ADD_INT(module, LC_ALL);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1073|      1|    ADD_INT(module, CHAR_MAX);
  ------------------
  |  | 1056|      1|    do {                                                          \
  |  | 1057|      1|        if (PyModule_AddIntConstant(module, #value, value) < 0) { \
  |  |  ------------------
  |  |  |  Branch (1057:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1058|      0|            return -1;                                            \
  |  | 1059|      0|        }                                                         \
  |  | 1060|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1060:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1074|       |
 1075|      1|    _locale_state *state = get_locale_state(module);
 1076|      1|    state->Error = PyErr_NewException("locale.Error", NULL, NULL);
 1077|      1|    if (PyModule_AddObjectRef(module, "Error", state->Error) < 0) {
  ------------------
  |  Branch (1077:9): [True: 0, False: 1]
  ------------------
 1078|      0|        return -1;
 1079|      0|    }
 1080|       |
 1081|      1|#ifdef HAVE_LANGINFO_H
 1082|     57|    for (i = 0; langinfo_constants[i].name; i++) {
  ------------------
  |  Branch (1082:17): [True: 56, False: 1]
  ------------------
 1083|     56|        if (PyModule_AddIntConstant(module,
  ------------------
  |  Branch (1083:13): [True: 0, False: 56]
  ------------------
 1084|     56|                                    langinfo_constants[i].name,
 1085|     56|                                    langinfo_constants[i].value) < 0) {
 1086|      0|            return -1;
 1087|      0|        }
 1088|     56|    }
 1089|      1|#endif
 1090|       |
 1091|      1|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1091:9): [True: 0, False: 1]
  ------------------
 1092|      0|        return -1;
 1093|      0|    }
 1094|      1|    return 0;
 1095|       |
 1096|      1|#undef ADD_INT
 1097|      1|}
_localemodule.c:locale_traverse:
 1109|     14|{
 1110|     14|    _locale_state *state = get_locale_state(module);
 1111|     14|    Py_VISIT(state->Error);
  ------------------
  |  |  194|     14|    do {                                                                \
  |  |  195|     14|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 14, False: 0]
  |  |  ------------------
  |  |  196|     14|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     14|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 14]
  |  |  ------------------
  |  |  198|     14|                return vret;                                            \
  |  |  199|     14|        }                                                               \
  |  |  200|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 1112|     14|    return 0;
 1113|     14|}

PyInit__operator:
 2032|      1|{
 2033|      1|    return PyModuleDef_Init(&operatormodule);
 2034|      1|}
_operator.c:operator_exec:
 1954|      1|{
 1955|      1|    _operator_state *state = get_operator_state(module);
 1956|      1|    state->attrgetter_type = PyType_FromModuleAndSpec(module, &attrgetter_type_spec, NULL);
 1957|      1|    if (state->attrgetter_type == NULL) {
  ------------------
  |  Branch (1957:9): [True: 0, False: 1]
  ------------------
 1958|      0|        return -1;
 1959|      0|    }
 1960|      1|    if (PyModule_AddType(module, (PyTypeObject *)state->attrgetter_type) < 0) {
  ------------------
  |  Branch (1960:9): [True: 0, False: 1]
  ------------------
 1961|      0|        return -1;
 1962|      0|    }
 1963|       |
 1964|      1|    state->itemgetter_type = PyType_FromModuleAndSpec(module, &itemgetter_type_spec, NULL);
 1965|      1|    if (state->itemgetter_type == NULL) {
  ------------------
  |  Branch (1965:9): [True: 0, False: 1]
  ------------------
 1966|      0|        return -1;
 1967|      0|    }
 1968|      1|    if (PyModule_AddType(module, (PyTypeObject *)state->itemgetter_type) < 0) {
  ------------------
  |  Branch (1968:9): [True: 0, False: 1]
  ------------------
 1969|      0|        return -1;
 1970|      0|    }
 1971|       |
 1972|      1|    state->methodcaller_type = PyType_FromModuleAndSpec(module, &methodcaller_type_spec, NULL);
 1973|      1|    if (state->methodcaller_type == NULL) {
  ------------------
  |  Branch (1973:9): [True: 0, False: 1]
  ------------------
 1974|      0|        return -1;
 1975|      0|    }
 1976|      1|    if (PyModule_AddType(module, (PyTypeObject *)state->methodcaller_type) < 0) {
  ------------------
  |  Branch (1976:9): [True: 0, False: 1]
  ------------------
 1977|      0|        return -1;
 1978|      0|    }
 1979|       |
 1980|      1|    return 0;
 1981|      1|}
_operator.c:get_operator_state:
   20|     19|{
   21|     19|    void *state = _PyModule_GetState(module);
   22|     19|    assert(state != NULL);
  ------------------
  |  Branch (22:5): [True: 19, False: 0]
  ------------------
   23|     19|    return (_operator_state *)state;
   24|     19|}
_operator.c:operator_traverse:
 1994|     18|{
 1995|     18|    _operator_state *state = get_operator_state(module);
 1996|     18|    Py_VISIT(state->attrgetter_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 1997|     18|    Py_VISIT(state->itemgetter_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 1998|     18|    Py_VISIT(state->methodcaller_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 1999|     18|    return 0;
 2000|     18|}

sre.c:_sre_compile:
 1073|      9|{
 1074|      9|    PyObject *return_value = NULL;
 1075|      9|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1076|       |
 1077|      9|    #define NUM_KEYWORDS 6
 1078|      9|    static struct {
 1079|      9|        PyGC_Head _this_is_not_used;
 1080|      9|        PyObject_VAR_HEAD
 1081|      9|        Py_hash_t ob_hash;
 1082|      9|        PyObject *ob_item[NUM_KEYWORDS];
 1083|      9|    } _kwtuple = {
 1084|      9|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      9|    {                                     \
  |  |   98|      9|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      9|    {                               \
  |  |  |  |   91|      9|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      9|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      9|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      9|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      9|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      9|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      9|        (type)                      \
  |  |  |  |   93|      9|    },
  |  |  ------------------
  |  |   99|      9|        (size)                            \
  |  |  100|      9|    },
  ------------------
 1085|      9|        .ob_hash = -1,
 1086|      9|        .ob_item = { &_Py_ID(pattern), &_Py_ID(flags), &_Py_ID(code), &_Py_ID(groups), &_Py_ID(groupindex), &_Py_ID(indexgroup), },
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(pattern), &_Py_ID(flags), &_Py_ID(code), &_Py_ID(groups), &_Py_ID(groupindex), &_Py_ID(indexgroup), },
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(pattern), &_Py_ID(flags), &_Py_ID(code), &_Py_ID(groups), &_Py_ID(groupindex), &_Py_ID(indexgroup), },
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(pattern), &_Py_ID(flags), &_Py_ID(code), &_Py_ID(groups), &_Py_ID(groupindex), &_Py_ID(indexgroup), },
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(pattern), &_Py_ID(flags), &_Py_ID(code), &_Py_ID(groups), &_Py_ID(groupindex), &_Py_ID(indexgroup), },
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(pattern), &_Py_ID(flags), &_Py_ID(code), &_Py_ID(groups), &_Py_ID(groupindex), &_Py_ID(indexgroup), },
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|      9|    };
 1088|      9|    #undef NUM_KEYWORDS
 1089|      9|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1090|       |
 1091|       |    #else  // !Py_BUILD_CORE
 1092|       |    #  define KWTUPLE NULL
 1093|       |    #endif  // !Py_BUILD_CORE
 1094|       |
 1095|      9|    static const char * const _keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL};
 1096|      9|    static _PyArg_Parser _parser = {
 1097|      9|        .keywords = _keywords,
 1098|      9|        .fname = "compile",
 1099|      9|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1089|      9|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1100|      9|    };
 1101|      9|    #undef KWTUPLE
 1102|      9|    PyObject *argsbuf[6];
 1103|      9|    PyObject *pattern;
 1104|      9|    int flags;
 1105|      9|    PyObject *code;
 1106|      9|    Py_ssize_t groups;
 1107|      9|    PyObject *groupindex;
 1108|      9|    PyObject *indexgroup;
 1109|       |
 1110|      9|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      9|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 9, False: 0]
  |  |  ------------------
  |  |   89|      9|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 9, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 9]
  |  |  |  Branch (89:43): [True: 9, False: 0]
  |  |  |  Branch (89:67): [True: 9, False: 0]
  |  |  ------------------
  |  |   90|      9|      (args) : \
  |  |   91|      9|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1111|      9|            /*minpos*/ 6, /*maxpos*/ 6, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1112|      9|    if (!args) {
  ------------------
  |  Branch (1112:9): [True: 0, False: 9]
  ------------------
 1113|      0|        goto exit;
 1114|      0|    }
 1115|      9|    pattern = args[0];
 1116|      9|    flags = PyLong_AsInt(args[1]);
 1117|      9|    if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1117:9): [True: 0, False: 9]
  |  Branch (1117:24): [True: 0, False: 0]
  ------------------
 1118|      0|        goto exit;
 1119|      0|    }
 1120|      9|    if (!PyList_Check(args[2])) {
  ------------------
  |  |   25|      9|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      9|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1120:9): [True: 0, False: 9]
  ------------------
 1121|      0|        _PyArg_BadArgument("compile", "argument 'code'", "list", args[2]);
 1122|      0|        goto exit;
 1123|      0|    }
 1124|      9|    code = args[2];
 1125|      9|    {
 1126|      9|        Py_ssize_t ival = -1;
 1127|      9|        PyObject *iobj = _PyNumber_Index(args[3]);
 1128|      9|        if (iobj != NULL) {
  ------------------
  |  Branch (1128:13): [True: 9, False: 0]
  ------------------
 1129|      9|            ival = PyLong_AsSsize_t(iobj);
 1130|      9|            Py_DECREF(iobj);
  ------------------
  |  |  430|      9|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1131|      9|        }
 1132|      9|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1132:13): [True: 0, False: 9]
  |  Branch (1132:27): [True: 0, False: 0]
  ------------------
 1133|      0|            goto exit;
 1134|      0|        }
 1135|      9|        groups = ival;
 1136|      9|    }
 1137|      9|    if (!PyDict_Check(args[4])) {
  ------------------
  |  |   18|      9|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      9|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1137:9): [True: 0, False: 9]
  ------------------
 1138|      0|        _PyArg_BadArgument("compile", "argument 'groupindex'", "dict", args[4]);
 1139|      0|        goto exit;
 1140|      0|    }
 1141|      9|    groupindex = args[4];
 1142|      9|    if (!PyTuple_Check(args[5])) {
  ------------------
  |  |   27|      9|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      9|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1142:9): [True: 0, False: 9]
  ------------------
 1143|      0|        _PyArg_BadArgument("compile", "argument 'indexgroup'", "tuple", args[5]);
 1144|      0|        goto exit;
 1145|      0|    }
 1146|      9|    indexgroup = args[5];
 1147|      9|    return_value = _sre_compile_impl(module, pattern, flags, code, groups, groupindex, indexgroup);
 1148|       |
 1149|      9|exit:
 1150|      9|    return return_value;
 1151|      9|}
sre.c:_sre_unicode_iscased:
   84|     19|{
   85|     19|    PyObject *return_value = NULL;
   86|     19|    int character;
   87|     19|    int _return_value;
   88|       |
   89|     19|    character = PyLong_AsInt(arg);
   90|     19|    if (character == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (90:9): [True: 0, False: 19]
  |  Branch (90:28): [True: 0, False: 0]
  ------------------
   91|      0|        goto exit;
   92|      0|    }
   93|     19|    _return_value = _sre_unicode_iscased_impl(module, character);
   94|     19|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (94:9): [True: 0, False: 19]
  |  Branch (94:34): [True: 0, False: 0]
  ------------------
   95|      0|        goto exit;
   96|      0|    }
   97|     19|    return_value = PyBool_FromLong((long)_return_value);
   98|       |
   99|     19|exit:
  100|     19|    return return_value;
  101|     19|}
sre.c:_sre_unicode_tolower:
  148|     17|{
  149|     17|    PyObject *return_value = NULL;
  150|     17|    int character;
  151|     17|    int _return_value;
  152|       |
  153|     17|    character = PyLong_AsInt(arg);
  154|     17|    if (character == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (154:9): [True: 0, False: 17]
  |  Branch (154:28): [True: 0, False: 0]
  ------------------
  155|      0|        goto exit;
  156|      0|    }
  157|     17|    _return_value = _sre_unicode_tolower_impl(module, character);
  158|     17|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (158:9): [True: 0, False: 17]
  |  Branch (158:34): [True: 0, False: 0]
  ------------------
  159|      0|        goto exit;
  160|      0|    }
  161|     17|    return_value = PyLong_FromLong((long)_return_value);
  162|       |
  163|     17|exit:
  164|     17|    return return_value;
  165|     17|}
sre.c:_sre_SRE_Pattern_prefixmatch:
  183|      4|{
  184|      4|    PyObject *return_value = NULL;
  185|      4|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  186|       |
  187|      4|    #define NUM_KEYWORDS 3
  188|      4|    static struct {
  189|      4|        PyGC_Head _this_is_not_used;
  190|      4|        PyObject_VAR_HEAD
  191|      4|        Py_hash_t ob_hash;
  192|      4|        PyObject *ob_item[NUM_KEYWORDS];
  193|      4|    } _kwtuple = {
  194|      4|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      4|    {                                     \
  |  |   98|      4|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      4|    {                               \
  |  |  |  |   91|      4|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      4|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      4|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      4|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      4|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      4|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      4|        (type)                      \
  |  |  |  |   93|      4|    },
  |  |  ------------------
  |  |   99|      4|        (size)                            \
  |  |  100|      4|    },
  ------------------
  195|      4|        .ob_hash = -1,
  196|      4|        .ob_item = { &_Py_ID(string), &_Py_ID(pos), &_Py_ID(endpos), },
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(string), &_Py_ID(pos), &_Py_ID(endpos), },
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(string), &_Py_ID(pos), &_Py_ID(endpos), },
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      4|    };
  198|      4|    #undef NUM_KEYWORDS
  199|      4|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  200|       |
  201|       |    #else  // !Py_BUILD_CORE
  202|       |    #  define KWTUPLE NULL
  203|       |    #endif  // !Py_BUILD_CORE
  204|       |
  205|      4|    static const char * const _keywords[] = {"string", "pos", "endpos", NULL};
  206|      4|    static _PyArg_Parser _parser = {
  207|      4|        .keywords = _keywords,
  208|      4|        .fname = "prefixmatch",
  209|      4|        .kwtuple = KWTUPLE,
  ------------------
  |  |  199|      4|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  210|      4|    };
  211|      4|    #undef KWTUPLE
  212|      4|    PyObject *argsbuf[3];
  213|      4|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (213:36): [True: 0, False: 4]
  ------------------
  214|      4|    PyObject *string;
  215|      4|    Py_ssize_t pos = 0;
  216|      4|    Py_ssize_t endpos = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|      4|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  217|       |
  218|      4|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      4|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 4, False: 0]
  |  |  ------------------
  |  |   89|      4|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 4, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 4]
  |  |  |  Branch (89:43): [True: 4, False: 0]
  |  |  |  Branch (89:67): [True: 4, False: 0]
  |  |  ------------------
  |  |   90|      4|      (args) : \
  |  |   91|      4|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  219|      4|            /*minpos*/ 1, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  220|      4|    if (!args) {
  ------------------
  |  Branch (220:9): [True: 0, False: 4]
  ------------------
  221|      0|        goto exit;
  222|      0|    }
  223|      4|    string = args[0];
  224|      4|    if (!noptargs) {
  ------------------
  |  Branch (224:9): [True: 4, False: 0]
  ------------------
  225|      4|        goto skip_optional_pos;
  226|      4|    }
  227|      0|    if (args[1]) {
  ------------------
  |  Branch (227:9): [True: 0, False: 0]
  ------------------
  228|      0|        {
  229|      0|            Py_ssize_t ival = -1;
  230|      0|            PyObject *iobj = _PyNumber_Index(args[1]);
  231|      0|            if (iobj != NULL) {
  ------------------
  |  Branch (231:17): [True: 0, False: 0]
  ------------------
  232|      0|                ival = PyLong_AsSsize_t(iobj);
  233|      0|                Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  234|      0|            }
  235|      0|            if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (235:17): [True: 0, False: 0]
  |  Branch (235:31): [True: 0, False: 0]
  ------------------
  236|      0|                goto exit;
  237|      0|            }
  238|      0|            pos = ival;
  239|      0|        }
  240|      0|        if (!--noptargs) {
  ------------------
  |  Branch (240:13): [True: 0, False: 0]
  ------------------
  241|      0|            goto skip_optional_pos;
  242|      0|        }
  243|      0|    }
  244|      0|    {
  245|      0|        Py_ssize_t ival = -1;
  246|      0|        PyObject *iobj = _PyNumber_Index(args[2]);
  247|      0|        if (iobj != NULL) {
  ------------------
  |  Branch (247:13): [True: 0, False: 0]
  ------------------
  248|      0|            ival = PyLong_AsSsize_t(iobj);
  249|      0|            Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      0|        }
  251|      0|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (251:13): [True: 0, False: 0]
  |  Branch (251:27): [True: 0, False: 0]
  ------------------
  252|      0|            goto exit;
  253|      0|        }
  254|      0|        endpos = ival;
  255|      0|    }
  256|      4|skip_optional_pos:
  257|      4|    return_value = _sre_SRE_Pattern_prefixmatch_impl((PatternObject *)self, cls, string, pos, endpos);
  258|       |
  259|      4|exit:
  260|      4|    return return_value;
  261|      4|}

PyInit__sre:
 3690|      1|{
 3691|      1|    return PyModuleDef_Init(&sremodule);
 3692|      1|}
sre.c:_sre_compile_impl:
 1776|      9|{
 1777|       |    /* "compile" pattern descriptor to pattern object */
 1778|       |
 1779|      9|    _sremodulestate *module_state = get_sre_module_state(module);
 1780|      9|    PatternObject* self;
 1781|      9|    Py_ssize_t i, n;
 1782|       |
 1783|      9|    n = PyList_GET_SIZE(code);
  ------------------
  |  |   38|      9|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1784|       |    /* coverity[ampersand_in_size] */
 1785|      9|    self = PyObject_GC_NewVar(PatternObject, module_state->Pattern_Type, n);
  ------------------
  |  |  183|      9|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1786|      9|    if (!self)
  ------------------
  |  Branch (1786:9): [True: 0, False: 9]
  ------------------
 1787|      0|        return NULL;
 1788|      9|    self->weakreflist = NULL;
 1789|      9|    self->pattern = NULL;
 1790|      9|    self->groupindex = NULL;
 1791|      9|    self->indexgroup = NULL;
 1792|       |#ifdef Py_DEBUG
 1793|       |    self->fail_after_count = -1;
 1794|       |    self->fail_after_exc = NULL;
 1795|       |#endif
 1796|       |
 1797|      9|    self->codesize = n;
 1798|       |
 1799|    784|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1799:17): [True: 775, False: 9]
  ------------------
 1800|    775|        PyObject *o = PyList_GET_ITEM(code, i);
  ------------------
  |  |   40|    775|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|    775|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    775|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1800:23): [True: 775, False: 0]
  ------------------
 1801|      0|        unsigned long value = PyLong_AsUnsignedLong(o);
 1802|    775|        if (value == (unsigned long)-1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1802:13): [True: 0, False: 775]
  |  Branch (1802:43): [True: 0, False: 0]
  ------------------
 1803|      0|            break;
 1804|      0|        }
 1805|    775|        self->code[i] = (SRE_CODE) value;
 1806|    775|        if ((unsigned long) self->code[i] != value) {
  ------------------
  |  Branch (1806:13): [True: 0, False: 775]
  ------------------
 1807|      0|            PyErr_SetString(PyExc_OverflowError,
 1808|      0|                            "regular expression code size limit exceeded");
 1809|      0|            break;
 1810|      0|        }
 1811|    775|    }
 1812|      9|    PyObject_GC_Track(self);
 1813|       |
 1814|      9|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1814:9): [True: 0, False: 9]
  ------------------
 1815|      0|        Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1816|      0|        return NULL;
 1817|      0|    }
 1818|       |
 1819|      9|    if (pattern == Py_None) {
  ------------------
  |  |  616|      9|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1819:9): [True: 0, False: 9]
  ------------------
 1820|      0|        self->isbytes = -1;
 1821|      0|    }
 1822|      9|    else {
 1823|      9|        Py_ssize_t p_length;
 1824|      9|        int charsize;
 1825|      9|        Py_buffer view;
 1826|      9|        view.buf = NULL;
 1827|      9|        if (!getstring(pattern, &p_length, &self->isbytes,
  ------------------
  |  Branch (1827:13): [True: 0, False: 9]
  ------------------
 1828|      9|                       &charsize, &view)) {
 1829|      0|            Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1830|      0|            return NULL;
 1831|      0|        }
 1832|      9|        if (view.buf)
  ------------------
  |  Branch (1832:13): [True: 2, False: 7]
  ------------------
 1833|      2|            PyBuffer_Release(&view);
 1834|      9|    }
 1835|       |
 1836|      9|    self->pattern = Py_NewRef(pattern);
  ------------------
  |  |  550|      9|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1837|       |
 1838|      9|    self->flags = flags;
 1839|       |
 1840|      9|    self->groups = groups;
 1841|       |
 1842|      9|    if (PyDict_GET_SIZE(groupindex) > 0) {
  ------------------
  |  |   63|      9|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1842:9): [True: 2, False: 7]
  ------------------
 1843|      2|        self->groupindex = Py_NewRef(groupindex);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1844|      2|        if (PyTuple_GET_SIZE(indexgroup) > 0) {
  ------------------
  |  |   27|      2|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1844:13): [True: 2, False: 0]
  ------------------
 1845|      2|            self->indexgroup = Py_NewRef(indexgroup);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1846|      2|        }
 1847|      2|    }
 1848|       |
 1849|      9|    if (!_validate(self)) {
  ------------------
  |  Branch (1849:9): [True: 0, False: 9]
  ------------------
 1850|      0|        Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1851|      0|        return NULL;
 1852|      0|    }
 1853|       |
 1854|      9|    return (PyObject*) self;
 1855|      9|}
sre.c:get_sre_module_state:
  532|     32|{
  533|     32|    _sremodulestate *state = (_sremodulestate *)_PyModule_GetState(m);
  534|     32|    assert(state);
  ------------------
  |  Branch (534:5): [True: 32, False: 0]
  ------------------
  535|     32|    return state;
  536|     32|}
sre.c:getstring:
  650|     15|{
  651|       |    /* given a python object, return a data pointer, a length (in
  652|       |       characters), and a character size.  return NULL if the object
  653|       |       is not a string (or not compatible) */
  654|       |
  655|       |    /* Unicode objects do not support the buffer API. So, get the data
  656|       |       directly instead. */
  657|     15|    if (PyUnicode_Check(string)) {
  ------------------
  |  |  103|     15|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     15|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 13, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  658|     13|        *p_length = PyUnicode_GET_LENGTH(string);
  ------------------
  |  |  299|     13|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  659|     13|        *p_charsize = PyUnicode_KIND(string);
  ------------------
  |  |  258|     13|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|     26|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 13, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  660|      0|        *p_isbytes = 0;
  661|     13|        return PyUnicode_DATA(string);
  ------------------
  |  |  284|     13|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  662|     13|    }
  663|       |
  664|       |    /* get pointer to byte string buffer */
  665|      2|    if (PyObject_GetBuffer(string, view, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      2|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (665:9): [True: 0, False: 2]
  ------------------
  666|      0|        PyErr_Format(PyExc_TypeError, "expected string or bytes-like "
  667|      0|                     "object, got '%.200s'", Py_TYPE(string)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|      0|        return NULL;
  669|      0|    }
  670|       |
  671|      2|    *p_length = view->len;
  672|      2|    *p_charsize = 1;
  673|      2|    *p_isbytes = 1;
  674|       |
  675|      2|    if (view->buf == NULL) {
  ------------------
  |  Branch (675:9): [True: 0, False: 2]
  ------------------
  676|      0|        PyErr_SetString(PyExc_ValueError, "Buffer is NULL");
  677|      0|        PyBuffer_Release(view);
  678|      0|        view->buf = NULL;
  679|      0|        return NULL;
  680|      0|    }
  681|      2|    return view->buf;
  682|      2|}
sre.c:_validate:
 2466|      9|{
 2467|      9|    if (_validate_outer(self->code, self->code+self->codesize, self->groups))
  ------------------
  |  Branch (2467:9): [True: 0, False: 9]
  ------------------
 2468|      0|    {
 2469|      0|        PyErr_SetString(PyExc_RuntimeError, "invalid SRE code");
 2470|      0|        return 0;
 2471|      0|    }
 2472|      9|    else
 2473|      9|        VTRACE(("Success!\n"));
  ------------------
  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  ------------------
  ------------------
 2474|      9|    return 1;
 2475|      9|}
sre.c:_validate_outer:
 2457|      9|{
 2458|      9|    if (groups < 0 || (size_t)groups > SRE_MAXGROUPS ||
  ------------------
  |  |   21|     18|# define SRE_MAXGROUPS ((SRE_CODE)INT32_MAX / 2)
  ------------------
  |  Branch (2458:9): [True: 0, False: 9]
  |  Branch (2458:23): [True: 0, False: 9]
  ------------------
 2459|      9|        code >= end || end[-1] != SRE_OP_SUCCESS)
  ------------------
  |  |   16|      9|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (2459:9): [True: 0, False: 9]
  |  Branch (2459:24): [True: 0, False: 9]
  ------------------
 2460|      0|        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2461|      9|    return _validate_inner(code, end-1, groups);
 2462|      9|}
sre.c:_validate_inner:
 2134|     49|{
 2135|       |    /* Some variables are manipulated by the macros above */
 2136|     49|    SRE_CODE op;
  ------------------
  |  |   18|     49|#define SRE_CODE Py_UCS4
  ------------------
 2137|     49|    SRE_CODE arg;
  ------------------
  |  |   18|     49|#define SRE_CODE Py_UCS4
  ------------------
 2138|     49|    SRE_CODE skip;
  ------------------
  |  |   18|     49|#define SRE_CODE Py_UCS4
  ------------------
 2139|       |
 2140|     49|    VTRACE(("code=%p, end=%p\n", code, end));
  ------------------
  |  | 1953|     49|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 49]
  |  |  ------------------
  ------------------
 2141|       |
 2142|     49|    if (code > end)
  ------------------
  |  Branch (2142:9): [True: 0, False: 49]
  ------------------
 2143|      0|        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2144|       |
 2145|    200|    while (code < end) {
  ------------------
  |  Branch (2145:12): [True: 151, False: 49]
  ------------------
 2146|    151|        GET_OP;
  ------------------
  |  | 1961|    151|    do {                                                \
  |  | 1962|    151|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|    151|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 151]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|    151|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 151]
  |  |  ------------------
  |  | 1964|    151|        op = *code++;                                   \
  |  | 1965|    151|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|    151|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 151]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|    151|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 151]
  |  |  ------------------
  ------------------
 2147|    151|        switch (op) {
 2148|       |
 2149|     44|        case SRE_OP_MARK:
  ------------------
  |  |   32|     44|#define SRE_OP_MARK 17
  ------------------
  |  Branch (2149:9): [True: 44, False: 107]
  ------------------
 2150|       |            /* We don't check whether marks are properly nested; the
 2151|       |               sre_match() code is robust even if they don't, and the worst
 2152|       |               you can get is nonsensical match results. */
 2153|     44|            GET_ARG;
  ------------------
  |  | 1968|     44|    do {                                                \
  |  | 1969|     44|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     44|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 44]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     44|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 44]
  |  |  ------------------
  |  | 1971|     44|        arg = *code++;                                  \
  |  | 1972|     44|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     44|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 44]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     44|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 44]
  |  |  ------------------
  ------------------
 2154|     44|            if (arg >= 2 * (size_t)groups) {
  ------------------
  |  Branch (2154:17): [True: 0, False: 44]
  ------------------
 2155|      0|                VTRACE(("arg=%d, groups=%d\n", (int)arg, (int)groups));
  ------------------
  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2156|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2157|      0|            }
 2158|     44|            break;
 2159|       |
 2160|     44|        case SRE_OP_LITERAL:
  ------------------
  |  |   31|     16|#define SRE_OP_LITERAL 16
  ------------------
  |  Branch (2160:9): [True: 16, False: 135]
  ------------------
 2161|     16|        case SRE_OP_NOT_LITERAL:
  ------------------
  |  |   35|     16|#define SRE_OP_NOT_LITERAL 20
  ------------------
  |  Branch (2161:9): [True: 0, False: 151]
  ------------------
 2162|     16|        case SRE_OP_LITERAL_IGNORE:
  ------------------
  |  |   47|     16|#define SRE_OP_LITERAL_IGNORE 32
  ------------------
  |  Branch (2162:9): [True: 0, False: 151]
  ------------------
 2163|     16|        case SRE_OP_NOT_LITERAL_IGNORE:
  ------------------
  |  |   48|     16|#define SRE_OP_NOT_LITERAL_IGNORE 33
  ------------------
  |  Branch (2163:9): [True: 0, False: 151]
  ------------------
 2164|     25|        case SRE_OP_LITERAL_UNI_IGNORE:
  ------------------
  |  |   55|     25|#define SRE_OP_LITERAL_UNI_IGNORE 40
  ------------------
  |  Branch (2164:9): [True: 9, False: 142]
  ------------------
 2165|     25|        case SRE_OP_NOT_LITERAL_UNI_IGNORE:
  ------------------
  |  |   56|     25|#define SRE_OP_NOT_LITERAL_UNI_IGNORE 41
  ------------------
  |  Branch (2165:9): [True: 0, False: 151]
  ------------------
 2166|     25|        case SRE_OP_LITERAL_LOC_IGNORE:
  ------------------
  |  |   51|     25|#define SRE_OP_LITERAL_LOC_IGNORE 36
  ------------------
  |  Branch (2166:9): [True: 0, False: 151]
  ------------------
 2167|     25|        case SRE_OP_NOT_LITERAL_LOC_IGNORE:
  ------------------
  |  |   52|     25|#define SRE_OP_NOT_LITERAL_LOC_IGNORE 37
  ------------------
  |  Branch (2167:9): [True: 0, False: 151]
  ------------------
 2168|     25|            GET_ARG;
  ------------------
  |  | 1968|     25|    do {                                                \
  |  | 1969|     25|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     25|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     25|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 25]
  |  |  ------------------
  |  | 1971|     25|        arg = *code++;                                  \
  |  | 1972|     25|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     25|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
 2169|       |            /* The arg is just a character, nothing to check */
 2170|     25|            break;
 2171|       |
 2172|     25|        case SRE_OP_SUCCESS:
  ------------------
  |  |   16|      0|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (2172:9): [True: 0, False: 151]
  ------------------
 2173|      0|        case SRE_OP_FAILURE:
  ------------------
  |  |   15|      0|#define SRE_OP_FAILURE 0
  ------------------
  |  Branch (2173:9): [True: 0, False: 151]
  ------------------
 2174|       |            /* Nothing to check; these normally end the matching process */
 2175|      0|            break;
 2176|       |
 2177|      8|        case SRE_OP_AT:
  ------------------
  |  |   21|      8|#define SRE_OP_AT 6
  ------------------
  |  Branch (2177:9): [True: 8, False: 143]
  ------------------
 2178|      8|            GET_ARG;
  ------------------
  |  | 1968|      8|    do {                                                \
  |  | 1969|      8|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      8|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      8|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 8]
  |  |  ------------------
  |  | 1971|      8|        arg = *code++;                                  \
  |  | 1972|      8|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      8|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 2179|      8|            switch (arg) {
 2180|      2|            case SRE_AT_BEGINNING:
  ------------------
  |  |   58|      2|#define SRE_AT_BEGINNING 0
  ------------------
  |  Branch (2180:13): [True: 2, False: 6]
  ------------------
 2181|      3|            case SRE_AT_BEGINNING_STRING:
  ------------------
  |  |   60|      3|#define SRE_AT_BEGINNING_STRING 2
  ------------------
  |  Branch (2181:13): [True: 1, False: 7]
  ------------------
 2182|      3|            case SRE_AT_BEGINNING_LINE:
  ------------------
  |  |   59|      3|#define SRE_AT_BEGINNING_LINE 1
  ------------------
  |  Branch (2182:13): [True: 0, False: 8]
  ------------------
 2183|      6|            case SRE_AT_END:
  ------------------
  |  |   63|      6|#define SRE_AT_END 5
  ------------------
  |  Branch (2183:13): [True: 3, False: 5]
  ------------------
 2184|      6|            case SRE_AT_END_LINE:
  ------------------
  |  |   64|      6|#define SRE_AT_END_LINE 6
  ------------------
  |  Branch (2184:13): [True: 0, False: 8]
  ------------------
 2185|      8|            case SRE_AT_END_STRING:
  ------------------
  |  |   65|      8|#define SRE_AT_END_STRING 7
  ------------------
  |  Branch (2185:13): [True: 2, False: 6]
  ------------------
 2186|      8|            case SRE_AT_BOUNDARY:
  ------------------
  |  |   61|      8|#define SRE_AT_BOUNDARY 3
  ------------------
  |  Branch (2186:13): [True: 0, False: 8]
  ------------------
 2187|      8|            case SRE_AT_NON_BOUNDARY:
  ------------------
  |  |   62|      8|#define SRE_AT_NON_BOUNDARY 4
  ------------------
  |  Branch (2187:13): [True: 0, False: 8]
  ------------------
 2188|      8|            case SRE_AT_LOC_BOUNDARY:
  ------------------
  |  |   66|      8|#define SRE_AT_LOC_BOUNDARY 8
  ------------------
  |  Branch (2188:13): [True: 0, False: 8]
  ------------------
 2189|      8|            case SRE_AT_LOC_NON_BOUNDARY:
  ------------------
  |  |   67|      8|#define SRE_AT_LOC_NON_BOUNDARY 9
  ------------------
  |  Branch (2189:13): [True: 0, False: 8]
  ------------------
 2190|      8|            case SRE_AT_UNI_BOUNDARY:
  ------------------
  |  |   68|      8|#define SRE_AT_UNI_BOUNDARY 10
  ------------------
  |  Branch (2190:13): [True: 0, False: 8]
  ------------------
 2191|      8|            case SRE_AT_UNI_NON_BOUNDARY:
  ------------------
  |  |   69|      8|#define SRE_AT_UNI_NON_BOUNDARY 11
  ------------------
  |  Branch (2191:13): [True: 0, False: 8]
  ------------------
 2192|      8|                break;
 2193|      0|            default:
  ------------------
  |  Branch (2193:13): [True: 0, False: 8]
  ------------------
 2194|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2195|      8|            }
 2196|      8|            break;
 2197|       |
 2198|      8|        case SRE_OP_CATEGORY:
  ------------------
  |  |   23|      8|#define SRE_OP_CATEGORY 8
  ------------------
  |  Branch (2198:9): [True: 8, False: 143]
  ------------------
 2199|      8|            GET_ARG;
  ------------------
  |  | 1968|      8|    do {                                                \
  |  | 1969|      8|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      8|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      8|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 8]
  |  |  ------------------
  |  | 1971|      8|        arg = *code++;                                  \
  |  | 1972|      8|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      8|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 2200|      8|            if (!_validate_category(arg)) {
  ------------------
  |  Branch (2200:17): [True: 0, False: 8]
  ------------------
 2201|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2202|      0|            }
 2203|      8|            break;
 2204|       |
 2205|      8|        case SRE_OP_ANY:
  ------------------
  |  |   17|      1|#define SRE_OP_ANY 2
  ------------------
  |  Branch (2205:9): [True: 1, False: 150]
  ------------------
 2206|      2|        case SRE_OP_ANY_ALL:
  ------------------
  |  |   18|      2|#define SRE_OP_ANY_ALL 3
  ------------------
  |  Branch (2206:9): [True: 1, False: 150]
  ------------------
 2207|       |            /* These have no operands */
 2208|      2|            break;
 2209|       |
 2210|     15|        case SRE_OP_IN:
  ------------------
  |  |   28|     15|#define SRE_OP_IN 13
  ------------------
  |  Branch (2210:9): [True: 15, False: 136]
  ------------------
 2211|     15|        case SRE_OP_IN_IGNORE:
  ------------------
  |  |   46|     15|#define SRE_OP_IN_IGNORE 31
  ------------------
  |  Branch (2211:9): [True: 0, False: 151]
  ------------------
 2212|     19|        case SRE_OP_IN_UNI_IGNORE:
  ------------------
  |  |   54|     19|#define SRE_OP_IN_UNI_IGNORE 39
  ------------------
  |  Branch (2212:9): [True: 4, False: 147]
  ------------------
 2213|     19|        case SRE_OP_IN_LOC_IGNORE:
  ------------------
  |  |   50|     19|#define SRE_OP_IN_LOC_IGNORE 35
  ------------------
  |  Branch (2213:9): [True: 0, False: 151]
  ------------------
 2214|     19|            GET_SKIP;
  ------------------
  |  | 1985|     19|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|     19|    do {                                                \
  |  |  |  | 1976|     19|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     19|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 19]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|     19|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  |  | 1978|     19|        skip = *code;                                   \
  |  |  |  | 1979|     19|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     19|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 19]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|     19|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|     19|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  |  | 1982|     19|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|     19|        code++;                                         \
  |  |  |  | 1984|     19|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2215|       |            /* Stop 1 before the end; we check the FAILURE below */
 2216|     19|            if (_validate_charset(code, code+skip-2))
  ------------------
  |  Branch (2216:17): [True: 0, False: 19]
  ------------------
 2217|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2218|     19|            if (code[skip-2] != SRE_OP_FAILURE)
  ------------------
  |  |   15|     19|#define SRE_OP_FAILURE 0
  ------------------
  |  Branch (2218:17): [True: 0, False: 19]
  ------------------
 2219|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2220|     19|            code += skip-1;
 2221|     19|            break;
 2222|       |
 2223|      9|        case SRE_OP_INFO:
  ------------------
  |  |   29|      9|#define SRE_OP_INFO 14
  ------------------
  |  Branch (2223:9): [True: 9, False: 142]
  ------------------
 2224|      9|            {
 2225|       |                /* A minimal info field is
 2226|       |                   <INFO> <1=skip> <2=flags> <3=min> <4=max>;
 2227|       |                   If SRE_INFO_PREFIX or SRE_INFO_CHARSET is in the flags,
 2228|       |                   more follows. */
 2229|      9|                SRE_CODE flags, i;
  ------------------
  |  |   18|      9|#define SRE_CODE Py_UCS4
  ------------------
 2230|      9|                SRE_CODE *newcode;
  ------------------
  |  |   18|      9|#define SRE_CODE Py_UCS4
  ------------------
 2231|      9|                GET_SKIP;
  ------------------
  |  | 1985|      9|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|      9|    do {                                                \
  |  |  |  | 1976|      9|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|      9|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  | 1978|      9|        skip = *code;                                   \
  |  |  |  | 1979|      9|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|      9|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|      9|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  | 1982|      9|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|      9|        code++;                                         \
  |  |  |  | 1984|      9|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2232|      9|                newcode = code+skip-1;
 2233|      9|                GET_ARG; flags = arg;
  ------------------
  |  | 1968|      9|    do {                                                \
  |  | 1969|      9|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      9|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1971|      9|        arg = *code++;                                  \
  |  | 1972|      9|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      9|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 9]
  |  |  ------------------
  ------------------
 2234|      9|                GET_ARG;
  ------------------
  |  | 1968|      9|    do {                                                \
  |  | 1969|      9|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      9|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1971|      9|        arg = *code++;                                  \
  |  | 1972|      9|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      9|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 9]
  |  |  ------------------
  ------------------
 2235|      9|                GET_ARG;
  ------------------
  |  | 1968|      9|    do {                                                \
  |  | 1969|      9|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      9|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1971|      9|        arg = *code++;                                  \
  |  | 1972|      9|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      9|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      9|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 9]
  |  |  ------------------
  ------------------
 2236|       |                /* Check that only valid flags are present */
 2237|      9|                if ((flags & ~(SRE_INFO_PREFIX |
  ------------------
  |  |  146|      9|#define SRE_INFO_PREFIX 1
  ------------------
  |  Branch (2237:21): [True: 0, False: 9]
  ------------------
 2238|      9|                               SRE_INFO_LITERAL |
  ------------------
  |  |  147|      9|#define SRE_INFO_LITERAL 2
  ------------------
 2239|      9|                               SRE_INFO_CHARSET)) != 0)
  ------------------
  |  |  148|      9|#define SRE_INFO_CHARSET 4
  ------------------
 2240|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2241|       |                /* PREFIX and CHARSET are mutually exclusive */
 2242|      9|                if ((flags & SRE_INFO_PREFIX) &&
  ------------------
  |  |  146|      9|#define SRE_INFO_PREFIX 1
  ------------------
  |  Branch (2242:21): [True: 1, False: 8]
  ------------------
 2243|      1|                    (flags & SRE_INFO_CHARSET))
  ------------------
  |  |  148|      1|#define SRE_INFO_CHARSET 4
  ------------------
  |  Branch (2243:21): [True: 0, False: 1]
  ------------------
 2244|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2245|       |                /* LITERAL implies PREFIX */
 2246|      9|                if ((flags & SRE_INFO_LITERAL) &&
  ------------------
  |  |  147|      9|#define SRE_INFO_LITERAL 2
  ------------------
  |  Branch (2246:21): [True: 0, False: 9]
  ------------------
 2247|      0|                    !(flags & SRE_INFO_PREFIX))
  ------------------
  |  |  146|      0|#define SRE_INFO_PREFIX 1
  ------------------
  |  Branch (2247:21): [True: 0, False: 0]
  ------------------
 2248|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2249|       |                /* Validate the prefix */
 2250|      9|                if (flags & SRE_INFO_PREFIX) {
  ------------------
  |  |  146|      9|#define SRE_INFO_PREFIX 1
  ------------------
  |  Branch (2250:21): [True: 1, False: 8]
  ------------------
 2251|      1|                    SRE_CODE prefix_len;
  ------------------
  |  |   18|      1|#define SRE_CODE Py_UCS4
  ------------------
 2252|      1|                    GET_ARG; prefix_len = arg;
  ------------------
  |  | 1968|      1|    do {                                                \
  |  | 1969|      1|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      1|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      1|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1971|      1|        arg = *code++;                                  \
  |  | 1972|      1|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      1|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2253|      1|                    GET_ARG;
  ------------------
  |  | 1968|      1|    do {                                                \
  |  | 1969|      1|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      1|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      1|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 1971|      1|        arg = *code++;                                  \
  |  | 1972|      1|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      1|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2254|       |                    /* Here comes the prefix string */
 2255|      1|                    if (prefix_len > (uintptr_t)(newcode - code))
  ------------------
  |  Branch (2255:25): [True: 0, False: 1]
  ------------------
 2256|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2257|      1|                    code += prefix_len;
 2258|       |                    /* And here comes the overlap table */
 2259|      1|                    if (prefix_len > (uintptr_t)(newcode - code))
  ------------------
  |  Branch (2259:25): [True: 0, False: 1]
  ------------------
 2260|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2261|       |                    /* Each overlap value should be < prefix_len */
 2262|      2|                    for (i = 0; i < prefix_len; i++) {
  ------------------
  |  Branch (2262:33): [True: 1, False: 1]
  ------------------
 2263|      1|                        if (code[i] >= prefix_len)
  ------------------
  |  Branch (2263:29): [True: 0, False: 1]
  ------------------
 2264|      0|                            FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2265|      1|                    }
 2266|      1|                    code += prefix_len;
 2267|      1|                }
 2268|       |                /* Validate the charset */
 2269|      9|                if (flags & SRE_INFO_CHARSET) {
  ------------------
  |  |  148|      9|#define SRE_INFO_CHARSET 4
  ------------------
  |  Branch (2269:21): [True: 1, False: 8]
  ------------------
 2270|      1|                    if (_validate_charset(code, newcode-1))
  ------------------
  |  Branch (2270:25): [True: 0, False: 1]
  ------------------
 2271|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2272|      1|                    if (newcode[-1] != SRE_OP_FAILURE)
  ------------------
  |  |   15|      1|#define SRE_OP_FAILURE 0
  ------------------
  |  Branch (2272:25): [True: 0, False: 1]
  ------------------
 2273|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2274|      1|                    code = newcode;
 2275|      1|                }
 2276|      8|                else if (code != newcode) {
  ------------------
  |  Branch (2276:26): [True: 0, False: 8]
  ------------------
 2277|      0|                  VTRACE(("code=%p, newcode=%p\n", code, newcode));
  ------------------
  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2278|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2279|      0|                }
 2280|      9|            }
 2281|      9|            break;
 2282|       |
 2283|      9|        case SRE_OP_BRANCH:
  ------------------
  |  |   22|      3|#define SRE_OP_BRANCH 7
  ------------------
  |  Branch (2283:9): [True: 3, False: 148]
  ------------------
 2284|      3|            {
 2285|      3|                SRE_CODE *target = NULL;
  ------------------
  |  |   18|      3|#define SRE_CODE Py_UCS4
  ------------------
 2286|     10|                for (;;) {
 2287|     10|                    GET_SKIP;
  ------------------
  |  | 1985|     10|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|     10|    do {                                                \
  |  |  |  | 1976|     10|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     10|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|     10|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  | 1978|     10|        skip = *code;                                   \
  |  |  |  | 1979|     10|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     10|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|     10|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|     10|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  | 1982|     10|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|     10|        code++;                                         \
  |  |  |  | 1984|     10|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2288|     10|                    if (skip == 0)
  ------------------
  |  Branch (2288:25): [True: 3, False: 7]
  ------------------
 2289|      3|                        break;
 2290|       |                    /* Stop 2 before the end; we check the JUMP below */
 2291|      7|                    if (_validate_inner(code, code+skip-3, groups))
  ------------------
  |  Branch (2291:25): [True: 0, False: 7]
  ------------------
 2292|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2293|      7|                    code += skip-3;
 2294|       |                    /* Check that it ends with a JUMP, and that each JUMP
 2295|       |                       has the same target */
 2296|      7|                    GET_OP;
  ------------------
  |  | 1961|      7|    do {                                                \
  |  | 1962|      7|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      7|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|      7|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 7]
  |  |  ------------------
  |  | 1964|      7|        op = *code++;                                   \
  |  | 1965|      7|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|      7|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|      7|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 7]
  |  |  ------------------
  ------------------
 2297|      7|                    if (op != SRE_OP_JUMP)
  ------------------
  |  |   30|      7|#define SRE_OP_JUMP 15
  ------------------
  |  Branch (2297:25): [True: 0, False: 7]
  ------------------
 2298|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2299|      7|                    GET_SKIP;
  ------------------
  |  | 1985|      7|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|      7|    do {                                                \
  |  |  |  | 1976|      7|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      7|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|      7|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  | 1978|      7|        skip = *code;                                   \
  |  |  |  | 1979|      7|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      7|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|      7|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|      7|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  | 1982|      7|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|      7|        code++;                                         \
  |  |  |  | 1984|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2300|      7|                    if (target == NULL)
  ------------------
  |  Branch (2300:25): [True: 3, False: 4]
  ------------------
 2301|      3|                        target = code+skip-1;
 2302|      4|                    else if (code+skip-1 != target)
  ------------------
  |  Branch (2302:30): [True: 0, False: 4]
  ------------------
 2303|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2304|      7|                }
 2305|      3|                if (code != target)
  ------------------
  |  Branch (2305:21): [True: 0, False: 3]
  ------------------
 2306|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2307|      3|            }
 2308|      3|            break;
 2309|       |
 2310|     13|        case SRE_OP_REPEAT_ONE:
  ------------------
  |  |   39|     13|#define SRE_OP_REPEAT_ONE 24
  ------------------
  |  Branch (2310:9): [True: 13, False: 138]
  ------------------
 2311|     14|        case SRE_OP_MIN_REPEAT_ONE:
  ------------------
  |  |   41|     14|#define SRE_OP_MIN_REPEAT_ONE 26
  ------------------
  |  Branch (2311:9): [True: 1, False: 150]
  ------------------
 2312|     14|        case SRE_OP_POSSESSIVE_REPEAT_ONE:
  ------------------
  |  |   44|     14|#define SRE_OP_POSSESSIVE_REPEAT_ONE 29
  ------------------
  |  Branch (2312:9): [True: 0, False: 151]
  ------------------
 2313|     14|            {
 2314|     14|                SRE_CODE min, max;
  ------------------
  |  |   18|     14|#define SRE_CODE Py_UCS4
  ------------------
 2315|     14|                GET_SKIP;
  ------------------
  |  | 1985|     14|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|     14|    do {                                                \
  |  |  |  | 1976|     14|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|     14|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  |  | 1978|     14|        skip = *code;                                   \
  |  |  |  | 1979|     14|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|     14|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|     14|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  |  | 1982|     14|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|     14|        code++;                                         \
  |  |  |  | 1984|     14|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2316|     14|                GET_ARG; min = arg;
  ------------------
  |  | 1968|     14|    do {                                                \
  |  | 1969|     14|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     14|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 14]
  |  |  ------------------
  |  | 1971|     14|        arg = *code++;                                  \
  |  | 1972|     14|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 2317|     14|                GET_ARG; max = arg;
  ------------------
  |  | 1968|     14|    do {                                                \
  |  | 1969|     14|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     14|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 14]
  |  |  ------------------
  |  | 1971|     14|        arg = *code++;                                  \
  |  | 1972|     14|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 2318|     14|                if (min > max)
  ------------------
  |  Branch (2318:21): [True: 0, False: 14]
  ------------------
 2319|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2320|     14|                if (max > SRE_MAXREPEAT)
  ------------------
  |  |   20|     14|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (2320:21): [True: 0, False: 14]
  ------------------
 2321|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2322|     14|                if (_validate_inner(code, code+skip-4, groups))
  ------------------
  |  Branch (2322:21): [True: 0, False: 14]
  ------------------
 2323|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2324|     14|                code += skip-4;
 2325|     14|                GET_OP;
  ------------------
  |  | 1961|     14|    do {                                                \
  |  | 1962|     14|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|     14|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 14]
  |  |  ------------------
  |  | 1964|     14|        op = *code++;                                   \
  |  | 1965|     14|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|     14|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 2326|     14|                if (op != SRE_OP_SUCCESS)
  ------------------
  |  |   16|     14|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (2326:21): [True: 0, False: 14]
  ------------------
 2327|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2328|     14|            }
 2329|     14|            break;
 2330|       |
 2331|     17|        case SRE_OP_REPEAT:
  ------------------
  |  |   38|     17|#define SRE_OP_REPEAT 23
  ------------------
  |  Branch (2331:9): [True: 17, False: 134]
  ------------------
 2332|     17|        case SRE_OP_POSSESSIVE_REPEAT:
  ------------------
  |  |   43|     17|#define SRE_OP_POSSESSIVE_REPEAT 28
  ------------------
  |  Branch (2332:9): [True: 0, False: 151]
  ------------------
 2333|     17|            {
 2334|     17|                SRE_CODE op1 = op, min, max;
  ------------------
  |  |   18|     17|#define SRE_CODE Py_UCS4
  ------------------
 2335|     17|                GET_SKIP;
  ------------------
  |  | 1985|     17|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|     17|    do {                                                \
  |  |  |  | 1976|     17|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|     17|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 17]
  |  |  |  |  ------------------
  |  |  |  | 1978|     17|        skip = *code;                                   \
  |  |  |  | 1979|     17|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|     17|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|     17|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 17]
  |  |  |  |  ------------------
  |  |  |  | 1982|     17|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|     17|        code++;                                         \
  |  |  |  | 1984|     17|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2336|     17|                GET_ARG; min = arg;
  ------------------
  |  | 1968|     17|    do {                                                \
  |  | 1969|     17|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     17|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 17]
  |  |  ------------------
  |  | 1971|     17|        arg = *code++;                                  \
  |  | 1972|     17|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     17|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 17]
  |  |  ------------------
  ------------------
 2337|     17|                GET_ARG; max = arg;
  ------------------
  |  | 1968|     17|    do {                                                \
  |  | 1969|     17|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     17|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 17]
  |  |  ------------------
  |  | 1971|     17|        arg = *code++;                                  \
  |  | 1972|     17|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     17|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 17]
  |  |  ------------------
  ------------------
 2338|     17|                if (min > max)
  ------------------
  |  Branch (2338:21): [True: 0, False: 17]
  ------------------
 2339|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2340|     17|                if (max > SRE_MAXREPEAT)
  ------------------
  |  |   20|     17|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (2340:21): [True: 0, False: 17]
  ------------------
 2341|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2342|     17|                if (_validate_inner(code, code+skip-3, groups))
  ------------------
  |  Branch (2342:21): [True: 0, False: 17]
  ------------------
 2343|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2344|     17|                code += skip-3;
 2345|     17|                GET_OP;
  ------------------
  |  | 1961|     17|    do {                                                \
  |  | 1962|     17|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|     17|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 17]
  |  |  ------------------
  |  | 1964|     17|        op = *code++;                                   \
  |  | 1965|     17|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|     17|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|     17|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 17]
  |  |  ------------------
  ------------------
 2346|     17|                if (op1 == SRE_OP_POSSESSIVE_REPEAT) {
  ------------------
  |  |   43|     17|#define SRE_OP_POSSESSIVE_REPEAT 28
  ------------------
  |  Branch (2346:21): [True: 0, False: 17]
  ------------------
 2347|      0|                    if (op != SRE_OP_SUCCESS)
  ------------------
  |  |   16|      0|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (2347:25): [True: 0, False: 0]
  ------------------
 2348|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2349|      0|                }
 2350|     17|                else {
 2351|     17|                    if (op != SRE_OP_MAX_UNTIL && op != SRE_OP_MIN_UNTIL)
  ------------------
  |  |   33|     34|#define SRE_OP_MAX_UNTIL 18
  ------------------
                                  if (op != SRE_OP_MAX_UNTIL && op != SRE_OP_MIN_UNTIL)
  ------------------
  |  |   34|      0|#define SRE_OP_MIN_UNTIL 19
  ------------------
  |  Branch (2351:25): [True: 0, False: 17]
  |  Branch (2351:51): [True: 0, False: 0]
  ------------------
 2352|      0|                        FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2353|     17|                }
 2354|     17|            }
 2355|     17|            break;
 2356|       |
 2357|     17|        case SRE_OP_ATOMIC_GROUP:
  ------------------
  |  |   42|      0|#define SRE_OP_ATOMIC_GROUP 27
  ------------------
  |  Branch (2357:9): [True: 0, False: 151]
  ------------------
 2358|      0|            {
 2359|      0|                GET_SKIP;
  ------------------
  |  | 1985|      0|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|      0|    do {                                                \
  |  |  |  | 1976|      0|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|      0|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1978|      0|        skip = *code;                                   \
  |  |  |  | 1979|      0|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|      0|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|      0|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1982|      0|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|      0|        code++;                                         \
  |  |  |  | 1984|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2360|      0|                if (_validate_inner(code, code+skip-2, groups))
  ------------------
  |  Branch (2360:21): [True: 0, False: 0]
  ------------------
 2361|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2362|      0|                code += skip-2;
 2363|      0|                GET_OP;
  ------------------
  |  | 1961|      0|    do {                                                \
  |  | 1962|      0|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|      0|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1964|      0|        op = *code++;                                   \
  |  | 1965|      0|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2364|      0|                if (op != SRE_OP_SUCCESS)
  ------------------
  |  |   16|      0|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (2364:21): [True: 0, False: 0]
  ------------------
 2365|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2366|      0|            }
 2367|      0|            break;
 2368|       |
 2369|      0|        case SRE_OP_GROUPREF:
  ------------------
  |  |   26|      0|#define SRE_OP_GROUPREF 11
  ------------------
  |  Branch (2369:9): [True: 0, False: 151]
  ------------------
 2370|      0|        case SRE_OP_GROUPREF_IGNORE:
  ------------------
  |  |   45|      0|#define SRE_OP_GROUPREF_IGNORE 30
  ------------------
  |  Branch (2370:9): [True: 0, False: 151]
  ------------------
 2371|      0|        case SRE_OP_GROUPREF_UNI_IGNORE:
  ------------------
  |  |   53|      0|#define SRE_OP_GROUPREF_UNI_IGNORE 38
  ------------------
  |  Branch (2371:9): [True: 0, False: 151]
  ------------------
 2372|      0|        case SRE_OP_GROUPREF_LOC_IGNORE:
  ------------------
  |  |   49|      0|#define SRE_OP_GROUPREF_LOC_IGNORE 34
  ------------------
  |  Branch (2372:9): [True: 0, False: 151]
  ------------------
 2373|      0|            GET_ARG;
  ------------------
  |  | 1968|      0|    do {                                                \
  |  | 1969|      0|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      0|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1971|      0|        arg = *code++;                                  \
  |  | 1972|      0|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2374|      0|            if (arg >= (size_t)groups)
  ------------------
  |  Branch (2374:17): [True: 0, False: 0]
  ------------------
 2375|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2376|      0|            break;
 2377|       |
 2378|      0|        case SRE_OP_GROUPREF_EXISTS:
  ------------------
  |  |   27|      0|#define SRE_OP_GROUPREF_EXISTS 12
  ------------------
  |  Branch (2378:9): [True: 0, False: 151]
  ------------------
 2379|       |            /* The regex syntax for this is: '(?(group)then|else)', where
 2380|       |               'group' is either an integer group number or a group name,
 2381|       |               'then' and 'else' are sub-regexes, and 'else' is optional. */
 2382|      0|            GET_ARG;
  ------------------
  |  | 1968|      0|    do {                                                \
  |  | 1969|      0|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      0|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1971|      0|        arg = *code++;                                  \
  |  | 1972|      0|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2383|      0|            if (arg >= (size_t)groups)
  ------------------
  |  Branch (2383:17): [True: 0, False: 0]
  ------------------
 2384|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2385|      0|            GET_SKIP_ADJ(1);
  ------------------
  |  | 1975|      0|    do {                                                \
  |  | 1976|      0|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1977|      0|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1977:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1978|      0|        skip = *code;                                   \
  |  | 1979|      0|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1980|      0|               (unsigned long)skip, code+skip));        \
  |  | 1981|      0|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  ------------------
  |  |  |  Branch (1981:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1982|      0|            FAIL;                                       \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1983|      0|        code++;                                         \
  |  | 1984|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1984:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2386|      0|            code--; /* The skip is relative to the first arg! */
 2387|       |            /* There are two possibilities here: if there is both a 'then'
 2388|       |               part and an 'else' part, the generated code looks like:
 2389|       |
 2390|       |               GROUPREF_EXISTS
 2391|       |               <group>
 2392|       |               <skipyes>
 2393|       |               ...then part...
 2394|       |               JUMP
 2395|       |               <skipno>
 2396|       |               (<skipyes> jumps here)
 2397|       |               ...else part...
 2398|       |               (<skipno> jumps here)
 2399|       |
 2400|       |               If there is only a 'then' part, it looks like:
 2401|       |
 2402|       |               GROUPREF_EXISTS
 2403|       |               <group>
 2404|       |               <skip>
 2405|       |               ...then part...
 2406|       |               (<skip> jumps here)
 2407|       |
 2408|       |               There is no direct way to decide which it is, and we don't want
 2409|       |               to allow arbitrary jumps anywhere in the code; so we just look
 2410|       |               for a JUMP opcode preceding our skip target.
 2411|       |            */
 2412|      0|            VTRACE(("then part:\n"));
  ------------------
  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2413|      0|            int rc = _validate_inner(code+1, code+skip-1, groups);
 2414|      0|            if (rc == 1) {
  ------------------
  |  Branch (2414:17): [True: 0, False: 0]
  ------------------
 2415|      0|                VTRACE(("else part:\n"));
  ------------------
  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2416|      0|                code += skip-2; /* Position after JUMP, at <skipno> */
 2417|      0|                GET_SKIP;
  ------------------
  |  | 1985|      0|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|      0|    do {                                                \
  |  |  |  | 1976|      0|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|      0|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1978|      0|        skip = *code;                                   \
  |  |  |  | 1979|      0|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|      0|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|      0|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1982|      0|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|      0|        code++;                                         \
  |  |  |  | 1984|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2418|      0|                rc = _validate_inner(code, code+skip-1, groups);
 2419|      0|            }
 2420|      0|            if (rc)
  ------------------
  |  Branch (2420:17): [True: 0, False: 0]
  ------------------
 2421|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2422|      0|            code += skip-1;
 2423|      0|            break;
 2424|       |
 2425|      2|        case SRE_OP_ASSERT:
  ------------------
  |  |   19|      2|#define SRE_OP_ASSERT 4
  ------------------
  |  Branch (2425:9): [True: 2, False: 149]
  ------------------
 2426|      2|        case SRE_OP_ASSERT_NOT:
  ------------------
  |  |   20|      2|#define SRE_OP_ASSERT_NOT 5
  ------------------
  |  Branch (2426:9): [True: 0, False: 151]
  ------------------
 2427|      2|            GET_SKIP;
  ------------------
  |  | 1985|      2|#define GET_SKIP GET_SKIP_ADJ(0)
  |  |  ------------------
  |  |  |  | 1975|      2|    do {                                                \
  |  |  |  | 1976|      2|        VTRACE(("%p= ", code));                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1977|      2|        if (code >= end) FAIL;                          \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1977:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 1978|      2|        skip = *code;                                   \
  |  |  |  | 1979|      2|        VTRACE(("%lu (skip to %p)\n",                   \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1980|      2|               (unsigned long)skip, code+skip));        \
  |  |  |  | 1981|      2|        if (skip-adj > (uintptr_t)(end - code))         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1981:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 1982|      2|            FAIL;                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 1983|      2|        code++;                                         \
  |  |  |  | 1984|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1984:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2428|      2|            GET_ARG; /* 0 for lookahead, width for lookbehind */
  ------------------
  |  | 1968|      2|    do {                                                \
  |  | 1969|      2|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      2|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1971|      2|        arg = *code++;                                  \
  |  | 1972|      2|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2429|      2|            code--; /* Back up over arg to simplify math below */
 2430|       |            /* Stop 1 before the end; we check the SUCCESS below */
 2431|      2|            if (_validate_inner(code+1, code+skip-2, groups))
  ------------------
  |  Branch (2431:17): [True: 0, False: 2]
  ------------------
 2432|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2433|      2|            code += skip-2;
 2434|      2|            GET_OP;
  ------------------
  |  | 1961|      2|    do {                                                \
  |  | 1962|      2|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|      2|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1964|      2|        op = *code++;                                   \
  |  | 1965|      2|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2435|      2|            if (op != SRE_OP_SUCCESS)
  ------------------
  |  |   16|      2|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (2435:17): [True: 0, False: 2]
  ------------------
 2436|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2437|      2|            break;
 2438|       |
 2439|      2|        case SRE_OP_JUMP:
  ------------------
  |  |   30|      0|#define SRE_OP_JUMP 15
  ------------------
  |  Branch (2439:9): [True: 0, False: 151]
  ------------------
 2440|      0|            if (code + 1 != end)
  ------------------
  |  Branch (2440:17): [True: 0, False: 0]
  ------------------
 2441|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2442|      0|            VTRACE(("JUMP: %d\n", __LINE__));
  ------------------
  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2443|      0|            return 1;
 2444|       |
 2445|      0|        default:
  ------------------
  |  Branch (2445:9): [True: 0, False: 151]
  ------------------
 2446|      0|            FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2447|       |
 2448|    151|        }
 2449|    151|    }
 2450|       |
 2451|     49|    VTRACE(("okay\n"));
  ------------------
  |  | 1953|     49|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  ------------------
  |  |  |  Branch (1953:31): [Folded, False: 49]
  |  |  ------------------
  ------------------
 2452|     49|    return 0;
 2453|     49|}
sre.c:_validate_category:
 1989|     10|{
 1990|     10|    switch (arg) {
 1991|      0|    case SRE_CATEGORY_DIGIT:
  ------------------
  |  |   70|      0|#define SRE_CATEGORY_DIGIT 0
  ------------------
  |  Branch (1991:5): [True: 0, False: 10]
  ------------------
 1992|      0|    case SRE_CATEGORY_NOT_DIGIT:
  ------------------
  |  |   71|      0|#define SRE_CATEGORY_NOT_DIGIT 1
  ------------------
  |  Branch (1992:5): [True: 0, False: 10]
  ------------------
 1993|      0|    case SRE_CATEGORY_SPACE:
  ------------------
  |  |   72|      0|#define SRE_CATEGORY_SPACE 2
  ------------------
  |  Branch (1993:5): [True: 0, False: 10]
  ------------------
 1994|      0|    case SRE_CATEGORY_NOT_SPACE:
  ------------------
  |  |   73|      0|#define SRE_CATEGORY_NOT_SPACE 3
  ------------------
  |  Branch (1994:5): [True: 0, False: 10]
  ------------------
 1995|      1|    case SRE_CATEGORY_WORD:
  ------------------
  |  |   74|      1|#define SRE_CATEGORY_WORD 4
  ------------------
  |  Branch (1995:5): [True: 1, False: 9]
  ------------------
 1996|      1|    case SRE_CATEGORY_NOT_WORD:
  ------------------
  |  |   75|      1|#define SRE_CATEGORY_NOT_WORD 5
  ------------------
  |  Branch (1996:5): [True: 0, False: 10]
  ------------------
 1997|      1|    case SRE_CATEGORY_LINEBREAK:
  ------------------
  |  |   76|      1|#define SRE_CATEGORY_LINEBREAK 6
  ------------------
  |  Branch (1997:5): [True: 0, False: 10]
  ------------------
 1998|      1|    case SRE_CATEGORY_NOT_LINEBREAK:
  ------------------
  |  |   77|      1|#define SRE_CATEGORY_NOT_LINEBREAK 7
  ------------------
  |  Branch (1998:5): [True: 0, False: 10]
  ------------------
 1999|      1|    case SRE_CATEGORY_LOC_WORD:
  ------------------
  |  |   78|      1|#define SRE_CATEGORY_LOC_WORD 8
  ------------------
  |  Branch (1999:5): [True: 0, False: 10]
  ------------------
 2000|      1|    case SRE_CATEGORY_LOC_NOT_WORD:
  ------------------
  |  |   79|      1|#define SRE_CATEGORY_LOC_NOT_WORD 9
  ------------------
  |  Branch (2000:5): [True: 0, False: 10]
  ------------------
 2001|     10|    case SRE_CATEGORY_UNI_DIGIT:
  ------------------
  |  |   80|     10|#define SRE_CATEGORY_UNI_DIGIT 10
  ------------------
  |  Branch (2001:5): [True: 9, False: 1]
  ------------------
 2002|     10|    case SRE_CATEGORY_UNI_NOT_DIGIT:
  ------------------
  |  |   81|     10|#define SRE_CATEGORY_UNI_NOT_DIGIT 11
  ------------------
  |  Branch (2002:5): [True: 0, False: 10]
  ------------------
 2003|     10|    case SRE_CATEGORY_UNI_SPACE:
  ------------------
  |  |   82|     10|#define SRE_CATEGORY_UNI_SPACE 12
  ------------------
  |  Branch (2003:5): [True: 0, False: 10]
  ------------------
 2004|     10|    case SRE_CATEGORY_UNI_NOT_SPACE:
  ------------------
  |  |   83|     10|#define SRE_CATEGORY_UNI_NOT_SPACE 13
  ------------------
  |  Branch (2004:5): [True: 0, False: 10]
  ------------------
 2005|     10|    case SRE_CATEGORY_UNI_WORD:
  ------------------
  |  |   84|     10|#define SRE_CATEGORY_UNI_WORD 14
  ------------------
  |  Branch (2005:5): [True: 0, False: 10]
  ------------------
 2006|     10|    case SRE_CATEGORY_UNI_NOT_WORD:
  ------------------
  |  |   85|     10|#define SRE_CATEGORY_UNI_NOT_WORD 15
  ------------------
  |  Branch (2006:5): [True: 0, False: 10]
  ------------------
 2007|     10|    case SRE_CATEGORY_UNI_LINEBREAK:
  ------------------
  |  |   86|     10|#define SRE_CATEGORY_UNI_LINEBREAK 16
  ------------------
  |  Branch (2007:5): [True: 0, False: 10]
  ------------------
 2008|     10|    case SRE_CATEGORY_UNI_NOT_LINEBREAK:
  ------------------
  |  |   87|     10|#define SRE_CATEGORY_UNI_NOT_LINEBREAK 17
  ------------------
  |  Branch (2008:5): [True: 0, False: 10]
  ------------------
 2009|     10|    case SRE_CATEGORY_ALPHA:
  ------------------
  |  |   88|     10|#define SRE_CATEGORY_ALPHA 18
  ------------------
  |  Branch (2009:5): [True: 0, False: 10]
  ------------------
 2010|     10|    case SRE_CATEGORY_NOT_ALPHA:
  ------------------
  |  |   89|     10|#define SRE_CATEGORY_NOT_ALPHA 19
  ------------------
  |  Branch (2010:5): [True: 0, False: 10]
  ------------------
 2011|     10|    case SRE_CATEGORY_LOWER:
  ------------------
  |  |   90|     10|#define SRE_CATEGORY_LOWER 20
  ------------------
  |  Branch (2011:5): [True: 0, False: 10]
  ------------------
 2012|     10|    case SRE_CATEGORY_NOT_LOWER:
  ------------------
  |  |   91|     10|#define SRE_CATEGORY_NOT_LOWER 21
  ------------------
  |  Branch (2012:5): [True: 0, False: 10]
  ------------------
 2013|     10|    case SRE_CATEGORY_UPPER:
  ------------------
  |  |   92|     10|#define SRE_CATEGORY_UPPER 22
  ------------------
  |  Branch (2013:5): [True: 0, False: 10]
  ------------------
 2014|     10|    case SRE_CATEGORY_NOT_UPPER:
  ------------------
  |  |   93|     10|#define SRE_CATEGORY_NOT_UPPER 23
  ------------------
  |  Branch (2014:5): [True: 0, False: 10]
  ------------------
 2015|     10|    case SRE_CATEGORY_NUMERIC:
  ------------------
  |  |   94|     10|#define SRE_CATEGORY_NUMERIC 24
  ------------------
  |  Branch (2015:5): [True: 0, False: 10]
  ------------------
 2016|     10|    case SRE_CATEGORY_NOT_NUMERIC:
  ------------------
  |  |   95|     10|#define SRE_CATEGORY_NOT_NUMERIC 25
  ------------------
  |  Branch (2016:5): [True: 0, False: 10]
  ------------------
 2017|     10|    case SRE_CATEGORY_PRINTABLE:
  ------------------
  |  |   96|     10|#define SRE_CATEGORY_PRINTABLE 26
  ------------------
  |  Branch (2017:5): [True: 0, False: 10]
  ------------------
 2018|     10|    case SRE_CATEGORY_NOT_PRINTABLE:
  ------------------
  |  |   97|     10|#define SRE_CATEGORY_NOT_PRINTABLE 27
  ------------------
  |  Branch (2018:5): [True: 0, False: 10]
  ------------------
 2019|     10|    case SRE_CATEGORY_ALNUM:
  ------------------
  |  |   98|     10|#define SRE_CATEGORY_ALNUM 28
  ------------------
  |  Branch (2019:5): [True: 0, False: 10]
  ------------------
 2020|     10|    case SRE_CATEGORY_NOT_ALNUM:
  ------------------
  |  |   99|     10|#define SRE_CATEGORY_NOT_ALNUM 29
  ------------------
  |  Branch (2020:5): [True: 0, False: 10]
  ------------------
 2021|     10|    case SRE_CATEGORY_XID_START:
  ------------------
  |  |  100|     10|#define SRE_CATEGORY_XID_START 30
  ------------------
  |  Branch (2021:5): [True: 0, False: 10]
  ------------------
 2022|     10|    case SRE_CATEGORY_NOT_XID_START:
  ------------------
  |  |  101|     10|#define SRE_CATEGORY_NOT_XID_START 31
  ------------------
  |  Branch (2022:5): [True: 0, False: 10]
  ------------------
 2023|     10|    case SRE_CATEGORY_XID_CONTINUE:
  ------------------
  |  |  102|     10|#define SRE_CATEGORY_XID_CONTINUE 32
  ------------------
  |  Branch (2023:5): [True: 0, False: 10]
  ------------------
 2024|     10|    case SRE_CATEGORY_NOT_XID_CONTINUE:
  ------------------
  |  |  103|     10|#define SRE_CATEGORY_NOT_XID_CONTINUE 33
  ------------------
  |  Branch (2024:5): [True: 0, False: 10]
  ------------------
 2025|     10|    case SRE_CATEGORY_TITLE:
  ------------------
  |  |  104|     10|#define SRE_CATEGORY_TITLE 34
  ------------------
  |  Branch (2025:5): [True: 0, False: 10]
  ------------------
 2026|     10|    case SRE_CATEGORY_NOT_TITLE:
  ------------------
  |  |  105|     10|#define SRE_CATEGORY_NOT_TITLE 35
  ------------------
  |  Branch (2026:5): [True: 0, False: 10]
  ------------------
 2027|     10|    case SRE_CATEGORY_CASED:
  ------------------
  |  |  106|     10|#define SRE_CATEGORY_CASED 36
  ------------------
  |  Branch (2027:5): [True: 0, False: 10]
  ------------------
 2028|     10|    case SRE_CATEGORY_NOT_CASED:
  ------------------
  |  |  107|     10|#define SRE_CATEGORY_NOT_CASED 37
  ------------------
  |  Branch (2028:5): [True: 0, False: 10]
  ------------------
 2029|     10|    case SRE_CATEGORY_CASE_IGNORABLE:
  ------------------
  |  |  108|     10|#define SRE_CATEGORY_CASE_IGNORABLE 38
  ------------------
  |  Branch (2029:5): [True: 0, False: 10]
  ------------------
 2030|     10|    case SRE_CATEGORY_NOT_CASE_IGNORABLE:
  ------------------
  |  |  109|     10|#define SRE_CATEGORY_NOT_CASE_IGNORABLE 39
  ------------------
  |  Branch (2030:5): [True: 0, False: 10]
  ------------------
 2031|     10|    case SRE_CATEGORY_LU:
  ------------------
  |  |  110|     10|#define SRE_CATEGORY_LU 40
  ------------------
  |  Branch (2031:5): [True: 0, False: 10]
  ------------------
 2032|     10|    case SRE_CATEGORY_NOT_LU:
  ------------------
  |  |  111|     10|#define SRE_CATEGORY_NOT_LU 41
  ------------------
  |  Branch (2032:5): [True: 0, False: 10]
  ------------------
 2033|     10|    case SRE_CATEGORY_N:
  ------------------
  |  |  112|     10|#define SRE_CATEGORY_N 42
  ------------------
  |  Branch (2033:5): [True: 0, False: 10]
  ------------------
 2034|     10|    case SRE_CATEGORY_NOT_N:
  ------------------
  |  |  113|     10|#define SRE_CATEGORY_NOT_N 43
  ------------------
  |  Branch (2034:5): [True: 0, False: 10]
  ------------------
 2035|     10|    case SRE_CATEGORY_LM:
  ------------------
  |  |  114|     10|#define SRE_CATEGORY_LM 44
  ------------------
  |  Branch (2035:5): [True: 0, False: 10]
  ------------------
 2036|     10|    case SRE_CATEGORY_NOT_LM:
  ------------------
  |  |  115|     10|#define SRE_CATEGORY_NOT_LM 45
  ------------------
  |  Branch (2036:5): [True: 0, False: 10]
  ------------------
 2037|     10|    case SRE_CATEGORY_NL:
  ------------------
  |  |  116|     10|#define SRE_CATEGORY_NL 46
  ------------------
  |  Branch (2037:5): [True: 0, False: 10]
  ------------------
 2038|     10|    case SRE_CATEGORY_NOT_NL:
  ------------------
  |  |  117|     10|#define SRE_CATEGORY_NOT_NL 47
  ------------------
  |  Branch (2038:5): [True: 0, False: 10]
  ------------------
 2039|     10|    case SRE_CATEGORY_NO:
  ------------------
  |  |  118|     10|#define SRE_CATEGORY_NO 48
  ------------------
  |  Branch (2039:5): [True: 0, False: 10]
  ------------------
 2040|     10|    case SRE_CATEGORY_NOT_NO:
  ------------------
  |  |  119|     10|#define SRE_CATEGORY_NOT_NO 49
  ------------------
  |  Branch (2040:5): [True: 0, False: 10]
  ------------------
 2041|     10|    case SRE_CATEGORY_CF:
  ------------------
  |  |  120|     10|#define SRE_CATEGORY_CF 50
  ------------------
  |  Branch (2041:5): [True: 0, False: 10]
  ------------------
 2042|     10|    case SRE_CATEGORY_NOT_CF:
  ------------------
  |  |  121|     10|#define SRE_CATEGORY_NOT_CF 51
  ------------------
  |  Branch (2042:5): [True: 0, False: 10]
  ------------------
 2043|     10|    case SRE_CATEGORY_Z:
  ------------------
  |  |  122|     10|#define SRE_CATEGORY_Z 52
  ------------------
  |  Branch (2043:5): [True: 0, False: 10]
  ------------------
 2044|     10|    case SRE_CATEGORY_NOT_Z:
  ------------------
  |  |  123|     10|#define SRE_CATEGORY_NOT_Z 53
  ------------------
  |  Branch (2044:5): [True: 0, False: 10]
  ------------------
 2045|     10|    case SRE_CATEGORY_ZS:
  ------------------
  |  |  124|     10|#define SRE_CATEGORY_ZS 54
  ------------------
  |  Branch (2045:5): [True: 0, False: 10]
  ------------------
 2046|     10|    case SRE_CATEGORY_NOT_ZS:
  ------------------
  |  |  125|     10|#define SRE_CATEGORY_NOT_ZS 55
  ------------------
  |  Branch (2046:5): [True: 0, False: 10]
  ------------------
 2047|     10|    case SRE_CATEGORY_C:
  ------------------
  |  |  126|     10|#define SRE_CATEGORY_C 56
  ------------------
  |  Branch (2047:5): [True: 0, False: 10]
  ------------------
 2048|     10|    case SRE_CATEGORY_NOT_C:
  ------------------
  |  |  127|     10|#define SRE_CATEGORY_NOT_C 57
  ------------------
  |  Branch (2048:5): [True: 0, False: 10]
  ------------------
 2049|     10|    case SRE_CATEGORY_CN:
  ------------------
  |  |  128|     10|#define SRE_CATEGORY_CN 58
  ------------------
  |  Branch (2049:5): [True: 0, False: 10]
  ------------------
 2050|     10|    case SRE_CATEGORY_NOT_CN:
  ------------------
  |  |  129|     10|#define SRE_CATEGORY_NOT_CN 59
  ------------------
  |  Branch (2050:5): [True: 0, False: 10]
  ------------------
 2051|     10|    case SRE_CATEGORY_ASSIGNED:
  ------------------
  |  |  130|     10|#define SRE_CATEGORY_ASSIGNED 60
  ------------------
  |  Branch (2051:5): [True: 0, False: 10]
  ------------------
 2052|     10|    case SRE_CATEGORY_NOT_ASSIGNED:
  ------------------
  |  |  131|     10|#define SRE_CATEGORY_NOT_ASSIGNED 61
  ------------------
  |  Branch (2052:5): [True: 0, False: 10]
  ------------------
 2053|     10|    case SRE_CATEGORY_BLANK:
  ------------------
  |  |  132|     10|#define SRE_CATEGORY_BLANK 62
  ------------------
  |  Branch (2053:5): [True: 0, False: 10]
  ------------------
 2054|     10|    case SRE_CATEGORY_NOT_BLANK:
  ------------------
  |  |  133|     10|#define SRE_CATEGORY_NOT_BLANK 63
  ------------------
  |  Branch (2054:5): [True: 0, False: 10]
  ------------------
 2055|     10|    case SRE_CATEGORY_GRAPH:
  ------------------
  |  |  134|     10|#define SRE_CATEGORY_GRAPH 64
  ------------------
  |  Branch (2055:5): [True: 0, False: 10]
  ------------------
 2056|     10|    case SRE_CATEGORY_NOT_GRAPH:
  ------------------
  |  |  135|     10|#define SRE_CATEGORY_NOT_GRAPH 65
  ------------------
  |  Branch (2056:5): [True: 0, False: 10]
  ------------------
 2057|     10|    case SRE_CATEGORY_PRINT:
  ------------------
  |  |  136|     10|#define SRE_CATEGORY_PRINT 66
  ------------------
  |  Branch (2057:5): [True: 0, False: 10]
  ------------------
 2058|     10|    case SRE_CATEGORY_NOT_PRINT:
  ------------------
  |  |  137|     10|#define SRE_CATEGORY_NOT_PRINT 67
  ------------------
  |  Branch (2058:5): [True: 0, False: 10]
  ------------------
 2059|     10|        return 1;
 2060|      0|    default:
  ------------------
  |  Branch (2060:5): [True: 0, False: 10]
  ------------------
 2061|      0|        return 0;
 2062|     10|    }
 2063|     10|}
sre.c:_validate_charset:
 2067|     20|{
 2068|       |    /* Some variables are manipulated by the macros above */
 2069|     20|    SRE_CODE op;
  ------------------
  |  |   18|     20|#define SRE_CODE Py_UCS4
  ------------------
 2070|     20|    SRE_CODE arg;
  ------------------
  |  |   18|     20|#define SRE_CODE Py_UCS4
  ------------------
 2071|     20|    SRE_CODE offset;
  ------------------
  |  |   18|     20|#define SRE_CODE Py_UCS4
  ------------------
 2072|     20|    int i;
 2073|       |
 2074|     54|    while (code < end) {
  ------------------
  |  Branch (2074:12): [True: 34, False: 20]
  ------------------
 2075|     34|        GET_OP;
  ------------------
  |  | 1961|     34|    do {                                                \
  |  | 1962|     34|        VTRACE(("%p: ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     34|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1963|     34|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1963:13): [True: 0, False: 34]
  |  |  ------------------
  |  | 1964|     34|        op = *code++;                                   \
  |  | 1965|     34|        VTRACE(("%lu (op)\n", (unsigned long)op));      \
  |  |  ------------------
  |  |  |  | 1953|     34|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1966|     34|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1966:14): [Folded, False: 34]
  |  |  ------------------
  ------------------
 2076|     34|        switch (op) {
 2077|       |
 2078|      0|        case SRE_OP_NEGATE:
  ------------------
  |  |   36|      0|#define SRE_OP_NEGATE 21
  ------------------
  |  Branch (2078:9): [True: 0, False: 34]
  ------------------
 2079|      0|            break;
 2080|       |
 2081|     23|        case SRE_OP_LITERAL:
  ------------------
  |  |   31|     23|#define SRE_OP_LITERAL 16
  ------------------
  |  Branch (2081:9): [True: 23, False: 11]
  ------------------
 2082|     23|            GET_ARG;
  ------------------
  |  | 1968|     23|    do {                                                \
  |  | 1969|     23|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|     23|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|     23|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 23]
  |  |  ------------------
  |  | 1971|     23|        arg = *code++;                                  \
  |  | 1972|     23|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|     23|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|     23|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 23]
  |  |  ------------------
  ------------------
 2083|     23|            break;
 2084|       |
 2085|     23|        case SRE_OP_RANGE:
  ------------------
  |  |   37|      2|#define SRE_OP_RANGE 22
  ------------------
  |  Branch (2085:9): [True: 2, False: 32]
  ------------------
 2086|      2|        case SRE_OP_RANGE_UNI_IGNORE:
  ------------------
  |  |   57|      2|#define SRE_OP_RANGE_UNI_IGNORE 42
  ------------------
  |  Branch (2086:9): [True: 0, False: 34]
  ------------------
 2087|      2|            GET_ARG;
  ------------------
  |  | 1968|      2|    do {                                                \
  |  | 1969|      2|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      2|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1971|      2|        arg = *code++;                                  \
  |  | 1972|      2|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2088|      2|            GET_ARG;
  ------------------
  |  | 1968|      2|    do {                                                \
  |  | 1969|      2|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      2|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1971|      2|        arg = *code++;                                  \
  |  | 1972|      2|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2089|      2|            break;
 2090|       |
 2091|      5|        case SRE_OP_CHARSET:
  ------------------
  |  |   24|      5|#define SRE_OP_CHARSET 9
  ------------------
  |  Branch (2091:9): [True: 5, False: 29]
  ------------------
 2092|      5|            offset = 256/SRE_CODE_BITS; /* 256-bit bitmap */
  ------------------
  |  |   56|      5|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
 2093|      5|            if (offset > (uintptr_t)(end - code))
  ------------------
  |  Branch (2093:17): [True: 0, False: 5]
  ------------------
 2094|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2095|      5|            code += offset;
 2096|      5|            break;
 2097|       |
 2098|      2|        case SRE_OP_BIGCHARSET:
  ------------------
  |  |   25|      2|#define SRE_OP_BIGCHARSET 10
  ------------------
  |  Branch (2098:9): [True: 2, False: 32]
  ------------------
 2099|      2|            GET_ARG; /* Number of blocks */
  ------------------
  |  | 1968|      2|    do {                                                \
  |  | 1969|      2|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      2|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1971|      2|        arg = *code++;                                  \
  |  | 1972|      2|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2100|      2|            offset = 256/sizeof(SRE_CODE); /* 256-byte table */
 2101|      2|            if (offset > (uintptr_t)(end - code))
  ------------------
  |  Branch (2101:17): [True: 0, False: 2]
  ------------------
 2102|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2103|       |            /* Make sure that each byte points to a valid block */
 2104|    514|            for (i = 0; i < 256; i++) {
  ------------------
  |  Branch (2104:25): [True: 512, False: 2]
  ------------------
 2105|    512|                if (((unsigned char *)code)[i] >= arg)
  ------------------
  |  Branch (2105:21): [True: 0, False: 512]
  ------------------
 2106|      0|                    FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2107|    512|            }
 2108|      2|            code += offset;
 2109|      2|            offset = arg * (256/SRE_CODE_BITS); /* 256-bit bitmap times arg */
  ------------------
  |  |   56|      2|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
 2110|      2|            if (offset > (uintptr_t)(end - code))
  ------------------
  |  Branch (2110:17): [True: 0, False: 2]
  ------------------
 2111|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2112|      2|            code += offset;
 2113|      2|            break;
 2114|       |
 2115|      2|        case SRE_OP_CATEGORY:
  ------------------
  |  |   23|      2|#define SRE_OP_CATEGORY 8
  ------------------
  |  Branch (2115:9): [True: 2, False: 32]
  ------------------
 2116|      2|            GET_ARG;
  ------------------
  |  | 1968|      2|    do {                                                \
  |  | 1969|      2|        VTRACE(("%p= ", code));                         \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1970|      2|        if (code >= end) FAIL;                          \
  |  |  ------------------
  |  |  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1970:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1971|      2|        arg = *code++;                                  \
  |  | 1972|      2|        VTRACE(("%lu (arg)\n", (unsigned long)arg));    \
  |  |  ------------------
  |  |  |  | 1953|      2|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1973|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1973:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2117|      2|            if (!_validate_category(arg)) {
  ------------------
  |  Branch (2117:17): [True: 0, False: 2]
  ------------------
 2118|      0|                FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2119|      0|            }
 2120|      2|            break;
 2121|       |
 2122|      2|        default:
  ------------------
  |  Branch (2122:9): [True: 0, False: 34]
  ------------------
 2123|      0|            FAIL;
  ------------------
  |  | 1957|      0|#define FAIL do { VTRACE(("FAIL: %d\n", __LINE__)); return -1; } while (0)
  |  |  ------------------
  |  |  |  | 1953|      0|#define VTRACE(v) do {} while(0)  /* do nothing */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1953:31): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1957:73): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2124|       |
 2125|     34|        }
 2126|     34|    }
 2127|       |
 2128|     20|    return 0;
 2129|     20|}
sre.c:_sre_unicode_iscased_impl:
  597|     19|{
  598|     19|    unsigned int ch = (unsigned int)character;
  599|     19|    return ch != sre_lower_unicode(ch) || ch != sre_upper_unicode(ch);
  ------------------
  |  Branch (599:12): [True: 4, False: 15]
  |  Branch (599:43): [True: 9, False: 6]
  ------------------
  600|     19|}
sre.c:sre_lower_unicode:
  218|     47|{
  219|     47|    return (unsigned int) Py_UNICODE_TOLOWER(ch);
  ------------------
  |  |  754|     47|#define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch)
  ------------------
  220|     47|}
sre.c:sre_upper_unicode:
  223|     15|{
  224|     15|    return (unsigned int) Py_UNICODE_TOUPPER(ch);
  ------------------
  |  |  755|     15|#define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch)
  ------------------
  225|     15|}
sre.c:_sre_unicode_tolower_impl:
  628|     17|{
  629|     17|    return sre_lower_unicode(character);
  630|     17|}
sre.c:sre_exec:
 3633|      1|{
 3634|      1|    _sremodulestate *state;
 3635|       |
 3636|       |#ifdef Py_DEBUG
 3637|       |    _assert_match_aliases_prefixmatch(pattern_methods);
 3638|       |    _assert_match_aliases_prefixmatch(scanner_methods);
 3639|       |#endif
 3640|       |
 3641|       |    /* Create heap types */
 3642|      1|    state = get_sre_module_state(m);
 3643|      1|    CREATE_TYPE(m, state->Pattern_Type, &pattern_spec);
  ------------------
  |  | 3601|      1|#define CREATE_TYPE(m, type, spec)                                  \
  |  | 3602|      1|do {                                                                \
  |  | 3603|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(m, spec, NULL); \
  |  | 3604|      1|    if (type == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (3604:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 3605|      0|        goto error;                                                 \
  |  | 3606|      0|    }                                                               \
  |  | 3607|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (3607:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3644|      1|    CREATE_TYPE(m, state->Match_Type, &match_spec);
  ------------------
  |  | 3601|      1|#define CREATE_TYPE(m, type, spec)                                  \
  |  | 3602|      1|do {                                                                \
  |  | 3603|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(m, spec, NULL); \
  |  | 3604|      1|    if (type == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (3604:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 3605|      0|        goto error;                                                 \
  |  | 3606|      0|    }                                                               \
  |  | 3607|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (3607:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3645|      1|    CREATE_TYPE(m, state->Scanner_Type, &scanner_spec);
  ------------------
  |  | 3601|      1|#define CREATE_TYPE(m, type, spec)                                  \
  |  | 3602|      1|do {                                                                \
  |  | 3603|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(m, spec, NULL); \
  |  | 3604|      1|    if (type == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (3604:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 3605|      0|        goto error;                                                 \
  |  | 3606|      0|    }                                                               \
  |  | 3607|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (3607:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3646|      1|    CREATE_TYPE(m, state->Template_Type, &template_spec);
  ------------------
  |  | 3601|      1|#define CREATE_TYPE(m, type, spec)                                  \
  |  | 3602|      1|do {                                                                \
  |  | 3603|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(m, spec, NULL); \
  |  | 3604|      1|    if (type == NULL) {                                             \
  |  |  ------------------
  |  |  |  Branch (3604:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 3605|      0|        goto error;                                                 \
  |  | 3606|      0|    }                                                               \
  |  | 3607|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (3607:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3647|       |
 3648|      1|    if (PyModule_AddIntConstant(m, "MAGIC", SRE_MAGIC) < 0) {
  ------------------
  |  |   14|      1|#define SRE_MAGIC 20260622
  ------------------
  |  Branch (3648:9): [True: 0, False: 1]
  ------------------
 3649|      0|        goto error;
 3650|      0|    }
 3651|       |
 3652|      1|    if (PyModule_AddIntConstant(m, "CODESIZE", sizeof(SRE_CODE)) < 0) {
  ------------------
  |  Branch (3652:9): [True: 0, False: 1]
  ------------------
 3653|      0|        goto error;
 3654|      0|    }
 3655|       |
 3656|      1|    ADD_ULONG_CONSTANT(m, "MAXREPEAT", SRE_MAXREPEAT);
  ------------------
  |  | 3610|      1|    do {                                                  \
  |  | 3611|      1|        if (PyModule_Add(module, name, PyLong_FromUnsignedLong(value)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (3611:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3612|      0|            goto error;                                   \
  |  | 3613|      0|        }                                                 \
  |  | 3614|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (3614:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3657|      1|    ADD_ULONG_CONSTANT(m, "MAXGROUPS", SRE_MAXGROUPS);
  ------------------
  |  | 3610|      1|    do {                                                  \
  |  | 3611|      1|        if (PyModule_Add(module, name, PyLong_FromUnsignedLong(value)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (3611:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3612|      0|            goto error;                                   \
  |  | 3613|      0|        }                                                 \
  |  | 3614|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (3614:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3658|       |
 3659|      1|    if (PyModule_AddStringConstant(m, "copyright", copyright) < 0) {
  ------------------
  |  Branch (3659:9): [True: 0, False: 1]
  ------------------
 3660|      0|        goto error;
 3661|      0|    }
 3662|       |
 3663|      1|    return 0;
 3664|       |
 3665|      0|error:
 3666|      0|    return -1;
 3667|      1|}
sre.c:pattern_dealloc:
  890|      2|{
  891|      2|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  892|      2|    PyObject_GC_UnTrack(self);
  893|      2|    FT_CLEAR_WEAKREFS(self, _PatternObject_CAST(self)->weakreflist);
  ------------------
  |  |   47|      2|    do {                                            \
  |  |   48|      2|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|      2|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (893:5): [True: 2, False: 0]
  ------------------
  894|      2|    (void)pattern_clear(self);
  895|      2|    tp->tp_free(self);
  896|      2|    Py_DECREF(tp);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|      2|}
sre.c:_sre_SRE_Pattern_prefixmatch_impl:
  938|      4|{
  939|      4|    _sremodulestate *module_state = get_sre_module_state_by_class(cls);
  ------------------
  |  |  540|      4|    (get_sre_module_state(PyType_GetModule(cls)))
  ------------------
  940|      4|    SRE_STATE state;
  941|      4|    Py_ssize_t status;
  942|      4|    PyObject *match;
  943|       |
  944|      4|    if (!state_init(&state, self, string, pos, endpos))
  ------------------
  |  Branch (944:9): [True: 0, False: 4]
  ------------------
  945|      0|        return NULL;
  946|       |
  947|      4|    INIT_TRACE(&state);
  948|      4|    state.ptr = state.start;
  949|       |
  950|      4|    TRACE(("|%p|%p|MATCH\n", PatternObject_GetCode(self), state.ptr));
  951|       |
  952|      4|    status = sre_match(&state, PatternObject_GetCode(self));
  ------------------
  |  |   47|      4|#define PatternObject_GetCode(o) (((PatternObject*)(o))->code)
  ------------------
  953|       |
  954|      4|    TRACE(("|%p|%p|END\n", PatternObject_GetCode(self), state.ptr));
  955|      4|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (955:9): [True: 0, False: 4]
  ------------------
  956|      0|        state_fini(&state);
  957|      0|        return NULL;
  958|      0|    }
  959|       |
  960|      4|    match = pattern_new_match(module_state, self, &state, status);
  961|      4|    state_fini(&state);
  962|      4|    return match;
  963|      4|}
sre.c:state_init:
  687|      4|{
  688|       |    /* prepare state object */
  689|       |
  690|      4|    Py_ssize_t length;
  691|      4|    int isbytes, charsize;
  692|      4|    const void* ptr;
  693|       |
  694|      4|    memset(state, 0, sizeof(SRE_STATE));
  695|       |
  696|       |    /* Patterns with no capturing groups never emit MARK opcodes and never
  697|       |       read state->mark (group 0's span comes from state->start/ptr), so skip
  698|       |       the allocation entirely -- state->mark stays NULL, which both the err
  699|       |       path and state_fini already free safely. */
  700|      4|    if (pattern->groups) {
  ------------------
  |  Branch (700:9): [True: 3, False: 1]
  ------------------
  701|      3|        state->mark = PyMem_New(const void *, pattern->groups * 2);
  ------------------
  |  |   64|      3|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|      3|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 3]
  |  |  ------------------
  |  |   65|      3|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
  702|      3|        if (!state->mark) {
  ------------------
  |  Branch (702:13): [True: 0, False: 3]
  ------------------
  703|      0|            PyErr_NoMemory();
  704|      0|            goto err;
  705|      0|        }
  706|      3|    }
  707|      4|    state->lastmark = -1;
  708|      4|    state->lastindex = -1;
  709|       |
  710|      4|    state->buffer.buf = NULL;
  711|      4|    ptr = getstring(string, &length, &isbytes, &charsize, &state->buffer);
  712|      4|    if (!ptr)
  ------------------
  |  Branch (712:9): [True: 0, False: 4]
  ------------------
  713|      0|        goto err;
  714|       |
  715|      4|    if (isbytes && pattern->isbytes == 0) {
  ------------------
  |  Branch (715:9): [True: 0, False: 4]
  |  Branch (715:20): [True: 0, False: 0]
  ------------------
  716|      0|        PyErr_SetString(PyExc_TypeError,
  717|      0|                        "cannot use a string pattern on a bytes-like object");
  718|      0|        goto err;
  719|      0|    }
  720|      4|    if (!isbytes && pattern->isbytes > 0) {
  ------------------
  |  Branch (720:9): [True: 4, False: 0]
  |  Branch (720:21): [True: 0, False: 4]
  ------------------
  721|      0|        PyErr_SetString(PyExc_TypeError,
  722|      0|                        "cannot use a bytes pattern on a string-like object");
  723|      0|        goto err;
  724|      0|    }
  725|       |
  726|       |    /* adjust boundaries */
  727|      4|    if (start < 0)
  ------------------
  |  Branch (727:9): [True: 0, False: 4]
  ------------------
  728|      0|        start = 0;
  729|      4|    else if (start > length)
  ------------------
  |  Branch (729:14): [True: 0, False: 4]
  ------------------
  730|      0|        start = length;
  731|       |
  732|      4|    if (end < 0)
  ------------------
  |  Branch (732:9): [True: 0, False: 4]
  ------------------
  733|      0|        end = 0;
  734|      4|    else if (end > length)
  ------------------
  |  Branch (734:14): [True: 4, False: 0]
  ------------------
  735|      4|        end = length;
  736|       |
  737|      4|    state->isbytes = isbytes;
  738|      4|    state->charsize = charsize;
  739|      4|    state->match_all = 0;
  740|      4|    state->must_advance = 0;
  741|      4|    state->save_marks = 0;
  742|      4|    state->debug = ((pattern->flags & SRE_FLAG_DEBUG) != 0);
  ------------------
  |  |  144|      4|#define SRE_FLAG_DEBUG 128
  ------------------
  743|       |
  744|      4|    state->beginning = ptr;
  745|       |
  746|      4|    state->start = (void*) ((char*) ptr + start * state->charsize);
  747|      4|    state->end = (void*) ((char*) ptr + end * state->charsize);
  748|       |
  749|      4|    state->string = Py_NewRef(string);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|      4|    state->pos = start;
  751|      4|    state->endpos = end;
  752|       |
  753|       |#ifdef Py_DEBUG
  754|       |    state->fail_after_count = pattern->fail_after_count;
  755|       |    state->fail_after_exc = pattern->fail_after_exc; // borrowed ref
  756|       |#endif
  757|       |
  758|      4|    return string;
  759|      0|  err:
  760|       |    /* We add an explicit cast here because MSVC has a bug when
  761|       |       compiling C code where it believes that `const void**` cannot be
  762|       |       safely casted to `void*`, see bpo-39943 for details. */
  763|      0|    PyMem_Free((void*) state->mark);
  764|      0|    state->mark = NULL;
  765|      0|    if (state->buffer.buf)
  ------------------
  |  Branch (765:9): [True: 0, False: 0]
  ------------------
  766|      0|        PyBuffer_Release(&state->buffer);
  767|       |    return NULL;
  768|      4|}
sre.c:sre_match:
  901|      4|{
  902|      4|    if (state->charsize == 1)
  ------------------
  |  Branch (902:9): [True: 4, False: 0]
  ------------------
  903|      4|        return sre_ucs1_match(state, pattern, 1);
  904|      0|    if (state->charsize == 2)
  ------------------
  |  Branch (904:9): [True: 0, False: 0]
  ------------------
  905|      0|        return sre_ucs2_match(state, pattern, 1);
  906|      0|    assert(state->charsize == 4);
  ------------------
  |  Branch (906:5): [True: 0, False: 0]
  ------------------
  907|      0|    return sre_ucs4_match(state, pattern, 1);
  908|      0|}
sre.c:data_stack_grow:
  398|      4|{
  399|      4|    INIT_TRACE(state);
  400|      4|    Py_ssize_t minsize, cursize;
  401|      4|    minsize = state->data_stack_base+size;
  402|      4|    cursize = state->data_stack_size;
  403|      4|    if (cursize < minsize) {
  ------------------
  |  Branch (403:9): [True: 4, False: 0]
  ------------------
  404|      4|        void* stack;
  405|      4|        cursize = minsize+minsize/4+1024;
  406|      4|        TRACE(("allocate/grow stack %zd\n", cursize));
  407|      4|        stack = PyMem_Realloc(state->data_stack, cursize);
  408|      4|        if (!stack) {
  ------------------
  |  Branch (408:13): [True: 0, False: 4]
  ------------------
  409|      0|            data_stack_dealloc(state);
  410|      0|            return SRE_ERROR_MEMORY;
  ------------------
  |  |  111|      0|#define SRE_ERROR_MEMORY -9 /* out of memory */
  ------------------
  411|      0|        }
  412|      4|        state->data_stack = (char *)stack;
  413|      4|        state->data_stack_size = cursize;
  414|      4|    }
  415|      4|    return 0;
  416|      4|}
sre.c:data_stack_dealloc:
  388|      4|{
  389|      4|    if (state->data_stack) {
  ------------------
  |  Branch (389:9): [True: 4, False: 0]
  ------------------
  390|      4|        PyMem_Free(state->data_stack);
  391|       |        state->data_stack = NULL;
  392|      4|    }
  393|      4|    state->data_stack_size = state->data_stack_base = 0;
  394|      4|}
sre.c:sre_category:
  229|      3|{
  230|      3|    switch (category) {
  ------------------
  |  Branch (230:13): [True: 3, False: 0]
  ------------------
  231|       |
  232|      0|    case SRE_CATEGORY_DIGIT:
  ------------------
  |  |   70|      0|#define SRE_CATEGORY_DIGIT 0
  ------------------
  |  Branch (232:5): [True: 0, False: 3]
  ------------------
  233|      0|        return SRE_IS_DIGIT(ch);
  ------------------
  |  |  138|      0|    ((ch) <= '9' && Py_ISDIGIT(ch))
  |  |  ------------------
  |  |  |  |   24|      0|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (138:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  234|      0|    case SRE_CATEGORY_NOT_DIGIT:
  ------------------
  |  |   71|      0|#define SRE_CATEGORY_NOT_DIGIT 1
  ------------------
  |  Branch (234:5): [True: 0, False: 3]
  ------------------
  235|      0|        return !SRE_IS_DIGIT(ch);
  ------------------
  |  |  138|      0|    ((ch) <= '9' && Py_ISDIGIT(ch))
  |  |  ------------------
  |  |  |  |   24|      0|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (24:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (138:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  236|      0|    case SRE_CATEGORY_SPACE:
  ------------------
  |  |   72|      0|#define SRE_CATEGORY_SPACE 2
  ------------------
  |  Branch (236:5): [True: 0, False: 3]
  ------------------
  237|      0|        return SRE_IS_SPACE(ch);
  ------------------
  |  |  140|      0|    ((ch) <= ' ' && Py_ISSPACE(ch))
  |  |  ------------------
  |  |  |  |   27|      0|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   13|      0|#define PY_CTF_SPACE  0x08
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (140:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  238|      0|    case SRE_CATEGORY_NOT_SPACE:
  ------------------
  |  |   73|      0|#define SRE_CATEGORY_NOT_SPACE 3
  ------------------
  |  Branch (238:5): [True: 0, False: 3]
  ------------------
  239|      0|        return !SRE_IS_SPACE(ch);
  ------------------
  |  |  140|      0|    ((ch) <= ' ' && Py_ISSPACE(ch))
  |  |  ------------------
  |  |  |  |   27|      0|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   13|      0|#define PY_CTF_SPACE  0x08
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (27:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (140:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  240|      0|    case SRE_CATEGORY_WORD:
  ------------------
  |  |   74|      0|#define SRE_CATEGORY_WORD 4
  ------------------
  |  Branch (240:5): [True: 0, False: 3]
  ------------------
  241|      0|        return SRE_IS_WORD(ch);
  ------------------
  |  |  144|      0|    ((ch) <= 'z' && (Py_ISALNUM(ch) || (ch) == '_'))
  |  |  ------------------
  |  |  |  |   26|      0|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (26:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (144:6): [True: 0, False: 0]
  |  |  |  Branch (144:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  242|      0|    case SRE_CATEGORY_NOT_WORD:
  ------------------
  |  |   75|      0|#define SRE_CATEGORY_NOT_WORD 5
  ------------------
  |  Branch (242:5): [True: 0, False: 3]
  ------------------
  243|      0|        return !SRE_IS_WORD(ch);
  ------------------
  |  |  144|      0|    ((ch) <= 'z' && (Py_ISALNUM(ch) || (ch) == '_'))
  |  |  ------------------
  |  |  |  |   26|      0|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (26:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (144:6): [True: 0, False: 0]
  |  |  |  Branch (144:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  244|      0|    case SRE_CATEGORY_LINEBREAK:
  ------------------
  |  |   76|      0|#define SRE_CATEGORY_LINEBREAK 6
  ------------------
  |  Branch (244:5): [True: 0, False: 3]
  ------------------
  245|      0|        return SRE_IS_LINEBREAK(ch);
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  ------------------
  246|      0|    case SRE_CATEGORY_NOT_LINEBREAK:
  ------------------
  |  |   77|      0|#define SRE_CATEGORY_NOT_LINEBREAK 7
  ------------------
  |  Branch (246:5): [True: 0, False: 3]
  ------------------
  247|      0|        return !SRE_IS_LINEBREAK(ch);
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  ------------------
  248|       |
  249|      0|    case SRE_CATEGORY_LOC_WORD:
  ------------------
  |  |   78|      0|#define SRE_CATEGORY_LOC_WORD 8
  ------------------
  |  Branch (249:5): [True: 0, False: 3]
  ------------------
  250|      0|        return SRE_LOC_IS_WORD(ch);
  ------------------
  |  |  155|      0|#define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  154|      0|#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (154:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (154:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (155:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  251|      0|    case SRE_CATEGORY_LOC_NOT_WORD:
  ------------------
  |  |   79|      0|#define SRE_CATEGORY_LOC_NOT_WORD 9
  ------------------
  |  Branch (251:5): [True: 0, False: 3]
  ------------------
  252|      0|        return !SRE_LOC_IS_WORD(ch);
  ------------------
  |  |  155|      0|#define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  154|      0|#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (154:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (154:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (155:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  253|       |
  254|      3|    case SRE_CATEGORY_UNI_DIGIT:
  ------------------
  |  |   80|      3|#define SRE_CATEGORY_UNI_DIGIT 10
  ------------------
  |  Branch (254:5): [True: 3, False: 0]
  ------------------
  255|      3|        return SRE_UNI_IS_DIGIT(ch);
  ------------------
  |  |  169|      3|#define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL(ch)
  |  |  ------------------
  |  |  |  |  758|      3|#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
  |  |  ------------------
  ------------------
  256|      0|    case SRE_CATEGORY_UNI_NOT_DIGIT:
  ------------------
  |  |   81|      0|#define SRE_CATEGORY_UNI_NOT_DIGIT 11
  ------------------
  |  Branch (256:5): [True: 0, False: 3]
  ------------------
  257|      0|        return !SRE_UNI_IS_DIGIT(ch);
  ------------------
  |  |  169|      0|#define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL(ch)
  |  |  ------------------
  |  |  |  |  758|      0|#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
  |  |  ------------------
  ------------------
  258|      0|    case SRE_CATEGORY_UNI_SPACE:
  ------------------
  |  |   82|      0|#define SRE_CATEGORY_UNI_SPACE 12
  ------------------
  |  Branch (258:5): [True: 0, False: 3]
  ------------------
  259|      0|        return SRE_UNI_IS_SPACE(ch);
  ------------------
  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  ------------------
  260|      0|    case SRE_CATEGORY_UNI_NOT_SPACE:
  ------------------
  |  |   83|      0|#define SRE_CATEGORY_UNI_NOT_SPACE 13
  ------------------
  |  Branch (260:5): [True: 0, False: 3]
  ------------------
  261|      0|        return !SRE_UNI_IS_SPACE(ch);
  ------------------
  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  ------------------
  262|      0|    case SRE_CATEGORY_UNI_WORD:
  ------------------
  |  |   84|      0|#define SRE_CATEGORY_UNI_WORD 14
  ------------------
  |  Branch (262:5): [True: 0, False: 3]
  ------------------
  263|      0|        return SRE_UNI_IS_WORD(ch);
  ------------------
  |  |  173|      0|#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (173:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  264|      0|    case SRE_CATEGORY_UNI_NOT_WORD:
  ------------------
  |  |   85|      0|#define SRE_CATEGORY_UNI_NOT_WORD 15
  ------------------
  |  Branch (264:5): [True: 0, False: 3]
  ------------------
  265|      0|        return !SRE_UNI_IS_WORD(ch);
  ------------------
  |  |  173|      0|#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (173:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  266|      0|    case SRE_CATEGORY_UNI_LINEBREAK:
  ------------------
  |  |   86|      0|#define SRE_CATEGORY_UNI_LINEBREAK 16
  ------------------
  |  Branch (266:5): [True: 0, False: 3]
  ------------------
  267|      0|        return SRE_UNI_IS_LINEBREAK(ch);
  ------------------
  |  |  171|      0|#define SRE_UNI_IS_LINEBREAK(ch) Py_UNICODE_ISLINEBREAK(ch)
  |  |  ------------------
  |  |  |  |  752|      0|#define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch)
  |  |  ------------------
  ------------------
  268|      0|    case SRE_CATEGORY_UNI_NOT_LINEBREAK:
  ------------------
  |  |   87|      0|#define SRE_CATEGORY_UNI_NOT_LINEBREAK 17
  ------------------
  |  Branch (268:5): [True: 0, False: 3]
  ------------------
  269|      0|        return !SRE_UNI_IS_LINEBREAK(ch);
  ------------------
  |  |  171|      0|#define SRE_UNI_IS_LINEBREAK(ch) Py_UNICODE_ISLINEBREAK(ch)
  |  |  ------------------
  |  |  |  |  752|      0|#define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch)
  |  |  ------------------
  ------------------
  270|       |
  271|      0|    case SRE_CATEGORY_ALPHA:
  ------------------
  |  |   88|      0|#define SRE_CATEGORY_ALPHA 18
  ------------------
  |  Branch (271:5): [True: 0, False: 3]
  ------------------
  272|      0|        return SRE_UNI_IS_ALPHA(ch);
  ------------------
  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  ------------------
  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  ------------------
  ------------------
  273|      0|    case SRE_CATEGORY_NOT_ALPHA:
  ------------------
  |  |   89|      0|#define SRE_CATEGORY_NOT_ALPHA 19
  ------------------
  |  Branch (273:5): [True: 0, False: 3]
  ------------------
  274|      0|        return !SRE_UNI_IS_ALPHA(ch);
  ------------------
  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  ------------------
  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  ------------------
  ------------------
  275|      0|    case SRE_CATEGORY_LOWER:
  ------------------
  |  |   90|      0|#define SRE_CATEGORY_LOWER 20
  ------------------
  |  Branch (275:5): [True: 0, False: 3]
  ------------------
  276|      0|        return SRE_UNI_IS_LOWER(ch);
  ------------------
  |  |  175|      0|#define SRE_UNI_IS_LOWER(ch) Py_UNICODE_ISLOWER(ch)
  |  |  ------------------
  |  |  |  |  749|      0|#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch)
  |  |  ------------------
  ------------------
  277|      0|    case SRE_CATEGORY_NOT_LOWER:
  ------------------
  |  |   91|      0|#define SRE_CATEGORY_NOT_LOWER 21
  ------------------
  |  Branch (277:5): [True: 0, False: 3]
  ------------------
  278|      0|        return !SRE_UNI_IS_LOWER(ch);
  ------------------
  |  |  175|      0|#define SRE_UNI_IS_LOWER(ch) Py_UNICODE_ISLOWER(ch)
  |  |  ------------------
  |  |  |  |  749|      0|#define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch)
  |  |  ------------------
  ------------------
  279|      0|    case SRE_CATEGORY_UPPER:
  ------------------
  |  |   92|      0|#define SRE_CATEGORY_UPPER 22
  ------------------
  |  Branch (279:5): [True: 0, False: 3]
  ------------------
  280|      0|        return SRE_UNI_IS_UPPER(ch);
  ------------------
  |  |  176|      0|#define SRE_UNI_IS_UPPER(ch) Py_UNICODE_ISUPPER(ch)
  |  |  ------------------
  |  |  |  |  750|      0|#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
  |  |  ------------------
  ------------------
  281|      0|    case SRE_CATEGORY_NOT_UPPER:
  ------------------
  |  |   93|      0|#define SRE_CATEGORY_NOT_UPPER 23
  ------------------
  |  Branch (281:5): [True: 0, False: 3]
  ------------------
  282|      0|        return !SRE_UNI_IS_UPPER(ch);
  ------------------
  |  |  176|      0|#define SRE_UNI_IS_UPPER(ch) Py_UNICODE_ISUPPER(ch)
  |  |  ------------------
  |  |  |  |  750|      0|#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
  |  |  ------------------
  ------------------
  283|      0|    case SRE_CATEGORY_NUMERIC:
  ------------------
  |  |   94|      0|#define SRE_CATEGORY_NUMERIC 24
  ------------------
  |  Branch (283:5): [True: 0, False: 3]
  ------------------
  284|      0|        return SRE_UNI_IS_NUMERIC(ch);
  ------------------
  |  |  177|      0|#define SRE_UNI_IS_NUMERIC(ch) Py_UNICODE_ISNUMERIC(ch)
  |  |  ------------------
  |  |  |  |  760|      0|#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
  |  |  ------------------
  ------------------
  285|      0|    case SRE_CATEGORY_NOT_NUMERIC:
  ------------------
  |  |   95|      0|#define SRE_CATEGORY_NOT_NUMERIC 25
  ------------------
  |  Branch (285:5): [True: 0, False: 3]
  ------------------
  286|      0|        return !SRE_UNI_IS_NUMERIC(ch);
  ------------------
  |  |  177|      0|#define SRE_UNI_IS_NUMERIC(ch) Py_UNICODE_ISNUMERIC(ch)
  |  |  ------------------
  |  |  |  |  760|      0|#define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch)
  |  |  ------------------
  ------------------
  287|      0|    case SRE_CATEGORY_PRINTABLE:
  ------------------
  |  |   96|      0|#define SRE_CATEGORY_PRINTABLE 26
  ------------------
  |  Branch (287:5): [True: 0, False: 3]
  ------------------
  288|      0|        return SRE_UNI_IS_PRINTABLE(ch);
  ------------------
  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  ------------------
  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  ------------------
  ------------------
  289|      0|    case SRE_CATEGORY_NOT_PRINTABLE:
  ------------------
  |  |   97|      0|#define SRE_CATEGORY_NOT_PRINTABLE 27
  ------------------
  |  Branch (289:5): [True: 0, False: 3]
  ------------------
  290|      0|        return !SRE_UNI_IS_PRINTABLE(ch);
  ------------------
  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  ------------------
  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  ------------------
  ------------------
  291|      0|    case SRE_CATEGORY_ALNUM:
  ------------------
  |  |   98|      0|#define SRE_CATEGORY_ALNUM 28
  ------------------
  |  Branch (291:5): [True: 0, False: 3]
  ------------------
  292|      0|        return SRE_UNI_IS_ALNUM(ch);
  ------------------
  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  ------------------
  293|      0|    case SRE_CATEGORY_NOT_ALNUM:
  ------------------
  |  |   99|      0|#define SRE_CATEGORY_NOT_ALNUM 29
  ------------------
  |  Branch (293:5): [True: 0, False: 3]
  ------------------
  294|      0|        return !SRE_UNI_IS_ALNUM(ch);
  ------------------
  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  ------------------
  295|      0|    case SRE_CATEGORY_XID_START:
  ------------------
  |  |  100|      0|#define SRE_CATEGORY_XID_START 30
  ------------------
  |  Branch (295:5): [True: 0, False: 3]
  ------------------
  296|      0|        return SRE_UNI_IS_XID_START(ch);
  ------------------
  |  |  179|      0|#define SRE_UNI_IS_XID_START(ch) _PyUnicode_IsXidStart(ch)
  ------------------
  297|      0|    case SRE_CATEGORY_NOT_XID_START:
  ------------------
  |  |  101|      0|#define SRE_CATEGORY_NOT_XID_START 31
  ------------------
  |  Branch (297:5): [True: 0, False: 3]
  ------------------
  298|      0|        return !SRE_UNI_IS_XID_START(ch);
  ------------------
  |  |  179|      0|#define SRE_UNI_IS_XID_START(ch) _PyUnicode_IsXidStart(ch)
  ------------------
  299|      0|    case SRE_CATEGORY_XID_CONTINUE:
  ------------------
  |  |  102|      0|#define SRE_CATEGORY_XID_CONTINUE 32
  ------------------
  |  Branch (299:5): [True: 0, False: 3]
  ------------------
  300|      0|        return SRE_UNI_IS_XID_CONTINUE(ch);
  ------------------
  |  |  180|      0|#define SRE_UNI_IS_XID_CONTINUE(ch) _PyUnicode_IsXidContinue(ch)
  ------------------
  301|      0|    case SRE_CATEGORY_NOT_XID_CONTINUE:
  ------------------
  |  |  103|      0|#define SRE_CATEGORY_NOT_XID_CONTINUE 33
  ------------------
  |  Branch (301:5): [True: 0, False: 3]
  ------------------
  302|      0|        return !SRE_UNI_IS_XID_CONTINUE(ch);
  ------------------
  |  |  180|      0|#define SRE_UNI_IS_XID_CONTINUE(ch) _PyUnicode_IsXidContinue(ch)
  ------------------
  303|      0|    case SRE_CATEGORY_TITLE:
  ------------------
  |  |  104|      0|#define SRE_CATEGORY_TITLE 34
  ------------------
  |  Branch (303:5): [True: 0, False: 3]
  ------------------
  304|      0|        return SRE_UNI_IS_TITLE(ch);
  ------------------
  |  |  181|      0|#define SRE_UNI_IS_TITLE(ch) Py_UNICODE_ISTITLE(ch)
  |  |  ------------------
  |  |  |  |  751|      0|#define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch)
  |  |  ------------------
  ------------------
  305|      0|    case SRE_CATEGORY_NOT_TITLE:
  ------------------
  |  |  105|      0|#define SRE_CATEGORY_NOT_TITLE 35
  ------------------
  |  Branch (305:5): [True: 0, False: 3]
  ------------------
  306|      0|        return !SRE_UNI_IS_TITLE(ch);
  ------------------
  |  |  181|      0|#define SRE_UNI_IS_TITLE(ch) Py_UNICODE_ISTITLE(ch)
  |  |  ------------------
  |  |  |  |  751|      0|#define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch)
  |  |  ------------------
  ------------------
  307|      0|    case SRE_CATEGORY_CASED:
  ------------------
  |  |  106|      0|#define SRE_CATEGORY_CASED 36
  ------------------
  |  Branch (307:5): [True: 0, False: 3]
  ------------------
  308|      0|        return SRE_UNI_IS_CASED(ch);
  ------------------
  |  |  182|      0|#define SRE_UNI_IS_CASED(ch) _PyUnicode_IsCased(ch)
  ------------------
  309|      0|    case SRE_CATEGORY_NOT_CASED:
  ------------------
  |  |  107|      0|#define SRE_CATEGORY_NOT_CASED 37
  ------------------
  |  Branch (309:5): [True: 0, False: 3]
  ------------------
  310|      0|        return !SRE_UNI_IS_CASED(ch);
  ------------------
  |  |  182|      0|#define SRE_UNI_IS_CASED(ch) _PyUnicode_IsCased(ch)
  ------------------
  311|      0|    case SRE_CATEGORY_CASE_IGNORABLE:
  ------------------
  |  |  108|      0|#define SRE_CATEGORY_CASE_IGNORABLE 38
  ------------------
  |  Branch (311:5): [True: 0, False: 3]
  ------------------
  312|      0|        return SRE_UNI_IS_CASE_IGNORABLE(ch);
  ------------------
  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  ------------------
  313|      0|    case SRE_CATEGORY_NOT_CASE_IGNORABLE:
  ------------------
  |  |  109|      0|#define SRE_CATEGORY_NOT_CASE_IGNORABLE 39
  ------------------
  |  Branch (313:5): [True: 0, False: 3]
  ------------------
  314|      0|        return !SRE_UNI_IS_CASE_IGNORABLE(ch);
  ------------------
  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  ------------------
  315|      0|    case SRE_CATEGORY_LU:
  ------------------
  |  |  110|      0|#define SRE_CATEGORY_LU 40
  ------------------
  |  Branch (315:5): [True: 0, False: 3]
  ------------------
  316|      0|        return SRE_UNI_IS_LU(ch);
  ------------------
  |  |  195|      0|#define SRE_UNI_IS_LU(ch) (SRE_UNI_IS_UPPER(ch) && SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  176|      0|#define SRE_UNI_IS_UPPER(ch) Py_UNICODE_ISUPPER(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  750|      0|#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (750:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_LU(ch) (SRE_UNI_IS_UPPER(ch) && SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (767:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|      0|    case SRE_CATEGORY_NOT_LU:
  ------------------
  |  |  111|      0|#define SRE_CATEGORY_NOT_LU 41
  ------------------
  |  Branch (317:5): [True: 0, False: 3]
  ------------------
  318|      0|        return !SRE_UNI_IS_LU(ch);
  ------------------
  |  |  195|      0|#define SRE_UNI_IS_LU(ch) (SRE_UNI_IS_UPPER(ch) && SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  176|      0|#define SRE_UNI_IS_UPPER(ch) Py_UNICODE_ISUPPER(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  750|      0|#define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (750:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_LU(ch) (SRE_UNI_IS_UPPER(ch) && SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (767:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|      0|    case SRE_CATEGORY_N:
  ------------------
  |  |  112|      0|#define SRE_CATEGORY_N 42
  ------------------
  |  Branch (319:5): [True: 0, False: 3]
  ------------------
  320|      0|        return SRE_UNI_IS_N(ch);
  ------------------
  |  |  196|      0|#define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (196:51): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  321|      0|    case SRE_CATEGORY_NOT_N:
  ------------------
  |  |  113|      0|#define SRE_CATEGORY_NOT_N 43
  ------------------
  |  Branch (321:5): [True: 0, False: 3]
  ------------------
  322|      0|        return !SRE_UNI_IS_N(ch);
  ------------------
  |  |  196|      0|#define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  ------------------
  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (196:51): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  323|      0|    case SRE_CATEGORY_LM:
  ------------------
  |  |  114|      0|#define SRE_CATEGORY_LM 44
  ------------------
  |  Branch (323:5): [True: 0, False: 3]
  ------------------
  324|      0|        return SRE_UNI_IS_LM(ch);
  ------------------
  |  |  197|      0|#define SRE_UNI_IS_LM(ch) (SRE_UNI_IS_ALPHA(ch) && SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (767:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_LM(ch) (SRE_UNI_IS_ALPHA(ch) && SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (183:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|      0|    case SRE_CATEGORY_NOT_LM:
  ------------------
  |  |  115|      0|#define SRE_CATEGORY_NOT_LM 45
  ------------------
  |  Branch (325:5): [True: 0, False: 3]
  ------------------
  326|      0|        return !SRE_UNI_IS_LM(ch);
  ------------------
  |  |  197|      0|#define SRE_UNI_IS_LM(ch) (SRE_UNI_IS_ALPHA(ch) && SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (767:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_LM(ch) (SRE_UNI_IS_ALPHA(ch) && SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (183:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|      0|    case SRE_CATEGORY_NL:
  ------------------
  |  |  116|      0|#define SRE_CATEGORY_NL 46
  ------------------
  |  Branch (327:5): [True: 0, False: 3]
  ------------------
  328|      0|        return SRE_UNI_IS_NL(ch);
  ------------------
  |  |  198|      0|#define SRE_UNI_IS_NL(ch) (SRE_UNI_IS_N(ch) && SRE_UNI_IS_XID_START(ch))
  |  |  ------------------
  |  |  |  |  196|      0|#define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (196:51): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_NL(ch) (SRE_UNI_IS_N(ch) && SRE_UNI_IS_XID_START(ch))
  |  |  ------------------
  |  |  |  |  179|      0|#define SRE_UNI_IS_XID_START(ch) _PyUnicode_IsXidStart(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|      0|    case SRE_CATEGORY_NOT_NL:
  ------------------
  |  |  117|      0|#define SRE_CATEGORY_NOT_NL 47
  ------------------
  |  Branch (329:5): [True: 0, False: 3]
  ------------------
  330|      0|        return !SRE_UNI_IS_NL(ch);
  ------------------
  |  |  198|      0|#define SRE_UNI_IS_NL(ch) (SRE_UNI_IS_N(ch) && SRE_UNI_IS_XID_START(ch))
  |  |  ------------------
  |  |  |  |  196|      0|#define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (196:51): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_NL(ch) (SRE_UNI_IS_N(ch) && SRE_UNI_IS_XID_START(ch))
  |  |  ------------------
  |  |  |  |  179|      0|#define SRE_UNI_IS_XID_START(ch) _PyUnicode_IsXidStart(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (179:34): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|      0|    case SRE_CATEGORY_NO:
  ------------------
  |  |  118|      0|#define SRE_CATEGORY_NO 48
  ------------------
  |  Branch (331:5): [True: 0, False: 3]
  ------------------
  332|      0|        return SRE_UNI_IS_NO(ch);
  ------------------
  |  |  199|      0|#define SRE_UNI_IS_NO(ch) (SRE_UNI_IS_N(ch) && !SRE_UNI_IS_DIGIT(ch) && \
  |  |  ------------------
  |  |  |  |  196|      0|#define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (196:51): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_NO(ch) (SRE_UNI_IS_N(ch) && !SRE_UNI_IS_DIGIT(ch) && \
  |  |  ------------------
  |  |  |  |  169|      0|#define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  758|      0|#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (199:48): [True: 0, False: 0]
  |  |  ------------------
  |  |  200|      0|                           !SRE_UNI_IS_XID_START(ch))
  |  |  ------------------
  |  |  |  |  179|      0|#define SRE_UNI_IS_XID_START(ch) _PyUnicode_IsXidStart(ch)
  |  |  ------------------
  |  |  |  Branch (200:28): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  333|      0|    case SRE_CATEGORY_NOT_NO:
  ------------------
  |  |  119|      0|#define SRE_CATEGORY_NOT_NO 49
  ------------------
  |  Branch (333:5): [True: 0, False: 3]
  ------------------
  334|      0|        return !SRE_UNI_IS_NO(ch);
  ------------------
  |  |  199|      0|#define SRE_UNI_IS_NO(ch) (SRE_UNI_IS_N(ch) && !SRE_UNI_IS_DIGIT(ch) && \
  |  |  ------------------
  |  |  |  |  196|      0|#define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_N(ch) (SRE_UNI_IS_ALNUM(ch) && !SRE_UNI_IS_ALPHA(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      0|#define SRE_UNI_IS_ALPHA(ch) Py_UNICODE_ISALPHA(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  767|      0|#define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (196:51): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_NO(ch) (SRE_UNI_IS_N(ch) && !SRE_UNI_IS_DIGIT(ch) && \
  |  |  ------------------
  |  |  |  |  169|      0|#define SRE_UNI_IS_DIGIT(ch) Py_UNICODE_ISDECIMAL(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  758|      0|#define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (199:48): [True: 0, False: 0]
  |  |  ------------------
  |  |  200|      0|                           !SRE_UNI_IS_XID_START(ch))
  |  |  ------------------
  |  |  |  |  179|      0|#define SRE_UNI_IS_XID_START(ch) _PyUnicode_IsXidStart(ch)
  |  |  ------------------
  |  |  |  Branch (200:28): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  335|      0|    case SRE_CATEGORY_CF:
  ------------------
  |  |  120|      0|#define SRE_CATEGORY_CF 50
  ------------------
  |  Branch (335:5): [True: 0, False: 3]
  ------------------
  336|      0|        return SRE_UNI_IS_CF(ch);
  ------------------
  |  |  201|      0|#define SRE_UNI_IS_CF(ch) (SRE_UNI_IS_CASE_IGNORABLE(ch) && !SRE_UNI_IS_PRINTABLE(ch))
  |  |  ------------------
  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (183:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_CF(ch) (SRE_UNI_IS_CASE_IGNORABLE(ch) && !SRE_UNI_IS_PRINTABLE(ch))
  |  |  ------------------
  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (201:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  337|      0|    case SRE_CATEGORY_NOT_CF:
  ------------------
  |  |  121|      0|#define SRE_CATEGORY_NOT_CF 51
  ------------------
  |  Branch (337:5): [True: 0, False: 3]
  ------------------
  338|      0|        return !SRE_UNI_IS_CF(ch);
  ------------------
  |  |  201|      0|#define SRE_UNI_IS_CF(ch) (SRE_UNI_IS_CASE_IGNORABLE(ch) && !SRE_UNI_IS_PRINTABLE(ch))
  |  |  ------------------
  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (183:39): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_CF(ch) (SRE_UNI_IS_CASE_IGNORABLE(ch) && !SRE_UNI_IS_PRINTABLE(ch))
  |  |  ------------------
  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (201:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  339|      0|    case SRE_CATEGORY_Z:
  ------------------
  |  |  122|      0|#define SRE_CATEGORY_Z 52
  ------------------
  |  Branch (339:5): [True: 0, False: 3]
  ------------------
  340|      0|        return SRE_UNI_IS_Z(ch);
  ------------------
  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  ------------------
  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|      0|    case SRE_CATEGORY_NOT_Z:
  ------------------
  |  |  123|      0|#define SRE_CATEGORY_NOT_Z 53
  ------------------
  |  Branch (341:5): [True: 0, False: 3]
  ------------------
  342|      0|        return !SRE_UNI_IS_Z(ch);
  ------------------
  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  ------------------
  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|      0|    case SRE_CATEGORY_ZS:
  ------------------
  |  |  124|      0|#define SRE_CATEGORY_ZS 54
  ------------------
  |  Branch (343:5): [True: 0, False: 3]
  ------------------
  344|      0|        return SRE_UNI_IS_ZS(ch);
  ------------------
  |  |  203|      0|#define SRE_UNI_IS_ZS(ch) (SRE_UNI_IS_Z(ch) && (ch) != 0x2028 && (ch) != 0x2029)
  |  |  ------------------
  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (203:48): [True: 0, False: 0]
  |  |  |  Branch (203:66): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  345|      0|    case SRE_CATEGORY_NOT_ZS:
  ------------------
  |  |  125|      0|#define SRE_CATEGORY_NOT_ZS 55
  ------------------
  |  Branch (345:5): [True: 0, False: 3]
  ------------------
  346|      0|        return !SRE_UNI_IS_ZS(ch);
  ------------------
  |  |  203|      0|#define SRE_UNI_IS_ZS(ch) (SRE_UNI_IS_Z(ch) && (ch) != 0x2028 && (ch) != 0x2029)
  |  |  ------------------
  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (203:48): [True: 0, False: 0]
  |  |  |  Branch (203:66): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  347|      0|    case SRE_CATEGORY_C:
  ------------------
  |  |  126|      0|#define SRE_CATEGORY_C 56
  ------------------
  |  Branch (347:5): [True: 0, False: 3]
  ------------------
  348|      0|        return SRE_UNI_IS_C(ch);
  ------------------
  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  ------------------
  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  ------------------
  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  349|      0|    case SRE_CATEGORY_NOT_C:
  ------------------
  |  |  127|      0|#define SRE_CATEGORY_NOT_C 57
  ------------------
  |  Branch (349:5): [True: 0, False: 3]
  ------------------
  350|      0|        return !SRE_UNI_IS_C(ch);
  ------------------
  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  ------------------
  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  ------------------
  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  351|      0|    case SRE_CATEGORY_CN:
  ------------------
  |  |  128|      0|#define SRE_CATEGORY_CN 58
  ------------------
  |  Branch (351:5): [True: 0, False: 3]
  ------------------
  352|      0|        return SRE_UNI_IS_CN(ch);
  ------------------
  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  ------------------
  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  353|      0|    case SRE_CATEGORY_NOT_CN:
  ------------------
  |  |  129|      0|#define SRE_CATEGORY_NOT_CN 59
  ------------------
  |  Branch (353:5): [True: 0, False: 3]
  ------------------
  354|      0|        return !SRE_UNI_IS_CN(ch);
  ------------------
  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  ------------------
  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  ------------------
  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  355|      0|    case SRE_CATEGORY_ASSIGNED:
  ------------------
  |  |  130|      0|#define SRE_CATEGORY_ASSIGNED 60
  ------------------
  |  Branch (355:5): [True: 0, False: 3]
  ------------------
  356|      0|        return SRE_UNI_IS_ASSIGNED(ch);
  ------------------
  |  |  210|      0|#define SRE_UNI_IS_ASSIGNED(ch) (!SRE_UNI_IS_CN(ch))
  |  |  ------------------
  |  |  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      0|    case SRE_CATEGORY_NOT_ASSIGNED:
  ------------------
  |  |  131|      0|#define SRE_CATEGORY_NOT_ASSIGNED 61
  ------------------
  |  Branch (357:5): [True: 0, False: 3]
  ------------------
  358|      0|        return !SRE_UNI_IS_ASSIGNED(ch);
  ------------------
  |  |  210|      0|#define SRE_UNI_IS_ASSIGNED(ch) (!SRE_UNI_IS_CN(ch))
  |  |  ------------------
  |  |  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|      0|    case SRE_CATEGORY_BLANK:
  ------------------
  |  |  132|      0|#define SRE_CATEGORY_BLANK 62
  ------------------
  |  Branch (359:5): [True: 0, False: 3]
  ------------------
  360|      0|        return SRE_UNI_IS_BLANK(ch);
  ------------------
  |  |  211|      0|#define SRE_UNI_IS_BLANK(ch) (SRE_UNI_IS_ZS(ch) || (ch) == 0x09)
  |  |  ------------------
  |  |  |  |  203|      0|#define SRE_UNI_IS_ZS(ch) (SRE_UNI_IS_Z(ch) && (ch) != 0x2028 && (ch) != 0x2029)
  |  |  |  |  ------------------
  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (203:48): [True: 0, False: 0]
  |  |  |  |  |  Branch (203:66): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (211:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  361|      0|    case SRE_CATEGORY_NOT_BLANK:
  ------------------
  |  |  133|      0|#define SRE_CATEGORY_NOT_BLANK 63
  ------------------
  |  Branch (361:5): [True: 0, False: 3]
  ------------------
  362|      0|        return !SRE_UNI_IS_BLANK(ch);
  ------------------
  |  |  211|      0|#define SRE_UNI_IS_BLANK(ch) (SRE_UNI_IS_ZS(ch) || (ch) == 0x09)
  |  |  ------------------
  |  |  |  |  203|      0|#define SRE_UNI_IS_ZS(ch) (SRE_UNI_IS_Z(ch) && (ch) != 0x2028 && (ch) != 0x2029)
  |  |  |  |  ------------------
  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (203:48): [True: 0, False: 0]
  |  |  |  |  |  Branch (203:66): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (211:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  363|      0|    case SRE_CATEGORY_GRAPH:
  ------------------
  |  |  134|      0|#define SRE_CATEGORY_GRAPH 64
  ------------------
  |  Branch (363:5): [True: 0, False: 3]
  ------------------
  364|      0|        return SRE_UNI_IS_GRAPH(ch);
  ------------------
  |  |  212|      0|#define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  ------------------
  |  |               #define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (212:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  213|      0|                              !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  ------------------
  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                             !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  ------------------
  |  |  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|      0|    case SRE_CATEGORY_NOT_GRAPH:
  ------------------
  |  |  135|      0|#define SRE_CATEGORY_NOT_GRAPH 65
  ------------------
  |  Branch (365:5): [True: 0, False: 3]
  ------------------
  366|      0|        return !SRE_UNI_IS_GRAPH(ch);
  ------------------
  |  |  212|      0|#define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  ------------------
  |  |               #define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (212:31): [True: 0, False: 0]
  |  |  ------------------
  |  |  213|      0|                              !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  ------------------
  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                             !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  ------------------
  |  |  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|      0|    case SRE_CATEGORY_PRINT:
  ------------------
  |  |  136|      0|#define SRE_CATEGORY_PRINT 66
  ------------------
  |  Branch (367:5): [True: 0, False: 3]
  ------------------
  368|      0|        return SRE_UNI_IS_PRINT(ch);
  ------------------
  |  |  214|      0|#define SRE_UNI_IS_PRINT(ch) ((SRE_UNI_IS_GRAPH(ch) || SRE_UNI_IS_BLANK(ch)) && \
  |  |  ------------------
  |  |  |  |  212|      0|#define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (212:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                              !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                                             !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_PRINT(ch) ((SRE_UNI_IS_GRAPH(ch) || SRE_UNI_IS_BLANK(ch)) && \
  |  |  ------------------
  |  |  |  |  211|      0|#define SRE_UNI_IS_BLANK(ch) (SRE_UNI_IS_ZS(ch) || (ch) == 0x09)
  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|#define SRE_UNI_IS_ZS(ch) (SRE_UNI_IS_Z(ch) && (ch) != 0x2028 && (ch) != 0x2029)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (203:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (203:66): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (211:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  215|      0|                              !SRE_IS_CC(ch))
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  369|      0|    case SRE_CATEGORY_NOT_PRINT:
  ------------------
  |  |  137|      0|#define SRE_CATEGORY_NOT_PRINT 67
  ------------------
  |  Branch (369:5): [True: 0, False: 3]
  ------------------
  370|      0|        return !SRE_UNI_IS_PRINT(ch);
  ------------------
  |  |  214|      0|#define SRE_UNI_IS_PRINT(ch) ((SRE_UNI_IS_GRAPH(ch) || SRE_UNI_IS_BLANK(ch)) && \
  |  |  ------------------
  |  |  |  |  212|      0|#define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  ------------------
  |  |  |  |               #define SRE_UNI_IS_GRAPH(ch) (!SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  ------------------
  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (212:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  213|      0|                              !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                                             !SRE_IS_CS(ch) && !SRE_UNI_IS_CN(ch))
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|#define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      0|#define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  178|      0|#define SRE_UNI_IS_PRINTABLE(ch) Py_UNICODE_ISPRINTABLE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_C(ch) (!SRE_UNI_IS_PRINTABLE(ch) && !SRE_UNI_IS_Z(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (207:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define SRE_UNI_IS_CN(ch) (SRE_UNI_IS_C(ch) && !SRE_IS_CC(ch) && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|    !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|#define SRE_IS_CS(ch) (0xD800 <= (ch) && (ch) <= 0xDFFF)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (191:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (191:42): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  192|      0|#define SRE_IS_CO(ch) ((0xE000 <= (ch) && (ch) <= 0xF8FF) || \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (192:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (192:43): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  193|      0|                       (0xF0000 <= (ch) && (ch) <= 0xFFFFD) || \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (193:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (193:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  194|      0|                       (0x100000 <= (ch) && (ch) <= 0x10FFFD))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (194:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (194:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   !SRE_IS_CS(ch) && !SRE_IS_CO(ch) && !SRE_UNI_IS_CASE_IGNORABLE(ch))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|#define SRE_UNI_IS_CASE_IGNORABLE(ch) _PyUnicode_IsCaseIgnorable(ch)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (209:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SRE_UNI_IS_PRINT(ch) ((SRE_UNI_IS_GRAPH(ch) || SRE_UNI_IS_BLANK(ch)) && \
  |  |  ------------------
  |  |  |  |  211|      0|#define SRE_UNI_IS_BLANK(ch) (SRE_UNI_IS_ZS(ch) || (ch) == 0x09)
  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|#define SRE_UNI_IS_ZS(ch) (SRE_UNI_IS_Z(ch) && (ch) != 0x2028 && (ch) != 0x2029)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  202|      0|#define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  170|      0|#define SRE_UNI_IS_SPACE(ch) Py_UNICODE_ISSPACE(ch)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (170:30): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define SRE_UNI_IS_Z(ch) (SRE_UNI_IS_SPACE(ch) && !SRE_IS_CC(ch))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (203:48): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (203:66): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (211:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  215|      0|                              !SRE_IS_CC(ch))
  |  |  ------------------
  |  |  |  |  190|      0|#define SRE_IS_CC(ch) ((ch) <= 0x1F || (0x7F <= (ch) && (ch) <= 0x9F))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (190:24): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:41): [True: 0, False: 0]
  |  |  |  |  |  Branch (190:57): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|      3|    }
  372|      0|    return 0;
  373|      3|}
sre.c:repeat_pool_malloc:
  426|      6|{
  427|      6|    SRE_REPEAT *repeat;
  428|       |
  429|      6|    if (state->repeat_pool_unused) {
  ------------------
  |  Branch (429:9): [True: 0, False: 6]
  ------------------
  430|       |        /* remove from unused pool (singly-linked list) */
  431|      0|        repeat = state->repeat_pool_unused;
  432|      0|        state->repeat_pool_unused = repeat->pool_next;
  433|      0|    }
  434|      6|    else {
  435|      6|        repeat = PyMem_Malloc(sizeof(SRE_REPEAT));
  436|      6|        if (!repeat) {
  ------------------
  |  Branch (436:13): [True: 0, False: 6]
  ------------------
  437|      0|            return NULL;
  438|      0|        }
  439|      6|    }
  440|       |
  441|       |    /* add to used pool (doubly-linked list) */
  442|      6|    SRE_REPEAT *temp = state->repeat_pool_used;
  443|      6|    if (temp) {
  ------------------
  |  Branch (443:9): [True: 3, False: 3]
  ------------------
  444|      3|        temp->pool_prev = repeat;
  445|      3|    }
  446|      6|    repeat->pool_prev = NULL;
  447|      6|    repeat->pool_next = temp;
  448|      6|    state->repeat_pool_used = repeat;
  449|       |
  450|      6|    return repeat;
  451|      6|}
sre.c:repeat_pool_free:
  455|      6|{
  456|      6|    SRE_REPEAT *prev = repeat->pool_prev;
  457|      6|    SRE_REPEAT *next = repeat->pool_next;
  458|       |
  459|       |    /* remove from used pool (doubly-linked list) */
  460|      6|    if (prev) {
  ------------------
  |  Branch (460:9): [True: 0, False: 6]
  ------------------
  461|      0|        prev->pool_next = next;
  462|      0|    }
  463|      6|    else {
  464|      6|        state->repeat_pool_used = next;
  465|      6|    }
  466|      6|    if (next) {
  ------------------
  |  Branch (466:9): [True: 3, False: 3]
  ------------------
  467|      3|        next->pool_prev = prev;
  468|      3|    }
  469|       |
  470|       |    /* add to unused pool (singly-linked list) */
  471|      6|    repeat->pool_next = state->repeat_pool_unused;
  472|      6|    state->repeat_pool_unused = repeat;
  473|      6|}
sre.c:state_fini:
  772|      4|{
  773|      4|    if (state->buffer.buf)
  ------------------
  |  Branch (773:9): [True: 0, False: 4]
  ------------------
  774|      0|        PyBuffer_Release(&state->buffer);
  775|      4|    Py_XDECREF(state->string);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  776|      4|    data_stack_dealloc(state);
  777|       |    /* See above PyMem_Free() for why we explicitly cast here. */
  778|      4|    PyMem_Free((void*) state->mark);
  779|      4|    state->mark = NULL;
  780|       |    /* SRE_REPEAT pool */
  781|      4|    repeat_pool_clear(state);
  782|      4|}
sre.c:repeat_pool_clear:
  477|      4|{
  478|       |    /* clear used pool */
  479|      4|    SRE_REPEAT *next = state->repeat_pool_used;
  480|      4|    state->repeat_pool_used = NULL;
  481|      4|    while (next) {
  ------------------
  |  Branch (481:12): [True: 0, False: 4]
  ------------------
  482|      0|        SRE_REPEAT *temp = next;
  483|      0|        next = temp->pool_next;
  484|      0|        PyMem_Free(temp);
  485|      0|    }
  486|       |
  487|       |    /* clear unused pool */
  488|      4|    next = state->repeat_pool_unused;
  489|      4|    state->repeat_pool_unused = NULL;
  490|     10|    while (next) {
  ------------------
  |  Branch (490:12): [True: 6, False: 4]
  ------------------
  491|      6|        SRE_REPEAT *temp = next;
  492|      6|        next = temp->pool_next;
  493|      6|        PyMem_Free(temp);
  494|      6|    }
  495|      4|}
sre.c:pattern_new_match:
 2940|      4|{
 2941|       |    /* create match object (from state object) */
 2942|       |
 2943|      4|    MatchObject* match;
 2944|      4|    Py_ssize_t i, j;
 2945|      4|    char* base;
 2946|      4|    int n;
 2947|       |
 2948|      4|    if (status > 0) {
  ------------------
  |  Branch (2948:9): [True: 4, False: 0]
  ------------------
 2949|       |
 2950|       |        /* create match object (with room for extra group marks) */
 2951|       |        /* coverity[ampersand_in_size] */
 2952|      4|        match = PyObject_GC_NewVar(MatchObject,
  ------------------
  |  |  183|      4|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2953|      4|                                   module_state->Match_Type,
 2954|      4|                                   2*(pattern->groups+1));
 2955|      4|        if (!match)
  ------------------
  |  Branch (2955:13): [True: 0, False: 4]
  ------------------
 2956|      0|            return NULL;
 2957|       |
 2958|      4|        Py_INCREF(pattern);
  ------------------
  |  |  310|      4|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2959|      4|        match->pattern = pattern;
 2960|       |
 2961|      4|        match->string = Py_NewRef(state->string);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2962|       |
 2963|      4|        match->regs = NULL;
 2964|      4|        match->groups = pattern->groups+1;
 2965|       |
 2966|       |        /* fill in group slices */
 2967|       |
 2968|      4|        base = (char*) state->beginning;
 2969|      4|        n = state->charsize;
 2970|       |
 2971|      4|        match->mark[0] = ((char*) state->start - base) / n;
 2972|      4|        match->mark[1] = ((char*) state->ptr - base) / n;
 2973|       |
 2974|     34|        for (i = j = 0; i < pattern->groups; i++, j+=2)
  ------------------
  |  Branch (2974:25): [True: 30, False: 4]
  ------------------
 2975|     30|            if (j+1 <= state->lastmark && state->mark[j] && state->mark[j+1]) {
  ------------------
  |  Branch (2975:17): [True: 14, False: 16]
  |  Branch (2975:43): [True: 5, False: 9]
  |  Branch (2975:61): [True: 5, False: 0]
  ------------------
 2976|      5|                match->mark[j+2] = ((char*) state->mark[j] - base) / n;
 2977|      5|                match->mark[j+3] = ((char*) state->mark[j+1] - base) / n;
 2978|       |
 2979|       |                /* check wrong span */
 2980|      5|                if (match->mark[j+2] > match->mark[j+3]) {
  ------------------
  |  Branch (2980:21): [True: 0, False: 5]
  ------------------
 2981|      0|                    PyErr_SetString(PyExc_SystemError,
 2982|      0|                                    "The span of capturing group is wrong,"
 2983|      0|                                    " please report a bug for the re module.");
 2984|      0|                    Py_DECREF(match);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2985|      0|                    return NULL;
 2986|      0|                }
 2987|      5|            } else
 2988|     25|                match->mark[j+2] = match->mark[j+3] = -1; /* undefined */
 2989|       |
 2990|      4|        match->pos = state->pos;
 2991|      4|        match->endpos = state->endpos;
 2992|       |
 2993|      4|        match->lastindex = state->lastindex;
 2994|       |
 2995|      4|        PyObject_GC_Track(match);
 2996|      4|        return (PyObject*) match;
 2997|       |
 2998|      4|    } else if (status == 0) {
  ------------------
  |  Branch (2998:16): [True: 0, False: 0]
  ------------------
 2999|       |
 3000|       |        /* no match */
 3001|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 3002|       |
 3003|      0|    }
 3004|       |
 3005|       |    /* internal error */
 3006|      0|    pattern_error(status);
 3007|       |    return NULL;
 3008|      4|}
sre.c:getslice:
  791|      2|{
  792|      2|    if (isbytes) {
  ------------------
  |  Branch (792:9): [True: 0, False: 2]
  ------------------
  793|      0|        if (PyBytes_CheckExact(string) &&
  ------------------
  |  |   29|      0|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  794|      0|            start == 0 && end == PyBytes_GET_SIZE(string)) {
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (794:13): [True: 0, False: 0]
  |  Branch (794:27): [True: 0, False: 0]
  ------------------
  795|      0|            return Py_NewRef(string);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  796|      0|        }
  797|      0|        return PyBytes_FromStringAndSize(
  798|      0|                (const char *)ptr + start, end - start);
  799|      0|    }
  800|      2|    else {
  801|      2|        return PyUnicode_Substring(string, start, end);
  802|      2|    }
  803|      2|}
sre.c:match_getslice_by_index:
 2513|     10|{
 2514|     10|    Py_ssize_t length;
 2515|     10|    int isbytes, charsize;
 2516|     10|    Py_buffer view;
 2517|     10|    PyObject *result;
 2518|     10|    const void* ptr;
 2519|     10|    Py_ssize_t i, j;
 2520|       |
 2521|     10|    assert(0 <= index && index < self->groups);
  ------------------
  |  Branch (2521:5): [True: 10, False: 0]
  |  Branch (2521:5): [True: 10, False: 0]
  ------------------
 2522|     10|    index *= 2;
 2523|       |
 2524|     10|    if (self->string == Py_None || self->mark[index] < 0) {
  ------------------
  |  |  616|     20|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2524:9): [True: 0, False: 10]
  |  Branch (2524:36): [True: 8, False: 2]
  ------------------
 2525|       |        /* return default value if the string or group is undefined */
 2526|      8|        return Py_NewRef(def);
  ------------------
  |  |  550|      8|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2527|      8|    }
 2528|       |
 2529|      2|    ptr = getstring(self->string, &length, &isbytes, &charsize, &view);
 2530|      2|    if (ptr == NULL)
  ------------------
  |  Branch (2530:9): [True: 0, False: 2]
  ------------------
 2531|      0|        return NULL;
 2532|       |
 2533|      2|    i = self->mark[index];
 2534|      2|    j = self->mark[index+1];
 2535|      2|    i = Py_MIN(i, length);
  ------------------
  |  |  120|      2|       __extension__ \
  |  |  121|      2|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      2|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      2|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 1, False: 1]
  |  |  ------------------
  ------------------
 2536|      2|    j = Py_MIN(j, length);
  ------------------
  |  |  120|      2|       __extension__ \
  |  |  121|      2|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      2|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      2|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 1, False: 1]
  |  |  ------------------
  ------------------
 2537|      2|    result = getslice(isbytes, ptr, self->string, i, j);
 2538|      2|    if (isbytes && view.buf != NULL)
  ------------------
  |  Branch (2538:9): [True: 0, False: 2]
  |  Branch (2538:20): [True: 0, False: 0]
  ------------------
 2539|      0|        PyBuffer_Release(&view);
 2540|      2|    return result;
 2541|      2|}
sre.c:pattern_traverse:
  863|    110|{
  864|    110|    PatternObject *self = _PatternObject_CAST(op);
  ------------------
  |  |  546|    110|#define _PatternObject_CAST(op)     ((PatternObject *)(op))
  ------------------
  865|    110|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|    110|    do {                                                                \
  |  |  195|    110|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 110, False: 0]
  |  |  ------------------
  |  |  196|    110|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    110|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    110|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    110|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 110]
  |  |  ------------------
  |  |  198|    110|                return vret;                                            \
  |  |  199|    110|        }                                                               \
  |  |  200|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
  866|    110|    Py_VISIT(self->groupindex);
  ------------------
  |  |  194|    110|    do {                                                                \
  |  |  195|    110|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 28, False: 82]
  |  |  ------------------
  |  |  196|     28|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     28|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 28]
  |  |  ------------------
  |  |  198|     28|                return vret;                                            \
  |  |  199|     28|        }                                                               \
  |  |  200|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
  867|    110|    Py_VISIT(self->indexgroup);
  ------------------
  |  |  194|    110|    do {                                                                \
  |  |  195|    110|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 28, False: 82]
  |  |  ------------------
  |  |  196|     28|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     28|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 28]
  |  |  ------------------
  |  |  198|     28|                return vret;                                            \
  |  |  199|     28|        }                                                               \
  |  |  200|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
  868|    110|    Py_VISIT(self->pattern);
  ------------------
  |  |  194|    110|    do {                                                                \
  |  |  195|    110|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 110, False: 0]
  |  |  ------------------
  |  |  196|    110|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    110|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    110|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    110|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 110]
  |  |  ------------------
  |  |  198|    110|                return vret;                                            \
  |  |  199|    110|        }                                                               \
  |  |  200|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
  869|       |#ifdef Py_DEBUG
  870|       |    Py_VISIT(self->fail_after_exc);
  871|       |#endif
  872|    110|    return 0;
  873|    110|}
sre.c:pattern_clear:
  877|      2|{
  878|      2|    PatternObject *self = _PatternObject_CAST(op);
  ------------------
  |  |  546|      2|#define _PatternObject_CAST(op)     ((PatternObject *)(op))
  ------------------
  879|      2|    Py_CLEAR(self->groupindex);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  880|      2|    Py_CLEAR(self->indexgroup);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  881|      2|    Py_CLEAR(self->pattern);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  882|       |#ifdef Py_DEBUG
  883|       |    Py_CLEAR(self->fail_after_exc);
  884|       |#endif
  885|      2|    return 0;
  886|      2|}
sre.c:match_dealloc:
 2503|      4|{
 2504|      4|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2505|      4|    PyObject_GC_UnTrack(self);
 2506|      4|    (void)match_clear(self);
 2507|      4|    tp->tp_free(self);
 2508|      4|    Py_DECREF(tp);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2509|      4|}
sre.c:match_group:
 2615|     10|{
 2616|     10|    MatchObject *self = _MatchObject_CAST(op);
  ------------------
  |  |  547|     10|#define _MatchObject_CAST(op)       ((MatchObject *)(op))
  ------------------
 2617|     10|    PyObject* result;
 2618|     10|    Py_ssize_t i, size;
 2619|       |
 2620|     10|    size = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     10|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2621|       |
 2622|     10|    switch (size) {
 2623|      0|    case 0:
  ------------------
  |  Branch (2623:5): [True: 0, False: 10]
  ------------------
 2624|      0|        result = match_getslice(self, _PyLong_GetZero(), Py_None);
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2625|      0|        break;
 2626|     10|    case 1:
  ------------------
  |  Branch (2626:5): [True: 10, False: 0]
  ------------------
 2627|     10|        result = match_getslice(self, PyTuple_GET_ITEM(args, 0), Py_None);
  ------------------
  |  |   29|     10|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     10|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      result = match_getslice(self, PyTuple_GET_ITEM(args, 0), Py_None);
  ------------------
  |  |  616|     10|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2627:39): [True: 10, False: 0]
  ------------------
 2628|      0|        break;
 2629|      0|    default:
  ------------------
  |  Branch (2629:5): [True: 0, False: 10]
  ------------------
 2630|       |        /* fetch multiple items */
 2631|      0|        result = PyTuple_New(size);
 2632|      0|        if (!result)
  ------------------
  |  Branch (2632:13): [True: 0, False: 0]
  ------------------
 2633|      0|            return NULL;
 2634|      0|        for (i = 0; i < size; i++) {
  ------------------
  |  Branch (2634:21): [True: 0, False: 0]
  ------------------
 2635|      0|            PyObject* item = match_getslice(
 2636|      0|                self, PyTuple_GET_ITEM(args, i), Py_None
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              self, PyTuple_GET_ITEM(args, i), Py_None
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2636:23): [True: 0, False: 0]
  ------------------
 2637|      0|                );
 2638|      0|            if (!item) {
  ------------------
  |  Branch (2638:17): [True: 0, False: 0]
  ------------------
 2639|      0|                Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2640|      0|                return NULL;
 2641|      0|            }
 2642|      0|            PyTuple_SET_ITEM(result, i, item);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2643|      0|        }
 2644|      0|        break;
 2645|     10|    }
 2646|     10|    return result;
 2647|     10|}
sre.c:match_getslice:
 2580|     10|{
 2581|     10|    Py_ssize_t i = match_getindex(self, index);
 2582|       |
 2583|     10|    if (i < 0) {
  ------------------
  |  Branch (2583:9): [True: 0, False: 10]
  ------------------
 2584|      0|        return NULL;
 2585|      0|    }
 2586|       |
 2587|     10|    return match_getslice_by_index(self, i, def);
 2588|     10|}
sre.c:match_getindex:
 2545|     10|{
 2546|     10|    Py_ssize_t i;
 2547|       |
 2548|     10|    if (index == NULL)
  ------------------
  |  Branch (2548:9): [True: 0, False: 10]
  ------------------
 2549|       |        /* Default value */
 2550|      0|        return 0;
 2551|       |
 2552|     10|    if (PyIndex_Check(index)) {
  ------------------
  |  Branch (2552:9): [True: 0, False: 10]
  ------------------
 2553|      0|        i = PyNumber_AsSsize_t(index, NULL);
 2554|      0|    }
 2555|     10|    else {
 2556|     10|        i = -1;
 2557|       |
 2558|     10|        if (self->pattern->groupindex) {
  ------------------
  |  Branch (2558:13): [True: 10, False: 0]
  ------------------
 2559|     10|            index = PyDict_GetItemWithError(self->pattern->groupindex, index);
 2560|     10|            if (index && PyLong_Check(index)) {
  ------------------
  |  |   13|     10|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     10|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 10, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2560:17): [True: 10, False: 0]
  ------------------
 2561|     10|                i = PyLong_AsSsize_t(index);
 2562|     10|            }
 2563|     10|        }
 2564|     10|    }
 2565|     10|    if (i < 0 || i >= self->groups) {
  ------------------
  |  Branch (2565:9): [True: 0, False: 10]
  |  Branch (2565:18): [True: 0, False: 10]
  ------------------
 2566|       |        /* raise IndexError if we were given a bad group number */
 2567|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (2567:13): [True: 0, False: 0]
  ------------------
 2568|      0|            PyErr_SetString(PyExc_IndexError, "no such group");
 2569|      0|        }
 2570|      0|        return -1;
 2571|      0|    }
 2572|       |
 2573|       |    // Check that i*2 cannot overflow to make static analyzers happy
 2574|     10|    assert((size_t)i <= SRE_MAXGROUPS);
  ------------------
  |  Branch (2574:5): [True: 10, False: 0]
  ------------------
 2575|     10|    return i;
 2576|     10|}
sre.c:match_clear:
 2493|      4|{
 2494|      4|    MatchObject *self = _MatchObject_CAST(op);
  ------------------
  |  |  547|      4|#define _MatchObject_CAST(op)       ((MatchObject *)(op))
  ------------------
 2495|      4|    Py_CLEAR(self->string);
  ------------------
  |  |  484|      4|    do { \
  |  |  485|      4|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      4|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      4|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 4, False: 0]
  |  |  ------------------
  |  |  488|      4|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      4|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      4|        } \
  |  |  491|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 2496|      4|    Py_CLEAR(self->regs);
  ------------------
  |  |  484|      4|    do { \
  |  |  485|      4|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      4|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      4|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 4]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 2497|       |    Py_CLEAR(self->pattern);
  ------------------
  |  |  484|      4|    do { \
  |  |  485|      4|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      4|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      4|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 4, False: 0]
  |  |  ------------------
  |  |  488|      4|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      4|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      4|        } \
  |  |  491|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 2498|      4|    return 0;
 2499|      4|}
sre.c:sre_traverse:
 3569|     18|{
 3570|     18|    _sremodulestate *state = get_sre_module_state(module);
 3571|       |
 3572|     18|    Py_VISIT(state->Pattern_Type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 3573|     18|    Py_VISIT(state->Match_Type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 3574|     18|    Py_VISIT(state->Scanner_Type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 3575|     18|    Py_VISIT(state->Template_Type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 3576|     18|    Py_VISIT(state->compile_template);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 18]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 3577|       |
 3578|     18|    return 0;
 3579|     18|}

sre.c:sre_ucs1_match:
  663|      4|{
  664|      4|    const SRE_CHAR* end = (const SRE_CHAR *)state->end;
  665|      4|    Py_ssize_t alloc_pos, ctx_pos = -1;
  666|      4|    Py_ssize_t ret = 0;
  667|      4|    int jump;
  668|      4|    unsigned int sigcount = state->sigcount;
  669|       |
  670|      4|    SRE(match_context)* ctx;
  ------------------
  |  |  501|      4|#define SRE(F) sre_ucs1_##F
  ------------------
  671|      4|    SRE(match_context)* nextctx;
  ------------------
  |  |  501|      4|#define SRE(F) sre_ucs1_##F
  ------------------
  672|      4|    INIT_TRACE(state);
  673|       |
  674|      4|    TRACE(("|%p|%p|ENTER\n", pattern, state->ptr));
  675|       |
  676|      4|    DATA_ALLOC(SRE(match_context), ctx);
  ------------------
  |  |  512|      4|    DATA_STACK_ALLOC(state, t, p)
  |  |  ------------------
  |  |  |  |  451|      4|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  452|      4|do { \
  |  |  |  |  453|      4|    alloc_pos = state->data_stack_base; \
  |  |  |  |  454|      4|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  455|      4|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  456|      4|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (456:9): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  457|      4|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  458|      4|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (458:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |  459|      4|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (459:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |  460|      4|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  461|      4|    } \
  |  |  |  |  462|      4|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  463|      4|    state->data_stack_base += sizeof(type); \
  |  |  |  |  464|      4|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (464:10): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|      4|    ctx->last_ctx_pos = -1;
  678|      4|    ctx->jump = JUMP_NONE;
  ------------------
  |  |  559|      4|#define JUMP_NONE            0
  ------------------
  679|      4|    ctx->toplevel = toplevel;
  680|      4|    ctx_pos = alloc_pos;
  681|       |
  682|      4|#if USE_COMPUTED_GOTOS
  683|      4|#include "sre_targets.h"
  ------------------
  |  |    1|       |/*
  |  |    2|       | * Secret Labs' Regular Expression Engine
  |  |    3|       | *
  |  |    4|       | * regular expression matching engine
  |  |    5|       | *
  |  |    6|       | * Auto-generated by Tools/build/generate_sre_constants.py from
  |  |    7|       | * Lib/re/_constants.py.
  |  |    8|       | *
  |  |    9|       | * Copyright (c) 1997-2001 by Secret Labs AB.  All rights reserved.
  |  |   10|       | *
  |  |   11|       | * See the sre.c file for information on usage and redistribution.
  |  |   12|       | */
  |  |   13|       |
  |  |   14|      4|static void *sre_targets[43] = {
  |  |   15|      4|    &&TARGET_SRE_OP_FAILURE,
  |  |   16|      4|    &&TARGET_SRE_OP_SUCCESS,
  |  |   17|      4|    &&TARGET_SRE_OP_ANY,
  |  |   18|      4|    &&TARGET_SRE_OP_ANY_ALL,
  |  |   19|      4|    &&TARGET_SRE_OP_ASSERT,
  |  |   20|      4|    &&TARGET_SRE_OP_ASSERT_NOT,
  |  |   21|      4|    &&TARGET_SRE_OP_AT,
  |  |   22|      4|    &&TARGET_SRE_OP_BRANCH,
  |  |   23|      4|    &&TARGET_SRE_OP_CATEGORY,
  |  |   24|      4|    &&TARGET_SRE_OP_CHARSET,
  |  |   25|      4|    &&TARGET_SRE_OP_BIGCHARSET,
  |  |   26|      4|    &&TARGET_SRE_OP_GROUPREF,
  |  |   27|      4|    &&TARGET_SRE_OP_GROUPREF_EXISTS,
  |  |   28|      4|    &&TARGET_SRE_OP_IN,
  |  |   29|      4|    &&TARGET_SRE_OP_INFO,
  |  |   30|      4|    &&TARGET_SRE_OP_JUMP,
  |  |   31|      4|    &&TARGET_SRE_OP_LITERAL,
  |  |   32|      4|    &&TARGET_SRE_OP_MARK,
  |  |   33|      4|    &&TARGET_SRE_OP_MAX_UNTIL,
  |  |   34|      4|    &&TARGET_SRE_OP_MIN_UNTIL,
  |  |   35|      4|    &&TARGET_SRE_OP_NOT_LITERAL,
  |  |   36|      4|    &&TARGET_SRE_OP_NEGATE,
  |  |   37|      4|    &&TARGET_SRE_OP_RANGE,
  |  |   38|      4|    &&TARGET_SRE_OP_REPEAT,
  |  |   39|      4|    &&TARGET_SRE_OP_REPEAT_ONE,
  |  |   40|      4|    &&TARGET_SRE_OP_SUBPATTERN,
  |  |   41|      4|    &&TARGET_SRE_OP_MIN_REPEAT_ONE,
  |  |   42|      4|    &&TARGET_SRE_OP_ATOMIC_GROUP,
  |  |   43|      4|    &&TARGET_SRE_OP_POSSESSIVE_REPEAT,
  |  |   44|      4|    &&TARGET_SRE_OP_POSSESSIVE_REPEAT_ONE,
  |  |   45|      4|    &&TARGET_SRE_OP_GROUPREF_IGNORE,
  |  |   46|      4|    &&TARGET_SRE_OP_IN_IGNORE,
  |  |   47|      4|    &&TARGET_SRE_OP_LITERAL_IGNORE,
  |  |   48|      4|    &&TARGET_SRE_OP_NOT_LITERAL_IGNORE,
  |  |   49|      4|    &&TARGET_SRE_OP_GROUPREF_LOC_IGNORE,
  |  |   50|      4|    &&TARGET_SRE_OP_IN_LOC_IGNORE,
  |  |   51|      4|    &&TARGET_SRE_OP_LITERAL_LOC_IGNORE,
  |  |   52|      4|    &&TARGET_SRE_OP_NOT_LITERAL_LOC_IGNORE,
  |  |   53|      4|    &&TARGET_SRE_OP_GROUPREF_UNI_IGNORE,
  |  |   54|      4|    &&TARGET_SRE_OP_IN_UNI_IGNORE,
  |  |   55|      4|    &&TARGET_SRE_OP_LITERAL_UNI_IGNORE,
  |  |   56|      4|    &&TARGET_SRE_OP_NOT_LITERAL_UNI_IGNORE,
  |  |   57|      4|    &&TARGET_SRE_OP_RANGE_UNI_IGNORE,
  |  |   58|      4|};
  ------------------
  684|      4|#endif
  685|       |
  686|     36|entrance:
  687|       |
  688|     36|    ;  // Fashion statement.
  689|     36|    const SRE_CHAR *ptr = (SRE_CHAR *)state->ptr;
  690|       |
  691|     36|    if (pattern[0] == SRE_OP_INFO) {
  ------------------
  |  |   29|     36|#define SRE_OP_INFO 14
  ------------------
  |  Branch (691:9): [True: 4, False: 32]
  ------------------
  692|       |        /* optimization info block */
  693|       |        /* <INFO> <1=skip> <2=flags> <3=min> ... */
  694|      4|        if (pattern[3] && (uintptr_t)(end - ptr) < pattern[3]) {
  ------------------
  |  Branch (694:13): [True: 0, False: 4]
  |  Branch (694:27): [True: 0, False: 0]
  ------------------
  695|      0|            TRACE(("reject (got %tu chars, need %zu)\n",
  696|      0|                   end - ptr, (size_t) pattern[3]));
  697|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  698|      0|        }
  699|      4|        pattern += pattern[1] + 1;
  700|      4|    }
  701|       |
  702|     36|#if USE_COMPUTED_GOTOS
  703|     36|    DISPATCH;
  ------------------
  |  |  650|     36|        do {                               \
  |  |  651|     36|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|     36|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|     36|    do {                                                           \
  |  |  |  |  |  |  616|     36|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 36]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|     36|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 36]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|     36|            goto *sre_targets[*pattern++]; \
  |  |  653|     36|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 36]
  |  |  ------------------
  ------------------
  704|       |#else
  705|       |dispatch:
  706|       |    MAYBE_CHECK_SIGNALS;
  707|       |    switch (*pattern++)
  708|       |#endif
  709|     36|    {
  710|       |
  711|     36|        TARGET(SRE_OP_MARK):
  ------------------
  |  |  648|     15|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  712|       |            /* set mark */
  713|       |            /* <MARK> <gid> */
  714|     15|            TRACE(("|%p|%p|MARK %d\n", pattern,
  715|     15|                   ptr, pattern[0]));
  716|     15|            {
  717|     15|                int i = pattern[0];
  718|     15|                if (i & 1)
  ------------------
  |  Branch (718:21): [True: 5, False: 10]
  ------------------
  719|      5|                    state->lastindex = i/2 + 1;
  720|     15|                if (i > state->lastmark) {
  ------------------
  |  Branch (720:21): [True: 14, False: 1]
  ------------------
  721|       |                    /* state->lastmark is the highest valid index in the
  722|       |                       state->mark array.  If it is increased by more than 1,
  723|       |                       the intervening marks must be set to NULL to signal
  724|       |                       that these marks have not been encountered. */
  725|     14|                    int j = state->lastmark + 1;
  726|     68|                    while (j < i)
  ------------------
  |  Branch (726:28): [True: 54, False: 14]
  ------------------
  727|     54|                        state->mark[j++] = NULL;
  728|     14|                    state->lastmark = i;
  729|     14|                }
  730|     15|                state->mark[i] = ptr;
  731|     15|            }
  732|     15|            pattern++;
  733|     15|            DISPATCH;
  ------------------
  |  |  650|     15|        do {                               \
  |  |  651|     15|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|     15|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|     15|    do {                                                           \
  |  |  |  |  |  |  616|     15|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 15]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|     15|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|     15|            goto *sre_targets[*pattern++]; \
  |  |  653|     15|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 15]
  |  |  ------------------
  ------------------
  734|       |
  735|     15|        TARGET(SRE_OP_LITERAL):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  736|       |            /* match literal string */
  737|       |            /* <LITERAL> <code> */
  738|      0|            TRACE(("|%p|%p|LITERAL %d\n", pattern,
  739|      0|                   ptr, *pattern));
  740|      0|            if (ptr >= end || (SRE_CODE) ptr[0] != pattern[0])
  ------------------
  |  Branch (740:17): [True: 0, False: 0]
  |  Branch (740:31): [True: 0, False: 0]
  ------------------
  741|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  742|      0|            pattern++;
  743|      0|            ptr++;
  744|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  745|       |
  746|      0|        TARGET(SRE_OP_NOT_LITERAL):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  747|       |            /* match anything that is not literal character */
  748|       |            /* <NOT_LITERAL> <code> */
  749|      0|            TRACE(("|%p|%p|NOT_LITERAL %d\n", pattern,
  750|      0|                   ptr, *pattern));
  751|      0|            if (ptr >= end || (SRE_CODE) ptr[0] == pattern[0])
  ------------------
  |  Branch (751:17): [True: 0, False: 0]
  |  Branch (751:31): [True: 0, False: 0]
  ------------------
  752|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  753|      0|            pattern++;
  754|      0|            ptr++;
  755|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  756|       |
  757|      4|        TARGET(SRE_OP_SUCCESS):
  ------------------
  |  |  648|      4|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  758|       |            /* end of pattern */
  759|      4|            TRACE(("|%p|%p|SUCCESS\n", pattern, ptr));
  760|      4|            if (ctx->toplevel &&
  ------------------
  |  Branch (760:17): [True: 4, False: 0]
  ------------------
  761|      4|                ((state->match_all && ptr != state->end) ||
  ------------------
  |  Branch (761:19): [True: 0, False: 4]
  |  Branch (761:39): [True: 0, False: 0]
  ------------------
  762|      4|                 (state->must_advance && ptr == state->start)))
  ------------------
  |  Branch (762:19): [True: 0, False: 4]
  |  Branch (762:42): [True: 0, False: 0]
  ------------------
  763|      0|            {
  764|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  765|      0|            }
  766|      4|            state->ptr = ptr;
  767|      4|            RETURN_SUCCESS;
  ------------------
  |  |  442|      4|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  768|       |
  769|      3|        TARGET(SRE_OP_AT):
  ------------------
  |  |  648|      3|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  770|       |            /* match at given position */
  771|       |            /* <AT> <code> */
  772|      3|            TRACE(("|%p|%p|AT %d\n", pattern, ptr, *pattern));
  773|      3|            if (!SRE(at)(state, ptr, *pattern))
  ------------------
  |  |  501|      3|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (773:17): [True: 0, False: 3]
  ------------------
  774|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  775|      3|            pattern++;
  776|      3|            DISPATCH;
  ------------------
  |  |  650|      3|        do {                               \
  |  |  651|      3|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      3|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      3|    do {                                                           \
  |  |  |  |  |  |  616|      3|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 3]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      3|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      3|            goto *sre_targets[*pattern++]; \
  |  |  653|      3|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 3]
  |  |  ------------------
  ------------------
  777|       |
  778|      3|        TARGET(SRE_OP_CATEGORY):
  ------------------
  |  |  648|      3|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  779|       |            /* match at given category */
  780|       |            /* <CATEGORY> <code> */
  781|      3|            TRACE(("|%p|%p|CATEGORY %d\n", pattern,
  782|      3|                   ptr, *pattern));
  783|      3|            if (ptr >= end || !sre_category(pattern[0], ptr[0]))
  ------------------
  |  Branch (783:17): [True: 0, False: 3]
  |  Branch (783:31): [True: 3, False: 0]
  ------------------
  784|      3|                RETURN_FAILURE;
  ------------------
  |  |  441|      3|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  785|      0|            pattern++;
  786|      0|            ptr++;
  787|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  788|       |
  789|      0|        TARGET(SRE_OP_ANY):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  790|       |            /* match anything (except a newline) */
  791|       |            /* <ANY> */
  792|      0|            TRACE(("|%p|%p|ANY\n", pattern, ptr));
  793|      0|            if (ptr >= end || SRE_IS_LINEBREAK(ptr[0]))
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  |  |  ------------------
  |  |  |  Branch (142:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (793:17): [True: 0, False: 0]
  ------------------
  794|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  795|      0|            ptr++;
  796|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  797|       |
  798|      0|        TARGET(SRE_OP_ANY_ALL):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  799|       |            /* match anything */
  800|       |            /* <ANY_ALL> */
  801|      0|            TRACE(("|%p|%p|ANY_ALL\n", pattern, ptr));
  802|      0|            if (ptr >= end)
  ------------------
  |  Branch (802:17): [True: 0, False: 0]
  ------------------
  803|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  804|      0|            ptr++;
  805|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  806|       |
  807|      3|        TARGET(SRE_OP_IN):
  ------------------
  |  |  648|      3|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  808|       |            /* match set member (or non_member) */
  809|       |            /* <IN> <skip> <set> */
  810|      3|            TRACE(("|%p|%p|IN\n", pattern, ptr));
  811|      3|            if (ptr >= end ||
  ------------------
  |  Branch (811:17): [True: 0, False: 3]
  ------------------
  812|      3|                !SRE(charset)(state, pattern + 1, *ptr))
  ------------------
  |  |  501|      3|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (812:17): [True: 2, False: 1]
  ------------------
  813|      2|                RETURN_FAILURE;
  ------------------
  |  |  441|      2|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  814|      1|            pattern += pattern[0];
  815|      1|            ptr++;
  816|      1|            DISPATCH;
  ------------------
  |  |  650|      1|        do {                               \
  |  |  651|      1|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      1|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      1|    do {                                                           \
  |  |  |  |  |  |  616|      1|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 1]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      1|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      1|            goto *sre_targets[*pattern++]; \
  |  |  653|      1|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 1]
  |  |  ------------------
  ------------------
  817|       |
  818|      1|        TARGET(SRE_OP_LITERAL_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  819|      0|            TRACE(("|%p|%p|LITERAL_IGNORE %d\n",
  820|      0|                   pattern, ptr, pattern[0]));
  821|      0|            if (ptr >= end ||
  ------------------
  |  Branch (821:17): [True: 0, False: 0]
  ------------------
  822|      0|                sre_lower_ascii(*ptr) != *pattern)
  ------------------
  |  Branch (822:17): [True: 0, False: 0]
  ------------------
  823|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  824|      0|            pattern++;
  825|      0|            ptr++;
  826|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  827|       |
  828|      7|        TARGET(SRE_OP_LITERAL_UNI_IGNORE):
  ------------------
  |  |  648|      7|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  829|      7|            TRACE(("|%p|%p|LITERAL_UNI_IGNORE %d\n",
  830|      7|                   pattern, ptr, pattern[0]));
  831|      7|            if (ptr >= end ||
  ------------------
  |  Branch (831:17): [True: 0, False: 7]
  ------------------
  832|      7|                sre_lower_unicode(*ptr) != *pattern)
  ------------------
  |  Branch (832:17): [True: 0, False: 7]
  ------------------
  833|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  834|      7|            pattern++;
  835|      7|            ptr++;
  836|      7|            DISPATCH;
  ------------------
  |  |  650|      7|        do {                               \
  |  |  651|      7|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      7|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      7|    do {                                                           \
  |  |  |  |  |  |  616|      7|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 7]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      7|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      7|            goto *sre_targets[*pattern++]; \
  |  |  653|      7|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 7]
  |  |  ------------------
  ------------------
  837|       |
  838|      7|        TARGET(SRE_OP_LITERAL_LOC_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  839|      0|            TRACE(("|%p|%p|LITERAL_LOC_IGNORE %d\n",
  840|      0|                   pattern, ptr, pattern[0]));
  841|      0|            if (ptr >= end
  ------------------
  |  Branch (841:17): [True: 0, False: 0]
  ------------------
  842|      0|                || !char_loc_ignore(*pattern, *ptr))
  ------------------
  |  Branch (842:20): [True: 0, False: 0]
  ------------------
  843|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  844|      0|            pattern++;
  845|      0|            ptr++;
  846|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  847|       |
  848|      0|        TARGET(SRE_OP_NOT_LITERAL_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  849|      0|            TRACE(("|%p|%p|NOT_LITERAL_IGNORE %d\n",
  850|      0|                   pattern, ptr, *pattern));
  851|      0|            if (ptr >= end ||
  ------------------
  |  Branch (851:17): [True: 0, False: 0]
  ------------------
  852|      0|                sre_lower_ascii(*ptr) == *pattern)
  ------------------
  |  Branch (852:17): [True: 0, False: 0]
  ------------------
  853|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  854|      0|            pattern++;
  855|      0|            ptr++;
  856|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  857|       |
  858|      0|        TARGET(SRE_OP_NOT_LITERAL_UNI_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  859|      0|            TRACE(("|%p|%p|NOT_LITERAL_UNI_IGNORE %d\n",
  860|      0|                   pattern, ptr, *pattern));
  861|      0|            if (ptr >= end ||
  ------------------
  |  Branch (861:17): [True: 0, False: 0]
  ------------------
  862|      0|                sre_lower_unicode(*ptr) == *pattern)
  ------------------
  |  Branch (862:17): [True: 0, False: 0]
  ------------------
  863|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  864|      0|            pattern++;
  865|      0|            ptr++;
  866|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  867|       |
  868|      0|        TARGET(SRE_OP_NOT_LITERAL_LOC_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  869|      0|            TRACE(("|%p|%p|NOT_LITERAL_LOC_IGNORE %d\n",
  870|      0|                   pattern, ptr, *pattern));
  871|      0|            if (ptr >= end
  ------------------
  |  Branch (871:17): [True: 0, False: 0]
  ------------------
  872|      0|                || char_loc_ignore(*pattern, *ptr))
  ------------------
  |  Branch (872:20): [True: 0, False: 0]
  ------------------
  873|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  874|      0|            pattern++;
  875|      0|            ptr++;
  876|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  877|       |
  878|      0|        TARGET(SRE_OP_IN_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  879|      0|            TRACE(("|%p|%p|IN_IGNORE\n", pattern, ptr));
  880|      0|            if (ptr >= end
  ------------------
  |  Branch (880:17): [True: 0, False: 0]
  ------------------
  881|      0|                || !SRE(charset)(state, pattern+1,
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (881:20): [True: 0, False: 0]
  ------------------
  882|      0|                                 (SRE_CODE)sre_lower_ascii(*ptr)))
  883|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  884|      0|            pattern += pattern[0];
  885|      0|            ptr++;
  886|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  887|       |
  888|      6|        TARGET(SRE_OP_IN_UNI_IGNORE):
  ------------------
  |  |  648|      6|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  889|      6|            TRACE(("|%p|%p|IN_UNI_IGNORE\n", pattern, ptr));
  890|      6|            if (ptr >= end
  ------------------
  |  Branch (890:17): [True: 2, False: 4]
  ------------------
  891|      4|                || !SRE(charset)(state, pattern+1,
  ------------------
  |  |  501|      4|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (891:20): [True: 2, False: 2]
  ------------------
  892|      4|                                 (SRE_CODE)sre_lower_unicode(*ptr)))
  893|      4|                RETURN_FAILURE;
  ------------------
  |  |  441|      4|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  894|      2|            pattern += pattern[0];
  895|      2|            ptr++;
  896|      2|            DISPATCH;
  ------------------
  |  |  650|      2|        do {                               \
  |  |  651|      2|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      2|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      2|    do {                                                           \
  |  |  |  |  |  |  616|      2|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 2]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      2|            goto *sre_targets[*pattern++]; \
  |  |  653|      2|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 2]
  |  |  ------------------
  ------------------
  897|       |
  898|      2|        TARGET(SRE_OP_IN_LOC_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  899|      0|            TRACE(("|%p|%p|IN_LOC_IGNORE\n", pattern, ptr));
  900|      0|            if (ptr >= end
  ------------------
  |  Branch (900:17): [True: 0, False: 0]
  ------------------
  901|      0|                || !SRE(charset_loc_ignore)(state, pattern+1, *ptr))
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (901:20): [True: 0, False: 0]
  ------------------
  902|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  903|      0|            pattern += pattern[0];
  904|      0|            ptr++;
  905|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
  906|       |
  907|      3|        TARGET(SRE_OP_JUMP):
  ------------------
  |  |  648|      3|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  908|      3|        TARGET(SRE_OP_INFO):
  ------------------
  |  |  648|      3|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  909|       |            /* jump forward */
  910|       |            /* <JUMP> <offset> */
  911|      3|            TRACE(("|%p|%p|JUMP %d\n", pattern,
  912|      3|                   ptr, pattern[0]));
  913|      3|            pattern += pattern[0];
  914|      3|            DISPATCH;
  ------------------
  |  |  650|      3|        do {                               \
  |  |  651|      3|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      3|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      3|    do {                                                           \
  |  |  |  |  |  |  616|      3|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 3]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      3|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      3|            goto *sre_targets[*pattern++]; \
  |  |  653|      3|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 3]
  |  |  ------------------
  ------------------
  915|       |
  916|      6|        TARGET(SRE_OP_BRANCH):
  ------------------
  |  |  648|      6|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  917|       |            /* alternation */
  918|       |            /* <BRANCH> <0=skip> code <JUMP> ... <NULL> */
  919|      6|            TRACE(("|%p|%p|BRANCH\n", pattern, ptr));
  920|      6|            LASTMARK_SAVE();
  ------------------
  |  |  417|      6|    do { \
  |  |  418|      6|        ctx->lastmark = state->lastmark; \
  |  |  419|      6|        ctx->lastindex = state->lastindex; \
  |  |  420|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
  921|      6|            if (state->save_marks)
  ------------------
  |  Branch (921:17): [True: 0, False: 6]
  ------------------
  922|      0|                MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  536|      0|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      0|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      0|do { \
  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  484|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  923|     16|            for (; pattern[0]; pattern += pattern[0]) {
  ------------------
  |  Branch (923:20): [True: 13, False: 3]
  ------------------
  924|     13|                if (pattern[1] == SRE_OP_LITERAL &&
  ------------------
  |  |   31|     26|#define SRE_OP_LITERAL 16
  ------------------
  |  Branch (924:21): [True: 3, False: 10]
  ------------------
  925|      3|                    (ptr >= end ||
  ------------------
  |  Branch (925:22): [True: 0, False: 3]
  ------------------
  926|      3|                     (SRE_CODE) *ptr != pattern[2]))
  ------------------
  |  Branch (926:22): [True: 3, False: 0]
  ------------------
  927|      3|                    continue;
  928|     10|                if (pattern[1] == SRE_OP_IN &&
  ------------------
  |  |   28|     20|#define SRE_OP_IN 13
  ------------------
  |  Branch (928:21): [True: 0, False: 10]
  ------------------
  929|      0|                    (ptr >= end ||
  ------------------
  |  Branch (929:22): [True: 0, False: 0]
  ------------------
  930|      0|                     !SRE(charset)(state, pattern + 3,
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (930:22): [True: 0, False: 0]
  ------------------
  931|      0|                                   (SRE_CODE) *ptr)))
  932|      0|                    continue;
  933|     10|                state->ptr = ptr;
  934|     10|                DO_JUMP(JUMP_BRANCH, jump_branch, pattern+1);
  ------------------
  |  |  594|     10|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|     10|    ctx->pattern = pattern; \
  |  |  |  |  579|     10|    ctx->ptr = ptr; \
  |  |  |  |  580|     10|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|     10|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|     10|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|     10|do { \
  |  |  |  |  |  |  |  |  453|     10|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|     10|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|     10|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|     10|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 10]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|     10|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|     10|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|     10|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 10]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|     10|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|     10|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|     10|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|     10|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|     10|    pattern = nextpattern; \
  |  |  |  |  586|     10|    ctx_pos = alloc_pos; \
  |  |  |  |  587|     10|    ctx = nextctx; \
  |  |  |  |  588|     10|    goto entrance; \
  |  |  |  |  589|     10|    jumplabel: \
  |  |  |  |  590|     10|    pattern = ctx->pattern; \
  |  |  |  |  591|     10|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
  935|     10|                if (ret) {
  ------------------
  |  Branch (935:21): [True: 3, False: 7]
  ------------------
  936|      3|                    if (state->save_marks)
  ------------------
  |  Branch (936:25): [True: 0, False: 3]
  ------------------
  937|      0|                        MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  938|      3|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      3|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 3]
  |  |  |  Branch (445:47): [Folded, False: 3]
  |  |  ------------------
  ------------------
  939|      3|                    RETURN_SUCCESS;
  ------------------
  |  |  442|      3|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  940|      3|                }
  941|      7|                if (state->save_marks)
  ------------------
  |  Branch (941:21): [True: 0, False: 7]
  ------------------
  942|      0|                    MARK_POP_KEEP(ctx->lastmark);
  ------------------
  |  |  547|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (547:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  548|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  549|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 0); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  550|      0|        MARK_TRACE("pop keep", (lastmark)); \
  |  |  551|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (551:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  943|      7|                LASTMARK_RESTORE();
  ------------------
  |  |  422|      7|    do { \
  |  |  423|      7|        state->lastmark = ctx->lastmark; \
  |  |  424|      7|        state->lastindex = ctx->lastindex; \
  |  |  425|      7|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 7]
  |  |  ------------------
  ------------------
  944|      7|            }
  945|      3|            if (state->save_marks)
  ------------------
  |  Branch (945:17): [True: 0, False: 3]
  ------------------
  946|      0|                MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  947|      3|            RETURN_FAILURE;
  ------------------
  |  |  441|      3|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  948|       |
  949|      1|        TARGET(SRE_OP_REPEAT_ONE):
  ------------------
  |  |  648|      1|    #define TARGET(OP) TARGET_ ## OP
  ------------------
  950|       |            /* match repeated sequence (maximizing regexp) */
  951|       |
  952|       |            /* this operator only works if the repeated item is
  953|       |               exactly one character wide, and we're not already
  954|       |               collecting backtracking points.  for other cases,
  955|       |               use the MAX_REPEAT operator */
  956|       |
  957|       |            /* <REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */
  958|       |
  959|      1|            TRACE(("|%p|%p|REPEAT_ONE %d %d\n", pattern, ptr,
  960|      1|                   pattern[1], pattern[2]));
  961|       |
  962|      1|            if ((Py_ssize_t) pattern[1] > end - ptr)
  ------------------
  |  Branch (962:17): [True: 0, False: 1]
  ------------------
  963|      0|                RETURN_FAILURE; /* cannot match */
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  964|       |
  965|      1|            state->ptr = ptr;
  966|       |
  967|      1|            ret = SRE(count)(state, pattern+3, pattern[2]);
  ------------------
  |  |  501|      1|#define SRE(F) sre_ucs1_##F
  ------------------
  968|      1|            RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      1|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 1]
  |  |  |  Branch (445:47): [Folded, False: 1]
  |  |  ------------------
  ------------------
  969|      1|            DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
  ------------------
  |  |  514|      1|    DATA_STACK_LOOKUP_AT(state,t,p,pos)
  |  |  ------------------
  |  |  |  |  466|      1|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  467|      1|do { \
  |  |  |  |  468|      1|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  469|      1|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  470|      1|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (470:10): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  970|      1|            ctx->count = ret;
  971|      1|            ptr += ctx->count;
  972|       |
  973|       |            /* when we arrive here, count contains the number of
  974|       |               matches, and ptr points to the tail of the target
  975|       |               string.  check if the rest of the pattern matches,
  976|       |               and backtrack if not. */
  977|       |
  978|      1|            if (ctx->count < (Py_ssize_t) pattern[1])
  ------------------
  |  Branch (978:17): [True: 0, False: 1]
  ------------------
  979|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  980|       |
  981|      1|            if (pattern[pattern[0]] == SRE_OP_SUCCESS &&
  ------------------
  |  |   16|      2|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (981:17): [True: 0, False: 1]
  ------------------
  982|      0|                ptr == state->end &&
  ------------------
  |  Branch (982:17): [True: 0, False: 0]
  ------------------
  983|      0|                !(ctx->toplevel && state->must_advance && ptr == state->start))
  ------------------
  |  Branch (983:19): [True: 0, False: 0]
  |  Branch (983:36): [True: 0, False: 0]
  |  Branch (983:59): [True: 0, False: 0]
  ------------------
  984|      0|            {
  985|       |                /* tail is empty.  we're finished */
  986|      0|                state->ptr = ptr;
  987|      0|                RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
  988|      0|            }
  989|       |
  990|      1|            LASTMARK_SAVE();
  ------------------
  |  |  417|      1|    do { \
  |  |  418|      1|        ctx->lastmark = state->lastmark; \
  |  |  419|      1|        ctx->lastindex = state->lastindex; \
  |  |  420|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  991|      1|            if (state->save_marks)
  ------------------
  |  Branch (991:17): [True: 0, False: 1]
  ------------------
  992|      0|                MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  536|      0|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      0|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      0|do { \
  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  484|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  993|       |
  994|      1|            if (pattern[pattern[0]] == SRE_OP_LITERAL) {
  ------------------
  |  |   31|      1|#define SRE_OP_LITERAL 16
  ------------------
  |  Branch (994:17): [True: 0, False: 1]
  ------------------
  995|       |                /* tail starts with a literal. skip positions where
  996|       |                   the rest of the pattern cannot possibly match */
  997|      0|                ctx->u.chr = pattern[pattern[0]+1];
  998|      0|                for (;;) {
  999|      0|                    while (ctx->count >= (Py_ssize_t) pattern[1] &&
  ------------------
  |  Branch (999:28): [True: 0, False: 0]
  ------------------
 1000|      0|                           (ptr >= end || *ptr != ctx->u.chr)) {
  ------------------
  |  Branch (1000:29): [True: 0, False: 0]
  |  Branch (1000:43): [True: 0, False: 0]
  ------------------
 1001|      0|                        ptr--;
 1002|      0|                        ctx->count--;
 1003|      0|                    }
 1004|      0|                    if (ctx->count < (Py_ssize_t) pattern[1])
  ------------------
  |  Branch (1004:25): [True: 0, False: 0]
  ------------------
 1005|      0|                        break;
 1006|      0|                    state->ptr = ptr;
 1007|      0|                    DO_JUMP(JUMP_REPEAT_ONE_1, jump_repeat_one_1,
  ------------------
  |  |  594|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1008|      0|                            pattern+pattern[0]);
 1009|      0|                    if (ret) {
  ------------------
  |  Branch (1009:25): [True: 0, False: 0]
  ------------------
 1010|      0|                        if (state->save_marks)
  ------------------
  |  Branch (1010:29): [True: 0, False: 0]
  ------------------
 1011|      0|                            MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1012|      0|                        RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1013|      0|                        RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1014|      0|                    }
 1015|      0|                    if (state->save_marks)
  ------------------
  |  Branch (1015:25): [True: 0, False: 0]
  ------------------
 1016|      0|                        MARK_POP_KEEP(ctx->lastmark);
  ------------------
  |  |  547|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (547:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  548|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  549|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 0); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  550|      0|        MARK_TRACE("pop keep", (lastmark)); \
  |  |  551|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (551:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1017|      0|                    LASTMARK_RESTORE();
  ------------------
  |  |  422|      0|    do { \
  |  |  423|      0|        state->lastmark = ctx->lastmark; \
  |  |  424|      0|        state->lastindex = ctx->lastindex; \
  |  |  425|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1018|       |
 1019|      0|                    ptr--;
 1020|      0|                    ctx->count--;
 1021|      0|                }
 1022|      0|                if (state->save_marks)
  ------------------
  |  Branch (1022:21): [True: 0, False: 0]
  ------------------
 1023|      0|                    MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1024|      1|            } else {
 1025|       |                /* general case */
 1026|      1|                while (ctx->count >= (Py_ssize_t) pattern[1]) {
  ------------------
  |  Branch (1026:24): [True: 1, False: 0]
  ------------------
 1027|      1|                    state->ptr = ptr;
 1028|      1|                    DO_JUMP(JUMP_REPEAT_ONE_2, jump_repeat_one_2,
  ------------------
  |  |  594|      1|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      1|    ctx->pattern = pattern; \
  |  |  |  |  579|      1|    ctx->ptr = ptr; \
  |  |  |  |  580|      1|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      1|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      1|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      1|do { \
  |  |  |  |  |  |  |  |  453|      1|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      1|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      1|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      1|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      1|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      1|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      1|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      1|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      1|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      1|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      1|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      1|    pattern = nextpattern; \
  |  |  |  |  586|      1|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      1|    ctx = nextctx; \
  |  |  |  |  588|      1|    goto entrance; \
  |  |  |  |  589|      1|    jumplabel: \
  |  |  |  |  590|      1|    pattern = ctx->pattern; \
  |  |  |  |  591|      1|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1029|      1|                            pattern+pattern[0]);
 1030|      1|                    if (ret) {
  ------------------
  |  Branch (1030:25): [True: 1, False: 0]
  ------------------
 1031|      1|                        if (state->save_marks)
  ------------------
  |  Branch (1031:29): [True: 0, False: 1]
  ------------------
 1032|      0|                            MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1033|      1|                        RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      1|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 1]
  |  |  |  Branch (445:47): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1034|      1|                        RETURN_SUCCESS;
  ------------------
  |  |  442|      1|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1035|      1|                    }
 1036|      0|                    if (state->save_marks)
  ------------------
  |  Branch (1036:25): [True: 0, False: 0]
  ------------------
 1037|      0|                        MARK_POP_KEEP(ctx->lastmark);
  ------------------
  |  |  547|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (547:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  548|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  549|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 0); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  550|      0|        MARK_TRACE("pop keep", (lastmark)); \
  |  |  551|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (551:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1038|      0|                    LASTMARK_RESTORE();
  ------------------
  |  |  422|      0|    do { \
  |  |  423|      0|        state->lastmark = ctx->lastmark; \
  |  |  424|      0|        state->lastindex = ctx->lastindex; \
  |  |  425|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1039|       |
 1040|      0|                    ptr--;
 1041|      0|                    ctx->count--;
 1042|      0|                }
 1043|      0|                if (state->save_marks)
  ------------------
  |  Branch (1043:21): [True: 0, False: 0]
  ------------------
 1044|      0|                    MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1045|      0|            }
 1046|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1047|       |
 1048|      0|        TARGET(SRE_OP_MIN_REPEAT_ONE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1049|       |            /* match repeated sequence (minimizing regexp) */
 1050|       |
 1051|       |            /* this operator only works if the repeated item is
 1052|       |               exactly one character wide, and we're not already
 1053|       |               collecting backtracking points.  for other cases,
 1054|       |               use the MIN_REPEAT operator */
 1055|       |
 1056|       |            /* <MIN_REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS> tail */
 1057|       |
 1058|      0|            TRACE(("|%p|%p|MIN_REPEAT_ONE %d %d\n", pattern, ptr,
 1059|      0|                   pattern[1], pattern[2]));
 1060|       |
 1061|      0|            if ((Py_ssize_t) pattern[1] > end - ptr)
  ------------------
  |  Branch (1061:17): [True: 0, False: 0]
  ------------------
 1062|      0|                RETURN_FAILURE; /* cannot match */
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1063|       |
 1064|      0|            state->ptr = ptr;
 1065|       |
 1066|      0|            if (pattern[1] == 0)
  ------------------
  |  Branch (1066:17): [True: 0, False: 0]
  ------------------
 1067|      0|                ctx->count = 0;
 1068|      0|            else {
 1069|       |                /* count using pattern min as the maximum */
 1070|      0|                ret = SRE(count)(state, pattern+3, pattern[1]);
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
 1071|      0|                RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1072|      0|                DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
  ------------------
  |  |  514|      0|    DATA_STACK_LOOKUP_AT(state,t,p,pos)
  |  |  ------------------
  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  467|      0|do { \
  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  470|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|      0|                if (ret < (Py_ssize_t) pattern[1])
  ------------------
  |  Branch (1073:21): [True: 0, False: 0]
  ------------------
 1074|       |                    /* didn't match minimum number of times */
 1075|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1076|       |                /* advance past minimum matches of repeat */
 1077|      0|                ctx->count = ret;
 1078|      0|                ptr += ctx->count;
 1079|      0|            }
 1080|       |
 1081|      0|            if (pattern[pattern[0]] == SRE_OP_SUCCESS &&
  ------------------
  |  |   16|      0|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (1081:17): [True: 0, False: 0]
  ------------------
 1082|      0|                !(ctx->toplevel &&
  ------------------
  |  Branch (1082:19): [True: 0, False: 0]
  ------------------
 1083|      0|                  ((state->match_all && ptr != state->end) ||
  ------------------
  |  Branch (1083:21): [True: 0, False: 0]
  |  Branch (1083:41): [True: 0, False: 0]
  ------------------
 1084|      0|                   (state->must_advance && ptr == state->start))))
  ------------------
  |  Branch (1084:21): [True: 0, False: 0]
  |  Branch (1084:44): [True: 0, False: 0]
  ------------------
 1085|      0|            {
 1086|       |                /* tail is empty.  we're finished */
 1087|      0|                state->ptr = ptr;
 1088|      0|                RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1089|       |
 1090|      0|            } else {
 1091|       |                /* general case */
 1092|      0|                LASTMARK_SAVE();
  ------------------
  |  |  417|      0|    do { \
  |  |  418|      0|        ctx->lastmark = state->lastmark; \
  |  |  419|      0|        ctx->lastindex = state->lastindex; \
  |  |  420|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1093|      0|                if (state->save_marks)
  ------------------
  |  Branch (1093:21): [True: 0, False: 0]
  ------------------
 1094|      0|                    MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  536|      0|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      0|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      0|do { \
  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  484|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1095|       |
 1096|      0|                while ((Py_ssize_t)pattern[2] == SRE_MAXREPEAT
  ------------------
  |  |   20|      0|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (1096:24): [True: 0, False: 0]
  ------------------
 1097|      0|                       || ctx->count <= (Py_ssize_t)pattern[2]) {
  ------------------
  |  Branch (1097:27): [True: 0, False: 0]
  ------------------
 1098|      0|                    state->ptr = ptr;
 1099|      0|                    DO_JUMP(JUMP_MIN_REPEAT_ONE,jump_min_repeat_one,
  ------------------
  |  |  594|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1100|      0|                            pattern+pattern[0]);
 1101|      0|                    if (ret) {
  ------------------
  |  Branch (1101:25): [True: 0, False: 0]
  ------------------
 1102|      0|                        if (state->save_marks)
  ------------------
  |  Branch (1102:29): [True: 0, False: 0]
  ------------------
 1103|      0|                            MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1104|      0|                        RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1105|      0|                        RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1106|      0|                    }
 1107|      0|                    if (state->save_marks)
  ------------------
  |  Branch (1107:25): [True: 0, False: 0]
  ------------------
 1108|      0|                        MARK_POP_KEEP(ctx->lastmark);
  ------------------
  |  |  547|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (547:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  548|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  549|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 0); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  550|      0|        MARK_TRACE("pop keep", (lastmark)); \
  |  |  551|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (551:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1109|      0|                    LASTMARK_RESTORE();
  ------------------
  |  |  422|      0|    do { \
  |  |  423|      0|        state->lastmark = ctx->lastmark; \
  |  |  424|      0|        state->lastindex = ctx->lastindex; \
  |  |  425|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1110|       |
 1111|      0|                    state->ptr = ptr;
 1112|      0|                    ret = SRE(count)(state, pattern+3, 1);
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
 1113|      0|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1114|      0|                    DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
  ------------------
  |  |  514|      0|    DATA_STACK_LOOKUP_AT(state,t,p,pos)
  |  |  ------------------
  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  467|      0|do { \
  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  470|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1115|      0|                    if (ret == 0)
  ------------------
  |  Branch (1115:25): [True: 0, False: 0]
  ------------------
 1116|      0|                        break;
 1117|      0|                    assert(ret == 1);
  ------------------
  |  Branch (1117:21): [True: 0, False: 0]
  ------------------
 1118|      0|                    ptr++;
 1119|      0|                    ctx->count++;
 1120|      0|                }
 1121|      0|                if (state->save_marks)
  ------------------
  |  Branch (1121:21): [True: 0, False: 0]
  ------------------
 1122|      0|                    MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1123|      0|            }
 1124|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1125|       |
 1126|      0|        TARGET(SRE_OP_POSSESSIVE_REPEAT_ONE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1127|       |            /* match repeated sequence (maximizing regexp) without
 1128|       |               backtracking */
 1129|       |
 1130|       |            /* this operator only works if the repeated item is
 1131|       |               exactly one character wide, and we're not already
 1132|       |               collecting backtracking points.  for other cases,
 1133|       |               use the MAX_REPEAT operator */
 1134|       |
 1135|       |            /* <POSSESSIVE_REPEAT_ONE> <skip> <1=min> <2=max> item <SUCCESS>
 1136|       |               tail */
 1137|       |
 1138|      0|            TRACE(("|%p|%p|POSSESSIVE_REPEAT_ONE %d %d\n", pattern,
 1139|      0|                   ptr, pattern[1], pattern[2]));
 1140|       |
 1141|      0|            if (ptr + pattern[1] > end) {
  ------------------
  |  Branch (1141:17): [True: 0, False: 0]
  ------------------
 1142|      0|                RETURN_FAILURE; /* cannot match */
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1143|      0|            }
 1144|       |
 1145|      0|            state->ptr = ptr;
 1146|       |
 1147|      0|            ret = SRE(count)(state, pattern + 3, pattern[2]);
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
 1148|      0|            RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1149|      0|            DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
  ------------------
  |  |  514|      0|    DATA_STACK_LOOKUP_AT(state,t,p,pos)
  |  |  ------------------
  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  467|      0|do { \
  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  470|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1150|      0|            ctx->count = ret;
 1151|      0|            ptr += ctx->count;
 1152|       |
 1153|       |            /* when we arrive here, count contains the number of
 1154|       |               matches, and ptr points to the tail of the target
 1155|       |               string.  check if the rest of the pattern matches,
 1156|       |               and fail if not. */
 1157|       |
 1158|       |            /* Test for not enough repetitions in match */
 1159|      0|            if (ctx->count < (Py_ssize_t) pattern[1]) {
  ------------------
  |  Branch (1159:17): [True: 0, False: 0]
  ------------------
 1160|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1161|      0|            }
 1162|       |
 1163|       |            /* Update the pattern to point to the next op code */
 1164|      0|            pattern += pattern[0];
 1165|       |
 1166|       |            /* Let the tail be evaluated separately and consider this
 1167|       |               match successful. */
 1168|      0|            if (*pattern == SRE_OP_SUCCESS &&
  ------------------
  |  |   16|      0|#define SRE_OP_SUCCESS 1
  ------------------
  |  Branch (1168:17): [True: 0, False: 0]
  ------------------
 1169|      0|                ptr == state->end &&
  ------------------
  |  Branch (1169:17): [True: 0, False: 0]
  ------------------
 1170|      0|                !(ctx->toplevel && state->must_advance && ptr == state->start))
  ------------------
  |  Branch (1170:19): [True: 0, False: 0]
  |  Branch (1170:36): [True: 0, False: 0]
  |  Branch (1170:59): [True: 0, False: 0]
  ------------------
 1171|      0|            {
 1172|       |                /* tail is empty.  we're finished */
 1173|      0|                state->ptr = ptr;
 1174|      0|                RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1175|      0|            }
 1176|       |
 1177|       |            /* Attempt to match the rest of the string */
 1178|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1179|       |
 1180|      6|        TARGET(SRE_OP_REPEAT):
  ------------------
  |  |  648|      6|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1181|       |            /* create repeat context.  all the hard work is done
 1182|       |               by the UNTIL operator (MAX_UNTIL, MIN_UNTIL) */
 1183|       |            /* <REPEAT> <skip> <1=min> <2=max>
 1184|       |               <3=repeat_index> item <UNTIL> tail */
 1185|      6|            TRACE(("|%p|%p|REPEAT %d %d\n", pattern, ptr,
 1186|      6|                   pattern[1], pattern[2]));
 1187|       |
 1188|       |            /* install new repeat context */
 1189|      6|            ctx->u.rep = repeat_pool_malloc(state);
 1190|      6|            if (!ctx->u.rep) {
  ------------------
  |  Branch (1190:17): [True: 0, False: 6]
  ------------------
 1191|      0|                RETURN_ERROR(SRE_ERROR_MEMORY);
  ------------------
  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  ------------------
  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1192|      0|            }
 1193|      6|            ctx->u.rep->count = -1;
 1194|      6|            ctx->u.rep->pattern = pattern;
 1195|      6|            ctx->u.rep->prev = state->repeat;
 1196|      6|            ctx->u.rep->last_ptr = NULL;
 1197|      6|            state->repeat = ctx->u.rep;
 1198|      6|            state->save_marks++;
 1199|       |
 1200|      6|            state->ptr = ptr;
 1201|      6|            DO_JUMP(JUMP_REPEAT, jump_repeat, pattern+pattern[0]);
  ------------------
  |  |  594|      6|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      6|    ctx->pattern = pattern; \
  |  |  |  |  579|      6|    ctx->ptr = ptr; \
  |  |  |  |  580|      6|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      6|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      6|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      6|do { \
  |  |  |  |  |  |  |  |  453|      6|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      6|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      6|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      6|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      6|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      6|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      6|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      6|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      6|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      6|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      6|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      6|    pattern = nextpattern; \
  |  |  |  |  586|      6|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      6|    ctx = nextctx; \
  |  |  |  |  588|      6|    goto entrance; \
  |  |  |  |  589|      6|    jumplabel: \
  |  |  |  |  590|      6|    pattern = ctx->pattern; \
  |  |  |  |  591|      6|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1202|      6|            state->repeat = ctx->u.rep->prev;
 1203|      6|            state->save_marks--;
 1204|      6|            repeat_pool_free(state, ctx->u.rep);
 1205|       |
 1206|      6|            if (ret) {
  ------------------
  |  Branch (1206:17): [True: 6, False: 0]
  ------------------
 1207|      6|                RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      6|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 6]
  |  |  |  Branch (445:47): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1208|      6|                RETURN_SUCCESS;
  ------------------
  |  |  442|      6|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1209|      6|            }
 1210|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1211|       |
 1212|      7|        TARGET(SRE_OP_MAX_UNTIL):
  ------------------
  |  |  648|      7|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1213|       |            /* maximizing repeat */
 1214|       |            /* <REPEAT> <skip> <1=min> <2=max> item <MAX_UNTIL> tail */
 1215|       |
 1216|       |            /* FIXME: we probably need to deal with zero-width
 1217|       |               matches in here... */
 1218|       |
 1219|      7|            ctx->u.rep = state->repeat;
 1220|      7|            if (!ctx->u.rep)
  ------------------
  |  Branch (1220:17): [True: 0, False: 7]
  ------------------
 1221|      0|                RETURN_ERROR(SRE_ERROR_STATE);
  ------------------
  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  ------------------
  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1222|       |
 1223|      7|            state->ptr = ptr;
 1224|       |
 1225|      7|            ctx->count = ctx->u.rep->count+1;
 1226|       |
 1227|      7|            TRACE(("|%p|%p|MAX_UNTIL %zd\n", pattern,
 1228|      7|                   ptr, ctx->count));
 1229|       |
 1230|      7|            if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
  ------------------
  |  Branch (1230:17): [True: 0, False: 7]
  ------------------
 1231|       |                /* not enough matches */
 1232|      0|                ctx->u.rep->count = ctx->count;
 1233|      0|                DO_JUMP(JUMP_MAX_UNTIL_1, jump_max_until_1,
  ------------------
  |  |  594|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1234|      0|                        ctx->u.rep->pattern+3);
 1235|      0|                if (ret) {
  ------------------
  |  Branch (1235:21): [True: 0, False: 0]
  ------------------
 1236|      0|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1237|      0|                    RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1238|      0|                }
 1239|      0|                ctx->u.rep->count = ctx->count-1;
 1240|      0|                state->ptr = ptr;
 1241|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1242|      0|            }
 1243|       |
 1244|      7|            if ((ctx->count < (Py_ssize_t) ctx->u.rep->pattern[2] ||
  ------------------
  |  Branch (1244:18): [True: 6, False: 1]
  ------------------
 1245|      1|                ctx->u.rep->pattern[2] == SRE_MAXREPEAT) &&
  ------------------
  |  |   20|      1|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (1245:17): [True: 0, False: 1]
  ------------------
 1246|      6|                state->ptr != ctx->u.rep->last_ptr) {
  ------------------
  |  Branch (1246:17): [True: 6, False: 0]
  ------------------
 1247|       |                /* we may have enough matches, but if we can
 1248|       |                   match another item, do so */
 1249|      6|                ctx->u.rep->count = ctx->count;
 1250|      6|                LASTMARK_SAVE();
  ------------------
  |  |  417|      6|    do { \
  |  |  418|      6|        ctx->lastmark = state->lastmark; \
  |  |  419|      6|        ctx->lastindex = state->lastindex; \
  |  |  420|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1251|      6|                MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      6|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 3, False: 3]
  |  |  ------------------
  |  |  536|      3|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      3|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      3|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      3|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      3|do { \
  |  |  |  |  474|      3|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      3|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      3|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      3|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      3|    state->data_stack_base += size; \
  |  |  |  |  484|      3|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1252|       |                /* zero-width match protection */
 1253|      6|                LAST_PTR_PUSH();
  ------------------
  |  |  428|      6|    do { \
  |  |  429|      6|        TRACE(("push last_ptr: %zd", \
  |  |  430|      6|                PTR_TO_INDEX(ctx->u.rep->last_ptr))); \
  |  |  431|      6|        DATA_PUSH(&ctx->u.rep->last_ptr); \
  |  |  ------------------
  |  |  |  |  506|      6|    DATA_STACK_PUSH(state, (x), sizeof(*(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      6|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  |  |  473|      6|do { \
  |  |  |  |  |  |  474|      6|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  |  |  475|      6|           data, state->data_stack_base, size)); \
  |  |  |  |  |  |  476|      6|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:9): [True: 0, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  481|      0|    } \
  |  |  |  |  |  |  482|      6|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  |  |  483|      6|    state->data_stack_base += size; \
  |  |  |  |  |  |  484|      6|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (484:10): [Folded, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  432|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (432:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1254|      6|                ctx->u.rep->last_ptr = state->ptr;
 1255|      6|                DO_JUMP(JUMP_MAX_UNTIL_2, jump_max_until_2,
  ------------------
  |  |  594|      6|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      6|    ctx->pattern = pattern; \
  |  |  |  |  579|      6|    ctx->ptr = ptr; \
  |  |  |  |  580|      6|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      6|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      6|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      6|do { \
  |  |  |  |  |  |  |  |  453|      6|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      6|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      6|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      6|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      6|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      6|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      6|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      6|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      6|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      6|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      6|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      6|    pattern = nextpattern; \
  |  |  |  |  586|      6|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      6|    ctx = nextctx; \
  |  |  |  |  588|      6|    goto entrance; \
  |  |  |  |  589|      6|    jumplabel: \
  |  |  |  |  590|      6|    pattern = ctx->pattern; \
  |  |  |  |  591|      6|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1256|      6|                        ctx->u.rep->pattern+3);
 1257|      6|                LAST_PTR_POP();
  ------------------
  |  |  434|      6|    do { \
  |  |  435|      6|        DATA_POP(&ctx->u.rep->last_ptr); \
  |  |  ------------------
  |  |  |  |  508|      6|    DATA_STACK_POP(state, (x), sizeof(*(x)), 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      6|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  |  |  490|      6|do { \
  |  |  |  |  |  |  491|      6|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  |  |  492|      6|           data, state->data_stack_base-size, size)); \
  |  |  |  |  |  |  493|      6|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  |  |  494|      6|    if (discard) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (494:9): [True: 6, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  495|      6|        state->data_stack_base -= size; \
  |  |  |  |  |  |  496|      6|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (496:10): [Folded, False: 6]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  436|      6|        TRACE(("pop last_ptr: %zd", \
  |  |  437|      6|                PTR_TO_INDEX(ctx->u.rep->last_ptr))); \
  |  |  438|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (438:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1258|      6|                if (ret) {
  ------------------
  |  Branch (1258:21): [True: 1, False: 5]
  ------------------
 1259|      1|                    MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      1|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 1]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1260|      1|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      1|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 1]
  |  |  |  Branch (445:47): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1261|      1|                    RETURN_SUCCESS;
  ------------------
  |  |  442|      1|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1262|      1|                }
 1263|      5|                MARK_POP(ctx->lastmark);
  ------------------
  |  |  541|      5|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (541:12): [True: 3, False: 2]
  |  |  ------------------
  |  |  542|      3|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  543|      3|        DATA_STACK_POP(state, state->mark, _marks_size, 1); \
  |  |  ------------------
  |  |  |  |  489|      3|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      3|do { \
  |  |  |  |  491|      3|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      3|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      3|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      3|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [True: 3, Folded]
  |  |  |  |  ------------------
  |  |  |  |  495|      3|        state->data_stack_base -= size; \
  |  |  |  |  496|      3|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  544|      3|        MARK_TRACE("pop", (lastmark)); \
  |  |  545|      5|    } while (0)
  |  |  ------------------
  |  |  |  Branch (545:14): [Folded, False: 5]
  |  |  ------------------
  ------------------
 1264|      5|                LASTMARK_RESTORE();
  ------------------
  |  |  422|      5|    do { \
  |  |  423|      5|        state->lastmark = ctx->lastmark; \
  |  |  424|      5|        state->lastindex = ctx->lastindex; \
  |  |  425|      5|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 5]
  |  |  ------------------
  ------------------
 1265|      5|                ctx->u.rep->count = ctx->count-1;
 1266|      5|                state->ptr = ptr;
 1267|      5|            }
 1268|       |
 1269|       |            /* cannot match more repeated items here.  make sure the
 1270|       |               tail matches */
 1271|      6|            state->repeat = ctx->u.rep->prev;
 1272|      6|            state->save_marks--;
 1273|      6|            DO_JUMP(JUMP_MAX_UNTIL_3, jump_max_until_3, pattern);
  ------------------
  |  |  594|      6|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      6|    ctx->pattern = pattern; \
  |  |  |  |  579|      6|    ctx->ptr = ptr; \
  |  |  |  |  580|      6|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      6|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      6|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      6|do { \
  |  |  |  |  |  |  |  |  453|      6|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      6|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      6|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      6|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      6|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      6|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      6|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      6|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      6|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      6|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      6|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      6|    pattern = nextpattern; \
  |  |  |  |  586|      6|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      6|    ctx = nextctx; \
  |  |  |  |  588|      6|    goto entrance; \
  |  |  |  |  589|      6|    jumplabel: \
  |  |  |  |  590|      6|    pattern = ctx->pattern; \
  |  |  |  |  591|      6|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1274|      6|            state->repeat = ctx->u.rep; // restore repeat before return
 1275|      6|            state->save_marks++;
 1276|       |
 1277|      6|            RETURN_ON_SUCCESS(ret);
  ------------------
  |  |  447|      6|    do { RETURN_ON_ERROR(i); if (i > 0) RETURN_SUCCESS; } while (0)
  |  |  ------------------
  |  |  |  |  445|      6|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (445:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (445:47): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   do { RETURN_ON_ERROR(i); if (i > 0) RETURN_SUCCESS; } while (0)
  |  |  ------------------
  |  |  |  |  442|      6|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (447:34): [True: 6, False: 0]
  |  |  |  Branch (447:66): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1278|      0|            state->ptr = ptr;
 1279|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1280|       |
 1281|      0|        TARGET(SRE_OP_MIN_UNTIL):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1282|       |            /* minimizing repeat */
 1283|       |            /* <REPEAT> <skip> <1=min> <2=max> item <MIN_UNTIL> tail */
 1284|       |
 1285|      0|            ctx->u.rep = state->repeat;
 1286|      0|            if (!ctx->u.rep)
  ------------------
  |  Branch (1286:17): [True: 0, False: 0]
  ------------------
 1287|      0|                RETURN_ERROR(SRE_ERROR_STATE);
  ------------------
  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  ------------------
  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1288|       |
 1289|      0|            state->ptr = ptr;
 1290|       |
 1291|      0|            ctx->count = ctx->u.rep->count+1;
 1292|       |
 1293|      0|            TRACE(("|%p|%p|MIN_UNTIL %zd %p\n", pattern,
 1294|      0|                   ptr, ctx->count, ctx->u.rep->pattern));
 1295|       |
 1296|      0|            if (ctx->count < (Py_ssize_t) ctx->u.rep->pattern[1]) {
  ------------------
  |  Branch (1296:17): [True: 0, False: 0]
  ------------------
 1297|       |                /* not enough matches */
 1298|      0|                ctx->u.rep->count = ctx->count;
 1299|      0|                DO_JUMP(JUMP_MIN_UNTIL_1, jump_min_until_1,
  ------------------
  |  |  594|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1300|      0|                        ctx->u.rep->pattern+3);
 1301|      0|                if (ret) {
  ------------------
  |  Branch (1301:21): [True: 0, False: 0]
  ------------------
 1302|      0|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1303|      0|                    RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1304|      0|                }
 1305|      0|                ctx->u.rep->count = ctx->count-1;
 1306|      0|                state->ptr = ptr;
 1307|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1308|      0|            }
 1309|       |
 1310|       |            /* see if the tail matches */
 1311|      0|            state->repeat = ctx->u.rep->prev;
 1312|      0|            state->save_marks--;
 1313|       |
 1314|      0|            LASTMARK_SAVE();
  ------------------
  |  |  417|      0|    do { \
  |  |  418|      0|        ctx->lastmark = state->lastmark; \
  |  |  419|      0|        ctx->lastindex = state->lastindex; \
  |  |  420|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1315|      0|            if (state->save_marks)
  ------------------
  |  Branch (1315:17): [True: 0, False: 0]
  ------------------
 1316|      0|                MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  536|      0|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      0|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      0|do { \
  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  484|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1317|       |
 1318|      0|            DO_JUMP(JUMP_MIN_UNTIL_2, jump_min_until_2, pattern);
  ------------------
  |  |  594|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1319|       |            /* save_marks is balanced across the jump, so this equals the
 1320|       |               value tested for MARK_PUSH above */
 1321|      0|            int pushed = state->save_marks != 0;
 1322|      0|            state->repeat = ctx->u.rep; // restore repeat before return
 1323|      0|            state->save_marks++;
 1324|       |
 1325|      0|            if (ret) {
  ------------------
  |  Branch (1325:17): [True: 0, False: 0]
  ------------------
 1326|      0|                if (pushed)
  ------------------
  |  Branch (1326:21): [True: 0, False: 0]
  ------------------
 1327|      0|                    MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1328|      0|                RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1329|      0|                RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1330|      0|            }
 1331|      0|            if (pushed)
  ------------------
  |  Branch (1331:17): [True: 0, False: 0]
  ------------------
 1332|      0|                MARK_POP(ctx->lastmark);
  ------------------
  |  |  541|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (541:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  542|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  543|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 1); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  544|      0|        MARK_TRACE("pop", (lastmark)); \
  |  |  545|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (545:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1333|      0|            LASTMARK_RESTORE();
  ------------------
  |  |  422|      0|    do { \
  |  |  423|      0|        state->lastmark = ctx->lastmark; \
  |  |  424|      0|        state->lastindex = ctx->lastindex; \
  |  |  425|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1334|       |
 1335|      0|            state->ptr = ptr;
 1336|       |
 1337|      0|            if ((ctx->count >= (Py_ssize_t) ctx->u.rep->pattern[2]
  ------------------
  |  Branch (1337:18): [True: 0, False: 0]
  ------------------
 1338|      0|                && ctx->u.rep->pattern[2] != SRE_MAXREPEAT) ||
  ------------------
  |  |   20|      0|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (1338:20): [True: 0, False: 0]
  ------------------
 1339|      0|                state->ptr == ctx->u.rep->last_ptr)
  ------------------
  |  Branch (1339:17): [True: 0, False: 0]
  ------------------
 1340|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1341|       |
 1342|      0|            ctx->u.rep->count = ctx->count;
 1343|       |            /* zero-width match protection */
 1344|      0|            LAST_PTR_PUSH();
  ------------------
  |  |  428|      0|    do { \
  |  |  429|      0|        TRACE(("push last_ptr: %zd", \
  |  |  430|      0|                PTR_TO_INDEX(ctx->u.rep->last_ptr))); \
  |  |  431|      0|        DATA_PUSH(&ctx->u.rep->last_ptr); \
  |  |  ------------------
  |  |  |  |  506|      0|    DATA_STACK_PUSH(state, (x), sizeof(*(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  |  |  473|      0|do { \
  |  |  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  481|      0|    } \
  |  |  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  |  |  484|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  432|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (432:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1345|      0|            ctx->u.rep->last_ptr = state->ptr;
 1346|      0|            DO_JUMP(JUMP_MIN_UNTIL_3,jump_min_until_3,
  ------------------
  |  |  594|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, ctx->toplevel)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1347|      0|                    ctx->u.rep->pattern+3);
 1348|      0|            LAST_PTR_POP();
  ------------------
  |  |  434|      0|    do { \
  |  |  435|      0|        DATA_POP(&ctx->u.rep->last_ptr); \
  |  |  ------------------
  |  |  |  |  508|      0|    DATA_STACK_POP(state, (x), sizeof(*(x)), 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  |  |  490|      0|do { \
  |  |  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (494:9): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  |  |  496|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  436|      0|        TRACE(("pop last_ptr: %zd", \
  |  |  437|      0|                PTR_TO_INDEX(ctx->u.rep->last_ptr))); \
  |  |  438|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (438:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1349|      0|            if (ret) {
  ------------------
  |  Branch (1349:17): [True: 0, False: 0]
  ------------------
 1350|      0|                RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1351|      0|                RETURN_SUCCESS;
  ------------------
  |  |  442|      0|#define RETURN_SUCCESS do { ret = 1; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (442:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1352|      0|            }
 1353|      0|            ctx->u.rep->count = ctx->count-1;
 1354|      0|            state->ptr = ptr;
 1355|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1356|       |
 1357|      0|        TARGET(SRE_OP_POSSESSIVE_REPEAT):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1358|       |            /* create possessive repeat contexts. */
 1359|       |            /* <POSSESSIVE_REPEAT> <skip> <1=min> <2=max> pattern
 1360|       |               <SUCCESS> tail */
 1361|      0|            TRACE(("|%p|%p|POSSESSIVE_REPEAT %d %d\n", pattern,
 1362|      0|                   ptr, pattern[1], pattern[2]));
 1363|       |
 1364|       |            /* Set the global Input pointer to this context's Input
 1365|       |               pointer */
 1366|      0|            state->ptr = ptr;
 1367|       |
 1368|       |            /* Capture groups in the body can be revisited on backtracking
 1369|       |               between iterations, so their marks must be saved and restored,
 1370|       |               as is done inside a repeat. */
 1371|      0|            state->save_marks++;
 1372|       |
 1373|       |            /* Initialize Count to 0 */
 1374|      0|            ctx->count = 0;
 1375|       |
 1376|       |            /* Check for minimum required matches. */
 1377|      0|            while (ctx->count < (Py_ssize_t)pattern[1]) {
  ------------------
  |  Branch (1377:20): [True: 0, False: 0]
  ------------------
 1378|       |                /* not enough matches */
 1379|      0|                DO_JUMP0(JUMP_POSS_REPEAT_1, jump_poss_repeat_1,
  ------------------
  |  |  597|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, 0)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1380|      0|                         &pattern[3]);
 1381|      0|                if (ret) {
  ------------------
  |  Branch (1381:21): [True: 0, False: 0]
  ------------------
 1382|      0|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1383|      0|                    ctx->count++;
 1384|      0|                }
 1385|      0|                else {
 1386|      0|                    state->ptr = ptr;
 1387|      0|                    state->save_marks--;
 1388|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1389|      0|                }
 1390|      0|            }
 1391|       |
 1392|       |            /* Clear the context's Input stream pointer so that it
 1393|       |               doesn't match the global state so that the while loop can
 1394|       |               be entered. */
 1395|      0|            ptr = NULL;
 1396|       |
 1397|       |            /* Keep trying to parse the <pattern> sub-pattern until the
 1398|       |               end is reached, creating a new context each time. */
 1399|      0|            while ((ctx->count < (Py_ssize_t)pattern[2] ||
  ------------------
  |  Branch (1399:21): [True: 0, False: 0]
  ------------------
 1400|      0|                    (Py_ssize_t)pattern[2] == SRE_MAXREPEAT) &&
  ------------------
  |  |   20|      0|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (1400:21): [True: 0, False: 0]
  ------------------
 1401|      0|                   state->ptr != ptr) {
  ------------------
  |  Branch (1401:20): [True: 0, False: 0]
  ------------------
 1402|       |                /* Save the Capture Group Marker state into the current
 1403|       |                   Context and back up the current highest number
 1404|       |                   Capture Group marker. */
 1405|      0|                LASTMARK_SAVE();
  ------------------
  |  |  417|      0|    do { \
  |  |  418|      0|        ctx->lastmark = state->lastmark; \
  |  |  419|      0|        ctx->lastindex = state->lastindex; \
  |  |  420|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1406|      0|                MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  536|      0|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      0|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      0|do { \
  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  484|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1407|       |
 1408|       |                /* zero-width match protection */
 1409|       |                /* Set the context's Input Stream pointer to be the
 1410|       |                   current Input Stream pointer from the global
 1411|       |                   state.  When the loop reaches the next iteration,
 1412|       |                   the context will then store the last known good
 1413|       |                   position with the global state holding the Input
 1414|       |                   Input Stream position that has been updated with
 1415|       |                   the most recent match.  Thus, if state's Input
 1416|       |                   stream remains the same as the one stored in the
 1417|       |                   current Context, we know we have successfully
 1418|       |                   matched an empty string and that all subsequent
 1419|       |                   matches will also be the empty string until the
 1420|       |                   maximum number of matches are counted, and because
 1421|       |                   of this, we could immediately stop at that point and
 1422|       |                   consider this match successful. */
 1423|      0|                ptr = state->ptr;
 1424|       |
 1425|       |                /* We have not reached the maximin matches, so try to
 1426|       |                   match once more. */
 1427|      0|                DO_JUMP0(JUMP_POSS_REPEAT_2, jump_poss_repeat_2,
  ------------------
  |  |  597|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, 0)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1428|      0|                         &pattern[3]);
 1429|       |
 1430|       |                /* Check to see if the last attempted match
 1431|       |                   succeeded. */
 1432|      0|                if (ret) {
  ------------------
  |  Branch (1432:21): [True: 0, False: 0]
  ------------------
 1433|       |                    /* Drop the saved highest number Capture Group
 1434|       |                       marker saved above and use the newly updated
 1435|       |                       value. */
 1436|      0|                    MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1437|      0|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1438|       |
 1439|       |                    /* Success, increment the count. */
 1440|      0|                    ctx->count++;
 1441|      0|                }
 1442|       |                /* Last attempted match failed. */
 1443|      0|                else {
 1444|       |                    /* Restore the previously saved highest number
 1445|       |                       Capture Group marker since the last iteration
 1446|       |                       did not match, then restore that to the global
 1447|       |                       state. */
 1448|      0|                    MARK_POP(ctx->lastmark);
  ------------------
  |  |  541|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (541:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  542|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  543|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 1); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  544|      0|        MARK_TRACE("pop", (lastmark)); \
  |  |  545|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (545:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1449|      0|                    LASTMARK_RESTORE();
  ------------------
  |  |  422|      0|    do { \
  |  |  423|      0|        state->lastmark = ctx->lastmark; \
  |  |  424|      0|        state->lastindex = ctx->lastindex; \
  |  |  425|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1450|       |
 1451|       |                    /* Restore the global Input Stream pointer
 1452|       |                       since it can change after jumps. */
 1453|      0|                    state->ptr = ptr;
 1454|       |
 1455|       |                    /* We have sufficient matches, so exit loop. */
 1456|      0|                    break;
 1457|      0|                }
 1458|      0|            }
 1459|       |
 1460|      0|            state->save_marks--;
 1461|       |
 1462|       |            /* Evaluate Tail */
 1463|       |            /* Jump to end of pattern indicated by skip, and then skip
 1464|       |               the SUCCESS op code that follows it. */
 1465|      0|            pattern += pattern[0] + 1;
 1466|      0|            ptr = state->ptr;
 1467|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1468|       |
 1469|      0|        TARGET(SRE_OP_ATOMIC_GROUP):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1470|       |            /* Atomic Group Sub Pattern */
 1471|       |            /* <ATOMIC_GROUP> <skip> pattern <SUCCESS> tail */
 1472|      0|            TRACE(("|%p|%p|ATOMIC_GROUP\n", pattern, ptr));
 1473|       |
 1474|       |            /* Set the global Input pointer to this context's Input
 1475|       |               pointer */
 1476|      0|            state->ptr = ptr;
 1477|       |
 1478|       |            /* Evaluate the Atomic Group in a new context, terminating
 1479|       |               when the end of the group, represented by a SUCCESS op
 1480|       |               code, is reached. */
 1481|       |            /* Group Pattern begins at an offset of 1 code. */
 1482|      0|            DO_JUMP0(JUMP_ATOMIC_GROUP, jump_atomic_group,
  ------------------
  |  |  597|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, 0)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1483|      0|                     &pattern[1]);
 1484|       |
 1485|       |            /* Test Exit Condition */
 1486|      0|            RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1487|       |
 1488|      0|            if (ret == 0) {
  ------------------
  |  Branch (1488:17): [True: 0, False: 0]
  ------------------
 1489|       |                /* Atomic Group failed to Match. */
 1490|      0|                state->ptr = ptr;
 1491|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1492|      0|            }
 1493|       |
 1494|       |            /* Evaluate Tail */
 1495|       |            /* Jump to end of pattern indicated by skip, and then skip
 1496|       |               the SUCCESS op code that follows it. */
 1497|      0|            pattern += pattern[0];
 1498|      0|            ptr = state->ptr;
 1499|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1500|       |
 1501|      0|        TARGET(SRE_OP_GROUPREF):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1502|       |            /* match backreference */
 1503|      0|            TRACE(("|%p|%p|GROUPREF %d\n", pattern,
 1504|      0|                   ptr, pattern[0]));
 1505|      0|            {
 1506|      0|                int groupref = pattern[0] * 2;
 1507|      0|                if (groupref >= state->lastmark) {
  ------------------
  |  Branch (1507:21): [True: 0, False: 0]
  ------------------
 1508|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1509|      0|                } else {
 1510|      0|                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1511|      0|                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1512|      0|                    if (!p || !e || e < p)
  ------------------
  |  Branch (1512:25): [True: 0, False: 0]
  |  Branch (1512:31): [True: 0, False: 0]
  |  Branch (1512:37): [True: 0, False: 0]
  ------------------
 1513|      0|                        RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1514|      0|                    while (p < e) {
  ------------------
  |  Branch (1514:28): [True: 0, False: 0]
  ------------------
 1515|      0|                        if (ptr >= end || *ptr != *p)
  ------------------
  |  Branch (1515:29): [True: 0, False: 0]
  |  Branch (1515:43): [True: 0, False: 0]
  ------------------
 1516|      0|                            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1517|      0|                        p++;
 1518|      0|                        ptr++;
 1519|      0|                    }
 1520|      0|                }
 1521|      0|            }
 1522|      0|            pattern++;
 1523|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1524|       |
 1525|      0|        TARGET(SRE_OP_GROUPREF_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1526|       |            /* match backreference */
 1527|      0|            TRACE(("|%p|%p|GROUPREF_IGNORE %d\n", pattern,
 1528|      0|                   ptr, pattern[0]));
 1529|      0|            {
 1530|      0|                int groupref = pattern[0] * 2;
 1531|      0|                if (groupref >= state->lastmark) {
  ------------------
  |  Branch (1531:21): [True: 0, False: 0]
  ------------------
 1532|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1533|      0|                } else {
 1534|      0|                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1535|      0|                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1536|      0|                    if (!p || !e || e < p)
  ------------------
  |  Branch (1536:25): [True: 0, False: 0]
  |  Branch (1536:31): [True: 0, False: 0]
  |  Branch (1536:37): [True: 0, False: 0]
  ------------------
 1537|      0|                        RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1538|      0|                    while (p < e) {
  ------------------
  |  Branch (1538:28): [True: 0, False: 0]
  ------------------
 1539|      0|                        if (ptr >= end ||
  ------------------
  |  Branch (1539:29): [True: 0, False: 0]
  ------------------
 1540|      0|                            sre_lower_ascii(*ptr) != sre_lower_ascii(*p))
  ------------------
  |  Branch (1540:29): [True: 0, False: 0]
  ------------------
 1541|      0|                            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1542|      0|                        p++;
 1543|      0|                        ptr++;
 1544|      0|                    }
 1545|      0|                }
 1546|      0|            }
 1547|      0|            pattern++;
 1548|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1549|       |
 1550|      0|        TARGET(SRE_OP_GROUPREF_UNI_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1551|       |            /* match backreference */
 1552|      0|            TRACE(("|%p|%p|GROUPREF_UNI_IGNORE %d\n", pattern,
 1553|      0|                   ptr, pattern[0]));
 1554|      0|            {
 1555|      0|                int groupref = pattern[0] * 2;
 1556|      0|                if (groupref >= state->lastmark) {
  ------------------
  |  Branch (1556:21): [True: 0, False: 0]
  ------------------
 1557|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1558|      0|                } else {
 1559|      0|                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1560|      0|                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1561|      0|                    if (!p || !e || e < p)
  ------------------
  |  Branch (1561:25): [True: 0, False: 0]
  |  Branch (1561:31): [True: 0, False: 0]
  |  Branch (1561:37): [True: 0, False: 0]
  ------------------
 1562|      0|                        RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1563|      0|                    while (p < e) {
  ------------------
  |  Branch (1563:28): [True: 0, False: 0]
  ------------------
 1564|      0|                        if (ptr >= end ||
  ------------------
  |  Branch (1564:29): [True: 0, False: 0]
  ------------------
 1565|      0|                            sre_lower_unicode(*ptr) != sre_lower_unicode(*p))
  ------------------
  |  Branch (1565:29): [True: 0, False: 0]
  ------------------
 1566|      0|                            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1567|      0|                        p++;
 1568|      0|                        ptr++;
 1569|      0|                    }
 1570|      0|                }
 1571|      0|            }
 1572|      0|            pattern++;
 1573|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1574|       |
 1575|      0|        TARGET(SRE_OP_GROUPREF_LOC_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1576|       |            /* match backreference */
 1577|      0|            TRACE(("|%p|%p|GROUPREF_LOC_IGNORE %d\n", pattern,
 1578|      0|                   ptr, pattern[0]));
 1579|      0|            {
 1580|      0|                int groupref = pattern[0] * 2;
 1581|      0|                if (groupref >= state->lastmark) {
  ------------------
  |  Branch (1581:21): [True: 0, False: 0]
  ------------------
 1582|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1583|      0|                } else {
 1584|      0|                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1585|      0|                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1586|      0|                    if (!p || !e || e < p)
  ------------------
  |  Branch (1586:25): [True: 0, False: 0]
  |  Branch (1586:31): [True: 0, False: 0]
  |  Branch (1586:37): [True: 0, False: 0]
  ------------------
 1587|      0|                        RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1588|      0|                    while (p < e) {
  ------------------
  |  Branch (1588:28): [True: 0, False: 0]
  ------------------
 1589|      0|                        if (ptr >= end ||
  ------------------
  |  Branch (1589:29): [True: 0, False: 0]
  ------------------
 1590|      0|                            sre_lower_locale(*ptr) != sre_lower_locale(*p))
  ------------------
  |  Branch (1590:29): [True: 0, False: 0]
  ------------------
 1591|      0|                            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1592|      0|                        p++;
 1593|      0|                        ptr++;
 1594|      0|                    }
 1595|      0|                }
 1596|      0|            }
 1597|      0|            pattern++;
 1598|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1599|       |
 1600|      0|        TARGET(SRE_OP_GROUPREF_EXISTS):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1601|      0|            TRACE(("|%p|%p|GROUPREF_EXISTS %d\n", pattern,
 1602|      0|                   ptr, pattern[0]));
 1603|       |            /* <GROUPREF_EXISTS> <group> <skip> codeyes <JUMP> codeno ... */
 1604|      0|            {
 1605|      0|                int groupref = pattern[0] * 2;
 1606|      0|                if (groupref >= state->lastmark) {
  ------------------
  |  Branch (1606:21): [True: 0, False: 0]
  ------------------
 1607|      0|                    pattern += pattern[1];
 1608|      0|                    DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1609|      0|                } else {
 1610|      0|                    SRE_CHAR* p = (SRE_CHAR*) state->mark[groupref];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1611|      0|                    SRE_CHAR* e = (SRE_CHAR*) state->mark[groupref+1];
  ------------------
  |  |  499|      0|#define SRE_CHAR Py_UCS1
  ------------------
 1612|      0|                    if (!p || !e || e < p) {
  ------------------
  |  Branch (1612:25): [True: 0, False: 0]
  |  Branch (1612:31): [True: 0, False: 0]
  |  Branch (1612:37): [True: 0, False: 0]
  ------------------
 1613|      0|                        pattern += pattern[1];
 1614|      0|                        DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1615|      0|                    }
 1616|      0|                }
 1617|      0|            }
 1618|      0|            pattern += 2;
 1619|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1620|       |
 1621|      3|        TARGET(SRE_OP_ASSERT):
  ------------------
  |  |  648|      3|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1622|       |            /* assert subpattern */
 1623|       |            /* <ASSERT> <skip> <back> <pattern> */
 1624|      3|            TRACE(("|%p|%p|ASSERT %d\n", pattern,
 1625|      3|                   ptr, pattern[1]));
 1626|      3|            if ((uintptr_t)(ptr - (SRE_CHAR *)state->beginning) < pattern[1])
  ------------------
  |  Branch (1626:17): [True: 0, False: 3]
  ------------------
 1627|      0|                RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1628|      3|            state->ptr = ptr - pattern[1];
 1629|      3|            DO_JUMP0(JUMP_ASSERT, jump_assert, pattern+2);
  ------------------
  |  |  597|      3|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, 0)
  |  |  ------------------
  |  |  |  |  578|      3|    ctx->pattern = pattern; \
  |  |  |  |  579|      3|    ctx->ptr = ptr; \
  |  |  |  |  580|      3|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      3|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      3|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      3|do { \
  |  |  |  |  |  |  |  |  453|      3|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      3|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      3|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      3|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      3|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      3|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      3|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      3|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      3|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      3|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      3|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      3|    pattern = nextpattern; \
  |  |  |  |  586|      3|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      3|    ctx = nextctx; \
  |  |  |  |  588|      3|    goto entrance; \
  |  |  |  |  589|      3|    jumplabel: \
  |  |  |  |  590|      3|    pattern = ctx->pattern; \
  |  |  |  |  591|      3|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1630|      3|            RETURN_ON_FAILURE(ret);
  ------------------
  |  |  449|      3|    do { RETURN_ON_ERROR(i); if (i == 0) RETURN_FAILURE; } while (0)
  |  |  ------------------
  |  |  |  |  445|      3|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (445:14): [True: 0, False: 3]
  |  |  |  |  |  Branch (445:47): [Folded, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   do { RETURN_ON_ERROR(i); if (i == 0) RETURN_FAILURE; } while (0)
  |  |  ------------------
  |  |  |  |  441|      3|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (449:34): [True: 3, False: 0]
  |  |  |  Branch (449:67): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1631|      0|            pattern += pattern[0];
 1632|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1633|       |
 1634|      0|        TARGET(SRE_OP_ASSERT_NOT):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1635|       |            /* assert not subpattern */
 1636|       |            /* <ASSERT_NOT> <skip> <back> <pattern> */
 1637|      0|            TRACE(("|%p|%p|ASSERT_NOT %d\n", pattern,
 1638|      0|                   ptr, pattern[1]));
 1639|      0|            if ((uintptr_t)(ptr - (SRE_CHAR *)state->beginning) >= pattern[1]) {
  ------------------
  |  Branch (1639:17): [True: 0, False: 0]
  ------------------
 1640|      0|                state->ptr = ptr - pattern[1];
 1641|      0|                LASTMARK_SAVE();
  ------------------
  |  |  417|      0|    do { \
  |  |  418|      0|        ctx->lastmark = state->lastmark; \
  |  |  419|      0|        ctx->lastindex = state->lastindex; \
  |  |  420|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (420:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1642|      0|                if (state->save_marks)
  ------------------
  |  Branch (1642:21): [True: 0, False: 0]
  ------------------
 1643|      0|                    MARK_PUSH(ctx->lastmark);
  ------------------
  |  |  535|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (535:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  536|      0|        MARK_TRACE("push", (lastmark)); \
  |  |  537|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  538|      0|        DATA_STACK_PUSH(state, state->mark, _marks_size); \
  |  |  ------------------
  |  |  |  |  472|      0|#define DATA_STACK_PUSH(state, data, size) \
  |  |  |  |  473|      0|do { \
  |  |  |  |  474|      0|    TRACE(("copy data in %p to %zd (%zd)\n", \
  |  |  |  |  475|      0|           data, state->data_stack_base, size)); \
  |  |  |  |  476|      0|    if (size > state->data_stack_size - state->data_stack_base) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (476:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  477|      0|        int j = data_stack_grow(state, size); \
  |  |  |  |  478|      0|        if (j < 0) return j; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (478:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  479|      0|        if (ctx_pos != -1) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (479:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  480|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  481|      0|    } \
  |  |  |  |  482|      0|    memcpy(state->data_stack+state->data_stack_base, data, size); \
  |  |  |  |  483|      0|    state->data_stack_base += size; \
  |  |  |  |  484|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (484:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  539|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (539:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1644|       |
 1645|      0|                DO_JUMP0(JUMP_ASSERT_NOT, jump_assert_not, pattern+2);
  ------------------
  |  |  597|      0|    DO_JUMPX(jumpvalue, jumplabel, nextpattern, 0)
  |  |  ------------------
  |  |  |  |  578|      0|    ctx->pattern = pattern; \
  |  |  |  |  579|      0|    ctx->ptr = ptr; \
  |  |  |  |  580|      0|    DATA_ALLOC(SRE(match_context), nextctx); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  512|      0|    DATA_STACK_ALLOC(state, t, p)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  451|      0|#define DATA_STACK_ALLOC(state, type, ptr) \
  |  |  |  |  |  |  |  |  452|      0|do { \
  |  |  |  |  |  |  |  |  453|      0|    alloc_pos = state->data_stack_base; \
  |  |  |  |  |  |  |  |  454|      0|    TRACE(("allocating %s in %zd (%zd)\n", \
  |  |  |  |  |  |  |  |  455|      0|           Py_STRINGIFY(type), alloc_pos, sizeof(type))); \
  |  |  |  |  |  |  |  |  456|      0|    if (sizeof(type) > state->data_stack_size - alloc_pos) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (456:9): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  457|      0|        int j = data_stack_grow(state, sizeof(type)); \
  |  |  |  |  |  |  |  |  458|      0|        if (j < 0) return j; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (458:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  459|      0|        if (ctx_pos != -1) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (459:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  460|      0|            DATA_STACK_LOOKUP_AT(state, SRE(match_context), ctx, ctx_pos); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  466|      0|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  |  |  |  |  |  |  467|      0|do { \
  |  |  |  |  |  |  |  |  |  |  468|      0|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  |  |  |  |  |  |  469|      0|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  |  |  |  |  |  |  470|      0|} while (0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (470:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  461|      0|    } \
  |  |  |  |  |  |  |  |  462|      0|    ptr = (type*)(state->data_stack+alloc_pos); \
  |  |  |  |  |  |  |  |  463|      0|    state->data_stack_base += sizeof(type); \
  |  |  |  |  |  |  |  |  464|      0|} while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (464:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  581|      0|    nextctx->pattern = nextpattern; \
  |  |  |  |  582|      0|    nextctx->toplevel = toplevel_; \
  |  |  |  |  583|      0|    nextctx->jump = jumpvalue; \
  |  |  |  |  584|      0|    nextctx->last_ctx_pos = ctx_pos; \
  |  |  |  |  585|      0|    pattern = nextpattern; \
  |  |  |  |  586|      0|    ctx_pos = alloc_pos; \
  |  |  |  |  587|      0|    ctx = nextctx; \
  |  |  |  |  588|      0|    goto entrance; \
  |  |  |  |  589|      0|    jumplabel: \
  |  |  |  |  590|      0|    pattern = ctx->pattern; \
  |  |  |  |  591|      0|    ptr = ctx->ptr;
  |  |  ------------------
  ------------------
 1646|      0|                if (ret) {
  ------------------
  |  Branch (1646:21): [True: 0, False: 0]
  ------------------
 1647|      0|                    if (state->save_marks)
  ------------------
  |  Branch (1647:25): [True: 0, False: 0]
  ------------------
 1648|      0|                        MARK_POP_DISCARD(ctx->lastmark);
  ------------------
  |  |  553|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (553:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  555|      0|        DATA_STACK_POP_DISCARD(state, _marks_size); \
  |  |  ------------------
  |  |  |  |  498|      0|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|      0|do { \
  |  |  |  |  500|      0|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|      0|           state->data_stack_base-size, size)); \
  |  |  |  |  502|      0|    state->data_stack_base -= size; \
  |  |  |  |  503|      0|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  556|      0|        MARK_TRACE("pop discard", (lastmark)); \
  |  |  557|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (557:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1649|      0|                    RETURN_ON_ERROR(ret);
  ------------------
  |  |  445|      0|    do { if (i < 0) RETURN_ERROR(i); } while (0)
  |  |  ------------------
  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (445:14): [True: 0, False: 0]
  |  |  |  Branch (445:47): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1650|      0|                    RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1651|      0|                }
 1652|      0|                if (state->save_marks)
  ------------------
  |  Branch (1652:21): [True: 0, False: 0]
  ------------------
 1653|      0|                    MARK_POP(ctx->lastmark);
  ------------------
  |  |  541|      0|    do if (lastmark >= 0) { \
  |  |  ------------------
  |  |  |  Branch (541:12): [True: 0, False: 0]
  |  |  ------------------
  |  |  542|      0|        size_t _marks_size = (lastmark+1) * sizeof(void*); \
  |  |  543|      0|        DATA_STACK_POP(state, state->mark, _marks_size, 1); \
  |  |  ------------------
  |  |  |  |  489|      0|#define DATA_STACK_POP(state, data, size, discard) \
  |  |  |  |  490|      0|do { \
  |  |  |  |  491|      0|    TRACE(("copy data to %p from %zd (%zd)\n", \
  |  |  |  |  492|      0|           data, state->data_stack_base-size, size)); \
  |  |  |  |  493|      0|    memcpy((void*) data, state->data_stack+state->data_stack_base-size, size); \
  |  |  |  |  494|      0|    if (discard) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  495|      0|        state->data_stack_base -= size; \
  |  |  |  |  496|      0|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (496:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  544|      0|        MARK_TRACE("pop", (lastmark)); \
  |  |  545|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (545:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1654|      0|                LASTMARK_RESTORE();
  ------------------
  |  |  422|      0|    do { \
  |  |  423|      0|        state->lastmark = ctx->lastmark; \
  |  |  424|      0|        state->lastindex = ctx->lastindex; \
  |  |  425|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (425:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1655|      0|            }
 1656|      0|            pattern += pattern[0];
 1657|      0|            DISPATCH;
  ------------------
  |  |  650|      0|        do {                               \
  |  |  651|      0|            MAYBE_CHECK_SIGNALS;           \
  |  |  ------------------
  |  |  |  |  633|      0|# define MAYBE_CHECK_SIGNALS _MAYBE_CHECK_SIGNALS
  |  |  |  |  ------------------
  |  |  |  |  |  |  615|      0|    do {                                                           \
  |  |  |  |  |  |  616|      0|        if ((0 == (++sigcount & 0xfff)) && PyErr_CheckSignals()) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (616:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (616:44): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  617|      0|            RETURN_ERROR(SRE_ERROR_INTERRUPTED);                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  618|      0|        }                                                          \
  |  |  |  |  |  |  619|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (619:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  652|      0|            goto *sre_targets[*pattern++]; \
  |  |  653|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (653:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1658|       |
 1659|      0|        TARGET(SRE_OP_FAILURE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1660|       |            /* immediate failure */
 1661|      0|            TRACE(("|%p|%p|FAILURE\n", pattern, ptr));
 1662|      0|            RETURN_FAILURE;
  ------------------
  |  |  441|      0|#define RETURN_FAILURE do { ret = 0; goto exit; } while(0)
  |  |  ------------------
  |  |  |  Branch (441:57): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1663|       |
 1664|       |#if !USE_COMPUTED_GOTOS
 1665|       |        default:
 1666|       |#endif
 1667|       |        // Also any unused opcodes:
 1668|      0|        TARGET(SRE_OP_RANGE_UNI_IGNORE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1669|      0|        TARGET(SRE_OP_SUBPATTERN):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1670|      0|        TARGET(SRE_OP_RANGE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1671|      0|        TARGET(SRE_OP_NEGATE):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1672|      0|        TARGET(SRE_OP_BIGCHARSET):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1673|      0|        TARGET(SRE_OP_CHARSET):
  ------------------
  |  |  648|      0|    #define TARGET(OP) TARGET_ ## OP
  ------------------
 1674|      0|            TRACE(("|%p|%p|UNKNOWN %d\n", pattern, ptr,
 1675|      0|                   pattern[-1]));
 1676|      0|            RETURN_ERROR(SRE_ERROR_ILLEGAL);
  ------------------
  |  |  440|      0|#define RETURN_ERROR(i) do { return i; } while(0)
  |  |  ------------------
  |  |  |  Branch (440:48): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1677|       |
 1678|      0|    }
 1679|       |
 1680|     36|exit:
 1681|     36|    ctx_pos = ctx->last_ctx_pos;
 1682|     36|    jump = ctx->jump;
 1683|     36|    DATA_POP_DISCARD(ctx);
  ------------------
  |  |  510|     36|    DATA_STACK_POP_DISCARD(state, sizeof(*(x)))
  |  |  ------------------
  |  |  |  |  498|     36|#define DATA_STACK_POP_DISCARD(state, size) \
  |  |  |  |  499|     36|do { \
  |  |  |  |  500|     36|    TRACE(("discard data from %zd (%zd)\n", \
  |  |  |  |  501|     36|           state->data_stack_base-size, size)); \
  |  |  |  |  502|     36|    state->data_stack_base -= size; \
  |  |  |  |  503|     36|} while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (503:9): [Folded, False: 36]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1684|     36|    if (ctx_pos == -1) {
  ------------------
  |  Branch (1684:9): [True: 4, False: 32]
  ------------------
 1685|      4|        state->sigcount = sigcount;
 1686|      4|        return ret;
 1687|      4|    }
 1688|     32|    DATA_LOOKUP_AT(SRE(match_context), ctx, ctx_pos);
  ------------------
  |  |  514|     32|    DATA_STACK_LOOKUP_AT(state,t,p,pos)
  |  |  ------------------
  |  |  |  |  466|     32|#define DATA_STACK_LOOKUP_AT(state, type, ptr, pos) \
  |  |  |  |  467|     32|do { \
  |  |  |  |  468|     32|    TRACE(("looking up %s at %zd\n", Py_STRINGIFY(type), pos)); \
  |  |  |  |  469|     32|    ptr = (type*)(state->data_stack+pos); \
  |  |  |  |  470|     32|} while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (470:10): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1689|       |
 1690|     32|    switch (jump) {
  ------------------
  |  Branch (1690:13): [True: 32, False: 0]
  ------------------
 1691|      6|        case JUMP_MAX_UNTIL_2:
  ------------------
  |  |  561|      6|#define JUMP_MAX_UNTIL_2     2
  ------------------
  |  Branch (1691:9): [True: 6, False: 26]
  ------------------
 1692|      6|            TRACE(("|%p|%p|JUMP_MAX_UNTIL_2\n", pattern, ptr));
 1693|      6|            goto jump_max_until_2;
 1694|      6|        case JUMP_MAX_UNTIL_3:
  ------------------
  |  |  562|      6|#define JUMP_MAX_UNTIL_3     3
  ------------------
  |  Branch (1694:9): [True: 6, False: 26]
  ------------------
 1695|      6|            TRACE(("|%p|%p|JUMP_MAX_UNTIL_3\n", pattern, ptr));
 1696|      6|            goto jump_max_until_3;
 1697|      0|        case JUMP_MIN_UNTIL_2:
  ------------------
  |  |  564|      0|#define JUMP_MIN_UNTIL_2     5
  ------------------
  |  Branch (1697:9): [True: 0, False: 32]
  ------------------
 1698|      0|            TRACE(("|%p|%p|JUMP_MIN_UNTIL_2\n", pattern, ptr));
 1699|      0|            goto jump_min_until_2;
 1700|      0|        case JUMP_MIN_UNTIL_3:
  ------------------
  |  |  565|      0|#define JUMP_MIN_UNTIL_3     6
  ------------------
  |  Branch (1700:9): [True: 0, False: 32]
  ------------------
 1701|      0|            TRACE(("|%p|%p|JUMP_MIN_UNTIL_3\n", pattern, ptr));
 1702|      0|            goto jump_min_until_3;
 1703|     10|        case JUMP_BRANCH:
  ------------------
  |  |  570|     10|#define JUMP_BRANCH          11
  ------------------
  |  Branch (1703:9): [True: 10, False: 22]
  ------------------
 1704|     10|            TRACE(("|%p|%p|JUMP_BRANCH\n", pattern, ptr));
 1705|     10|            goto jump_branch;
 1706|      0|        case JUMP_MAX_UNTIL_1:
  ------------------
  |  |  560|      0|#define JUMP_MAX_UNTIL_1     1
  ------------------
  |  Branch (1706:9): [True: 0, False: 32]
  ------------------
 1707|      0|            TRACE(("|%p|%p|JUMP_MAX_UNTIL_1\n", pattern, ptr));
 1708|      0|            goto jump_max_until_1;
 1709|      0|        case JUMP_MIN_UNTIL_1:
  ------------------
  |  |  563|      0|#define JUMP_MIN_UNTIL_1     4
  ------------------
  |  Branch (1709:9): [True: 0, False: 32]
  ------------------
 1710|      0|            TRACE(("|%p|%p|JUMP_MIN_UNTIL_1\n", pattern, ptr));
 1711|      0|            goto jump_min_until_1;
 1712|      0|        case JUMP_POSS_REPEAT_1:
  ------------------
  |  |  573|      0|#define JUMP_POSS_REPEAT_1   14
  ------------------
  |  Branch (1712:9): [True: 0, False: 32]
  ------------------
 1713|      0|            TRACE(("|%p|%p|JUMP_POSS_REPEAT_1\n", pattern, ptr));
 1714|      0|            goto jump_poss_repeat_1;
 1715|      0|        case JUMP_POSS_REPEAT_2:
  ------------------
  |  |  574|      0|#define JUMP_POSS_REPEAT_2   15
  ------------------
  |  Branch (1715:9): [True: 0, False: 32]
  ------------------
 1716|      0|            TRACE(("|%p|%p|JUMP_POSS_REPEAT_2\n", pattern, ptr));
 1717|      0|            goto jump_poss_repeat_2;
 1718|      6|        case JUMP_REPEAT:
  ------------------
  |  |  566|      6|#define JUMP_REPEAT          7
  ------------------
  |  Branch (1718:9): [True: 6, False: 26]
  ------------------
 1719|      6|            TRACE(("|%p|%p|JUMP_REPEAT\n", pattern, ptr));
 1720|      6|            goto jump_repeat;
 1721|      0|        case JUMP_REPEAT_ONE_1:
  ------------------
  |  |  567|      0|#define JUMP_REPEAT_ONE_1    8
  ------------------
  |  Branch (1721:9): [True: 0, False: 32]
  ------------------
 1722|      0|            TRACE(("|%p|%p|JUMP_REPEAT_ONE_1\n", pattern, ptr));
 1723|      0|            goto jump_repeat_one_1;
 1724|      1|        case JUMP_REPEAT_ONE_2:
  ------------------
  |  |  568|      1|#define JUMP_REPEAT_ONE_2    9
  ------------------
  |  Branch (1724:9): [True: 1, False: 31]
  ------------------
 1725|      1|            TRACE(("|%p|%p|JUMP_REPEAT_ONE_2\n", pattern, ptr));
 1726|      1|            goto jump_repeat_one_2;
 1727|      0|        case JUMP_MIN_REPEAT_ONE:
  ------------------
  |  |  569|      0|#define JUMP_MIN_REPEAT_ONE  10
  ------------------
  |  Branch (1727:9): [True: 0, False: 32]
  ------------------
 1728|      0|            TRACE(("|%p|%p|JUMP_MIN_REPEAT_ONE\n", pattern, ptr));
 1729|      0|            goto jump_min_repeat_one;
 1730|      0|        case JUMP_ATOMIC_GROUP:
  ------------------
  |  |  575|      0|#define JUMP_ATOMIC_GROUP    16
  ------------------
  |  Branch (1730:9): [True: 0, False: 32]
  ------------------
 1731|      0|            TRACE(("|%p|%p|JUMP_ATOMIC_GROUP\n", pattern, ptr));
 1732|      0|            goto jump_atomic_group;
 1733|      3|        case JUMP_ASSERT:
  ------------------
  |  |  571|      3|#define JUMP_ASSERT          12
  ------------------
  |  Branch (1733:9): [True: 3, False: 29]
  ------------------
 1734|      3|            TRACE(("|%p|%p|JUMP_ASSERT\n", pattern, ptr));
 1735|      3|            goto jump_assert;
 1736|      0|        case JUMP_ASSERT_NOT:
  ------------------
  |  |  572|      0|#define JUMP_ASSERT_NOT      13
  ------------------
  |  Branch (1736:9): [True: 0, False: 32]
  ------------------
 1737|      0|            TRACE(("|%p|%p|JUMP_ASSERT_NOT\n", pattern, ptr));
 1738|      0|            goto jump_assert_not;
 1739|      0|        case JUMP_NONE:
  ------------------
  |  |  559|      0|#define JUMP_NONE            0
  ------------------
  |  Branch (1739:9): [True: 0, False: 32]
  ------------------
 1740|      0|            TRACE(("|%p|%p|RETURN %zd\n", pattern,
 1741|      0|                   ptr, ret));
 1742|      0|            break;
 1743|     32|    }
 1744|       |
 1745|      0|    return ret; /* should never get here */
 1746|     32|}
sre.c:sre_ucs1_at:
   17|      3|{
   18|       |    /* check if pointer is at given position */
   19|       |
   20|      3|    Py_ssize_t thisp, thatp;
   21|       |
   22|      3|    switch (at) {
  ------------------
  |  Branch (22:13): [True: 3, False: 0]
  ------------------
   23|       |
   24|      0|    case SRE_AT_BEGINNING:
  ------------------
  |  |   58|      0|#define SRE_AT_BEGINNING 0
  ------------------
  |  Branch (24:5): [True: 0, False: 3]
  ------------------
   25|      0|    case SRE_AT_BEGINNING_STRING:
  ------------------
  |  |   60|      0|#define SRE_AT_BEGINNING_STRING 2
  ------------------
  |  Branch (25:5): [True: 0, False: 3]
  ------------------
   26|      0|        return ((void*) ptr == state->beginning);
   27|       |
   28|      0|    case SRE_AT_BEGINNING_LINE:
  ------------------
  |  |   59|      0|#define SRE_AT_BEGINNING_LINE 1
  ------------------
  |  Branch (28:5): [True: 0, False: 3]
  ------------------
   29|      0|        return ((void*) ptr == state->beginning ||
  ------------------
  |  Branch (29:17): [True: 0, False: 0]
  ------------------
   30|      0|                SRE_IS_LINEBREAK((int) ptr[-1]));
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  |  |  ------------------
  |  |  |  Branch (142:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   31|       |
   32|      0|    case SRE_AT_END:
  ------------------
  |  |   63|      0|#define SRE_AT_END 5
  ------------------
  |  Branch (32:5): [True: 0, False: 3]
  ------------------
   33|      0|        return (((SRE_CHAR *)state->end - ptr == 1 &&
  ------------------
  |  Branch (33:18): [True: 0, False: 0]
  ------------------
   34|      0|                 SRE_IS_LINEBREAK((int) ptr[0])) ||
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  |  |  ------------------
  |  |  |  Branch (142:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   35|      0|                ((void*) ptr == state->end));
  ------------------
  |  Branch (35:17): [True: 0, False: 0]
  ------------------
   36|       |
   37|      0|    case SRE_AT_END_LINE:
  ------------------
  |  |   64|      0|#define SRE_AT_END_LINE 6
  ------------------
  |  Branch (37:5): [True: 0, False: 3]
  ------------------
   38|      0|        return ((void*) ptr == state->end ||
  ------------------
  |  Branch (38:17): [True: 0, False: 0]
  ------------------
   39|      0|                SRE_IS_LINEBREAK((int) ptr[0]));
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  |  |  ------------------
  |  |  |  Branch (142:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   40|       |
   41|      3|    case SRE_AT_END_STRING:
  ------------------
  |  |   65|      3|#define SRE_AT_END_STRING 7
  ------------------
  |  Branch (41:5): [True: 3, False: 0]
  ------------------
   42|      3|        return ((void*) ptr == state->end);
   43|       |
   44|      0|    case SRE_AT_BOUNDARY:
  ------------------
  |  |   61|      0|#define SRE_AT_BOUNDARY 3
  ------------------
  |  Branch (44:5): [True: 0, False: 3]
  ------------------
   45|      0|        thatp = ((void*) ptr > state->beginning) ?
  ------------------
  |  Branch (45:17): [True: 0, False: 0]
  ------------------
   46|      0|            SRE_IS_WORD((int) ptr[-1]) : 0;
  ------------------
  |  |  144|      0|    ((ch) <= 'z' && (Py_ISALNUM(ch) || (ch) == '_'))
  |  |  ------------------
  |  |  |  |   26|      0|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (26:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (144:6): [True: 0, False: 0]
  |  |  |  Branch (144:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   47|      0|        thisp = ((void*) ptr < state->end) ?
  ------------------
  |  Branch (47:17): [True: 0, False: 0]
  ------------------
   48|      0|            SRE_IS_WORD((int) ptr[0]) : 0;
  ------------------
  |  |  144|      0|    ((ch) <= 'z' && (Py_ISALNUM(ch) || (ch) == '_'))
  |  |  ------------------
  |  |  |  |   26|      0|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (26:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (144:6): [True: 0, False: 0]
  |  |  |  Branch (144:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   49|      0|        return thisp != thatp;
   50|       |
   51|      0|    case SRE_AT_NON_BOUNDARY:
  ------------------
  |  |   62|      0|#define SRE_AT_NON_BOUNDARY 4
  ------------------
  |  Branch (51:5): [True: 0, False: 3]
  ------------------
   52|      0|        thatp = ((void*) ptr > state->beginning) ?
  ------------------
  |  Branch (52:17): [True: 0, False: 0]
  ------------------
   53|      0|            SRE_IS_WORD((int) ptr[-1]) : 0;
  ------------------
  |  |  144|      0|    ((ch) <= 'z' && (Py_ISALNUM(ch) || (ch) == '_'))
  |  |  ------------------
  |  |  |  |   26|      0|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (26:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (144:6): [True: 0, False: 0]
  |  |  |  Branch (144:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   54|      0|        thisp = ((void*) ptr < state->end) ?
  ------------------
  |  Branch (54:17): [True: 0, False: 0]
  ------------------
   55|      0|            SRE_IS_WORD((int) ptr[0]) : 0;
  ------------------
  |  |  144|      0|    ((ch) <= 'z' && (Py_ISALNUM(ch) || (ch) == '_'))
  |  |  ------------------
  |  |  |  |   26|      0|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  |  |  ------------------
  |  |  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  |  |  ------------------
  |  |  |  |  |  |   12|      0|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   11|      0|#define PY_CTF_DIGIT  0x04
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (26:24): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (144:6): [True: 0, False: 0]
  |  |  |  Branch (144:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   56|      0|        return thisp == thatp;
   57|       |
   58|      0|    case SRE_AT_LOC_BOUNDARY:
  ------------------
  |  |   66|      0|#define SRE_AT_LOC_BOUNDARY 8
  ------------------
  |  Branch (58:5): [True: 0, False: 3]
  ------------------
   59|      0|        thatp = ((void*) ptr > state->beginning) ?
  ------------------
  |  Branch (59:17): [True: 0, False: 0]
  ------------------
   60|      0|            SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
  ------------------
  |  |  155|      0|#define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  154|      0|#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (154:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (154:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (155:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   61|      0|        thisp = ((void*) ptr < state->end) ?
  ------------------
  |  Branch (61:17): [True: 0, False: 0]
  ------------------
   62|      0|            SRE_LOC_IS_WORD((int) ptr[0]) : 0;
  ------------------
  |  |  155|      0|#define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  154|      0|#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (154:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (154:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (155:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   63|      0|        return thisp != thatp;
   64|       |
   65|      0|    case SRE_AT_LOC_NON_BOUNDARY:
  ------------------
  |  |   67|      0|#define SRE_AT_LOC_NON_BOUNDARY 9
  ------------------
  |  Branch (65:5): [True: 0, False: 3]
  ------------------
   66|      0|        thatp = ((void*) ptr > state->beginning) ?
  ------------------
  |  Branch (66:17): [True: 0, False: 0]
  ------------------
   67|      0|            SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
  ------------------
  |  |  155|      0|#define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  154|      0|#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (154:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (154:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (155:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   68|      0|        thisp = ((void*) ptr < state->end) ?
  ------------------
  |  Branch (68:17): [True: 0, False: 0]
  ------------------
   69|      0|            SRE_LOC_IS_WORD((int) ptr[0]) : 0;
  ------------------
  |  |  155|      0|#define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  154|      0|#define SRE_LOC_IS_ALNUM(ch) (!((ch) & ~255) ? sre_isalnum((ch)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (154:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (154:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (155:56): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   70|      0|        return thisp == thatp;
   71|       |
   72|      0|    case SRE_AT_UNI_BOUNDARY:
  ------------------
  |  |   68|      0|#define SRE_AT_UNI_BOUNDARY 10
  ------------------
  |  Branch (72:5): [True: 0, False: 3]
  ------------------
   73|      0|        thatp = ((void*) ptr > state->beginning) ?
  ------------------
  |  Branch (73:17): [True: 0, False: 0]
  ------------------
   74|      0|            SRE_UNI_IS_WORD((int) ptr[-1]) : 0;
  ------------------
  |  |  173|      0|#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (173:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   75|      0|        thisp = ((void*) ptr < state->end) ?
  ------------------
  |  Branch (75:17): [True: 0, False: 0]
  ------------------
   76|      0|            SRE_UNI_IS_WORD((int) ptr[0]) : 0;
  ------------------
  |  |  173|      0|#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (173:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   77|      0|        return thisp != thatp;
   78|       |
   79|      0|    case SRE_AT_UNI_NON_BOUNDARY:
  ------------------
  |  |   69|      0|#define SRE_AT_UNI_NON_BOUNDARY 11
  ------------------
  |  Branch (79:5): [True: 0, False: 3]
  ------------------
   80|      0|        thatp = ((void*) ptr > state->beginning) ?
  ------------------
  |  Branch (80:17): [True: 0, False: 0]
  ------------------
   81|      0|            SRE_UNI_IS_WORD((int) ptr[-1]) : 0;
  ------------------
  |  |  173|      0|#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (173:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   82|      0|        thisp = ((void*) ptr < state->end) ?
  ------------------
  |  Branch (82:17): [True: 0, False: 0]
  ------------------
   83|      0|            SRE_UNI_IS_WORD((int) ptr[0]) : 0;
  ------------------
  |  |  173|      0|#define SRE_UNI_IS_WORD(ch) (SRE_UNI_IS_ALNUM(ch) || (ch) == '_')
  |  |  ------------------
  |  |  |  |  172|      0|#define SRE_UNI_IS_ALNUM(ch) Py_UNICODE_ISALNUM(ch)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (172:30): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (173:54): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   84|      0|        return thisp == thatp;
   85|       |
   86|      3|    }
   87|       |
   88|      0|    return 0;
   89|      3|}
sre.c:sre_ucs1_charset:
   93|      7|{
   94|       |    /* check if character is a member of the given set */
   95|       |
   96|      7|    int ok = 1;
   97|       |
   98|     15|    for (;;) {
   99|     15|        switch (*set++) {
  100|       |
  101|      4|        case SRE_OP_FAILURE:
  ------------------
  |  |   15|      4|#define SRE_OP_FAILURE 0
  ------------------
  |  Branch (101:9): [True: 4, False: 11]
  ------------------
  102|      4|            return !ok;
  103|       |
  104|     11|        case SRE_OP_LITERAL:
  ------------------
  |  |   31|     11|#define SRE_OP_LITERAL 16
  ------------------
  |  Branch (104:9): [True: 11, False: 4]
  ------------------
  105|       |            /* <LITERAL> <code> */
  106|     11|            if (ch == set[0])
  ------------------
  |  Branch (106:17): [True: 3, False: 8]
  ------------------
  107|      3|                return ok;
  108|      8|            set++;
  109|      8|            break;
  110|       |
  111|      0|        case SRE_OP_CATEGORY:
  ------------------
  |  |   23|      0|#define SRE_OP_CATEGORY 8
  ------------------
  |  Branch (111:9): [True: 0, False: 15]
  ------------------
  112|       |            /* <CATEGORY> <code> */
  113|      0|            if (sre_category(set[0], (int) ch))
  ------------------
  |  Branch (113:17): [True: 0, False: 0]
  ------------------
  114|      0|                return ok;
  115|      0|            set++;
  116|      0|            break;
  117|       |
  118|      0|        case SRE_OP_CHARSET:
  ------------------
  |  |   24|      0|#define SRE_OP_CHARSET 9
  ------------------
  |  Branch (118:9): [True: 0, False: 15]
  ------------------
  119|       |            /* <CHARSET> <bitmap> */
  120|      0|            if (ch < 256 &&
  ------------------
  |  Branch (120:17): [True: 0, False: 0]
  ------------------
  121|      0|                (set[ch/SRE_CODE_BITS] & (1u << (ch & (SRE_CODE_BITS-1)))))
  ------------------
  |  |   56|      0|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
                              (set[ch/SRE_CODE_BITS] & (1u << (ch & (SRE_CODE_BITS-1)))))
  ------------------
  |  |   56|      0|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
  |  Branch (121:17): [True: 0, False: 0]
  ------------------
  122|      0|                return ok;
  123|      0|            set += 256/SRE_CODE_BITS;
  ------------------
  |  |   56|      0|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
  124|      0|            break;
  125|       |
  126|      0|        case SRE_OP_RANGE:
  ------------------
  |  |   37|      0|#define SRE_OP_RANGE 22
  ------------------
  |  Branch (126:9): [True: 0, False: 15]
  ------------------
  127|       |            /* <RANGE> <lower> <upper> */
  128|      0|            if (set[0] <= ch && ch <= set[1])
  ------------------
  |  Branch (128:17): [True: 0, False: 0]
  |  Branch (128:33): [True: 0, False: 0]
  ------------------
  129|      0|                return ok;
  130|      0|            set += 2;
  131|      0|            break;
  132|       |
  133|      0|        case SRE_OP_RANGE_UNI_IGNORE:
  ------------------
  |  |   57|      0|#define SRE_OP_RANGE_UNI_IGNORE 42
  ------------------
  |  Branch (133:9): [True: 0, False: 15]
  ------------------
  134|       |            /* <RANGE_UNI_IGNORE> <lower> <upper> */
  135|      0|        {
  136|      0|            SRE_CODE uch;
  ------------------
  |  |   18|      0|#define SRE_CODE Py_UCS4
  ------------------
  137|       |            /* ch is already lower cased */
  138|      0|            if (set[0] <= ch && ch <= set[1])
  ------------------
  |  Branch (138:17): [True: 0, False: 0]
  |  Branch (138:33): [True: 0, False: 0]
  ------------------
  139|      0|                return ok;
  140|      0|            uch = sre_upper_unicode(ch);
  141|      0|            if (set[0] <= uch && uch <= set[1])
  ------------------
  |  Branch (141:17): [True: 0, False: 0]
  |  Branch (141:34): [True: 0, False: 0]
  ------------------
  142|      0|                return ok;
  143|      0|            set += 2;
  144|      0|            break;
  145|      0|        }
  146|       |
  147|      0|        case SRE_OP_NEGATE:
  ------------------
  |  |   36|      0|#define SRE_OP_NEGATE 21
  ------------------
  |  Branch (147:9): [True: 0, False: 15]
  ------------------
  148|      0|            ok = !ok;
  149|      0|            break;
  150|       |
  151|      0|        case SRE_OP_BIGCHARSET:
  ------------------
  |  |   25|      0|#define SRE_OP_BIGCHARSET 10
  ------------------
  |  Branch (151:9): [True: 0, False: 15]
  ------------------
  152|       |            /* <BIGCHARSET> <blockcount> <256 blockindices> <blocks> */
  153|      0|        {
  154|      0|            Py_ssize_t count, block;
  155|      0|            count = *(set++);
  156|       |
  157|      0|            if (ch < 0x10000u)
  ------------------
  |  Branch (157:17): [True: 0, False: 0]
  ------------------
  158|      0|                block = ((unsigned char*)set)[ch >> 8];
  159|      0|            else
  160|      0|                block = -1;
  161|      0|            set += 256/sizeof(SRE_CODE);
  162|      0|            if (block >=0 &&
  ------------------
  |  Branch (162:17): [True: 0, False: 0]
  ------------------
  163|      0|                (set[(block * 256 + (ch & 255))/SRE_CODE_BITS] &
  ------------------
  |  |   56|      0|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
  |  Branch (163:17): [True: 0, False: 0]
  ------------------
  164|      0|                    (1u << (ch & (SRE_CODE_BITS-1)))))
  ------------------
  |  |   56|      0|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
  165|      0|                return ok;
  166|      0|            set += count * (256/SRE_CODE_BITS);
  ------------------
  |  |   56|      0|#define SRE_CODE_BITS (8 * sizeof(SRE_CODE))
  ------------------
  167|      0|            break;
  168|      0|        }
  169|       |
  170|      0|        default:
  ------------------
  |  Branch (170:9): [True: 0, False: 15]
  ------------------
  171|       |            /* internal error -- there's not much we can do about it
  172|       |               here, so let's just pretend it didn't match... */
  173|      0|            return 0;
  174|     15|        }
  175|     15|    }
  176|      7|}
sre.c:sre_ucs1_count:
  249|      1|{
  250|      1|    SRE_CODE chr;
  ------------------
  |  |   18|      1|#define SRE_CODE Py_UCS4
  ------------------
  251|      1|    SRE_CODE arg;
  ------------------
  |  |   18|      1|#define SRE_CODE Py_UCS4
  ------------------
  252|      1|    SRE_CHAR c;
  ------------------
  |  |  499|      1|#define SRE_CHAR Py_UCS1
  ------------------
  253|      1|    const SRE_CHAR* ptr = (const SRE_CHAR *)state->ptr;
  254|      1|    const SRE_CHAR* end = (const SRE_CHAR *)state->end;
  255|      1|    Py_ssize_t i;
  256|      1|    INIT_TRACE(state);
  257|       |
  258|       |    /* adjust end */
  259|      1|    if (maxcount < end - ptr && maxcount != SRE_MAXREPEAT)
  ------------------
  |  |   20|      0|# define SRE_MAXREPEAT (~(SRE_CODE)0)
  ------------------
  |  Branch (259:9): [True: 0, False: 1]
  |  Branch (259:33): [True: 0, False: 0]
  ------------------
  260|      0|        end = ptr + maxcount;
  261|       |
  262|      1|    switch (pattern[0]) {
  263|       |
  264|      0|    case SRE_OP_IN:
  ------------------
  |  |   28|      0|#define SRE_OP_IN 13
  ------------------
  |  Branch (264:5): [True: 0, False: 1]
  ------------------
  265|       |        /* repeated set */
  266|      0|        TRACE(("|%p|%p|COUNT IN\n", pattern, ptr));
  267|      0|        while (ptr < end && SRE(charset)(state, pattern + 2, *ptr))
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
  |  Branch (267:16): [True: 0, False: 0]
  |  Branch (267:29): [True: 0, False: 0]
  ------------------
  268|      0|            ptr++;
  269|      0|        break;
  270|       |
  271|      0|    case SRE_OP_ANY:
  ------------------
  |  |   17|      0|#define SRE_OP_ANY 2
  ------------------
  |  Branch (271:5): [True: 0, False: 1]
  ------------------
  272|       |        /* repeated dot wildcard. */
  273|      0|        TRACE(("|%p|%p|COUNT ANY\n", pattern, ptr));
  274|      0|        while (ptr < end && !SRE_IS_LINEBREAK(*ptr))
  ------------------
  |  |  142|      0|    ((ch) == '\n')
  ------------------
  |  Branch (274:16): [True: 0, False: 0]
  |  Branch (274:29): [True: 0, False: 0]
  ------------------
  275|      0|            ptr++;
  276|      0|        break;
  277|       |
  278|      0|    case SRE_OP_ANY_ALL:
  ------------------
  |  |   18|      0|#define SRE_OP_ANY_ALL 3
  ------------------
  |  Branch (278:5): [True: 0, False: 1]
  ------------------
  279|       |        /* repeated dot wildcard.  skip to the end of the target
  280|       |           string, and backtrack from there */
  281|      0|        TRACE(("|%p|%p|COUNT ANY_ALL\n", pattern, ptr));
  282|      0|        ptr = end;
  283|      0|        break;
  284|       |
  285|      0|    case SRE_OP_LITERAL:
  ------------------
  |  |   31|      0|#define SRE_OP_LITERAL 16
  ------------------
  |  Branch (285:5): [True: 0, False: 1]
  ------------------
  286|       |        /* repeated literal */
  287|      0|        chr = pattern[1];
  288|      0|        TRACE(("|%p|%p|COUNT LITERAL %d\n", pattern, ptr, chr));
  289|      0|        c = (SRE_CHAR) chr;
  290|      0|#if SIZEOF_SRE_CHAR < 4
  291|      0|        if ((SRE_CODE) c != chr)
  ------------------
  |  Branch (291:13): [True: 0, False: 0]
  ------------------
  292|      0|            ; /* literal can't match: doesn't fit in char width */
  293|      0|        else
  294|      0|#endif
  295|      0|        while (ptr < end && *ptr == c)
  ------------------
  |  Branch (295:16): [True: 0, False: 0]
  |  Branch (295:29): [True: 0, False: 0]
  ------------------
  296|      0|            ptr++;
  297|      0|        break;
  298|       |
  299|      0|    case SRE_OP_LITERAL_IGNORE:
  ------------------
  |  |   47|      0|#define SRE_OP_LITERAL_IGNORE 32
  ------------------
  |  Branch (299:5): [True: 0, False: 1]
  ------------------
  300|       |        /* repeated literal */
  301|      0|        chr = pattern[1];
  302|      0|        TRACE(("|%p|%p|COUNT LITERAL_IGNORE %d\n", pattern, ptr, chr));
  303|      0|        while (ptr < end && (SRE_CODE) sre_lower_ascii(*ptr) == chr)
  ------------------
  |  Branch (303:16): [True: 0, False: 0]
  |  Branch (303:29): [True: 0, False: 0]
  ------------------
  304|      0|            ptr++;
  305|      0|        break;
  306|       |
  307|      0|    case SRE_OP_LITERAL_UNI_IGNORE:
  ------------------
  |  |   55|      0|#define SRE_OP_LITERAL_UNI_IGNORE 40
  ------------------
  |  Branch (307:5): [True: 0, False: 1]
  ------------------
  308|       |        /* repeated literal */
  309|      0|        chr = pattern[1];
  310|      0|        TRACE(("|%p|%p|COUNT LITERAL_UNI_IGNORE %d\n", pattern, ptr, chr));
  311|      0|        while (ptr < end && (SRE_CODE) sre_lower_unicode(*ptr) == chr)
  ------------------
  |  Branch (311:16): [True: 0, False: 0]
  |  Branch (311:29): [True: 0, False: 0]
  ------------------
  312|      0|            ptr++;
  313|      0|        break;
  314|       |
  315|      0|    case SRE_OP_LITERAL_LOC_IGNORE:
  ------------------
  |  |   51|      0|#define SRE_OP_LITERAL_LOC_IGNORE 36
  ------------------
  |  Branch (315:5): [True: 0, False: 1]
  ------------------
  316|       |        /* repeated literal */
  317|      0|        chr = pattern[1];
  318|      0|        TRACE(("|%p|%p|COUNT LITERAL_LOC_IGNORE %d\n", pattern, ptr, chr));
  319|      0|        while (ptr < end && char_loc_ignore(chr, *ptr))
  ------------------
  |  Branch (319:16): [True: 0, False: 0]
  |  Branch (319:29): [True: 0, False: 0]
  ------------------
  320|      0|            ptr++;
  321|      0|        break;
  322|       |
  323|      0|    case SRE_OP_NOT_LITERAL:
  ------------------
  |  |   35|      0|#define SRE_OP_NOT_LITERAL 20
  ------------------
  |  Branch (323:5): [True: 0, False: 1]
  ------------------
  324|       |        /* repeated non-literal */
  325|      0|        chr = pattern[1];
  326|      0|        TRACE(("|%p|%p|COUNT NOT_LITERAL %d\n", pattern, ptr, chr));
  327|      0|        c = (SRE_CHAR) chr;
  328|      0|#if SIZEOF_SRE_CHAR < 4
  329|      0|        if ((SRE_CODE) c != chr)
  ------------------
  |  Branch (329:13): [True: 0, False: 0]
  ------------------
  330|      0|            ptr = end; /* literal can't match: doesn't fit in char width */
  331|      0|        else
  332|      0|#endif
  333|      0|        while (ptr < end && *ptr != c)
  ------------------
  |  Branch (333:16): [True: 0, False: 0]
  |  Branch (333:29): [True: 0, False: 0]
  ------------------
  334|      0|            ptr++;
  335|      0|        break;
  336|       |
  337|      0|    case SRE_OP_NOT_LITERAL_IGNORE:
  ------------------
  |  |   48|      0|#define SRE_OP_NOT_LITERAL_IGNORE 33
  ------------------
  |  Branch (337:5): [True: 0, False: 1]
  ------------------
  338|       |        /* repeated non-literal */
  339|      0|        chr = pattern[1];
  340|      0|        TRACE(("|%p|%p|COUNT NOT_LITERAL_IGNORE %d\n", pattern, ptr, chr));
  341|      0|        while (ptr < end && (SRE_CODE) sre_lower_ascii(*ptr) != chr)
  ------------------
  |  Branch (341:16): [True: 0, False: 0]
  |  Branch (341:29): [True: 0, False: 0]
  ------------------
  342|      0|            ptr++;
  343|      0|        break;
  344|       |
  345|      0|    case SRE_OP_NOT_LITERAL_UNI_IGNORE:
  ------------------
  |  |   56|      0|#define SRE_OP_NOT_LITERAL_UNI_IGNORE 41
  ------------------
  |  Branch (345:5): [True: 0, False: 1]
  ------------------
  346|       |        /* repeated non-literal */
  347|      0|        chr = pattern[1];
  348|      0|        TRACE(("|%p|%p|COUNT NOT_LITERAL_UNI_IGNORE %d\n", pattern, ptr, chr));
  349|      0|        while (ptr < end && (SRE_CODE) sre_lower_unicode(*ptr) != chr)
  ------------------
  |  Branch (349:16): [True: 0, False: 0]
  |  Branch (349:29): [True: 0, False: 0]
  ------------------
  350|      0|            ptr++;
  351|      0|        break;
  352|       |
  353|      0|    case SRE_OP_NOT_LITERAL_LOC_IGNORE:
  ------------------
  |  |   52|      0|#define SRE_OP_NOT_LITERAL_LOC_IGNORE 37
  ------------------
  |  Branch (353:5): [True: 0, False: 1]
  ------------------
  354|       |        /* repeated non-literal */
  355|      0|        chr = pattern[1];
  356|      0|        TRACE(("|%p|%p|COUNT NOT_LITERAL_LOC_IGNORE %d\n", pattern, ptr, chr));
  357|      0|        while (ptr < end && !char_loc_ignore(chr, *ptr))
  ------------------
  |  Branch (357:16): [True: 0, False: 0]
  |  Branch (357:29): [True: 0, False: 0]
  ------------------
  358|      0|            ptr++;
  359|      0|        break;
  360|       |
  361|      1|    case SRE_OP_CATEGORY:
  ------------------
  |  |   23|      1|#define SRE_OP_CATEGORY 8
  ------------------
  |  Branch (361:5): [True: 1, False: 0]
  ------------------
  362|      1|        arg = pattern[1];
  363|      1|        TRACE(("|%p|%p|COUNT CATEGORY %d\n", pattern, ptr, arg));
  364|      1|        while (ptr < end && sre_category(arg, *ptr))
  ------------------
  |  Branch (364:16): [True: 0, False: 1]
  |  Branch (364:29): [True: 0, False: 0]
  ------------------
  365|      0|            ptr++;
  366|      1|        break;
  367|       |
  368|      0|    default:
  ------------------
  |  Branch (368:5): [True: 0, False: 1]
  ------------------
  369|       |        /* repeated single character pattern */
  370|      0|        TRACE(("|%p|%p|COUNT SUBPATTERN\n", pattern, ptr));
  371|      0|        while ((SRE_CHAR*) state->ptr < end) {
  ------------------
  |  Branch (371:16): [True: 0, False: 0]
  ------------------
  372|      0|            i = SRE(match)(state, pattern, 0);
  ------------------
  |  |  501|      0|#define SRE(F) sre_ucs1_##F
  ------------------
  373|      0|            if (i < 0)
  ------------------
  |  Branch (373:17): [True: 0, False: 0]
  ------------------
  374|      0|                return i;
  375|      0|            if (!i)
  ------------------
  |  Branch (375:17): [True: 0, False: 0]
  ------------------
  376|      0|                break;
  377|      0|        }
  378|      0|        TRACE(("|%p|%p|COUNT %zd\n", pattern, ptr,
  379|      0|               (SRE_CHAR*) state->ptr - ptr));
  380|      0|        return (SRE_CHAR*) state->ptr - ptr;
  381|      1|    }
  382|       |
  383|      1|    TRACE(("|%p|%p|COUNT %zd\n", pattern, ptr,
  384|      1|           ptr - (SRE_CHAR*) state->ptr));
  385|      1|    return ptr - (SRE_CHAR*) state->ptr;
  386|      1|}

PyInit__stat:
  711|      2|{
  712|      2|    return PyModuleDef_Init(&statmodule);
  713|      2|}
_stat.c:stat_S_ISDIR:
  334|      2|stat_S_ISFUNC(S_ISDIR,
  ------------------
  |  |  326|      2|    {                                                          \
  |  |  327|      2|       mode_t mode = _PyLong_AsMode_t(omode);                   \
  |  |  328|      2|       if ((mode == (mode_t)-1) && PyErr_Occurred())           \
  |  |  ------------------
  |  |  |  Branch (328:12): [True: 0, False: 2]
  |  |  |  Branch (328:36): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      2|           return NULL;                                        \
  |  |  330|      2|       return PyBool_FromLong(isfunc(mode));                   \
  |  |  ------------------
  |  |  |  |  334|      2|stat_S_ISFUNC(S_ISDIR,
  |  |  ------------------
  |  |  331|      2|    }                                                          \
  ------------------
_stat.c:_PyLong_AsMode_t:
  294|      2|{
  295|      2|    unsigned long value;
  296|      2|    mode_t mode;
  297|       |
  298|      2|    if (PyLong_Check(op)) {
  ------------------
  |  |   13|      2|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|      2|        value = PyLong_AsUnsignedLong(op);
  300|      2|    }
  301|      0|    else {
  302|      0|        op = PyNumber_Index(op);
  303|      0|        if (op == NULL) {
  ------------------
  |  Branch (303:13): [True: 0, False: 0]
  ------------------
  304|      0|            return (mode_t)-1;
  305|      0|        }
  306|      0|        value = PyLong_AsUnsignedLong(op);
  307|      0|        Py_DECREF(op);
  ------------------
  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|      0|    }
  309|       |
  310|      2|    if ((value == (unsigned long)-1) && PyErr_Occurred()) {
  ------------------
  |  Branch (310:9): [True: 0, False: 2]
  |  Branch (310:41): [True: 0, False: 0]
  ------------------
  311|      0|        return (mode_t)-1;
  312|      0|    }
  313|       |
  314|      2|    mode = (mode_t)value;
  315|      2|    if ((unsigned long)mode != value) {
  ------------------
  |  Branch (315:9): [True: 0, False: 2]
  ------------------
  316|      0|        PyErr_SetString(PyExc_OverflowError, "mode out of range");
  317|      0|        return (mode_t)-1;
  318|      0|    }
  319|      2|    return mode;
  320|      2|}
_stat.c:stat_exec:
  565|      2|{
  566|      2|#define ADD_INT_MACRO(module, macro)                                  \
  567|      2|    do {                                                              \
  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  569|      2|            return -1;                                                \
  570|      2|        }                                                             \
  571|      2|    } while (0)
  572|       |
  573|      2|    ADD_INT_MACRO(module, S_IFDIR);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  574|      2|    ADD_INT_MACRO(module, S_IFCHR);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  575|      2|    ADD_INT_MACRO(module, S_IFBLK);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  576|      2|    ADD_INT_MACRO(module, S_IFREG);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  577|      2|    ADD_INT_MACRO(module, S_IFIFO);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  578|      2|    ADD_INT_MACRO(module, S_IFLNK);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  579|      2|    ADD_INT_MACRO(module, S_IFSOCK);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  580|      2|    ADD_INT_MACRO(module, S_IFDOOR);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  581|      2|    ADD_INT_MACRO(module, S_IFPORT);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  582|      2|    ADD_INT_MACRO(module, S_IFWHT);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  583|       |
  584|      2|    ADD_INT_MACRO(module, S_ISUID);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  585|      2|    ADD_INT_MACRO(module, S_ISGID);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  586|      2|    ADD_INT_MACRO(module, S_ISVTX);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  587|      2|    ADD_INT_MACRO(module, S_ENFMT);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  588|       |
  589|      2|    ADD_INT_MACRO(module, S_IREAD);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  590|      2|    ADD_INT_MACRO(module, S_IWRITE);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  591|      2|    ADD_INT_MACRO(module, S_IEXEC);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  592|       |
  593|      2|    ADD_INT_MACRO(module, S_IRWXU);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  594|      2|    ADD_INT_MACRO(module, S_IRUSR);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  595|      2|    ADD_INT_MACRO(module, S_IWUSR);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  596|      2|    ADD_INT_MACRO(module, S_IXUSR);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  597|       |
  598|      2|    ADD_INT_MACRO(module, S_IRWXG);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  599|      2|    ADD_INT_MACRO(module, S_IRGRP);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  600|      2|    ADD_INT_MACRO(module, S_IWGRP);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  601|      2|    ADD_INT_MACRO(module, S_IXGRP);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  602|       |
  603|      2|    ADD_INT_MACRO(module, S_IRWXO);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  604|      2|    ADD_INT_MACRO(module, S_IROTH);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  605|      2|    ADD_INT_MACRO(module, S_IWOTH);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  606|      2|    ADD_INT_MACRO(module, S_IXOTH);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  607|       |
  608|      2|    ADD_INT_MACRO(module, UF_SETTABLE);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  609|      2|    ADD_INT_MACRO(module, UF_NODUMP);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  610|      2|    ADD_INT_MACRO(module, UF_IMMUTABLE);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  611|      2|    ADD_INT_MACRO(module, UF_APPEND);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  612|      2|    ADD_INT_MACRO(module, UF_OPAQUE);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  613|      2|    ADD_INT_MACRO(module, UF_NOUNLINK);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  614|      2|    ADD_INT_MACRO(module, UF_COMPRESSED);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  615|      2|    ADD_INT_MACRO(module, UF_TRACKED);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  616|      2|    ADD_INT_MACRO(module, UF_DATAVAULT);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  617|      2|    ADD_INT_MACRO(module, UF_HIDDEN);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  618|      2|    ADD_INT_MACRO(module, SF_SETTABLE);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  619|      2|    ADD_INT_MACRO(module, SF_ARCHIVED);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  620|      2|    ADD_INT_MACRO(module, SF_IMMUTABLE);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  621|      2|    ADD_INT_MACRO(module, SF_APPEND);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  622|      2|    ADD_INT_MACRO(module, SF_NOUNLINK);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  623|      2|    ADD_INT_MACRO(module, SF_SNAPSHOT);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  624|      2|    ADD_INT_MACRO(module, SF_FIRMLINK);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  625|      2|    ADD_INT_MACRO(module, SF_DATALESS);
  ------------------
  |  |  567|      2|    do {                                                              \
  |  |  568|      2|        if (PyModule_AddIntConstant(module, #macro, macro) < 0) {     \
  |  |  ------------------
  |  |  |  Branch (568:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  569|      0|            return -1;                                                \
  |  |  570|      0|        }                                                             \
  |  |  571|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (571:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  626|       |
  627|       |#ifdef SF_SUPPORTED
  628|       |    ADD_INT_MACRO(module, SF_SUPPORTED);
  629|       |#endif
  630|       |#ifdef SF_SYNTHETIC
  631|       |    ADD_INT_MACRO(module, SF_SYNTHETIC);
  632|       |#endif
  633|       |
  634|       |
  635|      2|    const char* st_constants[] = {
  636|      2|        "ST_MODE",
  637|      2|        "ST_INO",
  638|      2|        "ST_DEV",
  639|      2|        "ST_NLINK",
  640|      2|        "ST_UID",
  641|      2|        "ST_GID",
  642|      2|        "ST_SIZE",
  643|      2|        "ST_ATIME",
  644|      2|        "ST_MTIME",
  645|      2|        "ST_CTIME"
  646|      2|    };
  647|       |
  648|     22|    for (int i = 0; i < (int)Py_ARRAY_LENGTH(st_constants); i++) {
  ------------------
  |  |  221|     22|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (648:21): [True: 20, False: 2]
  ------------------
  649|     20|        if (PyModule_AddIntConstant(module, st_constants[i], i) < 0) {
  ------------------
  |  Branch (649:13): [True: 0, False: 20]
  ------------------
  650|      0|            return -1;
  651|      0|        }
  652|     20|    }
  653|       |
  654|       |#ifdef MS_WINDOWS
  655|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_ARCHIVE);
  656|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_COMPRESSED);
  657|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_DEVICE);
  658|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_DIRECTORY);
  659|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_ENCRYPTED);
  660|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_HIDDEN);
  661|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_INTEGRITY_STREAM);
  662|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_NORMAL);
  663|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_NOT_CONTENT_INDEXED);
  664|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_NO_SCRUB_DATA);
  665|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_OFFLINE);
  666|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_READONLY);
  667|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_REPARSE_POINT);
  668|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_SPARSE_FILE);
  669|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_SYSTEM);
  670|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_TEMPORARY);
  671|       |    ADD_INT_MACRO(module, FILE_ATTRIBUTE_VIRTUAL);
  672|       |
  673|       |    if (PyModule_Add(module, "IO_REPARSE_TAG_SYMLINK",
  674|       |            PyLong_FromUnsignedLong(IO_REPARSE_TAG_SYMLINK)) < 0) {
  675|       |        return -1;
  676|       |    }
  677|       |    if (PyModule_Add(module, "IO_REPARSE_TAG_MOUNT_POINT",
  678|       |            PyLong_FromUnsignedLong(IO_REPARSE_TAG_MOUNT_POINT)) < 0) {
  679|       |        return -1;
  680|       |    }
  681|       |    if (PyModule_Add(module, "IO_REPARSE_TAG_APPEXECLINK",
  682|       |            PyLong_FromUnsignedLong(IO_REPARSE_TAG_APPEXECLINK)) < 0) {
  683|       |        return -1;
  684|       |    }
  685|       |#endif
  686|       |
  687|      2|    return 0;
  688|      2|}

PyInit__thread:
 2901|      2|{
 2902|      2|    return PyModuleDef_Init(&thread_module);
 2903|      2|}
_threadmodule.c:get_thread_state:
   58|    695|{
   59|    695|    void *state = _PyModule_GetState(module);
   60|    695|    assert(state != NULL);
  ------------------
  |  Branch (60:5): [True: 695, False: 0]
  ------------------
   61|    695|    return (thread_module_state *)state;
   62|    695|}
_threadmodule.c:_thread_allocate_lock_impl:
 2135|    336|{
 2136|    336|    thread_module_state *state = get_thread_state(module);
 2137|    336|    return lock_new_impl(state->lock_type);
 2138|    336|}
_threadmodule.c:lock_new_impl:
 1015|    336|{
 1016|    336|    lockobject *self = (lockobject *)type->tp_alloc(type, 0);
 1017|    336|    if (self == NULL) {
  ------------------
  |  Branch (1017:9): [True: 0, False: 336]
  ------------------
 1018|      0|        return NULL;
 1019|      0|    }
 1020|    336|    self->lock = (PyMutex){0};
 1021|    336|    return (PyObject *)self;
 1022|    336|}
_threadmodule.c:_thread_get_ident_impl:
 2162|    734|{
 2163|    734|    PyThread_ident_t ident = PyThread_get_thread_ident_ex();
 2164|    734|    if (ident == PYTHREAD_INVALID_THREAD_ID) {
  ------------------
  |  |   13|    734|#define PYTHREAD_INVALID_THREAD_ID ((unsigned long)-1)
  ------------------
  |  Branch (2164:9): [True: 0, False: 734]
  ------------------
 2165|      0|        PyErr_SetString(ThreadError, "no current thread ident");
  ------------------
  |  |   23|      0|#define ThreadError PyExc_RuntimeError
  ------------------
 2166|      0|        return NULL;
 2167|      0|    }
 2168|    734|    return PyLong_FromUnsignedLongLong(ident);
 2169|    734|}
_threadmodule.c:thread_module_exec:
 2720|      2|{
 2721|      2|    thread_module_state *state = get_thread_state(module);
 2722|      2|    PyObject *d = PyModule_GetDict(module);
 2723|       |
 2724|       |    // Initialize the C thread library
 2725|      2|    PyThread_init_thread();
 2726|       |
 2727|       |    // _ThreadHandle
 2728|      2|    state->thread_handle_type = (PyTypeObject *)PyType_FromSpec(&ThreadHandle_Type_spec);
 2729|      2|    if (state->thread_handle_type == NULL) {
  ------------------
  |  Branch (2729:9): [True: 0, False: 2]
  ------------------
 2730|      0|        return -1;
 2731|      0|    }
 2732|      2|    if (PyDict_SetItemString(d, "_ThreadHandle", (PyObject *)state->thread_handle_type) < 0) {
  ------------------
  |  Branch (2732:9): [True: 0, False: 2]
  ------------------
 2733|      0|        return -1;
 2734|      0|    }
 2735|       |
 2736|       |    // Lock
 2737|      2|    state->lock_type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &lock_type_spec, NULL);
 2738|      2|    if (state->lock_type == NULL) {
  ------------------
  |  Branch (2738:9): [True: 0, False: 2]
  ------------------
 2739|      0|        return -1;
 2740|      0|    }
 2741|      2|    if (PyModule_AddType(module, state->lock_type) < 0) {
  ------------------
  |  Branch (2741:9): [True: 0, False: 2]
  ------------------
 2742|      0|        return -1;
 2743|      0|    }
 2744|       |    // Old alias: lock -> LockType
 2745|      2|    if (PyDict_SetItemString(d, "LockType", (PyObject *)state->lock_type) < 0) {
  ------------------
  |  Branch (2745:9): [True: 0, False: 2]
  ------------------
 2746|      0|        return -1;
 2747|      0|    }
 2748|       |
 2749|       |    // RLock
 2750|      2|    state->rlock_type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &rlock_type_spec, NULL);
 2751|      2|    if (state->rlock_type == NULL) {
  ------------------
  |  Branch (2751:9): [True: 0, False: 2]
  ------------------
 2752|      0|        return -1;
 2753|      0|    }
 2754|      2|    if (PyModule_AddType(module, state->rlock_type) < 0) {
  ------------------
  |  Branch (2754:9): [True: 0, False: 2]
  ------------------
 2755|      0|        return -1;
 2756|      0|    }
 2757|       |
 2758|       |    // Local dummy
 2759|      2|    state->local_dummy_type = (PyTypeObject *)PyType_FromSpec(&local_dummy_type_spec);
 2760|      2|    if (state->local_dummy_type == NULL) {
  ------------------
  |  Branch (2760:9): [True: 0, False: 2]
  ------------------
 2761|      0|        return -1;
 2762|      0|    }
 2763|       |
 2764|       |    // Local
 2765|      2|    state->local_type = (PyTypeObject *)PyType_FromModuleAndSpec(module, &local_type_spec, NULL);
 2766|      2|    if (state->local_type == NULL) {
  ------------------
  |  Branch (2766:9): [True: 0, False: 2]
  ------------------
 2767|      0|        return -1;
 2768|      0|    }
 2769|      2|    if (PyModule_AddType(module, state->local_type) < 0) {
  ------------------
  |  Branch (2769:9): [True: 0, False: 2]
  ------------------
 2770|      0|        return -1;
 2771|      0|    }
 2772|       |
 2773|       |    // Add module attributes
 2774|      2|    if (PyDict_SetItemString(d, "error", ThreadError) < 0) {
  ------------------
  |  |   23|      2|#define ThreadError PyExc_RuntimeError
  ------------------
  |  Branch (2774:9): [True: 0, False: 2]
  ------------------
 2775|      0|        return -1;
 2776|      0|    }
 2777|       |
 2778|       |    // _ExceptHookArgs type
 2779|      2|    state->excepthook_type = PyStructSequence_NewType(&ExceptHookArgs_desc);
 2780|      2|    if (state->excepthook_type == NULL) {
  ------------------
  |  Branch (2780:9): [True: 0, False: 2]
  ------------------
 2781|      0|        return -1;
 2782|      0|    }
 2783|      2|    if (PyModule_AddType(module, state->excepthook_type) < 0) {
  ------------------
  |  Branch (2783:9): [True: 0, False: 2]
  ------------------
 2784|      0|        return -1;
 2785|      0|    }
 2786|       |
 2787|       |    // TIMEOUT_MAX
 2788|      2|    double timeout_max = (double)PY_TIMEOUT_MAX * 1e-6;
 2789|      2|    double time_max = PyTime_AsSecondsDouble(PyTime_MAX);
  ------------------
  |  |   12|      2|#define PyTime_MAX INT64_MAX
  ------------------
 2790|      2|    timeout_max = Py_MIN(timeout_max, time_max);
  ------------------
  |  |  120|      2|       __extension__ \
  |  |  121|      2|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      2|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      2|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2791|       |    // Round towards minus infinity
 2792|      2|    timeout_max = floor(timeout_max);
 2793|       |
 2794|      2|    if (PyModule_Add(module, "TIMEOUT_MAX",
  ------------------
  |  Branch (2794:9): [True: 0, False: 2]
  ------------------
 2795|      2|                        PyFloat_FromDouble(timeout_max)) < 0) {
 2796|      0|        return -1;
 2797|      0|    }
 2798|       |
 2799|      2|    llist_init(&state->shutdown_handles);
 2800|       |
 2801|      2|#ifdef _PYTHREAD_NAME_MAXLEN
 2802|      2|    if (PyModule_AddIntConstant(module, "_NAME_MAXLEN",
  ------------------
  |  Branch (2802:9): [True: 0, False: 2]
  ------------------
 2803|      2|                                _PYTHREAD_NAME_MAXLEN) < 0) {
  ------------------
  |  | 2172|      2|#define _PYTHREAD_NAME_MAXLEN 15
  ------------------
 2804|      0|        return -1;
 2805|      0|    }
 2806|      2|#endif
 2807|       |
 2808|       |#ifdef MS_WINDOWS
 2809|       |    HMODULE kernelbase = GetModuleHandleW(L"kernelbase.dll");
 2810|       |    if (kernelbase != NULL) {
 2811|       |        if (pGetThreadDescription == NULL) {
 2812|       |            pGetThreadDescription = (PF_GET_THREAD_DESCRIPTION)GetProcAddress(
 2813|       |                                        kernelbase, "GetThreadDescription");
 2814|       |        }
 2815|       |        if (pSetThreadDescription == NULL) {
 2816|       |            pSetThreadDescription = (PF_SET_THREAD_DESCRIPTION)GetProcAddress(
 2817|       |                                        kernelbase, "SetThreadDescription");
 2818|       |        }
 2819|       |    }
 2820|       |
 2821|       |    if (pGetThreadDescription == NULL) {
 2822|       |        if (PyObject_DelAttrString(module, "_get_name") < 0) {
 2823|       |            return -1;
 2824|       |        }
 2825|       |    }
 2826|       |    if (pSetThreadDescription == NULL) {
 2827|       |        if (PyObject_DelAttrString(module, "set_name") < 0) {
 2828|       |            return -1;
 2829|       |        }
 2830|       |    }
 2831|       |#endif
 2832|       |
 2833|      2|    return 0;
 2834|      2|}
_threadmodule.c:lock_dealloc:
  791|    336|{
  792|    336|    PyObject_GC_UnTrack(self);
  793|    336|    PyObject_ClearWeakRefs(self);
  794|    336|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|    336|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|    336|    tp->tp_free(self);
  796|    336|    Py_DECREF(tp);
  ------------------
  |  |  430|    336|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  797|    336|}
_threadmodule.c:lock_acquire_parse_timeout:
  802|    734|{
  803|       |    // XXX Use PyThread_ParseTimeoutArg().
  804|       |
  805|    734|    const PyTime_t unset_timeout = _PyTime_FromSeconds(-1);
  806|    734|    *timeout = unset_timeout;
  807|       |
  808|    734|    if (timeout_obj
  ------------------
  |  Branch (808:9): [True: 0, False: 734]
  ------------------
  809|      0|        && _PyTime_FromSecondsObject(timeout,
  ------------------
  |  Branch (809:12): [True: 0, False: 0]
  ------------------
  810|      0|                                     timeout_obj, _PyTime_ROUND_TIMEOUT) < 0)
  811|      0|        return -1;
  812|       |
  813|    734|    if (!blocking && *timeout != unset_timeout ) {
  ------------------
  |  Branch (813:9): [True: 0, False: 734]
  |  Branch (813:22): [True: 0, False: 0]
  ------------------
  814|      0|        PyErr_SetString(PyExc_ValueError,
  815|      0|                        "can't specify a timeout for a non-blocking call");
  816|      0|        return -1;
  817|      0|    }
  818|    734|    if (*timeout < 0 && *timeout != unset_timeout) {
  ------------------
  |  Branch (818:9): [True: 734, False: 0]
  |  Branch (818:25): [True: 0, False: 734]
  ------------------
  819|      0|        PyErr_SetString(PyExc_ValueError,
  820|      0|                        "timeout value must be a non-negative number");
  821|      0|        return -1;
  822|      0|    }
  823|    734|    if (!blocking)
  ------------------
  |  Branch (823:9): [True: 0, False: 734]
  ------------------
  824|      0|        *timeout = 0;
  825|    734|    else if (*timeout != unset_timeout) {
  ------------------
  |  Branch (825:14): [True: 0, False: 734]
  ------------------
  826|      0|        PyTime_t microseconds;
  827|       |
  828|      0|        microseconds = _PyTime_AsMicroseconds(*timeout, _PyTime_ROUND_TIMEOUT);
  829|      0|        if (microseconds > PY_TIMEOUT_MAX) {
  ------------------
  |  Branch (829:13): [True: 0, False: 0]
  ------------------
  830|      0|            PyErr_SetString(PyExc_OverflowError,
  831|      0|                            "timeout value is too large");
  832|      0|            return -1;
  833|      0|        }
  834|      0|    }
  835|    734|    return 0;
  836|    734|}
_threadmodule.c:get_thread_state_by_cls:
   66|    337|{
   67|       |    // Use PyType_GetModuleByDef() to handle (R)Lock subclasses.
   68|    337|    PyObject *module = PyType_GetModuleByDef(cls, &thread_module);
   69|    337|    if (module == NULL) {
  ------------------
  |  Branch (69:9): [True: 0, False: 337]
  ------------------
   70|      0|        return NULL;
   71|      0|    }
   72|    337|    return get_thread_state(module);
   73|    337|}
_threadmodule.c:rlock_dealloc:
 1083|    336|{
 1084|    336|    PyObject_GC_UnTrack(self);
 1085|    336|    PyObject_ClearWeakRefs(self);
 1086|    336|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|    336|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|    336|    tp->tp_free(self);
 1088|    336|    Py_DECREF(tp);
  ------------------
  |  |  430|    336|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|    336|}
_threadmodule.c:_thread_RLock_acquire_impl:
 1116|    734|{
 1117|    734|    PyTime_t timeout;
 1118|       |
 1119|    734|    if (lock_acquire_parse_timeout(timeoutobj, blocking, &timeout) < 0) {
  ------------------
  |  Branch (1119:9): [True: 0, False: 734]
  ------------------
 1120|      0|        return NULL;
 1121|      0|    }
 1122|       |
 1123|    734|    PyLockStatus r = _PyRecursiveMutex_LockTimed(
 1124|    734|        &self->lock, timeout,
 1125|    734|        _PY_LOCK_PYTHONLOCK | _PY_LOCK_HANDLE_SIGNALS | _PY_LOCK_DETACH);
 1126|    734|    if (r == PY_LOCK_INTR) {
  ------------------
  |  Branch (1126:9): [True: 0, False: 734]
  ------------------
 1127|      0|        assert(PyErr_Occurred());
  ------------------
  |  Branch (1127:9): [True: 0, False: 0]
  ------------------
 1128|      0|        return NULL;
 1129|      0|    }
 1130|    734|    if (r == PY_LOCK_FAILURE && PyErr_Occurred()) {
  ------------------
  |  Branch (1130:9): [True: 0, False: 734]
  |  Branch (1130:33): [True: 0, False: 0]
  ------------------
 1131|      0|        return NULL;
 1132|      0|    }
 1133|       |
 1134|    734|    return PyBool_FromLong(r == PY_LOCK_ACQUIRED);
 1135|    734|}
_threadmodule.c:_thread_RLock_release_impl:
 1168|    734|{
 1169|    734|    if (_PyRecursiveMutex_TryUnlock(&self->lock) < 0) {
  ------------------
  |  Branch (1169:9): [True: 0, False: 734]
  ------------------
 1170|      0|        PyErr_SetString(PyExc_RuntimeError,
 1171|      0|                        "cannot release un-acquired lock");
 1172|      0|        return NULL;
 1173|      0|    }
 1174|    734|    Py_RETURN_NONE;
  ------------------
  |  |  628|    734|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    734|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1175|    734|}
_threadmodule.c:_thread_RLock___enter___impl:
 1146|    734|{
 1147|       |    return _thread_RLock_acquire_impl(self, 1, NULL);
 1148|    734|}
_threadmodule.c:_thread_RLock___exit___impl:
 1192|    734|{
 1193|    734|    return _thread_RLock_release_impl(self);
 1194|    734|}
_threadmodule.c:rlock_new_impl:
 1299|    337|{
 1300|    337|    rlockobject *self = (rlockobject *) type->tp_alloc(type, 0);
 1301|    337|    if (self == NULL) {
  ------------------
  |  Branch (1301:9): [True: 0, False: 337]
  ------------------
 1302|      0|        return NULL;
 1303|      0|    }
 1304|    337|    self->lock = (_PyRecursiveMutex){0};
 1305|    337|    return (PyObject *) self;
 1306|    337|}
_threadmodule.c:thread_module_traverse:
 2839|     20|{
 2840|     20|    thread_module_state *state = get_thread_state(module);
 2841|     20|    Py_VISIT(state->excepthook_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2842|     20|    Py_VISIT(state->lock_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2843|     20|    Py_VISIT(state->rlock_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2844|     20|    Py_VISIT(state->local_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2845|     20|    Py_VISIT(state->local_dummy_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2846|     20|    Py_VISIT(state->thread_handle_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2847|     20|    return 0;
 2848|     20|}

PyInit__types:
   74|      1|{
   75|      1|    return PyModuleDef_Init(&typesmodule);
   76|      1|}
_typesmodule.c:_types_exec:
   12|      1|{
   13|      1|#define EXPORT_STATIC_TYPE(NAME, TYPE)                                   \
   14|      1|    do {                                                                 \
   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
   17|      1|            return -1;                                                   \
   18|      1|        }                                                                \
   19|      1|    } while (0)
   20|       |
   21|      1|    EXPORT_STATIC_TYPE("AsyncGeneratorType", PyAsyncGen_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (21:5): [True: 1, False: 0]
  ------------------
   22|      1|    EXPORT_STATIC_TYPE("BuiltinFunctionType", PyCFunction_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (22:5): [True: 1, False: 0]
  ------------------
   23|       |    // BuiltinMethodType is the same as BuiltinFunctionType
   24|      1|    EXPORT_STATIC_TYPE("BuiltinMethodType", PyCFunction_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (24:5): [True: 1, False: 0]
  ------------------
   25|      1|    EXPORT_STATIC_TYPE("CapsuleType", PyCapsule_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (25:5): [True: 1, False: 0]
  ------------------
   26|      1|    EXPORT_STATIC_TYPE("CellType", PyCell_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (26:5): [True: 1, False: 0]
  ------------------
   27|      1|    EXPORT_STATIC_TYPE("ClassMethodDescriptorType", PyClassMethodDescr_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (27:5): [True: 1, False: 0]
  ------------------
   28|      1|    EXPORT_STATIC_TYPE("CodeType", PyCode_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (28:5): [True: 1, False: 0]
  ------------------
   29|      1|    EXPORT_STATIC_TYPE("CoroutineType", PyCoro_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (29:5): [True: 1, False: 0]
  ------------------
   30|      1|    EXPORT_STATIC_TYPE("EllipsisType", PyEllipsis_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (30:5): [True: 1, False: 0]
  ------------------
   31|      1|    EXPORT_STATIC_TYPE("FrameType", PyFrame_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (31:5): [True: 1, False: 0]
  ------------------
   32|      1|    EXPORT_STATIC_TYPE("FrameLocalsProxyType", PyFrameLocalsProxy_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (32:5): [True: 1, False: 0]
  ------------------
   33|      1|    EXPORT_STATIC_TYPE("FunctionType", PyFunction_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (33:5): [True: 1, False: 0]
  ------------------
   34|      1|    EXPORT_STATIC_TYPE("GeneratorType", PyGen_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (34:5): [True: 1, False: 0]
  ------------------
   35|      1|    EXPORT_STATIC_TYPE("GenericAlias", Py_GenericAliasType);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (35:5): [True: 1, False: 0]
  ------------------
   36|      1|    EXPORT_STATIC_TYPE("GetSetDescriptorType", PyGetSetDescr_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (36:5): [True: 1, False: 0]
  ------------------
   37|       |    // LambdaType is the same as FunctionType
   38|      1|    EXPORT_STATIC_TYPE("LambdaType", PyFunction_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (38:5): [True: 1, False: 0]
  ------------------
   39|      1|    EXPORT_STATIC_TYPE("LazyImportType", PyLazyImport_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (39:5): [True: 1, False: 0]
  ------------------
   40|      1|    EXPORT_STATIC_TYPE("MappingProxyType", PyDictProxy_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (40:5): [True: 1, False: 0]
  ------------------
   41|      1|    EXPORT_STATIC_TYPE("MemberDescriptorType", PyMemberDescr_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (41:5): [True: 1, False: 0]
  ------------------
   42|      1|    EXPORT_STATIC_TYPE("MethodDescriptorType", PyMethodDescr_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (42:5): [True: 1, False: 0]
  ------------------
   43|      1|    EXPORT_STATIC_TYPE("MethodType", PyMethod_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (43:5): [True: 1, False: 0]
  ------------------
   44|      1|    EXPORT_STATIC_TYPE("MethodWrapperType", _PyMethodWrapper_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (44:5): [True: 1, False: 0]
  ------------------
   45|      1|    EXPORT_STATIC_TYPE("ModuleType", PyModule_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (45:5): [True: 1, False: 0]
  ------------------
   46|      1|    EXPORT_STATIC_TYPE("NoneType", _PyNone_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (46:5): [True: 1, False: 0]
  ------------------
   47|      1|    EXPORT_STATIC_TYPE("NotImplementedType", _PyNotImplemented_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (47:5): [True: 1, False: 0]
  ------------------
   48|      1|    EXPORT_STATIC_TYPE("SimpleNamespace", _PyNamespace_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (48:5): [True: 1, False: 0]
  ------------------
   49|      1|    EXPORT_STATIC_TYPE("TracebackType", PyTraceBack_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (49:5): [True: 1, False: 0]
  ------------------
   50|      1|    EXPORT_STATIC_TYPE("UnionType", _PyUnion_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (50:5): [True: 1, False: 0]
  ------------------
   51|      1|    EXPORT_STATIC_TYPE("WrapperDescriptorType", PyWrapperDescr_Type);
  ------------------
  |  |   14|      1|    do {                                                                 \
  |  |   15|      1|        assert(PyUnstable_IsImmortal((PyObject *)&(TYPE)));              \
  |  |   16|      1|        if (PyModule_AddObjectRef(m, (NAME), (PyObject *)&(TYPE)) < 0) { \
  |  |  ------------------
  |  |  |  Branch (16:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|            return -1;                                                   \
  |  |   18|      0|        }                                                                \
  |  |   19|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (19:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (51:5): [True: 1, False: 0]
  ------------------
   52|      1|#undef EXPORT_STATIC_TYPE
   53|      1|    return 0;
   54|      1|}

PyInit__weakref:
  186|      2|{
  187|      2|    return PyModuleDef_Init(&weakrefmodule);
  188|      2|}
_weakref.c:_weakref__remove_dead_weakref_impl:
   58|    367|{
   59|    367|    if (_PyDict_DelItemIf(dct, key, is_dead_weakref, NULL) < 0) {
  ------------------
  |  Branch (59:9): [True: 0, False: 367]
  ------------------
   60|      0|        return NULL;
   61|      0|    }
   62|    367|    Py_RETURN_NONE;
  ------------------
  |  |  628|    367|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    367|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
   63|    367|}
_weakref.c:is_dead_weakref:
   35|    367|{
   36|    367|    if (!PyWeakref_Check(value)) {
  ------------------
  |  |   23|    367|        (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
  |  |  ------------------
  |  |  |  |   15|    367|#define PyWeakref_CheckRef(op) PyObject_TypeCheck((op), &_PyWeakref_RefType)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|    734|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 367, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
  |  |  ------------------
  |  |  |  |   19|      0|        (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   20|      0|         || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType))
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   37|      0|        PyErr_SetString(PyExc_TypeError, "not a weakref");
   38|      0|        return -1;
   39|      0|    }
   40|    367|    return _PyWeakref_IS_DEAD(value);
   41|    367|}
_weakref.c:weakref_exec:
  144|      2|{
  145|      2|    if (PyModule_AddObjectRef(module, "ref", (PyObject *) &_PyWeakref_RefType) < 0) {
  ------------------
  |  Branch (145:9): [True: 0, False: 2]
  ------------------
  146|      0|        return -1;
  147|      0|    }
  148|      2|    if (PyModule_AddObjectRef(module, "ReferenceType",
  ------------------
  |  Branch (148:9): [True: 0, False: 2]
  ------------------
  149|      2|                           (PyObject *) &_PyWeakref_RefType) < 0) {
  150|      0|        return -1;
  151|      0|    }
  152|      2|    if (PyModule_AddObjectRef(module, "ProxyType",
  ------------------
  |  Branch (152:9): [True: 0, False: 2]
  ------------------
  153|      2|                           (PyObject *) &_PyWeakref_ProxyType) < 0) {
  154|      0|        return -1;
  155|      0|    }
  156|      2|    if (PyModule_AddObjectRef(module, "CallableProxyType",
  ------------------
  |  Branch (156:9): [True: 0, False: 2]
  ------------------
  157|      2|                           (PyObject *) &_PyWeakref_CallableProxyType) < 0) {
  158|      0|        return -1;
  159|      0|    }
  160|       |
  161|      2|    return 0;
  162|      2|}

LLVMFuzzerInitialize:
  598|      2|int LLVMFuzzerInitialize(int *argc, char ***argv) {
  599|      2|    PyConfig config;
  600|      2|    PyConfig_InitPythonConfig(&config);
  601|      2|    config.install_signal_handlers = 0;
  602|       |    /* Raise the limit above the default allows exercising larger things
  603|       |     * now that we fall back to the _pylong module for large values. */
  604|      2|    config.int_max_str_digits = 8086;
  605|      2|    PyStatus status;
  606|      2|    status = PyConfig_SetBytesString(&config, &config.program_name, *argv[0]);
  607|      2|    if (PyStatus_Exception(status)) {
  ------------------
  |  Branch (607:9): [True: 0, False: 2]
  ------------------
  608|      0|        goto fail;
  609|      0|    }
  610|       |
  611|      2|    status = Py_InitializeFromConfig(&config);
  612|      2|    if (PyStatus_Exception(status)) {
  ------------------
  |  Branch (612:9): [True: 0, False: 2]
  ------------------
  613|      0|        goto fail;
  614|      0|    }
  615|      2|    PyConfig_Clear(&config);
  616|       |
  617|      2|    return 0;
  618|       |
  619|      0|fail:
  620|      0|    PyConfig_Clear(&config);
  621|      0|    Py_ExitStatusException(status);
  622|      2|}
LLVMFuzzerTestOneInput:
  631|  24.5k|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  632|  24.5k|    assert(Py_IsInitialized());
  633|       |
  634|  24.5k|    int rv = 0;
  635|       |
  636|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_builtin_float)
  637|       |    rv |= _run_fuzz(data, size, fuzz_builtin_float);
  638|       |#endif
  639|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_builtin_int)
  640|       |    rv |= _run_fuzz(data, size, fuzz_builtin_int);
  641|       |#endif
  642|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_builtin_unicode)
  643|       |    rv |= _run_fuzz(data, size, fuzz_builtin_unicode);
  644|       |#endif
  645|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_struct_unpack)
  646|       |    static int STRUCT_UNPACK_INITIALIZED = 0;
  647|       |    if (!STRUCT_UNPACK_INITIALIZED && !init_struct_unpack()) {
  648|       |        PyErr_Print();
  649|       |        abort();
  650|       |    } else {
  651|       |        STRUCT_UNPACK_INITIALIZED = 1;
  652|       |    }
  653|       |    rv |= _run_fuzz(data, size, fuzz_struct_unpack);
  654|       |#endif
  655|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_json_loads)
  656|       |    static int JSON_LOADS_INITIALIZED = 0;
  657|       |    if (!JSON_LOADS_INITIALIZED && !init_json_loads()) {
  658|       |        PyErr_Print();
  659|       |        abort();
  660|       |    } else {
  661|       |        JSON_LOADS_INITIALIZED = 1;
  662|       |    }
  663|       |
  664|       |    rv |= _run_fuzz(data, size, fuzz_json_loads);
  665|       |#endif
  666|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_sre_compile)
  667|       |    static int SRE_COMPILE_INITIALIZED = 0;
  668|       |    if (!SRE_COMPILE_INITIALIZED && !init_sre_compile()) {
  669|       |        PyErr_Print();
  670|       |        abort();
  671|       |    } else {
  672|       |        SRE_COMPILE_INITIALIZED = 1;
  673|       |    }
  674|       |
  675|       |    if (SRE_COMPILE_INITIALIZED) {
  676|       |        rv |= _run_fuzz(data, size, fuzz_sre_compile);
  677|       |    }
  678|       |#endif
  679|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_sre_match)
  680|       |    static int SRE_MATCH_INITIALIZED = 0;
  681|       |    if (!SRE_MATCH_INITIALIZED && !init_sre_match()) {
  682|       |        PyErr_Print();
  683|       |        abort();
  684|       |    } else {
  685|       |        SRE_MATCH_INITIALIZED = 1;
  686|       |    }
  687|       |
  688|       |    rv |= _run_fuzz(data, size, fuzz_sre_match);
  689|       |#endif
  690|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_csv_reader)
  691|       |    static int CSV_READER_INITIALIZED = 0;
  692|       |    if (!CSV_READER_INITIALIZED && !init_csv_reader()) {
  693|       |        PyErr_Print();
  694|       |        abort();
  695|       |    } else {
  696|       |        CSV_READER_INITIALIZED = 1;
  697|       |    }
  698|       |
  699|       |    rv |= _run_fuzz(data, size, fuzz_csv_reader);
  700|       |#endif
  701|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_ast_literal_eval)
  702|       |    static int AST_LITERAL_EVAL_INITIALIZED = 0;
  703|       |    if (!AST_LITERAL_EVAL_INITIALIZED && !init_ast_literal_eval()) {
  704|       |        PyErr_Print();
  705|       |        abort();
  706|       |    } else {
  707|       |        AST_LITERAL_EVAL_INITIALIZED = 1;
  708|       |    }
  709|       |
  710|       |    rv |= _run_fuzz(data, size, fuzz_ast_literal_eval);
  711|       |#endif
  712|       |#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_elementtree_parsewhole)
  713|       |    static int ELEMENTTREE_PARSEWHOLE_INITIALIZED = 0;
  714|       |    if (!ELEMENTTREE_PARSEWHOLE_INITIALIZED && !init_elementtree_parsewhole()) {
  715|       |        PyErr_Print();
  716|       |        abort();
  717|       |    } else {
  718|       |        ELEMENTTREE_PARSEWHOLE_INITIALIZED = 1;
  719|       |    }
  720|       |
  721|       |    rv |= _run_fuzz(data, size, fuzz_elementtree_parsewhole);
  722|       |#endif
  723|  24.5k|#if !defined(_Py_FUZZ_ONE) || defined(_Py_FUZZ_fuzz_pycompile)
  724|  24.5k|    rv |= _run_fuzz(data, size, fuzz_pycompile);
  725|  24.5k|#endif
  726|  24.5k|  return rv;
  727|  24.5k|}
fuzzer.c:_run_fuzz:
  582|  24.5k|static int _run_fuzz(const uint8_t *data, size_t size, int(*fuzzer)(const char* , size_t)) {
  583|  24.5k|    int rv = fuzzer((const char*) data, size);
  584|  24.5k|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (584:9): [True: 0, False: 24.5k]
  ------------------
  585|       |        /* Fuzz tests should handle expected errors for themselves.
  586|       |           This is last-ditch check in case they didn't. */
  587|      0|        PyErr_Print();
  588|      0|        abort();
  589|      0|    }
  590|       |    /* Someday the return value might mean something, propagate it. */
  591|  24.5k|    return rv;
  592|  24.5k|}
fuzzer.c:fuzz_pycompile:
  513|  24.5k|static int fuzz_pycompile(const char* data, size_t size) {
  514|       |    // Ignore overly-large inputs, and account for a NUL terminator
  515|  24.5k|    if (size > MAX_PYCOMPILE_TEST_SIZE - 1) {
  ------------------
  |  |  503|  24.5k|#define MAX_PYCOMPILE_TEST_SIZE 16384
  ------------------
  |  Branch (515:9): [True: 1, False: 24.5k]
  ------------------
  516|      1|        return 0;
  517|      1|    }
  518|       |
  519|       |    // Need 3 bytes for parameter selection
  520|  24.5k|    if (size < 3) {
  ------------------
  |  Branch (520:9): [True: 2, False: 24.5k]
  ------------------
  521|      2|        return 0;
  522|      2|    }
  523|       |
  524|       |    // Use first byte to determine element of `start_vals` to use
  525|  24.5k|    unsigned char start_idx = (unsigned char) data[0];
  526|  24.5k|    int start = start_vals[start_idx % NUM_START_VALS];
  527|       |
  528|       |    // Use second byte to determine element of `optimize_vals` to use
  529|  24.5k|    unsigned char optimize_idx = (unsigned char) data[1];
  530|  24.5k|    int optimize = optimize_vals[optimize_idx % NUM_OPTIMIZE_VALS];
  531|       |
  532|       |    // Use third byte to determine compiler flags to use.
  533|  24.5k|    unsigned char flags_byte = (unsigned char) data[2];
  534|  24.5k|    PyCompilerFlags flags = _PyCompilerFlags_INIT;
  ------------------
  |  |   33|  24.5k|    (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
  |  |  ------------------
  |  |  |  |   24|  24.5k|#define PY_MINOR_VERSION        16
  |  |  ------------------
  ------------------
  535|  24.5k|    if (flags_byte & 0x01) {
  ------------------
  |  Branch (535:9): [True: 11.7k, False: 12.7k]
  ------------------
  536|  11.7k|        flags.cf_flags |= PyCF_DONT_IMPLY_DEDENT;
  ------------------
  |  |   16|  11.7k|#define PyCF_DONT_IMPLY_DEDENT 0x0200
  ------------------
  537|  11.7k|    }
  538|  24.5k|    if (flags_byte & 0x02) {
  ------------------
  |  Branch (538:9): [True: 6.84k, False: 17.6k]
  ------------------
  539|  6.84k|        flags.cf_flags |= PyCF_ONLY_AST;
  ------------------
  |  |   17|  6.84k|#define PyCF_ONLY_AST 0x0400
  ------------------
  540|  6.84k|    }
  541|  24.5k|    if (flags_byte & 0x04) {
  ------------------
  |  Branch (541:9): [True: 11.0k, False: 13.5k]
  ------------------
  542|  11.0k|        flags.cf_flags |= PyCF_IGNORE_COOKIE;
  ------------------
  |  |   18|  11.0k|#define PyCF_IGNORE_COOKIE 0x0800
  ------------------
  543|  11.0k|    }
  544|  24.5k|    if (flags_byte & 0x08) {
  ------------------
  |  Branch (544:9): [True: 10.4k, False: 14.1k]
  ------------------
  545|  10.4k|        flags.cf_flags |= PyCF_TYPE_COMMENTS;
  ------------------
  |  |   19|  10.4k|#define PyCF_TYPE_COMMENTS 0x1000
  ------------------
  546|  10.4k|    }
  547|  24.5k|    if (flags_byte & 0x10) {
  ------------------
  |  Branch (547:9): [True: 7.31k, False: 17.2k]
  ------------------
  548|  7.31k|        flags.cf_flags |= PyCF_ALLOW_TOP_LEVEL_AWAIT;
  ------------------
  |  |   20|  7.31k|#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000
  ------------------
  549|  7.31k|    }
  550|  24.5k|    if (flags_byte & 0x20) {
  ------------------
  |  Branch (550:9): [True: 18.5k, False: 5.95k]
  ------------------
  551|  18.5k|        flags.cf_flags |= PyCF_ALLOW_INCOMPLETE_INPUT;
  ------------------
  |  |   21|  18.5k|#define PyCF_ALLOW_INCOMPLETE_INPUT 0x4000
  ------------------
  552|  18.5k|    }
  553|  24.5k|    if (flags_byte & 0x40) {
  ------------------
  |  Branch (553:9): [True: 5.35k, False: 19.1k]
  ------------------
  554|  5.35k|        flags.cf_flags |= PyCF_OPTIMIZED_AST;
  ------------------
  |  |   22|  5.35k|#define PyCF_OPTIMIZED_AST (0x8000 | PyCF_ONLY_AST)
  |  |  ------------------
  |  |  |  |   17|  5.35k|#define PyCF_ONLY_AST 0x0400
  |  |  ------------------
  ------------------
  555|  5.35k|    }
  556|       |
  557|  24.5k|    char pycompile_scratch[MAX_PYCOMPILE_TEST_SIZE];
  558|       |
  559|       |    // Create a NUL-terminated C string from the remaining input
  560|  24.5k|    memcpy(pycompile_scratch, data + 3, size - 3);
  561|       |    // Put a NUL terminator just after the copied data. (Space was reserved already.)
  562|  24.5k|    pycompile_scratch[size - 3] = '\0';
  563|       |
  564|  24.5k|    PyObject *result = Py_CompileStringExFlags(pycompile_scratch, "<fuzz input>", start, &flags, optimize);
  565|  24.5k|    if (result == NULL) {
  ------------------
  |  Branch (565:9): [True: 12.5k, False: 11.9k]
  ------------------
  566|       |        /* Compilation failed, most likely from a syntax error. If it was a
  567|       |           SystemError we abort. There's no non-bug reason to raise a
  568|       |           SystemError. */
  569|  12.5k|        if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemError)) {
  ------------------
  |  Branch (569:13): [True: 12.5k, False: 0]
  |  Branch (569:33): [True: 0, False: 12.5k]
  ------------------
  570|      0|            PyErr_Print();
  571|      0|            abort();
  572|      0|        }
  573|  12.5k|        PyErr_Clear();
  574|  12.5k|    } else {
  575|  11.9k|        Py_DECREF(result);
  ------------------
  |  |  430|  11.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  576|  11.9k|    }
  577|       |
  578|  24.5k|    return 0;
  579|  24.5k|}

_PyAtExit_Init:
   68|      2|{
   69|      2|    struct atexit_state *state = &interp->atexit;
   70|       |    // _PyAtExit_Init() must only be called once
   71|      2|    assert(state->callbacks == NULL);
  ------------------
  |  Branch (71:5): [True: 2, False: 0]
  ------------------
   72|       |
   73|      2|    state->callbacks = PyList_New(0);
   74|      2|    if (state->callbacks == NULL) {
  ------------------
  |  Branch (74:9): [True: 0, False: 2]
  ------------------
   75|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
   76|      0|    }
   77|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
   78|      2|}

_abc.c:_abc__abc_register:
   65|     82|{
   66|     82|    PyObject *return_value = NULL;
   67|     82|    PyObject *self;
   68|     82|    PyObject *subclass;
   69|       |
   70|     82|    if (!_PyArg_CheckPositional("_abc_register", nargs, 2, 2)) {
  ------------------
  |  |   31|     82|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 82, False: 0]
  |  |  |  Branch (31:27): [True: 82, False: 0]
  |  |  ------------------
  |  |   32|     82|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   71|      0|        goto exit;
   72|      0|    }
   73|     82|    self = args[0];
   74|     82|    subclass = args[1];
   75|     82|    return_value = _abc__abc_register_impl(module, self, subclass);
   76|       |
   77|     82|exit:
   78|     82|    return return_value;
   79|     82|}
_abc.c:_abc__abc_subclasscheck:
  127|     90|{
  128|     90|    PyObject *return_value = NULL;
  129|     90|    PyObject *self;
  130|     90|    PyObject *subclass;
  131|       |
  132|     90|    if (!_PyArg_CheckPositional("_abc_subclasscheck", nargs, 2, 2)) {
  ------------------
  |  |   31|     90|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 90, False: 0]
  |  |  |  Branch (31:27): [True: 90, False: 0]
  |  |  ------------------
  |  |   32|     90|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  133|      0|        goto exit;
  134|      0|    }
  135|     90|    self = args[0];
  136|     90|    subclass = args[1];
  137|     90|    return_value = _abc__abc_subclasscheck_impl(module, self, subclass);
  138|       |
  139|     90|exit:
  140|     90|    return return_value;
  141|     90|}

_codecsmodule.c:_codecs_utf_8_decode:
  484|      7|{
  485|      7|    PyObject *return_value = NULL;
  486|      7|    Py_buffer data = {NULL, NULL};
  487|      7|    const char *errors = NULL;
  488|      7|    int final = 0;
  489|       |
  490|      7|    if (!_PyArg_CheckPositional("utf_8_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|      7|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 7, False: 0]
  |  |  |  Branch (31:27): [True: 7, False: 0]
  |  |  ------------------
  |  |   32|      7|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  491|      0|        goto exit;
  492|      0|    }
  493|      7|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      7|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (493:9): [True: 0, False: 7]
  ------------------
  494|      0|        goto exit;
  495|      0|    }
  496|      7|    if (nargs < 2) {
  ------------------
  |  Branch (496:9): [True: 0, False: 7]
  ------------------
  497|      0|        goto skip_optional;
  498|      0|    }
  499|      7|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      7|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (499:9): [True: 0, False: 7]
  ------------------
  500|      0|        errors = NULL;
  501|      0|    }
  502|      7|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      7|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      7|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|      7|        Py_ssize_t errors_length;
  504|      7|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  505|      7|        if (errors == NULL) {
  ------------------
  |  Branch (505:13): [True: 0, False: 7]
  ------------------
  506|      0|            goto exit;
  507|      0|        }
  508|      7|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (508:13): [True: 0, False: 7]
  ------------------
  509|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  510|      0|            goto exit;
  511|      0|        }
  512|      7|    }
  513|      0|    else {
  514|      0|        _PyArg_BadArgument("utf_8_decode", "argument 2", "str or None", args[1]);
  515|      0|        goto exit;
  516|      0|    }
  517|      7|    if (nargs < 3) {
  ------------------
  |  Branch (517:9): [True: 0, False: 7]
  ------------------
  518|      0|        goto skip_optional;
  519|      0|    }
  520|      7|    final = PyObject_IsTrue(args[2]);
  521|      7|    if (final < 0) {
  ------------------
  |  Branch (521:9): [True: 0, False: 7]
  ------------------
  522|      0|        goto exit;
  523|      0|    }
  524|      7|skip_optional:
  525|      7|    return_value = _codecs_utf_8_decode_impl(module, &data, errors, final);
  526|       |
  527|      7|exit:
  528|       |    /* Cleanup for data */
  529|      7|    if (data.obj) {
  ------------------
  |  Branch (529:9): [True: 7, False: 0]
  ------------------
  530|      7|       PyBuffer_Release(&data);
  531|      7|    }
  532|       |
  533|      7|    return return_value;
  534|      7|}
_codecsmodule.c:_codecs_utf_7_decode:
  418|    170|{
  419|    170|    PyObject *return_value = NULL;
  420|    170|    Py_buffer data = {NULL, NULL};
  421|    170|    const char *errors = NULL;
  422|    170|    int final = 0;
  423|       |
  424|    170|    if (!_PyArg_CheckPositional("utf_7_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|    170|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 170, False: 0]
  |  |  |  Branch (31:27): [True: 170, False: 0]
  |  |  ------------------
  |  |   32|    170|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  425|      0|        goto exit;
  426|      0|    }
  427|    170|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|    170|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (427:9): [True: 0, False: 170]
  ------------------
  428|      0|        goto exit;
  429|      0|    }
  430|    170|    if (nargs < 2) {
  ------------------
  |  Branch (430:9): [True: 0, False: 170]
  ------------------
  431|      0|        goto skip_optional;
  432|      0|    }
  433|    170|    if (args[1] == Py_None) {
  ------------------
  |  |  616|    170|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (433:9): [True: 0, False: 170]
  ------------------
  434|      0|        errors = NULL;
  435|      0|    }
  436|    170|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|    170|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    170|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 170, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|    170|        Py_ssize_t errors_length;
  438|    170|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  439|    170|        if (errors == NULL) {
  ------------------
  |  Branch (439:13): [True: 0, False: 170]
  ------------------
  440|      0|            goto exit;
  441|      0|        }
  442|    170|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (442:13): [True: 0, False: 170]
  ------------------
  443|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  444|      0|            goto exit;
  445|      0|        }
  446|    170|    }
  447|      0|    else {
  448|      0|        _PyArg_BadArgument("utf_7_decode", "argument 2", "str or None", args[1]);
  449|      0|        goto exit;
  450|      0|    }
  451|    170|    if (nargs < 3) {
  ------------------
  |  Branch (451:9): [True: 0, False: 170]
  ------------------
  452|      0|        goto skip_optional;
  453|      0|    }
  454|    170|    final = PyObject_IsTrue(args[2]);
  455|    170|    if (final < 0) {
  ------------------
  |  Branch (455:9): [True: 0, False: 170]
  ------------------
  456|      0|        goto exit;
  457|      0|    }
  458|    170|skip_optional:
  459|    170|    return_value = _codecs_utf_7_decode_impl(module, &data, errors, final);
  460|       |
  461|    170|exit:
  462|       |    /* Cleanup for data */
  463|    170|    if (data.obj) {
  ------------------
  |  Branch (463:9): [True: 170, False: 0]
  ------------------
  464|    170|       PyBuffer_Release(&data);
  465|    170|    }
  466|       |
  467|    170|    return return_value;
  468|    170|}
_codecsmodule.c:_codecs_utf_16_decode:
  550|     40|{
  551|     40|    PyObject *return_value = NULL;
  552|     40|    Py_buffer data = {NULL, NULL};
  553|     40|    const char *errors = NULL;
  554|     40|    int final = 0;
  555|       |
  556|     40|    if (!_PyArg_CheckPositional("utf_16_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|     40|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 40, False: 0]
  |  |  |  Branch (31:27): [True: 40, False: 0]
  |  |  ------------------
  |  |   32|     40|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  557|      0|        goto exit;
  558|      0|    }
  559|     40|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|     40|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (559:9): [True: 0, False: 40]
  ------------------
  560|      0|        goto exit;
  561|      0|    }
  562|     40|    if (nargs < 2) {
  ------------------
  |  Branch (562:9): [True: 0, False: 40]
  ------------------
  563|      0|        goto skip_optional;
  564|      0|    }
  565|     40|    if (args[1] == Py_None) {
  ------------------
  |  |  616|     40|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (565:9): [True: 0, False: 40]
  ------------------
  566|      0|        errors = NULL;
  567|      0|    }
  568|     40|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|     40|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     40|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|     40|        Py_ssize_t errors_length;
  570|     40|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  571|     40|        if (errors == NULL) {
  ------------------
  |  Branch (571:13): [True: 0, False: 40]
  ------------------
  572|      0|            goto exit;
  573|      0|        }
  574|     40|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (574:13): [True: 0, False: 40]
  ------------------
  575|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  576|      0|            goto exit;
  577|      0|        }
  578|     40|    }
  579|      0|    else {
  580|      0|        _PyArg_BadArgument("utf_16_decode", "argument 2", "str or None", args[1]);
  581|      0|        goto exit;
  582|      0|    }
  583|     40|    if (nargs < 3) {
  ------------------
  |  Branch (583:9): [True: 0, False: 40]
  ------------------
  584|      0|        goto skip_optional;
  585|      0|    }
  586|     40|    final = PyObject_IsTrue(args[2]);
  587|     40|    if (final < 0) {
  ------------------
  |  Branch (587:9): [True: 0, False: 40]
  ------------------
  588|      0|        goto exit;
  589|      0|    }
  590|     40|skip_optional:
  591|     40|    return_value = _codecs_utf_16_decode_impl(module, &data, errors, final);
  592|       |
  593|     40|exit:
  594|       |    /* Cleanup for data */
  595|     40|    if (data.obj) {
  ------------------
  |  Branch (595:9): [True: 40, False: 0]
  ------------------
  596|     40|       PyBuffer_Release(&data);
  597|     40|    }
  598|       |
  599|     40|    return return_value;
  600|     40|}
_codecsmodule.c:_codecs_utf_16_le_decode:
  616|      6|{
  617|      6|    PyObject *return_value = NULL;
  618|      6|    Py_buffer data = {NULL, NULL};
  619|      6|    const char *errors = NULL;
  620|      6|    int final = 0;
  621|       |
  622|      6|    if (!_PyArg_CheckPositional("utf_16_le_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|      6|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 6, False: 0]
  |  |  |  Branch (31:27): [True: 6, False: 0]
  |  |  ------------------
  |  |   32|      6|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  623|      0|        goto exit;
  624|      0|    }
  625|      6|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      6|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (625:9): [True: 0, False: 6]
  ------------------
  626|      0|        goto exit;
  627|      0|    }
  628|      6|    if (nargs < 2) {
  ------------------
  |  Branch (628:9): [True: 0, False: 6]
  ------------------
  629|      0|        goto skip_optional;
  630|      0|    }
  631|      6|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (631:9): [True: 0, False: 6]
  ------------------
  632|      0|        errors = NULL;
  633|      0|    }
  634|      6|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      6|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  635|      6|        Py_ssize_t errors_length;
  636|      6|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  637|      6|        if (errors == NULL) {
  ------------------
  |  Branch (637:13): [True: 0, False: 6]
  ------------------
  638|      0|            goto exit;
  639|      0|        }
  640|      6|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (640:13): [True: 0, False: 6]
  ------------------
  641|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  642|      0|            goto exit;
  643|      0|        }
  644|      6|    }
  645|      0|    else {
  646|      0|        _PyArg_BadArgument("utf_16_le_decode", "argument 2", "str or None", args[1]);
  647|      0|        goto exit;
  648|      0|    }
  649|      6|    if (nargs < 3) {
  ------------------
  |  Branch (649:9): [True: 0, False: 6]
  ------------------
  650|      0|        goto skip_optional;
  651|      0|    }
  652|      6|    final = PyObject_IsTrue(args[2]);
  653|      6|    if (final < 0) {
  ------------------
  |  Branch (653:9): [True: 0, False: 6]
  ------------------
  654|      0|        goto exit;
  655|      0|    }
  656|      6|skip_optional:
  657|      6|    return_value = _codecs_utf_16_le_decode_impl(module, &data, errors, final);
  658|       |
  659|      6|exit:
  660|       |    /* Cleanup for data */
  661|      6|    if (data.obj) {
  ------------------
  |  Branch (661:9): [True: 6, False: 0]
  ------------------
  662|      6|       PyBuffer_Release(&data);
  663|      6|    }
  664|       |
  665|      6|    return return_value;
  666|      6|}
_codecsmodule.c:_codecs_utf_16_be_decode:
  682|     56|{
  683|     56|    PyObject *return_value = NULL;
  684|     56|    Py_buffer data = {NULL, NULL};
  685|     56|    const char *errors = NULL;
  686|     56|    int final = 0;
  687|       |
  688|     56|    if (!_PyArg_CheckPositional("utf_16_be_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|     56|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 56, False: 0]
  |  |  |  Branch (31:27): [True: 56, False: 0]
  |  |  ------------------
  |  |   32|     56|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  689|      0|        goto exit;
  690|      0|    }
  691|     56|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|     56|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (691:9): [True: 0, False: 56]
  ------------------
  692|      0|        goto exit;
  693|      0|    }
  694|     56|    if (nargs < 2) {
  ------------------
  |  Branch (694:9): [True: 0, False: 56]
  ------------------
  695|      0|        goto skip_optional;
  696|      0|    }
  697|     56|    if (args[1] == Py_None) {
  ------------------
  |  |  616|     56|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (697:9): [True: 0, False: 56]
  ------------------
  698|      0|        errors = NULL;
  699|      0|    }
  700|     56|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|     56|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     56|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 56, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|     56|        Py_ssize_t errors_length;
  702|     56|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  703|     56|        if (errors == NULL) {
  ------------------
  |  Branch (703:13): [True: 0, False: 56]
  ------------------
  704|      0|            goto exit;
  705|      0|        }
  706|     56|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (706:13): [True: 0, False: 56]
  ------------------
  707|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  708|      0|            goto exit;
  709|      0|        }
  710|     56|    }
  711|      0|    else {
  712|      0|        _PyArg_BadArgument("utf_16_be_decode", "argument 2", "str or None", args[1]);
  713|      0|        goto exit;
  714|      0|    }
  715|     56|    if (nargs < 3) {
  ------------------
  |  Branch (715:9): [True: 0, False: 56]
  ------------------
  716|      0|        goto skip_optional;
  717|      0|    }
  718|     56|    final = PyObject_IsTrue(args[2]);
  719|     56|    if (final < 0) {
  ------------------
  |  Branch (719:9): [True: 0, False: 56]
  ------------------
  720|      0|        goto exit;
  721|      0|    }
  722|     56|skip_optional:
  723|     56|    return_value = _codecs_utf_16_be_decode_impl(module, &data, errors, final);
  724|       |
  725|     56|exit:
  726|       |    /* Cleanup for data */
  727|     56|    if (data.obj) {
  ------------------
  |  Branch (727:9): [True: 56, False: 0]
  ------------------
  728|     56|       PyBuffer_Release(&data);
  729|     56|    }
  730|       |
  731|     56|    return return_value;
  732|     56|}
_codecsmodule.c:_codecs_utf_32_decode:
  823|      5|{
  824|      5|    PyObject *return_value = NULL;
  825|      5|    Py_buffer data = {NULL, NULL};
  826|      5|    const char *errors = NULL;
  827|      5|    int final = 0;
  828|       |
  829|      5|    if (!_PyArg_CheckPositional("utf_32_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|      5|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 5, False: 0]
  |  |  |  Branch (31:27): [True: 5, False: 0]
  |  |  ------------------
  |  |   32|      5|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  830|      0|        goto exit;
  831|      0|    }
  832|      5|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      5|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (832:9): [True: 0, False: 5]
  ------------------
  833|      0|        goto exit;
  834|      0|    }
  835|      5|    if (nargs < 2) {
  ------------------
  |  Branch (835:9): [True: 0, False: 5]
  ------------------
  836|      0|        goto skip_optional;
  837|      0|    }
  838|      5|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      5|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (838:9): [True: 0, False: 5]
  ------------------
  839|      0|        errors = NULL;
  840|      0|    }
  841|      5|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      5|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      5|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|      5|        Py_ssize_t errors_length;
  843|      5|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  844|      5|        if (errors == NULL) {
  ------------------
  |  Branch (844:13): [True: 0, False: 5]
  ------------------
  845|      0|            goto exit;
  846|      0|        }
  847|      5|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (847:13): [True: 0, False: 5]
  ------------------
  848|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  849|      0|            goto exit;
  850|      0|        }
  851|      5|    }
  852|      0|    else {
  853|      0|        _PyArg_BadArgument("utf_32_decode", "argument 2", "str or None", args[1]);
  854|      0|        goto exit;
  855|      0|    }
  856|      5|    if (nargs < 3) {
  ------------------
  |  Branch (856:9): [True: 0, False: 5]
  ------------------
  857|      0|        goto skip_optional;
  858|      0|    }
  859|      5|    final = PyObject_IsTrue(args[2]);
  860|      5|    if (final < 0) {
  ------------------
  |  Branch (860:9): [True: 0, False: 5]
  ------------------
  861|      0|        goto exit;
  862|      0|    }
  863|      5|skip_optional:
  864|      5|    return_value = _codecs_utf_32_decode_impl(module, &data, errors, final);
  865|       |
  866|      5|exit:
  867|       |    /* Cleanup for data */
  868|      5|    if (data.obj) {
  ------------------
  |  Branch (868:9): [True: 5, False: 0]
  ------------------
  869|      5|       PyBuffer_Release(&data);
  870|      5|    }
  871|       |
  872|      5|    return return_value;
  873|      5|}
_codecsmodule.c:_codecs_utf_32_le_decode:
  889|      2|{
  890|      2|    PyObject *return_value = NULL;
  891|      2|    Py_buffer data = {NULL, NULL};
  892|      2|    const char *errors = NULL;
  893|      2|    int final = 0;
  894|       |
  895|      2|    if (!_PyArg_CheckPositional("utf_32_le_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|      2|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 2, False: 0]
  |  |  |  Branch (31:27): [True: 2, False: 0]
  |  |  ------------------
  |  |   32|      2|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  896|      0|        goto exit;
  897|      0|    }
  898|      2|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      2|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (898:9): [True: 0, False: 2]
  ------------------
  899|      0|        goto exit;
  900|      0|    }
  901|      2|    if (nargs < 2) {
  ------------------
  |  Branch (901:9): [True: 0, False: 2]
  ------------------
  902|      0|        goto skip_optional;
  903|      0|    }
  904|      2|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (904:9): [True: 0, False: 2]
  ------------------
  905|      0|        errors = NULL;
  906|      0|    }
  907|      2|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      2|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|      2|        Py_ssize_t errors_length;
  909|      2|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  910|      2|        if (errors == NULL) {
  ------------------
  |  Branch (910:13): [True: 0, False: 2]
  ------------------
  911|      0|            goto exit;
  912|      0|        }
  913|      2|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (913:13): [True: 0, False: 2]
  ------------------
  914|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  915|      0|            goto exit;
  916|      0|        }
  917|      2|    }
  918|      0|    else {
  919|      0|        _PyArg_BadArgument("utf_32_le_decode", "argument 2", "str or None", args[1]);
  920|      0|        goto exit;
  921|      0|    }
  922|      2|    if (nargs < 3) {
  ------------------
  |  Branch (922:9): [True: 0, False: 2]
  ------------------
  923|      0|        goto skip_optional;
  924|      0|    }
  925|      2|    final = PyObject_IsTrue(args[2]);
  926|      2|    if (final < 0) {
  ------------------
  |  Branch (926:9): [True: 0, False: 2]
  ------------------
  927|      0|        goto exit;
  928|      0|    }
  929|      2|skip_optional:
  930|      2|    return_value = _codecs_utf_32_le_decode_impl(module, &data, errors, final);
  931|       |
  932|      2|exit:
  933|       |    /* Cleanup for data */
  934|      2|    if (data.obj) {
  ------------------
  |  Branch (934:9): [True: 2, False: 0]
  ------------------
  935|      2|       PyBuffer_Release(&data);
  936|      2|    }
  937|       |
  938|      2|    return return_value;
  939|      2|}
_codecsmodule.c:_codecs_utf_32_be_decode:
  955|      1|{
  956|      1|    PyObject *return_value = NULL;
  957|      1|    Py_buffer data = {NULL, NULL};
  958|      1|    const char *errors = NULL;
  959|      1|    int final = 0;
  960|       |
  961|      1|    if (!_PyArg_CheckPositional("utf_32_be_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|      1|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 1, False: 0]
  |  |  |  Branch (31:27): [True: 1, False: 0]
  |  |  ------------------
  |  |   32|      1|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  962|      0|        goto exit;
  963|      0|    }
  964|      1|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      1|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (964:9): [True: 0, False: 1]
  ------------------
  965|      0|        goto exit;
  966|      0|    }
  967|      1|    if (nargs < 2) {
  ------------------
  |  Branch (967:9): [True: 0, False: 1]
  ------------------
  968|      0|        goto skip_optional;
  969|      0|    }
  970|      1|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (970:9): [True: 0, False: 1]
  ------------------
  971|      0|        errors = NULL;
  972|      0|    }
  973|      1|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      1|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      1|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|      1|        Py_ssize_t errors_length;
  975|      1|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  976|      1|        if (errors == NULL) {
  ------------------
  |  Branch (976:13): [True: 0, False: 1]
  ------------------
  977|      0|            goto exit;
  978|      0|        }
  979|      1|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (979:13): [True: 0, False: 1]
  ------------------
  980|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  981|      0|            goto exit;
  982|      0|        }
  983|      1|    }
  984|      0|    else {
  985|      0|        _PyArg_BadArgument("utf_32_be_decode", "argument 2", "str or None", args[1]);
  986|      0|        goto exit;
  987|      0|    }
  988|      1|    if (nargs < 3) {
  ------------------
  |  Branch (988:9): [True: 0, False: 1]
  ------------------
  989|      0|        goto skip_optional;
  990|      0|    }
  991|      1|    final = PyObject_IsTrue(args[2]);
  992|      1|    if (final < 0) {
  ------------------
  |  Branch (992:9): [True: 0, False: 1]
  ------------------
  993|      0|        goto exit;
  994|      0|    }
  995|      1|skip_optional:
  996|      1|    return_value = _codecs_utf_32_be_decode_impl(module, &data, errors, final);
  997|       |
  998|      1|exit:
  999|       |    /* Cleanup for data */
 1000|      1|    if (data.obj) {
  ------------------
  |  Branch (1000:9): [True: 1, False: 0]
  ------------------
 1001|      1|       PyBuffer_Release(&data);
 1002|      1|    }
 1003|       |
 1004|      1|    return return_value;
 1005|      1|}
_codecsmodule.c:_codecs_latin_1_decode:
 1252|    894|{
 1253|    894|    PyObject *return_value = NULL;
 1254|    894|    Py_buffer data = {NULL, NULL};
 1255|    894|    const char *errors = NULL;
 1256|       |
 1257|    894|    if (!_PyArg_CheckPositional("latin_1_decode", nargs, 1, 2)) {
  ------------------
  |  |   31|    894|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 894, False: 0]
  |  |  |  Branch (31:27): [True: 894, False: 0]
  |  |  ------------------
  |  |   32|    894|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1258|      0|        goto exit;
 1259|      0|    }
 1260|    894|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|    894|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1260:9): [True: 0, False: 894]
  ------------------
 1261|      0|        goto exit;
 1262|      0|    }
 1263|    894|    if (nargs < 2) {
  ------------------
  |  Branch (1263:9): [True: 894, False: 0]
  ------------------
 1264|    894|        goto skip_optional;
 1265|    894|    }
 1266|      0|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1266:9): [True: 0, False: 0]
  ------------------
 1267|      0|        errors = NULL;
 1268|      0|    }
 1269|      0|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1270|      0|        Py_ssize_t errors_length;
 1271|      0|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
 1272|      0|        if (errors == NULL) {
  ------------------
  |  Branch (1272:13): [True: 0, False: 0]
  ------------------
 1273|      0|            goto exit;
 1274|      0|        }
 1275|      0|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1275:13): [True: 0, False: 0]
  ------------------
 1276|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1277|      0|            goto exit;
 1278|      0|        }
 1279|      0|    }
 1280|      0|    else {
 1281|      0|        _PyArg_BadArgument("latin_1_decode", "argument 2", "str or None", args[1]);
 1282|      0|        goto exit;
 1283|      0|    }
 1284|    894|skip_optional:
 1285|    894|    return_value = _codecs_latin_1_decode_impl(module, &data, errors);
 1286|       |
 1287|    894|exit:
 1288|       |    /* Cleanup for data */
 1289|    894|    if (data.obj) {
  ------------------
  |  Branch (1289:9): [True: 894, False: 0]
  ------------------
 1290|    894|       PyBuffer_Release(&data);
 1291|    894|    }
 1292|       |
 1293|    894|    return return_value;
 1294|    894|}
_codecsmodule.c:_codecs_ascii_decode:
 1310|      4|{
 1311|      4|    PyObject *return_value = NULL;
 1312|      4|    Py_buffer data = {NULL, NULL};
 1313|      4|    const char *errors = NULL;
 1314|       |
 1315|      4|    if (!_PyArg_CheckPositional("ascii_decode", nargs, 1, 2)) {
  ------------------
  |  |   31|      4|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 4, False: 0]
  |  |  |  Branch (31:27): [True: 4, False: 0]
  |  |  ------------------
  |  |   32|      4|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1316|      0|        goto exit;
 1317|      0|    }
 1318|      4|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      4|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1318:9): [True: 0, False: 4]
  ------------------
 1319|      0|        goto exit;
 1320|      0|    }
 1321|      4|    if (nargs < 2) {
  ------------------
  |  Branch (1321:9): [True: 4, False: 0]
  ------------------
 1322|      4|        goto skip_optional;
 1323|      4|    }
 1324|      0|    if (args[1] == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1324:9): [True: 0, False: 0]
  ------------------
 1325|      0|        errors = NULL;
 1326|      0|    }
 1327|      0|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1328|      0|        Py_ssize_t errors_length;
 1329|      0|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
 1330|      0|        if (errors == NULL) {
  ------------------
  |  Branch (1330:13): [True: 0, False: 0]
  ------------------
 1331|      0|            goto exit;
 1332|      0|        }
 1333|      0|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1333:13): [True: 0, False: 0]
  ------------------
 1334|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1335|      0|            goto exit;
 1336|      0|        }
 1337|      0|    }
 1338|      0|    else {
 1339|      0|        _PyArg_BadArgument("ascii_decode", "argument 2", "str or None", args[1]);
 1340|      0|        goto exit;
 1341|      0|    }
 1342|      4|skip_optional:
 1343|      4|    return_value = _codecs_ascii_decode_impl(module, &data, errors);
 1344|       |
 1345|      4|exit:
 1346|       |    /* Cleanup for data */
 1347|      4|    if (data.obj) {
  ------------------
  |  Branch (1347:9): [True: 4, False: 0]
  ------------------
 1348|      4|       PyBuffer_Release(&data);
 1349|      4|    }
 1350|       |
 1351|      4|    return return_value;
 1352|      4|}
_codecsmodule.c:_codecs_charmap_decode:
 1368|  1.68k|{
 1369|  1.68k|    PyObject *return_value = NULL;
 1370|  1.68k|    Py_buffer data = {NULL, NULL};
 1371|  1.68k|    const char *errors = NULL;
 1372|  1.68k|    PyObject *mapping = Py_None;
  ------------------
  |  |  616|  1.68k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1373|       |
 1374|  1.68k|    if (!_PyArg_CheckPositional("charmap_decode", nargs, 1, 3)) {
  ------------------
  |  |   31|  1.68k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 1.68k, False: 0]
  |  |  |  Branch (31:27): [True: 1.68k, False: 0]
  |  |  ------------------
  |  |   32|  1.68k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1375|      0|        goto exit;
 1376|      0|    }
 1377|  1.68k|    if (PyObject_GetBuffer(args[0], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|  1.68k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1377:9): [True: 0, False: 1.68k]
  ------------------
 1378|      0|        goto exit;
 1379|      0|    }
 1380|  1.68k|    if (nargs < 2) {
  ------------------
  |  Branch (1380:9): [True: 0, False: 1.68k]
  ------------------
 1381|      0|        goto skip_optional;
 1382|      0|    }
 1383|  1.68k|    if (args[1] == Py_None) {
  ------------------
  |  |  616|  1.68k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1383:9): [True: 0, False: 1.68k]
  ------------------
 1384|      0|        errors = NULL;
 1385|      0|    }
 1386|  1.68k|    else if (PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|  1.68k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.68k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 1.68k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1387|  1.68k|        Py_ssize_t errors_length;
 1388|  1.68k|        errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
 1389|  1.68k|        if (errors == NULL) {
  ------------------
  |  Branch (1389:13): [True: 0, False: 1.68k]
  ------------------
 1390|      0|            goto exit;
 1391|      0|        }
 1392|  1.68k|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1392:13): [True: 0, False: 1.68k]
  ------------------
 1393|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1394|      0|            goto exit;
 1395|      0|        }
 1396|  1.68k|    }
 1397|      0|    else {
 1398|      0|        _PyArg_BadArgument("charmap_decode", "argument 2", "str or None", args[1]);
 1399|      0|        goto exit;
 1400|      0|    }
 1401|  1.68k|    if (nargs < 3) {
  ------------------
  |  Branch (1401:9): [True: 0, False: 1.68k]
  ------------------
 1402|      0|        goto skip_optional;
 1403|      0|    }
 1404|  1.68k|    mapping = args[2];
 1405|  1.68k|skip_optional:
 1406|  1.68k|    return_value = _codecs_charmap_decode_impl(module, &data, errors, mapping);
 1407|       |
 1408|  1.68k|exit:
 1409|       |    /* Cleanup for data */
 1410|  1.68k|    if (data.obj) {
  ------------------
  |  Branch (1410:9): [True: 1.68k, False: 0]
  ------------------
 1411|  1.68k|       PyBuffer_Release(&data);
 1412|  1.68k|    }
 1413|       |
 1414|  1.68k|    return return_value;
 1415|  1.68k|}
_codecsmodule.c:_codecs_charmap_build:
 2535|     20|{
 2536|     20|    PyObject *return_value = NULL;
 2537|     20|    PyObject *map;
 2538|       |
 2539|     20|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|     20|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     20|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2539:9): [True: 0, False: 20]
  ------------------
 2540|      0|        _PyArg_BadArgument("charmap_build", "argument", "str", arg);
 2541|      0|        goto exit;
 2542|      0|    }
 2543|     20|    map = arg;
 2544|     20|    return_value = _codecs_charmap_build_impl(module, map);
 2545|       |
 2546|     20|exit:
 2547|     20|    return return_value;
 2548|     20|}
_codecsmodule.c:_codecs_iconv_encode:
 2746|    243|{
 2747|    243|    PyObject *return_value = NULL;
 2748|    243|    const char *encoding;
 2749|    243|    PyObject *str;
 2750|    243|    const char *errors = NULL;
 2751|       |
 2752|    243|    if (!_PyArg_CheckPositional("iconv_encode", nargs, 2, 3)) {
  ------------------
  |  |   31|    243|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 243, False: 0]
  |  |  |  Branch (31:27): [True: 243, False: 0]
  |  |  ------------------
  |  |   32|    243|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2753|      0|        goto exit;
 2754|      0|    }
 2755|    243|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|    243|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    243|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2755:9): [True: 0, False: 243]
  ------------------
 2756|      0|        _PyArg_BadArgument("iconv_encode", "argument 1", "str", args[0]);
 2757|      0|        goto exit;
 2758|      0|    }
 2759|    243|    Py_ssize_t encoding_length;
 2760|    243|    encoding = PyUnicode_AsUTF8AndSize(args[0], &encoding_length);
 2761|    243|    if (encoding == NULL) {
  ------------------
  |  Branch (2761:9): [True: 0, False: 243]
  ------------------
 2762|      0|        goto exit;
 2763|      0|    }
 2764|    243|    if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (2764:9): [True: 0, False: 243]
  ------------------
 2765|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 2766|      0|        goto exit;
 2767|      0|    }
 2768|    243|    if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|    243|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    243|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2768:9): [True: 0, False: 243]
  ------------------
 2769|      0|        _PyArg_BadArgument("iconv_encode", "argument 2", "str", args[1]);
 2770|      0|        goto exit;
 2771|      0|    }
 2772|    243|    str = args[1];
 2773|    243|    if (nargs < 3) {
  ------------------
  |  Branch (2773:9): [True: 243, False: 0]
  ------------------
 2774|    243|        goto skip_optional;
 2775|    243|    }
 2776|      0|    if (args[2] == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2776:9): [True: 0, False: 0]
  ------------------
 2777|      0|        errors = NULL;
 2778|      0|    }
 2779|      0|    else if (PyUnicode_Check(args[2])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2780|      0|        Py_ssize_t errors_length;
 2781|      0|        errors = PyUnicode_AsUTF8AndSize(args[2], &errors_length);
 2782|      0|        if (errors == NULL) {
  ------------------
  |  Branch (2782:13): [True: 0, False: 0]
  ------------------
 2783|      0|            goto exit;
 2784|      0|        }
 2785|      0|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (2785:13): [True: 0, False: 0]
  ------------------
 2786|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 2787|      0|            goto exit;
 2788|      0|        }
 2789|      0|    }
 2790|      0|    else {
 2791|      0|        _PyArg_BadArgument("iconv_encode", "argument 3", "str or None", args[2]);
 2792|      0|        goto exit;
 2793|      0|    }
 2794|    243|skip_optional:
 2795|    243|    return_value = _codecs_iconv_encode_impl(module, encoding, str, errors);
 2796|       |
 2797|    243|exit:
 2798|    243|    return return_value;
 2799|    243|}
_codecsmodule.c:_codecs_iconv_decode:
 1648|    122|{
 1649|    122|    PyObject *return_value = NULL;
 1650|    122|    const char *encoding;
 1651|    122|    Py_buffer data = {NULL, NULL};
 1652|    122|    const char *errors = NULL;
 1653|    122|    int final = 0;
 1654|       |
 1655|    122|    if (!_PyArg_CheckPositional("iconv_decode", nargs, 2, 4)) {
  ------------------
  |  |   31|    122|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 122, False: 0]
  |  |  |  Branch (31:27): [True: 122, False: 0]
  |  |  ------------------
  |  |   32|    122|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1656|      0|        goto exit;
 1657|      0|    }
 1658|    122|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|    122|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    122|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1658:9): [True: 0, False: 122]
  ------------------
 1659|      0|        _PyArg_BadArgument("iconv_decode", "argument 1", "str", args[0]);
 1660|      0|        goto exit;
 1661|      0|    }
 1662|    122|    Py_ssize_t encoding_length;
 1663|    122|    encoding = PyUnicode_AsUTF8AndSize(args[0], &encoding_length);
 1664|    122|    if (encoding == NULL) {
  ------------------
  |  Branch (1664:9): [True: 0, False: 122]
  ------------------
 1665|      0|        goto exit;
 1666|      0|    }
 1667|    122|    if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (1667:9): [True: 0, False: 122]
  ------------------
 1668|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 1669|      0|        goto exit;
 1670|      0|    }
 1671|    122|    if (PyObject_GetBuffer(args[1], &data, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|    122|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1671:9): [True: 0, False: 122]
  ------------------
 1672|      0|        goto exit;
 1673|      0|    }
 1674|    122|    if (nargs < 3) {
  ------------------
  |  Branch (1674:9): [True: 0, False: 122]
  ------------------
 1675|      0|        goto skip_optional;
 1676|      0|    }
 1677|    122|    if (args[2] == Py_None) {
  ------------------
  |  |  616|    122|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1677:9): [True: 0, False: 122]
  ------------------
 1678|      0|        errors = NULL;
 1679|      0|    }
 1680|    122|    else if (PyUnicode_Check(args[2])) {
  ------------------
  |  |  103|    122|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    122|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 122, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1681|    122|        Py_ssize_t errors_length;
 1682|    122|        errors = PyUnicode_AsUTF8AndSize(args[2], &errors_length);
 1683|    122|        if (errors == NULL) {
  ------------------
  |  Branch (1683:13): [True: 0, False: 122]
  ------------------
 1684|      0|            goto exit;
 1685|      0|        }
 1686|    122|        if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1686:13): [True: 0, False: 122]
  ------------------
 1687|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1688|      0|            goto exit;
 1689|      0|        }
 1690|    122|    }
 1691|      0|    else {
 1692|      0|        _PyArg_BadArgument("iconv_decode", "argument 3", "str or None", args[2]);
 1693|      0|        goto exit;
 1694|      0|    }
 1695|    122|    if (nargs < 4) {
  ------------------
  |  Branch (1695:9): [True: 0, False: 122]
  ------------------
 1696|      0|        goto skip_optional;
 1697|      0|    }
 1698|    122|    final = PyObject_IsTrue(args[3]);
 1699|    122|    if (final < 0) {
  ------------------
  |  Branch (1699:9): [True: 0, False: 122]
  ------------------
 1700|      0|        goto exit;
 1701|      0|    }
 1702|    122|skip_optional:
 1703|    122|    return_value = _codecs_iconv_decode_impl(module, encoding, &data, errors, final);
 1704|       |
 1705|    122|exit:
 1706|       |    /* Cleanup for data */
 1707|    122|    if (data.obj) {
  ------------------
  |  Branch (1707:9): [True: 122, False: 0]
  ------------------
 1708|    122|       PyBuffer_Release(&data);
 1709|    122|    }
 1710|       |
 1711|    122|    return return_value;
 1712|    122|}
_codecsmodule.c:_codecs_lookup_error:
 2918|     12|{
 2919|     12|    PyObject *return_value = NULL;
 2920|     12|    const char *name;
 2921|       |
 2922|     12|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|     12|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     12|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2922:9): [True: 0, False: 12]
  ------------------
 2923|      0|        _PyArg_BadArgument("lookup_error", "argument", "str", arg);
 2924|      0|        goto exit;
 2925|      0|    }
 2926|     12|    Py_ssize_t name_length;
 2927|     12|    name = PyUnicode_AsUTF8AndSize(arg, &name_length);
 2928|     12|    if (name == NULL) {
  ------------------
  |  Branch (2928:9): [True: 0, False: 12]
  ------------------
 2929|      0|        goto exit;
 2930|      0|    }
 2931|     12|    if (strlen(name) != (size_t)name_length) {
  ------------------
  |  Branch (2931:9): [True: 0, False: 12]
  ------------------
 2932|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 2933|      0|        goto exit;
 2934|      0|    }
 2935|     12|    return_value = _codecs_lookup_error_impl(module, name);
 2936|       |
 2937|     12|exit:
 2938|     12|    return return_value;
 2939|     12|}
_codecsmodule.c:_codecs__normalize_encoding:
 2957|    366|{
 2958|    366|    PyObject *return_value = NULL;
 2959|    366|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 2960|       |
 2961|    366|    #define NUM_KEYWORDS 1
 2962|    366|    static struct {
 2963|    366|        PyGC_Head _this_is_not_used;
 2964|    366|        PyObject_VAR_HEAD
 2965|    366|        Py_hash_t ob_hash;
 2966|    366|        PyObject *ob_item[NUM_KEYWORDS];
 2967|    366|    } _kwtuple = {
 2968|    366|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    366|    {                                     \
  |  |   98|    366|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    366|    {                               \
  |  |  |  |   91|    366|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    366|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    366|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    366|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    366|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    366|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    366|        (type)                      \
  |  |  |  |   93|    366|    },
  |  |  ------------------
  |  |   99|    366|        (size)                            \
  |  |  100|    366|    },
  ------------------
 2969|    366|        .ob_hash = -1,
 2970|    366|        .ob_item = { &_Py_ID(encoding), },
  ------------------
  |  |  936|    366|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    366|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    366|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2971|    366|    };
 2972|    366|    #undef NUM_KEYWORDS
 2973|    366|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 2974|       |
 2975|       |    #else  // !Py_BUILD_CORE
 2976|       |    #  define KWTUPLE NULL
 2977|       |    #endif  // !Py_BUILD_CORE
 2978|       |
 2979|    366|    static const char * const _keywords[] = {"encoding", NULL};
 2980|    366|    static _PyArg_Parser _parser = {
 2981|    366|        .keywords = _keywords,
 2982|    366|        .fname = "_normalize_encoding",
 2983|    366|        .kwtuple = KWTUPLE,
  ------------------
  |  | 2973|    366|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 2984|    366|    };
 2985|    366|    #undef KWTUPLE
 2986|    366|    PyObject *argsbuf[1];
 2987|    366|    PyObject *encoding;
 2988|       |
 2989|    366|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    366|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 366, False: 0]
  |  |  ------------------
  |  |   89|    366|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 366, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 366]
  |  |  |  Branch (89:43): [True: 366, False: 0]
  |  |  |  Branch (89:67): [True: 366, False: 0]
  |  |  ------------------
  |  |   90|    366|      (args) : \
  |  |   91|    366|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 2990|    366|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 2991|    366|    if (!args) {
  ------------------
  |  Branch (2991:9): [True: 0, False: 366]
  ------------------
 2992|      0|        goto exit;
 2993|      0|    }
 2994|    366|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|    366|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    366|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2994:9): [True: 0, False: 366]
  ------------------
 2995|      0|        _PyArg_BadArgument("_normalize_encoding", "argument 'encoding'", "str", args[0]);
 2996|      0|        goto exit;
 2997|      0|    }
 2998|    366|    encoding = args[0];
 2999|    366|    return_value = _codecs__normalize_encoding_impl(module, encoding);
 3000|       |
 3001|    366|exit:
 3002|    366|    return return_value;
 3003|    366|}

_collectionsmodule.c:tuplegetter_new:
  604|     12|{
  605|     12|    PyObject *return_value = NULL;
  606|     12|    PyTypeObject *base_tp = clinic_state()->tuplegetter_type;
  ------------------
  |  |   57|     12|#define clinic_state() (get_module_state_by_cls(type))
  ------------------
  607|     12|    Py_ssize_t index;
  608|     12|    PyObject *doc;
  609|       |
  610|     12|    if ((type == base_tp || type->tp_init == base_tp->tp_init) &&
  ------------------
  |  Branch (610:10): [True: 12, False: 0]
  |  Branch (610:29): [True: 0, False: 0]
  ------------------
  611|     12|        !_PyArg_NoKeywords("_tuplegetter", kwargs)) {
  ------------------
  |  |   25|     12|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 12, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  612|      0|        goto exit;
  613|      0|    }
  614|     12|    if (!_PyArg_CheckPositional("_tuplegetter", PyTuple_GET_SIZE(args), 2, 2)) {
  ------------------
  |  |   31|     12|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 12, False: 0]
  |  |  |  Branch (31:27): [True: 12, False: 0]
  |  |  ------------------
  |  |   32|     12|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  615|      0|        goto exit;
  616|      0|    }
  617|     12|    {
  618|     12|        Py_ssize_t ival = -1;
  619|     12|        PyObject *iobj = _PyNumber_Index(PyTuple_GET_ITEM(args, 0));
  ------------------
  |  |   29|     12|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     12|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (619:42): [True: 12, False: 0]
  ------------------
  620|     12|        if (iobj != NULL) {
  ------------------
  |  Branch (620:13): [True: 12, False: 0]
  ------------------
  621|     12|            ival = PyLong_AsSsize_t(iobj);
  622|     12|            Py_DECREF(iobj);
  ------------------
  |  |  430|     12|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|     12|        }
  624|     12|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (624:13): [True: 0, False: 12]
  |  Branch (624:27): [True: 0, False: 0]
  ------------------
  625|      0|            goto exit;
  626|      0|        }
  627|     12|        index = ival;
  628|     12|    }
  629|     12|    doc = PyTuple_GET_ITEM(args, 1);
  ------------------
  |  |   29|     12|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     12|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (629:11): [True: 12, False: 0]
  ------------------
  630|      0|    return_value = tuplegetter_new_impl(type, index, doc);
  631|       |
  632|     12|exit:
  633|     12|    return return_value;
  634|     12|}

_threadmodule.c:_thread_allocate_lock:
  950|    336|{
  951|    336|    return _thread_allocate_lock_impl(module);
  952|    336|}
_threadmodule.c:_thread_get_ident:
  975|    734|{
  976|    734|    return _thread_get_ident_impl(module);
  977|    734|}
_threadmodule.c:_thread_RLock___enter__:
  513|    734|{
  514|    734|    return _thread_RLock___enter___impl((rlockobject *)self);
  515|    734|}
_threadmodule.c:_thread_RLock___exit__:
  559|    734|{
  560|    734|    PyObject *return_value = NULL;
  561|    734|    PyObject *exc_type;
  562|    734|    PyObject *exc_value;
  563|    734|    PyObject *exc_tb;
  564|       |
  565|    734|    if (!_PyArg_CheckPositional("__exit__", nargs, 3, 3)) {
  ------------------
  |  |   31|    734|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 734, False: 0]
  |  |  |  Branch (31:27): [True: 734, False: 0]
  |  |  ------------------
  |  |   32|    734|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  566|      0|        goto exit;
  567|      0|    }
  568|    734|    exc_type = args[0];
  569|    734|    exc_value = args[1];
  570|    734|    exc_tb = args[2];
  571|    734|    return_value = _thread_RLock___exit___impl((rlockobject *)self, exc_type, exc_value, exc_tb);
  572|       |
  573|    734|exit:
  574|    734|    return return_value;
  575|    734|}
_threadmodule.c:rlock_new:
  676|    337|{
  677|    337|    PyObject *return_value = NULL;
  678|    337|    PyTypeObject *base_tp = clinic_state()->rlock_type;
  ------------------
  |  |   92|    337|#define clinic_state() get_thread_state_by_cls(type)
  ------------------
  679|       |
  680|    337|    if ((type == base_tp || type->tp_init == base_tp->tp_init) &&
  ------------------
  |  Branch (680:10): [True: 337, False: 0]
  |  Branch (680:29): [True: 0, False: 0]
  ------------------
  681|    337|        !_PyArg_NoPositional("RLock", args)) {
  ------------------
  |  |   20|    337|    ((args) == NULL || _PyArg_NoPositional((funcname), (args)))
  |  |  ------------------
  |  |  |  Branch (20:6): [True: 0, False: 337]
  |  |  |  Branch (20:24): [True: 337, False: 0]
  |  |  ------------------
  ------------------
  682|      0|        goto exit;
  683|      0|    }
  684|    337|    if ((type == base_tp || type->tp_init == base_tp->tp_init) &&
  ------------------
  |  Branch (684:10): [True: 337, False: 0]
  |  Branch (684:29): [True: 0, False: 0]
  ------------------
  685|    337|        !_PyArg_NoKeywords("RLock", kwargs)) {
  ------------------
  |  |   25|    337|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 337, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  686|      0|        goto exit;
  687|      0|    }
  688|    337|    return_value = rlock_new_impl(type);
  689|       |
  690|    337|exit:
  691|    337|    return return_value;
  692|    337|}

_weakref.c:_weakref__remove_dead_weakref:
   50|    367|{
   51|    367|    PyObject *return_value = NULL;
   52|    367|    PyObject *dct;
   53|    367|    PyObject *key;
   54|       |
   55|    367|    if (!_PyArg_CheckPositional("_remove_dead_weakref", nargs, 2, 2)) {
  ------------------
  |  |   31|    367|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 367, False: 0]
  |  |  |  Branch (31:27): [True: 367, False: 0]
  |  |  ------------------
  |  |   32|    367|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   56|      0|        goto exit;
   57|      0|    }
   58|    367|    if (!PyDict_Check(args[0])) {
  ------------------
  |  |   18|    367|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    367|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (58:9): [True: 0, False: 367]
  ------------------
   59|      0|        _PyArg_BadArgument("_remove_dead_weakref", "argument 1", "dict", args[0]);
   60|      0|        goto exit;
   61|      0|    }
   62|    367|    dct = args[0];
   63|    367|    key = args[1];
   64|    367|    return_value = _weakref__remove_dead_weakref_impl(module, dct, key);
   65|       |
   66|    367|exit:
   67|    367|    return return_value;
   68|    367|}

itertoolsmodule.c:itertools_permutations:
  682|     24|{
  683|     24|    PyObject *return_value = NULL;
  684|     24|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  685|       |
  686|     24|    #define NUM_KEYWORDS 2
  687|     24|    static struct {
  688|     24|        PyGC_Head _this_is_not_used;
  689|     24|        PyObject_VAR_HEAD
  690|     24|        Py_hash_t ob_hash;
  691|     24|        PyObject *ob_item[NUM_KEYWORDS];
  692|     24|    } _kwtuple = {
  693|     24|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     24|    {                                     \
  |  |   98|     24|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     24|    {                               \
  |  |  |  |   91|     24|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     24|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     24|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     24|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     24|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     24|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     24|        (type)                      \
  |  |  |  |   93|     24|    },
  |  |  ------------------
  |  |   99|     24|        (size)                            \
  |  |  100|     24|    },
  ------------------
  694|     24|        .ob_hash = -1,
  695|     24|        .ob_item = { &_Py_ID(iterable), _Py_LATIN1_CHR('r'), },
  ------------------
  |  |  936|     24|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     24|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     24|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(iterable), _Py_LATIN1_CHR('r'), },
  ------------------
  |  |  940|     24|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 0, Folded]
  |  |  ------------------
  |  |  941|     24|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|     24|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|     24|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     24|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  696|     24|    };
  697|     24|    #undef NUM_KEYWORDS
  698|     24|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  699|       |
  700|       |    #else  // !Py_BUILD_CORE
  701|       |    #  define KWTUPLE NULL
  702|       |    #endif  // !Py_BUILD_CORE
  703|       |
  704|     24|    static const char * const _keywords[] = {"iterable", "r", NULL};
  705|     24|    static _PyArg_Parser _parser = {
  706|     24|        .keywords = _keywords,
  707|     24|        .fname = "permutations",
  708|     24|        .kwtuple = KWTUPLE,
  ------------------
  |  |  698|     24|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  709|     24|    };
  710|     24|    #undef KWTUPLE
  711|     24|    PyObject *argsbuf[2];
  712|     24|    PyObject * const *fastargs;
  713|     24|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     24|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|     24|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (714:36): [True: 0, False: 24]
  ------------------
  715|     24|    PyObject *iterable;
  716|     24|    PyObject *robj = Py_None;
  ------------------
  |  |  616|     24|#  define Py_None (&_Py_NoneStruct)
  ------------------
  717|       |
  718|     24|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|     24|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 24, Folded]
  |  |  |  Branch (88:23): [True: 24, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|     48|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 24, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 24]
  |  |  |  Branch (89:43): [True: 24, False: 0]
  |  |  |  Branch (89:67): [True: 24, False: 0]
  |  |  |  Branch (89:68): [True: 24, False: 0]
  |  |  ------------------
  |  |   90|     48|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 24, False: 0]
  |  |  ------------------
  |  |   91|     24|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  719|     24|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  720|     24|    if (!fastargs) {
  ------------------
  |  Branch (720:9): [True: 0, False: 24]
  ------------------
  721|      0|        goto exit;
  722|      0|    }
  723|     24|    iterable = fastargs[0];
  724|     24|    if (!noptargs) {
  ------------------
  |  Branch (724:9): [True: 24, False: 0]
  ------------------
  725|     24|        goto skip_optional_pos;
  726|     24|    }
  727|      0|    robj = fastargs[1];
  728|     24|skip_optional_pos:
  729|     24|    return_value = itertools_permutations_impl(type, iterable, robj);
  730|       |
  731|     24|exit:
  732|     24|    return return_value;
  733|     24|}

posixmodule.c:os_stat:
   47|    561|{
   48|    561|    PyObject *return_value = NULL;
   49|    561|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   50|       |
   51|    561|    #define NUM_KEYWORDS 3
   52|    561|    static struct {
   53|    561|        PyGC_Head _this_is_not_used;
   54|    561|        PyObject_VAR_HEAD
   55|    561|        Py_hash_t ob_hash;
   56|    561|        PyObject *ob_item[NUM_KEYWORDS];
   57|    561|    } _kwtuple = {
   58|    561|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    561|    {                                     \
  |  |   98|    561|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    561|    {                               \
  |  |  |  |   91|    561|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    561|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    561|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    561|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    561|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    561|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    561|        (type)                      \
  |  |  |  |   93|    561|    },
  |  |  ------------------
  |  |   99|    561|        (size)                            \
  |  |  100|    561|    },
  ------------------
   59|    561|        .ob_hash = -1,
   60|    561|        .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), &_Py_ID(follow_symlinks), },
  ------------------
  |  |  936|    561|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    561|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    561|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), &_Py_ID(follow_symlinks), },
  ------------------
  |  |  936|    561|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    561|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    561|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(path), &_Py_ID(dir_fd), &_Py_ID(follow_symlinks), },
  ------------------
  |  |  936|    561|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    561|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    561|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|    561|    };
   62|    561|    #undef NUM_KEYWORDS
   63|    561|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   64|       |
   65|       |    #else  // !Py_BUILD_CORE
   66|       |    #  define KWTUPLE NULL
   67|       |    #endif  // !Py_BUILD_CORE
   68|       |
   69|    561|    static const char * const _keywords[] = {"path", "dir_fd", "follow_symlinks", NULL};
   70|    561|    static _PyArg_Parser _parser = {
   71|    561|        .keywords = _keywords,
   72|    561|        .fname = "stat",
   73|    561|        .kwtuple = KWTUPLE,
  ------------------
  |  |   63|    561|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   74|    561|    };
   75|    561|    #undef KWTUPLE
   76|    561|    PyObject *argsbuf[3];
   77|    561|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (77:36): [True: 0, False: 561]
  ------------------
   78|    561|    path_t path = PATH_T_INITIALIZE_P("stat", "path", 0, 0, 0, 1);
  ------------------
  |  | 1385|    561|    PATH_T_INITIALIZE(function_name, argument_name, nullable, nonstrict, 0, \
  |  |  ------------------
  |  |  |  | 1375|    561|    {function_name, argument_name, nullable, nonstrict, make_wide, \
  |  |  |  | 1376|    561|     suppress_value_error, allow_fd, NULL, NULL, -1, false, 0, 0, NULL, NULL}
  |  |  ------------------
  |  | 1386|    561|                      suppress_value_error, allow_fd)
  ------------------
   79|    561|    int dir_fd = DEFAULT_DIR_FD;
  ------------------
  |  | 1158|    561|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
   80|    561|    int follow_symlinks = 1;
   81|       |
   82|    561|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    561|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 561, False: 0]
  |  |  ------------------
  |  |   89|    561|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 561, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 561]
  |  |  |  Branch (89:43): [True: 561, False: 0]
  |  |  |  Branch (89:67): [True: 561, False: 0]
  |  |  ------------------
  |  |   90|    561|      (args) : \
  |  |   91|    561|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   83|    561|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   84|    561|    if (!args) {
  ------------------
  |  Branch (84:9): [True: 0, False: 561]
  ------------------
   85|      0|        goto exit;
   86|      0|    }
   87|    561|    if (!path_converter(args[0], &path)) {
  ------------------
  |  Branch (87:9): [True: 0, False: 561]
  ------------------
   88|      0|        goto exit;
   89|      0|    }
   90|    561|    if (!noptargs) {
  ------------------
  |  Branch (90:9): [True: 561, False: 0]
  ------------------
   91|    561|        goto skip_optional_kwonly;
   92|    561|    }
   93|      0|    if (args[1]) {
  ------------------
  |  Branch (93:9): [True: 0, False: 0]
  ------------------
   94|      0|        if (!FSTATAT_DIR_FD_CONVERTER(args[1], &dir_fd)) {
  ------------------
  |  | 3027|      0|    #define FSTATAT_DIR_FD_CONVERTER dir_fd_converter
  ------------------
  |  Branch (94:13): [True: 0, False: 0]
  ------------------
   95|      0|            goto exit;
   96|      0|        }
   97|      0|        if (!--noptargs) {
  ------------------
  |  Branch (97:13): [True: 0, False: 0]
  ------------------
   98|      0|            goto skip_optional_kwonly;
   99|      0|        }
  100|      0|    }
  101|      0|    follow_symlinks = PyObject_IsTrue(args[2]);
  102|      0|    if (follow_symlinks < 0) {
  ------------------
  |  Branch (102:9): [True: 0, False: 0]
  ------------------
  103|      0|        goto exit;
  104|      0|    }
  105|    561|skip_optional_kwonly:
  106|    561|    return_value = os_stat_impl(module, &path, dir_fd, follow_symlinks);
  107|       |
  108|    561|exit:
  109|       |    /* Cleanup for path */
  110|    561|    path_cleanup(&path);
  111|       |
  112|    561|    return return_value;
  113|    561|}
posixmodule.c:os_listdir:
 1777|     11|{
 1778|     11|    PyObject *return_value = NULL;
 1779|     11|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1780|       |
 1781|     11|    #define NUM_KEYWORDS 1
 1782|     11|    static struct {
 1783|     11|        PyGC_Head _this_is_not_used;
 1784|     11|        PyObject_VAR_HEAD
 1785|     11|        Py_hash_t ob_hash;
 1786|     11|        PyObject *ob_item[NUM_KEYWORDS];
 1787|     11|    } _kwtuple = {
 1788|     11|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     11|    {                                     \
  |  |   98|     11|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     11|    {                               \
  |  |  |  |   91|     11|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     11|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     11|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     11|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     11|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     11|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     11|        (type)                      \
  |  |  |  |   93|     11|    },
  |  |  ------------------
  |  |   99|     11|        (size)                            \
  |  |  100|     11|    },
  ------------------
 1789|     11|        .ob_hash = -1,
 1790|     11|        .ob_item = { &_Py_ID(path), },
  ------------------
  |  |  936|     11|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     11|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     11|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1791|     11|    };
 1792|     11|    #undef NUM_KEYWORDS
 1793|     11|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1794|       |
 1795|       |    #else  // !Py_BUILD_CORE
 1796|       |    #  define KWTUPLE NULL
 1797|       |    #endif  // !Py_BUILD_CORE
 1798|       |
 1799|     11|    static const char * const _keywords[] = {"path", NULL};
 1800|     11|    static _PyArg_Parser _parser = {
 1801|     11|        .keywords = _keywords,
 1802|     11|        .fname = "listdir",
 1803|     11|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1793|     11|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1804|     11|    };
 1805|     11|    #undef KWTUPLE
 1806|     11|    PyObject *argsbuf[1];
 1807|     11|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1807:36): [True: 0, False: 11]
  ------------------
 1808|     11|    path_t path = PATH_T_INITIALIZE_P("listdir", "path", 1, 0, 0, PATH_HAVE_FDOPENDIR);
  ------------------
  |  | 1385|     11|    PATH_T_INITIALIZE(function_name, argument_name, nullable, nonstrict, 0, \
  |  |  ------------------
  |  |  |  | 1375|     11|    {function_name, argument_name, nullable, nonstrict, make_wide, \
  |  |  |  | 1376|     11|     suppress_value_error, allow_fd, NULL, NULL, -1, false, 0, 0, NULL, NULL}
  |  |  ------------------
  |  | 1386|     11|                      suppress_value_error, allow_fd)
  ------------------
 1809|       |
 1810|     11|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     11|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 11, False: 0]
  |  |  ------------------
  |  |   89|     11|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 11, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 11]
  |  |  |  Branch (89:43): [True: 11, False: 0]
  |  |  |  Branch (89:67): [True: 11, False: 0]
  |  |  ------------------
  |  |   90|     11|      (args) : \
  |  |   91|     11|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1811|     11|            /*minpos*/ 0, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1812|     11|    if (!args) {
  ------------------
  |  Branch (1812:9): [True: 0, False: 11]
  ------------------
 1813|      0|        goto exit;
 1814|      0|    }
 1815|     11|    if (!noptargs) {
  ------------------
  |  Branch (1815:9): [True: 0, False: 11]
  ------------------
 1816|      0|        goto skip_optional_pos;
 1817|      0|    }
 1818|     11|    if (!path_converter(args[0], &path)) {
  ------------------
  |  Branch (1818:9): [True: 0, False: 11]
  ------------------
 1819|      0|        goto exit;
 1820|      0|    }
 1821|     11|skip_optional_pos:
 1822|     11|    return_value = os_listdir_impl(module, &path);
 1823|       |
 1824|     11|exit:
 1825|       |    /* Cleanup for path */
 1826|     11|    path_cleanup(&path);
 1827|       |
 1828|     11|    return return_value;
 1829|     11|}
posixmodule.c:os_getegid:
 5219|      2|{
 5220|      2|    return os_getegid_impl(module);
 5221|      2|}
posixmodule.c:os_geteuid:
 5241|      2|{
 5242|      2|    return os_geteuid_impl(module);
 5243|      2|}
posixmodule.c:os_getgid:
 5263|      2|{
 5264|      2|    return os_getgid_impl(module);
 5265|      2|}
posixmodule.c:os_getuid:
 5684|      2|{
 5685|      2|    return os_getuid_impl(module);
 5686|      2|}
posixmodule.c:os__path_normpath:
 2662|     10|{
 2663|     10|    PyObject *return_value = NULL;
 2664|     10|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 2665|       |
 2666|     10|    #define NUM_KEYWORDS 1
 2667|     10|    static struct {
 2668|     10|        PyGC_Head _this_is_not_used;
 2669|     10|        PyObject_VAR_HEAD
 2670|     10|        Py_hash_t ob_hash;
 2671|     10|        PyObject *ob_item[NUM_KEYWORDS];
 2672|     10|    } _kwtuple = {
 2673|     10|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     10|    {                                     \
  |  |   98|     10|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     10|    {                               \
  |  |  |  |   91|     10|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     10|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     10|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     10|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     10|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     10|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     10|        (type)                      \
  |  |  |  |   93|     10|    },
  |  |  ------------------
  |  |   99|     10|        (size)                            \
  |  |  100|     10|    },
  ------------------
 2674|     10|        .ob_hash = -1,
 2675|     10|        .ob_item = { &_Py_ID(path), },
  ------------------
  |  |  936|     10|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     10|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     10|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2676|     10|    };
 2677|     10|    #undef NUM_KEYWORDS
 2678|     10|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 2679|       |
 2680|       |    #else  // !Py_BUILD_CORE
 2681|       |    #  define KWTUPLE NULL
 2682|       |    #endif  // !Py_BUILD_CORE
 2683|       |
 2684|     10|    static const char * const _keywords[] = {"path", NULL};
 2685|     10|    static _PyArg_Parser _parser = {
 2686|     10|        .keywords = _keywords,
 2687|     10|        .fname = "_path_normpath",
 2688|     10|        .kwtuple = KWTUPLE,
  ------------------
  |  | 2678|     10|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 2689|     10|    };
 2690|     10|    #undef KWTUPLE
 2691|     10|    PyObject *argsbuf[1];
 2692|     10|    path_t path = PATH_T_INITIALIZE("_path_normpath", "path", 0, 1, 1, 0, 0);
  ------------------
  |  | 1375|     10|    {function_name, argument_name, nullable, nonstrict, make_wide, \
  |  | 1376|     10|     suppress_value_error, allow_fd, NULL, NULL, -1, false, 0, 0, NULL, NULL}
  ------------------
 2693|       |
 2694|     10|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     10|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 10, False: 0]
  |  |  ------------------
  |  |   89|     10|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 10, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 10]
  |  |  |  Branch (89:43): [True: 10, False: 0]
  |  |  |  Branch (89:67): [True: 10, False: 0]
  |  |  ------------------
  |  |   90|     10|      (args) : \
  |  |   91|     10|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 2695|     10|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 2696|     10|    if (!args) {
  ------------------
  |  Branch (2696:9): [True: 0, False: 10]
  ------------------
 2697|      0|        goto exit;
 2698|      0|    }
 2699|     10|    if (!path_converter(args[0], &path)) {
  ------------------
  |  Branch (2699:9): [True: 0, False: 10]
  ------------------
 2700|      0|        goto exit;
 2701|      0|    }
 2702|     10|    return_value = os__path_normpath_impl(module, &path);
 2703|       |
 2704|     10|exit:
 2705|       |    /* Cleanup for path */
 2706|     10|    path_cleanup(&path);
 2707|       |
 2708|     10|    return return_value;
 2709|     10|}
posixmodule.c:os_fspath:
12538|    276|{
12539|    276|    PyObject *return_value = NULL;
12540|    276|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
12541|       |
12542|    276|    #define NUM_KEYWORDS 1
12543|    276|    static struct {
12544|    276|        PyGC_Head _this_is_not_used;
12545|    276|        PyObject_VAR_HEAD
12546|    276|        Py_hash_t ob_hash;
12547|    276|        PyObject *ob_item[NUM_KEYWORDS];
12548|    276|    } _kwtuple = {
12549|    276|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    276|    {                                     \
  |  |   98|    276|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    276|    {                               \
  |  |  |  |   91|    276|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    276|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    276|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    276|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    276|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    276|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    276|        (type)                      \
  |  |  |  |   93|    276|    },
  |  |  ------------------
  |  |   99|    276|        (size)                            \
  |  |  100|    276|    },
  ------------------
12550|    276|        .ob_hash = -1,
12551|    276|        .ob_item = { &_Py_ID(path), },
  ------------------
  |  |  936|    276|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    276|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    276|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12552|    276|    };
12553|    276|    #undef NUM_KEYWORDS
12554|    276|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
12555|       |
12556|       |    #else  // !Py_BUILD_CORE
12557|       |    #  define KWTUPLE NULL
12558|       |    #endif  // !Py_BUILD_CORE
12559|       |
12560|    276|    static const char * const _keywords[] = {"path", NULL};
12561|    276|    static _PyArg_Parser _parser = {
12562|    276|        .keywords = _keywords,
12563|    276|        .fname = "fspath",
12564|    276|        .kwtuple = KWTUPLE,
  ------------------
  |  |12554|    276|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
12565|    276|    };
12566|    276|    #undef KWTUPLE
12567|    276|    PyObject *argsbuf[1];
12568|    276|    PyObject *path;
12569|       |
12570|    276|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    276|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 276, False: 0]
  |  |  ------------------
  |  |   89|    276|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 276, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 276]
  |  |  |  Branch (89:43): [True: 276, False: 0]
  |  |  |  Branch (89:67): [True: 276, False: 0]
  |  |  ------------------
  |  |   90|    276|      (args) : \
  |  |   91|    276|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
12571|    276|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
12572|    276|    if (!args) {
  ------------------
  |  Branch (12572:9): [True: 0, False: 276]
  ------------------
12573|      0|        goto exit;
12574|      0|    }
12575|    276|    path = args[0];
12576|    276|    return_value = os_fspath_impl(module, path);
12577|       |
12578|    276|exit:
12579|    276|    return return_value;
12580|    276|}

PyInit_errno:
  986|      2|{
  987|      2|    return PyModuleDef_Init(&errnomodule);
  988|      2|}
errnomodule.c:errno_exec:
   90|      2|{
   91|      2|    PyObject *module_dict = PyModule_GetDict(module);  // Borrowed ref.
   92|      2|    if (module_dict == NULL) {
  ------------------
  |  Branch (92:9): [True: 0, False: 2]
  ------------------
   93|      0|        return -1;
   94|      0|    }
   95|      2|    PyObject *error_dict = PyDict_New();
   96|      2|    if (error_dict == NULL) {
  ------------------
  |  Branch (96:9): [True: 0, False: 2]
  ------------------
   97|      0|        return -1;
   98|      0|    }
   99|      2|    if (PyDict_SetItemString(module_dict, "errorcode", error_dict) < 0) {
  ------------------
  |  Branch (99:9): [True: 0, False: 2]
  ------------------
  100|      0|        Py_DECREF(error_dict);
  ------------------
  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|      0|        return -1;
  102|      0|    }
  103|       |
  104|       |/* Macro so I don't have to edit each and every line below... */
  105|      2|#define add_errcode(name, code, comment)                               \
  106|      2|    do {                                                               \
  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  108|      2|            Py_DECREF(error_dict);                                     \
  109|      2|            return -1;                                                 \
  110|      2|        }                                                              \
  111|      2|    } while (0);
  112|       |
  113|       |    /*
  114|       |     * The names and comments are borrowed from linux/include/errno.h,
  115|       |     * which should be pretty all-inclusive.  However, the Solaris specific
  116|       |     * names and comments are borrowed from sys/errno.h in Solaris.
  117|       |     * MacOSX specific names and comments are borrowed from sys/errno.h in
  118|       |     * MacOSX.
  119|       |     */
  120|       |
  121|      2|#ifdef ENODEV
  122|      2|    add_errcode("ENODEV", ENODEV, "No such device");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  123|      2|#endif
  124|      2|#ifdef ENOCSI
  125|      2|    add_errcode("ENOCSI", ENOCSI, "No CSI structure available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  126|      2|#endif
  127|      2|#ifdef EHOSTUNREACH
  128|      2|    add_errcode("EHOSTUNREACH", EHOSTUNREACH, "No route to host");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  129|       |#else
  130|       |#ifdef WSAEHOSTUNREACH
  131|       |    add_errcode("EHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
  132|       |#endif
  133|       |#endif
  134|      2|#ifdef ENOMSG
  135|      2|    add_errcode("ENOMSG", ENOMSG, "No message of desired type");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  136|      2|#endif
  137|      2|#ifdef EUCLEAN
  138|      2|    add_errcode("EUCLEAN", EUCLEAN, "Structure needs cleaning");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  139|      2|#endif
  140|      2|#ifdef EL2NSYNC
  141|      2|    add_errcode("EL2NSYNC", EL2NSYNC, "Level 2 not synchronized");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  142|      2|#endif
  143|      2|#ifdef EL2HLT
  144|      2|    add_errcode("EL2HLT", EL2HLT, "Level 2 halted");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  145|      2|#endif
  146|      2|#ifdef ENODATA
  147|      2|    add_errcode("ENODATA", ENODATA, "No data available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  148|      2|#endif
  149|      2|#ifdef ENOTBLK
  150|      2|    add_errcode("ENOTBLK", ENOTBLK, "Block device required");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  151|      2|#endif
  152|      2|#ifdef ENOSYS
  153|      2|    add_errcode("ENOSYS", ENOSYS, "Function not implemented");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  154|      2|#endif
  155|      2|#ifdef EPIPE
  156|      2|    add_errcode("EPIPE", EPIPE, "Broken pipe");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  157|      2|#endif
  158|      2|#ifdef EINVAL
  159|      2|    add_errcode("EINVAL", EINVAL, "Invalid argument");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  160|       |#else
  161|       |#ifdef WSAEINVAL
  162|       |    add_errcode("EINVAL", WSAEINVAL, "Invalid argument");
  163|       |#endif
  164|       |#endif
  165|      2|#ifdef EOVERFLOW
  166|      2|    add_errcode("EOVERFLOW", EOVERFLOW, "Value too large for defined data type");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  167|      2|#endif
  168|      2|#ifdef EADV
  169|      2|    add_errcode("EADV", EADV, "Advertise error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  170|      2|#endif
  171|      2|#ifdef EINTR
  172|      2|    add_errcode("EINTR", EINTR, "Interrupted system call");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  173|       |#else
  174|       |#ifdef WSAEINTR
  175|       |    add_errcode("EINTR", WSAEINTR, "Interrupted system call");
  176|       |#endif
  177|       |#endif
  178|      2|#ifdef EUSERS
  179|      2|    add_errcode("EUSERS", EUSERS, "Too many users");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  180|       |#else
  181|       |#ifdef WSAEUSERS
  182|       |    add_errcode("EUSERS", WSAEUSERS, "Too many users");
  183|       |#endif
  184|       |#endif
  185|      2|#ifdef ENOTEMPTY
  186|      2|    add_errcode("ENOTEMPTY", ENOTEMPTY, "Directory not empty");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  187|       |#else
  188|       |#ifdef WSAENOTEMPTY
  189|       |    add_errcode("ENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
  190|       |#endif
  191|       |#endif
  192|      2|#ifdef ENOBUFS
  193|      2|    add_errcode("ENOBUFS", ENOBUFS, "No buffer space available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  194|       |#else
  195|       |#ifdef WSAENOBUFS
  196|       |    add_errcode("ENOBUFS", WSAENOBUFS, "No buffer space available");
  197|       |#endif
  198|       |#endif
  199|      2|#ifdef EPROTO
  200|      2|    add_errcode("EPROTO", EPROTO, "Protocol error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  201|      2|#endif
  202|      2|#ifdef EREMOTE
  203|      2|    add_errcode("EREMOTE", EREMOTE, "Object is remote");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  204|       |#else
  205|       |#ifdef WSAEREMOTE
  206|       |    add_errcode("EREMOTE", WSAEREMOTE, "Object is remote");
  207|       |#endif
  208|       |#endif
  209|      2|#ifdef ENAVAIL
  210|      2|    add_errcode("ENAVAIL", ENAVAIL, "No XENIX semaphores available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  211|      2|#endif
  212|      2|#ifdef ECHILD
  213|      2|    add_errcode("ECHILD", ECHILD, "No child processes");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  214|      2|#endif
  215|      2|#ifdef ELOOP
  216|      2|    add_errcode("ELOOP", ELOOP, "Too many symbolic links encountered");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  217|       |#else
  218|       |#ifdef WSAELOOP
  219|       |    add_errcode("ELOOP", WSAELOOP, "Too many symbolic links encountered");
  220|       |#endif
  221|       |#endif
  222|      2|#ifdef EXDEV
  223|      2|    add_errcode("EXDEV", EXDEV, "Cross-device link");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  224|      2|#endif
  225|      2|#ifdef E2BIG
  226|      2|    add_errcode("E2BIG", E2BIG, "Arg list too long");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  227|      2|#endif
  228|      2|#ifdef ESRCH
  229|      2|    add_errcode("ESRCH", ESRCH, "No such process");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  230|      2|#endif
  231|      2|#ifdef EMSGSIZE
  232|      2|    add_errcode("EMSGSIZE", EMSGSIZE, "Message too long");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  233|       |#else
  234|       |#ifdef WSAEMSGSIZE
  235|       |    add_errcode("EMSGSIZE", WSAEMSGSIZE, "Message too long");
  236|       |#endif
  237|       |#endif
  238|      2|#ifdef EAFNOSUPPORT
  239|      2|    add_errcode("EAFNOSUPPORT", EAFNOSUPPORT, "Address family not supported by protocol");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  240|       |#else
  241|       |#ifdef WSAEAFNOSUPPORT
  242|       |    add_errcode("EAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
  243|       |#endif
  244|       |#endif
  245|      2|#ifdef EBADR
  246|      2|    add_errcode("EBADR", EBADR, "Invalid request descriptor");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  247|      2|#endif
  248|      2|#ifdef EHOSTDOWN
  249|      2|    add_errcode("EHOSTDOWN", EHOSTDOWN, "Host is down");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  250|       |#else
  251|       |#ifdef WSAEHOSTDOWN
  252|       |    add_errcode("EHOSTDOWN", WSAEHOSTDOWN, "Host is down");
  253|       |#endif
  254|       |#endif
  255|      2|#ifdef EPFNOSUPPORT
  256|      2|    add_errcode("EPFNOSUPPORT", EPFNOSUPPORT, "Protocol family not supported");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  257|       |#else
  258|       |#ifdef WSAEPFNOSUPPORT
  259|       |    add_errcode("EPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
  260|       |#endif
  261|       |#endif
  262|      2|#ifdef ENOPROTOOPT
  263|      2|    add_errcode("ENOPROTOOPT", ENOPROTOOPT, "Protocol not available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  264|       |#else
  265|       |#ifdef WSAENOPROTOOPT
  266|       |    add_errcode("ENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
  267|       |#endif
  268|       |#endif
  269|      2|#ifdef EBUSY
  270|      2|    add_errcode("EBUSY", EBUSY, "Device or resource busy");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  271|      2|#endif
  272|      2|#ifdef EWOULDBLOCK
  273|      2|    add_errcode("EWOULDBLOCK", EWOULDBLOCK, "Operation would block");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  274|       |#else
  275|       |#ifdef WSAEWOULDBLOCK
  276|       |    add_errcode("EWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
  277|       |#endif
  278|       |#endif
  279|      2|#ifdef EBADFD
  280|      2|    add_errcode("EBADFD", EBADFD, "File descriptor in bad state");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  281|      2|#endif
  282|      2|#ifdef EDOTDOT
  283|      2|    add_errcode("EDOTDOT", EDOTDOT, "RFS specific error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  284|      2|#endif
  285|      2|#ifdef EISCONN
  286|      2|    add_errcode("EISCONN", EISCONN, "Transport endpoint is already connected");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  287|       |#else
  288|       |#ifdef WSAEISCONN
  289|       |    add_errcode("EISCONN", WSAEISCONN, "Transport endpoint is already connected");
  290|       |#endif
  291|       |#endif
  292|      2|#ifdef ENOANO
  293|      2|    add_errcode("ENOANO", ENOANO, "No anode");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  294|      2|#endif
  295|       |#if defined(__wasi__) && !defined(ESHUTDOWN)
  296|       |    // WASI SDK 16 does not have ESHUTDOWN, shutdown results in EPIPE.
  297|       |    #define ESHUTDOWN EPIPE
  298|       |#endif
  299|      2|#ifdef ESHUTDOWN
  300|      2|    add_errcode("ESHUTDOWN", ESHUTDOWN, "Cannot send after transport endpoint shutdown");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  301|       |#else
  302|       |#ifdef WSAESHUTDOWN
  303|       |    add_errcode("ESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
  304|       |#endif
  305|       |#endif
  306|      2|#ifdef ECHRNG
  307|      2|    add_errcode("ECHRNG", ECHRNG, "Channel number out of range");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  308|      2|#endif
  309|      2|#ifdef ELIBBAD
  310|      2|    add_errcode("ELIBBAD", ELIBBAD, "Accessing a corrupted shared library");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  311|      2|#endif
  312|      2|#ifdef ENONET
  313|      2|    add_errcode("ENONET", ENONET, "Machine is not on the network");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  314|      2|#endif
  315|      2|#ifdef EBADE
  316|      2|    add_errcode("EBADE", EBADE, "Invalid exchange");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  317|      2|#endif
  318|      2|#ifdef EBADF
  319|      2|    add_errcode("EBADF", EBADF, "Bad file number");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  320|       |#else
  321|       |#ifdef WSAEBADF
  322|       |    add_errcode("EBADF", WSAEBADF, "Bad file number");
  323|       |#endif
  324|       |#endif
  325|      2|#ifdef EMULTIHOP
  326|      2|    add_errcode("EMULTIHOP", EMULTIHOP, "Multihop attempted");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  327|      2|#endif
  328|      2|#ifdef EIO
  329|      2|    add_errcode("EIO", EIO, "I/O error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  330|      2|#endif
  331|      2|#ifdef EUNATCH
  332|      2|    add_errcode("EUNATCH", EUNATCH, "Protocol driver not attached");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  333|      2|#endif
  334|      2|#ifdef EPROTOTYPE
  335|      2|    add_errcode("EPROTOTYPE", EPROTOTYPE, "Protocol wrong type for socket");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  336|       |#else
  337|       |#ifdef WSAEPROTOTYPE
  338|       |    add_errcode("EPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
  339|       |#endif
  340|       |#endif
  341|      2|#ifdef ENOSPC
  342|      2|    add_errcode("ENOSPC", ENOSPC, "No space left on device");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  343|      2|#endif
  344|      2|#ifdef ENOEXEC
  345|      2|    add_errcode("ENOEXEC", ENOEXEC, "Exec format error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  346|      2|#endif
  347|      2|#ifdef EALREADY
  348|      2|    add_errcode("EALREADY", EALREADY, "Operation already in progress");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  349|       |#else
  350|       |#ifdef WSAEALREADY
  351|       |    add_errcode("EALREADY", WSAEALREADY, "Operation already in progress");
  352|       |#endif
  353|       |#endif
  354|      2|#ifdef ENETDOWN
  355|      2|    add_errcode("ENETDOWN", ENETDOWN, "Network is down");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  356|       |#else
  357|       |#ifdef WSAENETDOWN
  358|       |    add_errcode("ENETDOWN", WSAENETDOWN, "Network is down");
  359|       |#endif
  360|       |#endif
  361|      2|#ifdef ENOTNAM
  362|      2|    add_errcode("ENOTNAM", ENOTNAM, "Not a XENIX named type file");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  363|      2|#endif
  364|      2|#ifdef EACCES
  365|      2|    add_errcode("EACCES", EACCES, "Permission denied");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  366|       |#else
  367|       |#ifdef WSAEACCES
  368|       |    add_errcode("EACCES", WSAEACCES, "Permission denied");
  369|       |#endif
  370|       |#endif
  371|      2|#ifdef ELNRNG
  372|      2|    add_errcode("ELNRNG", ELNRNG, "Link number out of range");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  373|      2|#endif
  374|      2|#ifdef EILSEQ
  375|      2|    add_errcode("EILSEQ", EILSEQ, "Illegal byte sequence");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  376|      2|#endif
  377|      2|#ifdef ENOTDIR
  378|      2|    add_errcode("ENOTDIR", ENOTDIR, "Not a directory");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  379|      2|#endif
  380|      2|#ifdef ENOTUNIQ
  381|      2|    add_errcode("ENOTUNIQ", ENOTUNIQ, "Name not unique on network");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  382|      2|#endif
  383|      2|#ifdef EPERM
  384|      2|    add_errcode("EPERM", EPERM, "Operation not permitted");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  385|      2|#endif
  386|      2|#ifdef EDOM
  387|      2|    add_errcode("EDOM", EDOM, "Math argument out of domain of func");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  388|      2|#endif
  389|      2|#ifdef EXFULL
  390|      2|    add_errcode("EXFULL", EXFULL, "Exchange full");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  391|      2|#endif
  392|      2|#ifdef ECONNREFUSED
  393|      2|    add_errcode("ECONNREFUSED", ECONNREFUSED, "Connection refused");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  394|       |#else
  395|       |#ifdef WSAECONNREFUSED
  396|       |    add_errcode("ECONNREFUSED", WSAECONNREFUSED, "Connection refused");
  397|       |#endif
  398|       |#endif
  399|      2|#ifdef EISDIR
  400|      2|    add_errcode("EISDIR", EISDIR, "Is a directory");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  401|      2|#endif
  402|      2|#ifdef EPROTONOSUPPORT
  403|      2|    add_errcode("EPROTONOSUPPORT", EPROTONOSUPPORT, "Protocol not supported");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  404|       |#else
  405|       |#ifdef WSAEPROTONOSUPPORT
  406|       |    add_errcode("EPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
  407|       |#endif
  408|       |#endif
  409|      2|#ifdef EROFS
  410|      2|    add_errcode("EROFS", EROFS, "Read-only file system");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  411|      2|#endif
  412|      2|#ifdef EADDRNOTAVAIL
  413|      2|    add_errcode("EADDRNOTAVAIL", EADDRNOTAVAIL, "Cannot assign requested address");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  414|       |#else
  415|       |#ifdef WSAEADDRNOTAVAIL
  416|       |    add_errcode("EADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
  417|       |#endif
  418|       |#endif
  419|      2|#ifdef EIDRM
  420|      2|    add_errcode("EIDRM", EIDRM, "Identifier removed");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  421|      2|#endif
  422|      2|#ifdef ECOMM
  423|      2|    add_errcode("ECOMM", ECOMM, "Communication error on send");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  424|      2|#endif
  425|      2|#ifdef ESRMNT
  426|      2|    add_errcode("ESRMNT", ESRMNT, "Srmount error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  427|      2|#endif
  428|      2|#ifdef EREMOTEIO
  429|      2|    add_errcode("EREMOTEIO", EREMOTEIO, "Remote I/O error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  430|      2|#endif
  431|      2|#ifdef EL3RST
  432|      2|    add_errcode("EL3RST", EL3RST, "Level 3 reset");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  433|      2|#endif
  434|      2|#ifdef EBADMSG
  435|      2|    add_errcode("EBADMSG", EBADMSG, "Not a data message");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  436|      2|#endif
  437|      2|#ifdef ENFILE
  438|      2|    add_errcode("ENFILE", ENFILE, "File table overflow");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  439|      2|#endif
  440|      2|#ifdef ELIBMAX
  441|      2|    add_errcode("ELIBMAX", ELIBMAX, "Attempting to link in too many shared libraries");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  442|      2|#endif
  443|      2|#ifdef ESPIPE
  444|      2|    add_errcode("ESPIPE", ESPIPE, "Illegal seek");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  445|      2|#endif
  446|      2|#ifdef ENOLINK
  447|      2|    add_errcode("ENOLINK", ENOLINK, "Link has been severed");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  448|      2|#endif
  449|      2|#ifdef ENETRESET
  450|      2|    add_errcode("ENETRESET", ENETRESET, "Network dropped connection because of reset");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  451|       |#else
  452|       |#ifdef WSAENETRESET
  453|       |    add_errcode("ENETRESET", WSAENETRESET, "Network dropped connection because of reset");
  454|       |#endif
  455|       |#endif
  456|      2|#ifdef ETIMEDOUT
  457|      2|    add_errcode("ETIMEDOUT", ETIMEDOUT, "Connection timed out");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  458|       |#else
  459|       |#ifdef WSAETIMEDOUT
  460|       |    add_errcode("ETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
  461|       |#endif
  462|       |#endif
  463|      2|#ifdef ENOENT
  464|      2|    add_errcode("ENOENT", ENOENT, "No such file or directory");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  465|      2|#endif
  466|      2|#ifdef EEXIST
  467|      2|    add_errcode("EEXIST", EEXIST, "File exists");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  468|      2|#endif
  469|      2|#ifdef EDQUOT
  470|      2|    add_errcode("EDQUOT", EDQUOT, "Quota exceeded");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  471|       |#else
  472|       |#ifdef WSAEDQUOT
  473|       |    add_errcode("EDQUOT", WSAEDQUOT, "Quota exceeded");
  474|       |#endif
  475|       |#endif
  476|      2|#ifdef ENOSTR
  477|      2|    add_errcode("ENOSTR", ENOSTR, "Device not a stream");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  478|      2|#endif
  479|      2|#ifdef EBADSLT
  480|      2|    add_errcode("EBADSLT", EBADSLT, "Invalid slot");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  481|      2|#endif
  482|      2|#ifdef EBADRQC
  483|      2|    add_errcode("EBADRQC", EBADRQC, "Invalid request code");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  484|      2|#endif
  485|      2|#ifdef ELIBACC
  486|      2|    add_errcode("ELIBACC", ELIBACC, "Can not access a needed shared library");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  487|      2|#endif
  488|      2|#ifdef EFAULT
  489|      2|    add_errcode("EFAULT", EFAULT, "Bad address");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  490|       |#else
  491|       |#ifdef WSAEFAULT
  492|       |    add_errcode("EFAULT", WSAEFAULT, "Bad address");
  493|       |#endif
  494|       |#endif
  495|      2|#ifdef EFBIG
  496|      2|    add_errcode("EFBIG", EFBIG, "File too large");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  497|      2|#endif
  498|      2|#ifdef EDEADLK
  499|      2|    add_errcode("EDEADLK", EDEADLK, "Resource deadlock would occur");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  500|      2|#endif
  501|      2|#ifdef ENOTCONN
  502|      2|    add_errcode("ENOTCONN", ENOTCONN, "Transport endpoint is not connected");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  503|       |#else
  504|       |#ifdef WSAENOTCONN
  505|       |    add_errcode("ENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
  506|       |#endif
  507|       |#endif
  508|      2|#ifdef EDESTADDRREQ
  509|      2|    add_errcode("EDESTADDRREQ", EDESTADDRREQ, "Destination address required");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  510|       |#else
  511|       |#ifdef WSAEDESTADDRREQ
  512|       |    add_errcode("EDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
  513|       |#endif
  514|       |#endif
  515|      2|#ifdef ELIBSCN
  516|      2|    add_errcode("ELIBSCN", ELIBSCN, ".lib section in a.out corrupted");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  517|      2|#endif
  518|      2|#ifdef ENOLCK
  519|      2|    add_errcode("ENOLCK", ENOLCK, "No record locks available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  520|      2|#endif
  521|      2|#ifdef EISNAM
  522|      2|    add_errcode("EISNAM", EISNAM, "Is a named type file");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  523|      2|#endif
  524|      2|#ifdef ECONNABORTED
  525|      2|    add_errcode("ECONNABORTED", ECONNABORTED, "Software caused connection abort");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  526|       |#else
  527|       |#ifdef WSAECONNABORTED
  528|       |    add_errcode("ECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
  529|       |#endif
  530|       |#endif
  531|      2|#ifdef ENETUNREACH
  532|      2|    add_errcode("ENETUNREACH", ENETUNREACH, "Network is unreachable");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  533|       |#else
  534|       |#ifdef WSAENETUNREACH
  535|       |    add_errcode("ENETUNREACH", WSAENETUNREACH, "Network is unreachable");
  536|       |#endif
  537|       |#endif
  538|      2|#ifdef ESTALE
  539|      2|    add_errcode("ESTALE", ESTALE, "Stale NFS file handle");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  540|       |#else
  541|       |#ifdef WSAESTALE
  542|       |    add_errcode("ESTALE", WSAESTALE, "Stale NFS file handle");
  543|       |#endif
  544|       |#endif
  545|      2|#ifdef ENOSR
  546|      2|    add_errcode("ENOSR", ENOSR, "Out of streams resources");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  547|      2|#endif
  548|      2|#ifdef ENOMEM
  549|      2|    add_errcode("ENOMEM", ENOMEM, "Out of memory");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  550|      2|#endif
  551|      2|#ifdef ENOTSOCK
  552|      2|    add_errcode("ENOTSOCK", ENOTSOCK, "Socket operation on non-socket");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  553|       |#else
  554|       |#ifdef WSAENOTSOCK
  555|       |    add_errcode("ENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
  556|       |#endif
  557|       |#endif
  558|      2|#ifdef ESTRPIPE
  559|      2|    add_errcode("ESTRPIPE", ESTRPIPE, "Streams pipe error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  560|      2|#endif
  561|      2|#ifdef EMLINK
  562|      2|    add_errcode("EMLINK", EMLINK, "Too many links");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  563|      2|#endif
  564|      2|#ifdef ERANGE
  565|      2|    add_errcode("ERANGE", ERANGE, "Math result not representable");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  566|      2|#endif
  567|      2|#ifdef ELIBEXEC
  568|      2|    add_errcode("ELIBEXEC", ELIBEXEC, "Cannot exec a shared library directly");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  569|      2|#endif
  570|      2|#ifdef EL3HLT
  571|      2|    add_errcode("EL3HLT", EL3HLT, "Level 3 halted");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  572|      2|#endif
  573|      2|#ifdef ECONNRESET
  574|      2|    add_errcode("ECONNRESET", ECONNRESET, "Connection reset by peer");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  575|       |#else
  576|       |#ifdef WSAECONNRESET
  577|       |    add_errcode("ECONNRESET", WSAECONNRESET, "Connection reset by peer");
  578|       |#endif
  579|       |#endif
  580|      2|#ifdef EADDRINUSE
  581|      2|    add_errcode("EADDRINUSE", EADDRINUSE, "Address already in use");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  582|       |#else
  583|       |#ifdef WSAEADDRINUSE
  584|       |    add_errcode("EADDRINUSE", WSAEADDRINUSE, "Address already in use");
  585|       |#endif
  586|       |#endif
  587|      2|#ifdef EOPNOTSUPP
  588|      2|    add_errcode("EOPNOTSUPP", EOPNOTSUPP, "Operation not supported on transport endpoint");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  589|       |#else
  590|       |#ifdef WSAEOPNOTSUPP
  591|       |    add_errcode("EOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
  592|       |#endif
  593|       |#endif
  594|      2|#ifdef EREMCHG
  595|      2|    add_errcode("EREMCHG", EREMCHG, "Remote address changed");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  596|      2|#endif
  597|      2|#ifdef EAGAIN
  598|      2|    add_errcode("EAGAIN", EAGAIN, "Try again");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  599|      2|#endif
  600|      2|#ifdef ENAMETOOLONG
  601|      2|    add_errcode("ENAMETOOLONG", ENAMETOOLONG, "File name too long");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  602|       |#else
  603|       |#ifdef WSAENAMETOOLONG
  604|       |    add_errcode("ENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
  605|       |#endif
  606|       |#endif
  607|      2|#ifdef ENOTTY
  608|      2|    add_errcode("ENOTTY", ENOTTY, "Not a typewriter");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  609|      2|#endif
  610|      2|#ifdef ERESTART
  611|      2|    add_errcode("ERESTART", ERESTART, "Interrupted system call should be restarted");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  612|      2|#endif
  613|      2|#ifdef ESOCKTNOSUPPORT
  614|      2|    add_errcode("ESOCKTNOSUPPORT", ESOCKTNOSUPPORT, "Socket type not supported");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  615|       |#else
  616|       |#ifdef WSAESOCKTNOSUPPORT
  617|       |    add_errcode("ESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
  618|       |#endif
  619|       |#endif
  620|      2|#ifdef ETIME
  621|      2|    add_errcode("ETIME", ETIME, "Timer expired");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  622|      2|#endif
  623|      2|#ifdef EBFONT
  624|      2|    add_errcode("EBFONT", EBFONT, "Bad font file format");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  625|      2|#endif
  626|      2|#ifdef EDEADLOCK
  627|      2|    add_errcode("EDEADLOCK", EDEADLOCK, "Error EDEADLOCK");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  628|      2|#endif
  629|      2|#ifdef ETOOMANYREFS
  630|      2|    add_errcode("ETOOMANYREFS", ETOOMANYREFS, "Too many references: cannot splice");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  631|       |#else
  632|       |#ifdef WSAETOOMANYREFS
  633|       |    add_errcode("ETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
  634|       |#endif
  635|       |#endif
  636|      2|#ifdef EMFILE
  637|      2|    add_errcode("EMFILE", EMFILE, "Too many open files");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  638|       |#else
  639|       |#ifdef WSAEMFILE
  640|       |    add_errcode("EMFILE", WSAEMFILE, "Too many open files");
  641|       |#endif
  642|       |#endif
  643|      2|#ifdef ETXTBSY
  644|      2|    add_errcode("ETXTBSY", ETXTBSY, "Text file busy");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  645|      2|#endif
  646|      2|#ifdef EINPROGRESS
  647|      2|    add_errcode("EINPROGRESS", EINPROGRESS, "Operation now in progress");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  648|       |#else
  649|       |#ifdef WSAEINPROGRESS
  650|       |    add_errcode("EINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
  651|       |#endif
  652|       |#endif
  653|      2|#ifdef ENXIO
  654|      2|    add_errcode("ENXIO", ENXIO, "No such device or address");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  655|      2|#endif
  656|      2|#ifdef ENOPKG
  657|      2|    add_errcode("ENOPKG", ENOPKG, "Package not installed");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  658|      2|#endif
  659|       |#ifdef WSASY
  660|       |    add_errcode("WSASY", WSASY, "Error WSASY");
  661|       |#endif
  662|       |#ifdef WSAEHOSTDOWN
  663|       |    add_errcode("WSAEHOSTDOWN", WSAEHOSTDOWN, "Host is down");
  664|       |#endif
  665|       |#ifdef WSAENETDOWN
  666|       |    add_errcode("WSAENETDOWN", WSAENETDOWN, "Network is down");
  667|       |#endif
  668|       |#ifdef WSAENOTSOCK
  669|       |    add_errcode("WSAENOTSOCK", WSAENOTSOCK, "Socket operation on non-socket");
  670|       |#endif
  671|       |#ifdef WSAEHOSTUNREACH
  672|       |    add_errcode("WSAEHOSTUNREACH", WSAEHOSTUNREACH, "No route to host");
  673|       |#endif
  674|       |#ifdef WSAELOOP
  675|       |    add_errcode("WSAELOOP", WSAELOOP, "Too many symbolic links encountered");
  676|       |#endif
  677|       |#ifdef WSAEMFILE
  678|       |    add_errcode("WSAEMFILE", WSAEMFILE, "Too many open files");
  679|       |#endif
  680|       |#ifdef WSAESTALE
  681|       |    add_errcode("WSAESTALE", WSAESTALE, "Stale NFS file handle");
  682|       |#endif
  683|       |#ifdef WSAVERNOTSUPPORTED
  684|       |    add_errcode("WSAVERNOTSUPPORTED", WSAVERNOTSUPPORTED, "Error WSAVERNOTSUPPORTED");
  685|       |#endif
  686|       |#ifdef WSAENETUNREACH
  687|       |    add_errcode("WSAENETUNREACH", WSAENETUNREACH, "Network is unreachable");
  688|       |#endif
  689|       |#ifdef WSAEPROCLIM
  690|       |    add_errcode("WSAEPROCLIM", WSAEPROCLIM, "Error WSAEPROCLIM");
  691|       |#endif
  692|       |#ifdef WSAEFAULT
  693|       |    add_errcode("WSAEFAULT", WSAEFAULT, "Bad address");
  694|       |#endif
  695|       |#ifdef WSANOTINITIALISED
  696|       |    add_errcode("WSANOTINITIALISED", WSANOTINITIALISED, "Error WSANOTINITIALISED");
  697|       |#endif
  698|       |#ifdef WSAEUSERS
  699|       |    add_errcode("WSAEUSERS", WSAEUSERS, "Too many users");
  700|       |#endif
  701|       |#ifdef WSAMAKEASYNCREPL
  702|       |    add_errcode("WSAMAKEASYNCREPL", WSAMAKEASYNCREPL, "Error WSAMAKEASYNCREPL");
  703|       |#endif
  704|       |#ifdef WSAENOPROTOOPT
  705|       |    add_errcode("WSAENOPROTOOPT", WSAENOPROTOOPT, "Protocol not available");
  706|       |#endif
  707|       |#ifdef WSAECONNABORTED
  708|       |    add_errcode("WSAECONNABORTED", WSAECONNABORTED, "Software caused connection abort");
  709|       |#endif
  710|       |#ifdef WSAENAMETOOLONG
  711|       |    add_errcode("WSAENAMETOOLONG", WSAENAMETOOLONG, "File name too long");
  712|       |#endif
  713|       |#ifdef WSAENOTEMPTY
  714|       |    add_errcode("WSAENOTEMPTY", WSAENOTEMPTY, "Directory not empty");
  715|       |#endif
  716|       |#ifdef WSAESHUTDOWN
  717|       |    add_errcode("WSAESHUTDOWN", WSAESHUTDOWN, "Cannot send after transport endpoint shutdown");
  718|       |#endif
  719|       |#ifdef WSAEAFNOSUPPORT
  720|       |    add_errcode("WSAEAFNOSUPPORT", WSAEAFNOSUPPORT, "Address family not supported by protocol");
  721|       |#endif
  722|       |#ifdef WSAETOOMANYREFS
  723|       |    add_errcode("WSAETOOMANYREFS", WSAETOOMANYREFS, "Too many references: cannot splice");
  724|       |#endif
  725|       |#ifdef WSAEACCES
  726|       |    add_errcode("WSAEACCES", WSAEACCES, "Permission denied");
  727|       |#endif
  728|       |#ifdef WSATR
  729|       |    add_errcode("WSATR", WSATR, "Error WSATR");
  730|       |#endif
  731|       |#ifdef WSABASEERR
  732|       |    add_errcode("WSABASEERR", WSABASEERR, "Error WSABASEERR");
  733|       |#endif
  734|       |#ifdef WSADESCRIPTIO
  735|       |    add_errcode("WSADESCRIPTIO", WSADESCRIPTIO, "Error WSADESCRIPTIO");
  736|       |#endif
  737|       |#ifdef WSAEMSGSIZE
  738|       |    add_errcode("WSAEMSGSIZE", WSAEMSGSIZE, "Message too long");
  739|       |#endif
  740|       |#ifdef WSAEBADF
  741|       |    add_errcode("WSAEBADF", WSAEBADF, "Bad file number");
  742|       |#endif
  743|       |#ifdef WSAECONNRESET
  744|       |    add_errcode("WSAECONNRESET", WSAECONNRESET, "Connection reset by peer");
  745|       |#endif
  746|       |#ifdef WSAGETSELECTERRO
  747|       |    add_errcode("WSAGETSELECTERRO", WSAGETSELECTERRO, "Error WSAGETSELECTERRO");
  748|       |#endif
  749|       |#ifdef WSAETIMEDOUT
  750|       |    add_errcode("WSAETIMEDOUT", WSAETIMEDOUT, "Connection timed out");
  751|       |#endif
  752|       |#ifdef WSAENOBUFS
  753|       |    add_errcode("WSAENOBUFS", WSAENOBUFS, "No buffer space available");
  754|       |#endif
  755|       |#ifdef WSAEDISCON
  756|       |    add_errcode("WSAEDISCON", WSAEDISCON, "Error WSAEDISCON");
  757|       |#endif
  758|       |#ifdef WSAEINTR
  759|       |    add_errcode("WSAEINTR", WSAEINTR, "Interrupted system call");
  760|       |#endif
  761|       |#ifdef WSAEPROTOTYPE
  762|       |    add_errcode("WSAEPROTOTYPE", WSAEPROTOTYPE, "Protocol wrong type for socket");
  763|       |#endif
  764|       |#ifdef WSAHOS
  765|       |    add_errcode("WSAHOS", WSAHOS, "Error WSAHOS");
  766|       |#endif
  767|       |#ifdef WSAEADDRINUSE
  768|       |    add_errcode("WSAEADDRINUSE", WSAEADDRINUSE, "Address already in use");
  769|       |#endif
  770|       |#ifdef WSAEADDRNOTAVAIL
  771|       |    add_errcode("WSAEADDRNOTAVAIL", WSAEADDRNOTAVAIL, "Cannot assign requested address");
  772|       |#endif
  773|       |#ifdef WSAEALREADY
  774|       |    add_errcode("WSAEALREADY", WSAEALREADY, "Operation already in progress");
  775|       |#endif
  776|       |#ifdef WSAEPROTONOSUPPORT
  777|       |    add_errcode("WSAEPROTONOSUPPORT", WSAEPROTONOSUPPORT, "Protocol not supported");
  778|       |#endif
  779|       |#ifdef WSASYSNOTREADY
  780|       |    add_errcode("WSASYSNOTREADY", WSASYSNOTREADY, "Error WSASYSNOTREADY");
  781|       |#endif
  782|       |#ifdef WSAEWOULDBLOCK
  783|       |    add_errcode("WSAEWOULDBLOCK", WSAEWOULDBLOCK, "Operation would block");
  784|       |#endif
  785|       |#ifdef WSAEPFNOSUPPORT
  786|       |    add_errcode("WSAEPFNOSUPPORT", WSAEPFNOSUPPORT, "Protocol family not supported");
  787|       |#endif
  788|       |#ifdef WSAEOPNOTSUPP
  789|       |    add_errcode("WSAEOPNOTSUPP", WSAEOPNOTSUPP, "Operation not supported on transport endpoint");
  790|       |#endif
  791|       |#ifdef WSAEISCONN
  792|       |    add_errcode("WSAEISCONN", WSAEISCONN, "Transport endpoint is already connected");
  793|       |#endif
  794|       |#ifdef WSAEDQUOT
  795|       |    add_errcode("WSAEDQUOT", WSAEDQUOT, "Quota exceeded");
  796|       |#endif
  797|       |#ifdef WSAENOTCONN
  798|       |    add_errcode("WSAENOTCONN", WSAENOTCONN, "Transport endpoint is not connected");
  799|       |#endif
  800|       |#ifdef WSAEREMOTE
  801|       |    add_errcode("WSAEREMOTE", WSAEREMOTE, "Object is remote");
  802|       |#endif
  803|       |#ifdef WSAEINVAL
  804|       |    add_errcode("WSAEINVAL", WSAEINVAL, "Invalid argument");
  805|       |#endif
  806|       |#ifdef WSAEINPROGRESS
  807|       |    add_errcode("WSAEINPROGRESS", WSAEINPROGRESS, "Operation now in progress");
  808|       |#endif
  809|       |#ifdef WSAGETSELECTEVEN
  810|       |    add_errcode("WSAGETSELECTEVEN", WSAGETSELECTEVEN, "Error WSAGETSELECTEVEN");
  811|       |#endif
  812|       |#ifdef WSAESOCKTNOSUPPORT
  813|       |    add_errcode("WSAESOCKTNOSUPPORT", WSAESOCKTNOSUPPORT, "Socket type not supported");
  814|       |#endif
  815|       |#ifdef WSAGETASYNCERRO
  816|       |    add_errcode("WSAGETASYNCERRO", WSAGETASYNCERRO, "Error WSAGETASYNCERRO");
  817|       |#endif
  818|       |#ifdef WSAMAKESELECTREPL
  819|       |    add_errcode("WSAMAKESELECTREPL", WSAMAKESELECTREPL, "Error WSAMAKESELECTREPL");
  820|       |#endif
  821|       |#ifdef WSAGETASYNCBUFLE
  822|       |    add_errcode("WSAGETASYNCBUFLE", WSAGETASYNCBUFLE, "Error WSAGETASYNCBUFLE");
  823|       |#endif
  824|       |#ifdef WSAEDESTADDRREQ
  825|       |    add_errcode("WSAEDESTADDRREQ", WSAEDESTADDRREQ, "Destination address required");
  826|       |#endif
  827|       |#ifdef WSAECONNREFUSED
  828|       |    add_errcode("WSAECONNREFUSED", WSAECONNREFUSED, "Connection refused");
  829|       |#endif
  830|       |#ifdef WSAENETRESET
  831|       |    add_errcode("WSAENETRESET", WSAENETRESET, "Network dropped connection because of reset");
  832|       |#endif
  833|       |#ifdef WSAN
  834|       |    add_errcode("WSAN", WSAN, "Error WSAN");
  835|       |#endif
  836|      2|#ifdef ENOMEDIUM
  837|      2|    add_errcode("ENOMEDIUM", ENOMEDIUM, "No medium found");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  838|      2|#endif
  839|      2|#ifdef EMEDIUMTYPE
  840|      2|    add_errcode("EMEDIUMTYPE", EMEDIUMTYPE, "Wrong medium type");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  841|      2|#endif
  842|      2|#ifdef ECANCELED
  843|      2|    add_errcode("ECANCELED", ECANCELED, "Operation Canceled");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  844|      2|#endif
  845|      2|#ifdef ENOKEY
  846|      2|    add_errcode("ENOKEY", ENOKEY, "Required key not available");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  847|      2|#endif
  848|      2|#ifdef EHWPOISON
  849|      2|    add_errcode("EHWPOISON", EHWPOISON, "Memory page has hardware error");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  850|      2|#endif
  851|      2|#ifdef EKEYEXPIRED
  852|      2|    add_errcode("EKEYEXPIRED", EKEYEXPIRED, "Key has expired");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  853|      2|#endif
  854|      2|#ifdef EKEYREVOKED
  855|      2|    add_errcode("EKEYREVOKED", EKEYREVOKED, "Key has been revoked");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  856|      2|#endif
  857|      2|#ifdef EKEYREJECTED
  858|      2|    add_errcode("EKEYREJECTED", EKEYREJECTED, "Key was rejected by service");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  859|      2|#endif
  860|      2|#ifdef EOWNERDEAD
  861|      2|    add_errcode("EOWNERDEAD", EOWNERDEAD, "Owner died");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  862|      2|#endif
  863|      2|#ifdef ENOTRECOVERABLE
  864|      2|    add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "State not recoverable");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  865|      2|#endif
  866|      2|#ifdef ERFKILL
  867|      2|    add_errcode("ERFKILL", ERFKILL, "Operation not possible due to RF-kill");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  868|      2|#endif
  869|       |
  870|       |    /* Solaris-specific errnos */
  871|      2|#ifdef ECANCELED
  872|      2|    add_errcode("ECANCELED", ECANCELED, "Operation canceled");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  873|      2|#endif
  874|      2|#ifdef ENOTSUP
  875|      2|    add_errcode("ENOTSUP", ENOTSUP, "Operation not supported");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  876|      2|#endif
  877|      2|#ifdef EOWNERDEAD
  878|      2|    add_errcode("EOWNERDEAD", EOWNERDEAD, "Process died with the lock");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  879|      2|#endif
  880|      2|#ifdef ENOTRECOVERABLE
  881|      2|    add_errcode("ENOTRECOVERABLE", ENOTRECOVERABLE, "Lock is not recoverable");
  ------------------
  |  |  106|      2|    do {                                                               \
  |  |  107|      2|        if (_add_errcode(module_dict, error_dict, name, code) < 0) {   \
  |  |  ------------------
  |  |  |  Branch (107:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  108|      0|            Py_DECREF(error_dict);                                     \
  |  |  ------------------
  |  |  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  109|      0|            return -1;                                                 \
  |  |  110|      0|        }                                                              \
  |  |  111|      2|    } while (0);
  |  |  ------------------
  |  |  |  Branch (111:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  882|      2|#endif
  883|       |#ifdef ELOCKUNMAPPED
  884|       |    add_errcode("ELOCKUNMAPPED", ELOCKUNMAPPED, "Locked lock was unmapped");
  885|       |#endif
  886|       |#ifdef ENOTACTIVE
  887|       |    add_errcode("ENOTACTIVE", ENOTACTIVE, "Facility is not active");
  888|       |#endif
  889|       |
  890|       |    /* MacOSX specific errnos */
  891|       |#ifdef EAUTH
  892|       |    add_errcode("EAUTH", EAUTH, "Authentication error");
  893|       |#endif
  894|       |#ifdef EBADARCH
  895|       |    add_errcode("EBADARCH", EBADARCH, "Bad CPU type in executable");
  896|       |#endif
  897|       |#ifdef EBADEXEC
  898|       |    add_errcode("EBADEXEC", EBADEXEC, "Bad executable (or shared library)");
  899|       |#endif
  900|       |#ifdef EBADMACHO
  901|       |    add_errcode("EBADMACHO", EBADMACHO, "Malformed Mach-o file");
  902|       |#endif
  903|       |#ifdef EBADRPC
  904|       |    add_errcode("EBADRPC", EBADRPC, "RPC struct is bad");
  905|       |#endif
  906|       |#ifdef EDEVERR
  907|       |    add_errcode("EDEVERR", EDEVERR, "Device error");
  908|       |#endif
  909|       |#ifdef EFTYPE
  910|       |    add_errcode("EFTYPE", EFTYPE, "Inappropriate file type or format");
  911|       |#endif
  912|       |#ifdef ENEEDAUTH
  913|       |    add_errcode("ENEEDAUTH", ENEEDAUTH, "Need authenticator");
  914|       |#endif
  915|       |#ifdef ENOATTR
  916|       |    add_errcode("ENOATTR", ENOATTR, "Attribute not found");
  917|       |#endif
  918|       |#ifdef ENOPOLICY
  919|       |    add_errcode("ENOPOLICY", ENOPOLICY, "Policy not found");
  920|       |#endif
  921|       |#ifdef EPROCLIM
  922|       |    add_errcode("EPROCLIM", EPROCLIM, "Too many processes");
  923|       |#endif
  924|       |#ifdef EPROCUNAVAIL
  925|       |    add_errcode("EPROCUNAVAIL", EPROCUNAVAIL, "Bad procedure for program");
  926|       |#endif
  927|       |#ifdef EPROGMISMATCH
  928|       |    add_errcode("EPROGMISMATCH", EPROGMISMATCH, "Program version wrong");
  929|       |#endif
  930|       |#ifdef EPROGUNAVAIL
  931|       |    add_errcode("EPROGUNAVAIL", EPROGUNAVAIL, "RPC prog. not avail");
  932|       |#endif
  933|       |#ifdef EPWROFF
  934|       |    add_errcode("EPWROFF", EPWROFF, "Device power is off");
  935|       |#endif
  936|       |#ifdef ERPCMISMATCH
  937|       |    add_errcode("ERPCMISMATCH", ERPCMISMATCH, "RPC version wrong");
  938|       |#endif
  939|       |#ifdef ESHLIBVERS
  940|       |    add_errcode("ESHLIBVERS", ESHLIBVERS, "Shared library version mismatch");
  941|       |#endif
  942|       |#ifdef EQFULL
  943|       |    add_errcode("EQFULL", EQFULL, "Interface output queue is full");
  944|       |#endif
  945|       |#ifdef ENOTCAPABLE
  946|       |    // WASI extension
  947|       |    add_errcode("ENOTCAPABLE", ENOTCAPABLE, "Capabilities insufficient");
  948|       |#endif
  949|       |
  950|      2|    Py_DECREF(error_dict);
  ------------------
  |  |  340|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  951|      2|    return 0;
  952|      2|}
errnomodule.c:_add_errcode:
   60|    274|{
   61|    274|    PyObject *name = PyUnicode_FromString(name_str);
   62|    274|    if (!name) {
  ------------------
  |  Branch (62:9): [True: 0, False: 274]
  ------------------
   63|      0|        return -1;
   64|      0|    }
   65|       |
   66|    274|    PyObject *code = PyLong_FromLong(code_int);
   67|    274|    if (!code) {
  ------------------
  |  Branch (67:9): [True: 0, False: 274]
  ------------------
   68|      0|        Py_DECREF(name);
  ------------------
  |  |  340|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|      0|        return -1;
   70|      0|    }
   71|       |
   72|    274|    int ret = -1;
   73|       |    /* insert in modules dict */
   74|    274|    if (PyDict_SetItem(module_dict, name, code) < 0) {
  ------------------
  |  Branch (74:9): [True: 0, False: 274]
  ------------------
   75|      0|        goto end;
   76|      0|    }
   77|       |    /* insert in errorcode dict */
   78|    274|    if (PyDict_SetItem(error_dict, code, name) < 0) {
  ------------------
  |  Branch (78:9): [True: 0, False: 274]
  ------------------
   79|      0|        goto end;
   80|      0|    }
   81|    274|    ret = 0;
   82|    274|end:
   83|    274|    Py_DECREF(name);
  ------------------
  |  |  340|    274|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|    274|    Py_DECREF(code);
  ------------------
  |  |  340|    274|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|    274|    return ret;
   86|    274|}

_PyFaulthandler_Init:
 1473|      2|{
 1474|      2|#ifdef FAULTHANDLER_USE_ALT_STACK
 1475|      2|    memset(&stack, 0, sizeof(stack));
  ------------------
  |  |   86|      2|#  define stack _PyRuntime.faulthandler.stack
  ------------------
                  memset(&stack, 0, sizeof(stack));
  ------------------
  |  |   86|      2|#  define stack _PyRuntime.faulthandler.stack
  ------------------
 1476|      2|    stack.ss_flags = 0;
  ------------------
  |  |   86|      2|#  define stack _PyRuntime.faulthandler.stack
  ------------------
 1477|       |    /* bpo-21131: allocate dedicated stack of SIGSTKSZ*2 bytes, instead of just
 1478|       |       SIGSTKSZ bytes. Calling the previous signal handler in faulthandler
 1479|       |       signal handler uses more than SIGSTKSZ bytes of stack memory on some
 1480|       |       platforms. */
 1481|      2|    stack.ss_size = SIGSTKSZ * 2;
  ------------------
  |  |   86|      2|#  define stack _PyRuntime.faulthandler.stack
  ------------------
 1482|      2|#ifdef AT_MINSIGSTKSZ
 1483|       |    /* bpo-46968: Query Linux for minimal stack size to ensure signal delivery
 1484|       |       for the hardware running CPython. This OS feature is available in
 1485|       |       Linux kernel version >= 5.14 */
 1486|      2|    unsigned long at_minstack_size = getauxval(AT_MINSIGSTKSZ);
 1487|      2|    if (at_minstack_size != 0) {
  ------------------
  |  Branch (1487:9): [True: 0, False: 2]
  ------------------
 1488|      0|        stack.ss_size = SIGSTKSZ + at_minstack_size;
  ------------------
  |  |   86|      0|#  define stack _PyRuntime.faulthandler.stack
  ------------------
 1489|      0|    }
 1490|      2|#endif
 1491|      2|#endif
 1492|       |
 1493|      2|    memset(&thread, 0, sizeof(thread));
  ------------------
  |  |   60|      2|#define thread _PyRuntime.faulthandler.thread
  ------------------
                  memset(&thread, 0, sizeof(thread));
  ------------------
  |  |   60|      2|#define thread _PyRuntime.faulthandler.thread
  ------------------
 1494|       |
 1495|      2|    if (enable) {
  ------------------
  |  Branch (1495:9): [True: 0, False: 2]
  ------------------
 1496|      0|        if (faulthandler_init_enable() < 0) {
  ------------------
  |  Branch (1496:13): [True: 0, False: 0]
  ------------------
 1497|      0|            return _PyStatus_ERR("failed to enable faulthandler");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1498|      0|        }
 1499|      0|    }
 1500|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1501|      2|}

Py_GetBuildInfo:
   46|      2|{
   47|      2|    if (initialized) {
  ------------------
  |  Branch (47:9): [True: 0, False: 2]
  ------------------
   48|      0|        return buildinfo;
   49|      0|    }
   50|      2|    initialized = 1;
   51|      2|    const char *revision = _Py_gitversion();
   52|      2|    const char *sep = *revision ? ":" : "";
  ------------------
  |  Branch (52:23): [True: 2, False: 0]
  ------------------
   53|      2|    const char *gitid = _Py_gitidentifier();
   54|      2|    if (!(*gitid)) {
  ------------------
  |  Branch (54:9): [True: 0, False: 2]
  ------------------
   55|      0|        gitid = "main";
   56|      0|    }
   57|      2|    PyOS_snprintf(buildinfo, sizeof(buildinfo),
   58|      2|                  "%s%s%s, %.20s, %.9s", gitid, sep, revision,
   59|      2|                  DATE, TIME);
  ------------------
  |  |   14|       |#define DATE __DATE__
  ------------------
                                DATE, TIME);
  ------------------
  |  |   22|       |#define TIME __TIME__
  ------------------
   60|      2|    return buildinfo;
   61|      2|}
_Py_gitversion:
   65|      4|{
   66|      4|    return GITVERSION;
   67|      4|}
_Py_gitidentifier:
   71|      4|{
   72|      4|    const char *gittag, *gitid;
   73|      4|    gittag = GITTAG;
   74|      4|    if ((*gittag) && strcmp(gittag, "undefined") != 0)
  ------------------
  |  Branch (74:9): [True: 4, False: 0]
  |  Branch (74:22): [True: 4, False: 0]
  ------------------
   75|      4|        gitid = gittag;
   76|      0|    else
   77|      0|        gitid = GITBRANCH;
   78|      4|    return gitid;
   79|      4|}

_Py_Get_Getpath_CodeObject:
  836|      2|{
  837|      2|    return PyMarshal_ReadObjectFromString(
  838|      2|        (const char*)_Py_M__getpath, sizeof(_Py_M__getpath));
  839|      2|}
_PyConfig_InitPathConfig:
  859|      4|{
  860|      4|    PyStatus status = _PyPathConfig_ReadGlobal(config);
  861|       |
  862|      4|    if (_PyStatus_EXCEPTION(status) || !compute_path_config) {
  ------------------
  |  |   43|      8|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (862:40): [True: 2, False: 2]
  ------------------
  863|      2|        return status;
  864|      2|    }
  865|       |
  866|      2|    if (!_PyThreadState_GET()) {
  ------------------
  |  Branch (866:9): [True: 0, False: 2]
  ------------------
  867|      0|        return PyStatus_Error("cannot calculate path configuration without GIL");
  868|      0|    }
  869|       |
  870|      2|    PyObject *configDict = _PyConfig_AsDict(config);
  871|      2|    if (!configDict) {
  ------------------
  |  Branch (871:9): [True: 0, False: 2]
  ------------------
  872|      0|        PyErr_Clear();
  873|      0|        return PyStatus_NoMemory();
  874|      0|    }
  875|       |
  876|      2|    PyObject *dict = PyDict_New();
  877|      2|    if (!dict) {
  ------------------
  |  Branch (877:9): [True: 0, False: 2]
  ------------------
  878|      0|        PyErr_Clear();
  879|      0|        Py_DECREF(configDict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|      0|        return PyStatus_NoMemory();
  881|      0|    }
  882|       |
  883|      2|    if (PyDict_SetItemString(dict, "config", configDict) < 0) {
  ------------------
  |  Branch (883:9): [True: 0, False: 2]
  ------------------
  884|      0|        PyErr_Clear();
  885|      0|        Py_DECREF(configDict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  886|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|      0|        return PyStatus_NoMemory();
  888|      0|    }
  889|       |    /* reference now held by dict */
  890|      2|    Py_DECREF(configDict);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|       |
  892|      2|    PyObject *co = _Py_Get_Getpath_CodeObject();
  893|      2|    if (!co || !PyCode_Check(co)) {
  ------------------
  |  |  168|      2|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (893:9): [True: 0, False: 2]
  |  Branch (893:16): [True: 0, False: 2]
  ------------------
  894|      0|        PyErr_Clear();
  895|      0|        Py_XDECREF(co);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  896|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|      0|        return PyStatus_Error("error reading frozen getpath.py");
  898|      0|    }
  899|       |
  900|       |#ifdef MS_WINDOWS
  901|       |    PyObject *winreg = PyImport_ImportModule("winreg");
  902|       |    if (!winreg || PyDict_SetItemString(dict, "winreg", winreg) < 0) {
  903|       |        PyErr_Clear();
  904|       |        Py_XDECREF(winreg);
  905|       |        if (PyDict_SetItemString(dict, "winreg", Py_None) < 0) {
  906|       |            PyErr_Clear();
  907|       |            Py_DECREF(co);
  908|       |            Py_DECREF(dict);
  909|       |            return PyStatus_Error("error importing winreg module");
  910|       |        }
  911|       |    } else {
  912|       |        Py_DECREF(winreg);
  913|       |    }
  914|       |#endif
  915|       |
  916|      2|    if (
  917|       |#ifdef MS_WINDOWS
  918|       |        !decode_to_dict(dict, "os_name", "nt") ||
  919|       |#elif defined(__APPLE__)
  920|       |        !decode_to_dict(dict, "os_name", "darwin") ||
  921|       |#else
  922|      2|        !decode_to_dict(dict, "os_name", "posix") ||
  ------------------
  |  Branch (922:9): [True: 0, False: 2]
  ------------------
  923|      2|#endif
  924|       |#ifdef WITH_NEXT_FRAMEWORK
  925|       |        !int_to_dict(dict, "WITH_NEXT_FRAMEWORK", 1) ||
  926|       |#else
  927|      2|        !int_to_dict(dict, "WITH_NEXT_FRAMEWORK", 0) ||
  ------------------
  |  Branch (927:9): [True: 0, False: 2]
  ------------------
  928|      2|#endif
  929|      2|        !decode_to_dict(dict, "PREFIX", PREFIX) ||
  ------------------
  |  Branch (929:9): [True: 0, False: 2]
  ------------------
  930|      2|        !decode_to_dict(dict, "EXEC_PREFIX", EXEC_PREFIX) ||
  ------------------
  |  Branch (930:9): [True: 0, False: 2]
  ------------------
  931|      2|        !decode_to_dict(dict, "PYTHONPATH", PYTHONPATH) ||
  ------------------
  |  Branch (931:9): [True: 0, False: 2]
  ------------------
  932|      2|        !decode_to_dict(dict, "VPATH", VPATH) ||
  ------------------
  |  Branch (932:9): [True: 0, False: 2]
  ------------------
  933|      2|        !decode_to_dict(dict, "PLATLIBDIR", PLATLIBDIR) ||
  ------------------
  |  Branch (933:9): [True: 0, False: 2]
  ------------------
  934|      2|        !decode_to_dict(dict, "PYDEBUGEXT", PYDEBUGEXT) ||
  ------------------
  |  |   41|      2|#define PYDEBUGEXT NULL
  ------------------
  |  Branch (934:9): [True: 0, False: 2]
  ------------------
  935|      2|        !int_to_dict(dict, "VERSION_MAJOR", PY_MAJOR_VERSION) ||
  ------------------
  |  |   23|      2|#define PY_MAJOR_VERSION        3
  ------------------
  |  Branch (935:9): [True: 0, False: 2]
  ------------------
  936|      2|        !int_to_dict(dict, "VERSION_MINOR", PY_MINOR_VERSION) ||
  ------------------
  |  |   24|      2|#define PY_MINOR_VERSION        16
  ------------------
  |  Branch (936:9): [True: 0, False: 2]
  ------------------
  937|      2|        !decode_to_dict(dict, "PYWINVER", PYWINVER) ||
  ------------------
  |  |   48|      2|#define PYWINVER NULL
  ------------------
  |  Branch (937:9): [True: 0, False: 2]
  ------------------
  938|      2|        !wchar_to_dict(dict, "EXE_SUFFIX", EXE_SUFFIX) ||
  ------------------
  |  |   56|      2|#define EXE_SUFFIX NULL
  ------------------
  |  Branch (938:9): [True: 0, False: 2]
  ------------------
  939|      2|        !env_to_dict(dict, "ENV_PATH", 0) ||
  ------------------
  |  Branch (939:9): [True: 0, False: 2]
  ------------------
  940|      2|        !env_to_dict(dict, "ENV_PYTHONHOME", 0) ||
  ------------------
  |  Branch (940:9): [True: 0, False: 2]
  ------------------
  941|      2|        !env_to_dict(dict, "ENV_PYTHONEXECUTABLE", 0) ||
  ------------------
  |  Branch (941:9): [True: 0, False: 2]
  ------------------
  942|      2|        !env_to_dict(dict, "ENV___PYVENV_LAUNCHER__", 1) ||
  ------------------
  |  Branch (942:9): [True: 0, False: 2]
  ------------------
  943|      2|        !progname_to_dict(dict, "real_executable") ||
  ------------------
  |  Branch (943:9): [True: 0, False: 2]
  ------------------
  944|      2|        !library_to_dict(dict, "library") ||
  ------------------
  |  Branch (944:9): [True: 0, False: 2]
  ------------------
  945|      2|        !wchar_to_dict(dict, "executable_dir", NULL) ||
  ------------------
  |  Branch (945:9): [True: 0, False: 2]
  ------------------
  946|      2|        !wchar_to_dict(dict, "py_setpath", _PyPathConfig_GetGlobalModuleSearchPath()) ||
  ------------------
  |  Branch (946:9): [True: 0, False: 2]
  ------------------
  947|      2|        !funcs_to_dict(dict, config->pathconfig_warnings) ||
  ------------------
  |  Branch (947:9): [True: 0, False: 2]
  ------------------
  948|       |#ifdef Py_GIL_DISABLED
  949|       |        !decode_to_dict(dict, "ABI_THREAD", "t") ||
  950|       |#else
  951|      2|        !decode_to_dict(dict, "ABI_THREAD", "") ||
  ------------------
  |  Branch (951:9): [True: 0, False: 2]
  ------------------
  952|      2|#endif
  953|      2|#ifndef MS_WINDOWS
  954|      2|        PyDict_SetItemString(dict, "winreg", Py_None) < 0 ||
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (954:9): [True: 0, False: 2]
  ------------------
  955|      2|#endif
  956|      2|        PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins()) < 0
  ------------------
  |  Branch (956:9): [True: 0, False: 2]
  ------------------
  957|      2|    ) {
  958|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  960|      0|        PyErr_FormatUnraisable("Exception ignored while preparing getpath");
  961|      0|        return PyStatus_Error("error evaluating initial values");
  962|      0|    }
  963|       |
  964|      2|    PyObject *r = PyEval_EvalCode(co, dict, dict);
  965|      2|    Py_DECREF(co);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  966|       |
  967|      2|    if (!r) {
  ------------------
  |  Branch (967:9): [True: 0, False: 2]
  ------------------
  968|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  969|      0|        PyErr_FormatUnraisable("Exception ignored while running getpath");
  970|      0|        return PyStatus_Error("error evaluating path");
  971|      0|    }
  972|      2|    Py_DECREF(r);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|       |
  974|      2|    if (_PyConfig_FromDict(config, configDict) < 0) {
  ------------------
  |  Branch (974:9): [True: 0, False: 2]
  ------------------
  975|      0|        PyErr_FormatUnraisable("Exception ignored while reading getpath results");
  976|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  977|      0|        return PyStatus_Error("error getting getpath results");
  978|      0|    }
  979|       |
  980|      2|    Py_DECREF(dict);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|       |
  982|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  983|      2|}
getpath.c:decode_to_dict:
  661|     18|{
  662|     18|    PyObject *u = NULL;
  663|     18|    int r;
  664|     18|    if (s && s[0]) {
  ------------------
  |  Branch (664:9): [True: 14, False: 4]
  |  Branch (664:14): [True: 8, False: 6]
  ------------------
  665|      8|        size_t len;
  666|      8|        const wchar_t *w = Py_DecodeLocale(s, &len);
  667|      8|        if (w) {
  ------------------
  |  Branch (667:13): [True: 8, False: 0]
  ------------------
  668|      8|            u = PyUnicode_FromWideChar(w, len);
  669|      8|            PyMem_RawFree((void *)w);
  670|      8|        }
  671|      8|        if (!u) {
  ------------------
  |  Branch (671:13): [True: 0, False: 8]
  ------------------
  672|      0|            return 0;
  673|      0|        }
  674|     10|    } else {
  675|     10|        u = Py_NewRef(Py_None);
  ------------------
  |  |  550|     10|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  676|     10|    }
  677|     18|    r = PyDict_SetItemString(dict, key, u) == 0;
  678|     18|    Py_DECREF(u);
  ------------------
  |  |  430|     18|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  679|     18|    return r;
  680|     18|}
getpath.c:int_to_dict:
  740|      6|{
  741|      6|    PyObject *o;
  742|      6|    int r;
  743|      6|    o = PyLong_FromLong(v);
  744|      6|    if (!o) {
  ------------------
  |  Branch (744:9): [True: 0, False: 6]
  ------------------
  745|      0|        return 0;
  746|      0|    }
  747|      6|    r = PyDict_SetItemString(dict, key, o) == 0;
  748|      6|    Py_DECREF(o);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      6|    return r;
  750|      6|}
getpath.c:wchar_to_dict:
  641|      6|{
  642|      6|    PyObject *u;
  643|      6|    int r;
  644|      6|    if (s && s[0]) {
  ------------------
  |  Branch (644:9): [True: 0, False: 6]
  |  Branch (644:14): [True: 0, False: 0]
  ------------------
  645|      0|        u = PyUnicode_FromWideChar(s, -1);
  646|      0|        if (!u) {
  ------------------
  |  Branch (646:13): [True: 0, False: 0]
  ------------------
  647|      0|            return 0;
  648|      0|        }
  649|      6|    } else {
  650|      6|        u = Py_NewRef(Py_None);
  ------------------
  |  |  550|      6|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  651|      6|    }
  652|      6|    r = PyDict_SetItemString(dict, key, u) == 0;
  653|      6|    Py_DECREF(u);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  654|      6|    return r;
  655|      6|}
getpath.c:env_to_dict:
  685|      8|{
  686|      8|    PyObject *u = NULL;
  687|      8|    int r = 0;
  688|      8|    assert(strncmp(key, "ENV_", 4) == 0);
  ------------------
  |  Branch (688:5): [True: 8, False: 0]
  ------------------
  689|      8|    assert(strlen(key) < 64);
  ------------------
  |  Branch (689:5): [True: 8, False: 0]
  ------------------
  690|       |#ifdef MS_WINDOWS
  691|       |    wchar_t wkey[64];
  692|       |    // Quick convert to wchar_t, since we know key is ASCII
  693|       |    wchar_t *wp = wkey;
  694|       |    for (const char *p = &key[4]; *p; ++p) {
  695|       |        assert(!(*p & 0x80));
  696|       |        *wp++ = *p;
  697|       |    }
  698|       |    *wp = L'\0';
  699|       |    const wchar_t *v = _wgetenv(wkey);
  700|       |    if (v) {
  701|       |        u = PyUnicode_FromWideChar(v, -1);
  702|       |        if (!u) {
  703|       |            PyErr_Clear();
  704|       |        }
  705|       |    }
  706|       |#else
  707|      8|    const char *v = getenv(&key[4]);
  708|      8|    if (v) {
  ------------------
  |  Branch (708:9): [True: 2, False: 6]
  ------------------
  709|      2|        size_t len;
  710|      2|        const wchar_t *w = Py_DecodeLocale(v, &len);
  711|      2|        if (w) {
  ------------------
  |  Branch (711:13): [True: 2, False: 0]
  ------------------
  712|      2|            u = PyUnicode_FromWideChar(w, len);
  713|      2|            if (!u) {
  ------------------
  |  Branch (713:17): [True: 0, False: 2]
  ------------------
  714|      0|                PyErr_Clear();
  715|      0|            }
  716|      2|            PyMem_RawFree((void *)w);
  717|      2|        }
  718|      2|    }
  719|      8|#endif
  720|      8|    if (u) {
  ------------------
  |  Branch (720:9): [True: 2, False: 6]
  ------------------
  721|      2|        r = PyDict_SetItemString(dict, key, u) == 0;
  722|      2|        Py_DECREF(u);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  723|      6|    } else {
  724|      6|        r = PyDict_SetItemString(dict, key, Py_None) == 0;
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  725|      6|    }
  726|      8|    if (r && and_clear) {
  ------------------
  |  Branch (726:9): [True: 8, False: 0]
  |  Branch (726:14): [True: 2, False: 6]
  ------------------
  727|       |#ifdef MS_WINDOWS
  728|       |        _wputenv_s(wkey, L"");
  729|       |#else
  730|      2|        unsetenv(&key[4]);
  731|      2|#endif
  732|      2|    }
  733|      8|    return r;
  734|      8|}
getpath.c:progname_to_dict:
  777|      2|{
  778|       |#ifdef MS_WINDOWS
  779|       |    return winmodule_to_dict(dict, key, NULL);
  780|       |#elif defined(__APPLE__)
  781|       |    char *path;
  782|       |    uint32_t pathLen = 256;
  783|       |    while (pathLen) {
  784|       |        path = PyMem_RawMalloc((pathLen + 1) * sizeof(char));
  785|       |        if (!path) {
  786|       |            return 0;
  787|       |        }
  788|       |        if (_NSGetExecutablePath(path, &pathLen) != 0) {
  789|       |            PyMem_RawFree(path);
  790|       |            continue;
  791|       |        }
  792|       |        // Only keep if the path is absolute
  793|       |        if (path[0] == SEP) {
  794|       |            int r = decode_to_dict(dict, key, path);
  795|       |            PyMem_RawFree(path);
  796|       |            return r;
  797|       |        }
  798|       |        // Fall back and store None
  799|       |        PyMem_RawFree(path);
  800|       |        break;
  801|       |    }
  802|       |#endif
  803|      2|    return PyDict_SetItemString(dict, key, Py_None) == 0;
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  804|      2|}
getpath.c:library_to_dict:
  810|      2|{
  811|       |/* macOS framework builds do not link against a libpython dynamic library, but
  812|       |   instead link against a macOS Framework. */
  813|       |#if defined(Py_ENABLE_SHARED) || defined(WITH_NEXT_FRAMEWORK)
  814|       |
  815|       |#ifdef MS_WINDOWS
  816|       |    extern HMODULE PyWin_DLLhModule;
  817|       |    if (PyWin_DLLhModule) {
  818|       |        return winmodule_to_dict(dict, key, PyWin_DLLhModule);
  819|       |    }
  820|       |#endif
  821|       |
  822|       |#if HAVE_DLADDR
  823|       |    Dl_info libpython_info;
  824|       |    if (dladdr(&Py_Initialize, &libpython_info) && libpython_info.dli_fname) {
  825|       |        return decode_to_dict(dict, key, libpython_info.dli_fname);
  826|       |    }
  827|       |#endif
  828|       |#endif
  829|       |
  830|      2|    return PyDict_SetItemString(dict, key, Py_None) == 0;
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  831|      2|}
getpath.c:funcs_to_dict:
  612|      2|{
  613|     24|    for (PyMethodDef *m = getpath_methods; m->ml_name; ++m) {
  ------------------
  |  Branch (613:44): [True: 22, False: 2]
  ------------------
  614|     22|        PyObject *f = PyCFunction_NewEx(m, NULL, NULL);
  ------------------
  |  |   87|     22|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
  615|     22|        if (!f) {
  ------------------
  |  Branch (615:13): [True: 0, False: 22]
  ------------------
  616|      0|            return 0;
  617|      0|        }
  618|     22|        if (PyDict_SetItemString(dict, m->ml_name, f) < 0) {
  ------------------
  |  Branch (618:13): [True: 0, False: 22]
  ------------------
  619|      0|            Py_DECREF(f);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  620|      0|            return 0;
  621|      0|        }
  622|     22|        Py_DECREF(f);
  ------------------
  |  |  430|     22|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|     22|    }
  624|      2|    PyMethodDef *m2 = warnings ? &getpath_warn_method : &getpath_nowarn_method;
  ------------------
  |  Branch (624:23): [True: 2, False: 0]
  ------------------
  625|      2|    PyObject *f = PyCFunction_NewEx(m2, NULL, NULL);
  ------------------
  |  |   87|      2|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
  626|      2|    if (!f) {
  ------------------
  |  Branch (626:9): [True: 0, False: 2]
  ------------------
  627|      0|        return 0;
  628|      0|    }
  629|      2|    if (PyDict_SetItemString(dict, m2->ml_name, f) < 0) {
  ------------------
  |  Branch (629:9): [True: 0, False: 2]
  ------------------
  630|      0|        Py_DECREF(f);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|      0|        return 0;
  632|      0|    }
  633|      2|    Py_DECREF(f);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|      2|    return 1;
  635|      2|}
getpath.c:getpath_abspath:
   65|      2|{
   66|      2|    PyObject *r = NULL;
   67|      2|    PyObject *pathobj;
   68|      2|    wchar_t *path;
   69|      2|    if (!PyArg_ParseTuple(args, "U", &pathobj)) {
  ------------------
  |  Branch (69:9): [True: 0, False: 2]
  ------------------
   70|      0|        return NULL;
   71|      0|    }
   72|      2|    Py_ssize_t len;
   73|      2|    path = PyUnicode_AsWideCharString(pathobj, &len);
   74|      2|    if (path) {
  ------------------
  |  Branch (74:9): [True: 2, False: 0]
  ------------------
   75|      2|        wchar_t *abs;
   76|      2|        if (_Py_abspath((const wchar_t *)_Py_normpath(path, -1), &abs) == 0 && abs) {
  ------------------
  |  Branch (76:13): [True: 2, False: 0]
  |  Branch (76:80): [True: 2, False: 0]
  ------------------
   77|      2|            r = PyUnicode_FromWideChar(abs, -1);
   78|      2|            PyMem_RawFree((void *)abs);
   79|      2|        } else {
   80|      0|            PyErr_SetString(PyExc_OSError, "failed to make path absolute");
   81|      0|        }
   82|      2|        PyMem_Free((void *)path);
   83|      2|    }
   84|      2|    return r;
   85|      2|}
getpath.c:getpath_dirname:
  106|     12|{
  107|     12|    PyObject *path;
  108|     12|    if (!PyArg_ParseTuple(args, "U", &path)) {
  ------------------
  |  Branch (108:9): [True: 0, False: 12]
  ------------------
  109|      0|        return NULL;
  110|      0|    }
  111|     12|    Py_ssize_t end = PyUnicode_GET_LENGTH(path);
  ------------------
  |  |  299|     12|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|     12|    Py_ssize_t pos = PyUnicode_FindChar(path, SEP, 0, end, -1);
  ------------------
  |  |   29|     12|#  define SEP L'/'
  ------------------
  113|     12|    if (pos < 0) {
  ------------------
  |  Branch (113:9): [True: 0, False: 12]
  ------------------
  114|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  115|      0|    }
  116|     12|    return PyUnicode_Substring(path, 0, pos);
  117|     12|}
getpath.c:getpath_isdir:
  175|      8|{
  176|      8|    PyObject *r = NULL;
  177|      8|    PyObject *pathobj;
  178|      8|    const wchar_t *path;
  179|      8|    if (!PyArg_ParseTuple(args, "U", &pathobj)) {
  ------------------
  |  Branch (179:9): [True: 0, False: 8]
  ------------------
  180|      0|        return NULL;
  181|      0|    }
  182|      8|    path = PyUnicode_AsWideCharString(pathobj, NULL);
  183|      8|    if (path) {
  ------------------
  |  Branch (183:9): [True: 8, False: 0]
  ------------------
  184|       |#ifdef MS_WINDOWS
  185|       |        DWORD attr = GetFileAttributesW(path);
  186|       |        r = (attr != INVALID_FILE_ATTRIBUTES) &&
  187|       |            (attr & FILE_ATTRIBUTE_DIRECTORY) ? Py_True : Py_False;
  188|       |#else
  189|      8|        struct stat st;
  190|      8|        r = (_Py_wstat(path, &st) == 0) && S_ISDIR(st.st_mode) ? Py_True : Py_False;
  ------------------
  |  |   26|      8|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      r = (_Py_wstat(path, &st) == 0) && S_ISDIR(st.st_mode) ? Py_True : Py_False;
  ------------------
  |  |   25|      8|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (190:13): [True: 8, False: 0]
  |  Branch (190:44): [True: 8, False: 0]
  ------------------
  191|      8|#endif
  192|      8|        PyMem_Free((void *)path);
  193|      8|    }
  194|      8|    return Py_XNewRef(r);
  ------------------
  |  |  551|      8|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|      8|}
getpath.c:getpath_isfile:
  200|     10|{
  201|     10|    PyObject *pathobj;
  202|     10|    if (!PyArg_ParseTuple(args, "U", &pathobj)) {
  ------------------
  |  Branch (202:9): [True: 0, False: 10]
  ------------------
  203|      0|        return NULL;
  204|      0|    }
  205|       |
  206|     10|    int isfile;
  207|       |#ifdef MS_WINDOWS
  208|       |    wchar_t *path = PyUnicode_AsWideCharString(pathobj, NULL);
  209|       |    if (path == NULL) {
  210|       |        return NULL;
  211|       |    }
  212|       |
  213|       |    DWORD attr = GetFileAttributesW(path);
  214|       |    PyMem_Free(path);
  215|       |    isfile = ((attr != INVALID_FILE_ATTRIBUTES)
  216|       |               && !(attr & FILE_ATTRIBUTE_DIRECTORY));
  217|       |#else
  218|     10|    struct stat st;
  219|     10|    int res = _Py_stat(pathobj, &st);
  220|     10|    if (res == -2) {
  ------------------
  |  Branch (220:9): [True: 0, False: 10]
  ------------------
  221|      0|        return NULL;
  222|      0|    }
  223|     10|    isfile = ((res == 0) && S_ISREG(st.st_mode));
  ------------------
  |  Branch (223:15): [True: 2, False: 8]
  |  Branch (223:29): [True: 2, False: 0]
  ------------------
  224|     10|#endif
  225|     10|    return PyBool_FromLong(isfile);
  226|     10|}
getpath.c:getpath_joinpath:
  267|     24|{
  268|     24|    if (!PyTuple_Check(args)) {
  ------------------
  |  |   27|     24|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     24|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (268:9): [True: 0, False: 24]
  ------------------
  269|      0|        PyErr_SetString(PyExc_TypeError, "requires tuple of arguments");
  270|      0|        return NULL;
  271|      0|    }
  272|     24|    Py_ssize_t n = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     24|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|     24|    if (n == 0) {
  ------------------
  |  Branch (273:9): [True: 0, False: 24]
  ------------------
  274|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  275|      0|    }
  276|       |    /* Convert all parts to wchar and accumulate max final length */
  277|     24|    wchar_t **parts = (wchar_t **)PyMem_Malloc(n * sizeof(wchar_t *));
  278|     24|    if (parts == NULL) {
  ------------------
  |  Branch (278:9): [True: 0, False: 24]
  ------------------
  279|      0|        PyErr_NoMemory();
  280|      0|        return NULL;
  281|      0|    }
  282|     24|    memset(parts, 0, n * sizeof(wchar_t *));
  283|     24|    Py_ssize_t cchFinal = 0;
  284|     24|    Py_ssize_t first = 0;
  285|       |
  286|     72|    for (Py_ssize_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (286:28): [True: 48, False: 24]
  ------------------
  287|     48|        PyObject *s = PyTuple_GET_ITEM(args, i);
  ------------------
  |  |   29|     48|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     48|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (287:23): [True: 48, False: 0]
  ------------------
  288|      0|        Py_ssize_t cch;
  289|     48|        if (s == Py_None) {
  ------------------
  |  |  616|     48|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (289:13): [True: 0, False: 48]
  ------------------
  290|      0|            cch = 0;
  291|     48|        } else if (PyUnicode_Check(s)) {
  ------------------
  |  |  103|     48|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     48|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 48, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|     48|            parts[i] = PyUnicode_AsWideCharString(s, &cch);
  293|     48|            if (!parts[i]) {
  ------------------
  |  Branch (293:17): [True: 0, False: 48]
  ------------------
  294|      0|                cchFinal = -1;
  295|      0|                break;
  296|      0|            }
  297|     48|            if (_Py_isabs(parts[i])) {
  ------------------
  |  Branch (297:17): [True: 24, False: 24]
  ------------------
  298|     24|                first = i;
  299|     24|            }
  300|     48|        } else {
  301|      0|            PyErr_SetString(PyExc_TypeError, "all arguments to joinpath() must be str or None");
  302|      0|            cchFinal = -1;
  303|      0|            break;
  304|      0|        }
  305|     48|        cchFinal += cch + 1;
  306|     48|    }
  307|       |
  308|     24|    wchar_t *final = cchFinal > 0 ? (wchar_t *)PyMem_Malloc(cchFinal * sizeof(wchar_t)) : NULL;
  ------------------
  |  Branch (308:22): [True: 24, False: 0]
  ------------------
  309|     24|    if (!final) {
  ------------------
  |  Branch (309:9): [True: 0, False: 24]
  ------------------
  310|      0|        for (Py_ssize_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (310:32): [True: 0, False: 0]
  ------------------
  311|      0|            PyMem_Free(parts[i]);
  312|      0|        }
  313|      0|        PyMem_Free(parts);
  314|      0|        if (cchFinal) {
  ------------------
  |  Branch (314:13): [True: 0, False: 0]
  ------------------
  315|      0|            PyErr_NoMemory();
  316|      0|            return NULL;
  317|      0|        }
  318|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  319|      0|    }
  320|       |
  321|     24|    final[0] = '\0';
  322|       |    /* Now join all the paths. The final result should be shorter than the buffer */
  323|     72|    for (Py_ssize_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (323:28): [True: 48, False: 24]
  ------------------
  324|     48|        if (!parts[i]) {
  ------------------
  |  Branch (324:13): [True: 0, False: 48]
  ------------------
  325|      0|            continue;
  326|      0|        }
  327|     48|        if (i >= first && final) {
  ------------------
  |  Branch (327:13): [True: 48, False: 0]
  |  Branch (327:27): [True: 48, False: 0]
  ------------------
  328|     48|            if (!final[0]) {
  ------------------
  |  Branch (328:17): [True: 24, False: 24]
  ------------------
  329|       |                /* final is definitely long enough to fit any individual part */
  330|     24|                wcscpy(final, parts[i]);
  331|     24|            } else if (_Py_add_relfile(final, parts[i], cchFinal) < 0) {
  ------------------
  |  Branch (331:24): [True: 0, False: 24]
  ------------------
  332|       |                /* if we fail, keep iterating to free memory, but stop adding parts */
  333|      0|                PyMem_Free(final);
  334|      0|                final = NULL;
  335|      0|            }
  336|     48|        }
  337|     48|        PyMem_Free(parts[i]);
  338|     48|    }
  339|     24|    PyMem_Free(parts);
  340|     24|    if (!final) {
  ------------------
  |  Branch (340:9): [True: 0, False: 24]
  ------------------
  341|      0|        PyErr_SetString(PyExc_SystemError, "failed to join paths");
  342|      0|        return NULL;
  343|      0|    }
  344|     24|    PyObject *r = PyUnicode_FromWideChar(_Py_normpath(final, -1), -1);
  345|     24|    PyMem_Free(final);
  346|     24|    return r;
  347|     24|}
getpath.c:getpath_readlines:
  352|     10|{
  353|     10|    PyObject *pathobj;
  354|     10|    if (!PyArg_ParseTuple(args, "U", &pathobj)) {
  ------------------
  |  Branch (354:9): [True: 0, False: 10]
  ------------------
  355|      0|        return NULL;
  356|      0|    }
  357|     10|    FILE *fp = Py_fopen(pathobj, "rb");
  358|     10|    if (!fp) {
  ------------------
  |  Branch (358:9): [True: 10, False: 0]
  ------------------
  359|     10|        return NULL;
  360|     10|    }
  361|       |
  362|      0|    PyObject *r = PyList_New(0);
  363|      0|    if (!r) {
  ------------------
  |  Branch (363:9): [True: 0, False: 0]
  ------------------
  364|      0|        fclose(fp);
  365|      0|        return NULL;
  366|      0|    }
  367|      0|    const size_t MAX_FILE = 32 * 1024;
  368|      0|    char *buffer = (char *)PyMem_Malloc(MAX_FILE);
  369|      0|    if (!buffer) {
  ------------------
  |  Branch (369:9): [True: 0, False: 0]
  ------------------
  370|      0|        Py_DECREF(r);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|      0|        fclose(fp);
  372|      0|        PyErr_NoMemory();
  373|      0|        return NULL;
  374|      0|    }
  375|       |
  376|      0|    size_t cb = fread(buffer, 1, MAX_FILE, fp);
  377|      0|    fclose(fp);
  378|      0|    if (!cb) {
  ------------------
  |  Branch (378:9): [True: 0, False: 0]
  ------------------
  379|      0|        return r;
  380|      0|    }
  381|      0|    if (cb >= MAX_FILE) {
  ------------------
  |  Branch (381:9): [True: 0, False: 0]
  ------------------
  382|      0|        Py_DECREF(r);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|      0|        PyErr_SetString(PyExc_MemoryError,
  384|      0|            "cannot read file larger than 32KB during initialization");
  385|      0|        return NULL;
  386|      0|    }
  387|      0|    buffer[cb] = '\0';
  388|       |
  389|      0|    size_t len;
  390|      0|    wchar_t *wbuffer = _Py_DecodeUTF8_surrogateescape(buffer, cb, &len);
  391|      0|    PyMem_Free((void *)buffer);
  392|      0|    if (!wbuffer) {
  ------------------
  |  Branch (392:9): [True: 0, False: 0]
  ------------------
  393|      0|        Py_DECREF(r);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  394|      0|        PyErr_NoMemory();
  395|      0|        return NULL;
  396|      0|    }
  397|       |
  398|      0|    wchar_t *p1 = wbuffer;
  399|      0|    wchar_t *p2 = p1;
  400|      0|    while ((p2 = wcschr(p1, L'\n')) != NULL) {
  ------------------
  |  Branch (400:12): [True: 0, False: 0]
  ------------------
  401|      0|        Py_ssize_t cb = p2 - p1;
  402|      0|        while (cb >= 0 && (p1[cb] == L'\n' || p1[cb] == L'\r')) {
  ------------------
  |  Branch (402:16): [True: 0, False: 0]
  |  Branch (402:28): [True: 0, False: 0]
  |  Branch (402:47): [True: 0, False: 0]
  ------------------
  403|      0|            --cb;
  404|      0|        }
  405|      0|        PyObject *u = PyUnicode_FromWideChar(p1, cb >= 0 ? cb + 1 : 0);
  ------------------
  |  Branch (405:50): [True: 0, False: 0]
  ------------------
  406|      0|        if (!u || PyList_Append(r, u) < 0) {
  ------------------
  |  Branch (406:13): [True: 0, False: 0]
  |  Branch (406:19): [True: 0, False: 0]
  ------------------
  407|      0|            Py_XDECREF(u);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|      0|            Py_CLEAR(r);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  409|      0|            break;
  410|      0|        }
  411|      0|        Py_DECREF(u);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      0|        p1 = p2 + 1;
  413|      0|    }
  414|      0|    if (r && p1 && *p1) {
  ------------------
  |  Branch (414:9): [True: 0, False: 0]
  |  Branch (414:14): [True: 0, False: 0]
  |  Branch (414:20): [True: 0, False: 0]
  ------------------
  415|      0|        PyObject *u = PyUnicode_FromWideChar(p1, -1);
  416|      0|        if (!u || PyList_Append(r, u) < 0) {
  ------------------
  |  Branch (416:13): [True: 0, False: 0]
  |  Branch (416:19): [True: 0, False: 0]
  ------------------
  417|      0|            Py_CLEAR(r);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  418|      0|        }
  419|      0|        Py_XDECREF(u);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|      0|    }
  421|      0|    PyMem_RawFree(wbuffer);
  422|      0|    return r;
  423|      0|}
getpath.c:getpath_realpath:
  428|      2|{
  429|      2|    PyObject *pathobj;
  430|      2|    if (!PyArg_ParseTuple(args, "U", &pathobj)) {
  ------------------
  |  Branch (430:9): [True: 0, False: 2]
  ------------------
  431|      0|        return NULL;
  432|      0|    }
  433|      2|#if defined(HAVE_READLINK)
  434|       |    /* This readlink calculation only resolves a symlinked file, and
  435|       |       does not resolve any path segments. This is consistent with
  436|       |       prior releases, however, the realpath implementation below is
  437|       |       potentially correct in more cases. */
  438|      2|    PyObject *r = NULL;
  439|      2|    int nlink = 0;
  440|      2|    wchar_t *path = PyUnicode_AsWideCharString(pathobj, NULL);
  441|      2|    if (!path) {
  ------------------
  |  Branch (441:9): [True: 0, False: 2]
  ------------------
  442|      0|        goto done;
  443|      0|    }
  444|      2|    wchar_t *path2 = _PyMem_RawWcsdup(path);
  445|      2|    PyMem_Free((void *)path);
  446|      2|    path = path2;
  447|      2|    while (path) {
  ------------------
  |  Branch (447:12): [True: 2, False: 0]
  ------------------
  448|      2|        wchar_t resolved[MAXPATHLEN + 1];
  449|      2|        int linklen = _Py_wreadlink(path, resolved, Py_ARRAY_LENGTH(resolved));
  ------------------
  |  |  221|      2|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  450|      2|        if (linklen == -1) {
  ------------------
  |  Branch (450:13): [True: 2, False: 0]
  ------------------
  451|      2|            r = PyUnicode_FromWideChar(path, -1);
  452|      2|            break;
  453|      2|        }
  454|      0|        if (_Py_isabs(resolved)) {
  ------------------
  |  Branch (454:13): [True: 0, False: 0]
  ------------------
  455|      0|            PyMem_RawFree((void *)path);
  456|      0|            path = _PyMem_RawWcsdup(resolved);
  457|      0|        } else {
  458|      0|            wchar_t *s = wcsrchr(path, SEP);
  ------------------
  |  |   29|      0|#  define SEP L'/'
  ------------------
  459|      0|            if (s) {
  ------------------
  |  Branch (459:17): [True: 0, False: 0]
  ------------------
  460|      0|                *s = L'\0';
  461|      0|            }
  462|      0|            path2 = _Py_join_relfile(path, resolved);
  463|      0|            if (path2) {
  ------------------
  |  Branch (463:17): [True: 0, False: 0]
  ------------------
  464|      0|                path2 = _Py_normpath(path2, -1);
  465|      0|            }
  466|      0|            PyMem_RawFree((void *)path);
  467|      0|            path = path2;
  468|      0|        }
  469|      0|        nlink++;
  470|       |        /* 40 is the Linux kernel 4.2 limit */
  471|      0|        if (nlink >= 40) {
  ------------------
  |  Branch (471:13): [True: 0, False: 0]
  ------------------
  472|      0|            PyErr_SetString(PyExc_OSError, "maximum number of symbolic links reached");
  473|      0|            break;
  474|      0|        }
  475|      0|    }
  476|      2|    if (!path) {
  ------------------
  |  Branch (476:9): [True: 0, False: 2]
  ------------------
  477|      0|        PyErr_NoMemory();
  478|      0|    }
  479|      2|done:
  480|      2|    PyMem_RawFree((void *)path);
  481|      2|    return r;
  482|       |
  483|       |#elif defined(HAVE_REALPATH)
  484|       |    PyObject *r = NULL;
  485|       |    struct stat st;
  486|       |    const char *narrow = NULL;
  487|       |    wchar_t *path = PyUnicode_AsWideCharString(pathobj, NULL);
  488|       |    if (!path) {
  489|       |        goto done;
  490|       |    }
  491|       |    narrow = Py_EncodeLocale(path, NULL);
  492|       |    if (!narrow) {
  493|       |        PyErr_NoMemory();
  494|       |        goto done;
  495|       |    }
  496|       |    if (lstat(narrow, &st)) {
  497|       |        PyErr_SetFromErrno(PyExc_OSError);
  498|       |        goto done;
  499|       |    }
  500|       |    if (!S_ISLNK(st.st_mode)) {
  501|       |        r = Py_NewRef(pathobj);
  502|       |        goto done;
  503|       |    }
  504|       |    wchar_t resolved[MAXPATHLEN+1];
  505|       |    if (_Py_wrealpath(path, resolved, MAXPATHLEN) == NULL) {
  506|       |        PyErr_SetFromErrno(PyExc_OSError);
  507|       |    } else {
  508|       |        r = PyUnicode_FromWideChar(resolved, -1);
  509|       |    }
  510|       |done:
  511|       |    PyMem_Free((void *)path);
  512|       |    PyMem_Free((void *)narrow);
  513|       |    return r;
  514|       |#elif defined(MS_WINDOWS)
  515|       |    HANDLE hFile;
  516|       |    wchar_t resolved[MAXPATHLEN+1];
  517|       |    int len = 0, err;
  518|       |    Py_ssize_t pathlen;
  519|       |    PyObject *result;
  520|       |
  521|       |    wchar_t *path = PyUnicode_AsWideCharString(pathobj, &pathlen);
  522|       |    if (!path) {
  523|       |        return NULL;
  524|       |    }
  525|       |    if (wcslen(path) != pathlen) {
  526|       |        PyErr_SetString(PyExc_ValueError, "path contains embedded nulls");
  527|       |        return NULL;
  528|       |    }
  529|       |
  530|       |    Py_BEGIN_ALLOW_THREADS
  531|       |    hFile = CreateFileW(path, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
  532|       |    if (hFile != INVALID_HANDLE_VALUE) {
  533|       |        len = GetFinalPathNameByHandleW(hFile, resolved, MAXPATHLEN, VOLUME_NAME_DOS);
  534|       |        err = len ? 0 : GetLastError();
  535|       |        CloseHandle(hFile);
  536|       |    } else {
  537|       |        err = GetLastError();
  538|       |    }
  539|       |    Py_END_ALLOW_THREADS
  540|       |
  541|       |    if (err) {
  542|       |        PyErr_SetFromWindowsErr(err);
  543|       |        result = NULL;
  544|       |    } else if (len <= MAXPATHLEN) {
  545|       |        const wchar_t *p = resolved;
  546|       |        if (0 == wcsncmp(p, L"\\\\?\\", 4)) {
  547|       |            if (GetFileAttributesW(&p[4]) != INVALID_FILE_ATTRIBUTES) {
  548|       |                p += 4;
  549|       |                len -= 4;
  550|       |            }
  551|       |        }
  552|       |        if (CompareStringOrdinal(path, (int)pathlen, p, len, TRUE) == CSTR_EQUAL) {
  553|       |            result = Py_NewRef(pathobj);
  554|       |        } else {
  555|       |            result = PyUnicode_FromWideChar(p, len);
  556|       |        }
  557|       |    } else {
  558|       |        result = Py_NewRef(pathobj);
  559|       |    }
  560|       |    PyMem_Free(path);
  561|       |    return result;
  562|       |#endif
  563|       |
  564|      0|    return Py_NewRef(pathobj);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  565|      2|}

PyInit_itertools:
 4241|      1|{
 4242|      1|    return PyModuleDef_Init(&itertoolsmodule);
 4243|      1|}
itertoolsmodule.c:get_module_state:
   44|     19|{
   45|     19|    void *state = _PyModule_GetState(mod);
   46|     19|    assert(state != NULL);
  ------------------
  |  Branch (46:5): [True: 19, False: 0]
  ------------------
   47|     19|    return (itertools_state *)state;
   48|     19|}
itertoolsmodule.c:itertoolsmodule_exec:
 4184|      1|{
 4185|      1|    itertools_state *state = get_module_state(mod);
 4186|      1|    ADD_TYPE(mod, state->accumulate_type, &accumulate_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4187|      1|    ADD_TYPE(mod, state->batched_type, &batched_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4188|      1|    ADD_TYPE(mod, state->chain_type, &chain_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4189|      1|    ADD_TYPE(mod, state->combinations_type, &combinations_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4190|      1|    ADD_TYPE(mod, state->compress_type, &compress_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4191|      1|    ADD_TYPE(mod, state->count_type, &count_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4192|      1|    ADD_TYPE(mod, state->cwr_type, &cwr_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4193|      1|    ADD_TYPE(mod, state->cycle_type, &cycle_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4194|      1|    ADD_TYPE(mod, state->dropwhile_type, &dropwhile_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4195|      1|    ADD_TYPE(mod, state->filterfalse_type, &filterfalse_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4196|      1|    ADD_TYPE(mod, state->groupby_type, &groupby_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4197|      1|    ADD_TYPE(mod, state->_grouper_type, &_grouper_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4198|      1|    ADD_TYPE(mod, state->islice_type, &islice_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4199|      1|    ADD_TYPE(mod, state->pairwise_type, &pairwise_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4200|      1|    ADD_TYPE(mod, state->permutations_type, &permutations_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4201|      1|    ADD_TYPE(mod, state->product_type, &product_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4202|      1|    ADD_TYPE(mod, state->repeat_type, &repeat_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4203|      1|    ADD_TYPE(mod, state->starmap_type, &starmap_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4204|      1|    ADD_TYPE(mod, state->takewhile_type, &takewhile_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4205|      1|    ADD_TYPE(mod, state->tee_type, &tee_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4206|      1|    ADD_TYPE(mod, state->teedataobject_type, &teedataobject_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4207|      1|    ADD_TYPE(mod, state->ziplongest_type, &ziplongest_spec);
  ------------------
  |  | 4171|      1|#define ADD_TYPE(module, type, spec)                                     \
  |  | 4172|      1|do {                                                                     \
  |  | 4173|      1|    type = (PyTypeObject *)PyType_FromModuleAndSpec(module, spec, NULL); \
  |  | 4174|      1|    if (type == NULL) {                                                  \
  |  |  ------------------
  |  |  |  Branch (4174:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4175|      0|        return -1;                                                       \
  |  | 4176|      0|    }                                                                    \
  |  | 4177|      1|    if (PyModule_AddType(module, type) < 0) {                            \
  |  |  ------------------
  |  |  |  Branch (4177:9): [True: 0, False: 1]
  |  |  ------------------
  |  | 4178|      0|        return -1;                                                       \
  |  | 4179|      0|    }                                                                    \
  |  | 4180|      1|} while (0)
  |  |  ------------------
  |  |  |  Branch (4180:10): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4208|       |
 4209|      1|    Py_SET_TYPE(state->teedataobject_type, &PyType_Type);
  ------------------
  |  |  217|      1|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4210|      1|    return 0;
 4211|      1|}
itertoolsmodule.c:permutations_dealloc:
 2913|     24|{
 2914|     24|    permutationsobject *po = permutationsobject_CAST(op);
  ------------------
  |  | 2831|     24|#define permutationsobject_CAST(op) ((permutationsobject *)(op))
  ------------------
 2915|     24|    PyTypeObject *tp = Py_TYPE(po);
  ------------------
  |  |  213|     24|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2916|     24|    PyObject_GC_UnTrack(po);
 2917|     24|    Py_XDECREF(po->pool);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2918|     24|    Py_XDECREF(po->result);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2919|     24|    PyMem_Free(po->indices);
 2920|     24|    PyMem_Free(po->cycles);
 2921|     24|    tp->tp_free(po);
 2922|     24|    Py_DECREF(tp);
  ------------------
  |  |  430|     24|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2923|     24|}
itertoolsmodule.c:permutations_next:
 3038|     57|{
 3039|     57|    PyObject *result;
 3040|     57|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|     57|    {
  ------------------
 3041|     57|    result = permutations_next_lock_held(op);
 3042|     57|    Py_END_CRITICAL_SECTION()
  ------------------
  |  |   55|     57|    }
  ------------------
 3043|     57|    return result;
 3044|     57|}
itertoolsmodule.c:permutations_next_lock_held:
 2947|     57|{
 2948|     57|    permutationsobject *po = permutationsobject_CAST(op);
  ------------------
  |  | 2831|     57|#define permutationsobject_CAST(op) ((permutationsobject *)(op))
  ------------------
 2949|     57|    PyObject *elem;
 2950|     57|    PyObject *oldelem;
 2951|     57|    PyObject *pool = po->pool;
 2952|     57|    Py_ssize_t *indices = po->indices;
 2953|     57|    Py_ssize_t *cycles = po->cycles;
 2954|     57|    PyObject *result = po->result;
 2955|     57|    Py_ssize_t n = PyTuple_GET_SIZE(pool);
  ------------------
  |  |   27|     57|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     57|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     57|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2956|     57|    Py_ssize_t r = po->r;
 2957|     57|    Py_ssize_t i, j, k, index;
 2958|       |
 2959|     57|    if (po->stopped)
  ------------------
  |  Branch (2959:9): [True: 0, False: 57]
  ------------------
 2960|      0|        return NULL;
 2961|       |
 2962|     57|    if (result == NULL) {
  ------------------
  |  Branch (2962:9): [True: 24, False: 33]
  ------------------
 2963|       |        /* On the first pass, initialize result tuple using the indices */
 2964|     24|        result = PyTuple_New(r);
 2965|     24|        if (result == NULL)
  ------------------
  |  Branch (2965:13): [True: 0, False: 24]
  ------------------
 2966|      0|            goto empty;
 2967|     24|        po->result = result;
 2968|     57|        for (i=0; i<r ; i++) {
  ------------------
  |  Branch (2968:19): [True: 33, False: 24]
  ------------------
 2969|     33|            index = indices[i];
 2970|     33|            elem = PyTuple_GET_ITEM(pool, index);
  ------------------
  |  |   29|     33|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     33|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2970:20): [True: 33, False: 0]
  ------------------
 2971|     33|            Py_INCREF(elem);
  ------------------
  |  |  310|     33|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2972|     33|            PyTuple_SET_ITEM(result, i, elem);
  ------------------
  |  |   40|     33|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2973|     33|        }
 2974|     33|    } else {
 2975|     33|        if (n == 0)
  ------------------
  |  Branch (2975:13): [True: 0, False: 33]
  ------------------
 2976|      0|            goto empty;
 2977|       |
 2978|       |        /* Copy the previous result tuple or re-use it if available */
 2979|     33|        if (!_PyObject_IsUniquelyReferenced(result)) {
  ------------------
  |  Branch (2979:13): [True: 33, False: 0]
  ------------------
 2980|     33|            PyObject *old_result = result;
 2981|     33|            result = PyTuple_FromArray(_PyTuple_ITEMS(old_result), r);
  ------------------
  |  |   26|     33|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|     66|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 33, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2982|     33|            if (result == NULL)
  ------------------
  |  Branch (2982:17): [True: 0, False: 33]
  ------------------
 2983|      0|                goto empty;
 2984|     33|            po->result = result;
 2985|     33|            Py_DECREF(old_result);
  ------------------
  |  |  430|     33|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2986|     33|        }
 2987|       |        // bpo-42536: The GC may have untracked this result tuple. Since we're
 2988|       |        // recycling it, make sure it's tracked again:
 2989|      0|        else {
 2990|      0|            _PyTuple_Recycle(result);
 2991|      0|        }
 2992|       |        /* Now, we've got the only copy so we can update it in-place */
 2993|     33|        assert(r == 0 || Py_REFCNT(result) == 1);
  ------------------
  |  Branch (2993:9): [True: 0, False: 33]
  |  Branch (2993:9): [True: 33, False: 0]
  ------------------
 2994|       |
 2995|       |        /* Decrement rightmost cycle, moving leftward upon zero rollover */
 2996|     75|        for (i=r-1 ; i>=0 ; i--) {
  ------------------
  |  Branch (2996:22): [True: 51, False: 24]
  ------------------
 2997|     51|            cycles[i] -= 1;
 2998|     51|            if (cycles[i] == 0) {
  ------------------
  |  Branch (2998:17): [True: 42, False: 9]
  ------------------
 2999|       |                /* rotatation: indices[i:] = indices[i+1:] + indices[i:i+1] */
 3000|     42|                index = indices[i];
 3001|     51|                for (j=i ; j<n-1 ; j++)
  ------------------
  |  Branch (3001:28): [True: 9, False: 42]
  ------------------
 3002|      9|                    indices[j] = indices[j+1];
 3003|     42|                indices[n-1] = index;
 3004|     42|                cycles[i] = n - i;
 3005|     42|            } else {
 3006|      9|                j = cycles[i];
 3007|      9|                index = indices[i];
 3008|      9|                indices[i] = indices[n-j];
 3009|      9|                indices[n-j] = index;
 3010|       |
 3011|     27|                for (k=i; k<r ; k++) {
  ------------------
  |  Branch (3011:27): [True: 18, False: 9]
  ------------------
 3012|       |                    /* start with i, the leftmost element that changed */
 3013|       |                    /* yield tuple(pool[k] for k in indices[:r]) */
 3014|     18|                    index = indices[k];
 3015|     18|                    elem = PyTuple_GET_ITEM(pool, index);
  ------------------
  |  |   29|     18|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     18|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3015:28): [True: 18, False: 0]
  ------------------
 3016|     18|                    Py_INCREF(elem);
  ------------------
  |  |  310|     18|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3017|     18|                    oldelem = PyTuple_GET_ITEM(result, k);
  ------------------
  |  |   29|     18|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     18|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3017:31): [True: 18, False: 0]
  ------------------
 3018|     18|                    PyTuple_SET_ITEM(result, k, elem);
  ------------------
  |  |   40|     18|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3019|     18|                    Py_DECREF(oldelem);
  ------------------
  |  |  430|     18|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3020|     18|                }
 3021|      9|                break;
 3022|      9|            }
 3023|     51|        }
 3024|       |        /* If i is negative, then the cycles have all
 3025|       |           rolled-over and we're done. */
 3026|     33|        if (i < 0)
  ------------------
  |  Branch (3026:13): [True: 24, False: 9]
  ------------------
 3027|     24|            goto empty;
 3028|     33|    }
 3029|     33|    return Py_NewRef(result);
  ------------------
  |  |  550|     33|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3030|       |
 3031|     24|empty:
 3032|     24|    po->stopped = 1;
 3033|       |    return NULL;
 3034|     57|}
itertoolsmodule.c:itertools_permutations_impl:
 2847|     24|{
 2848|     24|    permutationsobject *po;
 2849|     24|    Py_ssize_t n;
 2850|     24|    Py_ssize_t r;
 2851|     24|    PyObject *pool = NULL;
 2852|     24|    Py_ssize_t *indices = NULL;
 2853|     24|    Py_ssize_t *cycles = NULL;
 2854|     24|    Py_ssize_t i;
 2855|       |
 2856|     24|    pool = PySequence_Tuple(iterable);
 2857|     24|    if (pool == NULL)
  ------------------
  |  Branch (2857:9): [True: 0, False: 24]
  ------------------
 2858|      0|        goto error;
 2859|     24|    n = PyTuple_GET_SIZE(pool);
  ------------------
  |  |   27|     24|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2860|       |
 2861|     24|    r = n;
 2862|     24|    if (robj != Py_None) {
  ------------------
  |  |  616|     24|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2862:9): [True: 0, False: 24]
  ------------------
 2863|      0|        if (!PyLong_Check(robj)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2863:13): [True: 0, False: 0]
  ------------------
 2864|      0|            PyErr_SetString(PyExc_TypeError, "Expected int as r");
 2865|      0|            goto error;
 2866|      0|        }
 2867|      0|        r = PyLong_AsSsize_t(robj);
 2868|      0|        if (r == -1 && PyErr_Occurred())
  ------------------
  |  Branch (2868:13): [True: 0, False: 0]
  |  Branch (2868:24): [True: 0, False: 0]
  ------------------
 2869|      0|            goto error;
 2870|      0|    }
 2871|     24|    if (r < 0) {
  ------------------
  |  Branch (2871:9): [True: 0, False: 24]
  ------------------
 2872|      0|        PyErr_SetString(PyExc_ValueError, "r must be non-negative");
 2873|      0|        goto error;
 2874|      0|    }
 2875|       |
 2876|     24|    indices = PyMem_New(Py_ssize_t, n);
  ------------------
  |  |   64|     24|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|     24|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 24]
  |  |  ------------------
  |  |   65|     24|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 2877|     24|    cycles = PyMem_New(Py_ssize_t, r);
  ------------------
  |  |   64|     24|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|     24|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 24]
  |  |  ------------------
  |  |   65|     24|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 2878|     24|    if (indices == NULL || cycles == NULL) {
  ------------------
  |  Branch (2878:9): [True: 0, False: 24]
  |  Branch (2878:28): [True: 0, False: 24]
  ------------------
 2879|      0|        PyErr_NoMemory();
 2880|      0|        goto error;
 2881|      0|    }
 2882|       |
 2883|     57|    for (i=0 ; i<n ; i++)
  ------------------
  |  Branch (2883:16): [True: 33, False: 24]
  ------------------
 2884|     33|        indices[i] = i;
 2885|     57|    for (i=0 ; i<r ; i++)
  ------------------
  |  Branch (2885:16): [True: 33, False: 24]
  ------------------
 2886|     33|        cycles[i] = n - i;
 2887|       |
 2888|       |    /* create permutationsobject structure */
 2889|     24|    po = (permutationsobject *)type->tp_alloc(type, 0);
 2890|     24|    if (po == NULL)
  ------------------
  |  Branch (2890:9): [True: 0, False: 24]
  ------------------
 2891|      0|        goto error;
 2892|       |
 2893|     24|    po->pool = pool;
 2894|     24|    po->indices = indices;
 2895|     24|    po->cycles = cycles;
 2896|     24|    po->result = NULL;
 2897|     24|    po->r = r;
 2898|     24|    po->stopped = r > n ? 1 : 0;
  ------------------
  |  Branch (2898:19): [True: 0, False: 24]
  ------------------
 2899|       |
 2900|     24|    return (PyObject *)po;
 2901|       |
 2902|      0|error:
 2903|      0|    if (indices != NULL)
  ------------------
  |  Branch (2903:9): [True: 0, False: 0]
  ------------------
 2904|      0|        PyMem_Free(indices);
 2905|      0|    if (cycles != NULL)
  ------------------
  |  Branch (2905:9): [True: 0, False: 0]
  ------------------
 2906|      0|        PyMem_Free(cycles);
 2907|      0|    Py_XDECREF(pool);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2908|       |    return NULL;
 2909|     24|}
itertoolsmodule.c:product_dealloc:
 2153|     33|{
 2154|     33|    productobject *lz = productobject_CAST(op);
  ------------------
  |  | 2066|     33|#define productobject_CAST(op)  ((productobject *)(op))
  ------------------
 2155|     33|    PyTypeObject *tp = Py_TYPE(lz);
  ------------------
  |  |  213|     33|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2156|     33|    PyObject_GC_UnTrack(lz);
 2157|     33|    Py_XDECREF(lz->pools);
  ------------------
  |  |  524|     33|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2158|     33|    Py_XDECREF(lz->result);
  ------------------
  |  |  524|     33|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2159|     33|    PyMem_Free(lz->indices);
 2160|     33|    tp->tp_free(lz);
 2161|     33|    Py_DECREF(tp);
  ------------------
  |  |  430|     33|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2162|     33|}
itertoolsmodule.c:product_next:
 2274|    135|{
 2275|    135|    PyObject *result;
 2276|    135|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|    135|    {
  ------------------
 2277|    135|    result = product_next_lock_held(op);
 2278|    135|    Py_END_CRITICAL_SECTION()
  ------------------
  |  |   55|    135|    }
  ------------------
 2279|    135|    return result;
 2280|    135|}
itertoolsmodule.c:product_next_lock_held:
 2187|    135|{
 2188|    135|    productobject *lz = productobject_CAST(op);
  ------------------
  |  | 2066|    135|#define productobject_CAST(op)  ((productobject *)(op))
  ------------------
 2189|    135|    PyObject *pool;
 2190|    135|    PyObject *elem;
 2191|    135|    PyObject *oldelem;
 2192|    135|    PyObject *pools = lz->pools;
 2193|    135|    PyObject *result = lz->result;
 2194|    135|    Py_ssize_t npools = PyTuple_GET_SIZE(pools);
  ------------------
  |  |   27|    135|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    135|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    135|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2195|    135|    Py_ssize_t i;
 2196|       |
 2197|    135|    if (lz->stopped)
  ------------------
  |  Branch (2197:9): [True: 0, False: 135]
  ------------------
 2198|      0|        return NULL;
 2199|       |
 2200|    135|    if (result == NULL) {
  ------------------
  |  Branch (2200:9): [True: 33, False: 102]
  ------------------
 2201|       |        /* On the first pass, return an initial tuple filled with the
 2202|       |           first element from each pool. */
 2203|     33|        result = PyTuple_New(npools);
 2204|     33|        if (result == NULL)
  ------------------
  |  Branch (2204:13): [True: 0, False: 33]
  ------------------
 2205|      0|            goto empty;
 2206|     33|        lz->result = result;
 2207|     84|        for (i=0; i < npools; i++) {
  ------------------
  |  Branch (2207:19): [True: 51, False: 33]
  ------------------
 2208|     51|            pool = PyTuple_GET_ITEM(pools, i);
  ------------------
  |  |   29|     51|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     51|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2208:20): [True: 51, False: 0]
  ------------------
 2209|     51|            if (PyTuple_GET_SIZE(pool) == 0)
  ------------------
  |  |   27|     51|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2209:17): [True: 0, False: 51]
  ------------------
 2210|      0|                goto empty;
 2211|     51|            elem = PyTuple_GET_ITEM(pool, 0);
  ------------------
  |  |   29|     51|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     51|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2211:20): [True: 51, False: 0]
  ------------------
 2212|     51|            Py_INCREF(elem);
  ------------------
  |  |  310|     51|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2213|     51|            PyTuple_SET_ITEM(result, i, elem);
  ------------------
  |  |   40|     51|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2214|     51|        }
 2215|    102|    } else {
 2216|    102|        Py_ssize_t *indices = lz->indices;
 2217|       |
 2218|       |        /* Copy the previous result tuple or re-use it if available */
 2219|    102|        if (!_PyObject_IsUniquelyReferenced(result)) {
  ------------------
  |  Branch (2219:13): [True: 102, False: 0]
  ------------------
 2220|    102|            PyObject *old_result = result;
 2221|    102|            result = PyTuple_FromArray(_PyTuple_ITEMS(old_result), npools);
  ------------------
  |  |   26|    102|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|    204|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 102, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2222|    102|            if (result == NULL)
  ------------------
  |  Branch (2222:17): [True: 0, False: 102]
  ------------------
 2223|      0|                goto empty;
 2224|    102|            lz->result = result;
 2225|    102|            Py_DECREF(old_result);
  ------------------
  |  |  430|    102|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2226|    102|        }
 2227|       |        // bpo-42536: The GC may have untracked this result tuple. Since we're
 2228|       |        // recycling it, make sure it's tracked again:
 2229|      0|        else {
 2230|      0|            _PyTuple_Recycle(result);
 2231|      0|        }
 2232|       |        /* Now, we've got the only copy so we can update it in-place */
 2233|    102|        assert (npools==0 || Py_REFCNT(result) == 1);
  ------------------
  |  Branch (2233:9): [True: 0, False: 102]
  |  Branch (2233:9): [True: 102, False: 0]
  ------------------
 2234|       |
 2235|       |        /* Update the pool indices right-to-left.  Only advance to the
 2236|       |           next pool when the previous one rolls-over */
 2237|    171|        for (i=npools-1 ; i >= 0 ; i--) {
  ------------------
  |  Branch (2237:27): [True: 138, False: 33]
  ------------------
 2238|    138|            pool = PyTuple_GET_ITEM(pools, i);
  ------------------
  |  |   29|    138|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    138|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    138|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2238:20): [True: 138, False: 0]
  ------------------
 2239|      0|            indices[i]++;
 2240|    138|            if (indices[i] == PyTuple_GET_SIZE(pool)) {
  ------------------
  |  |   27|    138|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    138|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    138|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2240:17): [True: 69, False: 69]
  ------------------
 2241|       |                /* Roll-over and advance to next pool */
 2242|     69|                indices[i] = 0;
 2243|     69|                elem = PyTuple_GET_ITEM(pool, 0);
  ------------------
  |  |   29|     69|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     69|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2243:24): [True: 69, False: 0]
  ------------------
 2244|     69|                Py_INCREF(elem);
  ------------------
  |  |  310|     69|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2245|     69|                oldelem = PyTuple_GET_ITEM(result, i);
  ------------------
  |  |   29|     69|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     69|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2245:27): [True: 69, False: 0]
  ------------------
 2246|     69|                PyTuple_SET_ITEM(result, i, elem);
  ------------------
  |  |   40|     69|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2247|     69|                Py_DECREF(oldelem);
  ------------------
  |  |  430|     69|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2248|     69|            } else {
 2249|       |                /* No rollover. Just increment and stop here. */
 2250|     69|                elem = PyTuple_GET_ITEM(pool, indices[i]);
  ------------------
  |  |   29|     69|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     69|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2250:24): [True: 69, False: 0]
  ------------------
 2251|     69|                Py_INCREF(elem);
  ------------------
  |  |  310|     69|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|     69|                oldelem = PyTuple_GET_ITEM(result, i);
  ------------------
  |  |   29|     69|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     69|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2252:27): [True: 69, False: 0]
  ------------------
 2253|     69|                PyTuple_SET_ITEM(result, i, elem);
  ------------------
  |  |   40|     69|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2254|     69|                Py_DECREF(oldelem);
  ------------------
  |  |  430|     69|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2255|     69|                break;
 2256|     69|            }
 2257|    138|        }
 2258|       |
 2259|       |        /* If i is negative, then the indices have all rolled-over
 2260|       |           and we're done. */
 2261|    102|        if (i < 0)
  ------------------
  |  Branch (2261:13): [True: 33, False: 69]
  ------------------
 2262|     33|            goto empty;
 2263|    102|    }
 2264|       |
 2265|    102|    return Py_NewRef(result);
  ------------------
  |  |  550|    102|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2266|       |
 2267|     33|empty:
 2268|     33|    lz->stopped = 1;
 2269|       |    return NULL;
 2270|    135|}
itertoolsmodule.c:product_new:
 2070|     33|{
 2071|     33|    productobject *lz;
 2072|     33|    Py_ssize_t nargs, npools, repeat=1;
 2073|     33|    PyObject *pools = NULL;
 2074|     33|    Py_ssize_t *indices = NULL;
 2075|     33|    Py_ssize_t i;
 2076|       |
 2077|     33|    if (kwds != NULL) {
  ------------------
  |  Branch (2077:9): [True: 0, False: 33]
  ------------------
 2078|      0|        char *kwlist[] = {"repeat", 0};
 2079|      0|        PyObject *tmpargs = PyTuple_New(0);
 2080|      0|        if (tmpargs == NULL)
  ------------------
  |  Branch (2080:13): [True: 0, False: 0]
  ------------------
 2081|      0|            return NULL;
 2082|      0|        if (!PyArg_ParseTupleAndKeywords(tmpargs, kwds, "|n:product",
  ------------------
  |  Branch (2082:13): [True: 0, False: 0]
  ------------------
 2083|      0|                                         kwlist, &repeat)) {
 2084|      0|            Py_DECREF(tmpargs);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2085|      0|            return NULL;
 2086|      0|        }
 2087|      0|        Py_DECREF(tmpargs);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2088|      0|        if (repeat < 0) {
  ------------------
  |  Branch (2088:13): [True: 0, False: 0]
  ------------------
 2089|      0|            PyErr_SetString(PyExc_ValueError,
 2090|      0|                            "repeat argument cannot be negative");
 2091|      0|            return NULL;
 2092|      0|        }
 2093|      0|    }
 2094|       |
 2095|     33|    assert(PyTuple_CheckExact(args));
  ------------------
  |  Branch (2095:5): [True: 33, False: 0]
  ------------------
 2096|     33|    if (repeat == 0) {
  ------------------
  |  Branch (2096:9): [True: 0, False: 33]
  ------------------
 2097|      0|        nargs = 0;
 2098|     33|    } else {
 2099|     33|        nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     33|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2100|     33|        if ((size_t)nargs > PY_SSIZE_T_MAX/sizeof(Py_ssize_t)/repeat) {
  ------------------
  |  |  137|     33|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2100:13): [True: 0, False: 33]
  ------------------
 2101|      0|            PyErr_SetString(PyExc_OverflowError, "repeat argument too large");
 2102|      0|            return NULL;
 2103|      0|        }
 2104|     33|    }
 2105|     33|    npools = nargs * repeat;
 2106|       |
 2107|     33|    indices = PyMem_New(Py_ssize_t, npools);
  ------------------
  |  |   64|     33|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|     33|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 33]
  |  |  ------------------
  |  |   65|     33|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 2108|     33|    if (indices == NULL) {
  ------------------
  |  Branch (2108:9): [True: 0, False: 33]
  ------------------
 2109|      0|        PyErr_NoMemory();
 2110|      0|        goto error;
 2111|      0|    }
 2112|       |
 2113|     33|    pools = PyTuple_New(npools);
 2114|     33|    if (pools == NULL)
  ------------------
  |  Branch (2114:9): [True: 0, False: 33]
  ------------------
 2115|      0|        goto error;
 2116|       |
 2117|     84|    for (i=0; i < nargs ; ++i) {
  ------------------
  |  Branch (2117:15): [True: 51, False: 33]
  ------------------
 2118|     51|        PyObject *item = PyTuple_GET_ITEM(args, i);
  ------------------
  |  |   29|     51|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     51|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2118:26): [True: 51, False: 0]
  ------------------
 2119|      0|        PyObject *pool = PySequence_Tuple(item);
 2120|     51|        if (pool == NULL)
  ------------------
  |  Branch (2120:13): [True: 0, False: 51]
  ------------------
 2121|      0|            goto error;
 2122|     51|        PyTuple_SET_ITEM(pools, i, pool);
  ------------------
  |  |   40|     51|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2123|     51|        indices[i] = 0;
 2124|     51|    }
 2125|     33|    for ( ; i < npools; ++i) {
  ------------------
  |  Branch (2125:13): [True: 0, False: 33]
  ------------------
 2126|      0|        PyObject *pool = PyTuple_GET_ITEM(pools, i - nargs);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2126:26): [True: 0, False: 0]
  ------------------
 2127|      0|        Py_INCREF(pool);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2128|      0|        PyTuple_SET_ITEM(pools, i, pool);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2129|      0|        indices[i] = 0;
 2130|      0|    }
 2131|       |
 2132|       |    /* create productobject structure */
 2133|     33|    lz = (productobject *)type->tp_alloc(type, 0);
 2134|     33|    if (lz == NULL)
  ------------------
  |  Branch (2134:9): [True: 0, False: 33]
  ------------------
 2135|      0|        goto error;
 2136|       |
 2137|     33|    lz->pools = pools;
 2138|     33|    lz->indices = indices;
 2139|     33|    lz->result = NULL;
 2140|     33|    lz->stopped = 0;
 2141|       |
 2142|     33|    return (PyObject *)lz;
 2143|       |
 2144|      0|error:
 2145|      0|    if (indices != NULL)
  ------------------
  |  Branch (2145:9): [True: 0, False: 0]
  ------------------
 2146|      0|        PyMem_Free(indices);
 2147|      0|    Py_XDECREF(pools);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2148|       |    return NULL;
 2149|     33|}
itertoolsmodule.c:itertoolsmodule_traverse:
 4109|     18|{
 4110|     18|    itertools_state *state = get_module_state(mod);
 4111|     18|    Py_VISIT(state->accumulate_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4112|     18|    Py_VISIT(state->batched_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4113|     18|    Py_VISIT(state->chain_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4114|     18|    Py_VISIT(state->combinations_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4115|     18|    Py_VISIT(state->compress_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4116|     18|    Py_VISIT(state->count_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4117|     18|    Py_VISIT(state->cwr_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4118|     18|    Py_VISIT(state->cycle_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4119|     18|    Py_VISIT(state->dropwhile_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4120|     18|    Py_VISIT(state->filterfalse_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4121|     18|    Py_VISIT(state->groupby_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4122|     18|    Py_VISIT(state->_grouper_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4123|     18|    Py_VISIT(state->islice_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4124|     18|    Py_VISIT(state->pairwise_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4125|     18|    Py_VISIT(state->permutations_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4126|     18|    Py_VISIT(state->product_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4127|     18|    Py_VISIT(state->repeat_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4128|     18|    Py_VISIT(state->starmap_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4129|     18|    Py_VISIT(state->takewhile_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4130|     18|    Py_VISIT(state->tee_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4131|     18|    Py_VISIT(state->teedataobject_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4132|     18|    Py_VISIT(state->ziplongest_type);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 4133|     18|    return 0;
 4134|     18|}

_PyLong_FromUid:
  863|    531|{
  864|    531|    if (uid == (uid_t)-1)
  ------------------
  |  Branch (864:9): [True: 0, False: 531]
  ------------------
  865|      0|        return PyLong_FromLong(-1);
  866|    531|    return PyLong_FromUnsignedLong(uid);
  867|    531|}
_PyLong_FromGid:
  871|    531|{
  872|    531|    if (gid == (gid_t)-1)
  ------------------
  |  Branch (872:9): [True: 0, False: 531]
  ------------------
  873|      0|        return PyLong_FromLong(-1);
  874|    531|    return PyLong_FromUnsignedLong(gid);
  875|    531|}
PyOS_FSPath:
17497|  5.96k|{
17498|       |    /* For error message reasons, this function is manually inlined in
17499|       |       path_converter(). */
17500|  5.96k|    PyObject *func = NULL;
17501|  5.96k|    PyObject *path_repr = NULL;
17502|       |
17503|  5.96k|    if (PyUnicode_Check(path) || PyBytes_Check(path)) {
  ------------------
  |  |  103|  5.96k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  11.9k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 5.96k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyUnicode_Check(path) || PyBytes_Check(path)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17504|  5.96k|        return Py_NewRef(path);
  ------------------
  |  |  550|  5.96k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  5.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17505|  5.96k|    }
17506|       |
17507|      0|    func = _PyObject_LookupSpecial(path, &_Py_ID(__fspath__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17508|      0|    if ((NULL == func) || (func == Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (17508:9): [True: 0, False: 0]
  |  Branch (17508:27): [True: 0, False: 0]
  ------------------
17509|      0|        return PyErr_Format(PyExc_TypeError,
17510|      0|                            "expected str, bytes or os.PathLike object, "
17511|      0|                            "not %.200s",
17512|      0|                            _PyType_Name(Py_TYPE(path)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17513|      0|    }
17514|       |
17515|      0|    path_repr = _PyObject_CallNoArgs(func);
17516|      0|    Py_DECREF(func);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17517|      0|    if (NULL == path_repr) {
  ------------------
  |  Branch (17517:9): [True: 0, False: 0]
  ------------------
17518|      0|        return NULL;
17519|      0|    }
17520|       |
17521|      0|    if (!(PyUnicode_Check(path_repr) || PyBytes_Check(path_repr))) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!(PyUnicode_Check(path_repr) || PyBytes_Check(path_repr))) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17522|      0|        PyErr_Format(PyExc_TypeError,
17523|      0|                     "expected %.200s.__fspath__() to return str or bytes, "
17524|      0|                     "not %.200s", _PyType_Name(Py_TYPE(path)),
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17525|      0|                     _PyType_Name(Py_TYPE(path_repr)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17526|      0|        Py_DECREF(path_repr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
17527|      0|        return NULL;
17528|      0|    }
17529|       |
17530|      0|    return path_repr;
17531|      0|}
PyInit_posix:
19261|      2|{
19262|      2|    return PyModuleDef_Init(&posixmodule);
19263|      2|}
posixmodule.c:path_converter:
 1401|    582|{
 1402|    582|    path_t *path = (path_t *)p;
 1403|    582|    PyObject *bytes = NULL;
 1404|    582|    Py_ssize_t length = 0;
 1405|    582|    int is_index, is_bytes, is_unicode;
 1406|    582|    const char *narrow;
 1407|    582|    PyObject *wo = NULL;
 1408|    582|    wchar_t *wide = NULL;
 1409|       |
 1410|    582|#define FORMAT_EXCEPTION(exc, fmt) \
 1411|    582|    PyErr_Format(exc, "%s%s" fmt, \
 1412|    582|        path->function_name ? path->function_name : "", \
 1413|    582|        path->function_name ? ": "                : "", \
 1414|    582|        path->argument_name ? path->argument_name : "path")
 1415|       |
 1416|       |    /* Py_CLEANUP_SUPPORTED support */
 1417|    582|    if (o == NULL) {
  ------------------
  |  Branch (1417:9): [True: 0, False: 582]
  ------------------
 1418|      0|        path_cleanup(path);
 1419|      0|        return 1;
 1420|      0|    }
 1421|       |
 1422|       |    /* Ensure it's always safe to call path_cleanup(). */
 1423|    582|    path->object = path->cleanup = NULL;
 1424|       |    /* path->object owns a reference to the original object */
 1425|    582|    Py_INCREF(o);
  ------------------
  |  |  310|    582|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    582|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    582|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1426|       |
 1427|    582|    if ((o == Py_None) && path->nullable) {
  ------------------
  |  |  616|    582|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1427:9): [True: 0, False: 582]
  |  Branch (1427:27): [True: 0, False: 0]
  ------------------
 1428|      0|        path->wide = NULL;
 1429|      0|        path->narrow = NULL;
 1430|      0|        path->fd = -1;
 1431|      0|        goto success_exit;
 1432|      0|    }
 1433|       |
 1434|       |    /* Only call this here so that we don't treat the return value of
 1435|       |       os.fspath() as an fd or buffer. */
 1436|    582|    is_index = path->allow_fd && PyIndex_Check(o);
  ------------------
  |  Branch (1436:16): [True: 572, False: 10]
  |  Branch (1436:34): [True: 0, False: 572]
  ------------------
 1437|    582|    is_bytes = PyBytes_Check(o);
  ------------------
  |  |   28|    582|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    582|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
 1438|    582|    is_unicode = PyUnicode_Check(o);
  ------------------
  |  |  103|    582|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    582|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
 1439|       |
 1440|    582|    if (!is_index && !is_unicode && !is_bytes) {
  ------------------
  |  Branch (1440:9): [True: 582, False: 0]
  |  Branch (1440:22): [True: 0, False: 582]
  |  Branch (1440:37): [True: 0, False: 0]
  ------------------
 1441|       |        /* Inline PyOS_FSPath() for better error messages. */
 1442|      0|        PyObject *func, *res;
 1443|       |
 1444|      0|        func = _PyObject_LookupSpecial(o, &_Py_ID(__fspath__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1445|      0|        if ((NULL == func) || (func == Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1445:13): [True: 0, False: 0]
  |  Branch (1445:31): [True: 0, False: 0]
  ------------------
 1446|      0|            goto error_format;
 1447|      0|        }
 1448|      0|        res = _PyObject_CallNoArgs(func);
 1449|      0|        Py_DECREF(func);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1450|      0|        if (NULL == res) {
  ------------------
  |  Branch (1450:13): [True: 0, False: 0]
  ------------------
 1451|      0|            goto error_exit;
 1452|      0|        }
 1453|      0|        else if (PyUnicode_Check(res)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1454|      0|            is_unicode = 1;
 1455|      0|        }
 1456|      0|        else if (PyBytes_Check(res)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1457|      0|            is_bytes = 1;
 1458|      0|        }
 1459|      0|        else {
 1460|      0|            PyErr_Format(PyExc_TypeError,
 1461|      0|                 "expected %.200s.__fspath__() to return str or bytes, "
 1462|      0|                 "not %.200s", _PyType_Name(Py_TYPE(o)),
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1463|      0|                 _PyType_Name(Py_TYPE(res)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1464|      0|            Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1465|      0|            goto error_exit;
 1466|      0|        }
 1467|       |
 1468|       |        /* still owns a reference to the original object */
 1469|      0|        Py_SETREF(o, res);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1470|      0|    }
 1471|       |
 1472|    582|    if (is_unicode) {
  ------------------
  |  Branch (1472:9): [True: 582, False: 0]
  ------------------
 1473|    582|        if (path->make_wide) {
  ------------------
  |  Branch (1473:13): [True: 10, False: 572]
  ------------------
 1474|     10|            wide = PyUnicode_AsWideCharString(o, &length);
 1475|     10|            if (!wide) {
  ------------------
  |  Branch (1475:17): [True: 0, False: 10]
  ------------------
 1476|      0|                goto error_exit;
 1477|      0|            }
 1478|       |#ifdef MS_WINDOWS
 1479|       |            if (!path->nonstrict && length > 32767) {
 1480|       |                FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows");
 1481|       |                goto error_exit;
 1482|       |            }
 1483|       |#endif
 1484|     10|            if (!path->nonstrict && wcslen(wide) != (size_t)length) {
  ------------------
  |  Branch (1484:17): [True: 0, False: 10]
  |  Branch (1484:37): [True: 0, False: 0]
  ------------------
 1485|      0|                FORMAT_EXCEPTION(PyExc_ValueError,
  ------------------
  |  | 1411|      0|    PyErr_Format(exc, "%s%s" fmt, \
  |  | 1412|      0|        path->function_name ? path->function_name : "", \
  |  |  ------------------
  |  |  |  Branch (1412:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1413|      0|        path->function_name ? ": "                : "", \
  |  |  ------------------
  |  |  |  Branch (1413:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1414|      0|        path->argument_name ? path->argument_name : "path")
  |  |  ------------------
  |  |  |  Branch (1414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1486|      0|                                 "embedded null character in %s");
 1487|      0|                goto error_exit;
 1488|      0|            }
 1489|       |
 1490|     10|            path->wide = wide;
 1491|     10|            path->narrow = NULL;
 1492|     10|            path->fd = -1;
 1493|     10|            wide = NULL;
 1494|     10|            goto success_exit;
 1495|     10|        }
 1496|    572|        bytes = PyUnicode_EncodeFSDefault(o);
 1497|    572|        if (!bytes) {
  ------------------
  |  Branch (1497:13): [True: 0, False: 572]
  ------------------
 1498|      0|            goto error_exit;
 1499|      0|        }
 1500|    572|    }
 1501|      0|    else if (is_bytes) {
  ------------------
  |  Branch (1501:14): [True: 0, False: 0]
  ------------------
 1502|      0|        bytes = Py_NewRef(o);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1503|      0|    }
 1504|      0|    else if (is_index) {
  ------------------
  |  Branch (1504:14): [True: 0, False: 0]
  ------------------
 1505|      0|        if (!_fd_converter(o, &path->fd)) {
  ------------------
  |  Branch (1505:13): [True: 0, False: 0]
  ------------------
 1506|      0|            goto error_exit;
 1507|      0|        }
 1508|      0|        path->wide = NULL;
 1509|      0|        path->narrow = NULL;
 1510|      0|        path->is_fd = true;
 1511|      0|        goto success_exit;
 1512|      0|    }
 1513|      0|    else {
 1514|      0| error_format:
 1515|      0|        PyErr_Format(PyExc_TypeError, "%s%s%s should be %s, not %.200s",
 1516|      0|            path->function_name ? path->function_name : "",
  ------------------
  |  Branch (1516:13): [True: 0, False: 0]
  ------------------
 1517|      0|            path->function_name ? ": "                : "",
  ------------------
  |  Branch (1517:13): [True: 0, False: 0]
  ------------------
 1518|      0|            path->argument_name ? path->argument_name : "path",
  ------------------
  |  Branch (1518:13): [True: 0, False: 0]
  ------------------
 1519|      0|            path->allow_fd && path->nullable ? "string, bytes, os.PathLike, "
  ------------------
  |  Branch (1519:13): [True: 0, False: 0]
  |  Branch (1519:31): [True: 0, False: 0]
  ------------------
 1520|      0|                                               "integer or None" :
 1521|      0|            path->allow_fd ? "string, bytes, os.PathLike or integer" :
  ------------------
  |  Branch (1521:13): [True: 0, False: 0]
  ------------------
 1522|      0|            path->nullable ? "string, bytes, os.PathLike or None" :
  ------------------
  |  Branch (1522:13): [True: 0, False: 0]
  ------------------
 1523|      0|                             "string, bytes or os.PathLike",
 1524|      0|            _PyType_Name(Py_TYPE(o)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|      0|        goto error_exit;
 1526|      0|    }
 1527|       |
 1528|    572|    length = PyBytes_GET_SIZE(bytes);
  ------------------
  |  |   33|    572|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    572|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1529|    572|    narrow = PyBytes_AS_STRING(bytes);
  ------------------
  |  |   27|    572|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    572|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1530|    572|    if (!path->nonstrict && strlen(narrow) != (size_t)length) {
  ------------------
  |  Branch (1530:9): [True: 572, False: 0]
  |  Branch (1530:29): [True: 0, False: 572]
  ------------------
 1531|      0|        FORMAT_EXCEPTION(PyExc_ValueError, "embedded null character in %s");
  ------------------
  |  | 1411|      0|    PyErr_Format(exc, "%s%s" fmt, \
  |  | 1412|      0|        path->function_name ? path->function_name : "", \
  |  |  ------------------
  |  |  |  Branch (1412:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1413|      0|        path->function_name ? ": "                : "", \
  |  |  ------------------
  |  |  |  Branch (1413:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1414|      0|        path->argument_name ? path->argument_name : "path")
  |  |  ------------------
  |  |  |  Branch (1414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1532|      0|        goto error_exit;
 1533|      0|    }
 1534|       |
 1535|    572|    if (path->make_wide) {
  ------------------
  |  Branch (1535:9): [True: 0, False: 572]
  ------------------
 1536|      0|        wo = PyUnicode_DecodeFSDefaultAndSize(narrow, length);
 1537|      0|        if (!wo) {
  ------------------
  |  Branch (1537:13): [True: 0, False: 0]
  ------------------
 1538|      0|            goto error_exit;
 1539|      0|        }
 1540|       |
 1541|      0|        wide = PyUnicode_AsWideCharString(wo, &length);
 1542|      0|        Py_DECREF(wo);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1543|      0|        if (!wide) {
  ------------------
  |  Branch (1543:13): [True: 0, False: 0]
  ------------------
 1544|      0|            goto error_exit;
 1545|      0|        }
 1546|       |#ifdef MS_WINDOWS
 1547|       |        if (!path->nonstrict && length > 32767) {
 1548|       |            FORMAT_EXCEPTION(PyExc_ValueError, "%s too long for Windows");
 1549|       |            goto error_exit;
 1550|       |        }
 1551|       |#endif
 1552|      0|        if (!path->nonstrict && wcslen(wide) != (size_t)length) {
  ------------------
  |  Branch (1552:13): [True: 0, False: 0]
  |  Branch (1552:33): [True: 0, False: 0]
  ------------------
 1553|      0|            FORMAT_EXCEPTION(PyExc_ValueError,
  ------------------
  |  | 1411|      0|    PyErr_Format(exc, "%s%s" fmt, \
  |  | 1412|      0|        path->function_name ? path->function_name : "", \
  |  |  ------------------
  |  |  |  Branch (1412:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1413|      0|        path->function_name ? ": "                : "", \
  |  |  ------------------
  |  |  |  Branch (1413:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1414|      0|        path->argument_name ? path->argument_name : "path")
  |  |  ------------------
  |  |  |  Branch (1414:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1554|      0|                             "embedded null character in %s");
 1555|      0|            goto error_exit;
 1556|      0|        }
 1557|      0|        path->wide = wide;
 1558|      0|        path->narrow = NULL;
 1559|      0|        Py_DECREF(bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1560|      0|        wide = NULL;
 1561|      0|    }
 1562|    572|    else {
 1563|    572|        path->wide = NULL;
 1564|    572|        path->narrow = narrow;
 1565|    572|        if (bytes == o) {
  ------------------
  |  Branch (1565:13): [True: 0, False: 572]
  ------------------
 1566|       |            /* Still a reference owned by path->object, don't have to
 1567|       |            worry about path->narrow is used after free. */
 1568|      0|            Py_DECREF(bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1569|      0|        }
 1570|    572|        else {
 1571|    572|            path->cleanup = bytes;
 1572|    572|        }
 1573|    572|    }
 1574|    572|    path->fd = -1;
 1575|       |
 1576|    582| success_exit:
 1577|    582|    path->value_error = 0;
 1578|    582|    path->length = length;
 1579|    582|    path->object = o;
 1580|    582|    return Py_CLEANUP_SUPPORTED;
  ------------------
  |  |   57|    582|#define Py_CLEANUP_SUPPORTED 0x20000
  ------------------
 1581|       |
 1582|      0| error_exit:
 1583|      0|    Py_XDECREF(o);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1584|      0|    Py_XDECREF(bytes);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1585|      0|    PyMem_Free(wide);
 1586|      0|    if (!path->suppress_value_error ||
  ------------------
  |  Branch (1586:9): [True: 0, False: 0]
  ------------------
 1587|      0|        !PyErr_ExceptionMatches(PyExc_ValueError))
  ------------------
  |  Branch (1587:9): [True: 0, False: 0]
  ------------------
 1588|      0|    {
 1589|      0|        return 0;
 1590|      0|    }
 1591|      0|    PyErr_Clear();
 1592|      0|    path->wide = NULL;
 1593|      0|    path->narrow = NULL;
 1594|      0|    path->fd = -1;
 1595|      0|    path->value_error = 1;
 1596|      0|    path->length = 0;
 1597|      0|    path->object = NULL;
 1598|      0|    return Py_CLEANUP_SUPPORTED;
  ------------------
  |  |   57|      0|#define Py_CLEANUP_SUPPORTED 0x20000
  ------------------
 1599|      0|}
posixmodule.c:dir_fd_converter:
 1202|      4|{
 1203|      4|    if (o == Py_None) {
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1203:9): [True: 4, False: 0]
  ------------------
 1204|      4|        *(int *)p = DEFAULT_DIR_FD;
  ------------------
  |  | 1158|      4|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
 1205|      4|        return 1;
 1206|      4|    }
 1207|      0|    else if (PyIndex_Check(o)) {
  ------------------
  |  Branch (1207:14): [True: 0, False: 0]
  ------------------
 1208|      0|        return _fd_converter(o, (int *)p);
 1209|      0|    }
 1210|      0|    else {
 1211|      0|        PyErr_Format(PyExc_TypeError,
 1212|      0|                     "argument should be integer or None, not %.200s",
 1213|      0|                     _PyType_Name(Py_TYPE(o)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1214|      0|        return 0;
 1215|      0|    }
 1216|      4|}
posixmodule.c:os_stat_impl:
 3307|    561|{
 3308|    561|    return posix_do_stat(module, "stat", path, dir_fd, follow_symlinks);
 3309|    561|}
posixmodule.c:posix_do_stat:
 2895|    561|{
 2896|    561|    STRUCT_STAT st;
  ------------------
  |  |  419|    561|#  define STRUCT_STAT struct stat
  ------------------
 2897|    561|    int result;
 2898|       |
 2899|    561|#ifdef HAVE_FSTATAT
 2900|    561|    int fstatat_unavailable = 0;
 2901|    561|#endif
 2902|       |
 2903|       |#if !defined(MS_WINDOWS) && !defined(HAVE_FSTATAT) && !defined(HAVE_LSTAT)
 2904|       |    if (follow_symlinks_specified(function_name, follow_symlinks))
 2905|       |        return NULL;
 2906|       |#endif
 2907|       |
 2908|    561|    if (path_and_dir_fd_invalid("stat", path, dir_fd) ||
  ------------------
  |  Branch (2908:9): [True: 0, False: 561]
  ------------------
 2909|    561|        dir_fd_and_fd_invalid("stat", dir_fd, path->fd) ||
  ------------------
  |  Branch (2909:9): [True: 0, False: 561]
  ------------------
 2910|    561|        fd_and_follow_symlinks_invalid("stat", path->is_fd, follow_symlinks))
  ------------------
  |  Branch (2910:9): [True: 0, False: 561]
  ------------------
 2911|      0|        return NULL;
 2912|       |
 2913|    561|    Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|    561|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|    561|                        PyThreadState *_save; \
  |  |  119|    561|                        _save = PyEval_SaveThread();
  ------------------
 2914|    561|    if (path->is_fd) {
  ------------------
  |  Branch (2914:9): [True: 0, False: 561]
  ------------------
 2915|      0|        result = FSTAT(path->fd, &st);
  ------------------
  |  |  418|      0|#  define FSTAT fstat
  ------------------
 2916|      0|    }
 2917|       |#ifdef MS_WINDOWS
 2918|       |    else if (follow_symlinks)
 2919|       |        result = win32_stat(path->wide, &st);
 2920|       |    else
 2921|       |        result = win32_lstat(path->wide, &st);
 2922|       |#else
 2923|    561|    else
 2924|    561|#if defined(HAVE_LSTAT)
 2925|    561|    if ((!follow_symlinks) && (dir_fd == DEFAULT_DIR_FD))
  ------------------
  |  | 1158|      0|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
  |  Branch (2925:9): [True: 0, False: 561]
  |  Branch (2925:31): [True: 0, False: 0]
  ------------------
 2926|      0|        result = LSTAT(path->narrow, &st);
  ------------------
  |  |  417|      0|#  define LSTAT lstat
  ------------------
 2927|    561|    else
 2928|    561|#endif /* HAVE_LSTAT */
 2929|    561|#ifdef HAVE_FSTATAT
 2930|    561|    if ((dir_fd != DEFAULT_DIR_FD) || !follow_symlinks) {
  ------------------
  |  | 1158|    561|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
  |  Branch (2930:9): [True: 0, False: 561]
  |  Branch (2930:39): [True: 0, False: 561]
  ------------------
 2931|      0|        if (HAVE_FSTATAT_RUNTIME) {
  ------------------
  |  |  618|      0|#  define HAVE_FSTATAT_RUNTIME 1
  |  |  ------------------
  |  |  |  Branch (618:32): [True: 0, Folded]
  |  |  ------------------
  ------------------
 2932|      0|            result = fstatat(dir_fd, path->narrow, &st,
 2933|      0|                         follow_symlinks ? 0 : AT_SYMLINK_NOFOLLOW);
  ------------------
  |  Branch (2933:26): [True: 0, False: 0]
  ------------------
 2934|       |
 2935|      0|        } else {
 2936|      0|            fstatat_unavailable = 1;
 2937|      0|        }
 2938|      0|    } else
 2939|    561|#endif /* HAVE_FSTATAT */
 2940|    561|        result = STAT(path->narrow, &st);
  ------------------
  |  |  416|    561|#  define STAT stat
  ------------------
 2941|    561|#endif /* MS_WINDOWS */
 2942|    561|    Py_END_ALLOW_THREADS
  ------------------
  |  |  122|    561|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|    561|                 }
  ------------------
 2943|       |
 2944|    561|#ifdef HAVE_FSTATAT
 2945|    561|    if (fstatat_unavailable) {
  ------------------
  |  Branch (2945:9): [True: 0, False: 561]
  ------------------
 2946|      0|        argument_unavailable_error("stat", "dir_fd");
 2947|      0|        return NULL;
 2948|      0|    }
 2949|    561|#endif
 2950|       |
 2951|    561|    if (result != 0) {
  ------------------
  |  Branch (2951:9): [True: 34, False: 527]
  ------------------
 2952|     34|        return path_error(path);
 2953|     34|    }
 2954|       |
 2955|    527|    return _pystat_fromstructstat(module, &st);
 2956|    561|}
posixmodule.c:path_and_dir_fd_invalid:
 1647|    561|{
 1648|    561|    if (!path->wide && (dir_fd != DEFAULT_DIR_FD) && !path->narrow) {
  ------------------
  |  | 1158|    561|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
  |  Branch (1648:9): [True: 561, False: 0]
  |  Branch (1648:24): [True: 0, False: 561]
  |  Branch (1648:54): [True: 0, False: 0]
  ------------------
 1649|      0|        PyErr_Format(PyExc_ValueError,
 1650|      0|                     "%s: can't specify dir_fd without matching path",
 1651|      0|                     function_name);
 1652|      0|        return 1;
 1653|      0|    }
 1654|    561|    return 0;
 1655|    561|}
posixmodule.c:dir_fd_and_fd_invalid:
 1659|    561|{
 1660|    561|    if ((dir_fd != DEFAULT_DIR_FD) && (fd != -1)) {
  ------------------
  |  | 1158|    561|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
  |  Branch (1660:9): [True: 0, False: 561]
  |  Branch (1660:39): [True: 0, False: 0]
  ------------------
 1661|      0|        PyErr_Format(PyExc_ValueError,
 1662|      0|                     "%s: can't specify both dir_fd and fd",
 1663|      0|                     function_name);
 1664|      0|        return 1;
 1665|      0|    }
 1666|    561|    return 0;
 1667|    561|}
posixmodule.c:fd_and_follow_symlinks_invalid:
 1672|    561|{
 1673|    561|    if (is_fd && (!follow_symlinks)) {
  ------------------
  |  Branch (1673:9): [True: 0, False: 561]
  |  Branch (1673:18): [True: 0, False: 0]
  ------------------
 1674|      0|        PyErr_Format(PyExc_ValueError,
 1675|      0|                     "%s: cannot use fd and follow_symlinks together",
 1676|      0|                     function_name);
 1677|      0|        return 1;
 1678|      0|    }
 1679|    561|    return 0;
 1680|    561|}
posixmodule.c:path_error:
 1936|     34|{
 1937|     34|    return path_object_error(path->object);
 1938|     34|}
posixmodule.c:path_object_error:
 1914|     34|{
 1915|       |#ifdef MS_WINDOWS
 1916|       |    return PyErr_SetExcFromWindowsErrWithFilenameObject(
 1917|       |                PyExc_OSError, 0, path);
 1918|       |#else
 1919|     34|    return posix_path_object_error(path);
 1920|     34|#endif
 1921|     34|}
posixmodule.c:posix_path_object_error:
 1908|     34|{
 1909|     34|    return PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path);
 1910|     34|}
posixmodule.c:_pystat_fromstructstat:
 2768|    527|{
 2769|    527|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (2769:5): [True: 527, False: 0]
  ------------------
 2770|       |
 2771|    527|    _posixstate *state = get_posix_state(module);
 2772|    527|    PyObject *StatResultType = state->StatResultType;
 2773|    527|    PyObject *v = PyStructSequence_New((PyTypeObject *)StatResultType);
 2774|    527|    if (v == NULL) {
  ------------------
  |  Branch (2774:9): [True: 0, False: 527]
  ------------------
 2775|      0|        return NULL;
 2776|      0|    }
 2777|       |
 2778|    527|#define SET_ITEM(pos, expr) \
 2779|    527|    do { \
 2780|    527|        PyObject *obj = (expr); \
 2781|    527|        if (obj == NULL) { \
 2782|    527|            goto error; \
 2783|    527|        } \
 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
 2785|    527|    } while (0)
 2786|       |
 2787|    527|    SET_ITEM(0, PyLong_FromLong((long)st->st_mode));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2788|       |#ifdef MS_WINDOWS
 2789|       |    SET_ITEM(1, _pystat_l128_from_l64_l64(st->st_ino, st->st_ino_high));
 2790|       |    SET_ITEM(2, PyLong_FromUnsignedLongLong(st->st_dev));
 2791|       |#else
 2792|    527|    static_assert(sizeof(unsigned long long) >= sizeof(st->st_ino),
 2793|    527|                  "stat.st_ino is larger than unsigned long long");
 2794|    527|    SET_ITEM(1, PyLong_FromUnsignedLongLong(st->st_ino));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2795|    527|    SET_ITEM(2, _PyLong_FromDev(st->st_dev));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2796|    527|#endif
 2797|    527|    SET_ITEM(3, PyLong_FromLong((long)st->st_nlink));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2798|       |#if defined(MS_WINDOWS)
 2799|       |    SET_ITEM(4, PyLong_FromLong(0));
 2800|       |    SET_ITEM(5, PyLong_FromLong(0));
 2801|       |#else
 2802|    527|    SET_ITEM(4, _PyLong_FromUid(st->st_uid));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2803|    527|    SET_ITEM(5, _PyLong_FromGid(st->st_gid));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2804|    527|#endif
 2805|    527|    static_assert(sizeof(long long) >= sizeof(st->st_size),
 2806|    527|                  "stat.st_size is larger than long long");
 2807|    527|    SET_ITEM(6, PyLong_FromLongLong(st->st_size));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2808|       |
 2809|       |    // Set st_atime, st_mtime and st_ctime
 2810|    527|    unsigned long ansec, mnsec, cnsec;
 2811|    527|#if defined(HAVE_STAT_TV_NSEC)
 2812|    527|    ansec = st->st_atim.tv_nsec;
 2813|    527|    mnsec = st->st_mtim.tv_nsec;
 2814|    527|    cnsec = st->st_ctim.tv_nsec;
 2815|       |#elif defined(HAVE_STAT_TV_NSEC2)
 2816|       |    ansec = st->st_atimespec.tv_nsec;
 2817|       |    mnsec = st->st_mtimespec.tv_nsec;
 2818|       |    cnsec = st->st_ctimespec.tv_nsec;
 2819|       |#elif defined(HAVE_STAT_NSEC)
 2820|       |    ansec = st->st_atime_nsec;
 2821|       |    mnsec = st->st_mtime_nsec;
 2822|       |    cnsec = st->st_ctime_nsec;
 2823|       |#else
 2824|       |    ansec = mnsec = cnsec = 0;
 2825|       |#endif
 2826|    527|    if (fill_time(state, v, 7, 10, 13, st->st_atime, ansec) < 0) {
  ------------------
  |  Branch (2826:9): [True: 0, False: 527]
  ------------------
 2827|      0|        goto error;
 2828|      0|    }
 2829|    527|    if (fill_time(state, v, 8, 11, 14, st->st_mtime, mnsec) < 0) {
  ------------------
  |  Branch (2829:9): [True: 0, False: 527]
  ------------------
 2830|      0|        goto error;
 2831|      0|    }
 2832|    527|    if (fill_time(state, v, 9, 12, 15, st->st_ctime, cnsec) < 0) {
  ------------------
  |  Branch (2832:9): [True: 0, False: 527]
  ------------------
 2833|      0|        goto error;
 2834|      0|    }
 2835|       |
 2836|    527|#ifdef HAVE_STRUCT_STAT_ST_BLKSIZE
 2837|    527|    SET_ITEM(ST_BLKSIZE_IDX, PyLong_FromLong((long)st->st_blksize));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2838|    527|#endif
 2839|    527|#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
 2840|    527|    SET_ITEM(ST_BLOCKS_IDX, PyLong_FromLong((long)st->st_blocks));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2841|    527|#endif
 2842|    527|#ifdef HAVE_STRUCT_STAT_ST_RDEV
 2843|    527|    SET_ITEM(ST_RDEV_IDX, _PyLong_FromDev(st->st_rdev));
  ------------------
  |  | 2779|    527|    do { \
  |  | 2780|    527|        PyObject *obj = (expr); \
  |  | 2781|    527|        if (obj == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2781:13): [True: 0, False: 527]
  |  |  ------------------
  |  | 2782|      0|            goto error; \
  |  | 2783|      0|        } \
  |  | 2784|    527|        PyStructSequence_SET_ITEM(v, (pos), obj); \
  |  |  ------------------
  |  |  |  |   11|    527|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 2785|    527|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2785:14): [Folded, False: 527]
  |  |  ------------------
  ------------------
 2844|    527|#endif
 2845|       |#ifdef HAVE_STRUCT_STAT_ST_GEN
 2846|       |    SET_ITEM(ST_GEN_IDX, PyLong_FromLong((long)st->st_gen));
 2847|       |#endif
 2848|       |#if defined(HAVE_STRUCT_STAT_ST_BIRTHTIME)
 2849|       |    {
 2850|       |      unsigned long bsec, bnsec;
 2851|       |      bsec = (long)st->st_birthtime;
 2852|       |#ifdef HAVE_STAT_TV_NSEC2
 2853|       |      bnsec = st->st_birthtimespec.tv_nsec;
 2854|       |#else
 2855|       |      bnsec = 0;
 2856|       |#endif
 2857|       |      SET_ITEM(ST_BIRTHTIME_IDX, PyFloat_FromDouble(bsec + bnsec * 1e-9));
 2858|       |    }
 2859|       |#elif defined(MS_WINDOWS)
 2860|       |    if (fill_time(state, v, -1, ST_BIRTHTIME_IDX, ST_BIRTHTIME_NS_IDX,
 2861|       |                  st->st_birthtime, st->st_birthtime_nsec) < 0) {
 2862|       |        goto error;
 2863|       |    }
 2864|       |#endif
 2865|       |#ifdef HAVE_STRUCT_STAT_ST_FLAGS
 2866|       |    SET_ITEM(ST_FLAGS_IDX, PyLong_FromLong((long)st->st_flags));
 2867|       |#endif
 2868|       |#ifdef HAVE_STRUCT_STAT_ST_FILE_ATTRIBUTES
 2869|       |    SET_ITEM(ST_FILE_ATTRIBUTES_IDX,
 2870|       |             PyLong_FromUnsignedLong(st->st_file_attributes));
 2871|       |#endif
 2872|       |#ifdef HAVE_STRUCT_STAT_ST_FSTYPE
 2873|       |   SET_ITEM(ST_FSTYPE_IDX, PyUnicode_FromString(st->st_fstype));
 2874|       |#endif
 2875|       |#ifdef HAVE_STRUCT_STAT_ST_REPARSE_TAG
 2876|       |    SET_ITEM(ST_REPARSE_TAG_IDX, PyLong_FromUnsignedLong(st->st_reparse_tag));
 2877|       |#endif
 2878|       |
 2879|    527|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (2879:5): [True: 527, False: 0]
  ------------------
 2880|    527|    return v;
 2881|       |
 2882|      0|error:
 2883|      0|    Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2884|      0|    return NULL;
 2885|       |
 2886|    527|#undef SET_ITEM
 2887|    527|}
posixmodule.c:get_posix_state:
 1250|    549|{
 1251|    549|    void *state = _PyModule_GetState(module);
 1252|    549|    assert(state != NULL);
  ------------------
  |  Branch (1252:5): [True: 549, False: 0]
  ------------------
 1253|    549|    return (_posixstate *)state;
 1254|    549|}
posixmodule.c:_PyLong_FromDev:
 1094|  1.05k|{
 1095|  1.05k|#ifdef NODEV
 1096|  1.05k|    if (dev == NODEV) {
  ------------------
  |  Branch (1096:9): [True: 2, False: 1.05k]
  ------------------
 1097|      2|        return PyLong_FromLongLong((long long)dev);
 1098|      2|    }
 1099|  1.05k|#endif
 1100|  1.05k|    return PyLong_FromUnsignedLongLong((unsigned long long)dev);
 1101|  1.05k|}
posixmodule.c:fill_time:
 2704|  1.58k|{
 2705|  1.58k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (2705:5): [True: 1.58k, False: 0]
  ------------------
 2706|  1.58k|    assert(nsec < SEC_TO_NS);
  ------------------
  |  Branch (2706:5): [True: 1.58k, False: 0]
  ------------------
 2707|       |
 2708|  1.58k|    if (s_index >= 0) {
  ------------------
  |  Branch (2708:9): [True: 1.58k, False: 0]
  ------------------
 2709|  1.58k|        PyObject *s = _PyLong_FromTime_t(sec);
 2710|  1.58k|        if (s == NULL) {
  ------------------
  |  Branch (2710:13): [True: 0, False: 1.58k]
  ------------------
 2711|      0|            return -1;
 2712|      0|        }
 2713|  1.58k|        PyStructSequence_SET_ITEM(v, s_index, s);
  ------------------
  |  |   11|  1.58k|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 2714|  1.58k|    }
 2715|       |
 2716|  1.58k|    if (f_index >= 0) {
  ------------------
  |  Branch (2716:9): [True: 1.58k, False: 0]
  ------------------
 2717|  1.58k|        PyObject *float_s = PyFloat_FromDouble((double)sec + 1e-9 * nsec);
 2718|  1.58k|        if (float_s == NULL) {
  ------------------
  |  Branch (2718:13): [True: 0, False: 1.58k]
  ------------------
 2719|      0|            return -1;
 2720|      0|        }
 2721|  1.58k|        PyStructSequence_SET_ITEM(v, f_index, float_s);
  ------------------
  |  |   11|  1.58k|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 2722|  1.58k|    }
 2723|       |
 2724|  1.58k|    if (ns_index >= 0) {
  ------------------
  |  Branch (2724:9): [True: 1.58k, False: 0]
  ------------------
 2725|  1.58k|        PyObject *ns_total = stat_nanosecond_timestamp(state, sec, nsec);
 2726|  1.58k|        if (ns_total == NULL) {
  ------------------
  |  Branch (2726:13): [True: 0, False: 1.58k]
  ------------------
 2727|      0|            return -1;
 2728|      0|        }
 2729|  1.58k|        PyStructSequence_SET_ITEM(v, ns_index, ns_total);
  ------------------
  |  |   11|  1.58k|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 2730|  1.58k|    }
 2731|       |
 2732|  1.58k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (2732:5): [True: 1.58k, False: 0]
  ------------------
 2733|  1.58k|    return 0;
 2734|  1.58k|}
posixmodule.c:stat_nanosecond_timestamp:
 2667|  1.58k|{
 2668|       |#if SIZEOF_TIME_T == 4
 2669|       |    return PyLong_FromLongLong(sec * SEC_TO_NS + nsec);
 2670|       |#else
 2671|       |    /* 1677-09-21 00:12:44 to 2262-04-11 23:47:15 UTC inclusive */
 2672|  1.58k|    if ((LLONG_MIN/SEC_TO_NS) <= sec && sec <= (LLONG_MAX/SEC_TO_NS - 1)) {
  ------------------
  |  | 2664|  1.58k|#define SEC_TO_NS (1000000000LL)
  ------------------
                  if ((LLONG_MIN/SEC_TO_NS) <= sec && sec <= (LLONG_MAX/SEC_TO_NS - 1)) {
  ------------------
  |  | 2664|  1.58k|#define SEC_TO_NS (1000000000LL)
  ------------------
  |  Branch (2672:9): [True: 1.58k, False: 0]
  |  Branch (2672:41): [True: 1.58k, False: 0]
  ------------------
 2673|  1.58k|        return PyLong_FromLongLong(sec * SEC_TO_NS + nsec);
  ------------------
  |  | 2664|  1.58k|#define SEC_TO_NS (1000000000LL)
  ------------------
 2674|  1.58k|    }
 2675|      0|    else
 2676|      0|    {
 2677|      0|        PyObject *ns_total = NULL;
 2678|      0|        PyObject *s_in_ns = NULL;
 2679|      0|        PyObject *s = _PyLong_FromTime_t(sec);
 2680|      0|        PyObject *ns_fractional = PyLong_FromUnsignedLong(nsec);
 2681|      0|        if (s == NULL || ns_fractional == NULL) {
  ------------------
  |  Branch (2681:13): [True: 0, False: 0]
  |  Branch (2681:26): [True: 0, False: 0]
  ------------------
 2682|      0|            goto exit;
 2683|      0|        }
 2684|       |
 2685|      0|        s_in_ns = PyNumber_Multiply(s, state->billion);
 2686|      0|        if (s_in_ns == NULL) {
  ------------------
  |  Branch (2686:13): [True: 0, False: 0]
  ------------------
 2687|      0|            goto exit;
 2688|      0|        }
 2689|       |
 2690|      0|        ns_total = PyNumber_Add(s_in_ns, ns_fractional);
 2691|       |
 2692|      0|    exit:
 2693|      0|        Py_XDECREF(s);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2694|      0|        Py_XDECREF(ns_fractional);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2695|      0|        Py_XDECREF(s_in_ns);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2696|      0|        return ns_total;
 2697|      0|    }
 2698|  1.58k|#endif
 2699|  1.58k|}
posixmodule.c:path_cleanup:
 1391|    582|{
 1392|    582|    wchar_t *wide = (wchar_t *)path->wide;
 1393|    582|    path->wide = NULL;
 1394|    582|    PyMem_Free(wide);
 1395|    582|    Py_CLEAR(path->object);
  ------------------
  |  |  484|    582|    do { \
  |  |  485|    582|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    582|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    582|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    582|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    582|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    582|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 582, False: 0]
  |  |  ------------------
  |  |  488|    582|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    582|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    582|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    582|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    582|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    582|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    582|        } \
  |  |  491|    582|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 582]
  |  |  ------------------
  ------------------
 1396|       |    Py_CLEAR(path->cleanup);
  ------------------
  |  |  484|    582|    do { \
  |  |  485|    582|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    582|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    582|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    582|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    582|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    582|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 572, False: 10]
  |  |  ------------------
  |  |  488|    572|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    572|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    572|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    572|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    572|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    572|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    572|        } \
  |  |  491|    582|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 582]
  |  |  ------------------
  ------------------
 1397|    582|}
posixmodule.c:follow_symlinks_specified:
 1637|      2|{
 1638|      2|    if (follow_symlinks)
  ------------------
  |  Branch (1638:9): [True: 2, False: 0]
  ------------------
 1639|      2|        return 0;
 1640|       |
 1641|      0|    argument_unavailable_error(function_name, "follow_symlinks");
 1642|      0|    return 1;
 1643|      2|}
posixmodule.c:dir_fd_and_follow_symlinks_invalid:
 1685|      2|{
 1686|      2|    if ((dir_fd != DEFAULT_DIR_FD) && (!follow_symlinks)) {
  ------------------
  |  | 1158|      2|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
  |  Branch (1686:9): [True: 0, False: 2]
  |  Branch (1686:39): [True: 0, False: 0]
  ------------------
 1687|      0|        PyErr_Format(PyExc_ValueError,
 1688|      0|                     "%s: cannot use dir_fd and follow_symlinks together",
 1689|      0|                     function_name);
 1690|      0|        return 1;
 1691|      0|    }
 1692|      2|    return 0;
 1693|      2|}
posixmodule.c:os_listdir_impl:
 5146|     11|{
 5147|     11|    if (PySys_Audit("os.listdir", "O",
  ------------------
  |  Branch (5147:9): [True: 0, False: 11]
  ------------------
 5148|     11|                    path->object ? path->object : Py_None) < 0) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (5148:21): [True: 11, False: 0]
  ------------------
 5149|      0|        return NULL;
 5150|      0|    }
 5151|       |#if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR)
 5152|       |    return _listdir_windows_no_opendir(path, NULL);
 5153|       |#else
 5154|     11|    return _posix_listdir(path, NULL);
 5155|     11|#endif
 5156|     11|}
posixmodule.c:_posix_listdir:
 5010|     11|{
 5011|     11|    PyObject *v;
 5012|     11|    DIR *dirp = NULL;
 5013|     11|    struct dirent *ep;
 5014|     11|    int return_str; /* if false, return bytes */
 5015|     11|#ifdef HAVE_FDOPENDIR
 5016|     11|    int fd = -1;
 5017|     11|#endif
 5018|       |
 5019|     11|    errno = 0;
 5020|     11|#ifdef HAVE_FDOPENDIR
 5021|     11|    if (path->is_fd) {
  ------------------
  |  Branch (5021:9): [True: 0, False: 11]
  ------------------
 5022|      0|      if (HAVE_FDOPENDIR_RUNTIME) {
  ------------------
  |  |  627|      0|#  define HAVE_FDOPENDIR_RUNTIME 1
  |  |  ------------------
  |  |  |  Branch (627:34): [True: 0, Folded]
  |  |  ------------------
  ------------------
 5023|       |        /* closedir() closes the FD, so we duplicate it */
 5024|      0|        fd = _Py_dup(path->fd);
 5025|      0|        if (fd == -1)
  ------------------
  |  Branch (5025:13): [True: 0, False: 0]
  ------------------
 5026|      0|            return NULL;
 5027|       |
 5028|      0|        return_str = 1;
 5029|       |
 5030|      0|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|      0|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|      0|                        PyThreadState *_save; \
  |  |  119|      0|                        _save = PyEval_SaveThread();
  ------------------
 5031|      0|        dirp = fdopendir(fd);
 5032|      0|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|      0|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|      0|                 }
  ------------------
 5033|      0|      } else {
 5034|      0|        PyErr_SetString(PyExc_TypeError,
 5035|      0|            "listdir: path should be string, bytes, os.PathLike or None, not int");
 5036|      0|        return NULL;
 5037|      0|      }
 5038|      0|    }
 5039|     11|    else
 5040|     11|#endif
 5041|     11|    {
 5042|     11|        const char *name;
 5043|     11|        if (path->narrow) {
  ------------------
  |  Branch (5043:13): [True: 11, False: 0]
  ------------------
 5044|     11|            name = path->narrow;
 5045|       |            /* only return bytes if they specified a bytes object */
 5046|     11|            return_str = !PyBytes_Check(path->object);
  ------------------
  |  |   28|     11|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     11|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
 5047|     11|        }
 5048|      0|        else {
 5049|      0|            name = ".";
 5050|      0|            return_str = 1;
 5051|      0|        }
 5052|       |
 5053|     11|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|     11|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|     11|                        PyThreadState *_save; \
  |  |  119|     11|                        _save = PyEval_SaveThread();
  ------------------
 5054|     11|        dirp = opendir(name);
 5055|     11|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|     11|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|     11|                 }
  ------------------
 5056|     11|    }
 5057|       |
 5058|     11|    if (dirp == NULL) {
  ------------------
  |  Branch (5058:9): [True: 0, False: 11]
  ------------------
 5059|      0|        path_error(path);
 5060|      0|        list = NULL;
 5061|      0|#ifdef HAVE_FDOPENDIR
 5062|      0|        if (fd != -1) {
  ------------------
  |  Branch (5062:13): [True: 0, False: 0]
  ------------------
 5063|      0|            Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|      0|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|      0|                        PyThreadState *_save; \
  |  |  119|      0|                        _save = PyEval_SaveThread();
  ------------------
 5064|      0|            close(fd);
 5065|      0|            Py_END_ALLOW_THREADS
  ------------------
  |  |  122|      0|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|      0|                 }
  ------------------
 5066|      0|        }
 5067|      0|#endif
 5068|      0|        goto exit;
 5069|      0|    }
 5070|     11|    if ((list = PyList_New(0)) == NULL) {
  ------------------
  |  Branch (5070:9): [True: 0, False: 11]
  ------------------
 5071|      0|        goto exit;
 5072|      0|    }
 5073|    847|    for (;;) {
 5074|    847|        errno = 0;
 5075|    847|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|    847|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|    847|                        PyThreadState *_save; \
  |  |  119|    847|                        _save = PyEval_SaveThread();
  ------------------
 5076|    847|        ep = readdir(dirp);
 5077|    847|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|    847|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|    847|                 }
  ------------------
 5078|    847|        if (ep == NULL) {
  ------------------
  |  Branch (5078:13): [True: 11, False: 836]
  ------------------
 5079|     11|            if (errno == 0) {
  ------------------
  |  Branch (5079:17): [True: 11, False: 0]
  ------------------
 5080|     11|                break;
 5081|     11|            } else {
 5082|      0|                path_error(path);
 5083|      0|                Py_CLEAR(list);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5084|      0|                goto exit;
 5085|      0|            }
 5086|     11|        }
 5087|    836|        if (ep->d_name[0] == '.' &&
  ------------------
  |  Branch (5087:13): [True: 22, False: 814]
  ------------------
 5088|     22|            (NAMLEN(ep) == 1 ||
  ------------------
  |  |  335|     22|#  define NAMLEN(dirent) strlen((dirent)->d_name)
  ------------------
  |  Branch (5088:14): [True: 11, False: 11]
  ------------------
 5089|     11|             (ep->d_name[1] == '.' && NAMLEN(ep) == 2)))
  ------------------
  |  |  335|     11|#  define NAMLEN(dirent) strlen((dirent)->d_name)
  ------------------
  |  Branch (5089:15): [True: 11, False: 0]
  |  Branch (5089:39): [True: 11, False: 0]
  ------------------
 5090|     22|            continue;
 5091|    814|        if (return_str)
  ------------------
  |  Branch (5091:13): [True: 814, False: 0]
  ------------------
 5092|    814|            v = PyUnicode_DecodeFSDefaultAndSize(ep->d_name, NAMLEN(ep));
  ------------------
  |  |  335|    814|#  define NAMLEN(dirent) strlen((dirent)->d_name)
  ------------------
 5093|      0|        else
 5094|      0|            v = PyBytes_FromStringAndSize(ep->d_name, NAMLEN(ep));
  ------------------
  |  |  335|      0|#  define NAMLEN(dirent) strlen((dirent)->d_name)
  ------------------
 5095|    814|        if (v == NULL) {
  ------------------
  |  Branch (5095:13): [True: 0, False: 814]
  ------------------
 5096|      0|            Py_CLEAR(list);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5097|      0|            break;
 5098|      0|        }
 5099|    814|        if (PyList_Append(list, v) != 0) {
  ------------------
  |  Branch (5099:13): [True: 0, False: 814]
  ------------------
 5100|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5101|      0|            Py_CLEAR(list);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5102|      0|            break;
 5103|      0|        }
 5104|    814|        Py_DECREF(v);
  ------------------
  |  |  430|    814|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    814|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    814|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5105|    814|    }
 5106|       |
 5107|     11|exit:
 5108|     11|    if (dirp != NULL) {
  ------------------
  |  Branch (5108:9): [True: 11, False: 0]
  ------------------
 5109|     11|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|     11|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|     11|                        PyThreadState *_save; \
  |  |  119|     11|                        _save = PyEval_SaveThread();
  ------------------
 5110|     11|#ifdef HAVE_FDOPENDIR
 5111|     11|        if (fd > -1)
  ------------------
  |  Branch (5111:13): [True: 0, False: 11]
  ------------------
 5112|      0|            rewinddir(dirp);
 5113|     11|#endif
 5114|     11|        closedir(dirp);
 5115|     11|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|     11|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|     11|                 }
  ------------------
 5116|     11|    }
 5117|       |
 5118|     11|    return list;
 5119|     11|}  /* end of _posix_listdir */
posixmodule.c:os_getegid_impl:
 9608|      2|{
 9609|      2|    return _PyLong_FromGid(getegid());
 9610|      2|}
posixmodule.c:os_geteuid_impl:
 9624|      2|{
 9625|      2|    return _PyLong_FromUid(geteuid());
 9626|      2|}
posixmodule.c:os_getgid_impl:
 9640|      2|{
 9641|      2|    return _PyLong_FromGid(getgid());
 9642|      2|}
posixmodule.c:os_getuid_impl:
10182|      2|{
10183|      2|    return _PyLong_FromUid(getuid());
10184|      2|}
posixmodule.c:os__path_normpath_impl:
 6139|     10|{
 6140|     10|    PyObject *result;
 6141|     10|    Py_ssize_t norm_len;
 6142|     10|    wchar_t *norm_path = _Py_normpath_and_size((wchar_t *)path->wide,
 6143|     10|                                               path->length, &norm_len);
 6144|     10|    if (!norm_len) {
  ------------------
  |  Branch (6144:9): [True: 0, False: 10]
  ------------------
 6145|      0|        result = PyUnicode_FromOrdinal('.');
 6146|      0|    }
 6147|     10|    else {
 6148|     10|        result = PyUnicode_FromWideChar(norm_path, norm_len);
 6149|     10|    }
 6150|     10|    if (result == NULL) {
  ------------------
  |  Branch (6150:9): [True: 0, False: 10]
  ------------------
 6151|      0|        return NULL;
 6152|      0|    }
 6153|     10|    if (PyBytes_Check(path->object)) {
  ------------------
  |  |   28|     10|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     10|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6154|      0|        Py_SETREF(result, PyUnicode_EncodeFSDefault(result));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6155|      0|    }
 6156|     10|    return result;
 6157|     10|}
posixmodule.c:os_fspath_impl:
17548|    276|{
17549|    276|    return PyOS_FSPath(path);
17550|    276|}
posixmodule.c:convertenviron:
 1793|      2|{
 1794|      2|    PyObject *d;
 1795|       |#ifdef MS_WINDOWS
 1796|       |    wchar_t **e;
 1797|       |#else
 1798|      2|    char **e;
 1799|      2|#endif
 1800|       |
 1801|      2|    d = PyDict_New();
 1802|      2|    if (d == NULL)
  ------------------
  |  Branch (1802:9): [True: 0, False: 2]
  ------------------
 1803|      0|        return NULL;
 1804|       |#ifdef MS_WINDOWS
 1805|       |    /* _wenviron must be initialized in this way if the program is started
 1806|       |       through main() instead of wmain(). */
 1807|       |    (void)_wgetenv(L"");
 1808|       |    e = _wenviron;
 1809|       |#elif defined(USE_DARWIN_NS_GET_ENVIRON)
 1810|       |    /* environ is not accessible as an extern in a shared object on OSX; use
 1811|       |       _NSGetEnviron to resolve it. The value changes if you add environment
 1812|       |       variables between calls to Py_Initialize, so don't cache the value. */
 1813|       |    e = *_NSGetEnviron();
 1814|       |#else
 1815|      2|    e = environ;
 1816|      2|#endif
 1817|      2|    if (e == NULL)
  ------------------
  |  Branch (1817:9): [True: 0, False: 2]
  ------------------
 1818|      0|        return d;
 1819|     70|    for (; *e != NULL; e++) {
  ------------------
  |  Branch (1819:12): [True: 68, False: 2]
  ------------------
 1820|     68|        PyObject *k;
 1821|     68|        PyObject *v;
 1822|       |#ifdef MS_WINDOWS
 1823|       |        const wchar_t *p = wcschr(*e, L'=');
 1824|       |#else
 1825|     68|        const char *p = strchr(*e, '=');
 1826|     68|#endif
 1827|     68|        if (p == NULL)
  ------------------
  |  Branch (1827:13): [True: 0, False: 68]
  ------------------
 1828|      0|            continue;
 1829|       |#ifdef MS_WINDOWS
 1830|       |        k = PyUnicode_FromWideChar(*e, (Py_ssize_t)(p-*e));
 1831|       |#else
 1832|     68|        k = PyBytes_FromStringAndSize(*e, (Py_ssize_t)(p-*e));
 1833|     68|#endif
 1834|     68|        if (k == NULL) {
  ------------------
  |  Branch (1834:13): [True: 0, False: 68]
  ------------------
 1835|      0|            Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1836|      0|            return NULL;
 1837|      0|        }
 1838|       |#ifdef MS_WINDOWS
 1839|       |        v = PyUnicode_FromWideChar(p+1, -1);
 1840|       |#else
 1841|     68|        v = PyBytes_FromStringAndSize(p+1, strlen(p+1));
 1842|     68|#endif
 1843|     68|        if (v == NULL) {
  ------------------
  |  Branch (1843:13): [True: 0, False: 68]
  ------------------
 1844|      0|            Py_DECREF(k);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1845|      0|            Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1846|      0|            return NULL;
 1847|      0|        }
 1848|     68|        if (PyDict_SetDefaultRef(d, k, v, NULL) < 0) {
  ------------------
  |  Branch (1848:13): [True: 0, False: 68]
  ------------------
 1849|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1850|      0|            Py_DECREF(k);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1851|      0|            Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1852|      0|            return NULL;
 1853|      0|        }
 1854|     68|        Py_DECREF(k);
  ------------------
  |  |  430|     68|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1855|     68|        Py_DECREF(v);
  ------------------
  |  |  430|     68|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1856|     68|    }
 1857|      2|    return d;
 1858|      2|}
posixmodule.c:posixmodule_exec:
19053|      2|{
19054|      2|    _posixstate *state = get_posix_state(m);
19055|       |
19056|      2|#if defined(HAVE_PWRITEV)
19057|      2|    if (HAVE_PWRITEV_RUNTIME) {} else {
  ------------------
  |  |  636|      2|#  define HAVE_PWRITEV_RUNTIME 1
  |  |  ------------------
  |  |  |  Branch (636:32): [True: 2, Folded]
  |  |  ------------------
  ------------------
19058|      0|        PyObject* dct = PyModule_GetDict(m);
19059|       |
19060|      0|        if (dct == NULL) {
  ------------------
  |  Branch (19060:13): [True: 0, False: 0]
  ------------------
19061|      0|            return -1;
19062|      0|        }
19063|       |
19064|      0|        if (PyDict_PopString(dct, "pwritev", NULL) < 0) {
  ------------------
  |  Branch (19064:13): [True: 0, False: 0]
  ------------------
19065|      0|            return -1;
19066|      0|        }
19067|      0|        if (PyDict_PopString(dct, "preadv", NULL) < 0) {
  ------------------
  |  Branch (19067:13): [True: 0, False: 0]
  ------------------
19068|      0|            return -1;
19069|      0|        }
19070|      0|    }
19071|      2|#endif
19072|       |
19073|      2|#ifdef HAVE_STATX
19074|      2|    if (statx == NULL) {
  ------------------
  |  Branch (19074:9): [True: 0, False: 2]
  ------------------
19075|      0|        PyObject* dct = PyModule_GetDict(m);
19076|      0|        if (dct == NULL) {
  ------------------
  |  Branch (19076:13): [True: 0, False: 0]
  ------------------
19077|      0|            return -1;
19078|      0|        }
19079|      0|        if (PyDict_PopString(dct, "statx", NULL) < 0) {
  ------------------
  |  Branch (19079:13): [True: 0, False: 0]
  ------------------
19080|      0|            return -1;
19081|      0|        }
19082|      0|    }
19083|      2|    else {
19084|      2|        state->StatxResultType = PyType_FromModuleAndSpec(m, &pystatx_result_spec, NULL);
19085|      2|        if (PyModule_AddObjectRef(m, "statx_result", state->StatxResultType) < 0) {
  ------------------
  |  Branch (19085:13): [True: 0, False: 2]
  ------------------
19086|      0|            return -1;
19087|      0|        }
19088|      2|    }
19089|      2|#endif
19090|       |
19091|      2|#if HAVE_PIPE2
19092|      2|    if (HAVE_PIPE2_RUNTIME) {
  ------------------
  |  |  641|      2|#  define HAVE_PIPE2_RUNTIME 1
  |  |  ------------------
  |  |  |  Branch (641:30): [True: 2, Folded]
  |  |  ------------------
  ------------------
19093|       |        // Do nothing. (`__builtin_available` doesn't allow `!`; see
19094|       |        // "using negations" in a comment above.)
19095|      2|    }
19096|      0|    else {
19097|      0|        PyObject* dct = PyModule_GetDict(m);
19098|      0|        if (dct == NULL) {
  ------------------
  |  Branch (19098:13): [True: 0, False: 0]
  ------------------
19099|      0|            return -1;
19100|      0|        }
19101|      0|        if (PyDict_PopString(dct, "pipe2", NULL) < 0) {
  ------------------
  |  Branch (19101:13): [True: 0, False: 0]
  ------------------
19102|      0|            return -1;
19103|      0|        }
19104|      0|    }
19105|      2|#endif
19106|       |
19107|       |    /* Initialize environ dictionary */
19108|      2|    if (PyModule_Add(m, "environ", convertenviron()) != 0) {
  ------------------
  |  Branch (19108:9): [True: 0, False: 2]
  ------------------
19109|      0|        return -1;
19110|      0|    }
19111|       |
19112|      2|    if (all_ins(m))
  ------------------
  |  Branch (19112:9): [True: 0, False: 2]
  ------------------
19113|      0|        return -1;
19114|       |
19115|      2|    if (setup_confname_tables(m))
  ------------------
  |  Branch (19115:9): [True: 0, False: 2]
  ------------------
19116|      0|        return -1;
19117|       |
19118|      2|    if (PyModule_AddObjectRef(m, "error", PyExc_OSError) < 0) {
  ------------------
  |  Branch (19118:9): [True: 0, False: 2]
  ------------------
19119|      0|        return -1;
19120|      0|    }
19121|       |
19122|      2|#if defined(HAVE_WAITID)
19123|      2|    state->WaitidResultType = (PyObject *)PyStructSequence_NewType(&waitid_result_desc);
19124|      2|    if (PyModule_AddObjectRef(m, "waitid_result", state->WaitidResultType) < 0) {
  ------------------
  |  Branch (19124:9): [True: 0, False: 2]
  ------------------
19125|      0|        return -1;
19126|      0|    }
19127|      2|#endif
19128|       |
19129|      2|    stat_result_desc.fields[7].name = PyStructSequence_UnnamedField;
19130|      2|    stat_result_desc.fields[8].name = PyStructSequence_UnnamedField;
19131|      2|    stat_result_desc.fields[9].name = PyStructSequence_UnnamedField;
19132|      2|    state->StatResultType = (PyObject *)PyStructSequence_NewType(&stat_result_desc);
19133|      2|    if (PyModule_AddObjectRef(m, "stat_result", state->StatResultType) < 0) {
  ------------------
  |  Branch (19133:9): [True: 0, False: 2]
  ------------------
19134|      0|        return -1;
19135|      0|    }
19136|      2|    state->statresult_new_orig = ((PyTypeObject *)state->StatResultType)->tp_new;
19137|      2|    ((PyTypeObject *)state->StatResultType)->tp_new = statresult_new;
19138|       |
19139|      2|    state->StatVFSResultType = (PyObject *)PyStructSequence_NewType(&statvfs_result_desc);
19140|      2|    if (PyModule_AddObjectRef(m, "statvfs_result", state->StatVFSResultType) < 0) {
  ------------------
  |  Branch (19140:9): [True: 0, False: 2]
  ------------------
19141|      0|        return -1;
19142|      0|    }
19143|       |
19144|      2|#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
19145|      2|    state->SchedParamType = (PyObject *)PyStructSequence_NewType(&sched_param_desc);
19146|      2|    if (PyModule_AddObjectRef(m, "sched_param", state->SchedParamType) < 0) {
  ------------------
  |  Branch (19146:9): [True: 0, False: 2]
  ------------------
19147|      0|        return -1;
19148|      0|    }
19149|      2|    ((PyTypeObject *)state->SchedParamType)->tp_new = os_sched_param;
19150|      2|    if (_PyType_AddMethod((PyTypeObject *)state->SchedParamType,
  ------------------
  |  Branch (19150:9): [True: 0, False: 2]
  ------------------
19151|      2|                          &os_sched_param_reduce_method) < 0)
19152|      0|    {
19153|      0|        return -1;
19154|      0|    }
19155|      2|    PyType_Modified((PyTypeObject *)state->SchedParamType);
19156|      2|#endif
19157|       |
19158|       |    /* initialize TerminalSize_info */
19159|      2|    state->TerminalSizeType = (PyObject *)PyStructSequence_NewType(&TerminalSize_desc);
19160|      2|    if (PyModule_AddObjectRef(m, "terminal_size", state->TerminalSizeType) < 0) {
  ------------------
  |  Branch (19160:9): [True: 0, False: 2]
  ------------------
19161|      0|        return -1;
19162|      0|    }
19163|       |
19164|       |    /* initialize scandir types */
19165|      2|    PyObject *ScandirIteratorType = PyType_FromModuleAndSpec(m, &ScandirIteratorType_spec, NULL);
19166|      2|    if (ScandirIteratorType == NULL) {
  ------------------
  |  Branch (19166:9): [True: 0, False: 2]
  ------------------
19167|      0|        return -1;
19168|      0|    }
19169|      2|    state->ScandirIteratorType = ScandirIteratorType;
19170|       |
19171|      2|    state->DirEntryType = PyType_FromModuleAndSpec(m, &DirEntryType_spec, NULL);
19172|      2|    if (PyModule_AddObjectRef(m, "DirEntry", state->DirEntryType) < 0) {
  ------------------
  |  Branch (19172:9): [True: 0, False: 2]
  ------------------
19173|      0|        return -1;
19174|      0|    }
19175|       |
19176|      2|    state->TimesResultType = (PyObject *)PyStructSequence_NewType(&times_result_desc);
19177|      2|    if (PyModule_AddObjectRef(m, "times_result", state->TimesResultType) < 0) {
  ------------------
  |  Branch (19177:9): [True: 0, False: 2]
  ------------------
19178|      0|        return -1;
19179|      0|    }
19180|       |
19181|      2|    state->UnameResultType = (PyObject *)PyStructSequence_NewType(&uname_result_desc);
19182|      2|    if (PyModule_AddObjectRef(m, "uname_result", state->UnameResultType) < 0) {
  ------------------
  |  Branch (19182:9): [True: 0, False: 2]
  ------------------
19183|      0|        return -1;
19184|      0|    }
19185|       |
19186|      2|    if ((state->billion = PyLong_FromLong(1000000000)) == NULL)
  ------------------
  |  Branch (19186:9): [True: 0, False: 2]
  ------------------
19187|      0|        return -1;
19188|      2|#if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
19189|      2|    state->struct_rusage = PyUnicode_InternFromString("struct_rusage");
19190|      2|    if (state->struct_rusage == NULL)
  ------------------
  |  Branch (19190:9): [True: 0, False: 2]
  ------------------
19191|      0|        return -1;
19192|      2|#endif
19193|      2|    state->st_mode = PyUnicode_InternFromString("st_mode");
19194|      2|    if (state->st_mode == NULL)
  ------------------
  |  Branch (19194:9): [True: 0, False: 2]
  ------------------
19195|      0|        return -1;
19196|       |
19197|       |    /* suppress "function not used" warnings */
19198|      2|    {
19199|      2|    int ignored;
19200|      2|    fd_specified("", -1);
19201|      2|    follow_symlinks_specified("", 1);
19202|      2|    dir_fd_and_follow_symlinks_invalid("chmod", DEFAULT_DIR_FD, 1);
  ------------------
  |  | 1158|      2|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
19203|      2|    dir_fd_converter(Py_None, &ignored);
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
19204|      2|    dir_fd_unavailable(Py_None, &ignored);
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
19205|      2|    }
19206|       |
19207|       |    /*
19208|       |     * provide list of locally available functions
19209|       |     * so os.py can populate support_* lists
19210|       |     */
19211|      2|    PyObject *list = PyList_New(0);
19212|      2|    if (!list) {
  ------------------
  |  Branch (19212:9): [True: 0, False: 2]
  ------------------
19213|      0|        return -1;
19214|      0|    }
19215|     66|    for (const struct have_function *trace = have_functions; trace->label; trace++) {
  ------------------
  |  Branch (19215:62): [True: 64, False: 2]
  ------------------
19216|     64|        PyObject *unicode;
19217|     64|        if (trace->probe && !trace->probe()) continue;
  ------------------
  |  Branch (19217:13): [True: 34, False: 30]
  |  Branch (19217:29): [True: 0, False: 34]
  ------------------
19218|     64|        unicode = PyUnicode_DecodeASCII(trace->label, strlen(trace->label), NULL);
19219|     64|        if (!unicode)
  ------------------
  |  Branch (19219:13): [True: 0, False: 64]
  ------------------
19220|      0|            return -1;
19221|     64|        if (PyList_Append(list, unicode))
  ------------------
  |  Branch (19221:13): [True: 0, False: 64]
  ------------------
19222|      0|            return -1;
19223|     64|        Py_DECREF(unicode);
  ------------------
  |  |  430|     64|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     64|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     64|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
19224|     64|    }
19225|       |
19226|      2|#ifndef MS_WINDOWS
19227|      2|    if (_Py_GetTicksPerSecond(&state->ticks_per_second) < 0) {
  ------------------
  |  Branch (19227:9): [True: 0, False: 2]
  ------------------
19228|      0|        PyErr_SetString(PyExc_RuntimeError,
19229|      0|                        "cannot read ticks_per_second");
19230|      0|        return -1;
19231|      0|    }
19232|      2|    assert(state->ticks_per_second >= 1);
  ------------------
  |  Branch (19232:5): [True: 2, False: 0]
  ------------------
19233|      2|#endif
19234|       |
19235|      2|    return PyModule_Add(m, "_have_functions", list);
19236|      2|}
posixmodule.c:all_ins:
18128|      2|{
18129|      2|#ifdef F_OK
18130|      2|    if (PyModule_AddIntMacro(m, F_OK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18131|      2|#endif
18132|      2|#ifdef R_OK
18133|      2|    if (PyModule_AddIntMacro(m, R_OK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18134|      2|#endif
18135|      2|#ifdef W_OK
18136|      2|    if (PyModule_AddIntMacro(m, W_OK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18137|      2|#endif
18138|      2|#ifdef X_OK
18139|      2|    if (PyModule_AddIntMacro(m, X_OK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18140|      2|#endif
18141|      2|#ifdef NGROUPS_MAX
18142|      2|    if (PyModule_AddIntMacro(m, NGROUPS_MAX)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18143|      2|#endif
18144|      2|#ifdef TMP_MAX
18145|      2|    if (PyModule_AddIntMacro(m, TMP_MAX)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18146|      2|#endif
18147|      2|#ifdef WCONTINUED
18148|      2|    if (PyModule_AddIntMacro(m, WCONTINUED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18149|      2|#endif
18150|      2|#ifdef WNOHANG
18151|      2|    if (PyModule_AddIntMacro(m, WNOHANG)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18152|      2|#endif
18153|      2|#ifdef WUNTRACED
18154|      2|    if (PyModule_AddIntMacro(m, WUNTRACED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18155|      2|#endif
18156|      2|#ifdef O_RDONLY
18157|      2|    if (PyModule_AddIntMacro(m, O_RDONLY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18158|      2|#endif
18159|      2|#ifdef O_WRONLY
18160|      2|    if (PyModule_AddIntMacro(m, O_WRONLY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18161|      2|#endif
18162|      2|#ifdef O_RDWR
18163|      2|    if (PyModule_AddIntMacro(m, O_RDWR)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18164|      2|#endif
18165|      2|#ifdef O_NDELAY
18166|      2|    if (PyModule_AddIntMacro(m, O_NDELAY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18167|      2|#endif
18168|      2|#ifdef O_NONBLOCK
18169|      2|    if (PyModule_AddIntMacro(m, O_NONBLOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18170|      2|#endif
18171|      2|#ifdef O_APPEND
18172|      2|    if (PyModule_AddIntMacro(m, O_APPEND)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18173|      2|#endif
18174|      2|#ifdef O_DSYNC
18175|      2|    if (PyModule_AddIntMacro(m, O_DSYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18176|      2|#endif
18177|      2|#ifdef O_RSYNC
18178|      2|    if (PyModule_AddIntMacro(m, O_RSYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18179|      2|#endif
18180|      2|#ifdef O_SYNC
18181|      2|    if (PyModule_AddIntMacro(m, O_SYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18182|      2|#endif
18183|      2|#ifdef O_NOCTTY
18184|      2|    if (PyModule_AddIntMacro(m, O_NOCTTY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18185|      2|#endif
18186|      2|#ifdef O_CREAT
18187|      2|    if (PyModule_AddIntMacro(m, O_CREAT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18188|      2|#endif
18189|      2|#ifdef O_EXCL
18190|      2|    if (PyModule_AddIntMacro(m, O_EXCL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18191|      2|#endif
18192|      2|#ifdef O_TRUNC
18193|      2|    if (PyModule_AddIntMacro(m, O_TRUNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18194|      2|#endif
18195|       |#ifdef O_BINARY
18196|       |    if (PyModule_AddIntMacro(m, O_BINARY)) return -1;
18197|       |#endif
18198|       |#ifdef O_TEXT
18199|       |    if (PyModule_AddIntMacro(m, O_TEXT)) return -1;
18200|       |#endif
18201|       |#ifdef O_XATTR
18202|       |    if (PyModule_AddIntMacro(m, O_XATTR)) return -1;
18203|       |#endif
18204|      2|#ifdef O_LARGEFILE
18205|      2|    if (PyModule_AddIntMacro(m, O_LARGEFILE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18206|      2|#endif
18207|      2|#ifndef __GNU__
18208|       |#ifdef O_SHLOCK
18209|       |    if (PyModule_AddIntMacro(m, O_SHLOCK)) return -1;
18210|       |#endif
18211|       |#ifdef O_EXLOCK
18212|       |    if (PyModule_AddIntMacro(m, O_EXLOCK)) return -1;
18213|       |#endif
18214|      2|#endif
18215|       |#ifdef O_EXEC
18216|       |    if (PyModule_AddIntMacro(m, O_EXEC)) return -1;
18217|       |#endif
18218|       |#ifdef O_SEARCH
18219|       |    if (PyModule_AddIntMacro(m, O_SEARCH)) return -1;
18220|       |#endif
18221|      2|#ifdef O_PATH
18222|      2|    if (PyModule_AddIntMacro(m, O_PATH)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18223|      2|#endif
18224|       |#ifdef O_TTY_INIT
18225|       |    if (PyModule_AddIntMacro(m, O_TTY_INIT)) return -1;
18226|       |#endif
18227|      2|#ifdef O_TMPFILE
18228|      2|    if (PyModule_AddIntMacro(m, O_TMPFILE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18229|      2|#endif
18230|      2|#ifdef PRIO_PROCESS
18231|      2|    if (PyModule_AddIntMacro(m, PRIO_PROCESS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18232|      2|#endif
18233|      2|#ifdef PRIO_PGRP
18234|      2|    if (PyModule_AddIntMacro(m, PRIO_PGRP)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18235|      2|#endif
18236|      2|#ifdef PRIO_USER
18237|      2|    if (PyModule_AddIntMacro(m, PRIO_USER)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18238|      2|#endif
18239|       |#ifdef PRIO_DARWIN_THREAD
18240|       |    if (PyModule_AddIntMacro(m, PRIO_DARWIN_THREAD)) return -1;
18241|       |#endif
18242|       |#ifdef PRIO_DARWIN_PROCESS
18243|       |    if (PyModule_AddIntMacro(m, PRIO_DARWIN_PROCESS)) return -1;
18244|       |#endif
18245|       |#ifdef PRIO_DARWIN_BG
18246|       |    if (PyModule_AddIntMacro(m, PRIO_DARWIN_BG)) return -1;
18247|       |#endif
18248|       |#ifdef PRIO_DARWIN_NONUI
18249|       |    if (PyModule_AddIntMacro(m, PRIO_DARWIN_NONUI)) return -1;
18250|       |#endif
18251|      2|#ifdef O_CLOEXEC
18252|      2|    if (PyModule_AddIntMacro(m, O_CLOEXEC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18253|      2|#endif
18254|      2|#ifdef O_ACCMODE
18255|      2|    if (PyModule_AddIntMacro(m, O_ACCMODE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18256|      2|#endif
18257|       |#ifdef O_EVTONLY
18258|       |    if (PyModule_AddIntMacro(m, O_EVTONLY)) return -1;
18259|       |#endif
18260|      2|#ifdef O_FSYNC
18261|      2|    if (PyModule_AddIntMacro(m, O_FSYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18262|      2|#endif
18263|       |#ifdef O_SYMLINK
18264|       |    if (PyModule_AddIntMacro(m, O_SYMLINK)) return -1;
18265|       |#endif
18266|       |
18267|      2|#ifdef SEEK_HOLE
18268|      2|    if (PyModule_AddIntMacro(m, SEEK_HOLE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18269|      2|#endif
18270|      2|#ifdef SEEK_DATA
18271|      2|    if (PyModule_AddIntMacro(m, SEEK_DATA)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18272|      2|#endif
18273|       |
18274|       |/* MS Windows */
18275|       |#ifdef O_NOINHERIT
18276|       |    /* Don't inherit in child processes. */
18277|       |    if (PyModule_AddIntMacro(m, O_NOINHERIT)) return -1;
18278|       |#endif
18279|       |#ifdef _O_SHORT_LIVED
18280|       |    /* Optimize for short life (keep in memory). */
18281|       |    /* MS forgot to define this one with a non-underscore form too. */
18282|       |    if (PyModule_AddIntConstant(m, "O_SHORT_LIVED", _O_SHORT_LIVED)) return -1;
18283|       |#endif
18284|       |#ifdef O_TEMPORARY
18285|       |    /* Automatically delete when last handle is closed. */
18286|       |    if (PyModule_AddIntMacro(m, O_TEMPORARY)) return -1;
18287|       |#endif
18288|       |#ifdef O_RANDOM
18289|       |    /* Optimize for random access. */
18290|       |    if (PyModule_AddIntMacro(m, O_RANDOM)) return -1;
18291|       |#endif
18292|       |#ifdef O_SEQUENTIAL
18293|       |    /* Optimize for sequential access. */
18294|       |    if (PyModule_AddIntMacro(m, O_SEQUENTIAL)) return -1;
18295|       |#endif
18296|       |
18297|       |/* GNU extensions. */
18298|      2|#ifdef O_ASYNC
18299|       |    /* Send a SIGIO signal whenever input or output
18300|       |       becomes available on file descriptor */
18301|      2|    if (PyModule_AddIntMacro(m, O_ASYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18302|      2|#endif
18303|      2|#ifdef O_DIRECT
18304|       |    /* Direct disk access. */
18305|      2|    if (PyModule_AddIntMacro(m, O_DIRECT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18306|      2|#endif
18307|      2|#ifdef O_DIRECTORY
18308|       |    /* Must be a directory.      */
18309|      2|    if (PyModule_AddIntMacro(m, O_DIRECTORY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18310|      2|#endif
18311|      2|#ifdef O_NOFOLLOW
18312|       |    /* Do not follow links.      */
18313|      2|    if (PyModule_AddIntMacro(m, O_NOFOLLOW)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18314|      2|#endif
18315|       |#ifdef O_NOFOLLOW_ANY
18316|       |    if (PyModule_AddIntMacro(m, O_NOFOLLOW_ANY)) return -1;
18317|       |#endif
18318|       |#ifdef O_NOLINKS
18319|       |    /* Fails if link count of the named file is greater than 1 */
18320|       |    if (PyModule_AddIntMacro(m, O_NOLINKS)) return -1;
18321|       |#endif
18322|      2|#ifdef O_NOATIME
18323|       |    /* Do not update the access time. */
18324|      2|    if (PyModule_AddIntMacro(m, O_NOATIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18325|      2|#endif
18326|       |
18327|       |    /* These come from sysexits.h */
18328|      2|#ifdef EX_OK
18329|      2|    if (PyModule_AddIntMacro(m, EX_OK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18330|      2|#endif /* EX_OK */
18331|      2|#ifdef EX_USAGE
18332|      2|    if (PyModule_AddIntMacro(m, EX_USAGE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18333|      2|#endif /* EX_USAGE */
18334|      2|#ifdef EX_DATAERR
18335|      2|    if (PyModule_AddIntMacro(m, EX_DATAERR)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18336|      2|#endif /* EX_DATAERR */
18337|      2|#ifdef EX_NOINPUT
18338|      2|    if (PyModule_AddIntMacro(m, EX_NOINPUT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18339|      2|#endif /* EX_NOINPUT */
18340|      2|#ifdef EX_NOUSER
18341|      2|    if (PyModule_AddIntMacro(m, EX_NOUSER)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18342|      2|#endif /* EX_NOUSER */
18343|      2|#ifdef EX_NOHOST
18344|      2|    if (PyModule_AddIntMacro(m, EX_NOHOST)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18345|      2|#endif /* EX_NOHOST */
18346|      2|#ifdef EX_UNAVAILABLE
18347|      2|    if (PyModule_AddIntMacro(m, EX_UNAVAILABLE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18348|      2|#endif /* EX_UNAVAILABLE */
18349|      2|#ifdef EX_SOFTWARE
18350|      2|    if (PyModule_AddIntMacro(m, EX_SOFTWARE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18351|      2|#endif /* EX_SOFTWARE */
18352|      2|#ifdef EX_OSERR
18353|      2|    if (PyModule_AddIntMacro(m, EX_OSERR)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18354|      2|#endif /* EX_OSERR */
18355|      2|#ifdef EX_OSFILE
18356|      2|    if (PyModule_AddIntMacro(m, EX_OSFILE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18357|      2|#endif /* EX_OSFILE */
18358|      2|#ifdef EX_CANTCREAT
18359|      2|    if (PyModule_AddIntMacro(m, EX_CANTCREAT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18360|      2|#endif /* EX_CANTCREAT */
18361|      2|#ifdef EX_IOERR
18362|      2|    if (PyModule_AddIntMacro(m, EX_IOERR)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18363|      2|#endif /* EX_IOERR */
18364|      2|#ifdef EX_TEMPFAIL
18365|      2|    if (PyModule_AddIntMacro(m, EX_TEMPFAIL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18366|      2|#endif /* EX_TEMPFAIL */
18367|      2|#ifdef EX_PROTOCOL
18368|      2|    if (PyModule_AddIntMacro(m, EX_PROTOCOL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18369|      2|#endif /* EX_PROTOCOL */
18370|      2|#ifdef EX_NOPERM
18371|      2|    if (PyModule_AddIntMacro(m, EX_NOPERM)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18372|      2|#endif /* EX_NOPERM */
18373|      2|#ifdef EX_CONFIG
18374|      2|    if (PyModule_AddIntMacro(m, EX_CONFIG)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18375|      2|#endif /* EX_CONFIG */
18376|       |#ifdef EX_NOTFOUND
18377|       |    if (PyModule_AddIntMacro(m, EX_NOTFOUND)) return -1;
18378|       |#endif /* EX_NOTFOUND */
18379|       |
18380|       |    /* statvfs */
18381|      2|#ifdef ST_RDONLY
18382|      2|    if (PyModule_AddIntMacro(m, ST_RDONLY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18383|      2|#endif /* ST_RDONLY */
18384|      2|#ifdef ST_NOSUID
18385|      2|    if (PyModule_AddIntMacro(m, ST_NOSUID)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18386|      2|#endif /* ST_NOSUID */
18387|       |
18388|       |       /* GNU extensions */
18389|      2|#ifdef ST_NODEV
18390|      2|    if (PyModule_AddIntMacro(m, ST_NODEV)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18391|      2|#endif /* ST_NODEV */
18392|      2|#ifdef ST_NOEXEC
18393|      2|    if (PyModule_AddIntMacro(m, ST_NOEXEC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18394|      2|#endif /* ST_NOEXEC */
18395|      2|#ifdef ST_SYNCHRONOUS
18396|      2|    if (PyModule_AddIntMacro(m, ST_SYNCHRONOUS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18397|      2|#endif /* ST_SYNCHRONOUS */
18398|      2|#ifdef ST_MANDLOCK
18399|      2|    if (PyModule_AddIntMacro(m, ST_MANDLOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18400|      2|#endif /* ST_MANDLOCK */
18401|      2|#ifdef ST_WRITE
18402|      2|    if (PyModule_AddIntMacro(m, ST_WRITE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18403|      2|#endif /* ST_WRITE */
18404|      2|#ifdef ST_APPEND
18405|      2|    if (PyModule_AddIntMacro(m, ST_APPEND)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18406|      2|#endif /* ST_APPEND */
18407|      2|#ifdef ST_NOATIME
18408|      2|    if (PyModule_AddIntMacro(m, ST_NOATIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18409|      2|#endif /* ST_NOATIME */
18410|      2|#ifdef ST_NODIRATIME
18411|      2|    if (PyModule_AddIntMacro(m, ST_NODIRATIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18412|      2|#endif /* ST_NODIRATIME */
18413|      2|#ifdef ST_RELATIME
18414|      2|    if (PyModule_AddIntMacro(m, ST_RELATIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18415|      2|#endif /* ST_RELATIME */
18416|       |
18417|       |    /* FreeBSD sendfile() constants */
18418|       |#ifdef SF_NODISKIO
18419|       |    if (PyModule_AddIntMacro(m, SF_NODISKIO)) return -1;
18420|       |#endif
18421|       |    /* is obsolete since the 11.x release */
18422|       |#ifdef SF_MNOWAIT
18423|       |    if (PyModule_AddIntMacro(m, SF_MNOWAIT)) return -1;
18424|       |#endif
18425|       |#ifdef SF_SYNC
18426|       |    if (PyModule_AddIntMacro(m, SF_SYNC)) return -1;
18427|       |#endif
18428|       |#ifdef SF_NOCACHE
18429|       |    if (PyModule_AddIntMacro(m, SF_NOCACHE)) return -1;
18430|       |#endif
18431|       |
18432|      2|#ifdef TFD_NONBLOCK
18433|      2|    if (PyModule_AddIntMacro(m, TFD_NONBLOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18434|      2|#endif
18435|      2|#ifdef TFD_CLOEXEC
18436|      2|    if (PyModule_AddIntMacro(m, TFD_CLOEXEC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18437|      2|#endif
18438|      2|#ifdef TFD_TIMER_ABSTIME
18439|      2|    if (PyModule_AddIntMacro(m, TFD_TIMER_ABSTIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18440|      2|#endif
18441|      2|#ifdef TFD_TIMER_CANCEL_ON_SET
18442|      2|    if (PyModule_AddIntMacro(m, TFD_TIMER_CANCEL_ON_SET)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18443|      2|#endif
18444|       |
18445|       |    /* constants for posix_fadvise */
18446|      2|#ifdef POSIX_FADV_NORMAL
18447|      2|    if (PyModule_AddIntMacro(m, POSIX_FADV_NORMAL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18448|      2|#endif
18449|      2|#ifdef POSIX_FADV_SEQUENTIAL
18450|      2|    if (PyModule_AddIntMacro(m, POSIX_FADV_SEQUENTIAL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18451|      2|#endif
18452|      2|#ifdef POSIX_FADV_RANDOM
18453|      2|    if (PyModule_AddIntMacro(m, POSIX_FADV_RANDOM)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18454|      2|#endif
18455|      2|#ifdef POSIX_FADV_NOREUSE
18456|      2|    if (PyModule_AddIntMacro(m, POSIX_FADV_NOREUSE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18457|      2|#endif
18458|      2|#ifdef POSIX_FADV_WILLNEED
18459|      2|    if (PyModule_AddIntMacro(m, POSIX_FADV_WILLNEED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18460|      2|#endif
18461|      2|#ifdef POSIX_FADV_DONTNEED
18462|      2|    if (PyModule_AddIntMacro(m, POSIX_FADV_DONTNEED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18463|      2|#endif
18464|       |
18465|       |    /* constants for waitid */
18466|      2|#if defined(HAVE_SYS_WAIT_H) && defined(HAVE_WAITID)
18467|      2|    if (PyModule_AddIntMacro(m, P_PID)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18468|      2|    if (PyModule_AddIntMacro(m, P_PGID)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18469|      2|    if (PyModule_AddIntMacro(m, P_ALL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18470|      2|#ifdef P_PIDFD
18471|      2|    if (PyModule_AddIntMacro(m, P_PIDFD)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18472|      2|#endif
18473|       |#ifdef PIDFD_NONBLOCK
18474|       |    if (PyModule_AddIntMacro(m, PIDFD_NONBLOCK)) return -1;
18475|       |#endif
18476|      2|#endif
18477|      2|#ifdef WEXITED
18478|      2|    if (PyModule_AddIntMacro(m, WEXITED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18479|      2|#endif
18480|      2|#ifdef WNOWAIT
18481|      2|    if (PyModule_AddIntMacro(m, WNOWAIT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18482|      2|#endif
18483|      2|#ifdef WSTOPPED
18484|      2|    if (PyModule_AddIntMacro(m, WSTOPPED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18485|      2|#endif
18486|      2|#ifdef CLD_EXITED
18487|      2|    if (PyModule_AddIntMacro(m, CLD_EXITED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18488|      2|#endif
18489|      2|#ifdef CLD_KILLED
18490|      2|    if (PyModule_AddIntMacro(m, CLD_KILLED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18491|      2|#endif
18492|      2|#ifdef CLD_DUMPED
18493|      2|    if (PyModule_AddIntMacro(m, CLD_DUMPED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18494|      2|#endif
18495|      2|#ifdef CLD_TRAPPED
18496|      2|    if (PyModule_AddIntMacro(m, CLD_TRAPPED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18497|      2|#endif
18498|      2|#ifdef CLD_STOPPED
18499|      2|    if (PyModule_AddIntMacro(m, CLD_STOPPED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18500|      2|#endif
18501|      2|#ifdef CLD_CONTINUED
18502|      2|    if (PyModule_AddIntMacro(m, CLD_CONTINUED)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18503|      2|#endif
18504|       |
18505|       |    /* constants for lockf */
18506|      2|#ifdef F_LOCK
18507|      2|    if (PyModule_AddIntMacro(m, F_LOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18508|      2|#endif
18509|      2|#ifdef F_TLOCK
18510|      2|    if (PyModule_AddIntMacro(m, F_TLOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18511|      2|#endif
18512|      2|#ifdef F_ULOCK
18513|      2|    if (PyModule_AddIntMacro(m, F_ULOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18514|      2|#endif
18515|      2|#ifdef F_TEST
18516|      2|    if (PyModule_AddIntMacro(m, F_TEST)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18517|      2|#endif
18518|       |
18519|      2|#ifdef RWF_DSYNC
18520|      2|    if (PyModule_AddIntConstant(m, "RWF_DSYNC", RWF_DSYNC)) return -1;
  ------------------
  |  Branch (18520:9): [True: 0, False: 2]
  ------------------
18521|      2|#endif
18522|      2|#ifdef RWF_HIPRI
18523|      2|    if (PyModule_AddIntConstant(m, "RWF_HIPRI", RWF_HIPRI)) return -1;
  ------------------
  |  Branch (18523:9): [True: 0, False: 2]
  ------------------
18524|      2|#endif
18525|      2|#ifdef RWF_SYNC
18526|      2|    if (PyModule_AddIntConstant(m, "RWF_SYNC", RWF_SYNC)) return -1;
  ------------------
  |  Branch (18526:9): [True: 0, False: 2]
  ------------------
18527|      2|#endif
18528|      2|#ifdef RWF_NOWAIT
18529|      2|    if (PyModule_AddIntConstant(m, "RWF_NOWAIT", RWF_NOWAIT)) return -1;
  ------------------
  |  Branch (18529:9): [True: 0, False: 2]
  ------------------
18530|      2|#endif
18531|       |#ifdef RWF_DONTCACHE
18532|       |    if (PyModule_AddIntConstant(m, "RWF_DONTCACHE", RWF_DONTCACHE)) return -1;
18533|       |#endif
18534|       |#ifdef RWF_ATOMIC
18535|       |    if (PyModule_AddIntConstant(m, "RWF_ATOMIC", RWF_ATOMIC)) return -1;
18536|       |#endif
18537|      2|#ifdef RWF_APPEND
18538|      2|    if (PyModule_AddIntConstant(m, "RWF_APPEND", RWF_APPEND)) return -1;
  ------------------
  |  Branch (18538:9): [True: 0, False: 2]
  ------------------
18539|      2|#endif
18540|       |#ifdef RWF_NOSIGNAL
18541|       |    if (PyModule_AddIntConstant(m, "RWF_NOSIGNAL", RWF_NOSIGNAL)) return -1;
18542|       |#endif
18543|       |
18544|       |/* constants for splice */
18545|      2|#if defined(HAVE_SPLICE) && defined(__linux__)
18546|      2|    if (PyModule_AddIntConstant(m, "SPLICE_F_MOVE", SPLICE_F_MOVE)) return -1;
  ------------------
  |  Branch (18546:9): [True: 0, False: 2]
  ------------------
18547|      2|    if (PyModule_AddIntConstant(m, "SPLICE_F_NONBLOCK", SPLICE_F_NONBLOCK)) return -1;
  ------------------
  |  Branch (18547:9): [True: 0, False: 2]
  ------------------
18548|      2|    if (PyModule_AddIntConstant(m, "SPLICE_F_MORE", SPLICE_F_MORE)) return -1;
  ------------------
  |  Branch (18548:9): [True: 0, False: 2]
  ------------------
18549|      2|#endif
18550|       |
18551|       |/* constants for posix_spawn */
18552|      2|#ifdef HAVE_POSIX_SPAWN
18553|      2|    if (PyModule_AddIntConstant(m, "POSIX_SPAWN_OPEN", POSIX_SPAWN_OPEN)) return -1;
  ------------------
  |  Branch (18553:9): [True: 0, False: 2]
  ------------------
18554|      2|    if (PyModule_AddIntConstant(m, "POSIX_SPAWN_CLOSE", POSIX_SPAWN_CLOSE)) return -1;
  ------------------
  |  Branch (18554:9): [True: 0, False: 2]
  ------------------
18555|      2|    if (PyModule_AddIntConstant(m, "POSIX_SPAWN_DUP2", POSIX_SPAWN_DUP2)) return -1;
  ------------------
  |  Branch (18555:9): [True: 0, False: 2]
  ------------------
18556|       |#ifdef HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSEFROM_NP
18557|       |    if (PyModule_AddIntMacro(m, POSIX_SPAWN_CLOSEFROM)) return -1;
18558|       |#endif
18559|      2|#endif
18560|       |
18561|       |#if defined(HAVE_SPAWNV) || defined (HAVE_RTPSPAWN)
18562|       |    if (PyModule_AddIntConstant(m, "P_WAIT", _P_WAIT)) return -1;
18563|       |    if (PyModule_AddIntConstant(m, "P_NOWAIT", _P_NOWAIT)) return -1;
18564|       |    if (PyModule_AddIntConstant(m, "P_NOWAITO", _P_NOWAITO)) return -1;
18565|       |#endif
18566|       |#ifdef HAVE_SPAWNV
18567|       |    if (PyModule_AddIntConstant(m, "P_OVERLAY", _OLD_P_OVERLAY)) return -1;
18568|       |    if (PyModule_AddIntConstant(m, "P_DETACH", _P_DETACH)) return -1;
18569|       |#endif
18570|       |
18571|      2|#ifdef HAVE_SCHED_H
18572|      2|#ifdef SCHED_OTHER
18573|      2|    if (PyModule_AddIntMacro(m, SCHED_OTHER)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18574|      2|#endif
18575|      2|#ifdef SCHED_DEADLINE
18576|      2|    if (PyModule_AddIntMacro(m, SCHED_DEADLINE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18577|      2|#endif
18578|      2|#ifdef SCHED_FIFO
18579|      2|    if (PyModule_AddIntMacro(m, SCHED_FIFO)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18580|      2|#endif
18581|      2|#ifdef SCHED_NORMAL
18582|      2|    if (PyModule_AddIntMacro(m, SCHED_NORMAL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18583|      2|#endif
18584|      2|#ifdef SCHED_RR
18585|      2|    if (PyModule_AddIntMacro(m, SCHED_RR)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18586|      2|#endif
18587|       |#ifdef SCHED_SPORADIC
18588|       |    if (PyModule_AddIntMacro(m, SCHED_SPORADIC)) return -1;
18589|       |#endif
18590|      2|#ifdef SCHED_BATCH
18591|      2|    if (PyModule_AddIntMacro(m, SCHED_BATCH)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18592|      2|#endif
18593|      2|#ifdef SCHED_IDLE
18594|      2|    if (PyModule_AddIntMacro(m, SCHED_IDLE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18595|      2|#endif
18596|      2|#ifdef SCHED_RESET_ON_FORK
18597|      2|    if (PyModule_AddIntMacro(m, SCHED_RESET_ON_FORK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18598|      2|#endif
18599|       |#ifdef SCHED_SYS
18600|       |    if (PyModule_AddIntMacro(m, SCHED_SYS)) return -1;
18601|       |#endif
18602|       |#ifdef SCHED_IA
18603|       |    if (PyModule_AddIntMacro(m, SCHED_IA)) return -1;
18604|       |#endif
18605|       |#ifdef SCHED_FSS
18606|       |    if (PyModule_AddIntMacro(m, SCHED_FSS)) return -1;
18607|       |#endif
18608|       |#ifdef SCHED_FX
18609|       |    if (PyModule_AddIntConstant(m, "SCHED_FX", SCHED_FSS)) return -1;
18610|       |#endif
18611|       |
18612|       |/* constants for namespaces */
18613|      2|#if defined(HAVE_SETNS) || defined(HAVE_UNSHARE)
18614|      2|#ifdef CLONE_FS
18615|      2|    if (PyModule_AddIntMacro(m, CLONE_FS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18616|      2|#endif
18617|      2|#ifdef CLONE_FILES
18618|      2|    if (PyModule_AddIntMacro(m, CLONE_FILES)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18619|      2|#endif
18620|      2|#ifdef CLONE_NEWNS
18621|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWNS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18622|      2|#endif
18623|      2|#ifdef CLONE_NEWCGROUP
18624|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWCGROUP)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18625|      2|#endif
18626|      2|#ifdef CLONE_NEWUTS
18627|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWUTS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18628|      2|#endif
18629|      2|#ifdef CLONE_NEWIPC
18630|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWIPC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18631|      2|#endif
18632|      2|#ifdef CLONE_NEWUSER
18633|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWUSER)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18634|      2|#endif
18635|      2|#ifdef CLONE_NEWPID
18636|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWPID)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18637|      2|#endif
18638|      2|#ifdef CLONE_NEWNET
18639|      2|    if (PyModule_AddIntMacro(m, CLONE_NEWNET)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18640|      2|#endif
18641|       |#ifdef CLONE_NEWTIME
18642|       |    if (PyModule_AddIntMacro(m, CLONE_NEWTIME)) return -1;
18643|       |#endif
18644|      2|#ifdef CLONE_SYSVSEM
18645|      2|    if (PyModule_AddIntMacro(m, CLONE_SYSVSEM)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18646|      2|#endif
18647|      2|#ifdef CLONE_THREAD
18648|      2|    if (PyModule_AddIntMacro(m, CLONE_THREAD)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18649|      2|#endif
18650|      2|#ifdef CLONE_SIGHAND
18651|      2|    if (PyModule_AddIntMacro(m, CLONE_SIGHAND)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18652|      2|#endif
18653|      2|#ifdef CLONE_VM
18654|      2|    if (PyModule_AddIntMacro(m, CLONE_VM)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18655|      2|#endif
18656|      2|#endif
18657|       |
18658|      2|#endif
18659|       |
18660|      2|#ifdef USE_XATTRS
18661|      2|    if (PyModule_AddIntMacro(m, XATTR_CREATE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18662|      2|    if (PyModule_AddIntMacro(m, XATTR_REPLACE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18663|      2|    if (PyModule_AddIntMacro(m, XATTR_SIZE_MAX)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18664|      2|#endif
18665|       |
18666|      2|#if HAVE_DECL_RTLD_LAZY
18667|      2|    if (PyModule_AddIntMacro(m, RTLD_LAZY)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18668|      2|#endif
18669|      2|#if HAVE_DECL_RTLD_NOW
18670|      2|    if (PyModule_AddIntMacro(m, RTLD_NOW)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18671|      2|#endif
18672|      2|#if HAVE_DECL_RTLD_GLOBAL
18673|      2|    if (PyModule_AddIntMacro(m, RTLD_GLOBAL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18674|      2|#endif
18675|      2|#if HAVE_DECL_RTLD_LOCAL
18676|      2|    if (PyModule_AddIntMacro(m, RTLD_LOCAL)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18677|      2|#endif
18678|      2|#if HAVE_DECL_RTLD_NODELETE
18679|      2|    if (PyModule_AddIntMacro(m, RTLD_NODELETE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18680|      2|#endif
18681|      2|#if HAVE_DECL_RTLD_NOLOAD
18682|      2|    if (PyModule_AddIntMacro(m, RTLD_NOLOAD)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18683|      2|#endif
18684|      2|#if HAVE_DECL_RTLD_DEEPBIND
18685|      2|    if (PyModule_AddIntMacro(m, RTLD_DEEPBIND)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18686|      2|#endif
18687|       |#if HAVE_DECL_RTLD_MEMBER
18688|       |    if (PyModule_AddIntMacro(m, RTLD_MEMBER)) return -1;
18689|       |#endif
18690|       |
18691|      2|#if defined(HAVE_GETRANDOM) || defined(HAVE_GETRANDOM_SYSCALL)
18692|      2|    if (PyModule_AddIntMacro(m, GRND_RANDOM)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18693|      2|    if (PyModule_AddIntMacro(m, GRND_NONBLOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18694|      2|#endif
18695|      2|#ifdef _Py_HAVE_MEMFD_CREATE
18696|      2|    if (PyModule_AddIntMacro(m, MFD_CLOEXEC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18697|      2|    if (PyModule_AddIntMacro(m, MFD_ALLOW_SEALING)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18698|      2|#ifdef MFD_HUGETLB
18699|      2|    if (PyModule_AddIntMacro(m, MFD_HUGETLB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18700|      2|#endif
18701|      2|#ifdef MFD_HUGE_SHIFT
18702|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_SHIFT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18703|      2|#endif
18704|      2|#ifdef MFD_HUGE_MASK
18705|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_MASK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18706|      2|#endif
18707|      2|#ifdef MFD_HUGE_64KB
18708|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_64KB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18709|      2|#endif
18710|      2|#ifdef MFD_HUGE_512KB
18711|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_512KB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18712|      2|#endif
18713|      2|#ifdef MFD_HUGE_1MB
18714|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_1MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18715|      2|#endif
18716|      2|#ifdef MFD_HUGE_2MB
18717|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_2MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18718|      2|#endif
18719|      2|#ifdef MFD_HUGE_8MB
18720|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_8MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18721|      2|#endif
18722|      2|#ifdef MFD_HUGE_16MB
18723|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_16MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18724|      2|#endif
18725|      2|#ifdef MFD_HUGE_32MB
18726|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_32MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18727|      2|#endif
18728|      2|#ifdef MFD_HUGE_256MB
18729|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_256MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18730|      2|#endif
18731|      2|#ifdef MFD_HUGE_512MB
18732|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_512MB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18733|      2|#endif
18734|      2|#ifdef MFD_HUGE_1GB
18735|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_1GB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18736|      2|#endif
18737|      2|#ifdef MFD_HUGE_2GB
18738|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_2GB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18739|      2|#endif
18740|      2|#ifdef MFD_HUGE_16GB
18741|      2|    if (PyModule_AddIntMacro(m, MFD_HUGE_16GB)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18742|      2|#endif
18743|      2|#endif /* _Py_HAVE_MEMFD_CREATE */
18744|       |
18745|      2|#if defined(HAVE_EVENTFD) && defined(EFD_CLOEXEC)
18746|      2|    if (PyModule_AddIntMacro(m, EFD_CLOEXEC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18747|      2|#ifdef EFD_NONBLOCK
18748|      2|    if (PyModule_AddIntMacro(m, EFD_NONBLOCK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18749|      2|#endif
18750|      2|#ifdef EFD_SEMAPHORE
18751|      2|    if (PyModule_AddIntMacro(m, EFD_SEMAPHORE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18752|      2|#endif
18753|      2|#endif  /* HAVE_EVENTFD && EFD_CLOEXEC */
18754|       |
18755|      2|#ifdef NODEV
18756|      2|    if (PyModule_Add(m, "NODEV", _PyLong_FromDev(NODEV))) return -1;
  ------------------
  |  Branch (18756:9): [True: 0, False: 2]
  ------------------
18757|      2|#endif
18758|       |
18759|      2|#ifdef AT_NO_AUTOMOUNT
18760|      2|    if (PyModule_AddIntMacro(m, AT_NO_AUTOMOUNT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18761|      2|#endif
18762|       |
18763|      2|#ifdef HAVE_STATX
18764|      2|    if (PyModule_AddIntMacro(m, STATX_TYPE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18765|      2|    if (PyModule_AddIntMacro(m, STATX_MODE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18766|      2|    if (PyModule_AddIntMacro(m, STATX_NLINK)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18767|      2|    if (PyModule_AddIntMacro(m, STATX_UID)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18768|      2|    if (PyModule_AddIntMacro(m, STATX_GID)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18769|      2|    if (PyModule_AddIntMacro(m, STATX_ATIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18770|      2|    if (PyModule_AddIntMacro(m, STATX_MTIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18771|      2|    if (PyModule_AddIntMacro(m, STATX_CTIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18772|      2|    if (PyModule_AddIntMacro(m, STATX_INO)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18773|      2|    if (PyModule_AddIntMacro(m, STATX_SIZE)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18774|      2|    if (PyModule_AddIntMacro(m, STATX_BLOCKS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18775|      2|    if (PyModule_AddIntMacro(m, STATX_BASIC_STATS)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18776|      2|    if (PyModule_AddIntMacro(m, STATX_BTIME)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18777|       |#ifdef STATX_MNT_ID
18778|       |    if (PyModule_AddIntMacro(m, STATX_MNT_ID)) return -1;
18779|       |#endif
18780|       |#ifdef STATX_DIOALIGN
18781|       |    if (PyModule_AddIntMacro(m, STATX_DIOALIGN)) return -1;
18782|       |#endif
18783|       |#ifdef STATX_MNT_ID_UNIQUE
18784|       |    if (PyModule_AddIntMacro(m, STATX_MNT_ID_UNIQUE)) return -1;
18785|       |#endif
18786|       |#ifdef STATX_SUBVOL
18787|       |    if (PyModule_AddIntMacro(m, STATX_SUBVOL)) return -1;
18788|       |#endif
18789|       |#ifdef STATX_WRITE_ATOMIC
18790|       |    if (PyModule_AddIntMacro(m, STATX_WRITE_ATOMIC)) return -1;
18791|       |#endif
18792|       |#ifdef STATX_DIO_READ_ALIGN
18793|       |    if (PyModule_AddIntMacro(m, STATX_DIO_READ_ALIGN)) return -1;
18794|       |#endif
18795|       |    /* STATX_ALL intentionally omitted because it is deprecated */
18796|      2|    if (PyModule_AddIntMacro(m, AT_STATX_SYNC_AS_STAT)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18797|      2|    if (PyModule_AddIntMacro(m, AT_STATX_FORCE_SYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18798|      2|    if (PyModule_AddIntMacro(m, AT_STATX_DONT_SYNC)) return -1;
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  |  |  ------------------
  |  |  |  Branch (47:36): [True: 0, False: 2]
  |  |  ------------------
  ------------------
18799|       |    /* STATX_ATTR_* constants are in the stat module */
18800|      2|#endif /* HAVE_STATX */
18801|       |
18802|       |#if defined(__APPLE__)
18803|       |    if (PyModule_AddIntConstant(m, "_COPYFILE_DATA", COPYFILE_DATA)) return -1;
18804|       |    if (PyModule_AddIntConstant(m, "_COPYFILE_STAT", COPYFILE_STAT)) return -1;
18805|       |    if (PyModule_AddIntConstant(m, "_COPYFILE_ACL", COPYFILE_ACL)) return -1;
18806|       |    if (PyModule_AddIntConstant(m, "_COPYFILE_XATTR", COPYFILE_XATTR)) return -1;
18807|       |#endif
18808|       |
18809|       |#ifdef MS_WINDOWS
18810|       |    if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_DEFAULT_DIRS", LOAD_LIBRARY_SEARCH_DEFAULT_DIRS)) return -1;
18811|       |    if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_APPLICATION_DIR", LOAD_LIBRARY_SEARCH_APPLICATION_DIR)) return -1;
18812|       |    if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_SYSTEM32", LOAD_LIBRARY_SEARCH_SYSTEM32)) return -1;
18813|       |    if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_USER_DIRS", LOAD_LIBRARY_SEARCH_USER_DIRS)) return -1;
18814|       |    if (PyModule_AddIntConstant(m, "_LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR", LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)) return -1;
18815|       |#endif
18816|       |
18817|      2|    return 0;
18818|      2|}
posixmodule.c:setup_confname_tables:
15362|      2|{
15363|      2|#if defined(HAVE_FPATHCONF) || defined(HAVE_PATHCONF)
15364|      2|    if (setup_confname_table(posix_constants_pathconf,
  ------------------
  |  Branch (15364:9): [True: 0, False: 2]
  ------------------
15365|      2|                             sizeof(posix_constants_pathconf)
15366|      2|                               / sizeof(struct constdef),
15367|      2|                             "pathconf_names", module))
15368|      0|        return -1;
15369|      2|#endif
15370|      2|#ifdef HAVE_CONFSTR
15371|      2|    if (setup_confname_table(posix_constants_confstr,
  ------------------
  |  Branch (15371:9): [True: 0, False: 2]
  ------------------
15372|      2|                             sizeof(posix_constants_confstr)
15373|      2|                               / sizeof(struct constdef),
15374|      2|                             "confstr_names", module))
15375|      0|        return -1;
15376|      2|#endif
15377|      2|#ifdef HAVE_SYSCONF
15378|      2|    if (setup_confname_table(posix_constants_sysconf,
  ------------------
  |  Branch (15378:9): [True: 0, False: 2]
  ------------------
15379|      2|                             sizeof(posix_constants_sysconf)
15380|      2|                               / sizeof(struct constdef),
15381|      2|                             "sysconf_names", module))
15382|      0|        return -1;
15383|      2|#endif
15384|      2|    return 0;
15385|      2|}
posixmodule.c:setup_confname_table:
15342|      6|{
15343|      6|    PyObject *d = PyDict_New();
15344|      6|    if (d == NULL)
  ------------------
  |  Branch (15344:9): [True: 0, False: 6]
  ------------------
15345|      0|        return -1;
15346|       |
15347|    368|    for (size_t i=0; i < tablesize; ++i) {
  ------------------
  |  Branch (15347:22): [True: 362, False: 6]
  ------------------
15348|    362|        PyObject *o = PyLong_FromLong(table[i].value);
15349|    362|        if (o == NULL || PyDict_SetItemString(d, table[i].name, o) == -1) {
  ------------------
  |  Branch (15349:13): [True: 0, False: 362]
  |  Branch (15349:26): [True: 0, False: 362]
  ------------------
15350|      0|            Py_XDECREF(o);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15351|      0|            Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15352|      0|            return -1;
15353|      0|        }
15354|    362|        Py_DECREF(o);
  ------------------
  |  |  430|    362|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    362|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    362|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15355|    362|    }
15356|      6|    return PyModule_Add(module, tablename, d);
15357|      6|}
posixmodule.c:fd_specified:
 1627|      2|{
 1628|      2|    if (fd == -1)
  ------------------
  |  Branch (1628:9): [True: 2, False: 0]
  ------------------
 1629|      2|        return 0;
 1630|       |
 1631|      0|    argument_unavailable_error(function_name, "fd");
 1632|      0|    return 1;
 1633|      2|}
posixmodule.c:dir_fd_unavailable:
 1613|      2|{
 1614|      2|    int dir_fd;
 1615|      2|    if (!dir_fd_converter(o, &dir_fd))
  ------------------
  |  Branch (1615:9): [True: 0, False: 2]
  ------------------
 1616|      0|        return 0;
 1617|      2|    if (dir_fd != DEFAULT_DIR_FD) {
  ------------------
  |  | 1158|      2|#define DEFAULT_DIR_FD (int)AT_FDCWD
  ------------------
  |  Branch (1617:9): [True: 0, False: 2]
  ------------------
 1618|      0|        argument_unavailable_error(NULL, "dir_fd");
 1619|      0|        return 0;
 1620|      0|    }
 1621|      2|    *(int *)p = dir_fd;
 1622|      2|    return 1;
 1623|      2|}
posixmodule.c:probe_faccessat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_fchmodat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_fchownat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_fdopendir:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_fstatat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_futimens:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_linkat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_mkdirat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_mkfifoat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_mknodat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_openat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_readlinkat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_renameat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_symlinkat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_unlinkat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_utimensat:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:probe_ptsname_r:
18824|      2|   {                      \
18825|      2|      if (test) {        \
  ------------------
  |  Branch (18825:11): [True: 2, Folded]
  ------------------
18826|      2|          return 1;       \
18827|      2|      } else {            \
18828|      0|          return 0;       \
18829|      0|      }                   \
18830|      2|   }
posixmodule.c:_posix_traverse:
 2631|     20|{
 2632|     20|    _posixstate *state = get_posix_state(module);
 2633|     20|    Py_VISIT(state->billion);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2634|     20|    Py_VISIT(state->DirEntryType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2635|     20|    Py_VISIT(state->ScandirIteratorType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2636|     20|#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
 2637|     20|    Py_VISIT(state->SchedParamType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2638|     20|#endif
 2639|     20|    Py_VISIT(state->StatResultType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2640|     20|#ifdef HAVE_STATX
 2641|     20|    Py_VISIT(state->StatxResultType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2642|     20|#endif
 2643|     20|    Py_VISIT(state->StatVFSResultType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2644|     20|    Py_VISIT(state->TerminalSizeType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2645|     20|    Py_VISIT(state->TimesResultType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2646|     20|    Py_VISIT(state->UnameResultType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2647|     20|#if defined(HAVE_WAITID)
 2648|     20|    Py_VISIT(state->WaitidResultType);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2649|     20|#endif
 2650|     20|#if defined(HAVE_WAIT3) || defined(HAVE_WAIT4)
 2651|     20|    Py_VISIT(state->struct_rusage);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2652|     20|#endif
 2653|     20|    Py_VISIT(state->st_mode);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2654|     20|    return 0;
 2655|     20|}

PyErr_CheckSignals:
 1775|   861k|{
 1776|   861k|    PyThreadState *tstate = _PyThreadState_GET();
 1777|       |
 1778|       |    /* Opportunistically check if the GC is scheduled to run and run it
 1779|       |       if we have a request. This is done here because native code needs
 1780|       |       to call this API if is going to run for some time without executing
 1781|       |       Python code to ensure signals are handled. Checking for the GC here
 1782|       |       allows long running native code to clean cycles created using the C-API
 1783|       |       even if it doesn't run the evaluation loop */
 1784|   861k|    uintptr_t breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker);
 1785|   861k|    if (breaker & _PY_GC_SCHEDULED_BIT) {
  ------------------
  |  |  349|   861k|#define _PY_GC_SCHEDULED_BIT (1U << 4)
  ------------------
  |  Branch (1785:9): [True: 8.18k, False: 853k]
  ------------------
 1786|  8.18k|        _Py_unset_eval_breaker_bit(tstate, _PY_GC_SCHEDULED_BIT);
  ------------------
  |  |  349|  8.18k|#define _PY_GC_SCHEDULED_BIT (1U << 4)
  ------------------
 1787|  8.18k|        _Py_RunGC(tstate);
 1788|  8.18k|    }
 1789|   861k|    if (breaker & _PY_ASYNC_EXCEPTION_BIT) {
  ------------------
  |  |  348|   861k|#define _PY_ASYNC_EXCEPTION_BIT (1U << 3)
  ------------------
  |  Branch (1789:9): [True: 0, False: 861k]
  ------------------
 1790|      0|        if (_PyEval_RaiseAsyncExc(tstate) < 0) {
  ------------------
  |  Branch (1790:13): [True: 0, False: 0]
  ------------------
 1791|      0|            return -1;
 1792|      0|        }
 1793|      0|    }
 1794|       |
 1795|   861k|#if defined(Py_REMOTE_DEBUG) && defined(Py_SUPPORTS_REMOTE_DEBUG)
 1796|   861k|    _PyRunRemoteDebugger(tstate);
 1797|   861k|#endif
 1798|       |
 1799|   861k|    if (_Py_ThreadCanHandleSignals(tstate->interp)) {
  ------------------
  |  Branch (1799:9): [True: 861k, False: 0]
  ------------------
 1800|   861k|        if (_PyErr_CheckSignalsTstate(tstate) < 0) {
  ------------------
  |  Branch (1800:13): [True: 0, False: 861k]
  ------------------
 1801|      0|            return -1;
 1802|      0|        }
 1803|   861k|    }
 1804|       |
 1805|   861k|    return 0;
 1806|   861k|}
_PyErr_CheckSignalsTstate:
 1812|   861k|{
 1813|   861k|    _Py_CHECK_EMSCRIPTEN_SIGNALS();
 1814|   861k|    if (!_Py_atomic_load_int(&is_tripped)) {
  ------------------
  |  |  112|   861k|#define is_tripped _PyRuntime.signals.is_tripped
  ------------------
  |  Branch (1814:9): [True: 861k, False: 0]
  ------------------
 1815|   861k|        return 0;
 1816|   861k|    }
 1817|       |
 1818|       |    /*
 1819|       |     * The is_tripped variable is meant to speed up the calls to
 1820|       |     * PyErr_CheckSignals (both directly or via pending calls) when no
 1821|       |     * signal has arrived. This variable is set to 1 when a signal arrives
 1822|       |     * and it is set to 0 here, when we know some signals arrived. This way
 1823|       |     * we can run the registered handlers with no signals blocked.
 1824|       |     *
 1825|       |     * NOTE: with this approach we can have a situation where is_tripped is
 1826|       |     *       1 but we have no more signals to handle (Handlers[i].tripped
 1827|       |     *       is 0 for every signal i). This won't do us any harm (except
 1828|       |     *       we're gonna spent some cycles for nothing). This happens when
 1829|       |     *       we receive a signal i after we zero is_tripped and before we
 1830|       |     *       check Handlers[i].tripped.
 1831|       |     */
 1832|      0|    _Py_atomic_store_int(&is_tripped, 0);
  ------------------
  |  |  112|      0|#define is_tripped _PyRuntime.signals.is_tripped
  ------------------
 1833|       |
 1834|      0|    _PyInterpreterFrame *frame = _PyThreadState_GetFrame(tstate);
 1835|      0|    signal_state_t *state = &signal_global_state;
  ------------------
  |  |  116|      0|#define signal_global_state _PyRuntime.signals
  ------------------
 1836|      0|    for (int i = 1; i < Py_NSIG; i++) {
  ------------------
  |  |   26|      0|#  define Py_NSIG NSIG
  ------------------
  |  Branch (1836:21): [True: 0, False: 0]
  ------------------
 1837|      0|        if (!_Py_atomic_load_int_relaxed(&Handlers[i].tripped)) {
  ------------------
  |  |  110|      0|#define Handlers _PyRuntime.signals.handlers
  ------------------
  |  Branch (1837:13): [True: 0, False: 0]
  ------------------
 1838|      0|            continue;
 1839|      0|        }
 1840|      0|        _Py_atomic_store_int_relaxed(&Handlers[i].tripped, 0);
  ------------------
  |  |  110|      0|#define Handlers _PyRuntime.signals.handlers
  ------------------
 1841|       |
 1842|       |        /* Signal handlers can be modified while a signal is received,
 1843|       |         * and therefore the fact that trip_signal() or PyErr_SetInterrupt()
 1844|       |         * was called doesn't guarantee that there is still a Python
 1845|       |         * signal handler for it by the time PyErr_CheckSignals() is called
 1846|       |         * (see bpo-43406).
 1847|       |         */
 1848|      0|        PyObject *func = get_handler(i);
 1849|      0|        if (func == NULL || func == Py_None ||
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1849:13): [True: 0, False: 0]
  |  Branch (1849:29): [True: 0, False: 0]
  ------------------
 1850|      0|            compare_handler(func, state->ignore_handler) ||
  ------------------
  |  Branch (1850:13): [True: 0, False: 0]
  ------------------
 1851|      0|            compare_handler(func, state->default_handler)) {
  ------------------
  |  Branch (1851:13): [True: 0, False: 0]
  ------------------
 1852|       |            /* No Python signal handler due to aforementioned race condition.
 1853|       |             * We can't call raise() as it would break the assumption
 1854|       |             * that PyErr_SetInterrupt() only *simulates* an incoming
 1855|       |             * signal (i.e. it will never kill the process).
 1856|       |             * We also don't want to interrupt user code with a cryptic
 1857|       |             * asynchronous exception, so instead just write out an
 1858|       |             * unraisable error.
 1859|       |             */
 1860|      0|            PyErr_Format(PyExc_OSError,
 1861|      0|                         "Signal %i ignored due to race condition",
 1862|      0|                         i);
 1863|      0|            PyErr_FormatUnraisable("Exception ignored while "
 1864|      0|                                   "calling signal handler");
 1865|      0|            continue;
 1866|      0|        }
 1867|      0|        PyObject *arglist = NULL;
 1868|      0|        if (frame == NULL) {
  ------------------
  |  Branch (1868:13): [True: 0, False: 0]
  ------------------
 1869|      0|            arglist = Py_BuildValue("(iO)", i, Py_None);
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1870|      0|        }
 1871|      0|        else {
 1872|      0|            PyFrameObject *f = _PyFrame_GetFrameObject(frame);
 1873|      0|            if (f != NULL) {
  ------------------
  |  Branch (1873:17): [True: 0, False: 0]
  ------------------
 1874|      0|                arglist = Py_BuildValue("(iO)", i, f);
 1875|      0|            }
 1876|      0|        }
 1877|      0|        PyObject *result;
 1878|      0|        if (arglist) {
  ------------------
  |  Branch (1878:13): [True: 0, False: 0]
  ------------------
 1879|      0|            result = _PyObject_Call(tstate, func, arglist, NULL);
 1880|      0|            Py_DECREF(arglist);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1881|      0|        }
 1882|      0|        else {
 1883|      0|            result = NULL;
 1884|      0|        }
 1885|      0|        if (!result) {
  ------------------
  |  Branch (1885:13): [True: 0, False: 0]
  ------------------
 1886|       |            /* On error, re-schedule a call to _PyErr_CheckSignalsTstate() */
 1887|      0|            _Py_atomic_store_int(&is_tripped, 1);
  ------------------
  |  |  112|      0|#define is_tripped _PyRuntime.signals.is_tripped
  ------------------
 1888|      0|            return -1;
 1889|      0|        }
 1890|       |
 1891|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1892|      0|    }
 1893|       |
 1894|      0|    return 0;
 1895|      0|}
_PySignal_Init:
 1982|      2|{
 1983|      2|    signal_state_t *state = &signal_global_state;
  ------------------
  |  |  116|      2|#define signal_global_state _PyRuntime.signals
  ------------------
 1984|       |
 1985|      2|    state->default_handler = PyLong_FromVoidPtr((void *)SIG_DFL);
 1986|      2|    if (state->default_handler == NULL) {
  ------------------
  |  Branch (1986:9): [True: 0, False: 2]
  ------------------
 1987|      0|        return -1;
 1988|      0|    }
 1989|       |
 1990|      2|    state->ignore_handler = PyLong_FromVoidPtr((void *)SIG_IGN);
 1991|      2|    if (state->ignore_handler == NULL) {
  ------------------
  |  Branch (1991:9): [True: 0, False: 2]
  ------------------
 1992|      0|        return -1;
 1993|      0|    }
 1994|       |
 1995|       |#ifdef MS_WINDOWS
 1996|       |    /* Create manual-reset event, initially unset */
 1997|       |    state->sigint_event = (void *)CreateEvent(NULL, TRUE, FALSE, FALSE);
 1998|       |    if (state->sigint_event == NULL) {
 1999|       |        PyErr_SetFromWindowsErr(0);
 2000|       |        return -1;
 2001|       |    }
 2002|       |#endif
 2003|       |
 2004|    130|    for (int signum = 1; signum < Py_NSIG; signum++) {
  ------------------
  |  |   26|    130|#  define Py_NSIG NSIG
  ------------------
  |  Branch (2004:26): [True: 128, False: 2]
  ------------------
 2005|    128|        _Py_atomic_store_int_relaxed(&Handlers[signum].tripped, 0);
  ------------------
  |  |  110|    128|#define Handlers _PyRuntime.signals.handlers
  ------------------
 2006|    128|    }
 2007|       |
 2008|      2|    if (install_signal_handlers) {
  ------------------
  |  Branch (2008:9): [True: 0, False: 2]
  ------------------
 2009|      0|        if (signal_install_handlers() < 0) {
  ------------------
  |  Branch (2009:13): [True: 0, False: 0]
  ------------------
 2010|      0|            return -1;
 2011|      0|        }
 2012|      0|    }
 2013|       |
 2014|      2|    return 0;
 2015|      2|}

PyInit_time:
 2273|      2|{
 2274|      2|    return PyModuleDef_Init(&timemodule);
 2275|      2|}
timemodule.c:get_time_state:
   92|     22|{
   93|     22|    void *state = _PyModule_GetState(module);
   94|     22|    assert(state != NULL);
  ------------------
  |  Branch (94:5): [True: 22, False: 0]
  ------------------
   95|     22|    return (time_module_state *)state;
   96|     22|}
timemodule.c:init_timezone:
 1847|      2|{
 1848|      2|#define ADD_INT(NAME, VALUE) do {                       \
 1849|      2|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
 1850|      2|        return -1;                                      \
 1851|      2|    }                                                   \
 1852|      2|} while (0)
 1853|       |
 1854|      2|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (1854:5): [True: 2, False: 0]
  ------------------
 1855|       |
 1856|       |    /* This code moved from PyInit_time wholesale to allow calling it from
 1857|       |    time_tzset. In the future, some parts of it can be moved back
 1858|       |    (for platforms that don't HAVE_WORKING_TZSET, when we know what they
 1859|       |    are), and the extraneous calls to tzset(3) should be removed.
 1860|       |    I haven't done this yet, as I don't want to change this code as
 1861|       |    little as possible when introducing the time.tzset and time.tzsetwall
 1862|       |    methods. This should simply be a method of doing the following once,
 1863|       |    at the top of this function and removing the call to tzset() from
 1864|       |    time_tzset():
 1865|       |
 1866|       |        #ifdef HAVE_TZSET
 1867|       |        tzset()
 1868|       |        #endif
 1869|       |
 1870|       |    And I'm lazy and hate C so nyer.
 1871|       |     */
 1872|       |#ifdef HAVE_DECL_TZNAME
 1873|       |    PyObject *otz0, *otz1;
 1874|       |#if !defined(MS_WINDOWS) || defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM)
 1875|       |    tzset();
 1876|       |#endif
 1877|       |    ADD_INT("timezone", _Py_timezone);
 1878|       |#ifdef HAVE_ALTZONE
 1879|       |    ADD_INT("altzone", altzone);
 1880|       |#else
 1881|       |    ADD_INT("altzone", _Py_timezone-3600);
 1882|       |#endif
 1883|       |    ADD_INT("daylight", _Py_daylight);
 1884|       |#ifdef MS_WINDOWS
 1885|       |    TIME_ZONE_INFORMATION tzinfo = {0};
 1886|       |    GetTimeZoneInformation(&tzinfo);
 1887|       |    otz0 = PyUnicode_FromWideChar(tzinfo.StandardName, -1);
 1888|       |    if (otz0 == NULL) {
 1889|       |        return -1;
 1890|       |    }
 1891|       |    otz1 = PyUnicode_FromWideChar(tzinfo.DaylightName, -1);
 1892|       |    if (otz1 == NULL) {
 1893|       |        Py_DECREF(otz0);
 1894|       |        return -1;
 1895|       |    }
 1896|       |#else
 1897|       |    otz0 = PyUnicode_DecodeLocale(_Py_tzname[0], "surrogateescape");
 1898|       |    if (otz0 == NULL) {
 1899|       |        return -1;
 1900|       |    }
 1901|       |    otz1 = PyUnicode_DecodeLocale(_Py_tzname[1], "surrogateescape");
 1902|       |    if (otz1 == NULL) {
 1903|       |        Py_DECREF(otz0);
 1904|       |        return -1;
 1905|       |    }
 1906|       |#endif // MS_WINDOWS
 1907|       |    if (PyModule_Add(m, "tzname", Py_BuildValue("(NN)", otz0, otz1)) < 0) {
 1908|       |        return -1;
 1909|       |    }
 1910|       |#else // !HAVE_DECL_TZNAME
 1911|      2|    static const time_t YEAR = (365 * 24 + 6) * 3600;
 1912|      2|    time_t t;
 1913|      2|    struct tm p;
 1914|      2|    time_t janzone_t, julyzone_t;
 1915|      2|    char janname[10], julyname[10];
 1916|      2|    t = (time((time_t *)0) / YEAR) * YEAR;
 1917|      2|    _PyTime_localtime(t, &p);
 1918|      2|    get_zone(janname, 9, &p);
 1919|      2|    janzone_t = -get_gmtoff(t, &p);
 1920|      2|    janname[9] = '\0';
 1921|      2|    t += YEAR/2;
 1922|      2|    _PyTime_localtime(t, &p);
 1923|      2|    get_zone(julyname, 9, &p);
 1924|      2|    julyzone_t = -get_gmtoff(t, &p);
 1925|      2|    julyname[9] = '\0';
 1926|       |
 1927|       |    /* Sanity check, don't check for the validity of timezones.
 1928|       |       In practice, it should be more in range -12 hours .. +14 hours. */
 1929|      2|#define MAX_TIMEZONE (48 * 3600)
 1930|      2|    if (janzone_t < -MAX_TIMEZONE || janzone_t > MAX_TIMEZONE
  ------------------
  |  | 1929|      4|#define MAX_TIMEZONE (48 * 3600)
  ------------------
                  if (janzone_t < -MAX_TIMEZONE || janzone_t > MAX_TIMEZONE
  ------------------
  |  | 1929|      4|#define MAX_TIMEZONE (48 * 3600)
  ------------------
  |  Branch (1930:9): [True: 0, False: 2]
  |  Branch (1930:38): [True: 0, False: 2]
  ------------------
 1931|      2|        || julyzone_t < -MAX_TIMEZONE || julyzone_t > MAX_TIMEZONE)
  ------------------
  |  | 1929|      4|#define MAX_TIMEZONE (48 * 3600)
  ------------------
                      || julyzone_t < -MAX_TIMEZONE || julyzone_t > MAX_TIMEZONE)
  ------------------
  |  | 1929|      2|#define MAX_TIMEZONE (48 * 3600)
  ------------------
  |  Branch (1931:12): [True: 0, False: 2]
  |  Branch (1931:42): [True: 0, False: 2]
  ------------------
 1932|      0|    {
 1933|      0|        PyErr_SetString(PyExc_RuntimeError, "invalid GMT offset");
 1934|      0|        return -1;
 1935|      0|    }
 1936|      2|    int janzone = (int)janzone_t;
 1937|      2|    int julyzone = (int)julyzone_t;
 1938|       |
 1939|      2|    PyObject *tzname_obj;
 1940|      2|    if (janzone < julyzone) {
  ------------------
  |  Branch (1940:9): [True: 0, False: 2]
  ------------------
 1941|       |        /* DST is reversed in the southern hemisphere */
 1942|      0|        ADD_INT("timezone", julyzone);
  ------------------
  |  | 1848|      0|#define ADD_INT(NAME, VALUE) do {                       \
  |  | 1849|      0|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
  |  |  ------------------
  |  |  |  Branch (1849:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1850|      0|        return -1;                                      \
  |  | 1851|      0|    }                                                   \
  |  | 1852|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1852:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1943|      0|        ADD_INT("altzone", janzone);
  ------------------
  |  | 1848|      0|#define ADD_INT(NAME, VALUE) do {                       \
  |  | 1849|      0|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
  |  |  ------------------
  |  |  |  Branch (1849:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1850|      0|        return -1;                                      \
  |  | 1851|      0|    }                                                   \
  |  | 1852|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1852:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1944|      0|        ADD_INT("daylight", janzone != julyzone);
  ------------------
  |  | 1848|      0|#define ADD_INT(NAME, VALUE) do {                       \
  |  | 1849|      0|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
  |  |  ------------------
  |  |  |  Branch (1849:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1850|      0|        return -1;                                      \
  |  | 1851|      0|    }                                                   \
  |  | 1852|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1852:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1945|      0|        tzname_obj = Py_BuildValue("(zz)", julyname, janname);
 1946|      2|    } else {
 1947|      2|        ADD_INT("timezone", janzone);
  ------------------
  |  | 1848|      2|#define ADD_INT(NAME, VALUE) do {                       \
  |  | 1849|      2|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
  |  |  ------------------
  |  |  |  Branch (1849:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 1850|      0|        return -1;                                      \
  |  | 1851|      0|    }                                                   \
  |  | 1852|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (1852:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1948|      2|        ADD_INT("altzone", julyzone);
  ------------------
  |  | 1848|      2|#define ADD_INT(NAME, VALUE) do {                       \
  |  | 1849|      2|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
  |  |  ------------------
  |  |  |  Branch (1849:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 1850|      0|        return -1;                                      \
  |  | 1851|      0|    }                                                   \
  |  | 1852|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (1852:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1949|      2|        ADD_INT("daylight", janzone != julyzone);
  ------------------
  |  | 1848|      2|#define ADD_INT(NAME, VALUE) do {                       \
  |  | 1849|      2|    if (PyModule_AddIntConstant(m, NAME, VALUE) < 0) {  \
  |  |  ------------------
  |  |  |  Branch (1849:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 1850|      0|        return -1;                                      \
  |  | 1851|      0|    }                                                   \
  |  | 1852|      2|} while (0)
  |  |  ------------------
  |  |  |  Branch (1852:10): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1950|      2|        tzname_obj = Py_BuildValue("(zz)", janname, julyname);
 1951|      2|    }
 1952|      2|    if (PyModule_Add(m, "tzname", tzname_obj) < 0) {
  ------------------
  |  Branch (1952:9): [True: 0, False: 2]
  ------------------
 1953|      0|        return -1;
 1954|      0|    }
 1955|      2|#endif // !HAVE_DECL_TZNAME
 1956|      2|#undef ADD_INT
 1957|       |
 1958|      2|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1958:9): [True: 0, False: 2]
  ------------------
 1959|      0|        return -1;
 1960|      0|    }
 1961|      2|    return 0;
 1962|      2|}
timemodule.c:get_zone:
 1825|      4|{
 1826|      4|#ifdef HAVE_STRUCT_TM_TM_ZONE
 1827|      4|    strncpy(zone, p->tm_zone ? p->tm_zone : "   ", n);
  ------------------
  |  Branch (1827:19): [True: 4, False: 0]
  ------------------
 1828|       |#else
 1829|       |    tzset();
 1830|       |    strftime(zone, n, "%Z", p);
 1831|       |#endif
 1832|      4|}
timemodule.c:get_gmtoff:
 1836|      4|{
 1837|      4|#ifdef HAVE_STRUCT_TM_TM_ZONE
 1838|      4|    return p->tm_gmtoff;
 1839|       |#else
 1840|       |    return timegm(p) - t;
 1841|       |#endif
 1842|      4|}
timemodule.c:time_exec:
 2043|      2|{
 2044|      2|    time_module_state *state = get_time_state(module);
 2045|       |#if defined(__APPLE__) && defined(HAVE_CLOCK_GETTIME)
 2046|       |    if (HAVE_CLOCK_GETTIME_RUNTIME) {
 2047|       |        /* pass: ^^^ cannot use '!' here */
 2048|       |    } else {
 2049|       |        PyObject* dct = PyModule_GetDict(module);
 2050|       |        if (dct == NULL) {
 2051|       |            return -1;
 2052|       |        }
 2053|       |
 2054|       |        if (PyDict_PopString(dct, "clock_gettime", NULL) < 0) {
 2055|       |            return -1;
 2056|       |        }
 2057|       |        if (PyDict_PopString(dct, "clock_gettime_ns", NULL) < 0) {
 2058|       |            return -1;
 2059|       |        }
 2060|       |        if (PyDict_PopString(dct, "clock_settime", NULL) < 0) {
 2061|       |            return -1;
 2062|       |        }
 2063|       |        if (PyDict_PopString(dct, "clock_settime_ns", NULL) < 0) {
 2064|       |            return -1;
 2065|       |        }
 2066|       |        if (PyDict_PopString(dct, "clock_getres", NULL) < 0) {
 2067|       |            return -1;
 2068|       |        }
 2069|       |    }
 2070|       |#endif
 2071|       |#if defined(__APPLE__) && defined(HAVE_THREAD_TIME)
 2072|       |    if (HAVE_CLOCK_GETTIME_RUNTIME) {
 2073|       |        /* pass: ^^^ cannot use '!' here */
 2074|       |    } else {
 2075|       |        PyObject* dct = PyModule_GetDict(module);
 2076|       |
 2077|       |        if (PyDict_PopString(dct, "thread_time", NULL) < 0) {
 2078|       |            return -1;
 2079|       |        }
 2080|       |        if (PyDict_PopString(dct, "thread_time_ns", NULL) < 0) {
 2081|       |            return -1;
 2082|       |        }
 2083|       |    }
 2084|       |#endif
 2085|       |    /* Set, or reset, module variables like time.timezone */
 2086|      2|    if (init_timezone(module) < 0) {
  ------------------
  |  Branch (2086:9): [True: 0, False: 2]
  ------------------
 2087|      0|        return -1;
 2088|      0|    }
 2089|       |
 2090|      2|#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES)
 2091|      2|    if (HAVE_CLOCK_GETTIME_RUNTIME) {
  ------------------
  |  |   60|      2|#  define HAVE_CLOCK_GETTIME_RUNTIME 1
  |  |  ------------------
  |  |  |  Branch (60:38): [True: 2, Folded]
  |  |  ------------------
  ------------------
 2092|       |
 2093|      2|#ifdef CLOCK_REALTIME
 2094|      2|        if (PyModule_AddIntMacro(module, CLOCK_REALTIME) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2094:13): [True: 0, False: 2]
  ------------------
 2095|      0|            return -1;
 2096|      0|        }
 2097|      2|#endif
 2098|      2|#ifdef CLOCK_MONOTONIC
 2099|      2|        if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2099:13): [True: 0, False: 2]
  ------------------
 2100|      0|            return -1;
 2101|      0|        }
 2102|      2|#endif
 2103|      2|#ifdef CLOCK_MONOTONIC_RAW
 2104|      2|        if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2104:13): [True: 0, False: 2]
  ------------------
 2105|      0|            return -1;
 2106|      0|        }
 2107|      2|#endif
 2108|       |#ifdef CLOCK_HIGHRES
 2109|       |        if (PyModule_AddIntMacro(module, CLOCK_HIGHRES) < 0) {
 2110|       |            return -1;
 2111|       |        }
 2112|       |#endif
 2113|      2|#ifdef CLOCK_PROCESS_CPUTIME_ID
 2114|      2|        if (PyModule_AddIntMacro(module, CLOCK_PROCESS_CPUTIME_ID) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2114:13): [True: 0, False: 2]
  ------------------
 2115|      0|            return -1;
 2116|      0|        }
 2117|      2|#endif
 2118|      2|#ifdef CLOCK_THREAD_CPUTIME_ID
 2119|      2|        if (PyModule_AddIntMacro(module, CLOCK_THREAD_CPUTIME_ID) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2119:13): [True: 0, False: 2]
  ------------------
 2120|      0|            return -1;
 2121|      0|        }
 2122|      2|#endif
 2123|       |#ifdef CLOCK_PROF
 2124|       |        if (PyModule_AddIntMacro(module, CLOCK_PROF) < 0) {
 2125|       |            return -1;
 2126|       |        }
 2127|       |#endif
 2128|      2|#ifdef CLOCK_BOOTTIME
 2129|      2|        if (PyModule_AddIntMacro(module, CLOCK_BOOTTIME) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2129:13): [True: 0, False: 2]
  ------------------
 2130|      0|            return -1;
 2131|      0|        }
 2132|      2|#endif
 2133|      2|#ifdef CLOCK_TAI
 2134|      2|        if (PyModule_AddIntMacro(module, CLOCK_TAI) < 0) {
  ------------------
  |  |   47|      2|#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant((m), #c, (c))
  ------------------
  |  Branch (2134:13): [True: 0, False: 2]
  ------------------
 2135|      0|            return -1;
 2136|      0|        }
 2137|      2|#endif
 2138|       |#ifdef CLOCK_UPTIME
 2139|       |        if (PyModule_AddIntMacro(module, CLOCK_UPTIME) < 0) {
 2140|       |            return -1;
 2141|       |        }
 2142|       |#endif
 2143|       |#ifdef CLOCK_UPTIME_RAW
 2144|       |        if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW) < 0) {
 2145|       |            return -1;
 2146|       |        }
 2147|       |#endif
 2148|       |#ifdef CLOCK_MONOTONIC_RAW_APPROX
 2149|       |        if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW_APPROX) < 0) {
 2150|       |            return -1;
 2151|       |        }
 2152|       |#endif
 2153|       |#ifdef CLOCK_UPTIME_RAW_APPROX
 2154|       |        if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW_APPROX) < 0) {
 2155|       |            return -1;
 2156|       |        }
 2157|       |#endif
 2158|      2|    }
 2159|       |
 2160|      2|#endif  /* defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES) */
 2161|       |
 2162|      2|    if (PyModule_AddIntConstant(module, "_STRUCT_TM_ITEMS", 11)) {
  ------------------
  |  Branch (2162:9): [True: 0, False: 2]
  ------------------
 2163|      0|        return -1;
 2164|      0|    }
 2165|       |
 2166|       |    // struct_time type
 2167|      2|    state->struct_time_type = PyStructSequence_NewType(&struct_time_type_desc);
 2168|      2|    if (state->struct_time_type == NULL) {
  ------------------
  |  Branch (2168:9): [True: 0, False: 2]
  ------------------
 2169|      0|        return -1;
 2170|      0|    }
 2171|      2|    if (PyModule_AddType(module, state->struct_time_type)) {
  ------------------
  |  Branch (2171:9): [True: 0, False: 2]
  ------------------
 2172|      0|        return -1;
 2173|      0|    }
 2174|       |
 2175|       |#if defined(__linux__) && !defined(__GLIBC__)
 2176|       |    struct tm tm;
 2177|       |    const time_t zero = 0;
 2178|       |    if (gmtime_r(&zero, &tm) != NULL)
 2179|       |        utc_string = tm.tm_zone;
 2180|       |#endif
 2181|       |
 2182|       |#if defined(MS_WINDOWS)
 2183|       |    if (timer_flags == (DWORD)-1) {
 2184|       |        DWORD test_flags = CREATE_WAITABLE_TIMER_HIGH_RESOLUTION;
 2185|       |        HANDLE timer = CreateWaitableTimerExW(NULL, NULL, test_flags,
 2186|       |                                              TIMER_ALL_ACCESS);
 2187|       |        if (timer == NULL) {
 2188|       |            // CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is not supported.
 2189|       |            timer_flags = 0;
 2190|       |        }
 2191|       |        else {
 2192|       |            // CREATE_WAITABLE_TIMER_HIGH_RESOLUTION is supported.
 2193|       |            timer_flags = CREATE_WAITABLE_TIMER_HIGH_RESOLUTION;
 2194|       |            CloseHandle(timer);
 2195|       |        }
 2196|       |    }
 2197|       |#endif
 2198|       |
 2199|       |// gh-115714: Don't use times() on WASI.
 2200|      2|#if defined(HAVE_TIMES) && !defined(__wasi__)
 2201|      2|    long ticks_per_second;
 2202|      2|    if (_Py_GetTicksPerSecond(&ticks_per_second) < 0) {
  ------------------
  |  Branch (2202:9): [True: 0, False: 2]
  ------------------
 2203|      0|        PyErr_SetString(PyExc_RuntimeError,
 2204|      0|                        "cannot read ticks_per_second");
 2205|      0|        return -1;
 2206|      0|    }
 2207|      2|    if (_PyTimeFraction_Set(&state->times_base, SEC_TO_NS,
  ------------------
  |  |   64|      2|#define SEC_TO_NS (1000 * 1000 * 1000)
  ------------------
  |  Branch (2207:9): [True: 0, False: 2]
  ------------------
 2208|      2|                            ticks_per_second) < 0) {
 2209|      0|        PyErr_Format(PyExc_OverflowError, "ticks_per_second is too large");
 2210|      0|        return -1;
 2211|      0|    }
 2212|      2|#endif
 2213|       |
 2214|      2|#ifdef HAVE_CLOCK
 2215|      2|    if (_PyTimeFraction_Set(&state->clock_base, SEC_TO_NS,
  ------------------
  |  |   64|      2|#define SEC_TO_NS (1000 * 1000 * 1000)
  ------------------
  |  Branch (2215:9): [True: 0, False: 2]
  ------------------
 2216|      2|                            CLOCKS_PER_SEC) < 0) {
 2217|      0|        PyErr_Format(PyExc_OverflowError, "CLOCKS_PER_SEC is too large");
 2218|      0|        return -1;
 2219|      0|    }
 2220|      2|#endif
 2221|       |
 2222|      2|    return 0;
 2223|      2|}
timemodule.c:time_module_traverse:
 2228|     20|{
 2229|     20|    time_module_state *state = get_time_state(module);
 2230|     20|    Py_VISIT(state->struct_time_type);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 2231|     20|    return 0;
 2232|     20|}

PyObject_Type:
   46|      4|{
   47|      4|    PyObject *v;
   48|       |
   49|      4|    if (o == NULL) {
  ------------------
  |  Branch (49:9): [True: 0, False: 4]
  ------------------
   50|      0|        return null_error();
   51|      0|    }
   52|       |
   53|      4|    v = (PyObject *)Py_TYPE(o);
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   54|      4|    return Py_NewRef(v);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   55|      4|}
PyObject_Size:
   59|  1.54M|{
   60|  1.54M|    if (o == NULL) {
  ------------------
  |  Branch (60:9): [True: 0, False: 1.54M]
  ------------------
   61|      0|        null_error();
   62|      0|        return -1;
   63|      0|    }
   64|       |
   65|  1.54M|    PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
  ------------------
  |  |  213|  1.54M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.54M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.54M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  1.54M|    if (m && m->sq_length) {
  ------------------
  |  Branch (66:9): [True: 1.54M, False: 0]
  |  Branch (66:14): [True: 1.54M, False: 384]
  ------------------
   67|  1.54M|        Py_ssize_t len = m->sq_length(o);
   68|  1.54M|        assert(_Py_CheckSlotResult(o, "__len__", len >= 0));
  ------------------
  |  Branch (68:9): [True: 1.54M, False: 0]
  ------------------
   69|  1.54M|        return len;
   70|  1.54M|    }
   71|       |
   72|    384|    return PyMapping_Size(o);
   73|  1.54M|}
_PyObject_HasLen:
   84|    167|_PyObject_HasLen(PyObject *o) {
   85|    167|    return (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_length) ||
  ------------------
  |  |  213|    167|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_length) ||
  ------------------
  |  |  213|     43|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (85:13): [True: 43, False: 124]
  |  Branch (85:43): [True: 43, False: 0]
  ------------------
   86|    124|        (Py_TYPE(o)->tp_as_mapping && Py_TYPE(o)->tp_as_mapping->mp_length);
  ------------------
  |  |  213|    124|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    124|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    124|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      (Py_TYPE(o)->tp_as_mapping && Py_TYPE(o)->tp_as_mapping->mp_length);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (86:10): [True: 0, False: 124]
  |  Branch (86:39): [True: 0, False: 0]
  ------------------
   87|    167|}
PyObject_LengthHint:
   97|    166|{
   98|    166|    PyObject *hint, *result;
   99|    166|    Py_ssize_t res;
  100|    166|    if (_PyObject_HasLen(o)) {
  ------------------
  |  Branch (100:9): [True: 42, False: 124]
  ------------------
  101|     42|        res = PyObject_Length(o);
  ------------------
  |  |   81|     42|#define PyObject_Length PyObject_Size
  ------------------
  102|     42|        if (res < 0) {
  ------------------
  |  Branch (102:13): [True: 0, False: 42]
  ------------------
  103|      0|            PyThreadState *tstate = _PyThreadState_GET();
  104|      0|            assert(_PyErr_Occurred(tstate));
  ------------------
  |  Branch (104:13): [True: 0, False: 0]
  ------------------
  105|      0|            if (!_PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
  ------------------
  |  Branch (105:17): [True: 0, False: 0]
  ------------------
  106|      0|                return -1;
  107|      0|            }
  108|      0|            _PyErr_Clear(tstate);
  109|      0|        }
  110|     42|        else {
  111|     42|            return res;
  112|     42|        }
  113|     42|    }
  114|    124|    hint = _PyObject_LookupSpecial(o, &_Py_ID(__length_hint__));
  ------------------
  |  |  936|    124|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    124|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    124|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|    124|    if (hint == NULL) {
  ------------------
  |  Branch (115:9): [True: 39, False: 85]
  ------------------
  116|     39|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (116:13): [True: 0, False: 39]
  ------------------
  117|      0|            return -1;
  118|      0|        }
  119|     39|        return defaultvalue;
  120|     39|    }
  121|     85|    result = _PyObject_CallNoArgs(hint);
  122|     85|    Py_DECREF(hint);
  ------------------
  |  |  430|     85|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     85|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     85|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|     85|    if (result == NULL) {
  ------------------
  |  Branch (123:9): [True: 0, False: 85]
  ------------------
  124|      0|        PyThreadState *tstate = _PyThreadState_GET();
  125|      0|        if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
  ------------------
  |  Branch (125:13): [True: 0, False: 0]
  ------------------
  126|      0|            _PyErr_Clear(tstate);
  127|      0|            return defaultvalue;
  128|      0|        }
  129|      0|        return -1;
  130|      0|    }
  131|     85|    else if (result == Py_NotImplemented) {
  ------------------
  |  |  640|     85|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (131:14): [True: 0, False: 85]
  ------------------
  132|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|      0|        return defaultvalue;
  134|      0|    }
  135|     85|    if (!PyLong_Check(result)) {
  ------------------
  |  |   13|     85|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     85|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (135:9): [True: 0, False: 85]
  ------------------
  136|      0|        PyErr_Format(PyExc_TypeError,
  137|      0|                     "%T.__length_hint__() must return an int, not %T",
  138|      0|                     o, result);
  139|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|      0|        return -1;
  141|      0|    }
  142|     85|    res = PyLong_AsSsize_t(result);
  143|     85|    Py_DECREF(result);
  ------------------
  |  |  430|     85|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     85|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     85|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|     85|    if (res < 0 && PyErr_Occurred()) {
  ------------------
  |  Branch (144:9): [True: 0, False: 85]
  |  Branch (144:20): [True: 0, False: 0]
  ------------------
  145|      0|        return -1;
  146|      0|    }
  147|     85|    if (res < 0) {
  ------------------
  |  Branch (147:9): [True: 0, False: 85]
  ------------------
  148|      0|        PyErr_Format(PyExc_ValueError,
  149|      0|                     "%T.__length_hint__() must return a non-negative int", o);
  150|      0|        return -1;
  151|      0|    }
  152|     85|    return res;
  153|     85|}
PyObject_GetItem:
  157|  9.80M|{
  158|  9.80M|    if (o == NULL || key == NULL) {
  ------------------
  |  Branch (158:9): [True: 0, False: 9.80M]
  |  Branch (158:22): [True: 0, False: 9.80M]
  ------------------
  159|      0|        return null_error();
  160|      0|    }
  161|       |
  162|  9.80M|    PyMappingMethods *m = Py_TYPE(o)->tp_as_mapping;
  ------------------
  |  |  213|  9.80M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  9.80M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.80M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|  9.80M|    if (m && m->mp_subscript) {
  ------------------
  |  Branch (163:9): [True: 9.80M, False: 444]
  |  Branch (163:14): [True: 9.80M, False: 0]
  ------------------
  164|  9.80M|        PyObject *item = m->mp_subscript(o, key);
  165|  9.80M|        assert(_Py_CheckSlotResult(o, "__getitem__", item != NULL));
  ------------------
  |  Branch (165:9): [True: 9.80M, False: 0]
  ------------------
  166|  9.80M|        return item;
  167|  9.80M|    }
  168|       |
  169|    444|    PySequenceMethods *ms = Py_TYPE(o)->tp_as_sequence;
  ------------------
  |  |  213|    444|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    444|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    444|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|    444|    if (ms && ms->sq_item) {
  ------------------
  |  Branch (170:9): [True: 0, False: 444]
  |  Branch (170:15): [True: 0, False: 0]
  ------------------
  171|      0|        if (_PyIndex_Check(key)) {
  ------------------
  |  Branch (171:13): [True: 0, False: 0]
  ------------------
  172|      0|            Py_ssize_t key_value;
  173|      0|            key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
  174|      0|            if (key_value == -1 && PyErr_Occurred())
  ------------------
  |  Branch (174:17): [True: 0, False: 0]
  |  Branch (174:36): [True: 0, False: 0]
  ------------------
  175|      0|                return NULL;
  176|      0|            return PySequence_GetItem(o, key_value);
  177|      0|        }
  178|      0|        else {
  179|      0|            return type_error("sequence index must "
  180|      0|                              "be integer, not '%.200s'", key);
  181|      0|        }
  182|      0|    }
  183|       |
  184|    444|    if (PyType_Check(o)) {
  ------------------
  |  |  766|    444|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    444|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    444|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 5, False: 439]
  |  |  ------------------
  ------------------
  185|      5|        PyObject *meth, *result;
  186|       |
  187|       |        // Special case type[int], but disallow other types so str[int] fails
  188|      5|        if ((PyTypeObject*)o == &PyType_Type) {
  ------------------
  |  Branch (188:13): [True: 0, False: 5]
  ------------------
  189|      0|            return Py_GenericAlias(o, key);
  190|      0|        }
  191|       |
  192|      5|        if (PyObject_GetOptionalAttr(o, &_Py_ID(__class_getitem__), &meth) < 0) {
  ------------------
  |  |  936|      5|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      5|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      5|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (192:13): [True: 0, False: 5]
  ------------------
  193|      0|            return NULL;
  194|      0|        }
  195|      5|        if (meth && meth != Py_None) {
  ------------------
  |  |  616|      5|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (195:13): [True: 5, False: 0]
  |  Branch (195:21): [True: 5, False: 0]
  ------------------
  196|      5|            result = PyObject_CallOneArg(meth, key);
  197|      5|            Py_DECREF(meth);
  ------------------
  |  |  430|      5|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|      5|            return result;
  199|      5|        }
  200|      0|        Py_XDECREF(meth);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|      0|        PyErr_Format(PyExc_TypeError, "type '%.200s' is not subscriptable",
  202|      0|                     ((PyTypeObject *)o)->tp_name);
  203|      0|        return NULL;
  204|      5|    }
  205|       |
  206|    439|    return type_error("'%.200s' object is not subscriptable", o);
  207|    444|}
PyMapping_GetOptionalItem:
  211|  1.13M|{
  212|  1.13M|    if (PyAnyDict_CheckExact(obj)) {
  ------------------
  |  |   41|  1.13M|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|  1.13M|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  2.27M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.13M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.13M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 1.13M, False: 25]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|     25|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     25|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 25]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|  1.13M|        return PyDict_GetItemRef(obj, key, result);
  214|  1.13M|    }
  215|       |
  216|     25|    *result = PyObject_GetItem(obj, key);
  217|     25|    if (*result) {
  ------------------
  |  Branch (217:9): [True: 4, False: 21]
  ------------------
  218|      4|        return 1;
  219|      4|    }
  220|     25|    assert(PyErr_Occurred());
  ------------------
  |  Branch (220:5): [True: 21, False: 0]
  ------------------
  221|     21|    if (!PyErr_ExceptionMatches(PyExc_KeyError)) {
  ------------------
  |  Branch (221:9): [True: 0, False: 21]
  ------------------
  222|      0|        return -1;
  223|      0|    }
  224|     21|    PyErr_Clear();
  225|     21|    return 0;
  226|     21|}
_PyMapping_GetOptionalItem2:
  230|    631|{
  231|    631|    PyObject* result;
  232|    631|    *err = PyMapping_GetOptionalItem(obj, key, &result);
  233|    631|    return result;
  234|    631|}
PyObject_SetItem:
  238|    920|{
  239|    920|    if (o == NULL || key == NULL || value == NULL) {
  ------------------
  |  Branch (239:9): [True: 0, False: 920]
  |  Branch (239:22): [True: 0, False: 920]
  |  Branch (239:37): [True: 0, False: 920]
  ------------------
  240|      0|        null_error();
  241|      0|        return -1;
  242|      0|    }
  243|       |
  244|    920|    PyMappingMethods *m = Py_TYPE(o)->tp_as_mapping;
  ------------------
  |  |  213|    920|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    920|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    920|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|    920|    if (m && m->mp_ass_subscript) {
  ------------------
  |  Branch (245:9): [True: 920, False: 0]
  |  Branch (245:14): [True: 920, False: 0]
  ------------------
  246|    920|        int res = m->mp_ass_subscript(o, key, value);
  247|    920|        assert(_Py_CheckSlotResult(o, "__setitem__", res >= 0));
  ------------------
  |  Branch (247:9): [True: 920, False: 0]
  ------------------
  248|    920|        return res;
  249|    920|    }
  250|       |
  251|      0|    if (Py_TYPE(o)->tp_as_sequence) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (251:9): [True: 0, False: 0]
  ------------------
  252|      0|        if (_PyIndex_Check(key)) {
  ------------------
  |  Branch (252:13): [True: 0, False: 0]
  ------------------
  253|      0|            Py_ssize_t key_value;
  254|      0|            key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
  255|      0|            if (key_value == -1 && PyErr_Occurred())
  ------------------
  |  Branch (255:17): [True: 0, False: 0]
  |  Branch (255:36): [True: 0, False: 0]
  ------------------
  256|      0|                return -1;
  257|      0|            return PySequence_SetItem(o, key_value, value);
  258|      0|        }
  259|      0|        else if (Py_TYPE(o)->tp_as_sequence->sq_ass_item) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (259:18): [True: 0, False: 0]
  ------------------
  260|      0|            type_error("sequence index must be "
  261|      0|                       "integer, not '%.200s'", key);
  262|      0|            return -1;
  263|      0|        }
  264|      0|    }
  265|       |
  266|      0|    type_error("'%.200s' object does not support item assignment", o);
  267|      0|    return -1;
  268|      0|}
PyObject_DelItem:
  272|  1.01k|{
  273|  1.01k|    if (o == NULL || key == NULL) {
  ------------------
  |  Branch (273:9): [True: 0, False: 1.01k]
  |  Branch (273:22): [True: 0, False: 1.01k]
  ------------------
  274|      0|        null_error();
  275|      0|        return -1;
  276|      0|    }
  277|       |
  278|  1.01k|    PyMappingMethods *m = Py_TYPE(o)->tp_as_mapping;
  ------------------
  |  |  213|  1.01k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  279|  1.01k|    if (m && m->mp_ass_subscript) {
  ------------------
  |  Branch (279:9): [True: 1.01k, False: 0]
  |  Branch (279:14): [True: 1.01k, False: 0]
  ------------------
  280|  1.01k|        int res = m->mp_ass_subscript(o, key, (PyObject*)NULL);
  281|  1.01k|        assert(_Py_CheckSlotResult(o, "__delitem__", res >= 0));
  ------------------
  |  Branch (281:9): [True: 1.01k, False: 0]
  ------------------
  282|  1.01k|        return res;
  283|  1.01k|    }
  284|       |
  285|      0|    if (Py_TYPE(o)->tp_as_sequence) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (285:9): [True: 0, False: 0]
  ------------------
  286|      0|        if (_PyIndex_Check(key)) {
  ------------------
  |  Branch (286:13): [True: 0, False: 0]
  ------------------
  287|      0|            Py_ssize_t key_value;
  288|      0|            key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
  289|      0|            if (key_value == -1 && PyErr_Occurred())
  ------------------
  |  Branch (289:17): [True: 0, False: 0]
  |  Branch (289:36): [True: 0, False: 0]
  ------------------
  290|      0|                return -1;
  291|      0|            return PySequence_DelItem(o, key_value);
  292|      0|        }
  293|      0|        else if (Py_TYPE(o)->tp_as_sequence->sq_ass_item) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (293:18): [True: 0, False: 0]
  ------------------
  294|      0|            type_error("sequence index must be "
  295|      0|                       "integer, not '%.200s'", key);
  296|      0|            return -1;
  297|      0|        }
  298|      0|    }
  299|       |
  300|      0|    type_error("'%.200s' object does not support item deletion", o);
  301|      0|    return -1;
  302|      0|}
PyObject_CheckBuffer:
  326|   241k|{
  327|   241k|    PyBufferProcs *tp_as_buffer = Py_TYPE(obj)->tp_as_buffer;
  ------------------
  |  |  213|   241k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   241k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   241k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|   241k|    return (tp_as_buffer != NULL && tp_as_buffer->bf_getbuffer != NULL);
  ------------------
  |  Branch (328:13): [True: 241k, False: 102]
  |  Branch (328:37): [True: 241k, False: 0]
  ------------------
  329|   241k|}
PyObject_GetBuffer:
  441|   399k|{
  442|   399k|    if (flags != PyBUF_SIMPLE) {  /* fast path */
  ------------------
  |  |  108|   399k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (442:9): [True: 19.5k, False: 380k]
  ------------------
  443|  19.5k|        if (flags == PyBUF_READ || flags == PyBUF_WRITE) {
  ------------------
  |  |  137|  39.1k|#define PyBUF_READ  0x100
  ------------------
                      if (flags == PyBUF_READ || flags == PyBUF_WRITE) {
  ------------------
  |  |  138|  19.5k|#define PyBUF_WRITE 0x200
  ------------------
  |  Branch (443:13): [True: 0, False: 19.5k]
  |  Branch (443:36): [True: 0, False: 19.5k]
  ------------------
  444|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  445|      0|            return -1;
  446|      0|        }
  447|  19.5k|    }
  448|   399k|    PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer;
  ------------------
  |  |  213|   399k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   399k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   399k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  449|       |
  450|   399k|    if (pb == NULL || pb->bf_getbuffer == NULL) {
  ------------------
  |  Branch (450:9): [True: 785, False: 399k]
  |  Branch (450:23): [True: 0, False: 399k]
  ------------------
  451|    785|        PyErr_Format(PyExc_TypeError,
  452|    785|                     "a bytes-like object is required, not '%.100s'",
  453|    785|                     Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|    785|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    785|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    785|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|    785|        return -1;
  455|    785|    }
  456|   399k|    int res = (*pb->bf_getbuffer)(obj, view, flags);
  457|   399k|    assert(_Py_CheckSlotResult(obj, "getbuffer", res >= 0));
  ------------------
  |  Branch (457:5): [True: 399k, False: 0]
  ------------------
  458|   399k|    return res;
  459|   399k|}
PyBuffer_IsContiguous:
  530|  19.4k|{
  531|       |
  532|  19.4k|    if (view->suboffsets != NULL) return 0;
  ------------------
  |  Branch (532:9): [True: 0, False: 19.4k]
  ------------------
  533|       |
  534|  19.4k|    if (order == 'C')
  ------------------
  |  Branch (534:9): [True: 19.4k, False: 0]
  ------------------
  535|  19.4k|        return _IsCContiguous(view);
  536|      0|    else if (order == 'F')
  ------------------
  |  Branch (536:14): [True: 0, False: 0]
  ------------------
  537|      0|        return _IsFortranContiguous(view);
  538|      0|    else if (order == 'A')
  ------------------
  |  Branch (538:14): [True: 0, False: 0]
  ------------------
  539|      0|        return (_IsCContiguous(view) || _IsFortranContiguous(view));
  ------------------
  |  Branch (539:17): [True: 0, False: 0]
  |  Branch (539:41): [True: 0, False: 0]
  ------------------
  540|      0|    return 0;
  541|  19.4k|}
PyBuffer_FillInfo:
  777|   399k|{
  778|   399k|    if (view == NULL) {
  ------------------
  |  Branch (778:9): [True: 0, False: 399k]
  ------------------
  779|      0|        PyErr_SetString(PyExc_BufferError,
  780|      0|                        "PyBuffer_FillInfo: view==NULL argument is obsolete");
  781|      0|        return -1;
  782|      0|    }
  783|       |
  784|   399k|    if (flags != PyBUF_SIMPLE) {  /* fast path */
  ------------------
  |  |  108|   399k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (784:9): [True: 72.2k, False: 327k]
  ------------------
  785|  72.2k|        if (flags == PyBUF_READ || flags == PyBUF_WRITE) {
  ------------------
  |  |  137|   144k|#define PyBUF_READ  0x100
  ------------------
                      if (flags == PyBUF_READ || flags == PyBUF_WRITE) {
  ------------------
  |  |  138|  72.2k|#define PyBUF_WRITE 0x200
  ------------------
  |  Branch (785:13): [True: 0, False: 72.2k]
  |  Branch (785:36): [True: 0, False: 72.2k]
  ------------------
  786|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  787|      0|            return -1;
  788|      0|        }
  789|  72.2k|        if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) &&
  ------------------
  |  |  109|  72.2k|#define PyBUF_WRITABLE 0x0001
  ------------------
                      if (((flags & PyBUF_WRITABLE) == PyBUF_WRITABLE) &&
  ------------------
  |  |  109|  72.2k|#define PyBUF_WRITABLE 0x0001
  ------------------
  |  Branch (789:13): [True: 0, False: 72.2k]
  ------------------
  790|      0|            (readonly == 1)) {
  ------------------
  |  Branch (790:13): [True: 0, False: 0]
  ------------------
  791|      0|            PyErr_SetString(PyExc_BufferError,
  792|      0|                            "Object is not writable.");
  793|      0|            return -1;
  794|      0|        }
  795|  72.2k|    }
  796|       |
  797|   399k|    view->obj = Py_XNewRef(obj);
  ------------------
  |  |  551|   399k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   399k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   399k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|   399k|    view->buf = buf;
  799|   399k|    view->len = len;
  800|   399k|    view->readonly = readonly;
  801|   399k|    view->itemsize = 1;
  802|   399k|    view->format = NULL;
  803|   399k|    if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT)
  ------------------
  |  |  116|   399k|#define PyBUF_FORMAT 0x0004
  ------------------
                  if ((flags & PyBUF_FORMAT) == PyBUF_FORMAT)
  ------------------
  |  |  116|   399k|#define PyBUF_FORMAT 0x0004
  ------------------
  |  Branch (803:9): [True: 23.7k, False: 375k]
  ------------------
  804|  23.7k|        view->format = "B";
  805|   399k|    view->ndim = 1;
  806|   399k|    view->shape = NULL;
  807|   399k|    if ((flags & PyBUF_ND) == PyBUF_ND)
  ------------------
  |  |  117|   399k|#define PyBUF_ND 0x0008
  ------------------
                  if ((flags & PyBUF_ND) == PyBUF_ND)
  ------------------
  |  |  117|   399k|#define PyBUF_ND 0x0008
  ------------------
  |  Branch (807:9): [True: 72.2k, False: 327k]
  ------------------
  808|  72.2k|        view->shape = &(view->len);
  809|   399k|    view->strides = NULL;
  810|   399k|    if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES)
  ------------------
  |  |  118|   399k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  ------------------
  |  |  |  |  117|   399k|#define PyBUF_ND 0x0008
  |  |  ------------------
  ------------------
                  if ((flags & PyBUF_STRIDES) == PyBUF_STRIDES)
  ------------------
  |  |  118|   399k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  ------------------
  |  |  |  |  117|   399k|#define PyBUF_ND 0x0008
  |  |  ------------------
  ------------------
  |  Branch (810:9): [True: 23.7k, False: 375k]
  ------------------
  811|  23.7k|        view->strides = &(view->itemsize);
  812|   399k|    view->suboffsets = NULL;
  813|       |    view->internal = NULL;
  814|   399k|    return 0;
  815|   399k|}
PyBuffer_Release:
  819|   600k|{
  820|   600k|    PyObject *obj = view->obj;
  821|   600k|    PyBufferProcs *pb;
  822|   600k|    if (obj == NULL)
  ------------------
  |  Branch (822:9): [True: 201k, False: 399k]
  ------------------
  823|   201k|        return;
  824|   399k|    pb = Py_TYPE(obj)->tp_as_buffer;
  ------------------
  |  |  213|   399k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   399k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   399k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  825|   399k|    if (pb && pb->bf_releasebuffer) {
  ------------------
  |  Branch (825:9): [True: 399k, False: 0]
  |  Branch (825:15): [True: 72.0k, False: 327k]
  ------------------
  826|  72.0k|        pb->bf_releasebuffer(obj, view);
  827|  72.0k|    }
  828|   399k|    view->obj = NULL;
  829|   399k|    Py_DECREF(obj);
  ------------------
  |  |  430|   399k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   399k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   399k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  830|   399k|}
PyObject_Format:
  855|  97.2k|{
  856|  97.2k|    PyObject *meth;
  857|  97.2k|    PyObject *empty = NULL;
  858|  97.2k|    PyObject *result = NULL;
  859|       |
  860|  97.2k|    if (format_spec != NULL && !PyUnicode_Check(format_spec)) {
  ------------------
  |  |  103|    132|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    132|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (860:9): [True: 132, False: 97.0k]
  |  Branch (860:32): [True: 0, False: 132]
  ------------------
  861|      0|        PyErr_Format(PyExc_SystemError,
  862|      0|                     "Format specifier must be a string, not %.200s",
  863|      0|                     Py_TYPE(format_spec)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|      0|        return NULL;
  865|      0|    }
  866|       |
  867|       |    /* Fast path for common types. */
  868|  97.2k|    if (format_spec == NULL || PyUnicode_GET_LENGTH(format_spec) == 0) {
  ------------------
  |  |  299|    132|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (868:9): [True: 97.0k, False: 132]
  |  Branch (868:32): [True: 0, False: 132]
  ------------------
  869|  97.0k|        if (PyUnicode_CheckExact(obj)) {
  ------------------
  |  |  104|  97.0k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  97.0k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  97.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  97.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 97.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  870|      0|            return Py_NewRef(obj);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  871|      0|        }
  872|  97.0k|        if (PyLong_CheckExact(obj)) {
  ------------------
  |  |   14|  97.0k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  97.0k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  97.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  97.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 48.6k, False: 48.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  873|  48.6k|            return PyObject_Str(obj);
  874|  48.6k|        }
  875|  97.0k|    }
  876|       |
  877|       |    /* If no format_spec is provided, use an empty string */
  878|  48.6k|    if (format_spec == NULL) {
  ------------------
  |  Branch (878:9): [True: 48.4k, False: 132]
  ------------------
  879|  48.4k|        empty = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|  48.4k|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  880|  48.4k|        format_spec = empty;
  881|  48.4k|    }
  882|       |
  883|       |    /* Find the (unbound!) __format__ method */
  884|  48.6k|    meth = _PyObject_LookupSpecial(obj, &_Py_ID(__format__));
  ------------------
  |  |  936|  48.6k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  48.6k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  48.6k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  885|  48.6k|    if (meth == NULL) {
  ------------------
  |  Branch (885:9): [True: 0, False: 48.6k]
  ------------------
  886|      0|        PyThreadState *tstate = _PyThreadState_GET();
  887|      0|        if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (887:13): [True: 0, False: 0]
  ------------------
  888|      0|            _PyErr_Format(tstate, PyExc_TypeError,
  889|      0|                          "Type %.100s doesn't define __format__",
  890|      0|                          Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|      0|        }
  892|      0|        goto done;
  893|      0|    }
  894|       |
  895|       |    /* And call it. */
  896|  48.6k|    result = PyObject_CallOneArg(meth, format_spec);
  897|  48.6k|    Py_DECREF(meth);
  ------------------
  |  |  430|  48.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  898|       |
  899|  48.6k|    if (result && !PyUnicode_Check(result)) {
  ------------------
  |  |  103|  48.6k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.6k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (899:9): [True: 48.6k, False: 0]
  |  Branch (899:19): [True: 0, False: 48.6k]
  ------------------
  900|      0|        PyErr_Format(PyExc_TypeError,
  901|      0|                     "%T.__format__() must return a str, not %T",
  902|      0|                     obj, result);
  903|      0|        Py_SETREF(result, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  904|      0|        goto done;
  905|      0|    }
  906|       |
  907|  48.6k|done:
  908|  48.6k|    Py_XDECREF(empty);
  ------------------
  |  |  524|  48.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  909|  48.6k|    return result;
  910|  48.6k|}
PyNumber_Check:
  915|     99|{
  916|     99|    if (o == NULL)
  ------------------
  |  Branch (916:9): [True: 0, False: 99]
  ------------------
  917|      0|        return 0;
  918|     99|    PyNumberMethods *nb = Py_TYPE(o)->tp_as_number;
  ------------------
  |  |  213|     99|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|     99|    return nb && (nb->nb_index || nb->nb_int || nb->nb_float || PyComplex_Check(o));
  ------------------
  |  |   13|     93|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  378|     93|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (919:12): [True: 99, False: 0]
  |  Branch (919:19): [True: 6, False: 93]
  |  Branch (919:35): [True: 0, False: 93]
  |  Branch (919:49): [True: 0, False: 93]
  ------------------
  920|     99|}
PyNumber_Add:
 1140|  82.3k|{
 1141|  82.3k|    PyObject *result = BINARY_OP1(v, w, NB_SLOT(nb_add), "+");
  ------------------
  |  |  996|  82.3k|#  define BINARY_OP1(v, w, op_slot, op_name) binary_op1(v, w, op_slot, op_name)
  ------------------
 1142|  82.3k|    if (result != Py_NotImplemented) {
  ------------------
  |  |  640|  82.3k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1142:9): [True: 62.6k, False: 19.7k]
  ------------------
 1143|  62.6k|        return result;
 1144|  62.6k|    }
 1145|  19.7k|    Py_DECREF(result);
  ------------------
  |  |  430|  19.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  19.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1146|       |
 1147|  19.7k|    PySequenceMethods *m = Py_TYPE(v)->tp_as_sequence;
  ------------------
  |  |  213|  19.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  19.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1148|  19.7k|    if (m && m->sq_concat) {
  ------------------
  |  Branch (1148:9): [True: 19.2k, False: 489]
  |  Branch (1148:14): [True: 19.2k, False: 0]
  ------------------
 1149|  19.2k|        result = (*m->sq_concat)(v, w);
 1150|  19.2k|        assert(_Py_CheckSlotResult(v, "+", result != NULL));
  ------------------
  |  Branch (1150:9): [True: 19.2k, False: 0]
  ------------------
 1151|  19.2k|        return result;
 1152|  19.2k|    }
 1153|       |
 1154|    489|    return binop_type_error(v, w, "+");
 1155|  19.7k|}
PyNumber_Multiply:
 1178|   183k|{
 1179|   183k|    PyObject *result = BINARY_OP1(v, w, NB_SLOT(nb_multiply), "*");
  ------------------
  |  |  996|   183k|#  define BINARY_OP1(v, w, op_slot, op_name) binary_op1(v, w, op_slot, op_name)
  ------------------
 1180|   183k|    if (result == Py_NotImplemented) {
  ------------------
  |  |  640|   183k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1180:9): [True: 53.8k, False: 129k]
  ------------------
 1181|  53.8k|        PySequenceMethods *mv = Py_TYPE(v)->tp_as_sequence;
  ------------------
  |  |  213|  53.8k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  53.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1182|  53.8k|        PySequenceMethods *mw = Py_TYPE(w)->tp_as_sequence;
  ------------------
  |  |  213|  53.8k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  53.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|  53.8k|        Py_DECREF(result);
  ------------------
  |  |  430|  53.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|  53.8k|        if  (mv && mv->sq_repeat) {
  ------------------
  |  Branch (1184:14): [True: 2.89k, False: 50.9k]
  |  Branch (1184:20): [True: 2.89k, False: 0]
  ------------------
 1185|  2.89k|            return sequence_repeat(mv->sq_repeat, v, w);
 1186|  2.89k|        }
 1187|  50.9k|        else if (mw && mw->sq_repeat) {
  ------------------
  |  Branch (1187:18): [True: 50.1k, False: 821]
  |  Branch (1187:24): [True: 50.1k, False: 0]
  ------------------
 1188|  50.1k|            return sequence_repeat(mw->sq_repeat, w, v);
 1189|  50.1k|        }
 1190|    821|        result = binop_type_error(v, w, "*");
 1191|    821|    }
 1192|   130k|    return result;
 1193|   183k|}
PyNumber_Power:
 1202|   111k|{
 1203|       |    return ternary_op(v, w, z, NB_SLOT(nb_power), "** or pow()");
  ------------------
  |  |  924|   111k|#define NB_SLOT(x) offsetof(PyNumberMethods, x)
  ------------------
 1204|   111k|}
_PyNumber_PowerNoMod:
 1208|    153|{
 1209|    153|    return PyNumber_Power(lhs, rhs, Py_None);
  ------------------
  |  |  616|    153|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1210|    153|}
PyNumber_InPlaceAdd:
 1309|  27.6k|{
 1310|  27.6k|    PyObject *result = BINARY_IOP1(v, w, NB_SLOT(nb_inplace_add),
  ------------------
  |  | 1257|  27.6k|#  define BINARY_IOP1(v, w, iop_slot, op_slot, op_name) binary_iop1(v, w, iop_slot, op_slot, op_name)
  ------------------
 1311|  27.6k|                                   NB_SLOT(nb_add), "+=");
 1312|  27.6k|    if (result == Py_NotImplemented) {
  ------------------
  |  |  640|  27.6k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1312:9): [True: 34, False: 27.5k]
  ------------------
 1313|     34|        PySequenceMethods *m = Py_TYPE(v)->tp_as_sequence;
  ------------------
  |  |  213|     34|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1314|     34|        Py_DECREF(result);
  ------------------
  |  |  430|     34|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1315|     34|        if (m != NULL) {
  ------------------
  |  Branch (1315:13): [True: 34, False: 0]
  ------------------
 1316|     34|            binaryfunc func = m->sq_inplace_concat;
 1317|     34|            if (func == NULL)
  ------------------
  |  Branch (1317:17): [True: 6, False: 28]
  ------------------
 1318|      6|                func = m->sq_concat;
 1319|     34|            if (func != NULL) {
  ------------------
  |  Branch (1319:17): [True: 34, False: 0]
  ------------------
 1320|     34|                result = func(v, w);
 1321|     34|                assert(_Py_CheckSlotResult(v, "+=", result != NULL));
  ------------------
  |  Branch (1321:17): [True: 34, False: 0]
  ------------------
 1322|     34|                return result;
 1323|     34|            }
 1324|     34|        }
 1325|      0|        result = binop_type_error(v, w, "+=");
 1326|      0|    }
 1327|  27.5k|    return result;
 1328|  27.6k|}
PyNumber_InPlaceMultiply:
 1332|     99|{
 1333|     99|    PyObject *result = BINARY_IOP1(v, w, NB_SLOT(nb_inplace_multiply),
  ------------------
  |  | 1257|     99|#  define BINARY_IOP1(v, w, iop_slot, op_slot, op_name) binary_iop1(v, w, iop_slot, op_slot, op_name)
  ------------------
 1334|     99|                                   NB_SLOT(nb_multiply), "*=");
 1335|     99|    if (result == Py_NotImplemented) {
  ------------------
  |  |  640|     99|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1335:9): [True: 0, False: 99]
  ------------------
 1336|      0|        ssizeargfunc f = NULL;
 1337|      0|        PySequenceMethods *mv = Py_TYPE(v)->tp_as_sequence;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1338|      0|        PySequenceMethods *mw = Py_TYPE(w)->tp_as_sequence;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1339|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1340|      0|        if (mv != NULL) {
  ------------------
  |  Branch (1340:13): [True: 0, False: 0]
  ------------------
 1341|      0|            f = mv->sq_inplace_repeat;
 1342|      0|            if (f == NULL)
  ------------------
  |  Branch (1342:17): [True: 0, False: 0]
  ------------------
 1343|      0|                f = mv->sq_repeat;
 1344|      0|            if (f != NULL)
  ------------------
  |  Branch (1344:17): [True: 0, False: 0]
  ------------------
 1345|      0|                return sequence_repeat(f, v, w);
 1346|      0|        }
 1347|      0|        else if (mw != NULL) {
  ------------------
  |  Branch (1347:18): [True: 0, False: 0]
  ------------------
 1348|       |            /* Note that the right hand operand should not be
 1349|       |             * mutated in this case so sq_inplace_repeat is not
 1350|       |             * used. */
 1351|      0|            if (mw->sq_repeat)
  ------------------
  |  Branch (1351:17): [True: 0, False: 0]
  ------------------
 1352|      0|                return sequence_repeat(mw->sq_repeat, w, v);
 1353|      0|        }
 1354|      0|        result = binop_type_error(v, w, "*=");
 1355|      0|    }
 1356|     99|    return result;
 1357|     99|}
PyIndex_Check:
 1400|    584|{
 1401|    584|    return _PyIndex_Check(obj);
 1402|    584|}
_PyNumber_Index:
 1412|  9.96M|{
 1413|  9.96M|    if (item == NULL) {
  ------------------
  |  Branch (1413:9): [True: 0, False: 9.96M]
  ------------------
 1414|      0|        return null_error();
 1415|      0|    }
 1416|       |
 1417|  9.96M|    if (PyLong_Check(item)) {
  ------------------
  |  |   13|  9.96M|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  9.96M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 9.96M, False: 1.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1418|  9.96M|        return Py_NewRef(item);
  ------------------
  |  |  550|  9.96M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  9.96M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.96M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1419|  9.96M|    }
 1420|  1.42k|    if (!_PyIndex_Check(item)) {
  ------------------
  |  Branch (1420:9): [True: 1.42k, False: 0]
  ------------------
 1421|  1.42k|        PyErr_Format(PyExc_TypeError,
 1422|  1.42k|                     "'%.200s' object cannot be interpreted "
 1423|  1.42k|                     "as an integer", Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|  1.42k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|  1.42k|        return NULL;
 1425|  1.42k|    }
 1426|       |
 1427|      0|    PyObject *result = Py_TYPE(item)->tp_as_number->nb_index(item);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1428|      0|    assert(_Py_CheckSlotResult(item, "__index__", result != NULL));
  ------------------
  |  Branch (1428:5): [True: 0, False: 0]
  ------------------
 1429|      0|    if (!result || PyLong_CheckExact(result)) {
  ------------------
  |  |   14|      0|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1429:9): [True: 0, False: 0]
  ------------------
 1430|      0|        return result;
 1431|      0|    }
 1432|       |
 1433|      0|    if (!PyLong_Check(result)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1433:9): [True: 0, False: 0]
  ------------------
 1434|      0|        PyErr_Format(PyExc_TypeError,
 1435|      0|                     "%T.__index__() must return an int, not %T",
 1436|      0|                     item, result);
 1437|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1438|      0|        return NULL;
 1439|      0|    }
 1440|       |    /* Issue #17576: warn if 'result' not of exact type int. */
 1441|      0|    if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
  ------------------
  |  Branch (1441:9): [True: 0, False: 0]
  ------------------
 1442|      0|            "%T.__index__() must return an int, not %T.  "
 1443|      0|            "The ability to return an instance of a strict subclass of int "
 1444|      0|            "is deprecated, and may be removed in a future version of Python.",
 1445|      0|            item, result)) {
 1446|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1447|      0|        return NULL;
 1448|      0|    }
 1449|      0|    return result;
 1450|      0|}
PyNumber_Index:
 1458|    429|{
 1459|    429|    PyObject *result = _PyNumber_Index(item);
 1460|    429|    if (result != NULL && !PyLong_CheckExact(result)) {
  ------------------
  |  |   14|    429|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    429|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    429|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    429|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1460:9): [True: 429, False: 0]
  |  Branch (1460:27): [True: 0, False: 429]
  ------------------
 1461|      0|        Py_SETREF(result, _PyLong_Copy((PyLongObject *)result));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1462|      0|    }
 1463|    429|    return result;
 1464|    429|}
PyNumber_AsSsize_t:
 1470|  9.87M|{
 1471|  9.87M|    Py_ssize_t result;
 1472|  9.87M|    PyObject *runerr;
 1473|  9.87M|    PyObject *value = _PyNumber_Index(item);
 1474|  9.87M|    if (value == NULL)
  ------------------
  |  Branch (1474:9): [True: 1.33k, False: 9.87M]
  ------------------
 1475|  1.33k|        return -1;
 1476|       |
 1477|       |    /* We're done if PyLong_AsSsize_t() returns without error. */
 1478|  9.87M|    result = PyLong_AsSsize_t(value);
 1479|  9.87M|    if (result != -1)
  ------------------
  |  Branch (1479:9): [True: 9.87M, False: 5.57k]
  ------------------
 1480|  9.87M|        goto finish;
 1481|       |
 1482|  5.57k|    PyThreadState *tstate = _PyThreadState_GET();
 1483|  5.57k|    runerr = _PyErr_Occurred(tstate);
 1484|  5.57k|    if (!runerr) {
  ------------------
  |  Branch (1484:9): [True: 2.81k, False: 2.75k]
  ------------------
 1485|  2.81k|        goto finish;
 1486|  2.81k|    }
 1487|       |
 1488|       |    /* Error handling code -- only manage OverflowError differently */
 1489|  2.75k|    if (!PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
  ------------------
  |  Branch (1489:9): [True: 0, False: 2.75k]
  ------------------
 1490|      0|        goto finish;
 1491|      0|    }
 1492|  2.75k|    _PyErr_Clear(tstate);
 1493|       |
 1494|       |    /* If no error-handling desired then the default clipping
 1495|       |       is sufficient. */
 1496|  2.75k|    if (!err) {
  ------------------
  |  Branch (1496:9): [True: 466, False: 2.29k]
  ------------------
 1497|    466|        assert(PyLong_Check(value));
  ------------------
  |  Branch (1497:9): [True: 466, False: 0]
  ------------------
 1498|       |        /* Whether or not it is less than or equal to
 1499|       |           zero is determined by the sign of ob_size
 1500|       |        */
 1501|    466|        if (_PyLong_IsNegative((PyLongObject *)value))
  ------------------
  |  Branch (1501:13): [True: 0, False: 466]
  ------------------
 1502|      0|            result = PY_SSIZE_T_MIN;
  ------------------
  |  |  146|      0|#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
 1503|    466|        else
 1504|    466|            result = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|    466|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1505|    466|    }
 1506|  2.29k|    else {
 1507|       |        /* Otherwise replace the error with caller's error object. */
 1508|  2.29k|        _PyErr_Format(tstate, err,
 1509|  2.29k|                      "cannot fit '%.200s' into an index-sized integer",
 1510|  2.29k|                      Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|  2.29k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.29k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.29k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1511|  2.29k|    }
 1512|       |
 1513|  9.87M| finish:
 1514|  9.87M|    Py_DECREF(value);
  ------------------
  |  |  430|  9.87M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.87M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.87M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1515|  9.87M|    return result;
 1516|  2.75k|}
PyNumber_Long:
 1521|    908|{
 1522|    908|    PyObject *result;
 1523|    908|    PyNumberMethods *m;
 1524|    908|    Py_buffer view;
 1525|       |
 1526|    908|    if (o == NULL) {
  ------------------
  |  Branch (1526:9): [True: 0, False: 908]
  ------------------
 1527|      0|        return null_error();
 1528|      0|    }
 1529|       |
 1530|    908|    if (PyLong_CheckExact(o)) {
  ------------------
  |  |   14|    908|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    908|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    908|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    908|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 144, False: 764]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1531|    144|        return Py_NewRef(o);
  ------------------
  |  |  550|    144|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    144|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1532|    144|    }
 1533|    764|    m = Py_TYPE(o)->tp_as_number;
  ------------------
  |  |  213|    764|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    764|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    764|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1534|    764|    if (m && m->nb_int) { /* This should include subclasses of int */
  ------------------
  |  Branch (1534:9): [True: 764, False: 0]
  |  Branch (1534:14): [True: 155, False: 609]
  ------------------
 1535|       |        /* Convert using the nb_int slot, which should return something
 1536|       |           of exact type int. */
 1537|    155|        result = m->nb_int(o);
 1538|    155|        assert(_Py_CheckSlotResult(o, "__int__", result != NULL));
  ------------------
  |  Branch (1538:9): [True: 155, False: 0]
  ------------------
 1539|    155|        if (!result || PyLong_CheckExact(result)) {
  ------------------
  |  |   14|    155|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    155|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    155|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 155, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1539:13): [True: 0, False: 155]
  ------------------
 1540|    155|            return result;
 1541|    155|        }
 1542|       |
 1543|      0|        if (!PyLong_Check(result)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1543:13): [True: 0, False: 0]
  ------------------
 1544|      0|            PyErr_Format(PyExc_TypeError,
 1545|      0|                         "%T.__int__() must return an int, not %T",
 1546|      0|                         o, result);
 1547|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1548|      0|            return NULL;
 1549|      0|        }
 1550|       |        /* Issue #17576: warn if 'result' not of exact type int. */
 1551|      0|        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
  ------------------
  |  Branch (1551:13): [True: 0, False: 0]
  ------------------
 1552|      0|                "%T.__int__() must return an int, not %T.  "
 1553|      0|                "The ability to return an instance of a strict subclass of int "
 1554|      0|                "is deprecated, and may be removed in a future version of Python.",
 1555|      0|                o, result)) {
 1556|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1557|      0|            return NULL;
 1558|      0|        }
 1559|      0|        Py_SETREF(result, _PyLong_Copy((PyLongObject *)result));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1560|      0|        return result;
 1561|      0|    }
 1562|    609|    if (m && m->nb_index) {
  ------------------
  |  Branch (1562:9): [True: 609, False: 0]
  |  Branch (1562:14): [True: 0, False: 609]
  ------------------
 1563|      0|        return PyNumber_Index(o);
 1564|      0|    }
 1565|       |
 1566|    609|    if (PyUnicode_Check(o))
  ------------------
  |  |  103|    609|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    609|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 609, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1567|       |        /* The below check is done in PyLong_FromUnicodeObject(). */
 1568|    609|        return PyLong_FromUnicodeObject(o, 10);
 1569|       |
 1570|      0|    if (PyBytes_Check(o))
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|       |        /* need to do extra error checking that PyLong_FromString()
 1572|       |         * doesn't do.  In particular int('9\x005') must raise an
 1573|       |         * exception, not truncate at the null.
 1574|       |         */
 1575|      0|        return _PyLong_FromBytes(PyBytes_AS_STRING(o),
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1576|      0|                                 PyBytes_GET_SIZE(o), 10);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1577|       |
 1578|      0|    if (PyByteArray_Check(o))
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1579|      0|        return _PyLong_FromBytes(PyByteArray_AS_STRING(o),
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1580|      0|                                 PyByteArray_GET_SIZE(o), 10);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1581|       |
 1582|      0|    if (PyObject_GetBuffer(o, &view, PyBUF_SIMPLE) == 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1582:9): [True: 0, False: 0]
  ------------------
 1583|      0|        PyObject *bytes;
 1584|       |
 1585|       |        /* Copy to NUL-terminated buffer. */
 1586|      0|        bytes = PyBytes_FromStringAndSize((const char *)view.buf, view.len);
 1587|      0|        if (bytes == NULL) {
  ------------------
  |  Branch (1587:13): [True: 0, False: 0]
  ------------------
 1588|      0|            PyBuffer_Release(&view);
 1589|      0|            return NULL;
 1590|      0|        }
 1591|      0|        result = _PyLong_FromBytes(PyBytes_AS_STRING(bytes),
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1592|      0|                                   PyBytes_GET_SIZE(bytes), 10);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1593|      0|        Py_DECREF(bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1594|      0|        PyBuffer_Release(&view);
 1595|      0|        return result;
 1596|      0|    }
 1597|       |
 1598|      0|    return type_error("int() argument must be a string, a bytes-like object "
 1599|      0|                      "or a real number, not '%.200s'", o);
 1600|      0|}
PySequence_Check:
 1683|    126|{
 1684|    126|    if (PyDict_Check(s))
  ------------------
  |  |   18|    126|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    126|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1685|      0|        return 0;
 1686|    126|    return Py_TYPE(s)->tp_as_sequence &&
  ------------------
  |  |  213|    126|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1686:12): [True: 126, False: 0]
  ------------------
 1687|    126|        Py_TYPE(s)->tp_as_sequence->sq_item != NULL;
  ------------------
  |  |  213|    126|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1687:9): [True: 126, False: 0]
  ------------------
 1688|    126|}
PySequence_Size:
 1692|      1|{
 1693|      1|    if (s == NULL) {
  ------------------
  |  Branch (1693:9): [True: 0, False: 1]
  ------------------
 1694|      0|        null_error();
 1695|      0|        return -1;
 1696|      0|    }
 1697|       |
 1698|      1|    PySequenceMethods *m = Py_TYPE(s)->tp_as_sequence;
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1699|      1|    if (m && m->sq_length) {
  ------------------
  |  Branch (1699:9): [True: 1, False: 0]
  |  Branch (1699:14): [True: 1, False: 0]
  ------------------
 1700|      1|        Py_ssize_t len = m->sq_length(s);
 1701|      1|        assert(_Py_CheckSlotResult(s, "__len__", len >= 0));
  ------------------
  |  Branch (1701:9): [True: 1, False: 0]
  ------------------
 1702|      1|        return len;
 1703|      1|    }
 1704|       |
 1705|      0|    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_length) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_length) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1705:9): [True: 0, False: 0]
  |  Branch (1705:38): [True: 0, False: 0]
  ------------------
 1706|      0|        type_error("%.200s is not a sequence", s);
 1707|      0|        return -1;
 1708|      0|    }
 1709|      0|    type_error("object of type '%.200s' has no len()", s);
 1710|      0|    return -1;
 1711|      0|}
PySequence_GetItem:
 1843|  1.93k|{
 1844|  1.93k|    if (s == NULL) {
  ------------------
  |  Branch (1844:9): [True: 0, False: 1.93k]
  ------------------
 1845|      0|        return null_error();
 1846|      0|    }
 1847|       |
 1848|  1.93k|    PySequenceMethods *m = Py_TYPE(s)->tp_as_sequence;
  ------------------
  |  |  213|  1.93k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.93k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.93k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1849|  1.93k|    if (m && m->sq_item) {
  ------------------
  |  Branch (1849:9): [True: 1.93k, False: 0]
  |  Branch (1849:14): [True: 1.93k, False: 0]
  ------------------
 1850|  1.93k|        if (i < 0) {
  ------------------
  |  Branch (1850:13): [True: 0, False: 1.93k]
  ------------------
 1851|      0|            if (m->sq_length) {
  ------------------
  |  Branch (1851:17): [True: 0, False: 0]
  ------------------
 1852|      0|                Py_ssize_t l = (*m->sq_length)(s);
 1853|      0|                assert(_Py_CheckSlotResult(s, "__len__", l >= 0));
  ------------------
  |  Branch (1853:17): [True: 0, False: 0]
  ------------------
 1854|      0|                if (l < 0) {
  ------------------
  |  Branch (1854:21): [True: 0, False: 0]
  ------------------
 1855|      0|                    return NULL;
 1856|      0|                }
 1857|      0|                i += l;
 1858|      0|            }
 1859|      0|        }
 1860|  1.93k|        PyObject *res = m->sq_item(s, i);
 1861|  1.93k|        assert(_Py_CheckSlotResult(s, "__getitem__", res != NULL));
  ------------------
  |  Branch (1861:9): [True: 1.93k, False: 0]
  ------------------
 1862|  1.93k|        return res;
 1863|  1.93k|    }
 1864|       |
 1865|      0|    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_subscript) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_subscript) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1865:9): [True: 0, False: 0]
  |  Branch (1865:38): [True: 0, False: 0]
  ------------------
 1866|      0|        return type_error("%.200s is not a sequence", s);
 1867|      0|    }
 1868|      0|    return type_error("'%.200s' object does not support indexing", s);
 1869|      0|}
PySequence_GetSlice:
 1873|      1|{
 1874|      1|    if (!s) {
  ------------------
  |  Branch (1874:9): [True: 0, False: 1]
  ------------------
 1875|      0|        return null_error();
 1876|      0|    }
 1877|       |
 1878|      1|    PyMappingMethods *mp = Py_TYPE(s)->tp_as_mapping;
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1879|      1|    if (mp && mp->mp_subscript) {
  ------------------
  |  Branch (1879:9): [True: 1, False: 0]
  |  Branch (1879:15): [True: 1, False: 0]
  ------------------
 1880|      1|        PyObject *slice = _PySlice_FromIndices(i1, i2);
 1881|      1|        if (!slice) {
  ------------------
  |  Branch (1881:13): [True: 0, False: 1]
  ------------------
 1882|      0|            return NULL;
 1883|      0|        }
 1884|      1|        PyObject *res = mp->mp_subscript(s, slice);
 1885|      1|        assert(_Py_CheckSlotResult(s, "__getitem__", res != NULL));
  ------------------
  |  Branch (1885:9): [True: 1, False: 0]
  ------------------
 1886|      1|        Py_DECREF(slice);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1887|      1|        return res;
 1888|      1|    }
 1889|       |
 1890|      0|    return type_error("'%.200s' object is unsliceable", s);
 1891|      1|}
PySequence_DelItem:
 1928|  42.8k|{
 1929|  42.8k|    if (s == NULL) {
  ------------------
  |  Branch (1929:9): [True: 0, False: 42.8k]
  ------------------
 1930|      0|        null_error();
 1931|      0|        return -1;
 1932|      0|    }
 1933|       |
 1934|  42.8k|    PySequenceMethods *m = Py_TYPE(s)->tp_as_sequence;
  ------------------
  |  |  213|  42.8k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  42.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1935|  42.8k|    if (m && m->sq_ass_item) {
  ------------------
  |  Branch (1935:9): [True: 42.8k, False: 0]
  |  Branch (1935:14): [True: 42.8k, False: 0]
  ------------------
 1936|  42.8k|        if (i < 0) {
  ------------------
  |  Branch (1936:13): [True: 0, False: 42.8k]
  ------------------
 1937|      0|            if (m->sq_length) {
  ------------------
  |  Branch (1937:17): [True: 0, False: 0]
  ------------------
 1938|      0|                Py_ssize_t l = (*m->sq_length)(s);
 1939|      0|                assert(_Py_CheckSlotResult(s, "__len__", l >= 0));
  ------------------
  |  Branch (1939:17): [True: 0, False: 0]
  ------------------
 1940|      0|                if (l < 0) {
  ------------------
  |  Branch (1940:21): [True: 0, False: 0]
  ------------------
 1941|      0|                    return -1;
 1942|      0|                }
 1943|      0|                i += l;
 1944|      0|            }
 1945|      0|        }
 1946|  42.8k|        int res = m->sq_ass_item(s, i, (PyObject *)NULL);
 1947|  42.8k|        assert(_Py_CheckSlotResult(s, "__delitem__", res >= 0));
  ------------------
  |  Branch (1947:9): [True: 42.8k, False: 0]
  ------------------
 1948|  42.8k|        return res;
 1949|  42.8k|    }
 1950|       |
 1951|      0|    if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_ass_subscript) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_ass_subscript) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1951:9): [True: 0, False: 0]
  |  Branch (1951:38): [True: 0, False: 0]
  ------------------
 1952|      0|        type_error("%.200s is not a sequence", s);
 1953|      0|        return -1;
 1954|      0|    }
 1955|      0|    type_error("'%.200s' object doesn't support item deletion", s);
 1956|      0|    return -1;
 1957|      0|}
PySequence_Tuple:
 2007|  30.0k|{
 2008|  30.0k|    PyObject *it;  /* iter(v) */
 2009|       |
 2010|  30.0k|    if (v == NULL) {
  ------------------
  |  Branch (2010:9): [True: 0, False: 30.0k]
  ------------------
 2011|      0|        return null_error();
 2012|      0|    }
 2013|       |
 2014|       |    /* Special-case the common tuple and list cases, for efficiency. */
 2015|  30.0k|    if (PyTuple_CheckExact(v)) {
  ------------------
  |  |   28|  30.0k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  30.0k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  30.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  30.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 15.5k, False: 14.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2016|       |        /* Note that we can't know whether it's safe to return
 2017|       |           a tuple *subclass* instance as-is, hence the restriction
 2018|       |           to exact tuples here.  In contrast, lists always make
 2019|       |           a copy, so there's no need for exactness below. */
 2020|  15.5k|        return Py_NewRef(v);
  ------------------
  |  |  550|  15.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  15.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2021|  15.5k|    }
 2022|  14.5k|    if (PyList_CheckExact(v))
  ------------------
  |  |   26|  14.5k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|  14.5k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 13.3k, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2023|  13.3k|        return PyList_AsTuple(v);
 2024|       |
 2025|       |    /* Get iterator. */
 2026|  1.18k|    it = PyObject_GetIter(v);
 2027|  1.18k|    if (it == NULL)
  ------------------
  |  Branch (2027:9): [True: 0, False: 1.18k]
  ------------------
 2028|      0|        return NULL;
 2029|       |
 2030|  1.18k|    Py_ssize_t n;
 2031|  1.18k|    PyObject *buffer[8];
 2032|  6.44k|    for (n = 0; n < 8; n++) {
  ------------------
  |  Branch (2032:17): [True: 6.40k, False: 47]
  ------------------
 2033|  6.40k|        PyObject *item = PyIter_Next(it);
 2034|  6.40k|        if (item == NULL) {
  ------------------
  |  Branch (2034:13): [True: 1.13k, False: 5.26k]
  ------------------
 2035|  1.13k|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (2035:17): [True: 0, False: 1.13k]
  ------------------
 2036|      0|                goto fail;
 2037|      0|            }
 2038|  1.13k|            Py_DECREF(it);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2039|  1.13k|            return _PyTuple_FromArraySteal(buffer, n);
 2040|  1.13k|        }
 2041|  5.26k|        buffer[n] = item;
 2042|  5.26k|    }
 2043|     47|    PyListObject *list = (PyListObject *)PyList_New(16);
 2044|     47|    if (list == NULL) {
  ------------------
  |  Branch (2044:9): [True: 0, False: 47]
  ------------------
 2045|      0|        goto fail;
 2046|      0|    }
 2047|     47|    assert(n == 8);
  ------------------
  |  Branch (2047:5): [True: 47, False: 0]
  ------------------
 2048|     47|    Py_SET_SIZE(list, n);
  ------------------
  |  |  216|     47|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|     47|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     47|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2049|    423|    for (Py_ssize_t j = 0; j < n; j++) {
  ------------------
  |  Branch (2049:28): [True: 376, False: 47]
  ------------------
 2050|    376|        PyList_SET_ITEM(list, j, buffer[j]);
  ------------------
  |  |   50|    376|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    376|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    376|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    376|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    376|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2051|    376|    }
 2052|    212|    for (;;) {
 2053|    212|        PyObject *item = PyIter_Next(it);
 2054|    212|        if (item == NULL) {
  ------------------
  |  Branch (2054:13): [True: 47, False: 165]
  ------------------
 2055|     47|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (2055:17): [True: 0, False: 47]
  ------------------
 2056|      0|                Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2057|      0|                Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2058|      0|                return NULL;
 2059|      0|            }
 2060|     47|            break;
 2061|     47|        }
 2062|    165|        if (_PyList_AppendTakeRef(list, item) < 0) {
  ------------------
  |  Branch (2062:13): [True: 0, False: 165]
  ------------------
 2063|      0|            Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2064|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2065|      0|            return NULL;
 2066|      0|        }
 2067|    165|    }
 2068|     47|    Py_DECREF(it);
  ------------------
  |  |  430|     47|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     47|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     47|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2069|     47|    PyObject *res = _PyList_AsTupleAndClear(list);
 2070|     47|    Py_DECREF(list);
  ------------------
  |  |  430|     47|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     47|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     47|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2071|     47|    return res;
 2072|      0|fail:
 2073|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2074|      0|    while (n > 0) {
  ------------------
  |  Branch (2074:12): [True: 0, False: 0]
  ------------------
 2075|      0|        n--;
 2076|      0|        Py_DECREF(buffer[n]);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2077|      0|    }
 2078|       |    return NULL;
 2079|     47|}
PySequence_List:
 2083|  84.4k|{
 2084|  84.4k|    PyObject *result;  /* result list */
 2085|  84.4k|    PyObject *rv;          /* return value from PyList_Extend */
 2086|       |
 2087|  84.4k|    if (v == NULL) {
  ------------------
  |  Branch (2087:9): [True: 0, False: 84.4k]
  ------------------
 2088|      0|        return null_error();
 2089|      0|    }
 2090|       |
 2091|  84.4k|    result = PyList_New(0);
 2092|  84.4k|    if (result == NULL)
  ------------------
  |  Branch (2092:9): [True: 0, False: 84.4k]
  ------------------
 2093|      0|        return NULL;
 2094|       |
 2095|  84.4k|    rv = _PyList_Extend((PyListObject *)result, v);
 2096|  84.4k|    if (rv == NULL) {
  ------------------
  |  Branch (2096:9): [True: 0, False: 84.4k]
  ------------------
 2097|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2098|      0|        return NULL;
 2099|      0|    }
 2100|  84.4k|    Py_DECREF(rv);
  ------------------
  |  |  430|  84.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  84.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2101|  84.4k|    return result;
 2102|  84.4k|}
PySequence_Fast:
 2106|   277k|{
 2107|   277k|    PyObject *it;
 2108|       |
 2109|   277k|    if (v == NULL) {
  ------------------
  |  Branch (2109:9): [True: 0, False: 277k]
  ------------------
 2110|      0|        return null_error();
 2111|      0|    }
 2112|       |
 2113|   277k|    if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
  ------------------
  |  |   26|   277k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|   554k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   277k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 275k, False: 1.43k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyList_CheckExact(v) || PyTuple_CheckExact(v)) {
  ------------------
  |  |   28|  1.43k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  1.43k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.42k, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2114|   277k|        return Py_NewRef(v);
  ------------------
  |  |  550|   277k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   277k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2115|   277k|    }
 2116|       |
 2117|      4|    it = PyObject_GetIter(v);
 2118|      4|    if (it == NULL) {
  ------------------
  |  Branch (2118:9): [True: 0, False: 4]
  ------------------
 2119|      0|        PyThreadState *tstate = _PyThreadState_GET();
 2120|      0|        if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
  ------------------
  |  Branch (2120:13): [True: 0, False: 0]
  ------------------
 2121|      0|            _PyErr_SetString(tstate, PyExc_TypeError, m);
 2122|      0|        }
 2123|      0|        return NULL;
 2124|      0|    }
 2125|       |
 2126|      4|    v = PySequence_List(it);
 2127|      4|    Py_DECREF(it);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2128|       |
 2129|      4|    return v;
 2130|      4|}
_PySequence_IterSearch:
 2140|      7|{
 2141|      7|    Py_ssize_t n;
 2142|      7|    int wrapped;  /* for PY_ITERSEARCH_INDEX, true iff n wrapped around */
 2143|      7|    PyObject *it;  /* iter(seq) */
 2144|       |
 2145|      7|    if (seq == NULL || obj == NULL) {
  ------------------
  |  Branch (2145:9): [True: 0, False: 7]
  |  Branch (2145:24): [True: 0, False: 7]
  ------------------
 2146|      0|        null_error();
 2147|      0|        return -1;
 2148|      0|    }
 2149|       |
 2150|      7|    it = PyObject_GetIter(seq);
 2151|      7|    if (it == NULL) {
  ------------------
  |  Branch (2151:9): [True: 0, False: 7]
  ------------------
 2152|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (2152:13): [True: 0, False: 0]
  ------------------
 2153|      0|            if (operation == PY_ITERSEARCH_CONTAINS) {
  ------------------
  |  |   29|      0|#define PY_ITERSEARCH_CONTAINS 3
  ------------------
  |  Branch (2153:17): [True: 0, False: 0]
  ------------------
 2154|      0|                type_error(
 2155|      0|                    "argument of type '%.200s' is not a container or iterable",
 2156|      0|                    seq
 2157|      0|                    );
 2158|      0|            }
 2159|      0|            else {
 2160|      0|                type_error("argument of type '%.200s' is not iterable", seq);
 2161|      0|            }
 2162|      0|        }
 2163|      0|        return -1;
 2164|      0|    }
 2165|       |
 2166|      7|    n = wrapped = 0;
 2167|     14|    for (;;) {
 2168|     14|        int cmp;
 2169|     14|        PyObject *item = PyIter_Next(it);
 2170|     14|        if (item == NULL) {
  ------------------
  |  Branch (2170:13): [True: 5, False: 9]
  ------------------
 2171|      5|            if (PyErr_Occurred())
  ------------------
  |  Branch (2171:17): [True: 0, False: 5]
  ------------------
 2172|      0|                goto Fail;
 2173|      5|            break;
 2174|      5|        }
 2175|       |
 2176|      9|        cmp = PyObject_RichCompareBool(item, obj, Py_EQ);
  ------------------
  |  |  654|      9|#define Py_EQ 2
  ------------------
 2177|      9|        Py_DECREF(item);
  ------------------
  |  |  430|      9|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2178|      9|        if (cmp < 0)
  ------------------
  |  Branch (2178:13): [True: 0, False: 9]
  ------------------
 2179|      0|            goto Fail;
 2180|      9|        if (cmp > 0) {
  ------------------
  |  Branch (2180:13): [True: 2, False: 7]
  ------------------
 2181|      2|            switch (operation) {
 2182|      0|            case PY_ITERSEARCH_COUNT:
  ------------------
  |  |   27|      0|#define PY_ITERSEARCH_COUNT    1
  ------------------
  |  Branch (2182:13): [True: 0, False: 2]
  ------------------
 2183|      0|                if (n == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2183:21): [True: 0, False: 0]
  ------------------
 2184|      0|                    PyErr_SetString(PyExc_OverflowError,
 2185|      0|                           "count exceeds C integer size");
 2186|      0|                    goto Fail;
 2187|      0|                }
 2188|      0|                ++n;
 2189|      0|                break;
 2190|       |
 2191|      2|            case PY_ITERSEARCH_INDEX:
  ------------------
  |  |   28|      2|#define PY_ITERSEARCH_INDEX    2
  ------------------
  |  Branch (2191:13): [True: 2, False: 0]
  ------------------
 2192|      2|                if (wrapped) {
  ------------------
  |  Branch (2192:21): [True: 0, False: 2]
  ------------------
 2193|      0|                    PyErr_SetString(PyExc_OverflowError,
 2194|      0|                           "index exceeds C integer size");
 2195|      0|                    goto Fail;
 2196|      0|                }
 2197|      2|                goto Done;
 2198|       |
 2199|      2|            case PY_ITERSEARCH_CONTAINS:
  ------------------
  |  |   29|      0|#define PY_ITERSEARCH_CONTAINS 3
  ------------------
  |  Branch (2199:13): [True: 0, False: 2]
  ------------------
 2200|      0|                n = 1;
 2201|      0|                goto Done;
 2202|       |
 2203|      0|            default:
  ------------------
  |  Branch (2203:13): [True: 0, False: 2]
  ------------------
 2204|      0|                Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2205|      2|            }
 2206|      2|        }
 2207|       |
 2208|      7|        if (operation == PY_ITERSEARCH_INDEX) {
  ------------------
  |  |   28|      7|#define PY_ITERSEARCH_INDEX    2
  ------------------
  |  Branch (2208:13): [True: 7, False: 0]
  ------------------
 2209|      7|            if (n == PY_SSIZE_T_MAX)
  ------------------
  |  |  137|      7|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2209:17): [True: 0, False: 7]
  ------------------
 2210|      0|                wrapped = 1;
 2211|      7|            ++n;
 2212|      7|        }
 2213|      7|    }
 2214|       |
 2215|      5|    if (operation != PY_ITERSEARCH_INDEX)
  ------------------
  |  |   28|      5|#define PY_ITERSEARCH_INDEX    2
  ------------------
  |  Branch (2215:9): [True: 0, False: 5]
  ------------------
 2216|      0|        goto Done;
 2217|       |
 2218|      5|    PyErr_SetString(PyExc_ValueError,
 2219|      5|                    "sequence.index(x): x not in sequence");
 2220|       |    /* fall into failure code */
 2221|      5|Fail:
 2222|      5|    n = -1;
 2223|       |    /* fall through */
 2224|      7|Done:
 2225|      7|    Py_DECREF(it);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2226|      7|    return n;
 2227|       |
 2228|      5|}
PySequence_Contains:
 2242|   325k|{
 2243|   325k|    PySequenceMethods *sqm = Py_TYPE(seq)->tp_as_sequence;
  ------------------
  |  |  213|   325k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   325k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   325k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2244|   325k|    if (sqm != NULL && sqm->sq_contains != NULL) {
  ------------------
  |  Branch (2244:9): [True: 325k, False: 0]
  |  Branch (2244:24): [True: 325k, False: 0]
  ------------------
 2245|   325k|        int res = (*sqm->sq_contains)(seq, ob);
 2246|   325k|        assert(_Py_CheckSlotResult(seq, "__contains__", res >= 0));
  ------------------
  |  Branch (2246:9): [True: 325k, False: 0]
  ------------------
 2247|   325k|        return res;
 2248|   325k|    }
 2249|      0|    Py_ssize_t result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
  ------------------
  |  |   29|      0|#define PY_ITERSEARCH_CONTAINS 3
  ------------------
 2250|      0|    return Py_SAFE_DOWNCAST(result, Py_ssize_t, int);
  ------------------
  |  |  247|      0|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2251|   325k|}
PySequence_Index:
 2263|      7|{
 2264|      7|    return _PySequence_IterSearch(s, o, PY_ITERSEARCH_INDEX);
  ------------------
  |  |   28|      7|#define PY_ITERSEARCH_INDEX    2
  ------------------
 2265|      7|}
PyMapping_Check:
 2271|  1.15k|{
 2272|  1.15k|    return o && Py_TYPE(o)->tp_as_mapping &&
  ------------------
  |  |  213|  1.15k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2272:12): [True: 1.15k, False: 0]
  |  Branch (2272:17): [True: 1.15k, False: 0]
  ------------------
 2273|  1.15k|        Py_TYPE(o)->tp_as_mapping->mp_subscript;
  ------------------
  |  |  213|  1.15k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2273:9): [True: 1.15k, False: 0]
  ------------------
 2274|  1.15k|}
PyMapping_Size:
 2278|    384|{
 2279|    384|    if (o == NULL) {
  ------------------
  |  Branch (2279:9): [True: 0, False: 384]
  ------------------
 2280|      0|        null_error();
 2281|      0|        return -1;
 2282|      0|    }
 2283|       |
 2284|    384|    PyMappingMethods *m = Py_TYPE(o)->tp_as_mapping;
  ------------------
  |  |  213|    384|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    384|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    384|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2285|    384|    if (m && m->mp_length) {
  ------------------
  |  Branch (2285:9): [True: 384, False: 0]
  |  Branch (2285:14): [True: 384, False: 0]
  ------------------
 2286|    384|        Py_ssize_t len = m->mp_length(o);
 2287|    384|        assert(_Py_CheckSlotResult(o, "__len__", len >= 0));
  ------------------
  |  Branch (2287:9): [True: 384, False: 0]
  ------------------
 2288|    384|        return len;
 2289|    384|    }
 2290|       |
 2291|      0|    if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_length) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_length) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2291:9): [True: 0, False: 0]
  |  Branch (2291:39): [True: 0, False: 0]
  ------------------
 2292|      0|        type_error("%.200s is not a mapping", o);
 2293|      0|        return -1;
 2294|      0|    }
 2295|       |    /* PyMapping_Size() can be called from PyObject_Size(). */
 2296|      0|    type_error("object of type '%.200s' has no len()", o);
 2297|      0|    return -1;
 2298|      0|}
PyMapping_GetItemString:
 2310|      8|{
 2311|      8|    PyObject *okey, *r;
 2312|       |
 2313|      8|    if (key == NULL) {
  ------------------
  |  Branch (2313:9): [True: 0, False: 8]
  ------------------
 2314|      0|        return null_error();
 2315|      0|    }
 2316|       |
 2317|      8|    okey = PyUnicode_FromString(key);
 2318|      8|    if (okey == NULL)
  ------------------
  |  Branch (2318:9): [True: 0, False: 8]
  ------------------
 2319|      0|        return NULL;
 2320|      8|    r = PyObject_GetItem(o, okey);
 2321|      8|    Py_DECREF(okey);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2322|      8|    return r;
 2323|      8|}
PyMapping_SetItemString:
 2345|      3|{
 2346|      3|    PyObject *okey;
 2347|      3|    int r;
 2348|       |
 2349|      3|    if (key == NULL) {
  ------------------
  |  Branch (2349:9): [True: 0, False: 3]
  ------------------
 2350|      0|        null_error();
 2351|      0|        return -1;
 2352|      0|    }
 2353|       |
 2354|      3|    okey = PyUnicode_FromString(key);
 2355|      3|    if (okey == NULL)
  ------------------
  |  Branch (2355:9): [True: 0, False: 3]
  ------------------
 2356|      0|        return -1;
 2357|      3|    r = PyObject_SetItem(o, okey, value);
 2358|      3|    Py_DECREF(okey);
  ------------------
  |  |  430|      3|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2359|      3|    return r;
 2360|      3|}
PyMapping_Keys:
 2462|     20|{
 2463|     20|    if (o == NULL) {
  ------------------
  |  Branch (2463:9): [True: 0, False: 20]
  ------------------
 2464|      0|        return null_error();
 2465|      0|    }
 2466|     20|    if (PyAnyDict_CheckExact(o)) {
  ------------------
  |  |   41|     20|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|     20|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     40|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 12, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|      8|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      8|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2467|     12|        return PyDict_Keys(o);
 2468|     12|    }
 2469|      8|    return method_output_as_list(o, &_Py_ID(keys));
  ------------------
  |  |  936|      8|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      8|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      8|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2470|     20|}
PyMapping_Items:
 2474|     76|{
 2475|     76|    if (o == NULL) {
  ------------------
  |  Branch (2475:9): [True: 0, False: 76]
  ------------------
 2476|      0|        return null_error();
 2477|      0|    }
 2478|     76|    if (PyAnyDict_CheckExact(o)) {
  ------------------
  |  |   41|     76|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|     76|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|    152|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 76]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|     76|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     76|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 76]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2479|      0|        return PyDict_Items(o);
 2480|      0|    }
 2481|     76|    return method_output_as_list(o, &_Py_ID(items));
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2482|     76|}
PyObject_IsInstance:
 2727|   297k|{
 2728|   297k|    PyThreadState *tstate = _PyThreadState_GET();
 2729|   297k|    return object_recursive_isinstance(tstate, inst, cls);
 2730|   297k|}
PyObject_IsSubclass:
 2805|   291k|{
 2806|   291k|    PyThreadState *tstate = _PyThreadState_GET();
 2807|   291k|    return object_issubclass(tstate, derived, cls);
 2808|   291k|}
_PyObject_RealIsInstance:
 2813|     12|{
 2814|     12|    return object_isinstance(inst, cls);
 2815|     12|}
_PyObject_RealIsSubclass:
 2819|    666|{
 2820|    666|    return recursive_issubclass(derived, cls);
 2821|    666|}
PyObject_GetIter:
 2826|   123k|{
 2827|   123k|    PyTypeObject *t = Py_TYPE(o);
  ------------------
  |  |  213|   123k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   123k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   123k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2828|   123k|    getiterfunc f;
 2829|       |
 2830|   123k|    f = t->tp_iter;
 2831|   123k|    if (f == NULL) {
  ------------------
  |  Branch (2831:9): [True: 63, False: 123k]
  ------------------
 2832|     63|        if (PySequence_Check(o))
  ------------------
  |  Branch (2832:13): [True: 63, False: 0]
  ------------------
 2833|     63|            return PySeqIter_New(o);
 2834|      0|        return type_error("'%.200s' object is not iterable", o);
 2835|     63|    }
 2836|   123k|    else {
 2837|   123k|        PyObject *res = (*f)(o);
 2838|   123k|        if (res != NULL && !PyIter_Check(res)) {
  ------------------
  |  Branch (2838:13): [True: 123k, False: 0]
  |  Branch (2838:28): [True: 0, False: 123k]
  ------------------
 2839|      0|            PyErr_Format(PyExc_TypeError,
 2840|      0|                         "%T.__iter__() must return an iterator, not %T",
 2841|      0|                         o, res);
 2842|      0|            Py_SETREF(res, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2843|      0|        }
 2844|   123k|        return res;
 2845|   123k|    }
 2846|   123k|}
PyIter_Check:
 2869|   123k|{
 2870|   123k|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|   123k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   123k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   123k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2871|   123k|    return (tp->tp_iternext != NULL &&
  ------------------
  |  Branch (2871:13): [True: 123k, False: 0]
  ------------------
 2872|   123k|            tp->tp_iternext != &_PyObject_NextNotImplemented);
  ------------------
  |  Branch (2872:13): [True: 123k, False: 0]
  ------------------
 2873|   123k|}
PyIter_NextItem:
 2913|     71|{
 2914|     71|    assert(iter != NULL);
  ------------------
  |  Branch (2914:5): [True: 71, False: 0]
  ------------------
 2915|     71|    assert(item != NULL);
  ------------------
  |  Branch (2915:5): [True: 71, False: 0]
  ------------------
 2916|       |
 2917|     71|    if (Py_TYPE(iter)->tp_iternext == NULL) {
  ------------------
  |  |  213|     71|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     71|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     71|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2917:9): [True: 0, False: 71]
  ------------------
 2918|      0|        *item = NULL;
 2919|      0|        PyErr_Format(PyExc_TypeError, "expected an iterator, got '%T'", iter);
 2920|      0|        return -1;
 2921|      0|    }
 2922|       |
 2923|     71|    return iternext(iter, item);
 2924|     71|}
PyIter_Next:
 2936|   172k|{
 2937|   172k|    PyObject *item;
 2938|   172k|    (void)iternext(iter, &item);
 2939|   172k|    return item;
 2940|   172k|}
abstract.c:type_error:
   26|  4.74k|{
   27|  4.74k|    PyErr_Format(PyExc_TypeError, msg, Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|  4.74k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   28|       |    return NULL;
   29|  4.74k|}
abstract.c:_IsCContiguous:
  503|  19.4k|{
  504|  19.4k|    Py_ssize_t sd, dim;
  505|  19.4k|    int i;
  506|       |
  507|       |    /* 1) len = product(shape) * itemsize
  508|       |       2) itemsize > 0
  509|       |       3) len = 0 <==> exists i: shape[i] = 0 */
  510|  19.4k|    if (view->len == 0) return 1;
  ------------------
  |  Branch (510:9): [True: 0, False: 19.4k]
  ------------------
  511|  19.4k|    if (view->strides == NULL) return 1; /* C-contiguous by definition */
  ------------------
  |  Branch (511:9): [True: 0, False: 19.4k]
  ------------------
  512|       |
  513|       |    /* strides != NULL implies both of these */
  514|  19.4k|    assert(view->ndim > 0);
  ------------------
  |  Branch (514:5): [True: 19.4k, False: 0]
  ------------------
  515|  19.4k|    assert(view->shape != NULL);
  ------------------
  |  Branch (515:5): [True: 19.4k, False: 0]
  ------------------
  516|       |
  517|  19.4k|    sd = view->itemsize;
  518|  38.9k|    for (i=view->ndim-1; i>=0; i--) {
  ------------------
  |  Branch (518:26): [True: 19.4k, False: 19.4k]
  ------------------
  519|  19.4k|        dim = view->shape[i];
  520|  19.4k|        if (dim > 1 && view->strides[i] != sd) {
  ------------------
  |  Branch (520:13): [True: 19.4k, False: 7]
  |  Branch (520:24): [True: 0, False: 19.4k]
  ------------------
  521|      0|            return 0;
  522|      0|        }
  523|  19.4k|        sd *= dim;
  524|  19.4k|    }
  525|  19.4k|    return 1;
  526|  19.4k|}
abstract.c:binary_op:
 1013|  1.77M|{
 1014|  1.77M|    PyObject *result = BINARY_OP1(v, w, op_slot, op_name);
  ------------------
  |  |  996|  1.77M|#  define BINARY_OP1(v, w, op_slot, op_name) binary_op1(v, w, op_slot, op_name)
  ------------------
 1015|  1.77M|    if (result == Py_NotImplemented) {
  ------------------
  |  |  640|  1.77M|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1015:9): [True: 11.4k, False: 1.76M]
  ------------------
 1016|  11.4k|        Py_DECREF(result);
  ------------------
  |  |  430|  11.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|  11.4k|        return binop_type_error(v, w, op_name);
 1018|  11.4k|    }
 1019|  1.76M|    return result;
 1020|  1.77M|}
abstract.c:binary_op1:
  946|  2.48M|{
  947|  2.48M|    binaryfunc slotv;
  948|  2.48M|    if (Py_TYPE(v)->tp_as_number != NULL) {
  ------------------
  |  |  213|  2.48M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.48M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.48M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (948:9): [True: 2.46M, False: 17.6k]
  ------------------
  949|  2.46M|        slotv = NB_BINOP(Py_TYPE(v)->tp_as_number, op_slot);
  ------------------
  |  |  926|  2.46M|        (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
  ------------------
  950|  2.46M|    }
  951|  17.6k|    else {
  952|  17.6k|        slotv = NULL;
  953|  17.6k|    }
  954|       |
  955|  2.48M|    binaryfunc slotw;
  956|  2.48M|    if (!Py_IS_TYPE(w, Py_TYPE(v)) && Py_TYPE(w)->tp_as_number != NULL) {
  ------------------
  |  |  215|  4.96M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  2.48M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.48M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!Py_IS_TYPE(w, Py_TYPE(v)) && Py_TYPE(w)->tp_as_number != NULL) {
  ------------------
  |  |  213|   216k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   216k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   216k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (956:9): [True: 216k, False: 2.26M]
  |  Branch (956:39): [True: 182k, False: 33.4k]
  ------------------
  957|   182k|        slotw = NB_BINOP(Py_TYPE(w)->tp_as_number, op_slot);
  ------------------
  |  |  926|   182k|        (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
  ------------------
  958|   182k|        if (slotw == slotv) {
  ------------------
  |  Branch (958:13): [True: 291, False: 182k]
  ------------------
  959|    291|            slotw = NULL;
  960|    291|        }
  961|   182k|    }
  962|  2.29M|    else {
  963|  2.29M|        slotw = NULL;
  964|  2.29M|    }
  965|       |
  966|  2.48M|    if (slotv) {
  ------------------
  |  Branch (966:9): [True: 2.45M, False: 29.1k]
  ------------------
  967|  2.45M|        PyObject *x;
  968|  2.45M|        if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
  ------------------
  |  |  213|   149k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   149k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   149k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
  ------------------
  |  |  213|   149k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   149k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   149k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (968:13): [True: 149k, False: 2.30M]
  |  Branch (968:22): [True: 520, False: 148k]
  ------------------
  969|    520|            x = slotw(v, w);
  970|    520|            if (x != Py_NotImplemented)
  ------------------
  |  |  640|    520|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (970:17): [True: 520, False: 0]
  ------------------
  971|    520|                return x;
  972|      0|            Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|      0|            slotw = NULL;
  974|      0|        }
  975|  2.45M|        x = slotv(v, w);
  976|  2.45M|        assert(_Py_CheckSlotResult(v, op_name, x != NULL));
  ------------------
  |  Branch (976:9): [True: 2.45M, False: 0]
  ------------------
  977|  2.45M|        if (x != Py_NotImplemented) {
  ------------------
  |  |  640|  2.45M|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (977:13): [True: 2.35M, False: 95.9k]
  ------------------
  978|  2.35M|            return x;
  979|  2.35M|        }
  980|  95.9k|        Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|  95.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  95.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  95.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|  95.9k|    }
  982|   125k|    if (slotw) {
  ------------------
  |  Branch (982:9): [True: 51.0k, False: 74.0k]
  ------------------
  983|  51.0k|        PyObject *x = slotw(v, w);
  984|  51.0k|        assert(_Py_CheckSlotResult(w, op_name, x != NULL));
  ------------------
  |  Branch (984:9): [True: 51.0k, False: 0]
  ------------------
  985|  51.0k|        if (x != Py_NotImplemented) {
  ------------------
  |  |  640|  51.0k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (985:13): [True: 40.0k, False: 10.9k]
  ------------------
  986|  40.0k|            return x;
  987|  40.0k|        }
  988|  10.9k|        Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|  10.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  989|  10.9k|    }
  990|  85.0k|    Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|  85.0k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|  85.0k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  991|   125k|}
abstract.c:binop_type_error:
 1001|  12.7k|{
 1002|  12.7k|    PyErr_Format(PyExc_TypeError,
 1003|  12.7k|                 "unsupported operand type(s) for %.100s: "
 1004|  12.7k|                 "'%.100s' and '%.100s'",
 1005|  12.7k|                 op_name,
 1006|  12.7k|                 Py_TYPE(v)->tp_name,
  ------------------
  |  |  213|  12.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1007|  12.7k|                 Py_TYPE(w)->tp_name);
  ------------------
  |  |  213|  12.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1008|       |    return NULL;
 1009|  12.7k|}
abstract.c:sequence_repeat:
 1159|  53.0k|{
 1160|  53.0k|    Py_ssize_t count;
 1161|  53.0k|    if (_PyIndex_Check(n)) {
  ------------------
  |  Branch (1161:9): [True: 50.1k, False: 2.87k]
  ------------------
 1162|  50.1k|        count = PyNumber_AsSsize_t(n, PyExc_OverflowError);
 1163|  50.1k|        if (count == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1163:13): [True: 1.60k, False: 48.5k]
  |  Branch (1163:28): [True: 1.47k, False: 122]
  ------------------
 1164|  1.47k|            return NULL;
 1165|  1.47k|        }
 1166|  50.1k|    }
 1167|  2.87k|    else {
 1168|  2.87k|        return type_error("can't multiply sequence by "
 1169|  2.87k|                          "non-int of type '%.200s'", n);
 1170|  2.87k|    }
 1171|  48.6k|    PyObject *res = (*repeatfunc)(seq, count);
 1172|  48.6k|    assert(_Py_CheckSlotResult(seq, "*", res != NULL));
  ------------------
  |  Branch (1172:5): [True: 48.6k, False: 0]
  ------------------
 1173|  48.6k|    return res;
 1174|  48.6k|}
abstract.c:ternary_op:
 1037|   111k|{
 1038|   111k|    PyNumberMethods *mv = Py_TYPE(v)->tp_as_number;
  ------------------
  |  |  213|   111k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   111k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   111k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1039|   111k|    PyNumberMethods *mw = Py_TYPE(w)->tp_as_number;
  ------------------
  |  |  213|   111k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   111k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   111k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|       |
 1041|   111k|    ternaryfunc slotv;
 1042|   111k|    if (mv != NULL) {
  ------------------
  |  Branch (1042:9): [True: 111k, False: 520]
  ------------------
 1043|   111k|        slotv = NB_TERNOP(mv, op_slot);
  ------------------
  |  |  928|   111k|        (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
  ------------------
 1044|   111k|    }
 1045|    520|    else {
 1046|    520|        slotv = NULL;
 1047|    520|    }
 1048|       |
 1049|   111k|    ternaryfunc slotw;
 1050|   111k|    if (!Py_IS_TYPE(w, Py_TYPE(v)) && mw != NULL) {
  ------------------
  |  |  215|   223k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   111k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   111k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1050:9): [True: 45.2k, False: 66.4k]
  |  Branch (1050:39): [True: 45.1k, False: 106]
  ------------------
 1051|  45.1k|        slotw = NB_TERNOP(mw, op_slot);
  ------------------
  |  |  928|  45.1k|        (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
  ------------------
 1052|  45.1k|        if (slotw == slotv) {
  ------------------
  |  Branch (1052:13): [True: 60, False: 45.0k]
  ------------------
 1053|     60|            slotw = NULL;
 1054|     60|        }
 1055|  45.1k|    }
 1056|  66.5k|    else {
 1057|  66.5k|        slotw = NULL;
 1058|  66.5k|    }
 1059|       |
 1060|   111k|    if (slotv) {
  ------------------
  |  Branch (1060:9): [True: 111k, False: 568]
  ------------------
 1061|   111k|        PyObject *x;
 1062|   111k|        if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
  ------------------
  |  |  213|  44.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  44.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
  ------------------
  |  |  213|  44.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  44.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1062:13): [True: 44.4k, False: 66.6k]
  |  Branch (1062:22): [True: 0, False: 44.4k]
  ------------------
 1063|      0|            x = slotw(v, w, z);
 1064|      0|            if (x != Py_NotImplemented) {
  ------------------
  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1064:17): [True: 0, False: 0]
  ------------------
 1065|      0|                return x;
 1066|      0|            }
 1067|      0|            Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1068|      0|            slotw = NULL;
 1069|      0|        }
 1070|   111k|        x = slotv(v, w, z);
 1071|   111k|        assert(_Py_CheckSlotResult(v, op_name, x != NULL));
  ------------------
  |  Branch (1071:9): [True: 111k, False: 0]
  ------------------
 1072|   111k|        if (x != Py_NotImplemented) {
  ------------------
  |  |  640|   111k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1072:13): [True: 87.4k, False: 23.7k]
  ------------------
 1073|  87.4k|            return x;
 1074|  87.4k|        }
 1075|  23.7k|        Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|  23.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  23.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1076|  23.7k|    }
 1077|  24.2k|    if (slotw) {
  ------------------
  |  Branch (1077:9): [True: 24.1k, False: 116]
  ------------------
 1078|  24.1k|        PyObject *x = slotw(v, w, z);
 1079|  24.1k|        assert(_Py_CheckSlotResult(w, op_name, x != NULL));
  ------------------
  |  Branch (1079:9): [True: 24.1k, False: 0]
  ------------------
 1080|  24.1k|        if (x != Py_NotImplemented) {
  ------------------
  |  |  640|  24.1k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1080:13): [True: 23.5k, False: 568]
  ------------------
 1081|  23.5k|            return x;
 1082|  23.5k|        }
 1083|    568|        Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|    568|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    568|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    568|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1084|    568|    }
 1085|       |
 1086|    684|    PyNumberMethods *mz = Py_TYPE(z)->tp_as_number;
  ------------------
  |  |  213|    684|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    684|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    684|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|    684|    if (mz != NULL) {
  ------------------
  |  Branch (1087:9): [True: 684, False: 0]
  ------------------
 1088|    684|        ternaryfunc slotz = NB_TERNOP(mz, op_slot);
  ------------------
  |  |  928|    684|        (*(ternaryfunc*)(& ((char*)nb_methods)[slot]))
  ------------------
 1089|    684|        if (slotz == slotv || slotz == slotw) {
  ------------------
  |  Branch (1089:13): [True: 568, False: 116]
  |  Branch (1089:31): [True: 116, False: 0]
  ------------------
 1090|    684|            slotz = NULL;
 1091|    684|        }
 1092|    684|        if (slotz) {
  ------------------
  |  Branch (1092:13): [True: 0, False: 684]
  ------------------
 1093|      0|            PyObject *x = slotz(v, w, z);
 1094|      0|            assert(_Py_CheckSlotResult(z, op_name, x != NULL));
  ------------------
  |  Branch (1094:13): [True: 0, False: 0]
  ------------------
 1095|      0|            if (x != Py_NotImplemented) {
  ------------------
  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1095:17): [True: 0, False: 0]
  ------------------
 1096|      0|                return x;
 1097|      0|            }
 1098|      0|            Py_DECREF(x); /* can't do it */
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|      0|        }
 1100|    684|    }
 1101|       |
 1102|    684|    if (z == Py_None) {
  ------------------
  |  |  616|    684|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1102:9): [True: 684, False: 0]
  ------------------
 1103|    684|        PyErr_Format(
 1104|    684|            PyExc_TypeError,
 1105|    684|            "unsupported operand type(s) for %.100s: "
 1106|    684|            "'%.100s' and '%.100s'",
 1107|    684|            op_name,
 1108|    684|            Py_TYPE(v)->tp_name,
  ------------------
  |  |  213|    684|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    684|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    684|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|    684|            Py_TYPE(w)->tp_name);
  ------------------
  |  |  213|    684|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    684|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    684|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|    684|    }
 1111|      0|    else {
 1112|      0|        PyErr_Format(
 1113|      0|            PyExc_TypeError,
 1114|      0|            "unsupported operand type(s) for %.100s: "
 1115|      0|            "'%.100s', '%.100s', '%.100s'",
 1116|      0|            op_name,
 1117|      0|            Py_TYPE(v)->tp_name,
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1118|      0|            Py_TYPE(w)->tp_name,
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1119|      0|            Py_TYPE(z)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1120|      0|    }
 1121|       |    return NULL;
 1122|    684|}
abstract.c:binary_iop:
 1263|   645k|{
 1264|   645k|    PyObject *result = BINARY_IOP1(v, w, iop_slot, op_slot, op_name);
  ------------------
  |  | 1257|   645k|#  define BINARY_IOP1(v, w, iop_slot, op_slot, op_name) binary_iop1(v, w, iop_slot, op_slot, op_name)
  ------------------
 1265|   645k|    if (result == Py_NotImplemented) {
  ------------------
  |  |  640|   645k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1265:9): [True: 0, False: 645k]
  ------------------
 1266|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1267|      0|        return binop_type_error(v, w, op_name);
 1268|      0|    }
 1269|   645k|    return result;
 1270|   645k|}
abstract.c:binary_iop1:
 1234|   673k|{
 1235|   673k|    PyNumberMethods *mv = Py_TYPE(v)->tp_as_number;
  ------------------
  |  |  213|   673k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   673k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   673k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|   673k|    if (mv != NULL) {
  ------------------
  |  Branch (1236:9): [True: 673k, False: 18]
  ------------------
 1237|   673k|        binaryfunc slot = NB_BINOP(mv, iop_slot);
  ------------------
  |  |  926|   673k|        (*(binaryfunc*)(& ((char*)nb_methods)[slot]))
  ------------------
 1238|   673k|        if (slot) {
  ------------------
  |  Branch (1238:13): [True: 229k, False: 443k]
  ------------------
 1239|   229k|            PyObject *x = (slot)(v, w);
 1240|   229k|            assert(_Py_CheckSlotResult(v, op_name, x != NULL));
  ------------------
  |  Branch (1240:13): [True: 229k, False: 0]
  ------------------
 1241|   229k|            if (x != Py_NotImplemented) {
  ------------------
  |  |  640|   229k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1241:17): [True: 229k, False: 0]
  ------------------
 1242|   229k|                return x;
 1243|   229k|            }
 1244|      0|            Py_DECREF(x);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1245|      0|        }
 1246|   673k|    }
 1247|       |#ifdef NDEBUG
 1248|       |    return binary_op1(v, w, op_slot);
 1249|       |#else
 1250|   443k|    return binary_op1(v, w, op_slot, op_name);
 1251|   673k|#endif
 1252|   673k|}
abstract.c:method_output_as_list:
 2435|     84|{
 2436|     84|    PyObject *it, *result, *meth_output;
 2437|       |
 2438|     84|    assert(o != NULL);
  ------------------
  |  Branch (2438:5): [True: 84, False: 0]
  ------------------
 2439|     84|    meth_output = PyObject_CallMethodNoArgs(o, meth);
 2440|     84|    if (meth_output == NULL || PyList_CheckExact(meth_output)) {
  ------------------
  |  |   26|     84|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|     84|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     84|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     84|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 84]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2440:9): [True: 0, False: 84]
  ------------------
 2441|      0|        return meth_output;
 2442|      0|    }
 2443|     84|    it = PyObject_GetIter(meth_output);
 2444|     84|    if (it == NULL) {
  ------------------
  |  Branch (2444:9): [True: 0, False: 84]
  ------------------
 2445|      0|        PyThreadState *tstate = _PyThreadState_GET();
 2446|      0|        if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
  ------------------
  |  Branch (2446:13): [True: 0, False: 0]
  ------------------
 2447|      0|            _PyErr_Format(tstate, PyExc_TypeError,
 2448|      0|                          "%T.%U() must return an iterable, not %T",
 2449|      0|                          o, meth, meth_output);
 2450|      0|        }
 2451|      0|        Py_DECREF(meth_output);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2452|      0|        return NULL;
 2453|      0|    }
 2454|     84|    Py_DECREF(meth_output);
  ------------------
  |  |  430|     84|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     84|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     84|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2455|     84|    result = PySequence_List(it);
 2456|     84|    Py_DECREF(it);
  ------------------
  |  |  430|     84|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     84|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     84|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2457|     84|    return result;
 2458|     84|}
abstract.c:object_recursive_isinstance:
 2672|   297k|{
 2673|       |    /* Quick test for an exact match */
 2674|   297k|    if (Py_IS_TYPE(inst, (PyTypeObject *)cls)) {
  ------------------
  |  |  215|   297k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   297k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   297k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 277k, False: 20.6k]
  |  |  ------------------
  ------------------
 2675|   277k|        return 1;
 2676|   277k|    }
 2677|       |
 2678|       |    /* We know what type's __instancecheck__ does. */
 2679|  20.6k|    if (PyType_CheckExact(cls)) {
  ------------------
  |  |  776|  20.6k|#  define PyType_CheckExact(op) PyType_CheckExact(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  20.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (776:33): [True: 20.5k, False: 121]
  |  |  ------------------
  ------------------
 2680|  20.5k|        return object_isinstance(inst, cls);
 2681|  20.5k|    }
 2682|       |
 2683|    121|    if (_PyUnion_Check(cls)) {
  ------------------
  |  |   15|    121|#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type)
  |  |  ------------------
  |  |  |  |  215|    121|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    121|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    121|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 121]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2684|      0|        cls = _Py_union_args(cls);
 2685|      0|    }
 2686|       |
 2687|    121|    if (PyTuple_Check(cls)) {
  ------------------
  |  |   27|    121|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    121|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 109, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2688|       |        /* Not a general sequence -- that opens up the road to
 2689|       |           recursion and stack overflow. */
 2690|    109|        if (_Py_EnterRecursiveCallTstate(tstate, " in __instancecheck__")) {
  ------------------
  |  Branch (2690:13): [True: 0, False: 109]
  ------------------
 2691|      0|            return -1;
 2692|      0|        }
 2693|    109|        Py_ssize_t n = PyTuple_GET_SIZE(cls);
  ------------------
  |  |   27|    109|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    109|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    109|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2694|    109|        int r = 0;
 2695|    113|        for (Py_ssize_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (2695:32): [True: 113, False: 0]
  ------------------
 2696|    113|            PyObject *item = PyTuple_GET_ITEM(cls, i);
  ------------------
  |  |   29|    113|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    113|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    113|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2696:30): [True: 113, False: 0]
  ------------------
 2697|      0|            r = object_recursive_isinstance(tstate, inst, item);
 2698|    113|            if (r != 0) {
  ------------------
  |  Branch (2698:17): [True: 109, False: 4]
  ------------------
 2699|       |                /* either found it, or got an error */
 2700|    109|                break;
 2701|    109|            }
 2702|    113|        }
 2703|    109|        _Py_LeaveRecursiveCallTstate(tstate);
 2704|    109|        return r;
 2705|    109|    }
 2706|       |
 2707|     12|    PyObject *res;
 2708|     12|    int found = call_special_method(tstate, cls, &_Py_ID(__instancecheck__),
  ------------------
  |  |  936|     12|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     12|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     12|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2709|     12|                                    " in __instancecheck__", inst, &res);
 2710|     12|    if (found > 0) {
  ------------------
  |  Branch (2710:9): [True: 12, False: 0]
  ------------------
 2711|     12|        int ok = PyObject_IsTrue(res);
 2712|     12|        Py_DECREF(res);
  ------------------
  |  |  430|     12|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2713|       |
 2714|     12|        return ok;
 2715|     12|    }
 2716|      0|    else if (found < 0) {
  ------------------
  |  Branch (2716:14): [True: 0, False: 0]
  ------------------
 2717|      0|        return -1;
 2718|      0|    }
 2719|       |
 2720|       |    /* cls has no __instancecheck__() method */
 2721|      0|    return object_isinstance(inst, cls);
 2722|     12|}
abstract.c:call_special_method:
 2642|    112|{
 2643|    112|    _PyCStackRef cref;
 2644|    112|    _PyThreadState_PushCStackRef(tstate, &cref);
 2645|    112|    _PyStackRef self = PyStackRef_FromPyObjectBorrow(cls);
 2646|    112|    int found = _PyObject_LookupSpecialMethod(name, &cref.ref, &self);
 2647|    112|    if (found > 0) {
  ------------------
  |  Branch (2647:9): [True: 112, False: 0]
  ------------------
 2648|    112|        *res = NULL;
 2649|    112|        if (!_Py_EnterRecursiveCallTstate(tstate, where)) {
  ------------------
  |  Branch (2649:13): [True: 112, False: 0]
  ------------------
 2650|    112|            PyObject *method = PyStackRef_AsPyObjectBorrow(cref.ref);
 2651|    112|            PyObject *args[2] = {PyStackRef_AsPyObjectBorrow(self), arg};
 2652|    112|            if (args[0] != NULL) {
  ------------------
  |  Branch (2652:17): [True: 112, False: 0]
  ------------------
 2653|       |                /* Unbound method: prepend self. */
 2654|    112|                *res = PyObject_Vectorcall(method, args, 2, NULL);
 2655|    112|            }
 2656|      0|            else {
 2657|      0|                *res = PyObject_Vectorcall(method, args + 1, 1, NULL);
 2658|      0|            }
 2659|    112|            _Py_LeaveRecursiveCallTstate(tstate);
 2660|    112|        }
 2661|    112|        if (*res == NULL) {
  ------------------
  |  Branch (2661:13): [True: 0, False: 112]
  ------------------
 2662|      0|            found = -1;
 2663|      0|        }
 2664|    112|    }
 2665|    112|    PyStackRef_XCLOSE(self);
 2666|    112|    _PyThreadState_PopCStackRef(tstate, &cref);
 2667|    112|    return found;
 2668|    112|}
abstract.c:object_issubclass:
 2755|   291k|{
 2756|       |    /* We know what type's __subclasscheck__ does. */
 2757|   291k|    if (PyType_CheckExact(cls)) {
  ------------------
  |  |  776|   291k|#  define PyType_CheckExact(op) PyType_CheckExact(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   291k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   291k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (776:33): [True: 291k, False: 100]
  |  |  ------------------
  ------------------
 2758|       |        /* Quick test for an exact match */
 2759|   291k|        if (derived == cls)
  ------------------
  |  Branch (2759:13): [True: 49.1k, False: 242k]
  ------------------
 2760|  49.1k|            return 1;
 2761|   242k|        return recursive_issubclass(derived, cls);
 2762|   291k|    }
 2763|       |
 2764|    100|    if (_PyUnion_Check(cls)) {
  ------------------
  |  |   15|    100|#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type)
  |  |  ------------------
  |  |  |  |  215|    100|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    100|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    100|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 100]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2765|      0|        cls = _Py_union_args(cls);
 2766|      0|    }
 2767|       |
 2768|    100|    if (PyTuple_Check(cls)) {
  ------------------
  |  |   27|    100|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    100|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 100]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2769|       |
 2770|      0|        if (_Py_EnterRecursiveCallTstate(tstate, " in __subclasscheck__")) {
  ------------------
  |  Branch (2770:13): [True: 0, False: 0]
  ------------------
 2771|      0|            return -1;
 2772|      0|        }
 2773|      0|        Py_ssize_t n = PyTuple_GET_SIZE(cls);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2774|      0|        int r = 0;
 2775|      0|        for (Py_ssize_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (2775:32): [True: 0, False: 0]
  ------------------
 2776|      0|            PyObject *item = PyTuple_GET_ITEM(cls, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2776:30): [True: 0, False: 0]
  ------------------
 2777|      0|            r = object_issubclass(tstate, derived, item);
 2778|      0|            if (r != 0)
  ------------------
  |  Branch (2778:17): [True: 0, False: 0]
  ------------------
 2779|       |                /* either found it, or got an error */
 2780|      0|                break;
 2781|      0|        }
 2782|      0|        _Py_LeaveRecursiveCallTstate(tstate);
 2783|      0|        return r;
 2784|      0|    }
 2785|       |
 2786|    100|    PyObject *res;
 2787|    100|    int found = call_special_method(tstate, cls, &_Py_ID(__subclasscheck__),
  ------------------
  |  |  936|    100|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    100|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    100|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2788|    100|                                    " in __subclasscheck__", derived, &res);
 2789|    100|    if (found > 0) {
  ------------------
  |  Branch (2789:9): [True: 100, False: 0]
  ------------------
 2790|    100|        int ok = PyObject_IsTrue(res);
 2791|    100|        Py_DECREF(res);
  ------------------
  |  |  430|    100|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    100|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    100|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2792|    100|        return ok;
 2793|    100|    }
 2794|      0|    else if (found < 0) {
  ------------------
  |  Branch (2794:14): [True: 0, False: 0]
  ------------------
 2795|      0|        return -1;
 2796|      0|    }
 2797|       |
 2798|       |    /* Can be reached when infinite recursion happens. */
 2799|      0|    return recursive_issubclass(derived, cls);
 2800|    100|}
abstract.c:object_isinstance:
 2605|  20.5k|{
 2606|  20.5k|    PyObject *icls;
 2607|  20.5k|    int retval;
 2608|  20.5k|    if (PyType_Check(cls)) {
  ------------------
  |  |  766|  20.5k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  20.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 20.5k, False: 0]
  |  |  ------------------
  ------------------
 2609|  20.5k|        retval = PyObject_TypeCheck(inst, (PyTypeObject *)cls);
  ------------------
  |  |  378|  20.5k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  20.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2610|  20.5k|        if (retval == 0) {
  ------------------
  |  Branch (2610:13): [True: 20.4k, False: 93]
  ------------------
 2611|  20.4k|            retval = PyObject_GetOptionalAttr(inst, &_Py_ID(__class__), &icls);
  ------------------
  |  |  936|  20.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  20.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  20.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2612|  20.4k|            if (icls != NULL) {
  ------------------
  |  Branch (2612:17): [True: 20.4k, False: 0]
  ------------------
 2613|  20.4k|                if (icls != (PyObject *)(Py_TYPE(inst)) && PyType_Check(icls)) {
  ------------------
  |  |  213|  20.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  20.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              if (icls != (PyObject *)(Py_TYPE(inst)) && PyType_Check(icls)) {
  ------------------
  |  |  766|      0|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2613:21): [True: 0, False: 20.4k]
  ------------------
 2614|      0|                    retval = PyType_IsSubtype(
 2615|      0|                        (PyTypeObject *)icls,
 2616|      0|                        (PyTypeObject *)cls);
 2617|      0|                }
 2618|  20.4k|                else {
 2619|  20.4k|                    retval = 0;
 2620|  20.4k|                }
 2621|  20.4k|                Py_DECREF(icls);
  ------------------
  |  |  430|  20.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  20.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2622|  20.4k|            }
 2623|  20.4k|        }
 2624|  20.5k|    }
 2625|      0|    else {
 2626|      0|        if (!check_class(cls,
  ------------------
  |  Branch (2626:13): [True: 0, False: 0]
  ------------------
 2627|      0|            "isinstance() arg 2 must be a type, a tuple of types, or a union"))
 2628|      0|            return -1;
 2629|      0|        retval = PyObject_GetOptionalAttr(inst, &_Py_ID(__class__), &icls);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2630|      0|        if (icls != NULL) {
  ------------------
  |  Branch (2630:13): [True: 0, False: 0]
  ------------------
 2631|      0|            retval = abstract_issubclass(icls, cls);
 2632|      0|            Py_DECREF(icls);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2633|      0|        }
 2634|      0|    }
 2635|       |
 2636|  20.5k|    return retval;
 2637|  20.5k|}
abstract.c:recursive_issubclass:
 2735|   243k|{
 2736|   243k|    if (PyType_Check(cls) && PyType_Check(derived)) {
  ------------------
  |  |  766|   486k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   243k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   243k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 243k, False: 0]
  |  |  ------------------
  ------------------
                  if (PyType_Check(cls) && PyType_Check(derived)) {
  ------------------
  |  |  766|   243k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   243k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   243k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 243k, False: 0]
  |  |  ------------------
  ------------------
 2737|       |        /* Fast path (non-recursive) */
 2738|   243k|        return PyType_IsSubtype((PyTypeObject *)derived, (PyTypeObject *)cls);
 2739|   243k|    }
 2740|      0|    if (!check_class(derived,
  ------------------
  |  Branch (2740:9): [True: 0, False: 0]
  ------------------
 2741|      0|                     "issubclass() arg 1 must be a class"))
 2742|      0|        return -1;
 2743|       |
 2744|      0|    if (!_PyUnion_Check(cls) && !check_class(cls,
  ------------------
  |  |   15|      0|#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2744:9): [True: 0, False: 0]
  |  Branch (2744:33): [True: 0, False: 0]
  ------------------
 2745|      0|                            "issubclass() arg 2 must be a class,"
 2746|      0|                            " a tuple of classes, or a union")) {
 2747|      0|        return -1;
 2748|      0|    }
 2749|       |
 2750|      0|    return abstract_issubclass(derived, cls);
 2751|      0|}
abstract.c:iternext:
 2886|   172k|{
 2887|   172k|    iternextfunc tp_iternext = Py_TYPE(iter)->tp_iternext;
  ------------------
  |  |  213|   172k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   172k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   172k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2888|   172k|    if ((*item = tp_iternext(iter))) {
  ------------------
  |  Branch (2888:9): [True: 105k, False: 67.4k]
  ------------------
 2889|   105k|        return 1;
 2890|   105k|    }
 2891|       |
 2892|  67.4k|    PyThreadState *tstate = _PyThreadState_GET();
 2893|       |    /* When the iterator is exhausted it must return NULL;
 2894|       |     * a StopIteration exception may or may not be set. */
 2895|  67.4k|    if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2895:9): [True: 67.4k, False: 0]
  ------------------
 2896|  67.4k|        return 0;
 2897|  67.4k|    }
 2898|      0|    if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
  ------------------
  |  Branch (2898:9): [True: 0, False: 0]
  ------------------
 2899|      0|        _PyErr_Clear(tstate);
 2900|      0|        return 0;
 2901|      0|    }
 2902|       |
 2903|       |    /* Error case: an exception (different than StopIteration) is set. */
 2904|      0|    return -1;
 2905|      0|}

PyBool_FromLong:
   22|  1.15M|{
   23|  1.15M|    return ok ? Py_True : Py_False;
  ------------------
  |  |   26|  1.15M|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|   415k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   415k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return ok ? Py_True : Py_False;
  ------------------
  |  |   25|  1.15M|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|   740k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   740k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (23:12): [True: 415k, False: 740k]
  ------------------
   24|  1.15M|}
boolobject.c:bool_repr:
   15|    385|{
   16|    385|    return self == Py_True ? &_Py_ID(True) : &_Py_ID(False);
  ------------------
  |  |   26|    385|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|    385|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    385|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return self == Py_True ? &_Py_ID(True) : &_Py_ID(False);
  ------------------
  |  |  936|    381|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    381|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    381|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return self == Py_True ? &_Py_ID(True) : &_Py_ID(False);
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (16:12): [True: 381, False: 4]
  ------------------
   17|    385|}
boolobject.c:bool_and:
   88|  1.00k|{
   89|  1.00k|    if (!PyBool_Check(a) || !PyBool_Check(b))
  ------------------
  |  |   12|  1.00k|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|  2.01k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!PyBool_Check(a) || !PyBool_Check(b))
  ------------------
  |  |   12|    941|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|    941|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    941|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    941|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (89:9): [True: 65, False: 941]
  |  Branch (89:29): [True: 455, False: 486]
  ------------------
   90|    520|        return PyLong_Type.tp_as_number->nb_and(a, b);
   91|    486|    return PyBool_FromLong((a == Py_True) & (b == Py_True));
  ------------------
  |  |   26|    486|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|    486|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    486|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return PyBool_FromLong((a == Py_True) & (b == Py_True));
  ------------------
  |  |   26|    486|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|    486|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    486|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|  1.00k|}
boolobject.c:bool_xor:
  104|    179|{
  105|    179|    if (!PyBool_Check(a) || !PyBool_Check(b))
  ------------------
  |  |   12|    179|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|    358|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    179|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    179|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!PyBool_Check(a) || !PyBool_Check(b))
  ------------------
  |  |   12|     90|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|     90|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (105:9): [True: 89, False: 90]
  |  Branch (105:29): [True: 2, False: 88]
  ------------------
  106|     91|        return PyLong_Type.tp_as_number->nb_xor(a, b);
  107|     88|    return PyBool_FromLong((a == Py_True) ^ (b == Py_True));
  ------------------
  |  |   26|     88|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     88|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return PyBool_FromLong((a == Py_True) ^ (b == Py_True));
  ------------------
  |  |   26|     88|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     88|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|    179|}
boolobject.c:bool_or:
   96|    421|{
   97|    421|    if (!PyBool_Check(a) || !PyBool_Check(b))
  ------------------
  |  |   12|    421|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|    842|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    421|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    421|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!PyBool_Check(a) || !PyBool_Check(b))
  ------------------
  |  |   12|     60|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|     60|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (97:9): [True: 361, False: 60]
  |  Branch (97:29): [True: 42, False: 18]
  ------------------
   98|    403|        return PyLong_Type.tp_as_number->nb_or(a, b);
   99|     18|    return PyBool_FromLong((a == Py_True) | (b == Py_True));
  ------------------
  |  |   26|     18|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return PyBool_FromLong((a == Py_True) | (b == Py_True));
  ------------------
  |  |   26|     18|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|    421|}
boolobject.c:bool_vectorcall:
   47|      6|{
   48|      6|    long ok = 0;
   49|      6|    if (!_PyArg_NoKwnames("bool", kwnames)) {
  ------------------
  |  |   15|      6|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 6, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   50|      0|        return NULL;
   51|      0|    }
   52|       |
   53|      6|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      6|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
   54|      6|    if (!_PyArg_CheckPositional("bool", nargs, 0, 1)) {
  ------------------
  |  |   31|      6|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 6, False: 0]
  |  |  |  Branch (31:27): [True: 6, False: 0]
  |  |  ------------------
  |  |   32|      6|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   55|      0|        return NULL;
   56|      0|    }
   57|       |
   58|      6|    assert(PyType_Check(type));
  ------------------
  |  Branch (58:5): [True: 6, False: 0]
  ------------------
   59|      6|    if (nargs) {
  ------------------
  |  Branch (59:9): [True: 6, False: 0]
  ------------------
   60|      6|        ok = PyObject_IsTrue(args[0]);
   61|      6|        if (ok < 0) {
  ------------------
  |  Branch (61:13): [True: 0, False: 6]
  ------------------
   62|      0|            return NULL;
   63|      0|        }
   64|      6|    }
   65|      6|    return PyBool_FromLong(ok);
   66|      6|}

PyByteArray_FromStringAndSize:
  170|    280|{
  171|    280|    PyByteArrayObject *new;
  172|       |
  173|    280|    if (size < 0) {
  ------------------
  |  Branch (173:9): [True: 0, False: 280]
  ------------------
  174|      0|        PyErr_SetString(PyExc_SystemError,
  175|      0|            "Negative size passed to PyByteArray_FromStringAndSize");
  176|      0|        return NULL;
  177|      0|    }
  178|       |
  179|    280|    new = PyObject_New(PyByteArrayObject, &PyByteArray_Type);
  ------------------
  |  |  130|    280|#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
  ------------------
  180|    280|    if (new == NULL) {
  ------------------
  |  Branch (180:9): [True: 0, False: 280]
  ------------------
  181|      0|        return NULL;
  182|      0|    }
  183|       |
  184|       |    /* Fill values used in bytearray_dealloc.
  185|       |
  186|       |       In an optimized build the memory isn't zeroed and ob_exports would be
  187|       |       uninitialized when when PyBytes_FromStringAndSize errored leading to
  188|       |       intermittent test failures. */
  189|    280|    new->ob_exports = 0;
  190|       |
  191|       |    /* Optimization: size=0 bytearray should not allocate space
  192|       |
  193|       |       PyBytes_FromStringAndSize returns the empty bytes global when size=0 so
  194|       |       no allocation occurs. */
  195|    280|    new->ob_bytes_object = PyBytes_FromStringAndSize(NULL, size);
  196|    280|    if (new->ob_bytes_object == NULL) {
  ------------------
  |  Branch (196:9): [True: 0, False: 280]
  ------------------
  197|      0|        Py_DECREF(new);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|      0|        return NULL;
  199|      0|    }
  200|    280|    bytearray_reinit_from_bytes(new, size);
  201|    280|    if (bytes != NULL && size > 0) {
  ------------------
  |  Branch (201:9): [True: 104, False: 176]
  |  Branch (201:26): [True: 104, False: 0]
  ------------------
  202|    104|        memcpy(new->ob_bytes, bytes, size);
  203|    104|    }
  204|       |
  205|    280|    return (PyObject *)new;
  206|    280|}
PyByteArray_Resize:
  348|   239k|{
  349|   239k|    int ret;
  350|   239k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|   239k|    {
  ------------------
  351|   239k|    ret = bytearray_resize_lock_held(self, requested_size);
  352|   239k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   239k|    }
  ------------------
  353|   239k|    return ret;
  354|   239k|}
bytearrayobject.c:bytearray_reinit_from_bytes:
   57|   899k|{
   58|   899k|    Py_ssize_t alloc = PyBytes_GET_SIZE(self->ob_bytes_object);
  ------------------
  |  |   33|   899k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   899k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   899k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   59|   899k|    assert(0 <= size && size <= alloc);
  ------------------
  |  Branch (59:5): [True: 899k, False: 0]
  |  Branch (59:5): [True: 899k, False: 0]
  ------------------
   60|       |
   61|       |    /* Only the empty bytes may be immortal. */
   62|   899k|    assert((alloc == 0) == _Py_IsImmortal(self->ob_bytes_object));
  ------------------
  |  Branch (62:5): [True: 899k, False: 0]
  ------------------
   63|       |
   64|   899k|    self->ob_bytes = self->ob_start = PyBytes_AS_STRING(self->ob_bytes_object);
  ------------------
  |  |   27|   899k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   899k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   899k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   65|   899k|    Py_SET_SIZE(self, size);
  ------------------
  |  |  216|   899k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   899k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   899k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|   899k|    FT_ATOMIC_STORE_SSIZE_RELAXED(self->ob_alloc, alloc);
  ------------------
  |  |  194|   899k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
   67|   899k|}
bytearrayobject.c:bytearray_resize_lock_held:
  266|   832k|{
  267|   832k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
  268|   832k|    PyByteArrayObject *obj = ((PyByteArrayObject *)self);
  269|       |
  270|   832k|    assert(obj->ob_bytes_object != NULL);
  ------------------
  |  Branch (270:5): [True: 832k, False: 0]
  ------------------
  271|       |
  272|       |    /* All computations are done unsigned to avoid integer overflows
  273|       |       (see issue #22335). */
  274|   832k|    size_t alloc = (size_t) obj->ob_alloc;
  275|   832k|    size_t logical_offset = (size_t) (obj->ob_start - obj->ob_bytes);
  276|   832k|    size_t size = (size_t) requested_size;
  277|       |
  278|   832k|    assert(self != NULL);
  ------------------
  |  Branch (278:5): [True: 832k, False: 0]
  ------------------
  279|   832k|    assert(PyByteArray_Check(self));
  ------------------
  |  Branch (279:5): [True: 832k, False: 0]
  ------------------
  280|   832k|    assert(logical_offset <= alloc);
  ------------------
  |  Branch (280:5): [True: 832k, False: 0]
  ------------------
  281|       |
  282|   832k|    if (requested_size < 0) {
  ------------------
  |  Branch (282:9): [True: 0, False: 832k]
  ------------------
  283|      0|        PyErr_Format(PyExc_ValueError,
  284|      0|            "Can only resize to positive sizes, got %zd", requested_size);
  285|      0|        return -1;
  286|      0|    }
  287|       |
  288|   832k|    if (requested_size == Py_SIZE(self)) {
  ------------------
  |  |  214|   832k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   832k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   832k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (288:9): [True: 239k, False: 592k]
  ------------------
  289|   239k|        return 0;
  290|   239k|    }
  291|   592k|    if (!_canresize(obj)) {
  ------------------
  |  Branch (291:9): [True: 0, False: 592k]
  ------------------
  292|      0|        return -1;
  293|      0|    }
  294|       |
  295|       |    /* Resize to 0 resets to empty bytes (see issue #153419). */
  296|   592k|    if (requested_size == 0) {
  ------------------
  |  Branch (296:9): [True: 0, False: 592k]
  ------------------
  297|      0|        Py_SETREF(obj->ob_bytes_object,
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  298|      0|                   Py_GetConstant(Py_CONSTANT_EMPTY_BYTES));
  299|      0|        bytearray_reinit_from_bytes(obj, 0);
  300|      0|        return 0;
  301|      0|    }
  302|       |
  303|   592k|    if (size + logical_offset <= alloc) {
  ------------------
  |  Branch (303:9): [True: 159k, False: 433k]
  ------------------
  304|       |        /* Current buffer is large enough to host the requested size,
  305|       |           decide on a strategy. */
  306|   159k|        if (size < alloc / 2) {
  ------------------
  |  Branch (306:13): [True: 0, False: 159k]
  ------------------
  307|       |            /* Major downsize; resize down to exact size */
  308|      0|            alloc = size;
  309|      0|        }
  310|   159k|        else {
  311|       |            /* Minor downsize; quick exit */
  312|   159k|            Py_SET_SIZE(self, size);
  ------------------
  |  |  216|   159k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   159k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   159k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|       |            /* Add mid-buffer null; end provided by bytes. */
  314|   159k|            bytearray_write_trailing_null_byte(_PyByteArray_CAST(self));
  ------------------
  |  |   22|   159k|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|   159k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (314:48): [True: 159k, False: 0]
  ------------------
  315|      0|            return 0;
  316|   159k|        }
  317|   159k|    }
  318|   433k|    else {
  319|       |        /* Need growing, decide on a strategy */
  320|   433k|        if (size <= alloc * 1.125) {
  ------------------
  |  Branch (320:13): [True: 20.9k, False: 412k]
  ------------------
  321|       |            /* Moderate upsize; overallocate similar to list_resize() */
  322|  20.9k|            alloc = size + (size >> 3) + (size < 9 ? 3 : 6);
  ------------------
  |  Branch (322:43): [True: 0, False: 20.9k]
  ------------------
  323|  20.9k|        }
  324|   412k|        else {
  325|       |            /* Major upsize; resize up to exact size */
  326|   412k|            alloc = size;
  327|   412k|        }
  328|   433k|    }
  329|   433k|    if (alloc > PyByteArray_SIZE_MAX) {
  ------------------
  |  |   21|   433k|#define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |  137|   433k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |               #define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |   76|   433k|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (329:9): [True: 0, False: 433k]
  ------------------
  330|      0|        PyErr_NoMemory();
  331|      0|        return -1;
  332|      0|    }
  333|       |
  334|   433k|    if (bytearray_resize_storage(obj, requested_size, (Py_ssize_t)alloc) < 0) {
  ------------------
  |  Branch (334:9): [True: 0, False: 433k]
  ------------------
  335|      0|        return -1;
  336|      0|    }
  337|       |
  338|   433k|    bytearray_reinit_from_bytes(obj, size);
  339|   433k|    if (alloc != size) {
  ------------------
  |  Branch (339:9): [True: 20.9k, False: 412k]
  ------------------
  340|       |        /* Add mid-buffer null; end provided by bytes. */
  341|  20.9k|        bytearray_write_trailing_null_byte(obj);
  342|  20.9k|    }
  343|   433k|    return 0;
  344|   433k|}
bytearrayobject.c:_canresize:
  129|  1.07M|{
  130|  1.07M|    if (self->ob_exports > 0) {
  ------------------
  |  Branch (130:9): [True: 0, False: 1.07M]
  ------------------
  131|      0|        PyErr_SetString(PyExc_BufferError,
  132|      0|                "Existing exports of data: object cannot be re-sized");
  133|      0|        return 0;
  134|      0|    }
  135|  1.07M|    return 1;
  136|  1.07M|}
bytearrayobject.c:bytearray_write_trailing_null_byte:
   48|   180k|{
   49|   180k|    char *data = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|   180k|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   180k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   180k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   50|   180k|    Py_ssize_t size = PyByteArray_GET_SIZE(self);
  ------------------
  |  |   38|   180k|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   180k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   180k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|   180k|    data[size] = '\0';
   52|   180k|}
bytearrayobject.c:bytearray_resize_storage:
  230|   659k|{
  231|   659k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
  232|   659k|    assert(1 <= new_size && new_size <= alloc);
  ------------------
  |  Branch (232:5): [True: 659k, False: 0]
  |  Branch (232:5): [True: 659k, False: 0]
  ------------------
  233|       |
  234|   659k|    Py_ssize_t size = Py_SIZE(self);
  ------------------
  |  |  214|   659k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   659k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   659k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|       |
  236|       |    /* Re-align data to the start of the allocation. */
  237|   659k|    char *old_start = self->ob_start;
  238|   659k|    if (self->ob_start != self->ob_bytes) {
  ------------------
  |  Branch (238:9): [True: 0, False: 659k]
  ------------------
  239|       |        /* optimization tradeoff: This is faster than a new allocation when
  240|       |           the number of bytes being removed in a resize is small; for
  241|       |           large size changes it may be better to just make a new bytes
  242|       |           object as _PyBytes_Resize will do a malloc + memcpy internally.
  243|       |           */
  244|      0|        Py_ssize_t move = Py_MIN(new_size, size);
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  245|      0|        memmove(self->ob_bytes, self->ob_start, move);
  246|      0|        self->ob_start = self->ob_bytes;
  247|      0|    }
  248|       |
  249|   659k|    if (_PyBytes_ResizeKeepOnError(&self->ob_bytes_object, alloc) < 0) {
  ------------------
  |  Branch (249:9): [True: 0, False: 659k]
  ------------------
  250|      0|        if (old_start != self->ob_bytes && new_size < size) {
  ------------------
  |  Branch (250:13): [True: 0, False: 0]
  |  Branch (250:44): [True: 0, False: 0]
  ------------------
  251|       |            // Move remaining bytes
  252|      0|            Py_ssize_t moved = new_size;
  253|      0|            Py_ssize_t remaining = size - moved;
  254|      0|            memmove(self->ob_bytes + moved, old_start + moved, remaining);
  255|      0|        }
  256|      0|        bytearray_write_trailing_null_byte(self);
  257|      0|        return -1;
  258|      0|    }
  259|   659k|    assert(_PyBytes_IsMutable(self->ob_bytes_object));
  ------------------
  |  Branch (259:5): [True: 659k, False: 0]
  ------------------
  260|   659k|    return 0;
  261|   659k|}
bytearrayobject.c:bytearray_dealloc:
 1273|   239k|{
 1274|   239k|    PyByteArrayObject *self = _PyByteArray_CAST(op);
  ------------------
  |  |   22|   239k|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1274:31): [True: 239k, False: 0]
  ------------------
 1275|       |#ifdef Py_DEBUG
 1276|       |    if (self->ob_bytes_object != NULL) {
 1277|       |        _PyBytes_CheckOverflow(self->ob_bytes_object, op, "bytearray");
 1278|       |    }
 1279|       |#endif
 1280|       |
 1281|   239k|    if (self->ob_exports > 0) {
  ------------------
  |  Branch (1281:9): [True: 0, False: 239k]
  ------------------
 1282|      0|        PyErr_SetString(PyExc_SystemError,
 1283|      0|                        "deallocated bytearray object has exported buffers");
 1284|      0|        PyErr_Print();
 1285|      0|    }
 1286|   239k|    Py_XDECREF(self->ob_bytes_object);
  ------------------
  |  |  524|   239k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1287|   239k|    Py_TYPE(self)->tp_free((PyObject *)self);
  ------------------
  |  |  213|   239k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1288|   239k|}
bytearrayobject.c:bytearray_length:
  397|     18|{
  398|     18|    return PyByteArray_GET_SIZE(op);
  ------------------
  |  |   38|     18|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  399|     18|}
bytearrayobject.c:_getbytevalue:
   27|   389k|{
   28|   389k|    int overflow;
   29|   389k|    long face_value = PyLong_AsLongAndOverflow(arg, &overflow);
   30|       |
   31|   389k|    if (face_value == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (31:9): [True: 0, False: 389k]
  |  Branch (31:29): [True: 0, False: 0]
  ------------------
   32|      0|        *value = -1;
   33|      0|        return 0;
   34|      0|    }
   35|   389k|    if (face_value < 0 || face_value >= 256) {
  ------------------
  |  Branch (35:9): [True: 0, False: 389k]
  |  Branch (35:27): [True: 0, False: 389k]
  ------------------
   36|       |        /* this includes an overflow in converting to C long */
   37|      0|        PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)");
   38|      0|        *value = -1;
   39|      0|        return 0;
   40|      0|    }
   41|       |
   42|   389k|    *value = face_value;
   43|   389k|    return 1;
   44|   389k|}
bytearrayobject.c:bytearray_setslice:
  690|   203k|{
  691|   203k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
  692|   203k|    Py_ssize_t needed;
  693|   203k|    void *bytes;
  694|   203k|    Py_buffer vbytes;
  695|   203k|    int res = 0;
  696|       |
  697|   203k|    vbytes.len = -1;
  698|   203k|    if (values == (PyObject *)self) {
  ------------------
  |  Branch (698:9): [True: 0, False: 203k]
  ------------------
  699|       |        /* Make a copy and call this function recursively */
  700|      0|        int err;
  701|      0|        values = PyByteArray_FromStringAndSize(PyByteArray_AS_STRING(values),
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|      0|                                               PyByteArray_GET_SIZE(values));
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  703|      0|        if (values == NULL)
  ------------------
  |  Branch (703:13): [True: 0, False: 0]
  ------------------
  704|      0|            return -1;
  705|      0|        err = bytearray_setslice(self, lo, hi, values);
  706|      0|        Py_DECREF(values);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  707|      0|        return err;
  708|      0|    }
  709|   203k|    if (values == NULL) {
  ------------------
  |  Branch (709:9): [True: 0, False: 203k]
  ------------------
  710|       |        /* del b[lo:hi] */
  711|      0|        bytes = NULL;
  712|      0|        needed = 0;
  713|      0|    }
  714|   203k|    else {
  715|   203k|        if (PyObject_GetBuffer(values, &vbytes, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|   203k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (715:13): [True: 0, False: 203k]
  ------------------
  716|      0|            PyErr_Format(PyExc_TypeError,
  717|      0|                         "can't set bytearray slice from %.100s",
  718|      0|                         Py_TYPE(values)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  719|      0|            return -1;
  720|      0|        }
  721|   203k|        needed = vbytes.len;
  722|   203k|        bytes = vbytes.buf;
  723|   203k|    }
  724|       |
  725|       |    // gh-153578: __buffer__() may have resized self; re-clamp both bounds.
  726|   203k|    if (lo < 0)
  ------------------
  |  Branch (726:9): [True: 0, False: 203k]
  ------------------
  727|      0|        lo = 0;
  728|   203k|    else if (lo > Py_SIZE(self))
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (728:14): [True: 0, False: 203k]
  ------------------
  729|      0|        lo = Py_SIZE(self);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|   203k|    if (hi < lo)
  ------------------
  |  Branch (730:9): [True: 0, False: 203k]
  ------------------
  731|      0|        hi = lo;
  732|   203k|    if (hi > Py_SIZE(self))
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (732:9): [True: 0, False: 203k]
  ------------------
  733|      0|        hi = Py_SIZE(self);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  734|       |
  735|   203k|    res = bytearray_setslice_linear(self, lo, hi, bytes, needed);
  736|   203k|    if (vbytes.len != -1)
  ------------------
  |  Branch (736:9): [True: 203k, False: 0]
  ------------------
  737|   203k|        PyBuffer_Release(&vbytes);
  738|   203k|    return res;
  739|   203k|}
bytearrayobject.c:bytearray_setslice_linear:
  606|   203k|{
  607|   203k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
  608|   203k|    Py_ssize_t avail = hi - lo;
  609|   203k|    char *buf = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|   203k|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|   203k|    Py_ssize_t growth = bytes_len - avail;
  611|   203k|    int res = 0;
  612|   203k|    assert(avail >= 0);
  ------------------
  |  Branch (612:5): [True: 203k, False: 0]
  ------------------
  613|       |
  614|   203k|    if (growth < 0) {
  ------------------
  |  Branch (614:9): [True: 0, False: 203k]
  ------------------
  615|      0|        if (!_canresize(self))
  ------------------
  |  Branch (615:13): [True: 0, False: 0]
  ------------------
  616|      0|            return -1;
  617|       |
  618|      0|        if (lo == 0) {
  ------------------
  |  Branch (618:13): [True: 0, False: 0]
  ------------------
  619|       |            /* Shrink the buffer by advancing its logical start */
  620|      0|            self->ob_start -= growth;
  621|       |            /*
  622|       |              0   lo               hi             old_size
  623|       |              |   |<----avail----->|<-----tail------>|
  624|       |              |      |<-bytes_len->|<-----tail------>|
  625|       |              0    new_lo         new_hi          new_size
  626|       |            */
  627|      0|        }
  628|      0|        else {
  629|       |            /*
  630|       |              0   lo               hi               old_size
  631|       |              |   |<----avail----->|<-----tomove------>|
  632|       |              |   |<-bytes_len->|<-----tomove------>|
  633|       |              0   lo         new_hi              new_size
  634|       |            */
  635|      0|            memmove(buf + lo + bytes_len, buf + hi,
  636|      0|                    Py_SIZE(self) - hi);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  637|      0|        }
  638|      0|        if (bytearray_resize_lock_held((PyObject *)self,
  ------------------
  |  Branch (638:13): [True: 0, False: 0]
  ------------------
  639|      0|                               Py_SIZE(self) + growth) < 0) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  640|       |            /* Issue #19578: Handling the memory allocation failure here is
  641|       |               tricky here because the bytearray object has already been
  642|       |               modified. Depending on growth and lo, the behaviour is
  643|       |               different.
  644|       |
  645|       |               If growth < 0 and lo != 0, the operation is completed, but a
  646|       |               MemoryError is still raised and the memory block is not
  647|       |               shrunk. Otherwise, the bytearray is restored in its previous
  648|       |               state and a MemoryError is raised. */
  649|      0|            if (lo == 0) {
  ------------------
  |  Branch (649:17): [True: 0, False: 0]
  ------------------
  650|      0|                self->ob_start += growth;
  651|      0|                return -1;
  652|      0|            }
  653|       |            /* memmove() removed bytes, the bytearray object cannot be
  654|       |               restored in its previous state. */
  655|      0|            Py_SET_SIZE(self, Py_SIZE(self) + growth);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  656|      0|            res = -1;
  657|      0|        }
  658|      0|        buf = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  659|      0|    }
  660|   203k|    else if (growth > 0) {
  ------------------
  |  Branch (660:14): [True: 203k, False: 0]
  ------------------
  661|   203k|        if (Py_SIZE(self) > PyByteArray_SIZE_MAX - growth) {
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (Py_SIZE(self) > PyByteArray_SIZE_MAX - growth) {
  ------------------
  |  |   21|   203k|#define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |  137|   203k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |               #define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |   76|   203k|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (661:13): [True: 0, False: 203k]
  ------------------
  662|      0|            PyErr_NoMemory();
  663|      0|            return -1;
  664|      0|        }
  665|       |
  666|   203k|        if (bytearray_resize_lock_held((PyObject *)self,
  ------------------
  |  Branch (666:13): [True: 0, False: 203k]
  ------------------
  667|   203k|                               Py_SIZE(self) + growth) < 0) {
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|      0|            return -1;
  669|      0|        }
  670|   203k|        buf = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|   203k|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  671|       |        /* Make the place for the additional bytes */
  672|       |        /*
  673|       |          0   lo        hi               old_size
  674|       |          |   |<-avail->|<-----tomove------>|
  675|       |          |   |<---bytes_len-->|<-----tomove------>|
  676|       |          0   lo            new_hi              new_size
  677|       |         */
  678|   203k|        memmove(buf + lo + bytes_len, buf + hi,
  679|   203k|                Py_SIZE(self) - lo - bytes_len);
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|   203k|    }
  681|       |
  682|   203k|    if (bytes_len > 0)
  ------------------
  |  Branch (682:9): [True: 203k, False: 0]
  ------------------
  683|   203k|        memcpy(buf + lo, bytes, bytes_len);
  684|   203k|    return res;
  685|   203k|}
bytearrayobject.c:bytearray_iconcat:
  432|     10|{
  433|     10|    PyObject *ret;
  434|     10|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|     10|    {
  ------------------
  435|     10|    ret = bytearray_iconcat_lock_held(op, other);
  436|     10|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     10|    }
  ------------------
  437|     10|    return ret;
  438|     10|}
bytearrayobject.c:bytearray_iconcat_lock_held:
  403|     10|{
  404|     10|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
  405|     10|    PyByteArrayObject *self = _PyByteArray_CAST(op);
  ------------------
  |  |   22|     10|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (405:31): [True: 10, False: 0]
  ------------------
  406|       |
  407|      0|    Py_buffer vo;
  408|     10|    if (PyObject_GetBuffer(other, &vo, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|     10|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (408:9): [True: 0, False: 10]
  ------------------
  409|      0|        PyErr_Format(PyExc_TypeError, "can't concat %.100s to %.100s",
  410|      0|                     Py_TYPE(other)->tp_name, Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                   Py_TYPE(other)->tp_name, Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|      0|        return NULL;
  412|      0|    }
  413|       |
  414|     10|    Py_ssize_t size = Py_SIZE(self);
  ------------------
  |  |  214|     10|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|     10|    if (size > PyByteArray_SIZE_MAX - vo.len) {
  ------------------
  |  |   21|     10|#define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |  137|     10|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |               #define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |   76|     10|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (415:9): [True: 0, False: 10]
  ------------------
  416|      0|        PyBuffer_Release(&vo);
  417|      0|        return PyErr_NoMemory();
  418|      0|    }
  419|       |
  420|     10|    if (bytearray_resize_lock_held((PyObject *)self, size + vo.len) < 0) {
  ------------------
  |  Branch (420:9): [True: 0, False: 10]
  ------------------
  421|      0|        PyBuffer_Release(&vo);
  422|      0|        return NULL;
  423|      0|    }
  424|       |
  425|     10|    memcpy(PyByteArray_AS_STRING(self) + size, vo.buf, vo.len);
  ------------------
  |  |   28|     10|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|     10|    PyBuffer_Release(&vo);
  427|     10|    return Py_NewRef(self);
  ------------------
  |  |  550|     10|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|     10|}
bytearrayobject.c:bytearray_subscript:
  593|    111|{
  594|    111|    PyObject *ret;
  595|    111|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|    111|    {
  ------------------
  596|    111|    ret = bytearray_subscript_lock_held(op, index);
  597|    111|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    111|    }
  ------------------
  598|    111|    return ret;
  599|       |
  600|    111|}
bytearrayobject.c:bytearray_subscript_lock_held:
  533|    111|{
  534|    111|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
  535|    111|    PyByteArrayObject *self = _PyByteArray_CAST(op);
  ------------------
  |  |   22|    111|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|    111|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (535:31): [True: 111, False: 0]
  ------------------
  536|    111|    if (_PyIndex_Check(index)) {
  ------------------
  |  Branch (536:9): [True: 0, False: 111]
  ------------------
  537|      0|        Py_ssize_t i = PyNumber_AsSsize_t(index, PyExc_IndexError);
  538|       |
  539|      0|        if (i == -1 && PyErr_Occurred())
  ------------------
  |  Branch (539:13): [True: 0, False: 0]
  |  Branch (539:24): [True: 0, False: 0]
  ------------------
  540|      0|            return NULL;
  541|       |
  542|      0|        if (i < 0)
  ------------------
  |  Branch (542:13): [True: 0, False: 0]
  ------------------
  543|      0|            i += PyByteArray_GET_SIZE(self);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|       |
  545|      0|        if (i < 0 || i >= Py_SIZE(self)) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (545:13): [True: 0, False: 0]
  |  Branch (545:22): [True: 0, False: 0]
  ------------------
  546|      0|            PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
  547|      0|            return NULL;
  548|      0|        }
  549|      0|        return _PyLong_FromUnsignedChar((unsigned char)(self->ob_start[i]));
  550|      0|    }
  551|    111|    else if (PySlice_Check(index)) {
  ------------------
  |  |   22|    111|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|    111|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    111|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    111|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 111, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  552|    111|        Py_ssize_t start, stop, step, slicelength, i;
  553|    111|        size_t cur;
  554|    111|        if (PySlice_Unpack(index, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (554:13): [True: 0, False: 111]
  ------------------
  555|      0|            return NULL;
  556|      0|        }
  557|    111|        slicelength = PySlice_AdjustIndices(PyByteArray_GET_SIZE(self),
  ------------------
  |  |   38|    111|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    111|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    111|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|    111|                                            &start, &stop, step);
  559|       |
  560|    111|        if (slicelength <= 0)
  ------------------
  |  Branch (560:13): [True: 0, False: 111]
  ------------------
  561|      0|            return PyByteArray_FromStringAndSize("", 0);
  562|    111|        else if (step == 1) {
  ------------------
  |  Branch (562:18): [True: 104, False: 7]
  ------------------
  563|    104|            return PyByteArray_FromStringAndSize(
  564|    104|                PyByteArray_AS_STRING(self) + start, slicelength);
  ------------------
  |  |   28|    104|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  565|    104|        }
  566|      7|        else {
  567|      7|            char *source_buf = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|      7|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      7|            char *result_buf;
  569|      7|            PyObject *result;
  570|       |
  571|      7|            result = PyByteArray_FromStringAndSize(NULL, slicelength);
  572|      7|            if (result == NULL)
  ------------------
  |  Branch (572:17): [True: 0, False: 7]
  ------------------
  573|      0|                return NULL;
  574|       |
  575|      7|            result_buf = PyByteArray_AS_STRING(result);
  ------------------
  |  |   28|      7|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  576|  3.33k|            for (cur = start, i = 0; i < slicelength;
  ------------------
  |  Branch (576:38): [True: 3.32k, False: 7]
  ------------------
  577|  3.32k|                 cur += step, i++) {
  578|  3.32k|                     result_buf[i] = source_buf[cur];
  579|  3.32k|            }
  580|      7|            return result;
  581|      7|        }
  582|    111|    }
  583|      0|    else {
  584|      0|        PyErr_Format(PyExc_TypeError,
  585|      0|                     "bytearray indices must be integers or slices, not %.200s",
  586|      0|                     Py_TYPE(index)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|       |        return NULL;
  588|      0|    }
  589|    111|}
bytearrayobject.c:bytearray_ass_subscript:
  945|    562|{
  946|    562|    int ret;
  947|    562|    if (values != NULL && PyByteArray_Check(values)) {
  ------------------
  |  |   24|    562|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|    562|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    562|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    562|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 562]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (947:9): [True: 562, False: 0]
  ------------------
  948|      0|        Py_BEGIN_CRITICAL_SECTION2(op, values);
  ------------------
  |  |   57|      0|    {
  ------------------
  949|      0|        ret = bytearray_ass_subscript_lock_held(op, index, values);
  950|      0|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      0|    }
  ------------------
  951|      0|    }
  952|    562|    else {
  953|    562|        Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|    562|    {
  ------------------
  954|    562|        ret = bytearray_ass_subscript_lock_held(op, index, values);
  955|    562|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    562|    }
  ------------------
  956|    562|    }
  957|    562|    return ret;
  958|    562|}
bytearrayobject.c:bytearray_ass_subscript_lock_held:
  784|    562|{
  785|    562|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(op);
  786|    562|    PyByteArrayObject *self = _PyByteArray_CAST(op);
  ------------------
  |  |   22|    562|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|    562|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (786:31): [True: 562, False: 0]
  ------------------
  787|      0|    Py_ssize_t start, stop, step, slicelen;
  788|       |    // Do not store a reference to the internal buffer since
  789|       |    // index.__index__() or _getbytevalue() may alter 'self'.
  790|       |    // See https://github.com/python/cpython/issues/91153.
  791|       |
  792|    562|    if (_PyIndex_Check(index)) {
  ------------------
  |  Branch (792:9): [True: 562, False: 0]
  ------------------
  793|    562|        Py_ssize_t i = PyNumber_AsSsize_t(index, PyExc_IndexError);
  794|       |
  795|    562|        if (i == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (795:13): [True: 0, False: 562]
  |  Branch (795:24): [True: 0, False: 0]
  ------------------
  796|      0|            return -1;
  797|      0|        }
  798|       |
  799|    562|        int ival = -1;
  800|       |
  801|       |        // GH-91153: We need to do this *before* the size check, in case values
  802|       |        // has a nasty __index__ method that changes the size of the bytearray:
  803|    562|        if (values && !_getbytevalue(values, &ival)) {
  ------------------
  |  Branch (803:13): [True: 562, False: 0]
  |  Branch (803:23): [True: 0, False: 562]
  ------------------
  804|      0|            return -1;
  805|      0|        }
  806|       |
  807|    562|        if (i < 0) {
  ------------------
  |  Branch (807:13): [True: 0, False: 562]
  ------------------
  808|      0|            i += PyByteArray_GET_SIZE(self);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|      0|        }
  810|       |
  811|    562|        if (i < 0 || i >= Py_SIZE(self)) {
  ------------------
  |  |  214|    562|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    562|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    562|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (811:13): [True: 0, False: 562]
  |  Branch (811:22): [True: 2, False: 560]
  ------------------
  812|      2|            PyErr_SetString(PyExc_IndexError, "bytearray index out of range");
  813|      2|            return -1;
  814|      2|        }
  815|       |
  816|    560|        if (values == NULL) {
  ------------------
  |  Branch (816:13): [True: 0, False: 560]
  ------------------
  817|       |            /* Fall through to slice assignment */
  818|      0|            start = i;
  819|      0|            stop = i + 1;
  820|      0|            step = 1;
  821|      0|            slicelen = 1;
  822|      0|        }
  823|    560|        else {
  824|    560|            assert(0 <= ival && ival < 256);
  ------------------
  |  Branch (824:13): [True: 560, False: 0]
  |  Branch (824:13): [True: 560, False: 0]
  ------------------
  825|    560|            PyByteArray_AS_STRING(self)[i] = (char)ival;
  ------------------
  |  |   28|    560|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    560|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    560|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  826|    560|            return 0;
  827|    560|        }
  828|    560|    }
  829|      0|    else if (PySlice_Check(index)) {
  ------------------
  |  |   22|      0|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  830|      0|        if (PySlice_Unpack(index, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (830:13): [True: 0, False: 0]
  ------------------
  831|      0|            return -1;
  832|      0|        }
  833|      0|        slicelen = PySlice_AdjustIndices(PyByteArray_GET_SIZE(self), &start,
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  834|      0|                                         &stop, step);
  835|      0|    }
  836|      0|    else {
  837|      0|        PyErr_Format(PyExc_TypeError,
  838|      0|                     "bytearray indices must be integers or slices, not %.200s",
  839|      0|                      Py_TYPE(index)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  840|      0|        return -1;
  841|      0|    }
  842|       |
  843|      0|    char *bytes;
  844|      0|    Py_ssize_t needed;
  845|      0|    if (values == NULL) {
  ------------------
  |  Branch (845:9): [True: 0, False: 0]
  ------------------
  846|      0|        bytes = NULL;
  847|      0|        needed = 0;
  848|      0|    }
  849|      0|    else if (values == (PyObject *)self || !PyByteArray_Check(values)) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (849:14): [True: 0, False: 0]
  |  Branch (849:44): [True: 0, False: 0]
  ------------------
  850|      0|        int err;
  851|      0|        if (PyNumber_Check(values) || PyUnicode_Check(values)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (851:13): [True: 0, False: 0]
  ------------------
  852|      0|            PyErr_SetString(PyExc_TypeError,
  853|      0|                            "can assign only bytes, buffers, or iterables "
  854|      0|                            "of ints in range(0, 256)");
  855|      0|            return -1;
  856|      0|        }
  857|       |        /* Make a copy and call this function recursively */
  858|      0|        values = PyByteArray_FromObject(values);
  859|      0|        if (values == NULL)
  ------------------
  |  Branch (859:13): [True: 0, False: 0]
  ------------------
  860|      0|            return -1;
  861|      0|        err = bytearray_ass_subscript_lock_held((PyObject*)self, index, values);
  862|      0|        Py_DECREF(values);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  863|      0|        return err;
  864|      0|    }
  865|      0|    else {
  866|      0|        assert(PyByteArray_Check(values));
  ------------------
  |  Branch (866:9): [True: 0, False: 0]
  ------------------
  867|      0|        bytes = PyByteArray_AS_STRING(values);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  868|      0|        needed = Py_SIZE(values);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  869|      0|    }
  870|       |
  871|       |    /* Make sure b[5:2] = ... inserts before 5, not before 2. */
  872|      0|    if ((step < 0 && start < stop) ||
  ------------------
  |  Branch (872:10): [True: 0, False: 0]
  |  Branch (872:22): [True: 0, False: 0]
  ------------------
  873|      0|        (step > 0 && start > stop))
  ------------------
  |  Branch (873:10): [True: 0, False: 0]
  |  Branch (873:22): [True: 0, False: 0]
  ------------------
  874|      0|    {
  875|      0|        stop = start;
  876|      0|    }
  877|       |
  878|      0|    if (step == 1) {
  ------------------
  |  Branch (878:9): [True: 0, False: 0]
  ------------------
  879|      0|        return bytearray_setslice_linear(self, start, stop, bytes, needed);
  880|      0|    }
  881|      0|    else {
  882|      0|        if (needed == 0) {
  ------------------
  |  Branch (882:13): [True: 0, False: 0]
  ------------------
  883|       |            /* Delete slice */
  884|      0|            size_t cur;
  885|      0|            Py_ssize_t i;
  886|      0|            char *buf = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|       |
  888|      0|            if (!_canresize(self))
  ------------------
  |  Branch (888:17): [True: 0, False: 0]
  ------------------
  889|      0|                return -1;
  890|       |
  891|      0|            if (slicelen == 0)
  ------------------
  |  Branch (891:17): [True: 0, False: 0]
  ------------------
  892|       |                /* Nothing to do here. */
  893|      0|                return 0;
  894|       |
  895|      0|            if (step < 0) {
  ------------------
  |  Branch (895:17): [True: 0, False: 0]
  ------------------
  896|      0|                stop = start + 1;
  897|      0|                start = stop + step * (slicelen - 1) - 1;
  898|      0|                step = -step;
  899|      0|            }
  900|      0|            for (cur = start, i = 0;
  901|      0|                 i < slicelen; cur += step, i++) {
  ------------------
  |  Branch (901:18): [True: 0, False: 0]
  ------------------
  902|      0|                Py_ssize_t lim = step - 1;
  903|       |
  904|      0|                if (cur + step >= (size_t)PyByteArray_GET_SIZE(self))
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (904:21): [True: 0, False: 0]
  ------------------
  905|      0|                    lim = PyByteArray_GET_SIZE(self) - cur - 1;
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  906|       |
  907|      0|                memmove(buf + cur - i,
  908|      0|                        buf + cur + 1, lim);
  909|      0|            }
  910|       |            /* Move the tail of the bytes, in one chunk */
  911|      0|            cur = start + (size_t)slicelen*step;
  912|      0|            if (cur < (size_t)PyByteArray_GET_SIZE(self)) {
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (912:17): [True: 0, False: 0]
  ------------------
  913|      0|                memmove(buf + cur - slicelen,
  914|      0|                        buf + cur,
  915|      0|                        PyByteArray_GET_SIZE(self) - cur);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|      0|            }
  917|      0|            if (bytearray_resize_lock_held((PyObject *)self,
  ------------------
  |  Branch (917:17): [True: 0, False: 0]
  ------------------
  918|      0|                               PyByteArray_GET_SIZE(self) - slicelen) < 0)
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|      0|                return -1;
  920|       |
  921|      0|            return 0;
  922|      0|        }
  923|      0|        else {
  924|       |            /* Assign slice */
  925|      0|            Py_ssize_t i;
  926|      0|            size_t cur;
  927|      0|            char *buf = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|       |
  929|      0|            if (needed != slicelen) {
  ------------------
  |  Branch (929:17): [True: 0, False: 0]
  ------------------
  930|      0|                PyErr_Format(PyExc_ValueError,
  931|      0|                             "attempt to assign bytes of size %zd "
  932|      0|                             "to extended slice of size %zd",
  933|      0|                             needed, slicelen);
  934|      0|                return -1;
  935|      0|            }
  936|      0|            for (cur = start, i = 0; i < slicelen; cur += step, i++)
  ------------------
  |  Branch (936:38): [True: 0, False: 0]
  ------------------
  937|      0|                buf[cur] = bytes[i];
  938|      0|            return 0;
  939|      0|        }
  940|      0|    }
  941|      0|}
bytearrayobject.c:bytearray_getbuffer:
   90|      2|{
   91|      2|    int ret;
   92|      2|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      2|    {
  ------------------
   93|      2|    ret = bytearray_getbuffer_lock_held(self, view, flags);
   94|      2|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      2|    }
  ------------------
   95|      2|    return ret;
   96|      2|}
bytearrayobject.c:bytearray_getbuffer_lock_held:
   71|      2|{
   72|      2|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
   73|      2|    PyByteArrayObject *obj = _PyByteArray_CAST(self);
  ------------------
  |  |   22|      2|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (73:30): [True: 2, False: 0]
  ------------------
   74|      2|    if (view == NULL) {
  ------------------
  |  Branch (74:9): [True: 0, False: 2]
  ------------------
   75|      0|        PyErr_SetString(PyExc_BufferError,
   76|      0|            "bytearray_getbuffer: view==NULL argument is obsolete");
   77|      0|        return -1;
   78|      0|    }
   79|       |
   80|      2|    void *ptr = (void *) PyByteArray_AS_STRING(obj);
  ------------------
  |  |   28|      2|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|      2|    if (PyBuffer_FillInfo(view, (PyObject*)obj, ptr, Py_SIZE(obj), 0, flags) < 0) {
  ------------------
  |  |  214|      2|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (81:9): [True: 0, False: 2]
  ------------------
   82|      0|        return -1;
   83|      0|    }
   84|      2|    obj->ob_exports++;
   85|      2|    return 0;
   86|      2|}
bytearrayobject.c:bytearray_releasebuffer:
  100|      2|{
  101|      2|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      2|    {
  ------------------
  102|      2|    PyByteArrayObject *obj = _PyByteArray_CAST(self);
  ------------------
  |  |   22|      2|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (102:30): [True: 2, False: 0]
  ------------------
  103|      0|    obj->ob_exports--;
  104|      2|    assert(obj->ob_exports >= 0);
  ------------------
  |  Branch (104:5): [True: 2, False: 0]
  ------------------
  105|      2|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      2|    }
  ------------------
  106|      2|}
bytearrayobject.c:bytearray_append_impl:
 2192|   388k|{
 2193|   388k|    Py_ssize_t n = Py_SIZE(self);
  ------------------
  |  |  214|   388k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   388k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   388k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2194|       |
 2195|   388k|    if (bytearray_resize_lock_held((PyObject *)self, n + 1) < 0)
  ------------------
  |  Branch (2195:9): [True: 0, False: 388k]
  ------------------
 2196|      0|        return NULL;
 2197|       |
 2198|   388k|    PyByteArray_AS_STRING(self)[n] = item;
  ------------------
  |  |   28|   388k|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   388k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   388k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|       |
 2200|   388k|    Py_RETURN_NONE;
  ------------------
  |  |  628|   388k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|   388k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2201|   388k|}
bytearrayobject.c:_bytearray_with_buffer:
  115|     78|{
  116|     78|    PyObject *res;
  117|       |
  118|     78|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(self);
  119|       |
  120|       |    /* Increase exports to prevent bytearray storage from changing during op. */
  121|     78|    self->ob_exports++;
  122|     78|    res = op(PyByteArray_AS_STRING(self), Py_SIZE(self), sub, start, end);
  ------------------
  |  |   28|     78|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|     78|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     78|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  res = op(PyByteArray_AS_STRING(self), Py_SIZE(self), sub, start, end);
  ------------------
  |  |  214|     78|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     78|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     78|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|     78|    self->ob_exports--;
  124|     78|    return res;
  125|     78|}
bytearrayobject.c:bytearray_extend_impl:
 2248|   203k|{
 2249|   203k|    PyObject *it, *item, *bytearray_obj;
 2250|   203k|    Py_ssize_t buf_size = 0, len = 0;
 2251|   203k|    int value;
 2252|   203k|    char *buf;
 2253|       |
 2254|       |    /* bytearray_setslice code only accepts something supporting PEP 3118. */
 2255|   203k|    if (PyObject_CheckBuffer(iterable_of_ints)) {
  ------------------
  |  Branch (2255:9): [True: 203k, False: 0]
  ------------------
 2256|   203k|        if (bytearray_setslice(self, Py_SIZE(self), Py_SIZE(self), iterable_of_ints) == -1)
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (bytearray_setslice(self, Py_SIZE(self), Py_SIZE(self), iterable_of_ints) == -1)
  ------------------
  |  |  214|   203k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   203k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   203k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2256:13): [True: 0, False: 203k]
  ------------------
 2257|      0|            return NULL;
 2258|       |
 2259|   203k|        Py_RETURN_NONE;
  ------------------
  |  |  628|   203k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|   203k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2260|   203k|    }
 2261|       |
 2262|      0|    it = PyObject_GetIter(iterable_of_ints);
 2263|      0|    if (it == NULL) {
  ------------------
  |  Branch (2263:9): [True: 0, False: 0]
  ------------------
 2264|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (2264:13): [True: 0, False: 0]
  ------------------
 2265|      0|            PyErr_Format(PyExc_TypeError,
 2266|      0|                         "can't extend bytearray with %.100s",
 2267|      0|                         Py_TYPE(iterable_of_ints)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2268|      0|        }
 2269|      0|        return NULL;
 2270|      0|    }
 2271|       |
 2272|       |    /* Try to determine the length of the argument. 32 is arbitrary. */
 2273|      0|    buf_size = PyObject_LengthHint(iterable_of_ints, 32);
 2274|      0|    if (buf_size == -1) {
  ------------------
  |  Branch (2274:9): [True: 0, False: 0]
  ------------------
 2275|      0|        Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|      0|        return NULL;
 2277|      0|    }
 2278|       |
 2279|      0|    bytearray_obj = PyByteArray_FromStringAndSize(NULL, buf_size);
 2280|      0|    if (bytearray_obj == NULL) {
  ------------------
  |  Branch (2280:9): [True: 0, False: 0]
  ------------------
 2281|      0|        Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2282|      0|        return NULL;
 2283|      0|    }
 2284|      0|    buf = PyByteArray_AS_STRING(bytearray_obj);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2285|       |
 2286|      0|    while ((item = PyIter_Next(it)) != NULL) {
  ------------------
  |  Branch (2286:12): [True: 0, False: 0]
  ------------------
 2287|      0|        if (! _getbytevalue(item, &value)) {
  ------------------
  |  Branch (2287:13): [True: 0, False: 0]
  ------------------
 2288|      0|            if (PyErr_ExceptionMatches(PyExc_TypeError) && PyUnicode_Check(iterable_of_ints)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2288:17): [True: 0, False: 0]
  ------------------
 2289|      0|                PyErr_Format(PyExc_TypeError,
 2290|      0|                             "expected iterable of integers; got: 'str'");
 2291|      0|            }
 2292|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2293|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2294|      0|            Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2295|      0|            return NULL;
 2296|      0|        }
 2297|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2298|       |
 2299|      0|        if (len >= buf_size) {
  ------------------
  |  Branch (2299:13): [True: 0, False: 0]
  ------------------
 2300|      0|            Py_ssize_t addition;
 2301|      0|            if (len == PyByteArray_SIZE_MAX) {
  ------------------
  |  |   21|      0|#define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |               #define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |   76|      0|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (2301:17): [True: 0, False: 0]
  ------------------
 2302|      0|                Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2303|      0|                Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2304|      0|                return PyErr_NoMemory();
 2305|      0|            }
 2306|      0|            addition = len ? len >> 1 : 1;
  ------------------
  |  Branch (2306:24): [True: 0, False: 0]
  ------------------
 2307|      0|            if (addition > PyByteArray_SIZE_MAX - len)
  ------------------
  |  |   21|      0|#define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |               #define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |   76|      0|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (2307:17): [True: 0, False: 0]
  ------------------
 2308|      0|                buf_size = PyByteArray_SIZE_MAX;
  ------------------
  |  |   21|      0|#define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |               #define PyByteArray_SIZE_MAX ((Py_ssize_t)(PY_SSIZE_T_MAX - _PyBytesObject_SIZE))
  |  |  ------------------
  |  |  |  |   76|      0|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
 2309|      0|            else
 2310|      0|                buf_size = len + addition;
 2311|      0|            if (bytearray_resize_lock_held((PyObject *)bytearray_obj, buf_size) < 0) {
  ------------------
  |  Branch (2311:17): [True: 0, False: 0]
  ------------------
 2312|      0|                Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2313|      0|                Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2314|      0|                return NULL;
 2315|      0|            }
 2316|       |            /* Recompute the `buf' pointer, since the resizing operation may
 2317|       |               have invalidated it. */
 2318|      0|            buf = PyByteArray_AS_STRING(bytearray_obj);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2319|      0|        }
 2320|      0|        buf[len++] = value;
 2321|      0|    }
 2322|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2323|       |
 2324|      0|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (2324:9): [True: 0, False: 0]
  ------------------
 2325|      0|        Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2326|      0|        return NULL;
 2327|      0|    }
 2328|       |
 2329|       |    /* Resize down to exact size. */
 2330|      0|    if (bytearray_resize_lock_held((PyObject *)bytearray_obj, len) < 0) {
  ------------------
  |  Branch (2330:9): [True: 0, False: 0]
  ------------------
 2331|      0|        Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2332|      0|        return NULL;
 2333|      0|    }
 2334|       |
 2335|      0|    if (bytearray_setslice(self, Py_SIZE(self), Py_SIZE(self), bytearray_obj) == -1) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (bytearray_setslice(self, Py_SIZE(self), Py_SIZE(self), bytearray_obj) == -1) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2335:9): [True: 0, False: 0]
  ------------------
 2336|      0|        Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2337|      0|        return NULL;
 2338|      0|    }
 2339|      0|    Py_DECREF(bytearray_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2340|       |
 2341|      0|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (2341:5): [True: 0, False: 0]
  ------------------
 2342|      0|    Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2343|      0|}
bytearrayobject.c:bytearray_find_impl:
 1340|     78|{
 1341|     78|    return _bytearray_with_buffer(self, _Py_bytes_find, sub, start, end);
 1342|     78|}
bytearrayobject.c:bytearray_take_bytes_impl:
 1617|   239k|{
 1618|   239k|    Py_ssize_t to_take;
 1619|   239k|    Py_ssize_t size = Py_SIZE(self);
  ------------------
  |  |  214|   239k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1620|   239k|    if (Py_IsNone(n)) {
  ------------------
  |  |  621|   239k|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|   239k|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 239k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1621|   239k|        to_take = size;
 1622|   239k|    }
 1623|       |    // Integer index, from start (zero, positive) or end (negative).
 1624|      0|    else if (_PyIndex_Check(n)) {
  ------------------
  |  Branch (1624:14): [True: 0, False: 0]
  ------------------
 1625|      0|        to_take = PyNumber_AsSsize_t(n, PyExc_IndexError);
 1626|      0|        if (to_take == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1626:13): [True: 0, False: 0]
  |  Branch (1626:30): [True: 0, False: 0]
  ------------------
 1627|      0|            return NULL;
 1628|      0|        }
 1629|       |        // n.__index__() may have resized self; use the current size.
 1630|      0|        size = Py_SIZE(self);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1631|      0|        if (to_take < 0) {
  ------------------
  |  Branch (1631:13): [True: 0, False: 0]
  ------------------
 1632|      0|            to_take += size;
 1633|      0|        }
 1634|      0|    }
 1635|      0|    else {
 1636|      0|        PyErr_SetString(PyExc_TypeError, "n must be an integer or None");
 1637|      0|        return NULL;
 1638|      0|    }
 1639|       |
 1640|   239k|    if (to_take < 0 || to_take > size) {
  ------------------
  |  Branch (1640:9): [True: 0, False: 239k]
  |  Branch (1640:24): [True: 0, False: 239k]
  ------------------
 1641|      0|        PyErr_Format(PyExc_IndexError,
 1642|      0|            "can't take %zd bytes outside size %zd",
 1643|      0|            to_take, size);
 1644|      0|        return NULL;
 1645|      0|    }
 1646|       |
 1647|       |    // Exports may change the contents. No mutable bytes allowed.
 1648|   239k|    if (!_canresize(self)) {
  ------------------
  |  Branch (1648:9): [True: 0, False: 239k]
  ------------------
 1649|      0|        return NULL;
 1650|      0|    }
 1651|       |
 1652|   239k|    if (to_take == 0 || size == 0) {
  ------------------
  |  Branch (1652:9): [True: 13.6k, False: 225k]
  |  Branch (1652:25): [True: 0, False: 225k]
  ------------------
 1653|  13.6k|        return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
  ------------------
  |  |  598|  13.6k|#define Py_CONSTANT_EMPTY_BYTES 8
  ------------------
 1654|  13.6k|    }
 1655|       |
 1656|   225k|    Py_ssize_t remaining_length = size - to_take;
 1657|       |
 1658|       |    // optimization: If taking less than leaving, just copy the small to_take
 1659|       |    // portion out and move ob_start.
 1660|   225k|    if (to_take < remaining_length) {
  ------------------
  |  Branch (1660:9): [True: 0, False: 225k]
  ------------------
 1661|      0|        PyObject *ret = PyBytes_FromStringAndSize(self->ob_start, to_take);
 1662|      0|        if (ret == NULL) {
  ------------------
  |  Branch (1662:13): [True: 0, False: 0]
  ------------------
 1663|      0|            return NULL;
 1664|      0|        }
 1665|      0|        self->ob_start += to_take;
 1666|      0|        Py_SET_SIZE(self, remaining_length);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1667|      0|        return ret;
 1668|      0|    }
 1669|       |
 1670|       |    // Copy remaining bytes to a new bytes. Allocate and then copy
 1671|       |    // so we don't get a shared immortal one-character singleton!
 1672|   225k|    PyObject *remaining = PyBytes_FromStringAndSize(NULL, remaining_length);
 1673|   225k|    if (remaining == NULL) {
  ------------------
  |  Branch (1673:9): [True: 0, False: 225k]
  ------------------
 1674|      0|        return NULL;
 1675|      0|    }
 1676|   225k|    memcpy(PyBytes_AS_STRING(remaining), self->ob_start + to_take,
  ------------------
  |  |   27|   225k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   225k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   225k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1677|   225k|           remaining_length);
 1678|       |
 1679|   225k|    if (bytearray_resize_storage(self, to_take, to_take) < 0) {
  ------------------
  |  Branch (1679:9): [True: 0, False: 225k]
  ------------------
 1680|      0|        Py_DECREF(remaining);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1681|      0|        return NULL;
 1682|      0|    }
 1683|       |
 1684|       |    // Point the bytearray towards the buffer with the remaining data.
 1685|   225k|    PyObject *result = self->ob_bytes_object;
 1686|   225k|    self->ob_bytes_object = remaining;
 1687|   225k|    bytearray_reinit_from_bytes(self, remaining_length);
 1688|   225k|    return result;
 1689|   225k|}
bytearrayobject.c:bytearray_translate_impl:
 1713|      7|{
 1714|      7|    char *input, *output;
 1715|      7|    const char *table_chars;
 1716|      7|    Py_ssize_t i, c;
 1717|      7|    PyObject *input_obj = (PyObject*)self;
 1718|      7|    const char *output_start;
 1719|      7|    Py_ssize_t inlen;
 1720|      7|    PyObject *result = NULL;
 1721|      7|    int trans_table[256];
 1722|      7|    Py_buffer vtable, vdel;
 1723|       |
 1724|      7|    if (table == Py_None) {
  ------------------
  |  |  616|      7|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1724:9): [True: 0, False: 7]
  ------------------
 1725|      0|        table_chars = NULL;
 1726|      0|        table = NULL;
 1727|      7|    } else if (PyObject_GetBuffer(table, &vtable, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      7|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1727:16): [True: 0, False: 7]
  ------------------
 1728|      0|        return NULL;
 1729|      7|    } else {
 1730|      7|        if (vtable.len != 256) {
  ------------------
  |  Branch (1730:13): [True: 0, False: 7]
  ------------------
 1731|      0|            PyErr_SetString(PyExc_ValueError,
 1732|      0|                            "translation table must be 256 characters long");
 1733|      0|            PyBuffer_Release(&vtable);
 1734|      0|            return NULL;
 1735|      0|        }
 1736|      7|        table_chars = (const char*)vtable.buf;
 1737|      7|    }
 1738|       |
 1739|      7|    if (deletechars != NULL) {
  ------------------
  |  Branch (1739:9): [True: 0, False: 7]
  ------------------
 1740|      0|        if (PyObject_GetBuffer(deletechars, &vdel, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1740:13): [True: 0, False: 0]
  ------------------
 1741|      0|            if (table != NULL)
  ------------------
  |  Branch (1741:17): [True: 0, False: 0]
  ------------------
 1742|      0|                PyBuffer_Release(&vtable);
 1743|      0|            return NULL;
 1744|      0|        }
 1745|      0|    }
 1746|      7|    else {
 1747|      7|        vdel.buf = NULL;
 1748|      7|        vdel.len = 0;
 1749|      7|    }
 1750|       |
 1751|      7|    inlen = PyByteArray_GET_SIZE(input_obj);
  ------------------
  |  |   38|      7|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1752|      7|    result = PyByteArray_FromStringAndSize((char *)NULL, inlen);
 1753|      7|    if (result == NULL)
  ------------------
  |  Branch (1753:9): [True: 0, False: 7]
  ------------------
 1754|      0|        goto done;
 1755|      7|    output_start = output = PyByteArray_AS_STRING(result);
  ------------------
  |  |   28|      7|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1756|      7|    input = PyByteArray_AS_STRING(input_obj);
  ------------------
  |  |   28|      7|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1757|       |
 1758|      7|    if (vdel.len == 0 && table_chars != NULL) {
  ------------------
  |  Branch (1758:9): [True: 7, False: 0]
  |  Branch (1758:26): [True: 7, False: 0]
  ------------------
 1759|       |        /* If no deletions are required, use faster code */
 1760|  3.33k|        for (i = inlen; --i >= 0; ) {
  ------------------
  |  Branch (1760:25): [True: 3.32k, False: 7]
  ------------------
 1761|  3.32k|            c = Py_CHARMASK(*input++);
  ------------------
  |  |  163|  3.32k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1762|  3.32k|            *output++ = table_chars[c];
 1763|  3.32k|        }
 1764|      7|        goto done;
 1765|      7|    }
 1766|       |
 1767|      0|    if (table_chars == NULL) {
  ------------------
  |  Branch (1767:9): [True: 0, False: 0]
  ------------------
 1768|      0|        for (i = 0; i < 256; i++)
  ------------------
  |  Branch (1768:21): [True: 0, False: 0]
  ------------------
 1769|      0|            trans_table[i] = Py_CHARMASK(i);
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1770|      0|    } else {
 1771|      0|        for (i = 0; i < 256; i++)
  ------------------
  |  Branch (1771:21): [True: 0, False: 0]
  ------------------
 1772|      0|            trans_table[i] = Py_CHARMASK(table_chars[i]);
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1773|      0|    }
 1774|       |
 1775|      0|    for (i = 0; i < vdel.len; i++)
  ------------------
  |  Branch (1775:17): [True: 0, False: 0]
  ------------------
 1776|      0|        trans_table[(int) Py_CHARMASK( ((unsigned char*)vdel.buf)[i] )] = -1;
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1777|       |
 1778|      0|    for (i = inlen; --i >= 0; ) {
  ------------------
  |  Branch (1778:21): [True: 0, False: 0]
  ------------------
 1779|      0|        c = Py_CHARMASK(*input++);
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1780|      0|        if (trans_table[c] != -1)
  ------------------
  |  Branch (1780:13): [True: 0, False: 0]
  ------------------
 1781|      0|            *output++ = (char)trans_table[c];
 1782|      0|    }
 1783|       |    /* Fix the size of the resulting bytearray */
 1784|      0|    if (inlen > 0)
  ------------------
  |  Branch (1784:9): [True: 0, False: 0]
  ------------------
 1785|      0|        if (PyByteArray_Resize(result, output - output_start) < 0) {
  ------------------
  |  Branch (1785:13): [True: 0, False: 0]
  ------------------
 1786|      0|            Py_CLEAR(result);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1787|      0|            goto done;
 1788|      0|        }
 1789|       |
 1790|      7|done:
 1791|      7|    if (table != NULL)
  ------------------
  |  Branch (1791:9): [True: 7, False: 0]
  ------------------
 1792|      7|        PyBuffer_Release(&vtable);
 1793|      7|    if (deletechars != NULL)
  ------------------
  |  Branch (1793:9): [True: 0, False: 7]
  ------------------
 1794|      0|        PyBuffer_Release(&vdel);
 1795|      7|    return result;
 1796|      0|}
bytearrayobject.c:bytearray___init___impl:
  987|   239k|{
  988|   239k|    Py_ssize_t count;
  989|   239k|    PyObject *it;
  990|   239k|    PyObject *(*iternext)(PyObject *);
  991|       |
  992|       |    /* Disallow any __init__ call if the object is not resizable (has exports)
  993|       |       to make the handling of non-null `source` init values simpler. */
  994|   239k|    if (!_canresize(self)) {
  ------------------
  |  Branch (994:9): [True: 0, False: 239k]
  ------------------
  995|      0|        return -1;
  996|      0|    }
  997|       |
  998|       |    /* Empty any previous contents (do this first of all!). */
  999|   239k|    if (PyByteArray_Resize((PyObject *)self, 0) < 0) {
  ------------------
  |  Branch (999:9): [True: 0, False: 239k]
  ------------------
 1000|      0|        return -1;
 1001|      0|    }
 1002|   239k|    assert(self->ob_bytes_object == Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_BYTES));
  ------------------
  |  Branch (1002:5): [True: 239k, False: 0]
  ------------------
 1003|   239k|    assert(self->ob_exports == 0);
  ------------------
  |  Branch (1003:5): [True: 239k, False: 0]
  ------------------
 1004|       |
 1005|       |    /* Make a quick exit if no first argument */
 1006|   239k|    if (arg == NULL) {
  ------------------
  |  Branch (1006:9): [True: 239k, False: 18]
  ------------------
 1007|   239k|        if (encoding != NULL || errors != NULL) {
  ------------------
  |  Branch (1007:13): [True: 0, False: 239k]
  |  Branch (1007:33): [True: 0, False: 239k]
  ------------------
 1008|      0|            PyErr_SetString(PyExc_TypeError,
 1009|      0|                            encoding != NULL ?
  ------------------
  |  Branch (1009:29): [True: 0, False: 0]
  ------------------
 1010|      0|                            "encoding without a string argument" :
 1011|      0|                            "errors without a string argument");
 1012|      0|            return -1;
 1013|      0|        }
 1014|   239k|        return 0;
 1015|   239k|    }
 1016|       |
 1017|     18|    if (PyUnicode_Check(arg)) {
  ------------------
  |  |  103|     18|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     18|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1018|       |        /* Encode via the codec registry */
 1019|      0|        PyObject *encoded, *new;
 1020|      0|        if (encoding == NULL) {
  ------------------
  |  Branch (1020:13): [True: 0, False: 0]
  ------------------
 1021|      0|            PyErr_SetString(PyExc_TypeError,
 1022|      0|                            "string argument without an encoding");
 1023|      0|            return -1;
 1024|      0|        }
 1025|      0|        encoded = PyUnicode_AsEncodedString(arg, encoding, errors);
 1026|      0|        if (encoded == NULL) {
  ------------------
  |  Branch (1026:13): [True: 0, False: 0]
  ------------------
 1027|      0|            return -1;
 1028|      0|        }
 1029|      0|        assert(PyBytes_Check(encoded));
  ------------------
  |  Branch (1029:9): [True: 0, False: 0]
  ------------------
 1030|       |
 1031|       |        /* Most encodes return a new unique bytes, just use it as buffer. */
 1032|      0|        if (_PyObject_IsUniquelyReferenced(encoded)
  ------------------
  |  Branch (1032:13): [True: 0, False: 0]
  ------------------
 1033|      0|            && PyBytes_CheckExact(encoded))
  ------------------
  |  |   29|      0|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1034|      0|        {
 1035|      0|            Py_ssize_t size = PyBytes_GET_SIZE(encoded);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1036|      0|            self->ob_bytes_object = encoded;
 1037|      0|            bytearray_reinit_from_bytes(self, size);
 1038|      0|            return 0;
 1039|      0|        }
 1040|      0|        new = bytearray_iconcat((PyObject*)self, encoded);
 1041|      0|        Py_DECREF(encoded);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1042|      0|        if (new == NULL)
  ------------------
  |  Branch (1042:13): [True: 0, False: 0]
  ------------------
 1043|      0|            return -1;
 1044|      0|        Py_DECREF(new);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1045|      0|        return 0;
 1046|      0|    }
 1047|       |
 1048|       |    /* If it's not unicode, there can't be encoding or errors */
 1049|     18|    if (encoding != NULL || errors != NULL) {
  ------------------
  |  Branch (1049:9): [True: 0, False: 18]
  |  Branch (1049:29): [True: 0, False: 18]
  ------------------
 1050|      0|        PyErr_SetString(PyExc_TypeError,
 1051|      0|                        encoding != NULL ?
  ------------------
  |  Branch (1051:25): [True: 0, False: 0]
  ------------------
 1052|      0|                        "encoding without a string argument" :
 1053|      0|                        "errors without a string argument");
 1054|      0|        return -1;
 1055|      0|    }
 1056|       |
 1057|       |    /* Is it an int? */
 1058|     18|    if (_PyIndex_Check(arg)) {
  ------------------
  |  Branch (1058:9): [True: 18, False: 0]
  ------------------
 1059|     18|        count = PyNumber_AsSsize_t(arg, PyExc_OverflowError);
 1060|     18|        if (count == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1060:13): [True: 0, False: 18]
  |  Branch (1060:28): [True: 0, False: 0]
  ------------------
 1061|      0|            if (!PyErr_ExceptionMatches(PyExc_TypeError))
  ------------------
  |  Branch (1061:17): [True: 0, False: 0]
  ------------------
 1062|      0|                return -1;
 1063|      0|            PyErr_Clear();  /* fall through */
 1064|      0|        }
 1065|     18|        else {
 1066|     18|            if (count < 0) {
  ------------------
  |  Branch (1066:17): [True: 0, False: 18]
  ------------------
 1067|      0|                PyErr_SetString(PyExc_ValueError, "negative count");
 1068|      0|                return -1;
 1069|      0|            }
 1070|     18|            if (count > 0) {
  ------------------
  |  Branch (1070:17): [True: 18, False: 0]
  ------------------
 1071|     18|                if (PyByteArray_Resize((PyObject *)self, count))
  ------------------
  |  Branch (1071:21): [True: 0, False: 18]
  ------------------
 1072|      0|                    return -1;
 1073|     18|                memset(PyByteArray_AS_STRING(self), 0, count);
  ------------------
  |  |   28|     18|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|     18|            }
 1075|     18|            return 0;
 1076|     18|        }
 1077|     18|    }
 1078|       |
 1079|       |    /* Use the buffer API */
 1080|      0|    if (PyObject_CheckBuffer(arg)) {
  ------------------
  |  Branch (1080:9): [True: 0, False: 0]
  ------------------
 1081|      0|        Py_ssize_t size;
 1082|      0|        Py_buffer view;
 1083|      0|        if (PyObject_GetBuffer(arg, &view, PyBUF_FULL_RO) < 0)
  ------------------
  |  |  134|      0|#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  122|      0|#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|      0|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|      0|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  116|      0|#define PyBUF_FORMAT 0x0004
  |  |  ------------------
  ------------------
  |  Branch (1083:13): [True: 0, False: 0]
  ------------------
 1084|      0|            return -1;
 1085|      0|        size = view.len;
 1086|      0|        if (PyByteArray_Resize((PyObject *)self, size) < 0) goto fail;
  ------------------
  |  Branch (1086:13): [True: 0, False: 0]
  ------------------
 1087|      0|        if (PyBuffer_ToContiguous(PyByteArray_AS_STRING(self),
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1087:13): [True: 0, False: 0]
  ------------------
 1088|      0|            &view, size, 'C') < 0)
 1089|      0|            goto fail;
 1090|      0|        PyBuffer_Release(&view);
 1091|      0|        return 0;
 1092|      0|    fail:
 1093|      0|        PyBuffer_Release(&view);
 1094|      0|        return -1;
 1095|      0|    }
 1096|       |
 1097|      0|    if (PyList_CheckExact(arg) || PyTuple_CheckExact(arg)) {
  ------------------
  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyList_CheckExact(arg) || PyTuple_CheckExact(arg)) {
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|      0|        Py_ssize_t size = PySequence_Fast_GET_SIZE(arg);
  ------------------
  |  |   92|      0|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|      0|        if (PyByteArray_Resize((PyObject *)self, size) < 0) {
  ------------------
  |  Branch (1099:13): [True: 0, False: 0]
  ------------------
 1100|      0|            return -1;
 1101|      0|        }
 1102|      0|        PyObject **items = PySequence_Fast_ITEMS(arg);
  ------------------
  |  |  102|      0|    (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  103|      0|                      : ((PyTupleObject *)(sf))->ob_item)
  ------------------
 1103|      0|        char *s = PyByteArray_AS_STRING(self);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1104|      0|        for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (1104:32): [True: 0, False: 0]
  ------------------
 1105|      0|            int value;
 1106|      0|            if (!PyLong_CheckExact(items[i])) {
  ------------------
  |  |   14|      0|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1106:17): [True: 0, False: 0]
  ------------------
 1107|       |                /* Resize to 0 and go through slowpath */
 1108|      0|                if (Py_SIZE(self) != 0) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1108:21): [True: 0, False: 0]
  ------------------
 1109|      0|                   if (PyByteArray_Resize((PyObject *)self, 0) < 0) {
  ------------------
  |  Branch (1109:24): [True: 0, False: 0]
  ------------------
 1110|      0|                       return -1;
 1111|      0|                   }
 1112|      0|                }
 1113|      0|                goto slowpath;
 1114|      0|            }
 1115|      0|            int rc = _getbytevalue(items[i], &value);
 1116|      0|            if (!rc) {
  ------------------
  |  Branch (1116:17): [True: 0, False: 0]
  ------------------
 1117|      0|                return -1;
 1118|      0|            }
 1119|      0|            s[i] = value;
 1120|      0|        }
 1121|      0|        return 0;
 1122|      0|    }
 1123|      0|slowpath:
 1124|       |    /* Get the iterator */
 1125|      0|    it = PyObject_GetIter(arg);
 1126|      0|    if (it == NULL) {
  ------------------
  |  Branch (1126:9): [True: 0, False: 0]
  ------------------
 1127|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (1127:13): [True: 0, False: 0]
  ------------------
 1128|      0|            PyErr_Format(PyExc_TypeError,
 1129|      0|                         "cannot convert '%.200s' object to bytearray",
 1130|      0|                         Py_TYPE(arg)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1131|      0|        }
 1132|      0|        return -1;
 1133|      0|    }
 1134|      0|    iternext = *Py_TYPE(it)->tp_iternext;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1135|       |
 1136|       |    /* Run the iterator to exhaustion */
 1137|      0|    for (;;) {
 1138|      0|        PyObject *item;
 1139|      0|        int rc, value;
 1140|       |
 1141|       |        /* Get the next item */
 1142|      0|        item = iternext(it);
 1143|      0|        if (item == NULL) {
  ------------------
  |  Branch (1143:13): [True: 0, False: 0]
  ------------------
 1144|      0|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (1144:17): [True: 0, False: 0]
  ------------------
 1145|      0|                if (!PyErr_ExceptionMatches(PyExc_StopIteration))
  ------------------
  |  Branch (1145:21): [True: 0, False: 0]
  ------------------
 1146|      0|                    goto error;
 1147|      0|                PyErr_Clear();
 1148|      0|            }
 1149|      0|            break;
 1150|      0|        }
 1151|       |
 1152|       |        /* Interpret it as an int (__index__) */
 1153|      0|        rc = _getbytevalue(item, &value);
 1154|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|      0|        if (!rc)
  ------------------
  |  Branch (1155:13): [True: 0, False: 0]
  ------------------
 1156|      0|            goto error;
 1157|       |
 1158|       |        /* Append the byte */
 1159|      0|        if (Py_SIZE(self) + 1 < self->ob_alloc) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1159:13): [True: 0, False: 0]
  ------------------
 1160|      0|            Py_SET_SIZE(self, Py_SIZE(self) + 1);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|      0|            bytearray_write_trailing_null_byte(self);
 1162|      0|        }
 1163|      0|        else if (PyByteArray_Resize((PyObject *)self, Py_SIZE(self)+1) < 0)
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1163:18): [True: 0, False: 0]
  ------------------
 1164|      0|            goto error;
 1165|      0|        PyByteArray_AS_STRING(self)[Py_SIZE(self)-1] = value;
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      PyByteArray_AS_STRING(self)[Py_SIZE(self)-1] = value;
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1166|      0|    }
 1167|       |
 1168|       |    /* Clean up and return success */
 1169|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1170|      0|    return 0;
 1171|       |
 1172|      0| error:
 1173|       |    /* Error handling when it != NULL */
 1174|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1175|      0|    return -1;
 1176|      0|}
bytearrayobject.c:bytearray_new:
  962|   239k|{
  963|   239k|    PyObject *op = PyType_GenericNew(type, args, kwds);
  964|   239k|    if (op == NULL) {
  ------------------
  |  Branch (964:9): [True: 0, False: 239k]
  ------------------
  965|      0|        return NULL;
  966|      0|    }
  967|   239k|    PyByteArrayObject *self = _PyByteArray_CAST(op);
  ------------------
  |  |   22|   239k|    (assert(PyByteArray_Check(op)), _Py_CAST(PyByteArrayObject*, op))
  |  |  ------------------
  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (967:31): [True: 239k, False: 0]
  ------------------
  968|   239k|    self->ob_bytes_object = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
  ------------------
  |  |  598|   239k|#define Py_CONSTANT_EMPTY_BYTES 8
  ------------------
  969|   239k|    bytearray_reinit_from_bytes(self, 0);
  970|   239k|    self->ob_exports = 0;
  971|   239k|    return op;
  972|   239k|}
bytearrayobject.c:bytearrayiter_dealloc:
 3027|      2|{
 3028|      2|    bytesiterobject *it = _bytesiterobject_CAST(self);
  ------------------
  |  | 3023|      2|#define _bytesiterobject_CAST(op)   ((bytesiterobject *)(op))
  ------------------
 3029|      2|    _PyObject_GC_UNTRACK(it);
  ------------------
  |  |  507|      2|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3030|      2|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3031|      2|    PyObject_GC_Del(it);
 3032|      2|}
bytearrayobject.c:bytearray_iter:
 3181|      2|{
 3182|      2|    bytesiterobject *it;
 3183|       |
 3184|      2|    if (!PyByteArray_Check(seq)) {
  ------------------
  |  |   24|      2|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      2|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3184:9): [True: 0, False: 2]
  ------------------
 3185|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3186|      0|        return NULL;
 3187|      0|    }
 3188|      2|    it = PyObject_GC_New(bytesiterobject, &PyByteArrayIter_Type);
  ------------------
  |  |  181|      2|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 3189|      2|    if (it == NULL)
  ------------------
  |  Branch (3189:9): [True: 0, False: 2]
  ------------------
 3190|      0|        return NULL;
 3191|      2|    it->it_index = 0;  // -1 indicates exhausted
 3192|      2|    it->it_seq = (PyByteArrayObject *)Py_NewRef(seq);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3193|      2|    _PyObject_GC_TRACK(it);
  ------------------
  |  |  505|      2|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3194|      2|    return (PyObject *)it;
 3195|      2|}

_Py_bytes_lower:
  252|   272k|{
  253|   272k|    Py_ssize_t i;
  254|       |
  255|  2.76M|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (255:17): [True: 2.49M, False: 272k]
  ------------------
  256|  2.49M|        result[i] = Py_TOLOWER((unsigned char) cptr[i]);
  ------------------
  |  |   32|  2.49M|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  2.49M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  257|  2.49M|    }
  258|   272k|}
_Py_bytes_upper:
  268|  18.1k|{
  269|  18.1k|    Py_ssize_t i;
  270|       |
  271|   350k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (271:17): [True: 332k, False: 18.1k]
  ------------------
  272|   332k|        result[i] = Py_TOUPPER((unsigned char) cptr[i]);
  ------------------
  |  |   33|   332k|#define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|   332k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  273|   332k|    }
  274|  18.1k|}
_Py_bytes_find:
  515|     78|{
  516|     78|    Py_ssize_t result = find_internal(str, len, "find", sub, start, end, +1);
  517|     78|    if (result == -2)
  ------------------
  |  Branch (517:9): [True: 0, False: 78]
  ------------------
  518|      0|        return NULL;
  519|     78|    return PyLong_FromSsize_t(result);
  520|     78|}
_Py_bytes_rfind:
  540|  18.1k|{
  541|  18.1k|    Py_ssize_t result = find_internal(str, len, "rfind", sub, start, end, -1);
  542|  18.1k|    if (result == -2)
  ------------------
  |  Branch (542:9): [True: 0, False: 18.1k]
  ------------------
  543|      0|        return NULL;
  544|  18.1k|    return PyLong_FromSsize_t(result);
  545|  18.1k|}
_Py_bytes_contains:
  603|  1.33k|{
  604|  1.33k|    Py_ssize_t ival = PyNumber_AsSsize_t(arg, NULL);
  605|  1.33k|    if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (605:9): [True: 1.33k, False: 0]
  |  Branch (605:23): [True: 1.33k, False: 0]
  ------------------
  606|  1.33k|        Py_buffer varg;
  607|  1.33k|        Py_ssize_t pos;
  608|  1.33k|        PyErr_Clear();
  609|  1.33k|        if (PyObject_GetBuffer(arg, &varg, PyBUF_SIMPLE) != 0)
  ------------------
  |  |  108|  1.33k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (609:13): [True: 0, False: 1.33k]
  ------------------
  610|      0|            return -1;
  611|  1.33k|        pos = stringlib_find(str, len,
  612|  1.33k|                             varg.buf, varg.len, 0);
  613|  1.33k|        PyBuffer_Release(&varg);
  614|  1.33k|        return pos >= 0;
  615|  1.33k|    }
  616|      0|    if (ival < 0 || ival >= 256) {
  ------------------
  |  Branch (616:9): [True: 0, False: 0]
  |  Branch (616:21): [True: 0, False: 0]
  ------------------
  617|      0|        PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)");
  618|      0|        return -1;
  619|      0|    }
  620|       |
  621|      0|    return memchr(str, (int) ival, len) != NULL;
  622|      0|}
_Py_bytes_startswith:
  711|   129k|{
  712|   129k|    return _Py_bytes_tailmatch(str, len, "startswith", subobj, start, end, -1);
  713|   129k|}
bytes_methods.c:find_internal:
  457|  18.2k|{
  458|  18.2k|    char byte;
  459|  18.2k|    Py_buffer subbuf;
  460|  18.2k|    const char *sub;
  461|  18.2k|    Py_ssize_t sub_len;
  462|  18.2k|    Py_ssize_t res;
  463|       |
  464|  18.2k|    if (!parse_args_finds_byte(function_name, &subobj, &byte)) {
  ------------------
  |  Branch (464:9): [True: 0, False: 18.2k]
  ------------------
  465|      0|        return -2;
  466|      0|    }
  467|       |
  468|  18.2k|    if (subobj) {
  ------------------
  |  Branch (468:9): [True: 18.1k, False: 78]
  ------------------
  469|  18.1k|        if (PyObject_GetBuffer(subobj, &subbuf, PyBUF_SIMPLE) != 0)
  ------------------
  |  |  108|  18.1k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (469:13): [True: 0, False: 18.1k]
  ------------------
  470|      0|            return -2;
  471|       |
  472|  18.1k|        sub = subbuf.buf;
  473|  18.1k|        sub_len = subbuf.len;
  474|  18.1k|    }
  475|     78|    else {
  476|     78|        sub = &byte;
  477|     78|        sub_len = 1;
  478|     78|    }
  479|       |
  480|  18.2k|    ADJUST_INDICES(start, end, len);
  ------------------
  |  |  434|  18.2k|    do {                                \
  |  |  435|  18.2k|        if (end > len) {                \
  |  |  ------------------
  |  |  |  Branch (435:13): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |  436|  18.2k|            end = len;                  \
  |  |  437|  18.2k|        }                               \
  |  |  438|  18.2k|        else if (end < 0) {             \
  |  |  ------------------
  |  |  |  Branch (438:18): [True: 0, False: 0]
  |  |  ------------------
  |  |  439|      0|            end += len;                 \
  |  |  440|      0|            if (end < 0) {              \
  |  |  ------------------
  |  |  |  Branch (440:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  441|      0|                end = 0;                \
  |  |  442|      0|            }                           \
  |  |  443|      0|        }                               \
  |  |  444|  18.2k|        if (start < 0) {                \
  |  |  ------------------
  |  |  |  Branch (444:13): [True: 0, False: 18.2k]
  |  |  ------------------
  |  |  445|      0|            start += len;               \
  |  |  446|      0|            if (start < 0) {            \
  |  |  ------------------
  |  |  |  Branch (446:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  447|      0|                start = 0;              \
  |  |  448|      0|            }                           \
  |  |  449|      0|        }                               \
  |  |  450|  18.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (450:14): [Folded, False: 18.2k]
  |  |  ------------------
  ------------------
  481|  18.2k|    if (end - start < sub_len)
  ------------------
  |  Branch (481:9): [True: 0, False: 18.2k]
  ------------------
  482|      0|        res = -1;
  483|  18.2k|    else if (sub_len == 1) {
  ------------------
  |  Branch (483:14): [True: 18.2k, False: 0]
  ------------------
  484|  18.2k|        if (dir > 0)
  ------------------
  |  Branch (484:13): [True: 78, False: 18.1k]
  ------------------
  485|     78|            res = stringlib_find_char(
  486|     78|                str + start, end - start,
  487|     78|                *sub);
  488|  18.1k|        else
  489|  18.1k|            res = stringlib_rfind_char(
  490|  18.1k|                str + start, end - start,
  491|  18.1k|                *sub);
  492|  18.2k|        if (res >= 0)
  ------------------
  |  Branch (492:13): [True: 4.21k, False: 14.0k]
  ------------------
  493|  4.21k|            res += start;
  494|  18.2k|    }
  495|      0|    else {
  496|      0|        if (dir > 0)
  ------------------
  |  Branch (496:13): [True: 0, False: 0]
  ------------------
  497|      0|            res = stringlib_find_slice(
  498|      0|                str, len,
  499|      0|                sub, sub_len, start, end);
  500|      0|        else
  501|      0|            res = stringlib_rfind_slice(
  502|      0|                str, len,
  503|      0|                sub, sub_len, start, end);
  504|      0|    }
  505|       |
  506|  18.2k|    if (subobj)
  ------------------
  |  Branch (506:9): [True: 18.1k, False: 78]
  ------------------
  507|  18.1k|        PyBuffer_Release(&subbuf);
  508|       |
  509|  18.2k|    return res;
  510|  18.2k|}
bytes_methods.c:parse_args_finds_byte:
  405|  18.2k|{
  406|  18.2k|    if (PyObject_CheckBuffer(*subobj)) {
  ------------------
  |  Branch (406:9): [True: 18.1k, False: 78]
  ------------------
  407|  18.1k|        return 1;
  408|  18.1k|    }
  409|       |
  410|     78|    if (!_PyIndex_Check(*subobj)) {
  ------------------
  |  Branch (410:9): [True: 0, False: 78]
  ------------------
  411|      0|        PyErr_Format(PyExc_TypeError,
  412|      0|                     "argument should be integer or bytes-like object, "
  413|      0|                     "not '%.200s'",
  414|      0|                     Py_TYPE(*subobj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|      0|        return 0;
  416|      0|    }
  417|       |
  418|     78|    Py_ssize_t ival = PyNumber_AsSsize_t(*subobj, NULL);
  419|     78|    if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (419:9): [True: 0, False: 78]
  |  Branch (419:23): [True: 0, False: 0]
  ------------------
  420|      0|        return 0;
  421|      0|    }
  422|     78|    if (ival < 0 || ival > 255) {
  ------------------
  |  Branch (422:9): [True: 0, False: 78]
  |  Branch (422:21): [True: 0, False: 78]
  ------------------
  423|      0|        PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)");
  424|      0|        return 0;
  425|      0|    }
  426|       |
  427|     78|    *subobj = NULL;
  428|     78|    *byte = (char)ival;
  429|     78|    return 1;
  430|     78|}
bytes_methods.c:_Py_bytes_tailmatch:
  680|   129k|{
  681|   129k|    if (PyTuple_Check(subobj)) {
  ------------------
  |  |   27|   129k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   129k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 129k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  682|      0|        Py_ssize_t i;
  683|      0|        for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (683:21): [True: 0, False: 0]
  ------------------
  684|      0|            PyObject *item = PyTuple_GET_ITEM(subobj, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (684:30): [True: 0, False: 0]
  ------------------
  685|      0|            int result = tailmatch(str, len, item, start, end, direction);
  686|      0|            if (result < 0) {
  ------------------
  |  Branch (686:17): [True: 0, False: 0]
  ------------------
  687|      0|                return NULL;
  688|      0|            }
  689|      0|            else if (result) {
  ------------------
  |  Branch (689:22): [True: 0, False: 0]
  ------------------
  690|      0|                Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|      0|            }
  692|      0|        }
  693|      0|        Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  694|      0|    }
  695|   129k|    int result = tailmatch(str, len, subobj, start, end, direction);
  696|   129k|    if (result == -1) {
  ------------------
  |  Branch (696:9): [True: 0, False: 129k]
  ------------------
  697|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (697:13): [True: 0, False: 0]
  ------------------
  698|      0|            PyErr_Format(PyExc_TypeError,
  699|      0|                         "%s first arg must be bytes or a tuple of bytes, "
  700|      0|                         "not %s",
  701|      0|                         function_name, Py_TYPE(subobj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|      0|        }
  703|      0|        return NULL;
  704|      0|    }
  705|   129k|    return PyBool_FromLong(result);
  706|   129k|}
bytes_methods.c:tailmatch:
  632|   129k|{
  633|   129k|    Py_buffer sub_view = {NULL, NULL};
  634|   129k|    const char *sub;
  635|   129k|    Py_ssize_t slen;
  636|       |
  637|   129k|    if (PyBytes_Check(substr)) {
  ------------------
  |  |   28|   129k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   129k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 129k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  638|   129k|        sub = PyBytes_AS_STRING(substr);
  ------------------
  |  |   27|   129k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  639|   129k|        slen = PyBytes_GET_SIZE(substr);
  ------------------
  |  |   33|   129k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  640|   129k|    }
  641|      0|    else {
  642|      0|        if (PyObject_GetBuffer(substr, &sub_view, PyBUF_SIMPLE) != 0)
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (642:13): [True: 0, False: 0]
  ------------------
  643|      0|            return -1;
  644|      0|        sub = sub_view.buf;
  645|      0|        slen = sub_view.len;
  646|      0|    }
  647|       |
  648|   129k|    ADJUST_INDICES(start, end, len);
  ------------------
  |  |  434|   129k|    do {                                \
  |  |  435|   129k|        if (end > len) {                \
  |  |  ------------------
  |  |  |  Branch (435:13): [True: 129k, False: 0]
  |  |  ------------------
  |  |  436|   129k|            end = len;                  \
  |  |  437|   129k|        }                               \
  |  |  438|   129k|        else if (end < 0) {             \
  |  |  ------------------
  |  |  |  Branch (438:18): [True: 0, False: 0]
  |  |  ------------------
  |  |  439|      0|            end += len;                 \
  |  |  440|      0|            if (end < 0) {              \
  |  |  ------------------
  |  |  |  Branch (440:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  441|      0|                end = 0;                \
  |  |  442|      0|            }                           \
  |  |  443|      0|        }                               \
  |  |  444|   129k|        if (start < 0) {                \
  |  |  ------------------
  |  |  |  Branch (444:13): [True: 0, False: 129k]
  |  |  ------------------
  |  |  445|      0|            start += len;               \
  |  |  446|      0|            if (start < 0) {            \
  |  |  ------------------
  |  |  |  Branch (446:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  447|      0|                start = 0;              \
  |  |  448|      0|            }                           \
  |  |  449|      0|        }                               \
  |  |  450|   129k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (450:14): [Folded, False: 129k]
  |  |  ------------------
  ------------------
  649|       |
  650|   129k|    if (direction < 0) {
  ------------------
  |  Branch (650:9): [True: 129k, False: 0]
  ------------------
  651|       |        /* startswith */
  652|   129k|        if (start > len - slen)
  ------------------
  |  Branch (652:13): [True: 93.8k, False: 35.3k]
  ------------------
  653|  93.8k|            goto notfound;
  654|   129k|    } else {
  655|       |        /* endswith */
  656|      0|        if (end - start < slen || start > len)
  ------------------
  |  Branch (656:13): [True: 0, False: 0]
  |  Branch (656:35): [True: 0, False: 0]
  ------------------
  657|      0|            goto notfound;
  658|       |
  659|      0|        if (end - slen > start)
  ------------------
  |  Branch (659:13): [True: 0, False: 0]
  ------------------
  660|      0|            start = end - slen;
  661|      0|    }
  662|  35.3k|    if (end - start < slen)
  ------------------
  |  Branch (662:9): [True: 0, False: 35.3k]
  ------------------
  663|      0|        goto notfound;
  664|  35.3k|    if (memcmp(str + start, sub, slen) != 0)
  ------------------
  |  Branch (664:9): [True: 17.1k, False: 18.1k]
  ------------------
  665|  17.1k|        goto notfound;
  666|       |
  667|  18.1k|    PyBuffer_Release(&sub_view);
  668|  18.1k|    return 1;
  669|       |
  670|   111k|notfound:
  671|   111k|    PyBuffer_Release(&sub_view);
  672|   111k|    return 0;
  673|  35.3k|}

PyBytes_FromStringAndSize:
  136|  2.98M|{
  137|  2.98M|    PyBytesObject *op;
  138|  2.98M|    if (size < 0) {
  ------------------
  |  Branch (138:9): [True: 0, False: 2.98M]
  ------------------
  139|      0|        PyErr_SetString(PyExc_SystemError,
  140|      0|            "Negative size passed to PyBytes_FromStringAndSize");
  141|      0|        return NULL;
  142|      0|    }
  143|  2.98M|    if (size == 1 && str != NULL) {
  ------------------
  |  Branch (143:9): [True: 756k, False: 2.23M]
  |  Branch (143:22): [True: 736k, False: 19.6k]
  ------------------
  144|   736k|        op = CHARACTER(*str & 255);
  ------------------
  |  |   40|   736k|     ((PyBytesObject *)&(CHARACTERS[ch]))
  |  |  ------------------
  |  |  |  |   38|   736k|#define CHARACTERS _Py_SINGLETON(bytes_characters)
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   736k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|   736k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|   736k|        assert(_Py_IsImmortal(op));
  ------------------
  |  Branch (145:9): [True: 736k, False: 0]
  ------------------
  146|   736k|        return (PyObject *)op;
  147|   736k|    }
  148|  2.25M|    if (size == 0) {
  ------------------
  |  Branch (148:9): [True: 469k, False: 1.78M]
  ------------------
  149|   469k|        return bytes_get_empty();
  150|   469k|    }
  151|       |
  152|  1.78M|    op = (PyBytesObject *)_PyBytes_FromSize(size, 0);
  153|  1.78M|    if (op == NULL)
  ------------------
  |  Branch (153:9): [True: 0, False: 1.78M]
  ------------------
  154|      0|        return NULL;
  155|  1.78M|    if (str == NULL)
  ------------------
  |  Branch (155:9): [True: 146k, False: 1.63M]
  ------------------
  156|   146k|        return (PyObject *) op;
  157|       |
  158|  1.63M|    memcpy(op->ob_sval, str, size);
  159|  1.63M|    return (PyObject *) op;
  160|  1.78M|}
PyBytes_FromString:
  164|     88|{
  165|     88|    size_t size;
  166|     88|    PyBytesObject *op;
  167|       |
  168|     88|    assert(str != NULL);
  ------------------
  |  Branch (168:5): [True: 88, False: 0]
  ------------------
  169|     88|    size = strlen(str);
  170|     88|    if (size > PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
  ------------------
  |  |  137|     88|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                  if (size > PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
  ------------------
  |  |   30|     88|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|     88|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (170:9): [True: 0, False: 88]
  ------------------
  171|      0|        PyErr_SetString(PyExc_OverflowError,
  172|      0|            "byte string is too long");
  173|      0|        return NULL;
  174|      0|    }
  175|       |
  176|     88|    if (size == 0) {
  ------------------
  |  Branch (176:9): [True: 0, False: 88]
  ------------------
  177|      0|        return bytes_get_empty();
  178|      0|    }
  179|     88|    else if (size == 1) {
  ------------------
  |  Branch (179:14): [True: 0, False: 88]
  ------------------
  180|      0|        op = CHARACTER(*str & 255);
  ------------------
  |  |   40|      0|     ((PyBytesObject *)&(CHARACTERS[ch]))
  |  |  ------------------
  |  |  |  |   38|      0|#define CHARACTERS _Py_SINGLETON(bytes_characters)
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|      0|        assert(_Py_IsImmortal(op));
  ------------------
  |  Branch (181:9): [True: 0, False: 0]
  ------------------
  182|      0|        return (PyObject *)op;
  183|      0|    }
  184|       |
  185|       |    /* Inline PyObject_NewVar */
  186|     88|    op = (PyBytesObject *)PyObject_Malloc(PyBytesObject_SIZE + size);
  ------------------
  |  |   30|     88|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|     88|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  187|     88|    if (op == NULL) {
  ------------------
  |  Branch (187:9): [True: 0, False: 88]
  ------------------
  188|      0|        return PyErr_NoMemory();
  189|      0|    }
  190|     88|    _PyObject_InitVar((PyVarObject*)op, &PyBytes_Type, size);
  191|     88|    set_ob_shash(op, -1);
  192|     88|    memcpy(op->ob_sval, str, size+1);
  193|     88|    return (PyObject *) op;
  194|     88|}
_PyBytes_DecodeEscape2:
 1182|  6.14k|{
 1183|  6.14k|    PyBytesWriter *writer = PyBytesWriter_Create(len);
 1184|  6.14k|    if (writer == NULL) {
  ------------------
  |  Branch (1184:9): [True: 0, False: 6.14k]
  ------------------
 1185|      0|        return NULL;
 1186|      0|    }
 1187|  6.14k|    char *p = PyBytesWriter_GetData(writer);
 1188|       |
 1189|  6.14k|    *first_invalid_escape_char = -1;
 1190|  6.14k|    *first_invalid_escape_ptr = NULL;
 1191|       |
 1192|  6.14k|    const char *end = s + len;
 1193|   417k|    while (s < end) {
  ------------------
  |  Branch (1193:12): [True: 411k, False: 6.13k]
  ------------------
 1194|   411k|        if (*s != '\\') {
  ------------------
  |  Branch (1194:13): [True: 353k, False: 57.6k]
  ------------------
 1195|   353k|            *p++ = *s++;
 1196|   353k|            continue;
 1197|   353k|        }
 1198|       |
 1199|  57.6k|        s++;
 1200|  57.6k|        if (s == end) {
  ------------------
  |  Branch (1200:13): [True: 0, False: 57.6k]
  ------------------
 1201|      0|            PyErr_SetString(PyExc_ValueError,
 1202|      0|                            "Trailing \\ in string");
 1203|      0|            goto failed;
 1204|      0|        }
 1205|       |
 1206|  57.6k|        switch (*s++) {
 1207|       |        /* XXX This assumes ASCII! */
 1208|    151|        case '\n': break;
  ------------------
  |  Branch (1208:9): [True: 151, False: 57.4k]
  ------------------
 1209|  4.33k|        case '\\': *p++ = '\\'; break;
  ------------------
  |  Branch (1209:9): [True: 4.33k, False: 53.3k]
  ------------------
 1210|  1.17k|        case '\'': *p++ = '\''; break;
  ------------------
  |  Branch (1210:9): [True: 1.17k, False: 56.4k]
  ------------------
 1211|    121|        case '\"': *p++ = '\"'; break;
  ------------------
  |  Branch (1211:9): [True: 121, False: 57.5k]
  ------------------
 1212|    376|        case 'b': *p++ = '\b'; break;
  ------------------
  |  Branch (1212:9): [True: 376, False: 57.2k]
  ------------------
 1213|    294|        case 'f': *p++ = '\014'; break; /* FF */
  ------------------
  |  Branch (1213:9): [True: 294, False: 57.3k]
  ------------------
 1214|    390|        case 't': *p++ = '\t'; break;
  ------------------
  |  Branch (1214:9): [True: 390, False: 57.2k]
  ------------------
 1215|    438|        case 'n': *p++ = '\n'; break;
  ------------------
  |  Branch (1215:9): [True: 438, False: 57.1k]
  ------------------
 1216|  1.05k|        case 'r': *p++ = '\r'; break;
  ------------------
  |  Branch (1216:9): [True: 1.05k, False: 56.5k]
  ------------------
 1217|     58|        case 'v': *p++ = '\013'; break; /* VT */
  ------------------
  |  Branch (1217:9): [True: 58, False: 57.5k]
  ------------------
 1218|  1.79k|        case 'a': *p++ = '\007'; break; /* BEL, not classic C */
  ------------------
  |  Branch (1218:9): [True: 1.79k, False: 55.8k]
  ------------------
 1219|  22.4k|        case '0': case '1': case '2': case '3':
  ------------------
  |  Branch (1219:9): [True: 938, False: 56.6k]
  |  Branch (1219:19): [True: 998, False: 56.6k]
  |  Branch (1219:29): [True: 17.5k, False: 40.0k]
  |  Branch (1219:39): [True: 2.95k, False: 54.6k]
  ------------------
 1220|  41.7k|        case '4': case '5': case '6': case '7':
  ------------------
  |  Branch (1220:9): [True: 1.05k, False: 56.5k]
  |  Branch (1220:19): [True: 1.76k, False: 55.8k]
  |  Branch (1220:29): [True: 5.68k, False: 51.9k]
  |  Branch (1220:39): [True: 10.7k, False: 46.8k]
  ------------------
 1221|  41.7k|        {
 1222|  41.7k|            int c = s[-1] - '0';
 1223|  41.7k|            if (s < end && '0' <= *s && *s <= '7') {
  ------------------
  |  Branch (1223:17): [True: 40.1k, False: 1.54k]
  |  Branch (1223:28): [True: 19.0k, False: 21.1k]
  |  Branch (1223:41): [True: 9.91k, False: 9.12k]
  ------------------
 1224|  9.91k|                c = (c<<3) + *s++ - '0';
 1225|  9.91k|                if (s < end && '0' <= *s && *s <= '7')
  ------------------
  |  Branch (1225:21): [True: 9.27k, False: 641]
  |  Branch (1225:32): [True: 9.00k, False: 268]
  |  Branch (1225:45): [True: 4.46k, False: 4.54k]
  ------------------
 1226|  4.46k|                    c = (c<<3) + *s++ - '0';
 1227|  9.91k|            }
 1228|  41.7k|            if (c > 0377) {
  ------------------
  |  Branch (1228:17): [True: 4.33k, False: 37.3k]
  ------------------
 1229|  4.33k|                if (*first_invalid_escape_char == -1) {
  ------------------
  |  Branch (1229:21): [True: 3.12k, False: 1.20k]
  ------------------
 1230|  3.12k|                    *first_invalid_escape_char = c;
 1231|       |                    /* Back up 3 chars, since we've already incremented s. */
 1232|  3.12k|                    *first_invalid_escape_ptr = s - 3;
 1233|  3.12k|                }
 1234|  4.33k|            }
 1235|  41.7k|            *p++ = c;
 1236|  41.7k|            break;
 1237|  30.9k|        }
 1238|    242|        case 'x':
  ------------------
  |  Branch (1238:9): [True: 242, False: 57.3k]
  ------------------
 1239|    242|            if (s+1 < end) {
  ------------------
  |  Branch (1239:17): [True: 238, False: 4]
  ------------------
 1240|    238|                int digit1, digit2;
 1241|    238|                digit1 = _PyLong_DigitValue[Py_CHARMASK(s[0])];
  ------------------
  |  |  163|    238|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1242|    238|                digit2 = _PyLong_DigitValue[Py_CHARMASK(s[1])];
  ------------------
  |  |  163|    238|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1243|    238|                if (digit1 < 16 && digit2 < 16) {
  ------------------
  |  Branch (1243:21): [True: 236, False: 2]
  |  Branch (1243:36): [True: 234, False: 2]
  ------------------
 1244|    234|                    *p++ = (unsigned char)((digit1 << 4) + digit2);
 1245|    234|                    s += 2;
 1246|    234|                    break;
 1247|    234|                }
 1248|    238|            }
 1249|       |            /* invalid hexadecimal digits */
 1250|       |
 1251|      8|            if (!errors || strcmp(errors, "strict") == 0) {
  ------------------
  |  Branch (1251:17): [True: 8, False: 0]
  |  Branch (1251:28): [True: 0, False: 0]
  ------------------
 1252|      8|                PyErr_Format(PyExc_ValueError,
 1253|      8|                             "invalid \\x escape at position %zd",
 1254|      8|                             s - 2 - (end - len));
 1255|      8|                goto failed;
 1256|      8|            }
 1257|      0|            if (strcmp(errors, "replace") == 0) {
  ------------------
  |  Branch (1257:17): [True: 0, False: 0]
  ------------------
 1258|      0|                *p++ = '?';
 1259|      0|            } else if (strcmp(errors, "ignore") == 0)
  ------------------
  |  Branch (1259:24): [True: 0, False: 0]
  ------------------
 1260|      0|                /* do nothing */;
 1261|      0|            else {
 1262|      0|                PyErr_Format(PyExc_ValueError,
 1263|      0|                             "decoding error; unknown "
 1264|      0|                             "error handling code: %.400s",
 1265|      0|                             errors);
 1266|      0|                goto failed;
 1267|      0|            }
 1268|       |            /* skip \x */
 1269|      0|            if (s < end && Py_ISXDIGIT(s[0]))
  ------------------
  |  |   25|      0|#define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
  |  |  ------------------
  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
  |  |  ------------------
  |  |  |  |   14|      0|#define PY_CTF_XDIGIT 0x10
  |  |  ------------------
  |  |  |  Branch (25:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1269:17): [True: 0, False: 0]
  ------------------
 1270|      0|                s++; /* and a hexdigit */
 1271|      0|            break;
 1272|       |
 1273|  5.49k|        default:
  ------------------
  |  Branch (1273:9): [True: 5.49k, False: 52.1k]
  ------------------
 1274|  5.49k|            if (*first_invalid_escape_char == -1) {
  ------------------
  |  Branch (1274:17): [True: 1.51k, False: 3.97k]
  ------------------
 1275|  1.51k|                *first_invalid_escape_char = (unsigned char)s[-1];
 1276|       |                /* Back up one char, since we've already incremented s. */
 1277|  1.51k|                *first_invalid_escape_ptr = s - 1;
 1278|  1.51k|            }
 1279|  5.49k|            *p++ = '\\';
 1280|  5.49k|            s--;
 1281|  57.6k|        }
 1282|  57.6k|    }
 1283|       |
 1284|  6.13k|    return PyBytesWriter_FinishWithPointer(writer, p);
 1285|       |
 1286|      8|  failed:
 1287|      8|    PyBytesWriter_Discard(writer);
 1288|       |    return NULL;
 1289|  6.14k|}
PyBytes_Size:
 1333|  12.3k|{
 1334|  12.3k|    if (!PyBytes_Check(op)) {
  ------------------
  |  |   28|  12.3k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  12.3k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1334:9): [True: 0, False: 12.3k]
  ------------------
 1335|      0|        PyErr_Format(PyExc_TypeError,
 1336|      0|             "expected bytes, %.200s found", Py_TYPE(op)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1337|      0|        return -1;
 1338|      0|    }
 1339|  12.3k|    return Py_SIZE(op);
  ------------------
  |  |  214|  12.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1340|  12.3k|}
PyBytes_AsString:
 1344|  2.89M|{
 1345|  2.89M|    if (!PyBytes_Check(op)) {
  ------------------
  |  |   28|  2.89M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.89M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1345:9): [True: 0, False: 2.89M]
  ------------------
 1346|      0|        PyErr_Format(PyExc_TypeError,
 1347|      0|             "expected bytes, %.200s found", Py_TYPE(op)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|      0|        return NULL;
 1349|      0|    }
 1350|  2.89M|    return ((PyBytesObject *)op)->ob_sval;
 1351|  2.89M|}
PyBytes_AsStringAndSize:
 1357|   132k|{
 1358|   132k|    if (s == NULL) {
  ------------------
  |  Branch (1358:9): [True: 0, False: 132k]
  ------------------
 1359|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1360|      0|        return -1;
 1361|      0|    }
 1362|       |
 1363|   132k|    if (!PyBytes_Check(obj)) {
  ------------------
  |  |   28|   132k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   132k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1363:9): [True: 0, False: 132k]
  ------------------
 1364|      0|        PyErr_Format(PyExc_TypeError,
 1365|      0|             "expected bytes, %.200s found", Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1366|      0|        return -1;
 1367|      0|    }
 1368|       |
 1369|   132k|    *s = PyBytes_AS_STRING(obj);
  ------------------
  |  |   27|   132k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   132k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   132k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1370|   132k|    if (len != NULL)
  ------------------
  |  Branch (1370:9): [True: 132k, False: 10]
  ------------------
 1371|   132k|        *len = PyBytes_GET_SIZE(obj);
  ------------------
  |  |   33|   132k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   132k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   132k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1372|     10|    else if (strlen(*s) != (size_t)PyBytes_GET_SIZE(obj)) {
  ------------------
  |  |   33|     10|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1372:14): [True: 0, False: 10]
  ------------------
 1373|      0|        PyErr_SetString(PyExc_ValueError,
 1374|      0|                        "embedded null byte");
 1375|      0|        return -1;
 1376|      0|    }
 1377|   132k|    return 0;
 1378|   132k|}
PyBytes_Repr:
 1437|    861|{
 1438|    861|    return _Py_bytes_repr(PyBytes_AS_STRING(obj), PyBytes_GET_SIZE(obj),
  ------------------
  |  |   27|    861|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    861|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    861|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return _Py_bytes_repr(PyBytes_AS_STRING(obj), PyBytes_GET_SIZE(obj),
  ------------------
  |  |   33|    861|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    861|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    861|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1439|    861|                          smartquotes, "bytes");
 1440|    861|}
_Py_bytes_repr:
 1445|    861|{
 1446|    861|    Py_ssize_t i;
 1447|    861|    Py_ssize_t newsize, squotes, dquotes;
 1448|    861|    PyObject *v;
 1449|    861|    unsigned char quote;
 1450|    861|    Py_UCS1 *p;
 1451|       |
 1452|       |    /* Compute size of output string */
 1453|    861|    squotes = dquotes = 0;
 1454|    861|    newsize = 3; /* b'' */
 1455|  29.9k|    for (i = 0; i < length; i++) {
  ------------------
  |  Branch (1455:17): [True: 29.1k, False: 861]
  ------------------
 1456|  29.1k|        unsigned char c = data[i];
 1457|  29.1k|        Py_ssize_t incr = 1;
 1458|  29.1k|        switch(c) {
 1459|  1.05k|        case '\'': squotes++; break;
  ------------------
  |  Branch (1459:9): [True: 1.05k, False: 28.0k]
  ------------------
 1460|    275|        case '"':  dquotes++; break;
  ------------------
  |  Branch (1460:9): [True: 275, False: 28.8k]
  ------------------
 1461|    625|        case '\\': case '\t': case '\n': case '\r':
  ------------------
  |  Branch (1461:9): [True: 347, False: 28.7k]
  |  Branch (1461:20): [True: 102, False: 29.0k]
  |  Branch (1461:31): [True: 125, False: 28.9k]
  |  Branch (1461:42): [True: 51, False: 29.0k]
  ------------------
 1462|    625|            incr = 2; break; /* \C */
 1463|  27.1k|        default:
  ------------------
  |  Branch (1463:9): [True: 27.1k, False: 1.95k]
  ------------------
 1464|  27.1k|            if (c < ' ' || c >= 0x7f)
  ------------------
  |  Branch (1464:17): [True: 1.47k, False: 25.6k]
  |  Branch (1464:28): [True: 430, False: 25.2k]
  ------------------
 1465|  1.90k|                incr = 4; /* \xHH */
 1466|  29.1k|        }
 1467|  29.1k|        if (newsize > PY_SSIZE_T_MAX - incr)
  ------------------
  |  |  137|  29.1k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1467:13): [True: 0, False: 29.1k]
  ------------------
 1468|      0|            goto overflow;
 1469|  29.1k|        newsize += incr;
 1470|  29.1k|    }
 1471|    861|    quote = '\'';
 1472|    861|    if (smartquotes && squotes && !dquotes)
  ------------------
  |  Branch (1472:9): [True: 861, False: 0]
  |  Branch (1472:24): [True: 50, False: 811]
  |  Branch (1472:35): [True: 28, False: 22]
  ------------------
 1473|     28|        quote = '"';
 1474|    861|    if (squotes && quote == '\'') {
  ------------------
  |  Branch (1474:9): [True: 50, False: 811]
  |  Branch (1474:20): [True: 22, False: 28]
  ------------------
 1475|     22|        if (newsize > PY_SSIZE_T_MAX - squotes)
  ------------------
  |  |  137|     22|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1475:13): [True: 0, False: 22]
  ------------------
 1476|      0|            goto overflow;
 1477|     22|        newsize += squotes;
 1478|     22|    }
 1479|       |
 1480|    861|    v = PyUnicode_New(newsize, 127);
 1481|    861|    if (v == NULL) {
  ------------------
  |  Branch (1481:9): [True: 0, False: 861]
  ------------------
 1482|      0|        return NULL;
 1483|      0|    }
 1484|    861|    p = PyUnicode_1BYTE_DATA(v);
  ------------------
  |  |  291|    861|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    861|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1485|       |
 1486|    861|    *p++ = 'b', *p++ = quote;
 1487|  29.9k|    for (i = 0; i < length; i++) {
  ------------------
  |  Branch (1487:17): [True: 29.1k, False: 861]
  ------------------
 1488|  29.1k|        unsigned char c = data[i];
 1489|  29.1k|        if (c == quote || c == '\\')
  ------------------
  |  Branch (1489:13): [True: 90, False: 29.0k]
  |  Branch (1489:27): [True: 347, False: 28.6k]
  ------------------
 1490|    437|            *p++ = '\\', *p++ = c;
 1491|  28.6k|        else if (c == '\t')
  ------------------
  |  Branch (1491:18): [True: 102, False: 28.5k]
  ------------------
 1492|    102|            *p++ = '\\', *p++ = 't';
 1493|  28.5k|        else if (c == '\n')
  ------------------
  |  Branch (1493:18): [True: 125, False: 28.4k]
  ------------------
 1494|    125|            *p++ = '\\', *p++ = 'n';
 1495|  28.4k|        else if (c == '\r')
  ------------------
  |  Branch (1495:18): [True: 51, False: 28.3k]
  ------------------
 1496|     51|            *p++ = '\\', *p++ = 'r';
 1497|  28.3k|        else if (c < ' ' || c >= 0x7f) {
  ------------------
  |  Branch (1497:18): [True: 1.47k, False: 26.9k]
  |  Branch (1497:29): [True: 430, False: 26.4k]
  ------------------
 1498|  1.90k|            *p++ = '\\';
 1499|  1.90k|            *p++ = 'x';
 1500|  1.90k|            *p++ = Py_hexdigits[(c & 0xf0) >> 4];
 1501|  1.90k|            *p++ = Py_hexdigits[c & 0xf];
 1502|  1.90k|        }
 1503|  26.4k|        else
 1504|  26.4k|            *p++ = c;
 1505|  29.1k|    }
 1506|    861|    *p++ = quote;
 1507|    861|    assert(_PyUnicode_CheckConsistency(v, 1));
  ------------------
  |  Branch (1507:5): [True: 861, False: 0]
  ------------------
 1508|    861|    return v;
 1509|       |
 1510|      0|  overflow:
 1511|      0|    PyErr_Format(PyExc_OverflowError,
 1512|      0|                 "%s object is too large to make repr", classname);
 1513|       |    return NULL;
 1514|    861|}
_PyBytes_Concat:
 1544|  27.2k|{
 1545|  27.2k|    Py_buffer va, vb;
 1546|  27.2k|    PyObject *result = NULL;
 1547|       |
 1548|  27.2k|    va.len = -1;
 1549|  27.2k|    vb.len = -1;
 1550|  27.2k|    if (PyObject_GetBuffer(a, &va, PyBUF_SIMPLE) != 0 ||
  ------------------
  |  |  108|  27.2k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1550:9): [True: 0, False: 27.2k]
  ------------------
 1551|  27.2k|        PyObject_GetBuffer(b, &vb, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|  27.2k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1551:9): [True: 785, False: 26.4k]
  ------------------
 1552|    785|        PyErr_Format(PyExc_TypeError, "can't concat %.100s to %.100s",
 1553|    785|                     Py_TYPE(b)->tp_name, Py_TYPE(a)->tp_name);
  ------------------
  |  |  213|    785|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    785|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    785|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                   Py_TYPE(b)->tp_name, Py_TYPE(a)->tp_name);
  ------------------
  |  |  213|    785|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    785|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    785|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1554|    785|        goto done;
 1555|    785|    }
 1556|       |
 1557|       |    /* Optimize end cases */
 1558|  26.4k|    if (va.len == 0 && PyBytes_CheckExact(b)) {
  ------------------
  |  |   29|     19|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|     19|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 19, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1558:9): [True: 19, False: 26.4k]
  ------------------
 1559|     19|        result = Py_NewRef(b);
  ------------------
  |  |  550|     19|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1560|     19|        goto done;
 1561|     19|    }
 1562|  26.4k|    if (vb.len == 0 && PyBytes_CheckExact(a)) {
  ------------------
  |  |   29|    499|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|    499|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    499|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    499|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 499, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1562:9): [True: 499, False: 25.9k]
  ------------------
 1563|    499|        result = Py_NewRef(a);
  ------------------
  |  |  550|    499|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    499|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    499|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1564|    499|        goto done;
 1565|    499|    }
 1566|       |
 1567|  25.9k|    if (va.len > PY_SSIZE_T_MAX - vb.len) {
  ------------------
  |  |  137|  25.9k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1567:9): [True: 0, False: 25.9k]
  ------------------
 1568|      0|        PyErr_NoMemory();
 1569|      0|        goto done;
 1570|      0|    }
 1571|       |
 1572|  25.9k|    result = PyBytes_FromStringAndSize(NULL, va.len + vb.len);
 1573|  25.9k|    if (result != NULL) {
  ------------------
  |  Branch (1573:9): [True: 25.9k, False: 0]
  ------------------
 1574|  25.9k|        memcpy(PyBytes_AS_STRING(result), va.buf, va.len);
  ------------------
  |  |   27|  25.9k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  25.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1575|  25.9k|        memcpy(PyBytes_AS_STRING(result) + va.len, vb.buf, vb.len);
  ------------------
  |  |   27|  25.9k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  25.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1576|  25.9k|    }
 1577|       |
 1578|  27.2k|  done:
 1579|  27.2k|    if (va.len != -1)
  ------------------
  |  Branch (1579:9): [True: 27.2k, False: 0]
  ------------------
 1580|  27.2k|        PyBuffer_Release(&va);
 1581|  27.2k|    if (vb.len != -1)
  ------------------
  |  Branch (1581:9): [True: 26.4k, False: 785]
  ------------------
 1582|  26.4k|        PyBuffer_Release(&vb);
 1583|  27.2k|    return result;
 1584|  25.9k|}
_PyBytes_Repeat:
 1588|  5.40k|{
 1589|  5.40k|    PyBytesObject *a = _PyBytes_CAST(self);
  ------------------
  |  |   21|  5.40k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  5.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1589:24): [True: 5.40k, False: 0]
  ------------------
 1590|  5.40k|    if (n < 0)
  ------------------
  |  Branch (1590:9): [True: 3.31k, False: 2.08k]
  ------------------
 1591|  3.31k|        n = 0;
 1592|       |    /* watch out for overflows:  the size can overflow int,
 1593|       |     * and the # of bytes needed can overflow size_t
 1594|       |     */
 1595|  5.40k|    if (n > 0 && Py_SIZE(a) > PY_SSIZE_T_MAX / n) {
  ------------------
  |  |  214|  1.88k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (n > 0 && Py_SIZE(a) > PY_SSIZE_T_MAX / n) {
  ------------------
  |  |  137|  1.88k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1595:9): [True: 1.88k, False: 3.52k]
  |  Branch (1595:18): [True: 0, False: 1.88k]
  ------------------
 1596|      0|        PyErr_SetString(PyExc_OverflowError,
 1597|      0|            "repeated bytes are too long");
 1598|      0|        return NULL;
 1599|      0|    }
 1600|  5.40k|    Py_ssize_t size = Py_SIZE(a) * n;
  ------------------
  |  |  214|  5.40k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1601|  5.40k|    if (size == Py_SIZE(a) && PyBytes_CheckExact(a)) {
  ------------------
  |  |  214|  10.8k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (size == Py_SIZE(a) && PyBytes_CheckExact(a)) {
  ------------------
  |  |   29|  4.71k|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|  4.71k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 4.71k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1601:9): [True: 4.71k, False: 691]
  ------------------
 1602|  4.71k|        return Py_NewRef(a);
  ------------------
  |  |  550|  4.71k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1603|  4.71k|    }
 1604|    691|    size_t nbytes = (size_t)size;
 1605|    691|    if (nbytes + PyBytesObject_SIZE <= nbytes) {
  ------------------
  |  |   30|    691|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|    691|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (1605:9): [True: 0, False: 691]
  ------------------
 1606|      0|        PyErr_SetString(PyExc_OverflowError,
 1607|      0|            "repeated bytes are too long");
 1608|      0|        return NULL;
 1609|      0|    }
 1610|    691|    PyBytesObject *op = PyObject_Malloc(PyBytesObject_SIZE + nbytes);
  ------------------
  |  |   30|    691|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|    691|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
 1611|    691|    if (op == NULL) {
  ------------------
  |  Branch (1611:9): [True: 0, False: 691]
  ------------------
 1612|      0|        return PyErr_NoMemory();
 1613|      0|    }
 1614|    691|    _PyObject_InitVar((PyVarObject*)op, &PyBytes_Type, size);
 1615|    691|    set_ob_shash(op, -1);
 1616|    691|    op->ob_sval[size] = '\0';
 1617|       |
 1618|    691|    _PyBytes_RepeatBuffer(op->ob_sval, size, a->ob_sval, Py_SIZE(a));
  ------------------
  |  |  214|    691|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    691|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    691|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1619|       |
 1620|    691|    return (PyObject *) op;
 1621|    691|}
PyBytes_FromObject:
 3088|  19.4k|{
 3089|  19.4k|    PyObject *it, *result;
 3090|       |
 3091|  19.4k|    if (x == NULL) {
  ------------------
  |  Branch (3091:9): [True: 0, False: 19.4k]
  ------------------
 3092|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3093|      0|        return NULL;
 3094|      0|    }
 3095|       |
 3096|  19.4k|    if (PyBytes_CheckExact(x)) {
  ------------------
  |  |   29|  19.4k|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|  19.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  19.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  19.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 19.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3097|      0|        return Py_NewRef(x);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3098|      0|    }
 3099|       |
 3100|       |    /* Use the modern buffer interface */
 3101|  19.4k|    if (PyObject_CheckBuffer(x))
  ------------------
  |  Branch (3101:9): [True: 19.4k, False: 0]
  ------------------
 3102|  19.4k|        return _PyBytes_FromBuffer(x);
 3103|       |
 3104|      0|    if (PyList_CheckExact(x) || PyTuple_CheckExact(x)) {
  ------------------
  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyList_CheckExact(x) || PyTuple_CheckExact(x)) {
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3105|      0|        int rc;
 3106|      0|        Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(x);
  ------------------
  |  |   77|      0|# define Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(original) {
  ------------------
 3107|      0|        rc = _PyBytes_FromSequence_lock_held(x, &result);
 3108|      0|        Py_END_CRITICAL_SECTION_SEQUENCE_FAST();
  ------------------
  |  |   78|      0|# define Py_END_CRITICAL_SECTION_SEQUENCE_FAST() }
  ------------------
 3109|      0|        if (rc != 0) {
  ------------------
  |  Branch (3109:13): [True: 0, False: 0]
  ------------------
 3110|      0|            return result;
 3111|      0|        }
 3112|      0|    }
 3113|       |
 3114|      0|    if (!PyUnicode_Check(x)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3114:9): [True: 0, False: 0]
  ------------------
 3115|      0|        it = PyObject_GetIter(x);
 3116|      0|        if (it != NULL) {
  ------------------
  |  Branch (3116:13): [True: 0, False: 0]
  ------------------
 3117|      0|            result = _PyBytes_FromIterator(it, x);
 3118|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3119|      0|            return result;
 3120|      0|        }
 3121|      0|        if (!PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (3121:13): [True: 0, False: 0]
  ------------------
 3122|      0|            return NULL;
 3123|      0|        }
 3124|      0|    }
 3125|       |
 3126|      0|    PyErr_Format(PyExc_TypeError,
 3127|      0|                 "cannot convert '%.200s' object to bytes",
 3128|      0|                 Py_TYPE(x)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3129|       |    return NULL;
 3130|      0|}
_PyBytes_IsMutable:
 3333|  14.0M|{
 3334|  14.0M|    assert(PyBytes_Check(self));
  ------------------
  |  Branch (3334:5): [True: 14.0M, False: 0]
  ------------------
 3335|       |    // Do not use _PyObject_IsUniquelyReferenced(): this function is called
 3336|       |    // by bytearray and PyBytesWriter which can be used by multiple threads.
 3337|  14.0M|    assert(Py_REFCNT(self) == 1);
  ------------------
  |  Branch (3337:5): [True: 14.0M, False: 0]
  ------------------
 3338|  14.0M|    assert(!_Py_IsImmortal(self));
  ------------------
  |  Branch (3338:5): [True: 14.0M, False: 0]
  ------------------
 3339|       |
 3340|       |    // Check that the object is not a singleton
 3341|  14.0M|    Py_ssize_t size = PyBytes_GET_SIZE(self);
  ------------------
  |  |   33|  14.0M|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  14.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3342|  14.0M|    if (size == 0) {
  ------------------
  |  Branch (3342:9): [True: 0, False: 14.0M]
  ------------------
 3343|      0|        assert(self != bytes_get_empty());
  ------------------
  |  Branch (3343:9): [True: 0, False: 0]
  ------------------
 3344|      0|    }
 3345|  14.0M|    else if (size == 1) {
  ------------------
  |  Branch (3345:14): [True: 624k, False: 13.3M]
  ------------------
 3346|   624k|        unsigned char ch = PyBytes_AS_STRING(self)[0];
  ------------------
  |  |   27|   624k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   624k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   624k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3347|   624k|        assert(self != (PyObject*)CHARACTER(ch));
  ------------------
  |  Branch (3347:9): [True: 624k, False: 0]
  ------------------
 3348|   624k|    }
 3349|  14.0M|    return 1;
 3350|  14.0M|}
_PyBytes_ResizeKeepOnError:
 3369|   694k|{
 3370|   694k|    PyObject *v = *pv;
 3371|   694k|    PyObject *result;
 3372|       |
 3373|   694k|    if (!PyBytes_Check(v) || newsize < 0) {
  ------------------
  |  |   28|   694k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.38M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3373:9): [True: 0, False: 694k]
  |  Branch (3373:30): [True: 0, False: 694k]
  ------------------
 3374|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3375|      0|        return -1;
 3376|      0|    }
 3377|       |
 3378|   694k|    Py_ssize_t oldsize = PyBytes_GET_SIZE(v);
  ------------------
  |  |   33|   694k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   694k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   694k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3379|   694k|    if (oldsize == newsize) {
  ------------------
  |  Branch (3379:9): [True: 216k, False: 478k]
  ------------------
 3380|       |        /* return early if newsize equals to v->ob_size */
 3381|   216k|        return 0;
 3382|   216k|    }
 3383|       |
 3384|   478k|    if (oldsize == 0) {
  ------------------
  |  Branch (3384:9): [True: 225k, False: 252k]
  ------------------
 3385|   225k|        result = _PyBytes_FromSize(newsize, 0);
 3386|   225k|        if (result == NULL) {
  ------------------
  |  Branch (3386:13): [True: 0, False: 225k]
  ------------------
 3387|      0|            return -1;
 3388|      0|        }
 3389|   225k|        *pv = result;
 3390|   225k|        Py_DECREF(v);
  ------------------
  |  |  430|   225k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   225k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   225k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3391|   225k|        assert(_PyBytes_IsMutable(*pv));
  ------------------
  |  Branch (3391:9): [True: 225k, False: 0]
  ------------------
 3392|   225k|        return 0;
 3393|   225k|    }
 3394|       |
 3395|   252k|    if (newsize == 0) {
  ------------------
  |  Branch (3395:9): [True: 0, False: 252k]
  ------------------
 3396|      0|        *pv = bytes_get_empty();  // cannot fail
 3397|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3398|      0|        return 0;
 3399|      0|    }
 3400|       |
 3401|   252k|    if (!_PyObject_IsUniquelyReferenced(v)) {
  ------------------
  |  Branch (3401:9): [True: 0, False: 252k]
  ------------------
 3402|       |        // Allocate and then copy so we don't get a shared immortal
 3403|       |        // one-character singleton!
 3404|      0|        result = _PyBytes_FromSize(newsize, 0);
 3405|      0|        if (!result) {
  ------------------
  |  Branch (3405:13): [True: 0, False: 0]
  ------------------
 3406|      0|            return -1;
 3407|      0|        }
 3408|       |
 3409|      0|        memcpy(PyBytes_AS_STRING(result), PyBytes_AS_STRING(v),
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      memcpy(PyBytes_AS_STRING(result), PyBytes_AS_STRING(v),
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3410|      0|               Py_MIN(oldsize, newsize));
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3411|      0|        *pv = result;
 3412|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3413|      0|        assert(_PyBytes_IsMutable(*pv));
  ------------------
  |  Branch (3413:9): [True: 0, False: 0]
  ------------------
 3414|      0|        return 0;
 3415|      0|    }
 3416|       |
 3417|       |    // Only mutable bytes can be resized in-place
 3418|   252k|    assert(_PyBytes_IsMutable(v));
  ------------------
  |  Branch (3418:5): [True: 252k, False: 0]
  ------------------
 3419|       |
 3420|   252k|    if ((size_t)newsize > (size_t)PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
  ------------------
  |  |  137|   252k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                  if ((size_t)newsize > (size_t)PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
  ------------------
  |  |   30|   252k|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|   252k|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (3420:9): [True: 0, False: 252k]
  ------------------
 3421|      0|        PyErr_SetString(PyExc_OverflowError,
 3422|      0|                        "byte string is too large");
 3423|      0|        return -1;
 3424|      0|    }
 3425|       |
 3426|       |#ifdef Py_TRACE_REFS
 3427|       |    _Py_ForgetReference(v);
 3428|       |#endif
 3429|   252k|    _PyReftracerTrack(v, PyRefTracer_DESTROY);
  ------------------
  |  |  112|   252k|    do { \
  |  |  113|   252k|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|   252k|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 252k]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|   252k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 252k]
  |  |  ------------------
  ------------------
 3430|       |
 3431|   252k|    result = (PyObject *)PyObject_Realloc(v, PyBytesObject_SIZE + newsize);
  ------------------
  |  |   30|   252k|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|   252k|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
 3432|   252k|    if (result == NULL) {
  ------------------
  |  Branch (3432:9): [True: 0, False: 252k]
  ------------------
 3433|       |#ifdef Py_TRACE_REFS
 3434|       |        _Py_AddToAllObjects(v);
 3435|       |#endif
 3436|      0|        _PyReftracerTrack(v, PyRefTracer_CREATE);
  ------------------
  |  |  112|      0|    do { \
  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3437|       |
 3438|      0|        PyErr_NoMemory();
 3439|      0|        return -1;
 3440|      0|    }
 3441|       |
 3442|   252k|    *pv = result;
 3443|   252k|    v = result;
 3444|   252k|    _Py_NewReferenceNoTotal(v);
 3445|   252k|    PyBytesObject *sv = (PyBytesObject *)v;
 3446|   252k|    Py_SET_SIZE(sv, newsize);
  ------------------
  |  |  216|   252k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   252k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   252k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3447|   252k|    sv->ob_sval[newsize] = '\0';
 3448|   252k|    set_ob_shash(sv, -1);          /* invalidate cached hash value */
 3449|   252k|    assert(_PyBytes_IsMutable(*pv));
  ------------------
  |  Branch (3449:5): [True: 252k, False: 0]
  ------------------
 3450|   252k|    return 0;
 3451|   252k|}
_PyBytes_Resize:
 3456|  13.1k|{
 3457|  13.1k|    int res = _PyBytes_ResizeKeepOnError(pv, newsize);
 3458|  13.1k|    if (res < 0) {
  ------------------
  |  Branch (3458:9): [True: 0, False: 13.1k]
  ------------------
 3459|      0|        PyObject *v = *pv;
 3460|      0|        *pv = NULL;
 3461|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3462|      0|    }
 3463|  13.1k|    return res;
 3464|  13.1k|}
_PyBytes_RepeatBuffer:
 3628|  8.31k|{
 3629|  8.31k|    if (len_dest == 0) {
  ------------------
  |  Branch (3629:9): [True: 331, False: 7.98k]
  ------------------
 3630|    331|        return;
 3631|    331|    }
 3632|  7.98k|    if (len_src == 1) {
  ------------------
  |  Branch (3632:9): [True: 390, False: 7.59k]
  ------------------
 3633|    390|        memset(dest, src[0], len_dest);
 3634|    390|    }
 3635|  7.59k|    else {
 3636|  7.59k|        if (src != dest) {
  ------------------
  |  Branch (3636:13): [True: 7.59k, False: 0]
  ------------------
 3637|  7.59k|            memcpy(dest, src, len_src);
 3638|  7.59k|        }
 3639|  7.59k|        Py_ssize_t copied = len_src;
 3640|  43.5k|        while (copied < len_dest) {
  ------------------
  |  Branch (3640:16): [True: 35.9k, False: 7.59k]
  ------------------
 3641|  35.9k|            Py_ssize_t bytes_to_copy = Py_MIN(copied, len_dest - copied);
  ------------------
  |  |  120|  35.9k|       __extension__ \
  |  |  121|  35.9k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  35.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  35.9k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  35.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  35.9k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 28.4k, False: 7.59k]
  |  |  ------------------
  ------------------
 3642|  35.9k|            memcpy(dest + copied, dest, bytes_to_copy);
 3643|  35.9k|            copied += bytes_to_copy;
 3644|  35.9k|        }
 3645|  7.59k|    }
 3646|  7.98k|}
PyBytesWriter_Create:
 3875|   234k|{
 3876|   234k|    return byteswriter_create(size, 0);
 3877|   234k|}
PyBytesWriter_Discard:
 3888|   393k|{
 3889|   393k|    if (writer == NULL) {
  ------------------
  |  Branch (3889:9): [True: 158k, False: 234k]
  ------------------
 3890|   158k|        return;
 3891|   158k|    }
 3892|       |
 3893|   393k|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (3893:5): [True: 234k, False: 0]
  ------------------
 3894|       |#ifdef Py_DEBUG
 3895|       |    if (writer->obj != NULL) {
 3896|       |        byteswriter_reset_trailing_byte(writer);
 3897|       |    }
 3898|       |#endif
 3899|       |
 3900|   234k|    Py_XDECREF(writer->obj);
  ------------------
  |  |  524|   234k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   234k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   234k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3901|   234k|    _Py_FREELIST_FREE(bytes_writers, writer, PyMem_Free);
  ------------------
  |  |   35|   234k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|   234k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   234k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|   234k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   30|   234k|#  define Py_bytes_writers_MAXFREELIST 1
  |  |  ------------------
  ------------------
 3902|   234k|}
PyBytesWriter_FinishWithSize:
 3907|   185k|{
 3908|   185k|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (3908:5): [True: 185k, False: 0]
  ------------------
 3909|       |
 3910|       |    // Check for negative size here to raise ValueError in all cases, rather
 3911|       |    // than having a different exception depending on the code path. For
 3912|       |    // example, _PyBytes_Resize() raises SystemError on negative size.
 3913|   185k|    if (size < 0) {
  ------------------
  |  Branch (3913:9): [True: 0, False: 185k]
  ------------------
 3914|      0|        PyErr_Format(PyExc_ValueError, "size must be positive");
 3915|      0|        goto error;
 3916|      0|    }
 3917|       |
 3918|   185k|    if (size > writer->size) {
  ------------------
  |  Branch (3918:9): [True: 0, False: 185k]
  ------------------
 3919|      0|        PyErr_SetString(PyExc_ValueError, "size larger than allocated size");
 3920|      0|        goto error;
 3921|      0|    }
 3922|       |
 3923|   185k|    PyObject *result;
 3924|   185k|    if (size == 0) {
  ------------------
  |  Branch (3924:9): [True: 49.6k, False: 135k]
  ------------------
 3925|  49.6k|        result = bytes_get_empty();
 3926|  49.6k|    }
 3927|   135k|    else if (writer->obj != NULL) {
  ------------------
  |  Branch (3927:14): [True: 14.1k, False: 121k]
  ------------------
 3928|       |        // Truncate the bytes/bytearray object if needed
 3929|       |#ifdef Py_DEBUG
 3930|       |        byteswriter_reset_trailing_byte(writer);
 3931|       |#endif
 3932|       |
 3933|  14.1k|        if (writer->use_bytearray) {
  ------------------
  |  Branch (3933:13): [True: 0, False: 14.1k]
  ------------------
 3934|      0|            if (size != PyByteArray_GET_SIZE(writer->obj)) {
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3934:17): [True: 0, False: 0]
  ------------------
 3935|      0|                if (PyByteArray_Resize(writer->obj, size)) {
  ------------------
  |  Branch (3935:21): [True: 0, False: 0]
  ------------------
 3936|      0|                    goto error;
 3937|      0|                }
 3938|      0|            }
 3939|      0|        }
 3940|  14.1k|        else {
 3941|  14.1k|            if (size == 1) {
  ------------------
  |  Branch (3941:17): [True: 0, False: 14.1k]
  ------------------
 3942|       |                // Get the single byte singleton
 3943|      0|                unsigned char ch = PyBytes_AS_STRING(writer->obj)[0];
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3944|      0|                PyObject *op = (PyObject*)CHARACTER(ch);
  ------------------
  |  |   40|      0|     ((PyBytesObject *)&(CHARACTERS[ch]))
  |  |  ------------------
  |  |  |  |   38|      0|#define CHARACTERS _Py_SINGLETON(bytes_characters)
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3945|      0|                assert(_Py_IsImmortal(op));
  ------------------
  |  Branch (3945:17): [True: 0, False: 0]
  ------------------
 3946|      0|                Py_SETREF(writer->obj, op);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3947|      0|            }
 3948|  14.1k|            else if (size != PyBytes_GET_SIZE(writer->obj)) {
  ------------------
  |  |   33|  14.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3948:22): [True: 13.1k, False: 1.00k]
  ------------------
 3949|  13.1k|                if (_PyBytes_Resize(&writer->obj, size)) {
  ------------------
  |  Branch (3949:21): [True: 0, False: 13.1k]
  ------------------
 3950|      0|                    goto error;
 3951|      0|                }
 3952|  13.1k|            }
 3953|  14.1k|        }
 3954|       |
 3955|  14.1k|        result = writer->obj;
 3956|  14.1k|        writer->obj = NULL;
 3957|  14.1k|    }
 3958|   121k|    else {
 3959|       |        // Create an object from the small buffer
 3960|   121k|        if (writer->use_bytearray) {
  ------------------
  |  Branch (3960:13): [True: 0, False: 121k]
  ------------------
 3961|      0|            result = PyByteArray_FromStringAndSize(writer->small_buffer, size);
 3962|      0|        }
 3963|   121k|        else {
 3964|       |            // The function returns single byte singleton if size equals 1
 3965|   121k|            result = PyBytes_FromStringAndSize(writer->small_buffer, size);
 3966|   121k|        }
 3967|   121k|    }
 3968|       |
 3969|       |#ifdef Py_DEBUG
 3970|       |    // Reset the writer, so byteswriter_check_consistency() doesn't fail
 3971|       |    // in PyBytesWriter_Discard().
 3972|       |    writer->size = 0;
 3973|       |    byteswriter_write_canary_byte(writer);
 3974|       |#endif
 3975|       |
 3976|   185k|    PyBytesWriter_Discard(writer);
 3977|   185k|    return result;
 3978|       |
 3979|      0|error:
 3980|      0|    PyBytesWriter_Discard(writer);
 3981|       |    return NULL;
 3982|   185k|}
PyBytesWriter_Finish:
 3986|  20.3k|{
 3987|  20.3k|    return PyBytesWriter_FinishWithSize(writer, writer->size);
 3988|  20.3k|}
PyBytesWriter_FinishWithPointer:
 3993|  6.32k|{
 3994|  6.32k|    Py_ssize_t size = (char*)buf - byteswriter_data(writer);
 3995|  6.32k|    return PyBytesWriter_FinishWithSize(writer, size);
 3996|  6.32k|}
PyBytesWriter_GetData:
 4001|  11.2M|{
 4002|  11.2M|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (4002:5): [True: 11.2M, False: 0]
  ------------------
 4003|       |
 4004|  11.2M|    return byteswriter_data(writer);
 4005|  11.2M|}
PyBytesWriter_GetSize:
 4010|  5.27M|{
 4011|  5.27M|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (4011:5): [True: 5.27M, False: 0]
  ------------------
 4012|       |
 4013|  5.27M|    return _PyBytesWriter_GetSize(writer);
 4014|  5.27M|}
PyBytesWriter_Resize:
 4019|  87.8k|{
 4020|  87.8k|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (4020:5): [True: 87.8k, False: 0]
  ------------------
 4021|       |
 4022|  87.8k|    if (new_size < 0) {
  ------------------
  |  Branch (4022:9): [True: 0, False: 87.8k]
  ------------------
 4023|      0|        PyErr_SetString(PyExc_ValueError, "size must be >= 0");
 4024|      0|        return -1;
 4025|      0|    }
 4026|  87.8k|    if (writer->size < new_size) {
  ------------------
  |  Branch (4026:9): [True: 87.7k, False: 20]
  ------------------
 4027|  87.7k|        if (byteswriter_resize(writer, new_size, 1) < 0) {
  ------------------
  |  Branch (4027:13): [True: 0, False: 87.7k]
  ------------------
 4028|      0|            return -1;
 4029|      0|        }
 4030|  87.7k|    }
 4031|     20|    else {
 4032|       |        // The buffer is already large enough. Never shrink the buffer.
 4033|     20|    }
 4034|  87.8k|    writer->size = new_size;
 4035|       |#ifdef Py_DEBUG
 4036|       |    byteswriter_write_canary_byte(writer);
 4037|       |#endif
 4038|  87.8k|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (4038:5): [True: 87.8k, False: 0]
  ------------------
 4039|  87.8k|    return 0;
 4040|  87.8k|}
bytesobject.c:bytes_get_empty:
   46|   519k|{
   47|   519k|    PyObject *empty = &EMPTY->ob_base.ob_base;
  ------------------
  |  |   41|   519k|#define EMPTY (&_Py_SINGLETON(bytes_empty))
  |  |  ------------------
  |  |  |  |   18|   519k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   519k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|   519k|    assert(_Py_IsImmortal(empty));
  ------------------
  |  Branch (48:5): [True: 519k, False: 0]
  ------------------
   49|   519k|    return empty;
   50|   519k|}
bytesobject.c:_PyBytes_FromSize:
  104|  2.00M|{
  105|  2.00M|    PyBytesObject *op;
  106|  2.00M|    assert(size >= 0);
  ------------------
  |  Branch (106:5): [True: 2.00M, False: 0]
  ------------------
  107|       |
  108|  2.00M|    if (size == 0) {
  ------------------
  |  Branch (108:9): [True: 0, False: 2.00M]
  ------------------
  109|      0|        return bytes_get_empty();
  110|      0|    }
  111|       |
  112|  2.00M|    if ((size_t)size > (size_t)PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
  ------------------
  |  |  137|  2.00M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                  if ((size_t)size > (size_t)PY_SSIZE_T_MAX - PyBytesObject_SIZE) {
  ------------------
  |  |   30|  2.00M|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|  2.00M|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  |  Branch (112:9): [True: 0, False: 2.00M]
  ------------------
  113|      0|        PyErr_SetString(PyExc_OverflowError,
  114|      0|                        "byte string is too large");
  115|      0|        return NULL;
  116|      0|    }
  117|       |
  118|       |    /* Inline PyObject_NewVar */
  119|  2.00M|    if (use_calloc)
  ------------------
  |  Branch (119:9): [True: 0, False: 2.00M]
  ------------------
  120|      0|        op = (PyBytesObject *)PyObject_Calloc(1, PyBytesObject_SIZE + size);
  ------------------
  |  |   30|      0|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|      0|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  121|  2.00M|    else
  122|  2.00M|        op = (PyBytesObject *)PyObject_Malloc(PyBytesObject_SIZE + size);
  ------------------
  |  |   30|  2.00M|#define PyBytesObject_SIZE _PyBytesObject_SIZE
  |  |  ------------------
  |  |  |  |   76|  2.00M|#define _PyBytesObject_SIZE (offsetof(PyBytesObject, ob_sval) + 1)
  |  |  ------------------
  ------------------
  123|  2.00M|    if (op == NULL) {
  ------------------
  |  Branch (123:9): [True: 0, False: 2.00M]
  ------------------
  124|      0|        return PyErr_NoMemory();
  125|      0|    }
  126|  2.00M|    _PyObject_InitVar((PyVarObject*)op, &PyBytes_Type, size);
  127|  2.00M|    set_ob_shash(op, -1);
  128|  2.00M|    if (!use_calloc) {
  ------------------
  |  Branch (128:9): [True: 2.00M, False: 0]
  ------------------
  129|  2.00M|        op->ob_sval[size] = '\0';
  130|  2.00M|    }
  131|  2.00M|    return (PyObject *) op;
  132|  2.00M|}
bytesobject.c:set_ob_shash:
   55|  2.92M|{
   56|  2.92M|_Py_COMP_DIAG_PUSH
   57|  2.92M|_Py_COMP_DIAG_IGNORE_DEPR_DECLS
   58|       |#ifdef Py_GIL_DISABLED
   59|       |    _Py_atomic_store_ssize_relaxed(&a->ob_shash, hash);
   60|       |#else
   61|  2.92M|    a->ob_shash = hash;
   62|  2.92M|#endif
   63|  2.92M|_Py_COMP_DIAG_POP
   64|  2.92M|}
bytesobject.c:_PyBytes_FromBuffer:
 2965|  19.4k|{
 2966|  19.4k|    Py_buffer view;
 2967|  19.4k|    if (PyObject_GetBuffer(x, &view, PyBUF_FULL_RO) < 0)
  ------------------
  |  |  134|  19.4k|#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  122|  19.4k|#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  19.4k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  19.4k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  116|  19.4k|#define PyBUF_FORMAT 0x0004
  |  |  ------------------
  ------------------
  |  Branch (2967:9): [True: 0, False: 19.4k]
  ------------------
 2968|      0|        return NULL;
 2969|       |
 2970|  19.4k|    PyBytesWriter *writer = PyBytesWriter_Create(view.len);
 2971|  19.4k|    if (writer == NULL) {
  ------------------
  |  Branch (2971:9): [True: 0, False: 19.4k]
  ------------------
 2972|      0|        goto fail;
 2973|      0|    }
 2974|       |
 2975|  19.4k|    if (PyBuffer_ToContiguous(PyBytesWriter_GetData(writer),
  ------------------
  |  Branch (2975:9): [True: 0, False: 19.4k]
  ------------------
 2976|  19.4k|                              &view, view.len, 'C') < 0) {
 2977|      0|        goto fail;
 2978|      0|    }
 2979|       |
 2980|  19.4k|    PyBuffer_Release(&view);
 2981|  19.4k|    return PyBytesWriter_Finish(writer);
 2982|       |
 2983|      0|fail:
 2984|      0|    PyBytesWriter_Discard(writer);
 2985|      0|    PyBuffer_Release(&view);
 2986|       |    return NULL;
 2987|  19.4k|}
bytesobject.c:byteswriter_allocated:
 3667|   321k|{
 3668|   321k|    if (writer->obj == NULL) {
  ------------------
  |  Branch (3668:9): [True: 300k, False: 21.6k]
  ------------------
 3669|       |        // Reserve the last byte for the canary byte
 3670|   300k|        return sizeof(writer->small_buffer) - 1;
 3671|   300k|    }
 3672|  21.6k|    else if (writer->use_bytearray) {
  ------------------
  |  Branch (3672:14): [True: 0, False: 21.6k]
  ------------------
 3673|      0|        return PyByteArray_GET_SIZE(writer->obj);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3674|      0|    }
 3675|  21.6k|    else {
 3676|  21.6k|        return PyBytes_GET_SIZE(writer->obj);
  ------------------
  |  |   33|  21.6k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  21.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3677|  21.6k|    }
 3678|   321k|}
bytesobject.c:bytes_repr:
 1518|    861|{
 1519|    861|    return PyBytes_Repr(op, 1);
 1520|    861|}
bytesobject.c:bytes_mod:
 2849|     90|{
 2850|     90|    if (!PyBytes_Check(self)) {
  ------------------
  |  |   28|     90|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     90|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2850:9): [True: 90, False: 0]
  ------------------
 2851|     90|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|     90|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|     90|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 2852|     90|    }
 2853|      0|    return _PyBytes_FormatEx(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return _PyBytes_FormatEx(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2854|      0|                             arg, 0);
 2855|     90|}
bytesobject.c:bytes_length:
 1536|   481k|{
 1537|   481k|    PyBytesObject *a = _PyBytes_CAST(self);
  ------------------
  |  |   21|   481k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   481k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1537:24): [True: 481k, False: 0]
  ------------------
 1538|   481k|    return Py_SIZE(a);
  ------------------
  |  |  214|   481k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   481k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   481k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1539|   481k|}
bytesobject.c:bytes_contains:
 1625|  1.33k|{
 1626|  1.33k|    return _Py_bytes_contains(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), arg);
  ------------------
  |  |   27|  1.33k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.33k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return _Py_bytes_contains(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), arg);
  ------------------
  |  |   33|  1.33k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  1.33k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1627|  1.33k|}
bytesobject.c:bytes_subscript:
 1735|   651k|{
 1736|   651k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|   651k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   651k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1736:27): [True: 651k, False: 0]
  ------------------
 1737|   651k|    if (_PyIndex_Check(item)) {
  ------------------
  |  Branch (1737:9): [True: 622k, False: 29.1k]
  ------------------
 1738|   622k|        Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
 1739|   622k|        if (i == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1739:13): [True: 6, False: 622k]
  |  Branch (1739:24): [True: 6, False: 0]
  ------------------
 1740|      6|            return NULL;
 1741|   622k|        if (i < 0)
  ------------------
  |  Branch (1741:13): [True: 30, False: 622k]
  ------------------
 1742|     30|            i += PyBytes_GET_SIZE(self);
  ------------------
  |  |   33|     30|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|     30|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     30|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1743|   622k|        if (i < 0 || i >= PyBytes_GET_SIZE(self)) {
  ------------------
  |  |   33|   622k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1743:13): [True: 30, False: 622k]
  |  Branch (1743:22): [True: 83, False: 622k]
  ------------------
 1744|    113|            PyErr_SetString(PyExc_IndexError,
 1745|    113|                            "index out of range");
 1746|    113|            return NULL;
 1747|    113|        }
 1748|   622k|        return _PyLong_FromUnsignedChar((unsigned char)self->ob_sval[i]);
 1749|   622k|    }
 1750|  29.1k|    else if (PySlice_Check(item)) {
  ------------------
  |  |   22|  29.1k|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|  29.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  29.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  29.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 29.1k, False: 55]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1751|  29.1k|        Py_ssize_t start, stop, step, slicelength, i;
 1752|  29.1k|        size_t cur;
 1753|  29.1k|        const char* source_buf;
 1754|  29.1k|        char* result_buf;
 1755|  29.1k|        PyObject* result;
 1756|       |
 1757|  29.1k|        if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (1757:13): [True: 947, False: 28.1k]
  ------------------
 1758|    947|            return NULL;
 1759|    947|        }
 1760|  28.1k|        slicelength = PySlice_AdjustIndices(PyBytes_GET_SIZE(self), &start,
  ------------------
  |  |   33|  28.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  28.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|  28.1k|                                            &stop, step);
 1762|       |
 1763|  28.1k|        if (slicelength <= 0) {
  ------------------
  |  Branch (1763:13): [True: 622, False: 27.5k]
  ------------------
 1764|    622|            return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
  ------------------
  |  |  598|    622|#define Py_CONSTANT_EMPTY_BYTES 8
  ------------------
 1765|    622|        }
 1766|  27.5k|        else if (start == 0 && step == 1 &&
  ------------------
  |  Branch (1766:18): [True: 4.54k, False: 23.0k]
  |  Branch (1766:32): [True: 4.42k, False: 117]
  ------------------
 1767|  4.42k|                 slicelength == PyBytes_GET_SIZE(self) &&
  ------------------
  |  |   33|  31.9k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  4.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1767:18): [True: 197, False: 4.22k]
  ------------------
 1768|    197|                 PyBytes_CheckExact(self)) {
  ------------------
  |  |   29|    197|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|    197|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    197|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    197|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 197, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1769|    197|            return Py_NewRef(self);
  ------------------
  |  |  550|    197|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    197|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    197|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1770|    197|        }
 1771|  27.3k|        else if (step == 1) {
  ------------------
  |  Branch (1771:18): [True: 27.2k, False: 117]
  ------------------
 1772|  27.2k|            return PyBytes_FromStringAndSize(
 1773|  27.2k|                PyBytes_AS_STRING(self) + start,
  ------------------
  |  |   27|  27.2k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1774|  27.2k|                slicelength);
 1775|  27.2k|        }
 1776|    117|        else {
 1777|    117|            source_buf = PyBytes_AS_STRING(self);
  ------------------
  |  |   27|    117|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1778|    117|            result = PyBytes_FromStringAndSize(NULL, slicelength);
 1779|    117|            if (result == NULL)
  ------------------
  |  Branch (1779:17): [True: 0, False: 117]
  ------------------
 1780|      0|                return NULL;
 1781|       |
 1782|    117|            result_buf = PyBytes_AS_STRING(result);
  ------------------
  |  |   27|    117|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1783|    317|            for (cur = start, i = 0; i < slicelength;
  ------------------
  |  Branch (1783:38): [True: 200, False: 117]
  ------------------
 1784|    200|                 cur += step, i++) {
 1785|    200|                result_buf[i] = source_buf[cur];
 1786|    200|            }
 1787|       |
 1788|    117|            return result;
 1789|    117|        }
 1790|  28.1k|    }
 1791|     55|    else {
 1792|     55|        PyErr_Format(PyExc_TypeError,
 1793|     55|                     "byte indices must be integers or slices, not %.200s",
 1794|     55|                     Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|     55|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1795|       |        return NULL;
 1796|     55|    }
 1797|   651k|}
bytesobject.c:bytes_hash:
 1722|  1.62M|{
 1723|  1.62M|    PyBytesObject *a = _PyBytes_CAST(self);
  ------------------
  |  |   21|  1.62M|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  1.62M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1723:24): [True: 1.62M, False: 0]
  ------------------
 1724|      0|    Py_hash_t hash = get_ob_shash(a);
 1725|  1.62M|    if (hash == -1) {
  ------------------
  |  Branch (1725:9): [True: 669k, False: 954k]
  ------------------
 1726|       |        /* Can't fail */
 1727|   669k|        hash = Py_HashBuffer(a->ob_sval, Py_SIZE(a));
  ------------------
  |  |  214|   669k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   669k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   669k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1728|   669k|        set_ob_shash(a, hash);
 1729|   669k|    }
 1730|  1.62M|    return hash;
 1731|  1.62M|}
bytesobject.c:get_ob_shash:
   68|  1.62M|{
   69|  1.62M|_Py_COMP_DIAG_PUSH
   70|  1.62M|_Py_COMP_DIAG_IGNORE_DEPR_DECLS
   71|       |#ifdef Py_GIL_DISABLED
   72|       |    return _Py_atomic_load_ssize_relaxed(&a->ob_shash);
   73|       |#else
   74|  1.62M|    return a->ob_shash;
   75|  1.62M|#endif
   76|  1.62M|_Py_COMP_DIAG_POP
   77|  1.62M|}
bytesobject.c:bytes_buffer_getbuffer:
 1801|   327k|{
 1802|   327k|    PyBytesObject *self = _PyBytes_CAST(op);
  ------------------
  |  |   21|   327k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1802:27): [True: 327k, False: 0]
  ------------------
 1803|   327k|    return PyBuffer_FillInfo(view, (PyObject*)self, (void *)self->ob_sval, Py_SIZE(self),
  ------------------
  |  |  214|   327k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1804|   327k|                             1, flags);
 1805|   327k|}
bytesobject.c:bytes_richcompare:
 1659|  59.6k|{
 1660|       |    /* Make sure both arguments are strings. */
 1661|  59.6k|    if (!(PyBytes_Check(aa) && PyBytes_Check(bb))) {
  ------------------
  |  |   28|  59.6k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   119k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 59.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!(PyBytes_Check(aa) && PyBytes_Check(bb))) {
  ------------------
  |  |   28|  59.6k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  59.6k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 59.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1662|      0|        if (_Py_GetConfig()->bytes_warning && (op == Py_EQ || op == Py_NE)) {
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
                      if (_Py_GetConfig()->bytes_warning && (op == Py_EQ || op == Py_NE)) {
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (1662:13): [True: 0, False: 0]
  |  Branch (1662:48): [True: 0, False: 0]
  |  Branch (1662:63): [True: 0, False: 0]
  ------------------
 1663|      0|            if (PyUnicode_Check(aa) || PyUnicode_Check(bb)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PyUnicode_Check(aa) || PyUnicode_Check(bb)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1664|      0|                if (PyErr_WarnEx(PyExc_BytesWarning,
  ------------------
  |  Branch (1664:21): [True: 0, False: 0]
  ------------------
 1665|      0|                                 "Comparison between bytes and string", 1))
 1666|      0|                    return NULL;
 1667|      0|            }
 1668|      0|            if (PyLong_Check(aa) || PyLong_Check(bb)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PyLong_Check(aa) || PyLong_Check(bb)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1669|      0|                if (PyErr_WarnEx(PyExc_BytesWarning,
  ------------------
  |  Branch (1669:21): [True: 0, False: 0]
  ------------------
 1670|      0|                                 "Comparison between bytes and int", 1))
 1671|      0|                    return NULL;
 1672|      0|            }
 1673|      0|        }
 1674|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 1675|      0|    }
 1676|       |
 1677|  59.6k|    PyBytesObject *a = _PyBytes_CAST(aa);
  ------------------
  |  |   21|  59.6k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  59.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1677:24): [True: 59.6k, False: 0]
  ------------------
 1678|  59.6k|    PyBytesObject *b = _PyBytes_CAST(bb);
  ------------------
  |  |   21|  59.6k|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|  59.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1678:24): [True: 59.6k, False: 0]
  ------------------
 1679|  59.6k|    if (a == b) {
  ------------------
  |  Branch (1679:9): [True: 0, False: 59.6k]
  ------------------
 1680|      0|        switch (op) {
 1681|      0|        case Py_EQ:
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
  |  Branch (1681:9): [True: 0, False: 0]
  ------------------
 1682|      0|        case Py_LE:
  ------------------
  |  |  653|      0|#define Py_LE 1
  ------------------
  |  Branch (1682:9): [True: 0, False: 0]
  ------------------
 1683|      0|        case Py_GE:
  ------------------
  |  |  657|      0|#define Py_GE 5
  ------------------
  |  Branch (1683:9): [True: 0, False: 0]
  ------------------
 1684|       |            /* a byte string is equal to itself */
 1685|      0|            Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1686|      0|        case Py_NE:
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (1686:9): [True: 0, False: 0]
  ------------------
 1687|      0|        case Py_LT:
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  |  Branch (1687:9): [True: 0, False: 0]
  ------------------
 1688|      0|        case Py_GT:
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  |  Branch (1688:9): [True: 0, False: 0]
  ------------------
 1689|      0|            Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1690|      0|        default:
  ------------------
  |  Branch (1690:9): [True: 0, False: 0]
  ------------------
 1691|      0|            PyErr_BadArgument();
 1692|      0|            return NULL;
 1693|      0|        }
 1694|      0|    }
 1695|  59.6k|    else if (op == Py_EQ || op == Py_NE) {
  ------------------
  |  |  654|   119k|#define Py_EQ 2
  ------------------
                  else if (op == Py_EQ || op == Py_NE) {
  ------------------
  |  |  655|     93|#define Py_NE 3
  ------------------
  |  Branch (1695:14): [True: 59.5k, False: 93]
  |  Branch (1695:29): [True: 93, False: 0]
  ------------------
 1696|  59.6k|        int eq = bytes_compare_eq(a, b);
 1697|  59.6k|        eq ^= (op == Py_NE);
  ------------------
  |  |  655|  59.6k|#define Py_NE 3
  ------------------
 1698|  59.6k|        return PyBool_FromLong(eq);
 1699|  59.6k|    }
 1700|      0|    else {
 1701|      0|        Py_ssize_t len_a = Py_SIZE(a);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1702|      0|        Py_ssize_t len_b = Py_SIZE(b);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1703|      0|        Py_ssize_t min_len = Py_MIN(len_a, len_b);
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1704|      0|        int c;
 1705|      0|        if (min_len > 0) {
  ------------------
  |  Branch (1705:13): [True: 0, False: 0]
  ------------------
 1706|      0|            c = Py_CHARMASK(*a->ob_sval) - Py_CHARMASK(*b->ob_sval);
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
                          c = Py_CHARMASK(*a->ob_sval) - Py_CHARMASK(*b->ob_sval);
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 1707|      0|            if (c == 0)
  ------------------
  |  Branch (1707:17): [True: 0, False: 0]
  ------------------
 1708|      0|                c = memcmp(a->ob_sval, b->ob_sval, min_len);
 1709|      0|        }
 1710|      0|        else {
 1711|      0|            c = 0;
 1712|      0|        }
 1713|      0|        if (c != 0) {
  ------------------
  |  Branch (1713:13): [True: 0, False: 0]
  ------------------
 1714|      0|            Py_RETURN_RICHCOMPARE(c, 0, op);
  ------------------
  |  |  674|      0|    do {                                                                    \
  |  |  675|      0|        switch (op) {                                                       \
  |  |  676|      0|        case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  654|      0|#define Py_EQ 2
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (676:9): [True: 0, False: 0]
  |  |  |  Branch (676:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  677|      0|        case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  655|      0|#define Py_NE 3
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (677:9): [True: 0, False: 0]
  |  |  |  Branch (677:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  678|      0|        case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  652|      0|#define Py_LT 0
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (678:9): [True: 0, False: 0]
  |  |  |  Branch (678:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  679|      0|        case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  656|      0|#define Py_GT 4
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (679:9): [True: 0, False: 0]
  |  |  |  Branch (679:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  680|      0|        case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  653|      0|#define Py_LE 1
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (680:9): [True: 0, False: 0]
  |  |  |  Branch (680:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  681|      0|        case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  657|      0|#define Py_GE 5
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (681:9): [True: 0, False: 0]
  |  |  |  Branch (681:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  682|      0|        default:                                                            \
  |  |  ------------------
  |  |  |  Branch (682:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  683|      0|            Py_UNREACHABLE();                                               \
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |  684|      0|        }                                                                   \
  |  |  685|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (685:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1715|      0|        }
 1716|      0|        Py_RETURN_RICHCOMPARE(len_a, len_b, op);
  ------------------
  |  |  674|      0|    do {                                                                    \
  |  |  675|      0|        switch (op) {                                                       \
  |  |  676|      0|        case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  654|      0|#define Py_EQ 2
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (676:9): [True: 0, False: 0]
  |  |  |  Branch (676:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  677|      0|        case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  655|      0|#define Py_NE 3
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (677:9): [True: 0, False: 0]
  |  |  |  Branch (677:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  678|      0|        case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  652|      0|#define Py_LT 0
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (678:9): [True: 0, False: 0]
  |  |  |  Branch (678:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  679|      0|        case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  656|      0|#define Py_GT 4
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (679:9): [True: 0, False: 0]
  |  |  |  Branch (679:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  680|      0|        case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  653|      0|#define Py_LE 1
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (680:9): [True: 0, False: 0]
  |  |  |  Branch (680:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  681|      0|        case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  657|      0|#define Py_GE 5
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (681:9): [True: 0, False: 0]
  |  |  |  Branch (681:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  682|      0|        default:                                                            \
  |  |  ------------------
  |  |  |  Branch (682:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  683|      0|            Py_UNREACHABLE();                                               \
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |  684|      0|        }                                                                   \
  |  |  685|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (685:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1717|      0|    }
 1718|  59.6k|}
bytesobject.c:bytes_compare_eq:
 1642|  59.6k|{
 1643|  59.6k|    int cmp;
 1644|  59.6k|    Py_ssize_t len;
 1645|       |
 1646|  59.6k|    len = Py_SIZE(a);
  ------------------
  |  |  214|  59.6k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  59.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  59.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1647|  59.6k|    if (Py_SIZE(b) != len)
  ------------------
  |  |  214|  59.6k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  59.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  59.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1647:9): [True: 0, False: 59.6k]
  ------------------
 1648|      0|        return 0;
 1649|       |
 1650|  59.6k|    if (a->ob_sval[0] != b->ob_sval[0])
  ------------------
  |  Branch (1650:9): [True: 0, False: 59.6k]
  ------------------
 1651|      0|        return 0;
 1652|       |
 1653|  59.6k|    cmp = memcmp(a->ob_sval, b->ob_sval, len);
 1654|  59.6k|    return (cmp == 0);
 1655|  59.6k|}
bytesobject.c:bytes_decode_impl:
 2584|  18.2k|{
 2585|  18.2k|    return PyUnicode_FromEncodedObject((PyObject*)self, encoding, errors);
 2586|  18.2k|}
bytesobject.c:bytes_replace_impl:
 2429|     10|{
 2430|     10|    return stringlib_replace((PyObject *)self,
 2431|     10|                             (const char *)old->buf, old->len,
 2432|     10|                             (const char *)new->buf, new->len, count);
 2433|     10|}
bytesobject.c:bytes_rfind_impl:
 2074|  18.1k|{
 2075|  18.1k|    return _Py_bytes_rfind(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
  ------------------
  |  |   27|  18.1k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return _Py_bytes_rfind(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
  ------------------
  |  |   33|  18.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2076|  18.1k|                           sub, start, end);
 2077|  18.1k|}
bytesobject.c:bytes_split_impl:
 1870|  1.28k|{
 1871|  1.28k|    Py_ssize_t len = PyBytes_GET_SIZE(self), n;
  ------------------
  |  |   33|  1.28k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  1.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1872|  1.28k|    const char *s = PyBytes_AS_STRING(self), *sub;
  ------------------
  |  |   27|  1.28k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1873|  1.28k|    Py_buffer vsub;
 1874|  1.28k|    PyObject *list;
 1875|       |
 1876|  1.28k|    if (maxsplit < 0)
  ------------------
  |  Branch (1876:9): [True: 1.28k, False: 0]
  ------------------
 1877|  1.28k|        maxsplit = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  1.28k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1878|  1.28k|    if (sep == Py_None)
  ------------------
  |  |  616|  1.28k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1878:9): [True: 0, False: 1.28k]
  ------------------
 1879|      0|        return stringlib_split_whitespace((PyObject*) self, s, len, maxsplit);
 1880|  1.28k|    if (PyObject_GetBuffer(sep, &vsub, PyBUF_SIMPLE) != 0)
  ------------------
  |  |  108|  1.28k|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1880:9): [True: 0, False: 1.28k]
  ------------------
 1881|      0|        return NULL;
 1882|  1.28k|    sub = vsub.buf;
 1883|  1.28k|    n = vsub.len;
 1884|       |
 1885|  1.28k|    list = stringlib_split((PyObject*) self, s, len, sub, n, maxsplit);
 1886|  1.28k|    PyBuffer_Release(&vsub);
 1887|  1.28k|    return list;
 1888|  1.28k|}
bytesobject.c:bytes_startswith_impl:
 2534|   129k|{
 2535|   129k|    return _Py_bytes_startswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
  ------------------
  |  |   27|   129k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return _Py_bytes_startswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self),
  ------------------
  |  |   33|   129k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2536|   129k|                                subobj, start, end);
 2537|   129k|}
bytesobject.c:bytes_new_impl:
 2881|  19.4k|{
 2882|  19.4k|    PyObject *bytes;
 2883|  19.4k|    PyObject *func;
 2884|  19.4k|    Py_ssize_t size;
 2885|       |
 2886|  19.4k|    if (x == NULL) {
  ------------------
  |  Branch (2886:9): [True: 0, False: 19.4k]
  ------------------
 2887|      0|        if (encoding != NULL || errors != NULL) {
  ------------------
  |  Branch (2887:13): [True: 0, False: 0]
  |  Branch (2887:33): [True: 0, False: 0]
  ------------------
 2888|      0|            PyErr_SetString(PyExc_TypeError,
 2889|      0|                            encoding != NULL ?
  ------------------
  |  Branch (2889:29): [True: 0, False: 0]
  ------------------
 2890|      0|                            "encoding without a string argument" :
 2891|      0|                            "errors without a string argument");
 2892|      0|            return NULL;
 2893|      0|        }
 2894|      0|        bytes = Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
  ------------------
  |  |  598|      0|#define Py_CONSTANT_EMPTY_BYTES 8
  ------------------
 2895|      0|    }
 2896|  19.4k|    else if (encoding != NULL) {
  ------------------
  |  Branch (2896:14): [True: 0, False: 19.4k]
  ------------------
 2897|       |        /* Encode via the codec registry */
 2898|      0|        if (!PyUnicode_Check(x)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2898:13): [True: 0, False: 0]
  ------------------
 2899|      0|            PyErr_SetString(PyExc_TypeError,
 2900|      0|                            "encoding without a string argument");
 2901|      0|            return NULL;
 2902|      0|        }
 2903|      0|        bytes = PyUnicode_AsEncodedString(x, encoding, errors);
 2904|      0|    }
 2905|  19.4k|    else if (errors != NULL) {
  ------------------
  |  Branch (2905:14): [True: 0, False: 19.4k]
  ------------------
 2906|      0|        PyErr_SetString(PyExc_TypeError,
 2907|      0|                        PyUnicode_Check(x) ?
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2908|      0|                        "string argument without an encoding" :
 2909|      0|                        "errors without a string argument");
 2910|      0|        return NULL;
 2911|      0|    }
 2912|       |    /* We'd like to call PyObject_Bytes here, but we need to check for an
 2913|       |       integer argument before deferring to PyBytes_FromObject, something
 2914|       |       PyObject_Bytes doesn't do. */
 2915|  19.4k|    else if ((func = _PyObject_LookupSpecial(x, &_Py_ID(__bytes__))) != NULL) {
  ------------------
  |  |  936|  19.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  19.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  19.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2915:14): [True: 0, False: 19.4k]
  ------------------
 2916|      0|        bytes = _PyObject_CallNoArgs(func);
 2917|      0|        Py_DECREF(func);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2918|      0|        if (bytes == NULL)
  ------------------
  |  Branch (2918:13): [True: 0, False: 0]
  ------------------
 2919|      0|            return NULL;
 2920|      0|        if (!PyBytes_Check(bytes)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2920:13): [True: 0, False: 0]
  ------------------
 2921|      0|            PyErr_Format(PyExc_TypeError,
 2922|      0|                         "%T.__bytes__() must return a bytes, not %T",
 2923|      0|                         x, bytes);
 2924|      0|            Py_DECREF(bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2925|      0|            return NULL;
 2926|      0|        }
 2927|      0|    }
 2928|  19.4k|    else if (PyErr_Occurred())
  ------------------
  |  Branch (2928:14): [True: 0, False: 19.4k]
  ------------------
 2929|      0|        return NULL;
 2930|  19.4k|    else if (PyUnicode_Check(x)) {
  ------------------
  |  |  103|  19.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  19.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 19.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2931|      0|        PyErr_SetString(PyExc_TypeError,
 2932|      0|                        "string argument without an encoding");
 2933|      0|        return NULL;
 2934|      0|    }
 2935|       |    /* Is it an integer? */
 2936|  19.4k|    else if (_PyIndex_Check(x)) {
  ------------------
  |  Branch (2936:14): [True: 0, False: 19.4k]
  ------------------
 2937|      0|        size = PyNumber_AsSsize_t(x, PyExc_OverflowError);
 2938|      0|        if (size == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (2938:13): [True: 0, False: 0]
  |  Branch (2938:27): [True: 0, False: 0]
  ------------------
 2939|      0|            if (!PyErr_ExceptionMatches(PyExc_TypeError))
  ------------------
  |  Branch (2939:17): [True: 0, False: 0]
  ------------------
 2940|      0|                return NULL;
 2941|      0|            PyErr_Clear();  /* fall through */
 2942|      0|            bytes = PyBytes_FromObject(x);
 2943|      0|        }
 2944|      0|        else {
 2945|      0|            if (size < 0) {
  ------------------
  |  Branch (2945:17): [True: 0, False: 0]
  ------------------
 2946|      0|                PyErr_SetString(PyExc_ValueError, "negative count");
 2947|      0|                return NULL;
 2948|      0|            }
 2949|      0|            bytes = _PyBytes_FromSize(size, 1);
 2950|      0|        }
 2951|      0|    }
 2952|  19.4k|    else {
 2953|  19.4k|        bytes = PyBytes_FromObject(x);
 2954|  19.4k|    }
 2955|       |
 2956|  19.4k|    if (bytes != NULL && type != &PyBytes_Type) {
  ------------------
  |  Branch (2956:9): [True: 19.4k, False: 0]
  |  Branch (2956:26): [True: 0, False: 19.4k]
  ------------------
 2957|      0|        Py_SETREF(bytes, bytes_subtype_new(type, bytes));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2958|      0|    }
 2959|       |
 2960|  19.4k|    return bytes;
 2961|  19.4k|}
bytesobject.c:bytes_iteritem:
 3185|     25|{
 3186|     25|    PyBytesObject *a = _PyBytes_CAST(obj);
  ------------------
  |  |   21|     25|    (assert(PyBytes_Check(op)), _Py_CAST(PyBytesObject*, op))
  |  |  ------------------
  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (3186:24): [True: 25, False: 0]
  ------------------
 3187|     25|    if (index >= Py_SIZE(a)) {
  ------------------
  |  |  214|     25|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3187:9): [True: 1, False: 24]
  ------------------
 3188|      1|        return (_PyObjectIndexPair) { .object = NULL, .index = index };
 3189|      1|    }
 3190|     24|    PyObject *l = _PyLong_FromUnsignedChar((unsigned char)a->ob_sval[index]);
 3191|     24|    return (_PyObjectIndexPair) { .object = l, .index = index + 1 };
 3192|     25|}
bytesobject.c:striter_dealloc:
 3479|      2|{
 3480|      2|    striterobject *it = _striterobject_CAST(op);
  ------------------
  |  | 3475|      2|#define _striterobject_CAST(op)  ((striterobject *)(op))
  ------------------
 3481|      2|    _PyObject_GC_UNTRACK(it);
  ------------------
  |  |  507|      2|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3482|      2|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3483|      2|    PyObject_GC_Del(it);
 3484|      2|}
bytesobject.c:bytes_iter:
 3608|      2|{
 3609|      2|    striterobject *it;
 3610|       |
 3611|      2|    if (!PyBytes_Check(seq)) {
  ------------------
  |  |   28|      2|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3611:9): [True: 0, False: 2]
  ------------------
 3612|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3613|      0|        return NULL;
 3614|      0|    }
 3615|      2|    it = PyObject_GC_New(striterobject, &PyBytesIter_Type);
  ------------------
  |  |  181|      2|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 3616|      2|    if (it == NULL)
  ------------------
  |  Branch (3616:9): [True: 0, False: 2]
  ------------------
 3617|      0|        return NULL;
 3618|      2|    it->it_index = 0;
 3619|      2|    it->it_seq = (PyBytesObject *)Py_NewRef(seq);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3620|      2|    _PyObject_GC_TRACK(it);
  ------------------
  |  |  505|      2|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3621|      2|    return (PyObject *)it;
 3622|      2|}
bytesobject.c:byteswriter_create:
 3833|   234k|{
 3834|   234k|    if (size < 0) {
  ------------------
  |  Branch (3834:9): [True: 0, False: 234k]
  ------------------
 3835|      0|        PyErr_SetString(PyExc_ValueError, "size must be >= 0");
 3836|      0|        return NULL;
 3837|      0|    }
 3838|       |
 3839|   234k|    PyBytesWriter *writer = _Py_FREELIST_POP_MEM(bytes_writers);
  ------------------
  |  |   48|   234k|    _PyFreeList_PopMem(&_Py_freelists_GET()->NAME)
  ------------------
 3840|   234k|    if (writer == NULL) {
  ------------------
  |  Branch (3840:9): [True: 105k, False: 129k]
  ------------------
 3841|   105k|        writer = (PyBytesWriter *)PyMem_Malloc(sizeof(PyBytesWriter));
 3842|   105k|        if (writer == NULL) {
  ------------------
  |  Branch (3842:13): [True: 0, False: 105k]
  ------------------
 3843|      0|            PyErr_NoMemory();
 3844|      0|            return NULL;
 3845|      0|        }
 3846|   105k|    }
 3847|   234k|    writer->obj = NULL;
 3848|   234k|    writer->size = 0;
 3849|   234k|    writer->use_bytearray = use_bytearray;
 3850|   234k|    writer->overallocate = !use_bytearray;
 3851|       |
 3852|   234k|    if (size >= 1) {
  ------------------
  |  Branch (3852:9): [True: 234k, False: 725]
  ------------------
 3853|   234k|        if (byteswriter_resize(writer, size, 0) < 0) {
  ------------------
  |  Branch (3853:13): [True: 0, False: 234k]
  ------------------
 3854|       |#ifdef Py_DEBUG
 3855|       |            // Write the canary byte so byteswriter_check_consistency()
 3856|       |            // doesn't fail in PyBytesWriter_Discard()
 3857|       |            byteswriter_write_canary_byte(writer);
 3858|       |#endif
 3859|      0|            PyBytesWriter_Discard(writer);
 3860|      0|            return NULL;
 3861|      0|        }
 3862|   234k|        writer->size = size;
 3863|   234k|    }
 3864|       |#ifdef Py_DEBUG
 3865|       |    memset(byteswriter_data(writer), PyBytesWrite_NEW_BYTE,
 3866|       |           byteswriter_allocated(writer));
 3867|       |    byteswriter_write_canary_byte(writer);
 3868|       |#endif
 3869|   234k|    assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (3869:5): [True: 234k, False: 0]
  ------------------
 3870|   234k|    return writer;
 3871|   234k|}
bytesobject.c:byteswriter_check_consistency:
 3706|  17.3M|{
 3707|  17.3M|    PyObject *obj = writer->obj;
 3708|  17.3M|    if (obj != NULL) {
  ------------------
  |  Branch (3708:9): [True: 12.5M, False: 4.76M]
  ------------------
 3709|  12.5M|        if (writer->use_bytearray) {
  ------------------
  |  Branch (3709:13): [True: 0, False: 12.5M]
  ------------------
 3710|      0|            assert(PyByteArray_CheckExact(obj));
  ------------------
  |  Branch (3710:13): [True: 0, False: 0]
  ------------------
 3711|       |            // Do not use _PyObject_IsUniquelyReferenced(): the caller can have
 3712|       |            // its own lock to prevent a writer from being used by two threads
 3713|       |            // at the same time.
 3714|      0|            assert(Py_REFCNT(obj) == 1);
  ------------------
  |  Branch (3714:13): [True: 0, False: 0]
  ------------------
 3715|      0|            PyByteArrayObject *bytearray = (PyByteArrayObject*)obj;
 3716|      0|            obj = bytearray->ob_bytes_object;
 3717|      0|            assert(obj != NULL);
  ------------------
  |  Branch (3717:13): [True: 0, False: 0]
  ------------------
 3718|      0|        }
 3719|       |
 3720|       |        // Code adapted from _PyBytes_IsMutable()
 3721|  12.5M|        assert(PyBytes_CheckExact(obj));
  ------------------
  |  Branch (3721:9): [True: 12.5M, False: 0]
  ------------------
 3722|  12.5M|        assert(_PyBytes_IsMutable(obj));
  ------------------
  |  Branch (3722:9): [True: 12.5M, False: 0]
  ------------------
 3723|       |        // -1 since the last small buffer byte is used as the canary byte
 3724|  12.5M|        assert((size_t)PyBytes_GET_SIZE(obj) > (sizeof(writer->small_buffer) - 1));
  ------------------
  |  Branch (3724:9): [True: 12.5M, False: 0]
  ------------------
 3725|  12.5M|    }
 3726|       |
 3727|       |#ifdef Py_DEBUG
 3728|       |    const unsigned char *data = (const unsigned char*)byteswriter_data(writer);
 3729|       |    unsigned char canary = data[writer->size];
 3730|       |    if (canary != PyBytesWriter_CANARY_BYTE) {
 3731|       |        _Py_FatalErrorFormat(__func__,
 3732|       |                             "Buffer overflow detected in PyBytesWriter %p "
 3733|       |                             "at position %zd",
 3734|       |                             writer, writer->size);
 3735|       |    }
 3736|       |#endif
 3737|  17.3M|    return 1;
 3738|  17.3M|}
bytesobject.c:byteswriter_data:
 3660|  11.2M|{
 3661|  11.2M|    return _PyBytesWriter_GetData(writer);
 3662|  11.2M|}
bytesobject.c:byteswriter_resize:
 3752|   321k|{
 3753|   321k|    assert(new_size >= 0);
  ------------------
  |  Branch (3753:5): [True: 321k, False: 0]
  ------------------
 3754|       |
 3755|   321k|    Py_ssize_t old_allocated = byteswriter_allocated(writer);
 3756|   321k|    if (new_size <= old_allocated) {
  ------------------
  |  Branch (3756:9): [True: 280k, False: 41.0k]
  ------------------
 3757|       |        // Do not shrink the buffer before PyBytesWriter_FinishWithSize()
 3758|   280k|        return 0;
 3759|   280k|    }
 3760|       |
 3761|  41.0k|    Py_ssize_t alloc = new_size;
 3762|  41.0k|    if (resize && writer->overallocate) {
  ------------------
  |  Branch (3762:9): [True: 34.3k, False: 6.66k]
  |  Branch (3762:19): [True: 34.3k, False: 0]
  ------------------
 3763|  34.3k|        if (alloc <= (PY_SSIZE_T_MAX - alloc / OVERALLOCATE_FACTOR)) {
  ------------------
  |  |  137|  34.3k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                      if (alloc <= (PY_SSIZE_T_MAX - alloc / OVERALLOCATE_FACTOR)) {
  ------------------
  |  | 3747|  34.3k|#  define OVERALLOCATE_FACTOR 4
  ------------------
  |  Branch (3763:13): [True: 34.3k, False: 0]
  ------------------
 3764|  34.3k|            alloc += alloc / OVERALLOCATE_FACTOR;
  ------------------
  |  | 3747|  34.3k|#  define OVERALLOCATE_FACTOR 4
  ------------------
 3765|  34.3k|        }
 3766|  34.3k|    }
 3767|       |
 3768|  41.0k|    if (writer->obj != NULL) {
  ------------------
  |  Branch (3768:9): [True: 21.6k, False: 19.3k]
  ------------------
 3769|  21.6k|        if (writer->use_bytearray) {
  ------------------
  |  Branch (3769:13): [True: 0, False: 21.6k]
  ------------------
 3770|      0|            if (PyByteArray_Resize(writer->obj, alloc)) {
  ------------------
  |  Branch (3770:17): [True: 0, False: 0]
  ------------------
 3771|       |#ifdef Py_DEBUG
 3772|       |                // bytearray can override the canary byte on error
 3773|       |                byteswriter_write_canary_byte(writer);
 3774|       |#endif
 3775|      0|                assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (3775:17): [True: 0, False: 0]
  ------------------
 3776|      0|                return -1;
 3777|      0|            }
 3778|      0|        }
 3779|  21.6k|        else {
 3780|       |            // Can raise MemoryError or OverflowError
 3781|  21.6k|            if (_PyBytes_ResizeKeepOnError(&writer->obj, alloc)) {
  ------------------
  |  Branch (3781:17): [True: 0, False: 21.6k]
  ------------------
 3782|      0|                assert(writer->obj != NULL);
  ------------------
  |  Branch (3782:17): [True: 0, False: 0]
  ------------------
 3783|      0|                assert(byteswriter_check_consistency(writer));
  ------------------
  |  Branch (3783:17): [True: 0, False: 0]
  ------------------
 3784|      0|                return -1;
 3785|      0|            }
 3786|  21.6k|            assert(_PyBytes_IsMutable(writer->obj));
  ------------------
  |  Branch (3786:13): [True: 21.6k, False: 0]
  ------------------
 3787|  21.6k|        }
 3788|  21.6k|        assert(writer->obj != NULL);
  ------------------
  |  Branch (3788:9): [True: 21.6k, False: 0]
  ------------------
 3789|  21.6k|    }
 3790|  19.3k|    else {
 3791|  19.3k|        char *data;
 3792|  19.3k|        if (writer->use_bytearray) {
  ------------------
  |  Branch (3792:13): [True: 0, False: 19.3k]
  ------------------
 3793|      0|            writer->obj = PyByteArray_FromStringAndSize(NULL, alloc);
 3794|      0|            if (writer->obj == NULL) {
  ------------------
  |  Branch (3794:17): [True: 0, False: 0]
  ------------------
 3795|      0|                return -1;
 3796|      0|            }
 3797|      0|            data = PyByteArray_AS_STRING(writer->obj);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3798|      0|        }
 3799|  19.3k|        else {
 3800|  19.3k|            writer->obj = PyBytes_FromStringAndSize(NULL, alloc);
 3801|  19.3k|            if (writer->obj == NULL) {
  ------------------
  |  Branch (3801:17): [True: 0, False: 19.3k]
  ------------------
 3802|      0|                return -1;
 3803|      0|            }
 3804|  19.3k|            assert(_PyBytes_IsMutable(writer->obj));
  ------------------
  |  Branch (3804:13): [True: 19.3k, False: 0]
  ------------------
 3805|  19.3k|            data = PyBytes_AS_STRING(writer->obj);
  ------------------
  |  |   27|  19.3k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  19.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3806|  19.3k|        }
 3807|       |
 3808|  19.3k|        if (resize) {
  ------------------
  |  Branch (3808:13): [True: 12.7k, False: 6.66k]
  ------------------
 3809|       |            // Copy data from the small buffer
 3810|  12.7k|            Py_ssize_t old_size = writer->size;
 3811|  12.7k|            assert((size_t)old_size <= sizeof(writer->small_buffer));
  ------------------
  |  Branch (3811:13): [True: 12.7k, False: 0]
  ------------------
 3812|  12.7k|            assert(old_size <= alloc);
  ------------------
  |  Branch (3812:13): [True: 12.7k, False: 0]
  ------------------
 3813|  12.7k|            memcpy(data, writer->small_buffer, old_size);
 3814|  12.7k|        }
 3815|  19.3k|    }
 3816|       |
 3817|       |#ifdef Py_DEBUG
 3818|       |    Py_ssize_t allocated = byteswriter_allocated(writer);
 3819|       |    if (resize) {
 3820|       |        Py_ssize_t old_size = writer->size;
 3821|       |        assert(allocated > old_size);
 3822|       |        memset(byteswriter_data(writer) + old_size, PyBytesWrite_NEW_BYTE,
 3823|       |               allocated - old_size);
 3824|       |    }
 3825|       |#endif
 3826|       |
 3827|  41.0k|    return 0;
 3828|  41.0k|}

_Py_CheckFunctionResult:
   27|  1.28M|{
   28|  1.28M|    assert((callable != NULL) ^ (where != NULL));
  ------------------
  |  Branch (28:5): [True: 1.28M, False: 0]
  ------------------
   29|       |
   30|  1.28M|    if (result == NULL) {
  ------------------
  |  Branch (30:9): [True: 4.80k, False: 1.28M]
  ------------------
   31|  4.80k|        if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (31:13): [True: 0, False: 4.80k]
  ------------------
   32|      0|            if (callable)
  ------------------
  |  Branch (32:17): [True: 0, False: 0]
  ------------------
   33|      0|                _PyErr_Format(tstate, PyExc_SystemError,
   34|      0|                              "%R returned NULL without setting an exception",
   35|      0|                              callable);
   36|      0|            else
   37|      0|                _PyErr_Format(tstate, PyExc_SystemError,
   38|      0|                              "%s returned NULL without setting an exception",
   39|      0|                              where);
   40|       |#ifdef Py_DEBUG
   41|       |            /* Ensure that the bug is caught in debug mode.
   42|       |               Py_FatalError() logs the SystemError exception raised above. */
   43|       |            Py_FatalError("a function returned NULL without setting an exception");
   44|       |#endif
   45|      0|            return NULL;
   46|      0|        }
   47|  4.80k|    }
   48|  1.28M|    else {
   49|  1.28M|        if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (49:13): [True: 0, False: 1.28M]
  ------------------
   50|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|       |
   52|      0|            if (callable) {
  ------------------
  |  Branch (52:17): [True: 0, False: 0]
  ------------------
   53|      0|                _PyErr_FormatFromCauseTstate(
   54|      0|                    tstate, PyExc_SystemError,
   55|      0|                    "%R returned a result with an exception set", callable);
   56|      0|            }
   57|      0|            else {
   58|      0|                _PyErr_FormatFromCauseTstate(
   59|      0|                    tstate, PyExc_SystemError,
   60|      0|                    "%s returned a result with an exception set", where);
   61|      0|            }
   62|       |#ifdef Py_DEBUG
   63|       |            /* Ensure that the bug is caught in debug mode.
   64|       |               Py_FatalError() logs the SystemError exception raised above. */
   65|       |            Py_FatalError("a function returned a result with an exception set");
   66|       |#endif
   67|      0|            return NULL;
   68|      0|        }
   69|  1.28M|    }
   70|  1.28M|    return result;
   71|  1.28M|}
_Py_CheckSlotResult:
   76|  15.2M|{
   77|  15.2M|    PyThreadState *tstate = _PyThreadState_GET();
   78|  15.2M|    if (!success) {
  ------------------
  |  Branch (78:9): [True: 21.6k, False: 15.2M]
  ------------------
   79|  21.6k|        if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (79:13): [True: 0, False: 21.6k]
  ------------------
   80|      0|            _Py_FatalErrorFormat(__func__,
   81|      0|                                 "Slot %s of type %s failed "
   82|      0|                                 "without setting an exception",
   83|      0|                                 slot_name, Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|      0|        }
   85|  21.6k|    }
   86|  15.2M|    else {
   87|  15.2M|        if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (87:13): [True: 0, False: 15.2M]
  ------------------
   88|      0|            _Py_FatalErrorFormat(__func__,
   89|      0|                                 "Slot %s of type %s succeeded "
   90|      0|                                 "with an exception set",
   91|      0|                                 slot_name, Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|      0|        }
   93|  15.2M|    }
   94|  15.2M|    return 1;
   95|  15.2M|}
PyObject_CallNoArgs:
  103|      1|{
  104|      1|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|      1|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  105|      1|    PyThreadState *tstate = _PyThreadState_GET();
  106|      1|    return _PyObject_VectorcallTstate(tstate, func, NULL, 0, NULL);
  107|      1|}
_PyObject_VectorcallDictTstate:
  114|  52.0k|{
  115|  52.0k|    assert(callable != NULL);
  ------------------
  |  Branch (115:5): [True: 52.0k, False: 0]
  ------------------
  116|       |
  117|       |    /* PyObject_VectorcallDict() must not be called with an exception set,
  118|       |       because it can clear it (directly or indirectly) and so the
  119|       |       caller loses its exception */
  120|  52.0k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (120:5): [True: 52.0k, False: 0]
  ------------------
  121|       |
  122|  52.0k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  52.0k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  123|  52.0k|    assert(nargs >= 0);
  ------------------
  |  Branch (123:5): [True: 52.0k, False: 0]
  ------------------
  124|  52.0k|    assert(nargs == 0 || args != NULL);
  ------------------
  |  Branch (124:5): [True: 771, False: 51.3k]
  |  Branch (124:5): [True: 51.3k, False: 0]
  ------------------
  125|  52.0k|    assert(kwargs == NULL || PyDict_Check(kwargs));
  ------------------
  |  Branch (125:5): [True: 51.6k, False: 408]
  |  Branch (125:5): [True: 408, False: 0]
  ------------------
  126|       |
  127|  52.0k|    vectorcallfunc func = PyVectorcall_Function(callable);
  128|  52.0k|    if (func == NULL) {
  ------------------
  |  Branch (128:9): [True: 84, False: 51.9k]
  ------------------
  129|       |        /* Use tp_call instead */
  130|     84|        return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwargs);
  131|     84|    }
  132|       |
  133|  51.9k|    PyObject *res;
  134|  51.9k|    if (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) {
  ------------------
  |  |   63|    380|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    380|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    380|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (134:9): [True: 51.6k, False: 380]
  |  Branch (134:27): [True: 50, False: 330]
  ------------------
  135|  51.6k|        res = func(callable, args, nargsf, NULL);
  136|  51.6k|    }
  137|    330|    else {
  138|    330|        PyObject *kwnames;
  139|    330|        PyObject *const *newargs;
  140|    330|        newargs = _PyStack_UnpackDict(tstate,
  141|    330|                                      args, nargs,
  142|    330|                                      kwargs, &kwnames);
  143|    330|        if (newargs == NULL) {
  ------------------
  |  Branch (143:13): [True: 0, False: 330]
  ------------------
  144|      0|            return NULL;
  145|      0|        }
  146|    330|        res = func(callable, newargs,
  147|    330|                   nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
  ------------------
  |  |  287|    330|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    330|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  148|    330|        _PyStack_UnpackDict_Free(newargs, nargs, kwnames);
  149|    330|    }
  150|  51.9k|    return _Py_CheckFunctionResult(tstate, callable, res, NULL);
  151|  51.9k|}
PyObject_VectorcallDict:
  157|  2.03k|{
  158|  2.03k|    PyThreadState *tstate = _PyThreadState_GET();
  159|  2.03k|    return _PyObject_VectorcallDictTstate(tstate, callable, args, nargsf, kwargs);
  160|  2.03k|}
_PyObject_MakeTpCall:
  203|   355k|{
  204|   355k|    assert(nargs >= 0);
  ------------------
  |  Branch (204:5): [True: 355k, False: 0]
  ------------------
  205|   355k|    assert(nargs == 0 || args != NULL);
  ------------------
  |  Branch (205:5): [True: 241k, False: 113k]
  |  Branch (205:5): [True: 113k, False: 0]
  ------------------
  206|   355k|    assert(keywords == NULL || PyTuple_Check(keywords) || PyDict_Check(keywords));
  ------------------
  |  Branch (206:5): [True: 354k, False: 580]
  |  Branch (206:5): [True: 552, False: 28]
  |  Branch (206:5): [True: 28, False: 0]
  ------------------
  207|       |
  208|       |    /* Slow path: build a temporary tuple for positional arguments and a
  209|       |     * temporary dictionary for keyword arguments (if any) */
  210|   355k|    ternaryfunc call = Py_TYPE(callable)->tp_call;
  ------------------
  |  |  213|   355k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   355k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   355k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|   355k|    if (call == NULL) {
  ------------------
  |  Branch (211:9): [True: 0, False: 355k]
  ------------------
  212|      0|        object_is_not_callable(tstate, callable);
  213|      0|        return NULL;
  214|      0|    }
  215|       |
  216|   355k|    PyObject *argstuple = PyTuple_FromArray(args, nargs);
  217|   355k|    if (argstuple == NULL) {
  ------------------
  |  Branch (217:9): [True: 0, False: 355k]
  ------------------
  218|      0|        return NULL;
  219|      0|    }
  220|       |
  221|   355k|    PyObject *kwdict;
  222|   355k|    if (keywords == NULL || PyDict_Check(keywords)) {
  ------------------
  |  |   18|    580|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    580|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 28, False: 552]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (222:9): [True: 354k, False: 580]
  ------------------
  223|   354k|        kwdict = keywords;
  224|   354k|    }
  225|    552|    else {
  226|    552|        if (PyTuple_GET_SIZE(keywords)) {
  ------------------
  |  |   27|    552|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    552|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    552|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 552, False: 0]
  |  |  ------------------
  ------------------
  227|    552|            assert(args != NULL);
  ------------------
  |  Branch (227:13): [True: 552, False: 0]
  ------------------
  228|    552|            kwdict = _PyStack_AsDict(args + nargs, keywords);
  229|    552|            if (kwdict == NULL) {
  ------------------
  |  Branch (229:17): [True: 0, False: 552]
  ------------------
  230|      0|                Py_DECREF(argstuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|      0|                return NULL;
  232|      0|            }
  233|    552|        }
  234|      0|        else {
  235|      0|            keywords = kwdict = NULL;
  236|      0|        }
  237|    552|    }
  238|       |
  239|   355k|    PyObject *result = NULL;
  240|   355k|    if (_Py_EnterRecursiveCallTstate(tstate, " while calling a Python object") == 0)
  ------------------
  |  Branch (240:9): [True: 355k, False: 0]
  ------------------
  241|   355k|    {
  242|   355k|        result = _PyCFunctionWithKeywords_TrampolineCall(
  ------------------
  |  |  998|   355k|    (meth)((self), (args), (kw))
  ------------------
  243|   355k|            (PyCFunctionWithKeywords)call, callable, argstuple, kwdict);
  244|   355k|        _Py_LeaveRecursiveCallTstate(tstate);
  245|   355k|    }
  246|       |
  247|   355k|    Py_DECREF(argstuple);
  ------------------
  |  |  430|   355k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   355k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   355k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|   355k|    if (kwdict != keywords) {
  ------------------
  |  Branch (248:9): [True: 552, False: 354k]
  ------------------
  249|    552|        Py_DECREF(kwdict);
  ------------------
  |  |  430|    552|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    552|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    552|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    552|    }
  251|       |
  252|       |    return _Py_CheckFunctionResult(tstate, callable, result, NULL);
  253|   355k|}
PyVectorcall_Function:
  258|   115k|{
  259|   115k|    return _PyVectorcall_FunctionInline(callable);
  260|   115k|}
PyObject_Vectorcall:
  325|   307k|{
  326|   307k|    PyThreadState *tstate = _PyThreadState_GET();
  327|   307k|    return _PyObject_VectorcallTstate(tstate, callable,
  328|   307k|                                      args, nargsf, kwnames);
  329|   307k|}
_PyObject_Call:
  335|  62.9k|{
  336|  62.9k|    ternaryfunc call;
  337|  62.9k|    PyObject *result;
  338|       |
  339|       |    /* PyObject_Call() must not be called with an exception set,
  340|       |       because it can clear it (directly or indirectly) and so the
  341|       |       caller loses its exception */
  342|  62.9k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (342:5): [True: 62.9k, False: 0]
  ------------------
  343|  62.9k|    assert(PyTuple_Check(args));
  ------------------
  |  Branch (343:5): [True: 62.9k, False: 0]
  ------------------
  344|  62.9k|    assert(kwargs == NULL || PyDict_Check(kwargs));
  ------------------
  |  Branch (344:5): [True: 62.3k, False: 608]
  |  Branch (344:5): [True: 608, False: 0]
  ------------------
  345|  62.9k|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, callable);
  ------------------
  |  |   80|  62.9k|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  346|  62.9k|    vectorcallfunc vector_func = PyVectorcall_Function(callable);
  347|  62.9k|    if (vector_func != NULL) {
  ------------------
  |  Branch (347:9): [True: 43.2k, False: 19.7k]
  ------------------
  348|  43.2k|        return _PyVectorcall_Call(tstate, vector_func, callable, args, kwargs);
  349|  43.2k|    }
  350|  19.7k|    else {
  351|  19.7k|        call = Py_TYPE(callable)->tp_call;
  ------------------
  |  |  213|  19.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  19.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|  19.7k|        if (call == NULL) {
  ------------------
  |  Branch (352:13): [True: 0, False: 19.7k]
  ------------------
  353|      0|            object_is_not_callable(tstate, callable);
  354|      0|            return NULL;
  355|      0|        }
  356|       |
  357|  19.7k|        if (_Py_EnterRecursiveCallTstate(tstate, " while calling a Python object")) {
  ------------------
  |  Branch (357:13): [True: 0, False: 19.7k]
  ------------------
  358|      0|            return NULL;
  359|      0|        }
  360|       |
  361|  19.7k|        result = (*call)(callable, args, kwargs);
  362|       |
  363|  19.7k|        _Py_LeaveRecursiveCallTstate(tstate);
  364|       |
  365|       |        return _Py_CheckFunctionResult(tstate, callable, result, NULL);
  366|  19.7k|    }
  367|  62.9k|}
PyObject_Call:
  371|  62.9k|{
  372|  62.9k|    PyThreadState *tstate = _PyThreadState_GET();
  373|  62.9k|    return _PyObject_Call(tstate, callable, args, kwargs);
  374|  62.9k|}
PyObject_CallOneArg:
  387|   203k|{
  388|   203k|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|   203k|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  389|   203k|    assert(arg != NULL);
  ------------------
  |  Branch (389:5): [True: 203k, False: 0]
  ------------------
  390|   203k|    PyObject *_args[2];
  391|   203k|    PyObject **args = _args + 1;  // For PY_VECTORCALL_ARGUMENTS_OFFSET
  392|   203k|    args[0] = arg;
  393|   203k|    PyThreadState *tstate = _PyThreadState_GET();
  394|   203k|    size_t nargsf = 1 | PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|   203k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   203k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  395|       |    return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL);
  396|   203k|}
_PyFunction_Vectorcall:
  404|   141k|{
  405|   141k|    assert(PyFunction_Check(func));
  ------------------
  |  Branch (405:5): [True: 141k, False: 0]
  ------------------
  406|   141k|    PyFunctionObject *f = (PyFunctionObject *)func;
  407|   141k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|   141k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  408|   141k|    assert(nargs >= 0);
  ------------------
  |  Branch (408:5): [True: 141k, False: 0]
  ------------------
  409|   141k|    PyThreadState *tstate = _PyThreadState_GET();
  410|   141k|    assert(nargs == 0 || stack != NULL);
  ------------------
  |  Branch (410:5): [True: 2, False: 141k]
  |  Branch (410:5): [True: 141k, False: 0]
  ------------------
  411|   141k|    EVAL_CALL_STAT_INC(EVAL_CALL_FUNCTION_VECTORCALL);
  ------------------
  |  |   79|   141k|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
  412|   141k|    if (((PyCodeObject *)f->func_code)->co_flags & CO_OPTIMIZED) {
  ------------------
  |  |  122|   141k|#define CO_OPTIMIZED    0x0001
  ------------------
  |  Branch (412:9): [True: 141k, False: 0]
  ------------------
  413|   141k|        return _PyEval_Vector(tstate, f, NULL, stack, nargs, kwnames);
  414|   141k|    }
  415|      0|    else {
  416|      0|        return _PyEval_Vector(tstate, f, f->func_globals, stack, nargs, kwnames);
  417|      0|    }
  418|   141k|}
_PyObject_Call_Prepend:
  480|  50.0k|{
  481|  50.0k|    assert(PyTuple_Check(args));
  ------------------
  |  Branch (481:5): [True: 50.0k, False: 0]
  ------------------
  482|       |
  483|  50.0k|    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
  484|  50.0k|    PyObject **stack;
  485|       |
  486|  50.0k|    Py_ssize_t argcount = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  50.0k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  50.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|  50.0k|    if (argcount + 1 <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
  ------------------
  |  |  221|  50.0k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (487:9): [True: 1.55k, False: 48.4k]
  ------------------
  488|  1.55k|        stack = small_stack;
  489|  1.55k|    }
  490|  48.4k|    else {
  491|  48.4k|        stack = PyMem_Malloc((argcount + 1) * sizeof(PyObject *));
  492|  48.4k|        if (stack == NULL) {
  ------------------
  |  Branch (492:13): [True: 0, False: 48.4k]
  ------------------
  493|      0|            PyErr_NoMemory();
  494|      0|            return NULL;
  495|      0|        }
  496|  48.4k|    }
  497|       |
  498|       |    /* use borrowed references */
  499|  50.0k|    stack[0] = obj;
  500|  50.0k|    memcpy(&stack[1],
  501|  50.0k|           _PyTuple_ITEMS(args),
  ------------------
  |  |   26|  50.0k|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|   100k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 50.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  502|      0|           argcount * sizeof(PyObject *));
  503|       |
  504|      0|    PyObject *result = _PyObject_VectorcallDictTstate(tstate, callable,
  505|  50.0k|                                                      stack, argcount + 1,
  506|  50.0k|                                                      kwargs);
  507|  50.0k|    if (stack != small_stack) {
  ------------------
  |  Branch (507:9): [True: 48.4k, False: 1.55k]
  ------------------
  508|  48.4k|        PyMem_Free(stack);
  509|  48.4k|    }
  510|  50.0k|    return result;
  511|  50.0k|}
PyObject_CallFunction:
  568|  91.2k|{
  569|  91.2k|    va_list va;
  570|  91.2k|    PyObject *result;
  571|  91.2k|    PyThreadState *tstate = _PyThreadState_GET();
  572|       |
  573|  91.2k|    va_start(va, format);
  574|  91.2k|    result = _PyObject_CallFunctionVa(tstate, callable, format, va);
  575|  91.2k|    va_end(va);
  576|       |
  577|  91.2k|    return result;
  578|  91.2k|}
PyObject_CallMethod:
  631|  2.18k|{
  632|  2.18k|    PyThreadState *tstate = _PyThreadState_GET();
  633|       |
  634|  2.18k|    if (obj == NULL || name == NULL) {
  ------------------
  |  Branch (634:9): [True: 0, False: 2.18k]
  |  Branch (634:24): [True: 0, False: 2.18k]
  ------------------
  635|      0|        return null_error(tstate);
  636|      0|    }
  637|       |
  638|  2.18k|    PyObject *callable = PyObject_GetAttrString(obj, name);
  639|  2.18k|    if (callable == NULL) {
  ------------------
  |  Branch (639:9): [True: 0, False: 2.18k]
  ------------------
  640|      0|        return NULL;
  641|      0|    }
  642|       |
  643|  2.18k|    va_list va;
  644|  2.18k|    va_start(va, format);
  645|  2.18k|    PyObject *retval = callmethod(tstate, callable, format, va);
  646|  2.18k|    va_end(va);
  647|       |
  648|  2.18k|    Py_DECREF(callable);
  ------------------
  |  |  430|  2.18k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  649|  2.18k|    return retval;
  650|  2.18k|}
_PyObject_CallMethod:
  681|     22|{
  682|     22|    PyThreadState *tstate = _PyThreadState_GET();
  683|     22|    if (obj == NULL || name == NULL) {
  ------------------
  |  Branch (683:9): [True: 0, False: 22]
  |  Branch (683:24): [True: 0, False: 22]
  ------------------
  684|      0|        return null_error(tstate);
  685|      0|    }
  686|       |
  687|     22|    PyObject *callable = PyObject_GetAttr(obj, name);
  688|     22|    if (callable == NULL) {
  ------------------
  |  Branch (688:9): [True: 0, False: 22]
  ------------------
  689|      0|        return NULL;
  690|      0|    }
  691|       |
  692|     22|    va_list va;
  693|     22|    va_start(va, format);
  694|     22|    PyObject *retval = callmethod(tstate, callable, format, va);
  695|     22|    va_end(va);
  696|       |
  697|     22|    Py_DECREF(callable);
  ------------------
  |  |  430|     22|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  698|     22|    return retval;
  699|     22|}
_PyObject_VectorcallPrepend:
  835|  38.9k|{
  836|  38.9k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  38.9k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  837|  38.9k|    assert(nargs == 0 || args[nargs-1]);
  ------------------
  |  Branch (837:5): [True: 0, False: 38.9k]
  |  Branch (837:5): [True: 38.9k, False: 0]
  ------------------
  838|       |
  839|  38.9k|    PyObject *result;
  840|  38.9k|    if (nargsf & PY_VECTORCALL_ARGUMENTS_OFFSET) {
  ------------------
  |  |  287|  38.9k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  38.9k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (840:9): [True: 76, False: 38.9k]
  ------------------
  841|       |        /* PY_VECTORCALL_ARGUMENTS_OFFSET is set, so we are allowed to mutate the vector */
  842|     76|        PyObject **newargs = (PyObject**)args - 1;
  843|     76|        nargs += 1;
  844|     76|        PyObject *tmp = newargs[0];
  845|     76|        newargs[0] = arg;
  846|     76|        assert(newargs[nargs-1]);
  ------------------
  |  Branch (846:9): [True: 76, False: 0]
  ------------------
  847|     76|        result = _PyObject_VectorcallTstate(tstate, callable, newargs,
  848|     76|                                            nargs, kwnames);
  849|     76|        newargs[0] = tmp;
  850|     76|    }
  851|  38.9k|    else {
  852|  38.9k|        Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (852:30): [True: 38.9k, False: 0]
  ------------------
  853|  38.9k|        Py_ssize_t totalargs = nargs + nkwargs;
  854|  38.9k|        if (totalargs == 0) {
  ------------------
  |  Branch (854:13): [True: 0, False: 38.9k]
  ------------------
  855|      0|            return _PyObject_VectorcallTstate(tstate, callable, &arg, 1, NULL);
  856|      0|        }
  857|       |
  858|  38.9k|        PyObject *newargs_stack[_PY_FASTCALL_SMALL_STACK];
  859|  38.9k|        PyObject **newargs;
  860|  38.9k|        if (totalargs <= (Py_ssize_t)Py_ARRAY_LENGTH(newargs_stack) - 1) {
  ------------------
  |  |  221|  38.9k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (860:13): [True: 38.9k, False: 0]
  ------------------
  861|  38.9k|            newargs = newargs_stack;
  862|  38.9k|        }
  863|      0|        else {
  864|      0|            newargs = PyMem_Malloc((totalargs+1) * sizeof(PyObject *));
  865|      0|            if (newargs == NULL) {
  ------------------
  |  Branch (865:17): [True: 0, False: 0]
  ------------------
  866|      0|                _PyErr_NoMemory(tstate);
  867|      0|                return NULL;
  868|      0|            }
  869|      0|        }
  870|       |        /* use borrowed references */
  871|  38.9k|        newargs[0] = arg;
  872|       |        /* bpo-37138: since totalargs > 0, it's impossible that args is NULL.
  873|       |         * We need this, since calling memcpy() with a NULL pointer is
  874|       |         * undefined behaviour. */
  875|  38.9k|        assert(args != NULL);
  ------------------
  |  Branch (875:9): [True: 38.9k, False: 0]
  ------------------
  876|  38.9k|        memcpy(newargs + 1, args, totalargs * sizeof(PyObject *));
  877|  38.9k|        result = _PyObject_VectorcallTstate(tstate, callable,
  878|  38.9k|                                            newargs, nargs+1, kwnames);
  879|  38.9k|        if (newargs != newargs_stack) {
  ------------------
  |  Branch (879:13): [True: 0, False: 38.9k]
  ------------------
  880|      0|            PyMem_Free(newargs);
  881|      0|        }
  882|  38.9k|    }
  883|  38.9k|    return result;
  884|  38.9k|}
PyObject_VectorcallMethod:
  889|   146k|{
  890|   146k|    assert(name != NULL);
  ------------------
  |  Branch (890:5): [True: 146k, False: 0]
  ------------------
  891|   146k|    assert(args != NULL);
  ------------------
  |  Branch (891:5): [True: 146k, False: 0]
  ------------------
  892|   146k|    assert(PyVectorcall_NARGS(nargsf) >= 1);
  ------------------
  |  Branch (892:5): [True: 146k, False: 0]
  ------------------
  893|       |
  894|   146k|    PyThreadState *tstate = _PyThreadState_GET();
  895|   146k|    _PyCStackRef self, method;
  896|   146k|    _PyThreadState_PushCStackRef(tstate, &self);
  897|   146k|    _PyThreadState_PushCStackRef(tstate, &method);
  898|       |    /* Use args[0] as "self" argument */
  899|   146k|    self.ref = PyStackRef_FromPyObjectBorrow(args[0]);
  900|   146k|    int unbound = _PyObject_GetMethodStackRef(tstate, &self.ref, name, &method.ref);
  901|   146k|    if (unbound < 0) {
  ------------------
  |  Branch (901:9): [True: 0, False: 146k]
  ------------------
  902|      0|        _PyThreadState_PopCStackRef(tstate, &method);
  903|      0|        _PyThreadState_PopCStackRef(tstate, &self);
  904|      0|        return NULL;
  905|      0|    }
  906|       |
  907|   146k|    PyObject *callable = PyStackRef_AsPyObjectBorrow(method.ref);
  908|   146k|    PyObject *self_obj = PyStackRef_AsPyObjectBorrow(self.ref);
  909|   146k|    PyObject *result;
  910|       |
  911|   146k|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_METHOD, callable);
  ------------------
  |  |   80|   146k|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  912|   146k|    if (self_obj == NULL) {
  ------------------
  |  Branch (912:9): [True: 205, False: 146k]
  ------------------
  913|       |        /* Skip "self". We can keep PY_VECTORCALL_ARGUMENTS_OFFSET since
  914|       |         * args[-1] in the onward call is args[0] here. */
  915|    205|        result = _PyObject_VectorcallTstate(tstate, callable,
  916|    205|                                            args + 1, nargsf - 1, kwnames);
  917|    205|    }
  918|   146k|    else if (self_obj == args[0]) {
  ------------------
  |  Branch (918:14): [True: 146k, False: 0]
  ------------------
  919|       |        /* We must remove PY_VECTORCALL_ARGUMENTS_OFFSET since
  920|       |         * that would be interpreted as allowing to change args[-1] */
  921|   146k|        result = _PyObject_VectorcallTstate(tstate, callable, args,
  922|   146k|                                            nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET,
  ------------------
  |  |  287|   146k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   146k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  923|   146k|                                            kwnames);
  924|   146k|    }
  925|      0|    else {
  926|       |        /* classmethod: self_obj is the type, not args[0]. Replace
  927|       |         * args[0] with self_obj and call the underlying callable. */
  928|      0|        result = _PyObject_VectorcallPrepend(tstate, callable, self_obj,
  929|      0|                                             args + 1, nargsf - 1, kwnames);
  930|      0|    }
  931|   146k|    _PyThreadState_PopCStackRef(tstate, &method);
  932|   146k|    _PyThreadState_PopCStackRef(tstate, &self);
  933|   146k|    return result;
  934|   146k|}
PyObject_CallMethodObjArgs:
  939|    344|{
  940|    344|    PyThreadState *tstate = _PyThreadState_GET();
  941|    344|    if (obj == NULL || name == NULL) {
  ------------------
  |  Branch (941:9): [True: 0, False: 344]
  |  Branch (941:24): [True: 0, False: 344]
  ------------------
  942|      0|        return null_error(tstate);
  943|      0|    }
  944|       |
  945|    344|    _PyCStackRef self, method;
  946|    344|    _PyThreadState_PushCStackRef(tstate, &self);
  947|    344|    _PyThreadState_PushCStackRef(tstate, &method);
  948|    344|    self.ref = PyStackRef_FromPyObjectBorrow(obj);
  949|    344|    int res = _PyObject_GetMethodStackRef(tstate, &self.ref, name, &method.ref);
  950|    344|    if (res < 0) {
  ------------------
  |  Branch (950:9): [True: 0, False: 344]
  ------------------
  951|      0|        _PyThreadState_PopCStackRef(tstate, &method);
  952|      0|        _PyThreadState_PopCStackRef(tstate, &self);
  953|      0|        return NULL;
  954|      0|    }
  955|    344|    PyObject *callable = PyStackRef_AsPyObjectBorrow(method.ref);
  956|    344|    PyObject *self_obj = PyStackRef_AsPyObjectBorrow(self.ref);
  957|       |
  958|    344|    va_list vargs;
  959|    344|    va_start(vargs, name);
  960|    344|    PyObject *result = object_vacall(tstate, self_obj, callable, vargs);
  961|    344|    va_end(vargs);
  962|       |
  963|    344|    _PyThreadState_PopCStackRef(tstate, &method);
  964|    344|    _PyThreadState_PopCStackRef(tstate, &self);
  965|    344|    return result;
  966|    344|}
PyObject_CallFunctionObjArgs:
  971|  48.5k|{
  972|  48.5k|    PyThreadState *tstate = _PyThreadState_GET();
  973|  48.5k|    va_list vargs;
  974|  48.5k|    PyObject *result;
  975|       |
  976|  48.5k|    va_start(vargs, callable);
  977|  48.5k|    result = object_vacall(tstate, NULL, callable, vargs);
  978|  48.5k|    va_end(vargs);
  979|       |
  980|  48.5k|    return result;
  981|  48.5k|}
_PyStack_AsDict:
  988|    579|{
  989|    579|    Py_ssize_t nkwargs;
  990|       |
  991|    579|    assert(kwnames != NULL);
  ------------------
  |  Branch (991:5): [True: 579, False: 0]
  ------------------
  992|    579|    nkwargs = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|    579|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    579|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  993|    579|    return _PyDict_FromItems(&PyTuple_GET_ITEM(kwnames, 0), 1,
  ------------------
  |  |   29|    579|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    579|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (993:31): [True: 579, False: 0]
  ------------------
  994|    579|                             values, 1, nkwargs);
  995|    579|}
_PyStack_UnpackDict:
 1018|    330|{
 1019|    330|    assert(nargs >= 0);
  ------------------
  |  Branch (1019:5): [True: 330, False: 0]
  ------------------
 1020|    330|    assert(kwargs != NULL);
  ------------------
  |  Branch (1020:5): [True: 330, False: 0]
  ------------------
 1021|    330|    assert(PyDict_Check(kwargs));
  ------------------
  |  Branch (1021:5): [True: 330, False: 0]
  ------------------
 1022|       |
 1023|    330|    Py_ssize_t nkwargs = PyDict_GET_SIZE(kwargs);
  ------------------
  |  |   63|    330|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    330|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    330|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|       |    /* Check for overflow in the PyMem_Malloc() call below. The subtraction
 1025|       |     * in this check cannot overflow: both maxnargs and nkwargs are
 1026|       |     * non-negative signed integers, so their difference fits in the type. */
 1027|    330|    Py_ssize_t maxnargs = PY_SSIZE_T_MAX / sizeof(args[0]) - 1;
  ------------------
  |  |  137|    330|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1028|    330|    if (nargs > maxnargs - nkwargs) {
  ------------------
  |  Branch (1028:9): [True: 0, False: 330]
  ------------------
 1029|      0|        _PyErr_NoMemory(tstate);
 1030|      0|        return NULL;
 1031|      0|    }
 1032|       |
 1033|       |    /* Add 1 to support PY_VECTORCALL_ARGUMENTS_OFFSET */
 1034|    330|    PyObject **stack = PyMem_Malloc((1 + nargs + nkwargs) * sizeof(args[0]));
 1035|    330|    if (stack == NULL) {
  ------------------
  |  Branch (1035:9): [True: 0, False: 330]
  ------------------
 1036|      0|        _PyErr_NoMemory(tstate);
 1037|      0|        return NULL;
 1038|      0|    }
 1039|       |
 1040|    330|    PyObject *kwnames = PyTuple_New(nkwargs);
 1041|    330|    if (kwnames == NULL) {
  ------------------
  |  Branch (1041:9): [True: 0, False: 330]
  ------------------
 1042|      0|        PyMem_Free(stack);
 1043|      0|        return NULL;
 1044|      0|    }
 1045|       |
 1046|    330|    stack++;  /* For PY_VECTORCALL_ARGUMENTS_OFFSET */
 1047|       |
 1048|       |    /* Copy positional arguments (borrowed references) */
 1049|  1.01k|    for (Py_ssize_t i = 0; i < nargs; i++) {
  ------------------
  |  Branch (1049:28): [True: 680, False: 330]
  ------------------
 1050|    680|        stack[i] = args[i];
 1051|    680|    }
 1052|       |
 1053|    330|    PyObject **kwstack = stack + nargs;
 1054|       |    /* This loop doesn't support lookup function mutating the dictionary
 1055|       |       to change its size. It's a deliberate choice for speed, this function is
 1056|       |       called in the performance critical hot code. */
 1057|    330|    Py_ssize_t pos = 0, i = 0;
 1058|    330|    PyObject *key, *value;
 1059|    330|    unsigned long keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS;
  ------------------
  |  |  555|    330|#define Py_TPFLAGS_UNICODE_SUBCLASS     (1UL << 28)
  ------------------
 1060|  1.71k|    while (PyDict_Next(kwargs, &pos, &key, &value)) {
  ------------------
  |  Branch (1060:12): [True: 1.38k, False: 330]
  ------------------
 1061|  1.38k|        keys_are_strings &= Py_TYPE(key)->tp_flags;
  ------------------
  |  |  213|  1.38k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1062|  1.38k|        PyTuple_SET_ITEM(kwnames, i, Py_NewRef(key));
  ------------------
  |  |   40|  1.38k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1063|  1.38k|        kwstack[i] = Py_NewRef(value);
  ------------------
  |  |  550|  1.38k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1064|  1.38k|        i++;
 1065|  1.38k|    }
 1066|       |
 1067|       |    /* keys_are_strings has the value Py_TPFLAGS_UNICODE_SUBCLASS if that
 1068|       |     * flag is set for all keys. Otherwise, keys_are_strings equals 0.
 1069|       |     * We do this check once at the end instead of inside the loop above
 1070|       |     * because it simplifies the deallocation in the failing case.
 1071|       |     * It happens to also make the loop above slightly more efficient. */
 1072|    330|    if (!keys_are_strings) {
  ------------------
  |  Branch (1072:9): [True: 0, False: 330]
  ------------------
 1073|      0|        _PyErr_SetString(tstate, PyExc_TypeError,
 1074|      0|                         "keywords must be strings");
 1075|      0|        _PyStack_UnpackDict_Free(stack, nargs, kwnames);
 1076|      0|        return NULL;
 1077|      0|    }
 1078|       |
 1079|    330|    *p_kwnames = kwnames;
 1080|    330|    return stack;
 1081|    330|}
_PyStack_UnpackDict_Free:
 1086|    330|{
 1087|       |    /* Only decref kwargs values, positional args are borrowed */
 1088|    330|    Py_ssize_t nkwargs = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|    330|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    330|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    330|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|  1.71k|    for (Py_ssize_t i = 0; i < nkwargs; i++) {
  ------------------
  |  Branch (1089:28): [True: 1.38k, False: 330]
  ------------------
 1090|  1.38k|        Py_DECREF(stack[nargs + i]);
  ------------------
  |  |  430|  1.38k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1091|  1.38k|    }
 1092|    330|    _PyStack_UnpackDict_FreeNoDecRef(stack, kwnames);
 1093|    330|}
_PyStack_UnpackDict_FreeNoDecRef:
 1097|    330|{
 1098|    330|    PyMem_Free((PyObject **)stack - 1);
 1099|    330|    Py_DECREF(kwnames);
  ------------------
  |  |  430|    330|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    330|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    330|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|    330|}
call.c:_PyVectorcall_Call:
  266|  43.2k|{
  267|  43.2k|    assert(func != NULL);
  ------------------
  |  Branch (267:5): [True: 43.2k, False: 0]
  ------------------
  268|       |
  269|  43.2k|    Py_ssize_t nargs = PyTuple_GET_SIZE(tuple);
  ------------------
  |  |   27|  43.2k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  43.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|       |
  271|       |    /* Fast path for no keywords */
  272|  43.2k|    if (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) {
  ------------------
  |  |   63|    608|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    608|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    608|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (272:9): [True: 42.6k, False: 608]
  |  Branch (272:27): [True: 608, False: 0]
  ------------------
  273|  43.2k|        return func(callable, _PyTuple_ITEMS(tuple), nargs, NULL);
  ------------------
  |  |   26|  43.2k|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|  86.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 43.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|  43.2k|    }
  275|       |
  276|       |    /* Convert arguments & call */
  277|      0|    PyObject *const *args;
  278|      0|    PyObject *kwnames;
  279|      0|    args = _PyStack_UnpackDict(tstate,
  280|      0|                               _PyTuple_ITEMS(tuple), nargs,
  ------------------
  |  |   26|      0|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|      0|                               kwargs, &kwnames);
  282|      0|    if (args == NULL) {
  ------------------
  |  Branch (282:9): [True: 0, False: 0]
  ------------------
  283|      0|        return NULL;
  284|      0|    }
  285|      0|    PyObject *result = func(callable, args,
  286|      0|                            nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
  ------------------
  |  |  287|      0|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  287|      0|    _PyStack_UnpackDict_Free(args, nargs, kwnames);
  288|       |
  289|       |    return _Py_CheckFunctionResult(tstate, callable, result, NULL);
  290|      0|}
call.c:_PyObject_CallFunctionVa:
  519|  93.4k|{
  520|  93.4k|    PyObject* small_stack[_PY_FASTCALL_SMALL_STACK];
  521|  93.4k|    const Py_ssize_t small_stack_len = Py_ARRAY_LENGTH(small_stack);
  ------------------
  |  |  221|  93.4k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  522|  93.4k|    PyObject **stack;
  523|  93.4k|    Py_ssize_t nargs, i;
  524|  93.4k|    PyObject *result;
  525|       |
  526|  93.4k|    if (callable == NULL) {
  ------------------
  |  Branch (526:9): [True: 0, False: 93.4k]
  ------------------
  527|      0|        return null_error(tstate);
  528|      0|    }
  529|       |
  530|  93.4k|    if (!format || !*format) {
  ------------------
  |  Branch (530:9): [True: 2.00k, False: 91.4k]
  |  Branch (530:20): [True: 2, False: 91.4k]
  ------------------
  531|  2.00k|        return _PyObject_CallNoArgsTstate(tstate, callable);
  532|  2.00k|    }
  533|       |
  534|  91.4k|    stack = _Py_VaBuildStack(small_stack, small_stack_len,
  535|  91.4k|                             format, va, &nargs);
  536|  91.4k|    if (stack == NULL) {
  ------------------
  |  Branch (536:9): [True: 0, False: 91.4k]
  ------------------
  537|      0|        return NULL;
  538|      0|    }
  539|  91.4k|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, callable);
  ------------------
  |  |   80|  91.4k|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
  540|  91.4k|    if (nargs == 1 && PyTuple_Check(stack[0])) {
  ------------------
  |  |   27|    160|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    160|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 158]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (540:9): [True: 160, False: 91.2k]
  ------------------
  541|       |        /* Special cases for backward compatibility:
  542|       |           - PyObject_CallFunction(func, "O", tuple) calls func(*tuple)
  543|       |           - PyObject_CallFunction(func, "(OOO)", arg1, arg2, arg3) calls
  544|       |             func(*(arg1, arg2, arg3)): func(arg1, arg2, arg3) */
  545|      2|        PyObject *args = stack[0];
  546|      2|        result = _PyObject_VectorcallTstate(tstate, callable,
  547|      2|                                            _PyTuple_ITEMS(args),
  ------------------
  |  |   26|      2|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|      4|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  548|      2|                                            PyTuple_GET_SIZE(args),
  ------------------
  |  |   27|      2|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|      2|                                            NULL);
  550|      2|    }
  551|  91.4k|    else {
  552|  91.4k|        result = _PyObject_VectorcallTstate(tstate, callable,
  553|  91.4k|                                            stack, nargs, NULL);
  554|  91.4k|    }
  555|       |
  556|   546k|    for (i = 0; i < nargs; ++i) {
  ------------------
  |  Branch (556:17): [True: 455k, False: 91.4k]
  ------------------
  557|   455k|        Py_DECREF(stack[i]);
  ------------------
  |  |  430|   455k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   455k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   455k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|   455k|    }
  559|  91.4k|    if (stack != small_stack) {
  ------------------
  |  Branch (559:9): [True: 12, False: 91.3k]
  ------------------
  560|     12|        PyMem_Free(stack);
  561|     12|    }
  562|  91.4k|    return result;
  563|  91.4k|}
call.c:callmethod:
  617|  2.20k|{
  618|  2.20k|    assert(callable != NULL);
  ------------------
  |  Branch (618:5): [True: 2.20k, False: 0]
  ------------------
  619|  2.20k|    if (!PyCallable_Check(callable)) {
  ------------------
  |  Branch (619:9): [True: 0, False: 2.20k]
  ------------------
  620|      0|        _PyErr_Format(tstate, PyExc_TypeError,
  621|      0|                      "attribute of type '%.200s' is not callable",
  622|      0|                      Py_TYPE(callable)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|      0|        return NULL;
  624|      0|    }
  625|       |
  626|  2.20k|    return _PyObject_CallFunctionVa(tstate, callable, format, va);
  627|  2.20k|}
call.c:object_vacall:
  772|  48.8k|{
  773|  48.8k|    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
  774|  48.8k|    PyObject **stack;
  775|  48.8k|    Py_ssize_t nargs;
  776|  48.8k|    PyObject *result;
  777|  48.8k|    Py_ssize_t i;
  778|  48.8k|    va_list countva;
  779|       |
  780|  48.8k|    if (callable == NULL) {
  ------------------
  |  Branch (780:9): [True: 0, False: 48.8k]
  ------------------
  781|      0|        return null_error(tstate);
  782|      0|    }
  783|       |
  784|       |    /* Count the number of arguments */
  785|  48.8k|    va_copy(countva, vargs);
  786|  48.8k|    nargs = base ? 1 : 0;
  ------------------
  |  Branch (786:13): [True: 0, False: 48.8k]
  ------------------
  787|   389k|    while (1) {
  ------------------
  |  Branch (787:12): [True: 389k, Folded]
  ------------------
  788|   389k|        PyObject *arg = va_arg(countva, PyObject *);
  789|   389k|        if (arg == NULL) {
  ------------------
  |  Branch (789:13): [True: 48.8k, False: 340k]
  ------------------
  790|  48.8k|            break;
  791|  48.8k|        }
  792|   340k|        nargs++;
  793|   340k|    }
  794|  48.8k|    va_end(countva);
  795|       |
  796|       |    /* Copy arguments */
  797|  48.8k|    if (nargs <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
  ------------------
  |  |  221|  48.8k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (797:9): [True: 394, False: 48.4k]
  ------------------
  798|    394|        stack = small_stack;
  799|    394|    }
  800|  48.4k|    else {
  801|  48.4k|        stack = PyMem_Malloc(nargs * sizeof(stack[0]));
  802|  48.4k|        if (stack == NULL) {
  ------------------
  |  Branch (802:13): [True: 0, False: 48.4k]
  ------------------
  803|      0|            PyErr_NoMemory();
  804|      0|            return NULL;
  805|      0|        }
  806|  48.4k|    }
  807|       |
  808|  48.8k|    i = 0;
  809|  48.8k|    if (base) {
  ------------------
  |  Branch (809:9): [True: 0, False: 48.8k]
  ------------------
  810|      0|        stack[i++] = base;
  811|      0|    }
  812|       |
  813|   389k|    for (; i < nargs; ++i) {
  ------------------
  |  Branch (813:12): [True: 340k, False: 48.8k]
  ------------------
  814|   340k|        stack[i] = va_arg(vargs, PyObject *);
  815|   340k|    }
  816|       |
  817|       |#ifdef Py_STATS
  818|       |    if (PyFunction_Check(callable)) {
  819|       |        EVAL_CALL_STAT_INC(EVAL_CALL_API);
  820|       |    }
  821|       |#endif
  822|       |    /* Call the function */
  823|  48.8k|    result = _PyObject_VectorcallTstate(tstate, callable, stack, nargs, NULL);
  824|       |
  825|  48.8k|    if (stack != small_stack) {
  ------------------
  |  Branch (825:9): [True: 48.4k, False: 394]
  ------------------
  826|  48.4k|        PyMem_Free(stack);
  827|  48.4k|    }
  828|  48.8k|    return result;
  829|  48.8k|}

PyCapsule_New:
   62|  42.8k|{
   63|  42.8k|    PyCapsule *capsule;
   64|       |
   65|  42.8k|    if (!pointer) {
  ------------------
  |  Branch (65:9): [True: 0, False: 42.8k]
  ------------------
   66|      0|        PyErr_SetString(PyExc_ValueError, "PyCapsule_New called with null pointer");
   67|      0|        return NULL;
   68|      0|    }
   69|       |
   70|  42.8k|    capsule = PyObject_GC_New(PyCapsule, &PyCapsule_Type);
  ------------------
  |  |  181|  42.8k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  42.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   71|  42.8k|    if (capsule == NULL) {
  ------------------
  |  Branch (71:9): [True: 0, False: 42.8k]
  ------------------
   72|      0|        return NULL;
   73|      0|    }
   74|       |
   75|  42.8k|    capsule->pointer = pointer;
   76|  42.8k|    capsule->name = name;
   77|  42.8k|    capsule->context = NULL;
   78|  42.8k|    capsule->destructor = destructor;
   79|  42.8k|    capsule->traverse_func = NULL;
   80|  42.8k|    capsule->clear_func = NULL;
   81|       |    // Only track the object by the GC when _PyCapsule_SetTraverse() is called
   82|       |
   83|  42.8k|    return (PyObject *)capsule;
   84|  42.8k|}
PyCapsule_IsValid:
   89|     13|{
   90|     13|    PyCapsule *capsule = (PyCapsule *)op;
   91|       |
   92|     13|    return (capsule != NULL &&
  ------------------
  |  Branch (92:13): [True: 13, False: 0]
  ------------------
   93|     13|            PyCapsule_CheckExact(capsule) &&
  ------------------
  |  |   25|     13|#define PyCapsule_CheckExact(op) Py_IS_TYPE((op), &PyCapsule_Type)
  |  |  ------------------
  |  |  |  |  215|     26|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 13, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|     13|            capsule->pointer != NULL &&
  ------------------
  |  Branch (94:13): [True: 13, False: 0]
  ------------------
   95|     13|            name_matches(capsule->name, name));
  ------------------
  |  Branch (95:13): [True: 13, False: 0]
  ------------------
   96|     13|}
PyCapsule_GetPointer:
  101|  62.4k|{
  102|  62.4k|    if (!is_legal_capsule(op, "PyCapsule_GetPointer")) {
  ------------------
  |  |   44|  62.4k|    (_is_legal_capsule(capsule, \
  |  |   45|  62.4k|     name " called with invalid PyCapsule object"))
  ------------------
  |  Branch (102:9): [True: 0, False: 62.4k]
  ------------------
  103|      0|        return NULL;
  104|      0|    }
  105|  62.4k|    PyCapsule *capsule = (PyCapsule *)op;
  106|       |
  107|  62.4k|    if (!name_matches(name, capsule->name)) {
  ------------------
  |  Branch (107:9): [True: 0, False: 62.4k]
  ------------------
  108|      0|        PyErr_SetString(PyExc_ValueError, "PyCapsule_GetPointer called with incorrect name");
  109|      0|        return NULL;
  110|      0|    }
  111|       |
  112|  62.4k|    return capsule->pointer;
  113|  62.4k|}
PyCapsule_Import:
  232|      1|{
  233|      1|    PyObject *object = NULL;
  234|      1|    void *return_value = NULL;
  235|      1|    char *name_dup = _PyMem_Strdup(name);
  236|       |
  237|      1|    if (!name_dup) {
  ------------------
  |  Branch (237:9): [True: 0, False: 1]
  ------------------
  238|      0|        return PyErr_NoMemory();
  239|      0|    }
  240|       |
  241|      1|    char *trace = name_dup;
  242|      2|    while (1) {
  ------------------
  |  Branch (242:12): [True: 2, Folded]
  ------------------
  243|      2|        char *dot = strchr(trace, '.');
  244|      2|        if (dot) {
  ------------------
  |  Branch (244:13): [True: 1, False: 1]
  ------------------
  245|      1|            *dot = '\0';
  246|      1|        }
  247|      2|        if (object) {
  ------------------
  |  Branch (247:13): [True: 1, False: 1]
  ------------------
  248|      1|            PyObject *attr;
  249|      1|            if (PyObject_GetOptionalAttrString(object, trace, &attr) < 0) {
  ------------------
  |  Branch (249:17): [True: 0, False: 1]
  ------------------
  250|      0|                Py_CLEAR(object);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  251|      0|                break;
  252|      0|            }
  253|      1|            Py_SETREF(object, attr);
  ------------------
  |  |  354|      1|    do { \
  |  |  355|      1|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      1|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      1|        *_tmp_dst_ptr = (src); \
  |  |  358|      1|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  254|      1|        }
  255|      2|        if (!dot) {
  ------------------
  |  Branch (255:13): [True: 1, False: 1]
  ------------------
  256|       |            // We are done
  257|      1|            break;
  258|      1|        }
  259|       |
  260|      1|        if (!object) {
  ------------------
  |  Branch (260:13): [True: 1, False: 0]
  ------------------
  261|      1|            object = PyImport_ImportModule(name_dup);
  262|      1|            if (!object) {
  ------------------
  |  Branch (262:17): [True: 0, False: 1]
  ------------------
  263|      0|                break;
  264|      0|            }
  265|      1|        }
  266|      1|        *dot = '.';
  267|      1|        trace = dot + 1;
  268|      1|    }
  269|       |
  270|       |    /* compare attribute name to module.name by hand */
  271|      1|    if (PyCapsule_IsValid(object, name)) {
  ------------------
  |  Branch (271:9): [True: 1, False: 0]
  ------------------
  272|      1|        PyCapsule *capsule = (PyCapsule *)object;
  273|      1|        return_value = capsule->pointer;
  274|      1|    }
  275|      0|    else if (!PyErr_Occurred()) {
  ------------------
  |  Branch (275:14): [True: 0, False: 0]
  ------------------
  276|      0|        PyErr_Format(PyExc_AttributeError,
  277|      0|            "PyCapsule_Import \"%s\" is not valid",
  278|      0|            name);
  279|      0|    }
  280|       |
  281|      1|    Py_XDECREF(object);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|      1|    PyMem_Free(name_dup);
  283|      1|    return return_value;
  284|      1|}
capsule.c:name_matches:
   49|  62.4k|name_matches(const char *name1, const char *name2) {
   50|       |    /* if either is NULL, */
   51|  62.4k|    if (!name1 || !name2) {
  ------------------
  |  Branch (51:9): [True: 0, False: 62.4k]
  |  Branch (51:19): [True: 0, False: 62.4k]
  ------------------
   52|       |        /* they're only the same if they're both NULL. */
   53|      0|        return name1 == name2;
   54|      0|    }
   55|  62.4k|    return !strcmp(name1, name2);
   56|  62.4k|}
capsule.c:_is_legal_capsule:
   27|  62.4k|{
   28|  62.4k|    if (!op || !PyCapsule_CheckExact(op)) {
  ------------------
  |  |   25|  62.4k|#define PyCapsule_CheckExact(op) Py_IS_TYPE((op), &PyCapsule_Type)
  |  |  ------------------
  |  |  |  |  215|  62.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  62.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  62.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (28:9): [True: 0, False: 62.4k]
  |  Branch (28:16): [True: 0, False: 62.4k]
  ------------------
   29|      0|        goto error;
   30|      0|    }
   31|  62.4k|    PyCapsule *capsule = (PyCapsule *)op;
   32|       |
   33|  62.4k|    if (capsule->pointer == NULL) {
  ------------------
  |  Branch (33:9): [True: 0, False: 62.4k]
  ------------------
   34|      0|        goto error;
   35|      0|    }
   36|  62.4k|    return 1;
   37|       |
   38|      0|error:
   39|      0|    PyErr_SetString(PyExc_ValueError, invalid_capsule);
   40|      0|    return 0;
   41|  62.4k|}
capsule.c:capsule_dealloc:
  289|  42.8k|{
  290|  42.8k|    PyCapsule *capsule = _PyCapsule_CAST(op);
  ------------------
  |  |   22|  42.8k|#define _PyCapsule_CAST(op)     ((PyCapsule *)(op))
  ------------------
  291|  42.8k|    PyObject_GC_UnTrack(op);
  292|  42.8k|    if (capsule->destructor) {
  ------------------
  |  Branch (292:9): [True: 12, False: 42.8k]
  ------------------
  293|     12|        capsule->destructor(op);
  294|     12|    }
  295|  42.8k|    PyObject_GC_Del(op);
  296|  42.8k|}

PyCell_New:
   12|  1.50k|{
   13|  1.50k|    PyCellObject *op;
   14|       |
   15|  1.50k|    op = (PyCellObject *)PyObject_GC_New(PyCellObject, &PyCell_Type);
  ------------------
  |  |  181|  1.50k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   16|  1.50k|    if (op == NULL)
  ------------------
  |  Branch (16:9): [True: 0, False: 1.50k]
  ------------------
   17|      0|        return NULL;
   18|  1.50k|    op->ob_ref = Py_XNewRef(obj);
  ------------------
  |  |  551|  1.50k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   19|       |
   20|  1.50k|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|  1.50k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   21|  1.50k|    return (PyObject *)op;
   22|  1.50k|}
PyCell_Set:
   67|    451|{
   68|    451|    if (!PyCell_Check(op)) {
  ------------------
  |  |   18|    451|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|    451|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    451|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    451|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (68:9): [True: 0, False: 451]
  ------------------
   69|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
   70|      0|        return -1;
   71|      0|    }
   72|    451|    PyCell_SetTakeRef((PyCellObject *)op, Py_XNewRef(value));
  ------------------
  |  |  551|    451|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    451|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    451|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|    451|    return 0;
   74|    451|}
cellobject.c:cell_dealloc:
   78|  1.35k|{
   79|  1.35k|    PyCellObject *op = _PyCell_CAST(self);
  ------------------
  |  |    8|  1.35k|#define _PyCell_CAST(op) _Py_CAST(PyCellObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   80|  1.35k|    _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|  1.35k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|  1.35k|    Py_XDECREF(op->ob_ref);
  ------------------
  |  |  524|  1.35k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|  1.35k|    PyObject_GC_Del(op);
   83|  1.35k|}
cellobject.c:cell_traverse:
  132|  3.72k|{
  133|  3.72k|    PyCellObject *op = _PyCell_CAST(self);
  ------------------
  |  |    8|  3.72k|#define _PyCell_CAST(op) _Py_CAST(PyCellObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  3.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  134|  3.72k|    Py_VISIT(op->ob_ref);
  ------------------
  |  |  194|  3.72k|    do {                                                                \
  |  |  195|  3.72k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 3.72k, False: 2]
  |  |  ------------------
  |  |  196|  3.72k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  3.72k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  3.72k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 3.72k]
  |  |  ------------------
  |  |  198|  3.72k|                return vret;                                            \
  |  |  199|  3.72k|        }                                                               \
  |  |  200|  3.72k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 3.72k]
  |  |  ------------------
  ------------------
  135|  3.72k|    return 0;
  136|  3.72k|}
cellobject.c:cell_clear:
  140|    594|{
  141|    594|    PyCellObject *op = _PyCell_CAST(self);
  ------------------
  |  |    8|    594|#define _PyCell_CAST(op) _Py_CAST(PyCellObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    594|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  142|       |    Py_CLEAR(op->ob_ref);
  ------------------
  |  |  484|    594|    do { \
  |  |  485|    594|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    594|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    594|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    594|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    594|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    594|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 594, False: 0]
  |  |  ------------------
  |  |  488|    594|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    594|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    594|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    594|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    594|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    594|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    594|        } \
  |  |  491|    594|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 594]
  |  |  ------------------
  ------------------
  143|    594|    return 0;
  144|    594|}

PyMethod_New:
   66|  2.32k|{
   67|  2.32k|    if (self == NULL) {
  ------------------
  |  Branch (67:9): [True: 0, False: 2.32k]
  ------------------
   68|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
   69|      0|        return NULL;
   70|      0|    }
   71|  2.32k|    PyMethodObject *im = _Py_FREELIST_POP(PyMethodObject, pymethodobjects);
  ------------------
  |  |   43|  2.32k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  2.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   72|  2.32k|    if (im == NULL) {
  ------------------
  |  Branch (72:9): [True: 157, False: 2.17k]
  ------------------
   73|    157|        im = PyObject_GC_New(PyMethodObject, &PyMethod_Type);
  ------------------
  |  |  181|    157|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    157|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   74|    157|        if (im == NULL) {
  ------------------
  |  Branch (74:13): [True: 0, False: 157]
  ------------------
   75|      0|            return NULL;
   76|      0|        }
   77|    157|    }
   78|  2.32k|    im->im_weakreflist = NULL;
   79|  2.32k|    im->im_func = Py_NewRef(func);
  ------------------
  |  |  550|  2.32k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|  2.32k|    im->im_self = Py_NewRef(self);
  ------------------
  |  |  550|  2.32k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|  2.32k|    im->vectorcall = method_vectorcall;
   82|  2.32k|    _PyObject_GC_TRACK(im);
  ------------------
  |  |  505|  2.32k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|  2.32k|    return (PyObject *)im;
   84|  2.32k|}
classobject.c:method_vectorcall:
   49|  38.9k|{
   50|  38.9k|    assert(Py_IS_TYPE(method, &PyMethod_Type));
  ------------------
  |  Branch (50:5): [True: 38.9k, False: 0]
  ------------------
   51|       |
   52|  38.9k|    PyThreadState *tstate = _PyThreadState_GET();
   53|  38.9k|    PyObject *self = PyMethod_GET_SELF(method);
  ------------------
  |  |   42|  38.9k|#define PyMethod_GET_SELF(meth) PyMethod_GET_SELF(_PyObject_CAST(meth))
  |  |  ------------------
  |  |  |  |  171|  38.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  38.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   54|  38.9k|    PyObject *func = PyMethod_GET_FUNCTION(method);
  ------------------
  |  |   37|  38.9k|#define PyMethod_GET_FUNCTION(meth) PyMethod_GET_FUNCTION(_PyObject_CAST(meth))
  |  |  ------------------
  |  |  |  |  171|  38.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  38.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   55|  38.9k|    return _PyObject_VectorcallPrepend(tstate, func, self, args, nargsf, kwnames);
   56|  38.9k|}
classobject.c:method_dealloc:
  214|  2.19k|{
  215|  2.19k|    PyMethodObject *im = _PyMethodObject_CAST(self);
  ------------------
  |  |   16|  2.19k|#define _PyMethodObject_CAST(op) _Py_CAST(PyMethodObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  216|  2.19k|    _PyObject_GC_UNTRACK(im);
  ------------------
  |  |  507|  2.19k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|  2.19k|    FT_CLEAR_WEAKREFS(self, im->im_weakreflist);
  ------------------
  |  |   47|  2.19k|    do {                                            \
  |  |   48|  2.19k|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|  2.19k|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|  2.19k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 2.19k]
  |  |  ------------------
  ------------------
  |  Branch (217:5): [True: 2.19k, False: 0]
  ------------------
  218|  2.19k|    Py_DECREF(im->im_func);
  ------------------
  |  |  430|  2.19k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|  2.19k|    Py_XDECREF(im->im_self);
  ------------------
  |  |  524|  2.19k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|  2.19k|    assert(Py_IS_TYPE(self, &PyMethod_Type));
  ------------------
  |  Branch (220:5): [True: 2.19k, False: 0]
  ------------------
  221|  2.19k|    _Py_FREELIST_FREE(pymethodobjects, (PyObject *)im, PyObject_GC_Del);
  ------------------
  |  |   35|  2.19k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  2.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  2.19k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   33|  2.19k|#  define Py_pymethodobjects_MAXFREELIST 20
  |  |  ------------------
  ------------------
  222|  2.19k|}
classobject.c:method_traverse:
  299|  2.38k|{
  300|  2.38k|    PyMethodObject *im = _PyMethodObject_CAST(self);
  ------------------
  |  |   16|  2.38k|#define _PyMethodObject_CAST(op) _Py_CAST(PyMethodObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  301|  2.38k|    Py_VISIT(im->im_func);
  ------------------
  |  |  194|  2.38k|    do {                                                                \
  |  |  195|  2.38k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2.38k, False: 0]
  |  |  ------------------
  |  |  196|  2.38k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  2.38k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2.38k]
  |  |  ------------------
  |  |  198|  2.38k|                return vret;                                            \
  |  |  199|  2.38k|        }                                                               \
  |  |  200|  2.38k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2.38k]
  |  |  ------------------
  ------------------
  302|  2.38k|    Py_VISIT(im->im_self);
  ------------------
  |  |  194|  2.38k|    do {                                                                \
  |  |  195|  2.38k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2.38k, False: 0]
  |  |  ------------------
  |  |  196|  2.38k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  2.38k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2.38k]
  |  |  ------------------
  |  |  198|  2.38k|                return vret;                                            \
  |  |  199|  2.38k|        }                                                               \
  |  |  200|  2.38k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2.38k]
  |  |  ------------------
  ------------------
  303|  2.38k|    return 0;
  304|  2.38k|}
classobject.c:method_descr_get:
  308|      2|{
  309|      2|    Py_INCREF(meth);
  ------------------
  |  |  310|      2|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|      2|    return meth;
  311|      2|}

bytearrayobject.c:bytearray_append:
 1240|   388k|{
 1241|   388k|    PyObject *return_value = NULL;
 1242|   388k|    int item;
 1243|       |
 1244|   388k|    if (!_getbytevalue(arg, &item)) {
  ------------------
  |  Branch (1244:9): [True: 0, False: 388k]
  ------------------
 1245|      0|        goto exit;
 1246|      0|    }
 1247|   388k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|   388k|    {
  ------------------
 1248|   388k|    return_value = bytearray_append_impl((PyByteArrayObject *)self, item);
 1249|   388k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   388k|    }
  ------------------
 1250|       |
 1251|   388k|exit:
 1252|   388k|    return return_value;
 1253|   388k|}
bytearrayobject.c:bytearray_extend:
 1272|   203k|{
 1273|   203k|    PyObject *return_value = NULL;
 1274|       |
 1275|   203k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|   203k|    {
  ------------------
 1276|   203k|    return_value = bytearray_extend_impl((PyByteArrayObject *)self, iterable_of_ints);
 1277|   203k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   203k|    }
  ------------------
 1278|       |
 1279|   203k|    return return_value;
 1280|   203k|}
bytearrayobject.c:bytearray_find:
  130|     78|{
  131|     78|    PyObject *return_value = NULL;
  132|     78|    PyObject *sub;
  133|     78|    Py_ssize_t start = 0;
  134|     78|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|     78|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  135|       |
  136|     78|    if (!_PyArg_CheckPositional("find", nargs, 1, 3)) {
  ------------------
  |  |   31|     78|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 78, False: 0]
  |  |  |  Branch (31:27): [True: 78, False: 0]
  |  |  ------------------
  |  |   32|     78|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  137|      0|        goto exit;
  138|      0|    }
  139|     78|    sub = args[0];
  140|     78|    if (nargs < 2) {
  ------------------
  |  Branch (140:9): [True: 0, False: 78]
  ------------------
  141|      0|        goto skip_optional;
  142|      0|    }
  143|     78|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (143:9): [True: 0, False: 78]
  ------------------
  144|      0|        goto exit;
  145|      0|    }
  146|     78|    if (nargs < 3) {
  ------------------
  |  Branch (146:9): [True: 78, False: 0]
  ------------------
  147|     78|        goto skip_optional;
  148|     78|    }
  149|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (149:9): [True: 0, False: 0]
  ------------------
  150|      0|        goto exit;
  151|      0|    }
  152|     78|skip_optional:
  153|     78|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|     78|    {
  ------------------
  154|     78|    return_value = bytearray_find_impl((PyByteArrayObject *)self, sub, start, end);
  155|     78|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     78|    }
  ------------------
  156|       |
  157|     78|exit:
  158|     78|    return return_value;
  159|     78|}
bytearrayobject.c:bytearray_take_bytes:
  653|   239k|{
  654|   239k|    PyObject *return_value = NULL;
  655|   239k|    PyObject *n = Py_None;
  ------------------
  |  |  616|   239k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  656|       |
  657|   239k|    if (!_PyArg_CheckPositional("take_bytes", nargs, 0, 1)) {
  ------------------
  |  |   31|   239k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 239k, False: 0]
  |  |  |  Branch (31:27): [True: 239k, False: 0]
  |  |  ------------------
  |  |   32|   239k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  658|      0|        goto exit;
  659|      0|    }
  660|   239k|    if (nargs < 1) {
  ------------------
  |  Branch (660:9): [True: 239k, False: 0]
  ------------------
  661|   239k|        goto skip_optional;
  662|   239k|    }
  663|      0|    n = args[0];
  664|   239k|skip_optional:
  665|   239k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|   239k|    {
  ------------------
  666|   239k|    return_value = bytearray_take_bytes_impl((PyByteArrayObject *)self, n);
  667|   239k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   239k|    }
  ------------------
  668|       |
  669|   239k|exit:
  670|   239k|    return return_value;
  671|   239k|}
bytearrayobject.c:bytearray_translate:
  695|      7|{
  696|      7|    PyObject *return_value = NULL;
  697|      7|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  698|       |
  699|      7|    #define NUM_KEYWORDS 1
  700|      7|    static struct {
  701|      7|        PyGC_Head _this_is_not_used;
  702|      7|        PyObject_VAR_HEAD
  703|      7|        Py_hash_t ob_hash;
  704|      7|        PyObject *ob_item[NUM_KEYWORDS];
  705|      7|    } _kwtuple = {
  706|      7|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      7|    {                                     \
  |  |   98|      7|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      7|    {                               \
  |  |  |  |   91|      7|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      7|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      7|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      7|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      7|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      7|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      7|        (type)                      \
  |  |  |  |   93|      7|    },
  |  |  ------------------
  |  |   99|      7|        (size)                            \
  |  |  100|      7|    },
  ------------------
  707|      7|        .ob_hash = -1,
  708|      7|        .ob_item = { &_Py_ID(delete), },
  ------------------
  |  |  936|      7|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      7|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      7|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  709|      7|    };
  710|      7|    #undef NUM_KEYWORDS
  711|      7|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  712|       |
  713|       |    #else  // !Py_BUILD_CORE
  714|       |    #  define KWTUPLE NULL
  715|       |    #endif  // !Py_BUILD_CORE
  716|       |
  717|      7|    static const char * const _keywords[] = {"", "delete", NULL};
  718|      7|    static _PyArg_Parser _parser = {
  719|      7|        .keywords = _keywords,
  720|      7|        .fname = "translate",
  721|      7|        .kwtuple = KWTUPLE,
  ------------------
  |  |  711|      7|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  722|      7|    };
  723|      7|    #undef KWTUPLE
  724|      7|    PyObject *argsbuf[2];
  725|      7|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (725:36): [True: 0, False: 7]
  ------------------
  726|      7|    PyObject *table;
  727|      7|    PyObject *deletechars = NULL;
  728|       |
  729|      7|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      7|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 7, False: 0]
  |  |  ------------------
  |  |   89|      7|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 7, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 7]
  |  |  |  Branch (89:43): [True: 7, False: 0]
  |  |  |  Branch (89:67): [True: 7, False: 0]
  |  |  ------------------
  |  |   90|      7|      (args) : \
  |  |   91|      7|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  730|      7|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  731|      7|    if (!args) {
  ------------------
  |  Branch (731:9): [True: 0, False: 7]
  ------------------
  732|      0|        goto exit;
  733|      0|    }
  734|      7|    table = args[0];
  735|      7|    if (!noptargs) {
  ------------------
  |  Branch (735:9): [True: 7, False: 0]
  ------------------
  736|      7|        goto skip_optional_pos;
  737|      7|    }
  738|      0|    deletechars = args[1];
  739|      7|skip_optional_pos:
  740|      7|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      7|    {
  ------------------
  741|      7|    return_value = bytearray_translate_impl((PyByteArrayObject *)self, table, deletechars);
  742|      7|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      7|    }
  ------------------
  743|       |
  744|      7|exit:
  745|      7|    return return_value;
  746|      7|}
bytearrayobject.c:bytearray___init__:
   19|   239k|{
   20|   239k|    int return_value = -1;
   21|   239k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   22|       |
   23|   239k|    #define NUM_KEYWORDS 3
   24|   239k|    static struct {
   25|   239k|        PyGC_Head _this_is_not_used;
   26|   239k|        PyObject_VAR_HEAD
   27|   239k|        Py_hash_t ob_hash;
   28|   239k|        PyObject *ob_item[NUM_KEYWORDS];
   29|   239k|    } _kwtuple = {
   30|   239k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|   239k|    {                                     \
  |  |   98|   239k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|   239k|    {                               \
  |  |  |  |   91|   239k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|   239k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|   239k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|   239k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|   239k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|   239k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|   239k|        (type)                      \
  |  |  |  |   93|   239k|    },
  |  |  ------------------
  |  |   99|   239k|        (size)                            \
  |  |  100|   239k|    },
  ------------------
   31|   239k|        .ob_hash = -1,
   32|   239k|        .ob_item = { &_Py_ID(source), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|   239k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   239k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   239k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(source), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|   239k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   239k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   239k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(source), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|   239k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   239k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   239k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   33|   239k|    };
   34|   239k|    #undef NUM_KEYWORDS
   35|   239k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   36|       |
   37|       |    #else  // !Py_BUILD_CORE
   38|       |    #  define KWTUPLE NULL
   39|       |    #endif  // !Py_BUILD_CORE
   40|       |
   41|   239k|    static const char * const _keywords[] = {"source", "encoding", "errors", NULL};
   42|   239k|    static _PyArg_Parser _parser = {
   43|   239k|        .keywords = _keywords,
   44|   239k|        .fname = "bytearray",
   45|   239k|        .kwtuple = KWTUPLE,
  ------------------
  |  |   35|   239k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   46|   239k|    };
   47|   239k|    #undef KWTUPLE
   48|   239k|    PyObject *argsbuf[3];
   49|   239k|    PyObject * const *fastargs;
   50|   239k|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|   239k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|   239k|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (51:36): [True: 0, False: 239k]
  ------------------
   52|   239k|    PyObject *arg = NULL;
   53|   239k|    const char *encoding = NULL;
   54|   239k|    const char *errors = NULL;
   55|       |
   56|   239k|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|   239k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 239k, Folded]
  |  |  |  Branch (88:23): [True: 239k, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|   478k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 239k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 239k]
  |  |  |  Branch (89:43): [True: 239k, False: 0]
  |  |  |  Branch (89:67): [True: 239k, False: 0]
  |  |  |  Branch (89:68): [True: 239k, False: 0]
  |  |  ------------------
  |  |   90|   478k|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 239k, False: 0]
  |  |  ------------------
  |  |   91|   239k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   57|   239k|            /*minpos*/ 0, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   58|   239k|    if (!fastargs) {
  ------------------
  |  Branch (58:9): [True: 0, False: 239k]
  ------------------
   59|      0|        goto exit;
   60|      0|    }
   61|   239k|    if (!noptargs) {
  ------------------
  |  Branch (61:9): [True: 239k, False: 18]
  ------------------
   62|   239k|        goto skip_optional_pos;
   63|   239k|    }
   64|     18|    if (fastargs[0]) {
  ------------------
  |  Branch (64:9): [True: 18, False: 0]
  ------------------
   65|     18|        arg = fastargs[0];
   66|     18|        if (!--noptargs) {
  ------------------
  |  Branch (66:13): [True: 18, False: 0]
  ------------------
   67|     18|            goto skip_optional_pos;
   68|     18|        }
   69|     18|    }
   70|      0|    if (fastargs[1]) {
  ------------------
  |  Branch (70:9): [True: 0, False: 0]
  ------------------
   71|      0|        if (!PyUnicode_Check(fastargs[1])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (71:13): [True: 0, False: 0]
  ------------------
   72|      0|            _PyArg_BadArgument("bytearray", "argument 'encoding'", "str", fastargs[1]);
   73|      0|            goto exit;
   74|      0|        }
   75|      0|        Py_ssize_t encoding_length;
   76|      0|        encoding = PyUnicode_AsUTF8AndSize(fastargs[1], &encoding_length);
   77|      0|        if (encoding == NULL) {
  ------------------
  |  Branch (77:13): [True: 0, False: 0]
  ------------------
   78|      0|            goto exit;
   79|      0|        }
   80|      0|        if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (80:13): [True: 0, False: 0]
  ------------------
   81|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
   82|      0|            goto exit;
   83|      0|        }
   84|      0|        if (!--noptargs) {
  ------------------
  |  Branch (84:13): [True: 0, False: 0]
  ------------------
   85|      0|            goto skip_optional_pos;
   86|      0|        }
   87|      0|    }
   88|      0|    if (!PyUnicode_Check(fastargs[2])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (88:9): [True: 0, False: 0]
  ------------------
   89|      0|        _PyArg_BadArgument("bytearray", "argument 'errors'", "str", fastargs[2]);
   90|      0|        goto exit;
   91|      0|    }
   92|      0|    Py_ssize_t errors_length;
   93|      0|    errors = PyUnicode_AsUTF8AndSize(fastargs[2], &errors_length);
   94|      0|    if (errors == NULL) {
  ------------------
  |  Branch (94:9): [True: 0, False: 0]
  ------------------
   95|      0|        goto exit;
   96|      0|    }
   97|      0|    if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (97:9): [True: 0, False: 0]
  ------------------
   98|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
   99|      0|        goto exit;
  100|      0|    }
  101|   239k|skip_optional_pos:
  102|   239k|    return_value = bytearray___init___impl((PyByteArrayObject *)self, arg, encoding, errors);
  103|       |
  104|   239k|exit:
  105|   239k|    return return_value;
  106|   239k|}

bytesobject.c:bytes_decode:
 1092|  18.2k|{
 1093|  18.2k|    PyObject *return_value = NULL;
 1094|  18.2k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1095|       |
 1096|  18.2k|    #define NUM_KEYWORDS 2
 1097|  18.2k|    static struct {
 1098|  18.2k|        PyGC_Head _this_is_not_used;
 1099|  18.2k|        PyObject_VAR_HEAD
 1100|  18.2k|        Py_hash_t ob_hash;
 1101|  18.2k|        PyObject *ob_item[NUM_KEYWORDS];
 1102|  18.2k|    } _kwtuple = {
 1103|  18.2k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  18.2k|    {                                     \
  |  |   98|  18.2k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  18.2k|    {                               \
  |  |  |  |   91|  18.2k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  18.2k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  18.2k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  18.2k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  18.2k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  18.2k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  18.2k|        (type)                      \
  |  |  |  |   93|  18.2k|    },
  |  |  ------------------
  |  |   99|  18.2k|        (size)                            \
  |  |  100|  18.2k|    },
  ------------------
 1104|  18.2k|        .ob_hash = -1,
 1105|  18.2k|        .ob_item = { &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  18.2k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  18.2k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  18.2k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  18.2k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  18.2k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  18.2k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|  18.2k|    };
 1107|  18.2k|    #undef NUM_KEYWORDS
 1108|  18.2k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1109|       |
 1110|       |    #else  // !Py_BUILD_CORE
 1111|       |    #  define KWTUPLE NULL
 1112|       |    #endif  // !Py_BUILD_CORE
 1113|       |
 1114|  18.2k|    static const char * const _keywords[] = {"encoding", "errors", NULL};
 1115|  18.2k|    static _PyArg_Parser _parser = {
 1116|  18.2k|        .keywords = _keywords,
 1117|  18.2k|        .fname = "decode",
 1118|  18.2k|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1108|  18.2k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1119|  18.2k|    };
 1120|  18.2k|    #undef KWTUPLE
 1121|  18.2k|    PyObject *argsbuf[2];
 1122|  18.2k|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1122:36): [True: 0, False: 18.2k]
  ------------------
 1123|  18.2k|    const char *encoding = NULL;
 1124|  18.2k|    const char *errors = NULL;
 1125|       |
 1126|  18.2k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  18.2k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |   89|  18.2k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 18.2k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 18.2k]
  |  |  |  Branch (89:43): [True: 18.2k, False: 0]
  |  |  |  Branch (89:67): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |   90|  18.2k|      (args) : \
  |  |   91|  18.2k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1127|  18.2k|            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1128|  18.2k|    if (!args) {
  ------------------
  |  Branch (1128:9): [True: 0, False: 18.2k]
  ------------------
 1129|      0|        goto exit;
 1130|      0|    }
 1131|  18.2k|    if (!noptargs) {
  ------------------
  |  Branch (1131:9): [True: 0, False: 18.2k]
  ------------------
 1132|      0|        goto skip_optional_pos;
 1133|      0|    }
 1134|  18.2k|    if (args[0]) {
  ------------------
  |  Branch (1134:9): [True: 18.2k, False: 0]
  ------------------
 1135|  18.2k|        if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|  18.2k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  18.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1135:13): [True: 0, False: 18.2k]
  ------------------
 1136|      0|            _PyArg_BadArgument("decode", "argument 'encoding'", "str", args[0]);
 1137|      0|            goto exit;
 1138|      0|        }
 1139|  18.2k|        Py_ssize_t encoding_length;
 1140|  18.2k|        encoding = PyUnicode_AsUTF8AndSize(args[0], &encoding_length);
 1141|  18.2k|        if (encoding == NULL) {
  ------------------
  |  Branch (1141:13): [True: 0, False: 18.2k]
  ------------------
 1142|      0|            goto exit;
 1143|      0|        }
 1144|  18.2k|        if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (1144:13): [True: 0, False: 18.2k]
  ------------------
 1145|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1146|      0|            goto exit;
 1147|      0|        }
 1148|  18.2k|        if (!--noptargs) {
  ------------------
  |  Branch (1148:13): [True: 18.2k, False: 4]
  ------------------
 1149|  18.2k|            goto skip_optional_pos;
 1150|  18.2k|        }
 1151|  18.2k|    }
 1152|      4|    if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      4|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1152:9): [True: 0, False: 4]
  ------------------
 1153|      0|        _PyArg_BadArgument("decode", "argument 'errors'", "str", args[1]);
 1154|      0|        goto exit;
 1155|      0|    }
 1156|      4|    Py_ssize_t errors_length;
 1157|      4|    errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
 1158|      4|    if (errors == NULL) {
  ------------------
  |  Branch (1158:9): [True: 0, False: 4]
  ------------------
 1159|      0|        goto exit;
 1160|      0|    }
 1161|      4|    if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1161:9): [True: 0, False: 4]
  ------------------
 1162|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 1163|      0|        goto exit;
 1164|      0|    }
 1165|  18.2k|skip_optional_pos:
 1166|  18.2k|    return_value = bytes_decode_impl((PyBytesObject *)self, encoding, errors);
 1167|       |
 1168|  18.2k|exit:
 1169|  18.2k|    return return_value;
 1170|  18.2k|}
bytesobject.c:bytes_replace:
  817|     10|{
  818|     10|    PyObject *return_value = NULL;
  819|     10|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  820|       |
  821|     10|    #define NUM_KEYWORDS 1
  822|     10|    static struct {
  823|     10|        PyGC_Head _this_is_not_used;
  824|     10|        PyObject_VAR_HEAD
  825|     10|        Py_hash_t ob_hash;
  826|     10|        PyObject *ob_item[NUM_KEYWORDS];
  827|     10|    } _kwtuple = {
  828|     10|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     10|    {                                     \
  |  |   98|     10|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     10|    {                               \
  |  |  |  |   91|     10|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     10|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     10|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     10|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     10|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     10|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     10|        (type)                      \
  |  |  |  |   93|     10|    },
  |  |  ------------------
  |  |   99|     10|        (size)                            \
  |  |  100|     10|    },
  ------------------
  829|     10|        .ob_hash = -1,
  830|     10|        .ob_item = { &_Py_ID(count), },
  ------------------
  |  |  936|     10|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     10|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     10|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  831|     10|    };
  832|     10|    #undef NUM_KEYWORDS
  833|     10|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  834|       |
  835|       |    #else  // !Py_BUILD_CORE
  836|       |    #  define KWTUPLE NULL
  837|       |    #endif  // !Py_BUILD_CORE
  838|       |
  839|     10|    static const char * const _keywords[] = {"", "", "count", NULL};
  840|     10|    static _PyArg_Parser _parser = {
  841|     10|        .keywords = _keywords,
  842|     10|        .fname = "replace",
  843|     10|        .kwtuple = KWTUPLE,
  ------------------
  |  |  833|     10|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  844|     10|    };
  845|     10|    #undef KWTUPLE
  846|     10|    PyObject *argsbuf[3];
  847|     10|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (847:36): [True: 0, False: 10]
  ------------------
  848|     10|    Py_buffer old = {NULL, NULL};
  849|     10|    Py_buffer new = {NULL, NULL};
  850|     10|    Py_ssize_t count = -1;
  851|       |
  852|     10|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     10|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 10, False: 0]
  |  |  ------------------
  |  |   89|     10|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 10, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 10]
  |  |  |  Branch (89:43): [True: 10, False: 0]
  |  |  |  Branch (89:67): [True: 10, False: 0]
  |  |  ------------------
  |  |   90|     10|      (args) : \
  |  |   91|     10|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  853|     10|            /*minpos*/ 2, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  854|     10|    if (!args) {
  ------------------
  |  Branch (854:9): [True: 0, False: 10]
  ------------------
  855|      0|        goto exit;
  856|      0|    }
  857|     10|    if (PyObject_GetBuffer(args[0], &old, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|     10|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (857:9): [True: 0, False: 10]
  ------------------
  858|      0|        goto exit;
  859|      0|    }
  860|     10|    if (PyObject_GetBuffer(args[1], &new, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|     10|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (860:9): [True: 0, False: 10]
  ------------------
  861|      0|        goto exit;
  862|      0|    }
  863|     10|    if (!noptargs) {
  ------------------
  |  Branch (863:9): [True: 10, False: 0]
  ------------------
  864|     10|        goto skip_optional_pos;
  865|     10|    }
  866|      0|    {
  867|      0|        Py_ssize_t ival = -1;
  868|      0|        PyObject *iobj = _PyNumber_Index(args[2]);
  869|      0|        if (iobj != NULL) {
  ------------------
  |  Branch (869:13): [True: 0, False: 0]
  ------------------
  870|      0|            ival = PyLong_AsSsize_t(iobj);
  871|      0|            Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  872|      0|        }
  873|      0|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (873:13): [True: 0, False: 0]
  |  Branch (873:27): [True: 0, False: 0]
  ------------------
  874|      0|            goto exit;
  875|      0|        }
  876|      0|        count = ival;
  877|      0|    }
  878|     10|skip_optional_pos:
  879|     10|    return_value = bytes_replace_impl((PyBytesObject *)self, &old, &new, count);
  880|       |
  881|     10|exit:
  882|       |    /* Cleanup for old */
  883|     10|    if (old.obj) {
  ------------------
  |  Branch (883:9): [True: 10, False: 0]
  ------------------
  884|     10|       PyBuffer_Release(&old);
  885|     10|    }
  886|       |    /* Cleanup for new */
  887|     10|    if (new.obj) {
  ------------------
  |  Branch (887:9): [True: 10, False: 0]
  ------------------
  888|     10|       PyBuffer_Release(&new);
  889|     10|    }
  890|       |
  891|     10|    return return_value;
  892|     10|}
bytesobject.c:bytes_rfind:
  442|  18.1k|{
  443|  18.1k|    PyObject *return_value = NULL;
  444|  18.1k|    PyObject *sub;
  445|  18.1k|    Py_ssize_t start = 0;
  446|  18.1k|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  18.1k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  447|       |
  448|  18.1k|    if (!_PyArg_CheckPositional("rfind", nargs, 1, 3)) {
  ------------------
  |  |   31|  18.1k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 18.1k, False: 0]
  |  |  |  Branch (31:27): [True: 18.1k, False: 0]
  |  |  ------------------
  |  |   32|  18.1k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  449|      0|        goto exit;
  450|      0|    }
  451|  18.1k|    sub = args[0];
  452|  18.1k|    if (nargs < 2) {
  ------------------
  |  Branch (452:9): [True: 18.1k, False: 0]
  ------------------
  453|  18.1k|        goto skip_optional;
  454|  18.1k|    }
  455|      0|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (455:9): [True: 0, False: 0]
  ------------------
  456|      0|        goto exit;
  457|      0|    }
  458|      0|    if (nargs < 3) {
  ------------------
  |  Branch (458:9): [True: 0, False: 0]
  ------------------
  459|      0|        goto skip_optional;
  460|      0|    }
  461|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (461:9): [True: 0, False: 0]
  ------------------
  462|      0|        goto exit;
  463|      0|    }
  464|  18.1k|skip_optional:
  465|  18.1k|    return_value = bytes_rfind_impl((PyBytesObject *)self, sub, start, end);
  466|       |
  467|  18.1k|exit:
  468|  18.1k|    return return_value;
  469|  18.1k|}
bytesobject.c:bytes_split:
   52|  1.28k|{
   53|  1.28k|    PyObject *return_value = NULL;
   54|  1.28k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   55|       |
   56|  1.28k|    #define NUM_KEYWORDS 2
   57|  1.28k|    static struct {
   58|  1.28k|        PyGC_Head _this_is_not_used;
   59|  1.28k|        PyObject_VAR_HEAD
   60|  1.28k|        Py_hash_t ob_hash;
   61|  1.28k|        PyObject *ob_item[NUM_KEYWORDS];
   62|  1.28k|    } _kwtuple = {
   63|  1.28k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  1.28k|    {                                     \
  |  |   98|  1.28k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  1.28k|    {                               \
  |  |  |  |   91|  1.28k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  1.28k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  1.28k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  1.28k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  1.28k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  1.28k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  1.28k|        (type)                      \
  |  |  |  |   93|  1.28k|    },
  |  |  ------------------
  |  |   99|  1.28k|        (size)                            \
  |  |  100|  1.28k|    },
  ------------------
   64|  1.28k|        .ob_hash = -1,
   65|  1.28k|        .ob_item = { &_Py_ID(sep), &_Py_ID(maxsplit), },
  ------------------
  |  |  936|  1.28k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.28k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.28k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(sep), &_Py_ID(maxsplit), },
  ------------------
  |  |  936|  1.28k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.28k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.28k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  1.28k|    };
   67|  1.28k|    #undef NUM_KEYWORDS
   68|  1.28k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   69|       |
   70|       |    #else  // !Py_BUILD_CORE
   71|       |    #  define KWTUPLE NULL
   72|       |    #endif  // !Py_BUILD_CORE
   73|       |
   74|  1.28k|    static const char * const _keywords[] = {"sep", "maxsplit", NULL};
   75|  1.28k|    static _PyArg_Parser _parser = {
   76|  1.28k|        .keywords = _keywords,
   77|  1.28k|        .fname = "split",
   78|  1.28k|        .kwtuple = KWTUPLE,
  ------------------
  |  |   68|  1.28k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   79|  1.28k|    };
   80|  1.28k|    #undef KWTUPLE
   81|  1.28k|    PyObject *argsbuf[2];
   82|  1.28k|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (82:36): [True: 0, False: 1.28k]
  ------------------
   83|  1.28k|    PyObject *sep = Py_None;
  ------------------
  |  |  616|  1.28k|#  define Py_None (&_Py_NoneStruct)
  ------------------
   84|  1.28k|    Py_ssize_t maxsplit = -1;
   85|       |
   86|  1.28k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  1.28k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 1.28k, False: 0]
  |  |  ------------------
  |  |   89|  1.28k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 1.28k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 1.28k]
  |  |  |  Branch (89:43): [True: 1.28k, False: 0]
  |  |  |  Branch (89:67): [True: 1.28k, False: 0]
  |  |  ------------------
  |  |   90|  1.28k|      (args) : \
  |  |   91|  1.28k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   87|  1.28k|            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   88|  1.28k|    if (!args) {
  ------------------
  |  Branch (88:9): [True: 0, False: 1.28k]
  ------------------
   89|      0|        goto exit;
   90|      0|    }
   91|  1.28k|    if (!noptargs) {
  ------------------
  |  Branch (91:9): [True: 0, False: 1.28k]
  ------------------
   92|      0|        goto skip_optional_pos;
   93|      0|    }
   94|  1.28k|    if (args[0]) {
  ------------------
  |  Branch (94:9): [True: 1.28k, False: 0]
  ------------------
   95|  1.28k|        sep = args[0];
   96|  1.28k|        if (!--noptargs) {
  ------------------
  |  Branch (96:13): [True: 1.28k, False: 0]
  ------------------
   97|  1.28k|            goto skip_optional_pos;
   98|  1.28k|        }
   99|  1.28k|    }
  100|      0|    {
  101|      0|        Py_ssize_t ival = -1;
  102|      0|        PyObject *iobj = _PyNumber_Index(args[1]);
  103|      0|        if (iobj != NULL) {
  ------------------
  |  Branch (103:13): [True: 0, False: 0]
  ------------------
  104|      0|            ival = PyLong_AsSsize_t(iobj);
  105|      0|            Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|      0|        }
  107|      0|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (107:13): [True: 0, False: 0]
  |  Branch (107:27): [True: 0, False: 0]
  ------------------
  108|      0|            goto exit;
  109|      0|        }
  110|      0|        maxsplit = ival;
  111|      0|    }
  112|  1.28k|skip_optional_pos:
  113|  1.28k|    return_value = bytes_split_impl((PyBytesObject *)self, sep, maxsplit);
  114|       |
  115|  1.28k|exit:
  116|  1.28k|    return return_value;
  117|  1.28k|}
bytesobject.c:bytes_startswith:
  988|   129k|{
  989|   129k|    PyObject *return_value = NULL;
  990|   129k|    PyObject *subobj;
  991|   129k|    Py_ssize_t start = 0;
  992|   129k|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|   129k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  993|       |
  994|   129k|    if (!_PyArg_CheckPositional("startswith", nargs, 1, 3)) {
  ------------------
  |  |   31|   129k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 129k, False: 0]
  |  |  |  Branch (31:27): [True: 129k, False: 0]
  |  |  ------------------
  |  |   32|   129k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  995|      0|        goto exit;
  996|      0|    }
  997|   129k|    subobj = args[0];
  998|   129k|    if (nargs < 2) {
  ------------------
  |  Branch (998:9): [True: 129k, False: 0]
  ------------------
  999|   129k|        goto skip_optional;
 1000|   129k|    }
 1001|      0|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (1001:9): [True: 0, False: 0]
  ------------------
 1002|      0|        goto exit;
 1003|      0|    }
 1004|      0|    if (nargs < 3) {
  ------------------
  |  Branch (1004:9): [True: 0, False: 0]
  ------------------
 1005|      0|        goto skip_optional;
 1006|      0|    }
 1007|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (1007:9): [True: 0, False: 0]
  ------------------
 1008|      0|        goto exit;
 1009|      0|    }
 1010|   129k|skip_optional:
 1011|   129k|    return_value = bytes_startswith_impl((PyBytesObject *)self, subobj, start, end);
 1012|       |
 1013|   129k|exit:
 1014|   129k|    return return_value;
 1015|   129k|}
bytesobject.c:bytes_new:
 1370|  19.4k|{
 1371|  19.4k|    PyObject *return_value = NULL;
 1372|  19.4k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1373|       |
 1374|  19.4k|    #define NUM_KEYWORDS 3
 1375|  19.4k|    static struct {
 1376|  19.4k|        PyGC_Head _this_is_not_used;
 1377|  19.4k|        PyObject_VAR_HEAD
 1378|  19.4k|        Py_hash_t ob_hash;
 1379|  19.4k|        PyObject *ob_item[NUM_KEYWORDS];
 1380|  19.4k|    } _kwtuple = {
 1381|  19.4k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  19.4k|    {                                     \
  |  |   98|  19.4k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  19.4k|    {                               \
  |  |  |  |   91|  19.4k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  19.4k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  19.4k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  19.4k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  19.4k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  19.4k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  19.4k|        (type)                      \
  |  |  |  |   93|  19.4k|    },
  |  |  ------------------
  |  |   99|  19.4k|        (size)                            \
  |  |  100|  19.4k|    },
  ------------------
 1382|  19.4k|        .ob_hash = -1,
 1383|  19.4k|        .ob_item = { &_Py_ID(source), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  19.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  19.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  19.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(source), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  19.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  19.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  19.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(source), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  19.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  19.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  19.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1384|  19.4k|    };
 1385|  19.4k|    #undef NUM_KEYWORDS
 1386|  19.4k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1387|       |
 1388|       |    #else  // !Py_BUILD_CORE
 1389|       |    #  define KWTUPLE NULL
 1390|       |    #endif  // !Py_BUILD_CORE
 1391|       |
 1392|  19.4k|    static const char * const _keywords[] = {"source", "encoding", "errors", NULL};
 1393|  19.4k|    static _PyArg_Parser _parser = {
 1394|  19.4k|        .keywords = _keywords,
 1395|  19.4k|        .fname = "bytes",
 1396|  19.4k|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1386|  19.4k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1397|  19.4k|    };
 1398|  19.4k|    #undef KWTUPLE
 1399|  19.4k|    PyObject *argsbuf[3];
 1400|  19.4k|    PyObject * const *fastargs;
 1401|  19.4k|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  19.4k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  19.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1402|  19.4k|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1402:36): [True: 0, False: 19.4k]
  ------------------
 1403|  19.4k|    PyObject *x = NULL;
 1404|  19.4k|    const char *encoding = NULL;
 1405|  19.4k|    const char *errors = NULL;
 1406|       |
 1407|  19.4k|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|  19.4k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 19.4k, Folded]
  |  |  |  Branch (88:23): [True: 19.4k, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|  38.9k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 19.4k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 19.4k]
  |  |  |  Branch (89:43): [True: 19.4k, False: 0]
  |  |  |  Branch (89:67): [True: 19.4k, False: 0]
  |  |  |  Branch (89:68): [True: 19.4k, False: 0]
  |  |  ------------------
  |  |   90|  38.9k|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 19.4k, False: 0]
  |  |  ------------------
  |  |   91|  19.4k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1408|  19.4k|            /*minpos*/ 0, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1409|  19.4k|    if (!fastargs) {
  ------------------
  |  Branch (1409:9): [True: 0, False: 19.4k]
  ------------------
 1410|      0|        goto exit;
 1411|      0|    }
 1412|  19.4k|    if (!noptargs) {
  ------------------
  |  Branch (1412:9): [True: 0, False: 19.4k]
  ------------------
 1413|      0|        goto skip_optional_pos;
 1414|      0|    }
 1415|  19.4k|    if (fastargs[0]) {
  ------------------
  |  Branch (1415:9): [True: 19.4k, False: 0]
  ------------------
 1416|  19.4k|        x = fastargs[0];
 1417|  19.4k|        if (!--noptargs) {
  ------------------
  |  Branch (1417:13): [True: 19.4k, False: 0]
  ------------------
 1418|  19.4k|            goto skip_optional_pos;
 1419|  19.4k|        }
 1420|  19.4k|    }
 1421|      0|    if (fastargs[1]) {
  ------------------
  |  Branch (1421:9): [True: 0, False: 0]
  ------------------
 1422|      0|        if (!PyUnicode_Check(fastargs[1])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1422:13): [True: 0, False: 0]
  ------------------
 1423|      0|            _PyArg_BadArgument("bytes", "argument 'encoding'", "str", fastargs[1]);
 1424|      0|            goto exit;
 1425|      0|        }
 1426|      0|        Py_ssize_t encoding_length;
 1427|      0|        encoding = PyUnicode_AsUTF8AndSize(fastargs[1], &encoding_length);
 1428|      0|        if (encoding == NULL) {
  ------------------
  |  Branch (1428:13): [True: 0, False: 0]
  ------------------
 1429|      0|            goto exit;
 1430|      0|        }
 1431|      0|        if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (1431:13): [True: 0, False: 0]
  ------------------
 1432|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1433|      0|            goto exit;
 1434|      0|        }
 1435|      0|        if (!--noptargs) {
  ------------------
  |  Branch (1435:13): [True: 0, False: 0]
  ------------------
 1436|      0|            goto skip_optional_pos;
 1437|      0|        }
 1438|      0|    }
 1439|      0|    if (!PyUnicode_Check(fastargs[2])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1439:9): [True: 0, False: 0]
  ------------------
 1440|      0|        _PyArg_BadArgument("bytes", "argument 'errors'", "str", fastargs[2]);
 1441|      0|        goto exit;
 1442|      0|    }
 1443|      0|    Py_ssize_t errors_length;
 1444|      0|    errors = PyUnicode_AsUTF8AndSize(fastargs[2], &errors_length);
 1445|      0|    if (errors == NULL) {
  ------------------
  |  Branch (1445:9): [True: 0, False: 0]
  ------------------
 1446|      0|        goto exit;
 1447|      0|    }
 1448|      0|    if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1448:9): [True: 0, False: 0]
  ------------------
 1449|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 1450|      0|        goto exit;
 1451|      0|    }
 1452|  19.4k|skip_optional_pos:
 1453|  19.4k|    return_value = bytes_new_impl(type, x, encoding, errors);
 1454|       |
 1455|  19.4k|exit:
 1456|  19.4k|    return return_value;
 1457|  19.4k|}

descrobject.c:mappingproxy_new:
   22|      1|{
   23|      1|    PyObject *return_value = NULL;
   24|      1|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   25|       |
   26|      1|    #define NUM_KEYWORDS 1
   27|      1|    static struct {
   28|      1|        PyGC_Head _this_is_not_used;
   29|      1|        PyObject_VAR_HEAD
   30|      1|        Py_hash_t ob_hash;
   31|      1|        PyObject *ob_item[NUM_KEYWORDS];
   32|      1|    } _kwtuple = {
   33|      1|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      1|    {                                     \
  |  |   98|      1|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      1|    {                               \
  |  |  |  |   91|      1|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      1|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      1|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      1|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      1|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      1|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      1|        (type)                      \
  |  |  |  |   93|      1|    },
  |  |  ------------------
  |  |   99|      1|        (size)                            \
  |  |  100|      1|    },
  ------------------
   34|      1|        .ob_hash = -1,
   35|      1|        .ob_item = { &_Py_ID(mapping), },
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|      1|    };
   37|      1|    #undef NUM_KEYWORDS
   38|      1|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   39|       |
   40|       |    #else  // !Py_BUILD_CORE
   41|       |    #  define KWTUPLE NULL
   42|       |    #endif  // !Py_BUILD_CORE
   43|       |
   44|      1|    static const char * const _keywords[] = {"mapping", NULL};
   45|      1|    static _PyArg_Parser _parser = {
   46|      1|        .keywords = _keywords,
   47|      1|        .fname = "mappingproxy",
   48|      1|        .kwtuple = KWTUPLE,
  ------------------
  |  |   38|      1|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   49|      1|    };
   50|      1|    #undef KWTUPLE
   51|      1|    PyObject *argsbuf[1];
   52|      1|    PyObject * const *fastargs;
   53|      1|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      1|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   54|      1|    PyObject *mapping;
   55|       |
   56|      1|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|      1|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 1, Folded]
  |  |  |  Branch (88:23): [True: 1, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|      2|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 1, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 1]
  |  |  |  Branch (89:43): [True: 1, False: 0]
  |  |  |  Branch (89:67): [True: 1, False: 0]
  |  |  |  Branch (89:68): [True: 1, False: 0]
  |  |  ------------------
  |  |   90|      2|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 1, False: 0]
  |  |  ------------------
  |  |   91|      1|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   57|      1|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   58|      1|    if (!fastargs) {
  ------------------
  |  Branch (58:9): [True: 0, False: 1]
  ------------------
   59|      0|        goto exit;
   60|      0|    }
   61|      1|    mapping = fastargs[0];
   62|      1|    return_value = mappingproxy_new_impl(type, mapping);
   63|       |
   64|      1|exit:
   65|      1|    return return_value;
   66|      1|}
descrobject.c:property_init:
  111|     37|{
  112|     37|    int return_value = -1;
  113|     37|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  114|       |
  115|     37|    #define NUM_KEYWORDS 4
  116|     37|    static struct {
  117|     37|        PyGC_Head _this_is_not_used;
  118|     37|        PyObject_VAR_HEAD
  119|     37|        Py_hash_t ob_hash;
  120|     37|        PyObject *ob_item[NUM_KEYWORDS];
  121|     37|    } _kwtuple = {
  122|     37|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     37|    {                                     \
  |  |   98|     37|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     37|    {                               \
  |  |  |  |   91|     37|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     37|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     37|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     37|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     37|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     37|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     37|        (type)                      \
  |  |  |  |   93|     37|    },
  |  |  ------------------
  |  |   99|     37|        (size)                            \
  |  |  100|     37|    },
  ------------------
  123|     37|        .ob_hash = -1,
  124|     37|        .ob_item = { &_Py_ID(fget), &_Py_ID(fset), &_Py_ID(fdel), &_Py_ID(doc), },
  ------------------
  |  |  936|     37|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     37|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     37|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(fget), &_Py_ID(fset), &_Py_ID(fdel), &_Py_ID(doc), },
  ------------------
  |  |  936|     37|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     37|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     37|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(fget), &_Py_ID(fset), &_Py_ID(fdel), &_Py_ID(doc), },
  ------------------
  |  |  936|     37|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     37|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     37|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(fget), &_Py_ID(fset), &_Py_ID(fdel), &_Py_ID(doc), },
  ------------------
  |  |  936|     37|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     37|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     37|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|     37|    };
  126|     37|    #undef NUM_KEYWORDS
  127|     37|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  128|       |
  129|       |    #else  // !Py_BUILD_CORE
  130|       |    #  define KWTUPLE NULL
  131|       |    #endif  // !Py_BUILD_CORE
  132|       |
  133|     37|    static const char * const _keywords[] = {"fget", "fset", "fdel", "doc", NULL};
  134|     37|    static _PyArg_Parser _parser = {
  135|     37|        .keywords = _keywords,
  136|     37|        .fname = "property",
  137|     37|        .kwtuple = KWTUPLE,
  ------------------
  |  |  127|     37|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  138|     37|    };
  139|     37|    #undef KWTUPLE
  140|     37|    PyObject *argsbuf[4];
  141|     37|    PyObject * const *fastargs;
  142|     37|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     37|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|     37|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (143:36): [True: 0, False: 37]
  ------------------
  144|     37|    PyObject *fget = NULL;
  145|     37|    PyObject *fset = NULL;
  146|     37|    PyObject *fdel = NULL;
  147|     37|    PyObject *doc = NULL;
  148|       |
  149|     37|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|     37|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 37, Folded]
  |  |  |  Branch (88:23): [True: 37, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|     74|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 37, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 37]
  |  |  |  Branch (89:43): [True: 37, False: 0]
  |  |  |  Branch (89:67): [True: 37, False: 0]
  |  |  |  Branch (89:68): [True: 37, False: 0]
  |  |  ------------------
  |  |   90|     74|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 37, False: 0]
  |  |  ------------------
  |  |   91|     37|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  150|     37|            /*minpos*/ 0, /*maxpos*/ 4, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  151|     37|    if (!fastargs) {
  ------------------
  |  Branch (151:9): [True: 0, False: 37]
  ------------------
  152|      0|        goto exit;
  153|      0|    }
  154|     37|    if (!noptargs) {
  ------------------
  |  Branch (154:9): [True: 0, False: 37]
  ------------------
  155|      0|        goto skip_optional_pos;
  156|      0|    }
  157|     37|    if (fastargs[0]) {
  ------------------
  |  Branch (157:9): [True: 37, False: 0]
  ------------------
  158|     37|        fget = fastargs[0];
  159|     37|        if (!--noptargs) {
  ------------------
  |  Branch (159:13): [True: 33, False: 4]
  ------------------
  160|     33|            goto skip_optional_pos;
  161|     33|        }
  162|     37|    }
  163|      4|    if (fastargs[1]) {
  ------------------
  |  Branch (163:9): [True: 4, False: 0]
  ------------------
  164|      4|        fset = fastargs[1];
  165|      4|        if (!--noptargs) {
  ------------------
  |  Branch (165:13): [True: 0, False: 4]
  ------------------
  166|      0|            goto skip_optional_pos;
  167|      0|        }
  168|      4|    }
  169|      4|    if (fastargs[2]) {
  ------------------
  |  Branch (169:9): [True: 4, False: 0]
  ------------------
  170|      4|        fdel = fastargs[2];
  171|      4|        if (!--noptargs) {
  ------------------
  |  Branch (171:13): [True: 0, False: 4]
  ------------------
  172|      0|            goto skip_optional_pos;
  173|      0|        }
  174|      4|    }
  175|      4|    doc = fastargs[3];
  176|     37|skip_optional_pos:
  177|     37|    return_value = property_init_impl((propertyobject *)self, fget, fset, fdel, doc);
  178|       |
  179|     37|exit:
  180|     37|    return return_value;
  181|     37|}

dictobject.c:dict___contains__:
   74|      4|{
   75|      4|    PyObject *return_value = NULL;
   76|       |
   77|      4|    return_value = dict___contains___impl((PyDictObject *)self, key);
   78|       |
   79|      4|    return return_value;
   80|      4|}
dictobject.c:dict_get:
   96|   595k|{
   97|   595k|    PyObject *return_value = NULL;
   98|   595k|    PyObject *key;
   99|   595k|    PyObject *default_value = Py_None;
  ------------------
  |  |  616|   595k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  100|       |
  101|   595k|    if (!_PyArg_CheckPositional("get", nargs, 1, 2)) {
  ------------------
  |  |   31|   595k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 595k, False: 0]
  |  |  |  Branch (31:27): [True: 595k, False: 0]
  |  |  ------------------
  |  |   32|   595k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  102|      0|        goto exit;
  103|      0|    }
  104|   595k|    key = args[0];
  105|   595k|    if (nargs < 2) {
  ------------------
  |  Branch (105:9): [True: 546k, False: 49.6k]
  ------------------
  106|   546k|        goto skip_optional;
  107|   546k|    }
  108|  49.6k|    default_value = args[1];
  109|   595k|skip_optional:
  110|   595k|    return_value = dict_get_impl((PyDictObject *)self, key, default_value);
  111|       |
  112|   595k|exit:
  113|   595k|    return return_value;
  114|   595k|}
dictobject.c:dict_setdefault:
  133|     60|{
  134|     60|    PyObject *return_value = NULL;
  135|     60|    PyObject *key;
  136|     60|    PyObject *default_value = Py_None;
  ------------------
  |  |  616|     60|#  define Py_None (&_Py_NoneStruct)
  ------------------
  137|       |
  138|     60|    if (!_PyArg_CheckPositional("setdefault", nargs, 1, 2)) {
  ------------------
  |  |   31|     60|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 60, False: 0]
  |  |  |  Branch (31:27): [True: 60, False: 0]
  |  |  ------------------
  |  |   32|     60|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  139|      0|        goto exit;
  140|      0|    }
  141|     60|    key = args[0];
  142|     60|    if (nargs < 2) {
  ------------------
  |  Branch (142:9): [True: 0, False: 60]
  ------------------
  143|      0|        goto skip_optional;
  144|      0|    }
  145|     60|    default_value = args[1];
  146|     60|skip_optional:
  147|     60|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|     60|    {
  ------------------
  148|     60|    return_value = dict_setdefault_impl((PyDictObject *)self, key, default_value);
  149|     60|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     60|    }
  ------------------
  150|       |
  151|     60|exit:
  152|     60|    return return_value;
  153|     60|}
dictobject.c:dict_pop:
  190|  48.6k|{
  191|  48.6k|    PyObject *return_value = NULL;
  192|  48.6k|    PyObject *key;
  193|  48.6k|    PyObject *default_value = NULL;
  194|       |
  195|  48.6k|    if (!_PyArg_CheckPositional("pop", nargs, 1, 2)) {
  ------------------
  |  |   31|  48.6k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 48.6k, False: 0]
  |  |  |  Branch (31:27): [True: 48.6k, False: 0]
  |  |  ------------------
  |  |   32|  48.6k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  196|      0|        goto exit;
  197|      0|    }
  198|  48.6k|    key = args[0];
  199|  48.6k|    if (nargs < 2) {
  ------------------
  |  Branch (199:9): [True: 160, False: 48.5k]
  ------------------
  200|    160|        goto skip_optional;
  201|    160|    }
  202|  48.5k|    default_value = args[1];
  203|  48.6k|skip_optional:
  204|  48.6k|    return_value = dict_pop_impl((PyDictObject *)self, key, default_value);
  205|       |
  206|  48.6k|exit:
  207|  48.6k|    return return_value;
  208|  48.6k|}
dictobject.c:dict_keys:
  287|    317|{
  288|    317|    return dict_keys_impl((PyDictObject *)self);
  289|    317|}
dictobject.c:dict_items:
  305|    108|{
  306|    108|    return dict_items_impl((PyDictObject *)self);
  307|    108|}
dictobject.c:dict_values:
  323|      5|{
  324|      5|    return dict_values_impl((PyDictObject *)self);
  325|      5|}
dictobject.c:dict_fromkeys:
   22|     16|{
   23|     16|    PyObject *return_value = NULL;
   24|     16|    PyObject *iterable;
   25|     16|    PyObject *value = Py_None;
  ------------------
  |  |  616|     16|#  define Py_None (&_Py_NoneStruct)
  ------------------
   26|       |
   27|     16|    if (!_PyArg_CheckPositional("fromkeys", nargs, 1, 2)) {
  ------------------
  |  |   31|     16|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 16, False: 0]
  |  |  |  Branch (31:27): [True: 16, False: 0]
  |  |  ------------------
  |  |   32|     16|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   28|      0|        goto exit;
   29|      0|    }
   30|     16|    iterable = args[0];
   31|     16|    if (nargs < 2) {
  ------------------
  |  Branch (31:9): [True: 15, False: 1]
  ------------------
   32|     15|        goto skip_optional;
   33|     15|    }
   34|      1|    value = args[1];
   35|     16|skip_optional:
   36|     16|    return_value = dict_fromkeys_impl((PyTypeObject *)type, iterable, value);
   37|       |
   38|     16|exit:
   39|     16|    return return_value;
   40|     16|}
dictobject.c:dict_copy:
   56|      3|{
   57|      3|    return dict_copy_impl((PyDictObject *)self);
   58|      3|}

enumobject.c:enum_vectorcall:
   96|  37.5k|{
   97|  37.5k|    PyObject *return_value = NULL;
   98|  37.5k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  37.5k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
   99|  37.5k|    PyObject *iterable;
  100|  37.5k|    PyObject *start = 0;
  101|       |
  102|  37.5k|    assert(Py_Is(_PyType_CAST(type), &PyEnum_Type));
  ------------------
  |  Branch (102:5): [True: 37.5k, False: 0]
  |  Branch (102:5): [True: 37.5k, False: 0]
  ------------------
  103|       |    /* Make sure the type object is immutable: the generated
  104|       |     * vectorcall doesn't deal e.g. with users reassigning __init__. */
  105|  37.5k|    assert(PyType_HasFeature(_PyType_CAST(type), Py_TPFLAGS_IMMUTABLETYPE));
  ------------------
  |  Branch (105:5): [True: 37.5k, False: 0]
  |  Branch (105:5): [True: 37.5k, False: 0]
  ------------------
  106|  37.5k|    if (kwnames != NULL || nargs < 1 || nargs > 2) {
  ------------------
  |  Branch (106:9): [True: 0, False: 37.5k]
  |  Branch (106:28): [True: 0, False: 37.5k]
  |  Branch (106:41): [True: 0, False: 37.5k]
  ------------------
  107|      0|        return enum_new_helper(_PyType_CAST(type), args, nargs,
  ------------------
  |  |  770|      0|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (107:32): [True: 0, False: 0]
  ------------------
  108|      0|            kwnames ? PyTuple_GET_SIZE(kwnames) : 0,
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:13): [True: 0, False: 0]
  ------------------
  109|      0|            NULL, kwnames);
  110|      0|    }
  111|  37.5k|    iterable = args[0];
  112|  37.5k|    if (nargs < 2) {
  ------------------
  |  Branch (112:9): [True: 37.5k, False: 0]
  ------------------
  113|  37.5k|        goto skip_optional;
  114|  37.5k|    }
  115|      0|    start = args[1];
  116|  37.5k|skip_optional:
  117|  37.5k|    return_value = enum_new_impl(_PyType_CAST(type), iterable, start);
  ------------------
  |  |  770|  37.5k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  37.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (117:34): [True: 37.5k, False: 0]
  ------------------
  118|       |
  119|      0|    return return_value;
  120|  37.5k|}
enumobject.c:reversed_vectorcall:
  155|    274|{
  156|    274|    PyObject *return_value = NULL;
  157|    274|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    274|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  158|    274|    PyObject *seq;
  159|       |
  160|    274|    assert(Py_Is(_PyType_CAST(type), &PyReversed_Type));
  ------------------
  |  Branch (160:5): [True: 274, False: 0]
  |  Branch (160:5): [True: 274, False: 0]
  ------------------
  161|       |    /* Make sure the type object is immutable: the generated
  162|       |     * vectorcall doesn't deal e.g. with users reassigning __init__. */
  163|    274|    assert(PyType_HasFeature(_PyType_CAST(type), Py_TPFLAGS_IMMUTABLETYPE));
  ------------------
  |  Branch (163:5): [True: 274, False: 0]
  |  Branch (163:5): [True: 274, False: 0]
  ------------------
  164|    274|    if (!_PyArg_NoKwnames("reversed", kwnames)) {
  ------------------
  |  |   15|    274|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 274, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  165|      0|        goto exit;
  166|      0|    }
  167|    274|    if (!_PyArg_CheckPositional("reversed", nargs, 1, 1)) {
  ------------------
  |  |   31|    274|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 274, False: 0]
  |  |  |  Branch (31:27): [True: 274, False: 0]
  |  |  ------------------
  |  |   32|    274|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  168|      0|        goto exit;
  169|      0|    }
  170|    274|    seq = args[0];
  171|    274|    return_value = reversed_new_impl(_PyType_CAST(type), seq);
  ------------------
  |  |  770|    274|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (171:38): [True: 274, False: 0]
  ------------------
  172|       |
  173|    274|exit:
  174|    274|    return return_value;
  175|    274|}

exceptions.c:BaseException_add_note:
   92|  1.92k|{
   93|  1.92k|    PyObject *return_value = NULL;
   94|  1.92k|    PyObject *note;
   95|       |
   96|  1.92k|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|  1.92k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.92k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (96:9): [True: 0, False: 1.92k]
  ------------------
   97|      0|        _PyArg_BadArgument("add_note", "argument", "str", arg);
   98|      0|        goto exit;
   99|      0|    }
  100|  1.92k|    note = arg;
  101|  1.92k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  1.92k|    {
  ------------------
  102|  1.92k|    return_value = BaseException_add_note_impl((PyBaseExceptionObject *)self, note);
  103|  1.92k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.92k|    }
  ------------------
  104|       |
  105|  1.92k|exit:
  106|  1.92k|    return return_value;
  107|  1.92k|}

floatobject.c:float_fromhex:
  173|      1|{
  174|      1|    PyObject *return_value = NULL;
  175|       |
  176|      1|    return_value = float_fromhex_impl((PyTypeObject *)type, string);
  177|       |
  178|      1|    return return_value;
  179|      1|}

frameobject.c:frame_locals_get:
   15|      2|{
   16|      2|    PyObject *return_value = NULL;
   17|       |
   18|      2|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      2|    {
  ------------------
   19|      2|    return_value = frame_locals_get_impl((PyFrameObject *)self);
   20|      2|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      2|    }
  ------------------
   21|       |
   22|      2|    return return_value;
   23|      2|}

funcobject.c:function___annotate___get:
   20|      5|{
   21|      5|    PyObject *return_value = NULL;
   22|       |
   23|      5|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      5|    {
  ------------------
   24|      5|    return_value = function___annotate___get_impl((PyFunctionObject *)self);
   25|      5|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      5|    }
  ------------------
   26|       |
   27|      5|    return return_value;
   28|      5|}
funcobject.c:function___annotate___set:
   35|      3|{
   36|      3|    int return_value = -1;
   37|      3|    PyObject *value;
   38|       |
   39|      3|    if (arg == NULL) {
  ------------------
  |  Branch (39:9): [True: 0, False: 3]
  ------------------
   40|      0|        PyErr_Format(PyExc_AttributeError,
   41|      0|                     "attribute '__annotate__' of '%.100s' objects cannot be deleted",
   42|      0|                     Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   43|      0|        return -1;
   44|      0|    }
   45|      3|    value = arg;
   46|      3|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      3|    {
  ------------------
   47|      3|    return_value = function___annotate___set_impl((PyFunctionObject *)self, value);
   48|      3|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      3|    }
  ------------------
   49|       |
   50|      3|    return return_value;
   51|      3|}
funcobject.c:function___type_params___get:
   98|      5|{
   99|      5|    PyObject *return_value = NULL;
  100|       |
  101|      5|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      5|    {
  ------------------
  102|      5|    return_value = function___type_params___get_impl((PyFunctionObject *)self);
  103|      5|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      5|    }
  ------------------
  104|       |
  105|      5|    return return_value;
  106|      5|}
funcobject.c:function___type_params___set:
  113|      3|{
  114|      3|    int return_value = -1;
  115|      3|    PyObject *value;
  116|       |
  117|      3|    if (arg == NULL) {
  ------------------
  |  Branch (117:9): [True: 0, False: 3]
  ------------------
  118|      0|        PyErr_Format(PyExc_AttributeError,
  119|      0|                     "attribute '__type_params__' of '%.100s' objects cannot be deleted",
  120|      0|                     Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|      0|        return -1;
  122|      0|    }
  123|      3|    if (!PyTuple_Check(arg)) {
  ------------------
  |  |   27|      3|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      3|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (123:9): [True: 0, False: 3]
  ------------------
  124|      0|        PyErr_Format(PyExc_TypeError, "attribute '__type_params__' must be tuple, not %T", arg);
  125|      0|        goto exit;
  126|      0|    }
  127|      3|    value = arg;
  128|      3|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      3|    {
  ------------------
  129|      3|    return_value = function___type_params___set_impl((PyFunctionObject *)self, value);
  130|      3|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      3|    }
  ------------------
  131|       |
  132|      3|exit:
  133|      3|    return return_value;
  134|      3|}

listobject.c:list_extend:
  142|  84.7k|{
  143|  84.7k|    PyObject *return_value = NULL;
  144|       |
  145|  84.7k|    return_value = list_extend_impl((PyListObject *)self, iterable);
  146|       |
  147|  84.7k|    return return_value;
  148|  84.7k|}
listobject.c:list___reversed__:
  468|    274|{
  469|    274|    return list___reversed___impl((PyListObject *)self);
  470|    274|}
listobject.c:py_list_clear:
   70|    249|{
   71|    249|    PyObject *return_value = NULL;
   72|       |
   73|    249|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    249|    {
  ------------------
   74|    249|    return_value = py_list_clear_impl((PyListObject *)self);
   75|    249|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    249|    }
  ------------------
   76|       |
   77|    249|    return return_value;
   78|    249|}
listobject.c:list_append:
  118|  1.03k|{
  119|  1.03k|    PyObject *return_value = NULL;
  120|       |
  121|  1.03k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  1.03k|    {
  ------------------
  122|  1.03k|    return_value = list_append_impl((PyListObject *)self, object);
  123|  1.03k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.03k|    }
  ------------------
  124|       |
  125|  1.03k|    return return_value;
  126|  1.03k|}
listobject.c:list_pop:
  166|    438|{
  167|    438|    PyObject *return_value = NULL;
  168|    438|    Py_ssize_t index = -1;
  169|       |
  170|    438|    if (!_PyArg_CheckPositional("pop", nargs, 0, 1)) {
  ------------------
  |  |   31|    438|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 438, False: 0]
  |  |  |  Branch (31:27): [True: 438, False: 0]
  |  |  ------------------
  |  |   32|    438|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  171|      0|        goto exit;
  172|      0|    }
  173|    438|    if (nargs < 1) {
  ------------------
  |  Branch (173:9): [True: 438, False: 0]
  ------------------
  174|    438|        goto skip_optional;
  175|    438|    }
  176|      0|    {
  177|      0|        Py_ssize_t ival = -1;
  178|      0|        PyObject *iobj = _PyNumber_Index(args[0]);
  179|      0|        if (iobj != NULL) {
  ------------------
  |  Branch (179:13): [True: 0, False: 0]
  ------------------
  180|      0|            ival = PyLong_AsSsize_t(iobj);
  181|      0|            Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|      0|        }
  183|      0|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (183:13): [True: 0, False: 0]
  |  Branch (183:27): [True: 0, False: 0]
  ------------------
  184|      0|            goto exit;
  185|      0|        }
  186|      0|        index = ival;
  187|      0|    }
  188|    438|skip_optional:
  189|    438|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    438|    {
  ------------------
  190|    438|    return_value = list_pop_impl((PyListObject *)self, index);
  191|    438|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    438|    }
  ------------------
  192|       |
  193|    438|exit:
  194|    438|    return return_value;
  195|    438|}
listobject.c:list_remove:
  388|    367|{
  389|    367|    PyObject *return_value = NULL;
  390|       |
  391|    367|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    367|    {
  ------------------
  392|    367|    return_value = list_remove_impl((PyListObject *)self, value);
  393|    367|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    367|    }
  ------------------
  394|       |
  395|    367|    return return_value;
  396|    367|}
listobject.c:list_reverse:
  294|     23|{
  295|     23|    PyObject *return_value = NULL;
  296|       |
  297|     23|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|     23|    {
  ------------------
  298|     23|    return_value = list_reverse_impl((PyListObject *)self);
  299|     23|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     23|    }
  ------------------
  300|       |
  301|     23|    return return_value;
  302|     23|}
listobject.c:list_sort:
  219|  17.8k|{
  220|  17.8k|    PyObject *return_value = NULL;
  221|  17.8k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  222|       |
  223|  17.8k|    #define NUM_KEYWORDS 2
  224|  17.8k|    static struct {
  225|  17.8k|        PyGC_Head _this_is_not_used;
  226|  17.8k|        PyObject_VAR_HEAD
  227|  17.8k|        Py_hash_t ob_hash;
  228|  17.8k|        PyObject *ob_item[NUM_KEYWORDS];
  229|  17.8k|    } _kwtuple = {
  230|  17.8k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  17.8k|    {                                     \
  |  |   98|  17.8k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  17.8k|    {                               \
  |  |  |  |   91|  17.8k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  17.8k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  17.8k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  17.8k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  17.8k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  17.8k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  17.8k|        (type)                      \
  |  |  |  |   93|  17.8k|    },
  |  |  ------------------
  |  |   99|  17.8k|        (size)                            \
  |  |  100|  17.8k|    },
  ------------------
  231|  17.8k|        .ob_hash = -1,
  232|  17.8k|        .ob_item = { &_Py_ID(key), &_Py_ID(reverse), },
  ------------------
  |  |  936|  17.8k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  17.8k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  17.8k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(key), &_Py_ID(reverse), },
  ------------------
  |  |  936|  17.8k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  17.8k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  17.8k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|  17.8k|    };
  234|  17.8k|    #undef NUM_KEYWORDS
  235|  17.8k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  236|       |
  237|       |    #else  // !Py_BUILD_CORE
  238|       |    #  define KWTUPLE NULL
  239|       |    #endif  // !Py_BUILD_CORE
  240|       |
  241|  17.8k|    static const char * const _keywords[] = {"key", "reverse", NULL};
  242|  17.8k|    static _PyArg_Parser _parser = {
  243|  17.8k|        .keywords = _keywords,
  244|  17.8k|        .fname = "sort",
  245|  17.8k|        .kwtuple = KWTUPLE,
  ------------------
  |  |  235|  17.8k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  246|  17.8k|    };
  247|  17.8k|    #undef KWTUPLE
  248|  17.8k|    PyObject *argsbuf[2];
  249|  17.8k|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      3|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (249:36): [True: 3, False: 17.8k]
  ------------------
  250|  17.8k|    PyObject *keyfunc = Py_None;
  ------------------
  |  |  616|  17.8k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  251|  17.8k|    int reverse = 0;
  252|       |
  253|  17.8k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  17.8k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 17.8k, False: 3]
  |  |  ------------------
  |  |   89|  17.8k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 17.8k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 17.8k]
  |  |  |  Branch (89:43): [True: 17.8k, False: 0]
  |  |  |  Branch (89:67): [True: 17.8k, False: 0]
  |  |  ------------------
  |  |   90|  17.8k|      (args) : \
  |  |   91|  17.8k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      3|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  254|  17.8k|            /*minpos*/ 0, /*maxpos*/ 0, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  255|  17.8k|    if (!args) {
  ------------------
  |  Branch (255:9): [True: 0, False: 17.8k]
  ------------------
  256|      0|        goto exit;
  257|      0|    }
  258|  17.8k|    if (!noptargs) {
  ------------------
  |  Branch (258:9): [True: 17.8k, False: 3]
  ------------------
  259|  17.8k|        goto skip_optional_kwonly;
  260|  17.8k|    }
  261|      3|    if (args[0]) {
  ------------------
  |  Branch (261:9): [True: 2, False: 1]
  ------------------
  262|      2|        keyfunc = args[0];
  263|      2|        if (!--noptargs) {
  ------------------
  |  Branch (263:13): [True: 2, False: 0]
  ------------------
  264|      2|            goto skip_optional_kwonly;
  265|      2|        }
  266|      2|    }
  267|      1|    reverse = PyObject_IsTrue(args[1]);
  268|      1|    if (reverse < 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 1]
  ------------------
  269|      0|        goto exit;
  270|      0|    }
  271|  17.8k|skip_optional_kwonly:
  272|  17.8k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  17.8k|    {
  ------------------
  273|  17.8k|    return_value = list_sort_impl((PyListObject *)self, keyfunc, reverse);
  274|  17.8k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  17.8k|    }
  ------------------
  275|       |
  276|  17.8k|exit:
  277|  17.8k|    return return_value;
  278|  17.8k|}
listobject.c:list___init__:
  412|    367|{
  413|    367|    int return_value = -1;
  414|    367|    PyTypeObject *base_tp = &PyList_Type;
  415|    367|    PyObject *iterable = NULL;
  416|       |
  417|    367|    if ((Py_IS_TYPE(self, base_tp) ||
  ------------------
  |  |  215|    734|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 367]
  |  |  ------------------
  ------------------
  418|    367|         Py_TYPE(self)->tp_new == base_tp->tp_new) &&
  ------------------
  |  |  213|    367|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (418:10): [True: 367, False: 0]
  ------------------
  419|    367|        !_PyArg_NoKeywords("list", kwargs)) {
  ------------------
  |  |   25|    367|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 367, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  420|      0|        goto exit;
  421|      0|    }
  422|    367|    if (!_PyArg_CheckPositional("list", PyTuple_GET_SIZE(args), 0, 1)) {
  ------------------
  |  |   31|    367|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 367, False: 0]
  |  |  |  Branch (31:27): [True: 367, False: 0]
  |  |  ------------------
  |  |   32|    367|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  423|      0|        goto exit;
  424|      0|    }
  425|    367|    if (PyTuple_GET_SIZE(args) < 1) {
  ------------------
  |  |   27|    367|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (425:9): [True: 367, False: 0]
  ------------------
  426|    367|        goto skip_optional;
  427|    367|    }
  428|      0|    iterable = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (428:16): [True: 0, False: 0]
  ------------------
  429|    367|skip_optional:
  430|    367|    return_value = list___init___impl((PyListObject *)self, iterable);
  431|       |
  432|    367|exit:
  433|    367|    return return_value;
  434|    367|}

longobject.c:int_bit_length:
  202|    206|{
  203|    206|    return int_bit_length_impl(self);
  204|    206|}
longobject.c:int_to_bytes:
  289|      2|{
  290|      2|    PyObject *return_value = NULL;
  291|      2|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  292|       |
  293|      2|    #define NUM_KEYWORDS 3
  294|      2|    static struct {
  295|      2|        PyGC_Head _this_is_not_used;
  296|      2|        PyObject_VAR_HEAD
  297|      2|        Py_hash_t ob_hash;
  298|      2|        PyObject *ob_item[NUM_KEYWORDS];
  299|      2|    } _kwtuple = {
  300|      2|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      2|    {                                     \
  |  |   98|      2|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      2|    {                               \
  |  |  |  |   91|      2|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      2|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      2|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      2|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      2|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      2|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      2|        (type)                      \
  |  |  |  |   93|      2|    },
  |  |  ------------------
  |  |   99|      2|        (size)                            \
  |  |  100|      2|    },
  ------------------
  301|      2|        .ob_hash = -1,
  302|      2|        .ob_item = { &_Py_ID(length), &_Py_ID(byteorder), &_Py_ID(signed), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(length), &_Py_ID(byteorder), &_Py_ID(signed), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(length), &_Py_ID(byteorder), &_Py_ID(signed), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      2|    };
  304|      2|    #undef NUM_KEYWORDS
  305|      2|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  306|       |
  307|       |    #else  // !Py_BUILD_CORE
  308|       |    #  define KWTUPLE NULL
  309|       |    #endif  // !Py_BUILD_CORE
  310|       |
  311|      2|    static const char * const _keywords[] = {"length", "byteorder", "signed", NULL};
  312|      2|    static _PyArg_Parser _parser = {
  313|      2|        .keywords = _keywords,
  314|      2|        .fname = "to_bytes",
  315|      2|        .kwtuple = KWTUPLE,
  ------------------
  |  |  305|      2|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  316|      2|    };
  317|      2|    #undef KWTUPLE
  318|      2|    PyObject *argsbuf[3];
  319|      2|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (319:36): [True: 0, False: 2]
  ------------------
  320|      2|    Py_ssize_t length = 1;
  321|      2|    PyObject *byteorder = NULL;
  322|      2|    int is_signed = 0;
  323|       |
  324|      2|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      2|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 2, False: 0]
  |  |  ------------------
  |  |   89|      2|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 2, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 2]
  |  |  |  Branch (89:43): [True: 2, False: 0]
  |  |  |  Branch (89:67): [True: 2, False: 0]
  |  |  ------------------
  |  |   90|      2|      (args) : \
  |  |   91|      2|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  325|      2|            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  326|      2|    if (!args) {
  ------------------
  |  Branch (326:9): [True: 0, False: 2]
  ------------------
  327|      0|        goto exit;
  328|      0|    }
  329|      2|    if (!noptargs) {
  ------------------
  |  Branch (329:9): [True: 0, False: 2]
  ------------------
  330|      0|        goto skip_optional_pos;
  331|      0|    }
  332|      2|    if (args[0]) {
  ------------------
  |  Branch (332:9): [True: 2, False: 0]
  ------------------
  333|      2|        {
  334|      2|            Py_ssize_t ival = -1;
  335|      2|            PyObject *iobj = _PyNumber_Index(args[0]);
  336|      2|            if (iobj != NULL) {
  ------------------
  |  Branch (336:17): [True: 2, False: 0]
  ------------------
  337|      2|                ival = PyLong_AsSsize_t(iobj);
  338|      2|                Py_DECREF(iobj);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|      2|            }
  340|      2|            if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (340:17): [True: 0, False: 2]
  |  Branch (340:31): [True: 0, False: 0]
  ------------------
  341|      0|                goto exit;
  342|      0|            }
  343|      2|            length = ival;
  344|      2|            if (length < 0) {
  ------------------
  |  Branch (344:17): [True: 0, False: 2]
  ------------------
  345|      0|                PyErr_SetString(PyExc_ValueError,
  346|      0|                                "length cannot be negative");
  347|      0|                goto exit;
  348|      0|            }
  349|      2|        }
  350|      2|        if (!--noptargs) {
  ------------------
  |  Branch (350:13): [True: 0, False: 2]
  ------------------
  351|      0|            goto skip_optional_pos;
  352|      0|        }
  353|      2|    }
  354|      2|    if (args[1]) {
  ------------------
  |  Branch (354:9): [True: 2, False: 0]
  ------------------
  355|      2|        if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      2|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (355:13): [True: 0, False: 2]
  ------------------
  356|      0|            _PyArg_BadArgument("to_bytes", "argument 'byteorder'", "str", args[1]);
  357|      0|            goto exit;
  358|      0|        }
  359|      2|        byteorder = args[1];
  360|      2|        if (!--noptargs) {
  ------------------
  |  Branch (360:13): [True: 2, False: 0]
  ------------------
  361|      2|            goto skip_optional_pos;
  362|      2|        }
  363|      2|    }
  364|      2|skip_optional_pos:
  365|      2|    if (!noptargs) {
  ------------------
  |  Branch (365:9): [True: 2, False: 0]
  ------------------
  366|      2|        goto skip_optional_kwonly;
  367|      2|    }
  368|      0|    is_signed = PyObject_IsTrue(args[2]);
  369|      0|    if (is_signed < 0) {
  ------------------
  |  Branch (369:9): [True: 0, False: 0]
  ------------------
  370|      0|        goto exit;
  371|      0|    }
  372|      2|skip_optional_kwonly:
  373|      2|    return_value = int_to_bytes_impl(self, length, byteorder, is_signed);
  374|       |
  375|      2|exit:
  376|      2|    return return_value;
  377|      2|}
longobject.c:int_from_bytes:
  410|    279|{
  411|    279|    PyObject *return_value = NULL;
  412|    279|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  413|       |
  414|    279|    #define NUM_KEYWORDS 3
  415|    279|    static struct {
  416|    279|        PyGC_Head _this_is_not_used;
  417|    279|        PyObject_VAR_HEAD
  418|    279|        Py_hash_t ob_hash;
  419|    279|        PyObject *ob_item[NUM_KEYWORDS];
  420|    279|    } _kwtuple = {
  421|    279|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    279|    {                                     \
  |  |   98|    279|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    279|    {                               \
  |  |  |  |   91|    279|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    279|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    279|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    279|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    279|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    279|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    279|        (type)                      \
  |  |  |  |   93|    279|    },
  |  |  ------------------
  |  |   99|    279|        (size)                            \
  |  |  100|    279|    },
  ------------------
  422|    279|        .ob_hash = -1,
  423|    279|        .ob_item = { &_Py_ID(bytes), &_Py_ID(byteorder), &_Py_ID(signed), },
  ------------------
  |  |  936|    279|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    279|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    279|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(bytes), &_Py_ID(byteorder), &_Py_ID(signed), },
  ------------------
  |  |  936|    279|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    279|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    279|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(bytes), &_Py_ID(byteorder), &_Py_ID(signed), },
  ------------------
  |  |  936|    279|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    279|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    279|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|    279|    };
  425|    279|    #undef NUM_KEYWORDS
  426|    279|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  427|       |
  428|       |    #else  // !Py_BUILD_CORE
  429|       |    #  define KWTUPLE NULL
  430|       |    #endif  // !Py_BUILD_CORE
  431|       |
  432|    279|    static const char * const _keywords[] = {"bytes", "byteorder", "signed", NULL};
  433|    279|    static _PyArg_Parser _parser = {
  434|    279|        .keywords = _keywords,
  435|    279|        .fname = "from_bytes",
  436|    279|        .kwtuple = KWTUPLE,
  ------------------
  |  |  426|    279|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  437|    279|    };
  438|    279|    #undef KWTUPLE
  439|    279|    PyObject *argsbuf[3];
  440|    279|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (440:36): [True: 0, False: 279]
  ------------------
  441|    279|    PyObject *bytes_obj;
  442|    279|    PyObject *byteorder = NULL;
  443|    279|    int is_signed = 0;
  444|       |
  445|    279|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    279|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 279, False: 0]
  |  |  ------------------
  |  |   89|    279|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 279, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 279]
  |  |  |  Branch (89:43): [True: 279, False: 0]
  |  |  |  Branch (89:67): [True: 279, False: 0]
  |  |  ------------------
  |  |   90|    279|      (args) : \
  |  |   91|    279|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  446|    279|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  447|    279|    if (!args) {
  ------------------
  |  Branch (447:9): [True: 0, False: 279]
  ------------------
  448|      0|        goto exit;
  449|      0|    }
  450|    279|    bytes_obj = args[0];
  451|    279|    if (!noptargs) {
  ------------------
  |  Branch (451:9): [True: 0, False: 279]
  ------------------
  452|      0|        goto skip_optional_pos;
  453|      0|    }
  454|    279|    if (args[1]) {
  ------------------
  |  Branch (454:9): [True: 279, False: 0]
  ------------------
  455|    279|        if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|    279|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    279|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (455:13): [True: 0, False: 279]
  ------------------
  456|      0|            _PyArg_BadArgument("from_bytes", "argument 'byteorder'", "str", args[1]);
  457|      0|            goto exit;
  458|      0|        }
  459|    279|        byteorder = args[1];
  460|    279|        if (!--noptargs) {
  ------------------
  |  Branch (460:13): [True: 279, False: 0]
  ------------------
  461|    279|            goto skip_optional_pos;
  462|    279|        }
  463|    279|    }
  464|    279|skip_optional_pos:
  465|    279|    if (!noptargs) {
  ------------------
  |  Branch (465:9): [True: 279, False: 0]
  ------------------
  466|    279|        goto skip_optional_kwonly;
  467|    279|    }
  468|      0|    is_signed = PyObject_IsTrue(args[2]);
  469|      0|    if (is_signed < 0) {
  ------------------
  |  Branch (469:9): [True: 0, False: 0]
  ------------------
  470|      0|        goto exit;
  471|      0|    }
  472|    279|skip_optional_kwonly:
  473|    279|    return_value = int_from_bytes_impl((PyTypeObject *)type, bytes_obj, byteorder, is_signed);
  474|       |
  475|    279|exit:
  476|    279|    return return_value;
  477|    279|}
longobject.c:int___format__:
  106|    132|{
  107|    132|    PyObject *return_value = NULL;
  108|    132|    PyObject *format_spec;
  109|       |
  110|    132|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|    132|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    132|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (110:9): [True: 0, False: 132]
  ------------------
  111|      0|        _PyArg_BadArgument("__format__", "argument", "str", arg);
  112|      0|        goto exit;
  113|      0|    }
  114|    132|    format_spec = arg;
  115|    132|    return_value = int___format___impl(self, format_spec);
  116|       |
  117|    132|exit:
  118|    132|    return return_value;
  119|    132|}
longobject.c:long_new:
   17|    145|{
   18|    145|    PyObject *return_value = NULL;
   19|    145|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   20|       |
   21|    145|    #define NUM_KEYWORDS 1
   22|    145|    static struct {
   23|    145|        PyGC_Head _this_is_not_used;
   24|    145|        PyObject_VAR_HEAD
   25|    145|        Py_hash_t ob_hash;
   26|    145|        PyObject *ob_item[NUM_KEYWORDS];
   27|    145|    } _kwtuple = {
   28|    145|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    145|    {                                     \
  |  |   98|    145|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    145|    {                               \
  |  |  |  |   91|    145|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    145|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    145|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    145|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    145|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    145|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    145|        (type)                      \
  |  |  |  |   93|    145|    },
  |  |  ------------------
  |  |   99|    145|        (size)                            \
  |  |  100|    145|    },
  ------------------
   29|    145|        .ob_hash = -1,
   30|    145|        .ob_item = { &_Py_ID(base), },
  ------------------
  |  |  936|    145|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    145|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    145|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   31|    145|    };
   32|    145|    #undef NUM_KEYWORDS
   33|    145|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   34|       |
   35|       |    #else  // !Py_BUILD_CORE
   36|       |    #  define KWTUPLE NULL
   37|       |    #endif  // !Py_BUILD_CORE
   38|       |
   39|    145|    static const char * const _keywords[] = {"", "base", NULL};
   40|    145|    static _PyArg_Parser _parser = {
   41|    145|        .keywords = _keywords,
   42|    145|        .fname = "int",
   43|    145|        .kwtuple = KWTUPLE,
  ------------------
  |  |   33|    145|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   44|    145|    };
   45|    145|    #undef KWTUPLE
   46|    145|    PyObject *argsbuf[2];
   47|    145|    PyObject * const *fastargs;
   48|    145|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|    145|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|    145|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (49:36): [True: 0, False: 145]
  ------------------
   50|    145|    PyObject *x = NULL;
   51|    145|    PyObject *obase = NULL;
   52|       |
   53|    145|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|    145|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 145, Folded]
  |  |  |  Branch (88:23): [True: 145, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|    290|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 145, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 145]
  |  |  |  Branch (89:43): [True: 145, False: 0]
  |  |  |  Branch (89:67): [True: 145, False: 0]
  |  |  |  Branch (89:68): [True: 145, False: 0]
  |  |  ------------------
  |  |   90|    290|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 145, False: 0]
  |  |  ------------------
  |  |   91|    145|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   54|    145|            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   55|    145|    if (!fastargs) {
  ------------------
  |  Branch (55:9): [True: 0, False: 145]
  ------------------
   56|      0|        goto exit;
   57|      0|    }
   58|    145|    if (nargs < 1) {
  ------------------
  |  Branch (58:9): [True: 1, False: 144]
  ------------------
   59|      1|        goto skip_optional_posonly;
   60|      1|    }
   61|    144|    noptargs--;
   62|    144|    x = fastargs[0];
   63|    145|skip_optional_posonly:
   64|    145|    if (!noptargs) {
  ------------------
  |  Branch (64:9): [True: 145, False: 0]
  ------------------
   65|    145|        goto skip_optional_pos;
   66|    145|    }
   67|      0|    obase = fastargs[1];
   68|    145|skip_optional_pos:
   69|    145|    return_value = long_new_impl(type, x, obase);
   70|       |
   71|    145|exit:
   72|    145|    return return_value;
   73|    145|}

memoryobject.c:memoryview_tolist:
  278|      2|{
  279|      2|    return memoryview_tolist_impl((PyMemoryViewObject *)self);
  280|      2|}
memoryobject.c:memoryview_cast:
  169|      2|{
  170|      2|    PyObject *return_value = NULL;
  171|      2|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  172|       |
  173|      2|    #define NUM_KEYWORDS 3
  174|      2|    static struct {
  175|      2|        PyGC_Head _this_is_not_used;
  176|      2|        PyObject_VAR_HEAD
  177|      2|        Py_hash_t ob_hash;
  178|      2|        PyObject *ob_item[NUM_KEYWORDS];
  179|      2|    } _kwtuple = {
  180|      2|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      2|    {                                     \
  |  |   98|      2|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      2|    {                               \
  |  |  |  |   91|      2|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      2|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      2|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      2|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      2|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      2|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      2|        (type)                      \
  |  |  |  |   93|      2|    },
  |  |  ------------------
  |  |   99|      2|        (size)                            \
  |  |  100|      2|    },
  ------------------
  181|      2|        .ob_hash = -1,
  182|      2|        .ob_item = { &_Py_ID(format), &_Py_ID(shape), &_Py_ID(order), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(format), &_Py_ID(shape), &_Py_ID(order), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(format), &_Py_ID(shape), &_Py_ID(order), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|      2|    };
  184|      2|    #undef NUM_KEYWORDS
  185|      2|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  186|       |
  187|       |    #else  // !Py_BUILD_CORE
  188|       |    #  define KWTUPLE NULL
  189|       |    #endif  // !Py_BUILD_CORE
  190|       |
  191|      2|    static const char * const _keywords[] = {"format", "shape", "order", NULL};
  192|      2|    static _PyArg_Parser _parser = {
  193|      2|        .keywords = _keywords,
  194|      2|        .fname = "cast",
  195|      2|        .kwtuple = KWTUPLE,
  ------------------
  |  |  185|      2|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  196|      2|    };
  197|      2|    #undef KWTUPLE
  198|      2|    PyObject *argsbuf[3];
  199|      2|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (199:36): [True: 0, False: 2]
  ------------------
  200|      2|    PyObject *format;
  201|      2|    PyObject *shape = NULL;
  202|      2|    int order = 'C';
  203|       |
  204|      2|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      2|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 2, False: 0]
  |  |  ------------------
  |  |   89|      2|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 2, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 2]
  |  |  |  Branch (89:43): [True: 2, False: 0]
  |  |  |  Branch (89:67): [True: 2, False: 0]
  |  |  ------------------
  |  |   90|      2|      (args) : \
  |  |   91|      2|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  205|      2|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  206|      2|    if (!args) {
  ------------------
  |  Branch (206:9): [True: 0, False: 2]
  ------------------
  207|      0|        goto exit;
  208|      0|    }
  209|      2|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|      2|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (209:9): [True: 0, False: 2]
  ------------------
  210|      0|        _PyArg_BadArgument("cast", "argument 'format'", "str", args[0]);
  211|      0|        goto exit;
  212|      0|    }
  213|      2|    format = args[0];
  214|      2|    if (!noptargs) {
  ------------------
  |  Branch (214:9): [True: 2, False: 0]
  ------------------
  215|      2|        goto skip_optional_pos;
  216|      2|    }
  217|      0|    if (args[1]) {
  ------------------
  |  Branch (217:9): [True: 0, False: 0]
  ------------------
  218|      0|        shape = args[1];
  219|      0|        if (!--noptargs) {
  ------------------
  |  Branch (219:13): [True: 0, False: 0]
  ------------------
  220|      0|            goto skip_optional_pos;
  221|      0|        }
  222|      0|    }
  223|      2|skip_optional_pos:
  224|      2|    if (!noptargs) {
  ------------------
  |  Branch (224:9): [True: 2, False: 0]
  ------------------
  225|      2|        goto skip_optional_kwonly;
  226|      2|    }
  227|      0|    if (!PyUnicode_Check(args[2])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (227:9): [True: 0, False: 0]
  ------------------
  228|      0|        _PyArg_BadArgument("cast", "argument 'order'", "a unicode character", args[2]);
  229|      0|        goto exit;
  230|      0|    }
  231|      0|    if (PyUnicode_GET_LENGTH(args[2]) != 1) {
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (231:9): [True: 0, False: 0]
  ------------------
  232|      0|        PyErr_Format(PyExc_TypeError,
  233|      0|            "cast(): argument 'order' must be a unicode character, "
  234|      0|            "not a string of length %zd",
  235|      0|            PyUnicode_GET_LENGTH(args[2]));
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|      0|        goto exit;
  237|      0|    }
  238|      0|    order = PyUnicode_READ_CHAR(args[2], 0);
  ------------------
  |  |  381|      0|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      2|skip_optional_kwonly:
  240|      2|    return_value = memoryview_cast_impl((PyMemoryViewObject *)self, format, shape, order);
  241|       |
  242|      2|exit:
  243|      2|    return return_value;
  244|      2|}
memoryobject.c:memoryview:
   23|     95|{
   24|     95|    PyObject *return_value = NULL;
   25|     95|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   26|       |
   27|     95|    #define NUM_KEYWORDS 1
   28|     95|    static struct {
   29|     95|        PyGC_Head _this_is_not_used;
   30|     95|        PyObject_VAR_HEAD
   31|     95|        Py_hash_t ob_hash;
   32|     95|        PyObject *ob_item[NUM_KEYWORDS];
   33|     95|    } _kwtuple = {
   34|     95|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     95|    {                                     \
  |  |   98|     95|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     95|    {                               \
  |  |  |  |   91|     95|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     95|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     95|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     95|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     95|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     95|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     95|        (type)                      \
  |  |  |  |   93|     95|    },
  |  |  ------------------
  |  |   99|     95|        (size)                            \
  |  |  100|     95|    },
  ------------------
   35|     95|        .ob_hash = -1,
   36|     95|        .ob_item = { &_Py_ID(object), },
  ------------------
  |  |  936|     95|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     95|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     95|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   37|     95|    };
   38|     95|    #undef NUM_KEYWORDS
   39|     95|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   40|       |
   41|       |    #else  // !Py_BUILD_CORE
   42|       |    #  define KWTUPLE NULL
   43|       |    #endif  // !Py_BUILD_CORE
   44|       |
   45|     95|    static const char * const _keywords[] = {"object", NULL};
   46|     95|    static _PyArg_Parser _parser = {
   47|     95|        .keywords = _keywords,
   48|     95|        .fname = "memoryview",
   49|     95|        .kwtuple = KWTUPLE,
  ------------------
  |  |   39|     95|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   50|     95|    };
   51|     95|    #undef KWTUPLE
   52|     95|    PyObject *argsbuf[1];
   53|     95|    PyObject * const *fastargs;
   54|     95|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|     95|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   55|     95|    PyObject *object;
   56|       |
   57|     95|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|     95|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 95, Folded]
  |  |  |  Branch (88:23): [True: 95, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|    190|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 95, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 95]
  |  |  |  Branch (89:43): [True: 95, False: 0]
  |  |  |  Branch (89:67): [True: 95, False: 0]
  |  |  |  Branch (89:68): [True: 95, False: 0]
  |  |  ------------------
  |  |   90|    190|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 95, False: 0]
  |  |  ------------------
  |  |   91|     95|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   58|     95|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   59|     95|    if (!fastargs) {
  ------------------
  |  Branch (59:9): [True: 0, False: 95]
  ------------------
   60|      0|        goto exit;
   61|      0|    }
   62|     95|    object = fastargs[0];
   63|     95|    return_value = memoryview_impl(type, object);
   64|       |
   65|     95|exit:
   66|     95|    return return_value;
   67|     95|}

moduleobject.c:module___init__:
   24|    117|{
   25|    117|    int return_value = -1;
   26|    117|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   27|       |
   28|    117|    #define NUM_KEYWORDS 2
   29|    117|    static struct {
   30|    117|        PyGC_Head _this_is_not_used;
   31|    117|        PyObject_VAR_HEAD
   32|    117|        Py_hash_t ob_hash;
   33|    117|        PyObject *ob_item[NUM_KEYWORDS];
   34|    117|    } _kwtuple = {
   35|    117|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    117|    {                                     \
  |  |   98|    117|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    117|    {                               \
  |  |  |  |   91|    117|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    117|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    117|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    117|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    117|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    117|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    117|        (type)                      \
  |  |  |  |   93|    117|    },
  |  |  ------------------
  |  |   99|    117|        (size)                            \
  |  |  100|    117|    },
  ------------------
   36|    117|        .ob_hash = -1,
   37|    117|        .ob_item = { &_Py_ID(name), &_Py_ID(doc), },
  ------------------
  |  |  936|    117|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    117|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    117|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(name), &_Py_ID(doc), },
  ------------------
  |  |  936|    117|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    117|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    117|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   38|    117|    };
   39|    117|    #undef NUM_KEYWORDS
   40|    117|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   41|       |
   42|       |    #else  // !Py_BUILD_CORE
   43|       |    #  define KWTUPLE NULL
   44|       |    #endif  // !Py_BUILD_CORE
   45|       |
   46|    117|    static const char * const _keywords[] = {"name", "doc", NULL};
   47|    117|    static _PyArg_Parser _parser = {
   48|    117|        .keywords = _keywords,
   49|    117|        .fname = "module",
   50|    117|        .kwtuple = KWTUPLE,
  ------------------
  |  |   40|    117|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   51|    117|    };
   52|    117|    #undef KWTUPLE
   53|    117|    PyObject *argsbuf[2];
   54|    117|    PyObject * const *fastargs;
   55|    117|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|    117|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   56|    117|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (56:36): [True: 0, False: 117]
  ------------------
   57|    117|    PyObject *name;
   58|    117|    PyObject *doc = Py_None;
  ------------------
  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  ------------------
   59|       |
   60|    117|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|    117|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 117, Folded]
  |  |  |  Branch (88:23): [True: 117, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|    234|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 117, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 117]
  |  |  |  Branch (89:43): [True: 117, False: 0]
  |  |  |  Branch (89:67): [True: 117, False: 0]
  |  |  |  Branch (89:68): [True: 117, False: 0]
  |  |  ------------------
  |  |   90|    234|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 117, False: 0]
  |  |  ------------------
  |  |   91|    117|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   61|    117|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   62|    117|    if (!fastargs) {
  ------------------
  |  Branch (62:9): [True: 0, False: 117]
  ------------------
   63|      0|        goto exit;
   64|      0|    }
   65|    117|    if (!PyUnicode_Check(fastargs[0])) {
  ------------------
  |  |  103|    117|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    117|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (65:9): [True: 0, False: 117]
  ------------------
   66|      0|        _PyArg_BadArgument("module", "argument 'name'", "str", fastargs[0]);
   67|      0|        goto exit;
   68|      0|    }
   69|    117|    name = fastargs[0];
   70|    117|    if (!noptargs) {
  ------------------
  |  Branch (70:9): [True: 117, False: 0]
  ------------------
   71|    117|        goto skip_optional_pos;
   72|    117|    }
   73|      0|    doc = fastargs[1];
   74|    117|skip_optional_pos:
   75|    117|    return_value = module___init___impl((PyModuleObject *)self, name, doc);
   76|       |
   77|    117|exit:
   78|    117|    return return_value;
   79|    117|}

sentinelobject.c:sentinel_new:
   16|      3|{
   17|      3|    PyObject *return_value = NULL;
   18|      3|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   19|       |
   20|      3|    #define NUM_KEYWORDS 1
   21|      3|    static struct {
   22|      3|        PyGC_Head _this_is_not_used;
   23|      3|        PyObject_VAR_HEAD
   24|      3|        Py_hash_t ob_hash;
   25|      3|        PyObject *ob_item[NUM_KEYWORDS];
   26|      3|    } _kwtuple = {
   27|      3|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      3|    {                                     \
  |  |   98|      3|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      3|    {                               \
  |  |  |  |   91|      3|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      3|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      3|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      3|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      3|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      3|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      3|        (type)                      \
  |  |  |  |   93|      3|    },
  |  |  ------------------
  |  |   99|      3|        (size)                            \
  |  |  100|      3|    },
  ------------------
   28|      3|        .ob_hash = -1,
   29|      3|        .ob_item = { &_Py_ID(repr), },
  ------------------
  |  |  936|      3|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      3|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      3|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   30|      3|    };
   31|      3|    #undef NUM_KEYWORDS
   32|      3|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   33|       |
   34|       |    #else  // !Py_BUILD_CORE
   35|       |    #  define KWTUPLE NULL
   36|       |    #endif  // !Py_BUILD_CORE
   37|       |
   38|      3|    static const char * const _keywords[] = {"", "repr", NULL};
   39|      3|    static _PyArg_Parser _parser = {
   40|      3|        .keywords = _keywords,
   41|      3|        .fname = "sentinel",
   42|      3|        .kwtuple = KWTUPLE,
  ------------------
  |  |   32|      3|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   43|      3|    };
   44|      3|    #undef KWTUPLE
   45|      3|    PyObject *argsbuf[2];
   46|      3|    PyObject * const *fastargs;
   47|      3|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      3|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|      3|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (48:36): [True: 0, False: 3]
  ------------------
   49|      3|    PyObject *name;
   50|      3|    PyObject *repr = Py_None;
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
   51|       |
   52|      3|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|      3|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 3, Folded]
  |  |  |  Branch (88:23): [True: 3, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|      6|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 3, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 3]
  |  |  |  Branch (89:43): [True: 3, False: 0]
  |  |  |  Branch (89:67): [True: 3, False: 0]
  |  |  |  Branch (89:68): [True: 3, False: 0]
  |  |  ------------------
  |  |   90|      6|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 3, False: 0]
  |  |  ------------------
  |  |   91|      3|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   53|      3|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   54|      3|    if (!fastargs) {
  ------------------
  |  Branch (54:9): [True: 0, False: 3]
  ------------------
   55|      0|        goto exit;
   56|      0|    }
   57|      3|    if (!PyUnicode_Check(fastargs[0])) {
  ------------------
  |  |  103|      3|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      3|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (57:9): [True: 0, False: 3]
  ------------------
   58|      0|        _PyArg_BadArgument("sentinel", "argument 1", "str", fastargs[0]);
   59|      0|        goto exit;
   60|      0|    }
   61|      3|    name = fastargs[0];
   62|      3|    if (!noptargs) {
  ------------------
  |  Branch (62:9): [True: 3, False: 0]
  ------------------
   63|      3|        goto skip_optional_kwonly;
   64|      3|    }
   65|      0|    repr = fastargs[1];
   66|      3|skip_optional_kwonly:
   67|      3|    return_value = sentinel_new_impl(type, name, repr);
   68|       |
   69|      3|exit:
   70|      3|    return return_value;
   71|      3|}

setobject.c:set_copy:
   74|    304|{
   75|    304|    PyObject *return_value = NULL;
   76|       |
   77|    304|    Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|    304|    {
  ------------------
   78|    304|    return_value = set_copy_impl((PySetObject *)so);
   79|    304|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    304|    }
  ------------------
   80|       |
   81|    304|    return return_value;
   82|    304|}
setobject.c:set_issubset:
  351|  6.41k|{
  352|  6.41k|    PyObject *return_value = NULL;
  353|       |
  354|  6.41k|    Py_BEGIN_CRITICAL_SECTION2(so, other);
  ------------------
  |  |   57|  6.41k|    {
  ------------------
  355|  6.41k|    return_value = set_issubset_impl((PySetObject *)so, other);
  356|  6.41k|    Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|  6.41k|    }
  ------------------
  357|       |
  358|  6.41k|    return return_value;
  359|  6.41k|}
setobject.c:set_add:
  401|   205k|{
  402|   205k|    PyObject *return_value = NULL;
  403|       |
  404|   205k|    Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|   205k|    {
  ------------------
  405|   205k|    return_value = set_add_impl((PySetObject *)so, key);
  406|   205k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   205k|    }
  ------------------
  407|       |
  408|   205k|    return return_value;
  409|   205k|}
setobject.c:set_difference_update:
  252|    152|{
  253|    152|    PyObject *return_value = NULL;
  254|    152|    PyObject * const *others;
  255|    152|    Py_ssize_t others_length;
  256|       |
  257|    152|    others = args;
  258|    152|    others_length = nargs;
  259|    152|    return_value = set_difference_update_impl((PySetObject *)so, others, others_length);
  260|       |
  261|    152|    return return_value;
  262|    152|}
setobject.c:set_remove:
  471|    374|{
  472|    374|    PyObject *return_value = NULL;
  473|       |
  474|    374|    Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|    374|    {
  ------------------
  475|    374|    return_value = set_remove_impl((PySetObject *)so, key);
  476|    374|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    374|    }
  ------------------
  477|       |
  478|    374|    return return_value;
  479|    374|}
setobject.c:frozenset___contains__:
  447|     15|{
  448|     15|    PyObject *return_value = NULL;
  449|       |
  450|     15|    return_value = frozenset___contains___impl((PySetObject *)so, key);
  451|       |
  452|     15|    return return_value;
  453|     15|}
setobject.c:set_clear:
  122|     27|{
  123|     27|    PyObject *return_value = NULL;
  124|       |
  125|     27|    Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|     27|    {
  ------------------
  126|     27|    return_value = set_clear_impl((PySetObject *)so);
  127|     27|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     27|    }
  ------------------
  128|       |
  129|     27|    return return_value;
  130|     27|}
setobject.c:set_pop:
   23|    704|{
   24|    704|    PyObject *return_value = NULL;
   25|       |
   26|    704|    Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|    704|    {
  ------------------
   27|    704|    return_value = set_pop_impl((PySetObject *)so);
   28|    704|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    704|    }
  ------------------
   29|       |
   30|    704|    return return_value;
   31|    704|}

tupleobject.c:tuple_new:
   91|    153|{
   92|    153|    PyObject *return_value = NULL;
   93|    153|    PyTypeObject *base_tp = &PyTuple_Type;
   94|    153|    PyObject *iterable = NULL;
   95|       |
   96|    153|    if ((type == base_tp || type->tp_init == base_tp->tp_init) &&
  ------------------
  |  Branch (96:10): [True: 0, False: 153]
  |  Branch (96:29): [True: 153, False: 0]
  ------------------
   97|    153|        !_PyArg_NoKeywords("tuple", kwargs)) {
  ------------------
  |  |   25|    153|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 153, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   98|      0|        goto exit;
   99|      0|    }
  100|    153|    if (!_PyArg_CheckPositional("tuple", PyTuple_GET_SIZE(args), 0, 1)) {
  ------------------
  |  |   31|    153|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 153, False: 0]
  |  |  |  Branch (31:27): [True: 153, False: 0]
  |  |  ------------------
  |  |   32|    153|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  101|      0|        goto exit;
  102|      0|    }
  103|    153|    if (PyTuple_GET_SIZE(args) < 1) {
  ------------------
  |  |   27|    153|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    153|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (103:9): [True: 0, False: 153]
  ------------------
  104|      0|        goto skip_optional;
  105|      0|    }
  106|    153|    iterable = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|    153|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    153|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (106:16): [True: 153, False: 0]
  ------------------
  107|    153|skip_optional:
  108|    153|    return_value = tuple_new_impl(type, iterable);
  109|       |
  110|    153|exit:
  111|    153|    return return_value;
  112|    153|}
tupleobject.c:tuple_vectorcall:
  117|      4|{
  118|      4|    PyObject *return_value = NULL;
  119|      4|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      4|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  120|      4|    PyObject *iterable = NULL;
  121|       |
  122|      4|    assert(Py_Is(_PyType_CAST(type), &PyTuple_Type));
  ------------------
  |  Branch (122:5): [True: 4, False: 0]
  |  Branch (122:5): [True: 4, False: 0]
  ------------------
  123|       |    /* Make sure the type object is immutable: the generated
  124|       |     * vectorcall doesn't deal e.g. with users reassigning __init__. */
  125|      4|    assert(PyType_HasFeature(_PyType_CAST(type), Py_TPFLAGS_IMMUTABLETYPE));
  ------------------
  |  Branch (125:5): [True: 4, False: 0]
  |  Branch (125:5): [True: 4, False: 0]
  ------------------
  126|      4|    if (!_PyArg_NoKwnames("tuple", kwnames)) {
  ------------------
  |  |   15|      4|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 4, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  127|      0|        goto exit;
  128|      0|    }
  129|      4|    if (!_PyArg_CheckPositional("tuple", nargs, 0, 1)) {
  ------------------
  |  |   31|      4|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 4, False: 0]
  |  |  |  Branch (31:27): [True: 4, False: 0]
  |  |  ------------------
  |  |   32|      4|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  130|      0|        goto exit;
  131|      0|    }
  132|      4|    if (nargs < 1) {
  ------------------
  |  Branch (132:9): [True: 0, False: 4]
  ------------------
  133|      0|        goto skip_optional;
  134|      0|    }
  135|      4|    iterable = args[0];
  136|      4|skip_optional:
  137|      4|    return_value = tuple_new_impl(_PyType_CAST(type), iterable);
  ------------------
  |  |  770|      4|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (137:35): [True: 4, False: 0]
  ------------------
  138|       |
  139|      4|exit:
  140|      4|    return return_value;
  141|      4|}

typeobject.c:type_mro:
   77|     85|{
   78|     85|    return type_mro_impl((PyTypeObject *)self);
   79|     85|}
typeobject.c:type___subclasses__:
   95|     58|{
   96|     58|    return type___subclasses___impl((PyTypeObject *)self);
   97|     58|}
typeobject.c:type___instancecheck__:
   21|     12|{
   22|     12|    PyObject *return_value = NULL;
   23|     12|    int _return_value;
   24|       |
   25|     12|    _return_value = type___instancecheck___impl((PyTypeObject *)self, instance);
   26|     12|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (26:9): [True: 0, False: 12]
  |  Branch (26:34): [True: 0, False: 0]
  ------------------
   27|      0|        goto exit;
   28|      0|    }
   29|     12|    return_value = PyBool_FromLong((long)_return_value);
   30|       |
   31|     12|exit:
   32|     12|    return return_value;
   33|     12|}
typeobject.c:type___subclasscheck__:
   49|     10|{
   50|     10|    PyObject *return_value = NULL;
   51|     10|    int _return_value;
   52|       |
   53|     10|    _return_value = type___subclasscheck___impl((PyTypeObject *)self, subclass);
   54|     10|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (54:9): [True: 0, False: 10]
  |  Branch (54:34): [True: 0, False: 0]
  ------------------
   55|      0|        goto exit;
   56|      0|    }
   57|     10|    return_value = PyBool_FromLong((long)_return_value);
   58|       |
   59|     10|exit:
   60|     10|    return return_value;
   61|     10|}
typeobject.c:object___format__:
  215|  48.4k|{
  216|  48.4k|    PyObject *return_value = NULL;
  217|  48.4k|    PyObject *format_spec;
  218|       |
  219|  48.4k|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|  48.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (219:9): [True: 0, False: 48.4k]
  ------------------
  220|      0|        _PyArg_BadArgument("__format__", "argument", "str", arg);
  221|      0|        goto exit;
  222|      0|    }
  223|  48.4k|    format_spec = arg;
  224|  48.4k|    return_value = object___format___impl(self, format_spec);
  225|       |
  226|  48.4k|exit:
  227|  48.4k|    return return_value;
  228|  48.4k|}

unicodeobject.c:unicode_encode:
  219|  53.3k|{
  220|  53.3k|    PyObject *return_value = NULL;
  221|  53.3k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  222|       |
  223|  53.3k|    #define NUM_KEYWORDS 2
  224|  53.3k|    static struct {
  225|  53.3k|        PyGC_Head _this_is_not_used;
  226|  53.3k|        PyObject_VAR_HEAD
  227|  53.3k|        Py_hash_t ob_hash;
  228|  53.3k|        PyObject *ob_item[NUM_KEYWORDS];
  229|  53.3k|    } _kwtuple = {
  230|  53.3k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  53.3k|    {                                     \
  |  |   98|  53.3k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  53.3k|    {                               \
  |  |  |  |   91|  53.3k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  53.3k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  53.3k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  53.3k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  53.3k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  53.3k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  53.3k|        (type)                      \
  |  |  |  |   93|  53.3k|    },
  |  |  ------------------
  |  |   99|  53.3k|        (size)                            \
  |  |  100|  53.3k|    },
  ------------------
  231|  53.3k|        .ob_hash = -1,
  232|  53.3k|        .ob_item = { &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  53.3k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  53.3k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  53.3k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|  53.3k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  53.3k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  53.3k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|  53.3k|    };
  234|  53.3k|    #undef NUM_KEYWORDS
  235|  53.3k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  236|       |
  237|       |    #else  // !Py_BUILD_CORE
  238|       |    #  define KWTUPLE NULL
  239|       |    #endif  // !Py_BUILD_CORE
  240|       |
  241|  53.3k|    static const char * const _keywords[] = {"encoding", "errors", NULL};
  242|  53.3k|    static _PyArg_Parser _parser = {
  243|  53.3k|        .keywords = _keywords,
  244|  53.3k|        .fname = "encode",
  245|  53.3k|        .kwtuple = KWTUPLE,
  ------------------
  |  |  235|  53.3k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  246|  53.3k|    };
  247|  53.3k|    #undef KWTUPLE
  248|  53.3k|    PyObject *argsbuf[2];
  249|  53.3k|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (249:36): [True: 0, False: 53.3k]
  ------------------
  250|  53.3k|    const char *encoding = NULL;
  251|  53.3k|    const char *errors = NULL;
  252|       |
  253|  53.3k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  53.3k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |   89|  53.3k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 53.3k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 53.3k]
  |  |  |  Branch (89:43): [True: 53.3k, False: 0]
  |  |  |  Branch (89:67): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |   90|  53.3k|      (args) : \
  |  |   91|  53.3k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  254|  53.3k|            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  255|  53.3k|    if (!args) {
  ------------------
  |  Branch (255:9): [True: 0, False: 53.3k]
  ------------------
  256|      0|        goto exit;
  257|      0|    }
  258|  53.3k|    if (!noptargs) {
  ------------------
  |  Branch (258:9): [True: 0, False: 53.3k]
  ------------------
  259|      0|        goto skip_optional_pos;
  260|      0|    }
  261|  53.3k|    if (args[0]) {
  ------------------
  |  Branch (261:9): [True: 53.3k, False: 0]
  ------------------
  262|  53.3k|        if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|  53.3k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  53.3k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (262:13): [True: 0, False: 53.3k]
  ------------------
  263|      0|            _PyArg_BadArgument("encode", "argument 'encoding'", "str", args[0]);
  264|      0|            goto exit;
  265|      0|        }
  266|  53.3k|        Py_ssize_t encoding_length;
  267|  53.3k|        encoding = PyUnicode_AsUTF8AndSize(args[0], &encoding_length);
  268|  53.3k|        if (encoding == NULL) {
  ------------------
  |  Branch (268:13): [True: 0, False: 53.3k]
  ------------------
  269|      0|            goto exit;
  270|      0|        }
  271|  53.3k|        if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (271:13): [True: 0, False: 53.3k]
  ------------------
  272|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
  273|      0|            goto exit;
  274|      0|        }
  275|  53.3k|        if (!--noptargs) {
  ------------------
  |  Branch (275:13): [True: 53.3k, False: 6]
  ------------------
  276|  53.3k|            goto skip_optional_pos;
  277|  53.3k|        }
  278|  53.3k|    }
  279|      6|    if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|      6|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (279:9): [True: 0, False: 6]
  ------------------
  280|      0|        _PyArg_BadArgument("encode", "argument 'errors'", "str", args[1]);
  281|      0|        goto exit;
  282|      0|    }
  283|      6|    Py_ssize_t errors_length;
  284|      6|    errors = PyUnicode_AsUTF8AndSize(args[1], &errors_length);
  285|      6|    if (errors == NULL) {
  ------------------
  |  Branch (285:9): [True: 0, False: 6]
  ------------------
  286|      0|        goto exit;
  287|      0|    }
  288|      6|    if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (288:9): [True: 0, False: 6]
  ------------------
  289|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
  290|      0|        goto exit;
  291|      0|    }
  292|  53.3k|skip_optional_pos:
  293|  53.3k|    return_value = unicode_encode_impl(self, encoding, errors);
  294|       |
  295|  53.3k|exit:
  296|  53.3k|    return return_value;
  297|  53.3k|}
unicodeobject.c:unicode_replace:
  936|    515|{
  937|    515|    PyObject *return_value = NULL;
  938|    515|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  939|       |
  940|    515|    #define NUM_KEYWORDS 1
  941|    515|    static struct {
  942|    515|        PyGC_Head _this_is_not_used;
  943|    515|        PyObject_VAR_HEAD
  944|    515|        Py_hash_t ob_hash;
  945|    515|        PyObject *ob_item[NUM_KEYWORDS];
  946|    515|    } _kwtuple = {
  947|    515|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    515|    {                                     \
  |  |   98|    515|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    515|    {                               \
  |  |  |  |   91|    515|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    515|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    515|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    515|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    515|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    515|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    515|        (type)                      \
  |  |  |  |   93|    515|    },
  |  |  ------------------
  |  |   99|    515|        (size)                            \
  |  |  100|    515|    },
  ------------------
  948|    515|        .ob_hash = -1,
  949|    515|        .ob_item = { &_Py_ID(count), },
  ------------------
  |  |  936|    515|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    515|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    515|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|    515|    };
  951|    515|    #undef NUM_KEYWORDS
  952|    515|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  953|       |
  954|       |    #else  // !Py_BUILD_CORE
  955|       |    #  define KWTUPLE NULL
  956|       |    #endif  // !Py_BUILD_CORE
  957|       |
  958|    515|    static const char * const _keywords[] = {"", "", "count", NULL};
  959|    515|    static _PyArg_Parser _parser = {
  960|    515|        .keywords = _keywords,
  961|    515|        .fname = "replace",
  962|    515|        .kwtuple = KWTUPLE,
  ------------------
  |  |  952|    515|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  963|    515|    };
  964|    515|    #undef KWTUPLE
  965|    515|    PyObject *argsbuf[3];
  966|    515|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (966:36): [True: 0, False: 515]
  ------------------
  967|    515|    PyObject *old;
  968|    515|    PyObject *new;
  969|    515|    Py_ssize_t count = -1;
  970|       |
  971|    515|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    515|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 515, False: 0]
  |  |  ------------------
  |  |   89|    515|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 515, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 515]
  |  |  |  Branch (89:43): [True: 515, False: 0]
  |  |  |  Branch (89:67): [True: 515, False: 0]
  |  |  ------------------
  |  |   90|    515|      (args) : \
  |  |   91|    515|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  972|    515|            /*minpos*/ 2, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  973|    515|    if (!args) {
  ------------------
  |  Branch (973:9): [True: 0, False: 515]
  ------------------
  974|      0|        goto exit;
  975|      0|    }
  976|    515|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|    515|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    515|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (976:9): [True: 0, False: 515]
  ------------------
  977|      0|        _PyArg_BadArgument("replace", "argument 1", "str", args[0]);
  978|      0|        goto exit;
  979|      0|    }
  980|    515|    old = args[0];
  981|    515|    if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|    515|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    515|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (981:9): [True: 0, False: 515]
  ------------------
  982|      0|        _PyArg_BadArgument("replace", "argument 2", "str", args[1]);
  983|      0|        goto exit;
  984|      0|    }
  985|    515|    new = args[1];
  986|    515|    if (!noptargs) {
  ------------------
  |  Branch (986:9): [True: 515, False: 0]
  ------------------
  987|    515|        goto skip_optional_pos;
  988|    515|    }
  989|      0|    {
  990|      0|        Py_ssize_t ival = -1;
  991|      0|        PyObject *iobj = _PyNumber_Index(args[2]);
  992|      0|        if (iobj != NULL) {
  ------------------
  |  Branch (992:13): [True: 0, False: 0]
  ------------------
  993|      0|            ival = PyLong_AsSsize_t(iobj);
  994|      0|            Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|      0|        }
  996|      0|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (996:13): [True: 0, False: 0]
  |  Branch (996:27): [True: 0, False: 0]
  ------------------
  997|      0|            goto exit;
  998|      0|        }
  999|      0|        count = ival;
 1000|      0|    }
 1001|    515|skip_optional_pos:
 1002|    515|    return_value = unicode_replace_impl(self, old, new, count);
 1003|       |
 1004|    515|exit:
 1005|    515|    return return_value;
 1006|    515|}
unicodeobject.c:unicode_split:
 1266|    251|{
 1267|    251|    PyObject *return_value = NULL;
 1268|    251|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1269|       |
 1270|    251|    #define NUM_KEYWORDS 2
 1271|    251|    static struct {
 1272|    251|        PyGC_Head _this_is_not_used;
 1273|    251|        PyObject_VAR_HEAD
 1274|    251|        Py_hash_t ob_hash;
 1275|    251|        PyObject *ob_item[NUM_KEYWORDS];
 1276|    251|    } _kwtuple = {
 1277|    251|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    251|    {                                     \
  |  |   98|    251|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    251|    {                               \
  |  |  |  |   91|    251|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    251|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    251|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    251|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    251|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    251|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    251|        (type)                      \
  |  |  |  |   93|    251|    },
  |  |  ------------------
  |  |   99|    251|        (size)                            \
  |  |  100|    251|    },
  ------------------
 1278|    251|        .ob_hash = -1,
 1279|    251|        .ob_item = { &_Py_ID(sep), &_Py_ID(maxsplit), },
  ------------------
  |  |  936|    251|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    251|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    251|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(sep), &_Py_ID(maxsplit), },
  ------------------
  |  |  936|    251|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    251|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    251|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1280|    251|    };
 1281|    251|    #undef NUM_KEYWORDS
 1282|    251|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1283|       |
 1284|       |    #else  // !Py_BUILD_CORE
 1285|       |    #  define KWTUPLE NULL
 1286|       |    #endif  // !Py_BUILD_CORE
 1287|       |
 1288|    251|    static const char * const _keywords[] = {"sep", "maxsplit", NULL};
 1289|    251|    static _PyArg_Parser _parser = {
 1290|    251|        .keywords = _keywords,
 1291|    251|        .fname = "split",
 1292|    251|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1282|    251|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1293|    251|    };
 1294|    251|    #undef KWTUPLE
 1295|    251|    PyObject *argsbuf[2];
 1296|    251|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1296:36): [True: 0, False: 251]
  ------------------
 1297|    251|    PyObject *sep = Py_None;
  ------------------
  |  |  616|    251|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1298|    251|    Py_ssize_t maxsplit = -1;
 1299|       |
 1300|    251|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    251|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 251, False: 0]
  |  |  ------------------
  |  |   89|    251|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 251, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 251]
  |  |  |  Branch (89:43): [True: 251, False: 0]
  |  |  |  Branch (89:67): [True: 251, False: 0]
  |  |  ------------------
  |  |   90|    251|      (args) : \
  |  |   91|    251|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1301|    251|            /*minpos*/ 0, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1302|    251|    if (!args) {
  ------------------
  |  Branch (1302:9): [True: 0, False: 251]
  ------------------
 1303|      0|        goto exit;
 1304|      0|    }
 1305|    251|    if (!noptargs) {
  ------------------
  |  Branch (1305:9): [True: 2, False: 249]
  ------------------
 1306|      2|        goto skip_optional_pos;
 1307|      2|    }
 1308|    249|    if (args[0]) {
  ------------------
  |  Branch (1308:9): [True: 249, False: 0]
  ------------------
 1309|    249|        sep = args[0];
 1310|    249|        if (!--noptargs) {
  ------------------
  |  Branch (1310:13): [True: 249, False: 0]
  ------------------
 1311|    249|            goto skip_optional_pos;
 1312|    249|        }
 1313|    249|    }
 1314|      0|    {
 1315|      0|        Py_ssize_t ival = -1;
 1316|      0|        PyObject *iobj = _PyNumber_Index(args[1]);
 1317|      0|        if (iobj != NULL) {
  ------------------
  |  Branch (1317:13): [True: 0, False: 0]
  ------------------
 1318|      0|            ival = PyLong_AsSsize_t(iobj);
 1319|      0|            Py_DECREF(iobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1320|      0|        }
 1321|      0|        if (ival == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1321:13): [True: 0, False: 0]
  |  Branch (1321:27): [True: 0, False: 0]
  ------------------
 1322|      0|            goto exit;
 1323|      0|        }
 1324|      0|        maxsplit = ival;
 1325|      0|    }
 1326|    251|skip_optional_pos:
 1327|    251|    return_value = unicode_split_impl(self, sep, maxsplit);
 1328|       |
 1329|    251|exit:
 1330|    251|    return return_value;
 1331|    251|}
unicodeobject.c:unicode_expandtabs:
  315|  1.94k|{
  316|  1.94k|    PyObject *return_value = NULL;
  317|  1.94k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  318|       |
  319|  1.94k|    #define NUM_KEYWORDS 1
  320|  1.94k|    static struct {
  321|  1.94k|        PyGC_Head _this_is_not_used;
  322|  1.94k|        PyObject_VAR_HEAD
  323|  1.94k|        Py_hash_t ob_hash;
  324|  1.94k|        PyObject *ob_item[NUM_KEYWORDS];
  325|  1.94k|    } _kwtuple = {
  326|  1.94k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  1.94k|    {                                     \
  |  |   98|  1.94k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  1.94k|    {                               \
  |  |  |  |   91|  1.94k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  1.94k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  1.94k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  1.94k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  1.94k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  1.94k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  1.94k|        (type)                      \
  |  |  |  |   93|  1.94k|    },
  |  |  ------------------
  |  |   99|  1.94k|        (size)                            \
  |  |  100|  1.94k|    },
  ------------------
  327|  1.94k|        .ob_hash = -1,
  328|  1.94k|        .ob_item = { &_Py_ID(tabsize), },
  ------------------
  |  |  936|  1.94k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.94k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.94k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  1.94k|    };
  330|  1.94k|    #undef NUM_KEYWORDS
  331|  1.94k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  332|       |
  333|       |    #else  // !Py_BUILD_CORE
  334|       |    #  define KWTUPLE NULL
  335|       |    #endif  // !Py_BUILD_CORE
  336|       |
  337|  1.94k|    static const char * const _keywords[] = {"tabsize", NULL};
  338|  1.94k|    static _PyArg_Parser _parser = {
  339|  1.94k|        .keywords = _keywords,
  340|  1.94k|        .fname = "expandtabs",
  341|  1.94k|        .kwtuple = KWTUPLE,
  ------------------
  |  |  331|  1.94k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  342|  1.94k|    };
  343|  1.94k|    #undef KWTUPLE
  344|  1.94k|    PyObject *argsbuf[1];
  345|  1.94k|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (345:36): [True: 0, False: 1.94k]
  ------------------
  346|  1.94k|    int tabsize = 8;
  347|       |
  348|  1.94k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  1.94k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 1.94k, False: 0]
  |  |  ------------------
  |  |   89|  1.94k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 1.94k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 1.94k]
  |  |  |  Branch (89:43): [True: 1.94k, False: 0]
  |  |  |  Branch (89:67): [True: 0, False: 1.94k]
  |  |  ------------------
  |  |   90|  1.94k|      (args) : \
  |  |   91|  1.94k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|  1.94k|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  349|  1.94k|            /*minpos*/ 0, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  350|  1.94k|    if (!args) {
  ------------------
  |  Branch (350:9): [True: 0, False: 1.94k]
  ------------------
  351|      0|        goto exit;
  352|      0|    }
  353|  1.94k|    if (!noptargs) {
  ------------------
  |  Branch (353:9): [True: 1.94k, False: 0]
  ------------------
  354|  1.94k|        goto skip_optional_pos;
  355|  1.94k|    }
  356|      0|    tabsize = PyLong_AsInt(args[0]);
  357|      0|    if (tabsize == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (357:9): [True: 0, False: 0]
  |  Branch (357:26): [True: 0, False: 0]
  ------------------
  358|      0|        goto exit;
  359|      0|    }
  360|  1.94k|skip_optional_pos:
  361|  1.94k|    return_value = unicode_expandtabs_impl(self, tabsize);
  362|       |
  363|  1.94k|exit:
  364|  1.94k|    return return_value;
  365|  1.94k|}
unicodeobject.c:unicode_find:
  385|      2|{
  386|      2|    PyObject *return_value = NULL;
  387|      2|    PyObject *substr;
  388|      2|    Py_ssize_t start = 0;
  389|      2|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|      2|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  390|      2|    Py_ssize_t _return_value;
  391|       |
  392|      2|    if (!_PyArg_CheckPositional("find", nargs, 1, 3)) {
  ------------------
  |  |   31|      2|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 2, False: 0]
  |  |  |  Branch (31:27): [True: 2, False: 0]
  |  |  ------------------
  |  |   32|      2|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  393|      0|        goto exit;
  394|      0|    }
  395|      2|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|      2|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (395:9): [True: 0, False: 2]
  ------------------
  396|      0|        _PyArg_BadArgument("find", "argument 1", "str", args[0]);
  397|      0|        goto exit;
  398|      0|    }
  399|      2|    substr = args[0];
  400|      2|    if (nargs < 2) {
  ------------------
  |  Branch (400:9): [True: 0, False: 2]
  ------------------
  401|      0|        goto skip_optional;
  402|      0|    }
  403|      2|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (403:9): [True: 0, False: 2]
  ------------------
  404|      0|        goto exit;
  405|      0|    }
  406|      2|    if (nargs < 3) {
  ------------------
  |  Branch (406:9): [True: 2, False: 0]
  ------------------
  407|      2|        goto skip_optional;
  408|      2|    }
  409|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (409:9): [True: 0, False: 0]
  ------------------
  410|      0|        goto exit;
  411|      0|    }
  412|      2|skip_optional:
  413|      2|    _return_value = unicode_find_impl(str, substr, start, end);
  414|      2|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (414:9): [True: 0, False: 2]
  |  Branch (414:34): [True: 0, False: 0]
  ------------------
  415|      0|        goto exit;
  416|      0|    }
  417|      2|    return_value = PyLong_FromSsize_t(_return_value);
  418|       |
  419|      2|exit:
  420|      2|    return return_value;
  421|      2|}
unicodeobject.c:unicode_lower:
  808|   576k|{
  809|   576k|    return unicode_lower_impl(self);
  810|   576k|}
unicodeobject.c:unicode_lstrip:
  862|      1|{
  863|      1|    PyObject *return_value = NULL;
  864|      1|    PyObject *chars = Py_None;
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  865|       |
  866|      1|    if (!_PyArg_CheckPositional("lstrip", nargs, 0, 1)) {
  ------------------
  |  |   31|      1|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 1, False: 0]
  |  |  |  Branch (31:27): [True: 1, False: 0]
  |  |  ------------------
  |  |   32|      1|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  867|      0|        goto exit;
  868|      0|    }
  869|      1|    if (nargs < 1) {
  ------------------
  |  Branch (869:9): [True: 0, False: 1]
  ------------------
  870|      0|        goto skip_optional;
  871|      0|    }
  872|      1|    chars = args[0];
  873|      1|skip_optional:
  874|      1|    return_value = unicode_lstrip_impl(self, chars);
  875|       |
  876|      1|exit:
  877|      1|    return return_value;
  878|      1|}
unicodeobject.c:unicode_rfind:
 1092|     99|{
 1093|     99|    PyObject *return_value = NULL;
 1094|     99|    PyObject *substr;
 1095|     99|    Py_ssize_t start = 0;
 1096|     99|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|     99|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1097|     99|    Py_ssize_t _return_value;
 1098|       |
 1099|     99|    if (!_PyArg_CheckPositional("rfind", nargs, 1, 3)) {
  ------------------
  |  |   31|     99|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 99, False: 0]
  |  |  |  Branch (31:27): [True: 99, False: 0]
  |  |  ------------------
  |  |   32|     99|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1100|      0|        goto exit;
 1101|      0|    }
 1102|     99|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|     99|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     99|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1102:9): [True: 0, False: 99]
  ------------------
 1103|      0|        _PyArg_BadArgument("rfind", "argument 1", "str", args[0]);
 1104|      0|        goto exit;
 1105|      0|    }
 1106|     99|    substr = args[0];
 1107|     99|    if (nargs < 2) {
  ------------------
  |  Branch (1107:9): [True: 99, False: 0]
  ------------------
 1108|     99|        goto skip_optional;
 1109|     99|    }
 1110|      0|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (1110:9): [True: 0, False: 0]
  ------------------
 1111|      0|        goto exit;
 1112|      0|    }
 1113|      0|    if (nargs < 3) {
  ------------------
  |  Branch (1113:9): [True: 0, False: 0]
  ------------------
 1114|      0|        goto skip_optional;
 1115|      0|    }
 1116|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (1116:9): [True: 0, False: 0]
  ------------------
 1117|      0|        goto exit;
 1118|      0|    }
 1119|     99|skip_optional:
 1120|     99|    _return_value = unicode_rfind_impl(str, substr, start, end);
 1121|     99|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (1121:9): [True: 0, False: 99]
  |  Branch (1121:34): [True: 0, False: 0]
  ------------------
 1122|      0|        goto exit;
 1123|      0|    }
 1124|     99|    return_value = PyLong_FromSsize_t(_return_value);
 1125|       |
 1126|     99|exit:
 1127|     99|    return return_value;
 1128|     99|}
unicodeobject.c:unicode_rstrip:
  896|  5.06k|{
  897|  5.06k|    PyObject *return_value = NULL;
  898|  5.06k|    PyObject *chars = Py_None;
  ------------------
  |  |  616|  5.06k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  899|       |
  900|  5.06k|    if (!_PyArg_CheckPositional("rstrip", nargs, 0, 1)) {
  ------------------
  |  |   31|  5.06k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 5.06k, False: 0]
  |  |  |  Branch (31:27): [True: 5.06k, False: 0]
  |  |  ------------------
  |  |   32|  5.06k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  901|      0|        goto exit;
  902|      0|    }
  903|  5.06k|    if (nargs < 1) {
  ------------------
  |  Branch (903:9): [True: 152, False: 4.91k]
  ------------------
  904|    152|        goto skip_optional;
  905|    152|    }
  906|  4.91k|    chars = args[0];
  907|  5.06k|skip_optional:
  908|  5.06k|    return_value = unicode_rstrip_impl(self, chars);
  909|       |
  910|  5.06k|exit:
  911|  5.06k|    return return_value;
  912|  5.06k|}
unicodeobject.c:unicode_strip:
  828|      3|{
  829|      3|    PyObject *return_value = NULL;
  830|      3|    PyObject *chars = Py_None;
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
  831|       |
  832|      3|    if (!_PyArg_CheckPositional("strip", nargs, 0, 1)) {
  ------------------
  |  |   31|      3|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 3, False: 0]
  |  |  |  Branch (31:27): [True: 3, False: 0]
  |  |  ------------------
  |  |   32|      3|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  833|      0|        goto exit;
  834|      0|    }
  835|      3|    if (nargs < 1) {
  ------------------
  |  Branch (835:9): [True: 3, False: 0]
  ------------------
  836|      3|        goto skip_optional;
  837|      3|    }
  838|      0|    chars = args[0];
  839|      3|skip_optional:
  840|      3|    return_value = unicode_strip_impl(self, chars);
  841|       |
  842|      3|exit:
  843|      3|    return return_value;
  844|      3|}
unicodeobject.c:unicode_upper:
 1634|     51|{
 1635|     51|    return unicode_upper_impl(self);
 1636|     51|}
unicodeobject.c:unicode_startswith:
 1698|   115k|{
 1699|   115k|    PyObject *return_value = NULL;
 1700|   115k|    PyObject *subobj;
 1701|   115k|    Py_ssize_t start = 0;
 1702|   115k|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|   115k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1703|       |
 1704|   115k|    if (!_PyArg_CheckPositional("startswith", nargs, 1, 3)) {
  ------------------
  |  |   31|   115k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 115k, False: 0]
  |  |  |  Branch (31:27): [True: 115k, False: 0]
  |  |  ------------------
  |  |   32|   115k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1705|      0|        goto exit;
 1706|      0|    }
 1707|   115k|    subobj = args[0];
 1708|   115k|    if (nargs < 2) {
  ------------------
  |  Branch (1708:9): [True: 115k, False: 0]
  ------------------
 1709|   115k|        goto skip_optional;
 1710|   115k|    }
 1711|      0|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (1711:9): [True: 0, False: 0]
  ------------------
 1712|      0|        goto exit;
 1713|      0|    }
 1714|      0|    if (nargs < 3) {
  ------------------
  |  Branch (1714:9): [True: 0, False: 0]
  ------------------
 1715|      0|        goto skip_optional;
 1716|      0|    }
 1717|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (1717:9): [True: 0, False: 0]
  ------------------
 1718|      0|        goto exit;
 1719|      0|    }
 1720|   115k|skip_optional:
 1721|   115k|    return_value = unicode_startswith_impl(self, subobj, start, end);
 1722|       |
 1723|   115k|exit:
 1724|   115k|    return return_value;
 1725|   115k|}
unicodeobject.c:unicode_endswith:
 1749|  48.5k|{
 1750|  48.5k|    PyObject *return_value = NULL;
 1751|  48.5k|    PyObject *subobj;
 1752|  48.5k|    Py_ssize_t start = 0;
 1753|  48.5k|    Py_ssize_t end = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  48.5k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1754|       |
 1755|  48.5k|    if (!_PyArg_CheckPositional("endswith", nargs, 1, 3)) {
  ------------------
  |  |   31|  48.5k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 48.5k, False: 0]
  |  |  |  Branch (31:27): [True: 48.5k, False: 0]
  |  |  ------------------
  |  |   32|  48.5k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1756|      0|        goto exit;
 1757|      0|    }
 1758|  48.5k|    subobj = args[0];
 1759|  48.5k|    if (nargs < 2) {
  ------------------
  |  Branch (1759:9): [True: 48.5k, False: 0]
  ------------------
 1760|  48.5k|        goto skip_optional;
 1761|  48.5k|    }
 1762|      0|    if (!_PyEval_SliceIndex(args[1], &start)) {
  ------------------
  |  Branch (1762:9): [True: 0, False: 0]
  ------------------
 1763|      0|        goto exit;
 1764|      0|    }
 1765|      0|    if (nargs < 3) {
  ------------------
  |  Branch (1765:9): [True: 0, False: 0]
  ------------------
 1766|      0|        goto skip_optional;
 1767|      0|    }
 1768|      0|    if (!_PyEval_SliceIndex(args[2], &end)) {
  ------------------
  |  Branch (1768:9): [True: 0, False: 0]
  ------------------
 1769|      0|        goto exit;
 1770|      0|    }
 1771|  48.5k|skip_optional:
 1772|  48.5k|    return_value = unicode_endswith_impl(self, subobj, start, end);
 1773|       |
 1774|  48.5k|exit:
 1775|  48.5k|    return return_value;
 1776|  48.5k|}
unicodeobject.c:unicode_isascii:
  496|    366|{
  497|    366|    return unicode_isascii_impl(self);
  498|    366|}
unicodeobject.c:unicode_isidentifier:
  706|     32|{
  707|     32|    return unicode_isidentifier_impl(self);
  708|     32|}
unicodeobject.c:unicode_new:
 1831|      7|{
 1832|      7|    PyObject *return_value = NULL;
 1833|      7|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1834|       |
 1835|      7|    #define NUM_KEYWORDS 3
 1836|      7|    static struct {
 1837|      7|        PyGC_Head _this_is_not_used;
 1838|      7|        PyObject_VAR_HEAD
 1839|      7|        Py_hash_t ob_hash;
 1840|      7|        PyObject *ob_item[NUM_KEYWORDS];
 1841|      7|    } _kwtuple = {
 1842|      7|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      7|    {                                     \
  |  |   98|      7|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      7|    {                               \
  |  |  |  |   91|      7|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      7|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      7|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      7|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      7|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      7|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      7|        (type)                      \
  |  |  |  |   93|      7|    },
  |  |  ------------------
  |  |   99|      7|        (size)                            \
  |  |  100|      7|    },
  ------------------
 1843|      7|        .ob_hash = -1,
 1844|      7|        .ob_item = { &_Py_ID(object), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|      7|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      7|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      7|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(object), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|      7|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      7|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      7|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(object), &_Py_ID(encoding), &_Py_ID(errors), },
  ------------------
  |  |  936|      7|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      7|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      7|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1845|      7|    };
 1846|      7|    #undef NUM_KEYWORDS
 1847|      7|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1848|       |
 1849|       |    #else  // !Py_BUILD_CORE
 1850|       |    #  define KWTUPLE NULL
 1851|       |    #endif  // !Py_BUILD_CORE
 1852|       |
 1853|      7|    static const char * const _keywords[] = {"object", "encoding", "errors", NULL};
 1854|      7|    static _PyArg_Parser _parser = {
 1855|      7|        .keywords = _keywords,
 1856|      7|        .fname = "str",
 1857|      7|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1847|      7|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1858|      7|    };
 1859|      7|    #undef KWTUPLE
 1860|      7|    PyObject *argsbuf[3];
 1861|      7|    PyObject * const *fastargs;
 1862|      7|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      7|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1863|      7|    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0;
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1863:36): [True: 0, False: 7]
  ------------------
 1864|      7|    PyObject *x = NULL;
 1865|      7|    const char *encoding = NULL;
 1866|      7|    const char *errors = NULL;
 1867|       |
 1868|      7|    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser,
  ------------------
  |  |   88|      7|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 7, Folded]
  |  |  |  Branch (88:23): [True: 7, False: 0]
  |  |  |  Branch (88:43): [True: 0, Folded]
  |  |  ------------------
  |  |   89|     14|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 7, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 7]
  |  |  |  Branch (89:43): [True: 7, False: 0]
  |  |  |  Branch (89:67): [True: 7, False: 0]
  |  |  |  Branch (89:68): [True: 7, False: 0]
  |  |  ------------------
  |  |   90|     14|      (args) : \
  |  |  ------------------
  |  |  |  Branch (90:8): [True: 7, False: 0]
  |  |  ------------------
  |  |   91|      7|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |  ------------------
  |  |  |  Branch (91:29): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1869|      7|            /*minpos*/ 0, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1870|      7|    if (!fastargs) {
  ------------------
  |  Branch (1870:9): [True: 0, False: 7]
  ------------------
 1871|      0|        goto exit;
 1872|      0|    }
 1873|      7|    if (!noptargs) {
  ------------------
  |  Branch (1873:9): [True: 0, False: 7]
  ------------------
 1874|      0|        goto skip_optional_pos;
 1875|      0|    }
 1876|      7|    if (fastargs[0]) {
  ------------------
  |  Branch (1876:9): [True: 7, False: 0]
  ------------------
 1877|      7|        x = fastargs[0];
 1878|      7|        if (!--noptargs) {
  ------------------
  |  Branch (1878:13): [True: 7, False: 0]
  ------------------
 1879|      7|            goto skip_optional_pos;
 1880|      7|        }
 1881|      7|    }
 1882|      0|    if (fastargs[1]) {
  ------------------
  |  Branch (1882:9): [True: 0, False: 0]
  ------------------
 1883|      0|        if (!PyUnicode_Check(fastargs[1])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1883:13): [True: 0, False: 0]
  ------------------
 1884|      0|            _PyArg_BadArgument("str", "argument 'encoding'", "str", fastargs[1]);
 1885|      0|            goto exit;
 1886|      0|        }
 1887|      0|        Py_ssize_t encoding_length;
 1888|      0|        encoding = PyUnicode_AsUTF8AndSize(fastargs[1], &encoding_length);
 1889|      0|        if (encoding == NULL) {
  ------------------
  |  Branch (1889:13): [True: 0, False: 0]
  ------------------
 1890|      0|            goto exit;
 1891|      0|        }
 1892|      0|        if (strlen(encoding) != (size_t)encoding_length) {
  ------------------
  |  Branch (1892:13): [True: 0, False: 0]
  ------------------
 1893|      0|            PyErr_SetString(PyExc_ValueError, "embedded null character");
 1894|      0|            goto exit;
 1895|      0|        }
 1896|      0|        if (!--noptargs) {
  ------------------
  |  Branch (1896:13): [True: 0, False: 0]
  ------------------
 1897|      0|            goto skip_optional_pos;
 1898|      0|        }
 1899|      0|    }
 1900|      0|    if (!PyUnicode_Check(fastargs[2])) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1900:9): [True: 0, False: 0]
  ------------------
 1901|      0|        _PyArg_BadArgument("str", "argument 'errors'", "str", fastargs[2]);
 1902|      0|        goto exit;
 1903|      0|    }
 1904|      0|    Py_ssize_t errors_length;
 1905|      0|    errors = PyUnicode_AsUTF8AndSize(fastargs[2], &errors_length);
 1906|      0|    if (errors == NULL) {
  ------------------
  |  Branch (1906:9): [True: 0, False: 0]
  ------------------
 1907|      0|        goto exit;
 1908|      0|    }
 1909|      0|    if (strlen(errors) != (size_t)errors_length) {
  ------------------
  |  Branch (1909:9): [True: 0, False: 0]
  ------------------
 1910|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 1911|      0|        goto exit;
 1912|      0|    }
 1913|      7|skip_optional_pos:
 1914|      7|    return_value = unicode_new_impl(type, x, encoding, errors);
 1915|       |
 1916|      7|exit:
 1917|      7|    return return_value;
 1918|      7|}

_Py_set_localsplus_info:
  383|   110k|{
  384|   110k|    PyTuple_SET_ITEM(names, offset, Py_NewRef(name));
  ------------------
  |  |   40|   110k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   110k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   110k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   110k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   110k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|   110k|    _PyLocals_SetKind(kinds, offset, kind);
  386|   110k|}
_PyCode_Validate:
  447|  56.1k|{
  448|       |    /* Check argument types */
  449|  56.1k|    if (con->argcount < con->posonlyargcount || con->posonlyargcount < 0 ||
  ------------------
  |  Branch (449:9): [True: 0, False: 56.1k]
  |  Branch (449:49): [True: 0, False: 56.1k]
  ------------------
  450|  56.1k|        con->kwonlyargcount < 0 ||
  ------------------
  |  Branch (450:9): [True: 0, False: 56.1k]
  ------------------
  451|  56.1k|        con->stacksize < 0 || con->flags < 0 ||
  ------------------
  |  Branch (451:9): [True: 0, False: 56.1k]
  |  Branch (451:31): [True: 0, False: 56.1k]
  ------------------
  452|  56.1k|        con->code == NULL || !PyBytes_Check(con->code) ||
  ------------------
  |  |   28|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (452:9): [True: 0, False: 56.1k]
  |  Branch (452:30): [True: 0, False: 56.1k]
  ------------------
  453|  56.1k|        con->consts == NULL || !PyTuple_Check(con->consts) ||
  ------------------
  |  |   27|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (453:9): [True: 0, False: 56.1k]
  |  Branch (453:32): [True: 0, False: 56.1k]
  ------------------
  454|  56.1k|        con->names == NULL || !PyTuple_Check(con->names) ||
  ------------------
  |  |   27|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (454:9): [True: 0, False: 56.1k]
  |  Branch (454:31): [True: 0, False: 56.1k]
  ------------------
  455|  56.1k|        con->localsplusnames == NULL || !PyTuple_Check(con->localsplusnames) ||
  ------------------
  |  |   27|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (455:9): [True: 0, False: 56.1k]
  |  Branch (455:41): [True: 0, False: 56.1k]
  ------------------
  456|  56.1k|        con->localspluskinds == NULL || !PyBytes_Check(con->localspluskinds) ||
  ------------------
  |  |   28|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (456:9): [True: 0, False: 56.1k]
  |  Branch (456:41): [True: 0, False: 56.1k]
  ------------------
  457|  56.1k|        PyTuple_GET_SIZE(con->localsplusnames)
  ------------------
  |  |   27|  56.1k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (457:9): [True: 0, False: 56.1k]
  ------------------
  458|  56.1k|            != PyBytes_GET_SIZE(con->localspluskinds) ||
  ------------------
  |  |   33|   112k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|  56.1k|        con->name == NULL || !PyUnicode_Check(con->name) ||
  ------------------
  |  |  103|  56.1k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (459:9): [True: 0, False: 56.1k]
  |  Branch (459:30): [True: 0, False: 56.1k]
  ------------------
  460|  56.1k|        con->qualname == NULL || !PyUnicode_Check(con->qualname) ||
  ------------------
  |  |  103|  56.1k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (460:9): [True: 0, False: 56.1k]
  |  Branch (460:34): [True: 0, False: 56.1k]
  ------------------
  461|  56.1k|        con->filename == NULL || !PyUnicode_Check(con->filename) ||
  ------------------
  |  |  103|  56.1k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (461:9): [True: 0, False: 56.1k]
  |  Branch (461:34): [True: 0, False: 56.1k]
  ------------------
  462|  56.1k|        con->linetable == NULL || !PyBytes_Check(con->linetable) ||
  ------------------
  |  |   28|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   112k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (462:9): [True: 0, False: 56.1k]
  |  Branch (462:35): [True: 0, False: 56.1k]
  ------------------
  463|  56.1k|        con->exceptiontable == NULL || !PyBytes_Check(con->exceptiontable)
  ------------------
  |  |   28|  56.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  56.1k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (463:9): [True: 0, False: 56.1k]
  |  Branch (463:40): [True: 0, False: 56.1k]
  ------------------
  464|  56.1k|        ) {
  465|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  466|      0|        return -1;
  467|      0|    }
  468|       |
  469|       |    /* Make sure that code is indexable with an int, this is
  470|       |       a long running assumption in ceval.c and many parts of
  471|       |       the interpreter. */
  472|  56.1k|    if (PyBytes_GET_SIZE(con->code) > INT_MAX) {
  ------------------
  |  |   33|  56.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (472:9): [True: 0, False: 56.1k]
  ------------------
  473|      0|        PyErr_SetString(PyExc_OverflowError,
  474|      0|                        "code: co_code larger than INT_MAX");
  475|      0|        return -1;
  476|      0|    }
  477|  56.1k|    if (PyBytes_GET_SIZE(con->code) % sizeof(_Py_CODEUNIT) != 0 ||
  ------------------
  |  |   33|  56.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (477:9): [True: 0, False: 56.1k]
  ------------------
  478|  56.1k|        !_Py_IS_ALIGNED(PyBytes_AS_STRING(con->code), sizeof(_Py_CODEUNIT))
  ------------------
  |  |  246|  56.1k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  ------------------
  |  Branch (478:9): [True: 0, False: 56.1k]
  ------------------
  479|  56.1k|        ) {
  480|      0|        PyErr_SetString(PyExc_ValueError, "code: co_code is malformed");
  481|      0|        return -1;
  482|      0|    }
  483|       |
  484|       |    /* Ensure that the co_varnames has enough names to cover the arg counts.
  485|       |     * Note that totalargs = nlocals - nplainlocals.  We check nplainlocals
  486|       |     * here to avoid the possibility of overflow (however remote). */
  487|  56.1k|    int nlocals;
  488|  56.1k|    get_localsplus_counts(con->localsplusnames, con->localspluskinds,
  489|  56.1k|                          &nlocals, NULL, NULL);
  490|  56.1k|    int nplainlocals = nlocals -
  491|  56.1k|                       con->argcount -
  492|  56.1k|                       con->kwonlyargcount -
  493|  56.1k|                       ((con->flags & CO_VARARGS) != 0) -
  ------------------
  |  |  124|  56.1k|#define CO_VARARGS      0x0004
  ------------------
  494|  56.1k|                       ((con->flags & CO_VARKEYWORDS) != 0);
  ------------------
  |  |  125|  56.1k|#define CO_VARKEYWORDS  0x0008
  ------------------
  495|  56.1k|    if (nplainlocals < 0) {
  ------------------
  |  Branch (495:9): [True: 0, False: 56.1k]
  ------------------
  496|      0|        PyErr_SetString(PyExc_ValueError, "code: co_varnames is too small");
  497|      0|        return -1;
  498|      0|    }
  499|       |
  500|  56.1k|    return 0;
  501|  56.1k|}
_PyCode_New:
  713|  56.1k|{
  714|  56.1k|    if (intern_code_constants(con) < 0) {
  ------------------
  |  Branch (714:9): [True: 0, False: 56.1k]
  ------------------
  715|      0|        return NULL;
  716|      0|    }
  717|       |
  718|  56.1k|    PyObject *replacement_locations = NULL;
  719|       |    // Compact the linetable if we are opted out of debug
  720|       |    // ranges.
  721|  56.1k|    if (!_Py_GetConfig()->code_debug_ranges) {
  ------------------
  |  Branch (721:9): [True: 0, False: 56.1k]
  ------------------
  722|      0|        replacement_locations = remove_column_info(con->linetable);
  723|      0|        if (replacement_locations == NULL) {
  ------------------
  |  Branch (723:13): [True: 0, False: 0]
  ------------------
  724|      0|            return NULL;
  725|      0|        }
  726|      0|        con->linetable = replacement_locations;
  727|      0|    }
  728|       |
  729|  56.1k|    Py_ssize_t size = PyBytes_GET_SIZE(con->code) / sizeof(_Py_CODEUNIT);
  ------------------
  |  |   33|  56.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|  56.1k|    PyCodeObject *co;
  731|       |#ifdef Py_GIL_DISABLED
  732|       |    co = PyObject_GC_NewVar(PyCodeObject, &PyCode_Type, size);
  733|       |#else
  734|  56.1k|    co = PyObject_NewVar(PyCodeObject, &PyCode_Type, size);
  ------------------
  |  |  137|  56.1k|                ( (type *) _PyObject_NewVar((typeobj), (n)) )
  ------------------
  735|  56.1k|#endif
  736|  56.1k|    if (co == NULL) {
  ------------------
  |  Branch (736:9): [True: 0, False: 56.1k]
  ------------------
  737|      0|        Py_XDECREF(replacement_locations);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|      0|        PyErr_NoMemory();
  739|      0|        return NULL;
  740|      0|    }
  741|       |
  742|       |#ifdef Py_GIL_DISABLED
  743|       |    co->_co_unique_id = _Py_INVALID_UNIQUE_ID;
  744|       |#endif
  745|       |
  746|  56.1k|    if (init_code(co, con) < 0) {
  ------------------
  |  Branch (746:9): [True: 0, False: 56.1k]
  ------------------
  747|      0|        Py_XDECREF(replacement_locations);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  748|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      0|        return NULL;
  750|      0|    }
  751|       |
  752|       |#ifdef Py_GIL_DISABLED
  753|       |    co->_co_unique_id = _PyObject_AssignUniqueId((PyObject *)co);
  754|       |    _PyObject_GC_TRACK(co);
  755|       |#endif
  756|  56.1k|    Py_XDECREF(replacement_locations);
  ------------------
  |  |  524|  56.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  757|  56.1k|    return co;
  758|  56.1k|}
_PyCode_ConstantKey:
 2932|   117M|{
 2933|   117M|    PyObject *key;
 2934|       |
 2935|       |    /* Py_None and Py_Ellipsis are singletons. */
 2936|   117M|    if (op == Py_None || op == Py_Ellipsis
  ------------------
  |  |  616|   234M|#  define Py_None (&_Py_NoneStruct)
  ------------------
                  if (op == Py_None || op == Py_Ellipsis
  ------------------
  |  |   14|   234M|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (2936:9): [True: 20.7k, False: 117M]
  |  Branch (2936:26): [True: 3.32k, False: 117M]
  ------------------
 2937|   117M|       || PyLong_CheckExact(op)
  ------------------
  |  |   14|   117M|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|   234M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   117M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   117M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 63.1M, False: 54.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2938|   117M|       || PyUnicode_CheckExact(op)
  ------------------
  |  |  104|  54.2M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   171M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  54.2M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  54.2M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 565k, False: 53.6M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2939|       |          /* code_richcompare() uses _PyCode_ConstantKey() internally */
 2940|  53.6M|       || PyCode_Check(op))
  ------------------
  |  |  168|  53.6M|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|  53.6M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.6M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 89.2k, False: 53.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2941|  63.8M|    {
 2942|       |        /* Objects of these types are always different from object of other
 2943|       |         * type and from tuples. */
 2944|  63.8M|        key = Py_NewRef(op);
  ------------------
  |  |  550|  63.8M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  63.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2945|  63.8M|    }
 2946|  53.5M|    else if (PyBool_Check(op) || PyBytes_CheckExact(op)) {
  ------------------
  |  |   12|  53.5M|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|   107M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 14.0k, False: 53.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  else if (PyBool_Check(op) || PyBytes_CheckExact(op)) {
  ------------------
  |  |   29|  53.5M|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|  53.5M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 176k, False: 53.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2947|       |        /* Make booleans different from integers 0 and 1.
 2948|       |         * Avoid BytesWarning from comparing bytes with strings. */
 2949|   190k|        key = _PyTuple_FromPair((PyObject *)Py_TYPE(op), op);
  ------------------
  |  |  213|   190k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   190k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   190k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2950|   190k|    }
 2951|  53.3M|    else if (PyFloat_CheckExact(op)) {
  ------------------
  |  |   17|  53.3M|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|  53.3M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 52.5M, False: 850k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2952|  52.5M|        double d = PyFloat_AS_DOUBLE(op);
  ------------------
  |  |   18|  52.5M|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2953|       |        /* all we need is to make the tuple different in either the 0.0
 2954|       |         * or -0.0 case from all others, just to avoid the "coercion".
 2955|       |         */
 2956|  52.5M|        if (d == 0.0 && copysign(1.0, d) < 0.0)
  ------------------
  |  Branch (2956:13): [True: 91.1k, False: 52.4M]
  |  Branch (2956:25): [True: 7.06k, False: 84.0k]
  ------------------
 2957|  7.06k|            key = PyTuple_Pack(3, Py_TYPE(op), op, Py_None);
  ------------------
  |  |  213|  7.06k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  7.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          key = PyTuple_Pack(3, Py_TYPE(op), op, Py_None);
  ------------------
  |  |  616|  7.06k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2958|  52.5M|        else
 2959|  52.5M|            key = _PyTuple_FromPair((PyObject *)Py_TYPE(op), op);
  ------------------
  |  |  213|  52.5M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  52.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2960|  52.5M|    }
 2961|   850k|    else if (PyComplex_CheckExact(op)) {
  ------------------
  |  |   14|   850k|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|   850k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   850k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   850k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 290k, False: 559k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2962|   290k|        Py_complex z;
 2963|   290k|        int real_negzero, imag_negzero;
 2964|       |        /* For the complex case we must make complex(x, 0.)
 2965|       |           different from complex(x, -0.) and complex(0., y)
 2966|       |           different from complex(-0., y), for any x and y.
 2967|       |           All four complex zeros must be distinguished.*/
 2968|   290k|        z = PyComplex_AsCComplex(op);
 2969|   290k|        real_negzero = z.real == 0.0 && copysign(1.0, z.real) < 0.0;
  ------------------
  |  Branch (2969:24): [True: 150k, False: 140k]
  |  Branch (2969:41): [True: 20.4k, False: 130k]
  ------------------
 2970|   290k|        imag_negzero = z.imag == 0.0 && copysign(1.0, z.imag) < 0.0;
  ------------------
  |  Branch (2970:24): [True: 59.1k, False: 231k]
  |  Branch (2970:41): [True: 18.5k, False: 40.6k]
  ------------------
 2971|       |        /* use True, False and None singleton as tags for the real and imag
 2972|       |         * sign, to make tuples different */
 2973|   290k|        if (real_negzero && imag_negzero) {
  ------------------
  |  Branch (2973:13): [True: 20.4k, False: 270k]
  |  Branch (2973:29): [True: 8.40k, False: 12.0k]
  ------------------
 2974|  8.40k|            key = PyTuple_Pack(3, Py_TYPE(op), op, Py_True);
  ------------------
  |  |  213|  8.40k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  8.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          key = PyTuple_Pack(3, Py_TYPE(op), op, Py_True);
  ------------------
  |  |   26|  8.40k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  8.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2975|  8.40k|        }
 2976|   282k|        else if (imag_negzero) {
  ------------------
  |  Branch (2976:18): [True: 10.1k, False: 272k]
  ------------------
 2977|  10.1k|            key = PyTuple_Pack(3, Py_TYPE(op), op, Py_False);
  ------------------
  |  |  213|  10.1k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  10.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          key = PyTuple_Pack(3, Py_TYPE(op), op, Py_False);
  ------------------
  |  |   25|  10.1k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  10.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2978|  10.1k|        }
 2979|   272k|        else if (real_negzero) {
  ------------------
  |  Branch (2979:18): [True: 12.0k, False: 260k]
  ------------------
 2980|  12.0k|            key = PyTuple_Pack(3, Py_TYPE(op), op, Py_None);
  ------------------
  |  |  213|  12.0k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          key = PyTuple_Pack(3, Py_TYPE(op), op, Py_None);
  ------------------
  |  |  616|  12.0k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2981|  12.0k|        }
 2982|   260k|        else {
 2983|   260k|            key = _PyTuple_FromPair((PyObject *)Py_TYPE(op), op);
  ------------------
  |  |  213|   260k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   260k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   260k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2984|   260k|        }
 2985|   290k|    }
 2986|   559k|    else if (PyTuple_CheckExact(op)) {
  ------------------
  |  |   28|   559k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|   559k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   559k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   559k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 546k, False: 12.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2987|   546k|        Py_ssize_t i, len;
 2988|   546k|        PyObject *tuple;
 2989|       |
 2990|   546k|        len = PyTuple_GET_SIZE(op);
  ------------------
  |  |   27|   546k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   546k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   546k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2991|   546k|        tuple = PyTuple_New(len);
 2992|   546k|        if (tuple == NULL)
  ------------------
  |  Branch (2992:13): [True: 0, False: 546k]
  ------------------
 2993|      0|            return NULL;
 2994|       |
 2995|   115M|        for (i=0; i < len; i++) {
  ------------------
  |  Branch (2995:19): [True: 115M, False: 546k]
  ------------------
 2996|   115M|            PyObject *item, *item_key;
 2997|       |
 2998|   115M|            item = PyTuple_GET_ITEM(op, i);
  ------------------
  |  |   29|   115M|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   115M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2998:20): [True: 115M, False: 0]
  ------------------
 2999|      0|            item_key = _PyCode_ConstantKey(item);
 3000|   115M|            if (item_key == NULL) {
  ------------------
  |  Branch (3000:17): [True: 0, False: 115M]
  ------------------
 3001|      0|                Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3002|      0|                return NULL;
 3003|      0|            }
 3004|       |
 3005|   115M|            PyTuple_SET_ITEM(tuple, i, item_key);
  ------------------
  |  |   40|   115M|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   115M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   115M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3006|   115M|        }
 3007|       |
 3008|   546k|        key = _PyTuple_FromPair(tuple, op);
 3009|   546k|        Py_DECREF(tuple);
  ------------------
  |  |  430|   546k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   546k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   546k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3010|   546k|    }
 3011|  12.7k|    else if (PyFrozenSet_CheckExact(op)) {
  ------------------
  |  |   23|  12.7k|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|  12.7k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 5.43k, False: 7.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3012|  5.43k|        Py_ssize_t pos = 0;
 3013|  5.43k|        PyObject *item;
 3014|  5.43k|        Py_hash_t hash;
 3015|  5.43k|        Py_ssize_t i, len;
 3016|  5.43k|        PyObject *tuple, *set;
 3017|       |
 3018|  5.43k|        len = PySet_GET_SIZE(op);
  ------------------
  |  |   71|  5.43k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  5.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3019|  5.43k|        tuple = PyTuple_New(len);
 3020|  5.43k|        if (tuple == NULL)
  ------------------
  |  Branch (3020:13): [True: 0, False: 5.43k]
  ------------------
 3021|      0|            return NULL;
 3022|       |
 3023|  5.43k|        i = 0;
 3024|  29.5k|        while (_PySet_NextEntry(op, &pos, &item, &hash)) {
  ------------------
  |  Branch (3024:16): [True: 24.1k, False: 5.43k]
  ------------------
 3025|  24.1k|            PyObject *item_key;
 3026|       |
 3027|  24.1k|            item_key = _PyCode_ConstantKey(item);
 3028|  24.1k|            if (item_key == NULL) {
  ------------------
  |  Branch (3028:17): [True: 0, False: 24.1k]
  ------------------
 3029|      0|                Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3030|      0|                return NULL;
 3031|      0|            }
 3032|       |
 3033|  24.1k|            assert(i < len);
  ------------------
  |  Branch (3033:13): [True: 24.1k, False: 0]
  ------------------
 3034|  24.1k|            PyTuple_SET_ITEM(tuple, i, item_key);
  ------------------
  |  |   40|  24.1k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  24.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  24.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3035|  24.1k|            i++;
 3036|  24.1k|        }
 3037|  5.43k|        set = PyFrozenSet_New(tuple);
 3038|  5.43k|        Py_DECREF(tuple);
  ------------------
  |  |  430|  5.43k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3039|  5.43k|        if (set == NULL)
  ------------------
  |  Branch (3039:13): [True: 0, False: 5.43k]
  ------------------
 3040|      0|            return NULL;
 3041|       |
 3042|  5.43k|        key = _PyTuple_FromPair(set, op);
 3043|  5.43k|        Py_DECREF(set);
  ------------------
  |  |  430|  5.43k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3044|  5.43k|        return key;
 3045|  5.43k|    }
 3046|  7.34k|    else if (PySlice_Check(op)) {
  ------------------
  |  |   22|  7.34k|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|  7.34k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  7.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  7.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 7.34k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3047|  7.34k|        PySliceObject *slice = (PySliceObject *)op;
 3048|  7.34k|        PyObject *start_key = NULL;
 3049|  7.34k|        PyObject *stop_key = NULL;
 3050|  7.34k|        PyObject *step_key = NULL;
 3051|  7.34k|        key = NULL;
 3052|       |
 3053|  7.34k|        start_key = _PyCode_ConstantKey(slice->start);
 3054|  7.34k|        if (start_key == NULL) {
  ------------------
  |  Branch (3054:13): [True: 0, False: 7.34k]
  ------------------
 3055|      0|            goto slice_exit;
 3056|      0|        }
 3057|       |
 3058|  7.34k|        stop_key = _PyCode_ConstantKey(slice->stop);
 3059|  7.34k|        if (stop_key == NULL) {
  ------------------
  |  Branch (3059:13): [True: 0, False: 7.34k]
  ------------------
 3060|      0|            goto slice_exit;
 3061|      0|        }
 3062|       |
 3063|  7.34k|        step_key = _PyCode_ConstantKey(slice->step);
 3064|  7.34k|        if (step_key == NULL) {
  ------------------
  |  Branch (3064:13): [True: 0, False: 7.34k]
  ------------------
 3065|      0|            goto slice_exit;
 3066|      0|        }
 3067|       |
 3068|  7.34k|        PyObject *slice_key = PySlice_New(start_key, stop_key, step_key);
 3069|  7.34k|        if (slice_key == NULL) {
  ------------------
  |  Branch (3069:13): [True: 0, False: 7.34k]
  ------------------
 3070|      0|            goto slice_exit;
 3071|      0|        }
 3072|       |
 3073|  7.34k|        key = _PyTuple_FromPair(slice_key, op);
 3074|  7.34k|        Py_DECREF(slice_key);
  ------------------
  |  |  430|  7.34k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3075|  7.34k|    slice_exit:
 3076|  7.34k|        Py_XDECREF(start_key);
  ------------------
  |  |  524|  7.34k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3077|  7.34k|        Py_XDECREF(stop_key);
  ------------------
  |  |  524|  7.34k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3078|  7.34k|        Py_XDECREF(step_key);
  ------------------
  |  |  524|  7.34k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3079|  7.34k|    }
 3080|      0|    else {
 3081|       |        /* for other types, use the object identifier as a unique identifier
 3082|       |         * to ensure that they are seen as unequal. */
 3083|      0|        PyObject *obj_id = PyLong_FromVoidPtr(op);
 3084|      0|        if (obj_id == NULL)
  ------------------
  |  Branch (3084:13): [True: 0, False: 0]
  ------------------
 3085|      0|            return NULL;
 3086|       |
 3087|      0|        key = _PyTuple_FromPair(obj_id, op);
 3088|      0|        Py_DECREF(obj_id);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3089|      0|    }
 3090|   117M|    return key;
 3091|   117M|}
_PyCode_Init:
 3253|      2|{
 3254|       |#ifdef Py_GIL_DISABLED
 3255|       |    struct _py_code_state *state = &interp->code_state;
 3256|       |    state->constants = _Py_hashtable_new_full(&hash_const, &compare_constants,
 3257|       |                                              &destroy_key, NULL, NULL);
 3258|       |    if (state->constants == NULL) {
 3259|       |        return _PyStatus_NO_MEMORY();
 3260|       |    }
 3261|       |#endif
 3262|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3263|      2|}
codeobject.c:get_localsplus_counts:
  392|   112k|{
  393|   112k|    int nlocals = 0;
  394|   112k|    int ncellvars = 0;
  395|   112k|    int nfreevars = 0;
  396|   112k|    Py_ssize_t nlocalsplus = PyTuple_GET_SIZE(names);
  ------------------
  |  |   27|   112k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   112k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   112k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|   353k|    for (int i = 0; i < nlocalsplus; i++) {
  ------------------
  |  Branch (397:21): [True: 241k, False: 112k]
  ------------------
  398|   241k|        _PyLocals_Kind kind = _PyLocals_GetKind(kinds, i);
  399|   241k|        if (kind & CO_FAST_LOCAL) {
  ------------------
  |  |  197|   241k|#define CO_FAST_LOCAL   (0x20)
  ------------------
  |  Branch (399:13): [True: 190k, False: 50.1k]
  ------------------
  400|   190k|            nlocals += 1;
  401|   190k|            if (kind & CO_FAST_CELL) {
  ------------------
  |  |  198|   190k|#define CO_FAST_CELL    (0x40)
  ------------------
  |  Branch (401:17): [True: 362, False: 190k]
  ------------------
  402|    362|                ncellvars += 1;
  403|    362|            }
  404|   190k|        }
  405|  50.1k|        else if (kind & CO_FAST_CELL) {
  ------------------
  |  |  198|  50.1k|#define CO_FAST_CELL    (0x40)
  ------------------
  |  Branch (405:18): [True: 24.7k, False: 25.3k]
  ------------------
  406|  24.7k|            ncellvars += 1;
  407|  24.7k|        }
  408|  25.3k|        else if (kind & CO_FAST_FREE) {
  ------------------
  |  |  199|  25.3k|#define CO_FAST_FREE    (0x80)
  ------------------
  |  Branch (408:18): [True: 25.3k, False: 0]
  ------------------
  409|  25.3k|            nfreevars += 1;
  410|  25.3k|        }
  411|   241k|    }
  412|   112k|    if (pnlocals != NULL) {
  ------------------
  |  Branch (412:9): [True: 112k, False: 0]
  ------------------
  413|   112k|        *pnlocals = nlocals;
  414|   112k|    }
  415|   112k|    if (pncellvars != NULL) {
  ------------------
  |  Branch (415:9): [True: 56.1k, False: 56.1k]
  ------------------
  416|  56.1k|        *pncellvars = ncellvars;
  417|  56.1k|    }
  418|   112k|    if (pnfreevars != NULL) {
  ------------------
  |  Branch (418:9): [True: 56.1k, False: 56.1k]
  ------------------
  419|  56.1k|        *pnfreevars = nfreevars;
  420|  56.1k|    }
  421|   112k|}
codeobject.c:intern_code_constants:
  686|  56.1k|{
  687|       |#ifdef Py_GIL_DISABLED
  688|       |    PyInterpreterState *interp = _PyInterpreterState_GET();
  689|       |    struct _py_code_state *state = &interp->code_state;
  690|       |    FT_MUTEX_LOCK(&state->mutex);
  691|       |#endif
  692|  56.1k|    if (intern_strings(con->names) < 0) {
  ------------------
  |  Branch (692:9): [True: 0, False: 56.1k]
  ------------------
  693|      0|        goto error;
  694|      0|    }
  695|  56.1k|    if (intern_constants(con->consts, NULL) < 0) {
  ------------------
  |  Branch (695:9): [True: 0, False: 56.1k]
  ------------------
  696|      0|        goto error;
  697|      0|    }
  698|  56.1k|    if (intern_strings(con->localsplusnames) < 0) {
  ------------------
  |  Branch (698:9): [True: 0, False: 56.1k]
  ------------------
  699|      0|        goto error;
  700|      0|    }
  701|  56.1k|    FT_MUTEX_UNLOCK(&state->mutex);
  ------------------
  |  |  206|  56.1k|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 56.1k]
  |  |  ------------------
  ------------------
  702|  56.1k|    return 0;
  703|       |
  704|      0|error:
  705|      0|    FT_MUTEX_UNLOCK(&state->mutex);
  ------------------
  |  |  206|      0|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 0]
  |  |  ------------------
  ------------------
  706|      0|    return -1;
  707|  56.1k|}
codeobject.c:intern_strings:
  183|   112k|{
  184|   112k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  185|   112k|    Py_ssize_t i;
  186|       |
  187|   455k|    for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
  ------------------
  |  |   27|   112k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   112k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   112k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (187:39): [True: 342k, False: 112k]
  ------------------
  188|   342k|        PyObject *v = PyTuple_GET_ITEM(tuple, i);
  ------------------
  |  |   29|   342k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   342k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   342k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (188:23): [True: 342k, False: 0]
  ------------------
  189|   342k|        if (v == NULL || !PyUnicode_CheckExact(v)) {
  ------------------
  |  |  104|   342k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   342k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   342k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   342k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (189:13): [True: 0, False: 342k]
  |  Branch (189:26): [True: 0, False: 342k]
  ------------------
  190|      0|            PyErr_SetString(PyExc_SystemError,
  191|      0|                            "non-string found in code slot");
  192|      0|            return -1;
  193|      0|        }
  194|   342k|        _PyUnicode_InternImmortal(interp, &_PyTuple_ITEMS(tuple)[i]);
  ------------------
  |  |   26|   342k|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|   685k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 342k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|   342k|    }
  196|   112k|    return 0;
  197|   112k|}
codeobject.c:intern_constants:
  204|   116k|{
  205|   116k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  206|  2.98M|    for (Py_ssize_t i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
  ------------------
  |  |   27|   116k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   116k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   116k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (206:50): [True: 2.86M, False: 116k]
  ------------------
  207|  2.86M|        PyObject *v = PyTuple_GET_ITEM(tuple, i);
  ------------------
  |  |   29|  2.86M|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.86M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.86M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (207:23): [True: 2.86M, False: 0]
  ------------------
  208|  2.86M|        if (PyUnicode_CheckExact(v)) {
  ------------------
  |  |  104|  2.86M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  2.86M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.86M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.86M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 74.7k, False: 2.79M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|  74.7k|            if (should_intern_string(v)) {
  ------------------
  |  Branch (209:17): [True: 37.7k, False: 37.0k]
  ------------------
  210|  37.7k|                PyObject *w = v;
  211|  37.7k|                _PyUnicode_InternMortal(interp, &v);
  212|  37.7k|                if (w != v) {
  ------------------
  |  Branch (212:21): [True: 68, False: 37.6k]
  ------------------
  213|     68|                    PyTuple_SET_ITEM(tuple, i, v);
  ------------------
  |  |   40|     68|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|     68|                    if (modified) {
  ------------------
  |  Branch (214:25): [True: 0, False: 68]
  ------------------
  215|      0|                        *modified = 1;
  216|      0|                    }
  217|     68|                }
  218|  37.7k|            }
  219|  74.7k|        }
  220|  2.79M|        else if (PyTuple_CheckExact(v)) {
  ------------------
  |  |   28|  2.79M|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  2.79M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.79M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.79M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 58.8k, False: 2.73M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|  58.8k|            if (intern_constants(v, NULL) < 0) {
  ------------------
  |  Branch (221:17): [True: 0, False: 58.8k]
  ------------------
  222|      0|                return -1;
  223|      0|            }
  224|  58.8k|        }
  225|  2.73M|        else if (PyFrozenSet_CheckExact(v)) {
  ------------------
  |  |   23|  2.73M|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|  2.73M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.15k, False: 2.73M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|  1.15k|            PyObject *w = v;
  227|  1.15k|            PyObject *tmp = PySequence_Tuple(v);
  228|  1.15k|            if (tmp == NULL) {
  ------------------
  |  Branch (228:17): [True: 0, False: 1.15k]
  ------------------
  229|      0|                return -1;
  230|      0|            }
  231|  1.15k|            int tmp_modified = 0;
  232|  1.15k|            if (intern_constants(tmp, &tmp_modified) < 0) {
  ------------------
  |  Branch (232:17): [True: 0, False: 1.15k]
  ------------------
  233|      0|                Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  234|      0|                return -1;
  235|      0|            }
  236|  1.15k|            if (tmp_modified) {
  ------------------
  |  Branch (236:17): [True: 0, False: 1.15k]
  ------------------
  237|      0|                v = PyFrozenSet_New(tmp);
  238|      0|                if (v == NULL) {
  ------------------
  |  Branch (238:21): [True: 0, False: 0]
  ------------------
  239|      0|                    Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|      0|                    return -1;
  241|      0|                }
  242|       |
  243|      0|                PyTuple_SET_ITEM(tuple, i, v);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|      0|                Py_DECREF(w);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|      0|                if (modified) {
  ------------------
  |  Branch (245:21): [True: 0, False: 0]
  ------------------
  246|      0|                    *modified = 1;
  247|      0|                }
  248|      0|            }
  249|  1.15k|            Py_DECREF(tmp);
  ------------------
  |  |  430|  1.15k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|  1.15k|        }
  251|       |#ifdef Py_GIL_DISABLED
  252|       |        else if (PySlice_Check(v)) {
  253|       |            PySliceObject *slice = (PySliceObject *)v;
  254|       |            PyObject *tmp = PyTuple_New(3);
  255|       |            if (tmp == NULL) {
  256|       |                return -1;
  257|       |            }
  258|       |            PyTuple_SET_ITEM(tmp, 0, Py_NewRef(slice->start));
  259|       |            PyTuple_SET_ITEM(tmp, 1, Py_NewRef(slice->stop));
  260|       |            PyTuple_SET_ITEM(tmp, 2, Py_NewRef(slice->step));
  261|       |            int tmp_modified = 0;
  262|       |            if (intern_constants(tmp, &tmp_modified) < 0) {
  263|       |                Py_DECREF(tmp);
  264|       |                return -1;
  265|       |            }
  266|       |            if (tmp_modified) {
  267|       |                v = PySlice_New(PyTuple_GET_ITEM(tmp, 0),
  268|       |                                PyTuple_GET_ITEM(tmp, 1),
  269|       |                                PyTuple_GET_ITEM(tmp, 2));
  270|       |                if (v == NULL) {
  271|       |                    Py_DECREF(tmp);
  272|       |                    return -1;
  273|       |                }
  274|       |                PyTuple_SET_ITEM(tuple, i, v);
  275|       |                Py_DECREF(slice);
  276|       |                if (modified) {
  277|       |                    *modified = 1;
  278|       |                }
  279|       |            }
  280|       |            Py_DECREF(tmp);
  281|       |        }
  282|       |
  283|       |        // Intern non-string constants in the free-threaded build
  284|       |        _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
  285|       |        if (!_Py_IsImmortal(v) && !PyUnicode_CheckExact(v) &&
  286|       |            should_immortalize_constant(v) &&
  287|       |            !tstate->suppress_co_const_immortalization)
  288|       |        {
  289|       |            PyObject *interned = intern_one_constant(v);
  290|       |            if (interned == NULL) {
  291|       |                return -1;
  292|       |            }
  293|       |            else if (interned != v) {
  294|       |                PyTuple_SET_ITEM(tuple, i, interned);
  295|       |                Py_SETREF(v, interned);
  296|       |                if (modified) {
  297|       |                    *modified = 1;
  298|       |                }
  299|       |            }
  300|       |        }
  301|       |#endif
  302|  2.86M|    }
  303|   116k|    return 0;
  304|   116k|}
codeobject.c:should_intern_string:
  118|  74.7k|{
  119|       |#ifdef Py_GIL_DISABLED
  120|       |    // The free-threaded build interns (and immortalizes) all string constants
  121|       |    return 1;
  122|       |#else
  123|       |    // compute if s matches [a-zA-Z0-9_]
  124|  74.7k|    const unsigned char *s, *e;
  125|       |
  126|  74.7k|    if (!PyUnicode_IS_ASCII(o))
  ------------------
  |  |  227|  74.7k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  74.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  74.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (126:9): [True: 25.5k, False: 49.2k]
  ------------------
  127|  25.5k|        return 0;
  128|       |
  129|  49.2k|    s = PyUnicode_1BYTE_DATA(o);
  ------------------
  |  |  291|  49.2k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  49.2k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  130|  49.2k|    e = s + PyUnicode_GET_LENGTH(o);
  ------------------
  |  |  299|  49.2k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  49.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|   266k|    for (; s != e; s++) {
  ------------------
  |  Branch (131:12): [True: 228k, False: 37.7k]
  ------------------
  132|   228k|        if (!Py_ISALNUM(*s) && *s != '_')
  ------------------
  |  |   26|   457k|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |  163|   228k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |   12|   228k|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   10|   228k|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    8|   228k|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|   228k|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|   228k|#define PY_CTF_DIGIT  0x04
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (132:13): [True: 26.6k, False: 202k]
  |  Branch (132:32): [True: 11.5k, False: 15.1k]
  ------------------
  133|  11.5k|            return 0;
  134|   228k|    }
  135|  37.7k|    return 1;
  136|  49.2k|#endif
  137|  49.2k|}
codeobject.c:init_code:
  512|  56.1k|{
  513|  56.1k|    int nlocalsplus = (int)PyTuple_GET_SIZE(con->localsplusnames);
  ------------------
  |  |   27|  56.1k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  56.1k|    int nlocals, ncellvars, nfreevars;
  515|  56.1k|    get_localsplus_counts(con->localsplusnames, con->localspluskinds,
  516|  56.1k|                          &nlocals, &ncellvars, &nfreevars);
  517|  56.1k|    if (con->stacksize == 0) {
  ------------------
  |  Branch (517:9): [True: 3, False: 56.1k]
  ------------------
  518|      3|        con->stacksize = 1;
  519|      3|    }
  520|       |
  521|  56.1k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  522|  56.1k|    co->co_filename = Py_NewRef(con->filename);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|  56.1k|    co->co_name = Py_NewRef(con->name);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|  56.1k|    co->co_qualname = Py_NewRef(con->qualname);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  525|  56.1k|    _PyUnicode_InternMortal(interp, &co->co_filename);
  526|  56.1k|    _PyUnicode_InternMortal(interp, &co->co_name);
  527|  56.1k|    _PyUnicode_InternMortal(interp, &co->co_qualname);
  528|  56.1k|    co->co_flags = con->flags;
  529|       |
  530|  56.1k|    co->co_firstlineno = con->firstlineno;
  531|  56.1k|    co->co_linetable = Py_NewRef(con->linetable);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|       |
  533|  56.1k|    co->co_consts = Py_NewRef(con->consts);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  534|  56.1k|    co->co_names = Py_NewRef(con->names);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  535|       |
  536|  56.1k|    co->co_localsplusnames = Py_NewRef(con->localsplusnames);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  56.1k|    co->co_localspluskinds = Py_NewRef(con->localspluskinds);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|       |
  539|  56.1k|    co->co_argcount = con->argcount;
  540|  56.1k|    co->co_posonlyargcount = con->posonlyargcount;
  541|  56.1k|    co->co_kwonlyargcount = con->kwonlyargcount;
  542|       |
  543|  56.1k|    co->co_stacksize = con->stacksize;
  544|       |
  545|  56.1k|    co->co_exceptiontable = Py_NewRef(con->exceptiontable);
  ------------------
  |  |  550|  56.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|       |
  547|       |    /* derived values */
  548|  56.1k|    co->co_nlocalsplus = nlocalsplus;
  549|  56.1k|    co->co_nlocals = nlocals;
  550|  56.1k|    co->co_framesize = nlocalsplus + con->stacksize + FRAME_SPECIALS_SIZE;
  ------------------
  |  |  123|  56.1k|#define FRAME_SPECIALS_SIZE ((int)((sizeof(_PyInterpreterFrame)-1)/sizeof(PyObject *)))
  ------------------
  551|  56.1k|    co->co_ncellvars = ncellvars;
  552|  56.1k|    co->co_nfreevars = nfreevars;
  553|  56.1k|    FT_MUTEX_LOCK(&interp->func_state.mutex);
  ------------------
  |  |  204|  56.1k|#define FT_MUTEX_LOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (204:42): [Folded, False: 56.1k]
  |  |  ------------------
  ------------------
  554|  56.1k|    co->co_version = interp->func_state.next_version;
  555|  56.1k|    if (interp->func_state.next_version != 0) {
  ------------------
  |  Branch (555:9): [True: 56.1k, False: 0]
  ------------------
  556|  56.1k|        interp->func_state.next_version++;
  557|  56.1k|    }
  558|  56.1k|    FT_MUTEX_UNLOCK(&interp->func_state.mutex);
  ------------------
  |  |  206|  56.1k|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 56.1k]
  |  |  ------------------
  ------------------
  559|  56.1k|    co->_co_monitoring = NULL;
  560|  56.1k|    co->_co_instrumentation_version = 0;
  561|       |    /* not set */
  562|  56.1k|    co->co_weakreflist = NULL;
  563|  56.1k|    co->co_extra = NULL;
  564|  56.1k|    co->_co_cached = NULL;
  565|  56.1k|    co->co_executors = NULL;
  566|       |
  567|  56.1k|    memcpy(_PyCode_CODE(co), PyBytes_AS_STRING(con->code),
  ------------------
  |  |   16|  56.1k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  56.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                  memcpy(_PyCode_CODE(co), PyBytes_AS_STRING(con->code),
  ------------------
  |  |   27|  56.1k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|  56.1k|           PyBytes_GET_SIZE(con->code));
  ------------------
  |  |   33|  56.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|       |#ifdef Py_GIL_DISABLED
  570|       |    co->co_tlbc = _PyCodeArray_New(INITIAL_SPECIALIZED_CODE_SIZE);
  571|       |    if (co->co_tlbc == NULL) {
  572|       |        return -1;
  573|       |    }
  574|       |    co->co_tlbc->entries[0] = co->co_code_adaptive;
  575|       |#endif
  576|  56.1k|    int entry_point = 0;
  577|  88.1k|    while (entry_point < Py_SIZE(co)) {
  ------------------
  |  |  214|  88.1k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  88.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  88.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (577:12): [True: 88.1k, False: 0]
  ------------------
  578|  88.1k|        if (_PyCode_CODE(co)[entry_point].op.code == RESUME &&
  ------------------
  |  |   16|  88.1k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  88.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                      if (_PyCode_CODE(co)[entry_point].op.code == RESUME &&
  ------------------
  |  |  130|   176k|#define RESUME                                 128
  ------------------
  |  Branch (578:13): [True: 56.6k, False: 31.5k]
  ------------------
  579|  56.6k|           (_PyCode_CODE(co)[entry_point].op.arg & RESUME_OPARG_LOCATION_MASK) != RESUME_AT_GEN_EXPR_START
  ------------------
  |  |   16|  56.6k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  56.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                         (_PyCode_CODE(co)[entry_point].op.arg & RESUME_OPARG_LOCATION_MASK) != RESUME_AT_GEN_EXPR_START
  ------------------
  |  |   94|  56.6k|#define RESUME_OPARG_LOCATION_MASK 0x7
  ------------------
                         (_PyCode_CODE(co)[entry_point].op.arg & RESUME_OPARG_LOCATION_MASK) != RESUME_AT_GEN_EXPR_START
  ------------------
  |  |   92|  56.6k|#define RESUME_AT_GEN_EXPR_START 4
  ------------------
  |  Branch (579:12): [True: 56.1k, False: 423]
  ------------------
  580|  88.1k|        ) {
  581|  56.1k|            break;
  582|  56.1k|        }
  583|  31.9k|        entry_point++;
  584|  31.9k|    }
  585|  56.1k|    co->_co_firsttraceable = entry_point;
  586|       |
  587|       |#ifdef Py_GIL_DISABLED
  588|       |    int enable_counters = interp->config.tlbc_enabled && interp->opt_config.specialization_enabled;
  589|       |    _PyCode_Quicken(_PyCode_CODE(co), Py_SIZE(co), enable_counters, co->co_flags);
  590|       |#else
  591|  56.1k|    _PyCode_Quicken(_PyCode_CODE(co), Py_SIZE(co), interp->opt_config.specialization_enabled, co->co_flags);
  ------------------
  |  |   16|  56.1k|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  56.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                  _PyCode_Quicken(_PyCode_CODE(co), Py_SIZE(co), interp->opt_config.specialization_enabled, co->co_flags);
  ------------------
  |  |  214|  56.1k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  592|  56.1k|#endif
  593|  56.1k|    notify_code_watchers(PY_CODE_EVENT_CREATE, co);
  594|  56.1k|    return 0;
  595|  56.1k|}
codeobject.c:notify_code_watchers:
   42|   109k|{
   43|   109k|    assert(Py_REFCNT(co) > 0);
  ------------------
  |  Branch (43:5): [True: 109k, False: 0]
  ------------------
   44|   109k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   45|   109k|    assert(interp->_initialized);
  ------------------
  |  Branch (45:5): [True: 109k, False: 0]
  ------------------
   46|   109k|    uint8_t bits = interp->active_code_watchers;
   47|   109k|    int i = 0;
   48|   109k|    while (bits) {
  ------------------
  |  Branch (48:12): [True: 0, False: 109k]
  ------------------
   49|      0|        assert(i < CODE_MAX_WATCHERS);
  ------------------
  |  Branch (49:9): [True: 0, False: 0]
  ------------------
   50|      0|        if (bits & 1) {
  ------------------
  |  Branch (50:13): [True: 0, False: 0]
  ------------------
   51|      0|            PyCode_WatchCallback cb = interp->code_watchers[i];
   52|       |            // callback must be non-null if the watcher bit is set
   53|      0|            assert(cb != NULL);
  ------------------
  |  Branch (53:13): [True: 0, False: 0]
  ------------------
   54|      0|            if (cb(event, co) < 0) {
  ------------------
  |  Branch (54:17): [True: 0, False: 0]
  ------------------
   55|      0|                PyErr_FormatUnraisable(
   56|      0|                    "Exception ignored in %s watcher callback for %R",
   57|      0|                    code_event_name(event), co);
   58|      0|            }
   59|      0|        }
   60|      0|        i++;
   61|      0|        bits >>= 1;
   62|      0|    }
   63|   109k|}
codeobject.c:code_dealloc:
 2396|  53.6k|{
 2397|  53.6k|    PyThreadState *tstate = PyThreadState_GET();
  ------------------
  |  |   63|  53.6k|#define PyThreadState_GET() PyThreadState_Get()
  ------------------
 2398|  53.6k|    _Py_atomic_add_uint64(&tstate->interp->_code_object_generation, 1);
 2399|  53.6k|    PyCodeObject *co = _PyCodeObject_CAST(self);
  ------------------
  |  |  114|  53.6k|#define _PyCodeObject_CAST(op)  (assert(PyCode_Check(op)), (PyCodeObject *)(op))
  ------------------
  |  Branch (2399:24): [True: 53.6k, False: 0]
  ------------------
 2400|      0|    _PyObject_ResurrectStart(self);
 2401|  53.6k|    notify_code_watchers(PY_CODE_EVENT_DESTROY, co);
 2402|  53.6k|    if (_PyObject_ResurrectEnd(self)) {
  ------------------
  |  Branch (2402:9): [True: 0, False: 53.6k]
  ------------------
 2403|      0|        return;
 2404|      0|    }
 2405|       |
 2406|       |#ifdef Py_GIL_DISABLED
 2407|       |    PyObject_GC_UnTrack(co);
 2408|       |#endif
 2409|       |
 2410|  53.6k|    _PyFunction_ClearCodeByVersion(co->co_version);
 2411|  53.6k|    if (co->co_extra != NULL) {
  ------------------
  |  Branch (2411:9): [True: 0, False: 53.6k]
  ------------------
 2412|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
 2413|      0|        _PyCodeObjectExtra *co_extra = co->co_extra;
 2414|       |
 2415|      0|        for (Py_ssize_t i = 0; i < co_extra->ce_size; i++) {
  ------------------
  |  Branch (2415:32): [True: 0, False: 0]
  ------------------
 2416|      0|            freefunc free_extra = interp->co_extra_freefuncs[i];
 2417|       |
 2418|      0|            if (free_extra != NULL) {
  ------------------
  |  Branch (2418:17): [True: 0, False: 0]
  ------------------
 2419|      0|                free_extra(co_extra->ce_extras[i]);
 2420|      0|            }
 2421|      0|        }
 2422|       |
 2423|      0|        PyMem_Free(co_extra);
 2424|      0|    }
 2425|       |#ifdef _Py_TIER2
 2426|       |    if (co->co_executors != NULL) {
 2427|       |        clear_executors(co);
 2428|       |    }
 2429|       |#endif
 2430|       |
 2431|  53.6k|    Py_XDECREF(co->co_consts);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2432|  53.6k|    Py_XDECREF(co->co_names);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2433|  53.6k|    Py_XDECREF(co->co_localsplusnames);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2434|  53.6k|    Py_XDECREF(co->co_localspluskinds);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2435|  53.6k|    Py_XDECREF(co->co_filename);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2436|  53.6k|    Py_XDECREF(co->co_name);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2437|  53.6k|    Py_XDECREF(co->co_qualname);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2438|  53.6k|    Py_XDECREF(co->co_linetable);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2439|  53.6k|    Py_XDECREF(co->co_exceptiontable);
  ------------------
  |  |  524|  53.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2440|       |#ifdef Py_GIL_DISABLED
 2441|       |    assert(co->_co_unique_id == _Py_INVALID_UNIQUE_ID);
 2442|       |#endif
 2443|  53.6k|    if (co->_co_cached != NULL) {
  ------------------
  |  Branch (2443:9): [True: 0, False: 53.6k]
  ------------------
 2444|      0|        Py_XDECREF(co->_co_cached->_co_code);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2445|      0|        Py_XDECREF(co->_co_cached->_co_cellvars);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2446|      0|        Py_XDECREF(co->_co_cached->_co_freevars);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2447|      0|        Py_XDECREF(co->_co_cached->_co_varnames);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2448|      0|        PyMem_Free(co->_co_cached);
 2449|      0|    }
 2450|  53.6k|    FT_CLEAR_WEAKREFS(self, co->co_weakreflist);
  ------------------
  |  |   47|  53.6k|    do {                                            \
  |  |   48|  53.6k|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|  53.6k|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 53.6k]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|  53.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 53.6k]
  |  |  ------------------
  ------------------
  |  Branch (2450:5): [True: 53.6k, False: 0]
  ------------------
 2451|  53.6k|    free_monitoring_data(co->_co_monitoring);
 2452|       |#ifdef Py_GIL_DISABLED
 2453|       |    if (co->co_tlbc != NULL) {
 2454|       |        // The first element always points to the mutable bytecode at the end of
 2455|       |        // the code object, which will be freed when the code object is freed.
 2456|       |        for (Py_ssize_t i = 1; i < co->co_tlbc->size; i++) {
 2457|       |            char *entry = co->co_tlbc->entries[i];
 2458|       |            if (entry != NULL) {
 2459|       |                PyMem_Free(entry);
 2460|       |            }
 2461|       |        }
 2462|       |        PyMem_Free(co->co_tlbc);
 2463|       |    }
 2464|       |#endif
 2465|  53.6k|    PyObject_Free(co);
 2466|  53.6k|}
codeobject.c:free_monitoring_data:
 2372|  53.6k|{
 2373|  53.6k|    if (data == NULL) {
  ------------------
  |  Branch (2373:9): [True: 53.6k, False: 0]
  ------------------
 2374|  53.6k|        return;
 2375|  53.6k|    }
 2376|      0|    if (data->tools) {
  ------------------
  |  Branch (2376:9): [True: 0, False: 0]
  ------------------
 2377|      0|        PyMem_Free(data->tools);
 2378|      0|    }
 2379|      0|    if (data->lines) {
  ------------------
  |  Branch (2379:9): [True: 0, False: 0]
  ------------------
 2380|      0|        PyMem_Free(data->lines);
 2381|      0|    }
 2382|      0|    if (data->line_tools) {
  ------------------
  |  Branch (2382:9): [True: 0, False: 0]
  ------------------
 2383|      0|        PyMem_Free(data->line_tools);
 2384|      0|    }
 2385|      0|    if (data->per_instruction_opcodes) {
  ------------------
  |  Branch (2385:9): [True: 0, False: 0]
  ------------------
 2386|      0|        PyMem_Free(data->per_instruction_opcodes);
 2387|      0|    }
 2388|      0|    if (data->per_instruction_tools) {
  ------------------
  |  Branch (2388:9): [True: 0, False: 0]
  ------------------
 2389|      0|        PyMem_Free(data->per_instruction_tools);
 2390|      0|    }
 2391|      0|    PyMem_Free(data);
 2392|      0|}
codeobject.c:code_hash:
 2589|   208k|{
 2590|   208k|    PyCodeObject *co = _PyCodeObject_CAST(self);
  ------------------
  |  |  114|   208k|#define _PyCodeObject_CAST(op)  (assert(PyCode_Check(op)), (PyCodeObject *)(op))
  ------------------
  |  Branch (2590:24): [True: 208k, False: 0]
  ------------------
 2591|      0|    Py_uhash_t uhash = 20221211;
 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
 2595|   208k|    } while (0)
 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
 2598|   208k|        if (h == -1) {                      \
 2599|   208k|            return -1;                      \
 2600|   208k|        }                                   \
 2601|   208k|        SCRAMBLE_IN(h);                     \
 2602|   208k|    } while (0)
 2603|       |
 2604|   208k|    SCRAMBLE_IN_HASH(co->co_name);
  ------------------
  |  | 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
  |  | 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
  |  | 2598|   208k|        if (h == -1) {                      \
  |  |  ------------------
  |  |  |  Branch (2598:13): [True: 0, False: 208k]
  |  |  ------------------
  |  | 2599|      0|            return -1;                      \
  |  | 2600|      0|        }                                   \
  |  | 2601|   208k|        SCRAMBLE_IN(h);                     \
  |  |  ------------------
  |  |  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  |  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  |  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  |  |  ------------------
  |  |  |  | 2595|   208k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2602|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2602:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2605|   208k|    SCRAMBLE_IN_HASH(co->co_consts);
  ------------------
  |  | 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
  |  | 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
  |  | 2598|   208k|        if (h == -1) {                      \
  |  |  ------------------
  |  |  |  Branch (2598:13): [True: 0, False: 208k]
  |  |  ------------------
  |  | 2599|      0|            return -1;                      \
  |  | 2600|      0|        }                                   \
  |  | 2601|   208k|        SCRAMBLE_IN(h);                     \
  |  |  ------------------
  |  |  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  |  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  |  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  |  |  ------------------
  |  |  |  | 2595|   208k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2602|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2602:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2606|   208k|    SCRAMBLE_IN_HASH(co->co_names);
  ------------------
  |  | 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
  |  | 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
  |  | 2598|   208k|        if (h == -1) {                      \
  |  |  ------------------
  |  |  |  Branch (2598:13): [True: 0, False: 208k]
  |  |  ------------------
  |  | 2599|      0|            return -1;                      \
  |  | 2600|      0|        }                                   \
  |  | 2601|   208k|        SCRAMBLE_IN(h);                     \
  |  |  ------------------
  |  |  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  |  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  |  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  |  |  ------------------
  |  |  |  | 2595|   208k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2602|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2602:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2607|   208k|    SCRAMBLE_IN_HASH(co->co_localsplusnames);
  ------------------
  |  | 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
  |  | 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
  |  | 2598|   208k|        if (h == -1) {                      \
  |  |  ------------------
  |  |  |  Branch (2598:13): [True: 0, False: 208k]
  |  |  ------------------
  |  | 2599|      0|            return -1;                      \
  |  | 2600|      0|        }                                   \
  |  | 2601|   208k|        SCRAMBLE_IN(h);                     \
  |  |  ------------------
  |  |  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  |  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  |  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  |  |  ------------------
  |  |  |  | 2595|   208k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2602|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2602:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2608|   208k|    SCRAMBLE_IN_HASH(co->co_linetable);
  ------------------
  |  | 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
  |  | 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
  |  | 2598|   208k|        if (h == -1) {                      \
  |  |  ------------------
  |  |  |  Branch (2598:13): [True: 0, False: 208k]
  |  |  ------------------
  |  | 2599|      0|            return -1;                      \
  |  | 2600|      0|        }                                   \
  |  | 2601|   208k|        SCRAMBLE_IN(h);                     \
  |  |  ------------------
  |  |  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  |  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  |  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  |  |  ------------------
  |  |  |  | 2595|   208k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2602|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2602:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2609|   208k|    SCRAMBLE_IN_HASH(co->co_exceptiontable);
  ------------------
  |  | 2596|   208k|    #define SCRAMBLE_IN_HASH(EXPR) do {     \
  |  | 2597|   208k|        Py_hash_t h = PyObject_Hash(EXPR);  \
  |  | 2598|   208k|        if (h == -1) {                      \
  |  |  ------------------
  |  |  |  Branch (2598:13): [True: 0, False: 208k]
  |  |  ------------------
  |  | 2599|      0|            return -1;                      \
  |  | 2600|      0|        }                                   \
  |  | 2601|   208k|        SCRAMBLE_IN(h);                     \
  |  |  ------------------
  |  |  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  |  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  |  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  |  |  ------------------
  |  |  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  |  |  ------------------
  |  |  |  | 2595|   208k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2602|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2602:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2610|   208k|    SCRAMBLE_IN(co->co_argcount);
  ------------------
  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2611|   208k|    SCRAMBLE_IN(co->co_posonlyargcount);
  ------------------
  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2612|   208k|    SCRAMBLE_IN(co->co_kwonlyargcount);
  ------------------
  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2613|   208k|    SCRAMBLE_IN(co->co_flags);
  ------------------
  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2614|   208k|    SCRAMBLE_IN(co->co_firstlineno);
  ------------------
  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2615|   208k|    SCRAMBLE_IN(Py_SIZE(co));
  ------------------
  |  | 2592|   208k|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|   208k|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|   208k|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|   208k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|   208k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 208k]
  |  |  ------------------
  ------------------
 2616|  9.01M|    for (int i = 0; i < Py_SIZE(co); i++) {
  ------------------
  |  |  214|  9.01M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  9.01M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.01M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2616:21): [True: 8.80M, False: 208k]
  ------------------
 2617|  8.80M|        _Py_CODEUNIT co_instr = _Py_GetBaseCodeUnit(co, i);
 2618|  8.80M|        SCRAMBLE_IN(co_instr.op.code);
  ------------------
  |  | 2592|  8.80M|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|  8.80M|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|  8.80M|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|  8.80M|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|  8.80M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 8.80M]
  |  |  ------------------
  ------------------
 2619|  8.80M|        SCRAMBLE_IN(co_instr.op.arg);
  ------------------
  |  | 2592|  8.80M|    #define SCRAMBLE_IN(H) do {       \
  |  | 2593|  8.80M|        uhash ^= (Py_uhash_t)(H);     \
  |  | 2594|  8.80M|        uhash *= PyHASH_MULTIPLIER;  \
  |  |  ------------------
  |  |  |  |    6|  8.80M|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  |  | 2595|  8.80M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2595:14): [Folded, False: 8.80M]
  |  |  ------------------
  ------------------
 2620|  8.80M|        i += _PyOpcode_Caches[co_instr.op.code];
 2621|  8.80M|    }
 2622|   208k|    if ((Py_hash_t)uhash == -1) {
  ------------------
  |  Branch (2622:9): [True: 0, False: 208k]
  ------------------
 2623|      0|        return -2;
 2624|      0|    }
 2625|   208k|    return (Py_hash_t)uhash;
 2626|   208k|}
codeobject.c:code_richcompare:
 2500|  3.88k|{
 2501|  3.88k|    PyCodeObject *co, *cp;
 2502|  3.88k|    int eq;
 2503|  3.88k|    PyObject *consts1, *consts2;
 2504|  3.88k|    PyObject *res;
 2505|       |
 2506|  3.88k|    if ((op != Py_EQ && op != Py_NE) ||
  ------------------
  |  |  654|  7.77k|#define Py_EQ 2
  ------------------
                  if ((op != Py_EQ && op != Py_NE) ||
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (2506:10): [True: 0, False: 3.88k]
  |  Branch (2506:25): [True: 0, False: 0]
  ------------------
 2507|  3.88k|        !PyCode_Check(self) ||
  ------------------
  |  |  168|  3.88k|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|  7.77k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2507:9): [True: 0, False: 3.88k]
  ------------------
 2508|  3.88k|        !PyCode_Check(other)) {
  ------------------
  |  |  168|  3.88k|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|  3.88k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2508:9): [True: 0, False: 3.88k]
  ------------------
 2509|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 2510|      0|    }
 2511|       |
 2512|  3.88k|    co = (PyCodeObject *)self;
 2513|  3.88k|    cp = (PyCodeObject *)other;
 2514|       |
 2515|  3.88k|    eq = PyObject_RichCompareBool(co->co_name, cp->co_name, Py_EQ);
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
 2516|  3.88k|    if (eq <= 0) goto unequal;
  ------------------
  |  Branch (2516:9): [True: 0, False: 3.88k]
  ------------------
 2517|  3.88k|    eq = co->co_argcount == cp->co_argcount;
 2518|  3.88k|    if (!eq) goto unequal;
  ------------------
  |  Branch (2518:9): [True: 0, False: 3.88k]
  ------------------
 2519|  3.88k|    eq = co->co_posonlyargcount == cp->co_posonlyargcount;
 2520|  3.88k|    if (!eq) goto unequal;
  ------------------
  |  Branch (2520:9): [True: 0, False: 3.88k]
  ------------------
 2521|  3.88k|    eq = co->co_kwonlyargcount == cp->co_kwonlyargcount;
 2522|  3.88k|    if (!eq) goto unequal;
  ------------------
  |  Branch (2522:9): [True: 0, False: 3.88k]
  ------------------
 2523|  3.88k|    eq = co->co_flags == cp->co_flags;
 2524|  3.88k|    if (!eq) goto unequal;
  ------------------
  |  Branch (2524:9): [True: 0, False: 3.88k]
  ------------------
 2525|  3.88k|    eq = co->co_firstlineno == cp->co_firstlineno;
 2526|  3.88k|    if (!eq) goto unequal;
  ------------------
  |  Branch (2526:9): [True: 0, False: 3.88k]
  ------------------
 2527|  3.88k|    eq = Py_SIZE(co) == Py_SIZE(cp);
  ------------------
  |  |  214|  3.88k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  eq = Py_SIZE(co) == Py_SIZE(cp);
  ------------------
  |  |  214|  3.88k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2528|  3.88k|    if (!eq) {
  ------------------
  |  Branch (2528:9): [True: 0, False: 3.88k]
  ------------------
 2529|      0|        goto unequal;
 2530|      0|    }
 2531|  74.7k|    for (int i = 0; i < Py_SIZE(co); i++) {
  ------------------
  |  |  214|  74.7k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  74.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  74.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2531:21): [True: 70.8k, False: 3.88k]
  ------------------
 2532|  70.8k|        _Py_CODEUNIT co_instr = _Py_GetBaseCodeUnit(co, i);
 2533|  70.8k|        _Py_CODEUNIT cp_instr = _Py_GetBaseCodeUnit(cp, i);
 2534|  70.8k|        if (co_instr.cache != cp_instr.cache) {
  ------------------
  |  Branch (2534:13): [True: 0, False: 70.8k]
  ------------------
 2535|      0|            goto unequal;
 2536|      0|        }
 2537|  70.8k|        i += _PyOpcode_Caches[co_instr.op.code];
 2538|  70.8k|    }
 2539|       |
 2540|       |    /* compare constants */
 2541|  3.88k|    consts1 = _PyCode_ConstantKey(co->co_consts);
 2542|  3.88k|    if (!consts1)
  ------------------
  |  Branch (2542:9): [True: 0, False: 3.88k]
  ------------------
 2543|      0|        return NULL;
 2544|  3.88k|    consts2 = _PyCode_ConstantKey(cp->co_consts);
 2545|  3.88k|    if (!consts2) {
  ------------------
  |  Branch (2545:9): [True: 0, False: 3.88k]
  ------------------
 2546|      0|        Py_DECREF(consts1);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2547|      0|        return NULL;
 2548|      0|    }
 2549|  3.88k|    eq = PyObject_RichCompareBool(consts1, consts2, Py_EQ);
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
 2550|  3.88k|    Py_DECREF(consts1);
  ------------------
  |  |  430|  3.88k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2551|  3.88k|    Py_DECREF(consts2);
  ------------------
  |  |  430|  3.88k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2552|  3.88k|    if (eq <= 0) goto unequal;
  ------------------
  |  Branch (2552:9): [True: 0, False: 3.88k]
  ------------------
 2553|       |
 2554|  3.88k|    eq = PyObject_RichCompareBool(co->co_names, cp->co_names, Py_EQ);
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
 2555|  3.88k|    if (eq <= 0) goto unequal;
  ------------------
  |  Branch (2555:9): [True: 0, False: 3.88k]
  ------------------
 2556|  3.88k|    eq = PyObject_RichCompareBool(co->co_localsplusnames,
 2557|  3.88k|                                  cp->co_localsplusnames, Py_EQ);
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
 2558|  3.88k|    if (eq <= 0) goto unequal;
  ------------------
  |  Branch (2558:9): [True: 0, False: 3.88k]
  ------------------
 2559|  3.88k|    eq = PyObject_RichCompareBool(co->co_linetable, cp->co_linetable, Py_EQ);
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
 2560|  3.88k|    if (eq <= 0) {
  ------------------
  |  Branch (2560:9): [True: 0, False: 3.88k]
  ------------------
 2561|      0|        goto unequal;
 2562|      0|    }
 2563|  3.88k|    eq = PyObject_RichCompareBool(co->co_exceptiontable,
 2564|  3.88k|                                  cp->co_exceptiontable, Py_EQ);
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
 2565|  3.88k|    if (eq <= 0) {
  ------------------
  |  Branch (2565:9): [True: 0, False: 3.88k]
  ------------------
 2566|      0|        goto unequal;
 2567|      0|    }
 2568|       |
 2569|  3.88k|    if (op == Py_EQ)
  ------------------
  |  |  654|  3.88k|#define Py_EQ 2
  ------------------
  |  Branch (2569:9): [True: 3.88k, False: 0]
  ------------------
 2570|  3.88k|        res = Py_True;
  ------------------
  |  |   26|  3.88k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2571|      0|    else
 2572|      0|        res = Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2573|  3.88k|    goto done;
 2574|       |
 2575|      0|  unequal:
 2576|      0|    if (eq < 0)
  ------------------
  |  Branch (2576:9): [True: 0, False: 0]
  ------------------
 2577|      0|        return NULL;
 2578|      0|    if (op == Py_NE)
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (2578:9): [True: 0, False: 0]
  ------------------
 2579|      0|        res = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2580|      0|    else
 2581|      0|        res = Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2582|       |
 2583|  3.88k|  done:
 2584|  3.88k|    return Py_NewRef(res);
  ------------------
  |  |  550|  3.88k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  3.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2585|      0|}

_Py_c_sum:
   31|  3.54k|{
   32|  3.54k|    Py_complex r;
   33|  3.54k|    r.real = a.real + b.real;
   34|  3.54k|    r.imag = a.imag + b.imag;
   35|  3.54k|    return r;
   36|  3.54k|}
_Py_cr_sum:
   40|  27.2k|{
   41|  27.2k|    Py_complex r = a;
   42|  27.2k|    r.real += b;
   43|  27.2k|    return r;
   44|  27.2k|}
_Py_c_diff:
   54|  1.24k|{
   55|  1.24k|    Py_complex r;
   56|  1.24k|    r.real = a.real - b.real;
   57|  1.24k|    r.imag = a.imag - b.imag;
   58|  1.24k|    return r;
   59|  1.24k|}
_Py_cr_diff:
   63|  11.1k|{
   64|  11.1k|    Py_complex r = a;
   65|  11.1k|    r.real -= b;
   66|  11.1k|    return r;
   67|  11.1k|}
_Py_rc_diff:
   71|  1.34k|{
   72|  1.34k|    Py_complex r;
   73|  1.34k|    r.real = a - b.real;
   74|  1.34k|    r.imag = -b.imag;
   75|  1.34k|    return r;
   76|  1.34k|}
_Py_c_prod:
   89|  64.2k|{
   90|  64.2k|    double a = z.real, b = z.imag, c = w.real, d = w.imag;
   91|  64.2k|    double ac = a*c, bd = b*d, ad = a*d, bc = b*c;
   92|  64.2k|    Py_complex r = {ac - bd, ad + bc};
   93|       |
   94|       |    /* Recover infinities that computed as nan+nanj.  See e.g. the C11,
   95|       |       Annex G.5.1, routine _Cmultd(). */
   96|  64.2k|    if (isnan(r.real) && isnan(r.imag)) {
  ------------------
  |  Branch (96:9): [True: 14.4k, False: 49.8k]
  |  Branch (96:26): [True: 14.2k, False: 209]
  ------------------
   97|  14.2k|        int recalc = 0;
   98|       |
   99|  14.2k|        if (isinf(a) || isinf(b)) {  /* z is infinite */
  ------------------
  |  Branch (99:13): [True: 6.52k, False: 7.69k]
  |  Branch (99:25): [True: 3.57k, False: 4.11k]
  ------------------
  100|       |            /* "Box" the infinity and change nans in the other factor to 0 */
  101|  10.1k|            a = copysign(isinf(a) ? 1.0 : 0.0, a);
  ------------------
  |  Branch (101:26): [True: 6.52k, False: 3.57k]
  ------------------
  102|  10.1k|            b = copysign(isinf(b) ? 1.0 : 0.0, b);
  ------------------
  |  Branch (102:26): [True: 4.41k, False: 5.68k]
  ------------------
  103|  10.1k|            if (isnan(c)) {
  ------------------
  |  Branch (103:17): [True: 712, False: 9.39k]
  ------------------
  104|    712|                c = copysign(0.0, c);
  105|    712|            }
  106|  10.1k|            if (isnan(d)) {
  ------------------
  |  Branch (106:17): [True: 2.73k, False: 7.36k]
  ------------------
  107|  2.73k|                d = copysign(0.0, d);
  108|  2.73k|            }
  109|  10.1k|            recalc = 1;
  110|  10.1k|        }
  111|  14.2k|        if (isinf(c) || isinf(d)) {  /* w is infinite */
  ------------------
  |  Branch (111:13): [True: 2.04k, False: 12.1k]
  |  Branch (111:25): [True: 838, False: 11.3k]
  ------------------
  112|       |            /* "Box" the infinity and change nans in the other factor to 0 */
  113|  2.88k|            c = copysign(isinf(c) ? 1.0 : 0.0, c);
  ------------------
  |  Branch (113:26): [True: 2.04k, False: 838]
  ------------------
  114|  2.88k|            d = copysign(isinf(d) ? 1.0 : 0.0, d);
  ------------------
  |  Branch (114:26): [True: 839, False: 2.04k]
  ------------------
  115|  2.88k|            if (isnan(a)) {
  ------------------
  |  Branch (115:17): [True: 112, False: 2.76k]
  ------------------
  116|    112|                a = copysign(0.0, a);
  117|    112|            }
  118|  2.88k|            if (isnan(b)) {
  ------------------
  |  Branch (118:17): [True: 112, False: 2.76k]
  ------------------
  119|    112|                b = copysign(0.0, b);
  120|    112|            }
  121|  2.88k|            recalc = 1;
  122|  2.88k|        }
  123|  14.2k|        if (!recalc && (isinf(ac) || isinf(bd) || isinf(ad) || isinf(bc))) {
  ------------------
  |  Branch (123:13): [True: 3.98k, False: 10.2k]
  |  Branch (123:25): [True: 0, False: 3.98k]
  |  Branch (123:38): [True: 0, False: 3.98k]
  |  Branch (123:51): [True: 0, False: 3.98k]
  |  Branch (123:64): [True: 0, False: 3.98k]
  ------------------
  124|       |            /* Recover infinities from overflow by changing nans to 0 */
  125|      0|            if (isnan(a)) {
  ------------------
  |  Branch (125:17): [True: 0, False: 0]
  ------------------
  126|      0|                a = copysign(0.0, a);
  127|      0|            }
  128|      0|            if (isnan(b)) {
  ------------------
  |  Branch (128:17): [True: 0, False: 0]
  ------------------
  129|      0|                b = copysign(0.0, b);
  130|      0|            }
  131|      0|            if (isnan(c)) {
  ------------------
  |  Branch (131:17): [True: 0, False: 0]
  ------------------
  132|      0|                c = copysign(0.0, c);
  133|      0|            }
  134|      0|            if (isnan(d)) {
  ------------------
  |  Branch (134:17): [True: 0, False: 0]
  ------------------
  135|      0|                d = copysign(0.0, d);
  136|      0|            }
  137|      0|            recalc = 1;
  138|      0|        }
  139|  14.2k|        if (recalc) {
  ------------------
  |  Branch (139:13): [True: 10.2k, False: 3.98k]
  ------------------
  140|  10.2k|            r.real = INFINITY*(a*c - b*d);
  141|  10.2k|            r.imag = INFINITY*(a*d + b*c);
  142|  10.2k|        }
  143|  14.2k|    }
  144|       |
  145|  64.2k|    return r;
  146|  64.2k|}
_Py_cr_prod:
  150|  14.3k|{
  151|  14.3k|    Py_complex r = a;
  152|  14.3k|    r.real *= b;
  153|  14.3k|    r.imag *= b;
  154|  14.3k|    return r;
  155|  14.3k|}
_Py_c_quot:
  169|  5.59k|{
  170|       |    /******************************************************************
  171|       |    This was the original algorithm.  It's grossly prone to spurious
  172|       |    overflow and underflow errors.  It also merrily divides by 0 despite
  173|       |    checking for that(!).  The code still serves a doc purpose here, as
  174|       |    the algorithm following is a simple by-cases transformation of this
  175|       |    one:
  176|       |
  177|       |    Py_complex r;
  178|       |    double d = b.real*b.real + b.imag*b.imag;
  179|       |    if (d == 0.)
  180|       |        errno = EDOM;
  181|       |    r.real = (a.real*b.real + a.imag*b.imag)/d;
  182|       |    r.imag = (a.imag*b.real - a.real*b.imag)/d;
  183|       |    return r;
  184|       |    ******************************************************************/
  185|       |
  186|       |    /* This algorithm is better, and is pretty obvious:  first divide the
  187|       |     * numerators and denominator by whichever of {b.real, b.imag} has
  188|       |     * larger magnitude.  The earliest reference I found was to CACM
  189|       |     * Algorithm 116 (Complex Division, Robert L. Smith, Stanford
  190|       |     * University).
  191|       |     */
  192|  5.59k|     Py_complex r;      /* the result */
  193|  5.59k|     const double abs_breal = b.real < 0 ? -b.real : b.real;
  ------------------
  |  Branch (193:31): [True: 158, False: 5.44k]
  ------------------
  194|  5.59k|     const double abs_bimag = b.imag < 0 ? -b.imag : b.imag;
  ------------------
  |  Branch (194:31): [True: 408, False: 5.19k]
  ------------------
  195|       |
  196|  5.59k|    if (abs_breal >= abs_bimag) {
  ------------------
  |  Branch (196:9): [True: 1.28k, False: 4.31k]
  ------------------
  197|       |        /* divide tops and bottom by b.real */
  198|  1.28k|        if (abs_breal == 0.0) {
  ------------------
  |  Branch (198:13): [True: 568, False: 713]
  ------------------
  199|    568|            errno = EDOM;
  200|    568|            r.real = r.imag = 0.0;
  201|    568|        }
  202|    713|        else {
  203|    713|            const double ratio = b.imag / b.real;
  204|    713|            const double denom = b.real + b.imag * ratio;
  205|    713|            r.real = (a.real + a.imag * ratio) / denom;
  206|    713|            r.imag = (a.imag - a.real * ratio) / denom;
  207|    713|        }
  208|  1.28k|    }
  209|  4.31k|    else if (abs_bimag >= abs_breal) {
  ------------------
  |  Branch (209:14): [True: 4.07k, False: 240]
  ------------------
  210|       |        /* divide tops and bottom by b.imag */
  211|  4.07k|        const double ratio = b.real / b.imag;
  212|  4.07k|        const double denom = b.real * ratio + b.imag;
  213|  4.07k|        assert(b.imag != 0.0);
  ------------------
  |  Branch (213:9): [True: 4.07k, False: 0]
  ------------------
  214|  4.07k|        r.real = (a.real * ratio + a.imag) / denom;
  215|  4.07k|        r.imag = (a.imag * ratio - a.real) / denom;
  216|  4.07k|    }
  217|    240|    else {
  218|       |        /* At least one of b.real or b.imag is a NaN */
  219|    240|        r.real = r.imag = Py_NAN;
  ------------------
  |  |   79|    240|#    define Py_NAN      ((double)NAN)
  ------------------
  220|    240|    }
  221|       |
  222|       |    /* Recover infinities and zeros that computed as nan+nanj.  See e.g.
  223|       |       the C11, Annex G.5.2, routine _Cdivd(). */
  224|  5.59k|    if (isnan(r.real) && isnan(r.imag)) {
  ------------------
  |  Branch (224:9): [True: 3.47k, False: 2.12k]
  |  Branch (224:26): [True: 3.45k, False: 19]
  ------------------
  225|  3.45k|        if ((isinf(a.real) || isinf(a.imag))
  ------------------
  |  Branch (225:14): [True: 482, False: 2.96k]
  |  Branch (225:31): [True: 2.14k, False: 821]
  ------------------
  226|  3.45k|            && isfinite(b.real) && isfinite(b.imag))
  ------------------
  |  Branch (226:16): [True: 2.39k, False: 240]
  |  Branch (226:36): [True: 1.91k, False: 472]
  ------------------
  227|  1.91k|        {
  228|  1.91k|            const double x = copysign(isinf(a.real) ? 1.0 : 0.0, a.real);
  ------------------
  |  Branch (228:39): [True: 212, False: 1.70k]
  ------------------
  229|  1.91k|            const double y = copysign(isinf(a.imag) ? 1.0 : 0.0, a.imag);
  ------------------
  |  Branch (229:39): [True: 1.89k, False: 23]
  ------------------
  230|  1.91k|            r.real = INFINITY * (x*b.real + y*b.imag);
  231|  1.91k|            r.imag = INFINITY * (y*b.real - x*b.imag);
  232|  1.91k|        }
  233|  1.53k|        else if ((isinf(abs_breal) || isinf(abs_bimag))
  ------------------
  |  Branch (233:19): [True: 0, False: 1.53k]
  |  Branch (233:39): [True: 733, False: 800]
  ------------------
  234|  1.53k|                 && isfinite(a.real) && isfinite(a.imag))
  ------------------
  |  Branch (234:21): [True: 53, False: 680]
  |  Branch (234:41): [True: 0, False: 53]
  ------------------
  235|      0|        {
  236|      0|            const double x = copysign(isinf(b.real) ? 1.0 : 0.0, b.real);
  ------------------
  |  Branch (236:39): [True: 0, False: 0]
  ------------------
  237|      0|            const double y = copysign(isinf(b.imag) ? 1.0 : 0.0, b.imag);
  ------------------
  |  Branch (237:39): [True: 0, False: 0]
  ------------------
  238|      0|            r.real = 0.0 * (a.real*x + a.imag*y);
  239|      0|            r.imag = 0.0 * (a.imag*x - a.real*y);
  240|      0|        }
  241|  3.45k|    }
  242|       |
  243|  5.59k|    return r;
  244|  5.59k|}
_Py_cr_quot:
  248|  5.13k|{
  249|  5.13k|    Py_complex r = a;
  250|  5.13k|    if (b) {
  ------------------
  |  Branch (250:9): [True: 4.87k, False: 264]
  ------------------
  251|  4.87k|        r.real /= b;
  252|  4.87k|        r.imag /= b;
  253|  4.87k|    }
  254|    264|    else {
  255|    264|        errno = EDOM;
  256|    264|        r.real = r.imag = 0.0;
  257|    264|    }
  258|  5.13k|    return r;
  259|  5.13k|}
_Py_rc_quot:
  264|  12.6k|{
  265|  12.6k|    Py_complex r;
  266|  12.6k|    const double abs_breal = b.real < 0 ? -b.real : b.real;
  ------------------
  |  Branch (266:30): [True: 1.11k, False: 11.4k]
  ------------------
  267|  12.6k|    const double abs_bimag = b.imag < 0 ? -b.imag : b.imag;
  ------------------
  |  Branch (267:30): [True: 553, False: 12.0k]
  ------------------
  268|       |
  269|  12.6k|    if (abs_breal >= abs_bimag) {
  ------------------
  |  Branch (269:9): [True: 6.46k, False: 6.13k]
  ------------------
  270|  6.46k|        if (abs_breal == 0.0) {
  ------------------
  |  Branch (270:13): [True: 1.84k, False: 4.61k]
  ------------------
  271|  1.84k|            errno = EDOM;
  272|  1.84k|            r.real = r.imag = 0.0;
  273|  1.84k|        }
  274|  4.61k|        else {
  275|  4.61k|            const double ratio = b.imag / b.real;
  276|  4.61k|            const double denom = b.real + b.imag * ratio;
  277|  4.61k|            r.real = a / denom;
  278|  4.61k|            r.imag = (-a * ratio) / denom;
  279|  4.61k|        }
  280|  6.46k|    }
  281|  6.13k|    else if (abs_bimag >= abs_breal) {
  ------------------
  |  Branch (281:14): [True: 5.73k, False: 408]
  ------------------
  282|  5.73k|        const double ratio = b.real / b.imag;
  283|  5.73k|        const double denom = b.real * ratio + b.imag;
  284|  5.73k|        assert(b.imag != 0.0);
  ------------------
  |  Branch (284:9): [True: 5.73k, False: 0]
  ------------------
  285|  5.73k|        r.real = (a * ratio) / denom;
  286|  5.73k|        r.imag = (-a) / denom;
  287|  5.73k|    }
  288|    408|    else {
  289|    408|        r.real = r.imag = Py_NAN;
  ------------------
  |  |   79|    408|#    define Py_NAN      ((double)NAN)
  ------------------
  290|    408|    }
  291|       |
  292|  12.6k|    if (isnan(r.real) && isnan(r.imag) && isfinite(a)
  ------------------
  |  Branch (292:9): [True: 3.46k, False: 9.13k]
  |  Branch (292:26): [True: 431, False: 3.03k]
  |  Branch (292:43): [True: 406, False: 25]
  ------------------
  293|    406|        && (isinf(abs_breal) || isinf(abs_bimag)))
  ------------------
  |  Branch (293:13): [True: 250, False: 156]
  |  Branch (293:33): [True: 14, False: 142]
  ------------------
  294|    264|    {
  295|    264|        const double x = copysign(isinf(b.real) ? 1.0 : 0.0, b.real);
  ------------------
  |  Branch (295:35): [True: 250, False: 14]
  ------------------
  296|    264|        const double y = copysign(isinf(b.imag) ? 1.0 : 0.0, b.imag);
  ------------------
  |  Branch (296:35): [True: 14, False: 250]
  ------------------
  297|    264|        r.real = 0.0 * (a*x);
  298|    264|        r.imag = 0.0 * (-a*y);
  299|    264|    }
  300|       |
  301|  12.6k|    return r;
  302|  12.6k|}
_Py_c_pow:
  309|  36.0k|{
  310|  36.0k|    Py_complex r;
  311|  36.0k|    double vabs,len,at,phase;
  312|  36.0k|    if (b.real == 0. && b.imag == 0.) {
  ------------------
  |  Branch (312:9): [True: 7.28k, False: 28.7k]
  |  Branch (312:25): [True: 0, False: 7.28k]
  ------------------
  313|      0|        r.real = 1.;
  314|      0|        r.imag = 0.;
  315|      0|    }
  316|  36.0k|    else if (a.real == 0. && a.imag == 0.) {
  ------------------
  |  Branch (316:14): [True: 18.3k, False: 17.6k]
  |  Branch (316:30): [True: 794, False: 17.5k]
  ------------------
  317|    794|        if (b.imag != 0. || b.real < 0.)
  ------------------
  |  Branch (317:13): [True: 210, False: 584]
  |  Branch (317:29): [True: 363, False: 221]
  ------------------
  318|    794|            errno = EDOM;
  319|    794|        r.real = 0.;
  320|    794|        r.imag = 0.;
  321|    794|    }
  322|  35.2k|    else {
  323|  35.2k|        vabs = hypot(a.real,a.imag);
  324|  35.2k|        len = pow(vabs,b.real);
  325|  35.2k|        at = atan2(a.imag, a.real);
  326|  35.2k|        phase = at*b.real;
  327|  35.2k|        if (b.imag != 0.0) {
  ------------------
  |  Branch (327:13): [True: 22.6k, False: 12.5k]
  ------------------
  328|  22.6k|            len *= exp(-at*b.imag);
  329|  22.6k|            phase += b.imag*log(vabs);
  330|  22.6k|        }
  331|  35.2k|        r.real = len*cos(phase);
  332|  35.2k|        r.imag = len*sin(phase);
  333|       |
  334|       |        /* Don't rely on errno set by the math functions above, for
  335|       |           example cos() and sin() set EDOM for an infinite phase. */
  336|  35.2k|        errno = 0;
  337|  35.2k|        if (isfinite(a.real) && isfinite(a.imag)
  ------------------
  |  Branch (337:13): [True: 35.1k, False: 38]
  |  Branch (337:33): [True: 34.9k, False: 260]
  ------------------
  338|  35.2k|            && isfinite(b.real) && isfinite(b.imag))
  ------------------
  |  Branch (338:16): [True: 28.1k, False: 6.81k]
  |  Branch (338:36): [True: 28.1k, False: 0]
  ------------------
  339|  28.1k|        {
  340|  28.1k|            _Py_ADJUST_ERANGE2(r.real, r.imag);
  341|  28.1k|        }
  342|  35.2k|    }
  343|  36.0k|    return r;
  344|  36.0k|}
PyComplex_FromCComplex:
  426|   260k|{
  427|   260k|    PyComplexObject *op = _Py_FREELIST_POP(PyComplexObject, complexes);
  ------------------
  |  |   43|   260k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|   260k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  428|       |
  429|   260k|    if (op == NULL) {
  ------------------
  |  Branch (429:9): [True: 105k, False: 154k]
  ------------------
  430|       |        /* Inline PyObject_New */
  431|   105k|        op = PyObject_Malloc(sizeof(PyComplexObject));
  432|   105k|        if (op == NULL) {
  ------------------
  |  Branch (432:13): [True: 0, False: 105k]
  ------------------
  433|      0|            return PyErr_NoMemory();
  434|      0|        }
  435|   105k|        _PyObject_Init((PyObject*)op, &PyComplex_Type);
  436|   105k|    }
  437|   260k|    op->cval = cval;
  438|   260k|    return (PyObject *) op;
  439|   260k|}
PyComplex_AsCComplex:
  553|   290k|{
  554|   290k|    Py_complex cv;
  555|   290k|    PyObject *newop = NULL;
  556|       |
  557|   290k|    assert(op);
  ------------------
  |  Branch (557:5): [True: 290k, False: 0]
  ------------------
  558|       |    /* If op is already of type PyComplex_Type, return its value */
  559|   290k|    if (PyComplex_Check(op)) {
  ------------------
  |  |   13|   290k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  378|   290k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   290k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   290k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 290k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|   290k|        return ((PyComplexObject *)op)->cval;
  561|   290k|    }
  562|       |    /* If not, use op's __complex__  method, if it exists */
  563|       |
  564|       |    /* return -1 on failure */
  565|      0|    cv.real = -1.;
  566|      0|    cv.imag = 0.;
  567|       |
  568|      0|    newop = try_complex_special_method(op);
  569|       |
  570|      0|    if (newop) {
  ------------------
  |  Branch (570:9): [True: 0, False: 0]
  ------------------
  571|      0|        cv = ((PyComplexObject *)newop)->cval;
  572|      0|        Py_DECREF(newop);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|      0|        return cv;
  574|      0|    }
  575|      0|    else if (PyErr_Occurred()) {
  ------------------
  |  Branch (575:14): [True: 0, False: 0]
  ------------------
  576|      0|        return cv;
  577|      0|    }
  578|       |    /* If neither of the above works, interpret op as a float giving the
  579|       |       real part of the result, and fill in the imaginary part as 0. */
  580|      0|    else {
  581|       |        /* PyFloat_AsDouble will return -1 on failure */
  582|      0|        cv.real = PyFloat_AsDouble(op);
  583|      0|        return cv;
  584|      0|    }
  585|      0|}
complexobject.c:complex_dealloc:
  443|   260k|{
  444|   260k|    assert(PyComplex_Check(op));
  ------------------
  |  Branch (444:5): [True: 260k, False: 0]
  ------------------
  445|   260k|    if (PyComplex_CheckExact(op)) {
  ------------------
  |  |   14|   260k|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|   260k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   260k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   260k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 260k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  446|   260k|        _Py_FREELIST_FREE(complexes, op, PyObject_Free);
  ------------------
  |  |   35|   260k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|   260k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   260k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|   260k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   19|   260k|#  define Py_complexes_MAXFREELIST 100
  |  |  ------------------
  ------------------
  447|   260k|    }
  448|      0|    else {
  449|      0|        Py_TYPE(op)->tp_free(op);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|      0|    }
  451|   260k|}
complexobject.c:complex_repr:
  589|  19.6k|{
  590|  19.6k|    int precision = 0;
  591|  19.6k|    char format_code = 'r';
  592|  19.6k|    PyObject *result = NULL;
  593|  19.6k|    PyComplexObject *v = _PyComplexObject_CAST(op);
  ------------------
  |  |   17|  19.6k|#define _PyComplexObject_CAST(op)   ((PyComplexObject *)(op))
  ------------------
  594|       |
  595|       |    /* If these are non-NULL, they'll need to be freed. */
  596|  19.6k|    char *pre = NULL;
  597|  19.6k|    char *im = NULL;
  598|       |
  599|       |    /* These do not need to be freed. re is either an alias
  600|       |       for pre or a pointer to a constant.  lead and tail
  601|       |       are pointers to constants. */
  602|  19.6k|    const char *re = NULL;
  603|  19.6k|    const char *lead = "";
  604|  19.6k|    const char *tail = "";
  605|       |
  606|  19.6k|    if (v->cval.real == 0. && copysign(1.0, v->cval.real)==1.0) {
  ------------------
  |  Branch (606:9): [True: 19.6k, False: 0]
  |  Branch (606:31): [True: 19.6k, False: 0]
  ------------------
  607|       |        /* Real part is +0: just output the imaginary part and do not
  608|       |           include parens. */
  609|  19.6k|        re = "";
  610|  19.6k|        im = PyOS_double_to_string(v->cval.imag, format_code,
  611|  19.6k|                                   precision, 0, NULL);
  612|  19.6k|        if (!im) {
  ------------------
  |  Branch (612:13): [True: 0, False: 19.6k]
  ------------------
  613|      0|            PyErr_NoMemory();
  614|      0|            goto done;
  615|      0|        }
  616|  19.6k|    } else {
  617|       |        /* Format imaginary part with sign, real part without. Include
  618|       |           parens in the result. */
  619|      0|        pre = PyOS_double_to_string(v->cval.real, format_code,
  620|      0|                                    precision, 0, NULL);
  621|      0|        if (!pre) {
  ------------------
  |  Branch (621:13): [True: 0, False: 0]
  ------------------
  622|      0|            PyErr_NoMemory();
  623|      0|            goto done;
  624|      0|        }
  625|      0|        re = pre;
  626|       |
  627|      0|        im = PyOS_double_to_string(v->cval.imag, format_code,
  628|      0|                                   precision, Py_DTSF_SIGN, NULL);
  ------------------
  |  |   22|      0|#define Py_DTSF_SIGN      0x01 /* always add the sign */
  ------------------
  629|      0|        if (!im) {
  ------------------
  |  Branch (629:13): [True: 0, False: 0]
  ------------------
  630|      0|            PyErr_NoMemory();
  631|      0|            goto done;
  632|      0|        }
  633|      0|        lead = "(";
  634|      0|        tail = ")";
  635|      0|    }
  636|  19.6k|    result = PyUnicode_FromFormat("%s%s%sj%s", lead, re, im, tail);
  637|  19.6k|  done:
  638|  19.6k|    PyMem_Free(im);
  639|  19.6k|    PyMem_Free(pre);
  640|       |
  641|  19.6k|    return result;
  642|  19.6k|}
complexobject.c:real_to_double:
  676|   109k|{
  677|   109k|    PyObject *obj = *pobj;
  678|       |
  679|   109k|    if (PyFloat_Check(obj)) {
  ------------------
  |  |   16|   109k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|   109k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   109k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   109k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 25.4k, False: 84.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|  25.4k|        *dbl = PyFloat_AS_DOUBLE(obj);
  ------------------
  |  |   18|  25.4k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  25.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  681|  25.4k|    }
  682|  84.4k|    else if (_Py_convert_int_to_double(pobj, dbl) < 0) {
  ------------------
  |  Branch (682:14): [True: 6.06k, False: 78.3k]
  ------------------
  683|  6.06k|        return -1;
  684|  6.06k|    }
  685|   103k|    return 0;
  686|   109k|}
complexobject.c:_Py_rc_sum:
   48|  7.59k|{
   49|  7.59k|    return _Py_cr_sum(b, a);
   50|  7.59k|}
complexobject.c:_Py_rc_prod:
  159|  3.90k|{
  160|  3.90k|    return _Py_cr_prod(b, a);
  161|  3.90k|}
complexobject.c:complex_pow:
  755|  55.4k|{
  756|  55.4k|    Py_complex p;
  757|  55.4k|    Py_complex a, b;
  758|  55.4k|    TO_COMPLEX(v, a);
  ------------------
  |  |  669|  55.4k|    if (PyComplex_Check(obj))                   \
  |  |  ------------------
  |  |  |  |   13|  55.4k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  55.4k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  55.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  55.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 35.3k, False: 20.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  670|  55.4k|        c = ((PyComplexObject *)(obj))->cval;   \
  |  |  671|  55.4k|    else if (real_to_complex(&(obj), &(c)) < 0) \
  |  |  ------------------
  |  |  |  Branch (671:14): [True: 70, False: 19.9k]
  |  |  ------------------
  |  |  672|  20.0k|        return (obj)
  ------------------
  759|  55.3k|    TO_COMPLEX(w, b);
  ------------------
  |  |  669|  55.3k|    if (PyComplex_Check(obj))                   \
  |  |  ------------------
  |  |  |  |   13|  55.3k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  55.3k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  55.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  55.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 38.0k, False: 17.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  670|  55.3k|        c = ((PyComplexObject *)(obj))->cval;   \
  |  |  671|  55.3k|    else if (real_to_complex(&(obj), &(c)) < 0) \
  |  |  ------------------
  |  |  |  Branch (671:14): [True: 60, False: 17.2k]
  |  |  ------------------
  |  |  672|  17.3k|        return (obj)
  ------------------
  760|       |
  761|  55.2k|    if (z != Py_None) {
  ------------------
  |  |  616|  55.2k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (761:9): [True: 0, False: 55.2k]
  ------------------
  762|      0|        PyErr_SetString(PyExc_ValueError, "complex modulo");
  763|      0|        return NULL;
  764|      0|    }
  765|  55.2k|    errno = 0;
  766|       |    // Check whether the exponent has a small integer value, and if so use
  767|       |    // a faster and more accurate algorithm.
  768|  55.2k|    if (b.imag == 0.0 && b.real == floor(b.real)
  ------------------
  |  Branch (768:9): [True: 32.4k, False: 22.8k]
  |  Branch (768:26): [True: 24.6k, False: 7.74k]
  ------------------
  769|  24.6k|        && fabs(b.real) <= INT_EXP_CUTOFF)
  ------------------
  |  |  346|  24.6k|#define INT_EXP_CUTOFF 100
  ------------------
  |  Branch (769:12): [True: 19.2k, False: 5.38k]
  ------------------
  770|  19.2k|    {
  771|  19.2k|        p = c_powi(a, (long)b.real);
  772|  19.2k|        if (isfinite(a.real) && isfinite(a.imag)) {
  ------------------
  |  Branch (772:13): [True: 19.2k, False: 1]
  |  Branch (772:33): [True: 18.9k, False: 333]
  ------------------
  773|  18.9k|            _Py_ADJUST_ERANGE2(p.real, p.imag);
  774|  18.9k|        }
  775|  19.2k|    }
  776|  36.0k|    else {
  777|  36.0k|        p = _Py_c_pow(a, b);
  778|  36.0k|    }
  779|       |
  780|  55.2k|    if (errno == EDOM) {
  ------------------
  |  Branch (780:9): [True: 1.40k, False: 53.8k]
  ------------------
  781|  1.40k|        PyErr_SetString(PyExc_ZeroDivisionError,
  782|  1.40k|                        "zero to a negative or complex power");
  783|  1.40k|        return NULL;
  784|  1.40k|    }
  785|  53.8k|    else if (errno == ERANGE) {
  ------------------
  |  Branch (785:14): [True: 2.77k, False: 51.1k]
  ------------------
  786|  2.77k|        PyErr_SetString(PyExc_OverflowError,
  787|  2.77k|                        "complex exponentiation");
  788|  2.77k|        return NULL;
  789|  2.77k|    }
  790|  51.1k|    return PyComplex_FromCComplex(p);
  791|  55.2k|}
complexobject.c:real_to_complex:
  690|  37.3k|{
  691|  37.3k|    pc->imag = 0.0;
  692|  37.3k|    return real_to_double(pobj, &(pc->real));
  693|  37.3k|}
complexobject.c:c_powi:
  370|  19.2k|{
  371|  19.2k|    if (n > 0)
  ------------------
  |  Branch (371:9): [True: 13.0k, False: 6.23k]
  ------------------
  372|  13.0k|        return c_powu(x, n);
  373|  6.23k|    else if (n < 0)
  ------------------
  |  Branch (373:14): [True: 5.18k, False: 1.04k]
  ------------------
  374|  5.18k|        return _Py_rc_quot(1.0, c_powu(x, -n));
  375|  1.04k|    else
  376|  1.04k|        return (Py_complex){1., 0.};
  377|  19.2k|}
complexobject.c:c_powu:
  350|  18.2k|{
  351|  18.2k|    assert(0 < n && n <= INT_EXP_CUTOFF);
  ------------------
  |  Branch (351:5): [True: 18.2k, False: 0]
  |  Branch (351:5): [True: 18.2k, False: 0]
  ------------------
  352|  35.4k|    while ((n & 1) == 0) {
  ------------------
  |  Branch (352:12): [True: 17.2k, False: 18.2k]
  ------------------
  353|  17.2k|        x = _Py_c_prod(x, x);
  354|  17.2k|        n >>= 1;
  355|  17.2k|    }
  356|  18.2k|    Py_complex r = x;
  357|  18.2k|    n >>= 1;
  358|  35.1k|    while (n) {
  ------------------
  |  Branch (358:12): [True: 16.8k, False: 18.2k]
  ------------------
  359|  16.8k|        x = _Py_c_prod(x, x);
  360|  16.8k|        if (n & 1) {
  ------------------
  |  Branch (360:13): [True: 12.2k, False: 4.61k]
  ------------------
  361|  12.2k|            r = _Py_c_prod(r, x);
  362|  12.2k|        }
  363|  16.8k|        n >>= 1;
  364|  16.8k|    }
  365|  18.2k|    return r;
  366|  18.2k|}
complexobject.c:complex_neg:
  795|  18.6k|{
  796|  18.6k|    PyComplexObject *v = _PyComplexObject_CAST(op);
  ------------------
  |  |   17|  18.6k|#define _PyComplexObject_CAST(op)   ((PyComplexObject *)(op))
  ------------------
  797|  18.6k|    Py_complex neg;
  798|  18.6k|    neg.real = -v->cval.real;
  799|  18.6k|    neg.imag = -v->cval.imag;
  800|  18.6k|    return PyComplex_FromCComplex(neg);
  801|  18.6k|}
complexobject.c:complex_pos:
  805|  3.55k|{
  806|  3.55k|    PyComplexObject *v = _PyComplexObject_CAST(op);
  ------------------
  |  |   17|  3.55k|#define _PyComplexObject_CAST(op)   ((PyComplexObject *)(op))
  ------------------
  807|  3.55k|    if (PyComplex_CheckExact(v)) {
  ------------------
  |  |   14|  3.55k|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|  3.55k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.55k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.55k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 3.55k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|  3.55k|        return Py_NewRef(v);
  ------------------
  |  |  550|  3.55k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  3.55k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.55k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|  3.55k|    }
  810|      0|    return PyComplex_FromCComplex(v->cval);
  811|  3.55k|}
complexobject.c:complex_bool:
  831|    820|{
  832|    820|    PyComplexObject *v = _PyComplexObject_CAST(op);
  ------------------
  |  |   17|    820|#define _PyComplexObject_CAST(op)   ((PyComplexObject *)(op))
  ------------------
  833|    820|    return v->cval.real != 0.0 || v->cval.imag != 0.0;
  ------------------
  |  Branch (833:12): [True: 0, False: 820]
  |  Branch (833:35): [True: 168, False: 652]
  ------------------
  834|    820|}
complexobject.c:complex_hash:
  646|   321k|{
  647|   321k|    Py_uhash_t hashreal, hashimag, combined;
  648|   321k|    PyComplexObject *v = _PyComplexObject_CAST(op);
  ------------------
  |  |   17|   321k|#define _PyComplexObject_CAST(op)   ((PyComplexObject *)(op))
  ------------------
  649|   321k|    hashreal = (Py_uhash_t)_Py_HashDouble(op, v->cval.real);
  650|   321k|    if (hashreal == (Py_uhash_t)-1)
  ------------------
  |  Branch (650:9): [True: 0, False: 321k]
  ------------------
  651|      0|        return -1;
  652|   321k|    hashimag = (Py_uhash_t)_Py_HashDouble(op, v->cval.imag);
  653|   321k|    if (hashimag == (Py_uhash_t)-1)
  ------------------
  |  Branch (653:9): [True: 0, False: 321k]
  ------------------
  654|      0|        return -1;
  655|       |    /* Note:  if the imaginary part is 0, hashimag is 0 now,
  656|       |     * so the following returns hashreal unchanged.  This is
  657|       |     * important because numbers of different types that
  658|       |     * compare equal must have the same hash value, so that
  659|       |     * hash(x + 0*j) must equal hash(x).
  660|       |     */
  661|   321k|    combined = hashreal + PyHASH_IMAG * hashimag;
  ------------------
  |  |   20|   321k|#define PyHASH_IMAG PyHASH_MULTIPLIER
  |  |  ------------------
  |  |  |  |    6|   321k|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  |  |  ------------------
  ------------------
  662|   321k|    if (combined == (Py_uhash_t)-1)
  ------------------
  |  Branch (662:9): [True: 0, False: 321k]
  ------------------
  663|      0|        combined = (Py_uhash_t)-2;
  664|   321k|    return (Py_hash_t)combined;
  665|   321k|}
complexobject.c:complex_richcompare:
  838|   183k|{
  839|   183k|    PyObject *res;
  840|   183k|    Py_complex i;
  841|   183k|    int equal;
  842|       |
  843|   183k|    if (op != Py_EQ && op != Py_NE) {
  ------------------
  |  |  654|   367k|#define Py_EQ 2
  ------------------
                  if (op != Py_EQ && op != Py_NE) {
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (843:9): [True: 0, False: 183k]
  |  Branch (843:24): [True: 0, False: 0]
  ------------------
  844|      0|        goto Unimplemented;
  845|      0|    }
  846|       |
  847|   183k|    assert(PyComplex_Check(v));
  ------------------
  |  Branch (847:5): [True: 183k, False: 0]
  ------------------
  848|   183k|    TO_COMPLEX(v, i);
  ------------------
  |  |  669|   183k|    if (PyComplex_Check(obj))                   \
  |  |  ------------------
  |  |  |  |   13|   183k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|   183k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 183k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  670|   183k|        c = ((PyComplexObject *)(obj))->cval;   \
  |  |  671|   183k|    else if (real_to_complex(&(obj), &(c)) < 0) \
  |  |  ------------------
  |  |  |  Branch (671:14): [True: 0, False: 0]
  |  |  ------------------
  |  |  672|      0|        return (obj)
  ------------------
  849|       |
  850|   183k|    if (PyLong_Check(w)) {
  ------------------
  |  |   13|   183k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   183k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 41, False: 183k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|       |        /* Check for 0.0 imaginary part first to avoid the rich
  852|       |         * comparison when possible.
  853|       |         */
  854|     41|        if (i.imag == 0.0) {
  ------------------
  |  Branch (854:13): [True: 41, False: 0]
  ------------------
  855|     41|            PyObject *j, *sub_res;
  856|     41|            j = PyFloat_FromDouble(i.real);
  857|     41|            if (j == NULL)
  ------------------
  |  Branch (857:17): [True: 0, False: 41]
  ------------------
  858|      0|                return NULL;
  859|       |
  860|     41|            sub_res = PyObject_RichCompare(j, w, op);
  861|     41|            Py_DECREF(j);
  ------------------
  |  |  430|     41|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|     41|            return sub_res;
  863|     41|        }
  864|      0|        else {
  865|      0|            equal = 0;
  866|      0|        }
  867|     41|    }
  868|   183k|    else if (PyFloat_Check(w)) {
  ------------------
  |  |   16|   183k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|   183k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 1, False: 183k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  869|      1|        equal = (i.real == PyFloat_AsDouble(w) && i.imag == 0.0);
  ------------------
  |  Branch (869:18): [True: 1, False: 0]
  |  Branch (869:51): [True: 1, False: 0]
  ------------------
  870|      1|    }
  871|   183k|    else if (PyComplex_Check(w)) {
  ------------------
  |  |   13|   183k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  378|   183k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 183k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  872|   183k|        Py_complex j;
  873|       |
  874|   183k|        TO_COMPLEX(w, j);
  ------------------
  |  |  669|   183k|    if (PyComplex_Check(obj))                   \
  |  |  ------------------
  |  |  |  |   13|   183k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|   183k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 183k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  670|   183k|        c = ((PyComplexObject *)(obj))->cval;   \
  |  |  671|   183k|    else if (real_to_complex(&(obj), &(c)) < 0) \
  |  |  ------------------
  |  |  |  Branch (671:14): [True: 0, False: 0]
  |  |  ------------------
  |  |  672|      0|        return (obj)
  ------------------
  875|   183k|        equal = (i.real == j.real && i.imag == j.imag);
  ------------------
  |  Branch (875:18): [True: 183k, False: 154]
  |  Branch (875:38): [True: 183k, False: 346]
  ------------------
  876|   183k|    }
  877|      0|    else {
  878|      0|        goto Unimplemented;
  879|      0|    }
  880|       |
  881|   183k|    if (equal == (op == Py_EQ))
  ------------------
  |  |  654|   183k|#define Py_EQ 2
  ------------------
  |  Branch (881:9): [True: 183k, False: 500]
  ------------------
  882|   183k|         res = Py_True;
  ------------------
  |  |   26|   183k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  883|    500|    else
  884|    500|         res = Py_False;
  ------------------
  |  |   25|    500|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|    500|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    500|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  885|       |
  886|   183k|    return Py_NewRef(res);
  ------------------
  |  |  550|   183k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|       |
  888|      0|Unimplemented:
  889|      0|    Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  890|   183k|}

PyDescr_NewMethod:
  936|  1.66k|{
  937|       |    /* Figure out correct vectorcall function to use */
  938|  1.66k|    vectorcallfunc vectorcall;
  939|  1.66k|    switch (method->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
  ------------------
  |  |   95|  1.66k|#define METH_VARARGS  0x0001
  ------------------
                  switch (method->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
  ------------------
  |  |  115|  1.66k|#  define METH_FASTCALL  0x0080
  ------------------
                  switch (method->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
  ------------------
  |  |   98|  1.66k|#define METH_NOARGS   0x0004
  ------------------
  940|  1.66k|                                METH_O | METH_KEYWORDS | METH_METHOD))
  ------------------
  |  |   99|  1.66k|#define METH_O        0x0008
  ------------------
                                              METH_O | METH_KEYWORDS | METH_METHOD))
  ------------------
  |  |   96|  1.66k|#define METH_KEYWORDS 0x0002
  ------------------
                                              METH_O | METH_KEYWORDS | METH_METHOD))
  ------------------
  |  |  133|  1.66k|#define METH_METHOD 0x0200
  ------------------
  941|  1.66k|    {
  942|     19|        case METH_VARARGS:
  ------------------
  |  |   95|     19|#define METH_VARARGS  0x0001
  ------------------
  |  Branch (942:9): [True: 19, False: 1.64k]
  ------------------
  943|     19|            vectorcall = method_vectorcall_VARARGS;
  944|     19|            break;
  945|     44|        case METH_VARARGS | METH_KEYWORDS:
  ------------------
  |  |   95|     44|#define METH_VARARGS  0x0001
  ------------------
                      case METH_VARARGS | METH_KEYWORDS:
  ------------------
  |  |   96|     44|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (945:9): [True: 44, False: 1.62k]
  ------------------
  946|     44|            vectorcall = method_vectorcall_VARARGS_KEYWORDS;
  947|     44|            break;
  948|    245|        case METH_FASTCALL:
  ------------------
  |  |  115|    245|#  define METH_FASTCALL  0x0080
  ------------------
  |  Branch (948:9): [True: 245, False: 1.42k]
  ------------------
  949|    245|            vectorcall = method_vectorcall_FASTCALL;
  950|    245|            break;
  951|    118|        case METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |  115|    118|#  define METH_FASTCALL  0x0080
  ------------------
                      case METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |   96|    118|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (951:9): [True: 118, False: 1.54k]
  ------------------
  952|    118|            vectorcall = method_vectorcall_FASTCALL_KEYWORDS;
  953|    118|            break;
  954|    848|        case METH_NOARGS:
  ------------------
  |  |   98|    848|#define METH_NOARGS   0x0004
  ------------------
  |  Branch (954:9): [True: 848, False: 819]
  ------------------
  955|    848|            vectorcall = method_vectorcall_NOARGS;
  956|    848|            break;
  957|    319|        case METH_O:
  ------------------
  |  |   99|    319|#define METH_O        0x0008
  ------------------
  |  Branch (957:9): [True: 319, False: 1.34k]
  ------------------
  958|    319|            vectorcall = method_vectorcall_O;
  959|    319|            break;
  960|     74|        case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |  133|     74|#define METH_METHOD 0x0200
  ------------------
                      case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |  115|     74|#  define METH_FASTCALL  0x0080
  ------------------
                      case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |   96|     74|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (960:9): [True: 74, False: 1.59k]
  ------------------
  961|     74|            vectorcall = method_vectorcall_FASTCALL_KEYWORDS_METHOD;
  962|     74|            break;
  963|      0|        default:
  ------------------
  |  Branch (963:9): [True: 0, False: 1.66k]
  ------------------
  964|      0|            PyErr_Format(PyExc_SystemError,
  965|      0|                         "%s() method: bad call flags", method->ml_name);
  966|      0|            return NULL;
  967|  1.66k|    }
  968|       |
  969|  1.66k|    PyMethodDescrObject *descr;
  970|       |
  971|  1.66k|    descr = (PyMethodDescrObject *)descr_new(&PyMethodDescr_Type,
  972|  1.66k|                                             type, method->ml_name);
  973|  1.66k|    if (descr != NULL) {
  ------------------
  |  Branch (973:9): [True: 1.66k, False: 0]
  ------------------
  974|  1.66k|        descr->d_method = method;
  975|  1.66k|        descr->vectorcall = vectorcall;
  976|  1.66k|    }
  977|  1.66k|    return (PyObject *)descr;
  978|  1.66k|}
PyDescr_NewClassMethod:
  982|    115|{
  983|    115|    PyMethodDescrObject *descr;
  984|       |
  985|    115|    descr = (PyMethodDescrObject *)descr_new(&PyClassMethodDescr_Type,
  986|    115|                                             type, method->ml_name);
  987|    115|    if (descr != NULL)
  ------------------
  |  Branch (987:9): [True: 115, False: 0]
  ------------------
  988|    115|        descr->d_method = method;
  989|    115|    return (PyObject *)descr;
  990|    115|}
PyDescr_NewMember:
  994|    696|{
  995|    696|    PyMemberDescrObject *descr;
  996|       |
  997|    696|    if (member->flags & Py_RELATIVE_OFFSET) {
  ------------------
  |  |   86|    696|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
  |  Branch (997:9): [True: 0, False: 696]
  ------------------
  998|      0|        PyErr_SetString(
  999|      0|            PyExc_SystemError,
 1000|      0|            "PyDescr_NewMember used with Py_RELATIVE_OFFSET");
 1001|      0|        return NULL;
 1002|      0|    }
 1003|    696|    descr = (PyMemberDescrObject *)descr_new(&PyMemberDescr_Type,
 1004|    696|                                             type, member->name);
 1005|    696|    if (descr != NULL)
  ------------------
  |  Branch (1005:9): [True: 696, False: 0]
  ------------------
 1006|    696|        descr->d_member = member;
 1007|    696|    return (PyObject *)descr;
 1008|    696|}
PyDescr_NewGetSet:
 1012|    463|{
 1013|    463|    PyGetSetDescrObject *descr;
 1014|       |
 1015|    463|    descr = (PyGetSetDescrObject *)descr_new(&PyGetSetDescr_Type,
 1016|    463|                                             type, getset->name);
 1017|    463|    if (descr != NULL)
  ------------------
  |  Branch (1017:9): [True: 463, False: 0]
  ------------------
 1018|    463|        descr->d_getset = getset;
 1019|    463|    return (PyObject *)descr;
 1020|    463|}
PyDescr_NewWrapper:
 1024|  2.20k|{
 1025|  2.20k|    PyWrapperDescrObject *descr;
 1026|       |
 1027|  2.20k|    descr = (PyWrapperDescrObject *)descr_new(&PyWrapperDescr_Type,
 1028|  2.20k|                                             type, base->name);
 1029|  2.20k|    if (descr != NULL) {
  ------------------
  |  Branch (1029:9): [True: 2.20k, False: 0]
  ------------------
 1030|  2.20k|        descr->d_base = base;
 1031|  2.20k|        descr->d_wrapped = wrapped;
 1032|  2.20k|    }
 1033|  2.20k|    return (PyObject *)descr;
 1034|  2.20k|}
PyDescr_IsData:
 1038|  2.01M|{
 1039|  2.01M|    return Py_TYPE(ob)->tp_descr_set != NULL;
  ------------------
  |  |  213|  2.01M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.01M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.01M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|  2.01M|}
PyDictProxy_New:
 1287|    387|{
 1288|    387|    mappingproxyobject *pp;
 1289|       |
 1290|    387|    if (mappingproxy_check_mapping(mapping) == -1)
  ------------------
  |  Branch (1290:9): [True: 0, False: 387]
  ------------------
 1291|      0|        return NULL;
 1292|       |
 1293|    387|    pp = PyObject_GC_New(mappingproxyobject, &PyDictProxy_Type);
  ------------------
  |  |  181|    387|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    387|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1294|    387|    if (pp != NULL) {
  ------------------
  |  Branch (1294:9): [True: 387, False: 0]
  ------------------
 1295|    387|        pp->mapping = Py_NewRef(mapping);
  ------------------
  |  |  550|    387|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    387|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    387|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|    387|        _PyObject_GC_TRACK(pp);
  ------------------
  |  |  505|    387|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    387|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    387|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|    387|    }
 1298|    387|    return (PyObject *)pp;
 1299|    387|}
PyWrapper_New:
 1511|    103|{
 1512|    103|    wrapperobject *wp;
 1513|    103|    PyWrapperDescrObject *descr;
 1514|       |
 1515|    103|    assert(PyObject_TypeCheck(d, &PyWrapperDescr_Type));
  ------------------
  |  Branch (1515:5): [True: 103, False: 0]
  ------------------
 1516|    103|    descr = (PyWrapperDescrObject *)d;
 1517|    103|    assert(_PyObject_RealIsSubclass((PyObject *)Py_TYPE(self),
  ------------------
  |  Branch (1517:5): [True: 103, False: 0]
  ------------------
 1518|    103|                                    (PyObject *)PyDescr_TYPE(descr)));
 1519|       |
 1520|    103|    wp = PyObject_GC_New(wrapperobject, &_PyMethodWrapper_Type);
  ------------------
  |  |  181|    103|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1521|    103|    if (wp != NULL) {
  ------------------
  |  Branch (1521:9): [True: 103, False: 0]
  ------------------
 1522|    103|        wp->descr = (PyWrapperDescrObject*)Py_NewRef(descr);
  ------------------
  |  |  550|    103|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1523|    103|        wp->self = Py_NewRef(self);
  ------------------
  |  |  550|    103|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1524|    103|        _PyObject_GC_TRACK(wp);
  ------------------
  |  |  505|    103|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|    103|    }
 1526|    103|    return (PyObject *)wp;
 1527|    103|}
descrobject.c:descr_dealloc:
   24|     80|{
   25|     80|    PyDescrObject *descr = (PyDescrObject *)self;
   26|     80|    _PyObject_GC_UNTRACK(descr);
  ------------------
  |  |  507|     80|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     80|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   27|     80|    Py_XDECREF(descr->d_type);
  ------------------
  |  |  524|     80|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     80|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   28|     80|    Py_XDECREF(descr->d_name);
  ------------------
  |  |  524|     80|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     80|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   29|     80|    Py_XDECREF(descr->d_qualname);
  ------------------
  |  |  524|     80|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     80|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   30|     80|    PyObject_GC_Del(descr);
   31|     80|}
descrobject.c:descr_traverse:
  719|  53.3k|{
  720|  53.3k|    PyDescrObject *descr = (PyDescrObject *)self;
  721|  53.3k|    Py_VISIT(descr->d_type);
  ------------------
  |  |  194|  53.3k|    do {                                                                \
  |  |  195|  53.3k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  196|  53.3k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  53.3k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 53.3k]
  |  |  ------------------
  |  |  198|  53.3k|                return vret;                                            \
  |  |  199|  53.3k|        }                                                               \
  |  |  200|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  722|  53.3k|    return 0;
  723|  53.3k|}
descrobject.c:method_get:
  139|  1.94M|{
  140|  1.94M|    PyMethodDescrObject *descr = (PyMethodDescrObject *)self;
  141|  1.94M|    if (obj == NULL) {
  ------------------
  |  Branch (141:9): [True: 130, False: 1.94M]
  ------------------
  142|    130|        return Py_NewRef(descr);
  ------------------
  |  |  550|    130|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    130|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    130|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|    130|    }
  144|  1.94M|    if (descr_check((PyDescrObject *)descr, obj) < 0) {
  ------------------
  |  Branch (144:9): [True: 0, False: 1.94M]
  ------------------
  145|      0|        return NULL;
  146|      0|    }
  147|  1.94M|    if (descr->d_method->ml_flags & METH_METHOD) {
  ------------------
  |  |  133|  1.94M|#define METH_METHOD 0x0200
  ------------------
  |  Branch (147:9): [True: 100, False: 1.94M]
  ------------------
  148|    100|        if (type == NULL || PyType_Check(type)) {
  ------------------
  |  |  766|    100|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    100|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    100|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 100, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (148:13): [True: 0, False: 100]
  ------------------
  149|    100|            return PyCMethod_New(descr->d_method, obj, NULL, descr->d_common.d_type);
  150|    100|        } else {
  151|      0|            PyErr_Format(PyExc_TypeError,
  152|      0|                        "descriptor '%V' needs a type, not '%s', as arg 2",
  153|      0|                        descr_name((PyDescrObject *)descr), "?",
  154|      0|                        Py_TYPE(type)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|      0|            return NULL;
  156|      0|        }
  157|  1.94M|    } else {
  158|       |        return PyCFunction_NewEx(descr->d_method, obj, NULL);
  ------------------
  |  |   87|  1.94M|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
  159|  1.94M|    }
  160|  1.94M|}
descrobject.c:descr_check:
   81|  2.21M|{
   82|  2.21M|    if (!PyObject_TypeCheck(obj, descr->d_type)) {
  ------------------
  |  |  378|  2.21M|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  2.21M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (82:9): [True: 0, False: 2.21M]
  ------------------
   83|      0|        PyErr_Format(PyExc_TypeError,
   84|      0|                     "descriptor '%V' for '%.100s' objects "
   85|      0|                     "doesn't apply to a '%.100s' object",
   86|      0|                     descr_name((PyDescrObject *)descr), "?",
   87|      0|                     descr->d_type->tp_name,
   88|      0|                     Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      0|        return -1;
   90|      0|    }
   91|  2.21M|    return 0;
   92|  2.21M|}
descrobject.c:classmethod_get:
   96|  1.71k|{
   97|  1.71k|    PyMethodDescrObject *descr = (PyMethodDescrObject *)self;
   98|       |    /* Ensure a valid type.  Class methods ignore obj. */
   99|  1.71k|    if (type == NULL) {
  ------------------
  |  Branch (99:9): [True: 0, False: 1.71k]
  ------------------
  100|      0|        if (obj != NULL)
  ------------------
  |  Branch (100:13): [True: 0, False: 0]
  ------------------
  101|      0|            type = (PyObject *)Py_TYPE(obj);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|      0|        else {
  103|       |            /* Wot - no type?! */
  104|      0|            PyErr_Format(PyExc_TypeError,
  105|      0|                         "descriptor '%V' for type '%.100s' "
  106|      0|                         "needs either an object or a type",
  107|      0|                         descr_name((PyDescrObject *)descr), "?",
  108|      0|                         PyDescr_TYPE(descr)->tp_name);
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  109|      0|            return NULL;
  110|      0|        }
  111|      0|    }
  112|  1.71k|    if (!PyType_Check(type)) {
  ------------------
  |  |  766|  1.71k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (112:9): [True: 0, False: 1.71k]
  ------------------
  113|      0|        PyErr_Format(PyExc_TypeError,
  114|      0|                     "descriptor '%V' for type '%.100s' "
  115|      0|                     "needs a type, not a '%.100s' as arg 2",
  116|      0|                     descr_name((PyDescrObject *)descr), "?",
  117|      0|                     PyDescr_TYPE(descr)->tp_name,
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  118|      0|                     Py_TYPE(type)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      0|        return NULL;
  120|      0|    }
  121|  1.71k|    if (!PyType_IsSubtype((PyTypeObject *)type, PyDescr_TYPE(descr))) {
  ------------------
  |  |   35|  1.71k|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  |  Branch (121:9): [True: 0, False: 1.71k]
  ------------------
  122|      0|        PyErr_Format(PyExc_TypeError,
  123|      0|                     "descriptor '%V' requires a subtype of '%.100s' "
  124|      0|                     "but received '%.100s'",
  125|      0|                     descr_name((PyDescrObject *)descr), "?",
  126|      0|                     PyDescr_TYPE(descr)->tp_name,
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  127|      0|                     ((PyTypeObject *)type)->tp_name);
  128|      0|        return NULL;
  129|      0|    }
  130|  1.71k|    PyTypeObject *cls = NULL;
  131|  1.71k|    if (descr->d_method->ml_flags & METH_METHOD) {
  ------------------
  |  |  133|  1.71k|#define METH_METHOD 0x0200
  ------------------
  |  Branch (131:9): [True: 0, False: 1.71k]
  ------------------
  132|      0|        cls = descr->d_common.d_type;
  133|      0|    }
  134|       |    return PyCMethod_New(descr->d_method, type, NULL, cls);
  135|  1.71k|}
descrobject.c:member_get:
  164|  3.30k|{
  165|  3.30k|    PyMemberDescrObject *descr = (PyMemberDescrObject *)self;
  166|  3.30k|    if (obj == NULL) {
  ------------------
  |  Branch (166:9): [True: 0, False: 3.30k]
  ------------------
  167|      0|        return Py_NewRef(descr);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      0|    }
  169|  3.30k|    if (descr_check((PyDescrObject *)descr, obj) < 0) {
  ------------------
  |  Branch (169:9): [True: 0, False: 3.30k]
  ------------------
  170|      0|        return NULL;
  171|      0|    }
  172|       |
  173|  3.30k|    if (descr->d_member->flags & Py_AUDIT_READ) {
  ------------------
  |  |   84|  3.30k|#define Py_AUDIT_READ          (1 << 1) // Added in 3.10, harmless no-op before that
  ------------------
  |  Branch (173:9): [True: 0, False: 3.30k]
  ------------------
  174|      0|        if (PySys_Audit("object.__getattr__", "Os",
  ------------------
  |  Branch (174:13): [True: 0, False: 0]
  ------------------
  175|      0|            obj ? obj : Py_None, descr->d_member->name) < 0) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (175:13): [True: 0, False: 0]
  ------------------
  176|      0|            return NULL;
  177|      0|        }
  178|      0|    }
  179|       |
  180|  3.30k|    return PyMember_GetOne((char *)obj, descr->d_member);
  181|  3.30k|}
descrobject.c:member_set:
  234|  2.71k|{
  235|  2.71k|    PyMemberDescrObject *descr = (PyMemberDescrObject *)self;
  236|  2.71k|    if (descr_setcheck((PyDescrObject *)descr, obj, value) < 0) {
  ------------------
  |  Branch (236:9): [True: 0, False: 2.71k]
  ------------------
  237|      0|        return -1;
  238|      0|    }
  239|  2.71k|    return PyMember_SetOne((char *)obj, descr->d_member, value);
  240|  2.71k|}
descrobject.c:descr_setcheck:
  218|  3.03k|{
  219|  3.03k|    assert(obj != NULL);
  ------------------
  |  Branch (219:5): [True: 3.03k, False: 0]
  ------------------
  220|  3.03k|    if (!PyObject_TypeCheck(obj, descr->d_type)) {
  ------------------
  |  |  378|  3.03k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  3.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (220:9): [True: 0, False: 3.03k]
  ------------------
  221|      0|        PyErr_Format(PyExc_TypeError,
  222|      0|                     "descriptor '%V' for '%.100s' objects "
  223|      0|                     "doesn't apply to a '%.100s' object",
  224|      0|                     descr_name(descr), "?",
  225|      0|                     descr->d_type->tp_name,
  226|      0|                     Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|      0|        return -1;
  228|      0|    }
  229|  3.03k|    return 0;
  230|  3.03k|}
descrobject.c:getset_get:
  185|   119k|{
  186|   119k|    PyGetSetDescrObject *descr = (PyGetSetDescrObject *)self;
  187|   119k|    if (obj == NULL) {
  ------------------
  |  Branch (187:9): [True: 0, False: 119k]
  ------------------
  188|      0|        return Py_NewRef(descr);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      0|    }
  190|   119k|    if (descr_check((PyDescrObject *)descr, obj) < 0) {
  ------------------
  |  Branch (190:9): [True: 0, False: 119k]
  ------------------
  191|      0|        return NULL;
  192|      0|    }
  193|   119k|    if (descr->d_getset->get != NULL)
  ------------------
  |  Branch (193:9): [True: 119k, False: 0]
  ------------------
  194|   119k|        return descr_get_trampoline_call(
  ------------------
  |  |   63|   119k|    (get)((obj), (closure))
  ------------------
  195|   119k|            descr->d_getset->get, obj, descr->d_getset->closure);
  196|      0|    PyErr_Format(PyExc_AttributeError,
  197|      0|                 "attribute '%V' of '%.100s' objects is not readable",
  198|      0|                 descr_name((PyDescrObject *)descr), "?",
  199|      0|                 PyDescr_TYPE(descr)->tp_name);
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  200|       |    return NULL;
  201|   119k|}
descrobject.c:getset_set:
  244|    322|{
  245|    322|    PyGetSetDescrObject *descr = (PyGetSetDescrObject *)self;
  246|    322|    if (descr_setcheck((PyDescrObject *)descr, obj, value) < 0) {
  ------------------
  |  Branch (246:9): [True: 0, False: 322]
  ------------------
  247|      0|        return -1;
  248|      0|    }
  249|    322|    if (descr->d_getset->set != NULL) {
  ------------------
  |  Branch (249:9): [True: 322, False: 0]
  ------------------
  250|    322|        return descr_set_trampoline_call(
  ------------------
  |  |   60|    322|    (set)((obj), (value), (closure))
  ------------------
  251|    322|            descr->d_getset->set, obj, value,
  252|    322|            descr->d_getset->closure);
  253|    322|    }
  254|      0|    PyErr_Format(PyExc_AttributeError,
  255|      0|                 "attribute '%V' of '%.100s' objects is not writable",
  256|      0|                 descr_name((PyDescrObject *)descr), "?",
  257|      0|                 PyDescr_TYPE(descr)->tp_name);
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  258|      0|    return -1;
  259|    322|}
descrobject.c:wrapperdescr_call:
  537|    515|{
  538|    515|    PyWrapperDescrObject *descr = (PyWrapperDescrObject *)_descr;
  539|    515|    Py_ssize_t argc;
  540|    515|    PyObject *self, *result;
  541|       |
  542|       |    /* Make sure that the first argument is acceptable as 'self' */
  543|    515|    assert(PyTuple_Check(args));
  ------------------
  |  Branch (543:5): [True: 515, False: 0]
  ------------------
  544|    515|    argc = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|    515|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    515|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    515|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|    515|    if (argc < 1) {
  ------------------
  |  Branch (545:9): [True: 0, False: 515]
  ------------------
  546|      0|        PyErr_Format(PyExc_TypeError,
  547|      0|                     "descriptor '%V' of '%.100s' "
  548|      0|                     "object needs an argument",
  549|      0|                     descr_name((PyDescrObject *)descr), "?",
  550|      0|                     PyDescr_TYPE(descr)->tp_name);
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  551|      0|        return NULL;
  552|      0|    }
  553|    515|    self = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|    515|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    515|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    515|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (553:12): [True: 515, False: 0]
  ------------------
  554|    515|    if (!_PyObject_RealIsSubclass((PyObject *)Py_TYPE(self),
  ------------------
  |  |  213|    515|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    515|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    515|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (554:9): [True: 0, False: 515]
  ------------------
  555|    515|                                  (PyObject *)PyDescr_TYPE(descr))) {
  ------------------
  |  |   35|    515|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  556|      0|        PyErr_Format(PyExc_TypeError,
  557|      0|                     "descriptor '%V' "
  558|      0|                     "requires a '%.100s' object "
  559|      0|                     "but received a '%.100s'",
  560|      0|                     descr_name((PyDescrObject *)descr), "?",
  561|      0|                     PyDescr_TYPE(descr)->tp_name,
  ------------------
  |  |   35|      0|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  562|      0|                     Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  563|      0|        return NULL;
  564|      0|    }
  565|       |
  566|    515|    args = PyTuple_GetSlice(args, 1, argc);
  567|    515|    if (args == NULL) {
  ------------------
  |  Branch (567:9): [True: 0, False: 515]
  ------------------
  568|      0|        return NULL;
  569|      0|    }
  570|    515|    result = wrapperdescr_raw_call(descr, self, args, kwds);
  571|    515|    Py_DECREF(args);
  ------------------
  |  |  430|    515|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    515|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    515|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  572|    515|    return result;
  573|    515|}
descrobject.c:wrapperdescr_raw_call:
  518|    617|{
  519|    617|    wrapperfunc wrapper = descr->d_base->wrapper;
  520|       |
  521|    617|    if (descr->d_base->flags & PyWrapperFlag_KEYWORDS) {
  ------------------
  |  |   22|    617|#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
  ------------------
  |  Branch (521:9): [True: 390, False: 227]
  ------------------
  522|    390|        wrapperfunc_kwds wk = _Py_FUNC_CAST(wrapperfunc_kwds, wrapper);
  ------------------
  |  |   47|    390|#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func)))
  |  |  ------------------
  |  |  |  |   37|    390|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  523|    390|        return (*wk)(self, args, descr->d_wrapped, kwds);
  524|    390|    }
  525|       |
  526|    227|    if (kwds != NULL && (!PyDict_Check(kwds) || PyDict_GET_SIZE(kwds) != 0)) {
  ------------------
  |  |   18|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (kwds != NULL && (!PyDict_Check(kwds) || PyDict_GET_SIZE(kwds) != 0)) {
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (526:9): [True: 0, False: 227]
  |  Branch (526:26): [True: 0, False: 0]
  |  Branch (526:49): [True: 0, False: 0]
  ------------------
  527|      0|        PyErr_Format(PyExc_TypeError,
  528|      0|                     "wrapper %s() takes no keyword arguments",
  529|      0|                     descr->d_base->name);
  530|      0|        return NULL;
  531|      0|    }
  532|    227|    return (*wrapper)(self, args, descr->d_wrapped);
  533|    227|}
descrobject.c:wrapperdescr_get:
  205|    159|{
  206|    159|    PyWrapperDescrObject *descr = (PyWrapperDescrObject *)self;
  207|    159|    if (obj == NULL) {
  ------------------
  |  Branch (207:9): [True: 56, False: 103]
  ------------------
  208|     56|        return Py_NewRef(descr);
  ------------------
  |  |  550|     56|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     56|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     56|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|     56|    }
  210|    103|    if (descr_check((PyDescrObject *)descr, obj) < 0) {
  ------------------
  |  Branch (210:9): [True: 0, False: 103]
  ------------------
  211|      0|        return NULL;
  212|      0|    }
  213|    103|    return PyWrapper_New((PyObject *)descr, obj);
  214|    103|}
descrobject.c:method_vectorcall_VARARGS:
  310|     10|{
  311|     10|    PyThreadState *tstate = _PyThreadState_GET();
  312|     10|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|     10|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  313|     10|    if (method_check_args(func, args, nargs, kwnames)) {
  ------------------
  |  Branch (313:9): [True: 0, False: 10]
  ------------------
  314|      0|        return NULL;
  315|      0|    }
  316|     10|    PyObject *argstuple = PyTuple_FromArray(args+1, nargs-1);
  317|     10|    if (argstuple == NULL) {
  ------------------
  |  Branch (317:9): [True: 0, False: 10]
  ------------------
  318|      0|        return NULL;
  319|      0|    }
  320|     10|    PyCFunction meth = (PyCFunction)method_enter_call(tstate, func);
  321|     10|    if (meth == NULL) {
  ------------------
  |  Branch (321:9): [True: 0, False: 10]
  ------------------
  322|      0|        Py_DECREF(argstuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|      0|        return NULL;
  324|      0|    }
  325|     10|    PyObject *result = _PyCFunction_TrampolineCall(
  ------------------
  |  |  996|     10|    (meth)((self), (args))
  ------------------
  326|     10|        meth, args[0], argstuple);
  327|     10|    Py_DECREF(argstuple);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|     10|    _Py_LeaveRecursiveCallTstate(tstate);
  329|     10|    return result;
  330|     10|}
descrobject.c:method_check_args:
  268|   148k|{
  269|   148k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (269:5): [True: 148k, False: 0]
  ------------------
  270|   148k|    if (nargs < 1) {
  ------------------
  |  Branch (270:9): [True: 0, False: 148k]
  ------------------
  271|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  272|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (272:13): [True: 0, False: 0]
  ------------------
  273|      0|            PyErr_Format(PyExc_TypeError,
  274|      0|                         "unbound method %U needs an argument", funcstr);
  275|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|      0|        }
  277|      0|        return -1;
  278|      0|    }
  279|   148k|    PyObject *self = args[0];
  280|   148k|    if (descr_check((PyDescrObject *)func, self) < 0) {
  ------------------
  |  Branch (280:9): [True: 0, False: 148k]
  ------------------
  281|      0|        return -1;
  282|      0|    }
  283|   148k|    if (kwnames && PyTuple_GET_SIZE(kwnames)) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (283:9): [True: 0, False: 148k]
  ------------------
  284|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  285|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (285:13): [True: 0, False: 0]
  ------------------
  286|      0|            PyErr_Format(PyExc_TypeError,
  287|      0|                         "%U takes no keyword arguments", funcstr);
  288|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|      0|        }
  290|      0|        return -1;
  291|      0|    }
  292|   148k|    return 0;
  293|   148k|}
descrobject.c:method_enter_call:
  299|   148k|{
  300|   148k|    if (_Py_EnterRecursiveCallTstate(tstate, " while calling a Python object")) {
  ------------------
  |  Branch (300:9): [True: 0, False: 148k]
  ------------------
  301|      0|        return NULL;
  302|      0|    }
  303|   148k|    return (funcptr)((PyMethodDescrObject *)func)->d_method->ml_meth;
  304|   148k|}
descrobject.c:method_vectorcall_VARARGS_KEYWORDS:
  335|     45|{
  336|     45|    PyThreadState *tstate = _PyThreadState_GET();
  337|     45|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|     45|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  338|     45|    if (method_check_args(func, args, nargs, NULL)) {
  ------------------
  |  Branch (338:9): [True: 0, False: 45]
  ------------------
  339|      0|        return NULL;
  340|      0|    }
  341|     45|    PyObject *argstuple = PyTuple_FromArray(args+1, nargs-1);
  342|     45|    if (argstuple == NULL) {
  ------------------
  |  Branch (342:9): [True: 0, False: 45]
  ------------------
  343|      0|        return NULL;
  344|      0|    }
  345|     45|    PyObject *result = NULL;
  346|       |    /* Create a temporary dict for keyword arguments */
  347|     45|    PyObject *kwdict = NULL;
  348|     45|    if (kwnames != NULL && PyTuple_GET_SIZE(kwnames) > 0) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (348:9): [True: 0, False: 45]
  |  Branch (348:28): [True: 0, False: 0]
  ------------------
  349|      0|        kwdict = _PyStack_AsDict(args + nargs, kwnames);
  350|      0|        if (kwdict == NULL) {
  ------------------
  |  Branch (350:13): [True: 0, False: 0]
  ------------------
  351|      0|            goto exit;
  352|      0|        }
  353|      0|    }
  354|     45|    PyCFunctionWithKeywords meth = (PyCFunctionWithKeywords)
  355|     45|                                   method_enter_call(tstate, func);
  356|     45|    if (meth == NULL) {
  ------------------
  |  Branch (356:9): [True: 0, False: 45]
  ------------------
  357|      0|        goto exit;
  358|      0|    }
  359|     45|    result = _PyCFunctionWithKeywords_TrampolineCall(
  ------------------
  |  |  998|     45|    (meth)((self), (args), (kw))
  ------------------
  360|     45|        meth, args[0], argstuple, kwdict);
  361|     45|    _Py_LeaveRecursiveCallTstate(tstate);
  362|     45|exit:
  363|     45|    Py_DECREF(argstuple);
  ------------------
  |  |  430|     45|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  364|     45|    Py_XDECREF(kwdict);
  ------------------
  |  |  524|     45|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|     45|    return result;
  366|     45|}
descrobject.c:method_vectorcall_FASTCALL:
  391|    534|{
  392|    534|    PyThreadState *tstate = _PyThreadState_GET();
  393|    534|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    534|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  394|    534|    if (method_check_args(func, args, nargs, kwnames)) {
  ------------------
  |  Branch (394:9): [True: 0, False: 534]
  ------------------
  395|      0|        return NULL;
  396|      0|    }
  397|    534|    PyCFunctionFast meth = (PyCFunctionFast)
  398|    534|                            method_enter_call(tstate, func);
  399|    534|    if (meth == NULL) {
  ------------------
  |  Branch (399:9): [True: 0, False: 534]
  ------------------
  400|      0|        return NULL;
  401|      0|    }
  402|    534|    PyObject *result = meth(args[0], args+1, nargs-1);
  403|    534|    _Py_LeaveRecursiveCallTstate(tstate);
  404|    534|    return result;
  405|    534|}
descrobject.c:method_vectorcall_FASTCALL_KEYWORDS:
  410|     25|{
  411|     25|    PyThreadState *tstate = _PyThreadState_GET();
  412|     25|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|     25|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  413|     25|    if (method_check_args(func, args, nargs, NULL)) {
  ------------------
  |  Branch (413:9): [True: 0, False: 25]
  ------------------
  414|      0|        return NULL;
  415|      0|    }
  416|     25|    PyCFunctionFastWithKeywords meth = (PyCFunctionFastWithKeywords)
  417|     25|                                        method_enter_call(tstate, func);
  418|     25|    if (meth == NULL) {
  ------------------
  |  Branch (418:9): [True: 0, False: 25]
  ------------------
  419|      0|        return NULL;
  420|      0|    }
  421|     25|    PyObject *result = meth(args[0], args+1, nargs-1, kwnames);
  422|     25|    _Py_LeaveRecursiveCallTstate(tstate);
  423|     25|    return result;
  424|     25|}
descrobject.c:method_vectorcall_NOARGS:
  429|  49.7k|{
  430|  49.7k|    PyThreadState *tstate = _PyThreadState_GET();
  431|  49.7k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  49.7k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  432|  49.7k|    if (method_check_args(func, args, nargs, kwnames)) {
  ------------------
  |  Branch (432:9): [True: 0, False: 49.7k]
  ------------------
  433|      0|        return NULL;
  434|      0|    }
  435|  49.7k|    if (nargs != 1) {
  ------------------
  |  Branch (435:9): [True: 0, False: 49.7k]
  ------------------
  436|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  437|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (437:13): [True: 0, False: 0]
  ------------------
  438|      0|            PyErr_Format(PyExc_TypeError,
  439|      0|                "%U takes no arguments (%zd given)", funcstr, nargs-1);
  440|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  441|      0|        }
  442|      0|        return NULL;
  443|      0|    }
  444|  49.7k|    PyCFunction meth = (PyCFunction)method_enter_call(tstate, func);
  445|  49.7k|    if (meth == NULL) {
  ------------------
  |  Branch (445:9): [True: 0, False: 49.7k]
  ------------------
  446|      0|        return NULL;
  447|      0|    }
  448|  49.7k|    PyObject *result = _PyCFunction_TrampolineCall(meth, args[0], NULL);
  ------------------
  |  |  996|  49.7k|    (meth)((self), (args))
  ------------------
  449|  49.7k|    _Py_LeaveRecursiveCallTstate(tstate);
  450|  49.7k|    return result;
  451|  49.7k|}
descrobject.c:method_vectorcall_O:
  456|  49.4k|{
  457|  49.4k|    PyThreadState *tstate = _PyThreadState_GET();
  458|  49.4k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  49.4k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  459|  49.4k|    if (method_check_args(func, args, nargs, kwnames)) {
  ------------------
  |  Branch (459:9): [True: 0, False: 49.4k]
  ------------------
  460|      0|        return NULL;
  461|      0|    }
  462|  49.4k|    if (nargs != 2) {
  ------------------
  |  Branch (462:9): [True: 0, False: 49.4k]
  ------------------
  463|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  464|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (464:13): [True: 0, False: 0]
  ------------------
  465|      0|            PyErr_Format(PyExc_TypeError,
  466|      0|                "%U takes exactly one argument (%zd given)",
  467|      0|                funcstr, nargs-1);
  468|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|      0|        }
  470|      0|        return NULL;
  471|      0|    }
  472|  49.4k|    PyCFunction meth = (PyCFunction)method_enter_call(tstate, func);
  473|  49.4k|    if (meth == NULL) {
  ------------------
  |  Branch (473:9): [True: 0, False: 49.4k]
  ------------------
  474|      0|        return NULL;
  475|      0|    }
  476|  49.4k|    PyObject *result = _PyCFunction_TrampolineCall(meth, args[0], args[1]);
  ------------------
  |  |  996|  49.4k|    (meth)((self), (args))
  ------------------
  477|  49.4k|    _Py_LeaveRecursiveCallTstate(tstate);
  478|  49.4k|    return result;
  479|  49.4k|}
descrobject.c:method_vectorcall_FASTCALL_KEYWORDS_METHOD:
  371|  48.5k|{
  372|  48.5k|    PyThreadState *tstate = _PyThreadState_GET();
  373|  48.5k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  48.5k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  374|  48.5k|    if (method_check_args(func, args, nargs, NULL)) {
  ------------------
  |  Branch (374:9): [True: 0, False: 48.5k]
  ------------------
  375|      0|        return NULL;
  376|      0|    }
  377|  48.5k|    PyCMethod meth = (PyCMethod) method_enter_call(tstate, func);
  378|  48.5k|    if (meth == NULL) {
  ------------------
  |  Branch (378:9): [True: 0, False: 48.5k]
  ------------------
  379|      0|        return NULL;
  380|      0|    }
  381|  48.5k|    PyObject *result = meth(args[0],
  382|  48.5k|                            ((PyMethodDescrObject *)func)->d_common.d_type,
  383|  48.5k|                            args+1, nargs-1, kwnames);
  384|  48.5k|    _Py_LeaveRecursiveCall();
  385|  48.5k|    return result;
  386|  48.5k|}
descrobject.c:descr_new:
  916|  5.14k|{
  917|  5.14k|    PyDescrObject *descr;
  918|       |
  919|  5.14k|    descr = (PyDescrObject *)PyType_GenericAlloc(descrtype, 0);
  920|  5.14k|    if (descr != NULL) {
  ------------------
  |  Branch (920:9): [True: 5.14k, False: 0]
  ------------------
  921|  5.14k|        _PyObject_SetDeferredRefcount((PyObject *)descr);
  922|  5.14k|        descr->d_type = (PyTypeObject*)Py_XNewRef(type);
  ------------------
  |  |  551|  5.14k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  5.14k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|  5.14k|        descr->d_name = PyUnicode_InternFromString(name);
  924|  5.14k|        if (descr->d_name == NULL) {
  ------------------
  |  Branch (924:13): [True: 0, False: 5.14k]
  ------------------
  925|      0|            Py_SETREF(descr, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  926|      0|        }
  927|  5.14k|        else {
  928|       |            descr->d_qualname = NULL;
  929|  5.14k|        }
  930|  5.14k|    }
  931|  5.14k|    return descr;
  932|  5.14k|}
descrobject.c:mappingproxy_check_mapping:
 1273|    387|{
 1274|    387|    if (!PyMapping_Check(mapping)
  ------------------
  |  Branch (1274:9): [True: 0, False: 387]
  ------------------
 1275|    387|        || PyList_Check(mapping)
  ------------------
  |  |   25|    387|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    774|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1276|    387|        || PyTuple_Check(mapping)) {
  ------------------
  |  |   27|    387|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    387|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|      0|        PyErr_Format(PyExc_TypeError,
 1278|      0|                    "mappingproxy() argument must be a mapping, not %s",
 1279|      0|                    Py_TYPE(mapping)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1280|      0|        return -1;
 1281|      0|    }
 1282|    387|    return 0;
 1283|    387|}
descrobject.c:wrapper_dealloc:
 1333|    103|{
 1334|    103|    wrapperobject *wp = (wrapperobject *)self;
 1335|    103|    PyObject_GC_UnTrack(wp);
 1336|    103|    Py_XDECREF(wp->descr);
  ------------------
  |  |  524|    103|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1337|    103|    Py_XDECREF(wp->self);
  ------------------
  |  |  524|    103|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1338|    103|    PyObject_GC_Del(wp);
 1339|    103|}
descrobject.c:wrapper_call:
 1457|    102|{
 1458|    102|    wrapperobject *wp = (wrapperobject *)self;
 1459|    102|    return wrapperdescr_raw_call(wp->descr, wp->self, args, kwds);
 1460|    102|}
descrobject.c:mappingproxy_dealloc:
 1197|    387|{
 1198|    387|    mappingproxyobject *pp = (mappingproxyobject *)self;
 1199|    387|    _PyObject_GC_UNTRACK(pp);
  ------------------
  |  |  507|    387|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    387|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    387|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1200|    387|    Py_DECREF(pp->mapping);
  ------------------
  |  |  430|    387|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    387|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    387|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1201|    387|    PyObject_GC_Del(pp);
 1202|    387|}
descrobject.c:mappingproxy_contains:
 1098|     92|{
 1099|     92|    mappingproxyobject *pp = (mappingproxyobject *)self;
 1100|     92|    if (PyDict_CheckExact(pp->mapping))
  ------------------
  |  |   19|     92|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|     92|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     92|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     92|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 92, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|     92|        return PyDict_Contains(pp->mapping, key);
 1102|      0|    else
 1103|      0|        return PySequence_Contains(pp->mapping, key);
 1104|     92|}
descrobject.c:mappingproxy_getitem:
 1061|    283|{
 1062|    283|    mappingproxyobject *pp = (mappingproxyobject *)self;
 1063|    283|    return PyObject_GetItem(pp->mapping, key);
 1064|    283|}
descrobject.c:mappingproxy_get:
 1121|    124|{
 1122|    124|    mappingproxyobject *pp = (mappingproxyobject *)self;
 1123|       |    /* newargs: mapping, key, default=None */
 1124|    124|    PyObject *newargs[3];
 1125|    124|    newargs[0] = pp->mapping;
 1126|    124|    newargs[2] = Py_None;
  ------------------
  |  |  616|    124|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1127|       |
 1128|    124|    if (!_PyArg_UnpackStack(args, nargs, "get", 1, 2,
  ------------------
  |  Branch (1128:9): [True: 0, False: 124]
  ------------------
 1129|    124|                            &newargs[1], &newargs[2]))
 1130|      0|    {
 1131|      0|        return NULL;
 1132|      0|    }
 1133|    124|    return PyObject_VectorcallMethod(&_Py_ID(get), newargs,
  ------------------
  |  |  936|    124|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    124|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    124|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1134|    124|                                     3 | PY_VECTORCALL_ARGUMENTS_OFFSET,
  ------------------
  |  |  287|    124|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|    124|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1135|       |                                     NULL);
 1136|    124|}
descrobject.c:mappingproxy_keys:
 1140|      8|{
 1141|      8|    mappingproxyobject *pp = (mappingproxyobject *)self;
 1142|      8|    return PyObject_CallMethodNoArgs(pp->mapping, &_Py_ID(keys));
  ------------------
  |  |  936|      8|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      8|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      8|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|      8|}
descrobject.c:mappingproxy_items:
 1154|     78|{
 1155|     78|    mappingproxyobject *pp = (mappingproxyobject *)self;
 1156|     78|    return PyObject_CallMethodNoArgs(pp->mapping, &_Py_ID(items));
  ------------------
  |  |  936|     78|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     78|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     78|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|     78|}
descrobject.c:mappingproxy_new_impl:
 1313|      1|{
 1314|      1|    return PyDictProxy_New(mapping);
 1315|      1|}
descrobject.c:property_dealloc:
 1656|      4|{
 1657|      4|    propertyobject *gs = (propertyobject *)self;
 1658|       |
 1659|      4|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|      4|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1660|      4|    Py_XDECREF(gs->prop_get);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1661|      4|    Py_XDECREF(gs->prop_set);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1662|      4|    Py_XDECREF(gs->prop_del);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1663|      4|    Py_XDECREF(gs->prop_doc);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1664|      4|    Py_XDECREF(gs->prop_name);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1665|      4|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1666|      4|}
descrobject.c:property_traverse:
 1999|    506|{
 2000|    506|    propertyobject *pp = (propertyobject *)self;
 2001|    506|    Py_VISIT(pp->prop_get);
  ------------------
  |  |  194|    506|    do {                                                                \
  |  |  195|    506|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 506, False: 0]
  |  |  ------------------
  |  |  196|    506|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    506|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    506|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    506|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 506]
  |  |  ------------------
  |  |  198|    506|                return vret;                                            \
  |  |  199|    506|        }                                                               \
  |  |  200|    506|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 506]
  |  |  ------------------
  ------------------
 2002|    506|    Py_VISIT(pp->prop_set);
  ------------------
  |  |  194|    506|    do {                                                                \
  |  |  195|    506|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 40, False: 466]
  |  |  ------------------
  |  |  196|     40|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     40|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 40]
  |  |  ------------------
  |  |  198|     40|                return vret;                                            \
  |  |  199|     40|        }                                                               \
  |  |  200|    506|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 506]
  |  |  ------------------
  ------------------
 2003|    506|    Py_VISIT(pp->prop_del);
  ------------------
  |  |  194|    506|    do {                                                                \
  |  |  195|    506|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 506]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|    506|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 506]
  |  |  ------------------
  ------------------
 2004|    506|    Py_VISIT(pp->prop_doc);
  ------------------
  |  |  194|    506|    do {                                                                \
  |  |  195|    506|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 168, False: 338]
  |  |  ------------------
  |  |  196|    168|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    168|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    168|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 168]
  |  |  ------------------
  |  |  198|    168|                return vret;                                            \
  |  |  199|    168|        }                                                               \
  |  |  200|    506|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 506]
  |  |  ------------------
  ------------------
 2005|    506|    Py_VISIT(pp->prop_name);
  ------------------
  |  |  194|    506|    do {                                                                \
  |  |  195|    506|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 506, False: 0]
  |  |  ------------------
  |  |  196|    506|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    506|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    506|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    506|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 506]
  |  |  ------------------
  |  |  198|    506|                return vret;                                            \
  |  |  199|    506|        }                                                               \
  |  |  200|    506|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 506]
  |  |  ------------------
  ------------------
 2006|    506|    return 0;
 2007|    506|}
descrobject.c:property_copy:
 1785|      4|{
 1786|      4|    propertyobject *pold = (propertyobject *)old;
 1787|      4|    PyObject *new, *type, *doc;
 1788|       |
 1789|      4|    type = PyObject_Type(old);
 1790|      4|    if (type == NULL)
  ------------------
  |  Branch (1790:9): [True: 0, False: 4]
  ------------------
 1791|      0|        return NULL;
 1792|       |
 1793|      4|    if (get == NULL || get == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1793:9): [True: 4, False: 0]
  |  Branch (1793:24): [True: 0, False: 0]
  ------------------
 1794|      4|        get = pold->prop_get ? pold->prop_get : Py_None;
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1794:15): [True: 4, False: 0]
  ------------------
 1795|      4|    }
 1796|      4|    if (set == NULL || set == Py_None) {
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1796:9): [True: 0, False: 4]
  |  Branch (1796:24): [True: 0, False: 4]
  ------------------
 1797|      0|        set = pold->prop_set ? pold->prop_set : Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1797:15): [True: 0, False: 0]
  ------------------
 1798|      0|    }
 1799|      4|    if (del == NULL || del == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1799:9): [True: 4, False: 0]
  |  Branch (1799:24): [True: 0, False: 0]
  ------------------
 1800|      4|        del = pold->prop_del ? pold->prop_del : Py_None;
  ------------------
  |  |  616|      8|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1800:15): [True: 0, False: 4]
  ------------------
 1801|      4|    }
 1802|      4|    if (pold->getter_doc && get != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1802:9): [True: 0, False: 4]
  |  Branch (1802:29): [True: 0, False: 0]
  ------------------
 1803|       |        /* make _init use __doc__ from getter */
 1804|      0|        doc = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1805|      0|    }
 1806|      4|    else {
 1807|      4|        doc = pold->prop_doc ? pold->prop_doc : Py_None;
  ------------------
  |  |  616|      8|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1807:15): [True: 0, False: 4]
  ------------------
 1808|      4|    }
 1809|       |
 1810|      4|    new =  PyObject_CallFunctionObjArgs(type, get, set, del, doc, NULL);
 1811|      4|    Py_DECREF(type);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1812|      4|    if (new == NULL)
  ------------------
  |  Branch (1812:9): [True: 0, False: 4]
  ------------------
 1813|      0|        return NULL;
 1814|       |
 1815|      4|    if (PyObject_TypeCheck((new), &PyProperty_Type)) {
  ------------------
  |  |  378|      4|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (378:40): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 1816|      4|        Py_XSETREF(((propertyobject *) new)->prop_name, Py_XNewRef(pold->prop_name));
  ------------------
  |  |  376|      4|    do { \
  |  |  377|      4|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      4|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      4|        *_tmp_dst_ptr = (src); \
  |  |  380|      4|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1817|      4|    }
 1818|      4|    return new;
 1819|      4|}
descrobject.c:property_setter:
 1606|      4|{
 1607|      4|    return property_copy(self, NULL, setter, NULL);
 1608|      4|}
descrobject.c:property_set_name:
 1628|     38|property_set_name(PyObject *self, PyObject *args) {
 1629|     38|    if (PyTuple_GET_SIZE(args) != 2) {
  ------------------
  |  |   27|     38|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     38|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1629:9): [True: 0, False: 38]
  ------------------
 1630|      0|        PyErr_Format(
 1631|      0|                PyExc_TypeError,
 1632|      0|                "__set_name__() takes 2 positional arguments but %zd were given",
 1633|      0|                PyTuple_GET_SIZE(args));
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1634|      0|        return NULL;
 1635|      0|    }
 1636|       |
 1637|     38|    propertyobject *prop = (propertyobject *)self;
 1638|     38|    PyObject *name = PyTuple_GET_ITEM(args, 1);
  ------------------
  |  |   29|     38|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     38|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1638:22): [True: 38, False: 0]
  ------------------
 1639|       |
 1640|     38|    Py_XSETREF(prop->prop_name, Py_XNewRef(name));
  ------------------
  |  |  376|     38|    do { \
  |  |  377|     38|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     38|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     38|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     38|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     38|        *_tmp_dst_ptr = (src); \
  |  |  380|     38|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     38|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     38|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
 1641|       |
 1642|     38|    Py_RETURN_NONE;
  ------------------
  |  |  628|     38|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     38|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1643|     38|}
descrobject.c:property_get___isabstractmethod__:
 1961|     13|{
 1962|     13|    propertyobject *prop = _propertyobject_CAST(op);
  ------------------
  |  | 1532|     13|#define _propertyobject_CAST(op)    ((propertyobject *)(op))
  ------------------
 1963|     13|    int res = _PyObject_IsAbstract(prop->prop_get);
 1964|     13|    if (res == -1) {
  ------------------
  |  Branch (1964:9): [True: 0, False: 13]
  ------------------
 1965|      0|        return NULL;
 1966|      0|    }
 1967|     13|    else if (res) {
  ------------------
  |  Branch (1967:14): [True: 4, False: 9]
  ------------------
 1968|      4|        Py_RETURN_TRUE;
  ------------------
  |  |   44|      4|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      4|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1969|      4|    }
 1970|       |
 1971|      9|    res = _PyObject_IsAbstract(prop->prop_set);
 1972|      9|    if (res == -1) {
  ------------------
  |  Branch (1972:9): [True: 0, False: 9]
  ------------------
 1973|      0|        return NULL;
 1974|      0|    }
 1975|      9|    else if (res) {
  ------------------
  |  Branch (1975:14): [True: 0, False: 9]
  ------------------
 1976|      0|        Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1977|      0|    }
 1978|       |
 1979|      9|    res = _PyObject_IsAbstract(prop->prop_del);
 1980|      9|    if (res == -1) {
  ------------------
  |  Branch (1980:9): [True: 0, False: 9]
  ------------------
 1981|      0|        return NULL;
 1982|      0|    }
 1983|      9|    else if (res) {
  ------------------
  |  Branch (1983:14): [True: 0, False: 9]
  ------------------
 1984|      0|        Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1985|      0|    }
 1986|      9|    Py_RETURN_FALSE;
  ------------------
  |  |   45|      9|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      9|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1987|      9|}
descrobject.c:property_descr_get:
 1684|    317|{
 1685|    317|    if (obj == NULL || obj == Py_None) {
  ------------------
  |  |  616|    313|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1685:9): [True: 4, False: 313]
  |  Branch (1685:24): [True: 0, False: 313]
  ------------------
 1686|      4|        return Py_NewRef(self);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1687|      4|    }
 1688|       |
 1689|    313|    propertyobject *gs = (propertyobject *)self;
 1690|    313|    if (gs->prop_get == NULL) {
  ------------------
  |  Branch (1690:9): [True: 0, False: 313]
  ------------------
 1691|      0|        PyObject *propname;
 1692|      0|        if (property_name(gs, &propname) < 0) {
  ------------------
  |  Branch (1692:13): [True: 0, False: 0]
  ------------------
 1693|      0|            return NULL;
 1694|      0|        }
 1695|      0|        PyObject *qualname = PyType_GetQualName(Py_TYPE(obj));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1696|      0|        if (propname != NULL && qualname != NULL) {
  ------------------
  |  Branch (1696:13): [True: 0, False: 0]
  |  Branch (1696:33): [True: 0, False: 0]
  ------------------
 1697|      0|            PyErr_Format(PyExc_AttributeError,
 1698|      0|                         "property %R of %R object has no getter",
 1699|      0|                         propname,
 1700|      0|                         qualname);
 1701|      0|        }
 1702|      0|        else if (qualname != NULL) {
  ------------------
  |  Branch (1702:18): [True: 0, False: 0]
  ------------------
 1703|      0|            PyErr_Format(PyExc_AttributeError,
 1704|      0|                         "property of %R object has no getter",
 1705|      0|                         qualname);
 1706|      0|        } else {
 1707|      0|            PyErr_SetString(PyExc_AttributeError,
 1708|      0|                            "property has no getter");
 1709|      0|        }
 1710|      0|        Py_XDECREF(propname);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1711|      0|        Py_XDECREF(qualname);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1712|      0|        return NULL;
 1713|      0|    }
 1714|       |
 1715|    313|    return PyObject_CallOneArg(gs->prop_get, obj);
 1716|    313|}
descrobject.c:property_descr_set:
 1720|     10|{
 1721|     10|    propertyobject *gs = (propertyobject *)self;
 1722|     10|    PyObject *func, *res;
 1723|       |
 1724|     10|    if (value == NULL) {
  ------------------
  |  Branch (1724:9): [True: 0, False: 10]
  ------------------
 1725|      0|        func = gs->prop_del;
 1726|      0|    }
 1727|     10|    else {
 1728|     10|        func = gs->prop_set;
 1729|     10|    }
 1730|       |
 1731|     10|    if (func == NULL) {
  ------------------
  |  Branch (1731:9): [True: 0, False: 10]
  ------------------
 1732|      0|        PyObject *propname;
 1733|      0|        if (property_name(gs, &propname) < 0) {
  ------------------
  |  Branch (1733:13): [True: 0, False: 0]
  ------------------
 1734|      0|            return -1;
 1735|      0|        }
 1736|      0|        PyObject *qualname = NULL;
 1737|      0|        if (obj != NULL) {
  ------------------
  |  Branch (1737:13): [True: 0, False: 0]
  ------------------
 1738|      0|            qualname = PyType_GetQualName(Py_TYPE(obj));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1739|      0|        }
 1740|      0|        if (propname != NULL && qualname != NULL) {
  ------------------
  |  Branch (1740:13): [True: 0, False: 0]
  |  Branch (1740:33): [True: 0, False: 0]
  ------------------
 1741|      0|            PyErr_Format(PyExc_AttributeError,
 1742|      0|                        value == NULL ?
  ------------------
  |  Branch (1742:25): [True: 0, False: 0]
  ------------------
 1743|      0|                        "property %R of %R object has no deleter" :
 1744|      0|                        "property %R of %R object has no setter",
 1745|      0|                        propname,
 1746|      0|                        qualname);
 1747|      0|        }
 1748|      0|        else if (qualname != NULL) {
  ------------------
  |  Branch (1748:18): [True: 0, False: 0]
  ------------------
 1749|      0|            PyErr_Format(PyExc_AttributeError,
 1750|      0|                            value == NULL ?
  ------------------
  |  Branch (1750:29): [True: 0, False: 0]
  ------------------
 1751|      0|                            "property of %R object has no deleter" :
 1752|      0|                            "property of %R object has no setter",
 1753|      0|                            qualname);
 1754|      0|        }
 1755|      0|        else {
 1756|      0|            PyErr_SetString(PyExc_AttributeError,
 1757|      0|                         value == NULL ?
  ------------------
  |  Branch (1757:26): [True: 0, False: 0]
  ------------------
 1758|      0|                         "property has no deleter" :
 1759|      0|                         "property has no setter");
 1760|      0|        }
 1761|      0|        Py_XDECREF(propname);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1762|      0|        Py_XDECREF(qualname);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1763|      0|        return -1;
 1764|      0|    }
 1765|       |
 1766|     10|    if (value == NULL) {
  ------------------
  |  Branch (1766:9): [True: 0, False: 10]
  ------------------
 1767|      0|        res = PyObject_CallOneArg(func, obj);
 1768|      0|    }
 1769|     10|    else {
 1770|     10|        EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, func);
  ------------------
  |  |   80|     10|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
 1771|     10|        PyObject *args[] = { obj, value };
 1772|     10|        res = PyObject_Vectorcall(func, args, 2, NULL);
 1773|     10|    }
 1774|       |
 1775|     10|    if (res == NULL) {
  ------------------
  |  Branch (1775:9): [True: 0, False: 10]
  ------------------
 1776|      0|        return -1;
 1777|      0|    }
 1778|       |
 1779|     10|    Py_DECREF(res);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1780|     10|    return 0;
 1781|     10|}
descrobject.c:property_init_impl:
 1862|     37|{
 1863|     37|    if (fget == Py_None)
  ------------------
  |  |  616|     37|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1863:9): [True: 0, False: 37]
  ------------------
 1864|      0|        fget = NULL;
 1865|     37|    if (fset == Py_None)
  ------------------
  |  |  616|     37|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1865:9): [True: 0, False: 37]
  ------------------
 1866|      0|        fset = NULL;
 1867|     37|    if (fdel == Py_None)
  ------------------
  |  |  616|     37|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1867:9): [True: 4, False: 33]
  ------------------
 1868|      4|        fdel = NULL;
 1869|       |
 1870|     37|    Py_XSETREF(self->prop_get, Py_XNewRef(fget));
  ------------------
  |  |  376|     37|    do { \
  |  |  377|     37|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     37|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     37|        *_tmp_dst_ptr = (src); \
  |  |  380|     37|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     37|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 1871|     37|    Py_XSETREF(self->prop_set, Py_XNewRef(fset));
  ------------------
  |  |  376|     37|    do { \
  |  |  377|     37|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     37|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     37|        *_tmp_dst_ptr = (src); \
  |  |  380|     37|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     37|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 1872|     37|    Py_XSETREF(self->prop_del, Py_XNewRef(fdel));
  ------------------
  |  |  376|     37|    do { \
  |  |  377|     37|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     37|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     37|        *_tmp_dst_ptr = (src); \
  |  |  380|     37|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     37|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 1873|     37|    Py_XSETREF(self->prop_doc, NULL);
  ------------------
  |  |  376|     37|    do { \
  |  |  377|     37|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     37|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     37|        *_tmp_dst_ptr = (src); \
  |  |  380|     37|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     37|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 1874|     37|    Py_XSETREF(self->prop_name, NULL);
  ------------------
  |  |  376|     37|    do { \
  |  |  377|     37|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     37|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     37|        *_tmp_dst_ptr = (src); \
  |  |  380|     37|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     37|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 1875|       |
 1876|     37|    self->getter_doc = 0;
 1877|     37|    PyObject *prop_doc = NULL;
 1878|       |
 1879|     37|    if (doc != NULL && doc != Py_None) {
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1879:9): [True: 4, False: 33]
  |  Branch (1879:24): [True: 0, False: 4]
  ------------------
 1880|      0|        prop_doc = Py_XNewRef(doc);
  ------------------
  |  |  551|      0|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1881|      0|    }
 1882|       |    /* if no docstring given and the getter has one, use that one */
 1883|     37|    else if (fget != NULL) {
  ------------------
  |  Branch (1883:14): [True: 37, False: 0]
  ------------------
 1884|     37|        int rc = PyObject_GetOptionalAttr(fget, &_Py_ID(__doc__), &prop_doc);
  ------------------
  |  |  936|     37|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     37|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     37|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1885|     37|        if (rc < 0) {
  ------------------
  |  Branch (1885:13): [True: 0, False: 37]
  ------------------
 1886|      0|            return rc;
 1887|      0|        }
 1888|     37|        if (prop_doc == Py_None) {
  ------------------
  |  |  616|     37|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1888:13): [True: 25, False: 12]
  ------------------
 1889|     25|            prop_doc = NULL;
 1890|     25|            Py_DECREF(Py_None);
  ------------------
  |  |  430|     25|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1891|     25|        }
 1892|     37|        if (prop_doc != NULL){
  ------------------
  |  Branch (1892:13): [True: 12, False: 25]
  ------------------
 1893|     12|            self->getter_doc = 1;
 1894|     12|        }
 1895|     37|    }
 1896|       |
 1897|       |    /* At this point `prop_doc` is either NULL or
 1898|       |       a non-None object with incremented ref counter */
 1899|       |
 1900|     37|    if (Py_IS_TYPE(self, &PyProperty_Type)) {
  ------------------
  |  |  215|     37|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 37, False: 0]
  |  |  ------------------
  ------------------
 1901|     37|        Py_XSETREF(self->prop_doc, prop_doc);
  ------------------
  |  |  376|     37|    do { \
  |  |  377|     37|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     37|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     37|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     37|        *_tmp_dst_ptr = (src); \
  |  |  380|     37|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     37|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     37|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 37]
  |  |  ------------------
  ------------------
 1902|     37|    } else {
 1903|       |        /* If this is a property subclass, put __doc__ in the dict
 1904|       |           or designated slot of the subclass instance instead, otherwise
 1905|       |           it gets shadowed by __doc__ in the class's dict. */
 1906|       |
 1907|      0|        if (prop_doc == NULL) {
  ------------------
  |  Branch (1907:13): [True: 0, False: 0]
  ------------------
 1908|      0|            prop_doc = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1909|      0|        }
 1910|      0|        int err = PyObject_SetAttr(
 1911|      0|                    (PyObject *)self, &_Py_ID(__doc__), prop_doc);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1912|      0|        Py_DECREF(prop_doc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1913|      0|        if (err < 0) {
  ------------------
  |  Branch (1913:13): [True: 0, False: 0]
  ------------------
 1914|      0|            assert(PyErr_Occurred());
  ------------------
  |  Branch (1914:13): [True: 0, False: 0]
  ------------------
 1915|      0|            if (!self->getter_doc &&
  ------------------
  |  Branch (1915:17): [True: 0, False: 0]
  ------------------
 1916|      0|                PyErr_ExceptionMatches(PyExc_AttributeError))
  ------------------
  |  Branch (1916:17): [True: 0, False: 0]
  ------------------
 1917|      0|            {
 1918|      0|                PyErr_Clear();
 1919|       |                // https://github.com/python/cpython/issues/98963#issuecomment-1574413319
 1920|       |                // Python silently dropped this doc assignment through 3.11.
 1921|       |                // We preserve that behavior for backwards compatibility.
 1922|       |                //
 1923|       |                // If we ever want to deprecate this behavior, only raise a
 1924|       |                // warning or error when proc_doc is not None so that
 1925|       |                // property without a specific doc= still works.
 1926|      0|                return 0;
 1927|      0|            } else {
 1928|      0|                return -1;
 1929|      0|            }
 1930|      0|        }
 1931|      0|    }
 1932|       |
 1933|     37|    return 0;
 1934|     37|}

_PyDict_CheckConsistency:
  699|  9.85M|{
  700|  9.85M|    ASSERT_WORLD_STOPPED_OR_DICT_LOCKED(op);
  701|       |
  702|  9.85M|#define CHECK(expr) \
  703|  9.85M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  704|       |
  705|  9.85M|    assert(op != NULL);
  ------------------
  |  Branch (705:5): [True: 9.85M, False: 0]
  ------------------
  706|  9.85M|    CHECK(PyAnyDict_Check(op));
  ------------------
  |  |  703|  9.85M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:16): [True: 9.85M, False: 3]
  |  |  |  Branch (703:16): [True: 3, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  707|  9.85M|    PyDictObject *mp = (PyDictObject *)op;
  708|       |
  709|  9.85M|    PyDictKeysObject *keys = mp->ma_keys;
  710|  9.85M|    int splitted = _PyDict_HasSplitTable(mp);
  ------------------
  |  |   56|  9.85M|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  ------------------
  711|  9.85M|    Py_ssize_t usable = USABLE_FRACTION(DK_SIZE(keys));
  ------------------
  |  |  590|  9.85M|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
  712|       |
  713|       |    // In the free-threaded build, shared keys may be concurrently modified,
  714|       |    // so use atomic loads.
  715|  9.85M|    Py_ssize_t dk_usable = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_usable);
  ------------------
  |  |  148|  9.85M|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
  716|  9.85M|    Py_ssize_t dk_nentries = FT_ATOMIC_LOAD_SSIZE_ACQUIRE(keys->dk_nentries);
  ------------------
  |  |  148|  9.85M|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
  717|       |
  718|  9.85M|    CHECK(0 <= mp->ma_used && mp->ma_used <= usable);
  ------------------
  |  |  703|  19.7M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:16): [True: 9.85M, False: 0]
  |  |  |  Branch (703:16): [True: 9.85M, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  719|  9.85M|    CHECK(0 <= dk_usable && dk_usable <= usable);
  ------------------
  |  |  703|  19.7M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:16): [True: 9.85M, False: 0]
  |  |  |  Branch (703:16): [True: 9.85M, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  720|  9.85M|    CHECK(0 <= dk_nentries && dk_nentries <= usable);
  ------------------
  |  |  703|  19.7M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:16): [True: 9.85M, False: 0]
  |  |  |  Branch (703:16): [True: 9.85M, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  721|  9.85M|    CHECK(dk_usable + dk_nentries <= usable);
  ------------------
  |  |  703|  9.85M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 9.85M]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  722|       |
  723|  9.85M|    if (!splitted) {
  ------------------
  |  Branch (723:9): [True: 9.85M, False: 2.91k]
  ------------------
  724|       |        /* combined table */
  725|  9.85M|        CHECK(keys->dk_kind != DICT_KEYS_SPLIT);
  ------------------
  |  |  703|  9.85M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 9.85M]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  726|  9.85M|        CHECK(keys->dk_refcnt == 1 || keys == Py_EMPTY_KEYS);
  ------------------
  |  |  703|  10.7M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:16): [True: 8.97M, False: 881k]
  |  |  |  Branch (703:16): [True: 881k, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 9.85M]
  |  |  ------------------
  ------------------
  727|  9.85M|    }
  728|  2.91k|    else {
  729|  2.91k|        CHECK(keys->dk_kind == DICT_KEYS_SPLIT);
  ------------------
  |  |  703|  2.91k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 2.91k]
  |  |  |  Branch (703:89): [Folded, False: 2.91k]
  |  |  ------------------
  ------------------
  730|  2.91k|        CHECK(mp->ma_used <= SHARED_KEYS_MAX_SIZE);
  ------------------
  |  |  703|  2.91k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 2.91k]
  |  |  |  Branch (703:89): [Folded, False: 2.91k]
  |  |  ------------------
  ------------------
  731|  2.91k|        if (mp->ma_values->embedded) {
  ------------------
  |  Branch (731:13): [True: 0, False: 2.91k]
  ------------------
  732|      0|            CHECK(mp->ma_values->embedded == 1);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  733|      0|            CHECK(mp->ma_values->valid == 1);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  734|      0|        }
  735|  2.91k|    }
  736|       |
  737|  9.85M|    if (check_content) {
  ------------------
  |  Branch (737:9): [True: 0, False: 9.85M]
  ------------------
  738|      0|        LOCK_KEYS_IF_SPLIT(keys, keys->dk_kind);
  739|      0|        for (Py_ssize_t i=0; i < DK_SIZE(keys); i++) {
  ------------------
  |  |  274|      0|#define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
  |  |  ------------------
  |  |  |  |  272|      0|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (739:30): [True: 0, False: 0]
  ------------------
  740|      0|            Py_ssize_t ix = dictkeys_get_index(keys, i);
  741|      0|            CHECK(DKIX_DUMMY <= ix && ix <= usable);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:16): [True: 0, False: 0]
  |  |  |  Branch (703:16): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  742|      0|        }
  743|       |
  744|      0|        if (keys->dk_kind == DICT_KEYS_GENERAL) {
  ------------------
  |  Branch (744:13): [True: 0, False: 0]
  ------------------
  745|      0|            PyDictKeyEntry *entries = DK_ENTRIES(keys);
  746|      0|            for (Py_ssize_t i=0; i < usable; i++) {
  ------------------
  |  Branch (746:34): [True: 0, False: 0]
  ------------------
  747|      0|                PyDictKeyEntry *entry = &entries[i];
  748|      0|                PyObject *key = entry->me_key;
  749|       |
  750|      0|                if (key != NULL) {
  ------------------
  |  Branch (750:21): [True: 0, False: 0]
  ------------------
  751|       |                    /* test_dict fails if PyObject_Hash() is called again */
  752|      0|                    CHECK(entry->me_hash != -1);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  753|      0|                    CHECK(entry->me_value != NULL);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  754|       |
  755|      0|                    if (PyUnicode_CheckExact(key)) {
  ------------------
  |  |  104|      0|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  756|      0|                        Py_hash_t hash = unicode_get_hash(key);
  757|      0|                        CHECK(entry->me_hash == hash);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  758|      0|                    }
  759|      0|                }
  760|      0|            }
  761|      0|        }
  762|      0|        else {
  763|      0|            PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
  764|      0|            for (Py_ssize_t i=0; i < usable; i++) {
  ------------------
  |  Branch (764:34): [True: 0, False: 0]
  ------------------
  765|      0|                PyDictUnicodeEntry *entry = &entries[i];
  766|      0|                PyObject *key = entry->me_key;
  767|       |
  768|      0|                if (key != NULL) {
  ------------------
  |  Branch (768:21): [True: 0, False: 0]
  ------------------
  769|      0|                    CHECK(PyUnicode_CheckExact(key));
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  770|      0|                    Py_hash_t hash = unicode_get_hash(key);
  771|      0|                    CHECK(hash != -1);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  772|      0|                    if (!splitted) {
  ------------------
  |  Branch (772:25): [True: 0, False: 0]
  ------------------
  773|      0|                        CHECK(entry->me_value != NULL);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  774|      0|                    }
  775|      0|                }
  776|       |
  777|      0|                if (splitted) {
  ------------------
  |  Branch (777:21): [True: 0, False: 0]
  ------------------
  778|      0|                    CHECK(entry->me_value == NULL);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  779|      0|                }
  780|      0|            }
  781|      0|        }
  782|       |
  783|      0|        if (splitted) {
  ------------------
  |  Branch (783:13): [True: 0, False: 0]
  ------------------
  784|      0|            CHECK(mp->ma_used <= SHARED_KEYS_MAX_SIZE);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  785|       |            /* splitted table */
  786|      0|            int duplicate_check = 0;
  787|      0|            for (Py_ssize_t i=0; i < mp->ma_used; i++) {
  ------------------
  |  Branch (787:34): [True: 0, False: 0]
  ------------------
  788|      0|                int index = get_index_from_order(mp, i);
  789|      0|                CHECK((duplicate_check & (1<<index)) == 0);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  790|      0|                duplicate_check |= (1<<index);
  791|      0|                CHECK(mp->ma_values->values[index] != NULL);
  ------------------
  |  |  703|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (703:14): [True: 0, False: 0]
  |  |  |  Branch (703:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  792|      0|            }
  793|      0|        }
  794|      0|        UNLOCK_KEYS_IF_SPLIT(keys, keys->dk_kind);
  795|      0|    }
  796|  9.85M|    return 1;
  797|       |
  798|  9.85M|#undef CHECK
  799|  9.85M|}
PyDict_New:
 1085|   880k|{
 1086|       |    /* We don't incref Py_EMPTY_KEYS here because it is immortal. */
 1087|   880k|    return new_dict(Py_EMPTY_KEYS, NULL, 0, 0);
  ------------------
  |  |  660|   880k|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
 1088|   880k|}
_PyDictKeys_StringLookup:
 1301|     78|{
 1302|     78|    if (!check_keys_unicode(dk, key)) {
  ------------------
  |  Branch (1302:9): [True: 0, False: 78]
  ------------------
 1303|      0|        return DKIX_ERROR;
  ------------------
  |  |  187|      0|#define DKIX_ERROR (-3)
  ------------------
 1304|      0|    }
 1305|     78|    Py_hash_t hash = hash_unicode_key(key);
 1306|     78|    return unicodekeys_lookup_unicode(dk, key, hash);
 1307|     78|}
_PyDictKeys_StringLookupAndVersion:
 1311|    366|{
 1312|    366|    if (!check_keys_unicode(dk, key)) {
  ------------------
  |  Branch (1312:9): [True: 0, False: 366]
  ------------------
 1313|      0|        return DKIX_ERROR;
  ------------------
  |  |  187|      0|#define DKIX_ERROR (-3)
  ------------------
 1314|      0|    }
 1315|    366|    Py_ssize_t ix;
 1316|    366|    Py_hash_t hash = hash_unicode_key(key);
 1317|    366|    LOCK_KEYS(dk);
 1318|    366|    ix = unicodekeys_lookup_unicode(dk, key, hash);
 1319|    366|    *version = _PyDictKeys_GetVersionForCurrentState(_PyInterpreterState_GET(), dk);
 1320|    366|    UNLOCK_KEYS(dk);
 1321|    366|    return ix;
 1322|    366|}
_PyDictKeys_StringLookupSplit:
 1329|   445k|{
 1330|   445k|    assert(dk->dk_kind == DICT_KEYS_SPLIT);
  ------------------
  |  Branch (1330:5): [True: 445k, False: 0]
  ------------------
 1331|   445k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1331:5): [True: 445k, False: 0]
  ------------------
 1332|   445k|    Py_hash_t hash = unicode_get_hash(key);
 1333|   445k|    if (hash == -1) {
  ------------------
  |  Branch (1333:9): [True: 0, False: 445k]
  ------------------
 1334|      0|        hash = PyUnicode_Type.tp_hash(key);
 1335|      0|        if (hash == -1) {
  ------------------
  |  Branch (1335:13): [True: 0, False: 0]
  ------------------
 1336|      0|            PyErr_Clear();
 1337|      0|            return DKIX_ERROR;
  ------------------
  |  |  187|      0|#define DKIX_ERROR (-3)
  ------------------
 1338|      0|        }
 1339|      0|    }
 1340|   445k|    return unicodekeys_lookup_split(dk, key, hash);
 1341|   445k|}
_Py_dict_lookup:
 1360|  13.4M|{
 1361|  13.4M|    PyDictKeysObject *dk;
 1362|  13.4M|    DictKeysKind kind;
 1363|  13.4M|    Py_ssize_t ix;
 1364|       |
 1365|  13.4M|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(mp);
 1366|  13.4M|start:
 1367|  13.4M|    dk = mp->ma_keys;
 1368|  13.4M|    kind = dk->dk_kind;
 1369|       |
 1370|  13.4M|    if (kind != DICT_KEYS_GENERAL) {
  ------------------
  |  Branch (1370:9): [True: 9.24M, False: 4.16M]
  ------------------
 1371|  9.24M|        if (PyUnicode_CheckExact(key)) {
  ------------------
  |  |  104|  9.24M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  9.24M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.24M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 9.17M, False: 75.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1372|       |#ifdef Py_GIL_DISABLED
 1373|       |            if (kind == DICT_KEYS_SPLIT) {
 1374|       |                ix = unicodekeys_lookup_split(dk, key, hash);
 1375|       |            }
 1376|       |            else {
 1377|       |                ix = unicodekeys_lookup_unicode(dk, key, hash);
 1378|       |            }
 1379|       |#else
 1380|  9.17M|            ix = unicodekeys_lookup_unicode(dk, key, hash);
 1381|  9.17M|#endif
 1382|  9.17M|        }
 1383|  75.4k|        else {
 1384|  75.4k|            INCREF_KEYS_FT(dk);
 1385|  75.4k|            LOCK_KEYS_IF_SPLIT(dk, kind);
 1386|       |
 1387|  75.4k|            ix = unicodekeys_lookup_generic(mp, dk, key, hash);
 1388|       |
 1389|  75.4k|            UNLOCK_KEYS_IF_SPLIT(dk, kind);
 1390|  75.4k|            DECREF_KEYS_FT(dk, IS_DICT_SHARED(mp));
 1391|  75.4k|            if (ix == DKIX_KEY_CHANGED) {
  ------------------
  |  |  188|  75.4k|#define DKIX_KEY_CHANGED (-4) /* Used internally */
  ------------------
  |  Branch (1391:17): [True: 0, False: 75.4k]
  ------------------
 1392|      0|                goto start;
 1393|      0|            }
 1394|  75.4k|        }
 1395|       |
 1396|  9.24M|        if (ix >= 0) {
  ------------------
  |  Branch (1396:13): [True: 4.71M, False: 4.52M]
  ------------------
 1397|  4.71M|            if (kind == DICT_KEYS_SPLIT) {
  ------------------
  |  Branch (1397:17): [True: 41.3k, False: 4.67M]
  ------------------
 1398|  41.3k|                *value_addr = mp->ma_values->values[ix];
 1399|  41.3k|            }
 1400|  4.67M|            else {
 1401|  4.67M|                *value_addr = DK_UNICODE_ENTRIES(dk)[ix].me_value;
 1402|  4.67M|            }
 1403|  4.71M|        }
 1404|  4.52M|        else {
 1405|  4.52M|            *value_addr = NULL;
 1406|  4.52M|        }
 1407|  9.24M|    }
 1408|  4.16M|    else {
 1409|  4.16M|        ix = dictkeys_generic_lookup(mp, dk, key, hash);
 1410|  4.16M|        if (ix == DKIX_KEY_CHANGED) {
  ------------------
  |  |  188|  4.16M|#define DKIX_KEY_CHANGED (-4) /* Used internally */
  ------------------
  |  Branch (1410:13): [True: 0, False: 4.16M]
  ------------------
 1411|      0|            goto start;
 1412|      0|        }
 1413|  4.16M|        if (ix >= 0) {
  ------------------
  |  Branch (1413:13): [True: 2.73M, False: 1.42M]
  ------------------
 1414|  2.73M|            *value_addr = DK_ENTRIES(dk)[ix].me_value;
 1415|  2.73M|        }
 1416|  1.42M|        else {
 1417|  1.42M|            *value_addr = NULL;
 1418|  1.42M|        }
 1419|  4.16M|    }
 1420|       |
 1421|  13.4M|    return ix;
 1422|  13.4M|}
_Py_dict_lookup_threadsafe:
 1758|   697k|{
 1759|   697k|    Py_ssize_t ix = _Py_dict_lookup(mp, key, hash, value_addr);
 1760|   697k|    Py_XNewRef(*value_addr);
  ------------------
  |  |  551|   697k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   697k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   697k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|   697k|    return ix;
 1762|   697k|}
_Py_dict_lookup_threadsafe_stackref:
 1766|   312k|{
 1767|   312k|    PyObject *val;
 1768|   312k|    Py_ssize_t ix = _Py_dict_lookup(mp, key, hash, &val);
 1769|   312k|    if (val == NULL) {
  ------------------
  |  Branch (1769:9): [True: 276k, False: 36.1k]
  ------------------
 1770|   276k|        *value_addr = PyStackRef_NULL;
 1771|   276k|    }
 1772|  36.1k|    else {
 1773|  36.1k|        *value_addr = PyStackRef_FromPyObjectNew(val);
  ------------------
  |  |  611|  36.1k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  36.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1774|  36.1k|    }
 1775|   312k|    return ix;
 1776|   312k|}
_PyDict_GetMethodStackRef:
 1784|  97.5k|{
 1785|  97.5k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1785:5): [True: 97.5k, False: 0]
  ------------------
 1786|  97.5k|    Py_hash_t hash = hash_unicode_key(key);
 1787|       |
 1788|       |#ifdef Py_GIL_DISABLED
 1789|       |    // NOTE: We can only do the fast-path lookup if we are on the owning
 1790|       |    // thread or if the dict is already marked as shared so that the load
 1791|       |    // of ma_keys is safe without a lock. We cannot call ensure_shared_on_read()
 1792|       |    // in this code path without incref'ing the dict because the dict is a
 1793|       |    // borrowed reference protected by QSBR, and acquiring the lock could lead
 1794|       |    // to a quiescent state (allowing the dict to be freed).
 1795|       |    if (_Py_IsOwnedByCurrentThread((PyObject *)mp) || IS_DICT_SHARED(mp)) {
 1796|       |        PyDictKeysObject *dk = _Py_atomic_load_ptr_acquire(&mp->ma_keys);
 1797|       |        if (dk->dk_kind == DICT_KEYS_UNICODE) {
 1798|       |            _PyStackRef ref;
 1799|       |            Py_ssize_t ix = lookup_threadsafe_unicode(dk, key, hash, &ref);
 1800|       |            if (ix >= 0) {
 1801|       |                assert(!PyStackRef_IsNull(ref));
 1802|       |                PyStackRef_XSETREF(*method, ref);
 1803|       |                return 1;
 1804|       |            }
 1805|       |            else if (ix == DKIX_EMPTY) {
 1806|       |                return 0;
 1807|       |            }
 1808|       |            assert(ix == DKIX_KEY_CHANGED);
 1809|       |        }
 1810|       |    }
 1811|       |#endif
 1812|       |
 1813|  97.5k|    PyObject *obj;
 1814|  97.5k|    Py_INCREF(mp);
  ------------------
  |  |  310|  97.5k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1815|  97.5k|    Py_ssize_t ix = _Py_dict_lookup_threadsafe(mp, key, hash, &obj);
 1816|  97.5k|    Py_DECREF(mp);
  ------------------
  |  |  430|  97.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1817|  97.5k|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|  97.5k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (1817:9): [True: 0, False: 97.5k]
  ------------------
 1818|      0|        PyStackRef_CLEAR(*method);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1819|      0|        return -1;
 1820|      0|    }
 1821|  97.5k|    else if (ix >= 0 && obj != NULL) {
  ------------------
  |  Branch (1821:14): [True: 0, False: 97.5k]
  |  Branch (1821:25): [True: 0, False: 0]
  ------------------
 1822|      0|        PyStackRef_XSETREF(*method, PyStackRef_FromPyObjectSteal(obj));
  ------------------
  |  |  855|      0|    do { \
  |  |  856|      0|        _PyStackRef _tmp_dst_ref = (dst); \
  |  |  857|      0|        (dst) = (src); \
  |  |  858|      0|        PyStackRef_XCLOSE(_tmp_dst_ref); \
  |  |  859|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (859:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1823|      0|        return 1;
 1824|      0|    }
 1825|  97.5k|    return 0;  // not found
 1826|  97.5k|}
_PyDict_HasOnlyStringKeys:
 1830|    799|{
 1831|    799|    Py_ssize_t pos = 0;
 1832|    799|    PyObject *key, *value;
 1833|    799|    assert(PyDict_Check(dict));
  ------------------
  |  Branch (1833:5): [True: 799, False: 0]
  ------------------
 1834|       |    /* Shortcut */
 1835|    799|    if (((PyDictObject *)dict)->ma_keys->dk_kind != DICT_KEYS_GENERAL)
  ------------------
  |  Branch (1835:9): [True: 799, False: 0]
  ------------------
 1836|    799|        return 1;
 1837|      0|    while (PyDict_Next(dict, &pos, &key, &value))
  ------------------
  |  Branch (1837:12): [True: 0, False: 0]
  ------------------
 1838|      0|        if (!PyUnicode_Check(key))
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1838:13): [True: 0, False: 0]
  ------------------
 1839|      0|            return 0;
 1840|      0|    return 1;
 1841|      0|}
_PyDict_EnablePerThreadRefcounting:
 1845|    174|{
 1846|    174|    assert(PyDict_Check(op));
  ------------------
  |  Branch (1846:5): [True: 174, False: 0]
  ------------------
 1847|       |#ifdef Py_GIL_DISABLED
 1848|       |    Py_ssize_t id = _PyObject_AssignUniqueId(op);
 1849|       |    if (id == _Py_INVALID_UNIQUE_ID) {
 1850|       |        return;
 1851|       |    }
 1852|       |    if ((uint64_t)id >= (uint64_t)DICT_UNIQUE_ID_MAX) {
 1853|       |        _PyObject_ReleaseUniqueId(id);
 1854|       |        return;
 1855|       |    }
 1856|       |
 1857|       |    PyDictObject *mp = (PyDictObject *)op;
 1858|       |    assert((mp->_ma_watcher_tag >> DICT_UNIQUE_ID_SHIFT) == 0);
 1859|       |    mp->_ma_watcher_tag += (uint64_t)id << DICT_UNIQUE_ID_SHIFT;
 1860|       |#endif
 1861|    174|}
_PyDict_InsertSplitValue:
 1991|  1.30k|{
 1992|  1.30k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (1992:5): [True: 1.30k, False: 0]
  ------------------
 1993|  1.30k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1993:5): [True: 1.30k, False: 0]
  ------------------
 1994|       |
 1995|  1.30k|    PyObject *old_value = mp->ma_values->values[ix];
 1996|  1.30k|    if (old_value == NULL) {
  ------------------
  |  Branch (1996:9): [True: 1.30k, False: 0]
  ------------------
 1997|  1.30k|        _PyDict_NotifyEvent(PyDict_EVENT_ADDED, mp, key, value);
 1998|  1.30k|        STORE_SPLIT_VALUE(mp, ix, Py_NewRef(value));
  ------------------
  |  |  332|  1.30k|#define STORE_SPLIT_VALUE(mp, idx, value) FT_ATOMIC_STORE_PTR_RELEASE(mp->ma_values->values[idx], value)
  |  |  ------------------
  |  |  |  |  164|  1.30k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1999|  1.30k|        _PyDictValues_AddToInsertionOrder(mp->ma_values, ix);
 2000|  1.30k|        STORE_USED(mp, mp->ma_used + 1);
  ------------------
  |  |  336|  1.30k|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|  1.30k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2001|  1.30k|    }
 2002|      0|    else {
 2003|      0|        _PyDict_NotifyEvent(PyDict_EVENT_MODIFIED, mp, key, value);
 2004|      0|        STORE_SPLIT_VALUE(mp, ix, Py_NewRef(value));
  ------------------
  |  |  332|      0|#define STORE_SPLIT_VALUE(mp, idx, value) FT_ATOMIC_STORE_PTR_RELEASE(mp->ma_values->values[idx], value)
  |  |  ------------------
  |  |  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2005|       |        // old_value should be DECREFed after GC track checking is done, if not, it could raise a segmentation fault,
 2006|       |        // when dict only holds the strong reference to value in ep->me_value.
 2007|      0|        Py_DECREF(old_value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2008|      0|    }
 2009|       |    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|  1.30k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (2009:5): [True: 1.30k, False: 0]
  ------------------
 2010|  1.30k|}
_PyDict_FromItems:
 2381|  2.38k|{
 2382|  2.38k|    bool unicode = true;
 2383|  2.38k|    PyObject *const *ks = keys;
 2384|       |
 2385|  4.65k|    for (Py_ssize_t i = 0; i < length; i++) {
  ------------------
  |  Branch (2385:28): [True: 2.31k, False: 2.34k]
  ------------------
 2386|  2.31k|        if (!PyUnicode_CheckExact(*ks)) {
  ------------------
  |  |  104|  2.31k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  2.31k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2386:13): [True: 38, False: 2.27k]
  ------------------
 2387|     38|            unicode = false;
 2388|     38|            break;
 2389|     38|        }
 2390|  2.27k|        ks += keys_offset;
 2391|  2.27k|    }
 2392|       |
 2393|  2.38k|    PyObject *dict = dict_new_presized(length, unicode);
 2394|  2.38k|    if (dict == NULL) {
  ------------------
  |  Branch (2394:9): [True: 0, False: 2.38k]
  ------------------
 2395|      0|        return NULL;
 2396|      0|    }
 2397|       |
 2398|  2.38k|    ks = keys;
 2399|  2.38k|    PyObject *const *vs = values;
 2400|       |
 2401|  4.88k|    for (Py_ssize_t i = 0; i < length; i++) {
  ------------------
  |  Branch (2401:28): [True: 2.49k, False: 2.38k]
  ------------------
 2402|  2.49k|        PyObject *key = *ks;
 2403|  2.49k|        PyObject *value = *vs;
 2404|  2.49k|        if (setitem_lock_held((PyDictObject *)dict, key, value) < 0) {
  ------------------
  |  Branch (2404:13): [True: 0, False: 2.49k]
  ------------------
 2405|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2406|      0|            return NULL;
 2407|      0|        }
 2408|  2.49k|        ks += keys_offset;
 2409|  2.49k|        vs += values_offset;
 2410|  2.49k|    }
 2411|       |
 2412|  2.38k|    return dict;
 2413|  2.38k|}
PyDict_GetItem:
 2471|    525|{
 2472|    525|    return dict_getitem(op, key,
 2473|    525|            "Exception ignored in PyDict_GetItem(); consider using "
 2474|    525|            "PyDict_GetItemRef() or PyDict_GetItemWithError()");
 2475|    525|}
_PyDict_LookupIndexAndValue:
 2500|  2.71k|{
 2501|       |    // TODO: Thread safety
 2502|  2.71k|    assert(PyDict_CheckExact((PyObject*)mp));
  ------------------
  |  Branch (2502:5): [True: 2.71k, False: 0]
  ------------------
 2503|  2.71k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (2503:5): [True: 2.71k, False: 0]
  ------------------
 2504|       |
 2505|  2.71k|    Py_hash_t hash = _PyObject_HashDictKey(key);
 2506|  2.71k|    if (hash == -1) {
  ------------------
  |  Branch (2506:9): [True: 0, False: 2.71k]
  ------------------
 2507|      0|        dict_unhashable_type((PyObject*)mp, key);
 2508|      0|        return -1;
 2509|      0|    }
 2510|       |
 2511|  2.71k|    return _Py_dict_lookup(mp, key, hash, value);
 2512|  2.71k|}
_PyDict_GetItemRef_KnownHash:
 2576|  4.78M|{
 2577|  4.78M|    PyObject *value;
 2578|       |#ifdef Py_GIL_DISABLED
 2579|       |    Py_ssize_t ix = _Py_dict_lookup_threadsafe(op, key, hash, &value);
 2580|       |#else
 2581|  4.78M|    Py_ssize_t ix = _Py_dict_lookup(op, key, hash, &value);
 2582|  4.78M|#endif
 2583|  4.78M|    assert(ix >= 0 || value == NULL);
  ------------------
  |  Branch (2583:5): [True: 4.04M, False: 735k]
  |  Branch (2583:5): [True: 735k, False: 0]
  ------------------
 2584|  4.78M|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|  4.78M|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (2584:9): [True: 0, False: 4.78M]
  ------------------
 2585|      0|        *result = NULL;
 2586|      0|        return -1;
 2587|      0|    }
 2588|  4.78M|    if (value == NULL) {
  ------------------
  |  Branch (2588:9): [True: 776k, False: 4.00M]
  ------------------
 2589|   776k|        *result = NULL;
 2590|   776k|        return 0;  // missing key
 2591|   776k|    }
 2592|       |#ifdef Py_GIL_DISABLED
 2593|       |    *result = value;
 2594|       |#else
 2595|  4.00M|    *result = Py_NewRef(value);
  ------------------
  |  |  550|  4.00M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.00M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.00M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2596|  4.00M|#endif
 2597|  4.00M|    return 1;  // key is present
 2598|  4.78M|}
PyDict_GetItemRef:
 2602|  4.78M|{
 2603|  4.78M|    if (!PyAnyDict_Check(op)) {
  ------------------
  |  |   43|  4.78M|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  4.78M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  9.56M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 4.78M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2604|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2605|      0|        *result = NULL;
 2606|      0|        return -1;
 2607|      0|    }
 2608|       |
 2609|  4.78M|    Py_hash_t hash = _PyObject_HashDictKey(key);
 2610|  4.78M|    if (hash == -1) {
  ------------------
  |  Branch (2610:9): [True: 0, False: 4.78M]
  ------------------
 2611|      0|        dict_unhashable_type(op, key);
 2612|      0|        *result = NULL;
 2613|      0|        return -1;
 2614|      0|    }
 2615|       |
 2616|  4.78M|    return _PyDict_GetItemRef_KnownHash((PyDictObject *)op, key, hash, result);
 2617|  4.78M|}
_PyDict_GetItemRef_Unicode_LockHeld:
 2621|    377|{
 2622|    377|    ASSERT_DICT_LOCKED(op);
 2623|    377|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (2623:5): [True: 377, False: 0]
  ------------------
 2624|       |
 2625|    377|    Py_hash_t hash = _PyObject_HashDictKey(key);
 2626|    377|    if (hash == -1) {
  ------------------
  |  Branch (2626:9): [True: 0, False: 377]
  ------------------
 2627|      0|        dict_unhashable_type((PyObject*)op, key);
 2628|      0|        *result = NULL;
 2629|      0|        return -1;
 2630|      0|    }
 2631|       |
 2632|    377|    PyObject *value;
 2633|    377|    Py_ssize_t ix = _Py_dict_lookup(op, key, hash, &value);
 2634|    377|    assert(ix >= 0 || value == NULL);
  ------------------
  |  Branch (2634:5): [True: 43, False: 334]
  |  Branch (2634:5): [True: 334, False: 0]
  ------------------
 2635|    377|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|    377|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (2635:9): [True: 0, False: 377]
  ------------------
 2636|      0|        *result = NULL;
 2637|      0|        return -1;
 2638|      0|    }
 2639|    377|    if (value == NULL) {
  ------------------
  |  Branch (2639:9): [True: 334, False: 43]
  ------------------
 2640|    334|        *result = NULL;
 2641|    334|        return 0;  // missing key
 2642|    334|    }
 2643|     43|    *result = Py_NewRef(value);
  ------------------
  |  |  550|     43|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2644|     43|    return 1;  // key is present
 2645|    377|}
PyDict_GetItemWithError:
 2653|  1.35M|{
 2654|  1.35M|    Py_ssize_t ix; (void)ix;
 2655|  1.35M|    Py_hash_t hash;
 2656|  1.35M|    PyDictObject*mp = (PyDictObject *)op;
 2657|  1.35M|    PyObject *value;
 2658|       |
 2659|  1.35M|    if (!PyAnyDict_Check(op)) {
  ------------------
  |  |   43|  1.35M|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  1.35M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  2.71M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 1.35M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2660|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2661|      0|        return NULL;
 2662|      0|    }
 2663|  1.35M|    hash = _PyObject_HashDictKey(key);
 2664|  1.35M|    if (hash == -1) {
  ------------------
  |  Branch (2664:9): [True: 0, False: 1.35M]
  ------------------
 2665|      0|        dict_unhashable_type(op, key);
 2666|      0|        return NULL;
 2667|      0|    }
 2668|       |
 2669|       |#ifdef Py_GIL_DISABLED
 2670|       |    ix = _Py_dict_lookup_threadsafe(mp, key, hash, &value);
 2671|       |    Py_XDECREF(value);
 2672|       |#else
 2673|  1.35M|    ix = _Py_dict_lookup(mp, key, hash, &value);
 2674|  1.35M|#endif
 2675|  1.35M|    assert(ix >= 0 || value == NULL);
  ------------------
  |  Branch (2675:5): [True: 847k, False: 510k]
  |  Branch (2675:5): [True: 510k, False: 0]
  ------------------
 2676|  1.35M|    return value;  // borrowed reference
 2677|  1.35M|}
_PyDict_LoadGlobalStackRef:
 2742|  12.9k|{
 2743|  12.9k|    Py_ssize_t ix;
 2744|  12.9k|    Py_hash_t hash;
 2745|       |
 2746|  12.9k|    hash = _PyObject_HashDictKey(key);
 2747|  12.9k|    if (hash == -1) {
  ------------------
  |  Branch (2747:9): [True: 0, False: 12.9k]
  ------------------
 2748|      0|        *res = PyStackRef_NULL;
 2749|      0|        return;
 2750|      0|    }
 2751|       |
 2752|       |    /* namespace 1: globals */
 2753|  12.9k|    ix = _Py_dict_lookup_threadsafe_stackref(globals, key, hash, res);
 2754|  12.9k|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|  12.9k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (2754:9): [True: 0, False: 12.9k]
  ------------------
 2755|      0|        return;
 2756|      0|    }
 2757|  12.9k|    if (ix != DKIX_EMPTY && !PyStackRef_IsNull(*res)) {
  ------------------
  |  |  185|  25.9k|#define DKIX_EMPTY (-1)
  ------------------
                  if (ix != DKIX_EMPTY && !PyStackRef_IsNull(*res)) {
  ------------------
  |  |  482|  6.37k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  6.37k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  6.37k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2757:9): [True: 6.37k, False: 6.57k]
  |  Branch (2757:29): [True: 6.37k, False: 0]
  ------------------
 2758|  6.37k|        return;
 2759|  6.37k|    }
 2760|       |
 2761|       |    /* namespace 2: builtins */
 2762|  6.57k|    ix = _Py_dict_lookup_threadsafe_stackref(builtins, key, hash, res);
 2763|       |    assert(ix >= 0 || PyStackRef_IsNull(*res));
  ------------------
  |  Branch (2763:5): [True: 6.57k, False: 1]
  |  Branch (2763:5): [True: 1, False: 0]
  ------------------
 2764|  6.57k|}
_PyDict_LoadBuiltinsFromGlobals:
 2768|  5.10k|{
 2769|  5.10k|    if (!PyAnyDict_Check(globals)) {
  ------------------
  |  |   43|  5.10k|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  5.10k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  10.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 5.10k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2770|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2771|      0|        return NULL;
 2772|      0|    }
 2773|       |
 2774|  5.10k|    PyDictObject *mp = (PyDictObject *)globals;
 2775|  5.10k|    PyObject *key = &_Py_ID(__builtins__);
  ------------------
  |  |  936|  5.10k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  5.10k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  5.10k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2776|  5.10k|    Py_hash_t hash = unicode_get_hash(key);
 2777|       |
 2778|       |    // Use the stackref variant to avoid reference count contention on the
 2779|       |    // builtins module in the free threading build. It's important not to
 2780|       |    // make any escaping calls between the lookup and the `PyStackRef_CLOSE()`
 2781|       |    // because the `ref` is not visible to the GC.
 2782|  5.10k|    _PyStackRef ref;
 2783|  5.10k|    Py_ssize_t ix = _Py_dict_lookup_threadsafe_stackref(mp, key, hash, &ref);
 2784|  5.10k|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|  5.10k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (2784:9): [True: 0, False: 5.10k]
  ------------------
 2785|      0|        return NULL;
 2786|      0|    }
 2787|  5.10k|    if (PyStackRef_IsNull(ref)) {
  ------------------
  |  |  482|  5.10k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  5.10k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  5.10k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 5.10k]
  |  |  ------------------
  ------------------
 2788|      0|        return Py_NewRef(PyEval_GetBuiltins());
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2789|      0|    }
 2790|  5.10k|    PyObject *builtins = PyStackRef_AsPyObjectBorrow(ref);
 2791|  5.10k|    if (PyModule_Check(builtins)) {
  ------------------
  |  |   12|  5.10k|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|  5.10k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 5.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2792|      0|        builtins = _PyModule_GetDict(builtins);
 2793|      0|        assert(builtins != NULL);
  ------------------
  |  Branch (2793:9): [True: 0, False: 0]
  ------------------
 2794|      0|    }
 2795|  5.10k|    _Py_INCREF_BUILTINS(builtins);
  ------------------
  |  |  398|  5.10k|#  define _Py_INCREF_BUILTINS Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  5.10k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2796|  5.10k|    PyStackRef_CLOSE(ref);
 2797|  5.10k|    return builtins;
 2798|  5.10k|}
_PyDict_SetItem_Take2:
 2836|  1.75M|{
 2837|  1.75M|    int res;
 2838|  1.75M|    Py_BEGIN_CRITICAL_SECTION(mp);
  ------------------
  |  |   51|  1.75M|    {
  ------------------
 2839|  1.75M|    res = setitem_take2_lock_held(mp, key, value);
 2840|  1.75M|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.75M|    }
  ------------------
 2841|  1.75M|    return res;
 2842|  1.75M|}
PyDict_SetItem:
 2862|  1.73M|{
 2863|  1.73M|    assert(key);
  ------------------
  |  Branch (2863:5): [True: 1.73M, False: 0]
  ------------------
 2864|  1.73M|    assert(value);
  ------------------
  |  Branch (2864:5): [True: 1.73M, False: 0]
  ------------------
 2865|       |
 2866|  1.73M|    if (!PyDict_Check(op)) {
  ------------------
  |  |   18|  1.73M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.73M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2866:9): [True: 0, False: 1.73M]
  ------------------
 2867|      0|        if (PyFrozenDict_Check(op)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2868|      0|            frozendict_does_not_support("assignment");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 2869|      0|        }
 2870|      0|        else {
 2871|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2872|      0|        }
 2873|      0|        return -1;
 2874|      0|    }
 2875|       |
 2876|  1.73M|    return _PyDict_SetItem_Take2((PyDictObject *)op,
 2877|  1.73M|                                 Py_NewRef(key), Py_NewRef(value));
  ------------------
  |  |  550|  1.73M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                               Py_NewRef(key), Py_NewRef(value));
  ------------------
  |  |  550|  1.73M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2878|  1.73M|}
PyDict_DelItem:
 2999|  1.51k|{
 3000|  1.51k|    assert(key);
  ------------------
  |  Branch (3000:5): [True: 1.51k, False: 0]
  ------------------
 3001|  1.51k|    Py_hash_t hash = _PyObject_HashDictKey(key);
 3002|  1.51k|    if (hash == -1) {
  ------------------
  |  Branch (3002:9): [True: 0, False: 1.51k]
  ------------------
 3003|      0|        dict_unhashable_type(op, key);
 3004|      0|        return -1;
 3005|      0|    }
 3006|       |
 3007|  1.51k|    return _PyDict_DelItem_KnownHash(op, key, hash);
 3008|  1.51k|}
_PyDict_DelItem_KnownHash_LockHeld:
 3012|  1.55k|{
 3013|  1.55k|    if (!PyDict_Check(op)) {
  ------------------
  |  |   18|  1.55k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.55k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3013:9): [True: 0, False: 1.55k]
  ------------------
 3014|      0|        if (PyFrozenDict_Check(op)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3015|      0|            frozendict_does_not_support("deletion");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 3016|      0|        }
 3017|      0|        else {
 3018|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3019|      0|        }
 3020|      0|        return -1;
 3021|      0|    }
 3022|       |
 3023|  1.55k|    Py_ssize_t ix;
 3024|  1.55k|    PyObject *old_value;
 3025|  1.55k|    PyDictObject *mp = (PyDictObject *)op;
 3026|  1.55k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (3026:5): [True: 1.55k, False: 0]
  ------------------
 3027|       |
 3028|  1.55k|    assert(key);
  ------------------
  |  Branch (3028:5): [True: 1.55k, False: 0]
  ------------------
 3029|  1.55k|    assert(hash != -1);
  ------------------
  |  Branch (3029:5): [True: 1.55k, False: 0]
  ------------------
 3030|  1.55k|    ix = _Py_dict_lookup(mp, key, hash, &old_value);
 3031|  1.55k|    if (ix == DKIX_ERROR)
  ------------------
  |  |  187|  1.55k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (3031:9): [True: 0, False: 1.55k]
  ------------------
 3032|      0|        return -1;
 3033|  1.55k|    if (ix == DKIX_EMPTY || old_value == NULL) {
  ------------------
  |  |  185|  3.10k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (3033:9): [True: 0, False: 1.55k]
  |  Branch (3033:29): [True: 0, False: 1.55k]
  ------------------
 3034|      0|        _PyErr_SetKeyError(key);
 3035|      0|        return -1;
 3036|      0|    }
 3037|       |
 3038|  1.55k|    _PyDict_NotifyEvent(PyDict_EVENT_DELETED, mp, key, NULL);
 3039|  1.55k|    delitem_common(mp, hash, ix, old_value);
 3040|  1.55k|    return 0;
 3041|  1.55k|}
_PyDict_DelItem_KnownHash:
 3045|  1.51k|{
 3046|  1.51k|    int res;
 3047|  1.51k|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|  1.51k|    {
  ------------------
 3048|  1.51k|    res = _PyDict_DelItem_KnownHash_LockHeld(op, key, hash);
 3049|  1.51k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.51k|    }
  ------------------
 3050|  1.51k|    return res;
 3051|  1.51k|}
_PyDict_DelItemIf:
 3099|    367|{
 3100|    367|    assert(PyDict_Check(op));
  ------------------
  |  Branch (3100:5): [True: 367, False: 0]
  ------------------
 3101|    367|    int res;
 3102|    367|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|    367|    {
  ------------------
 3103|    367|    res = delitemif_lock_held(op, key, predicate, arg);
 3104|    367|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    367|    }
  ------------------
 3105|    367|    return res;
 3106|    367|}
PyDict_Clear:
 3176|     20|{
 3177|     20|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|     20|    {
  ------------------
 3178|     20|    clear_lock_held(op);
 3179|     20|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     20|    }
  ------------------
 3180|     20|}
_PyDict_Next:
 3190|  2.58M|{
 3191|  2.58M|    Py_ssize_t i;
 3192|  2.58M|    PyDictObject *mp;
 3193|  2.58M|    PyObject *key, *value;
 3194|  2.58M|    Py_hash_t hash;
 3195|       |
 3196|  2.58M|    if (!PyAnyDict_Check(op))
  ------------------
  |  |   43|  2.58M|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  2.58M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  5.17M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 2.58M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3197|      0|        return 0;
 3198|       |
 3199|  2.58M|    mp = (PyDictObject *)op;
 3200|  2.58M|    i = *ppos;
 3201|  2.58M|    if (_PyDict_HasSplitTable(mp)) {
  ------------------
  |  |   56|  2.58M|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 2.58M]
  |  |  ------------------
  ------------------
 3202|      0|        assert(mp->ma_used <= SHARED_KEYS_MAX_SIZE);
  ------------------
  |  Branch (3202:9): [True: 0, False: 0]
  ------------------
 3203|      0|        if (i < 0 || i >= mp->ma_used)
  ------------------
  |  Branch (3203:13): [True: 0, False: 0]
  |  Branch (3203:22): [True: 0, False: 0]
  ------------------
 3204|      0|            return 0;
 3205|      0|        int index = get_index_from_order(mp, i);
 3206|      0|        value = mp->ma_values->values[index];
 3207|      0|        key = LOAD_SHARED_KEY(DK_UNICODE_ENTRIES(mp->ma_keys)[index].me_key);
  ------------------
  |  |  260|      0|#define LOAD_SHARED_KEY(key) key
  ------------------
 3208|      0|        hash = unicode_get_hash(key);
 3209|      0|        assert(value != NULL);
  ------------------
  |  Branch (3209:9): [True: 0, False: 0]
  ------------------
 3210|      0|    }
 3211|  2.58M|    else {
 3212|  2.58M|        Py_ssize_t n = mp->ma_keys->dk_nentries;
 3213|  2.58M|        if (i < 0 || i >= n)
  ------------------
  |  Branch (3213:13): [True: 0, False: 2.58M]
  |  Branch (3213:22): [True: 629k, False: 1.95M]
  ------------------
 3214|   629k|            return 0;
 3215|  1.95M|        if (DK_IS_UNICODE(mp->ma_keys)) {
  ------------------
  |  |  294|  1.95M|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 1.67M, False: 285k]
  |  |  ------------------
  ------------------
 3216|  1.67M|            PyDictUnicodeEntry *entry_ptr = &DK_UNICODE_ENTRIES(mp->ma_keys)[i];
 3217|  1.67M|            while (i < n && entry_ptr->me_value == NULL) {
  ------------------
  |  Branch (3217:20): [True: 1.67M, False: 43]
  |  Branch (3217:29): [True: 934, False: 1.67M]
  ------------------
 3218|    934|                entry_ptr++;
 3219|    934|                i++;
 3220|    934|            }
 3221|  1.67M|            if (i >= n)
  ------------------
  |  Branch (3221:17): [True: 43, False: 1.67M]
  ------------------
 3222|     43|                return 0;
 3223|  1.67M|            key = entry_ptr->me_key;
 3224|  1.67M|            hash = unicode_get_hash(entry_ptr->me_key);
 3225|  1.67M|            value = entry_ptr->me_value;
 3226|  1.67M|        }
 3227|   285k|        else {
 3228|   285k|            PyDictKeyEntry *entry_ptr = &DK_ENTRIES(mp->ma_keys)[i];
 3229|   285k|            while (i < n && entry_ptr->me_value == NULL) {
  ------------------
  |  Branch (3229:20): [True: 285k, False: 0]
  |  Branch (3229:29): [True: 0, False: 285k]
  ------------------
 3230|      0|                entry_ptr++;
 3231|      0|                i++;
 3232|      0|            }
 3233|   285k|            if (i >= n)
  ------------------
  |  Branch (3233:17): [True: 0, False: 285k]
  ------------------
 3234|      0|                return 0;
 3235|   285k|            key = entry_ptr->me_key;
 3236|   285k|            hash = entry_ptr->me_hash;
 3237|   285k|            value = entry_ptr->me_value;
 3238|   285k|        }
 3239|  1.95M|    }
 3240|  1.95M|    *ppos = i+1;
 3241|  1.95M|    if (pkey)
  ------------------
  |  Branch (3241:9): [True: 1.95M, False: 8]
  ------------------
 3242|  1.95M|        *pkey = key;
 3243|  1.95M|    if (pvalue)
  ------------------
  |  Branch (3243:9): [True: 1.72M, False: 231k]
  ------------------
 3244|  1.72M|        *pvalue = value;
 3245|  1.95M|    if (phash)
  ------------------
  |  Branch (3245:9): [True: 9.92k, False: 1.94M]
  ------------------
 3246|  9.92k|        *phash = hash;
 3247|  1.95M|    return 1;
 3248|  2.58M|}
PyDict_Next:
 3270|  2.28M|{
 3271|       |    return _PyDict_Next(op, ppos, pkey, pvalue, NULL);
 3272|  2.28M|}
_PyDict_Pop_KnownHash:
 3279|  16.0k|{
 3280|  16.0k|    assert(PyDict_Check(mp));
  ------------------
  |  Branch (3280:5): [True: 16.0k, False: 0]
  ------------------
 3281|  16.0k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (3281:5): [True: 16.0k, False: 0]
  ------------------
 3282|       |
 3283|  16.0k|    if (mp->ma_used == 0) {
  ------------------
  |  Branch (3283:9): [True: 0, False: 16.0k]
  ------------------
 3284|      0|        if (result) {
  ------------------
  |  Branch (3284:13): [True: 0, False: 0]
  ------------------
 3285|      0|            *result = NULL;
 3286|      0|        }
 3287|      0|        return 0;
 3288|      0|    }
 3289|       |
 3290|  16.0k|    PyObject *old_value;
 3291|  16.0k|    Py_ssize_t ix = _Py_dict_lookup(mp, key, hash, &old_value);
 3292|  16.0k|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|  16.0k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (3292:9): [True: 0, False: 16.0k]
  ------------------
 3293|      0|        if (result) {
  ------------------
  |  Branch (3293:13): [True: 0, False: 0]
  ------------------
 3294|      0|            *result = NULL;
 3295|      0|        }
 3296|      0|        return -1;
 3297|      0|    }
 3298|       |
 3299|  16.0k|    if (ix == DKIX_EMPTY || old_value == NULL) {
  ------------------
  |  |  185|  32.0k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (3299:9): [True: 318, False: 15.6k]
  |  Branch (3299:29): [True: 0, False: 15.6k]
  ------------------
 3300|    318|        if (result) {
  ------------------
  |  Branch (3300:13): [True: 87, False: 231]
  ------------------
 3301|     87|            *result = NULL;
 3302|     87|        }
 3303|    318|        return 0;
 3304|    318|    }
 3305|       |
 3306|  16.0k|    assert(old_value != NULL);
  ------------------
  |  Branch (3306:5): [True: 15.6k, False: 0]
  ------------------
 3307|  15.6k|    _PyDict_NotifyEvent(PyDict_EVENT_DELETED, mp, key, NULL);
 3308|  15.6k|    delitem_common(mp, hash, ix, Py_NewRef(old_value));
  ------------------
  |  |  550|  15.6k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  15.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3309|       |
 3310|  15.6k|    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|  15.6k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (3310:5): [True: 15.6k, False: 0]
  ------------------
 3311|  15.6k|    if (result) {
  ------------------
  |  Branch (3311:9): [True: 15.6k, False: 0]
  ------------------
 3312|  15.6k|        *result = old_value;
 3313|  15.6k|    }
 3314|      0|    else {
 3315|      0|        Py_DECREF(old_value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3316|      0|    }
 3317|  15.6k|    return 1;
 3318|  15.6k|}
PyDict_Pop:
 3358|  64.4k|{
 3359|  64.4k|    int err;
 3360|  64.4k|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|  64.4k|    {
  ------------------
 3361|  64.4k|    err = pop_lock_held(op, key, result);
 3362|  64.4k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  64.4k|    }
  ------------------
 3363|       |
 3364|  64.4k|    return err;
 3365|  64.4k|}
_PyDict_FromKeys:
 3459|     16|{
 3460|     16|    PyObject *it = NULL;       /* iter(iterable) */
 3461|     16|    PyObject *d;
 3462|     16|    int need_copy = 0;
 3463|       |
 3464|     16|    if (cls == (PyObject*)&PyFrozenDict_Type) {
  ------------------
  |  Branch (3464:9): [True: 0, False: 16]
  ------------------
 3465|       |        // gh-151722: Create a frozendict which is not tracked by the GC.
 3466|      0|        d = frozendict_new_untracked(&PyFrozenDict_Type);
 3467|      0|    }
 3468|     16|    else {
 3469|       |        // Dict subclass, or frozendict subclass which overrides
 3470|       |        // the constructor.
 3471|     16|        d = _PyObject_CallNoArgs(cls);
 3472|     16|    }
 3473|     16|    if (d == NULL) {
  ------------------
  |  Branch (3473:9): [True: 0, False: 16]
  ------------------
 3474|      0|        return NULL;
 3475|      0|    }
 3476|       |
 3477|       |    // gh-151722: If cls constructor returns a frozendict which is tracked by
 3478|       |    // the GC, create a frozendict copy which is not tracked by the GC.
 3479|       |    //
 3480|       |    // At the function exit, return cls(fd) where fd is a frozendict.
 3481|       |    //
 3482|       |    // Untracking the frozendict requires tracking again the frozendict on
 3483|       |    // error which is more complicated. It's easier to work on a copy.
 3484|     16|    if (PyFrozenDict_Check(d) && _PyObject_GC_IS_TRACKED(d)) {
  ------------------
  |  |   37|     16|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|     32|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyFrozenDict_Check(d) && _PyObject_GC_IS_TRACKED(d)) {
  ------------------
  |  |   81|      0|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3485|      0|        need_copy = 1;
 3486|       |
 3487|      0|        PyObject *copy = frozendict_new_untracked(&PyFrozenDict_Type);
 3488|      0|        if (copy == NULL) {
  ------------------
  |  Branch (3488:13): [True: 0, False: 0]
  ------------------
 3489|      0|            goto Fail;
 3490|      0|        }
 3491|      0|        if (dict_merge(copy, d, 1, NULL) < 0) {
  ------------------
  |  Branch (3491:13): [True: 0, False: 0]
  ------------------
 3492|      0|            Py_DECREF(copy);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3493|      0|            goto Fail;
 3494|      0|        }
 3495|      0|        Py_SETREF(d, copy);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3496|      0|    }
 3497|     16|    if (PyFrozenDict_Check(d)) {
  ------------------
  |  |   37|     16|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|     16|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3498|      0|        assert(can_modify_dict((PyDictObject*)d));
  ------------------
  |  Branch (3498:9): [True: 0, False: 0]
  ------------------
 3499|      0|    }
 3500|       |
 3501|     16|    if (PyDict_CheckExact(d)) {
  ------------------
  |  |   19|     16|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|     16|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 16, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3502|     16|        if (PyDict_CheckExact(iterable)) {
  ------------------
  |  |   19|     16|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|     16|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3503|      0|            PyDictObject *mp = (PyDictObject *)d;
 3504|       |
 3505|      0|            Py_BEGIN_CRITICAL_SECTION2(d, iterable);
  ------------------
  |  |   57|      0|    {
  ------------------
 3506|      0|            d = (PyObject *)dict_dict_fromkeys(mp, iterable, value);
 3507|      0|            Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      0|    }
  ------------------
 3508|      0|            goto Done;
 3509|      0|        }
 3510|     16|        else if (PyFrozenDict_CheckExact(iterable)) {
  ------------------
  |  |   38|     16|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  215|     16|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3511|      0|            PyDictObject *mp = (PyDictObject *)d;
 3512|       |
 3513|      0|            Py_BEGIN_CRITICAL_SECTION(d);
  ------------------
  |  |   51|      0|    {
  ------------------
 3514|      0|            d = (PyObject *)dict_dict_fromkeys(mp, iterable, value);
 3515|      0|            Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 3516|      0|            goto Done;
 3517|      0|        }
 3518|     16|        else if (PyAnySet_CheckExact(iterable)) {
  ------------------
  |  |   29|     16|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  215|     32|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  215|     16|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3519|      0|            PyDictObject *mp = (PyDictObject *)d;
 3520|       |
 3521|      0|            Py_BEGIN_CRITICAL_SECTION2(d, iterable);
  ------------------
  |  |   57|      0|    {
  ------------------
 3522|      0|            d = (PyObject *)dict_set_fromkeys(mp, iterable, value);
 3523|      0|            Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      0|    }
  ------------------
 3524|      0|            goto Done;
 3525|      0|        }
 3526|     16|    }
 3527|      0|    else if (PyFrozenDict_CheckExact(d)) {
  ------------------
  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3528|      0|        if (PyDict_CheckExact(iterable)) {
  ------------------
  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3529|      0|            PyDictObject *mp = (PyDictObject *)d;
 3530|       |
 3531|      0|            Py_BEGIN_CRITICAL_SECTION(iterable);
  ------------------
  |  |   51|      0|    {
  ------------------
 3532|      0|            d = (PyObject *)dict_dict_fromkeys(mp, iterable, value);
 3533|      0|            Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 3534|      0|            goto Done;
 3535|      0|        }
 3536|      0|        else if (PyFrozenDict_CheckExact(iterable)) {
  ------------------
  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3537|      0|            PyDictObject *mp = (PyDictObject *)d;
 3538|      0|            d = (PyObject *)dict_dict_fromkeys(mp, iterable, value);
 3539|      0|            goto Done;
 3540|      0|        }
 3541|      0|        else if (PyAnySet_CheckExact(iterable)) {
  ------------------
  |  |   29|      0|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3542|      0|            PyDictObject *mp = (PyDictObject *)d;
 3543|       |
 3544|      0|            Py_BEGIN_CRITICAL_SECTION(iterable);
  ------------------
  |  |   51|      0|    {
  ------------------
 3545|      0|            d = (PyObject *)dict_set_fromkeys(mp, iterable, value);
 3546|      0|            Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 3547|      0|            goto Done;
 3548|      0|        }
 3549|      0|    }
 3550|       |
 3551|     16|    it = PyObject_GetIter(iterable);
 3552|     16|    if (it == NULL){
  ------------------
  |  Branch (3552:9): [True: 0, False: 16]
  ------------------
 3553|      0|        goto Fail;
 3554|      0|    }
 3555|       |
 3556|     16|    if (PyDict_CheckExact(d)) {
  ------------------
  |  |   19|     16|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|     16|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 16, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3557|     16|        int status = 0;
 3558|       |
 3559|     16|        Py_BEGIN_CRITICAL_SECTION(d);
  ------------------
  |  |   51|     16|    {
  ------------------
 3560|     71|        while (1) {
  ------------------
  |  Branch (3560:16): [True: 71, Folded]
  ------------------
 3561|     71|            PyObject *key;
 3562|     71|            status = PyIter_NextItem(it, &key);
 3563|     71|            if (status <= 0) {
  ------------------
  |  Branch (3563:17): [True: 16, False: 55]
  ------------------
 3564|     16|                break;
 3565|     16|            }
 3566|       |
 3567|     55|            status = setitem_lock_held((PyDictObject *)d, key, value);
 3568|     55|            Py_DECREF(key);
  ------------------
  |  |  430|     55|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3569|     55|            if (status < 0) {
  ------------------
  |  Branch (3569:17): [True: 0, False: 55]
  ------------------
 3570|      0|                break;
 3571|      0|            }
 3572|     55|        }
 3573|     16|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     16|    }
  ------------------
 3574|       |
 3575|     16|        if (status < 0) {
  ------------------
  |  Branch (3575:13): [True: 0, False: 16]
  ------------------
 3576|      0|            goto Fail;
 3577|      0|        }
 3578|     16|    }
 3579|      0|    else if (PyFrozenDict_Check(d)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3580|      0|        while (1) {
  ------------------
  |  Branch (3580:16): [True: 0, Folded]
  ------------------
 3581|      0|            PyObject *key;
 3582|      0|            int status = PyIter_NextItem(it, &key);
 3583|      0|            if (status < 0) {
  ------------------
  |  Branch (3583:17): [True: 0, False: 0]
  ------------------
 3584|      0|                goto Fail;
 3585|      0|            }
 3586|      0|            if (status == 0) {
  ------------------
  |  Branch (3586:17): [True: 0, False: 0]
  ------------------
 3587|      0|                break;
 3588|      0|            }
 3589|       |
 3590|       |            // setitem_take2_lock_held consumes a reference to key
 3591|      0|            status = setitem_take2_lock_held((PyDictObject *)d,
 3592|      0|                                             key, Py_NewRef(value));
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3593|      0|            if (status < 0) {
  ------------------
  |  Branch (3593:17): [True: 0, False: 0]
  ------------------
 3594|      0|                goto Fail;
 3595|      0|            }
 3596|      0|        }
 3597|      0|    }
 3598|      0|    else {
 3599|      0|        while (1) {
  ------------------
  |  Branch (3599:16): [True: 0, Folded]
  ------------------
 3600|      0|            PyObject *key;
 3601|      0|            int status = PyIter_NextItem(it, &key);
 3602|      0|            if (status < 0) {
  ------------------
  |  Branch (3602:17): [True: 0, False: 0]
  ------------------
 3603|      0|                goto Fail;
 3604|      0|            }
 3605|      0|            if (status == 0) {
  ------------------
  |  Branch (3605:17): [True: 0, False: 0]
  ------------------
 3606|      0|                break;
 3607|      0|            }
 3608|       |
 3609|      0|            status = PyObject_SetItem(d, key, value);
 3610|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3611|      0|            if (status < 0) {
  ------------------
  |  Branch (3611:17): [True: 0, False: 0]
  ------------------
 3612|      0|                goto Fail;
 3613|      0|            }
 3614|      0|        }
 3615|       |
 3616|      0|    }
 3617|       |
 3618|     16|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (3618:5): [True: 16, False: 0]
  ------------------
 3619|     16|    Py_DECREF(it);
  ------------------
  |  |  430|     16|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3620|     16|    goto Done;
 3621|       |
 3622|      0|Fail:
 3623|      0|    assert(PyErr_Occurred());
  ------------------
  |  Branch (3623:5): [True: 0, False: 0]
  ------------------
 3624|      0|    Py_XDECREF(it);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3625|      0|    Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3626|      0|    return NULL;
 3627|       |
 3628|     16|Done:
 3629|     16|    if (d == NULL) {
  ------------------
  |  Branch (3629:9): [True: 0, False: 16]
  ------------------
 3630|      0|        return NULL;
 3631|      0|    }
 3632|       |
 3633|     16|    if (need_copy) {
  ------------------
  |  Branch (3633:9): [True: 0, False: 16]
  ------------------
 3634|      0|        PyObject *copy = _PyObject_CallOneArg(cls, d);
  ------------------
  |  |   47|      0|#define _PyObject_CallOneArg PyObject_CallOneArg
  ------------------
 3635|      0|        Py_SETREF(d, copy);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3636|      0|    }
 3637|     16|    else if (!_PyObject_GC_IS_TRACKED(d)) {
  ------------------
  |  |   81|     16|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (3637:14): [True: 0, False: 16]
  ------------------
 3638|      0|        _PyObject_GC_TRACK(d);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3639|      0|    }
 3640|     16|    return d;
 3641|     16|}
_PyDict_SubscriptKnownHash:
 3798|  3.65k|{
 3799|  3.65k|    PyDictObject *mp = (PyDictObject *)self;
 3800|  3.65k|    Py_ssize_t ix;
 3801|  3.65k|    PyObject *value;
 3802|       |
 3803|  3.65k|    ix = _Py_dict_lookup_threadsafe(mp, key, hash, &value);
 3804|  3.65k|    if (ix == DKIX_ERROR)
  ------------------
  |  |  187|  3.65k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (3804:9): [True: 0, False: 3.65k]
  ------------------
 3805|      0|        return NULL;
 3806|  3.65k|    if (ix == DKIX_EMPTY || value == NULL) {
  ------------------
  |  |  185|  7.31k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (3806:9): [True: 750, False: 2.90k]
  |  Branch (3806:29): [True: 0, False: 2.90k]
  ------------------
 3807|    750|        if (!PyAnyDict_CheckExact(mp)) {
  ------------------
  |  |   41|    750|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|    750|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  1.50k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    750|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    750|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 729, False: 21]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|     21|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     21|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 21]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3808|       |            /* Look up __missing__ method if we're a subclass. */
 3809|     21|            PyObject *missing, *res;
 3810|     21|            missing = _PyObject_LookupSpecial(
 3811|     21|                    (PyObject *)mp, &_Py_ID(__missing__));
  ------------------
  |  |  936|     21|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     21|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     21|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3812|     21|            if (missing != NULL) {
  ------------------
  |  Branch (3812:17): [True: 0, False: 21]
  ------------------
 3813|      0|                res = PyObject_CallOneArg(missing, key);
 3814|      0|                Py_DECREF(missing);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3815|      0|                return res;
 3816|      0|            }
 3817|     21|            else if (PyErr_Occurred())
  ------------------
  |  Branch (3817:22): [True: 0, False: 21]
  ------------------
 3818|      0|                return NULL;
 3819|     21|        }
 3820|    750|        _PyErr_SetKeyError(key);
 3821|    750|        return NULL;
 3822|    750|    }
 3823|  2.90k|    return value;
 3824|  3.65k|}
_PyDict_Subscript:
 3828|  3.65k|{
 3829|  3.65k|    Py_hash_t hash = _PyObject_HashDictKey(key);
 3830|  3.65k|    if (hash == -1) {
  ------------------
  |  Branch (3830:9): [True: 0, False: 3.65k]
  ------------------
 3831|      0|        dict_unhashable_type(self, key);
 3832|      0|        return NULL;
 3833|      0|    }
 3834|  3.65k|    return _PyDict_SubscriptKnownHash(self, key, hash);
 3835|  3.65k|}
_PyDict_StoreSubscript:
 3839|    586|{
 3840|    586|    if (w == NULL)
  ------------------
  |  Branch (3840:9): [True: 378, False: 208]
  ------------------
 3841|    378|        return PyDict_DelItem(mp, v);
 3842|    208|    else
 3843|    208|        return PyDict_SetItem(mp, v, w);
 3844|    586|}
PyDict_Keys:
 3892|  53.3k|{
 3893|  53.3k|    PyObject *res;
 3894|  53.3k|    Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|  53.3k|    {
  ------------------
 3895|  53.3k|    res = keys_lock_held(dict);
 3896|  53.3k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  53.3k|    }
  ------------------
 3897|       |
 3898|  53.3k|    return res;
 3899|  53.3k|}
PyDict_Update:
 4420|    510|{
 4421|       |    return dict_merge_api(a, b, 1, NULL);
 4422|    510|}
_PyDict_MergeUniq:
 4433|    703|{
 4434|    703|    return dict_merge_api(a, b, 2, dupkey);
 4435|    703|}
PyDict_Copy:
 4589|    778|{
 4590|    778|    if (o == NULL || !PyDict_Check(o)) {
  ------------------
  |  |   18|    778|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    778|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4590:9): [True: 0, False: 778]
  |  Branch (4590:22): [True: 0, False: 778]
  ------------------
 4591|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 4592|      0|        return NULL;
 4593|      0|    }
 4594|       |
 4595|    778|    PyObject *res;
 4596|    778|    Py_BEGIN_CRITICAL_SECTION(o);
  ------------------
  |  |   51|    778|    {
  ------------------
 4597|    778|    res = copy_lock_held_untracked(o, 0);
 4598|    778|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    778|    }
  ------------------
 4599|    778|    if (res != NULL) {
  ------------------
  |  Branch (4599:9): [True: 778, False: 0]
  ------------------
 4600|    778|        _PyObject_GC_TRACK(res);
  ------------------
  |  |  505|    778|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    778|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    778|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4601|    778|    }
 4602|    778|    return res;
 4603|    778|}
_PyDict_CopyAsDict:
 4628|    771|{
 4629|    771|    assert(PyAnyDict_Check(o));
  ------------------
  |  Branch (4629:5): [True: 771, False: 0]
  |  Branch (4629:5): [True: 0, False: 0]
  ------------------
 4630|       |
 4631|    771|    PyObject *res;
 4632|    771|    if (PyFrozenDict_Check(o)) {
  ------------------
  |  |   37|    771|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|    771|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 771]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4633|      0|        res = copy_lock_held_untracked(o, 0);
 4634|      0|    }
 4635|    771|    else {
 4636|    771|        Py_BEGIN_CRITICAL_SECTION(o);
  ------------------
  |  |   51|    771|    {
  ------------------
 4637|    771|        res = copy_lock_held_untracked(o, 0);
 4638|    771|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    771|    }
  ------------------
 4639|    771|    }
 4640|    771|    if (res != NULL) {
  ------------------
  |  Branch (4640:9): [True: 771, False: 0]
  ------------------
 4641|    771|        _PyObject_GC_TRACK(res);
  ------------------
  |  |  505|    771|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4642|    771|    }
 4643|    771|    return res;
 4644|    771|}
PyDict_Size:
 4648|      8|{
 4649|      8|    if (mp == NULL || !PyAnyDict_Check(mp)) {
  ------------------
  |  |   43|      8|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|      8|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|     16|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4649:9): [True: 0, False: 8]
  ------------------
 4650|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 4651|      0|        return -1;
 4652|      0|    }
 4653|      8|    return GET_USED((PyDictObject *)mp);
  ------------------
  |  |  328|      8|#define GET_USED(ep) FT_ATOMIC_LOAD_SSIZE_RELAXED((ep)->ma_used)
  |  |  ------------------
  |  |  |  |  149|      8|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  |  |  ------------------
  ------------------
 4654|      8|}
PyDict_SetDefaultRef:
 4915|  2.31M|{
 4916|  2.31M|    int res;
 4917|  2.31M|    Py_BEGIN_CRITICAL_SECTION(d);
  ------------------
  |  |   51|  2.31M|    {
  ------------------
 4918|  2.31M|    res = dict_setdefault_ref_lock_held(d, key, default_value, result, 1);
 4919|  2.31M|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  2.31M|    }
  ------------------
 4920|  2.31M|    return res;
 4921|  2.31M|}
_PyDict_KeysSize:
 5167|  1.58k|{
 5168|  1.58k|    size_t es = (keys->dk_kind == DICT_KEYS_GENERAL
  ------------------
  |  Branch (5168:18): [True: 3, False: 1.57k]
  ------------------
 5169|  1.58k|                 ? sizeof(PyDictKeyEntry) : sizeof(PyDictUnicodeEntry));
 5170|  1.58k|    size_t size = sizeof(PyDictKeysObject);
 5171|  1.58k|    size += (size_t)1 << keys->dk_log2_index_bytes;
 5172|  1.58k|    size += USABLE_FRACTION((size_t)DK_SIZE(keys)) * es;
  ------------------
  |  |  590|  1.58k|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
 5173|  1.58k|    return size;
 5174|  1.58k|}
PyDict_Contains:
 5288|   340k|{
 5289|   340k|    if (!PyAnyDict_Check(op)) {
  ------------------
  |  |   43|   340k|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|   340k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   681k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 340k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5290|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 5291|      0|        return -1;
 5292|      0|    }
 5293|       |
 5294|   340k|    return dict_contains(op, key);
 5295|   340k|}
PyDict_ContainsString:
 5299|    118|{
 5300|    118|    PyObject *key_obj = PyUnicode_FromString(key);
 5301|    118|    if (key_obj == NULL) {
  ------------------
  |  Branch (5301:9): [True: 0, False: 118]
  ------------------
 5302|      0|        return -1;
 5303|      0|    }
 5304|    118|    int res = PyDict_Contains(op, key_obj);
 5305|    118|    Py_DECREF(key_obj);
  ------------------
  |  |  430|    118|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    118|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    118|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5306|    118|    return res;
 5307|    118|}
_PyDict_Contains_KnownHash:
 5312|   341k|{
 5313|   341k|    PyDictObject *mp = _PyAnyDict_CAST(op);
  ------------------
  |  |  326|   341k|    (assert(PyAnyDict_Check(op)), _Py_CAST(PyDictObject*, op))
  |  |  ------------------
  |  |  |  |   37|   341k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5313:24): [True: 341k, False: 0]
  |  Branch (5313:24): [True: 0, False: 0]
  ------------------
 5314|      0|    PyObject *value;
 5315|   341k|    Py_ssize_t ix;
 5316|       |
 5317|       |#ifdef Py_GIL_DISABLED
 5318|       |    ix = _Py_dict_lookup_threadsafe(mp, key, hash, &value);
 5319|       |#else
 5320|   341k|    ix = _Py_dict_lookup(mp, key, hash, &value);
 5321|   341k|#endif
 5322|   341k|    if (ix == DKIX_ERROR)
  ------------------
  |  |  187|   341k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (5322:9): [True: 0, False: 341k]
  ------------------
 5323|      0|        return -1;
 5324|   341k|    if (ix != DKIX_EMPTY && value != NULL) {
  ------------------
  |  |  185|   682k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (5324:9): [True: 130k, False: 210k]
  |  Branch (5324:29): [True: 130k, False: 0]
  ------------------
 5325|       |#ifdef Py_GIL_DISABLED
 5326|       |        Py_DECREF(value);
 5327|       |#endif
 5328|   130k|        return 1;
 5329|   130k|    }
 5330|   210k|    return 0;
 5331|   341k|}
PyDict_GetItemStringRef:
 5564|  3.35k|{
 5565|  3.35k|    PyObject *key_obj = PyUnicode_FromString(key);
 5566|  3.35k|    if (key_obj == NULL) {
  ------------------
  |  Branch (5566:9): [True: 0, False: 3.35k]
  ------------------
 5567|      0|        *result = NULL;
 5568|      0|        return -1;
 5569|      0|    }
 5570|  3.35k|    int res = PyDict_GetItemRef(v, key_obj, result);
 5571|  3.35k|    Py_DECREF(key_obj);
  ------------------
  |  |  430|  3.35k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5572|  3.35k|    return res;
 5573|  3.35k|}
PyDict_SetItemString:
 5577|  1.91k|{
 5578|  1.91k|    PyObject *kv;
 5579|  1.91k|    int err;
 5580|  1.91k|    kv = PyUnicode_FromString(key);
 5581|  1.91k|    if (kv == NULL)
  ------------------
  |  Branch (5581:9): [True: 0, False: 1.91k]
  ------------------
 5582|      0|        return -1;
 5583|  1.91k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 5584|  1.91k|    _PyUnicode_InternImmortal(interp, &kv); /* XXX Should we really? */
 5585|  1.91k|    err = PyDict_SetItem(v, kv, item);
 5586|  1.91k|    Py_DECREF(kv);
  ------------------
  |  |  430|  1.91k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5587|  1.91k|    return err;
 5588|  1.91k|}
_PyDictView_New:
 6469|    430|{
 6470|    430|    _PyDictViewObject *dv;
 6471|    430|    if (dict == NULL) {
  ------------------
  |  Branch (6471:9): [True: 0, False: 430]
  ------------------
 6472|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 6473|      0|        return NULL;
 6474|      0|    }
 6475|    430|    if (!PyAnyDict_Check(dict)) {
  ------------------
  |  |   43|    430|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|    430|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    860|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 430, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6476|       |        /* XXX Get rid of this restriction later */
 6477|      0|        PyErr_Format(PyExc_TypeError,
 6478|      0|                     "%s() requires a dict argument, not '%s'",
 6479|      0|                     type->tp_name, Py_TYPE(dict)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6480|      0|        return NULL;
 6481|      0|    }
 6482|    430|    dv = PyObject_GC_New(_PyDictViewObject, type);
  ------------------
  |  |  181|    430|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    430|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 6483|    430|    if (dv == NULL)
  ------------------
  |  Branch (6483:9): [True: 0, False: 430]
  ------------------
 6484|      0|        return NULL;
 6485|    430|    dv->dv_dict = (PyDictObject *)Py_NewRef(dict);
  ------------------
  |  |  550|    430|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    430|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    430|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6486|    430|    _PyObject_GC_TRACK(dv);
  ------------------
  |  |  505|    430|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    430|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    430|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6487|    430|    return (PyObject *)dv;
 6488|    430|}
_PyDictView_Intersect:
 6696|      1|{
 6697|      1|    PyObject *result;
 6698|      1|    PyObject *it;
 6699|      1|    PyObject *key;
 6700|      1|    Py_ssize_t len_self;
 6701|      1|    int rv;
 6702|      1|    objobjproc dict_contains;
 6703|       |
 6704|       |    /* Python interpreter swaps parameters when dict view
 6705|       |       is on right side of & */
 6706|      1|    if (!PyDictViewSet_Check(self)) {
  ------------------
  |  |   98|      1|    (PyDictKeys_Check(op) || PyDictItems_Check(op))
  |  |  ------------------
  |  |  |  |   93|      1|#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      2|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDictKeys_Check(op) || PyDictItems_Check(op))
  |  |  ------------------
  |  |  |  |   95|      0|#define PyDictItems_Check(op) PyObject_TypeCheck((op), &PyDictItems_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6707|      0|        PyObject *tmp = other;
 6708|      0|        other = self;
 6709|      0|        self = tmp;
 6710|      0|    }
 6711|       |
 6712|      1|    len_self = dictview_len(self);
 6713|       |
 6714|       |    /* if other is a set and self is smaller than other,
 6715|       |       reuse set intersection logic */
 6716|      1|    if (PySet_CheckExact(other) && len_self <= PyObject_Size(other)) {
  ------------------
  |  |   35|      1|#define PySet_CheckExact(op) Py_IS_TYPE(op, &PySet_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6716:36): [True: 0, False: 0]
  ------------------
 6717|      0|        return PyObject_CallMethodObjArgs(
 6718|      0|                other, &_Py_ID(intersection), self, NULL);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6719|      0|    }
 6720|       |
 6721|       |    /* if other is another dict view, and it is bigger than self,
 6722|       |       swap them */
 6723|      1|    if (PyDictViewSet_Check(other)) {
  ------------------
  |  |   98|      1|    (PyDictKeys_Check(op) || PyDictItems_Check(op))
  |  |  ------------------
  |  |  |  |   93|      1|#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      2|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDictKeys_Check(op) || PyDictItems_Check(op))
  |  |  ------------------
  |  |  |  |   95|      1|#define PyDictItems_Check(op) PyObject_TypeCheck((op), &PyDictItems_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      1|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6724|      0|        Py_ssize_t len_other = dictview_len(other);
 6725|      0|        if (len_other > len_self) {
  ------------------
  |  Branch (6725:13): [True: 0, False: 0]
  ------------------
 6726|      0|            PyObject *tmp = other;
 6727|      0|            other = self;
 6728|      0|            self = tmp;
 6729|      0|        }
 6730|      0|    }
 6731|       |
 6732|       |    /* at this point, two things should be true
 6733|       |       1. self is a dictview
 6734|       |       2. if other is a dictview then it is smaller than self */
 6735|      1|    result = PySet_New(NULL);
 6736|      1|    if (result == NULL)
  ------------------
  |  Branch (6736:9): [True: 0, False: 1]
  ------------------
 6737|      0|        return NULL;
 6738|       |
 6739|      1|    it = PyObject_GetIter(other);
 6740|      1|    if (it == NULL) {
  ------------------
  |  Branch (6740:9): [True: 0, False: 1]
  ------------------
 6741|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6742|      0|        return NULL;
 6743|      0|    }
 6744|       |
 6745|      1|    if (PyDictKeys_Check(self)) {
  ------------------
  |  |   93|      1|#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type)
  |  |  ------------------
  |  |  |  |  378|      1|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6746|      1|        dict_contains = dictkeys_contains;
 6747|      1|    }
 6748|       |    /* else PyDictItems_Check(self) */
 6749|      0|    else {
 6750|      0|        dict_contains = dictitems_contains;
 6751|      0|    }
 6752|       |
 6753|     56|    while ((key = PyIter_Next(it)) != NULL) {
  ------------------
  |  Branch (6753:12): [True: 55, False: 1]
  ------------------
 6754|     55|        rv = dict_contains(self, key);
 6755|     55|        if (rv < 0) {
  ------------------
  |  Branch (6755:13): [True: 0, False: 55]
  ------------------
 6756|      0|            goto error;
 6757|      0|        }
 6758|     55|        if (rv) {
  ------------------
  |  Branch (6758:13): [True: 55, False: 0]
  ------------------
 6759|     55|            if (PySet_Add(result, key)) {
  ------------------
  |  Branch (6759:17): [True: 0, False: 55]
  ------------------
 6760|      0|                goto error;
 6761|      0|            }
 6762|     55|        }
 6763|     55|        Py_DECREF(key);
  ------------------
  |  |  430|     55|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6764|     55|    }
 6765|      1|    Py_DECREF(it);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6766|      1|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (6766:9): [True: 0, False: 1]
  ------------------
 6767|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6768|      0|        return NULL;
 6769|      0|    }
 6770|      1|    return result;
 6771|       |
 6772|      0|error:
 6773|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6774|      0|    Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6775|      0|    Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6776|       |    return NULL;
 6777|      1|}
_PyDict_NewKeysForClass:
 7267|    525|{
 7268|    525|    int log2_bytes = get_log2_bytes(NEXT_LOG2_SHARED_KEYS_MAX_SIZE);
  ------------------
  |  |  256|    525|#define NEXT_LOG2_SHARED_KEYS_MAX_SIZE 6
  ------------------
 7269|    525|    Py_ssize_t usable = USABLE_FRACTION((size_t)1<<NEXT_LOG2_SHARED_KEYS_MAX_SIZE);
  ------------------
  |  |  590|    525|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
 7270|       |
 7271|    525|    struct _instancekeysobject *shared_keys =
 7272|    525|                          PyMem_Malloc(sizeof(struct _instancekeysobject)
 7273|    525|                          + ((size_t)1 << log2_bytes)
 7274|    525|                          + sizeof(PyDictUnicodeEntry) * usable);
 7275|    525|    if (shared_keys == NULL) {
  ------------------
  |  Branch (7275:9): [True: 0, False: 525]
  ------------------
 7276|      0|        PyErr_Clear();
 7277|      0|        return NULL;
 7278|      0|    }
 7279|       |
 7280|    525|    shared_keys->dsk_owning_type = (PyTypeObject *)cls;
 7281|    525|    PyDictKeysObject* keys = &shared_keys->dsk_keys;
 7282|    525|    init_keys_object(keys, NEXT_LOG2_SHARED_KEYS_MAX_SIZE, log2_bytes, DICT_KEYS_SPLIT,
  ------------------
  |  |  256|    525|#define NEXT_LOG2_SHARED_KEYS_MAX_SIZE 6
  ------------------
 7283|    525|                     SHARED_KEYS_MAX_SIZE, sizeof(PyDictUnicodeEntry));
  ------------------
  |  |  255|    525|#define SHARED_KEYS_MAX_SIZE 30
  ------------------
 7284|    525|    assert(keys->dk_nentries == 0);
  ------------------
  |  Branch (7284:5): [True: 525, False: 0]
  ------------------
 7285|       |    /* Set to max size+1 as it will shrink by one before each new object */
 7286|    525|    if (cls->ht_type.tp_dict) {
  ------------------
  |  Branch (7286:9): [True: 525, False: 0]
  ------------------
 7287|    525|        PyObject *attrs = PyDict_GetItem(cls->ht_type.tp_dict, &_Py_ID(__static_attributes__));
  ------------------
  |  |  936|    525|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    525|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    525|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7288|    525|        if (attrs != NULL && PyTuple_Check(attrs)) {
  ------------------
  |  |   27|    519|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    519|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 519, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7288:13): [True: 519, False: 6]
  ------------------
 7289|    831|            for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(attrs); i++) {
  ------------------
  |  |   27|    831|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    831|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    831|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7289:36): [True: 312, False: 519]
  ------------------
 7290|    312|                PyObject *key = PyTuple_GET_ITEM(attrs, i);
  ------------------
  |  |   29|    312|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    312|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    312|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7290:33): [True: 312, False: 0]
  ------------------
 7291|      0|                Py_hash_t hash;
 7292|    312|                if (PyUnicode_CheckExact(key) && (hash = unicode_get_hash(key)) != -1) {
  ------------------
  |  |  104|    312|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    624|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    312|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    312|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 312, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7292:50): [True: 312, False: 0]
  ------------------
 7293|    312|                    if (insert_split_key(keys, key, hash) == DKIX_EMPTY) {
  ------------------
  |  |  185|    312|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (7293:25): [True: 0, False: 312]
  ------------------
 7294|      0|                        break;
 7295|      0|                    }
 7296|    312|                }
 7297|    312|            }
 7298|    519|        }
 7299|    525|    }
 7300|    525|    return keys;
 7301|    525|}
_PyDict_RemoveKeysForClass:
 7305|      4|{
 7306|      4|    struct _instancekeysobject *shared_keys = _PyDictKeys_AsSharedKeys(cls->ht_cached_keys);
 7307|      4|    FT_ATOMIC_STORE_PTR_RELEASE(shared_keys->dsk_owning_type, NULL);
  ------------------
  |  |  164|      4|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 7308|       |
 7309|      4|    _PyDictKeys_DecRef(cls->ht_cached_keys);
 7310|      4|}
_PyObject_InitInlineValues:
 7314|  51.2k|{
 7315|  51.2k|    assert(tp->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  Branch (7315:5): [True: 51.2k, False: 0]
  ------------------
 7316|  51.2k|    assert(tp->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  ------------------
  |  Branch (7316:5): [True: 51.2k, False: 0]
  ------------------
 7317|  51.2k|    assert(tp->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  Branch (7317:5): [True: 51.2k, False: 0]
  ------------------
 7318|  51.2k|    PyDictKeysObject *keys = CACHED_KEYS(tp);
  ------------------
  |  |  911|  51.2k|#define CACHED_KEYS(tp) (((PyHeapTypeObject*)tp)->ht_cached_keys)
  ------------------
 7319|  51.2k|    assert(keys != NULL);
  ------------------
  |  Branch (7319:5): [True: 51.2k, False: 0]
  ------------------
 7320|  51.2k|    OBJECT_STAT_INC(inline_values);
  ------------------
  |  |   77|  51.2k|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
 7321|       |#ifdef Py_GIL_DISABLED
 7322|       |    Py_ssize_t usable = _Py_atomic_load_ssize_relaxed(&keys->dk_usable);
 7323|       |    if (usable > 1) {
 7324|       |        LOCK_KEYS(keys);
 7325|       |        if (keys->dk_usable > 1) {
 7326|       |            _Py_atomic_store_ssize(&keys->dk_usable, keys->dk_usable - 1);
 7327|       |        }
 7328|       |        UNLOCK_KEYS(keys);
 7329|       |    }
 7330|       |#else
 7331|  51.2k|    if (keys->dk_usable > 1) {
  ------------------
  |  Branch (7331:9): [True: 658, False: 50.6k]
  ------------------
 7332|    658|        keys->dk_usable--;
 7333|    658|    }
 7334|  51.2k|#endif
 7335|  51.2k|    size_t size = shared_keys_usable_size(keys);
 7336|  51.2k|    PyDictValues *values = _PyObject_InlineValues(obj);
 7337|  51.2k|    assert(size < 256);
  ------------------
  |  Branch (7337:5): [True: 51.2k, False: 0]
  ------------------
 7338|  51.2k|    values->capacity = (uint8_t)size;
 7339|  51.2k|    values->size = 0;
 7340|  51.2k|    values->embedded = 1;
 7341|  51.2k|    values->valid = 1;
 7342|   558k|    for (size_t i = 0; i < size; i++) {
  ------------------
  |  Branch (7342:24): [True: 507k, False: 51.2k]
  ------------------
 7343|   507k|        values->values[i] = NULL;
 7344|   507k|    }
 7345|       |    _PyObject_ManagedDictPointer(obj)->dict = NULL;
 7346|  51.2k|}
_PyDict_SetItem_LockHeld:
 7413|  2.55M|{
 7414|  2.55M|    if (!PyDict_Check(dict)) {
  ------------------
  |  |   18|  2.55M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.55M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (7414:9): [True: 0, False: 2.55M]
  ------------------
 7415|      0|        if (PyFrozenDict_Check(dict)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7416|      0|            if (value == NULL) {
  ------------------
  |  Branch (7416:17): [True: 0, False: 0]
  ------------------
 7417|      0|                frozendict_does_not_support("deletion");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 7418|      0|            }
 7419|      0|            else {
 7420|      0|                frozendict_does_not_support("assignment");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 7421|      0|            }
 7422|      0|        }
 7423|      0|        else {
 7424|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 7425|      0|        }
 7426|      0|        return -1;
 7427|      0|    }
 7428|       |
 7429|  2.55M|    if (value == NULL) {
  ------------------
  |  Branch (7429:9): [True: 36, False: 2.55M]
  ------------------
 7430|     36|        Py_hash_t hash = _PyObject_HashDictKey(name);
 7431|     36|        if (hash == -1) {
  ------------------
  |  Branch (7431:13): [True: 0, False: 36]
  ------------------
 7432|      0|            dict_unhashable_type((PyObject*)dict, name);
 7433|      0|            return -1;
 7434|      0|        }
 7435|     36|        return _PyDict_DelItem_KnownHash_LockHeld((PyObject *)dict, name, hash);
 7436|  2.55M|    } else {
 7437|  2.55M|        return setitem_lock_held(dict, name, value);
 7438|  2.55M|    }
 7439|  2.55M|}
_PyObject_StoreInstanceAttribute:
 7560|    901|{
 7561|    901|    PyDictValues *values = _PyObject_InlineValues(obj);
 7562|    901|    if (!FT_ATOMIC_LOAD_UINT8(values->valid)) {
  ------------------
  |  |  154|    901|#define FT_ATOMIC_LOAD_UINT8(value) value
  ------------------
  |  Branch (7562:9): [True: 0, False: 901]
  ------------------
 7563|      0|        PyDictObject *dict = _PyObject_GetManagedDict(obj);
 7564|      0|        if (dict == NULL) {
  ------------------
  |  Branch (7564:13): [True: 0, False: 0]
  ------------------
 7565|      0|            dict = (PyDictObject *)PyObject_GenericGetDict(obj, NULL);
 7566|      0|            if (dict == NULL) {
  ------------------
  |  Branch (7566:17): [True: 0, False: 0]
  ------------------
 7567|      0|                return -1;
 7568|      0|            }
 7569|      0|            int res = store_instance_attr_dict(obj, dict, name, value);
 7570|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7571|      0|            return res;
 7572|      0|        }
 7573|      0|        return store_instance_attr_dict(obj, dict, name, value);
 7574|      0|    }
 7575|       |
 7576|       |#ifdef Py_GIL_DISABLED
 7577|       |    // We have a valid inline values, at least for now...  There are two potential
 7578|       |    // races with having the values become invalid.  One is the dictionary
 7579|       |    // being detached from the object.  The other is if someone is inserting
 7580|       |    // into the dictionary directly and therefore causing it to resize.
 7581|       |    //
 7582|       |    // If we haven't materialized the dictionary yet we lock on the object, which
 7583|       |    // will also be used to prevent the dictionary from being materialized while
 7584|       |    // we're doing the insertion.  If we race and the dictionary gets created
 7585|       |    // then we'll need to release the object lock and lock the dictionary to
 7586|       |    // prevent resizing.
 7587|       |    PyDictObject *dict = _PyObject_GetManagedDict(obj);
 7588|       |    if (dict == NULL) {
 7589|       |        int res;
 7590|       |        Py_BEGIN_CRITICAL_SECTION(obj);
 7591|       |        dict = _PyObject_GetManagedDict(obj);
 7592|       |
 7593|       |        if (dict == NULL) {
 7594|       |            res = store_instance_attr_lock_held(obj, values, name, value);
 7595|       |        }
 7596|       |        Py_END_CRITICAL_SECTION();
 7597|       |
 7598|       |        if (dict == NULL) {
 7599|       |            return res;
 7600|       |        }
 7601|       |    }
 7602|       |    return store_instance_attr_dict(obj, dict, name, value);
 7603|       |#else
 7604|    901|    return store_instance_attr_lock_held(obj, values, name, value);
 7605|    901|#endif
 7606|    901|}
_PyObject_TryGetInstanceAttribute:
 7643|   445k|{
 7644|   445k|    assert(PyUnicode_CheckExact(name));
  ------------------
  |  Branch (7644:5): [True: 445k, False: 0]
  ------------------
 7645|   445k|    PyDictValues *values = _PyObject_InlineValues(obj);
 7646|   445k|    if (!FT_ATOMIC_LOAD_UINT8(values->valid)) {
  ------------------
  |  |  154|   445k|#define FT_ATOMIC_LOAD_UINT8(value) value
  ------------------
  |  Branch (7646:9): [True: 0, False: 445k]
  ------------------
 7647|      0|        return false;
 7648|      0|    }
 7649|       |
 7650|   445k|    PyDictKeysObject *keys = CACHED_KEYS(Py_TYPE(obj));
  ------------------
  |  |  911|   445k|#define CACHED_KEYS(tp) (((PyHeapTypeObject*)tp)->ht_cached_keys)
  ------------------
 7651|   445k|    assert(keys != NULL);
  ------------------
  |  Branch (7651:5): [True: 445k, False: 0]
  ------------------
 7652|   445k|    Py_ssize_t ix = _PyDictKeys_StringLookupSplit(keys, name);
 7653|   445k|    if (ix == DKIX_EMPTY) {
  ------------------
  |  |  185|   445k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (7653:9): [True: 580, False: 444k]
  ------------------
 7654|    580|        *attr = NULL;
 7655|    580|        return true;
 7656|    580|    }
 7657|       |
 7658|       |#ifdef Py_GIL_DISABLED
 7659|       |    PyObject *value = _Py_atomic_load_ptr_acquire(&values->values[ix]);
 7660|       |    if (value == NULL) {
 7661|       |        if (FT_ATOMIC_LOAD_UINT8(values->valid)) {
 7662|       |            *attr = NULL;
 7663|       |            return true;
 7664|       |        }
 7665|       |    }
 7666|       |    else if (_Py_TryIncrefCompare(&values->values[ix], value)) {
 7667|       |        *attr = value;
 7668|       |        return true;
 7669|       |    }
 7670|       |
 7671|       |    PyDictObject *dict = _PyObject_GetManagedDict(obj);
 7672|       |    if (dict == NULL) {
 7673|       |        // No dict, lock the object to prevent one from being
 7674|       |        // materialized...
 7675|       |        bool success = false;
 7676|       |        Py_BEGIN_CRITICAL_SECTION(obj);
 7677|       |
 7678|       |        dict = _PyObject_GetManagedDict(obj);
 7679|       |        if (dict == NULL) {
 7680|       |            // Still no dict, we can read from the values
 7681|       |            assert(values->valid);
 7682|       |            value = values->values[ix];
 7683|       |            *attr = _Py_XNewRefWithLock(value);
 7684|       |            success = true;
 7685|       |        }
 7686|       |
 7687|       |        Py_END_CRITICAL_SECTION();
 7688|       |
 7689|       |        if (success) {
 7690|       |            return true;
 7691|       |        }
 7692|       |    }
 7693|       |
 7694|       |    // We have a dictionary, we'll need to lock it to prevent
 7695|       |    // the values from being resized.
 7696|       |    assert(dict != NULL);
 7697|       |
 7698|       |    bool success;
 7699|       |    Py_BEGIN_CRITICAL_SECTION(dict);
 7700|       |
 7701|       |    if (dict->ma_values == values && FT_ATOMIC_LOAD_UINT8(values->valid)) {
 7702|       |        value = _Py_atomic_load_ptr_consume(&values->values[ix]);
 7703|       |        *attr = _Py_XNewRefWithLock(value);
 7704|       |        success = true;
 7705|       |    } else {
 7706|       |        // Caller needs to lookup from the dictionary
 7707|       |        success = false;
 7708|       |    }
 7709|       |
 7710|       |    Py_END_CRITICAL_SECTION();
 7711|       |
 7712|       |    return success;
 7713|       |#else
 7714|   444k|    PyObject *value = values->values[ix];
 7715|   444k|    *attr = Py_XNewRef(value);
  ------------------
  |  |  551|   444k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   444k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   444k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7716|       |    return true;
 7717|   445k|#endif
 7718|   445k|}
PyObject_VisitManagedDict:
 7756|  12.5k|{
 7757|  12.5k|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|  12.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7758|  12.5k|    if((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0) {
  ------------------
  |  |  482|  12.5k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (7758:8): [True: 0, False: 12.5k]
  ------------------
 7759|      0|        return 0;
 7760|      0|    }
 7761|  12.5k|    PyDictObject *dict = _PyObject_ManagedDictPointer(obj)->dict;
 7762|  12.5k|    if (dict != NULL) {
  ------------------
  |  Branch (7762:9): [True: 5.19k, False: 7.35k]
  ------------------
 7763|       |        // GH-130327: If there's a managed dictionary available, we should
 7764|       |        // *always* traverse it. The dict is responsible for traversing the
 7765|       |        // inline values if it points to them.
 7766|  5.19k|        Py_VISIT(dict);
  ------------------
  |  |  194|  5.19k|    do {                                                                \
  |  |  195|  5.19k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 5.19k, False: 0]
  |  |  ------------------
  |  |  196|  5.19k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  5.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  5.19k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 5.19k]
  |  |  ------------------
  |  |  198|  5.19k|                return vret;                                            \
  |  |  199|  5.19k|        }                                                               \
  |  |  200|  5.19k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 5.19k]
  |  |  ------------------
  ------------------
 7767|  5.19k|    }
 7768|  7.35k|    else if (tp->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|  7.35k|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (7768:14): [True: 7.34k, False: 18]
  ------------------
 7769|  7.34k|        PyDictValues *values = _PyObject_InlineValues(obj);
 7770|  7.34k|        if (values->valid) {
  ------------------
  |  Branch (7770:13): [True: 7.34k, False: 0]
  ------------------
 7771|   132k|            for (Py_ssize_t i = 0; i < values->capacity; i++) {
  ------------------
  |  Branch (7771:36): [True: 125k, False: 7.34k]
  ------------------
 7772|   125k|                Py_VISIT(values->values[i]);
  ------------------
  |  |  194|   125k|    do {                                                                \
  |  |  195|   125k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 28.9k, False: 96.3k]
  |  |  ------------------
  |  |  196|  28.9k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  28.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  28.9k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 28.9k]
  |  |  ------------------
  |  |  198|  28.9k|                return vret;                                            \
  |  |  199|  28.9k|        }                                                               \
  |  |  200|   125k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 125k]
  |  |  ------------------
  ------------------
 7773|   125k|            }
 7774|  7.34k|        }
 7775|  7.34k|    }
 7776|  12.5k|    return 0;
 7777|  12.5k|}
PyObject_ClearManagedDict:
 7995|  50.8k|{
 7996|       |    // This is called when the object is being freed or cleared
 7997|       |    // by the GC and therefore known to have no references.
 7998|  50.8k|    if (Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  213|  50.8k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|  50.8k|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (7998:9): [True: 50.8k, False: 7]
  ------------------
 7999|  50.8k|        PyDictObject *dict = _PyObject_GetManagedDict(obj);
 8000|  50.8k|        if (dict == NULL) {
  ------------------
  |  Branch (8000:13): [True: 50.8k, False: 0]
  ------------------
 8001|       |            // We have no materialized dictionary and inline values
 8002|       |            // that just need to be cleared.
 8003|       |            // No dict to clear, we're done
 8004|  50.8k|            clear_inline_values(_PyObject_InlineValues(obj));
 8005|  50.8k|            return;
 8006|  50.8k|        }
 8007|      0|        else if (FT_ATOMIC_LOAD_PTR_RELAXED(dict->ma_values) ==
  ------------------
  |  |  153|      0|#define FT_ATOMIC_LOAD_PTR_RELAXED(value) value
  ------------------
  |  Branch (8007:18): [True: 0, False: 0]
  ------------------
 8008|      0|                    _PyObject_InlineValues(obj)) {
 8009|       |            // We have a materialized object which points at the inline
 8010|       |            // values. We need to materialize the keys. Nothing can modify
 8011|       |            // this object, but we need to lock the dictionary.
 8012|      0|            int err;
 8013|      0|            Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|      0|    {
  ------------------
 8014|      0|            err = detach_dict_from_object(dict, obj);
 8015|      0|            Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 8016|       |
 8017|      0|            if (err) {
  ------------------
  |  Branch (8017:17): [True: 0, False: 0]
  ------------------
 8018|       |                /* Must be out of memory */
 8019|      0|                assert(PyErr_Occurred() == PyExc_MemoryError);
  ------------------
  |  Branch (8019:17): [True: 0, False: 0]
  ------------------
 8020|      0|                PyErr_FormatUnraisable("Exception ignored while "
 8021|      0|                                       "clearing an object managed dict");
 8022|       |                /* Clear the dict */
 8023|      0|                Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|      0|    {
  ------------------
 8024|      0|                PyDictKeysObject *oldkeys = dict->ma_keys;
 8025|      0|                set_keys(dict, Py_EMPTY_KEYS);
  ------------------
  |  |  660|      0|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
 8026|      0|                dict->ma_values = NULL;
 8027|      0|                dictkeys_decref(oldkeys, IS_DICT_SHARED(dict));
  ------------------
  |  |  269|      0|#define IS_DICT_SHARED(mp) (false)
  ------------------
 8028|      0|                STORE_USED(dict, 0);
  ------------------
  |  |  336|      0|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|      0|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 8029|      0|                clear_inline_values(_PyObject_InlineValues(obj));
 8030|      0|                Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 8031|      0|            }
 8032|      0|        }
 8033|  50.8k|    }
 8034|      7|    Py_CLEAR(_PyObject_ManagedDictPointer(obj)->dict);
  ------------------
  |  |  484|      7|    do { \
  |  |  485|      7|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      7|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      7|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      7|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      7|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      7|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 7, False: 0]
  |  |  ------------------
  |  |  488|      7|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      7|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      7|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      7|        } \
  |  |  491|      7|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 7]
  |  |  ------------------
  ------------------
 8035|      7|}
PyObject_GenericGetDict:
 8110|     41|{
 8111|     41|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|     41|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8112|     41|    if (_PyType_HasFeature(tp, Py_TPFLAGS_MANAGED_DICT)) {
  ------------------
  |  |  482|     41|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (8112:9): [True: 0, False: 41]
  ------------------
 8113|      0|        return Py_XNewRef(ensure_managed_dict(obj));
  ------------------
  |  |  551|      0|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8114|      0|    }
 8115|     41|    else {
 8116|     41|        PyObject **dictptr = _PyObject_ComputedDictPointer(obj);
 8117|     41|        if (dictptr == NULL) {
  ------------------
  |  Branch (8117:13): [True: 0, False: 41]
  ------------------
 8118|      0|            PyErr_SetString(PyExc_AttributeError,
 8119|      0|                            "This object has no __dict__");
 8120|      0|            return NULL;
 8121|      0|        }
 8122|       |
 8123|     41|        return Py_XNewRef(ensure_nonmanaged_dict(obj, dictptr));
  ------------------
  |  |  551|     41|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8124|     41|    }
 8125|     41|}
_PyObjectDict_SetItem:
 8130|  2.55M|{
 8131|  2.55M|    PyObject *dict;
 8132|  2.55M|    int res;
 8133|       |
 8134|  2.55M|    assert(dictptr != NULL);
  ------------------
  |  Branch (8134:5): [True: 2.55M, False: 0]
  ------------------
 8135|  2.55M|    dict = ensure_nonmanaged_dict(obj, dictptr);
 8136|  2.55M|    if (dict == NULL) {
  ------------------
  |  Branch (8136:9): [True: 0, False: 2.55M]
  ------------------
 8137|      0|        return -1;
 8138|      0|    }
 8139|       |
 8140|  2.55M|    Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|  2.55M|    {
  ------------------
 8141|  2.55M|    res = _PyDict_SetItem_LockHeld((PyDictObject *)dict, key, value);
 8142|  2.55M|    ASSERT_CONSISTENT(dict);
  ------------------
  |  |  668|  2.55M|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (8142:5): [True: 2.55M, False: 0]
  ------------------
 8143|  2.55M|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  2.55M|    }
  ------------------
 8144|  2.55M|    return res;
 8145|  2.55M|}
_PyDictKeys_DecRef:
 8149|      4|{
 8150|       |    dictkeys_decref(keys, false);
 8151|      4|}
_PyDictKeys_GetVersionForCurrentState:
 8180|  3.06k|{
 8181|  3.06k|    uint32_t dk_version = FT_ATOMIC_LOAD_UINT32_RELAXED(dictkeys->dk_version);
  ------------------
  |  |  159|  3.06k|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  ------------------
 8182|  3.06k|    if (dk_version != 0) {
  ------------------
  |  Branch (8182:9): [True: 2.82k, False: 232]
  ------------------
 8183|  2.82k|        return dk_version;
 8184|  2.82k|    }
 8185|    232|    dk_version = get_next_dict_keys_version(interp);
 8186|    232|    FT_ATOMIC_STORE_UINT32_RELAXED(dictkeys->dk_version, dk_version);
  ------------------
  |  |  172|    232|#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value
  ------------------
 8187|    232|    return dk_version;
 8188|  3.06k|}
_PyDict_GetKeysVersionForCurrentState:
 8193|  2.69k|{
 8194|  2.69k|    ASSERT_DICT_LOCKED((PyObject *) dict);
 8195|  2.69k|    uint32_t dk_version =
 8196|  2.69k|        _PyDictKeys_GetVersionForCurrentState(interp, dict->ma_keys);
 8197|  2.69k|    ensure_shared_on_keys_version_assignment(dict);
 8198|  2.69k|    return dk_version;
 8199|  2.69k|}
PyDict_Watch:
 8223|  2.54k|{
 8224|  2.54k|    if (!PyDict_Check(dict)) {
  ------------------
  |  |   18|  2.54k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.54k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (8224:9): [True: 0, False: 2.54k]
  ------------------
 8225|      0|        PyErr_SetString(PyExc_ValueError, "Cannot watch non-dictionary");
 8226|      0|        return -1;
 8227|      0|    }
 8228|  2.54k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 8229|  2.54k|    if (validate_watcher_id(interp, watcher_id)) {
  ------------------
  |  Branch (8229:9): [True: 0, False: 2.54k]
  ------------------
 8230|      0|        return -1;
 8231|      0|    }
 8232|  2.54k|    FT_ATOMIC_OR_UINT64(((PyDictObject*)dict)->_ma_watcher_tag,
  ------------------
  |  |  174|  2.54k|#define FT_ATOMIC_OR_UINT64(value, new_value) (void)(value |= new_value)
  ------------------
 8233|  2.54k|                        1ULL << watcher_id);
 8234|  2.54k|    return 0;
 8235|  2.54k|}
_PyDict_SendEvent:
 8310|  9.11k|{
 8311|  9.11k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 8312|  81.9k|    for (int i = 0; i < DICT_MAX_WATCHERS; i++) {
  ------------------
  |  |   11|  81.9k|#define DICT_MAX_WATCHERS 8
  ------------------
  |  Branch (8312:21): [True: 72.8k, False: 9.11k]
  ------------------
 8313|  72.8k|        if (watcher_bits & 1) {
  ------------------
  |  Branch (8313:13): [True: 9.11k, False: 63.7k]
  ------------------
 8314|  9.11k|            PyDict_WatchCallback cb = FT_ATOMIC_LOAD_PTR_ACQUIRE(
  ------------------
  |  |  150|  9.11k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
 8315|  9.11k|                interp->dict_state.watchers[i]);
 8316|  9.11k|            if (cb && (cb(event, (PyObject*)mp, key, value) < 0)) {
  ------------------
  |  Branch (8316:17): [True: 9.11k, False: 0]
  |  Branch (8316:23): [True: 0, False: 9.11k]
  ------------------
 8317|       |                // We don't want to resurrect the dict by potentially having an
 8318|       |                // unraisablehook keep a reference to it, so we don't pass the
 8319|       |                // dict as context, just an informative string message.  Dict
 8320|       |                // repr can call arbitrary code, so we invent a simpler version.
 8321|      0|                PyErr_FormatUnraisable(
 8322|      0|                    "Exception ignored in %s watcher callback for <dict at %p>",
 8323|      0|                    dict_event_name(event), mp);
 8324|      0|            }
 8325|  9.11k|        }
 8326|  72.8k|        watcher_bits >>= 1;
 8327|  72.8k|    }
 8328|  9.11k|}
dictobject.c:dictkeys_get_index:
  528|  29.1M|{
  529|  29.1M|    int log2size = DK_LOG_SIZE(keys);
  ------------------
  |  |  272|  29.1M|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  ------------------
  |  |  |  |  302|  29.1M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  530|  29.1M|    Py_ssize_t ix;
  531|       |
  532|  29.1M|    if (log2size < 8) {
  ------------------
  |  Branch (532:9): [True: 24.6M, False: 4.54M]
  ------------------
  533|  24.6M|        ix = LOAD_INDEX(keys, 8, i);
  ------------------
  |  |  271|  24.6M|#define LOAD_INDEX(keys, size, idx) ((const int##size##_t*)(keys->dk_indices))[idx]
  ------------------
  534|  24.6M|    }
  535|  4.54M|    else if (log2size < 16) {
  ------------------
  |  Branch (535:14): [True: 4.28M, False: 259k]
  ------------------
  536|  4.28M|        ix = LOAD_INDEX(keys, 16, i);
  ------------------
  |  |  271|  4.28M|#define LOAD_INDEX(keys, size, idx) ((const int##size##_t*)(keys->dk_indices))[idx]
  ------------------
  537|  4.28M|    }
  538|   259k|#if SIZEOF_VOID_P > 4
  539|   259k|    else if (log2size >= 32) {
  ------------------
  |  Branch (539:14): [True: 0, False: 259k]
  ------------------
  540|      0|        ix = LOAD_INDEX(keys, 64, i);
  ------------------
  |  |  271|      0|#define LOAD_INDEX(keys, size, idx) ((const int##size##_t*)(keys->dk_indices))[idx]
  ------------------
  541|      0|    }
  542|   259k|#endif
  543|   259k|    else {
  544|   259k|        ix = LOAD_INDEX(keys, 32, i);
  ------------------
  |  |  271|   259k|#define LOAD_INDEX(keys, size, idx) ((const int##size##_t*)(keys->dk_indices))[idx]
  ------------------
  545|   259k|    }
  546|  29.1M|    assert(ix >= DKIX_DUMMY);
  ------------------
  |  Branch (546:5): [True: 29.1M, False: 0]
  ------------------
  547|  29.1M|    return ix;
  548|  29.1M|}
dictobject.c:unicode_get_hash:
  451|  8.49M|{
  452|  8.49M|    return PyUnstable_Unicode_GET_CACHED_HASH(o);
  453|  8.49M|}
dictobject.c:new_dict:
  973|   881k|{
  974|   881k|    PyDictObject *mp = _Py_FREELIST_POP(PyDictObject, dicts);
  ------------------
  |  |   43|   881k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|   881k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  975|   881k|    if (mp == NULL) {
  ------------------
  |  Branch (975:9): [True: 393k, False: 487k]
  ------------------
  976|   393k|        mp = PyObject_GC_New(PyDictObject, &PyDict_Type);
  ------------------
  |  |  181|   393k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|   393k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  977|   393k|    }
  978|   881k|    assert(mp == NULL || Py_IS_TYPE(mp, &PyDict_Type));
  ------------------
  |  Branch (978:5): [True: 0, False: 881k]
  |  Branch (978:5): [True: 881k, False: 0]
  ------------------
  979|       |
  980|   881k|    return new_dict_impl(mp, keys, values, used, free_values_on_failure, 0, 1);
  981|   881k|}
dictobject.c:new_dict_impl:
  945|   882k|{
  946|   882k|    assert(keys != NULL);
  ------------------
  |  Branch (946:5): [True: 882k, False: 0]
  ------------------
  947|   882k|    if (mp == NULL) {
  ------------------
  |  Branch (947:9): [True: 0, False: 882k]
  ------------------
  948|      0|        dictkeys_decref(keys, false);
  949|      0|        if (free_values_on_failure) {
  ------------------
  |  Branch (949:13): [True: 0, False: 0]
  ------------------
  950|      0|            free_values(values, false);
  951|      0|        }
  952|      0|        return NULL;
  953|      0|    }
  954|       |
  955|   882k|    mp->ma_keys = keys;
  956|   882k|    mp->ma_values = values;
  957|   882k|    mp->ma_used = used;
  958|   882k|    mp->_ma_watcher_tag = 0;
  959|   882k|    if (frozendict) {
  ------------------
  |  Branch (959:9): [True: 0, False: 882k]
  ------------------
  960|      0|        ((PyFrozenDictObject *)mp)->ma_hash = -1;
  961|      0|    }
  962|   882k|    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|   882k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (962:5): [True: 882k, False: 0]
  ------------------
  963|   882k|    if (gc_track) {
  ------------------
  |  Branch (963:9): [True: 881k, False: 1.54k]
  ------------------
  964|   881k|        _PyObject_GC_TRACK(mp);
  ------------------
  |  |  505|   881k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   881k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   881k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  965|   881k|    }
  966|   882k|    return (PyObject *)mp;
  967|   882k|}
dictobject.c:free_values:
  930|      7|{
  931|      7|    assert(values->embedded == 0);
  ------------------
  |  Branch (931:5): [True: 7, False: 0]
  ------------------
  932|       |#ifdef Py_GIL_DISABLED
  933|       |    if (use_qsbr) {
  934|       |        _PyMem_FreeDelayed(values, values_size_from_count(values->capacity));
  935|       |        return;
  936|       |    }
  937|       |#endif
  938|      7|    PyMem_Free(values);
  939|      7|}
dictobject.c:check_keys_unicode:
 1248|    444|{
 1249|    444|    return PyUnicode_CheckExact(key) && (dk->dk_kind != DICT_KEYS_GENERAL);
  ------------------
  |  |  104|    444|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    888|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    444|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    444|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 444, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1249:41): [True: 444, False: 0]
  ------------------
 1250|    444|}
dictobject.c:hash_unicode_key:
 1254|  98.0k|{
 1255|  98.0k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1255:5): [True: 98.0k, False: 0]
  ------------------
 1256|  98.0k|    Py_hash_t hash = unicode_get_hash(key);
 1257|  98.0k|    if (hash == -1) {
  ------------------
  |  Branch (1257:9): [True: 0, False: 98.0k]
  ------------------
 1258|      0|        hash = PyUnicode_Type.tp_hash(key);
 1259|      0|        assert(hash != -1);
  ------------------
  |  Branch (1259:9): [True: 0, False: 0]
  ------------------
 1260|      0|    }
 1261|  98.0k|    return hash;
 1262|  98.0k|}
dictobject.c:unicodekeys_lookup_unicode:
 1208|  9.62M|{
 1209|       |    return do_lookup(NULL, dk, key, hash, compare_unicode_unicode);
 1210|  9.62M|}
dictobject.c:do_lookup:
 1115|  13.8M|{
 1116|  13.8M|    void *ep0 = _DK_ENTRIES(dk);
 1117|  13.8M|    size_t mask = DK_MASK(dk);
  ------------------
  |  |  467|  13.8M|#define DK_MASK(dk) (DK_SIZE(dk)-1)
  |  |  ------------------
  |  |  |  |  274|  13.8M|#define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
  |  |  |  |  ------------------
  |  |  |  |  |  |  272|  13.8M|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  302|  13.8M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1118|  13.8M|    size_t perturb = hash;
 1119|  13.8M|    size_t i = (size_t)hash & mask;
 1120|  13.8M|    Py_ssize_t ix;
 1121|  15.1M|    for (;;) {
 1122|  15.1M|        ix = dictkeys_get_index(dk, i);
 1123|  15.1M|        if (ix >= 0) {
  ------------------
  |  Branch (1123:13): [True: 11.0M, False: 4.12M]
  ------------------
 1124|  11.0M|            int cmp = check_lookup(mp, dk, ep0, ix, key, hash);
 1125|  11.0M|            if (cmp < 0) {
  ------------------
  |  Branch (1125:17): [True: 0, False: 11.0M]
  ------------------
 1126|      0|                return cmp;
 1127|  11.0M|            } else if (cmp) {
  ------------------
  |  Branch (1127:24): [True: 6.97M, False: 4.07M]
  ------------------
 1128|  6.97M|                return ix;
 1129|  6.97M|            }
 1130|  11.0M|        }
 1131|  4.12M|        else if (ix == DKIX_EMPTY) {
  ------------------
  |  |  185|  4.12M|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (1131:18): [True: 4.09M, False: 32.1k]
  ------------------
 1132|  4.09M|            return DKIX_EMPTY;
  ------------------
  |  |  185|  4.09M|#define DKIX_EMPTY (-1)
  ------------------
 1133|  4.09M|        }
 1134|  4.10M|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  338|  4.10M|#define PERTURB_SHIFT 5
  ------------------
 1135|  4.10M|        i = mask & (i*5 + perturb + 1);
 1136|       |
 1137|       |        // Manual loop unrolling
 1138|  4.10M|        ix = dictkeys_get_index(dk, i);
 1139|  4.10M|        if (ix >= 0) {
  ------------------
  |  Branch (1139:13): [True: 2.23M, False: 1.87M]
  ------------------
 1140|  2.23M|            int cmp = check_lookup(mp, dk, ep0, ix, key, hash);
 1141|  2.23M|            if (cmp < 0) {
  ------------------
  |  Branch (1141:17): [True: 0, False: 2.23M]
  ------------------
 1142|      0|                return cmp;
 1143|  2.23M|            } else if (cmp) {
  ------------------
  |  Branch (1143:24): [True: 924k, False: 1.30M]
  ------------------
 1144|   924k|                return ix;
 1145|   924k|            }
 1146|  2.23M|        }
 1147|  1.87M|        else if (ix == DKIX_EMPTY) {
  ------------------
  |  |  185|  1.87M|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (1147:18): [True: 1.86M, False: 8.69k]
  ------------------
 1148|  1.86M|            return DKIX_EMPTY;
  ------------------
  |  |  185|  1.86M|#define DKIX_EMPTY (-1)
  ------------------
 1149|  1.86M|        }
 1150|  1.31M|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  338|  1.31M|#define PERTURB_SHIFT 5
  ------------------
 1151|  1.31M|        i = mask & (i*5 + perturb + 1);
 1152|  1.31M|    }
 1153|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1154|  13.8M|}
dictobject.c:compare_unicode_unicode:
 1194|  8.66M|{
 1195|  8.66M|    PyDictUnicodeEntry *ep = &((PyDictUnicodeEntry *)ep0)[ix];
 1196|  8.66M|    PyObject *ep_key = FT_ATOMIC_LOAD_PTR_CONSUME(ep->me_key);
  ------------------
  |  |  151|  8.66M|#define FT_ATOMIC_LOAD_PTR_CONSUME(value) value
  ------------------
 1197|  8.66M|    assert(ep_key != NULL);
  ------------------
  |  Branch (1197:5): [True: 8.66M, False: 0]
  ------------------
 1198|  8.66M|    assert(PyUnicode_CheckExact(ep_key));
  ------------------
  |  Branch (1198:5): [True: 8.66M, False: 0]
  ------------------
 1199|  8.66M|    if (ep_key == key ||
  ------------------
  |  Branch (1199:9): [True: 4.83M, False: 3.82M]
  ------------------
 1200|  5.16M|            (unicode_get_hash(ep_key) == hash && unicode_eq(ep_key, key))) {
  ------------------
  |  Branch (1200:14): [True: 327k, False: 3.50M]
  |  Branch (1200:50): [True: 327k, False: 69]
  ------------------
 1201|  5.16M|        return 1;
 1202|  5.16M|    }
 1203|  3.50M|    return 0;
 1204|  8.66M|}
dictobject.c:unicodekeys_lookup_split:
 1272|   445k|{
 1273|   445k|    Py_ssize_t ix;
 1274|   445k|    assert(dk->dk_kind == DICT_KEYS_SPLIT);
  ------------------
  |  Branch (1274:5): [True: 445k, False: 0]
  ------------------
 1275|   445k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1275:5): [True: 445k, False: 0]
  ------------------
 1276|       |
 1277|       |#ifdef Py_GIL_DISABLED
 1278|       |    // A split dictionaries keys can be mutated by other dictionaries
 1279|       |    // but if we have a unicode key we can avoid locking the shared
 1280|       |    // keys.
 1281|       |    ix = unicodekeys_lookup_unicode_threadsafe(dk, key, hash);
 1282|       |    if (ix == DKIX_KEY_CHANGED) {
 1283|       |        LOCK_KEYS(dk);
 1284|       |        ix = unicodekeys_lookup_unicode(dk, key, hash);
 1285|       |        UNLOCK_KEYS(dk);
 1286|       |    }
 1287|       |#else
 1288|   445k|    ix = unicodekeys_lookup_unicode(dk, key, hash);
 1289|   445k|#endif
 1290|   445k|    return ix;
 1291|   445k|}
dictobject.c:unicodekeys_lookup_generic:
 1187|  75.4k|{
 1188|  75.4k|    return do_lookup(mp, dk, key, hash, compare_unicode_generic);
 1189|  75.4k|}
dictobject.c:compare_unicode_generic:
 1159|  6.87k|{
 1160|  6.87k|    PyDictUnicodeEntry *ep = &((PyDictUnicodeEntry *)ep0)[ix];
 1161|  6.87k|    assert(ep->me_key != NULL);
  ------------------
  |  Branch (1161:5): [True: 6.87k, False: 0]
  ------------------
 1162|  6.87k|    assert(PyUnicode_CheckExact(ep->me_key));
  ------------------
  |  Branch (1162:5): [True: 6.87k, False: 0]
  ------------------
 1163|  6.87k|    assert(!PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1163:5): [True: 6.87k, False: 0]
  ------------------
 1164|       |
 1165|  6.87k|    if (unicode_get_hash(ep->me_key) == hash) {
  ------------------
  |  Branch (1165:9): [True: 24, False: 6.84k]
  ------------------
 1166|     24|        PyObject *startkey = ep->me_key;
 1167|     24|        Py_INCREF(startkey);
  ------------------
  |  |  310|     24|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1168|     24|        int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
  ------------------
  |  |  654|     24|#define Py_EQ 2
  ------------------
 1169|     24|        Py_DECREF(startkey);
  ------------------
  |  |  430|     24|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1170|     24|        if (cmp < 0) {
  ------------------
  |  Branch (1170:13): [True: 0, False: 24]
  ------------------
 1171|      0|            return DKIX_ERROR;
  ------------------
  |  |  187|      0|#define DKIX_ERROR (-3)
  ------------------
 1172|      0|        }
 1173|     24|        if (dk == mp->ma_keys && ep->me_key == startkey) {
  ------------------
  |  Branch (1173:13): [True: 24, False: 0]
  |  Branch (1173:34): [True: 24, False: 0]
  ------------------
 1174|     24|            return cmp;
 1175|     24|        }
 1176|      0|        else {
 1177|       |            /* The dict was mutated, restart */
 1178|      0|            return DKIX_KEY_CHANGED;
  ------------------
  |  |  188|      0|#define DKIX_KEY_CHANGED (-4) /* Used internally */
  ------------------
 1179|      0|        }
 1180|     24|    }
 1181|  6.84k|    return 0;
 1182|  6.87k|}
dictobject.c:dictkeys_generic_lookup:
 1242|  4.16M|{
 1243|  4.16M|    return do_lookup(mp, dk, key, hash, compare_generic);
 1244|  4.16M|}
dictobject.c:compare_generic:
 1215|  4.60M|{
 1216|  4.60M|    PyDictKeyEntry *ep = &((PyDictKeyEntry *)ep0)[ix];
 1217|  4.60M|    assert(ep->me_key != NULL);
  ------------------
  |  Branch (1217:5): [True: 4.60M, False: 0]
  ------------------
 1218|  4.60M|    if (ep->me_key == key) {
  ------------------
  |  Branch (1218:9): [True: 1.59M, False: 3.01M]
  ------------------
 1219|  1.59M|        return 1;
 1220|  1.59M|    }
 1221|  3.01M|    if (ep->me_hash == hash) {
  ------------------
  |  Branch (1221:9): [True: 1.17M, False: 1.84M]
  ------------------
 1222|  1.17M|        PyObject *startkey = ep->me_key;
 1223|  1.17M|        Py_INCREF(startkey);
  ------------------
  |  |  310|  1.17M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.17M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.17M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1224|  1.17M|        int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
  ------------------
  |  |  654|  1.17M|#define Py_EQ 2
  ------------------
 1225|  1.17M|        Py_DECREF(startkey);
  ------------------
  |  |  430|  1.17M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.17M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.17M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1226|  1.17M|        if (cmp < 0) {
  ------------------
  |  Branch (1226:13): [True: 0, False: 1.17M]
  ------------------
 1227|      0|            return DKIX_ERROR;
  ------------------
  |  |  187|      0|#define DKIX_ERROR (-3)
  ------------------
 1228|      0|        }
 1229|  1.17M|        if (dk == mp->ma_keys && ep->me_key == startkey) {
  ------------------
  |  Branch (1229:13): [True: 1.17M, False: 0]
  |  Branch (1229:34): [True: 1.17M, False: 0]
  ------------------
 1230|  1.17M|            return cmp;
 1231|  1.17M|        }
 1232|      0|        else {
 1233|       |            /* The dict was mutated, restart */
 1234|      0|            return DKIX_KEY_CHANGED;
  ------------------
  |  |  188|      0|#define DKIX_KEY_CHANGED (-4) /* Used internally */
  ------------------
 1235|      0|        }
 1236|  1.17M|    }
 1237|  1.84M|    return 0;
 1238|  3.01M|}
dictobject.c:can_modify_dict:
  306|  11.5M|{
  307|  11.5M|    if (PyFrozenDict_Check(mp)) {
  ------------------
  |  |   37|  11.5M|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|  11.5M|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  11.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 3, False: 11.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|       |        // gh-151722: A frozendict must not be tracked by the GC
  309|       |        // when it's being modified.
  310|      3|        assert(!_PyObject_GC_IS_TRACKED(mp));
  ------------------
  |  Branch (310:9): [True: 3, False: 0]
  ------------------
  311|       |
  312|       |        // No locking required to modify a newly created frozendict
  313|       |        // since it's only accessible from the current thread.
  314|      3|        assert(PyUnstable_Object_IsUniquelyReferenced(_PyObject_CAST(mp)));
  ------------------
  |  Branch (314:9): [True: 3, False: 0]
  ------------------
  315|      3|    }
  316|  11.5M|    else {
  317|       |        // Locking is only required if the dictionary is not
  318|       |        // uniquely referenced.
  319|  11.5M|        ASSERT_DICT_LOCKED(mp);
  320|  11.5M|    }
  321|  11.5M|    return 1;
  322|  11.5M|}
dictobject.c:dict_new_presized:
 2345|  2.38k|{
 2346|  2.38k|    const uint8_t log2_max_presize = 17;
 2347|  2.38k|    const Py_ssize_t max_presize = ((Py_ssize_t)1) << log2_max_presize;
 2348|  2.38k|    uint8_t log2_newsize;
 2349|  2.38k|    PyDictKeysObject *new_keys;
 2350|       |
 2351|  2.38k|    if (minused <= USABLE_FRACTION(PyDict_MINSIZE)) {
  ------------------
  |  |  590|  2.38k|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
  |  Branch (2351:9): [True: 2.19k, False: 188]
  ------------------
 2352|  2.19k|        return PyDict_New();
 2353|  2.19k|    }
 2354|       |    /* There are no strict guarantee that returned dict can contain minused
 2355|       |     * items without resize.  So we create medium size dict instead of very
 2356|       |     * large dict or MemoryError.
 2357|       |     */
 2358|    188|    if (minused > USABLE_FRACTION(max_presize)) {
  ------------------
  |  |  590|    188|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
  |  Branch (2358:9): [True: 0, False: 188]
  ------------------
 2359|      0|        log2_newsize = log2_max_presize;
 2360|      0|    }
 2361|    188|    else {
 2362|    188|        log2_newsize = estimate_log2_keysize(minused);
 2363|    188|    }
 2364|       |
 2365|    188|    new_keys = new_keys_object(log2_newsize, unicode);
 2366|    188|    if (new_keys == NULL)
  ------------------
  |  Branch (2366:9): [True: 0, False: 188]
  ------------------
 2367|      0|        return NULL;
 2368|    188|    return new_dict(new_keys, NULL, 0, 0);
 2369|    188|}
dictobject.c:estimate_log2_keysize:
  622|    189|{
  623|    189|    return calculate_log2_keysize((n*3 + 1) / 2);
  624|    189|}
dictobject.c:calculate_log2_keysize:
  595|   484k|{
  596|   484k|#if SIZEOF_LONG == SIZEOF_SIZE_T
  597|   484k|    minsize = Py_MAX(minsize, PyDict_MINSIZE);
  ------------------
  |  |  126|   484k|       __extension__ \
  |  |  127|   484k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   484k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   484k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   484k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   484k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 463k, False: 21.4k]
  |  |  ------------------
  ------------------
  598|   484k|    return _Py_bit_length(minsize - 1);
  599|       |#elif defined(_MSC_VER)
  600|       |    // On 64bit Windows, sizeof(long) == 4. We cannot use _Py_bit_length.
  601|       |    minsize = Py_MAX(minsize, PyDict_MINSIZE);
  602|       |    unsigned long msb;
  603|       |    _BitScanReverse64(&msb, (uint64_t)minsize - 1);
  604|       |    return (uint8_t)(msb + 1);
  605|       |#else
  606|       |    uint8_t log2_size;
  607|       |    for (log2_size = PyDict_LOG_MINSIZE;
  608|       |            (((Py_ssize_t)1) << log2_size) < minsize;
  609|       |            log2_size++)
  610|       |        ;
  611|       |    return log2_size;
  612|       |#endif
  613|   484k|}
dictobject.c:new_keys_object:
  849|  1.22M|{
  850|  1.22M|    Py_ssize_t usable = USABLE_FRACTION((size_t)1<<log2_size);
  ------------------
  |  |  590|  1.22M|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
  851|  1.22M|    size_t entry_size = unicode ? sizeof(PyDictUnicodeEntry) : sizeof(PyDictKeyEntry);
  ------------------
  |  Branch (851:25): [True: 1.10M, False: 119k]
  ------------------
  852|       |
  853|  1.22M|    int log2_bytes = get_log2_bytes(log2_size);
  854|       |
  855|  1.22M|    PyDictKeysObject *dk = NULL;
  856|  1.22M|    if (log2_size == PyDict_LOG_MINSIZE && unicode) {
  ------------------
  |  |  115|  2.44M|#define PyDict_LOG_MINSIZE 3
  ------------------
  |  Branch (856:9): [True: 757k, False: 463k]
  |  Branch (856:44): [True: 682k, False: 74.3k]
  ------------------
  857|   682k|        dk = _Py_FREELIST_POP_MEM(dictkeys);
  ------------------
  |  |   48|   682k|    _PyFreeList_PopMem(&_Py_freelists_GET()->NAME)
  ------------------
  858|   682k|    }
  859|  1.22M|    if (dk == NULL) {
  ------------------
  |  Branch (859:9): [True: 604k, False: 615k]
  ------------------
  860|   604k|        dk = PyMem_Malloc(sizeof(PyDictKeysObject)
  861|   604k|                          + ((size_t)1 << log2_bytes)
  862|   604k|                          + entry_size * usable);
  863|   604k|        if (dk == NULL) {
  ------------------
  |  Branch (863:13): [True: 0, False: 604k]
  ------------------
  864|      0|            PyErr_NoMemory();
  865|      0|            return NULL;
  866|      0|        }
  867|   604k|    }
  868|  1.22M|    init_keys_object(dk, log2_size, log2_bytes,
  869|  1.22M|                     unicode ? DICT_KEYS_UNICODE : DICT_KEYS_GENERAL,
  ------------------
  |  Branch (869:22): [True: 1.10M, False: 119k]
  ------------------
  870|  1.22M|                     usable, entry_size);
  871|  1.22M|    return dk;
  872|  1.22M|}
dictobject.c:dict_getitem:
 2427|    525|{
 2428|    525|    if (!PyAnyDict_Check(op)) {
  ------------------
  |  |   43|    525|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|    525|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  1.05k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 525, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2429|      0|        return NULL;
 2430|      0|    }
 2431|    525|    PyDictObject *mp = (PyDictObject *)op;
 2432|       |
 2433|    525|    Py_hash_t hash = _PyObject_HashDictKey(key);
 2434|    525|    if (hash == -1) {
  ------------------
  |  Branch (2434:9): [True: 0, False: 525]
  ------------------
 2435|      0|        PyErr_FormatUnraisable(warnmsg);
 2436|      0|        return NULL;
 2437|      0|    }
 2438|       |
 2439|    525|    PyThreadState *tstate = _PyThreadState_GET();
 2440|       |#ifdef Py_DEBUG
 2441|       |    // bpo-40839: Before Python 3.10, it was possible to call PyDict_GetItem()
 2442|       |    // with the GIL released.
 2443|       |    _Py_EnsureTstateNotNULL(tstate);
 2444|       |#endif
 2445|       |
 2446|       |    /* Preserve the existing exception */
 2447|    525|    PyObject *value;
 2448|    525|    Py_ssize_t ix; (void)ix;
 2449|       |
 2450|    525|    PyObject *exc = _PyErr_GetRaisedException(tstate);
 2451|       |#ifdef Py_GIL_DISABLED
 2452|       |    ix = _Py_dict_lookup_threadsafe(mp, key, hash, &value);
 2453|       |    Py_XDECREF(value);
 2454|       |#else
 2455|    525|    ix = _Py_dict_lookup(mp, key, hash, &value);
 2456|    525|#endif
 2457|       |
 2458|       |    /* Ignore any exception raised by the lookup */
 2459|    525|    PyObject *exc2 = _PyErr_Occurred(tstate);
 2460|    525|    if (exc2 && !PyErr_GivenExceptionMatches(exc2, PyExc_KeyError)) {
  ------------------
  |  Branch (2460:9): [True: 0, False: 525]
  |  Branch (2460:17): [True: 0, False: 0]
  ------------------
 2461|      0|        PyErr_FormatUnraisable(warnmsg);
 2462|      0|    }
 2463|    525|    _PyErr_SetRaisedException(tstate, exc);
 2464|       |
 2465|    525|    assert(ix >= 0 || value == NULL);
  ------------------
  |  Branch (2465:5): [True: 519, False: 6]
  |  Branch (2465:5): [True: 6, False: 0]
  ------------------
 2466|    525|    return value;  // borrowed reference
 2467|    525|}
dictobject.c:setitem_take2_lock_held:
 2822|  4.31M|{
 2823|  4.31M|    Py_hash_t hash = _PyObject_HashDictKey(key);
 2824|  4.31M|    if (hash == -1) {
  ------------------
  |  Branch (2824:9): [True: 0, False: 4.31M]
  ------------------
 2825|      0|        dict_unhashable_type((PyObject*)mp, key);
 2826|      0|        Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2827|      0|        Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2828|      0|        return -1;
 2829|      0|    }
 2830|       |
 2831|  4.31M|    return setitem_take2_lock_held_known_hash(mp, key, value, hash);
 2832|  4.31M|}
dictobject.c:setitem_take2_lock_held_known_hash:
 2807|  4.31M|{
 2808|  4.31M|    assert(PyAnyDict_Check(mp));
  ------------------
  |  Branch (2808:5): [True: 4.31M, False: 0]
  |  Branch (2808:5): [True: 0, False: 0]
  ------------------
 2809|  4.31M|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (2809:5): [True: 4.31M, False: 0]
  ------------------
 2810|  4.31M|    assert(key);
  ------------------
  |  Branch (2810:5): [True: 4.31M, False: 0]
  ------------------
 2811|  4.31M|    assert(value);
  ------------------
  |  Branch (2811:5): [True: 4.31M, False: 0]
  ------------------
 2812|       |
 2813|  4.31M|    if (mp->ma_keys == Py_EMPTY_KEYS) {
  ------------------
  |  |  660|  4.31M|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
  |  Branch (2813:9): [True: 725k, False: 3.58M]
  ------------------
 2814|   725k|        return insert_to_emptydict(mp, key, hash, value);
 2815|   725k|    }
 2816|       |    /* insertdict() handles any resizing that might be necessary */
 2817|  3.58M|    return insertdict(mp, key, hash, value);
 2818|  4.31M|}
dictobject.c:setitem_lock_held:
 2892|  2.55M|{
 2893|  2.55M|    assert(key);
  ------------------
  |  Branch (2893:5): [True: 2.55M, False: 0]
  ------------------
 2894|  2.55M|    assert(value);
  ------------------
  |  Branch (2894:5): [True: 2.55M, False: 0]
  ------------------
 2895|  2.55M|    return setitem_take2_lock_held(mp,
 2896|  2.55M|                                   Py_NewRef(key), Py_NewRef(value));
  ------------------
  |  |  550|  2.55M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                                 Py_NewRef(key), Py_NewRef(value));
  ------------------
  |  |  550|  2.55M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2897|  2.55M|}
dictobject.c:insert_to_emptydict:
 2092|   735k|{
 2093|   735k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (2093:5): [True: 735k, False: 0]
  ------------------
 2094|   735k|    assert(mp->ma_keys == Py_EMPTY_KEYS);
  ------------------
  |  Branch (2094:5): [True: 735k, False: 0]
  ------------------
 2095|       |
 2096|   735k|    int unicode = PyUnicode_CheckExact(key);
  ------------------
  |  |  104|   735k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   735k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   735k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   735k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2097|   735k|    PyDictKeysObject *newkeys = new_keys_object(PyDict_LOG_MINSIZE, unicode);
  ------------------
  |  |  115|   735k|#define PyDict_LOG_MINSIZE 3
  ------------------
 2098|   735k|    if (newkeys == NULL) {
  ------------------
  |  Branch (2098:9): [True: 0, False: 735k]
  ------------------
 2099|      0|        Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2100|      0|        Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2101|      0|        return -1;
 2102|      0|    }
 2103|   735k|    _PyDict_NotifyEvent(PyDict_EVENT_ADDED, mp, key, value);
 2104|       |
 2105|       |    /* We don't decref Py_EMPTY_KEYS here because it is immortal. */
 2106|   735k|    assert(mp->ma_values == NULL);
  ------------------
  |  Branch (2106:5): [True: 735k, False: 0]
  ------------------
 2107|       |
 2108|   735k|    size_t hashpos = (size_t)hash & (PyDict_MINSIZE-1);
  ------------------
  |  |  116|   735k|#define PyDict_MINSIZE 8
  ------------------
 2109|   735k|    dictkeys_set_index(newkeys, hashpos, 0);
 2110|   735k|    if (unicode) {
  ------------------
  |  Branch (2110:9): [True: 682k, False: 52.9k]
  ------------------
 2111|   682k|        PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(newkeys);
 2112|   682k|        ep->me_key = key;
 2113|   682k|        STORE_VALUE(ep, value);
  ------------------
  |  |  331|   682k|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|   682k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2114|   682k|    }
 2115|  52.9k|    else {
 2116|  52.9k|        PyDictKeyEntry *ep = DK_ENTRIES(newkeys);
 2117|  52.9k|        ep->me_key = key;
 2118|  52.9k|        ep->me_hash = hash;
 2119|  52.9k|        STORE_VALUE(ep, value);
  ------------------
  |  |  331|  52.9k|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|  52.9k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2120|  52.9k|    }
 2121|   735k|    STORE_USED(mp, mp->ma_used + 1);
  ------------------
  |  |  336|   735k|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|   735k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2122|   735k|    newkeys->dk_usable--;
 2123|   735k|    newkeys->dk_nentries++;
 2124|       |    // We store the keys last so no one can see them in a partially inconsistent
 2125|       |    // state so that we don't need to switch the keys to being shared yet for
 2126|       |    // the case where we're inserting from the non-owner thread.  We don't use
 2127|       |    // set_keys here because the transition from empty to non-empty is safe
 2128|       |    // as the empty keys will never be freed.
 2129|   735k|    FT_ATOMIC_STORE_PTR_RELEASE(mp->ma_keys, newkeys);
  ------------------
  |  |  164|   735k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 2130|   735k|    return 0;
 2131|   735k|}
dictobject.c:dictkeys_set_index:
  553|  7.50M|{
  554|  7.50M|    int log2size = DK_LOG_SIZE(keys);
  ------------------
  |  |  272|  7.50M|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  ------------------
  |  |  |  |  302|  7.50M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  555|       |
  556|  7.50M|    assert(ix >= DKIX_DUMMY);
  ------------------
  |  Branch (556:5): [True: 7.50M, False: 0]
  ------------------
  557|  7.50M|    assert(keys->dk_version == 0);
  ------------------
  |  Branch (557:5): [True: 7.50M, False: 0]
  ------------------
  558|       |
  559|  7.50M|    if (log2size < 8) {
  ------------------
  |  Branch (559:9): [True: 6.85M, False: 648k]
  ------------------
  560|  6.85M|        assert(ix <= 0x7f);
  ------------------
  |  Branch (560:9): [True: 6.85M, False: 0]
  ------------------
  561|  6.85M|        STORE_INDEX(keys, 8, i, ix);
  ------------------
  |  |  272|  6.85M|#define STORE_INDEX(keys, size, idx, value) ((int##size##_t*)(keys->dk_indices))[idx] = (int##size##_t)value
  ------------------
  562|  6.85M|    }
  563|   648k|    else if (log2size < 16) {
  ------------------
  |  Branch (563:14): [True: 604k, False: 44.3k]
  ------------------
  564|   604k|        assert(ix <= 0x7fff);
  ------------------
  |  Branch (564:9): [True: 604k, False: 0]
  ------------------
  565|   604k|        STORE_INDEX(keys, 16, i, ix);
  ------------------
  |  |  272|   604k|#define STORE_INDEX(keys, size, idx, value) ((int##size##_t*)(keys->dk_indices))[idx] = (int##size##_t)value
  ------------------
  566|   604k|    }
  567|  44.3k|#if SIZEOF_VOID_P > 4
  568|  44.3k|    else if (log2size >= 32) {
  ------------------
  |  Branch (568:14): [True: 0, False: 44.3k]
  ------------------
  569|      0|        STORE_INDEX(keys, 64, i, ix);
  ------------------
  |  |  272|      0|#define STORE_INDEX(keys, size, idx, value) ((int##size##_t*)(keys->dk_indices))[idx] = (int##size##_t)value
  ------------------
  570|      0|    }
  571|  44.3k|#endif
  572|  44.3k|    else {
  573|  44.3k|        assert(ix <= 0x7fffffff);
  ------------------
  |  Branch (573:9): [True: 44.3k, False: 0]
  ------------------
  574|  44.3k|        STORE_INDEX(keys, 32, i, ix);
  ------------------
  |  |  272|  44.3k|#define STORE_INDEX(keys, size, idx, value) ((int##size##_t*)(keys->dk_indices))[idx] = (int##size##_t)value
  ------------------
  575|  44.3k|    }
  576|  7.50M|}
dictobject.c:insertdict:
 2021|  3.59M|{
 2022|  3.59M|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (2022:5): [True: 3.59M, False: 0]
  ------------------
 2023|       |
 2024|  3.59M|    PyObject *old_value = NULL;
 2025|  3.59M|    Py_ssize_t ix;
 2026|       |
 2027|  3.59M|    if (_PyDict_HasSplitTable(mp) && PyUnicode_CheckExact(key)) {
  ------------------
  |  |   56|  7.19M|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 1.30k, False: 3.59M]
  |  |  ------------------
  ------------------
                  if (_PyDict_HasSplitTable(mp) && PyUnicode_CheckExact(key)) {
  ------------------
  |  |  104|  1.30k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  1.30k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.30k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.30k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.30k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2028|  1.30k|        ix = insert_split_key(mp->ma_keys, key, hash);
 2029|  1.30k|        if (ix != DKIX_EMPTY) {
  ------------------
  |  |  185|  1.30k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (2029:13): [True: 1.30k, False: 0]
  ------------------
 2030|  1.30k|            _PyDict_InsertSplitValue(mp, key, value, ix);
 2031|  1.30k|            Py_DECREF(key);
  ------------------
  |  |  430|  1.30k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.30k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.30k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2032|  1.30k|            Py_DECREF(value);
  ------------------
  |  |  430|  1.30k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.30k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.30k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2033|  1.30k|            return 0;
 2034|  1.30k|        }
 2035|       |        // No space in shared keys. Go to insert_combined_dict() below.
 2036|  1.30k|    }
 2037|  3.59M|    else {
 2038|  3.59M|        ix = _Py_dict_lookup(mp, key, hash, &old_value);
 2039|  3.59M|        if (ix == DKIX_ERROR)
  ------------------
  |  |  187|  3.59M|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (2039:13): [True: 0, False: 3.59M]
  ------------------
 2040|      0|            goto Fail;
 2041|  3.59M|    }
 2042|       |
 2043|  3.59M|    if (old_value == NULL) {
  ------------------
  |  Branch (2043:9): [True: 3.06M, False: 533k]
  ------------------
 2044|       |        // insert_combined_dict() will convert from non DICT_KEYS_GENERAL table
 2045|       |        // into DICT_KEYS_GENERAL table if key is not Unicode.
 2046|       |        // We don't convert it before _Py_dict_lookup because non-Unicode key
 2047|       |        // may change generic table into Unicode table.
 2048|       |        //
 2049|       |        // NOTE: ix may not be DKIX_EMPTY because split table may have key
 2050|       |        // without value.
 2051|  3.06M|        if (insert_combined_dict(mp, hash, key, value) < 0) {
  ------------------
  |  Branch (2051:13): [True: 0, False: 3.06M]
  ------------------
 2052|      0|            goto Fail;
 2053|      0|        }
 2054|  3.06M|        STORE_USED(mp, mp->ma_used + 1);
  ------------------
  |  |  336|  3.06M|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|  3.06M|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2055|  3.06M|        ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|  3.06M|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (2055:9): [True: 3.06M, False: 0]
  ------------------
 2056|  3.06M|        return 0;
 2057|  3.06M|    }
 2058|       |
 2059|   533k|    if (old_value != value) {
  ------------------
  |  Branch (2059:9): [True: 268k, False: 264k]
  ------------------
 2060|   268k|        _PyDict_NotifyEvent(PyDict_EVENT_MODIFIED, mp, key, value);
 2061|   268k|        assert(old_value != NULL);
  ------------------
  |  Branch (2061:9): [True: 268k, False: 0]
  ------------------
 2062|   268k|        if (DK_IS_UNICODE(mp->ma_keys)) {
  ------------------
  |  |  294|   268k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 267k, False: 1.67k]
  |  |  ------------------
  ------------------
 2063|   267k|            if (_PyDict_HasSplitTable(mp)) {
  ------------------
  |  |   56|   267k|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 267k]
  |  |  ------------------
  ------------------
 2064|      0|                STORE_SPLIT_VALUE(mp, ix, value);
  ------------------
  |  |  332|      0|#define STORE_SPLIT_VALUE(mp, idx, value) FT_ATOMIC_STORE_PTR_RELEASE(mp->ma_values->values[idx], value)
  |  |  ------------------
  |  |  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2065|      0|            }
 2066|   267k|            else {
 2067|   267k|                PyDictUnicodeEntry *ep = &DK_UNICODE_ENTRIES(mp->ma_keys)[ix];
 2068|   267k|                STORE_VALUE(ep, value);
  ------------------
  |  |  331|   267k|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|   267k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2069|   267k|            }
 2070|   267k|        }
 2071|  1.67k|        else {
 2072|  1.67k|            PyDictKeyEntry *ep = &DK_ENTRIES(mp->ma_keys)[ix];
 2073|  1.67k|            STORE_VALUE(ep, value);
  ------------------
  |  |  331|  1.67k|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|  1.67k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2074|  1.67k|        }
 2075|   268k|    }
 2076|   533k|    Py_XDECREF(old_value); /* which **CAN** re-enter (see issue #22653) */
  ------------------
  |  |  524|   533k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   533k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   533k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2077|   533k|    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|   533k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (2077:5): [True: 533k, False: 0]
  ------------------
 2078|   533k|    Py_DECREF(key);
  ------------------
  |  |  430|   533k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   533k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   533k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2079|   533k|    return 0;
 2080|       |
 2081|      0|Fail:
 2082|      0|    Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2083|      0|    Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2084|      0|    return -1;
 2085|   533k|}
dictobject.c:insert_combined_dict:
 1901|  3.52M|{
 1902|       |    // gh-140551: If dict was cleared in _Py_dict_lookup,
 1903|       |    // we have to resize one more time to force general key kind.
 1904|  3.52M|    if (DK_IS_UNICODE(mp->ma_keys) && !PyUnicode_CheckExact(key)) {
  ------------------
  |  |  294|  7.05M|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 2.84M, False: 684k]
  |  |  ------------------
  ------------------
                  if (DK_IS_UNICODE(mp->ma_keys) && !PyUnicode_CheckExact(key)) {
  ------------------
  |  |  104|  2.84M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  2.84M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.84M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.84M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1904:39): [True: 22.1k, False: 2.82M]
  ------------------
 1905|  22.1k|        if (insertion_resize(mp, 0) < 0)
  ------------------
  |  Branch (1905:13): [True: 0, False: 22.1k]
  ------------------
 1906|      0|            return -1;
 1907|  22.1k|        assert(mp->ma_keys->dk_kind == DICT_KEYS_GENERAL);
  ------------------
  |  Branch (1907:9): [True: 22.1k, False: 0]
  ------------------
 1908|  22.1k|    }
 1909|       |
 1910|  3.52M|    if (mp->ma_keys->dk_usable <= 0) {
  ------------------
  |  Branch (1910:9): [True: 462k, False: 3.06M]
  ------------------
 1911|       |        /* Need to resize. */
 1912|   462k|        if (insertion_resize(mp, 1) < 0) {
  ------------------
  |  Branch (1912:13): [True: 0, False: 462k]
  ------------------
 1913|      0|            return -1;
 1914|      0|        }
 1915|   462k|    }
 1916|       |
 1917|  3.52M|    _PyDict_NotifyEvent(PyDict_EVENT_ADDED, mp, key, value);
 1918|  3.52M|    FT_ATOMIC_STORE_UINT32_RELAXED(mp->ma_keys->dk_version, 0);
  ------------------
  |  |  172|  3.52M|#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value
  ------------------
 1919|       |
 1920|  3.52M|    Py_ssize_t hashpos = find_empty_slot(mp->ma_keys, hash);
 1921|  3.52M|    dictkeys_set_index(mp->ma_keys, hashpos, mp->ma_keys->dk_nentries);
 1922|       |
 1923|  3.52M|    if (DK_IS_UNICODE(mp->ma_keys)) {
  ------------------
  |  |  294|  3.52M|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 2.82M, False: 706k]
  |  |  ------------------
  ------------------
 1924|  2.82M|        PyDictUnicodeEntry *ep;
 1925|  2.82M|        ep = &DK_UNICODE_ENTRIES(mp->ma_keys)[mp->ma_keys->dk_nentries];
 1926|  2.82M|        STORE_KEY(ep, key);
  ------------------
  |  |  330|  2.82M|#define STORE_KEY(ep, key) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_key, key)
  |  |  ------------------
  |  |  |  |  164|  2.82M|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1927|  2.82M|        STORE_VALUE(ep, value);
  ------------------
  |  |  331|  2.82M|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|  2.82M|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1928|  2.82M|    }
 1929|   706k|    else {
 1930|   706k|        PyDictKeyEntry *ep;
 1931|   706k|        ep = &DK_ENTRIES(mp->ma_keys)[mp->ma_keys->dk_nentries];
 1932|   706k|        STORE_KEY(ep, key);
  ------------------
  |  |  330|   706k|#define STORE_KEY(ep, key) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_key, key)
  |  |  ------------------
  |  |  |  |  164|   706k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1933|   706k|        STORE_VALUE(ep, value);
  ------------------
  |  |  331|   706k|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|   706k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1934|   706k|        STORE_HASH(ep, hash);
  ------------------
  |  |  333|   706k|#define STORE_HASH(ep, hash) FT_ATOMIC_STORE_SSIZE_RELAXED((ep)->me_hash, hash)
  |  |  ------------------
  |  |  |  |  194|   706k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1935|   706k|    }
 1936|  3.52M|    STORE_KEYS_USABLE(mp->ma_keys, mp->ma_keys->dk_usable - 1);
  ------------------
  |  |  334|  3.52M|#define STORE_KEYS_USABLE(keys, usable) FT_ATOMIC_STORE_SSIZE_RELAXED(keys->dk_usable, usable)
  |  |  ------------------
  |  |  |  |  194|  3.52M|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1937|  3.52M|    STORE_KEYS_NENTRIES(mp->ma_keys, mp->ma_keys->dk_nentries + 1);
  ------------------
  |  |  335|  3.52M|#define STORE_KEYS_NENTRIES(keys, nentries) FT_ATOMIC_STORE_SSIZE_RELAXED(keys->dk_nentries, nentries)
  |  |  ------------------
  |  |  |  |  194|  3.52M|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 1938|  3.52M|    assert(mp->ma_keys->dk_usable >= 0);
  ------------------
  |  Branch (1938:5): [True: 3.52M, False: 0]
  ------------------
 1939|  3.52M|    return 0;
 1940|  3.52M|}
dictobject.c:insertion_resize:
 1894|   484k|{
 1895|   484k|    return dictresize(mp, calculate_log2_keysize(GROWTH_RATE(mp)), unicode);
  ------------------
  |  |  637|   484k|#define GROWTH_RATE(d) ((d)->ma_used*3)
  ------------------
 1896|   484k|}
dictobject.c:dictresize:
 2194|   484k|{
 2195|   484k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (2195:5): [True: 484k, False: 0]
  ------------------
 2196|       |
 2197|   484k|    PyDictKeysObject *oldkeys, *newkeys;
 2198|   484k|    PyDictValues *oldvalues;
 2199|       |
 2200|   484k|    if (log2_newsize >= SIZEOF_SIZE_T*8) {
  ------------------
  |  | 1955|   484k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (2200:9): [True: 0, False: 484k]
  ------------------
 2201|      0|        PyErr_NoMemory();
 2202|      0|        return -1;
 2203|      0|    }
 2204|   484k|    assert(log2_newsize >= PyDict_LOG_MINSIZE);
  ------------------
  |  Branch (2204:5): [True: 484k, False: 0]
  ------------------
 2205|       |
 2206|   484k|    oldkeys = mp->ma_keys;
 2207|   484k|    oldvalues = mp->ma_values;
 2208|       |
 2209|   484k|    if (!DK_IS_UNICODE(oldkeys)) {
  ------------------
  |  |  294|   484k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  ------------------
  |  Branch (2209:9): [True: 44.0k, False: 440k]
  ------------------
 2210|  44.0k|        unicode = 0;
 2211|  44.0k|    }
 2212|       |
 2213|   484k|    ensure_shared_on_resize(mp);
 2214|       |    /* NOTE: Current odict checks mp->ma_keys to detect resize happen.
 2215|       |     * So we can't reuse oldkeys even if oldkeys->dk_size == newsize.
 2216|       |     * TODO: Try reusing oldkeys when reimplement odict.
 2217|       |     */
 2218|       |
 2219|       |    /* Allocate a new table. */
 2220|   484k|    newkeys = new_keys_object(log2_newsize, unicode);
 2221|   484k|    if (newkeys == NULL) {
  ------------------
  |  Branch (2221:9): [True: 0, False: 484k]
  ------------------
 2222|      0|        return -1;
 2223|      0|    }
 2224|       |    // New table must be large enough.
 2225|   484k|    assert(newkeys->dk_usable >= mp->ma_used);
  ------------------
  |  Branch (2225:5): [True: 484k, False: 0]
  ------------------
 2226|       |
 2227|   484k|    Py_ssize_t numentries = mp->ma_used;
 2228|       |
 2229|   484k|    if (oldvalues != NULL) {
  ------------------
  |  Branch (2229:9): [True: 0, False: 484k]
  ------------------
 2230|      0|        LOCK_KEYS(oldkeys);
 2231|      0|        PyDictUnicodeEntry *oldentries = DK_UNICODE_ENTRIES(oldkeys);
 2232|       |        /* Convert split table into new combined table.
 2233|       |         * We must incref keys; we can transfer values.
 2234|       |         */
 2235|      0|        if (newkeys->dk_kind == DICT_KEYS_GENERAL) {
  ------------------
  |  Branch (2235:13): [True: 0, False: 0]
  ------------------
 2236|       |            // split -> generic
 2237|      0|            PyDictKeyEntry *newentries = DK_ENTRIES(newkeys);
 2238|       |
 2239|      0|            for (Py_ssize_t i = 0; i < numentries; i++) {
  ------------------
  |  Branch (2239:36): [True: 0, False: 0]
  ------------------
 2240|      0|                int index = get_index_from_order(mp, i);
 2241|      0|                PyDictUnicodeEntry *ep = &oldentries[index];
 2242|      0|                assert(oldvalues->values[index] != NULL);
  ------------------
  |  Branch (2242:17): [True: 0, False: 0]
  ------------------
 2243|      0|                newentries[i].me_key = Py_NewRef(ep->me_key);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2244|      0|                newentries[i].me_hash = unicode_get_hash(ep->me_key);
 2245|      0|                newentries[i].me_value = oldvalues->values[index];
 2246|      0|            }
 2247|      0|            build_indices_generic(newkeys, newentries, numentries);
 2248|      0|        }
 2249|      0|        else { // split -> combined unicode
 2250|      0|            PyDictUnicodeEntry *newentries = DK_UNICODE_ENTRIES(newkeys);
 2251|       |
 2252|      0|            for (Py_ssize_t i = 0; i < numentries; i++) {
  ------------------
  |  Branch (2252:36): [True: 0, False: 0]
  ------------------
 2253|      0|                int index = get_index_from_order(mp, i);
 2254|      0|                PyDictUnicodeEntry *ep = &oldentries[index];
 2255|      0|                assert(oldvalues->values[index] != NULL);
  ------------------
  |  Branch (2255:17): [True: 0, False: 0]
  ------------------
 2256|      0|                newentries[i].me_key = Py_NewRef(ep->me_key);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2257|      0|                newentries[i].me_value = oldvalues->values[index];
 2258|      0|            }
 2259|      0|            build_indices_unicode(newkeys, newentries, numentries);
 2260|      0|        }
 2261|      0|        UNLOCK_KEYS(oldkeys);
 2262|      0|        set_keys(mp, newkeys);
 2263|      0|        dictkeys_decref(oldkeys, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|      0|#define IS_DICT_SHARED(mp) (false)
  ------------------
 2264|      0|        set_values(mp, NULL);
 2265|      0|        if (oldvalues->embedded) {
  ------------------
  |  Branch (2265:13): [True: 0, False: 0]
  ------------------
 2266|      0|            assert(oldvalues->embedded == 1);
  ------------------
  |  Branch (2266:13): [True: 0, False: 0]
  ------------------
 2267|      0|            assert(oldvalues->valid == 1);
  ------------------
  |  Branch (2267:13): [True: 0, False: 0]
  ------------------
 2268|      0|            invalidate_and_clear_inline_values(oldvalues);
 2269|      0|        }
 2270|      0|        else {
 2271|      0|            free_values(oldvalues, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|      0|#define IS_DICT_SHARED(mp) (false)
  ------------------
 2272|      0|        }
 2273|      0|    }
 2274|   484k|    else {  // oldkeys is combined.
 2275|   484k|        if (oldkeys->dk_kind == DICT_KEYS_GENERAL) {
  ------------------
  |  Branch (2275:13): [True: 44.0k, False: 440k]
  ------------------
 2276|       |            // generic -> generic
 2277|  44.0k|            assert(newkeys->dk_kind == DICT_KEYS_GENERAL);
  ------------------
  |  Branch (2277:13): [True: 44.0k, False: 0]
  ------------------
 2278|  44.0k|            PyDictKeyEntry *oldentries = DK_ENTRIES(oldkeys);
 2279|  44.0k|            PyDictKeyEntry *newentries = DK_ENTRIES(newkeys);
 2280|  44.0k|            if (oldkeys->dk_nentries == numentries) {
  ------------------
  |  Branch (2280:17): [True: 44.0k, False: 72]
  ------------------
 2281|  44.0k|                memcpy(newentries, oldentries, numentries * sizeof(PyDictKeyEntry));
 2282|  44.0k|            }
 2283|     72|            else {
 2284|     72|                PyDictKeyEntry *ep = oldentries;
 2285|     72|                for (Py_ssize_t i = 0; i < numentries; i++) {
  ------------------
  |  Branch (2285:40): [True: 0, False: 72]
  ------------------
 2286|      0|                    while (ep->me_value == NULL)
  ------------------
  |  Branch (2286:28): [True: 0, False: 0]
  ------------------
 2287|      0|                        ep++;
 2288|      0|                    newentries[i] = *ep++;
 2289|      0|                }
 2290|     72|            }
 2291|  44.0k|            build_indices_generic(newkeys, newentries, numentries);
 2292|  44.0k|        }
 2293|   440k|        else {  // oldkeys is combined unicode
 2294|   440k|            PyDictUnicodeEntry *oldentries = DK_UNICODE_ENTRIES(oldkeys);
 2295|   440k|            if (unicode) { // combined unicode -> combined unicode
  ------------------
  |  Branch (2295:17): [True: 418k, False: 22.1k]
  ------------------
 2296|   418k|                PyDictUnicodeEntry *newentries = DK_UNICODE_ENTRIES(newkeys);
 2297|   418k|                if (oldkeys->dk_nentries == numentries && mp->ma_keys->dk_kind == DICT_KEYS_UNICODE) {
  ------------------
  |  Branch (2297:21): [True: 418k, False: 256]
  |  Branch (2297:59): [True: 418k, False: 0]
  ------------------
 2298|   418k|                    memcpy(newentries, oldentries, numentries * sizeof(PyDictUnicodeEntry));
 2299|   418k|                }
 2300|    256|                else {
 2301|    256|                    PyDictUnicodeEntry *ep = oldentries;
 2302|  32.5k|                    for (Py_ssize_t i = 0; i < numentries; i++) {
  ------------------
  |  Branch (2302:44): [True: 32.3k, False: 256]
  ------------------
 2303|  40.2k|                        while (ep->me_value == NULL)
  ------------------
  |  Branch (2303:32): [True: 7.98k, False: 32.3k]
  ------------------
 2304|  7.98k|                            ep++;
 2305|  32.3k|                        newentries[i] = *ep++;
 2306|  32.3k|                    }
 2307|    256|                }
 2308|   418k|                build_indices_unicode(newkeys, newentries, numentries);
 2309|   418k|            }
 2310|  22.1k|            else { // combined unicode -> generic
 2311|  22.1k|                PyDictKeyEntry *newentries = DK_ENTRIES(newkeys);
 2312|  22.1k|                PyDictUnicodeEntry *ep = oldentries;
 2313|  52.3k|                for (Py_ssize_t i = 0; i < numentries; i++) {
  ------------------
  |  Branch (2313:40): [True: 30.1k, False: 22.1k]
  ------------------
 2314|  30.1k|                    while (ep->me_value == NULL)
  ------------------
  |  Branch (2314:28): [True: 0, False: 30.1k]
  ------------------
 2315|      0|                        ep++;
 2316|  30.1k|                    newentries[i].me_key = ep->me_key;
 2317|  30.1k|                    newentries[i].me_hash = unicode_get_hash(ep->me_key);
 2318|  30.1k|                    newentries[i].me_value = ep->me_value;
 2319|  30.1k|                    ep++;
 2320|  30.1k|                }
 2321|  22.1k|                build_indices_generic(newkeys, newentries, numentries);
 2322|  22.1k|            }
 2323|   440k|        }
 2324|       |
 2325|   484k|        set_keys(mp, newkeys);
 2326|       |
 2327|   484k|        if (oldkeys != Py_EMPTY_KEYS) {
  ------------------
  |  |  660|   484k|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
  |  Branch (2327:13): [True: 484k, False: 0]
  ------------------
 2328|       |#ifdef Py_REF_DEBUG
 2329|       |            _Py_DecRefTotal(_PyThreadState_GET());
 2330|       |#endif
 2331|   484k|            assert(oldkeys->dk_kind != DICT_KEYS_SPLIT);
  ------------------
  |  Branch (2331:13): [True: 484k, False: 0]
  ------------------
 2332|   484k|            assert(oldkeys->dk_refcnt == 1);
  ------------------
  |  Branch (2332:13): [True: 484k, False: 0]
  ------------------
 2333|   484k|            free_keys_object(oldkeys, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|   484k|#define IS_DICT_SHARED(mp) (false)
  ------------------
 2334|   484k|        }
 2335|   484k|    }
 2336|       |
 2337|   484k|    STORE_KEYS_USABLE(mp->ma_keys, mp->ma_keys->dk_usable - numentries);
  ------------------
  |  |  334|   484k|#define STORE_KEYS_USABLE(keys, usable) FT_ATOMIC_STORE_SSIZE_RELAXED(keys->dk_usable, usable)
  |  |  ------------------
  |  |  |  |  194|   484k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2338|   484k|    STORE_KEYS_NENTRIES(mp->ma_keys, numentries);
  ------------------
  |  |  335|   484k|#define STORE_KEYS_NENTRIES(keys, nentries) FT_ATOMIC_STORE_SSIZE_RELAXED(keys->dk_nentries, nentries)
  |  |  ------------------
  |  |  |  |  194|   484k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2339|   484k|    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|   484k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (2339:5): [True: 484k, False: 0]
  ------------------
 2340|   484k|    return 0;
 2341|   484k|}
dictobject.c:ensure_shared_on_resize:
 1450|   484k|{
 1451|       |#ifdef Py_GIL_DISABLED
 1452|       |    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(mp);
 1453|       |
 1454|       |    if (!_Py_IsOwnedByCurrentThread((PyObject *)mp) && !IS_DICT_SHARED(mp)) {
 1455|       |        // We are writing to the dict from another thread that owns
 1456|       |        // it and we haven't marked it as shared which will ensure
 1457|       |        // that when we re-size ma_keys or ma_values that we will
 1458|       |        // free using QSBR.  We need to lock the dictionary to
 1459|       |        // contend with writes from the owning thread, mark it as
 1460|       |        // shared, and then we can continue with lock-free reads.
 1461|       |        // Technically this is a little heavy handed, we could just
 1462|       |        // free the individual old keys / old-values using qsbr
 1463|       |        SET_DICT_SHARED(mp);
 1464|       |    }
 1465|       |#endif
 1466|   484k|}
dictobject.c:build_indices_generic:
 2138|  66.2k|{
 2139|  66.2k|    size_t mask = DK_MASK(keys);
  ------------------
  |  |  467|  66.2k|#define DK_MASK(dk) (DK_SIZE(dk)-1)
  |  |  ------------------
  |  |  |  |  274|  66.2k|#define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
  |  |  |  |  ------------------
  |  |  |  |  |  |  272|  66.2k|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  302|  66.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2140|   886k|    for (Py_ssize_t ix = 0; ix != n; ix++, ep++) {
  ------------------
  |  Branch (2140:29): [True: 819k, False: 66.2k]
  ------------------
 2141|   819k|        Py_hash_t hash = ep->me_hash;
 2142|   819k|        size_t i = hash & mask;
 2143|  1.04M|        for (size_t perturb = hash; dictkeys_get_index(keys, i) != DKIX_EMPTY;) {
  ------------------
  |  |  185|  1.04M|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (2143:37): [True: 222k, False: 819k]
  ------------------
 2144|   222k|            perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  338|   222k|#define PERTURB_SHIFT 5
  ------------------
 2145|   222k|            i = mask & (i*5 + perturb + 1);
 2146|   222k|        }
 2147|   819k|        dictkeys_set_index(keys, i, ix);
 2148|   819k|    }
 2149|  66.2k|}
dictobject.c:build_indices_unicode:
 2153|   418k|{
 2154|   418k|    size_t mask = DK_MASK(keys);
  ------------------
  |  |  467|   418k|#define DK_MASK(dk) (DK_SIZE(dk)-1)
  |  |  ------------------
  |  |  |  |  274|   418k|#define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
  |  |  |  |  ------------------
  |  |  |  |  |  |  272|   418k|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  302|   418k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2155|  2.82M|    for (Py_ssize_t ix = 0; ix != n; ix++, ep++) {
  ------------------
  |  Branch (2155:29): [True: 2.40M, False: 418k]
  ------------------
 2156|  2.40M|        Py_hash_t hash = unicode_get_hash(ep->me_key);
 2157|  2.40M|        assert(hash != -1);
  ------------------
  |  Branch (2157:9): [True: 2.40M, False: 0]
  ------------------
 2158|  2.40M|        size_t i = hash & mask;
 2159|  2.89M|        for (size_t perturb = hash; dictkeys_get_index(keys, i) != DKIX_EMPTY;) {
  ------------------
  |  |  185|  2.89M|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (2159:37): [True: 495k, False: 2.40M]
  ------------------
 2160|   495k|            perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  338|   495k|#define PERTURB_SHIFT 5
  ------------------
 2161|   495k|            i = mask & (i*5 + perturb + 1);
 2162|   495k|        }
 2163|  2.40M|        dictkeys_set_index(keys, i, ix);
 2164|  2.40M|    }
 2165|   418k|}
dictobject.c:free_keys_object:
  876|  1.21M|{
  877|  1.21M|    void *ptr = keys;
  878|       |#ifdef Py_GIL_DISABLED
  879|       |    size_t size = _PyDict_KeysSize(keys);
  880|       |#endif
  881|  1.21M|    if (keys->dk_kind == DICT_KEYS_SPLIT) {
  ------------------
  |  Branch (881:9): [True: 4, False: 1.21M]
  ------------------
  882|      4|        ptr = _PyDictKeys_AsSharedKeys(keys);
  883|       |#ifdef Py_GIL_DISABLED
  884|       |        size += offsetof(struct _instancekeysobject, dsk_keys);
  885|       |#endif
  886|      4|    }
  887|       |#ifdef Py_GIL_DISABLED
  888|       |    if (use_qsbr) {
  889|       |        _PyMem_FreeDelayed(ptr, size);
  890|       |        return;
  891|       |    }
  892|       |#endif
  893|  1.21M|    if (DK_LOG_SIZE(keys) == PyDict_LOG_MINSIZE && keys->dk_kind == DICT_KEYS_UNICODE) {
  ------------------
  |  |  272|  1.21M|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  ------------------
  |  |  |  |  302|  1.21M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                  if (DK_LOG_SIZE(keys) == PyDict_LOG_MINSIZE && keys->dk_kind == DICT_KEYS_UNICODE) {
  ------------------
  |  |  115|  2.43M|#define PyDict_LOG_MINSIZE 3
  ------------------
  |  Branch (893:9): [True: 756k, False: 463k]
  |  Branch (893:52): [True: 682k, False: 74.1k]
  ------------------
  894|   682k|        _Py_FREELIST_FREE(dictkeys, keys, PyMem_Free);
  ------------------
  |  |   35|   682k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|   682k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   682k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|   682k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   17|   682k|#  define Py_dictkeys_MAXFREELIST 80
  |  |  ------------------
  ------------------
  895|   682k|    }
  896|   537k|    else {
  897|   537k|        PyMem_Free(ptr);
  898|   537k|    }
  899|  1.21M|}
dictobject.c:find_empty_slot:
 1878|  3.52M|{
 1879|  3.52M|    assert(keys != NULL);
  ------------------
  |  Branch (1879:5): [True: 3.52M, False: 0]
  ------------------
 1880|       |
 1881|  3.52M|    const size_t mask = DK_MASK(keys);
  ------------------
  |  |  467|  3.52M|#define DK_MASK(dk) (DK_SIZE(dk)-1)
  |  |  ------------------
  |  |  |  |  274|  3.52M|#define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
  |  |  |  |  ------------------
  |  |  |  |  |  |  272|  3.52M|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  302|  3.52M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1882|  3.52M|    size_t i = hash & mask;
 1883|  3.52M|    Py_ssize_t ix = dictkeys_get_index(keys, i);
 1884|  5.90M|    for (size_t perturb = hash; is_unusable_slot(ix);) {
  ------------------
  |  Branch (1884:33): [True: 2.37M, False: 3.52M]
  ------------------
 1885|  2.37M|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  338|  2.37M|#define PERTURB_SHIFT 5
  ------------------
 1886|  2.37M|        i = (i*5 + perturb + 1) & mask;
 1887|  2.37M|        ix = dictkeys_get_index(keys, i);
 1888|  2.37M|    }
 1889|  3.52M|    return i;
 1890|  3.52M|}
dictobject.c:is_unusable_slot:
 1865|  5.90M|{
 1866|       |#ifdef Py_GIL_DISABLED
 1867|       |    return ix >= 0 || ix == DKIX_DUMMY;
 1868|       |#else
 1869|  5.90M|    return ix >= 0;
 1870|  5.90M|#endif
 1871|  5.90M|}
dictobject.c:delitem_common:
 2957|  17.6k|{
 2958|  17.6k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (2958:5): [True: 17.6k, False: 0]
  ------------------
 2959|       |
 2960|  17.6k|    PyObject *old_key;
 2961|       |
 2962|  17.6k|    Py_ssize_t hashpos = lookdict_index(mp->ma_keys, hash, ix);
 2963|  17.6k|    assert(hashpos >= 0);
  ------------------
  |  Branch (2963:5): [True: 17.6k, False: 0]
  ------------------
 2964|       |
 2965|  17.6k|    STORE_USED(mp, mp->ma_used - 1);
  ------------------
  |  |  336|  17.6k|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|  17.6k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2966|  17.6k|    if (_PyDict_HasSplitTable(mp)) {
  ------------------
  |  |   56|  17.6k|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 17.6k]
  |  |  ------------------
  ------------------
 2967|      0|        assert(old_value == mp->ma_values->values[ix]);
  ------------------
  |  Branch (2967:9): [True: 0, False: 0]
  ------------------
 2968|      0|        STORE_SPLIT_VALUE(mp, ix, NULL);
  ------------------
  |  |  332|      0|#define STORE_SPLIT_VALUE(mp, idx, value) FT_ATOMIC_STORE_PTR_RELEASE(mp->ma_values->values[idx], value)
  |  |  ------------------
  |  |  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2969|      0|        assert(ix < SHARED_KEYS_MAX_SIZE);
  ------------------
  |  Branch (2969:9): [True: 0, False: 0]
  ------------------
 2970|       |        /* Update order */
 2971|      0|        delete_index_from_values(mp->ma_values, ix);
 2972|      0|        ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|      0|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (2972:9): [True: 0, False: 0]
  ------------------
 2973|      0|    }
 2974|  17.6k|    else {
 2975|  17.6k|        FT_ATOMIC_STORE_UINT32_RELAXED(mp->ma_keys->dk_version, 0);
  ------------------
  |  |  172|  17.6k|#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value
  ------------------
 2976|  17.6k|        dictkeys_set_index(mp->ma_keys, hashpos, DKIX_DUMMY);
  ------------------
  |  |  186|  17.6k|#define DKIX_DUMMY (-2)  /* Used internally */
  ------------------
 2977|  17.6k|        if (DK_IS_UNICODE(mp->ma_keys)) {
  ------------------
  |  |  294|  17.6k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 17.2k, False: 375]
  |  |  ------------------
  ------------------
 2978|  17.2k|            PyDictUnicodeEntry *ep = &DK_UNICODE_ENTRIES(mp->ma_keys)[ix];
 2979|  17.2k|            old_key = ep->me_key;
 2980|  17.2k|            STORE_KEY(ep, NULL);
  ------------------
  |  |  330|  17.2k|#define STORE_KEY(ep, key) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_key, key)
  |  |  ------------------
  |  |  |  |  164|  17.2k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2981|  17.2k|            STORE_VALUE(ep, NULL);
  ------------------
  |  |  331|  17.2k|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|  17.2k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2982|  17.2k|        }
 2983|    375|        else {
 2984|    375|            PyDictKeyEntry *ep = &DK_ENTRIES(mp->ma_keys)[ix];
 2985|    375|            old_key = ep->me_key;
 2986|    375|            STORE_KEY(ep, NULL);
  ------------------
  |  |  330|    375|#define STORE_KEY(ep, key) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_key, key)
  |  |  ------------------
  |  |  |  |  164|    375|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2987|    375|            STORE_VALUE(ep, NULL);
  ------------------
  |  |  331|    375|#define STORE_VALUE(ep, value) FT_ATOMIC_STORE_PTR_RELEASE((ep)->me_value, value)
  |  |  ------------------
  |  |  |  |  164|    375|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2988|    375|            STORE_HASH(ep, 0);
  ------------------
  |  |  333|    375|#define STORE_HASH(ep, hash) FT_ATOMIC_STORE_SSIZE_RELAXED((ep)->me_hash, hash)
  |  |  ------------------
  |  |  |  |  194|    375|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 2989|    375|        }
 2990|  17.6k|        Py_DECREF(old_key);
  ------------------
  |  |  430|  17.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2991|  17.6k|    }
 2992|  17.6k|    Py_DECREF(old_value);
  ------------------
  |  |  430|  17.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2993|       |
 2994|       |    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|  17.6k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (2994:5): [True: 17.6k, False: 0]
  ------------------
 2995|  17.6k|}
dictobject.c:lookdict_index:
 1093|  17.6k|{
 1094|  17.6k|    size_t mask = DK_MASK(k);
  ------------------
  |  |  467|  17.6k|#define DK_MASK(dk) (DK_SIZE(dk)-1)
  |  |  ------------------
  |  |  |  |  274|  17.6k|#define DK_SIZE(dk)      (((int64_t)1)<<DK_LOG_SIZE(dk))
  |  |  |  |  ------------------
  |  |  |  |  |  |  272|  17.6k|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  302|  17.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1095|  17.6k|    size_t perturb = (size_t)hash;
 1096|  17.6k|    size_t i = (size_t)hash & mask;
 1097|       |
 1098|  22.3k|    for (;;) {
 1099|  22.3k|        Py_ssize_t ix = dictkeys_get_index(k, i);
 1100|  22.3k|        if (ix == index) {
  ------------------
  |  Branch (1100:13): [True: 17.6k, False: 4.72k]
  ------------------
 1101|  17.6k|            return i;
 1102|  17.6k|        }
 1103|  4.72k|        if (ix == DKIX_EMPTY) {
  ------------------
  |  |  185|  4.72k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (1103:13): [True: 0, False: 4.72k]
  ------------------
 1104|      0|            return DKIX_EMPTY;
  ------------------
  |  |  185|      0|#define DKIX_EMPTY (-1)
  ------------------
 1105|      0|        }
 1106|  4.72k|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  338|  4.72k|#define PERTURB_SHIFT 5
  ------------------
 1107|  4.72k|        i = mask & (i*5 + perturb + 1);
 1108|  4.72k|    }
 1109|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1110|  17.6k|}
dictobject.c:delitemif_lock_held:
 3057|    367|{
 3058|    367|    PyDictObject *mp = _PyAnyDict_CAST(op);
  ------------------
  |  |  326|    367|    (assert(PyAnyDict_Check(op)), _Py_CAST(PyDictObject*, op))
  |  |  ------------------
  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (3058:24): [True: 367, False: 0]
  |  Branch (3058:24): [True: 0, False: 0]
  ------------------
 3059|    367|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (3059:5): [True: 367, False: 0]
  ------------------
 3060|       |
 3061|    367|    Py_ssize_t ix;
 3062|    367|    Py_hash_t hash;
 3063|    367|    PyObject *old_value;
 3064|    367|    int res;
 3065|       |
 3066|    367|    assert(key);
  ------------------
  |  Branch (3066:5): [True: 367, False: 0]
  ------------------
 3067|    367|    hash = PyObject_Hash(key);
 3068|    367|    if (hash == -1)
  ------------------
  |  Branch (3068:9): [True: 0, False: 367]
  ------------------
 3069|      0|        return -1;
 3070|    367|    ix = _Py_dict_lookup(mp, key, hash, &old_value);
 3071|    367|    if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|    367|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (3071:9): [True: 0, False: 367]
  ------------------
 3072|      0|        return -1;
 3073|      0|    }
 3074|    367|    if (ix == DKIX_EMPTY || old_value == NULL) {
  ------------------
  |  |  185|    734|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (3074:9): [True: 0, False: 367]
  |  Branch (3074:29): [True: 0, False: 367]
  ------------------
 3075|      0|        return 0;
 3076|      0|    }
 3077|       |
 3078|    367|    res = predicate(old_value, arg);
 3079|    367|    if (res == -1)
  ------------------
  |  Branch (3079:9): [True: 0, False: 367]
  ------------------
 3080|      0|        return -1;
 3081|       |
 3082|    367|    if (res > 0) {
  ------------------
  |  Branch (3082:9): [True: 367, False: 0]
  ------------------
 3083|    367|        _PyDict_NotifyEvent(PyDict_EVENT_DELETED, mp, key, NULL);
 3084|    367|        delitem_common(mp, hash, ix, old_value);
 3085|    367|        return 1;
 3086|    367|    } else {
 3087|      0|        return 0;
 3088|      0|    }
 3089|    367|}
dictobject.c:clear_lock_held:
 3125|     20|{
 3126|     20|    if (!PyDict_Check(op)) {
  ------------------
  |  |   18|     20|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     20|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3126:9): [True: 0, False: 20]
  ------------------
 3127|      0|        return;
 3128|      0|    }
 3129|     20|    PyDictObject *mp = (PyDictObject *)op;
 3130|     20|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (3130:5): [True: 20, False: 0]
  ------------------
 3131|       |
 3132|     20|    PyDictKeysObject *oldkeys;
 3133|     20|    PyDictValues *oldvalues;
 3134|     20|    Py_ssize_t i, n;
 3135|       |
 3136|     20|    oldkeys = mp->ma_keys;
 3137|     20|    oldvalues = mp->ma_values;
 3138|     20|    if (oldkeys == Py_EMPTY_KEYS) {
  ------------------
  |  |  660|     20|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
  |  Branch (3138:9): [True: 8, False: 12]
  ------------------
 3139|      8|        return;
 3140|      8|    }
 3141|       |    /* Empty the dict... */
 3142|     12|    _PyDict_NotifyEvent(PyDict_EVENT_CLEARED, mp, NULL, NULL);
 3143|       |    // We don't inc ref empty keys because they're immortal
 3144|     12|    ensure_shared_on_resize(mp);
 3145|     12|    STORE_USED(mp, 0);
  ------------------
  |  |  336|     12|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|     12|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 3146|     12|    if (oldvalues == NULL) {
  ------------------
  |  Branch (3146:9): [True: 12, False: 0]
  ------------------
 3147|     12|        set_keys(mp, Py_EMPTY_KEYS);
  ------------------
  |  |  660|     12|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
 3148|     12|        assert(oldkeys->dk_refcnt == 1);
  ------------------
  |  Branch (3148:9): [True: 12, False: 0]
  ------------------
 3149|     12|        dictkeys_decref(oldkeys, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|     12|#define IS_DICT_SHARED(mp) (false)
  ------------------
 3150|     12|    }
 3151|      0|    else if (oldvalues->embedded) {
  ------------------
  |  Branch (3151:14): [True: 0, False: 0]
  ------------------
 3152|      0|        clear_embedded_values(oldvalues, oldkeys->dk_nentries);
 3153|      0|    }
 3154|      0|    else {
 3155|      0|        set_values(mp, NULL);
 3156|      0|        set_keys(mp, Py_EMPTY_KEYS);
  ------------------
  |  |  660|      0|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
 3157|      0|        n = oldkeys->dk_nentries;
 3158|      0|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3158:21): [True: 0, False: 0]
  ------------------
 3159|      0|            PyObject *tmp = oldvalues->values[i];
 3160|      0|            FT_ATOMIC_STORE_PTR_RELEASE(oldvalues->values[i], NULL);
  ------------------
  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 3161|      0|            Py_XDECREF(tmp);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3162|      0|        }
 3163|      0|        free_values(oldvalues, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|      0|#define IS_DICT_SHARED(mp) (false)
  ------------------
 3164|      0|        dictkeys_decref(oldkeys, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|      0|#define IS_DICT_SHARED(mp) (false)
  ------------------
 3165|      0|    }
 3166|     12|    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|     12|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (3166:5): [True: 12, False: 0]
  ------------------
 3167|     12|}
dictobject.c:pop_lock_held:
 3322|  64.4k|{
 3323|  64.4k|    if (!PyDict_Check(op)) {
  ------------------
  |  |   18|  64.4k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  64.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3323:9): [True: 0, False: 64.4k]
  ------------------
 3324|      0|        if (result) {
  ------------------
  |  Branch (3324:13): [True: 0, False: 0]
  ------------------
 3325|      0|            *result = NULL;
 3326|      0|        }
 3327|      0|        if (PyFrozenDict_Check(op)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3328|      0|            frozendict_does_not_support("deletion");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 3329|      0|        }
 3330|      0|        else {
 3331|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3332|      0|        }
 3333|      0|        return -1;
 3334|      0|    }
 3335|  64.4k|    PyDictObject *dict = (PyDictObject *)op;
 3336|  64.4k|    assert(can_modify_dict(dict));
  ------------------
  |  Branch (3336:5): [True: 64.4k, False: 0]
  ------------------
 3337|       |
 3338|  64.4k|    if (dict->ma_used == 0) {
  ------------------
  |  Branch (3338:9): [True: 48.4k, False: 16.0k]
  ------------------
 3339|  48.4k|        if (result) {
  ------------------
  |  Branch (3339:13): [True: 48.4k, False: 0]
  ------------------
 3340|  48.4k|            *result = NULL;
 3341|  48.4k|        }
 3342|  48.4k|        return 0;
 3343|  48.4k|    }
 3344|       |
 3345|  16.0k|    Py_hash_t hash = _PyObject_HashDictKey(key);
 3346|  16.0k|    if (hash == -1) {
  ------------------
  |  Branch (3346:9): [True: 0, False: 16.0k]
  ------------------
 3347|      0|        dict_unhashable_type(op, key);
 3348|      0|        if (result) {
  ------------------
  |  Branch (3348:13): [True: 0, False: 0]
  ------------------
 3349|      0|            *result = NULL;
 3350|      0|        }
 3351|      0|        return -1;
 3352|      0|    }
 3353|  16.0k|    return _PyDict_Pop_KnownHash(dict, key, hash, result);
 3354|  16.0k|}
dictobject.c:dict_pop_default:
 3387|  48.6k|{
 3388|  48.6k|    PyObject *result;
 3389|  48.6k|    if (PyDict_Pop(dict, key, &result) == 0) {
  ------------------
  |  Branch (3389:9): [True: 48.4k, False: 171]
  ------------------
 3390|  48.4k|        if (default_value != NULL) {
  ------------------
  |  Branch (3390:13): [True: 48.4k, False: 0]
  ------------------
 3391|  48.4k|            return Py_NewRef(default_value);
  ------------------
  |  |  550|  48.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3392|  48.4k|        }
 3393|      0|        _PyErr_SetKeyError(key);
 3394|      0|        return NULL;
 3395|  48.4k|    }
 3396|    171|    return result;
 3397|  48.6k|}
dictobject.c:keys_lock_held:
 3854|  53.3k|{
 3855|  53.3k|    ASSERT_DICT_LOCKED(dict);
 3856|       |
 3857|  53.3k|    if (dict == NULL || !PyAnyDict_Check(dict)) {
  ------------------
  |  |   43|  53.3k|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  53.3k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   106k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 53.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3857:9): [True: 0, False: 53.3k]
  ------------------
 3858|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3859|      0|        return NULL;
 3860|      0|    }
 3861|  53.3k|    PyDictObject *mp = (PyDictObject *)dict;
 3862|  53.3k|    PyObject *v;
 3863|  53.3k|    Py_ssize_t n;
 3864|       |
 3865|  53.3k|  again:
 3866|  53.3k|    n = mp->ma_used;
 3867|  53.3k|    v = PyList_New(n);
 3868|  53.3k|    if (v == NULL)
  ------------------
  |  Branch (3868:9): [True: 0, False: 53.3k]
  ------------------
 3869|      0|        return NULL;
 3870|  53.3k|    if (n != mp->ma_used) {
  ------------------
  |  Branch (3870:9): [True: 0, False: 53.3k]
  ------------------
 3871|       |        /* Durnit.  The allocations caused the dict to resize.
 3872|       |         * Just start over, this shouldn't normally happen.
 3873|       |         */
 3874|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3875|      0|        goto again;
 3876|      0|    }
 3877|       |
 3878|       |    /* Nothing we do below makes any function calls. */
 3879|  53.3k|    Py_ssize_t j = 0, pos = 0;
 3880|  53.3k|    PyObject *key;
 3881|   285k|    while (_PyDict_Next((PyObject*)mp, &pos, &key, NULL, NULL)) {
  ------------------
  |  Branch (3881:12): [True: 231k, False: 53.3k]
  ------------------
 3882|   231k|        assert(j < n);
  ------------------
  |  Branch (3882:9): [True: 231k, False: 0]
  ------------------
 3883|   231k|        PyList_SET_ITEM(v, j, Py_NewRef(key));
  ------------------
  |  |   50|   231k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   231k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   231k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3884|   231k|        j++;
 3885|   231k|    }
 3886|  53.3k|    assert(j == n);
  ------------------
  |  Branch (3886:5): [True: 53.3k, False: 0]
  ------------------
 3887|  53.3k|    return v;
 3888|  53.3k|}
dictobject.c:dict_merge_from_seq2:
 4181|     14|{
 4182|     14|    int res;
 4183|     14|    Py_BEGIN_CRITICAL_SECTION(d);
  ------------------
  |  |   51|     14|    {
  ------------------
 4184|     14|    res = merge_from_seq2_lock_held(d, seq2, override);
 4185|     14|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     14|    }
  ------------------
 4186|       |
 4187|     14|    return res;
 4188|     14|}
dictobject.c:merge_from_seq2_lock_held:
 4094|     14|{
 4095|     14|    PyObject *it;       /* iter(seq2) */
 4096|     14|    Py_ssize_t i;       /* index into seq2 of current element */
 4097|     14|    PyObject *item;     /* seq2[i] */
 4098|     14|    PyObject *fast;     /* item as a 2-tuple or 2-list */
 4099|       |
 4100|     14|    assert(d != NULL);
  ------------------
  |  Branch (4100:5): [True: 14, False: 0]
  ------------------
 4101|     14|    assert(PyAnyDict_Check(d));
  ------------------
  |  Branch (4101:5): [True: 14, False: 0]
  |  Branch (4101:5): [True: 0, False: 0]
  ------------------
 4102|     14|    assert(seq2 != NULL);
  ------------------
  |  Branch (4102:5): [True: 14, False: 0]
  ------------------
 4103|     14|    assert(can_modify_dict((PyDictObject*)d));
  ------------------
  |  Branch (4103:5): [True: 14, False: 0]
  ------------------
 4104|       |
 4105|     14|    it = PyObject_GetIter(seq2);
 4106|     14|    if (it == NULL)
  ------------------
  |  Branch (4106:9): [True: 0, False: 14]
  ------------------
 4107|      0|        return -1;
 4108|       |
 4109|    227|    for (i = 0; ; ++i) {
 4110|    227|        PyObject *key, *value;
 4111|    227|        Py_ssize_t n;
 4112|       |
 4113|    227|        fast = NULL;
 4114|    227|        item = PyIter_Next(it);
 4115|    227|        if (item == NULL) {
  ------------------
  |  Branch (4115:13): [True: 14, False: 213]
  ------------------
 4116|     14|            if (PyErr_Occurred())
  ------------------
  |  Branch (4116:17): [True: 0, False: 14]
  ------------------
 4117|      0|                goto Fail;
 4118|     14|            break;
 4119|     14|        }
 4120|       |
 4121|       |        /* Convert item to sequence, and verify length 2. */
 4122|    213|        fast = PySequence_Fast(item, "object is not iterable");
 4123|    213|        if (fast == NULL) {
  ------------------
  |  Branch (4123:13): [True: 0, False: 213]
  ------------------
 4124|      0|            if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (4124:17): [True: 0, False: 0]
  ------------------
 4125|      0|                _PyErr_FormatNote(
 4126|      0|                    "Cannot convert dictionary update "
 4127|      0|                    "sequence element #%zd to a sequence",
 4128|      0|                    i);
 4129|      0|            }
 4130|      0|            goto Fail;
 4131|      0|        }
 4132|    213|        n = PySequence_Fast_GET_SIZE(fast);
  ------------------
  |  |   92|    213|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|    213|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    213|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 213]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|    213|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4133|    213|        if (n != 2) {
  ------------------
  |  Branch (4133:13): [True: 0, False: 213]
  ------------------
 4134|      0|            PyErr_Format(PyExc_ValueError,
 4135|      0|                         "dictionary update sequence element #%zd "
 4136|      0|                         "has length %zd; 2 is required",
 4137|      0|                         i, n);
 4138|      0|            goto Fail;
 4139|      0|        }
 4140|       |
 4141|       |        /* Update/merge with this (key, value) pair. */
 4142|    213|        key = PySequence_Fast_GET_ITEM(fast, 0);
  ------------------
  |  |   97|    213|     (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   25|    213|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    213|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 213]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   29|    213|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|    213|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4142:15): [True: 0, False: 0]
  |  Branch (4142:15): [True: 213, False: 0]
  ------------------
 4143|    213|        value = PySequence_Fast_GET_ITEM(fast, 1);
  ------------------
  |  |   97|    213|     (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   25|    213|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    213|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 213]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                    (PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
  |  |  ------------------
  |  |  |  |   29|    213|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|    213|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4143:17): [True: 0, False: 0]
  |  Branch (4143:17): [True: 213, False: 0]
  ------------------
 4144|    213|        Py_INCREF(key);
  ------------------
  |  |  310|    213|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4145|    213|        Py_INCREF(value);
  ------------------
  |  |  310|    213|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4146|    213|        if (override) {
  ------------------
  |  Branch (4146:13): [True: 213, False: 0]
  ------------------
 4147|    213|            if (setitem_lock_held((PyDictObject *)d, key, value) < 0) {
  ------------------
  |  Branch (4147:17): [True: 0, False: 213]
  ------------------
 4148|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4149|      0|                Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4150|      0|                goto Fail;
 4151|      0|            }
 4152|    213|        }
 4153|      0|        else {
 4154|      0|            if (dict_setdefault_ref_lock_held(d, key, value, NULL, 0) < 0) {
  ------------------
  |  Branch (4154:17): [True: 0, False: 0]
  ------------------
 4155|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4156|      0|                Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4157|      0|                goto Fail;
 4158|      0|            }
 4159|      0|        }
 4160|       |
 4161|    213|        Py_DECREF(key);
  ------------------
  |  |  430|    213|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4162|    213|        Py_DECREF(value);
  ------------------
  |  |  430|    213|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4163|    213|        Py_DECREF(fast);
  ------------------
  |  |  430|    213|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4164|    213|        Py_DECREF(item);
  ------------------
  |  |  430|    213|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4165|    213|    }
 4166|       |
 4167|     14|    i = 0;
 4168|     14|    ASSERT_CONSISTENT(d);
  ------------------
  |  |  668|     14|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4168:5): [True: 14, False: 0]
  ------------------
 4169|     14|    goto Return;
 4170|     14|Fail:
 4171|      0|    Py_XDECREF(item);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4172|      0|    Py_XDECREF(fast);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4173|      0|    i = -1;
 4174|     14|Return:
 4175|     14|    Py_DECREF(it);
  ------------------
  |  |  430|     14|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4176|     14|    return Py_SAFE_DOWNCAST(i, Py_ssize_t, int);
  ------------------
  |  |  247|     14|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|     14|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 4177|      0|}
dictobject.c:dict_merge:
 4299|  1.25k|{
 4300|  1.25k|    assert(a != NULL);
  ------------------
  |  Branch (4300:5): [True: 1.25k, False: 0]
  ------------------
 4301|  1.25k|    assert(b != NULL);
  ------------------
  |  Branch (4301:5): [True: 1.25k, False: 0]
  ------------------
 4302|  1.25k|    assert(0 <= override && override <= 2);
  ------------------
  |  Branch (4302:5): [True: 1.25k, False: 0]
  |  Branch (4302:5): [True: 1.25k, False: 0]
  ------------------
 4303|       |
 4304|  1.25k|    PyDictObject *mp = _PyAnyDict_CAST(a);
  ------------------
  |  |  326|  1.25k|    (assert(PyAnyDict_Check(op)), _Py_CAST(PyDictObject*, op))
  |  |  ------------------
  |  |  |  |   37|  1.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (4304:24): [True: 1.25k, False: 1]
  |  Branch (4304:24): [True: 1, False: 0]
  ------------------
 4305|       |
 4306|      0|    int res = 0;
 4307|  1.25k|    if (PyAnyDict_Check(b) && (Py_TYPE(b)->tp_iter == dict_iter)) {
  ------------------
  |  |   43|  2.51k|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  1.25k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  2.51k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 1.25k, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      8|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      8|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyAnyDict_Check(b) && (Py_TYPE(b)->tp_iter == dict_iter)) {
  ------------------
  |  |  213|  1.25k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4307:31): [True: 1.25k, False: 0]
  ------------------
 4308|  1.25k|        PyDictObject *other = (PyDictObject*)b;
 4309|  1.25k|        int res;
 4310|  1.25k|        Py_BEGIN_CRITICAL_SECTION2(a, b);
  ------------------
  |  |   57|  1.25k|    {
  ------------------
 4311|  1.25k|        assert(can_modify_dict(mp));
  ------------------
  |  Branch (4311:9): [True: 1.25k, False: 0]
  ------------------
 4312|  1.25k|        res = dict_dict_merge((PyDictObject *)a, other, override, dupkey);
 4313|  1.25k|        ASSERT_CONSISTENT(a);
  ------------------
  |  |  668|  1.25k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4313:9): [True: 1.25k, False: 0]
  ------------------
 4314|  1.25k|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|  1.25k|    }
  ------------------
 4315|  1.25k|        return res;
 4316|  1.25k|    }
 4317|      8|    else {
 4318|       |        /* Do it the generic, slower way */
 4319|      8|        Py_BEGIN_CRITICAL_SECTION(a);
  ------------------
  |  |   51|      8|    {
  ------------------
 4320|      8|        assert(can_modify_dict(mp));
  ------------------
  |  Branch (4320:9): [True: 8, False: 0]
  ------------------
 4321|       |
 4322|      8|        PyObject *keys = PyMapping_Keys(b);
 4323|      8|        PyObject *iter;
 4324|      8|        PyObject *key, *value;
 4325|      8|        int status;
 4326|       |
 4327|      8|        if (keys == NULL) {
  ------------------
  |  Branch (4327:13): [True: 0, False: 8]
  ------------------
 4328|       |            /* Docstring says this is equivalent to E.keys() so
 4329|       |             * if E doesn't have a .keys() method we want
 4330|       |             * AttributeError to percolate up.  Might as well
 4331|       |             * do the same for any other error.
 4332|       |             */
 4333|      0|            res = -1;
 4334|      0|            goto slow_exit;
 4335|      0|        }
 4336|       |
 4337|      8|        iter = PyObject_GetIter(keys);
 4338|      8|        Py_DECREF(keys);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4339|      8|        if (iter == NULL) {
  ------------------
  |  Branch (4339:13): [True: 0, False: 8]
  ------------------
 4340|      0|            res = -1;
 4341|      0|            goto slow_exit;
 4342|      0|        }
 4343|       |
 4344|    208|        for (key = PyIter_Next(iter); key; key = PyIter_Next(iter)) {
  ------------------
  |  Branch (4344:39): [True: 200, False: 8]
  ------------------
 4345|    200|            if (override != 1) {
  ------------------
  |  Branch (4345:17): [True: 0, False: 200]
  ------------------
 4346|      0|                status = dict_contains(a, key);
 4347|      0|                if (status != 0) {
  ------------------
  |  Branch (4347:21): [True: 0, False: 0]
  ------------------
 4348|      0|                    if (status > 0) {
  ------------------
  |  Branch (4348:25): [True: 0, False: 0]
  ------------------
 4349|      0|                        if (dupkey == NULL) {
  ------------------
  |  Branch (4349:29): [True: 0, False: 0]
  ------------------
 4350|      0|                            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4351|      0|                            continue;
 4352|      0|                        }
 4353|      0|                        *dupkey = key;
 4354|      0|                        res = -2;
 4355|      0|                    }
 4356|      0|                    else {
 4357|      0|                        Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4358|      0|                        res = -1;
 4359|      0|                    }
 4360|      0|                    Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4361|      0|                    goto slow_exit;
 4362|      0|                }
 4363|      0|            }
 4364|    200|            value = PyObject_GetItem(b, key);
 4365|    200|            if (value == NULL) {
  ------------------
  |  Branch (4365:17): [True: 0, False: 200]
  ------------------
 4366|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4367|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4368|      0|                res = -1;
 4369|      0|                goto slow_exit;
 4370|      0|            }
 4371|    200|            status = setitem_lock_held(mp, key, value);
 4372|    200|            Py_DECREF(key);
  ------------------
  |  |  430|    200|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    200|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    200|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4373|    200|            Py_DECREF(value);
  ------------------
  |  |  430|    200|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    200|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    200|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4374|    200|            if (status < 0) {
  ------------------
  |  Branch (4374:17): [True: 0, False: 200]
  ------------------
 4375|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4376|      0|                res = -1;
 4377|      0|                goto slow_exit;
 4378|      0|                return -1;
 4379|      0|            }
 4380|    200|        }
 4381|      8|        Py_DECREF(iter);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4382|      8|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4382:13): [True: 0, False: 8]
  ------------------
 4383|       |            /* Iterator completed, via error */
 4384|      0|            res = -1;
 4385|      0|            goto slow_exit;
 4386|      0|        }
 4387|       |
 4388|      8|slow_exit:
 4389|      8|        ASSERT_CONSISTENT(a);
  ------------------
  |  |  668|      8|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4389:9): [True: 8, False: 0]
  ------------------
 4390|      8|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      8|    }
  ------------------
 4391|      8|        return res;
 4392|      8|    }
 4393|  1.25k|}
dictobject.c:dict_dict_merge:
 4210|  1.25k|{
 4211|  1.25k|    assert(can_modify_dict(mp));
  ------------------
  |  Branch (4211:5): [True: 1.25k, False: 0]
  ------------------
 4212|  1.25k|    ASSERT_DICT_LOCKED(other);
 4213|       |
 4214|  1.25k|    if (other == mp || other->ma_used == 0)
  ------------------
  |  Branch (4214:9): [True: 0, False: 1.25k]
  |  Branch (4214:24): [True: 724, False: 527]
  ------------------
 4215|       |        /* a.update(a) or a.update({}); nothing to do */
 4216|    724|        return 0;
 4217|    527|    if (mp->ma_used == 0) {
  ------------------
  |  Branch (4217:9): [True: 35, False: 492]
  ------------------
 4218|       |        /* Since the target dict is empty, _PyDict_Contains_KnownHash()
 4219|       |         * always returns 0.  Setting override to 1
 4220|       |         * skips the unnecessary test.
 4221|       |         */
 4222|     35|        override = 1;
 4223|     35|        PyDictKeysObject *okeys = other->ma_keys;
 4224|       |
 4225|       |        // If other is clean, combined, and just allocated, just clone it.
 4226|     35|        if (mp->ma_values == NULL &&
  ------------------
  |  Branch (4226:13): [True: 35, False: 0]
  ------------------
 4227|     35|            other->ma_values == NULL &&
  ------------------
  |  Branch (4227:13): [True: 35, False: 0]
  ------------------
 4228|     35|            other->ma_used == okeys->dk_nentries &&
  ------------------
  |  Branch (4228:13): [True: 35, False: 0]
  ------------------
 4229|     35|            (DK_LOG_SIZE(okeys) == PyDict_LOG_MINSIZE ||
  ------------------
  |  |  272|     35|#define DK_LOG_SIZE(dk)  _Py_RVALUE((dk)->dk_log2_size)
  |  |  ------------------
  |  |  |  |  302|     35|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                          (DK_LOG_SIZE(okeys) == PyDict_LOG_MINSIZE ||
  ------------------
  |  |  115|     70|#define PyDict_LOG_MINSIZE 3
  ------------------
  |  Branch (4229:14): [True: 33, False: 2]
  ------------------
 4230|      2|             USABLE_FRACTION(DK_SIZE(okeys)/2) < other->ma_used)
  ------------------
  |  |  590|      2|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
  |  Branch (4230:14): [True: 2, False: 0]
  ------------------
 4231|     35|        ) {
 4232|     35|            _PyDict_NotifyEvent(PyDict_EVENT_CLONED, mp, (PyObject *)other, NULL);
 4233|     35|            PyDictKeysObject *keys = clone_combined_dict_keys(other);
 4234|     35|            if (keys == NULL)
  ------------------
  |  Branch (4234:17): [True: 0, False: 35]
  ------------------
 4235|      0|                return -1;
 4236|       |
 4237|     35|            ensure_shared_on_resize(mp);
 4238|     35|            dictkeys_decref(mp->ma_keys, IS_DICT_SHARED(mp));
  ------------------
  |  |  269|     35|#define IS_DICT_SHARED(mp) (false)
  ------------------
 4239|     35|            set_keys(mp, keys);
 4240|     35|            STORE_USED(mp, other->ma_used);
  ------------------
  |  |  336|     35|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|     35|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 4241|     35|            ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|     35|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4241:13): [True: 35, False: 0]
  ------------------
 4242|     35|            return 0;
 4243|     35|        }
 4244|     35|    }
 4245|       |    /* Do one big resize at the start, rather than
 4246|       |        * incrementally resizing as we insert new items.  Expect
 4247|       |        * that there will be no (or few) overlapping keys.
 4248|       |        */
 4249|    492|    if (USABLE_FRACTION(DK_SIZE(mp->ma_keys)) < other->ma_used) {
  ------------------
  |  |  590|    492|#define USABLE_FRACTION(n) (((n) << 1)/3)
  ------------------
  |  Branch (4249:9): [True: 1, False: 491]
  ------------------
 4250|      1|        int unicode = DK_IS_UNICODE(other->ma_keys);
  ------------------
  |  |  294|      1|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  ------------------
 4251|      1|        if (dictresize(mp, estimate_log2_keysize(mp->ma_used + other->ma_used),
  ------------------
  |  Branch (4251:13): [True: 0, False: 1]
  ------------------
 4252|      1|                        unicode)) {
 4253|      0|            return -1;
 4254|      0|        }
 4255|      1|    }
 4256|       |
 4257|    492|    Py_ssize_t orig_size = other->ma_used;
 4258|    492|    Py_ssize_t pos = 0;
 4259|    492|    Py_hash_t hash;
 4260|    492|    PyObject *key, *value;
 4261|       |
 4262|  10.0k|    while (_PyDict_Next((PyObject*)other, &pos, &key, &value, &hash)) {
  ------------------
  |  Branch (4262:12): [True: 9.54k, False: 492]
  ------------------
 4263|  9.54k|        int err = 0;
 4264|  9.54k|        Py_INCREF(key);
  ------------------
  |  |  310|  9.54k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4265|  9.54k|        Py_INCREF(value);
  ------------------
  |  |  310|  9.54k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4266|  9.54k|        if (override == 1) {
  ------------------
  |  Branch (4266:13): [True: 9.54k, False: 0]
  ------------------
 4267|  9.54k|            err = insertdict(mp, Py_NewRef(key), hash, Py_NewRef(value));
  ------------------
  |  |  550|  9.54k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  9.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          err = insertdict(mp, Py_NewRef(key), hash, Py_NewRef(value));
  ------------------
  |  |  550|  9.54k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  9.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4268|  9.54k|        }
 4269|      0|        else {
 4270|      0|            err = _PyDict_Contains_KnownHash((PyObject *)mp, key, hash);
 4271|      0|            if (err == 0) {
  ------------------
  |  Branch (4271:17): [True: 0, False: 0]
  ------------------
 4272|      0|                err = insertdict(mp, Py_NewRef(key), hash, Py_NewRef(value));
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              err = insertdict(mp, Py_NewRef(key), hash, Py_NewRef(value));
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4273|      0|            }
 4274|      0|            else if (err > 0) {
  ------------------
  |  Branch (4274:22): [True: 0, False: 0]
  ------------------
 4275|      0|                if (dupkey != NULL) {
  ------------------
  |  Branch (4275:21): [True: 0, False: 0]
  ------------------
 4276|      0|                    *dupkey = key;
 4277|      0|                    Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4278|      0|                    return -2;
 4279|      0|                }
 4280|      0|                err = 0;
 4281|      0|            }
 4282|      0|        }
 4283|  9.54k|        Py_DECREF(value);
  ------------------
  |  |  430|  9.54k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4284|  9.54k|        Py_DECREF(key);
  ------------------
  |  |  430|  9.54k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4285|  9.54k|        if (err != 0)
  ------------------
  |  Branch (4285:13): [True: 0, False: 9.54k]
  ------------------
 4286|      0|            return -1;
 4287|       |
 4288|  9.54k|        if (orig_size != other->ma_used) {
  ------------------
  |  Branch (4288:13): [True: 0, False: 9.54k]
  ------------------
 4289|      0|            PyErr_SetString(PyExc_RuntimeError,
 4290|      0|                    "dict mutated during update");
 4291|      0|            return -1;
 4292|      0|        }
 4293|  9.54k|    }
 4294|    492|    return 0;
 4295|    492|}
dictobject.c:clone_combined_dict_keys:
 1024|  1.58k|{
 1025|  1.58k|    assert(PyAnyDict_Check(orig));
  ------------------
  |  Branch (1025:5): [True: 1.58k, False: 0]
  |  Branch (1025:5): [True: 0, False: 0]
  ------------------
 1026|  1.58k|    assert(Py_TYPE(orig)->tp_iter == dict_iter);
  ------------------
  |  Branch (1026:5): [True: 1.58k, False: 0]
  ------------------
 1027|  1.58k|    assert(orig->ma_values == NULL);
  ------------------
  |  Branch (1027:5): [True: 1.58k, False: 0]
  ------------------
 1028|  1.58k|    assert(orig->ma_keys != Py_EMPTY_KEYS);
  ------------------
  |  Branch (1028:5): [True: 1.58k, False: 0]
  ------------------
 1029|  1.58k|    assert(orig->ma_keys->dk_refcnt == 1);
  ------------------
  |  Branch (1029:5): [True: 1.58k, False: 0]
  ------------------
 1030|       |
 1031|  1.58k|    if (!PyFrozenDict_Check(orig)) {
  ------------------
  |  |   37|  1.58k|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|  1.58k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1031:9): [True: 1.58k, False: 0]
  ------------------
 1032|  1.58k|        ASSERT_DICT_LOCKED(orig);
 1033|  1.58k|    }
 1034|       |
 1035|  1.58k|    size_t keys_size = _PyDict_KeysSize(orig->ma_keys);
 1036|  1.58k|    PyDictKeysObject *keys = PyMem_Malloc(keys_size);
 1037|  1.58k|    if (keys == NULL) {
  ------------------
  |  Branch (1037:9): [True: 0, False: 1.58k]
  ------------------
 1038|      0|        PyErr_NoMemory();
 1039|      0|        return NULL;
 1040|      0|    }
 1041|       |
 1042|  1.58k|    memcpy(keys, orig->ma_keys, keys_size);
 1043|       |
 1044|       |    /* After copying key/value pairs, we need to incref all
 1045|       |       keys and values and they are about to be co-owned by a
 1046|       |       new dict object. */
 1047|  1.58k|    PyObject **pkey, **pvalue;
 1048|  1.58k|    size_t offs;
 1049|  1.58k|    if (DK_IS_UNICODE(orig->ma_keys)) {
  ------------------
  |  |  294|  1.58k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 1.57k, False: 3]
  |  |  ------------------
  ------------------
 1050|  1.57k|        PyDictUnicodeEntry *ep0 = DK_UNICODE_ENTRIES(keys);
 1051|  1.57k|        pkey = &ep0->me_key;
 1052|  1.57k|        pvalue = &ep0->me_value;
 1053|  1.57k|        offs = sizeof(PyDictUnicodeEntry) / sizeof(PyObject*);
 1054|  1.57k|    }
 1055|      3|    else {
 1056|      3|        PyDictKeyEntry *ep0 = DK_ENTRIES(keys);
 1057|      3|        pkey = &ep0->me_key;
 1058|      3|        pvalue = &ep0->me_value;
 1059|      3|        offs = sizeof(PyDictKeyEntry) / sizeof(PyObject*);
 1060|      3|    }
 1061|       |
 1062|  1.58k|    Py_ssize_t n = keys->dk_nentries;
 1063|  14.5k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (1063:28): [True: 12.9k, False: 1.58k]
  ------------------
 1064|  12.9k|        PyObject *value = *pvalue;
 1065|  12.9k|        if (value != NULL) {
  ------------------
  |  Branch (1065:13): [True: 12.0k, False: 931]
  ------------------
 1066|  12.0k|            Py_INCREF(value);
  ------------------
  |  |  310|  12.0k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1067|  12.0k|            Py_INCREF(*pkey);
  ------------------
  |  |  310|  12.0k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1068|  12.0k|        }
 1069|  12.9k|        pvalue += offs;
 1070|  12.9k|        pkey += offs;
 1071|  12.9k|    }
 1072|       |
 1073|       |    /* Since we copied the keys table we now have an extra reference
 1074|       |       in the system.  Manually call increment _Py_RefTotal to signal that
 1075|       |       we have it now; calling dictkeys_incref would be an error as
 1076|       |       keys->dk_refcnt is already set to 1 (after memcpy). */
 1077|       |#ifdef Py_REF_DEBUG
 1078|       |    _Py_IncRefTotal(_PyThreadState_GET());
 1079|       |#endif
 1080|  1.58k|    return keys;
 1081|  1.58k|}
dictobject.c:dict_merge_api:
 4397|  1.21k|{
 4398|       |    /* We accept for the argument either a concrete dictionary object,
 4399|       |     * or an abstract "mapping" object.  For the former, we can do
 4400|       |     * things quite efficiently.  For the latter, we only require that
 4401|       |     * PyMapping_Keys() and PyObject_GetItem() be supported.
 4402|       |     */
 4403|  1.21k|    if (a == NULL || !PyDict_Check(a) || b == NULL) {
  ------------------
  |  |   18|  1.21k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.42k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4403:9): [True: 0, False: 1.21k]
  |  Branch (4403:22): [True: 0, False: 1.21k]
  |  Branch (4403:42): [True: 0, False: 1.21k]
  ------------------
 4404|      0|        if (a != NULL && PyFrozenDict_Check(a)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4404:13): [True: 0, False: 0]
  ------------------
 4405|      0|            frozendict_does_not_support("assignment");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 4406|      0|        }
 4407|      0|        else {
 4408|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 4409|      0|        }
 4410|      0|        return -1;
 4411|      0|    }
 4412|       |
 4413|  1.21k|    int res = dict_merge(a, b, override, dupkey);
 4414|  1.21k|    assert(_PyObject_GC_IS_TRACKED(a));
  ------------------
  |  Branch (4414:5): [True: 1.21k, False: 0]
  ------------------
 4415|  1.21k|    return res;
 4416|  1.21k|}
dictobject.c:copy_lock_held_untracked:
 4473|  1.54k|{
 4474|  1.54k|    PyObject *copy;
 4475|  1.54k|    PyDictObject *mp;
 4476|       |
 4477|       |    // frozendict is immutable and so doesn't need critical section
 4478|  1.54k|    if (!PyFrozenDict_Check(o)) {
  ------------------
  |  |   37|  1.54k|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|  1.54k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4478:9): [True: 1.54k, False: 0]
  ------------------
 4479|  1.54k|        ASSERT_DICT_LOCKED(o);
 4480|  1.54k|    }
 4481|       |
 4482|  1.54k|    mp = (PyDictObject *)o;
 4483|  1.54k|    if (mp->ma_used == 0) {
  ------------------
  |  Branch (4483:9): [True: 2, False: 1.54k]
  ------------------
 4484|       |        /* The dict is empty; just return a new dict. */
 4485|      2|        PyObject *d;
 4486|      2|        if (as_frozendict) {
  ------------------
  |  Branch (4486:13): [True: 0, False: 2]
  ------------------
 4487|      0|            d = frozendict_new_untracked(&PyFrozenDict_Type);
 4488|      0|        }
 4489|      2|        else {
 4490|      2|            d = dict_new_untracked(&PyDict_Type);
 4491|      2|        }
 4492|      2|        assert(!_PyObject_GC_IS_TRACKED(d));
  ------------------
  |  Branch (4492:9): [True: 2, False: 0]
  ------------------
 4493|      2|        return d;
 4494|      2|    }
 4495|       |
 4496|  1.54k|    if (_PyDict_HasSplitTable(mp)) {
  ------------------
  |  |   56|  1.54k|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 1.54k]
  |  |  ------------------
  ------------------
 4497|      0|        PyDictObject *split_copy;
 4498|      0|        PyDictValues *newvalues = copy_values(mp->ma_values);
 4499|      0|        if (newvalues == NULL) {
  ------------------
  |  Branch (4499:13): [True: 0, False: 0]
  ------------------
 4500|      0|            return PyErr_NoMemory();
 4501|      0|        }
 4502|      0|        if (as_frozendict) {
  ------------------
  |  Branch (4502:13): [True: 0, False: 0]
  ------------------
 4503|      0|            split_copy = (PyDictObject *)PyObject_GC_New(PyFrozenDictObject,
  ------------------
  |  |  181|      0|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 4504|      0|                                                         &PyFrozenDict_Type);
 4505|      0|        }
 4506|      0|        else {
 4507|      0|            split_copy = PyObject_GC_New(PyDictObject, &PyDict_Type);
  ------------------
  |  |  181|      0|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 4508|      0|        }
 4509|      0|        if (split_copy == NULL) {
  ------------------
  |  Branch (4509:13): [True: 0, False: 0]
  ------------------
 4510|      0|            free_values(newvalues, false);
 4511|      0|            return NULL;
 4512|      0|        }
 4513|      0|        for (size_t i = 0; i < newvalues->capacity; i++) {
  ------------------
  |  Branch (4513:28): [True: 0, False: 0]
  ------------------
 4514|      0|            Py_XINCREF(newvalues->values[i]);
  ------------------
  |  |  514|      0|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4515|      0|        }
 4516|      0|        split_copy->ma_values = newvalues;
 4517|      0|        split_copy->ma_keys = mp->ma_keys;
 4518|      0|        split_copy->ma_used = mp->ma_used;
 4519|      0|        split_copy->_ma_watcher_tag = 0;
 4520|      0|        dictkeys_incref(mp->ma_keys);
 4521|      0|        if (as_frozendict) {
  ------------------
  |  Branch (4521:13): [True: 0, False: 0]
  ------------------
 4522|      0|            PyFrozenDictObject *frozen = (PyFrozenDictObject *)split_copy;
 4523|      0|            frozen->ma_hash = -1;
 4524|      0|        }
 4525|      0|        assert(!_PyObject_GC_IS_TRACKED(split_copy));
  ------------------
  |  Branch (4525:9): [True: 0, False: 0]
  ------------------
 4526|      0|        return (PyObject *)split_copy;
 4527|      0|    }
 4528|       |
 4529|  1.54k|    if (Py_TYPE(mp)->tp_iter == dict_iter &&
  ------------------
  |  |  213|  1.54k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4529:9): [True: 1.54k, False: 0]
  ------------------
 4530|  1.54k|            mp->ma_values == NULL &&
  ------------------
  |  Branch (4530:13): [True: 1.54k, False: 0]
  ------------------
 4531|  1.54k|            (mp->ma_used >= (mp->ma_keys->dk_nentries * 2) / 3))
  ------------------
  |  Branch (4531:13): [True: 1.54k, False: 0]
  ------------------
 4532|  1.54k|    {
 4533|       |        /* Use fast-copy if:
 4534|       |
 4535|       |           (1) type(mp) doesn't override tp_iter; and
 4536|       |
 4537|       |           (2) 'mp' is not a split-dict; and
 4538|       |
 4539|       |           (3) if 'mp' is non-compact ('del' operation does not resize dicts),
 4540|       |               do fast-copy only if it has at most 1/3 non-used keys.
 4541|       |
 4542|       |           The last condition (3) is important to guard against a pathological
 4543|       |           case when a large dict is almost emptied with multiple del/pop
 4544|       |           operations and copied after that.  In cases like this, we defer to
 4545|       |           PyDict_Merge, which produces a compacted copy.
 4546|       |        */
 4547|  1.54k|        PyDictKeysObject *keys = clone_combined_dict_keys(mp);
 4548|  1.54k|        if (keys == NULL) {
  ------------------
  |  Branch (4548:13): [True: 0, False: 1.54k]
  ------------------
 4549|      0|            return NULL;
 4550|      0|        }
 4551|  1.54k|        PyDictObject *new;
 4552|  1.54k|        if (as_frozendict) {
  ------------------
  |  Branch (4552:13): [True: 0, False: 1.54k]
  ------------------
 4553|      0|            new = (PyDictObject *)new_frozendict_untracked(keys, NULL, 0, 0);
 4554|      0|        }
 4555|  1.54k|        else {
 4556|  1.54k|            new = (PyDictObject *)new_dict_untracked(keys, NULL, 0, 0);
 4557|  1.54k|        }
 4558|  1.54k|        if (new == NULL) {
  ------------------
  |  Branch (4558:13): [True: 0, False: 1.54k]
  ------------------
 4559|       |            /* In case of an error, new_dict()/new_frozendict() takes care of
 4560|       |               cleaning up `keys`. */
 4561|      0|            return NULL;
 4562|      0|        }
 4563|       |
 4564|  1.54k|        new->ma_used = mp->ma_used;
 4565|  1.54k|        ASSERT_CONSISTENT(new);
  ------------------
  |  |  668|  1.54k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4565:9): [True: 1.54k, False: 0]
  ------------------
 4566|  1.54k|        assert(!_PyObject_GC_IS_TRACKED(new));
  ------------------
  |  Branch (4566:9): [True: 1.54k, False: 0]
  ------------------
 4567|  1.54k|        return (PyObject *)new;
 4568|  1.54k|    }
 4569|       |
 4570|      0|    if (as_frozendict) {
  ------------------
  |  Branch (4570:9): [True: 0, False: 0]
  ------------------
 4571|      0|        copy = frozendict_new_untracked(&PyFrozenDict_Type);
 4572|      0|    }
 4573|      0|    else {
 4574|      0|        copy = dict_new_untracked(&PyDict_Type);
 4575|      0|    }
 4576|      0|    if (copy == NULL)
  ------------------
  |  Branch (4576:9): [True: 0, False: 0]
  ------------------
 4577|      0|        return NULL;
 4578|      0|    if (dict_merge(copy, o, 1, NULL) < 0) {
  ------------------
  |  Branch (4578:9): [True: 0, False: 0]
  ------------------
 4579|      0|        Py_DECREF(copy);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4580|      0|        return NULL;
 4581|      0|    }
 4582|       |
 4583|      0|    assert(!_PyObject_GC_IS_TRACKED(copy));
  ------------------
  |  Branch (4583:5): [True: 0, False: 0]
  ------------------
 4584|      0|    return copy;
 4585|      0|}
dictobject.c:dict_new_untracked:
 5377|     41|{
 5378|     41|    assert(PyObject_IsSubclass((PyObject*)type, (PyObject*)&PyDict_Type));
  ------------------
  |  Branch (5378:5): [True: 41, False: 0]
  ------------------
 5379|       |
 5380|     41|    return anydict_new_untracked(type);
 5381|     41|}
dictobject.c:anydict_new_untracked:
 5354|     42|{
 5355|     42|    assert(type != NULL);
  ------------------
  |  Branch (5355:5): [True: 42, False: 0]
  ------------------
 5356|       |    // dict and frozendict subclasses must implement the GC protocol
 5357|     42|    assert(_PyType_IS_GC(type));
  ------------------
  |  Branch (5357:5): [True: 42, False: 0]
  ------------------
 5358|       |
 5359|     42|    PyObject *self = _PyType_AllocNoTrack(type, 0);
 5360|     42|    if (self == NULL) {
  ------------------
  |  Branch (5360:9): [True: 0, False: 42]
  ------------------
 5361|      0|        return NULL;
 5362|      0|    }
 5363|     42|    PyDictObject *d = (PyDictObject *)self;
 5364|       |
 5365|     42|    d->ma_used = 0;
 5366|     42|    d->_ma_watcher_tag = 0;
 5367|       |    // We don't inc ref empty keys because they're immortal
 5368|     42|    assert((Py_EMPTY_KEYS)->dk_refcnt == _Py_DICT_IMMORTAL_INITIAL_REFCNT);
  ------------------
  |  Branch (5368:5): [True: 42, False: 0]
  ------------------
 5369|     42|    d->ma_keys = Py_EMPTY_KEYS;
  ------------------
  |  |  660|     42|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
 5370|     42|    d->ma_values = NULL;
 5371|     42|    ASSERT_CONSISTENT(d);
  ------------------
  |  |  668|     42|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (5371:5): [True: 42, False: 0]
  ------------------
 5372|     42|    return self;
 5373|     42|}
dictobject.c:new_values:
  915|    297|{
  916|    297|    size_t n = values_size_from_count(size);
  917|    297|    PyDictValues *res = (PyDictValues *)PyMem_Malloc(n);
  918|    297|    if (res == NULL) {
  ------------------
  |  Branch (918:9): [True: 0, False: 297]
  ------------------
  919|      0|        return NULL;
  920|      0|    }
  921|    297|    res->embedded = 0;
  922|    297|    res->size = 0;
  923|    297|    assert(size < 256);
  ------------------
  |  Branch (923:5): [True: 297, False: 0]
  ------------------
  924|    297|    res->capacity = (uint8_t)size;
  925|    297|    return res;
  926|    297|}
dictobject.c:values_size_from_count:
  903|    297|{
  904|    297|    assert(count >= 1);
  ------------------
  |  Branch (904:5): [True: 297, False: 0]
  ------------------
  905|    297|    size_t suffix_size = _Py_SIZE_ROUND_UP(count, sizeof(PyObject *));
  ------------------
  |  |  238|    297|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|    297|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
  906|    297|    assert(suffix_size < 128);
  ------------------
  |  Branch (906:5): [True: 297, False: 0]
  ------------------
  907|    297|    assert(suffix_size % sizeof(PyObject *) == 0);
  ------------------
  |  Branch (907:5): [True: 297, False: 0]
  ------------------
  908|    297|    return (count + 1) * sizeof(PyObject *) + suffix_size;
  909|    297|}
dictobject.c:dictkeys_incref:
  482|    297|{
  483|    297|    if (FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_refcnt) < 0) {
  ------------------
  |  |  149|    297|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  |  Branch (483:9): [True: 0, False: 297]
  ------------------
  484|      0|        assert(FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_refcnt) == _Py_DICT_IMMORTAL_INITIAL_REFCNT);
  ------------------
  |  Branch (484:9): [True: 0, False: 0]
  ------------------
  485|      0|        return;
  486|      0|    }
  487|       |#ifdef Py_REF_DEBUG
  488|       |    _Py_IncRefTotal(_PyThreadState_GET());
  489|       |#endif
  490|    297|    INCREF_KEYS(dk);
  ------------------
  |  |  262|    297|#define INCREF_KEYS(dk)  dk->dk_refcnt++
  ------------------
  491|    297|}
dictobject.c:new_dict_untracked:
  987|  1.54k|{
  988|  1.54k|    PyDictObject *mp = _Py_FREELIST_POP(PyDictObject, dicts);
  ------------------
  |  |   43|  1.54k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  1.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  989|  1.54k|    if (mp == NULL) {
  ------------------
  |  Branch (989:9): [True: 501, False: 1.04k]
  ------------------
  990|    501|        mp = PyObject_GC_New(PyDictObject, &PyDict_Type);
  ------------------
  |  |  181|    501|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    501|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  991|    501|    }
  992|  1.54k|    assert(mp == NULL || Py_IS_TYPE(mp, &PyDict_Type));
  ------------------
  |  Branch (992:5): [True: 0, False: 1.54k]
  |  Branch (992:5): [True: 1.54k, False: 0]
  ------------------
  993|       |
  994|  1.54k|    return new_dict_impl(mp, keys, values, used, free_values_on_failure, 0, 0);
  995|  1.54k|}
dictobject.c:dict_setdefault_ref_lock_held:
 4813|  2.31M|{
 4814|  2.31M|    if (!PyDict_Check(d)) {
  ------------------
  |  |   18|  2.31M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.31M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4814:9): [True: 0, False: 2.31M]
  ------------------
 4815|      0|        if (PyFrozenDict_Check(d)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4816|      0|            frozendict_does_not_support("assignment");
  ------------------
  |  | 2801|      0|    PyErr_SetString(PyExc_TypeError, "frozendict object does " \
  |  | 2802|      0|                    "not support item " WHAT)
  ------------------
 4817|      0|        }
 4818|      0|        else {
 4819|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 4820|      0|        }
 4821|      0|        if (result) {
  ------------------
  |  Branch (4821:13): [True: 0, False: 0]
  ------------------
 4822|      0|            *result = NULL;
 4823|      0|        }
 4824|      0|        return -1;
 4825|      0|    }
 4826|  2.31M|    assert(can_modify_dict((PyDictObject*)d));
  ------------------
  |  Branch (4826:5): [True: 2.31M, False: 0]
  ------------------
 4827|       |
 4828|  2.31M|    PyDictObject *mp = (PyDictObject *)d;
 4829|  2.31M|    PyObject *value;
 4830|  2.31M|    Py_hash_t hash;
 4831|  2.31M|    Py_ssize_t ix;
 4832|       |
 4833|  2.31M|    hash = _PyObject_HashDictKey(key);
 4834|  2.31M|    if (hash == -1) {
  ------------------
  |  Branch (4834:9): [True: 0, False: 2.31M]
  ------------------
 4835|      0|        dict_unhashable_type(d, key);
 4836|      0|        if (result) {
  ------------------
  |  Branch (4836:13): [True: 0, False: 0]
  ------------------
 4837|      0|            *result = NULL;
 4838|      0|        }
 4839|      0|        return -1;
 4840|      0|    }
 4841|       |
 4842|  2.31M|    if (mp->ma_keys == Py_EMPTY_KEYS) {
  ------------------
  |  |  660|  2.31M|#define Py_EMPTY_KEYS &empty_keys_struct
  ------------------
  |  Branch (4842:9): [True: 10.4k, False: 2.30M]
  ------------------
 4843|  10.4k|        if (insert_to_emptydict(mp, Py_NewRef(key), hash,
  ------------------
  |  |  550|  10.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4843:13): [True: 0, False: 10.4k]
  ------------------
 4844|  10.4k|                                Py_NewRef(default_value)) < 0) {
  ------------------
  |  |  550|  10.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4845|      0|            if (result) {
  ------------------
  |  Branch (4845:17): [True: 0, False: 0]
  ------------------
 4846|      0|                *result = NULL;
 4847|      0|            }
 4848|      0|            return -1;
 4849|      0|        }
 4850|  10.4k|        if (result) {
  ------------------
  |  Branch (4850:13): [True: 10.3k, False: 17]
  ------------------
 4851|  10.3k|            *result = incref_result ? Py_NewRef(default_value) : default_value;
  ------------------
  |  |  550|  10.3k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4851:23): [True: 10.3k, False: 0]
  ------------------
 4852|  10.3k|        }
 4853|  10.4k|        return 0;
 4854|  10.4k|    }
 4855|       |
 4856|  2.30M|    if (_PyDict_HasSplitTable(mp) && PyUnicode_CheckExact(key)) {
  ------------------
  |  |   56|  4.60M|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 2.30M]
  |  |  ------------------
  ------------------
                  if (_PyDict_HasSplitTable(mp) && PyUnicode_CheckExact(key)) {
  ------------------
  |  |  104|      0|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4857|      0|        ix = insert_split_key(mp->ma_keys, key, hash);
 4858|      0|        if (ix != DKIX_EMPTY) {
  ------------------
  |  |  185|      0|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (4858:13): [True: 0, False: 0]
  ------------------
 4859|      0|            PyObject *value = mp->ma_values->values[ix];
 4860|      0|            int already_present = value != NULL;
 4861|      0|            if (!already_present) {
  ------------------
  |  Branch (4861:17): [True: 0, False: 0]
  ------------------
 4862|      0|                _PyDict_InsertSplitValue(mp, key, default_value, ix);
 4863|      0|                value = default_value;
 4864|      0|            }
 4865|      0|            if (result) {
  ------------------
  |  Branch (4865:17): [True: 0, False: 0]
  ------------------
 4866|      0|                *result = incref_result ? Py_NewRef(value) : value;
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4866:27): [True: 0, False: 0]
  ------------------
 4867|      0|            }
 4868|      0|            return already_present;
 4869|      0|        }
 4870|       |        // No space in shared keys. Go to insert_combined_dict() below.
 4871|      0|    }
 4872|  2.30M|    else {
 4873|  2.30M|        ix = _Py_dict_lookup(mp, key, hash, &value);
 4874|  2.30M|        if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|  2.30M|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (4874:13): [True: 0, False: 2.30M]
  ------------------
 4875|      0|            if (result) {
  ------------------
  |  Branch (4875:17): [True: 0, False: 0]
  ------------------
 4876|      0|                *result = NULL;
 4877|      0|            }
 4878|      0|            return -1;
 4879|      0|        }
 4880|  2.30M|    }
 4881|       |
 4882|  2.30M|    if (ix == DKIX_EMPTY) {
  ------------------
  |  |  185|  2.30M|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (4882:9): [True: 468k, False: 1.83M]
  ------------------
 4883|   468k|        value = default_value;
 4884|       |
 4885|       |        // See comment to this function in insertdict.
 4886|   468k|        if (insert_combined_dict(mp, hash, Py_NewRef(key), Py_NewRef(value)) < 0) {
  ------------------
  |  |  550|   468k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   468k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   468k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (insert_combined_dict(mp, hash, Py_NewRef(key), Py_NewRef(value)) < 0) {
  ------------------
  |  |  550|   468k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   468k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   468k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4886:13): [True: 0, False: 468k]
  ------------------
 4887|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4888|      0|            Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4889|      0|            if (result) {
  ------------------
  |  Branch (4889:17): [True: 0, False: 0]
  ------------------
 4890|      0|                *result = NULL;
 4891|      0|            }
 4892|      0|            return -1;
 4893|      0|        }
 4894|       |
 4895|   468k|        STORE_USED(mp, mp->ma_used + 1);
  ------------------
  |  |  336|   468k|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|   468k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 4896|   468k|        assert(mp->ma_keys->dk_usable >= 0);
  ------------------
  |  Branch (4896:9): [True: 468k, False: 0]
  ------------------
 4897|   468k|        ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|   468k|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4897:9): [True: 468k, False: 0]
  ------------------
 4898|   468k|        if (result) {
  ------------------
  |  Branch (4898:13): [True: 464k, False: 3.32k]
  ------------------
 4899|   464k|            *result = incref_result ? Py_NewRef(value) : value;
  ------------------
  |  |  550|   464k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   464k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   464k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4899:23): [True: 464k, False: 0]
  ------------------
 4900|   464k|        }
 4901|   468k|        return 0;
 4902|   468k|    }
 4903|       |
 4904|  2.30M|    assert(value != NULL);
  ------------------
  |  Branch (4904:5): [True: 1.83M, False: 0]
  ------------------
 4905|  1.83M|    ASSERT_CONSISTENT(mp);
  ------------------
  |  |  668|  1.83M|#  define ASSERT_CONSISTENT(op) assert(_PyDict_CheckConsistency((PyObject *)(op), 0))
  ------------------
  |  Branch (4905:5): [True: 1.83M, False: 0]
  ------------------
 4906|  1.83M|    if (result) {
  ------------------
  |  Branch (4906:9): [True: 1.83M, False: 0]
  ------------------
 4907|  1.83M|        *result = incref_result ? Py_NewRef(value) : value;
  ------------------
  |  |  550|  1.83M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.83M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.83M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4907:19): [True: 1.83M, False: 0]
  ------------------
 4908|  1.83M|    }
 4909|  1.83M|    return 1;
 4910|  1.83M|}
dictobject.c:dict_update_arg:
 4034|     60|{
 4035|     60|    if (PyAnyDict_CheckExact(arg)) {
  ------------------
  |  |   41|     60|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|     60|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|    120|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 38, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|     22|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     22|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4036|     38|        return dict_merge(self, arg, 1, NULL);
 4037|     38|    }
 4038|     22|    int has_keys = PyObject_HasAttrWithError(arg, &_Py_ID(keys));
  ------------------
  |  |  936|     22|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     22|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     22|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4039|     22|    if (has_keys < 0) {
  ------------------
  |  Branch (4039:9): [True: 0, False: 22]
  ------------------
 4040|      0|        return -1;
 4041|      0|    }
 4042|     22|    if (has_keys) {
  ------------------
  |  Branch (4042:9): [True: 8, False: 14]
  ------------------
 4043|      8|        return dict_merge(self, arg, 1, NULL);
 4044|      8|    }
 4045|     14|    return dict_merge_from_seq2(self, arg, 1);
 4046|     22|}
dictobject.c:dict_contains:
 5275|   341k|{
 5276|   341k|    Py_hash_t hash = _PyObject_HashDictKey(key);
 5277|   341k|    if (hash == -1) {
  ------------------
  |  Branch (5277:9): [True: 0, False: 341k]
  ------------------
 5278|      0|        dict_unhashable_type(op, key);
 5279|      0|        return -1;
 5280|      0|    }
 5281|       |
 5282|   341k|    return _PyDict_Contains_KnownHash(op, key, hash);
 5283|   341k|}
dictobject.c:dict_dealloc:
 3647|   879k|{
 3648|   879k|    PyDictObject *mp = (PyDictObject *)self;
 3649|   879k|    _PyObject_ResurrectStart(self);
 3650|   879k|    _PyDict_NotifyEvent(PyDict_EVENT_DEALLOCATED, mp, NULL, NULL);
 3651|   879k|    if (_PyObject_ResurrectEnd(self)) {
  ------------------
  |  Branch (3651:9): [True: 0, False: 879k]
  ------------------
 3652|      0|        return;
 3653|      0|    }
 3654|   879k|    PyDictValues *values = mp->ma_values;
 3655|   879k|    PyDictKeysObject *keys = mp->ma_keys;
 3656|   879k|    Py_ssize_t i, n;
 3657|       |
 3658|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
 3659|   879k|    PyObject_GC_UnTrack(mp);
 3660|   879k|    if (values != NULL) {
  ------------------
  |  Branch (3660:9): [True: 7, False: 879k]
  ------------------
 3661|      7|        if (values->embedded == 0) {
  ------------------
  |  Branch (3661:13): [True: 7, False: 0]
  ------------------
 3662|    217|            for (i = 0, n = values->capacity; i < n; i++) {
  ------------------
  |  Branch (3662:47): [True: 210, False: 7]
  ------------------
 3663|    210|                Py_XDECREF(values->values[i]);
  ------------------
  |  |  524|    210|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    210|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    210|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3664|    210|            }
 3665|      7|            free_values(values, false);
 3666|      7|        }
 3667|      7|        dictkeys_decref(keys, false);
 3668|      7|    }
 3669|   879k|    else if (keys != NULL) {
  ------------------
  |  Branch (3669:14): [True: 879k, False: 0]
  ------------------
 3670|   879k|        assert(keys->dk_refcnt == 1 || keys == Py_EMPTY_KEYS);
  ------------------
  |  Branch (3670:9): [True: 735k, False: 144k]
  |  Branch (3670:9): [True: 144k, False: 0]
  ------------------
 3671|   879k|        dictkeys_decref(keys, false);
 3672|   879k|    }
 3673|   879k|    if (Py_IS_TYPE(mp, &PyDict_Type)) {
  ------------------
  |  |  215|   879k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   879k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   879k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 879k, False: 7]
  |  |  ------------------
  ------------------
 3674|   879k|        _Py_FREELIST_FREE(dicts, mp, Py_TYPE(mp)->tp_free);
  ------------------
  |  |   35|   879k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|   879k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   879k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|   879k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   16|   879k|#  define Py_dicts_MAXFREELIST 80
  |  |  ------------------
  ------------------
 3675|   879k|    }
 3676|      7|    else {
 3677|      7|        Py_TYPE(mp)->tp_free((PyObject *)mp);
  ------------------
  |  |  213|      7|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3678|      7|    }
 3679|   879k|}
dictobject.c:dict_length:
 3786|    412|{
 3787|    412|    return GET_USED(_PyAnyDict_CAST(self));
  ------------------
  |  |  328|    412|#define GET_USED(ep) FT_ATOMIC_LOAD_SSIZE_RELAXED((ep)->ma_used)
  |  |  ------------------
  |  |  |  |  149|  1.64k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (149:45): [True: 412, False: 0]
  |  |  |  |  |  Branch (149:45): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3788|    412|}
dictobject.c:dict_traverse:
 5088|  46.2k|{
 5089|  46.2k|    PyDictObject *mp = (PyDictObject *)op;
 5090|  46.2k|    PyDictKeysObject *keys = mp->ma_keys;
 5091|  46.2k|    Py_ssize_t i, n = keys->dk_nentries;
 5092|       |
 5093|  46.2k|    if (DK_IS_UNICODE(keys)) {
  ------------------
  |  |  294|  46.2k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 39.5k, False: 6.66k]
  |  |  ------------------
  ------------------
 5094|  39.5k|        if (_PyDict_HasSplitTable(mp)) {
  ------------------
  |  |   56|  39.5k|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 5.19k, False: 34.3k]
  |  |  ------------------
  ------------------
 5095|  32.8k|            for (i = 0; i < n; i++) {
  ------------------
  |  Branch (5095:25): [True: 27.6k, False: 5.19k]
  ------------------
 5096|  27.6k|                Py_VISIT(mp->ma_values->values[i]);
  ------------------
  |  |  194|  27.6k|    do {                                                                \
  |  |  195|  27.6k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 23.2k, False: 4.38k]
  |  |  ------------------
  |  |  196|  23.2k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  23.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  23.2k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 23.2k]
  |  |  ------------------
  |  |  198|  23.2k|                return vret;                                            \
  |  |  199|  23.2k|        }                                                               \
  |  |  200|  27.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 27.6k]
  |  |  ------------------
  ------------------
 5097|  27.6k|            }
 5098|  5.19k|        }
 5099|  34.3k|        else {
 5100|  34.3k|            PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
 5101|   853k|            for (i = 0; i < n; i++) {
  ------------------
  |  Branch (5101:25): [True: 819k, False: 34.3k]
  ------------------
 5102|   819k|                Py_VISIT(entries[i].me_value);
  ------------------
  |  |  194|   819k|    do {                                                                \
  |  |  195|   819k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 710k, False: 108k]
  |  |  ------------------
  |  |  196|   710k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|   710k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   710k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|   710k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 710k]
  |  |  ------------------
  |  |  198|   710k|                return vret;                                            \
  |  |  199|   710k|        }                                                               \
  |  |  200|   819k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 819k]
  |  |  ------------------
  ------------------
 5103|   819k|            }
 5104|  34.3k|        }
 5105|  39.5k|    }
 5106|  6.66k|    else {
 5107|  6.66k|        PyDictKeyEntry *entries = DK_ENTRIES(keys);
 5108|   307k|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (5108:21): [True: 301k, False: 6.66k]
  ------------------
 5109|   301k|            if (entries[i].me_value != NULL) {
  ------------------
  |  Branch (5109:17): [True: 300k, False: 196]
  ------------------
 5110|   300k|                Py_VISIT(entries[i].me_value);
  ------------------
  |  |  194|   300k|    do {                                                                \
  |  |  195|   300k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 300k, False: 0]
  |  |  ------------------
  |  |  196|   300k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|   300k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   300k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|   300k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 300k]
  |  |  ------------------
  |  |  198|   300k|                return vret;                                            \
  |  |  199|   300k|        }                                                               \
  |  |  200|   300k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 300k]
  |  |  ------------------
  ------------------
 5111|   300k|                Py_VISIT(entries[i].me_key);
  ------------------
  |  |  194|   300k|    do {                                                                \
  |  |  195|   300k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 300k, False: 0]
  |  |  ------------------
  |  |  196|   300k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|   300k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   300k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|   300k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 300k]
  |  |  ------------------
  |  |  198|   300k|                return vret;                                            \
  |  |  199|   300k|        }                                                               \
  |  |  200|   300k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 300k]
  |  |  ------------------
  ------------------
 5112|   300k|            }
 5113|   301k|        }
 5114|  6.66k|    }
 5115|  46.2k|    return 0;
 5116|  46.2k|}
dictobject.c:dict_tp_clear:
 5120|     12|{
 5121|     12|    PyDict_Clear(op);
 5122|     12|    return 0;
 5123|     12|}
dictobject.c:dict_iter:
 5479|     28|{
 5480|     28|    PyDictObject *dict = (PyDictObject *)self;
 5481|     28|    return dictiter_new(dict, &PyDictIterKey_Type);
 5482|     28|}
dictobject.c:dictiter_new:
 5616|    145|{
 5617|    145|    Py_ssize_t used;
 5618|    145|    dictiterobject *di;
 5619|    145|    di = PyObject_GC_New(dictiterobject, itertype);
  ------------------
  |  |  181|    145|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 5620|    145|    if (di == NULL) {
  ------------------
  |  Branch (5620:9): [True: 0, False: 145]
  ------------------
 5621|      0|        return NULL;
 5622|      0|    }
 5623|    145|    di->di_dict = (PyDictObject*)Py_NewRef(dict);
  ------------------
  |  |  550|    145|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5624|    145|    used = GET_USED(dict);
  ------------------
  |  |  328|    145|#define GET_USED(ep) FT_ATOMIC_LOAD_SSIZE_RELAXED((ep)->ma_used)
  |  |  ------------------
  |  |  |  |  149|    145|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  |  |  ------------------
  ------------------
 5625|    145|    di->di_used = used;
 5626|    145|    di->len = used;
 5627|    145|    if (itertype == &PyDictRevIterKey_Type ||
  ------------------
  |  Branch (5627:9): [True: 0, False: 145]
  ------------------
 5628|    145|         itertype == &PyDictRevIterItem_Type ||
  ------------------
  |  Branch (5628:10): [True: 0, False: 145]
  ------------------
 5629|    145|         itertype == &PyDictRevIterValue_Type) {
  ------------------
  |  Branch (5629:10): [True: 0, False: 145]
  ------------------
 5630|      0|        if (_PyDict_HasSplitTable(dict)) {
  ------------------
  |  |   56|      0|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5631|      0|            di->di_pos = used - 1;
 5632|      0|        }
 5633|      0|        else {
 5634|      0|            di->di_pos = load_keys_nentries(dict) - 1;
 5635|      0|        }
 5636|      0|    }
 5637|    145|    else {
 5638|    145|        di->di_pos = 0;
 5639|    145|    }
 5640|    145|    if (itertype == &PyDictIterItem_Type ||
  ------------------
  |  Branch (5640:9): [True: 105, False: 40]
  ------------------
 5641|    105|        itertype == &PyDictRevIterItem_Type) {
  ------------------
  |  Branch (5641:9): [True: 0, False: 40]
  ------------------
 5642|    105|        di->di_result = _PyTuple_FromPairSteal(Py_None, Py_None);
  ------------------
  |  |  616|    105|#  define Py_None (&_Py_NoneStruct)
  ------------------
                      di->di_result = _PyTuple_FromPairSteal(Py_None, Py_None);
  ------------------
  |  |  616|    105|#  define Py_None (&_Py_NoneStruct)
  ------------------
 5643|    105|        if (di->di_result == NULL) {
  ------------------
  |  Branch (5643:13): [True: 0, False: 105]
  ------------------
 5644|      0|            Py_DECREF(di);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5645|      0|            return NULL;
 5646|      0|        }
 5647|    105|    }
 5648|     40|    else {
 5649|     40|        di->di_result = NULL;
 5650|     40|    }
 5651|    145|    _PyObject_GC_TRACK(di);
  ------------------
  |  |  505|    145|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5652|    145|    return (PyObject *)di;
 5653|    145|}
dictobject.c:dict___contains___impl:
 4767|      4|{
 4768|      4|    int contains = dict_contains((PyObject *)self, key);
 4769|      4|    if (contains < 0) {
  ------------------
  |  Branch (4769:9): [True: 0, False: 4]
  ------------------
 4770|      0|        return NULL;
 4771|      0|    }
 4772|      4|    if (contains) {
  ------------------
  |  Branch (4772:9): [True: 0, False: 4]
  ------------------
 4773|      0|        Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4774|      0|    }
 4775|      4|    Py_RETURN_FALSE;
  ------------------
  |  |   45|      4|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      4|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4776|      4|}
dictobject.c:dict_get_impl:
 4791|   595k|{
 4792|   595k|    PyObject *val = NULL;
 4793|   595k|    Py_hash_t hash;
 4794|   595k|    Py_ssize_t ix;
 4795|       |
 4796|   595k|    hash = _PyObject_HashDictKey(key);
 4797|   595k|    if (hash == -1) {
  ------------------
  |  Branch (4797:9): [True: 0, False: 595k]
  ------------------
 4798|      0|        dict_unhashable_type((PyObject*)self, key);
 4799|      0|        return NULL;
 4800|      0|    }
 4801|   595k|    ix = _Py_dict_lookup_threadsafe(self, key, hash, &val);
 4802|   595k|    if (ix == DKIX_ERROR)
  ------------------
  |  |  187|   595k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (4802:9): [True: 0, False: 595k]
  ------------------
 4803|      0|        return NULL;
 4804|   595k|    if (ix == DKIX_EMPTY || val == NULL) {
  ------------------
  |  |  185|  1.19M|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (4804:9): [True: 592k, False: 3.85k]
  |  Branch (4804:29): [True: 0, False: 3.85k]
  ------------------
 4805|   592k|        val = Py_NewRef(default_value);
  ------------------
  |  |  550|   592k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   592k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   592k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4806|   592k|    }
 4807|   595k|    return val;
 4808|   595k|}
dictobject.c:dict_setdefault_impl:
 4950|     60|{
 4951|     60|    PyObject *val;
 4952|     60|    dict_setdefault_ref_lock_held((PyObject *)self, key, default_value, &val, 1);
 4953|     60|    return val;
 4954|     60|}
dictobject.c:dict_pop_impl:
 4988|  48.6k|{
 4989|  48.6k|    return dict_pop_default((PyObject*)self, key, default_value);
 4990|  48.6k|}
dictobject.c:dict_keys_impl:
 7046|    317|{
 7047|    317|    return _PyDictView_New((PyObject *)self, &PyDictKeys_Type);
 7048|    317|}
dictobject.c:dict_items_impl:
 7158|    108|{
 7159|    108|    return _PyDictView_New((PyObject *)self, &PyDictItems_Type);
 7160|    108|}
dictobject.c:dict_values_impl:
 7248|      5|{
 7249|      5|    return _PyDictView_New((PyObject *)self, &PyDictValues_Type);
 7250|      5|}
dictobject.c:dict_update:
 4076|     45|{
 4077|     45|    if (dict_update_common(self, args, kwds, "update") != -1)
  ------------------
  |  Branch (4077:9): [True: 45, False: 0]
  ------------------
 4078|     45|        Py_RETURN_NONE;
  ------------------
  |  |  628|     45|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     45|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 4079|      0|    return NULL;
 4080|     45|}
dictobject.c:dict_update_common:
 4051|     53|{
 4052|     53|    PyObject *arg = NULL;
 4053|     53|    int result = 0;
 4054|       |
 4055|     53|    if (!PyArg_UnpackTuple(args, methname, 0, 1, &arg)) {
  ------------------
  |  Branch (4055:9): [True: 0, False: 53]
  ------------------
 4056|      0|        result = -1;
 4057|      0|    }
 4058|     53|    else if (arg != NULL) {
  ------------------
  |  Branch (4058:14): [True: 45, False: 8]
  ------------------
 4059|     45|        result = dict_update_arg(self, arg);
 4060|     45|    }
 4061|       |
 4062|     53|    if (result == 0 && kwds != NULL) {
  ------------------
  |  Branch (4062:9): [True: 53, False: 0]
  |  Branch (4062:24): [True: 0, False: 53]
  ------------------
 4063|      0|        if (PyArg_ValidateKeywordArguments(kwds))
  ------------------
  |  Branch (4063:13): [True: 0, False: 0]
  ------------------
 4064|      0|            result = dict_merge(self, kwds, 1, NULL);
 4065|      0|        else
 4066|      0|            result = -1;
 4067|      0|    }
 4068|     53|    return result;
 4069|     53|}
dictobject.c:dict_fromkeys_impl:
 4027|     16|{
 4028|     16|    return _PyDict_FromKeys((PyObject *)type, iterable, value);
 4029|     16|}
dictobject.c:dict_copy_impl:
 4446|      3|{
 4447|      3|    return PyDict_Copy((PyObject *)self);
 4448|      3|}
dictobject.c:dict_init:
 5397|      8|{
 5398|      8|    return dict_update_common(self, args, kwds, "dict");
 5399|      8|}
dictobject.c:dict_new:
 5385|     39|{
 5386|       |    /* tp_new ignores args/kwds; args/kwds are consumed by dict_init (tp_init). */
 5387|     39|    PyObject *self = dict_new_untracked(type);
 5388|     39|    if (self == NULL) {
  ------------------
  |  Branch (5388:9): [True: 0, False: 39]
  ------------------
 5389|      0|        return NULL;
 5390|      0|    }
 5391|     39|    _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|     39|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     39|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     39|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5392|     39|    return self;
 5393|     39|}
dictobject.c:dict_vectorcall:
 5404|     31|{
 5405|     31|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|     31|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 5406|     31|    if (!_PyArg_CheckPositional("dict", nargs, 0, 1)) {
  ------------------
  |  |   31|     31|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 31, False: 0]
  |  |  |  Branch (31:27): [True: 31, False: 0]
  |  |  ------------------
  |  |   32|     31|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5407|      0|        return NULL;
 5408|      0|    }
 5409|       |
 5410|     31|    PyObject *self = dict_new(_PyType_CAST(type), NULL, NULL);
  ------------------
  |  |  770|     31|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     31|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5410:31): [True: 31, False: 0]
  ------------------
 5411|     31|    if (self == NULL) {
  ------------------
  |  Branch (5411:9): [True: 0, False: 31]
  ------------------
 5412|      0|        return NULL;
 5413|      0|    }
 5414|     31|    if (nargs == 1) {
  ------------------
  |  Branch (5414:9): [True: 14, False: 17]
  ------------------
 5415|     14|        if (dict_update_arg(self, args[0]) < 0) {
  ------------------
  |  Branch (5415:13): [True: 0, False: 14]
  ------------------
 5416|      0|            Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5417|      0|            return NULL;
 5418|      0|        }
 5419|     14|        args++;
 5420|     14|    }
 5421|     31|    if (kwnames != NULL) {
  ------------------
  |  Branch (5421:9): [True: 1, False: 30]
  ------------------
 5422|      9|        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(kwnames); i++) {
  ------------------
  |  |   27|      9|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5422:32): [True: 8, False: 1]
  ------------------
 5423|      8|            PyObject *key = PyTuple_GET_ITEM(kwnames, i);  // borrowed
  ------------------
  |  |   29|      8|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      8|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5423:29): [True: 8, False: 0]
  ------------------
 5424|      8|            if (PyDict_SetItem(self, key, args[i]) < 0) {
  ------------------
  |  Branch (5424:17): [True: 0, False: 8]
  ------------------
 5425|      0|                Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5426|      0|                return NULL;
 5427|      0|            }
 5428|      8|        }
 5429|      1|    }
 5430|     31|    return self;
 5431|     31|}
dictobject.c:dictiter_dealloc:
 5657|    145|{
 5658|    145|    dictiterobject *di = (dictiterobject *)self;
 5659|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
 5660|    145|    _PyObject_GC_UNTRACK(di);
  ------------------
  |  |  507|    145|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5661|    145|    Py_XDECREF(di->di_dict);
  ------------------
  |  |  524|    145|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5662|    145|    Py_XDECREF(di->di_result);
  ------------------
  |  |  524|    145|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5663|    145|    PyObject_GC_Del(di);
 5664|    145|}
dictobject.c:dictiter_iternextkey:
 5780|    374|{
 5781|    374|    dictiterobject *di = (dictiterobject *)self;
 5782|    374|    PyDictObject *d = di->di_dict;
 5783|       |
 5784|    374|    if (d == NULL)
  ------------------
  |  Branch (5784:9): [True: 0, False: 374]
  ------------------
 5785|      0|        return NULL;
 5786|       |
 5787|    374|    PyObject *value;
 5788|       |#ifdef Py_GIL_DISABLED
 5789|       |    if (dictiter_iternext_threadsafe(d, self, &value, NULL) < 0) {
 5790|       |        value = NULL;
 5791|       |    }
 5792|       |#else
 5793|    374|    value = dictiter_iternextkey_lock_held(d, self);
 5794|    374|#endif
 5795|       |
 5796|    374|    return value;
 5797|    374|}
dictobject.c:dictiter_iternextkey_lock_held:
 5711|    374|{
 5712|    374|    dictiterobject *di = (dictiterobject *)self;
 5713|    374|    PyObject *key;
 5714|    374|    Py_ssize_t i;
 5715|    374|    PyDictKeysObject *k;
 5716|       |
 5717|    374|    assert (PyAnyDict_Check(d));
  ------------------
  |  Branch (5717:5): [True: 374, False: 0]
  |  Branch (5717:5): [True: 0, False: 0]
  ------------------
 5718|    374|    ASSERT_DICT_LOCKED(d);
 5719|       |
 5720|    374|    if (di->di_used != d->ma_used) {
  ------------------
  |  Branch (5720:9): [True: 0, False: 374]
  ------------------
 5721|      0|        PyErr_SetString(PyExc_RuntimeError,
 5722|      0|                        "dictionary changed size during iteration");
 5723|      0|        di->di_used = -1; /* Make this state sticky */
 5724|      0|        return NULL;
 5725|      0|    }
 5726|       |
 5727|    374|    i = di->di_pos;
 5728|    374|    k = d->ma_keys;
 5729|    374|    assert(i >= 0);
  ------------------
  |  Branch (5729:5): [True: 374, False: 0]
  ------------------
 5730|    374|    if (_PyDict_HasSplitTable(d)) {
  ------------------
  |  |   56|    374|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 374]
  |  |  ------------------
  ------------------
 5731|      0|        if (i >= d->ma_used)
  ------------------
  |  Branch (5731:13): [True: 0, False: 0]
  ------------------
 5732|      0|            goto fail;
 5733|      0|        int index = get_index_from_order(d, i);
 5734|      0|        key = LOAD_SHARED_KEY(DK_UNICODE_ENTRIES(k)[index].me_key);
  ------------------
  |  |  260|      0|#define LOAD_SHARED_KEY(key) key
  ------------------
 5735|      0|        assert(d->ma_values->values[index] != NULL);
  ------------------
  |  Branch (5735:9): [True: 0, False: 0]
  ------------------
 5736|      0|    }
 5737|    374|    else {
 5738|    374|        Py_ssize_t n = k->dk_nentries;
 5739|    374|        if (DK_IS_UNICODE(k)) {
  ------------------
  |  |  294|    374|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 274, False: 100]
  |  |  ------------------
  ------------------
 5740|    274|            PyDictUnicodeEntry *entry_ptr = &DK_UNICODE_ENTRIES(k)[i];
 5741|    295|            while (i < n && entry_ptr->me_value == NULL) {
  ------------------
  |  Branch (5741:20): [True: 269, False: 26]
  |  Branch (5741:29): [True: 21, False: 248]
  ------------------
 5742|     21|                entry_ptr++;
 5743|     21|                i++;
 5744|     21|            }
 5745|    274|            if (i >= n)
  ------------------
  |  Branch (5745:17): [True: 26, False: 248]
  ------------------
 5746|     26|                goto fail;
 5747|    248|            key = entry_ptr->me_key;
 5748|    248|        }
 5749|    100|        else {
 5750|    100|            PyDictKeyEntry *entry_ptr = &DK_ENTRIES(k)[i];
 5751|    100|            while (i < n && entry_ptr->me_value == NULL) {
  ------------------
  |  Branch (5751:20): [True: 90, False: 10]
  |  Branch (5751:29): [True: 0, False: 90]
  ------------------
 5752|      0|                entry_ptr++;
 5753|      0|                i++;
 5754|      0|            }
 5755|    100|            if (i >= n)
  ------------------
  |  Branch (5755:17): [True: 10, False: 90]
  ------------------
 5756|     10|                goto fail;
 5757|     90|            key = entry_ptr->me_key;
 5758|     90|        }
 5759|    374|    }
 5760|       |    // We found an element (key), but did not expect it
 5761|    338|    if (di->len == 0) {
  ------------------
  |  Branch (5761:9): [True: 0, False: 338]
  ------------------
 5762|      0|        PyErr_SetString(PyExc_RuntimeError,
 5763|      0|                        "dictionary keys changed during iteration");
 5764|      0|        goto fail;
 5765|      0|    }
 5766|    338|    di->di_pos = i+1;
 5767|    338|    di->len--;
 5768|    338|    return Py_NewRef(key);
  ------------------
  |  |  550|    338|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    338|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    338|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5769|       |
 5770|     36|fail:
 5771|     36|    di->di_dict = NULL;
 5772|     36|    Py_DECREF(d);
  ------------------
  |  |  430|     36|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5773|       |    return NULL;
 5774|    338|}
dictobject.c:dictiter_len:
 5677|     84|{
 5678|     84|    dictiterobject *di = (dictiterobject *)self;
 5679|     84|    Py_ssize_t len = 0;
 5680|     84|    if (di->di_dict != NULL && di->di_used == GET_USED(di->di_dict))
  ------------------
  |  |  328|     84|#define GET_USED(ep) FT_ATOMIC_LOAD_SSIZE_RELAXED((ep)->ma_used)
  |  |  ------------------
  |  |  |  |  149|     84|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  |  |  ------------------
  ------------------
  |  Branch (5680:9): [True: 84, False: 0]
  |  Branch (5680:32): [True: 84, False: 0]
  ------------------
 5681|     84|        len = FT_ATOMIC_LOAD_SSIZE_RELAXED(di->len);
  ------------------
  |  |  149|     84|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 5682|     84|    return PyLong_FromSize_t(len);
 5683|     84|}
dictobject.c:dictiter_iternextitem:
 6181|  1.20k|{
 6182|  1.20k|    dictiterobject *di = (dictiterobject *)self;
 6183|  1.20k|    PyDictObject *d = di->di_dict;
 6184|       |
 6185|  1.20k|    if (d == NULL)
  ------------------
  |  Branch (6185:9): [True: 0, False: 1.20k]
  ------------------
 6186|      0|        return NULL;
 6187|       |
 6188|  1.20k|    PyObject *key, *value;
 6189|       |#ifdef Py_GIL_DISABLED
 6190|       |    if (dictiter_iternext_threadsafe(d, self, &key, &value) == 0) {
 6191|       |#else
 6192|  1.20k|    if (dictiter_iternextitem_lock_held(d, self, &key, &value) == 0) {
  ------------------
  |  Branch (6192:9): [True: 1.10k, False: 103]
  ------------------
 6193|       |
 6194|  1.10k|#endif
 6195|  1.10k|        PyObject *result = di->di_result;
 6196|  1.10k|        if (acquire_iter_result(result)) {
  ------------------
  |  Branch (6196:13): [True: 317, False: 783]
  ------------------
 6197|    317|            PyObject *oldkey = PyTuple_GET_ITEM(result, 0);
  ------------------
  |  |   29|    317|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    317|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6197:32): [True: 317, False: 0]
  ------------------
 6198|    317|            PyObject *oldvalue = PyTuple_GET_ITEM(result, 1);
  ------------------
  |  |   29|    317|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    317|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6198:34): [True: 317, False: 0]
  ------------------
 6199|    317|            PyTuple_SET_ITEM(result, 0, key);
  ------------------
  |  |   40|    317|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6200|    317|            PyTuple_SET_ITEM(result, 1, value);
  ------------------
  |  |   40|    317|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6201|    317|            Py_DECREF(oldkey);
  ------------------
  |  |  430|    317|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6202|    317|            Py_DECREF(oldvalue);
  ------------------
  |  |  430|    317|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6203|       |            // bpo-42536: The GC may have untracked this result tuple. Since we're
 6204|       |            // recycling it, make sure it's tracked again:
 6205|    317|            _PyTuple_Recycle(result);
 6206|    317|        }
 6207|    783|        else {
 6208|    783|            result = _PyTuple_FromPairSteal(key, value);
 6209|    783|        }
 6210|  1.10k|        return result;
 6211|  1.10k|    }
 6212|    103|    return NULL;
 6213|  1.20k|}
dictobject.c:dictiter_iternextitem_lock_held:
 5958|  1.20k|{
 5959|  1.20k|    dictiterobject *di = (dictiterobject *)self;
 5960|  1.20k|    PyObject *key, *value;
 5961|  1.20k|    Py_ssize_t i;
 5962|       |
 5963|  1.20k|    assert (PyAnyDict_Check(d));
  ------------------
  |  Branch (5963:5): [True: 1.20k, False: 0]
  |  Branch (5963:5): [True: 0, False: 0]
  ------------------
 5964|  1.20k|    ASSERT_DICT_LOCKED(d);
 5965|       |
 5966|  1.20k|    if (di->di_used != d->ma_used) {
  ------------------
  |  Branch (5966:9): [True: 0, False: 1.20k]
  ------------------
 5967|      0|        PyErr_SetString(PyExc_RuntimeError,
 5968|      0|                        "dictionary changed size during iteration");
 5969|      0|        di->di_used = -1; /* Make this state sticky */
 5970|      0|        return -1;
 5971|      0|    }
 5972|       |
 5973|  1.20k|    i = FT_ATOMIC_LOAD_SSIZE_RELAXED(di->di_pos);
  ------------------
  |  |  149|  1.20k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 5974|       |
 5975|  1.20k|    assert(i >= 0);
  ------------------
  |  Branch (5975:5): [True: 1.20k, False: 0]
  ------------------
 5976|  1.20k|    if (_PyDict_HasSplitTable(d)) {
  ------------------
  |  |   56|  1.20k|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 0, False: 1.20k]
  |  |  ------------------
  ------------------
 5977|      0|        if (i >= d->ma_used)
  ------------------
  |  Branch (5977:13): [True: 0, False: 0]
  ------------------
 5978|      0|            goto fail;
 5979|      0|        int index = get_index_from_order(d, i);
 5980|      0|        key = LOAD_SHARED_KEY(DK_UNICODE_ENTRIES(d->ma_keys)[index].me_key);
  ------------------
  |  |  260|      0|#define LOAD_SHARED_KEY(key) key
  ------------------
 5981|      0|        value = d->ma_values->values[index];
 5982|      0|        assert(value != NULL);
  ------------------
  |  Branch (5982:9): [True: 0, False: 0]
  ------------------
 5983|      0|    }
 5984|  1.20k|    else {
 5985|  1.20k|        Py_ssize_t n = d->ma_keys->dk_nentries;
 5986|  1.20k|        if (DK_IS_UNICODE(d->ma_keys)) {
  ------------------
  |  |  294|  1.20k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 1.20k, False: 0]
  |  |  ------------------
  ------------------
 5987|  1.20k|            PyDictUnicodeEntry *entry_ptr = &DK_UNICODE_ENTRIES(d->ma_keys)[i];
 5988|  1.34k|            while (i < n && entry_ptr->me_value == NULL) {
  ------------------
  |  Branch (5988:20): [True: 1.24k, False: 103]
  |  Branch (5988:29): [True: 143, False: 1.10k]
  ------------------
 5989|    143|                entry_ptr++;
 5990|    143|                i++;
 5991|    143|            }
 5992|  1.20k|            if (i >= n)
  ------------------
  |  Branch (5992:17): [True: 103, False: 1.10k]
  ------------------
 5993|    103|                goto fail;
 5994|  1.10k|            key = entry_ptr->me_key;
 5995|  1.10k|            value = entry_ptr->me_value;
 5996|  1.10k|        }
 5997|      0|        else {
 5998|      0|            PyDictKeyEntry *entry_ptr = &DK_ENTRIES(d->ma_keys)[i];
 5999|      0|            while (i < n && entry_ptr->me_value == NULL) {
  ------------------
  |  Branch (5999:20): [True: 0, False: 0]
  |  Branch (5999:29): [True: 0, False: 0]
  ------------------
 6000|      0|                entry_ptr++;
 6001|      0|                i++;
 6002|      0|            }
 6003|      0|            if (i >= n)
  ------------------
  |  Branch (6003:17): [True: 0, False: 0]
  ------------------
 6004|      0|                goto fail;
 6005|      0|            key = entry_ptr->me_key;
 6006|      0|            value = entry_ptr->me_value;
 6007|      0|        }
 6008|  1.20k|    }
 6009|       |    // We found an element, but did not expect it
 6010|  1.10k|    if (di->len == 0) {
  ------------------
  |  Branch (6010:9): [True: 0, False: 1.10k]
  ------------------
 6011|      0|        PyErr_SetString(PyExc_RuntimeError,
 6012|      0|                        "dictionary keys changed during iteration");
 6013|      0|        goto fail;
 6014|      0|    }
 6015|  1.10k|    di->di_pos = i+1;
 6016|  1.10k|    di->len--;
 6017|  1.10k|    if (out_key != NULL) {
  ------------------
  |  Branch (6017:9): [True: 1.10k, False: 0]
  ------------------
 6018|  1.10k|        *out_key = Py_NewRef(key);
  ------------------
  |  |  550|  1.10k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6019|  1.10k|    }
 6020|  1.10k|    if (out_value != NULL) {
  ------------------
  |  Branch (6020:9): [True: 1.10k, False: 0]
  ------------------
 6021|  1.10k|        *out_value = Py_NewRef(value);
  ------------------
  |  |  550|  1.10k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6022|  1.10k|    }
 6023|  1.10k|    return 0;
 6024|       |
 6025|    103|fail:
 6026|    103|    di->di_dict = NULL;
 6027|    103|    Py_DECREF(d);
  ------------------
  |  |  430|    103|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6028|    103|    return -1;
 6029|  1.10k|}
dictobject.c:acquire_iter_result:
 6171|  1.10k|{
 6172|  1.10k|    if (_PyObject_IsUniquelyReferenced(result)) {
  ------------------
  |  Branch (6172:9): [True: 317, False: 783]
  ------------------
 6173|    317|        Py_INCREF(result);
  ------------------
  |  |  310|    317|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6174|    317|        return true;
 6175|    317|    }
 6176|    783|    return false;
 6177|  1.10k|}
dictobject.c:dictview_len:
 6459|    153|{
 6460|    153|    _PyDictViewObject *dv = (_PyDictViewObject *)self;
 6461|    153|    Py_ssize_t len = 0;
 6462|    153|    if (dv->dv_dict != NULL)
  ------------------
  |  Branch (6462:9): [True: 153, False: 0]
  ------------------
 6463|    153|        len = GET_USED(dv->dv_dict);
  ------------------
  |  |  328|    153|#define GET_USED(ep) FT_ATOMIC_LOAD_SSIZE_RELAXED((ep)->ma_used)
  |  |  ------------------
  |  |  |  |  149|    153|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  |  |  ------------------
  ------------------
 6464|    153|    return len;
 6465|    153|}
dictobject.c:dictkeys_contains:
 6637|    429|{
 6638|    429|    _PyDictViewObject *dv = (_PyDictViewObject *)self;
 6639|    429|    if (dv->dv_dict == NULL)
  ------------------
  |  Branch (6639:9): [True: 0, False: 429]
  ------------------
 6640|      0|        return 0;
 6641|    429|    return dict_contains((PyObject *)dv->dv_dict, obj);
 6642|    429|}
dictobject.c:dictview_dealloc:
 6441|    430|{
 6442|    430|    _PyDictViewObject *dv = (_PyDictViewObject *)self;
 6443|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
 6444|    430|    _PyObject_GC_UNTRACK(dv);
  ------------------
  |  |  507|    430|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    430|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    430|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6445|    430|    Py_XDECREF(dv->dv_dict);
  ------------------
  |  |  524|    430|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    430|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    430|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6446|    430|    PyObject_GC_Del(dv);
 6447|    430|}
dictobject.c:dictviews_sub:
 6674|    152|{
 6675|    152|    PyObject *result = dictviews_to_set(self);
 6676|    152|    if (result == NULL) {
  ------------------
  |  Branch (6676:9): [True: 0, False: 152]
  ------------------
 6677|      0|        return NULL;
 6678|      0|    }
 6679|       |
 6680|    152|    PyObject *tmp = PyObject_CallMethodOneArg(
 6681|    152|            result, &_Py_ID(difference_update), other);
  ------------------
  |  |  936|    152|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    152|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    152|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6682|    152|    if (tmp == NULL) {
  ------------------
  |  Branch (6682:9): [True: 0, False: 152]
  ------------------
 6683|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6684|      0|        return NULL;
 6685|      0|    }
 6686|       |
 6687|    152|    Py_DECREF(tmp);
  ------------------
  |  |  430|    152|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6688|    152|    return result;
 6689|    152|}
dictobject.c:dictviews_to_set:
 6660|    152|{
 6661|    152|    PyObject *left = self;
 6662|    152|    if (PyDictKeys_Check(self)) {
  ------------------
  |  |   93|    152|#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type)
  |  |  ------------------
  |  |  |  |  378|    152|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 152, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6663|       |        // PySet_New() has fast path for the dict object.
 6664|    152|        PyObject *dict = (PyObject *)((_PyDictViewObject *)self)->dv_dict;
 6665|    152|        if (PyAnyDict_CheckExact(dict)) {
  ------------------
  |  |   41|    152|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|    152|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|    304|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 152, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6666|    152|            left = dict;
 6667|    152|        }
 6668|    152|    }
 6669|    152|    return PySet_New(left);
 6670|    152|}
dictobject.c:dictview_richcompare:
 6542|    152|{
 6543|    152|    Py_ssize_t len_self, len_other;
 6544|    152|    int ok;
 6545|    152|    PyObject *result;
 6546|       |
 6547|    152|    assert(self != NULL);
  ------------------
  |  Branch (6547:5): [True: 152, False: 0]
  ------------------
 6548|    152|    assert(PyDictViewSet_Check(self));
  ------------------
  |  Branch (6548:5): [True: 152, False: 0]
  |  Branch (6548:5): [True: 0, False: 0]
  ------------------
 6549|    152|    assert(other != NULL);
  ------------------
  |  Branch (6549:5): [True: 152, False: 0]
  ------------------
 6550|       |
 6551|    152|    if (!PyAnySet_Check(other) && !PyDictViewSet_Check(other))
  ------------------
  |  |   31|    304|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    304|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 152, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    152|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|    152|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|    304|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                  if (!PyAnySet_Check(other) && !PyDictViewSet_Check(other))
  ------------------
  |  |   98|      0|    (PyDictKeys_Check(op) || PyDictItems_Check(op))
  |  |  ------------------
  |  |  |  |   93|      0|#define PyDictKeys_Check(op) PyObject_TypeCheck((op), &PyDictKeys_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDictKeys_Check(op) || PyDictItems_Check(op))
  |  |  ------------------
  |  |  |  |   95|      0|#define PyDictItems_Check(op) PyObject_TypeCheck((op), &PyDictItems_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6552|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 6553|       |
 6554|    152|    len_self = PyObject_Size(self);
 6555|    152|    if (len_self < 0)
  ------------------
  |  Branch (6555:9): [True: 0, False: 152]
  ------------------
 6556|      0|        return NULL;
 6557|    152|    len_other = PyObject_Size(other);
 6558|    152|    if (len_other < 0)
  ------------------
  |  Branch (6558:9): [True: 0, False: 152]
  ------------------
 6559|      0|        return NULL;
 6560|       |
 6561|    152|    ok = 0;
 6562|    152|    switch(op) {
  ------------------
  |  Branch (6562:12): [True: 152, False: 0]
  ------------------
 6563|       |
 6564|      0|    case Py_NE:
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (6564:5): [True: 0, False: 152]
  ------------------
 6565|      0|    case Py_EQ:
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
  |  Branch (6565:5): [True: 0, False: 152]
  ------------------
 6566|      0|        if (len_self == len_other)
  ------------------
  |  Branch (6566:13): [True: 0, False: 0]
  ------------------
 6567|      0|            ok = all_contained_in(self, other);
 6568|      0|        if (op == Py_NE && ok >= 0)
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (6568:13): [True: 0, False: 0]
  |  Branch (6568:28): [True: 0, False: 0]
  ------------------
 6569|      0|            ok = !ok;
 6570|      0|        break;
 6571|       |
 6572|      0|    case Py_LT:
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  |  Branch (6572:5): [True: 0, False: 152]
  ------------------
 6573|      0|        if (len_self < len_other)
  ------------------
  |  Branch (6573:13): [True: 0, False: 0]
  ------------------
 6574|      0|            ok = all_contained_in(self, other);
 6575|      0|        break;
 6576|       |
 6577|      0|      case Py_LE:
  ------------------
  |  |  653|      0|#define Py_LE 1
  ------------------
  |  Branch (6577:7): [True: 0, False: 152]
  ------------------
 6578|      0|          if (len_self <= len_other)
  ------------------
  |  Branch (6578:15): [True: 0, False: 0]
  ------------------
 6579|      0|              ok = all_contained_in(self, other);
 6580|      0|          break;
 6581|       |
 6582|      0|    case Py_GT:
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  |  Branch (6582:5): [True: 0, False: 152]
  ------------------
 6583|      0|        if (len_self > len_other)
  ------------------
  |  Branch (6583:13): [True: 0, False: 0]
  ------------------
 6584|      0|            ok = all_contained_in(other, self);
 6585|      0|        break;
 6586|       |
 6587|    152|    case Py_GE:
  ------------------
  |  |  657|    152|#define Py_GE 5
  ------------------
  |  Branch (6587:5): [True: 152, False: 0]
  ------------------
 6588|    152|        if (len_self >= len_other)
  ------------------
  |  Branch (6588:13): [True: 152, False: 0]
  ------------------
 6589|    152|            ok = all_contained_in(other, self);
 6590|    152|        break;
 6591|       |
 6592|    152|    }
 6593|    152|    if (ok < 0)
  ------------------
  |  Branch (6593:9): [True: 0, False: 152]
  ------------------
 6594|      0|        return NULL;
 6595|    152|    result = ok ? Py_True : Py_False;
  ------------------
  |  |   26|    152|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  result = ok ? Py_True : Py_False;
  ------------------
  |  |   25|    152|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6595:14): [True: 152, False: 0]
  ------------------
 6596|    152|    return Py_NewRef(result);
  ------------------
  |  |  550|    152|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6597|    152|}
dictobject.c:all_contained_in:
 6518|    152|{
 6519|    152|    PyObject *iter = PyObject_GetIter(self);
 6520|    152|    int ok = 1;
 6521|       |
 6522|    152|    if (iter == NULL)
  ------------------
  |  Branch (6522:9): [True: 0, False: 152]
  ------------------
 6523|      0|        return -1;
 6524|    526|    for (;;) {
 6525|    526|        PyObject *next = PyIter_Next(iter);
 6526|    526|        if (next == NULL) {
  ------------------
  |  Branch (6526:13): [True: 152, False: 374]
  ------------------
 6527|    152|            if (PyErr_Occurred())
  ------------------
  |  Branch (6527:17): [True: 0, False: 152]
  ------------------
 6528|      0|                ok = -1;
 6529|    152|            break;
 6530|    152|        }
 6531|    374|        ok = PySequence_Contains(other, next);
 6532|    374|        Py_DECREF(next);
  ------------------
  |  |  430|    374|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    374|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    374|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6533|    374|        if (ok <= 0)
  ------------------
  |  Branch (6533:13): [True: 0, False: 374]
  ------------------
 6534|      0|            break;
 6535|    374|    }
 6536|    152|    Py_DECREF(iter);
  ------------------
  |  |  430|    152|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6537|    152|    return ok;
 6538|    152|}
dictobject.c:dictkeys_iter:
 6627|     10|{
 6628|     10|    _PyDictViewObject *dv = (_PyDictViewObject *)self;
 6629|     10|    if (dv->dv_dict == NULL) {
  ------------------
  |  Branch (6629:9): [True: 0, False: 10]
  ------------------
 6630|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6631|      0|    }
 6632|     10|    return dictiter_new(dv->dv_dict, &PyDictIterKey_Type);
 6633|     10|}
dictobject.c:dictitems_iter:
 7064|    105|{
 7065|    105|    _PyDictViewObject *dv = (_PyDictViewObject *)self;
 7066|    105|    if (dv->dv_dict == NULL) {
  ------------------
  |  Branch (7066:9): [True: 0, False: 105]
  ------------------
 7067|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 7068|      0|    }
 7069|    105|    return dictiter_new(dv->dv_dict, &PyDictIterItem_Type);
 7070|    105|}
dictobject.c:dictvalues_iter:
 7176|      2|{
 7177|      2|    _PyDictViewObject *dv = (_PyDictViewObject *)self;
 7178|      2|    if (dv->dv_dict == NULL) {
  ------------------
  |  Branch (7178:9): [True: 0, False: 2]
  ------------------
 7179|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 7180|      0|    }
 7181|      2|    return dictiter_new(dv->dv_dict, &PyDictIterValue_Type);
 7182|      2|}
dictobject.c:get_log2_bytes:
  804|  1.22M|{
  805|  1.22M|    int log2_bytes;
  806|  1.22M|    assert(log2_size >= PyDict_LOG_MINSIZE);
  ------------------
  |  Branch (806:5): [True: 1.22M, False: 0]
  ------------------
  807|       |
  808|  1.22M|    if (log2_size < 8) {
  ------------------
  |  Branch (808:9): [True: 1.21M, False: 2.37k]
  ------------------
  809|  1.21M|        log2_bytes = log2_size;
  810|  1.21M|    }
  811|  2.37k|    else if (log2_size < 16) {
  ------------------
  |  Branch (811:14): [True: 2.37k, False: 1]
  ------------------
  812|  2.37k|        log2_bytes = log2_size + 1;
  813|  2.37k|    }
  814|      1|#if SIZEOF_VOID_P > 4
  815|      1|    else if (log2_size >= 32) {
  ------------------
  |  Branch (815:14): [True: 0, False: 1]
  ------------------
  816|      0|        log2_bytes = log2_size + 3;
  817|      0|    }
  818|      1|#endif
  819|      1|    else {
  820|      1|        log2_bytes = log2_size + 2;
  821|      1|    }
  822|       |
  823|  1.22M|    return log2_bytes;
  824|  1.22M|}
dictobject.c:init_keys_object:
  829|  1.22M|{
  830|       |#ifdef Py_REF_DEBUG
  831|       |    _Py_IncRefTotal(_PyThreadState_GET());
  832|       |#endif
  833|  1.22M|    dk->dk_refcnt = 1;
  834|  1.22M|    dk->dk_log2_size = log2_size;
  835|  1.22M|    dk->dk_log2_index_bytes = log2_bytes;
  836|  1.22M|    dk->dk_kind = kind;
  837|       |#ifdef Py_GIL_DISABLED
  838|       |    dk->dk_mutex = (PyMutex){0};
  839|       |#endif
  840|  1.22M|    dk->dk_nentries = 0;
  841|  1.22M|    dk->dk_usable = usable;
  842|  1.22M|    dk->dk_version = 0;
  843|  1.22M|    memset(&dk->dk_indices[0], 0xff, ((size_t)1 << log2_bytes));
  844|  1.22M|    memset(&dk->dk_indices[(size_t)1 << log2_bytes], 0, entry_size * usable);
  845|  1.22M|}
dictobject.c:insert_split_key:
 1944|  2.52k|{
 1945|  2.52k|    assert(PyUnicode_CheckExact(key));
  ------------------
  |  Branch (1945:5): [True: 2.52k, False: 0]
  ------------------
 1946|  2.52k|    Py_ssize_t ix;
 1947|       |
 1948|       |
 1949|       |#ifdef Py_GIL_DISABLED
 1950|       |    ix = unicodekeys_lookup_unicode_threadsafe(keys, key, hash);
 1951|       |    if (ix >= 0) {
 1952|       |        return ix;
 1953|       |    }
 1954|       |
 1955|       |    // We need to acquire the type lock before the keys mutex. Another lock
 1956|       |    // is never acquired below the keys mutex but a keys mutex can be acquired
 1957|       |    // elsewhere while we hold the types lock. To avoid deadlocks we must always
 1958|       |    // acquire the type lock first.
 1959|       |    Py_BEGIN_CRITICAL_SECTION_MUTEX(&_PyInterpreterState_GET()->types.mutex);
 1960|       |#endif
 1961|       |
 1962|  2.52k|    LOCK_KEYS(keys);
 1963|  2.52k|    ix = unicodekeys_lookup_unicode(keys, key, hash);
 1964|  2.52k|    if (ix == DKIX_EMPTY && keys->dk_usable > 0) {
  ------------------
  |  |  185|  5.04k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (1964:9): [True: 354, False: 2.16k]
  |  Branch (1964:29): [True: 354, False: 0]
  ------------------
 1965|       |        // Insert into new slot
 1966|    354|        FT_ATOMIC_STORE_UINT32_RELAXED(keys->dk_version, 0);
  ------------------
  |  |  172|    354|#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value
  ------------------
 1967|    354|        struct _instancekeysobject *shared_keys = _PyDictKeys_AsSharedKeys(keys);
 1968|    354|        PyTypeObject *type = FT_ATOMIC_LOAD_PTR_ACQUIRE(shared_keys->dsk_owning_type);
  ------------------
  |  |  150|    354|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
 1969|    354|        if (type) {
  ------------------
  |  Branch (1969:13): [True: 354, False: 0]
  ------------------
 1970|       |            // we acquired the type lock above
 1971|    354|            _PyType_Modified_Unlocked(type);
 1972|    354|        }
 1973|    354|        Py_ssize_t hashpos = find_empty_slot(keys, hash);
 1974|    354|        ix = keys->dk_nentries;
 1975|    354|        dictkeys_set_index(keys, hashpos, ix);
 1976|    354|        PyDictUnicodeEntry *ep = &DK_UNICODE_ENTRIES(keys)[ix];
 1977|    354|        STORE_SHARED_KEY(ep->me_key, Py_NewRef(key));
  ------------------
  |  |  261|    354|#define STORE_SHARED_KEY(key, value) key = value
  ------------------
 1978|    354|        split_keys_entry_added(keys);
 1979|    354|    }
 1980|  2.52k|    assert (ix < SHARED_KEYS_MAX_SIZE);
  ------------------
  |  Branch (1980:5): [True: 2.52k, False: 0]
  ------------------
 1981|  2.52k|    UNLOCK_KEYS(keys);
 1982|       |
 1983|       |#ifdef Py_GIL_DISABLED
 1984|       |    Py_END_CRITICAL_SECTION();
 1985|       |#endif
 1986|  2.52k|    return ix;
 1987|  2.52k|}
dictobject.c:split_keys_entry_added:
  275|    354|{
  276|    354|    keys->dk_usable--;
  277|    354|    keys->dk_nentries++;
  278|    354|}
dictobject.c:store_instance_attr_lock_held:
 7447|    901|{
 7448|    901|    PyDictKeysObject *keys = CACHED_KEYS(Py_TYPE(obj));
  ------------------
  |  |  911|    901|#define CACHED_KEYS(tp) (((PyHeapTypeObject*)tp)->ht_cached_keys)
  ------------------
 7449|    901|    assert(keys != NULL);
  ------------------
  |  Branch (7449:5): [True: 901, False: 0]
  ------------------
 7450|    901|    assert(values != NULL);
  ------------------
  |  Branch (7450:5): [True: 901, False: 0]
  ------------------
 7451|    901|    assert(Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  ------------------
  |  Branch (7451:5): [True: 901, False: 0]
  ------------------
 7452|    901|    Py_ssize_t ix = DKIX_EMPTY;
  ------------------
  |  |  185|    901|#define DKIX_EMPTY (-1)
  ------------------
 7453|    901|    PyDictObject *dict = _PyObject_GetManagedDict(obj);
 7454|    901|    assert(dict == NULL || ((PyDictObject *)dict)->ma_values == values);
  ------------------
  |  Branch (7454:5): [True: 901, False: 0]
  |  Branch (7454:5): [True: 0, False: 0]
  ------------------
 7455|    901|    if (PyUnicode_CheckExact(name)) {
  ------------------
  |  |  104|    901|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    901|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    901|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    901|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 901, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7456|    901|        Py_hash_t hash = unicode_get_hash(name);
 7457|    901|        if (hash == -1) {
  ------------------
  |  Branch (7457:13): [True: 0, False: 901]
  ------------------
 7458|      0|            hash = PyUnicode_Type.tp_hash(name);
 7459|      0|            assert(hash != -1);
  ------------------
  |  Branch (7459:13): [True: 0, False: 0]
  ------------------
 7460|      0|        }
 7461|       |
 7462|    901|        ix = insert_split_key(keys, name, hash);
 7463|       |
 7464|       |#ifdef Py_STATS
 7465|       |        if (ix == DKIX_EMPTY) {
 7466|       |            if (PyUnicode_CheckExact(name)) {
 7467|       |                if (shared_keys_usable_size(keys) == SHARED_KEYS_MAX_SIZE) {
 7468|       |                    OBJECT_STAT_INC(dict_materialized_too_big);
 7469|       |                }
 7470|       |                else {
 7471|       |                    OBJECT_STAT_INC(dict_materialized_new_key);
 7472|       |                }
 7473|       |            }
 7474|       |            else {
 7475|       |                OBJECT_STAT_INC(dict_materialized_str_subclass);
 7476|       |            }
 7477|       |        }
 7478|       |#endif
 7479|    901|    }
 7480|       |
 7481|    901|    if (ix == DKIX_EMPTY) {
  ------------------
  |  |  185|    901|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (7481:9): [True: 0, False: 901]
  ------------------
 7482|      0|        int res;
 7483|      0|        if (dict == NULL) {
  ------------------
  |  Branch (7483:13): [True: 0, False: 0]
  ------------------
 7484|       |            // Make the dict but don't publish it in the object
 7485|       |            // so that no one else will see it.
 7486|      0|            dict = make_dict_from_instance_attributes(keys, values);
 7487|      0|            if (dict == NULL ||
  ------------------
  |  Branch (7487:17): [True: 0, False: 0]
  ------------------
 7488|      0|                _PyDict_SetItem_LockHeld(dict, name, value) < 0) {
  ------------------
  |  Branch (7488:17): [True: 0, False: 0]
  ------------------
 7489|      0|                Py_XDECREF(dict);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7490|      0|                return -1;
 7491|      0|            }
 7492|       |
 7493|      0|            FT_ATOMIC_STORE_PTR_RELEASE(_PyObject_ManagedDictPointer(obj)->dict,
  ------------------
  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 7494|      0|                                        (PyDictObject *)dict);
 7495|      0|            return 0;
 7496|      0|        }
 7497|       |
 7498|      0|        _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(dict);
 7499|       |
 7500|      0|        res = _PyDict_SetItem_LockHeld(dict, name, value);
 7501|      0|        return res;
 7502|      0|    }
 7503|       |
 7504|    901|    PyObject *old_value = values->values[ix];
 7505|    901|    if (old_value == NULL && value == NULL) {
  ------------------
  |  Branch (7505:9): [True: 860, False: 41]
  |  Branch (7505:30): [True: 0, False: 860]
  ------------------
 7506|      0|        PyErr_Format(PyExc_AttributeError,
 7507|      0|                        "'%.100s' object has no attribute '%U'",
 7508|      0|                        Py_TYPE(obj)->tp_name, name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7509|      0|        (void)_PyObject_SetAttributeErrorContext(obj, name);
 7510|      0|        return -1;
 7511|      0|    }
 7512|       |
 7513|    901|    if (dict) {
  ------------------
  |  Branch (7513:9): [True: 0, False: 901]
  ------------------
 7514|      0|        PyDict_WatchEvent event = (old_value == NULL ? PyDict_EVENT_ADDED :
  ------------------
  |  Branch (7514:36): [True: 0, False: 0]
  ------------------
 7515|      0|                                   value == NULL ? PyDict_EVENT_DELETED :
  ------------------
  |  Branch (7515:36): [True: 0, False: 0]
  ------------------
 7516|      0|                                   PyDict_EVENT_MODIFIED);
 7517|      0|        _PyDict_NotifyEvent(event, dict, name, value);
 7518|      0|    }
 7519|       |
 7520|    901|    FT_ATOMIC_STORE_PTR_RELEASE(values->values[ix], Py_XNewRef(value));
  ------------------
  |  |  164|    901|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 7521|       |
 7522|    901|    if (old_value == NULL) {
  ------------------
  |  Branch (7522:9): [True: 860, False: 41]
  ------------------
 7523|    860|        _PyDictValues_AddToInsertionOrder(values, ix);
 7524|    860|        if (dict) {
  ------------------
  |  Branch (7524:13): [True: 0, False: 860]
  ------------------
 7525|      0|            assert(dict->ma_values == values);
  ------------------
  |  Branch (7525:13): [True: 0, False: 0]
  ------------------
 7526|      0|            STORE_USED(dict, dict->ma_used + 1);
  ------------------
  |  |  336|      0|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|      0|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 7527|      0|        }
 7528|    860|    }
 7529|     41|    else {
 7530|     41|        if (value == NULL) {
  ------------------
  |  Branch (7530:13): [True: 0, False: 41]
  ------------------
 7531|      0|            delete_index_from_values(values, ix);
 7532|      0|            if (dict) {
  ------------------
  |  Branch (7532:17): [True: 0, False: 0]
  ------------------
 7533|      0|                assert(dict->ma_values == values);
  ------------------
  |  Branch (7533:17): [True: 0, False: 0]
  ------------------
 7534|      0|                STORE_USED(dict, dict->ma_used - 1);
  ------------------
  |  |  336|      0|#define STORE_USED(mp, used) FT_ATOMIC_STORE_SSIZE_RELAXED(mp->ma_used, used)
  |  |  ------------------
  |  |  |  |  194|      0|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  ------------------
 7535|      0|            }
 7536|      0|        }
 7537|     41|        Py_DECREF(old_value);
  ------------------
  |  |  430|     41|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7538|     41|    }
 7539|    901|    return 0;
 7540|    901|}
dictobject.c:clear_inline_values:
 7781|  50.8k|{
 7782|  50.8k|    if (values->valid) {
  ------------------
  |  Branch (7782:9): [True: 50.8k, False: 0]
  ------------------
 7783|  50.8k|        FT_ATOMIC_STORE_UINT8(values->valid, 0);
  ------------------
  |  |  155|  50.8k|#define FT_ATOMIC_STORE_UINT8(value, new_value) value = new_value
  ------------------
 7784|   550k|        for (Py_ssize_t i = 0; i < values->capacity; i++) {
  ------------------
  |  Branch (7784:32): [True: 499k, False: 50.8k]
  ------------------
 7785|       |            Py_CLEAR(values->values[i]);
  ------------------
  |  |  484|   499k|    do { \
  |  |  485|   499k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   499k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   499k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   499k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   499k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   499k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 442k, False: 57.0k]
  |  |  ------------------
  |  |  488|   442k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|   442k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|   442k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|   442k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   442k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   442k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|   442k|        } \
  |  |  491|   499k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 499k]
  |  |  ------------------
  ------------------
 7786|   499k|        }
 7787|  50.8k|    }
 7788|  50.8k|}
dictobject.c:set_keys:
  282|   484k|{
  283|   484k|    mp->ma_keys = keys;
  284|   484k|}
dictobject.c:dictkeys_decref:
  495|   880k|{
  496|   880k|    if (FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_refcnt) < 0) {
  ------------------
  |  |  149|   880k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  |  Branch (496:9): [True: 144k, False: 735k]
  ------------------
  497|   144k|        assert(FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_refcnt) == _Py_DICT_IMMORTAL_INITIAL_REFCNT);
  ------------------
  |  Branch (497:9): [True: 144k, False: 0]
  ------------------
  498|   144k|        return;
  499|   144k|    }
  500|   880k|    assert(FT_ATOMIC_LOAD_SSIZE(dk->dk_refcnt) > 0);
  ------------------
  |  Branch (500:5): [True: 735k, False: 0]
  ------------------
  501|       |#ifdef Py_REF_DEBUG
  502|       |    _Py_DecRefTotal(_PyThreadState_GET());
  503|       |#endif
  504|   735k|    if (DECREF_KEYS(dk) == 1) {
  ------------------
  |  |  263|   735k|#define DECREF_KEYS(dk)  dk->dk_refcnt--
  ------------------
  |  Branch (504:9): [True: 735k, False: 7]
  ------------------
  505|   735k|        if (DK_IS_UNICODE(dk)) {
  ------------------
  |  |  294|   735k|#define DK_IS_UNICODE(dk) ((dk)->dk_kind != DICT_KEYS_GENERAL)
  |  |  ------------------
  |  |  |  Branch (294:27): [True: 660k, False: 74.7k]
  |  |  ------------------
  ------------------
  506|   660k|            PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(dk);
  507|   660k|            Py_ssize_t i, n;
  508|  4.07M|            for (i = 0, n = dk->dk_nentries; i < n; i++) {
  ------------------
  |  Branch (508:46): [True: 3.41M, False: 660k]
  ------------------
  509|  3.41M|                Py_XDECREF(entries[i].me_key);
  ------------------
  |  |  524|  3.41M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.41M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.41M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  510|  3.41M|                Py_XDECREF(entries[i].me_value);
  ------------------
  |  |  524|  3.41M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.41M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.41M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  3.41M|            }
  512|   660k|        }
  513|  74.7k|        else {
  514|  74.7k|            PyDictKeyEntry *entries = DK_ENTRIES(dk);
  515|  74.7k|            Py_ssize_t i, n;
  516|   852k|            for (i = 0, n = dk->dk_nentries; i < n; i++) {
  ------------------
  |  Branch (516:46): [True: 778k, False: 74.7k]
  ------------------
  517|   778k|                Py_XDECREF(entries[i].me_key);
  ------------------
  |  |  524|   778k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   778k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   778k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|   778k|                Py_XDECREF(entries[i].me_value);
  ------------------
  |  |  524|   778k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   778k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   778k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|   778k|            }
  520|  74.7k|        }
  521|   735k|        free_keys_object(dk, use_qsbr);
  522|   735k|    }
  523|   735k|}
dictobject.c:new_dict_with_shared_keys:
 1008|    297|{
 1009|    297|    size_t size = shared_keys_usable_size(keys);
 1010|    297|    PyDictValues *values = new_values(size);
 1011|    297|    if (values == NULL) {
  ------------------
  |  Branch (1011:9): [True: 0, False: 297]
  ------------------
 1012|      0|        return PyErr_NoMemory();
 1013|      0|    }
 1014|    297|    dictkeys_incref(keys);
 1015|  9.20k|    for (size_t i = 0; i < size; i++) {
  ------------------
  |  Branch (1015:24): [True: 8.91k, False: 297]
  ------------------
 1016|       |        values->values[i] = NULL;
 1017|  8.91k|    }
 1018|    297|    return new_dict(keys, values, 0, 1);
 1019|    297|}
dictobject.c:ensure_nonmanaged_dict:
 8079|  2.55M|{
 8080|  2.55M|    PyDictKeysObject *cached;
 8081|       |
 8082|  2.55M|    PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*dictptr);
  ------------------
  |  |  150|  2.55M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
 8083|  2.55M|    if (dict == NULL) {
  ------------------
  |  Branch (8083:9): [True: 417k, False: 2.13M]
  ------------------
 8084|       |#ifdef Py_GIL_DISABLED
 8085|       |        Py_BEGIN_CRITICAL_SECTION(obj);
 8086|       |        dict = *dictptr;
 8087|       |        if (dict != NULL) {
 8088|       |            goto done;
 8089|       |        }
 8090|       |#endif
 8091|   417k|        PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|   417k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   417k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   417k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8092|   417k|        if (_PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE) && (cached = CACHED_KEYS(tp))) {
  ------------------
  |  |  503|   417k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
                      if (_PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE) && (cached = CACHED_KEYS(tp))) {
  ------------------
  |  |  911|   414k|#define CACHED_KEYS(tp) (((PyHeapTypeObject*)tp)->ht_cached_keys)
  ------------------
  |  Branch (8092:13): [True: 414k, False: 2.20k]
  |  Branch (8092:60): [True: 297, False: 414k]
  ------------------
 8093|    297|            assert(!_PyType_HasFeature(tp, Py_TPFLAGS_INLINE_VALUES));
  ------------------
  |  Branch (8093:13): [True: 297, False: 0]
  ------------------
 8094|    297|            dict = new_dict_with_shared_keys(cached);
 8095|    297|        }
 8096|   416k|        else {
 8097|   416k|            dict = PyDict_New();
 8098|   416k|        }
 8099|   417k|        FT_ATOMIC_STORE_PTR_RELEASE(*dictptr, dict);
  ------------------
  |  |  164|   417k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 8100|       |#ifdef Py_GIL_DISABLED
 8101|       |done:
 8102|       |        Py_END_CRITICAL_SECTION();
 8103|       |#endif
 8104|   417k|    }
 8105|  2.55M|    return dict;
 8106|  2.55M|}
dictobject.c:get_next_dict_keys_version:
 8155|    232|{
 8156|       |#ifdef Py_GIL_DISABLED
 8157|       |    uint32_t v;
 8158|       |    do {
 8159|       |        v = _Py_atomic_load_uint32_relaxed(
 8160|       |            &interp->dict_state.next_keys_version);
 8161|       |        if (v == 0) {
 8162|       |            return 0;
 8163|       |        }
 8164|       |    } while (!_Py_atomic_compare_exchange_uint32(
 8165|       |        &interp->dict_state.next_keys_version, &v, v + 1));
 8166|       |#else
 8167|    232|    if (interp->dict_state.next_keys_version == 0) {
  ------------------
  |  Branch (8167:9): [True: 0, False: 232]
  ------------------
 8168|      0|        return 0;
 8169|      0|    }
 8170|    232|    uint32_t v = interp->dict_state.next_keys_version++;
 8171|    232|#endif
 8172|    232|    return v;
 8173|    232|}
dictobject.c:ensure_shared_on_keys_version_assignment:
 1470|  2.69k|{
 1471|  2.69k|    ASSERT_DICT_LOCKED((PyObject *) mp);
 1472|       |    #ifdef Py_GIL_DISABLED
 1473|       |    if (!IS_DICT_SHARED(mp)) {
 1474|       |        // This ensures that a concurrent resize operation will delay
 1475|       |        // freeing the old keys or values using QSBR, which is necessary to
 1476|       |        // safely allow concurrent reads without locking.
 1477|       |        SET_DICT_SHARED(mp);
 1478|       |    }
 1479|       |    #endif
 1480|  2.69k|}
dictobject.c:validate_watcher_id:
 8203|  2.54k|{
 8204|  2.54k|    if (watcher_id < 0 || watcher_id >= DICT_MAX_WATCHERS) {
  ------------------
  |  |   11|  2.54k|#define DICT_MAX_WATCHERS 8
  ------------------
  |  Branch (8204:9): [True: 0, False: 2.54k]
  |  Branch (8204:27): [True: 0, False: 2.54k]
  ------------------
 8205|      0|        PyErr_Format(PyExc_ValueError, "Invalid dict watcher ID %d", watcher_id);
 8206|      0|        return -1;
 8207|      0|    }
 8208|  2.54k|    PyDict_WatchCallback cb = FT_ATOMIC_LOAD_PTR_RELAXED(
  ------------------
  |  |  153|  2.54k|#define FT_ATOMIC_LOAD_PTR_RELAXED(value) value
  ------------------
 8209|  2.54k|        interp->dict_state.watchers[watcher_id]);
 8210|  2.54k|    if (cb == NULL) {
  ------------------
  |  Branch (8210:9): [True: 0, False: 2.54k]
  ------------------
 8211|      0|        PyErr_Format(PyExc_ValueError, "No dict watcher set for ID %d", watcher_id);
 8212|      0|        return -1;
 8213|      0|    }
 8214|  2.54k|    return 0;
 8215|  2.54k|}
dictobject.c:frozendict_new_untracked:
 8497|      1|{
 8498|      1|    assert(PyObject_IsSubclass((PyObject*)type, (PyObject*)&PyFrozenDict_Type));
  ------------------
  |  Branch (8498:5): [True: 1, False: 0]
  ------------------
 8499|       |
 8500|      1|    PyObject *d = anydict_new_untracked(type);
 8501|      1|    if (d == NULL) {
  ------------------
  |  Branch (8501:9): [True: 0, False: 1]
  ------------------
 8502|      0|        return NULL;
 8503|      0|    }
 8504|      1|    assert(can_modify_dict(_PyAnyDict_CAST(d)));
  ------------------
  |  Branch (8504:5): [True: 0, False: 1]
  |  Branch (8504:5): [True: 1, False: 0]
  |  Branch (8504:5): [True: 1, False: 0]
  ------------------
 8505|      1|    _PyFrozenDictObject_CAST(d)->ma_hash = -1;
  ------------------
  |  |  455|      1|    (assert(PyFrozenDict_Check(op)), _Py_CAST(PyFrozenDictObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (8505:5): [True: 1, False: 0]
  ------------------
 8506|      0|    return d;
 8507|      1|}
dictobject.c:frozendict_vectorcall:
 5436|      1|{
 5437|      1|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      1|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 5438|      1|    if (!_PyArg_CheckPositional("frozendict", nargs, 0, 1)) {
  ------------------
  |  |   31|      1|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 1, False: 0]
  |  |  |  Branch (31:27): [True: 1, False: 0]
  |  |  ------------------
  |  |   32|      1|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5439|      0|        return NULL;
 5440|      0|    }
 5441|       |
 5442|      1|    if (nargs == 1 && kwnames == NULL
  ------------------
  |  Branch (5442:9): [True: 1, False: 0]
  |  Branch (5442:23): [True: 1, False: 0]
  ------------------
 5443|      1|        && PyFrozenDict_CheckExact(args[0])
  ------------------
  |  |   38|      1|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5444|      0|        && Py_Is((PyTypeObject*)type, &PyFrozenDict_Type))
  ------------------
  |  |  187|      0|#define Py_Is(x, y) ((x) == (y))
  |  |  ------------------
  |  |  |  Branch (187:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5445|      0|    {
 5446|       |        // frozendict(frozendict) returns the same object unmodified
 5447|      0|        return Py_NewRef(args[0]);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5448|      0|    }
 5449|       |
 5450|       |    /* gh-151722: Keep the frozendict untracked until it is fully built,
 5451|       |       so a half-built object is never reachable from another thread (using the gc module). */
 5452|      1|    PyObject *self = frozendict_new_untracked(_PyType_CAST(type));
  ------------------
  |  |  770|      1|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5452:47): [True: 1, False: 0]
  ------------------
 5453|      1|    if (self == NULL) {
  ------------------
  |  Branch (5453:9): [True: 0, False: 1]
  ------------------
 5454|      0|        return NULL;
 5455|      0|    }
 5456|      1|    if (nargs == 1) {
  ------------------
  |  Branch (5456:9): [True: 1, False: 0]
  ------------------
 5457|      1|        if (dict_update_arg(self, args[0]) < 0) {
  ------------------
  |  Branch (5457:13): [True: 0, False: 1]
  ------------------
 5458|      0|            Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5459|      0|            return NULL;
 5460|      0|        }
 5461|      1|        args++;
 5462|      1|    }
 5463|      1|    if (kwnames != NULL) {
  ------------------
  |  Branch (5463:9): [True: 0, False: 1]
  ------------------
 5464|      0|        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(kwnames); i++) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5464:32): [True: 0, False: 0]
  ------------------
 5465|      0|            PyObject *key = PyTuple_GET_ITEM(kwnames, i);  // borrowed
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5465:29): [True: 0, False: 0]
  ------------------
 5466|      0|            if (_PyAnyDict_SetItem(self, key, args[i]) < 0) {
  ------------------
  |  Branch (5466:17): [True: 0, False: 0]
  ------------------
 5467|      0|                Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5468|      0|                return NULL;
 5469|      0|            }
 5470|      0|        }
 5471|      0|    }
 5472|       |
 5473|      1|    _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|      1|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5474|      1|    return self;
 5475|      1|}

enumobject.c:enum_dealloc:
   93|  37.5k|{
   94|  37.5k|    enumobject *en = _enumobject_CAST(op);
  ------------------
  |  |   28|  37.5k|#define _enumobject_CAST(op)    ((enumobject *)(op))
  ------------------
   95|  37.5k|    PyObject_GC_UnTrack(en);
   96|  37.5k|    Py_XDECREF(en->en_sit);
  ------------------
  |  |  524|  37.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|  37.5k|    Py_XDECREF(en->en_result);
  ------------------
  |  |  524|  37.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  37.5k|    Py_XDECREF(en->en_longindex);
  ------------------
  |  |  524|  37.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|  37.5k|    Py_TYPE(en)->tp_free(en);
  ------------------
  |  |  213|  37.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  37.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|  37.5k|}
enumobject.c:enum_traverse:
  104|      2|{
  105|      2|    enumobject *en = _enumobject_CAST(op);
  ------------------
  |  |   28|      2|#define _enumobject_CAST(op)    ((enumobject *)(op))
  ------------------
  106|      2|    Py_VISIT(en->en_sit);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  107|      2|    Py_VISIT(en->en_result);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  108|      2|    Py_VISIT(en->en_longindex);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  109|      2|    return 0;
  110|      2|}
enumobject.c:enum_next:
  170|   658k|{
  171|   658k|    enumobject *en = _enumobject_CAST(op);
  ------------------
  |  |   28|   658k|#define _enumobject_CAST(op)    ((enumobject *)(op))
  ------------------
  172|   658k|    PyObject *next_index;
  173|   658k|    PyObject *next_item;
  174|   658k|    PyObject *result = en->en_result;
  175|   658k|    PyObject *it = en->en_sit;
  176|   658k|    PyObject *old_index;
  177|   658k|    PyObject *old_item;
  178|       |
  179|   658k|    next_item = (*Py_TYPE(it)->tp_iternext)(it);
  ------------------
  |  |  213|   658k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   658k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   658k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|   658k|    if (next_item == NULL)
  ------------------
  |  Branch (180:9): [True: 36.4k, False: 622k]
  ------------------
  181|  36.4k|        return NULL;
  182|       |
  183|   622k|    Py_ssize_t en_index = FT_ATOMIC_LOAD_SSIZE_RELAXED(en->en_index);
  ------------------
  |  |  149|   622k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  184|   622k|    if (en_index == PY_SSIZE_T_MAX)
  ------------------
  |  |  137|   622k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (184:9): [True: 0, False: 622k]
  ------------------
  185|      0|        return enum_next_long(en, next_item);
  186|       |
  187|   622k|    next_index = PyLong_FromSsize_t(en_index);
  188|   622k|    if (next_index == NULL) {
  ------------------
  |  Branch (188:9): [True: 0, False: 622k]
  ------------------
  189|      0|        Py_DECREF(next_item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|      0|        return NULL;
  191|      0|    }
  192|   622k|    FT_ATOMIC_STORE_SSIZE_RELAXED(en->en_index, en_index + 1);
  ------------------
  |  |  194|   622k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  193|       |
  194|   622k|    if (_PyObject_IsUniquelyReferenced(result)) {
  ------------------
  |  Branch (194:9): [True: 622k, False: 0]
  ------------------
  195|   622k|        Py_INCREF(result);
  ------------------
  |  |  310|   622k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  196|   622k|        old_index = PyTuple_GET_ITEM(result, 0);
  ------------------
  |  |   29|   622k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   622k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (196:21): [True: 622k, False: 0]
  ------------------
  197|   622k|        old_item = PyTuple_GET_ITEM(result, 1);
  ------------------
  |  |   29|   622k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   622k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (197:20): [True: 622k, False: 0]
  ------------------
  198|   622k|        PyTuple_SET_ITEM(result, 0, next_index);
  ------------------
  |  |   40|   622k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|   622k|        PyTuple_SET_ITEM(result, 1, next_item);
  ------------------
  |  |   40|   622k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|   622k|        Py_DECREF(old_index);
  ------------------
  |  |  430|   622k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|   622k|        Py_DECREF(old_item);
  ------------------
  |  |  430|   622k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   622k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   622k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  202|       |        // bpo-42536: The GC may have untracked this result tuple. Since we're
  203|       |        // recycling it, make sure it's tracked again:
  204|   622k|        _PyTuple_Recycle(result);
  205|   622k|        return result;
  206|   622k|    }
  207|      0|    return _PyTuple_FromPairSteal(next_index, next_item);
  208|   622k|}
enumobject.c:enum_new_impl:
   51|  37.5k|{
   52|  37.5k|    enumobject *en;
   53|       |
   54|  37.5k|    en = (enumobject *)type->tp_alloc(type, 0);
   55|  37.5k|    if (en == NULL)
  ------------------
  |  Branch (55:9): [True: 0, False: 37.5k]
  ------------------
   56|      0|        return NULL;
   57|  37.5k|    if (start != NULL) {
  ------------------
  |  Branch (57:9): [True: 0, False: 37.5k]
  ------------------
   58|      0|        start = PyNumber_Index(start);
   59|      0|        if (start == NULL) {
  ------------------
  |  Branch (59:13): [True: 0, False: 0]
  ------------------
   60|      0|            Py_DECREF(en);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|      0|            return NULL;
   62|      0|        }
   63|      0|        assert(PyLong_Check(start));
  ------------------
  |  Branch (63:9): [True: 0, False: 0]
  ------------------
   64|      0|        en->en_index = PyLong_AsSsize_t(start);
   65|      0|        if (en->en_index == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (65:13): [True: 0, False: 0]
  |  Branch (65:35): [True: 0, False: 0]
  ------------------
   66|      0|            PyErr_Clear();
   67|      0|            en->en_index = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
   68|      0|            en->en_longindex = start;
   69|      0|        } else {
   70|      0|            en->en_longindex = NULL;
   71|      0|            Py_DECREF(start);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|      0|        }
   73|  37.5k|    } else {
   74|  37.5k|        en->en_index = 0;
   75|  37.5k|        en->en_longindex = NULL;
   76|  37.5k|    }
   77|  37.5k|    en->en_sit = PyObject_GetIter(iterable);
   78|  37.5k|    if (en->en_sit == NULL) {
  ------------------
  |  Branch (78:9): [True: 0, False: 37.5k]
  ------------------
   79|      0|        Py_DECREF(en);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      0|        return NULL;
   81|      0|    }
   82|  37.5k|    en->en_result = _PyTuple_FromPairSteal(Py_None, Py_None);
  ------------------
  |  |  616|  37.5k|#  define Py_None (&_Py_NoneStruct)
  ------------------
                  en->en_result = _PyTuple_FromPairSteal(Py_None, Py_None);
  ------------------
  |  |  616|  37.5k|#  define Py_None (&_Py_NoneStruct)
  ------------------
   83|  37.5k|    if (en->en_result == NULL) {
  ------------------
  |  Branch (83:9): [True: 0, False: 37.5k]
  ------------------
   84|      0|        Py_DECREF(en);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|      0|        return NULL;
   86|      0|    }
   87|  37.5k|    en->one = _PyLong_GetOne();    /* borrowed reference */
   88|  37.5k|    return (PyObject *)en;
   89|  37.5k|}
enumobject.c:reversed_new_impl:
  305|    274|{
  306|    274|    Py_ssize_t n;
  307|    274|    PyObject *reversed_meth;
  308|    274|    reversedobject *ro;
  309|       |
  310|    274|    reversed_meth = _PyObject_LookupSpecial(seq, &_Py_ID(__reversed__));
  ------------------
  |  |  936|    274|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    274|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    274|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|    274|    if (reversed_meth == Py_None) {
  ------------------
  |  |  616|    274|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (311:9): [True: 0, False: 274]
  ------------------
  312|      0|        Py_DECREF(reversed_meth);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|      0|        PyErr_Format(PyExc_TypeError,
  314|      0|                     "'%.200s' object is not reversible",
  315|      0|                     Py_TYPE(seq)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|      0|        return NULL;
  317|      0|    }
  318|    274|    if (reversed_meth != NULL) {
  ------------------
  |  Branch (318:9): [True: 274, False: 0]
  ------------------
  319|    274|        PyObject *res = _PyObject_CallNoArgs(reversed_meth);
  320|    274|        Py_DECREF(reversed_meth);
  ------------------
  |  |  430|    274|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|    274|        return res;
  322|    274|    }
  323|      0|    else if (PyErr_Occurred())
  ------------------
  |  Branch (323:14): [True: 0, False: 0]
  ------------------
  324|      0|        return NULL;
  325|       |
  326|      0|    if (!PySequence_Check(seq)) {
  ------------------
  |  Branch (326:9): [True: 0, False: 0]
  ------------------
  327|      0|        PyErr_Format(PyExc_TypeError,
  328|      0|                     "'%.200s' object is not reversible",
  329|      0|                     Py_TYPE(seq)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|      0|        return NULL;
  331|      0|    }
  332|       |
  333|      0|    n = PySequence_Size(seq);
  334|      0|    if (n == -1)
  ------------------
  |  Branch (334:9): [True: 0, False: 0]
  ------------------
  335|      0|        return NULL;
  336|       |
  337|      0|    ro = (reversedobject *)type->tp_alloc(type, 0);
  338|      0|    if (ro == NULL)
  ------------------
  |  Branch (338:9): [True: 0, False: 0]
  ------------------
  339|      0|        return NULL;
  340|       |
  341|      0|    ro->index = n-1;
  342|      0|    ro->seq = Py_NewRef(seq);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|      0|    return (PyObject *)ro;
  344|      0|}

PyException_GetTraceback:
  500|   167k|{
  501|   167k|    PyObject *traceback;
  502|   167k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|   167k|    {
  ------------------
  503|   167k|    traceback = Py_XNewRef(PyBaseExceptionObject_CAST(self)->traceback);
  ------------------
  |  |  551|   167k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   167k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   167k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  504|   167k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   167k|    }
  ------------------
  505|   167k|    return traceback;
  506|   167k|}
PyException_SetTraceback:
  511|  43.1k|{
  512|  43.1k|    int res;
  513|  43.1k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  43.1k|    {
  ------------------
  514|  43.1k|    res = BaseException___traceback___set_impl(PyBaseExceptionObject_CAST(self), tb);
  515|  43.1k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  43.1k|    }
  ------------------
  516|  43.1k|    return res;
  517|  43.1k|}
PyException_SetCause:
  532|    227|{
  533|    227|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    227|    {
  ------------------
  534|    227|    PyBaseExceptionObject *base_self = PyBaseExceptionObject_CAST(self);
  535|    227|    base_self->suppress_context = 1;
  536|    227|    Py_XSETREF(base_self->cause, cause);
  ------------------
  |  |  376|    227|    do { \
  |  |  377|    227|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    227|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    227|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    227|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    227|        *_tmp_dst_ptr = (src); \
  |  |  380|    227|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    227|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    227|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    227|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    227|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 227]
  |  |  ------------------
  ------------------
  537|    227|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    227|    }
  ------------------
  538|    227|}
PyException_GetContext:
  542|  2.48k|{
  543|  2.48k|    PyObject *context;
  544|  2.48k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  2.48k|    {
  ------------------
  545|  2.48k|    context = Py_XNewRef(PyBaseExceptionObject_CAST(self)->context);
  ------------------
  |  |  551|  2.48k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.48k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.48k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|  2.48k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  2.48k|    }
  ------------------
  547|  2.48k|    return context;
  548|  2.48k|}
PyException_SetContext:
  553|  1.53k|{
  554|  1.53k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  1.53k|    {
  ------------------
  555|  1.53k|    Py_XSETREF(PyBaseExceptionObject_CAST(self)->context, context);
  ------------------
  |  |  376|  1.53k|    do { \
  |  |  377|  1.53k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  1.53k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  1.53k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  1.53k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  1.53k|        *_tmp_dst_ptr = (src); \
  |  |  380|  1.53k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  1.53k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  1.53k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 1.53k]
  |  |  ------------------
  ------------------
  556|  1.53k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.53k|    }
  ------------------
  557|  1.53k|}
PyUnicodeDecodeError_Create:
 3977|  3.36k|{
 3978|  3.36k|    return PyObject_CallFunction(PyExc_UnicodeDecodeError, "sy#nns",
 3979|  3.36k|                                 encoding, object, length, start, end, reason);
 3980|  3.36k|}
_PyExc_InitTypes:
 4539|      2|{
 4540|    140|    for (size_t i=0; i < Py_ARRAY_LENGTH(static_exceptions); i++) {
  ------------------
  |  |  221|    140|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (4540:22): [True: 138, False: 2]
  ------------------
 4541|    138|        PyTypeObject *exc = static_exceptions[i].exc;
 4542|    138|        if (_PyStaticType_InitBuiltin(interp, exc) < 0) {
  ------------------
  |  Branch (4542:13): [True: 0, False: 138]
  ------------------
 4543|      0|            return -1;
 4544|      0|        }
 4545|    138|        if (exc->tp_new == BaseException_new
  ------------------
  |  Branch (4545:13): [True: 102, False: 36]
  ------------------
 4546|    102|            && exc->tp_init == BaseException_init)
  ------------------
  |  Branch (4546:16): [True: 72, False: 30]
  ------------------
 4547|     72|        {
 4548|     72|            exc->tp_vectorcall = BaseException_vectorcall;
 4549|     72|        }
 4550|    138|    }
 4551|      2|    return 0;
 4552|      2|}
_PyExc_InitGlobalObjects:
 4567|      2|{
 4568|      2|    if (preallocate_memerrors() < 0) {
  ------------------
  |  Branch (4568:9): [True: 0, False: 2]
  ------------------
 4569|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 4570|      0|    }
 4571|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4572|      2|}
_PyExc_InitState:
 4576|      2|{
 4577|      2|    struct _Py_exc_state *state = &interp->exc_state;
 4578|       |
 4579|      2|#define ADD_ERRNO(TYPE, CODE) \
 4580|      2|    do { \
 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
 4584|      2|            Py_XDECREF(_code); \
 4585|      2|            return _PyStatus_ERR("errmap insertion problem."); \
 4586|      2|        } \
 4587|      2|        Py_DECREF(_code); \
 4588|      2|    } while (0)
 4589|       |
 4590|       |    /* Add exceptions to errnomap */
 4591|      2|    assert(state->errnomap == NULL);
  ------------------
  |  Branch (4591:5): [True: 2, False: 0]
  ------------------
 4592|      2|    state->errnomap = PyDict_New();
 4593|      2|    if (!state->errnomap) {
  ------------------
  |  Branch (4593:9): [True: 0, False: 2]
  ------------------
 4594|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 4595|      0|    }
 4596|       |
 4597|      2|    ADD_ERRNO(BlockingIOError, EAGAIN);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4597:5): [True: 2, False: 0]
  ------------------
 4598|      2|    ADD_ERRNO(BlockingIOError, EALREADY);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4598:5): [True: 2, False: 0]
  ------------------
 4599|      2|    ADD_ERRNO(BlockingIOError, EINPROGRESS);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4599:5): [True: 2, False: 0]
  ------------------
 4600|      2|    ADD_ERRNO(BlockingIOError, EWOULDBLOCK);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4600:5): [True: 2, False: 0]
  ------------------
 4601|      2|    ADD_ERRNO(BrokenPipeError, EPIPE);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4601:5): [True: 2, False: 0]
  ------------------
 4602|      2|#ifdef ESHUTDOWN
 4603|      2|    ADD_ERRNO(BrokenPipeError, ESHUTDOWN);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4603:5): [True: 2, False: 0]
  ------------------
 4604|      2|#endif
 4605|      2|    ADD_ERRNO(ChildProcessError, ECHILD);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4605:5): [True: 2, False: 0]
  ------------------
 4606|      2|    ADD_ERRNO(ConnectionAbortedError, ECONNABORTED);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4606:5): [True: 2, False: 0]
  ------------------
 4607|      2|    ADD_ERRNO(ConnectionRefusedError, ECONNREFUSED);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4607:5): [True: 2, False: 0]
  ------------------
 4608|      2|    ADD_ERRNO(ConnectionResetError, ECONNRESET);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4608:5): [True: 2, False: 0]
  ------------------
 4609|      2|    ADD_ERRNO(FileExistsError, EEXIST);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4609:5): [True: 2, False: 0]
  ------------------
 4610|      2|    ADD_ERRNO(FileNotFoundError, ENOENT);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4610:5): [True: 2, False: 0]
  ------------------
 4611|      2|    ADD_ERRNO(IsADirectoryError, EISDIR);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4611:5): [True: 2, False: 0]
  ------------------
 4612|      2|    ADD_ERRNO(NotADirectoryError, ENOTDIR);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4612:5): [True: 2, False: 0]
  ------------------
 4613|      2|    ADD_ERRNO(InterruptedError, EINTR);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4613:5): [True: 2, False: 0]
  ------------------
 4614|      2|    ADD_ERRNO(PermissionError, EACCES);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4614:5): [True: 2, False: 0]
  ------------------
 4615|      2|    ADD_ERRNO(PermissionError, EPERM);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4615:5): [True: 2, False: 0]
  ------------------
 4616|       |#ifdef ENOTCAPABLE
 4617|       |    // Extension for WASI capability-based security. Process lacks
 4618|       |    // capability to access a resource.
 4619|       |    ADD_ERRNO(PermissionError, ENOTCAPABLE);
 4620|       |#endif
 4621|      2|    ADD_ERRNO(ProcessLookupError, ESRCH);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4621:5): [True: 2, False: 0]
  ------------------
 4622|      2|    ADD_ERRNO(TimeoutError, ETIMEDOUT);
  ------------------
  |  | 4580|      2|    do { \
  |  | 4581|      2|        PyObject *_code = PyLong_FromLong(CODE); \
  |  | 4582|      2|        assert(_PyObject_RealIsSubclass(PyExc_ ## TYPE, PyExc_OSError)); \
  |  | 4583|      2|        if (!_code || PyDict_SetItem(state->errnomap, _code, PyExc_ ## TYPE)) { \
  |  |  ------------------
  |  |  |  Branch (4583:13): [True: 0, False: 2]
  |  |  |  Branch (4583:23): [True: 0, False: 2]
  |  |  ------------------
  |  | 4584|      0|            Py_XDECREF(_code); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4585|      0|            return _PyStatus_ERR("errmap insertion problem."); \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  | 4586|      0|        } \
  |  | 4587|      2|        Py_DECREF(_code); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4588|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4588:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (4622:5): [True: 2, False: 0]
  ------------------
 4623|       |#ifdef WSAETIMEDOUT
 4624|       |    ADD_ERRNO(TimeoutError, WSAETIMEDOUT);
 4625|       |#endif
 4626|       |
 4627|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4628|       |
 4629|      2|#undef ADD_ERRNO
 4630|      2|}
_PyBuiltins_AddExceptions:
 4636|      2|{
 4637|      2|    PyObject *mod_dict = PyModule_GetDict(bltinmod);
 4638|      2|    if (mod_dict == NULL) {
  ------------------
  |  Branch (4638:9): [True: 0, False: 2]
  ------------------
 4639|      0|        return -1;
 4640|      0|    }
 4641|       |
 4642|    140|    for (size_t i=0; i < Py_ARRAY_LENGTH(static_exceptions); i++) {
  ------------------
  |  |  221|    140|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (4642:22): [True: 138, False: 2]
  ------------------
 4643|    138|        struct static_exception item = static_exceptions[i];
 4644|       |
 4645|    138|        if (PyDict_SetItemString(mod_dict, item.name, (PyObject*)item.exc)) {
  ------------------
  |  Branch (4645:13): [True: 0, False: 138]
  ------------------
 4646|      0|            return -1;
 4647|      0|        }
 4648|    138|    }
 4649|       |
 4650|      2|    PyObject *PyExc_ExceptionGroup = create_exception_group_class();
 4651|      2|    if (!PyExc_ExceptionGroup) {
  ------------------
  |  Branch (4651:9): [True: 0, False: 2]
  ------------------
 4652|      0|        return -1;
 4653|      0|    }
 4654|      2|    if (PyDict_SetItemString(mod_dict, "ExceptionGroup", PyExc_ExceptionGroup)) {
  ------------------
  |  Branch (4654:9): [True: 0, False: 2]
  ------------------
 4655|      0|        return -1;
 4656|      0|    }
 4657|      2|    if (PyDict_SetItemString(mod_dict, "EnvironmentError", PyExc_OSError)) {
  ------------------
  |  Branch (4657:9): [True: 0, False: 2]
  ------------------
 4658|      0|        return -1;
 4659|      0|    }
 4660|      2|    if (PyDict_SetItemString(mod_dict, "IOError", PyExc_OSError)) {
  ------------------
  |  Branch (4660:9): [True: 0, False: 2]
  ------------------
 4661|      0|        return -1;
 4662|      0|    }
 4663|       |#ifdef MS_WINDOWS
 4664|       |    if (PyDict_SetItemString(mod_dict, "WindowsError", PyExc_OSError)) {
 4665|       |        return -1;
 4666|       |    }
 4667|       |#endif
 4668|      2|    return 0;
 4669|      2|}
_PyException_AddNote:
 4690|  1.92k|{
 4691|  1.92k|    if (!PyExceptionInstance_Check(exc)) {
  ------------------
  |  |   65|  1.92k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.92k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4691:9): [True: 0, False: 1.92k]
  ------------------
 4692|      0|        PyErr_Format(PyExc_TypeError,
 4693|      0|                     "exc must be an exception, not '%s'",
 4694|      0|                     Py_TYPE(exc)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4695|      0|        return -1;
 4696|      0|    }
 4697|  1.92k|    PyObject *r = BaseException_add_note(exc, note);
 4698|  1.92k|    int res = r == NULL ? -1 : 0;
  ------------------
  |  Branch (4698:15): [True: 0, False: 1.92k]
  ------------------
 4699|  1.92k|    Py_XDECREF(r);
  ------------------
  |  |  524|  1.92k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4700|  1.92k|    return res;
 4701|  1.92k|}
exceptions.c:PyBaseExceptionObject_CAST:
   45|   585k|{
   46|   585k|    assert(PyExceptionInstance_Check(exc));
  ------------------
  |  Branch (46:5): [True: 585k, False: 0]
  ------------------
   47|   585k|    return (PyBaseExceptionObject *)exc;
   48|   585k|}
exceptions.c:BaseException___traceback___set_impl:
  391|  43.1k|{
  392|  43.1k|    if (PyTraceBack_Check(value)) {
  ------------------
  |  |   14|  43.1k|#define PyTraceBack_Check(v) Py_IS_TYPE((v), &PyTraceBack_Type)
  |  |  ------------------
  |  |  |  |  215|  43.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  43.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  43.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 42.9k, False: 184]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  393|  42.9k|        Py_XSETREF(self->traceback, Py_NewRef(value));
  ------------------
  |  |  376|  42.9k|    do { \
  |  |  377|  42.9k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  42.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  42.9k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  42.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  42.9k|        *_tmp_dst_ptr = (src); \
  |  |  380|  42.9k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  42.9k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  42.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 42.9k]
  |  |  ------------------
  ------------------
  394|  42.9k|    }
  395|    184|    else if (value == Py_None) {
  ------------------
  |  |  616|    184|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (395:14): [True: 184, False: 0]
  ------------------
  396|    184|        Py_CLEAR(self->traceback);
  ------------------
  |  |  484|    184|    do { \
  |  |  485|    184|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    184|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    184|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    184|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    184|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    184|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 184, False: 0]
  |  |  ------------------
  |  |  488|    184|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    184|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    184|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    184|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    184|        } \
  |  |  491|    184|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 184]
  |  |  ------------------
  ------------------
  397|    184|    }
  398|      0|    else {
  399|      0|        PyErr_SetString(PyExc_TypeError,
  400|      0|                        "__traceback__ must be a traceback or None");
  401|      0|        return -1;
  402|      0|    }
  403|  43.1k|    return 0;
  404|  43.1k|}
exceptions.c:BaseException_dealloc:
  141|   101k|{
  142|   101k|    PyBaseExceptionObject *self = PyBaseExceptionObject_CAST(op);
  143|   101k|    PyObject_GC_UnTrack(self);
  144|       |    // bpo-44348: The trashcan mechanism prevents stack overflow when deleting
  145|       |    // long chains of exceptions. For example, exceptions can be chained
  146|       |    // through the __context__ attributes or the __traceback__ attribute.
  147|   101k|    (void)BaseException_clear(op);
  148|   101k|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|   101k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   101k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   101k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|   101k|}
exceptions.c:BaseException_str:
  166|  48.7k|{
  167|  48.7k|    PyBaseExceptionObject *self = PyBaseExceptionObject_CAST(op);
  168|       |
  169|  48.7k|    PyObject *res;
  170|  48.7k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  48.7k|    {
  ------------------
  171|  48.7k|    switch (PyTuple_GET_SIZE(self->args)) {
  ------------------
  |  |   27|  48.7k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|      0|    case 0:
  ------------------
  |  Branch (172:5): [True: 0, False: 48.7k]
  ------------------
  173|      0|        res = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  174|      0|        break;
  175|  48.7k|    case 1:
  ------------------
  |  Branch (175:5): [True: 48.7k, False: 0]
  ------------------
  176|  48.7k|        res = PyObject_Str(PyTuple_GET_ITEM(self->args, 0));
  ------------------
  |  |   29|  48.7k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  48.7k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (176:28): [True: 48.7k, False: 0]
  ------------------
  177|      0|        break;
  178|      0|    default:
  ------------------
  |  Branch (178:5): [True: 0, False: 48.7k]
  ------------------
  179|      0|        res = PyObject_Str(self->args);
  180|      0|        break;
  181|  48.7k|    }
  182|  48.7k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  48.7k|    }
  ------------------
  183|  48.7k|    return res;
  184|  48.7k|}
exceptions.c:get_exc_state:
   33|  5.71k|{
   34|  5.71k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   35|  5.71k|    return &interp->exc_state;
   36|  5.71k|}
exceptions.c:ImportError_dealloc:
 1836|    198|{
 1837|    198|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|    198|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1838|    198|    (void)ImportError_clear(self);
 1839|    198|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|    198|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1840|    198|}
exceptions.c:PyImportErrorObject_CAST:
 1782|    398|{
 1783|    398|    assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_ImportError));
  ------------------
  |  Branch (1783:5): [True: 398, False: 0]
  ------------------
 1784|    398|    return (PyImportErrorObject *)self;
 1785|    398|}
exceptions.c:ImportError_traverse:
 1844|      2|{
 1845|      2|    PyImportErrorObject *self = PyImportErrorObject_CAST(op);
 1846|      2|    Py_VISIT(self->msg);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1847|      2|    Py_VISIT(self->name);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1848|      2|    Py_VISIT(self->path);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1849|      2|    Py_VISIT(self->name_from);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1850|      2|    return BaseException_traverse(op, visit, arg);
 1851|      2|}
exceptions.c:ImportError_clear:
 1825|    198|{
 1826|    198|    PyImportErrorObject *self = PyImportErrorObject_CAST(op);
 1827|    198|    Py_CLEAR(self->msg);
  ------------------
  |  |  484|    198|    do { \
  |  |  485|    198|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    198|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    198|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    198|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 198, False: 0]
  |  |  ------------------
  |  |  488|    198|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    198|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    198|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    198|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    198|        } \
  |  |  491|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1828|    198|    Py_CLEAR(self->name);
  ------------------
  |  |  484|    198|    do { \
  |  |  485|    198|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    198|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    198|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    198|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 185, False: 13]
  |  |  ------------------
  |  |  488|    185|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    185|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    185|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    185|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    185|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    185|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    185|        } \
  |  |  491|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1829|    198|    Py_CLEAR(self->path);
  ------------------
  |  |  484|    198|    do { \
  |  |  485|    198|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    198|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    198|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    198|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 14, False: 184]
  |  |  ------------------
  |  |  488|     14|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     14|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     14|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     14|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     14|        } \
  |  |  491|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1830|       |    Py_CLEAR(self->name_from);
  ------------------
  |  |  484|    198|    do { \
  |  |  485|    198|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    198|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    198|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    198|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 197]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1831|    198|    return BaseException_clear(op);
 1832|    198|}
exceptions.c:ImportError_init:
 1789|    198|{
 1790|    198|    static char *kwlist[] = {"name", "path", "name_from", 0};
 1791|    198|    PyObject *empty_tuple;
 1792|    198|    PyObject *msg = NULL;
 1793|    198|    PyObject *name = NULL;
 1794|    198|    PyObject *path = NULL;
 1795|    198|    PyObject *name_from = NULL;
 1796|       |
 1797|    198|    if (BaseException_init(op, args, NULL) == -1)
  ------------------
  |  Branch (1797:9): [True: 0, False: 198]
  ------------------
 1798|      0|        return -1;
 1799|       |
 1800|    198|    PyImportErrorObject *self = PyImportErrorObject_CAST(op);
 1801|    198|    empty_tuple = PyTuple_New(0);
 1802|    198|    if (!empty_tuple)
  ------------------
  |  Branch (1802:9): [True: 0, False: 198]
  ------------------
 1803|      0|        return -1;
 1804|    198|    if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OOO:ImportError", kwlist,
  ------------------
  |  Branch (1804:9): [True: 0, False: 198]
  ------------------
 1805|    198|                                     &name, &path, &name_from)) {
 1806|      0|        Py_DECREF(empty_tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1807|      0|        return -1;
 1808|      0|    }
 1809|    198|    Py_DECREF(empty_tuple);
  ------------------
  |  |  430|    198|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1810|       |
 1811|    198|    Py_XSETREF(self->name, Py_XNewRef(name));
  ------------------
  |  |  376|    198|    do { \
  |  |  377|    198|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    198|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    198|        *_tmp_dst_ptr = (src); \
  |  |  380|    198|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    198|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1812|    198|    Py_XSETREF(self->path, Py_XNewRef(path));
  ------------------
  |  |  376|    198|    do { \
  |  |  377|    198|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    198|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    198|        *_tmp_dst_ptr = (src); \
  |  |  380|    198|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    198|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1813|    198|    Py_XSETREF(self->name_from, Py_XNewRef(name_from));
  ------------------
  |  |  376|    198|    do { \
  |  |  377|    198|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    198|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    198|        *_tmp_dst_ptr = (src); \
  |  |  380|    198|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    198|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1814|       |
 1815|    198|    if (PyTuple_GET_SIZE(args) == 1) {
  ------------------
  |  |   27|    198|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1815:9): [True: 198, False: 0]
  ------------------
 1816|    198|        msg = Py_NewRef(PyTuple_GET_ITEM(args, 0));
  ------------------
  |  |  550|    198|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    396|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 198, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1817|    198|    }
 1818|    198|    Py_XSETREF(self->msg, msg);
  ------------------
  |  |  376|    198|    do { \
  |  |  377|    198|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    198|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    198|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    198|        *_tmp_dst_ptr = (src); \
  |  |  380|    198|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    198|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    198|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 198]
  |  |  ------------------
  ------------------
 1819|       |
 1820|    198|    return 0;
 1821|    198|}
exceptions.c:OSError_dealloc:
 2310|  5.54k|{
 2311|  5.54k|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|  5.54k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2312|  5.54k|    (void)OSError_clear(self);
 2313|  5.54k|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|  5.54k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2314|  5.54k|}
exceptions.c:PyOSErrorObject_CAST:
 2024|  11.0k|{
 2025|  11.0k|    assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_OSError));
  ------------------
  |  Branch (2025:5): [True: 11.0k, False: 0]
  ------------------
 2026|  11.0k|    return (PyOSErrorObject *)self;
 2027|  11.0k|}
exceptions.c:OSError_clear:
 2296|  5.54k|{
 2297|  5.54k|    PyOSErrorObject *self = PyOSErrorObject_CAST(op);
 2298|  5.54k|    Py_CLEAR(self->myerrno);
  ------------------
  |  |  484|  5.54k|    do { \
  |  |  485|  5.54k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.54k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.54k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 5.54k, False: 0]
  |  |  ------------------
  |  |  488|  5.54k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  5.54k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  5.54k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  5.54k|        } \
  |  |  491|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2299|  5.54k|    Py_CLEAR(self->strerror);
  ------------------
  |  |  484|  5.54k|    do { \
  |  |  485|  5.54k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.54k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.54k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 5.54k, False: 0]
  |  |  ------------------
  |  |  488|  5.54k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  5.54k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  5.54k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  5.54k|        } \
  |  |  491|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2300|  5.54k|    Py_CLEAR(self->filename);
  ------------------
  |  |  484|  5.54k|    do { \
  |  |  485|  5.54k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.54k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.54k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 5.54k, False: 0]
  |  |  ------------------
  |  |  488|  5.54k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  5.54k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  5.54k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  5.54k|        } \
  |  |  491|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2301|  5.54k|    Py_CLEAR(self->filename2);
  ------------------
  |  |  484|  5.54k|    do { \
  |  |  485|  5.54k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.54k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.54k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.54k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 5.54k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2302|       |#ifdef MS_WINDOWS
 2303|       |    Py_CLEAR(self->winerror);
 2304|       |#endif
 2305|  5.54k|    return BaseException_clear(op);
 2306|  5.54k|}
exceptions.c:OSError_init:
 2257|  5.54k|{
 2258|  5.54k|    PyOSErrorObject *self = PyOSErrorObject_CAST(op);
 2259|  5.54k|    PyObject *myerrno = NULL, *strerror = NULL;
 2260|  5.54k|    PyObject *filename = NULL, *filename2 = NULL;
 2261|       |#ifdef MS_WINDOWS
 2262|       |    PyObject *winerror = NULL;
 2263|       |#endif
 2264|       |
 2265|  5.54k|    if (!oserror_use_init(Py_TYPE(self)))
  ------------------
  |  |  213|  5.54k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2265:9): [True: 5.54k, False: 0]
  ------------------
 2266|       |        /* Everything already done in OSError_new */
 2267|  5.54k|        return 0;
 2268|       |
 2269|      0|    if (!_PyArg_NoKeywords(Py_TYPE(self)->tp_name, kwds))
  ------------------
  |  |   25|      0|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 0, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2270|      0|        return -1;
 2271|       |
 2272|      0|    Py_INCREF(args);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2273|      0|    if (oserror_parse_args(&args, &myerrno, &strerror, &filename, &filename2
  ------------------
  |  Branch (2273:9): [True: 0, False: 0]
  ------------------
 2274|       |#ifdef MS_WINDOWS
 2275|       |                           , &winerror
 2276|       |#endif
 2277|      0|        ))
 2278|      0|        goto error;
 2279|       |
 2280|      0|    if (oserror_init(self, &args, myerrno, strerror, filename, filename2
  ------------------
  |  Branch (2280:9): [True: 0, False: 0]
  ------------------
 2281|       |#ifdef MS_WINDOWS
 2282|       |                     , winerror
 2283|       |#endif
 2284|      0|        ))
 2285|      0|        goto error;
 2286|       |
 2287|      0|    return 0;
 2288|       |
 2289|      0|error:
 2290|      0|    Py_DECREF(args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2291|      0|    return -1;
 2292|      0|}
exceptions.c:oserror_use_init:
 2169|  16.6k|{
 2170|       |    /* When __init__ is defined in an OSError subclass, we want any
 2171|       |       extraneous argument to __new__ to be ignored.  The only reasonable
 2172|       |       solution, given __new__ takes a variable number of arguments,
 2173|       |       is to defer arg parsing and initialization to __init__.
 2174|       |
 2175|       |       But when __new__ is overridden as well, it should call our __new__
 2176|       |       with the right arguments.
 2177|       |
 2178|       |       (see http://bugs.python.org/issue12555#msg148829 )
 2179|       |    */
 2180|  16.6k|    if (type->tp_init != OSError_init && type->tp_new == OSError_new) {
  ------------------
  |  Branch (2180:9): [True: 0, False: 16.6k]
  |  Branch (2180:42): [True: 0, False: 0]
  ------------------
 2181|      0|        assert((PyObject *) type != PyExc_OSError);
  ------------------
  |  Branch (2181:9): [True: 0, False: 0]
  ------------------
 2182|      0|        return 1;
 2183|      0|    }
 2184|  16.6k|    return 0;
 2185|  16.6k|}
exceptions.c:oserror_parse_args:
 2058|  5.54k|{
 2059|  5.54k|    Py_ssize_t nargs;
 2060|  5.54k|    PyObject *args = *p_args;
 2061|  5.54k|#ifndef MS_WINDOWS
 2062|       |    /*
 2063|       |     * ignored on non-Windows platforms,
 2064|       |     * but parsed so OSError has a consistent signature
 2065|       |     */
 2066|  5.54k|    PyObject *_winerror = NULL;
 2067|  5.54k|    PyObject **winerror = &_winerror;
 2068|  5.54k|#endif /* MS_WINDOWS */
 2069|       |
 2070|  5.54k|    nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  5.54k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2071|       |
 2072|  5.54k|    if (nargs >= 2 && nargs <= 5) {
  ------------------
  |  Branch (2072:9): [True: 5.54k, False: 0]
  |  Branch (2072:23): [True: 5.54k, False: 0]
  ------------------
 2073|  5.54k|        if (!PyArg_UnpackTuple(args, "OSError", 2, 5,
  ------------------
  |  Branch (2073:13): [True: 0, False: 5.54k]
  ------------------
 2074|  5.54k|                               myerrno, strerror,
 2075|  5.54k|                               filename, winerror, filename2))
 2076|      0|            return -1;
 2077|       |#ifdef MS_WINDOWS
 2078|       |        if (*winerror && PyLong_Check(*winerror)) {
 2079|       |            long errcode, winerrcode;
 2080|       |            PyObject *newargs;
 2081|       |            Py_ssize_t i;
 2082|       |
 2083|       |            winerrcode = PyLong_AsLong(*winerror);
 2084|       |            if (winerrcode == -1 && PyErr_Occurred())
 2085|       |                return -1;
 2086|       |            errcode = winerror_to_errno(winerrcode);
 2087|       |            *myerrno = PyLong_FromLong(errcode);
 2088|       |            if (!*myerrno)
 2089|       |                return -1;
 2090|       |            newargs = PyTuple_New(nargs);
 2091|       |            if (!newargs)
 2092|       |                return -1;
 2093|       |            PyTuple_SET_ITEM(newargs, 0, *myerrno);
 2094|       |            for (i = 1; i < nargs; i++) {
 2095|       |                PyObject *val = PyTuple_GET_ITEM(args, i);
 2096|       |                PyTuple_SET_ITEM(newargs, i, Py_NewRef(val));
 2097|       |            }
 2098|       |            Py_DECREF(args);
 2099|       |            args = *p_args = newargs;
 2100|       |        }
 2101|       |#endif /* MS_WINDOWS */
 2102|  5.54k|    }
 2103|       |
 2104|  5.54k|    return 0;
 2105|  5.54k|}
exceptions.c:oserror_init:
 2115|  5.54k|{
 2116|  5.54k|    PyObject *args = *p_args;
 2117|  5.54k|    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  5.54k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2118|       |
 2119|       |    /* self->filename will remain Py_None otherwise */
 2120|  5.54k|    if (filename && filename != Py_None) {
  ------------------
  |  |  616|  5.54k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2120:9): [True: 5.54k, False: 0]
  |  Branch (2120:21): [True: 5.54k, False: 0]
  ------------------
 2121|  5.54k|        if (Py_IS_TYPE(self, (PyTypeObject *) PyExc_BlockingIOError) &&
  ------------------
  |  |  215|  11.0k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 5.54k]
  |  |  ------------------
  ------------------
 2122|      0|            PyNumber_Check(filename)) {
  ------------------
  |  Branch (2122:13): [True: 0, False: 0]
  ------------------
 2123|       |            /* BlockingIOError's 3rd argument can be the number of
 2124|       |             * characters written.
 2125|       |             */
 2126|      0|            self->written = PyNumber_AsSsize_t(filename, PyExc_ValueError);
 2127|      0|            if (self->written == -1 && PyErr_Occurred())
  ------------------
  |  Branch (2127:17): [True: 0, False: 0]
  |  Branch (2127:40): [True: 0, False: 0]
  ------------------
 2128|      0|                return -1;
 2129|      0|        }
 2130|  5.54k|        else {
 2131|  5.54k|            Py_XSETREF(self->filename, Py_NewRef(filename));
  ------------------
  |  |  376|  5.54k|    do { \
  |  |  377|  5.54k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.54k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.54k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.54k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.54k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2132|       |
 2133|  5.54k|            if (filename2 && filename2 != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2133:17): [True: 0, False: 5.54k]
  |  Branch (2133:30): [True: 0, False: 0]
  ------------------
 2134|      0|                Py_XSETREF(self->filename2, Py_NewRef(filename2));
  ------------------
  |  |  376|      0|    do { \
  |  |  377|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      0|        *_tmp_dst_ptr = (src); \
  |  |  380|      0|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2135|      0|            }
 2136|       |
 2137|  5.54k|            if (nargs >= 2 && nargs <= 5) {
  ------------------
  |  Branch (2137:17): [True: 5.54k, False: 0]
  |  Branch (2137:31): [True: 5.54k, False: 0]
  ------------------
 2138|       |                /* filename, filename2, and winerror are removed from the args tuple
 2139|       |                   (for compatibility purposes, see test_exceptions.py) */
 2140|  5.54k|                PyObject *subslice = PyTuple_GetSlice(args, 0, 2);
 2141|  5.54k|                if (!subslice)
  ------------------
  |  Branch (2141:21): [True: 0, False: 5.54k]
  ------------------
 2142|      0|                    return -1;
 2143|       |
 2144|  5.54k|                Py_DECREF(args);  /* replacing args */
  ------------------
  |  |  430|  5.54k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2145|  5.54k|                *p_args = args = subslice;
 2146|  5.54k|            }
 2147|  5.54k|        }
 2148|  5.54k|    }
 2149|  5.54k|    Py_XSETREF(self->myerrno, Py_XNewRef(myerrno));
  ------------------
  |  |  376|  5.54k|    do { \
  |  |  377|  5.54k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.54k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.54k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.54k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.54k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2150|  5.54k|    Py_XSETREF(self->strerror, Py_XNewRef(strerror));
  ------------------
  |  |  376|  5.54k|    do { \
  |  |  377|  5.54k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.54k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.54k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.54k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.54k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2151|       |#ifdef MS_WINDOWS
 2152|       |    Py_XSETREF(self->winerror, Py_XNewRef(winerror));
 2153|       |#endif
 2154|       |
 2155|       |    /* Steals the reference to args */
 2156|  5.54k|    Py_XSETREF(self->args, args);
  ------------------
  |  |  376|  5.54k|    do { \
  |  |  377|  5.54k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.54k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.54k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.54k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.54k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.54k]
  |  |  ------------------
  ------------------
 2157|  5.54k|    *p_args = args = NULL;
 2158|       |
 2159|  5.54k|    return 0;
 2160|  5.54k|}
exceptions.c:OSError_new:
 2189|  5.54k|{
 2190|  5.54k|    PyOSErrorObject *self = NULL;
 2191|  5.54k|    PyObject *myerrno = NULL, *strerror = NULL;
 2192|  5.54k|    PyObject *filename = NULL, *filename2 = NULL;
 2193|       |#ifdef MS_WINDOWS
 2194|       |    PyObject *winerror = NULL;
 2195|       |#endif
 2196|       |
 2197|  5.54k|    Py_INCREF(args);
  ------------------
  |  |  310|  5.54k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2198|       |
 2199|  5.54k|    if (!oserror_use_init(type)) {
  ------------------
  |  Branch (2199:9): [True: 5.54k, False: 0]
  ------------------
 2200|  5.54k|        if (!_PyArg_NoKeywords(type->tp_name, kwds))
  ------------------
  |  |   25|  5.54k|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 5.54k, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2201|      0|            goto error;
 2202|       |
 2203|  5.54k|        if (oserror_parse_args(&args, &myerrno, &strerror,
  ------------------
  |  Branch (2203:13): [True: 0, False: 5.54k]
  ------------------
 2204|  5.54k|                               &filename, &filename2
 2205|       |#ifdef MS_WINDOWS
 2206|       |                               , &winerror
 2207|       |#endif
 2208|  5.54k|            ))
 2209|      0|            goto error;
 2210|       |
 2211|  5.54k|        struct _Py_exc_state *state = get_exc_state();
 2212|  5.54k|        if (myerrno && PyLong_Check(myerrno) &&
  ------------------
  |  |   13|  5.54k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  11.0k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 5.54k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2212:13): [True: 5.54k, False: 0]
  ------------------
 2213|  5.54k|            state->errnomap && (PyObject *) type == PyExc_OSError) {
  ------------------
  |  Branch (2213:13): [True: 5.54k, False: 0]
  |  Branch (2213:32): [True: 5.54k, False: 0]
  ------------------
 2214|  5.54k|            PyObject *newtype;
 2215|  5.54k|            newtype = PyDict_GetItemWithError(state->errnomap, myerrno);
 2216|  5.54k|            if (newtype) {
  ------------------
  |  Branch (2216:17): [True: 5.54k, False: 0]
  ------------------
 2217|  5.54k|                type = _PyType_CAST(newtype);
  ------------------
  |  |  770|  5.54k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2217:24): [True: 5.54k, False: 0]
  ------------------
 2218|  5.54k|            }
 2219|      0|            else if (PyErr_Occurred())
  ------------------
  |  Branch (2219:22): [True: 0, False: 0]
  ------------------
 2220|      0|                goto error;
 2221|  5.54k|        }
 2222|  5.54k|    }
 2223|       |
 2224|  5.54k|    self = (PyOSErrorObject *) type->tp_alloc(type, 0);
 2225|  5.54k|    if (!self)
  ------------------
  |  Branch (2225:9): [True: 0, False: 5.54k]
  ------------------
 2226|      0|        goto error;
 2227|       |
 2228|  5.54k|    self->dict = NULL;
 2229|  5.54k|    self->traceback = self->cause = self->context = NULL;
 2230|  5.54k|    self->written = -1;
 2231|       |
 2232|  5.54k|    if (!oserror_use_init(type)) {
  ------------------
  |  Branch (2232:9): [True: 5.54k, False: 0]
  ------------------
 2233|  5.54k|        if (oserror_init(self, &args, myerrno, strerror, filename, filename2
  ------------------
  |  Branch (2233:13): [True: 0, False: 5.54k]
  ------------------
 2234|       |#ifdef MS_WINDOWS
 2235|       |                         , winerror
 2236|       |#endif
 2237|  5.54k|            ))
 2238|      0|            goto error;
 2239|  5.54k|    }
 2240|      0|    else {
 2241|      0|        self->args = PyTuple_New(0);
 2242|      0|        if (self->args == NULL)
  ------------------
  |  Branch (2242:13): [True: 0, False: 0]
  ------------------
 2243|      0|            goto error;
 2244|      0|    }
 2245|       |
 2246|  5.54k|    Py_XDECREF(args);
  ------------------
  |  |  524|  5.54k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2247|  5.54k|    return (PyObject *) self;
 2248|       |
 2249|      0|error:
 2250|      0|    Py_XDECREF(args);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2251|      0|    Py_XDECREF(self);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|       |    return NULL;
 2253|  5.54k|}
exceptions.c:NameError_dealloc:
 2601|      1|{
 2602|      1|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|      1|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2603|      1|    (void)NameError_clear(self);
 2604|      1|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2605|      1|}
exceptions.c:PyNameErrorObject_CAST:
 2559|      2|{
 2560|      2|    assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_NameError));
  ------------------
  |  Branch (2560:5): [True: 2, False: 0]
  ------------------
 2561|      2|    return (PyNameErrorObject *)self;
 2562|      2|}
exceptions.c:NameError_clear:
 2593|      1|{
 2594|      1|    PyNameErrorObject *self = PyNameErrorObject_CAST(op);
 2595|       |    Py_CLEAR(self->name);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 0]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2596|      1|    return BaseException_clear(op);
 2597|      1|}
exceptions.c:NameError_init:
 2566|      1|{
 2567|      1|    static char *kwlist[] = {"name", NULL};
 2568|      1|    PyObject *name = NULL;
 2569|       |
 2570|      1|    if (BaseException_init(op, args, NULL) == -1) {
  ------------------
  |  Branch (2570:9): [True: 0, False: 1]
  ------------------
 2571|      0|        return -1;
 2572|      0|    }
 2573|       |
 2574|      1|    PyObject *empty_tuple = PyTuple_New(0);
 2575|      1|    if (!empty_tuple) {
  ------------------
  |  Branch (2575:9): [True: 0, False: 1]
  ------------------
 2576|      0|        return -1;
 2577|      0|    }
 2578|      1|    if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$O:NameError", kwlist,
  ------------------
  |  Branch (2578:9): [True: 0, False: 1]
  ------------------
 2579|      1|                                     &name)) {
 2580|      0|        Py_DECREF(empty_tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2581|      0|        return -1;
 2582|      0|    }
 2583|      1|    Py_DECREF(empty_tuple);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2584|       |
 2585|      1|    PyNameErrorObject *self = PyNameErrorObject_CAST(op);
 2586|      1|    Py_XSETREF(self->name, Py_XNewRef(name));
  ------------------
  |  |  376|      1|    do { \
  |  |  377|      1|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      1|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      1|        *_tmp_dst_ptr = (src); \
  |  |  380|      1|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2587|       |
 2588|      1|    return 0;
 2589|      1|}
exceptions.c:AttributeError_dealloc:
 2687|    579|{
 2688|    579|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|    579|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    579|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2689|    579|    (void)AttributeError_clear(self);
 2690|    579|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|    579|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    579|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2691|    579|}
exceptions.c:PyAttributeErrorObject_CAST:
 2642|  1.15k|{
 2643|  1.15k|    assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_AttributeError));
  ------------------
  |  Branch (2643:5): [True: 1.15k, False: 0]
  ------------------
 2644|  1.15k|    return (PyAttributeErrorObject *)self;
 2645|  1.15k|}
exceptions.c:AttributeError_clear:
 2678|    579|{
 2679|    579|    PyAttributeErrorObject *self = PyAttributeErrorObject_CAST(op);
 2680|    579|    Py_CLEAR(self->obj);
  ------------------
  |  |  484|    579|    do { \
  |  |  485|    579|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    579|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    579|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    579|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 547, False: 32]
  |  |  ------------------
  |  |  488|    547|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    547|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    547|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    547|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    547|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    547|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    547|        } \
  |  |  491|    579|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 579]
  |  |  ------------------
  ------------------
 2681|       |    Py_CLEAR(self->name);
  ------------------
  |  |  484|    579|    do { \
  |  |  485|    579|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    579|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    579|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    579|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 547, False: 32]
  |  |  ------------------
  |  |  488|    547|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    547|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    547|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    547|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    547|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    547|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    547|        } \
  |  |  491|    579|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 579]
  |  |  ------------------
  ------------------
 2682|    579|    return BaseException_clear(op);
 2683|    579|}
exceptions.c:AttributeError_init:
 2649|    579|{
 2650|    579|    static char *kwlist[] = {"name", "obj", NULL};
 2651|    579|    PyObject *name = NULL;
 2652|    579|    PyObject *obj = NULL;
 2653|       |
 2654|    579|    if (BaseException_init(op, args, NULL) == -1) {
  ------------------
  |  Branch (2654:9): [True: 0, False: 579]
  ------------------
 2655|      0|        return -1;
 2656|      0|    }
 2657|       |
 2658|    579|    PyObject *empty_tuple = PyTuple_New(0);
 2659|    579|    if (!empty_tuple) {
  ------------------
  |  Branch (2659:9): [True: 0, False: 579]
  ------------------
 2660|      0|        return -1;
 2661|      0|    }
 2662|    579|    if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:AttributeError", kwlist,
  ------------------
  |  Branch (2662:9): [True: 0, False: 579]
  ------------------
 2663|    579|                                     &name, &obj)) {
 2664|      0|        Py_DECREF(empty_tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2665|      0|        return -1;
 2666|      0|    }
 2667|    579|    Py_DECREF(empty_tuple);
  ------------------
  |  |  430|    579|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    579|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2668|       |
 2669|    579|    PyAttributeErrorObject *self = PyAttributeErrorObject_CAST(op);
 2670|    579|    Py_XSETREF(self->name, Py_XNewRef(name));
  ------------------
  |  |  376|    579|    do { \
  |  |  377|    579|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    579|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    579|        *_tmp_dst_ptr = (src); \
  |  |  380|    579|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    579|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    579|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    579|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 579]
  |  |  ------------------
  ------------------
 2671|    579|    Py_XSETREF(self->obj, Py_XNewRef(obj));
  ------------------
  |  |  376|    579|    do { \
  |  |  377|    579|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    579|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    579|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    579|        *_tmp_dst_ptr = (src); \
  |  |  380|    579|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    579|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    579|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    579|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    579|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 579]
  |  |  ------------------
  ------------------
 2672|       |
 2673|    579|    return 0;
 2674|    579|}
exceptions.c:PySyntaxErrorObject_CAST:
 2828|  28.8k|{
 2829|  28.8k|    assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_SyntaxError));
  ------------------
  |  Branch (2829:5): [True: 28.8k, False: 0]
  ------------------
 2830|  28.8k|    return (PySyntaxErrorObject *)self;
 2831|  28.8k|}
exceptions.c:SyntaxError_dealloc:
 2900|  14.4k|{
 2901|  14.4k|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|  14.4k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2902|  14.4k|    (void)SyntaxError_clear(self);
 2903|  14.4k|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|  14.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2904|  14.4k|}
exceptions.c:SyntaxError_clear:
 2884|  14.4k|{
 2885|  14.4k|    PySyntaxErrorObject *self = PySyntaxErrorObject_CAST(op);
 2886|  14.4k|    Py_CLEAR(self->msg);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 14.4k, False: 0]
  |  |  ------------------
  |  |  488|  14.4k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  14.4k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  14.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  14.4k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2887|  14.4k|    Py_CLEAR(self->filename);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 14.4k, False: 0]
  |  |  ------------------
  |  |  488|  14.4k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  14.4k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  14.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  14.4k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2888|  14.4k|    Py_CLEAR(self->lineno);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 14.4k, False: 0]
  |  |  ------------------
  |  |  488|  14.4k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  14.4k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  14.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  14.4k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2889|  14.4k|    Py_CLEAR(self->offset);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 14.4k, False: 0]
  |  |  ------------------
  |  |  488|  14.4k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  14.4k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  14.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  14.4k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2890|  14.4k|    Py_CLEAR(self->end_lineno);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 12.8k, False: 1.62k]
  |  |  ------------------
  |  |  488|  12.8k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  12.8k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  12.8k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  12.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  12.8k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2891|  14.4k|    Py_CLEAR(self->end_offset);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 12.8k, False: 1.62k]
  |  |  ------------------
  |  |  488|  12.8k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  12.8k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  12.8k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  12.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  12.8k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2892|  14.4k|    Py_CLEAR(self->text);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 14.1k, False: 269]
  |  |  ------------------
  |  |  488|  14.1k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  14.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  14.1k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  14.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  14.1k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2893|  14.4k|    Py_CLEAR(self->print_file_and_line);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 14.4k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2894|       |    Py_CLEAR(self->metadata);
  ------------------
  |  |  484|  14.4k|    do { \
  |  |  485|  14.4k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  14.4k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  14.4k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  14.4k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 8.74k, False: 5.69k]
  |  |  ------------------
  |  |  488|  8.74k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  8.74k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  8.74k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  8.74k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  8.74k|        } \
  |  |  491|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2895|  14.4k|    return BaseException_clear(op);
 2896|  14.4k|}
exceptions.c:SyntaxError_init:
 2835|  14.4k|{
 2836|  14.4k|    PyObject *info = NULL;
 2837|  14.4k|    Py_ssize_t lenargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  14.4k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2838|       |
 2839|  14.4k|    if (BaseException_init(op, args, kwds) == -1)
  ------------------
  |  Branch (2839:9): [True: 0, False: 14.4k]
  ------------------
 2840|      0|        return -1;
 2841|       |
 2842|  14.4k|    PySyntaxErrorObject *self = PySyntaxErrorObject_CAST(op);
 2843|  14.4k|    if (lenargs >= 1) {
  ------------------
  |  Branch (2843:9): [True: 14.4k, False: 0]
  ------------------
 2844|  14.4k|        Py_XSETREF(self->msg, Py_NewRef(PyTuple_GET_ITEM(args, 0)));
  ------------------
  |  |  376|  14.4k|    do { \
  |  |  377|  14.4k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.4k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  28.8k|        *_tmp_dst_ptr = (src); \
  |  |  ------------------
  |  |  |  Branch (379:26): [True: 14.4k, False: 0]
  |  |  ------------------
  |  |  380|  14.4k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
 2845|  14.4k|    }
 2846|  14.4k|    if (lenargs == 2) {
  ------------------
  |  Branch (2846:9): [True: 14.1k, False: 269]
  ------------------
 2847|  14.1k|        info = PyTuple_GET_ITEM(args, 1);
  ------------------
  |  |   29|  14.1k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  14.1k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2847:16): [True: 14.1k, False: 0]
  ------------------
 2848|      0|        info = PySequence_Tuple(info);
 2849|  14.1k|        if (!info) {
  ------------------
  |  Branch (2849:13): [True: 0, False: 14.1k]
  ------------------
 2850|      0|            return -1;
 2851|      0|        }
 2852|       |
 2853|  14.1k|        PyObject *filename, *lineno, *offset, *text;
 2854|  14.1k|        PyObject *end_lineno = NULL;
 2855|  14.1k|        PyObject *end_offset = NULL;
 2856|  14.1k|        PyObject *metadata = NULL;
 2857|  14.1k|        if (!PyArg_ParseTuple(info, "OOOO|OOO",
  ------------------
  |  Branch (2857:13): [True: 0, False: 14.1k]
  ------------------
 2858|  14.1k|                              &filename, &lineno,
 2859|  14.1k|                              &offset, &text,
 2860|  14.1k|                              &end_lineno, &end_offset, &metadata)) {
 2861|      0|            Py_DECREF(info);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2862|      0|            return -1;
 2863|      0|        }
 2864|       |
 2865|  14.1k|        Py_XSETREF(self->filename, Py_NewRef(filename));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2866|  14.1k|        Py_XSETREF(self->lineno, Py_NewRef(lineno));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2867|  14.1k|        Py_XSETREF(self->offset, Py_NewRef(offset));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2868|  14.1k|        Py_XSETREF(self->text, Py_NewRef(text));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2869|  14.1k|        Py_XSETREF(self->end_lineno, Py_XNewRef(end_lineno));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2870|  14.1k|        Py_XSETREF(self->end_offset, Py_XNewRef(end_offset));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2871|  14.1k|        Py_XSETREF(self->metadata, Py_XNewRef(metadata));
  ------------------
  |  |  376|  14.1k|    do { \
  |  |  377|  14.1k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  14.1k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  14.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  14.1k|        *_tmp_dst_ptr = (src); \
  |  |  380|  14.1k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  14.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  14.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2872|  14.1k|        Py_DECREF(info);
  ------------------
  |  |  430|  14.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2873|       |
 2874|  14.1k|        if (self->end_lineno != NULL && self->end_offset == NULL) {
  ------------------
  |  Branch (2874:13): [True: 12.5k, False: 1.62k]
  |  Branch (2874:41): [True: 0, False: 12.5k]
  ------------------
 2875|      0|            PyErr_SetString(PyExc_TypeError, "end_offset must be provided when end_lineno is provided");
 2876|      0|            return -1;
 2877|      0|        }
 2878|  14.1k|    }
 2879|  14.4k|    return 0;
 2880|  14.4k|}
exceptions.c:check_unicode_error_attribute:
 3109|  2.24k|{
 3110|  2.24k|    assert(as_bytes == 0 || as_bytes == 1);
  ------------------
  |  Branch (3110:5): [True: 34, False: 2.21k]
  |  Branch (3110:5): [True: 2.21k, False: 0]
  ------------------
 3111|  2.24k|    if (attr == NULL) {
  ------------------
  |  Branch (3111:9): [True: 0, False: 2.24k]
  ------------------
 3112|      0|        PyErr_Format(PyExc_TypeError,
 3113|      0|                     "UnicodeError '%s' attribute is not set",
 3114|      0|                     name);
 3115|      0|        return -1;
 3116|      0|    }
 3117|  2.24k|    if (!(as_bytes ? PyBytes_Check(attr) : PyUnicode_Check(attr))) {
  ------------------
  |  |   28|  2.21k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.21k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!(as_bytes ? PyBytes_Check(attr) : PyUnicode_Check(attr))) {
  ------------------
  |  |  103|     34|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     34|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3117:9): [True: 0, False: 2.24k]
  |  Branch (3117:11): [True: 2.21k, False: 34]
  ------------------
 3118|      0|        PyErr_Format(PyExc_TypeError,
 3119|      0|                     "UnicodeError '%s' attribute must be a %s",
 3120|      0|                     name, as_bytes ? "bytes" : "string");
  ------------------
  |  Branch (3120:28): [True: 0, False: 0]
  ------------------
 3121|      0|        return -1;
 3122|      0|    }
 3123|  2.24k|    return 0;
 3124|  2.24k|}
exceptions.c:UnicodeError_dealloc:
 3722|  41.2k|{
 3723|  41.2k|    PyTypeObject *type = Py_TYPE(self);
  ------------------
  |  |  213|  41.2k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  41.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3724|  41.2k|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|  41.2k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3725|  41.2k|    (void)UnicodeError_clear(self);
 3726|  41.2k|    type->tp_free(self);
 3727|  41.2k|}
exceptions.c:UnicodeEncodeError_str:
 3785|     34|{
 3786|     34|    PyUnicodeErrorObject *exc = PyUnicodeErrorObject_CAST(self);
  ------------------
  |  | 3342|     34|    (assert(PyUnicodeError_Check(op)), ((PyUnicodeErrorObject *)(op)))
  ------------------
  |  Branch (3786:33): [True: 34, False: 0]
  ------------------
 3787|     34|    PyObject *result = NULL;
 3788|     34|    PyObject *reason_str = NULL;
 3789|     34|    PyObject *encoding_str = NULL;
 3790|       |
 3791|     34|    if (exc->object == NULL) {
  ------------------
  |  Branch (3791:9): [True: 0, False: 34]
  ------------------
 3792|       |        /* Not properly initialized. */
 3793|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
 3794|      0|    }
 3795|       |
 3796|       |    /* Get reason and encoding as strings, which they might not be if
 3797|       |       they've been modified after we were constructed. */
 3798|     34|    reason_str = PyObject_Str(exc->reason);
 3799|     34|    if (reason_str == NULL) {
  ------------------
  |  Branch (3799:9): [True: 0, False: 34]
  ------------------
 3800|      0|        goto done;
 3801|      0|    }
 3802|     34|    encoding_str = PyObject_Str(exc->encoding);
 3803|     34|    if (encoding_str == NULL) {
  ------------------
  |  Branch (3803:9): [True: 0, False: 34]
  ------------------
 3804|      0|        goto done;
 3805|      0|    }
 3806|       |    // calls to PyObject_Str(...) above might mutate 'exc->object'
 3807|     34|    if (check_unicode_error_attribute(exc->object, "object", false) < 0) {
  ------------------
  |  Branch (3807:9): [True: 0, False: 34]
  ------------------
 3808|      0|        goto done;
 3809|      0|    }
 3810|     34|    Py_ssize_t len = PyUnicode_GET_LENGTH(exc->object);
  ------------------
  |  |  299|     34|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3811|     34|    Py_ssize_t start = exc->start, end = exc->end;
 3812|       |
 3813|     34|    if ((start >= 0 && start < len) && (end >= 0 && end <= len) && end == start + 1) {
  ------------------
  |  Branch (3813:10): [True: 34, False: 0]
  |  Branch (3813:24): [True: 34, False: 0]
  |  Branch (3813:41): [True: 34, False: 0]
  |  Branch (3813:53): [True: 34, False: 0]
  |  Branch (3813:68): [True: 29, False: 5]
  ------------------
 3814|     29|        Py_UCS4 badchar = PyUnicode_ReadChar(exc->object, start);
 3815|     29|        const char *fmt;
 3816|     29|        if (badchar <= 0xff) {
  ------------------
  |  Branch (3816:13): [True: 0, False: 29]
  ------------------
 3817|      0|            fmt = "'%U' codec can't encode character '\\x%02x' in position %zd: %U";
 3818|      0|        }
 3819|     29|        else if (badchar <= 0xffff) {
  ------------------
  |  Branch (3819:18): [True: 29, False: 0]
  ------------------
 3820|     29|            fmt = "'%U' codec can't encode character '\\u%04x' in position %zd: %U";
 3821|     29|        }
 3822|      0|        else {
 3823|      0|            fmt = "'%U' codec can't encode character '\\U%08x' in position %zd: %U";
 3824|      0|        }
 3825|     29|        result = PyUnicode_FromFormat(
 3826|     29|            fmt,
 3827|     29|            encoding_str,
 3828|     29|            (int)badchar,
 3829|     29|            start,
 3830|     29|            reason_str);
 3831|     29|    }
 3832|      5|    else {
 3833|      5|        result = PyUnicode_FromFormat(
 3834|      5|            "'%U' codec can't encode characters in position %zd-%zd: %U",
 3835|      5|            encoding_str,
 3836|      5|            start,
 3837|      5|            end - 1,
 3838|      5|            reason_str);
 3839|      5|    }
 3840|     34|done:
 3841|     34|    Py_XDECREF(reason_str);
  ------------------
  |  |  524|     34|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3842|     34|    Py_XDECREF(encoding_str);
  ------------------
  |  |  524|     34|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3843|     34|    return result;
 3844|     34|}
exceptions.c:UnicodeError_traverse:
 3731|      6|{
 3732|      6|    PyUnicodeErrorObject *exc = PyUnicodeErrorObject_CAST(self);
  ------------------
  |  | 3342|      6|    (assert(PyUnicodeError_Check(op)), ((PyUnicodeErrorObject *)(op)))
  ------------------
  |  Branch (3732:33): [True: 6, False: 0]
  ------------------
 3733|      6|    Py_VISIT(exc->encoding);
  ------------------
  |  |  194|      6|    do {                                                                \
  |  |  195|      6|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  196|      6|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      6|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 6]
  |  |  ------------------
  |  |  198|      6|                return vret;                                            \
  |  |  199|      6|        }                                                               \
  |  |  200|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3734|      6|    Py_VISIT(exc->object);
  ------------------
  |  |  194|      6|    do {                                                                \
  |  |  195|      6|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  196|      6|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      6|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 6]
  |  |  ------------------
  |  |  198|      6|                return vret;                                            \
  |  |  199|      6|        }                                                               \
  |  |  200|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3735|      6|    Py_VISIT(exc->reason);
  ------------------
  |  |  194|      6|    do {                                                                \
  |  |  195|      6|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  196|      6|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      6|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 6]
  |  |  ------------------
  |  |  198|      6|                return vret;                                            \
  |  |  199|      6|        }                                                               \
  |  |  200|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3736|      6|    return BaseException_traverse(self, visit, arg);
 3737|      6|}
exceptions.c:UnicodeError_clear:
 3712|  41.2k|{
 3713|  41.2k|    PyUnicodeErrorObject *exc = PyUnicodeErrorObject_CAST(self);
  ------------------
  |  | 3342|  41.2k|    (assert(PyUnicodeError_Check(op)), ((PyUnicodeErrorObject *)(op)))
  ------------------
  |  Branch (3713:33): [True: 41.2k, False: 0]
  ------------------
 3714|  41.2k|    Py_CLEAR(exc->encoding);
  ------------------
  |  |  484|  41.2k|    do { \
  |  |  485|  41.2k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  41.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  41.2k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  41.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  41.2k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  41.2k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 41.1k, False: 44]
  |  |  ------------------
  |  |  488|  41.1k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  41.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  41.1k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  41.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  41.1k|        } \
  |  |  491|  41.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 41.2k]
  |  |  ------------------
  ------------------
 3715|  41.2k|    Py_CLEAR(exc->object);
  ------------------
  |  |  484|  41.2k|    do { \
  |  |  485|  41.2k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  41.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  41.2k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  41.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  41.2k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  41.2k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 41.1k, False: 44]
  |  |  ------------------
  |  |  488|  41.1k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  41.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  41.1k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  41.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  41.1k|        } \
  |  |  491|  41.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 41.2k]
  |  |  ------------------
  ------------------
 3716|       |    Py_CLEAR(exc->reason);
  ------------------
  |  |  484|  41.2k|    do { \
  |  |  485|  41.2k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  41.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  41.2k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  41.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  41.2k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  41.2k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 41.1k, False: 44]
  |  |  ------------------
  |  |  488|  41.1k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  41.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  41.1k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  41.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  41.1k|        } \
  |  |  491|  41.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 41.2k]
  |  |  ------------------
  ------------------
 3717|  41.2k|    return BaseException_clear(self);
 3718|  41.2k|}
exceptions.c:UnicodeEncodeError_init:
 3760|  36.0k|{
 3761|  36.0k|    if (BaseException_init(self, args, kwds) == -1) {
  ------------------
  |  Branch (3761:9): [True: 0, False: 36.0k]
  ------------------
 3762|      0|        return -1;
 3763|      0|    }
 3764|       |
 3765|  36.0k|    PyObject *encoding = NULL, *object = NULL, *reason = NULL;  // borrowed
 3766|  36.0k|    Py_ssize_t start = -1, end = -1;
 3767|       |
 3768|  36.0k|    if (!PyArg_ParseTuple(args, "UUnnU",
  ------------------
  |  Branch (3768:9): [True: 0, False: 36.0k]
  ------------------
 3769|  36.0k|                          &encoding, &object, &start, &end, &reason))
 3770|      0|    {
 3771|      0|        return -1;
 3772|      0|    }
 3773|       |
 3774|  36.0k|    PyUnicodeErrorObject *exc = PyUnicodeErrorObject_CAST(self);
  ------------------
  |  | 3342|  36.0k|    (assert(PyUnicodeError_Check(op)), ((PyUnicodeErrorObject *)(op)))
  ------------------
  |  Branch (3774:33): [True: 36.0k, False: 0]
  ------------------
 3775|  36.0k|    Py_XSETREF(exc->encoding, Py_NewRef(encoding));
  ------------------
  |  |  376|  36.0k|    do { \
  |  |  377|  36.0k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  36.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  36.0k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  36.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  36.0k|        *_tmp_dst_ptr = (src); \
  |  |  380|  36.0k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  36.0k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  36.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  36.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  36.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 36.0k]
  |  |  ------------------
  ------------------
 3776|  36.0k|    Py_XSETREF(exc->object, Py_NewRef(object));
  ------------------
  |  |  376|  36.0k|    do { \
  |  |  377|  36.0k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  36.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  36.0k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  36.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  36.0k|        *_tmp_dst_ptr = (src); \
  |  |  380|  36.0k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  36.0k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  36.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  36.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  36.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 36.0k]
  |  |  ------------------
  ------------------
 3777|  36.0k|    exc->start = start;
 3778|  36.0k|    exc->end = end;
 3779|  36.0k|    Py_XSETREF(exc->reason, Py_NewRef(reason));
  ------------------
  |  |  376|  36.0k|    do { \
  |  |  377|  36.0k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  36.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  36.0k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  36.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  36.0k|        *_tmp_dst_ptr = (src); \
  |  |  380|  36.0k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  36.0k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  36.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  36.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  36.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 36.0k]
  |  |  ------------------
  ------------------
 3780|  36.0k|    return 0;
 3781|  36.0k|}
exceptions.c:UnicodeDecodeError_str:
 3908|  2.21k|{
 3909|  2.21k|    PyUnicodeErrorObject *exc = PyUnicodeErrorObject_CAST(self);
  ------------------
  |  | 3342|  2.21k|    (assert(PyUnicodeError_Check(op)), ((PyUnicodeErrorObject *)(op)))
  ------------------
  |  Branch (3909:33): [True: 2.21k, False: 0]
  ------------------
 3910|  2.21k|    PyObject *result = NULL;
 3911|  2.21k|    PyObject *reason_str = NULL;
 3912|  2.21k|    PyObject *encoding_str = NULL;
 3913|       |
 3914|  2.21k|    if (exc->object == NULL) {
  ------------------
  |  Branch (3914:9): [True: 0, False: 2.21k]
  ------------------
 3915|       |        /* Not properly initialized. */
 3916|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
 3917|      0|    }
 3918|       |
 3919|       |    /* Get reason and encoding as strings, which they might not be if
 3920|       |       they've been modified after we were constructed. */
 3921|  2.21k|    reason_str = PyObject_Str(exc->reason);
 3922|  2.21k|    if (reason_str == NULL) {
  ------------------
  |  Branch (3922:9): [True: 0, False: 2.21k]
  ------------------
 3923|      0|        goto done;
 3924|      0|    }
 3925|  2.21k|    encoding_str = PyObject_Str(exc->encoding);
 3926|  2.21k|    if (encoding_str == NULL) {
  ------------------
  |  Branch (3926:9): [True: 0, False: 2.21k]
  ------------------
 3927|      0|        goto done;
 3928|      0|    }
 3929|       |    // calls to PyObject_Str(...) above might mutate 'exc->object'
 3930|  2.21k|    if (check_unicode_error_attribute(exc->object, "object", true) < 0) {
  ------------------
  |  Branch (3930:9): [True: 0, False: 2.21k]
  ------------------
 3931|      0|        goto done;
 3932|      0|    }
 3933|  2.21k|    Py_ssize_t len = PyBytes_GET_SIZE(exc->object);
  ------------------
  |  |   33|  2.21k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  2.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3934|  2.21k|    Py_ssize_t start = exc->start, end = exc->end;
 3935|       |
 3936|  2.21k|    if ((start >= 0 && start < len) && (end >= 0 && end <= len) && end == start + 1) {
  ------------------
  |  Branch (3936:10): [True: 2.21k, False: 0]
  |  Branch (3936:24): [True: 2.10k, False: 109]
  |  Branch (3936:41): [True: 2.10k, False: 0]
  |  Branch (3936:53): [True: 1.97k, False: 126]
  |  Branch (3936:68): [True: 1.34k, False: 634]
  ------------------
 3937|  1.34k|        int badbyte = (int)(PyBytes_AS_STRING(exc->object)[start] & 0xff);
  ------------------
  |  |   27|  1.34k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3938|  1.34k|        result = PyUnicode_FromFormat(
 3939|  1.34k|            "'%U' codec can't decode byte 0x%02x in position %zd: %U",
 3940|  1.34k|            encoding_str,
 3941|  1.34k|            badbyte,
 3942|  1.34k|            start,
 3943|  1.34k|            reason_str);
 3944|  1.34k|    }
 3945|    869|    else {
 3946|    869|        result = PyUnicode_FromFormat(
 3947|    869|            "'%U' codec can't decode bytes in position %zd-%zd: %U",
 3948|    869|            encoding_str,
 3949|    869|            start,
 3950|    869|            end - 1,
 3951|    869|            reason_str);
 3952|    869|    }
 3953|  2.21k|done:
 3954|  2.21k|    Py_XDECREF(reason_str);
  ------------------
  |  |  524|  2.21k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3955|  2.21k|    Py_XDECREF(encoding_str);
  ------------------
  |  |  524|  2.21k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3956|  2.21k|    return result;
 3957|  2.21k|}
exceptions.c:UnicodeDecodeError_init:
 3867|  5.13k|{
 3868|  5.13k|    if (BaseException_init(self, args, kwds) == -1) {
  ------------------
  |  Branch (3868:9): [True: 0, False: 5.13k]
  ------------------
 3869|      0|        return -1;
 3870|      0|    }
 3871|       |
 3872|  5.13k|    PyObject *encoding = NULL, *object = NULL, *reason = NULL;  // borrowed
 3873|  5.13k|    Py_ssize_t start = -1, end = -1;
 3874|       |
 3875|  5.13k|    if (!PyArg_ParseTuple(args, "UOnnU",
  ------------------
  |  Branch (3875:9): [True: 44, False: 5.09k]
  ------------------
 3876|  5.13k|                          &encoding, &object, &start, &end, &reason))
 3877|     44|    {
 3878|     44|        return -1;
 3879|     44|    }
 3880|       |
 3881|  5.09k|    if (PyBytes_Check(object)) {
  ------------------
  |  |   28|  5.09k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  5.09k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 5.09k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3882|  5.09k|        Py_INCREF(object);  // make 'object' a strong reference
  ------------------
  |  |  310|  5.09k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3883|  5.09k|    }
 3884|      0|    else {
 3885|      0|        Py_buffer view;
 3886|      0|        if (PyObject_GetBuffer(object, &view, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (3886:13): [True: 0, False: 0]
  ------------------
 3887|      0|            return -1;
 3888|      0|        }
 3889|       |        // 'object' is borrowed, so we can re-use the variable
 3890|      0|        object = PyBytes_FromStringAndSize(view.buf, view.len);
 3891|      0|        PyBuffer_Release(&view);
 3892|      0|        if (object == NULL) {
  ------------------
  |  Branch (3892:13): [True: 0, False: 0]
  ------------------
 3893|      0|            return -1;
 3894|      0|        }
 3895|      0|    }
 3896|       |
 3897|  5.09k|    PyUnicodeErrorObject *exc = PyUnicodeErrorObject_CAST(self);
  ------------------
  |  | 3342|  5.09k|    (assert(PyUnicodeError_Check(op)), ((PyUnicodeErrorObject *)(op)))
  ------------------
  |  Branch (3897:33): [True: 5.09k, False: 0]
  ------------------
 3898|  5.09k|    Py_XSETREF(exc->encoding, Py_NewRef(encoding));
  ------------------
  |  |  376|  5.09k|    do { \
  |  |  377|  5.09k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.09k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.09k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.09k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.09k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.09k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.09k]
  |  |  ------------------
  ------------------
 3899|  5.09k|    Py_XSETREF(exc->object, object /* already a strong reference */);
  ------------------
  |  |  376|  5.09k|    do { \
  |  |  377|  5.09k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.09k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.09k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.09k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.09k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.09k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.09k]
  |  |  ------------------
  ------------------
 3900|  5.09k|    exc->start = start;
 3901|  5.09k|    exc->end = end;
 3902|  5.09k|    Py_XSETREF(exc->reason, Py_NewRef(reason));
  ------------------
  |  |  376|  5.09k|    do { \
  |  |  377|  5.09k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  5.09k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  5.09k|        *_tmp_dst_ptr = (src); \
  |  |  380|  5.09k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  5.09k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  5.09k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 5.09k]
  |  |  ------------------
  ------------------
 3903|  5.09k|    return 0;
 3904|  5.09k|}
exceptions.c:get_memory_error:
 4156|     86|{
 4157|     86|    PyBaseExceptionObject *self = NULL;
 4158|     86|    struct _Py_exc_state *state = get_exc_state();
 4159|       |
 4160|     86|    MEMERRORS_LOCK(state);
  ------------------
  |  | 4150|     86|# define MEMERRORS_LOCK(state) ((void)0)
  ------------------
 4161|     86|    if (state->memerrors_freelist != NULL) {
  ------------------
  |  Branch (4161:9): [True: 54, False: 32]
  ------------------
 4162|       |        /* Fetch MemoryError from freelist and initialize it */
 4163|     54|        self = state->memerrors_freelist;
 4164|     54|        state->memerrors_freelist = (PyBaseExceptionObject *) self->dict;
 4165|     54|        state->memerrors_numfree--;
 4166|     54|        self->dict = NULL;
 4167|     54|        self->args = (PyObject *)&_Py_SINGLETON(tuple_empty);
  ------------------
  |  |   18|     54|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|     54|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
 4168|     54|        _Py_NewReference((PyObject *)self);
 4169|     54|        _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|     54|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     54|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     54|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4170|     54|    }
 4171|     86|    MEMERRORS_UNLOCK(state);
  ------------------
  |  | 4151|     86|# define MEMERRORS_UNLOCK(state) ((void)0)
  ------------------
 4172|       |
 4173|     86|    if (self != NULL) {
  ------------------
  |  Branch (4173:9): [True: 54, False: 32]
  ------------------
 4174|     54|        return (PyObject *)self;
 4175|     54|    }
 4176|       |
 4177|     32|    if (!allow_allocation) {
  ------------------
  |  Branch (4177:9): [True: 0, False: 32]
  ------------------
 4178|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
 4179|      0|        return Py_NewRef(
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4180|      0|            &_Py_INTERP_SINGLETON(interp, last_resort_memory_error));
 4181|      0|    }
 4182|     32|    return BaseException_new((PyTypeObject *)PyExc_MemoryError, args, kwds);
 4183|     32|}
exceptions.c:MemoryError_dealloc:
 4214|     86|{
 4215|     86|    PyBaseExceptionObject *self = PyBaseExceptionObject_CAST(op);
 4216|     86|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|     86|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     86|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     86|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4217|       |
 4218|     86|    (void)BaseException_clear(op);
 4219|       |
 4220|       |    /* If this is a subclass of MemoryError, we don't need to
 4221|       |     * do anything in the free-list*/
 4222|     86|    if (!Py_IS_TYPE(self, (PyTypeObject *) PyExc_MemoryError)) {
  ------------------
  |  |  215|     86|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     86|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     86|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4222:9): [True: 0, False: 86]
  ------------------
 4223|      0|        Py_TYPE(self)->tp_free(op);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4224|      0|        return;
 4225|      0|    }
 4226|       |
 4227|     86|    struct _Py_exc_state *state = get_exc_state();
 4228|     86|    MEMERRORS_LOCK(state);
  ------------------
  |  | 4150|     86|# define MEMERRORS_LOCK(state) ((void)0)
  ------------------
 4229|     86|    if (state->memerrors_numfree < MEMERRORS_SAVE) {
  ------------------
  |  | 4144|     86|#define MEMERRORS_SAVE 16
  ------------------
  |  Branch (4229:9): [True: 86, False: 0]
  ------------------
 4230|     86|        self->dict = (PyObject *) state->memerrors_freelist;
 4231|     86|        state->memerrors_freelist = self;
 4232|     86|        state->memerrors_numfree++;
 4233|     86|        MEMERRORS_UNLOCK(state);
  ------------------
  |  | 4151|     86|# define MEMERRORS_UNLOCK(state) ((void)0)
  ------------------
 4234|     86|        return;
 4235|     86|    }
 4236|      0|    MEMERRORS_UNLOCK(state);
  ------------------
  |  | 4151|      0|# define MEMERRORS_UNLOCK(state) ((void)0)
  ------------------
 4237|       |
 4238|      0|    Py_TYPE(self)->tp_free((PyObject *)self);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4239|      0|}
exceptions.c:BaseException_traverse:
  153|     12|{
  154|     12|    PyBaseExceptionObject *self = PyBaseExceptionObject_CAST(op);
  155|     12|    Py_VISIT(self->dict);
  ------------------
  |  |  194|     12|    do {                                                                \
  |  |  195|     12|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 10]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  156|     12|    Py_VISIT(self->args);
  ------------------
  |  |  194|     12|    do {                                                                \
  |  |  195|     12|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 12, False: 0]
  |  |  ------------------
  |  |  196|     12|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     12|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 12]
  |  |  ------------------
  |  |  198|     12|                return vret;                                            \
  |  |  199|     12|        }                                                               \
  |  |  200|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  157|     12|    Py_VISIT(self->notes);
  ------------------
  |  |  194|     12|    do {                                                                \
  |  |  195|     12|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 12]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  158|     12|    Py_VISIT(self->traceback);
  ------------------
  |  |  194|     12|    do {                                                                \
  |  |  195|     12|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 6, False: 6]
  |  |  ------------------
  |  |  196|      6|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      6|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 6]
  |  |  ------------------
  |  |  198|      6|                return vret;                                            \
  |  |  199|      6|        }                                                               \
  |  |  200|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  159|     12|    Py_VISIT(self->cause);
  ------------------
  |  |  194|     12|    do {                                                                \
  |  |  195|     12|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 12]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  160|     12|    Py_VISIT(self->context);
  ------------------
  |  |  194|     12|    do {                                                                \
  |  |  195|     12|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 10]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  161|     12|    return 0;
  162|     12|}
exceptions.c:BaseException_clear:
  128|   163k|{
  129|   163k|    PyBaseExceptionObject *self = PyBaseExceptionObject_CAST(op);
  130|   163k|    Py_CLEAR(self->dict);
  ------------------
  |  |  484|   163k|    do { \
  |  |  485|   163k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   163k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   163k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1.89k, False: 161k]
  |  |  ------------------
  |  |  488|  1.89k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  1.89k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  1.89k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  1.89k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.89k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.89k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  1.89k|        } \
  |  |  491|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
  131|   163k|    Py_CLEAR(self->args);
  ------------------
  |  |  484|   163k|    do { \
  |  |  485|   163k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   163k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   163k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 163k, False: 0]
  |  |  ------------------
  |  |  488|   163k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|   163k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|   163k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   163k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   163k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|   163k|        } \
  |  |  491|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
  132|   163k|    Py_CLEAR(self->notes);
  ------------------
  |  |  484|   163k|    do { \
  |  |  485|   163k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   163k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   163k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 163k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
  133|   163k|    Py_CLEAR(self->traceback);
  ------------------
  |  |  484|   163k|    do { \
  |  |  485|   163k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   163k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   163k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 40.0k, False: 123k]
  |  |  ------------------
  |  |  488|  40.0k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  40.0k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  40.0k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  40.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  40.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  40.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  40.0k|        } \
  |  |  491|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
  134|   163k|    Py_CLEAR(self->cause);
  ------------------
  |  |  484|   163k|    do { \
  |  |  485|   163k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   163k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   163k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 163k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
  135|       |    Py_CLEAR(self->context);
  ------------------
  |  |  484|   163k|    do { \
  |  |  485|   163k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   163k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   163k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   163k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   163k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1.53k, False: 162k]
  |  |  ------------------
  |  |  488|  1.53k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  1.53k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  1.53k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  1.53k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  1.53k|        } \
  |  |  491|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
  136|   163k|    return 0;
  137|   163k|}
exceptions.c:BaseException_init:
   83|  56.4k|{
   84|  56.4k|    PyBaseExceptionObject *self = PyBaseExceptionObject_CAST(op);
   85|  56.4k|    if (!_PyArg_NoKeywords(Py_TYPE(self)->tp_name, kwds))
  ------------------
  |  |   25|  56.4k|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 56.4k, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   86|      0|        return -1;
   87|       |
   88|  56.4k|    Py_XSETREF(self->args, Py_NewRef(args));
  ------------------
  |  |  376|  56.4k|    do { \
  |  |  377|  56.4k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  56.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  56.4k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  56.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  56.4k|        *_tmp_dst_ptr = (src); \
  |  |  380|  56.4k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  56.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  56.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  56.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  56.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 56.4k]
  |  |  ------------------
  ------------------
   89|  56.4k|    return 0;
   90|  56.4k|}
exceptions.c:MemoryError_new:
 4187|     86|{
 4188|       |    /* If this is a subclass of MemoryError, don't use the freelist
 4189|       |     * and just return a fresh object */
 4190|     86|    if (type != (PyTypeObject *) PyExc_MemoryError) {
  ------------------
  |  Branch (4190:9): [True: 0, False: 86]
  ------------------
 4191|      0|        return BaseException_new(type, args, kwds);
 4192|      0|    }
 4193|     86|    return get_memory_error(1, args, kwds);
 4194|     86|}
exceptions.c:BaseException_new:
   55|  56.4k|{
   56|  56.4k|    PyBaseExceptionObject *self;
   57|       |
   58|  56.4k|    self = (PyBaseExceptionObject *)type->tp_alloc(type, 0);
   59|  56.4k|    if (!self)
  ------------------
  |  Branch (59:9): [True: 0, False: 56.4k]
  ------------------
   60|      0|        return NULL;
   61|       |    /* the dict is created on the fly in PyObject_GenericSetAttr */
   62|  56.4k|    self->dict = NULL;
   63|  56.4k|    self->notes = NULL;
   64|  56.4k|    self->traceback = self->cause = self->context = NULL;
   65|  56.4k|    self->suppress_context = 0;
   66|       |
   67|  56.4k|    if (args) {
  ------------------
  |  Branch (67:9): [True: 56.4k, False: 32]
  ------------------
   68|  56.4k|        self->args = Py_NewRef(args);
  ------------------
  |  |  550|  56.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|  56.4k|        return (PyObject *)self;
   70|  56.4k|    }
   71|       |
   72|     32|    self->args = PyTuple_New(0);
   73|     32|    if (!self->args) {
  ------------------
  |  Branch (73:9): [True: 0, False: 32]
  ------------------
   74|      0|        Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      0|        return NULL;
   76|      0|    }
   77|       |
   78|     32|    return (PyObject *)self;
   79|     32|}
exceptions.c:BaseException_vectorcall:
   96|   101k|{
   97|   101k|    PyTypeObject *type = _PyType_CAST(type_obj);
  ------------------
  |  |  770|   101k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   101k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (97:26): [True: 101k, False: 0]
  ------------------
   98|   101k|    if (!_PyArg_NoKwnames(type->tp_name, kwnames)) {
  ------------------
  |  |   15|   101k|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 101k, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   99|      0|        return NULL;
  100|      0|    }
  101|       |
  102|   101k|    PyBaseExceptionObject *self;
  103|   101k|    self = (PyBaseExceptionObject *)type->tp_alloc(type, 0);
  104|   101k|    if (!self) {
  ------------------
  |  Branch (104:9): [True: 0, False: 101k]
  ------------------
  105|      0|        return NULL;
  106|      0|    }
  107|       |
  108|       |    // The dict is created on the fly in PyObject_GenericSetAttr()
  109|   101k|    self->dict = NULL;
  110|   101k|    self->notes = NULL;
  111|   101k|    self->traceback = NULL;
  112|   101k|    self->cause = NULL;
  113|   101k|    self->context = NULL;
  114|   101k|    self->suppress_context = 0;
  115|       |
  116|   101k|    self->args = PyTuple_FromArray(args, PyVectorcall_NARGS(nargsf));
  ------------------
  |  |   37|   101k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  117|   101k|    if (!self->args) {
  ------------------
  |  Branch (117:9): [True: 0, False: 101k]
  ------------------
  118|      0|        Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      0|        return NULL;
  120|      0|    }
  121|       |
  122|   101k|    return (PyObject *)self;
  123|   101k|}
exceptions.c:preallocate_memerrors:
 4243|      2|{
 4244|       |    /* We create enough MemoryErrors and then decref them, which will fill
 4245|       |       up the freelist. */
 4246|      2|    int i;
 4247|       |
 4248|      2|    PyObject *errors[MEMERRORS_SAVE];
 4249|     34|    for (i = 0; i < MEMERRORS_SAVE; i++) {
  ------------------
  |  | 4144|     34|#define MEMERRORS_SAVE 16
  ------------------
  |  Branch (4249:17): [True: 32, False: 2]
  ------------------
 4250|     32|        errors[i] = MemoryError_new((PyTypeObject *) PyExc_MemoryError,
 4251|     32|                                    NULL, NULL);
 4252|     32|        if (!errors[i]) {
  ------------------
  |  Branch (4252:13): [True: 0, False: 32]
  ------------------
 4253|      0|            return -1;
 4254|      0|        }
 4255|     32|    }
 4256|     34|    for (i = 0; i < MEMERRORS_SAVE; i++) {
  ------------------
  |  | 4144|     34|#define MEMERRORS_SAVE 16
  ------------------
  |  Branch (4256:17): [True: 32, False: 2]
  ------------------
 4257|     32|        Py_DECREF(errors[i]);
  ------------------
  |  |  430|     32|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4258|     32|    }
 4259|      2|    return 0;
 4260|      2|}
exceptions.c:create_exception_group_class:
 1752|      2|create_exception_group_class(void) {
 1753|      2|    struct _Py_exc_state *state = get_exc_state();
 1754|       |
 1755|      2|    PyObject *bases = _PyTuple_FromPair(
 1756|      2|        PyExc_BaseExceptionGroup, PyExc_Exception);
 1757|      2|    if (bases == NULL) {
  ------------------
  |  Branch (1757:9): [True: 0, False: 2]
  ------------------
 1758|      0|        return NULL;
 1759|      0|    }
 1760|       |
 1761|      2|    assert(!state->PyExc_ExceptionGroup);
  ------------------
  |  Branch (1761:5): [True: 2, False: 0]
  ------------------
 1762|      2|    state->PyExc_ExceptionGroup = PyErr_NewException(
 1763|      2|        "builtins.ExceptionGroup", bases, NULL);
 1764|       |
 1765|      2|    Py_DECREF(bases);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1766|      2|    return state->PyExc_ExceptionGroup;
 1767|      2|}
exceptions.c:BaseException_add_note_impl:
  294|  1.92k|{
  295|  1.92k|    PyObject *notes;
  296|  1.92k|    if (PyObject_GetOptionalAttr((PyObject *)self, &_Py_ID(__notes__), &notes) < 0) {
  ------------------
  |  |  936|  1.92k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.92k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.92k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (296:9): [True: 0, False: 1.92k]
  ------------------
  297|      0|        return NULL;
  298|      0|    }
  299|  1.92k|    if (notes == NULL) {
  ------------------
  |  Branch (299:9): [True: 1.89k, False: 36]
  ------------------
  300|  1.89k|        notes = PyList_New(0);
  301|  1.89k|        if (notes == NULL) {
  ------------------
  |  Branch (301:13): [True: 0, False: 1.89k]
  ------------------
  302|      0|            return NULL;
  303|      0|        }
  304|  1.89k|        if (PyObject_SetAttr((PyObject *)self, &_Py_ID(__notes__), notes) < 0) {
  ------------------
  |  |  936|  1.89k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.89k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.89k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (304:13): [True: 0, False: 1.89k]
  ------------------
  305|      0|            Py_DECREF(notes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  306|      0|            return NULL;
  307|      0|        }
  308|  1.89k|    }
  309|     36|    else if (!PyList_Check(notes)) {
  ------------------
  |  |   25|     36|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     36|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (309:14): [True: 0, False: 36]
  ------------------
  310|      0|        Py_DECREF(notes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|      0|        PyErr_SetString(PyExc_TypeError, "Cannot add note: __notes__ is not a list");
  312|      0|        return NULL;
  313|      0|    }
  314|  1.92k|    if (PyList_Append(notes, note) < 0) {
  ------------------
  |  Branch (314:9): [True: 0, False: 1.92k]
  ------------------
  315|      0|        Py_DECREF(notes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|      0|        return NULL;
  317|      0|    }
  318|  1.92k|    Py_DECREF(notes);
  ------------------
  |  |  430|  1.92k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|  1.92k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  1.92k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  1.92k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  320|  1.92k|}

PyFile_NewStdPrinter:
  302|      2|{
  303|      2|    PyStdPrinter_Object *self;
  304|       |
  305|      2|    if (fd != fileno(stdout) && fd != fileno(stderr)) {
  ------------------
  |  Branch (305:9): [True: 2, False: 0]
  |  Branch (305:33): [True: 0, False: 2]
  ------------------
  306|       |        /* not enough infrastructure for PyErr_BadInternalCall() */
  307|      0|        return NULL;
  308|      0|    }
  309|       |
  310|      2|    self = PyObject_New(PyStdPrinter_Object,
  ------------------
  |  |  130|      2|#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
  ------------------
  311|      2|                        &PyStdPrinter_Type);
  312|      2|    if (self != NULL) {
  ------------------
  |  Branch (312:9): [True: 2, False: 0]
  ------------------
  313|      2|        self->fd = fd;
  314|      2|    }
  315|      2|    return (PyObject*)self;
  316|      2|}
PyFile_OpenCodeObject:
  513|     93|{
  514|     93|    PyObject *f = NULL;
  515|       |
  516|     93|    if (!PyUnicode_Check(path)) {
  ------------------
  |  |  103|     93|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     93|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (516:9): [True: 0, False: 93]
  ------------------
  517|      0|        PyErr_Format(PyExc_TypeError, "'path' must be 'str', not '%.200s'",
  518|      0|                     Py_TYPE(path)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|      0|        return NULL;
  520|      0|    }
  521|       |
  522|     93|    Py_OpenCodeHookFunction hook = _PyRuntime.open_code_hook;
  523|     93|    if (hook) {
  ------------------
  |  Branch (523:9): [True: 0, False: 93]
  ------------------
  524|      0|        f = hook(path, _PyRuntime.open_code_userdata);
  525|     93|    } else {
  526|     93|        PyObject *open = PyImport_ImportModuleAttrString("_io", "open");
  527|     93|        if (open) {
  ------------------
  |  Branch (527:13): [True: 93, False: 0]
  ------------------
  528|     93|            f = PyObject_CallFunction(open, "Os", path, "rb");
  529|     93|            Py_DECREF(open);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  530|     93|        }
  531|     93|    }
  532|       |
  533|     93|    return f;
  534|     93|}
_PyFile_Flush:
  552|  48.6k|{
  553|  48.6k|    PyObject *tmp = PyObject_CallMethodNoArgs(file, &_Py_ID(flush));
  ------------------
  |  |  936|  48.6k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  48.6k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  48.6k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|  48.6k|    if (tmp == NULL) {
  ------------------
  |  Branch (554:9): [True: 0, False: 48.6k]
  ------------------
  555|      0|        return -1;
  556|      0|    }
  557|  48.6k|    Py_DECREF(tmp);
  ------------------
  |  |  430|  48.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|  48.6k|    return 0;
  559|  48.6k|}

PyFloat_GetInfo:
   84|      2|{
   85|      2|    PyObject* floatinfo;
   86|      2|    int pos = 0;
   87|       |
   88|      2|    floatinfo = PyStructSequence_New(&FloatInfoType);
   89|      2|    if (floatinfo == NULL) {
  ------------------
  |  Branch (89:9): [True: 0, False: 2]
  ------------------
   90|      0|        return NULL;
   91|      0|    }
   92|       |
   93|      2|#define SetFlag(CALL) \
   94|      2|    do {                                                    \
   95|      2|        PyObject *flag = (CALL);                            \
   96|      2|        if (flag == NULL) {                                 \
   97|      2|            Py_CLEAR(floatinfo);                            \
   98|      2|            return NULL;                                    \
   99|      2|        }                                                   \
  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  101|      2|    } while (0)
  102|       |
  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  104|      2|#define SetDblFlag(FLAG) SetFlag(PyFloat_FromDouble((FLAG)))
  105|       |
  106|      2|    SetDblFlag(DBL_MAX);
  ------------------
  |  |  104|      2|#define SetDblFlag(FLAG) SetFlag(PyFloat_FromDouble((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      2|    SetIntFlag(DBL_MAX_EXP);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|      2|    SetIntFlag(DBL_MAX_10_EXP);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      2|    SetDblFlag(DBL_MIN);
  ------------------
  |  |  104|      2|#define SetDblFlag(FLAG) SetFlag(PyFloat_FromDouble((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|      2|    SetIntFlag(DBL_MIN_EXP);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|      2|    SetIntFlag(DBL_MIN_10_EXP);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|      2|    SetIntFlag(DBL_DIG);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      2|    SetIntFlag(DBL_MANT_DIG);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|      2|    SetDblFlag(DBL_EPSILON);
  ------------------
  |  |  104|      2|#define SetDblFlag(FLAG) SetFlag(PyFloat_FromDouble((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      2|    SetIntFlag(FLT_RADIX);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|      2|    SetIntFlag(FLT_ROUNDS);
  ------------------
  |  |  103|      2|#define SetIntFlag(FLAG) SetFlag(PyLong_FromLong((FLAG)))
  |  |  ------------------
  |  |  |  |   94|      2|    do {                                                    \
  |  |  |  |   95|      2|        PyObject *flag = (CALL);                            \
  |  |  |  |   96|      2|        if (flag == NULL) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   97|      0|            Py_CLEAR(floatinfo);                            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|    do { \
  |  |  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  490|      0|        } \
  |  |  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|      0|            return NULL;                                    \
  |  |  |  |   99|      0|        }                                                   \
  |  |  |  |  100|      2|        PyStructSequence_SET_ITEM(floatinfo, pos++, flag);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  |  |  ------------------
  |  |  |  |  101|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (101:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      2|#undef SetIntFlag
  118|      2|#undef SetDblFlag
  119|      2|#undef SetFlag
  120|       |
  121|      2|    return floatinfo;
  122|      2|}
PyFloat_FromDouble:
  126|   275k|{
  127|   275k|    PyFloatObject *op = _Py_FREELIST_POP(PyFloatObject, floats);
  ------------------
  |  |   43|   275k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  128|   275k|    if (op == NULL) {
  ------------------
  |  Branch (128:9): [True: 68.9k, False: 206k]
  ------------------
  129|  68.9k|        op = PyObject_Malloc(sizeof(PyFloatObject));
  130|  68.9k|        if (!op) {
  ------------------
  |  Branch (130:13): [True: 0, False: 68.9k]
  ------------------
  131|      0|            return PyErr_NoMemory();
  132|      0|        }
  133|  68.9k|        _PyObject_Init((PyObject*)op, &PyFloat_Type);
  134|  68.9k|    }
  135|   275k|    op->ob_fval = fval;
  136|   275k|    return (PyObject *) op;
  137|   275k|}
_PyFloat_ExactDealloc:
  231|   275k|{
  232|   275k|    assert(PyFloat_CheckExact(obj));
  ------------------
  |  Branch (232:5): [True: 275k, False: 0]
  ------------------
  233|   275k|    _Py_FREELIST_FREE(floats, obj, PyObject_Free);
  ------------------
  |  |   35|   275k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|   275k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|   275k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   18|   275k|#  define Py_floats_MAXFREELIST 100
  |  |  ------------------
  ------------------
  234|   275k|}
PyFloat_AsDouble:
  248|      1|{
  249|      1|    PyNumberMethods *nb;
  250|      1|    PyObject *res;
  251|      1|    double val;
  252|       |
  253|      1|    if (op == NULL) {
  ------------------
  |  Branch (253:9): [True: 0, False: 1]
  ------------------
  254|      0|        PyErr_BadArgument();
  255|      0|        return -1;
  256|      0|    }
  257|       |
  258|      1|    if (PyFloat_Check(op)) {
  ------------------
  |  |   16|      1|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|      1|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|      1|        return PyFloat_AS_DOUBLE(op);
  ------------------
  |  |   18|      1|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|      1|    }
  261|       |
  262|      0|    nb = Py_TYPE(op)->tp_as_number;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|      0|    if (nb == NULL || nb->nb_float == NULL) {
  ------------------
  |  Branch (263:9): [True: 0, False: 0]
  |  Branch (263:23): [True: 0, False: 0]
  ------------------
  264|      0|        if (nb && nb->nb_index) {
  ------------------
  |  Branch (264:13): [True: 0, False: 0]
  |  Branch (264:19): [True: 0, False: 0]
  ------------------
  265|      0|            PyObject *res = _PyNumber_Index(op);
  266|      0|            if (!res) {
  ------------------
  |  Branch (266:17): [True: 0, False: 0]
  ------------------
  267|      0|                return -1;
  268|      0|            }
  269|      0|            double val = PyLong_AsDouble(res);
  270|      0|            Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|      0|            return val;
  272|      0|        }
  273|      0|        PyErr_Format(PyExc_TypeError, "must be real number, not %.50s",
  274|      0|                     Py_TYPE(op)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|      0|        return -1;
  276|      0|    }
  277|       |
  278|      0|    res = (*nb->nb_float) (op);
  279|      0|    if (res == NULL) {
  ------------------
  |  Branch (279:9): [True: 0, False: 0]
  ------------------
  280|      0|        return -1;
  281|      0|    }
  282|      0|    if (!PyFloat_CheckExact(res)) {
  ------------------
  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (282:9): [True: 0, False: 0]
  ------------------
  283|      0|        if (!PyFloat_Check(res)) {
  ------------------
  |  |   16|      0|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (283:13): [True: 0, False: 0]
  ------------------
  284|      0|            PyErr_Format(PyExc_TypeError,
  285|      0|                         "%T.__float__() must return a float, not %T",
  286|      0|                         op, res);
  287|      0|            Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|      0|            return -1;
  289|      0|        }
  290|      0|        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
  ------------------
  |  Branch (290:13): [True: 0, False: 0]
  ------------------
  291|      0|                "%T.__float__() must return a float, not %T.  "
  292|      0|                "The ability to return an instance of a strict subclass of float "
  293|      0|                "is deprecated, and may be removed in a future version of Python.",
  294|      0|                op, res)) {
  295|      0|            Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|      0|            return -1;
  297|      0|        }
  298|      0|    }
  299|       |
  300|      0|    val = PyFloat_AS_DOUBLE(res);
  ------------------
  |  |   18|      0|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      0|    Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|      0|    return val;
  303|      0|}
_Py_convert_int_to_double:
  321|   195k|{
  322|   195k|    PyObject *obj = *v;
  323|       |
  324|   195k|    if (PyLong_Check(obj)) {
  ------------------
  |  |   13|   195k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   195k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 172k, False: 22.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|   172k|        *dbl = PyLong_AsDouble(obj);
  326|   172k|        if (*dbl == -1.0 && PyErr_Occurred()) {
  ------------------
  |  Branch (326:13): [True: 10.6k, False: 162k]
  |  Branch (326:29): [True: 263, False: 10.3k]
  ------------------
  327|    263|            *v = NULL;
  328|    263|            return -1;
  329|    263|        }
  330|   172k|    }
  331|  22.5k|    else {
  332|  22.5k|        *v = Py_NewRef(Py_NotImplemented);
  ------------------
  |  |  550|  22.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  22.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  333|  22.5k|        return -1;
  334|  22.5k|    }
  335|   172k|    return 0;
  336|   195k|}
_PyFloat_InitTypes:
 1855|      2|{
 1856|       |    /* Init float info */
 1857|      2|    if (_PyStructSequence_InitBuiltin(interp, &FloatInfoType,
  ------------------
  |  Branch (1857:9): [True: 0, False: 2]
  ------------------
 1858|      2|                                      &floatinfo_desc) < 0)
 1859|      0|    {
 1860|      0|        return _PyStatus_ERR("can't init float info type");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1861|      0|    }
 1862|       |
 1863|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1864|      2|}
PyFloat_Unpack8:
 2248|      4|{
 2249|      4|    unsigned char *p = (unsigned char *)data;
 2250|      4|    double x;
 2251|       |
 2252|      4|    if ((_PY_FLOAT_LITTLE_ENDIAN && !le) || (_PY_FLOAT_BIG_ENDIAN && le)) {
  ------------------
  |  |   51|      8|#  define _PY_FLOAT_LITTLE_ENDIAN 1
  |  |  ------------------
  |  |  |  Branch (51:35): [True: 4, Folded]
  |  |  ------------------
  ------------------
                  if ((_PY_FLOAT_LITTLE_ENDIAN && !le) || (_PY_FLOAT_BIG_ENDIAN && le)) {
  ------------------
  |  |   50|      0|#  define _PY_FLOAT_BIG_ENDIAN 0
  |  |  ------------------
  |  |  |  Branch (50:32): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2252:37): [True: 0, False: 4]
  |  Branch (2252:70): [True: 0, False: 0]
  ------------------
 2253|      0|        char buf[8];
 2254|      0|        char *d = &buf[7];
 2255|      0|        int i;
 2256|       |
 2257|      0|        for (i = 0; i < 8; i++) {
  ------------------
  |  Branch (2257:21): [True: 0, False: 0]
  ------------------
 2258|      0|            *d-- = *p++;
 2259|      0|        }
 2260|      0|        memcpy(&x, buf, 8);
 2261|      0|    }
 2262|      4|    else {
 2263|      4|        memcpy(&x, p, 8);
 2264|      4|    }
 2265|       |
 2266|      4|    return x;
 2267|      4|}
floatobject.c:float_dealloc:
  238|   275k|{
  239|   275k|    assert(PyFloat_Check(op));
  ------------------
  |  Branch (239:5): [True: 275k, False: 0]
  ------------------
  240|   275k|    if (PyFloat_CheckExact(op))
  ------------------
  |  |   17|   275k|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|   275k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   275k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 275k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  241|   275k|        _PyFloat_ExactDealloc(op);
  242|      0|    else
  243|      0|        Py_TYPE(op)->tp_free(op);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|   275k|}
floatobject.c:float_repr:
  340|  23.2k|{
  341|  23.2k|    PyFloatObject *v = _PyFloat_CAST(op);
  ------------------
  |  |   11|  23.2k|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|  23.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (341:24): [True: 23.2k, False: 0]
  ------------------
  342|      0|    PyObject *result;
  343|  23.2k|    char *buf;
  344|       |
  345|  23.2k|    buf = PyOS_double_to_string(PyFloat_AS_DOUBLE(v),
  ------------------
  |  |   18|  23.2k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  23.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|  23.2k|                                'r', 0,
  347|  23.2k|                                Py_DTSF_ADD_DOT_0,
  ------------------
  |  |   23|  23.2k|#define Py_DTSF_ADD_DOT_0 0x02 /* if the result is an integer add ".0" */
  ------------------
  348|  23.2k|                                NULL);
  349|  23.2k|    if (!buf)
  ------------------
  |  Branch (349:9): [True: 0, False: 23.2k]
  ------------------
  350|      0|        return PyErr_NoMemory();
  351|  23.2k|    result = _PyUnicode_FromASCII(buf, strlen(buf));
  352|  23.2k|    PyMem_Free(buf);
  353|  23.2k|    return result;
  354|  23.2k|}
floatobject.c:float_add:
  543|  19.0k|{
  544|  19.0k|    double a,b;
  545|  19.0k|    CONVERT_TO_DOUBLE(v, a);
  ------------------
  |  |  312|  19.0k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  19.0k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  19.0k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  19.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  19.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 17.7k, False: 1.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  19.0k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  36.7k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  19.0k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 381, False: 983]
  |  |  ------------------
  |  |  315|  1.36k|        return obj;
  ------------------
  546|  18.6k|    CONVERT_TO_DOUBLE(w, b);
  ------------------
  |  |  312|  18.6k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  18.6k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  18.6k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  18.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  18.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 3.65k, False: 15.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  18.6k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  22.3k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  18.6k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 193, False: 14.8k]
  |  |  ------------------
  |  |  315|  15.0k|        return obj;
  ------------------
  547|  18.4k|    a = a + b;
  548|  18.4k|    return PyFloat_FromDouble(a);
  549|  18.6k|}
floatobject.c:float_sub:
  553|  42.4k|{
  554|  42.4k|    double a,b;
  555|  42.4k|    CONVERT_TO_DOUBLE(v, a);
  ------------------
  |  |  312|  42.4k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  42.4k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  42.4k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  42.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  42.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 40.0k, False: 2.40k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  42.4k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  82.5k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  40.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  40.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  42.4k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 187, False: 2.22k]
  |  |  ------------------
  |  |  315|  2.40k|        return obj;
  ------------------
  556|  42.2k|    CONVERT_TO_DOUBLE(w, b);
  ------------------
  |  |  312|  42.2k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  42.2k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  42.2k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  42.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  42.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 10.8k, False: 31.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  42.2k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  53.1k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  42.2k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 625, False: 30.7k]
  |  |  ------------------
  |  |  315|  31.3k|        return obj;
  ------------------
  557|  41.6k|    a = a - b;
  558|  41.6k|    return PyFloat_FromDouble(a);
  559|  42.2k|}
floatobject.c:float_mul:
  563|  12.8k|{
  564|  12.8k|    double a,b;
  565|  12.8k|    CONVERT_TO_DOUBLE(v, a);
  ------------------
  |  |  312|  12.8k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  12.8k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  12.8k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  12.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  12.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 8.31k, False: 4.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  12.8k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  21.1k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  12.8k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 298, False: 4.25k]
  |  |  ------------------
  |  |  315|  4.55k|        return obj;
  ------------------
  566|  12.5k|    CONVERT_TO_DOUBLE(w, b);
  ------------------
  |  |  312|  12.5k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  12.5k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  12.5k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  12.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  12.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 6.45k, False: 6.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  12.5k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  19.0k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  12.5k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 974, False: 5.14k]
  |  |  ------------------
  |  |  315|  6.11k|        return obj;
  ------------------
  567|  11.6k|    a = a * b;
  568|  11.6k|    return PyFloat_FromDouble(a);
  569|  12.5k|}
floatobject.c:float_rem:
  588|  6.91k|{
  589|  6.91k|    double vx, wx;
  590|  6.91k|    double mod;
  591|  6.91k|    CONVERT_TO_DOUBLE(v, vx);
  ------------------
  |  |  312|  6.91k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  6.91k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  6.91k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  6.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  6.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 2.58k, False: 4.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  6.91k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  9.49k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  6.91k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 115, False: 4.20k]
  |  |  ------------------
  |  |  315|  4.32k|        return obj;
  ------------------
  592|  6.79k|    CONVERT_TO_DOUBLE(w, wx);
  ------------------
  |  |  312|  6.79k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  6.79k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  6.79k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  6.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  6.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 4.27k, False: 2.52k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  6.79k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  11.0k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.27k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  6.79k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 43, False: 2.47k]
  |  |  ------------------
  |  |  315|  2.52k|        return obj;
  ------------------
  593|  6.75k|    if (wx == 0.0) {
  ------------------
  |  Branch (593:9): [True: 272, False: 6.48k]
  ------------------
  594|    272|        PyErr_SetString(PyExc_ZeroDivisionError,
  595|    272|                        "division by zero");
  596|    272|        return NULL;
  597|    272|    }
  598|  6.48k|    mod = fmod(vx, wx);
  599|  6.48k|    if (mod) {
  ------------------
  |  Branch (599:9): [True: 4.94k, False: 1.53k]
  ------------------
  600|       |        /* ensure the remainder has the same sign as the denominator */
  601|  4.94k|        if ((wx < 0) != (mod < 0)) {
  ------------------
  |  Branch (601:13): [True: 2.15k, False: 2.79k]
  ------------------
  602|  2.15k|            mod += wx;
  603|  2.15k|        }
  604|  4.94k|    }
  605|  1.53k|    else {
  606|       |        /* the remainder is zero, and in the presence of signed zeroes
  607|       |           fmod returns different results across platforms; ensure
  608|       |           it has the same sign as the denominator. */
  609|  1.53k|        mod = copysign(0.0, wx);
  610|  1.53k|    }
  611|  6.48k|    return PyFloat_FromDouble(mod);
  612|  6.75k|}
floatobject.c:_float_div_mod:
  616|  4.88k|{
  617|  4.88k|    double div;
  618|  4.88k|    *mod = fmod(vx, wx);
  619|       |    /* fmod is typically exact, so vx-mod is *mathematically* an
  620|       |       exact multiple of wx.  But this is fp arithmetic, and fp
  621|       |       vx - mod is an approximation; the result is that div may
  622|       |       not be an exact integral value after the division, although
  623|       |       it will always be very close to one.
  624|       |    */
  625|  4.88k|    div = (vx - *mod) / wx;
  626|  4.88k|    if (*mod) {
  ------------------
  |  Branch (626:9): [True: 2.66k, False: 2.22k]
  ------------------
  627|       |        /* ensure the remainder has the same sign as the denominator */
  628|  2.66k|        if ((wx < 0) != (*mod < 0)) {
  ------------------
  |  Branch (628:13): [True: 1.43k, False: 1.22k]
  ------------------
  629|  1.43k|            *mod += wx;
  630|  1.43k|            div -= 1.0;
  631|  1.43k|        }
  632|  2.66k|    }
  633|  2.22k|    else {
  634|       |        /* the remainder is zero, and in the presence of signed zeroes
  635|       |           fmod returns different results across platforms; ensure
  636|       |           it has the same sign as the denominator. */
  637|  2.22k|        *mod = copysign(0.0, wx);
  638|  2.22k|    }
  639|       |    /* snap quotient to nearest integral value */
  640|  4.88k|    if (div) {
  ------------------
  |  Branch (640:9): [True: 4.37k, False: 512]
  ------------------
  641|  4.37k|        *floordiv = floor(div);
  642|  4.37k|        if (div - *floordiv > 0.5) {
  ------------------
  |  Branch (642:13): [True: 482, False: 3.89k]
  ------------------
  643|    482|            *floordiv += 1.0;
  644|    482|        }
  645|  4.37k|    }
  646|    512|    else {
  647|       |        /* div is zero - get the same sign as the true quotient */
  648|    512|        *floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */
  649|    512|    }
  650|  4.88k|}
floatobject.c:float_pow:
  688|  21.2k|{
  689|  21.2k|    double iv, iw, ix;
  690|  21.2k|    int negate_result = 0;
  691|       |
  692|  21.2k|    if ((PyObject *)z != Py_None) {
  ------------------
  |  |  616|  21.2k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (692:9): [True: 0, False: 21.2k]
  ------------------
  693|      0|        PyErr_SetString(PyExc_TypeError, "pow() 3rd argument not "
  694|      0|            "allowed unless all arguments are integers");
  695|      0|        return NULL;
  696|      0|    }
  697|       |
  698|  21.2k|    CONVERT_TO_DOUBLE(v, iv);
  ------------------
  |  |  312|  21.2k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  21.2k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  21.2k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  21.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  21.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 14.5k, False: 6.63k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  21.2k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  35.8k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  14.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  14.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  21.2k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 192, False: 6.44k]
  |  |  ------------------
  |  |  315|  6.63k|        return obj;
  ------------------
  699|  21.0k|    CONVERT_TO_DOUBLE(w, iw);
  ------------------
  |  |  312|  21.0k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  21.0k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  21.0k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  21.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  21.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 4.50k, False: 16.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  21.0k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  25.5k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  21.0k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 10.1k, False: 6.42k]
  |  |  ------------------
  |  |  315|  16.5k|        return obj;
  ------------------
  700|       |
  701|       |    /* Sort out special cases here instead of relying on pow() */
  702|  10.9k|    if (iw == 0) {              /* v**0 is 1, even 0**0 */
  ------------------
  |  Branch (702:9): [True: 524, False: 10.4k]
  ------------------
  703|    524|        return PyFloat_FromDouble(1.0);
  704|    524|    }
  705|  10.4k|    if (isnan(iv)) {        /* nan**w = nan, unless w == 0 */
  ------------------
  |  Branch (705:9): [True: 0, False: 10.4k]
  ------------------
  706|      0|        return PyFloat_FromDouble(iv);
  707|      0|    }
  708|  10.4k|    if (isnan(iw)) {        /* v**nan = nan, unless v == 1; 1**nan = 1 */
  ------------------
  |  Branch (708:9): [True: 0, False: 10.4k]
  ------------------
  709|      0|        return PyFloat_FromDouble(iv == 1.0 ? 1.0 : iw);
  ------------------
  |  Branch (709:35): [True: 0, False: 0]
  ------------------
  710|      0|    }
  711|  10.4k|    if (isinf(iw)) {
  ------------------
  |  Branch (711:9): [True: 1.15k, False: 9.25k]
  ------------------
  712|       |        /* v**inf is: 0.0 if abs(v) < 1; 1.0 if abs(v) == 1; inf if
  713|       |         *     abs(v) > 1 (including case where v infinite)
  714|       |         *
  715|       |         * v**-inf is: inf if abs(v) < 1; 1.0 if abs(v) == 1; 0.0 if
  716|       |         *     abs(v) > 1 (including case where v infinite)
  717|       |         */
  718|  1.15k|        iv = fabs(iv);
  719|  1.15k|        if (iv == 1.0)
  ------------------
  |  Branch (719:13): [True: 469, False: 682]
  ------------------
  720|    469|            return PyFloat_FromDouble(1.0);
  721|    682|        else if ((iw > 0.0) == (iv > 1.0))
  ------------------
  |  Branch (721:18): [True: 521, False: 161]
  ------------------
  722|    521|            return PyFloat_FromDouble(fabs(iw)); /* return inf */
  723|    161|        else
  724|    161|            return PyFloat_FromDouble(0.0);
  725|  1.15k|    }
  726|  9.25k|    if (isinf(iv)) {
  ------------------
  |  Branch (726:9): [True: 2.90k, False: 6.35k]
  ------------------
  727|       |        /* (+-inf)**w is: inf for w positive, 0 for w negative; in
  728|       |         *     both cases, we need to add the appropriate sign if w is
  729|       |         *     an odd integer.
  730|       |         */
  731|  2.90k|        int iw_is_odd = DOUBLE_IS_ODD_INTEGER(iw);
  ------------------
  |  |  684|  2.90k|#define DOUBLE_IS_ODD_INTEGER(x) (fmod(fabs(x), 2.0) == 1.0)
  ------------------
  732|  2.90k|        if (iw > 0.0)
  ------------------
  |  Branch (732:13): [True: 1.62k, False: 1.27k]
  ------------------
  733|  1.62k|            return PyFloat_FromDouble(iw_is_odd ? iv : fabs(iv));
  ------------------
  |  Branch (733:39): [True: 487, False: 1.13k]
  ------------------
  734|  1.27k|        else
  735|  1.27k|            return PyFloat_FromDouble(iw_is_odd ?
  ------------------
  |  Branch (735:39): [True: 593, False: 683]
  ------------------
  736|    683|                                      copysign(0.0, iv) : 0.0);
  737|  2.90k|    }
  738|  6.35k|    if (iv == 0.0) {  /* 0**w is: 0 for w positive, 1 for w zero
  ------------------
  |  Branch (738:9): [True: 1.43k, False: 4.92k]
  ------------------
  739|       |                         (already dealt with above), and an error
  740|       |                         if w is negative. */
  741|  1.43k|        int iw_is_odd = DOUBLE_IS_ODD_INTEGER(iw);
  ------------------
  |  |  684|  1.43k|#define DOUBLE_IS_ODD_INTEGER(x) (fmod(fabs(x), 2.0) == 1.0)
  ------------------
  742|  1.43k|        if (iw < 0.0) {
  ------------------
  |  Branch (742:13): [True: 1.20k, False: 228]
  ------------------
  743|  1.20k|            PyErr_SetString(PyExc_ZeroDivisionError,
  744|  1.20k|                            "zero to a negative power");
  745|  1.20k|            return NULL;
  746|  1.20k|        }
  747|       |        /* use correct sign if iw is odd */
  748|    228|        return PyFloat_FromDouble(iw_is_odd ? iv : 0.0);
  ------------------
  |  Branch (748:35): [True: 155, False: 73]
  ------------------
  749|  1.43k|    }
  750|       |
  751|  4.92k|    if (iv < 0.0) {
  ------------------
  |  Branch (751:9): [True: 46, False: 4.87k]
  ------------------
  752|       |        /* Whether this is an error is a mess, and bumps into libm
  753|       |         * bugs so we have to figure it out ourselves.
  754|       |         */
  755|     46|        if (iw != floor(iw)) {
  ------------------
  |  Branch (755:13): [True: 24, False: 22]
  ------------------
  756|       |            /* Negative numbers raised to fractional powers
  757|       |             * become complex.
  758|       |             */
  759|     24|            return PyComplex_Type.tp_as_number->nb_power(v, w, z);
  760|     24|        }
  761|       |        /* iw is an exact integer, albeit perhaps a very large
  762|       |         * one.  Replace iv by its absolute value and remember
  763|       |         * to negate the pow result if iw is odd.
  764|       |         */
  765|     22|        iv = -iv;
  766|     22|        negate_result = DOUBLE_IS_ODD_INTEGER(iw);
  ------------------
  |  |  684|     22|#define DOUBLE_IS_ODD_INTEGER(x) (fmod(fabs(x), 2.0) == 1.0)
  ------------------
  767|     22|    }
  768|       |
  769|  4.89k|    if (iv == 1.0) { /* 1**w is 1, even 1**inf and 1**nan */
  ------------------
  |  Branch (769:9): [True: 562, False: 4.33k]
  ------------------
  770|       |        /* (-1) ** large_integer also ends up here.  Here's an
  771|       |         * extract from the comments for the previous
  772|       |         * implementation explaining why this special case is
  773|       |         * necessary:
  774|       |         *
  775|       |         * -1 raised to an exact integer should never be exceptional.
  776|       |         * Alas, some libms (chiefly glibc as of early 2003) return
  777|       |         * NaN and set EDOM on pow(-1, large_int) if the int doesn't
  778|       |         * happen to be representable in a *C* integer.  That's a
  779|       |         * bug.
  780|       |         */
  781|    562|        return PyFloat_FromDouble(negate_result ? -1.0 : 1.0);
  ------------------
  |  Branch (781:35): [True: 1, False: 561]
  ------------------
  782|    562|    }
  783|       |
  784|       |    /* Now iv and iw are finite, iw is nonzero, and iv is
  785|       |     * positive and not equal to 1.0.  We finally allow
  786|       |     * the platform pow to step in and do the rest.
  787|       |     */
  788|  4.89k|    errno = 0;
  789|  4.33k|    ix = pow(iv, iw);
  790|  4.33k|    _Py_ADJUST_ERANGE1(ix);
  791|  4.33k|    if (negate_result)
  ------------------
  |  Branch (791:9): [True: 3, False: 4.33k]
  ------------------
  792|      3|        ix = -ix;
  793|       |
  794|  4.33k|    if (errno != 0) {
  ------------------
  |  Branch (794:9): [True: 1.43k, False: 2.90k]
  ------------------
  795|       |        /* We don't expect any errno value other than ERANGE, but
  796|       |         * the range of libm bugs appears unbounded.
  797|       |         */
  798|  1.43k|        PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError :
  ------------------
  |  Branch (798:28): [True: 1.43k, False: 0]
  ------------------
  799|  1.43k|                             PyExc_ValueError);
  800|  1.43k|        return NULL;
  801|  1.43k|    }
  802|  2.90k|    return PyFloat_FromDouble(ix);
  803|  4.33k|}
floatobject.c:float_neg:
  809|  6.72k|{
  810|  6.72k|    PyFloatObject *v = _PyFloat_CAST(op);
  ------------------
  |  |   11|  6.72k|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|  6.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (810:24): [True: 6.72k, False: 0]
  ------------------
  811|      0|    return PyFloat_FromDouble(-v->ob_fval);
  812|  6.72k|}
floatobject.c:float_float:
 1070|  5.99k|{
 1071|  5.99k|    if (PyFloat_CheckExact(v)) {
  ------------------
  |  |   17|  5.99k|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|  5.99k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.99k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.99k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 5.99k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|  5.99k|        return Py_NewRef(v);
  ------------------
  |  |  550|  5.99k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  5.99k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.99k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|  5.99k|    }
 1074|      0|    else {
 1075|      0|        return PyFloat_FromDouble(((PyFloatObject *)v)->ob_fval);
 1076|      0|    }
 1077|  5.99k|}
floatobject.c:float_bool:
  823|    359|{
  824|    359|    PyFloatObject *v = _PyFloat_CAST(op);
  ------------------
  |  |   11|    359|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|    359|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (824:24): [True: 359, False: 0]
  ------------------
  825|      0|    return v->ob_fval != 0.0;
  826|    359|}
floatobject.c:float___trunc___impl:
  864|     93|{
  865|     93|    return PyLong_FromDouble(PyFloat_AS_DOUBLE(self));
  ------------------
  |  |   18|     93|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  866|     93|}
floatobject.c:float_floor_div:
  669|  5.25k|{
  670|  5.25k|    double vx, wx;
  671|  5.25k|    double mod, floordiv;
  672|  5.25k|    CONVERT_TO_DOUBLE(v, vx);
  ------------------
  |  |  312|  5.25k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  5.25k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  5.25k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  5.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  5.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 4.03k, False: 1.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  5.25k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  9.28k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  5.25k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 242, False: 982]
  |  |  ------------------
  |  |  315|  1.22k|        return obj;
  ------------------
  673|  5.01k|    CONVERT_TO_DOUBLE(w, wx);
  ------------------
  |  |  312|  5.01k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  5.01k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  5.01k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  5.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  5.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 1.13k, False: 3.88k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  5.01k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  6.14k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  5.01k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 36, False: 3.84k]
  |  |  ------------------
  |  |  315|  3.88k|        return obj;
  ------------------
  674|  4.97k|    if (wx == 0.0) {
  ------------------
  |  Branch (674:9): [True: 93, False: 4.88k]
  ------------------
  675|     93|        PyErr_SetString(PyExc_ZeroDivisionError, "division by zero");
  676|     93|        return NULL;
  677|     93|    }
  678|  4.88k|    _float_div_mod(vx, wx, &floordiv, &mod);
  679|  4.88k|    return PyFloat_FromDouble(floordiv);
  680|  4.97k|}
floatobject.c:float_div:
  573|  18.2k|{
  574|  18.2k|    double a,b;
  575|  18.2k|    CONVERT_TO_DOUBLE(v, a);
  ------------------
  |  |  312|  18.2k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  18.2k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  18.2k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  18.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  18.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 11.1k, False: 7.09k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  18.2k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  29.4k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  11.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  18.2k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 103, False: 6.98k]
  |  |  ------------------
  |  |  315|  7.09k|        return obj;
  ------------------
  576|  18.1k|    CONVERT_TO_DOUBLE(w, b);
  ------------------
  |  |  312|  18.1k|    if (PyFloat_Check(obj))                                 \
  |  |  ------------------
  |  |  |  |   16|  18.1k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  18.1k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 10.4k, False: 7.74k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  313|  18.1k|        dbl = PyFloat_AS_DOUBLE(obj);                       \
  |  |  ------------------
  |  |  |  |   18|  28.6k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  10.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  10.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  18.1k|    else if (_Py_convert_int_to_double(&(obj), &(dbl)) < 0) \
  |  |  ------------------
  |  |  |  Branch (314:14): [True: 3.21k, False: 4.53k]
  |  |  ------------------
  |  |  315|  7.74k|        return obj;
  ------------------
  577|  14.9k|    if (b == 0.0) {
  ------------------
  |  Branch (577:9): [True: 5.04k, False: 9.92k]
  ------------------
  578|  5.04k|        PyErr_SetString(PyExc_ZeroDivisionError,
  579|  5.04k|                        "division by zero");
  580|  5.04k|        return NULL;
  581|  5.04k|    }
  582|  9.92k|    a = a / b;
  583|  9.92k|    return PyFloat_FromDouble(a);
  584|  14.9k|}
floatobject.c:float_hash:
  536|   102M|{
  537|   102M|    PyFloatObject *v = _PyFloat_CAST(op);
  ------------------
  |  |   11|   102M|    (assert(PyFloat_Check(op)), _Py_CAST(PyFloatObject*, op))
  |  |  ------------------
  |  |  |  |   37|   102M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (537:24): [True: 102M, False: 0]
  ------------------
  538|      0|    return _Py_HashDouble(op, v->ob_fval);
  539|   102M|}
floatobject.c:float_richcompare:
  373|   194k|{
  374|   194k|    double i, j;
  375|   194k|    int r = 0;
  376|       |
  377|   194k|    assert(PyFloat_Check(v));
  ------------------
  |  Branch (377:5): [True: 194k, False: 0]
  ------------------
  378|   194k|    i = PyFloat_AS_DOUBLE(v);
  ------------------
  |  |   18|   194k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   194k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   194k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|       |
  380|       |    /* Switch on the type of w.  Set i and j to doubles to be compared,
  381|       |     * and op to the richcomp to use.
  382|       |     */
  383|   194k|    if (PyFloat_Check(w))
  ------------------
  |  |   16|   194k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|   194k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   194k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   194k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 192k, False: 1.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  384|   192k|        j = PyFloat_AS_DOUBLE(w);
  ------------------
  |  |   18|   192k|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   192k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   192k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|       |
  386|  1.26k|    else if (!isfinite(i)) {
  ------------------
  |  Branch (386:14): [True: 0, False: 1.26k]
  ------------------
  387|      0|        if (PyLong_Check(w))
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|       |            /* If i is an infinity, its magnitude exceeds any
  389|       |             * finite integer, so it doesn't matter which int we
  390|       |             * compare i with.  If i is a NaN, similarly.
  391|       |             */
  392|      0|            j = 0.0;
  393|      0|        else
  394|      0|            goto Unimplemented;
  395|      0|    }
  396|       |
  397|  1.26k|    else if (PyLong_Check(w)) {
  ------------------
  |  |   13|  1.26k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.26k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 1.26k, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  398|  1.26k|        int vsign = i == 0.0 ? 0 : i < 0.0 ? -1 : 1;
  ------------------
  |  Branch (398:21): [True: 28, False: 1.23k]
  |  Branch (398:36): [True: 1.20k, False: 30]
  ------------------
  399|  1.26k|        int wsign;
  400|  1.26k|        int exponent;
  401|       |
  402|  1.26k|        (void)PyLong_GetSign(w, &wsign);
  403|  1.26k|        if (vsign != wsign) {
  ------------------
  |  Branch (403:13): [True: 9, False: 1.25k]
  ------------------
  404|       |            /* Magnitudes are irrelevant -- the signs alone
  405|       |             * determine the outcome.
  406|       |             */
  407|      9|            i = (double)vsign;
  408|      9|            j = (double)wsign;
  409|      9|            goto Compare;
  410|      9|        }
  411|       |        /* The signs are the same. */
  412|       |        /* Convert w to a double if it fits.  In particular, 0 fits. */
  413|  1.25k|        int64_t nbits64 = _PyLong_NumBits(w);
  414|  1.25k|        assert(nbits64 >= 0);
  ------------------
  |  Branch (414:9): [True: 1.25k, False: 0]
  ------------------
  415|  1.25k|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (415:9): [True: 1.25k, False: 0]
  ------------------
  416|  1.25k|        if (nbits64 > DBL_MAX_EXP) {
  ------------------
  |  Branch (416:13): [True: 0, False: 1.25k]
  ------------------
  417|       |            /* This Python integer is larger than any finite C double.
  418|       |             * Replace with little doubles
  419|       |             * that give the same outcome -- w is so large that
  420|       |             * its magnitude must exceed the magnitude of any
  421|       |             * finite float.
  422|       |             */
  423|      0|            i = (double)vsign;
  424|      0|            assert(wsign != 0);
  ------------------
  |  Branch (424:13): [True: 0, False: 0]
  ------------------
  425|      0|            j = wsign * 2.0;
  426|      0|            goto Compare;
  427|      0|        }
  428|  1.25k|        int nbits = (int)nbits64;
  429|  1.25k|        if (nbits <= 48) {
  ------------------
  |  Branch (429:13): [True: 843, False: 409]
  ------------------
  430|    843|            j = PyLong_AsDouble(w);
  431|       |            /* It's impossible that <= 48 bits overflowed. */
  432|    843|            assert(j != -1.0 || ! PyErr_Occurred());
  ------------------
  |  Branch (432:13): [True: 568, False: 275]
  |  Branch (432:13): [True: 275, False: 0]
  ------------------
  433|    843|            goto Compare;
  434|    843|        }
  435|  1.25k|        assert(wsign != 0); /* else nbits was 0 */
  ------------------
  |  Branch (435:9): [True: 409, False: 0]
  ------------------
  436|    409|        assert(vsign != 0); /* if vsign were 0, then since wsign is
  ------------------
  |  Branch (436:9): [True: 409, False: 0]
  ------------------
  437|       |                             * not 0, we would have taken the
  438|       |                             * vsign != wsign branch at the start */
  439|    409|        (void) frexp(i, &exponent);
  440|       |        /* exponent is the # of bits in v before the radix point;
  441|       |         * we know that nbits (the # of bits in w) > 48 at this point
  442|       |         */
  443|    409|        if (exponent < nbits) {
  ------------------
  |  Branch (443:13): [True: 227, False: 182]
  ------------------
  444|    227|            j = i;
  445|    227|            i = 0.0;
  446|    227|            goto Compare;
  447|    227|        }
  448|    182|        if (exponent > nbits) {
  ------------------
  |  Branch (448:13): [True: 113, False: 69]
  ------------------
  449|    113|            j = 0.0;
  450|    113|            goto Compare;
  451|    113|        }
  452|       |        /* v and w have the same number of bits before the radix
  453|       |         * point.  Construct an int from the integer part of v and
  454|       |         * update op if necessary, so comparing two ints has the same outcome.
  455|       |         */
  456|     69|        {
  457|     69|            double fracpart;
  458|     69|            double intpart;
  459|     69|            PyObject *result = NULL;
  460|     69|            PyObject *vv = NULL;
  461|       |
  462|     69|            fracpart = modf(i, &intpart);
  463|     69|            if (fracpart != 0.0) {
  ------------------
  |  Branch (463:17): [True: 0, False: 69]
  ------------------
  464|      0|                switch (op) {
  ------------------
  |  Branch (464:25): [True: 0, False: 0]
  ------------------
  465|       |                    /* Non-integer float never equals to an int. */
  466|      0|                    case Py_EQ:
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
  |  Branch (466:21): [True: 0, False: 0]
  ------------------
  467|      0|                        Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  468|      0|                    case Py_NE:
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (468:21): [True: 0, False: 0]
  ------------------
  469|      0|                        Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|       |                    /* For non-integer float, v <= w <=> v < w.
  471|       |                     * If v > 0: trunc(v) < v < trunc(v) + 1
  472|       |                     *   v < w => trunc(v) < w
  473|       |                     *   trunc(v) < w => trunc(v) + 1 <= w => v < w
  474|       |                     * If v < 0: trunc(v) - 1 < v < trunc(v)
  475|       |                     *   v < w => trunc(v) - 1 < w => trunc(v) <= w
  476|       |                     *   trunc(v) <= w => v < w
  477|       |                     */
  478|      0|                    case Py_LT:
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  |  Branch (478:21): [True: 0, False: 0]
  ------------------
  479|      0|                    case Py_LE:
  ------------------
  |  |  653|      0|#define Py_LE 1
  ------------------
  |  Branch (479:21): [True: 0, False: 0]
  ------------------
  480|      0|                        op = vsign > 0 ? Py_LT : Py_LE;
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
                                      op = vsign > 0 ? Py_LT : Py_LE;
  ------------------
  |  |  653|      0|#define Py_LE 1
  ------------------
  |  Branch (480:30): [True: 0, False: 0]
  ------------------
  481|      0|                        break;
  482|       |                    /* The same as above, but with opposite directions. */
  483|      0|                    case Py_GT:
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  |  Branch (483:21): [True: 0, False: 0]
  ------------------
  484|      0|                    case Py_GE:
  ------------------
  |  |  657|      0|#define Py_GE 5
  ------------------
  |  Branch (484:21): [True: 0, False: 0]
  ------------------
  485|      0|                        op = vsign > 0 ? Py_GE : Py_GT;
  ------------------
  |  |  657|      0|#define Py_GE 5
  ------------------
                                      op = vsign > 0 ? Py_GE : Py_GT;
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  |  Branch (485:30): [True: 0, False: 0]
  ------------------
  486|      0|                        break;
  487|      0|                }
  488|      0|            }
  489|       |
  490|     69|            vv = PyLong_FromDouble(intpart);
  491|     69|            if (vv == NULL)
  ------------------
  |  Branch (491:17): [True: 0, False: 69]
  ------------------
  492|      0|                goto Error;
  493|       |
  494|     69|            r = PyObject_RichCompareBool(vv, w, op);
  495|     69|            if (r < 0)
  ------------------
  |  Branch (495:17): [True: 0, False: 69]
  ------------------
  496|      0|                goto Error;
  497|     69|            result = PyBool_FromLong(r);
  498|     69|         Error:
  499|     69|            Py_XDECREF(vv);
  ------------------
  |  |  524|     69|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  500|     69|            return result;
  501|     69|        }
  502|     69|    } /* else if (PyLong_Check(w)) */
  503|       |
  504|      1|    else        /* w isn't float or int */
  505|      1|        goto Unimplemented;
  506|       |
  507|   194k| Compare:
  508|   194k|    switch (op) {
  ------------------
  |  Branch (508:13): [True: 194k, False: 0]
  ------------------
  509|   194k|    case Py_EQ:
  ------------------
  |  |  654|   194k|#define Py_EQ 2
  ------------------
  |  Branch (509:5): [True: 194k, False: 15]
  ------------------
  510|   194k|        r = i == j;
  511|   194k|        break;
  512|     15|    case Py_NE:
  ------------------
  |  |  655|     15|#define Py_NE 3
  ------------------
  |  Branch (512:5): [True: 15, False: 194k]
  ------------------
  513|     15|        r = i != j;
  514|     15|        break;
  515|      0|    case Py_LE:
  ------------------
  |  |  653|      0|#define Py_LE 1
  ------------------
  |  Branch (515:5): [True: 0, False: 194k]
  ------------------
  516|      0|        r = i <= j;
  517|      0|        break;
  518|      0|    case Py_GE:
  ------------------
  |  |  657|      0|#define Py_GE 5
  ------------------
  |  Branch (518:5): [True: 0, False: 194k]
  ------------------
  519|      0|        r = i >= j;
  520|      0|        break;
  521|      0|    case Py_LT:
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  |  Branch (521:5): [True: 0, False: 194k]
  ------------------
  522|      0|        r = i < j;
  523|      0|        break;
  524|      0|    case Py_GT:
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  |  Branch (524:5): [True: 0, False: 194k]
  ------------------
  525|      0|        r = i > j;
  526|      0|        break;
  527|   194k|    }
  528|   194k|    return PyBool_FromLong(r);
  529|       |
  530|      1| Unimplemented:
  531|      1|    Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      1|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      1|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  532|   194k|}
floatobject.c:float_fromhex_impl:
 1227|      1|{
 1228|      1|    PyObject *result;
 1229|      1|    double x;
 1230|      1|    long exp, top_exp, lsb, key_digit;
 1231|      1|    const char *s, *coeff_start, *s_store, *coeff_end, *exp_start, *s_end;
 1232|      1|    int half_eps, digit, round_up, negate=0;
 1233|      1|    Py_ssize_t length, ndigits, fdigits, i;
 1234|       |
 1235|       |    /*
 1236|       |     * For the sake of simplicity and correctness, we impose an artificial
 1237|       |     * limit on ndigits, the total number of hex digits in the coefficient
 1238|       |     * The limit is chosen to ensure that, writing exp for the exponent,
 1239|       |     *
 1240|       |     *   (1) if exp > LONG_MAX/2 then the value of the hex string is
 1241|       |     *   guaranteed to overflow (provided it's nonzero)
 1242|       |     *
 1243|       |     *   (2) if exp < LONG_MIN/2 then the value of the hex string is
 1244|       |     *   guaranteed to underflow to 0.
 1245|       |     *
 1246|       |     *   (3) if LONG_MIN/2 <= exp <= LONG_MAX/2 then there's no danger of
 1247|       |     *   overflow in the calculation of exp and top_exp below.
 1248|       |     *
 1249|       |     * More specifically, ndigits is assumed to satisfy the following
 1250|       |     * inequalities:
 1251|       |     *
 1252|       |     *   4*ndigits <= DBL_MIN_EXP - DBL_MANT_DIG - LONG_MIN/2
 1253|       |     *   4*ndigits <= LONG_MAX/2 + 1 - DBL_MAX_EXP
 1254|       |     *
 1255|       |     * If either of these inequalities is not satisfied, a ValueError is
 1256|       |     * raised.  Otherwise, write x for the value of the hex string, and
 1257|       |     * assume x is nonzero.  Then
 1258|       |     *
 1259|       |     *   2**(exp-4*ndigits) <= |x| < 2**(exp+4*ndigits).
 1260|       |     *
 1261|       |     * Now if exp > LONG_MAX/2 then:
 1262|       |     *
 1263|       |     *   exp - 4*ndigits >= LONG_MAX/2 + 1 - (LONG_MAX/2 + 1 - DBL_MAX_EXP)
 1264|       |     *                    = DBL_MAX_EXP
 1265|       |     *
 1266|       |     * so |x| >= 2**DBL_MAX_EXP, which is too large to be stored in C
 1267|       |     * double, so overflows.  If exp < LONG_MIN/2, then
 1268|       |     *
 1269|       |     *   exp + 4*ndigits <= LONG_MIN/2 - 1 + (
 1270|       |     *                      DBL_MIN_EXP - DBL_MANT_DIG - LONG_MIN/2)
 1271|       |     *                    = DBL_MIN_EXP - DBL_MANT_DIG - 1
 1272|       |     *
 1273|       |     * and so |x| < 2**(DBL_MIN_EXP-DBL_MANT_DIG-1), hence underflows to 0
 1274|       |     * when converted to a C double.
 1275|       |     *
 1276|       |     * It's easy to show that if LONG_MIN/2 <= exp <= LONG_MAX/2 then both
 1277|       |     * exp+4*ndigits and exp-4*ndigits are within the range of a long.
 1278|       |     */
 1279|       |
 1280|      1|    s = PyUnicode_AsUTF8AndSize(string, &length);
 1281|      1|    if (s == NULL)
  ------------------
  |  Branch (1281:9): [True: 0, False: 1]
  ------------------
 1282|      0|        return NULL;
 1283|      1|    s_end = s + length;
 1284|       |
 1285|       |    /********************
 1286|       |     * Parse the string *
 1287|       |     ********************/
 1288|       |
 1289|       |    /* leading whitespace */
 1290|      1|    while (Py_ISSPACE(*s))
  ------------------
  |  |   27|      1|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|      1|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|      1|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 1291|      0|        s++;
 1292|       |
 1293|       |    /* infinities and nans */
 1294|      1|    x = _Py_parse_inf_or_nan(s, (char **)&coeff_end);
 1295|      1|    if (coeff_end != s) {
  ------------------
  |  Branch (1295:9): [True: 0, False: 1]
  ------------------
 1296|      0|        s = coeff_end;
 1297|      0|        goto finished;
 1298|      0|    }
 1299|       |
 1300|       |    /* optional sign */
 1301|      1|    if (*s == '-') {
  ------------------
  |  Branch (1301:9): [True: 0, False: 1]
  ------------------
 1302|      0|        s++;
 1303|      0|        negate = 1;
 1304|      0|    }
 1305|      1|    else if (*s == '+')
  ------------------
  |  Branch (1305:14): [True: 0, False: 1]
  ------------------
 1306|      0|        s++;
 1307|       |
 1308|       |    /* [0x] */
 1309|      1|    s_store = s;
 1310|      1|    if (*s == '0') {
  ------------------
  |  Branch (1310:9): [True: 1, False: 0]
  ------------------
 1311|      1|        s++;
 1312|      1|        if (*s == 'x' || *s == 'X')
  ------------------
  |  Branch (1312:13): [True: 1, False: 0]
  |  Branch (1312:26): [True: 0, False: 0]
  ------------------
 1313|      1|            s++;
 1314|      0|        else
 1315|      0|            s = s_store;
 1316|      1|    }
 1317|       |
 1318|       |    /* coefficient: <integer> [. <fraction>] */
 1319|      1|    coeff_start = s;
 1320|      2|    while (hex_from_char(*s) >= 0)
  ------------------
  |  Branch (1320:12): [True: 1, False: 1]
  ------------------
 1321|      1|        s++;
 1322|      1|    s_store = s;
 1323|      1|    if (*s == '.') {
  ------------------
  |  Branch (1323:9): [True: 1, False: 0]
  ------------------
 1324|      1|        s++;
 1325|     14|        while (hex_from_char(*s) >= 0)
  ------------------
  |  Branch (1325:16): [True: 13, False: 1]
  ------------------
 1326|     13|            s++;
 1327|      1|        coeff_end = s-1;
 1328|      1|    }
 1329|      0|    else
 1330|      0|        coeff_end = s;
 1331|       |
 1332|       |    /* ndigits = total # of hex digits; fdigits = # after point */
 1333|      1|    ndigits = coeff_end - coeff_start;
 1334|      1|    fdigits = coeff_end - s_store;
 1335|      1|    if (ndigits == 0)
  ------------------
  |  Branch (1335:9): [True: 0, False: 1]
  ------------------
 1336|      0|        goto parse_error;
 1337|      1|    if (ndigits > Py_MIN(DBL_MIN_EXP - DBL_MANT_DIG - LONG_MIN/2,
  ------------------
  |  |  120|      1|       __extension__ \
  |  |  121|      1|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      1|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      1|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1337:9): [True: 0, False: 1]
  ------------------
 1338|      1|                         LONG_MAX/2 + 1 - DBL_MAX_EXP)/4)
 1339|      0|        goto insane_length_error;
 1340|       |
 1341|       |    /* [p <exponent>] */
 1342|      1|    if (*s == 'p' || *s == 'P') {
  ------------------
  |  Branch (1342:9): [True: 1, False: 0]
  |  Branch (1342:22): [True: 0, False: 0]
  ------------------
 1343|      1|        s++;
 1344|      1|        exp_start = s;
 1345|      1|        if (*s == '-' || *s == '+')
  ------------------
  |  Branch (1345:13): [True: 1, False: 0]
  |  Branch (1345:26): [True: 0, False: 0]
  ------------------
 1346|      1|            s++;
 1347|      1|        if (!('0' <= *s && *s <= '9'))
  ------------------
  |  Branch (1347:15): [True: 1, False: 0]
  |  Branch (1347:28): [True: 1, False: 0]
  ------------------
 1348|      0|            goto parse_error;
 1349|      1|        s++;
 1350|      1|        while ('0' <= *s && *s <= '9')
  ------------------
  |  Branch (1350:16): [True: 0, False: 1]
  |  Branch (1350:29): [True: 0, False: 0]
  ------------------
 1351|      0|            s++;
 1352|      1|        exp = strtol(exp_start, NULL, 10);
 1353|      1|    }
 1354|      0|    else
 1355|      0|        exp = 0;
 1356|       |
 1357|       |/* for 0 <= j < ndigits, HEX_DIGIT(j) gives the jth most significant digit */
 1358|      1|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
 1359|      1|                     coeff_end-(j) :                                    \
 1360|      1|                     coeff_end-1-(j)))
 1361|       |
 1362|       |    /*******************************************
 1363|       |     * Compute rounded value of the hex string *
 1364|       |     *******************************************/
 1365|       |
 1366|       |    /* Discard leading zeros, and catch extreme overflow and underflow */
 1367|      1|    while (ndigits > 0 && HEX_DIGIT(ndigits-1) == 0)
  ------------------
  |  | 1358|      1|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 0, False: 1]
  |  |  ------------------
  |  | 1359|      1|                     coeff_end-(j) :                                    \
  |  | 1360|      1|                     coeff_end-1-(j)))
  ------------------
  |  Branch (1367:12): [True: 1, False: 0]
  |  Branch (1367:27): [True: 0, False: 1]
  ------------------
 1368|      0|        ndigits--;
 1369|      1|    if (ndigits == 0 || exp < LONG_MIN/2) {
  ------------------
  |  Branch (1369:9): [True: 0, False: 1]
  |  Branch (1369:25): [True: 0, False: 1]
  ------------------
 1370|      0|        x = 0.0;
 1371|      0|        goto finished;
 1372|      0|    }
 1373|      1|    if (exp > LONG_MAX/2)
  ------------------
  |  Branch (1373:9): [True: 0, False: 1]
  ------------------
 1374|      0|        goto overflow_error;
 1375|       |
 1376|       |    /* Adjust exponent for fractional part. */
 1377|      1|    exp = exp - 4*((long)fdigits);
 1378|       |
 1379|       |    /* top_exp = 1 more than exponent of most sig. bit of coefficient */
 1380|      1|    top_exp = exp + 4*((long)ndigits - 1);
 1381|      2|    for (digit = HEX_DIGIT(ndigits-1); digit != 0; digit /= 2)
  ------------------
  |  | 1358|      1|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 0, False: 1]
  |  |  ------------------
  |  | 1359|      1|                     coeff_end-(j) :                                    \
  |  | 1360|      1|                     coeff_end-1-(j)))
  ------------------
  |  Branch (1381:40): [True: 1, False: 1]
  ------------------
 1382|      1|        top_exp++;
 1383|       |
 1384|       |    /* catch almost all nonextreme cases of overflow and underflow here */
 1385|      1|    if (top_exp < DBL_MIN_EXP - DBL_MANT_DIG) {
  ------------------
  |  Branch (1385:9): [True: 0, False: 1]
  ------------------
 1386|      0|        x = 0.0;
 1387|      0|        goto finished;
 1388|      0|    }
 1389|      1|    if (top_exp > DBL_MAX_EXP)
  ------------------
  |  Branch (1389:9): [True: 0, False: 1]
  ------------------
 1390|      0|        goto overflow_error;
 1391|       |
 1392|       |    /* lsb = exponent of least significant bit of the *rounded* value.
 1393|       |       This is top_exp - DBL_MANT_DIG unless result is subnormal. */
 1394|      1|    lsb = Py_MAX(top_exp, (long)DBL_MIN_EXP) - DBL_MANT_DIG;
  ------------------
  |  |  126|      1|       __extension__ \
  |  |  127|      1|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      1|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      1|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 1395|       |
 1396|      1|    x = 0.0;
 1397|      1|    if (exp >= lsb) {
  ------------------
  |  Branch (1397:9): [True: 1, False: 0]
  ------------------
 1398|       |        /* no rounding required */
 1399|     15|        for (i = ndigits-1; i >= 0; i--)
  ------------------
  |  Branch (1399:29): [True: 14, False: 1]
  ------------------
 1400|     14|            x = 16.0*x + HEX_DIGIT(i);
  ------------------
  |  | 1358|     14|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 13, False: 1]
  |  |  ------------------
  |  | 1359|     14|                     coeff_end-(j) :                                    \
  |  | 1360|     14|                     coeff_end-1-(j)))
  ------------------
 1401|      1|        x = ldexp(x, (int)(exp));
 1402|      1|        goto finished;
 1403|      1|    }
 1404|       |    /* rounding required.  key_digit is the index of the hex digit
 1405|       |       containing the first bit to be rounded away. */
 1406|      0|    half_eps = 1 << (int)((lsb - exp - 1) % 4);
 1407|      0|    key_digit = (lsb - exp - 1) / 4;
 1408|      0|    for (i = ndigits-1; i > key_digit; i--)
  ------------------
  |  Branch (1408:25): [True: 0, False: 0]
  ------------------
 1409|      0|        x = 16.0*x + HEX_DIGIT(i);
  ------------------
  |  | 1358|      0|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 0, False: 0]
  |  |  ------------------
  |  | 1359|      0|                     coeff_end-(j) :                                    \
  |  | 1360|      0|                     coeff_end-1-(j)))
  ------------------
 1410|      0|    digit = HEX_DIGIT(key_digit);
  ------------------
  |  | 1358|      0|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 0, False: 0]
  |  |  ------------------
  |  | 1359|      0|                     coeff_end-(j) :                                    \
  |  | 1360|      0|                     coeff_end-1-(j)))
  ------------------
 1411|      0|    x = 16.0*x + (double)(digit & (16-2*half_eps));
 1412|       |
 1413|       |    /* round-half-even: round up if bit lsb-1 is 1 and at least one of
 1414|       |       bits lsb, lsb-2, lsb-3, lsb-4, ... is 1. */
 1415|      0|    if ((digit & half_eps) != 0) {
  ------------------
  |  Branch (1415:9): [True: 0, False: 0]
  ------------------
 1416|      0|        round_up = 0;
 1417|      0|        if ((digit & (3*half_eps-1)) != 0 || (half_eps == 8 &&
  ------------------
  |  Branch (1417:13): [True: 0, False: 0]
  |  Branch (1417:47): [True: 0, False: 0]
  ------------------
 1418|      0|                key_digit+1 < ndigits && (HEX_DIGIT(key_digit+1) & 1) != 0))
  ------------------
  |  | 1358|      0|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 0, False: 0]
  |  |  ------------------
  |  | 1359|      0|                     coeff_end-(j) :                                    \
  |  | 1360|      0|                     coeff_end-1-(j)))
  ------------------
  |  Branch (1418:17): [True: 0, False: 0]
  |  Branch (1418:42): [True: 0, False: 0]
  ------------------
 1419|      0|            round_up = 1;
 1420|      0|        else
 1421|      0|            for (i = key_digit-1; i >= 0; i--)
  ------------------
  |  Branch (1421:35): [True: 0, False: 0]
  ------------------
 1422|      0|                if (HEX_DIGIT(i) != 0) {
  ------------------
  |  | 1358|      0|#define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ?            \
  |  |  ------------------
  |  |  |  Branch (1358:38): [True: 0, False: 0]
  |  |  ------------------
  |  | 1359|      0|                     coeff_end-(j) :                                    \
  |  | 1360|      0|                     coeff_end-1-(j)))
  ------------------
  |  Branch (1422:21): [True: 0, False: 0]
  ------------------
 1423|      0|                    round_up = 1;
 1424|      0|                    break;
 1425|      0|                }
 1426|      0|        if (round_up) {
  ------------------
  |  Branch (1426:13): [True: 0, False: 0]
  ------------------
 1427|      0|            x += 2*half_eps;
 1428|      0|            if (top_exp == DBL_MAX_EXP &&
  ------------------
  |  Branch (1428:17): [True: 0, False: 0]
  ------------------
 1429|      0|                x == ldexp((double)(2*half_eps), DBL_MANT_DIG))
  ------------------
  |  Branch (1429:17): [True: 0, False: 0]
  ------------------
 1430|       |                /* overflow corner case: pre-rounded value <
 1431|       |                   2**DBL_MAX_EXP; rounded=2**DBL_MAX_EXP. */
 1432|      0|                goto overflow_error;
 1433|      0|        }
 1434|      0|    }
 1435|      0|    x = ldexp(x, (int)(exp+4*key_digit));
 1436|       |
 1437|      1|  finished:
 1438|       |    /* optional trailing whitespace leading to the end of the string */
 1439|      1|    while (Py_ISSPACE(*s))
  ------------------
  |  |   27|      1|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|      1|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|      1|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 1440|      0|        s++;
 1441|      1|    if (s != s_end)
  ------------------
  |  Branch (1441:9): [True: 0, False: 1]
  ------------------
 1442|      0|        goto parse_error;
 1443|      1|    result = PyFloat_FromDouble(negate ? -x : x);
  ------------------
  |  Branch (1443:33): [True: 0, False: 1]
  ------------------
 1444|      1|    if (type != &PyFloat_Type && result != NULL) {
  ------------------
  |  Branch (1444:9): [True: 0, False: 1]
  |  Branch (1444:34): [True: 0, False: 0]
  ------------------
 1445|      0|        Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1446|      0|    }
 1447|      1|    return result;
 1448|       |
 1449|      0|  overflow_error:
 1450|      0|    PyErr_SetString(PyExc_OverflowError,
 1451|      0|                    "hexadecimal value too large to represent as a float");
 1452|      0|    return NULL;
 1453|       |
 1454|      0|  parse_error:
 1455|      0|    PyErr_SetString(PyExc_ValueError,
 1456|      0|                    "invalid hexadecimal floating-point string");
 1457|      0|    return NULL;
 1458|       |
 1459|      0|  insane_length_error:
 1460|      0|    PyErr_SetString(PyExc_ValueError,
 1461|      0|                    "hexadecimal string too long to convert");
 1462|       |    return NULL;
 1463|      1|}
floatobject.c:hex_from_char:
 1132|     32|hex_from_char(unsigned char c) {
 1133|     32|    return _CHAR_TO_HEX[c];
 1134|     32|}

_PyFrameLocalsProxy_New:
 1025|      2|{
 1026|      2|    PyObject* args = PyTuple_Pack(1, frame);
 1027|      2|    if (args == NULL) {
  ------------------
  |  Branch (1027:9): [True: 0, False: 2]
  ------------------
 1028|      0|        return NULL;
 1029|      0|    }
 1030|       |
 1031|      2|    PyObject* proxy = framelocalsproxy_new(&PyFrameLocalsProxy_Type, args, NULL);
 1032|      2|    Py_DECREF(args);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|      2|    return proxy;
 1034|      2|}
_PyFrame_New_NoTrack:
 2192|  23.1k|{
 2193|  23.1k|    CALL_STAT_INC(frame_objects_created);
  ------------------
  |  |   76|  23.1k|#define CALL_STAT_INC(name) ((void)0)
  ------------------
 2194|  23.1k|    int slots = code->co_nlocalsplus + code->co_stacksize;
 2195|  23.1k|    PyFrameObject *f = PyObject_GC_NewVar(PyFrameObject, &PyFrame_Type, slots);
  ------------------
  |  |  183|  23.1k|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|  23.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2196|  23.1k|    if (f == NULL) {
  ------------------
  |  Branch (2196:9): [True: 0, False: 23.1k]
  ------------------
 2197|      0|        return NULL;
 2198|      0|    }
 2199|  23.1k|    f->f_back = NULL;
 2200|  23.1k|    f->f_trace = NULL;
 2201|  23.1k|    f->f_trace_lines = 1;
 2202|  23.1k|    f->f_trace_opcodes = 0;
 2203|  23.1k|    f->f_lineno = 0;
 2204|  23.1k|    f->f_extra_locals = NULL;
 2205|  23.1k|    f->f_locals_cache = NULL;
 2206|  23.1k|    f->f_overwritten_fast_locals = NULL;
 2207|       |    f->f_weakreflist = NULL;
 2208|  23.1k|    return f;
 2209|  23.1k|}
_PyFrame_HasHiddenLocals:
 2331|     16|{
 2332|       |    /*
 2333|       |     * This function returns if there are hidden locals introduced by PEP 709,
 2334|       |     * which are the isolated fast locals for inline comprehensions
 2335|       |     */
 2336|     16|    PyCodeObject* co = _PyFrame_GetCode(frame);
 2337|       |
 2338|     17|    for (int i = 0; i < co->co_nlocalsplus; i++) {
  ------------------
  |  Branch (2338:21): [True: 1, False: 16]
  ------------------
 2339|      1|        _PyLocals_Kind kind = _PyLocals_GetKind(co->co_localspluskinds, i);
 2340|       |
 2341|      1|        if (kind & CO_FAST_HIDDEN) {
  ------------------
  |  |  196|      1|#define CO_FAST_HIDDEN  (0x10)
  ------------------
  |  Branch (2341:13): [True: 1, False: 0]
  ------------------
 2342|      1|            if (framelocalsproxy_hasval(frame, co, i)) {
  ------------------
  |  Branch (2342:17): [True: 0, False: 1]
  ------------------
 2343|      0|                return true;
 2344|      0|            }
 2345|      1|        }
 2346|      1|    }
 2347|       |
 2348|     16|    return false;
 2349|     16|}
_PyFrame_GetLocals:
 2354|     16|{
 2355|       |    // We should try to avoid creating the FrameObject if possible.
 2356|       |    // So we check if the frame is a module or class level scope
 2357|     16|    PyCodeObject *co = _PyFrame_GetCode(frame);
 2358|       |
 2359|     16|    if (!(co->co_flags & CO_OPTIMIZED) && !_PyFrame_HasHiddenLocals(frame)) {
  ------------------
  |  |  122|     16|#define CO_OPTIMIZED    0x0001
  ------------------
  |  Branch (2359:9): [True: 16, False: 0]
  |  Branch (2359:43): [True: 16, False: 0]
  ------------------
 2360|     16|        if (frame->f_locals == NULL) {
  ------------------
  |  Branch (2360:13): [True: 0, False: 16]
  ------------------
 2361|       |            // We found cases when f_locals is NULL for non-optimized code.
 2362|       |            // We fill the f_locals with an empty dict to avoid crash until
 2363|       |            // we find the root cause.
 2364|      0|            frame->f_locals = PyDict_New();
 2365|      0|            if (frame->f_locals == NULL) {
  ------------------
  |  Branch (2365:17): [True: 0, False: 0]
  ------------------
 2366|      0|                return NULL;
 2367|      0|            }
 2368|      0|        }
 2369|     16|        return Py_NewRef(frame->f_locals);
  ------------------
  |  |  550|     16|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2370|     16|    }
 2371|       |
 2372|      0|    PyFrameObject* f = _PyFrame_GetFrameObject(frame);
 2373|      0|    if (f == NULL) {
  ------------------
  |  Branch (2373:9): [True: 0, False: 0]
  ------------------
 2374|      0|        return NULL;
 2375|      0|    }
 2376|       |
 2377|      0|    return _PyFrameLocalsProxy_New(f);
 2378|      0|}
PyFrame_GetCode:
 2463|    368|{
 2464|    368|    assert(frame != NULL);
  ------------------
  |  Branch (2464:5): [True: 368, False: 0]
  ------------------
 2465|    368|    PyObject *code;
 2466|    368|    Py_BEGIN_CRITICAL_SECTION(frame);
  ------------------
  |  |   51|    368|    {
  ------------------
 2467|    368|    assert(!_PyFrame_IsIncomplete(frame->f_frame));
  ------------------
  |  Branch (2467:5): [True: 368, False: 0]
  ------------------
 2468|    368|    code = Py_NewRef(_PyFrame_GetCode(frame->f_frame));
  ------------------
  |  |  550|    368|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    368|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    368|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2469|    368|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    368|    }
  ------------------
 2470|    368|    return (PyCodeObject *)code;
 2471|    368|}
frameobject.c:framelocalsproxy_dealloc:
  448|      2|{
  449|      2|    PyFrameLocalsProxyObject *proxy = PyFrameLocalsProxyObject_CAST(self);
  ------------------
  |  |   31|      2|    (                                                               \
  |  |   32|      2|        assert(PyObject_TypeCheck((op), &PyFrameLocalsProxy_Type)), \
  |  |   33|      2|        (PyFrameLocalsProxyObject *)(op)                            \
  |  |   34|      2|    )
  ------------------
  |  Branch (449:39): [True: 2, False: 0]
  ------------------
  450|      0|    PyObject_GC_UnTrack(self);
  451|      2|    Py_CLEAR(proxy->frame);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  452|      2|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|      2|}
frameobject.c:framelocalsproxy_getval:
   47|      1|{
   48|      1|    _PyStackRef *fast = _PyFrame_GetLocalsArray(frame);
   49|      1|    _PyLocals_Kind kind = _PyLocals_GetKind(co->co_localspluskinds, i);
   50|       |
   51|      1|    PyObject *value = PyStackRef_AsPyObjectBorrow(fast[i]);
   52|      1|    PyObject *cell = NULL;
   53|       |
   54|      1|    if (value == NULL) {
  ------------------
  |  Branch (54:9): [True: 1, False: 0]
  ------------------
   55|      1|        return NULL;
   56|      1|    }
   57|       |
   58|      0|    if (kind == CO_FAST_FREE || kind & CO_FAST_CELL) {
  ------------------
  |  |  199|      0|#define CO_FAST_FREE    (0x80)
  ------------------
                  if (kind == CO_FAST_FREE || kind & CO_FAST_CELL) {
  ------------------
  |  |  198|      0|#define CO_FAST_CELL    (0x40)
  ------------------
  |  Branch (58:9): [True: 0, False: 0]
  |  Branch (58:33): [True: 0, False: 0]
  ------------------
   59|       |        // The cell was set when the frame was created from
   60|       |        // the function's closure.
   61|       |        // GH-128396: With PEP 709, it's possible to have a fast variable in
   62|       |        // an inlined comprehension that has the same name as the cell variable
   63|       |        // in the frame, where the `kind` obtained from frame can not guarantee
   64|       |        // that the variable is a cell.
   65|       |        // If the variable is not a cell, we are okay with it and we can simply
   66|       |        // return the value.
   67|      0|        if (PyCell_Check(value)) {
  ------------------
  |  |   18|      0|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   68|      0|            cell = value;
   69|      0|        }
   70|      0|    }
   71|       |
   72|      0|    if (cell != NULL) {
  ------------------
  |  Branch (72:9): [True: 0, False: 0]
  ------------------
   73|      0|        value = PyCell_GetRef((PyCellObject *)cell);
   74|      0|    }
   75|      0|    else {
   76|      0|        Py_XINCREF(value);
  ------------------
  |  |  514|      0|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|      0|    }
   78|       |
   79|      0|    if (value == NULL) {
  ------------------
  |  Branch (79:9): [True: 0, False: 0]
  ------------------
   80|      0|        return NULL;
   81|      0|    }
   82|       |
   83|      0|    return value;
   84|      0|}
frameobject.c:framelocalsproxy_new:
  457|      2|{
  458|      2|    if (PyTuple_GET_SIZE(args) != 1) {
  ------------------
  |  |   27|      2|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (458:9): [True: 0, False: 2]
  ------------------
  459|      0|        PyErr_Format(PyExc_TypeError,
  460|      0|                     "FrameLocalsProxy expected 1 argument, got %zd",
  461|      0|                     PyTuple_GET_SIZE(args));
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  462|      0|        return NULL;
  463|      0|    }
  464|      2|    PyObject *item = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|      2|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      2|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (464:22): [True: 2, False: 0]
  ------------------
  465|       |
  466|      2|    if (!PyFrame_Check(item)) {
  ------------------
  |  |    8|      2|#define PyFrame_Check(op) Py_IS_TYPE((op), &PyFrame_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (466:9): [True: 0, False: 2]
  ------------------
  467|      0|        PyErr_Format(PyExc_TypeError, "expect frame, not %T", item);
  468|      0|        return NULL;
  469|      0|    }
  470|      2|    PyFrameObject *frame = (PyFrameObject*)item;
  471|       |
  472|      2|    if (kwds != NULL && PyDict_Size(kwds) != 0) {
  ------------------
  |  Branch (472:9): [True: 0, False: 2]
  |  Branch (472:25): [True: 0, False: 0]
  ------------------
  473|      0|        PyErr_SetString(PyExc_TypeError,
  474|      0|                        "FrameLocalsProxy takes no keyword arguments");
  475|      0|        return 0;
  476|      0|    }
  477|       |
  478|      2|    PyFrameLocalsProxyObject *self = (PyFrameLocalsProxyObject *)type->tp_alloc(type, 0);
  479|      2|    if (self == NULL) {
  ------------------
  |  Branch (479:9): [True: 0, False: 2]
  ------------------
  480|      0|        return NULL;
  481|      0|    }
  482|       |
  483|      2|    ((PyFrameLocalsProxyObject*)self)->frame = (PyFrameObject*)Py_NewRef(frame);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  484|       |
  485|      2|    return (PyObject *)self;
  486|      2|}
frameobject.c:frame_dealloc:
 2003|  23.1k|{
 2004|       |    /* It is the responsibility of the owning generator/coroutine
 2005|       |     * to have cleared the generator pointer */
 2006|  23.1k|    PyFrameObject *f = PyFrameObject_CAST(op);
  ------------------
  |  |   28|  23.1k|    (assert(PyObject_TypeCheck((op), &PyFrame_Type)), (PyFrameObject *)(op))
  ------------------
  |  Branch (2006:24): [True: 23.1k, False: 0]
  ------------------
 2007|  23.1k|    if (_PyObject_GC_IS_TRACKED(f)) {
  ------------------
  |  |   81|  23.1k|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  23.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 4.21k, False: 18.8k]
  |  |  ------------------
  ------------------
 2008|  4.21k|        _PyObject_GC_UNTRACK(f);
  ------------------
  |  |  507|  4.21k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2009|  4.21k|    }
 2010|       |
 2011|  23.1k|    FT_CLEAR_WEAKREFS(op, f->f_weakreflist);
  ------------------
  |  |   47|  23.1k|    do {                                            \
  |  |   48|  23.1k|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|  23.1k|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 23.1k]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|  23.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 23.1k]
  |  |  ------------------
  ------------------
  |  Branch (2011:5): [True: 23.1k, False: 0]
  ------------------
 2012|       |
 2013|       |    /* GH-106092: If f->f_frame was on the stack and we reached the maximum
 2014|       |     * nesting depth for deallocations, the trashcan may have delayed this
 2015|       |     * deallocation until after f->f_frame is freed. Avoid dereferencing
 2016|       |     * f->f_frame unless we know it still points to valid memory. */
 2017|  23.1k|    _PyInterpreterFrame *frame = (_PyInterpreterFrame *)f->_f_frame_data;
 2018|       |
 2019|       |    /* Kill all local variables including specials, if we own them */
 2020|  23.1k|    if (f->f_frame == frame && frame->owner == FRAME_OWNED_BY_FRAME_OBJECT) {
  ------------------
  |  Branch (2020:9): [True: 4.21k, False: 18.8k]
  |  Branch (2020:32): [True: 4.21k, False: 0]
  ------------------
 2021|  4.21k|        PyStackRef_CLEAR(frame->f_executable);
  ------------------
  |  |  732|  4.21k|    do { \
  |  |  733|  4.21k|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  4.21k|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  4.21k|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  4.21k|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  4.21k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 4.21k]
  |  |  ------------------
  ------------------
 2022|  4.21k|        PyStackRef_CLEAR(frame->f_funcobj);
  ------------------
  |  |  732|  4.21k|    do { \
  |  |  733|  4.21k|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  4.21k|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  4.21k|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  4.21k|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  4.21k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 4.21k]
  |  |  ------------------
  ------------------
 2023|  4.21k|        Py_CLEAR(frame->f_locals);
  ------------------
  |  |  484|  4.21k|    do { \
  |  |  485|  4.21k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  4.21k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  4.21k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  4.21k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  4.21k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  4.21k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 4.21k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  4.21k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 4.21k]
  |  |  ------------------
  ------------------
 2024|  4.21k|        _PyStackRef *locals = _PyFrame_GetLocalsArray(frame);
 2025|  4.21k|        _PyStackRef *sp = frame->stackpointer;
 2026|  34.5k|        while (sp > locals) {
  ------------------
  |  Branch (2026:16): [True: 30.2k, False: 4.21k]
  ------------------
 2027|  30.2k|            sp--;
 2028|  30.2k|            PyStackRef_CLEAR(*sp);
  ------------------
  |  |  732|  30.2k|    do { \
  |  |  733|  30.2k|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  30.2k|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  30.2k|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  30.2k|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  30.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 30.2k]
  |  |  ------------------
  ------------------
 2029|  30.2k|        }
 2030|  4.21k|    }
 2031|  23.1k|    Py_CLEAR(f->f_back);
  ------------------
  |  |  484|  23.1k|    do { \
  |  |  485|  23.1k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  23.1k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  23.1k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  23.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2.95k, False: 20.1k]
  |  |  ------------------
  |  |  488|  2.95k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  2.95k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  2.95k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  2.95k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  2.95k|        } \
  |  |  491|  23.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 23.1k]
  |  |  ------------------
  ------------------
 2032|  23.1k|    Py_CLEAR(f->f_trace);
  ------------------
  |  |  484|  23.1k|    do { \
  |  |  485|  23.1k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  23.1k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  23.1k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  23.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 23.1k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  23.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 23.1k]
  |  |  ------------------
  ------------------
 2033|  23.1k|    Py_CLEAR(f->f_extra_locals);
  ------------------
  |  |  484|  23.1k|    do { \
  |  |  485|  23.1k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  23.1k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  23.1k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  23.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 23.1k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  23.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 23.1k]
  |  |  ------------------
  ------------------
 2034|  23.1k|    Py_CLEAR(f->f_locals_cache);
  ------------------
  |  |  484|  23.1k|    do { \
  |  |  485|  23.1k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  23.1k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  23.1k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  23.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 23.1k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  23.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 23.1k]
  |  |  ------------------
  ------------------
 2035|       |    Py_CLEAR(f->f_overwritten_fast_locals);
  ------------------
  |  |  484|  23.1k|    do { \
  |  |  485|  23.1k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  23.1k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  23.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  23.1k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  23.1k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 23.1k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  23.1k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 23.1k]
  |  |  ------------------
  ------------------
 2036|  23.1k|    PyObject_GC_Del(f);
 2037|  23.1k|}
frameobject.c:frame_traverse:
 2041|     10|{
 2042|     10|    PyFrameObject *f = PyFrameObject_CAST(op);
  ------------------
  |  |   28|     10|    (assert(PyObject_TypeCheck((op), &PyFrame_Type)), (PyFrameObject *)(op))
  ------------------
  |  Branch (2042:24): [True: 10, False: 0]
  ------------------
 2043|     10|    Py_VISIT(f->f_back);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 10, False: 0]
  |  |  ------------------
  |  |  196|     10|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     10|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 10]
  |  |  ------------------
  |  |  198|     10|                return vret;                                            \
  |  |  199|     10|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
 2044|     10|    Py_VISIT(f->f_trace);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 10]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
 2045|     10|    Py_VISIT(f->f_extra_locals);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 10]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
 2046|     10|    Py_VISIT(f->f_locals_cache);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 10]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
 2047|     10|    Py_VISIT(f->f_overwritten_fast_locals);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 10]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
 2048|     10|    if (f->f_frame->owner != FRAME_OWNED_BY_FRAME_OBJECT) {
  ------------------
  |  Branch (2048:9): [True: 0, False: 10]
  ------------------
 2049|      0|        return 0;
 2050|      0|    }
 2051|     10|    assert(f->f_frame->frame_obj == NULL);
  ------------------
  |  Branch (2051:5): [True: 10, False: 0]
  ------------------
 2052|     10|    return _PyFrame_Traverse(f->f_frame, visit, arg);
 2053|     10|}
frameobject.c:framelocalsproxy_hasval:
   88|      1|{
   89|      1|    PyObject *value = framelocalsproxy_getval(frame, co, i);
   90|      1|    if (value == NULL) {
  ------------------
  |  Branch (90:9): [True: 1, False: 0]
  ------------------
   91|      1|        return false;
   92|      1|    }
   93|      0|    Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|       |    return true;
   95|      1|}
frameobject.c:frame_locals_get_impl:
 1052|      2|{
 1053|      2|    assert(!_PyFrame_IsIncomplete(self->f_frame));
  ------------------
  |  Branch (1053:5): [True: 2, False: 0]
  ------------------
 1054|       |
 1055|      2|    PyCodeObject *co = _PyFrame_GetCode(self->f_frame);
 1056|       |
 1057|      2|    if (!(co->co_flags & CO_OPTIMIZED) && !_PyFrame_HasHiddenLocals(self->f_frame)) {
  ------------------
  |  |  122|      2|#define CO_OPTIMIZED    0x0001
  ------------------
  |  Branch (1057:9): [True: 0, False: 2]
  |  Branch (1057:43): [True: 0, False: 0]
  ------------------
 1058|      0|        if (self->f_frame->f_locals == NULL) {
  ------------------
  |  Branch (1058:13): [True: 0, False: 0]
  ------------------
 1059|       |            // We found cases when f_locals is NULL for non-optimized code.
 1060|       |            // We fill the f_locals with an empty dict to avoid crash until
 1061|       |            // we find the root cause.
 1062|      0|            self->f_frame->f_locals = PyDict_New();
 1063|      0|            if (self->f_frame->f_locals == NULL) {
  ------------------
  |  Branch (1063:17): [True: 0, False: 0]
  ------------------
 1064|      0|                return NULL;
 1065|      0|            }
 1066|      0|        }
 1067|      0|        return Py_NewRef(self->f_frame->f_locals);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1068|      0|    }
 1069|       |
 1070|      2|    return _PyFrameLocalsProxy_New(self);
 1071|      2|}

_PyFunction_FromConstructor:
  117|    126|{
  118|    126|    PyObject *module;
  119|    126|    if (PyDict_GetItemRef(constr->fc_globals, &_Py_ID(__name__), &module) < 0) {
  ------------------
  |  |  936|    126|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    126|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    126|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (119:9): [True: 0, False: 126]
  ------------------
  120|      0|        return NULL;
  121|      0|    }
  122|       |
  123|    126|    PyFunctionObject *op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
  ------------------
  |  |  181|    126|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  124|    126|    if (op == NULL) {
  ------------------
  |  Branch (124:9): [True: 0, False: 126]
  ------------------
  125|      0|        Py_XDECREF(module);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|      0|        return NULL;
  127|      0|    }
  128|    126|    _Py_INCREF_DICT(constr->fc_globals);
  ------------------
  |  |  396|    126|#  define _Py_INCREF_DICT Py_INCREF
  |  |  ------------------
  |  |  |  |  310|    126|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|    126|    op->func_globals = constr->fc_globals;
  130|    126|    _Py_INCREF_BUILTINS(constr->fc_builtins);
  ------------------
  |  |  398|    126|#  define _Py_INCREF_BUILTINS Py_INCREF
  |  |  ------------------
  |  |  |  |  310|    126|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|    126|    op->func_builtins = constr->fc_builtins;
  132|    126|    op->func_name = Py_NewRef(constr->fc_name);
  ------------------
  |  |  550|    126|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|    126|    op->func_qualname = Py_NewRef(constr->fc_qualname);
  ------------------
  |  |  550|    126|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|    126|    _Py_INCREF_CODE((PyCodeObject *)constr->fc_code);
  ------------------
  |  |  309|    126|#  define _Py_INCREF_CODE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|    126|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|    126|    op->func_code = constr->fc_code;
  136|    126|    op->func_defaults = Py_XNewRef(constr->fc_defaults);
  ------------------
  |  |  551|    126|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|    126|    op->func_kwdefaults = Py_XNewRef(constr->fc_kwdefaults);
  ------------------
  |  |  551|    126|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  138|    126|    op->func_closure = Py_XNewRef(constr->fc_closure);
  ------------------
  |  |  551|    126|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|    126|    op->func_doc = Py_NewRef(Py_None);
  ------------------
  |  |  550|    126|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|    126|    op->func_dict = NULL;
  141|    126|    op->func_weakreflist = NULL;
  142|    126|    op->func_module = module;
  143|    126|    op->func_annotations = NULL;
  144|    126|    op->func_annotate = NULL;
  145|    126|    op->func_typeparams = NULL;
  146|    126|    op->vectorcall = _PyFunction_Vectorcall;
  147|    126|    op->func_version = FUNC_VERSION_UNSET;
  ------------------
  |  |   18|    126|#define FUNC_VERSION_UNSET 0
  ------------------
  148|       |    // NOTE: functions created via FrameConstructor do not use deferred
  149|       |    // reference counting because they are typically not part of cycles
  150|       |    // nor accessed by multiple threads.
  151|    126|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|    126|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|       |    handle_func_event(PyFunction_EVENT_CREATE, op, NULL);
  153|    126|    return op;
  154|    126|}
PyFunction_NewWithQualName:
  158|  4.98k|{
  159|  4.98k|    assert(globals != NULL);
  ------------------
  |  Branch (159:5): [True: 4.98k, False: 0]
  ------------------
  160|  4.98k|    assert(PyAnyDict_Check(globals));
  ------------------
  |  Branch (160:5): [True: 4.98k, False: 0]
  |  Branch (160:5): [True: 0, False: 0]
  ------------------
  161|  4.98k|    _Py_INCREF_DICT(globals);
  ------------------
  |  |  396|  4.98k|#  define _Py_INCREF_DICT Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  4.98k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|       |
  163|  4.98k|    PyCodeObject *code_obj = (PyCodeObject *)code;
  164|  4.98k|    _Py_INCREF_CODE(code_obj);
  ------------------
  |  |  309|  4.98k|#  define _Py_INCREF_CODE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  4.98k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|       |
  166|  4.98k|    assert(code_obj->co_name != NULL);
  ------------------
  |  Branch (166:5): [True: 4.98k, False: 0]
  ------------------
  167|  4.98k|    PyObject *name = Py_NewRef(code_obj->co_name);
  ------------------
  |  |  550|  4.98k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|       |
  169|  4.98k|    if (!qualname) {
  ------------------
  |  Branch (169:9): [True: 4.98k, False: 0]
  ------------------
  170|  4.98k|        qualname = code_obj->co_qualname;
  171|  4.98k|    }
  172|  4.98k|    assert(qualname != NULL);
  ------------------
  |  Branch (172:5): [True: 4.98k, False: 0]
  ------------------
  173|  4.98k|    Py_INCREF(qualname);
  ------------------
  |  |  310|  4.98k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|       |
  175|  4.98k|    PyObject *consts = code_obj->co_consts;
  176|  4.98k|    assert(PyTuple_Check(consts));
  ------------------
  |  Branch (176:5): [True: 4.98k, False: 0]
  ------------------
  177|  4.98k|    PyObject *doc;
  178|  4.98k|    if (code_obj->co_flags & CO_HAS_DOCSTRING) {
  ------------------
  |  |  154|  4.98k|#define CO_HAS_DOCSTRING 0x4000000
  ------------------
  |  Branch (178:9): [True: 1.16k, False: 3.81k]
  ------------------
  179|  1.16k|        assert(PyTuple_Size(consts) >= 1);
  ------------------
  |  Branch (179:9): [True: 1.16k, False: 0]
  ------------------
  180|  1.16k|        doc = PyTuple_GetItem(consts, 0);
  181|  1.16k|        if (!PyUnicode_Check(doc)) {
  ------------------
  |  |  103|  1.16k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.16k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (181:13): [True: 0, False: 1.16k]
  ------------------
  182|      0|            doc = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  183|      0|        }
  184|  1.16k|    }
  185|  3.81k|    else {
  186|  3.81k|        doc = Py_None;
  ------------------
  |  |  616|  3.81k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  187|  3.81k|    }
  188|  4.98k|    Py_INCREF(doc);
  ------------------
  |  |  310|  4.98k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|       |    // __module__: Use globals['__name__'] if it exists, or NULL.
  191|  4.98k|    PyObject *module;
  192|  4.98k|    PyObject *builtins = NULL;
  193|  4.98k|    if (PyDict_GetItemRef(globals, &_Py_ID(__name__), &module) < 0) {
  ------------------
  |  |  936|  4.98k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  4.98k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  4.98k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (193:9): [True: 0, False: 4.98k]
  ------------------
  194|      0|        goto error;
  195|      0|    }
  196|       |
  197|  4.98k|    builtins = _PyDict_LoadBuiltinsFromGlobals(globals);
  198|  4.98k|    if (builtins == NULL) {
  ------------------
  |  Branch (198:9): [True: 0, False: 4.98k]
  ------------------
  199|      0|        goto error;
  200|      0|    }
  201|       |
  202|  4.98k|    PyFunctionObject *op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
  ------------------
  |  |  181|  4.98k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  203|  4.98k|    if (op == NULL) {
  ------------------
  |  Branch (203:9): [True: 0, False: 4.98k]
  ------------------
  204|      0|        goto error;
  205|      0|    }
  206|       |    /* Note: No failures from this point on, since func_dealloc() does not
  207|       |       expect a partially-created object. */
  208|       |
  209|  4.98k|    op->func_globals = globals;
  210|  4.98k|    op->func_builtins = builtins;
  211|  4.98k|    op->func_name = name;
  212|  4.98k|    op->func_qualname = qualname;
  213|  4.98k|    op->func_code = (PyObject*)code_obj;
  214|  4.98k|    op->func_defaults = NULL;    // No default positional arguments
  215|  4.98k|    op->func_kwdefaults = NULL;  // No default keyword arguments
  216|  4.98k|    op->func_closure = NULL;
  217|  4.98k|    op->func_doc = doc;
  218|  4.98k|    op->func_dict = NULL;
  219|  4.98k|    op->func_weakreflist = NULL;
  220|  4.98k|    op->func_module = module;
  221|  4.98k|    op->func_annotations = NULL;
  222|  4.98k|    op->func_annotate = NULL;
  223|  4.98k|    op->func_typeparams = NULL;
  224|  4.98k|    op->vectorcall = _PyFunction_Vectorcall;
  225|  4.98k|    op->func_version = FUNC_VERSION_UNSET;
  ------------------
  |  |   18|  4.98k|#define FUNC_VERSION_UNSET 0
  ------------------
  226|  4.98k|    if (((code_obj->co_flags & CO_NESTED) == 0) ||
  ------------------
  |  |  126|  4.98k|#define CO_NESTED       0x0010
  ------------------
  |  Branch (226:9): [True: 3.12k, False: 1.85k]
  ------------------
  227|  3.21k|        (code_obj->co_flags & CO_METHOD)) {
  ------------------
  |  |  157|  1.85k|#define CO_METHOD  0x8000000
  ------------------
  |  Branch (227:9): [True: 86, False: 1.76k]
  ------------------
  228|       |        // Use deferred reference counting for top-level functions, but not
  229|       |        // nested functions because they are more likely to capture variables,
  230|       |        // which makes prompt deallocation more important.
  231|       |        //
  232|       |        // Nested methods (functions defined in class scope) are also deferred,
  233|       |        // since they will likely be cleaned up by GC anyway.
  234|  3.21k|        _PyObject_SetDeferredRefcount((PyObject *)op);
  235|  3.21k|    }
  236|  4.98k|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|  4.98k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|  4.98k|    handle_func_event(PyFunction_EVENT_CREATE, op, NULL);
  238|  4.98k|    return (PyObject *)op;
  239|       |
  240|      0|error:
  241|      0|    Py_DECREF(globals);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|      0|    Py_DECREF(code_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|      0|    Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|      0|    Py_DECREF(qualname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|      0|    Py_DECREF(doc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|      0|    Py_XDECREF(module);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|      0|    Py_XDECREF(builtins);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|       |    return NULL;
  249|  4.98k|}
_PyFunction_SetVersion:
  320|  4.98k|{
  321|  4.98k|    assert(func->func_version == FUNC_VERSION_UNSET);
  ------------------
  |  Branch (321:5): [True: 4.98k, False: 0]
  ------------------
  322|  4.98k|    assert(version >= FUNC_VERSION_FIRST_VALID);
  ------------------
  |  Branch (322:5): [True: 4.98k, False: 0]
  ------------------
  323|       |    // This should only be called from MAKE_FUNCTION. No code is specialized
  324|       |    // based on the version, so we do not need to stop the world to set it.
  325|  4.98k|    func->func_version = version;
  326|  4.98k|#ifndef Py_GIL_DISABLED
  327|  4.98k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  328|  4.98k|    struct _func_version_cache_item *slot = get_cache_item(interp, version);
  329|  4.98k|    slot->func = func;
  330|  4.98k|    slot->code = func->func_code;
  331|  4.98k|#endif
  332|  4.98k|}
_PyFunction_ClearCodeByVersion:
  354|  53.6k|{
  355|  53.6k|#ifndef Py_GIL_DISABLED
  356|  53.6k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  357|  53.6k|    struct _func_version_cache_item *slot = get_cache_item(interp, version);
  358|  53.6k|    if (slot->code) {
  ------------------
  |  Branch (358:9): [True: 19.3k, False: 34.2k]
  ------------------
  359|  19.3k|        assert(PyCode_Check(slot->code));
  ------------------
  |  Branch (359:9): [True: 19.3k, False: 0]
  ------------------
  360|  19.3k|        PyCodeObject *code = (PyCodeObject *)slot->code;
  361|  19.3k|        if (code->co_version == version) {
  ------------------
  |  Branch (361:13): [True: 658, False: 18.6k]
  ------------------
  362|    658|            slot->code = NULL;
  363|       |            slot->func = NULL;
  364|    658|        }
  365|  19.3k|    }
  366|  53.6k|#endif
  367|  53.6k|}
_PyFunction_GetVersionForCurrentState:
  371|    437|{
  372|    437|    return func->func_version;
  373|    437|}
PyFunction_New:
  377|  4.98k|{
  378|       |    return PyFunction_NewWithQualName(code, globals, NULL);
  379|  4.98k|}
PyFunction_GetModule:
  403|      5|{
  404|      5|    if (!PyFunction_Check(op)) {
  ------------------
  |  |   68|      5|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|      5|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (404:9): [True: 0, False: 5]
  ------------------
  405|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  406|      0|        return NULL;
  407|      0|    }
  408|      5|    return ((PyFunctionObject *) op) -> func_module;
  409|      5|}
PyClassMethod_New:
 1714|      1|{
 1715|      1|    classmethod *cm = (classmethod *)
 1716|      1|        PyType_GenericAlloc(&PyClassMethod_Type, 0);
 1717|      1|    if (cm == NULL) {
  ------------------
  |  Branch (1717:9): [True: 0, False: 1]
  ------------------
 1718|      0|        return NULL;
 1719|      0|    }
 1720|      1|    if (cm_set_callable(cm, callable) < 0) {
  ------------------
  |  Branch (1720:9): [True: 0, False: 1]
  ------------------
 1721|      0|        Py_DECREF(cm);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1722|      0|        return NULL;
 1723|      0|    }
 1724|      1|    return (PyObject *)cm;
 1725|      1|}
PyStaticMethod_New:
 1980|     28|{
 1981|     28|    staticmethod *sm = (staticmethod *)
 1982|     28|        PyType_GenericAlloc(&PyStaticMethod_Type, 0);
 1983|     28|    if (sm == NULL) {
  ------------------
  |  Branch (1983:9): [True: 0, False: 28]
  ------------------
 1984|      0|        return NULL;
 1985|      0|    }
 1986|     28|    _PyObject_SetDeferredRefcount((PyObject *)sm);
 1987|     28|    if (sm_set_callable(sm, callable) < 0) {
  ------------------
  |  Branch (1987:9): [True: 0, False: 28]
  ------------------
 1988|      0|        Py_DECREF(sm);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1989|      0|        return NULL;
 1990|      0|    }
 1991|     28|    return (PyObject *)sm;
 1992|     28|}
_PyStaticMethod_GetFunc:
 2003|  1.32k|{
 2004|  1.32k|    staticmethod *sm = _PyStaticMethod_CAST(self);
  ------------------
  |  | 1753|  1.32k|    (assert(PyObject_TypeCheck((cm), &PyStaticMethod_Type)), \
  |  | 1754|  1.32k|     _Py_CAST(staticmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|  1.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2004:24): [True: 1.32k, False: 0]
  ------------------
 2005|      0|    return sm->sm_callable;
 2006|  1.32k|}
funcobject.c:handle_func_event:
   55|  7.72k|{
   56|  7.72k|    assert(Py_REFCNT(func) > 0);
  ------------------
  |  Branch (56:5): [True: 7.72k, False: 0]
  ------------------
   57|  7.72k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   58|  7.72k|    assert(interp->_initialized);
  ------------------
  |  Branch (58:5): [True: 7.72k, False: 0]
  ------------------
   59|  7.72k|    if (interp->active_func_watchers) {
  ------------------
  |  Branch (59:9): [True: 0, False: 7.72k]
  ------------------
   60|      0|        notify_func_watchers(interp, event, func, new_value);
   61|      0|    }
   62|  7.72k|    switch (event) {
   63|      0|        case PyFunction_EVENT_MODIFY_CODE:
  ------------------
  |  Branch (63:9): [True: 0, False: 7.72k]
  ------------------
   64|      0|        case PyFunction_EVENT_MODIFY_DEFAULTS:
  ------------------
  |  Branch (64:9): [True: 0, False: 7.72k]
  ------------------
   65|      0|        case PyFunction_EVENT_MODIFY_KWDEFAULTS:
  ------------------
  |  Branch (65:9): [True: 0, False: 7.72k]
  ------------------
   66|     40|        case PyFunction_EVENT_MODIFY_QUALNAME:
  ------------------
  |  Branch (66:9): [True: 40, False: 7.68k]
  ------------------
   67|       |#if _Py_TIER2
   68|       |            // Note: we only invalidate JIT code if a function version changes.
   69|       |            // Not when the function is deallocated.
   70|       |            // Function deallocation occurs frequently (think: lambdas),
   71|       |            // so we want to minimize dependency invalidation there.
   72|       |            _Py_Executors_InvalidateDependency(interp, func, 1);
   73|       |#endif
   74|     40|            RARE_EVENT_INTERP_INC(interp, func_modification);
  ------------------
  |  |   98|     40|    do { \
  |  |   99|     40|        /* saturating add */ \
  |  |  100|     40|        uint8_t val = FT_ATOMIC_LOAD_UINT8_RELAXED(interp->rare_events.name); \
  |  |  ------------------
  |  |  |  |  157|     40|#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
  |  |  ------------------
  |  |  101|     40|        if (val < UINT8_MAX) { \
  |  |  ------------------
  |  |  |  Branch (101:13): [True: 40, False: 0]
  |  |  ------------------
  |  |  102|     40|            FT_ATOMIC_STORE_UINT8(interp->rare_events.name, val + 1); \
  |  |  ------------------
  |  |  |  |  155|     40|#define FT_ATOMIC_STORE_UINT8(value, new_value) value = new_value
  |  |  ------------------
  |  |  103|     40|        } \
  |  |  104|     40|        RARE_EVENT_STAT_INC(name); \
  |  |  ------------------
  |  |  |  |   89|     40|#define RARE_EVENT_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  |  105|     40|    } while (0); \
  |  |  ------------------
  |  |  |  Branch (105:14): [Folded, False: 40]
  |  |  ------------------
  ------------------
   75|     40|            break;
   76|  7.68k|        default:
  ------------------
  |  Branch (76:9): [True: 7.68k, False: 40]
  ------------------
   77|  7.68k|            break;
   78|  7.72k|    }
   79|  7.72k|}
funcobject.c:get_cache_item:
  312|  61.0k|{
  313|  61.0k|    return interp->func_state.func_version_cache +
  314|  61.0k|           (version % FUNC_VERSION_CACHE_SIZE);
  ------------------
  |  |  509|  61.0k|#define FUNC_VERSION_CACHE_SIZE (1<<12)  /* Must be a power of 2 */
  ------------------
  315|  61.0k|}
funcobject.c:func_clear_version:
  336|  2.62k|{
  337|  2.62k|    if (func->func_version < FUNC_VERSION_FIRST_VALID) {
  ------------------
  |  |   20|  2.62k|#define FUNC_VERSION_FIRST_VALID 2
  ------------------
  |  Branch (337:9): [True: 171, False: 2.45k]
  ------------------
  338|       |        // Version was never set or has already been cleared.
  339|    171|        return;
  340|    171|    }
  341|  2.45k|#ifndef Py_GIL_DISABLED
  342|  2.45k|    struct _func_version_cache_item *slot =
  343|  2.45k|        get_cache_item(interp, func->func_version);
  344|  2.45k|    if (slot->func == func) {
  ------------------
  |  Branch (344:9): [True: 2.27k, False: 176]
  ------------------
  345|  2.27k|        slot->func = NULL;
  346|       |        // Leave slot->code alone, there may be use for it.
  347|  2.27k|    }
  348|  2.45k|#endif
  349|  2.45k|    func->func_version = FUNC_VERSION_CLEARED;
  ------------------
  |  |   19|  2.45k|#define FUNC_VERSION_CLEARED 1
  ------------------
  350|  2.45k|}
funcobject.c:func_dealloc:
 1206|  2.58k|{
 1207|  2.58k|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|  2.58k|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1207:28): [True: 2.58k, False: 0]
  ------------------
 1208|      0|    _PyObject_ResurrectStart(self);
 1209|  2.58k|    handle_func_event(PyFunction_EVENT_DESTROY, op, NULL);
 1210|  2.58k|    if (_PyObject_ResurrectEnd(self)) {
  ------------------
  |  Branch (1210:9): [True: 0, False: 2.58k]
  ------------------
 1211|      0|        return;
 1212|      0|    }
 1213|  2.58k|    _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|  2.58k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1214|  2.58k|    FT_CLEAR_WEAKREFS(self, op->func_weakreflist);
  ------------------
  |  |   47|  2.58k|    do {                                            \
  |  |   48|  2.58k|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|  2.58k|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 2.58k]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|  2.58k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 2.58k]
  |  |  ------------------
  ------------------
  |  Branch (1214:5): [True: 2.58k, False: 0]
  ------------------
 1215|  2.58k|    (void)func_clear((PyObject*)op);
 1216|       |    // These aren't cleared by func_clear().
 1217|  2.58k|    _Py_DECREF_CODE((PyCodeObject *)op->func_code);
  ------------------
  |  |  310|  2.58k|#  define _Py_DECREF_CODE Py_DECREF
  |  |  ------------------
  |  |  |  |  430|  2.58k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1218|  2.58k|    Py_DECREF(op->func_name);
  ------------------
  |  |  430|  2.58k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1219|  2.58k|    Py_DECREF(op->func_qualname);
  ------------------
  |  |  430|  2.58k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1220|  2.58k|    PyObject_GC_Del(op);
 1221|  2.58k|}
funcobject.c:func_traverse:
 1233|  34.7k|{
 1234|  34.7k|    PyFunctionObject *f = _PyFunction_CAST(self);
  ------------------
  |  |   86|  34.7k|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1234:27): [True: 34.7k, False: 0]
  ------------------
 1235|  34.7k|    Py_VISIT(f->func_code);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1236|  34.7k|    Py_VISIT(f->func_globals);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1237|  34.7k|    Py_VISIT(f->func_builtins);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1238|  34.7k|    Py_VISIT(f->func_module);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 4]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1239|  34.7k|    Py_VISIT(f->func_defaults);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 10.0k, False: 24.7k]
  |  |  ------------------
  |  |  196|  10.0k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  10.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  10.0k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 10.0k]
  |  |  ------------------
  |  |  198|  10.0k|                return vret;                                            \
  |  |  199|  10.0k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1240|  34.7k|    Py_VISIT(f->func_kwdefaults);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 650, False: 34.1k]
  |  |  ------------------
  |  |  196|    650|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    650|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    650|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    650|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 650]
  |  |  ------------------
  |  |  198|    650|                return vret;                                            \
  |  |  199|    650|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1241|  34.7k|    Py_VISIT(f->func_doc);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1242|  34.7k|    Py_VISIT(f->func_name);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1243|  34.7k|    Py_VISIT(f->func_dict);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.64k, False: 33.1k]
  |  |  ------------------
  |  |  196|  1.64k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.64k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.64k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.64k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.64k]
  |  |  ------------------
  |  |  198|  1.64k|                return vret;                                            \
  |  |  199|  1.64k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1244|  34.7k|    Py_VISIT(f->func_closure);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 3.59k, False: 31.1k]
  |  |  ------------------
  |  |  196|  3.59k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  3.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  3.59k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 3.59k]
  |  |  ------------------
  |  |  198|  3.59k|                return vret;                                            \
  |  |  199|  3.59k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1245|  34.7k|    Py_VISIT(f->func_annotations);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1246|  34.7k|    Py_VISIT(f->func_annotate);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 114, False: 34.6k]
  |  |  ------------------
  |  |  196|    114|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    114|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    114|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    114|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 114]
  |  |  ------------------
  |  |  198|    114|                return vret;                                            \
  |  |  199|    114|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1247|  34.7k|    Py_VISIT(f->func_typeparams);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 22, False: 34.7k]
  |  |  ------------------
  |  |  196|     22|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     22|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 22]
  |  |  ------------------
  |  |  198|     22|                return vret;                                            \
  |  |  199|     22|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1248|  34.7k|    Py_VISIT(f->func_qualname);
  ------------------
  |  |  194|  34.7k|    do {                                                                \
  |  |  195|  34.7k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 34.7k, False: 0]
  |  |  ------------------
  |  |  196|  34.7k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  34.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  34.7k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 34.7k]
  |  |  ------------------
  |  |  198|  34.7k|                return vret;                                            \
  |  |  199|  34.7k|        }                                                               \
  |  |  200|  34.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 34.7k]
  |  |  ------------------
  ------------------
 1249|  34.7k|    return 0;
 1250|  34.7k|}
funcobject.c:func_clear:
 1172|  2.62k|{
 1173|  2.62k|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|  2.62k|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|  2.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1173:28): [True: 2.62k, False: 0]
  ------------------
 1174|      0|    func_clear_version(_PyInterpreterState_GET(), op);
 1175|  2.62k|    PyObject *globals = op->func_globals;
 1176|  2.62k|    op->func_globals = NULL;
 1177|  2.62k|    if (globals != NULL) {
  ------------------
  |  Branch (1177:9): [True: 2.58k, False: 45]
  ------------------
 1178|  2.58k|        _Py_DECREF_DICT(globals);
  ------------------
  |  |  397|  2.58k|#  define _Py_DECREF_DICT Py_DECREF
  |  |  ------------------
  |  |  |  |  430|  2.58k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1179|  2.58k|    }
 1180|  2.62k|    PyObject *builtins = op->func_builtins;
 1181|  2.62k|    op->func_builtins = NULL;
 1182|  2.62k|    if (builtins != NULL) {
  ------------------
  |  Branch (1182:9): [True: 2.58k, False: 45]
  ------------------
 1183|  2.58k|        _Py_DECREF_BUILTINS(builtins);
  ------------------
  |  |  399|  2.58k|#  define _Py_DECREF_BUILTINS Py_DECREF
  |  |  ------------------
  |  |  |  |  430|  2.58k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|  2.58k|    }
 1185|  2.62k|    Py_CLEAR(op->func_module);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2.56k, False: 57]
  |  |  ------------------
  |  |  488|  2.56k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  2.56k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  2.56k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  2.56k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  2.56k|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1186|  2.62k|    Py_CLEAR(op->func_defaults);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 347, False: 2.27k]
  |  |  ------------------
  |  |  488|    347|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    347|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    347|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    347|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    347|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    347|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    347|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1187|  2.62k|    Py_CLEAR(op->func_kwdefaults);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 2.62k]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1188|  2.62k|    Py_CLEAR(op->func_doc);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2.58k, False: 45]
  |  |  ------------------
  |  |  488|  2.58k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  2.58k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  2.58k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  2.58k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  2.58k|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1189|  2.62k|    Py_CLEAR(op->func_dict);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 2.62k]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1190|  2.62k|    Py_CLEAR(op->func_closure);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 441, False: 2.18k]
  |  |  ------------------
  |  |  488|    441|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    441|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    441|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    441|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    441|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    441|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    441|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1191|  2.62k|    Py_CLEAR(op->func_annotations);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 2.62k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1192|  2.62k|    Py_CLEAR(op->func_annotate);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 2.62k]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1193|  2.62k|    Py_CLEAR(op->func_typeparams);
  ------------------
  |  |  484|  2.62k|    do { \
  |  |  485|  2.62k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.62k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.62k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.62k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 2.62k]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1194|       |    // Don't Py_CLEAR(op->func_code), since code is always required
 1195|       |    // to be non-NULL. Similarly, name and qualname shouldn't be NULL.
 1196|       |    // However, name and qualname could be str subclasses, so they
 1197|       |    // could have reference cycles. The solution is to replace them
 1198|       |    // with a genuinely immutable string.
 1199|  2.62k|    Py_SETREF(op->func_name, &_Py_STR(empty));
  ------------------
  |  |  354|  2.62k|    do { \
  |  |  355|  2.62k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  2.62k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  2.62k|        *_tmp_dst_ptr = (src); \
  |  |  358|  2.62k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  2.62k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1200|  2.62k|    Py_SETREF(op->func_qualname, &_Py_STR(empty));
  ------------------
  |  |  354|  2.62k|    do { \
  |  |  355|  2.62k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  2.62k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.62k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  2.62k|        *_tmp_dst_ptr = (src); \
  |  |  358|  2.62k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  2.62k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  2.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 2.62k]
  |  |  ------------------
  ------------------
 1201|  2.62k|    return 0;
 1202|  2.62k|}
funcobject.c:func_get_code:
  645|      4|{
  646|      4|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|      4|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (646:28): [True: 4, False: 0]
  ------------------
  647|      4|    if (PySys_Audit("object.__getattr__", "Os", op, "__code__") < 0) {
  ------------------
  |  Branch (647:9): [True: 0, False: 4]
  ------------------
  648|      0|        return NULL;
  649|      0|    }
  650|       |
  651|      4|    return Py_NewRef(op->func_code);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  652|      4|}
funcobject.c:function___annotate___get_impl:
  919|      5|{
  920|      5|    if (self->func_annotate == NULL) {
  ------------------
  |  Branch (920:9): [True: 5, False: 0]
  ------------------
  921|      5|        Py_RETURN_NONE;
  ------------------
  |  |  628|      5|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      5|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  922|      5|    }
  923|      0|    return Py_NewRef(self->func_annotate);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  924|      5|}
funcobject.c:function___annotate___set_impl:
  935|      3|{
  936|      3|    if (Py_IsNone(value)) {
  ------------------
  |  |  621|      3|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|      3|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 3, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  937|      3|        Py_XSETREF(self->func_annotate, Py_NewRef(value));
  ------------------
  |  |  376|      3|    do { \
  |  |  377|      3|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      3|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      3|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      3|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      3|        *_tmp_dst_ptr = (src); \
  |  |  380|      3|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      3|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 3]
  |  |  ------------------
  ------------------
  938|      3|        return 0;
  939|      3|    }
  940|      0|    else if (PyCallable_Check(value)) {
  ------------------
  |  Branch (940:14): [True: 0, False: 0]
  ------------------
  941|      0|        Py_XSETREF(self->func_annotate, Py_NewRef(value));
  ------------------
  |  |  376|      0|    do { \
  |  |  377|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      0|        *_tmp_dst_ptr = (src); \
  |  |  380|      0|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  942|      0|        Py_CLEAR(self->func_annotations);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  943|      0|        return 0;
  944|      0|    }
  945|      0|    else {
  946|      0|        PyErr_SetString(PyExc_TypeError,
  947|      0|            "__annotate__ must be callable or None");
  948|      0|        return -1;
  949|      0|    }
  950|      3|}
funcobject.c:func_get_doc:
  765|    225|{
  766|    225|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|    225|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|    225|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (766:28): [True: 225, False: 0]
  ------------------
  767|      0|    PyObject *doc = op->func_doc;
  768|    225|    if (doc == NULL) {
  ------------------
  |  Branch (768:9): [True: 0, False: 225]
  ------------------
  769|      0|        doc = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  770|      0|    }
  771|    225|    return Py_NewRef(doc);
  ------------------
  |  |  550|    225|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    225|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    225|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  772|    225|}
funcobject.c:func_set_doc:
  776|     33|{
  777|       |    /* Legal to del f.__doc__ or to set it to any object. */
  778|     33|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|     33|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (778:28): [True: 33, False: 0]
  ------------------
  779|      0|    PyInterpreterState *interp = _PyInterpreterState_GET();
  780|     33|    _PyEval_StopTheWorld(interp);
  781|     33|    PyObject *old_doc = op->func_doc;
  782|     33|    op->func_doc = Py_XNewRef(value);
  ------------------
  |  |  551|     33|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  783|     33|    _PyEval_StartTheWorld(interp);
  784|     33|    Py_XDECREF(old_doc);
  ------------------
  |  |  524|     33|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|     33|    return 0;
  786|     33|}
funcobject.c:func_get_module:
  790|    182|{
  791|    182|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|    182|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|    182|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (791:28): [True: 182, False: 0]
  ------------------
  792|      0|    PyObject *module = op->func_module;
  793|    182|    if (module == NULL) {
  ------------------
  |  Branch (793:9): [True: 0, False: 182]
  ------------------
  794|      0|        module = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  795|      0|    }
  796|    182|    return Py_NewRef(module);
  ------------------
  |  |  550|    182|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    182|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    182|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  797|    182|}
funcobject.c:func_set_module:
  801|     24|{
  802|       |    /* Legal to del f.__module__ or to set it to any object. */
  803|     24|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|     24|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (803:28): [True: 24, False: 0]
  ------------------
  804|      0|    PyInterpreterState *interp = _PyInterpreterState_GET();
  805|     24|    _PyEval_StopTheWorld(interp);
  806|     24|    PyObject *old_module = op->func_module;
  807|     24|    op->func_module = Py_XNewRef(value);
  ------------------
  |  |  551|     24|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|     24|    _PyEval_StartTheWorld(interp);
  809|     24|    Py_XDECREF(old_module);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|     24|    return 0;
  811|     24|}
funcobject.c:func_get_name:
  710|    200|{
  711|    200|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|    200|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|    200|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (711:28): [True: 200, False: 0]
  ------------------
  712|    200|    return Py_NewRef(op->func_name);
  ------------------
  |  |  550|    200|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    200|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    200|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|    200|}
funcobject.c:func_set_name:
  717|     25|{
  718|     25|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|     25|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (718:28): [True: 25, False: 0]
  ------------------
  719|       |    /* Not legal to del f.func_name or to set it to anything
  720|       |     * other than a string object. */
  721|     25|    if (value == NULL || !PyUnicode_Check(value)) {
  ------------------
  |  |  103|     25|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     25|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (721:9): [True: 0, False: 25]
  |  Branch (721:26): [True: 0, False: 25]
  ------------------
  722|      0|        PyErr_SetString(PyExc_TypeError,
  723|      0|                        "__name__ must be set to a string object");
  724|      0|        return -1;
  725|      0|    }
  726|     25|    PyInterpreterState *interp = _PyInterpreterState_GET();
  727|     25|    _PyEval_StopTheWorld(interp);
  728|     25|    PyObject *old_name = op->func_name;
  729|     25|    op->func_name = Py_NewRef(value);
  ------------------
  |  |  550|     25|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|     25|    _PyEval_StartTheWorld(interp);
  731|     25|    Py_XDECREF(old_name);
  ------------------
  |  |  524|     25|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|     25|    return 0;
  733|     25|}
funcobject.c:func_get_qualname:
  737|    182|{
  738|    182|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|    182|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|    182|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (738:28): [True: 182, False: 0]
  ------------------
  739|    182|    return Py_NewRef(op->func_qualname);
  ------------------
  |  |  550|    182|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    182|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    182|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  740|    182|}
funcobject.c:func_set_qualname:
  744|     40|{
  745|     40|    PyFunctionObject *op = _PyFunction_CAST(self);
  ------------------
  |  |   86|     40|    (assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))
  |  |  ------------------
  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (745:28): [True: 40, False: 0]
  ------------------
  746|       |    /* Not legal to del f.__qualname__ or to set it to anything
  747|       |     * other than a string object. */
  748|     40|    if (value == NULL || !PyUnicode_Check(value)) {
  ------------------
  |  |  103|     40|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     40|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (748:9): [True: 0, False: 40]
  |  Branch (748:26): [True: 0, False: 40]
  ------------------
  749|      0|        PyErr_SetString(PyExc_TypeError,
  750|      0|                        "__qualname__ must be set to a string object");
  751|      0|        return -1;
  752|      0|    }
  753|     40|    handle_func_event(PyFunction_EVENT_MODIFY_QUALNAME, (PyFunctionObject *) op, value);
  754|     40|    PyInterpreterState *interp = _PyInterpreterState_GET();
  755|     40|    _PyEval_StopTheWorld(interp);
  756|     40|    PyObject *old_qualname = op->func_qualname;
  757|     40|    op->func_qualname = Py_NewRef(value);
  ------------------
  |  |  550|     40|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  758|     40|    _PyEval_StartTheWorld(interp);
  759|     40|    Py_XDECREF(old_qualname);
  ------------------
  |  |  524|     40|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|     40|    return 0;
  761|     40|}
funcobject.c:function___type_params___get_impl:
 1012|      5|{
 1013|      5|    if (self->func_typeparams == NULL) {
  ------------------
  |  Branch (1013:9): [True: 5, False: 0]
  ------------------
 1014|      5|        return PyTuple_New(0);
 1015|      5|    }
 1016|       |
 1017|      5|    assert(PyTuple_Check(self->func_typeparams));
  ------------------
  |  Branch (1017:5): [True: 0, False: 0]
  ------------------
 1018|      0|    return Py_NewRef(self->func_typeparams);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1019|      0|}
funcobject.c:function___type_params___set_impl:
 1031|      3|{
 1032|      3|    Py_XSETREF(self->func_typeparams, Py_NewRef(value));
  ------------------
  |  |  376|      3|    do { \
  |  |  377|      3|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      3|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|      3|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      3|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|      3|        *_tmp_dst_ptr = (src); \
  |  |  380|      3|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|      3|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 3]
  |  |  ------------------
  ------------------
 1033|      3|    return 0;
 1034|      3|}
funcobject.c:func_descr_get:
 1255|    745|{
 1256|    745|    if (obj == Py_None || obj == NULL) {
  ------------------
  |  |  616|  1.49k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1256:9): [True: 0, False: 745]
  |  Branch (1256:27): [True: 221, False: 524]
  ------------------
 1257|    221|        return Py_NewRef(func);
  ------------------
  |  |  550|    221|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    221|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    221|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1258|    221|    }
 1259|    524|    return PyMethod_New(func, obj);
 1260|    745|}
funcobject.c:cm_dealloc:
 1493|      3|{
 1494|      3|    classmethod *cm = _PyClassMethod_CAST(self);
  ------------------
  |  | 1488|      3|    (assert(PyObject_TypeCheck((cm), &PyClassMethod_Type)), \
  |  | 1489|      3|     _Py_CAST(classmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1494:23): [True: 3, False: 0]
  ------------------
 1495|      3|    _PyObject_GC_UNTRACK((PyObject *)cm);
  ------------------
  |  |  507|      3|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1496|      3|    Py_XDECREF(cm->cm_callable);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1497|      3|    Py_XDECREF(cm->cm_dict);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1498|      3|    Py_TYPE(cm)->tp_free((PyObject *)cm);
  ------------------
  |  |  213|      3|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1499|      3|}
funcobject.c:cm_traverse:
 1503|  1.28k|{
 1504|  1.28k|    classmethod *cm = _PyClassMethod_CAST(self);
  ------------------
  |  | 1488|  1.28k|    (assert(PyObject_TypeCheck((cm), &PyClassMethod_Type)), \
  |  | 1489|  1.28k|     _Py_CAST(classmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|  1.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1504:23): [True: 1.28k, False: 0]
  ------------------
 1505|  1.28k|    Py_VISIT(cm->cm_callable);
  ------------------
  |  |  194|  1.28k|    do {                                                                \
  |  |  195|  1.28k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.28k, False: 0]
  |  |  ------------------
  |  |  196|  1.28k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.28k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  198|  1.28k|                return vret;                                            \
  |  |  199|  1.28k|        }                                                               \
  |  |  200|  1.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.28k]
  |  |  ------------------
  ------------------
 1506|  1.28k|    Py_VISIT(cm->cm_dict);
  ------------------
  |  |  194|  1.28k|    do {                                                                \
  |  |  195|  1.28k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.28k, False: 0]
  |  |  ------------------
  |  |  196|  1.28k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.28k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  198|  1.28k|                return vret;                                            \
  |  |  199|  1.28k|        }                                                               \
  |  |  200|  1.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.28k]
  |  |  ------------------
  ------------------
 1507|  1.28k|    return 0;
 1508|  1.28k|}
funcobject.c:cm_clear:
 1512|      2|{
 1513|      2|    classmethod *cm = _PyClassMethod_CAST(self);
  ------------------
  |  | 1488|      2|    (assert(PyObject_TypeCheck((cm), &PyClassMethod_Type)), \
  |  | 1489|      2|     _Py_CAST(classmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1513:23): [True: 2, False: 0]
  ------------------
 1514|      2|    Py_CLEAR(cm->cm_callable);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1515|       |    Py_CLEAR(cm->cm_dict);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1516|      2|    return 0;
 1517|      2|}
funcobject.c:cm_get___isabstractmethod__:
 1588|     58|{
 1589|     58|    classmethod *cm = _PyClassMethod_CAST(self);
  ------------------
  |  | 1488|     58|    (assert(PyObject_TypeCheck((cm), &PyClassMethod_Type)), \
  |  | 1489|     58|     _Py_CAST(classmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|     58|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1589:23): [True: 58, False: 0]
  ------------------
 1590|      0|    int res = _PyObject_IsAbstract(cm->cm_callable);
 1591|     58|    if (res == -1) {
  ------------------
  |  Branch (1591:9): [True: 0, False: 58]
  ------------------
 1592|      0|        return NULL;
 1593|      0|    }
 1594|     58|    else if (res) {
  ------------------
  |  Branch (1594:14): [True: 0, False: 58]
  ------------------
 1595|      0|        Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1596|      0|    }
 1597|     58|    Py_RETURN_FALSE;
  ------------------
  |  |   45|     58|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|     58|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     58|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     58|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1598|     58|}
funcobject.c:cm_descr_get:
 1522|  1.80k|{
 1523|  1.80k|    classmethod *cm = (classmethod *)self;
 1524|  1.80k|    if (type == NULL)
  ------------------
  |  Branch (1524:9): [True: 0, False: 1.80k]
  ------------------
 1525|      0|        type = (PyObject *)(Py_TYPE(obj));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1526|  1.80k|    return PyMethod_New(cm->cm_callable, type);
 1527|  1.80k|}
funcobject.c:cm_init:
 1567|    112|{
 1568|    112|    if (!_PyArg_NoKeywords("classmethod", kwds)) {
  ------------------
  |  |   25|    112|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 112, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1569|      0|        return -1;
 1570|      0|    }
 1571|    112|    PyObject *callable;  // borrowed ref
 1572|    112|    if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable)) {
  ------------------
  |  Branch (1572:9): [True: 0, False: 112]
  ------------------
 1573|      0|        return -1;
 1574|      0|    }
 1575|       |
 1576|    112|    classmethod *cm = (classmethod *)self;
 1577|    112|    return cm_set_callable(cm, callable);
 1578|    112|}
funcobject.c:cm_new:
 1544|    112|{
 1545|    112|    if (!_PyArg_NoKeywords("classmethod", kwds)) {
  ------------------
  |  |   25|    112|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 112, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1546|      0|        return NULL;
 1547|      0|    }
 1548|    112|    PyObject *callable;  // borrowed ref
 1549|    112|    if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable)) {
  ------------------
  |  Branch (1549:9): [True: 0, False: 112]
  ------------------
 1550|      0|        return NULL;
 1551|      0|    }
 1552|       |
 1553|    112|    classmethod *cm = (classmethod *)PyType_GenericAlloc(type, 0);
 1554|    112|    if (cm == NULL) {
  ------------------
  |  Branch (1554:9): [True: 0, False: 112]
  ------------------
 1555|      0|        return NULL;
 1556|      0|    }
 1557|    112|    _PyObject_SetDeferredRefcount((PyObject *)cm);
 1558|    112|    if (cm_set_callable(cm, callable) < 0) {
  ------------------
  |  Branch (1558:9): [True: 0, False: 112]
  ------------------
 1559|      0|        Py_DECREF(cm);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1560|      0|        return NULL;
 1561|      0|    }
 1562|    112|    return (PyObject *)cm;
 1563|    112|}
funcobject.c:cm_set_callable:
 1531|    225|{
 1532|    225|    assert(callable != NULL);
  ------------------
  |  Branch (1532:5): [True: 225, False: 0]
  ------------------
 1533|    225|    if (cm->cm_callable == callable) {
  ------------------
  |  Branch (1533:9): [True: 112, False: 113]
  ------------------
 1534|       |        // cm_init() sets the same callable than cm_new()
 1535|    112|        return 0;
 1536|    112|    }
 1537|       |
 1538|    113|    Py_XSETREF(cm->cm_callable, Py_NewRef(callable));
  ------------------
  |  |  376|    113|    do { \
  |  |  377|    113|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    113|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    113|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    113|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    113|        *_tmp_dst_ptr = (src); \
  |  |  380|    113|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    113|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    113|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    113|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    113|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 113]
  |  |  ------------------
  ------------------
 1539|    113|    return functools_wraps((PyObject *)cm, cm->cm_callable);
 1540|    225|}
funcobject.c:functools_wraps:
 1379|    166|{
 1380|    166|#define COPY_ATTR(ATTR) \
 1381|    166|    do { \
 1382|    166|        if (functools_copy_attr(wrapper, wrapped, &_Py_ID(ATTR)) < 0) { \
 1383|    166|            return -1; \
 1384|    166|        } \
 1385|    166|    } while (0) \
 1386|    166|
 1387|    166|    COPY_ATTR(__module__);
  ------------------
  |  | 1381|    166|    do { \
  |  | 1382|    166|        if (functools_copy_attr(wrapper, wrapped, &_Py_ID(ATTR)) < 0) { \
  |  |  ------------------
  |  |  |  |  936|    166|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    166|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    166|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1382:13): [True: 0, False: 166]
  |  |  ------------------
  |  | 1383|      0|            return -1; \
  |  | 1384|      0|        } \
  |  | 1385|    166|    } while (0) \
  |  |  ------------------
  |  |  |  Branch (1385:14): [Folded, False: 166]
  |  |  ------------------
  ------------------
 1388|    166|    COPY_ATTR(__name__);
  ------------------
  |  | 1381|    166|    do { \
  |  | 1382|    166|        if (functools_copy_attr(wrapper, wrapped, &_Py_ID(ATTR)) < 0) { \
  |  |  ------------------
  |  |  |  |  936|    166|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    166|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    166|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1382:13): [True: 0, False: 166]
  |  |  ------------------
  |  | 1383|      0|            return -1; \
  |  | 1384|      0|        } \
  |  | 1385|    166|    } while (0) \
  |  |  ------------------
  |  |  |  Branch (1385:14): [Folded, False: 166]
  |  |  ------------------
  ------------------
 1389|    166|    COPY_ATTR(__qualname__);
  ------------------
  |  | 1381|    166|    do { \
  |  | 1382|    166|        if (functools_copy_attr(wrapper, wrapped, &_Py_ID(ATTR)) < 0) { \
  |  |  ------------------
  |  |  |  |  936|    166|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    166|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    166|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1382:13): [True: 0, False: 166]
  |  |  ------------------
  |  | 1383|      0|            return -1; \
  |  | 1384|      0|        } \
  |  | 1385|    166|    } while (0) \
  |  |  ------------------
  |  |  |  Branch (1385:14): [Folded, False: 166]
  |  |  ------------------
  ------------------
 1390|    166|    COPY_ATTR(__doc__);
  ------------------
  |  | 1381|    166|    do { \
  |  | 1382|    166|        if (functools_copy_attr(wrapper, wrapped, &_Py_ID(ATTR)) < 0) { \
  |  |  ------------------
  |  |  |  |  936|    166|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    166|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    166|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1382:13): [True: 0, False: 166]
  |  |  ------------------
  |  | 1383|      0|            return -1; \
  |  | 1384|      0|        } \
  |  | 1385|    166|    } while (0) \
  |  |  ------------------
  |  |  |  Branch (1385:14): [Folded, False: 166]
  |  |  ------------------
  ------------------
 1391|    166|    return 0;
 1392|       |
 1393|    166|#undef COPY_ATTR
 1394|    166|}
funcobject.c:functools_copy_attr:
 1366|    664|{
 1367|    664|    PyObject *value;
 1368|    664|    int res = PyObject_GetOptionalAttr(wrapped, name, &value);
 1369|    664|    if (value != NULL) {
  ------------------
  |  Branch (1369:9): [True: 664, False: 0]
  ------------------
 1370|    664|        res = PyObject_SetAttr(wrapper, name, value);
 1371|    664|        Py_DECREF(value);
  ------------------
  |  |  430|    664|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    664|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    664|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1372|    664|    }
 1373|    664|    return res;
 1374|    664|}
funcobject.c:sm_dealloc:
 1758|      4|{
 1759|      4|    staticmethod *sm = _PyStaticMethod_CAST(self);
  ------------------
  |  | 1753|      4|    (assert(PyObject_TypeCheck((cm), &PyStaticMethod_Type)), \
  |  | 1754|      4|     _Py_CAST(staticmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1759:24): [True: 4, False: 0]
  ------------------
 1760|      4|    _PyObject_GC_UNTRACK((PyObject *)sm);
  ------------------
  |  |  507|      4|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|      4|    Py_XDECREF(sm->sm_callable);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1762|      4|    Py_XDECREF(sm->sm_dict);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1763|      4|    Py_TYPE(sm)->tp_free((PyObject *)sm);
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1764|      4|}
funcobject.c:sm_traverse:
 1768|    608|{
 1769|    608|    staticmethod *sm = _PyStaticMethod_CAST(self);
  ------------------
  |  | 1753|    608|    (assert(PyObject_TypeCheck((cm), &PyStaticMethod_Type)), \
  |  | 1754|    608|     _Py_CAST(staticmethod*, cm))
  |  |  ------------------
  |  |  |  |   37|    608|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1769:24): [True: 608, False: 0]
  ------------------
 1770|    608|    Py_VISIT(sm->sm_callable);
  ------------------
  |  |  194|    608|    do {                                                                \
  |  |  195|    608|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 608, False: 0]
  |  |  ------------------
  |  |  196|    608|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    608|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    608|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    608|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 608]
  |  |  ------------------
  |  |  198|    608|                return vret;                                            \
  |  |  199|    608|        }                                                               \
  |  |  200|    608|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 608]
  |  |  ------------------
  ------------------
 1771|    608|    Py_VISIT(sm->sm_dict);
  ------------------
  |  |  194|    608|    do {                                                                \
  |  |  195|    608|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 608, False: 0]
  |  |  ------------------
  |  |  196|    608|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    608|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    608|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    608|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 608]
  |  |  ------------------
  |  |  198|    608|                return vret;                                            \
  |  |  199|    608|        }                                                               \
  |  |  200|    608|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 608]
  |  |  ------------------
  ------------------
 1772|    608|    return 0;
 1773|    608|}
funcobject.c:sm_descr_get:
 1786|    369|{
 1787|    369|    staticmethod *sm = (staticmethod *)self;
 1788|    369|    return Py_NewRef(sm->sm_callable);
  ------------------
  |  |  550|    369|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    369|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    369|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1789|    369|}
funcobject.c:sm_init:
 1829|     25|{
 1830|     25|    if (!_PyArg_NoKeywords("staticmethod", kwds)) {
  ------------------
  |  |   25|     25|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 25, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1831|      0|        return -1;
 1832|      0|    }
 1833|     25|    PyObject *callable;  // borrowed ref
 1834|     25|    if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable)) {
  ------------------
  |  Branch (1834:9): [True: 0, False: 25]
  ------------------
 1835|      0|        return -1;
 1836|      0|    }
 1837|       |
 1838|     25|    staticmethod *sm = (staticmethod *)self;
 1839|     25|    return sm_set_callable(sm, callable);
 1840|     25|}
funcobject.c:sm_new:
 1806|     25|{
 1807|     25|    if (!_PyArg_NoKeywords("staticmethod", kwds)) {
  ------------------
  |  |   25|     25|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 25, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1808|      0|        return NULL;
 1809|      0|    }
 1810|     25|    PyObject *callable;  // borrowed ref
 1811|     25|    if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable)) {
  ------------------
  |  Branch (1811:9): [True: 0, False: 25]
  ------------------
 1812|      0|        return NULL;
 1813|      0|    }
 1814|       |
 1815|     25|    staticmethod *sm = (staticmethod *)PyType_GenericAlloc(type, 0);
 1816|     25|    if (sm == NULL) {
  ------------------
  |  Branch (1816:9): [True: 0, False: 25]
  ------------------
 1817|      0|        return NULL;
 1818|      0|    }
 1819|     25|    _PyObject_SetDeferredRefcount((PyObject *)sm);
 1820|     25|    if (sm_set_callable(sm, callable) < 0) {
  ------------------
  |  Branch (1820:9): [True: 0, False: 25]
  ------------------
 1821|      0|        Py_DECREF(sm);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1822|      0|        return NULL;
 1823|      0|    }
 1824|     25|    return (PyObject *)sm;
 1825|     25|}
funcobject.c:sm_set_callable:
 1793|     78|{
 1794|     78|    assert(callable != NULL);
  ------------------
  |  Branch (1794:5): [True: 78, False: 0]
  ------------------
 1795|     78|    if (sm->sm_callable == callable) {
  ------------------
  |  Branch (1795:9): [True: 25, False: 53]
  ------------------
 1796|       |        // sm_init() sets the same callable than sm_new()
 1797|     25|        return 0;
 1798|     25|    }
 1799|       |
 1800|     53|    Py_XSETREF(sm->sm_callable, Py_NewRef(callable));
  ------------------
  |  |  376|     53|    do { \
  |  |  377|     53|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     53|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     53|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     53|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     53|        *_tmp_dst_ptr = (src); \
  |  |  380|     53|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     53|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     53|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     53|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     53|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 53]
  |  |  ------------------
  ------------------
 1801|     53|    return functools_wraps((PyObject *)sm, sm->sm_callable);
 1802|     78|}

Py_GenericAlias:
 1093|     79|{
 1094|     79|    gaobject *alias = (gaobject*) PyType_GenericAlloc(
 1095|     79|            (PyTypeObject *)&Py_GenericAliasType, 0);
 1096|     79|    if (alias == NULL) {
  ------------------
  |  Branch (1096:9): [True: 0, False: 79]
  ------------------
 1097|      0|        return NULL;
 1098|      0|    }
 1099|     79|    if (!setup_ga(alias, origin, args)) {
  ------------------
  |  Branch (1099:9): [True: 0, False: 79]
  ------------------
 1100|      0|        Py_DECREF(alias);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|      0|        return NULL;
 1102|      0|    }
 1103|     79|    return (PyObject *)alias;
 1104|     79|}
genericaliasobject.c:ga_dealloc:
   34|      5|{
   35|      5|    gaobject *alias = (gaobject *)self;
   36|       |
   37|      5|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|      5|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   38|      5|    FT_CLEAR_WEAKREFS(self, alias->weakreflist);
  ------------------
  |  |   47|      5|    do {                                            \
  |  |   48|      5|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|      5|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 5]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|      5|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 5]
  |  |  ------------------
  ------------------
  |  Branch (38:5): [True: 5, False: 0]
  ------------------
   39|      5|    Py_XDECREF(alias->origin);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   40|      5|    Py_XDECREF(alias->args);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   41|      5|    Py_XDECREF(alias->parameters);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|      5|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|      5|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   43|      5|}
genericaliasobject.c:ga_traverse:
   47|  1.33k|{
   48|  1.33k|    gaobject *alias = (gaobject *)self;
   49|  1.33k|    Py_VISIT(alias->origin);
  ------------------
  |  |  194|  1.33k|    do {                                                                \
  |  |  195|  1.33k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.33k, False: 0]
  |  |  ------------------
  |  |  196|  1.33k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.33k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.33k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |  198|  1.33k|                return vret;                                            \
  |  |  199|  1.33k|        }                                                               \
  |  |  200|  1.33k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.33k]
  |  |  ------------------
  ------------------
   50|  1.33k|    Py_VISIT(alias->args);
  ------------------
  |  |  194|  1.33k|    do {                                                                \
  |  |  195|  1.33k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.33k, False: 0]
  |  |  ------------------
  |  |  196|  1.33k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.33k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.33k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |  198|  1.33k|                return vret;                                            \
  |  |  199|  1.33k|        }                                                               \
  |  |  200|  1.33k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.33k]
  |  |  ------------------
  ------------------
   51|  1.33k|    Py_VISIT(alias->parameters);
  ------------------
  |  |  194|  1.33k|    do {                                                                \
  |  |  195|  1.33k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|  1.33k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.33k]
  |  |  ------------------
  ------------------
   52|  1.33k|    return 0;
   53|  1.33k|}
genericaliasobject.c:setup_ga:
  906|     79|setup_ga(gaobject *alias, PyObject *origin, PyObject *args) {
  907|     79|    if (!PyTuple_Check(args)) {
  ------------------
  |  |   27|     79|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     79|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (907:9): [True: 79, False: 0]
  ------------------
  908|     79|        args = PyTuple_Pack(1, args);
  909|     79|        if (args == NULL) {
  ------------------
  |  Branch (909:13): [True: 0, False: 79]
  ------------------
  910|      0|            return 0;
  911|      0|        }
  912|     79|    }
  913|      0|    else {
  914|      0|        Py_INCREF(args);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  915|      0|    }
  916|       |
  917|     79|    alias->origin = Py_NewRef(origin);
  ------------------
  |  |  550|     79|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  918|     79|    alias->args = args;
  919|     79|    alias->parameters = NULL;
  920|     79|    alias->weakreflist = NULL;
  921|       |
  922|     79|    if (PyVectorcall_Function(origin) != NULL) {
  ------------------
  |  Branch (922:9): [True: 79, False: 0]
  ------------------
  923|     79|        alias->vectorcall = ga_vectorcall;
  924|     79|    }
  925|      0|    else {
  926|      0|        alias->vectorcall = NULL;
  927|      0|    }
  928|       |
  929|     79|    return 1;
  930|     79|}

_Py_MakeCoro:
 1130|  1.24k|{
 1131|  1.24k|    int coro_flags = ((PyCodeObject *)func->func_code)->co_flags &
 1132|  1.24k|        (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR);
  ------------------
  |  |  127|  1.24k|#define CO_GENERATOR    0x0020
  ------------------
                      (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR);
  ------------------
  |  |  131|  1.24k|#define CO_COROUTINE            0x0080
  ------------------
                      (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR);
  ------------------
  |  |  133|  1.24k|#define CO_ASYNC_GENERATOR      0x0200
  ------------------
 1133|  1.24k|    assert(coro_flags);
  ------------------
  |  Branch (1133:5): [True: 1.24k, False: 0]
  ------------------
 1134|  1.24k|    if (coro_flags == CO_GENERATOR) {
  ------------------
  |  |  127|  1.24k|#define CO_GENERATOR    0x0020
  ------------------
  |  Branch (1134:9): [True: 1.24k, False: 4]
  ------------------
 1135|  1.24k|        return make_gen(&PyGen_Type, func);
 1136|  1.24k|    }
 1137|      4|    if (coro_flags == CO_ASYNC_GENERATOR) {
  ------------------
  |  |  133|      4|#define CO_ASYNC_GENERATOR      0x0200
  ------------------
  |  Branch (1137:9): [True: 2, False: 2]
  ------------------
 1138|      2|        PyAsyncGenObject *ag;
 1139|      2|        ag = (PyAsyncGenObject *)make_gen(&PyAsyncGen_Type, func);
 1140|      2|        if (ag == NULL) {
  ------------------
  |  Branch (1140:13): [True: 0, False: 2]
  ------------------
 1141|      0|            return NULL;
 1142|      0|        }
 1143|      2|        ag->ag_origin_or_finalizer = NULL;
 1144|      2|        ag->ag_closed = 0;
 1145|      2|        ag->ag_hooks_inited = 0;
 1146|      2|        ag->ag_running_async = 0;
 1147|      2|        return (PyObject*)ag;
 1148|      2|    }
 1149|       |
 1150|      4|    assert (coro_flags == CO_COROUTINE);
  ------------------
  |  Branch (1150:5): [True: 2, False: 0]
  ------------------
 1151|      2|    PyObject *coro = make_gen(&PyCoro_Type, func);
 1152|      2|    if (!coro) {
  ------------------
  |  Branch (1152:9): [True: 0, False: 2]
  ------------------
 1153|      0|        return NULL;
 1154|      0|    }
 1155|      2|    PyThreadState *tstate = _PyThreadState_GET();
 1156|      2|    int origin_depth = tstate->coroutine_origin_tracking_depth;
 1157|       |
 1158|      2|    if (origin_depth == 0) {
  ------------------
  |  Branch (1158:9): [True: 2, False: 0]
  ------------------
 1159|      2|        ((PyCoroObject *)coro)->cr_origin_or_finalizer = NULL;
 1160|      2|    } else {
 1161|      0|        _PyInterpreterFrame *frame = tstate->current_frame;
 1162|      0|        assert(frame);
  ------------------
  |  Branch (1162:9): [True: 0, False: 0]
  ------------------
 1163|      0|        assert(_PyFrame_IsIncomplete(frame));
  ------------------
  |  Branch (1163:9): [True: 0, False: 0]
  ------------------
 1164|      0|        frame = _PyFrame_GetFirstComplete(frame->previous);
 1165|      0|        PyObject *cr_origin = _PyCoro_ComputeOrigin(origin_depth, frame);
 1166|      0|        ((PyCoroObject *)coro)->cr_origin_or_finalizer = cr_origin;
 1167|      0|        if (!cr_origin) {
  ------------------
  |  Branch (1167:13): [True: 0, False: 0]
  ------------------
 1168|      0|            Py_DECREF(coro);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1169|      0|            return NULL;
 1170|      0|        }
 1171|      0|    }
 1172|      2|    return coro;
 1173|      2|}
genobject.c:_PyGen_GetCode:
   69|     20|_PyGen_GetCode(PyGenObject *gen) {
   70|     20|    return _PyFrame_GetCode(&gen->gi_iframe);
   71|     20|}
genobject.c:gen_clear_frame:
  168|     12|{
  169|     12|    assert(FT_ATOMIC_LOAD_INT8_RELAXED(gen->gi_frame_state) == FRAME_CLEARED);
  ------------------
  |  Branch (169:5): [True: 12, False: 0]
  ------------------
  170|     12|    _PyInterpreterFrame *frame = &gen->gi_iframe;
  171|     12|    _PyThreadState_UpdateLastProfiledFrame(_PyThreadState_GET(), frame, frame->previous);
  ------------------
  |  |  326|     12|    do { \
  |  |  327|     12|        PyThreadState *tstate_ = (tstate); \
  |  |  328|     12|        _PyInterpreterFrame *frame_ = (frame); \
  |  |  329|     12|        if (tstate_->last_profiled_frame == frame_) { \
  |  |  ------------------
  |  |  |  Branch (329:13): [True: 0, False: 12]
  |  |  ------------------
  |  |  330|      0|            tstate_->last_profiled_frame = (previous); \
  |  |  331|      0|            tstate_->last_profiled_frame_seq++; \
  |  |  332|      0|        } \
  |  |  333|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (333:14): [Folded, False: 12]
  |  |  ------------------
  ------------------
  172|     12|    frame->previous = NULL;
  173|     12|    Py_BEGIN_CRITICAL_SECTION(gen);
  ------------------
  |  |   51|     12|    {
  ------------------
  174|     12|    _PyFrame_ClearExceptCode(frame);
  175|     12|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     12|    }
  ------------------
  176|     12|    _PyErr_ClearExcState(&gen->gi_exc_state);
  177|     12|}
genobject.c:gen_dealloc:
  209|  1.24k|{
  210|  1.24k|    PyGenObject *gen = _PyGen_CAST(self);
  ------------------
  |  |   33|  1.24k|    _Py_CAST(PyGenObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  211|       |
  212|  1.24k|    _PyObject_GC_UNTRACK(gen);
  ------------------
  |  |  507|  1.24k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|       |
  214|  1.24k|    FT_CLEAR_WEAKREFS(self, gen->gi_weakreflist);
  ------------------
  |  |   47|  1.24k|    do {                                            \
  |  |   48|  1.24k|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|  1.24k|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|  1.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  |  Branch (214:5): [True: 1.24k, False: 0]
  ------------------
  215|       |
  216|  1.24k|    _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|  1.24k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|       |
  218|  1.24k|    if (PyObject_CallFinalizerFromDealloc(self))
  ------------------
  |  Branch (218:9): [True: 0, False: 1.24k]
  ------------------
  219|      0|        return;                     /* resurrected.  :( */
  220|       |
  221|  1.24k|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|  1.24k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|  1.24k|    if (PyAsyncGen_CheckExact(gen)) {
  ------------------
  |  |   46|  1.24k|#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type)
  |  |  ------------------
  |  |  |  |  215|  1.24k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|       |        /* We have to handle this case for asynchronous generators
  224|       |           right here, because this code has to be between UNTRACK
  225|       |           and GC_Del. */
  226|      2|        Py_CLEAR(((PyAsyncGenObject*)gen)->ag_origin_or_finalizer);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  227|      2|    }
  228|  1.24k|    if (PyCoro_CheckExact(gen)) {
  ------------------
  |  |   31|  1.24k|#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type)
  |  |  ------------------
  |  |  |  |  215|  1.24k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|      2|        Py_CLEAR(((PyCoroObject *)gen)->cr_origin_or_finalizer);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  230|      2|    }
  231|  1.24k|    if (gen->gi_frame_state != FRAME_CLEARED) {
  ------------------
  |  Branch (231:9): [True: 0, False: 1.24k]
  ------------------
  232|      0|        gen->gi_frame_state = FRAME_CLEARED;
  233|      0|        gen_clear_frame(gen);
  234|      0|    }
  235|  1.24k|    assert(gen->gi_exc_state.exc_value == NULL);
  ------------------
  |  Branch (235:5): [True: 1.24k, False: 0]
  ------------------
  236|  1.24k|    PyStackRef_CLEAR(gen->gi_iframe.f_executable);
  ------------------
  |  |  732|  1.24k|    do { \
  |  |  733|  1.24k|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  1.24k|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  1.24k|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  1.24k|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  1.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  237|  1.24k|    Py_CLEAR(gen->gi_name);
  ------------------
  |  |  484|  1.24k|    do { \
  |  |  485|  1.24k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  1.24k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  1.24k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  1.24k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  1.24k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  1.24k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1.24k, False: 0]
  |  |  ------------------
  |  |  488|  1.24k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  1.24k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  1.24k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  1.24k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  1.24k|        } \
  |  |  491|  1.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  238|  1.24k|    Py_CLEAR(gen->gi_qualname);
  ------------------
  |  |  484|  1.24k|    do { \
  |  |  485|  1.24k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  1.24k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  1.24k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  1.24k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  1.24k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  1.24k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1.24k, False: 0]
  |  |  ------------------
  |  |  488|  1.24k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  1.24k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  1.24k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  1.24k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  1.24k|        } \
  |  |  491|  1.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  239|       |
  240|  1.24k|    PyObject_GC_Del(gen);
  241|  1.24k|}
genobject.c:gen_send_ex:
  333|  50.7k|{
  334|  50.7k|    *presult = NULL;
  335|  50.7k|    int8_t frame_state = FT_ATOMIC_LOAD_INT8_RELAXED(gen->gi_frame_state);
  ------------------
  |  |  156|  50.7k|#define FT_ATOMIC_LOAD_INT8_RELAXED(value) value
  ------------------
  336|  50.7k|    do {
  337|  50.7k|        if (frame_state == FRAME_CREATED && arg && arg != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (337:13): [True: 1.11k, False: 49.6k]
  |  Branch (337:45): [True: 0, False: 1.11k]
  |  Branch (337:52): [True: 0, False: 0]
  ------------------
  338|      0|            const char *msg = "can't send non-None value to a "
  339|      0|                                "just-started generator";
  340|      0|            if (PyCoro_CheckExact(gen)) {
  ------------------
  |  |   31|      0|#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|      0|                msg = NON_INIT_CORO_MSG;
  342|      0|            }
  343|      0|            else if (PyAsyncGen_CheckExact(gen)) {
  ------------------
  |  |   46|      0|#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|      0|                msg = "can't send non-None value to a "
  345|      0|                        "just-started async generator";
  346|      0|            }
  347|      0|            PyErr_SetString(PyExc_TypeError, msg);
  348|      0|            return PYGEN_ERROR;
  349|      0|        }
  350|  50.7k|        if (frame_state == FRAME_EXECUTING) {
  ------------------
  |  Branch (350:13): [True: 0, False: 50.7k]
  ------------------
  351|      0|            gen_raise_already_executing_error(gen);
  352|      0|            return PYGEN_ERROR;
  353|      0|        }
  354|  50.7k|        if (FRAME_STATE_FINISHED(frame_state)) {
  ------------------
  |  |   58|  50.7k|#define FRAME_STATE_FINISHED(S) ((S) == FRAME_CLEARED)
  |  |  ------------------
  |  |  |  Branch (58:33): [True: 0, False: 50.7k]
  |  |  ------------------
  ------------------
  355|      0|            if (PyCoro_CheckExact(gen)) {
  ------------------
  |  |   31|      0|#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|       |                /* `gen` is an exhausted coroutine: raise an error,
  357|       |                except when called from gen_close(), which should
  358|       |                always be a silent method. */
  359|      0|                PyErr_SetString(
  360|      0|                    PyExc_RuntimeError,
  361|      0|                    "cannot reuse already awaited coroutine");
  362|      0|            }
  363|      0|            else if (arg) {
  ------------------
  |  Branch (363:22): [True: 0, False: 0]
  ------------------
  364|       |                /* `gen` is an exhausted generator:
  365|       |                only return value if called from send(). */
  366|      0|                *presult = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  367|      0|                return PYGEN_RETURN;
  368|      0|            }
  369|      0|            return PYGEN_ERROR;
  370|      0|        }
  371|       |
  372|  50.7k|        assert((frame_state == FRAME_CREATED) ||
  ------------------
  |  Branch (372:9): [True: 49.6k, False: 0]
  |  Branch (372:9): [True: 49.6k, False: 0]
  |  Branch (372:9): [True: 1.11k, False: 49.6k]
  ------------------
  373|  50.7k|               FRAME_STATE_SUSPENDED(frame_state));
  374|  50.7k|    } while (!_Py_GEN_TRY_SET_FRAME_STATE(gen, frame_state, FRAME_EXECUTING));
  ------------------
  |  |   57|  50.7k|    ((gen)->gi_frame_state = (state), true)
  ------------------
  |  Branch (374:14): [True: 0, False: 50.7k]
  ------------------
  375|       |
  376|  50.7k|    return gen_send_ex2(gen, arg, presult, 0);
  377|  50.7k|}
genobject.c:gen_send_ex2:
  263|  50.7k|{
  264|  50.7k|    assert(FT_ATOMIC_LOAD_INT8_RELAXED(gen->gi_frame_state) == FRAME_EXECUTING);
  ------------------
  |  Branch (264:5): [True: 50.7k, False: 0]
  ------------------
  265|       |
  266|  50.7k|    PyThreadState *tstate = _PyThreadState_GET();
  267|  50.7k|    _PyInterpreterFrame *frame = &gen->gi_iframe;
  268|       |
  269|       |    /* Push arg onto the frame's value stack */
  270|  50.7k|    PyObject *arg_obj = arg ? arg : Py_None;
  ------------------
  |  |  616|  50.7k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (270:25): [True: 0, False: 50.7k]
  ------------------
  271|  50.7k|    _PyFrame_StackPush(frame, PyStackRef_FromPyObjectNew(arg_obj));
  ------------------
  |  |  611|  50.7k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  50.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|       |
  273|  50.7k|    _PyErr_StackItem *prev_exc_info = tstate->exc_info;
  274|  50.7k|    gen->gi_exc_state.previous_item = prev_exc_info;
  275|  50.7k|    tstate->exc_info = &gen->gi_exc_state;
  276|       |
  277|  50.7k|    if (exc) {
  ------------------
  |  Branch (277:9): [True: 0, False: 50.7k]
  ------------------
  278|      0|        assert(_PyErr_Occurred(tstate));
  ------------------
  |  Branch (278:9): [True: 0, False: 0]
  ------------------
  279|      0|        _PyErr_ChainStackItem();
  280|      0|    }
  281|       |
  282|  50.7k|    EVAL_CALL_STAT_INC(EVAL_CALL_GENERATOR);
  ------------------
  |  |   79|  50.7k|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
  283|  50.7k|    PyObject *result = _PyEval_EvalFrame(tstate, frame, exc);
  284|  50.7k|    assert(tstate->exc_info == prev_exc_info);
  ------------------
  |  Branch (284:5): [True: 50.7k, False: 0]
  ------------------
  285|  50.7k|#ifndef Py_GIL_DISABLED
  286|  50.7k|    assert(gen->gi_exc_state.previous_item == NULL);
  ------------------
  |  Branch (286:5): [True: 50.7k, False: 0]
  ------------------
  287|  50.7k|    assert(frame->previous == NULL);
  ------------------
  |  Branch (287:5): [True: 50.7k, False: 0]
  ------------------
  288|  50.7k|    assert(gen->gi_frame_state != FRAME_EXECUTING);
  ------------------
  |  Branch (288:5): [True: 50.7k, False: 0]
  ------------------
  289|  50.7k|#endif
  290|       |
  291|       |    // The generator_return_kind field is used to distinguish between a
  292|       |    // yield and a return from within _PyEval_EvalFrame(). Earlier versions
  293|       |    // of CPython (prior to 3.15) used gi_frame_state for this purpose, but
  294|       |    // that requires the GIL for thread-safety.
  295|  50.7k|    int return_kind = ((_PyThreadStateImpl *)tstate)->generator_return_kind;
  296|       |
  297|  50.7k|    if (return_kind == GENERATOR_YIELD) {
  ------------------
  |  Branch (297:9): [True: 49.6k, False: 1.10k]
  ------------------
  298|  49.6k|        assert(result != NULL && !_PyErr_Occurred(tstate));
  ------------------
  |  Branch (298:9): [True: 49.6k, False: 0]
  |  Branch (298:9): [True: 49.6k, False: 0]
  ------------------
  299|  49.6k|#ifndef Py_GIL_DISABLED
  300|  49.6k|        assert(FRAME_STATE_SUSPENDED(gen->gi_frame_state));
  ------------------
  |  Branch (300:9): [True: 49.6k, False: 0]
  |  Branch (300:9): [True: 49.6k, False: 0]
  ------------------
  301|  49.6k|#endif
  302|  49.6k|        *presult = result;
  303|  49.6k|        return PYGEN_NEXT;
  304|  49.6k|    }
  305|       |
  306|  50.7k|    assert(return_kind == GENERATOR_RETURN);
  ------------------
  |  Branch (306:5): [True: 1.10k, False: 0]
  ------------------
  307|  1.10k|    assert(gen->gi_exc_state.exc_value == NULL);
  ------------------
  |  Branch (307:5): [True: 1.10k, False: 0]
  ------------------
  308|  1.10k|    assert(FT_ATOMIC_LOAD_INT8_RELAXED(gen->gi_frame_state) == FRAME_CLEARED);
  ------------------
  |  Branch (308:5): [True: 1.10k, False: 0]
  ------------------
  309|       |
  310|       |    /* If the generator just returned (as opposed to yielding), signal
  311|       |     * that the generator is exhausted. */
  312|  1.10k|    if (result) {
  ------------------
  |  Branch (312:9): [True: 1.10k, False: 0]
  ------------------
  313|  1.10k|        assert(result == Py_None || !PyAsyncGen_CheckExact(gen));
  ------------------
  |  Branch (313:9): [True: 1.10k, False: 0]
  |  Branch (313:9): [True: 0, False: 0]
  ------------------
  314|  1.10k|        if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) {
  ------------------
  |  |  616|  2.20k|#  define Py_None (&_Py_NoneStruct)
  ------------------
                      if (result == Py_None && !PyAsyncGen_CheckExact(gen) && !arg) {
  ------------------
  |  |   46|  1.10k|#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type)
  |  |  ------------------
  |  |  |  |  215|  2.20k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (314:13): [True: 1.10k, False: 0]
  |  Branch (314:34): [True: 1.10k, False: 0]
  |  Branch (314:65): [True: 1.10k, False: 0]
  ------------------
  315|       |            /* Return NULL if called by gen_iternext() */
  316|  1.10k|            Py_CLEAR(result);
  ------------------
  |  |  484|  1.10k|    do { \
  |  |  485|  1.10k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  1.10k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  1.10k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  1.10k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  1.10k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  1.10k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1.10k, False: 0]
  |  |  ------------------
  |  |  488|  1.10k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  1.10k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  1.10k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  1.10k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  1.10k|        } \
  |  |  491|  1.10k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1.10k]
  |  |  ------------------
  ------------------
  317|  1.10k|        }
  318|  1.10k|    }
  319|      0|    else {
  320|      0|        assert(!PyErr_ExceptionMatches(PyExc_StopIteration));
  ------------------
  |  Branch (320:9): [True: 0, False: 0]
  ------------------
  321|      0|        assert(!PyAsyncGen_CheckExact(gen) ||
  ------------------
  |  Branch (321:9): [True: 0, False: 0]
  |  Branch (321:9): [True: 0, False: 0]
  ------------------
  322|      0|            !PyErr_ExceptionMatches(PyExc_StopAsyncIteration));
  323|      0|    }
  324|       |
  325|  1.10k|    *presult = result;
  326|  1.10k|    return result ? PYGEN_RETURN : PYGEN_ERROR;
  ------------------
  |  Branch (326:12): [True: 0, False: 1.10k]
  ------------------
  327|  1.10k|}
genobject.c:gen_iternext:
  764|  50.7k|{
  765|  50.7k|    assert(PyGen_CheckExact(self) || PyCoro_CheckExact(self));
  ------------------
  |  Branch (765:5): [True: 50.7k, False: 0]
  |  Branch (765:5): [True: 0, False: 0]
  ------------------
  766|  50.7k|    PyGenObject *gen = _PyGen_CAST(self);
  ------------------
  |  |   33|  50.7k|    _Py_CAST(PyGenObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  50.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  767|       |
  768|  50.7k|    PyObject *result;
  769|  50.7k|    if (gen_send_ex(gen, NULL, &result) == PYGEN_RETURN) {
  ------------------
  |  Branch (769:9): [True: 0, False: 50.7k]
  ------------------
  770|      0|        if (result != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (770:13): [True: 0, False: 0]
  ------------------
  771|      0|            _PyGen_SetStopIterationValue(result);
  772|      0|        }
  773|       |        Py_CLEAR(result);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  774|      0|    }
  775|  50.7k|    return result;
  776|  50.7k|}
genobject.c:gen_close:
  467|     12|{
  468|     12|    PyGenObject *gen = _PyGen_CAST(self);
  ------------------
  |  |   33|     12|    _Py_CAST(PyGenObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  469|       |
  470|     12|    int8_t frame_state = FT_ATOMIC_LOAD_INT8_RELAXED(gen->gi_frame_state);
  ------------------
  |  |  156|     12|#define FT_ATOMIC_LOAD_INT8_RELAXED(value) value
  ------------------
  471|     12|    do {
  472|     12|        if (frame_state == FRAME_CREATED) {
  ------------------
  |  Branch (472:13): [True: 6, False: 6]
  ------------------
  473|       |            // && (1) to avoid -Wunreachable-code warning on Clang
  474|      6|            if (!_Py_GEN_TRY_SET_FRAME_STATE(gen, frame_state, FRAME_CLEARED) && (1)) {
  ------------------
  |  |   57|     12|    ((gen)->gi_frame_state = (state), true)
  ------------------
  |  Branch (474:17): [True: 0, False: 6]
  |  Branch (474:82): [True: 0, Folded]
  ------------------
  475|      0|                continue;
  476|      0|            }
  477|      6|            gen_clear_frame(gen);
  478|      6|            Py_RETURN_NONE;
  ------------------
  |  |  628|      6|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  479|      6|        }
  480|       |
  481|      6|        if (FRAME_STATE_FINISHED(frame_state)) {
  ------------------
  |  |   58|      6|#define FRAME_STATE_FINISHED(S) ((S) == FRAME_CLEARED)
  |  |  ------------------
  |  |  |  Branch (58:33): [True: 0, False: 6]
  |  |  ------------------
  ------------------
  482|      0|            Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  483|      0|        }
  484|       |
  485|      6|        if (frame_state == FRAME_EXECUTING) {
  ------------------
  |  Branch (485:13): [True: 0, False: 6]
  ------------------
  486|      0|            gen_raise_already_executing_error(gen);
  487|      0|            return NULL;
  488|      0|        }
  489|       |
  490|      6|        assert(FRAME_STATE_SUSPENDED(frame_state));
  ------------------
  |  Branch (490:9): [True: 6, False: 0]
  |  Branch (490:9): [True: 6, False: 0]
  ------------------
  491|      6|    } while (!_Py_GEN_TRY_SET_FRAME_STATE(gen, frame_state, FRAME_EXECUTING));
  ------------------
  |  |   57|      6|    ((gen)->gi_frame_state = (state), true)
  ------------------
  |  Branch (491:14): [True: 0, False: 6]
  ------------------
  492|       |
  493|      6|    int err = 0;
  494|      6|    _PyInterpreterFrame *frame = &gen->gi_iframe;
  495|      6|    if (frame_state == FRAME_SUSPENDED_YIELD_FROM) {
  ------------------
  |  Branch (495:9): [True: 0, False: 6]
  ------------------
  496|      0|        PyObject *yf = PyStackRef_AsPyObjectNew(_PyFrame_StackPeek(frame, 2));
  ------------------
  |  |  757|      0|#define PyStackRef_AsPyObjectNew(stackref) Py_NewRef(PyStackRef_AsPyObjectBorrow(stackref))
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  497|      0|        err = gen_close_iter(yf);
  498|      0|        Py_DECREF(yf);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|      0|    }
  500|       |
  501|      6|    if (is_resume(frame->instr_ptr)) {
  ------------------
  |  Branch (501:9): [True: 6, False: 0]
  ------------------
  502|      6|        bool no_unwind_tools = _PyEval_NoToolsForUnwind(_PyThreadState_GET(), frame);
  503|       |        /* We can safely ignore the outermost try block
  504|       |         * as it is automatically generated to handle
  505|       |         * StopIteration. */
  506|      6|        int oparg = frame->instr_ptr->op.arg;
  507|      6|        if (oparg & RESUME_OPARG_DEPTH1_MASK && no_unwind_tools) {
  ------------------
  |  |   95|     12|#define RESUME_OPARG_DEPTH1_MASK 0x8
  ------------------
  |  Branch (507:13): [True: 6, False: 0]
  |  Branch (507:49): [True: 6, False: 0]
  ------------------
  508|       |            // RESUME after YIELD_VALUE and exception depth is 1
  509|      6|            assert((oparg & RESUME_OPARG_LOCATION_MASK) != RESUME_AT_FUNC_START);
  ------------------
  |  Branch (509:13): [True: 6, False: 0]
  ------------------
  510|      6|            FT_ATOMIC_STORE_INT8_RELEASE(gen->gi_frame_state, FRAME_CLEARED);
  ------------------
  |  |  167|      6|#define FT_ATOMIC_STORE_INT8_RELEASE(value, new_value) value = new_value
  ------------------
  511|      6|            gen_clear_frame(gen);
  512|      6|            Py_RETURN_NONE;
  ------------------
  |  |  628|      6|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  513|      6|        }
  514|      6|    }
  515|      0|    if (err == 0) {
  ------------------
  |  Branch (515:9): [True: 0, False: 0]
  ------------------
  516|      0|        PyErr_SetNone(PyExc_GeneratorExit);
  517|      0|    }
  518|       |
  519|      0|    PyObject *retval;
  520|      0|    if (gen_send_ex2(gen, Py_None, &retval, 1) == PYGEN_RETURN) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (520:9): [True: 0, False: 0]
  ------------------
  521|       |        // the generator returned a value while closing, return the value here
  522|      0|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (522:9): [True: 0, False: 0]
  ------------------
  523|      0|        return retval;
  524|      0|    }
  525|      0|    else if (retval) {
  ------------------
  |  Branch (525:14): [True: 0, False: 0]
  ------------------
  526|      0|        const char *msg = "generator ignored GeneratorExit";
  527|      0|        if (PyCoro_CheckExact(gen)) {
  ------------------
  |  |   31|      0|#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  528|      0|            msg = "coroutine ignored GeneratorExit";
  529|      0|        } else if (PyAsyncGen_CheckExact(gen)) {
  ------------------
  |  |   46|      0|#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  530|      0|            msg = ASYNC_GEN_IGNORED_EXIT_MSG;
  531|      0|        }
  532|      0|        Py_DECREF(retval);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  533|      0|        PyErr_SetString(PyExc_RuntimeError, msg);
  534|      0|        return NULL;
  535|      0|    }
  536|      0|    assert(PyErr_Occurred());
  ------------------
  |  Branch (536:5): [True: 0, False: 0]
  ------------------
  537|       |
  538|      0|    if (PyErr_ExceptionMatches(PyExc_GeneratorExit)) {
  ------------------
  |  Branch (538:9): [True: 0, False: 0]
  ------------------
  539|      0|        PyErr_Clear();          /* ignore this error */
  540|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  541|      0|    }
  542|      0|    return NULL;
  543|      0|}
genobject.c:is_resume:
  455|      6|{
  456|      6|    uint8_t code = FT_ATOMIC_LOAD_UINT8_RELAXED(instr->op.code);
  ------------------
  |  |  157|      6|#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
  ------------------
  457|      6|    return (
  458|      6|        code == RESUME ||
  ------------------
  |  |  130|     12|#define RESUME                                 128
  ------------------
  |  Branch (458:9): [True: 4, False: 2]
  ------------------
  459|      2|        code == RESUME_CHECK ||
  ------------------
  |  |  202|      8|#define RESUME_CHECK                           200
  ------------------
  |  Branch (459:9): [True: 2, False: 0]
  ------------------
  460|      0|        code == RESUME_CHECK_JIT ||
  ------------------
  |  |  203|      6|#define RESUME_CHECK_JIT                       201
  ------------------
  |  Branch (460:9): [True: 0, False: 0]
  ------------------
  461|      0|        code == INSTRUMENTED_RESUME
  ------------------
  |  |  232|      0|#define INSTRUMENTED_RESUME                    244
  ------------------
  |  Branch (461:9): [True: 0, False: 0]
  ------------------
  462|      6|    );
  463|      6|}
genobject.c:gen_finalize:
  109|  1.24k|{
  110|  1.24k|    PyGenObject *gen = (PyGenObject *)self;
  111|       |
  112|  1.24k|    if (FRAME_STATE_FINISHED(gen->gi_frame_state)) {
  ------------------
  |  |   58|  1.24k|#define FRAME_STATE_FINISHED(S) ((S) == FRAME_CLEARED)
  |  |  ------------------
  |  |  |  Branch (58:33): [True: 1.23k, False: 10]
  |  |  ------------------
  ------------------
  113|       |        /* Generator isn't paused, so no need to close */
  114|  1.23k|        return;
  115|  1.23k|    }
  116|       |
  117|     10|    if (PyAsyncGen_CheckExact(self)) {
  ------------------
  |  |   46|     10|#define PyAsyncGen_CheckExact(op) Py_IS_TYPE((op), &PyAsyncGen_Type)
  |  |  ------------------
  |  |  |  |  215|     10|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|      2|        PyAsyncGenObject *agen = (PyAsyncGenObject*)self;
  119|      2|        PyObject *finalizer = agen->ag_origin_or_finalizer;
  120|      2|        if (finalizer && !agen->ag_closed) {
  ------------------
  |  Branch (120:13): [True: 0, False: 2]
  |  Branch (120:26): [True: 0, False: 0]
  ------------------
  121|       |            /* Save the current exception, if any. */
  122|      0|            PyObject *exc = PyErr_GetRaisedException();
  123|       |
  124|      0|            PyObject *res = PyObject_CallOneArg(finalizer, self);
  125|      0|            if (res == NULL) {
  ------------------
  |  Branch (125:17): [True: 0, False: 0]
  ------------------
  126|      0|                PyErr_FormatUnraisable("Exception ignored while "
  127|      0|                                       "finalizing generator %R", self);
  128|      0|            }
  129|      0|            else {
  130|      0|                Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|      0|            }
  132|       |            /* Restore the saved exception. */
  133|      0|            PyErr_SetRaisedException(exc);
  134|      0|            return;
  135|      0|        }
  136|      2|    }
  137|       |
  138|       |    /* Save the current exception, if any. */
  139|     10|    PyObject *exc = PyErr_GetRaisedException();
  140|       |
  141|       |    /* If `gen` is a coroutine, and if it was never awaited on,
  142|       |       issue a RuntimeWarning. */
  143|     10|    assert(_PyGen_GetCode(gen) != NULL);
  ------------------
  |  Branch (143:5): [True: 10, False: 0]
  ------------------
  144|     10|    if (_PyGen_GetCode(gen)->co_flags & CO_COROUTINE &&
  ------------------
  |  |  131|     20|#define CO_COROUTINE            0x0080
  ------------------
  |  Branch (144:9): [True: 0, False: 10]
  ------------------
  145|      0|        gen->gi_frame_state == FRAME_CREATED)
  ------------------
  |  Branch (145:9): [True: 0, False: 0]
  ------------------
  146|      0|    {
  147|      0|        _PyErr_WarnUnawaitedCoroutine((PyObject *)gen);
  148|      0|    }
  149|     10|    else {
  150|     10|        PyObject *res = gen_close((PyObject*)gen, NULL);
  151|     10|        if (res == NULL) {
  ------------------
  |  Branch (151:13): [True: 0, False: 10]
  ------------------
  152|      0|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (152:17): [True: 0, False: 0]
  ------------------
  153|      0|                PyErr_FormatUnraisable("Exception ignored while "
  154|      0|                                       "closing generator %R", self);
  155|      0|            }
  156|      0|        }
  157|     10|        else {
  158|     10|            Py_DECREF(res);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|     10|        }
  160|     10|    }
  161|       |
  162|       |    /* Restore the saved exception. */
  163|     10|    PyErr_SetRaisedException(exc);
  164|     10|}
genobject.c:make_gen:
 1108|  1.24k|{
 1109|  1.24k|    PyCodeObject *code = (PyCodeObject *)func->func_code;
 1110|  1.24k|    int slots = _PyFrame_NumSlotsForCodeObject(code);
 1111|  1.24k|    PyGenObject *gen = PyObject_GC_NewVar(PyGenObject, type, slots);
  ------------------
  |  |  183|  1.24k|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1112|  1.24k|    if (gen == NULL) {
  ------------------
  |  Branch (1112:9): [True: 0, False: 1.24k]
  ------------------
 1113|      0|        return NULL;
 1114|      0|    }
 1115|  1.24k|    gen->gi_frame_state = FRAME_CLEARED;
 1116|  1.24k|    gen->gi_weakreflist = NULL;
 1117|  1.24k|    gen->gi_exc_state.exc_value = NULL;
 1118|  1.24k|    gen->gi_exc_state.previous_item = NULL;
 1119|  1.24k|    gen->gi_iframe.f_executable = PyStackRef_None;
  ------------------
  |  |  485|  1.24k|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  ------------------
  |  |  |  |   55|  1.24k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
 1120|  1.24k|    assert(func->func_name != NULL);
  ------------------
  |  Branch (1120:5): [True: 1.24k, False: 0]
  ------------------
 1121|  1.24k|    gen->gi_name = Py_NewRef(func->func_name);
  ------------------
  |  |  550|  1.24k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1122|  1.24k|    assert(func->func_qualname != NULL);
  ------------------
  |  Branch (1122:5): [True: 1.24k, False: 0]
  ------------------
 1123|  1.24k|    gen->gi_qualname = Py_NewRef(func->func_qualname);
  ------------------
  |  |  550|  1.24k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1124|  1.24k|    _PyObject_GC_TRACK(gen);
  ------------------
  |  |  505|  1.24k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1125|  1.24k|    return (PyObject *)gen;
 1126|  1.24k|}

_PyInterpolation_InitTypes:
  165|      2|{
  166|      2|    PyObject *tuple = Py_BuildValue("(ssss)", "value", "expression", "conversion", "format_spec");
  167|      2|    if (!tuple) {
  ------------------
  |  Branch (167:9): [True: 0, False: 2]
  ------------------
  168|      0|        goto error;
  169|      0|    }
  170|       |
  171|      2|    PyObject *dict = _PyType_GetDict(&_PyInterpolation_Type);
  172|      2|    if (!dict) {
  ------------------
  |  Branch (172:9): [True: 0, False: 2]
  ------------------
  173|      0|        Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|      0|        goto error;
  175|      0|    }
  176|       |
  177|      2|    int status = PyDict_SetItemString(dict, "__match_args__", tuple);
  178|      2|    Py_DECREF(tuple);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|      2|    if (status < 0) {
  ------------------
  |  Branch (179:9): [True: 0, False: 2]
  ------------------
  180|      0|        goto error;
  181|      0|    }
  182|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  183|       |
  184|      0|error:
  185|      0|    return _PyStatus_ERR("Can't initialize interpolation types");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  186|      2|}

PySeqIter_New:
   24|     63|{
   25|     63|    seqiterobject *it;
   26|       |
   27|     63|    if (!PySequence_Check(seq)) {
  ------------------
  |  Branch (27:9): [True: 0, False: 63]
  ------------------
   28|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
   29|      0|        return NULL;
   30|      0|    }
   31|     63|    it = PyObject_GC_New(seqiterobject, &PySeqIter_Type);
  ------------------
  |  |  181|     63|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   32|     63|    if (it == NULL)
  ------------------
  |  Branch (32:9): [True: 0, False: 63]
  ------------------
   33|      0|        return NULL;
   34|     63|    it->it_index = 0;
   35|     63|    it->it_seq = Py_NewRef(seq);
  ------------------
  |  |  550|     63|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|     63|    _PyObject_GC_TRACK(it);
  ------------------
  |  |  505|     63|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   37|     63|    return (PyObject *)it;
   38|     63|}
iterobject.c:iter_dealloc:
   42|     63|{
   43|     63|    seqiterobject *it = (seqiterobject*)op;
   44|     63|    _PyObject_GC_UNTRACK(it);
  ------------------
  |  |  507|     63|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|     63|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|     63|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|     63|    PyObject_GC_Del(it);
   47|     63|}
iterobject.c:iter_iternext:
   59|    148|{
   60|    148|    seqiterobject *it;
   61|    148|    PyObject *seq;
   62|    148|    PyObject *result;
   63|       |
   64|    148|    assert(PySeqIter_Check(iterator));
  ------------------
  |  Branch (64:5): [True: 148, False: 0]
  ------------------
   65|    148|    it = (seqiterobject *)iterator;
   66|    148|    Py_ssize_t index = FT_ATOMIC_LOAD_SSIZE_RELAXED(it->it_index);
  ------------------
  |  |  149|    148|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
   67|    148|    if (index < 0)
  ------------------
  |  Branch (67:9): [True: 0, False: 148]
  ------------------
   68|      0|        return NULL;
   69|    148|    seq = it->it_seq;
   70|    148|#ifndef Py_GIL_DISABLED
   71|    148|    if (seq == NULL)
  ------------------
  |  Branch (71:9): [True: 0, False: 148]
  ------------------
   72|      0|        return NULL;
   73|    148|#endif
   74|    148|    if (index == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|    148|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (74:9): [True: 0, False: 148]
  ------------------
   75|      0|        PyErr_SetString(PyExc_OverflowError,
   76|      0|                        "iter index too large");
   77|      0|        return NULL;
   78|      0|    }
   79|       |
   80|    148|    result = PySequence_GetItem(seq, index);
   81|    148|    if (result != NULL) {
  ------------------
  |  Branch (81:9): [True: 85, False: 63]
  ------------------
   82|       |        /* PySequence_GetItem() can exhaust the iterator re-entrantly.
   83|       |         * Preserve the exhaustion sentinel if it is observed.  Concurrent
   84|       |         * exhaustion can still race with the store, but remains memory-safe
   85|       |         * because the sequence stays alive. */
   86|     85|        if (FT_ATOMIC_LOAD_SSIZE_RELAXED(it->it_index) >= 0) {
  ------------------
  |  |  149|     85|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  |  Branch (86:13): [True: 85, False: 0]
  ------------------
   87|     85|            FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, index + 1);
  ------------------
  |  |  194|     85|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
   88|     85|        }
   89|     85|        return result;
   90|     85|    }
   91|     63|    if (PyErr_ExceptionMatches(PyExc_IndexError) ||
  ------------------
  |  Branch (91:9): [True: 63, False: 0]
  ------------------
   92|      0|        PyErr_ExceptionMatches(PyExc_StopIteration))
  ------------------
  |  Branch (92:9): [True: 0, False: 0]
  ------------------
   93|     63|    {
   94|       |        /* Mark the iterator exhausted before anything that can run
   95|       |         * arbitrary code. */
   96|     63|        FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, -1);
  ------------------
  |  |  194|     63|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
   97|     63|#ifndef Py_GIL_DISABLED
   98|     63|        Py_CLEAR(it->it_seq);
  ------------------
  |  |  484|     63|    do { \
  |  |  485|     63|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     63|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     63|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     63|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     63|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     63|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 63, False: 0]
  |  |  ------------------
  |  |  488|     63|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     63|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     63|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     63|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     63|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     63|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     63|        } \
  |  |  491|     63|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 63]
  |  |  ------------------
  ------------------
   99|     63|#endif
  100|     63|        PyErr_Clear();
  101|     63|    }
  102|       |    return NULL;
  103|    148|}
iterobject.c:iter_len:
  107|      1|{
  108|      1|    seqiterobject *it = (seqiterobject*)op;
  109|      1|    Py_ssize_t seqsize, len;
  110|       |
  111|      1|    Py_ssize_t index = FT_ATOMIC_LOAD_SSIZE_RELAXED(it->it_index);
  ------------------
  |  |  149|      1|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  112|      1|    if (index >= 0 && it->it_seq != NULL) {
  ------------------
  |  Branch (112:9): [True: 1, False: 0]
  |  Branch (112:23): [True: 1, False: 0]
  ------------------
  113|      1|        if (_PyObject_HasLen(it->it_seq)) {
  ------------------
  |  Branch (113:13): [True: 1, False: 0]
  ------------------
  114|      1|            seqsize = PySequence_Size(it->it_seq);
  115|      1|            if (seqsize == -1)
  ------------------
  |  Branch (115:17): [True: 0, False: 1]
  ------------------
  116|      0|                return NULL;
  117|      1|        }
  118|      0|        else {
  119|      0|            Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  120|      0|        }
  121|      1|        len = seqsize - index;
  122|      1|        if (len >= 0)
  ------------------
  |  Branch (122:13): [True: 1, False: 0]
  ------------------
  123|      1|            return PyLong_FromSsize_t(len);
  124|      1|    }
  125|      0|    return PyLong_FromLong(0);
  126|      1|}

_PyLazyImport_New:
   15|     13|{
   16|     13|    PyLazyImportObject *m;
   17|     13|    if (!name || !(PyUnicode_Check(name) || PyLazyImport_CheckExact(name))) {
  ------------------
  |  |  103|     13|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     26|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 11, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!name || !(PyUnicode_Check(name) || PyLazyImport_CheckExact(name))) {
  ------------------
  |  |   15|      2|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (17:9): [True: 0, False: 13]
  ------------------
   18|      0|        PyErr_SetString(PyExc_TypeError, "expected str or lazy_import for name");
   19|      0|        return NULL;
   20|      0|    }
   21|     13|    if (fromlist == Py_None || fromlist == NULL) {
  ------------------
  |  |  616|     26|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (21:9): [True: 9, False: 4]
  |  Branch (21:32): [True: 0, False: 4]
  ------------------
   22|      9|        fromlist = NULL;
   23|      9|    }
   24|      4|    else if (!PyUnicode_Check(fromlist) && !PyTuple_Check(fromlist)) {
  ------------------
  |  |  103|      4|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      8|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  else if (!PyUnicode_Check(fromlist) && !PyTuple_Check(fromlist)) {
  ------------------
  |  |   27|      2|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (24:14): [True: 2, False: 2]
  |  Branch (24:44): [True: 0, False: 2]
  ------------------
   25|      0|        PyErr_SetString(PyExc_TypeError,
   26|      0|            "lazy_import: fromlist must be None, a string, or a tuple");
   27|      0|        return NULL;
   28|      0|    }
   29|     13|    m = PyObject_GC_New(PyLazyImportObject, &PyLazyImport_Type);
  ------------------
  |  |  181|     13|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   30|     13|    if (m == NULL) {
  ------------------
  |  Branch (30:9): [True: 0, False: 13]
  ------------------
   31|      0|        return NULL;
   32|      0|    }
   33|     13|    m->lz_builtins = Py_XNewRef(builtins);
  ------------------
  |  |  551|     13|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   34|     13|    m->lz_from = Py_NewRef(name);
  ------------------
  |  |  550|     13|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   35|     13|    m->lz_attr = Py_XNewRef(fromlist);
  ------------------
  |  |  551|     13|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   36|       |
   37|       |    // Capture frame information for the original import location.
   38|     13|    m->lz_code = NULL;
   39|     13|    m->lz_instr_offset = -1;
   40|       |
   41|     13|    if (frame != NULL) {
  ------------------
  |  Branch (41:9): [True: 13, False: 0]
  ------------------
   42|     13|        PyCodeObject *code = _PyFrame_GetCode(frame);
   43|     13|        if (code != NULL) {
  ------------------
  |  Branch (43:13): [True: 13, False: 0]
  ------------------
   44|     13|            m->lz_code = (PyCodeObject *)Py_NewRef(code);
  ------------------
  |  |  550|     13|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|       |            // Calculate the instruction offset from the current frame.
   46|     13|            m->lz_instr_offset = _PyInterpreterFrame_LASTI(frame);
  ------------------
  |  |   19|     13|    ((int)((IF)->instr_ptr - _PyFrame_GetBytecode((IF))))
  ------------------
   47|     13|        }
   48|     13|    }
   49|       |
   50|     13|    _PyObject_GC_TRACK(m);
  ------------------
  |  |  505|     13|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|     13|    return (PyObject *)m;
   52|     13|}
lazyimportobject.c:lazy_import_traverse:
   56|    162|{
   57|    162|    PyLazyImportObject *m = PyLazyImportObject_CAST(op);
  ------------------
  |  |   11|    162|#define PyLazyImportObject_CAST(op) ((PyLazyImportObject *)(op))
  ------------------
   58|    162|    Py_VISIT(m->lz_builtins);
  ------------------
  |  |  194|    162|    do {                                                                \
  |  |  195|    162|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 162, False: 0]
  |  |  ------------------
  |  |  196|    162|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    162|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 162]
  |  |  ------------------
  |  |  198|    162|                return vret;                                            \
  |  |  199|    162|        }                                                               \
  |  |  200|    162|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 162]
  |  |  ------------------
  ------------------
   59|    162|    Py_VISIT(m->lz_from);
  ------------------
  |  |  194|    162|    do {                                                                \
  |  |  195|    162|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 162, False: 0]
  |  |  ------------------
  |  |  196|    162|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    162|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 162]
  |  |  ------------------
  |  |  198|    162|                return vret;                                            \
  |  |  199|    162|        }                                                               \
  |  |  200|    162|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 162]
  |  |  ------------------
  ------------------
   60|    162|    Py_VISIT(m->lz_attr);
  ------------------
  |  |  194|    162|    do {                                                                \
  |  |  195|    162|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 72, False: 90]
  |  |  ------------------
  |  |  196|     72|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     72|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 72]
  |  |  ------------------
  |  |  198|     72|                return vret;                                            \
  |  |  199|     72|        }                                                               \
  |  |  200|    162|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 162]
  |  |  ------------------
  ------------------
   61|    162|    Py_VISIT(m->lz_code);
  ------------------
  |  |  194|    162|    do {                                                                \
  |  |  195|    162|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 162, False: 0]
  |  |  ------------------
  |  |  196|    162|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    162|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 162]
  |  |  ------------------
  |  |  198|    162|                return vret;                                            \
  |  |  199|    162|        }                                                               \
  |  |  200|    162|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 162]
  |  |  ------------------
  ------------------
   62|    162|    return 0;
   63|    162|}

PyList_New:
  242|   868k|{
  243|   868k|    if (size < 0) {
  ------------------
  |  Branch (243:9): [True: 0, False: 868k]
  ------------------
  244|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  245|      0|        return NULL;
  246|      0|    }
  247|       |
  248|   868k|    PyListObject *op = _Py_FREELIST_POP(PyListObject, lists);
  ------------------
  |  |   43|   868k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|   868k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  249|   868k|    if (op == NULL) {
  ------------------
  |  Branch (249:9): [True: 93.7k, False: 774k]
  ------------------
  250|  93.7k|        op = PyObject_GC_New(PyListObject, &PyList_Type);
  ------------------
  |  |  181|  93.7k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  93.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  251|  93.7k|        if (op == NULL) {
  ------------------
  |  Branch (251:13): [True: 0, False: 93.7k]
  ------------------
  252|      0|            return NULL;
  253|      0|        }
  254|  93.7k|    }
  255|   868k|    if (size <= 0) {
  ------------------
  |  Branch (255:9): [True: 732k, False: 136k]
  ------------------
  256|   732k|        op->ob_item = NULL;
  257|   732k|    }
  258|   136k|    else {
  259|       |#ifdef Py_GIL_DISABLED
  260|       |        _PyListArray *array = list_allocate_array(size);
  261|       |        if (array == NULL) {
  262|       |            Py_DECREF(op);
  263|       |            return PyErr_NoMemory();
  264|       |        }
  265|       |        memset(&array->ob_item, 0, size * sizeof(PyObject *));
  266|       |        op->ob_item = array->ob_item;
  267|       |#else
  268|   136k|        op->ob_item = (PyObject **) PyMem_Calloc(size, sizeof(PyObject *));
  269|   136k|#endif
  270|   136k|        if (op->ob_item == NULL) {
  ------------------
  |  Branch (270:13): [True: 0, False: 136k]
  ------------------
  271|      0|            Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|      0|            return PyErr_NoMemory();
  273|      0|        }
  274|   136k|    }
  275|   868k|    Py_SET_SIZE(op, size);
  ------------------
  |  |  216|   868k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   868k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   868k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|   868k|    op->allocated = size;
  277|   868k|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|   868k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   868k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   868k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|   868k|    return (PyObject *) op;
  279|   868k|}
PyList_Size:
  310|   113k|{
  311|   113k|    if (!PyList_Check(op)) {
  ------------------
  |  |   25|   113k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   113k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (311:9): [True: 0, False: 113k]
  ------------------
  312|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  313|      0|        return -1;
  314|      0|    }
  315|   113k|    else {
  316|   113k|        return PyList_GET_SIZE(op);
  ------------------
  |  |   38|   113k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   113k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   113k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|   113k|    }
  318|   113k|}
PyList_GetItem:
  392|  13.1k|{
  393|  13.1k|    if (!PyList_Check(op)) {
  ------------------
  |  |   25|  13.1k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  13.1k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (393:9): [True: 0, False: 13.1k]
  ------------------
  394|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  395|      0|        return NULL;
  396|      0|    }
  397|  13.1k|    if (!valid_index(i, Py_SIZE(op))) {
  ------------------
  |  |  214|  13.1k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  13.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (397:9): [True: 0, False: 13.1k]
  ------------------
  398|      0|        _Py_DECLARE_STR(list_err, "list index out of range");
  399|      0|        PyErr_SetObject(PyExc_IndexError, &_Py_STR(list_err));
  ------------------
  |  |  938|      0|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|      0|        return NULL;
  401|      0|    }
  402|  13.1k|    return ((PyListObject *)op) -> ob_item[i];
  403|  13.1k|}
PyList_GetItemRef:
  407|    627|{
  408|    627|    if (!PyList_Check(op)) {
  ------------------
  |  |   25|    627|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    627|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (408:9): [True: 0, False: 627]
  ------------------
  409|      0|        PyErr_SetString(PyExc_TypeError, "expected a list");
  410|      0|        return NULL;
  411|      0|    }
  412|    627|    PyObject *item = list_get_item_ref((PyListObject *)op, i);
  413|    627|    if (item == NULL) {
  ------------------
  |  Branch (413:9): [True: 0, False: 627]
  ------------------
  414|      0|        _Py_DECLARE_STR(list_err, "list index out of range");
  415|      0|        PyErr_SetObject(PyExc_IndexError, &_Py_STR(list_err));
  ------------------
  |  |  938|      0|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|      0|        return NULL;
  417|      0|    }
  418|    627|    return item;
  419|    627|}
PyList_SetItem:
  456|  61.5k|{
  457|  61.5k|    if (!PyList_Check(op)) {
  ------------------
  |  |   25|  61.5k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  61.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (457:9): [True: 0, False: 61.5k]
  ------------------
  458|      0|        Py_XDECREF(newitem);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  460|      0|        return -1;
  461|      0|    }
  462|  61.5k|    int ret;
  463|  61.5k|    PyListObject *self = ((PyListObject *)op);
  464|  61.5k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  61.5k|    {
  ------------------
  465|  61.5k|    if (!valid_index(i, Py_SIZE(self))) {
  ------------------
  |  |  214|  61.5k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  61.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  61.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (465:9): [True: 0, False: 61.5k]
  ------------------
  466|      0|        Py_XDECREF(newitem);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  467|      0|        PyErr_SetString(PyExc_IndexError,
  468|      0|                        "list assignment index out of range");
  469|      0|        ret = -1;
  470|      0|        goto end;
  471|      0|    }
  472|  61.5k|    PyObject *tmp = self->ob_item[i];
  473|  61.5k|    FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item[i], newitem);
  ------------------
  |  |  164|  61.5k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  474|  61.5k|    Py_XDECREF(tmp);
  ------------------
  |  |  524|  61.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  61.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  61.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  475|  61.5k|    ret = 0;
  476|  61.5k|end:;
  477|  61.5k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  61.5k|    }
  ------------------
  478|  61.5k|    return ret;
  479|  61.5k|}
PyList_Insert:
  511|      2|{
  512|      2|    if (!PyList_Check(op)) {
  ------------------
  |  |   25|      2|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (512:9): [True: 0, False: 2]
  ------------------
  513|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  514|      0|        return -1;
  515|      0|    }
  516|      2|    PyListObject *self = (PyListObject *)op;
  517|      2|    int err;
  518|      2|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      2|    {
  ------------------
  519|      2|    err = ins1(self, where, newitem);
  520|      2|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      2|    }
  ------------------
  521|      2|    return err;
  522|      2|}
_PyList_AppendTakeRefListResize:
  527|   665k|{
  528|   665k|    Py_ssize_t len = Py_SIZE(self);
  ------------------
  |  |  214|   665k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   665k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   665k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|   665k|    assert(self->allocated == -1 || self->allocated == len);
  ------------------
  |  Branch (529:5): [True: 0, False: 665k]
  |  Branch (529:5): [True: 665k, False: 0]
  ------------------
  530|   665k|    if (list_resize(self, len + 1) < 0) {
  ------------------
  |  Branch (530:9): [True: 0, False: 665k]
  ------------------
  531|      0|        Py_DECREF(newitem);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      0|        return -1;
  533|      0|    }
  534|   665k|    FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item[len], newitem);
  ------------------
  |  |  164|   665k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  535|   665k|    return 0;
  536|   665k|}
PyList_Append:
  540|  4.03M|{
  541|  4.03M|    if (PyList_Check(op) && (newitem != NULL)) {
  ------------------
  |  |   25|  4.03M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  8.07M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 4.03M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (541:29): [True: 4.03M, False: 0]
  ------------------
  542|  4.03M|        int ret;
  543|  4.03M|        Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|  4.03M|    {
  ------------------
  544|  4.03M|        ret = _PyList_AppendTakeRef((PyListObject *)op, Py_NewRef(newitem));
  ------------------
  |  |  550|  4.03M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.03M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.03M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|  4.03M|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  4.03M|    }
  ------------------
  546|  4.03M|        return ret;
  547|  4.03M|    }
  548|      0|    PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  549|      0|    return -1;
  550|  4.03M|}
_PyList_BinarySlice:
  721|  2.41k|{
  722|  2.41k|    assert(PyList_CheckExact(container));
  ------------------
  |  Branch (722:5): [True: 2.41k, False: 0]
  ------------------
  723|  2.41k|    Py_ssize_t istart = 0;
  724|  2.41k|    Py_ssize_t istop = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  2.41k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  725|       |    /* Unpack the index values before acquiring the lock, since
  726|       |     * _PyEval_SliceIndex may call __index__ which could execute
  727|       |     * arbitrary Python code. */
  728|  2.41k|    if (!_PyEval_SliceIndex(start, &istart)) {
  ------------------
  |  Branch (728:9): [True: 0, False: 2.41k]
  ------------------
  729|      0|        return NULL;
  730|      0|    }
  731|  2.41k|    if (!_PyEval_SliceIndex(stop, &istop)) {
  ------------------
  |  Branch (731:9): [True: 0, False: 2.41k]
  ------------------
  732|      0|        return NULL;
  733|      0|    }
  734|  2.41k|    PyObject *ret;
  735|  2.41k|    Py_BEGIN_CRITICAL_SECTION(container);
  ------------------
  |  |   51|  2.41k|    {
  ------------------
  736|  2.41k|    Py_ssize_t len = Py_SIZE(container);
  ------------------
  |  |  214|  2.41k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  737|  2.41k|    PySlice_AdjustIndices(len, &istart, &istop, 1);
  738|  2.41k|    ret = list_slice_lock_held((PyListObject *)container, istart, istop);
  739|  2.41k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  2.41k|    }
  ------------------
  740|  2.41k|    return ret;
  741|  2.41k|}
_PyList_Concat:
  803|     24|{
  804|     24|    if (!PyList_Check(bb)) {
  ------------------
  |  |   25|     24|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     24|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (804:9): [True: 0, False: 24]
  ------------------
  805|      0|        PyErr_Format(PyExc_TypeError,
  806|      0|                  "can only concatenate list (not \"%.200s\") to list",
  807|      0|                  Py_TYPE(bb)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|      0|        return NULL;
  809|      0|    }
  810|     24|    PyListObject *a = (PyListObject *)aa;
  811|     24|    PyListObject *b = (PyListObject *)bb;
  812|     24|    PyObject *ret;
  813|     24|    Py_BEGIN_CRITICAL_SECTION2(a, b);
  ------------------
  |  |   57|     24|    {
  ------------------
  814|     24|    ret = list_concat_lock_held(a, b);
  815|     24|    Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|     24|    }
  ------------------
  816|     24|    return ret;
  817|     24|}
PyList_SetSlice:
 1072|   116k|{
 1073|   116k|    if (!PyList_Check(a)) {
  ------------------
  |  |   25|   116k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   116k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1073:9): [True: 0, False: 116k]
  ------------------
 1074|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1075|      0|        return -1;
 1076|      0|    }
 1077|   116k|    return list_ass_slice((PyListObject *)a, ilow, ihigh, v);
 1078|   116k|}
_PyList_Extend:
 1534|  84.6k|{
 1535|  84.6k|    return list_extend((PyObject*)self, iterable);
 1536|  84.6k|}
PyList_Sort:
 3212|   119k|{
 3213|   119k|    if (v == NULL || !PyList_Check(v)) {
  ------------------
  |  |   25|   119k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   119k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3213:9): [True: 0, False: 119k]
  |  Branch (3213:22): [True: 0, False: 119k]
  ------------------
 3214|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3215|      0|        return -1;
 3216|      0|    }
 3217|   119k|    Py_BEGIN_CRITICAL_SECTION(v);
  ------------------
  |  |   51|   119k|    {
  ------------------
 3218|   119k|    v = list_sort_impl((PyListObject *)v, NULL, 0);
 3219|   119k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   119k|    }
  ------------------
 3220|   119k|    if (v == NULL)
  ------------------
  |  Branch (3220:9): [True: 0, False: 119k]
  ------------------
 3221|      0|        return -1;
 3222|   119k|    Py_DECREF(v);
  ------------------
  |  |  430|   119k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   119k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3223|   119k|    return 0;
 3224|   119k|}
PyList_AsTuple:
 3261|  66.2k|{
 3262|  66.2k|    if (v == NULL || !PyList_Check(v)) {
  ------------------
  |  |   25|  66.2k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  66.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3262:9): [True: 0, False: 66.2k]
  |  Branch (3262:22): [True: 0, False: 66.2k]
  ------------------
 3263|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3264|      0|        return NULL;
 3265|      0|    }
 3266|  66.2k|    PyObject *ret;
 3267|  66.2k|    PyListObject *self = (PyListObject *)v;
 3268|  66.2k|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|  66.2k|    {
  ------------------
 3269|  66.2k|    ret = PyTuple_FromArray(self->ob_item, Py_SIZE(v));
  ------------------
  |  |  214|  66.2k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  66.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  66.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3270|  66.2k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  66.2k|    }
  ------------------
 3271|  66.2k|    return ret;
 3272|  66.2k|}
_PyList_AsTupleAndClear:
 3276|    209|{
 3277|    209|    assert(self != NULL);
  ------------------
  |  Branch (3277:5): [True: 209, False: 0]
  ------------------
 3278|    209|    PyObject *ret;
 3279|    209|    if (self->ob_item == NULL) {
  ------------------
  |  Branch (3279:9): [True: 0, False: 209]
  ------------------
 3280|      0|        return PyTuple_New(0);
 3281|      0|    }
 3282|    209|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    209|    {
  ------------------
 3283|    209|    PyObject **items = self->ob_item;
 3284|    209|    Py_ssize_t size = Py_SIZE(self);
  ------------------
  |  |  214|    209|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    209|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    209|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3285|    209|    Py_SET_SIZE(self, 0);
  ------------------
  |  |  216|    209|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|    209|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    209|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3286|    209|    ret = _PyTuple_FromArraySteal(items, size);
 3287|    209|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    209|    }
  ------------------
 3288|    209|    return ret;
 3289|    209|}
_PyList_FromStackRefStealOnSuccess:
 3293|   363k|{
 3294|   363k|    if (n == 0) {
  ------------------
  |  Branch (3294:9): [True: 362k, False: 700]
  ------------------
 3295|   362k|        return PyList_New(0);
 3296|   362k|    }
 3297|       |
 3298|    700|    PyListObject *list = (PyListObject *)PyList_New(n);
 3299|    700|    if (list == NULL) {
  ------------------
  |  Branch (3299:9): [True: 0, False: 700]
  ------------------
 3300|      0|        return NULL;
 3301|      0|    }
 3302|       |
 3303|    700|    PyObject **dst = list->ob_item;
 3304|  1.82k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3304:28): [True: 1.12k, False: 700]
  ------------------
 3305|  1.12k|        dst[i] = PyStackRef_AsPyObjectSteal(src[i]);
 3306|  1.12k|    }
 3307|       |
 3308|    700|    return (PyObject *)list;
 3309|    700|}
_PyList_SliceSubscript:
 3687|     33|{
 3688|     33|    return list_slice_subscript(_self, item);
 3689|     33|}
listobject.c:valid_index:
  322|   775k|{
  323|       |    /* The cast to size_t lets us use just a single comparison
  324|       |       to check whether i is in the range: 0 <= i < limit.
  325|       |
  326|       |       See:  Section 14.2 "Bounds Checking" in the Agner Fog
  327|       |       optimization manual found at:
  328|       |       https://www.agner.org/optimize/optimizing_cpp.pdf
  329|       |    */
  330|   775k|    return (size_t) i < (size_t) limit;
  331|   775k|}
listobject.c:list_get_item_ref:
  382|   653k|{
  383|   653k|    if (!valid_index(i, Py_SIZE(op))) {
  ------------------
  |  |  214|   653k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   653k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   653k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (383:9): [True: 37.5k, False: 615k]
  ------------------
  384|  37.5k|        return NULL;
  385|  37.5k|    }
  386|   615k|    return Py_NewRef(PyList_GET_ITEM(op, i));
  ------------------
  |  |  550|   615k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   615k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.23M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 615k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  387|   615k|}
listobject.c:ins1:
  483|      2|{
  484|      2|    Py_ssize_t i, n = Py_SIZE(self);
  ------------------
  |  |  214|      2|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|      2|    PyObject **items;
  486|      2|    if (v == NULL) {
  ------------------
  |  Branch (486:9): [True: 0, False: 2]
  ------------------
  487|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  488|      0|        return -1;
  489|      0|    }
  490|       |
  491|      2|    assert((size_t)n + 1 < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (491:5): [True: 2, False: 0]
  ------------------
  492|      2|    if (list_resize(self, n+1) < 0)
  ------------------
  |  Branch (492:9): [True: 0, False: 2]
  ------------------
  493|      0|        return -1;
  494|       |
  495|      2|    if (where < 0) {
  ------------------
  |  Branch (495:9): [True: 0, False: 2]
  ------------------
  496|      0|        where += n;
  497|      0|        if (where < 0)
  ------------------
  |  Branch (497:13): [True: 0, False: 0]
  ------------------
  498|      0|            where = 0;
  499|      0|    }
  500|      2|    if (where > n)
  ------------------
  |  Branch (500:9): [True: 0, False: 2]
  ------------------
  501|      0|        where = n;
  502|      2|    items = self->ob_item;
  503|      4|    for (i = n; --i >= where; )
  ------------------
  |  Branch (503:17): [True: 2, False: 2]
  ------------------
  504|      2|        FT_ATOMIC_STORE_PTR_RELEASE(items[i+1], items[i]);
  ------------------
  |  |  164|      4|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  505|      2|    FT_ATOMIC_STORE_PTR_RELEASE(items[where], Py_NewRef(v));
  ------------------
  |  |  164|      2|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  506|      2|    return 0;
  507|      2|}
listobject.c:list_resize:
  105|   793k|{
  106|   793k|    size_t new_allocated, target_bytes;
  107|   793k|    Py_ssize_t allocated = self->allocated;
  108|       |
  109|       |    /* Bypass realloc() when a previous overallocation is large enough
  110|       |       to accommodate the newsize.  If the newsize falls lower than half
  111|       |       the allocated size, then proceed with the realloc() to shrink the list.
  112|       |    */
  113|   793k|    if (allocated >= newsize && newsize >= (allocated >> 1)) {
  ------------------
  |  Branch (113:9): [True: 106k, False: 686k]
  |  Branch (113:33): [True: 63.1k, False: 43.1k]
  ------------------
  114|  63.1k|        assert(self->ob_item != NULL || newsize == 0);
  ------------------
  |  Branch (114:9): [True: 63.1k, False: 0]
  |  Branch (114:9): [True: 0, False: 0]
  ------------------
  115|  63.1k|        Py_SET_SIZE(self, newsize);
  ------------------
  |  |  216|  63.1k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  63.1k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|  63.1k|        return 0;
  117|  63.1k|    }
  118|       |
  119|       |    /* This over-allocates proportional to the list size, making room
  120|       |     * for additional growth.  The over-allocation is mild, but is
  121|       |     * enough to give linear-time amortized behavior over a long
  122|       |     * sequence of appends() in the presence of a poorly-performing
  123|       |     * system realloc().
  124|       |     * Add padding to make the allocated size multiple of 4.
  125|       |     * The growth pattern is:  0, 4, 8, 16, 24, 32, 40, 52, 64, 76, ...
  126|       |     * Note: new_allocated won't overflow because the largest possible value
  127|       |     *       is PY_SSIZE_T_MAX * (9 / 8) + 6 which always fits in a size_t.
  128|       |     */
  129|   730k|    new_allocated = ((size_t)newsize + (newsize >> 3) + 6) & ~(size_t)3;
  130|       |    /* Do not overallocate if the new size is closer to overallocated size
  131|       |     * than to the old size.
  132|       |     */
  133|   730k|    if (newsize - Py_SIZE(self) > (Py_ssize_t)(new_allocated - newsize))
  ------------------
  |  |  214|   730k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   730k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   730k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (133:9): [True: 8.03k, False: 722k]
  ------------------
  134|  8.03k|        new_allocated = ((size_t)newsize + 3) & ~(size_t)3;
  135|       |
  136|   730k|    if (newsize == 0)
  ------------------
  |  Branch (136:9): [True: 4, False: 730k]
  ------------------
  137|      4|        new_allocated = 0;
  138|       |
  139|   730k|    ensure_shared_on_resize(self);
  140|       |
  141|       |#ifdef Py_GIL_DISABLED
  142|       |    _PyListArray *array = list_allocate_array(new_allocated);
  143|       |    if (array == NULL) {
  144|       |        if (newsize < allocated) {
  145|       |            // Never fail when shrinking allocations
  146|       |            Py_SET_SIZE(self, newsize);
  147|       |            return 0;
  148|       |        }
  149|       |        PyErr_NoMemory();
  150|       |        return -1;
  151|       |    }
  152|       |    PyObject **old_items = self->ob_item;
  153|       |    if (self->ob_item) {
  154|       |        if (new_allocated < (size_t)allocated) {
  155|       |            target_bytes = new_allocated * sizeof(PyObject*);
  156|       |        }
  157|       |        else {
  158|       |            target_bytes = allocated * sizeof(PyObject*);
  159|       |        }
  160|       |        memcpy(array->ob_item, self->ob_item, target_bytes);
  161|       |    }
  162|       |    if (new_allocated > (size_t)allocated) {
  163|       |        memset(array->ob_item + allocated, 0, sizeof(PyObject *) * (new_allocated - allocated));
  164|       |    }
  165|       |     _Py_atomic_store_ptr_release(&self->ob_item, &array->ob_item);
  166|       |    self->allocated = new_allocated;
  167|       |    Py_SET_SIZE(self, newsize);
  168|       |    if (old_items != NULL) {
  169|       |        free_list_items(old_items, _PyObject_GC_IS_SHARED(self));
  170|       |    }
  171|       |#else
  172|   730k|    PyObject **items;
  173|   730k|    if (new_allocated <= (size_t)PY_SSIZE_T_MAX / sizeof(PyObject *)) {
  ------------------
  |  |  137|   730k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (173:9): [True: 730k, False: 0]
  ------------------
  174|   730k|        target_bytes = new_allocated * sizeof(PyObject *);
  175|   730k|        items = (PyObject **)PyMem_Realloc(self->ob_item, target_bytes);
  176|   730k|    }
  177|      0|    else {
  178|       |        // integer overflow
  179|      0|        items = NULL;
  180|      0|    }
  181|   730k|    if (items == NULL) {
  ------------------
  |  Branch (181:9): [True: 0, False: 730k]
  ------------------
  182|      0|        if (newsize < allocated) {
  ------------------
  |  Branch (182:13): [True: 0, False: 0]
  ------------------
  183|       |            // Never fail when shrinking allocations
  184|      0|            Py_SET_SIZE(self, newsize);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|      0|            return 0;
  186|      0|        }
  187|      0|        PyErr_NoMemory();
  188|      0|        return -1;
  189|      0|    }
  190|   730k|    self->ob_item = items;
  191|   730k|    Py_SET_SIZE(self, newsize);
  ------------------
  |  |  216|   730k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   730k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   730k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|   730k|    self->allocated = new_allocated;
  193|   730k|#endif
  194|   730k|    return 0;
  195|   730k|}
listobject.c:ensure_shared_on_resize:
   77|   730k|{
   78|       |#ifdef Py_GIL_DISABLED
   79|       |    // We can't use _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED here because
   80|       |    // the `CALL_LIST_APPEND` bytecode handler may lock the list without
   81|       |    // a critical section.
   82|       |    assert(Py_REFCNT(self) == 1 || PyMutex_IsLocked(&_PyObject_CAST(self)->ob_mutex));
   83|       |
   84|       |    // Ensure that the list array is freed using QSBR if we are not the
   85|       |    // owning thread.
   86|       |    if (!_Py_IsOwnedByCurrentThread((PyObject *)self) &&
   87|       |        !_PyObject_GC_IS_SHARED(self))
   88|       |    {
   89|       |        _PyObject_GC_SET_SHARED(self);
   90|       |    }
   91|       |#endif
   92|   730k|}
listobject.c:list_slice_lock_held:
  697|  2.45k|{
  698|  2.45k|    PyListObject *np;
  699|  2.45k|    PyObject **src, **dest;
  700|  2.45k|    Py_ssize_t i, len;
  701|  2.45k|    len = ihigh - ilow;
  702|  2.45k|    if (len <= 0) {
  ------------------
  |  Branch (702:9): [True: 26, False: 2.42k]
  ------------------
  703|     26|        return PyList_New(0);
  704|     26|    }
  705|  2.42k|    np = (PyListObject *) list_new_prealloc(len);
  706|  2.42k|    if (np == NULL)
  ------------------
  |  Branch (706:9): [True: 0, False: 2.42k]
  ------------------
  707|      0|        return NULL;
  708|       |
  709|  2.42k|    src = a->ob_item + ilow;
  710|  2.42k|    dest = np->ob_item;
  711|   101k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (711:17): [True: 99.5k, False: 2.42k]
  ------------------
  712|  99.5k|        PyObject *v = src[i];
  713|  99.5k|        dest[i] = Py_NewRef(v);
  ------------------
  |  |  550|  99.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  99.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  99.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|  99.5k|    }
  715|  2.42k|    Py_SET_SIZE(np, len);
  ------------------
  |  |  216|  2.42k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  2.42k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  716|  2.42k|    return (PyObject *)np;
  717|  2.42k|}
listobject.c:list_new_prealloc:
  283|  2.48k|{
  284|  2.48k|    assert(size > 0);
  ------------------
  |  Branch (284:5): [True: 2.48k, False: 0]
  ------------------
  285|  2.48k|    PyListObject *op = (PyListObject *) PyList_New(0);
  286|  2.48k|    if (op == NULL) {
  ------------------
  |  Branch (286:9): [True: 0, False: 2.48k]
  ------------------
  287|      0|        return NULL;
  288|      0|    }
  289|  2.48k|    assert(op->ob_item == NULL);
  ------------------
  |  Branch (289:5): [True: 2.48k, False: 0]
  ------------------
  290|       |#ifdef Py_GIL_DISABLED
  291|       |    _PyListArray *array = list_allocate_array(size);
  292|       |    if (array == NULL) {
  293|       |        Py_DECREF(op);
  294|       |        return PyErr_NoMemory();
  295|       |    }
  296|       |    op->ob_item = array->ob_item;
  297|       |#else
  298|  2.48k|    op->ob_item = PyMem_New(PyObject *, size);
  ------------------
  |  |   64|  2.48k|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|  2.48k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 2.48k]
  |  |  ------------------
  |  |   65|  2.48k|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
  299|  2.48k|    if (op->ob_item == NULL) {
  ------------------
  |  Branch (299:9): [True: 0, False: 2.48k]
  ------------------
  300|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      0|        return PyErr_NoMemory();
  302|      0|    }
  303|  2.48k|#endif
  304|  2.48k|    op->allocated = size;
  305|  2.48k|    return (PyObject *) op;
  306|  2.48k|}
listobject.c:list_concat_lock_held:
  771|     24|{
  772|     24|    Py_ssize_t size;
  773|     24|    Py_ssize_t i;
  774|     24|    PyObject **src, **dest;
  775|     24|    PyListObject *np;
  776|     24|    assert((size_t)Py_SIZE(a) + (size_t)Py_SIZE(b) < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (776:5): [True: 24, False: 0]
  ------------------
  777|     24|    size = Py_SIZE(a) + Py_SIZE(b);
  ------------------
  |  |  214|     24|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  size = Py_SIZE(a) + Py_SIZE(b);
  ------------------
  |  |  214|     24|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  778|     24|    if (size == 0) {
  ------------------
  |  Branch (778:9): [True: 0, False: 24]
  ------------------
  779|      0|        return PyList_New(0);
  780|      0|    }
  781|     24|    np = (PyListObject *) list_new_prealloc(size);
  782|     24|    if (np == NULL) {
  ------------------
  |  Branch (782:9): [True: 0, False: 24]
  ------------------
  783|      0|        return NULL;
  784|      0|    }
  785|     24|    src = a->ob_item;
  786|     24|    dest = np->ob_item;
  787|    314|    for (i = 0; i < Py_SIZE(a); i++) {
  ------------------
  |  |  214|    314|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    314|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    314|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (787:17): [True: 290, False: 24]
  ------------------
  788|    290|        PyObject *v = src[i];
  789|    290|        dest[i] = Py_NewRef(v);
  ------------------
  |  |  550|    290|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    290|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    290|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  790|    290|    }
  791|     24|    src = b->ob_item;
  792|     24|    dest = np->ob_item + Py_SIZE(a);
  ------------------
  |  |  214|     24|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|    396|    for (i = 0; i < Py_SIZE(b); i++) {
  ------------------
  |  |  214|    396|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    396|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    396|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (793:17): [True: 372, False: 24]
  ------------------
  794|    372|        PyObject *v = src[i];
  795|    372|        dest[i] = Py_NewRef(v);
  ------------------
  |  |  550|    372|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    372|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    372|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  796|    372|    }
  797|     24|    Py_SET_SIZE(np, size);
  ------------------
  |  |  216|     24|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|     24|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|     24|    return (PyObject *)np;
  799|     24|}
listobject.c:list_ass_slice:
 1042|   116k|{
 1043|   116k|    int ret;
 1044|   116k|    if (a == (PyListObject *)v) {
  ------------------
  |  Branch (1044:9): [True: 0, False: 116k]
  ------------------
 1045|      0|        Py_BEGIN_CRITICAL_SECTION(a);
  ------------------
  |  |   51|      0|    {
  ------------------
 1046|      0|        Py_ssize_t n = PyList_GET_SIZE(a);
  ------------------
  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1047|      0|        PyObject *copy = list_slice_lock_held(a, 0, n);
 1048|      0|        if (copy == NULL) {
  ------------------
  |  Branch (1048:13): [True: 0, False: 0]
  ------------------
 1049|      0|            ret = -1;
 1050|      0|        }
 1051|      0|        else {
 1052|      0|            ret = list_ass_slice_lock_held(a, ilow, ihigh, copy);
 1053|      0|            Py_DECREF(copy);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|      0|        }
 1055|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 1056|      0|    }
 1057|   116k|    else if (v != NULL && PyList_CheckExact(v)) {
  ------------------
  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1057:14): [True: 0, False: 116k]
  ------------------
 1058|      0|        Py_BEGIN_CRITICAL_SECTION2(a, v);
  ------------------
  |  |   57|      0|    {
  ------------------
 1059|      0|        ret = list_ass_slice_lock_held(a, ilow, ihigh, v);
 1060|      0|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      0|    }
  ------------------
 1061|      0|    }
 1062|   116k|    else {
 1063|   116k|        Py_BEGIN_CRITICAL_SECTION(a);
  ------------------
  |  |   51|   116k|    {
  ------------------
 1064|   116k|        ret = list_ass_slice_lock_held(a, ilow, ihigh, v);
 1065|   116k|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   116k|    }
  ------------------
 1066|   116k|    }
 1067|   116k|    return ret;
 1068|   116k|}
listobject.c:list_ass_slice_lock_held:
  951|   117k|{
  952|       |    /* Because [X]DECREF can recursively invoke list operations on
  953|       |       this list, we must postpone all [X]DECREF activity until
  954|       |       after the list is back in its canonical shape.  Therefore
  955|       |       we must allocate an additional array, 'recycle', into which
  956|       |       we temporarily copy the items that are deleted from the
  957|       |       list. :-( */
  958|   117k|    PyObject *recycle_on_stack[8];
  959|   117k|    PyObject **recycle = recycle_on_stack; /* will allocate more if needed */
  960|   117k|    PyObject **item;
  961|   117k|    PyObject **vitem = NULL;
  962|   117k|    PyObject *v_as_SF = NULL; /* PySequence_Fast(v) */
  963|   117k|    Py_ssize_t n; /* # of elements in replacement list */
  964|   117k|    Py_ssize_t norig; /* # of elements in list getting replaced */
  965|   117k|    Py_ssize_t d; /* Change in size */
  966|   117k|    Py_ssize_t k;
  967|   117k|    size_t s;
  968|   117k|    int result = -1;            /* guilty until proved innocent */
  969|   117k|#define b ((PyListObject *)v)
  970|   117k|    if (v == NULL)
  ------------------
  |  Branch (970:9): [True: 117k, False: 76]
  ------------------
  971|   117k|        n = 0;
  972|     76|    else {
  973|     76|        v_as_SF = PySequence_Fast(v, "can only assign an iterable");
  974|     76|        if(v_as_SF == NULL)
  ------------------
  |  Branch (974:12): [True: 0, False: 76]
  ------------------
  975|      0|            goto Error;
  976|     76|        n = PySequence_Fast_GET_SIZE(v_as_SF);
  ------------------
  |  |   92|     76|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|     76|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|     76|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 76, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|     76|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  977|     76|        vitem = PySequence_Fast_ITEMS(v_as_SF);
  ------------------
  |  |  102|     76|    (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
  |  |  ------------------
  |  |  |  |   25|     76|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|     76|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 76, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  103|     76|                      : ((PyTupleObject *)(sf))->ob_item)
  ------------------
  978|     76|    }
  979|   117k|    if (ilow < 0)
  ------------------
  |  Branch (979:9): [True: 0, False: 117k]
  ------------------
  980|      0|        ilow = 0;
  981|   117k|    else if (ilow > Py_SIZE(a))
  ------------------
  |  |  214|   117k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   117k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   117k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (981:14): [True: 0, False: 117k]
  ------------------
  982|      0|        ilow = Py_SIZE(a);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  983|       |
  984|   117k|    if (ihigh < ilow)
  ------------------
  |  Branch (984:9): [True: 0, False: 117k]
  ------------------
  985|      0|        ihigh = ilow;
  986|   117k|    else if (ihigh > Py_SIZE(a))
  ------------------
  |  |  214|   117k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   117k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   117k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (986:14): [True: 0, False: 117k]
  ------------------
  987|      0|        ihigh = Py_SIZE(a);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|       |
  989|   117k|    norig = ihigh - ilow;
  990|   117k|    assert(norig >= 0);
  ------------------
  |  Branch (990:5): [True: 117k, False: 0]
  ------------------
  991|   117k|    d = n - norig;
  992|   117k|    if (Py_SIZE(a) + d == 0) {
  ------------------
  |  |  214|   117k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   117k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   117k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (992:9): [True: 11.1k, False: 106k]
  ------------------
  993|  11.1k|        Py_XDECREF(v_as_SF);
  ------------------
  |  |  524|  11.1k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  994|  11.1k|        list_clear(a);
  995|  11.1k|        return 0;
  996|  11.1k|    }
  997|   106k|    item = a->ob_item;
  998|       |    /* recycle the items that we are about to remove */
  999|   106k|    s = norig * sizeof(PyObject *);
 1000|       |    /* If norig == 0, item might be NULL, in which case we may not memcpy from it. */
 1001|   106k|    if (s) {
  ------------------
  |  Branch (1001:9): [True: 106k, False: 2]
  ------------------
 1002|   106k|        if (s > sizeof(recycle_on_stack)) {
  ------------------
  |  Branch (1002:13): [True: 3.60k, False: 102k]
  ------------------
 1003|  3.60k|            recycle = (PyObject **)PyMem_Malloc(s);
 1004|  3.60k|            if (recycle == NULL) {
  ------------------
  |  Branch (1004:17): [True: 0, False: 3.60k]
  ------------------
 1005|      0|                PyErr_NoMemory();
 1006|      0|                goto Error;
 1007|      0|            }
 1008|  3.60k|        }
 1009|   106k|        memcpy(recycle, &item[ilow], s);
 1010|   106k|    }
 1011|       |
 1012|   106k|    if (d < 0) { /* Delete -d items */
  ------------------
  |  Branch (1012:9): [True: 106k, False: 74]
  ------------------
 1013|   106k|        Py_ssize_t tail = Py_SIZE(a) - ihigh;
  ------------------
  |  |  214|   106k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|   106k|        ptr_wise_atomic_memmove(a, &item[ihigh+d], &item[ihigh], tail);
 1015|   106k|        (void)list_resize(a, Py_SIZE(a) + d); // NB: shrinking a list can't fail
  ------------------
  |  |  214|   106k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|   106k|        item = a->ob_item;
 1017|   106k|    }
 1018|     74|    else if (d > 0) { /* Insert d items */
  ------------------
  |  Branch (1018:14): [True: 2, False: 72]
  ------------------
 1019|      2|        k = Py_SIZE(a);
  ------------------
  |  |  214|      2|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1020|      2|        if (list_resize(a, k+d) < 0)
  ------------------
  |  Branch (1020:13): [True: 0, False: 2]
  ------------------
 1021|      0|            goto Error;
 1022|      2|        item = a->ob_item;
 1023|      2|        ptr_wise_atomic_memmove(a, &item[ihigh+d], &item[ihigh], k - ihigh);
 1024|      2|    }
 1025|   106k|    for (k = 0; k < n; k++, ilow++) {
  ------------------
  |  Branch (1025:17): [True: 257, False: 106k]
  ------------------
 1026|    257|        PyObject *w = vitem[k];
 1027|    257|        FT_ATOMIC_STORE_PTR_RELEASE(item[ilow], Py_XNewRef(w));
  ------------------
  |  |  164|    257|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1028|    257|    }
 1029|   444k|    for (k = norig - 1; k >= 0; --k)
  ------------------
  |  Branch (1029:25): [True: 337k, False: 106k]
  ------------------
 1030|   337k|        Py_XDECREF(recycle[k]);
  ------------------
  |  |  524|   444k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   337k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   337k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|   106k|    result = 0;
 1032|   106k| Error:
 1033|   106k|    if (recycle != recycle_on_stack)
  ------------------
  |  Branch (1033:9): [True: 3.60k, False: 102k]
  ------------------
 1034|  3.60k|        PyMem_Free(recycle);
 1035|   106k|    Py_XDECREF(v_as_SF);
  ------------------
  |  |  524|   106k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1036|   106k|    return result;
 1037|   106k|#undef b
 1038|   106k|}
listobject.c:ptr_wise_atomic_memmove:
  919|   106k|{
  920|   106k|#ifndef Py_GIL_DISABLED
  921|   106k|    memmove(dest, src, n * sizeof(PyObject *));
  922|       |#else
  923|       |    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(a);
  924|       |    if (_Py_IsOwnedByCurrentThread((PyObject *)a) && !_PyObject_GC_IS_SHARED(a)) {
  925|       |        // No other threads can read this list concurrently
  926|       |        memmove(dest, src, n * sizeof(PyObject *));
  927|       |        return;
  928|       |    }
  929|       |    if (dest < src) {
  930|       |        for (Py_ssize_t i = 0; i != n; i++) {
  931|       |            _Py_atomic_store_ptr_release(&dest[i], src[i]);
  932|       |        }
  933|       |    }
  934|       |    else {
  935|       |        // copy backwards to avoid overwriting src before it's read
  936|       |        for (Py_ssize_t i = n; i != 0; i--) {
  937|       |            _Py_atomic_store_ptr_release(&dest[i - 1], src[i - 1]);
  938|       |        }
  939|       |    }
  940|       |#endif
  941|   106k|}
listobject.c:list_extend_impl:
 1525|  84.7k|{
 1526|  84.7k|    if (_list_extend(self, iterable) < 0) {
  ------------------
  |  Branch (1526:9): [True: 0, False: 84.7k]
  ------------------
 1527|      0|        return NULL;
 1528|      0|    }
 1529|  84.7k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  84.7k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  84.7k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1530|  84.7k|}
listobject.c:_list_extend:
 1458|  85.1k|{
 1459|       |    // Special case:
 1460|       |    // lists and tuples which can use PySequence_Fast ops
 1461|  85.1k|    int res = -1;
 1462|  85.1k|    if ((PyObject *)self == iterable) {
  ------------------
  |  Branch (1462:9): [True: 0, False: 85.1k]
  ------------------
 1463|      0|        Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      0|    {
  ------------------
 1464|      0|        res = list_inplace_repeat_lock_held(self, 2);
 1465|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 1466|      0|    }
 1467|  85.1k|    else if (PyList_CheckExact(iterable)) {
  ------------------
  |  |   26|  85.1k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|  85.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  85.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  85.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 396, False: 84.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1468|    396|        Py_BEGIN_CRITICAL_SECTION2(self, iterable);
  ------------------
  |  |   57|    396|    {
  ------------------
 1469|    396|        res = list_extend_lock_held(self, iterable);
 1470|    396|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|    396|    }
  ------------------
 1471|    396|    }
 1472|  84.7k|    else if (PyTuple_CheckExact(iterable)) {
  ------------------
  |  |   28|  84.7k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  84.7k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  84.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  84.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 233, False: 84.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1473|    233|        Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    233|    {
  ------------------
 1474|    233|        res = list_extend_lock_held(self, iterable);
 1475|    233|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    233|    }
  ------------------
 1476|    233|    }
 1477|  84.4k|    else if (PyAnySet_CheckExact(iterable)) {
  ------------------
  |  |   29|  84.4k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  215|   168k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  84.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  84.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 84.2k, False: 184]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  215|    184|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 184]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1478|  84.2k|        Py_BEGIN_CRITICAL_SECTION2(self, iterable);
  ------------------
  |  |   57|  84.2k|    {
  ------------------
 1479|  84.2k|        res = list_extend_set(self, (PySetObject *)iterable);
 1480|  84.2k|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|  84.2k|    }
  ------------------
 1481|  84.2k|    }
 1482|    184|    else if (PyDict_CheckExact(iterable)) {
  ------------------
  |  |   19|    184|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|    184|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 16, False: 168]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1483|     16|        Py_BEGIN_CRITICAL_SECTION2(self, iterable);
  ------------------
  |  |   57|     16|    {
  ------------------
 1484|     16|        res = list_extend_dict(self, (PyDictObject *)iterable, 0 /*keys*/);
 1485|     16|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|     16|    }
  ------------------
 1486|     16|    }
 1487|    168|    else if (Py_IS_TYPE(iterable, &PyDictKeys_Type)) {
  ------------------
  |  |  215|    168|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    168|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 168]
  |  |  ------------------
  ------------------
 1488|      0|        PyDictObject *dict = ((_PyDictViewObject *)iterable)->dv_dict;
 1489|      0|        Py_BEGIN_CRITICAL_SECTION2(self, dict);
  ------------------
  |  |   57|      0|    {
  ------------------
 1490|      0|        res = list_extend_dict(self, dict, 0 /*keys*/);
 1491|      0|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      0|    }
  ------------------
 1492|      0|    }
 1493|    168|    else if (Py_IS_TYPE(iterable, &PyDictValues_Type)) {
  ------------------
  |  |  215|    168|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    168|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 1, False: 167]
  |  |  ------------------
  ------------------
 1494|      1|        PyDictObject *dict = ((_PyDictViewObject *)iterable)->dv_dict;
 1495|      1|        Py_BEGIN_CRITICAL_SECTION2(self, dict);
  ------------------
  |  |   57|      1|    {
  ------------------
 1496|      1|        res = list_extend_dict(self, dict, 1 /*values*/);
 1497|      1|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      1|    }
  ------------------
 1498|      1|    }
 1499|    167|    else if (Py_IS_TYPE(iterable, &PyDictItems_Type)) {
  ------------------
  |  |  215|    167|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 1, False: 166]
  |  |  ------------------
  ------------------
 1500|      1|        PyDictObject *dict = ((_PyDictViewObject *)iterable)->dv_dict;
 1501|      1|        Py_BEGIN_CRITICAL_SECTION2(self, dict);
  ------------------
  |  |   57|      1|    {
  ------------------
 1502|      1|        res = list_extend_dictitems(self, dict);
 1503|      1|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      1|    }
  ------------------
 1504|      1|    }
 1505|    166|    else {
 1506|    166|        Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    166|    {
  ------------------
 1507|    166|        res = list_extend_iter_lock_held(self, iterable);
 1508|    166|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    166|    }
  ------------------
 1509|    166|    }
 1510|  85.1k|    return res;
 1511|  85.1k|}
listobject.c:list_extend_lock_held:
 1356|    629|{
 1357|    629|    PyObject *seq = PySequence_Fast(iterable, "argument must be iterable");
 1358|    629|    if (!seq) {
  ------------------
  |  Branch (1358:9): [True: 0, False: 629]
  ------------------
 1359|      0|        return -1;
 1360|      0|    }
 1361|       |
 1362|    629|    int res = list_extend_fast(self, seq);
 1363|    629|    Py_DECREF(seq);
  ------------------
  |  |  430|    629|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    629|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    629|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1364|    629|    return res;
 1365|    629|}
listobject.c:list_extend_fast:
 1243|    629|{
 1244|    629|    Py_ssize_t n = PySequence_Fast_GET_SIZE(iterable);
  ------------------
  |  |   92|    629|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|    629|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    629|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 396, False: 233]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|    396|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    396|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    396|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|    233|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    233|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    233|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1245|    629|    if (n == 0) {
  ------------------
  |  Branch (1245:9): [True: 108, False: 521]
  ------------------
 1246|       |        /* short circuit when iterable is empty */
 1247|    108|        return 0;
 1248|    108|    }
 1249|       |
 1250|    521|    Py_ssize_t m = Py_SIZE(self);
  ------------------
  |  |  214|    521|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    521|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    521|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1251|       |    // It should not be possible to allocate a list large enough to cause
 1252|       |    // an overflow on any relevant platform.
 1253|    521|    assert(m < PY_SSIZE_T_MAX - n);
  ------------------
  |  Branch (1253:5): [True: 521, False: 0]
  ------------------
 1254|    521|    if (self->ob_item == NULL) {
  ------------------
  |  Branch (1254:9): [True: 458, False: 63]
  ------------------
 1255|    458|        if (list_preallocate_exact(self, n) < 0) {
  ------------------
  |  Branch (1255:13): [True: 0, False: 458]
  ------------------
 1256|      0|            return -1;
 1257|      0|        }
 1258|    458|        Py_SET_SIZE(self, n);
  ------------------
  |  |  216|    458|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|    458|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    458|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1259|    458|    }
 1260|     63|    else if (list_resize(self, m + n) < 0) {
  ------------------
  |  Branch (1260:14): [True: 0, False: 63]
  ------------------
 1261|      0|        return -1;
 1262|      0|    }
 1263|       |
 1264|       |    // note that we may still have self == iterable here for the
 1265|       |    // situation a.extend(a), but the following code works
 1266|       |    // in that case too.  Just make sure to resize self
 1267|       |    // before calling PySequence_Fast_ITEMS.
 1268|       |    //
 1269|       |    // populate the end of self with iterable's items.
 1270|    521|    PyObject **src = PySequence_Fast_ITEMS(iterable);
  ------------------
  |  |  102|    521|    (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
  |  |  ------------------
  |  |  |  |   25|    521|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    521|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 381, False: 140]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  103|    521|                      : ((PyTupleObject *)(sf))->ob_item)
  ------------------
 1271|    521|    PyObject **dest = self->ob_item + m;
 1272|  4.03k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (1272:28): [True: 3.51k, False: 521]
  ------------------
 1273|  3.51k|        PyObject *o = src[i];
 1274|  3.51k|        FT_ATOMIC_STORE_PTR_RELEASE(dest[i], Py_NewRef(o));
  ------------------
  |  |  164|  3.51k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1275|  3.51k|    }
 1276|    521|    return 0;
 1277|    521|}
listobject.c:list_preallocate_exact:
  199|    606|{
  200|    606|    PyObject **items;
  201|    606|    assert(self->ob_item == NULL);
  ------------------
  |  Branch (201:5): [True: 606, False: 0]
  ------------------
  202|    606|    assert(size > 0);
  ------------------
  |  Branch (202:5): [True: 606, False: 0]
  ------------------
  203|       |
  204|       |    /* Since the Python memory allocator has granularity of 16 bytes on 64-bit
  205|       |     * platforms (8 on 32-bit), there is no benefit of allocating space for
  206|       |     * the odd number of items, and there is no drawback of rounding the
  207|       |     * allocated size up to the nearest even number.
  208|       |     */
  209|    606|    size = (size + 1) & ~(size_t)1;
  210|       |#ifdef Py_GIL_DISABLED
  211|       |    _PyListArray *array = list_allocate_array(size);
  212|       |    if (array == NULL) {
  213|       |        PyErr_NoMemory();
  214|       |        return -1;
  215|       |    }
  216|       |    items = array->ob_item;
  217|       |    memset(items, 0, size * sizeof(PyObject *));
  218|       |#else
  219|    606|    items = PyMem_New(PyObject*, size);
  ------------------
  |  |   64|    606|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|    606|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 606]
  |  |  ------------------
  |  |   65|    606|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
  220|    606|    if (items == NULL) {
  ------------------
  |  Branch (220:9): [True: 0, False: 606]
  ------------------
  221|      0|        PyErr_NoMemory();
  222|      0|        return -1;
  223|      0|    }
  224|    606|#endif
  225|    606|    FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item, items);
  ------------------
  |  |  164|    606|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  226|    606|    self->allocated = size;
  227|    606|    return 0;
  228|    606|}
listobject.c:list_extend_set:
 1369|  84.2k|{
 1370|  84.2k|    Py_ssize_t m = Py_SIZE(self);
  ------------------
  |  |  214|  84.2k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  84.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1371|  84.2k|    Py_ssize_t n = PySet_GET_SIZE(other);
  ------------------
  |  |   71|  84.2k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  84.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1372|  84.2k|    Py_ssize_t r = m + n;
 1373|  84.2k|    if (r == 0) {
  ------------------
  |  Branch (1373:9): [True: 63.4k, False: 20.8k]
  ------------------
 1374|  63.4k|        return 0;
 1375|  63.4k|    }
 1376|  20.8k|    if (list_resize(self, r) < 0) {
  ------------------
  |  Branch (1376:9): [True: 0, False: 20.8k]
  ------------------
 1377|      0|        return -1;
 1378|      0|    }
 1379|       |
 1380|  20.8k|    assert(self->ob_item != NULL);
  ------------------
  |  Branch (1380:5): [True: 20.8k, False: 0]
  ------------------
 1381|       |    /* populate the end of self with iterable's items */
 1382|  20.8k|    Py_ssize_t setpos = 0;
 1383|  20.8k|    Py_hash_t hash;
 1384|  20.8k|    PyObject *key;
 1385|  20.8k|    PyObject **dest = self->ob_item + m;
 1386|   164k|    while (_PySet_NextEntryRef((PyObject *)other, &setpos, &key, &hash)) {
  ------------------
  |  Branch (1386:12): [True: 143k, False: 20.8k]
  ------------------
 1387|   143k|        FT_ATOMIC_STORE_PTR_RELEASE(*dest, key);
  ------------------
  |  |  164|   143k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1388|   143k|        dest++;
 1389|   143k|    }
 1390|  20.8k|    Py_SET_SIZE(self, r);
  ------------------
  |  |  216|  20.8k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  20.8k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1391|  20.8k|    return 0;
 1392|  20.8k|}
listobject.c:list_extend_dict:
 1396|     17|{
 1397|       |    // which_item: 0 for keys and 1 for values
 1398|     17|    Py_ssize_t m = Py_SIZE(self);
  ------------------
  |  |  214|     17|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1399|     17|    Py_ssize_t n = PyDict_GET_SIZE(dict);
  ------------------
  |  |   63|     17|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1400|     17|    Py_ssize_t r = m + n;
 1401|     17|    if (r == 0) {
  ------------------
  |  Branch (1401:9): [True: 0, False: 17]
  ------------------
 1402|      0|        return 0;
 1403|      0|    }
 1404|     17|    if (list_resize(self, r) < 0) {
  ------------------
  |  Branch (1404:9): [True: 0, False: 17]
  ------------------
 1405|      0|        return -1;
 1406|      0|    }
 1407|       |
 1408|     17|    assert(self->ob_item != NULL);
  ------------------
  |  Branch (1408:5): [True: 17, False: 0]
  ------------------
 1409|     17|    PyObject **dest = self->ob_item + m;
 1410|     17|    Py_ssize_t pos = 0;
 1411|     17|    PyObject *keyvalue[2];
 1412|    182|    while (_PyDict_Next((PyObject *)dict, &pos, &keyvalue[0], &keyvalue[1], NULL)) {
  ------------------
  |  Branch (1412:12): [True: 165, False: 17]
  ------------------
 1413|    165|        PyObject *obj = keyvalue[which_item];
 1414|    165|        Py_INCREF(obj);
  ------------------
  |  |  310|    165|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    165|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    165|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1415|    165|        FT_ATOMIC_STORE_PTR_RELEASE(*dest, obj);
  ------------------
  |  |  164|    165|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1416|    165|        dest++;
 1417|    165|    }
 1418|       |
 1419|     17|    Py_SET_SIZE(self, r);
  ------------------
  |  |  216|     17|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|     17|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1420|     17|    return 0;
 1421|     17|}
listobject.c:list_extend_dictitems:
 1425|      1|{
 1426|      1|    Py_ssize_t m = Py_SIZE(self);
  ------------------
  |  |  214|      1|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|      1|    Py_ssize_t n = PyDict_GET_SIZE(dict);
  ------------------
  |  |   63|      1|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1428|      1|    Py_ssize_t r = m + n;
 1429|      1|    if (r == 0) {
  ------------------
  |  Branch (1429:9): [True: 0, False: 1]
  ------------------
 1430|      0|        return 0;
 1431|      0|    }
 1432|      1|    if (list_resize(self, r) < 0) {
  ------------------
  |  Branch (1432:9): [True: 0, False: 1]
  ------------------
 1433|      0|        return -1;
 1434|      0|    }
 1435|       |
 1436|      1|    assert(self->ob_item != NULL);
  ------------------
  |  Branch (1436:5): [True: 1, False: 0]
  ------------------
 1437|      1|    PyObject **dest = self->ob_item + m;
 1438|      1|    Py_ssize_t pos = 0;
 1439|      1|    Py_ssize_t i = 0;
 1440|      1|    PyObject *key, *value;
 1441|     45|    while (_PyDict_Next((PyObject *)dict, &pos, &key, &value, NULL)) {
  ------------------
  |  Branch (1441:12): [True: 44, False: 1]
  ------------------
 1442|     44|        PyObject *item = _PyTuple_FromPair(key, value);
 1443|     44|        if (item == NULL) {
  ------------------
  |  Branch (1443:13): [True: 0, False: 44]
  ------------------
 1444|      0|            Py_SET_SIZE(self, m + i);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1445|      0|            return -1;
 1446|      0|        }
 1447|     44|        FT_ATOMIC_STORE_PTR_RELEASE(*dest, item);
  ------------------
  |  |  164|     44|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1448|     44|        dest++;
 1449|     44|        i++;
 1450|     44|    }
 1451|       |
 1452|      1|    Py_SET_SIZE(self, r);
  ------------------
  |  |  216|      1|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      1|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1453|      1|    return 0;
 1454|      1|}
listobject.c:list_extend_iter_lock_held:
 1281|    166|{
 1282|    166|    PyObject *it = PyObject_GetIter(iterable);
 1283|    166|    if (it == NULL) {
  ------------------
  |  Branch (1283:9): [True: 0, False: 166]
  ------------------
 1284|      0|        return -1;
 1285|      0|    }
 1286|    166|    PyObject *(*iternext)(PyObject *) = *Py_TYPE(it)->tp_iternext;
  ------------------
  |  |  213|    166|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    166|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    166|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1287|       |
 1288|       |    /* Guess a result list size. */
 1289|    166|    Py_ssize_t n = PyObject_LengthHint(iterable, 8);
 1290|    166|    if (n < 0) {
  ------------------
  |  Branch (1290:9): [True: 0, False: 166]
  ------------------
 1291|      0|        Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1292|      0|        return -1;
 1293|      0|    }
 1294|       |
 1295|    166|    Py_ssize_t m = Py_SIZE(self);
  ------------------
  |  |  214|    166|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    166|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    166|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|    166|    if (m > PY_SSIZE_T_MAX - n) {
  ------------------
  |  |  137|    166|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1296:9): [True: 0, False: 166]
  ------------------
 1297|       |        /* m + n overflowed; on the chance that n lied, and there really
 1298|       |         * is enough room, ignore it.  If n was telling the truth, we'll
 1299|       |         * eventually run out of memory during the loop.
 1300|       |         */
 1301|      0|    }
 1302|    166|    else if (self->ob_item == NULL) {
  ------------------
  |  Branch (1302:14): [True: 148, False: 18]
  ------------------
 1303|    148|        if (n && list_preallocate_exact(self, n) < 0)
  ------------------
  |  Branch (1303:13): [True: 148, False: 0]
  |  Branch (1303:18): [True: 0, False: 148]
  ------------------
 1304|      0|            goto error;
 1305|    148|    }
 1306|     18|    else {
 1307|       |        /* Make room. */
 1308|     18|        if (list_resize(self, m + n) < 0) {
  ------------------
  |  Branch (1308:13): [True: 0, False: 18]
  ------------------
 1309|      0|            goto error;
 1310|      0|        }
 1311|       |
 1312|       |        /* Make the list sane again. */
 1313|     18|        Py_SET_SIZE(self, m);
  ------------------
  |  |  216|     18|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|     18|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1314|     18|    }
 1315|       |
 1316|       |    /* Run iterator to exhaustion. */
 1317|  5.82k|    for (;;) {
 1318|  5.82k|        PyObject *item = iternext(it);
 1319|  5.82k|        if (item == NULL) {
  ------------------
  |  Branch (1319:13): [True: 166, False: 5.65k]
  ------------------
 1320|    166|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (1320:17): [True: 0, False: 166]
  ------------------
 1321|      0|                if (PyErr_ExceptionMatches(PyExc_StopIteration))
  ------------------
  |  Branch (1321:21): [True: 0, False: 0]
  ------------------
 1322|      0|                    PyErr_Clear();
 1323|      0|                else
 1324|      0|                    goto error;
 1325|      0|            }
 1326|    166|            break;
 1327|    166|        }
 1328|       |
 1329|  5.65k|        if (Py_SIZE(self) < self->allocated) {
  ------------------
  |  |  214|  5.65k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1329:13): [True: 5.65k, False: 0]
  ------------------
 1330|  5.65k|            Py_ssize_t len = Py_SIZE(self);
  ------------------
  |  |  214|  5.65k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1331|  5.65k|            FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item[len], item);  // steals item ref
  ------------------
  |  |  164|  5.65k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1332|  5.65k|            Py_SET_SIZE(self, len + 1);
  ------------------
  |  |  216|  5.65k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  5.65k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1333|  5.65k|        }
 1334|      0|        else {
 1335|      0|            if (_PyList_AppendTakeRef(self, item) < 0)
  ------------------
  |  Branch (1335:17): [True: 0, False: 0]
  ------------------
 1336|      0|                goto error;
 1337|      0|        }
 1338|  5.65k|    }
 1339|       |
 1340|       |    /* Cut back result list if initial guess was too large. */
 1341|    166|    if (Py_SIZE(self) < self->allocated) {
  ------------------
  |  |  214|    166|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    166|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    166|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1341:9): [True: 74, False: 92]
  ------------------
 1342|     74|        if (list_resize(self, Py_SIZE(self)) < 0)
  ------------------
  |  |  214|     74|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     74|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     74|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1342:13): [True: 0, False: 74]
  ------------------
 1343|      0|            goto error;
 1344|     74|    }
 1345|       |
 1346|    166|    Py_DECREF(it);
  ------------------
  |  |  430|    166|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    166|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    166|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1347|    166|    return 0;
 1348|       |
 1349|      0|  error:
 1350|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1351|      0|    return -1;
 1352|    166|}
listobject.c:list_clear:
  904|  11.7k|{
  905|       |    list_clear_impl(a, true);
  906|  11.7k|}
listobject.c:list_clear_impl:
  874|  11.7k|{
  875|  11.7k|    PyObject **items = a->ob_item;
  876|  11.7k|    if (items == NULL) {
  ------------------
  |  Branch (876:9): [True: 2, False: 11.7k]
  ------------------
  877|      2|        return;
  878|      2|    }
  879|       |
  880|       |    /* Because XDECREF can recursively invoke operations on
  881|       |       this list, we make it empty first. */
  882|  11.7k|    Py_ssize_t i = Py_SIZE(a);
  ------------------
  |  |  214|  11.7k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  11.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  883|  11.7k|    Py_SET_SIZE(a, 0);
  ------------------
  |  |  216|  11.7k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  11.7k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  884|  11.7k|    FT_ATOMIC_STORE_PTR_RELEASE(a->ob_item, NULL);
  ------------------
  |  |  164|  11.7k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  885|  11.7k|    a->allocated = 0;
  886|  23.6k|    while (--i >= 0) {
  ------------------
  |  Branch (886:12): [True: 11.8k, False: 11.7k]
  ------------------
  887|  11.8k|        Py_XDECREF(items[i]);
  ------------------
  |  |  524|  11.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  11.8k|    }
  889|       |#ifdef Py_GIL_DISABLED
  890|       |    if (is_resize) {
  891|       |        ensure_shared_on_resize(a);
  892|       |    }
  893|       |    bool use_qsbr = is_resize && _PyObject_GC_IS_SHARED(a);
  894|       |#else
  895|  11.7k|    bool use_qsbr = false;
  896|  11.7k|#endif
  897|  11.7k|    free_list_items(items, use_qsbr);
  898|       |    // Note that there is no guarantee that the list is actually empty
  899|       |    // at this point, because XDECREF may have populated it indirectly again!
  900|  11.7k|}
listobject.c:free_list_items:
   60|   573k|{
   61|       |#ifdef Py_GIL_DISABLED
   62|       |    _PyListArray *array = _Py_CONTAINER_OF(items, _PyListArray, ob_item);
   63|       |    if (use_qsbr) {
   64|       |        size_t size = sizeof(_PyListArray) + array->allocated * sizeof(PyObject *);
   65|       |        _PyMem_FreeDelayed(array, size);
   66|       |    }
   67|       |    else {
   68|       |        PyMem_Free(array);
   69|       |    }
   70|       |#else
   71|   573k|    PyMem_Free(items);
   72|   573k|#endif
   73|   573k|}
listobject.c:list_sort_impl:
 2946|   137k|{
 2947|   137k|    MergeState ms;
 2948|   137k|    Py_ssize_t nremaining;
 2949|   137k|    Py_ssize_t minrun;
 2950|   137k|    sortslice lo;
 2951|   137k|    Py_ssize_t saved_ob_size, saved_allocated;
 2952|   137k|    PyObject **saved_ob_item;
 2953|   137k|    PyObject **final_ob_item;
 2954|   137k|    PyObject *result = NULL;            /* guilty until proved innocent */
 2955|   137k|    Py_ssize_t i;
 2956|   137k|    PyObject **keys;
 2957|       |
 2958|   137k|    assert(self != NULL);
  ------------------
  |  Branch (2958:5): [True: 137k, False: 0]
  ------------------
 2959|   137k|    assert(PyList_Check(self));
  ------------------
  |  Branch (2959:5): [True: 137k, False: 0]
  ------------------
 2960|   137k|    if (keyfunc == Py_None)
  ------------------
  |  |  616|   137k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2960:9): [True: 17.8k, False: 119k]
  ------------------
 2961|  17.8k|        keyfunc = NULL;
 2962|       |
 2963|       |    /* The list is temporarily made empty, so that mutations performed
 2964|       |     * by comparison functions can't affect the slice of memory we're
 2965|       |     * sorting (allowing mutations during sorting is a core-dump
 2966|       |     * factory, since ob_item may change).
 2967|       |     */
 2968|   137k|    saved_ob_size = Py_SIZE(self);
  ------------------
  |  |  214|   137k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   137k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2969|   137k|    saved_ob_item = self->ob_item;
 2970|   137k|    saved_allocated = self->allocated;
 2971|   137k|    Py_SET_SIZE(self, 0);
  ------------------
  |  |  216|   137k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   137k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2972|   137k|    FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item, NULL);
  ------------------
  |  |  164|   137k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 2973|   137k|    self->allocated = -1; /* any operation will reset it to >= 0 */
 2974|       |
 2975|   137k|    if (keyfunc == NULL) {
  ------------------
  |  Branch (2975:9): [True: 137k, False: 2]
  ------------------
 2976|   137k|        keys = NULL;
 2977|   137k|        lo.keys = saved_ob_item;
 2978|   137k|        lo.values = NULL;
 2979|   137k|    }
 2980|      2|    else {
 2981|      2|        if (saved_ob_size < MERGESTATE_TEMP_SIZE/2)
  ------------------
  |  | 1731|      2|#define MERGESTATE_TEMP_SIZE 256
  ------------------
  |  Branch (2981:13): [True: 2, False: 0]
  ------------------
 2982|       |            /* Leverage stack space we allocated but won't otherwise use */
 2983|      2|            keys = &ms.temparray[saved_ob_size+1];
 2984|      0|        else {
 2985|      0|            keys = PyMem_Malloc(sizeof(PyObject *) * saved_ob_size);
 2986|      0|            if (keys == NULL) {
  ------------------
  |  Branch (2986:17): [True: 0, False: 0]
  ------------------
 2987|      0|                PyErr_NoMemory();
 2988|      0|                goto keyfunc_fail;
 2989|      0|            }
 2990|      0|        }
 2991|       |
 2992|      6|        for (i = 0; i < saved_ob_size ; i++) {
  ------------------
  |  Branch (2992:21): [True: 4, False: 2]
  ------------------
 2993|      4|            keys[i] = PyObject_CallOneArg(keyfunc, saved_ob_item[i]);
 2994|      4|            if (keys[i] == NULL) {
  ------------------
  |  Branch (2994:17): [True: 0, False: 4]
  ------------------
 2995|      0|                for (i=i-1 ; i>=0 ; i--)
  ------------------
  |  Branch (2995:30): [True: 0, False: 0]
  ------------------
 2996|      0|                    Py_DECREF(keys[i]);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2997|      0|                if (saved_ob_size >= MERGESTATE_TEMP_SIZE/2)
  ------------------
  |  | 1731|      0|#define MERGESTATE_TEMP_SIZE 256
  ------------------
  |  Branch (2997:21): [True: 0, False: 0]
  ------------------
 2998|      0|                    PyMem_Free(keys);
 2999|      0|                goto keyfunc_fail;
 3000|      0|            }
 3001|      4|        }
 3002|       |
 3003|      2|        lo.keys = keys;
 3004|      2|        lo.values = saved_ob_item;
 3005|      2|    }
 3006|       |
 3007|       |
 3008|       |    /* The pre-sort check: here's where we decide which compare function to use.
 3009|       |     * How much optimization is safe? We test for homogeneity with respect to
 3010|       |     * several properties that are expensive to check at compare-time, and
 3011|       |     * set ms appropriately. */
 3012|   137k|    if (saved_ob_size > 1) {
  ------------------
  |  Branch (3012:9): [True: 53.9k, False: 83.8k]
  ------------------
 3013|       |        /* Assume the first element is representative of the whole list. */
 3014|  53.9k|        int keys_are_in_tuples = (Py_IS_TYPE(lo.keys[0], &PyTuple_Type) &&
  ------------------
  |  |  215|   107k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  53.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 1, False: 53.9k]
  |  |  ------------------
  ------------------
 3015|      1|                                  Py_SIZE(lo.keys[0]) > 0);
  ------------------
  |  |  214|      1|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3015:35): [True: 1, False: 0]
  ------------------
 3016|       |
 3017|  53.9k|        PyTypeObject* key_type = (keys_are_in_tuples ?
  ------------------
  |  Branch (3017:35): [True: 1, False: 53.9k]
  ------------------
 3018|      1|                                  Py_TYPE(PyTuple_GET_ITEM(lo.keys[0], 0)) :
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3019|  53.9k|                                  Py_TYPE(lo.keys[0]));
  ------------------
  |  |  213|  53.9k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  53.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3020|       |
 3021|  53.9k|        int keys_are_all_same_type = 1;
 3022|  53.9k|        int strings_are_latin = 1;
 3023|  53.9k|        int ints_are_bounded = 1;
 3024|       |
 3025|       |        /* Prove that assumption by checking every key. */
 3026|   413k|        for (i=0; i < saved_ob_size; i++) {
  ------------------
  |  Branch (3026:19): [True: 359k, False: 53.9k]
  ------------------
 3027|       |
 3028|   359k|            if (keys_are_in_tuples &&
  ------------------
  |  Branch (3028:17): [True: 44, False: 359k]
  ------------------
 3029|     44|                !(Py_IS_TYPE(lo.keys[i], &PyTuple_Type) && Py_SIZE(lo.keys[i]) != 0)) {
  ------------------
  |  |  215|     88|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     44|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 44, False: 0]
  |  |  ------------------
  ------------------
                              !(Py_IS_TYPE(lo.keys[i], &PyTuple_Type) && Py_SIZE(lo.keys[i]) != 0)) {
  ------------------
  |  |  214|     44|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     44|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3029:60): [True: 44, False: 0]
  ------------------
 3030|      0|                keys_are_in_tuples = 0;
 3031|      0|                keys_are_all_same_type = 0;
 3032|      0|                break;
 3033|      0|            }
 3034|       |
 3035|       |            /* Note: for lists of tuples, key is the first element of the tuple
 3036|       |             * lo.keys[i], not lo.keys[i] itself! We verify type-homogeneity
 3037|       |             * for lists of tuples in the if-statement directly above. */
 3038|   359k|            PyObject *key = (keys_are_in_tuples ?
  ------------------
  |  Branch (3038:30): [True: 44, False: 359k]
  ------------------
 3039|     44|                             PyTuple_GET_ITEM(lo.keys[i], 0) :
  ------------------
  |  |   29|     44|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     44|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3039:30): [True: 44, False: 0]
  ------------------
 3040|   359k|                             lo.keys[i]);
 3041|       |
 3042|   359k|            if (!Py_IS_TYPE(key, key_type)) {
  ------------------
  |  |  215|   359k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   359k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   359k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3042:17): [True: 0, False: 359k]
  ------------------
 3043|      0|                keys_are_all_same_type = 0;
 3044|       |                /* If keys are in tuple we must loop over the whole list to make
 3045|       |                   sure all items are tuples */
 3046|      0|                if (!keys_are_in_tuples) {
  ------------------
  |  Branch (3046:21): [True: 0, False: 0]
  ------------------
 3047|      0|                    break;
 3048|      0|                }
 3049|      0|            }
 3050|       |
 3051|   359k|            if (keys_are_all_same_type) {
  ------------------
  |  Branch (3051:17): [True: 359k, False: 0]
  ------------------
 3052|   359k|                if (key_type == &PyLong_Type &&
  ------------------
  |  Branch (3052:21): [True: 386, False: 359k]
  ------------------
 3053|    386|                    ints_are_bounded &&
  ------------------
  |  Branch (3053:21): [True: 386, False: 0]
  ------------------
 3054|    386|                    !_PyLong_IsCompact((PyLongObject *)key)) {
  ------------------
  |  Branch (3054:21): [True: 0, False: 386]
  ------------------
 3055|       |
 3056|      0|                    ints_are_bounded = 0;
 3057|      0|                }
 3058|   359k|                else if (key_type == &PyUnicode_Type &&
  ------------------
  |  Branch (3058:26): [True: 359k, False: 386]
  ------------------
 3059|   359k|                         strings_are_latin &&
  ------------------
  |  Branch (3059:26): [True: 204k, False: 155k]
  ------------------
 3060|   408k|                         PyUnicode_KIND(key) != PyUnicode_1BYTE_KIND) {
  ------------------
  |  |  258|   204k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   408k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 204k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3060:26): [True: 22.9k, False: 181k]
  ------------------
 3061|       |
 3062|  22.9k|                        strings_are_latin = 0;
 3063|  22.9k|                    }
 3064|   359k|                }
 3065|   359k|            }
 3066|       |
 3067|       |        /* Choose the best compare, given what we now know about the keys. */
 3068|  53.9k|        if (keys_are_all_same_type) {
  ------------------
  |  Branch (3068:13): [True: 53.9k, False: 0]
  ------------------
 3069|       |
 3070|  53.9k|            if (key_type == &PyUnicode_Type && strings_are_latin) {
  ------------------
  |  Branch (3070:17): [True: 53.7k, False: 155]
  |  Branch (3070:48): [True: 30.7k, False: 22.9k]
  ------------------
 3071|  30.7k|                ms.key_compare = unsafe_latin_compare;
 3072|  30.7k|            }
 3073|  23.1k|            else if (key_type == &PyLong_Type && ints_are_bounded) {
  ------------------
  |  Branch (3073:22): [True: 155, False: 22.9k]
  |  Branch (3073:50): [True: 155, False: 0]
  ------------------
 3074|    155|                ms.key_compare = unsafe_long_compare;
 3075|    155|            }
 3076|  22.9k|            else if (key_type == &PyFloat_Type) {
  ------------------
  |  Branch (3076:22): [True: 0, False: 22.9k]
  ------------------
 3077|      0|                ms.key_compare = unsafe_float_compare;
 3078|      0|            }
 3079|  22.9k|            else if ((ms.key_richcompare = key_type->tp_richcompare) != NULL) {
  ------------------
  |  Branch (3079:22): [True: 22.9k, False: 0]
  ------------------
 3080|  22.9k|                ms.key_compare = unsafe_object_compare;
 3081|  22.9k|            }
 3082|      0|            else {
 3083|      0|                ms.key_compare = safe_object_compare;
 3084|      0|            }
 3085|  53.9k|        }
 3086|      0|        else {
 3087|      0|            ms.key_compare = safe_object_compare;
 3088|      0|        }
 3089|       |
 3090|  53.9k|        if (keys_are_in_tuples) {
  ------------------
  |  Branch (3090:13): [True: 1, False: 53.9k]
  ------------------
 3091|       |            /* Make sure we're not dealing with tuples of tuples
 3092|       |             * (remember: here, key_type refers list [key[0] for key in keys]) */
 3093|      1|            if (key_type == &PyTuple_Type) {
  ------------------
  |  Branch (3093:17): [True: 0, False: 1]
  ------------------
 3094|      0|                ms.tuple_elem_compare = safe_object_compare;
 3095|      0|            }
 3096|      1|            else {
 3097|      1|                ms.tuple_elem_compare = ms.key_compare;
 3098|      1|            }
 3099|       |
 3100|      1|            ms.key_compare = unsafe_tuple_compare;
 3101|      1|        }
 3102|  53.9k|    }
 3103|       |    /* End of pre-sort check: ms is now set properly! */
 3104|       |
 3105|   137k|    merge_init(&ms, saved_ob_size, keys != NULL, &lo);
 3106|       |
 3107|   137k|    nremaining = saved_ob_size;
 3108|   137k|    if (nremaining < 2)
  ------------------
  |  Branch (3108:9): [True: 83.8k, False: 53.9k]
  ------------------
 3109|  83.8k|        goto succeed;
 3110|       |
 3111|       |    /* Reverse sort stability achieved by initially reversing the list,
 3112|       |    applying a stable forward sort, then reversing the final result. */
 3113|  53.9k|    if (reverse) {
  ------------------
  |  Branch (3113:9): [True: 1, False: 53.9k]
  ------------------
 3114|      1|        if (keys != NULL)
  ------------------
  |  Branch (3114:13): [True: 0, False: 1]
  ------------------
 3115|      0|            reverse_slice(&keys[0], &keys[saved_ob_size]);
 3116|      1|        reverse_slice(&saved_ob_item[0], &saved_ob_item[saved_ob_size]);
 3117|      1|    }
 3118|       |
 3119|       |    /* March over the array once, left to right, finding natural runs,
 3120|       |     * and extending short natural runs to minrun elements.
 3121|       |     */
 3122|  54.8k|    do {
 3123|  54.8k|        Py_ssize_t n;
 3124|       |
 3125|       |        /* Identify next run. */
 3126|  54.8k|        n = count_run(&ms, &lo, nremaining);
 3127|  54.8k|        if (n < 0)
  ------------------
  |  Branch (3127:13): [True: 0, False: 54.8k]
  ------------------
 3128|      0|            goto fail;
 3129|       |        /* If short, extend to min(minrun, nremaining). */
 3130|  54.8k|        minrun = minrun_next(&ms);
 3131|  54.8k|        if (n < minrun) {
  ------------------
  |  Branch (3131:13): [True: 26.9k, False: 27.9k]
  ------------------
 3132|  26.9k|            const Py_ssize_t force = nremaining <= minrun ?
  ------------------
  |  Branch (3132:38): [True: 25.9k, False: 971]
  ------------------
 3133|  25.9k|                              nremaining : minrun;
 3134|  26.9k|            if (binarysort(&ms, &lo, force, n) < 0)
  ------------------
  |  Branch (3134:17): [True: 0, False: 26.9k]
  ------------------
 3135|      0|                goto fail;
 3136|  26.9k|            n = force;
 3137|  26.9k|        }
 3138|       |        /* Maybe merge pending runs. */
 3139|  54.8k|        assert(ms.n == 0 || ms.pending[ms.n -1].base.keys +
  ------------------
  |  Branch (3139:9): [True: 53.9k, False: 971]
  |  Branch (3139:9): [True: 971, False: 0]
  ------------------
 3140|  54.8k|                            ms.pending[ms.n-1].len == lo.keys);
 3141|  54.8k|        if (found_new_run(&ms, n) < 0)
  ------------------
  |  Branch (3141:13): [True: 0, False: 54.8k]
  ------------------
 3142|      0|            goto fail;
 3143|       |        /* Push new run on stack. */
 3144|  54.8k|        assert(ms.n < MAX_MERGE_PENDING);
  ------------------
  |  Branch (3144:9): [True: 54.8k, False: 0]
  ------------------
 3145|  54.8k|        ms.pending[ms.n].base = lo;
 3146|  54.8k|        ms.pending[ms.n].len = n;
 3147|  54.8k|        ++ms.n;
 3148|       |        /* Advance to find next run. */
 3149|  54.8k|        sortslice_advance(&lo, n);
 3150|  54.8k|        nremaining -= n;
 3151|  54.8k|    } while (nremaining);
  ------------------
  |  Branch (3151:14): [True: 971, False: 53.9k]
  ------------------
 3152|       |
 3153|  53.9k|    if (merge_force_collapse(&ms) < 0)
  ------------------
  |  Branch (3153:9): [True: 0, False: 53.9k]
  ------------------
 3154|      0|        goto fail;
 3155|  53.9k|    assert(ms.n == 1);
  ------------------
  |  Branch (3155:5): [True: 53.9k, False: 0]
  ------------------
 3156|  53.9k|    assert(keys == NULL
  ------------------
  |  Branch (3156:5): [True: 53.9k, False: 2]
  |  Branch (3156:5): [True: 53.9k, False: 0]
  ------------------
 3157|  53.9k|           ? ms.pending[0].base.keys == saved_ob_item
 3158|  53.9k|           : ms.pending[0].base.keys == &keys[0]);
 3159|  53.9k|    assert(ms.pending[0].len == saved_ob_size);
  ------------------
  |  Branch (3159:5): [True: 53.9k, False: 0]
  ------------------
 3160|  53.9k|    lo = ms.pending[0].base;
 3161|       |
 3162|   137k|succeed:
 3163|   137k|    result = Py_None;
  ------------------
  |  |  616|   137k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3164|   137k|fail:
 3165|   137k|    if (keys != NULL) {
  ------------------
  |  Branch (3165:9): [True: 2, False: 137k]
  ------------------
 3166|      6|        for (i = 0; i < saved_ob_size; i++)
  ------------------
  |  Branch (3166:21): [True: 4, False: 2]
  ------------------
 3167|      4|            Py_DECREF(keys[i]);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3168|      2|        if (saved_ob_size >= MERGESTATE_TEMP_SIZE/2)
  ------------------
  |  | 1731|      2|#define MERGESTATE_TEMP_SIZE 256
  ------------------
  |  Branch (3168:13): [True: 0, False: 2]
  ------------------
 3169|      0|            PyMem_Free(keys);
 3170|      2|    }
 3171|       |
 3172|   137k|    if (self->allocated != -1 && result != NULL) {
  ------------------
  |  Branch (3172:9): [True: 0, False: 137k]
  |  Branch (3172:34): [True: 0, False: 0]
  ------------------
 3173|       |        /* The user mucked with the list during the sort,
 3174|       |         * and we don't already have another error to report.
 3175|       |         */
 3176|      0|        PyErr_SetString(PyExc_ValueError, "list modified during sort");
 3177|      0|        result = NULL;
 3178|      0|    }
 3179|       |
 3180|   137k|    if (reverse && saved_ob_size > 1)
  ------------------
  |  Branch (3180:9): [True: 1, False: 137k]
  |  Branch (3180:20): [True: 1, False: 0]
  ------------------
 3181|      1|        reverse_slice(saved_ob_item, saved_ob_item + saved_ob_size);
 3182|       |
 3183|   137k|    merge_freemem(&ms);
 3184|       |
 3185|   137k|keyfunc_fail:
 3186|   137k|    final_ob_item = self->ob_item;
 3187|   137k|    i = Py_SIZE(self);
  ------------------
  |  |  214|   137k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   137k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3188|   137k|    Py_SET_SIZE(self, saved_ob_size);
  ------------------
  |  |  216|   137k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|   137k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3189|   137k|    FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item, saved_ob_item);
  ------------------
  |  |  164|   137k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 3190|   137k|    FT_ATOMIC_STORE_SSIZE_RELAXED(self->allocated, saved_allocated);
  ------------------
  |  |  194|   137k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
 3191|   137k|    if (final_ob_item != NULL) {
  ------------------
  |  Branch (3191:9): [True: 0, False: 137k]
  ------------------
 3192|       |        /* we cannot use list_clear() for this because it does not
 3193|       |           guarantee that the list is really empty when it returns */
 3194|      0|        while (--i >= 0) {
  ------------------
  |  Branch (3194:16): [True: 0, False: 0]
  ------------------
 3195|      0|            Py_XDECREF(final_ob_item[i]);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3196|      0|        }
 3197|       |#ifdef Py_GIL_DISABLED
 3198|       |        ensure_shared_on_resize(self);
 3199|       |        bool use_qsbr = _PyObject_GC_IS_SHARED(self);
 3200|       |#else
 3201|      0|        bool use_qsbr = false;
 3202|      0|#endif
 3203|      0|        free_list_items(final_ob_item, use_qsbr);
 3204|      0|    }
 3205|   137k|    return Py_XNewRef(result);
  ------------------
  |  |  551|   137k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   137k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3206|   137k|}
listobject.c:unsafe_latin_compare:
 2816|   468k|{
 2817|   468k|    Py_ssize_t len;
 2818|   468k|    int res;
 2819|       |
 2820|       |    /* Modified from Objects/unicodeobject.c:unicode_compare, assuming: */
 2821|   468k|    assert(Py_IS_TYPE(v, &PyUnicode_Type));
  ------------------
  |  Branch (2821:5): [True: 468k, False: 0]
  ------------------
 2822|   468k|    assert(Py_IS_TYPE(w, &PyUnicode_Type));
  ------------------
  |  Branch (2822:5): [True: 468k, False: 0]
  ------------------
 2823|   468k|    assert(PyUnicode_KIND(v) == PyUnicode_KIND(w));
  ------------------
  |  Branch (2823:5): [True: 468k, False: 0]
  |  Branch (2823:5): [True: 468k, False: 0]
  |  Branch (2823:5): [True: 468k, False: 0]
  ------------------
 2824|   468k|    assert(PyUnicode_KIND(v) == PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (2824:5): [True: 468k, False: 0]
  |  Branch (2824:5): [True: 468k, False: 0]
  ------------------
 2825|       |
 2826|   468k|    len = Py_MIN(PyUnicode_GET_LENGTH(v), PyUnicode_GET_LENGTH(w));
  ------------------
  |  |  120|   468k|       __extension__ \
  |  |  121|   468k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   468k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|   468k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   468k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|   468k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 219k, False: 249k]
  |  |  ------------------
  ------------------
 2827|   468k|    res = memcmp(PyUnicode_DATA(v), PyUnicode_DATA(w), len);
  ------------------
  |  |  284|   468k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   468k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   468k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  res = memcmp(PyUnicode_DATA(v), PyUnicode_DATA(w), len);
  ------------------
  |  |  284|   468k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   468k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   468k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2828|       |
 2829|   468k|    res = (res != 0 ?
  ------------------
  |  Branch (2829:12): [True: 430k, False: 38.3k]
  ------------------
 2830|   430k|           res < 0 :
 2831|   468k|           PyUnicode_GET_LENGTH(v) < PyUnicode_GET_LENGTH(w));
  ------------------
  |  |  299|  38.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  38.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  38.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                         PyUnicode_GET_LENGTH(v) < PyUnicode_GET_LENGTH(w));
  ------------------
  |  |  299|  38.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  38.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  38.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2832|       |
 2833|   468k|    assert(res == PyObject_RichCompareBool(v, w, Py_LT));;
  ------------------
  |  Branch (2833:5): [True: 468k, False: 0]
  ------------------
 2834|   468k|    return res;
 2835|   468k|}
listobject.c:unsafe_long_compare:
 2840|    459|{
 2841|    459|    PyLongObject *vl, *wl;
 2842|    459|    intptr_t v0, w0;
 2843|    459|    int res;
 2844|       |
 2845|       |    /* Modified from Objects/longobject.c:long_compare, assuming: */
 2846|    459|    assert(Py_IS_TYPE(v, &PyLong_Type));
  ------------------
  |  Branch (2846:5): [True: 459, False: 0]
  ------------------
 2847|    459|    assert(Py_IS_TYPE(w, &PyLong_Type));
  ------------------
  |  Branch (2847:5): [True: 459, False: 0]
  ------------------
 2848|    459|    assert(_PyLong_IsCompact((PyLongObject *)v));
  ------------------
  |  Branch (2848:5): [True: 459, False: 0]
  ------------------
 2849|    459|    assert(_PyLong_IsCompact((PyLongObject *)w));
  ------------------
  |  Branch (2849:5): [True: 459, False: 0]
  ------------------
 2850|       |
 2851|    459|    vl = (PyLongObject*)v;
 2852|    459|    wl = (PyLongObject*)w;
 2853|       |
 2854|    459|    v0 = _PyLong_CompactValue(vl);
 2855|    459|    w0 = _PyLong_CompactValue(wl);
 2856|       |
 2857|    459|    res = v0 < w0;
 2858|    459|    assert(res == PyObject_RichCompareBool(v, w, Py_LT));
  ------------------
  |  Branch (2858:5): [True: 459, False: 0]
  ------------------
 2859|    459|    return res;
 2860|    459|}
listobject.c:unsafe_object_compare:
 2779|   530k|{
 2780|   530k|    PyObject *res_obj; int res;
 2781|       |
 2782|       |    /* No assumptions, because we check first: */
 2783|   530k|    if (Py_TYPE(v)->tp_richcompare != ms->key_richcompare)
  ------------------
  |  |  213|   530k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   530k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   530k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2783:9): [True: 0, False: 530k]
  ------------------
 2784|      0|        return PyObject_RichCompareBool(v, w, Py_LT);
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
 2785|       |
 2786|   530k|    assert(ms->key_richcompare != NULL);
  ------------------
  |  Branch (2786:5): [True: 530k, False: 0]
  ------------------
 2787|   530k|    res_obj = (*(ms->key_richcompare))(v, w, Py_LT);
  ------------------
  |  |  652|   530k|#define Py_LT 0
  ------------------
 2788|       |
 2789|   530k|    if (res_obj == Py_NotImplemented) {
  ------------------
  |  |  640|   530k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (2789:9): [True: 0, False: 530k]
  ------------------
 2790|      0|        Py_DECREF(res_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2791|      0|        return PyObject_RichCompareBool(v, w, Py_LT);
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
 2792|      0|    }
 2793|   530k|    if (res_obj == NULL)
  ------------------
  |  Branch (2793:9): [True: 0, False: 530k]
  ------------------
 2794|      0|        return -1;
 2795|       |
 2796|   530k|    if (PyBool_Check(res_obj)) {
  ------------------
  |  |   12|   530k|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|   530k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   530k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   530k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 530k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2797|   530k|        res = (res_obj == Py_True);
  ------------------
  |  |   26|   530k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|   530k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   530k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2798|   530k|        assert(_Py_IsImmortal(res_obj));
  ------------------
  |  Branch (2798:9): [True: 530k, False: 0]
  ------------------
 2799|   530k|    }
 2800|      0|    else {
 2801|      0|        res = PyObject_IsTrue(res_obj);
 2802|      0|        Py_DECREF(res_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2803|      0|    }
 2804|       |
 2805|       |    /* Note that we can't assert
 2806|       |     *     res == PyObject_RichCompareBool(v, w, Py_LT);
 2807|       |     * because of evil compare functions like this:
 2808|       |     *     lambda a, b:  int(random.random() * 3) - 1)
 2809|       |     * (which is actually in test_sort.py) */
 2810|   530k|    return res;
 2811|   530k|}
listobject.c:unsafe_tuple_compare:
 2885|    183|{
 2886|    183|    PyTupleObject *vt, *wt;
 2887|    183|    Py_ssize_t i, vlen, wlen;
 2888|    183|    int k;
 2889|       |
 2890|       |    /* Modified from Objects/tupleobject.c:tuplerichcompare, assuming: */
 2891|    183|    assert(Py_IS_TYPE(v, &PyTuple_Type));
  ------------------
  |  Branch (2891:5): [True: 183, False: 0]
  ------------------
 2892|    183|    assert(Py_IS_TYPE(w, &PyTuple_Type));
  ------------------
  |  Branch (2892:5): [True: 183, False: 0]
  ------------------
 2893|    183|    assert(Py_SIZE(v) > 0);
  ------------------
  |  Branch (2893:5): [True: 183, False: 0]
  ------------------
 2894|    183|    assert(Py_SIZE(w) > 0);
  ------------------
  |  Branch (2894:5): [True: 183, False: 0]
  ------------------
 2895|       |
 2896|    183|    vt = (PyTupleObject *)v;
 2897|    183|    wt = (PyTupleObject *)w;
 2898|       |
 2899|    183|    vlen = Py_SIZE(vt);
  ------------------
  |  |  214|    183|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    183|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    183|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2900|    183|    wlen = Py_SIZE(wt);
  ------------------
  |  |  214|    183|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    183|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    183|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2901|       |
 2902|    183|    for (i = 0; i < vlen && i < wlen; i++) {
  ------------------
  |  Branch (2902:17): [True: 183, False: 0]
  |  Branch (2902:29): [True: 183, False: 0]
  ------------------
 2903|    183|        k = PyObject_RichCompareBool(vt->ob_item[i], wt->ob_item[i], Py_EQ);
  ------------------
  |  |  654|    183|#define Py_EQ 2
  ------------------
 2904|    183|        if (k < 0)
  ------------------
  |  Branch (2904:13): [True: 0, False: 183]
  ------------------
 2905|      0|            return -1;
 2906|    183|        if (!k)
  ------------------
  |  Branch (2906:13): [True: 183, False: 0]
  ------------------
 2907|    183|            break;
 2908|    183|    }
 2909|       |
 2910|    183|    if (i >= vlen || i >= wlen)
  ------------------
  |  Branch (2910:9): [True: 0, False: 183]
  |  Branch (2910:22): [True: 0, False: 183]
  ------------------
 2911|      0|        return vlen < wlen;
 2912|       |
 2913|    183|    if (i == 0)
  ------------------
  |  Branch (2913:9): [True: 183, False: 0]
  ------------------
 2914|    183|        return ms->tuple_elem_compare(vt->ob_item[i], wt->ob_item[i], ms);
 2915|      0|    else
 2916|      0|        return PyObject_RichCompareBool(vt->ob_item[i], wt->ob_item[i], Py_LT);
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
 2917|    183|}
listobject.c:merge_init:
 2234|   137k|{
 2235|   137k|    assert(ms != NULL);
  ------------------
  |  Branch (2235:5): [True: 137k, False: 0]
  ------------------
 2236|   137k|    if (has_keyfunc) {
  ------------------
  |  Branch (2236:9): [True: 2, False: 137k]
  ------------------
 2237|       |        /* The temporary space for merging will need at most half the list
 2238|       |         * size rounded up.  Use the minimum possible space so we can use the
 2239|       |         * rest of temparray for other things.  In particular, if there is
 2240|       |         * enough extra space, listsort() will use it to store the keys.
 2241|       |         */
 2242|      2|        ms->alloced = (list_size + 1) / 2;
 2243|       |
 2244|       |        /* ms->alloced describes how many keys will be stored at
 2245|       |           ms->temparray, but we also need to store the values.  Hence,
 2246|       |           ms->alloced is capped at half of MERGESTATE_TEMP_SIZE. */
 2247|      2|        if (MERGESTATE_TEMP_SIZE / 2 < ms->alloced)
  ------------------
  |  | 1731|      2|#define MERGESTATE_TEMP_SIZE 256
  ------------------
  |  Branch (2247:13): [True: 0, False: 2]
  ------------------
 2248|      0|            ms->alloced = MERGESTATE_TEMP_SIZE / 2;
  ------------------
  |  | 1731|      0|#define MERGESTATE_TEMP_SIZE 256
  ------------------
 2249|      2|        ms->a.values = &ms->temparray[ms->alloced];
 2250|      2|    }
 2251|   137k|    else {
 2252|   137k|        ms->alloced = MERGESTATE_TEMP_SIZE;
  ------------------
  |  | 1731|   137k|#define MERGESTATE_TEMP_SIZE 256
  ------------------
 2253|   137k|        ms->a.values = NULL;
 2254|   137k|    }
 2255|   137k|    ms->a.keys = ms->temparray;
 2256|   137k|    ms->n = 0;
 2257|   137k|    ms->min_gallop = MIN_GALLOP;
  ------------------
  |  | 1728|   137k|#define MIN_GALLOP 7
  ------------------
 2258|   137k|    ms->listlen = list_size;
 2259|   137k|    ms->basekeys = lo->keys;
 2260|       |
 2261|       |    /* State for generating minrun values. See listsort.txt. */
 2262|   137k|    ms->mr_e = 0;
 2263|   138k|    while (list_size >> ms->mr_e >= MAX_MINRUN) {
  ------------------
  |  | 1734|   138k|#define MAX_MINRUN 64
  ------------------
  |  Branch (2263:12): [True: 824, False: 137k]
  ------------------
 2264|    824|        ++ms->mr_e;
 2265|    824|    }
 2266|   137k|    ms->mr_mask = (1 << ms->mr_e) - 1;
 2267|   137k|    ms->mr_current = 0;
 2268|   137k|}
listobject.c:count_run:
 1952|  54.8k|{
 1953|  54.8k|    Py_ssize_t k; /* used by IFLT macro expansion */
 1954|  54.8k|    Py_ssize_t n;
 1955|  54.8k|    PyObject ** const lo = slo->keys;
 1956|       |
 1957|       |    /* In general, as things go on we've established that the slice starts
 1958|       |       with a monotone run of n elements, starting at lo. */
 1959|       |
 1960|       |    /* We're n elements into the slice, and the most recent neq+1 elements are
 1961|       |     * all equal. This reverses them in-place, and resets neq for reuse.
 1962|       |     */
 1963|  54.8k|#define REVERSE_LAST_NEQ                        \
 1964|  54.8k|    if (neq) {                                  \
 1965|  54.8k|        sortslice slice = *slo;                 \
 1966|  54.8k|        ++neq;                                  \
 1967|  54.8k|        sortslice_advance(&slice, n - neq);     \
 1968|  54.8k|        sortslice_reverse(&slice, neq);         \
 1969|  54.8k|        neq = 0;                                \
 1970|  54.8k|    }
 1971|       |
 1972|       |    /* Sticking to only __lt__ compares is confusing and error-prone. But in
 1973|       |     * this routine, almost all uses of IFLT can be captured by tiny macros
 1974|       |     * giving mnemonic names to the intent. Note that inline functions don't
 1975|       |     * work for this (IFLT expands to code including `goto fail`).
 1976|       |     */
 1977|  54.8k|#define IF_NEXT_LARGER  IFLT(lo[n-1], lo[n])
 1978|  54.8k|#define IF_NEXT_SMALLER IFLT(lo[n], lo[n-1])
 1979|       |
 1980|  54.8k|    assert(nremaining);
  ------------------
  |  Branch (1980:5): [True: 54.8k, False: 0]
  ------------------
 1981|       |    /* try ascending run first */
 1982|  98.8k|    for (n = 1; n < nremaining; ++n) {
  ------------------
  |  Branch (1982:17): [True: 80.7k, False: 18.0k]
  ------------------
 1983|  80.7k|        IF_NEXT_SMALLER
  ------------------
  |  | 1978|  80.7k|#define IF_NEXT_SMALLER IFLT(lo[n], lo[n-1])
  |  |  ------------------
  |  |  |  | 1715|  80.7k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1709|  80.7k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1715:24): [True: 0, False: 80.7k]
  |  |  |  |  ------------------
  |  |  |  | 1716|  80.7k|           if (k)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1716:16): [True: 36.8k, False: 43.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1984|  36.8k|            break;
 1985|  80.7k|    }
 1986|  54.8k|    if (n == nremaining)
  ------------------
  |  Branch (1986:9): [True: 18.0k, False: 36.8k]
  ------------------
 1987|  18.0k|        return n;
 1988|       |    /* lo[n] is strictly less */
 1989|       |    /* If n is 1 now, then the first compare established it's a descending
 1990|       |     * run, so fall through to the descending case. But if n > 1, there are
 1991|       |     * n elements in an ascending run terminated by the strictly less lo[n].
 1992|       |     * If the first key < lo[n-1], *somewhere* along the way the sequence
 1993|       |     * increased, so we're done (there is no descending run).
 1994|       |     * Else first key >= lo[n-1], which implies that the entire ascending run
 1995|       |     * consists of equal elements. In that case, this is a descending run,
 1996|       |     * and we reverse the all-equal prefix in-place.
 1997|       |     */
 1998|  36.8k|    if (n > 1) {
  ------------------
  |  Branch (1998:9): [True: 12.3k, False: 24.4k]
  ------------------
 1999|  12.3k|        IFLT(lo[0], lo[n-1])
  ------------------
  |  | 1715|  12.3k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  12.3k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 12.3k]
  |  |  ------------------
  |  | 1716|  12.3k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 12.3k, False: 0]
  |  |  ------------------
  ------------------
 2000|  12.3k|            return n;
 2001|      0|        sortslice_reverse(slo, n);
 2002|      0|    }
 2003|  24.4k|    ++n; /* in all cases it's been established that lo[n] has been resolved */
 2004|       |
 2005|       |    /* Finish descending run. All-squal subruns are reversed in-place on the
 2006|       |     * fly. Their original order will be restored at the end by the whole-slice
 2007|       |     * reversal.
 2008|       |     */
 2009|  24.4k|    Py_ssize_t neq = 0;
 2010|  31.8k|    for ( ; n < nremaining; ++n) {
  ------------------
  |  Branch (2010:13): [True: 28.4k, False: 3.39k]
  ------------------
 2011|  28.4k|        IF_NEXT_SMALLER {
  ------------------
  |  | 1978|  28.4k|#define IF_NEXT_SMALLER IFLT(lo[n], lo[n-1])
  |  |  ------------------
  |  |  |  | 1715|  28.4k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1709|  28.4k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1715:24): [True: 0, False: 28.4k]
  |  |  |  |  ------------------
  |  |  |  | 1716|  28.4k|           if (k)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1716:16): [True: 7.36k, False: 21.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2012|       |            /* This ends the most recent run of equal elements, but still in
 2013|       |             * the "descending" direction.
 2014|       |             */
 2015|  7.36k|            REVERSE_LAST_NEQ
  ------------------
  |  | 1964|  7.36k|    if (neq) {                                  \
  |  |  ------------------
  |  |  |  Branch (1964:9): [True: 0, False: 7.36k]
  |  |  ------------------
  |  | 1965|      0|        sortslice slice = *slo;                 \
  |  | 1966|      0|        ++neq;                                  \
  |  | 1967|      0|        sortslice_advance(&slice, n - neq);     \
  |  | 1968|      0|        sortslice_reverse(&slice, neq);         \
  |  | 1969|      0|        neq = 0;                                \
  |  | 1970|      0|    }
  ------------------
 2016|  7.36k|        }
 2017|  21.1k|        else {
 2018|  21.1k|            IF_NEXT_LARGER /* descending run is over */
  ------------------
  |  | 1977|  21.1k|#define IF_NEXT_LARGER  IFLT(lo[n-1], lo[n])
  |  |  ------------------
  |  |  |  | 1715|  21.1k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1709|  21.1k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1715:24): [True: 0, False: 21.1k]
  |  |  |  |  ------------------
  |  |  |  | 1716|  21.1k|           if (k)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1716:16): [True: 21.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2019|  21.1k|                break;
 2020|      0|            else /* not x < y and not y < x implies x == y */
 2021|      0|                ++neq;
 2022|  21.1k|        }
 2023|  28.4k|    }
 2024|  24.4k|    REVERSE_LAST_NEQ
  ------------------
  |  | 1964|  24.4k|    if (neq) {                                  \
  |  |  ------------------
  |  |  |  Branch (1964:9): [True: 0, False: 24.4k]
  |  |  ------------------
  |  | 1965|      0|        sortslice slice = *slo;                 \
  |  | 1966|      0|        ++neq;                                  \
  |  | 1967|      0|        sortslice_advance(&slice, n - neq);     \
  |  | 1968|      0|        sortslice_reverse(&slice, neq);         \
  |  | 1969|      0|        neq = 0;                                \
  |  | 1970|      0|    }
  ------------------
 2025|  24.4k|    sortslice_reverse(slo, n); /* transform to ascending run */
 2026|       |
 2027|       |    /* And after reversing, it's possible this can be extended by a
 2028|       |     * naturally increasing suffix; e.g., [3, 2, 3, 4, 1] makes an
 2029|       |     * ascending run from the first 4 elements.
 2030|       |     */
 2031|  37.4k|    for ( ; n < nremaining; ++n) {
  ------------------
  |  Branch (2031:13): [True: 27.5k, False: 9.86k]
  ------------------
 2032|  27.5k|        IF_NEXT_SMALLER
  ------------------
  |  | 1978|  27.5k|#define IF_NEXT_SMALLER IFLT(lo[n], lo[n-1])
  |  |  ------------------
  |  |  |  | 1715|  27.5k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  |  |  ------------------
  |  |  |  |  |  | 1709|  27.5k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1715:24): [True: 0, False: 27.5k]
  |  |  |  |  ------------------
  |  |  |  | 1716|  27.5k|           if (k)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1716:16): [True: 14.6k, False: 12.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2033|  14.6k|            break;
 2034|  27.5k|    }
 2035|       |
 2036|  24.4k|    return n;
 2037|      0|fail:
 2038|      0|    return -1;
 2039|       |
 2040|  24.4k|#undef REVERSE_LAST_NEQ
 2041|  24.4k|#undef IF_NEXT_SMALLER
 2042|  24.4k|#undef IF_NEXT_LARGER
 2043|  24.4k|}
listobject.c:sortslice_reverse:
 1936|  24.4k|{
 1937|  24.4k|    reverse_slice(s->keys, &s->keys[n]);
 1938|  24.4k|    if (s->values != NULL)
  ------------------
  |  Branch (1938:9): [True: 0, False: 24.4k]
  ------------------
 1939|      0|        reverse_slice(s->values, &s->values[n]);
 1940|  24.4k|}
listobject.c:minrun_next:
 2748|  54.8k|{
 2749|  54.8k|    ms->mr_current += ms->listlen;
 2750|  54.8k|    assert(ms->mr_current >= 0); /* no overflow */
  ------------------
  |  Branch (2750:5): [True: 54.8k, False: 0]
  ------------------
 2751|  54.8k|    Py_ssize_t result = ms->mr_current >> ms->mr_e;
 2752|  54.8k|    ms->mr_current &= ms->mr_mask;
 2753|  54.8k|    return result;
 2754|  54.8k|}
listobject.c:binarysort:
 1814|  26.9k|{
 1815|  26.9k|    Py_ssize_t k; /* for IFLT macro expansion */
 1816|  26.9k|    PyObject ** const a = ss->keys;
 1817|  26.9k|    PyObject ** const v = ss->values;
 1818|  26.9k|    const bool has_values = v != NULL;
 1819|  26.9k|    PyObject *pivot;
 1820|  26.9k|    Py_ssize_t M;
 1821|       |
 1822|  26.9k|    assert(0 <= ok && ok <= n && 1 <= n && n <= MAX_MINRUN);
  ------------------
  |  Branch (1822:5): [True: 26.9k, False: 0]
  |  Branch (1822:5): [True: 26.9k, False: 0]
  |  Branch (1822:5): [True: 26.9k, False: 0]
  |  Branch (1822:5): [True: 26.9k, False: 0]
  ------------------
 1823|       |    /* assert a[:ok] is sorted */
 1824|  26.9k|    if (! ok)
  ------------------
  |  Branch (1824:9): [True: 0, False: 26.9k]
  ------------------
 1825|      0|        ++ok;
 1826|       |    /* Regular insertion sort has average- and worst-case O(n**2) cost
 1827|       |       for both # of comparisons and number of bytes moved. But its branches
 1828|       |       are highly predictable, and it loves sorted input (n-1 compares and no
 1829|       |       data movement). This is significant in cases like sortperf.py's %sort,
 1830|       |       where an out-of-order element near the start of a run is moved into
 1831|       |       place slowly but then the remaining elements up to length minrun are
 1832|       |       generally at worst one slot away from their correct position (so only
 1833|       |       need 1 or 2 commpares to resolve). If comparisons are very fast (such
 1834|       |       as for a list of Python floats), the simple inner loop leaves it
 1835|       |       very competitive with binary insertion, despite that it does
 1836|       |       significantly more compares overall on random data.
 1837|       |
 1838|       |       Binary insertion sort has worst, average, and best case O(n log n)
 1839|       |       cost for # of comparisons, but worst and average case O(n**2) cost
 1840|       |       for data movement. The more expensive comparisons, the more important
 1841|       |       the comparison advantage. But its branches are less predictable the
 1842|       |       more "randomish" the data, and that's so significant its worst case
 1843|       |       in real life is random input rather than reverse-ordered (which does
 1844|       |       about twice the data movement than random input does).
 1845|       |
 1846|       |       Note that the number of bytes moved doesn't seem to matter. MAX_MINRUN
 1847|       |       of 64 is so small that the key and value pointers all fit in a corner
 1848|       |       of L1 cache, and moving things around in that is very fast. */
 1849|       |#if 0 // ordinary insertion sort.
 1850|       |    PyObject * vpivot = NULL;
 1851|       |    for (; ok < n; ++ok) {
 1852|       |        pivot = a[ok];
 1853|       |        if (has_values)
 1854|       |            vpivot = v[ok];
 1855|       |        for (M = ok - 1; M >= 0; --M) {
 1856|       |            k = ISLT(pivot, a[M]);
 1857|       |            if (k < 0) {
 1858|       |                a[M + 1] = pivot;
 1859|       |                if (has_values)
 1860|       |                    v[M + 1] = vpivot;
 1861|       |                goto fail;
 1862|       |            }
 1863|       |            else if (k) {
 1864|       |                a[M + 1] = a[M];
 1865|       |                if (has_values)
 1866|       |                    v[M + 1] = v[M];
 1867|       |            }
 1868|       |            else
 1869|       |                break;
 1870|       |        }
 1871|       |        a[M + 1] = pivot;
 1872|       |        if (has_values)
 1873|       |            v[M + 1] = vpivot;
 1874|       |    }
 1875|       |#else // binary insertion sort
 1876|  26.9k|    Py_ssize_t L, R;
 1877|   243k|    for (; ok < n; ++ok) {
  ------------------
  |  Branch (1877:12): [True: 216k, False: 26.9k]
  ------------------
 1878|       |        /* set L to where a[ok] belongs */
 1879|   216k|        L = 0;
 1880|   216k|        R = ok;
 1881|   216k|        pivot = a[ok];
 1882|       |        /* Slice invariants. vacuously true at the start:
 1883|       |         * all a[0:L]  <= pivot
 1884|       |         * all a[L:R]     unknown
 1885|       |         * all a[R:ok]  > pivot
 1886|       |         */
 1887|   216k|        assert(L < R);
  ------------------
  |  Branch (1887:9): [True: 216k, False: 0]
  ------------------
 1888|   744k|        do {
 1889|       |            /* don't do silly ;-) things to prevent overflow when finding
 1890|       |               the midpoint; L and R are very far from filling a Py_ssize_t */
 1891|   744k|            M = (L + R) >> 1;
 1892|   744k|#if 1 // straightforward, but highly unpredictable branch on random data
 1893|   744k|            IFLT(pivot, a[M])
  ------------------
  |  | 1715|   744k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|   744k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 744k]
  |  |  ------------------
  |  | 1716|   744k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 410k, False: 334k]
  |  |  ------------------
  ------------------
 1894|   410k|                R = M;
 1895|   334k|            else
 1896|   334k|                L = M + 1;
 1897|       |#else
 1898|       |            /* Try to get compiler to generate conditional move instructions
 1899|       |               instead. Works fine, but leaving it disabled for now because
 1900|       |               it's not yielding consistently faster sorts. Needs more
 1901|       |               investigation. More computation in the inner loop adds its own
 1902|       |               costs, which can be significant when compares are fast. */
 1903|       |            k = ISLT(pivot, a[M]);
 1904|       |            if (k < 0)
 1905|       |                goto fail;
 1906|       |            Py_ssize_t Mp1 = M + 1;
 1907|       |            R = k ? M : R;
 1908|       |            L = k ? L : Mp1;
 1909|       |#endif
 1910|   744k|        } while (L < R);
  ------------------
  |  Branch (1910:18): [True: 528k, False: 216k]
  ------------------
 1911|   216k|        assert(L == R);
  ------------------
  |  Branch (1911:9): [True: 216k, False: 0]
  ------------------
 1912|       |        /* a[:L] holds all elements from a[:ok] <= pivot now, so pivot belongs
 1913|       |           at index L. Slide a[L:ok] to the right a slot to make room for it.
 1914|       |           Caution: using memmove is much slower under MSVC 5; we're not
 1915|       |           usually moving many slots. Years later: under Visual Studio 2022,
 1916|       |           memmove seems just slightly slower than doing it "by hand". */
 1917|  1.63M|        for (M = ok; M > L; --M)
  ------------------
  |  Branch (1917:22): [True: 1.41M, False: 216k]
  ------------------
 1918|  1.41M|            a[M] = a[M - 1];
 1919|   216k|        a[L] = pivot;
 1920|   216k|        if (has_values) {
  ------------------
  |  Branch (1920:13): [True: 0, False: 216k]
  ------------------
 1921|      0|            pivot = v[ok];
 1922|      0|            for (M = ok; M > L; --M)
  ------------------
  |  Branch (1922:26): [True: 0, False: 0]
  ------------------
 1923|      0|                v[M] = v[M - 1];
 1924|      0|            v[L] = pivot;
 1925|      0|        }
 1926|   216k|    }
 1927|  26.9k|#endif // pick binary or regular insertion sort
 1928|  26.9k|    return 0;
 1929|       |
 1930|      0| fail:
 1931|      0|    return -1;
 1932|  26.9k|}
listobject.c:found_new_run:
 2706|  54.8k|{
 2707|  54.8k|    assert(ms);
  ------------------
  |  Branch (2707:5): [True: 54.8k, False: 0]
  ------------------
 2708|  54.8k|    if (ms->n) {
  ------------------
  |  Branch (2708:9): [True: 971, False: 53.9k]
  ------------------
 2709|    971|        assert(ms->n > 0);
  ------------------
  |  Branch (2709:9): [True: 971, False: 0]
  ------------------
 2710|    971|        struct s_slice *p = ms->pending;
 2711|    971|        Py_ssize_t s1 = p[ms->n - 1].base.keys - ms->basekeys; /* start index */
 2712|    971|        Py_ssize_t n1 = p[ms->n - 1].len;
 2713|    971|        int power = powerloop(s1, n1, n2, ms->listlen);
 2714|  1.11k|        while (ms->n > 1 && p[ms->n - 2].power > power) {
  ------------------
  |  Branch (2714:16): [True: 294, False: 824]
  |  Branch (2714:29): [True: 147, False: 147]
  ------------------
 2715|    147|            if (merge_at(ms, ms->n - 2) < 0)
  ------------------
  |  Branch (2715:17): [True: 0, False: 147]
  ------------------
 2716|      0|                return -1;
 2717|    147|        }
 2718|    971|        assert(ms->n < 2 || p[ms->n - 2].power < power);
  ------------------
  |  Branch (2718:9): [True: 824, False: 147]
  |  Branch (2718:9): [True: 147, False: 0]
  ------------------
 2719|    971|        p[ms->n - 1].power = power;
 2720|    971|    }
 2721|  54.8k|    return 0;
 2722|  54.8k|}
listobject.c:powerloop:
 2659|    971|{
 2660|    971|    int result = 0;
 2661|    971|    assert(s1 >= 0);
  ------------------
  |  Branch (2661:5): [True: 971, False: 0]
  ------------------
 2662|    971|    assert(n1 > 0 && n2 > 0);
  ------------------
  |  Branch (2662:5): [True: 971, False: 0]
  |  Branch (2662:5): [True: 971, False: 0]
  ------------------
 2663|    971|    assert(s1 + n1 + n2 <= n);
  ------------------
  |  Branch (2663:5): [True: 971, False: 0]
  ------------------
 2664|       |    /* midpoints a and b:
 2665|       |     * a = s1 + n1/2
 2666|       |     * b = s1 + n1 + n2/2 = a + (n1 + n2)/2
 2667|       |     *
 2668|       |     * Those may not be integers, though, because of the "/2". So we work with
 2669|       |     * 2*a and 2*b instead, which are necessarily integers. It makes no
 2670|       |     * difference to the outcome, since the bits in the expansion of (2*i)/n
 2671|       |     * are merely shifted one position from those of i/n.
 2672|       |     */
 2673|    971|    Py_ssize_t a = 2 * s1 + n1;  /* 2*a */
 2674|    971|    Py_ssize_t b = a + n1 + n2;  /* 2*b */
 2675|       |    /* Emulate a/n and b/n one bit a time, until bits differ. */
 2676|  1.32k|    for (;;) {
 2677|  1.32k|        ++result;
 2678|  1.32k|        if (a >= n) {  /* both quotient bits are 1 */
  ------------------
  |  Branch (2678:13): [True: 175, False: 1.14k]
  ------------------
 2679|    175|            assert(b >= a);
  ------------------
  |  Branch (2679:13): [True: 175, False: 0]
  ------------------
 2680|    175|            a -= n;
 2681|    175|            b -= n;
 2682|    175|        }
 2683|  1.14k|        else if (b >= n) {  /* a/n bit is 0, b/n bit is 1 */
  ------------------
  |  Branch (2683:18): [True: 971, False: 175]
  ------------------
 2684|    971|            break;
 2685|    971|        } /* else both quotient bits are 0 */
 2686|  1.32k|        assert(a < b && b < n);
  ------------------
  |  Branch (2686:9): [True: 350, False: 0]
  |  Branch (2686:9): [True: 350, False: 0]
  ------------------
 2687|    350|        a <<= 1;
 2688|    350|        b <<= 1;
 2689|    350|    }
 2690|    971|    return result;
 2691|    971|}
listobject.c:merge_at:
 2599|    971|{
 2600|    971|    sortslice ssa, ssb;
 2601|    971|    Py_ssize_t na, nb;
 2602|    971|    Py_ssize_t k;
 2603|       |
 2604|    971|    assert(ms != NULL);
  ------------------
  |  Branch (2604:5): [True: 971, False: 0]
  ------------------
 2605|    971|    assert(ms->n >= 2);
  ------------------
  |  Branch (2605:5): [True: 971, False: 0]
  ------------------
 2606|    971|    assert(i >= 0);
  ------------------
  |  Branch (2606:5): [True: 971, False: 0]
  ------------------
 2607|    971|    assert(i == ms->n - 2 || i == ms->n - 3);
  ------------------
  |  Branch (2607:5): [True: 971, False: 0]
  |  Branch (2607:5): [True: 0, False: 0]
  ------------------
 2608|       |
 2609|    971|    ssa = ms->pending[i].base;
 2610|    971|    na = ms->pending[i].len;
 2611|    971|    ssb = ms->pending[i+1].base;
 2612|    971|    nb = ms->pending[i+1].len;
 2613|    971|    assert(na > 0 && nb > 0);
  ------------------
  |  Branch (2613:5): [True: 971, False: 0]
  |  Branch (2613:5): [True: 971, False: 0]
  ------------------
 2614|    971|    assert(ssa.keys + na == ssb.keys);
  ------------------
  |  Branch (2614:5): [True: 971, False: 0]
  ------------------
 2615|       |
 2616|       |    /* Record the length of the combined runs; if i is the 3rd-last
 2617|       |     * run now, also slide over the last run (which isn't involved
 2618|       |     * in this merge).  The current run i+1 goes away in any case.
 2619|       |     */
 2620|    971|    ms->pending[i].len = na + nb;
 2621|    971|    if (i == ms->n - 3)
  ------------------
  |  Branch (2621:9): [True: 0, False: 971]
  ------------------
 2622|      0|        ms->pending[i+1] = ms->pending[i+2];
 2623|    971|    --ms->n;
 2624|       |
 2625|       |    /* Where does b start in a?  Elements in a before that can be
 2626|       |     * ignored (already in place).
 2627|       |     */
 2628|    971|    k = gallop_right(ms, *ssb.keys, ssa.keys, na, 0);
 2629|    971|    if (k < 0)
  ------------------
  |  Branch (2629:9): [True: 0, False: 971]
  ------------------
 2630|      0|        return -1;
 2631|    971|    sortslice_advance(&ssa, k);
 2632|    971|    na -= k;
 2633|    971|    if (na == 0)
  ------------------
  |  Branch (2633:9): [True: 0, False: 971]
  ------------------
 2634|      0|        return 0;
 2635|       |
 2636|       |    /* Where does a end in b?  Elements in b after that can be
 2637|       |     * ignored (already in place).
 2638|       |     */
 2639|    971|    nb = gallop_left(ms, ssa.keys[na-1], ssb.keys, nb, nb-1);
 2640|    971|    if (nb <= 0)
  ------------------
  |  Branch (2640:9): [True: 0, False: 971]
  ------------------
 2641|      0|        return nb;
 2642|       |
 2643|       |    /* Merge what remains of the runs, using a temp array with
 2644|       |     * min(na, nb) elements.
 2645|       |     */
 2646|    971|    if (na <= nb)
  ------------------
  |  Branch (2646:9): [True: 575, False: 396]
  ------------------
 2647|    575|        return merge_lo(ms, ssa, na, ssb, nb);
 2648|    396|    else
 2649|    396|        return merge_hi(ms, ssa, na, ssb, nb);
 2650|    971|}
listobject.c:gallop_right:
 2157|  2.93k|{
 2158|  2.93k|    Py_ssize_t ofs;
 2159|  2.93k|    Py_ssize_t lastofs;
 2160|  2.93k|    Py_ssize_t k;
 2161|       |
 2162|  2.93k|    assert(key && a && n > 0 && hint >= 0 && hint < n);
  ------------------
  |  Branch (2162:5): [True: 2.93k, False: 0]
  |  Branch (2162:5): [True: 2.93k, False: 0]
  |  Branch (2162:5): [True: 2.93k, False: 0]
  |  Branch (2162:5): [True: 2.93k, False: 0]
  |  Branch (2162:5): [True: 2.93k, False: 0]
  ------------------
 2163|       |
 2164|  2.93k|    a += hint;
 2165|  2.93k|    lastofs = 0;
 2166|  2.93k|    ofs = 1;
 2167|  2.93k|    IFLT(key, *a) {
  ------------------
  |  | 1715|  2.93k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  2.93k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 2.93k]
  |  |  ------------------
  |  | 1716|  2.93k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 1.66k, False: 1.26k]
  |  |  ------------------
  ------------------
 2168|       |        /* key < a[hint] -- gallop left, until
 2169|       |         * a[hint - ofs] <= key < a[hint - lastofs]
 2170|       |         */
 2171|  1.66k|        const Py_ssize_t maxofs = hint + 1;             /* &a[0] is lowest */
 2172|  2.33k|        while (ofs < maxofs) {
  ------------------
  |  Branch (2172:16): [True: 1.05k, False: 1.28k]
  ------------------
 2173|  1.05k|            IFLT(key, *(a-ofs)) {
  ------------------
  |  | 1715|  1.05k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  1.05k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 1.05k]
  |  |  ------------------
  |  | 1716|  1.05k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 672, False: 380]
  |  |  ------------------
  ------------------
 2174|    672|                lastofs = ofs;
 2175|    672|                assert(ofs <= (PY_SSIZE_T_MAX - 1) / 2);
  ------------------
  |  Branch (2175:17): [True: 672, False: 0]
  ------------------
 2176|    672|                ofs = (ofs << 1) + 1;
 2177|    672|            }
 2178|    380|            else                /* a[hint - ofs] <= key */
 2179|    380|                break;
 2180|  1.05k|        }
 2181|  1.66k|        if (ofs > maxofs)
  ------------------
  |  Branch (2181:13): [True: 35, False: 1.63k]
  ------------------
 2182|     35|            ofs = maxofs;
 2183|       |        /* Translate back to positive offsets relative to &a[0]. */
 2184|  1.66k|        k = lastofs;
 2185|  1.66k|        lastofs = hint - ofs;
 2186|  1.66k|        ofs = hint - k;
 2187|  1.66k|    }
 2188|  1.26k|    else {
 2189|       |        /* a[hint] <= key -- gallop right, until
 2190|       |         * a[hint + lastofs] <= key < a[hint + ofs]
 2191|       |        */
 2192|  1.26k|        const Py_ssize_t maxofs = n - hint;             /* &a[n-1] is highest */
 2193|  2.40k|        while (ofs < maxofs) {
  ------------------
  |  Branch (2193:16): [True: 2.11k, False: 288]
  ------------------
 2194|  2.11k|            IFLT(key, a[ofs])
  ------------------
  |  | 1715|  2.11k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  2.11k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 2.11k]
  |  |  ------------------
  |  | 1716|  2.11k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 976, False: 1.13k]
  |  |  ------------------
  ------------------
 2195|    976|                break;
 2196|       |            /* a[hint + ofs] <= key */
 2197|  1.13k|            lastofs = ofs;
 2198|  1.13k|            assert(ofs <= (PY_SSIZE_T_MAX - 1) / 2);
  ------------------
  |  Branch (2198:13): [True: 1.13k, False: 0]
  ------------------
 2199|  1.13k|            ofs = (ofs << 1) + 1;
 2200|  1.13k|        }
 2201|  1.26k|        if (ofs > maxofs)
  ------------------
  |  Branch (2201:13): [True: 33, False: 1.23k]
  ------------------
 2202|     33|            ofs = maxofs;
 2203|       |        /* Translate back to offsets relative to &a[0]. */
 2204|  1.26k|        lastofs += hint;
 2205|  1.26k|        ofs += hint;
 2206|  1.26k|    }
 2207|  2.93k|    a -= hint;
 2208|       |
 2209|  2.93k|    assert(-1 <= lastofs && lastofs < ofs && ofs <= n);
  ------------------
  |  Branch (2209:5): [True: 2.93k, False: 0]
  |  Branch (2209:5): [True: 2.93k, False: 0]
  |  Branch (2209:5): [True: 2.93k, False: 0]
  ------------------
 2210|       |    /* Now a[lastofs] <= key < a[ofs], so key belongs somewhere to the
 2211|       |     * right of lastofs but no farther right than ofs.  Do a binary
 2212|       |     * search, with invariant a[lastofs-1] <= key < a[ofs].
 2213|       |     */
 2214|  2.93k|    ++lastofs;
 2215|  4.70k|    while (lastofs < ofs) {
  ------------------
  |  Branch (2215:12): [True: 1.77k, False: 2.93k]
  ------------------
 2216|  1.77k|        Py_ssize_t m = lastofs + ((ofs - lastofs) >> 1);
 2217|       |
 2218|  1.77k|        IFLT(key, a[m])
  ------------------
  |  | 1715|  1.77k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  1.77k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 1.77k]
  |  |  ------------------
  |  | 1716|  1.77k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 986, False: 786]
  |  |  ------------------
  ------------------
 2219|    986|            ofs = m;                    /* key < a[m] */
 2220|    786|        else
 2221|    786|            lastofs = m+1;              /* a[m] <= key */
 2222|  1.77k|    }
 2223|  2.93k|    assert(lastofs == ofs);             /* so a[ofs-1] <= key < a[ofs] */
  ------------------
  |  Branch (2223:5): [True: 2.93k, False: 0]
  ------------------
 2224|  2.93k|    return ofs;
 2225|       |
 2226|      0|fail:
 2227|      0|    return -1;
 2228|  2.93k|}
listobject.c:gallop_left:
 2068|  2.87k|{
 2069|  2.87k|    Py_ssize_t ofs;
 2070|  2.87k|    Py_ssize_t lastofs;
 2071|  2.87k|    Py_ssize_t k;
 2072|       |
 2073|  2.87k|    assert(key && a && n > 0 && hint >= 0 && hint < n);
  ------------------
  |  Branch (2073:5): [True: 2.87k, False: 0]
  |  Branch (2073:5): [True: 2.87k, False: 0]
  |  Branch (2073:5): [True: 2.87k, False: 0]
  |  Branch (2073:5): [True: 2.87k, False: 0]
  |  Branch (2073:5): [True: 2.87k, False: 0]
  ------------------
 2074|       |
 2075|  2.87k|    a += hint;
 2076|  2.87k|    lastofs = 0;
 2077|  2.87k|    ofs = 1;
 2078|  2.87k|    IFLT(*a, key) {
  ------------------
  |  | 1715|  2.87k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  2.87k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 2.87k]
  |  |  ------------------
  |  | 1716|  2.87k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 1.39k, False: 1.48k]
  |  |  ------------------
  ------------------
 2079|       |        /* a[hint] < key -- gallop right, until
 2080|       |         * a[hint + lastofs] < key <= a[hint + ofs]
 2081|       |         */
 2082|  1.39k|        const Py_ssize_t maxofs = n - hint;             /* &a[n-1] is highest */
 2083|  2.35k|        while (ofs < maxofs) {
  ------------------
  |  Branch (2083:16): [True: 1.63k, False: 716]
  ------------------
 2084|  1.63k|            IFLT(a[ofs], key) {
  ------------------
  |  | 1715|  1.63k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  1.63k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 1.63k]
  |  |  ------------------
  |  | 1716|  1.63k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 958, False: 679]
  |  |  ------------------
  ------------------
 2085|    958|                lastofs = ofs;
 2086|    958|                assert(ofs <= (PY_SSIZE_T_MAX - 1) / 2);
  ------------------
  |  Branch (2086:17): [True: 958, False: 0]
  ------------------
 2087|    958|                ofs = (ofs << 1) + 1;
 2088|    958|            }
 2089|    679|            else                /* key <= a[hint + ofs] */
 2090|    679|                break;
 2091|  1.63k|        }
 2092|  1.39k|        if (ofs > maxofs)
  ------------------
  |  Branch (2092:13): [True: 72, False: 1.32k]
  ------------------
 2093|     72|            ofs = maxofs;
 2094|       |        /* Translate back to offsets relative to &a[0]. */
 2095|  1.39k|        lastofs += hint;
 2096|  1.39k|        ofs += hint;
 2097|  1.39k|    }
 2098|  1.48k|    else {
 2099|       |        /* key <= a[hint] -- gallop left, until
 2100|       |         * a[hint - ofs] < key <= a[hint - lastofs]
 2101|       |         */
 2102|  1.48k|        const Py_ssize_t maxofs = hint + 1;             /* &a[0] is lowest */
 2103|  2.61k|        while (ofs < maxofs) {
  ------------------
  |  Branch (2103:16): [True: 2.09k, False: 515]
  ------------------
 2104|  2.09k|            IFLT(*(a-ofs), key)
  ------------------
  |  | 1715|  2.09k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  2.09k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 2.09k]
  |  |  ------------------
  |  | 1716|  2.09k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 966, False: 1.13k]
  |  |  ------------------
  ------------------
 2105|    966|                break;
 2106|       |            /* key <= a[hint - ofs] */
 2107|  1.13k|            lastofs = ofs;
 2108|  1.13k|            assert(ofs <= (PY_SSIZE_T_MAX - 1) / 2);
  ------------------
  |  Branch (2108:13): [True: 1.13k, False: 0]
  ------------------
 2109|  1.13k|            ofs = (ofs << 1) + 1;
 2110|  1.13k|        }
 2111|  1.48k|        if (ofs > maxofs)
  ------------------
  |  Branch (2111:13): [True: 16, False: 1.46k]
  ------------------
 2112|     16|            ofs = maxofs;
 2113|       |        /* Translate back to positive offsets relative to &a[0]. */
 2114|  1.48k|        k = lastofs;
 2115|  1.48k|        lastofs = hint - ofs;
 2116|  1.48k|        ofs = hint - k;
 2117|  1.48k|    }
 2118|  2.87k|    a -= hint;
 2119|       |
 2120|  2.87k|    assert(-1 <= lastofs && lastofs < ofs && ofs <= n);
  ------------------
  |  Branch (2120:5): [True: 2.87k, False: 0]
  |  Branch (2120:5): [True: 2.87k, False: 0]
  |  Branch (2120:5): [True: 2.87k, False: 0]
  ------------------
 2121|       |    /* Now a[lastofs] < key <= a[ofs], so key belongs somewhere to the
 2122|       |     * right of lastofs but no farther right than ofs.  Do a binary
 2123|       |     * search, with invariant a[lastofs-1] < key <= a[ofs].
 2124|       |     */
 2125|  2.87k|    ++lastofs;
 2126|  4.90k|    while (lastofs < ofs) {
  ------------------
  |  Branch (2126:12): [True: 2.02k, False: 2.87k]
  ------------------
 2127|  2.02k|        Py_ssize_t m = lastofs + ((ofs - lastofs) >> 1);
 2128|       |
 2129|  2.02k|        IFLT(a[m], key)
  ------------------
  |  | 1715|  2.02k|#define IFLT(X, Y) if ((k = ISLT(X, Y)) < 0) goto fail;  \
  |  |  ------------------
  |  |  |  | 1709|  2.02k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  |  |  ------------------
  |  |  |  Branch (1715:24): [True: 0, False: 2.02k]
  |  |  ------------------
  |  | 1716|  2.02k|           if (k)
  |  |  ------------------
  |  |  |  Branch (1716:16): [True: 1.01k, False: 1.01k]
  |  |  ------------------
  ------------------
 2130|  1.01k|            lastofs = m+1;              /* a[m] < key */
 2131|  1.01k|        else
 2132|  1.01k|            ofs = m;                    /* key <= a[m] */
 2133|  2.02k|    }
 2134|  2.87k|    assert(lastofs == ofs);             /* so a[ofs-1] < key <= a[ofs] */
  ------------------
  |  Branch (2134:5): [True: 2.87k, False: 0]
  ------------------
 2135|  2.87k|    return ofs;
 2136|       |
 2137|      0|fail:
 2138|      0|    return -1;
 2139|  2.87k|}
listobject.c:merge_lo:
 2329|    575|{
 2330|    575|    Py_ssize_t k;
 2331|    575|    sortslice dest;
 2332|    575|    int result = -1;            /* guilty until proved innocent */
 2333|    575|    Py_ssize_t min_gallop;
 2334|       |
 2335|    575|    assert(ms && ssa.keys && ssb.keys && na > 0 && nb > 0);
  ------------------
  |  Branch (2335:5): [True: 575, False: 0]
  |  Branch (2335:5): [True: 575, False: 0]
  |  Branch (2335:5): [True: 575, False: 0]
  |  Branch (2335:5): [True: 575, False: 0]
  |  Branch (2335:5): [True: 575, False: 0]
  ------------------
 2336|    575|    assert(ssa.keys + na == ssb.keys);
  ------------------
  |  Branch (2336:5): [True: 575, False: 0]
  ------------------
 2337|    575|    if (MERGE_GETMEM(ms, na) < 0)
  ------------------
  |  | 2317|    575|#define MERGE_GETMEM(MS, NEED) ((NEED) <= (MS)->alloced ? 0 :   \
  |  |  ------------------
  |  |  |  Branch (2317:33): [True: 575, False: 0]
  |  |  ------------------
  |  | 2318|    575|                                merge_getmem(MS, NEED))
  ------------------
  |  Branch (2337:9): [True: 0, False: 575]
  ------------------
 2338|      0|        return -1;
 2339|    575|    sortslice_memcpy(&ms->a, 0, &ssa, 0, na);
 2340|    575|    dest = ssa;
 2341|    575|    ssa = ms->a;
 2342|       |
 2343|    575|    sortslice_copy_incr(&dest, &ssb);
 2344|    575|    --nb;
 2345|    575|    if (nb == 0)
  ------------------
  |  Branch (2345:9): [True: 0, False: 575]
  ------------------
 2346|      0|        goto Succeed;
 2347|    575|    if (na == 1)
  ------------------
  |  Branch (2347:9): [True: 0, False: 575]
  ------------------
 2348|      0|        goto CopyB;
 2349|       |
 2350|    575|    min_gallop = ms->min_gallop;
 2351|  1.40k|    for (;;) {
 2352|  1.40k|        Py_ssize_t acount = 0;          /* # of times A won in a row */
 2353|  1.40k|        Py_ssize_t bcount = 0;          /* # of times B won in a row */
 2354|       |
 2355|       |        /* Do the straightforward thing until (if ever) one run
 2356|       |         * appears to win consistently.
 2357|       |         */
 2358|  42.3k|        for (;;) {
 2359|  42.3k|            assert(na > 1 && nb > 0);
  ------------------
  |  Branch (2359:13): [True: 42.3k, False: 0]
  |  Branch (2359:13): [True: 42.3k, False: 0]
  ------------------
 2360|  42.3k|            k = ISLT(ssb.keys[0], ssa.keys[0]);
  ------------------
  |  | 1709|  42.3k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  ------------------
 2361|  42.3k|            if (k) {
  ------------------
  |  Branch (2361:17): [True: 21.0k, False: 21.2k]
  ------------------
 2362|  21.0k|                if (k < 0)
  ------------------
  |  Branch (2362:21): [True: 0, False: 21.0k]
  ------------------
 2363|      0|                    goto Fail;
 2364|  21.0k|                sortslice_copy_incr(&dest, &ssb);
 2365|  21.0k|                ++bcount;
 2366|  21.0k|                acount = 0;
 2367|  21.0k|                --nb;
 2368|  21.0k|                if (nb == 0)
  ------------------
  |  Branch (2368:21): [True: 175, False: 20.8k]
  ------------------
 2369|    175|                    goto Succeed;
 2370|  20.8k|                if (bcount >= min_gallop)
  ------------------
  |  Branch (2370:21): [True: 477, False: 20.4k]
  ------------------
 2371|    477|                    break;
 2372|  20.8k|            }
 2373|  21.2k|            else {
 2374|  21.2k|                sortslice_copy_incr(&dest, &ssa);
 2375|  21.2k|                ++acount;
 2376|  21.2k|                bcount = 0;
 2377|  21.2k|                --na;
 2378|  21.2k|                if (na == 1)
  ------------------
  |  Branch (2378:21): [True: 308, False: 20.9k]
  ------------------
 2379|    308|                    goto CopyB;
 2380|  20.9k|                if (acount >= min_gallop)
  ------------------
  |  Branch (2380:21): [True: 441, False: 20.5k]
  ------------------
 2381|    441|                    break;
 2382|  20.9k|            }
 2383|  42.3k|        }
 2384|       |
 2385|       |        /* One run is winning so consistently that galloping may
 2386|       |         * be a huge win.  So try that, and continue galloping until
 2387|       |         * (if ever) neither run appears to be winning consistently
 2388|       |         * anymore.
 2389|       |         */
 2390|    918|        ++min_gallop;
 2391|  1.27k|        do {
 2392|  1.27k|            assert(na > 1 && nb > 0);
  ------------------
  |  Branch (2392:13): [True: 1.27k, False: 0]
  |  Branch (2392:13): [True: 1.27k, False: 0]
  ------------------
 2393|  1.27k|            min_gallop -= min_gallop > 1;
 2394|  1.27k|            ms->min_gallop = min_gallop;
 2395|  1.27k|            k = gallop_right(ms, ssb.keys[0], ssa.keys, na, 0);
 2396|  1.27k|            acount = k;
 2397|  1.27k|            if (k) {
  ------------------
  |  Branch (2397:17): [True: 795, False: 482]
  ------------------
 2398|    795|                if (k < 0)
  ------------------
  |  Branch (2398:21): [True: 0, False: 795]
  ------------------
 2399|      0|                    goto Fail;
 2400|    795|                sortslice_memcpy(&dest, 0, &ssa, 0, k);
 2401|    795|                sortslice_advance(&dest, k);
 2402|    795|                sortslice_advance(&ssa, k);
 2403|    795|                na -= k;
 2404|    795|                if (na == 1)
  ------------------
  |  Branch (2404:21): [True: 16, False: 779]
  ------------------
 2405|     16|                    goto CopyB;
 2406|       |                /* na==0 is impossible now if the comparison
 2407|       |                 * function is consistent, but we can't assume
 2408|       |                 * that it is.
 2409|       |                 */
 2410|    779|                if (na == 0)
  ------------------
  |  Branch (2410:21): [True: 0, False: 779]
  ------------------
 2411|      0|                    goto Succeed;
 2412|    779|            }
 2413|  1.26k|            sortslice_copy_incr(&dest, &ssb);
 2414|  1.26k|            --nb;
 2415|  1.26k|            if (nb == 0)
  ------------------
  |  Branch (2415:17): [True: 8, False: 1.25k]
  ------------------
 2416|      8|                goto Succeed;
 2417|       |
 2418|  1.25k|            k = gallop_left(ms, ssa.keys[0], ssb.keys, nb, 0);
 2419|  1.25k|            bcount = k;
 2420|  1.25k|            if (k) {
  ------------------
  |  Branch (2420:17): [True: 756, False: 497]
  ------------------
 2421|    756|                if (k < 0)
  ------------------
  |  Branch (2421:21): [True: 0, False: 756]
  ------------------
 2422|      0|                    goto Fail;
 2423|    756|                sortslice_memmove(&dest, 0, &ssb, 0, k);
 2424|    756|                sortslice_advance(&dest, k);
 2425|    756|                sortslice_advance(&ssb, k);
 2426|    756|                nb -= k;
 2427|    756|                if (nb == 0)
  ------------------
  |  Branch (2427:21): [True: 16, False: 740]
  ------------------
 2428|     16|                    goto Succeed;
 2429|    756|            }
 2430|  1.23k|            sortslice_copy_incr(&dest, &ssa);
 2431|  1.23k|            --na;
 2432|  1.23k|            if (na == 1)
  ------------------
  |  Branch (2432:17): [True: 52, False: 1.18k]
  ------------------
 2433|     52|                goto CopyB;
 2434|  1.23k|        } while (acount >= MIN_GALLOP || bcount >= MIN_GALLOP);
  ------------------
  |  | 1728|  2.37k|#define MIN_GALLOP 7
  ------------------
                      } while (acount >= MIN_GALLOP || bcount >= MIN_GALLOP);
  ------------------
  |  | 1728|  1.00k|#define MIN_GALLOP 7
  ------------------
  |  Branch (2434:18): [True: 176, False: 1.00k]
  |  Branch (2434:42): [True: 183, False: 826]
  ------------------
 2435|    826|        ++min_gallop;           /* penalize it for leaving galloping mode */
 2436|    826|        ms->min_gallop = min_gallop;
 2437|    826|    }
 2438|    199|Succeed:
 2439|    199|    result = 0;
 2440|    199|Fail:
 2441|    199|    if (na)
  ------------------
  |  Branch (2441:9): [True: 199, False: 0]
  ------------------
 2442|    199|        sortslice_memcpy(&dest, 0, &ssa, 0, na);
 2443|    199|    return result;
 2444|    376|CopyB:
 2445|    376|    assert(na == 1 && nb > 0);
  ------------------
  |  Branch (2445:5): [True: 376, False: 0]
  |  Branch (2445:5): [True: 376, False: 0]
  ------------------
 2446|       |    /* The last element of ssa belongs at the end of the merge. */
 2447|    376|    sortslice_memmove(&dest, 0, &ssb, 0, nb);
 2448|    376|    sortslice_copy(&dest, nb, &ssa, 0);
 2449|    376|    return 0;
 2450|    376|}
listobject.c:sortslice_memcpy:
 1681|  2.69k|{
 1682|  2.69k|    memcpy(&s1->keys[i], &s2->keys[j], sizeof(PyObject *) * n);
 1683|  2.69k|    if (s1->values != NULL)
  ------------------
  |  Branch (1683:9): [True: 0, False: 2.69k]
  ------------------
 1684|      0|        memcpy(&s1->values[i], &s2->values[j], sizeof(PyObject *) * n);
 1685|  2.69k|}
listobject.c:sortslice_copy_incr:
 1663|  45.3k|{
 1664|  45.3k|    *dst->keys++ = *src->keys++;
 1665|  45.3k|    if (dst->values != NULL)
  ------------------
  |  Branch (1665:9): [True: 0, False: 45.3k]
  ------------------
 1666|      0|        *dst->values++ = *src->values++;
 1667|  45.3k|}
listobject.c:sortslice_memmove:
 1690|  1.67k|{
 1691|  1.67k|    memmove(&s1->keys[i], &s2->keys[j], sizeof(PyObject *) * n);
 1692|  1.67k|    if (s1->values != NULL)
  ------------------
  |  Branch (1692:9): [True: 0, False: 1.67k]
  ------------------
 1693|      0|        memmove(&s1->values[i], &s2->values[j], sizeof(PyObject *) * n);
 1694|  1.67k|}
listobject.c:sortslice_copy:
 1655|    488|{
 1656|    488|    s1->keys[i] = s2->keys[j];
 1657|    488|    if (s1->values != NULL)
  ------------------
  |  Branch (1657:9): [True: 0, False: 488]
  ------------------
 1658|      0|        s1->values[i] = s2->values[j];
 1659|    488|}
listobject.c:merge_hi:
 2461|    396|{
 2462|    396|    Py_ssize_t k;
 2463|    396|    sortslice dest, basea, baseb;
 2464|    396|    int result = -1;            /* guilty until proved innocent */
 2465|    396|    Py_ssize_t min_gallop;
 2466|       |
 2467|    396|    assert(ms && ssa.keys && ssb.keys && na > 0 && nb > 0);
  ------------------
  |  Branch (2467:5): [True: 396, False: 0]
  |  Branch (2467:5): [True: 396, False: 0]
  |  Branch (2467:5): [True: 396, False: 0]
  |  Branch (2467:5): [True: 396, False: 0]
  |  Branch (2467:5): [True: 396, False: 0]
  ------------------
 2468|    396|    assert(ssa.keys + na == ssb.keys);
  ------------------
  |  Branch (2468:5): [True: 396, False: 0]
  ------------------
 2469|    396|    if (MERGE_GETMEM(ms, nb) < 0)
  ------------------
  |  | 2317|    396|#define MERGE_GETMEM(MS, NEED) ((NEED) <= (MS)->alloced ? 0 :   \
  |  |  ------------------
  |  |  |  Branch (2317:33): [True: 396, False: 0]
  |  |  ------------------
  |  | 2318|    396|                                merge_getmem(MS, NEED))
  ------------------
  |  Branch (2469:9): [True: 0, False: 396]
  ------------------
 2470|      0|        return -1;
 2471|    396|    dest = ssb;
 2472|    396|    sortslice_advance(&dest, nb-1);
 2473|    396|    sortslice_memcpy(&ms->a, 0, &ssb, 0, nb);
 2474|    396|    basea = ssa;
 2475|    396|    baseb = ms->a;
 2476|    396|    ssb.keys = ms->a.keys + nb - 1;
 2477|    396|    if (ssb.values != NULL)
  ------------------
  |  Branch (2477:9): [True: 0, False: 396]
  ------------------
 2478|      0|        ssb.values = ms->a.values + nb - 1;
 2479|    396|    sortslice_advance(&ssa, na - 1);
 2480|       |
 2481|    396|    sortslice_copy_decr(&dest, &ssa);
 2482|    396|    --na;
 2483|    396|    if (na == 0)
  ------------------
  |  Branch (2483:9): [True: 0, False: 396]
  ------------------
 2484|      0|        goto Succeed;
 2485|    396|    if (nb == 1)
  ------------------
  |  Branch (2485:9): [True: 0, False: 396]
  ------------------
 2486|      0|        goto CopyA;
 2487|       |
 2488|    396|    min_gallop = ms->min_gallop;
 2489|    754|    for (;;) {
 2490|    754|        Py_ssize_t acount = 0;          /* # of times A won in a row */
 2491|    754|        Py_ssize_t bcount = 0;          /* # of times B won in a row */
 2492|       |
 2493|       |        /* Do the straightforward thing until (if ever) one run
 2494|       |         * appears to win consistently.
 2495|       |         */
 2496|  26.2k|        for (;;) {
 2497|  26.2k|            assert(na > 0 && nb > 1);
  ------------------
  |  Branch (2497:13): [True: 26.2k, False: 0]
  |  Branch (2497:13): [True: 26.2k, False: 0]
  ------------------
 2498|  26.2k|            k = ISLT(ssb.keys[0], ssa.keys[0]);
  ------------------
  |  | 1709|  26.2k|#define ISLT(X, Y) (*(ms->key_compare))(X, Y, ms)
  ------------------
 2499|  26.2k|            if (k) {
  ------------------
  |  Branch (2499:17): [True: 14.0k, False: 12.2k]
  ------------------
 2500|  14.0k|                if (k < 0)
  ------------------
  |  Branch (2500:21): [True: 0, False: 14.0k]
  ------------------
 2501|      0|                    goto Fail;
 2502|  14.0k|                sortslice_copy_decr(&dest, &ssa);
 2503|  14.0k|                ++acount;
 2504|  14.0k|                bcount = 0;
 2505|  14.0k|                --na;
 2506|  14.0k|                if (na == 0)
  ------------------
  |  Branch (2506:21): [True: 208, False: 13.8k]
  ------------------
 2507|    208|                    goto Succeed;
 2508|  13.8k|                if (acount >= min_gallop)
  ------------------
  |  Branch (2508:21): [True: 297, False: 13.5k]
  ------------------
 2509|    297|                    break;
 2510|  13.8k|            }
 2511|  12.2k|            else {
 2512|  12.2k|                sortslice_copy_decr(&dest, &ssb);
 2513|  12.2k|                ++bcount;
 2514|  12.2k|                acount = 0;
 2515|  12.2k|                --nb;
 2516|  12.2k|                if (nb == 1)
  ------------------
  |  Branch (2516:21): [True: 106, False: 12.1k]
  ------------------
 2517|    106|                    goto CopyA;
 2518|  12.1k|                if (bcount >= min_gallop)
  ------------------
  |  Branch (2518:21): [True: 143, False: 12.0k]
  ------------------
 2519|    143|                    break;
 2520|  12.1k|            }
 2521|  26.2k|        }
 2522|       |
 2523|       |        /* One run is winning so consistently that galloping may
 2524|       |         * be a huge win.  So try that, and continue galloping until
 2525|       |         * (if ever) neither run appears to be winning consistently
 2526|       |         * anymore.
 2527|       |         */
 2528|    440|        ++min_gallop;
 2529|    682|        do {
 2530|    682|            assert(na > 0 && nb > 1);
  ------------------
  |  Branch (2530:13): [True: 682, False: 0]
  |  Branch (2530:13): [True: 682, False: 0]
  ------------------
 2531|    682|            min_gallop -= min_gallop > 1;
 2532|    682|            ms->min_gallop = min_gallop;
 2533|    682|            k = gallop_right(ms, ssb.keys[0], basea.keys, na, na-1);
 2534|    682|            if (k < 0)
  ------------------
  |  Branch (2534:17): [True: 0, False: 682]
  ------------------
 2535|      0|                goto Fail;
 2536|    682|            k = na - k;
 2537|    682|            acount = k;
 2538|    682|            if (k) {
  ------------------
  |  Branch (2538:17): [True: 434, False: 248]
  ------------------
 2539|    434|                sortslice_advance(&dest, -k);
 2540|    434|                sortslice_advance(&ssa, -k);
 2541|    434|                sortslice_memmove(&dest, 1, &ssa, 1, k);
 2542|    434|                na -= k;
 2543|    434|                if (na == 0)
  ------------------
  |  Branch (2543:21): [True: 27, False: 407]
  ------------------
 2544|     27|                    goto Succeed;
 2545|    434|            }
 2546|    655|            sortslice_copy_decr(&dest, &ssb);
 2547|    655|            --nb;
 2548|    655|            if (nb == 1)
  ------------------
  |  Branch (2548:17): [True: 3, False: 652]
  ------------------
 2549|      3|                goto CopyA;
 2550|       |
 2551|    652|            k = gallop_left(ms, ssa.keys[0], baseb.keys, nb, nb-1);
 2552|    652|            if (k < 0)
  ------------------
  |  Branch (2552:17): [True: 0, False: 652]
  ------------------
 2553|      0|                goto Fail;
 2554|    652|            k = nb - k;
 2555|    652|            bcount = k;
 2556|    652|            if (k) {
  ------------------
  |  Branch (2556:17): [True: 446, False: 206]
  ------------------
 2557|    446|                sortslice_advance(&dest, -k);
 2558|    446|                sortslice_advance(&ssb, -k);
 2559|    446|                sortslice_memcpy(&dest, 1, &ssb, 1, k);
 2560|    446|                nb -= k;
 2561|    446|                if (nb == 1)
  ------------------
  |  Branch (2561:21): [True: 3, False: 443]
  ------------------
 2562|      3|                    goto CopyA;
 2563|       |                /* nb==0 is impossible now if the comparison
 2564|       |                 * function is consistent, but we can't assume
 2565|       |                 * that it is.
 2566|       |                 */
 2567|    443|                if (nb == 0)
  ------------------
  |  Branch (2567:21): [True: 0, False: 443]
  ------------------
 2568|      0|                    goto Succeed;
 2569|    443|            }
 2570|    649|            sortslice_copy_decr(&dest, &ssa);
 2571|    649|            --na;
 2572|    649|            if (na == 0)
  ------------------
  |  Branch (2572:17): [True: 49, False: 600]
  ------------------
 2573|     49|                goto Succeed;
 2574|    649|        } while (acount >= MIN_GALLOP || bcount >= MIN_GALLOP);
  ------------------
  |  | 1728|  1.20k|#define MIN_GALLOP 7
  ------------------
                      } while (acount >= MIN_GALLOP || bcount >= MIN_GALLOP);
  ------------------
  |  | 1728|    482|#define MIN_GALLOP 7
  ------------------
  |  Branch (2574:18): [True: 118, False: 482]
  |  Branch (2574:42): [True: 124, False: 358]
  ------------------
 2575|    358|        ++min_gallop;           /* penalize it for leaving galloping mode */
 2576|    358|        ms->min_gallop = min_gallop;
 2577|    358|    }
 2578|    284|Succeed:
 2579|    284|    result = 0;
 2580|    284|Fail:
 2581|    284|    if (nb)
  ------------------
  |  Branch (2581:9): [True: 284, False: 0]
  ------------------
 2582|    284|        sortslice_memcpy(&dest, -(nb-1), &baseb, 0, nb);
 2583|    284|    return result;
 2584|    112|CopyA:
 2585|    112|    assert(nb == 1 && na > 0);
  ------------------
  |  Branch (2585:5): [True: 112, False: 0]
  |  Branch (2585:5): [True: 112, False: 0]
  ------------------
 2586|       |    /* The first element of ssb belongs at the front of the merge. */
 2587|    112|    sortslice_memmove(&dest, 1-na, &ssa, 1-na, na);
 2588|    112|    sortslice_advance(&dest, -na);
 2589|    112|    sortslice_advance(&ssa, -na);
 2590|    112|    sortslice_copy(&dest, 0, &ssb, 0);
 2591|    112|    return 0;
 2592|    112|}
listobject.c:sortslice_copy_decr:
 1671|  27.9k|{
 1672|  27.9k|    *dst->keys-- = *src->keys--;
 1673|  27.9k|    if (dst->values != NULL)
  ------------------
  |  Branch (1673:9): [True: 0, False: 27.9k]
  ------------------
 1674|      0|        *dst->values-- = *src->values--;
 1675|  27.9k|}
listobject.c:sortslice_advance:
 1698|  61.7k|{
 1699|  61.7k|    slice->keys += n;
 1700|  61.7k|    if (slice->values != NULL)
  ------------------
  |  Branch (1700:9): [True: 2, False: 61.7k]
  ------------------
 1701|      2|        slice->values += n;
 1702|  61.7k|}
listobject.c:merge_force_collapse:
 2731|  53.9k|{
 2732|  53.9k|    struct s_slice *p = ms->pending;
 2733|       |
 2734|  53.9k|    assert(ms);
  ------------------
  |  Branch (2734:5): [True: 53.9k, False: 0]
  ------------------
 2735|  54.7k|    while (ms->n > 1) {
  ------------------
  |  Branch (2735:12): [True: 824, False: 53.9k]
  ------------------
 2736|    824|        Py_ssize_t n = ms->n - 2;
 2737|    824|        if (n > 0 && p[n-1].len < p[n+1].len)
  ------------------
  |  Branch (2737:13): [True: 91, False: 733]
  |  Branch (2737:22): [True: 0, False: 91]
  ------------------
 2738|      0|            --n;
 2739|    824|        if (merge_at(ms, n) < 0)
  ------------------
  |  Branch (2739:13): [True: 0, False: 824]
  ------------------
 2740|      0|            return -1;
 2741|    824|    }
 2742|  53.9k|    return 0;
 2743|  53.9k|}
listobject.c:merge_freemem:
 2276|   137k|{
 2277|   137k|    assert(ms != NULL);
  ------------------
  |  Branch (2277:5): [True: 137k, False: 0]
  ------------------
 2278|   137k|    if (ms->a.keys != ms->temparray) {
  ------------------
  |  Branch (2278:9): [True: 0, False: 137k]
  ------------------
 2279|      0|        PyMem_Free(ms->a.keys);
 2280|       |        ms->a.keys = NULL;
 2281|      0|    }
 2282|   137k|}
listobject.c:reverse_slice:
 1622|  24.5k|{
 1623|  24.5k|    assert(lo && hi);
  ------------------
  |  Branch (1623:5): [True: 24.5k, False: 0]
  |  Branch (1623:5): [True: 24.5k, False: 0]
  ------------------
 1624|       |
 1625|  24.5k|    --hi;
 1626|  49.6k|    while (lo < hi) {
  ------------------
  |  Branch (1626:12): [True: 25.1k, False: 24.5k]
  ------------------
 1627|  25.1k|        PyObject *t = *lo;
 1628|  25.1k|        FT_ATOMIC_STORE_PTR_RELEASE(*lo, *hi);
  ------------------
  |  |  164|  25.1k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1629|  25.1k|        FT_ATOMIC_STORE_PTR_RELEASE(*hi, t);
  ------------------
  |  |  164|  25.1k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1630|  25.1k|        ++lo;
 1631|  25.1k|        --hi;
 1632|  25.1k|    }
 1633|  24.5k|}
listobject.c:list_slice_subscript:
 3675|     41|{
 3676|     41|    assert(PyList_Check(self));
  ------------------
  |  Branch (3676:5): [True: 41, False: 0]
  ------------------
 3677|     41|    assert(PySlice_Check(item));
  ------------------
  |  Branch (3677:5): [True: 41, False: 0]
  ------------------
 3678|     41|    Py_ssize_t start, stop, step;
 3679|     41|    if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (3679:9): [True: 0, False: 41]
  ------------------
 3680|      0|        return NULL;
 3681|      0|    }
 3682|     41|    return list_slice_wrap((PyListObject *)self, start, stop, step);
 3683|     41|}
listobject.c:list_slice_wrap:
 3656|     41|{
 3657|     41|    PyObject *res = NULL;
 3658|     41|    Py_BEGIN_CRITICAL_SECTION(aa);
  ------------------
  |  |   51|     41|    {
  ------------------
 3659|     41|    Py_ssize_t len = PySlice_AdjustIndices(Py_SIZE(aa), &start, &stop, step);
  ------------------
  |  |  214|     41|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3660|     41|    if (len <= 0) {
  ------------------
  |  Branch (3660:9): [True: 1, False: 40]
  ------------------
 3661|      1|        res = PyList_New(0);
 3662|      1|    }
 3663|     40|    else if (step == 1) {
  ------------------
  |  Branch (3663:14): [True: 36, False: 4]
  ------------------
 3664|     36|        res = list_slice_lock_held(aa, start, stop);
 3665|     36|    }
 3666|      4|    else {
 3667|      4|        res = list_slice_step_lock_held(aa, start, step, len);
 3668|      4|    }
 3669|     41|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     41|    }
  ------------------
 3670|     41|    return res;
 3671|     41|}
listobject.c:list_slice_step_lock_held:
 3636|      4|{
 3637|      4|    PyListObject *np = (PyListObject *)list_new_prealloc(len);
 3638|      4|    if (np == NULL) {
  ------------------
  |  Branch (3638:9): [True: 0, False: 4]
  ------------------
 3639|      0|        return NULL;
 3640|      0|    }
 3641|      4|    size_t cur;
 3642|      4|    Py_ssize_t i;
 3643|      4|    PyObject **src = a->ob_item;
 3644|      4|    PyObject **dest = np->ob_item;
 3645|    140|    for (cur = start, i = 0; i < len;
  ------------------
  |  Branch (3645:30): [True: 136, False: 4]
  ------------------
 3646|    136|            cur += (size_t)step, i++) {
 3647|    136|        PyObject *v = src[cur];
 3648|    136|        dest[i] = Py_NewRef(v);
  ------------------
  |  |  550|    136|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    136|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3649|    136|    }
 3650|      4|    Py_SET_SIZE(np, len);
  ------------------
  |  |  216|      4|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      4|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3651|      4|    return (PyObject *)np;
 3652|      4|}
listobject.c:list_dealloc:
  556|   868k|{
  557|   868k|    PyListObject *op = (PyListObject *)self;
  558|   868k|    Py_ssize_t i;
  559|   868k|    PyObject_GC_UnTrack(op);
  560|   868k|    if (op->ob_item != NULL) {
  ------------------
  |  Branch (560:9): [True: 561k, False: 307k]
  ------------------
  561|       |        /* Do it backwards, for Christian Tismer.
  562|       |           There's a simple test case where somehow this reduces
  563|       |           thrashing when a *very* large list is created and
  564|       |           immediately deleted. */
  565|   561k|        i = Py_SIZE(op);
  ------------------
  |  |  214|   561k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   561k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   561k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  566|  6.45M|        while (--i >= 0) {
  ------------------
  |  Branch (566:16): [True: 5.89M, False: 561k]
  ------------------
  567|  5.89M|            Py_XDECREF(op->ob_item[i]);
  ------------------
  |  |  524|  5.89M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.89M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.89M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|  5.89M|        }
  569|   561k|        free_list_items(op->ob_item, false);
  570|   561k|        op->ob_item = NULL;
  571|   561k|    }
  572|   868k|    if (PyList_CheckExact(op)) {
  ------------------
  |  |   26|   868k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|   868k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   868k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   868k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 868k, False: 367]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|   868k|        _Py_FREELIST_FREE(lists, op, PyObject_GC_Del);
  ------------------
  |  |   35|   868k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|   868k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   868k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|   868k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   13|   868k|#  define Py_lists_MAXFREELIST 80
  |  |  ------------------
  ------------------
  574|   868k|    }
  575|    367|    else {
  576|    367|        PyObject_GC_Del(op);
  577|    367|    }
  578|   868k|}
listobject.c:list_length:
  651|   103k|{
  652|   103k|    return PyList_GET_SIZE(a);
  ------------------
  |  |   38|   103k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   103k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   103k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|   103k|}
listobject.c:list_repeat:
  863|     33|{
  864|     33|    PyObject *ret;
  865|     33|    PyListObject *a = (PyListObject *)aa;
  866|     33|    Py_BEGIN_CRITICAL_SECTION(a);
  ------------------
  |  |   51|     33|    {
  ------------------
  867|     33|    ret = list_repeat_lock_held(a, n);
  868|     33|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     33|    }
  ------------------
  869|     33|    return ret;
  870|     33|}
listobject.c:list_repeat_lock_held:
  821|     33|{
  822|     33|    const Py_ssize_t input_size = Py_SIZE(a);
  ------------------
  |  |  214|     33|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  823|     33|    if (input_size == 0 || n <= 0)
  ------------------
  |  Branch (823:9): [True: 0, False: 33]
  |  Branch (823:28): [True: 0, False: 33]
  ------------------
  824|      0|        return PyList_New(0);
  825|     33|    assert(n > 0);
  ------------------
  |  Branch (825:5): [True: 33, False: 0]
  ------------------
  826|       |
  827|     33|    if (input_size > PY_SSIZE_T_MAX / n)
  ------------------
  |  |  137|     33|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (827:9): [True: 0, False: 33]
  ------------------
  828|      0|        return PyErr_NoMemory();
  829|     33|    Py_ssize_t output_size = input_size * n;
  830|       |
  831|     33|    PyListObject *np = (PyListObject *) list_new_prealloc(output_size);
  832|     33|    if (np == NULL)
  ------------------
  |  Branch (832:9): [True: 0, False: 33]
  ------------------
  833|      0|        return NULL;
  834|       |
  835|     33|    PyObject **dest = np->ob_item;
  836|     33|    if (input_size == 1) {
  ------------------
  |  Branch (836:9): [True: 33, False: 0]
  ------------------
  837|     33|        PyObject *elem = a->ob_item[0];
  838|     33|        _Py_RefcntAdd(elem, n);
  ------------------
  |  |  179|     33|#define _Py_RefcntAdd(op, n) _Py_RefcntAdd(_PyObject_CAST(op), n)
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  839|     33|        PyObject **dest_end = dest + output_size;
  840|    118|        while (dest < dest_end) {
  ------------------
  |  Branch (840:16): [True: 85, False: 33]
  ------------------
  841|     85|            *dest++ = elem;
  842|     85|        }
  843|     33|    }
  844|      0|    else {
  845|      0|        PyObject **src = a->ob_item;
  846|      0|        PyObject **src_end = src + input_size;
  847|      0|        while (src < src_end) {
  ------------------
  |  Branch (847:16): [True: 0, False: 0]
  ------------------
  848|      0|            _Py_RefcntAdd(*src, n);
  ------------------
  |  |  179|      0|#define _Py_RefcntAdd(op, n) _Py_RefcntAdd(_PyObject_CAST(op), n)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|      0|            *dest++ = *src++;
  850|      0|        }
  851|       |        // This list is not yet visible to other threads, so atomic repeat
  852|       |        // is not necessary even in Py_GIL_DISABLED builds.
  853|      0|        _Py_memory_repeat((char *)np->ob_item, sizeof(PyObject *)*output_size,
  854|      0|                                        sizeof(PyObject *)*input_size);
  855|      0|    }
  856|       |
  857|     33|    Py_SET_SIZE(np, output_size);
  ------------------
  |  |  216|     33|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|     33|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|     33|    return (PyObject *) np;
  859|     33|}
listobject.c:list_item:
  676|  3.70k|{
  677|  3.70k|    PyListObject *a = (PyListObject *)aa;
  678|  3.70k|    if (!valid_index(i, PyList_GET_SIZE(a))) {
  ------------------
  |  |   38|  3.70k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (678:9): [True: 78, False: 3.63k]
  ------------------
  679|     78|        PyErr_SetObject(PyExc_IndexError, &_Py_STR(list_err));
  ------------------
  |  |  938|     78|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     78|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     78|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|     78|        return NULL;
  681|     78|    }
  682|  3.63k|    PyObject *item;
  683|       |#ifdef Py_GIL_DISABLED
  684|       |    item = list_get_item_ref(a, i);
  685|       |    if (item == NULL) {
  686|       |        PyErr_SetObject(PyExc_IndexError, &_Py_STR(list_err));
  687|       |        return NULL;
  688|       |    }
  689|       |#else
  690|  3.63k|    item = Py_NewRef(a->ob_item[i]);
  ------------------
  |  |  550|  3.63k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  3.63k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|  3.63k|#endif
  692|  3.63k|    return item;
  693|  3.70k|}
listobject.c:list_ass_item:
 1162|  42.8k|{
 1163|  42.8k|    int ret;
 1164|  42.8k|    PyListObject *a = (PyListObject *)aa;
 1165|  42.8k|    Py_BEGIN_CRITICAL_SECTION(a);
  ------------------
  |  |   51|  42.8k|    {
  ------------------
 1166|  42.8k|    ret = list_ass_item_lock_held(a, i, v);
 1167|  42.8k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  42.8k|    }
  ------------------
 1168|  42.8k|    return ret;
 1169|  42.8k|}
listobject.c:list_ass_item_lock_held:
 1139|  43.4k|{
 1140|  43.4k|    if (!valid_index(i, Py_SIZE(a))) {
  ------------------
  |  |  214|  43.4k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  43.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1140:9): [True: 0, False: 43.4k]
  ------------------
 1141|      0|        PyErr_SetString(PyExc_IndexError,
 1142|      0|                        "list assignment index out of range");
 1143|      0|        return -1;
 1144|      0|    }
 1145|  43.4k|    PyObject *tmp = a->ob_item[i];
 1146|  43.4k|    if (v == NULL) {
  ------------------
  |  Branch (1146:9): [True: 43.4k, False: 42]
  ------------------
 1147|  43.4k|        Py_ssize_t size = Py_SIZE(a);
  ------------------
  |  |  214|  43.4k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  43.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1148|  43.4k|        for (Py_ssize_t idx = i; idx < size - 1; idx++) {
  ------------------
  |  Branch (1148:34): [True: 0, False: 43.4k]
  ------------------
 1149|      0|            FT_ATOMIC_STORE_PTR_RELEASE(a->ob_item[idx], a->ob_item[idx + 1]);
  ------------------
  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1150|      0|        }
 1151|  43.4k|        Py_SET_SIZE(a, size - 1);
  ------------------
  |  |  216|  43.4k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|  43.4k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1152|  43.4k|    }
 1153|     42|    else {
 1154|     42|        FT_ATOMIC_STORE_PTR_RELEASE(a->ob_item[i], Py_NewRef(v));
  ------------------
  |  |  164|     42|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 1155|     42|    }
 1156|  43.4k|    Py_DECREF(tmp);
  ------------------
  |  |  430|  43.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  43.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|  43.4k|    return 0;
 1158|  43.4k|}
listobject.c:list_contains:
  657|  2.36k|{
  658|       |
  659|  6.07k|    for (Py_ssize_t i = 0; ; i++) {
  660|  6.07k|        PyObject *item = list_get_item_ref((PyListObject *)aa, i);
  661|  6.07k|        if (item == NULL) {
  ------------------
  |  Branch (661:13): [True: 2.16k, False: 3.91k]
  ------------------
  662|       |            // out-of-bounds
  663|  2.16k|            return 0;
  664|  2.16k|        }
  665|  3.91k|        int cmp = PyObject_RichCompareBool(item, el, Py_EQ);
  ------------------
  |  |  654|  3.91k|#define Py_EQ 2
  ------------------
  666|  3.91k|        Py_DECREF(item);
  ------------------
  |  |  430|  3.91k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  667|  3.91k|        if (cmp != 0) {
  ------------------
  |  Branch (667:13): [True: 206, False: 3.70k]
  ------------------
  668|    206|            return cmp;
  669|    206|        }
  670|  3.91k|    }
  671|      0|    return 0;
  672|  2.36k|}
listobject.c:list_inplace_concat:
 1565|     18|{
 1566|     18|    PyListObject *self = (PyListObject *)_self;
 1567|     18|    if (_list_extend(self, other) < 0) {
  ------------------
  |  Branch (1567:9): [True: 0, False: 18]
  ------------------
 1568|      0|        return NULL;
 1569|      0|    }
 1570|     18|    return Py_NewRef(self);
  ------------------
  |  |  550|     18|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|     18|}
listobject.c:list_subscript:
 3693|  1.92k|{
 3694|  1.92k|    PyListObject* self = (PyListObject*)_self;
 3695|  1.92k|    if (_PyIndex_Check(item)) {
  ------------------
  |  Branch (3695:9): [True: 1.91k, False: 8]
  ------------------
 3696|  1.91k|        Py_ssize_t i;
 3697|  1.91k|        i = PyNumber_AsSsize_t(item, PyExc_IndexError);
 3698|  1.91k|        if (i == -1 && PyErr_Occurred())
  ------------------
  |  Branch (3698:13): [True: 1.84k, False: 77]
  |  Branch (3698:24): [True: 0, False: 1.84k]
  ------------------
 3699|      0|            return NULL;
 3700|  1.91k|        if (i < 0)
  ------------------
  |  Branch (3700:13): [True: 1.84k, False: 77]
  ------------------
 3701|  1.84k|            i += PyList_GET_SIZE(self);
  ------------------
  |  |   38|  1.84k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.84k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.84k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3702|  1.91k|        return list_item((PyObject *)self, i);
 3703|  1.91k|    }
 3704|      8|    else if (PySlice_Check(item)) {
  ------------------
  |  |   22|      8|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|      8|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 8, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3705|      8|        return list_slice_subscript(_self, item);
 3706|      8|    }
 3707|      0|    else {
 3708|      0|        PyErr_Format(PyExc_TypeError,
 3709|      0|                     "list indices must be integers or slices, not %.200s",
 3710|      0|                     Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3711|       |        return NULL;
 3712|      0|    }
 3713|  1.92k|}
listobject.c:list_ass_subscript:
 3900|    759|{
 3901|    759|    int res;
 3902|       |#ifdef Py_GIL_DISABLED
 3903|       |    if (PySlice_Check(item) && value != NULL && PyList_CheckExact(value)) {
 3904|       |        Py_BEGIN_CRITICAL_SECTION2(self, value);
 3905|       |        res = list_ass_subscript_lock_held(self, item, value);
 3906|       |        Py_END_CRITICAL_SECTION2();
 3907|       |        return res;
 3908|       |    }
 3909|       |#endif
 3910|    759|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    759|    {
  ------------------
 3911|    759|    res = list_ass_subscript_lock_held(self, item, value);
 3912|    759|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    759|    }
  ------------------
 3913|    759|    return res;
 3914|    759|}
listobject.c:list_ass_subscript_lock_held:
 3734|    759|{
 3735|    759|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(_self);
 3736|       |
 3737|    759|    PyListObject *self = (PyListObject *)_self;
 3738|    759|    if (_PyIndex_Check(item)) {
  ------------------
  |  Branch (3738:9): [True: 682, False: 77]
  ------------------
 3739|    682|        Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
 3740|    682|        if (i == -1 && PyErr_Occurred())
  ------------------
  |  Branch (3740:13): [True: 671, False: 11]
  |  Branch (3740:24): [True: 0, False: 671]
  ------------------
 3741|      0|            return -1;
 3742|    682|        if (i < 0)
  ------------------
  |  Branch (3742:13): [True: 671, False: 11]
  ------------------
 3743|    671|            i += PyList_GET_SIZE(self);
  ------------------
  |  |   38|    671|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    671|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    671|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3744|    682|        return list_ass_item_lock_held(self, i, value);
 3745|    682|    }
 3746|     77|    else if (PySlice_Check(item)) {
  ------------------
  |  |   22|     77|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|     77|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     77|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     77|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 77, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3747|     77|        Py_ssize_t start, stop, step;
 3748|       |
 3749|     77|        if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (3749:13): [True: 0, False: 77]
  ------------------
 3750|      0|            return -1;
 3751|      0|        }
 3752|       |
 3753|     77|        if (value == NULL) {
  ------------------
  |  Branch (3753:13): [True: 1, False: 76]
  ------------------
 3754|       |            /* delete slice */
 3755|      1|            PyObject **garbage;
 3756|      1|            size_t cur;
 3757|      1|            Py_ssize_t i;
 3758|      1|            int res;
 3759|       |
 3760|      1|            Py_ssize_t slicelength = adjust_slice_indexes(self, &start, &stop,
 3761|      1|                                                          step);
 3762|       |
 3763|      1|            if (step == 1)
  ------------------
  |  Branch (3763:17): [True: 1, False: 0]
  ------------------
 3764|      1|                return list_ass_slice_lock_held(self, start, stop, value);
 3765|       |
 3766|      0|            if (slicelength <= 0)
  ------------------
  |  Branch (3766:17): [True: 0, False: 0]
  ------------------
 3767|      0|                return 0;
 3768|       |
 3769|      0|            if (step < 0) {
  ------------------
  |  Branch (3769:17): [True: 0, False: 0]
  ------------------
 3770|      0|                stop = start + 1;
 3771|      0|                start = stop + step*(slicelength - 1) - 1;
 3772|      0|                step = -step;
 3773|      0|            }
 3774|       |
 3775|      0|            garbage = (PyObject**)
 3776|      0|                PyMem_Malloc(slicelength*sizeof(PyObject*));
 3777|      0|            if (!garbage) {
  ------------------
  |  Branch (3777:17): [True: 0, False: 0]
  ------------------
 3778|      0|                PyErr_NoMemory();
 3779|      0|                return -1;
 3780|      0|            }
 3781|       |
 3782|       |            /* drawing pictures might help understand these for
 3783|       |               loops. Basically, we memmove the parts of the
 3784|       |               list that are *not* part of the slice: step-1
 3785|       |               items for each item that is part of the slice,
 3786|       |               and then tail end of the list that was not
 3787|       |               covered by the slice */
 3788|      0|            for (cur = start, i = 0;
 3789|      0|                 cur < (size_t)stop;
  ------------------
  |  Branch (3789:18): [True: 0, False: 0]
  ------------------
 3790|      0|                 cur += step, i++) {
 3791|      0|                Py_ssize_t lim = step - 1;
 3792|       |
 3793|      0|                garbage[i] = PyList_GET_ITEM(self, cur);
  ------------------
  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3793:30): [True: 0, False: 0]
  ------------------
 3794|       |
 3795|      0|                if (cur + step >= (size_t)Py_SIZE(self)) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3795:21): [True: 0, False: 0]
  ------------------
 3796|      0|                    lim = Py_SIZE(self) - cur - 1;
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3797|      0|                }
 3798|       |
 3799|      0|                ptr_wise_atomic_memmove(self, self->ob_item + cur - i,
 3800|      0|                    self->ob_item + cur + 1, lim);
 3801|      0|            }
 3802|      0|            cur = start + (size_t)slicelength * step;
 3803|      0|            if (cur < (size_t)Py_SIZE(self)) {
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3803:17): [True: 0, False: 0]
  ------------------
 3804|      0|                ptr_wise_atomic_memmove(self, self->ob_item + cur - slicelength,
 3805|      0|                    self->ob_item + cur, Py_SIZE(self) - cur);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3806|      0|            }
 3807|       |
 3808|      0|            Py_SET_SIZE(self, Py_SIZE(self) - slicelength);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3809|      0|            res = list_resize(self, Py_SIZE(self));
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3810|       |
 3811|      0|            for (i = 0; i < slicelength; i++) {
  ------------------
  |  Branch (3811:25): [True: 0, False: 0]
  ------------------
 3812|      0|                Py_DECREF(garbage[i]);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3813|      0|            }
 3814|      0|            PyMem_Free(garbage);
 3815|       |
 3816|      0|            return res;
 3817|      0|        }
 3818|     76|        else {
 3819|       |            /* assign slice */
 3820|     76|            PyObject *ins, *seq;
 3821|     76|            PyObject **garbage, **seqitems, **selfitems;
 3822|     76|            Py_ssize_t i;
 3823|     76|            size_t cur;
 3824|       |
 3825|       |            /* protect against a[::-1] = a */
 3826|     76|            if (self == (PyListObject*)value) {
  ------------------
  |  Branch (3826:17): [True: 0, False: 76]
  ------------------
 3827|      0|                seq = list_slice_lock_held((PyListObject *)value, 0,
 3828|      0|                                            Py_SIZE(value));
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3829|      0|            }
 3830|     76|            else {
 3831|     76|                seq = PySequence_Fast(value,
 3832|     76|                                      "must assign iterable "
 3833|     76|                                      "to extended slice");
 3834|     76|            }
 3835|     76|            if (!seq)
  ------------------
  |  Branch (3835:17): [True: 0, False: 76]
  ------------------
 3836|      0|                return -1;
 3837|       |
 3838|     76|            Py_ssize_t slicelength = adjust_slice_indexes(self, &start, &stop,
 3839|     76|                                                          step);
 3840|       |
 3841|     76|            if (step == 1) {
  ------------------
  |  Branch (3841:17): [True: 76, False: 0]
  ------------------
 3842|     76|                int res = list_ass_slice_lock_held(self, start, stop, seq);
 3843|     76|                Py_DECREF(seq);
  ------------------
  |  |  430|     76|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3844|     76|                return res;
 3845|     76|            }
 3846|       |
 3847|      0|            if (PySequence_Fast_GET_SIZE(seq) != slicelength) {
  ------------------
  |  |   92|      0|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3847:17): [True: 0, False: 0]
  ------------------
 3848|      0|                PyErr_Format(PyExc_ValueError,
 3849|      0|                    "attempt to assign sequence of "
 3850|      0|                    "size %zd to extended slice of "
 3851|      0|                    "size %zd",
 3852|      0|                         PySequence_Fast_GET_SIZE(seq),
  ------------------
  |  |   92|      0|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3853|      0|                         slicelength);
 3854|      0|                Py_DECREF(seq);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3855|      0|                return -1;
 3856|      0|            }
 3857|       |
 3858|      0|            if (!slicelength) {
  ------------------
  |  Branch (3858:17): [True: 0, False: 0]
  ------------------
 3859|      0|                Py_DECREF(seq);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3860|      0|                return 0;
 3861|      0|            }
 3862|       |
 3863|      0|            garbage = (PyObject**)
 3864|      0|                PyMem_Malloc(slicelength*sizeof(PyObject*));
 3865|      0|            if (!garbage) {
  ------------------
  |  Branch (3865:17): [True: 0, False: 0]
  ------------------
 3866|      0|                Py_DECREF(seq);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3867|      0|                PyErr_NoMemory();
 3868|      0|                return -1;
 3869|      0|            }
 3870|       |
 3871|      0|            selfitems = self->ob_item;
 3872|      0|            seqitems = PySequence_Fast_ITEMS(seq);
  ------------------
  |  |  102|      0|    (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  103|      0|                      : ((PyTupleObject *)(sf))->ob_item)
  ------------------
 3873|      0|            for (cur = start, i = 0; i < slicelength;
  ------------------
  |  Branch (3873:38): [True: 0, False: 0]
  ------------------
 3874|      0|                 cur += (size_t)step, i++) {
 3875|      0|                garbage[i] = selfitems[cur];
 3876|      0|                ins = Py_NewRef(seqitems[i]);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3877|      0|                FT_ATOMIC_STORE_PTR_RELEASE(selfitems[cur], ins);
  ------------------
  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 3878|      0|            }
 3879|       |
 3880|      0|            for (i = 0; i < slicelength; i++) {
  ------------------
  |  Branch (3880:25): [True: 0, False: 0]
  ------------------
 3881|      0|                Py_DECREF(garbage[i]);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3882|      0|            }
 3883|       |
 3884|      0|            PyMem_Free(garbage);
 3885|      0|            Py_DECREF(seq);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3886|       |
 3887|      0|            return 0;
 3888|      0|        }
 3889|     77|    }
 3890|      0|    else {
 3891|      0|        PyErr_Format(PyExc_TypeError,
 3892|      0|                     "list indices must be integers or slices, not %.200s",
 3893|      0|                     Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3894|      0|        return -1;
 3895|      0|    }
 3896|    759|}
listobject.c:adjust_slice_indexes:
 3719|     77|{
 3720|     77|    Py_ssize_t slicelength = PySlice_AdjustIndices(Py_SIZE(lst), start, stop,
  ------------------
  |  |  214|     77|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     77|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     77|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3721|     77|                                                   step);
 3722|       |
 3723|       |    /* Make sure s[5:2] = [..] inserts at the right place:
 3724|       |        before 5, not before 2. */
 3725|     77|    if ((step < 0 && *start < *stop) ||
  ------------------
  |  Branch (3725:10): [True: 0, False: 77]
  |  Branch (3725:22): [True: 0, False: 0]
  ------------------
 3726|     77|        (step > 0 && *start > *stop))
  ------------------
  |  Branch (3726:10): [True: 77, False: 0]
  |  Branch (3726:22): [True: 0, False: 77]
  ------------------
 3727|      0|        *stop = *start;
 3728|       |
 3729|     77|    return slicelength;
 3730|     77|}
listobject.c:list_traverse:
 3428|  12.6k|{
 3429|  12.6k|    PyListObject *o = (PyListObject *)self;
 3430|  12.6k|    Py_ssize_t i;
 3431|       |
 3432|   886k|    for (i = Py_SIZE(o); --i >= 0; )
  ------------------
  |  |  214|  12.6k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3432:26): [True: 873k, False: 12.6k]
  ------------------
 3433|   873k|        Py_VISIT(o->ob_item[i]);
  ------------------
  |  |  194|   873k|    do {                                                                \
  |  |  195|   873k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 873k, False: 0]
  |  |  ------------------
  |  |  196|   873k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|   873k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   873k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|   873k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 873k]
  |  |  ------------------
  |  |  198|   873k|                return vret;                                            \
  |  |  199|   873k|        }                                                               \
  |  |  200|   873k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 873k]
  |  |  ------------------
  ------------------
 3434|  12.6k|    return 0;
 3435|  12.6k|}
listobject.c:list_clear_slot:
  910|     22|{
  911|       |    list_clear_impl((PyListObject *)self, false);
  912|     22|    return 0;
  913|     22|}
listobject.c:list_richcompare:
 3505|    490|{
 3506|    490|    PyObject *ret;
 3507|    490|    Py_BEGIN_CRITICAL_SECTION2(v, w);
  ------------------
  |  |   57|    490|    {
  ------------------
 3508|    490|    ret = list_richcompare_impl(v, w, op);
 3509|    490|    Py_END_CRITICAL_SECTION2()
  ------------------
  |  |   61|    490|    }
  ------------------
 3510|    490|    return ret;
 3511|    490|}
listobject.c:list_richcompare_impl:
 3439|    490|{
 3440|    490|    PyListObject *vl, *wl;
 3441|    490|    Py_ssize_t i;
 3442|       |
 3443|    490|    if (!PyList_Check(v) || !PyList_Check(w))
  ------------------
  |  |   25|    490|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    980|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyList_Check(v) || !PyList_Check(w))
  ------------------
  |  |   25|    490|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    490|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3443:9): [True: 0, False: 490]
  |  Branch (3443:29): [True: 99, False: 391]
  ------------------
 3444|     99|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|     99|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|     99|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 3445|       |
 3446|    391|    vl = (PyListObject *)v;
 3447|    391|    wl = (PyListObject *)w;
 3448|       |
 3449|    391|    if (Py_SIZE(vl) != Py_SIZE(wl) && (op == Py_EQ || op == Py_NE)) {
  ------------------
  |  |  214|    391|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    391|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    391|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_SIZE(vl) != Py_SIZE(wl) && (op == Py_EQ || op == Py_NE)) {
  ------------------
  |  |  214|    782|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    391|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    391|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_SIZE(vl) != Py_SIZE(wl) && (op == Py_EQ || op == Py_NE)) {
  ------------------
  |  |  654|     88|#define Py_EQ 2
  ------------------
                  if (Py_SIZE(vl) != Py_SIZE(wl) && (op == Py_EQ || op == Py_NE)) {
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (3449:9): [True: 44, False: 347]
  |  Branch (3449:40): [True: 44, False: 0]
  |  Branch (3449:55): [True: 0, False: 0]
  ------------------
 3450|       |        /* Shortcut: if the lengths differ, the lists differ */
 3451|     44|        if (op == Py_EQ)
  ------------------
  |  |  654|     44|#define Py_EQ 2
  ------------------
  |  Branch (3451:13): [True: 44, False: 0]
  ------------------
 3452|     44|            Py_RETURN_FALSE;
  ------------------
  |  |   45|     44|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|     44|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     44|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3453|      0|        else
 3454|      0|            Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3455|     44|    }
 3456|       |
 3457|       |    /* Search for the first index where items are different.
 3458|       |     * We incref vitem/witem before calling PyObject_RichCompareBool, which may
 3459|       |     * release the GIL and allow the list to be mutated in the meantime.
 3460|       |     */
 3461|    353|    for (i = 0; i < Py_SIZE(vl) && i < Py_SIZE(wl); i++) {
  ------------------
  |  |  214|    706|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    353|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    353|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  for (i = 0; i < Py_SIZE(vl) && i < Py_SIZE(wl); i++) {
  ------------------
  |  |  214|     14|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3461:17): [True: 14, False: 339]
  |  Branch (3461:36): [True: 14, False: 0]
  ------------------
 3462|     14|        PyObject *vitem = vl->ob_item[i];
 3463|     14|        PyObject *witem = wl->ob_item[i];
 3464|     14|        if (vitem == witem) {
  ------------------
  |  Branch (3464:13): [True: 0, False: 14]
  ------------------
 3465|      0|            continue;
 3466|      0|        }
 3467|       |
 3468|     14|        Py_INCREF(vitem);
  ------------------
  |  |  310|     14|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3469|     14|        Py_INCREF(witem);
  ------------------
  |  |  310|     14|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3470|     14|        int k = PyObject_RichCompareBool(vitem, witem, Py_EQ);
  ------------------
  |  |  654|     14|#define Py_EQ 2
  ------------------
 3471|     14|        if (k < 0) {
  ------------------
  |  Branch (3471:13): [True: 0, False: 14]
  ------------------
 3472|      0|            Py_DECREF(vitem);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3473|      0|            Py_DECREF(witem);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3474|      0|            return NULL;
 3475|      0|        }
 3476|     14|        if (!k) {
  ------------------
  |  Branch (3476:13): [True: 8, False: 6]
  ------------------
 3477|       |            /* We have a differing item -- shortcuts for EQ/NE */
 3478|      8|            if (op == Py_EQ) {
  ------------------
  |  |  654|      8|#define Py_EQ 2
  ------------------
  |  Branch (3478:17): [True: 7, False: 1]
  ------------------
 3479|      7|                Py_DECREF(vitem);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3480|      7|                Py_DECREF(witem);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3481|      7|                Py_RETURN_FALSE;
  ------------------
  |  |   45|      7|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      7|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3482|      7|            }
 3483|      1|            if (op == Py_NE) {
  ------------------
  |  |  655|      1|#define Py_NE 3
  ------------------
  |  Branch (3483:17): [True: 1, False: 0]
  ------------------
 3484|      1|                Py_DECREF(vitem);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3485|      1|                Py_DECREF(witem);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3486|      1|                Py_RETURN_TRUE;
  ------------------
  |  |   44|      1|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      1|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3487|      1|            }
 3488|       |            /* Compare the differing items using the proper operator */
 3489|      0|            PyObject *result = PyObject_RichCompare(vitem, witem, op);
 3490|      0|            Py_DECREF(vitem);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3491|      0|            Py_DECREF(witem);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3492|      0|            return result;
 3493|      1|        }
 3494|       |
 3495|      6|        Py_DECREF(vitem);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3496|      6|        Py_DECREF(witem);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3497|      6|    }
 3498|       |
 3499|       |    /* All compared elements were equal -- compare sizes */
 3500|    339|    Py_RETURN_RICHCOMPARE(Py_SIZE(vl), Py_SIZE(wl), op);
  ------------------
  |  |  674|    339|    do {                                                                    \
  |  |  675|    339|        switch (op) {                                                       \
  |  |  676|    336|        case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  654|    336|#define Py_EQ 2
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|    336|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    336|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (676:9): [True: 336, False: 3]
  |  |  |  Branch (676:25): [True: 336, False: 0]
  |  |  ------------------
  |  |  677|    336|        case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  655|      3|#define Py_NE 3
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      3|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      3|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (677:9): [True: 3, False: 336]
  |  |  |  Branch (677:25): [True: 0, False: 3]
  |  |  ------------------
  |  |  678|      3|        case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  652|      0|#define Py_LT 0
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (678:9): [True: 0, False: 339]
  |  |  |  Branch (678:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  679|      0|        case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  656|      0|#define Py_GT 4
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (679:9): [True: 0, False: 339]
  |  |  |  Branch (679:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  680|      0|        case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  653|      0|#define Py_LE 1
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (680:9): [True: 0, False: 339]
  |  |  |  Branch (680:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  681|      0|        case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  657|      0|#define Py_GE 5
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (681:9): [True: 0, False: 339]
  |  |  |  Branch (681:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  682|      0|        default:                                                            \
  |  |  ------------------
  |  |  |  Branch (682:9): [True: 0, False: 339]
  |  |  ------------------
  |  |  683|      0|            Py_UNREACHABLE();                                               \
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |  684|    339|        }                                                                   \
  |  |  685|    339|    } while (0)
  |  |  ------------------
  |  |  |  Branch (685:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3501|    339|}
listobject.c:list___reversed___impl:
 4193|    274|{
 4194|    274|    listreviterobject *it;
 4195|       |
 4196|    274|    it = PyObject_GC_New(listreviterobject, &PyListRevIter_Type);
  ------------------
  |  |  181|    274|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 4197|    274|    if (it == NULL)
  ------------------
  |  Branch (4197:9): [True: 0, False: 274]
  ------------------
 4198|      0|        return NULL;
 4199|    274|    assert(PyList_Check(self));
  ------------------
  |  Branch (4199:5): [True: 274, False: 0]
  ------------------
 4200|    274|    it->it_index = PyList_GET_SIZE(self) - 1;
  ------------------
  |  |   38|    274|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4201|    274|    it->it_seq = (PyListObject*)Py_NewRef(self);
  ------------------
  |  |  550|    274|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4202|    274|    PyObject_GC_Track(it);
 4203|    274|    return (PyObject *)it;
 4204|    274|}
listobject.c:py_list_clear_impl:
 1202|    249|{
 1203|    249|    list_clear(self);
 1204|    249|    Py_RETURN_NONE;
  ------------------
  |  |  628|    249|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    249|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1205|    249|}
listobject.c:list_append_impl:
 1234|  1.03k|{
 1235|  1.03k|    if (_PyList_AppendTakeRef(self, Py_NewRef(object)) < 0) {
  ------------------
  |  |  550|  1.03k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1235:9): [True: 0, False: 1.03k]
  ------------------
 1236|      0|        return NULL;
 1237|      0|    }
 1238|  1.03k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  1.03k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  1.03k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1239|  1.03k|}
listobject.c:list_pop_impl:
 1588|    438|{
 1589|    438|    PyObject *v;
 1590|       |
 1591|    438|    if (Py_SIZE(self) == 0) {
  ------------------
  |  |  214|    438|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    438|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    438|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1591:9): [True: 0, False: 438]
  ------------------
 1592|       |        /* Special-case most common failure cause */
 1593|      0|        PyErr_SetString(PyExc_IndexError, "pop from empty list");
 1594|      0|        return NULL;
 1595|      0|    }
 1596|    438|    if (index < 0)
  ------------------
  |  Branch (1596:9): [True: 438, False: 0]
  ------------------
 1597|    438|        index += Py_SIZE(self);
  ------------------
  |  |  214|    438|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    438|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    438|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1598|    438|    if (!valid_index(index, Py_SIZE(self))) {
  ------------------
  |  |  214|    438|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    438|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    438|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1598:9): [True: 0, False: 438]
  ------------------
 1599|      0|        PyErr_SetString(PyExc_IndexError, "pop index out of range");
 1600|      0|        return NULL;
 1601|      0|    }
 1602|       |
 1603|    438|    PyObject **items = self->ob_item;
 1604|    438|    v = items[index];
 1605|    438|    if (Py_SIZE(self) == 1) {
  ------------------
  |  |  214|    438|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    438|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    438|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1605:9): [True: 403, False: 35]
  ------------------
 1606|    403|        Py_INCREF(v);
  ------------------
  |  |  310|    403|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    403|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    403|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1607|    403|        list_clear(self);
 1608|    403|        return v;
 1609|    403|    }
 1610|     35|    Py_ssize_t size_after_pop = Py_SIZE(self) - 1;
  ------------------
  |  |  214|     35|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1611|     35|    if (index < size_after_pop) {
  ------------------
  |  Branch (1611:9): [True: 0, False: 35]
  ------------------
 1612|      0|        ptr_wise_atomic_memmove(self, &items[index], &items[index+1],
 1613|      0|                                size_after_pop - index);
 1614|      0|    }
 1615|     35|    list_resize(self, size_after_pop);  // NB: shrinking a list can't fail
 1616|     35|    return v;
 1617|    438|}
listobject.c:list_remove_impl:
 3406|    367|{
 3407|    367|    Py_ssize_t i;
 3408|       |
 3409|    367|    for (i = 0; i < Py_SIZE(self); i++) {
  ------------------
  |  |  214|    367|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3409:17): [True: 367, False: 0]
  ------------------
 3410|    367|        PyObject *obj = self->ob_item[i];
 3411|    367|        Py_INCREF(obj);
  ------------------
  |  |  310|    367|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3412|    367|        int cmp = PyObject_RichCompareBool(obj, value, Py_EQ);
  ------------------
  |  |  654|    367|#define Py_EQ 2
  ------------------
 3413|    367|        Py_DECREF(obj);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3414|    367|        if (cmp > 0) {
  ------------------
  |  Branch (3414:13): [True: 367, False: 0]
  ------------------
 3415|    367|            if (list_ass_slice_lock_held(self, i, i+1, NULL) == 0)
  ------------------
  |  Branch (3415:17): [True: 367, False: 0]
  ------------------
 3416|    367|                Py_RETURN_NONE;
  ------------------
  |  |  628|    367|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    367|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 3417|      0|            return NULL;
 3418|    367|        }
 3419|      0|        else if (cmp < 0)
  ------------------
  |  Branch (3419:18): [True: 0, False: 0]
  ------------------
 3420|      0|            return NULL;
 3421|    367|    }
 3422|      0|    PyErr_SetString(PyExc_ValueError, "list.remove(x): x not in list");
 3423|       |    return NULL;
 3424|    367|}
listobject.c:list_reverse_impl:
 3236|     23|{
 3237|     23|    if (Py_SIZE(self) > 1)
  ------------------
  |  |  214|     23|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     23|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3237:9): [True: 23, False: 0]
  ------------------
 3238|     23|        reverse_slice(self->ob_item, self->ob_item + Py_SIZE(self));
  ------------------
  |  |  214|     23|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     23|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3239|     23|    Py_RETURN_NONE;
  ------------------
  |  |  628|     23|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     23|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 3240|     23|}
listobject.c:list___init___impl:
 3528|    729|{
 3529|       |    /* Verify list invariants established by PyType_GenericAlloc() */
 3530|    729|    assert(0 <= Py_SIZE(self));
  ------------------
  |  Branch (3530:5): [True: 729, False: 0]
  ------------------
 3531|    729|    assert(Py_SIZE(self) <= self->allocated || self->allocated == -1);
  ------------------
  |  Branch (3531:5): [True: 729, False: 0]
  |  Branch (3531:5): [True: 0, False: 0]
  ------------------
 3532|    729|    assert(self->ob_item != NULL ||
  ------------------
  |  Branch (3532:5): [True: 0, False: 729]
  |  Branch (3532:5): [True: 729, False: 0]
  |  Branch (3532:5): [True: 0, False: 0]
  ------------------
 3533|    729|           self->allocated == 0 || self->allocated == -1);
 3534|       |
 3535|       |    /* Empty previous contents */
 3536|    729|    if (self->ob_item != NULL) {
  ------------------
  |  Branch (3536:9): [True: 0, False: 729]
  ------------------
 3537|      0|        Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|      0|    {
  ------------------
 3538|      0|        list_clear(self);
 3539|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 3540|      0|    }
 3541|    729|    if (iterable != NULL) {
  ------------------
  |  Branch (3541:9): [True: 362, False: 367]
  ------------------
 3542|    362|        if (_list_extend(self, iterable) < 0) {
  ------------------
  |  Branch (3542:13): [True: 0, False: 362]
  ------------------
 3543|      0|            return -1;
 3544|      0|        }
 3545|    362|    }
 3546|    729|    return 0;
 3547|    729|}
listobject.c:list_vectorcall:
 3552|    362|{
 3553|    362|    if (!_PyArg_NoKwnames("list", kwnames)) {
  ------------------
  |  |   15|    362|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 362, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3554|      0|        return NULL;
 3555|      0|    }
 3556|    362|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    362|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 3557|    362|    if (!_PyArg_CheckPositional("list", nargs, 0, 1)) {
  ------------------
  |  |   31|    362|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 362, False: 0]
  |  |  |  Branch (31:27): [True: 362, False: 0]
  |  |  ------------------
  |  |   32|    362|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3558|      0|        return NULL;
 3559|      0|    }
 3560|       |
 3561|    362|    PyObject *list = PyType_GenericAlloc(_PyType_CAST(type), 0);
  ------------------
  |  |  770|    362|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    362|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (3561:42): [True: 362, False: 0]
  ------------------
 3562|    362|    if (list == NULL) {
  ------------------
  |  Branch (3562:9): [True: 0, False: 362]
  ------------------
 3563|      0|        return NULL;
 3564|      0|    }
 3565|    362|    if (nargs) {
  ------------------
  |  Branch (3565:9): [True: 362, False: 0]
  ------------------
 3566|    362|        if (list___init___impl((PyListObject *)list, args[0])) {
  ------------------
  |  Branch (3566:13): [True: 0, False: 362]
  ------------------
 3567|      0|            Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3568|      0|            return NULL;
 3569|      0|        }
 3570|    362|    }
 3571|    362|    return list;
 3572|    362|}
listobject.c:list_iteritem:
 3918|    120|{
 3919|    120|    PyObject *result = list_get_item_ref((PyListObject *)obj, index);
 3920|    120|    return (_PyObjectIndexPair) { .object = result, .index = index + 1 };
 3921|    120|}
listobject.c:list_iter:
 4033|  36.9k|{
 4034|  36.9k|    if (!PyList_Check(seq)) {
  ------------------
  |  |   25|  36.9k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  36.9k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4034:9): [True: 0, False: 36.9k]
  ------------------
 4035|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 4036|      0|        return NULL;
 4037|      0|    }
 4038|  36.9k|    _PyListIterObject *it = _Py_FREELIST_POP(_PyListIterObject, list_iters);
  ------------------
  |  |   43|  36.9k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  36.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 4039|  36.9k|    if (it == NULL) {
  ------------------
  |  Branch (4039:9): [True: 23, False: 36.8k]
  ------------------
 4040|     23|        it = PyObject_GC_New(_PyListIterObject, &PyListIter_Type);
  ------------------
  |  |  181|     23|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 4041|     23|        if (it == NULL) {
  ------------------
  |  Branch (4041:13): [True: 0, False: 23]
  ------------------
 4042|      0|            return NULL;
 4043|      0|        }
 4044|     23|    }
 4045|  36.9k|    it->it_index = 0;
 4046|  36.9k|    it->it_seq = (PyListObject *)Py_NewRef(seq);
  ------------------
  |  |  550|  36.9k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  36.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4047|  36.9k|    _PyObject_GC_TRACK(it);
  ------------------
  |  |  505|  36.9k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  36.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4048|  36.9k|    return (PyObject *)it;
 4049|  36.9k|}
listobject.c:listiter_dealloc:
 4053|  36.9k|{
 4054|  36.9k|    _PyListIterObject *it = (_PyListIterObject *)self;
 4055|  36.9k|    _PyObject_GC_UNTRACK(it);
  ------------------
  |  |  507|  36.9k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  36.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4056|  36.9k|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|  36.9k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  36.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4057|  36.9k|    assert(Py_IS_TYPE(self, &PyListIter_Type));
  ------------------
  |  Branch (4057:5): [True: 36.9k, False: 0]
  ------------------
 4058|  36.9k|    _Py_FREELIST_FREE(list_iters, it, PyObject_GC_Del);
  ------------------
  |  |   35|  36.9k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  36.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  36.9k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   14|  36.9k|#  define Py_list_iters_MAXFREELIST 10
  |  |  ------------------
  ------------------
 4059|  36.9k|}
listobject.c:listiter_traverse:
 4063|      2|{
 4064|      2|    Py_VISIT(((_PyListIterObject *)it)->it_seq);
  ------------------
  |  |  194|      2|    do {                                                                \
  |  |  195|      2|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4065|      2|    return 0;
 4066|      2|}
listobject.c:listiter_next:
 4070|   645k|{
 4071|   645k|    _PyListIterObject *it = (_PyListIterObject *)self;
 4072|   645k|    Py_ssize_t index = FT_ATOMIC_LOAD_SSIZE_RELAXED(it->it_index);
  ------------------
  |  |  149|   645k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 4073|   645k|    if (index < 0) {
  ------------------
  |  Branch (4073:9): [True: 0, False: 645k]
  ------------------
 4074|      0|        return NULL;
 4075|      0|    }
 4076|       |
 4077|   645k|    PyObject *item = list_get_item_ref(it->it_seq, index);
 4078|   645k|    if (item == NULL) {
  ------------------
  |  Branch (4078:9): [True: 35.3k, False: 610k]
  ------------------
 4079|       |        // out-of-bounds
 4080|  35.3k|        FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, -1);
  ------------------
  |  |  194|  35.3k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
 4081|  35.3k|#ifndef Py_GIL_DISABLED
 4082|  35.3k|        PyListObject *seq = it->it_seq;
 4083|  35.3k|        it->it_seq = NULL;
 4084|  35.3k|        Py_DECREF(seq);
  ------------------
  |  |  430|  35.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4085|  35.3k|#endif
 4086|  35.3k|        return NULL;
 4087|  35.3k|    }
 4088|   610k|    FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, index + 1);
  ------------------
  |  |  194|   610k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
 4089|   610k|    return item;
 4090|   645k|}
listobject.c:listreviter_dealloc:
 4208|    274|{
 4209|    274|    listreviterobject *it = (listreviterobject *)self;
 4210|    274|    PyObject_GC_UnTrack(it);
 4211|    274|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|    274|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    274|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    274|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4212|    274|    PyObject_GC_Del(it);
 4213|    274|}
listobject.c:listreviter_next:
 4224|    583|{
 4225|    583|    listreviterobject *it = (listreviterobject *)self;
 4226|    583|    assert(it != NULL);
  ------------------
  |  Branch (4226:5): [True: 583, False: 0]
  ------------------
 4227|    583|    Py_ssize_t index = FT_ATOMIC_LOAD_SSIZE_RELAXED(it->it_index);
  ------------------
  |  |  149|    583|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 4228|    583|    if (index < 0) {
  ------------------
  |  Branch (4228:9): [True: 272, False: 311]
  ------------------
 4229|    272|        return NULL;
 4230|    272|    }
 4231|       |
 4232|    311|    PyListObject *seq = it->it_seq;
 4233|    311|    assert(PyList_Check(seq));
  ------------------
  |  Branch (4233:5): [True: 311, False: 0]
  ------------------
 4234|    311|    PyObject *item = list_get_item_ref(seq, index);
 4235|    311|    if (item != NULL) {
  ------------------
  |  Branch (4235:9): [True: 311, False: 0]
  ------------------
 4236|    311|        FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, index - 1);
  ------------------
  |  |  194|    311|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
 4237|    311|        return item;
 4238|    311|    }
 4239|      0|    FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, -1);
  ------------------
  |  |  194|      0|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
 4240|      0|#ifndef Py_GIL_DISABLED
 4241|      0|    it->it_seq = NULL;
 4242|      0|    Py_DECREF(seq);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4243|      0|#endif
 4244|       |    return NULL;
 4245|    311|}

_PyLong_Copy:
  223|  39.5k|{
  224|  39.5k|    assert(src != NULL);
  ------------------
  |  Branch (224:5): [True: 39.5k, False: 0]
  ------------------
  225|  39.5k|    int sign;
  226|       |
  227|  39.5k|    if (_PyLong_IsCompact(src)) {
  ------------------
  |  Branch (227:9): [True: 3.40k, False: 36.1k]
  ------------------
  228|  3.40k|        stwodigits ival = medium_value(src);
  ------------------
  |  |   27|  3.40k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
  229|  3.40k|        if (IS_SMALL_INT(ival)) {
  ------------------
  |  |   29|  3.40k|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  ------------------
  |  |  |  |   68|  3.40k|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   98|  3.40k|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  ------------------
  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  3.40k|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (68:6): [True: 3.40k, False: 0]
  |  |  |  |  |  Branch (68:37): [True: 3.40k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|  3.40k|            return get_small_int((sdigit)ival);
  231|  3.40k|        }
  232|      0|        sign = _PyLong_CompactSign(src);
  233|      0|    }
  234|  36.1k|    else {
  235|  36.1k|        sign = _PyLong_NonCompactSign(src);
  236|  36.1k|    }
  237|       |
  238|  36.1k|    Py_ssize_t size = _PyLong_DigitCount(src);
  239|  36.1k|    PyLongObject *result = long_alloc(size);
  240|       |
  241|  36.1k|    if (result == NULL) {
  ------------------
  |  Branch (241:9): [True: 0, False: 36.1k]
  ------------------
  242|      0|        return NULL;
  243|      0|    }
  244|  36.1k|    _PyLong_SetSignAndDigitCount(result, sign, size);
  245|  36.1k|    memcpy(result->long_value.ob_digit, src->long_value.ob_digit,
  246|  36.1k|           size * sizeof(digit));
  247|  36.1k|    return (PyObject *)result;
  248|  36.1k|}
PyLong_FromLong:
  408|  21.4M|{
  409|       |    PYLONG_FROM_INT(unsigned long, long, ival);
  ------------------
  |  |  371|  21.4M|    do {                                                                            \
  |  |  372|  21.4M|        /* Handle small and medium cases. */                                        \
  |  |  373|  21.4M|        if (IS_SMALL_INT(ival)) {                                                   \
  |  |  ------------------
  |  |  |  |   29|  21.4M|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  21.4M|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   98|  21.4M|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   97|  21.4M|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (68:6): [True: 21.4M, False: 2.11k]
  |  |  |  |  |  |  |  Branch (68:37): [True: 10.4M, False: 11.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  374|  10.4M|            return get_small_int((sdigit)(ival));                                   \
  |  |  375|  10.4M|        }                                                                           \
  |  |  376|  21.4M|        if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|  11.0M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  11.0M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  11.0M|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|  11.0M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  11.0M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  11.0M|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (376:13): [True: 11.0M, False: 33]
  |  |  |  Branch (376:49): [True: 10.9M, False: 64.8k]
  |  |  ------------------
  |  |  377|  10.9M|            return _PyLong_FromMedium((sdigit)(ival));                              \
  |  |  378|  10.9M|        }                                                                           \
  |  |  379|  11.0M|        UINT_TYPE abs_ival = (ival) < 0 ? 0U-(UINT_TYPE)(ival) : (UINT_TYPE)(ival); \
  |  |  ------------------
  |  |  |  Branch (379:30): [True: 33, False: 64.8k]
  |  |  ------------------
  |  |  380|  64.8k|        /* Do shift in two steps to avoid possible undefined behavior. */           \
  |  |  381|  64.8k|        UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|  64.8k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|  64.8k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  382|  64.8k|        /* Count digits (at least two - smaller cases were handled above). */       \
  |  |  383|  64.8k|        Py_ssize_t ndigits = 2;                                                     \
  |  |  384|  67.5k|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (384:16): [True: 2.71k, False: 64.8k]
  |  |  ------------------
  |  |  385|  2.71k|            ++ndigits;                                                              \
  |  |  386|  2.71k|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|  2.71k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  387|  2.71k|        }                                                                           \
  |  |  388|  64.8k|        /* Construct output value. */                                               \
  |  |  389|  64.8k|        PyLongObject *v = long_alloc(ndigits);                                      \
  |  |  390|  64.8k|        if (v == NULL) {                                                            \
  |  |  ------------------
  |  |  |  Branch (390:13): [True: 0, False: 64.8k]
  |  |  ------------------
  |  |  391|      0|            return NULL;                                                            \
  |  |  392|      0|        }                                                                           \
  |  |  393|  64.8k|        digit *p = v->long_value.ob_digit;                                          \
  |  |  394|  64.8k|        _PyLong_SetSignAndDigitCount(v, (ival) < 0 ? -1 : 1, ndigits);              \
  |  |  ------------------
  |  |  |  Branch (394:41): [True: 33, False: 64.8k]
  |  |  ------------------
  |  |  395|  64.8k|        t = abs_ival;                                                               \
  |  |  396|   197k|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (396:16): [True: 132k, False: 64.8k]
  |  |  ------------------
  |  |  397|   132k|            *p++ = (digit)(t & PyLong_MASK);                                        \
  |  |  ------------------
  |  |  |  |   62|   132k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|   132k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|   132k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  398|   132k|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|   132k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  399|   132k|        }                                                                           \
  |  |  400|  64.8k|        return (PyObject *)v;                                                       \
  |  |  401|  64.8k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (401:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
  410|  21.4M|}
PyLong_FromUnsignedLong:
  446|   146k|{
  447|       |    PYLONG_FROM_UINT(unsigned long, ival);
  ------------------
  |  |  413|   146k|    do { \
  |  |  414|   146k|        /* Handle small and medium cases. */ \
  |  |  415|   146k|        if (IS_SMALL_UINT(ival)) { \
  |  |  ------------------
  |  |  |  |   30|   146k|#define IS_SMALL_UINT(ival) ((ival) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|   146k|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (30:29): [True: 1.07k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  416|  1.07k|            return get_small_int((sdigit)(ival)); \
  |  |  417|  1.07k|        } \
  |  |  418|   146k|        if ((ival) <= PyLong_MASK) { \
  |  |  ------------------
  |  |  |  |   62|   144k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|   144k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|   144k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (418:13): [True: 129, False: 144k]
  |  |  ------------------
  |  |  419|    129|            return _PyLong_FromMedium((sdigit)(ival)); \
  |  |  420|    129|        } \
  |  |  421|   144k|        /* Do shift in two steps to avoid possible undefined behavior. */ \
  |  |  422|   144k|        INT_TYPE t = (ival) >> PyLong_SHIFT >> PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|   144k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       INT_TYPE t = (ival) >> PyLong_SHIFT >> PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|   144k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  423|   144k|        /* Count digits (at least two - smaller cases were handled above). */ \
  |  |  424|   144k|        Py_ssize_t ndigits = 2; \
  |  |  425|   144k|        while (t) { \
  |  |  ------------------
  |  |  |  Branch (425:16): [True: 0, False: 144k]
  |  |  ------------------
  |  |  426|      0|            ++ndigits; \
  |  |  427|      0|            t >>= PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  428|      0|        } \
  |  |  429|   144k|        /* Construct output value. */ \
  |  |  430|   144k|        PyLongObject *v = long_alloc(ndigits); \
  |  |  431|   144k|        if (v == NULL) { \
  |  |  ------------------
  |  |  |  Branch (431:13): [True: 0, False: 144k]
  |  |  ------------------
  |  |  432|      0|            return NULL; \
  |  |  433|      0|        } \
  |  |  434|   144k|        digit *p = v->long_value.ob_digit; \
  |  |  435|   434k|        while ((ival)) { \
  |  |  ------------------
  |  |  |  Branch (435:16): [True: 289k, False: 144k]
  |  |  ------------------
  |  |  436|   289k|            *p++ = (digit)((ival) & PyLong_MASK); \
  |  |  ------------------
  |  |  |  |   62|   289k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|   289k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|   289k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  437|   289k|            (ival) >>= PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|   289k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  438|   289k|        } \
  |  |  439|   144k|        return (PyObject *)v; \
  |  |  440|   144k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (440:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
  448|   146k|}
PyLong_FromUnsignedLongLong:
  454|  2.31k|{
  455|       |    PYLONG_FROM_UINT(unsigned long long, ival);
  ------------------
  |  |  413|  2.31k|    do { \
  |  |  414|  2.31k|        /* Handle small and medium cases. */ \
  |  |  415|  2.31k|        if (IS_SMALL_UINT(ival)) { \
  |  |  ------------------
  |  |  |  |   30|  2.31k|#define IS_SMALL_UINT(ival) ((ival) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  2.31k|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (30:29): [True: 527, False: 1.78k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  416|    527|            return get_small_int((sdigit)(ival)); \
  |  |  417|    527|        } \
  |  |  418|  2.31k|        if ((ival) <= PyLong_MASK) { \
  |  |  ------------------
  |  |  |  |   62|  1.78k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  1.78k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  1.78k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (418:13): [True: 1.05k, False: 734]
  |  |  ------------------
  |  |  419|  1.05k|            return _PyLong_FromMedium((sdigit)(ival)); \
  |  |  420|  1.05k|        } \
  |  |  421|  1.78k|        /* Do shift in two steps to avoid possible undefined behavior. */ \
  |  |  422|  1.78k|        INT_TYPE t = (ival) >> PyLong_SHIFT >> PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|    734|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       INT_TYPE t = (ival) >> PyLong_SHIFT >> PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|    734|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  423|    734|        /* Count digits (at least two - smaller cases were handled above). */ \
  |  |  424|    734|        Py_ssize_t ndigits = 2; \
  |  |  425|    734|        while (t) { \
  |  |  ------------------
  |  |  |  Branch (425:16): [True: 0, False: 734]
  |  |  ------------------
  |  |  426|      0|            ++ndigits; \
  |  |  427|      0|            t >>= PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  428|      0|        } \
  |  |  429|    734|        /* Construct output value. */ \
  |  |  430|    734|        PyLongObject *v = long_alloc(ndigits); \
  |  |  431|    734|        if (v == NULL) { \
  |  |  ------------------
  |  |  |  Branch (431:13): [True: 0, False: 734]
  |  |  ------------------
  |  |  432|      0|            return NULL; \
  |  |  433|      0|        } \
  |  |  434|    734|        digit *p = v->long_value.ob_digit; \
  |  |  435|  2.20k|        while ((ival)) { \
  |  |  ------------------
  |  |  |  Branch (435:16): [True: 1.46k, False: 734]
  |  |  ------------------
  |  |  436|  1.46k|            *p++ = (digit)((ival) & PyLong_MASK); \
  |  |  ------------------
  |  |  |  |   62|  1.46k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  1.46k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  1.46k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  437|  1.46k|            (ival) >>= PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|  1.46k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  438|  1.46k|        } \
  |  |  439|    734|        return (PyObject *)v; \
  |  |  440|    734|    } while(0)
  |  |  ------------------
  |  |  |  Branch (440:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
  456|  2.31k|}
PyLong_FromSize_t:
  462|     84|{
  463|       |    PYLONG_FROM_UINT(size_t, ival);
  ------------------
  |  |  413|     84|    do { \
  |  |  414|     84|        /* Handle small and medium cases. */ \
  |  |  415|     84|        if (IS_SMALL_UINT(ival)) { \
  |  |  ------------------
  |  |  |  |   30|     84|#define IS_SMALL_UINT(ival) ((ival) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|     84|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (30:29): [True: 84, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  416|     84|            return get_small_int((sdigit)(ival)); \
  |  |  417|     84|        } \
  |  |  418|     84|        if ((ival) <= PyLong_MASK) { \
  |  |  ------------------
  |  |  |  |   62|      0|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (418:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  419|      0|            return _PyLong_FromMedium((sdigit)(ival)); \
  |  |  420|      0|        } \
  |  |  421|      0|        /* Do shift in two steps to avoid possible undefined behavior. */ \
  |  |  422|      0|        INT_TYPE t = (ival) >> PyLong_SHIFT >> PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       INT_TYPE t = (ival) >> PyLong_SHIFT >> PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  423|      0|        /* Count digits (at least two - smaller cases were handled above). */ \
  |  |  424|      0|        Py_ssize_t ndigits = 2; \
  |  |  425|      0|        while (t) { \
  |  |  ------------------
  |  |  |  Branch (425:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  426|      0|            ++ndigits; \
  |  |  427|      0|            t >>= PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  428|      0|        } \
  |  |  429|      0|        /* Construct output value. */ \
  |  |  430|      0|        PyLongObject *v = long_alloc(ndigits); \
  |  |  431|      0|        if (v == NULL) { \
  |  |  ------------------
  |  |  |  Branch (431:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  432|      0|            return NULL; \
  |  |  433|      0|        } \
  |  |  434|      0|        digit *p = v->long_value.ob_digit; \
  |  |  435|      0|        while ((ival)) { \
  |  |  ------------------
  |  |  |  Branch (435:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  436|      0|            *p++ = (digit)((ival) & PyLong_MASK); \
  |  |  ------------------
  |  |  |  |   62|      0|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  437|      0|            (ival) >>= PyLong_SHIFT; \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  438|      0|        } \
  |  |  439|      0|        return (PyObject *)v; \
  |  |  440|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (440:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
  464|     84|}
PyLong_FromDouble:
  470|    162|{
  471|       |    /* Try to get out cheap if this fits in a long. When a finite value of real
  472|       |     * floating type is converted to an integer type, the value is truncated
  473|       |     * toward zero. If the value of the integral part cannot be represented by
  474|       |     * the integer type, the behavior is undefined. Thus, we must check that
  475|       |     * value is in range (LONG_MIN - 1, LONG_MAX + 1). If a long has more bits
  476|       |     * of precision than a double, casting LONG_MIN - 1 to double may yield an
  477|       |     * approximation, but LONG_MAX + 1 is a power of two and can be represented
  478|       |     * as double exactly (assuming FLT_RADIX is 2 or 16), so for simplicity
  479|       |     * check against [-(LONG_MAX + 1), LONG_MAX + 1).
  480|       |     */
  481|    162|    const double int_max = (unsigned long)LONG_MAX + 1;
  482|    162|    if (-int_max < dval && dval < int_max) {
  ------------------
  |  Branch (482:9): [True: 139, False: 23]
  |  Branch (482:28): [True: 126, False: 13]
  ------------------
  483|    126|        return PyLong_FromLong((long)dval);
  484|    126|    }
  485|       |
  486|     36|    PyLongObject *v;
  487|     36|    double frac;
  488|     36|    int i, ndig, expo, neg;
  489|     36|    neg = 0;
  490|     36|    if (isinf(dval)) {
  ------------------
  |  Branch (490:9): [True: 0, False: 36]
  ------------------
  491|      0|        PyErr_SetString(PyExc_OverflowError,
  492|      0|                        "cannot convert float infinity to integer");
  493|      0|        return NULL;
  494|      0|    }
  495|     36|    if (isnan(dval)) {
  ------------------
  |  Branch (495:9): [True: 0, False: 36]
  ------------------
  496|      0|        PyErr_SetString(PyExc_ValueError,
  497|      0|                        "cannot convert float NaN to integer");
  498|      0|        return NULL;
  499|      0|    }
  500|     36|    if (dval < 0.0) {
  ------------------
  |  Branch (500:9): [True: 23, False: 13]
  ------------------
  501|     23|        neg = 1;
  502|     23|        dval = -dval;
  503|     23|    }
  504|     36|    frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
  505|     36|    assert(expo > 0);
  ------------------
  |  Branch (505:5): [True: 36, False: 0]
  ------------------
  506|     36|    ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
  ------------------
  |  |   47|     36|#define PyLong_SHIFT    30
  ------------------
  507|     36|    v = long_alloc(ndig);
  508|     36|    if (v == NULL)
  ------------------
  |  Branch (508:9): [True: 0, False: 36]
  ------------------
  509|      0|        return NULL;
  510|     36|    frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
  ------------------
  |  |   47|     36|#define PyLong_SHIFT    30
  ------------------
  511|    144|    for (i = ndig; --i >= 0; ) {
  ------------------
  |  Branch (511:20): [True: 108, False: 36]
  ------------------
  512|    108|        digit bits = (digit)frac;
  513|    108|        v->long_value.ob_digit[i] = bits;
  514|    108|        frac = frac - (double)bits;
  515|    108|        frac = ldexp(frac, PyLong_SHIFT);
  ------------------
  |  |   47|    108|#define PyLong_SHIFT    30
  ------------------
  516|    108|    }
  517|     36|    if (neg) {
  ------------------
  |  Branch (517:9): [True: 23, False: 13]
  ------------------
  518|     23|        _PyLong_FlipSign(v);
  519|     23|    }
  520|     36|    return (PyObject *)v;
  521|     36|}
PyLong_AsLongAndOverflow:
  594|  6.92M|{
  595|       |    /* This version originally by Tim Peters */
  596|  6.92M|    PyLongObject *v;
  597|  6.92M|    long res;
  598|  6.92M|    Py_ssize_t i;
  599|  6.92M|    int sign;
  600|  6.92M|    int do_decref = 0; /* if PyNumber_Index was called */
  601|       |
  602|  6.92M|    *overflow = 0;
  603|  6.92M|    if (vv == NULL) {
  ------------------
  |  Branch (603:9): [True: 0, False: 6.92M]
  ------------------
  604|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  605|      0|        return -1;
  606|      0|    }
  607|       |
  608|  6.92M|    if (PyLong_Check(vv)) {
  ------------------
  |  |   13|  6.92M|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  6.92M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 6.92M, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|  6.92M|        v = (PyLongObject *)vv;
  610|  6.92M|    }
  611|     93|    else {
  612|     93|        v = (PyLongObject *)_PyNumber_Index(vv);
  613|     93|        if (v == NULL)
  ------------------
  |  Branch (613:13): [True: 93, False: 0]
  ------------------
  614|     93|            return -1;
  615|      0|        do_decref = 1;
  616|      0|    }
  617|  6.92M|    if (_PyLong_IsCompact(v)) {
  ------------------
  |  Branch (617:9): [True: 6.46M, False: 460k]
  ------------------
  618|       |#if SIZEOF_LONG < SIZEOF_SIZE_T
  619|       |        Py_ssize_t tmp = _PyLong_CompactValue(v);
  620|       |        if (tmp < LONG_MIN) {
  621|       |            *overflow = -1;
  622|       |            res = -1;
  623|       |        }
  624|       |        else if (tmp > LONG_MAX) {
  625|       |            *overflow = 1;
  626|       |            res = -1;
  627|       |        }
  628|       |        else {
  629|       |            res = (long)tmp;
  630|       |        }
  631|       |#else
  632|  6.46M|        res = _PyLong_CompactValue(v);
  633|  6.46M|#endif
  634|  6.46M|    }
  635|   460k|    else {
  636|   460k|        res = -1;
  637|   460k|        i = _PyLong_DigitCount(v);
  638|   460k|        sign = _PyLong_NonCompactSign(v);
  639|       |
  640|   460k|        unsigned long x = unroll_digits_ulong(v, &i);
  641|   528k|        while (--i >= 0) {
  ------------------
  |  Branch (641:16): [True: 256k, False: 272k]
  ------------------
  642|   256k|            if (x > (ULONG_MAX >> PyLong_SHIFT)) {
  ------------------
  |  |   47|   256k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (642:17): [True: 188k, False: 68.2k]
  ------------------
  643|   188k|                *overflow = sign;
  644|   188k|                goto exit;
  645|   188k|            }
  646|  68.2k|            x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
  ------------------
  |  |   47|  68.2k|#define PyLong_SHIFT    30
  ------------------
  647|  68.2k|        }
  648|       |        /* Haven't lost any bits, but casting to long requires extra
  649|       |        * care (see comment above).
  650|       |        */
  651|   272k|        if (x <= (unsigned long)LONG_MAX) {
  ------------------
  |  Branch (651:13): [True: 259k, False: 12.7k]
  ------------------
  652|   259k|            res = (long)x * sign;
  653|   259k|        }
  654|  12.7k|        else if (sign < 0 && x == PY_ABS_LONG_MIN) {
  ------------------
  |  |  532|  4.69k|#define PY_ABS_LONG_MIN         (0-(unsigned long)LONG_MIN)
  ------------------
  |  Branch (654:18): [True: 4.69k, False: 8.05k]
  |  Branch (654:30): [True: 1.75k, False: 2.93k]
  ------------------
  655|  1.75k|            res = LONG_MIN;
  656|  1.75k|        }
  657|  10.9k|        else {
  658|  10.9k|            *overflow = sign;
  659|       |            /* res is already set to -1 */
  660|  10.9k|        }
  661|   272k|    }
  662|  6.92M|  exit:
  663|  6.92M|    if (do_decref) {
  ------------------
  |  Branch (663:9): [True: 0, False: 6.92M]
  ------------------
  664|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  665|      0|    }
  666|  6.92M|    return res;
  667|  6.92M|}
PyLong_AsLong:
  674|  4.33M|{
  675|  4.33M|    int overflow;
  676|  4.33M|    long result = PyLong_AsLongAndOverflow(obj, &overflow);
  677|  4.33M|    if (overflow) {
  ------------------
  |  Branch (677:9): [True: 158, False: 4.33M]
  ------------------
  678|       |        /* XXX: could be cute and give a different
  679|       |           message for overflow == -1 */
  680|    158|        PyErr_SetString(PyExc_OverflowError,
  681|    158|                        "Python int too large to convert to C long");
  682|    158|    }
  683|  4.33M|    return result;
  684|  4.33M|}
PyLong_AsInt:
  691|   357k|{
  692|   357k|    int overflow;
  693|   357k|    long result = PyLong_AsLongAndOverflow(obj, &overflow);
  694|   357k|    if (overflow || result > INT_MAX || result < INT_MIN) {
  ------------------
  |  Branch (694:9): [True: 0, False: 357k]
  |  Branch (694:21): [True: 0, False: 357k]
  |  Branch (694:41): [True: 0, False: 357k]
  ------------------
  695|       |        /* XXX: could be cute and give a different
  696|       |           message for overflow == -1 */
  697|      0|        PyErr_SetString(PyExc_OverflowError,
  698|      0|                        "Python int too large to convert to C int");
  699|      0|        return -1;
  700|      0|    }
  701|   357k|    return (int)result;
  702|   357k|}
PyLong_AsSsize_t:
  708|  10.4M|PyLong_AsSsize_t(PyObject *vv) {
  709|  10.4M|    PyLongObject *v;
  710|  10.4M|    Py_ssize_t i;
  711|  10.4M|    int sign;
  712|       |
  713|  10.4M|    if (vv == NULL) {
  ------------------
  |  Branch (713:9): [True: 0, False: 10.4M]
  ------------------
  714|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  715|      0|        return -1;
  716|      0|    }
  717|  10.4M|    if (!PyLong_Check(vv)) {
  ------------------
  |  |   13|  10.4M|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  10.4M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (717:9): [True: 0, False: 10.4M]
  ------------------
  718|      0|        PyErr_SetString(PyExc_TypeError, "an integer is required");
  719|      0|        return -1;
  720|      0|    }
  721|       |
  722|  10.4M|    v = (PyLongObject *)vv;
  723|  10.4M|    if (_PyLong_IsCompact(v)) {
  ------------------
  |  Branch (723:9): [True: 10.3M, False: 5.83k]
  ------------------
  724|  10.3M|        return _PyLong_CompactValue(v);
  725|  10.3M|    }
  726|  5.83k|    i = _PyLong_DigitCount(v);
  727|  5.83k|    sign = _PyLong_NonCompactSign(v);
  728|       |
  729|  5.83k|    size_t x = unroll_digits_size_t(v, &i);
  730|  7.63k|    while (--i >= 0) {
  ------------------
  |  Branch (730:12): [True: 3.49k, False: 4.14k]
  ------------------
  731|  3.49k|        if (x > (SIZE_MAX >> PyLong_SHIFT)) {
  ------------------
  |  |   47|  3.49k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (731:13): [True: 1.69k, False: 1.80k]
  ------------------
  732|  1.69k|            goto overflow;
  733|  1.69k|        }
  734|  1.80k|        x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
  ------------------
  |  |   47|  1.80k|#define PyLong_SHIFT    30
  ------------------
  735|  1.80k|    }
  736|       |    /* Haven't lost any bits, but casting to a signed type requires
  737|       |     * extra care (see comment above).
  738|       |     */
  739|  4.14k|    if (x <= (size_t)PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  4.14k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (739:9): [True: 2.91k, False: 1.22k]
  ------------------
  740|  2.91k|        return (Py_ssize_t)x * sign;
  741|  2.91k|    }
  742|  1.22k|    else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
  ------------------
  |  |  533|    829|#define PY_ABS_SSIZE_T_MIN      (0-(size_t)PY_SSIZE_T_MIN)
  |  |  ------------------
  |  |  |  |  146|    829|#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|    829|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (742:14): [True: 829, False: 400]
  |  Branch (742:26): [True: 119, False: 710]
  ------------------
  743|    119|        return PY_SSIZE_T_MIN;
  ------------------
  |  |  146|    119|#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
  |  |  ------------------
  |  |  |  |  137|    119|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  744|    119|    }
  745|       |    /* else overflow */
  746|       |
  747|  2.80k|  overflow:
  748|  2.80k|    PyErr_SetString(PyExc_OverflowError,
  749|  2.80k|                    "Python int too large to convert to C ssize_t");
  750|  2.80k|    return -1;
  751|  4.14k|}
PyLong_AsUnsignedLong:
  758|  17.2k|{
  759|  17.2k|    PyLongObject *v;
  760|  17.2k|    Py_ssize_t i;
  761|       |
  762|  17.2k|    if (vv == NULL) {
  ------------------
  |  Branch (762:9): [True: 0, False: 17.2k]
  ------------------
  763|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  764|      0|        return (unsigned long)-1;
  765|      0|    }
  766|  17.2k|    if (!PyLong_Check(vv)) {
  ------------------
  |  |   13|  17.2k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  17.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (766:9): [True: 0, False: 17.2k]
  ------------------
  767|      0|        PyErr_SetString(PyExc_TypeError, "an integer is required");
  768|      0|        return (unsigned long)-1;
  769|      0|    }
  770|       |
  771|  17.2k|    v = (PyLongObject *)vv;
  772|  17.2k|    if (_PyLong_IsNonNegativeCompact(v)) {
  ------------------
  |  Branch (772:9): [True: 760, False: 16.4k]
  ------------------
  773|       |#if SIZEOF_LONG < SIZEOF_SIZE_T
  774|       |        size_t tmp = (size_t)_PyLong_CompactValue(v);
  775|       |        unsigned long res = (unsigned long)tmp;
  776|       |        if (res != tmp) {
  777|       |            goto overflow;
  778|       |        }
  779|       |        return res;
  780|       |#else
  781|    760|        return (unsigned long)(size_t)_PyLong_CompactValue(v);
  782|    760|#endif
  783|    760|    }
  784|  16.4k|    if (_PyLong_IsNegative(v)) {
  ------------------
  |  Branch (784:9): [True: 0, False: 16.4k]
  ------------------
  785|      0|        PyErr_SetString(PyExc_OverflowError,
  786|      0|                        "can't convert negative value to unsigned int");
  787|      0|        return (unsigned long) -1;
  788|      0|    }
  789|  16.4k|    i = _PyLong_DigitCount(v);
  790|       |
  791|  16.4k|    unsigned long x = unroll_digits_ulong(v, &i);
  792|  16.4k|    while (--i >= 0) {
  ------------------
  |  Branch (792:12): [True: 0, False: 16.4k]
  ------------------
  793|      0|        if (x > (ULONG_MAX >> PyLong_SHIFT)) {
  ------------------
  |  |   47|      0|#define PyLong_SHIFT    30
  ------------------
  |  Branch (793:13): [True: 0, False: 0]
  ------------------
  794|      0|            goto overflow;
  795|      0|        }
  796|      0|        x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
  ------------------
  |  |   47|      0|#define PyLong_SHIFT    30
  ------------------
  797|      0|    }
  798|  16.4k|    return x;
  799|      0|overflow:
  800|      0|    PyErr_SetString(PyExc_OverflowError,
  801|      0|                    "Python int too large to convert "
  802|      0|                    "to C unsigned long");
  803|      0|    return (unsigned long) -1;
  804|  16.4k|}
PyLong_AsSize_t:
  811|  52.4k|{
  812|  52.4k|    PyLongObject *v;
  813|  52.4k|    Py_ssize_t i;
  814|       |
  815|  52.4k|    if (vv == NULL) {
  ------------------
  |  Branch (815:9): [True: 0, False: 52.4k]
  ------------------
  816|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  817|      0|        return (size_t) -1;
  818|      0|    }
  819|  52.4k|    if (!PyLong_Check(vv)) {
  ------------------
  |  |   13|  52.4k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  52.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (819:9): [True: 0, False: 52.4k]
  ------------------
  820|      0|        PyErr_SetString(PyExc_TypeError, "an integer is required");
  821|      0|        return (size_t)-1;
  822|      0|    }
  823|       |
  824|  52.4k|    v = (PyLongObject *)vv;
  825|  52.4k|    if (_PyLong_IsNonNegativeCompact(v)) {
  ------------------
  |  Branch (825:9): [True: 51.0k, False: 1.42k]
  ------------------
  826|  51.0k|        return (size_t)_PyLong_CompactValue(v);
  827|  51.0k|    }
  828|  1.42k|    if (_PyLong_IsNegative(v)) {
  ------------------
  |  Branch (828:9): [True: 751, False: 675]
  ------------------
  829|    751|        PyErr_SetString(PyExc_OverflowError,
  830|    751|                   "can't convert negative value to size_t");
  831|    751|        return (size_t) -1;
  832|    751|    }
  833|    675|    i = _PyLong_DigitCount(v);
  834|       |
  835|    675|    size_t x = unroll_digits_size_t(v, &i);
  836|    856|    while (--i >= 0) {
  ------------------
  |  Branch (836:12): [True: 537, False: 319]
  ------------------
  837|    537|            if (x > (SIZE_MAX >> PyLong_SHIFT)) {
  ------------------
  |  |   47|    537|#define PyLong_SHIFT    30
  ------------------
  |  Branch (837:17): [True: 356, False: 181]
  ------------------
  838|    356|                PyErr_SetString(PyExc_OverflowError,
  839|    356|                    "Python int too large to convert to C size_t");
  840|    356|                return (size_t) -1;
  841|    356|            }
  842|    181|            x = (x << PyLong_SHIFT) | v->long_value.ob_digit[i];
  ------------------
  |  |   47|    181|#define PyLong_SHIFT    30
  ------------------
  843|    181|        }
  844|    319|    return x;
  845|    675|}
PyLong_GetSign:
  955|  1.30k|{
  956|  1.30k|    if (!PyLong_Check(vv)) {
  ------------------
  |  |   13|  1.30k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.30k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (956:9): [True: 0, False: 1.30k]
  ------------------
  957|      0|        PyErr_Format(PyExc_TypeError, "expect int, got %T", vv);
  958|      0|        return -1;
  959|      0|    }
  960|       |
  961|  1.30k|    *sign = long_sign(vv);
  962|  1.30k|    return 0;
  963|  1.30k|}
_PyLong_NumBits:
  977|   135k|{
  978|   135k|    PyLongObject *v = (PyLongObject *)vv;
  979|   135k|    int64_t result = 0;
  980|   135k|    Py_ssize_t ndigits;
  981|   135k|    int msd_bits;
  982|       |
  983|   135k|    assert(v != NULL);
  ------------------
  |  Branch (983:5): [True: 135k, False: 0]
  ------------------
  984|   135k|    assert(PyLong_Check(v));
  ------------------
  |  Branch (984:5): [True: 135k, False: 0]
  ------------------
  985|   135k|    ndigits = _PyLong_DigitCount(v);
  986|   135k|    assert(ndigits == 0 || v->long_value.ob_digit[ndigits - 1] != 0);
  ------------------
  |  Branch (986:5): [True: 28, False: 135k]
  |  Branch (986:5): [True: 135k, False: 0]
  ------------------
  987|   135k|    if (ndigits > 0) {
  ------------------
  |  Branch (987:9): [True: 135k, False: 28]
  ------------------
  988|   135k|        digit msd = v->long_value.ob_digit[ndigits - 1];
  989|   135k|#if SIZEOF_SIZE_T == 8
  990|   135k|        assert(ndigits <= INT64_MAX / PyLong_SHIFT);
  ------------------
  |  Branch (990:9): [True: 135k, False: 0]
  ------------------
  991|   135k|#endif
  992|   135k|        result = (int64_t)(ndigits - 1) * PyLong_SHIFT;
  ------------------
  |  |   47|   135k|#define PyLong_SHIFT    30
  ------------------
  993|   135k|        msd_bits = bit_length_digit(msd);
  994|   135k|        result += msd_bits;
  995|   135k|    }
  996|   135k|    return result;
  997|   135k|}
_PyLong_FromByteArray:
 1002|    279|{
 1003|    279|    const unsigned char* pstartbyte;    /* LSB of bytes */
 1004|    279|    int incr;                           /* direction to move pstartbyte */
 1005|    279|    const unsigned char* pendbyte;      /* MSB of bytes */
 1006|    279|    size_t numsignificantbytes;         /* number of bytes that matter */
 1007|    279|    Py_ssize_t ndigits;                 /* number of Python int digits */
 1008|    279|    PyLongObject* v;                    /* result */
 1009|    279|    Py_ssize_t idigit = 0;              /* next free index in v->long_value.ob_digit */
 1010|       |
 1011|    279|    if (n == 0)
  ------------------
  |  Branch (1011:9): [True: 0, False: 279]
  ------------------
 1012|      0|        return PyLong_FromLong(0L);
 1013|       |
 1014|    279|    if (little_endian) {
  ------------------
  |  Branch (1014:9): [True: 279, False: 0]
  ------------------
 1015|    279|        pstartbyte = bytes;
 1016|    279|        pendbyte = bytes + n - 1;
 1017|    279|        incr = 1;
 1018|    279|    }
 1019|      0|    else {
 1020|      0|        pstartbyte = bytes + n - 1;
 1021|      0|        pendbyte = bytes;
 1022|      0|        incr = -1;
 1023|      0|    }
 1024|       |
 1025|    279|    if (is_signed)
  ------------------
  |  Branch (1025:9): [True: 0, False: 279]
  ------------------
 1026|      0|        is_signed = *pendbyte >= 0x80;
 1027|       |
 1028|       |    /* Compute numsignificantbytes.  This consists of finding the most
 1029|       |       significant byte.  Leading 0 bytes are insignificant if the number
 1030|       |       is positive, and leading 0xff bytes if negative. */
 1031|    279|    {
 1032|    279|        size_t i;
 1033|    279|        const unsigned char* p = pendbyte;
 1034|    279|        const int pincr = -incr;  /* search MSB to LSB */
 1035|    279|        const unsigned char insignificant = is_signed ? 0xff : 0x00;
  ------------------
  |  Branch (1035:45): [True: 0, False: 279]
  ------------------
 1036|       |
 1037|    835|        for (i = 0; i < n; ++i, p += pincr) {
  ------------------
  |  Branch (1037:21): [True: 742, False: 93]
  ------------------
 1038|    742|            if (*p != insignificant)
  ------------------
  |  Branch (1038:17): [True: 186, False: 556]
  ------------------
 1039|    186|                break;
 1040|    742|        }
 1041|    279|        numsignificantbytes = n - i;
 1042|       |        /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
 1043|       |           actually has 2 significant bytes.  OTOH, 0xff0001 ==
 1044|       |           -0x00ffff, so we wouldn't *need* to bump it there; but we
 1045|       |           do for 0xffff = -0x0001.  To be safe without bothering to
 1046|       |           check every case, bump it regardless. */
 1047|    279|        if (is_signed && numsignificantbytes < n)
  ------------------
  |  Branch (1047:13): [True: 0, False: 279]
  |  Branch (1047:26): [True: 0, False: 0]
  ------------------
 1048|      0|            ++numsignificantbytes;
 1049|    279|    }
 1050|       |
 1051|       |    /* avoid integer overflow */
 1052|    279|    ndigits = numsignificantbytes / PyLong_SHIFT * 8
  ------------------
  |  |   47|    279|#define PyLong_SHIFT    30
  ------------------
 1053|    279|        + (numsignificantbytes % PyLong_SHIFT * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
  ------------------
  |  |   47|    279|#define PyLong_SHIFT    30
  ------------------
                      + (numsignificantbytes % PyLong_SHIFT * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
  ------------------
  |  |   47|    279|#define PyLong_SHIFT    30
  ------------------
                      + (numsignificantbytes % PyLong_SHIFT * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
  ------------------
  |  |   47|    279|#define PyLong_SHIFT    30
  ------------------
 1054|    279|    v = long_alloc(ndigits);
 1055|    279|    if (v == NULL)
  ------------------
  |  Branch (1055:9): [True: 0, False: 279]
  ------------------
 1056|      0|        return NULL;
 1057|       |
 1058|       |    /* Copy the bits over.  The tricky parts are computing 2's-comp on
 1059|       |       the fly for signed numbers, and dealing with the mismatch between
 1060|       |       8-bit bytes and (probably) 15-bit Python digits.*/
 1061|    279|    {
 1062|    279|        size_t i;
 1063|    279|        twodigits carry = 1;                    /* for 2's-comp calculation */
 1064|    279|        twodigits accum = 0;                    /* sliding register */
 1065|    279|        unsigned int accumbits = 0;             /* number of bits in accum */
 1066|    279|        const unsigned char* p = pstartbyte;
 1067|       |
 1068|    839|        for (i = 0; i < numsignificantbytes; ++i, p += incr) {
  ------------------
  |  Branch (1068:21): [True: 560, False: 279]
  ------------------
 1069|    560|            twodigits thisbyte = *p;
 1070|       |            /* Compute correction for 2's comp, if needed. */
 1071|    560|            if (is_signed) {
  ------------------
  |  Branch (1071:17): [True: 0, False: 560]
  ------------------
 1072|      0|                thisbyte = (0xff ^ thisbyte) + carry;
 1073|      0|                carry = thisbyte >> 8;
 1074|      0|                thisbyte &= 0xff;
 1075|      0|            }
 1076|       |            /* Because we're going LSB to MSB, thisbyte is
 1077|       |               more significant than what's already in accum,
 1078|       |               so needs to be prepended to accum. */
 1079|    560|            accum |= thisbyte << accumbits;
 1080|    560|            accumbits += 8;
 1081|    560|            if (accumbits >= PyLong_SHIFT) {
  ------------------
  |  |   47|    560|#define PyLong_SHIFT    30
  ------------------
  |  Branch (1081:17): [True: 93, False: 467]
  ------------------
 1082|       |                /* There's enough to fill a Python digit. */
 1083|     93|                assert(idigit < ndigits);
  ------------------
  |  Branch (1083:17): [True: 93, False: 0]
  ------------------
 1084|     93|                v->long_value.ob_digit[idigit] = (digit)(accum & PyLong_MASK);
  ------------------
  |  |   62|     93|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|     93|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|     93|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1085|     93|                ++idigit;
 1086|     93|                accum >>= PyLong_SHIFT;
  ------------------
  |  |   47|     93|#define PyLong_SHIFT    30
  ------------------
 1087|     93|                accumbits -= PyLong_SHIFT;
  ------------------
  |  |   47|     93|#define PyLong_SHIFT    30
  ------------------
 1088|     93|                assert(accumbits < PyLong_SHIFT);
  ------------------
  |  Branch (1088:17): [True: 93, False: 0]
  ------------------
 1089|     93|            }
 1090|    560|        }
 1091|    279|        assert(accumbits < PyLong_SHIFT);
  ------------------
  |  Branch (1091:9): [True: 279, False: 0]
  ------------------
 1092|    279|        if (accumbits) {
  ------------------
  |  Branch (1092:13): [True: 186, False: 93]
  ------------------
 1093|    186|            assert(idigit < ndigits);
  ------------------
  |  Branch (1093:13): [True: 186, False: 0]
  ------------------
 1094|    186|            v->long_value.ob_digit[idigit] = (digit)accum;
 1095|    186|            ++idigit;
 1096|    186|        }
 1097|    279|    }
 1098|       |
 1099|    279|    int sign = is_signed ? -1: 1;
  ------------------
  |  Branch (1099:16): [True: 0, False: 279]
  ------------------
 1100|    279|    if (idigit == 0) {
  ------------------
  |  Branch (1100:9): [True: 93, False: 186]
  ------------------
 1101|     93|        sign = 0;
 1102|     93|        v->long_value.ob_digit[0] = 0;
 1103|     93|    }
 1104|    279|    _PyLong_SetSignAndDigitCount(v, sign, idigit);
 1105|    279|    return (PyObject *)maybe_small_long(long_normalize(v));
 1106|    279|}
_PyLong_AsByteArray:
 1113|  6.26k|{
 1114|  6.26k|    Py_ssize_t i;               /* index into v->long_value.ob_digit */
 1115|  6.26k|    Py_ssize_t ndigits;         /* number of digits */
 1116|  6.26k|    twodigits accum;            /* sliding register */
 1117|  6.26k|    unsigned int accumbits;     /* # bits in accum */
 1118|  6.26k|    int do_twos_comp;           /* store 2's-comp?  is_signed and v < 0 */
 1119|  6.26k|    digit carry;                /* for computing 2's-comp */
 1120|  6.26k|    size_t j;                   /* # bytes filled */
 1121|  6.26k|    unsigned char* p;           /* pointer to next byte in bytes */
 1122|  6.26k|    int pincr;                  /* direction to move p */
 1123|       |
 1124|  6.26k|    assert(v != NULL && PyLong_Check(v));
  ------------------
  |  Branch (1124:5): [True: 6.26k, False: 0]
  |  Branch (1124:5): [True: 6.26k, False: 0]
  ------------------
 1125|       |
 1126|  6.26k|    ndigits = _PyLong_DigitCount(v);
 1127|  6.26k|    if (_PyLong_IsNegative(v)) {
  ------------------
  |  Branch (1127:9): [True: 0, False: 6.26k]
  ------------------
 1128|      0|        if (!is_signed) {
  ------------------
  |  Branch (1128:13): [True: 0, False: 0]
  ------------------
 1129|      0|            if (with_exceptions) {
  ------------------
  |  Branch (1129:17): [True: 0, False: 0]
  ------------------
 1130|      0|                PyErr_SetString(PyExc_OverflowError,
 1131|      0|                                "can't convert negative int to unsigned");
 1132|      0|            }
 1133|      0|            return -1;
 1134|      0|        }
 1135|      0|        do_twos_comp = 1;
 1136|      0|    }
 1137|  6.26k|    else {
 1138|  6.26k|        do_twos_comp = 0;
 1139|  6.26k|    }
 1140|       |
 1141|  6.26k|    if (little_endian) {
  ------------------
  |  Branch (1141:9): [True: 6.26k, False: 0]
  ------------------
 1142|  6.26k|        p = bytes;
 1143|  6.26k|        pincr = 1;
 1144|  6.26k|    }
 1145|      0|    else {
 1146|      0|        p = bytes + n - 1;
 1147|      0|        pincr = -1;
 1148|      0|    }
 1149|       |
 1150|       |    /* Copy over all the Python digits.
 1151|       |       It's crucial that every Python digit except for the MSD contribute
 1152|       |       exactly PyLong_SHIFT bits to the total, so first assert that the int is
 1153|       |       normalized.
 1154|       |       NOTE: PyLong_AsNativeBytes() assumes that this function will fill in 'n'
 1155|       |       bytes even if it eventually fails to convert the whole number. Make sure
 1156|       |       you account for that if you are changing this algorithm to return without
 1157|       |       doing that.
 1158|       |       */
 1159|  6.26k|    assert(ndigits == 0 || v->long_value.ob_digit[ndigits - 1] != 0);
  ------------------
  |  Branch (1159:5): [True: 0, False: 6.26k]
  |  Branch (1159:5): [True: 6.26k, False: 0]
  ------------------
 1160|  6.26k|    j = 0;
 1161|  6.26k|    accum = 0;
 1162|  6.26k|    accumbits = 0;
 1163|  6.26k|    carry = do_twos_comp ? 1 : 0;
  ------------------
  |  Branch (1163:13): [True: 0, False: 6.26k]
  ------------------
 1164|  19.8k|    for (i = 0; i < ndigits; ++i) {
  ------------------
  |  Branch (1164:17): [True: 17.4k, False: 2.46k]
  ------------------
 1165|  17.4k|        digit thisdigit = v->long_value.ob_digit[i];
 1166|  17.4k|        if (do_twos_comp) {
  ------------------
  |  Branch (1166:13): [True: 0, False: 17.4k]
  ------------------
 1167|      0|            thisdigit = (thisdigit ^ PyLong_MASK) + carry;
  ------------------
  |  |   62|      0|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|      0|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1168|      0|            carry = thisdigit >> PyLong_SHIFT;
  ------------------
  |  |   47|      0|#define PyLong_SHIFT    30
  ------------------
 1169|      0|            thisdigit &= PyLong_MASK;
  ------------------
  |  |   62|      0|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|      0|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1170|      0|        }
 1171|       |        /* Because we're going LSB to MSB, thisdigit is more
 1172|       |           significant than what's already in accum, so needs to be
 1173|       |           prepended to accum. */
 1174|  17.4k|        accum |= (twodigits)thisdigit << accumbits;
 1175|       |
 1176|       |        /* The most-significant digit may be (probably is) at least
 1177|       |           partly empty. */
 1178|  17.4k|        if (i == ndigits - 1) {
  ------------------
  |  Branch (1178:13): [True: 3.42k, False: 14.0k]
  ------------------
 1179|       |            /* Count # of sign bits -- they needn't be stored,
 1180|       |             * although for signed conversion we need later to
 1181|       |             * make sure at least one sign bit gets stored. */
 1182|  3.42k|            digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
  ------------------
  |  |   62|      0|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|      0|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1182:23): [True: 0, False: 3.42k]
  ------------------
 1183|  44.7k|            while (s != 0) {
  ------------------
  |  Branch (1183:20): [True: 41.3k, False: 3.42k]
  ------------------
 1184|  41.3k|                s >>= 1;
 1185|  41.3k|                accumbits++;
 1186|  41.3k|            }
 1187|  3.42k|        }
 1188|  14.0k|        else
 1189|  14.0k|            accumbits += PyLong_SHIFT;
  ------------------
  |  |   47|  14.0k|#define PyLong_SHIFT    30
  ------------------
 1190|       |
 1191|       |        /* Store as many bytes as possible. */
 1192|  62.9k|        while (accumbits >= 8) {
  ------------------
  |  Branch (1192:16): [True: 49.3k, False: 13.6k]
  ------------------
 1193|  49.3k|            if (j >= n)
  ------------------
  |  Branch (1193:17): [True: 3.79k, False: 45.5k]
  ------------------
 1194|  3.79k|                goto Overflow;
 1195|  45.5k|            ++j;
 1196|  45.5k|            *p = (unsigned char)(accum & 0xff);
 1197|  45.5k|            p += pincr;
 1198|  45.5k|            accumbits -= 8;
 1199|  45.5k|            accum >>= 8;
 1200|  45.5k|        }
 1201|  17.4k|    }
 1202|       |
 1203|       |    /* Store the straggler (if any). */
 1204|  6.26k|    assert(accumbits < 8);
  ------------------
  |  Branch (1204:5): [True: 2.46k, False: 0]
  ------------------
 1205|  2.46k|    assert(carry == 0);  /* else do_twos_comp and *every* digit was 0 */
  ------------------
  |  Branch (1205:5): [True: 2.46k, False: 0]
  ------------------
 1206|  2.46k|    if (accumbits > 0) {
  ------------------
  |  Branch (1206:9): [True: 2.28k, False: 178]
  ------------------
 1207|  2.28k|        if (j >= n)
  ------------------
  |  Branch (1207:13): [True: 849, False: 1.43k]
  ------------------
 1208|    849|            goto Overflow;
 1209|  1.43k|        ++j;
 1210|  1.43k|        if (do_twos_comp) {
  ------------------
  |  Branch (1210:13): [True: 0, False: 1.43k]
  ------------------
 1211|       |            /* Fill leading bits of the byte with sign bits
 1212|       |               (appropriately pretending that the int had an
 1213|       |               infinite supply of sign bits). */
 1214|      0|            accum |= (~(twodigits)0) << accumbits;
 1215|      0|        }
 1216|  1.43k|        *p = (unsigned char)(accum & 0xff);
 1217|  1.43k|        p += pincr;
 1218|  1.43k|    }
 1219|    178|    else if (j == n && is_signed) {
  ------------------
  |  Branch (1219:14): [True: 57, False: 121]
  |  Branch (1219:24): [True: 57, False: 0]
  ------------------
 1220|       |        /* The main loop filled the byte array exactly, so the code
 1221|       |           just above didn't get to ensure there's a sign bit, and the
 1222|       |           loop below wouldn't add one either.  Make sure a sign bit
 1223|       |           exists. */
 1224|     57|        int sign_bit_set;
 1225|     57|        if (n > 0) {
  ------------------
  |  Branch (1225:13): [True: 57, False: 0]
  ------------------
 1226|     57|            unsigned char msb = *(p - pincr);
 1227|     57|            sign_bit_set = msb >= 0x80;
 1228|     57|        }
 1229|      0|        else {
 1230|      0|            sign_bit_set = 0;
 1231|      0|        }
 1232|     57|        assert(accumbits == 0);
  ------------------
  |  Branch (1232:9): [True: 57, False: 0]
  ------------------
 1233|     57|        if (sign_bit_set == do_twos_comp)
  ------------------
  |  Branch (1233:13): [True: 0, False: 57]
  ------------------
 1234|      0|            return 0;
 1235|     57|        else
 1236|     57|            goto Overflow;
 1237|     57|    }
 1238|       |
 1239|       |    /* Fill remaining bytes with copies of the sign bit. */
 1240|  1.55k|    {
 1241|  1.55k|        unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
  ------------------
  |  Branch (1241:34): [True: 0, False: 1.55k]
  ------------------
 1242|  4.64k|        for ( ; j < n; ++j, p += pincr)
  ------------------
  |  Branch (1242:17): [True: 3.08k, False: 1.55k]
  ------------------
 1243|  3.08k|            *p = signbyte;
 1244|  1.55k|    }
 1245|       |
 1246|  1.55k|    return 0;
 1247|       |
 1248|  4.70k|  Overflow:
 1249|  4.70k|    if (with_exceptions) {
  ------------------
  |  Branch (1249:9): [True: 0, False: 4.70k]
  ------------------
 1250|      0|        PyErr_SetString(PyExc_OverflowError, "int too big to convert");
 1251|      0|    }
 1252|  4.70k|    return -1;
 1253|       |
 1254|  2.46k|}
PyLong_AsNativeBytes:
 1283|  19.4k|{
 1284|  19.4k|    PyLongObject *v;
 1285|  19.4k|    union {
 1286|  19.4k|        Py_ssize_t v;
 1287|  19.4k|        unsigned char b[sizeof(Py_ssize_t)];
 1288|  19.4k|    } cv;
 1289|  19.4k|    int do_decref = 0;
 1290|  19.4k|    Py_ssize_t res = 0;
 1291|       |
 1292|  19.4k|    if (vv == NULL || n < 0) {
  ------------------
  |  Branch (1292:9): [True: 0, False: 19.4k]
  |  Branch (1292:23): [True: 0, False: 19.4k]
  ------------------
 1293|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1294|      0|        return -1;
 1295|      0|    }
 1296|       |
 1297|  19.4k|    int little_endian = flags;
 1298|  19.4k|    if (_resolve_endianness(&little_endian) < 0) {
  ------------------
  |  Branch (1298:9): [True: 0, False: 19.4k]
  ------------------
 1299|      0|        return -1;
 1300|      0|    }
 1301|       |
 1302|  19.4k|    if (PyLong_Check(vv)) {
  ------------------
  |  |   13|  19.4k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  19.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 19.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1303|  19.4k|        v = (PyLongObject *)vv;
 1304|  19.4k|    }
 1305|      0|    else if (flags != -1 && (flags & Py_ASNATIVEBYTES_ALLOW_INDEX)) {
  ------------------
  |  |   50|      0|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  ------------------
  |  Branch (1305:14): [True: 0, False: 0]
  |  Branch (1305:29): [True: 0, False: 0]
  ------------------
 1306|      0|        v = (PyLongObject *)_PyNumber_Index(vv);
 1307|      0|        if (v == NULL) {
  ------------------
  |  Branch (1307:13): [True: 0, False: 0]
  ------------------
 1308|      0|            return -1;
 1309|      0|        }
 1310|      0|        do_decref = 1;
 1311|      0|    }
 1312|      0|    else {
 1313|      0|        PyErr_Format(PyExc_TypeError, "expect int, got %T", vv);
 1314|      0|        return -1;
 1315|      0|    }
 1316|       |
 1317|  19.4k|    if ((flags != -1 && (flags & Py_ASNATIVEBYTES_REJECT_NEGATIVE))
  ------------------
  |  |   49|  19.4k|#define Py_ASNATIVEBYTES_REJECT_NEGATIVE 8
  ------------------
  |  Branch (1317:10): [True: 19.4k, False: 0]
  |  Branch (1317:25): [True: 0, False: 19.4k]
  ------------------
 1318|      0|        && _PyLong_IsNegative(v)) {
  ------------------
  |  Branch (1318:12): [True: 0, False: 0]
  ------------------
 1319|      0|        PyErr_SetString(PyExc_ValueError, "Cannot convert negative int");
 1320|      0|        if (do_decref) {
  ------------------
  |  Branch (1320:13): [True: 0, False: 0]
  ------------------
 1321|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1322|      0|        }
 1323|      0|        return -1;
 1324|      0|    }
 1325|       |
 1326|  19.4k|    if (_PyLong_IsCompact(v)) {
  ------------------
  |  Branch (1326:9): [True: 13.1k, False: 6.26k]
  ------------------
 1327|  13.1k|        res = 0;
 1328|  13.1k|        cv.v = _PyLong_CompactValue(v);
 1329|       |        /* Most paths result in res = sizeof(compact value). Only the case
 1330|       |         * where 0 < n < sizeof(compact value) do we need to check and adjust
 1331|       |         * our return value. */
 1332|  13.1k|        res = sizeof(cv.b);
 1333|  13.1k|        if (n <= 0) {
  ------------------
  |  Branch (1333:13): [True: 0, False: 13.1k]
  ------------------
 1334|       |            // nothing to do!
 1335|      0|        }
 1336|  13.1k|        else if (n <= (Py_ssize_t)sizeof(cv.b)) {
  ------------------
  |  Branch (1336:18): [True: 13.1k, False: 0]
  ------------------
 1337|  13.1k|#if PY_LITTLE_ENDIAN
 1338|  13.1k|            if (little_endian) {
  ------------------
  |  Branch (1338:17): [True: 13.1k, False: 0]
  ------------------
 1339|  13.1k|                memcpy(buffer, cv.b, n);
 1340|  13.1k|            }
 1341|      0|            else {
 1342|      0|                for (Py_ssize_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (1342:40): [True: 0, False: 0]
  ------------------
 1343|      0|                    ((unsigned char*)buffer)[n - i - 1] = cv.b[i];
 1344|      0|                }
 1345|      0|            }
 1346|       |#else
 1347|       |            if (little_endian) {
 1348|       |                for (Py_ssize_t i = 0; i < n; ++i) {
 1349|       |                    ((unsigned char*)buffer)[i] = cv.b[sizeof(cv.b) - i - 1];
 1350|       |                }
 1351|       |            }
 1352|       |            else {
 1353|       |                memcpy(buffer, &cv.b[sizeof(cv.b) - n], n);
 1354|       |            }
 1355|       |#endif
 1356|       |
 1357|       |            /* If we fit, return the requested number of bytes */
 1358|  13.1k|            if (_fits_in_n_bits(cv.v, n * 8)) {
  ------------------
  |  Branch (1358:17): [True: 13.1k, False: 0]
  ------------------
 1359|  13.1k|                res = n;
 1360|  13.1k|            } else if (cv.v > 0 && _fits_in_n_bits(cv.v, n * 8 + 1)) {
  ------------------
  |  Branch (1360:24): [True: 0, False: 0]
  |  Branch (1360:36): [True: 0, False: 0]
  ------------------
 1361|       |                /* Positive values with the MSB set do not require an
 1362|       |                 * additional bit when the caller's intent is to treat them
 1363|       |                 * as unsigned. */
 1364|      0|                if (flags == -1 || (flags & Py_ASNATIVEBYTES_UNSIGNED_BUFFER)) {
  ------------------
  |  |   48|      0|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  |  Branch (1364:21): [True: 0, False: 0]
  |  Branch (1364:36): [True: 0, False: 0]
  ------------------
 1365|      0|                    res = n;
 1366|      0|                } else {
 1367|      0|                    res = n + 1;
 1368|      0|                }
 1369|      0|            }
 1370|  13.1k|        }
 1371|      0|        else {
 1372|      0|            unsigned char fill = cv.v < 0 ? 0xFF : 0x00;
  ------------------
  |  Branch (1372:34): [True: 0, False: 0]
  ------------------
 1373|      0|#if PY_LITTLE_ENDIAN
 1374|      0|            if (little_endian) {
  ------------------
  |  Branch (1374:17): [True: 0, False: 0]
  ------------------
 1375|      0|                memcpy(buffer, cv.b, sizeof(cv.b));
 1376|      0|                memset((char *)buffer + sizeof(cv.b), fill, n - sizeof(cv.b));
 1377|      0|            }
 1378|      0|            else {
 1379|      0|                unsigned char *b = (unsigned char *)buffer;
 1380|      0|                for (Py_ssize_t i = 0; i < n - (int)sizeof(cv.b); ++i) {
  ------------------
  |  Branch (1380:40): [True: 0, False: 0]
  ------------------
 1381|      0|                    *b++ = fill;
 1382|      0|                }
 1383|      0|                for (Py_ssize_t i = sizeof(cv.b); i > 0; --i) {
  ------------------
  |  Branch (1383:51): [True: 0, False: 0]
  ------------------
 1384|      0|                    *b++ = cv.b[i - 1];
 1385|      0|                }
 1386|      0|            }
 1387|       |#else
 1388|       |            if (little_endian) {
 1389|       |                unsigned char *b = (unsigned char *)buffer;
 1390|       |                for (Py_ssize_t i = sizeof(cv.b); i > 0; --i) {
 1391|       |                    *b++ = cv.b[i - 1];
 1392|       |                }
 1393|       |                for (Py_ssize_t i = 0; i < n - (int)sizeof(cv.b); ++i) {
 1394|       |                    *b++ = fill;
 1395|       |                }
 1396|       |            }
 1397|       |            else {
 1398|       |                memset(buffer, fill, n - sizeof(cv.b));
 1399|       |                memcpy((char *)buffer + n - sizeof(cv.b), cv.b, sizeof(cv.b));
 1400|       |            }
 1401|       |#endif
 1402|      0|        }
 1403|  13.1k|    }
 1404|  6.26k|    else {
 1405|  6.26k|        if (n > 0) {
  ------------------
  |  Branch (1405:13): [True: 6.26k, False: 0]
  ------------------
 1406|  6.26k|            _PyLong_AsByteArray(v, buffer, (size_t)n, little_endian, 1, 0);
 1407|  6.26k|        }
 1408|       |
 1409|       |        /* Calculates the number of bits required for the *absolute* value
 1410|       |         * of v. This does not take sign into account, only magnitude. */
 1411|  6.26k|        int64_t nb = _PyLong_NumBits((PyObject *)v);
 1412|  6.26k|        assert(nb >= 0);
  ------------------
  |  Branch (1412:9): [True: 6.26k, False: 0]
  ------------------
 1413|       |        /* Normally this would be ((nb - 1) / 8) + 1 to avoid rounding up
 1414|       |         * multiples of 8 to the next byte, but we add an implied bit for
 1415|       |         * the sign and it cancels out. */
 1416|  6.26k|        res = (Py_ssize_t)(nb / 8) + 1;
 1417|       |
 1418|       |        /* Two edge cases exist that are best handled after extracting the
 1419|       |         * bits. These may result in us reporting overflow when the value
 1420|       |         * actually fits.
 1421|       |         */
 1422|  6.26k|        if (n > 0 && res == n + 1 && nb % 8 == 0) {
  ------------------
  |  Branch (1422:13): [True: 6.26k, False: 0]
  |  Branch (1422:22): [True: 906, False: 5.35k]
  |  Branch (1422:38): [True: 57, False: 849]
  ------------------
 1423|     57|            if (_PyLong_IsNegative(v)) {
  ------------------
  |  Branch (1423:17): [True: 0, False: 57]
  ------------------
 1424|       |                /* Values of 0x80...00 from negative values that use every
 1425|       |                 * available bit in the buffer do not require an additional
 1426|       |                 * bit to store the sign. */
 1427|      0|                int is_edge_case = 1;
 1428|      0|                unsigned char *b = (unsigned char *)buffer;
 1429|      0|                for (Py_ssize_t i = 0; i < n && is_edge_case; ++i, ++b) {
  ------------------
  |  Branch (1429:40): [True: 0, False: 0]
  |  Branch (1429:49): [True: 0, False: 0]
  ------------------
 1430|      0|                    if (i == 0) {
  ------------------
  |  Branch (1430:25): [True: 0, False: 0]
  ------------------
 1431|      0|                        is_edge_case = (*b == (little_endian ? 0 : 0x80));
  ------------------
  |  Branch (1431:48): [True: 0, False: 0]
  ------------------
 1432|      0|                    } else if (i < n - 1) {
  ------------------
  |  Branch (1432:32): [True: 0, False: 0]
  ------------------
 1433|      0|                        is_edge_case = (*b == 0);
 1434|      0|                    } else {
 1435|      0|                        is_edge_case = (*b == (little_endian ? 0x80 : 0));
  ------------------
  |  Branch (1435:48): [True: 0, False: 0]
  ------------------
 1436|      0|                    }
 1437|      0|                }
 1438|      0|                if (is_edge_case) {
  ------------------
  |  Branch (1438:21): [True: 0, False: 0]
  ------------------
 1439|      0|                    res = n;
 1440|      0|                }
 1441|      0|            }
 1442|     57|            else {
 1443|       |                /* Positive values with the MSB set do not require an
 1444|       |                 * additional bit when the caller's intent is to treat them
 1445|       |                 * as unsigned. */
 1446|     57|                unsigned char *b = (unsigned char *)buffer;
 1447|     57|                if (b[little_endian ? n - 1 : 0] & 0x80) {
  ------------------
  |  Branch (1447:21): [True: 57, False: 0]
  |  Branch (1447:23): [True: 57, False: 0]
  ------------------
 1448|     57|                    if (flags == -1 || (flags & Py_ASNATIVEBYTES_UNSIGNED_BUFFER)) {
  ------------------
  |  |   48|     57|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  |  Branch (1448:25): [True: 0, False: 57]
  |  Branch (1448:40): [True: 0, False: 57]
  ------------------
 1449|      0|                        res = n;
 1450|     57|                    } else {
 1451|     57|                        res = n + 1;
 1452|     57|                    }
 1453|     57|                }
 1454|     57|            }
 1455|     57|        }
 1456|  6.26k|    }
 1457|       |
 1458|  19.4k|    if (do_decref) {
  ------------------
  |  Branch (1458:9): [True: 0, False: 19.4k]
  ------------------
 1459|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1460|      0|    }
 1461|       |
 1462|  19.4k|    return res;
 1463|  19.4k|}
PyLong_FromVoidPtr:
 1509|   144k|{
 1510|   144k|#if SIZEOF_VOID_P <= SIZEOF_LONG
 1511|   144k|    return PyLong_FromUnsignedLong((unsigned long)(uintptr_t)p);
 1512|       |#else
 1513|       |
 1514|       |#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
 1515|       |#   error "PyLong_FromVoidPtr: sizeof(long long) < sizeof(void*)"
 1516|       |#endif
 1517|       |    return PyLong_FromUnsignedLongLong((unsigned long long)(uintptr_t)p);
 1518|       |#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
 1519|       |
 1520|   144k|}
PyLong_AsVoidPtr:
 1526|  16.4k|{
 1527|  16.4k|#if SIZEOF_VOID_P <= SIZEOF_LONG
 1528|  16.4k|    long x;
 1529|       |
 1530|  16.4k|    if (PyLong_Check(vv) && _PyLong_IsNegative((PyLongObject *)vv)) {
  ------------------
  |  |   13|  16.4k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  32.9k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 16.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1530:29): [True: 0, False: 16.4k]
  ------------------
 1531|      0|        x = PyLong_AsLong(vv);
 1532|      0|    }
 1533|  16.4k|    else {
 1534|  16.4k|        x = PyLong_AsUnsignedLong(vv);
 1535|  16.4k|    }
 1536|       |#else
 1537|       |
 1538|       |#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
 1539|       |#   error "PyLong_AsVoidPtr: sizeof(long long) < sizeof(void*)"
 1540|       |#endif
 1541|       |    long long x;
 1542|       |
 1543|       |    if (PyLong_Check(vv) && _PyLong_IsNegative((PyLongObject *)vv)) {
 1544|       |        x = PyLong_AsLongLong(vv);
 1545|       |    }
 1546|       |    else {
 1547|       |        x = PyLong_AsUnsignedLongLong(vv);
 1548|       |    }
 1549|       |
 1550|       |#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
 1551|       |
 1552|  16.4k|    if (x == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1552:9): [True: 0, False: 16.4k]
  |  Branch (1552:20): [True: 0, False: 0]
  ------------------
 1553|      0|        return NULL;
 1554|  16.4k|    return (void *)x;
 1555|  16.4k|}
PyLong_FromLongLong:
 1567|  3.69k|{
 1568|       |    PYLONG_FROM_INT(unsigned long long, long long, ival);
  ------------------
  |  |  371|  3.69k|    do {                                                                            \
  |  |  372|  3.69k|        /* Handle small and medium cases. */                                        \
  |  |  373|  3.69k|        if (IS_SMALL_INT(ival)) {                                                   \
  |  |  ------------------
  |  |  |  |   29|  3.69k|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  3.69k|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   98|  3.69k|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   97|  3.69k|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (68:6): [True: 3.69k, False: 0]
  |  |  |  |  |  |  |  Branch (68:37): [True: 10, False: 3.68k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  374|     10|            return get_small_int((sdigit)(ival));                                   \
  |  |  375|     10|        }                                                                           \
  |  |  376|  3.69k|        if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|  3.68k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  3.68k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  3.68k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|  3.68k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  3.68k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  3.68k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (376:13): [True: 3.68k, False: 0]
  |  |  |  Branch (376:49): [True: 519, False: 3.16k]
  |  |  ------------------
  |  |  377|    519|            return _PyLong_FromMedium((sdigit)(ival));                              \
  |  |  378|    519|        }                                                                           \
  |  |  379|  3.68k|        UINT_TYPE abs_ival = (ival) < 0 ? 0U-(UINT_TYPE)(ival) : (UINT_TYPE)(ival); \
  |  |  ------------------
  |  |  |  Branch (379:30): [True: 0, False: 3.16k]
  |  |  ------------------
  |  |  380|  3.16k|        /* Do shift in two steps to avoid possible undefined behavior. */           \
  |  |  381|  3.16k|        UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|  3.16k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|  3.16k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  382|  3.16k|        /* Count digits (at least two - smaller cases were handled above). */       \
  |  |  383|  3.16k|        Py_ssize_t ndigits = 2;                                                     \
  |  |  384|  4.74k|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (384:16): [True: 1.58k, False: 3.16k]
  |  |  ------------------
  |  |  385|  1.58k|            ++ndigits;                                                              \
  |  |  386|  1.58k|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|  1.58k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  387|  1.58k|        }                                                                           \
  |  |  388|  3.16k|        /* Construct output value. */                                               \
  |  |  389|  3.16k|        PyLongObject *v = long_alloc(ndigits);                                      \
  |  |  390|  3.16k|        if (v == NULL) {                                                            \
  |  |  ------------------
  |  |  |  Branch (390:13): [True: 0, False: 3.16k]
  |  |  ------------------
  |  |  391|      0|            return NULL;                                                            \
  |  |  392|      0|        }                                                                           \
  |  |  393|  3.16k|        digit *p = v->long_value.ob_digit;                                          \
  |  |  394|  3.16k|        _PyLong_SetSignAndDigitCount(v, (ival) < 0 ? -1 : 1, ndigits);              \
  |  |  ------------------
  |  |  |  Branch (394:41): [True: 0, False: 3.16k]
  |  |  ------------------
  |  |  395|  3.16k|        t = abs_ival;                                                               \
  |  |  396|  11.0k|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (396:16): [True: 7.90k, False: 3.16k]
  |  |  ------------------
  |  |  397|  7.90k|            *p++ = (digit)(t & PyLong_MASK);                                        \
  |  |  ------------------
  |  |  |  |   62|  7.90k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  7.90k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  7.90k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  398|  7.90k|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|  7.90k|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  399|  7.90k|        }                                                                           \
  |  |  400|  3.16k|        return (PyObject *)v;                                                       \
  |  |  401|  3.16k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (401:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1569|  3.69k|}
PyLong_FromSsize_t:
 1575|  2.93M|{
 1576|       |    PYLONG_FROM_INT(size_t, Py_ssize_t, ival);
  ------------------
  |  |  371|  2.93M|    do {                                                                            \
  |  |  372|  2.93M|        /* Handle small and medium cases. */                                        \
  |  |  373|  2.93M|        if (IS_SMALL_INT(ival)) {                                                   \
  |  |  ------------------
  |  |  |  |   29|  2.93M|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  2.93M|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   98|  2.93M|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   97|  2.93M|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (68:6): [True: 2.93M, False: 0]
  |  |  |  |  |  |  |  Branch (68:37): [True: 2.84M, False: 92.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  374|  2.84M|            return get_small_int((sdigit)(ival));                                   \
  |  |  375|  2.84M|        }                                                                           \
  |  |  376|  2.93M|        if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|  92.6k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  92.6k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  92.6k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|  92.6k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|  92.6k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  92.6k|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (376:13): [True: 92.6k, False: 0]
  |  |  |  Branch (376:49): [True: 92.2k, False: 414]
  |  |  ------------------
  |  |  377|  92.2k|            return _PyLong_FromMedium((sdigit)(ival));                              \
  |  |  378|  92.2k|        }                                                                           \
  |  |  379|  92.6k|        UINT_TYPE abs_ival = (ival) < 0 ? 0U-(UINT_TYPE)(ival) : (UINT_TYPE)(ival); \
  |  |  ------------------
  |  |  |  Branch (379:30): [True: 0, False: 414]
  |  |  ------------------
  |  |  380|    414|        /* Do shift in two steps to avoid possible undefined behavior. */           \
  |  |  381|    414|        UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|    414|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|    414|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  382|    414|        /* Count digits (at least two - smaller cases were handled above). */       \
  |  |  383|    414|        Py_ssize_t ndigits = 2;                                                     \
  |  |  384|    492|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (384:16): [True: 78, False: 414]
  |  |  ------------------
  |  |  385|     78|            ++ndigits;                                                              \
  |  |  386|     78|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|     78|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  387|     78|        }                                                                           \
  |  |  388|    414|        /* Construct output value. */                                               \
  |  |  389|    414|        PyLongObject *v = long_alloc(ndigits);                                      \
  |  |  390|    414|        if (v == NULL) {                                                            \
  |  |  ------------------
  |  |  |  Branch (390:13): [True: 0, False: 414]
  |  |  ------------------
  |  |  391|      0|            return NULL;                                                            \
  |  |  392|      0|        }                                                                           \
  |  |  393|    414|        digit *p = v->long_value.ob_digit;                                          \
  |  |  394|    414|        _PyLong_SetSignAndDigitCount(v, (ival) < 0 ? -1 : 1, ndigits);              \
  |  |  ------------------
  |  |  |  Branch (394:41): [True: 0, False: 414]
  |  |  ------------------
  |  |  395|    414|        t = abs_ival;                                                               \
  |  |  396|  1.32k|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (396:16): [True: 906, False: 414]
  |  |  ------------------
  |  |  397|    906|            *p++ = (digit)(t & PyLong_MASK);                                        \
  |  |  ------------------
  |  |  |  |   62|    906|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    906|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    906|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  398|    906|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|    906|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  399|    906|        }                                                                           \
  |  |  400|    414|        return (PyObject *)v;                                                       \
  |  |  401|    414|    } while(0)
  |  |  ------------------
  |  |  |  Branch (401:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1577|  2.93M|}
_PyLong_FormatWriter:
 2520|    132|{
 2521|    132|    if (base == 10)
  ------------------
  |  Branch (2521:9): [True: 0, False: 132]
  ------------------
 2522|      0|        return long_to_decimal_string_internal(obj, NULL, writer,
 2523|      0|                                               NULL, NULL);
 2524|    132|    else
 2525|    132|        return long_format_binary(obj, base, alternate, NULL, writer,
 2526|    132|                                  NULL, NULL);
 2527|    132|}
PyLong_FromString:
 3056|  38.4k|{
 3057|  38.4k|    int sign = 1, error_if_nonzero = 0;
 3058|  38.4k|    const char *orig_str = str;
 3059|  38.4k|    PyLongObject *z = NULL;
 3060|  38.4k|    PyObject *strobj;
 3061|  38.4k|    Py_ssize_t slen;
 3062|       |
 3063|  38.4k|    if ((base != 0 && base < 2) || base > 36) {
  ------------------
  |  Branch (3063:10): [True: 713, False: 37.7k]
  |  Branch (3063:23): [True: 0, False: 713]
  |  Branch (3063:36): [True: 0, False: 38.4k]
  ------------------
 3064|      0|        PyErr_SetString(PyExc_ValueError,
 3065|      0|                        "int() arg 2 must be >= 2 and <= 36");
 3066|      0|        return NULL;
 3067|      0|    }
 3068|  38.4k|    while (*str != '\0' && Py_ISSPACE(*str)) {
  ------------------
  |  |   27|  38.4k|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|  38.4k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|  38.4k|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 38.4k]
  |  |  ------------------
  ------------------
  |  Branch (3068:12): [True: 38.4k, False: 0]
  ------------------
 3069|      0|        ++str;
 3070|      0|    }
 3071|  38.4k|    if (*str == '+') {
  ------------------
  |  Branch (3071:9): [True: 0, False: 38.4k]
  ------------------
 3072|      0|        ++str;
 3073|      0|    }
 3074|  38.4k|    else if (*str == '-') {
  ------------------
  |  Branch (3074:14): [True: 0, False: 38.4k]
  ------------------
 3075|      0|        ++str;
 3076|      0|        sign = -1;
 3077|      0|    }
 3078|  38.4k|    if (base == 0) {
  ------------------
  |  Branch (3078:9): [True: 37.7k, False: 713]
  ------------------
 3079|  37.7k|        if (str[0] != '0') {
  ------------------
  |  Branch (3079:13): [True: 35.0k, False: 2.69k]
  ------------------
 3080|  35.0k|            base = 10;
 3081|  35.0k|        }
 3082|  2.69k|        else if (str[1] == 'x' || str[1] == 'X') {
  ------------------
  |  Branch (3082:18): [True: 1.39k, False: 1.29k]
  |  Branch (3082:35): [True: 378, False: 919]
  ------------------
 3083|  1.77k|            base = 16;
 3084|  1.77k|        }
 3085|    919|        else if (str[1] == 'o' || str[1] == 'O') {
  ------------------
  |  Branch (3085:18): [True: 81, False: 838]
  |  Branch (3085:35): [True: 340, False: 498]
  ------------------
 3086|    421|            base = 8;
 3087|    421|        }
 3088|    498|        else if (str[1] == 'b' || str[1] == 'B') {
  ------------------
  |  Branch (3088:18): [True: 188, False: 310]
  |  Branch (3088:35): [True: 310, False: 0]
  ------------------
 3089|    498|            base = 2;
 3090|    498|        }
 3091|      0|        else {
 3092|       |            /* "old" (C-style) octal literal, now invalid.
 3093|       |               it might still be zero though */
 3094|      0|            error_if_nonzero = 1;
 3095|      0|            base = 10;
 3096|      0|        }
 3097|  37.7k|    }
 3098|  38.4k|    if (str[0] == '0' &&
  ------------------
  |  Branch (3098:9): [True: 3.23k, False: 35.2k]
  ------------------
 3099|  3.23k|        ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
  ------------------
  |  Branch (3099:11): [True: 1.77k, False: 1.45k]
  |  Branch (3099:26): [True: 1.39k, False: 378]
  |  Branch (3099:43): [True: 378, False: 0]
  ------------------
 3100|  1.45k|         (base == 8  && (str[1] == 'o' || str[1] == 'O')) ||
  ------------------
  |  Branch (3100:11): [True: 421, False: 1.03k]
  |  Branch (3100:26): [True: 81, False: 340]
  |  Branch (3100:43): [True: 340, False: 0]
  ------------------
 3101|  2.69k|         (base == 2  && (str[1] == 'b' || str[1] == 'B')))) {
  ------------------
  |  Branch (3101:11): [True: 602, False: 434]
  |  Branch (3101:26): [True: 188, False: 414]
  |  Branch (3101:43): [True: 310, False: 104]
  ------------------
 3102|  2.69k|        str += 2;
 3103|       |        /* One underscore allowed here. */
 3104|  2.69k|        if (*str == '_') {
  ------------------
  |  Branch (3104:13): [True: 0, False: 2.69k]
  ------------------
 3105|      0|            ++str;
 3106|      0|        }
 3107|  2.69k|    }
 3108|       |
 3109|       |    /* long_from_string_base is the main workhorse here. */
 3110|  38.4k|    int ret = long_from_string_base(&str, base, &z);
 3111|  38.4k|    if (ret == -1) {
  ------------------
  |  Branch (3111:9): [True: 0, False: 38.4k]
  ------------------
 3112|       |        /* Syntax error. */
 3113|      0|        goto onError;
 3114|      0|    }
 3115|  38.4k|    if (z == NULL) {
  ------------------
  |  Branch (3115:9): [True: 2, False: 38.4k]
  ------------------
 3116|       |        /* Error. exception already set. */
 3117|      2|        return NULL;
 3118|      2|    }
 3119|       |
 3120|  38.4k|    if (error_if_nonzero) {
  ------------------
  |  Branch (3120:9): [True: 0, False: 38.4k]
  ------------------
 3121|       |        /* reset the base to 0, else the exception message
 3122|       |           doesn't make too much sense */
 3123|      0|        base = 0;
 3124|      0|        if (!_PyLong_IsZero(z)) {
  ------------------
  |  Branch (3124:13): [True: 0, False: 0]
  ------------------
 3125|      0|            goto onError;
 3126|      0|        }
 3127|       |        /* there might still be other problems, therefore base
 3128|       |           remains zero here for the same reason */
 3129|      0|    }
 3130|       |
 3131|       |    /* Set sign and normalize */
 3132|  38.4k|    long_normalize(z);
 3133|  38.4k|    z = maybe_small_long(z);
 3134|  38.4k|    if (sign < 0) {
  ------------------
  |  Branch (3134:9): [True: 0, False: 38.4k]
  ------------------
 3135|      0|        _PyLong_Negate(&z);
 3136|      0|    }
 3137|       |
 3138|  38.4k|    if (pend != NULL) {
  ------------------
  |  Branch (3138:9): [True: 713, False: 37.7k]
  ------------------
 3139|    713|        *pend = (char *)str;
 3140|    713|    }
 3141|  38.4k|    return (PyObject *) z;
 3142|       |
 3143|      0|  onError:
 3144|      0|    if (pend != NULL) {
  ------------------
  |  Branch (3144:9): [True: 0, False: 0]
  ------------------
 3145|      0|        *pend = (char *)str;
 3146|      0|    }
 3147|      0|    Py_XDECREF(z);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3148|      0|    slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
  ------------------
  |  Branch (3148:12): [True: 0, False: 0]
  ------------------
 3149|      0|    strobj = PyUnicode_FromStringAndSize(orig_str, slen);
 3150|      0|    if (strobj == NULL) {
  ------------------
  |  Branch (3150:9): [True: 0, False: 0]
  ------------------
 3151|      0|        return NULL;
 3152|      0|    }
 3153|      0|    PyErr_Format(PyExc_ValueError,
 3154|      0|                 "invalid literal for int() with base %d: %.200R",
 3155|      0|                 base, strobj);
 3156|      0|    Py_DECREF(strobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3157|       |    return NULL;
 3158|      0|}
_PyLong_FromBytes:
 3167|    104|{
 3168|    104|    PyObject *result, *strobj;
 3169|    104|    char *end = NULL;
 3170|       |
 3171|    104|    result = PyLong_FromString(s, &end, base);
 3172|    104|    if (end == NULL || (result != NULL && end == s + len))
  ------------------
  |  Branch (3172:9): [True: 0, False: 104]
  |  Branch (3172:25): [True: 104, False: 0]
  |  Branch (3172:43): [True: 104, False: 0]
  ------------------
 3173|    104|        return result;
 3174|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3175|      0|    strobj = PyBytes_FromStringAndSize(s, Py_MIN(len, 200));
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3176|      0|    if (strobj != NULL) {
  ------------------
  |  Branch (3176:9): [True: 0, False: 0]
  ------------------
 3177|      0|        PyErr_Format(PyExc_ValueError,
 3178|      0|                     "invalid literal for int() with base %d: %.200R",
 3179|      0|                     base, strobj);
 3180|      0|        Py_DECREF(strobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3181|      0|    }
 3182|       |    return NULL;
 3183|    104|}
PyLong_FromUnicodeObject:
 3187|    609|{
 3188|    609|    PyObject *result, *asciidig;
 3189|    609|    const char *buffer;
 3190|    609|    char *end = NULL;
 3191|    609|    Py_ssize_t buflen;
 3192|       |
 3193|    609|    asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
 3194|    609|    if (asciidig == NULL)
  ------------------
  |  Branch (3194:9): [True: 0, False: 609]
  ------------------
 3195|      0|        return NULL;
 3196|    609|    assert(PyUnicode_IS_ASCII(asciidig));
  ------------------
  |  Branch (3196:5): [True: 609, False: 0]
  ------------------
 3197|       |    /* Simply get a pointer to existing ASCII characters. */
 3198|    609|    buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
 3199|    609|    assert(buffer != NULL);
  ------------------
  |  Branch (3199:5): [True: 609, False: 0]
  ------------------
 3200|       |
 3201|    609|    result = PyLong_FromString(buffer, &end, base);
 3202|    609|    if (end == NULL || (result != NULL && end == buffer + buflen)) {
  ------------------
  |  Branch (3202:9): [True: 0, False: 609]
  |  Branch (3202:25): [True: 609, False: 0]
  |  Branch (3202:43): [True: 609, False: 0]
  ------------------
 3203|    609|        Py_DECREF(asciidig);
  ------------------
  |  |  430|    609|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    609|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    609|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3204|    609|        return result;
 3205|    609|    }
 3206|      0|    Py_DECREF(asciidig);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3207|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3208|      0|    PyErr_Format(PyExc_ValueError,
 3209|      0|                 "invalid literal for int() with base %d: %.200R",
 3210|      0|                 base, u);
 3211|       |    return NULL;
 3212|    609|}
_PyLong_Frexp:
 3469|  14.4k|{
 3470|  14.4k|    Py_ssize_t a_size, shift_digits, x_size;
 3471|  14.4k|    int shift_bits;
 3472|  14.4k|    int64_t a_bits;
 3473|       |    /* See below for why x_digits is always large enough. */
 3474|  14.4k|    digit rem;
 3475|  14.4k|    digit x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT] = {0,};
 3476|  14.4k|    double dx;
 3477|       |    /* Correction term for round-half-to-even rounding.  For a digit x,
 3478|       |       "x + half_even_correction[x & 7]" gives x rounded to the nearest
 3479|       |       multiple of 4, rounding ties to a multiple of 8. */
 3480|  14.4k|    static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
 3481|       |
 3482|  14.4k|    a_size = _PyLong_DigitCount(a);
 3483|  14.4k|    if (a_size == 0) {
  ------------------
  |  Branch (3483:9): [True: 0, False: 14.4k]
  ------------------
 3484|       |        /* Special case for 0: significand 0.0, exponent 0. */
 3485|      0|        *e = 0;
 3486|      0|        return 0.0;
 3487|      0|    }
 3488|  14.4k|    a_bits = _PyLong_NumBits((PyObject *)a);
 3489|       |
 3490|       |    /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
 3491|       |       (shifting left if a_bits <= DBL_MANT_DIG + 2).
 3492|       |
 3493|       |       Number of digits needed for result: write // for floor division.
 3494|       |       Then if shifting left, we end up using
 3495|       |
 3496|       |         1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
 3497|       |
 3498|       |       digits.  If shifting right, we use
 3499|       |
 3500|       |         a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
 3501|       |
 3502|       |       digits.  Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
 3503|       |       the inequalities
 3504|       |
 3505|       |         m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
 3506|       |         m // PyLong_SHIFT - n // PyLong_SHIFT <=
 3507|       |                                          1 + (m - n - 1) // PyLong_SHIFT,
 3508|       |
 3509|       |       valid for any integers m and n, we find that x_size satisfies
 3510|       |
 3511|       |         x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
 3512|       |
 3513|       |       in both cases.
 3514|       |    */
 3515|  14.4k|    if (a_bits <= DBL_MANT_DIG + 2) {
  ------------------
  |  Branch (3515:9): [True: 8.35k, False: 6.07k]
  ------------------
 3516|  8.35k|        shift_digits = (DBL_MANT_DIG + 2 - (Py_ssize_t)a_bits) / PyLong_SHIFT;
  ------------------
  |  |   47|  8.35k|#define PyLong_SHIFT    30
  ------------------
 3517|  8.35k|        shift_bits = (DBL_MANT_DIG + 2 - (int)a_bits) % PyLong_SHIFT;
  ------------------
  |  |   47|  8.35k|#define PyLong_SHIFT    30
  ------------------
 3518|  8.35k|        x_size = shift_digits;
 3519|  8.35k|        rem = v_lshift(x_digits + x_size, a->long_value.ob_digit, a_size,
 3520|  8.35k|                       shift_bits);
 3521|  8.35k|        x_size += a_size;
 3522|  8.35k|        x_digits[x_size++] = rem;
 3523|  8.35k|    }
 3524|  6.07k|    else {
 3525|  6.07k|        shift_digits = (Py_ssize_t)((a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT);
  ------------------
  |  |   47|  6.07k|#define PyLong_SHIFT    30
  ------------------
 3526|  6.07k|        shift_bits = (int)((a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT);
  ------------------
  |  |   47|  6.07k|#define PyLong_SHIFT    30
  ------------------
 3527|  6.07k|        rem = v_rshift(x_digits, a->long_value.ob_digit + shift_digits,
 3528|  6.07k|                       a_size - shift_digits, shift_bits);
 3529|  6.07k|        x_size = a_size - shift_digits;
 3530|       |        /* For correct rounding below, we need the least significant
 3531|       |           bit of x to be 'sticky' for this shift: if any of the bits
 3532|       |           shifted out was nonzero, we set the least significant bit
 3533|       |           of x. */
 3534|  6.07k|        if (rem)
  ------------------
  |  Branch (3534:13): [True: 4.35k, False: 1.72k]
  ------------------
 3535|  4.35k|            x_digits[0] |= 1;
 3536|  1.72k|        else
 3537|  2.97k|            while (shift_digits > 0)
  ------------------
  |  Branch (3537:20): [True: 1.87k, False: 1.10k]
  ------------------
 3538|  1.87k|                if (a->long_value.ob_digit[--shift_digits]) {
  ------------------
  |  Branch (3538:21): [True: 614, False: 1.25k]
  ------------------
 3539|    614|                    x_digits[0] |= 1;
 3540|    614|                    break;
 3541|    614|                }
 3542|  6.07k|    }
 3543|  14.4k|    assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
  ------------------
  |  Branch (3543:5): [True: 14.4k, False: 0]
  |  Branch (3543:5): [True: 14.4k, False: 0]
  ------------------
 3544|       |
 3545|       |    /* Round, and convert to double. */
 3546|  14.4k|    x_digits[0] += half_even_correction[x_digits[0] & 7];
 3547|  14.4k|    dx = x_digits[--x_size];
 3548|  41.1k|    while (x_size > 0)
  ------------------
  |  Branch (3548:12): [True: 26.7k, False: 14.4k]
  ------------------
 3549|  26.7k|        dx = dx * PyLong_BASE + x_digits[--x_size];
  ------------------
  |  |   61|  26.7k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  26.7k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
 3550|       |
 3551|       |    /* Rescale;  make correction if result is 1.0. */
 3552|  14.4k|    dx /= 4.0 * EXP2_DBL_MANT_DIG;
  ------------------
  |  | 3462|  14.4k|#define EXP2_DBL_MANT_DIG 9007199254740992.0
  ------------------
 3553|  14.4k|    if (dx == 1.0) {
  ------------------
  |  Branch (3553:9): [True: 169, False: 14.2k]
  ------------------
 3554|    169|        assert(a_bits < INT64_MAX);
  ------------------
  |  Branch (3554:9): [True: 169, False: 0]
  ------------------
 3555|    169|        dx = 0.5;
 3556|    169|        a_bits += 1;
 3557|    169|    }
 3558|       |
 3559|  14.4k|    *e = a_bits;
 3560|  14.4k|    return _PyLong_IsNegative(a) ? -dx : dx;
  ------------------
  |  Branch (3560:12): [True: 2.32k, False: 12.1k]
  ------------------
 3561|  14.4k|}
PyLong_AsDouble:
 3568|   173k|{
 3569|   173k|    int64_t exponent;
 3570|   173k|    double x;
 3571|       |
 3572|   173k|    if (v == NULL) {
  ------------------
  |  Branch (3572:9): [True: 0, False: 173k]
  ------------------
 3573|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3574|      0|        return -1.0;
 3575|      0|    }
 3576|   173k|    if (!PyLong_Check(v)) {
  ------------------
  |  |   13|   173k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   173k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3576:9): [True: 0, False: 173k]
  ------------------
 3577|      0|        PyErr_SetString(PyExc_TypeError, "an integer is required");
 3578|      0|        return -1.0;
 3579|      0|    }
 3580|   173k|    if (_PyLong_IsCompact((PyLongObject *)v)) {
  ------------------
  |  Branch (3580:9): [True: 159k, False: 14.4k]
  ------------------
 3581|       |        /* Fast path; single digit long (31 bits) will cast safely
 3582|       |           to double.  This improves performance of FP/long operations
 3583|       |           by 20%.
 3584|       |        */
 3585|   159k|        return (double)medium_value((PyLongObject *)v);
  ------------------
  |  |   27|   159k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 3586|   159k|    }
 3587|  14.4k|    x = _PyLong_Frexp((PyLongObject *)v, &exponent);
 3588|  14.4k|    assert(exponent >= 0);
  ------------------
  |  Branch (3588:5): [True: 14.4k, False: 0]
  ------------------
 3589|  14.4k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (3589:5): [True: 14.4k, False: 0]
  ------------------
 3590|  14.4k|    if (exponent > DBL_MAX_EXP) {
  ------------------
  |  Branch (3590:9): [True: 263, False: 14.1k]
  ------------------
 3591|    263|        PyErr_SetString(PyExc_OverflowError,
 3592|    263|                        "int too large to convert to float");
 3593|    263|        return -1.0;
 3594|    263|    }
 3595|  14.1k|    return ldexp(x, (int)exponent);
 3596|  14.4k|}
_PyLong_ExactDealloc:
 3639|  8.62M|{
 3640|  8.62M|    assert(PyLong_CheckExact(self));
  ------------------
  |  Branch (3640:5): [True: 8.62M, False: 0]
  ------------------
 3641|  8.62M|    if (_PyLong_IsSmallInt((PyLongObject *)self)) {
  ------------------
  |  Branch (3641:9): [True: 0, False: 8.62M]
  ------------------
 3642|       |        // See PEP 683, section Accidental De-Immortalizing for details
 3643|      0|        _Py_SetImmortal(self);
 3644|      0|        return;
 3645|      0|    }
 3646|  8.62M|    if (_PyLong_IsCompact((PyLongObject *)self)) {
  ------------------
  |  Branch (3646:9): [True: 8.50M, False: 120k]
  ------------------
 3647|  8.50M|        _Py_FREELIST_FREE(ints, self, PyObject_Free);
  ------------------
  |  |   35|  8.50M|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  8.50M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.50M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  8.50M|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   20|  8.50M|#  define Py_ints_MAXFREELIST 100
  |  |  ------------------
  ------------------
 3648|  8.50M|        return;
 3649|  8.50M|    }
 3650|   120k|    PyObject_Free(self);
 3651|   120k|}
_PyCompactLong_Add:
 3871|  31.1M|{
 3872|  31.1M|    assert(_PyLong_BothAreCompact(a, b));
  ------------------
  |  Branch (3872:5): [True: 31.1M, False: 0]
  ------------------
 3873|  31.1M|    stwodigits v = medium_value(a) + medium_value(b);
  ------------------
  |  |   27|  31.1M|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                  stwodigits v = medium_value(a) + medium_value(b);
  ------------------
  |  |   27|  31.1M|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 3874|  31.1M|    return medium_from_stwodigits(v);
 3875|  31.1M|}
_PyCompactLong_Subtract:
 3916|  2.02M|{
 3917|  2.02M|    assert(_PyLong_BothAreCompact(a, b));
  ------------------
  |  Branch (3917:5): [True: 2.02M, False: 0]
  ------------------
 3918|  2.02M|    stwodigits v = medium_value(a) - medium_value(b);
  ------------------
  |  |   27|  2.02M|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                  stwodigits v = medium_value(a) - medium_value(b);
  ------------------
  |  |   27|  2.02M|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 3919|  2.02M|    return medium_from_stwodigits(v);
 3920|  2.02M|}
_PyCompactLong_Multiply:
 4363|  1.53M|{
 4364|  1.53M|    assert(_PyLong_BothAreCompact(a, b));
  ------------------
  |  Branch (4364:5): [True: 1.53M, False: 0]
  ------------------
 4365|  1.53M|    stwodigits v = medium_value(a) * medium_value(b);
  ------------------
  |  |   27|  1.53M|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                  stwodigits v = medium_value(a) * medium_value(b);
  ------------------
  |  |   27|  1.53M|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 4366|  1.53M|    return medium_from_stwodigits(v);
 4367|  1.53M|}
_PyLong_Rshift:
 5431|  7.53k|{
 5432|  7.53k|    Py_ssize_t wordshift;
 5433|  7.53k|    digit remshift;
 5434|       |
 5435|  7.53k|    assert(PyLong_Check(a));
  ------------------
  |  Branch (5435:5): [True: 7.53k, False: 0]
  ------------------
 5436|  7.53k|    assert(shiftby >= 0);
  ------------------
  |  Branch (5436:5): [True: 7.53k, False: 0]
  ------------------
 5437|  7.53k|    if (_PyLong_IsZero((PyLongObject *)a)) {
  ------------------
  |  Branch (5437:9): [True: 0, False: 7.53k]
  ------------------
 5438|      0|        return PyLong_FromLong(0);
 5439|      0|    }
 5440|       |#if PY_SSIZE_T_MAX <= INT64_MAX / PyLong_SHIFT
 5441|       |    if (shiftby > (int64_t)PY_SSIZE_T_MAX * PyLong_SHIFT) {
 5442|       |        if (_PyLong_IsNegative((PyLongObject *)a)) {
 5443|       |            return PyLong_FromLong(-1);
 5444|       |        }
 5445|       |        else {
 5446|       |            return PyLong_FromLong(0);
 5447|       |        }
 5448|       |    }
 5449|       |#endif
 5450|  7.53k|    wordshift = (Py_ssize_t)(shiftby / PyLong_SHIFT);
  ------------------
  |  |   47|  7.53k|#define PyLong_SHIFT    30
  ------------------
 5451|  7.53k|    remshift = (digit)(shiftby % PyLong_SHIFT);
  ------------------
  |  |   47|  7.53k|#define PyLong_SHIFT    30
  ------------------
 5452|  7.53k|    return long_rshift1((PyLongObject *)a, wordshift, remshift);
 5453|  7.53k|}
PyLong_GetInfo:
 6721|      2|{
 6722|      2|    PyObject* int_info;
 6723|      2|    int field = 0;
 6724|      2|    int_info = PyStructSequence_New(&Int_InfoType);
 6725|      2|    if (int_info == NULL)
  ------------------
  |  Branch (6725:9): [True: 0, False: 2]
  ------------------
 6726|      0|        return NULL;
 6727|      2|    PyStructSequence_SET_ITEM(int_info, field++,
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 6728|      2|                              PyLong_FromLong(PyLong_SHIFT));
  ------------------
  |  |   47|      2|#define PyLong_SHIFT    30
  ------------------
 6729|      2|    PyStructSequence_SET_ITEM(int_info, field++,
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 6730|      2|                              PyLong_FromLong(sizeof(digit)));
 6731|       |    /*
 6732|       |     * The following two fields were added after investigating uses of
 6733|       |     * sys.int_info in the wild: Exceedingly rarely used. The ONLY use found was
 6734|       |     * numba using sys.int_info.bits_per_digit as attribute access rather than
 6735|       |     * sequence unpacking. Cython and sympy also refer to sys.int_info but only
 6736|       |     * as info for debugging. No concern about adding these in a backport.
 6737|       |     */
 6738|      2|    PyStructSequence_SET_ITEM(int_info, field++,
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 6739|      2|                              PyLong_FromLong(_PY_LONG_DEFAULT_MAX_STR_DIGITS));
  ------------------
  |  |   29|      2|#define _PY_LONG_DEFAULT_MAX_STR_DIGITS 4300
  ------------------
 6740|      2|    PyStructSequence_SET_ITEM(int_info, field++,
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
 6741|      2|                              PyLong_FromLong(_PY_LONG_MAX_STR_DIGITS_THRESHOLD));
  ------------------
  |  |   42|      2|#define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640
  ------------------
 6742|      2|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (6742:9): [True: 0, False: 2]
  ------------------
 6743|      0|        Py_CLEAR(int_info);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6744|      0|        return NULL;
 6745|      0|    }
 6746|      2|    return int_info;
 6747|      2|}
_PyLong_InitTypes:
 6754|      2|{
 6755|       |    /* initialize int_info */
 6756|      2|    if (_PyStructSequence_InitBuiltin(interp, &Int_InfoType,
  ------------------
  |  Branch (6756:9): [True: 0, False: 2]
  ------------------
 6757|      2|                                      &int_info_desc) < 0)
 6758|      0|    {
 6759|      0|        return _PyStatus_ERR("can't init int info type");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 6760|      0|    }
 6761|       |
 6762|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 6763|      2|}
PyLong_FromInt64:
 6798|    206|{
 6799|       |    PYLONG_FROM_INT(uint64_t, int64_t, value);
  ------------------
  |  |  371|    206|    do {                                                                            \
  |  |  372|    206|        /* Handle small and medium cases. */                                        \
  |  |  373|    206|        if (IS_SMALL_INT(ival)) {                                                   \
  |  |  ------------------
  |  |  |  |   29|    206|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|    206|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   98|    206|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   97|    206|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (68:6): [True: 206, False: 0]
  |  |  |  |  |  |  |  Branch (68:37): [True: 7, False: 199]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  374|      7|            return get_small_int((sdigit)(ival));                                   \
  |  |  375|      7|        }                                                                           \
  |  |  376|    206|        if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|    199|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    199|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    199|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (-(INT_TYPE)PyLong_MASK <= (ival) && (ival) <= (INT_TYPE)PyLong_MASK) {  \
  |  |  ------------------
  |  |  |  |   62|    199|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    199|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    199|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (376:13): [True: 199, False: 0]
  |  |  |  Branch (376:49): [True: 199, False: 0]
  |  |  ------------------
  |  |  377|    199|            return _PyLong_FromMedium((sdigit)(ival));                              \
  |  |  378|    199|        }                                                                           \
  |  |  379|    199|        UINT_TYPE abs_ival = (ival) < 0 ? 0U-(UINT_TYPE)(ival) : (UINT_TYPE)(ival); \
  |  |  ------------------
  |  |  |  Branch (379:30): [True: 0, False: 0]
  |  |  ------------------
  |  |  380|      0|        /* Do shift in two steps to avoid possible undefined behavior. */           \
  |  |  381|      0|        UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |                       UINT_TYPE t = abs_ival >> PyLong_SHIFT >> PyLong_SHIFT;                     \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  382|      0|        /* Count digits (at least two - smaller cases were handled above). */       \
  |  |  383|      0|        Py_ssize_t ndigits = 2;                                                     \
  |  |  384|      0|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (384:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  385|      0|            ++ndigits;                                                              \
  |  |  386|      0|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  387|      0|        }                                                                           \
  |  |  388|      0|        /* Construct output value. */                                               \
  |  |  389|      0|        PyLongObject *v = long_alloc(ndigits);                                      \
  |  |  390|      0|        if (v == NULL) {                                                            \
  |  |  ------------------
  |  |  |  Branch (390:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  391|      0|            return NULL;                                                            \
  |  |  392|      0|        }                                                                           \
  |  |  393|      0|        digit *p = v->long_value.ob_digit;                                          \
  |  |  394|      0|        _PyLong_SetSignAndDigitCount(v, (ival) < 0 ? -1 : 1, ndigits);              \
  |  |  ------------------
  |  |  |  Branch (394:41): [True: 0, False: 0]
  |  |  ------------------
  |  |  395|      0|        t = abs_ival;                                                               \
  |  |  396|      0|        while (t) {                                                                 \
  |  |  ------------------
  |  |  |  Branch (396:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  397|      0|            *p++ = (digit)(t & PyLong_MASK);                                        \
  |  |  ------------------
  |  |  |  |   62|      0|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      0|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  398|      0|            t >>= PyLong_SHIFT;                                                     \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  |  399|      0|        }                                                                           \
  |  |  400|      0|        return (PyObject *)v;                                                       \
  |  |  401|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (401:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6800|    206|}
PyLong_AsInt64:
 6831|  19.4k|{
 6832|  19.4k|    LONG_TO_INT(int64_t, obj, result);
  ------------------
  |  | 6808|  19.4k|    do { \
  |  | 6809|  19.4k|        type value; \
  |  | 6810|  19.4k|        int flags = (Py_ASNATIVEBYTES_NATIVE_ENDIAN \
  |  |  ------------------
  |  |  |  |   47|  19.4k|#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
  |  |  ------------------
  |  | 6811|  19.4k|                     | Py_ASNATIVEBYTES_ALLOW_INDEX); \
  |  |  ------------------
  |  |  |  |   50|  19.4k|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  |  |  ------------------
  |  | 6812|  19.4k|        Py_ssize_t bytes = PyLong_AsNativeBytes(obj, &value, sizeof(value), flags); \
  |  | 6813|  19.4k|        if (bytes < 0) { \
  |  |  ------------------
  |  |  |  Branch (6813:13): [True: 0, False: 19.4k]
  |  |  ------------------
  |  | 6814|      0|            return -1; \
  |  | 6815|      0|        } \
  |  | 6816|  19.4k|        if ((size_t)bytes > sizeof(value)) { \
  |  |  ------------------
  |  |  |  Branch (6816:13): [True: 4.70k, False: 14.7k]
  |  |  ------------------
  |  | 6817|  4.70k|            PyErr_SetString(PyExc_OverflowError, \
  |  | 6818|  4.70k|                            "Python int too large to convert to C " #type); \
  |  | 6819|  4.70k|            return -1; \
  |  | 6820|  4.70k|        } \
  |  | 6821|  19.4k|        *result = value; \
  |  | 6822|  14.7k|        return 0; \
  |  | 6823|  19.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (6823:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6833|  19.4k|}
PyLong_GetNativeLayout:
 6876|     12|{
 6877|     12|    return &PyLong_LAYOUT;
 6878|     12|}
PyLongWriter_Create:
 6939|     12|{
 6940|     12|    if (ndigits <= 0) {
  ------------------
  |  Branch (6940:9): [True: 0, False: 12]
  ------------------
 6941|      0|        PyErr_SetString(PyExc_ValueError, "ndigits must be positive");
 6942|      0|        goto error;
 6943|      0|    }
 6944|     12|    assert(digits != NULL);
  ------------------
  |  Branch (6944:5): [True: 12, False: 0]
  ------------------
 6945|       |
 6946|     12|    PyLongObject *obj = long_alloc(ndigits);
 6947|     12|    if (obj == NULL) {
  ------------------
  |  Branch (6947:9): [True: 0, False: 12]
  ------------------
 6948|      0|        goto error;
 6949|      0|    }
 6950|     12|    if (negative) {
  ------------------
  |  Branch (6950:9): [True: 1, False: 11]
  ------------------
 6951|      1|        _PyLong_FlipSign(obj);
 6952|      1|    }
 6953|       |
 6954|     12|    *digits = obj->long_value.ob_digit;
 6955|     12|    return (PyLongWriter*)obj;
 6956|       |
 6957|      0|error:
 6958|      0|    *digits = NULL;
 6959|       |    return NULL;
 6960|     12|}
PyLongWriter_Finish:
 6978|     12|{
 6979|     12|    PyLongObject *obj = (PyLongObject *)writer;
 6980|     12|    assert(Py_REFCNT(obj) == 1);
  ------------------
  |  Branch (6980:5): [True: 12, False: 0]
  ------------------
 6981|       |
 6982|       |#ifdef Py_DEBUG
 6983|       |    // gh-147988: Detect uninitialized digits: long_alloc() fills digits with
 6984|       |    // 0xFF byte pattern. It's posssible because PyLong_BASE is smaller than
 6985|       |    // the maximum value of the C digit type (uint32_t or unsigned short):
 6986|       |    // most significan bits are unused by the API.
 6987|       |    Py_ssize_t ndigits = _PyLong_DigitCount(obj);
 6988|       |    if (ndigits == 0) {
 6989|       |        // Check ob_digit[0] digit for the number zero
 6990|       |        ndigits = 1;
 6991|       |    }
 6992|       |    for (Py_ssize_t i = 0; i < ndigits; i++) {
 6993|       |        digit d = obj->long_value.ob_digit[i];
 6994|       |        if (d & ~(digit)PyLong_MASK) {
 6995|       |            Py_DECREF(obj);
 6996|       |            PyErr_Format(PyExc_SystemError,
 6997|       |                         "PyLongWriter_Finish: digit %zd is uninitialized",
 6998|       |                         i);
 6999|       |            return NULL;
 7000|       |        }
 7001|       |    }
 7002|       |#endif
 7003|       |
 7004|       |    // Normalize and get singleton if possible
 7005|     12|    obj = maybe_small_long(long_normalize(obj));
 7006|       |
 7007|     12|    return (PyObject*)obj;
 7008|     12|}
longobject.c:long_alloc:
  160|   727k|{
  161|   727k|    assert(size >= 0);
  ------------------
  |  Branch (161:5): [True: 727k, False: 0]
  ------------------
  162|   727k|    PyLongObject *result = NULL;
  163|   727k|    if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
  ------------------
  |  |  155|   727k|# define MAX_LONG_DIGITS ((INT64_MAX-1) / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|   727k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (163:9): [True: 0, False: 727k]
  ------------------
  164|      0|        PyErr_SetString(PyExc_OverflowError,
  165|      0|                        "too many digits in integer");
  166|      0|        return NULL;
  167|      0|    }
  168|       |    /* Fast operations for single digit integers (including zero)
  169|       |     * assume that there is always at least one digit present. */
  170|   727k|    Py_ssize_t ndigits = size ? size : 1;
  ------------------
  |  Branch (170:26): [True: 726k, False: 1.37k]
  ------------------
  171|       |
  172|   727k|    if (ndigits == 1) {
  ------------------
  |  Branch (172:9): [True: 12.2k, False: 715k]
  ------------------
  173|  12.2k|        result = (PyLongObject *)_Py_FREELIST_POP(PyLongObject, ints);
  ------------------
  |  |   43|  12.2k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  12.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  174|  12.2k|    }
  175|   727k|    if (result == NULL) {
  ------------------
  |  Branch (175:9): [True: 715k, False: 12.0k]
  ------------------
  176|       |        /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
  177|       |        sizeof(digit)*size.  Previous incarnations of this code used
  178|       |        sizeof() instead of the offsetof, but this risks being
  179|       |        incorrect in the presence of padding between the header
  180|       |        and the digits. */
  181|   715k|        result = PyObject_Malloc(offsetof(PyLongObject, long_value.ob_digit) +
  182|   715k|                                ndigits*sizeof(digit));
  183|   715k|        if (!result) {
  ------------------
  |  Branch (183:13): [True: 0, False: 715k]
  ------------------
  184|      0|            PyErr_NoMemory();
  185|      0|            return NULL;
  186|      0|        }
  187|   715k|        _PyObject_Init((PyObject*)result, &PyLong_Type);
  188|   715k|        _PyLong_InitTag(result);
  189|   715k|    }
  190|   727k|    _PyLong_SetSignAndDigitCount(result, size != 0, size);
  191|       |#ifdef Py_DEBUG
  192|       |    // gh-147988: Fill digits with an invalid pattern to catch usage
  193|       |    // of uninitialized digits.
  194|       |    memset(result->long_value.ob_digit, 0xFF, ndigits * sizeof(digit));
  195|       |#endif
  196|   727k|    return result;
  197|   727k|}
longobject.c:get_small_int:
   62|  47.0M|{
   63|  47.0M|    assert(IS_SMALL_INT(ival));
  ------------------
  |  Branch (63:5): [True: 47.0M, False: 0]
  |  Branch (63:5): [True: 47.0M, False: 0]
  ------------------
   64|  47.0M|    return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + ival];
  ------------------
  |  |   59|  47.0M|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|  47.0M|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  47.0M|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + ival];
  ------------------
  |  |   98|  47.0M|#define _PY_NSMALLNEGINTS           5
  ------------------
   65|  47.0M|}
longobject.c:_PyLong_FromMedium:
  252|  11.1M|{
  253|  11.1M|    assert(!IS_SMALL_INT(x));
  ------------------
  |  Branch (253:5): [True: 11.1M, False: 56.5k]
  |  Branch (253:5): [True: 0, False: 11.1M]
  ------------------
  254|  11.1M|    assert(is_medium_int(x));
  ------------------
  |  Branch (254:5): [True: 11.1M, False: 0]
  ------------------
  255|       |
  256|  11.1M|    PyLongObject *v = (PyLongObject *)_Py_FREELIST_POP(PyLongObject, ints);
  ------------------
  |  |   43|  11.1M|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  11.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  257|  11.1M|    if (v == NULL) {
  ------------------
  |  Branch (257:9): [True: 527k, False: 10.6M]
  ------------------
  258|   527k|        v = PyObject_Malloc(sizeof(PyLongObject));
  259|   527k|        if (v == NULL) {
  ------------------
  |  Branch (259:13): [True: 0, False: 527k]
  ------------------
  260|      0|            PyErr_NoMemory();
  261|      0|            return NULL;
  262|      0|        }
  263|   527k|        _PyObject_Init((PyObject*)v, &PyLong_Type);
  264|   527k|        _PyLong_InitTag(v);
  265|   527k|    }
  266|  11.1M|    digit abs_x = x < 0 ? -x : x;
  ------------------
  |  Branch (266:19): [True: 56.5k, False: 11.1M]
  ------------------
  267|  11.1M|    _PyLong_SetSignAndDigitCount(v, x<0?-1:1, 1);
  ------------------
  |  Branch (267:37): [True: 56.5k, False: 11.1M]
  ------------------
  268|  11.1M|    v->long_value.ob_digit[0] = abs_x;
  269|  11.1M|    return (PyObject*)v;
  270|  11.1M|}
longobject.c:is_medium_int:
   54|  12.9M|{
   55|       |    /* Take care that we are comparing unsigned values. */
   56|  12.9M|    twodigits x_plus_mask = ((twodigits)x) + PyLong_MASK;
  ------------------
  |  |   62|  12.9M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  12.9M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  12.9M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|  12.9M|    return x_plus_mask < ((twodigits)PyLong_MASK) + PyLong_BASE;
  ------------------
  |  |   62|  12.9M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  12.9M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  12.9M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return x_plus_mask < ((twodigits)PyLong_MASK) + PyLong_BASE;
  ------------------
  |  |   61|  12.9M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  12.9M|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
   58|  12.9M|}
longobject.c:unroll_digits_ulong:
  537|   477k|{
  538|   477k|    assert(ULONG_MAX >= ((1UL << PyLong_SHIFT) - 1));
  ------------------
  |  Branch (538:5): [True: 477k, Folded]
  ------------------
  539|       |
  540|   477k|    Py_ssize_t i = *iptr;
  541|   477k|    assert(i >= 2);
  ------------------
  |  Branch (541:5): [True: 477k, False: 0]
  ------------------
  542|       |
  543|       |    /* unroll 1 digit */
  544|   477k|    --i;
  545|   477k|    digit *digits = v->long_value.ob_digit;
  546|   477k|    unsigned long x = digits[i];
  547|       |
  548|   477k|#if (ULONG_MAX >> PyLong_SHIFT) >= ((1UL << PyLong_SHIFT) - 1)
  549|       |    /* unroll another digit */
  550|   477k|    x <<= PyLong_SHIFT;
  ------------------
  |  |   47|   477k|#define PyLong_SHIFT    30
  ------------------
  551|   477k|    --i;
  552|   477k|    x |= digits[i];
  553|   477k|#endif
  554|       |
  555|   477k|    *iptr = i;
  556|   477k|    return x;
  557|   477k|}
longobject.c:unroll_digits_size_t:
  561|  6.51k|{
  562|  6.51k|    assert(SIZE_MAX >= ((1UL << PyLong_SHIFT) - 1));
  ------------------
  |  Branch (562:5): [True: 6.51k, Folded]
  ------------------
  563|       |
  564|  6.51k|    Py_ssize_t i = *iptr;
  565|  6.51k|    assert(i >= 2);
  ------------------
  |  Branch (565:5): [True: 6.51k, False: 0]
  ------------------
  566|       |
  567|       |    /* unroll 1 digit */
  568|  6.51k|    --i;
  569|  6.51k|    digit *digits = v->long_value.ob_digit;
  570|  6.51k|    size_t x = digits[i];
  571|       |
  572|  6.51k|#if (SIZE_MAX >> PyLong_SHIFT) >= ((1 << PyLong_SHIFT) - 1)
  573|       |    /* unroll another digit */
  574|  6.51k|    x <<= PyLong_SHIFT;
  ------------------
  |  |   47|  6.51k|#define PyLong_SHIFT    30
  ------------------
  575|  6.51k|    --i;
  576|  6.51k|    x |= digits[i];
  577|  6.51k|#endif
  578|       |
  579|  6.51k|    *iptr = i;
  580|  6.51k|    return x;
  581|  6.51k|}
longobject.c:long_sign:
  936|  1.30k|{
  937|  1.30k|    assert(vv != NULL);
  ------------------
  |  Branch (937:5): [True: 1.30k, False: 0]
  ------------------
  938|  1.30k|    assert(PyLong_Check(vv));
  ------------------
  |  Branch (938:5): [True: 1.30k, False: 0]
  ------------------
  939|  1.30k|    PyLongObject *v = (PyLongObject *)vv;
  940|       |
  941|  1.30k|    if (_PyLong_IsCompact(v)) {
  ------------------
  |  Branch (941:9): [True: 892, False: 409]
  ------------------
  942|    892|        return _PyLong_CompactSign(v);
  943|    892|    }
  944|    409|    return _PyLong_NonCompactSign(v);
  945|  1.30k|}
longobject.c:bit_length_digit:
  967|   245k|{
  968|       |    // digit can be larger than unsigned long, but only PyLong_SHIFT bits
  969|       |    // of it will be ever used.
  970|       |    static_assert(PyLong_SHIFT <= sizeof(unsigned long) * 8,
  971|   245k|                  "digit is larger than unsigned long");
  972|   245k|    return _Py_bit_length((unsigned long)x);
  973|   245k|}
longobject.c:maybe_small_long:
   69|  92.5k|{
   70|  92.5k|    if (v && _PyLong_IsCompact(v)) {
  ------------------
  |  Branch (70:9): [True: 92.5k, False: 0]
  |  Branch (70:14): [True: 9.83k, False: 82.7k]
  ------------------
   71|  9.83k|        stwodigits ival = medium_value(v);
  ------------------
  |  |   27|  9.83k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
   72|  9.83k|        if (IS_SMALL_INT(ival)) {
  ------------------
  |  |   29|  9.83k|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  ------------------
  |  |  |  |   68|  9.83k|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   98|  9.83k|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  ------------------
  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  6.56k|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (68:6): [True: 6.56k, False: 3.27k]
  |  |  |  |  |  Branch (68:37): [True: 3.81k, False: 2.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|  3.81k|            _Py_DECREF_INT(v);
   74|  3.81k|            return (PyLongObject *)get_small_int((sdigit)ival);
   75|  3.81k|        }
   76|  9.83k|    }
   77|  88.7k|    return v;
   78|  92.5k|}
longobject.c:_Py_DECREF_INT:
   47|   127k|{
   48|   127k|    assert(PyLong_CheckExact(op));
  ------------------
  |  Branch (48:5): [True: 127k, False: 0]
  ------------------
   49|   127k|    _Py_DECREF_SPECIALIZED((PyObject *)op, _PyLong_ExactDealloc);
   50|   127k|}
longobject.c:long_normalize:
  127|   310k|{
  128|   310k|    Py_ssize_t j = _PyLong_DigitCount(v);
  129|   310k|    Py_ssize_t i = j;
  130|       |
  131|   475k|    while (i > 0 && v->long_value.ob_digit[i-1] == 0)
  ------------------
  |  Branch (131:12): [True: 470k, False: 4.42k]
  |  Branch (131:21): [True: 164k, False: 306k]
  ------------------
  132|   164k|        --i;
  133|   310k|    if (i != j) {
  ------------------
  |  Branch (133:9): [True: 144k, False: 166k]
  ------------------
  134|   144k|        if (i == 0) {
  ------------------
  |  Branch (134:13): [True: 2.86k, False: 141k]
  ------------------
  135|  2.86k|            _PyLong_SetSignAndDigitCount(v, 0, 0);
  136|  2.86k|        }
  137|   141k|        else {
  138|   141k|            _PyLong_SetDigitCount(v, i);
  139|   141k|        }
  140|   144k|    }
  141|   310k|    return v;
  142|   310k|}
longobject.c:_resolve_endianness:
 1271|  19.4k|{
 1272|  19.4k|    if (*endianness == -1 || (*endianness & 2)) {
  ------------------
  |  Branch (1272:9): [True: 0, False: 19.4k]
  |  Branch (1272:30): [True: 19.4k, False: 0]
  ------------------
 1273|  19.4k|        *endianness = PY_LITTLE_ENDIAN;
  ------------------
  |  |  454|  19.4k|#  define PY_LITTLE_ENDIAN 1
  ------------------
 1274|  19.4k|    } else {
 1275|      0|        *endianness &= 1;
 1276|      0|    }
 1277|  19.4k|    assert(*endianness == 0 || *endianness == 1);
  ------------------
  |  Branch (1277:5): [True: 0, False: 19.4k]
  |  Branch (1277:5): [True: 19.4k, False: 0]
  ------------------
 1278|  19.4k|    return 0;
 1279|  19.4k|}
longobject.c:_fits_in_n_bits:
 1259|  13.1k|{
 1260|  13.1k|    if (n >= (Py_ssize_t)sizeof(Py_ssize_t) * 8) {
  ------------------
  |  Branch (1260:9): [True: 13.1k, False: 0]
  ------------------
 1261|  13.1k|        return 1;
 1262|  13.1k|    }
 1263|       |    // If all bits above n are the same, we fit.
 1264|       |    // (Use n-1 if we require the sign bit to be consistent.)
 1265|      0|    Py_ssize_t v_extended = v >> ((int)n - 1);
 1266|      0|    return v_extended == 0 || v_extended == -1;
  ------------------
  |  Branch (1266:12): [True: 0, False: 0]
  |  Branch (1266:31): [True: 0, False: 0]
  ------------------
 1267|  13.1k|}
longobject.c:long_to_decimal_string_internal:
 2101|   102k|{
 2102|   102k|    PyLongObject *scratch, *a;
 2103|   102k|    PyObject *str = NULL;
 2104|   102k|    Py_ssize_t size, strlen, size_a, i, j;
 2105|   102k|    digit *pout, *pin, rem, tenpow;
 2106|   102k|    int negative;
 2107|   102k|    int d;
 2108|       |
 2109|       |    // writer or bytes_writer can be used, but not both at the same time.
 2110|   102k|    assert(writer == NULL || bytes_writer == NULL);
  ------------------
  |  Branch (2110:5): [True: 102k, False: 0]
  |  Branch (2110:5): [True: 0, False: 0]
  ------------------
 2111|       |
 2112|   102k|    a = (PyLongObject *)aa;
 2113|   102k|    if (a == NULL || !PyLong_Check(a)) {
  ------------------
  |  |   13|   102k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   102k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2113:9): [True: 0, False: 102k]
  |  Branch (2113:22): [True: 0, False: 102k]
  ------------------
 2114|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2115|      0|        return -1;
 2116|      0|    }
 2117|   102k|    size_a = _PyLong_DigitCount(a);
 2118|   102k|    negative = _PyLong_IsNegative(a);
 2119|       |
 2120|       |    /* quick and dirty pre-check for overflowing the decimal digit limit,
 2121|       |       based on the inequality 10/3 >= log2(10)
 2122|       |
 2123|       |       explanation in https://github.com/python/cpython/pull/96537
 2124|       |    */
 2125|   102k|    if (size_a >= 10 * _PY_LONG_MAX_STR_DIGITS_THRESHOLD
  ------------------
  |  |   42|   102k|#define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640
  ------------------
  |  Branch (2125:9): [True: 29, False: 102k]
  ------------------
 2126|   102k|                  / (3 * PyLong_SHIFT) + 2) {
  ------------------
  |  |   47|   102k|#define PyLong_SHIFT    30
  ------------------
 2127|     29|        PyInterpreterState *interp = _PyInterpreterState_GET();
 2128|     29|        int max_str_digits = _Py_atomic_load_int(&interp->long_state.max_str_digits);
 2129|     29|        if ((max_str_digits > 0) &&
  ------------------
  |  Branch (2129:13): [True: 29, False: 0]
  ------------------
 2130|     29|            (max_str_digits / (3 * PyLong_SHIFT) <= (size_a - 11) / 10)) {
  ------------------
  |  |   47|     29|#define PyLong_SHIFT    30
  ------------------
  |  Branch (2130:13): [True: 0, False: 29]
  ------------------
 2131|      0|            PyErr_Format(PyExc_ValueError, _MAX_STR_DIGITS_ERROR_FMT_TO_STR,
  ------------------
  |  |   33|      0|#define _MAX_STR_DIGITS_ERROR_FMT_TO_STR "Exceeds the limit (%d digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit"
  ------------------
 2132|      0|                         max_str_digits);
 2133|      0|            return -1;
 2134|      0|        }
 2135|     29|    }
 2136|       |
 2137|   102k|#if WITH_PYLONG_MODULE
 2138|   102k|    if (size_a > 1000) {
  ------------------
  |  Branch (2138:9): [True: 0, False: 102k]
  ------------------
 2139|       |        /* Switch to _pylong.int_to_decimal_string(). */
 2140|      0|        return pylong_int_to_decimal_string(aa,
 2141|      0|                                         p_output,
 2142|      0|                                         writer,
 2143|      0|                                         bytes_writer,
 2144|      0|                                         bytes_str);
 2145|      0|    }
 2146|   102k|#endif
 2147|       |
 2148|       |    /* quick and dirty upper bound for the number of digits
 2149|       |       required to express a in base _PyLong_DECIMAL_BASE:
 2150|       |
 2151|       |         #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
 2152|       |
 2153|       |       But log2(a) < size_a * PyLong_SHIFT, and
 2154|       |       log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
 2155|       |                                  > 3.3 * _PyLong_DECIMAL_SHIFT
 2156|       |
 2157|       |         size_a * PyLong_SHIFT / (3.3 * _PyLong_DECIMAL_SHIFT) =
 2158|       |             size_a + size_a / d < size_a + size_a / floor(d),
 2159|       |       where d = (3.3 * _PyLong_DECIMAL_SHIFT) /
 2160|       |                 (PyLong_SHIFT - 3.3 * _PyLong_DECIMAL_SHIFT)
 2161|       |    */
 2162|   102k|    d = (33 * _PyLong_DECIMAL_SHIFT) /
  ------------------
  |  |   48|   102k|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  ------------------
 2163|   102k|        (10 * PyLong_SHIFT - 33 * _PyLong_DECIMAL_SHIFT);
  ------------------
  |  |   47|   102k|#define PyLong_SHIFT    30
  ------------------
                      (10 * PyLong_SHIFT - 33 * _PyLong_DECIMAL_SHIFT);
  ------------------
  |  |   48|   102k|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  ------------------
 2164|   102k|    assert(size_a < PY_SSIZE_T_MAX/2);
  ------------------
  |  Branch (2164:5): [True: 102k, False: 0]
  ------------------
 2165|   102k|    size = 1 + size_a + size_a / d;
 2166|   102k|    scratch = long_alloc(size);
 2167|   102k|    if (scratch == NULL)
  ------------------
  |  Branch (2167:9): [True: 0, False: 102k]
  ------------------
 2168|      0|        return -1;
 2169|       |
 2170|       |    /* convert array of base _PyLong_BASE digits in pin to an array of
 2171|       |       base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
 2172|       |       Volume 2 (3rd edn), section 4.4, Method 1b). */
 2173|   102k|    pin = a->long_value.ob_digit;
 2174|   102k|    pout = scratch->long_value.ob_digit;
 2175|   102k|    size = 0;
 2176|   213k|    for (i = size_a; --i >= 0; ) {
  ------------------
  |  Branch (2176:22): [True: 111k, False: 102k]
  ------------------
 2177|   111k|        digit hi = pin[i];
 2178|   250k|        for (j = 0; j < size; j++) {
  ------------------
  |  Branch (2178:21): [True: 139k, False: 111k]
  ------------------
 2179|   139k|            twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
  ------------------
  |  |   47|   139k|#define PyLong_SHIFT    30
  ------------------
 2180|   139k|            hi = (digit)(z / _PyLong_DECIMAL_BASE);
  ------------------
  |  |   49|   139k|#define _PyLong_DECIMAL_BASE    ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */
  ------------------
 2181|   139k|            pout[j] = (digit)(z - (twodigits)hi *
 2182|   139k|                              _PyLong_DECIMAL_BASE);
  ------------------
  |  |   49|   139k|#define _PyLong_DECIMAL_BASE    ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */
  ------------------
 2183|   139k|        }
 2184|   222k|        while (hi) {
  ------------------
  |  Branch (2184:16): [True: 111k, False: 111k]
  ------------------
 2185|   111k|            pout[size++] = hi % _PyLong_DECIMAL_BASE;
  ------------------
  |  |   49|   111k|#define _PyLong_DECIMAL_BASE    ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */
  ------------------
 2186|   111k|            hi /= _PyLong_DECIMAL_BASE;
  ------------------
  |  |   49|   111k|#define _PyLong_DECIMAL_BASE    ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */
  ------------------
 2187|   111k|        }
 2188|       |        /* check for keyboard interrupt */
 2189|   111k|        SIGCHECK({
  ------------------
  |  |  117|   111k|    do {                                        \
  |  |  118|   111k|        if (PyErr_CheckSignals()) PyTryBlock    \
  |  |  ------------------
  |  |  |  Branch (118:13): [True: 0, False: 111k]
  |  |  ------------------
  |  |  119|   111k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (119:13): [Folded, False: 111k]
  |  |  ------------------
  ------------------
 2190|   111k|                Py_DECREF(scratch);
 2191|   111k|                return -1;
 2192|   111k|            });
 2193|   111k|    }
 2194|       |    /* pout should have at least one digit, so that the case when a = 0
 2195|       |       works correctly */
 2196|   102k|    if (size == 0)
  ------------------
  |  Branch (2196:9): [True: 2.51k, False: 100k]
  ------------------
 2197|  2.51k|        pout[size++] = 0;
 2198|       |
 2199|       |    /* calculate exact length of output string, and allocate */
 2200|   102k|    strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
  ------------------
  |  |   48|   102k|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  ------------------
 2201|   102k|    tenpow = 10;
 2202|   102k|    rem = pout[size-1];
 2203|   190k|    while (rem >= tenpow) {
  ------------------
  |  Branch (2203:12): [True: 87.5k, False: 102k]
  ------------------
 2204|  87.5k|        tenpow *= 10;
 2205|  87.5k|        strlen++;
 2206|  87.5k|    }
 2207|   102k|    if (strlen > _PY_LONG_MAX_STR_DIGITS_THRESHOLD) {
  ------------------
  |  |   42|   102k|#define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640
  ------------------
  |  Branch (2207:9): [True: 30, False: 102k]
  ------------------
 2208|     30|        PyInterpreterState *interp = _PyInterpreterState_GET();
 2209|     30|        int max_str_digits = _Py_atomic_load_int(&interp->long_state.max_str_digits);
 2210|     30|        Py_ssize_t strlen_nosign = strlen - negative;
 2211|     30|        if ((max_str_digits > 0) && (strlen_nosign > max_str_digits)) {
  ------------------
  |  Branch (2211:13): [True: 30, False: 0]
  |  Branch (2211:37): [True: 0, False: 30]
  ------------------
 2212|      0|            Py_DECREF(scratch);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2213|      0|            PyErr_Format(PyExc_ValueError, _MAX_STR_DIGITS_ERROR_FMT_TO_STR,
  ------------------
  |  |   33|      0|#define _MAX_STR_DIGITS_ERROR_FMT_TO_STR "Exceeds the limit (%d digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit"
  ------------------
 2214|      0|                         max_str_digits);
 2215|      0|            return -1;
 2216|      0|        }
 2217|     30|    }
 2218|   102k|    if (writer) {
  ------------------
  |  Branch (2218:9): [True: 0, False: 102k]
  ------------------
 2219|      0|        if (_PyUnicodeWriter_Prepare(writer, strlen, '9') == -1) {
  ------------------
  |  |  562|      0|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  563|      0|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|      0|     ? 0                                                              \
  |  |  565|      0|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (2219:13): [True: 0, False: 0]
  ------------------
 2220|      0|            Py_DECREF(scratch);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2221|      0|            return -1;
 2222|      0|        }
 2223|      0|        assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (2223:9): [True: 0, False: 0]
  ------------------
 2224|      0|    }
 2225|   102k|    else if (bytes_writer) {
  ------------------
  |  Branch (2225:14): [True: 0, False: 102k]
  ------------------
 2226|      0|        *bytes_str = PyBytesWriter_GrowAndUpdatePointer(bytes_writer, strlen,
 2227|      0|                                                        *bytes_str);
 2228|      0|        if (*bytes_str == NULL) {
  ------------------
  |  Branch (2228:13): [True: 0, False: 0]
  ------------------
 2229|      0|            Py_DECREF(scratch);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2230|      0|            return -1;
 2231|      0|        }
 2232|      0|    }
 2233|   102k|    else {
 2234|   102k|        str = PyUnicode_New(strlen, '9');
 2235|   102k|        if (str == NULL) {
  ------------------
  |  Branch (2235:13): [True: 0, False: 102k]
  ------------------
 2236|      0|            Py_DECREF(scratch);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2237|      0|            return -1;
 2238|      0|        }
 2239|   102k|    }
 2240|       |
 2241|   102k|#define WRITE_DIGITS(p)                                               \
 2242|   102k|    do {                                                              \
 2243|       |        /* pout[0] through pout[size-2] contribute exactly            \
 2244|       |           _PyLong_DECIMAL_SHIFT digits each */                       \
 2245|   102k|        for (i=0; i < size - 1; i++) {                                \
 2246|   102k|            rem = pout[i];                                            \
 2247|   102k|            for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {             \
 2248|   102k|                *--p = '0' + rem % 10;                                \
 2249|   102k|                rem /= 10;                                            \
 2250|   102k|            }                                                         \
 2251|   102k|        }                                                             \
 2252|       |        /* pout[size-1]: always produce at least one decimal digit */ \
 2253|   102k|        rem = pout[i];                                                \
 2254|   102k|        do {                                                          \
 2255|   102k|            *--p = '0' + rem % 10;                                    \
 2256|   102k|            rem /= 10;                                                \
 2257|   102k|        } while (rem != 0);                                           \
 2258|   102k|                                                                      \
 2259|       |        /* and sign */                                                \
 2260|   102k|        if (negative)                                                 \
 2261|   102k|            *--p = '-';                                               \
 2262|   102k|    } while (0)
 2263|       |
 2264|   102k|#define WRITE_UNICODE_DIGITS(TYPE)                                    \
 2265|   102k|    do {                                                              \
 2266|   102k|        if (writer)                                                   \
 2267|   102k|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
 2268|   102k|        else                                                          \
 2269|   102k|            p = (TYPE*)PyUnicode_DATA(str) + strlen;                  \
 2270|   102k|                                                                      \
 2271|   102k|        WRITE_DIGITS(p);                                              \
 2272|   102k|                                                                      \
 2273|       |        /* check we've counted correctly */                           \
 2274|   102k|        if (writer)                                                   \
 2275|   102k|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
 2276|   102k|        else                                                          \
 2277|   102k|            assert(p == (TYPE*)PyUnicode_DATA(str));                  \
 2278|   102k|    } while (0)
 2279|       |
 2280|       |    /* fill the string right-to-left */
 2281|   102k|    if (bytes_writer) {
  ------------------
  |  Branch (2281:9): [True: 0, False: 102k]
  ------------------
 2282|      0|        char *p = *bytes_str + strlen;
 2283|      0|        WRITE_DIGITS(p);
  ------------------
  |  | 2242|      0|    do {                                                              \
  |  | 2243|      0|        /* pout[0] through pout[size-2] contribute exactly            \
  |  | 2244|      0|           _PyLong_DECIMAL_SHIFT digits each */                       \
  |  | 2245|      0|        for (i=0; i < size - 1; i++) {                                \
  |  |  ------------------
  |  |  |  Branch (2245:19): [True: 0, False: 0]
  |  |  ------------------
  |  | 2246|      0|            rem = pout[i];                                            \
  |  | 2247|      0|            for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {             \
  |  |  ------------------
  |  |  |  |   48|      0|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  |  |  ------------------
  |  |  |  Branch (2247:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 2248|      0|                *--p = '0' + rem % 10;                                \
  |  | 2249|      0|                rem /= 10;                                            \
  |  | 2250|      0|            }                                                         \
  |  | 2251|      0|        }                                                             \
  |  | 2252|      0|        /* pout[size-1]: always produce at least one decimal digit */ \
  |  | 2253|      0|        rem = pout[i];                                                \
  |  | 2254|      0|        do {                                                          \
  |  | 2255|      0|            *--p = '0' + rem % 10;                                    \
  |  | 2256|      0|            rem /= 10;                                                \
  |  | 2257|      0|        } while (rem != 0);                                           \
  |  |  ------------------
  |  |  |  Branch (2257:18): [True: 0, False: 0]
  |  |  ------------------
  |  | 2258|      0|                                                                      \
  |  | 2259|      0|        /* and sign */                                                \
  |  | 2260|      0|        if (negative)                                                 \
  |  |  ------------------
  |  |  |  Branch (2260:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2261|      0|            *--p = '-';                                               \
  |  | 2262|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2262:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2284|      0|        assert(p == *bytes_str);
  ------------------
  |  Branch (2284:9): [True: 0, False: 0]
  ------------------
 2285|      0|    }
 2286|   102k|    else {
 2287|   102k|        int kind = writer ? writer->kind : PyUnicode_KIND(str);
  ------------------
  |  |  258|   102k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   205k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 102k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2287:20): [True: 0, False: 102k]
  ------------------
 2288|   102k|        if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (2288:13): [True: 102k, False: 0]
  ------------------
 2289|   102k|            Py_UCS1 *p;
 2290|   102k|            WRITE_UNICODE_DIGITS(Py_UCS1);
  ------------------
  |  | 2265|   102k|    do {                                                              \
  |  | 2266|   102k|        if (writer)                                                   \
  |  |  ------------------
  |  |  |  Branch (2266:13): [True: 0, False: 102k]
  |  |  ------------------
  |  | 2267|   102k|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2268|   102k|        else                                                          \
  |  | 2269|   102k|            p = (TYPE*)PyUnicode_DATA(str) + strlen;                  \
  |  |  ------------------
  |  |  |  |  284|   102k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   102k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   102k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2270|   102k|                                                                      \
  |  | 2271|   102k|        WRITE_DIGITS(p);                                              \
  |  |  ------------------
  |  |  |  | 2242|   102k|    do {                                                              \
  |  |  |  | 2243|   102k|        /* pout[0] through pout[size-2] contribute exactly            \
  |  |  |  | 2244|   102k|           _PyLong_DECIMAL_SHIFT digits each */                       \
  |  |  |  | 2245|   113k|        for (i=0; i < size - 1; i++) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2245:19): [True: 11.0k, False: 102k]
  |  |  |  |  ------------------
  |  |  |  | 2246|  11.0k|            rem = pout[i];                                            \
  |  |  |  | 2247|   110k|            for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|   110k|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2247:25): [True: 99.4k, False: 11.0k]
  |  |  |  |  ------------------
  |  |  |  | 2248|  99.4k|                *--p = '0' + rem % 10;                                \
  |  |  |  | 2249|  99.4k|                rem /= 10;                                            \
  |  |  |  | 2250|  99.4k|            }                                                         \
  |  |  |  | 2251|  11.0k|        }                                                             \
  |  |  |  | 2252|   102k|        /* pout[size-1]: always produce at least one decimal digit */ \
  |  |  |  | 2253|   102k|        rem = pout[i];                                                \
  |  |  |  | 2254|   190k|        do {                                                          \
  |  |  |  | 2255|   190k|            *--p = '0' + rem % 10;                                    \
  |  |  |  | 2256|   190k|            rem /= 10;                                                \
  |  |  |  | 2257|   190k|        } while (rem != 0);                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2257:18): [True: 87.5k, False: 102k]
  |  |  |  |  ------------------
  |  |  |  | 2258|   102k|                                                                      \
  |  |  |  | 2259|   102k|        /* and sign */                                                \
  |  |  |  | 2260|   102k|        if (negative)                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2260:13): [True: 0, False: 102k]
  |  |  |  |  ------------------
  |  |  |  | 2261|   102k|            *--p = '-';                                               \
  |  |  |  | 2262|   102k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2262:14): [Folded, False: 102k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2272|   102k|                                                                      \
  |  | 2273|   102k|        /* check we've counted correctly */                           \
  |  | 2274|   102k|        if (writer)                                                   \
  |  |  ------------------
  |  |  |  Branch (2274:13): [True: 0, False: 102k]
  |  |  ------------------
  |  | 2275|   102k|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
  |  | 2276|   102k|        else                                                          \
  |  | 2277|   102k|            assert(p == (TYPE*)PyUnicode_DATA(str));                  \
  |  | 2278|   102k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2278:14): [Folded, False: 102k]
  |  |  ------------------
  ------------------
  |  Branch (2290:13): [True: 0, False: 0]
  |  Branch (2290:13): [True: 102k, False: 0]
  ------------------
 2291|   102k|        }
 2292|      0|        else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (2292:18): [True: 0, False: 0]
  ------------------
 2293|      0|            Py_UCS2 *p;
 2294|      0|            WRITE_UNICODE_DIGITS(Py_UCS2);
  ------------------
  |  | 2265|      0|    do {                                                              \
  |  | 2266|      0|        if (writer)                                                   \
  |  |  ------------------
  |  |  |  Branch (2266:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2267|      0|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2268|      0|        else                                                          \
  |  | 2269|      0|            p = (TYPE*)PyUnicode_DATA(str) + strlen;                  \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2270|      0|                                                                      \
  |  | 2271|      0|        WRITE_DIGITS(p);                                              \
  |  |  ------------------
  |  |  |  | 2242|      0|    do {                                                              \
  |  |  |  | 2243|      0|        /* pout[0] through pout[size-2] contribute exactly            \
  |  |  |  | 2244|      0|           _PyLong_DECIMAL_SHIFT digits each */                       \
  |  |  |  | 2245|      0|        for (i=0; i < size - 1; i++) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2245:19): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2246|      0|            rem = pout[i];                                            \
  |  |  |  | 2247|      0|            for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2247:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2248|      0|                *--p = '0' + rem % 10;                                \
  |  |  |  | 2249|      0|                rem /= 10;                                            \
  |  |  |  | 2250|      0|            }                                                         \
  |  |  |  | 2251|      0|        }                                                             \
  |  |  |  | 2252|      0|        /* pout[size-1]: always produce at least one decimal digit */ \
  |  |  |  | 2253|      0|        rem = pout[i];                                                \
  |  |  |  | 2254|      0|        do {                                                          \
  |  |  |  | 2255|      0|            *--p = '0' + rem % 10;                                    \
  |  |  |  | 2256|      0|            rem /= 10;                                                \
  |  |  |  | 2257|      0|        } while (rem != 0);                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2257:18): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2258|      0|                                                                      \
  |  |  |  | 2259|      0|        /* and sign */                                                \
  |  |  |  | 2260|      0|        if (negative)                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2260:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2261|      0|            *--p = '-';                                               \
  |  |  |  | 2262|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2262:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2272|      0|                                                                      \
  |  | 2273|      0|        /* check we've counted correctly */                           \
  |  | 2274|      0|        if (writer)                                                   \
  |  |  ------------------
  |  |  |  Branch (2274:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2275|      0|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
  |  | 2276|      0|        else                                                          \
  |  | 2277|      0|            assert(p == (TYPE*)PyUnicode_DATA(str));                  \
  |  | 2278|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2278:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2294:13): [True: 0, False: 0]
  |  Branch (2294:13): [True: 0, False: 0]
  ------------------
 2295|      0|        }
 2296|      0|        else {
 2297|      0|            assert (kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (2297:13): [True: 0, False: 0]
  ------------------
 2298|      0|            Py_UCS4 *p;
 2299|      0|            WRITE_UNICODE_DIGITS(Py_UCS4);
  ------------------
  |  | 2265|      0|    do {                                                              \
  |  | 2266|      0|        if (writer)                                                   \
  |  |  ------------------
  |  |  |  Branch (2266:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2267|      0|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2268|      0|        else                                                          \
  |  | 2269|      0|            p = (TYPE*)PyUnicode_DATA(str) + strlen;                  \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2270|      0|                                                                      \
  |  | 2271|      0|        WRITE_DIGITS(p);                                              \
  |  |  ------------------
  |  |  |  | 2242|      0|    do {                                                              \
  |  |  |  | 2243|      0|        /* pout[0] through pout[size-2] contribute exactly            \
  |  |  |  | 2244|      0|           _PyLong_DECIMAL_SHIFT digits each */                       \
  |  |  |  | 2245|      0|        for (i=0; i < size - 1; i++) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2245:19): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2246|      0|            rem = pout[i];                                            \
  |  |  |  | 2247|      0|            for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define _PyLong_DECIMAL_SHIFT   9 /* max(e such that 10**e fits in a digit) */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2247:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2248|      0|                *--p = '0' + rem % 10;                                \
  |  |  |  | 2249|      0|                rem /= 10;                                            \
  |  |  |  | 2250|      0|            }                                                         \
  |  |  |  | 2251|      0|        }                                                             \
  |  |  |  | 2252|      0|        /* pout[size-1]: always produce at least one decimal digit */ \
  |  |  |  | 2253|      0|        rem = pout[i];                                                \
  |  |  |  | 2254|      0|        do {                                                          \
  |  |  |  | 2255|      0|            *--p = '0' + rem % 10;                                    \
  |  |  |  | 2256|      0|            rem /= 10;                                                \
  |  |  |  | 2257|      0|        } while (rem != 0);                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2257:18): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2258|      0|                                                                      \
  |  |  |  | 2259|      0|        /* and sign */                                                \
  |  |  |  | 2260|      0|        if (negative)                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2260:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2261|      0|            *--p = '-';                                               \
  |  |  |  | 2262|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2262:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2272|      0|                                                                      \
  |  | 2273|      0|        /* check we've counted correctly */                           \
  |  | 2274|      0|        if (writer)                                                   \
  |  |  ------------------
  |  |  |  Branch (2274:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2275|      0|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
  |  | 2276|      0|        else                                                          \
  |  | 2277|      0|            assert(p == (TYPE*)PyUnicode_DATA(str));                  \
  |  | 2278|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2278:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2299:13): [True: 0, False: 0]
  |  Branch (2299:13): [True: 0, False: 0]
  ------------------
 2300|      0|        }
 2301|   102k|    }
 2302|       |
 2303|   102k|#undef WRITE_DIGITS
 2304|   102k|#undef WRITE_UNICODE_DIGITS
 2305|       |
 2306|   102k|    _Py_DECREF_INT(scratch);
 2307|   102k|    if (writer) {
  ------------------
  |  Branch (2307:9): [True: 0, False: 102k]
  ------------------
 2308|      0|        writer->pos += strlen;
 2309|      0|    }
 2310|   102k|    else if (bytes_writer) {
  ------------------
  |  Branch (2310:14): [True: 0, False: 102k]
  ------------------
 2311|      0|        (*bytes_str) += strlen;
 2312|      0|    }
 2313|   102k|    else {
 2314|   102k|        assert(_PyUnicode_CheckConsistency(str, 1));
  ------------------
  |  Branch (2314:9): [True: 102k, False: 0]
  ------------------
 2315|   102k|        *p_output = (PyObject *)str;
 2316|   102k|    }
 2317|   102k|    return 0;
 2318|   102k|}
longobject.c:long_format_binary:
 2338|    132|{
 2339|    132|    PyLongObject *a = (PyLongObject *)aa;
 2340|    132|    PyObject *v = NULL;
 2341|    132|    Py_ssize_t sz;
 2342|    132|    Py_ssize_t size_a;
 2343|    132|    int negative;
 2344|    132|    int bits;
 2345|       |
 2346|    132|    assert(base == 2 || base == 8 || base == 16);
  ------------------
  |  Branch (2346:5): [True: 0, False: 132]
  |  Branch (2346:5): [True: 0, False: 132]
  |  Branch (2346:5): [True: 132, False: 0]
  ------------------
 2347|       |    // writer or bytes_writer can be used, but not both at the same time.
 2348|    132|    assert(writer == NULL || bytes_writer == NULL);
  ------------------
  |  Branch (2348:5): [True: 0, False: 132]
  |  Branch (2348:5): [True: 132, False: 0]
  ------------------
 2349|    132|    if (a == NULL || !PyLong_Check(a)) {
  ------------------
  |  |   13|    132|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    132|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2349:9): [True: 0, False: 132]
  |  Branch (2349:22): [True: 0, False: 132]
  ------------------
 2350|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2351|      0|        return -1;
 2352|      0|    }
 2353|    132|    size_a = _PyLong_DigitCount(a);
 2354|    132|    negative = _PyLong_IsNegative(a);
 2355|       |
 2356|       |    /* Compute a rough upper bound for the length of the string */
 2357|    132|    switch (base) {
 2358|    132|    case 16:
  ------------------
  |  Branch (2358:5): [True: 132, False: 0]
  ------------------
 2359|    132|        bits = 4;
 2360|    132|        break;
 2361|      0|    case 8:
  ------------------
  |  Branch (2361:5): [True: 0, False: 132]
  ------------------
 2362|      0|        bits = 3;
 2363|      0|        break;
 2364|      0|    case 2:
  ------------------
  |  Branch (2364:5): [True: 0, False: 132]
  ------------------
 2365|      0|        bits = 1;
 2366|      0|        break;
 2367|      0|    default:
  ------------------
  |  Branch (2367:5): [True: 0, False: 132]
  ------------------
 2368|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2369|    132|    }
 2370|       |
 2371|       |    /* Compute exact length 'sz' of output string. */
 2372|    132|    if (size_a == 0) {
  ------------------
  |  Branch (2372:9): [True: 0, False: 132]
  ------------------
 2373|      0|        sz = 1;
 2374|      0|    }
 2375|    132|    else {
 2376|    132|        Py_ssize_t size_a_in_bits;
 2377|       |        /* Ensure overflow doesn't occur during computation of sz. */
 2378|    132|        if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
  ------------------
  |  |  137|    132|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                      if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
  ------------------
  |  |   47|    132|#define PyLong_SHIFT    30
  ------------------
  |  Branch (2378:13): [True: 0, False: 132]
  ------------------
 2379|      0|            PyErr_SetString(PyExc_OverflowError,
 2380|      0|                            "int too large to format");
 2381|      0|            return -1;
 2382|      0|        }
 2383|    132|        size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
  ------------------
  |  |   47|    132|#define PyLong_SHIFT    30
  ------------------
 2384|    132|                         bit_length_digit(a->long_value.ob_digit[size_a - 1]);
 2385|       |        /* Allow 1 character for a '-' sign. */
 2386|    132|        sz = negative + (size_a_in_bits + (bits - 1)) / bits;
 2387|    132|    }
 2388|    132|    if (alternate) {
  ------------------
  |  Branch (2388:9): [True: 0, False: 132]
  ------------------
 2389|       |        /* 2 characters for prefix  */
 2390|      0|        sz += 2;
 2391|      0|    }
 2392|       |
 2393|    132|    if (writer) {
  ------------------
  |  Branch (2393:9): [True: 132, False: 0]
  ------------------
 2394|    132|        if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1) {
  ------------------
  |  |  562|    132|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 132]
  |  |  ------------------
  |  |  563|    132|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|    132|     ? 0                                                              \
  |  |  565|    132|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 132]
  |  |  ------------------
  |  |  566|    132|        ? 0                                                           \
  |  |  567|    132|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (2394:13): [True: 0, False: 132]
  ------------------
 2395|      0|            return -1;
 2396|      0|        }
 2397|    132|        assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (2397:9): [True: 132, False: 0]
  ------------------
 2398|    132|    }
 2399|      0|    else if (bytes_writer) {
  ------------------
  |  Branch (2399:14): [True: 0, False: 0]
  ------------------
 2400|      0|        *bytes_str = PyBytesWriter_GrowAndUpdatePointer(bytes_writer, sz,
 2401|      0|                                                        *bytes_str);
 2402|      0|        if (*bytes_str == NULL)
  ------------------
  |  Branch (2402:13): [True: 0, False: 0]
  ------------------
 2403|      0|            return -1;
 2404|      0|    }
 2405|      0|    else {
 2406|      0|        v = PyUnicode_New(sz, 'x');
 2407|      0|        if (v == NULL)
  ------------------
  |  Branch (2407:13): [True: 0, False: 0]
  ------------------
 2408|      0|            return -1;
 2409|      0|    }
 2410|       |
 2411|    132|#define WRITE_DIGITS(p)                                                 \
 2412|    132|    do {                                                                \
 2413|    132|        if (size_a == 0) {                                              \
 2414|    132|            *--p = '0';                                                 \
 2415|    132|        }                                                               \
 2416|    132|        else {                                                          \
 2417|       |            /* JRH: special case for power-of-2 bases */                \
 2418|    132|            twodigits accum = 0;                                        \
 2419|    132|            int accumbits = 0;   /* # of bits in accum */               \
 2420|    132|            Py_ssize_t i;                                               \
 2421|    132|            for (i = 0; i < size_a; ++i) {                              \
 2422|    132|                accum |= (twodigits)a->long_value.ob_digit[i] << accumbits;        \
 2423|    132|                accumbits += PyLong_SHIFT;                              \
 2424|    132|                assert(accumbits >= bits);                              \
 2425|    132|                do {                                                    \
 2426|    132|                    char cdigit;                                        \
 2427|    132|                    cdigit = (char)(accum & (base - 1));                \
 2428|    132|                    cdigit += (cdigit < 10) ? '0' : 'a'-10;             \
 2429|    132|                    *--p = cdigit;                                      \
 2430|    132|                    accumbits -= bits;                                  \
 2431|    132|                    accum >>= bits;                                     \
 2432|    132|                } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
 2433|    132|            }                                                           \
 2434|    132|        }                                                               \
 2435|    132|                                                                        \
 2436|    132|        if (alternate) {                                                \
 2437|    132|            if (base == 16)                                             \
 2438|    132|                *--p = 'x';                                             \
 2439|    132|            else if (base == 8)                                         \
 2440|    132|                *--p = 'o';                                             \
 2441|    132|            else /* (base == 2) */                                      \
 2442|    132|                *--p = 'b';                                             \
 2443|    132|            *--p = '0';                                                 \
 2444|    132|        }                                                               \
 2445|    132|        if (negative)                                                   \
 2446|    132|            *--p = '-';                                                 \
 2447|    132|    } while (0)
 2448|       |
 2449|    132|#define WRITE_UNICODE_DIGITS(TYPE)                                      \
 2450|    132|    do {                                                                \
 2451|    132|        if (writer)                                                     \
 2452|    132|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
 2453|    132|        else                                                            \
 2454|    132|            p = (TYPE*)PyUnicode_DATA(v) + sz;                          \
 2455|    132|                                                                        \
 2456|    132|        WRITE_DIGITS(p);                                                \
 2457|    132|                                                                        \
 2458|    132|        if (writer)                                                     \
 2459|    132|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
 2460|    132|        else                                                            \
 2461|    132|            assert(p == (TYPE*)PyUnicode_DATA(v));                      \
 2462|    132|    } while (0)
 2463|       |
 2464|    132|    if (bytes_writer) {
  ------------------
  |  Branch (2464:9): [True: 0, False: 132]
  ------------------
 2465|      0|        char *p = *bytes_str + sz;
 2466|      0|        WRITE_DIGITS(p);
  ------------------
  |  | 2412|      0|    do {                                                                \
  |  | 2413|      0|        if (size_a == 0) {                                              \
  |  |  ------------------
  |  |  |  Branch (2413:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2414|      0|            *--p = '0';                                                 \
  |  | 2415|      0|        }                                                               \
  |  | 2416|      0|        else {                                                          \
  |  | 2417|      0|            /* JRH: special case for power-of-2 bases */                \
  |  | 2418|      0|            twodigits accum = 0;                                        \
  |  | 2419|      0|            int accumbits = 0;   /* # of bits in accum */               \
  |  | 2420|      0|            Py_ssize_t i;                                               \
  |  | 2421|      0|            for (i = 0; i < size_a; ++i) {                              \
  |  |  ------------------
  |  |  |  Branch (2421:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 2422|      0|                accum |= (twodigits)a->long_value.ob_digit[i] << accumbits;        \
  |  | 2423|      0|                accumbits += PyLong_SHIFT;                              \
  |  |  ------------------
  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  ------------------
  |  | 2424|      0|                assert(accumbits >= bits);                              \
  |  | 2425|      0|                do {                                                    \
  |  | 2426|      0|                    char cdigit;                                        \
  |  | 2427|      0|                    cdigit = (char)(accum & (base - 1));                \
  |  | 2428|      0|                    cdigit += (cdigit < 10) ? '0' : 'a'-10;             \
  |  |  ------------------
  |  |  |  Branch (2428:31): [True: 0, False: 0]
  |  |  ------------------
  |  | 2429|      0|                    *--p = cdigit;                                      \
  |  | 2430|      0|                    accumbits -= bits;                                  \
  |  | 2431|      0|                    accum >>= bits;                                     \
  |  | 2432|      0|                } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
  |  |  ------------------
  |  |  |  Branch (2432:26): [True: 0, False: 0]
  |  |  |  Branch (2432:26): [True: 0, False: 0]
  |  |  ------------------
  |  | 2433|      0|            }                                                           \
  |  | 2434|      0|        }                                                               \
  |  | 2435|      0|                                                                        \
  |  | 2436|      0|        if (alternate) {                                                \
  |  |  ------------------
  |  |  |  Branch (2436:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2437|      0|            if (base == 16)                                             \
  |  |  ------------------
  |  |  |  Branch (2437:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2438|      0|                *--p = 'x';                                             \
  |  | 2439|      0|            else if (base == 8)                                         \
  |  |  ------------------
  |  |  |  Branch (2439:22): [True: 0, False: 0]
  |  |  ------------------
  |  | 2440|      0|                *--p = 'o';                                             \
  |  | 2441|      0|            else /* (base == 2) */                                      \
  |  | 2442|      0|                *--p = 'b';                                             \
  |  | 2443|      0|            *--p = '0';                                                 \
  |  | 2444|      0|        }                                                               \
  |  | 2445|      0|        if (negative)                                                   \
  |  |  ------------------
  |  |  |  Branch (2445:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2446|      0|            *--p = '-';                                                 \
  |  | 2447|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2447:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2466:9): [True: 0, False: 0]
  ------------------
 2467|      0|        assert(p == *bytes_str);
  ------------------
  |  Branch (2467:9): [True: 0, False: 0]
  ------------------
 2468|      0|    }
 2469|    132|    else {
 2470|    132|        int kind = writer ? writer->kind : PyUnicode_KIND(v);
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2470:20): [True: 132, False: 0]
  ------------------
 2471|    132|        if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (2471:13): [True: 132, False: 0]
  ------------------
 2472|    132|            Py_UCS1 *p;
 2473|    132|            WRITE_UNICODE_DIGITS(Py_UCS1);
  ------------------
  |  | 2450|    132|    do {                                                                \
  |  | 2451|    132|        if (writer)                                                     \
  |  |  ------------------
  |  |  |  Branch (2451:13): [True: 132, False: 0]
  |  |  ------------------
  |  | 2452|    132|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
  |  |  ------------------
  |  |  |  |  284|    132|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2453|    132|        else                                                            \
  |  | 2454|    132|            p = (TYPE*)PyUnicode_DATA(v) + sz;                          \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2455|    132|                                                                        \
  |  | 2456|    132|        WRITE_DIGITS(p);                                                \
  |  |  ------------------
  |  |  |  | 2412|    132|    do {                                                                \
  |  |  |  | 2413|    132|        if (size_a == 0) {                                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2413:13): [True: 0, False: 132]
  |  |  |  |  ------------------
  |  |  |  | 2414|      0|            *--p = '0';                                                 \
  |  |  |  | 2415|      0|        }                                                               \
  |  |  |  | 2416|    132|        else {                                                          \
  |  |  |  | 2417|    132|            /* JRH: special case for power-of-2 bases */                \
  |  |  |  | 2418|    132|            twodigits accum = 0;                                        \
  |  |  |  | 2419|    132|            int accumbits = 0;   /* # of bits in accum */               \
  |  |  |  | 2420|    132|            Py_ssize_t i;                                               \
  |  |  |  | 2421|  1.37k|            for (i = 0; i < size_a; ++i) {                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2421:25): [True: 1.24k, False: 132]
  |  |  |  |  ------------------
  |  |  |  | 2422|  1.24k|                accum |= (twodigits)a->long_value.ob_digit[i] << accumbits;        \
  |  |  |  | 2423|  1.24k|                accumbits += PyLong_SHIFT;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  1.24k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  |  | 2424|  1.24k|                assert(accumbits >= bits);                              \
  |  |  |  | 2425|  8.98k|                do {                                                    \
  |  |  |  | 2426|  8.98k|                    char cdigit;                                        \
  |  |  |  | 2427|  8.98k|                    cdigit = (char)(accum & (base - 1));                \
  |  |  |  | 2428|  8.98k|                    cdigit += (cdigit < 10) ? '0' : 'a'-10;             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2428:31): [True: 5.75k, False: 3.23k]
  |  |  |  |  ------------------
  |  |  |  | 2429|  8.98k|                    *--p = cdigit;                                      \
  |  |  |  | 2430|  8.98k|                    accumbits -= bits;                                  \
  |  |  |  | 2431|  8.98k|                    accum >>= bits;                                     \
  |  |  |  | 2432|  8.98k|                } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2432:26): [True: 8.31k, False: 673]
  |  |  |  |  |  Branch (2432:26): [True: 7.74k, False: 1.24k]
  |  |  |  |  ------------------
  |  |  |  | 2433|  1.24k|            }                                                           \
  |  |  |  | 2434|    132|        }                                                               \
  |  |  |  | 2435|    132|                                                                        \
  |  |  |  | 2436|    132|        if (alternate) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2436:13): [True: 0, False: 132]
  |  |  |  |  ------------------
  |  |  |  | 2437|      0|            if (base == 16)                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2437:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2438|      0|                *--p = 'x';                                             \
  |  |  |  | 2439|      0|            else if (base == 8)                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2439:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2440|      0|                *--p = 'o';                                             \
  |  |  |  | 2441|      0|            else /* (base == 2) */                                      \
  |  |  |  | 2442|      0|                *--p = 'b';                                             \
  |  |  |  | 2443|      0|            *--p = '0';                                                 \
  |  |  |  | 2444|      0|        }                                                               \
  |  |  |  | 2445|    132|        if (negative)                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2445:13): [True: 0, False: 132]
  |  |  |  |  ------------------
  |  |  |  | 2446|    132|            *--p = '-';                                                 \
  |  |  |  | 2447|    132|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2447:14): [Folded, False: 132]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2457|    132|                                                                        \
  |  | 2458|    132|        if (writer)                                                     \
  |  |  ------------------
  |  |  |  Branch (2458:13): [True: 132, False: 0]
  |  |  ------------------
  |  | 2459|    132|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
  |  | 2460|    132|        else                                                            \
  |  | 2461|    132|            assert(p == (TYPE*)PyUnicode_DATA(v));                      \
  |  | 2462|    132|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2462:14): [Folded, False: 132]
  |  |  ------------------
  ------------------
  |  Branch (2473:13): [True: 1.24k, False: 0]
  |  Branch (2473:13): [True: 132, False: 0]
  |  Branch (2473:13): [True: 0, False: 0]
  ------------------
 2474|    132|        }
 2475|      0|        else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (2475:18): [True: 0, False: 0]
  ------------------
 2476|      0|            Py_UCS2 *p;
 2477|      0|            WRITE_UNICODE_DIGITS(Py_UCS2);
  ------------------
  |  | 2450|      0|    do {                                                                \
  |  | 2451|      0|        if (writer)                                                     \
  |  |  ------------------
  |  |  |  Branch (2451:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2452|      0|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2453|      0|        else                                                            \
  |  | 2454|      0|            p = (TYPE*)PyUnicode_DATA(v) + sz;                          \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2455|      0|                                                                        \
  |  | 2456|      0|        WRITE_DIGITS(p);                                                \
  |  |  ------------------
  |  |  |  | 2412|      0|    do {                                                                \
  |  |  |  | 2413|      0|        if (size_a == 0) {                                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2413:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2414|      0|            *--p = '0';                                                 \
  |  |  |  | 2415|      0|        }                                                               \
  |  |  |  | 2416|      0|        else {                                                          \
  |  |  |  | 2417|      0|            /* JRH: special case for power-of-2 bases */                \
  |  |  |  | 2418|      0|            twodigits accum = 0;                                        \
  |  |  |  | 2419|      0|            int accumbits = 0;   /* # of bits in accum */               \
  |  |  |  | 2420|      0|            Py_ssize_t i;                                               \
  |  |  |  | 2421|      0|            for (i = 0; i < size_a; ++i) {                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2421:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2422|      0|                accum |= (twodigits)a->long_value.ob_digit[i] << accumbits;        \
  |  |  |  | 2423|      0|                accumbits += PyLong_SHIFT;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  |  | 2424|      0|                assert(accumbits >= bits);                              \
  |  |  |  | 2425|      0|                do {                                                    \
  |  |  |  | 2426|      0|                    char cdigit;                                        \
  |  |  |  | 2427|      0|                    cdigit = (char)(accum & (base - 1));                \
  |  |  |  | 2428|      0|                    cdigit += (cdigit < 10) ? '0' : 'a'-10;             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2428:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2429|      0|                    *--p = cdigit;                                      \
  |  |  |  | 2430|      0|                    accumbits -= bits;                                  \
  |  |  |  | 2431|      0|                    accum >>= bits;                                     \
  |  |  |  | 2432|      0|                } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2432:26): [True: 0, False: 0]
  |  |  |  |  |  Branch (2432:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2433|      0|            }                                                           \
  |  |  |  | 2434|      0|        }                                                               \
  |  |  |  | 2435|      0|                                                                        \
  |  |  |  | 2436|      0|        if (alternate) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2436:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2437|      0|            if (base == 16)                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2437:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2438|      0|                *--p = 'x';                                             \
  |  |  |  | 2439|      0|            else if (base == 8)                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2439:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2440|      0|                *--p = 'o';                                             \
  |  |  |  | 2441|      0|            else /* (base == 2) */                                      \
  |  |  |  | 2442|      0|                *--p = 'b';                                             \
  |  |  |  | 2443|      0|            *--p = '0';                                                 \
  |  |  |  | 2444|      0|        }                                                               \
  |  |  |  | 2445|      0|        if (negative)                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2445:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2446|      0|            *--p = '-';                                                 \
  |  |  |  | 2447|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2447:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2457|      0|                                                                        \
  |  | 2458|      0|        if (writer)                                                     \
  |  |  ------------------
  |  |  |  Branch (2458:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2459|      0|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
  |  | 2460|      0|        else                                                            \
  |  | 2461|      0|            assert(p == (TYPE*)PyUnicode_DATA(v));                      \
  |  | 2462|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2462:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2477:13): [True: 0, False: 0]
  |  Branch (2477:13): [True: 0, False: 0]
  |  Branch (2477:13): [True: 0, False: 0]
  ------------------
 2478|      0|        }
 2479|      0|        else {
 2480|      0|            assert (kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (2480:13): [True: 0, False: 0]
  ------------------
 2481|      0|            Py_UCS4 *p;
 2482|      0|            WRITE_UNICODE_DIGITS(Py_UCS4);
  ------------------
  |  | 2450|      0|    do {                                                                \
  |  | 2451|      0|        if (writer)                                                     \
  |  |  ------------------
  |  |  |  Branch (2451:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2452|      0|            p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2453|      0|        else                                                            \
  |  | 2454|      0|            p = (TYPE*)PyUnicode_DATA(v) + sz;                          \
  |  |  ------------------
  |  |  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2455|      0|                                                                        \
  |  | 2456|      0|        WRITE_DIGITS(p);                                                \
  |  |  ------------------
  |  |  |  | 2412|      0|    do {                                                                \
  |  |  |  | 2413|      0|        if (size_a == 0) {                                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2413:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2414|      0|            *--p = '0';                                                 \
  |  |  |  | 2415|      0|        }                                                               \
  |  |  |  | 2416|      0|        else {                                                          \
  |  |  |  | 2417|      0|            /* JRH: special case for power-of-2 bases */                \
  |  |  |  | 2418|      0|            twodigits accum = 0;                                        \
  |  |  |  | 2419|      0|            int accumbits = 0;   /* # of bits in accum */               \
  |  |  |  | 2420|      0|            Py_ssize_t i;                                               \
  |  |  |  | 2421|      0|            for (i = 0; i < size_a; ++i) {                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2421:25): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2422|      0|                accum |= (twodigits)a->long_value.ob_digit[i] << accumbits;        \
  |  |  |  | 2423|      0|                accumbits += PyLong_SHIFT;                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|      0|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  |  | 2424|      0|                assert(accumbits >= bits);                              \
  |  |  |  | 2425|      0|                do {                                                    \
  |  |  |  | 2426|      0|                    char cdigit;                                        \
  |  |  |  | 2427|      0|                    cdigit = (char)(accum & (base - 1));                \
  |  |  |  | 2428|      0|                    cdigit += (cdigit < 10) ? '0' : 'a'-10;             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2428:31): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2429|      0|                    *--p = cdigit;                                      \
  |  |  |  | 2430|      0|                    accumbits -= bits;                                  \
  |  |  |  | 2431|      0|                    accum >>= bits;                                     \
  |  |  |  | 2432|      0|                } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2432:26): [True: 0, False: 0]
  |  |  |  |  |  Branch (2432:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2433|      0|            }                                                           \
  |  |  |  | 2434|      0|        }                                                               \
  |  |  |  | 2435|      0|                                                                        \
  |  |  |  | 2436|      0|        if (alternate) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2436:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2437|      0|            if (base == 16)                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2437:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2438|      0|                *--p = 'x';                                             \
  |  |  |  | 2439|      0|            else if (base == 8)                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2439:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2440|      0|                *--p = 'o';                                             \
  |  |  |  | 2441|      0|            else /* (base == 2) */                                      \
  |  |  |  | 2442|      0|                *--p = 'b';                                             \
  |  |  |  | 2443|      0|            *--p = '0';                                                 \
  |  |  |  | 2444|      0|        }                                                               \
  |  |  |  | 2445|      0|        if (negative)                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2445:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 2446|      0|            *--p = '-';                                                 \
  |  |  |  | 2447|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2447:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2457|      0|                                                                        \
  |  | 2458|      0|        if (writer)                                                     \
  |  |  ------------------
  |  |  |  Branch (2458:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2459|      0|            assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
  |  | 2460|      0|        else                                                            \
  |  | 2461|      0|            assert(p == (TYPE*)PyUnicode_DATA(v));                      \
  |  | 2462|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (2462:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2482:13): [True: 0, False: 0]
  |  Branch (2482:13): [True: 0, False: 0]
  |  Branch (2482:13): [True: 0, False: 0]
  ------------------
 2483|      0|        }
 2484|    132|    }
 2485|       |
 2486|    132|#undef WRITE_DIGITS
 2487|    132|#undef WRITE_UNICODE_DIGITS
 2488|       |
 2489|    132|    if (writer) {
  ------------------
  |  Branch (2489:9): [True: 132, False: 0]
  ------------------
 2490|    132|        writer->pos += sz;
 2491|    132|    }
 2492|      0|    else if (bytes_writer) {
  ------------------
  |  Branch (2492:14): [True: 0, False: 0]
  ------------------
 2493|      0|        (*bytes_str) += sz;
 2494|      0|    }
 2495|      0|    else {
 2496|      0|        assert(_PyUnicode_CheckConsistency(v, 1));
  ------------------
  |  Branch (2496:9): [True: 0, False: 0]
  ------------------
 2497|      0|        *p_output = v;
 2498|      0|    }
 2499|    132|    return 0;
 2500|    132|}
longobject.c:long_from_string_base:
 2963|  38.4k|{
 2964|  38.4k|    const char *start, *end, *p;
 2965|  38.4k|    char prev = 0;
 2966|  38.4k|    Py_ssize_t digits = 0;
 2967|  38.4k|    int is_binary_base = (base & (base - 1)) == 0;
 2968|       |
 2969|       |    /* Here we do four things:
 2970|       |     *
 2971|       |     * - Find the `end` of the string.
 2972|       |     * - Validate the string.
 2973|       |     * - Count the number of `digits` (rather than underscores)
 2974|       |     * - Point *str to the end-of-string or first invalid character.
 2975|       |     */
 2976|  38.4k|    start = p = *str;
 2977|       |    /* Leading underscore not allowed. */
 2978|  38.4k|    if (*start == '_') {
  ------------------
  |  Branch (2978:9): [True: 0, False: 38.4k]
  ------------------
 2979|      0|        return -1;
 2980|      0|    }
 2981|       |    /* Verify all characters are digits and underscores. */
 2982|  3.64M|    while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base || *p == '_') {
  ------------------
  |  |  163|  3.64M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (2982:12): [True: 3.60M, False: 38.4k]
  |  Branch (2982:58): [True: 0, False: 38.4k]
  ------------------
 2983|  3.60M|        if (*p == '_') {
  ------------------
  |  Branch (2983:13): [True: 0, False: 3.60M]
  ------------------
 2984|       |            /* Double underscore not allowed. */
 2985|      0|            if (prev == '_') {
  ------------------
  |  Branch (2985:17): [True: 0, False: 0]
  ------------------
 2986|      0|                *str = p - 1;
 2987|      0|                return -1;
 2988|      0|            }
 2989|  3.60M|        } else {
 2990|  3.60M|            ++digits;
 2991|  3.60M|        }
 2992|  3.60M|        prev = *p;
 2993|  3.60M|        ++p;
 2994|  3.60M|    }
 2995|       |    /* Trailing underscore not allowed. */
 2996|  38.4k|    if (prev == '_') {
  ------------------
  |  Branch (2996:9): [True: 0, False: 38.4k]
  ------------------
 2997|      0|        *str = p - 1;
 2998|      0|        return -1;
 2999|      0|    }
 3000|  38.4k|    *str = end = p;
 3001|       |    /* Reject empty strings */
 3002|  38.4k|    if (start == end) {
  ------------------
  |  Branch (3002:9): [True: 0, False: 38.4k]
  ------------------
 3003|      0|        return -1;
 3004|      0|    }
 3005|       |    /* Allow only trailing whitespace after `end` */
 3006|  38.4k|    while (*p && Py_ISSPACE(*p)) {
  ------------------
  |  |   27|      0|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|      0|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3006:12): [True: 0, False: 38.4k]
  ------------------
 3007|      0|        p++;
 3008|      0|    }
 3009|  38.4k|    *str = p;
 3010|  38.4k|    if (*p != '\0') {
  ------------------
  |  Branch (3010:9): [True: 0, False: 38.4k]
  ------------------
 3011|      0|        return -1;
 3012|      0|    }
 3013|       |
 3014|       |    /*
 3015|       |     * Pass a validated string consisting of only valid digits and underscores
 3016|       |     * to long_from_xxx_base.
 3017|       |     */
 3018|  38.4k|    if (is_binary_base) {
  ------------------
  |  Branch (3018:9): [True: 2.79k, False: 35.6k]
  ------------------
 3019|       |        /* Use the linear algorithm for binary bases. */
 3020|  2.79k|        return long_from_binary_base(start, end, digits, base, res);
 3021|  2.79k|    }
 3022|  35.6k|    else {
 3023|       |        /* Limit the size to avoid excessive computation attacks exploiting the
 3024|       |         * quadratic algorithm. */
 3025|  35.6k|        if (digits > _PY_LONG_MAX_STR_DIGITS_THRESHOLD) {
  ------------------
  |  |   42|  35.6k|#define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640
  ------------------
  |  Branch (3025:13): [True: 913, False: 34.7k]
  ------------------
 3026|    913|            PyInterpreterState *interp = _PyInterpreterState_GET();
 3027|    913|            int max_str_digits = _Py_atomic_load_int(&interp->long_state.max_str_digits);
 3028|    913|            if ((max_str_digits > 0) && (digits > max_str_digits)) {
  ------------------
  |  Branch (3028:17): [True: 913, False: 0]
  |  Branch (3028:41): [True: 2, False: 911]
  ------------------
 3029|      2|                PyErr_Format(PyExc_ValueError, _MAX_STR_DIGITS_ERROR_FMT_TO_INT,
  ------------------
  |  |   32|      2|#define _MAX_STR_DIGITS_ERROR_FMT_TO_INT "Exceeds the limit (%d digits) for integer string conversion: value has %zd digits; use sys.set_int_max_str_digits() to increase the limit"
  ------------------
 3030|      2|                             max_str_digits, digits);
 3031|      2|                *res = NULL;
 3032|      2|                return 0;
 3033|      2|            }
 3034|    913|        }
 3035|  35.6k|#if WITH_PYLONG_MODULE
 3036|  35.6k|        if (digits > 6000 && base == 10) {
  ------------------
  |  Branch (3036:13): [True: 152, False: 35.5k]
  |  Branch (3036:30): [True: 152, False: 0]
  ------------------
 3037|       |            /* Switch to _pylong.int_from_string() */
 3038|    152|            return pylong_int_from_string(start, end, res);
 3039|    152|        }
 3040|  35.5k|#endif
 3041|       |        /* Use the quadratic algorithm for non binary bases. */
 3042|  35.5k|        return long_from_non_binary_base(start, end, digits, base, res);
 3043|  35.6k|    }
 3044|  38.4k|}
longobject.c:long_from_binary_base:
 2590|  2.79k|{
 2591|  2.79k|    const char *p;
 2592|  2.79k|    int bits_per_char;
 2593|  2.79k|    Py_ssize_t n;
 2594|  2.79k|    PyLongObject *z;
 2595|  2.79k|    twodigits accum;
 2596|  2.79k|    int bits_in_accum;
 2597|  2.79k|    digit *pdigit;
 2598|       |
 2599|  2.79k|    assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
  ------------------
  |  Branch (2599:5): [True: 2.79k, False: 0]
  |  Branch (2599:5): [True: 2.79k, False: 0]
  |  Branch (2599:5): [True: 2.79k, False: 0]
  ------------------
 2600|  2.79k|    n = base;
 2601|  14.5k|    for (bits_per_char = -1; n; ++bits_per_char) {
  ------------------
  |  Branch (2601:30): [True: 11.7k, False: 2.79k]
  ------------------
 2602|  11.7k|        n >>= 1;
 2603|  11.7k|    }
 2604|       |
 2605|       |    /* n <- the number of Python digits needed,
 2606|       |            = ceiling((digits * bits_per_char) / PyLong_SHIFT). */
 2607|  2.79k|    if (digits > (PY_SSIZE_T_MAX - (PyLong_SHIFT - 1)) / bits_per_char) {
  ------------------
  |  |  137|  2.79k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                  if (digits > (PY_SSIZE_T_MAX - (PyLong_SHIFT - 1)) / bits_per_char) {
  ------------------
  |  |   47|  2.79k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (2607:9): [True: 0, False: 2.79k]
  ------------------
 2608|      0|        PyErr_SetString(PyExc_ValueError,
 2609|      0|                        "int string too large to convert");
 2610|      0|        *res = NULL;
 2611|      0|        return 0;
 2612|      0|    }
 2613|  2.79k|    n = (digits * bits_per_char + PyLong_SHIFT - 1) / PyLong_SHIFT;
  ------------------
  |  |   47|  2.79k|#define PyLong_SHIFT    30
  ------------------
                  n = (digits * bits_per_char + PyLong_SHIFT - 1) / PyLong_SHIFT;
  ------------------
  |  |   47|  2.79k|#define PyLong_SHIFT    30
  ------------------
 2614|  2.79k|    z = long_alloc(n);
 2615|  2.79k|    if (z == NULL) {
  ------------------
  |  Branch (2615:9): [True: 0, False: 2.79k]
  ------------------
 2616|      0|        *res = NULL;
 2617|      0|        return 0;
 2618|      0|    }
 2619|       |    /* Read string from right, and fill in int from left; i.e.,
 2620|       |     * from least to most significant in both.
 2621|       |     */
 2622|  2.79k|    accum = 0;
 2623|  2.79k|    bits_in_accum = 0;
 2624|  2.79k|    pdigit = z->long_value.ob_digit;
 2625|  2.79k|    p = end;
 2626|   178k|    while (--p >= start) {
  ------------------
  |  Branch (2626:12): [True: 175k, False: 2.79k]
  ------------------
 2627|   175k|        int k;
 2628|   175k|        if (*p == '_') {
  ------------------
  |  Branch (2628:13): [True: 0, False: 175k]
  ------------------
 2629|      0|            continue;
 2630|      0|        }
 2631|   175k|        k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
  ------------------
  |  |  163|   175k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 2632|   175k|        assert(k >= 0 && k < base);
  ------------------
  |  Branch (2632:9): [True: 175k, False: 0]
  |  Branch (2632:9): [True: 175k, False: 0]
  ------------------
 2633|   175k|        accum |= (twodigits)k << bits_in_accum;
 2634|   175k|        bits_in_accum += bits_per_char;
 2635|   175k|        if (bits_in_accum >= PyLong_SHIFT) {
  ------------------
  |  |   47|   175k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (2635:13): [True: 16.5k, False: 158k]
  ------------------
 2636|  16.5k|            *pdigit++ = (digit)(accum & PyLong_MASK);
  ------------------
  |  |   62|  16.5k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  16.5k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  16.5k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2637|  16.5k|            assert(pdigit - z->long_value.ob_digit <= n);
  ------------------
  |  Branch (2637:13): [True: 16.5k, False: 0]
  ------------------
 2638|  16.5k|            accum >>= PyLong_SHIFT;
  ------------------
  |  |   47|  16.5k|#define PyLong_SHIFT    30
  ------------------
 2639|  16.5k|            bits_in_accum -= PyLong_SHIFT;
  ------------------
  |  |   47|  16.5k|#define PyLong_SHIFT    30
  ------------------
 2640|  16.5k|            assert(bits_in_accum < PyLong_SHIFT);
  ------------------
  |  Branch (2640:13): [True: 16.5k, False: 0]
  ------------------
 2641|  16.5k|        }
 2642|   175k|    }
 2643|  2.79k|    if (bits_in_accum) {
  ------------------
  |  Branch (2643:9): [True: 2.51k, False: 283]
  ------------------
 2644|  2.51k|        assert(bits_in_accum <= PyLong_SHIFT);
  ------------------
  |  Branch (2644:9): [True: 2.51k, False: 0]
  ------------------
 2645|  2.51k|        *pdigit++ = (digit)accum;
 2646|  2.51k|        assert(pdigit - z->long_value.ob_digit <= n);
  ------------------
  |  Branch (2646:9): [True: 2.51k, False: 0]
  ------------------
 2647|  2.51k|    }
 2648|  2.79k|    while (pdigit - z->long_value.ob_digit < n)
  ------------------
  |  Branch (2648:12): [True: 0, False: 2.79k]
  ------------------
 2649|      0|        *pdigit++ = 0;
 2650|  2.79k|    *res = z;
 2651|  2.79k|    return 0;
 2652|  2.79k|}
longobject.c:pylong_int_from_string:
 2658|    152|{
 2659|    152|    PyObject *mod = PyImport_ImportModule("_pylong");
 2660|    152|    if (mod == NULL) {
  ------------------
  |  Branch (2660:9): [True: 0, False: 152]
  ------------------
 2661|      0|        goto error;
 2662|      0|    }
 2663|    152|    PyObject *s = PyUnicode_FromStringAndSize(start, end-start);
 2664|    152|    if (s == NULL) {
  ------------------
  |  Branch (2664:9): [True: 0, False: 152]
  ------------------
 2665|      0|        Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2666|      0|        goto error;
 2667|      0|    }
 2668|    152|    PyObject *result = PyObject_CallMethod(mod, "int_from_string", "O", s);
 2669|    152|    Py_DECREF(s);
  ------------------
  |  |  430|    152|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2670|    152|    Py_DECREF(mod);
  ------------------
  |  |  430|    152|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2671|    152|    if (result == NULL) {
  ------------------
  |  Branch (2671:9): [True: 0, False: 152]
  ------------------
 2672|      0|        goto error;
 2673|      0|    }
 2674|    152|    if (!PyLong_Check(result)) {
  ------------------
  |  |   13|    152|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    152|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2674:9): [True: 0, False: 152]
  ------------------
 2675|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2676|      0|        PyErr_SetString(PyExc_TypeError,
 2677|      0|                        "_pylong.int_from_string did not return an int");
 2678|      0|        goto error;
 2679|      0|    }
 2680|    152|    *res = (PyLongObject *)result;
 2681|    152|    return 0;
 2682|      0|error:
 2683|       |    *res = NULL;
 2684|      0|    return 0;  // See the long_from_string_base() API comment.
 2685|    152|}
longobject.c:long_from_non_binary_base:
 2830|  35.5k|{
 2831|  35.5k|    twodigits c;           /* current input character */
 2832|  35.5k|    Py_ssize_t size_z;
 2833|  35.5k|    int i;
 2834|  35.5k|    int convwidth;
 2835|  35.5k|    twodigits convmultmax, convmult;
 2836|  35.5k|    digit *pz, *pzstop;
 2837|  35.5k|    PyLongObject *z;
 2838|  35.5k|    const char *p;
 2839|       |
 2840|  35.5k|    assert(log_base_BASE[base] != 0.0);
  ------------------
  |  Branch (2840:5): [True: 35.5k, False: 0]
  ------------------
 2841|       |
 2842|       |    /* Create an int object that can contain the largest possible
 2843|       |     * integer with this base and length.  Note that there's no
 2844|       |     * need to initialize z->long_value.ob_digit -- no slot is read up before
 2845|       |     * being stored into.
 2846|       |     */
 2847|  35.5k|    double fsize_z = (double)digits * log_base_BASE[base] + 1.0;
 2848|  35.5k|    if (fsize_z > (double)MAX_LONG_DIGITS) {
  ------------------
  |  |  155|  35.5k|# define MAX_LONG_DIGITS ((INT64_MAX-1) / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  35.5k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (2848:9): [True: 0, False: 35.5k]
  ------------------
 2849|       |        /* The same exception as in long_alloc(). */
 2850|      0|        PyErr_SetString(PyExc_OverflowError,
 2851|      0|                        "too many digits in integer");
 2852|      0|        *res = NULL;
 2853|      0|        return 0;
 2854|      0|    }
 2855|  35.5k|    size_z = (Py_ssize_t)fsize_z;
 2856|       |    /* Uncomment next line to test exceedingly rare copy code */
 2857|       |    /* size_z = 1; */
 2858|  35.5k|    assert(size_z > 0);
  ------------------
  |  Branch (2858:5): [True: 35.5k, False: 0]
  ------------------
 2859|  35.5k|    z = long_alloc(size_z);
 2860|  35.5k|    if (z == NULL) {
  ------------------
  |  Branch (2860:9): [True: 0, False: 35.5k]
  ------------------
 2861|      0|        *res = NULL;
 2862|      0|        return 0;
 2863|      0|    }
 2864|  35.5k|    z->long_value.ob_digit[0] = 0;
 2865|  35.5k|    _PyLong_SetSignAndDigitCount(z, 0, 0);
 2866|       |
 2867|       |    /* `convwidth` consecutive input digits are treated as a single
 2868|       |     * digit in base `convmultmax`.
 2869|       |     */
 2870|  35.5k|    convwidth = convwidth_base[base];
 2871|  35.5k|    convmultmax = convmultmax_base[base];
 2872|       |
 2873|       |    /* Work ;-) */
 2874|  35.5k|    p = start;
 2875|   326k|    while (p < end) {
  ------------------
  |  Branch (2875:12): [True: 291k, False: 35.5k]
  ------------------
 2876|   291k|        if (*p == '_') {
  ------------------
  |  Branch (2876:13): [True: 0, False: 291k]
  ------------------
 2877|      0|            p++;
 2878|      0|            continue;
 2879|      0|        }
 2880|       |        /* grab up to convwidth digits from the input string */
 2881|   291k|        c = (digit)_PyLong_DigitValue[Py_CHARMASK(*p++)];
  ------------------
  |  |  163|   291k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 2882|  2.42M|        for (i = 1; i < convwidth && p != end; ++p) {
  ------------------
  |  Branch (2882:21): [True: 2.16M, False: 257k]
  |  Branch (2882:38): [True: 2.13M, False: 33.5k]
  ------------------
 2883|  2.13M|            if (*p == '_') {
  ------------------
  |  Branch (2883:17): [True: 0, False: 2.13M]
  ------------------
 2884|      0|                continue;
 2885|      0|            }
 2886|  2.13M|            i++;
 2887|  2.13M|            c = (twodigits)(c *  base +
 2888|  2.13M|                            (int)_PyLong_DigitValue[Py_CHARMASK(*p)]);
  ------------------
  |  |  163|  2.13M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
 2889|  2.13M|            assert(c < PyLong_BASE);
  ------------------
  |  Branch (2889:13): [True: 2.13M, False: 0]
  ------------------
 2890|  2.13M|        }
 2891|       |
 2892|   291k|        convmult = convmultmax;
 2893|       |        /* Calculate the shift only if we couldn't get
 2894|       |         * convwidth digits.
 2895|       |         */
 2896|   291k|        if (i != convwidth) {
  ------------------
  |  Branch (2896:13): [True: 33.5k, False: 257k]
  ------------------
 2897|  33.5k|            convmult = base;
 2898|   109k|            for ( ; i > 1; --i) {
  ------------------
  |  Branch (2898:21): [True: 76.2k, False: 33.5k]
  ------------------
 2899|  76.2k|                convmult *= base;
 2900|  76.2k|            }
 2901|  33.5k|        }
 2902|       |
 2903|       |        /* Multiply z by convmult, and add c. */
 2904|   291k|        pz = z->long_value.ob_digit;
 2905|   291k|        pzstop = pz + _PyLong_DigitCount(z);
 2906|  12.8M|        for (; pz < pzstop; ++pz) {
  ------------------
  |  Branch (2906:16): [True: 12.5M, False: 291k]
  ------------------
 2907|  12.5M|            c += (twodigits)*pz * convmult;
 2908|  12.5M|            *pz = (digit)(c & PyLong_MASK);
  ------------------
  |  |   62|  12.5M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  12.5M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  12.5M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2909|  12.5M|            c >>= PyLong_SHIFT;
  ------------------
  |  |   47|  12.5M|#define PyLong_SHIFT    30
  ------------------
 2910|  12.5M|        }
 2911|       |        /* carry off the current end? */
 2912|   291k|        if (c) {
  ------------------
  |  Branch (2912:13): [True: 236k, False: 54.4k]
  ------------------
 2913|   236k|            assert(c < PyLong_BASE);
  ------------------
  |  Branch (2913:13): [True: 236k, False: 0]
  ------------------
 2914|   236k|            if (_PyLong_DigitCount(z) < size_z) {
  ------------------
  |  Branch (2914:17): [True: 236k, False: 0]
  ------------------
 2915|   236k|                *pz = (digit)c;
 2916|   236k|                assert(!_PyLong_IsNegative(z));
  ------------------
  |  Branch (2916:17): [True: 236k, False: 0]
  ------------------
 2917|   236k|                _PyLong_SetSignAndDigitCount(z, 1, _PyLong_DigitCount(z) + 1);
 2918|   236k|            }
 2919|      0|            else {
 2920|      0|                PyLongObject *tmp;
 2921|       |                /* Extremely rare.  Get more space. */
 2922|      0|                assert(_PyLong_DigitCount(z) == size_z);
  ------------------
  |  Branch (2922:17): [True: 0, False: 0]
  ------------------
 2923|      0|                tmp = long_alloc(size_z + 1);
 2924|      0|                if (tmp == NULL) {
  ------------------
  |  Branch (2924:21): [True: 0, False: 0]
  ------------------
 2925|      0|                    Py_DECREF(z);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2926|      0|                    *res = NULL;
 2927|      0|                    return 0;
 2928|      0|                }
 2929|      0|                memcpy(tmp->long_value.ob_digit,
 2930|      0|                       z->long_value.ob_digit,
 2931|      0|                       sizeof(digit) * size_z);
 2932|      0|                Py_SETREF(z, tmp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2933|      0|                z->long_value.ob_digit[size_z] = (digit)c;
 2934|      0|                ++size_z;
 2935|      0|            }
 2936|   236k|        }
 2937|   291k|    }
 2938|  35.5k|    *res = z;
 2939|  35.5k|    return 0;
 2940|  35.5k|}
longobject.c:_PyLong_Negate:
  357|  39.1k|{
  358|  39.1k|    PyLongObject *x;
  359|       |
  360|  39.1k|    x = (PyLongObject *)*x_p;
  361|  39.1k|    if (_PyObject_IsUniquelyReferenced((PyObject *)x)) {
  ------------------
  |  Branch (361:9): [True: 35.7k, False: 3.35k]
  ------------------
  362|  35.7k|         _PyLong_FlipSign(x);
  363|  35.7k|        return;
  364|  35.7k|    }
  365|       |
  366|  3.35k|    *x_p = _PyLong_FromSTwoDigits(-medium_value(x));
  ------------------
  |  |   27|  3.35k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
  367|  3.35k|    Py_DECREF(x);
  ------------------
  |  |  430|  3.35k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|  3.35k|}
longobject.c:_PyLong_FromSTwoDigits:
  314|   700k|{
  315|   700k|    if (IS_SMALL_INT(x)) {
  ------------------
  |  |   29|   700k|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  ------------------
  |  |  |  |   68|   700k|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   98|   700k|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  ------------------
  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|   644k|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (68:6): [True: 644k, False: 55.8k]
  |  |  |  |  |  Branch (68:37): [True: 521k, False: 123k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|   521k|        return (PyLongObject*)get_small_int((sdigit)x);
  317|   521k|    }
  318|   700k|    assert(x != 0);
  ------------------
  |  Branch (318:5): [True: 179k, False: 0]
  ------------------
  319|   179k|    if (is_medium_int(x)) {
  ------------------
  |  Branch (319:9): [True: 142k, False: 36.7k]
  ------------------
  320|   142k|        return (PyLongObject*)_PyLong_FromMedium((sdigit)x);
  321|   142k|    }
  322|  36.7k|    return (PyLongObject*)_PyLong_FromLarge(x);
  323|   179k|}
longobject.c:_PyLong_FromLarge:
  274|  36.7k|{
  275|  36.7k|    twodigits abs_ival;
  276|  36.7k|    int sign;
  277|  36.7k|    assert(!is_medium_int(ival));
  ------------------
  |  Branch (277:5): [True: 36.7k, False: 0]
  ------------------
  278|       |
  279|  36.7k|    if (ival < 0) {
  ------------------
  |  Branch (279:9): [True: 1.34k, False: 35.4k]
  ------------------
  280|       |        /* negate: can't write this as abs_ival = -ival since that
  281|       |           invokes undefined behaviour when ival is LONG_MIN */
  282|  1.34k|        abs_ival = 0U-(twodigits)ival;
  283|  1.34k|        sign = -1;
  284|  1.34k|    }
  285|  35.4k|    else {
  286|  35.4k|        abs_ival = (twodigits)ival;
  287|  35.4k|        sign = 1;
  288|  35.4k|    }
  289|       |    /* Must be at least two digits */
  290|  36.7k|    assert(abs_ival >> PyLong_SHIFT != 0);
  ------------------
  |  Branch (290:5): [True: 36.7k, False: 0]
  ------------------
  291|  36.7k|    twodigits t = abs_ival >> (PyLong_SHIFT * 2);
  ------------------
  |  |   47|  36.7k|#define PyLong_SHIFT    30
  ------------------
  292|  36.7k|    Py_ssize_t ndigits = 2;
  293|  36.7k|    while (t) {
  ------------------
  |  Branch (293:12): [True: 0, False: 36.7k]
  ------------------
  294|      0|        ++ndigits;
  295|      0|        t >>= PyLong_SHIFT;
  ------------------
  |  |   47|      0|#define PyLong_SHIFT    30
  ------------------
  296|      0|    }
  297|  36.7k|    PyLongObject *v = long_alloc(ndigits);
  298|  36.7k|    if (v != NULL) {
  ------------------
  |  Branch (298:9): [True: 36.7k, False: 0]
  ------------------
  299|  36.7k|        digit *p = v->long_value.ob_digit;
  300|  36.7k|        _PyLong_SetSignAndDigitCount(v, sign, ndigits);
  301|  36.7k|        t = abs_ival;
  302|   110k|        while (t) {
  ------------------
  |  Branch (302:16): [True: 73.5k, False: 36.7k]
  ------------------
  303|  73.5k|            *p++ = Py_SAFE_DOWNCAST(
  ------------------
  |  |  247|  73.5k|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  73.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  304|  73.5k|                t & PyLong_MASK, twodigits, digit);
  305|  73.5k|            t >>= PyLong_SHIFT;
  ------------------
  |  |   47|  73.5k|#define PyLong_SHIFT    30
  ------------------
  306|  73.5k|        }
  307|  36.7k|    }
  308|  36.7k|    return (PyObject *)v;
  309|  36.7k|}
longobject.c:v_lshift:
 1906|  88.7k|{
 1907|  88.7k|    Py_ssize_t i;
 1908|  88.7k|    digit carry = 0;
 1909|       |
 1910|  88.7k|    assert(0 <= d && d < PyLong_SHIFT);
  ------------------
  |  Branch (1910:5): [True: 88.7k, False: 0]
  |  Branch (1910:5): [True: 88.7k, False: 0]
  ------------------
 1911|   375k|    for (i=0; i < m; i++) {
  ------------------
  |  Branch (1911:15): [True: 286k, False: 88.7k]
  ------------------
 1912|   286k|        twodigits acc = (twodigits)a[i] << d | carry;
 1913|   286k|        z[i] = (digit)acc & PyLong_MASK;
  ------------------
  |  |   62|   286k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|   286k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   286k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1914|   286k|        carry = (digit)(acc >> PyLong_SHIFT);
  ------------------
  |  |   47|   286k|#define PyLong_SHIFT    30
  ------------------
 1915|   286k|    }
 1916|  88.7k|    return carry;
 1917|  88.7k|}
longobject.c:v_rshift:
 1924|  41.6k|{
 1925|  41.6k|    Py_ssize_t i;
 1926|  41.6k|    digit carry = 0;
 1927|  41.6k|    digit mask = ((digit)1 << d) - 1U;
 1928|       |
 1929|  41.6k|    assert(0 <= d && d < PyLong_SHIFT);
  ------------------
  |  Branch (1929:5): [True: 41.6k, False: 0]
  |  Branch (1929:5): [True: 41.6k, False: 0]
  ------------------
 1930|   173k|    for (i=m; i-- > 0;) {
  ------------------
  |  Branch (1930:15): [True: 131k, False: 41.6k]
  ------------------
 1931|   131k|        twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
  ------------------
  |  |   47|   131k|#define PyLong_SHIFT    30
  ------------------
 1932|   131k|        carry = (digit)acc & mask;
 1933|   131k|        z[i] = (digit)(acc >> d);
 1934|   131k|    }
 1935|  41.6k|    return carry;
 1936|  41.6k|}
longobject.c:medium_from_stwodigits:
  329|  34.7M|{
  330|  34.7M|    if (IS_SMALL_INT(x)) {
  ------------------
  |  |   29|  34.7M|#define IS_SMALL_INT(ival) _PY_IS_SMALL_INT(ival)
  |  |  ------------------
  |  |  |  |   68|  34.7M|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   98|  34.7M|#define _PY_NSMALLNEGINTS           5
  |  |  |  |  ------------------
  |  |  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  34.6M|#define _PY_NSMALLPOSINTS           1025
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (68:6): [True: 34.6M, False: 96.6k]
  |  |  |  |  |  Branch (68:37): [True: 33.2M, False: 1.42M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|  33.2M|        return PyStackRef_FromPyObjectBorrow(get_small_int((sdigit)x));
  332|  33.2M|    }
  333|  34.7M|    assert(x != 0);
  ------------------
  |  Branch (333:5): [True: 1.51M, False: 0]
  ------------------
  334|  1.51M|    if(!is_medium_int(x)) {
  ------------------
  |  Branch (334:8): [True: 278, False: 1.51M]
  ------------------
  335|    278|        return PyStackRef_NULL;
  336|    278|    }
  337|  1.51M|    PyLongObject *v = (PyLongObject *)_Py_FREELIST_POP(PyLongObject, ints);
  ------------------
  |  |   43|  1.51M|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  1.51M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  338|  1.51M|    if (v == NULL) {
  ------------------
  |  Branch (338:9): [True: 1.15k, False: 1.51M]
  ------------------
  339|  1.15k|        v = PyObject_Malloc(sizeof(PyLongObject));
  340|  1.15k|        if (v == NULL) {
  ------------------
  |  Branch (340:13): [True: 0, False: 1.15k]
  ------------------
  341|      0|            return PyStackRef_NULL;
  342|      0|        }
  343|  1.15k|        _PyObject_Init((PyObject*)v, &PyLong_Type);
  344|  1.15k|        _PyLong_InitTag(v);
  345|  1.15k|    }
  346|  1.51M|    digit abs_x = x < 0 ? (digit)(-x) : (digit)x;
  ------------------
  |  Branch (346:19): [True: 96.6k, False: 1.42M]
  ------------------
  347|  1.51M|    _PyLong_SetSignAndDigitCount(v, x<0?-1:1, 1);
  ------------------
  |  Branch (347:37): [True: 96.6k, False: 1.42M]
  ------------------
  348|  1.51M|    v->long_value.ob_digit[0] = abs_x;
  349|  1.51M|    return PyStackRef_FromPyObjectStealMortal((PyObject *)v);
  350|  1.51M|}
longobject.c:long_rshift1:
 5315|  7.53k|{
 5316|  7.53k|    PyLongObject *z = NULL;
 5317|  7.53k|    Py_ssize_t newsize, hishift, size_a;
 5318|  7.53k|    twodigits accum;
 5319|  7.53k|    int a_negative;
 5320|       |
 5321|       |    /* Total number of bits shifted must be nonnegative. */
 5322|  7.53k|    assert(wordshift >= 0);
  ------------------
  |  Branch (5322:5): [True: 7.53k, False: 0]
  ------------------
 5323|  7.53k|    assert(remshift < PyLong_SHIFT);
  ------------------
  |  Branch (5323:5): [True: 7.53k, False: 0]
  ------------------
 5324|       |
 5325|       |    /* Fast path for small a. */
 5326|  7.53k|    if (_PyLong_IsCompact(a)) {
  ------------------
  |  Branch (5326:9): [True: 5.09k, False: 2.44k]
  ------------------
 5327|  5.09k|        stwodigits m, x;
 5328|  5.09k|        digit shift;
 5329|  5.09k|        m = medium_value(a);
  ------------------
  |  |   27|  5.09k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5330|  5.09k|        shift = wordshift == 0 ? remshift : PyLong_SHIFT;
  ------------------
  |  |   47|  7.45k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (5330:17): [True: 2.73k, False: 2.36k]
  ------------------
 5331|  5.09k|        x = m < 0 ? ~(~m >> shift) : m >> shift;
  ------------------
  |  Branch (5331:13): [True: 1.25k, False: 3.84k]
  ------------------
 5332|  5.09k|        return (PyObject*)_PyLong_FromSTwoDigits(x);
 5333|  5.09k|    }
 5334|       |
 5335|  2.44k|    a_negative = _PyLong_IsNegative(a);
 5336|  2.44k|    size_a = _PyLong_DigitCount(a);
 5337|       |
 5338|  2.44k|    if (a_negative) {
  ------------------
  |  Branch (5338:9): [True: 788, False: 1.65k]
  ------------------
 5339|       |        /* For negative 'a', adjust so that 0 < remshift <= PyLong_SHIFT,
 5340|       |           while keeping PyLong_SHIFT*wordshift + remshift the same. This
 5341|       |           ensures that 'newsize' is computed correctly below. */
 5342|    788|        if (remshift == 0) {
  ------------------
  |  Branch (5342:13): [True: 304, False: 484]
  ------------------
 5343|    304|            if (wordshift == 0) {
  ------------------
  |  Branch (5343:17): [True: 165, False: 139]
  ------------------
 5344|       |                /* Can only happen if the original shift was 0. */
 5345|    165|                return long_long((PyObject *)a);
 5346|    165|            }
 5347|    139|            remshift = PyLong_SHIFT;
  ------------------
  |  |   47|    139|#define PyLong_SHIFT    30
  ------------------
 5348|    139|            --wordshift;
 5349|    139|        }
 5350|    788|    }
 5351|       |
 5352|  2.44k|    assert(wordshift >= 0);
  ------------------
  |  Branch (5352:5): [True: 2.27k, False: 0]
  ------------------
 5353|  2.27k|    newsize = size_a - wordshift;
 5354|  2.27k|    if (newsize <= 0) {
  ------------------
  |  Branch (5354:9): [True: 1.09k, False: 1.18k]
  ------------------
 5355|       |        /* Shifting all the bits of 'a' out gives either -1 or 0. */
 5356|  1.09k|        return PyLong_FromLong(-a_negative);
 5357|  1.09k|    }
 5358|  1.18k|    z = long_alloc(newsize);
 5359|  1.18k|    if (z == NULL) {
  ------------------
  |  Branch (5359:9): [True: 0, False: 1.18k]
  ------------------
 5360|      0|        return NULL;
 5361|      0|    }
 5362|  1.18k|    hishift = PyLong_SHIFT - remshift;
  ------------------
  |  |   47|  1.18k|#define PyLong_SHIFT    30
  ------------------
 5363|       |
 5364|  1.18k|    accum = a->long_value.ob_digit[wordshift];
 5365|  1.18k|    if (a_negative) {
  ------------------
  |  Branch (5365:9): [True: 190, False: 992]
  ------------------
 5366|       |        /*
 5367|       |            For a positive integer a and nonnegative shift, we have:
 5368|       |
 5369|       |                (-a) >> shift == -((a + 2**shift - 1) >> shift).
 5370|       |
 5371|       |            In the addition `a + (2**shift - 1)`, the low `wordshift` digits of
 5372|       |            `2**shift - 1` all have value `PyLong_MASK`, so we get a carry out
 5373|       |            from the bottom `wordshift` digits when at least one of the least
 5374|       |            significant `wordshift` digits of `a` is nonzero. Digit `wordshift`
 5375|       |            of `2**shift - 1` has value `PyLong_MASK >> hishift`.
 5376|       |        */
 5377|    190|        _PyLong_SetSignAndDigitCount(z, -1, newsize);
 5378|       |
 5379|    190|        digit sticky = 0;
 5380|    429|        for (Py_ssize_t j = 0; j < wordshift; j++) {
  ------------------
  |  Branch (5380:32): [True: 239, False: 190]
  ------------------
 5381|    239|            sticky |= a->long_value.ob_digit[j];
 5382|    239|        }
 5383|    190|        accum += (PyLong_MASK >> hishift) + (digit)(sticky != 0);
  ------------------
  |  |   62|    190|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|    190|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|    190|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5384|    190|    }
 5385|       |
 5386|  1.18k|    accum >>= remshift;
 5387|  58.2k|    for (Py_ssize_t i = 0, j = wordshift + 1; j < size_a; i++, j++) {
  ------------------
  |  Branch (5387:47): [True: 57.0k, False: 1.18k]
  ------------------
 5388|  57.0k|        accum += (twodigits)a->long_value.ob_digit[j] << hishift;
 5389|  57.0k|        z->long_value.ob_digit[i] = (digit)(accum & PyLong_MASK);
  ------------------
  |  |   62|  57.0k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  57.0k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  57.0k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5390|  57.0k|        accum >>= PyLong_SHIFT;
  ------------------
  |  |   47|  57.0k|#define PyLong_SHIFT    30
  ------------------
 5391|  57.0k|    }
 5392|  1.18k|    assert(accum <= PyLong_MASK);
  ------------------
  |  Branch (5392:5): [True: 1.18k, False: 0]
  ------------------
 5393|  1.18k|    z->long_value.ob_digit[newsize - 1] = (digit)accum;
 5394|       |
 5395|  1.18k|    z = maybe_small_long(long_normalize(z));
 5396|  1.18k|    return (PyObject *)z;
 5397|  1.18k|}
longobject.c:long_long:
 5734|   115k|{
 5735|   115k|    if (PyLong_CheckExact(v)) {
  ------------------
  |  |   14|   115k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|   115k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   115k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   115k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 111k, False: 3.40k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5736|   111k|        return Py_NewRef(v);
  ------------------
  |  |  550|   111k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   111k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   111k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5737|   111k|    }
 5738|  3.40k|    else {
 5739|  3.40k|        return _PyLong_Copy((PyLongObject *)v);
 5740|  3.40k|    }
 5741|   115k|}
longobject.c:long_lshift_int64:
 5526|  7.17k|{
 5527|  7.17k|    assert(shiftby >= 0);
  ------------------
  |  Branch (5527:5): [True: 7.17k, False: 0]
  ------------------
 5528|       |
 5529|  7.17k|    if (_PyLong_IsZero(a)) {
  ------------------
  |  Branch (5529:9): [True: 0, False: 7.17k]
  ------------------
 5530|      0|        return PyLong_FromLong(0);
 5531|      0|    }
 5532|       |#if PY_SSIZE_T_MAX <= INT64_MAX / PyLong_SHIFT
 5533|       |    if (shiftby > (int64_t)PY_SSIZE_T_MAX * PyLong_SHIFT) {
 5534|       |        PyErr_SetString(PyExc_OverflowError,
 5535|       |                        "too many digits in integer");
 5536|       |        return NULL;
 5537|       |    }
 5538|       |#endif
 5539|  7.17k|    Py_ssize_t wordshift = (Py_ssize_t)(shiftby / PyLong_SHIFT);
  ------------------
  |  |   47|  7.17k|#define PyLong_SHIFT    30
  ------------------
 5540|  7.17k|    digit remshift = (digit)(shiftby % PyLong_SHIFT);
  ------------------
  |  |   47|  7.17k|#define PyLong_SHIFT    30
  ------------------
 5541|  7.17k|    return long_lshift1(a, wordshift, remshift);
 5542|  7.17k|}
longobject.c:long_lshift1:
 5457|  7.17k|{
 5458|  7.17k|    PyLongObject *z = NULL;
 5459|  7.17k|    Py_ssize_t oldsize, newsize, i, j;
 5460|  7.17k|    twodigits accum;
 5461|       |
 5462|  7.17k|    if (wordshift == 0 && _PyLong_IsCompact(a)) {
  ------------------
  |  Branch (5462:9): [True: 882, False: 6.29k]
  |  Branch (5462:27): [True: 480, False: 402]
  ------------------
 5463|    480|        stwodigits m = medium_value(a);
  ------------------
  |  |   27|    480|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5464|       |        // bypass undefined shift operator behavior
 5465|    480|        stwodigits x = m < 0 ? -(-m << remshift) : m << remshift;
  ------------------
  |  Branch (5465:24): [True: 15, False: 465]
  ------------------
 5466|    480|        return (PyObject*)_PyLong_FromSTwoDigits(x);
 5467|    480|    }
 5468|       |
 5469|  6.69k|    oldsize = _PyLong_DigitCount(a);
 5470|  6.69k|    newsize = oldsize + wordshift;
 5471|  6.69k|    if (remshift)
  ------------------
  |  Branch (5471:9): [True: 2.82k, False: 3.86k]
  ------------------
 5472|  2.82k|        ++newsize;
 5473|  6.69k|    z = long_alloc(newsize);
 5474|  6.69k|    if (z == NULL)
  ------------------
  |  Branch (5474:9): [True: 0, False: 6.69k]
  ------------------
 5475|      0|        return NULL;
 5476|  6.69k|    if (_PyLong_IsNegative(a)) {
  ------------------
  |  Branch (5476:9): [True: 168, False: 6.52k]
  ------------------
 5477|    168|        assert(Py_REFCNT(z) == 1);
  ------------------
  |  Branch (5477:9): [True: 168, False: 0]
  ------------------
 5478|    168|        _PyLong_FlipSign(z);
 5479|    168|    }
 5480|  89.4k|    for (i = 0; i < wordshift; i++)
  ------------------
  |  Branch (5480:17): [True: 82.7k, False: 6.69k]
  ------------------
 5481|  82.7k|        z->long_value.ob_digit[i] = 0;
 5482|  6.69k|    accum = 0;
 5483|   220k|    for (j = 0; j < oldsize; i++, j++) {
  ------------------
  |  Branch (5483:17): [True: 214k, False: 6.69k]
  ------------------
 5484|   214k|        accum |= (twodigits)a->long_value.ob_digit[j] << remshift;
 5485|   214k|        z->long_value.ob_digit[i] = (digit)(accum & PyLong_MASK);
  ------------------
  |  |   62|   214k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|   214k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   214k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5486|   214k|        accum >>= PyLong_SHIFT;
  ------------------
  |  |   47|   214k|#define PyLong_SHIFT    30
  ------------------
 5487|   214k|    }
 5488|  6.69k|    if (remshift)
  ------------------
  |  Branch (5488:9): [True: 2.82k, False: 3.86k]
  ------------------
 5489|  2.82k|        z->long_value.ob_digit[newsize-1] = (digit)accum;
 5490|  3.86k|    else
 5491|  6.69k|        assert(!accum);
  ------------------
  |  Branch (5491:9): [True: 3.86k, False: 0]
  ------------------
 5492|  6.69k|    z = long_normalize(z);
 5493|  6.69k|    return (PyObject *) maybe_small_long(z);
 5494|  6.69k|}
longobject.c:long_abs:
 5290|      3|{
 5291|      3|    if (_PyLong_IsNegative(v))
  ------------------
  |  Branch (5291:9): [True: 1, False: 2]
  ------------------
 5292|      1|        return long_neg(v);
 5293|      2|    else
 5294|      2|        return (PyLongObject*)long_long((PyObject *)v);
 5295|      3|}
longobject.c:long_compare:
 3606|   666k|{
 3607|   666k|    if (_PyLong_BothAreCompact(a, b)) {
  ------------------
  |  Branch (3607:9): [True: 215k, False: 450k]
  ------------------
 3608|   215k|        return _PyLong_CompactValue(a) - _PyLong_CompactValue(b);
 3609|   215k|    }
 3610|   450k|    Py_ssize_t sign = _PyLong_SignedDigitCount(a) - _PyLong_SignedDigitCount(b);
 3611|   450k|    if (sign == 0) {
  ------------------
  |  Branch (3611:9): [True: 253k, False: 197k]
  ------------------
 3612|   253k|        Py_ssize_t i = _PyLong_DigitCount(a);
 3613|   253k|        sdigit diff = 0;
 3614|   921k|        while (--i >= 0) {
  ------------------
  |  Branch (3614:16): [True: 669k, False: 252k]
  ------------------
 3615|   669k|            diff = (sdigit) a->long_value.ob_digit[i] - (sdigit) b->long_value.ob_digit[i];
 3616|   669k|            if (diff) {
  ------------------
  |  Branch (3616:17): [True: 1.34k, False: 668k]
  ------------------
 3617|  1.34k|                break;
 3618|  1.34k|            }
 3619|   669k|        }
 3620|   253k|        sign = _PyLong_IsNegative(a) ? -diff : diff;
  ------------------
  |  Branch (3620:16): [True: 56.9k, False: 196k]
  ------------------
 3621|   253k|    }
 3622|   450k|    return sign;
 3623|   666k|}
longobject.c:l_mod:
 4561|   349k|{
 4562|   349k|    PyLongObject *mod;
 4563|       |
 4564|   349k|    assert(pmod);
  ------------------
  |  Branch (4564:5): [True: 349k, False: 0]
  ------------------
 4565|   349k|    if (_PyLong_DigitCount(v) == 1 && _PyLong_DigitCount(w) == 1) {
  ------------------
  |  Branch (4565:9): [True: 330k, False: 19.2k]
  |  Branch (4565:39): [True: 326k, False: 3.65k]
  ------------------
 4566|       |        /* Fast path for single-digit longs */
 4567|   326k|        *pmod = (PyLongObject *)fast_mod(v, w);
 4568|   326k|        return -(*pmod == NULL);
 4569|   326k|    }
 4570|  22.9k|    if (long_rem(v, w, &mod) < 0)
  ------------------
  |  Branch (4570:9): [True: 263, False: 22.6k]
  ------------------
 4571|    263|        return -1;
 4572|  22.6k|    if ((_PyLong_IsNegative(mod) && _PyLong_IsPositive(w)) ||
  ------------------
  |  Branch (4572:10): [True: 6.31k, False: 16.3k]
  |  Branch (4572:37): [True: 2.04k, False: 4.26k]
  ------------------
 4573|  20.6k|        (_PyLong_IsPositive(mod) && _PyLong_IsNegative(w))) {
  ------------------
  |  Branch (4573:10): [True: 6.46k, False: 14.1k]
  |  Branch (4573:37): [True: 3.37k, False: 3.09k]
  ------------------
 4574|  5.42k|        PyLongObject *temp;
 4575|  5.42k|        temp = long_add(mod, w);
 4576|  5.42k|        Py_SETREF(mod, temp);
  ------------------
  |  |  354|  5.42k|    do { \
  |  |  355|  5.42k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  5.42k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  5.42k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.42k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  5.42k|        *_tmp_dst_ptr = (src); \
  |  |  358|  5.42k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  5.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  5.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 5.42k]
  |  |  ------------------
  ------------------
 4577|  5.42k|        if (mod == NULL)
  ------------------
  |  Branch (4577:13): [True: 0, False: 5.42k]
  ------------------
 4578|      0|            return -1;
 4579|  5.42k|    }
 4580|  22.6k|    *pmod = mod;
 4581|       |
 4582|  22.6k|    return 0;
 4583|  22.6k|}
longobject.c:fast_mod:
 4379|   326k|{
 4380|   326k|    sdigit left = a->long_value.ob_digit[0];
 4381|   326k|    sdigit right = b->long_value.ob_digit[0];
 4382|   326k|    sdigit mod;
 4383|       |
 4384|   326k|    assert(_PyLong_DigitCount(a) == 1);
  ------------------
  |  Branch (4384:5): [True: 326k, False: 0]
  ------------------
 4385|   326k|    assert(_PyLong_DigitCount(b) == 1);
  ------------------
  |  Branch (4385:5): [True: 326k, False: 0]
  ------------------
 4386|   326k|    sdigit sign = _PyLong_CompactSign(b);
 4387|   326k|    if (_PyLong_SameSign(a, b)) {
  ------------------
  |  Branch (4387:9): [True: 323k, False: 3.45k]
  ------------------
 4388|   323k|        mod = left % right;
 4389|   323k|    }
 4390|  3.45k|    else {
 4391|       |        /* Either 'a' or 'b' is negative. */
 4392|  3.45k|        mod = right - 1 - (left - 1) % right;
 4393|  3.45k|    }
 4394|       |
 4395|   326k|    return PyLong_FromLong(mod * sign);
 4396|   326k|}
longobject.c:long_rem:
 3282|  22.9k|{
 3283|  22.9k|    Py_ssize_t size_a = _PyLong_DigitCount(a), size_b = _PyLong_DigitCount(b);
 3284|       |
 3285|  22.9k|    if (size_b == 0) {
  ------------------
  |  Branch (3285:9): [True: 263, False: 22.6k]
  ------------------
 3286|    263|        PyErr_SetString(PyExc_ZeroDivisionError,
 3287|    263|                        "division by zero");
 3288|    263|        return -1;
 3289|    263|    }
 3290|  22.6k|    if (size_a < size_b ||
  ------------------
  |  Branch (3290:9): [True: 9.05k, False: 13.6k]
  ------------------
 3291|  13.6k|        (size_a == size_b &&
  ------------------
  |  Branch (3291:10): [True: 6.07k, False: 7.54k]
  ------------------
 3292|  10.3k|         a->long_value.ob_digit[size_a-1] < b->long_value.ob_digit[size_b-1])) {
  ------------------
  |  Branch (3292:10): [True: 1.33k, False: 4.74k]
  ------------------
 3293|       |        /* |a| < |b|. */
 3294|  10.3k|        *prem = (PyLongObject *)long_long((PyObject *)a);
 3295|  10.3k|        return -(*prem == NULL);
 3296|  10.3k|    }
 3297|  12.2k|    if (size_b == 1) {
  ------------------
  |  Branch (3297:9): [True: 6.66k, False: 5.62k]
  ------------------
 3298|  6.66k|        *prem = rem1(a, b->long_value.ob_digit[0]);
 3299|  6.66k|        if (*prem == NULL)
  ------------------
  |  Branch (3299:13): [True: 0, False: 6.66k]
  ------------------
 3300|      0|            return -1;
 3301|  6.66k|    }
 3302|  5.62k|    else {
 3303|       |        /* Slow path using divrem. */
 3304|  5.62k|        Py_XDECREF(x_divrem(a, b, prem));
  ------------------
  |  |  524|  5.62k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3305|  5.62k|        *prem = maybe_small_long(*prem);
 3306|  5.62k|        if (*prem == NULL)
  ------------------
  |  Branch (3306:13): [True: 0, False: 5.62k]
  ------------------
 3307|      0|            return -1;
 3308|  5.62k|    }
 3309|       |    /* Set the sign. */
 3310|  12.2k|    if (_PyLong_IsNegative(a) && !_PyLong_IsZero(*prem)) {
  ------------------
  |  Branch (3310:9): [True: 7.11k, False: 5.17k]
  |  Branch (3310:34): [True: 4.51k, False: 2.59k]
  ------------------
 3311|  4.51k|        _PyLong_Negate(prem);
 3312|  4.51k|        if (*prem == NULL) {
  ------------------
  |  Branch (3312:13): [True: 0, False: 4.51k]
  ------------------
 3313|      0|            Py_CLEAR(*prem);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3314|      0|            return -1;
 3315|      0|        }
 3316|  4.51k|    }
 3317|  12.2k|    return 0;
 3318|  12.2k|}
longobject.c:rem1:
 2015|  6.66k|{
 2016|  6.66k|    const Py_ssize_t size = _PyLong_DigitCount(a);
 2017|       |
 2018|  6.66k|    assert(n > 0 && n <= PyLong_MASK);
  ------------------
  |  Branch (2018:5): [True: 6.66k, False: 0]
  |  Branch (2018:5): [True: 6.66k, False: 0]
  ------------------
 2019|  6.66k|    return (PyLongObject *)PyLong_FromLong(
 2020|  6.66k|        (long)inplace_rem1(a->long_value.ob_digit, size, n)
 2021|  6.66k|    );
 2022|  6.66k|}
longobject.c:inplace_rem1:
 2000|  6.66k|{
 2001|  6.66k|    twodigits rem = 0;
 2002|       |
 2003|  6.66k|    assert(n > 0 && n <= PyLong_MASK);
  ------------------
  |  Branch (2003:5): [True: 6.66k, False: 0]
  |  Branch (2003:5): [True: 6.66k, False: 0]
  ------------------
 2004|  25.6k|    while (--size >= 0)
  ------------------
  |  Branch (2004:12): [True: 18.9k, False: 6.66k]
  ------------------
 2005|  18.9k|        rem = ((rem << PyLong_SHIFT) | pin[size]) % n;
  ------------------
  |  |   47|  18.9k|#define PyLong_SHIFT    30
  ------------------
 2006|  6.66k|    return (digit)rem;
 2007|  6.66k|}
longobject.c:x_divrem:
 3325|  29.7k|{
 3326|  29.7k|    PyLongObject *v, *w, *a;
 3327|  29.7k|    Py_ssize_t i, k, size_v, size_w;
 3328|  29.7k|    int d;
 3329|  29.7k|    digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
 3330|  29.7k|    twodigits vv;
 3331|  29.7k|    sdigit zhi;
 3332|  29.7k|    stwodigits z;
 3333|       |
 3334|       |    /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
 3335|       |       edn.), section 4.3.1, Algorithm D], except that we don't explicitly
 3336|       |       handle the special case when the initial estimate q for a quotient
 3337|       |       digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
 3338|       |       that won't overflow a digit. */
 3339|       |
 3340|       |    /* allocate space; w will also be used to hold the final remainder */
 3341|  29.7k|    size_v = _PyLong_DigitCount(v1);
 3342|  29.7k|    size_w = _PyLong_DigitCount(w1);
 3343|  29.7k|    assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
  ------------------
  |  Branch (3343:5): [True: 29.7k, False: 0]
  |  Branch (3343:5): [True: 29.7k, False: 0]
  ------------------
 3344|  29.7k|    v = long_alloc(size_v+1);
 3345|  29.7k|    if (v == NULL) {
  ------------------
  |  Branch (3345:9): [True: 0, False: 29.7k]
  ------------------
 3346|      0|        *prem = NULL;
 3347|      0|        return NULL;
 3348|      0|    }
 3349|  29.7k|    w = long_alloc(size_w);
 3350|  29.7k|    if (w == NULL) {
  ------------------
  |  Branch (3350:9): [True: 0, False: 29.7k]
  ------------------
 3351|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3352|      0|        *prem = NULL;
 3353|      0|        return NULL;
 3354|      0|    }
 3355|       |
 3356|       |    /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
 3357|       |       shift v1 left by the same amount.  Results go into w and v. */
 3358|  29.7k|    d = PyLong_SHIFT - bit_length_digit(w1->long_value.ob_digit[size_w-1]);
  ------------------
  |  |   47|  29.7k|#define PyLong_SHIFT    30
  ------------------
 3359|  29.7k|    carry = v_lshift(w->long_value.ob_digit, w1->long_value.ob_digit, size_w, d);
 3360|  29.7k|    assert(carry == 0);
  ------------------
  |  Branch (3360:5): [True: 29.7k, False: 0]
  ------------------
 3361|  29.7k|    carry = v_lshift(v->long_value.ob_digit, v1->long_value.ob_digit, size_v, d);
 3362|  29.7k|    if (carry != 0 || v->long_value.ob_digit[size_v-1] >= w->long_value.ob_digit[size_w-1]) {
  ------------------
  |  Branch (3362:9): [True: 13.6k, False: 16.0k]
  |  Branch (3362:23): [True: 755, False: 15.2k]
  ------------------
 3363|  14.4k|        v->long_value.ob_digit[size_v] = carry;
 3364|  14.4k|        size_v++;
 3365|  14.4k|    }
 3366|       |
 3367|       |    /* Now v->long_value.ob_digit[size_v-1] < w->long_value.ob_digit[size_w-1], so quotient has
 3368|       |       at most (and usually exactly) k = size_v - size_w digits. */
 3369|  29.7k|    k = size_v - size_w;
 3370|  29.7k|    assert(k >= 0);
  ------------------
  |  Branch (3370:5): [True: 29.7k, False: 0]
  ------------------
 3371|  29.7k|    a = long_alloc(k);
 3372|  29.7k|    if (a == NULL) {
  ------------------
  |  Branch (3372:9): [True: 0, False: 29.7k]
  ------------------
 3373|      0|        Py_DECREF(w);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3374|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3375|      0|        *prem = NULL;
 3376|      0|        return NULL;
 3377|      0|    }
 3378|  29.7k|    a->long_value.ob_digit[0] = 0;
 3379|  29.7k|    v0 = v->long_value.ob_digit;
 3380|  29.7k|    w0 = w->long_value.ob_digit;
 3381|  29.7k|    wm1 = w0[size_w-1];
 3382|  29.7k|    wm2 = w0[size_w-2];
 3383|  94.1k|    for (vk = v0+k, ak = a->long_value.ob_digit + k; vk-- > v0;) {
  ------------------
  |  Branch (3383:54): [True: 64.4k, False: 29.7k]
  ------------------
 3384|       |        /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
 3385|       |           single-digit quotient q, remainder in vk[0:size_w]. */
 3386|       |
 3387|  64.4k|        SIGCHECK({
  ------------------
  |  |  117|  64.4k|    do {                                        \
  |  |  118|  64.4k|        if (PyErr_CheckSignals()) PyTryBlock    \
  |  |  ------------------
  |  |  |  Branch (118:13): [True: 0, False: 64.4k]
  |  |  ------------------
  |  |  119|  64.4k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (119:13): [Folded, False: 64.4k]
  |  |  ------------------
  ------------------
 3388|  64.4k|                Py_DECREF(a);
 3389|  64.4k|                Py_DECREF(w);
 3390|  64.4k|                Py_DECREF(v);
 3391|  64.4k|                *prem = NULL;
 3392|  64.4k|                return NULL;
 3393|  64.4k|            });
 3394|       |
 3395|       |        /* estimate quotient digit q; may overestimate by 1 (rare) */
 3396|  64.4k|        vtop = vk[size_w];
 3397|  64.4k|        assert(vtop <= wm1);
  ------------------
  |  Branch (3397:9): [True: 64.4k, False: 0]
  ------------------
 3398|  64.4k|        vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
  ------------------
  |  |   47|  64.4k|#define PyLong_SHIFT    30
  ------------------
 3399|       |        /* The code used to compute the remainder via
 3400|       |         *     r = (digit)(vv - (twodigits)wm1 * q);
 3401|       |         * and compilers generally generated code to do the * and -.
 3402|       |         * But modern processors generally compute q and r with a single
 3403|       |         * instruction, and modern optimizing compilers exploit that if we
 3404|       |         * _don't_ try to optimize it.
 3405|       |         */
 3406|  64.4k|        q = (digit)(vv / wm1);
 3407|  64.4k|        r = (digit)(vv % wm1);
 3408|  80.3k|        while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
  ------------------
  |  |   47|  80.3k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (3408:16): [True: 18.6k, False: 61.6k]
  ------------------
 3409|  80.3k|                                     | vk[size_w-2])) {
 3410|  18.6k|            --q;
 3411|  18.6k|            r += wm1;
 3412|  18.6k|            if (r >= PyLong_BASE)
  ------------------
  |  |   61|  18.6k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  18.6k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (3412:17): [True: 2.73k, False: 15.9k]
  ------------------
 3413|  2.73k|                break;
 3414|  18.6k|        }
 3415|  64.4k|        assert(q <= PyLong_BASE);
  ------------------
  |  Branch (3415:9): [True: 64.4k, False: 0]
  ------------------
 3416|       |
 3417|       |        /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
 3418|  64.4k|        zhi = 0;
 3419|  1.12M|        for (i = 0; i < size_w; ++i) {
  ------------------
  |  Branch (3419:21): [True: 1.06M, False: 64.4k]
  ------------------
 3420|       |            /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
 3421|       |               -PyLong_BASE * q <= z < PyLong_BASE */
 3422|  1.06M|            z = (sdigit)vk[i] + zhi -
 3423|  1.06M|                (stwodigits)q * (stwodigits)w0[i];
 3424|  1.06M|            vk[i] = (digit)z & PyLong_MASK;
  ------------------
  |  |   62|  1.06M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  1.06M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  1.06M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3425|  1.06M|            zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
  ------------------
  |  |  226|  1.06M|#define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J))
  ------------------
 3426|  1.06M|                                                    z, PyLong_SHIFT);
 3427|  1.06M|        }
 3428|       |
 3429|       |        /* add w back if q was too large (this branch taken rarely) */
 3430|  64.4k|        assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
  ------------------
  |  Branch (3430:9): [True: 584, False: 63.8k]
  |  Branch (3430:9): [True: 63.8k, False: 0]
  ------------------
 3431|  64.4k|        if ((sdigit)vtop + zhi < 0) {
  ------------------
  |  Branch (3431:13): [True: 584, False: 63.8k]
  ------------------
 3432|    584|            carry = 0;
 3433|  3.39k|            for (i = 0; i < size_w; ++i) {
  ------------------
  |  Branch (3433:25): [True: 2.80k, False: 584]
  ------------------
 3434|  2.80k|                carry += vk[i] + w0[i];
 3435|  2.80k|                vk[i] = carry & PyLong_MASK;
  ------------------
  |  |   62|  2.80k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  2.80k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  2.80k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3436|  2.80k|                carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  2.80k|#define PyLong_SHIFT    30
  ------------------
 3437|  2.80k|            }
 3438|    584|            --q;
 3439|    584|        }
 3440|       |
 3441|       |        /* store quotient digit */
 3442|  64.4k|        assert(q < PyLong_BASE);
  ------------------
  |  Branch (3442:9): [True: 64.4k, False: 0]
  ------------------
 3443|  64.4k|        *--ak = q;
 3444|  64.4k|    }
 3445|       |
 3446|       |    /* unshift remainder; we reuse w to store the result */
 3447|  29.7k|    carry = v_rshift(w0, v0, size_w, d);
 3448|  29.7k|    assert(carry==0);
  ------------------
  |  Branch (3448:5): [True: 29.7k, False: 0]
  ------------------
 3449|  29.7k|    Py_DECREF(v);
  ------------------
  |  |  430|  29.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  29.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  29.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3450|       |
 3451|  29.7k|    *prem = long_normalize(w);
 3452|  29.7k|    return long_normalize(a);
 3453|  29.7k|}
longobject.c:long_divrem:
 3219|  92.3k|{
 3220|  92.3k|    Py_ssize_t size_a = _PyLong_DigitCount(a), size_b = _PyLong_DigitCount(b);
 3221|  92.3k|    PyLongObject *z;
 3222|       |
 3223|  92.3k|    if (size_b == 0) {
  ------------------
  |  Branch (3223:9): [True: 108, False: 92.2k]
  ------------------
 3224|    108|        PyErr_SetString(PyExc_ZeroDivisionError, "division by zero");
 3225|    108|        return -1;
 3226|    108|    }
 3227|  92.2k|    if (size_a < size_b ||
  ------------------
  |  Branch (3227:9): [True: 78.2k, False: 14.0k]
  ------------------
 3228|  14.0k|        (size_a == size_b &&
  ------------------
  |  Branch (3228:10): [True: 1.85k, False: 12.1k]
  ------------------
 3229|  78.6k|         a->long_value.ob_digit[size_a-1] < b->long_value.ob_digit[size_b-1])) {
  ------------------
  |  Branch (3229:10): [True: 442, False: 1.41k]
  ------------------
 3230|       |        /* |a| < |b|. */
 3231|  78.6k|        *prem = (PyLongObject *)long_long((PyObject *)a);
 3232|  78.6k|        if (*prem == NULL) {
  ------------------
  |  Branch (3232:13): [True: 0, False: 78.6k]
  ------------------
 3233|      0|            return -1;
 3234|      0|        }
 3235|  78.6k|        *pdiv = (PyLongObject*)_PyLong_GetZero();
 3236|  78.6k|        return 0;
 3237|  78.6k|    }
 3238|  13.5k|    if (size_b == 1) {
  ------------------
  |  Branch (3238:9): [True: 9.35k, False: 4.20k]
  ------------------
 3239|  9.35k|        digit rem = 0;
 3240|  9.35k|        z = divrem1(a, b->long_value.ob_digit[0], &rem);
 3241|  9.35k|        if (z == NULL)
  ------------------
  |  Branch (3241:13): [True: 0, False: 9.35k]
  ------------------
 3242|      0|            return -1;
 3243|  9.35k|        *prem = (PyLongObject *) PyLong_FromLong((long)rem);
 3244|  9.35k|        if (*prem == NULL) {
  ------------------
  |  Branch (3244:13): [True: 0, False: 9.35k]
  ------------------
 3245|      0|            Py_DECREF(z);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3246|      0|            return -1;
 3247|      0|        }
 3248|  9.35k|    }
 3249|  4.20k|    else {
 3250|  4.20k|        z = x_divrem(a, b, prem);
 3251|  4.20k|        *prem = maybe_small_long(*prem);
 3252|  4.20k|        if (z == NULL)
  ------------------
  |  Branch (3252:13): [True: 0, False: 4.20k]
  ------------------
 3253|      0|            return -1;
 3254|  4.20k|    }
 3255|       |    /* Set the signs.
 3256|       |       The quotient z has the sign of a*b;
 3257|       |       the remainder r has the sign of a,
 3258|       |       so a = b*z + r. */
 3259|  13.5k|    if ((_PyLong_IsNegative(a)) != (_PyLong_IsNegative(b))) {
  ------------------
  |  Branch (3259:9): [True: 12.4k, False: 1.08k]
  ------------------
 3260|  12.4k|        _PyLong_Negate(&z);
 3261|  12.4k|        if (z == NULL) {
  ------------------
  |  Branch (3261:13): [True: 0, False: 12.4k]
  ------------------
 3262|      0|            Py_CLEAR(*prem);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3263|      0|            return -1;
 3264|      0|        }
 3265|  12.4k|    }
 3266|  13.5k|    if (_PyLong_IsNegative(a) && !_PyLong_IsZero(*prem)) {
  ------------------
  |  Branch (3266:9): [True: 12.3k, False: 1.25k]
  |  Branch (3266:34): [True: 8.21k, False: 4.09k]
  ------------------
 3267|  8.21k|        _PyLong_Negate(prem);
 3268|  8.21k|        if (*prem == NULL) {
  ------------------
  |  Branch (3268:13): [True: 0, False: 8.21k]
  ------------------
 3269|      0|            Py_DECREF(z);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3270|      0|            Py_CLEAR(*prem);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3271|      0|            return -1;
 3272|      0|        }
 3273|  8.21k|    }
 3274|  13.5k|    *pdiv = maybe_small_long(z);
 3275|  13.5k|    return 0;
 3276|  13.5k|}
longobject.c:divrem1:
 1983|  9.35k|{
 1984|  9.35k|    const Py_ssize_t size = _PyLong_DigitCount(a);
 1985|  9.35k|    PyLongObject *z;
 1986|       |
 1987|  9.35k|    assert(n > 0 && n <= PyLong_MASK);
  ------------------
  |  Branch (1987:5): [True: 9.35k, False: 0]
  |  Branch (1987:5): [True: 9.35k, False: 0]
  ------------------
 1988|  9.35k|    z = long_alloc(size);
 1989|  9.35k|    if (z == NULL)
  ------------------
  |  Branch (1989:9): [True: 0, False: 9.35k]
  ------------------
 1990|      0|        return NULL;
 1991|  9.35k|    *prem = inplace_divrem1(z->long_value.ob_digit, a->long_value.ob_digit, size, n);
 1992|  9.35k|    return long_normalize(z);
 1993|  9.35k|}
longobject.c:inplace_divrem1:
 1961|  16.3k|{
 1962|  16.3k|    digit remainder = 0;
 1963|       |
 1964|  16.3k|    assert(n > 0 && n <= PyLong_MASK);
  ------------------
  |  Branch (1964:5): [True: 16.3k, False: 0]
  |  Branch (1964:5): [True: 16.3k, False: 0]
  ------------------
 1965|  57.4k|    while (--size >= 0) {
  ------------------
  |  Branch (1965:12): [True: 41.0k, False: 16.3k]
  ------------------
 1966|  41.0k|        twodigits dividend;
 1967|  41.0k|        dividend = ((twodigits)remainder << PyLong_SHIFT) | pin[size];
  ------------------
  |  |   47|  41.0k|#define PyLong_SHIFT    30
  ------------------
 1968|  41.0k|        digit quotient;
 1969|  41.0k|        quotient = (digit)(dividend / n);
 1970|  41.0k|        remainder = dividend % n;
 1971|  41.0k|        pout[size] = quotient;
 1972|  41.0k|    }
 1973|  16.3k|    return remainder;
 1974|  16.3k|}
longobject.c:long_neg:
 5270|   119k|{
 5271|   119k|    if (_PyLong_IsCompact(v)) {
  ------------------
  |  Branch (5271:9): [True: 82.9k, False: 36.1k]
  ------------------
 5272|  82.9k|        return _PyLong_FromSTwoDigits(-medium_value(v));
  ------------------
  |  |   27|  82.9k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5273|  82.9k|    }
 5274|       |
 5275|  36.1k|    PyLongObject *z = (PyLongObject *)_PyLong_Copy(v);
 5276|  36.1k|    if (z != NULL) {
  ------------------
  |  Branch (5276:9): [True: 36.1k, False: 0]
  ------------------
 5277|  36.1k|        _PyLong_FlipSign(z);
 5278|  36.1k|    }
 5279|  36.1k|    return z;
 5280|   119k|}
longobject.c:long_sub:
 3887|  32.1k|{
 3888|  32.1k|    if (_PyLong_BothAreCompact(a, b)) {
  ------------------
  |  Branch (3888:9): [True: 17.7k, False: 14.3k]
  ------------------
 3889|  17.7k|        return _PyLong_FromSTwoDigits(medium_value(a) - medium_value(b));
  ------------------
  |  |   27|  17.7k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                      return _PyLong_FromSTwoDigits(medium_value(a) - medium_value(b));
  ------------------
  |  |   27|  17.7k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 3890|  17.7k|    }
 3891|       |
 3892|  14.3k|    PyLongObject *z;
 3893|  14.3k|    if (_PyLong_IsNegative(a)) {
  ------------------
  |  Branch (3893:9): [True: 8.34k, False: 6.03k]
  ------------------
 3894|  8.34k|        if (_PyLong_IsNegative(b)) {
  ------------------
  |  Branch (3894:13): [True: 667, False: 7.67k]
  ------------------
 3895|    667|            z = x_sub(b, a);
 3896|    667|        }
 3897|  7.67k|        else {
 3898|  7.67k|            z = x_add(a, b);
 3899|  7.67k|            if (z != NULL) {
  ------------------
  |  Branch (3899:17): [True: 7.67k, False: 0]
  ------------------
 3900|  7.67k|                assert(_PyLong_IsZero(z) || Py_REFCNT(z) == 1);
  ------------------
  |  Branch (3900:17): [True: 0, False: 7.67k]
  |  Branch (3900:17): [True: 7.67k, False: 0]
  ------------------
 3901|  7.67k|                _PyLong_FlipSign(z);
 3902|  7.67k|            }
 3903|  7.67k|        }
 3904|  8.34k|    }
 3905|  6.03k|    else {
 3906|  6.03k|        if (_PyLong_IsNegative(b))
  ------------------
  |  Branch (3906:13): [True: 1.76k, False: 4.26k]
  ------------------
 3907|  1.76k|            z = x_add(a, b);
 3908|  4.26k|        else
 3909|  4.26k|            z = x_sub(a, b);
 3910|  6.03k|    }
 3911|  14.3k|    return z;
 3912|  14.3k|}
longobject.c:x_sub:
 3784|  15.1k|{
 3785|  15.1k|    Py_ssize_t size_a = _PyLong_DigitCount(a), size_b = _PyLong_DigitCount(b);
 3786|  15.1k|    PyLongObject *z;
 3787|  15.1k|    Py_ssize_t i;
 3788|  15.1k|    int sign = 1;
 3789|  15.1k|    digit borrow = 0;
 3790|       |
 3791|       |    /* Ensure a is the larger of the two: */
 3792|  15.1k|    if (size_a < size_b) {
  ------------------
  |  Branch (3792:9): [True: 4.75k, False: 10.4k]
  ------------------
 3793|  4.75k|        sign = -1;
 3794|  4.75k|        { PyLongObject *temp = a; a = b; b = temp; }
 3795|  4.75k|        { Py_ssize_t size_temp = size_a;
 3796|  4.75k|            size_a = size_b;
 3797|  4.75k|            size_b = size_temp; }
 3798|  4.75k|    }
 3799|  10.4k|    else if (size_a == size_b) {
  ------------------
  |  Branch (3799:14): [True: 5.10k, False: 5.30k]
  ------------------
 3800|       |        /* Find highest digit where a and b differ: */
 3801|  5.10k|        i = size_a;
 3802|  6.43k|        while (--i >= 0 && a->long_value.ob_digit[i] == b->long_value.ob_digit[i])
  ------------------
  |  Branch (3802:16): [True: 6.10k, False: 322]
  |  Branch (3802:28): [True: 1.32k, False: 4.78k]
  ------------------
 3803|  1.32k|            ;
 3804|  5.10k|        if (i < 0)
  ------------------
  |  Branch (3804:13): [True: 322, False: 4.78k]
  ------------------
 3805|    322|            return (PyLongObject *)PyLong_FromLong(0);
 3806|  4.78k|        if (a->long_value.ob_digit[i] < b->long_value.ob_digit[i]) {
  ------------------
  |  Branch (3806:13): [True: 652, False: 4.13k]
  ------------------
 3807|    652|            sign = -1;
 3808|    652|            { PyLongObject *temp = a; a = b; b = temp; }
 3809|    652|        }
 3810|  4.78k|        size_a = size_b = i+1;
 3811|  4.78k|    }
 3812|  14.8k|    z = long_alloc(size_a);
 3813|  14.8k|    if (z == NULL)
  ------------------
  |  Branch (3813:9): [True: 0, False: 14.8k]
  ------------------
 3814|      0|        return NULL;
 3815|  65.4k|    for (i = 0; i < size_b; ++i) {
  ------------------
  |  Branch (3815:17): [True: 50.6k, False: 14.8k]
  ------------------
 3816|       |        /* The following assumes unsigned arithmetic
 3817|       |           works module 2**N for some N>PyLong_SHIFT. */
 3818|  50.6k|        borrow = a->long_value.ob_digit[i] - b->long_value.ob_digit[i] - borrow;
 3819|  50.6k|        z->long_value.ob_digit[i] = borrow & PyLong_MASK;
  ------------------
  |  |   62|  50.6k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  50.6k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  50.6k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3820|  50.6k|        borrow >>= PyLong_SHIFT;
  ------------------
  |  |   47|  50.6k|#define PyLong_SHIFT    30
  ------------------
 3821|  50.6k|        borrow &= 1; /* Keep only one sign bit */
 3822|  50.6k|    }
 3823|  49.5k|    for (; i < size_a; ++i) {
  ------------------
  |  Branch (3823:12): [True: 34.7k, False: 14.8k]
  ------------------
 3824|  34.7k|        borrow = a->long_value.ob_digit[i] - borrow;
 3825|  34.7k|        z->long_value.ob_digit[i] = borrow & PyLong_MASK;
  ------------------
  |  |   62|  34.7k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  34.7k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  34.7k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3826|  34.7k|        borrow >>= PyLong_SHIFT;
  ------------------
  |  |   47|  34.7k|#define PyLong_SHIFT    30
  ------------------
 3827|  34.7k|        borrow &= 1; /* Keep only one sign bit */
 3828|  34.7k|    }
 3829|  14.8k|    assert(borrow == 0);
  ------------------
  |  Branch (3829:5): [True: 14.8k, False: 0]
  ------------------
 3830|  14.8k|    if (sign < 0) {
  ------------------
  |  Branch (3830:9): [True: 5.40k, False: 9.43k]
  ------------------
 3831|  5.40k|        _PyLong_FlipSign(z);
 3832|  5.40k|    }
 3833|  14.8k|    return maybe_small_long(long_normalize(z));
 3834|  14.8k|}
longobject.c:x_add:
 3750|  36.4k|{
 3751|  36.4k|    Py_ssize_t size_a = _PyLong_DigitCount(a), size_b = _PyLong_DigitCount(b);
 3752|  36.4k|    PyLongObject *z;
 3753|  36.4k|    Py_ssize_t i;
 3754|  36.4k|    digit carry = 0;
 3755|       |
 3756|       |    /* Ensure a is the larger of the two: */
 3757|  36.4k|    if (size_a < size_b) {
  ------------------
  |  Branch (3757:9): [True: 4.64k, False: 31.7k]
  ------------------
 3758|  4.64k|        { PyLongObject *temp = a; a = b; b = temp; }
 3759|  4.64k|        { Py_ssize_t size_temp = size_a;
 3760|  4.64k|            size_a = size_b;
 3761|  4.64k|            size_b = size_temp; }
 3762|  4.64k|    }
 3763|  36.4k|    z = long_alloc(size_a+1);
 3764|  36.4k|    if (z == NULL)
  ------------------
  |  Branch (3764:9): [True: 0, False: 36.4k]
  ------------------
 3765|      0|        return NULL;
 3766|  1.13M|    for (i = 0; i < size_b; ++i) {
  ------------------
  |  Branch (3766:17): [True: 1.09M, False: 36.4k]
  ------------------
 3767|  1.09M|        carry += a->long_value.ob_digit[i] + b->long_value.ob_digit[i];
 3768|  1.09M|        z->long_value.ob_digit[i] = carry & PyLong_MASK;
  ------------------
  |  |   62|  1.09M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  1.09M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  1.09M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3769|  1.09M|        carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  1.09M|#define PyLong_SHIFT    30
  ------------------
 3770|  1.09M|    }
 3771|   266k|    for (; i < size_a; ++i) {
  ------------------
  |  Branch (3771:12): [True: 230k, False: 36.4k]
  ------------------
 3772|   230k|        carry += a->long_value.ob_digit[i];
 3773|   230k|        z->long_value.ob_digit[i] = carry & PyLong_MASK;
  ------------------
  |  |   62|   230k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|   230k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   230k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3774|   230k|        carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|   230k|#define PyLong_SHIFT    30
  ------------------
 3775|   230k|    }
 3776|  36.4k|    z->long_value.ob_digit[i] = carry;
 3777|  36.4k|    return long_normalize(z);
 3778|  36.4k|}
longobject.c:long_add:
 3838|  61.8k|{
 3839|  61.8k|    if (_PyLong_BothAreCompact(a, b)) {
  ------------------
  |  Branch (3839:9): [True: 29.1k, False: 32.6k]
  ------------------
 3840|  29.1k|        stwodigits z = medium_value(a) + medium_value(b);
  ------------------
  |  |   27|  29.1k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                      stwodigits z = medium_value(a) + medium_value(b);
  ------------------
  |  |   27|  29.1k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 3841|  29.1k|        return _PyLong_FromSTwoDigits(z);
 3842|  29.1k|    }
 3843|       |
 3844|  32.6k|    PyLongObject *z;
 3845|  32.6k|    if (_PyLong_IsNegative(a)) {
  ------------------
  |  Branch (3845:9): [True: 7.26k, False: 25.4k]
  ------------------
 3846|  7.26k|        if (_PyLong_IsNegative(b)) {
  ------------------
  |  Branch (3846:13): [True: 667, False: 6.59k]
  ------------------
 3847|    667|            z = x_add(a, b);
 3848|    667|            if (z != NULL) {
  ------------------
  |  Branch (3848:17): [True: 667, False: 0]
  ------------------
 3849|       |                /* x_add received at least one multiple-digit int,
 3850|       |                   and thus z must be a multiple-digit int.
 3851|       |                   That also means z is not an element of
 3852|       |                   small_ints, so negating it in-place is safe. */
 3853|    667|                assert(Py_REFCNT(z) == 1);
  ------------------
  |  Branch (3853:17): [True: 667, False: 0]
  ------------------
 3854|    667|                _PyLong_FlipSign(z);
 3855|    667|            }
 3856|    667|        }
 3857|  6.59k|        else
 3858|  6.59k|            z = x_sub(b, a);
 3859|  7.26k|    }
 3860|  25.4k|    else {
 3861|  25.4k|        if (_PyLong_IsNegative(b))
  ------------------
  |  Branch (3861:13): [True: 3.64k, False: 21.7k]
  ------------------
 3862|  3.64k|            z = x_sub(a, b);
 3863|  21.7k|        else
 3864|  21.7k|            z = x_add(a, b);
 3865|  25.4k|    }
 3866|  32.6k|    return z;
 3867|  32.6k|}
longobject.c:long_dealloc:
 3655|  4.79M|{
 3656|  4.79M|    if (_PyLong_IsSmallInt((PyLongObject *)self)) {
  ------------------
  |  Branch (3656:9): [True: 0, False: 4.79M]
  ------------------
 3657|       |        /* This should never get called, but we also don't want to SEGV if
 3658|       |         * we accidentally decref small Ints out of existence. Instead,
 3659|       |         * since small Ints are immortal, re-set the reference count.
 3660|       |         *
 3661|       |         * See PEP 683, section Accidental De-Immortalizing for details
 3662|       |         */
 3663|      0|        _Py_SetImmortal(self);
 3664|      0|        return;
 3665|      0|    }
 3666|  4.79M|    if (PyLong_CheckExact(self) && _PyLong_IsCompact((PyLongObject *)self)) {
  ------------------
  |  |   14|  4.79M|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  9.59M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.79M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.79M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 4.79M, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3666:36): [True: 4.21M, False: 585k]
  ------------------
 3667|  4.21M|        _Py_FREELIST_FREE(ints, self, PyObject_Free);
  ------------------
  |  |   35|  4.21M|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  4.21M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.21M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  4.21M|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   20|  4.21M|#  define Py_ints_MAXFREELIST 100
  |  |  ------------------
  ------------------
 3668|  4.21M|        return;
 3669|  4.21M|    }
 3670|   585k|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|   585k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   585k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   585k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3671|   585k|}
longobject.c:long_to_decimal_string:
 2322|   102k|{
 2323|   102k|    PyObject *v;
 2324|   102k|    if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
  ------------------
  |  Branch (2324:9): [True: 0, False: 102k]
  ------------------
 2325|      0|        return NULL;
 2326|   102k|    return v;
 2327|   102k|}
longobject.c:long_add_method:
 3879|  50.0k|{
 3880|  50.0k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  50.0k|    do {                                                \
  |  | 1845|  50.0k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  50.0k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   100k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  49.7k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  49.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 265, False: 49.7k]
  |  |  |  Branch (1845:33): [True: 8.88k, False: 40.8k]
  |  |  ------------------
  |  | 1846|  50.0k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  9.14k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  9.14k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  50.0k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 40.8k]
  |  |  ------------------
  ------------------
 3881|  40.8k|    return (PyObject*)long_add((PyLongObject*)a, (PyLongObject*)b);
 3882|  50.0k|}
longobject.c:long_sub_method:
 3924|  28.2k|{
 3925|  28.2k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  28.2k|    do {                                                \
  |  | 1845|  28.2k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  28.2k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  56.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  27.7k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  27.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 462, False: 27.7k]
  |  |  |  Branch (1845:33): [True: 5.03k, False: 22.7k]
  |  |  ------------------
  |  | 1846|  28.2k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  5.49k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  5.49k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  28.2k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 22.7k]
  |  |  ------------------
  ------------------
 3926|  22.7k|    return (PyObject*)long_sub((PyLongObject*)a, (PyLongObject*)b);
 3927|  28.2k|}
longobject.c:long_mul_method:
 4371|   142k|{
 4372|   142k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|   142k|    do {                                                \
  |  | 1845|   142k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|   142k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   285k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|   142k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   142k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 38, False: 142k]
  |  |  |  Branch (1845:33): [True: 57.3k, False: 85.5k]
  |  |  ------------------
  |  | 1846|   142k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  57.3k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  57.3k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|   142k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 85.5k]
  |  |  ------------------
  ------------------
 4373|  85.5k|    return (PyObject*)long_mul((PyLongObject*)a, (PyLongObject*)b);
 4374|   142k|}
longobject.c:long_mul:
 4344|   635k|{
 4345|       |    /* fast path for single-digit multiplication */
 4346|   635k|    if (_PyLong_BothAreCompact(a, b)) {
  ------------------
  |  Branch (4346:9): [True: 547k, False: 87.0k]
  ------------------
 4347|   547k|        stwodigits v = medium_value(a) * medium_value(b);
  ------------------
  |  |   27|   547k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                      stwodigits v = medium_value(a) * medium_value(b);
  ------------------
  |  |   27|   547k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 4348|   547k|        return _PyLong_FromSTwoDigits(v);
 4349|   547k|    }
 4350|       |
 4351|  87.0k|    PyLongObject *z = k_mul(a, b);
 4352|       |    /* Negate if exactly one of the inputs is negative. */
 4353|  87.0k|    if (!_PyLong_SameSign(a, b) && z) {
  ------------------
  |  Branch (4353:9): [True: 7.71k, False: 79.3k]
  |  Branch (4353:36): [True: 7.71k, False: 0]
  ------------------
 4354|  7.71k|        _PyLong_Negate(&z);
 4355|  7.71k|    }
 4356|  87.0k|    return z;
 4357|   635k|}
longobject.c:k_mul:
 4074|  94.1k|{
 4075|  94.1k|    Py_ssize_t asize = _PyLong_DigitCount(a);
 4076|  94.1k|    Py_ssize_t bsize = _PyLong_DigitCount(b);
 4077|  94.1k|    PyLongObject *ah = NULL;
 4078|  94.1k|    PyLongObject *al = NULL;
 4079|  94.1k|    PyLongObject *bh = NULL;
 4080|  94.1k|    PyLongObject *bl = NULL;
 4081|  94.1k|    PyLongObject *ret = NULL;
 4082|  94.1k|    PyLongObject *t1, *t2, *t3;
 4083|  94.1k|    Py_ssize_t shift;           /* the number of digits we split off */
 4084|  94.1k|    Py_ssize_t i;
 4085|       |
 4086|       |    /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
 4087|       |     * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh  + ah*bh + al*bl
 4088|       |     * Then the original product is
 4089|       |     *     ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
 4090|       |     * By picking X to be a power of 2, "*X" is just shifting, and it's
 4091|       |     * been reduced to 3 multiplies on numbers half the size.
 4092|       |     */
 4093|       |
 4094|       |    /* We want to split based on the larger number; fiddle so that b
 4095|       |     * is largest.
 4096|       |     */
 4097|  94.1k|    if (asize > bsize) {
  ------------------
  |  Branch (4097:9): [True: 36.4k, False: 57.6k]
  ------------------
 4098|  36.4k|        t1 = a;
 4099|  36.4k|        a = b;
 4100|  36.4k|        b = t1;
 4101|       |
 4102|  36.4k|        i = asize;
 4103|  36.4k|        asize = bsize;
 4104|  36.4k|        bsize = i;
 4105|  36.4k|    }
 4106|       |
 4107|       |    /* Use gradeschool math when either number is too small. */
 4108|  94.1k|    i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
  ------------------
  |  |   85|  29.8k|#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
  |  |  ------------------
  |  |  |  |   84|  29.8k|#define KARATSUBA_CUTOFF 70
  |  |  ------------------
  ------------------
                  i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
  ------------------
  |  |   84|   158k|#define KARATSUBA_CUTOFF 70
  ------------------
  |  Branch (4108:9): [True: 29.8k, False: 64.2k]
  ------------------
 4109|  94.1k|    if (asize <= i) {
  ------------------
  |  Branch (4109:9): [True: 91.7k, False: 2.35k]
  ------------------
 4110|  91.7k|        if (asize == 0)
  ------------------
  |  Branch (4110:13): [True: 1.00k, False: 90.7k]
  ------------------
 4111|  1.00k|            return (PyLongObject *)PyLong_FromLong(0);
 4112|  90.7k|        else
 4113|  90.7k|            return x_mul(a, b);
 4114|  91.7k|    }
 4115|       |
 4116|       |    /* If a is small compared to b, splitting on b gives a degenerate
 4117|       |     * case with ah==0, and Karatsuba may be (even much) less efficient
 4118|       |     * than "grade school" then.  However, we can still win, by viewing
 4119|       |     * b as a string of "big digits", each of the same width as a. That
 4120|       |     * leads to a sequence of balanced calls to k_mul.
 4121|       |     */
 4122|  2.35k|    if (2 * asize <= bsize)
  ------------------
  |  Branch (4122:9): [True: 68, False: 2.28k]
  ------------------
 4123|     68|        return k_lopsided_mul(a, b);
 4124|       |
 4125|       |    /* Split a & b into hi & lo pieces. */
 4126|  2.28k|    shift = bsize >> 1;
 4127|  2.28k|    if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
  ------------------
  |  Branch (4127:9): [True: 0, False: 2.28k]
  ------------------
 4128|  2.28k|    assert(_PyLong_IsPositive(ah));        /* the split isn't degenerate */
  ------------------
  |  Branch (4128:5): [True: 2.28k, False: 0]
  ------------------
 4129|       |
 4130|  2.28k|    if (a == b) {
  ------------------
  |  Branch (4130:9): [True: 33, False: 2.25k]
  ------------------
 4131|     33|        bh = (PyLongObject*)Py_NewRef(ah);
  ------------------
  |  |  550|     33|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4132|     33|        bl = (PyLongObject*)Py_NewRef(al);
  ------------------
  |  |  550|     33|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4133|     33|    }
 4134|  2.25k|    else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
  ------------------
  |  Branch (4134:14): [True: 0, False: 2.25k]
  ------------------
 4135|       |
 4136|       |    /* The plan:
 4137|       |     * 1. Allocate result space (asize + bsize digits:  that's always
 4138|       |     *    enough).
 4139|       |     * 2. Compute ah*bh, and copy into result at 2*shift.
 4140|       |     * 3. Compute al*bl, and copy into result at 0.  Note that this
 4141|       |     *    can't overlap with #2.
 4142|       |     * 4. Subtract al*bl from the result, starting at shift.  This may
 4143|       |     *    underflow (borrow out of the high digit), but we don't care:
 4144|       |     *    we're effectively doing unsigned arithmetic mod
 4145|       |     *    BASE**(sizea + sizeb), and so long as the *final* result fits,
 4146|       |     *    borrows and carries out of the high digit can be ignored.
 4147|       |     * 5. Subtract ah*bh from the result, starting at shift.
 4148|       |     * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
 4149|       |     *    at shift.
 4150|       |     */
 4151|       |
 4152|       |    /* 1. Allocate result space. */
 4153|  2.28k|    ret = long_alloc(asize + bsize);
 4154|  2.28k|    if (ret == NULL) goto fail;
  ------------------
  |  Branch (4154:9): [True: 0, False: 2.28k]
  ------------------
 4155|       |
 4156|       |    /* 2. t1 <- ah*bh, and copy into high digits of result. */
 4157|  2.28k|    if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
  ------------------
  |  Branch (4157:9): [True: 0, False: 2.28k]
  ------------------
 4158|  2.28k|    assert(!_PyLong_IsNegative(t1));
  ------------------
  |  Branch (4158:5): [True: 2.28k, False: 0]
  ------------------
 4159|  2.28k|    assert(2*shift + _PyLong_DigitCount(t1) <= _PyLong_DigitCount(ret));
  ------------------
  |  Branch (4159:5): [True: 2.28k, False: 0]
  ------------------
 4160|  2.28k|    memcpy(ret->long_value.ob_digit + 2*shift, t1->long_value.ob_digit,
 4161|  2.28k|           _PyLong_DigitCount(t1) * sizeof(digit));
 4162|       |
 4163|       |    /* Zero-out the digits higher than the ah*bh copy. */
 4164|  2.28k|    i = _PyLong_DigitCount(ret) - 2*shift - _PyLong_DigitCount(t1);
 4165|  2.28k|    if (i)
  ------------------
  |  Branch (4165:9): [True: 392, False: 1.89k]
  ------------------
 4166|    392|        memset(ret->long_value.ob_digit + 2*shift + _PyLong_DigitCount(t1), 0,
 4167|    392|               i * sizeof(digit));
 4168|       |
 4169|       |    /* 3. t2 <- al*bl, and copy into the low digits. */
 4170|  2.28k|    if ((t2 = k_mul(al, bl)) == NULL) {
  ------------------
  |  Branch (4170:9): [True: 0, False: 2.28k]
  ------------------
 4171|      0|        Py_DECREF(t1);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4172|      0|        goto fail;
 4173|      0|    }
 4174|  2.28k|    assert(!_PyLong_IsNegative(t2));
  ------------------
  |  Branch (4174:5): [True: 2.28k, False: 0]
  ------------------
 4175|  2.28k|    assert(_PyLong_DigitCount(t2) <= 2*shift); /* no overlap with high digits */
  ------------------
  |  Branch (4175:5): [True: 2.28k, False: 0]
  ------------------
 4176|  2.28k|    memcpy(ret->long_value.ob_digit, t2->long_value.ob_digit, _PyLong_DigitCount(t2) * sizeof(digit));
 4177|       |
 4178|       |    /* Zero out remaining digits. */
 4179|  2.28k|    i = 2*shift - _PyLong_DigitCount(t2);          /* number of uninitialized digits */
 4180|  2.28k|    if (i)
  ------------------
  |  Branch (4180:9): [True: 206, False: 2.08k]
  ------------------
 4181|    206|        memset(ret->long_value.ob_digit + _PyLong_DigitCount(t2), 0, i * sizeof(digit));
 4182|       |
 4183|       |    /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2).  We do al*bl first
 4184|       |     * because it's fresher in cache.
 4185|       |     */
 4186|  2.28k|    i = _PyLong_DigitCount(ret) - shift;  /* # digits after shift */
 4187|  2.28k|    (void)v_isub(ret->long_value.ob_digit + shift, i, t2->long_value.ob_digit, _PyLong_DigitCount(t2));
 4188|  2.28k|    _Py_DECREF_INT(t2);
 4189|       |
 4190|  2.28k|    (void)v_isub(ret->long_value.ob_digit + shift, i, t1->long_value.ob_digit, _PyLong_DigitCount(t1));
 4191|  2.28k|    _Py_DECREF_INT(t1);
 4192|       |
 4193|       |    /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
 4194|  2.28k|    if ((t1 = x_add(ah, al)) == NULL) goto fail;
  ------------------
  |  Branch (4194:9): [True: 0, False: 2.28k]
  ------------------
 4195|  2.28k|    _Py_DECREF_INT(ah);
 4196|  2.28k|    _Py_DECREF_INT(al);
 4197|  2.28k|    ah = al = NULL;
 4198|       |
 4199|  2.28k|    if (a == b) {
  ------------------
  |  Branch (4199:9): [True: 33, False: 2.25k]
  ------------------
 4200|     33|        t2 = (PyLongObject*)Py_NewRef(t1);
  ------------------
  |  |  550|     33|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4201|     33|    }
 4202|  2.25k|    else if ((t2 = x_add(bh, bl)) == NULL) {
  ------------------
  |  Branch (4202:14): [True: 0, False: 2.25k]
  ------------------
 4203|      0|        Py_DECREF(t1);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4204|      0|        goto fail;
 4205|      0|    }
 4206|  2.28k|    _Py_DECREF_INT(bh);
 4207|  2.28k|    _Py_DECREF_INT(bl);
 4208|  2.28k|    bh = bl = NULL;
 4209|       |
 4210|  2.28k|    t3 = k_mul(t1, t2);
 4211|  2.28k|    _Py_DECREF_INT(t1);
 4212|  2.28k|    _Py_DECREF_INT(t2);
 4213|  2.28k|    if (t3 == NULL) goto fail;
  ------------------
  |  Branch (4213:9): [True: 0, False: 2.28k]
  ------------------
 4214|  2.28k|    assert(!_PyLong_IsNegative(t3));
  ------------------
  |  Branch (4214:5): [True: 2.28k, False: 0]
  ------------------
 4215|       |
 4216|       |    /* Add t3.  It's not obvious why we can't run out of room here.
 4217|       |     * See the (*) comment after this function.
 4218|       |     */
 4219|  2.28k|    (void)v_iadd(ret->long_value.ob_digit + shift, i, t3->long_value.ob_digit, _PyLong_DigitCount(t3));
 4220|  2.28k|    _Py_DECREF_INT(t3);
 4221|       |
 4222|  2.28k|    return long_normalize(ret);
 4223|       |
 4224|      0|  fail:
 4225|      0|    Py_XDECREF(ret);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4226|      0|    Py_XDECREF(ah);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4227|      0|    Py_XDECREF(al);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4228|      0|    Py_XDECREF(bh);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4229|      0|    Py_XDECREF(bl);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4230|       |    return NULL;
 4231|  2.28k|}
longobject.c:x_mul:
 3935|  90.7k|{
 3936|  90.7k|    PyLongObject *z;
 3937|  90.7k|    Py_ssize_t size_a = _PyLong_DigitCount(a);
 3938|  90.7k|    Py_ssize_t size_b = _PyLong_DigitCount(b);
 3939|  90.7k|    Py_ssize_t i;
 3940|       |
 3941|  90.7k|    z = long_alloc(size_a + size_b);
 3942|  90.7k|    if (z == NULL)
  ------------------
  |  Branch (3942:9): [True: 0, False: 90.7k]
  ------------------
 3943|      0|        return NULL;
 3944|       |
 3945|  90.7k|    memset(z->long_value.ob_digit, 0, _PyLong_DigitCount(z) * sizeof(digit));
 3946|  90.7k|    if (a == b) {
  ------------------
  |  Branch (3946:9): [True: 29.7k, False: 60.9k]
  ------------------
 3947|       |        /* Efficient squaring per HAC, Algorithm 14.16:
 3948|       |         * https://cacr.uwaterloo.ca/hac/about/chap14.pdf
 3949|       |         * Gives slightly less than a 2x speedup when a == b,
 3950|       |         * via exploiting that each entry in the multiplication
 3951|       |         * pyramid appears twice (except for the size_a squares).
 3952|       |         */
 3953|  29.7k|        digit *paend = a->long_value.ob_digit + size_a;
 3954|   127k|        for (i = 0; i < size_a; ++i) {
  ------------------
  |  Branch (3954:21): [True: 98.2k, False: 29.7k]
  ------------------
 3955|  98.2k|            twodigits carry;
 3956|  98.2k|            twodigits f = a->long_value.ob_digit[i];
 3957|  98.2k|            digit *pz = z->long_value.ob_digit + (i << 1);
 3958|  98.2k|            digit *pa = a->long_value.ob_digit + i + 1;
 3959|       |
 3960|  98.2k|            SIGCHECK({
  ------------------
  |  |  117|  98.2k|    do {                                        \
  |  |  118|  98.2k|        if (PyErr_CheckSignals()) PyTryBlock    \
  |  |  ------------------
  |  |  |  Branch (118:13): [True: 0, False: 98.2k]
  |  |  ------------------
  |  |  119|  98.2k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (119:13): [Folded, False: 98.2k]
  |  |  ------------------
  ------------------
 3961|  98.2k|                    Py_DECREF(z);
 3962|  98.2k|                    return NULL;
 3963|  98.2k|                });
 3964|       |
 3965|  98.2k|            carry = *pz + f * f;
 3966|  98.2k|            *pz++ = (digit)(carry & PyLong_MASK);
  ------------------
  |  |   62|  98.2k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  98.2k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  98.2k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3967|  98.2k|            carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  98.2k|#define PyLong_SHIFT    30
  ------------------
 3968|  98.2k|            assert(carry <= PyLong_MASK);
  ------------------
  |  Branch (3968:13): [True: 98.2k, False: 0]
  ------------------
 3969|       |
 3970|       |            /* Now f is added in twice in each column of the
 3971|       |             * pyramid it appears.  Same as adding f<<1 once.
 3972|       |             */
 3973|  98.2k|            f <<= 1;
 3974|  1.65M|            while (pa < paend) {
  ------------------
  |  Branch (3974:20): [True: 1.56M, False: 98.2k]
  ------------------
 3975|  1.56M|                carry += *pz + *pa++ * f;
 3976|  1.56M|                *pz++ = (digit)(carry & PyLong_MASK);
  ------------------
  |  |   62|  1.56M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  1.56M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  1.56M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3977|  1.56M|                carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  1.56M|#define PyLong_SHIFT    30
  ------------------
 3978|  1.56M|                assert(carry <= (PyLong_MASK << 1));
  ------------------
  |  Branch (3978:17): [True: 1.56M, False: 0]
  ------------------
 3979|  1.56M|            }
 3980|  98.2k|            if (carry) {
  ------------------
  |  Branch (3980:17): [True: 72.7k, False: 25.4k]
  ------------------
 3981|       |                /* See comment below. pz points at the highest possible
 3982|       |                 * carry position from the last outer loop iteration, so
 3983|       |                 * *pz is at most 1.
 3984|       |                 */
 3985|  72.7k|                assert(*pz <= 1);
  ------------------
  |  Branch (3985:17): [True: 72.7k, False: 0]
  ------------------
 3986|  72.7k|                carry += *pz;
 3987|  72.7k|                *pz = (digit)(carry & PyLong_MASK);
  ------------------
  |  |   62|  72.7k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  72.7k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  72.7k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3988|  72.7k|                carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  72.7k|#define PyLong_SHIFT    30
  ------------------
 3989|  72.7k|                if (carry) {
  ------------------
  |  Branch (3989:21): [True: 1.03k, False: 71.7k]
  ------------------
 3990|       |                    /* If there's still a carry, it must be into a position
 3991|       |                     * that still holds a 0. Where the base
 3992|       |                     ^ B is 1 << PyLong_SHIFT, the last add was of a carry no
 3993|       |                     * more than 2*B - 2 to a stored digit no more than 1.
 3994|       |                     * So the sum was no more than 2*B - 1, so the current
 3995|       |                     * carry no more than floor((2*B - 1)/B) = 1.
 3996|       |                     */
 3997|  1.03k|                    assert(carry == 1);
  ------------------
  |  Branch (3997:21): [True: 1.03k, False: 0]
  ------------------
 3998|  1.03k|                    assert(pz[1] == 0);
  ------------------
  |  Branch (3998:21): [True: 1.03k, False: 0]
  ------------------
 3999|  1.03k|                    pz[1] = (digit)carry;
 4000|  1.03k|                }
 4001|  72.7k|            }
 4002|  98.2k|        }
 4003|  29.7k|    }
 4004|  60.9k|    else {      /* a is not the same as b -- gradeschool int mult */
 4005|   341k|        for (i = 0; i < size_a; ++i) {
  ------------------
  |  Branch (4005:21): [True: 280k, False: 60.9k]
  ------------------
 4006|   280k|            twodigits carry = 0;
 4007|   280k|            twodigits f = a->long_value.ob_digit[i];
 4008|   280k|            digit *pz = z->long_value.ob_digit + i;
 4009|   280k|            digit *pb = b->long_value.ob_digit;
 4010|   280k|            digit *pbend = b->long_value.ob_digit + size_b;
 4011|       |
 4012|   280k|            SIGCHECK({
  ------------------
  |  |  117|   280k|    do {                                        \
  |  |  118|   280k|        if (PyErr_CheckSignals()) PyTryBlock    \
  |  |  ------------------
  |  |  |  Branch (118:13): [True: 0, False: 280k]
  |  |  ------------------
  |  |  119|   280k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (119:13): [Folded, False: 280k]
  |  |  ------------------
  ------------------
 4013|   280k|                    Py_DECREF(z);
 4014|   280k|                    return NULL;
 4015|   280k|                });
 4016|       |
 4017|  13.1M|            while (pb < pbend) {
  ------------------
  |  Branch (4017:20): [True: 12.8M, False: 280k]
  ------------------
 4018|  12.8M|                carry += *pz + *pb++ * f;
 4019|  12.8M|                *pz++ = (digit)(carry & PyLong_MASK);
  ------------------
  |  |   62|  12.8M|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  12.8M|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  12.8M|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4020|  12.8M|                carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  12.8M|#define PyLong_SHIFT    30
  ------------------
 4021|  12.8M|                assert(carry <= PyLong_MASK);
  ------------------
  |  Branch (4021:17): [True: 12.8M, False: 0]
  ------------------
 4022|  12.8M|            }
 4023|   280k|            if (carry)
  ------------------
  |  Branch (4023:17): [True: 214k, False: 65.2k]
  ------------------
 4024|   214k|                *pz += (digit)(carry & PyLong_MASK);
  ------------------
  |  |   62|   214k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|   214k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   214k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4025|   280k|            assert((carry >> PyLong_SHIFT) == 0);
  ------------------
  |  Branch (4025:13): [True: 280k, False: 0]
  ------------------
 4026|   280k|        }
 4027|  60.9k|    }
 4028|  90.7k|    return long_normalize(z);
 4029|  90.7k|}
longobject.c:k_lopsided_mul:
 4288|     68|{
 4289|     68|    const Py_ssize_t asize = _PyLong_DigitCount(a);
 4290|     68|    Py_ssize_t bsize = _PyLong_DigitCount(b);
 4291|     68|    Py_ssize_t nbdone;          /* # of b digits already multiplied */
 4292|     68|    PyLongObject *ret;
 4293|     68|    PyLongObject *bslice = NULL;
 4294|       |
 4295|     68|    assert(asize > KARATSUBA_CUTOFF);
  ------------------
  |  Branch (4295:5): [True: 68, False: 0]
  ------------------
 4296|     68|    assert(2 * asize <= bsize);
  ------------------
  |  Branch (4296:5): [True: 68, False: 0]
  ------------------
 4297|       |
 4298|       |    /* Allocate result space, and zero it out. */
 4299|     68|    ret = long_alloc(asize + bsize);
 4300|     68|    if (ret == NULL)
  ------------------
  |  Branch (4300:9): [True: 0, False: 68]
  ------------------
 4301|      0|        return NULL;
 4302|     68|    memset(ret->long_value.ob_digit, 0, _PyLong_DigitCount(ret) * sizeof(digit));
 4303|       |
 4304|       |    /* Successive slices of b are copied into bslice. */
 4305|     68|    bslice = long_alloc(asize);
 4306|     68|    if (bslice == NULL)
  ------------------
  |  Branch (4306:9): [True: 0, False: 68]
  ------------------
 4307|      0|        goto fail;
 4308|       |
 4309|     68|    nbdone = 0;
 4310|    271|    while (bsize > 0) {
  ------------------
  |  Branch (4310:12): [True: 203, False: 68]
  ------------------
 4311|    203|        PyLongObject *product;
 4312|    203|        const Py_ssize_t nbtouse = Py_MIN(bsize, asize);
  ------------------
  |  |  120|    203|       __extension__ \
  |  |  121|    203|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|    203|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|    203|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|    203|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|    203|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 67, False: 136]
  |  |  ------------------
  ------------------
 4313|       |
 4314|       |        /* Multiply the next slice of b by a. */
 4315|    203|        memcpy(bslice->long_value.ob_digit, b->long_value.ob_digit + nbdone,
 4316|    203|               nbtouse * sizeof(digit));
 4317|    203|        assert(nbtouse >= 0);
  ------------------
  |  Branch (4317:9): [True: 203, False: 0]
  ------------------
 4318|    203|        _PyLong_SetSignAndDigitCount(bslice, 1, nbtouse);
 4319|    203|        product = k_mul(a, bslice);
 4320|    203|        if (product == NULL)
  ------------------
  |  Branch (4320:13): [True: 0, False: 203]
  ------------------
 4321|      0|            goto fail;
 4322|       |
 4323|       |        /* Add into result. */
 4324|    203|        (void)v_iadd(ret->long_value.ob_digit + nbdone, _PyLong_DigitCount(ret) - nbdone,
 4325|    203|                     product->long_value.ob_digit, _PyLong_DigitCount(product));
 4326|    203|        _Py_DECREF_INT(product);
 4327|       |
 4328|    203|        bsize -= nbtouse;
 4329|    203|        nbdone += nbtouse;
 4330|    203|    }
 4331|       |
 4332|     68|    _Py_DECREF_INT(bslice);
 4333|     68|    return long_normalize(ret);
 4334|       |
 4335|      0|  fail:
 4336|      0|    Py_DECREF(ret);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4337|      0|    Py_XDECREF(bslice);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4338|       |    return NULL;
 4339|     68|}
longobject.c:kmul_split:
 4043|  4.54k|{
 4044|  4.54k|    PyLongObject *hi, *lo;
 4045|  4.54k|    Py_ssize_t size_lo, size_hi;
 4046|  4.54k|    const Py_ssize_t size_n = _PyLong_DigitCount(n);
 4047|       |
 4048|  4.54k|    size_lo = Py_MIN(size_n, size);
  ------------------
  |  |  120|  4.54k|       __extension__ \
  |  |  121|  4.54k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  4.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  4.54k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  4.54k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  4.54k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 4.54k]
  |  |  ------------------
  ------------------
 4049|  4.54k|    size_hi = size_n - size_lo;
 4050|       |
 4051|  4.54k|    if ((hi = long_alloc(size_hi)) == NULL)
  ------------------
  |  Branch (4051:9): [True: 0, False: 4.54k]
  ------------------
 4052|      0|        return -1;
 4053|  4.54k|    if ((lo = long_alloc(size_lo)) == NULL) {
  ------------------
  |  Branch (4053:9): [True: 0, False: 4.54k]
  ------------------
 4054|      0|        Py_DECREF(hi);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4055|      0|        return -1;
 4056|      0|    }
 4057|       |
 4058|  4.54k|    memcpy(lo->long_value.ob_digit, n->long_value.ob_digit, size_lo * sizeof(digit));
 4059|  4.54k|    memcpy(hi->long_value.ob_digit, n->long_value.ob_digit + size_lo, size_hi * sizeof(digit));
 4060|       |
 4061|  4.54k|    *high = long_normalize(hi);
 4062|  4.54k|    *low = long_normalize(lo);
 4063|  4.54k|    return 0;
 4064|  4.54k|}
longobject.c:v_isub:
 1881|  4.57k|{
 1882|  4.57k|    Py_ssize_t i;
 1883|  4.57k|    digit borrow = 0;
 1884|       |
 1885|  4.57k|    assert(m >= n);
  ------------------
  |  Branch (1885:5): [True: 4.57k, False: 0]
  ------------------
 1886|   548k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (1886:17): [True: 543k, False: 4.57k]
  ------------------
 1887|   543k|        borrow = x[i] - y[i] - borrow;
 1888|   543k|        x[i] = borrow & PyLong_MASK;
  ------------------
  |  |   62|   543k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|   543k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   543k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1889|   543k|        borrow >>= PyLong_SHIFT;
  ------------------
  |  |   47|   543k|#define PyLong_SHIFT    30
  ------------------
 1890|   543k|        borrow &= 1;            /* keep only 1 sign bit */
 1891|   543k|    }
 1892|  5.96k|    for (; borrow && i < m; ++i) {
  ------------------
  |  Branch (1892:12): [True: 1.38k, False: 4.57k]
  |  Branch (1892:22): [True: 1.38k, False: 0]
  ------------------
 1893|  1.38k|        borrow = x[i] - borrow;
 1894|  1.38k|        x[i] = borrow & PyLong_MASK;
  ------------------
  |  |   62|  1.38k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  1.38k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  1.38k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1895|  1.38k|        borrow >>= PyLong_SHIFT;
  ------------------
  |  |   47|  1.38k|#define PyLong_SHIFT    30
  ------------------
 1896|  1.38k|        borrow &= 1;
 1897|  1.38k|    }
 1898|  4.57k|    return borrow;
 1899|  4.57k|}
longobject.c:v_iadd:
 1855|  2.49k|{
 1856|  2.49k|    Py_ssize_t i;
 1857|  2.49k|    digit carry = 0;
 1858|       |
 1859|  2.49k|    assert(m >= n);
  ------------------
  |  Branch (1859:5): [True: 2.49k, False: 0]
  ------------------
 1860|   327k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (1860:17): [True: 324k, False: 2.49k]
  ------------------
 1861|   324k|        carry += x[i] + y[i];
 1862|   324k|        x[i] = carry & PyLong_MASK;
  ------------------
  |  |   62|   324k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|   324k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   324k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1863|   324k|        carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|   324k|#define PyLong_SHIFT    30
  ------------------
 1864|   324k|        assert((carry & 1) == carry);
  ------------------
  |  Branch (1864:9): [True: 324k, False: 0]
  ------------------
 1865|   324k|    }
 1866|  3.01k|    for (; carry && i < m; ++i) {
  ------------------
  |  Branch (1866:12): [True: 522, False: 2.49k]
  |  Branch (1866:21): [True: 522, False: 0]
  ------------------
 1867|    522|        carry += x[i];
 1868|    522|        x[i] = carry & PyLong_MASK;
  ------------------
  |  |   62|    522|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|    522|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|    522|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1869|    522|        carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|    522|#define PyLong_SHIFT    30
  ------------------
 1870|    522|        assert((carry & 1) == carry);
  ------------------
  |  Branch (1870:9): [True: 522, False: 0]
  ------------------
 1871|    522|    }
 1872|  2.49k|    return carry;
 1873|  2.49k|}
longobject.c:long_mod:
 4865|   354k|{
 4866|   354k|    PyLongObject *mod;
 4867|       |
 4868|   354k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|   354k|    do {                                                \
  |  | 1845|   354k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|   354k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   708k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|   353k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   353k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 219, False: 353k]
  |  |  |  Branch (1845:33): [True: 4.47k, False: 349k]
  |  |  ------------------
  |  | 1846|   354k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  4.69k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  4.69k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|   354k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 349k]
  |  |  ------------------
  ------------------
 4869|       |
 4870|   349k|    if (l_mod((PyLongObject*)a, (PyLongObject*)b, &mod) < 0)
  ------------------
  |  Branch (4870:9): [True: 263, False: 349k]
  ------------------
 4871|    263|        mod = NULL;
 4872|   349k|    return (PyObject *)mod;
 4873|   354k|}
longobject.c:long_divmod:
 4877|    106|{
 4878|    106|    PyLongObject *div, *mod;
 4879|    106|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|    106|    do {                                                \
  |  | 1845|    106|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|    106|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    212|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|    106|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    106|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 0, False: 106]
  |  |  |  Branch (1845:33): [True: 0, False: 106]
  |  |  ------------------
  |  | 1846|    106|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|    106|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 106]
  |  |  ------------------
  ------------------
 4880|       |
 4881|    106|    if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
  ------------------
  |  Branch (4881:9): [True: 0, False: 106]
  ------------------
 4882|      0|        return NULL;
 4883|      0|    }
 4884|    106|    return _PyTuple_FromPairSteal((PyObject *)div, (PyObject *)mod);
 4885|    106|}
longobject.c:l_divmod:
 4484|  92.3k|{
 4485|  92.3k|    PyLongObject *div, *mod;
 4486|       |
 4487|  92.3k|    if (_PyLong_DigitCount(v) == 1 && _PyLong_DigitCount(w) == 1) {
  ------------------
  |  Branch (4487:9): [True: 1.06k, False: 91.2k]
  |  Branch (4487:39): [True: 0, False: 1.06k]
  ------------------
 4488|       |        /* Fast path for single-digit longs */
 4489|      0|        div = NULL;
 4490|      0|        if (pdiv != NULL) {
  ------------------
  |  Branch (4490:13): [True: 0, False: 0]
  ------------------
 4491|      0|            div = (PyLongObject *)fast_floor_div(v, w);
 4492|      0|            if (div == NULL) {
  ------------------
  |  Branch (4492:17): [True: 0, False: 0]
  ------------------
 4493|      0|                return -1;
 4494|      0|            }
 4495|      0|        }
 4496|      0|        if (pmod != NULL) {
  ------------------
  |  Branch (4496:13): [True: 0, False: 0]
  ------------------
 4497|      0|            mod = (PyLongObject *)fast_mod(v, w);
 4498|      0|            if (mod == NULL) {
  ------------------
  |  Branch (4498:17): [True: 0, False: 0]
  ------------------
 4499|      0|                Py_XDECREF(div);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4500|      0|                return -1;
 4501|      0|            }
 4502|      0|            *pmod = mod;
 4503|      0|        }
 4504|      0|        if (pdiv != NULL) {
  ------------------
  |  Branch (4504:13): [True: 0, False: 0]
  ------------------
 4505|       |            /* We only want to set `*pdiv` when `*pmod` is
 4506|       |               set successfully. */
 4507|      0|            *pdiv = div;
 4508|      0|        }
 4509|      0|        return 0;
 4510|      0|    }
 4511|  92.3k|#if WITH_PYLONG_MODULE
 4512|  92.3k|    Py_ssize_t size_v = _PyLong_DigitCount(v); /* digits in numerator */
 4513|  92.3k|    Py_ssize_t size_w = _PyLong_DigitCount(w); /* digits in denominator */
 4514|  92.3k|    if (size_w > 300 && (size_v - size_w) > 150) {
  ------------------
  |  Branch (4514:9): [True: 57, False: 92.2k]
  |  Branch (4514:25): [True: 23, False: 34]
  ------------------
 4515|       |        /* Switch to _pylong.int_divmod().  If the quotient is small then
 4516|       |          "schoolbook" division is linear-time so don't use in that case.
 4517|       |          These limits are empirically determined and should be slightly
 4518|       |          conservative so that _pylong is used in cases it is likely
 4519|       |          to be faster. See Tools/scripts/divmod_threshold.py. */
 4520|     23|        return pylong_int_divmod(v, w, pdiv, pmod);
 4521|     23|    }
 4522|  92.3k|#endif
 4523|  92.3k|    if (long_divrem(v, w, &div, &mod) < 0)
  ------------------
  |  Branch (4523:9): [True: 108, False: 92.2k]
  ------------------
 4524|    108|        return -1;
 4525|  92.2k|    if ((_PyLong_IsNegative(mod) && _PyLong_IsPositive(w)) ||
  ------------------
  |  Branch (4525:10): [True: 9.13k, False: 83.0k]
  |  Branch (4525:37): [True: 9.08k, False: 48]
  ------------------
 4526|  83.1k|        (_PyLong_IsPositive(mod) && _PyLong_IsNegative(w))) {
  ------------------
  |  Branch (4526:10): [True: 1.66k, False: 81.4k]
  |  Branch (4526:37): [True: 297, False: 1.36k]
  ------------------
 4527|  9.38k|        PyLongObject *temp;
 4528|  9.38k|        temp = long_add(mod, w);
 4529|  9.38k|        Py_SETREF(mod, temp);
  ------------------
  |  |  354|  9.38k|    do { \
  |  |  355|  9.38k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  9.38k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  9.38k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  9.38k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  9.38k|        *_tmp_dst_ptr = (src); \
  |  |  358|  9.38k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  9.38k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  9.38k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 9.38k]
  |  |  ------------------
  ------------------
 4530|  9.38k|        if (mod == NULL) {
  ------------------
  |  Branch (4530:13): [True: 0, False: 9.38k]
  ------------------
 4531|      0|            Py_DECREF(div);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4532|      0|            return -1;
 4533|      0|        }
 4534|  9.38k|        temp = long_sub(div, (PyLongObject *)_PyLong_GetOne());
 4535|  9.38k|        if (temp == NULL) {
  ------------------
  |  Branch (4535:13): [True: 0, False: 9.38k]
  ------------------
 4536|      0|            Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4537|      0|            Py_DECREF(div);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4538|      0|            return -1;
 4539|      0|        }
 4540|  9.38k|        Py_SETREF(div, temp);
  ------------------
  |  |  354|  9.38k|    do { \
  |  |  355|  9.38k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  9.38k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  9.38k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  9.38k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  9.38k|        *_tmp_dst_ptr = (src); \
  |  |  358|  9.38k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  9.38k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  9.38k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 9.38k]
  |  |  ------------------
  ------------------
 4541|  9.38k|    }
 4542|  92.2k|    if (pdiv != NULL)
  ------------------
  |  Branch (4542:9): [True: 92.2k, False: 0]
  ------------------
 4543|  92.2k|        *pdiv = div;
 4544|      0|    else
 4545|      0|        Py_DECREF(div);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4546|       |
 4547|  92.2k|    if (pmod != NULL)
  ------------------
  |  Branch (4547:9): [True: 106, False: 92.1k]
  ------------------
 4548|    106|        *pmod = mod;
 4549|  92.1k|    else
 4550|  92.1k|        Py_DECREF(mod);
  ------------------
  |  |  430|  92.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  92.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  92.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4551|       |
 4552|  92.2k|    return 0;
 4553|  92.2k|}
longobject.c:fast_floor_div:
 4401|  1.53M|{
 4402|  1.53M|    sdigit left = a->long_value.ob_digit[0];
 4403|  1.53M|    sdigit right = b->long_value.ob_digit[0];
 4404|  1.53M|    sdigit div;
 4405|       |
 4406|  1.53M|    assert(_PyLong_DigitCount(a) == 1);
  ------------------
  |  Branch (4406:5): [True: 1.53M, False: 0]
  ------------------
 4407|  1.53M|    assert(_PyLong_DigitCount(b) == 1);
  ------------------
  |  Branch (4407:5): [True: 1.53M, False: 0]
  ------------------
 4408|       |
 4409|  1.53M|    if (_PyLong_SameSign(a, b)) {
  ------------------
  |  Branch (4409:9): [True: 1.53M, False: 1.63k]
  ------------------
 4410|  1.53M|        div = left / right;
 4411|  1.53M|    }
 4412|  1.63k|    else {
 4413|       |        /* Either 'a' or 'b' is negative. */
 4414|  1.63k|        div = -1 - (left - 1) / right;
 4415|  1.63k|    }
 4416|       |
 4417|  1.53M|    return PyLong_FromLong(div);
 4418|  1.53M|}
longobject.c:pylong_int_divmod:
 4425|     23|{
 4426|     23|    PyObject *mod = PyImport_ImportModule("_pylong");
 4427|     23|    if (mod == NULL) {
  ------------------
  |  Branch (4427:9): [True: 0, False: 23]
  ------------------
 4428|      0|        return -1;
 4429|      0|    }
 4430|     23|    PyObject *result = PyObject_CallMethod(mod, "int_divmod", "OO", v, w);
 4431|     23|    Py_DECREF(mod);
  ------------------
  |  |  430|     23|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     23|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4432|     23|    if (result == NULL) {
  ------------------
  |  Branch (4432:9): [True: 0, False: 23]
  ------------------
 4433|      0|        return -1;
 4434|      0|    }
 4435|     23|    if (!PyTuple_Check(result) || PyTuple_GET_SIZE(result) != 2) {
  ------------------
  |  |   27|     23|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     46|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyTuple_Check(result) || PyTuple_GET_SIZE(result) != 2) {
  ------------------
  |  |   27|     23|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     23|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4435:9): [True: 0, False: 23]
  |  Branch (4435:35): [True: 0, False: 23]
  ------------------
 4436|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4437|      0|        PyErr_SetString(PyExc_ValueError,
 4438|      0|                        "tuple of length 2 is required from int_divmod()");
 4439|      0|        return -1;
 4440|      0|    }
 4441|     23|    PyObject *q = PyTuple_GET_ITEM(result, 0);
  ------------------
  |  |   29|     23|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     23|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4441:19): [True: 23, False: 0]
  ------------------
 4442|     23|    PyObject *r = PyTuple_GET_ITEM(result, 1);
  ------------------
  |  |   29|     23|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     23|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4442:19): [True: 23, False: 0]
  ------------------
 4443|     23|    if (!PyLong_Check(q) || !PyLong_Check(r)) {
  ------------------
  |  |   13|     23|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     46|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyLong_Check(q) || !PyLong_Check(r)) {
  ------------------
  |  |   13|     23|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     23|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4443:9): [True: 0, False: 23]
  |  Branch (4443:29): [True: 0, False: 23]
  ------------------
 4444|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4445|      0|        PyErr_SetString(PyExc_ValueError,
 4446|      0|                        "tuple of int is required from int_divmod()");
 4447|      0|        return -1;
 4448|      0|    }
 4449|     23|    if (pdiv != NULL) {
  ------------------
  |  Branch (4449:9): [True: 23, False: 0]
  ------------------
 4450|     23|        *pdiv = (PyLongObject *)Py_NewRef(q);
  ------------------
  |  |  550|     23|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     23|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4451|     23|    }
 4452|     23|    if (pmod != NULL) {
  ------------------
  |  Branch (4452:9): [True: 0, False: 23]
  ------------------
 4453|      0|        *pmod = (PyLongObject *)Py_NewRef(r);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4454|      0|    }
 4455|     23|    Py_DECREF(result);
  ------------------
  |  |  430|     23|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     23|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     23|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4456|     23|    return 0;
 4457|     23|}
longobject.c:long_pow:
 4971|  61.4k|{
 4972|  61.4k|    PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
 4973|  61.4k|    int negativeOutput = 0;  /* if x<0 return negative output */
 4974|       |
 4975|  61.4k|    PyLongObject *z = NULL;  /* accumulated result */
 4976|  61.4k|    Py_ssize_t i, j;             /* counters */
 4977|  61.4k|    PyLongObject *temp = NULL;
 4978|  61.4k|    PyLongObject *a2 = NULL; /* may temporarily hold a**2 % c */
 4979|       |
 4980|       |    /* k-ary values.  If the exponent is large enough, table is
 4981|       |     * precomputed so that table[i] == a**(2*i+1) % c for i in
 4982|       |     * range(EXP_TABLE_LEN).
 4983|       |     * Note: this is uninitialized stack trash: don't pay to set it to known
 4984|       |     * values unless it's needed. Instead ensure that num_table_entries is
 4985|       |     * set to the number of entries actually filled whenever a branch to the
 4986|       |     * Error or Done labels is possible.
 4987|       |     */
 4988|  61.4k|    PyLongObject *table[EXP_TABLE_LEN];
 4989|  61.4k|    Py_ssize_t num_table_entries = 0;
 4990|       |
 4991|       |    /* a, b, c = v, w, x */
 4992|  61.4k|    CHECK_BINOP(v, w);
  ------------------
  |  | 1844|  61.4k|    do {                                                \
  |  | 1845|  61.4k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  61.4k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   122k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  61.1k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  61.1k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 309, False: 61.1k]
  |  |  |  Branch (1845:33): [True: 13.5k, False: 47.5k]
  |  |  ------------------
  |  | 1846|  61.4k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  13.8k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  13.8k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  61.4k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 47.5k]
  |  |  ------------------
  ------------------
 4993|  47.5k|    a = (PyLongObject*)Py_NewRef(v);
  ------------------
  |  |  550|  47.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  47.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4994|  47.5k|    b = (PyLongObject*)Py_NewRef(w);
  ------------------
  |  |  550|  47.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  47.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4995|  47.5k|    if (PyLong_Check(x)) {
  ------------------
  |  |   13|  47.5k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  47.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 1, False: 47.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4996|      1|        c = (PyLongObject *)Py_NewRef(x);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4997|      1|    }
 4998|  47.5k|    else if (x == Py_None)
  ------------------
  |  |  616|  47.5k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (4998:14): [True: 47.5k, False: 0]
  ------------------
 4999|  47.5k|        c = NULL;
 5000|      0|    else {
 5001|      0|        Py_DECREF(a);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5002|      0|        Py_DECREF(b);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5003|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 5004|      0|    }
 5005|       |
 5006|  47.5k|    if (_PyLong_IsNegative(b) && c == NULL) {
  ------------------
  |  Branch (5006:9): [True: 2.79k, False: 44.8k]
  |  Branch (5006:34): [True: 2.79k, False: 0]
  ------------------
 5007|       |        /* if exponent is negative and there's no modulus:
 5008|       |               return a float.  This works because we know
 5009|       |               that this calls float_pow() which converts its
 5010|       |               arguments to double. */
 5011|  2.79k|        Py_DECREF(a);
  ------------------
  |  |  430|  2.79k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5012|  2.79k|        Py_DECREF(b);
  ------------------
  |  |  430|  2.79k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5013|  2.79k|        return PyFloat_Type.tp_as_number->nb_power(v, w, x);
 5014|  2.79k|    }
 5015|       |
 5016|  44.8k|    if (c) {
  ------------------
  |  Branch (5016:9): [True: 1, False: 44.8k]
  ------------------
 5017|       |        /* if modulus == 0:
 5018|       |               raise ValueError() */
 5019|      1|        if (_PyLong_IsZero(c)) {
  ------------------
  |  Branch (5019:13): [True: 0, False: 1]
  ------------------
 5020|      0|            PyErr_SetString(PyExc_ValueError,
 5021|      0|                            "pow() 3rd argument cannot be 0");
 5022|      0|            goto Error;
 5023|      0|        }
 5024|       |
 5025|       |        /* if modulus < 0:
 5026|       |               negativeOutput = True
 5027|       |               modulus = -modulus */
 5028|      1|        if (_PyLong_IsNegative(c)) {
  ------------------
  |  Branch (5028:13): [True: 0, False: 1]
  ------------------
 5029|      0|            negativeOutput = 1;
 5030|      0|            temp = (PyLongObject *)_PyLong_Copy(c);
 5031|      0|            if (temp == NULL)
  ------------------
  |  Branch (5031:17): [True: 0, False: 0]
  ------------------
 5032|      0|                goto Error;
 5033|      0|            Py_SETREF(c, temp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5034|      0|            temp = NULL;
 5035|      0|            _PyLong_Negate(&c);
 5036|      0|            if (c == NULL)
  ------------------
  |  Branch (5036:17): [True: 0, False: 0]
  ------------------
 5037|      0|                goto Error;
 5038|      0|        }
 5039|       |
 5040|       |        /* if modulus == 1:
 5041|       |               return 0 */
 5042|      1|        if (_PyLong_IsNonNegativeCompact(c) && (c->long_value.ob_digit[0] == 1)) {
  ------------------
  |  Branch (5042:13): [True: 0, False: 1]
  |  Branch (5042:48): [True: 0, False: 0]
  ------------------
 5043|      0|            z = (PyLongObject *)PyLong_FromLong(0L);
 5044|      0|            goto Done;
 5045|      0|        }
 5046|       |
 5047|       |        /* if exponent is negative, negate the exponent and
 5048|       |           replace the base with a modular inverse */
 5049|      1|        if (_PyLong_IsNegative(b)) {
  ------------------
  |  Branch (5049:13): [True: 0, False: 1]
  ------------------
 5050|      0|            temp = (PyLongObject *)_PyLong_Copy(b);
 5051|      0|            if (temp == NULL)
  ------------------
  |  Branch (5051:17): [True: 0, False: 0]
  ------------------
 5052|      0|                goto Error;
 5053|      0|            Py_SETREF(b, temp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5054|      0|            temp = NULL;
 5055|      0|            _PyLong_Negate(&b);
 5056|      0|            if (b == NULL)
  ------------------
  |  Branch (5056:17): [True: 0, False: 0]
  ------------------
 5057|      0|                goto Error;
 5058|       |
 5059|      0|            temp = long_invmod(a, c);
 5060|      0|            if (temp == NULL)
  ------------------
  |  Branch (5060:17): [True: 0, False: 0]
  ------------------
 5061|      0|                goto Error;
 5062|      0|            Py_SETREF(a, temp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5063|      0|            temp = NULL;
 5064|      0|        }
 5065|       |
 5066|       |        /* Reduce base by modulus in some cases:
 5067|       |           1. If base < 0.  Forcing the base non-negative makes things easier.
 5068|       |           2. If base is obviously larger than the modulus.  The "small
 5069|       |              exponent" case later can multiply directly by base repeatedly,
 5070|       |              while the "large exponent" case multiplies directly by base 31
 5071|       |              times.  It can be unboundedly faster to multiply by
 5072|       |              base % modulus instead.
 5073|       |           We could _always_ do this reduction, but l_mod() isn't cheap,
 5074|       |           so we only do it when it buys something. */
 5075|      1|        if (_PyLong_IsNegative(a) || _PyLong_DigitCount(a) > _PyLong_DigitCount(c)) {
  ------------------
  |  Branch (5075:13): [True: 0, False: 1]
  |  Branch (5075:38): [True: 0, False: 1]
  ------------------
 5076|      0|            if (l_mod(a, c, &temp) < 0)
  ------------------
  |  Branch (5076:17): [True: 0, False: 0]
  ------------------
 5077|      0|                goto Error;
 5078|      0|            Py_SETREF(a, temp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5079|      0|            temp = NULL;
 5080|      0|        }
 5081|      1|    }
 5082|       |
 5083|       |    /* At this point a, b, and c are guaranteed non-negative UNLESS
 5084|       |       c is NULL, in which case a may be negative. */
 5085|       |
 5086|  44.8k|    z = (PyLongObject *)PyLong_FromLong(1L);
 5087|  44.8k|    if (z == NULL)
  ------------------
  |  Branch (5087:9): [True: 0, False: 44.8k]
  ------------------
 5088|      0|        goto Error;
 5089|       |
 5090|       |    /* Perform a modular reduction, X = X % c, but leave X alone if c
 5091|       |     * is NULL.
 5092|       |     */
 5093|  44.8k|#define REDUCE(X)                                       \
 5094|  44.8k|    do {                                                \
 5095|  44.8k|        if (c != NULL) {                                \
 5096|  44.8k|            if (l_mod(X, c, &temp) < 0)                 \
 5097|  44.8k|                goto Error;                             \
 5098|  44.8k|            Py_XDECREF(X);                              \
 5099|  44.8k|            X = temp;                                   \
 5100|  44.8k|            temp = NULL;                                \
 5101|  44.8k|        }                                               \
 5102|  44.8k|    } while(0)
 5103|       |
 5104|       |    /* Multiply two values, then reduce the result:
 5105|       |       result = X*Y % c.  If c is NULL, skip the mod. */
 5106|  44.8k|#define MULT(X, Y, result)                      \
 5107|  44.8k|    do {                                        \
 5108|  44.8k|        temp = (PyLongObject *)long_mul(X, Y);  \
 5109|  44.8k|        if (temp == NULL)                       \
 5110|  44.8k|            goto Error;                         \
 5111|  44.8k|        Py_XDECREF(result);                     \
 5112|  44.8k|        result = temp;                          \
 5113|  44.8k|        temp = NULL;                            \
 5114|  44.8k|        REDUCE(result);                         \
 5115|  44.8k|    } while(0)
 5116|       |
 5117|  44.8k|    i = _PyLong_SignedDigitCount(b);
 5118|  44.8k|    digit bi = i ? b->long_value.ob_digit[i-1] : 0;
  ------------------
  |  Branch (5118:16): [True: 43.6k, False: 1.19k]
  ------------------
 5119|  44.8k|    digit bit;
 5120|  44.8k|    if (i <= 1 && bi <= 3) {
  ------------------
  |  Branch (5120:9): [True: 41.7k, False: 3.02k]
  |  Branch (5120:19): [True: 4.51k, False: 37.2k]
  ------------------
 5121|       |        /* aim for minimal overhead */
 5122|  4.51k|        if (bi >= 2) {
  ------------------
  |  Branch (5122:13): [True: 2.07k, False: 2.44k]
  ------------------
 5123|  2.07k|            MULT(a, a, z);
  ------------------
  |  | 5107|  2.07k|    do {                                        \
  |  | 5108|  2.07k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|  2.07k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 2.07k]
  |  |  ------------------
  |  | 5110|  2.07k|            goto Error;                         \
  |  | 5111|  2.07k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|  2.07k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.07k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.07k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|  2.07k|        result = temp;                          \
  |  | 5113|  2.07k|        temp = NULL;                            \
  |  | 5114|  2.07k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|  2.07k|    do {                                                \
  |  |  |  | 5095|  2.07k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 0, False: 2.07k]
  |  |  |  |  ------------------
  |  |  |  | 5096|      0|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 5097|      0|                goto Error;                             \
  |  |  |  | 5098|      0|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|      0|            X = temp;                                   \
  |  |  |  | 5100|      0|            temp = NULL;                                \
  |  |  |  | 5101|      0|        }                                               \
  |  |  |  | 5102|  2.07k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 2.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|  2.07k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 2.07k]
  |  |  ------------------
  ------------------
 5124|  2.07k|            if (bi == 3) {
  ------------------
  |  Branch (5124:17): [True: 306, False: 1.77k]
  ------------------
 5125|    306|                MULT(z, a, z);
  ------------------
  |  | 5107|    306|    do {                                        \
  |  | 5108|    306|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|    306|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 306]
  |  |  ------------------
  |  | 5110|    306|            goto Error;                         \
  |  | 5111|    306|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|    306|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    306|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    306|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|    306|        result = temp;                          \
  |  | 5113|    306|        temp = NULL;                            \
  |  | 5114|    306|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|    306|    do {                                                \
  |  |  |  | 5095|    306|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 0, False: 306]
  |  |  |  |  ------------------
  |  |  |  | 5096|      0|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 5097|      0|                goto Error;                             \
  |  |  |  | 5098|      0|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|      0|            X = temp;                                   \
  |  |  |  | 5100|      0|            temp = NULL;                                \
  |  |  |  | 5101|      0|        }                                               \
  |  |  |  | 5102|    306|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 306]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|    306|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 306]
  |  |  ------------------
  ------------------
 5126|    306|            }
 5127|  2.07k|        }
 5128|  2.44k|        else if (bi == 1) {
  ------------------
  |  Branch (5128:18): [True: 1.25k, False: 1.19k]
  ------------------
 5129|       |            /* Multiplying by 1 serves two purposes: if `a` is of an int
 5130|       |             * subclass, makes the result an int (e.g., pow(False, 1) returns
 5131|       |             * 0 instead of False), and potentially reduces `a` by the modulus.
 5132|       |             */
 5133|  1.25k|            MULT(a, z, z);
  ------------------
  |  | 5107|  1.25k|    do {                                        \
  |  | 5108|  1.25k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|  1.25k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 1.25k]
  |  |  ------------------
  |  | 5110|  1.25k|            goto Error;                         \
  |  | 5111|  1.25k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|  1.25k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|  1.25k|        result = temp;                          \
  |  | 5113|  1.25k|        temp = NULL;                            \
  |  | 5114|  1.25k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|  1.25k|    do {                                                \
  |  |  |  | 5095|  1.25k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 0, False: 1.25k]
  |  |  |  |  ------------------
  |  |  |  | 5096|      0|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 5097|      0|                goto Error;                             \
  |  |  |  | 5098|      0|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|      0|            X = temp;                                   \
  |  |  |  | 5100|      0|            temp = NULL;                                \
  |  |  |  | 5101|      0|        }                                               \
  |  |  |  | 5102|  1.25k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 1.25k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|  1.25k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 1.25k]
  |  |  ------------------
  ------------------
 5134|  1.25k|        }
 5135|       |        /* else bi is 0, and z==1 is correct */
 5136|  4.51k|    }
 5137|  40.2k|    else if (i <= HUGE_EXP_CUTOFF / PyLong_SHIFT ) {
  ------------------
  |  |  114|  40.2k|#define HUGE_EXP_CUTOFF 60
  ------------------
                  else if (i <= HUGE_EXP_CUTOFF / PyLong_SHIFT ) {
  ------------------
  |  |   47|  40.2k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (5137:14): [True: 38.3k, False: 1.96k]
  ------------------
 5138|       |        /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
 5139|       |        /* https://cacr.uwaterloo.ca/hac/about/chap14.pdf            */
 5140|       |
 5141|       |        /* Find the first significant exponent bit. Search right to left
 5142|       |         * because we're primarily trying to cut overhead for small powers.
 5143|       |         */
 5144|  38.3k|        assert(bi);  /* else there is no significant bit */
  ------------------
  |  Branch (5144:9): [True: 38.3k, False: 0]
  ------------------
 5145|  38.3k|        Py_SETREF(z, (PyLongObject*)Py_NewRef(a));
  ------------------
  |  |  354|  38.3k|    do { \
  |  |  355|  38.3k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  38.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  38.3k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  38.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  38.3k|        *_tmp_dst_ptr = (src); \
  |  |  358|  38.3k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  38.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  38.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  38.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  38.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 38.3k]
  |  |  ------------------
  ------------------
 5146|   189k|        for (bit = 2; ; bit <<= 1) {
 5147|   189k|            if (bit > bi) { /* found the first bit */
  ------------------
  |  Branch (5147:17): [True: 38.3k, False: 151k]
  ------------------
 5148|  38.3k|                assert((bi & bit) == 0);
  ------------------
  |  Branch (5148:17): [True: 38.3k, False: 0]
  ------------------
 5149|  38.3k|                bit >>= 1;
 5150|  38.3k|                assert(bi & bit);
  ------------------
  |  Branch (5150:17): [True: 38.3k, False: 0]
  ------------------
 5151|  38.3k|                break;
 5152|  38.3k|            }
 5153|   189k|        }
 5154|  39.3k|        for (--i, bit >>= 1;;) {
 5155|   222k|            for (; bit != 0; bit >>= 1) {
  ------------------
  |  Branch (5155:20): [True: 183k, False: 39.3k]
  ------------------
 5156|   183k|                MULT(z, z, z);
  ------------------
  |  | 5107|   183k|    do {                                        \
  |  | 5108|   183k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|   183k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 183k]
  |  |  ------------------
  |  | 5110|   183k|            goto Error;                         \
  |  | 5111|   183k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|   183k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   183k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   183k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|   183k|        result = temp;                          \
  |  | 5113|   183k|        temp = NULL;                            \
  |  | 5114|   183k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|   183k|    do {                                                \
  |  |  |  | 5095|   183k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 0, False: 183k]
  |  |  |  |  ------------------
  |  |  |  | 5096|      0|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 5097|      0|                goto Error;                             \
  |  |  |  | 5098|      0|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|      0|            X = temp;                                   \
  |  |  |  | 5100|      0|            temp = NULL;                                \
  |  |  |  | 5101|      0|        }                                               \
  |  |  |  | 5102|   183k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 183k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|   183k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 183k]
  |  |  ------------------
  ------------------
 5157|   183k|                if (bi & bit) {
  ------------------
  |  Branch (5157:21): [True: 72.4k, False: 110k]
  ------------------
 5158|  72.4k|                    MULT(z, a, z);
  ------------------
  |  | 5107|  72.4k|    do {                                        \
  |  | 5108|  72.4k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|  72.4k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 72.4k]
  |  |  ------------------
  |  | 5110|  72.4k|            goto Error;                         \
  |  | 5111|  72.4k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|  72.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  72.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  72.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|  72.4k|        result = temp;                          \
  |  | 5113|  72.4k|        temp = NULL;                            \
  |  | 5114|  72.4k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|  72.4k|    do {                                                \
  |  |  |  | 5095|  72.4k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 0, False: 72.4k]
  |  |  |  |  ------------------
  |  |  |  | 5096|      0|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 5097|      0|                goto Error;                             \
  |  |  |  | 5098|      0|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|      0|            X = temp;                                   \
  |  |  |  | 5100|      0|            temp = NULL;                                \
  |  |  |  | 5101|      0|        }                                               \
  |  |  |  | 5102|  72.4k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 72.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|  72.4k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 72.4k]
  |  |  ------------------
  ------------------
 5159|  72.4k|                }
 5160|   183k|            }
 5161|  39.3k|            if (--i < 0) {
  ------------------
  |  Branch (5161:17): [True: 38.3k, False: 1.05k]
  ------------------
 5162|  38.3k|                break;
 5163|  38.3k|            }
 5164|  1.05k|            bi = b->long_value.ob_digit[i];
 5165|  1.05k|            bit = (digit)1 << (PyLong_SHIFT-1);
  ------------------
  |  |   47|  1.05k|#define PyLong_SHIFT    30
  ------------------
 5166|  1.05k|        }
 5167|  38.3k|    }
 5168|  1.96k|    else {
 5169|       |        /* Left-to-right k-ary sliding window exponentiation
 5170|       |         * (Handbook of Applied Cryptography (HAC) Algorithm 14.85)
 5171|       |         */
 5172|  1.96k|        table[0] = (PyLongObject*)Py_NewRef(a);
  ------------------
  |  |  550|  1.96k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5173|  1.96k|        num_table_entries = 1;
 5174|  1.96k|        MULT(a, a, a2);
  ------------------
  |  | 5107|  1.96k|    do {                                        \
  |  | 5108|  1.96k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|  1.96k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 1.96k]
  |  |  ------------------
  |  | 5110|  1.96k|            goto Error;                         \
  |  | 5111|  1.96k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|  1.96k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|  1.96k|        result = temp;                          \
  |  | 5113|  1.96k|        temp = NULL;                            \
  |  | 5114|  1.96k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|  1.96k|    do {                                                \
  |  |  |  | 5095|  1.96k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 1, False: 1.96k]
  |  |  |  |  ------------------
  |  |  |  | 5096|      1|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  | 5097|      1|                goto Error;                             \
  |  |  |  | 5098|      1|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|      1|            X = temp;                                   \
  |  |  |  | 5100|      1|            temp = NULL;                                \
  |  |  |  | 5101|      1|        }                                               \
  |  |  |  | 5102|  1.96k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 1.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|  1.96k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 1.96k]
  |  |  ------------------
  ------------------
 5175|       |        /* table[i] == a**(2*i + 1) % c */
 5176|  31.4k|        for (i = 1; i < EXP_TABLE_LEN; ++i) {
  ------------------
  |  |   94|  31.4k|#define EXP_TABLE_LEN (1 << (EXP_WINDOW_SIZE - 1))
  |  |  ------------------
  |  |  |  |   93|  31.4k|#define EXP_WINDOW_SIZE 5
  |  |  ------------------
  ------------------
  |  Branch (5176:21): [True: 29.5k, False: 1.96k]
  ------------------
 5177|  29.5k|            table[i] = NULL; /* must set to known value for MULT */
 5178|  29.5k|            MULT(table[i-1], a2, table[i]);
  ------------------
  |  | 5107|  29.5k|    do {                                        \
  |  | 5108|  29.5k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|  29.5k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 29.5k]
  |  |  ------------------
  |  | 5110|  29.5k|            goto Error;                         \
  |  | 5111|  29.5k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|  29.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  29.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  29.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|  29.5k|        result = temp;                          \
  |  | 5113|  29.5k|        temp = NULL;                            \
  |  | 5114|  29.5k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|  29.5k|    do {                                                \
  |  |  |  | 5095|  29.5k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 15, False: 29.5k]
  |  |  |  |  ------------------
  |  |  |  | 5096|     15|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 15]
  |  |  |  |  ------------------
  |  |  |  | 5097|     15|                goto Error;                             \
  |  |  |  | 5098|     15|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|     15|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|     15|            X = temp;                                   \
  |  |  |  | 5100|     15|            temp = NULL;                                \
  |  |  |  | 5101|     15|        }                                               \
  |  |  |  | 5102|  29.5k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 29.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|  29.5k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 29.5k]
  |  |  ------------------
  ------------------
 5179|  29.5k|            ++num_table_entries; /* incremented iff MULT succeeded */
 5180|  29.5k|        }
 5181|  1.96k|        Py_CLEAR(a2);
  ------------------
  |  |  484|  1.96k|    do { \
  |  |  485|  1.96k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  1.96k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  1.96k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  1.96k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  1.96k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  1.96k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1.96k, False: 0]
  |  |  ------------------
  |  |  488|  1.96k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  1.96k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  1.96k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  1.96k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  1.96k|        } \
  |  |  491|  1.96k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1.96k]
  |  |  ------------------
  ------------------
 5182|       |
 5183|       |        /* Repeatedly extract the next (no more than) EXP_WINDOW_SIZE bits
 5184|       |         * into `pending`, starting with the next 1 bit.  The current bit
 5185|       |         * length of `pending` is `blen`.
 5186|       |         */
 5187|  1.96k|        int pending = 0, blen = 0;
 5188|  1.96k|#define ABSORB_PENDING  do { \
 5189|  1.96k|            int ntz = 0; /* number of trailing zeroes in `pending` */ \
 5190|  1.96k|            assert(pending && blen); \
 5191|  1.96k|            assert(pending >> (blen - 1)); \
 5192|  1.96k|            assert(pending >> blen == 0); \
 5193|  1.96k|            while ((pending & 1) == 0) { \
 5194|  1.96k|                ++ntz; \
 5195|  1.96k|                pending >>= 1; \
 5196|  1.96k|            } \
 5197|  1.96k|            assert(ntz < blen); \
 5198|  1.96k|            blen -= ntz; \
 5199|  1.96k|            do { \
 5200|  1.96k|                MULT(z, z, z); \
 5201|  1.96k|            } while (--blen); \
 5202|  1.96k|            MULT(z, table[pending >> 1], z); \
 5203|  1.96k|            while (ntz-- > 0) \
 5204|  1.96k|                MULT(z, z, z); \
 5205|  1.96k|            assert(blen == 0); \
 5206|  1.96k|            pending = 0; \
 5207|  1.96k|        } while(0)
 5208|       |
 5209|  9.60k|        for (i = _PyLong_SignedDigitCount(b) - 1; i >= 0; --i) {
  ------------------
  |  Branch (5209:51): [True: 7.63k, False: 1.96k]
  ------------------
 5210|  7.63k|            const digit bi = b->long_value.ob_digit[i];
 5211|   236k|            for (j = PyLong_SHIFT - 1; j >= 0; --j) {
  ------------------
  |  |   47|  7.63k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (5211:40): [True: 228k, False: 7.63k]
  ------------------
 5212|   228k|                const int bit = (bi >> j) & 1;
 5213|   228k|                pending = (pending << 1) | bit;
 5214|   228k|                if (pending) {
  ------------------
  |  Branch (5214:21): [True: 146k, False: 82.3k]
  ------------------
 5215|   146k|                    ++blen;
 5216|   146k|                    if (blen == EXP_WINDOW_SIZE)
  ------------------
  |  |   93|   146k|#define EXP_WINDOW_SIZE 5
  ------------------
  |  Branch (5216:25): [True: 28.4k, False: 118k]
  ------------------
 5217|  28.4k|                        ABSORB_PENDING;
  ------------------
  |  | 5188|  28.4k|#define ABSORB_PENDING  do { \
  |  | 5189|  28.4k|            int ntz = 0; /* number of trailing zeroes in `pending` */ \
  |  | 5190|  28.4k|            assert(pending && blen); \
  |  | 5191|  28.4k|            assert(pending >> (blen - 1)); \
  |  | 5192|  28.4k|            assert(pending >> blen == 0); \
  |  | 5193|  61.0k|            while ((pending & 1) == 0) { \
  |  |  ------------------
  |  |  |  Branch (5193:20): [True: 32.5k, False: 28.4k]
  |  |  ------------------
  |  | 5194|  32.5k|                ++ntz; \
  |  | 5195|  32.5k|                pending >>= 1; \
  |  | 5196|  32.5k|            } \
  |  | 5197|  28.4k|            assert(ntz < blen); \
  |  | 5198|  28.4k|            blen -= ntz; \
  |  | 5199|   109k|            do { \
  |  | 5200|   109k|                MULT(z, z, z); \
  |  |  ------------------
  |  |  |  | 5107|   109k|    do {                                        \
  |  |  |  | 5108|   109k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  |  |  | 5109|   109k|        if (temp == NULL)                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5109:13): [True: 0, False: 109k]
  |  |  |  |  ------------------
  |  |  |  | 5110|   109k|            goto Error;                         \
  |  |  |  | 5111|   109k|        Py_XDECREF(result);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|   109k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   109k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   109k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5112|   109k|        result = temp;                          \
  |  |  |  | 5113|   109k|        temp = NULL;                            \
  |  |  |  | 5114|   109k|        REDUCE(result);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 5094|   109k|    do {                                                \
  |  |  |  |  |  | 5095|   109k|        if (c != NULL) {                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5095:13): [True: 59, False: 109k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5096|     59|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5096:17): [True: 0, False: 59]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5097|     59|                goto Error;                             \
  |  |  |  |  |  | 5098|     59|            Py_XDECREF(X);                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  524|     59|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|     59|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|     59|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5099|     59|            X = temp;                                   \
  |  |  |  |  |  | 5100|     59|            temp = NULL;                                \
  |  |  |  |  |  | 5101|     59|        }                                               \
  |  |  |  |  |  | 5102|   109k|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5102:13): [Folded, False: 109k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5115|   109k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5115:13): [Folded, False: 109k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5201|   109k|            } while (--blen); \
  |  |  ------------------
  |  |  |  Branch (5201:22): [True: 81.2k, False: 28.4k]
  |  |  ------------------
  |  | 5202|  28.4k|            MULT(z, table[pending >> 1], z); \
  |  |  ------------------
  |  |  |  | 5107|  28.4k|    do {                                        \
  |  |  |  | 5108|  28.4k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  |  |  | 5109|  28.4k|        if (temp == NULL)                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5109:13): [True: 0, False: 28.4k]
  |  |  |  |  ------------------
  |  |  |  | 5110|  28.4k|            goto Error;                         \
  |  |  |  | 5111|  28.4k|        Py_XDECREF(result);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|  28.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  28.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  28.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5112|  28.4k|        result = temp;                          \
  |  |  |  | 5113|  28.4k|        temp = NULL;                            \
  |  |  |  | 5114|  28.4k|        REDUCE(result);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 5094|  28.4k|    do {                                                \
  |  |  |  |  |  | 5095|  28.4k|        if (c != NULL) {                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5095:13): [True: 12, False: 28.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5096|     12|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5096:17): [True: 0, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5097|     12|                goto Error;                             \
  |  |  |  |  |  | 5098|     12|            Py_XDECREF(X);                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  524|     12|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5099|     12|            X = temp;                                   \
  |  |  |  |  |  | 5100|     12|            temp = NULL;                                \
  |  |  |  |  |  | 5101|     12|        }                                               \
  |  |  |  |  |  | 5102|  28.4k|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5102:13): [Folded, False: 28.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5115|  28.4k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5115:13): [Folded, False: 28.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5203|  61.0k|            while (ntz-- > 0) \
  |  |  ------------------
  |  |  |  Branch (5203:20): [True: 32.5k, False: 28.4k]
  |  |  ------------------
  |  | 5204|  32.5k|                MULT(z, z, z); \
  |  |  ------------------
  |  |  |  | 5107|  61.0k|    do {                                        \
  |  |  |  | 5108|  32.5k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  |  |  | 5109|  32.5k|        if (temp == NULL)                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5109:13): [True: 0, False: 32.5k]
  |  |  |  |  ------------------
  |  |  |  | 5110|  32.5k|            goto Error;                         \
  |  |  |  | 5111|  32.5k|        Py_XDECREF(result);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|  32.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  32.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  32.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5112|  32.5k|        result = temp;                          \
  |  |  |  | 5113|  32.5k|        temp = NULL;                            \
  |  |  |  | 5114|  32.5k|        REDUCE(result);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 5094|  32.5k|    do {                                                \
  |  |  |  |  |  | 5095|  32.5k|        if (c != NULL) {                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5095:13): [True: 1, False: 32.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5096|      1|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5096:17): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5097|      1|                goto Error;                             \
  |  |  |  |  |  | 5098|      1|            Py_XDECREF(X);                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5099|      1|            X = temp;                                   \
  |  |  |  |  |  | 5100|      1|            temp = NULL;                                \
  |  |  |  |  |  | 5101|      1|        }                                               \
  |  |  |  |  |  | 5102|  32.5k|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5102:13): [Folded, False: 32.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5115|  32.5k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5115:13): [Folded, False: 32.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5205|  28.4k|            assert(blen == 0); \
  |  | 5206|  28.4k|            pending = 0; \
  |  | 5207|  28.4k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (5207:17): [Folded, False: 28.4k]
  |  |  ------------------
  ------------------
  |  Branch (5217:25): [True: 28.4k, False: 0]
  |  Branch (5217:25): [True: 28.4k, False: 0]
  |  Branch (5217:25): [True: 28.4k, False: 0]
  |  Branch (5217:25): [True: 28.4k, False: 0]
  |  Branch (5217:25): [True: 28.4k, False: 0]
  |  Branch (5217:25): [True: 28.4k, False: 0]
  ------------------
 5218|   146k|                }
 5219|  82.3k|                else /* absorb strings of 0 bits */
 5220|  82.3k|                    MULT(z, z, z);
  ------------------
  |  | 5107|  82.3k|    do {                                        \
  |  | 5108|  82.3k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  | 5109|  82.3k|        if (temp == NULL)                       \
  |  |  ------------------
  |  |  |  Branch (5109:13): [True: 0, False: 82.3k]
  |  |  ------------------
  |  | 5110|  82.3k|            goto Error;                         \
  |  | 5111|  82.3k|        Py_XDECREF(result);                     \
  |  |  ------------------
  |  |  |  |  524|  82.3k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  82.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  82.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5112|  82.3k|        result = temp;                          \
  |  | 5113|  82.3k|        temp = NULL;                            \
  |  | 5114|  82.3k|        REDUCE(result);                         \
  |  |  ------------------
  |  |  |  | 5094|  82.3k|    do {                                                \
  |  |  |  | 5095|  82.3k|        if (c != NULL) {                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5095:13): [True: 29, False: 82.3k]
  |  |  |  |  ------------------
  |  |  |  | 5096|     29|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5096:17): [True: 0, False: 29]
  |  |  |  |  ------------------
  |  |  |  | 5097|     29|                goto Error;                             \
  |  |  |  | 5098|     29|            Py_XDECREF(X);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|     29|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5099|     29|            X = temp;                                   \
  |  |  |  | 5100|     29|            temp = NULL;                                \
  |  |  |  | 5101|     29|        }                                               \
  |  |  |  | 5102|  82.3k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5102:13): [Folded, False: 82.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5115|  82.3k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (5115:13): [Folded, False: 82.3k]
  |  |  ------------------
  ------------------
 5221|   228k|            }
 5222|  7.63k|        }
 5223|  1.96k|        if (pending)
  ------------------
  |  Branch (5223:13): [True: 1.39k, False: 578]
  ------------------
 5224|  1.39k|            ABSORB_PENDING;
  ------------------
  |  | 5188|  1.39k|#define ABSORB_PENDING  do { \
  |  | 5189|  1.39k|            int ntz = 0; /* number of trailing zeroes in `pending` */ \
  |  | 5190|  1.39k|            assert(pending && blen); \
  |  | 5191|  1.39k|            assert(pending >> (blen - 1)); \
  |  | 5192|  1.39k|            assert(pending >> blen == 0); \
  |  | 5193|  2.19k|            while ((pending & 1) == 0) { \
  |  |  ------------------
  |  |  |  Branch (5193:20): [True: 802, False: 1.39k]
  |  |  ------------------
  |  | 5194|    802|                ++ntz; \
  |  | 5195|    802|                pending >>= 1; \
  |  | 5196|    802|            } \
  |  | 5197|  1.39k|            assert(ntz < blen); \
  |  | 5198|  1.39k|            blen -= ntz; \
  |  | 5199|  3.45k|            do { \
  |  | 5200|  3.45k|                MULT(z, z, z); \
  |  |  ------------------
  |  |  |  | 5107|  3.45k|    do {                                        \
  |  |  |  | 5108|  3.45k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  |  |  | 5109|  3.45k|        if (temp == NULL)                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5109:13): [True: 0, False: 3.45k]
  |  |  |  |  ------------------
  |  |  |  | 5110|  3.45k|            goto Error;                         \
  |  |  |  | 5111|  3.45k|        Py_XDECREF(result);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|  3.45k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  3.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  3.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5112|  3.45k|        result = temp;                          \
  |  |  |  | 5113|  3.45k|        temp = NULL;                            \
  |  |  |  | 5114|  3.45k|        REDUCE(result);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 5094|  3.45k|    do {                                                \
  |  |  |  |  |  | 5095|  3.45k|        if (c != NULL) {                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5095:13): [True: 1, False: 3.45k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5096|      1|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5096:17): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5097|      1|                goto Error;                             \
  |  |  |  |  |  | 5098|      1|            Py_XDECREF(X);                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5099|      1|            X = temp;                                   \
  |  |  |  |  |  | 5100|      1|            temp = NULL;                                \
  |  |  |  |  |  | 5101|      1|        }                                               \
  |  |  |  |  |  | 5102|  3.45k|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5102:13): [Folded, False: 3.45k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5115|  3.45k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5115:13): [Folded, False: 3.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5201|  3.45k|            } while (--blen); \
  |  |  ------------------
  |  |  |  Branch (5201:22): [True: 2.06k, False: 1.39k]
  |  |  ------------------
  |  | 5202|  1.39k|            MULT(z, table[pending >> 1], z); \
  |  |  ------------------
  |  |  |  | 5107|  1.39k|    do {                                        \
  |  |  |  | 5108|  1.39k|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  |  |  | 5109|  1.39k|        if (temp == NULL)                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5109:13): [True: 0, False: 1.39k]
  |  |  |  |  ------------------
  |  |  |  | 5110|  1.39k|            goto Error;                         \
  |  |  |  | 5111|  1.39k|        Py_XDECREF(result);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|  1.39k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.39k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.39k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5112|  1.39k|        result = temp;                          \
  |  |  |  | 5113|  1.39k|        temp = NULL;                            \
  |  |  |  | 5114|  1.39k|        REDUCE(result);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 5094|  1.39k|    do {                                                \
  |  |  |  |  |  | 5095|  1.39k|        if (c != NULL) {                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5095:13): [True: 1, False: 1.38k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5096|      1|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5096:17): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5097|      1|                goto Error;                             \
  |  |  |  |  |  | 5098|      1|            Py_XDECREF(X);                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5099|      1|            X = temp;                                   \
  |  |  |  |  |  | 5100|      1|            temp = NULL;                                \
  |  |  |  |  |  | 5101|      1|        }                                               \
  |  |  |  |  |  | 5102|  1.39k|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5102:13): [Folded, False: 1.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5115|  1.39k|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5115:13): [Folded, False: 1.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5203|  2.19k|            while (ntz-- > 0) \
  |  |  ------------------
  |  |  |  Branch (5203:20): [True: 802, False: 1.39k]
  |  |  ------------------
  |  | 5204|  1.39k|                MULT(z, z, z); \
  |  |  ------------------
  |  |  |  | 5107|  2.19k|    do {                                        \
  |  |  |  | 5108|    802|        temp = (PyLongObject *)long_mul(X, Y);  \
  |  |  |  | 5109|    802|        if (temp == NULL)                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5109:13): [True: 0, False: 802]
  |  |  |  |  ------------------
  |  |  |  | 5110|    802|            goto Error;                         \
  |  |  |  | 5111|    802|        Py_XDECREF(result);                     \
  |  |  |  |  ------------------
  |  |  |  |  |  |  524|    802|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    802|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    802|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5112|    802|        result = temp;                          \
  |  |  |  | 5113|    802|        temp = NULL;                            \
  |  |  |  | 5114|    802|        REDUCE(result);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  | 5094|    802|    do {                                                \
  |  |  |  |  |  | 5095|    802|        if (c != NULL) {                                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5095:13): [True: 0, False: 802]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5096|      0|            if (l_mod(X, c, &temp) < 0)                 \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5096:17): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5097|      0|                goto Error;                             \
  |  |  |  |  |  | 5098|      0|            Py_XDECREF(X);                              \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 5099|      0|            X = temp;                                   \
  |  |  |  |  |  | 5100|      0|            temp = NULL;                                \
  |  |  |  |  |  | 5101|      0|        }                                               \
  |  |  |  |  |  | 5102|    802|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (5102:13): [Folded, False: 802]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 5115|    802|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (5115:13): [Folded, False: 802]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5205|  1.39k|            assert(blen == 0); \
  |  | 5206|  1.39k|            pending = 0; \
  |  | 5207|  1.39k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (5207:17): [Folded, False: 1.39k]
  |  |  ------------------
  ------------------
  |  Branch (5224:13): [True: 1.39k, False: 0]
  |  Branch (5224:13): [True: 1.39k, False: 0]
  |  Branch (5224:13): [True: 1.39k, False: 0]
  |  Branch (5224:13): [True: 1.39k, False: 0]
  |  Branch (5224:13): [True: 1.39k, False: 0]
  |  Branch (5224:13): [True: 1.39k, False: 0]
  ------------------
 5225|  1.96k|    }
 5226|       |
 5227|  44.8k|    if (negativeOutput && !_PyLong_IsZero(z)) {
  ------------------
  |  Branch (5227:9): [True: 0, False: 44.8k]
  |  Branch (5227:27): [True: 0, False: 0]
  ------------------
 5228|      0|        temp = long_sub(z, c);
 5229|      0|        if (temp == NULL)
  ------------------
  |  Branch (5229:13): [True: 0, False: 0]
  ------------------
 5230|      0|            goto Error;
 5231|      0|        Py_SETREF(z, temp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5232|      0|        temp = NULL;
 5233|      0|    }
 5234|  44.8k|    goto Done;
 5235|       |
 5236|  44.8k|  Error:
 5237|      0|    Py_CLEAR(z);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5238|       |    /* fall through */
 5239|  44.8k|  Done:
 5240|  76.2k|    for (i = 0; i < num_table_entries; ++i)
  ------------------
  |  Branch (5240:17): [True: 31.4k, False: 44.8k]
  ------------------
 5241|  31.4k|        Py_DECREF(table[i]);
  ------------------
  |  |  430|  76.2k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  31.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  31.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5242|  44.8k|    Py_DECREF(a);
  ------------------
  |  |  430|  44.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5243|  44.8k|    Py_DECREF(b);
  ------------------
  |  |  430|  44.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5244|  44.8k|    Py_XDECREF(c);
  ------------------
  |  |  524|  44.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5245|  44.8k|    Py_XDECREF(a2);
  ------------------
  |  |  524|  44.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5246|  44.8k|    Py_XDECREF(temp);
  ------------------
  |  |  524|  44.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5247|  44.8k|    return (PyObject *)z;
 5248|      0|}
longobject.c:long_neg_method:
 5284|   119k|{
 5285|   119k|    return (PyObject*)long_neg(_PyLong_CAST(v));
  ------------------
  |  |    6|   119k|    (assert(PyLong_Check(op)), _Py_CAST(PyLongObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5285:32): [True: 119k, False: 0]
  ------------------
 5286|   119k|}
longobject.c:long_abs_method:
 5299|      3|{
 5300|      3|    return (PyObject*)long_abs(_PyLong_CAST(v));
  ------------------
  |  |    6|      3|    (assert(PyLong_Check(op)), _Py_CAST(PyLongObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5300:32): [True: 3, False: 0]
  ------------------
 5301|      3|}
longobject.c:long_bool:
 5305|  3.59k|{
 5306|  3.59k|    return !_PyLong_IsZero(_PyLong_CAST(v));
  ------------------
  |  |    6|  3.59k|    (assert(PyLong_Check(op)), _Py_CAST(PyLongObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5306:28): [True: 3.59k, False: 0]
  ------------------
 5307|  3.59k|}
longobject.c:long_invert:
 5252|  11.1k|{
 5253|  11.1k|    PyLongObject *v = _PyLong_CAST(self);
  ------------------
  |  |    6|  11.1k|    (assert(PyLong_Check(op)), _Py_CAST(PyLongObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  11.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (5253:23): [True: 11.1k, False: 0]
  ------------------
 5254|       |
 5255|       |    /* Implement ~x as -(x+1) */
 5256|  11.1k|    if (_PyLong_IsCompact(v))
  ------------------
  |  Branch (5256:9): [True: 4.94k, False: 6.18k]
  ------------------
 5257|  4.94k|        return (PyObject*)_PyLong_FromSTwoDigits(~medium_value(v));
  ------------------
  |  |   27|  4.94k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5258|       |
 5259|  6.18k|    PyLongObject *x = long_add(v, (PyLongObject *)_PyLong_GetOne());
 5260|  6.18k|    if (x == NULL)
  ------------------
  |  Branch (5260:9): [True: 0, False: 6.18k]
  ------------------
 5261|      0|        return NULL;
 5262|  6.18k|    _PyLong_Negate(&x);
 5263|       |    /* No need for maybe_small_long here, since any small longs
 5264|       |       will have been caught in the _PyLong_IsCompact() fast path. */
 5265|  6.18k|    return (PyObject *)x;
 5266|  6.18k|}
longobject.c:long_lshift_method:
 5499|  8.89k|{
 5500|  8.89k|    CHECK_BINOP(aa, bb);
  ------------------
  |  | 1844|  8.89k|    do {                                                \
  |  | 1845|  8.89k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  8.89k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  17.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  8.74k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  8.74k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 153, False: 8.74k]
  |  |  |  Branch (1845:33): [True: 126, False: 8.61k]
  |  |  ------------------
  |  | 1846|  8.89k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|    279|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|    279|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  8.89k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 8.61k]
  |  |  ------------------
  ------------------
 5501|  8.61k|    PyLongObject *a = (PyLongObject*)aa;
 5502|  8.61k|    PyLongObject *b = (PyLongObject*)bb;
 5503|       |
 5504|  8.61k|    if (_PyLong_IsNegative(b)) {
  ------------------
  |  Branch (5504:9): [True: 583, False: 8.03k]
  ------------------
 5505|    583|        PyErr_SetString(PyExc_ValueError, "negative shift count");
 5506|    583|        return NULL;
 5507|    583|    }
 5508|  8.03k|    if (_PyLong_IsZero(a)) {
  ------------------
  |  Branch (5508:9): [True: 857, False: 7.17k]
  ------------------
 5509|    857|        return PyLong_FromLong(0);
 5510|    857|    }
 5511|       |
 5512|  7.17k|    int64_t shiftby;
 5513|  7.17k|    if (PyLong_AsInt64(bb, &shiftby) < 0) {
  ------------------
  |  Branch (5513:9): [True: 0, False: 7.17k]
  ------------------
 5514|      0|        if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
  ------------------
  |  Branch (5514:13): [True: 0, False: 0]
  ------------------
 5515|      0|            PyErr_SetString(PyExc_OverflowError,
 5516|      0|                            "too many digits in integer");
 5517|      0|        }
 5518|      0|        return NULL;
 5519|      0|    }
 5520|  7.17k|    return long_lshift_int64(a, shiftby);
 5521|  7.17k|}
longobject.c:long_rshift:
 5401|  15.4k|{
 5402|  15.4k|    int64_t shiftby;
 5403|       |
 5404|  15.4k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  15.4k|    do {                                                \
  |  | 1845|  15.4k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  15.4k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  30.8k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  14.4k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  14.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 953, False: 14.4k]
  |  |  |  Branch (1845:33): [True: 1.03k, False: 13.4k]
  |  |  ------------------
  |  | 1846|  15.4k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  1.98k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  1.98k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  15.4k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 13.4k]
  |  |  ------------------
  ------------------
 5405|       |
 5406|  13.4k|    if (_PyLong_IsNegative((PyLongObject *)b)) {
  ------------------
  |  Branch (5406:9): [True: 212, False: 13.2k]
  ------------------
 5407|    212|        PyErr_SetString(PyExc_ValueError, "negative shift count");
 5408|    212|        return NULL;
 5409|    212|    }
 5410|  13.2k|    if (_PyLong_IsZero((PyLongObject *)a)) {
  ------------------
  |  Branch (5410:9): [True: 969, False: 12.2k]
  ------------------
 5411|    969|        return PyLong_FromLong(0);
 5412|    969|    }
 5413|  12.2k|    if (PyLong_AsInt64(b, &shiftby) < 0) {
  ------------------
  |  Branch (5413:9): [True: 4.70k, False: 7.53k]
  ------------------
 5414|  4.70k|        if (!PyErr_ExceptionMatches(PyExc_OverflowError)) {
  ------------------
  |  Branch (5414:13): [True: 0, False: 4.70k]
  ------------------
 5415|      0|            return NULL;
 5416|      0|        }
 5417|  4.70k|        PyErr_Clear();
 5418|  4.70k|        if (_PyLong_IsNegative((PyLongObject *)a)) {
  ------------------
  |  Branch (5418:13): [True: 2.01k, False: 2.69k]
  ------------------
 5419|  2.01k|            return PyLong_FromLong(-1);
 5420|  2.01k|        }
 5421|  2.69k|        else {
 5422|  2.69k|            return PyLong_FromLong(0);
 5423|  2.69k|        }
 5424|  4.70k|    }
 5425|  7.53k|    return _PyLong_Rshift(a, shiftby);
 5426|  12.2k|}
longobject.c:long_and:
 5698|  6.28k|{
 5699|  6.28k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  6.28k|    do {                                                \
  |  | 1845|  6.28k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  6.28k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  12.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  5.85k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  5.85k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 431, False: 5.85k]
  |  |  |  Branch (1845:33): [True: 338, False: 5.51k]
  |  |  ------------------
  |  | 1846|  6.28k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|    769|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|    769|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  6.28k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 5.51k]
  |  |  ------------------
  ------------------
 5700|  5.51k|    PyLongObject *x = (PyLongObject*)a;
 5701|  5.51k|    PyLongObject *y = (PyLongObject*)b;
 5702|  5.51k|    if (_PyLong_IsCompact(x) && _PyLong_IsCompact(y)) {
  ------------------
  |  Branch (5702:9): [True: 3.48k, False: 2.02k]
  |  Branch (5702:33): [True: 3.02k, False: 464]
  ------------------
 5703|  3.02k|        return (PyObject*)_PyLong_FromSTwoDigits(medium_value(x) & medium_value(y));
  ------------------
  |  |   27|  3.02k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                      return (PyObject*)_PyLong_FromSTwoDigits(medium_value(x) & medium_value(y));
  ------------------
  |  |   27|  3.02k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5704|  3.02k|    }
 5705|  2.49k|    return long_bitwise(x, '&', y);
 5706|  5.51k|}
longobject.c:long_bitwise:
 5574|  8.15k|{
 5575|  8.15k|    int nega, negb, negz;
 5576|  8.15k|    Py_ssize_t size_a, size_b, size_z, i;
 5577|  8.15k|    PyLongObject *z;
 5578|       |
 5579|  8.15k|    PyLongObject *new_a = NULL;
 5580|  8.15k|    PyLongObject *new_b = NULL;
 5581|       |
 5582|       |    /* Bitwise operations for negative numbers operate as though
 5583|       |       on a two's complement representation.  So convert arguments
 5584|       |       from sign-magnitude to two's complement, and convert the
 5585|       |       result back to sign-magnitude at the end. */
 5586|       |
 5587|  8.15k|    size_a = _PyLong_DigitCount(a);
 5588|  8.15k|    size_b = _PyLong_DigitCount(b);
 5589|       |    /* Swap a and b if necessary to ensure size_a >= size_b. */
 5590|  8.15k|    if (size_a < size_b) {
  ------------------
  |  Branch (5590:9): [True: 1.77k, False: 6.37k]
  ------------------
 5591|  1.77k|        z = a; a = b; b = z;
 5592|  1.77k|        size_z = size_a; size_a = size_b; size_b = size_z;
 5593|  1.77k|    }
 5594|       |
 5595|       |    /* If a is negative, replace it by its two's complement. */
 5596|  8.15k|    nega = _PyLong_IsNegative(a);
 5597|  8.15k|    if (nega) {
  ------------------
  |  Branch (5597:9): [True: 2.60k, False: 5.54k]
  ------------------
 5598|  2.60k|        z = long_alloc(size_a);
 5599|  2.60k|        if (z == NULL)
  ------------------
  |  Branch (5599:13): [True: 0, False: 2.60k]
  ------------------
 5600|      0|            return NULL;
 5601|  2.60k|        v_complement(z->long_value.ob_digit, a->long_value.ob_digit, size_a);
 5602|  2.60k|        new_a = z; // reference to decrement instead of a itself
 5603|  2.60k|        a = z;
 5604|  2.60k|    }
 5605|       |
 5606|       |    /* Same for b. */
 5607|  8.15k|    negb = _PyLong_IsNegative(b);
 5608|  8.15k|    if (negb) {
  ------------------
  |  Branch (5608:9): [True: 2.25k, False: 5.89k]
  ------------------
 5609|  2.25k|        z = long_alloc(size_b);
 5610|  2.25k|        if (z == NULL) {
  ------------------
  |  Branch (5610:13): [True: 0, False: 2.25k]
  ------------------
 5611|      0|            Py_XDECREF(new_a);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5612|      0|            return NULL;
 5613|      0|        }
 5614|  2.25k|        v_complement(z->long_value.ob_digit, b->long_value.ob_digit, size_b);
 5615|  2.25k|        new_b = z; // reference to decrement instead of b itself
 5616|  2.25k|        b = z;
 5617|  2.25k|    }
 5618|       |
 5619|       |    /* JRH: The original logic here was to allocate the result value (z)
 5620|       |       as the longer of the two operands.  However, there are some cases
 5621|       |       where the result is guaranteed to be shorter than that: AND of two
 5622|       |       positives, OR of two negatives: use the shorter number.  AND with
 5623|       |       mixed signs: use the positive number.  OR with mixed signs: use the
 5624|       |       negative number.
 5625|       |    */
 5626|  8.15k|    switch (op) {
 5627|  3.67k|    case '^':
  ------------------
  |  Branch (5627:5): [True: 3.67k, False: 4.47k]
  ------------------
 5628|  3.67k|        negz = nega ^ negb;
 5629|  3.67k|        size_z = size_a;
 5630|  3.67k|        break;
 5631|  2.49k|    case '&':
  ------------------
  |  Branch (5631:5): [True: 2.49k, False: 5.65k]
  ------------------
 5632|  2.49k|        negz = nega & negb;
 5633|  2.49k|        size_z = negb ? size_a : size_b;
  ------------------
  |  Branch (5633:18): [True: 761, False: 1.73k]
  ------------------
 5634|  2.49k|        break;
 5635|  1.97k|    case '|':
  ------------------
  |  Branch (5635:5): [True: 1.97k, False: 6.17k]
  ------------------
 5636|  1.97k|        negz = nega | negb;
 5637|  1.97k|        size_z = negb ? size_b : size_a;
  ------------------
  |  Branch (5637:18): [True: 613, False: 1.36k]
  ------------------
 5638|  1.97k|        break;
 5639|      0|    default:
  ------------------
  |  Branch (5639:5): [True: 0, False: 8.15k]
  ------------------
 5640|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 5641|  8.15k|    }
 5642|       |
 5643|  8.15k|    if ((size_z + negz) == 0) {
  ------------------
  |  Branch (5643:9): [True: 462, False: 7.68k]
  ------------------
 5644|    462|        Py_XDECREF(new_a);
  ------------------
  |  |  524|    462|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    462|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    462|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5645|    462|        Py_XDECREF(new_b);
  ------------------
  |  |  524|    462|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    462|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    462|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5646|    462|        return get_small_int(0);
 5647|    462|    }
 5648|       |
 5649|       |    /* We allow an extra digit if z is negative, to make sure that
 5650|       |       the final two's complement of z doesn't overflow. */
 5651|  7.68k|    z = long_alloc(size_z + negz);
 5652|  7.68k|    if (z == NULL) {
  ------------------
  |  Branch (5652:9): [True: 0, False: 7.68k]
  ------------------
 5653|      0|        Py_XDECREF(new_a);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5654|      0|        Py_XDECREF(new_b);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5655|      0|        return NULL;
 5656|      0|    }
 5657|       |
 5658|       |    /* Compute digits for overlap of a and b. */
 5659|  7.68k|    switch(op) {
 5660|  2.03k|    case '&':
  ------------------
  |  Branch (5660:5): [True: 2.03k, False: 5.65k]
  ------------------
 5661|  25.0k|        for (i = 0; i < size_b; ++i)
  ------------------
  |  Branch (5661:21): [True: 22.9k, False: 2.03k]
  ------------------
 5662|  22.9k|            z->long_value.ob_digit[i] = a->long_value.ob_digit[i] & b->long_value.ob_digit[i];
 5663|  2.03k|        break;
 5664|  1.97k|    case '|':
  ------------------
  |  Branch (5664:5): [True: 1.97k, False: 5.70k]
  ------------------
 5665|  22.1k|        for (i = 0; i < size_b; ++i)
  ------------------
  |  Branch (5665:21): [True: 20.1k, False: 1.97k]
  ------------------
 5666|  20.1k|            z->long_value.ob_digit[i] = a->long_value.ob_digit[i] | b->long_value.ob_digit[i];
 5667|  1.97k|        break;
 5668|  3.67k|    case '^':
  ------------------
  |  Branch (5668:5): [True: 3.67k, False: 4.00k]
  ------------------
 5669|  23.8k|        for (i = 0; i < size_b; ++i)
  ------------------
  |  Branch (5669:21): [True: 20.1k, False: 3.67k]
  ------------------
 5670|  20.1k|            z->long_value.ob_digit[i] = a->long_value.ob_digit[i] ^ b->long_value.ob_digit[i];
 5671|  3.67k|        break;
 5672|      0|    default:
  ------------------
  |  Branch (5672:5): [True: 0, False: 7.68k]
  ------------------
 5673|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 5674|  7.68k|    }
 5675|       |
 5676|       |    /* Copy any remaining digits of a, inverting if necessary. */
 5677|  7.68k|    if (op == '^' && negb)
  ------------------
  |  Branch (5677:9): [True: 3.67k, False: 4.00k]
  |  Branch (5677:22): [True: 882, False: 2.79k]
  ------------------
 5678|  3.05k|        for (; i < size_z; ++i)
  ------------------
  |  Branch (5678:16): [True: 2.17k, False: 882]
  ------------------
 5679|  2.17k|            z->long_value.ob_digit[i] = a->long_value.ob_digit[i] ^ PyLong_MASK;
  ------------------
  |  |   62|  2.17k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  2.17k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  2.17k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5680|  6.80k|    else if (i < size_z)
  ------------------
  |  Branch (5680:14): [True: 4.61k, False: 2.18k]
  ------------------
 5681|  4.61k|        memcpy(&z->long_value.ob_digit[i], &a->long_value.ob_digit[i],
 5682|  4.61k|               (size_z-i)*sizeof(digit));
 5683|       |
 5684|       |    /* Complement result if negative. */
 5685|  7.68k|    if (negz) {
  ------------------
  |  Branch (5685:9): [True: 2.82k, False: 4.86k]
  ------------------
 5686|  2.82k|        _PyLong_FlipSign(z);
 5687|  2.82k|        z->long_value.ob_digit[size_z] = PyLong_MASK;
  ------------------
  |  |   62|  2.82k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  2.82k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  2.82k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5688|  2.82k|        v_complement(z->long_value.ob_digit, z->long_value.ob_digit, size_z+1);
 5689|  2.82k|    }
 5690|       |
 5691|  7.68k|    Py_XDECREF(new_a);
  ------------------
  |  |  524|  7.68k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5692|  7.68k|    Py_XDECREF(new_b);
  ------------------
  |  |  524|  7.68k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5693|  7.68k|    return (PyObject *)maybe_small_long(long_normalize(z));
 5694|  7.68k|}
longobject.c:v_complement:
 5557|  7.69k|{
 5558|  7.69k|    Py_ssize_t i;
 5559|  7.69k|    digit carry = 1;
 5560|  44.5k|    for (i = 0; i < m; ++i) {
  ------------------
  |  Branch (5560:17): [True: 36.9k, False: 7.69k]
  ------------------
 5561|  36.9k|        carry += a[i] ^ PyLong_MASK;
  ------------------
  |  |   62|  36.9k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  36.9k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  36.9k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5562|  36.9k|        z[i] = carry & PyLong_MASK;
  ------------------
  |  |   62|  36.9k|#define PyLong_MASK     ((digit)(PyLong_BASE - 1))
  |  |  ------------------
  |  |  |  |   61|  36.9k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  36.9k|#define PyLong_SHIFT    30
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5563|  36.9k|        carry >>= PyLong_SHIFT;
  ------------------
  |  |   47|  36.9k|#define PyLong_SHIFT    30
  ------------------
 5564|  36.9k|    }
 5565|       |    assert(carry == 0);
  ------------------
  |  Branch (5565:5): [True: 7.69k, False: 0]
  ------------------
 5566|  7.69k|}
longobject.c:long_xor:
 5710|  5.87k|{
 5711|  5.87k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  5.87k|    do {                                                \
  |  | 1845|  5.87k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  5.87k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  11.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  5.10k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  5.10k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 763, False: 5.10k]
  |  |  |  Branch (1845:33): [True: 96, False: 5.01k]
  |  |  ------------------
  |  | 1846|  5.87k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|    859|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|    859|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  5.87k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 5.01k]
  |  |  ------------------
  ------------------
 5712|  5.01k|    PyLongObject *x = (PyLongObject*)a;
 5713|  5.01k|    PyLongObject *y = (PyLongObject*)b;
 5714|  5.01k|    if (_PyLong_IsCompact(x) && _PyLong_IsCompact(y)) {
  ------------------
  |  Branch (5714:9): [True: 1.76k, False: 3.25k]
  |  Branch (5714:33): [True: 1.33k, False: 429]
  ------------------
 5715|  1.33k|        return (PyObject*)_PyLong_FromSTwoDigits(medium_value(x) ^ medium_value(y));
  ------------------
  |  |   27|  1.33k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                      return (PyObject*)_PyLong_FromSTwoDigits(medium_value(x) ^ medium_value(y));
  ------------------
  |  |   27|  1.33k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5716|  1.33k|    }
 5717|  3.67k|    return long_bitwise(x, '^', y);
 5718|  5.01k|}
longobject.c:long_or:
 5722|  6.82k|{
 5723|  6.82k|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  6.82k|    do {                                                \
  |  | 1845|  6.82k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  6.82k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  13.6k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  6.63k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  6.63k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 192, False: 6.63k]
  |  |  |  Branch (1845:33): [True: 88, False: 6.54k]
  |  |  ------------------
  |  | 1846|  6.82k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|    280|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|    280|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  6.82k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 6.54k]
  |  |  ------------------
  ------------------
 5724|  6.54k|    PyLongObject *x = (PyLongObject*)a;
 5725|  6.54k|    PyLongObject *y = (PyLongObject*)b;
 5726|  6.54k|    if (_PyLong_IsCompact(x) && _PyLong_IsCompact(y)) {
  ------------------
  |  Branch (5726:9): [True: 5.28k, False: 1.26k]
  |  Branch (5726:33): [True: 4.56k, False: 717]
  ------------------
 5727|  4.56k|        return (PyObject*)_PyLong_FromSTwoDigits(medium_value(x) | medium_value(y));
  ------------------
  |  |   27|  4.56k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
                      return (PyObject*)_PyLong_FromSTwoDigits(medium_value(x) | medium_value(y));
  ------------------
  |  |   27|  4.56k|#define medium_value(x) ((stwodigits)_PyLong_CompactValue(x))
  ------------------
 5728|  4.56k|    }
 5729|  1.97k|    return long_bitwise(x, '|', y);
 5730|  6.54k|}
longobject.c:long_div:
 4587|  1.62M|{
 4588|  1.62M|    PyLongObject *div;
 4589|       |
 4590|  1.62M|    CHECK_BINOP(a, b);
  ------------------
  |  | 1844|  1.62M|    do {                                                \
  |  | 1845|  1.62M|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  1.62M|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  3.25M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  1.62M|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  1.62M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 1.04k, False: 1.62M]
  |  |  |  Branch (1845:33): [True: 1.01k, False: 1.62M]
  |  |  ------------------
  |  | 1846|  1.62M|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  2.05k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  2.05k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  1.62M|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 1.62M]
  |  |  ------------------
  ------------------
 4591|       |
 4592|  1.62M|    if (_PyLong_DigitCount((PyLongObject*)a) == 1 && _PyLong_DigitCount((PyLongObject*)b) == 1) {
  ------------------
  |  Branch (4592:9): [True: 1.53M, False: 91.1k]
  |  Branch (4592:54): [True: 1.53M, False: 1.06k]
  ------------------
 4593|  1.53M|        return fast_floor_div((PyLongObject*)a, (PyLongObject*)b);
 4594|  1.53M|    }
 4595|       |
 4596|  92.2k|    if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
  ------------------
  |  Branch (4596:9): [True: 108, False: 92.1k]
  ------------------
 4597|    108|        div = NULL;
 4598|  92.2k|    return (PyObject *)div;
 4599|  1.62M|}
longobject.c:long_true_divide:
 4608|  51.7k|{
 4609|  51.7k|    PyLongObject *a, *b, *x;
 4610|  51.7k|    Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
 4611|  51.7k|    digit mask, low;
 4612|  51.7k|    int inexact, negate, a_is_small, b_is_small;
 4613|  51.7k|    double dx, result;
 4614|       |
 4615|  51.7k|    CHECK_BINOP(v, w);
  ------------------
  |  | 1844|  51.7k|    do {                                                \
  |  | 1845|  51.7k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  51.7k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   103k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|  51.2k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  51.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 511, False: 51.2k]
  |  |  |  Branch (1845:33): [True: 11.2k, False: 40.0k]
  |  |  ------------------
  |  | 1846|  51.7k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  11.7k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  11.7k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|  51.7k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 40.0k]
  |  |  ------------------
  ------------------
 4616|  40.0k|    a = (PyLongObject *)v;
 4617|  40.0k|    b = (PyLongObject *)w;
 4618|       |
 4619|       |    /*
 4620|       |       Method in a nutshell:
 4621|       |
 4622|       |         0. reduce to case a, b > 0; filter out obvious underflow/overflow
 4623|       |         1. choose a suitable integer 'shift'
 4624|       |         2. use integer arithmetic to compute x = floor(2**-shift*a/b)
 4625|       |         3. adjust x for correct rounding
 4626|       |         4. convert x to a double dx with the same value
 4627|       |         5. return ldexp(dx, shift).
 4628|       |
 4629|       |       In more detail:
 4630|       |
 4631|       |       0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
 4632|       |       returns either 0.0 or -0.0, depending on the sign of b.  For a and
 4633|       |       b both nonzero, ignore signs of a and b, and add the sign back in
 4634|       |       at the end.  Now write a_bits and b_bits for the bit lengths of a
 4635|       |       and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
 4636|       |       for b).  Then
 4637|       |
 4638|       |          2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
 4639|       |
 4640|       |       So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
 4641|       |       so overflows.  Similarly, if a_bits - b_bits < DBL_MIN_EXP -
 4642|       |       DBL_MANT_DIG - 1 then a/b underflows to 0.  With these cases out of
 4643|       |       the way, we can assume that
 4644|       |
 4645|       |          DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
 4646|       |
 4647|       |       1. The integer 'shift' is chosen so that x has the right number of
 4648|       |       bits for a double, plus two or three extra bits that will be used
 4649|       |       in the rounding decisions.  Writing a_bits and b_bits for the
 4650|       |       number of significant bits in a and b respectively, a
 4651|       |       straightforward formula for shift is:
 4652|       |
 4653|       |          shift = a_bits - b_bits - DBL_MANT_DIG - 2
 4654|       |
 4655|       |       This is fine in the usual case, but if a/b is smaller than the
 4656|       |       smallest normal float then it can lead to double rounding on an
 4657|       |       IEEE 754 platform, giving incorrectly rounded results.  So we
 4658|       |       adjust the formula slightly.  The actual formula used is:
 4659|       |
 4660|       |           shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
 4661|       |
 4662|       |       2. The quantity x is computed by first shifting a (left -shift bits
 4663|       |       if shift <= 0, right shift bits if shift > 0) and then dividing by
 4664|       |       b.  For both the shift and the division, we keep track of whether
 4665|       |       the result is inexact, in a flag 'inexact'; this information is
 4666|       |       needed at the rounding stage.
 4667|       |
 4668|       |       With the choice of shift above, together with our assumption that
 4669|       |       a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
 4670|       |       that x >= 1.
 4671|       |
 4672|       |       3. Now x * 2**shift <= a/b < (x+1) * 2**shift.  We want to replace
 4673|       |       this with an exactly representable float of the form
 4674|       |
 4675|       |          round(x/2**extra_bits) * 2**(extra_bits+shift).
 4676|       |
 4677|       |       For float representability, we need x/2**extra_bits <
 4678|       |       2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
 4679|       |       DBL_MANT_DIG.  This translates to the condition:
 4680|       |
 4681|       |          extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
 4682|       |
 4683|       |       To round, we just modify the bottom digit of x in-place; this can
 4684|       |       end up giving a digit with value > PyLONG_MASK, but that's not a
 4685|       |       problem since digits can hold values up to 2*PyLONG_MASK+1.
 4686|       |
 4687|       |       With the original choices for shift above, extra_bits will always
 4688|       |       be 2 or 3.  Then rounding under the round-half-to-even rule, we
 4689|       |       round up iff the most significant of the extra bits is 1, and
 4690|       |       either: (a) the computation of x in step 2 had an inexact result,
 4691|       |       or (b) at least one other of the extra bits is 1, or (c) the least
 4692|       |       significant bit of x (above those to be rounded) is 1.
 4693|       |
 4694|       |       4. Conversion to a double is straightforward; all floating-point
 4695|       |       operations involved in the conversion are exact, so there's no
 4696|       |       danger of rounding errors.
 4697|       |
 4698|       |       5. Use ldexp(x, shift) to compute x*2**shift, the final result.
 4699|       |       The result will always be exactly representable as a double, except
 4700|       |       in the case that it overflows.  To avoid dependence on the exact
 4701|       |       behaviour of ldexp on overflow, we check for overflow before
 4702|       |       applying ldexp.  The result of ldexp is adjusted for sign before
 4703|       |       returning.
 4704|       |    */
 4705|       |
 4706|       |    /* Reduce to case where a and b are both positive. */
 4707|  40.0k|    a_size = _PyLong_DigitCount(a);
 4708|  40.0k|    b_size = _PyLong_DigitCount(b);
 4709|  40.0k|    negate = (_PyLong_IsNegative(a)) != (_PyLong_IsNegative(b));
 4710|  40.0k|    if (b_size == 0) {
  ------------------
  |  Branch (4710:9): [True: 293, False: 39.7k]
  ------------------
 4711|    293|        PyErr_SetString(PyExc_ZeroDivisionError,
 4712|    293|                        "division by zero");
 4713|    293|        goto error;
 4714|    293|    }
 4715|  39.7k|    if (a_size == 0)
  ------------------
  |  Branch (4715:9): [True: 579, False: 39.1k]
  ------------------
 4716|    579|        goto underflow_or_zero;
 4717|       |
 4718|       |    /* Fast path for a and b small (exactly representable in a double).
 4719|       |       Relies on floating-point division being correctly rounded; results
 4720|       |       may be subject to double rounding on x86 machines that operate with
 4721|       |       the x87 FPU set to 64-bit precision. */
 4722|  39.1k|    a_is_small = a_size <= MANT_DIG_DIGITS ||
  ------------------
  |  | 4603|  78.3k|#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  39.1k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (4722:18): [True: 30.1k, False: 9.05k]
  ------------------
 4723|  9.05k|        (a_size == MANT_DIG_DIGITS+1 &&
  ------------------
  |  | 4603|  9.05k|#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  9.05k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (4723:10): [True: 2.63k, False: 6.42k]
  ------------------
 4724|  2.63k|         a->long_value.ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
  ------------------
  |  | 4603|  2.63k|#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  2.63k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
                       a->long_value.ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
  ------------------
  |  | 4604|  2.63k|#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  2.63k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (4724:10): [True: 1.75k, False: 881]
  ------------------
 4725|  39.1k|    b_is_small = b_size <= MANT_DIG_DIGITS ||
  ------------------
  |  | 4603|  78.3k|#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  39.1k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (4725:18): [True: 15.8k, False: 23.2k]
  ------------------
 4726|  23.2k|        (b_size == MANT_DIG_DIGITS+1 &&
  ------------------
  |  | 4603|  23.2k|#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  23.2k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (4726:10): [True: 12.6k, False: 10.6k]
  ------------------
 4727|  12.6k|         b->long_value.ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
  ------------------
  |  | 4603|  12.6k|#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  12.6k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
                       b->long_value.ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
  ------------------
  |  | 4604|  12.6k|#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  12.6k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
  |  Branch (4727:10): [True: 3.53k, False: 9.11k]
  ------------------
 4728|  39.1k|    if (a_is_small && b_is_small) {
  ------------------
  |  Branch (4728:9): [True: 31.8k, False: 7.30k]
  |  Branch (4728:23): [True: 12.2k, False: 19.6k]
  ------------------
 4729|  12.2k|        double da, db;
 4730|  12.2k|        da = a->long_value.ob_digit[--a_size];
 4731|  13.7k|        while (a_size > 0)
  ------------------
  |  Branch (4731:16): [True: 1.47k, False: 12.2k]
  ------------------
 4732|  1.47k|            da = da * PyLong_BASE + a->long_value.ob_digit[--a_size];
  ------------------
  |  |   61|  1.47k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  1.47k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
 4733|  12.2k|        db = b->long_value.ob_digit[--b_size];
 4734|  15.6k|        while (b_size > 0)
  ------------------
  |  Branch (4734:16): [True: 3.37k, False: 12.2k]
  ------------------
 4735|  3.37k|            db = db * PyLong_BASE + b->long_value.ob_digit[--b_size];
  ------------------
  |  |   61|  3.37k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  3.37k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
 4736|  12.2k|        result = da / db;
 4737|  12.2k|        goto success;
 4738|  12.2k|    }
 4739|       |
 4740|       |    /* Catch obvious cases of underflow and overflow */
 4741|  26.9k|    diff = a_size - b_size;
 4742|  26.9k|    if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
  ------------------
  |  |  137|  26.9k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                  if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
  ------------------
  |  |   47|  26.9k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (4742:9): [True: 0, False: 26.9k]
  ------------------
 4743|       |        /* Extreme overflow */
 4744|      0|        goto overflow;
 4745|  26.9k|    else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
  ------------------
  |  |  137|  26.9k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                  else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
  ------------------
  |  |   47|  26.9k|#define PyLong_SHIFT    30
  ------------------
  |  Branch (4745:14): [True: 0, False: 26.9k]
  ------------------
 4746|       |        /* Extreme underflow */
 4747|      0|        goto underflow_or_zero;
 4748|       |    /* Next line is now safe from overflowing a Py_ssize_t */
 4749|  26.9k|    diff = diff * PyLong_SHIFT + bit_length_digit(a->long_value.ob_digit[a_size - 1]) -
  ------------------
  |  |   47|  26.9k|#define PyLong_SHIFT    30
  ------------------
 4750|  26.9k|        bit_length_digit(b->long_value.ob_digit[b_size - 1]);
 4751|       |    /* Now diff = a_bits - b_bits. */
 4752|  26.9k|    if (diff > DBL_MAX_EXP)
  ------------------
  |  Branch (4752:9): [True: 13, False: 26.9k]
  ------------------
 4753|     13|        goto overflow;
 4754|  26.9k|    else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
  ------------------
  |  Branch (4754:14): [True: 23, False: 26.9k]
  ------------------
 4755|     23|        goto underflow_or_zero;
 4756|       |
 4757|       |    /* Choose value for shift; see comments for step 1 above. */
 4758|  26.9k|    shift = Py_MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
  ------------------
  |  |  126|  26.9k|       __extension__ \
  |  |  127|  26.9k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  26.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  26.9k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  26.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  26.9k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 26.8k, False: 48]
  |  |  ------------------
  ------------------
 4759|       |
 4760|  26.9k|    inexact = 0;
 4761|       |
 4762|       |    /* x = abs(a * 2**-shift) */
 4763|  26.9k|    if (shift <= 0) {
  ------------------
  |  Branch (4763:9): [True: 21.0k, False: 5.88k]
  ------------------
 4764|  21.0k|        Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
  ------------------
  |  |   47|  21.0k|#define PyLong_SHIFT    30
  ------------------
 4765|  21.0k|        digit rem;
 4766|       |        /* x = a << -shift */
 4767|  21.0k|        if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
  ------------------
  |  |  137|  21.0k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (4767:13): [True: 0, False: 21.0k]
  ------------------
 4768|       |            /* In practice, it's probably impossible to end up
 4769|       |               here.  Both a and b would have to be enormous,
 4770|       |               using close to SIZE_T_MAX bytes of memory each. */
 4771|      0|            PyErr_SetString(PyExc_OverflowError,
 4772|      0|                            "intermediate overflow during division");
 4773|      0|            goto error;
 4774|      0|        }
 4775|  21.0k|        x = long_alloc(a_size + shift_digits + 1);
 4776|  21.0k|        if (x == NULL)
  ------------------
  |  Branch (4776:13): [True: 0, False: 21.0k]
  ------------------
 4777|      0|            goto error;
 4778|  92.9k|        for (i = 0; i < shift_digits; i++)
  ------------------
  |  Branch (4778:21): [True: 71.9k, False: 21.0k]
  ------------------
 4779|  71.9k|            x->long_value.ob_digit[i] = 0;
 4780|  21.0k|        rem = v_lshift(x->long_value.ob_digit + shift_digits, a->long_value.ob_digit,
 4781|  21.0k|                       a_size, -shift % PyLong_SHIFT);
  ------------------
  |  |   47|  21.0k|#define PyLong_SHIFT    30
  ------------------
 4782|  21.0k|        x->long_value.ob_digit[a_size + shift_digits] = rem;
 4783|  21.0k|    }
 4784|  5.88k|    else {
 4785|  5.88k|        Py_ssize_t shift_digits = shift / PyLong_SHIFT;
  ------------------
  |  |   47|  5.88k|#define PyLong_SHIFT    30
  ------------------
 4786|  5.88k|        digit rem;
 4787|       |        /* x = a >> shift */
 4788|  5.88k|        assert(a_size >= shift_digits);
  ------------------
  |  Branch (4788:9): [True: 5.88k, False: 0]
  ------------------
 4789|  5.88k|        x = long_alloc(a_size - shift_digits);
 4790|  5.88k|        if (x == NULL)
  ------------------
  |  Branch (4790:13): [True: 0, False: 5.88k]
  ------------------
 4791|      0|            goto error;
 4792|  5.88k|        rem = v_rshift(x->long_value.ob_digit, a->long_value.ob_digit + shift_digits,
 4793|  5.88k|                       a_size - shift_digits, shift % PyLong_SHIFT);
  ------------------
  |  |   47|  5.88k|#define PyLong_SHIFT    30
  ------------------
 4794|       |        /* set inexact if any of the bits shifted out is nonzero */
 4795|  5.88k|        if (rem)
  ------------------
  |  Branch (4795:13): [True: 4.78k, False: 1.10k]
  ------------------
 4796|  4.78k|            inexact = 1;
 4797|  7.10k|        while (!inexact && shift_digits > 0)
  ------------------
  |  Branch (4797:16): [True: 1.94k, False: 5.16k]
  |  Branch (4797:28): [True: 1.22k, False: 719]
  ------------------
 4798|  1.22k|            if (a->long_value.ob_digit[--shift_digits])
  ------------------
  |  Branch (4798:17): [True: 381, False: 843]
  ------------------
 4799|    381|                inexact = 1;
 4800|  5.88k|    }
 4801|  26.9k|    long_normalize(x);
 4802|  26.9k|    x_size = _PyLong_SignedDigitCount(x);
 4803|       |
 4804|       |    /* x //= b. If the remainder is nonzero, set inexact.  We own the only
 4805|       |       reference to x, so it's safe to modify it in-place. */
 4806|  26.9k|    if (b_size == 1) {
  ------------------
  |  Branch (4806:9): [True: 7.02k, False: 19.8k]
  ------------------
 4807|  7.02k|        digit rem = inplace_divrem1(x->long_value.ob_digit, x->long_value.ob_digit, x_size,
 4808|  7.02k|                              b->long_value.ob_digit[0]);
 4809|  7.02k|        long_normalize(x);
 4810|  7.02k|        if (rem)
  ------------------
  |  Branch (4810:13): [True: 2.72k, False: 4.29k]
  ------------------
 4811|  2.72k|            inexact = 1;
 4812|  7.02k|    }
 4813|  19.8k|    else {
 4814|  19.8k|        PyLongObject *div, *rem;
 4815|  19.8k|        div = x_divrem(x, b, &rem);
 4816|  19.8k|        Py_SETREF(x, div);
  ------------------
  |  |  354|  19.8k|    do { \
  |  |  355|  19.8k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  19.8k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  19.8k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  19.8k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  19.8k|        *_tmp_dst_ptr = (src); \
  |  |  358|  19.8k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  19.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  19.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  19.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  19.8k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 19.8k]
  |  |  ------------------
  ------------------
 4817|  19.8k|        if (x == NULL)
  ------------------
  |  Branch (4817:13): [True: 0, False: 19.8k]
  ------------------
 4818|      0|            goto error;
 4819|  19.8k|        if (!_PyLong_IsZero(rem))
  ------------------
  |  Branch (4819:13): [True: 19.8k, False: 53]
  ------------------
 4820|  19.8k|            inexact = 1;
 4821|  19.8k|        Py_DECREF(rem);
  ------------------
  |  |  430|  19.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  19.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4822|  19.8k|    }
 4823|  26.9k|    x_size = _PyLong_DigitCount(x);
 4824|  26.9k|    assert(x_size > 0); /* result of division is never zero */
  ------------------
  |  Branch (4824:5): [True: 26.9k, False: 0]
  ------------------
 4825|  26.9k|    x_bits = (x_size-1)*PyLong_SHIFT+bit_length_digit(x->long_value.ob_digit[x_size-1]);
  ------------------
  |  |   47|  26.9k|#define PyLong_SHIFT    30
  ------------------
 4826|       |
 4827|       |    /* The number of extra bits that have to be rounded away. */
 4828|  26.9k|    extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
  ------------------
  |  |  126|  26.9k|       __extension__ \
  |  |  127|  26.9k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  26.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  26.9k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  26.9k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  26.9k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 26.8k, False: 48]
  |  |  ------------------
  ------------------
 4829|  26.9k|    assert(extra_bits == 2 || extra_bits == 3);
  ------------------
  |  Branch (4829:5): [True: 3.73k, False: 23.1k]
  |  Branch (4829:5): [True: 23.1k, False: 0]
  ------------------
 4830|       |
 4831|       |    /* Round by directly modifying the low digit of x. */
 4832|  26.9k|    mask = (digit)1 << (extra_bits - 1);
 4833|  26.9k|    low = x->long_value.ob_digit[0] | inexact;
 4834|  26.9k|    if ((low & mask) && (low & (3U*mask-1U)))
  ------------------
  |  Branch (4834:9): [True: 7.81k, False: 19.0k]
  |  Branch (4834:25): [True: 7.76k, False: 45]
  ------------------
 4835|  7.76k|        low += mask;
 4836|  26.9k|    x->long_value.ob_digit[0] = low & ~(2U*mask-1U);
 4837|       |
 4838|       |    /* Convert x to a double dx; the conversion is exact. */
 4839|  26.9k|    dx = x->long_value.ob_digit[--x_size];
 4840|  53.7k|    while (x_size > 0)
  ------------------
  |  Branch (4840:12): [True: 26.8k, False: 26.9k]
  ------------------
 4841|  26.8k|        dx = dx * PyLong_BASE + x->long_value.ob_digit[--x_size];
  ------------------
  |  |   61|  26.8k|#define PyLong_BASE     ((digit)1 << PyLong_SHIFT)
  |  |  ------------------
  |  |  |  |   47|  26.8k|#define PyLong_SHIFT    30
  |  |  ------------------
  ------------------
 4842|  26.9k|    Py_DECREF(x);
  ------------------
  |  |  430|  26.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  26.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  26.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4843|       |
 4844|       |    /* Check whether ldexp result will overflow a double. */
 4845|  26.9k|    if (shift + x_bits >= DBL_MAX_EXP &&
  ------------------
  |  Branch (4845:9): [True: 8, False: 26.8k]
  ------------------
 4846|      8|        (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
  ------------------
  |  Branch (4846:10): [True: 8, False: 0]
  |  Branch (4846:42): [True: 0, False: 0]
  ------------------
 4847|      8|        goto overflow;
 4848|  26.8k|    result = ldexp(dx, (int)shift);
 4849|       |
 4850|  39.1k|  success:
 4851|  39.1k|    return PyFloat_FromDouble(negate ? -result : result);
  ------------------
  |  Branch (4851:31): [True: 5.40k, False: 33.7k]
  ------------------
 4852|       |
 4853|    602|  underflow_or_zero:
 4854|    602|    return PyFloat_FromDouble(negate ? -0.0 : 0.0);
  ------------------
  |  Branch (4854:31): [True: 26, False: 576]
  ------------------
 4855|       |
 4856|     21|  overflow:
 4857|     21|    PyErr_SetString(PyExc_OverflowError,
 4858|     21|                    "integer division result too large for a float");
 4859|    314|  error:
 4860|       |    return NULL;
 4861|     21|}
longobject.c:long_hash:
 3675|   125M|{
 3676|   125M|    PyLongObject *v = (PyLongObject *)obj;
 3677|   125M|    Py_uhash_t x;
 3678|   125M|    Py_ssize_t i;
 3679|   125M|    int sign;
 3680|       |
 3681|   125M|    if (_PyLong_IsCompact(v)) {
  ------------------
  |  Branch (3681:9): [True: 114M, False: 11.1M]
  ------------------
 3682|   114M|        x = (Py_uhash_t)_PyLong_CompactValue(v);
 3683|   114M|        if (x == (Py_uhash_t)-1) {
  ------------------
  |  Branch (3683:13): [True: 1.79k, False: 114M]
  ------------------
 3684|  1.79k|            x = (Py_uhash_t)-2;
 3685|  1.79k|        }
 3686|   114M|        return x;
 3687|   114M|    }
 3688|  11.1M|    i = _PyLong_DigitCount(v);
 3689|  11.1M|    sign = _PyLong_NonCompactSign(v);
 3690|       |
 3691|       |    // unroll first digit
 3692|  11.1M|    Py_BUILD_ASSERT(PyHASH_BITS > PyLong_SHIFT);
  ------------------
  |  |  192|  11.1M|        do { \
  |  |  193|  11.1M|            static_assert((cond), #cond); \
  |  |  194|  11.1M|        } while (0)
  |  |  ------------------
  |  |  |  Branch (194:18): [Folded, False: 11.1M]
  |  |  ------------------
  ------------------
 3693|  11.1M|    assert(i >= 1);
  ------------------
  |  Branch (3693:5): [True: 11.1M, False: 0]
  ------------------
 3694|  11.1M|    --i;
 3695|  11.1M|    x = v->long_value.ob_digit[i];
 3696|  11.1M|    assert(x < PyHASH_MODULUS);
  ------------------
  |  Branch (3696:5): [True: 11.1M, False: 0]
  ------------------
 3697|       |
 3698|  11.1M|#if PyHASH_BITS >= 2 * PyLong_SHIFT
 3699|       |    // unroll second digit
 3700|  11.1M|    assert(i >= 1);
  ------------------
  |  Branch (3700:5): [True: 11.1M, False: 0]
  ------------------
 3701|  11.1M|    --i;
 3702|  11.1M|    x <<= PyLong_SHIFT;
  ------------------
  |  |   47|  11.1M|#define PyLong_SHIFT    30
  ------------------
 3703|  11.1M|    x += v->long_value.ob_digit[i];
 3704|  11.1M|    assert(x < PyHASH_MODULUS);
  ------------------
  |  Branch (3704:5): [True: 11.1M, False: 0]
  ------------------
 3705|  11.1M|#endif
 3706|       |
 3707|  13.2M|    while (--i >= 0) {
  ------------------
  |  Branch (3707:12): [True: 2.11M, False: 11.1M]
  ------------------
 3708|       |        /* Here x is a quantity in the range [0, PyHASH_MODULUS); we
 3709|       |           want to compute x * 2**PyLong_SHIFT + v->long_value.ob_digit[i] modulo
 3710|       |           PyHASH_MODULUS.
 3711|       |
 3712|       |           The computation of x * 2**PyLong_SHIFT % PyHASH_MODULUS
 3713|       |           amounts to a rotation of the bits of x.  To see this, write
 3714|       |
 3715|       |             x * 2**PyLong_SHIFT = y * 2**PyHASH_BITS + z
 3716|       |
 3717|       |           where y = x >> (PyHASH_BITS - PyLong_SHIFT) gives the top
 3718|       |           PyLong_SHIFT bits of x (those that are shifted out of the
 3719|       |           original PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
 3720|       |           PyHASH_MODULUS gives the bottom PyHASH_BITS - PyLong_SHIFT
 3721|       |           bits of x, shifted up.  Then since 2**PyHASH_BITS is
 3722|       |           congruent to 1 modulo PyHASH_MODULUS, y*2**PyHASH_BITS is
 3723|       |           congruent to y modulo PyHASH_MODULUS.  So
 3724|       |
 3725|       |             x * 2**PyLong_SHIFT = y + z (mod PyHASH_MODULUS).
 3726|       |
 3727|       |           The right-hand side is just the result of rotating the
 3728|       |           PyHASH_BITS bits of x left by PyLong_SHIFT places; since
 3729|       |           not all PyHASH_BITS bits of x are 1s, the same is true
 3730|       |           after rotation, so 0 <= y+z < PyHASH_MODULUS and y + z is
 3731|       |           the reduction of x*2**PyLong_SHIFT modulo
 3732|       |           PyHASH_MODULUS. */
 3733|  2.11M|        x = ((x << PyLong_SHIFT) & PyHASH_MODULUS) |
  ------------------
  |  |   47|  2.11M|#define PyLong_SHIFT    30
  ------------------
                      x = ((x << PyLong_SHIFT) & PyHASH_MODULUS) |
  ------------------
  |  |   18|  2.11M|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|  2.11M|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
 3734|  2.11M|            (x >> (PyHASH_BITS - PyLong_SHIFT));
  ------------------
  |  |   13|  2.11M|#  define PyHASH_BITS 61
  ------------------
                          (x >> (PyHASH_BITS - PyLong_SHIFT));
  ------------------
  |  |   47|  2.11M|#define PyLong_SHIFT    30
  ------------------
 3735|  2.11M|        x += v->long_value.ob_digit[i];
 3736|  2.11M|        if (x >= PyHASH_MODULUS)
  ------------------
  |  |   18|  2.11M|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|  2.11M|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
  |  Branch (3736:13): [True: 2.98k, False: 2.11M]
  ------------------
 3737|  2.98k|            x -= PyHASH_MODULUS;
  ------------------
  |  |   18|  2.98k|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|  2.98k|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
 3738|  2.11M|    }
 3739|  11.1M|    x = x * sign;
 3740|  11.1M|    if (x == (Py_uhash_t)-1)
  ------------------
  |  Branch (3740:9): [True: 5.52k, False: 11.1M]
  ------------------
 3741|  5.52k|        x = (Py_uhash_t)-2;
 3742|  11.1M|    return (Py_hash_t)x;
 3743|  11.1M|}
longobject.c:long_richcompare:
 3627|   672k|{
 3628|   672k|    Py_ssize_t result;
 3629|   672k|    CHECK_BINOP(self, other);
  ------------------
  |  | 1844|   672k|    do {                                                \
  |  | 1845|   672k|        if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|   672k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  1.34M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!PyLong_Check(v) || !PyLong_Check(w))       \
  |  |  ------------------
  |  |  |  |   13|   672k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   672k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1845:13): [True: 0, False: 672k]
  |  |  |  Branch (1845:33): [True: 5.88k, False: 666k]
  |  |  ------------------
  |  | 1846|   672k|            Py_RETURN_NOTIMPLEMENTED;                   \
  |  |  ------------------
  |  |  |  |  648|  5.88k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  |  |  ------------------
  |  |  |  |  |  |  640|  5.88k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1847|   672k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1847:13): [Folded, False: 666k]
  |  |  ------------------
  ------------------
 3630|   666k|    if (self == other)
  ------------------
  |  Branch (3630:9): [True: 68, False: 666k]
  ------------------
 3631|     68|        result = 0;
 3632|   666k|    else
 3633|   666k|        result = long_compare((PyLongObject*)self, (PyLongObject*)other);
 3634|   666k|    Py_RETURN_RICHCOMPARE(result, 0, op);
  ------------------
  |  |  674|   666k|    do {                                                                    \
  |  |  675|   666k|        switch (op) {                                                       \
  |  |  676|   664k|        case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  654|   664k|#define Py_EQ 2
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|   425k|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   425k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   425k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   425k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|   239k|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|   239k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   239k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   239k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (676:9): [True: 664k, False: 1.75k]
  |  |  |  Branch (676:25): [True: 425k, False: 239k]
  |  |  ------------------
  |  |  677|   664k|        case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  655|    474|#define Py_NE 3
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      4|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      4|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|    470|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|    470|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    470|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    470|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (677:9): [True: 474, False: 666k]
  |  |  |  Branch (677:25): [True: 4, False: 470]
  |  |  ------------------
  |  |  678|    821|        case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  652|    821|#define Py_LT 0
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|    336|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    336|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|    485|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|    485|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    485|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    485|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (678:9): [True: 821, False: 665k]
  |  |  |  Branch (678:25): [True: 336, False: 485]
  |  |  ------------------
  |  |  679|    821|        case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  656|    430|#define Py_GT 4
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|    245|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    245|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    245|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    245|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|    185|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|    185|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    185|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    185|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (679:9): [True: 430, False: 666k]
  |  |  |  Branch (679:25): [True: 245, False: 185]
  |  |  ------------------
  |  |  680|    430|        case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  653|     11|#define Py_LE 1
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      6|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      5|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      5|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (680:9): [True: 11, False: 666k]
  |  |  |  Branch (680:25): [True: 6, False: 5]
  |  |  ------------------
  |  |  681|     14|        case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  657|     14|#define Py_GE 5
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      2|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|     12|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|     12|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (681:9): [True: 14, False: 666k]
  |  |  |  Branch (681:25): [True: 2, False: 12]
  |  |  ------------------
  |  |  682|     14|        default:                                                            \
  |  |  ------------------
  |  |  |  Branch (682:9): [True: 0, False: 666k]
  |  |  ------------------
  |  |  683|      0|            Py_UNREACHABLE();                                               \
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |  684|   666k|        }                                                                   \
  |  |  685|   666k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (685:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3635|   666k|}
longobject.c:int_bit_length_impl:
 6296|    206|{
 6297|    206|    int64_t nbits = _PyLong_NumBits(self);
 6298|    206|    assert(nbits >= 0);
  ------------------
  |  Branch (6298:5): [True: 206, False: 0]
  ------------------
 6299|    206|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (6299:5): [True: 206, False: 0]
  ------------------
 6300|    206|    return PyLong_FromInt64(nbits);
 6301|    206|}
longobject.c:int_to_bytes_impl:
 6397|      2|{
 6398|      2|    int little_endian;
 6399|      2|    if (byteorder == NULL)
  ------------------
  |  Branch (6399:9): [True: 0, False: 2]
  ------------------
 6400|      0|        little_endian = 0;
 6401|      2|    else if (_PyUnicode_Equal(byteorder, &_Py_ID(little)))
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6401:14): [True: 2, False: 0]
  ------------------
 6402|      2|        little_endian = 1;
 6403|      0|    else if (_PyUnicode_Equal(byteorder, &_Py_ID(big)))
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6403:14): [True: 0, False: 0]
  ------------------
 6404|      0|        little_endian = 0;
 6405|      0|    else {
 6406|      0|        PyErr_SetString(PyExc_ValueError,
 6407|      0|            "byteorder must be either 'little' or 'big'");
 6408|      0|        return NULL;
 6409|      0|    }
 6410|       |
 6411|      2|    PyBytesWriter *writer = PyBytesWriter_Create(length);
 6412|      2|    if (writer == NULL) {
  ------------------
  |  Branch (6412:9): [True: 0, False: 2]
  ------------------
 6413|      0|        return NULL;
 6414|      0|    }
 6415|       |
 6416|      2|    if (_PyLong_AsByteArray((PyLongObject *)self,
  ------------------
  |  Branch (6416:9): [True: 0, False: 2]
  ------------------
 6417|      2|                            PyBytesWriter_GetData(writer),
 6418|      2|                            length, little_endian, is_signed, 1) < 0) {
 6419|      0|        PyBytesWriter_Discard(writer);
 6420|      0|        return NULL;
 6421|      0|    }
 6422|       |
 6423|      2|    return PyBytesWriter_Finish(writer);
 6424|      2|}
longobject.c:int_from_bytes_impl:
 6454|    279|{
 6455|    279|    int little_endian;
 6456|    279|    PyObject *long_obj, *bytes;
 6457|       |
 6458|    279|    if (byteorder == NULL)
  ------------------
  |  Branch (6458:9): [True: 0, False: 279]
  ------------------
 6459|      0|        little_endian = 0;
 6460|    279|    else if (_PyUnicode_Equal(byteorder, &_Py_ID(little)))
  ------------------
  |  |  936|    279|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    279|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    279|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6460:14): [True: 279, False: 0]
  ------------------
 6461|    279|        little_endian = 1;
 6462|      0|    else if (_PyUnicode_Equal(byteorder, &_Py_ID(big)))
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6462:14): [True: 0, False: 0]
  ------------------
 6463|      0|        little_endian = 0;
 6464|      0|    else {
 6465|      0|        PyErr_SetString(PyExc_ValueError,
 6466|      0|            "byteorder must be either 'little' or 'big'");
 6467|      0|        return NULL;
 6468|      0|    }
 6469|       |
 6470|       |    /* Fast-path exact bytes. */
 6471|    279|    if (PyBytes_CheckExact(bytes_obj)) {
  ------------------
  |  |   29|    279|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|    279|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    279|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    279|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 279, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6472|    279|        long_obj = _PyLong_FromByteArray(
 6473|    279|            (unsigned char *)PyBytes_AS_STRING(bytes_obj), Py_SIZE(bytes_obj),
  ------------------
  |  |   27|    279|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    279|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    279|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          (unsigned char *)PyBytes_AS_STRING(bytes_obj), Py_SIZE(bytes_obj),
  ------------------
  |  |  214|    279|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    279|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    279|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6474|    279|            little_endian, is_signed);
 6475|    279|    }
 6476|       |    /* Use buffer protocol to avoid copies. */
 6477|      0|    else if (PyObject_CheckBuffer(bytes_obj)) {
  ------------------
  |  Branch (6477:14): [True: 0, False: 0]
  ------------------
 6478|      0|        Py_buffer view;
 6479|      0|        if (PyObject_GetBuffer(bytes_obj, &view, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (6479:13): [True: 0, False: 0]
  ------------------
 6480|      0|            return NULL;
 6481|      0|        }
 6482|      0|        long_obj = _PyLong_FromByteArray(view.buf, view.len, little_endian,
 6483|      0|            is_signed);
 6484|      0|        PyBuffer_Release(&view);
 6485|      0|    }
 6486|      0|    else {
 6487|       |        /* fallback: Construct a bytes then convert. */
 6488|      0|        bytes = PyObject_Bytes(bytes_obj);
 6489|      0|        if (bytes == NULL) {
  ------------------
  |  Branch (6489:13): [True: 0, False: 0]
  ------------------
 6490|      0|            return NULL;
 6491|      0|        }
 6492|      0|        long_obj = _PyLong_FromByteArray(
 6493|      0|            (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6494|      0|            little_endian, is_signed);
 6495|      0|        Py_DECREF(bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6496|      0|    }
 6497|       |
 6498|    279|    if (long_obj != NULL && type != &PyLong_Type) {
  ------------------
  |  Branch (6498:9): [True: 279, False: 0]
  |  Branch (6498:29): [True: 0, False: 279]
  ------------------
 6499|      0|        Py_SETREF(long_obj, PyObject_CallOneArg((PyObject *)type, long_obj));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6500|      0|    }
 6501|       |
 6502|    279|    return long_obj;
 6503|    279|}
longobject.c:int___format___impl:
 6094|    132|{
 6095|    132|    _PyUnicodeWriter writer;
 6096|    132|    int ret;
 6097|       |
 6098|    132|    _PyUnicodeWriter_Init(&writer);
 6099|    132|    ret = _PyLong_FormatAdvancedWriter(
 6100|    132|        &writer,
 6101|    132|        self,
 6102|    132|        format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
  ------------------
  |  |  299|    132|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6103|    132|    if (ret == -1) {
  ------------------
  |  Branch (6103:9): [True: 0, False: 132]
  ------------------
 6104|      0|        _PyUnicodeWriter_Dealloc(&writer);
 6105|      0|        return NULL;
 6106|      0|    }
 6107|    132|    return _PyUnicodeWriter_Finish(&writer);
 6108|    132|}
longobject.c:long_new_impl:
 5975|    394|{
 5976|    394|    Py_ssize_t base;
 5977|       |
 5978|    394|    if (type != &PyLong_Type)
  ------------------
  |  Branch (5978:9): [True: 145, False: 249]
  ------------------
 5979|    145|        return long_subtype_new(type, x, obase); /* Wimp out */
 5980|    249|    if (x == NULL) {
  ------------------
  |  Branch (5980:9): [True: 1, False: 248]
  ------------------
 5981|      1|        if (obase != NULL) {
  ------------------
  |  Branch (5981:13): [True: 0, False: 1]
  ------------------
 5982|      0|            PyErr_SetString(PyExc_TypeError,
 5983|      0|                            "int() missing string argument");
 5984|      0|            return NULL;
 5985|      0|        }
 5986|      1|        return PyLong_FromLong(0L);
 5987|      1|    }
 5988|       |    /* default base and limit, forward to standard implementation */
 5989|    248|    if (obase == NULL)
  ------------------
  |  Branch (5989:9): [True: 144, False: 104]
  ------------------
 5990|    144|        return PyNumber_Long(x);
 5991|       |
 5992|    104|    base = PyNumber_AsSsize_t(obase, NULL);
 5993|    104|    if (base == -1 && PyErr_Occurred())
  ------------------
  |  Branch (5993:9): [True: 0, False: 104]
  |  Branch (5993:23): [True: 0, False: 0]
  ------------------
 5994|      0|        return NULL;
 5995|    104|    if ((base != 0 && base < 2) || base > 36) {
  ------------------
  |  Branch (5995:10): [True: 104, False: 0]
  |  Branch (5995:23): [True: 0, False: 104]
  |  Branch (5995:36): [True: 0, False: 104]
  ------------------
 5996|      0|        PyErr_SetString(PyExc_ValueError,
 5997|      0|                        "int() base must be >= 2 and <= 36, or 0");
 5998|      0|        return NULL;
 5999|      0|    }
 6000|       |
 6001|    104|    if (PyUnicode_Check(x))
  ------------------
  |  |  103|    104|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    104|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 104]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6002|      0|        return PyLong_FromUnicodeObject(x, (int)base);
 6003|    104|    else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
  ------------------
  |  |   24|    104|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|    208|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 104, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6004|    104|        const char *string;
 6005|    104|        if (PyByteArray_Check(x))
  ------------------
  |  |   24|    104|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|    104|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 104, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6006|    104|            string = PyByteArray_AS_STRING(x);
  ------------------
  |  |   28|    104|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6007|      0|        else
 6008|      0|            string = PyBytes_AS_STRING(x);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6009|    104|        return _PyLong_FromBytes(string, Py_SIZE(x), (int)base);
  ------------------
  |  |  214|    104|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6010|    104|    }
 6011|      0|    else {
 6012|      0|        PyErr_SetString(PyExc_TypeError,
 6013|      0|                        "int() can't convert non-string with explicit base");
 6014|       |        return NULL;
 6015|      0|    }
 6016|    104|}
longobject.c:long_subtype_new:
 6025|    145|{
 6026|    145|    PyLongObject *tmp, *newobj;
 6027|    145|    Py_ssize_t size, ndigits;
 6028|    145|    int sign;
 6029|       |
 6030|    145|    assert(PyType_IsSubtype(type, &PyLong_Type));
  ------------------
  |  Branch (6030:5): [True: 145, False: 0]
  ------------------
 6031|    145|    tmp = (PyLongObject *)long_new_impl(&PyLong_Type, x, obase);
 6032|    145|    if (tmp == NULL)
  ------------------
  |  Branch (6032:9): [True: 0, False: 145]
  ------------------
 6033|      0|        return NULL;
 6034|    145|    assert(PyLong_Check(tmp));
  ------------------
  |  Branch (6034:5): [True: 145, False: 0]
  ------------------
 6035|    145|    size = _PyLong_DigitCount(tmp);
 6036|       |    /* Fast operations for single digit integers (including zero)
 6037|       |     * assume that there is always at least one digit present. */
 6038|    145|    ndigits = size ? size : 1;
  ------------------
  |  Branch (6038:15): [True: 140, False: 5]
  ------------------
 6039|    145|    newobj = (PyLongObject *)type->tp_alloc(type, ndigits);
 6040|    145|    if (newobj == NULL) {
  ------------------
  |  Branch (6040:9): [True: 0, False: 145]
  ------------------
 6041|      0|        Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6042|      0|        return NULL;
 6043|      0|    }
 6044|    145|    assert(PyLong_Check(newobj));
  ------------------
  |  Branch (6044:5): [True: 145, False: 0]
  ------------------
 6045|    145|    if (_PyLong_IsCompact(tmp)) {
  ------------------
  |  Branch (6045:9): [True: 144, False: 1]
  ------------------
 6046|    144|        sign = _PyLong_CompactSign(tmp);
 6047|    144|    }
 6048|      1|    else {
 6049|      1|        sign = _PyLong_NonCompactSign(tmp);
 6050|      1|    }
 6051|    145|    _PyLong_InitTag(newobj);
 6052|    145|    _PyLong_SetSignAndDigitCount(newobj, sign, size);
 6053|    145|    memcpy(newobj->long_value.ob_digit, tmp->long_value.ob_digit,
 6054|    145|           ndigits * sizeof(digit));
 6055|    145|    Py_DECREF(tmp);
  ------------------
  |  |  430|    145|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6056|    145|    return (PyObject *)newobj;
 6057|    145|}
longobject.c:long_vectorcall:
 6534|    868|{
 6535|    868|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    868|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 6536|    868|    if (kwnames != NULL) {
  ------------------
  |  Branch (6536:9): [True: 0, False: 868]
  ------------------
 6537|      0|        PyThreadState *tstate = PyThreadState_GET();
  ------------------
  |  |   63|      0|#define PyThreadState_GET() PyThreadState_Get()
  ------------------
 6538|      0|        return _PyObject_MakeTpCall(tstate, type, args, nargs, kwnames);
 6539|      0|    }
 6540|    868|    switch (nargs) {
 6541|      0|        case 0:
  ------------------
  |  Branch (6541:9): [True: 0, False: 868]
  ------------------
 6542|      0|            return _PyLong_GetZero();
 6543|    764|        case 1:
  ------------------
  |  Branch (6543:9): [True: 764, False: 104]
  ------------------
 6544|    764|            return PyNumber_Long(args[0]);
 6545|    104|        case 2:
  ------------------
  |  Branch (6545:9): [True: 104, False: 764]
  ------------------
 6546|    104|            return long_new_impl(_PyType_CAST(type), args[0], args[1]);
  ------------------
  |  |  770|    104|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (6546:34): [True: 104, False: 0]
  ------------------
 6547|      0|        default:
  ------------------
  |  Branch (6547:9): [True: 0, False: 868]
  ------------------
 6548|      0|            return PyErr_Format(PyExc_TypeError,
 6549|      0|                                "int expected at most 2 arguments, got %zd",
 6550|      0|                                nargs);
 6551|    868|    }
 6552|    868|}

PyMemoryView_FromBuffer:
  771|  72.1k|{
  772|  72.1k|    _PyManagedBufferObject *mbuf;
  773|  72.1k|    PyObject *mv;
  774|       |
  775|  72.1k|    if (info->buf == NULL) {
  ------------------
  |  Branch (775:9): [True: 0, False: 72.1k]
  ------------------
  776|      0|        PyErr_SetString(PyExc_ValueError,
  777|      0|            "PyMemoryView_FromBuffer(): info->buf must not be NULL");
  778|      0|        return NULL;
  779|      0|    }
  780|       |
  781|  72.1k|    mbuf = mbuf_alloc();
  782|  72.1k|    if (mbuf == NULL)
  ------------------
  |  Branch (782:9): [True: 0, False: 72.1k]
  ------------------
  783|      0|        return NULL;
  784|       |
  785|       |    /* info->obj is either NULL or a borrowed reference. This reference
  786|       |       should not be decremented in PyBuffer_Release(). */
  787|  72.1k|    mbuf->master = *info;
  788|  72.1k|    mbuf->master.obj = NULL;
  789|       |
  790|  72.1k|    mv = mbuf_add_view(mbuf, NULL);
  791|  72.1k|    Py_DECREF(mbuf);
  ------------------
  |  |  430|  72.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  72.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  792|       |
  793|  72.1k|    return mv;
  794|  72.1k|}
PyMemoryView_FromObject:
  855|     95|{
  856|     95|    return PyMemoryView_FromObjectAndFlags(v, PyBUF_FULL_RO);
  ------------------
  |  |  134|     95|#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  122|     95|#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|     95|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|     95|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  116|     95|#define PyBUF_FORMAT 0x0004
  |  |  ------------------
  ------------------
  857|     95|}
PyBuffer_ToContiguous:
 1050|  19.4k|{
 1051|  19.4k|    Py_buffer_full *fb = NULL;
 1052|  19.4k|    int ret;
 1053|       |
 1054|  19.4k|    assert(order == 'C' || order == 'F' || order == 'A');
  ------------------
  |  Branch (1054:5): [True: 19.4k, False: 0]
  |  Branch (1054:5): [True: 0, False: 0]
  |  Branch (1054:5): [True: 0, False: 0]
  ------------------
 1055|       |
 1056|  19.4k|    if (len != src->len) {
  ------------------
  |  Branch (1056:9): [True: 0, False: 19.4k]
  ------------------
 1057|      0|        PyErr_SetString(PyExc_ValueError,
 1058|      0|            "PyBuffer_ToContiguous: len != view->len");
 1059|      0|        return -1;
 1060|      0|    }
 1061|       |
 1062|  19.4k|    if (PyBuffer_IsContiguous(src, order)) {
  ------------------
  |  Branch (1062:9): [True: 19.4k, False: 0]
  ------------------
 1063|  19.4k|        memcpy((char *)buf, src->buf, len);
 1064|  19.4k|        return 0;
 1065|  19.4k|    }
 1066|       |
 1067|       |    /* buffer_to_contiguous() assumes PyBUF_FULL */
 1068|      0|    fb = PyMem_Malloc(sizeof *fb + 3 * src->ndim * (sizeof *fb->array));
 1069|      0|    if (fb == NULL) {
  ------------------
  |  Branch (1069:9): [True: 0, False: 0]
  ------------------
 1070|      0|        PyErr_NoMemory();
 1071|      0|        return -1;
 1072|      0|    }
 1073|      0|    fb->view.ndim = src->ndim;
 1074|      0|    fb->view.shape = fb->array;
 1075|      0|    fb->view.strides = fb->array + src->ndim;
 1076|      0|    fb->view.suboffsets = fb->array + 2 * src->ndim;
 1077|       |
 1078|      0|    init_shared_values(&fb->view, src);
 1079|      0|    init_shape_strides(&fb->view, src);
 1080|      0|    init_suboffsets(&fb->view, src);
 1081|       |
 1082|      0|    src = &fb->view;
 1083|       |
 1084|      0|    ret = buffer_to_contiguous(buf, src, order);
 1085|      0|    PyMem_Free(fb);
 1086|      0|    return ret;
 1087|      0|}
memoryobject.c:mbuf_dealloc:
  121|  72.2k|{
  122|  72.2k|    _PyManagedBufferObject *self = (_PyManagedBufferObject *)_self;
  123|  72.2k|    assert(self->exports == 0);
  ------------------
  |  Branch (123:5): [True: 72.2k, False: 0]
  ------------------
  124|  72.2k|    mbuf_release(self);
  125|  72.2k|    if (self->flags&_Py_MANAGED_BUFFER_FREE_FORMAT)
  ------------------
  |  |    9|  72.2k|#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002  /* free format */
  ------------------
  |  Branch (125:9): [True: 0, False: 72.2k]
  ------------------
  126|      0|        PyMem_Free(self->master.format);
  127|  72.2k|    PyObject_GC_Del(self);
  128|  72.2k|}
memoryobject.c:mbuf_release:
  108|   144k|{
  109|   144k|    if (self->flags&_Py_MANAGED_BUFFER_RELEASED)
  ------------------
  |  |    8|   144k|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  ------------------
  |  Branch (109:9): [True: 72.2k, False: 72.2k]
  ------------------
  110|  72.2k|        return;
  111|       |
  112|  72.2k|    self->flags |= _Py_MANAGED_BUFFER_RELEASED;
  ------------------
  |  |    8|  72.2k|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  ------------------
  113|       |
  114|       |    /* PyBuffer_Release() decrements master->obj and sets it to NULL. */
  115|  72.2k|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|  72.2k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  72.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|  72.2k|    PyBuffer_Release(&self->master);
  117|  72.2k|}
memoryobject.c:mbuf_traverse:
  132|     20|{
  133|     20|    _PyManagedBufferObject *self = (_PyManagedBufferObject *)_self;
  134|     20|    Py_VISIT(self->master.obj);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2, False: 18]
  |  |  ------------------
  |  |  196|      2|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      2|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  198|      2|                return vret;                                            \
  |  |  199|      2|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
  135|     20|    return 0;
  136|     20|}
memoryobject.c:mbuf_alloc:
   73|  72.2k|{
   74|  72.2k|    _PyManagedBufferObject *mbuf;
   75|       |
   76|  72.2k|    mbuf = (_PyManagedBufferObject *)
   77|  72.2k|        PyObject_GC_New(_PyManagedBufferObject, &_PyManagedBuffer_Type);
  ------------------
  |  |  181|  72.2k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  72.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   78|  72.2k|    if (mbuf == NULL)
  ------------------
  |  Branch (78:9): [True: 0, False: 72.2k]
  ------------------
   79|      0|        return NULL;
   80|  72.2k|    mbuf->flags = 0;
   81|  72.2k|    mbuf->exports = 0;
   82|  72.2k|    mbuf->master.obj = NULL;
   83|  72.2k|    _PyObject_GC_TRACK(mbuf);
  ------------------
  |  |  505|  72.2k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  72.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|       |
   85|  72.2k|    return mbuf;
   86|  72.2k|}
memoryobject.c:mbuf_add_view:
  677|  72.3k|{
  678|  72.3k|    PyMemoryViewObject *mv;
  679|  72.3k|    Py_buffer *dest;
  680|       |
  681|  72.3k|    if (src == NULL)
  ------------------
  |  Branch (681:9): [True: 72.2k, False: 93]
  ------------------
  682|  72.2k|        src = &mbuf->master;
  683|       |
  684|  72.3k|    if (src->ndim > PyBUF_MAX_NDIM) {
  ------------------
  |  |  105|  72.3k|#define PyBUF_MAX_NDIM 64
  ------------------
  |  Branch (684:9): [True: 0, False: 72.3k]
  ------------------
  685|      0|        PyErr_SetString(PyExc_ValueError,
  686|      0|            "memoryview: number of dimensions must not exceed "
  687|      0|            Py_STRINGIFY(PyBUF_MAX_NDIM));
  ------------------
  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  ------------------
  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  ------------------
  ------------------
  688|      0|        return NULL;
  689|      0|    }
  690|       |
  691|  72.3k|    mv = memory_alloc(src->ndim);
  692|  72.3k|    if (mv == NULL)
  ------------------
  |  Branch (692:9): [True: 0, False: 72.3k]
  ------------------
  693|      0|        return NULL;
  694|       |
  695|  72.3k|    dest = &mv->view;
  696|  72.3k|    init_shared_values(dest, src);
  697|  72.3k|    init_shape_strides(dest, src);
  698|  72.3k|    init_suboffsets(dest, src);
  699|  72.3k|    init_flags(mv);
  700|       |
  701|  72.3k|    mv->mbuf = (_PyManagedBufferObject*)Py_NewRef(mbuf);
  ------------------
  |  |  550|  72.3k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  72.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|  72.3k|    mbuf->exports++;
  703|       |
  704|  72.3k|    return (PyObject *)mv;
  705|  72.3k|}
memoryobject.c:memory_alloc:
  645|  72.3k|{
  646|  72.3k|    PyMemoryViewObject *mv;
  647|       |
  648|  72.3k|    mv = (PyMemoryViewObject *)
  649|  72.3k|        PyObject_GC_NewVar(PyMemoryViewObject, &PyMemoryView_Type, 3*ndim);
  ------------------
  |  |  183|  72.3k|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|  72.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  650|  72.3k|    if (mv == NULL)
  ------------------
  |  Branch (650:9): [True: 0, False: 72.3k]
  ------------------
  651|      0|        return NULL;
  652|       |
  653|  72.3k|    mv->mbuf = NULL;
  654|  72.3k|    mv->hash = -1;
  655|  72.3k|    mv->flags = 0;
  656|  72.3k|    mv->exports = 0;
  657|  72.3k|    mv->view.ndim = ndim;
  658|  72.3k|    mv->view.shape = mv->ob_array;
  659|  72.3k|    mv->view.strides = mv->ob_array + ndim;
  660|  72.3k|    mv->view.suboffsets = mv->ob_array + 2 * ndim;
  661|  72.3k|    mv->weakreflist = NULL;
  662|       |
  663|  72.3k|    _PyObject_GC_TRACK(mv);
  ------------------
  |  |  505|  72.3k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  72.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  664|  72.3k|    return mv;
  665|  72.3k|}
memoryobject.c:init_flags:
  612|  72.4k|{
  613|  72.4k|    const Py_buffer *view = &mv->view;
  614|  72.4k|    int flags = 0;
  615|       |
  616|  72.4k|    switch (view->ndim) {
  617|      0|    case 0:
  ------------------
  |  Branch (617:5): [True: 0, False: 72.4k]
  ------------------
  618|      0|        flags |= (_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C|
  ------------------
  |  |   23|      0|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  ------------------
                      flags |= (_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C|
  ------------------
  |  |   21|      0|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  ------------------
  619|      0|                  _Py_MEMORYVIEW_FORTRAN);
  ------------------
  |  |   22|      0|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  ------------------
  620|      0|        break;
  621|  72.4k|    case 1:
  ------------------
  |  Branch (621:5): [True: 72.4k, False: 0]
  ------------------
  622|  72.4k|        if (MV_CONTIGUOUS_NDIM1(view))
  ------------------
  |  |  241|  72.4k|    ((view)->shape[0] == 1 || (view)->strides[0] == (view)->itemsize)
  |  |  ------------------
  |  |  |  Branch (241:6): [True: 7, False: 72.4k]
  |  |  |  Branch (241:31): [True: 72.4k, False: 0]
  |  |  ------------------
  ------------------
  623|  72.4k|            flags |= (_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN);
  ------------------
  |  |   21|  72.4k|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  ------------------
                          flags |= (_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN);
  ------------------
  |  |   22|  72.4k|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  ------------------
  624|  72.4k|        break;
  625|      0|    default:
  ------------------
  |  Branch (625:5): [True: 0, False: 72.4k]
  ------------------
  626|      0|        if (PyBuffer_IsContiguous(view, 'C'))
  ------------------
  |  Branch (626:13): [True: 0, False: 0]
  ------------------
  627|      0|            flags |= _Py_MEMORYVIEW_C;
  ------------------
  |  |   21|      0|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  ------------------
  628|      0|        if (PyBuffer_IsContiguous(view, 'F'))
  ------------------
  |  Branch (628:13): [True: 0, False: 0]
  ------------------
  629|      0|            flags |= _Py_MEMORYVIEW_FORTRAN;
  ------------------
  |  |   22|      0|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  ------------------
  630|      0|        break;
  631|  72.4k|    }
  632|       |
  633|  72.4k|    if (view->suboffsets) {
  ------------------
  |  Branch (633:9): [True: 0, False: 72.4k]
  ------------------
  634|      0|        flags |= _Py_MEMORYVIEW_PIL;
  ------------------
  |  |   24|      0|#define _Py_MEMORYVIEW_PIL         0x010  /* PIL-style layout */
  ------------------
  635|      0|        flags &= ~(_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN);
  ------------------
  |  |   21|      0|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  ------------------
                      flags &= ~(_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN);
  ------------------
  |  |   22|      0|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  ------------------
  636|      0|    }
  637|       |
  638|  72.4k|    mv->flags = flags;
  639|  72.4k|}
memoryobject.c:PyMemoryView_FromObjectAndFlags:
  802|     95|{
  803|     95|    _PyManagedBufferObject *mbuf;
  804|       |
  805|     95|    if (PyMemoryView_Check(v)) {
  ------------------
  |  |   11|     95|#define PyMemoryView_Check(op) Py_IS_TYPE((op), &PyMemoryView_Type)
  |  |  ------------------
  |  |  |  |  215|     95|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 95]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  806|      0|        PyMemoryViewObject *mv = (PyMemoryViewObject *)v;
  807|      0|        CHECK_RELEASED(mv);
  ------------------
  |  |  185|      0|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|      0|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  182|      0|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|      0|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  186|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  187|      0|            "operation forbidden on released memoryview object"); \
  |  |  188|      0|        return NULL;                                              \
  |  |  189|      0|    }
  ------------------
  808|      0|        CHECK_RESTRICTED(mv);
  ------------------
  |  |  199|      0|    if (((PyMemoryViewObject *)(mv))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
  |  |  ------------------
  |  |  |  |   25|      0|#define _Py_MEMORYVIEW_RESTRICTED  0x020  /* Disallow new references to the memoryview's buffer */
  |  |  ------------------
  |  |  |  Branch (199:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  200|      0|        PyErr_SetString(PyExc_ValueError,                                  \
  |  |  201|      0|            "cannot create new view on restricted memoryview");            \
  |  |  202|      0|        return NULL;                                                       \
  |  |  203|      0|    }
  ------------------
  809|      0|        return mbuf_add_view(mv->mbuf, &mv->view);
  810|      0|    }
  811|     95|    else if (PyObject_CheckBuffer(v)) {
  ------------------
  |  Branch (811:14): [True: 95, False: 0]
  ------------------
  812|     95|        PyObject *ret;
  813|     95|        mbuf = (_PyManagedBufferObject *)_PyManagedBuffer_FromObject(v, flags);
  814|     95|        if (mbuf == NULL)
  ------------------
  |  Branch (814:13): [True: 0, False: 95]
  ------------------
  815|      0|            return NULL;
  816|     95|        ret = mbuf_add_view(mbuf, NULL);
  817|     95|        Py_DECREF(mbuf);
  ------------------
  |  |  430|     95|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  818|     95|        return ret;
  819|     95|    }
  820|       |
  821|      0|    PyErr_Format(PyExc_TypeError,
  822|      0|        "memoryview: a bytes-like object is required, not '%.200s'",
  823|      0|        Py_TYPE(v)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  824|       |    return NULL;
  825|     95|}
memoryobject.c:_PyManagedBuffer_FromObject:
   90|     95|{
   91|     95|    _PyManagedBufferObject *mbuf;
   92|       |
   93|     95|    mbuf = mbuf_alloc();
   94|     95|    if (mbuf == NULL)
  ------------------
  |  Branch (94:9): [True: 0, False: 95]
  ------------------
   95|      0|        return NULL;
   96|       |
   97|     95|    if (PyObject_GetBuffer(base, &mbuf->master, flags) < 0) {
  ------------------
  |  Branch (97:9): [True: 0, False: 95]
  ------------------
   98|      0|        mbuf->master.obj = NULL;
   99|      0|        Py_DECREF(mbuf);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|      0|        return NULL;
  101|      0|    }
  102|       |
  103|     95|    return (PyObject *)mbuf;
  104|     95|}
memoryobject.c:mbuf_add_incomplete_view:
  715|      2|{
  716|      2|    PyMemoryViewObject *mv;
  717|      2|    Py_buffer *dest;
  718|       |
  719|      2|    if (src == NULL)
  ------------------
  |  Branch (719:9): [True: 0, False: 2]
  ------------------
  720|      0|        src = &mbuf->master;
  721|       |
  722|      2|    assert(ndim <= PyBUF_MAX_NDIM);
  ------------------
  |  Branch (722:5): [True: 2, False: 0]
  ------------------
  723|       |
  724|      2|    mv = memory_alloc(ndim);
  725|      2|    if (mv == NULL)
  ------------------
  |  Branch (725:9): [True: 0, False: 2]
  ------------------
  726|      0|        return NULL;
  727|       |
  728|      2|    dest = &mv->view;
  729|      2|    init_shared_values(dest, src);
  730|       |
  731|      2|    mv->mbuf = (_PyManagedBufferObject*)Py_NewRef(mbuf);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|      2|    mbuf->exports++;
  733|       |
  734|      2|    return (PyObject *)mv;
  735|      2|}
memoryobject.c:init_shared_values:
  544|  72.3k|{
  545|  72.3k|    dest->obj = src->obj;
  546|  72.3k|    dest->buf = src->buf;
  547|  72.3k|    dest->len = src->len;
  548|  72.3k|    dest->itemsize = src->itemsize;
  549|  72.3k|    dest->readonly = src->readonly;
  550|  72.3k|    dest->format = src->format ? src->format : "B";
  ------------------
  |  Branch (550:20): [True: 23.8k, False: 48.4k]
  ------------------
  551|  72.3k|    dest->internal = src->internal;
  552|  72.3k|}
memoryobject.c:init_shape_strides:
  557|  72.3k|{
  558|  72.3k|    Py_ssize_t i;
  559|       |
  560|  72.3k|    if (src->ndim == 0) {
  ------------------
  |  Branch (560:9): [True: 0, False: 72.3k]
  ------------------
  561|      0|        dest->shape = NULL;
  562|      0|        dest->strides = NULL;
  563|      0|        return;
  564|      0|    }
  565|  72.3k|    if (src->ndim == 1) {
  ------------------
  |  Branch (565:9): [True: 72.3k, False: 0]
  ------------------
  566|  72.3k|        dest->shape[0] = src->shape ? src->shape[0] : src->len / src->itemsize;
  ------------------
  |  Branch (566:26): [True: 72.3k, False: 0]
  ------------------
  567|  72.3k|        dest->strides[0] = src->strides ? src->strides[0] : src->itemsize;
  ------------------
  |  Branch (567:28): [True: 23.8k, False: 48.4k]
  ------------------
  568|  72.3k|        return;
  569|  72.3k|    }
  570|       |
  571|      0|    for (i = 0; i < src->ndim; i++)
  ------------------
  |  Branch (571:17): [True: 0, False: 0]
  ------------------
  572|      0|        dest->shape[i] = src->shape[i];
  573|      0|    if (src->strides) {
  ------------------
  |  Branch (573:9): [True: 0, False: 0]
  ------------------
  574|      0|        for (i = 0; i < src->ndim; i++)
  ------------------
  |  Branch (574:21): [True: 0, False: 0]
  ------------------
  575|      0|            dest->strides[i] = src->strides[i];
  576|      0|    }
  577|      0|    else {
  578|      0|        init_strides_from_shape(dest);
  579|      0|    }
  580|      0|}
memoryobject.c:init_suboffsets:
  584|  72.3k|{
  585|  72.3k|    Py_ssize_t i;
  586|       |
  587|  72.3k|    if (src->suboffsets == NULL) {
  ------------------
  |  Branch (587:9): [True: 72.3k, False: 0]
  ------------------
  588|  72.3k|        dest->suboffsets = NULL;
  589|  72.3k|        return;
  590|  72.3k|    }
  591|      0|    for (i = 0; i < src->ndim; i++)
  ------------------
  |  Branch (591:17): [True: 0, False: 0]
  ------------------
  592|      0|        dest->suboffsets[i] = src->suboffsets[i];
  593|      0|}
memoryobject.c:unpack_single:
 1823|    128|{
 1824|    128|    unsigned long long llu;
 1825|    128|    unsigned long lu;
 1826|    128|    size_t zu;
 1827|    128|    long long lld;
 1828|    128|    long ld;
 1829|    128|    Py_ssize_t zd;
 1830|    128|    double d[2];
 1831|    128|    unsigned char uc;
 1832|    128|    void *p;
 1833|       |
 1834|    128|    CHECK_RELEASED_AGAIN(self);
  ------------------
  |  |  214|    128|#define CHECK_RELEASED_AGAIN(mv) CHECK_RELEASED(mv)
  |  |  ------------------
  |  |  |  |  185|    128|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  181|    128|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|    256|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (181:6): [True: 0, False: 128]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  182|    128|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    8|    128|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:6): [True: 0, False: 128]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  |  |  187|      0|            "operation forbidden on released memoryview object"); \
  |  |  |  |  188|      0|        return NULL;                                              \
  |  |  |  |  189|      0|    }
  |  |  ------------------
  ------------------
 1835|       |
 1836|    128|#if PY_LITTLE_ENDIAN
 1837|    128|    int endian = 1;
 1838|       |#else
 1839|       |    int endian = 0;
 1840|       |#endif
 1841|       |
 1842|    128|    switch (fmt[0]) {
 1843|       |
 1844|       |    /* signed integers and fast path for 'B' */
 1845|      0|    case 'B': uc = *((const unsigned char *)ptr); goto convert_uc;
  ------------------
  |  Branch (1845:5): [True: 0, False: 128]
  ------------------
 1846|      0|    case 'b': ld =   *((const signed char *)ptr); goto convert_ld;
  ------------------
  |  Branch (1846:5): [True: 0, False: 128]
  ------------------
 1847|      0|    case 'h': UNPACK_SINGLE(ld, ptr, short); goto convert_ld;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1847:5): [True: 0, False: 128]
  ------------------
 1848|      0|    case 'i': UNPACK_SINGLE(ld, ptr, int); goto convert_ld;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1848:5): [True: 0, False: 128]
  ------------------
 1849|      0|    case 'l': UNPACK_SINGLE(ld, ptr, long); goto convert_ld;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1849:5): [True: 0, False: 128]
  ------------------
 1850|       |
 1851|       |    /* boolean */
 1852|      0|    case '?': ld = UNPACK_TO_BOOL(ptr); goto convert_bool;
  ------------------
  |  | 1715|      0|#define UNPACK_TO_BOOL(PTR) (memcmp((PTR), &bool_false, sizeof(_Bool)) != 0)
  ------------------
  |  Branch (1852:5): [True: 0, False: 128]
  ------------------
 1853|       |
 1854|       |    /* unsigned integers */
 1855|      0|    case 'H': UNPACK_SINGLE(lu, ptr, unsigned short); goto convert_lu;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1855:5): [True: 0, False: 128]
  ------------------
 1856|    128|    case 'I': UNPACK_SINGLE(lu, ptr, unsigned int); goto convert_lu;
  ------------------
  |  | 1812|    128|    do {                                   \
  |  | 1813|    128|        type x;                            \
  |  | 1814|    128|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|    128|        dest = x;                          \
  |  | 1816|    128|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 128]
  |  |  ------------------
  ------------------
  |  Branch (1856:5): [True: 128, False: 0]
  ------------------
 1857|      0|    case 'L': UNPACK_SINGLE(lu, ptr, unsigned long); goto convert_lu;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1857:5): [True: 0, False: 128]
  ------------------
 1858|       |
 1859|       |    /* native 64-bit */
 1860|      0|    case 'q': UNPACK_SINGLE(lld, ptr, long long); goto convert_lld;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1860:5): [True: 0, False: 128]
  ------------------
 1861|      0|    case 'Q': UNPACK_SINGLE(llu, ptr, unsigned long long); goto convert_llu;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1861:5): [True: 0, False: 128]
  ------------------
 1862|       |
 1863|       |    /* ssize_t and size_t */
 1864|      0|    case 'n': UNPACK_SINGLE(zd, ptr, Py_ssize_t); goto convert_zd;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1864:5): [True: 0, False: 128]
  ------------------
 1865|      0|    case 'N': UNPACK_SINGLE(zu, ptr, size_t); goto convert_zu;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1865:5): [True: 0, False: 128]
  ------------------
 1866|       |
 1867|       |    /* floats */
 1868|      0|    case 'f': UNPACK_SINGLE(d[0], ptr, float); goto convert_double;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1868:5): [True: 0, False: 128]
  ------------------
 1869|      0|    case 'd': UNPACK_SINGLE(d[0], ptr, double); goto convert_double;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1869:5): [True: 0, False: 128]
  ------------------
 1870|      0|    case 'e': d[0] = PyFloat_Unpack2(ptr, endian); goto convert_double;
  ------------------
  |  Branch (1870:5): [True: 0, False: 128]
  ------------------
 1871|       |
 1872|       |    /* complexes */
 1873|      0|    case 'Z': {
  ------------------
  |  Branch (1873:5): [True: 0, False: 128]
  ------------------
 1874|      0|        switch (fmt[1]) {
 1875|      0|        case 'f':
  ------------------
  |  Branch (1875:9): [True: 0, False: 0]
  ------------------
 1876|      0|            d[0] = PyFloat_Unpack4(ptr, endian);
 1877|      0|            d[1] = PyFloat_Unpack4(ptr + sizeof(float), endian);
 1878|      0|            goto convert_double_complex;
 1879|       |
 1880|      0|        case 'd':
  ------------------
  |  Branch (1880:9): [True: 0, False: 0]
  ------------------
 1881|      0|            d[0] = PyFloat_Unpack8(ptr, endian);
 1882|      0|            d[1] = PyFloat_Unpack8(ptr + sizeof(double), endian);
 1883|      0|            goto convert_double_complex;
 1884|       |
 1885|      0|        default: goto err_format;
  ------------------
  |  Branch (1885:9): [True: 0, False: 0]
  ------------------
 1886|      0|        }
 1887|      0|        break;
 1888|      0|    }
 1889|       |
 1890|       |    /* bytes object */
 1891|      0|    case 'c': goto convert_bytes;
  ------------------
  |  Branch (1891:5): [True: 0, False: 128]
  ------------------
 1892|       |
 1893|       |    /* pointer */
 1894|      0|    case 'P': UNPACK_SINGLE(p, ptr, void *); goto convert_pointer;
  ------------------
  |  | 1812|      0|    do {                                   \
  |  | 1813|      0|        type x;                            \
  |  | 1814|      0|        memcpy((char *)&x, ptr, sizeof x); \
  |  | 1815|      0|        dest = x;                          \
  |  | 1816|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1816:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1894:5): [True: 0, False: 128]
  ------------------
 1895|       |
 1896|       |    /* default */
 1897|      0|    default: goto err_format;
  ------------------
  |  Branch (1897:5): [True: 0, False: 128]
  ------------------
 1898|    128|    }
 1899|       |
 1900|      0|convert_uc:
 1901|       |    /* PyLong_FromUnsignedLong() is slower */
 1902|      0|    return PyLong_FromLong(uc);
 1903|      0|convert_ld:
 1904|      0|    return PyLong_FromLong(ld);
 1905|    128|convert_lu:
 1906|    128|    return PyLong_FromUnsignedLong(lu);
 1907|      0|convert_lld:
 1908|      0|    return PyLong_FromLongLong(lld);
 1909|      0|convert_llu:
 1910|      0|    return PyLong_FromUnsignedLongLong(llu);
 1911|      0|convert_zd:
 1912|      0|    return PyLong_FromSsize_t(zd);
 1913|      0|convert_zu:
 1914|      0|    return PyLong_FromSize_t(zu);
 1915|      0|convert_double:
 1916|      0|    return PyFloat_FromDouble(d[0]);
 1917|      0|convert_double_complex:
 1918|      0|    return PyComplex_FromDoubles(d[0], d[1]);
 1919|      0|convert_bool:
 1920|      0|    return PyBool_FromLong(ld);
 1921|      0|convert_bytes:
 1922|      0|    return PyBytes_FromStringAndSize(ptr, 1);
 1923|      0|convert_pointer:
 1924|      0|    return PyLong_FromVoidPtr(p);
 1925|      0|err_format:
 1926|      0|    PyErr_Format(PyExc_NotImplementedError,
 1927|      0|        "memoryview: format %s not supported", fmt);
 1928|       |    return NULL;
 1929|    128|}
memoryobject.c:memory_dealloc:
 1152|  72.3k|{
 1153|  72.3k|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 1154|  72.3k|    assert(get_exports(self) == 0);
  ------------------
  |  Branch (1154:5): [True: 72.3k, False: 0]
  ------------------
 1155|  72.3k|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|  72.3k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  72.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1156|  72.3k|    _memory_release(self);
 1157|  72.3k|    Py_CLEAR(self->mbuf);
  ------------------
  |  |  484|  72.3k|    do { \
  |  |  485|  72.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  72.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  72.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  72.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  72.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  72.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 72.3k, False: 0]
  |  |  ------------------
  |  |  488|  72.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  72.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  72.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  72.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  72.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  72.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  72.3k|        } \
  |  |  491|  72.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 72.3k]
  |  |  ------------------
  ------------------
 1158|  72.3k|    if (self->weakreflist != NULL)
  ------------------
  |  Branch (1158:9): [True: 0, False: 72.3k]
  ------------------
 1159|      0|        PyObject_ClearWeakRefs((PyObject *) self);
 1160|  72.3k|    PyObject_GC_Del(self);
 1161|  72.3k|}
memoryobject.c:get_exports:
 1091|   144k|{
 1092|       |#ifdef Py_GIL_DISABLED
 1093|       |    return _Py_atomic_load_ssize_relaxed(&buf->exports);
 1094|       |#else
 1095|   144k|    return buf->exports;
 1096|   144k|#endif
 1097|   144k|}
memoryobject.c:_memory_release:
 1110|  72.3k|{
 1111|  72.3k|    assert(get_exports(self) == 0);
  ------------------
  |  Branch (1111:5): [True: 72.3k, False: 0]
  ------------------
 1112|  72.3k|    if (self->flags & _Py_MEMORYVIEW_RELEASED)
  ------------------
  |  |   20|  72.3k|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  ------------------
  |  Branch (1112:9): [True: 0, False: 72.3k]
  ------------------
 1113|      0|        return;
 1114|       |
 1115|  72.3k|    self->flags |= _Py_MEMORYVIEW_RELEASED;
  ------------------
  |  |   20|  72.3k|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  ------------------
 1116|  72.3k|    assert(self->mbuf->exports > 0);
  ------------------
  |  Branch (1116:5): [True: 72.3k, False: 0]
  ------------------
 1117|  72.3k|    if (--self->mbuf->exports == 0) {
  ------------------
  |  Branch (1117:9): [True: 72.2k, False: 95]
  ------------------
 1118|  72.2k|        mbuf_release(self->mbuf);
 1119|  72.2k|    }
 1120|  72.3k|}
memoryobject.c:memory_length:
 2852|  19.2k|{
 2853|  19.2k|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 2854|  19.2k|    CHECK_RELEASED_INT(self);
  ------------------
  |  |  192|  19.2k|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|  19.2k|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  38.4k|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 19.2k]
  |  |  |  |  ------------------
  |  |  |  |  182|  19.2k|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|  19.2k|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 19.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  194|      0|            "operation forbidden on released memoryview object"); \
  |  |  195|      0|        return -1;                                                \
  |  |  196|      0|    }
  ------------------
 2855|  19.2k|    if (self->view.ndim == 0) {
  ------------------
  |  Branch (2855:9): [True: 0, False: 19.2k]
  ------------------
 2856|      0|        PyErr_SetString(PyExc_TypeError, "0-dim memory has no length");
 2857|      0|        return -1;
 2858|      0|    }
 2859|  19.2k|    return self->view.shape[0];
 2860|  19.2k|}
memoryobject.c:adjust_fmt:
 2255|      2|{
 2256|      2|    const char *fmt;
 2257|       |
 2258|      2|    fmt = (view->format[0] == '@') ? view->format+1 : view->format;
  ------------------
  |  Branch (2258:11): [True: 0, False: 2]
  ------------------
 2259|      2|    if (fmt[0] == 'Z' && fmt[1] && fmt[2] == '\0')
  ------------------
  |  Branch (2259:9): [True: 0, False: 2]
  |  Branch (2259:26): [True: 0, False: 0]
  |  Branch (2259:36): [True: 0, False: 0]
  ------------------
 2260|      0|        return fmt;
 2261|      2|    if (fmt[0] && fmt[1] == '\0')
  ------------------
  |  Branch (2261:9): [True: 2, False: 0]
  |  Branch (2261:19): [True: 2, False: 0]
  ------------------
 2262|      2|        return fmt;
 2263|       |
 2264|      0|    PyErr_Format(PyExc_NotImplementedError,
 2265|      0|        "memoryview: unsupported format %s", view->format);
 2266|       |    return NULL;
 2267|      2|}
memoryobject.c:memory_subscript:
 2686|     93|{
 2687|     93|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 2688|     93|    Py_buffer *view;
 2689|     93|    view = &(self->view);
 2690|       |
 2691|     93|    CHECK_RELEASED(self);
  ------------------
  |  |  185|     93|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|     93|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|    186|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  |  |  182|     93|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|     93|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  186|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  187|      0|            "operation forbidden on released memoryview object"); \
  |  |  188|      0|        return NULL;                                              \
  |  |  189|      0|    }
  ------------------
 2692|       |
 2693|     93|    if (view->ndim == 0) {
  ------------------
  |  Branch (2693:9): [True: 0, False: 93]
  ------------------
 2694|      0|        if (PyTuple_Check(key) && PyTuple_GET_SIZE(key) == 0) {
  ------------------
  |  |   27|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PyTuple_Check(key) && PyTuple_GET_SIZE(key) == 0) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2694:35): [True: 0, False: 0]
  ------------------
 2695|      0|            const char *fmt = adjust_fmt(view);
 2696|      0|            if (fmt == NULL)
  ------------------
  |  Branch (2696:17): [True: 0, False: 0]
  ------------------
 2697|      0|                return NULL;
 2698|      0|            return unpack_single(self, view->buf, fmt);
 2699|      0|        }
 2700|      0|        else if (key == Py_Ellipsis) {
  ------------------
  |  |   14|      0|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (2700:18): [True: 0, False: 0]
  ------------------
 2701|      0|            return Py_NewRef(self);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2702|      0|        }
 2703|      0|        else {
 2704|      0|            PyErr_SetString(PyExc_TypeError,
 2705|      0|                "invalid indexing of 0-dim memory");
 2706|      0|            return NULL;
 2707|      0|        }
 2708|      0|    }
 2709|       |
 2710|     93|    if (_PyIndex_Check(key)) {
  ------------------
  |  Branch (2710:9): [True: 0, False: 93]
  ------------------
 2711|      0|        Py_ssize_t index;
 2712|      0|        index = PyNumber_AsSsize_t(key, PyExc_IndexError);
 2713|      0|        if (index == -1 && PyErr_Occurred())
  ------------------
  |  Branch (2713:13): [True: 0, False: 0]
  |  Branch (2713:28): [True: 0, False: 0]
  ------------------
 2714|      0|            return NULL;
 2715|      0|        return memory_item((PyObject *)self, index);
 2716|      0|    }
 2717|     93|    else if (PySlice_Check(key)) {
  ------------------
  |  |   22|     93|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|     93|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 93, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2718|     93|        CHECK_RESTRICTED(self);
  ------------------
  |  |  199|     93|    if (((PyMemoryViewObject *)(mv))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
  |  |  ------------------
  |  |  |  |   25|     93|#define _Py_MEMORYVIEW_RESTRICTED  0x020  /* Disallow new references to the memoryview's buffer */
  |  |  ------------------
  |  |  |  Branch (199:9): [True: 0, False: 93]
  |  |  ------------------
  |  |  200|      0|        PyErr_SetString(PyExc_ValueError,                                  \
  |  |  201|      0|            "cannot create new view on restricted memoryview");            \
  |  |  202|      0|        return NULL;                                                       \
  |  |  203|      0|    }
  ------------------
 2719|     93|        PyMemoryViewObject *sliced;
 2720|       |
 2721|     93|        sliced = (PyMemoryViewObject *)mbuf_add_view(self->mbuf, view);
 2722|     93|        if (sliced == NULL)
  ------------------
  |  Branch (2722:13): [True: 0, False: 93]
  ------------------
 2723|      0|            return NULL;
 2724|       |
 2725|     93|        if (init_slice(&sliced->view, key, 0) < 0) {
  ------------------
  |  Branch (2725:13): [True: 0, False: 93]
  ------------------
 2726|      0|            Py_DECREF(sliced);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2727|      0|            return NULL;
 2728|      0|        }
 2729|     93|        init_len(&sliced->view);
 2730|     93|        init_flags(sliced);
 2731|       |
 2732|     93|        return (PyObject *)sliced;
 2733|     93|    }
 2734|      0|    else if (is_multiindex(key)) {
  ------------------
  |  Branch (2734:14): [True: 0, False: 0]
  ------------------
 2735|      0|        return memory_item_multi(self, key);
 2736|      0|    }
 2737|      0|    else if (is_multislice(key)) {
  ------------------
  |  Branch (2737:14): [True: 0, False: 0]
  ------------------
 2738|      0|        PyErr_SetString(PyExc_NotImplementedError,
 2739|      0|            "multi-dimensional slicing is not implemented");
 2740|      0|        return NULL;
 2741|      0|    }
 2742|       |
 2743|      0|    PyErr_SetString(PyExc_TypeError, "memoryview: invalid slice key");
 2744|       |    return NULL;
 2745|     93|}
memoryobject.c:init_slice:
 2615|     93|{
 2616|     93|    Py_ssize_t start, stop, step, slicelength;
 2617|       |
 2618|     93|    if (PySlice_Unpack(key, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (2618:9): [True: 0, False: 93]
  ------------------
 2619|      0|        return -1;
 2620|      0|    }
 2621|     93|    slicelength = PySlice_AdjustIndices(base->shape[dim], &start, &stop, step);
 2622|       |
 2623|       |
 2624|     93|    if (base->suboffsets == NULL || dim == 0) {
  ------------------
  |  Branch (2624:9): [True: 93, False: 0]
  |  Branch (2624:37): [True: 0, False: 0]
  ------------------
 2625|     93|    adjust_buf:
 2626|     93|        base->buf = (char *)base->buf + base->strides[dim] * start;
 2627|     93|    }
 2628|      0|    else {
 2629|      0|        Py_ssize_t n = dim-1;
 2630|      0|        while (n >= 0 && base->suboffsets[n] < 0)
  ------------------
  |  Branch (2630:16): [True: 0, False: 0]
  |  Branch (2630:26): [True: 0, False: 0]
  ------------------
 2631|      0|            n--;
 2632|      0|        if (n < 0)
  ------------------
  |  Branch (2632:13): [True: 0, False: 0]
  ------------------
 2633|      0|            goto adjust_buf; /* all suboffsets are negative */
 2634|      0|        base->suboffsets[n] = base->suboffsets[n] + base->strides[dim] * start;
 2635|      0|    }
 2636|     93|    base->shape[dim] = slicelength;
 2637|     93|    base->strides[dim] = base->strides[dim] * step;
 2638|       |
 2639|     93|    return 0;
 2640|     93|}
memoryobject.c:init_len:
  598|     93|{
  599|     93|    Py_ssize_t i, len;
  600|       |
  601|     93|    len = 1;
  602|    186|    for (i = 0; i < view->ndim; i++)
  ------------------
  |  Branch (602:17): [True: 93, False: 93]
  ------------------
  603|     93|        len *= view->shape[i];
  604|     93|    len *= view->itemsize;
  605|       |
  606|     93|    view->len = len;
  607|     93|}
memoryobject.c:get_native_fmtchar:
 1205|      4|{
 1206|      4|    Py_ssize_t size = -1;
 1207|       |
 1208|      4|    if (fmt[0] == '@') fmt++;
  ------------------
  |  Branch (1208:9): [True: 0, False: 4]
  ------------------
 1209|       |
 1210|      4|    switch (fmt[0]) {
  ------------------
  |  Branch (1210:13): [True: 4, False: 0]
  ------------------
 1211|      2|    case 'c': case 'b': case 'B': size = sizeof(char); break;
  ------------------
  |  Branch (1211:5): [True: 0, False: 4]
  |  Branch (1211:15): [True: 0, False: 4]
  |  Branch (1211:25): [True: 2, False: 2]
  ------------------
 1212|      0|    case 'h': case 'H': size = sizeof(short); break;
  ------------------
  |  Branch (1212:5): [True: 0, False: 4]
  |  Branch (1212:15): [True: 0, False: 4]
  ------------------
 1213|      2|    case 'i': case 'I': size = sizeof(int); break;
  ------------------
  |  Branch (1213:5): [True: 0, False: 4]
  |  Branch (1213:15): [True: 2, False: 2]
  ------------------
 1214|      0|    case 'l': case 'L': size = sizeof(long); break;
  ------------------
  |  Branch (1214:5): [True: 0, False: 4]
  |  Branch (1214:15): [True: 0, False: 4]
  ------------------
 1215|      0|    case 'q': case 'Q': size = sizeof(long long); break;
  ------------------
  |  Branch (1215:5): [True: 0, False: 4]
  |  Branch (1215:15): [True: 0, False: 4]
  ------------------
 1216|      0|    case 'n': case 'N': size = sizeof(Py_ssize_t); break;
  ------------------
  |  Branch (1216:5): [True: 0, False: 4]
  |  Branch (1216:15): [True: 0, False: 4]
  ------------------
 1217|      0|    case 'f': size = sizeof(float); break;
  ------------------
  |  Branch (1217:5): [True: 0, False: 4]
  ------------------
 1218|      0|    case 'd': size = sizeof(double); break;
  ------------------
  |  Branch (1218:5): [True: 0, False: 4]
  ------------------
 1219|      0|    case 'e': size = sizeof(float) / 2; break;
  ------------------
  |  Branch (1219:5): [True: 0, False: 4]
  ------------------
 1220|      0|    case '?': size = sizeof(_Bool); break;
  ------------------
  |  Branch (1220:5): [True: 0, False: 4]
  ------------------
 1221|      0|    case 'P': size = sizeof(void *); break;
  ------------------
  |  Branch (1221:5): [True: 0, False: 4]
  ------------------
 1222|      0|    case 'Z': {
  ------------------
  |  Branch (1222:5): [True: 0, False: 4]
  ------------------
 1223|      0|        switch (fmt[1]) {
  ------------------
  |  Branch (1223:17): [True: 0, False: 0]
  ------------------
 1224|      0|            case 'f': size = 2*sizeof(float); break;
  ------------------
  |  Branch (1224:13): [True: 0, False: 0]
  ------------------
 1225|      0|            case 'd': size = 2*sizeof(double); break;
  ------------------
  |  Branch (1225:13): [True: 0, False: 0]
  ------------------
 1226|      0|        }
 1227|      0|        if (size > 0 && fmt[2] == '\0') {
  ------------------
  |  Branch (1227:13): [True: 0, False: 0]
  |  Branch (1227:25): [True: 0, False: 0]
  ------------------
 1228|      0|            *result = fmt;
 1229|      0|            return size;
 1230|      0|        }
 1231|      0|        break;
 1232|      0|    }
 1233|      4|    }
 1234|       |
 1235|      4|    if (size > 0 && fmt[1] == '\0') {
  ------------------
  |  Branch (1235:9): [True: 4, False: 0]
  |  Branch (1235:21): [True: 4, False: 0]
  ------------------
 1236|      4|        *result = fmt;
 1237|      4|        return size;
 1238|      4|    }
 1239|       |
 1240|      0|    return -1;
 1241|      4|}
memoryobject.c:memory_getbuf:
 1576|  72.0k|{
 1577|  72.0k|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 1578|  72.0k|    Py_buffer *base = &self->view;
 1579|  72.0k|    int baseflags = self->flags;
 1580|       |
 1581|  72.0k|    CHECK_RELEASED_INT(self);
  ------------------
  |  |  192|  72.0k|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|  72.0k|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|   144k|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 72.0k]
  |  |  |  |  ------------------
  |  |  |  |  182|  72.0k|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|  72.0k|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 72.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  194|      0|            "operation forbidden on released memoryview object"); \
  |  |  195|      0|        return -1;                                                \
  |  |  196|      0|    }
  ------------------
 1582|  72.0k|    CHECK_RESTRICTED_INT(self);
  ------------------
  |  |  206|  72.0k|    if (((PyMemoryViewObject *)(mv))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
  |  |  ------------------
  |  |  |  |   25|  72.0k|#define _Py_MEMORYVIEW_RESTRICTED  0x020  /* Disallow new references to the memoryview's buffer */
  |  |  ------------------
  |  |  |  Branch (206:9): [True: 0, False: 72.0k]
  |  |  ------------------
  |  |  207|      0|        PyErr_SetString(PyExc_ValueError,                                  \
  |  |  208|      0|            "cannot create new view on restricted memoryview");            \
  |  |  209|      0|        return -1;                                                       \
  |  |  210|      0|    }
  ------------------
 1583|       |
 1584|       |    /* start with complete information */
 1585|  72.0k|    *view = *base;
 1586|  72.0k|    view->obj = NULL;
 1587|       |
 1588|  72.0k|    if (REQ_WRITABLE(flags) && base->readonly) {
  ------------------
  |  |  250|   144k|#define REQ_WRITABLE(flags) (flags&PyBUF_WRITABLE)
  |  |  ------------------
  |  |  |  |  109|  72.0k|#define PyBUF_WRITABLE 0x0001
  |  |  ------------------
  |  |  |  Branch (250:29): [True: 0, False: 72.0k]
  |  |  ------------------
  ------------------
  |  Branch (1588:32): [True: 0, False: 0]
  ------------------
 1589|      0|        PyErr_SetString(PyExc_BufferError,
 1590|      0|            "memoryview: underlying buffer is not writable");
 1591|      0|        return -1;
 1592|      0|    }
 1593|  72.0k|    if (!REQ_FORMAT(flags)) {
  ------------------
  |  |  251|  72.0k|#define REQ_FORMAT(flags) (flags&PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  116|  72.0k|#define PyBUF_FORMAT 0x0004
  |  |  ------------------
  ------------------
  |  Branch (1593:9): [True: 52.5k, False: 19.4k]
  ------------------
 1594|       |        /* NULL indicates that the buffer's data type has been cast to 'B'.
 1595|       |           view->itemsize is the _previous_ itemsize. If shape is present,
 1596|       |           the equality product(shape) * itemsize = len still holds at this
 1597|       |           point. The equality calcsize(format) = itemsize does _not_ hold
 1598|       |           from here on! */
 1599|  52.5k|        view->format = NULL;
 1600|  52.5k|    }
 1601|       |
 1602|  72.0k|    if (REQ_C_CONTIGUOUS(flags) && !MV_C_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  245|   144k|#define REQ_C_CONTIGUOUS(flags) ((flags&PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS)
  |  |  ------------------
  |  |  |  |  119|  72.0k|#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define REQ_C_CONTIGUOUS(flags) ((flags&PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS)
  |  |  ------------------
  |  |  |  |  119|  72.0k|#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (245:33): [True: 0, False: 72.0k]
  |  |  ------------------
  ------------------
                  if (REQ_C_CONTIGUOUS(flags) && !MV_C_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  233|      0|#define MV_C_CONTIGUOUS(flags) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
  |  |  ------------------
  |  |  |  |   23|      0|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  |  |  ------------------
  |  |               #define MV_C_CONTIGUOUS(flags) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
  |  |  ------------------
  |  |  |  |   21|      0|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  |  |  ------------------
  ------------------
  |  Branch (1602:36): [True: 0, False: 0]
  ------------------
 1603|      0|        PyErr_SetString(PyExc_BufferError,
 1604|      0|            "memoryview: underlying buffer is not C-contiguous");
 1605|      0|        return -1;
 1606|      0|    }
 1607|  72.0k|    if (REQ_F_CONTIGUOUS(flags) && !MV_F_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  246|   144k|#define REQ_F_CONTIGUOUS(flags) ((flags&PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS)
  |  |  ------------------
  |  |  |  |  120|  72.0k|#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define REQ_F_CONTIGUOUS(flags) ((flags&PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS)
  |  |  ------------------
  |  |  |  |  120|  72.0k|#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 0, False: 72.0k]
  |  |  ------------------
  ------------------
                  if (REQ_F_CONTIGUOUS(flags) && !MV_F_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  235|      0|    (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   23|      0|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  |  |  ------------------
  |  |                   (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   22|      0|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  |  |  ------------------
  ------------------
  |  Branch (1607:36): [True: 0, False: 0]
  ------------------
 1608|      0|        PyErr_SetString(PyExc_BufferError,
 1609|      0|            "memoryview: underlying buffer is not Fortran contiguous");
 1610|      0|        return -1;
 1611|      0|    }
 1612|  72.0k|    if (REQ_ANY_CONTIGUOUS(flags) && !MV_ANY_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  247|   144k|#define REQ_ANY_CONTIGUOUS(flags) ((flags&PyBUF_ANY_CONTIGUOUS) == PyBUF_ANY_CONTIGUOUS)
  |  |  ------------------
  |  |  |  |  121|  72.0k|#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define REQ_ANY_CONTIGUOUS(flags) ((flags&PyBUF_ANY_CONTIGUOUS) == PyBUF_ANY_CONTIGUOUS)
  |  |  ------------------
  |  |  |  |  121|  72.0k|#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (247:35): [True: 0, False: 72.0k]
  |  |  ------------------
  ------------------
                  if (REQ_ANY_CONTIGUOUS(flags) && !MV_ANY_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  237|      0|    (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   23|      0|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  |  |  ------------------
  |  |                   (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   21|      0|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  |  |  ------------------
  |  |                   (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   22|      0|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  |  |  ------------------
  ------------------
  |  Branch (1612:38): [True: 0, False: 0]
  ------------------
 1613|      0|        PyErr_SetString(PyExc_BufferError,
 1614|      0|            "memoryview: underlying buffer is not contiguous");
 1615|      0|        return -1;
 1616|      0|    }
 1617|  72.0k|    if (!REQ_INDIRECT(flags) && (baseflags & _Py_MEMORYVIEW_PIL)) {
  ------------------
  |  |  244|   144k|#define REQ_INDIRECT(flags) ((flags&PyBUF_INDIRECT) == PyBUF_INDIRECT)
  |  |  ------------------
  |  |  |  |  122|  72.0k|#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define REQ_INDIRECT(flags) ((flags&PyBUF_INDIRECT) == PyBUF_INDIRECT)
  |  |  ------------------
  |  |  |  |  122|  72.0k|#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!REQ_INDIRECT(flags) && (baseflags & _Py_MEMORYVIEW_PIL)) {
  ------------------
  |  |   24|  52.5k|#define _Py_MEMORYVIEW_PIL         0x010  /* PIL-style layout */
  ------------------
  |  Branch (1617:9): [True: 52.5k, False: 19.4k]
  |  Branch (1617:33): [True: 0, False: 52.5k]
  ------------------
 1618|      0|        PyErr_SetString(PyExc_BufferError,
 1619|      0|            "memoryview: underlying buffer requires suboffsets");
 1620|      0|        return -1;
 1621|      0|    }
 1622|  72.0k|    if (!REQ_STRIDES(flags)) {
  ------------------
  |  |  248|  72.0k|#define REQ_STRIDES(flags) ((flags&PyBUF_STRIDES) == PyBUF_STRIDES)
  |  |  ------------------
  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  ------------------
  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define REQ_STRIDES(flags) ((flags&PyBUF_STRIDES) == PyBUF_STRIDES)
  |  |  ------------------
  |  |  |  |  118|  72.0k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  ------------------
  |  |  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1622:9): [True: 52.5k, False: 19.4k]
  ------------------
 1623|  52.5k|        if (!MV_C_CONTIGUOUS(baseflags)) {
  ------------------
  |  |  233|  52.5k|#define MV_C_CONTIGUOUS(flags) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
  |  |  ------------------
  |  |  |  |   23|  52.5k|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  |  |  ------------------
  |  |               #define MV_C_CONTIGUOUS(flags) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
  |  |  ------------------
  |  |  |  |   21|  52.5k|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  |  |  ------------------
  ------------------
  |  Branch (1623:13): [True: 0, False: 52.5k]
  ------------------
 1624|      0|            PyErr_SetString(PyExc_BufferError,
 1625|      0|                "memoryview: underlying buffer is not C-contiguous");
 1626|      0|            return -1;
 1627|      0|        }
 1628|  52.5k|        view->strides = NULL;
 1629|  52.5k|    }
 1630|  72.0k|    if (!REQ_SHAPE(flags)) {
  ------------------
  |  |  249|  72.0k|#define REQ_SHAPE(flags) ((flags&PyBUF_ND) == PyBUF_ND)
  |  |  ------------------
  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  ------------------
  |  |               #define REQ_SHAPE(flags) ((flags&PyBUF_ND) == PyBUF_ND)
  |  |  ------------------
  |  |  |  |  117|  72.0k|#define PyBUF_ND 0x0008
  |  |  ------------------
  ------------------
  |  Branch (1630:9): [True: 52.5k, False: 19.4k]
  ------------------
 1631|       |        /* PyBUF_SIMPLE or PyBUF_WRITABLE: at this point buf is C-contiguous,
 1632|       |           so base->buf = ndbuf->data. */
 1633|  52.5k|        if (view->format != NULL) {
  ------------------
  |  Branch (1633:13): [True: 0, False: 52.5k]
  ------------------
 1634|       |            /* PyBUF_SIMPLE|PyBUF_FORMAT and PyBUF_WRITABLE|PyBUF_FORMAT do
 1635|       |               not make sense. */
 1636|      0|            PyErr_Format(PyExc_BufferError,
 1637|      0|                "memoryview: cannot cast to unsigned bytes if the format flag "
 1638|      0|                "is present");
 1639|      0|            return -1;
 1640|      0|        }
 1641|       |        /* product(shape) * itemsize = len and calcsize(format) = itemsize
 1642|       |           do _not_ hold from here on! */
 1643|  52.5k|        view->ndim = 1;
 1644|  52.5k|        view->shape = NULL;
 1645|  52.5k|    }
 1646|       |
 1647|       |
 1648|  72.0k|    view->obj = Py_NewRef(self);
  ------------------
  |  |  550|  72.0k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  72.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  72.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1649|  72.0k|    FT_ATOMIC_ADD_SSIZE(self->exports, 1);
  ------------------
  |  |  203|  72.0k|#define FT_ATOMIC_ADD_SSIZE(value, new_value) (void)(value += new_value)
  ------------------
 1650|       |
 1651|  72.0k|    return 0;
 1652|  72.0k|}
memoryobject.c:memory_releasebuf:
 1656|  72.0k|{
 1657|  72.0k|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 1658|  72.0k|    FT_ATOMIC_ADD_SSIZE(self->exports, -1);
  ------------------
  |  |  203|  72.0k|#define FT_ATOMIC_ADD_SSIZE(value, new_value) (void)(value += new_value)
  ------------------
 1659|  72.0k|    return;
 1660|       |    /* PyBuffer_Release() decrements view->obj after this function returns. */
 1661|  72.0k|}
memoryobject.c:memory_traverse:
 1165|     20|{
 1166|     20|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 1167|     20|    Py_VISIT(self->mbuf);
  ------------------
  |  |  194|     20|    do {                                                                \
  |  |  195|     20|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 20, False: 0]
  |  |  ------------------
  |  |  196|     20|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     20|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 20]
  |  |  ------------------
  |  |  198|     20|                return vret;                                            \
  |  |  199|     20|        }                                                               \
  |  |  200|     20|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20]
  |  |  ------------------
  ------------------
 1168|     20|    return 0;
 1169|     20|}
memoryobject.c:memoryview_tolist_impl:
 2342|      2|{
 2343|      2|    const Py_buffer *view = &self->view;
 2344|      2|    const char *fmt;
 2345|       |
 2346|      2|    CHECK_RELEASED(self);
  ------------------
  |  |  185|      2|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|      2|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      4|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  182|      2|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|      2|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  186|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  187|      0|            "operation forbidden on released memoryview object"); \
  |  |  188|      0|        return NULL;                                              \
  |  |  189|      0|    }
  ------------------
 2347|       |
 2348|      2|    fmt = adjust_fmt(view);
 2349|      2|    if (fmt == NULL)
  ------------------
  |  Branch (2349:9): [True: 0, False: 2]
  ------------------
 2350|      0|        return NULL;
 2351|      2|    if (view->ndim == 0) {
  ------------------
  |  Branch (2351:9): [True: 0, False: 2]
  ------------------
 2352|      0|        return unpack_single(self, view->buf, fmt);
 2353|      0|    }
 2354|      2|    else if (view->ndim == 1) {
  ------------------
  |  Branch (2354:14): [True: 2, False: 0]
  ------------------
 2355|      2|        return tolist_base(self, view->buf, view->shape,
 2356|      2|                           view->strides, view->suboffsets,
 2357|      2|                           fmt);
 2358|      2|    }
 2359|      0|    else {
 2360|      0|        return tolist_rec(self, view->buf, view->ndim, view->shape,
 2361|      0|                          view->strides, view->suboffsets,
 2362|      0|                          fmt);
 2363|      0|    }
 2364|      2|}
memoryobject.c:tolist_base:
 2274|      2|{
 2275|      2|    PyObject *lst, *item;
 2276|      2|    Py_ssize_t i;
 2277|       |
 2278|      2|    lst = PyList_New(shape[0]);
 2279|      2|    if (lst == NULL)
  ------------------
  |  Branch (2279:9): [True: 0, False: 2]
  ------------------
 2280|      0|        return NULL;
 2281|       |
 2282|    130|    for (i = 0; i < shape[0]; ptr+=strides[0], i++) {
  ------------------
  |  Branch (2282:17): [True: 128, False: 2]
  ------------------
 2283|    128|        const char *xptr = ADJUST_PTR(ptr, suboffsets, 0);
  ------------------
  |  |  230|    128|    (HAVE_PTR(suboffsets, dim) ? *((char**)ptr) + suboffsets[dim] : ptr)
  |  |  ------------------
  |  |  |  |  227|    128|#define HAVE_PTR(suboffsets, dim) (suboffsets && suboffsets[dim] >= 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (227:36): [True: 0, False: 128]
  |  |  |  |  |  Branch (227:50): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2284|    128|        item = unpack_single(self, xptr, fmt);
 2285|    128|        if (item == NULL) {
  ------------------
  |  Branch (2285:13): [True: 0, False: 128]
  ------------------
 2286|      0|            Py_DECREF(lst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2287|      0|            return NULL;
 2288|      0|        }
 2289|    128|        PyList_SET_ITEM(lst, i, item);
  ------------------
  |  |   50|    128|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    128|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    128|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    128|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    128|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2290|    128|    }
 2291|       |
 2292|      2|    return lst;
 2293|      2|}
memoryobject.c:memoryview_cast_impl:
 1490|      2|{
 1491|      2|    PyMemoryViewObject *mv = NULL;
 1492|      2|    Py_ssize_t ndim = 1;
 1493|       |
 1494|      2|    CHECK_RELEASED(self);
  ------------------
  |  |  185|      2|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|      2|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      4|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  182|      2|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|      2|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  186|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  187|      0|            "operation forbidden on released memoryview object"); \
  |  |  188|      0|        return NULL;                                              \
  |  |  189|      0|    }
  ------------------
 1495|      2|    CHECK_RESTRICTED(self);
  ------------------
  |  |  199|      2|    if (((PyMemoryViewObject *)(mv))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
  |  |  ------------------
  |  |  |  |   25|      2|#define _Py_MEMORYVIEW_RESTRICTED  0x020  /* Disallow new references to the memoryview's buffer */
  |  |  ------------------
  |  |  |  Branch (199:9): [True: 0, False: 2]
  |  |  ------------------
  |  |  200|      0|        PyErr_SetString(PyExc_ValueError,                                  \
  |  |  201|      0|            "cannot create new view on restricted memoryview");            \
  |  |  202|      0|        return NULL;                                                       \
  |  |  203|      0|    }
  ------------------
 1496|       |
 1497|      2|    if (order != 'C' && order != 'F') {
  ------------------
  |  Branch (1497:9): [True: 0, False: 2]
  |  Branch (1497:25): [True: 0, False: 0]
  ------------------
 1498|      0|        PyErr_SetString(PyExc_ValueError, "order must be 'C' or 'F'");
 1499|      0|        return NULL;
 1500|      0|    }
 1501|       |
 1502|      2|    if (!MV_C_CONTIGUOUS(self->flags)) {
  ------------------
  |  |  233|      2|#define MV_C_CONTIGUOUS(flags) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
  |  |  ------------------
  |  |  |  |   23|      2|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  |  |  ------------------
  |  |               #define MV_C_CONTIGUOUS(flags) (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_C))
  |  |  ------------------
  |  |  |  |   21|      2|#define _Py_MEMORYVIEW_C           0x002  /* C-contiguous layout */
  |  |  ------------------
  ------------------
  |  Branch (1502:9): [True: 0, False: 2]
  ------------------
 1503|      0|        if (shape || !MV_F_CONTIGUOUS(self->flags)) {
  ------------------
  |  |  235|      0|    (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   23|      0|#define _Py_MEMORYVIEW_SCALAR      0x008  /* scalar: ndim = 0 */
  |  |  ------------------
  |  |                   (flags&(_Py_MEMORYVIEW_SCALAR|_Py_MEMORYVIEW_FORTRAN))
  |  |  ------------------
  |  |  |  |   22|      0|#define _Py_MEMORYVIEW_FORTRAN     0x004  /* Fortran contiguous layout */
  |  |  ------------------
  ------------------
  |  Branch (1503:13): [True: 0, False: 0]
  |  Branch (1503:22): [True: 0, False: 0]
  ------------------
 1504|      0|            PyErr_SetString(PyExc_TypeError,
 1505|      0|                "memoryview: casts are restricted to contiguous views");
 1506|      0|            return NULL;
 1507|      0|        }
 1508|      0|    }
 1509|      2|    if ((shape || self->view.ndim != 1) && zero_in_shape(self)) {
  ------------------
  |  Branch (1509:10): [True: 0, False: 2]
  |  Branch (1509:19): [True: 0, False: 2]
  |  Branch (1509:44): [True: 0, False: 0]
  ------------------
 1510|      0|        PyErr_SetString(PyExc_TypeError,
 1511|      0|            "memoryview: cannot cast view with zeros in shape or strides");
 1512|      0|        return NULL;
 1513|      0|    }
 1514|      2|    if (shape) {
  ------------------
  |  Branch (1514:9): [True: 0, False: 2]
  ------------------
 1515|      0|        CHECK_LIST_OR_TUPLE(shape)
  ------------------
  |  |  218|      0|    if (!PyList_Check(v) && !PyTuple_Check(v)) { \
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   if (!PyList_Check(v) && !PyTuple_Check(v)) { \
  |  |  ------------------
  |  |  |  |   27|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (218:9): [True: 0, False: 0]
  |  |  |  Branch (218:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  219|      0|        PyErr_SetString(PyExc_TypeError,         \
  |  |  220|      0|            #v " must be a list or a tuple");    \
  |  |  221|      0|        return NULL;                             \
  |  |  222|      0|    }
  ------------------
 1516|      0|        ndim = PySequence_Fast_GET_SIZE(shape);
  ------------------
  |  |   92|      0|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1517|      0|        if (ndim > PyBUF_MAX_NDIM) {
  ------------------
  |  |  105|      0|#define PyBUF_MAX_NDIM 64
  ------------------
  |  Branch (1517:13): [True: 0, False: 0]
  ------------------
 1518|      0|            PyErr_SetString(PyExc_ValueError,
 1519|      0|                "memoryview: number of dimensions must not exceed "
 1520|      0|                Py_STRINGIFY(PyBUF_MAX_NDIM));
  ------------------
  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  ------------------
  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  ------------------
  ------------------
 1521|      0|            return NULL;
 1522|      0|        }
 1523|      0|        if (self->view.ndim != 1 && ndim != 1) {
  ------------------
  |  Branch (1523:13): [True: 0, False: 0]
  |  Branch (1523:37): [True: 0, False: 0]
  ------------------
 1524|      0|            PyErr_SetString(PyExc_TypeError,
 1525|      0|                "memoryview: cast must be 1D -> ND or ND -> 1D");
 1526|      0|            return NULL;
 1527|      0|        }
 1528|      0|    }
 1529|       |
 1530|      2|    mv = (PyMemoryViewObject *)
 1531|      2|        mbuf_add_incomplete_view(self->mbuf, &self->view, ndim==0 ? 1 : (int)ndim);
  ------------------
  |  Branch (1531:59): [True: 0, False: 2]
  ------------------
 1532|      2|    if (mv == NULL)
  ------------------
  |  Branch (1532:9): [True: 0, False: 2]
  ------------------
 1533|      0|        return NULL;
 1534|       |
 1535|      2|    if (cast_to_1D(mv, format) < 0)
  ------------------
  |  Branch (1535:9): [True: 0, False: 2]
  ------------------
 1536|      0|        goto error;
 1537|      2|    if (shape && cast_to_ND(mv, shape, (int)ndim, (char)order) < 0)
  ------------------
  |  Branch (1537:9): [True: 0, False: 2]
  |  Branch (1537:18): [True: 0, False: 0]
  ------------------
 1538|      0|        goto error;
 1539|       |
 1540|      2|    return (PyObject *)mv;
 1541|       |
 1542|      0|error:
 1543|      0|    Py_DECREF(mv);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1544|       |    return NULL;
 1545|      2|}
memoryobject.c:cast_to_1D:
 1306|      2|{
 1307|      2|    Py_buffer *view = &mv->view;
 1308|      2|    PyObject *asciifmt;
 1309|      2|    const char *srcfmt, *destfmt;
 1310|      2|    Py_ssize_t itemsize;
 1311|      2|    int ret = -1;
 1312|       |
 1313|      2|    assert(view->ndim >= 1);
  ------------------
  |  Branch (1313:5): [True: 2, False: 0]
  ------------------
 1314|      2|    assert(Py_SIZE(mv) == 3*view->ndim);
  ------------------
  |  Branch (1314:5): [True: 2, False: 0]
  ------------------
 1315|      2|    assert(view->shape == mv->ob_array);
  ------------------
  |  Branch (1315:5): [True: 2, False: 0]
  ------------------
 1316|      2|    assert(view->strides == mv->ob_array + view->ndim);
  ------------------
  |  Branch (1316:5): [True: 2, False: 0]
  ------------------
 1317|      2|    assert(view->suboffsets == mv->ob_array + 2*view->ndim);
  ------------------
  |  Branch (1317:5): [True: 2, False: 0]
  ------------------
 1318|       |
 1319|      2|    asciifmt = PyUnicode_AsASCIIString(format);
 1320|      2|    if (asciifmt == NULL)
  ------------------
  |  Branch (1320:9): [True: 0, False: 2]
  ------------------
 1321|      0|        return ret;
 1322|       |
 1323|      2|    itemsize = get_native_fmtchar(&destfmt, PyBytes_AS_STRING(asciifmt));
  ------------------
  |  |   27|      2|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1324|      2|    if (itemsize < 0) {
  ------------------
  |  Branch (1324:9): [True: 0, False: 2]
  ------------------
 1325|      0|        PyErr_SetString(PyExc_ValueError,
 1326|      0|            "memoryview: destination format must be a native "
 1327|      0|            "format prefixed with an optional '@'");
 1328|      0|        goto out;
 1329|      0|    }
 1330|       |
 1331|      2|    if ((get_native_fmtchar(&srcfmt, view->format) < 0 ||
  ------------------
  |  Branch (1331:10): [True: 0, False: 2]
  ------------------
 1332|      2|         !IS_BYTE_FORMAT(srcfmt)) && !IS_BYTE_FORMAT(destfmt)) {
  ------------------
  |  | 1201|      2|    (strcmp(f, "b") == 0 || strcmp(f, "B") == 0 || strcmp(f, "c") == 0)
  |  |  ------------------
  |  |  |  Branch (1201:6): [True: 0, False: 2]
  |  |  |  Branch (1201:29): [True: 2, False: 0]
  |  |  |  Branch (1201:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                       !IS_BYTE_FORMAT(srcfmt)) && !IS_BYTE_FORMAT(destfmt)) {
  ------------------
  |  | 1201|      0|    (strcmp(f, "b") == 0 || strcmp(f, "B") == 0 || strcmp(f, "c") == 0)
  |  |  ------------------
  |  |  |  Branch (1201:6): [True: 0, False: 0]
  |  |  |  Branch (1201:29): [True: 0, False: 0]
  |  |  |  Branch (1201:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1333|      0|        PyErr_SetString(PyExc_TypeError,
 1334|      0|            "memoryview: cannot cast between two non-byte formats");
 1335|      0|        goto out;
 1336|      0|    }
 1337|      2|    if (view->len % itemsize) {
  ------------------
  |  Branch (1337:9): [True: 0, False: 2]
  ------------------
 1338|      0|        PyErr_SetString(PyExc_TypeError,
 1339|      0|            "memoryview: length is not a multiple of itemsize");
 1340|      0|        goto out;
 1341|      0|    }
 1342|       |
 1343|      2|    view->format = (char *)get_native_fmtstr(PyBytes_AS_STRING(asciifmt));
  ------------------
  |  |   27|      2|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1344|      2|    if (view->format == NULL) {
  ------------------
  |  Branch (1344:9): [True: 0, False: 2]
  ------------------
 1345|       |        /* NOT_REACHED: get_native_fmtchar() already validates the format. */
 1346|      0|        PyErr_SetString(PyExc_RuntimeError,
 1347|      0|            "memoryview: internal error");
 1348|      0|        goto out;
 1349|      0|    }
 1350|      2|    view->itemsize = itemsize;
 1351|       |
 1352|      2|    view->ndim = 1;
 1353|      2|    view->shape[0] = view->len / view->itemsize;
 1354|      2|    view->strides[0] = view->itemsize;
 1355|      2|    view->suboffsets = NULL;
 1356|       |
 1357|      2|    init_flags(mv);
 1358|       |
 1359|      2|    ret = 0;
 1360|       |
 1361|      2|out:
 1362|      2|    Py_DECREF(asciifmt);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1363|      2|    return ret;
 1364|      2|}
memoryobject.c:get_native_fmtstr:
 1245|      2|{
 1246|      2|    int at = 0;
 1247|       |
 1248|      2|    if (fmt[0] == '@') {
  ------------------
  |  Branch (1248:9): [True: 0, False: 2]
  ------------------
 1249|      0|        at = 1;
 1250|      0|        fmt++;
 1251|      0|    }
 1252|      2|    if (fmt[0] == '\0') {
  ------------------
  |  Branch (1252:9): [True: 0, False: 2]
  ------------------
 1253|      0|        return NULL;
 1254|      0|    }
 1255|      2|    if (fmt[0] == 'Z') {
  ------------------
  |  Branch (1255:9): [True: 0, False: 2]
  ------------------
 1256|      0|        if (fmt[1] == '\0' || fmt[2] != '\0') {
  ------------------
  |  Branch (1256:13): [True: 0, False: 0]
  |  Branch (1256:31): [True: 0, False: 0]
  ------------------
 1257|      0|            return NULL;
 1258|      0|        }
 1259|      0|    }
 1260|      2|    else {
 1261|      2|        if (fmt[1] != '\0') {
  ------------------
  |  Branch (1261:13): [True: 0, False: 2]
  ------------------
 1262|      0|            return NULL;
 1263|      0|        }
 1264|      2|    }
 1265|       |
 1266|      2|#define RETURN(s) do { return at ? "@" s : s; } while (0)
 1267|       |
 1268|      2|    switch (fmt[0]) {
  ------------------
  |  Branch (1268:13): [True: 2, False: 0]
  ------------------
 1269|      0|    case 'c': RETURN("c");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1269:5): [True: 0, False: 2]
  ------------------
 1270|      0|    case 'b': RETURN("b");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1270:5): [True: 0, False: 2]
  ------------------
 1271|      0|    case 'B': RETURN("B");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1271:5): [True: 0, False: 2]
  ------------------
 1272|      0|    case 'h': RETURN("h");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1272:5): [True: 0, False: 2]
  ------------------
 1273|      0|    case 'H': RETURN("H");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1273:5): [True: 0, False: 2]
  ------------------
 1274|      0|    case 'i': RETURN("i");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1274:5): [True: 0, False: 2]
  ------------------
 1275|      2|    case 'I': RETURN("I");
  ------------------
  |  | 1266|      2|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 2]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1275:5): [True: 2, False: 0]
  ------------------
 1276|      0|    case 'l': RETURN("l");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1276:5): [True: 0, False: 2]
  ------------------
 1277|      0|    case 'L': RETURN("L");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1277:5): [True: 0, False: 2]
  ------------------
 1278|      0|    case 'q': RETURN("q");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1278:5): [True: 0, False: 2]
  ------------------
 1279|      0|    case 'Q': RETURN("Q");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1279:5): [True: 0, False: 2]
  ------------------
 1280|      0|    case 'n': RETURN("n");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1280:5): [True: 0, False: 2]
  ------------------
 1281|      0|    case 'N': RETURN("N");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1281:5): [True: 0, False: 2]
  ------------------
 1282|      0|    case 'f': RETURN("f");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1282:5): [True: 0, False: 2]
  ------------------
 1283|      0|    case 'd': RETURN("d");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1283:5): [True: 0, False: 2]
  ------------------
 1284|      0|    case 'e': RETURN("e");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1284:5): [True: 0, False: 2]
  ------------------
 1285|      0|    case 'Z': {
  ------------------
  |  Branch (1285:5): [True: 0, False: 2]
  ------------------
 1286|      0|        switch (fmt[1]) {
  ------------------
  |  Branch (1286:17): [True: 0, False: 0]
  ------------------
 1287|      0|        case 'f': RETURN("Zf");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1287:9): [True: 0, False: 0]
  ------------------
 1288|      0|        case 'd': RETURN("Zd");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1288:9): [True: 0, False: 0]
  ------------------
 1289|      0|        }
 1290|      0|        break;
 1291|      0|    }
 1292|      0|    case '?': RETURN("?");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1292:5): [True: 0, False: 2]
  ------------------
 1293|      0|    case 'P': RETURN("P");
  ------------------
  |  | 1266|      0|#define RETURN(s) do { return at ? "@" s : s; } while (0)
  |  |  ------------------
  |  |  |  Branch (1266:31): [True: 0, False: 0]
  |  |  |  Branch (1266:56): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1293:5): [True: 0, False: 2]
  ------------------
 1294|      2|    }
 1295|       |
 1296|      0|    return NULL;
 1297|      2|}
memoryobject.c:memory_itemsize_get:
 3474|      4|{
 3475|      4|    PyMemoryViewObject *self = (PyMemoryViewObject *)_self;
 3476|      4|    CHECK_RELEASED(self);
  ------------------
  |  |  185|      4|    if (BASE_INACCESSIBLE(mv)) {                                  \
  |  |  ------------------
  |  |  |  |  181|      4|    (((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      8|#define _Py_MEMORYVIEW_RELEASED    0x001  /* access to master buffer blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:6): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |  182|      4|     ((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|      4|#define _Py_MANAGED_BUFFER_RELEASED    0x001  /* access to exporter blocked */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:6): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  186|      0|        PyErr_SetString(PyExc_ValueError,                         \
  |  |  187|      0|            "operation forbidden on released memoryview object"); \
  |  |  188|      0|        return NULL;                                              \
  |  |  189|      0|    }
  ------------------
 3477|      4|    return PyLong_FromSsize_t(self->view.itemsize);
 3478|      4|}
memoryobject.c:memoryview_impl:
 1016|     95|{
 1017|     95|    return PyMemoryView_FromObject(object);
 1018|     95|}

PyCMethod_New:
   48|  1.94M|{
   49|       |    /* Figure out correct vectorcall function to use */
   50|  1.94M|    vectorcallfunc vectorcall;
   51|  1.94M|    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
  ------------------
  |  |   95|  1.94M|#define METH_VARARGS  0x0001
  ------------------
                  switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
  ------------------
  |  |  115|  1.94M|#  define METH_FASTCALL  0x0080
  ------------------
                  switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS |
  ------------------
  |  |   98|  1.94M|#define METH_NOARGS   0x0004
  ------------------
   52|  1.94M|                            METH_O | METH_KEYWORDS | METH_METHOD))
  ------------------
  |  |   99|  1.94M|#define METH_O        0x0008
  ------------------
                                          METH_O | METH_KEYWORDS | METH_METHOD))
  ------------------
  |  |   96|  1.94M|#define METH_KEYWORDS 0x0002
  ------------------
                                          METH_O | METH_KEYWORDS | METH_METHOD))
  ------------------
  |  |  133|  1.94M|#define METH_METHOD 0x0200
  ------------------
   53|  1.94M|    {
   54|     71|        case METH_VARARGS:
  ------------------
  |  |   95|     71|#define METH_VARARGS  0x0001
  ------------------
  |  Branch (54:9): [True: 71, False: 1.94M]
  ------------------
   55|     75|        case METH_VARARGS | METH_KEYWORDS:
  ------------------
  |  |   95|     75|#define METH_VARARGS  0x0001
  ------------------
                      case METH_VARARGS | METH_KEYWORDS:
  ------------------
  |  |   96|     75|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (55:9): [True: 4, False: 1.94M]
  ------------------
   56|       |            /* For METH_VARARGS functions, it's more efficient to use tp_call
   57|       |             * instead of vectorcall. */
   58|     75|            vectorcall = NULL;
   59|     75|            break;
   60|   526k|        case METH_FASTCALL:
  ------------------
  |  |  115|   526k|#  define METH_FASTCALL  0x0080
  ------------------
  |  Branch (60:9): [True: 526k, False: 1.41M]
  ------------------
   61|   526k|            vectorcall = cfunction_vectorcall_FASTCALL;
   62|   526k|            break;
   63|  21.3k|        case METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |  115|  21.3k|#  define METH_FASTCALL  0x0080
  ------------------
                      case METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |   96|  21.3k|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (63:9): [True: 21.3k, False: 1.92M]
  ------------------
   64|  21.3k|            vectorcall = cfunction_vectorcall_FASTCALL_KEYWORDS;
   65|  21.3k|            break;
   66|  1.40k|        case METH_NOARGS:
  ------------------
  |  |   98|  1.40k|#define METH_NOARGS   0x0004
  ------------------
  |  Branch (66:9): [True: 1.40k, False: 1.94M]
  ------------------
   67|  1.40k|            vectorcall = cfunction_vectorcall_NOARGS;
   68|  1.40k|            break;
   69|  1.39M|        case METH_O:
  ------------------
  |  |   99|  1.39M|#define METH_O        0x0008
  ------------------
  |  Branch (69:9): [True: 1.39M, False: 549k]
  ------------------
   70|  1.39M|            vectorcall = cfunction_vectorcall_O;
   71|  1.39M|            break;
   72|    100|        case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |  133|    100|#define METH_METHOD 0x0200
  ------------------
                      case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |  115|    100|#  define METH_FASTCALL  0x0080
  ------------------
                      case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
  ------------------
  |  |   96|    100|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (72:9): [True: 100, False: 1.94M]
  ------------------
   73|    100|            vectorcall = cfunction_vectorcall_FASTCALL_KEYWORDS_METHOD;
   74|    100|            break;
   75|      0|        default:
  ------------------
  |  Branch (75:9): [True: 0, False: 1.94M]
  ------------------
   76|      0|            PyErr_Format(PyExc_SystemError,
   77|      0|                         "%s() method: bad call flags", ml->ml_name);
   78|      0|            return NULL;
   79|  1.94M|    }
   80|       |
   81|  1.94M|    PyCFunctionObject *op = NULL;
   82|       |
   83|  1.94M|    if (ml->ml_flags & METH_METHOD) {
  ------------------
  |  |  133|  1.94M|#define METH_METHOD 0x0200
  ------------------
  |  Branch (83:9): [True: 100, False: 1.94M]
  ------------------
   84|    100|        if (!cls) {
  ------------------
  |  Branch (84:13): [True: 0, False: 100]
  ------------------
   85|      0|            PyErr_SetString(PyExc_SystemError,
   86|      0|                            "attempting to create PyCMethod with a METH_METHOD "
   87|      0|                            "flag but no class");
   88|      0|            return NULL;
   89|      0|        }
   90|    100|        PyCMethodObject *om = _Py_FREELIST_POP(PyCMethodObject, pycmethodobject);
  ------------------
  |  |   43|    100|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|    100|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   91|    100|        if (om == NULL) {
  ------------------
  |  Branch (91:13): [True: 6, False: 94]
  ------------------
   92|      6|            om = PyObject_GC_New(PyCMethodObject, &PyCMethod_Type);
  ------------------
  |  |  181|      6|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   93|      6|            if (om == NULL) {
  ------------------
  |  Branch (93:17): [True: 0, False: 6]
  ------------------
   94|      0|                return NULL;
   95|      0|            }
   96|      6|        }
   97|    100|        om->mm_class = (PyTypeObject*)Py_NewRef(cls);
  ------------------
  |  |  550|    100|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    100|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    100|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|    100|        op = (PyCFunctionObject *)om;
   99|  1.94M|    } else {
  100|  1.94M|        if (cls) {
  ------------------
  |  Branch (100:13): [True: 0, False: 1.94M]
  ------------------
  101|      0|            PyErr_SetString(PyExc_SystemError,
  102|      0|                            "attempting to create PyCFunction with class "
  103|      0|                            "but no METH_METHOD flag");
  104|      0|            return NULL;
  105|      0|        }
  106|  1.94M|        op = _Py_FREELIST_POP(PyCFunctionObject, pycfunctionobject);
  ------------------
  |  |   43|  1.94M|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  107|  1.94M|        if (op == NULL) {
  ------------------
  |  Branch (107:13): [True: 1.55k, False: 1.94M]
  ------------------
  108|  1.55k|            op = PyObject_GC_New(PyCFunctionObject, &PyCFunction_Type);
  ------------------
  |  |  181|  1.55k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  1.55k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  109|  1.55k|            if (op == NULL) {
  ------------------
  |  Branch (109:17): [True: 0, False: 1.55k]
  ------------------
  110|      0|                return NULL;
  111|      0|            }
  112|  1.55k|        }
  113|  1.94M|    }
  114|       |
  115|  1.94M|    op->m_weakreflist = NULL;
  116|  1.94M|    op->m_ml = ml;
  117|  1.94M|    op->m_self = Py_XNewRef(self);
  ------------------
  |  |  551|  1.94M|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|  1.94M|    op->m_module = Py_XNewRef(module);
  ------------------
  |  |  551|  1.94M|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|  1.94M|    op->vectorcall = vectorcall;
  120|  1.94M|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|  1.94M|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|  1.94M|    return (PyObject *)op;
  122|  1.94M|}
methodobject.c:meth_dealloc:
  168|  1.94M|{
  169|  1.94M|    PyCFunctionObject *m = _PyCFunctionObject_CAST(self);
  ------------------
  |  |   17|  1.94M|    (assert(PyCFunction_Check(func)), \
  |  |   18|  1.94M|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (169:28): [True: 1.94M, False: 0]
  ------------------
  170|      0|    PyObject_GC_UnTrack(m);
  171|  1.94M|    FT_CLEAR_WEAKREFS(self, m->m_weakreflist);
  ------------------
  |  |   47|  1.94M|    do {                                            \
  |  |   48|  1.94M|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|  1.94M|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 1.94M]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|  1.94M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 1.94M]
  |  |  ------------------
  ------------------
  |  Branch (171:5): [True: 1.94M, False: 0]
  ------------------
  172|       |    // We need to access ml_flags here rather than later.
  173|       |    // `m->m_ml` might have the same lifetime
  174|       |    // as `m_self` when it's dynamically allocated.
  175|  1.94M|    int ml_flags = m->m_ml->ml_flags;
  176|       |    // Dereference class before m_self: PyCFunction_GET_CLASS accesses
  177|       |    // PyMethodDef m_ml, which could be kept alive by m_self
  178|  1.94M|    Py_XDECREF(PyCFunction_GET_CLASS(m));
  ------------------
  |  |  524|  1.94M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|  1.94M|    Py_XDECREF(m->m_self);
  ------------------
  |  |  524|  1.94M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|  1.94M|    Py_XDECREF(m->m_module);
  ------------------
  |  |  524|  1.94M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|  1.94M|    if (ml_flags & METH_METHOD) {
  ------------------
  |  |  133|  1.94M|#define METH_METHOD 0x0200
  ------------------
  |  Branch (181:9): [True: 97, False: 1.94M]
  ------------------
  182|     97|        assert(Py_IS_TYPE(self, &PyCMethod_Type));
  ------------------
  |  Branch (182:9): [True: 97, False: 0]
  ------------------
  183|     97|        _Py_FREELIST_FREE(pycmethodobject, m, PyObject_GC_Del);
  ------------------
  |  |   35|     97|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|     97|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     97|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|     97|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   32|     97|#  define Py_pycmethodobject_MAXFREELIST 16
  |  |  ------------------
  ------------------
  184|     97|    }
  185|  1.94M|    else {
  186|  1.94M|        assert(Py_IS_TYPE(self, &PyCFunction_Type));
  ------------------
  |  Branch (186:9): [True: 1.94M, False: 0]
  ------------------
  187|  1.94M|        _Py_FREELIST_FREE(pycfunctionobject, m, PyObject_GC_Del);
  ------------------
  |  |   35|  1.94M|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  1.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  1.94M|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   31|  1.94M|#  define Py_pycfunctionobject_MAXFREELIST 16
  |  |  ------------------
  ------------------
  188|  1.94M|    }
  189|  1.94M|}
methodobject.c:meth_hash:
  344|    128|{
  345|    128|    PyCFunctionObject *a = _PyCFunctionObject_CAST(self);
  ------------------
  |  |   17|    128|    (assert(PyCFunction_Check(func)), \
  |  |   18|    128|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|    128|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (345:28): [True: 128, False: 0]
  ------------------
  346|      0|    Py_hash_t x = PyObject_GenericHash(a->m_self);
  347|    128|    Py_hash_t y = Py_HashPointer((void*)(a->m_ml->ml_meth));
  348|    128|    x ^= y;
  349|    128|    if (x == -1) {
  ------------------
  |  Branch (349:9): [True: 0, False: 128]
  ------------------
  350|      0|        x = -2;
  351|      0|    }
  352|    128|    return x;
  353|    128|}
methodobject.c:meth_traverse:
  267|  17.4k|{
  268|  17.4k|    PyCFunctionObject *m = _PyCFunctionObject_CAST(self);
  ------------------
  |  |   17|  17.4k|    (assert(PyCFunction_Check(func)), \
  |  |   18|  17.4k|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|  17.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (268:28): [True: 17.4k, False: 0]
  ------------------
  269|  17.4k|    Py_VISIT(PyCFunction_GET_CLASS(m));
  ------------------
  |  |  194|  17.4k|    do {                                                                \
  |  |  195|  17.4k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 42, False: 17.4k]
  |  |  ------------------
  |  |  196|     42|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     42|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 42]
  |  |  ------------------
  |  |  198|     42|                return vret;                                            \
  |  |  199|     42|        }                                                               \
  |  |  200|  17.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
  270|  17.4k|    Py_VISIT(m->m_self);
  ------------------
  |  |  194|  17.4k|    do {                                                                \
  |  |  195|  17.4k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 17.2k, False: 208]
  |  |  ------------------
  |  |  196|  17.2k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  17.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  17.2k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 17.2k]
  |  |  ------------------
  |  |  198|  17.2k|                return vret;                                            \
  |  |  199|  17.2k|        }                                                               \
  |  |  200|  17.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
  271|  17.4k|    Py_VISIT(m->m_module);
  ------------------
  |  |  194|  17.4k|    do {                                                                \
  |  |  195|  17.4k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 12.1k, False: 5.28k]
  |  |  ------------------
  |  |  196|  12.1k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  12.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  12.1k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 12.1k]
  |  |  ------------------
  |  |  198|  12.1k|                return vret;                                            \
  |  |  199|  12.1k|        }                                                               \
  |  |  200|  17.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
  272|  17.4k|    return 0;
  273|  17.4k|}
methodobject.c:meth_richcompare:
  319|      8|{
  320|      8|    PyCFunctionObject *a, *b;
  321|      8|    PyObject *res;
  322|      8|    int eq;
  323|       |
  324|      8|    if ((op != Py_EQ && op != Py_NE) ||
  ------------------
  |  |  654|     16|#define Py_EQ 2
  ------------------
                  if ((op != Py_EQ && op != Py_NE) ||
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (324:10): [True: 0, False: 8]
  |  Branch (324:25): [True: 0, False: 0]
  ------------------
  325|      8|        !PyCFunction_Check(self) ||
  ------------------
  |  |   17|      8|#define PyCFunction_Check(op) PyObject_TypeCheck((op), &PyCFunction_Type)
  |  |  ------------------
  |  |  |  |  378|     16|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (325:9): [True: 0, False: 8]
  ------------------
  326|      8|        !PyCFunction_Check(other))
  ------------------
  |  |   17|      8|#define PyCFunction_Check(op) PyObject_TypeCheck((op), &PyCFunction_Type)
  |  |  ------------------
  |  |  |  |  378|      8|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (326:9): [True: 6, False: 2]
  ------------------
  327|      6|    {
  328|      6|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      6|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      6|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  329|      6|    }
  330|      2|    a = (PyCFunctionObject *)self;
  331|      2|    b = (PyCFunctionObject *)other;
  332|      2|    eq = a->m_self == b->m_self;
  333|      2|    if (eq)
  ------------------
  |  Branch (333:9): [True: 0, False: 2]
  ------------------
  334|      0|        eq = a->m_ml->ml_meth == b->m_ml->ml_meth;
  335|      2|    if (op == Py_EQ)
  ------------------
  |  |  654|      2|#define Py_EQ 2
  ------------------
  |  Branch (335:9): [True: 2, False: 0]
  ------------------
  336|      2|        res = eq ? Py_True : Py_False;
  ------------------
  |  |   26|      2|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      res = eq ? Py_True : Py_False;
  ------------------
  |  |   25|      2|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (336:15): [True: 0, False: 2]
  ------------------
  337|      0|    else
  338|      0|        res = eq ? Py_False : Py_True;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      res = eq ? Py_False : Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (338:15): [True: 0, False: 0]
  ------------------
  339|      2|    return Py_NewRef(res);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  340|      8|}
methodobject.c:meth_get__doc__:
  218|      7|{
  219|      7|    PyCFunctionObject *m = _PyCFunctionObject_CAST(self);
  ------------------
  |  |   17|      7|    (assert(PyCFunction_Check(func)), \
  |  |   18|      7|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (219:28): [True: 7, False: 0]
  ------------------
  220|      0|    return _PyType_GetDocFromInternalDoc(m->m_ml->ml_name, m->m_ml->ml_doc);
  221|      7|}
methodobject.c:meth_get__name__:
  225|      7|{
  226|      7|    PyCFunctionObject *m = _PyCFunctionObject_CAST(self);
  ------------------
  |  |   17|      7|    (assert(PyCFunction_Check(func)), \
  |  |   18|      7|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (226:28): [True: 7, False: 0]
  ------------------
  227|      0|    return PyUnicode_FromString(m->m_ml->ml_name);
  228|      7|}
methodobject.c:meth_get__qualname__:
  232|      7|{
  233|       |    /* If __self__ is a module or NULL, return m.__name__
  234|       |       (e.g. len.__qualname__ == 'len')
  235|       |
  236|       |       If __self__ is a type, return m.__self__.__qualname__ + '.' + m.__name__
  237|       |       (e.g. dict.fromkeys.__qualname__ == 'dict.fromkeys')
  238|       |
  239|       |       Otherwise return type(m.__self__).__qualname__ + '.' + m.__name__
  240|       |       (e.g. [].append.__qualname__ == 'list.append') */
  241|       |
  242|      7|    PyCFunctionObject *m = _PyCFunctionObject_CAST(self);
  ------------------
  |  |   17|      7|    (assert(PyCFunction_Check(func)), \
  |  |   18|      7|     _Py_CAST(PyCFunctionObject*, (func)))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (242:28): [True: 7, False: 0]
  ------------------
  243|      7|    if (m->m_self == NULL || PyModule_Check(m->m_self)) {
  ------------------
  |  |   12|      7|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      7|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 1, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (243:9): [True: 0, False: 7]
  ------------------
  244|      1|        return PyUnicode_FromString(m->m_ml->ml_name);
  245|      1|    }
  246|       |
  247|      6|    PyObject *type = PyType_Check(m->m_self) ? m->m_self : (PyObject*)Py_TYPE(m->m_self);
  ------------------
  |  |  766|      6|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 6, False: 0]
  |  |  ------------------
  ------------------
                  PyObject *type = PyType_Check(m->m_self) ? m->m_self : (PyObject*)Py_TYPE(m->m_self);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|       |
  249|      6|    PyObject *type_qualname = PyObject_GetAttr(type, &_Py_ID(__qualname__));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      6|    if (type_qualname == NULL)
  ------------------
  |  Branch (250:9): [True: 0, False: 6]
  ------------------
  251|      0|        return NULL;
  252|       |
  253|      6|    if (!PyUnicode_Check(type_qualname)) {
  ------------------
  |  |  103|      6|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (253:9): [True: 0, False: 6]
  ------------------
  254|      0|        PyErr_SetString(PyExc_TypeError, "<method>.__class__."
  255|      0|                        "__qualname__ is not a unicode object");
  256|      0|        Py_XDECREF(type_qualname);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      0|        return NULL;
  258|      0|    }
  259|       |
  260|      6|    PyObject *res = PyUnicode_FromFormat("%S.%s", type_qualname, m->m_ml->ml_name);
  261|      6|    Py_DECREF(type_qualname);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      6|    return res;
  263|      6|}
methodobject.c:cfunction_vectorcall_FASTCALL:
  438|  15.6k|{
  439|  15.6k|    PyThreadState *tstate = _PyThreadState_GET();
  440|  15.6k|    if (cfunction_check_kwargs(tstate, func, kwnames)) {
  ------------------
  |  Branch (440:9): [True: 0, False: 15.6k]
  ------------------
  441|      0|        return NULL;
  442|      0|    }
  443|  15.6k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  15.6k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  444|  15.6k|    PyCFunctionFast meth = (PyCFunctionFast)
  445|  15.6k|                            cfunction_enter_call(tstate, func);
  446|  15.6k|    if (meth == NULL) {
  ------------------
  |  Branch (446:9): [True: 0, False: 15.6k]
  ------------------
  447|      0|        return NULL;
  448|      0|    }
  449|  15.6k|    PyObject *result = meth(PyCFunction_GET_SELF(func), args, nargs);
  ------------------
  |  |   52|  15.6k|#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|  15.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|  15.6k|    _Py_LeaveRecursiveCallTstate(tstate);
  451|  15.6k|    return result;
  452|  15.6k|}
methodobject.c:cfunction_check_kwargs:
  408|  73.2k|{
  409|  73.2k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (409:5): [True: 73.2k, False: 0]
  ------------------
  410|  73.2k|    assert(PyCFunction_Check(func));
  ------------------
  |  Branch (410:5): [True: 73.2k, False: 0]
  ------------------
  411|  73.2k|    if (kwnames && PyTuple_GET_SIZE(kwnames)) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (411:9): [True: 0, False: 73.2k]
  ------------------
  412|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  413|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (413:13): [True: 0, False: 0]
  ------------------
  414|      0|            _PyErr_Format(tstate, PyExc_TypeError,
  415|      0|                         "%U takes no keyword arguments", funcstr);
  416|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      0|        }
  418|      0|        return -1;
  419|      0|    }
  420|  73.2k|    return 0;
  421|  73.2k|}
methodobject.c:cfunction_enter_call:
  427|   148k|{
  428|   148k|    if (_Py_EnterRecursiveCallTstate(tstate, " while calling a Python object")) {
  ------------------
  |  Branch (428:9): [True: 0, False: 148k]
  ------------------
  429|      0|        return NULL;
  430|      0|    }
  431|   148k|    return (funcptr)PyCFunction_GET_FUNCTION(func);
  ------------------
  |  |   43|   148k|#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|   148k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   148k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|   148k|}
methodobject.c:cfunction_vectorcall_FASTCALL_KEYWORDS:
  457|  75.0k|{
  458|  75.0k|    PyThreadState *tstate = _PyThreadState_GET();
  459|  75.0k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  75.0k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  460|  75.0k|    PyCFunctionFastWithKeywords meth = (PyCFunctionFastWithKeywords)
  461|  75.0k|                                        cfunction_enter_call(tstate, func);
  462|  75.0k|    if (meth == NULL) {
  ------------------
  |  Branch (462:9): [True: 0, False: 75.0k]
  ------------------
  463|      0|        return NULL;
  464|      0|    }
  465|  75.0k|    PyObject *result = meth(PyCFunction_GET_SELF(func), args, nargs, kwnames);
  ------------------
  |  |   52|  75.0k|#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|  75.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  75.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  466|  75.0k|    _Py_LeaveRecursiveCallTstate(tstate);
  467|  75.0k|    return result;
  468|  75.0k|}
methodobject.c:cfunction_vectorcall_FASTCALL_KEYWORDS_METHOD:
  473|     96|{
  474|     96|    PyThreadState *tstate = _PyThreadState_GET();
  475|     96|    PyTypeObject *cls = PyCFunction_GET_CLASS(func);
  ------------------
  |  |   66|     96|#define PyCFunction_GET_CLASS(func) PyCFunction_GET_CLASS(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|     96|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     96|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|     96|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|     96|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  477|     96|    PyCMethod meth = (PyCMethod)cfunction_enter_call(tstate, func);
  478|     96|    if (meth == NULL) {
  ------------------
  |  Branch (478:9): [True: 0, False: 96]
  ------------------
  479|      0|        return NULL;
  480|      0|    }
  481|     96|    PyObject *result = meth(PyCFunction_GET_SELF(func), cls, args, nargs, kwnames);
  ------------------
  |  |   52|     96|#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|     96|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     96|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  482|     96|    _Py_LeaveRecursiveCallTstate(tstate);
  483|     96|    return result;
  484|     96|}
methodobject.c:cfunction_vectorcall_NOARGS:
  489|  5.59k|{
  490|  5.59k|    PyThreadState *tstate = _PyThreadState_GET();
  491|  5.59k|    if (cfunction_check_kwargs(tstate, func, kwnames)) {
  ------------------
  |  Branch (491:9): [True: 0, False: 5.59k]
  ------------------
  492|      0|        return NULL;
  493|      0|    }
  494|  5.59k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  5.59k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  495|  5.59k|    if (nargs != 0) {
  ------------------
  |  Branch (495:9): [True: 0, False: 5.59k]
  ------------------
  496|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  497|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (497:13): [True: 0, False: 0]
  ------------------
  498|      0|            _PyErr_Format(tstate, PyExc_TypeError,
  499|      0|                "%U takes no arguments (%zd given)", funcstr, nargs);
  500|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|      0|        }
  502|      0|        return NULL;
  503|      0|    }
  504|  5.59k|    PyCFunction meth = (PyCFunction)cfunction_enter_call(tstate, func);
  505|  5.59k|    if (meth == NULL) {
  ------------------
  |  Branch (505:9): [True: 0, False: 5.59k]
  ------------------
  506|      0|        return NULL;
  507|      0|    }
  508|  5.59k|    PyObject *result = _PyCFunction_TrampolineCall(
  ------------------
  |  |  996|  5.59k|    (meth)((self), (args))
  ------------------
  509|  5.59k|        meth, PyCFunction_GET_SELF(func), NULL);
  510|  5.59k|    _Py_LeaveRecursiveCallTstate(tstate);
  511|  5.59k|    return result;
  512|  5.59k|}
methodobject.c:cfunction_vectorcall_O:
  517|  51.9k|{
  518|  51.9k|    PyThreadState *tstate = _PyThreadState_GET();
  519|  51.9k|    if (cfunction_check_kwargs(tstate, func, kwnames)) {
  ------------------
  |  Branch (519:9): [True: 0, False: 51.9k]
  ------------------
  520|      0|        return NULL;
  521|      0|    }
  522|  51.9k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  51.9k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  523|  51.9k|    if (nargs != 1) {
  ------------------
  |  Branch (523:9): [True: 0, False: 51.9k]
  ------------------
  524|      0|        PyObject *funcstr = _PyObject_FunctionStr(func);
  525|      0|        if (funcstr != NULL) {
  ------------------
  |  Branch (525:13): [True: 0, False: 0]
  ------------------
  526|      0|            _PyErr_Format(tstate, PyExc_TypeError,
  527|      0|                "%U takes exactly one argument (%zd given)", funcstr, nargs);
  528|      0|            Py_DECREF(funcstr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|      0|        }
  530|      0|        return NULL;
  531|      0|    }
  532|  51.9k|    PyCFunction meth = (PyCFunction)cfunction_enter_call(tstate, func);
  533|  51.9k|    if (meth == NULL) {
  ------------------
  |  Branch (533:9): [True: 0, False: 51.9k]
  ------------------
  534|      0|        return NULL;
  535|      0|    }
  536|  51.9k|    PyObject *result = _PyCFunction_TrampolineCall(
  ------------------
  |  |  996|  51.9k|    (meth)((self), (args))
  ------------------
  537|  51.9k|        meth, PyCFunction_GET_SELF(func), args[0]);
  538|  51.9k|    _Py_LeaveRecursiveCallTstate(tstate);
  539|  51.9k|    return result;
  540|  51.9k|}
methodobject.c:cfunction_call:
  545|    115|{
  546|    115|    assert(kwargs == NULL || PyDict_Check(kwargs));
  ------------------
  |  Branch (546:5): [True: 115, False: 0]
  |  Branch (546:5): [True: 0, False: 0]
  ------------------
  547|       |
  548|    115|    PyThreadState *tstate = _PyThreadState_GET();
  549|    115|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (549:5): [True: 115, False: 0]
  ------------------
  550|       |
  551|    115|    int flags = PyCFunction_GET_FLAGS(func);
  ------------------
  |  |   57|    115|#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|    115|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    115|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  552|    115|    if (!(flags & METH_VARARGS)) {
  ------------------
  |  |   95|    115|#define METH_VARARGS  0x0001
  ------------------
  |  Branch (552:9): [True: 0, False: 115]
  ------------------
  553|       |        /* If this is not a METH_VARARGS function, delegate to vectorcall */
  554|      0|        return PyVectorcall_Call(func, args, kwargs);
  555|      0|    }
  556|       |
  557|       |    /* For METH_VARARGS, we cannot use vectorcall as the vectorcall pointer
  558|       |     * is NULL. This is intentional, since vectorcall would be slower. */
  559|    115|    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
  ------------------
  |  |   43|    115|#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|    115|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    115|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|    115|    PyObject *self = PyCFunction_GET_SELF(func);
  ------------------
  |  |   52|    115|#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|    115|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    115|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  561|       |
  562|    115|    PyObject *result;
  563|    115|    if (flags & METH_KEYWORDS) {
  ------------------
  |  |   96|    115|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (563:9): [True: 0, False: 115]
  ------------------
  564|      0|        result = _PyCFunctionWithKeywords_TrampolineCall(
  ------------------
  |  |  998|      0|    (meth)((self), (args), (kw))
  ------------------
  565|      0|            *_PyCFunctionWithKeywords_CAST(meth),
  566|      0|            self, args, kwargs);
  567|      0|    }
  568|    115|    else {
  569|    115|        if (kwargs != NULL && PyDict_GET_SIZE(kwargs) != 0) {
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (569:13): [True: 0, False: 115]
  |  Branch (569:31): [True: 0, False: 0]
  ------------------
  570|      0|            _PyErr_Format(tstate, PyExc_TypeError,
  571|      0|                          "%.200s() takes no keyword arguments",
  572|      0|                          ((PyCFunctionObject*)func)->m_ml->ml_name);
  573|      0|            return NULL;
  574|      0|        }
  575|    115|        result = _PyCFunction_TrampolineCall(meth, self, args);
  ------------------
  |  |  996|    115|    (meth)((self), (args))
  ------------------
  576|    115|    }
  577|    115|    return _Py_CheckFunctionResult(tstate, func, result, NULL);
  578|    115|}

mi_heap_get_default:
  202|      2|mi_heap_t* mi_heap_get_default(void) {
  203|      2|  mi_thread_init();
  204|      2|  return mi_prim_get_default_heap();
  205|      2|}
_mi_heap_random_next:
  260|      6|uintptr_t _mi_heap_random_next(mi_heap_t* heap) {
  261|      6|  return _mi_random_next(&heap->random);
  262|      6|}

_mi_thread_id:
  121|      4|mi_threadid_t _mi_thread_id(void) mi_attr_noexcept {
  122|      4|  return _mi_prim_thread_id();
  123|      4|}
mi_thread_init:
  389|      4|{
  390|       |  // ensure our process has started already
  391|      4|  mi_process_init();
  392|       |
  393|       |  // initialize the thread local default heap
  394|       |  // (this will call `_mi_heap_set_default_direct` and thus set the
  395|       |  //  fiber/pthread key to a non-zero value, ensuring `_mi_thread_done` is called)
  396|      4|  if (_mi_heap_init()) return;  // returns true if already initialized
  ------------------
  |  Branch (396:7): [True: 4, False: 0]
  ------------------
  397|       |
  398|      0|  _mi_stat_increase(&_mi_stats_main.threads, 1);
  399|      0|  mi_atomic_increment_relaxed(&thread_count);
  ------------------
  |  |   78|      0|#define mi_atomic_increment_relaxed(p)           mi_atomic_add_relaxed(p,(uintptr_t)1)
  |  |  ------------------
  |  |  |  |   71|      0|#define mi_atomic_add_relaxed(p,x)               mi_atomic(fetch_add_explicit)(p,x,mi_memory_order(relaxed))
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|      0|#define  mi_atomic(name)        atomic_##name
  |  |  |  |  ------------------
  |  |  |  |               #define mi_atomic_add_relaxed(p,x)               mi_atomic(fetch_add_explicit)(p,x,mi_memory_order(relaxed))
  |  |  |  |  ------------------
  |  |  |  |  |  |   43|      0|#define  mi_memory_order(name)  memory_order_##name
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|       |  //_mi_verbose_message("thread init: 0x%zx\n", _mi_thread_id());
  401|      0|}
_mi_heap_set_default_direct:
  431|      2|void _mi_heap_set_default_direct(mi_heap_t* heap)  {
  432|      2|  mi_assert_internal(heap != NULL);
  433|       |  #if defined(MI_TLS_SLOT)
  434|       |  mi_prim_tls_slot_set(MI_TLS_SLOT,heap);
  435|       |  #elif defined(MI_TLS_PTHREAD_SLOT_OFS)
  436|       |  *mi_tls_pthread_heap_slot() = heap;
  437|       |  #elif defined(MI_TLS_PTHREAD)
  438|       |  // we use _mi_heap_default_key
  439|       |  #else
  440|      2|  _mi_heap_default = heap;
  441|      2|  #endif
  442|       |
  443|       |  // ensure the default heap is passed to `_mi_thread_done`
  444|       |  // setting to a non-NULL value also ensures `mi_thread_done` is called.
  445|      2|  _mi_prim_thread_associate_default_heap(heap);
  446|      2|}
_mi_preloading:
  458|     52|bool mi_decl_noinline _mi_preloading(void) {
  459|     52|  return os_preloading;
  460|     52|}
mi_process_init:
  543|      6|void mi_process_init(void) mi_attr_noexcept {
  544|       |  // ensure we are called once
  545|      6|  static mi_atomic_once_t process_init;
  546|      6|        #if _MSC_VER < 1920
  547|      6|        mi_heap_main_init(); // vs2017 can dynamically re-initialize _mi_heap_main
  548|      6|        #endif
  549|      6|  if (!mi_atomic_once(&process_init)) return;
  ------------------
  |  Branch (549:7): [True: 4, False: 2]
  ------------------
  550|      2|  _mi_process_is_initialized = true;
  551|      2|  _mi_verbose_message("process init: 0x%zx\n", _mi_thread_id());
  552|      2|  mi_process_setup_auto_thread_done();
  553|       |
  554|      2|  mi_detect_cpu_features();
  555|      2|  _mi_os_init();
  556|      2|  mi_heap_main_init();
  557|       |  #if MI_DEBUG
  558|       |  _mi_verbose_message("debug level : %d\n", MI_DEBUG);
  559|       |  #endif
  560|      2|  _mi_verbose_message("secure level: %d\n", MI_SECURE);
  ------------------
  |  |  101|      2|#define MI_SECURE 0
  ------------------
  561|      2|  _mi_verbose_message("mem tracking: %s\n", MI_TRACK_TOOL);
  ------------------
  |  |   98|      2|#define MI_TRACK_TOOL         "none"
  ------------------
  562|       |  #if MI_TSAN
  563|       |  _mi_verbose_message("thread sanitizer enabled\n");
  564|       |  #endif
  565|      2|  mi_thread_init();
  566|       |
  567|       |  #if defined(_WIN32)
  568|       |  // On windows, when building as a static lib the FLS cleanup happens to early for the main thread.
  569|       |  // To avoid this, set the FLS value for the main thread to NULL so the fls cleanup
  570|       |  // will not call _mi_thread_done on the (still executing) main thread. See issue #508.
  571|       |  _mi_prim_thread_associate_default_heap(NULL);
  572|       |  #endif
  573|       |
  574|      2|  mi_stats_reset();  // only call stat reset *after* thread init (or the heap tld == NULL)
  575|      2|  mi_track_init();
  576|       |
  577|      2|  if (mi_option_is_enabled(mi_option_reserve_huge_os_pages)) {
  ------------------
  |  Branch (577:7): [True: 0, False: 2]
  ------------------
  578|      0|    size_t pages = mi_option_get_clamp(mi_option_reserve_huge_os_pages, 0, 128*1024);
  579|      0|    long reserve_at = mi_option_get(mi_option_reserve_huge_os_pages_at);
  580|      0|    if (reserve_at != -1) {
  ------------------
  |  Branch (580:9): [True: 0, False: 0]
  ------------------
  581|      0|      mi_reserve_huge_os_pages_at(pages, reserve_at, pages*500);
  582|      0|    } else {
  583|      0|      mi_reserve_huge_os_pages_interleave(pages, 0, pages*500);
  584|      0|    }
  585|      0|  }
  586|      2|  if (mi_option_is_enabled(mi_option_reserve_os_memory)) {
  ------------------
  |  Branch (586:7): [True: 0, False: 2]
  ------------------
  587|      0|    long ksize = mi_option_get(mi_option_reserve_os_memory);
  588|      0|    if (ksize > 0) {
  ------------------
  |  Branch (588:9): [True: 0, False: 0]
  ------------------
  589|      0|      mi_reserve_os_memory((size_t)ksize*MI_KiB, true /* commit? */, true /* allow large pages? */);
  ------------------
  |  |  192|      0|#define MI_KiB     (MI_ZU(1024))
  |  |  ------------------
  |  |  |  |  182|      0|# define MI_ZU(x)  x##UL
  |  |  ------------------
  ------------------
  590|      0|    }
  591|      0|  }
  592|      2|}
obmalloc.c:_mi_process_init:
  681|      2|  static void __attribute__((constructor)) _mi_process_init(void) {
  682|      2|    mi_process_load();
  683|      2|  }
obmalloc.c:mi_heap_main_init:
  159|     10|static void mi_heap_main_init(void) {
  160|     10|  if (_mi_heap_main.cookie == 0) {
  ------------------
  |  Branch (160:7): [True: 2, False: 8]
  ------------------
  161|      2|    _mi_heap_main.thread_id = _mi_thread_id();
  162|      2|    _mi_heap_main.cookie = 1;
  163|       |    #if defined(_WIN32) && !defined(MI_SHARED_LIB)
  164|       |      _mi_random_init_weak(&_mi_heap_main.random);    // prevent allocation failure during bcrypt dll initialization with static linking
  165|       |    #else
  166|      2|      _mi_random_init(&_mi_heap_main.random);
  167|      2|    #endif
  168|      2|    _mi_heap_main.cookie  = _mi_heap_random_next(&_mi_heap_main);
  169|      2|    _mi_heap_main.keys[0] = _mi_heap_random_next(&_mi_heap_main);
  170|      2|    _mi_heap_main.keys[1] = _mi_heap_random_next(&_mi_heap_main);
  171|      2|  }
  172|     10|}
obmalloc.c:_mi_heap_init:
  268|      4|static bool _mi_heap_init(void) {
  269|      4|  if (mi_heap_is_initialized(mi_prim_get_default_heap())) return true;
  ------------------
  |  Branch (269:7): [True: 4, False: 0]
  ------------------
  270|      0|  if (_mi_is_main_thread()) {
  ------------------
  |  Branch (270:7): [True: 0, False: 0]
  ------------------
  271|       |    // mi_assert_internal(_mi_heap_main.thread_id != 0);  // can happen on freeBSD where alloc is called before any initialization
  272|       |    // the main heap is statically allocated
  273|      0|    mi_heap_main_init();
  274|      0|    _mi_heap_set_default_direct(&_mi_heap_main);
  275|       |    //mi_assert_internal(_mi_heap_default->tld->heap_backing == mi_prim_get_default_heap());
  276|      0|  }
  277|      0|  else {
  278|       |    // use `_mi_os_alloc` to allocate directly from the OS
  279|      0|    mi_thread_data_t* td = mi_thread_data_zalloc();
  280|      0|    if (td == NULL) return false;
  ------------------
  |  Branch (280:9): [True: 0, False: 0]
  ------------------
  281|       |
  282|      0|    _mi_tld_init(&td->tld, &td->heap);
  283|      0|    _mi_heap_init_ex(&td->heap, &td->tld, _mi_arena_id_none(), false, 0);
  284|      0|    _mi_heap_set_default_direct(&td->heap);
  285|      0|  }
  286|      0|  return false;
  287|      0|}
obmalloc.c:mi_process_setup_auto_thread_done:
  368|      4|static void mi_process_setup_auto_thread_done(void) {
  369|      4|  static bool tls_initialized = false; // fine if it races
  370|      4|  if (tls_initialized) return;
  ------------------
  |  Branch (370:7): [True: 2, False: 2]
  ------------------
  371|      2|  tls_initialized = true;
  372|      2|  _mi_prim_thread_init_auto_done();
  373|      2|  _mi_heap_set_default_direct(&_mi_heap_main);
  374|      2|}
obmalloc.c:mi_detect_cpu_features:
  537|      2|static void mi_detect_cpu_features(void) {
  538|       |  // nothing
  539|      2|}
obmalloc.c:mi_process_load:
  499|      2|static void mi_process_load(void) {
  500|      2|  mi_heap_main_init();
  501|       |  #if defined(__APPLE__) || defined(MI_TLS_RECURSE_GUARD)
  502|       |  volatile mi_heap_t* dummy = _mi_heap_default; // access TLS to allocate it before setting tls_initialized to true;
  503|       |  if (dummy == NULL) return;                    // use dummy or otherwise the access may get optimized away (issue #697)
  504|       |  #endif
  505|      2|  os_preloading = false;
  506|      2|  mi_assert_internal(_mi_is_main_thread());
  507|      2|  #if !(defined(_WIN32) && defined(MI_SHARED_LIB))  // use Dll process detach (see below) instead of atexit (issue #521)
  508|      2|  atexit(&mi_process_done);
  509|      2|  #endif
  510|      2|  _mi_options_init();
  511|      2|  mi_process_setup_auto_thread_done();
  512|      2|  mi_process_init();
  513|      2|  if (mi_redirected) _mi_verbose_message("malloc is redirected.\n");
  ------------------
  |  Branch (513:7): [True: 0, False: 2]
  ------------------
  514|       |
  515|       |  // show message from the redirector (if present)
  516|      2|  const char* msg = NULL;
  517|      2|  mi_allocator_init(&msg);
  518|      2|  if (msg != NULL && (mi_option_is_enabled(mi_option_verbose) || mi_option_is_enabled(mi_option_show_errors))) {
  ------------------
  |  Branch (518:7): [True: 0, False: 2]
  |  Branch (518:23): [True: 0, False: 0]
  |  Branch (518:66): [True: 0, False: 0]
  ------------------
  519|      0|    _mi_fputs(NULL,NULL,NULL,msg);
  520|      0|  }
  521|       |
  522|       |  // reseed random
  523|      2|  _mi_random_reinit_if_weak(&_mi_heap_main.random);
  524|      2|}
obmalloc.c:mi_allocator_init:
  489|      2|static bool mi_allocator_init(const char** message) {
  490|      2|  if (message != NULL) *message = NULL;
  ------------------
  |  Branch (490:7): [True: 2, False: 0]
  ------------------
  491|       |  return true;
  492|      2|}

_mi_options_init:
   97|      2|void _mi_options_init(void) {
   98|       |  // called on process load; should not be called before the CRT is initialized!
   99|       |  // (e.g. do not call this from process_init as that may run before CRT initialization)
  100|      2|  mi_add_stderr_output(); // now it safe to use stderr for output
  101|     54|  for(int i = 0; i < _mi_option_last; i++ ) {
  ------------------
  |  Branch (101:18): [True: 52, False: 2]
  ------------------
  102|     52|    mi_option_t option = (mi_option_t)i;
  103|     52|    long l = mi_option_get(option); MI_UNUSED(l); // initialize
  ------------------
  |  |  246|     52|#define MI_UNUSED(x)     (void)(x)
  ------------------
  104|       |    // if (option != mi_option_verbose)
  105|     52|    {
  106|     52|      mi_option_desc_t* desc = &options[option];
  107|     52|      _mi_verbose_message("option '%s': %ld\n", desc->name, desc->value);
  108|     52|    }
  109|     52|  }
  110|      2|  mi_max_error_count = mi_option_get(mi_option_max_errors);
  111|      2|  mi_max_warning_count = mi_option_get(mi_option_max_warnings);
  112|      2|}
mi_option_get:
  114|    118|mi_decl_nodiscard long mi_option_get(mi_option_t option) {
  115|    118|  mi_assert(option >= 0 && option < _mi_option_last);
  116|    118|  if (option < 0 || option >= _mi_option_last) return 0;
  ------------------
  |  Branch (116:7): [True: 0, False: 118]
  |  Branch (116:21): [True: 0, False: 118]
  ------------------
  117|    118|  mi_option_desc_t* desc = &options[option];
  118|    118|  mi_assert(desc->option == option);  // index should match the option
  119|    118|  if mi_unlikely(desc->init == UNINIT) {
  ------------------
  |  |  204|    118|#define mi_unlikely(x)     (__builtin_expect(!!(x),false))
  |  |  ------------------
  |  |  |  Branch (204:29): [True: 52, False: 66]
  |  |  ------------------
  ------------------
  120|     52|    mi_option_init(desc);
  121|     52|  }
  122|    118|  return desc->value;
  123|    118|}
mi_option_is_enabled:
  154|     62|mi_decl_nodiscard bool mi_option_is_enabled(mi_option_t option) {
  155|     62|  return (mi_option_get(option) != 0);
  156|     62|}
_mi_verbose_message:
  350|     58|void _mi_verbose_message(const char* fmt, ...) {
  351|     58|  if (!mi_option_is_enabled(mi_option_verbose)) return;
  ------------------
  |  Branch (351:7): [True: 58, False: 0]
  ------------------
  352|      0|  va_list args;
  353|      0|  va_start(args,fmt);
  354|      0|  mi_vfprintf(NULL, NULL, "mimalloc: ", fmt, args);
  355|       |  va_end(args);
  356|      0|}
_mi_toupper:
  437|  4.35k|char _mi_toupper(char c) {
  438|  4.35k|  if (c >= 'a' && c <= 'z') return (c - 'a' + 'A');
  ------------------
  |  Branch (438:7): [True: 2.17k, False: 2.17k]
  |  Branch (438:19): [True: 2.17k, False: 0]
  ------------------
  439|  2.17k|                       else return c;
  440|  4.35k|}
_mi_strnicmp:
  442|  2.11k|int _mi_strnicmp(const char* s, const char* t, size_t n) {
  443|  2.11k|  if (n == 0) return 0;
  ------------------
  |  Branch (443:7): [True: 0, False: 2.11k]
  ------------------
  444|  2.17k|  for (; *s != 0 && *t != 0 && n > 0; s++, t++, n--) {
  ------------------
  |  Branch (444:10): [True: 2.17k, False: 0]
  |  Branch (444:21): [True: 2.17k, False: 0]
  |  Branch (444:32): [True: 2.17k, False: 0]
  ------------------
  445|  2.17k|    if (_mi_toupper(*s) != _mi_toupper(*t)) break;
  ------------------
  |  Branch (445:9): [True: 2.11k, False: 64]
  ------------------
  446|  2.17k|  }
  447|  2.11k|  return (n == 0 ? 0 : *s - *t);
  ------------------
  |  Branch (447:11): [True: 0, False: 2.11k]
  ------------------
  448|  2.11k|}
_mi_strlcpy:
  450|    128|void _mi_strlcpy(char* dest, const char* src, size_t dest_size) {
  451|    128|  if (dest==NULL || src==NULL || dest_size == 0) return;
  ------------------
  |  Branch (451:7): [True: 0, False: 128]
  |  Branch (451:21): [True: 0, False: 128]
  |  Branch (451:34): [True: 0, False: 128]
  ------------------
  452|       |  // copy until end of src, or when dest is (almost) full
  453|  1.72k|  while (*src != 0 && dest_size > 1) {
  ------------------
  |  Branch (453:10): [True: 1.59k, False: 128]
  |  Branch (453:23): [True: 1.59k, False: 0]
  ------------------
  454|  1.59k|    *dest++ = *src++;
  455|  1.59k|    dest_size--;
  456|  1.59k|  }
  457|       |  // always zero terminate
  458|    128|  *dest = 0;
  459|    128|}
_mi_strlcat:
  461|     64|void _mi_strlcat(char* dest, const char* src, size_t dest_size) {
  462|     64|  if (dest==NULL || src==NULL || dest_size == 0) return;
  ------------------
  |  Branch (462:7): [True: 0, False: 64]
  |  Branch (462:21): [True: 0, False: 64]
  |  Branch (462:34): [True: 0, False: 64]
  ------------------
  463|       |  // find end of string in the dest buffer
  464|    640|  while (*dest != 0 && dest_size > 1) {
  ------------------
  |  Branch (464:10): [True: 576, False: 64]
  |  Branch (464:24): [True: 576, False: 0]
  ------------------
  465|    576|    dest++;
  466|    576|    dest_size--;
  467|    576|  }
  468|       |  // and catenate
  469|     64|  _mi_strlcpy(dest, src, dest_size);
  470|     64|}
_mi_strlen:
  472|     64|size_t _mi_strlen(const char* s) {
  473|     64|  if (s==NULL) return 0;
  ------------------
  |  Branch (473:7): [True: 0, False: 64]
  ------------------
  474|     64|  size_t len = 0;
  475|  1.66k|  while(s[len] != 0) { len++; }
  ------------------
  |  Branch (475:9): [True: 1.59k, False: 64]
  ------------------
  476|     64|  return len;
  477|     64|}
obmalloc.c:mi_out_stderr:
  174|      2|static void mi_cdecl mi_out_stderr(const char* msg, void* arg) {
  175|      2|  MI_UNUSED(arg);
  ------------------
  |  |  246|      2|#define MI_UNUSED(x)     (void)(x)
  ------------------
  176|      2|  if (msg != NULL && msg[0] != 0) {
  ------------------
  |  Branch (176:7): [True: 2, False: 0]
  |  Branch (176:22): [True: 0, False: 2]
  ------------------
  177|      0|    _mi_prim_out_stderr(msg);
  178|      0|  }
  179|      2|}
obmalloc.c:mi_out_buf_flush:
  207|      2|static void mi_out_buf_flush(mi_output_fun* out, bool no_more_buf, void* arg) {
  208|      2|  if (out==NULL) return;
  ------------------
  |  Branch (208:7): [True: 0, False: 2]
  ------------------
  209|       |  // claim (if `no_more_buf == true`, no more output will be added after this point)
  210|      2|  size_t count = mi_atomic_add_acq_rel(&out_len, (no_more_buf ? MI_MAX_DELAY_OUTPUT : 1));
  ------------------
  |  |   73|      4|#define mi_atomic_add_acq_rel(p,x)               mi_atomic(fetch_add_explicit)(p,x,mi_memory_order(acq_rel))
  |  |  ------------------
  |  |  |  |   42|      2|#define  mi_atomic(name)        atomic_##name
  |  |  ------------------
  |  |               #define mi_atomic_add_acq_rel(p,x)               mi_atomic(fetch_add_explicit)(p,x,mi_memory_order(acq_rel))
  |  |  ------------------
  |  |  |  |   43|      2|#define  mi_memory_order(name)  memory_order_##name
  |  |  ------------------
  |  |  |  Branch (73:82): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  211|       |  // and output the current contents
  212|      2|  if (count>MI_MAX_DELAY_OUTPUT) count = MI_MAX_DELAY_OUTPUT;
  ------------------
  |  |  186|      2|#define MI_MAX_DELAY_OUTPUT ((size_t)(32*1024))
  ------------------
                if (count>MI_MAX_DELAY_OUTPUT) count = MI_MAX_DELAY_OUTPUT;
  ------------------
  |  |  186|      0|#define MI_MAX_DELAY_OUTPUT ((size_t)(32*1024))
  ------------------
  |  Branch (212:7): [True: 0, False: 2]
  ------------------
  213|      2|  out_buf[count] = 0;
  214|      2|  out(out_buf,arg);
  215|      2|  if (!no_more_buf) {
  ------------------
  |  Branch (215:7): [True: 2, False: 0]
  ------------------
  216|      2|    out_buf[count] = '\n'; // if continue with the buffer, insert a newline
  217|      2|  }
  218|      2|}
obmalloc.c:mi_add_stderr_output:
  252|      2|static void mi_add_stderr_output(void) {
  253|      2|  mi_assert_internal(mi_out_default == NULL);
  254|      2|  mi_out_buf_flush(&mi_out_stderr, false, NULL); // flush current contents to stderr
  255|      2|  mi_out_default = &mi_out_buf_stderr;           // and add stderr to the delayed output
  256|      2|}
obmalloc.c:mi_option_init:
  505|     52|static void mi_option_init(mi_option_desc_t* desc) {
  506|       |  // Read option value from the environment
  507|     52|  char s[64 + 1];
  508|     52|  char buf[64+1];
  509|     52|  _mi_strlcpy(buf, "mimalloc_", sizeof(buf));
  510|     52|  _mi_strlcat(buf, desc->name, sizeof(buf));
  511|     52|  bool found = mi_getenv(buf, s, sizeof(s));
  512|     52|  if (!found && desc->legacy_name != NULL) {
  ------------------
  |  Branch (512:7): [True: 52, False: 0]
  |  Branch (512:17): [True: 12, False: 40]
  ------------------
  513|     12|    _mi_strlcpy(buf, "mimalloc_", sizeof(buf));
  514|     12|    _mi_strlcat(buf, desc->legacy_name, sizeof(buf));
  515|     12|    found = mi_getenv(buf, s, sizeof(s));
  516|     12|    if (found) {
  ------------------
  |  Branch (516:9): [True: 0, False: 12]
  ------------------
  517|      0|      _mi_warning_message("environment option \"mimalloc_%s\" is deprecated -- use \"mimalloc_%s\" instead.\n", desc->legacy_name, desc->name);
  518|      0|    }
  519|     12|  }
  520|       |
  521|     52|  if (found) {
  ------------------
  |  Branch (521:7): [True: 0, False: 52]
  ------------------
  522|      0|    size_t len = _mi_strnlen(s, sizeof(buf) - 1);
  523|      0|    for (size_t i = 0; i < len; i++) {
  ------------------
  |  Branch (523:24): [True: 0, False: 0]
  ------------------
  524|      0|      buf[i] = _mi_toupper(s[i]);
  525|      0|    }
  526|      0|    buf[len] = 0;
  527|      0|    if (buf[0] == 0 || strstr("1;TRUE;YES;ON", buf) != NULL) {
  ------------------
  |  Branch (527:9): [True: 0, False: 0]
  |  Branch (527:24): [True: 0, False: 0]
  ------------------
  528|      0|      desc->value = 1;
  529|      0|      desc->init = INITIALIZED;
  530|      0|    }
  531|      0|    else if (strstr("0;FALSE;NO;OFF", buf) != NULL) {
  ------------------
  |  Branch (531:14): [True: 0, False: 0]
  ------------------
  532|      0|      desc->value = 0;
  533|      0|      desc->init = INITIALIZED;
  534|      0|    }
  535|      0|    else {
  536|      0|      char* end = buf;
  537|      0|      long value = strtol(buf, &end, 10);
  538|      0|      if (desc->option == mi_option_reserve_os_memory || desc->option == mi_option_arena_reserve) {
  ------------------
  |  Branch (538:11): [True: 0, False: 0]
  |  Branch (538:58): [True: 0, False: 0]
  ------------------
  539|       |        // this option is interpreted in KiB to prevent overflow of `long`
  540|      0|        if (*end == 'K') { end++; }
  ------------------
  |  Branch (540:13): [True: 0, False: 0]
  ------------------
  541|      0|        else if (*end == 'M') { value *= MI_KiB; end++; }
  ------------------
  |  |  192|      0|#define MI_KiB     (MI_ZU(1024))
  |  |  ------------------
  |  |  |  |  182|      0|# define MI_ZU(x)  x##UL
  |  |  ------------------
  ------------------
  |  Branch (541:18): [True: 0, False: 0]
  ------------------
  542|      0|        else if (*end == 'G') { value *= MI_MiB; end++; }
  ------------------
  |  |  193|      0|#define MI_MiB     (MI_KiB*MI_KiB)
  |  |  ------------------
  |  |  |  |  192|      0|#define MI_KiB     (MI_ZU(1024))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      0|# define MI_ZU(x)  x##UL
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MI_MiB     (MI_KiB*MI_KiB)
  |  |  ------------------
  |  |  |  |  192|      0|#define MI_KiB     (MI_ZU(1024))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      0|# define MI_ZU(x)  x##UL
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (542:18): [True: 0, False: 0]
  ------------------
  543|      0|        else { value = (value + MI_KiB - 1) / MI_KiB; }
  ------------------
  |  |  192|      0|#define MI_KiB     (MI_ZU(1024))
  |  |  ------------------
  |  |  |  |  182|      0|# define MI_ZU(x)  x##UL
  |  |  ------------------
  ------------------
                      else { value = (value + MI_KiB - 1) / MI_KiB; }
  ------------------
  |  |  192|      0|#define MI_KiB     (MI_ZU(1024))
  |  |  ------------------
  |  |  |  |  182|      0|# define MI_ZU(x)  x##UL
  |  |  ------------------
  ------------------
  544|      0|        if (end[0] == 'I' && end[1] == 'B') { end += 2; }
  ------------------
  |  Branch (544:13): [True: 0, False: 0]
  |  Branch (544:30): [True: 0, False: 0]
  ------------------
  545|      0|        else if (*end == 'B') { end++; }
  ------------------
  |  Branch (545:18): [True: 0, False: 0]
  ------------------
  546|      0|      }
  547|      0|      if (*end == 0) {
  ------------------
  |  Branch (547:11): [True: 0, False: 0]
  ------------------
  548|      0|        desc->value = value;
  549|      0|        desc->init = INITIALIZED;
  550|      0|      }
  551|      0|      else {
  552|       |        // set `init` first to avoid recursion through _mi_warning_message on mimalloc_verbose.
  553|      0|        desc->init = DEFAULTED;
  554|      0|        if (desc->option == mi_option_verbose && desc->value == 0) {
  ------------------
  |  Branch (554:13): [True: 0, False: 0]
  |  Branch (554:50): [True: 0, False: 0]
  ------------------
  555|       |          // if the 'mimalloc_verbose' env var has a bogus value we'd never know
  556|       |          // (since the value defaults to 'off') so in that case briefly enable verbose
  557|      0|          desc->value = 1;
  558|      0|          _mi_warning_message("environment option mimalloc_%s has an invalid value.\n", desc->name);
  559|      0|          desc->value = 0;
  560|      0|        }
  561|      0|        else {
  562|      0|          _mi_warning_message("environment option mimalloc_%s has an invalid value.\n", desc->name);
  563|      0|        }
  564|      0|      }
  565|      0|    }
  566|      0|    mi_assert_internal(desc->init != UNINIT);
  567|      0|  }
  568|     52|  else if (!_mi_preloading()) {
  ------------------
  |  Branch (568:12): [True: 52, False: 0]
  ------------------
  569|     52|    desc->init = DEFAULTED;
  570|     52|  }
  571|     52|}
obmalloc.c:mi_getenv:
  494|     64|static bool mi_getenv(const char* name, char* result, size_t result_size) {
  495|     64|  if (name==NULL || result == NULL || result_size < 64) return false;
  ------------------
  |  Branch (495:7): [True: 0, False: 64]
  |  Branch (495:21): [True: 0, False: 64]
  |  Branch (495:39): [True: 0, False: 64]
  ------------------
  496|     64|  return _mi_prim_getenv(name,result,result_size);
  497|     64|}

_mi_os_init:
   65|      2|void _mi_os_init(void) {
   66|      2|  _mi_prim_mem_init(&mi_os_mem_config);
   67|      2|}

_mi_prim_mem_init:
  129|      2|void _mi_prim_mem_init( mi_os_mem_config_t* config ) {
  130|      2|  long psize = sysconf(_SC_PAGESIZE);
  131|      2|  if (psize > 0) {
  ------------------
  |  Branch (131:7): [True: 2, False: 0]
  ------------------
  132|      2|    config->page_size = (size_t)psize;
  133|      2|    config->alloc_granularity = (size_t)psize;
  134|      2|  }
  135|      2|  config->large_page_size = 2*MI_MiB; // TODO: can we query the OS for this?
  ------------------
  |  |  193|      2|#define MI_MiB     (MI_KiB*MI_KiB)
  |  |  ------------------
  |  |  |  |  192|      2|#define MI_KiB     (MI_ZU(1024))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      2|# define MI_ZU(x)  x##UL
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MI_MiB     (MI_KiB*MI_KiB)
  |  |  ------------------
  |  |  |  |  192|      2|#define MI_KiB     (MI_ZU(1024))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      2|# define MI_ZU(x)  x##UL
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|      2|  config->has_overcommit = unix_detect_overcommit();
  137|      2|  config->must_free_whole = false;    // mmap can free in parts
  138|       |  config->has_virtual_reserve = true; // todo: check if this true for NetBSD?  (for anonymous mmap with PROT_NONE)
  139|      2|}
_mi_prim_clock_now:
  556|      6|mi_msecs_t _mi_prim_clock_now(void) {
  557|      6|  struct timespec t;
  558|      6|  #ifdef CLOCK_MONOTONIC
  559|      6|  clock_gettime(CLOCK_MONOTONIC, &t);
  560|       |  #else
  561|       |  clock_gettime(CLOCK_REALTIME, &t);
  562|       |  #endif
  563|      6|  return ((mi_msecs_t)t.tv_sec * 1000) + ((mi_msecs_t)t.tv_nsec / 1000000);
  564|      6|}
_mi_prim_getenv:
  689|     64|bool _mi_prim_getenv(const char* name, char* result, size_t result_size) {
  690|     64|  if (name==NULL) return false;
  ------------------
  |  Branch (690:7): [True: 0, False: 64]
  ------------------
  691|     64|  const size_t len = _mi_strlen(name);
  692|     64|  if (len == 0) return false;
  ------------------
  |  Branch (692:7): [True: 0, False: 64]
  ------------------
  693|     64|  char** env = mi_get_environ();
  694|     64|  if (env == NULL) return false;
  ------------------
  |  Branch (694:7): [True: 0, False: 64]
  ------------------
  695|       |  // compare up to 10000 entries
  696|  2.17k|  for (int i = 0; i < 10000 && env[i] != NULL; i++) {
  ------------------
  |  Branch (696:19): [True: 2.17k, False: 0]
  |  Branch (696:32): [True: 2.11k, False: 64]
  ------------------
  697|  2.11k|    const char* s = env[i];
  698|  2.11k|    if (_mi_strnicmp(name, s, len) == 0 && s[len] == '=') { // case insensitive
  ------------------
  |  Branch (698:9): [True: 0, False: 2.11k]
  |  Branch (698:44): [True: 0, False: 0]
  ------------------
  699|       |      // found it
  700|      0|      _mi_strlcpy(result, s + len + 1, result_size);
  701|      0|      return true;
  702|      0|    }
  703|  2.11k|  }
  704|     64|  return false;
  705|     64|}
_mi_prim_random_buf:
  769|      2|bool _mi_prim_random_buf(void* buf, size_t buf_len) {
  770|       |  // Modern Linux provides `getrandom` but different distributions either use `sys/random.h` or `linux/random.h`
  771|       |  // and for the latter the actual `getrandom` call is not always defined.
  772|       |  // (see <https://stackoverflow.com/questions/45237324/why-doesnt-getrandom-compile>)
  773|       |  // We therefore use a syscall directly and fall back dynamically to /dev/urandom when needed.
  774|      2|  #if defined(MI_HAS_SYSCALL_H) && defined(SYS_getrandom)
  775|      2|    #ifndef GRND_NONBLOCK
  776|      2|    #define GRND_NONBLOCK (1)
  777|      2|    #endif
  778|      2|    static _Atomic(uintptr_t) no_getrandom; // = 0
  779|      2|    if (mi_atomic_load_acquire(&no_getrandom)==0) {
  ------------------
  |  |   60|      2|#define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
  |  |  ------------------
  |  |  |  |   42|      2|#define  mi_atomic(name)        atomic_##name
  |  |  ------------------
  |  |               #define mi_atomic_load_acquire(p)                mi_atomic(load_explicit)(p,mi_memory_order(acquire))
  |  |  ------------------
  |  |  |  |   43|      2|#define  mi_memory_order(name)  memory_order_##name
  |  |  ------------------
  ------------------
  |  Branch (779:9): [True: 2, False: 0]
  ------------------
  780|      2|      ssize_t ret = syscall(SYS_getrandom, buf, buf_len, GRND_NONBLOCK);
  ------------------
  |  |  776|      2|    #define GRND_NONBLOCK (1)
  ------------------
  781|      2|      if (ret >= 0) return (buf_len == (size_t)ret);
  ------------------
  |  Branch (781:11): [True: 2, False: 0]
  ------------------
  782|      0|      if (errno != ENOSYS) return false;
  ------------------
  |  Branch (782:11): [True: 0, False: 0]
  ------------------
  783|      0|      mi_atomic_store_release(&no_getrandom, (uintptr_t)1); // don't call again, and fall back to /dev/urandom
  ------------------
  |  |   62|      0|#define mi_atomic_store_release(p,x)             mi_atomic(store_explicit)(p,x,mi_memory_order(release))
  |  |  ------------------
  |  |  |  |   42|      0|#define  mi_atomic(name)        atomic_##name
  |  |  ------------------
  |  |               #define mi_atomic_store_release(p,x)             mi_atomic(store_explicit)(p,x,mi_memory_order(release))
  |  |  ------------------
  |  |  |  |   43|      0|#define  mi_memory_order(name)  memory_order_##name
  |  |  ------------------
  ------------------
  784|      0|    }
  785|      0|  #endif
  786|      0|  int flags = O_RDONLY;
  787|      0|  #if defined(O_CLOEXEC)
  788|      0|  flags |= O_CLOEXEC;
  789|      0|  #endif
  790|      0|  int fd = mi_prim_open("/dev/urandom", flags);
  791|      0|  if (fd < 0) return false;
  ------------------
  |  Branch (791:7): [True: 0, False: 0]
  ------------------
  792|      0|  size_t count = 0;
  793|      0|  while(count < buf_len) {
  ------------------
  |  Branch (793:9): [True: 0, False: 0]
  ------------------
  794|      0|    ssize_t ret = mi_prim_read(fd, (char*)buf + count, buf_len - count);
  795|      0|    if (ret<=0) {
  ------------------
  |  Branch (795:9): [True: 0, False: 0]
  ------------------
  796|      0|      if (errno!=EAGAIN && errno!=EINTR) break;
  ------------------
  |  Branch (796:11): [True: 0, False: 0]
  |  Branch (796:28): [True: 0, False: 0]
  ------------------
  797|      0|    }
  798|      0|    else {
  799|      0|      count += ret;
  800|      0|    }
  801|      0|  }
  802|      0|  mi_prim_close(fd);
  803|      0|  return (count==buf_len);
  804|      0|}
_mi_prim_thread_init_auto_done:
  831|      2|void _mi_prim_thread_init_auto_done(void) {
  832|      2|  mi_assert_internal(_mi_heap_default_key == (pthread_key_t)(-1));
  833|      2|  pthread_key_create(&_mi_heap_default_key, &mi_pthread_done);
  834|      2|}
_mi_prim_thread_associate_default_heap:
  840|      2|void _mi_prim_thread_associate_default_heap(mi_heap_t* heap) {
  841|      2|  if (_mi_heap_default_key != (pthread_key_t)(-1)) {  // can happen during recursive invocation on freeBSD
  ------------------
  |  Branch (841:7): [True: 2, False: 0]
  ------------------
  842|      2|    pthread_setspecific(_mi_heap_default_key, heap);
  843|      2|  }
  844|      2|}
obmalloc.c:unix_detect_overcommit:
  103|      2|static bool unix_detect_overcommit(void) {
  104|      2|  bool os_overcommit = true;
  105|      2|#if defined(__linux__)
  106|      2|  int fd = mi_prim_open("/proc/sys/vm/overcommit_memory", O_RDONLY);
  107|      2|        if (fd >= 0) {
  ------------------
  |  Branch (107:13): [True: 2, False: 0]
  ------------------
  108|      2|    char buf[32] = {0};
  109|      2|    ssize_t nread = mi_prim_read(fd, &buf, sizeof(buf));
  110|      2|    mi_prim_close(fd);
  111|       |    // <https://www.kernel.org/doc/Documentation/vm/overcommit-accounting>
  112|       |    // 0: heuristic overcommit, 1: always overcommit, 2: never overcommit (ignore NORESERVE)
  113|      2|    if (nread >= 1) {
  ------------------
  |  Branch (113:9): [True: 2, False: 0]
  ------------------
  114|      2|      os_overcommit = (buf[0] == '0' || buf[0] == '1');
  ------------------
  |  Branch (114:24): [True: 0, False: 2]
  |  Branch (114:41): [True: 2, False: 0]
  ------------------
  115|      2|    }
  116|      2|  }
  117|       |#elif defined(__FreeBSD__)
  118|       |  int val = 0;
  119|       |  size_t olen = sizeof(val);
  120|       |  if (sysctlbyname("vm.overcommit", &val, &olen, NULL, 0) == 0) {
  121|       |    os_overcommit = (val != 0);
  122|       |  }
  123|       |#else
  124|       |  // default: overcommit is true
  125|       |#endif
  126|      2|  return os_overcommit;
  127|      2|}
obmalloc.c:mi_get_environ:
  685|     64|static char** mi_get_environ(void) {
  686|     64|  return environ;
  687|     64|}
obmalloc.c:mi_prim_open:
   67|      2|static int mi_prim_open(const char* fpath, int open_flags) {
   68|       |  return syscall(SYS_open,fpath,open_flags,0);
   69|      2|}
obmalloc.c:mi_prim_read:
   70|      2|static ssize_t mi_prim_read(int fd, void* buf, size_t bufsize) {
   71|       |  return syscall(SYS_read,fd,buf,bufsize);
   72|      2|}
obmalloc.c:mi_prim_close:
   73|      2|static int mi_prim_close(int fd) {
   74|       |  return syscall(SYS_close,fd);
   75|      2|}

_mi_random_next:
  144|      6|uintptr_t _mi_random_next(mi_random_ctx_t* ctx) {
  145|      6|  mi_assert_internal(mi_random_is_initialized(ctx));
  146|       |  #if MI_INTPTR_SIZE <= 4
  147|       |    return chacha_next32(ctx);
  148|       |  #elif MI_INTPTR_SIZE == 8
  149|       |    return (((uintptr_t)chacha_next32(ctx) << 32) | chacha_next32(ctx));
  150|       |  #else
  151|       |  # error "define mi_random_next for this platform"
  152|       |  #endif
  153|      6|}
_mi_random_init:
  194|      2|void _mi_random_init(mi_random_ctx_t* ctx) {
  195|       |  mi_random_init_ex(ctx, false);
  196|      2|}
_mi_random_reinit_if_weak:
  202|      2|void _mi_random_reinit_if_weak(mi_random_ctx_t * ctx) {
  203|      2|  if (ctx->weak) {
  ------------------
  |  Branch (203:7): [True: 0, False: 2]
  ------------------
  204|      0|    _mi_random_init(ctx);
  205|      0|  }
  206|      2|}
obmalloc.c:chacha_block:
   48|      2|{
   49|       |  // scramble into `x`
   50|      2|  uint32_t x[16];
   51|     34|  for (size_t i = 0; i < 16; i++) {
  ------------------
  |  Branch (51:22): [True: 32, False: 2]
  ------------------
   52|     32|    x[i] = ctx->input[i];
   53|     32|  }
   54|     22|  for (size_t i = 0; i < MI_CHACHA_ROUNDS; i += 2) {
  ------------------
  |  |   20|     22|#define MI_CHACHA_ROUNDS (20)   // perhaps use 12 for better performance?
  ------------------
  |  Branch (54:22): [True: 20, False: 2]
  ------------------
   55|     20|    qround(x, 0, 4,  8, 12);
   56|     20|    qround(x, 1, 5,  9, 13);
   57|     20|    qround(x, 2, 6, 10, 14);
   58|     20|    qround(x, 3, 7, 11, 15);
   59|     20|    qround(x, 0, 5, 10, 15);
   60|     20|    qround(x, 1, 6, 11, 12);
   61|     20|    qround(x, 2, 7,  8, 13);
   62|     20|    qround(x, 3, 4,  9, 14);
   63|     20|  }
   64|       |
   65|       |  // add scrambled data to the initial state
   66|     34|  for (size_t i = 0; i < 16; i++) {
  ------------------
  |  Branch (66:22): [True: 32, False: 2]
  ------------------
   67|     32|    ctx->output[i] = x[i] + ctx->input[i];
   68|     32|  }
   69|      2|  ctx->output_available = 16;
   70|       |
   71|       |  // increment the counter for the next round
   72|      2|  ctx->input[12] += 1;
   73|      2|  if (ctx->input[12] == 0) {
  ------------------
  |  Branch (73:7): [True: 0, False: 2]
  ------------------
   74|      0|    ctx->input[13] += 1;
   75|      0|    if (ctx->input[13] == 0) {  // and keep increasing into the nonce
  ------------------
  |  Branch (75:9): [True: 0, False: 0]
  ------------------
   76|      0|      ctx->input[14] += 1;
   77|      0|    }
   78|      0|  }
   79|      2|}
obmalloc.c:qround:
   40|    160|static inline void qround(uint32_t x[16], size_t a, size_t b, size_t c, size_t d) {
   41|    160|  x[a] += x[b]; x[d] = rotl(x[d] ^ x[a], 16);
   42|    160|  x[c] += x[d]; x[b] = rotl(x[b] ^ x[c], 12);
   43|    160|  x[a] += x[b]; x[d] = rotl(x[d] ^ x[a], 8);
   44|    160|  x[c] += x[d]; x[b] = rotl(x[b] ^ x[c], 7);
   45|    160|}
obmalloc.c:rotl:
   36|    640|static inline uint32_t rotl(uint32_t x, uint32_t shift) {
   37|    640|  return (x << shift) | (x >> (32 - shift));
   38|    640|}
obmalloc.c:chacha_next32:
   81|     12|static uint32_t chacha_next32(mi_random_ctx_t* ctx) {
   82|     12|  if (ctx->output_available <= 0) {
  ------------------
  |  Branch (82:7): [True: 2, False: 10]
  ------------------
   83|      2|    chacha_block(ctx);
   84|      2|    ctx->output_available = 16; // (assign again to suppress static analysis warning)
   85|      2|  }
   86|     12|  const uint32_t x = ctx->output[16 - ctx->output_available];
   87|     12|  ctx->output[16 - ctx->output_available] = 0; // reset once the data is handed out
   88|     12|  ctx->output_available--;
   89|     12|  return x;
   90|     12|}
obmalloc.c:mi_random_init_ex:
  173|      2|static void mi_random_init_ex(mi_random_ctx_t* ctx, bool use_weak) {
  174|      2|  uint8_t key[32] = {0};
  175|      2|  if (use_weak || !_mi_prim_random_buf(key, sizeof(key))) {
  ------------------
  |  Branch (175:7): [True: 0, False: 2]
  |  Branch (175:19): [True: 0, False: 2]
  ------------------
  176|       |    // if we fail to get random data from the OS, we fall back to a
  177|       |    // weak random source based on the current time
  178|      0|    #if !defined(__wasi__)
  179|      0|    if (!use_weak) { _mi_warning_message("unable to use secure randomness\n"); }
  ------------------
  |  Branch (179:9): [True: 0, False: 0]
  ------------------
  180|      0|    #endif
  181|      0|    uintptr_t x = _mi_os_random_weak(0);
  182|      0|    for (size_t i = 0; i < 8; i++) {  // key is eight 32-bit words.
  ------------------
  |  Branch (182:24): [True: 0, False: 0]
  ------------------
  183|      0|      x = _mi_random_shuffle(x);
  184|      0|      ((uint32_t*)key)[i] = (uint32_t)x;
  185|      0|    }
  186|      0|    ctx->weak = true;
  187|      0|  }
  188|      2|  else {
  189|       |    ctx->weak = false;
  190|      2|  }
  191|      2|  chacha_init(ctx, key, (uintptr_t)ctx /*nonce*/ );
  192|      2|}
obmalloc.c:chacha_init:
   98|      2|{
   99|       |  // since we only use chacha for randomness (and not encryption) we
  100|       |  // do not _need_ to read 32-bit values as little endian but we do anyways
  101|       |  // just for being compatible :-)
  102|      2|  memset(ctx, 0, sizeof(*ctx));
  103|     10|  for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (103:22): [True: 8, False: 2]
  ------------------
  104|      8|    const uint8_t* sigma = (uint8_t*)"expand 32-byte k";
  105|      8|    ctx->input[i] = read32(sigma,i);
  106|      8|  }
  107|     18|  for (size_t i = 0; i < 8; i++) {
  ------------------
  |  Branch (107:22): [True: 16, False: 2]
  ------------------
  108|     16|    ctx->input[i + 4] = read32(key,i);
  109|     16|  }
  110|      2|  ctx->input[12] = 0;
  111|      2|  ctx->input[13] = 0;
  112|      2|  ctx->input[14] = (uint32_t)nonce;
  113|      2|  ctx->input[15] = (uint32_t)(nonce >> 32);
  114|      2|}
obmalloc.c:read32:
   92|     24|static inline uint32_t read32(const uint8_t* p, size_t idx32) {
   93|     24|  const size_t i = 4*idx32;
   94|     24|  return ((uint32_t)p[i+0] | (uint32_t)p[i+1] << 8 | (uint32_t)p[i+2] << 16 | (uint32_t)p[i+3] << 24);
   95|     24|}

mi_stats_reset:
  386|      2|void mi_stats_reset(void) mi_attr_noexcept {
  387|      2|  mi_stats_t* stats = mi_stats_get_default();
  388|      2|  if (stats != &_mi_stats_main) { memset(stats, 0, sizeof(mi_stats_t)); }
  ------------------
  |  Branch (388:7): [True: 2, False: 0]
  ------------------
  389|      2|  memset(&_mi_stats_main, 0, sizeof(mi_stats_t));
  390|      2|  if (mi_process_start == 0) { mi_process_start = _mi_clock_start(); };
  ------------------
  |  Branch (390:7): [True: 2, False: 0]
  ------------------
  391|      2|}
_mi_clock_now:
  422|      6|mi_msecs_t _mi_clock_now(void) {
  423|      6|  return _mi_prim_clock_now();
  424|      6|}
_mi_clock_start:
  426|      2|mi_msecs_t _mi_clock_start(void) {
  427|      2|  if (mi_clock_diff == 0.0) {
  ------------------
  |  Branch (427:7): [True: 2, False: 0]
  ------------------
  428|      2|    mi_msecs_t t0 = _mi_clock_now();
  429|      2|    mi_clock_diff = _mi_clock_now() - t0;
  430|      2|  }
  431|      2|  return _mi_clock_now();
  432|      2|}
obmalloc.c:mi_stats_get_default:
  374|      2|static mi_stats_t* mi_stats_get_default(void) {
  375|      2|  mi_heap_t* heap = mi_heap_get_default();
  376|      2|  return &heap->tld->stats;
  377|      2|}

PyModuleDef_Init:
   83|     94|{
   84|       |#ifdef Py_GIL_DISABLED
   85|       |    // Check that this def does not come from a non-free-threading ABI.
   86|       |    //
   87|       |    // This is meant as a "sanity check"; users should never rely on it.
   88|       |    // In particular, if we run out of ob_flags bits, or otherwise need to
   89|       |    // change some of the internals, this check can go away. Still, it
   90|       |    // would be nice to keep it for the free-threading transition.
   91|       |    //
   92|       |    // A PyModuleDef must be initialized with PyModuleDef_HEAD_INIT,
   93|       |    // which (via PyObject_HEAD_INIT) sets _Py_STATICALLY_ALLOCATED_FLAG
   94|       |    // and not _Py_LEGACY_ABI_CHECK_FLAG. For PyModuleDef, these flags never
   95|       |    // change.
   96|       |    // This means that the lower nibble of a valid PyModuleDef's ob_flags is
   97|       |    // always `_10_` (in binary; `_` is don't care).
   98|       |    //
   99|       |    // So, a check for these bits won't reject valid PyModuleDef.
  100|       |    // Rejecting incompatible extensions is slightly less important; here's
  101|       |    // how that works:
  102|       |    //
  103|       |    // In the pre-free-threading stable ABI, PyModuleDef_HEAD_INIT is big
  104|       |    // enough to overlap with free-threading ABI's ob_flags, is all zeros
  105|       |    // except for the refcount field.
  106|       |    // The refcount field can be:
  107|       |    // - 1 (3.11 and below)
  108|       |    // - UINT_MAX >> 2 (32-bit 3.12 & 3.13)
  109|       |    // - UINT_MAX (64-bit 3.12 & 3.13)
  110|       |    // - 7L << 28 (3.14)
  111|       |    //
  112|       |    // This means that the lower nibble of *any byte* in PyModuleDef_HEAD_INIT
  113|       |    // is not `_10_` -- it can be:
  114|       |    // - 0b0000
  115|       |    // - 0b0001
  116|       |    // - 0b0011 (from UINT_MAX >> 2)
  117|       |    // - 0b0111 (from 7L << 28)
  118|       |    // - 0b1111 (e.g. from UINT_MAX)
  119|       |    // (The values may change at runtime as the PyModuleDef is used, but
  120|       |    // PyModuleDef_Init is required before using the def as a Python object,
  121|       |    // so we check at least once with the initial values.
  122|       |    uint16_t flags = ((PyObject*)def)->ob_flags;
  123|       |    uint16_t bits = _Py_STATICALLY_ALLOCATED_FLAG | _Py_LEGACY_ABI_CHECK_FLAG;
  124|       |    if ((flags & bits) != _Py_STATICALLY_ALLOCATED_FLAG) {
  125|       |        const char *message = "invalid PyModuleDef, extension possibly "
  126|       |            "compiled for non-free-threaded Python";
  127|       |        // Write the error as unraisable: if the extension tries calling
  128|       |        // any API, it's likely to segfault and lose the exception.
  129|       |        PyErr_SetString(PyExc_SystemError, message);
  130|       |        PyErr_WriteUnraisable(NULL);
  131|       |        // But also raise the exception normally -- this is technically
  132|       |        // a recoverable state.
  133|       |        PyErr_SetString(PyExc_SystemError, message);
  134|       |        return NULL;
  135|       |    }
  136|       |#endif
  137|     94|    assert(PyModuleDef_Type.tp_flags & Py_TPFLAGS_READY);
  ------------------
  |  Branch (137:5): [True: 94, False: 0]
  ------------------
  138|     94|    if (def->m_base.m_index == 0) {
  ------------------
  |  Branch (138:9): [True: 51, False: 43]
  ------------------
  139|     51|        Py_SET_REFCNT(def, 1);
  ------------------
  |  |  201|     51|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|     51|        Py_SET_TYPE(def, &PyModuleDef_Type);
  ------------------
  |  |  217|     51|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|     51|        def->m_base.m_index = _PyImport_GetNextModuleIndex();
  142|     51|    }
  143|     94|    return (PyObject*)def;
  144|     94|}
_PyModule_InitModuleDictWatcher:
  220|      2|{
  221|       |    // This is a reserved watcher for CPython so there's no need to check for non-NULL.
  222|      2|    assert(interp->dict_state.watchers[MODULE_WATCHER_ID] == NULL);
  ------------------
  |  Branch (222:5): [True: 2, False: 0]
  ------------------
  223|      2|    interp->dict_state.watchers[MODULE_WATCHER_ID] = &module_dict_watcher;
  ------------------
  |  |  306|      2|#define MODULE_WATCHER_ID       2
  ------------------
  224|      2|    return 0;
  225|      2|}
PyModule_NewObject:
  248|     57|{
  249|     57|    PyModuleObject *m = new_module_notrack(&PyModule_Type);
  250|     57|    if (m == NULL)
  ------------------
  |  Branch (250:9): [True: 0, False: 57]
  ------------------
  251|      0|        return NULL;
  252|     57|    if (module_init_dict(m, m->md_dict, name, NULL) != 0)
  ------------------
  |  Branch (252:9): [True: 0, False: 57]
  ------------------
  253|      0|        goto fail;
  254|     57|    track_module(m);
  255|     57|    return (PyObject *)m;
  256|       |
  257|      0| fail:
  258|      0|    Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|       |    return NULL;
  260|     57|}
PyModule_New:
  264|      8|{
  265|      8|    PyObject *nameobj, *module;
  266|      8|    nameobj = PyUnicode_FromString(name);
  267|      8|    if (nameobj == NULL)
  ------------------
  |  Branch (267:9): [True: 0, False: 8]
  ------------------
  268|      0|        return NULL;
  269|      8|    module = PyModule_NewObject(nameobj);
  270|      8|    Py_DECREF(nameobj);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|      8|    return module;
  272|      8|}
_PyModule_CreateInitialized:
  347|      8|{
  348|      8|    const char* name;
  349|      8|    PyModuleObject *m;
  350|       |
  351|      8|    if (!PyModuleDef_Init(module))
  ------------------
  |  Branch (351:9): [True: 0, False: 8]
  ------------------
  352|      0|        return NULL;
  353|      8|    name = module->m_name;
  354|      8|    if (!check_api_version(name, module_api_version)) {
  ------------------
  |  Branch (354:9): [True: 0, False: 8]
  ------------------
  355|      0|        return NULL;
  356|      0|    }
  357|      8|    if (module->m_slots) {
  ------------------
  |  Branch (357:9): [True: 0, False: 8]
  ------------------
  358|      0|        PyErr_Format(
  359|      0|            PyExc_SystemError,
  360|      0|            "module %s: PyModule_Create is incompatible with m_slots", name);
  361|      0|        return NULL;
  362|      0|    }
  363|      8|    name = _PyImport_ResolveNameWithPackageContext(name);
  364|       |
  365|      8|    m = (PyModuleObject*)PyModule_New(name);
  366|      8|    if (m == NULL)
  ------------------
  |  Branch (366:9): [True: 0, False: 8]
  ------------------
  367|      0|        return NULL;
  368|       |
  369|      8|    if (module->m_size > 0) {
  ------------------
  |  Branch (369:9): [True: 0, False: 8]
  ------------------
  370|      0|        m->md_state = PyMem_Malloc(module->m_size);
  371|      0|        if (!m->md_state) {
  ------------------
  |  Branch (371:13): [True: 0, False: 0]
  ------------------
  372|      0|            PyErr_NoMemory();
  373|      0|            Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|      0|            return NULL;
  375|      0|        }
  376|      0|        memset(m->md_state, 0, module->m_size);
  377|      0|    }
  378|       |
  379|      8|    if (module->m_methods != NULL) {
  ------------------
  |  Branch (379:9): [True: 8, False: 0]
  ------------------
  380|      8|        if (PyModule_AddFunctions((PyObject *) m, module->m_methods) != 0) {
  ------------------
  |  Branch (380:13): [True: 0, False: 8]
  ------------------
  381|      0|            Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  382|      0|            return NULL;
  383|      0|        }
  384|      8|    }
  385|      8|    if (module->m_doc != NULL) {
  ------------------
  |  Branch (385:9): [True: 6, False: 2]
  ------------------
  386|      6|        if (PyModule_SetDocString((PyObject *) m, module->m_doc) != 0) {
  ------------------
  |  Branch (386:13): [True: 0, False: 6]
  ------------------
  387|      0|            Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|      0|            return NULL;
  389|      0|        }
  390|      6|    }
  391|      8|    m->md_token = module;
  392|      8|    m->md_token_is_def = true;
  393|      8|    module_copy_members_from_deflike(m, module);
  394|       |#ifdef Py_GIL_DISABLED
  395|       |    m->md_requires_gil = true;
  396|       |#endif
  397|      8|    return (PyObject*)m;
  398|      8|}
PyModule_FromDefAndSpec2:
  671|     43|{
  672|     43|    PyModuleDef_Init(def);
  673|       |    return module_from_slots_and_spec(NULL, spec, module_api_version, def);
  674|     43|}
PyModule_Exec:
  753|     43|{
  754|     43|    if (alloc_state(module) < 0) {
  ------------------
  |  Branch (754:9): [True: 0, False: 43]
  ------------------
  755|      0|        return -1;
  756|      0|    }
  757|     43|    PyModuleObject *md = (PyModuleObject*)module;
  758|     43|    if (md->md_exec) {
  ------------------
  |  Branch (758:9): [True: 0, False: 43]
  ------------------
  759|      0|        assert(!md->md_token_is_def);
  ------------------
  |  Branch (759:9): [True: 0, False: 0]
  ------------------
  760|      0|        return run_exec_func(module, md->md_exec);
  761|      0|    }
  762|       |
  763|     43|    PyModuleDef *def = _PyModule_GetDefOrNull(module);
  764|     43|    if (def) {
  ------------------
  |  Branch (764:9): [True: 43, False: 0]
  ------------------
  765|     43|        return PyModule_ExecDef(module, def);
  766|     43|    }
  767|      0|    return 0;
  768|     43|}
PyModule_ExecDef:
  772|     43|{
  773|     43|    if (alloc_state(module) < 0) {
  ------------------
  |  Branch (773:9): [True: 0, False: 43]
  ------------------
  774|      0|        return -1;
  775|      0|    }
  776|       |
  777|     43|    assert(PyModule_Check(module));
  ------------------
  |  Branch (777:5): [True: 43, False: 0]
  ------------------
  778|       |
  779|     43|    if (def->m_slots == NULL) {
  ------------------
  |  Branch (779:9): [True: 0, False: 43]
  ------------------
  780|      0|        return 0;
  781|      0|    }
  782|       |
  783|     43|    _PySlotIterator it;
  784|     43|    _PySlotIterator_InitLegacy(&it, def->m_slots, _PySlot_KIND_MOD);
  785|    209|    while (_PySlotIterator_Next(&it)) {
  ------------------
  |  Branch (785:12): [True: 166, False: 43]
  ------------------
  786|    166|        _Py_modexecfunc func;
  787|    166|        switch (it.current.sl_id) {
  ------------------
  |  Branch (787:17): [True: 41, False: 125]
  ------------------
  788|      0|            case Py_slot_invalid:
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  |  Branch (788:13): [True: 0, False: 166]
  ------------------
  789|      0|                return -1;
  790|     41|            case Py_mod_exec:
  ------------------
  |  |   93|     41|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|     41|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (790:13): [True: 41, False: 125]
  ------------------
  791|     41|                func = (_Py_modexecfunc)it.current.sl_func;
  792|     41|                if (run_exec_func(module, func) < 0) {
  ------------------
  |  Branch (792:21): [True: 0, False: 41]
  ------------------
  793|      0|                    return -1;
  794|      0|                }
  795|     41|                break;
  796|    166|        }
  797|    166|    }
  798|     43|    return 0;
  799|     43|}
PyModule_AddFunctions:
  803|      8|{
  804|      8|    int res;
  805|      8|    PyObject *name = PyModule_GetNameObject(m);
  806|      8|    if (name == NULL) {
  ------------------
  |  Branch (806:9): [True: 0, False: 8]
  ------------------
  807|      0|        return -1;
  808|      0|    }
  809|       |
  810|      8|    res = _add_methods_to_object(m, name, functions);
  811|      8|    Py_DECREF(name);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  812|      8|    return res;
  813|      8|}
PyModule_SetDocString:
  817|     40|{
  818|     40|    PyObject *v;
  819|       |
  820|     40|    v = PyUnicode_FromString(doc);
  821|     40|    if (v == NULL || PyObject_SetAttr(m, &_Py_ID(__doc__), v) != 0) {
  ------------------
  |  |  936|     40|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     40|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     40|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (821:9): [True: 0, False: 40]
  |  Branch (821:22): [True: 0, False: 40]
  ------------------
  822|      0|        Py_XDECREF(v);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  823|      0|        return -1;
  824|      0|    }
  825|     40|    Py_DECREF(v);
  ------------------
  |  |  430|     40|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  826|     40|    return 0;
  827|     40|}
PyModule_GetDict:
  831|    821|{
  832|    821|    if (!PyModule_Check(m)) {
  ------------------
  |  |   12|    821|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|    821|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    821|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    821|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (832:9): [True: 0, False: 821]
  ------------------
  833|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  834|      0|        return NULL;
  835|      0|    }
  836|    821|    return _PyModule_GetDict(m);  // borrowed reference
  837|    821|}
PyModule_GetNameObject:
  877|      8|{
  878|      8|    if (!PyModule_Check(mod)) {
  ------------------
  |  |   12|      8|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      8|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (878:9): [True: 0, False: 8]
  ------------------
  879|      0|        PyErr_BadArgument();
  880|      0|        return NULL;
  881|      0|    }
  882|      8|    PyObject *dict = ((PyModuleObject *)mod)->md_dict;  // borrowed reference
  883|      8|    if (dict == NULL || !PyDict_Check(dict)) {
  ------------------
  |  |   18|      8|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      8|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (883:9): [True: 0, False: 8]
  |  Branch (883:25): [True: 0, False: 8]
  ------------------
  884|      0|        goto error;
  885|      0|    }
  886|      8|    PyObject *name;
  887|      8|    if (PyDict_GetItemRef(dict, &_Py_ID(__name__), &name) <= 0) {
  ------------------
  |  |  936|      8|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      8|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      8|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (887:9): [True: 0, False: 8]
  ------------------
  888|       |        // error or not found
  889|      0|        goto error;
  890|      0|    }
  891|      8|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|      8|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      8|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (891:9): [True: 0, False: 8]
  ------------------
  892|      0|        Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  893|      0|        goto error;
  894|      0|    }
  895|      8|    return name;
  896|       |
  897|      0|error:
  898|      0|    if (!PyErr_Occurred()) {
  ------------------
  |  Branch (898:9): [True: 0, False: 0]
  ------------------
  899|      0|        PyErr_SetString(PyExc_SystemError, "nameless module");
  900|      0|    }
  901|       |    return NULL;
  902|      8|}
_PyModule_GetFilenameObject:
  918|      1|{
  919|       |    // We return None to indicate "not found" or "bogus".
  920|      1|    if (!PyModule_Check(mod)) {
  ------------------
  |  |   12|      1|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      1|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (920:9): [True: 0, False: 1]
  ------------------
  921|      0|        PyErr_BadArgument();
  922|      0|        return NULL;
  923|      0|    }
  924|      1|    PyObject *dict = ((PyModuleObject *)mod)->md_dict;  // borrowed reference
  925|      1|    if (dict == NULL) {
  ------------------
  |  Branch (925:9): [True: 0, False: 1]
  ------------------
  926|       |        // The module has been tampered with.
  927|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  928|      0|    }
  929|      1|    PyObject *fileobj;
  930|      1|    int res = PyDict_GetItemRef(dict, &_Py_ID(__file__), &fileobj);
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|      1|    if (res < 0) {
  ------------------
  |  Branch (931:9): [True: 0, False: 1]
  ------------------
  932|      0|        return NULL;
  933|      0|    }
  934|      1|    if (res == 0) {
  ------------------
  |  Branch (934:9): [True: 1, False: 0]
  ------------------
  935|       |        // __file__ isn't set.  There are several reasons why this might
  936|       |        // be so, most of them valid reasons.  If it's the __main__
  937|       |        // module then we're running the REPL or with -c.  Otherwise
  938|       |        // it's a namespace package or other module with a loader that
  939|       |        // isn't disk-based.  It could also be that a user created
  940|       |        // a module manually but without manually setting __file__.
  941|      1|        Py_RETURN_NONE;
  ------------------
  |  |  628|      1|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  942|      1|    }
  943|      0|    if (!PyUnicode_Check(fileobj)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (943:9): [True: 0, False: 0]
  ------------------
  944|      0|        Py_DECREF(fileobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  945|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  946|      0|    }
  947|      0|    return fileobj;
  948|      0|}
PyModule_GetFilenameObject:
  952|      1|{
  953|      1|    PyObject *fileobj = _PyModule_GetFilenameObject(mod);
  954|      1|    if (fileobj == NULL) {
  ------------------
  |  Branch (954:9): [True: 0, False: 1]
  ------------------
  955|      0|        return NULL;
  956|      0|    }
  957|      1|    if (fileobj == Py_None) {
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (957:9): [True: 1, False: 0]
  ------------------
  958|      1|        PyErr_SetString(PyExc_SystemError, "module filename missing");
  959|      1|        return NULL;
  960|      1|    }
  961|      0|    return fileobj;
  962|      1|}
PyModule_GetState:
 1029|    162|{
 1030|    162|    if (!PyModule_Check(m)) {
  ------------------
  |  |   12|    162|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|    162|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1030:9): [True: 0, False: 162]
  ------------------
 1031|      0|        PyErr_BadArgument();
 1032|      0|        return NULL;
 1033|      0|    }
 1034|    162|    return _PyModule_GetState(m);
 1035|    162|}
_PyModuleSpec_IsInitializing:
 1175|   443k|{
 1176|   443k|    if (spec == NULL) {
  ------------------
  |  Branch (1176:9): [True: 0, False: 443k]
  ------------------
 1177|      0|        return 0;
 1178|      0|    }
 1179|   443k|    PyObject *value;
 1180|   443k|    int rc = PyObject_GetOptionalAttr(spec, &_Py_ID(_initializing), &value);
  ------------------
  |  |  936|   443k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   443k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   443k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1181|   443k|    if (rc > 0) {
  ------------------
  |  Branch (1181:9): [True: 343k, False: 100k]
  ------------------
 1182|   343k|        rc = PyObject_IsTrue(value);
 1183|   343k|        Py_DECREF(value);
  ------------------
  |  |  430|   343k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   343k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   343k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|   343k|    }
 1185|   443k|    return rc;
 1186|   443k|}
_PyModuleSpec_IsUninitializedSubmodule:
 1193|    155|{
 1194|    155|    if (spec == NULL) {
  ------------------
  |  Branch (1194:9): [True: 0, False: 155]
  ------------------
 1195|      0|         return 0;
 1196|      0|    }
 1197|       |
 1198|    155|    PyObject *value;
 1199|    155|    int rc = PyObject_GetOptionalAttr(spec, &_Py_ID(_uninitialized_submodules), &value);
  ------------------
  |  |  936|    155|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    155|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    155|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1200|    155|    if (rc > 0) {
  ------------------
  |  Branch (1200:9): [True: 135, False: 20]
  ------------------
 1201|    135|        rc = PySequence_Contains(value, name);
 1202|    135|        Py_DECREF(value);
  ------------------
  |  |  430|    135|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    135|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    135|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1203|    135|    }
 1204|    155|    return rc;
 1205|    155|}
_PyModuleSpec_GetFileOrigin:
 1209|    156|{
 1210|    156|    PyObject *has_location = NULL;
 1211|    156|    int rc = PyObject_GetOptionalAttr(spec, &_Py_ID(has_location), &has_location);
  ------------------
  |  |  936|    156|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    156|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    156|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1212|    156|    if (rc <= 0) {
  ------------------
  |  Branch (1212:9): [True: 20, False: 136]
  ------------------
 1213|     20|        return rc;
 1214|     20|    }
 1215|       |    // If origin is not a location, or doesn't exist, or is not a str, we could consider falling
 1216|       |    // back to module.__file__. But the cases in which module.__file__ is not __spec__.origin
 1217|       |    // are cases in which we probably shouldn't be guessing.
 1218|    136|    rc = PyObject_IsTrue(has_location);
 1219|    136|    Py_DECREF(has_location);
  ------------------
  |  |  430|    136|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    136|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1220|    136|    if (rc <= 0) {
  ------------------
  |  Branch (1220:9): [True: 3, False: 133]
  ------------------
 1221|      3|        return rc;
 1222|      3|    }
 1223|       |    // has_location is true, so origin is a location
 1224|    133|    PyObject *origin = NULL;
 1225|    133|    rc = PyObject_GetOptionalAttr(spec, &_Py_ID(origin), &origin);
  ------------------
  |  |  936|    133|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    133|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    133|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1226|    133|    if (rc <= 0) {
  ------------------
  |  Branch (1226:9): [True: 0, False: 133]
  ------------------
 1227|      0|        return rc;
 1228|      0|    }
 1229|    133|    assert(origin != NULL);
  ------------------
  |  Branch (1229:5): [True: 133, False: 0]
  ------------------
 1230|    133|    if (!PyUnicode_Check(origin)) {
  ------------------
  |  |  103|    133|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    133|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1230:9): [True: 0, False: 133]
  ------------------
 1231|      0|        Py_DECREF(origin);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1232|      0|        return 0;
 1233|      0|    }
 1234|    133|    *p_origin = origin;
 1235|    133|    return 1;
 1236|    133|}
_PyModule_IsPossiblyShadowing:
 1240|    156|{
 1241|       |    // origin must be a unicode subtype
 1242|       |    // Returns 1 if the module at origin could be shadowing a module of the
 1243|       |    // same name later in the module search path. The condition we check is basically:
 1244|       |    // root = os.path.dirname(origin.removesuffix(os.sep + "__init__.py"))
 1245|       |    // return not sys.flags.safe_path and root == (sys.path[0] or os.getcwd())
 1246|       |    // Returns 0 otherwise (or if we aren't sure)
 1247|       |    // Returns -1 if an error occurred that should be propagated
 1248|    156|    if (origin == NULL) {
  ------------------
  |  Branch (1248:9): [True: 23, False: 133]
  ------------------
 1249|     23|        return 0;
 1250|     23|    }
 1251|       |
 1252|       |    // not sys.flags.safe_path
 1253|    133|    const PyConfig *config = _Py_GetConfig();
 1254|    133|    if (config->safe_path) {
  ------------------
  |  Branch (1254:9): [True: 0, False: 133]
  ------------------
 1255|      0|        return 0;
 1256|      0|    }
 1257|       |
 1258|       |    // root = os.path.dirname(origin.removesuffix(os.sep + "__init__.py"))
 1259|    133|    wchar_t root[MAXPATHLEN + 1];
 1260|    133|    Py_ssize_t size = PyUnicode_AsWideChar(origin, root, MAXPATHLEN);
  ------------------
  |  |   43|    133|#    define MAXPATHLEN PATH_MAX
  ------------------
 1261|    133|    if (size < 0) {
  ------------------
  |  Branch (1261:9): [True: 0, False: 133]
  ------------------
 1262|      0|        return -1;
 1263|      0|    }
 1264|    133|    assert(size <= MAXPATHLEN);
  ------------------
  |  Branch (1264:5): [True: 133, False: 0]
  ------------------
 1265|    133|    root[size] = L'\0';
 1266|       |
 1267|    133|    wchar_t *sep = wcsrchr(root, SEP);
  ------------------
  |  |   29|    133|#  define SEP L'/'
  ------------------
 1268|    133|    if (sep == NULL) {
  ------------------
  |  Branch (1268:9): [True: 0, False: 133]
  ------------------
 1269|      0|        return 0;
 1270|      0|    }
 1271|       |    // If it's a package then we need to look one directory further up
 1272|    133|    if (wcscmp(sep + 1, L"__init__.py") == 0) {
  ------------------
  |  Branch (1272:9): [True: 0, False: 133]
  ------------------
 1273|      0|        *sep = L'\0';
 1274|      0|        sep = wcsrchr(root, SEP);
  ------------------
  |  |   29|      0|#  define SEP L'/'
  ------------------
 1275|      0|        if (sep == NULL) {
  ------------------
  |  Branch (1275:13): [True: 0, False: 0]
  ------------------
 1276|      0|            return 0;
 1277|      0|        }
 1278|      0|    }
 1279|    133|    *sep = L'\0';
 1280|       |
 1281|       |    // sys.path[0] or os.getcwd()
 1282|    133|    wchar_t *sys_path_0 = config->sys_path_0;
 1283|    133|    if (!sys_path_0) {
  ------------------
  |  Branch (1283:9): [True: 133, False: 0]
  ------------------
 1284|    133|        return 0;
 1285|    133|    }
 1286|       |
 1287|      0|    wchar_t sys_path_0_buf[MAXPATHLEN];
 1288|      0|    if (sys_path_0[0] == L'\0') {
  ------------------
  |  Branch (1288:9): [True: 0, False: 0]
  ------------------
 1289|       |        // if sys.path[0] == "", treat it as if it were the current directory
 1290|      0|        if (!_Py_wgetcwd(sys_path_0_buf, MAXPATHLEN)) {
  ------------------
  |  |   43|      0|#    define MAXPATHLEN PATH_MAX
  ------------------
  |  Branch (1290:13): [True: 0, False: 0]
  ------------------
 1291|       |            // If we failed to getcwd, don't raise an exception and instead
 1292|       |            // let the caller proceed assuming no shadowing
 1293|      0|            return 0;
 1294|      0|        }
 1295|      0|        sys_path_0 = sys_path_0_buf;
 1296|      0|    }
 1297|       |
 1298|      0|    int result = wcscmp(sys_path_0, root) == 0;
 1299|      0|    return result;
 1300|      0|}
_Py_module_getattro_impl:
 1332|   700k|{
 1333|       |    // When suppress=1, this function suppresses AttributeError.
 1334|   700k|    PyObject *attr, *mod_name, *getattr;
 1335|   700k|    attr = _PyObject_GenericGetAttrWithDict((PyObject *)m, name, NULL, suppress);
 1336|   700k|    if (attr) {
  ------------------
  |  Branch (1336:9): [True: 699k, False: 700]
  ------------------
 1337|   699k|        if (PyLazyImport_CheckExact(attr)) {
  ------------------
  |  |   15|   699k|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |  215|   699k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   699k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   699k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 699k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1338|       |            // gh-144957: Module __getattr__ should get a chance to provide
 1339|       |            // the attribute before resolving a lazy import placeholder.
 1340|      0|            if (PyDict_GetItemRef(m->md_dict, &_Py_ID(__getattr__), &getattr) < 0) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1340:17): [True: 0, False: 0]
  ------------------
 1341|      0|                Py_DECREF(attr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1342|      0|                return NULL;
 1343|      0|            }
 1344|      0|            if (getattr) {
  ------------------
  |  Branch (1344:17): [True: 0, False: 0]
  ------------------
 1345|      0|                PyObject *result = PyObject_CallOneArg(getattr, name);
 1346|      0|                Py_DECREF(getattr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1347|      0|                if (result != NULL) {
  ------------------
  |  Branch (1347:21): [True: 0, False: 0]
  ------------------
 1348|      0|                    Py_DECREF(attr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1349|      0|                    return result;
 1350|      0|                }
 1351|      0|                if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1351:21): [True: 0, False: 0]
  ------------------
 1352|      0|                    Py_DECREF(attr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1353|      0|                    return NULL;
 1354|      0|                }
 1355|      0|                PyErr_Clear();
 1356|      0|            }
 1357|      0|            PyObject *new_value = _PyImport_LoadLazyImportTstate(
 1358|      0|                PyThreadState_GET(), attr);
  ------------------
  |  |   63|      0|#define PyThreadState_GET() PyThreadState_Get()
  ------------------
 1359|      0|            if (new_value == NULL) {
  ------------------
  |  Branch (1359:17): [True: 0, False: 0]
  ------------------
 1360|      0|                if (suppress &&
  ------------------
  |  Branch (1360:21): [True: 0, False: 0]
  ------------------
 1361|      0|                    PyErr_ExceptionMatches(PyExc_ImportCycleError)) {
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|       |                    // ImportCycleError is raised when a lazy object tries
 1363|       |                    // to import itself. In this case, the error should not
 1364|       |                    // propagate to the caller and instead treated as if the
 1365|       |                    // attribute doesn't exist.
 1366|      0|                    PyErr_Clear();
 1367|      0|                }
 1368|      0|                Py_DECREF(attr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1369|      0|                return NULL;
 1370|      0|            }
 1371|       |
 1372|      0|            if (PyDict_SetItem(m->md_dict, name, new_value) < 0) {
  ------------------
  |  Branch (1372:17): [True: 0, False: 0]
  ------------------
 1373|      0|                Py_CLEAR(new_value);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1374|      0|            }
 1375|      0|            Py_DECREF(attr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1376|      0|            return new_value;
 1377|      0|        }
 1378|   699k|        return attr;
 1379|   699k|    }
 1380|    700|    if (suppress == 1) {
  ------------------
  |  Branch (1380:9): [True: 545, False: 155]
  ------------------
 1381|    545|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1381:13): [True: 0, False: 545]
  ------------------
 1382|       |            // pass up non-AttributeError exception
 1383|      0|            return NULL;
 1384|      0|        }
 1385|    545|    }
 1386|    155|    else {
 1387|    155|        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1387:13): [True: 0, False: 155]
  ------------------
 1388|       |            // pass up non-AttributeError exception
 1389|      0|            return NULL;
 1390|      0|        }
 1391|    155|        PyErr_Clear();
 1392|    155|    }
 1393|    700|    assert(m->md_dict != NULL);
  ------------------
  |  Branch (1393:5): [True: 700, False: 0]
  ------------------
 1394|    700|    attr = try_load_lazy_submodule(m, name);
 1395|    700|    if (attr != NULL) {
  ------------------
  |  Branch (1395:9): [True: 0, False: 700]
  ------------------
 1396|      0|        return attr;
 1397|      0|    }
 1398|    700|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1398:9): [True: 0, False: 700]
  ------------------
 1399|      0|        return NULL;
 1400|      0|    }
 1401|    700|    if (PyDict_GetItemRef(m->md_dict, &_Py_ID(__getattr__), &getattr) < 0) {
  ------------------
  |  |  936|    700|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    700|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    700|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1401:9): [True: 0, False: 700]
  ------------------
 1402|      0|        return NULL;
 1403|      0|    }
 1404|    700|    if (getattr) {
  ------------------
  |  Branch (1404:9): [True: 7, False: 693]
  ------------------
 1405|      7|        PyObject *result = PyObject_CallOneArg(getattr, name);
 1406|      7|        if (result == NULL && suppress == 1 && PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1406:13): [True: 7, False: 0]
  |  Branch (1406:31): [True: 7, False: 0]
  |  Branch (1406:48): [True: 7, False: 0]
  ------------------
 1407|       |            // suppress AttributeError
 1408|      7|            PyErr_Clear();
 1409|      7|        }
 1410|      7|        Py_DECREF(getattr);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1411|      7|        return result;
 1412|      7|    }
 1413|       |
 1414|       |    // The attribute was not found.  We make a best effort attempt at a useful error message,
 1415|       |    // but only if we're not suppressing AttributeError.
 1416|    693|    if (suppress == 1) {
  ------------------
  |  Branch (1416:9): [True: 538, False: 155]
  ------------------
 1417|    538|        return NULL;
 1418|    538|    }
 1419|    155|    if (PyDict_GetItemRef(m->md_dict, &_Py_ID(__name__), &mod_name) < 0) {
  ------------------
  |  |  936|    155|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    155|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    155|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1419:9): [True: 0, False: 155]
  ------------------
 1420|      0|        return NULL;
 1421|      0|    }
 1422|    155|    if (!mod_name || !PyUnicode_Check(mod_name)) {
  ------------------
  |  |  103|    155|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    155|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1422:9): [True: 0, False: 155]
  |  Branch (1422:22): [True: 0, False: 155]
  ------------------
 1423|      0|        Py_XDECREF(mod_name);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|      0|        PyErr_Format(PyExc_AttributeError,
 1425|      0|                    "module has no attribute '%U'", name);
 1426|      0|        return NULL;
 1427|      0|    }
 1428|    155|    PyObject *spec;
 1429|    155|    if (PyDict_GetItemRef(m->md_dict, &_Py_ID(__spec__), &spec) < 0) {
  ------------------
  |  |  936|    155|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    155|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    155|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1429:9): [True: 0, False: 155]
  ------------------
 1430|      0|        Py_DECREF(mod_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1431|      0|        return NULL;
 1432|      0|    }
 1433|    155|    if (spec == NULL) {
  ------------------
  |  Branch (1433:9): [True: 0, False: 155]
  ------------------
 1434|      0|        PyErr_Format(PyExc_AttributeError,
 1435|      0|                     "module '%U' has no attribute '%U'",
 1436|      0|                     mod_name, name);
 1437|      0|        Py_DECREF(mod_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1438|      0|        return NULL;
 1439|      0|    }
 1440|       |
 1441|    155|    PyObject *origin = NULL;
 1442|    155|    if (_PyModuleSpec_GetFileOrigin(spec, &origin) < 0) {
  ------------------
  |  Branch (1442:9): [True: 0, False: 155]
  ------------------
 1443|      0|        goto done;
 1444|      0|    }
 1445|       |
 1446|    155|    int is_possibly_shadowing = _PyModule_IsPossiblyShadowing(origin);
 1447|    155|    if (is_possibly_shadowing < 0) {
  ------------------
  |  Branch (1447:9): [True: 0, False: 155]
  ------------------
 1448|      0|        goto done;
 1449|      0|    }
 1450|    155|    int is_possibly_shadowing_stdlib = 0;
 1451|    155|    if (is_possibly_shadowing) {
  ------------------
  |  Branch (1451:9): [True: 0, False: 155]
  ------------------
 1452|      0|        PyObject *stdlib_modules;
 1453|      0|        if (PySys_GetOptionalAttrString("stdlib_module_names", &stdlib_modules) < 0) {
  ------------------
  |  Branch (1453:13): [True: 0, False: 0]
  ------------------
 1454|      0|            goto done;
 1455|      0|        }
 1456|      0|        if (stdlib_modules && PyAnySet_Check(stdlib_modules)) {
  ------------------
  |  |   31|      0|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|      0|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|      0|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1456:13): [True: 0, False: 0]
  ------------------
 1457|      0|            is_possibly_shadowing_stdlib = PySet_Contains(stdlib_modules, mod_name);
 1458|      0|            if (is_possibly_shadowing_stdlib < 0) {
  ------------------
  |  Branch (1458:17): [True: 0, False: 0]
  ------------------
 1459|      0|                Py_DECREF(stdlib_modules);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1460|      0|                goto done;
 1461|      0|            }
 1462|      0|        }
 1463|      0|        Py_XDECREF(stdlib_modules);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1464|      0|    }
 1465|       |
 1466|    155|    if (is_possibly_shadowing_stdlib) {
  ------------------
  |  Branch (1466:9): [True: 0, False: 155]
  ------------------
 1467|      0|        assert(origin);
  ------------------
  |  Branch (1467:9): [True: 0, False: 0]
  ------------------
 1468|      0|        PyErr_Format(PyExc_AttributeError,
 1469|      0|                    "module '%U' has no attribute '%U' "
 1470|      0|                    "(consider renaming '%U' since it has the same "
 1471|      0|                    "name as the standard library module named '%U' "
 1472|      0|                    "and prevents importing that standard library module)",
 1473|      0|                    mod_name, name, origin, mod_name);
 1474|      0|    }
 1475|    155|    else {
 1476|    155|        int rc = _PyModuleSpec_IsInitializing(spec);
 1477|    155|        if (rc < 0) {
  ------------------
  |  Branch (1477:13): [True: 0, False: 155]
  ------------------
 1478|      0|            goto done;
 1479|      0|        }
 1480|    155|        else if (rc > 0) {
  ------------------
  |  Branch (1480:18): [True: 0, False: 155]
  ------------------
 1481|      0|            if (is_possibly_shadowing) {
  ------------------
  |  Branch (1481:17): [True: 0, False: 0]
  ------------------
 1482|      0|                assert(origin);
  ------------------
  |  Branch (1482:17): [True: 0, False: 0]
  ------------------
 1483|       |                // For non-stdlib modules, only mention the possibility of
 1484|       |                // shadowing if the module is being initialized.
 1485|      0|                PyErr_Format(PyExc_AttributeError,
 1486|      0|                            "module '%U' has no attribute '%U' "
 1487|      0|                            "(consider renaming '%U' if it has the same name "
 1488|      0|                            "as a library you intended to import)",
 1489|      0|                            mod_name, name, origin);
 1490|      0|            }
 1491|      0|            else if (origin) {
  ------------------
  |  Branch (1491:22): [True: 0, False: 0]
  ------------------
 1492|      0|                PyErr_Format(PyExc_AttributeError,
 1493|      0|                            "partially initialized "
 1494|      0|                            "module '%U' from '%U' has no attribute '%U' "
 1495|      0|                            "(most likely due to a circular import)",
 1496|      0|                            mod_name, origin, name);
 1497|      0|            }
 1498|      0|            else {
 1499|      0|                PyErr_Format(PyExc_AttributeError,
 1500|      0|                            "partially initialized "
 1501|      0|                            "module '%U' has no attribute '%U' "
 1502|      0|                            "(most likely due to a circular import)",
 1503|      0|                            mod_name, name);
 1504|      0|            }
 1505|      0|        }
 1506|    155|        else {
 1507|    155|            assert(rc == 0);
  ------------------
  |  Branch (1507:13): [True: 155, False: 0]
  ------------------
 1508|    155|            rc = _PyModuleSpec_IsUninitializedSubmodule(spec, name);
 1509|    155|            if (rc > 0) {
  ------------------
  |  Branch (1509:17): [True: 0, False: 155]
  ------------------
 1510|      0|                PyErr_Format(PyExc_AttributeError,
 1511|      0|                            "cannot access submodule '%U' of module '%U' "
 1512|      0|                            "(most likely due to a circular import)",
 1513|      0|                            name, mod_name);
 1514|      0|            }
 1515|    155|            else if (rc == 0) {
  ------------------
  |  Branch (1515:22): [True: 155, False: 0]
  ------------------
 1516|    155|                PyErr_Format(PyExc_AttributeError,
 1517|    155|                            "module '%U' has no attribute '%U'",
 1518|    155|                            mod_name, name);
 1519|    155|            }
 1520|    155|        }
 1521|    155|    }
 1522|       |
 1523|    155|done:
 1524|    155|    Py_XDECREF(origin);
  ------------------
  |  |  524|    155|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    155|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|    155|    Py_DECREF(spec);
  ------------------
  |  |  430|    155|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    155|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1526|    155|    Py_DECREF(mod_name);
  ------------------
  |  |  430|    155|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    155|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1527|       |    return NULL;
 1528|    155|}
_Py_module_getattro:
 1533|  60.4k|{
 1534|  60.4k|    PyModuleObject *m = _PyModule_CAST(self);
  ------------------
  |  |   24|  60.4k|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  60.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1534:25): [True: 60.4k, False: 0]
  ------------------
 1535|      0|    return _Py_module_getattro_impl(m, name, 0);
 1536|  60.4k|}
moduleobject.c:module_dict_watcher:
  206|  9.11k|{
  207|  9.11k|    assert(PyDict_Check(dict));
  ------------------
  |  Branch (207:5): [True: 9.11k, False: 0]
  ------------------
  208|       |    // Only if a new lazy object shows up do we need to clear the dictionary. If
  209|       |    // this is adding a new key then the version will be reset anyway.
  210|  9.11k|    if (event == PyDict_EVENT_MODIFIED &&
  ------------------
  |  Branch (210:9): [True: 1.22k, False: 7.88k]
  ------------------
  211|  1.22k|        new_value != NULL &&
  ------------------
  |  Branch (211:9): [True: 1.22k, False: 0]
  ------------------
  212|  1.22k|        PyLazyImport_CheckExact(new_value)) {
  ------------------
  |  |   15|  1.22k|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |  215|  1.22k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 1.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|      0|        _PyDict_ClearKeysVersionLockHeld(dict);
  214|      0|    }
  215|  9.11k|    return 0;
  216|  9.11k|}
moduleobject.c:new_module_notrack:
  173|    174|{
  174|    174|    PyModuleObject *m;
  175|    174|    m = (PyModuleObject *)_PyType_AllocNoTrack(mt, 0);
  176|    174|    if (m == NULL)
  ------------------
  |  Branch (176:9): [True: 0, False: 174]
  ------------------
  177|      0|        return NULL;
  178|    174|    m->md_state = NULL;
  179|    174|    m->md_weaklist = NULL;
  180|    174|    m->md_name = NULL;
  181|    174|    m->md_token_is_def = false;
  182|       |#ifdef Py_GIL_DISABLED
  183|       |    m->md_requires_gil = true;
  184|       |#endif
  185|    174|    m->md_state_size = 0;
  186|    174|    m->md_state_traverse = NULL;
  187|    174|    m->md_state_clear = NULL;
  188|    174|    m->md_state_free = NULL;
  189|    174|    m->md_exec = NULL;
  190|    174|    m->md_token = NULL;
  191|    174|    m->md_dict = PyDict_New();
  192|    174|    if (m->md_dict == NULL) {
  ------------------
  |  Branch (192:9): [True: 0, False: 174]
  ------------------
  193|      0|        Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|      0|        return NULL;
  195|      0|    }
  196|    174|    return m;
  197|    174|}
moduleobject.c:module_init_dict:
  149|    174|{
  150|    174|    assert(md_dict != NULL);
  ------------------
  |  Branch (150:5): [True: 174, False: 0]
  ------------------
  151|    174|    if (doc == NULL)
  ------------------
  |  Branch (151:9): [True: 57, False: 117]
  ------------------
  152|     57|        doc = Py_None;
  ------------------
  |  |  616|     57|#  define Py_None (&_Py_NoneStruct)
  ------------------
  153|       |
  154|    174|    if (PyDict_SetItem(md_dict, &_Py_ID(__name__), name) != 0)
  ------------------
  |  |  936|    174|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    174|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    174|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (154:9): [True: 0, False: 174]
  ------------------
  155|      0|        return -1;
  156|    174|    if (PyDict_SetItem(md_dict, &_Py_ID(__doc__), doc) != 0)
  ------------------
  |  |  936|    174|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    174|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    174|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (156:9): [True: 0, False: 174]
  ------------------
  157|      0|        return -1;
  158|    174|    if (PyDict_SetItem(md_dict, &_Py_ID(__package__), Py_None) != 0)
  ------------------
  |  |  936|    174|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    174|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    174|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyDict_SetItem(md_dict, &_Py_ID(__package__), Py_None) != 0)
  ------------------
  |  |  616|    174|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (158:9): [True: 0, False: 174]
  ------------------
  159|      0|        return -1;
  160|    174|    if (PyDict_SetItem(md_dict, &_Py_ID(__loader__), Py_None) != 0)
  ------------------
  |  |  936|    174|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    174|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    174|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyDict_SetItem(md_dict, &_Py_ID(__loader__), Py_None) != 0)
  ------------------
  |  |  616|    174|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (160:9): [True: 0, False: 174]
  ------------------
  161|      0|        return -1;
  162|    174|    if (PyDict_SetItem(md_dict, &_Py_ID(__spec__), Py_None) != 0)
  ------------------
  |  |  936|    174|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    174|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    174|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyDict_SetItem(md_dict, &_Py_ID(__spec__), Py_None) != 0)
  ------------------
  |  |  616|    174|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (162:9): [True: 0, False: 174]
  ------------------
  163|      0|        return -1;
  164|    174|    if (PyUnicode_CheckExact(name)) {
  ------------------
  |  |  104|    174|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    174|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    174|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    174|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 174, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|    174|        Py_XSETREF(mod->md_name, Py_NewRef(name));
  ------------------
  |  |  376|    174|    do { \
  |  |  377|    174|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    174|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    174|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    174|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    174|        *_tmp_dst_ptr = (src); \
  |  |  380|    174|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    174|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    174|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    174|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    174|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 174]
  |  |  ------------------
  ------------------
  166|    174|    }
  167|       |
  168|    174|    return 0;
  169|    174|}
moduleobject.c:track_module:
  229|    174|{
  230|    174|    _PyDict_EnablePerThreadRefcounting(m->md_dict);
  231|    174|    _PyObject_SetDeferredRefcount((PyObject *)m);
  232|    174|    PyDict_Watch(MODULE_WATCHER_ID, m->md_dict);
  ------------------
  |  |  306|    174|#define MODULE_WATCHER_ID       2
  ------------------
  233|    174|    PyObject_GC_Track(m);
  234|    174|}
moduleobject.c:check_api_version:
  280|     51|{
  281|     51|    if (module_api_version != PYTHON_API_VERSION && module_api_version != PYTHON_ABI_VERSION) {
  ------------------
  |  |   59|    102|#define PYTHON_API_VERSION 1013
  ------------------
                  if (module_api_version != PYTHON_API_VERSION && module_api_version != PYTHON_ABI_VERSION) {
  ------------------
  |  |   61|      0|#define PYTHON_ABI_VERSION 3
  ------------------
  |  Branch (281:9): [True: 0, False: 51]
  |  Branch (281:53): [True: 0, False: 0]
  ------------------
  282|      0|        int err;
  283|      0|        err = PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
  284|      0|            "Python C API version mismatch for module %.100s: "
  285|      0|            "This Python has API version %d, module %.100s has version %d.",
  286|      0|             name,
  287|      0|             PYTHON_API_VERSION, name, module_api_version);
  ------------------
  |  |   59|      0|#define PYTHON_API_VERSION 1013
  ------------------
  288|      0|        if (err)
  ------------------
  |  Branch (288:13): [True: 0, False: 0]
  ------------------
  289|      0|            return 0;
  290|      0|    }
  291|     51|    return 1;
  292|     51|}
moduleobject.c:module_copy_members_from_deflike:
  338|     51|{
  339|     51|    md->md_state_size = def_like->m_size;
  340|     51|    md->md_state_traverse = def_like->m_traverse;
  341|     51|    md->md_state_clear = def_like->m_clear;
  342|     51|    md->md_state_free = def_like->m_free;
  343|     51|}
moduleobject.c:module_from_slots_and_spec:
  408|     43|{
  409|     43|    createfunc_t create = NULL;
  410|     43|    PyObject *nameobj;
  411|     43|    PyObject *m = NULL;
  412|     43|    uint64_t multiple_interpreters = (uint64_t)Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED;
  ------------------
  |  |   81|     43|#  define Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED ((void *)1)
  ------------------
  413|     43|    bool requires_gil = true;
  414|     43|    const char *name;
  415|     43|    int ret;
  416|     43|    void *token = NULL;
  417|     43|    _Py_modexecfunc m_exec = NULL;
  418|     43|    PyInterpreterState *interp = _PyInterpreterState_GET();
  419|       |
  420|     43|    nameobj = PyObject_GetAttrString(spec, "name");
  421|     43|    if (nameobj == NULL) {
  ------------------
  |  Branch (421:9): [True: 0, False: 43]
  ------------------
  422|      0|        return NULL;
  423|      0|    }
  424|     43|    name = PyUnicode_AsUTF8(nameobj);
  425|     43|    if (name == NULL) {
  ------------------
  |  Branch (425:9): [True: 0, False: 43]
  ------------------
  426|      0|        goto error;
  427|      0|    }
  428|       |
  429|     43|    if (!check_api_version(name, module_api_version)) {
  ------------------
  |  Branch (429:9): [True: 0, False: 43]
  ------------------
  430|      0|        goto error;
  431|      0|    }
  432|       |
  433|     43|    _PySlotIterator it;
  434|       |
  435|     43|    PyModuleDef _dummy_def = {0};
  436|     43|    PyModuleDef *def_like;
  437|     43|    if (slots) {
  ------------------
  |  Branch (437:9): [True: 0, False: 43]
  ------------------
  438|      0|        assert(!original_def);
  ------------------
  |  Branch (438:9): [True: 0, False: 0]
  ------------------
  439|      0|        def_like = &_dummy_def;
  440|      0|         _PySlotIterator_Init(&it, slots, _PySlot_KIND_MOD);
  441|      0|    }
  442|     43|    else {
  443|     43|        assert(original_def);
  ------------------
  |  Branch (443:9): [True: 43, False: 0]
  ------------------
  444|     43|        def_like = original_def;
  445|     43|         _PySlotIterator_InitLegacy(&it, def_like->m_slots, _PySlot_KIND_MOD);
  446|     43|    }
  447|     43|    it.name = name;
  448|       |
  449|    209|    while (_PySlotIterator_Next(&it)) {
  ------------------
  |  Branch (449:12): [True: 166, False: 43]
  ------------------
  450|    166|        switch (it.current.sl_id) {
  ------------------
  |  Branch (450:17): [True: 166, False: 0]
  ------------------
  451|      0|            case Py_slot_invalid:
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  |  Branch (451:13): [True: 0, False: 166]
  ------------------
  452|      0|                goto error;
  453|      0|            case Py_mod_create:
  ------------------
  |  |   92|      0|#define Py_mod_create _Py_SLOT_COMPAT_VALUE(1, 84)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (453:13): [True: 0, False: 166]
  ------------------
  454|      0|                create = (createfunc_t)it.current.sl_func;
  455|      0|                break;
  456|     41|            case Py_mod_exec:
  ------------------
  |  |   93|     41|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|     41|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (456:13): [True: 41, False: 125]
  ------------------
  457|     41|                if (!original_def) {
  ------------------
  |  Branch (457:21): [True: 0, False: 41]
  ------------------
  458|      0|                    if (m_exec) {
  ------------------
  |  Branch (458:25): [True: 0, False: 0]
  ------------------
  459|      0|                        PyErr_Format(
  460|      0|                            PyExc_SystemError,
  461|      0|                            "module %s has multiple Py_mod_exec slots",
  462|      0|                            name);
  463|      0|                        goto error;
  464|      0|                    }
  465|      0|                    m_exec = (_Py_modexecfunc)it.current.sl_func;
  466|      0|                }
  467|     41|                break;
  468|     43|            case Py_mod_multiple_interpreters:
  ------------------
  |  |   94|     43|#define Py_mod_multiple_interpreters _Py_SLOT_COMPAT_VALUE(3, 86)
  |  |  ------------------
  |  |  |  |    7|     43|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (468:13): [True: 43, False: 123]
  ------------------
  469|     43|                multiple_interpreters = it.current.sl_uint64;
  470|     43|                break;
  471|     43|            case Py_mod_gil:
  ------------------
  |  |   95|     43|#define Py_mod_gil _Py_SLOT_COMPAT_VALUE(4, 87)
  |  |  ------------------
  |  |  |  |    7|     43|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (471:13): [True: 43, False: 123]
  ------------------
  472|     43|                {
  473|     43|                    uint64_t val = it.current.sl_uint64;
  474|     43|                    requires_gil = (val != (uint64_t)Py_MOD_GIL_NOT_USED);
  ------------------
  |  |   88|     43|#  define Py_MOD_GIL_NOT_USED ((void *)1)
  ------------------
  475|     43|                }
  476|     43|                break;
  477|     39|            case Py_mod_abi:
  ------------------
  |  |  117|     39|#define Py_mod_abi 109
  ------------------
  |  Branch (477:13): [True: 39, False: 127]
  ------------------
  478|     39|                if (PyABIInfo_Check(it.current.sl_ptr, name) < 0) {
  ------------------
  |  Branch (478:21): [True: 0, False: 39]
  ------------------
  479|      0|                    goto error;
  480|      0|                }
  481|     39|                break;
  482|     39|            case Py_mod_token:
  ------------------
  |  |  118|      0|#define Py_mod_token 110
  ------------------
  |  Branch (482:13): [True: 0, False: 166]
  ------------------
  483|      0|                if (original_def && original_def != it.current.sl_ptr) {
  ------------------
  |  Branch (483:21): [True: 0, False: 0]
  |  Branch (483:37): [True: 0, False: 0]
  ------------------
  484|      0|                    PyErr_Format(
  485|      0|                        PyExc_SystemError,
  486|      0|                        "module %s: arbitrary Py_mod_token not "
  487|      0|                        "allowed with PyModuleDef",
  488|      0|                        name);
  489|      0|                    goto error;
  490|      0|                }
  491|      0|                token = it.current.sl_ptr;
  492|      0|                break;
  493|       |            // Common case: Copy a PEP 793 slot to def_like
  494|      0|#define DEF_SLOT_CASE(SLOT, TYPE, SL_MEMBER, MEMBER)                        \
  495|      0|            case SLOT:                                                      \
  496|      0|                do {                                                        \
  497|      0|                    if (original_def) {                                     \
  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  500|      0|                        if (orig_value != new_value) {                      \
  501|      0|                            PyErr_Format(                                   \
  502|      0|                                PyExc_SystemError,                          \
  503|      0|                                "module %s: %s conflicts with "             \
  504|      0|                                "PyModuleDef." #MEMBER,                     \
  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  506|      0|                            goto error;                                     \
  507|      0|                        }                                                   \
  508|      0|                    }                                                       \
  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  510|      0|                } while (0);                                                \
  511|      0|                break;                                                      \
  512|       |            /////////////////////////////////////////////////////////////////
  513|      0|            DEF_SLOT_CASE(Py_mod_name, char*, sl_ptr, m_name)
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  514|      0|            DEF_SLOT_CASE(Py_mod_doc, char*, sl_ptr, m_doc)
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  515|      0|            DEF_SLOT_CASE(Py_mod_state_size, Py_ssize_t, sl_size, m_size)
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  516|      0|            DEF_SLOT_CASE(Py_mod_methods, PyMethodDef*, sl_ptr, m_methods)
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  517|      0|            DEF_SLOT_CASE(Py_mod_state_traverse,
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  518|      0|                          traverseproc, sl_func, m_traverse)
  519|      0|            DEF_SLOT_CASE(Py_mod_state_clear, inquiry, sl_func, m_clear)
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  520|    166|            DEF_SLOT_CASE(Py_mod_state_free, freefunc, sl_func, m_free)
  ------------------
  |  |  495|      0|            case SLOT:                                                      \
  |  |  ------------------
  |  |  |  Branch (495:13): [True: 0, False: 166]
  |  |  ------------------
  |  |  496|      0|                do {                                                        \
  |  |  497|      0|                    if (original_def) {                                     \
  |  |  ------------------
  |  |  |  Branch (497:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  498|      0|                        TYPE orig_value = (TYPE)original_def->MEMBER;       \
  |  |  499|      0|                        TYPE new_value = (TYPE)it.current.SL_MEMBER;        \
  |  |  500|      0|                        if (orig_value != new_value) {                      \
  |  |  ------------------
  |  |  |  Branch (500:29): [True: 0, False: 0]
  |  |  ------------------
  |  |  501|      0|                            PyErr_Format(                                   \
  |  |  502|      0|                                PyExc_SystemError,                          \
  |  |  503|      0|                                "module %s: %s conflicts with "             \
  |  |  504|      0|                                "PyModuleDef." #MEMBER,                     \
  |  |  505|      0|                                name, _PySlot_GetName(it.current.sl_id));   \
  |  |  506|      0|                            goto error;                                     \
  |  |  507|      0|                        }                                                   \
  |  |  508|      0|                    }                                                       \
  |  |  509|      0|                    (def_like->MEMBER) = (TYPE)it.current.SL_MEMBER;        \
  |  |  510|      0|                } while (0);                                                \
  |  |  ------------------
  |  |  |  Branch (510:26): [Folded, False: 0]
  |  |  ------------------
  |  |  511|      0|                break;                                                      \
  ------------------
  521|    166|#undef DEF_SLOT_CASE
  522|    166|        }
  523|    166|    }
  524|     43|    if (!original_def && !_PySlotIterator_SawSlot(&it, Py_mod_abi)) {
  ------------------
  |  |  117|      0|#define Py_mod_abi 109
  ------------------
  |  Branch (524:9): [True: 0, False: 43]
  |  Branch (524:26): [True: 0, False: 0]
  ------------------
  525|      0|        PyErr_Format(
  526|      0|            PyExc_SystemError,
  527|      0|            "module %s does not define Py_mod_abi,"
  528|      0|            " which is mandatory for modules defined from slots only.",
  529|      0|            name);
  530|      0|        goto error;
  531|      0|    }
  532|       |
  533|       |#ifdef Py_GIL_DISABLED
  534|       |    // For modules created directly from slots (not from a def), we enable
  535|       |    // the GIL here (pairing `_PyEval_EnableGILTransient` with
  536|       |    // an immediate `_PyImport_EnableGILAndWarn`).
  537|       |    // For modules created from a def, the caller is responsible for this.
  538|       |    if (!original_def && requires_gil) {
  539|       |        PyThreadState *tstate = _PyThreadState_GET();
  540|       |        if (_PyEval_EnableGILTransient(tstate) < 0) {
  541|       |            goto error;
  542|       |        }
  543|       |        if (_PyImport_EnableGILAndWarn(tstate, nameobj) < 0) {
  544|       |            goto error;
  545|       |        }
  546|       |    }
  547|       |#endif
  548|       |
  549|     43|    if (def_like->m_size < 0) {
  ------------------
  |  Branch (549:9): [True: 0, False: 43]
  ------------------
  550|      0|        PyErr_Format(
  551|      0|            PyExc_SystemError,
  552|      0|            "module %s: m_size may not be negative for multi-phase initialization",
  553|      0|            name);
  554|      0|        goto error;
  555|      0|    }
  556|       |
  557|       |    /* By default, multi-phase init modules are expected
  558|       |       to work under multiple interpreters. */
  559|     43|    if (multiple_interpreters == (int64_t)(intptr_t)Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED) {
  ------------------
  |  |   80|     43|#  define Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED ((void *)0)
  ------------------
  |  Branch (559:9): [True: 0, False: 43]
  ------------------
  560|      0|        if (!_Py_IsMainInterpreter(interp)
  ------------------
  |  Branch (560:13): [True: 0, False: 0]
  ------------------
  561|      0|            && _PyImport_CheckSubinterpIncompatibleExtensionAllowed(name) < 0)
  ------------------
  |  Branch (561:16): [True: 0, False: 0]
  ------------------
  562|      0|        {
  563|      0|            goto error;
  564|      0|        }
  565|      0|    }
  566|     43|    else if (multiple_interpreters != (int64_t)(intptr_t)Py_MOD_PER_INTERPRETER_GIL_SUPPORTED
  ------------------
  |  |   82|     86|#  define Py_MOD_PER_INTERPRETER_GIL_SUPPORTED ((void *)2)
  ------------------
  |  Branch (566:14): [True: 0, False: 43]
  ------------------
  567|      0|             && interp->ceval.own_gil
  ------------------
  |  Branch (567:17): [True: 0, False: 0]
  ------------------
  568|      0|             && !_Py_IsMainInterpreter(interp)
  ------------------
  |  Branch (568:17): [True: 0, False: 0]
  ------------------
  569|      0|             && _PyImport_CheckSubinterpIncompatibleExtensionAllowed(name) < 0)
  ------------------
  |  Branch (569:17): [True: 0, False: 0]
  ------------------
  570|      0|    {
  571|      0|        goto error;
  572|      0|    }
  573|       |
  574|     43|    if (create) {
  ------------------
  |  Branch (574:9): [True: 0, False: 43]
  ------------------
  575|      0|        m = create(spec, original_def);
  576|      0|        if (m == NULL) {
  ------------------
  |  Branch (576:13): [True: 0, False: 0]
  ------------------
  577|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (577:17): [True: 0, False: 0]
  ------------------
  578|      0|                PyErr_Format(
  579|      0|                    PyExc_SystemError,
  580|      0|                    "creation of module %s failed without setting an exception",
  581|      0|                    name);
  582|      0|            }
  583|      0|            goto error;
  584|      0|        } else {
  585|      0|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (585:17): [True: 0, False: 0]
  ------------------
  586|      0|                _PyErr_FormatFromCause(
  587|      0|                    PyExc_SystemError,
  588|      0|                    "creation of module %s raised unreported exception",
  589|      0|                    name);
  590|      0|                goto error;
  591|      0|            }
  592|      0|        }
  593|     43|    } else {
  594|     43|        m = PyModule_NewObject(nameobj);
  595|     43|        if (m == NULL) {
  ------------------
  |  Branch (595:13): [True: 0, False: 43]
  ------------------
  596|      0|            goto error;
  597|      0|        }
  598|     43|    }
  599|       |
  600|     43|    if (PyModule_Check(m)) {
  ------------------
  |  |   12|     43|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|     43|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 43, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  601|     43|        PyModuleObject *mod = (PyModuleObject*)m;
  602|     43|        mod->md_state = NULL;
  603|     43|        module_copy_members_from_deflike(mod, def_like);
  604|     43|        if (original_def) {
  ------------------
  |  Branch (604:13): [True: 43, False: 0]
  ------------------
  605|     43|            assert (!token || token == original_def);
  ------------------
  |  Branch (605:13): [True: 43, False: 0]
  |  Branch (605:13): [True: 0, False: 0]
  ------------------
  606|     43|            mod->md_token = original_def;
  607|     43|            mod->md_token_is_def = 1;
  608|     43|        }
  609|      0|        else {
  610|      0|            mod->md_token = token;
  611|      0|        }
  612|       |#ifdef Py_GIL_DISABLED
  613|       |        mod->md_requires_gil = requires_gil;
  614|       |#else
  615|     43|        (void)requires_gil;
  616|     43|#endif
  617|     43|        mod->md_exec = m_exec;
  618|     43|    } else {
  619|      0|        if (def_like->m_size > 0 || def_like->m_traverse || def_like->m_clear
  ------------------
  |  Branch (619:13): [True: 0, False: 0]
  |  Branch (619:37): [True: 0, False: 0]
  |  Branch (619:61): [True: 0, False: 0]
  ------------------
  620|      0|            || def_like->m_free)
  ------------------
  |  Branch (620:16): [True: 0, False: 0]
  ------------------
  621|      0|        {
  622|      0|            PyErr_Format(
  623|      0|                PyExc_SystemError,
  624|      0|                "module %s is not a module object, but requests module state",
  625|      0|                name);
  626|      0|            goto error;
  627|      0|        }
  628|      0|        if (_PySlotIterator_SawSlot(&it, Py_mod_exec)) {
  ------------------
  |  |   93|      0|#define Py_mod_exec _Py_SLOT_COMPAT_VALUE(2, 85)
  |  |  ------------------
  |  |  |  |    7|      0|#define _Py_SLOT_COMPAT_VALUE(OLD, NEW) NEW
  |  |  ------------------
  ------------------
  |  Branch (628:13): [True: 0, False: 0]
  ------------------
  629|      0|            PyErr_Format(
  630|      0|                PyExc_SystemError,
  631|      0|                "module %s specifies execution slots, but did not create "
  632|      0|                    "a ModuleType instance",
  633|      0|                name);
  634|      0|            goto error;
  635|      0|        }
  636|      0|        if (token) {
  ------------------
  |  Branch (636:13): [True: 0, False: 0]
  ------------------
  637|      0|            PyErr_Format(
  638|      0|                PyExc_SystemError,
  639|      0|                "module %s specifies a token, but did not create "
  640|      0|                    "a ModuleType instance",
  641|      0|                name);
  642|      0|            goto error;
  643|      0|        }
  644|      0|    }
  645|       |
  646|     43|    if (def_like->m_methods != NULL) {
  ------------------
  |  Branch (646:9): [True: 42, False: 1]
  ------------------
  647|     42|        ret = _add_methods_to_object(m, nameobj, def_like->m_methods);
  648|     42|        if (ret != 0) {
  ------------------
  |  Branch (648:13): [True: 0, False: 42]
  ------------------
  649|      0|            goto error;
  650|      0|        }
  651|     42|    }
  652|       |
  653|     43|    if (def_like->m_doc != NULL) {
  ------------------
  |  Branch (653:9): [True: 34, False: 9]
  ------------------
  654|     34|        ret = PyModule_SetDocString(m, def_like->m_doc);
  655|     34|        if (ret != 0) {
  ------------------
  |  Branch (655:13): [True: 0, False: 34]
  ------------------
  656|      0|            goto error;
  657|      0|        }
  658|     34|    }
  659|       |
  660|     43|    Py_DECREF(nameobj);
  ------------------
  |  |  430|     43|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|     43|    return m;
  662|       |
  663|      0|error:
  664|      0|    Py_DECREF(nameobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  665|      0|    Py_XDECREF(m);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  666|       |    return NULL;
  667|     43|}
moduleobject.c:alloc_state:
  729|     86|{
  730|     86|    if (!PyModule_Check(module)) {
  ------------------
  |  |   12|     86|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|     86|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     86|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     86|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (730:9): [True: 0, False: 86]
  ------------------
  731|      0|        PyErr_Format(PyExc_TypeError, "expected module, got %T", module);
  732|      0|        return -1;
  733|      0|    }
  734|     86|    PyModuleObject *md = (PyModuleObject*)module;
  735|       |
  736|     86|    if (md->md_state_size >= 0) {
  ------------------
  |  Branch (736:9): [True: 86, False: 0]
  ------------------
  737|     86|        if (md->md_state == NULL) {
  ------------------
  |  Branch (737:13): [True: 43, False: 43]
  ------------------
  738|       |            /* Always set a state pointer; this serves as a marker to skip
  739|       |             * multiple initialization (importlib.reload() is no-op) */
  740|     43|            md->md_state = PyMem_Malloc(md->md_state_size);
  741|     43|            if (!md->md_state) {
  ------------------
  |  Branch (741:17): [True: 0, False: 43]
  ------------------
  742|      0|                PyErr_NoMemory();
  743|      0|                return -1;
  744|      0|            }
  745|     43|            memset(md->md_state, 0, md->md_state_size);
  746|     43|        }
  747|     86|    }
  748|     86|    return 0;
  749|     86|}
moduleobject.c:run_exec_func:
  706|     41|{
  707|     41|    int ret = exec(module);
  708|     41|    if (ret != 0) {
  ------------------
  |  Branch (708:9): [True: 0, False: 41]
  ------------------
  709|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (709:13): [True: 0, False: 0]
  ------------------
  710|      0|            PyErr_Format(
  711|      0|                PyExc_SystemError,
  712|      0|                "execution of %R failed without setting an exception",
  713|      0|                module);
  714|      0|        }
  715|      0|        return -1;
  716|      0|    }
  717|     41|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (717:9): [True: 0, False: 41]
  ------------------
  718|      0|        _PyErr_FormatFromCause(
  719|      0|            PyExc_SystemError,
  720|      0|            "execution of module %R raised unreported exception",
  721|      0|            module);
  722|      0|        return -1;
  723|      0|    }
  724|     41|    return 0;
  725|     41|}
moduleobject.c:_add_methods_to_object:
  296|     50|{
  297|     50|    PyObject *func;
  298|     50|    PyMethodDef *fdef;
  299|       |
  300|  1.14k|    for (fdef = functions; fdef->ml_name != NULL; fdef++) {
  ------------------
  |  Branch (300:28): [True: 1.09k, False: 50]
  ------------------
  301|  1.09k|        if ((fdef->ml_flags & METH_CLASS) ||
  ------------------
  |  |  104|  1.09k|#define METH_CLASS    0x0010
  ------------------
  |  Branch (301:13): [True: 0, False: 1.09k]
  ------------------
  302|  1.09k|            (fdef->ml_flags & METH_STATIC)) {
  ------------------
  |  |  105|  1.09k|#define METH_STATIC   0x0020
  ------------------
  |  Branch (302:13): [True: 0, False: 1.09k]
  ------------------
  303|      0|            PyErr_SetString(PyExc_ValueError,
  304|      0|                            "module functions cannot set"
  305|      0|                            " METH_CLASS or METH_STATIC");
  306|      0|            return -1;
  307|      0|        }
  308|  1.09k|        func = PyCFunction_NewEx(fdef, (PyObject*)module, name);
  ------------------
  |  |   87|  1.09k|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
  309|  1.09k|        if (func == NULL) {
  ------------------
  |  Branch (309:13): [True: 0, False: 1.09k]
  ------------------
  310|      0|            return -1;
  311|      0|        }
  312|  1.09k|        _PyObject_SetDeferredRefcount(func);
  313|  1.09k|        if (PyObject_SetAttrString(module, fdef->ml_name, func) != 0) {
  ------------------
  |  Branch (313:13): [True: 0, False: 1.09k]
  ------------------
  314|      0|            Py_DECREF(func);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|      0|            return -1;
  316|      0|        }
  317|  1.09k|        Py_DECREF(func);
  ------------------
  |  |  430|  1.09k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|  1.09k|    }
  319|       |
  320|     50|    return 0;
  321|     50|}
moduleobject.c:try_load_lazy_submodule:
 1304|    700|{
 1305|    700|    PyObject *mod_name;
 1306|    700|    int rc = PyDict_GetItemRef(m->md_dict, &_Py_ID(__name__), &mod_name);
  ------------------
  |  |  936|    700|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    700|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    700|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|    700|    if (rc <= 0) {
  ------------------
  |  Branch (1307:9): [True: 0, False: 700]
  ------------------
 1308|      0|        return NULL;
 1309|      0|    }
 1310|    700|    if (!PyUnicode_Check(mod_name)) {
  ------------------
  |  |  103|    700|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    700|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1310:9): [True: 0, False: 700]
  ------------------
 1311|      0|        Py_DECREF(mod_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1312|      0|        return NULL;
 1313|      0|    }
 1314|    700|    PyObject *result = NULL;
 1315|    700|    _PyLazySubmoduleImportResult status =
 1316|    700|        _PyImport_TryLoadLazySubmodule(mod_name, name, &result);
 1317|    700|    Py_DECREF(mod_name);
  ------------------
  |  |  430|    700|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    700|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    700|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1318|    700|    if (status != _Py_LAZY_SUBMODULE_LOADED) {
  ------------------
  |  Branch (1318:9): [True: 700, False: 0]
  ------------------
 1319|    700|        assert(status == _Py_LAZY_SUBMODULE_ERROR ||
  ------------------
  |  Branch (1319:9): [True: 0, False: 700]
  |  Branch (1319:9): [True: 700, False: 0]
  ------------------
 1320|    700|               status == _Py_LAZY_SUBMODULE_NOT_FOUND);
 1321|    700|        return NULL;
 1322|    700|    }
 1323|      0|    if (PyDict_SetItem(m->md_dict, name, result) < 0) {
  ------------------
  |  Branch (1323:9): [True: 0, False: 0]
  ------------------
 1324|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1325|      0|        return NULL;
 1326|      0|    }
 1327|      0|    return result;
 1328|      0|}
moduleobject.c:module_dealloc:
 1137|      1|{
 1138|      1|    PyModuleObject *m = _PyModule_CAST(self);
  ------------------
  |  |   24|      1|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1138:25): [True: 1, False: 0]
  ------------------
 1139|       |
 1140|      0|    PyObject_GC_UnTrack(m);
 1141|       |
 1142|      1|    int verbose = _Py_GetConfig()->verbose;
 1143|      1|    if (verbose && m->md_name) {
  ------------------
  |  Branch (1143:9): [True: 0, False: 1]
  |  Branch (1143:20): [True: 0, False: 0]
  ------------------
 1144|      0|        PySys_FormatStderr("# destroy %U\n", m->md_name);
 1145|      0|    }
 1146|      1|    FT_CLEAR_WEAKREFS(self, m->md_weaklist);
  ------------------
  |  |   47|      1|    do {                                            \
  |  |   48|      1|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|      1|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (1146:5): [True: 1, False: 0]
  ------------------
 1147|       |
 1148|      1|    assert_def_missing_or_redundant(m);
 1149|       |    /* bpo-39824: Don't call m_free() if m_size > 0 and md_state=NULL */
 1150|      1|    if (m->md_state_free && (m->md_state_size <= 0 || m->md_state != NULL))
  ------------------
  |  Branch (1150:9): [True: 0, False: 1]
  |  Branch (1150:30): [True: 0, False: 0]
  |  Branch (1150:55): [True: 0, False: 0]
  ------------------
 1151|      0|    {
 1152|      0|        m->md_state_free(m);
 1153|      0|    }
 1154|       |
 1155|      1|    Py_XDECREF(m->md_dict);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1156|      1|    Py_XDECREF(m->md_name);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|      1|    if (m->md_state != NULL) {
  ------------------
  |  Branch (1157:9): [True: 0, False: 1]
  ------------------
 1158|      0|        PyMem_Free(m->md_state);
 1159|      0|    }
 1160|      1|    Py_TYPE(m)->tp_free((PyObject *)m);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|      1|}
moduleobject.c:assert_def_missing_or_redundant:
   34|  2.53k|{
   35|       |    /* We copy all relevant info into the module object.
   36|       |     * Modules created using a def keep a reference to that (statically
   37|       |     * allocated) def; the info there should match what we have in the module.
   38|       |     */
   39|  2.53k|#ifndef NDEBUG
   40|  2.53k|    if (m->md_token_is_def) {
  ------------------
  |  Branch (40:9): [True: 648, False: 1.88k]
  ------------------
   41|    648|        PyModuleDef *def = (PyModuleDef *)m->md_token;
   42|    648|        assert(def);
  ------------------
  |  Branch (42:9): [True: 648, False: 0]
  ------------------
   43|    648|#define DO_ASSERT(F) assert (def->m_ ## F == m->md_state_ ## F);
   44|    648|        DO_ASSERT(size);
  ------------------
  |  |   43|    648|#define DO_ASSERT(F) assert (def->m_ ## F == m->md_state_ ## F);
  ------------------
  |  Branch (44:9): [True: 648, False: 0]
  ------------------
   45|    648|        DO_ASSERT(traverse);
  ------------------
  |  |   43|    648|#define DO_ASSERT(F) assert (def->m_ ## F == m->md_state_ ## F);
  ------------------
  |  Branch (45:9): [True: 648, False: 0]
  ------------------
   46|    648|        DO_ASSERT(clear);
  ------------------
  |  |   43|    648|#define DO_ASSERT(F) assert (def->m_ ## F == m->md_state_ ## F);
  ------------------
  |  Branch (46:9): [True: 648, False: 0]
  ------------------
   47|    648|        DO_ASSERT(free);
  ------------------
  |  |   43|    648|#define DO_ASSERT(F) assert (def->m_ ## F == m->md_state_ ## F);
  ------------------
  |  Branch (47:9): [True: 648, False: 0]
  ------------------
   48|    648|#undef DO_ASSERT
   49|    648|    }
   50|  2.53k|#endif // NDEBUG
   51|  2.53k|}
moduleobject.c:module_traverse:
 1540|  2.53k|{
 1541|  2.53k|    PyModuleObject *m = _PyModule_CAST(self);
  ------------------
  |  |   24|  2.53k|    (assert(PyModule_Check(op)), _Py_CAST(PyModuleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1541:25): [True: 2.53k, False: 0]
  ------------------
 1542|       |
 1543|      0|    assert_def_missing_or_redundant(m);
 1544|       |    /* bpo-39824: Don't call m_traverse() if m_size > 0 and md_state=NULL */
 1545|  2.53k|    if (m->md_state_traverse && (m->md_state_size <= 0 || m->md_state != NULL))
  ------------------
  |  Branch (1545:9): [True: 294, False: 2.23k]
  |  Branch (1545:34): [True: 0, False: 294]
  |  Branch (1545:59): [True: 294, False: 0]
  ------------------
 1546|    294|    {
 1547|    294|        int res = m->md_state_traverse((PyObject*)m, visit, arg);
 1548|    294|        if (res)
  ------------------
  |  Branch (1548:13): [True: 0, False: 294]
  ------------------
 1549|      0|            return res;
 1550|    294|    }
 1551|       |
 1552|  2.53k|    Py_VISIT(m->md_dict);
  ------------------
  |  |  194|  2.53k|    do {                                                                \
  |  |  195|  2.53k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |  196|  2.53k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  2.53k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 2.53k]
  |  |  ------------------
  |  |  198|  2.53k|                return vret;                                            \
  |  |  199|  2.53k|        }                                                               \
  |  |  200|  2.53k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 1553|  2.53k|    return 0;
 1554|  2.53k|}
moduleobject.c:module_dir:
 1581|      2|{
 1582|      2|    PyObject *result = NULL;
 1583|      2|    PyObject *dict;
 1584|      2|    if (PyModule_CheckExact(self)) {
  ------------------
  |  |   13|      2|#define PyModule_CheckExact(op) Py_IS_TYPE((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1585|      2|        dict = Py_NewRef(((PyModuleObject *)self)->md_dict);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1586|      2|    } else {
 1587|      0|        dict = PyObject_GetAttr(self, &_Py_ID(__dict__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1588|      0|    }
 1589|       |
 1590|      2|    if (dict != NULL) {
  ------------------
  |  Branch (1590:9): [True: 2, False: 0]
  ------------------
 1591|      2|        if (PyDict_Check(dict)) {
  ------------------
  |  |   18|      2|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1592|      2|            PyObject *dirfunc = PyDict_GetItemWithError(dict, &_Py_ID(__dir__));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1593|      2|            if (dirfunc) {
  ------------------
  |  Branch (1593:17): [True: 0, False: 2]
  ------------------
 1594|      0|                result = _PyObject_CallNoArgs(dirfunc);
 1595|      0|            }
 1596|      2|            else if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1596:22): [True: 2, False: 0]
  ------------------
 1597|      2|                result = PyDict_Keys(dict);
 1598|      2|            }
 1599|      2|        }
 1600|      0|        else {
 1601|      0|            PyErr_Format(PyExc_TypeError, "<module>.__dict__ is not a dictionary");
 1602|      0|        }
 1603|      2|    }
 1604|       |
 1605|      2|    Py_XDECREF(dict);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1606|      2|    return result;
 1607|      2|}
moduleobject.c:module___init___impl:
 1131|    117|{
 1132|    117|    return module_init_dict(self, self->md_dict, name, doc);
 1133|    117|}
moduleobject.c:new_module:
  238|    117|{
  239|    117|    PyModuleObject *m = new_module_notrack(mt);
  240|    117|    if (m != NULL) {
  ------------------
  |  Branch (240:9): [True: 117, False: 0]
  ------------------
  241|    117|        track_module(m);
  242|    117|    }
  243|    117|    return (PyObject *)m;
  244|    117|}

_PyNamespace_New:
  323|      8|{
  324|      8|    PyObject *ns = namespace_new(&_PyNamespace_Type, NULL, NULL);
  325|      8|    if (ns == NULL)
  ------------------
  |  Branch (325:9): [True: 0, False: 8]
  ------------------
  326|      0|        return NULL;
  327|       |
  328|      8|    if (kwds == NULL)
  ------------------
  |  Branch (328:9): [True: 2, False: 6]
  ------------------
  329|      2|        return ns;
  330|      6|    if (PyDict_Update(((_PyNamespaceObject *)ns)->ns_dict, kwds) != 0) {
  ------------------
  |  Branch (330:9): [True: 0, False: 6]
  ------------------
  331|      0|        Py_DECREF(ns);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|      0|        return NULL;
  333|      0|    }
  334|       |
  335|      6|    return (PyObject *)ns;
  336|      6|}
namespaceobject.c:namespace_dealloc:
   84|      2|{
   85|      2|    _PyNamespaceObject *ns = _PyNamespace_CAST(op);
  ------------------
  |  |   15|      2|#define _PyNamespace_CAST(op) _Py_CAST(_PyNamespaceObject*, (op))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   86|      2|    PyObject_GC_UnTrack(ns);
   87|      2|    Py_CLEAR(ns->ns_dict);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
   88|      2|    Py_TYPE(ns)->tp_free((PyObject *)ns);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      2|}
namespaceobject.c:namespace_traverse:
  179|    352|{
  180|    352|    _PyNamespaceObject *ns = _PyNamespace_CAST(op);
  ------------------
  |  |   15|    352|#define _PyNamespace_CAST(op) _Py_CAST(_PyNamespaceObject*, (op))
  |  |  ------------------
  |  |  |  |   37|    352|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  181|    352|    Py_VISIT(ns->ns_dict);
  ------------------
  |  |  194|    352|    do {                                                                \
  |  |  195|    352|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 352, False: 0]
  |  |  ------------------
  |  |  196|    352|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    352|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    352|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    352|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 352]
  |  |  ------------------
  |  |  198|    352|                return vret;                                            \
  |  |  199|    352|        }                                                               \
  |  |  200|    352|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 352]
  |  |  ------------------
  ------------------
  182|    352|    return 0;
  183|    352|}
namespaceobject.c:namespace_init:
   48|     28|{
   49|     28|    _PyNamespaceObject *ns = _PyNamespace_CAST(op);
  ------------------
  |  |   15|     28|#define _PyNamespace_CAST(op) _Py_CAST(_PyNamespaceObject*, (op))
  |  |  ------------------
  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   50|     28|    PyObject *arg = NULL;
   51|     28|    if (!PyArg_UnpackTuple(args, _PyType_Name(Py_TYPE(ns)), 0, 1, &arg)) {
  ------------------
  |  |  213|     28|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (51:9): [True: 0, False: 28]
  ------------------
   52|      0|        return -1;
   53|      0|    }
   54|     28|    if (arg != NULL) {
  ------------------
  |  Branch (54:9): [True: 0, False: 28]
  ------------------
   55|      0|        PyObject *dict;
   56|      0|        if (PyDict_CheckExact(arg)) {
  ------------------
  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|      0|            dict = Py_NewRef(arg);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   58|      0|        }
   59|      0|        else {
   60|      0|            dict = PyObject_CallOneArg((PyObject *)&PyDict_Type, arg);
   61|      0|            if (dict == NULL) {
  ------------------
  |  Branch (61:17): [True: 0, False: 0]
  ------------------
   62|      0|                return -1;
   63|      0|            }
   64|      0|        }
   65|      0|        int err = (!PyArg_ValidateKeywordArguments(dict) ||
  ------------------
  |  Branch (65:20): [True: 0, False: 0]
  ------------------
   66|      0|                   PyDict_Update(ns->ns_dict, dict) < 0);
  ------------------
  |  Branch (66:20): [True: 0, False: 0]
  ------------------
   67|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   68|      0|        if (err) {
  ------------------
  |  Branch (68:13): [True: 0, False: 0]
  ------------------
   69|      0|            return -1;
   70|      0|        }
   71|      0|    }
   72|     28|    if (kwds == NULL) {
  ------------------
  |  Branch (72:9): [True: 0, False: 28]
  ------------------
   73|      0|        return 0;
   74|      0|    }
   75|     28|    if (!PyArg_ValidateKeywordArguments(kwds)) {
  ------------------
  |  Branch (75:9): [True: 0, False: 28]
  ------------------
   76|      0|        return -1;
   77|      0|    }
   78|     28|    return PyDict_Update(ns->ns_dict, kwds);
   79|     28|}
namespaceobject.c:namespace_new:
   29|     36|{
   30|     36|    PyObject *self;
   31|       |
   32|     36|    assert(type != NULL && type->tp_alloc != NULL);
  ------------------
  |  Branch (32:5): [True: 36, False: 0]
  |  Branch (32:5): [True: 36, False: 0]
  ------------------
   33|     36|    self = type->tp_alloc(type, 0);
   34|     36|    if (self != NULL) {
  ------------------
  |  Branch (34:9): [True: 36, False: 0]
  ------------------
   35|     36|        _PyNamespaceObject *ns = (_PyNamespaceObject *)self;
   36|     36|        ns->ns_dict = PyDict_New();
   37|     36|        if (ns->ns_dict == NULL) {
  ------------------
  |  Branch (37:13): [True: 0, False: 36]
  ------------------
   38|      0|            Py_DECREF(ns);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   39|      0|            return NULL;
   40|      0|        }
   41|     36|    }
   42|     36|    return self;
   43|     36|}

_Py_DecRef:
  357|    550|{
  358|    550|    Py_DECREF(o);
  ------------------
  |  |  430|    550|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    550|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    550|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|    550|}
_PyObject_New:
  556|  63.5k|{
  557|  63.5k|    PyObject *op = (PyObject *) PyObject_Malloc(_PyObject_SIZE(tp));
  558|  63.5k|    if (op == NULL) {
  ------------------
  |  Branch (558:9): [True: 0, False: 63.5k]
  ------------------
  559|      0|        return PyErr_NoMemory();
  560|      0|    }
  561|  63.5k|    _PyObject_Init(op, tp);
  562|  63.5k|    return op;
  563|  63.5k|}
_PyObject_NewVar:
  567|  56.1k|{
  568|  56.1k|    PyVarObject *op;
  569|  56.1k|    const size_t size = _PyObject_VAR_SIZE(tp, nitems);
  570|  56.1k|    op = (PyVarObject *) PyObject_Malloc(size);
  571|  56.1k|    if (op == NULL) {
  ------------------
  |  Branch (571:9): [True: 0, False: 56.1k]
  ------------------
  572|      0|        return (PyVarObject *)PyErr_NoMemory();
  573|      0|    }
  574|  56.1k|    _PyObject_InitVar(op, tp, nitems);
  575|  56.1k|    return op;
  576|  56.1k|}
PyObject_CallFinalizer:
  580|  1.43k|{
  581|  1.43k|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|  1.43k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  582|       |
  583|  1.43k|    if (tp->tp_finalize == NULL)
  ------------------
  |  Branch (583:9): [True: 0, False: 1.43k]
  ------------------
  584|      0|        return;
  585|       |    /* tp_finalize should only be called once. */
  586|  1.43k|    if (_PyType_IS_GC(tp) && _PyGC_FINALIZED(self))
  ------------------
  |  |  820|  2.86k|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  1.43k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (820:26): [True: 1.43k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (586:30): [True: 0, False: 1.43k]
  ------------------
  587|      0|        return;
  588|       |
  589|  1.43k|    tp->tp_finalize(self);
  590|  1.43k|    if (_PyType_IS_GC(tp)) {
  ------------------
  |  |  820|  1.43k|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  1.43k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (820:26): [True: 1.43k, False: 0]
  |  |  ------------------
  ------------------
  591|  1.43k|        _PyGC_SET_FINALIZED(self);
  592|  1.43k|    }
  593|  1.43k|}
PyObject_CallFinalizerFromDealloc:
  597|  1.43k|{
  598|  1.43k|    if (Py_REFCNT(self) != 0) {
  ------------------
  |  |  119|  1.43k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (598:9): [True: 0, False: 1.43k]
  ------------------
  599|      0|        _PyObject_ASSERT_FAILED_MSG(self,
  ------------------
  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  ------------------
  600|      0|                                    "PyObject_CallFinalizerFromDealloc called "
  601|      0|                                    "on object with a non-zero refcount");
  602|      0|    }
  603|       |
  604|       |    /* Temporarily resurrect the object. */
  605|  1.43k|    _PyObject_ResurrectStart(self);
  606|       |
  607|  1.43k|    PyObject_CallFinalizer(self);
  608|       |
  609|  1.43k|    _PyObject_ASSERT_WITH_MSG(self,
  ------------------
  |  |  423|  1.43k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  416|  1.43k|    ((expr) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (416:6): [True: 1.43k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  417|  1.43k|      ? (void)(0) \
  |  |  |  |  418|  1.43k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  ------------------
  ------------------
  610|  1.43k|                              Py_REFCNT(self) > 0,
  611|  1.43k|                              "refcount is too small");
  612|       |
  613|  1.43k|    _PyObject_ASSERT(self,
  ------------------
  |  |  425|  1.43k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  1.43k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  2.86k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:7): [True: 0, False: 1.43k]
  |  |  |  |  |  |  |  Branch (416:7): [True: 1.43k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  1.43k|      ? (void)(0) \
  |  |  |  |  |  |  418|  1.43k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  614|  1.43k|                    (!_PyType_IS_GC(Py_TYPE(self))
  615|  1.43k|                    || _PyObject_GC_IS_TRACKED(self)));
  616|       |
  617|       |    /* Undo the temporary resurrection; can't use DECREF here, it would
  618|       |     * cause a recursive call. */
  619|  1.43k|    if (_PyObject_ResurrectEnd(self)) {
  ------------------
  |  Branch (619:9): [True: 0, False: 1.43k]
  ------------------
  620|       |        /* tp_finalize resurrected it!
  621|       |           gh-130202: Note that the object may still be dead in the free
  622|       |           threaded build in some circumstances, so it's not safe to access
  623|       |           `self` after this point. For example, the last reference to the
  624|       |           resurrected `self` may be held by another thread, which can
  625|       |           concurrently deallocate it. */
  626|      0|        return -1;
  627|      0|    }
  628|       |
  629|       |    /* this is the normal path out, the caller continues with deallocation. */
  630|  1.43k|    return 0;
  631|  1.43k|}
_PyObject_IsFreed:
  712|   379M|{
  713|   379M|    if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(Py_TYPE(op))) {
  ------------------
  |  |  213|   379M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   379M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   379M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (713:9): [True: 0, False: 379M]
  |  Branch (713:34): [True: 0, False: 379M]
  ------------------
  714|      0|        return 1;
  715|      0|    }
  716|   379M|    return 0;
  717|   379M|}
PyObject_Repr:
  761|   106k|{
  762|   106k|    PyObject *res;
  763|   106k|    if (PyErr_CheckSignals())
  ------------------
  |  Branch (763:9): [True: 0, False: 106k]
  ------------------
  764|      0|        return NULL;
  765|   106k|    if (v == NULL)
  ------------------
  |  Branch (765:9): [True: 0, False: 106k]
  ------------------
  766|      0|        return PyUnicode_FromString("<NULL>");
  767|   106k|    if (Py_TYPE(v)->tp_repr == NULL)
  ------------------
  |  |  213|   106k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (767:9): [True: 0, False: 106k]
  ------------------
  768|      0|        return PyUnicode_FromFormat("<%s object at %p>",
  769|      0|                                    Py_TYPE(v)->tp_name, v);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|       |
  771|   106k|    PyThreadState *tstate = _PyThreadState_GET();
  772|       |#ifdef Py_DEBUG
  773|       |    /* PyObject_Repr() must not be called with an exception set,
  774|       |       because it can clear it (directly or indirectly) and so the
  775|       |       caller loses its exception */
  776|       |    assert(!_PyErr_Occurred(tstate));
  777|       |#endif
  778|       |
  779|       |    /* It is possible for a type to have a tp_repr representation that loops
  780|       |       infinitely. */
  781|   106k|    if (_Py_EnterRecursiveCallTstate(tstate,
  ------------------
  |  Branch (781:9): [True: 0, False: 106k]
  ------------------
  782|   106k|                                     " while getting the repr of an object")) {
  783|      0|        return NULL;
  784|      0|    }
  785|   106k|    res = (*Py_TYPE(v)->tp_repr)(v);
  ------------------
  |  |  213|   106k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  786|   106k|    _Py_LeaveRecursiveCallTstate(tstate);
  787|       |
  788|   106k|    if (res == NULL) {
  ------------------
  |  Branch (788:9): [True: 0, False: 106k]
  ------------------
  789|      0|        return NULL;
  790|      0|    }
  791|   106k|    if (!PyUnicode_Check(res)) {
  ------------------
  |  |  103|   106k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   106k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (791:9): [True: 0, False: 106k]
  ------------------
  792|      0|        _PyErr_Format(tstate, PyExc_TypeError,
  793|      0|                      "%T.__repr__() must return a str, not %T", v, res);
  794|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|      0|        return NULL;
  796|      0|    }
  797|   106k|    return res;
  798|   106k|}
PyObject_Str:
  802|   153k|{
  803|   153k|    PyObject *res;
  804|   153k|    if (PyErr_CheckSignals())
  ------------------
  |  Branch (804:9): [True: 0, False: 153k]
  ------------------
  805|      0|        return NULL;
  806|   153k|    if (v == NULL)
  ------------------
  |  Branch (806:9): [True: 0, False: 153k]
  ------------------
  807|      0|        return PyUnicode_FromString("<NULL>");
  808|   153k|    if (PyUnicode_CheckExact(v)) {
  ------------------
  |  |  104|   153k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   153k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   153k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   153k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 53.5k, False: 99.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|  53.5k|        return Py_NewRef(v);
  ------------------
  |  |  550|  53.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  53.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|  53.5k|    }
  811|  99.5k|    if (Py_TYPE(v)->tp_str == NULL)
  ------------------
  |  |  213|  99.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  99.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  99.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (811:9): [True: 0, False: 99.5k]
  ------------------
  812|      0|        return PyObject_Repr(v);
  813|       |
  814|  99.5k|    PyThreadState *tstate = _PyThreadState_GET();
  815|       |#ifdef Py_DEBUG
  816|       |    /* PyObject_Str() must not be called with an exception set,
  817|       |       because it can clear it (directly or indirectly) and so the
  818|       |       caller loses its exception */
  819|       |    assert(!_PyErr_Occurred(tstate));
  820|       |#endif
  821|       |
  822|       |    /* It is possible for a type to have a tp_str representation that loops
  823|       |       infinitely. */
  824|  99.5k|    if (_Py_EnterRecursiveCallTstate(tstate, " while getting the str of an object")) {
  ------------------
  |  Branch (824:9): [True: 0, False: 99.5k]
  ------------------
  825|      0|        return NULL;
  826|      0|    }
  827|  99.5k|    res = (*Py_TYPE(v)->tp_str)(v);
  ------------------
  |  |  213|  99.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  99.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  99.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  828|  99.5k|    _Py_LeaveRecursiveCallTstate(tstate);
  829|       |
  830|  99.5k|    if (res == NULL) {
  ------------------
  |  Branch (830:9): [True: 0, False: 99.5k]
  ------------------
  831|      0|        return NULL;
  832|      0|    }
  833|  99.5k|    if (!PyUnicode_Check(res)) {
  ------------------
  |  |  103|  99.5k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  99.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (833:9): [True: 0, False: 99.5k]
  ------------------
  834|      0|        _PyErr_Format(tstate, PyExc_TypeError,
  835|      0|                      "%T.__str__() must return a str, not %T", v, res);
  836|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  837|      0|        return NULL;
  838|      0|    }
  839|  99.5k|    assert(_PyUnicode_CheckConsistency(res, 1));
  ------------------
  |  Branch (839:5): [True: 99.5k, False: 0]
  ------------------
  840|  99.5k|    return res;
  841|  99.5k|}
_PyObject_ClearFreeLists:
  928|      7|{
  929|       |    // In the free-threaded build, freelists are per-PyThreadState and cleared in PyThreadState_Clear()
  930|       |    // In the default build, freelists are per-interpreter and cleared in finalize_interp_types()
  931|      7|    clear_freelist(&freelists->floats, is_finalization, free_object);
  932|      7|    clear_freelist(&freelists->complexes, is_finalization, free_object);
  933|    147|    for (Py_ssize_t i = 0; i < PyTuple_MAXSAVESIZE; i++) {
  ------------------
  |  |   11|    147|#  define PyTuple_MAXSAVESIZE 20     // Largest tuple to save on freelist
  ------------------
  |  Branch (933:28): [True: 140, False: 7]
  ------------------
  934|    140|        clear_freelist(&freelists->tuples[i], is_finalization, free_object);
  935|    140|    }
  936|      7|    clear_freelist(&freelists->lists, is_finalization, free_object);
  937|      7|    clear_freelist(&freelists->list_iters, is_finalization, free_object);
  938|      7|    clear_freelist(&freelists->tuple_iters, is_finalization, free_object);
  939|      7|    clear_freelist(&freelists->dicts, is_finalization, free_object);
  940|      7|    clear_freelist(&freelists->dictkeys, is_finalization, PyMem_Free);
  941|      7|    clear_freelist(&freelists->slices, is_finalization, free_object);
  942|      7|    clear_freelist(&freelists->ranges, is_finalization, free_object);
  943|      7|    clear_freelist(&freelists->range_iters, is_finalization, free_object);
  944|      7|    clear_freelist(&freelists->contexts, is_finalization, free_object);
  945|      7|    clear_freelist(&freelists->async_gens, is_finalization, free_object);
  946|      7|    clear_freelist(&freelists->async_gen_asends, is_finalization, free_object);
  947|      7|    clear_freelist(&freelists->futureiters, is_finalization, free_object);
  948|      7|    if (is_finalization) {
  ------------------
  |  Branch (948:9): [True: 0, False: 7]
  ------------------
  949|       |        // Only clear object stack chunks during finalization. We use object
  950|       |        // stacks during GC, so emptying the free-list is counterproductive.
  951|      0|        clear_freelist(&freelists->object_stack_chunks, 1, PyMem_RawFree);
  952|      0|    }
  953|      7|    clear_freelist(&freelists->unicode_writers, is_finalization, PyMem_Free);
  954|      7|    clear_freelist(&freelists->bytes_writers, is_finalization, PyMem_Free);
  955|      7|    clear_freelist(&freelists->ints, is_finalization, free_object);
  956|      7|    clear_freelist(&freelists->pycfunctionobject, is_finalization, PyObject_GC_Del);
  957|      7|    clear_freelist(&freelists->pycmethodobject, is_finalization, PyObject_GC_Del);
  958|      7|    clear_freelist(&freelists->pymethodobjects, is_finalization, free_object);
  959|      7|}
PyObject_RichCompare:
 1101|  19.7M|{
 1102|  19.7M|    PyThreadState *tstate = _PyThreadState_GET();
 1103|       |
 1104|  19.7M|    assert(Py_LT <= op && op <= Py_GE);
  ------------------
  |  Branch (1104:5): [True: 19.7M, False: 0]
  |  Branch (1104:5): [True: 19.7M, False: 0]
  ------------------
 1105|  19.7M|    if (v == NULL || w == NULL) {
  ------------------
  |  Branch (1105:9): [True: 0, False: 19.7M]
  |  Branch (1105:22): [True: 0, False: 19.7M]
  ------------------
 1106|      0|        if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1106:13): [True: 0, False: 0]
  ------------------
 1107|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1108|      0|        }
 1109|      0|        return NULL;
 1110|      0|    }
 1111|  19.7M|    if (_Py_EnterRecursiveCallTstate(tstate, " in comparison")) {
  ------------------
  |  Branch (1111:9): [True: 0, False: 19.7M]
  ------------------
 1112|      0|        return NULL;
 1113|      0|    }
 1114|  19.7M|    PyObject *res = do_richcompare(tstate, v, w, op);
 1115|  19.7M|    _Py_LeaveRecursiveCallTstate(tstate);
 1116|  19.7M|    return res;
 1117|  19.7M|}
PyObject_RichCompareBool:
 1123|  31.0M|{
 1124|  31.0M|    PyObject *res;
 1125|  31.0M|    int ok;
 1126|       |
 1127|       |    /* Quick result when objects are the same.
 1128|       |       Guarantees that identity implies equality. */
 1129|  31.0M|    if (v == w) {
  ------------------
  |  Branch (1129:9): [True: 23.3M, False: 7.73M]
  ------------------
 1130|  23.3M|        if (op == Py_EQ)
  ------------------
  |  |  654|  23.3M|#define Py_EQ 2
  ------------------
  |  Branch (1130:13): [True: 23.3M, False: 10]
  ------------------
 1131|  23.3M|            return 1;
 1132|     10|        else if (op == Py_NE)
  ------------------
  |  |  655|     10|#define Py_NE 3
  ------------------
  |  Branch (1132:18): [True: 0, False: 10]
  ------------------
 1133|      0|            return 0;
 1134|  23.3M|    }
 1135|       |
 1136|  7.73M|    res = PyObject_RichCompare(v, w, op);
 1137|  7.73M|    if (res == NULL)
  ------------------
  |  Branch (1137:9): [True: 0, False: 7.73M]
  ------------------
 1138|      0|        return -1;
 1139|  7.73M|    if (PyBool_Check(res)) {
  ------------------
  |  |   12|  7.73M|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|  7.73M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  7.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  7.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 7.73M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1140|  7.73M|        ok = (res == Py_True);
  ------------------
  |  |   26|  7.73M|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  7.73M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.73M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1141|  7.73M|        assert(_Py_IsImmortal(res));
  ------------------
  |  Branch (1141:9): [True: 7.73M, False: 0]
  ------------------
 1142|  7.73M|    }
 1143|      0|    else {
 1144|      0|        ok = PyObject_IsTrue(res);
 1145|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1146|      0|    }
 1147|  7.73M|    return ok;
 1148|  7.73M|}
PyObject_Hash:
 1160|   341M|{
 1161|   341M|    PyTypeObject *tp = Py_TYPE(v);
  ------------------
  |  |  213|   341M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   341M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   341M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1162|   341M|    if (tp->tp_hash != NULL)
  ------------------
  |  Branch (1162:9): [True: 341M, False: 0]
  ------------------
 1163|   341M|        return (*tp->tp_hash)(v);
 1164|       |    /* To keep to the general practice that inheriting
 1165|       |     * solely from object in C code should work without
 1166|       |     * an explicit call to PyType_Ready, we implicitly call
 1167|       |     * PyType_Ready here and then check the tp_hash slot again
 1168|       |     */
 1169|      0|    if (!_PyType_IsReady(tp)) {
  ------------------
  |  Branch (1169:9): [True: 0, False: 0]
  ------------------
 1170|      0|        if (PyType_Ready(tp) < 0)
  ------------------
  |  Branch (1170:13): [True: 0, False: 0]
  ------------------
 1171|      0|            return -1;
 1172|      0|        if (tp->tp_hash != NULL)
  ------------------
  |  Branch (1172:13): [True: 0, False: 0]
  ------------------
 1173|      0|            return (*tp->tp_hash)(v);
 1174|      0|    }
 1175|       |    /* Otherwise, the object can't be hashed */
 1176|      0|    return PyObject_HashNotImplemented(v);
 1177|      0|}
PyObject_GetAttrString:
 1181|  2.30k|{
 1182|  2.30k|    PyObject *w, *res;
 1183|       |
 1184|  2.30k|    if (Py_TYPE(v)->tp_getattr != NULL)
  ------------------
  |  |  213|  2.30k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.30k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.30k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1184:9): [True: 0, False: 2.30k]
  ------------------
 1185|      0|        return (*Py_TYPE(v)->tp_getattr)(v, (char*)name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1186|  2.30k|    w = PyUnicode_FromString(name);
 1187|  2.30k|    if (w == NULL)
  ------------------
  |  Branch (1187:9): [True: 0, False: 2.30k]
  ------------------
 1188|      0|        return NULL;
 1189|  2.30k|    res = PyObject_GetAttr(v, w);
 1190|  2.30k|    Py_DECREF(w);
  ------------------
  |  |  430|  2.30k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.30k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.30k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1191|  2.30k|    return res;
 1192|  2.30k|}
PyObject_SetAttrString:
 1220|  1.38k|{
 1221|  1.38k|    PyThreadState *tstate = _PyThreadState_GET();
 1222|  1.38k|    if (w == NULL && _PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1222:9): [True: 0, False: 1.38k]
  |  Branch (1222:22): [True: 0, False: 0]
  ------------------
 1223|      0|        PyObject *exc = _PyErr_GetRaisedException(tstate);
 1224|      0|        _PyErr_SetString(tstate, PyExc_SystemError,
 1225|      0|            "PyObject_SetAttrString() must not be called with NULL value "
 1226|      0|            "and an exception set");
 1227|      0|        _PyErr_ChainExceptions1Tstate(tstate, exc);
 1228|      0|        return -1;
 1229|      0|    }
 1230|       |
 1231|  1.38k|    if (Py_TYPE(v)->tp_setattr != NULL) {
  ------------------
  |  |  213|  1.38k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1231:9): [True: 0, False: 1.38k]
  ------------------
 1232|      0|        return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1233|      0|    }
 1234|       |
 1235|  1.38k|    PyObject *s = PyUnicode_InternFromString(name);
 1236|  1.38k|    if (s == NULL) {
  ------------------
  |  Branch (1236:9): [True: 0, False: 1.38k]
  ------------------
 1237|      0|        return -1;
 1238|      0|    }
 1239|       |
 1240|  1.38k|    int res = PyObject_SetAttr(v, s, w);
 1241|  1.38k|    Py_DECREF(s);
  ------------------
  |  |  430|  1.38k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1242|  1.38k|    return res;
 1243|  1.38k|}
_PyObject_IsAbstract:
 1253|  1.11k|{
 1254|  1.11k|    int res;
 1255|  1.11k|    PyObject* isabstract;
 1256|       |
 1257|  1.11k|    if (obj == NULL)
  ------------------
  |  Branch (1257:9): [True: 18, False: 1.10k]
  ------------------
 1258|     18|        return 0;
 1259|       |
 1260|  1.10k|    res = PyObject_GetOptionalAttr(obj, &_Py_ID(__isabstractmethod__), &isabstract);
  ------------------
  |  |  936|  1.10k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.10k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.10k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1261|  1.10k|    if (res > 0) {
  ------------------
  |  Branch (1261:9): [True: 267, False: 833]
  ------------------
 1262|    267|        res = PyObject_IsTrue(isabstract);
 1263|    267|        Py_DECREF(isabstract);
  ------------------
  |  |  430|    267|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    267|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    267|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1264|    267|    }
 1265|  1.10k|    return res;
 1266|  1.11k|}
_PyObject_SetAttributeErrorContext:
 1284|    782|{
 1285|    782|    assert(PyErr_Occurred());
  ------------------
  |  Branch (1285:5): [True: 782, False: 0]
  ------------------
 1286|    782|    if (!PyErr_ExceptionMatches(PyExc_AttributeError)){
  ------------------
  |  Branch (1286:9): [True: 0, False: 782]
  ------------------
 1287|      0|        return 0;
 1288|      0|    }
 1289|       |    // Intercept AttributeError exceptions and augment them to offer suggestions later.
 1290|    782|    PyObject *exc = PyErr_GetRaisedException();
 1291|    782|    if (!PyErr_GivenExceptionMatches(exc, PyExc_AttributeError)) {
  ------------------
  |  Branch (1291:9): [True: 0, False: 782]
  ------------------
 1292|      0|        goto restore;
 1293|      0|    }
 1294|    782|    PyAttributeErrorObject* the_exc = (PyAttributeErrorObject*) exc;
 1295|       |    // Check if this exception was already augmented
 1296|    782|    if (the_exc->name || the_exc->obj) {
  ------------------
  |  Branch (1296:9): [True: 235, False: 547]
  |  Branch (1296:26): [True: 0, False: 547]
  ------------------
 1297|    235|        goto restore;
 1298|    235|    }
 1299|       |    // Augment the exception with the name and object
 1300|    547|    if (PyObject_SetAttr(exc, &_Py_ID(name), name) ||
  ------------------
  |  |  936|    547|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    547|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    547|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1300:9): [True: 0, False: 547]
  ------------------
 1301|    547|        PyObject_SetAttr(exc, &_Py_ID(obj), v)) {
  ------------------
  |  |  936|    547|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    547|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    547|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1301:9): [True: 0, False: 547]
  ------------------
 1302|      0|        Py_DECREF(exc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1303|      0|        return 1;
 1304|      0|    }
 1305|    782|restore:
 1306|    782|    PyErr_SetRaisedException(exc);
 1307|    782|    return 0;
 1308|    547|}
PyObject_GetAttr:
 1312|  80.3k|{
 1313|  80.3k|    PyTypeObject *tp = Py_TYPE(v);
  ------------------
  |  |  213|  80.3k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  80.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  80.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1314|  80.3k|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|  80.3k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  80.3k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1314:9): [True: 0, False: 80.3k]
  ------------------
 1315|      0|        PyErr_Format(PyExc_TypeError,
 1316|      0|                     "attribute name must be string, not '%.200s'",
 1317|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1318|      0|        return NULL;
 1319|      0|    }
 1320|       |
 1321|  80.3k|    PyObject* result = NULL;
 1322|  80.3k|    if (tp->tp_getattro != NULL) {
  ------------------
  |  Branch (1322:9): [True: 80.3k, False: 0]
  ------------------
 1323|  80.3k|        result = (*tp->tp_getattro)(v, name);
 1324|  80.3k|    }
 1325|      0|    else if (tp->tp_getattr != NULL) {
  ------------------
  |  Branch (1325:14): [True: 0, False: 0]
  ------------------
 1326|      0|        const char *name_str = PyUnicode_AsUTF8(name);
 1327|      0|        if (name_str == NULL) {
  ------------------
  |  Branch (1327:13): [True: 0, False: 0]
  ------------------
 1328|      0|            return NULL;
 1329|      0|        }
 1330|      0|        result = (*tp->tp_getattr)(v, (char *)name_str);
 1331|      0|    }
 1332|      0|    else {
 1333|      0|        PyErr_Format(PyExc_AttributeError,
 1334|      0|                    "'%.100s' object has no attribute '%U'",
 1335|      0|                    tp->tp_name, name);
 1336|      0|    }
 1337|       |
 1338|  80.3k|    if (result == NULL) {
  ------------------
  |  Branch (1338:9): [True: 135, False: 80.2k]
  ------------------
 1339|    135|        _PyObject_SetAttributeErrorContext(v, name);
 1340|    135|    }
 1341|  80.3k|    return result;
 1342|  80.3k|}
_PyObject_GetAttrStackRef:
 1349|  1.97M|{
 1350|  1.97M|    PyTypeObject *tp = Py_TYPE(v);
  ------------------
  |  |  213|  1.97M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.97M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.97M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1351|  1.97M|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|  1.97M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.97M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1351:9): [True: 0, False: 1.97M]
  ------------------
 1352|      0|        PyErr_Format(PyExc_TypeError,
 1353|      0|                     "attribute name must be string, not '%.200s'",
 1354|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1355|      0|        return PyStackRef_NULL;
 1356|      0|    }
 1357|       |
 1358|       |    /* Fast path for types - can return deferred references */
 1359|  1.97M|    if (tp->tp_getattro == _Py_type_getattro) {
  ------------------
  |  Branch (1359:9): [True: 99.6k, False: 1.88M]
  ------------------
 1360|  99.6k|        _PyStackRef result = _Py_type_getattro_stackref((PyTypeObject *)v, name, NULL);
 1361|  99.6k|        if (PyStackRef_IsNull(result)) {
  ------------------
  |  |  482|  99.6k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  99.6k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  99.6k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 2, False: 99.6k]
  |  |  ------------------
  ------------------
 1362|      2|            _PyObject_SetAttributeErrorContext(v, name);
 1363|      2|        }
 1364|  99.6k|        return result;
 1365|  99.6k|    }
 1366|       |
 1367|       |    /* Fall back to regular PyObject_GetAttr and convert to stackref */
 1368|  1.88M|    PyObject *result = NULL;
 1369|  1.88M|    if (tp->tp_getattro != NULL) {
  ------------------
  |  Branch (1369:9): [True: 1.88M, False: 0]
  ------------------
 1370|  1.88M|        result = (*tp->tp_getattro)(v, name);
 1371|  1.88M|    }
 1372|      0|    else if (tp->tp_getattr != NULL) {
  ------------------
  |  Branch (1372:14): [True: 0, False: 0]
  ------------------
 1373|      0|        const char *name_str = PyUnicode_AsUTF8(name);
 1374|      0|        if (name_str == NULL) {
  ------------------
  |  Branch (1374:13): [True: 0, False: 0]
  ------------------
 1375|      0|            return PyStackRef_NULL;
 1376|      0|        }
 1377|      0|        result = (*tp->tp_getattr)(v, (char *)name_str);
 1378|      0|    }
 1379|      0|    else {
 1380|      0|        PyErr_Format(PyExc_AttributeError,
 1381|      0|                    "'%.100s' object has no attribute '%U'",
 1382|      0|                    tp->tp_name, name);
 1383|      0|    }
 1384|       |
 1385|  1.88M|    if (result == NULL) {
  ------------------
  |  Branch (1385:9): [True: 255, False: 1.87M]
  ------------------
 1386|    255|        _PyObject_SetAttributeErrorContext(v, name);
 1387|    255|        return PyStackRef_NULL;
 1388|    255|    }
 1389|  1.87M|    return PyStackRef_FromPyObjectSteal(result);
 1390|  1.88M|}
PyObject_GetOptionalAttr:
 1394|  1.15M|{
 1395|  1.15M|    PyTypeObject *tp = Py_TYPE(v);
  ------------------
  |  |  213|  1.15M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.15M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|       |
 1397|  1.15M|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|  1.15M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.15M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1397:9): [True: 0, False: 1.15M]
  ------------------
 1398|      0|        PyErr_Format(PyExc_TypeError,
 1399|      0|                     "attribute name must be string, not '%.200s'",
 1400|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|      0|        *result = NULL;
 1402|      0|        return -1;
 1403|      0|    }
 1404|       |
 1405|  1.15M|    if (tp->tp_getattro == PyObject_GenericGetAttr) {
  ------------------
  |  Branch (1405:9): [True: 510k, False: 640k]
  ------------------
 1406|   510k|        *result = _PyObject_GenericGetAttrWithDict(v, name, NULL, 1);
 1407|   510k|        if (*result != NULL) {
  ------------------
  |  Branch (1407:13): [True: 407k, False: 103k]
  ------------------
 1408|   407k|            return 1;
 1409|   407k|        }
 1410|   103k|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1410:13): [True: 0, False: 103k]
  ------------------
 1411|      0|            return -1;
 1412|      0|        }
 1413|   103k|        return 0;
 1414|   103k|    }
 1415|   640k|    if (tp->tp_getattro == _Py_type_getattro) {
  ------------------
  |  Branch (1415:9): [True: 1.14k, False: 639k]
  ------------------
 1416|  1.14k|        int suppress_missing_attribute_exception = 0;
 1417|  1.14k|        *result = _Py_type_getattro_impl((PyTypeObject*)v, name, &suppress_missing_attribute_exception);
 1418|  1.14k|        if (suppress_missing_attribute_exception) {
  ------------------
  |  Branch (1418:13): [True: 29, False: 1.11k]
  ------------------
 1419|       |            // return 0 without having to clear the exception
 1420|     29|            return 0;
 1421|     29|        }
 1422|  1.14k|    }
 1423|   639k|    else if (tp->tp_getattro == (getattrofunc)_Py_module_getattro) {
  ------------------
  |  Branch (1423:14): [True: 639k, False: 0]
  ------------------
 1424|       |        // optimization: suppress attribute error from module getattro method
 1425|   639k|        *result = _Py_module_getattro_impl((PyModuleObject*)v, name, 1);
 1426|   639k|        if (*result != NULL) {
  ------------------
  |  Branch (1426:13): [True: 639k, False: 545]
  ------------------
 1427|   639k|            return 1;
 1428|   639k|        }
 1429|    545|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1429:13): [True: 0, False: 545]
  ------------------
 1430|      0|            return -1;
 1431|      0|        }
 1432|    545|        return 0;
 1433|    545|    }
 1434|      0|    else if (tp->tp_getattro != NULL) {
  ------------------
  |  Branch (1434:14): [True: 0, False: 0]
  ------------------
 1435|      0|        *result = (*tp->tp_getattro)(v, name);
 1436|      0|    }
 1437|      0|    else if (tp->tp_getattr != NULL) {
  ------------------
  |  Branch (1437:14): [True: 0, False: 0]
  ------------------
 1438|      0|        const char *name_str = PyUnicode_AsUTF8(name);
 1439|      0|        if (name_str == NULL) {
  ------------------
  |  Branch (1439:13): [True: 0, False: 0]
  ------------------
 1440|      0|            *result = NULL;
 1441|      0|            return -1;
 1442|      0|        }
 1443|      0|        *result = (*tp->tp_getattr)(v, (char *)name_str);
 1444|      0|    }
 1445|      0|    else {
 1446|      0|        *result = NULL;
 1447|      0|        return 0;
 1448|      0|    }
 1449|       |
 1450|  1.11k|    if (*result != NULL) {
  ------------------
  |  Branch (1450:9): [True: 1.08k, False: 25]
  ------------------
 1451|  1.08k|        return 1;
 1452|  1.08k|    }
 1453|     25|    if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1453:9): [True: 0, False: 25]
  ------------------
 1454|      0|        return -1;
 1455|      0|    }
 1456|     25|    PyErr_Clear();
 1457|     25|    return 0;
 1458|     25|}
PyObject_GetOptionalAttrString:
 1462|      1|{
 1463|      1|    if (Py_TYPE(obj)->tp_getattr == NULL) {
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1463:9): [True: 1, False: 0]
  ------------------
 1464|      1|        PyObject *oname = PyUnicode_FromString(name);
 1465|      1|        if (oname == NULL) {
  ------------------
  |  Branch (1465:13): [True: 0, False: 1]
  ------------------
 1466|      0|            *result = NULL;
 1467|      0|            return -1;
 1468|      0|        }
 1469|      1|        int rc = PyObject_GetOptionalAttr(obj, oname, result);
 1470|      1|        Py_DECREF(oname);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1471|      1|        return rc;
 1472|      1|    }
 1473|       |
 1474|      0|    *result = (*Py_TYPE(obj)->tp_getattr)(obj, (char*)name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1475|      0|    if (*result != NULL) {
  ------------------
  |  Branch (1475:9): [True: 0, False: 0]
  ------------------
 1476|      0|        return 1;
 1477|      0|    }
 1478|      0|    if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1478:9): [True: 0, False: 0]
  ------------------
 1479|      0|        return -1;
 1480|      0|    }
 1481|      0|    PyErr_Clear();
 1482|      0|    return 0;
 1483|      0|}
PyObject_HasAttrWithError:
 1487|    560|{
 1488|    560|    PyObject *res;
 1489|    560|    int rc = PyObject_GetOptionalAttr(obj, name, &res);
 1490|    560|    Py_XDECREF(res);
  ------------------
  |  |  524|    560|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    560|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    560|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1491|    560|    return rc;
 1492|    560|}
PyObject_SetAttr:
 1510|  2.56M|{
 1511|  2.56M|    PyThreadState *tstate = _PyThreadState_GET();
 1512|  2.56M|    if (value == NULL && _PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1512:9): [True: 36, False: 2.56M]
  |  Branch (1512:26): [True: 0, False: 36]
  ------------------
 1513|      0|        PyObject *exc = _PyErr_GetRaisedException(tstate);
 1514|      0|        _PyErr_SetString(tstate, PyExc_SystemError,
 1515|      0|            "PyObject_SetAttr() must not be called with NULL value "
 1516|      0|            "and an exception set");
 1517|      0|        _PyErr_ChainExceptions1Tstate(tstate, exc);
 1518|      0|        return -1;
 1519|      0|    }
 1520|       |
 1521|  2.56M|    PyTypeObject *tp = Py_TYPE(v);
  ------------------
  |  |  213|  2.56M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.56M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.56M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1522|  2.56M|    int err;
 1523|       |
 1524|  2.56M|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|  2.56M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.56M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1524:9): [True: 0, False: 2.56M]
  ------------------
 1525|      0|        PyErr_Format(PyExc_TypeError,
 1526|      0|                     "attribute name must be string, not '%.200s'",
 1527|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1528|      0|        return -1;
 1529|      0|    }
 1530|  2.56M|    Py_INCREF(name);
  ------------------
  |  |  310|  2.56M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.56M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.56M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1531|       |
 1532|  2.56M|    _PyUnicode_InternMortal(tstate->interp, &name);
 1533|  2.56M|    if (tp->tp_setattro != NULL) {
  ------------------
  |  Branch (1533:9): [True: 2.56M, False: 0]
  ------------------
 1534|  2.56M|        err = (*tp->tp_setattro)(v, name, value);
 1535|  2.56M|        Py_DECREF(name);
  ------------------
  |  |  430|  2.56M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.56M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.56M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1536|  2.56M|        return err;
 1537|  2.56M|    }
 1538|      0|    if (tp->tp_setattr != NULL) {
  ------------------
  |  Branch (1538:9): [True: 0, False: 0]
  ------------------
 1539|      0|        const char *name_str = PyUnicode_AsUTF8(name);
 1540|      0|        if (name_str == NULL) {
  ------------------
  |  Branch (1540:13): [True: 0, False: 0]
  ------------------
 1541|      0|            Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1542|      0|            return -1;
 1543|      0|        }
 1544|      0|        err = (*tp->tp_setattr)(v, (char *)name_str, value);
 1545|      0|        Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1546|      0|        return err;
 1547|      0|    }
 1548|      0|    Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1549|      0|    _PyObject_ASSERT(name, Py_REFCNT(name) >= 1);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1550|      0|    if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
  ------------------
  |  Branch (1550:9): [True: 0, False: 0]
  |  Branch (1550:35): [True: 0, False: 0]
  ------------------
 1551|      0|        PyErr_Format(PyExc_TypeError,
 1552|      0|                     "'%.100s' object has no attributes "
 1553|      0|                     "(%s .%U)",
 1554|      0|                     tp->tp_name,
 1555|      0|                     value==NULL ? "del" : "assign to",
  ------------------
  |  Branch (1555:22): [True: 0, False: 0]
  ------------------
 1556|      0|                     name);
 1557|      0|    else
 1558|      0|        PyErr_Format(PyExc_TypeError,
 1559|      0|                     "'%.100s' object has only read-only attributes "
 1560|      0|                     "(%s .%U)",
 1561|      0|                     tp->tp_name,
 1562|      0|                     value==NULL ? "del" : "assign to",
  ------------------
  |  Branch (1562:22): [True: 0, False: 0]
  ------------------
 1563|      0|                     name);
 1564|      0|    return -1;
 1565|      0|}
PyObject_DelAttr:
 1569|     36|{
 1570|       |    return PyObject_SetAttr(v, name, NULL);
 1571|     36|}
_PyObject_ComputedDictPointer:
 1575|  5.34M|{
 1576|  5.34M|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|  5.34M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.34M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.34M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1577|  5.34M|    assert((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0);
  ------------------
  |  Branch (1577:5): [True: 5.34M, False: 0]
  ------------------
 1578|       |
 1579|  5.34M|    Py_ssize_t dictoffset = tp->tp_dictoffset;
 1580|  5.34M|    if (dictoffset == 0) {
  ------------------
  |  Branch (1580:9): [True: 1.89M, False: 3.45M]
  ------------------
 1581|  1.89M|        return NULL;
 1582|  1.89M|    }
 1583|       |
 1584|  3.45M|    if (dictoffset < 0) {
  ------------------
  |  Branch (1584:9): [True: 0, False: 3.45M]
  ------------------
 1585|      0|        assert(dictoffset != -1);
  ------------------
  |  Branch (1585:9): [True: 0, False: 0]
  ------------------
 1586|       |
 1587|      0|        Py_ssize_t tsize = Py_SIZE(obj);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1588|      0|        if (tsize < 0) {
  ------------------
  |  Branch (1588:13): [True: 0, False: 0]
  ------------------
 1589|      0|            tsize = -tsize;
 1590|      0|        }
 1591|      0|        size_t size = _PyObject_VAR_SIZE(tp, tsize);
 1592|      0|        assert(size <= (size_t)PY_SSIZE_T_MAX);
  ------------------
  |  Branch (1592:9): [True: 0, False: 0]
  ------------------
 1593|      0|        dictoffset += (Py_ssize_t)size;
 1594|       |
 1595|      0|        _PyObject_ASSERT(obj, dictoffset > 0);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1596|      0|        _PyObject_ASSERT(obj, dictoffset % SIZEOF_VOID_P == 0);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1597|      0|    }
 1598|  3.45M|    return (PyObject **) ((char *)obj + dictoffset);
 1599|  3.45M|}
PyObject_SelfIter:
 1627|  1.19k|{
 1628|  1.19k|    return Py_NewRef(obj);
  ------------------
  |  |  550|  1.19k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1629|  1.19k|}
_PyObject_GetMethodStackRef:
 1759|   197k|{
 1760|   197k|    int meth_found = 0;
 1761|   197k|    PyObject *obj = PyStackRef_AsPyObjectBorrow(*self);
 1762|       |
 1763|   197k|    assert(PyStackRef_IsNull(*method));
  ------------------
  |  Branch (1763:5): [True: 197k, False: 0]
  ------------------
 1764|       |
 1765|   197k|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|   197k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   197k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   197k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1766|   197k|    if (!_PyType_IsReady(tp)) {
  ------------------
  |  Branch (1766:9): [True: 0, False: 197k]
  ------------------
 1767|      0|        if (PyType_Ready(tp) < 0) {
  ------------------
  |  Branch (1767:13): [True: 0, False: 0]
  ------------------
 1768|      0|            PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1769|      0|            return -1;
 1770|      0|        }
 1771|      0|    }
 1772|       |
 1773|   197k|    if (tp->tp_getattro != PyObject_GenericGetAttr || !PyUnicode_CheckExact(name)) {
  ------------------
  |  |  104|   195k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   195k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   195k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   195k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1773:9): [True: 2.11k, False: 195k]
  |  Branch (1773:55): [True: 0, False: 195k]
  ------------------
 1774|  2.11k|        PyObject *res = PyObject_GetAttr(obj, name);
 1775|  2.11k|        PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|  2.11k|    do { \
  |  |  733|  2.11k|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  2.11k|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  2.11k|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  2.11k|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  2.11k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 2.11k]
  |  |  ------------------
  ------------------
 1776|  2.11k|        if (res != NULL) {
  ------------------
  |  Branch (1776:13): [True: 1.98k, False: 133]
  ------------------
 1777|  1.98k|            *method = PyStackRef_FromPyObjectSteal(res);
 1778|  1.98k|            return 0;
 1779|  1.98k|        }
 1780|    133|        return -1;
 1781|  2.11k|    }
 1782|       |
 1783|   195k|    _PyType_LookupStackRefAndVersion(tp, name, method);
 1784|   195k|    PyObject *descr = PyStackRef_AsPyObjectBorrow(*method);
 1785|   195k|    descrgetfunc f = NULL;
 1786|   195k|    if (descr != NULL) {
  ------------------
  |  Branch (1786:9): [True: 195k, False: 8]
  ------------------
 1787|   195k|        if (_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  213|   195k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   195k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   195k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  534|   195k|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (1787:13): [True: 195k, False: 2]
  ------------------
 1788|   195k|            meth_found = 1;
 1789|   195k|        }
 1790|      2|        else {
 1791|      2|            f = Py_TYPE(descr)->tp_descr_get;
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1792|      2|            if (f != NULL && PyDescr_IsData(descr)) {
  ------------------
  |  Branch (1792:17): [True: 2, False: 0]
  |  Branch (1792:30): [True: 2, False: 0]
  ------------------
 1793|      2|                PyObject *value = f(descr, obj, (PyObject *)Py_TYPE(obj));
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1794|      2|                PyStackRef_CLEAR(*method);
  ------------------
  |  |  732|      2|    do { \
  |  |  733|      2|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      2|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      2|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      2|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1795|      2|                PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      2|    do { \
  |  |  733|      2|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      2|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      2|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      2|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1796|      2|                if (value != NULL) {
  ------------------
  |  Branch (1796:21): [True: 2, False: 0]
  ------------------
 1797|      2|                    *method = PyStackRef_FromPyObjectSteal(value);
 1798|      2|                    return 0;
 1799|      2|                }
 1800|      0|                return -1;
 1801|      2|            }
 1802|      2|        }
 1803|   195k|    }
 1804|   195k|    PyObject *dict, *attr;
 1805|   195k|    if ((tp->tp_flags & Py_TPFLAGS_INLINE_VALUES) &&
  ------------------
  |  |  472|   195k|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (1805:9): [True: 125, False: 195k]
  ------------------
 1806|    125|         _PyObject_TryGetInstanceAttribute(obj, name, &attr)) {
  ------------------
  |  Branch (1806:10): [True: 125, False: 0]
  ------------------
 1807|    125|        if (attr != NULL) {
  ------------------
  |  Branch (1807:13): [True: 8, False: 117]
  ------------------
 1808|      8|            PyStackRef_XSETREF(*method, PyStackRef_FromPyObjectSteal(attr));
  ------------------
  |  |  855|      8|    do { \
  |  |  856|      8|        _PyStackRef _tmp_dst_ref = (dst); \
  |  |  857|      8|        (dst) = (src); \
  |  |  858|      8|        PyStackRef_XCLOSE(_tmp_dst_ref); \
  |  |  859|      8|    } while(0)
  |  |  ------------------
  |  |  |  Branch (859:13): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1809|      8|            PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      8|    do { \
  |  |  733|      8|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      8|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      8|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      8|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1810|      8|            return 0;
 1811|      8|        }
 1812|    117|        dict = NULL;
 1813|    117|    }
 1814|   195k|    else if ((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT)) {
  ------------------
  |  |  482|   195k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (1814:14): [True: 25, False: 195k]
  ------------------
 1815|     25|        dict = (PyObject *)_PyObject_GetManagedDict(obj);
 1816|     25|    }
 1817|   195k|    else {
 1818|   195k|        PyObject **dictptr = _PyObject_ComputedDictPointer(obj);
 1819|   195k|        if (dictptr != NULL) {
  ------------------
  |  Branch (1819:13): [True: 194k, False: 878]
  ------------------
 1820|   194k|            dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*dictptr);
  ------------------
  |  |  150|   194k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
 1821|   194k|        }
 1822|    878|        else {
 1823|    878|            dict = NULL;
 1824|    878|        }
 1825|   195k|    }
 1826|   195k|    if (dict != NULL) {
  ------------------
  |  Branch (1826:9): [True: 97.5k, False: 98.1k]
  ------------------
 1827|  97.5k|        assert(PyUnicode_CheckExact(name));
  ------------------
  |  Branch (1827:9): [True: 97.5k, False: 0]
  ------------------
 1828|  97.5k|        int found = _PyDict_GetMethodStackRef((PyDictObject *)dict, name, method);
 1829|  97.5k|        if (found < 0) {
  ------------------
  |  Branch (1829:13): [True: 0, False: 97.5k]
  ------------------
 1830|      0|            assert(PyStackRef_IsNull(*method));
  ------------------
  |  Branch (1830:13): [True: 0, False: 0]
  ------------------
 1831|      0|            PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1832|      0|            return -1;
 1833|      0|        }
 1834|  97.5k|        else if (found) {
  ------------------
  |  Branch (1834:18): [True: 0, False: 97.5k]
  ------------------
 1835|      0|            PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1836|      0|            return 0;
 1837|      0|        }
 1838|  97.5k|    }
 1839|       |
 1840|   195k|    if (meth_found) {
  ------------------
  |  Branch (1840:9): [True: 195k, False: 0]
  ------------------
 1841|   195k|        assert(!PyStackRef_IsNull(*method));
  ------------------
  |  Branch (1841:9): [True: 195k, False: 0]
  ------------------
 1842|   195k|        return 1;
 1843|   195k|    }
 1844|       |
 1845|      0|    if (f != NULL) {
  ------------------
  |  Branch (1845:9): [True: 0, False: 0]
  ------------------
 1846|      0|        if (Py_IS_TYPE(descr, &PyClassMethod_Type)) {
  ------------------
  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1847|      0|            PyObject *callable = _PyClassMethod_GetFunc(descr);
 1848|      0|            PyStackRef_XSETREF(*method, PyStackRef_FromPyObjectNew(callable));
  ------------------
  |  |  855|      0|    do { \
  |  |  856|      0|        _PyStackRef _tmp_dst_ref = (dst); \
  |  |  857|      0|        (dst) = (src); \
  |  |  858|      0|        PyStackRef_XCLOSE(_tmp_dst_ref); \
  |  |  859|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (859:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1849|      0|            PyStackRef_XSETREF(*self, PyStackRef_FromPyObjectNew((PyObject *)tp));
  ------------------
  |  |  855|      0|    do { \
  |  |  856|      0|        _PyStackRef _tmp_dst_ref = (dst); \
  |  |  857|      0|        (dst) = (src); \
  |  |  858|      0|        PyStackRef_XCLOSE(_tmp_dst_ref); \
  |  |  859|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (859:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1850|      0|            return 1;
 1851|      0|        }
 1852|      0|        else if (Py_IS_TYPE(descr, &PyStaticMethod_Type)) {
  ------------------
  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1853|      0|            PyObject *callable = _PyStaticMethod_GetFunc(descr);
 1854|      0|            PyStackRef_XSETREF(*method, PyStackRef_FromPyObjectNew(callable));
  ------------------
  |  |  855|      0|    do { \
  |  |  856|      0|        _PyStackRef _tmp_dst_ref = (dst); \
  |  |  857|      0|        (dst) = (src); \
  |  |  858|      0|        PyStackRef_XCLOSE(_tmp_dst_ref); \
  |  |  859|      0|    } while(0)
  |  |  ------------------
  |  |  |  Branch (859:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1855|      0|            PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1856|      0|            return 0;
 1857|      0|        }
 1858|      0|        PyObject *value = f(descr, obj, (PyObject *)tp);
 1859|      0|        PyStackRef_CLEAR(*method);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1860|      0|        PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1861|      0|        if (value) {
  ------------------
  |  Branch (1861:13): [True: 0, False: 0]
  ------------------
 1862|      0|            *method = PyStackRef_FromPyObjectSteal(value);
 1863|      0|            return 0;
 1864|      0|        }
 1865|      0|        return -1;
 1866|      0|    }
 1867|       |
 1868|      0|    if (descr != NULL) {
  ------------------
  |  Branch (1868:9): [True: 0, False: 0]
  ------------------
 1869|      0|        assert(!PyStackRef_IsNull(*method));
  ------------------
  |  Branch (1869:9): [True: 0, False: 0]
  ------------------
 1870|      0|        PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1871|      0|        return 0;
 1872|      0|    }
 1873|       |
 1874|      0|    PyErr_Format(PyExc_AttributeError,
 1875|      0|                 "'%.100s' object has no attribute '%U'",
 1876|      0|                 tp->tp_name, name);
 1877|       |
 1878|      0|    _PyObject_SetAttributeErrorContext(obj, name);
 1879|      0|    assert(PyStackRef_IsNull(*method));
  ------------------
  |  Branch (1879:5): [True: 0, False: 0]
  ------------------
 1880|      0|    PyStackRef_CLEAR(*self);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1881|      0|    return -1;
 1882|      0|}
_PyObject_GenericGetAttrWithDict:
 1890|  3.10M|{
 1891|       |    /* Make sure the logic of _PyObject_GetMethod is in sync with
 1892|       |       this method.
 1893|       |
 1894|       |       When suppress=1, this function suppresses AttributeError.
 1895|       |    */
 1896|       |
 1897|  3.10M|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|  3.10M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  3.10M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1898|  3.10M|    PyObject *descr = NULL;
 1899|  3.10M|    PyObject *res = NULL;
 1900|  3.10M|    descrgetfunc f;
 1901|       |
 1902|  3.10M|    if (!PyUnicode_Check(name)){
  ------------------
  |  |  103|  3.10M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  3.10M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1902:9): [True: 0, False: 3.10M]
  ------------------
 1903|      0|        PyErr_Format(PyExc_TypeError,
 1904|      0|                     "attribute name must be string, not '%.200s'",
 1905|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1906|      0|        return NULL;
 1907|      0|    }
 1908|       |
 1909|  3.10M|    if (!_PyType_IsReady(tp)) {
  ------------------
  |  Branch (1909:9): [True: 0, False: 3.10M]
  ------------------
 1910|      0|        if (PyType_Ready(tp) < 0)
  ------------------
  |  Branch (1910:13): [True: 0, False: 0]
  ------------------
 1911|      0|            return NULL;
 1912|      0|    }
 1913|       |
 1914|  3.10M|    Py_INCREF(name);
  ------------------
  |  |  310|  3.10M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.10M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1915|       |
 1916|  3.10M|    PyThreadState *tstate = _PyThreadState_GET();
 1917|  3.10M|    _PyCStackRef cref;
 1918|  3.10M|    _PyThreadState_PushCStackRef(tstate, &cref);
 1919|       |
 1920|  3.10M|    _PyType_LookupStackRefAndVersion(tp, name, &cref.ref);
 1921|  3.10M|    descr = PyStackRef_AsPyObjectBorrow(cref.ref);
 1922|       |
 1923|  3.10M|    f = NULL;
 1924|  3.10M|    if (descr != NULL) {
  ------------------
  |  Branch (1924:9): [True: 1.95M, False: 1.14M]
  ------------------
 1925|  1.95M|        f = Py_TYPE(descr)->tp_descr_get;
  ------------------
  |  |  213|  1.95M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.95M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.95M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1926|  1.95M|        if (f != NULL && PyDescr_IsData(descr)) {
  ------------------
  |  Branch (1926:13): [True: 1.91M, False: 41.2k]
  |  Branch (1926:26): [True: 25.5k, False: 1.89M]
  ------------------
 1927|       |            // gh-157840: We special-case member descriptors here to avoid
 1928|       |            // allocating an extra AttributeError
 1929|  25.5k|            if (suppress && Py_IS_TYPE(descr, &PyMemberDescr_Type)) {
  ------------------
  |  |  215|  21.6k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  21.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 28, False: 21.5k]
  |  |  ------------------
  ------------------
  |  Branch (1929:17): [True: 21.6k, False: 3.92k]
  ------------------
 1930|     28|                PyMemberDef *member = ((PyMemberDescrObject *)descr)->d_member;
 1931|     28|                if (member->type == Py_T_OBJECT_EX
  ------------------
  |  |   75|     56|#define Py_T_OBJECT_EX 16
  ------------------
  |  Branch (1931:21): [True: 0, False: 28]
  ------------------
 1932|      0|                    && !(member->flags & Py_AUDIT_READ)
  ------------------
  |  |   84|      0|#define Py_AUDIT_READ          (1 << 1) // Added in 3.10, harmless no-op before that
  ------------------
  |  Branch (1932:24): [True: 0, False: 0]
  ------------------
 1933|      0|                    && PyObject_TypeCheck(obj, PyDescr_TYPE(descr))) {
  ------------------
  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1934|      0|                    PyObject **addr = _PyMember_GetOffset(obj, member);
 1935|      0|                    if (FT_ATOMIC_LOAD_PTR(*addr) == NULL) {
  ------------------
  |  |  145|      0|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
  |  Branch (1935:25): [True: 0, False: 0]
  ------------------
 1936|      0|                        goto done;
 1937|      0|                    }
 1938|      0|                }
 1939|     28|            }
 1940|  25.5k|            res = f(descr, obj, (PyObject *)Py_TYPE(obj));
  ------------------
  |  |  213|  25.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  25.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1941|  25.5k|            if (res == NULL && suppress &&
  ------------------
  |  Branch (1941:17): [True: 0, False: 25.5k]
  |  Branch (1941:32): [True: 0, False: 0]
  ------------------
 1942|      0|                    PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1942:21): [True: 0, False: 0]
  ------------------
 1943|      0|                PyErr_Clear();
 1944|      0|            }
 1945|  25.5k|            goto done;
 1946|  25.5k|        }
 1947|  1.95M|    }
 1948|  3.08M|    if (dict == NULL) {
  ------------------
  |  Branch (1948:9): [True: 3.08M, False: 0]
  ------------------
 1949|  3.08M|        if ((tp->tp_flags & Py_TPFLAGS_INLINE_VALUES)) {
  ------------------
  |  |  472|  3.08M|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (1949:13): [True: 445k, False: 2.63M]
  ------------------
 1950|   445k|            if (PyUnicode_CheckExact(name) &&
  ------------------
  |  |  104|   445k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   890k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   445k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   445k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 445k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1951|   445k|                _PyObject_TryGetInstanceAttribute(obj, name, &res)) {
  ------------------
  |  Branch (1951:17): [True: 445k, False: 0]
  ------------------
 1952|   445k|                if (res != NULL) {
  ------------------
  |  Branch (1952:21): [True: 344k, False: 100k]
  ------------------
 1953|   344k|                    goto done;
 1954|   344k|                }
 1955|   445k|            }
 1956|      0|            else {
 1957|      0|                dict = (PyObject *)_PyObject_MaterializeManagedDict(obj);
 1958|      0|                if (dict == NULL) {
  ------------------
  |  Branch (1958:21): [True: 0, False: 0]
  ------------------
 1959|      0|                    res = NULL;
 1960|      0|                    goto done;
 1961|      0|                }
 1962|      0|            }
 1963|   445k|        }
 1964|  2.63M|        else if ((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT)) {
  ------------------
  |  |  482|  2.63M|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (1964:18): [True: 41.3k, False: 2.59M]
  ------------------
 1965|  41.3k|            dict = (PyObject *)_PyObject_GetManagedDict(obj);
 1966|  41.3k|        }
 1967|  2.59M|        else {
 1968|  2.59M|            PyObject **dictptr = _PyObject_ComputedDictPointer(obj);
 1969|  2.59M|            if (dictptr) {
  ------------------
  |  Branch (1969:17): [True: 703k, False: 1.89M]
  ------------------
 1970|       |#ifdef Py_GIL_DISABLED
 1971|       |                dict = _Py_atomic_load_ptr_acquire(dictptr);
 1972|       |#else
 1973|   703k|                dict = *dictptr;
 1974|   703k|#endif
 1975|   703k|            }
 1976|  2.59M|        }
 1977|  3.08M|    }
 1978|  2.73M|    if (dict != NULL) {
  ------------------
  |  Branch (1978:9): [True: 742k, False: 1.99M]
  ------------------
 1979|   742k|        Py_INCREF(dict);
  ------------------
  |  |  310|   742k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   742k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   742k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1980|   742k|        int rc = PyDict_GetItemRef(dict, name, &res);
 1981|   742k|        Py_DECREF(dict);
  ------------------
  |  |  430|   742k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   742k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   742k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1982|   742k|        if (res != NULL) {
  ------------------
  |  Branch (1982:13): [True: 699k, False: 42.2k]
  ------------------
 1983|   699k|            goto done;
 1984|   699k|        }
 1985|  42.2k|        else if (rc < 0) {
  ------------------
  |  Branch (1985:18): [True: 0, False: 42.2k]
  ------------------
 1986|      0|            if (suppress && PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1986:17): [True: 0, False: 0]
  |  Branch (1986:29): [True: 0, False: 0]
  ------------------
 1987|      0|                PyErr_Clear();
 1988|      0|            }
 1989|      0|            else {
 1990|      0|                goto done;
 1991|      0|            }
 1992|      0|        }
 1993|   742k|    }
 1994|       |
 1995|  2.03M|    if (f != NULL) {
  ------------------
  |  Branch (1995:9): [True: 1.89M, False: 145k]
  ------------------
 1996|  1.89M|        res = f(descr, obj, (PyObject *)Py_TYPE(obj));
  ------------------
  |  |  213|  1.89M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.89M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.89M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1997|  1.89M|        if (res == NULL && suppress &&
  ------------------
  |  Branch (1997:13): [True: 0, False: 1.89M]
  |  Branch (1997:28): [True: 0, False: 0]
  ------------------
 1998|      0|                PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (1998:17): [True: 0, False: 0]
  ------------------
 1999|      0|            PyErr_Clear();
 2000|      0|        }
 2001|  1.89M|        goto done;
 2002|  1.89M|    }
 2003|       |
 2004|   145k|    if (descr != NULL) {
  ------------------
  |  Branch (2004:9): [True: 41.1k, False: 104k]
  ------------------
 2005|  41.1k|        res = PyStackRef_AsPyObjectSteal(cref.ref);
 2006|  41.1k|        cref.ref = PyStackRef_NULL;
 2007|  41.1k|        goto done;
 2008|  41.1k|    }
 2009|       |
 2010|   104k|    if (!suppress) {
  ------------------
  |  Branch (2010:9): [True: 390, False: 103k]
  ------------------
 2011|    390|        PyErr_Format(PyExc_AttributeError,
 2012|    390|                     "'%.100s' object has no attribute '%U'",
 2013|    390|                     tp->tp_name, name);
 2014|       |
 2015|    390|        _PyObject_SetAttributeErrorContext(obj, name);
 2016|    390|    }
 2017|  3.10M|  done:
 2018|  3.10M|    _PyThreadState_PopCStackRef(tstate, &cref);
 2019|  3.10M|    Py_DECREF(name);
  ------------------
  |  |  430|  3.10M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.10M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2020|  3.10M|    return res;
 2021|   104k|}
PyObject_GenericGetAttr:
 2025|  1.89M|{
 2026|       |    return _PyObject_GenericGetAttrWithDict(obj, name, NULL, 0);
 2027|  1.89M|}
_PyObject_GenericSetAttrWithDict:
 2032|  2.55M|{
 2033|  2.55M|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|  2.55M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2034|  2.55M|    PyObject *descr;
 2035|  2.55M|    descrsetfunc f;
 2036|  2.55M|    int res = -1;
 2037|       |
 2038|  2.55M|    assert(!PyType_IsSubtype(tp, &PyType_Type));
  ------------------
  |  Branch (2038:5): [True: 2.55M, False: 0]
  ------------------
 2039|  2.55M|    if (!PyUnicode_Check(name)){
  ------------------
  |  |  103|  2.55M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.55M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2039:9): [True: 0, False: 2.55M]
  ------------------
 2040|      0|        PyErr_Format(PyExc_TypeError,
 2041|      0|                     "attribute name must be string, not '%.200s'",
 2042|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2043|      0|        return -1;
 2044|      0|    }
 2045|       |
 2046|  2.55M|    if (!_PyType_IsReady(tp) && PyType_Ready(tp) < 0) {
  ------------------
  |  Branch (2046:9): [True: 0, False: 2.55M]
  |  Branch (2046:33): [True: 0, False: 0]
  ------------------
 2047|      0|        return -1;
 2048|      0|    }
 2049|       |
 2050|  2.55M|    Py_INCREF(name);
  ------------------
  |  |  310|  2.55M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2051|  2.55M|    _Py_INCREF_TYPE(tp);
  ------------------
  |  |  307|  2.55M|#  define _Py_INCREF_TYPE Py_INCREF
  |  |  ------------------
  |  |  |  |  310|  2.55M|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2052|       |
 2053|  2.55M|    PyThreadState *tstate = _PyThreadState_GET();
 2054|  2.55M|    _PyCStackRef cref;
 2055|  2.55M|    _PyThreadState_PushCStackRef(tstate, &cref);
 2056|       |
 2057|  2.55M|    _PyType_LookupStackRefAndVersion(tp, name, &cref.ref);
 2058|  2.55M|    descr = PyStackRef_AsPyObjectBorrow(cref.ref);
 2059|       |
 2060|  2.55M|    if (descr != NULL) {
  ------------------
  |  Branch (2060:9): [True: 940k, False: 1.61M]
  ------------------
 2061|   940k|        f = Py_TYPE(descr)->tp_descr_set;
  ------------------
  |  |  213|   940k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   940k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   940k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2062|   940k|        if (f != NULL) {
  ------------------
  |  Branch (2062:13): [True: 2.84k, False: 937k]
  ------------------
 2063|  2.84k|            res = f(descr, obj, value);
 2064|  2.84k|            goto done;
 2065|  2.84k|        }
 2066|   940k|    }
 2067|       |
 2068|  2.55M|    if (dict == NULL) {
  ------------------
  |  Branch (2068:9): [True: 2.55M, False: 0]
  ------------------
 2069|  2.55M|        PyObject **dictptr;
 2070|       |
 2071|  2.55M|        if ((tp->tp_flags & Py_TPFLAGS_INLINE_VALUES)) {
  ------------------
  |  |  472|  2.55M|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (2071:13): [True: 901, False: 2.55M]
  ------------------
 2072|    901|            res = _PyObject_StoreInstanceAttribute(obj, name, value);
 2073|    901|            goto error_check;
 2074|    901|        }
 2075|       |
 2076|  2.55M|        if ((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT)) {
  ------------------
  |  |  482|  2.55M|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (2076:13): [True: 1.30k, False: 2.55M]
  ------------------
 2077|  1.30k|            PyManagedDictPointer *managed_dict = _PyObject_ManagedDictPointer(obj);
 2078|  1.30k|            dictptr = (PyObject **)&managed_dict->dict;
 2079|  1.30k|        }
 2080|  2.55M|        else {
 2081|  2.55M|            dictptr = _PyObject_ComputedDictPointer(obj);
 2082|  2.55M|        }
 2083|  2.55M|        if (dictptr == NULL) {
  ------------------
  |  Branch (2083:13): [True: 0, False: 2.55M]
  ------------------
 2084|      0|            if (descr == NULL) {
  ------------------
  |  Branch (2084:17): [True: 0, False: 0]
  ------------------
 2085|      0|                if (tp->tp_setattro == PyObject_GenericSetAttr) {
  ------------------
  |  Branch (2085:21): [True: 0, False: 0]
  ------------------
 2086|      0|                    PyErr_Format(PyExc_AttributeError,
 2087|      0|                                "'%.100s' object has no attribute '%U' and no "
 2088|      0|                                "__dict__ for setting new attributes",
 2089|      0|                                tp->tp_name, name);
 2090|      0|                }
 2091|      0|                else {
 2092|      0|                    PyErr_Format(PyExc_AttributeError,
 2093|      0|                                "'%.100s' object has no attribute '%U'",
 2094|      0|                                tp->tp_name, name);
 2095|      0|                }
 2096|      0|                _PyObject_SetAttributeErrorContext(obj, name);
 2097|      0|            }
 2098|      0|            else {
 2099|      0|                PyErr_Format(PyExc_AttributeError,
 2100|      0|                            "'%.100s' object attribute '%U' is read-only",
 2101|      0|                            tp->tp_name, name);
 2102|      0|            }
 2103|      0|            goto done;
 2104|      0|        }
 2105|  2.55M|        else {
 2106|  2.55M|            res = _PyObjectDict_SetItem(tp, obj, dictptr, name, value);
 2107|  2.55M|        }
 2108|  2.55M|    }
 2109|      0|    else {
 2110|      0|        Py_INCREF(dict);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2111|      0|        if (value == NULL)
  ------------------
  |  Branch (2111:13): [True: 0, False: 0]
  ------------------
 2112|      0|            res = PyDict_DelItem(dict, name);
 2113|      0|        else
 2114|      0|            res = PyDict_SetItem(dict, name, value);
 2115|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2116|      0|    }
 2117|  2.55M|  error_check:
 2118|  2.55M|    if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) {
  ------------------
  |  Branch (2118:9): [True: 0, False: 2.55M]
  |  Branch (2118:20): [True: 0, False: 0]
  ------------------
 2119|      0|        PyErr_Format(PyExc_AttributeError,
 2120|      0|                        "'%.100s' object has no attribute '%U'",
 2121|      0|                        tp->tp_name, name);
 2122|      0|        _PyObject_SetAttributeErrorContext(obj, name);
 2123|      0|    }
 2124|  2.55M|  done:
 2125|  2.55M|    _PyThreadState_PopCStackRef(tstate, &cref);
 2126|  2.55M|    _Py_DECREF_TYPE(tp);
  ------------------
  |  |  308|  2.55M|#  define _Py_DECREF_TYPE Py_DECREF
  |  |  ------------------
  |  |  |  |  430|  2.55M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2127|  2.55M|    Py_DECREF(name);
  ------------------
  |  |  430|  2.55M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2128|  2.55M|    return res;
 2129|  2.55M|}
PyObject_GenericSetAttr:
 2133|  2.55M|{
 2134|       |    return _PyObject_GenericSetAttrWithDict(obj, name, value, NULL);
 2135|  2.55M|}
PyObject_IsTrue:
 2153|  12.7M|{
 2154|  12.7M|    Py_ssize_t res;
 2155|  12.7M|    if (v == Py_True)
  ------------------
  |  |   26|  12.7M|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  12.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2155:9): [True: 7.05M, False: 5.69M]
  ------------------
 2156|  7.05M|        return 1;
 2157|  5.69M|    if (v == Py_False)
  ------------------
  |  |   25|  5.69M|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  5.69M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.69M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2157:9): [True: 5.56M, False: 127k]
  ------------------
 2158|  5.56M|        return 0;
 2159|   127k|    if (v == Py_None)
  ------------------
  |  |  616|   127k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2159:9): [True: 242, False: 126k]
  ------------------
 2160|    242|        return 0;
 2161|   126k|    else if (Py_TYPE(v)->tp_as_number != NULL &&
  ------------------
  |  |  213|   126k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   126k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   126k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2161:14): [True: 73.5k, False: 53.4k]
  ------------------
 2162|  73.5k|             Py_TYPE(v)->tp_as_number->nb_bool != NULL)
  ------------------
  |  |  213|  73.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  73.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  73.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2162:14): [True: 4.77k, False: 68.7k]
  ------------------
 2163|  4.77k|        res = (*Py_TYPE(v)->tp_as_number->nb_bool)(v);
  ------------------
  |  |  213|  4.77k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.77k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.77k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2164|   122k|    else if (Py_TYPE(v)->tp_as_mapping != NULL &&
  ------------------
  |  |  213|   122k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   122k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   122k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2164:14): [True: 71.5k, False: 50.6k]
  ------------------
 2165|  71.5k|             Py_TYPE(v)->tp_as_mapping->mp_length != NULL)
  ------------------
  |  |  213|  71.5k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  71.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  71.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2165:14): [True: 71.4k, False: 110]
  ------------------
 2166|  71.4k|        res = (*Py_TYPE(v)->tp_as_mapping->mp_length)(v);
  ------------------
  |  |  213|  71.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  71.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  71.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2167|  50.7k|    else if (Py_TYPE(v)->tp_as_sequence != NULL &&
  ------------------
  |  |  213|  50.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2167:14): [True: 2.25k, False: 48.5k]
  ------------------
 2168|  2.25k|             Py_TYPE(v)->tp_as_sequence->sq_length != NULL)
  ------------------
  |  |  213|  2.25k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2168:14): [True: 2.14k, False: 110]
  ------------------
 2169|  2.14k|        res = (*Py_TYPE(v)->tp_as_sequence->sq_length)(v);
  ------------------
  |  |  213|  2.14k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.14k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2170|  48.6k|    else
 2171|  48.6k|        return 1;
 2172|       |    /* if it is negative, it should be either -1 or -2 */
 2173|  78.3k|    return (res > 0) ? 1 : Py_SAFE_DOWNCAST(res, Py_ssize_t, int);
  ------------------
  |  |  247|  68.0k|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  68.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2173:12): [True: 10.3k, False: 68.0k]
  ------------------
 2174|   127k|}
PyCallable_Check:
 2193|  1.00M|{
 2194|  1.00M|    if (x == NULL)
  ------------------
  |  Branch (2194:9): [True: 0, False: 1.00M]
  ------------------
 2195|      0|        return 0;
 2196|  1.00M|    return Py_TYPE(x)->tp_call != NULL;
  ------------------
  |  |  213|  1.00M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.00M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.00M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2197|  1.00M|}
PyObject_Dir:
 2282|      2|{
 2283|      2|    return (obj == NULL) ? _dir_locals() : _dir_object(obj);
  ------------------
  |  Branch (2283:12): [True: 0, False: 2]
  ------------------
 2284|      2|}
_PyObject_InitState:
 2518|      2|{
 2519|       |#ifdef Py_TRACE_REFS
 2520|       |    if (refchain_init(interp) < 0) {
 2521|       |        return _PyStatus_NO_MEMORY();
 2522|       |    }
 2523|       |#endif
 2524|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2525|      2|}
_PyTypes_InitTypes:
 2686|      2|{
 2687|       |    // All other static types (unless initialized elsewhere)
 2688|    246|    for (size_t i=0; i < Py_ARRAY_LENGTH(static_types); i++) {
  ------------------
  |  |  221|    246|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (2688:22): [True: 244, False: 2]
  ------------------
 2689|    244|        PyTypeObject *type = static_types[i];
 2690|    244|        if (type == NULL) {
  ------------------
  |  Branch (2690:13): [True: 4, False: 240]
  ------------------
 2691|      4|            continue;
 2692|      4|        }
 2693|    240|        if (_PyStaticType_InitBuiltin(interp, type) < 0) {
  ------------------
  |  Branch (2693:13): [True: 0, False: 240]
  ------------------
 2694|      0|            return _PyStatus_ERR("Can't initialize builtin type");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2695|      0|        }
 2696|    240|        if (type == &PyType_Type) {
  ------------------
  |  Branch (2696:13): [True: 2, False: 238]
  ------------------
 2697|       |            // Sanitify checks of the two most important types
 2698|      2|            assert(PyBaseObject_Type.tp_base == NULL);
  ------------------
  |  Branch (2698:13): [True: 2, False: 0]
  ------------------
 2699|      2|            assert(PyType_Type.tp_base == &PyBaseObject_Type);
  ------------------
  |  Branch (2699:13): [True: 2, False: 0]
  ------------------
 2700|      2|        }
 2701|    240|    }
 2702|       |
 2703|       |    // Cache __reduce__ from PyBaseObject_Type object
 2704|      2|    PyObject *baseobj_dict = _PyType_GetDict(&PyBaseObject_Type);
 2705|      2|    PyObject *baseobj_reduce = PyDict_GetItemWithError(baseobj_dict, &_Py_ID(__reduce__));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2706|      2|    if (baseobj_reduce == NULL && PyErr_Occurred()) {
  ------------------
  |  Branch (2706:9): [True: 0, False: 2]
  |  Branch (2706:35): [True: 0, False: 0]
  ------------------
 2707|      0|        return _PyStatus_ERR("Can't get __reduce__ from base object");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2708|      0|    }
 2709|      2|    _Py_INTERP_CACHED_OBJECT(interp, objreduce) = baseobj_reduce;
  ------------------
  |  |   22|      2|    (interp)->cached_objects.NAME
  ------------------
 2710|       |
 2711|       |    // Must be after static types are initialized
 2712|      2|    if (_Py_initialize_generic(interp) < 0) {
  ------------------
  |  Branch (2712:9): [True: 0, False: 2]
  ------------------
 2713|      0|        return _PyStatus_ERR("Can't initialize generic types");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2714|      0|    }
 2715|       |
 2716|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2717|      2|}
_Py_NewReference:
 2776|   100M|{
 2777|       |#ifdef Py_REF_DEBUG
 2778|       |    _Py_IncRefTotal(_PyThreadState_GET());
 2779|       |#endif
 2780|   100M|    new_reference(op);
 2781|   100M|}
_Py_NewReferenceNoTotal:
 2785|   428k|{
 2786|   428k|    new_reference(op);
 2787|   428k|}
_Py_SetImmortalUntracked:
 2791|  31.6k|{
 2792|       |    // Check if already immortal to avoid degrading from static immortal to plain immortal
 2793|  31.6k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  31.6k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  31.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  31.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 30, False: 31.6k]
  |  |  ------------------
  ------------------
 2794|     30|        return;
 2795|     30|    }
 2796|       |#ifdef Py_GIL_DISABLED
 2797|       |    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_UNOWNED_TID);
 2798|       |    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, _Py_IMMORTAL_REFCNT_LOCAL);
 2799|       |    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
 2800|       |    _Py_atomic_or_uint8(&op->ob_gc_bits, _PyGC_BITS_DEFERRED);
 2801|       |#elif SIZEOF_VOID_P > 4
 2802|  31.6k|    op->ob_flags = _Py_IMMORTAL_FLAGS;
  ------------------
  |  |  581|  31.6k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  ------------------
 2803|  31.6k|    op->ob_refcnt = _Py_IMMORTAL_INITIAL_REFCNT;
  ------------------
  |  |   47|  31.6k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  ------------------
 2804|       |#else
 2805|       |    op->ob_refcnt = _Py_IMMORTAL_INITIAL_REFCNT;
 2806|       |#endif
 2807|  31.6k|}
_Py_SetImmortal:
 2811|  31.6k|{
 2812|  31.6k|    if (PyObject_IS_GC(op) && _PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|    838|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|    838|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 834, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (2812:9): [True: 838, False: 30.7k]
  ------------------
 2813|    834|        _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|    834|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    834|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    834|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2814|    834|    }
 2815|  31.6k|    _Py_SetImmortalUntracked(op);
 2816|  31.6k|}
_PyObject_SetDeferredRefcount:
 2820|  10.0k|{
 2821|       |#ifdef Py_GIL_DISABLED
 2822|       |    assert(PyType_IS_GC(Py_TYPE(op)));
 2823|       |    assert(_Py_IsOwnedByCurrentThread(op));
 2824|       |    assert(op->ob_ref_shared == 0);
 2825|       |    _PyObject_SET_GC_BITS(op, _PyGC_BITS_DEFERRED);
 2826|       |    op->ob_ref_shared = _Py_REF_SHARED(_Py_REF_DEFERRED, 0);
 2827|       |#endif
 2828|  10.0k|}
PyUnstable_Object_EnableDeferredRefcount:
 2832|    902|{
 2833|       |#ifdef Py_GIL_DISABLED
 2834|       |    if (!PyType_IS_GC(Py_TYPE(op))) {
 2835|       |        // Deferred reference counting doesn't work
 2836|       |        // on untracked types.
 2837|       |        return 0;
 2838|       |    }
 2839|       |
 2840|       |    if (!PyObject_GC_IsTracked(op)) {
 2841|       |        // When deferred refcount is enabled, the object will only be
 2842|       |        // deallocated by the tracing garbage collector. So it must be tracked
 2843|       |        // by the garbage collector.
 2844|       |        return 0;
 2845|       |    }
 2846|       |
 2847|       |    uint8_t bits = _Py_atomic_load_uint8(&op->ob_gc_bits);
 2848|       |    if ((bits & _PyGC_BITS_DEFERRED) != 0)
 2849|       |    {
 2850|       |        // Nothing to do.
 2851|       |        return 0;
 2852|       |    }
 2853|       |
 2854|       |    if (_Py_atomic_compare_exchange_uint8(&op->ob_gc_bits, &bits, bits | _PyGC_BITS_DEFERRED) == 0)
 2855|       |    {
 2856|       |        // Someone beat us to it!
 2857|       |        return 0;
 2858|       |    }
 2859|       |    _Py_atomic_add_ssize(&op->ob_ref_shared, _Py_REF_SHARED(_Py_REF_DEFERRED, 0));
 2860|       |    return 1;
 2861|       |#else
 2862|    902|    return 0;
 2863|    902|#endif
 2864|    902|}
_Py_Dealloc:
 3311|  89.7M|{
 3312|  89.7M|    PyTypeObject *type = Py_TYPE(op);
  ------------------
  |  |  213|  89.7M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  89.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  89.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3313|  89.7M|    unsigned long gc_flag = type->tp_flags & Py_TPFLAGS_HAVE_GC;
  ------------------
  |  |  524|  89.7M|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
 3314|  89.7M|    destructor dealloc = type->tp_dealloc;
 3315|  89.7M|    PyThreadState *tstate = NULL;
 3316|  89.7M|    intptr_t margin = 0;
 3317|  89.7M|    if (gc_flag) {
  ------------------
  |  Branch (3317:9): [True: 60.3M, False: 29.3M]
  ------------------
 3318|  60.3M|        tstate = _PyThreadState_GET();
 3319|  60.3M|        margin = _Py_RecursionLimit_GetMargin(tstate);
 3320|  60.3M|        if (margin < 2) {
  ------------------
  |  Branch (3320:13): [True: 0, False: 60.3M]
  ------------------
 3321|      0|            _PyTrash_thread_deposit_object(tstate, (PyObject *)op);
 3322|      0|            return;
 3323|      0|        }
 3324|  60.3M|    }
 3325|       |#ifdef Py_DEBUG
 3326|       |    if (tstate == NULL) {
 3327|       |        tstate = _PyThreadState_GET();
 3328|       |    }
 3329|       |#if !defined(Py_GIL_DISABLED) && !defined(Py_STACKREF_DEBUG)
 3330|       |    /* This assertion doesn't hold for the free-threading build, as
 3331|       |     * PyStackRef_CLOSE_SPECIALIZED is not implemented */
 3332|       |    assert(tstate->current_frame == NULL || tstate->current_frame->stackpointer != NULL);
 3333|       |#endif
 3334|       |    PyObject *old_exc = tstate != NULL ? tstate->current_exception : NULL;
 3335|       |    // Keep the old exception type alive to prevent undefined behavior
 3336|       |    // on (tstate->curexc_type != old_exc_type) below
 3337|       |    Py_XINCREF(old_exc);
 3338|       |    // Make sure that type->tp_name remains valid
 3339|       |    Py_INCREF(type);
 3340|       |#endif
 3341|       |
 3342|       |#ifdef Py_TRACE_REFS
 3343|       |    _Py_ForgetReference(op);
 3344|       |#endif
 3345|  89.7M|    _PyReftracerTrack(op, PyRefTracer_DESTROY);
  ------------------
  |  |  112|  89.7M|    do { \
  |  |  113|  89.7M|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|  89.7M|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 89.7M]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|  89.7M|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 89.7M]
  |  |  ------------------
  ------------------
 3346|  89.7M|    (*dealloc)(op);
 3347|       |
 3348|       |#ifdef Py_DEBUG
 3349|       |    // gh-89373: The tp_dealloc function must leave the current exception
 3350|       |    // unchanged.
 3351|       |    if (tstate != NULL && tstate->current_exception != old_exc) {
 3352|       |        const char *err;
 3353|       |        if (old_exc == NULL) {
 3354|       |            err = "Deallocator of type '%s' raised an exception";
 3355|       |        }
 3356|       |        else if (tstate->current_exception == NULL) {
 3357|       |            err = "Deallocator of type '%s' cleared the current exception";
 3358|       |        }
 3359|       |        else {
 3360|       |            // It can happen if dealloc() normalized the current exception.
 3361|       |            // A deallocator function must not change the current exception,
 3362|       |            // not even normalize it.
 3363|       |            err = "Deallocator of type '%s' overrode the current exception";
 3364|       |        }
 3365|       |        _Py_FatalErrorFormat(__func__, err, type->tp_name);
 3366|       |    }
 3367|       |    Py_XDECREF(old_exc);
 3368|       |    Py_DECREF(type);
 3369|       |#endif
 3370|  89.7M|    if (gc_flag && tstate->delete_later && margin >= 4) {
  ------------------
  |  Branch (3370:9): [True: 60.3M, False: 29.3M]
  |  Branch (3370:20): [True: 0, False: 60.3M]
  |  Branch (3370:44): [True: 0, False: 0]
  ------------------
 3371|      0|        _PyTrash_thread_destroy_chain(tstate);
 3372|      0|    }
 3373|  89.7M|}
_Py_GetConstant_Init:
 3476|      2|{
 3477|      2|    constants[Py_CONSTANT_ZERO] = _PyLong_GetZero();
  ------------------
  |  |  595|      2|#define Py_CONSTANT_ZERO 5
  ------------------
 3478|      2|    constants[Py_CONSTANT_ONE] = _PyLong_GetOne();
  ------------------
  |  |  596|      2|#define Py_CONSTANT_ONE 6
  ------------------
 3479|      2|    constants[Py_CONSTANT_EMPTY_STR] = PyUnicode_New(0, 0);
  ------------------
  |  |  597|      2|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
 3480|      2|    constants[Py_CONSTANT_EMPTY_BYTES] = PyBytes_FromStringAndSize("", 0);
  ------------------
  |  |  598|      2|#define Py_CONSTANT_EMPTY_BYTES 8
  ------------------
 3481|      2|    constants[Py_CONSTANT_EMPTY_TUPLE] = PyTuple_New(0);
  ------------------
  |  |  599|      2|#define Py_CONSTANT_EMPTY_TUPLE 9
  ------------------
 3482|      2|#ifndef NDEBUG
 3483|     22|    for (size_t i=0; i < Py_ARRAY_LENGTH(constants); i++) {
  ------------------
  |  |  221|     22|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (3483:22): [True: 20, False: 2]
  ------------------
 3484|     20|        assert(constants[i] != NULL);
  ------------------
  |  Branch (3484:9): [True: 20, False: 0]
  ------------------
 3485|     20|        assert(_Py_IsImmortal(constants[i]));
  ------------------
  |  Branch (3485:9): [True: 20, False: 0]
  ------------------
 3486|     20|    }
 3487|      2|#endif
 3488|      2|}
Py_GetConstant:
 3492|   541k|{
 3493|   541k|    if (constant_id < Py_ARRAY_LENGTH(constants)) {
  ------------------
  |  |  221|   541k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (3493:9): [True: 541k, False: 0]
  ------------------
 3494|   541k|        return constants[constant_id];
 3495|   541k|    }
 3496|      0|    else {
 3497|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3498|       |        return NULL;
 3499|      0|    }
 3500|   541k|}
Py_GetConstantBorrowed:
 3505|   239k|{
 3506|       |    // All constants are immortal
 3507|   239k|    return Py_GetConstant(constant_id);
 3508|   239k|}
PyUnstable_IsImmortal:
 3512|     31|{
 3513|       |    /* Checking a reference count requires a thread state */
 3514|     31|    _Py_AssertHoldsTstate();
  ------------------
  |  |  324|     31|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
 3515|     31|    assert(op != NULL);
  ------------------
  |  Branch (3515:5): [True: 31, False: 0]
  ------------------
 3516|     31|    return _Py_IsImmortal(op);
  ------------------
  |  |  137|     31|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     31|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     31|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3517|     31|}
PyUnstable_Object_IsUniquelyReferenced:
 3521|   178k|{
 3522|   178k|    _Py_AssertHoldsTstate();
  ------------------
  |  |  324|   178k|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
 3523|   178k|    assert(op != NULL);
  ------------------
  |  Branch (3523:5): [True: 178k, False: 0]
  ------------------
 3524|   178k|    return _PyObject_IsUniquelyReferenced(op);
 3525|   178k|}
_PyObject_VisitType:
 3529|    110|{
 3530|    110|    assert(op != NULL);
  ------------------
  |  Branch (3530:5): [True: 110, False: 0]
  ------------------
 3531|    110|    PyTypeObject *tp = Py_TYPE(op);
  ------------------
  |  |  213|    110|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    110|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    110|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3532|    110|    _PyObject_ASSERT((PyObject *)tp, PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE));
  ------------------
  |  |  425|    110|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|    110|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|    110|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 110, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|    110|      ? (void)(0) \
  |  |  |  |  |  |  418|    110|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3533|    110|    Py_VISIT(tp);
  ------------------
  |  |  194|    110|    do {                                                                \
  |  |  195|    110|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 110, False: 0]
  |  |  ------------------
  |  |  196|    110|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    110|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    110|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    110|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 110]
  |  |  ------------------
  |  |  198|    110|                return vret;                                            \
  |  |  199|    110|        }                                                               \
  |  |  200|    110|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 110]
  |  |  ------------------
  ------------------
 3534|    110|    return 0;
 3535|    110|}
object.c:clear_freelist:
  905|    280|{
  906|    280|    void *ptr;
  907|  12.5k|    while ((ptr = _PyFreeList_PopNoStats(freelist)) != NULL) {
  ------------------
  |  Branch (907:12): [True: 12.2k, False: 280]
  ------------------
  908|  12.2k|        dofree(ptr);
  909|  12.2k|    }
  910|    280|    assert(freelist->size == 0 || freelist->size == -1);
  ------------------
  |  Branch (910:5): [True: 280, False: 0]
  |  Branch (910:5): [True: 0, False: 0]
  ------------------
  911|    280|    assert(freelist->freelist == NULL);
  ------------------
  |  Branch (911:5): [True: 280, False: 0]
  ------------------
  912|    280|    if (is_finalization) {
  ------------------
  |  Branch (912:9): [True: 0, False: 280]
  ------------------
  913|      0|        freelist->size = -1;
  914|      0|    }
  915|    280|}
object.c:free_object:
  919|  11.7k|{
  920|  11.7k|    PyObject *op = (PyObject *)obj;
  921|  11.7k|    PyTypeObject *tp = Py_TYPE(op);
  ------------------
  |  |  213|  11.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  11.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  922|  11.7k|    tp->tp_free(op);
  923|  11.7k|    Py_DECREF(tp);
  ------------------
  |  |  430|  11.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  924|  11.7k|}
object.c:do_richcompare:
 1050|  19.7M|{
 1051|  19.7M|    richcmpfunc f;
 1052|  19.7M|    PyObject *res;
 1053|  19.7M|    int checked_reverse_op = 0;
 1054|       |
 1055|  19.7M|    if (!Py_IS_TYPE(v, Py_TYPE(w)) &&
  ------------------
  |  |  215|  39.4M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  19.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1055:9): [True: 7.32k, False: 19.6M]
  ------------------
 1056|  7.32k|        PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v)) &&
  ------------------
  |  |  213|  7.32k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  7.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v)) &&
  ------------------
  |  |  213|  7.32k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  7.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1056:9): [True: 21, False: 7.30k]
  ------------------
 1057|     21|        (f = Py_TYPE(w)->tp_richcompare) != NULL) {
  ------------------
  |  |  213|     21|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1057:9): [True: 21, False: 0]
  ------------------
 1058|     21|        checked_reverse_op = 1;
 1059|     21|        res = (*f)(w, v, _Py_SwappedOp[op]);
 1060|     21|        if (res != Py_NotImplemented)
  ------------------
  |  |  640|     21|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1060:13): [True: 18, False: 3]
  ------------------
 1061|     18|            return res;
 1062|      3|        Py_DECREF(res);
  ------------------
  |  |  430|      3|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1063|      3|    }
 1064|  19.7M|    if ((f = Py_TYPE(v)->tp_richcompare) != NULL) {
  ------------------
  |  |  213|  19.7M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  19.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1064:9): [True: 19.7M, False: 0]
  ------------------
 1065|  19.7M|        res = (*f)(v, w, op);
 1066|  19.7M|        if (res != Py_NotImplemented)
  ------------------
  |  |  640|  19.7M|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1066:13): [True: 19.6M, False: 6.62k]
  ------------------
 1067|  19.6M|            return res;
 1068|  6.62k|        Py_DECREF(res);
  ------------------
  |  |  430|  6.62k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1069|  6.62k|    }
 1070|  6.62k|    if (!checked_reverse_op && (f = Py_TYPE(w)->tp_richcompare) != NULL) {
  ------------------
  |  |  213|  6.62k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1070:9): [True: 6.62k, False: 3]
  |  Branch (1070:32): [True: 6.62k, False: 0]
  ------------------
 1071|  6.62k|        res = (*f)(w, v, _Py_SwappedOp[op]);
 1072|  6.62k|        if (res != Py_NotImplemented)
  ------------------
  |  |  640|  6.62k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (1072:13): [True: 346, False: 6.27k]
  ------------------
 1073|    346|            return res;
 1074|  6.27k|        Py_DECREF(res);
  ------------------
  |  |  430|  6.27k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.27k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|  6.27k|    }
 1076|       |    /* If neither object implements it, provide a sensible default
 1077|       |       for == and !=, but raise an exception for ordering. */
 1078|  6.27k|    switch (op) {
 1079|  6.27k|    case Py_EQ:
  ------------------
  |  |  654|  6.27k|#define Py_EQ 2
  ------------------
  |  Branch (1079:5): [True: 6.27k, False: 0]
  ------------------
 1080|  6.27k|        res = (v == w) ? Py_True : Py_False;
  ------------------
  |  |   26|  6.27k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      res = (v == w) ? Py_True : Py_False;
  ------------------
  |  |   25|  6.27k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  6.27k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1080:15): [True: 0, False: 6.27k]
  ------------------
 1081|  6.27k|        break;
 1082|      0|    case Py_NE:
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (1082:5): [True: 0, False: 6.27k]
  ------------------
 1083|      0|        res = (v != w) ? Py_True : Py_False;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      res = (v != w) ? Py_True : Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1083:15): [True: 0, False: 0]
  ------------------
 1084|      0|        break;
 1085|      0|    default:
  ------------------
  |  Branch (1085:5): [True: 0, False: 6.27k]
  ------------------
 1086|      0|        _PyErr_Format(tstate, PyExc_TypeError,
 1087|      0|                      "'%s' not supported between instances of '%.100s' and '%.100s'",
 1088|      0|                      opstrings[op],
 1089|      0|                      Py_TYPE(v)->tp_name,
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|      0|                      Py_TYPE(w)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1091|      0|        return NULL;
 1092|  6.27k|    }
 1093|  6.27k|    return Py_NewRef(res);
  ------------------
  |  |  550|  6.27k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  6.27k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1094|  6.27k|}
object.c:_dir_object:
 2249|      2|{
 2250|      2|    PyObject *result, *sorted;
 2251|      2|    PyObject *dirfunc = _PyObject_LookupSpecial(obj, &_Py_ID(__dir__));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|       |
 2253|      2|    assert(obj != NULL);
  ------------------
  |  Branch (2253:5): [True: 2, False: 0]
  ------------------
 2254|      2|    if (dirfunc == NULL) {
  ------------------
  |  Branch (2254:9): [True: 0, False: 2]
  ------------------
 2255|      0|        if (!PyErr_Occurred())
  ------------------
  |  Branch (2255:13): [True: 0, False: 0]
  ------------------
 2256|      0|            PyErr_SetString(PyExc_TypeError, "object does not provide __dir__");
 2257|      0|        return NULL;
 2258|      0|    }
 2259|       |    /* use __dir__ */
 2260|      2|    result = _PyObject_CallNoArgs(dirfunc);
 2261|      2|    Py_DECREF(dirfunc);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2262|      2|    if (result == NULL)
  ------------------
  |  Branch (2262:9): [True: 0, False: 2]
  ------------------
 2263|      0|        return NULL;
 2264|       |    /* return sorted(result) */
 2265|      2|    sorted = PySequence_List(result);
 2266|      2|    Py_DECREF(result);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2267|      2|    if (sorted == NULL)
  ------------------
  |  Branch (2267:9): [True: 0, False: 2]
  ------------------
 2268|      0|        return NULL;
 2269|      2|    if (PyList_Sort(sorted)) {
  ------------------
  |  Branch (2269:9): [True: 0, False: 2]
  ------------------
 2270|      0|        Py_DECREF(sorted);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2271|      0|        return NULL;
 2272|      0|    }
 2273|      2|    return sorted;
 2274|      2|}
object.c:none_repr:
 2295|    157|{
 2296|    157|    return PyUnicode_FromString("None");
 2297|    157|}
object.c:none_hash:
 2326|   262k|{
 2327|   262k|    return 0xFCA86420;
 2328|   262k|}
object.c:new_reference:
 2743|   100M|{
 2744|       |    // Skip the immortal object check in Py_SET_REFCNT; always set refcnt to 1
 2745|   100M|#if !defined(Py_GIL_DISABLED)
 2746|   100M|#if SIZEOF_VOID_P > 4
 2747|   100M|    op->ob_refcnt_full = 1;
 2748|   100M|    assert(op->ob_refcnt == 1);
  ------------------
  |  Branch (2748:5): [True: 100M, False: 0]
  ------------------
 2749|   100M|    assert(op->ob_flags == 0);
  ------------------
  |  Branch (2749:5): [True: 100M, False: 0]
  ------------------
 2750|       |#else
 2751|       |    op->ob_refcnt = 1;
 2752|       |#endif
 2753|       |#else
 2754|       |    op->ob_flags = 0;
 2755|       |    op->ob_mutex = (PyMutex){ 0 };
 2756|       |#ifdef _Py_THREAD_SANITIZER
 2757|       |    _Py_atomic_store_uintptr_relaxed(&op->ob_tid, _Py_ThreadId());
 2758|       |    _Py_atomic_store_uint8_relaxed(&op->ob_gc_bits, 0);
 2759|       |    _Py_atomic_store_uint32_relaxed(&op->ob_ref_local, 1);
 2760|       |    _Py_atomic_store_ssize_relaxed(&op->ob_ref_shared, 0);
 2761|       |#else
 2762|       |    op->ob_tid = _Py_ThreadId();
 2763|       |    op->ob_gc_bits = 0;
 2764|       |    op->ob_ref_local = 1;
 2765|       |    op->ob_ref_shared = 0;
 2766|       |#endif
 2767|       |#endif
 2768|       |#ifdef Py_TRACE_REFS
 2769|       |    _Py_AddToAllObjects(op);
 2770|       |#endif
 2771|   100M|    _PyReftracerTrack(op, PyRefTracer_CREATE);
  ------------------
  |  |  112|   100M|    do { \
  |  |  113|   100M|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|   100M|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 100M]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|   100M|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 100M]
  |  |  ------------------
  ------------------
 2772|   100M|}

_PyMem_RawMalloc:
   59|   540k|{
   60|       |    /* PyMem_RawMalloc(0) means malloc(1). Some systems would return NULL
   61|       |       for malloc(0), which would be treated as an error. Some platforms would
   62|       |       return a pointer with no memory behind it, which would break pymalloc.
   63|       |       To solve these problems, allocate an extra byte. */
   64|   540k|    if (size == 0)
  ------------------
  |  Branch (64:9): [True: 70.3k, False: 470k]
  ------------------
   65|  70.3k|        size = 1;
   66|   540k|    return malloc(size);
   67|   540k|}
_PyMem_RawCalloc:
   71|   751k|{
   72|       |    /* PyMem_RawCalloc(0, 0) means calloc(1, 1). Some systems would return NULL
   73|       |       for calloc(0, 0), which would be treated as an error. Some platforms
   74|       |       would return a pointer with no memory behind it, which would break
   75|       |       pymalloc.  To solve these problems, allocate an extra byte. */
   76|   751k|    if (nelem == 0 || elsize == 0) {
  ------------------
  |  Branch (76:9): [True: 0, False: 751k]
  |  Branch (76:23): [True: 0, False: 751k]
  ------------------
   77|      0|        nelem = 1;
   78|      0|        elsize = 1;
   79|      0|    }
   80|   751k|    return calloc(nelem, elsize);
   81|   751k|}
_PyMem_RawRealloc:
   85|   224k|{
   86|   224k|    if (size == 0)
  ------------------
  |  Branch (86:9): [True: 0, False: 224k]
  ------------------
   87|      0|        size = 1;
   88|   224k|    return realloc(ptr, size);
   89|   224k|}
_PyMem_RawFree:
   93|  1.28M|{
   94|  1.28M|    free(ptr);
   95|  1.28M|}
_PyMem_DefaultRawMalloc:
  472|     14|{
  473|       |#ifdef Py_DEBUG
  474|       |    return _PyMem_DebugRawMalloc(&_PyRuntime.allocators.debug.raw, size);
  475|       |#else
  476|       |    return _PyMem_RawMalloc(NULL, size);
  477|     14|#endif
  478|     14|}
_PyMem_DefaultRawFree:
  502|     16|{
  503|       |#ifdef Py_DEBUG
  504|       |    _PyMem_DebugRawFree(&_PyRuntime.allocators.debug.raw, ptr);
  505|       |#else
  506|       |    _PyMem_RawFree(NULL, ptr);
  507|     16|#endif
  508|     16|}
_PyMem_DefaultRawWcsdup:
  512|     10|{
  513|     10|    assert(str != NULL);
  ------------------
  |  Branch (513:5): [True: 10, False: 0]
  ------------------
  514|       |
  515|     10|    size_t len = wcslen(str);
  516|     10|    if (len > (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t) - 1) {
  ------------------
  |  |  137|     10|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (516:9): [True: 0, False: 10]
  ------------------
  517|      0|        return NULL;
  518|      0|    }
  519|       |
  520|     10|    size_t size = (len + 1) * sizeof(wchar_t);
  521|     10|    wchar_t *str2 = _PyMem_DefaultRawMalloc(size);
  522|     10|    if (str2 == NULL) {
  ------------------
  |  Branch (522:9): [True: 0, False: 10]
  ------------------
  523|      0|        return NULL;
  524|      0|    }
  525|       |
  526|     10|    memcpy(str2, str, size);
  527|     10|    return str2;
  528|     10|}
_PyMem_ArenaAlloc:
  624|  1.73k|{
  625|       |#ifdef MS_WINDOWS
  626|       |#  ifdef PYMALLOC_USE_HUGEPAGES
  627|       |    if (_PyRuntime.allocators.use_hugepages) {
  628|       |        SIZE_T lp_size = GetLargePageMinimum();
  629|       |        if (lp_size > 0 && size % lp_size == 0) {
  630|       |            void *ptr = VirtualAlloc(NULL, size,
  631|       |                            MEM_COMMIT | MEM_RESERVE | MEM_LARGE_PAGES,
  632|       |                            PAGE_READWRITE);
  633|       |            if (ptr != NULL)
  634|       |                return ptr;
  635|       |        }
  636|       |    }
  637|       |    /* Fall back to regular pages */
  638|       |#  endif
  639|       |    return VirtualAlloc(NULL, size,
  640|       |                        MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  641|       |#elif defined(ARENAS_USE_MMAP)
  642|       |    void *ptr;
  643|       |#  ifdef PYMALLOC_USE_HUGEPAGES
  644|       |#    ifdef MAP_HUGETLB
  645|       |    if (_PyRuntime.allocators.use_hugepages) {
  646|       |        size_t hp_size = _pymalloc_system_hugepage_size();
  647|       |        /* Only use huge pages if the arena size is a multiple of the
  648|       |         * system's default huge page size.  When the arena is smaller
  649|       |         * than the huge page, mmap still succeeds but silently
  650|       |         * allocates an entire huge page; the subsequent munmap with
  651|       |         * the smaller arena size then fails with EINVAL, leaking
  652|       |         * all of that memory. */
  653|       |        if (hp_size > 0 && size % hp_size == 0) {
  654|       |            ptr = mmap(NULL, size, PROT_READ|PROT_WRITE,
  655|       |                       MAP_PRIVATE|MAP_ANONYMOUS|MAP_HUGETLB, -1, 0);
  656|       |            if (ptr != MAP_FAILED) {
  657|       |                assert(ptr != NULL);
  658|       |                (void)_PyAnnotateMemoryMap(ptr, size, "cpython:pymalloc:hugepage");
  659|       |                return ptr;
  660|       |            }
  661|       |        }
  662|       |    }
  663|       |    /* Fall back to regular pages */
  664|       |#    endif
  665|       |#  endif
  666|  1.73k|    ptr = mmap(NULL, size, PROT_READ|PROT_WRITE,
  667|  1.73k|               MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
  668|  1.73k|    if (ptr == MAP_FAILED)
  ------------------
  |  Branch (668:9): [True: 0, False: 1.73k]
  ------------------
  669|      0|        return NULL;
  670|  1.73k|    assert(ptr != NULL);
  ------------------
  |  Branch (670:5): [True: 1.73k, False: 0]
  ------------------
  671|  1.73k|#ifdef MADV_HUGEPAGE
  672|  1.73k|    (void)madvise(ptr, size, MADV_HUGEPAGE);
  673|  1.73k|#endif
  674|  1.73k|    (void)_PyAnnotateMemoryMap(ptr, size, "cpython:pymalloc");
  675|  1.73k|    return ptr;
  676|       |#else
  677|       |    return malloc(size);
  678|       |#endif
  679|  1.73k|}
_PyMem_ArenaFree:
  689|  1.69k|{
  690|       |#ifdef MS_WINDOWS
  691|       |    /* Unlike free(), VirtualFree() does not special-case NULL to noop. */
  692|       |    if (ptr == NULL) {
  693|       |        return;
  694|       |    }
  695|       |    VirtualFree(ptr, 0, MEM_RELEASE);
  696|       |#elif defined(ARENAS_USE_MMAP)
  697|       |    /* Unlike free(), munmap() does not special-case NULL to noop. */
  698|  1.69k|    if (ptr == NULL) {
  ------------------
  |  Branch (698:9): [True: 0, False: 1.69k]
  ------------------
  699|      0|        return;
  700|      0|    }
  701|  1.69k|    if (munmap(ptr, size) < 0) {
  ------------------
  |  Branch (701:9): [True: 0, False: 1.69k]
  ------------------
  702|      0|        _Py_FatalErrorFormat(__func__,
  703|      0|                             "munmap(%p, %zu) failed with errno %d",
  704|      0|                             ptr, size, errno);
  705|      0|    }
  706|       |#else
  707|       |    free(ptr);
  708|       |#endif
  709|  1.69k|}
PyMem_GetAllocator:
 1133|      2|{
 1134|      2|    PyMutex_Lock(&ALLOCATORS_MUTEX);
  ------------------
  |  |   59|      2|#define PyMutex_Lock _PyMutex_Lock
  ------------------
                  PyMutex_Lock(&ALLOCATORS_MUTEX);
  ------------------
  |  |  716|      2|#define ALLOCATORS_MUTEX (_PyRuntime.allocators.mutex)
  ------------------
 1135|      2|    get_allocator_unlocked(domain, allocator);
 1136|      2|    PyMutex_Unlock(&ALLOCATORS_MUTEX);
  ------------------
  |  |   70|      2|#define PyMutex_Unlock _PyMutex_Unlock
  ------------------
                  PyMutex_Unlock(&ALLOCATORS_MUTEX);
  ------------------
  |  |  716|      2|#define ALLOCATORS_MUTEX (_PyRuntime.allocators.mutex)
  ------------------
 1137|      2|}
_PyObject_VirtualAlloc:
 1184|      2|{
 1185|      2|    size_t alloc_size = _pymalloc_virtual_alloc_size(size);
 1186|      2|    if (alloc_size == 0 && size != 0) {
  ------------------
  |  Branch (1186:9): [True: 0, False: 2]
  |  Branch (1186:28): [True: 0, False: 0]
  ------------------
 1187|      0|        return NULL;
 1188|      0|    }
 1189|      2|    return _PyObject_Arena.alloc(_PyObject_Arena.ctx, alloc_size);
  ------------------
  |  |  721|      2|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
                  return _PyObject_Arena.alloc(_PyObject_Arena.ctx, alloc_size);
  ------------------
  |  |  721|      2|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
 1190|      2|}
PyMem_RawMalloc:
 1207|   540k|{
 1208|       |    /*
 1209|       |     * Limit ourselves to PY_SSIZE_T_MAX bytes to prevent security holes.
 1210|       |     * Most python internals blindly use a signed Py_ssize_t to track
 1211|       |     * things without checking for overflows or negatives.
 1212|       |     * As size_t is unsigned, checking for size < 0 is not required.
 1213|       |     */
 1214|   540k|    if (size > (size_t)PY_SSIZE_T_MAX)
  ------------------
  |  |  137|   540k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1214:9): [True: 0, False: 540k]
  ------------------
 1215|      0|        return NULL;
 1216|   540k|    return _PyMem_Raw.malloc(_PyMem_Raw.ctx, size);
  ------------------
  |  |  717|   540k|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
                  return _PyMem_Raw.malloc(_PyMem_Raw.ctx, size);
  ------------------
  |  |  717|   540k|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
 1217|   540k|}
PyMem_RawCalloc:
 1221|   751k|{
 1222|       |    /* see PyMem_RawMalloc() */
 1223|   751k|    if (elsize != 0 && nelem > (size_t)PY_SSIZE_T_MAX / elsize)
  ------------------
  |  |  137|   751k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1223:9): [True: 751k, False: 0]
  |  Branch (1223:24): [True: 0, False: 751k]
  ------------------
 1224|      0|        return NULL;
 1225|   751k|    return _PyMem_Raw.calloc(_PyMem_Raw.ctx, nelem, elsize);
  ------------------
  |  |  717|   751k|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
                  return _PyMem_Raw.calloc(_PyMem_Raw.ctx, nelem, elsize);
  ------------------
  |  |  717|   751k|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
 1226|   751k|}
PyMem_RawRealloc:
 1230|   224k|{
 1231|       |    /* see PyMem_RawMalloc() */
 1232|   224k|    if (new_size > (size_t)PY_SSIZE_T_MAX)
  ------------------
  |  |  137|   224k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1232:9): [True: 0, False: 224k]
  ------------------
 1233|      0|        return NULL;
 1234|   224k|    return _PyMem_Raw.realloc(_PyMem_Raw.ctx, ptr, new_size);
  ------------------
  |  |  717|   224k|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
                  return _PyMem_Raw.realloc(_PyMem_Raw.ctx, ptr, new_size);
  ------------------
  |  |  717|   224k|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
 1235|   224k|}
PyMem_RawFree:
 1238|  1.28M|{
 1239|  1.28M|    _PyMem_Raw.free(_PyMem_Raw.ctx, ptr);
  ------------------
  |  |  717|  1.28M|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
                  _PyMem_Raw.free(_PyMem_Raw.ctx, ptr);
  ------------------
  |  |  717|  1.28M|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
 1240|  1.28M|}
PyMem_Malloc:
 1249|  8.99M|{
 1250|       |    /* see PyMem_RawMalloc() */
 1251|  8.99M|    if (size > (size_t)PY_SSIZE_T_MAX)
  ------------------
  |  |  137|  8.99M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1251:9): [True: 0, False: 8.99M]
  ------------------
 1252|      0|        return NULL;
 1253|  8.99M|    OBJECT_STAT_INC_COND(allocations512, size < 512);
  ------------------
  |  |   78|  8.99M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1254|  8.99M|    OBJECT_STAT_INC_COND(allocations4k, size >= 512 && size < 4094);
  ------------------
  |  |   78|  8.99M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1255|  8.99M|    OBJECT_STAT_INC_COND(allocations_big, size >= 4094);
  ------------------
  |  |   78|  8.99M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1256|  8.99M|    OBJECT_STAT_INC(allocations);
  ------------------
  |  |   77|  8.99M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
 1257|  8.99M|    return _PyMem.malloc(_PyMem.ctx, size);
  ------------------
  |  |  718|  8.99M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
                  return _PyMem.malloc(_PyMem.ctx, size);
  ------------------
  |  |  718|  8.99M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
 1258|  8.99M|}
PyMem_Calloc:
 1262|  1.58M|{
 1263|       |    /* see PyMem_RawMalloc() */
 1264|  1.58M|    if (elsize != 0 && nelem > (size_t)PY_SSIZE_T_MAX / elsize)
  ------------------
  |  |  137|  1.58M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1264:9): [True: 1.58M, False: 0]
  |  Branch (1264:24): [True: 0, False: 1.58M]
  ------------------
 1265|      0|        return NULL;
 1266|  1.58M|    OBJECT_STAT_INC_COND(allocations512, elsize < 512);
  ------------------
  |  |   78|  1.58M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1267|  1.58M|    OBJECT_STAT_INC_COND(allocations4k, elsize >= 512 && elsize < 4094);
  ------------------
  |  |   78|  1.58M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1268|  1.58M|    OBJECT_STAT_INC_COND(allocations_big, elsize >= 4094);
  ------------------
  |  |   78|  1.58M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1269|  1.58M|    OBJECT_STAT_INC(allocations);
  ------------------
  |  |   77|  1.58M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
 1270|  1.58M|    return _PyMem.calloc(_PyMem.ctx, nelem, elsize);
  ------------------
  |  |  718|  1.58M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
                  return _PyMem.calloc(_PyMem.ctx, nelem, elsize);
  ------------------
  |  |  718|  1.58M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
 1271|  1.58M|}
PyMem_Realloc:
 1275|  1.85M|{
 1276|       |    /* see PyMem_RawMalloc() */
 1277|  1.85M|    if (new_size > (size_t)PY_SSIZE_T_MAX)
  ------------------
  |  |  137|  1.85M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1277:9): [True: 0, False: 1.85M]
  ------------------
 1278|      0|        return NULL;
 1279|  1.85M|    return _PyMem.realloc(_PyMem.ctx, ptr, new_size);
  ------------------
  |  |  718|  1.85M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
                  return _PyMem.realloc(_PyMem.ctx, ptr, new_size);
  ------------------
  |  |  718|  1.85M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
 1280|  1.85M|}
PyMem_Free:
 1284|  11.8M|{
 1285|  11.8M|    OBJECT_STAT_INC(frees);
  ------------------
  |  |   77|  11.8M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
 1286|  11.8M|    _PyMem.free(_PyMem.ctx, ptr);
  ------------------
  |  |  718|  11.8M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
                  _PyMem.free(_PyMem.ctx, ptr);
  ------------------
  |  |  718|  11.8M|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
 1287|  11.8M|}
_PyMem_RawWcsdup:
 1296|     82|{
 1297|     82|    assert(str != NULL);
  ------------------
  |  Branch (1297:5): [True: 82, False: 0]
  ------------------
 1298|       |
 1299|     82|    size_t len = wcslen(str);
 1300|     82|    if (len > (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t) - 1) {
  ------------------
  |  |  137|     82|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1300:9): [True: 0, False: 82]
  ------------------
 1301|      0|        return NULL;
 1302|      0|    }
 1303|       |
 1304|     82|    size_t size = (len + 1) * sizeof(wchar_t);
 1305|     82|    wchar_t *str2 = PyMem_RawMalloc(size);
 1306|     82|    if (str2 == NULL) {
  ------------------
  |  Branch (1306:9): [True: 0, False: 82]
  ------------------
 1307|      0|        return NULL;
 1308|      0|    }
 1309|       |
 1310|     82|    memcpy(str2, str, size);
 1311|     82|    return str2;
 1312|     82|}
_PyMem_RawStrdup:
 1316|      8|{
 1317|      8|    assert(str != NULL);
  ------------------
  |  Branch (1317:5): [True: 8, False: 0]
  ------------------
 1318|      8|    size_t size = strlen(str) + 1;
 1319|      8|    char *copy = PyMem_RawMalloc(size);
 1320|      8|    if (copy == NULL) {
  ------------------
  |  Branch (1320:9): [True: 0, False: 8]
  ------------------
 1321|      0|        return NULL;
 1322|      0|    }
 1323|      8|    memcpy(copy, str, size);
 1324|      8|    return copy;
 1325|      8|}
_PyMem_Strdup:
 1329|      1|{
 1330|      1|    assert(str != NULL);
  ------------------
  |  Branch (1330:5): [True: 1, False: 0]
  ------------------
 1331|      1|    size_t size = strlen(str) + 1;
 1332|      1|    char *copy = PyMem_Malloc(size);
 1333|      1|    if (copy == NULL) {
  ------------------
  |  Branch (1333:9): [True: 0, False: 1]
  ------------------
 1334|      0|        return NULL;
 1335|      0|    }
 1336|      1|    memcpy(copy, str, size);
 1337|      1|    return copy;
 1338|      1|}
_PyMem_FreeDelayed:
 1511|    324|{
 1512|    324|    assert(!((uintptr_t)ptr & 0x01));
  ------------------
  |  Branch (1512:5): [True: 324, False: 0]
  ------------------
 1513|    324|    if (ptr != NULL) {
  ------------------
  |  Branch (1513:9): [True: 324, False: 0]
  ------------------
 1514|    324|        free_delayed((uintptr_t)ptr, size);
 1515|    324|    }
 1516|    324|}
PyObject_Malloc:
 1701|  78.0M|{
 1702|       |    /* see PyMem_RawMalloc() */
 1703|  78.0M|    if (size > (size_t)PY_SSIZE_T_MAX)
  ------------------
  |  |  137|  78.0M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1703:9): [True: 0, False: 78.0M]
  ------------------
 1704|      0|        return NULL;
 1705|  78.0M|    OBJECT_STAT_INC_COND(allocations512, size < 512);
  ------------------
  |  |   78|  78.0M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1706|  78.0M|    OBJECT_STAT_INC_COND(allocations4k, size >= 512 && size < 4094);
  ------------------
  |  |   78|  78.0M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1707|  78.0M|    OBJECT_STAT_INC_COND(allocations_big, size >= 4094);
  ------------------
  |  |   78|  78.0M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 1708|  78.0M|    OBJECT_STAT_INC(allocations);
  ------------------
  |  |   77|  78.0M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
 1709|  78.0M|    return _PyObject.malloc(_PyObject.ctx, size);
  ------------------
  |  |  719|  78.0M|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
                  return _PyObject.malloc(_PyObject.ctx, size);
  ------------------
  |  |  719|  78.0M|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
 1710|  78.0M|}
PyObject_Realloc:
 1727|   428k|{
 1728|       |    /* see PyMem_RawMalloc() */
 1729|   428k|    if (new_size > (size_t)PY_SSIZE_T_MAX)
  ------------------
  |  |  137|   428k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1729:9): [True: 0, False: 428k]
  ------------------
 1730|      0|        return NULL;
 1731|   428k|    return _PyObject.realloc(_PyObject.ctx, ptr, new_size);
  ------------------
  |  |  719|   428k|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
                  return _PyObject.realloc(_PyObject.ctx, ptr, new_size);
  ------------------
  |  |  719|   428k|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
 1732|   428k|}
PyObject_Free:
 1736|  77.9M|{
 1737|  77.9M|    OBJECT_STAT_INC(frees);
  ------------------
  |  |   77|  77.9M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
 1738|  77.9M|    _PyObject.free(_PyObject.ctx, ptr);
  ------------------
  |  |  719|  77.9M|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
                  _PyObject.free(_PyObject.ctx, ptr);
  ------------------
  |  |  719|  77.9M|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
 1739|  77.9M|}
_PyObject_Malloc:
 2542|  88.7M|{
 2543|  88.7M|    OMState *state = get_state();
 2544|  88.7M|    void* ptr = pymalloc_alloc(state, ctx, nbytes);
 2545|  88.7M|    if (LIKELY(ptr != NULL)) {
  ------------------
  |  | 1746|  88.7M|#  define LIKELY(value) __builtin_expect((value), 1)
  |  |  ------------------
  |  |  |  Branch (1746:25): [True: 88.2M, False: 530k]
  |  |  ------------------
  ------------------
 2546|  88.2M|        return ptr;
 2547|  88.2M|    }
 2548|       |
 2549|   530k|    ptr = PyMem_RawMalloc(nbytes);
 2550|   530k|    if (ptr != NULL) {
  ------------------
  |  Branch (2550:9): [True: 530k, False: 0]
  ------------------
 2551|   530k|        raw_allocated_blocks++;
  ------------------
  |  | 1796|   530k|#define raw_allocated_blocks (state->mgmt.raw_allocated_blocks)
  ------------------
 2552|   530k|    }
 2553|   530k|    return ptr;
 2554|  88.7M|}
_PyObject_Calloc:
 2559|  1.58M|{
 2560|  1.58M|    assert(elsize == 0 || nelem <= (size_t)PY_SSIZE_T_MAX / elsize);
  ------------------
  |  Branch (2560:5): [True: 0, False: 1.58M]
  |  Branch (2560:5): [True: 1.58M, False: 0]
  ------------------
 2561|  1.58M|    size_t nbytes = nelem * elsize;
 2562|       |
 2563|  1.58M|    OMState *state = get_state();
 2564|  1.58M|    void* ptr = pymalloc_alloc(state, ctx, nbytes);
 2565|  1.58M|    if (LIKELY(ptr != NULL)) {
  ------------------
  |  | 1746|  1.58M|#  define LIKELY(value) __builtin_expect((value), 1)
  |  |  ------------------
  |  |  |  Branch (1746:25): [True: 843k, False: 740k]
  |  |  ------------------
  ------------------
 2566|   843k|        memset(ptr, 0, nbytes);
 2567|   843k|        return ptr;
 2568|   843k|    }
 2569|       |
 2570|   740k|    ptr = PyMem_RawCalloc(nelem, elsize);
 2571|   740k|    if (ptr != NULL) {
  ------------------
  |  Branch (2571:9): [True: 740k, False: 0]
  ------------------
 2572|   740k|        raw_allocated_blocks++;
  ------------------
  |  | 1796|   740k|#define raw_allocated_blocks (state->mgmt.raw_allocated_blocks)
  ------------------
 2573|   740k|    }
 2574|   740k|    return ptr;
 2575|  1.58M|}
_PyObject_Free:
 2824|  91.0M|{
 2825|       |    /* PyObject_Free(NULL) has no effect */
 2826|  91.0M|    if (p == NULL) {
  ------------------
  |  Branch (2826:9): [True: 785k, False: 90.2M]
  ------------------
 2827|   785k|        return;
 2828|   785k|    }
 2829|       |
 2830|  90.2M|    OMState *state = get_state();
 2831|  90.2M|    if (UNLIKELY(!pymalloc_free(state, ctx, p))) {
  ------------------
  |  | 1745|  90.2M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 1.26M, False: 88.9M]
  |  |  ------------------
  ------------------
 2832|       |        /* pymalloc didn't allocate this address */
 2833|  1.26M|        PyMem_RawFree(p);
 2834|  1.26M|        raw_allocated_blocks--;
  ------------------
  |  | 1796|  1.26M|#define raw_allocated_blocks (state->mgmt.raw_allocated_blocks)
  ------------------
 2835|  1.26M|    }
 2836|  90.2M|}
_PyObject_Realloc:
 2912|  2.28M|{
 2913|  2.28M|    void *ptr2;
 2914|       |
 2915|  2.28M|    if (ptr == NULL) {
  ------------------
  |  Branch (2915:9): [True: 539k, False: 1.74M]
  ------------------
 2916|   539k|        return _PyObject_Malloc(ctx, nbytes);
 2917|   539k|    }
 2918|       |
 2919|  1.74M|    OMState *state = get_state();
 2920|  1.74M|    if (pymalloc_realloc(state, ctx, &ptr2, ptr, nbytes)) {
  ------------------
  |  Branch (2920:9): [True: 1.51M, False: 224k]
  ------------------
 2921|  1.51M|        return ptr2;
 2922|  1.51M|    }
 2923|       |
 2924|   224k|    return PyMem_RawRealloc(ptr, nbytes);
 2925|  1.74M|}
_PyMem_init_obmalloc:
 3564|      2|{
 3565|      2|#ifdef WITH_PYMALLOC
 3566|       |    /* Initialize obmalloc, but only for subinterpreters,
 3567|       |       since the main interpreter is initialized statically. */
 3568|      2|    if (_Py_IsMainInterpreter(interp)
  ------------------
  |  Branch (3568:9): [True: 2, False: 0]
  ------------------
 3569|      0|            || _PyInterpreterState_HasFeature(interp,
  ------------------
  |  Branch (3569:16): [True: 0, False: 0]
  ------------------
 3570|      2|                                              Py_RTFLAGS_USE_MAIN_OBMALLOC)) {
  ------------------
  |  |   79|      0|#define Py_RTFLAGS_USE_MAIN_OBMALLOC (1UL << 5)
  ------------------
 3571|      2|        interp->obmalloc = &obmalloc_state_main;
 3572|      2|        if (!obmalloc_state_initialized) {
  ------------------
  |  Branch (3572:13): [True: 2, False: 0]
  ------------------
 3573|      2|            init_obmalloc_pools(interp);
 3574|      2|            obmalloc_state_initialized = true;
 3575|      2|        }
 3576|      2|    } else {
 3577|      0|        interp->obmalloc = PyMem_RawCalloc(1, sizeof(struct _obmalloc_state));
 3578|      0|        if (interp->obmalloc == NULL) {
  ------------------
  |  Branch (3578:13): [True: 0, False: 0]
  ------------------
 3579|      0|            return -1;
 3580|      0|        }
 3581|      0|        init_obmalloc_pools(interp);
 3582|      0|    }
 3583|      2|#endif /* WITH_PYMALLOC */
 3584|      2|    return 0; // success
 3585|      2|}
obmalloc.c:get_allocator_unlocked:
 1103|      2|{
 1104|      2|    switch(domain)
 1105|      2|    {
 1106|      2|    case PYMEM_DOMAIN_RAW: *allocator = _PyMem_Raw; break;
  ------------------
  |  |  717|      2|#define _PyMem_Raw (_PyRuntime.allocators.standard.raw)
  ------------------
  |  Branch (1106:5): [True: 2, False: 0]
  ------------------
 1107|      0|    case PYMEM_DOMAIN_MEM: *allocator = _PyMem; break;
  ------------------
  |  |  718|      0|#define _PyMem (_PyRuntime.allocators.standard.mem)
  ------------------
  |  Branch (1107:5): [True: 0, False: 2]
  ------------------
 1108|      0|    case PYMEM_DOMAIN_OBJ: *allocator = _PyObject; break;
  ------------------
  |  |  719|      0|#define _PyObject (_PyRuntime.allocators.standard.obj)
  ------------------
  |  Branch (1108:5): [True: 0, False: 2]
  ------------------
 1109|      0|    default:
  ------------------
  |  Branch (1109:5): [True: 0, False: 2]
  ------------------
 1110|       |        /* unknown domain: set all attributes to NULL */
 1111|      0|        allocator->ctx = NULL;
 1112|      0|        allocator->malloc = NULL;
 1113|      0|        allocator->calloc = NULL;
 1114|      0|        allocator->realloc = NULL;
 1115|       |        allocator->free = NULL;
 1116|      2|    }
 1117|      2|}
obmalloc.c:_pymalloc_virtual_alloc_size:
  603|      2|{
  604|       |#if defined(MS_WINDOWS) && defined(PYMALLOC_USE_HUGEPAGES)
  605|       |    if (_PyRuntime.allocators.use_hugepages) {
  606|       |        SIZE_T large_page_size = GetLargePageMinimum();
  607|       |        if (large_page_size > 0) {
  608|       |            return _pymalloc_round_up_to_multiple(size, (size_t)large_page_size);
  609|       |        }
  610|       |    }
  611|       |#elif defined(PYMALLOC_USE_HUGEPAGES) && defined(ARENAS_USE_MMAP) && defined(MAP_HUGETLB)
  612|       |    if (_PyRuntime.allocators.use_hugepages) {
  613|       |        size_t hp_size = _pymalloc_system_hugepage_size();
  614|       |        if (hp_size > 0) {
  615|       |            return _pymalloc_round_up_to_multiple(size, hp_size);
  616|       |        }
  617|       |    }
  618|       |#endif
  619|      2|    return size;
  620|      2|}
obmalloc.c:free_delayed:
 1432|    324|{
 1433|    324|#ifndef Py_GIL_DISABLED
 1434|    324|    free_work_item(ptr, NULL, NULL);
 1435|       |#else
 1436|       |    PyInterpreterState *interp = _PyInterpreterState_GET();
 1437|       |    if (_PyInterpreterState_GetFinalizing(interp) != NULL ||
 1438|       |        interp->stoptheworld.world_stopped)
 1439|       |    {
 1440|       |        // Free immediately during interpreter shutdown or if the world is
 1441|       |        // stopped.
 1442|       |        assert(!interp->stoptheworld.world_stopped || !work_item_should_decref(ptr));
 1443|       |        free_work_item(ptr, NULL, NULL);
 1444|       |        return;
 1445|       |    }
 1446|       |
 1447|       |    _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
 1448|       |    struct llist_node *head = &tstate->mem_free_queue;
 1449|       |
 1450|       |    struct _mem_work_chunk *buf = NULL;
 1451|       |    if (!llist_empty(head)) {
 1452|       |        // Try to re-use the last buffer
 1453|       |        buf = llist_data(head->prev, struct _mem_work_chunk, node);
 1454|       |        if (buf->wr_idx == WORK_ITEMS_PER_CHUNK) {
 1455|       |            // already full
 1456|       |            buf = NULL;
 1457|       |        }
 1458|       |    }
 1459|       |
 1460|       |    if (buf == NULL) {
 1461|       |        buf = PyMem_Calloc(1, sizeof(*buf));
 1462|       |        if (buf != NULL) {
 1463|       |            llist_insert_tail(head, &buf->node);
 1464|       |        }
 1465|       |    }
 1466|       |
 1467|       |    if (buf == NULL) {
 1468|       |        // failed to allocate a buffer, free immediately
 1469|       |        PyObject *to_dealloc = NULL;
 1470|       |        _PyEval_StopTheWorld(tstate->base.interp);
 1471|       |        if (work_item_should_decref(ptr)) {
 1472|       |            PyObject *obj = (PyObject *)(ptr - 1);
 1473|       |            Py_ssize_t refcount = _Py_ExplicitMergeRefcount(obj, -1);
 1474|       |            if (refcount == 0) {
 1475|       |                to_dealloc = obj;
 1476|       |            }
 1477|       |        }
 1478|       |        else {
 1479|       |            PyMem_Free((void *)ptr);
 1480|       |        }
 1481|       |        _PyEval_StartTheWorld(tstate->base.interp);
 1482|       |        if (to_dealloc != NULL) {
 1483|       |            _Py_Dealloc(to_dealloc);
 1484|       |        }
 1485|       |        return;
 1486|       |    }
 1487|       |
 1488|       |    assert(buf != NULL && buf->wr_idx < WORK_ITEMS_PER_CHUNK);
 1489|       |    uint64_t seq;
 1490|       |    if (should_advance_qsbr_for_free(tstate->qsbr, size)) {
 1491|       |        seq = _Py_qsbr_advance(tstate->qsbr->shared);
 1492|       |    }
 1493|       |    else {
 1494|       |        seq = _Py_qsbr_shared_next(tstate->qsbr->shared);
 1495|       |    }
 1496|       |    buf->array[buf->wr_idx].ptr = ptr;
 1497|       |    buf->array[buf->wr_idx].qsbr_goal = seq;
 1498|       |    buf->wr_idx++;
 1499|       |
 1500|       |    if (buf->wr_idx == WORK_ITEMS_PER_CHUNK) {
 1501|       |        // Normally the processing of delayed items is done from the eval
 1502|       |        // breaker.  Processing here is a safety measure to ensure too much
 1503|       |        // work does not accumulate.
 1504|       |        _PyMem_ProcessDelayed((PyThreadState *)tstate);
 1505|       |    }
 1506|       |#endif
 1507|    324|}
obmalloc.c:free_work_item:
 1371|    324|{
 1372|    324|    if (work_item_should_decref(ptr)) {
  ------------------
  |  Branch (1372:9): [True: 0, False: 324]
  ------------------
 1373|      0|        PyObject *obj = (PyObject *)(ptr - 1);
 1374|       |#ifdef Py_GIL_DISABLED
 1375|       |        if (cb == NULL) {
 1376|       |            assert(!_PyInterpreterState_GET()->stoptheworld.world_stopped);
 1377|       |            Py_DECREF(obj);
 1378|       |            return;
 1379|       |        }
 1380|       |        assert(_PyInterpreterState_GET()->stoptheworld.world_stopped);
 1381|       |        Py_ssize_t refcount = _Py_ExplicitMergeRefcount(obj, -1);
 1382|       |        if (refcount == 0) {
 1383|       |            cb(obj, state);
 1384|       |        }
 1385|       |#else
 1386|      0|        Py_DECREF(obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1387|      0|#endif
 1388|      0|    }
 1389|    324|    else {
 1390|    324|        PyMem_Free((void *)ptr);
 1391|    324|    }
 1392|    324|}
obmalloc.c:work_item_should_decref:
 1365|    324|{
 1366|    324|    return ptr & 0x01;
 1367|    324|}
obmalloc.c:get_state:
 1780|   182M|{
 1781|   182M|    PyInterpreterState *interp = _PyInterpreterState_GET();
 1782|   182M|    assert(interp->obmalloc != NULL); // otherwise not initialized or freed
  ------------------
  |  Branch (1782:5): [True: 182M, False: 0]
  ------------------
 1783|   182M|    return interp->obmalloc;
 1784|   182M|}
obmalloc.c:pymalloc_alloc:
 2494|  90.3M|{
 2495|       |#ifdef WITH_VALGRIND
 2496|       |    if (UNLIKELY(running_on_valgrind == -1)) {
 2497|       |        running_on_valgrind = RUNNING_ON_VALGRIND;
 2498|       |    }
 2499|       |    if (UNLIKELY(running_on_valgrind)) {
 2500|       |        return NULL;
 2501|       |    }
 2502|       |#endif
 2503|       |
 2504|  90.3M|    if (UNLIKELY(nbytes == 0)) {
  ------------------
  |  | 1745|  90.3M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 70.3k, False: 90.2M]
  |  |  ------------------
  ------------------
 2505|  70.3k|        return NULL;
 2506|  70.3k|    }
 2507|  90.2M|    if (UNLIKELY(nbytes > SMALL_REQUEST_THRESHOLD)) {
  ------------------
  |  | 1745|  90.2M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 1.19M, False: 89.0M]
  |  |  ------------------
  ------------------
 2508|  1.19M|        return NULL;
 2509|  1.19M|    }
 2510|       |
 2511|  89.0M|    uint size = (uint)(nbytes - 1) >> ALIGNMENT_SHIFT;
  ------------------
  |  |   35|  89.0M|#define uint pymem_uint
  ------------------
                  uint size = (uint)(nbytes - 1) >> ALIGNMENT_SHIFT;
  ------------------
  |  |  139|  89.0M|#define ALIGNMENT_SHIFT         4
  ------------------
 2512|  89.0M|    poolp pool = usedpools[size + size];
  ------------------
  |  | 1787|  89.0M|#define usedpools (state->pools.used)
  ------------------
 2513|  89.0M|    pymem_block *bp;
 2514|       |
 2515|  89.0M|    if (LIKELY(pool != pool->nextpool)) {
  ------------------
  |  | 1746|  89.0M|#  define LIKELY(value) __builtin_expect((value), 1)
  |  |  ------------------
  |  |  |  Branch (1746:25): [True: 88.8M, False: 204k]
  |  |  ------------------
  ------------------
 2516|       |        /*
 2517|       |         * There is a used pool for this size class.
 2518|       |         * Pick up the head block of its free list.
 2519|       |         */
 2520|  88.8M|        ++pool->ref.count;
 2521|  88.8M|        bp = pool->freeblock;
 2522|  88.8M|        assert(bp != NULL);
  ------------------
  |  Branch (2522:9): [True: 88.8M, False: 0]
  ------------------
 2523|       |
 2524|  88.8M|        if (UNLIKELY((pool->freeblock = *(pymem_block **)bp) == NULL)) {
  ------------------
  |  | 1745|  88.8M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 37.6M, False: 51.2M]
  |  |  ------------------
  ------------------
 2525|       |            // Reached the end of the free list, try to extend it.
 2526|  37.6M|            pymalloc_pool_extend(pool, size);
 2527|  37.6M|        }
 2528|  88.8M|    }
 2529|   204k|    else {
 2530|       |        /* There isn't a pool of the right size class immediately
 2531|       |         * available:  use a free pool.
 2532|       |         */
 2533|   204k|        bp = allocate_from_new_pool(state, size);
 2534|   204k|    }
 2535|       |
 2536|  89.0M|    return (void *)bp;
 2537|  89.0M|}
obmalloc.c:pymalloc_pool_extend:
 2336|  37.6M|{
 2337|  37.6M|    if (UNLIKELY(pool->nextoffset <= pool->maxnextoffset)) {
  ------------------
  |  | 1745|  37.6M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 29.4M, False: 8.19M]
  |  |  ------------------
  ------------------
 2338|       |        /* There is room for another block. */
 2339|  29.4M|        pool->freeblock = (pymem_block*)pool + pool->nextoffset;
 2340|  29.4M|        pool->nextoffset += INDEX2SIZE(size);
  ------------------
  |  |  146|  29.4M|#define INDEX2SIZE(I) (((pymem_uint)(I) + 1) << ALIGNMENT_SHIFT)
  |  |  ------------------
  |  |  |  |  139|  29.4M|#define ALIGNMENT_SHIFT         4
  |  |  ------------------
  ------------------
 2341|  29.4M|        *(pymem_block **)(pool->freeblock) = NULL;
 2342|  29.4M|        return;
 2343|  29.4M|    }
 2344|       |
 2345|       |    /* Pool is full, unlink from used pools. */
 2346|  8.19M|    poolp next;
 2347|  8.19M|    next = pool->nextpool;
 2348|  8.19M|    pool = pool->prevpool;
 2349|  8.19M|    next->prevpool = pool;
 2350|  8.19M|    pool->nextpool = next;
 2351|  8.19M|}
obmalloc.c:allocate_from_new_pool:
 2358|   204k|{
 2359|       |    /* There isn't a pool of the right size class immediately
 2360|       |     * available:  use a free pool.
 2361|       |     */
 2362|   204k|    if (UNLIKELY(usable_arenas == NULL)) {
  ------------------
  |  | 1745|   204k|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 1.73k, False: 202k]
  |  |  ------------------
  ------------------
 2363|       |        /* No arena has a free pool:  allocate a new arena. */
 2364|       |#ifdef WITH_MEMORY_LIMITS
 2365|       |        if (narenas_currently_allocated >= MAX_ARENAS) {
 2366|       |            return NULL;
 2367|       |        }
 2368|       |#endif
 2369|  1.73k|        usable_arenas = new_arena(state);
  ------------------
  |  | 1791|  1.73k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2370|  1.73k|        if (usable_arenas == NULL) {
  ------------------
  |  | 1791|  1.73k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
  |  Branch (2370:13): [True: 0, False: 1.73k]
  ------------------
 2371|      0|            return NULL;
 2372|      0|        }
 2373|  1.73k|        usable_arenas->nextarena = usable_arenas->prevarena = NULL;
  ------------------
  |  | 1791|  1.73k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                      usable_arenas->nextarena = usable_arenas->prevarena = NULL;
  ------------------
  |  | 1791|  1.73k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2374|  1.73k|        assert(nfp2lasta[usable_arenas->nfreepools] == NULL);
  ------------------
  |  Branch (2374:9): [True: 1.73k, False: 0]
  ------------------
 2375|  1.73k|        nfp2lasta[usable_arenas->nfreepools] = usable_arenas;
  ------------------
  |  | 1792|  1.73k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
                      nfp2lasta[usable_arenas->nfreepools] = usable_arenas;
  ------------------
  |  | 1791|  1.73k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                      nfp2lasta[usable_arenas->nfreepools] = usable_arenas;
  ------------------
  |  | 1791|  1.73k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2376|  1.73k|    }
 2377|   204k|    assert(usable_arenas->address != 0);
  ------------------
  |  Branch (2377:5): [True: 204k, False: 0]
  ------------------
 2378|       |
 2379|       |    /* This arena already had the smallest nfreepools value, so decreasing
 2380|       |     * nfreepools doesn't change that, and we don't need to rearrange the
 2381|       |     * usable_arenas list.  However, if the arena becomes wholly allocated,
 2382|       |     * we need to remove its arena_object from usable_arenas.
 2383|       |     */
 2384|   204k|    assert(usable_arenas->nfreepools > 0);
  ------------------
  |  Branch (2384:5): [True: 204k, False: 0]
  ------------------
 2385|   204k|    if (nfp2lasta[usable_arenas->nfreepools] == usable_arenas) {
  ------------------
  |  | 1792|   204k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
                  if (nfp2lasta[usable_arenas->nfreepools] == usable_arenas) {
  ------------------
  |  | 1791|   204k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                  if (nfp2lasta[usable_arenas->nfreepools] == usable_arenas) {
  ------------------
  |  | 1791|   204k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
  |  Branch (2385:9): [True: 203k, False: 732]
  ------------------
 2386|       |        /* It's the last of this size, so there won't be any. */
 2387|   203k|        nfp2lasta[usable_arenas->nfreepools] = NULL;
  ------------------
  |  | 1792|   203k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
                      nfp2lasta[usable_arenas->nfreepools] = NULL;
  ------------------
  |  | 1791|   203k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2388|   203k|    }
 2389|       |    /* If any free pools will remain, it will be the new smallest. */
 2390|   204k|    if (usable_arenas->nfreepools > 1) {
  ------------------
  |  | 1791|   204k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
  |  Branch (2390:9): [True: 199k, False: 5.06k]
  ------------------
 2391|   199k|        assert(nfp2lasta[usable_arenas->nfreepools - 1] == NULL);
  ------------------
  |  Branch (2391:9): [True: 199k, False: 0]
  ------------------
 2392|   199k|        nfp2lasta[usable_arenas->nfreepools - 1] = usable_arenas;
  ------------------
  |  | 1792|   199k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
                      nfp2lasta[usable_arenas->nfreepools - 1] = usable_arenas;
  ------------------
  |  | 1791|   199k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                      nfp2lasta[usable_arenas->nfreepools - 1] = usable_arenas;
  ------------------
  |  | 1791|   199k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2393|   199k|    }
 2394|       |
 2395|       |    /* Try to get a cached free pool. */
 2396|   204k|    poolp pool = usable_arenas->freepools;
  ------------------
  |  | 1791|   204k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2397|   204k|    if (LIKELY(pool != NULL)) {
  ------------------
  |  | 1746|   204k|#  define LIKELY(value) __builtin_expect((value), 1)
  |  |  ------------------
  |  |  |  Branch (1746:25): [True: 94.5k, False: 110k]
  |  |  ------------------
  ------------------
 2398|       |        /* Unlink from cached pools. */
 2399|  94.5k|        usable_arenas->freepools = pool->nextpool;
  ------------------
  |  | 1791|  94.5k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2400|  94.5k|        usable_arenas->nfreepools--;
  ------------------
  |  | 1791|  94.5k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2401|  94.5k|        if (UNLIKELY(usable_arenas->nfreepools == 0)) {
  ------------------
  |  | 1745|  94.5k|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 3.34k, False: 91.2k]
  |  |  ------------------
  ------------------
 2402|       |            /* Wholly allocated:  remove. */
 2403|  3.34k|            assert(usable_arenas->freepools == NULL);
  ------------------
  |  Branch (2403:13): [True: 3.34k, False: 0]
  ------------------
 2404|  3.34k|            assert(usable_arenas->nextarena == NULL ||
  ------------------
  |  Branch (2404:13): [True: 78, False: 3.26k]
  |  Branch (2404:13): [True: 3.26k, False: 0]
  ------------------
 2405|  3.34k|                   usable_arenas->nextarena->prevarena ==
 2406|  3.34k|                   usable_arenas);
 2407|  3.34k|            usable_arenas = usable_arenas->nextarena;
  ------------------
  |  | 1791|  3.34k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                          usable_arenas = usable_arenas->nextarena;
  ------------------
  |  | 1791|  3.34k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2408|  3.34k|            if (usable_arenas != NULL) {
  ------------------
  |  | 1791|  3.34k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
  |  Branch (2408:17): [True: 3.26k, False: 78]
  ------------------
 2409|  3.26k|                usable_arenas->prevarena = NULL;
  ------------------
  |  | 1791|  3.26k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2410|  3.26k|                assert(usable_arenas->address != 0);
  ------------------
  |  Branch (2410:17): [True: 3.26k, False: 0]
  ------------------
 2411|  3.26k|            }
 2412|  3.34k|        }
 2413|  91.2k|        else {
 2414|       |            /* nfreepools > 0:  it must be that freepools
 2415|       |             * isn't NULL, or that we haven't yet carved
 2416|       |             * off all the arena's pools for the first
 2417|       |             * time.
 2418|       |             */
 2419|  91.2k|            assert(usable_arenas->freepools != NULL ||
  ------------------
  |  Branch (2419:13): [True: 89.5k, False: 1.69k]
  |  Branch (2419:13): [True: 1.69k, False: 0]
  ------------------
 2420|  91.2k|                   usable_arenas->pool_address <=
 2421|  91.2k|                   (pymem_block*)usable_arenas->address +
 2422|  91.2k|                       ARENA_SIZE - POOL_SIZE);
 2423|  91.2k|        }
 2424|  94.5k|    }
 2425|   110k|    else {
 2426|       |        /* Carve off a new pool. */
 2427|   110k|        assert(usable_arenas->nfreepools > 0);
  ------------------
  |  Branch (2427:9): [True: 110k, False: 0]
  ------------------
 2428|   110k|        assert(usable_arenas->freepools == NULL);
  ------------------
  |  Branch (2428:9): [True: 110k, False: 0]
  ------------------
 2429|   110k|        pool = (poolp)usable_arenas->pool_address;
  ------------------
  |  | 1791|   110k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2430|   110k|        assert((pymem_block*)pool <= (pymem_block*)usable_arenas->address +
  ------------------
  |  Branch (2430:9): [True: 110k, False: 0]
  ------------------
 2431|   110k|                                 ARENA_SIZE - POOL_SIZE);
 2432|   110k|        pool->arenaindex = (uint)(usable_arenas - allarenas);
  ------------------
  |  | 1791|   110k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                      pool->arenaindex = (uint)(usable_arenas - allarenas);
  ------------------
  |  | 1788|   110k|#define allarenas (state->mgmt.arenas)
  ------------------
 2433|   110k|        assert(&allarenas[pool->arenaindex] == usable_arenas);
  ------------------
  |  Branch (2433:9): [True: 110k, False: 0]
  ------------------
 2434|   110k|        pool->szidx = DUMMY_SIZE_IDX;
  ------------------
  |  |  321|   110k|#define DUMMY_SIZE_IDX          0xffff  /* size class of newly cached pools */
  ------------------
 2435|   110k|        usable_arenas->pool_address += POOL_SIZE;
  ------------------
  |  | 1791|   110k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                      usable_arenas->pool_address += POOL_SIZE;
  ------------------
  |  |  240|   110k|#define POOL_SIZE               (1 << POOL_BITS)
  |  |  ------------------
  |  |  |  |  236|   110k|#define POOL_BITS               14                  /* 16 KiB */
  |  |  ------------------
  ------------------
 2436|   110k|        --usable_arenas->nfreepools;
  ------------------
  |  | 1791|   110k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2437|       |
 2438|   110k|        if (usable_arenas->nfreepools == 0) {
  ------------------
  |  | 1791|   110k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
  |  Branch (2438:13): [True: 1.71k, False: 108k]
  ------------------
 2439|  1.71k|            assert(usable_arenas->nextarena == NULL ||
  ------------------
  |  Branch (2439:13): [True: 1.66k, False: 45]
  |  Branch (2439:13): [True: 45, False: 0]
  ------------------
 2440|  1.71k|                   usable_arenas->nextarena->prevarena ==
 2441|  1.71k|                   usable_arenas);
 2442|       |            /* Unlink the arena:  it is completely allocated. */
 2443|  1.71k|            usable_arenas = usable_arenas->nextarena;
  ------------------
  |  | 1791|  1.71k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
                          usable_arenas = usable_arenas->nextarena;
  ------------------
  |  | 1791|  1.71k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2444|  1.71k|            if (usable_arenas != NULL) {
  ------------------
  |  | 1791|  1.71k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
  |  Branch (2444:17): [True: 45, False: 1.66k]
  ------------------
 2445|     45|                usable_arenas->prevarena = NULL;
  ------------------
  |  | 1791|     45|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2446|     45|                assert(usable_arenas->address != 0);
  ------------------
  |  Branch (2446:17): [True: 45, False: 0]
  ------------------
 2447|     45|            }
 2448|  1.71k|        }
 2449|   110k|    }
 2450|       |
 2451|       |    /* Frontlink to used pools. */
 2452|   204k|    pymem_block *bp;
 2453|   204k|    poolp next = usedpools[size + size]; /* == prev */
  ------------------
  |  | 1787|   204k|#define usedpools (state->pools.used)
  ------------------
 2454|   204k|    pool->nextpool = next;
 2455|   204k|    pool->prevpool = next;
 2456|   204k|    next->nextpool = pool;
 2457|   204k|    next->prevpool = pool;
 2458|   204k|    pool->ref.count = 1;
 2459|   204k|    if (pool->szidx == size) {
  ------------------
  |  Branch (2459:9): [True: 82.8k, False: 121k]
  ------------------
 2460|       |        /* Luckily, this pool last contained blocks
 2461|       |         * of the same size class, so its header
 2462|       |         * and free list are already initialized.
 2463|       |         */
 2464|  82.8k|        bp = pool->freeblock;
 2465|  82.8k|        assert(bp != NULL);
  ------------------
  |  Branch (2465:9): [True: 82.8k, False: 0]
  ------------------
 2466|  82.8k|        pool->freeblock = *(pymem_block **)bp;
 2467|  82.8k|        return bp;
 2468|  82.8k|    }
 2469|       |    /*
 2470|       |     * Initialize the pool header, set up the free list to
 2471|       |     * contain just the second block, and return the first
 2472|       |     * block.
 2473|       |     */
 2474|   121k|    pool->szidx = size;
 2475|   121k|    size = INDEX2SIZE(size);
  ------------------
  |  |  146|   121k|#define INDEX2SIZE(I) (((pymem_uint)(I) + 1) << ALIGNMENT_SHIFT)
  |  |  ------------------
  |  |  |  |  139|   121k|#define ALIGNMENT_SHIFT         4
  |  |  ------------------
  ------------------
 2476|   121k|    bp = (pymem_block *)pool + POOL_OVERHEAD;
  ------------------
  |  |  319|   121k|#define POOL_OVERHEAD   _Py_SIZE_ROUND_UP(sizeof(struct pool_header), ALIGNMENT)
  |  |  ------------------
  |  |  |  |  238|   121k|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  |  |  239|   121k|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  |  |  ------------------
  ------------------
 2477|   121k|    pool->nextoffset = POOL_OVERHEAD + (size << 1);
  ------------------
  |  |  319|   121k|#define POOL_OVERHEAD   _Py_SIZE_ROUND_UP(sizeof(struct pool_header), ALIGNMENT)
  |  |  ------------------
  |  |  |  |  238|   121k|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  |  |  239|   121k|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  |  |  ------------------
  ------------------
 2478|   121k|    pool->maxnextoffset = POOL_SIZE - size;
  ------------------
  |  |  240|   121k|#define POOL_SIZE               (1 << POOL_BITS)
  |  |  ------------------
  |  |  |  |  236|   121k|#define POOL_BITS               14                  /* 16 KiB */
  |  |  ------------------
  ------------------
 2479|   121k|    pool->freeblock = bp + size;
 2480|       |    *(pymem_block **)(pool->freeblock) = NULL;
 2481|   121k|    return bp;
 2482|   204k|}
obmalloc.c:new_arena:
 2124|  1.73k|{
 2125|  1.73k|    struct arena_object* arenaobj;
 2126|  1.73k|    uint excess;        /* number of bytes above pool alignment */
  ------------------
  |  |   35|  1.73k|#define uint pymem_uint
  ------------------
 2127|  1.73k|    void *address;
 2128|       |
 2129|  1.73k|    int debug_stats = _PyRuntime.obmalloc.dump_debug_stats;
 2130|  1.73k|    if (debug_stats == -1) {
  ------------------
  |  Branch (2130:9): [True: 2, False: 1.72k]
  ------------------
 2131|      2|        const char *opt = Py_GETENV("PYTHONMALLOCSTATS");
 2132|      2|        debug_stats = (opt != NULL && *opt != '\0');
  ------------------
  |  Branch (2132:24): [True: 0, False: 2]
  |  Branch (2132:39): [True: 0, False: 0]
  ------------------
 2133|      2|        _PyRuntime.obmalloc.dump_debug_stats = debug_stats;
 2134|      2|    }
 2135|  1.73k|    if (debug_stats) {
  ------------------
  |  Branch (2135:9): [True: 0, False: 1.73k]
  ------------------
 2136|      0|        _PyObject_DebugMallocStats(stderr);
 2137|      0|    }
 2138|       |
 2139|  1.73k|    if (unused_arena_objects == NULL) {
  ------------------
  |  | 1790|  1.73k|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
  |  Branch (2139:9): [True: 6, False: 1.72k]
  ------------------
 2140|      6|        uint i;
  ------------------
  |  |   35|      6|#define uint pymem_uint
  ------------------
 2141|      6|        uint numarenas;
  ------------------
  |  |   35|      6|#define uint pymem_uint
  ------------------
 2142|      6|        size_t nbytes;
 2143|       |
 2144|       |        /* Double the number of arena objects on each allocation.
 2145|       |         * Note that it's possible for `numarenas` to overflow.
 2146|       |         */
 2147|      6|        numarenas = maxarenas ? maxarenas << 1 : INITIAL_ARENA_OBJECTS;
  ------------------
  |  | 1789|      6|#define maxarenas (state->mgmt.maxarenas)
  |  |  ------------------
  |  |  |  Branch (1789:19): [True: 4, False: 2]
  |  |  ------------------
  ------------------
                      numarenas = maxarenas ? maxarenas << 1 : INITIAL_ARENA_OBJECTS;
  ------------------
  |  | 1789|      4|#define maxarenas (state->mgmt.maxarenas)
  ------------------
                      numarenas = maxarenas ? maxarenas << 1 : INITIAL_ARENA_OBJECTS;
  ------------------
  |  |  485|      8|#define INITIAL_ARENA_OBJECTS 16
  ------------------
 2148|      6|        if (numarenas <= maxarenas)
  ------------------
  |  | 1789|      6|#define maxarenas (state->mgmt.maxarenas)
  ------------------
  |  Branch (2148:13): [True: 0, False: 6]
  ------------------
 2149|      0|            return NULL;                /* overflow */
 2150|       |#if SIZEOF_SIZE_T <= SIZEOF_INT
 2151|       |        if (numarenas > SIZE_MAX / sizeof(*allarenas))
 2152|       |            return NULL;                /* overflow */
 2153|       |#endif
 2154|      6|        nbytes = numarenas * sizeof(*allarenas);
  ------------------
  |  | 1788|      6|#define allarenas (state->mgmt.arenas)
  ------------------
 2155|      6|        arenaobj = (struct arena_object *)PyMem_RawRealloc(allarenas, nbytes);
  ------------------
  |  | 1788|      6|#define allarenas (state->mgmt.arenas)
  ------------------
 2156|      6|        if (arenaobj == NULL)
  ------------------
  |  Branch (2156:13): [True: 0, False: 6]
  ------------------
 2157|      0|            return NULL;
 2158|      6|        allarenas = arenaobj;
  ------------------
  |  | 1788|      6|#define allarenas (state->mgmt.arenas)
  ------------------
 2159|       |
 2160|       |        /* We might need to fix pointers that were copied.  However,
 2161|       |         * new_arena only gets called when all the pages in the
 2162|       |         * previous arenas are full.  Thus, there are *no* pointers
 2163|       |         * into the old array. Thus, we don't have to worry about
 2164|       |         * invalid pointers.  Just to be sure, some asserts:
 2165|       |         */
 2166|      6|        assert(usable_arenas == NULL);
  ------------------
  |  Branch (2166:9): [True: 6, False: 0]
  ------------------
 2167|      6|        assert(unused_arena_objects == NULL);
  ------------------
  |  Branch (2167:9): [True: 6, False: 0]
  ------------------
 2168|       |
 2169|       |        /* Put the new arenas on the unused_arena_objects list. */
 2170|    278|        for (i = maxarenas; i < numarenas; ++i) {
  ------------------
  |  | 1789|      6|#define maxarenas (state->mgmt.maxarenas)
  ------------------
  |  Branch (2170:29): [True: 272, False: 6]
  ------------------
 2171|    272|            allarenas[i].address = 0;              /* mark as unassociated */
  ------------------
  |  | 1788|    272|#define allarenas (state->mgmt.arenas)
  ------------------
 2172|    272|            allarenas[i].nextarena = i < numarenas - 1 ?
  ------------------
  |  | 1788|    272|#define allarenas (state->mgmt.arenas)
  ------------------
  |  Branch (2172:38): [True: 266, False: 6]
  ------------------
 2173|    272|                                        &allarenas[i+1] : NULL;
  ------------------
  |  | 1788|    266|#define allarenas (state->mgmt.arenas)
  ------------------
 2174|    272|        }
 2175|       |
 2176|       |        /* Update globals. */
 2177|      6|        unused_arena_objects = &allarenas[maxarenas];
  ------------------
  |  | 1790|      6|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
                      unused_arena_objects = &allarenas[maxarenas];
  ------------------
  |  | 1788|      6|#define allarenas (state->mgmt.arenas)
  ------------------
                      unused_arena_objects = &allarenas[maxarenas];
  ------------------
  |  | 1789|      6|#define maxarenas (state->mgmt.maxarenas)
  ------------------
 2178|      6|        maxarenas = numarenas;
  ------------------
  |  | 1789|      6|#define maxarenas (state->mgmt.maxarenas)
  ------------------
 2179|      6|    }
 2180|       |
 2181|       |    /* Take the next available arena object off the head of the list. */
 2182|  1.73k|    assert(unused_arena_objects != NULL);
  ------------------
  |  Branch (2182:5): [True: 1.73k, False: 0]
  ------------------
 2183|  1.73k|    arenaobj = unused_arena_objects;
  ------------------
  |  | 1790|  1.73k|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
 2184|  1.73k|    unused_arena_objects = arenaobj->nextarena;
  ------------------
  |  | 1790|  1.73k|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
 2185|  1.73k|    assert(arenaobj->address == 0);
  ------------------
  |  Branch (2185:5): [True: 1.73k, False: 0]
  ------------------
 2186|  1.73k|    address = _PyObject_Arena.alloc(_PyObject_Arena.ctx, ARENA_SIZE);
  ------------------
  |  |  721|  1.73k|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
                  address = _PyObject_Arena.alloc(_PyObject_Arena.ctx, ARENA_SIZE);
  ------------------
  |  |  721|  1.73k|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
                  address = _PyObject_Arena.alloc(_PyObject_Arena.ctx, ARENA_SIZE);
  ------------------
  |  |  225|  1.73k|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  ------------------
  |  |  |  |  220|  1.73k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  ------------------
  ------------------
 2187|  1.73k|#if WITH_PYMALLOC_RADIX_TREE
 2188|  1.73k|    if (address != NULL) {
  ------------------
  |  Branch (2188:9): [True: 1.73k, False: 0]
  ------------------
 2189|  1.73k|        if (!arena_map_mark_used(state, (uintptr_t)address, 1)) {
  ------------------
  |  Branch (2189:13): [True: 0, False: 1.73k]
  ------------------
 2190|       |            /* marking arena in radix tree failed, abort */
 2191|      0|            _PyObject_Arena.free(_PyObject_Arena.ctx, address, ARENA_SIZE);
  ------------------
  |  |  721|      0|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
                          _PyObject_Arena.free(_PyObject_Arena.ctx, address, ARENA_SIZE);
  ------------------
  |  |  721|      0|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
                          _PyObject_Arena.free(_PyObject_Arena.ctx, address, ARENA_SIZE);
  ------------------
  |  |  225|      0|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  ------------------
  |  |  |  |  220|      0|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  ------------------
  ------------------
 2192|      0|            address = NULL;
 2193|      0|        }
 2194|  1.73k|    }
 2195|  1.73k|#endif
 2196|  1.73k|    if (address == NULL) {
  ------------------
  |  Branch (2196:9): [True: 0, False: 1.73k]
  ------------------
 2197|       |        /* The allocation failed: return NULL after putting the
 2198|       |         * arenaobj back.
 2199|       |         */
 2200|      0|        arenaobj->nextarena = unused_arena_objects;
  ------------------
  |  | 1790|      0|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
 2201|      0|        unused_arena_objects = arenaobj;
  ------------------
  |  | 1790|      0|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
 2202|      0|        return NULL;
 2203|      0|    }
 2204|  1.73k|    arenaobj->address = (uintptr_t)address;
 2205|       |
 2206|  1.73k|    ++narenas_currently_allocated;
  ------------------
  |  | 1793|  1.73k|#define narenas_currently_allocated (state->mgmt.narenas_currently_allocated)
  ------------------
 2207|  1.73k|    ++ntimes_arena_allocated;
  ------------------
  |  | 1794|  1.73k|#define ntimes_arena_allocated (state->mgmt.ntimes_arena_allocated)
  ------------------
 2208|  1.73k|    if (narenas_currently_allocated > narenas_highwater)
  ------------------
  |  | 1793|  1.73k|#define narenas_currently_allocated (state->mgmt.narenas_currently_allocated)
  ------------------
                  if (narenas_currently_allocated > narenas_highwater)
  ------------------
  |  | 1795|  1.73k|#define narenas_highwater (state->mgmt.narenas_highwater)
  ------------------
  |  Branch (2208:9): [True: 145, False: 1.58k]
  ------------------
 2209|    145|        narenas_highwater = narenas_currently_allocated;
  ------------------
  |  | 1795|    145|#define narenas_highwater (state->mgmt.narenas_highwater)
  ------------------
                      narenas_highwater = narenas_currently_allocated;
  ------------------
  |  | 1793|    145|#define narenas_currently_allocated (state->mgmt.narenas_currently_allocated)
  ------------------
 2210|  1.73k|    arenaobj->freepools = NULL;
 2211|       |    /* pool_address <- first pool-aligned address in the arena
 2212|       |       nfreepools <- number of whole pools that fit after alignment */
 2213|  1.73k|    arenaobj->pool_address = (pymem_block*)arenaobj->address;
 2214|  1.73k|    arenaobj->nfreepools = MAX_POOLS_IN_ARENA;
  ------------------
  |  |  249|  1.73k|#define MAX_POOLS_IN_ARENA  (ARENA_SIZE / POOL_SIZE)
  |  |  ------------------
  |  |  |  |  225|  1.73k|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|  1.73k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MAX_POOLS_IN_ARENA  (ARENA_SIZE / POOL_SIZE)
  |  |  ------------------
  |  |  |  |  240|  1.73k|#define POOL_SIZE               (1 << POOL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  236|  1.73k|#define POOL_BITS               14                  /* 16 KiB */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2215|  1.73k|    excess = (uint)(arenaobj->address & POOL_SIZE_MASK);
  ------------------
  |  |  241|  1.73k|#define POOL_SIZE_MASK          (POOL_SIZE - 1)
  |  |  ------------------
  |  |  |  |  240|  1.73k|#define POOL_SIZE               (1 << POOL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  236|  1.73k|#define POOL_BITS               14                  /* 16 KiB */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2216|  1.73k|    if (excess != 0) {
  ------------------
  |  Branch (2216:9): [True: 3, False: 1.72k]
  ------------------
 2217|      3|        --arenaobj->nfreepools;
 2218|      3|        arenaobj->pool_address += POOL_SIZE - excess;
  ------------------
  |  |  240|      3|#define POOL_SIZE               (1 << POOL_BITS)
  |  |  ------------------
  |  |  |  |  236|      3|#define POOL_BITS               14                  /* 16 KiB */
  |  |  ------------------
  ------------------
 2219|      3|    }
 2220|  1.73k|    arenaobj->ntotalpools = arenaobj->nfreepools;
 2221|       |
 2222|  1.73k|    return arenaobj;
 2223|  1.73k|}
obmalloc.c:arena_map_mark_used:
 2053|  3.42k|{
 2054|       |    /* sanity check that IGNORE_BITS is correct */
 2055|  3.42k|    assert(HIGH_BITS(arena_base) == HIGH_BITS(&arena_map_root));
  ------------------
  |  Branch (2055:5): [True: 3.42k, Folded]
  ------------------
 2056|  3.42k|    arena_map_bot_t *n_hi = arena_map_get(
 2057|  3.42k|            state, (pymem_block *)arena_base, is_used);
 2058|  3.42k|    if (n_hi == NULL) {
  ------------------
  |  Branch (2058:9): [True: 0, False: 3.42k]
  ------------------
 2059|      0|        assert(is_used); /* otherwise node should already exist */
  ------------------
  |  Branch (2059:9): [True: 0, False: 0]
  ------------------
 2060|      0|        return 0; /* failed to allocate space for node */
 2061|      0|    }
 2062|  3.42k|    int i3 = MAP_BOT_INDEX((pymem_block *)arena_base);
  ------------------
  |  |  625|  3.42k|#define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  624|  3.42k|#define AS_UINT(p) ((uintptr_t)(p))
  |  |  ------------------
  |  |               #define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  620|  3.42k|#define MAP_BOT_SHIFT ARENA_BITS
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  618|  3.42k|#define MAP_BOT_MASK (MAP_BOT_LENGTH - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  617|  3.42k|#define MAP_BOT_LENGTH (1 << MAP_BOT_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  616|  3.42k|#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  599|  3.42k|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  565|  3.42k|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  576|  3.42k|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  603|  3.42k|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  599|  3.42k|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  565|  3.42k|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  576|  3.42k|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2063|  3.42k|    int32_t tail = (int32_t)(arena_base & ARENA_SIZE_MASK);
  ------------------
  |  |  226|  3.42k|#define ARENA_SIZE_MASK         (ARENA_SIZE - 1)
  |  |  ------------------
  |  |  |  |  225|  3.42k|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2064|  3.42k|    if (tail == 0) {
  ------------------
  |  Branch (2064:9): [True: 3, False: 3.42k]
  ------------------
 2065|       |        /* is ideal arena address */
 2066|      3|        n_hi->arenas[i3].tail_hi = is_used ? -1 : 0;
  ------------------
  |  Branch (2066:36): [True: 3, False: 0]
  ------------------
 2067|      3|    }
 2068|  3.42k|    else {
 2069|       |        /* arena_base address is not ideal (aligned to arena size) and
 2070|       |         * so it potentially covers two MAP_BOT nodes.  Get the MAP_BOT node
 2071|       |         * for the next arena.  Note that it might be in different MAP_TOP
 2072|       |         * and MAP_MID nodes as well so we need to call arena_map_get()
 2073|       |         * again (do the full tree traversal).
 2074|       |         */
 2075|  3.42k|        n_hi->arenas[i3].tail_hi = is_used ? tail : 0;
  ------------------
  |  Branch (2075:36): [True: 1.72k, False: 1.69k]
  ------------------
 2076|  3.42k|        uintptr_t arena_base_next = arena_base + ARENA_SIZE;
  ------------------
  |  |  225|  3.42k|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  ------------------
  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  ------------------
  ------------------
 2077|       |        /* If arena_base is a legit arena address, so is arena_base_next - 1
 2078|       |         * (last address in arena).  If arena_base_next overflows then it
 2079|       |         * must overflow to 0.  However, that would mean arena_base was
 2080|       |         * "ideal" and we should not be in this case. */
 2081|  3.42k|        assert(arena_base < arena_base_next);
  ------------------
  |  Branch (2081:9): [True: 3.42k, False: 0]
  ------------------
 2082|  3.42k|        arena_map_bot_t *n_lo = arena_map_get(
 2083|  3.42k|                state, (pymem_block *)arena_base_next, is_used);
 2084|  3.42k|        if (n_lo == NULL) {
  ------------------
  |  Branch (2084:13): [True: 0, False: 3.42k]
  ------------------
 2085|      0|            assert(is_used); /* otherwise should already exist */
  ------------------
  |  Branch (2085:13): [True: 0, False: 0]
  ------------------
 2086|      0|            n_hi->arenas[i3].tail_hi = 0;
 2087|      0|            return 0; /* failed to allocate space for node */
 2088|      0|        }
 2089|  3.42k|        int i3_next = MAP_BOT_INDEX(arena_base_next);
  ------------------
  |  |  625|  3.42k|#define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  624|  3.42k|#define AS_UINT(p) ((uintptr_t)(p))
  |  |  ------------------
  |  |               #define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  620|  3.42k|#define MAP_BOT_SHIFT ARENA_BITS
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  618|  3.42k|#define MAP_BOT_MASK (MAP_BOT_LENGTH - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  617|  3.42k|#define MAP_BOT_LENGTH (1 << MAP_BOT_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  616|  3.42k|#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  599|  3.42k|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  565|  3.42k|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  576|  3.42k|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  603|  3.42k|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  599|  3.42k|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  565|  3.42k|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  576|  3.42k|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  220|  3.42k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2090|  3.42k|        n_lo->arenas[i3_next].tail_lo = is_used ? tail : 0;
  ------------------
  |  Branch (2090:41): [True: 1.72k, False: 1.69k]
  ------------------
 2091|  3.42k|    }
 2092|  3.42k|    return 1;
 2093|  3.42k|}
obmalloc.c:arena_map_get:
 1992|  92.0M|{
 1993|  92.0M|#ifdef USE_INTERIOR_NODES
 1994|       |    /* sanity check that IGNORE_BITS is correct */
 1995|  92.0M|    assert(HIGH_BITS(p) == HIGH_BITS(&arena_map_root));
  ------------------
  |  Branch (1995:5): [True: 92.0M, Folded]
  ------------------
 1996|  92.0M|    int i1 = MAP_TOP_INDEX(p);
  ------------------
  |  |  627|  92.0M|#define MAP_TOP_INDEX(p) ((AS_UINT(p) >> MAP_TOP_SHIFT) & MAP_TOP_MASK)
  |  |  ------------------
  |  |  |  |  624|  92.0M|#define AS_UINT(p) ((uintptr_t)(p))
  |  |  ------------------
  |  |               #define MAP_TOP_INDEX(p) ((AS_UINT(p) >> MAP_TOP_SHIFT) & MAP_TOP_MASK)
  |  |  ------------------
  |  |  |  |  622|  92.0M|#define MAP_TOP_SHIFT (MAP_MID_BITS + MAP_MID_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  612|  92.0M|#define MAP_MID_BITS INTERIOR_BITS
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  603|  92.0M|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define MAP_TOP_SHIFT (MAP_MID_BITS + MAP_MID_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  621|  92.0M|#define MAP_MID_SHIFT (MAP_BOT_BITS + MAP_BOT_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  616|  92.0M|#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  603|  92.0M|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define MAP_MID_SHIFT (MAP_BOT_BITS + MAP_BOT_SHIFT)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  620|  92.0M|#define MAP_BOT_SHIFT ARENA_BITS
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MAP_TOP_INDEX(p) ((AS_UINT(p) >> MAP_TOP_SHIFT) & MAP_TOP_MASK)
  |  |  ------------------
  |  |  |  |  610|  92.0M|#define MAP_TOP_MASK (MAP_TOP_LENGTH - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  609|  92.0M|#define MAP_TOP_LENGTH (1 << MAP_TOP_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  608|  92.0M|#define MAP_TOP_BITS INTERIOR_BITS
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  603|  92.0M|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1997|  92.0M|    if (arena_map_root.ptrs[i1] == NULL) {
  ------------------
  |  | 1982|  92.0M|#define arena_map_root (state->usage.arena_map_root)
  ------------------
  |  Branch (1997:9): [True: 2, False: 92.0M]
  ------------------
 1998|      2|        if (!create) {
  ------------------
  |  Branch (1998:13): [True: 0, False: 2]
  ------------------
 1999|      0|            return NULL;
 2000|      0|        }
 2001|      2|        arena_map_mid_t *n = PyMem_RawCalloc(1, sizeof(arena_map_mid_t));
 2002|      2|        if (n == NULL) {
  ------------------
  |  Branch (2002:13): [True: 0, False: 2]
  ------------------
 2003|      0|            return NULL;
 2004|      0|        }
 2005|      2|        arena_map_root.ptrs[i1] = n;
  ------------------
  |  | 1982|      2|#define arena_map_root (state->usage.arena_map_root)
  ------------------
 2006|      2|        arena_map_mid_count++;
  ------------------
  |  | 1984|      2|#define arena_map_mid_count (state->usage.arena_map_mid_count)
  ------------------
 2007|      2|    }
 2008|  92.0M|    int i2 = MAP_MID_INDEX(p);
  ------------------
  |  |  626|  92.0M|#define MAP_MID_INDEX(p) ((AS_UINT(p) >> MAP_MID_SHIFT) & MAP_MID_MASK)
  |  |  ------------------
  |  |  |  |  624|  92.0M|#define AS_UINT(p) ((uintptr_t)(p))
  |  |  ------------------
  |  |               #define MAP_MID_INDEX(p) ((AS_UINT(p) >> MAP_MID_SHIFT) & MAP_MID_MASK)
  |  |  ------------------
  |  |  |  |  621|  92.0M|#define MAP_MID_SHIFT (MAP_BOT_BITS + MAP_BOT_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  616|  92.0M|#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  603|  92.0M|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define MAP_MID_SHIFT (MAP_BOT_BITS + MAP_BOT_SHIFT)
  |  |  |  |  ------------------
  |  |  |  |  |  |  620|  92.0M|#define MAP_BOT_SHIFT ARENA_BITS
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MAP_MID_INDEX(p) ((AS_UINT(p) >> MAP_MID_SHIFT) & MAP_MID_MASK)
  |  |  ------------------
  |  |  |  |  614|  92.0M|#define MAP_MID_MASK (MAP_MID_LENGTH - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  92.0M|#define MAP_MID_LENGTH (1 << MAP_MID_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  612|  92.0M|#define MAP_MID_BITS INTERIOR_BITS
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  603|  92.0M|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  599|  92.0M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  565|  92.0M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  576|  92.0M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  220|  92.0M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2009|  92.0M|    if (arena_map_root.ptrs[i1]->ptrs[i2] == NULL) {
  ------------------
  |  | 1982|  92.0M|#define arena_map_root (state->usage.arena_map_root)
  ------------------
  |  Branch (2009:9): [True: 1.48M, False: 90.5M]
  ------------------
 2010|  1.48M|        if (!create) {
  ------------------
  |  Branch (2010:13): [True: 1.48M, False: 2]
  ------------------
 2011|  1.48M|            return NULL;
 2012|  1.48M|        }
 2013|      2|        arena_map_bot_t *n = PyMem_RawCalloc(1, sizeof(arena_map_bot_t));
 2014|      2|        if (n == NULL) {
  ------------------
  |  Branch (2014:13): [True: 0, False: 2]
  ------------------
 2015|      0|            return NULL;
 2016|      0|        }
 2017|      2|        arena_map_root.ptrs[i1]->ptrs[i2] = n;
  ------------------
  |  | 1982|      2|#define arena_map_root (state->usage.arena_map_root)
  ------------------
 2018|      2|        arena_map_bot_count++;
  ------------------
  |  | 1985|      2|#define arena_map_bot_count (state->usage.arena_map_bot_count)
  ------------------
 2019|      2|    }
 2020|  90.5M|    return arena_map_root.ptrs[i1]->ptrs[i2];
  ------------------
  |  | 1982|  90.5M|#define arena_map_root (state->usage.arena_map_root)
  ------------------
 2021|       |#else
 2022|       |    return &arena_map_root;
 2023|       |#endif
 2024|  92.0M|}
obmalloc.c:pymalloc_free:
 2766|  90.2M|{
 2767|  90.2M|    assert(p != NULL);
  ------------------
  |  Branch (2767:5): [True: 90.2M, False: 0]
  ------------------
 2768|       |
 2769|       |#ifdef WITH_VALGRIND
 2770|       |    if (UNLIKELY(running_on_valgrind > 0)) {
 2771|       |        return 0;
 2772|       |    }
 2773|       |#endif
 2774|       |
 2775|  90.2M|    poolp pool = POOL_ADDR(p);
  ------------------
  |  |  324|  90.2M|#define POOL_ADDR(P) ((poolp)_Py_ALIGN_DOWN((P), POOL_SIZE))
  |  |  ------------------
  |  |  |  |  241|  90.2M|#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1)))
  |  |  ------------------
  ------------------
 2776|  90.2M|    if (UNLIKELY(!address_in_range(state, p, pool))) {
  ------------------
  |  | 1745|  90.2M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 1.26M, False: 88.9M]
  |  |  ------------------
  ------------------
 2777|  1.26M|        return 0;
 2778|  1.26M|    }
 2779|       |    /* We allocated this address. */
 2780|       |
 2781|       |    /* Link p to the start of the pool's freeblock list.  Since
 2782|       |     * the pool had at least the p block outstanding, the pool
 2783|       |     * wasn't empty (so it's already in a usedpools[] list, or
 2784|       |     * was full and is in no list -- it's not in the freeblocks
 2785|       |     * list in any case).
 2786|       |     */
 2787|  90.2M|    assert(pool->ref.count > 0);            /* else it was empty */
  ------------------
  |  Branch (2787:5): [True: 88.9M, False: 0]
  ------------------
 2788|  88.9M|    pymem_block *lastfree = pool->freeblock;
 2789|  88.9M|    *(pymem_block **)p = lastfree;
 2790|  88.9M|    pool->freeblock = (pymem_block *)p;
 2791|  88.9M|    pool->ref.count--;
 2792|       |
 2793|  88.9M|    if (UNLIKELY(lastfree == NULL)) {
  ------------------
  |  | 1745|  88.9M|#  define UNLIKELY(value) __builtin_expect((value), 0)
  |  |  ------------------
  |  |  |  Branch (1745:27): [True: 8.19M, False: 80.7M]
  |  |  ------------------
  ------------------
 2794|       |        /* Pool was full, so doesn't currently live in any list:
 2795|       |         * link it to the front of the appropriate usedpools[] list.
 2796|       |         * This mimics LRU pool usage for new allocations and
 2797|       |         * targets optimal filling when several pools contain
 2798|       |         * blocks of the same size class.
 2799|       |         */
 2800|  8.19M|        insert_to_usedpool(state, pool);
 2801|  8.19M|        return 1;
 2802|  8.19M|    }
 2803|       |
 2804|       |    /* freeblock wasn't NULL, so the pool wasn't full,
 2805|       |     * and the pool is in a usedpools[] list.
 2806|       |     */
 2807|  80.7M|    if (LIKELY(pool->ref.count != 0)) {
  ------------------
  |  | 1746|  80.7M|#  define LIKELY(value) __builtin_expect((value), 1)
  |  |  ------------------
  |  |  |  Branch (1746:25): [True: 80.5M, False: 204k]
  |  |  ------------------
  ------------------
 2808|       |        /* pool isn't empty:  leave it in usedpools */
 2809|  80.5M|        return 1;
 2810|  80.5M|    }
 2811|       |
 2812|       |    /* Pool is now empty:  unlink from usedpools, and
 2813|       |     * link to the front of freepools.  This ensures that
 2814|       |     * previously freed pools will be allocated later
 2815|       |     * (being not referenced, they are perhaps paged out).
 2816|       |     */
 2817|   204k|    insert_to_freepool(state, pool);
 2818|   204k|    return 1;
 2819|  80.7M|}
obmalloc.c:address_in_range:
 2233|  91.9M|{
 2234|  91.9M|    return arena_map_is_used(state, p);
 2235|  91.9M|}
obmalloc.c:arena_map_is_used:
 2099|  91.9M|{
 2100|  91.9M|    arena_map_bot_t *n = arena_map_get(state, p, 0);
 2101|  91.9M|    if (n == NULL) {
  ------------------
  |  Branch (2101:9): [True: 1.48M, False: 90.5M]
  ------------------
 2102|  1.48M|        return 0;
 2103|  1.48M|    }
 2104|  90.5M|    int i3 = MAP_BOT_INDEX(p);
  ------------------
  |  |  625|  90.5M|#define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  624|  90.5M|#define AS_UINT(p) ((uintptr_t)(p))
  |  |  ------------------
  |  |               #define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  620|  90.5M|#define MAP_BOT_SHIFT ARENA_BITS
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|  90.5M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MAP_BOT_INDEX(p) ((AS_UINT(p) >> MAP_BOT_SHIFT) & MAP_BOT_MASK)
  |  |  ------------------
  |  |  |  |  618|  90.5M|#define MAP_BOT_MASK (MAP_BOT_LENGTH - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  617|  90.5M|#define MAP_BOT_LENGTH (1 << MAP_BOT_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  616|  90.5M|#define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  599|  90.5M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  565|  90.5M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  576|  90.5M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  220|  90.5M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define MAP_BOT_BITS (ADDRESS_BITS - ARENA_BITS - 2*INTERIOR_BITS)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  603|  90.5M|#define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  599|  90.5M|#define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  565|  90.5M|#define POINTER_BITS 64
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |               #define ADDRESS_BITS (POINTER_BITS - IGNORE_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  576|  90.5M|#define IGNORE_BITS 0
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define INTERIOR_BITS ((ADDRESS_BITS - ARENA_BITS + 2) / 3)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  220|  90.5M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2105|       |    /* ARENA_BITS must be < 32 so that the tail is a non-negative int32_t. */
 2106|  90.5M|    int32_t hi = n->arenas[i3].tail_hi;
 2107|  90.5M|    int32_t lo = n->arenas[i3].tail_lo;
 2108|  90.5M|    int32_t tail = (int32_t)(AS_UINT(p) & ARENA_SIZE_MASK);
  ------------------
  |  |  624|  90.5M|#define AS_UINT(p) ((uintptr_t)(p))
  ------------------
                  int32_t tail = (int32_t)(AS_UINT(p) & ARENA_SIZE_MASK);
  ------------------
  |  |  226|  90.5M|#define ARENA_SIZE_MASK         (ARENA_SIZE - 1)
  |  |  ------------------
  |  |  |  |  225|  90.5M|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  220|  90.5M|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2109|  90.5M|    return (tail < lo) || (tail >= hi && hi != 0);
  ------------------
  |  Branch (2109:12): [True: 74.8M, False: 15.6M]
  |  Branch (2109:28): [True: 15.6M, False: 3]
  |  Branch (2109:42): [True: 15.6M, False: 5]
  ------------------
 2110|  91.9M|}
obmalloc.c:insert_to_usedpool:
 2580|  8.19M|{
 2581|  8.19M|    assert(pool->ref.count > 0);            /* else the pool is empty */
  ------------------
  |  Branch (2581:5): [True: 8.19M, False: 0]
  ------------------
 2582|       |
 2583|  8.19M|    uint size = pool->szidx;
  ------------------
  |  |   35|  8.19M|#define uint pymem_uint
  ------------------
 2584|  8.19M|    poolp next = usedpools[size + size];
  ------------------
  |  | 1787|  8.19M|#define usedpools (state->pools.used)
  ------------------
 2585|  8.19M|    poolp prev = next->prevpool;
 2586|       |
 2587|       |    /* insert pool before next:   prev <-> pool <-> next */
 2588|  8.19M|    pool->nextpool = next;
 2589|  8.19M|    pool->prevpool = prev;
 2590|  8.19M|    next->prevpool = pool;
 2591|  8.19M|    prev->nextpool = pool;
 2592|  8.19M|}
obmalloc.c:insert_to_freepool:
 2596|   204k|{
 2597|   204k|    poolp next = pool->nextpool;
 2598|   204k|    poolp prev = pool->prevpool;
 2599|   204k|    next->prevpool = prev;
 2600|   204k|    prev->nextpool = next;
 2601|       |
 2602|       |    /* Link the pool to freepools.  This is a singly-linked
 2603|       |     * list, and pool->prevpool isn't used there.
 2604|       |     */
 2605|   204k|    struct arena_object *ao = &allarenas[pool->arenaindex];
  ------------------
  |  | 1788|   204k|#define allarenas (state->mgmt.arenas)
  ------------------
 2606|   204k|    pool->nextpool = ao->freepools;
 2607|   204k|    ao->freepools = pool;
 2608|   204k|    uint nf = ao->nfreepools;
  ------------------
  |  |   35|   204k|#define uint pymem_uint
  ------------------
 2609|       |    /* If this is the rightmost arena with this number of free pools,
 2610|       |     * nfp2lasta[nf] needs to change.  Caution:  if nf is 0, there
 2611|       |     * are no arenas in usable_arenas with that value.
 2612|       |     */
 2613|   204k|    struct arena_object* lastnf = nfp2lasta[nf];
  ------------------
  |  | 1792|   204k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
 2614|   204k|    assert((nf == 0 && lastnf == NULL) ||
  ------------------
  |  Branch (2614:5): [True: 5.05k, False: 199k]
  |  Branch (2614:5): [True: 5.05k, False: 0]
  |  Branch (2614:5): [True: 199k, False: 0]
  |  Branch (2614:5): [True: 199k, False: 0]
  |  Branch (2614:5): [True: 199k, False: 0]
  |  Branch (2614:5): [True: 10.8k, False: 188k]
  |  Branch (2614:5): [True: 188k, False: 0]
  ------------------
 2615|   204k|           (nf > 0 &&
 2616|   204k|            lastnf != NULL &&
 2617|   204k|            lastnf->nfreepools == nf &&
 2618|   204k|            (lastnf->nextarena == NULL ||
 2619|   204k|             nf < lastnf->nextarena->nfreepools)));
 2620|   204k|    if (lastnf == ao) {  /* it is the rightmost */
  ------------------
  |  Branch (2620:9): [True: 183k, False: 20.4k]
  ------------------
 2621|   183k|        struct arena_object* p = ao->prevarena;
 2622|   183k|        nfp2lasta[nf] = (p != NULL && p->nfreepools == nf) ? p : NULL;
  ------------------
  |  | 1792|   183k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
  |  Branch (2622:26): [True: 142k, False: 41.6k]
  |  Branch (2622:39): [True: 56, False: 141k]
  ------------------
 2623|   183k|    }
 2624|   204k|    ao->nfreepools = ++nf;
 2625|       |
 2626|       |    /* All the rest is arena management.  We just freed
 2627|       |     * a pool, and there are 4 cases for arena mgmt:
 2628|       |     * 1. If all the pools are free, return the arena to
 2629|       |     *    the system free().  Except if this is the last
 2630|       |     *    arena in the list, keep it to avoid thrashing:
 2631|       |     *    keeping one wholly free arena in the list avoids
 2632|       |     *    pathological cases where a simple loop would
 2633|       |     *    otherwise provoke needing to allocate and free an
 2634|       |     *    arena on every iteration.  See bpo-37257.
 2635|       |     * 2. If this is the only free pool in the arena,
 2636|       |     *    add the arena back to the `usable_arenas` list.
 2637|       |     * 3. If the "next" arena has a smaller count of free
 2638|       |     *    pools, we have to "slide this arena right" to
 2639|       |     *    restore that usable_arenas is sorted in order of
 2640|       |     *    nfreepools.
 2641|       |     * 4. Else there's nothing more to do.
 2642|       |     */
 2643|   204k|    if (nf == ao->ntotalpools && ao->nextarena != NULL) {
  ------------------
  |  Branch (2643:9): [True: 1.72k, False: 202k]
  |  Branch (2643:34): [True: 1.69k, False: 27]
  ------------------
 2644|       |        /* Case 1.  First unlink ao from usable_arenas.
 2645|       |         */
 2646|  1.69k|        assert(ao->prevarena == NULL ||
  ------------------
  |  Branch (2646:9): [True: 0, False: 1.69k]
  |  Branch (2646:9): [True: 1.69k, False: 0]
  ------------------
 2647|  1.69k|               ao->prevarena->address != 0);
 2648|  1.69k|        assert(ao ->nextarena == NULL ||
  ------------------
  |  Branch (2648:9): [True: 0, False: 1.69k]
  |  Branch (2648:9): [True: 1.69k, False: 0]
  ------------------
 2649|  1.69k|               ao->nextarena->address != 0);
 2650|       |
 2651|       |        /* Fix the pointer in the prevarena, or the
 2652|       |         * usable_arenas pointer.
 2653|       |         */
 2654|  1.69k|        if (ao->prevarena == NULL) {
  ------------------
  |  Branch (2654:13): [True: 0, False: 1.69k]
  ------------------
 2655|      0|            usable_arenas = ao->nextarena;
  ------------------
  |  | 1791|      0|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2656|      0|            assert(usable_arenas == NULL ||
  ------------------
  |  Branch (2656:13): [True: 0, False: 0]
  |  Branch (2656:13): [True: 0, False: 0]
  ------------------
 2657|      0|                   usable_arenas->address != 0);
 2658|      0|        }
 2659|  1.69k|        else {
 2660|  1.69k|            assert(ao->prevarena->nextarena == ao);
  ------------------
  |  Branch (2660:13): [True: 1.69k, False: 0]
  ------------------
 2661|  1.69k|            ao->prevarena->nextarena =
 2662|  1.69k|                ao->nextarena;
 2663|  1.69k|        }
 2664|       |        /* Fix the pointer in the nextarena. */
 2665|  1.69k|        if (ao->nextarena != NULL) {
  ------------------
  |  Branch (2665:13): [True: 1.69k, False: 0]
  ------------------
 2666|  1.69k|            assert(ao->nextarena->prevarena == ao);
  ------------------
  |  Branch (2666:13): [True: 1.69k, False: 0]
  ------------------
 2667|  1.69k|            ao->nextarena->prevarena =
 2668|  1.69k|                ao->prevarena;
 2669|  1.69k|        }
 2670|       |        /* Record that this arena_object slot is
 2671|       |         * available to be reused.
 2672|       |         */
 2673|  1.69k|        ao->nextarena = unused_arena_objects;
  ------------------
  |  | 1790|  1.69k|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
 2674|  1.69k|        unused_arena_objects = ao;
  ------------------
  |  | 1790|  1.69k|#define unused_arena_objects (state->mgmt.unused_arena_objects)
  ------------------
 2675|       |
 2676|  1.69k|#if WITH_PYMALLOC_RADIX_TREE
 2677|       |        /* mark arena region as not under control of obmalloc */
 2678|  1.69k|        arena_map_mark_used(state, ao->address, 0);
 2679|  1.69k|#endif
 2680|       |
 2681|       |        /* Free the entire arena. */
 2682|  1.69k|        _PyObject_Arena.free(_PyObject_Arena.ctx,
  ------------------
  |  |  721|  1.69k|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
                      _PyObject_Arena.free(_PyObject_Arena.ctx,
  ------------------
  |  |  721|  1.69k|#define _PyObject_Arena (_PyRuntime.allocators.obj_arena)
  ------------------
 2683|  1.69k|                             (void *)ao->address, ARENA_SIZE);
  ------------------
  |  |  225|  1.69k|#define ARENA_SIZE              (1 << ARENA_BITS)
  |  |  ------------------
  |  |  |  |  220|  1.69k|#    define ARENA_BITS            20                    /* 1 MiB */
  |  |  ------------------
  ------------------
 2684|  1.69k|        ao->address = 0;                        /* mark unassociated */
 2685|  1.69k|        --narenas_currently_allocated;
  ------------------
  |  | 1793|  1.69k|#define narenas_currently_allocated (state->mgmt.narenas_currently_allocated)
  ------------------
 2686|       |
 2687|  1.69k|        return;
 2688|  1.69k|    }
 2689|       |
 2690|   202k|    if (nf == 1) {
  ------------------
  |  Branch (2690:9): [True: 5.05k, False: 197k]
  ------------------
 2691|       |        /* Case 2.  Put ao at the head of
 2692|       |         * usable_arenas.  Note that because
 2693|       |         * ao->nfreepools was 0 before, ao isn't
 2694|       |         * currently on the usable_arenas list.
 2695|       |         */
 2696|  5.05k|        ao->nextarena = usable_arenas;
  ------------------
  |  | 1791|  5.05k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2697|  5.05k|        ao->prevarena = NULL;
 2698|  5.05k|        if (usable_arenas)
  ------------------
  |  | 1791|  5.05k|#define usable_arenas (state->mgmt.usable_arenas)
  |  |  ------------------
  |  |  |  Branch (1791:23): [True: 5.03k, False: 19]
  |  |  ------------------
  ------------------
 2699|  5.03k|            usable_arenas->prevarena = ao;
  ------------------
  |  | 1791|  5.03k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2700|  5.05k|        usable_arenas = ao;
  ------------------
  |  | 1791|  5.05k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2701|  5.05k|        assert(usable_arenas->address != 0);
  ------------------
  |  Branch (2701:9): [True: 5.05k, False: 0]
  ------------------
 2702|  5.05k|        if (nfp2lasta[1] == NULL) {
  ------------------
  |  | 1792|  5.05k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
  |  Branch (2702:13): [True: 4.32k, False: 733]
  ------------------
 2703|  4.32k|            nfp2lasta[1] = ao;
  ------------------
  |  | 1792|  4.32k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
 2704|  4.32k|        }
 2705|       |
 2706|  5.05k|        return;
 2707|  5.05k|    }
 2708|       |
 2709|       |    /* If this arena is now out of order, we need to keep
 2710|       |     * the list sorted.  The list is kept sorted so that
 2711|       |     * the "most full" arenas are used first, which allows
 2712|       |     * the nearly empty arenas to be completely freed.  In
 2713|       |     * a few un-scientific tests, it seems like this
 2714|       |     * approach allowed a lot more memory to be freed.
 2715|       |     */
 2716|       |    /* If this is the only arena with nf, record that. */
 2717|   197k|    if (nfp2lasta[nf] == NULL) {
  ------------------
  |  | 1792|   197k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
  |  Branch (2717:9): [True: 181k, False: 15.4k]
  ------------------
 2718|   181k|        nfp2lasta[nf] = ao;
  ------------------
  |  | 1792|   181k|#define nfp2lasta (state->mgmt.nfp2lasta)
  ------------------
 2719|   181k|    } /* else the rightmost with nf doesn't change */
 2720|       |    /* If this was the rightmost of the old size, it remains in place. */
 2721|   197k|    if (ao == lastnf) {
  ------------------
  |  Branch (2721:9): [True: 183k, False: 13.6k]
  ------------------
 2722|       |        /* Case 4.  Nothing to do. */
 2723|   183k|        return;
 2724|   183k|    }
 2725|       |    /* If ao were the only arena in the list, the last block would have
 2726|       |     * gotten us out.
 2727|       |     */
 2728|   197k|    assert(ao->nextarena != NULL);
  ------------------
  |  Branch (2728:5): [True: 13.6k, False: 0]
  ------------------
 2729|       |
 2730|       |    /* Case 3:  We have to move the arena towards the end of the list,
 2731|       |     * because it has more free pools than the arena to its right.  It needs
 2732|       |     * to move to follow lastnf.
 2733|       |     * First unlink ao from usable_arenas.
 2734|       |     */
 2735|  13.6k|    if (ao->prevarena != NULL) {
  ------------------
  |  Branch (2735:9): [True: 10.9k, False: 2.76k]
  ------------------
 2736|       |        /* ao isn't at the head of the list */
 2737|  10.9k|        assert(ao->prevarena->nextarena == ao);
  ------------------
  |  Branch (2737:9): [True: 10.9k, False: 0]
  ------------------
 2738|  10.9k|        ao->prevarena->nextarena = ao->nextarena;
 2739|  10.9k|    }
 2740|  2.76k|    else {
 2741|       |        /* ao is at the head of the list */
 2742|  2.76k|        assert(usable_arenas == ao);
  ------------------
  |  Branch (2742:9): [True: 2.76k, False: 0]
  ------------------
 2743|  2.76k|        usable_arenas = ao->nextarena;
  ------------------
  |  | 1791|  2.76k|#define usable_arenas (state->mgmt.usable_arenas)
  ------------------
 2744|  2.76k|    }
 2745|  13.6k|    ao->nextarena->prevarena = ao->prevarena;
 2746|       |    /* And insert after lastnf. */
 2747|  13.6k|    ao->prevarena = lastnf;
 2748|  13.6k|    ao->nextarena = lastnf->nextarena;
 2749|  13.6k|    if (ao->nextarena != NULL) {
  ------------------
  |  Branch (2749:9): [True: 13.4k, False: 275]
  ------------------
 2750|  13.4k|        ao->nextarena->prevarena = ao;
 2751|  13.4k|    }
 2752|  13.6k|    lastnf->nextarena = ao;
 2753|       |    /* Verify that the swaps worked. */
 2754|  13.6k|    assert(ao->nextarena == NULL || nf <= ao->nextarena->nfreepools);
  ------------------
  |  Branch (2754:5): [True: 275, False: 13.4k]
  |  Branch (2754:5): [True: 13.4k, False: 0]
  ------------------
 2755|  13.6k|    assert(ao->prevarena == NULL || nf > ao->prevarena->nfreepools);
  ------------------
  |  Branch (2755:5): [True: 0, False: 13.6k]
  |  Branch (2755:5): [True: 13.6k, False: 0]
  ------------------
 2756|  13.6k|    assert(ao->nextarena == NULL || ao->nextarena->prevarena == ao);
  ------------------
  |  Branch (2756:5): [True: 275, False: 13.4k]
  |  Branch (2756:5): [True: 13.4k, False: 0]
  ------------------
 2757|  13.6k|    assert((usable_arenas == ao && ao->prevarena == NULL)
  ------------------
  |  Branch (2757:5): [True: 0, False: 13.6k]
  |  Branch (2757:5): [True: 0, False: 0]
  |  Branch (2757:5): [True: 13.6k, False: 0]
  ------------------
 2758|  13.6k|           || ao->prevarena->nextarena == ao);
 2759|  13.6k|}
obmalloc.c:pymalloc_realloc:
 2851|  1.74M|{
 2852|  1.74M|    void *bp;
 2853|  1.74M|    poolp pool;
 2854|  1.74M|    size_t size;
 2855|       |
 2856|  1.74M|    assert(p != NULL);
  ------------------
  |  Branch (2856:5): [True: 1.74M, False: 0]
  ------------------
 2857|       |
 2858|       |#ifdef WITH_VALGRIND
 2859|       |    /* Treat running_on_valgrind == -1 the same as 0 */
 2860|       |    if (UNLIKELY(running_on_valgrind > 0)) {
 2861|       |        return 0;
 2862|       |    }
 2863|       |#endif
 2864|       |
 2865|  1.74M|    pool = POOL_ADDR(p);
  ------------------
  |  |  324|  1.74M|#define POOL_ADDR(P) ((poolp)_Py_ALIGN_DOWN((P), POOL_SIZE))
  |  |  ------------------
  |  |  |  |  241|  1.74M|#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1)))
  |  |  ------------------
  ------------------
 2866|  1.74M|    if (!address_in_range(state, p, pool)) {
  ------------------
  |  Branch (2866:9): [True: 224k, False: 1.51M]
  ------------------
 2867|       |        /* pymalloc is not managing this block.
 2868|       |
 2869|       |           If nbytes <= SMALL_REQUEST_THRESHOLD, it's tempting to try to take
 2870|       |           over this block.  However, if we do, we need to copy the valid data
 2871|       |           from the C-managed block to one of our blocks, and there's no
 2872|       |           portable way to know how much of the memory space starting at p is
 2873|       |           valid.
 2874|       |
 2875|       |           As bug 1185883 pointed out the hard way, it's possible that the
 2876|       |           C-managed block is "at the end" of allocated VM space, so that a
 2877|       |           memory fault can occur if we try to copy nbytes bytes starting at p.
 2878|       |           Instead we punt: let C continue to manage this block. */
 2879|   224k|        return 0;
 2880|   224k|    }
 2881|       |
 2882|       |    /* pymalloc is in charge of this block */
 2883|  1.51M|    size = INDEX2SIZE(pool->szidx);
  ------------------
  |  |  146|  1.51M|#define INDEX2SIZE(I) (((pymem_uint)(I) + 1) << ALIGNMENT_SHIFT)
  |  |  ------------------
  |  |  |  |  139|  1.51M|#define ALIGNMENT_SHIFT         4
  |  |  ------------------
  ------------------
 2884|  1.51M|    if (nbytes <= size) {
  ------------------
  |  Branch (2884:9): [True: 555k, False: 963k]
  ------------------
 2885|       |        /* The block is staying the same or shrinking.
 2886|       |
 2887|       |           If it's shrinking, there's a tradeoff: it costs cycles to copy the
 2888|       |           block to a smaller size class, but it wastes memory not to copy it.
 2889|       |
 2890|       |           The compromise here is to copy on shrink only if at least 25% of
 2891|       |           size can be shaved off. */
 2892|   555k|        if (4 * nbytes > 3 * size) {
  ------------------
  |  Branch (2892:13): [True: 313k, False: 241k]
  ------------------
 2893|       |            /* It's the same, or shrinking and new/old > 3/4. */
 2894|   313k|            *newptr_p = p;
 2895|   313k|            return 1;
 2896|   313k|        }
 2897|   241k|        size = nbytes;
 2898|   241k|    }
 2899|       |
 2900|  1.20M|    bp = _PyObject_Malloc(ctx, nbytes);
 2901|  1.20M|    if (bp != NULL) {
  ------------------
  |  Branch (2901:9): [True: 1.20M, False: 0]
  ------------------
 2902|  1.20M|        memcpy(bp, p, size);
 2903|  1.20M|        _PyObject_Free(ctx, p);
 2904|  1.20M|    }
 2905|  1.20M|    *newptr_p = bp;
 2906|  1.20M|    return 1;
 2907|  1.51M|}
obmalloc.c:init_obmalloc_pools:
 3554|      2|{
 3555|       |    // initialize the obmalloc->pools structure.  This must be done
 3556|       |    // before the obmalloc alloc/free functions can be called.
 3557|      2|    poolp temp[OBMALLOC_USED_POOLS_SIZE] =
 3558|      2|        _obmalloc_pools_INIT(interp->obmalloc->pools);
  ------------------
  |  |   40|      2|    { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) }
  |  |  ------------------
  |  |  |  |   20|      2|    PT(p, start), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   21|      2|    PT(p, start+1), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   22|      2|    PT(p, start+2), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   23|      2|    PT(p, start+3), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|      2|    PT(p, start+4), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   25|      2|    PT(p, start+5), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      2|    PT(p, start+6), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      2|    PT(p, start+7)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) }
  |  |  ------------------
  |  |  |  |   20|      2|    PT(p, start), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   21|      2|    PT(p, start+1), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   22|      2|    PT(p, start+2), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   23|      2|    PT(p, start+3), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|      2|    PT(p, start+4), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   25|      2|    PT(p, start+5), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      2|    PT(p, start+6), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      2|    PT(p, start+7)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) }
  |  |  ------------------
  |  |  |  |   20|      2|    PT(p, start), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   21|      2|    PT(p, start+1), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   22|      2|    PT(p, start+2), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   23|      2|    PT(p, start+3), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|      2|    PT(p, start+4), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   25|      2|    PT(p, start+5), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      2|    PT(p, start+6), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      2|    PT(p, start+7)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   { PT_8(p, 0), PT_8(p, 8), PT_8(p, 16), PT_8(p, 24) }
  |  |  ------------------
  |  |  |  |   20|      2|    PT(p, start), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   21|      2|    PT(p, start+1), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   22|      2|    PT(p, start+2), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   23|      2|    PT(p, start+3), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   24|      2|    PT(p, start+4), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   25|      2|    PT(p, start+5), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      2|    PT(p, start+6), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      2|    PT(p, start+7)
  |  |  |  |  ------------------
  |  |  |  |  |  |   17|      2|#define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PT(p, x)   PTA(p, x), PTA(p, x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    ((poolp )((uint8_t *)&(pools.used[2*(x)]) - 2*sizeof(pymem_block *)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3559|      2|    memcpy(&interp->obmalloc->pools.used, temp, sizeof(temp));
 3560|      2|}

rangeobject.c:range_dealloc:
  186|    400|{
  187|    400|    rangeobject *r = (rangeobject*)op;
  188|    400|    Py_DECREF(r->start);
  ------------------
  |  |  430|    400|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    400|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    400|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|    400|    Py_DECREF(r->stop);
  ------------------
  |  |  430|    400|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    400|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    400|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|    400|    Py_DECREF(r->step);
  ------------------
  |  |  430|    400|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    400|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    400|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|    400|    Py_DECREF(r->length);
  ------------------
  |  |  430|    400|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    400|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    400|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|    400|    _Py_FREELIST_FREE(ranges, r, PyObject_Free);
  ------------------
  |  |   35|    400|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|    400|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    400|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|    400|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   22|    400|#  define Py_ranges_MAXFREELIST 6
  |  |  ------------------
  ------------------
  193|    400|}
rangeobject.c:range_length:
  327|     42|{
  328|     42|    rangeobject *r = (rangeobject*)op;
  329|     42|    return PyLong_AsSsize_t(r->length);
  330|     42|}
rangeobject.c:compute_item:
  334|     80|{
  335|     80|    PyObject *incr, *result;
  336|       |    /* PyLong equivalent to:
  337|       |     *    return r->start + (i * r->step)
  338|       |     */
  339|     80|    if (r->step == _PyLong_GetOne()) {
  ------------------
  |  Branch (339:9): [True: 80, False: 0]
  ------------------
  340|     80|        result = PyNumber_Add(r->start, i);
  341|     80|    }
  342|      0|    else {
  343|      0|        incr = PyNumber_Multiply(i, r->step);
  344|      0|        if (!incr) {
  ------------------
  |  Branch (344:13): [True: 0, False: 0]
  ------------------
  345|      0|            return NULL;
  346|      0|        }
  347|      0|        result = PyNumber_Add(r->start, incr);
  348|      0|        Py_DECREF(incr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|      0|    }
  350|     80|    return result;
  351|     80|}
rangeobject.c:range_subscript:
  730|     40|{
  731|     40|    rangeobject *self = (rangeobject*)op;
  732|     40|    if (_PyIndex_Check(item)) {
  ------------------
  |  Branch (732:9): [True: 0, False: 40]
  ------------------
  733|      0|        PyObject *i, *result;
  734|      0|        i = PyNumber_Index(item);
  735|      0|        if (!i)
  ------------------
  |  Branch (735:13): [True: 0, False: 0]
  ------------------
  736|      0|            return NULL;
  737|      0|        result = compute_range_item(self, i);
  738|      0|        Py_DECREF(i);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  739|      0|        return result;
  740|      0|    }
  741|     40|    if (PySlice_Check(item)) {
  ------------------
  |  |   22|     40|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|     40|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  742|     40|        return compute_slice(self, item);
  743|     40|    }
  744|      0|    PyErr_Format(PyExc_TypeError,
  745|      0|                 "range indices must be integers or slices, not %.200s",
  746|      0|                 Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|       |    return NULL;
  748|     40|}
rangeobject.c:compute_slice:
  420|     40|{
  421|     40|    PySliceObject *slice = (PySliceObject *) _slice;
  422|     40|    rangeobject *result;
  423|     40|    PyObject *start = NULL, *stop = NULL, *step = NULL;
  424|     40|    PyObject *substart = NULL, *substop = NULL, *substep = NULL;
  425|     40|    int error;
  426|       |
  427|     40|    error = _PySlice_GetLongIndices(slice, r->length, &start, &stop, &step);
  428|     40|    if (error == -1)
  ------------------
  |  Branch (428:9): [True: 0, False: 40]
  ------------------
  429|      0|        return NULL;
  430|       |
  431|     40|    substep = PyNumber_Multiply(r->step, step);
  432|     40|    if (substep == NULL) goto fail;
  ------------------
  |  Branch (432:9): [True: 0, False: 40]
  ------------------
  433|     40|    Py_CLEAR(step);
  ------------------
  |  |  484|     40|    do { \
  |  |  485|     40|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     40|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     40|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     40|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     40|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     40|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 40, False: 0]
  |  |  ------------------
  |  |  488|     40|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     40|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     40|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     40|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     40|        } \
  |  |  491|     40|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 40]
  |  |  ------------------
  ------------------
  434|       |
  435|     40|    substart = compute_item(r, start);
  436|     40|    if (substart == NULL) goto fail;
  ------------------
  |  Branch (436:9): [True: 0, False: 40]
  ------------------
  437|     40|    Py_CLEAR(start);
  ------------------
  |  |  484|     40|    do { \
  |  |  485|     40|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     40|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     40|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     40|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     40|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     40|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 40, False: 0]
  |  |  ------------------
  |  |  488|     40|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     40|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     40|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     40|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     40|        } \
  |  |  491|     40|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 40]
  |  |  ------------------
  ------------------
  438|       |
  439|     40|    substop = compute_item(r, stop);
  440|     40|    if (substop == NULL) goto fail;
  ------------------
  |  Branch (440:9): [True: 0, False: 40]
  ------------------
  441|     40|    Py_CLEAR(stop);
  ------------------
  |  |  484|     40|    do { \
  |  |  485|     40|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     40|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     40|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     40|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     40|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     40|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 40, False: 0]
  |  |  ------------------
  |  |  488|     40|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     40|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     40|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     40|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     40|        } \
  |  |  491|     40|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 40]
  |  |  ------------------
  ------------------
  442|       |
  443|     40|    result = make_range_object(Py_TYPE(r), substart, substop, substep);
  ------------------
  |  |  213|     40|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  444|     40|    if (result != NULL) {
  ------------------
  |  Branch (444:9): [True: 40, False: 0]
  ------------------
  445|     40|        return (PyObject *) result;
  446|     40|    }
  447|      0|fail:
  448|      0|    Py_XDECREF(start);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  449|      0|    Py_XDECREF(stop);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|      0|    Py_XDECREF(step);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|      0|    Py_XDECREF(substart);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  452|      0|    Py_XDECREF(substop);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|      0|    Py_XDECREF(substep);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |    return NULL;
  455|     40|}
rangeobject.c:make_range_object:
   69|    400|{
   70|    400|    PyObject *length;
   71|    400|    length = compute_range_length(start, stop, step);
   72|    400|    if (length == NULL) {
  ------------------
  |  Branch (72:9): [True: 0, False: 400]
  ------------------
   73|      0|        return NULL;
   74|      0|    }
   75|    400|    rangeobject *obj = _Py_FREELIST_POP(rangeobject, ranges);
  ------------------
  |  |   43|    400|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|    400|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   76|    400|    if (obj == NULL) {
  ------------------
  |  Branch (76:9): [True: 7, False: 393]
  ------------------
   77|      7|        obj = PyObject_New(rangeobject, type);
  ------------------
  |  |  130|      7|#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
  ------------------
   78|      7|        if (obj == NULL) {
  ------------------
  |  Branch (78:13): [True: 0, False: 7]
  ------------------
   79|      0|            Py_DECREF(length);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      0|            return NULL;
   81|      0|        }
   82|      7|    }
   83|    400|    obj->start = start;
   84|    400|    obj->stop = stop;
   85|    400|    obj->step = step;
   86|    400|    obj->length = length;
   87|    400|    return obj;
   88|    400|}
rangeobject.c:compute_range_length:
  244|    400|{
  245|       |    /* -------------------------------------------------------------
  246|       |    Algorithm is equal to that of get_len_of_range(), but it operates
  247|       |    on PyObjects (which are assumed to be PyLong objects).
  248|       |    ---------------------------------------------------------------*/
  249|    400|    int cmp_result;
  250|    400|    PyObject *lo, *hi;
  251|    400|    PyObject *diff = NULL;
  252|    400|    PyObject *tmp1 = NULL, *tmp2 = NULL, *result;
  253|       |                /* holds sub-expression evaluations */
  254|       |
  255|    400|    PyObject *zero = _PyLong_GetZero();  // borrowed reference
  256|    400|    PyObject *one = _PyLong_GetOne();  // borrowed reference
  257|       |
  258|    400|    assert(PyLong_Check(start));
  ------------------
  |  Branch (258:5): [True: 400, False: 0]
  ------------------
  259|    400|    assert(PyLong_Check(stop));
  ------------------
  |  Branch (259:5): [True: 400, False: 0]
  ------------------
  260|    400|    assert(PyLong_Check(step));
  ------------------
  |  Branch (260:5): [True: 400, False: 0]
  ------------------
  261|       |
  262|       |    /* fast path when all arguments fit into a long integer */
  263|    400|    long len = compute_range_length_long(start, stop, step);
  264|    400|    if (len >= 0) {
  ------------------
  |  Branch (264:9): [True: 398, False: 2]
  ------------------
  265|    398|        return PyLong_FromLong(len);
  266|    398|    }
  267|      2|    else if (len == -1) {
  ------------------
  |  Branch (267:14): [True: 0, False: 2]
  ------------------
  268|       |        /* unexpected error from compute_range_length_long, we propagate to the caller */
  269|      0|        return NULL;
  270|      0|    }
  271|    400|    assert(len == -2);
  ------------------
  |  Branch (271:5): [True: 2, False: 0]
  ------------------
  272|       |
  273|      2|    cmp_result = PyObject_RichCompareBool(step, zero, Py_GT);
  ------------------
  |  |  656|      2|#define Py_GT 4
  ------------------
  274|      2|    if (cmp_result == -1)
  ------------------
  |  Branch (274:9): [True: 0, False: 2]
  ------------------
  275|      0|        return NULL;
  276|       |
  277|      2|    if (cmp_result == 1) {
  ------------------
  |  Branch (277:9): [True: 2, False: 0]
  ------------------
  278|      2|        lo = start;
  279|      2|        hi = stop;
  280|      2|        Py_INCREF(step);
  ------------------
  |  |  310|      2|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|      2|    } else {
  282|      0|        lo = stop;
  283|      0|        hi = start;
  284|      0|        step = PyNumber_Negative(step);
  285|      0|        if (!step)
  ------------------
  |  Branch (285:13): [True: 0, False: 0]
  ------------------
  286|      0|            return NULL;
  287|      0|    }
  288|       |
  289|       |    /* if (lo >= hi), return length of 0. */
  290|      2|    cmp_result = PyObject_RichCompareBool(lo, hi, Py_GE);
  ------------------
  |  |  657|      2|#define Py_GE 5
  ------------------
  291|      2|    if (cmp_result != 0) {
  ------------------
  |  Branch (291:9): [True: 0, False: 2]
  ------------------
  292|      0|        Py_DECREF(step);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|      0|        if (cmp_result < 0)
  ------------------
  |  Branch (293:13): [True: 0, False: 0]
  ------------------
  294|      0|            return NULL;
  295|      0|        result = zero;
  296|      0|        return Py_NewRef(result);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      0|    }
  298|       |
  299|      2|    if ((tmp1 = PyNumber_Subtract(hi, lo)) == NULL)
  ------------------
  |  Branch (299:9): [True: 0, False: 2]
  ------------------
  300|      0|        goto Fail;
  301|       |
  302|      2|    if ((diff = PyNumber_Subtract(tmp1, one)) == NULL)
  ------------------
  |  Branch (302:9): [True: 0, False: 2]
  ------------------
  303|      0|        goto Fail;
  304|       |
  305|      2|    if ((tmp2 = PyNumber_FloorDivide(diff, step)) == NULL)
  ------------------
  |  Branch (305:9): [True: 0, False: 2]
  ------------------
  306|      0|        goto Fail;
  307|       |
  308|      2|    if ((result = PyNumber_Add(tmp2, one)) == NULL)
  ------------------
  |  Branch (308:9): [True: 0, False: 2]
  ------------------
  309|      0|        goto Fail;
  310|       |
  311|      2|    Py_DECREF(tmp2);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|      2|    Py_DECREF(diff);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|      2|    Py_DECREF(step);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|      2|    Py_DECREF(tmp1);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|      2|    return result;
  316|       |
  317|      0|  Fail:
  318|      0|    Py_DECREF(step);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|      0|    Py_XDECREF(tmp2);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|      0|    Py_XDECREF(diff);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|      0|    Py_XDECREF(tmp1);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|       |    return NULL;
  323|      2|}
rangeobject.c:compute_range_length_long:
  203|    400|                PyObject *stop, PyObject *step) {
  204|    400|    int overflow = 0;
  205|       |
  206|    400|    long long_start = PyLong_AsLongAndOverflow(start, &overflow);
  207|    400|    if (overflow) {
  ------------------
  |  Branch (207:9): [True: 0, False: 400]
  ------------------
  208|      0|        return -2;
  209|      0|    }
  210|    400|    if (long_start == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (210:9): [True: 2, False: 398]
  |  Branch (210:29): [True: 0, False: 2]
  ------------------
  211|      0|        return -1;
  212|      0|    }
  213|    400|    long long_stop = PyLong_AsLongAndOverflow(stop, &overflow);
  214|    400|    if (overflow) {
  ------------------
  |  Branch (214:9): [True: 2, False: 398]
  ------------------
  215|      2|        return -2;
  216|      2|    }
  217|    398|    if (long_stop == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (217:9): [True: 40, False: 358]
  |  Branch (217:28): [True: 0, False: 40]
  ------------------
  218|      0|        return -1;
  219|      0|    }
  220|    398|    long long_step = PyLong_AsLongAndOverflow(step, &overflow);
  221|    398|    if (overflow) {
  ------------------
  |  Branch (221:9): [True: 0, False: 398]
  ------------------
  222|      0|        return -2;
  223|      0|    }
  224|    398|    if (long_step == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (224:9): [True: 40, False: 358]
  |  Branch (224:28): [True: 0, False: 40]
  ------------------
  225|      0|        return -1;
  226|      0|    }
  227|       |
  228|    398|    unsigned long ulen = get_len_of_range(long_start, long_stop, long_step);
  229|    398|    if (ulen > (unsigned long)LONG_MAX) {
  ------------------
  |  Branch (229:9): [True: 0, False: 398]
  ------------------
  230|       |        /* length too large for a long */
  231|      0|        return -2;
  232|      0|    }
  233|    398|    else {
  234|    398|        return (long)ulen;
  235|    398|    }
  236|    398|}
rangeobject.c:get_len_of_range:
  993|    756|{
  994|       |    /* -------------------------------------------------------------
  995|       |    If step > 0 and lo >= hi, or step < 0 and lo <= hi, the range is empty.
  996|       |    Else for step > 0, if n values are in the range, the last one is
  997|       |    lo + (n-1)*step, which must be <= hi-1.  Rearranging,
  998|       |    n <= (hi - lo - 1)/step + 1, so taking the floor of the RHS gives
  999|       |    the proper value.  Since lo < hi in this case, hi-lo-1 >= 0, so
 1000|       |    the RHS is non-negative and so truncation is the same as the
 1001|       |    floor.  Letting M be the largest positive long, the worst case
 1002|       |    for the RHS numerator is hi=M, lo=-M-1, and then
 1003|       |    hi-lo-1 = M-(-M-1)-1 = 2*M.  Therefore unsigned long has enough
 1004|       |    precision to compute the RHS exactly.  The analysis for step < 0
 1005|       |    is similar.
 1006|       |    ---------------------------------------------------------------*/
 1007|    756|    assert(step != 0);
  ------------------
  |  Branch (1007:5): [True: 756, False: 0]
  ------------------
 1008|    756|    if (step > 0 && lo < hi)
  ------------------
  |  Branch (1008:9): [True: 662, False: 94]
  |  Branch (1008:21): [True: 654, False: 8]
  ------------------
 1009|    654|        return 1UL + (hi - 1UL - lo) / step;
 1010|    102|    else if (step < 0 && lo > hi)
  ------------------
  |  Branch (1010:14): [True: 94, False: 8]
  |  Branch (1010:26): [True: 90, False: 4]
  ------------------
 1011|     90|        return 1UL + (lo - 1UL - hi) / (0UL - step);
 1012|     12|    else
 1013|     12|        return 0UL;
 1014|    756|}
rangeobject.c:fast_range_iter:
 1021|    358|{
 1022|    358|    _PyRangeIterObject *it = _Py_FREELIST_POP(_PyRangeIterObject, range_iters);
  ------------------
  |  |   43|    358|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|    358|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1023|    358|    if (it == NULL) {
  ------------------
  |  Branch (1023:9): [True: 5, False: 353]
  ------------------
 1024|      5|        it = PyObject_New(_PyRangeIterObject, &PyRangeIter_Type);
  ------------------
  |  |  130|      5|#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
  ------------------
 1025|      5|        if (it == NULL) {
  ------------------
  |  Branch (1025:13): [True: 0, False: 5]
  ------------------
 1026|      0|            return NULL;
 1027|      0|        }
 1028|      5|    }
 1029|    358|    assert(Py_IS_TYPE(it, &PyRangeIter_Type));
  ------------------
  |  Branch (1029:5): [True: 358, False: 0]
  ------------------
 1030|    358|    it->start = start;
 1031|    358|    it->step = step;
 1032|    358|    it->len = len;
 1033|    358|    return (PyObject *)it;
 1034|    358|}
rangeobject.c:range_from_array:
   97|    360|{
   98|    360|    rangeobject *obj;
   99|    360|    PyObject *start = NULL, *stop = NULL, *step = NULL;
  100|       |
  101|    360|    switch (num_args) {
  102|      9|        case 3:
  ------------------
  |  Branch (102:9): [True: 9, False: 351]
  ------------------
  103|      9|            step = args[2];
  104|      9|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|      9|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  105|     20|        case 2:
  ------------------
  |  Branch (105:9): [True: 11, False: 349]
  ------------------
  106|       |            /* Convert borrowed refs to owned refs */
  107|     20|            start = PyNumber_Index(args[0]);
  108|     20|            if (!start) {
  ------------------
  |  Branch (108:17): [True: 0, False: 20]
  ------------------
  109|      0|                return NULL;
  110|      0|            }
  111|     20|            stop = PyNumber_Index(args[1]);
  112|     20|            if (!stop) {
  ------------------
  |  Branch (112:17): [True: 0, False: 20]
  ------------------
  113|      0|                Py_DECREF(start);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|      0|                return NULL;
  115|      0|            }
  116|     20|            step = validate_step(step);  /* Caution, this can clear exceptions */
  117|     20|            if (!step) {
  ------------------
  |  Branch (117:17): [True: 0, False: 20]
  ------------------
  118|      0|                Py_DECREF(start);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      0|                Py_DECREF(stop);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|      0|                return NULL;
  121|      0|            }
  122|     20|            break;
  123|    340|        case 1:
  ------------------
  |  Branch (123:9): [True: 340, False: 20]
  ------------------
  124|    340|            stop = PyNumber_Index(args[0]);
  125|    340|            if (!stop) {
  ------------------
  |  Branch (125:17): [True: 0, False: 340]
  ------------------
  126|      0|                return NULL;
  127|      0|            }
  128|    340|            start = _PyLong_GetZero();
  129|    340|            step = _PyLong_GetOne();
  130|    340|            break;
  131|      0|        case 0:
  ------------------
  |  Branch (131:9): [True: 0, False: 360]
  ------------------
  132|      0|            PyErr_SetString(PyExc_TypeError,
  133|      0|                            "range expected at least 1 argument, got 0");
  134|      0|            return NULL;
  135|      0|        default:
  ------------------
  |  Branch (135:9): [True: 0, False: 360]
  ------------------
  136|      0|            PyErr_Format(PyExc_TypeError,
  137|      0|                         "range expected at most 3 arguments, got %zd",
  138|      0|                         num_args);
  139|      0|            return NULL;
  140|    360|    }
  141|    360|    obj = make_range_object(type, start, stop, step);
  142|    360|    if (obj != NULL) {
  ------------------
  |  Branch (142:9): [True: 360, False: 0]
  ------------------
  143|    360|        return (PyObject *) obj;
  144|    360|    }
  145|       |
  146|       |    /* Failed to create object, release attributes */
  147|      0|    Py_DECREF(start);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|      0|    Py_DECREF(stop);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|      0|    Py_DECREF(step);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|       |    return NULL;
  151|    360|}
rangeobject.c:validate_step:
   48|     20|{
   49|       |    /* No step specified, use a step of 1. */
   50|     20|    if (!step)
  ------------------
  |  Branch (50:9): [True: 11, False: 9]
  ------------------
   51|     11|        return PyLong_FromLong(1);
   52|       |
   53|      9|    step = PyNumber_Index(step);
   54|      9|    if (step && _PyLong_IsZero((PyLongObject *)step)) {
  ------------------
  |  Branch (54:9): [True: 9, False: 0]
  |  Branch (54:17): [True: 0, False: 9]
  ------------------
   55|      0|        PyErr_SetString(PyExc_ValueError,
   56|      0|                        "range() arg 3 must not be zero");
   57|      0|        Py_CLEAR(step);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
   58|      0|    }
   59|       |
   60|      9|    return step;
   61|     20|}
rangeobject.c:range_vectorcall:
  166|    360|{
  167|    360|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    360|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  168|    360|    if (!_PyArg_NoKwnames("range", kwnames)) {
  ------------------
  |  |   15|    360|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 360, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  169|      0|        return NULL;
  170|      0|    }
  171|    360|    return range_from_array((PyTypeObject *)rangetype, args, nargs);
  172|    360|}
rangeobject.c:rangeiter_dealloc:
  944|    358|{
  945|    358|    _Py_FREELIST_FREE(range_iters, (_PyRangeIterObject *)self, PyObject_Free);
  ------------------
  |  |   35|    358|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|    358|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    358|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|    358|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   23|    358|#  define Py_range_iters_MAXFREELIST 6
  |  |  ------------------
  ------------------
  946|    358|}
rangeobject.c:rangeiter_next:
  847|  4.56k|{
  848|  4.56k|    PyObject *ret = NULL;
  849|  4.56k|    Py_BEGIN_CRITICAL_SECTION(op);
  ------------------
  |  |   51|  4.56k|    {
  ------------------
  850|  4.56k|    _PyRangeIterObject *r = (_PyRangeIterObject*)op;
  851|  4.56k|    if (r->len > 0) {
  ------------------
  |  Branch (851:9): [True: 4.51k, False: 46]
  ------------------
  852|  4.51k|        long result = r->start;
  853|  4.51k|        r->start = result + r->step;
  854|  4.51k|        r->len--;
  855|  4.51k|        ret = PyLong_FromLong(result);
  856|  4.51k|    }
  857|  4.56k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  4.56k|    }
  ------------------
  858|  4.56k|    return ret;
  859|  4.56k|}
rangeobject.c:longrangeiter_dealloc:
 1153|      2|{
 1154|      2|    longrangeiterobject *r = (longrangeiterobject*)op;
 1155|      2|    Py_XDECREF(r->start);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1156|      2|    Py_XDECREF(r->step);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|      2|    Py_XDECREF(r->len);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1158|      2|    PyObject_Free(r);
 1159|      2|}
rangeobject.c:range_iter:
 1228|    360|{
 1229|    360|    rangeobject *r = (rangeobject *)seq;
 1230|    360|    longrangeiterobject *it;
 1231|    360|    long lstart, lstop, lstep;
 1232|    360|    unsigned long ulen;
 1233|       |
 1234|    360|    assert(PyRange_Check(seq));
  ------------------
  |  Branch (1234:5): [True: 360, False: 0]
  ------------------
 1235|       |
 1236|       |    /* If all three fields and the length convert to long, use the int
 1237|       |     * version */
 1238|    360|    lstart = PyLong_AsLong(r->start);
 1239|    360|    if (lstart == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1239:9): [True: 2, False: 358]
  |  Branch (1239:25): [True: 0, False: 2]
  ------------------
 1240|      0|        PyErr_Clear();
 1241|      0|        goto long_range;
 1242|      0|    }
 1243|    360|    lstop = PyLong_AsLong(r->stop);
 1244|    360|    if (lstop == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1244:9): [True: 42, False: 318]
  |  Branch (1244:24): [True: 2, False: 40]
  ------------------
 1245|      2|        PyErr_Clear();
 1246|      2|        goto long_range;
 1247|      2|    }
 1248|    358|    lstep = PyLong_AsLong(r->step);
 1249|    358|    if (lstep == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1249:9): [True: 40, False: 318]
  |  Branch (1249:24): [True: 0, False: 40]
  ------------------
 1250|      0|        PyErr_Clear();
 1251|      0|        goto long_range;
 1252|      0|    }
 1253|    358|    ulen = get_len_of_range(lstart, lstop, lstep);
 1254|    358|    if (ulen > (unsigned long)LONG_MAX) {
  ------------------
  |  Branch (1254:9): [True: 0, False: 358]
  ------------------
 1255|      0|        goto long_range;
 1256|      0|    }
 1257|       |    /* check for potential overflow of lstart + ulen * lstep */
 1258|    358|    if (ulen) {
  ------------------
  |  Branch (1258:9): [True: 353, False: 5]
  ------------------
 1259|    353|        if (lstep > 0) {
  ------------------
  |  Branch (1259:13): [True: 308, False: 45]
  ------------------
 1260|    308|            if (lstop > LONG_MAX - (lstep - 1))
  ------------------
  |  Branch (1260:17): [True: 0, False: 308]
  ------------------
 1261|      0|                goto long_range;
 1262|    308|        }
 1263|     45|        else {
 1264|     45|            if (lstop < LONG_MIN + (-1 - lstep))
  ------------------
  |  Branch (1264:17): [True: 0, False: 45]
  ------------------
 1265|      0|                goto long_range;
 1266|     45|        }
 1267|    353|    }
 1268|    358|    return fast_range_iter(lstart, lstop, lstep, (long)ulen);
 1269|       |
 1270|      2|  long_range:
 1271|      2|    it = PyObject_New(longrangeiterobject, &PyLongRangeIter_Type);
  ------------------
  |  |  130|      2|#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
  ------------------
 1272|      2|    if (it == NULL)
  ------------------
  |  Branch (1272:9): [True: 0, False: 2]
  ------------------
 1273|      0|        return NULL;
 1274|       |
 1275|      2|    it->start = Py_NewRef(r->start);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1276|      2|    it->step = Py_NewRef(r->step);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|      2|    it->len = Py_NewRef(r->length);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|      2|    return (PyObject *)it;
 1279|      2|}

sentinelobject.c:sentinel_new_with_module:
   51|      3|{
   52|      3|    assert(PyUnicode_Check(name));
  ------------------
  |  Branch (52:5): [True: 3, False: 0]
  ------------------
   53|       |
   54|      3|    sentinelobject *self = PyObject_GC_New(sentinelobject, type);
  ------------------
  |  |  181|      3|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   55|      3|    if (self == NULL) {
  ------------------
  |  Branch (55:9): [True: 0, False: 3]
  ------------------
   56|      0|        return NULL;
   57|      0|    }
   58|      3|    self->name = Py_NewRef(name);
  ------------------
  |  |  550|      3|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   59|      3|    self->module = Py_NewRef(module);
  ------------------
  |  |  550|      3|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   60|      3|    self->repr = Py_XNewRef(repr);
  ------------------
  |  |  551|      3|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|      3|    _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|      3|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   62|      3|    return (PyObject *)self;
   63|      3|}
sentinelobject.c:sentinel_traverse:
  144|     38|{
  145|     38|    sentinelobject *self = sentinelobject_CAST(op);
  ------------------
  |  |   21|     38|    (assert(PySentinel_Check(op)), _Py_CAST(sentinelobject *, (op)))
  |  |  ------------------
  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (145:28): [True: 38, False: 0]
  ------------------
  146|     38|    Py_VISIT(self->name);
  ------------------
  |  |  194|     38|    do {                                                                \
  |  |  195|     38|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 38, False: 0]
  |  |  ------------------
  |  |  196|     38|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     38|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     38|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 38]
  |  |  ------------------
  |  |  198|     38|                return vret;                                            \
  |  |  199|     38|        }                                                               \
  |  |  200|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
  147|     38|    Py_VISIT(self->module);
  ------------------
  |  |  194|     38|    do {                                                                \
  |  |  195|     38|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 38, False: 0]
  |  |  ------------------
  |  |  196|     38|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     38|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     38|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 38]
  |  |  ------------------
  |  |  198|     38|                return vret;                                            \
  |  |  199|     38|        }                                                               \
  |  |  200|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
  148|     38|    Py_VISIT(self->repr);
  ------------------
  |  |  194|     38|    do {                                                                \
  |  |  195|     38|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 38]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
  149|     38|    return 0;
  150|     38|}
sentinelobject.c:sentinel_new_impl:
   78|      3|{
   79|      3|    if (repr == Py_None) {
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (79:9): [True: 3, False: 0]
  ------------------
   80|      3|        repr = NULL;
   81|      3|    }
   82|      0|    else if (!PyUnicode_Check(repr)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (82:14): [True: 0, False: 0]
  ------------------
   83|      0|        _PyArg_BadArgument("sentinel", "argument 'repr'", "str or None", repr);
   84|      0|        return NULL;
   85|      0|    }
   86|      3|    PyObject *module = caller();
   87|      3|    PyObject *self = sentinel_new_with_module(type, name, module, repr);
   88|      3|    Py_DECREF(module);
  ------------------
  |  |  430|      3|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      3|    return self;
   90|      3|}
sentinelobject.c:caller:
   33|      3|{
   34|      3|    _PyInterpreterFrame *f = _PyThreadState_GET()->current_frame;
   35|      3|    if (f == NULL || PyStackRef_IsNull(f->f_funcobj)) {
  ------------------
  |  |  482|      3|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|      3|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      3|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  |  Branch (35:9): [True: 0, False: 3]
  ------------------
   36|      0|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (36:9): [True: 0, False: 0]
  ------------------
   37|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
   38|      0|    }
   39|      3|    PyFunctionObject *func = _PyFrame_GetFunction(f);
   40|      3|    assert(PyFunction_Check(func));
  ------------------
  |  Branch (40:5): [True: 3, False: 0]
  ------------------
   41|      3|    PyObject *r = PyFunction_GetModule((PyObject *)func);
   42|      3|    if (!r) {
  ------------------
  |  Branch (42:9): [True: 0, False: 3]
  ------------------
   43|      0|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (43:9): [True: 0, False: 0]
  ------------------
   44|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
   45|      0|    }
   46|      3|    return Py_NewRef(r);
  ------------------
  |  |  550|      3|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   47|      3|}

_PySet_AddTakeRef:
  363|    267|{
  364|    267|    Py_hash_t hash = PyObject_Hash(key);
  365|    267|    if (hash == -1) {
  ------------------
  |  Branch (365:9): [True: 0, False: 267]
  ------------------
  366|      0|        set_unhashable_type(key);
  367|      0|        Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|      0|        return -1;
  369|      0|    }
  370|       |    // We don't pre-increment here, the caller holds a strong
  371|       |    // reference to the object which we are stealing.
  372|    267|    return set_add_entry_takeref(so, key, hash);
  373|    267|}
_PySet_Freeze:
 1572|      3|{
 1573|      3|    assert(set != NULL);
  ------------------
  |  Branch (1573:5): [True: 3, False: 0]
  ------------------
 1574|      3|    assert(PySet_CheckExact(set));
  ------------------
  |  Branch (1574:5): [True: 3, False: 0]
  ------------------
 1575|      3|    assert(_PyObject_IsUniquelyReferenced(set));
  ------------------
  |  Branch (1575:5): [True: 3, False: 0]
  ------------------
 1576|      3|    set->ob_type = &PyFrozenSet_Type;
 1577|      3|    return Py_NewRef(set);
  ------------------
  |  |  550|      3|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1578|      3|}
_PySet_Contains:
 2556|  1.60M|{
 2557|  1.60M|    assert(so);
  ------------------
  |  Branch (2557:5): [True: 1.60M, False: 0]
  ------------------
 2558|       |
 2559|  1.60M|    Py_hash_t hash = PyObject_Hash(key);
 2560|  1.60M|    if (hash == -1) {
  ------------------
  |  Branch (2560:9): [True: 0, False: 1.60M]
  ------------------
 2561|      0|        if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  |   37|      0|    (Py_IS_TYPE((ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|      0|    PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2561:34): [True: 0, False: 0]
  ------------------
 2562|      0|            set_unhashable_type(key);
 2563|      0|            return -1;
 2564|      0|        }
 2565|      0|        PyErr_Clear();
 2566|       |        // Note that 'key' could be a set() or frozenset() object.  Unlike most
 2567|       |        // container types, set allows membership testing with a set key, even
 2568|       |        // though it is not hashable.
 2569|      0|        Py_BEGIN_CRITICAL_SECTION(key);
  ------------------
  |  |   51|      0|    {
  ------------------
 2570|      0|        hash = frozenset_hash_impl(key);
 2571|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 2572|      0|    }
 2573|  1.60M|    return set_contains_entry(so, key, hash);
 2574|  1.60M|}
PySet_New:
 3034|   574k|{
 3035|   574k|    return make_new_set(&PySet_Type, iterable);
 3036|   574k|}
PyFrozenSet_New:
 3040|  9.89k|{
 3041|  9.89k|    PyObject *result = make_new_set(&PyFrozenSet_Type, iterable);
 3042|  9.89k|    if (result != NULL) {
  ------------------
  |  Branch (3042:9): [True: 9.89k, False: 0]
  ------------------
 3043|  9.89k|        _PyFrozenSet_MaybeUntrack(result);
 3044|  9.89k|    }
 3045|  9.89k|    return result;
 3046|  9.89k|}
PySet_Clear:
 3060|     27|{
 3061|     27|    if (!PySet_Check(set)) {
  ------------------
  |  |   37|     27|    (Py_IS_TYPE((ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  215|     54|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     27|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 27, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|     27|    PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3062|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3063|      0|        return -1;
 3064|      0|    }
 3065|     27|    (void)set_clear(set, NULL);
 3066|     27|    return 0;
 3067|     27|}
PySet_Contains:
 3077|   394k|{
 3078|   394k|    if (!PyAnySet_Check(anyset)) {
  ------------------
  |  |   31|   394k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   788k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   394k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   394k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 394k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   394k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|   394k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|   394k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3079|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3080|      0|        return -1;
 3081|      0|    }
 3082|       |
 3083|   394k|    PySetObject *so = (PySetObject *)anyset;
 3084|   394k|    Py_hash_t hash = PyObject_Hash(key);
 3085|   394k|    if (hash == -1) {
  ------------------
  |  Branch (3085:9): [True: 0, False: 394k]
  ------------------
 3086|      0|        set_unhashable_type(key);
 3087|      0|        return -1;
 3088|      0|    }
 3089|   394k|    return set_contains_entry(so, key, hash);
 3090|   394k|}
PySet_Discard:
 3094|   281k|{
 3095|   281k|    if (!PySet_Check(set)) {
  ------------------
  |  |   37|   281k|    (Py_IS_TYPE((ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   563k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   281k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   281k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 281k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|   281k|    PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3096|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3097|      0|        return -1;
 3098|      0|    }
 3099|       |
 3100|   281k|    int rv;
 3101|   281k|    Py_BEGIN_CRITICAL_SECTION(set);
  ------------------
  |  |   51|   281k|    {
  ------------------
 3102|   281k|    rv = set_discard_key((PySetObject *)set, key);
 3103|   281k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   281k|    }
  ------------------
 3104|   281k|    return rv;
 3105|   281k|}
PySet_Add:
 3109|   191k|{
 3110|   191k|    if (PySet_Check(anyset)) {
  ------------------
  |  |   37|   191k|    (Py_IS_TYPE((ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   383k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   191k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   191k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 191k, False: 245]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|   191k|    PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
  |  |  ------------------
  |  |  |  |  213|    245|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    245|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    245|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38:5): [True: 0, False: 245]
  |  |  ------------------
  ------------------
 3111|   191k|        int rv;
 3112|   191k|        Py_BEGIN_CRITICAL_SECTION(anyset);
  ------------------
  |  |   51|   191k|    {
  ------------------
 3113|   191k|        rv = set_add_key((PySetObject *)anyset, key);
 3114|   191k|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   191k|    }
  ------------------
 3115|   191k|        return rv;
 3116|   191k|    }
 3117|       |
 3118|    245|    if (PyFrozenSet_Check(anyset) && _PyObject_IsUniquelyReferenced(anyset)) {
  ------------------
  |  |   25|    490|    (Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    490|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    245|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    245|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 245, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   26|    490|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (26:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3118:38): [True: 245, False: 0]
  ------------------
 3119|       |        // We can only change frozensets if they are uniquely referenced. The
 3120|       |        // API limits the usage of `PySet_Add` to "fill in the values of brand
 3121|       |        // new frozensets before they are exposed to other code". In this case,
 3122|       |        // this can be done without a lock.
 3123|       |        // Since another key is added to the set, we must track the frozenset
 3124|       |        // if needed.
 3125|    245|        if (PyFrozenSet_CheckExact(anyset) && !PyObject_GC_IsTracked(anyset) && PyObject_GC_IsTracked(key)) {
  ------------------
  |  |   23|    245|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|    490|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    245|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    245|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 245, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3125:47): [True: 245, False: 0]
  |  Branch (3125:81): [True: 0, False: 245]
  ------------------
 3126|      0|            _PyObject_GC_TRACK(anyset);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3127|      0|        }
 3128|    245|        return set_add_key((PySetObject *)anyset, key);
 3129|    245|    }
 3130|       |
 3131|      0|    PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3132|      0|    return -1;
 3133|    245|}
_PySet_NextEntry:
 3137|  29.6k|{
 3138|  29.6k|    setentry *entry;
 3139|       |
 3140|  29.6k|    if (!PyAnySet_Check(set)) {
  ------------------
  |  |   31|  29.6k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  59.2k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  29.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  29.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 29.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  59.2k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  29.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  29.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 29.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|  29.6k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|  29.6k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3141|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3142|      0|        return -1;
 3143|      0|    }
 3144|  29.6k|    if (set_next((PySetObject *)set, pos, &entry) == 0)
  ------------------
  |  Branch (3144:9): [True: 5.46k, False: 24.1k]
  ------------------
 3145|  5.46k|        return 0;
 3146|  24.1k|    *key = entry->key;
 3147|  24.1k|    *hash = entry->hash;
 3148|  24.1k|    return 1;
 3149|  29.6k|}
_PySet_NextEntryRef:
 3153|   164k|{
 3154|   164k|    setentry *entry;
 3155|       |
 3156|   164k|    if (!PyAnySet_Check(set)) {
  ------------------
  |  |   31|   164k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   329k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   164k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   164k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 164k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   164k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|   164k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|   164k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3157|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3158|      0|        return -1;
 3159|      0|    }
 3160|   164k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(set);
 3161|   164k|    if (set_next((PySetObject *)set, pos, &entry) == 0)
  ------------------
  |  Branch (3161:9): [True: 20.8k, False: 143k]
  ------------------
 3162|  20.8k|        return 0;
 3163|   143k|    *key = Py_NewRef(entry->key);
  ------------------
  |  |  550|   143k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   143k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   143k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3164|   143k|    *hash = entry->hash;
 3165|   143k|    return 1;
 3166|   164k|}
setobject.c:set_add_entry_takeref:
  254|   543k|{
  255|   543k|    setentry *table;
  256|   543k|    setentry *freeslot;
  257|   543k|    setentry *entry;
  258|   543k|    size_t perturb;
  259|   543k|    size_t mask;
  260|   543k|    size_t i;                       /* Unsigned for defined overflow behavior */
  261|   543k|    int probes;
  262|   543k|    int cmp;
  263|       |
  264|   543k|  restart:
  265|       |
  266|   543k|    mask = so->mask;
  267|   543k|    i = (size_t)hash & mask;
  268|   543k|    freeslot = NULL;
  269|   543k|    perturb = hash;
  270|       |
  271|   755k|    while (1) {
  ------------------
  |  Branch (271:12): [True: 755k, Folded]
  ------------------
  272|   755k|        entry = &so->table[i];
  273|   755k|        probes = (i + LINEAR_PROBES <= mask) ? LINEAR_PROBES: 0;
  ------------------
  |  |  214|   755k|#define LINEAR_PROBES 9
  ------------------
                      probes = (i + LINEAR_PROBES <= mask) ? LINEAR_PROBES: 0;
  ------------------
  |  |  214|   234k|#define LINEAR_PROBES 9
  ------------------
  |  Branch (273:18): [True: 234k, False: 520k]
  ------------------
  274|   844k|        do {
  275|   844k|            if (entry->hash == 0 && entry->key == NULL)
  ------------------
  |  Branch (275:17): [True: 467k, False: 377k]
  |  Branch (275:37): [True: 467k, False: 614]
  ------------------
  276|   467k|                goto found_unused_or_dummy;
  277|   377k|            if (entry->hash == hash) {
  ------------------
  |  Branch (277:17): [True: 182k, False: 195k]
  ------------------
  278|   182k|                PyObject *startkey = entry->key;
  279|   182k|                assert(startkey != dummy);
  ------------------
  |  Branch (279:17): [True: 182k, False: 0]
  ------------------
  280|   182k|                if (startkey == key)
  ------------------
  |  Branch (280:21): [True: 17.7k, False: 164k]
  ------------------
  281|  17.7k|                    goto found_active;
  282|   164k|                if (PyUnicode_CheckExact(startkey)
  ------------------
  |  |  104|   164k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   329k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   164k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   164k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 57.9k, False: 106k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|   164k|                    && PyUnicode_CheckExact(key)
  ------------------
  |  |  104|  57.9k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   222k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  57.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  57.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 57.9k, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  57.9k|                    && unicode_eq(startkey, key))
  ------------------
  |  Branch (284:24): [True: 57.9k, False: 0]
  ------------------
  285|  57.9k|                    goto found_active;
  286|   106k|                table = so->table;
  287|   106k|                Py_INCREF(startkey);
  ------------------
  |  |  310|   106k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|   106k|                cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
  ------------------
  |  |  654|   106k|#define Py_EQ 2
  ------------------
  289|   106k|                Py_DECREF(startkey);
  ------------------
  |  |  430|   106k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   106k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   106k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|   106k|                if (cmp > 0)
  ------------------
  |  Branch (290:21): [True: 247, False: 106k]
  ------------------
  291|    247|                    goto found_active;
  292|   106k|                if (cmp < 0)
  ------------------
  |  Branch (292:21): [True: 0, False: 106k]
  ------------------
  293|      0|                    goto comparison_error;
  294|   106k|                if (table != so->table || entry->key != startkey)
  ------------------
  |  Branch (294:21): [True: 0, False: 106k]
  |  Branch (294:43): [True: 0, False: 106k]
  ------------------
  295|      0|                    goto restart;
  296|   106k|                mask = so->mask;
  297|   106k|            }
  298|   195k|            else if (entry->hash == -1) {
  ------------------
  |  Branch (298:22): [True: 160, False: 194k]
  ------------------
  299|    160|                assert (entry->key == dummy);
  ------------------
  |  Branch (299:17): [True: 160, False: 0]
  ------------------
  300|    160|                freeslot = entry;
  301|    160|            }
  302|   301k|            entry++;
  303|   301k|        } while (probes--);
  ------------------
  |  Branch (303:18): [True: 89.7k, False: 212k]
  ------------------
  304|   212k|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  218|   212k|#define PERTURB_SHIFT 5
  ------------------
  305|   212k|        i = (i * 5 + 1 + perturb) & mask;
  306|   212k|    }
  307|       |
  308|   467k|  found_unused_or_dummy:
  309|   467k|    if (freeslot == NULL)
  ------------------
  |  Branch (309:9): [True: 466k, False: 133]
  ------------------
  310|   466k|        goto found_unused;
  311|    133|    if (freeslot->hash != -1) {
  ------------------
  |  Branch (311:9): [True: 0, False: 133]
  ------------------
  312|      0|        goto restart;
  313|      0|    }
  314|    133|    FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used + 1);
  ------------------
  |  |  194|    133|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  315|    133|    FT_ATOMIC_STORE_SSIZE_RELAXED(freeslot->hash, hash);
  ------------------
  |  |  194|    133|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  316|    133|    FT_ATOMIC_STORE_PTR_RELEASE(freeslot->key, key);
  ------------------
  |  |  164|    133|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  317|    133|    return 0;
  318|       |
  319|   466k|  found_unused:
  320|   466k|    so->fill++;
  321|   466k|    FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used + 1);
  ------------------
  |  |  194|   466k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  322|   466k|    FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, hash);
  ------------------
  |  |  194|   466k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  323|   466k|    FT_ATOMIC_STORE_PTR_RELEASE(entry->key, key);
  ------------------
  |  |  164|   466k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  324|   466k|    if ((size_t)so->fill*5 < mask*3)
  ------------------
  |  Branch (324:9): [True: 445k, False: 21.2k]
  ------------------
  325|   445k|        return 0;
  326|  21.2k|    return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
  ------------------
  |  Branch (326:33): [True: 0, False: 21.2k]
  ------------------
  327|       |
  328|  75.9k|  found_active:
  329|  75.9k|    Py_DECREF(key);
  ------------------
  |  |  430|  75.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  75.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  75.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  75.9k|    return 0;
  331|       |
  332|      0|  comparison_error:
  333|      0|    Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|      0|    return -1;
  335|   466k|}
setobject.c:set_table_resize:
  485|  37.1k|{
  486|  37.1k|    setentry *oldtable, *newtable, *entry;
  487|  37.1k|    Py_ssize_t oldmask = so->mask;
  488|  37.1k|    Py_ssize_t oldsize = (size_t)oldmask + 1;
  489|  37.1k|    size_t newmask;
  490|  37.1k|    int is_oldtable_malloced;
  491|  37.1k|    setentry small_copy[PySet_MINSIZE];
  492|       |
  493|  37.1k|    assert(minused >= 0);
  ------------------
  |  Branch (493:5): [True: 37.1k, False: 0]
  ------------------
  494|       |
  495|       |    /* Find the smallest table size > minused. */
  496|       |    /* XXX speed-up with intrinsics */
  497|  37.1k|    size_t newsize = PySet_MINSIZE;
  ------------------
  |  |   18|  37.1k|#define PySet_MINSIZE 8
  ------------------
  498|   118k|    while (newsize <= (size_t)minused) {
  ------------------
  |  Branch (498:12): [True: 80.8k, False: 37.1k]
  ------------------
  499|  80.8k|        newsize <<= 1; // The largest possible value is PY_SSIZE_T_MAX + 1.
  500|  80.8k|    }
  501|       |
  502|       |    /* Get space for a new table. */
  503|  37.1k|    oldtable = so->table;
  504|  37.1k|    assert(oldtable != NULL);
  ------------------
  |  Branch (504:5): [True: 37.1k, False: 0]
  ------------------
  505|  37.1k|    is_oldtable_malloced = oldtable != so->smalltable;
  506|       |
  507|  37.1k|    if (newsize == PySet_MINSIZE) {
  ------------------
  |  |   18|  37.1k|#define PySet_MINSIZE 8
  ------------------
  |  Branch (507:9): [True: 152, False: 37.0k]
  ------------------
  508|       |        /* A large table is shrinking, or we can't get any smaller. */
  509|    152|        newtable = so->smalltable;
  510|    152|        if (newtable == oldtable) {
  ------------------
  |  Branch (510:13): [True: 152, False: 0]
  ------------------
  511|    152|            if (so->fill == so->used) {
  ------------------
  |  Branch (511:17): [True: 0, False: 152]
  ------------------
  512|       |                /* No dummies, so no point doing anything. */
  513|      0|                return 0;
  514|      0|            }
  515|       |            /* We're not going to resize it, but rebuild the
  516|       |               table anyway to purge old dummy entries.
  517|       |               Subtle:  This is *necessary* if fill==size,
  518|       |               as set_lookkey needs at least one virgin slot to
  519|       |               terminate failing searches.  If fill < size, it's
  520|       |               merely desirable, as dummies slow searches. */
  521|    152|            assert(so->fill > so->used);
  ------------------
  |  Branch (521:13): [True: 152, False: 0]
  ------------------
  522|    152|            memcpy(small_copy, oldtable, sizeof(small_copy));
  523|    152|            oldtable = small_copy;
  524|    152|        }
  525|    152|    }
  526|  37.0k|    else {
  527|  37.0k|        newtable = PyMem_NEW(setentry, newsize);
  ------------------
  |  |   82|  37.0k|#define PyMem_NEW(type, n)        PyMem_New(type, (n))
  |  |  ------------------
  |  |  |  |   64|  37.0k|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|  37.0k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:5): [True: 0, False: 37.0k]
  |  |  |  |  ------------------
  |  |  |  |   65|  37.0k|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  |  |  ------------------
  ------------------
  528|  37.0k|        if (newtable == NULL) {
  ------------------
  |  Branch (528:13): [True: 0, False: 37.0k]
  ------------------
  529|      0|            PyErr_NoMemory();
  530|      0|            return -1;
  531|      0|        }
  532|  37.0k|    }
  533|       |
  534|       |    /* Make the set empty, using the new table. */
  535|  37.1k|    assert(newtable != oldtable);
  ------------------
  |  Branch (535:5): [True: 37.1k, False: 0]
  ------------------
  536|  37.1k|    set_zero_table(newtable, newsize);
  537|  37.1k|    FT_ATOMIC_STORE_PTR_RELEASE(so->table, NULL);
  ------------------
  |  |  164|  37.1k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  538|  37.1k|    FT_ATOMIC_STORE_SSIZE_RELEASE(so->mask, newsize - 1);
  ------------------
  |  |  169|  37.1k|#define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) value = new_value
  ------------------
  539|       |
  540|       |    /* Copy the data over; this is refcount-neutral for active entries;
  541|       |       dummy entries aren't copied over, of course */
  542|  37.1k|    newmask = (size_t)so->mask;
  543|  37.1k|    if (so->fill == so->used) {
  ------------------
  |  Branch (543:9): [True: 36.9k, False: 203]
  ------------------
  544|   421k|        for (entry = oldtable; entry <= oldtable + oldmask; entry++) {
  ------------------
  |  Branch (544:32): [True: 384k, False: 36.9k]
  ------------------
  545|   384k|            if (entry->key != NULL) {
  ------------------
  |  Branch (545:17): [True: 166k, False: 218k]
  ------------------
  546|   166k|                set_insert_clean(newtable, newmask, entry->key, entry->hash);
  547|   166k|            }
  548|   384k|        }
  549|  36.9k|    } else {
  550|    203|        so->fill = so->used;
  551|  1.82k|        for (entry = oldtable; entry <= oldtable + oldmask; entry++) {
  ------------------
  |  Branch (551:32): [True: 1.62k, False: 203]
  ------------------
  552|  1.62k|            if (entry->key != NULL && entry->key != dummy) {
  ------------------
  |  |   64|    629|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (552:17): [True: 629, False: 995]
  |  Branch (552:39): [True: 147, False: 482]
  ------------------
  553|    147|                set_insert_clean(newtable, newmask, entry->key, entry->hash);
  554|    147|            }
  555|  1.62k|        }
  556|    203|    }
  557|       |
  558|  37.1k|    FT_ATOMIC_STORE_PTR_RELEASE(so->table, newtable);
  ------------------
  |  |  164|  37.1k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  559|       |
  560|  37.1k|    if (is_oldtable_malloced)
  ------------------
  |  Branch (560:9): [True: 3.37k, False: 33.7k]
  ------------------
  561|  3.37k|        free_entries(oldtable, oldsize, SET_IS_SHARED(so));
  ------------------
  |  |  132|  3.37k|#define SET_IS_SHARED(so) 0
  ------------------
  562|  37.1k|    return 0;
  563|  37.1k|}
setobject.c:set_zero_table:
  197|  37.2k|{
  198|       |#ifdef Py_GIL_DISABLED
  199|       |    for (size_t i = 0; i < size; i++) {
  200|       |        setentry *entry = &table[i];
  201|       |        FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, 0);
  202|       |        FT_ATOMIC_STORE_PTR_RELEASE(entry->key, NULL);
  203|       |    }
  204|       |#else
  205|  37.2k|    memset(table, 0, sizeof(setentry)*size);
  206|  37.2k|#endif
  207|  37.2k|}
setobject.c:set_insert_clean:
  385|   216k|{
  386|   216k|    setentry *entry;
  387|   216k|    size_t perturb = hash;
  388|   216k|    size_t i = (size_t)hash & mask;
  389|   216k|    size_t j;
  390|       |
  391|   262k|    while (1) {
  ------------------
  |  Branch (391:12): [True: 262k, Folded]
  ------------------
  392|   262k|        entry = &table[i];
  393|   262k|        if (entry->key == NULL)
  ------------------
  |  Branch (393:13): [True: 203k, False: 58.9k]
  ------------------
  394|   203k|            goto found_null;
  395|  58.9k|        if (i + LINEAR_PROBES <= mask) {
  ------------------
  |  |  214|  58.9k|#define LINEAR_PROBES 9
  ------------------
  |  Branch (395:13): [True: 13.3k, False: 45.5k]
  ------------------
  396|  17.2k|            for (j = 0; j < LINEAR_PROBES; j++) {
  ------------------
  |  |  214|  17.2k|#define LINEAR_PROBES 9
  ------------------
  |  Branch (396:25): [True: 17.2k, False: 0]
  ------------------
  397|  17.2k|                entry++;
  398|  17.2k|                if (entry->key == NULL)
  ------------------
  |  Branch (398:21): [True: 13.3k, False: 3.85k]
  ------------------
  399|  13.3k|                    goto found_null;
  400|  17.2k|            }
  401|  13.3k|        }
  402|  45.5k|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  218|  45.5k|#define PERTURB_SHIFT 5
  ------------------
  403|  45.5k|        i = (i * 5 + 1 + perturb) & mask;
  404|  45.5k|    }
  405|   216k|  found_null:
  406|   216k|    FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, hash);
  ------------------
  |  |  194|   216k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  407|   216k|    FT_ATOMIC_STORE_PTR_RELEASE(entry->key, key);
  ------------------
  |  |  164|   216k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  408|   216k|}
setobject.c:free_entries:
  468|  36.9k|{
  469|       |#ifdef Py_GIL_DISABLED
  470|       |    if (use_qsbr) {
  471|       |        _PyMem_FreeDelayed(entries, size * sizeof(setentry));
  472|       |        return;
  473|       |    }
  474|       |#endif
  475|  36.9k|    PyMem_Free(entries);
  476|  36.9k|}
setobject.c:setiter_dealloc:
 1041|  56.5k|{
 1042|  56.5k|    setiterobject *si = (setiterobject*)self;
 1043|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
 1044|  56.5k|    _PyObject_GC_UNTRACK(si);
  ------------------
  |  |  507|  56.5k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1045|  56.5k|    Py_XDECREF(si->si_set);
  ------------------
  |  |  524|  56.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1046|  56.5k|    PyObject_GC_Del(si);
 1047|  56.5k|}
setobject.c:setiter_iternext:
 1096|  66.0k|{
 1097|  66.0k|    setiterobject *si = (setiterobject*)self;
 1098|  66.0k|    PyObject *key = NULL;
 1099|  66.0k|    Py_ssize_t i, mask;
 1100|  66.0k|    setentry *entry;
 1101|  66.0k|    PySetObject *so = si->si_set;
 1102|       |
 1103|  66.0k|    if (so == NULL)
  ------------------
  |  Branch (1103:9): [True: 0, False: 66.0k]
  ------------------
 1104|      0|        return NULL;
 1105|  66.0k|    assert (PyAnySet_Check(so));
  ------------------
  |  Branch (1105:5): [True: 59.3k, False: 6.69k]
  |  Branch (1105:5): [True: 6.69k, False: 0]
  |  Branch (1105:5): [True: 0, False: 0]
  |  Branch (1105:5): [True: 0, False: 0]
  ------------------
 1106|       |
 1107|  66.0k|    Py_ssize_t so_used = FT_ATOMIC_LOAD_SSIZE_RELAXED(so->used);
  ------------------
  |  |  149|  66.0k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 1108|  66.0k|    Py_ssize_t si_used = FT_ATOMIC_LOAD_SSIZE_RELAXED(si->si_used);
  ------------------
  |  |  149|  66.0k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 1109|  66.0k|    if (si_used != so_used) {
  ------------------
  |  Branch (1109:9): [True: 0, False: 66.0k]
  ------------------
 1110|      0|        PyErr_SetString(PyExc_RuntimeError,
 1111|      0|                        "Set changed size during iteration");
 1112|      0|        si->si_used = -1; /* Make this state sticky */
 1113|      0|        return NULL;
 1114|      0|    }
 1115|       |
 1116|  66.0k|    Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|  66.0k|    {
  ------------------
 1117|  66.0k|    i = si->si_pos;
 1118|  66.0k|    assert(i>=0);
  ------------------
  |  Branch (1118:5): [True: 66.0k, False: 0]
  ------------------
 1119|  66.0k|    entry = so->table;
 1120|  66.0k|    mask = so->mask;
 1121|   523k|    while (i <= mask && (entry[i].key == NULL || entry[i].key == dummy)) {
  ------------------
  |  |   64|  17.4k|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (1121:12): [True: 467k, False: 56.5k]
  |  Branch (1121:26): [True: 450k, False: 17.4k]
  |  Branch (1121:50): [True: 7.89k, False: 9.53k]
  ------------------
 1122|   457k|        i++;
 1123|   457k|    }
 1124|  66.0k|    if (i <= mask) {
  ------------------
  |  Branch (1124:9): [True: 9.53k, False: 56.5k]
  ------------------
 1125|  9.53k|        key = Py_NewRef(entry[i].key);
  ------------------
  |  |  550|  9.53k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  9.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1126|  9.53k|    }
 1127|  66.0k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  66.0k|    }
  ------------------
 1128|  66.0k|    si->si_pos = i+1;
 1129|  66.0k|    if (key == NULL) {
  ------------------
  |  Branch (1129:9): [True: 56.5k, False: 9.53k]
  ------------------
 1130|  56.5k|        si->si_set = NULL;
 1131|  56.5k|        Py_DECREF(so);
  ------------------
  |  |  430|  56.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1132|  56.5k|        return NULL;
 1133|  56.5k|    }
 1134|  9.53k|    si->len--;
 1135|  9.53k|    return key;
 1136|  66.0k|}
setobject.c:frozenset_hash_impl:
  974|  9.73k|{
  975|  9.73k|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|  9.73k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  9.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (975:23): [True: 0, False: 9.73k]
  |  Branch (975:23): [True: 9.73k, False: 0]
  |  Branch (975:23): [True: 0, False: 0]
  |  Branch (975:23): [True: 0, False: 0]
  ------------------
  976|      0|    Py_uhash_t hash = 0;
  977|  9.73k|    setentry *entry;
  978|       |
  979|       |    /* Xor-in shuffled bits from every entry's hash field because xor is
  980|       |       commutative and a frozenset hash should be independent of order.
  981|       |
  982|       |       For speed, include null entries and dummy entries and then
  983|       |       subtract out their effect afterwards so that the final hash
  984|       |       depends only on active entries.  This allows the code to be
  985|       |       vectorized by the compiler and it saves the unpredictable
  986|       |       branches that would arise when trying to exclude null and dummy
  987|       |       entries on every iteration. */
  988|       |
  989|   189k|    for (entry = so->table; entry <= &so->table[so->mask]; entry++)
  ------------------
  |  Branch (989:29): [True: 179k, False: 9.73k]
  ------------------
  990|   179k|        hash ^= _shuffle_bits(entry->hash);
  991|       |
  992|       |    /* Remove the effect of an odd number of NULL entries */
  993|  9.73k|    if ((so->mask + 1 - so->fill) & 1)
  ------------------
  |  Branch (993:9): [True: 4.21k, False: 5.51k]
  ------------------
  994|  4.21k|        hash ^= _shuffle_bits(0);
  995|       |
  996|       |    /* Remove the effect of an odd number of dummy entries */
  997|  9.73k|    if ((so->fill - so->used) & 1)
  ------------------
  |  Branch (997:9): [True: 0, False: 9.73k]
  ------------------
  998|      0|        hash ^= _shuffle_bits(-1);
  999|       |
 1000|       |    /* Factor in the number of active entries */
 1001|  9.73k|    hash ^= ((Py_uhash_t)PySet_GET_SIZE(self) + 1) * 1927868237UL;
  ------------------
  |  |   71|  9.73k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  9.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|       |
 1003|       |    /* Disperse patterns arising in nested frozensets */
 1004|  9.73k|    hash ^= (hash >> 11) ^ (hash >> 25);
 1005|  9.73k|    hash = hash * 69069U + 907133923UL;
 1006|       |
 1007|       |    /* -1 is reserved as an error code */
 1008|  9.73k|    if (hash == (Py_uhash_t)-1)
  ------------------
  |  Branch (1008:9): [True: 0, False: 9.73k]
  ------------------
 1009|      0|        hash = 590923713UL;
 1010|       |
 1011|  9.73k|    return (Py_hash_t)hash;
 1012|  9.73k|}
setobject.c:_shuffle_bits:
  955|   183k|{
  956|   183k|    return ((h ^ 89869747UL) ^ (h << 16)) * 3644798167UL;
  957|   183k|}
setobject.c:set_contains_entry:
  567|  2.02M|{
  568|       |#ifdef Py_GIL_DISABLED
  569|       |    return set_lookkey_threadsafe(so, key, hash);
  570|       |#else
  571|  2.02M|    setentry *entry; // unused
  572|  2.02M|    return set_lookkey(so, key, hash, &entry);
  573|  2.02M|#endif
  574|  2.02M|}
setobject.c:set_lookkey:
  415|  2.30M|{
  416|  2.30M|    int status;
  417|  2.30M|    if (PyFrozenSet_CheckExact(so)) {
  ------------------
  |  |   23|  2.30M|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|  2.30M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.30M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.30M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 28.2k, False: 2.27M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|  28.2k|        status = set_do_lookup(so, so->table, so->mask, key, hash, epp,
  419|  28.2k|                               set_compare_frozenset);
  420|  28.2k|    }
  421|  2.27M|    else {
  422|  2.27M|        Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|  2.27M|    {
  ------------------
  423|  2.27M|        do {
  424|  2.27M|            status = set_do_lookup(so, so->table, so->mask, key, hash, epp,
  425|  2.27M|                                   set_compare_entry_lock_held);
  426|  2.27M|        } while (status == SET_LOOKKEY_CHANGED);
  ------------------
  |  |   69|  2.27M|#define SET_LOOKKEY_CHANGED (-2)
  ------------------
  |  Branch (426:18): [True: 0, False: 2.27M]
  ------------------
  427|  2.27M|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  2.27M|    }
  ------------------
  428|  2.27M|    }
  429|  2.30M|    assert(status == SET_LOOKKEY_FOUND ||
  ------------------
  |  Branch (429:5): [True: 64.5k, False: 2.24M]
  |  Branch (429:5): [True: 2.24M, False: 0]
  |  Branch (429:5): [True: 0, False: 0]
  ------------------
  430|  2.30M|           status == SET_LOOKKEY_NO_MATCH ||
  431|  2.30M|           status == SET_LOOKKEY_ERROR);
  432|  2.30M|    return status;
  433|  2.30M|}
setobject.c:set_do_lookup:
  223|  2.30M|{
  224|  2.30M|    setentry *entry;
  225|  2.30M|    size_t perturb = hash;
  226|  2.30M|    size_t i = (size_t)hash & mask; /* Unsigned for defined overflow behavior */
  227|  2.30M|    int probes;
  228|  2.30M|    int status;
  229|       |
  230|  2.71M|    while (1) {
  ------------------
  |  Branch (230:12): [True: 2.71M, Folded]
  ------------------
  231|  2.71M|        entry = &table[i];
  232|  2.71M|        probes = (i + LINEAR_PROBES <= mask) ? LINEAR_PROBES: 0;
  ------------------
  |  |  214|  2.71M|#define LINEAR_PROBES 9
  ------------------
                      probes = (i + LINEAR_PROBES <= mask) ? LINEAR_PROBES: 0;
  ------------------
  |  |  214|  1.60M|#define LINEAR_PROBES 9
  ------------------
  |  Branch (232:18): [True: 1.60M, False: 1.11M]
  ------------------
  233|  5.55M|        do {
  234|  5.55M|            status = compare_entry(so, table, entry, key, hash);
  235|  5.55M|            if (status != SET_LOOKKEY_NO_MATCH) {
  ------------------
  |  |   67|  5.55M|#define SET_LOOKKEY_NO_MATCH 0
  ------------------
  |  Branch (235:17): [True: 2.30M, False: 3.24M]
  ------------------
  236|  2.30M|                if (status == SET_LOOKKEY_EMPTY) {
  ------------------
  |  |   70|  2.30M|#define SET_LOOKKEY_EMPTY (-3)
  ------------------
  |  Branch (236:21): [True: 2.24M, False: 64.5k]
  ------------------
  237|  2.24M|                    return SET_LOOKKEY_NO_MATCH;
  ------------------
  |  |   67|  2.24M|#define SET_LOOKKEY_NO_MATCH 0
  ------------------
  238|  2.24M|                }
  239|  64.5k|                *epp = entry;
  240|  64.5k|                return status;
  241|  2.30M|            }
  242|  3.24M|            entry++;
  243|  3.24M|        } while (probes--);
  ------------------
  |  Branch (243:18): [True: 2.84M, False: 407k]
  ------------------
  244|   407k|        perturb >>= PERTURB_SHIFT;
  ------------------
  |  |  218|   407k|#define PERTURB_SHIFT 5
  ------------------
  245|   407k|        i = (i * 5 + 1 + perturb) & mask;
  246|   407k|    }
  247|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  248|  2.30M|}
setobject.c:set_compare_frozenset:
  174|   107k|{
  175|   107k|    assert(PyFrozenSet_Check(so));
  ------------------
  |  Branch (175:5): [True: 107k, False: 0]
  |  Branch (175:5): [True: 0, False: 0]
  ------------------
  176|   107k|    PyObject *startkey = ep->key;
  177|   107k|    if (startkey == NULL) {
  ------------------
  |  Branch (177:9): [True: 318, False: 107k]
  ------------------
  178|    318|        return SET_LOOKKEY_EMPTY;
  ------------------
  |  |   70|    318|#define SET_LOOKKEY_EMPTY (-3)
  ------------------
  179|    318|    }
  180|   107k|    if (startkey == key) {
  ------------------
  |  Branch (180:9): [True: 24.3k, False: 83.2k]
  ------------------
  181|  24.3k|        return SET_LOOKKEY_FOUND;
  ------------------
  |  |   66|  24.3k|#define SET_LOOKKEY_FOUND 1
  ------------------
  182|  24.3k|    }
  183|  83.2k|    Py_ssize_t ep_hash = ep->hash;
  184|  83.2k|    if (ep_hash == hash) {
  ------------------
  |  Branch (184:9): [True: 78.4k, False: 4.82k]
  ------------------
  185|  78.4k|        int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
  ------------------
  |  |  654|  78.4k|#define Py_EQ 2
  ------------------
  186|  78.4k|        if (cmp < 0) {
  ------------------
  |  Branch (186:13): [True: 0, False: 78.4k]
  ------------------
  187|      0|            return SET_LOOKKEY_ERROR;
  ------------------
  |  |   68|      0|#define SET_LOOKKEY_ERROR (-1)
  ------------------
  188|      0|        }
  189|  78.4k|        assert(cmp == SET_LOOKKEY_FOUND || cmp == SET_LOOKKEY_NO_MATCH);
  ------------------
  |  Branch (189:9): [True: 3.52k, False: 74.9k]
  |  Branch (189:9): [True: 74.9k, False: 0]
  ------------------
  190|  78.4k|        return cmp;
  191|  78.4k|    }
  192|  4.82k|    return SET_LOOKKEY_NO_MATCH;
  ------------------
  |  |   67|  4.82k|#define SET_LOOKKEY_NO_MATCH 0
  ------------------
  193|  83.2k|}
setobject.c:set_compare_entry_lock_held:
  140|  5.44M|{
  141|  5.44M|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
  142|  5.44M|    if (entry->hash == 0 && entry->key == NULL)
  ------------------
  |  Branch (142:9): [True: 2.24M, False: 3.20M]
  |  Branch (142:29): [True: 2.24M, False: 9]
  ------------------
  143|  2.24M|        return SET_LOOKKEY_EMPTY;
  ------------------
  |  |   70|  2.24M|#define SET_LOOKKEY_EMPTY (-3)
  ------------------
  144|  3.20M|    if (entry->hash == hash) {
  ------------------
  |  Branch (144:9): [True: 36.6k, False: 3.16M]
  ------------------
  145|  36.6k|        PyObject *startkey = entry->key;
  146|  36.6k|        assert(startkey != dummy);
  ------------------
  |  Branch (146:9): [True: 36.6k, False: 0]
  ------------------
  147|  36.6k|        if (startkey == key)
  ------------------
  |  Branch (147:13): [True: 36.5k, False: 161]
  ------------------
  148|  36.5k|            return SET_LOOKKEY_FOUND;
  ------------------
  |  |   66|  36.5k|#define SET_LOOKKEY_FOUND 1
  ------------------
  149|    161|        if (PyUnicode_CheckExact(startkey)
  ------------------
  |  |  104|    161|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    322|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    161|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    161|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 105, False: 56]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|    161|            && PyUnicode_CheckExact(key)
  ------------------
  |  |  104|    105|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    266|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    105|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    105|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 105, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  151|    105|            && unicode_eq(startkey, key))
  ------------------
  |  Branch (151:16): [True: 105, False: 0]
  ------------------
  152|    105|            return SET_LOOKKEY_FOUND;
  ------------------
  |  |   66|    105|#define SET_LOOKKEY_FOUND 1
  ------------------
  153|     56|        table = so->table;
  154|     56|        Py_INCREF(startkey);
  ------------------
  |  |  310|     56|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     56|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     56|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|     56|        int cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
  ------------------
  |  |  654|     56|#define Py_EQ 2
  ------------------
  156|     56|        Py_DECREF(startkey);
  ------------------
  |  |  430|     56|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     56|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     56|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|     56|        if (cmp < 0)
  ------------------
  |  Branch (157:13): [True: 0, False: 56]
  ------------------
  158|      0|            return SET_LOOKKEY_ERROR;
  ------------------
  |  |   68|      0|#define SET_LOOKKEY_ERROR (-1)
  ------------------
  159|     56|        if (table != so->table || entry->key != startkey)
  ------------------
  |  Branch (159:13): [True: 0, False: 56]
  |  Branch (159:35): [True: 0, False: 56]
  ------------------
  160|      0|            return SET_LOOKKEY_CHANGED;
  ------------------
  |  |   69|      0|#define SET_LOOKKEY_CHANGED (-2)
  ------------------
  161|     56|        if (cmp > 0)
  ------------------
  |  Branch (161:13): [True: 56, False: 0]
  ------------------
  162|     56|            return SET_LOOKKEY_FOUND;
  ------------------
  |  |   66|     56|#define SET_LOOKKEY_FOUND 1
  ------------------
  163|     56|    }
  164|  3.16M|    return SET_LOOKKEY_NO_MATCH;
  ------------------
  |  |   67|  3.16M|#define SET_LOOKKEY_NO_MATCH 0
  ------------------
  165|  3.20M|}
setobject.c:set_dealloc:
  735|   603k|{
  736|   603k|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|   603k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|   603k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (736:23): [True: 593k, False: 9.76k]
  |  Branch (736:23): [True: 9.76k, False: 0]
  |  Branch (736:23): [True: 0, False: 0]
  |  Branch (736:23): [True: 0, False: 0]
  ------------------
  737|      0|    setentry *entry;
  738|   603k|    Py_ssize_t used = so->used;
  739|   603k|    Py_ssize_t oldsize = (size_t)so->mask + 1;
  740|       |
  741|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
  742|   603k|    PyObject_GC_UnTrack(so);
  743|   603k|    FT_CLEAR_WEAKREFS(self, so->weakreflist);
  ------------------
  |  |   47|   603k|    do {                                            \
  |  |   48|   603k|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|   603k|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 603k]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|   603k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 603k]
  |  |  ------------------
  ------------------
  |  Branch (743:5): [True: 603k, False: 0]
  ------------------
  744|       |
  745|  2.86M|    for (entry = so->table; used > 0; entry++) {
  ------------------
  |  Branch (745:29): [True: 2.26M, False: 603k]
  ------------------
  746|  2.26M|        if (entry->key && entry->key != dummy) {
  ------------------
  |  |   64|   719k|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (746:13): [True: 719k, False: 1.54M]
  |  Branch (746:27): [True: 719k, False: 82]
  ------------------
  747|   719k|                used--;
  748|   719k|                Py_DECREF(entry->key);
  ------------------
  |  |  430|   719k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   719k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   719k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|   719k|        }
  750|  2.26M|    }
  751|   603k|    if (so->table != so->smalltable)
  ------------------
  |  Branch (751:9): [True: 33.5k, False: 569k]
  ------------------
  752|  33.5k|        free_entries(so->table, oldsize, SET_IS_SHARED(so));
  ------------------
  |  |  132|  33.5k|#define SET_IS_SHARED(so) 0
  ------------------
  753|   603k|    Py_TYPE(so)->tp_free(so);
  ------------------
  |  |  213|   603k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   603k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   603k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  754|   603k|}
setobject.c:set_copy_untracked_lock_held:
 1582|    304|{
 1583|    304|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
 1584|    304|    PyObject *copy = make_new_set_basetype_untracked(Py_TYPE(so), NULL);
  ------------------
  |  |  213|    304|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    304|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    304|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1585|    304|    if (copy == NULL) {
  ------------------
  |  Branch (1585:9): [True: 0, False: 304]
  ------------------
 1586|      0|        return NULL;
 1587|      0|    }
 1588|    304|    if (set_merge_lock_held((PySetObject *)copy, (PyObject *)so) < 0) {
  ------------------
  |  Branch (1588:9): [True: 0, False: 304]
  ------------------
 1589|      0|        Py_DECREF(copy);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1590|      0|        return NULL;
 1591|      0|    }
 1592|    304|    return copy;
 1593|    304|}
setobject.c:set_merge_lock_held:
  830|   407k|{
  831|   407k|    PySetObject *other;
  832|   407k|    PyObject *key;
  833|   407k|    Py_ssize_t i;
  834|   407k|    setentry *so_entry;
  835|   407k|    setentry *other_entry;
  836|       |
  837|   407k|    assert (PyAnySet_Check(so));
  ------------------
  |  Branch (837:5): [True: 407k, False: 72]
  |  Branch (837:5): [True: 72, False: 0]
  |  Branch (837:5): [True: 0, False: 0]
  |  Branch (837:5): [True: 0, False: 0]
  ------------------
  838|   407k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
  839|   407k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(otherset);
  840|       |
  841|   407k|    other = _PySet_CAST(otherset);
  ------------------
  |  |   62|   407k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|   407k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (841:13): [True: 407k, False: 0]
  |  Branch (841:13): [True: 0, False: 0]
  |  Branch (841:13): [True: 0, False: 0]
  |  Branch (841:13): [True: 0, False: 0]
  ------------------
  842|   407k|    if (other == so || other->used == 0)
  ------------------
  |  Branch (842:9): [True: 0, False: 407k]
  |  Branch (842:24): [True: 313k, False: 93.5k]
  ------------------
  843|       |        /* a.update(a) or a.update(set()); nothing to do */
  844|   313k|        return 0;
  845|       |    /* Do one big resize at the start, rather than
  846|       |     * incrementally resizing as we insert new keys.  Expect
  847|       |     * that there will be no (or few) overlapping keys.
  848|       |     */
  849|  93.5k|    if ((so->fill + other->used)*5 >= so->mask*3) {
  ------------------
  |  Branch (849:9): [True: 15.8k, False: 77.7k]
  ------------------
  850|  15.8k|        if (set_table_resize(so, (so->used + other->used)*2) != 0)
  ------------------
  |  Branch (850:13): [True: 0, False: 15.8k]
  ------------------
  851|      0|            return -1;
  852|  15.8k|    }
  853|  93.5k|    so_entry = so->table;
  854|  93.5k|    other_entry = other->table;
  855|       |
  856|       |    /* If our table is empty, and both tables have the same size, and
  857|       |       there are no dummies to eliminate, then just copy the pointers. */
  858|  93.5k|    if (so->fill == 0 && so->mask == other->mask && other->fill == other->used) {
  ------------------
  |  Branch (858:9): [True: 75.9k, False: 17.6k]
  |  Branch (858:26): [True: 71.9k, False: 3.91k]
  |  Branch (858:53): [True: 71.9k, False: 36]
  ------------------
  859|   893k|        for (i = 0; i <= other->mask; i++, so_entry++, other_entry++) {
  ------------------
  |  Branch (859:21): [True: 821k, False: 71.9k]
  ------------------
  860|   821k|            key = other_entry->key;
  861|   821k|            if (key != NULL) {
  ------------------
  |  Branch (861:17): [True: 213k, False: 608k]
  ------------------
  862|   213k|                assert(so_entry->key == NULL);
  ------------------
  |  Branch (862:17): [True: 213k, False: 0]
  ------------------
  863|   213k|                FT_ATOMIC_STORE_SSIZE_RELAXED(so_entry->hash, other_entry->hash);
  ------------------
  |  |  194|   213k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  864|   213k|                FT_ATOMIC_STORE_PTR_RELEASE(so_entry->key, Py_NewRef(key));
  ------------------
  |  |  164|   213k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  865|   213k|            }
  866|   821k|        }
  867|  71.9k|        so->fill = other->fill;
  868|  71.9k|        FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, other->used);
  ------------------
  |  |  194|  71.9k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  869|  71.9k|        return 0;
  870|  71.9k|    }
  871|       |
  872|       |    /* If our table is empty, we can use set_insert_clean() */
  873|  21.5k|    if (so->fill == 0) {
  ------------------
  |  Branch (873:9): [True: 3.95k, False: 17.6k]
  ------------------
  874|  3.95k|        setentry *newtable = so->table;
  875|  3.95k|        size_t newmask = (size_t)so->mask;
  876|  3.95k|        so->fill = other->used;
  877|  3.95k|        FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, other->used);
  ------------------
  |  |  194|  3.95k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  878|   214k|        for (i = other->mask + 1; i > 0 ; i--, other_entry++) {
  ------------------
  |  Branch (878:35): [True: 211k, False: 3.95k]
  ------------------
  879|   211k|            key = other_entry->key;
  880|   211k|            if (key != NULL && key != dummy) {
  ------------------
  |  |   64|  50.3k|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (880:17): [True: 50.3k, False: 160k]
  |  Branch (880:32): [True: 50.3k, False: 36]
  ------------------
  881|  50.3k|                set_insert_clean(newtable, newmask, Py_NewRef(key),
  ------------------
  |  |  550|  50.3k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  50.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  882|  50.3k|                                 other_entry->hash);
  883|  50.3k|            }
  884|   211k|        }
  885|  3.95k|        return 0;
  886|  3.95k|    }
  887|       |
  888|       |    /* We can't assure there are no duplicates, so do normal insertions */
  889|   308k|    for (i = 0; i <= other->mask; i++) {
  ------------------
  |  Branch (889:17): [True: 290k, False: 17.6k]
  ------------------
  890|   290k|        other_entry = &other->table[i];
  891|   290k|        key = other_entry->key;
  892|   290k|        if (key != NULL && key != dummy) {
  ------------------
  |  |   64|  99.2k|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (892:13): [True: 99.2k, False: 191k]
  |  Branch (892:28): [True: 99.1k, False: 80]
  ------------------
  893|  99.1k|            if (set_add_entry(so, key, other_entry->hash))
  ------------------
  |  Branch (893:17): [True: 0, False: 99.1k]
  ------------------
  894|      0|                return -1;
  895|  99.1k|        }
  896|   290k|    }
  897|  17.6k|    return 0;
  898|  17.6k|}
setobject.c:set_difference_update_internal:
 1982|    152|{
 1983|    152|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
 1984|    152|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(other);
 1985|       |
 1986|    152|    if ((PyObject *)so == other)
  ------------------
  |  Branch (1986:9): [True: 0, False: 152]
  ------------------
 1987|      0|        return set_clear_internal((PyObject*)so);
 1988|       |
 1989|    152|    if (PyAnySet_Check(other)) {
  ------------------
  |  |   31|    152|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    304|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 152, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    152|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|    152|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|    152|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1990|    152|        setentry *entry;
 1991|    152|        Py_ssize_t pos = 0;
 1992|       |
 1993|       |        /* Optimization:  When the other set is more than 8 times
 1994|       |           larger than the base set, replace the other set with
 1995|       |           intersection of the two sets.
 1996|       |        */
 1997|    152|        if ((PySet_GET_SIZE(other) >> 3) > PySet_GET_SIZE(so)) {
  ------------------
  |  |   71|    152|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if ((PySet_GET_SIZE(other) >> 3) > PySet_GET_SIZE(so)) {
  ------------------
  |  |   71|    152|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1997:13): [True: 0, False: 152]
  ------------------
 1998|      0|            other = set_intersection(so, other);
 1999|      0|            if (other == NULL)
  ------------------
  |  Branch (1999:17): [True: 0, False: 0]
  ------------------
 2000|      0|                return -1;
 2001|    152|        } else {
 2002|    152|            Py_INCREF(other);
  ------------------
  |  |  310|    152|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2003|    152|        }
 2004|       |
 2005|    526|        while (set_next((PySetObject *)other, &pos, &entry)) {
  ------------------
  |  Branch (2005:16): [True: 374, False: 152]
  ------------------
 2006|    374|            PyObject *key = entry->key;
 2007|    374|            Py_INCREF(key);
  ------------------
  |  |  310|    374|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    374|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    374|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2008|    374|            if (set_discard_entry(so, key, entry->hash) < 0) {
  ------------------
  |  Branch (2008:17): [True: 0, False: 374]
  ------------------
 2009|      0|                Py_DECREF(other);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2010|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2011|      0|                return -1;
 2012|      0|            }
 2013|    374|            Py_DECREF(key);
  ------------------
  |  |  430|    374|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    374|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    374|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2014|    374|        }
 2015|       |
 2016|    152|        Py_DECREF(other);
  ------------------
  |  |  430|    152|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2017|    152|    } else {
 2018|      0|        PyObject *key, *it;
 2019|      0|        it = PyObject_GetIter(other);
 2020|      0|        if (it == NULL)
  ------------------
  |  Branch (2020:13): [True: 0, False: 0]
  ------------------
 2021|      0|            return -1;
 2022|       |
 2023|      0|        while ((key = PyIter_Next(it)) != NULL) {
  ------------------
  |  Branch (2023:16): [True: 0, False: 0]
  ------------------
 2024|      0|            if (set_discard_key(so, key) < 0) {
  ------------------
  |  Branch (2024:17): [True: 0, False: 0]
  ------------------
 2025|      0|                Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2026|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2027|      0|                return -1;
 2028|      0|            }
 2029|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2030|      0|        }
 2031|      0|        Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2032|      0|        if (PyErr_Occurred())
  ------------------
  |  Branch (2032:13): [True: 0, False: 0]
  ------------------
 2033|      0|            return -1;
 2034|      0|    }
 2035|       |    /* If more than 1/4th are dummies, then resize them away. */
 2036|    152|    if ((size_t)(so->fill - so->used) <= (size_t)so->mask / 4)
  ------------------
  |  Branch (2036:9): [True: 0, False: 152]
  ------------------
 2037|      0|        return 0;
 2038|    152|    return set_table_resize(so, so->used>50000 ? so->used*2 : so->used*4);
  ------------------
  |  Branch (2038:33): [True: 0, False: 152]
  ------------------
 2039|    152|}
setobject.c:set_intersection:
 1720|      7|{
 1721|      7|    PySetObject *result;
 1722|      7|    PyObject *key, *it, *tmp;
 1723|      7|    Py_hash_t hash;
 1724|      7|    int rv;
 1725|       |
 1726|      7|    if ((PyObject *)so == other)
  ------------------
  |  Branch (1726:9): [True: 0, False: 7]
  ------------------
 1727|      0|        return set_copy_impl(so);
 1728|       |
 1729|      7|    result = (PySetObject *)make_new_set_basetype_untracked(Py_TYPE(so), NULL);
  ------------------
  |  |  213|      7|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1730|      7|    if (result == NULL)
  ------------------
  |  Branch (1730:9): [True: 0, False: 7]
  ------------------
 1731|      0|        return NULL;
 1732|       |
 1733|      7|    if (PyAnySet_Check(other)) {
  ------------------
  |  |   31|      7|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|     14|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      7|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|      7|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|      7|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1734|      7|        Py_ssize_t pos = 0;
 1735|      7|        setentry *entry;
 1736|       |
 1737|      7|        if (PySet_GET_SIZE(other) > PySet_GET_SIZE(so)) {
  ------------------
  |  |   71|      7|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PySet_GET_SIZE(other) > PySet_GET_SIZE(so)) {
  ------------------
  |  |   71|      7|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1737:13): [True: 6, False: 1]
  ------------------
 1738|      6|            tmp = (PyObject *)so;
 1739|      6|            so = (PySetObject *)other;
 1740|      6|            other = tmp;
 1741|      6|        }
 1742|       |
 1743|      9|        while (set_next((PySetObject *)other, &pos, &entry)) {
  ------------------
  |  Branch (1743:16): [True: 2, False: 7]
  ------------------
 1744|      2|            key = entry->key;
 1745|      2|            hash = entry->hash;
 1746|      2|            Py_INCREF(key);
  ------------------
  |  |  310|      2|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1747|      2|            rv = set_contains_entry(so, key, hash);
 1748|      2|            if (rv < 0) {
  ------------------
  |  Branch (1748:17): [True: 0, False: 2]
  ------------------
 1749|      0|                Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1750|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1751|      0|                return NULL;
 1752|      0|            }
 1753|      2|            if (rv) {
  ------------------
  |  Branch (1753:17): [True: 0, False: 2]
  ------------------
 1754|      0|                if (set_add_entry(result, key, hash)) {
  ------------------
  |  Branch (1754:21): [True: 0, False: 0]
  ------------------
 1755|      0|                    Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1756|      0|                    Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1757|      0|                    return NULL;
 1758|      0|                }
 1759|      0|            }
 1760|      2|            Py_DECREF(key);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|      2|        }
 1762|      7|        _PyObject_GC_TRACK(result);
  ------------------
  |  |  505|      7|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1763|      7|        return (PyObject *)result;
 1764|      7|    }
 1765|       |
 1766|      0|    it = PyObject_GetIter(other);
 1767|      0|    if (it == NULL) {
  ------------------
  |  Branch (1767:9): [True: 0, False: 0]
  ------------------
 1768|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1769|      0|        return NULL;
 1770|      0|    }
 1771|       |
 1772|      0|    while ((key = PyIter_Next(it)) != NULL) {
  ------------------
  |  Branch (1772:12): [True: 0, False: 0]
  ------------------
 1773|      0|        hash = PyObject_Hash(key);
 1774|      0|        if (hash == -1)
  ------------------
  |  Branch (1774:13): [True: 0, False: 0]
  ------------------
 1775|      0|            goto error;
 1776|      0|        rv = set_contains_entry(so, key, hash);
 1777|      0|        if (rv < 0)
  ------------------
  |  Branch (1777:13): [True: 0, False: 0]
  ------------------
 1778|      0|            goto error;
 1779|      0|        if (rv) {
  ------------------
  |  Branch (1779:13): [True: 0, False: 0]
  ------------------
 1780|      0|            if (set_add_entry(result, key, hash))
  ------------------
  |  Branch (1780:17): [True: 0, False: 0]
  ------------------
 1781|      0|                goto error;
 1782|      0|            if (PySet_GET_SIZE(result) >= PySet_GET_SIZE(so)) {
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PySet_GET_SIZE(result) >= PySet_GET_SIZE(so)) {
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1782:17): [True: 0, False: 0]
  ------------------
 1783|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1784|      0|                break;
 1785|      0|            }
 1786|      0|        }
 1787|      0|        Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1788|      0|    }
 1789|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1790|      0|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1790:9): [True: 0, False: 0]
  ------------------
 1791|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1792|      0|        return NULL;
 1793|      0|    }
 1794|      0|    _PyObject_GC_TRACK(result);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1795|      0|    return (PyObject *)result;
 1796|      0|  error:
 1797|      0|    Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1798|      0|    Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1799|      0|    Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1800|       |    return NULL;
 1801|      0|}
setobject.c:set_copy_impl:
 1606|    304|{
 1607|    304|    PyObject *copy = set_copy_untracked_lock_held(so);
 1608|    304|    if (copy != NULL) {
  ------------------
  |  Branch (1608:9): [True: 304, False: 0]
  ------------------
 1609|    304|        _PyObject_GC_TRACK(copy);
  ------------------
  |  |  505|    304|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    304|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    304|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1610|    304|    }
 1611|    304|    return copy;
 1612|    304|}
setobject.c:set_discard_entry:
  581|   282k|{
  582|   282k|    setentry *entry;
  583|   282k|    PyObject *old_key;
  584|   282k|    int status = set_lookkey(so, key, hash, &entry);
  585|   282k|    if (status < 0) {
  ------------------
  |  Branch (585:9): [True: 0, False: 282k]
  ------------------
  586|      0|        return -1;
  587|      0|    }
  588|   282k|    if (status == SET_LOOKKEY_NO_MATCH) {
  ------------------
  |  |   67|   282k|#define SET_LOOKKEY_NO_MATCH 0
  ------------------
  |  Branch (588:9): [True: 273k, False: 8.55k]
  ------------------
  589|   273k|        return DISCARD_NOTFOUND;
  ------------------
  |  |  576|   273k|#define DISCARD_NOTFOUND 0
  ------------------
  590|   273k|    }
  591|   282k|    assert(status == SET_LOOKKEY_FOUND);
  ------------------
  |  Branch (591:5): [True: 8.55k, False: 0]
  ------------------
  592|  8.55k|    old_key = entry->key;
  593|  8.55k|    FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, -1);
  ------------------
  |  |  194|  8.55k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  594|  8.55k|    FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used - 1);
  ------------------
  |  |  194|  8.55k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  595|  8.55k|    FT_ATOMIC_STORE_PTR_RELEASE(entry->key, dummy);
  ------------------
  |  |  164|  8.55k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  596|  8.55k|    Py_DECREF(old_key);
  ------------------
  |  |  430|  8.55k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.55k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.55k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  597|  8.55k|    return DISCARD_FOUND;
  ------------------
  |  |  577|  8.55k|#define DISCARD_FOUND 1
  ------------------
  598|  8.55k|}
setobject.c:make_new_set_basetype_untracked:
 1390|    311|{
 1391|    311|    if (type != &PySet_Type && type != &PyFrozenSet_Type) {
  ------------------
  |  Branch (1391:9): [True: 0, False: 311]
  |  Branch (1391:32): [True: 0, False: 0]
  ------------------
 1392|      0|        if (PyType_IsSubtype(type, &PySet_Type))
  ------------------
  |  Branch (1392:13): [True: 0, False: 0]
  ------------------
 1393|      0|            type = &PySet_Type;
 1394|      0|        else
 1395|      0|            type = &PyFrozenSet_Type;
 1396|      0|    }
 1397|    311|    return make_new_set_untracked(type, iterable);
 1398|    311|}
setobject.c:make_new_set_untracked:
 1352|   603k|{
 1353|   603k|    assert(PyType_Check(type));
  ------------------
  |  Branch (1353:5): [True: 603k, False: 0]
  ------------------
 1354|   603k|    PySetObject *so;
 1355|       |
 1356|   603k|    so = (PySetObject *)_PyType_AllocNoTrack(type, 0);
 1357|   603k|    if (so == NULL)
  ------------------
  |  Branch (1357:9): [True: 0, False: 603k]
  ------------------
 1358|      0|        return NULL;
 1359|       |
 1360|   603k|    so->fill = 0;
 1361|   603k|    so->used = 0;
 1362|   603k|    so->mask = PySet_MINSIZE - 1;
  ------------------
  |  |   18|   603k|#define PySet_MINSIZE 8
  ------------------
 1363|   603k|    so->table = so->smalltable;
 1364|   603k|    so->hash = -1;
 1365|   603k|    so->finger = 0;
 1366|   603k|    so->weakreflist = NULL;
 1367|       |
 1368|   603k|    if (iterable != NULL) {
  ------------------
  |  Branch (1368:9): [True: 186k, False: 416k]
  ------------------
 1369|   186k|        if (set_update_local(so, iterable)) {
  ------------------
  |  Branch (1369:13): [True: 0, False: 186k]
  ------------------
 1370|      0|            Py_DECREF(so);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1371|      0|            return NULL;
 1372|      0|        }
 1373|   186k|    }
 1374|       |
 1375|   603k|    return (PyObject *)so;
 1376|   603k|}
setobject.c:set_update_local:
 1261|   186k|{
 1262|   186k|    assert(Py_REFCNT(so) == 1);
  ------------------
  |  Branch (1262:5): [True: 186k, False: 0]
  ------------------
 1263|   186k|    if (PyAnySet_Check(other)) {
  ------------------
  |  |   31|   186k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   373k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   186k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   186k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 177k, False: 9.91k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   196k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 9.91k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|   186k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|  9.91k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 9.91k]
  |  |  ------------------
  |  |   33|   186k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|  9.91k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 9.91k]
  |  |  ------------------
  ------------------
 1264|   177k|        int rv;
 1265|   177k|        Py_BEGIN_CRITICAL_SECTION(other);
  ------------------
  |  |   51|   177k|    {
  ------------------
 1266|   177k|        rv = set_merge_lock_held(so, other);
 1267|   177k|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|   177k|    }
  ------------------
 1268|   177k|        return rv;
 1269|   177k|    }
 1270|  9.91k|    else if (PyDict_CheckExact(other)) {
  ------------------
  |  |   19|  9.91k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|  9.91k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 159, False: 9.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1271|    159|        int rv;
 1272|    159|        Py_BEGIN_CRITICAL_SECTION(other);
  ------------------
  |  |   51|    159|    {
  ------------------
 1273|    159|        rv = set_update_dict_lock_held(so, other);
 1274|    159|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    159|    }
  ------------------
 1275|    159|        return rv;
 1276|    159|    }
 1277|  9.75k|    else if (PyFrozenDict_CheckExact(other)) {
  ------------------
  |  |   38|  9.75k|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  215|  9.75k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.75k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.75k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 9.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|      0|        return set_update_dict_lock_held(so, other);
 1279|      0|    }
 1280|  9.75k|    return set_update_iterable_lock_held(so, other);
 1281|   186k|}
setobject.c:set_update_dict_lock_held:
 1188|    159|{
 1189|    159|    assert(PyAnyDict_CheckExact(other));
  ------------------
  |  Branch (1189:5): [True: 159, False: 0]
  |  Branch (1189:5): [True: 0, False: 0]
  ------------------
 1190|       |
 1191|    159|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
 1192|       |#ifdef Py_DEBUG
 1193|       |    if (!PyFrozenDict_CheckExact(other)) {
 1194|       |        _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(other);
 1195|       |    }
 1196|       |#endif
 1197|       |
 1198|       |    /* Do one big resize at the start, rather than
 1199|       |    * incrementally resizing as we insert new keys.  Expect
 1200|       |    * that there will be no (or few) overlapping keys.
 1201|       |    */
 1202|    159|    Py_ssize_t dictsize = PyDict_GET_SIZE(other);
  ------------------
  |  |   63|    159|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    159|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    159|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1203|    159|    if ((so->fill + dictsize)*5 >= so->mask*3) {
  ------------------
  |  Branch (1203:9): [True: 0, False: 159]
  ------------------
 1204|      0|        if (set_table_resize(so, (so->used + dictsize)*2) != 0) {
  ------------------
  |  Branch (1204:13): [True: 0, False: 0]
  ------------------
 1205|      0|            return -1;
 1206|      0|        }
 1207|      0|    }
 1208|       |
 1209|    159|    Py_ssize_t pos = 0;
 1210|    159|    PyObject *key;
 1211|    159|    PyObject *value;
 1212|    159|    Py_hash_t hash;
 1213|    537|    while (_PyDict_Next(other, &pos, &key, &value, &hash)) {
  ------------------
  |  Branch (1213:12): [True: 378, False: 159]
  ------------------
 1214|    378|        if (set_add_entry(so, key, hash)) {
  ------------------
  |  Branch (1214:13): [True: 0, False: 378]
  ------------------
 1215|      0|            return -1;
 1216|      0|        }
 1217|    378|    }
 1218|    159|    return 0;
 1219|    159|}
setobject.c:set_update_iterable_lock_held:
 1223|  9.75k|{
 1224|  9.75k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
 1225|       |
 1226|  9.75k|    PyObject *it = PyObject_GetIter(other);
 1227|  9.75k|    if (it == NULL) {
  ------------------
  |  Branch (1227:9): [True: 0, False: 9.75k]
  ------------------
 1228|      0|        return -1;
 1229|      0|    }
 1230|       |
 1231|  9.75k|    PyObject *key;
 1232|  55.4k|    while ((key = PyIter_Next(it)) != NULL) {
  ------------------
  |  Branch (1232:12): [True: 45.6k, False: 9.75k]
  ------------------
 1233|  45.6k|        if (set_add_key(so, key)) {
  ------------------
  |  Branch (1233:13): [True: 0, False: 45.6k]
  ------------------
 1234|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1235|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|      0|            return -1;
 1237|      0|        }
 1238|  45.6k|        Py_DECREF(key);
  ------------------
  |  |  430|  45.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  45.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  45.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1239|  45.6k|    }
 1240|  9.75k|    Py_DECREF(it);
  ------------------
  |  |  430|  9.75k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.75k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.75k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1241|  9.75k|    if (PyErr_Occurred())
  ------------------
  |  Branch (1241:9): [True: 0, False: 9.75k]
  ------------------
 1242|      0|        return -1;
 1243|  9.75k|    return 0;
 1244|  9.75k|}
setobject.c:set_add_entry:
  339|   542k|{
  340|   542k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(so);
  341|       |
  342|   542k|    return set_add_entry_takeref(so, Py_NewRef(key), hash);
  ------------------
  |  |  550|   542k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   542k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   542k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|   542k|}
setobject.c:set_and:
 1878|      7|{
 1879|      7|    if (!PyAnySet_Check(self) || !PyAnySet_Check(other))
  ------------------
  |  |   31|     14|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|     14|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      7|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|      7|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|     14|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                  if (!PyAnySet_Check(self) || !PyAnySet_Check(other))
  ------------------
  |  |   31|      7|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|     14|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      7|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|      7|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|      7|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1880|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 1881|      7|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|      7|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1881:23): [True: 7, False: 0]
  |  Branch (1881:23): [True: 0, False: 0]
  |  Branch (1881:23): [True: 0, False: 0]
  |  Branch (1881:23): [True: 0, False: 0]
  ------------------
 1882|       |
 1883|      0|    PyObject *rv;
 1884|      7|    Py_BEGIN_CRITICAL_SECTION2(so, other);
  ------------------
  |  |   57|      7|    {
  ------------------
 1885|      7|    rv = set_intersection(so, other);
 1886|      7|    Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      7|    }
  ------------------
 1887|       |
 1888|      7|    return rv;
 1889|      7|}
setobject.c:set_or:
 1685|    152|{
 1686|    152|    PySetObject *result;
 1687|       |
 1688|    152|    if (!PyAnySet_Check(self) || !PyAnySet_Check(other))
  ------------------
  |  |   31|    304|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    304|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 152, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    152|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|    152|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|    304|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                  if (!PyAnySet_Check(self) || !PyAnySet_Check(other))
  ------------------
  |  |   31|    152|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    304|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 152, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|    152|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|    152|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|    152|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1689|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 1690|       |
 1691|    152|    result = (PySetObject *)set_copy(self, NULL);
 1692|    152|    if (result == NULL) {
  ------------------
  |  Branch (1692:9): [True: 0, False: 152]
  ------------------
 1693|      0|        return NULL;
 1694|      0|    }
 1695|    152|    if (Py_Is(self, other)) {
  ------------------
  |  |  187|    152|#define Py_Is(x, y) ((x) == (y))
  |  |  ------------------
  |  |  |  Branch (187:21): [True: 0, False: 152]
  |  |  ------------------
  ------------------
 1696|      0|        return (PyObject *)result;
 1697|      0|    }
 1698|    152|    if (set_update_local(result, other)) {
  ------------------
  |  Branch (1698:9): [True: 0, False: 152]
  ------------------
 1699|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1700|      0|        return NULL;
 1701|      0|    }
 1702|    152|    return (PyObject *)result;
 1703|    152|}
setobject.c:set_ior:
 1707|   229k|{
 1708|   229k|    if (!PyAnySet_Check(other))
  ------------------
  |  |   31|   229k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   459k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   229k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   229k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 229k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   229k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|   229k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|   229k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1709|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 1710|   229k|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|   229k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|   229k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1710:23): [True: 229k, False: 0]
  |  Branch (1710:23): [True: 0, False: 0]
  |  Branch (1710:23): [True: 0, False: 0]
  |  Branch (1710:23): [True: 0, False: 0]
  ------------------
 1711|       |
 1712|   229k|    if (set_update_internal(so, other)) {
  ------------------
  |  Branch (1712:9): [True: 0, False: 229k]
  ------------------
 1713|      0|        return NULL;
 1714|      0|    }
 1715|   229k|    return Py_NewRef(so);
  ------------------
  |  |  550|   229k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   229k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   229k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1716|   229k|}
setobject.c:set_contains:
 2578|     37|{
 2579|     37|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|     37|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2579:23): [True: 25, False: 12]
  |  Branch (2579:23): [True: 12, False: 0]
  |  Branch (2579:23): [True: 0, False: 0]
  |  Branch (2579:23): [True: 0, False: 0]
  ------------------
 2580|      0|    return _PySet_Contains(so, key);
 2581|     37|}
setobject.c:set_traverse:
  938|  2.73k|{
  939|  2.73k|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|  2.73k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  2.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (939:23): [True: 2.23k, False: 504]
  |  Branch (939:23): [True: 504, False: 0]
  |  Branch (939:23): [True: 0, False: 0]
  |  Branch (939:23): [True: 0, False: 0]
  ------------------
  940|      0|    Py_ssize_t pos = 0;
  941|  2.73k|    setentry *entry;
  942|       |
  943|  20.2k|    while (set_next(so, &pos, &entry))
  ------------------
  |  Branch (943:12): [True: 17.5k, False: 2.73k]
  ------------------
  944|  17.5k|        Py_VISIT(entry->key);
  ------------------
  |  |  194|  20.2k|    do {                                                                \
  |  |  195|  17.5k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 17.5k, False: 0]
  |  |  ------------------
  |  |  196|  17.5k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  17.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  17.5k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 17.5k]
  |  |  ------------------
  |  |  198|  17.5k|                return vret;                                            \
  |  |  199|  17.5k|        }                                                               \
  |  |  200|  17.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 17.5k]
  |  |  ------------------
  ------------------
  945|  2.73k|    return 0;
  946|  2.73k|}
setobject.c:set_clear_internal:
  647|     27|{
  648|     27|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|     27|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (648:23): [True: 27, False: 0]
  |  Branch (648:23): [True: 0, False: 0]
  |  Branch (648:23): [True: 0, False: 0]
  |  Branch (648:23): [True: 0, False: 0]
  ------------------
  649|      0|    setentry *entry;
  650|     27|    setentry *table = so->table;
  651|     27|    Py_ssize_t fill = so->fill;
  652|     27|    Py_ssize_t used = so->used;
  653|     27|    Py_ssize_t oldsize = (size_t)so->mask + 1;
  654|     27|    int table_is_malloced = table != so->smalltable;
  655|     27|    setentry small_copy[PySet_MINSIZE];
  656|       |
  657|     27|    assert (PyAnySet_Check(so));
  ------------------
  |  Branch (657:5): [True: 27, False: 0]
  |  Branch (657:5): [True: 0, False: 0]
  |  Branch (657:5): [True: 0, False: 0]
  |  Branch (657:5): [True: 0, False: 0]
  ------------------
  658|     27|    assert(table != NULL);
  ------------------
  |  Branch (658:5): [True: 27, False: 0]
  ------------------
  659|       |
  660|       |    /* This is delicate.  During the process of clearing the set,
  661|       |     * decrefs can cause the set to mutate.  To avoid fatal confusion
  662|       |     * (voice of experience), we have to make the set empty before
  663|       |     * clearing the slots, and never refer to anything via so->ref while
  664|       |     * clearing.
  665|       |     */
  666|     27|    if (table_is_malloced)
  ------------------
  |  Branch (666:9): [True: 0, False: 27]
  ------------------
  667|      0|        set_empty_to_minsize(so);
  668|       |
  669|     27|    else if (fill > 0) {
  ------------------
  |  Branch (669:14): [True: 27, False: 0]
  ------------------
  670|       |        /* It's a small table with something that needs to be cleared.
  671|       |         * Afraid the only safe way is to copy the set entries into
  672|       |         * another small table first.
  673|       |         */
  674|     27|        memcpy(small_copy, table, sizeof(small_copy));
  675|     27|        table = small_copy;
  676|     27|        set_empty_to_minsize(so);
  677|     27|    }
  678|       |    /* else it's a small table that's already empty */
  679|       |
  680|       |    /* Now we can finally clear things.  If C had refcounts, we could
  681|       |     * assert that the refcount on table is 1 now, i.e. that this function
  682|       |     * has unique access to it, so decref side-effects can't alter it.
  683|       |     */
  684|    147|    for (entry = table; used > 0; entry++) {
  ------------------
  |  Branch (684:25): [True: 120, False: 27]
  ------------------
  685|    120|        if (entry->key && entry->key != dummy) {
  ------------------
  |  |   64|     27|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (685:13): [True: 27, False: 93]
  |  Branch (685:27): [True: 27, False: 0]
  ------------------
  686|     27|            used--;
  687|     27|            Py_DECREF(entry->key);
  ------------------
  |  |  430|     27|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     27|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  688|     27|        }
  689|    120|    }
  690|       |
  691|     27|    if (table_is_malloced)
  ------------------
  |  Branch (691:9): [True: 0, False: 27]
  ------------------
  692|      0|        free_entries(table, oldsize, SET_IS_SHARED(so));
  ------------------
  |  |  132|      0|#define SET_IS_SHARED(so) 0
  ------------------
  693|     27|    return 0;
  694|     27|}
setobject.c:set_empty_to_minsize:
  635|     27|{
  636|     27|    FT_ATOMIC_STORE_PTR_RELEASE(so->table, NULL);
  ------------------
  |  |  164|     27|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  637|     27|    set_zero_table(so->smalltable, PySet_MINSIZE);
  ------------------
  |  |   18|     27|#define PySet_MINSIZE 8
  ------------------
  638|     27|    so->fill = 0;
  639|     27|    FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, 0);
  ------------------
  |  |  194|     27|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  640|     27|    FT_ATOMIC_STORE_SSIZE_RELEASE(so->mask, PySet_MINSIZE - 1);
  ------------------
  |  |  169|     27|#define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) value = new_value
  ------------------
  641|     27|    FT_ATOMIC_STORE_SSIZE_RELAXED(so->hash, -1);
  ------------------
  |  |  194|     27|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  642|     27|    FT_ATOMIC_STORE_PTR_RELEASE(so->table, so->smalltable);
  ------------------
  |  |  164|     27|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  643|     27|}
setobject.c:set_richcompare:
 2491|  6.56k|{
 2492|  6.56k|    PySetObject *v = _PySet_CAST(self);
  ------------------
  |  |   62|  6.56k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  6.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2492:22): [True: 156, False: 6.40k]
  |  Branch (2492:22): [True: 6.40k, False: 0]
  |  Branch (2492:22): [True: 0, False: 0]
  |  Branch (2492:22): [True: 0, False: 0]
  ------------------
 2493|      0|    PyObject *r1;
 2494|  6.56k|    int r2;
 2495|       |
 2496|  6.56k|    if(!PyAnySet_Check(w))
  ------------------
  |  |   31|  6.56k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  13.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 4, False: 6.56k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  13.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 6.40k, False: 152]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|  6.56k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|    152|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 152]
  |  |  ------------------
  |  |   33|  6.56k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|    152|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    152|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    152|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 152]
  |  |  ------------------
  ------------------
 2497|    152|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|    152|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|    152|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 2498|       |
 2499|  6.41k|    switch (op) {
  ------------------
  |  Branch (2499:13): [True: 6.41k, False: 0]
  ------------------
 2500|  6.40k|    case Py_EQ:
  ------------------
  |  |  654|  6.40k|#define Py_EQ 2
  ------------------
  |  Branch (2500:5): [True: 6.40k, False: 4]
  ------------------
 2501|  6.40k|        if (PySet_GET_SIZE(v) != PySet_GET_SIZE(w))
  ------------------
  |  |   71|  6.40k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  6.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PySet_GET_SIZE(v) != PySet_GET_SIZE(w))
  ------------------
  |  |   71|  6.40k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  6.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2501:13): [True: 0, False: 6.40k]
  ------------------
 2502|      0|            Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2503|  6.40k|        Py_hash_t v_hash = FT_ATOMIC_LOAD_SSIZE_RELAXED(v->hash);
  ------------------
  |  |  149|  6.40k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 2504|  6.40k|        Py_hash_t w_hash = FT_ATOMIC_LOAD_SSIZE_RELAXED(((PySetObject *)w)->hash);
  ------------------
  |  |  149|  6.40k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 2505|  6.40k|        if (v_hash != -1 && w_hash != -1 && v_hash != w_hash)
  ------------------
  |  Branch (2505:13): [True: 6.40k, False: 0]
  |  Branch (2505:29): [True: 6.40k, False: 0]
  |  Branch (2505:45): [True: 0, False: 6.40k]
  ------------------
 2506|      0|            Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2507|  6.40k|        return set_issubset((PyObject*)v, w);
 2508|      0|    case Py_NE:
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (2508:5): [True: 0, False: 6.41k]
  ------------------
 2509|      0|        r1 = set_richcompare((PyObject*)v, w, Py_EQ);
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
 2510|      0|        if (r1 == NULL)
  ------------------
  |  Branch (2510:13): [True: 0, False: 0]
  ------------------
 2511|      0|            return NULL;
 2512|      0|        r2 = PyObject_IsTrue(r1);
 2513|      0|        Py_DECREF(r1);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2514|      0|        if (r2 < 0)
  ------------------
  |  Branch (2514:13): [True: 0, False: 0]
  ------------------
 2515|      0|            return NULL;
 2516|      0|        return PyBool_FromLong(!r2);
 2517|      4|    case Py_LE:
  ------------------
  |  |  653|      4|#define Py_LE 1
  ------------------
  |  Branch (2517:5): [True: 4, False: 6.40k]
  ------------------
 2518|      4|        return set_issubset((PyObject*)v, w);
 2519|      0|    case Py_GE:
  ------------------
  |  |  657|      0|#define Py_GE 5
  ------------------
  |  Branch (2519:5): [True: 0, False: 6.41k]
  ------------------
 2520|      0|        return set_issuperset((PyObject*)v, w);
 2521|      0|    case Py_LT:
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  |  Branch (2521:5): [True: 0, False: 6.41k]
  ------------------
 2522|      0|        if (PySet_GET_SIZE(v) >= PySet_GET_SIZE(w))
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PySet_GET_SIZE(v) >= PySet_GET_SIZE(w))
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2522:13): [True: 0, False: 0]
  ------------------
 2523|      0|            Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2524|      0|        return set_issubset((PyObject*)v, w);
 2525|      0|    case Py_GT:
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  |  Branch (2525:5): [True: 0, False: 6.41k]
  ------------------
 2526|      0|        if (PySet_GET_SIZE(v) <= PySet_GET_SIZE(w))
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PySet_GET_SIZE(v) <= PySet_GET_SIZE(w))
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2526:13): [True: 0, False: 0]
  ------------------
 2527|      0|            Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2528|      0|        return set_issuperset((PyObject*)v, w);
 2529|  6.41k|    }
 2530|      0|    Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 2531|  6.41k|}
setobject.c:set_issubset_impl:
 2416|  6.41k|{
 2417|  6.41k|    setentry *entry;
 2418|  6.41k|    Py_ssize_t pos = 0;
 2419|  6.41k|    int rv;
 2420|       |
 2421|  6.41k|    if (!PyAnySet_Check(other)) {
  ------------------
  |  |   31|  6.41k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  12.8k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 4, False: 6.40k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  12.8k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 6.40k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|  6.41k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|  6.41k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2422|      0|        PyObject *tmp = set_intersection(so, other);
 2423|      0|        if (tmp == NULL) {
  ------------------
  |  Branch (2423:13): [True: 0, False: 0]
  ------------------
 2424|      0|            return NULL;
 2425|      0|        }
 2426|      0|        int result = (PySet_GET_SIZE(tmp) == PySet_GET_SIZE(so));
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      int result = (PySet_GET_SIZE(tmp) == PySet_GET_SIZE(so));
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2427|      0|        Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2428|      0|        return PyBool_FromLong(result);
 2429|      0|    }
 2430|  6.41k|    if (PySet_GET_SIZE(so) > PySet_GET_SIZE(other))
  ------------------
  |  |   71|  6.41k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  6.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PySet_GET_SIZE(so) > PySet_GET_SIZE(other))
  ------------------
  |  |   71|  6.41k|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|  6.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2430:9): [True: 0, False: 6.41k]
  ------------------
 2431|      0|        Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2432|       |
 2433|  34.0k|    while (set_next(so, &pos, &entry)) {
  ------------------
  |  Branch (2433:12): [True: 27.6k, False: 6.32k]
  ------------------
 2434|  27.6k|        PyObject *key = entry->key;
 2435|  27.6k|        Py_INCREF(key);
  ------------------
  |  |  310|  27.6k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2436|  27.6k|        rv = set_contains_entry((PySetObject *)other, key, entry->hash);
 2437|  27.6k|        Py_DECREF(key);
  ------------------
  |  |  430|  27.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2438|  27.6k|        if (rv < 0) {
  ------------------
  |  Branch (2438:13): [True: 0, False: 27.6k]
  ------------------
 2439|      0|            return NULL;
 2440|      0|        }
 2441|  27.6k|        if (!rv) {
  ------------------
  |  Branch (2441:13): [True: 85, False: 27.5k]
  ------------------
 2442|     85|            Py_RETURN_FALSE;
  ------------------
  |  |   45|     85|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|     85|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     85|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     85|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2443|     85|        }
 2444|  27.6k|    }
 2445|  6.32k|    Py_RETURN_TRUE;
  ------------------
  |  |   44|  6.32k|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|  6.32k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2446|  6.41k|}
setobject.c:set_iter:
 1173|  56.5k|{
 1174|  56.5k|    Py_ssize_t size = set_len(so);
 1175|  56.5k|    setiterobject *si = PyObject_GC_New(setiterobject, &PySetIter_Type);
  ------------------
  |  |  181|  56.5k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  56.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1176|  56.5k|    if (si == NULL)
  ------------------
  |  Branch (1176:9): [True: 0, False: 56.5k]
  ------------------
 1177|      0|        return NULL;
 1178|  56.5k|    si->si_set = (PySetObject*)Py_NewRef(so);
  ------------------
  |  |  550|  56.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  56.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1179|  56.5k|    si->si_used = size;
 1180|  56.5k|    si->si_pos = 0;
 1181|  56.5k|    si->len = size;
 1182|  56.5k|    _PyObject_GC_TRACK(si);
  ------------------
  |  |  505|  56.5k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|  56.5k|    return (PyObject *)si;
 1184|  56.5k|}
setobject.c:set_add_impl:
 2548|   205k|{
 2549|   205k|    if (set_add_key(so, key))
  ------------------
  |  Branch (2549:9): [True: 0, False: 205k]
  ------------------
 2550|      0|        return NULL;
 2551|   205k|    Py_RETURN_NONE;
  ------------------
  |  |  628|   205k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|   205k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2552|   205k|}
setobject.c:set_difference_update_impl:
 2053|    152|{
 2054|    152|    Py_ssize_t i;
 2055|       |
 2056|    304|    for (i = 0; i < others_length; i++) {
  ------------------
  |  Branch (2056:17): [True: 152, False: 152]
  ------------------
 2057|    152|        PyObject *other = others[i];
 2058|    152|        int rv;
 2059|    152|        Py_BEGIN_CRITICAL_SECTION2(so, other);
  ------------------
  |  |   57|    152|    {
  ------------------
 2060|    152|        rv = set_difference_update_internal(so, other);
 2061|    152|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|    152|    }
  ------------------
 2062|    152|        if (rv) {
  ------------------
  |  Branch (2062:13): [True: 0, False: 152]
  ------------------
 2063|      0|            return NULL;
 2064|      0|        }
 2065|    152|    }
 2066|    152|    Py_RETURN_NONE;
  ------------------
  |  |  628|    152|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    152|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2067|    152|}
setobject.c:set_remove_impl:
 2653|    374|{
 2654|    374|    int rv;
 2655|       |
 2656|    374|    rv = set_discard_key(so, key);
 2657|    374|    if (rv < 0) {
  ------------------
  |  Branch (2657:9): [True: 0, False: 374]
  ------------------
 2658|      0|        if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError))
  ------------------
  |  |   37|      0|    (Py_IS_TYPE((ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|      0|    PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2658:34): [True: 0, False: 0]
  ------------------
 2659|      0|            return NULL;
 2660|      0|        PyErr_Clear();
 2661|      0|        Py_hash_t hash;
 2662|      0|        Py_BEGIN_CRITICAL_SECTION(key);
  ------------------
  |  |   51|      0|    {
  ------------------
 2663|      0|        hash = frozenset_hash_impl(key);
 2664|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 2665|      0|        rv = set_discard_entry(so, key, hash);
 2666|      0|        if (rv < 0)
  ------------------
  |  Branch (2666:13): [True: 0, False: 0]
  ------------------
 2667|      0|            return NULL;
 2668|      0|    }
 2669|       |
 2670|    374|    if (rv == DISCARD_NOTFOUND) {
  ------------------
  |  |  576|    374|#define DISCARD_NOTFOUND 0
  ------------------
  |  Branch (2670:9): [True: 0, False: 374]
  ------------------
 2671|      0|        _PyErr_SetKeyError(key);
 2672|      0|        return NULL;
 2673|      0|    }
 2674|    374|    Py_RETURN_NONE;
  ------------------
  |  |  628|    374|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    374|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2675|    374|}
setobject.c:set_vectorcall:
 2794|  18.2k|{
 2795|  18.2k|    assert(PyType_Check(type));
  ------------------
  |  Branch (2795:5): [True: 18.2k, False: 0]
  ------------------
 2796|       |
 2797|  18.2k|    if (!_PyArg_NoKwnames("set", kwnames)) {
  ------------------
  |  |   15|  18.2k|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 18.2k, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2798|      0|        return NULL;
 2799|      0|    }
 2800|       |
 2801|  18.2k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|  18.2k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 2802|  18.2k|    if (!_PyArg_CheckPositional("set", nargs, 0, 1)) {
  ------------------
  |  |   31|  18.2k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 18.2k, False: 0]
  |  |  |  Branch (31:27): [True: 18.2k, False: 0]
  |  |  ------------------
  |  |   32|  18.2k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2803|      0|        return NULL;
 2804|      0|    }
 2805|       |
 2806|  18.2k|    if (nargs) {
  ------------------
  |  Branch (2806:9): [True: 22, False: 18.2k]
  ------------------
 2807|     22|        return make_new_set(_PyType_CAST(type), args[0]);
  ------------------
  |  |  770|     22|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2807:29): [True: 22, False: 0]
  ------------------
 2808|     22|    }
 2809|       |
 2810|  18.2k|    return make_new_set(_PyType_CAST(type), NULL);
  ------------------
  |  |  770|  18.2k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  18.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (2810:25): [True: 18.2k, False: 0]
  ------------------
 2811|  18.2k|}
setobject.c:frozenset_hash:
 1016|  12.0k|{
 1017|  12.0k|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|  12.0k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  12.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1017:23): [True: 0, False: 12.0k]
  |  Branch (1017:23): [True: 12.0k, False: 0]
  |  Branch (1017:23): [True: 0, False: 0]
  |  Branch (1017:23): [True: 0, False: 0]
  ------------------
 1018|      0|    Py_uhash_t hash;
 1019|       |
 1020|  12.0k|    if (FT_ATOMIC_LOAD_SSIZE_RELAXED(so->hash) != -1) {
  ------------------
  |  |  149|  12.0k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  |  Branch (1020:9): [True: 2.28k, False: 9.73k]
  ------------------
 1021|  2.28k|        return FT_ATOMIC_LOAD_SSIZE_ACQUIRE(so->hash);
  ------------------
  |  |  148|  2.28k|#define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value
  ------------------
 1022|  2.28k|    }
 1023|       |
 1024|  9.73k|    hash = frozenset_hash_impl(self);
 1025|  9.73k|    FT_ATOMIC_STORE_SSIZE_RELEASE(so->hash, hash);
  ------------------
  |  |  169|  9.73k|#define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) value = new_value
  ------------------
 1026|  9.73k|    return hash;
 1027|  12.0k|}
setobject.c:frozenset___contains___impl:
 2618|     15|{
 2619|     15|    Py_hash_t hash = PyObject_Hash(key);
 2620|     15|    if (hash == -1) {
  ------------------
  |  Branch (2620:9): [True: 0, False: 15]
  ------------------
 2621|      0|        if (!PySet_Check(key) || !PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  |   37|      0|    (Py_IS_TYPE((ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   38|      0|    PyType_IsSubtype(Py_TYPE(ob), &PySet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (38:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2621:34): [True: 0, False: 0]
  ------------------
 2622|      0|            set_unhashable_type(key);
 2623|      0|            return NULL;
 2624|      0|        }
 2625|      0|        PyErr_Clear();
 2626|      0|        Py_BEGIN_CRITICAL_SECTION(key);
  ------------------
  |  |   51|      0|    {
  ------------------
 2627|      0|        hash = frozenset_hash_impl(key);
 2628|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 2629|      0|    }
 2630|     15|    setentry *entry; // unused
 2631|     15|    int status = set_do_lookup(so, so->table, so->mask, key, hash, &entry,
 2632|     15|                           set_compare_frozenset);
 2633|     15|    if (status < 0)
  ------------------
  |  Branch (2633:9): [True: 0, False: 15]
  ------------------
 2634|      0|        return NULL;
 2635|     15|    return PyBool_FromLong(status);
 2636|     15|}
setobject.c:make_new_frozenset:
 1432|     10|{
 1433|     10|    if (type != &PyFrozenSet_Type) {
  ------------------
  |  Branch (1433:9): [True: 0, False: 10]
  ------------------
 1434|      0|        return make_new_set(type, iterable);
 1435|      0|    }
 1436|       |
 1437|     10|    if (iterable != NULL && PyFrozenSet_CheckExact(iterable)) {
  ------------------
  |  |   23|     10|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|     10|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1437:9): [True: 10, False: 0]
  ------------------
 1438|       |        /* frozenset(f) is idempotent */
 1439|      0|        return Py_NewRef(iterable);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1440|      0|    }
 1441|     10|    PyObject *obj = make_new_set(type, iterable);
 1442|     10|    if (obj != NULL) {
  ------------------
  |  Branch (1442:9): [True: 10, False: 0]
  ------------------
 1443|     10|        _PyFrozenSet_MaybeUntrack(obj);
 1444|     10|    }
 1445|     10|    return obj;
 1446|     10|}
setobject.c:frozenset_vectorcall:
 1469|     10|{
 1470|     10|    if (!_PyArg_NoKwnames("frozenset", kwnames)) {
  ------------------
  |  |   15|     10|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 10, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1471|      0|        return NULL;
 1472|      0|    }
 1473|       |
 1474|     10|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|     10|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 1475|     10|    if (!_PyArg_CheckPositional("frozenset", nargs, 0, 1)) {
  ------------------
  |  |   31|     10|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 10, False: 0]
  |  |  |  Branch (31:27): [True: 10, False: 0]
  |  |  ------------------
  |  |   32|     10|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1476|      0|        return NULL;
 1477|      0|    }
 1478|       |
 1479|     10|    PyObject *iterable = (nargs ? args[0] : NULL);
  ------------------
  |  Branch (1479:27): [True: 10, False: 0]
  ------------------
 1480|     10|    return make_new_frozenset(_PyType_CAST(type), iterable);
  ------------------
  |  |  770|     10|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1480:31): [True: 10, False: 0]
  ------------------
 1481|     10|}
setobject.c:make_new_set:
 1380|   603k|{
 1381|   603k|    PyObject *so = make_new_set_untracked(type, iterable);
 1382|   603k|    if (so != NULL) {
  ------------------
  |  Branch (1382:9): [True: 603k, False: 0]
  ------------------
 1383|   603k|        _PyObject_GC_TRACK(so);
  ------------------
  |  |  505|   603k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   603k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   603k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1384|   603k|    }
 1385|   603k|    return so;
 1386|   603k|}
setobject.c:_PyFrozenSet_MaybeUntrack:
 1413|  9.90k|{
 1414|  9.90k|    assert(op != NULL);
  ------------------
  |  Branch (1414:5): [True: 9.90k, False: 0]
  ------------------
 1415|       |    // subclasses of a frozenset can generate reference cycles, so do not untrack
 1416|  9.90k|    if (!PyFrozenSet_CheckExact(op)) {
  ------------------
  |  |   23|  9.90k|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|  9.90k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.90k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.90k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1416:9): [True: 0, False: 9.90k]
  ------------------
 1417|      0|        return;
 1418|      0|    }
 1419|       |    // if no elements of a frozenset are tracked by the GC, we untrack the object
 1420|  9.90k|    Py_ssize_t pos = 0;
 1421|  9.90k|    setentry *entry;
 1422|  39.8k|    while (set_next((PySetObject *)op, &pos, &entry)) {
  ------------------
  |  Branch (1422:12): [True: 35.1k, False: 4.65k]
  ------------------
 1423|  35.1k|        if (_PyObject_GC_MAY_BE_TRACKED(entry->key)) {
  ------------------
  |  Branch (1423:13): [True: 5.24k, False: 29.9k]
  ------------------
 1424|  5.24k|            return;
 1425|  5.24k|        }
 1426|  35.1k|    }
 1427|  4.65k|    _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|  4.65k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1428|  4.65k|}
setobject.c:set_len:
  823|  58.8k|{
  824|  58.8k|    PySetObject *so = _PySet_CAST(self);
  ------------------
  |  |   62|  58.8k|    (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
  |  |  ------------------
  |  |  |  |   37|  58.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (824:23): [True: 57.5k, False: 1.29k]
  |  Branch (824:23): [True: 1.29k, False: 0]
  |  Branch (824:23): [True: 0, False: 0]
  |  Branch (824:23): [True: 0, False: 0]
  ------------------
  825|  58.8k|    return FT_ATOMIC_LOAD_SSIZE_RELAXED(so->used);
  ------------------
  |  |  149|  58.8k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  826|  58.8k|}
setobject.c:set_clear_impl:
 1643|     27|{
 1644|     27|    set_clear_internal((PyObject*)so);
 1645|     27|    Py_RETURN_NONE;
  ------------------
  |  |  628|     27|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     27|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1646|     27|}
setobject.c:set_discard_key:
  624|   282k|{
  625|   282k|    Py_hash_t hash = PyObject_Hash(key);
  626|   282k|    if (hash == -1) {
  ------------------
  |  Branch (626:9): [True: 0, False: 282k]
  ------------------
  627|      0|        set_unhashable_type(key);
  628|      0|        return -1;
  629|      0|    }
  630|   282k|    return set_discard_entry(so, key, hash);
  631|   282k|}
setobject.c:set_add_key:
  602|   443k|{
  603|   443k|    Py_hash_t hash = PyObject_Hash(key);
  604|   443k|    if (hash == -1) {
  ------------------
  |  Branch (604:9): [True: 0, False: 443k]
  ------------------
  605|      0|        set_unhashable_type(key);
  606|      0|        return -1;
  607|      0|    }
  608|   443k|    return set_add_entry(so, key, hash);
  609|   443k|}
setobject.c:set_next:
  711|   288k|{
  712|   288k|    Py_ssize_t i;
  713|   288k|    Py_ssize_t mask;
  714|   288k|    setentry *entry;
  715|       |
  716|   288k|    assert (PyAnySet_Check(so));
  ------------------
  |  Branch (716:5): [True: 183k, False: 105k]
  |  Branch (716:5): [True: 105k, False: 0]
  |  Branch (716:5): [True: 0, False: 0]
  |  Branch (716:5): [True: 0, False: 0]
  ------------------
  717|   288k|    i = *pos_ptr;
  718|   288k|    assert(i >= 0);
  ------------------
  |  Branch (718:5): [True: 288k, False: 0]
  ------------------
  719|   288k|    mask = so->mask;
  720|   288k|    entry = &so->table[i];
  721|  1.02M|    while (i <= mask && (entry->key == NULL || entry->key == dummy)) {
  ------------------
  |  |   64|   248k|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (721:12): [True: 987k, False: 40.1k]
  |  Branch (721:26): [True: 738k, False: 248k]
  |  Branch (721:48): [True: 10, False: 248k]
  ------------------
  722|   738k|        i++;
  723|   738k|        entry++;
  724|   738k|    }
  725|   288k|    *pos_ptr = i+1;
  726|   288k|    if (i > mask)
  ------------------
  |  Branch (726:9): [True: 40.1k, False: 248k]
  ------------------
  727|  40.1k|        return 0;
  728|   288k|    assert(entry != NULL);
  ------------------
  |  Branch (728:5): [True: 248k, False: 0]
  ------------------
  729|   248k|    *entry_ptr = entry;
  730|   248k|    return 1;
  731|   248k|}
setobject.c:set_pop_impl:
  913|    704|{
  914|       |    /* Make sure the search finger is in bounds */
  915|    704|    setentry *entry = so->table + (so->finger & so->mask);
  916|    704|    setentry *limit = so->table + so->mask;
  917|    704|    PyObject *key;
  918|       |
  919|    704|    if (so->used == 0) {
  ------------------
  |  Branch (919:9): [True: 0, False: 704]
  ------------------
  920|      0|        PyErr_SetString(PyExc_KeyError, "pop from an empty set");
  921|      0|        return NULL;
  922|      0|    }
  923|  2.70k|    while (entry->key == NULL || entry->key==dummy) {
  ------------------
  |  |   64|    756|#define dummy (&_dummy_struct)
  ------------------
  |  Branch (923:12): [True: 1.95k, False: 756]
  |  Branch (923:34): [True: 52, False: 704]
  ------------------
  924|  2.00k|        entry++;
  925|  2.00k|        if (entry > limit)
  ------------------
  |  Branch (925:13): [True: 124, False: 1.88k]
  ------------------
  926|    124|            entry = so->table;
  927|  2.00k|    }
  928|    704|    FT_ATOMIC_STORE_SSIZE_RELAXED(entry->hash, -1);
  ------------------
  |  |  194|    704|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  929|    704|    FT_ATOMIC_STORE_SSIZE_RELAXED(so->used, so->used - 1);
  ------------------
  |  |  194|    704|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  930|    704|    key = entry->key;
  931|    704|    FT_ATOMIC_STORE_PTR_RELEASE(entry->key, dummy);
  ------------------
  |  |  164|    704|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  932|    704|    so->finger = entry - so->table + 1;   /* next place to start */
  933|    704|    return key;
  934|    704|}
setobject.c:set_update_internal:
 1285|   229k|{
 1286|   229k|    if (PyAnySet_Check(other)) {
  ------------------
  |  |   31|   229k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   459k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   229k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   229k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 229k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|   229k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|   229k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|   229k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1287|   229k|        if (Py_Is((PyObject *)so, other)) {
  ------------------
  |  |  187|   229k|#define Py_Is(x, y) ((x) == (y))
  |  |  ------------------
  |  |  |  Branch (187:21): [True: 0, False: 229k]
  |  |  ------------------
  ------------------
 1288|      0|            return 0;
 1289|      0|        }
 1290|   229k|        int rv;
 1291|   229k|        Py_BEGIN_CRITICAL_SECTION2(so, other);
  ------------------
  |  |   57|   229k|    {
  ------------------
 1292|   229k|        rv = set_merge_lock_held(so, other);
 1293|   229k|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|   229k|    }
  ------------------
 1294|   229k|        return rv;
 1295|   229k|    }
 1296|      0|    else if (PyDict_CheckExact(other)) {
  ------------------
  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|      0|        int rv;
 1298|      0|        Py_BEGIN_CRITICAL_SECTION2(so, other);
  ------------------
  |  |   57|      0|    {
  ------------------
 1299|      0|        rv = set_update_dict_lock_held(so, other);
 1300|      0|        Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|      0|    }
  ------------------
 1301|      0|        return rv;
 1302|      0|    }
 1303|      0|    else if (PyFrozenDict_CheckExact(other)) {
  ------------------
  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|      0|        int rv;
 1305|      0|        Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|      0|    {
  ------------------
 1306|      0|        rv = set_update_dict_lock_held(so, other);
 1307|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 1308|      0|        return rv;
 1309|      0|    }
 1310|      0|    else {
 1311|      0|        int rv;
 1312|      0|        Py_BEGIN_CRITICAL_SECTION(so);
  ------------------
  |  |   51|      0|    {
  ------------------
 1313|      0|        rv = set_update_iterable_lock_held(so, other);
 1314|      0|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      0|    }
  ------------------
 1315|      0|        return rv;
 1316|      0|    }
 1317|   229k|}

_PyBuildSlice_ConsumeRefs:
  122|  39.5k|{
  123|  39.5k|    assert(start != NULL && stop != NULL && step != NULL);
  ------------------
  |  Branch (123:5): [True: 39.5k, False: 0]
  |  Branch (123:5): [True: 39.5k, False: 0]
  |  Branch (123:5): [True: 39.5k, False: 0]
  ------------------
  124|  39.5k|    PySliceObject *obj = _Py_FREELIST_POP(PySliceObject, slices);
  ------------------
  |  |   43|  39.5k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  39.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  125|  39.5k|    if (obj == NULL) {
  ------------------
  |  Branch (125:9): [True: 7.42k, False: 32.1k]
  ------------------
  126|  7.42k|        obj = PyObject_GC_New(PySliceObject, &PySlice_Type);
  ------------------
  |  |  181|  7.42k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  7.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  127|  7.42k|        if (obj == NULL) {
  ------------------
  |  Branch (127:13): [True: 0, False: 7.42k]
  ------------------
  128|      0|            goto error;
  129|      0|        }
  130|  7.42k|    }
  131|       |
  132|  39.5k|    obj->start = start;
  133|  39.5k|    obj->stop = stop;
  134|  39.5k|    obj->step = step;
  135|       |
  136|  39.5k|    _PyObject_GC_TRACK(obj);
  ------------------
  |  |  505|  39.5k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  39.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|  39.5k|    return (PyObject *)obj;
  138|      0|error:
  139|      0|    Py_DECREF(start);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|      0|    Py_DECREF(stop);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|      0|    Py_DECREF(step);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|       |    return NULL;
  143|  39.5k|}
PySlice_New:
  147|  39.5k|{
  148|  39.5k|    if (step == NULL) {
  ------------------
  |  Branch (148:9): [True: 30.3k, False: 9.19k]
  ------------------
  149|  30.3k|        step = Py_None;
  ------------------
  |  |  616|  30.3k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  150|  30.3k|    }
  151|  39.5k|    if (start == NULL) {
  ------------------
  |  Branch (151:9): [True: 2.16k, False: 37.3k]
  ------------------
  152|  2.16k|        start = Py_None;
  ------------------
  |  |  616|  2.16k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  153|  2.16k|    }
  154|  39.5k|    if (stop == NULL) {
  ------------------
  |  Branch (154:9): [True: 3.48k, False: 36.0k]
  ------------------
  155|  3.48k|        stop = Py_None;
  ------------------
  |  |  616|  3.48k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  156|  3.48k|    }
  157|  39.5k|    return _PyBuildSlice_ConsumeRefs(Py_NewRef(start),
  ------------------
  |  |  550|  39.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  39.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|  39.5k|                                              Py_NewRef(stop), Py_NewRef(step));
  ------------------
  |  |  550|  39.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  39.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                                            Py_NewRef(stop), Py_NewRef(step));
  ------------------
  |  |  550|  39.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  39.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|  39.5k|}
_PySlice_FromIndices:
  163|      1|{
  164|      1|    PyObject *start, *end, *slice;
  165|      1|    start = PyLong_FromSsize_t(istart);
  166|      1|    if (!start)
  ------------------
  |  Branch (166:9): [True: 0, False: 1]
  ------------------
  167|      0|        return NULL;
  168|      1|    end = PyLong_FromSsize_t(istop);
  169|      1|    if (!end) {
  ------------------
  |  Branch (169:9): [True: 0, False: 1]
  ------------------
  170|      0|        Py_DECREF(start);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|      0|        return NULL;
  172|      0|    }
  173|       |
  174|      1|    slice = _PyBuildSlice_ConsumeRefs(start, end, Py_None);
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  175|      1|    return slice;
  176|      1|}
PySlice_Unpack:
  213|  30.9k|{
  214|  30.9k|    PySliceObject *r = (PySliceObject*)_r;
  215|       |    /* this is harder to get right than you might think */
  216|       |
  217|  30.9k|    static_assert(PY_SSIZE_T_MIN + 1 <= -PY_SSIZE_T_MAX,
  218|  30.9k|                  "-PY_SSIZE_T_MAX < PY_SSIZE_T_MIN + 1");
  219|       |
  220|  30.9k|    if (r->step == Py_None) {
  ------------------
  |  |  616|  30.9k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (220:9): [True: 29.6k, False: 1.31k]
  ------------------
  221|  29.6k|        *step = 1;
  222|  29.6k|    }
  223|  1.31k|    else {
  224|  1.31k|        if (!_PyEval_SliceIndex(r->step, step)) return -1;
  ------------------
  |  Branch (224:13): [True: 857, False: 453]
  ------------------
  225|    453|        if (*step == 0) {
  ------------------
  |  Branch (225:13): [True: 55, False: 398]
  ------------------
  226|     55|            PyErr_SetString(PyExc_ValueError,
  227|     55|                            "slice step cannot be zero");
  228|     55|            return -1;
  229|     55|        }
  230|       |        /* Here *step might be -PY_SSIZE_T_MAX-1; in this case we replace it
  231|       |         * with -PY_SSIZE_T_MAX.  This doesn't affect the semantics, and it
  232|       |         * guards against later undefined behaviour resulting from code that
  233|       |         * does "step = -step" as part of a slice reversal.
  234|       |         */
  235|    398|        if (*step < -PY_SSIZE_T_MAX)
  ------------------
  |  |  137|    398|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (235:13): [True: 0, False: 398]
  ------------------
  236|      0|            *step = -PY_SSIZE_T_MAX;
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  237|    398|    }
  238|       |
  239|  30.0k|    if (r->start == Py_None) {
  ------------------
  |  |  616|  30.0k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (239:9): [True: 4.98k, False: 25.0k]
  ------------------
  240|  4.98k|        *start = *step < 0 ? PY_SSIZE_T_MAX : 0;
  ------------------
  |  |  137|  4.98k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (240:18): [True: 7, False: 4.97k]
  ------------------
  241|  4.98k|    }
  242|  25.0k|    else {
  243|  25.0k|        if (!_PyEval_SliceIndex(r->start, start)) return -1;
  ------------------
  |  Branch (243:13): [True: 106, False: 24.9k]
  ------------------
  244|  25.0k|    }
  245|       |
  246|  29.9k|    if (r->stop == Py_None) {
  ------------------
  |  |  616|  29.9k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (246:9): [True: 23.8k, False: 6.03k]
  ------------------
  247|  23.8k|        *stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;
  ------------------
  |  |  146|      7|#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
  |  |  ------------------
  |  |  |  |  137|      7|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
                      *stop = *step < 0 ? PY_SSIZE_T_MIN : PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  23.8k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (247:17): [True: 7, False: 23.8k]
  ------------------
  248|  23.8k|    }
  249|  6.03k|    else {
  250|  6.03k|        if (!_PyEval_SliceIndex(r->stop, stop)) return -1;
  ------------------
  |  Branch (250:13): [True: 79, False: 5.95k]
  ------------------
  251|  6.03k|    }
  252|       |
  253|  29.8k|    return 0;
  254|  29.9k|}
PySlice_AdjustIndices:
  259|   456k|{
  260|       |    /* this is harder to get right than you might think */
  261|       |
  262|   456k|    assert(step != 0);
  ------------------
  |  Branch (262:5): [True: 456k, False: 0]
  ------------------
  263|   456k|    assert(step >= -PY_SSIZE_T_MAX);
  ------------------
  |  Branch (263:5): [True: 456k, False: 0]
  ------------------
  264|       |
  265|   456k|    if (*start < 0) {
  ------------------
  |  Branch (265:9): [True: 120, False: 455k]
  ------------------
  266|    120|        *start += length;
  267|    120|        if (*start < 0) {
  ------------------
  |  Branch (267:13): [True: 0, False: 120]
  ------------------
  268|      0|            *start = (step < 0) ? -1 : 0;
  ------------------
  |  Branch (268:22): [True: 0, False: 0]
  ------------------
  269|      0|        }
  270|    120|    }
  271|   455k|    else if (*start >= length) {
  ------------------
  |  Branch (271:14): [True: 64.7k, False: 391k]
  ------------------
  272|  64.7k|        *start = (step < 0) ? length - 1 : length;
  ------------------
  |  Branch (272:18): [True: 7, False: 64.6k]
  ------------------
  273|  64.7k|    }
  274|       |
  275|   456k|    if (*stop < 0) {
  ------------------
  |  Branch (275:9): [True: 7, False: 456k]
  ------------------
  276|      7|        *stop += length;
  277|      7|        if (*stop < 0) {
  ------------------
  |  Branch (277:13): [True: 7, False: 0]
  ------------------
  278|      7|            *stop = (step < 0) ? -1 : 0;
  ------------------
  |  Branch (278:21): [True: 7, False: 0]
  ------------------
  279|      7|        }
  280|      7|    }
  281|   456k|    else if (*stop >= length) {
  ------------------
  |  Branch (281:14): [True: 286k, False: 169k]
  ------------------
  282|   286k|        *stop = (step < 0) ? length - 1 : length;
  ------------------
  |  Branch (282:17): [True: 0, False: 286k]
  ------------------
  283|   286k|    }
  284|       |
  285|   456k|    if (step < 0) {
  ------------------
  |  Branch (285:9): [True: 7, False: 456k]
  ------------------
  286|      7|        if (*stop < *start) {
  ------------------
  |  Branch (286:13): [True: 7, False: 0]
  ------------------
  287|      7|            return (*start - *stop - 1) / (-step) + 1;
  288|      7|        }
  289|      7|    }
  290|   456k|    else {
  291|   456k|        if (*start < *stop) {
  ------------------
  |  Branch (291:13): [True: 371k, False: 84.7k]
  ------------------
  292|   371k|            return (*stop - *start - 1) / step + 1;
  293|   371k|        }
  294|   456k|    }
  295|  84.7k|    return 0;
  296|   456k|}
_PySlice_GetLongIndices:
  392|     40|{
  393|     40|    PyObject *start=NULL, *stop=NULL, *step=NULL;
  394|     40|    PyObject *upper=NULL, *lower=NULL;
  395|     40|    int step_is_negative, cmp_result;
  396|       |
  397|       |    /* Convert step to an integer; raise for zero step. */
  398|     40|    if (self->step == Py_None) {
  ------------------
  |  |  616|     40|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (398:9): [True: 0, False: 40]
  ------------------
  399|      0|        step = _PyLong_GetOne();
  400|      0|        step_is_negative = 0;
  401|      0|    }
  402|     40|    else {
  403|     40|        step = evaluate_slice_index(self->step);
  404|     40|        if (step == NULL) {
  ------------------
  |  Branch (404:13): [True: 0, False: 40]
  ------------------
  405|      0|            goto error;
  406|      0|        }
  407|     40|        assert(PyLong_Check(step));
  ------------------
  |  Branch (407:9): [True: 40, False: 0]
  ------------------
  408|       |
  409|     40|        int step_sign;
  410|     40|        (void)PyLong_GetSign(step, &step_sign);
  411|     40|        if (step_sign == 0) {
  ------------------
  |  Branch (411:13): [True: 0, False: 40]
  ------------------
  412|      0|            PyErr_SetString(PyExc_ValueError,
  413|      0|                            "slice step cannot be zero");
  414|      0|            goto error;
  415|      0|        }
  416|     40|        step_is_negative = step_sign < 0;
  417|     40|    }
  418|       |
  419|       |    /* Find lower and upper bounds for start and stop. */
  420|     40|    if (step_is_negative) {
  ------------------
  |  Branch (420:9): [True: 40, False: 0]
  ------------------
  421|     40|        lower = PyLong_FromLong(-1L);
  422|     40|        if (lower == NULL)
  ------------------
  |  Branch (422:13): [True: 0, False: 40]
  ------------------
  423|      0|            goto error;
  424|       |
  425|     40|        upper = PyNumber_Add(length, lower);
  426|     40|        if (upper == NULL)
  ------------------
  |  Branch (426:13): [True: 0, False: 40]
  ------------------
  427|      0|            goto error;
  428|     40|    }
  429|      0|    else {
  430|      0|        lower = _PyLong_GetZero();
  431|      0|        upper = Py_NewRef(length);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|      0|    }
  433|       |
  434|       |    /* Compute start. */
  435|     40|    if (self->start == Py_None) {
  ------------------
  |  |  616|     40|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (435:9): [True: 40, False: 0]
  ------------------
  436|     40|        start = Py_NewRef(step_is_negative ? upper : lower);
  ------------------
  |  |  550|     40|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 40, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|     40|    }
  438|      0|    else {
  439|      0|        start = evaluate_slice_index(self->start);
  440|      0|        if (start == NULL)
  ------------------
  |  Branch (440:13): [True: 0, False: 0]
  ------------------
  441|      0|            goto error;
  442|       |
  443|      0|        if (_PyLong_IsNegative((PyLongObject *)start)) {
  ------------------
  |  Branch (443:13): [True: 0, False: 0]
  ------------------
  444|       |            /* start += length */
  445|      0|            PyObject *tmp = PyNumber_Add(start, length);
  446|      0|            Py_SETREF(start, tmp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  447|      0|            if (start == NULL)
  ------------------
  |  Branch (447:17): [True: 0, False: 0]
  ------------------
  448|      0|                goto error;
  449|       |
  450|      0|            cmp_result = PyObject_RichCompareBool(start, lower, Py_LT);
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  451|      0|            if (cmp_result < 0)
  ------------------
  |  Branch (451:17): [True: 0, False: 0]
  ------------------
  452|      0|                goto error;
  453|      0|            if (cmp_result) {
  ------------------
  |  Branch (453:17): [True: 0, False: 0]
  ------------------
  454|      0|                Py_SETREF(start, Py_NewRef(lower));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  455|      0|            }
  456|      0|        }
  457|      0|        else {
  458|      0|            cmp_result = PyObject_RichCompareBool(start, upper, Py_GT);
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  459|      0|            if (cmp_result < 0)
  ------------------
  |  Branch (459:17): [True: 0, False: 0]
  ------------------
  460|      0|                goto error;
  461|      0|            if (cmp_result) {
  ------------------
  |  Branch (461:17): [True: 0, False: 0]
  ------------------
  462|      0|                Py_SETREF(start, Py_NewRef(upper));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  463|      0|            }
  464|      0|        }
  465|      0|    }
  466|       |
  467|       |    /* Compute stop. */
  468|     40|    if (self->stop == Py_None) {
  ------------------
  |  |  616|     40|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (468:9): [True: 40, False: 0]
  ------------------
  469|     40|        stop = Py_NewRef(step_is_negative ? lower : upper);
  ------------------
  |  |  550|     40|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 40, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|     40|    }
  471|      0|    else {
  472|      0|        stop = evaluate_slice_index(self->stop);
  473|      0|        if (stop == NULL)
  ------------------
  |  Branch (473:13): [True: 0, False: 0]
  ------------------
  474|      0|            goto error;
  475|       |
  476|      0|        if (_PyLong_IsNegative((PyLongObject *)stop)) {
  ------------------
  |  Branch (476:13): [True: 0, False: 0]
  ------------------
  477|       |            /* stop += length */
  478|      0|            PyObject *tmp = PyNumber_Add(stop, length);
  479|      0|            Py_SETREF(stop, tmp);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  480|      0|            if (stop == NULL)
  ------------------
  |  Branch (480:17): [True: 0, False: 0]
  ------------------
  481|      0|                goto error;
  482|       |
  483|      0|            cmp_result = PyObject_RichCompareBool(stop, lower, Py_LT);
  ------------------
  |  |  652|      0|#define Py_LT 0
  ------------------
  484|      0|            if (cmp_result < 0)
  ------------------
  |  Branch (484:17): [True: 0, False: 0]
  ------------------
  485|      0|                goto error;
  486|      0|            if (cmp_result) {
  ------------------
  |  Branch (486:17): [True: 0, False: 0]
  ------------------
  487|      0|                Py_SETREF(stop, Py_NewRef(lower));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  488|      0|            }
  489|      0|        }
  490|      0|        else {
  491|      0|            cmp_result = PyObject_RichCompareBool(stop, upper, Py_GT);
  ------------------
  |  |  656|      0|#define Py_GT 4
  ------------------
  492|      0|            if (cmp_result < 0)
  ------------------
  |  Branch (492:17): [True: 0, False: 0]
  ------------------
  493|      0|                goto error;
  494|      0|            if (cmp_result) {
  ------------------
  |  Branch (494:17): [True: 0, False: 0]
  ------------------
  495|      0|                Py_SETREF(stop, Py_NewRef(upper));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  496|      0|            }
  497|      0|        }
  498|      0|    }
  499|       |
  500|     40|    *start_ptr = start;
  501|     40|    *stop_ptr = stop;
  502|     40|    *step_ptr = step;
  503|     40|    Py_DECREF(upper);
  ------------------
  |  |  430|     40|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  504|     40|    Py_DECREF(lower);
  ------------------
  |  |  430|     40|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  505|     40|    return 0;
  506|       |
  507|      0|  error:
  508|      0|    *start_ptr = *stop_ptr = *step_ptr = NULL;
  509|      0|    Py_XDECREF(start);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  510|      0|    Py_XDECREF(stop);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|    Py_XDECREF(step);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  512|      0|    Py_XDECREF(upper);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|      0|    Py_XDECREF(lower);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|      0|    return -1;
  515|     40|}
sliceobject.c:evaluate_slice_index:
  372|     40|{
  373|     40|    if (_PyIndex_Check(v)) {
  ------------------
  |  Branch (373:9): [True: 40, False: 0]
  ------------------
  374|     40|        return PyNumber_Index(v);
  375|     40|    }
  376|      0|    else {
  377|      0|        PyErr_SetString(PyExc_TypeError,
  378|      0|                        "slice indices must be integers or "
  379|      0|                        "None or have an __index__ method");
  380|       |        return NULL;
  381|      0|    }
  382|     40|}
sliceobject.c:slice_dealloc:
  343|  39.4k|{
  344|  39.4k|    PySliceObject *r = _PySlice_CAST(op);
  ------------------
  |  |   25|  39.4k|#define _PySlice_CAST(op) _Py_CAST(PySliceObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  39.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  345|  39.4k|    PyObject_GC_UnTrack(r);
  346|  39.4k|    Py_DECREF(r->step);
  ------------------
  |  |  430|  39.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  39.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|  39.4k|    Py_DECREF(r->start);
  ------------------
  |  |  430|  39.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  39.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  348|  39.4k|    Py_DECREF(r->stop);
  ------------------
  |  |  430|  39.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  39.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|  39.4k|    _Py_FREELIST_FREE(slices, r, PyObject_GC_Del);
  ------------------
  |  |   35|  39.4k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  39.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  39.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  39.4k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   21|  39.4k|#  define Py_slices_MAXFREELIST 1
  |  |  ------------------
  ------------------
  350|  39.4k|}
sliceobject.c:slice_hash:
  644|  16.6k|{
  645|  16.6k|    PySliceObject *v = _PySlice_CAST(op);
  ------------------
  |  |   25|  16.6k|#define _PySlice_CAST(op) _Py_CAST(PySliceObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  16.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  646|  16.6k|    Py_uhash_t acc = _PyHASH_XXPRIME_5;
  ------------------
  |  |  633|  16.6k|#define _PyHASH_XXPRIME_5 ((Py_uhash_t)2870177450012600261ULL)
  ------------------
  647|  16.6k|#define _PyHASH_SLICE_PART(com) { \
  648|  16.6k|    Py_uhash_t lane = PyObject_Hash(v->com); \
  649|  16.6k|    if(lane == (Py_uhash_t)-1) { \
  650|  16.6k|        return -1; \
  651|  16.6k|    } \
  652|  16.6k|    acc += lane * _PyHASH_XXPRIME_2; \
  653|  16.6k|    acc = _PyHASH_XXROTATE(acc); \
  654|  16.6k|    acc *= _PyHASH_XXPRIME_1; \
  655|  16.6k|}
  656|  16.6k|    _PyHASH_SLICE_PART(start);
  ------------------
  |  |  647|  16.6k|#define _PyHASH_SLICE_PART(com) { \
  |  |  648|  16.6k|    Py_uhash_t lane = PyObject_Hash(v->com); \
  |  |  649|  16.6k|    if(lane == (Py_uhash_t)-1) { \
  |  |  ------------------
  |  |  |  Branch (649:8): [True: 0, False: 16.6k]
  |  |  ------------------
  |  |  650|      0|        return -1; \
  |  |  651|      0|    } \
  |  |  652|  16.6k|    acc += lane * _PyHASH_XXPRIME_2; \
  |  |  ------------------
  |  |  |  |  632|  16.6k|#define _PyHASH_XXPRIME_2 ((Py_uhash_t)14029467366897019727ULL)
  |  |  ------------------
  |  |  653|  16.6k|    acc = _PyHASH_XXROTATE(acc); \
  |  |  ------------------
  |  |  |  |  634|  16.6k|#define _PyHASH_XXROTATE(x) ((x << 31) | (x >> 33))  /* Rotate left 31 bits */
  |  |  ------------------
  |  |  654|  16.6k|    acc *= _PyHASH_XXPRIME_1; \
  |  |  ------------------
  |  |  |  |  631|  16.6k|#define _PyHASH_XXPRIME_1 ((Py_uhash_t)11400714785074694791ULL)
  |  |  ------------------
  |  |  655|  16.6k|}
  ------------------
  657|  16.6k|    _PyHASH_SLICE_PART(stop);
  ------------------
  |  |  647|  16.6k|#define _PyHASH_SLICE_PART(com) { \
  |  |  648|  16.6k|    Py_uhash_t lane = PyObject_Hash(v->com); \
  |  |  649|  16.6k|    if(lane == (Py_uhash_t)-1) { \
  |  |  ------------------
  |  |  |  Branch (649:8): [True: 0, False: 16.6k]
  |  |  ------------------
  |  |  650|      0|        return -1; \
  |  |  651|      0|    } \
  |  |  652|  16.6k|    acc += lane * _PyHASH_XXPRIME_2; \
  |  |  ------------------
  |  |  |  |  632|  16.6k|#define _PyHASH_XXPRIME_2 ((Py_uhash_t)14029467366897019727ULL)
  |  |  ------------------
  |  |  653|  16.6k|    acc = _PyHASH_XXROTATE(acc); \
  |  |  ------------------
  |  |  |  |  634|  16.6k|#define _PyHASH_XXROTATE(x) ((x << 31) | (x >> 33))  /* Rotate left 31 bits */
  |  |  ------------------
  |  |  654|  16.6k|    acc *= _PyHASH_XXPRIME_1; \
  |  |  ------------------
  |  |  |  |  631|  16.6k|#define _PyHASH_XXPRIME_1 ((Py_uhash_t)11400714785074694791ULL)
  |  |  ------------------
  |  |  655|  16.6k|}
  ------------------
  658|  16.6k|    _PyHASH_SLICE_PART(step);
  ------------------
  |  |  647|  16.6k|#define _PyHASH_SLICE_PART(com) { \
  |  |  648|  16.6k|    Py_uhash_t lane = PyObject_Hash(v->com); \
  |  |  649|  16.6k|    if(lane == (Py_uhash_t)-1) { \
  |  |  ------------------
  |  |  |  Branch (649:8): [True: 0, False: 16.6k]
  |  |  ------------------
  |  |  650|      0|        return -1; \
  |  |  651|      0|    } \
  |  |  652|  16.6k|    acc += lane * _PyHASH_XXPRIME_2; \
  |  |  ------------------
  |  |  |  |  632|  16.6k|#define _PyHASH_XXPRIME_2 ((Py_uhash_t)14029467366897019727ULL)
  |  |  ------------------
  |  |  653|  16.6k|    acc = _PyHASH_XXROTATE(acc); \
  |  |  ------------------
  |  |  |  |  634|  16.6k|#define _PyHASH_XXROTATE(x) ((x << 31) | (x >> 33))  /* Rotate left 31 bits */
  |  |  ------------------
  |  |  654|  16.6k|    acc *= _PyHASH_XXPRIME_1; \
  |  |  ------------------
  |  |  |  |  631|  16.6k|#define _PyHASH_XXPRIME_1 ((Py_uhash_t)11400714785074694791ULL)
  |  |  ------------------
  |  |  655|  16.6k|}
  ------------------
  659|  16.6k|#undef _PyHASH_SLICE_PART
  660|  16.6k|    if(acc == (Py_uhash_t)-1) {
  ------------------
  |  Branch (660:8): [True: 0, False: 16.6k]
  ------------------
  661|      0|        return 1546275796;
  662|      0|    }
  663|  16.6k|    return acc;
  664|  16.6k|}
sliceobject.c:slice_traverse:
  621|  1.36k|{
  622|  1.36k|    PySliceObject *v = _PySlice_CAST(op);
  ------------------
  |  |   25|  1.36k|#define _PySlice_CAST(op) _Py_CAST(PySliceObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  1.36k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  623|  1.36k|    Py_VISIT(v->start);
  ------------------
  |  |  194|  1.36k|    do {                                                                \
  |  |  195|  1.36k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.36k, False: 0]
  |  |  ------------------
  |  |  196|  1.36k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.36k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.36k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.36k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.36k]
  |  |  ------------------
  |  |  198|  1.36k|                return vret;                                            \
  |  |  199|  1.36k|        }                                                               \
  |  |  200|  1.36k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.36k]
  |  |  ------------------
  ------------------
  624|  1.36k|    Py_VISIT(v->stop);
  ------------------
  |  |  194|  1.36k|    do {                                                                \
  |  |  195|  1.36k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.36k, False: 0]
  |  |  ------------------
  |  |  196|  1.36k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.36k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.36k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.36k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.36k]
  |  |  ------------------
  |  |  198|  1.36k|                return vret;                                            \
  |  |  199|  1.36k|        }                                                               \
  |  |  200|  1.36k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.36k]
  |  |  ------------------
  ------------------
  625|  1.36k|    Py_VISIT(v->step);
  ------------------
  |  |  194|  1.36k|    do {                                                                \
  |  |  195|  1.36k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.36k, False: 0]
  |  |  ------------------
  |  |  196|  1.36k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.36k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.36k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.36k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.36k]
  |  |  ------------------
  |  |  198|  1.36k|                return vret;                                            \
  |  |  199|  1.36k|        }                                                               \
  |  |  200|  1.36k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 1.36k]
  |  |  ------------------
  ------------------
  626|  1.36k|    return 0;
  627|  1.36k|}
sliceobject.c:slice_richcompare:
  574|  8.82k|{
  575|  8.82k|    if (!PySlice_Check(v) || !PySlice_Check(w))
  ------------------
  |  |   22|  8.82k|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|  17.6k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!PySlice_Check(v) || !PySlice_Check(w))
  ------------------
  |  |   22|  8.82k|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|  8.82k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (575:9): [True: 0, False: 8.82k]
  |  Branch (575:30): [True: 0, False: 8.82k]
  ------------------
  576|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  577|       |
  578|  8.82k|    if (v == w) {
  ------------------
  |  Branch (578:9): [True: 0, False: 8.82k]
  ------------------
  579|      0|        PyObject *res;
  580|       |        /* XXX Do we really need this shortcut?
  581|       |           There's a unit test for it, but is that fair? */
  582|      0|        switch (op) {
  583|      0|        case Py_EQ:
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
  |  Branch (583:9): [True: 0, False: 0]
  ------------------
  584|      0|        case Py_LE:
  ------------------
  |  |  653|      0|#define Py_LE 1
  ------------------
  |  Branch (584:9): [True: 0, False: 0]
  ------------------
  585|      0|        case Py_GE:
  ------------------
  |  |  657|      0|#define Py_GE 5
  ------------------
  |  Branch (585:9): [True: 0, False: 0]
  ------------------
  586|      0|            res = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|      0|            break;
  588|      0|        default:
  ------------------
  |  Branch (588:9): [True: 0, False: 0]
  ------------------
  589|      0|            res = Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  590|      0|            break;
  591|      0|        }
  592|      0|        return Py_NewRef(res);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  593|      0|    }
  594|       |
  595|       |
  596|  8.82k|    PyObject *t1 = PyTuple_Pack(3,
  597|  8.82k|                                ((PySliceObject *)v)->start,
  598|  8.82k|                                ((PySliceObject *)v)->stop,
  599|  8.82k|                                ((PySliceObject *)v)->step);
  600|  8.82k|    if (t1 == NULL) {
  ------------------
  |  Branch (600:9): [True: 0, False: 8.82k]
  ------------------
  601|      0|        return NULL;
  602|      0|    }
  603|       |
  604|  8.82k|    PyObject *t2 = PyTuple_Pack(3,
  605|  8.82k|                                ((PySliceObject *)w)->start,
  606|  8.82k|                                ((PySliceObject *)w)->stop,
  607|  8.82k|                                ((PySliceObject *)w)->step);
  608|  8.82k|    if (t2 == NULL) {
  ------------------
  |  Branch (608:9): [True: 0, False: 8.82k]
  ------------------
  609|      0|        Py_DECREF(t1);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|      0|        return NULL;
  611|      0|    }
  612|       |
  613|  8.82k|    PyObject *res = PyObject_RichCompare(t1, t2, op);
  614|  8.82k|    Py_DECREF(t1);
  ------------------
  |  |  430|  8.82k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  615|  8.82k|    Py_DECREF(t2);
  ------------------
  |  |  430|  8.82k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  616|  8.82k|    return res;
  617|  8.82k|}

unicodeobject.c:ucs1lib_utf8_encoder:
  267|  7.96k|{
  268|       |#if STRINGLIB_SIZEOF_CHAR > 1
  269|       |    PyObject *error_handler_obj = NULL;
  270|       |    PyObject *exc = NULL;
  271|       |    PyObject *rep = NULL;
  272|       |#endif
  273|  7.96k|#if STRINGLIB_SIZEOF_CHAR == 1
  274|  7.96k|    const Py_ssize_t max_char_size = 2;
  275|       |#elif STRINGLIB_SIZEOF_CHAR == 2
  276|       |    const Py_ssize_t max_char_size = 3;
  277|       |#else /*  STRINGLIB_SIZEOF_CHAR == 4 */
  278|       |    const Py_ssize_t max_char_size = 4;
  279|       |#endif
  280|       |
  281|  7.96k|    assert(size >= 0);
  ------------------
  |  Branch (281:5): [True: 7.96k, False: 0]
  ------------------
  282|  7.96k|    if (size > PY_SSIZE_T_MAX / max_char_size) {
  ------------------
  |  |  137|  7.96k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (282:9): [True: 0, False: 7.96k]
  ------------------
  283|       |        /* integer overflow */
  284|      0|        PyErr_NoMemory();
  285|      0|        *end = NULL;
  286|      0|        return NULL;
  287|      0|    }
  288|       |
  289|  7.96k|    PyBytesWriter *writer = PyBytesWriter_Create(size * max_char_size);
  290|  7.96k|    if (writer == NULL) {
  ------------------
  |  Branch (290:9): [True: 0, False: 7.96k]
  ------------------
  291|      0|        *end = NULL;
  292|      0|        return NULL;
  293|      0|    }
  294|       |    /* next free byte in output buffer */
  295|  7.96k|    char *p = PyBytesWriter_GetData(writer);
  296|       |
  297|  7.96k|    Py_ssize_t i;                /* index into data of next input character */
  298|  2.93M|    for (i = 0; i < size;) {
  ------------------
  |  Branch (298:17): [True: 2.92M, False: 7.96k]
  ------------------
  299|  2.92M|        Py_UCS4 ch = data[i++];
  300|       |
  301|  2.92M|        if (ch < 0x80) {
  ------------------
  |  Branch (301:13): [True: 2.31M, False: 610k]
  ------------------
  302|       |            /* Encode ASCII */
  303|  2.31M|            *p++ = (char) ch;
  304|       |
  305|  2.31M|        }
  306|   610k|        else
  307|       |#if STRINGLIB_SIZEOF_CHAR > 1
  308|       |        if (ch < 0x0800)
  309|       |#endif
  310|   610k|        {
  311|       |            /* Encode Latin-1 */
  312|   610k|            *p++ = (char)(0xc0 | (ch >> 6));
  313|   610k|            *p++ = (char)(0x80 | (ch & 0x3f));
  314|   610k|        }
  315|       |#if STRINGLIB_SIZEOF_CHAR > 1
  316|       |        else if (Py_UNICODE_IS_SURROGATE(ch)) {
  317|       |            Py_ssize_t startpos, endpos, newpos;
  318|       |            Py_ssize_t k;
  319|       |            if (error_handler == _Py_ERROR_UNKNOWN) {
  320|       |                error_handler = _Py_GetErrorHandler(errors);
  321|       |            }
  322|       |
  323|       |            startpos = i-1;
  324|       |            endpos = startpos+1;
  325|       |
  326|       |            while ((endpos < size) && Py_UNICODE_IS_SURROGATE(data[endpos]))
  327|       |                endpos++;
  328|       |
  329|       |            /* Only overallocate the buffer if it's not the last write */
  330|       |            writer->overallocate = (endpos < size);
  331|       |
  332|       |            switch (error_handler)
  333|       |            {
  334|       |            case _Py_ERROR_REPLACE:
  335|       |                memset(p, '?', endpos - startpos);
  336|       |                p += (endpos - startpos);
  337|       |                _Py_FALLTHROUGH;
  338|       |            case _Py_ERROR_IGNORE:
  339|       |                i += (endpos - startpos - 1);
  340|       |                break;
  341|       |
  342|       |            case _Py_ERROR_SURROGATEPASS:
  343|       |                for (k=startpos; k<endpos; k++) {
  344|       |                    ch = data[k];
  345|       |                    *p++ = (char)(0xe0 | (ch >> 12));
  346|       |                    *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  347|       |                    *p++ = (char)(0x80 | (ch & 0x3f));
  348|       |                }
  349|       |                i += (endpos - startpos - 1);
  350|       |                break;
  351|       |
  352|       |            case _Py_ERROR_BACKSLASHREPLACE:
  353|       |                p = backslashreplace(writer, p,
  354|       |                                     unicode, startpos, endpos);
  355|       |                if (p == NULL)
  356|       |                    goto error;
  357|       |                i += (endpos - startpos - 1);
  358|       |                break;
  359|       |
  360|       |            case _Py_ERROR_XMLCHARREFREPLACE:
  361|       |                p = xmlcharrefreplace(writer, p,
  362|       |                                      unicode, startpos, endpos);
  363|       |                if (p == NULL)
  364|       |                    goto error;
  365|       |                i += (endpos - startpos - 1);
  366|       |                break;
  367|       |
  368|       |            case _Py_ERROR_SURROGATEESCAPE:
  369|       |                for (k=startpos; k<endpos; k++) {
  370|       |                    ch = data[k];
  371|       |                    if (!(0xDC80 <= ch && ch <= 0xDCFF))
  372|       |                        break;
  373|       |                    *p++ = (char)(ch & 0xff);
  374|       |                }
  375|       |                if (k >= endpos) {
  376|       |                    i += (endpos - startpos - 1);
  377|       |                    break;
  378|       |                }
  379|       |                startpos = k;
  380|       |                assert(startpos < endpos);
  381|       |                _Py_FALLTHROUGH;
  382|       |            default:
  383|       |                rep = unicode_encode_call_errorhandler(
  384|       |                      errors, &error_handler_obj, "utf-8", "surrogates not allowed",
  385|       |                      unicode, &exc, startpos, endpos, &newpos);
  386|       |                if (!rep)
  387|       |                    goto error;
  388|       |
  389|       |                if (newpos < startpos) {
  390|       |                    writer->overallocate = 1;
  391|       |                    p = PyBytesWriter_GrowAndUpdatePointer(writer,
  392|       |                                               max_char_size * (startpos - newpos),
  393|       |                                               p);
  394|       |                    if (p == NULL) {
  395|       |                        goto error;
  396|       |                    }
  397|       |                }
  398|       |                else {
  399|       |                    /* Only overallocate the buffer if it's not the last write */
  400|       |                    writer->overallocate = (newpos < size);
  401|       |
  402|       |                    /* subtract preallocated bytes */
  403|       |                    Py_ssize_t prealloc = max_char_size * (newpos - startpos);
  404|       |                    p = PyBytesWriter_GrowAndUpdatePointer(writer, -prealloc, p);
  405|       |                    if (p == NULL) {
  406|       |                        goto error;
  407|       |                    }
  408|       |                }
  409|       |
  410|       |                const char *rep_str;
  411|       |                Py_ssize_t rep_len;
  412|       |                if (PyBytes_Check(rep)) {
  413|       |                    rep_str = PyBytes_AS_STRING(rep);
  414|       |                    rep_len = PyBytes_GET_SIZE(rep);
  415|       |                }
  416|       |                else {
  417|       |                    /* rep is unicode */
  418|       |                    if (!PyUnicode_IS_ASCII(rep)) {
  419|       |                        raise_encode_exception(&exc, "utf-8", unicode,
  420|       |                                               startpos, endpos,
  421|       |                                               "surrogates not allowed");
  422|       |                        goto error;
  423|       |                    }
  424|       |
  425|       |                    rep_str = PyUnicode_DATA(rep);
  426|       |                    rep_len = PyUnicode_GET_LENGTH(rep);
  427|       |                }
  428|       |
  429|       |                p = PyBytesWriter_GrowAndUpdatePointer(writer, rep_len, p);
  430|       |                if (p == NULL) {
  431|       |                    goto error;
  432|       |                }
  433|       |                memcpy(p, rep_str, rep_len);
  434|       |                p += rep_len;
  435|       |                Py_CLEAR(rep);
  436|       |
  437|       |                i = newpos;
  438|       |            }
  439|       |
  440|       |            /* If overallocation was disabled, ensure that it was the last
  441|       |               write. Otherwise, we missed an optimization */
  442|       |            assert(writer->overallocate || i == size);
  443|       |        }
  444|       |        else
  445|       |#if STRINGLIB_SIZEOF_CHAR > 2
  446|       |        if (ch < 0x10000)
  447|       |#endif
  448|       |        {
  449|       |            *p++ = (char)(0xe0 | (ch >> 12));
  450|       |            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  451|       |            *p++ = (char)(0x80 | (ch & 0x3f));
  452|       |        }
  453|       |#if STRINGLIB_SIZEOF_CHAR > 2
  454|       |        else /* ch >= 0x10000 */
  455|       |        {
  456|       |            assert(ch <= MAX_UNICODE);
  457|       |            /* Encode UCS4 Unicode ordinals */
  458|       |            *p++ = (char)(0xf0 | (ch >> 18));
  459|       |            *p++ = (char)(0x80 | ((ch >> 12) & 0x3f));
  460|       |            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  461|       |            *p++ = (char)(0x80 | (ch & 0x3f));
  462|       |        }
  463|       |#endif /* STRINGLIB_SIZEOF_CHAR > 2 */
  464|       |#endif /* STRINGLIB_SIZEOF_CHAR > 1 */
  465|  2.92M|    }
  466|       |
  467|       |#if STRINGLIB_SIZEOF_CHAR > 1
  468|       |    Py_XDECREF(error_handler_obj);
  469|       |    Py_XDECREF(exc);
  470|       |#endif
  471|  7.96k|    *end = p;
  472|  7.96k|    return writer;
  473|       |
  474|       |#if STRINGLIB_SIZEOF_CHAR > 1
  475|       | error:
  476|       |    PyBytesWriter_Discard(writer);
  477|       |    Py_XDECREF(rep);
  478|       |    Py_XDECREF(error_handler_obj);
  479|       |    Py_XDECREF(exc);
  480|       |    *end = NULL;
  481|       |    return NULL;
  482|       |#endif
  483|  7.96k|}
unicodeobject.c:ucs2lib_utf8_encoder:
  267|  4.90k|{
  268|  4.90k|#if STRINGLIB_SIZEOF_CHAR > 1
  269|  4.90k|    PyObject *error_handler_obj = NULL;
  270|  4.90k|    PyObject *exc = NULL;
  271|  4.90k|    PyObject *rep = NULL;
  272|  4.90k|#endif
  273|       |#if STRINGLIB_SIZEOF_CHAR == 1
  274|       |    const Py_ssize_t max_char_size = 2;
  275|       |#elif STRINGLIB_SIZEOF_CHAR == 2
  276|       |    const Py_ssize_t max_char_size = 3;
  277|       |#else /*  STRINGLIB_SIZEOF_CHAR == 4 */
  278|       |    const Py_ssize_t max_char_size = 4;
  279|       |#endif
  280|       |
  281|  4.90k|    assert(size >= 0);
  ------------------
  |  Branch (281:5): [True: 4.90k, False: 0]
  ------------------
  282|  4.90k|    if (size > PY_SSIZE_T_MAX / max_char_size) {
  ------------------
  |  |  137|  4.90k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (282:9): [True: 0, False: 4.90k]
  ------------------
  283|       |        /* integer overflow */
  284|      0|        PyErr_NoMemory();
  285|      0|        *end = NULL;
  286|      0|        return NULL;
  287|      0|    }
  288|       |
  289|  4.90k|    PyBytesWriter *writer = PyBytesWriter_Create(size * max_char_size);
  290|  4.90k|    if (writer == NULL) {
  ------------------
  |  Branch (290:9): [True: 0, False: 4.90k]
  ------------------
  291|      0|        *end = NULL;
  292|      0|        return NULL;
  293|      0|    }
  294|       |    /* next free byte in output buffer */
  295|  4.90k|    char *p = PyBytesWriter_GetData(writer);
  296|       |
  297|  4.90k|    Py_ssize_t i;                /* index into data of next input character */
  298|  4.84M|    for (i = 0; i < size;) {
  ------------------
  |  Branch (298:17): [True: 4.83M, False: 4.88k]
  ------------------
  299|  4.83M|        Py_UCS4 ch = data[i++];
  300|       |
  301|  4.83M|        if (ch < 0x80) {
  ------------------
  |  Branch (301:13): [True: 3.96M, False: 871k]
  ------------------
  302|       |            /* Encode ASCII */
  303|  3.96M|            *p++ = (char) ch;
  304|       |
  305|  3.96M|        }
  306|   871k|        else
  307|   871k|#if STRINGLIB_SIZEOF_CHAR > 1
  308|   871k|        if (ch < 0x0800)
  ------------------
  |  Branch (308:13): [True: 608k, False: 263k]
  ------------------
  309|   608k|#endif
  310|   608k|        {
  311|       |            /* Encode Latin-1 */
  312|   608k|            *p++ = (char)(0xc0 | (ch >> 6));
  313|   608k|            *p++ = (char)(0x80 | (ch & 0x3f));
  314|   608k|        }
  315|   263k|#if STRINGLIB_SIZEOF_CHAR > 1
  316|   263k|        else if (Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (316:18): [True: 21, False: 263k]
  ------------------
  317|     21|            Py_ssize_t startpos, endpos, newpos;
  318|     21|            Py_ssize_t k;
  319|     21|            if (error_handler == _Py_ERROR_UNKNOWN) {
  ------------------
  |  Branch (319:17): [True: 0, False: 21]
  ------------------
  320|      0|                error_handler = _Py_GetErrorHandler(errors);
  321|      0|            }
  322|       |
  323|     21|            startpos = i-1;
  324|     21|            endpos = startpos+1;
  325|       |
  326|     27|            while ((endpos < size) && Py_UNICODE_IS_SURROGATE(data[endpos]))
  ------------------
  |  Branch (326:20): [True: 26, False: 1]
  |  Branch (326:39): [True: 6, False: 20]
  ------------------
  327|      6|                endpos++;
  328|       |
  329|       |            /* Only overallocate the buffer if it's not the last write */
  330|     21|            writer->overallocate = (endpos < size);
  331|       |
  332|     21|            switch (error_handler)
  333|     21|            {
  334|      0|            case _Py_ERROR_REPLACE:
  ------------------
  |  Branch (334:13): [True: 0, False: 21]
  ------------------
  335|      0|                memset(p, '?', endpos - startpos);
  336|      0|                p += (endpos - startpos);
  337|      0|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  338|      0|            case _Py_ERROR_IGNORE:
  ------------------
  |  Branch (338:13): [True: 0, False: 21]
  ------------------
  339|      0|                i += (endpos - startpos - 1);
  340|      0|                break;
  341|       |
  342|      0|            case _Py_ERROR_SURROGATEPASS:
  ------------------
  |  Branch (342:13): [True: 0, False: 21]
  ------------------
  343|      0|                for (k=startpos; k<endpos; k++) {
  ------------------
  |  Branch (343:34): [True: 0, False: 0]
  ------------------
  344|      0|                    ch = data[k];
  345|      0|                    *p++ = (char)(0xe0 | (ch >> 12));
  346|      0|                    *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  347|      0|                    *p++ = (char)(0x80 | (ch & 0x3f));
  348|      0|                }
  349|      0|                i += (endpos - startpos - 1);
  350|      0|                break;
  351|       |
  352|      0|            case _Py_ERROR_BACKSLASHREPLACE:
  ------------------
  |  Branch (352:13): [True: 0, False: 21]
  ------------------
  353|      0|                p = backslashreplace(writer, p,
  354|      0|                                     unicode, startpos, endpos);
  355|      0|                if (p == NULL)
  ------------------
  |  Branch (355:21): [True: 0, False: 0]
  ------------------
  356|      0|                    goto error;
  357|      0|                i += (endpos - startpos - 1);
  358|      0|                break;
  359|       |
  360|      0|            case _Py_ERROR_XMLCHARREFREPLACE:
  ------------------
  |  Branch (360:13): [True: 0, False: 21]
  ------------------
  361|      0|                p = xmlcharrefreplace(writer, p,
  362|      0|                                      unicode, startpos, endpos);
  363|      0|                if (p == NULL)
  ------------------
  |  Branch (363:21): [True: 0, False: 0]
  ------------------
  364|      0|                    goto error;
  365|      0|                i += (endpos - startpos - 1);
  366|      0|                break;
  367|       |
  368|      0|            case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (368:13): [True: 0, False: 21]
  ------------------
  369|      0|                for (k=startpos; k<endpos; k++) {
  ------------------
  |  Branch (369:34): [True: 0, False: 0]
  ------------------
  370|      0|                    ch = data[k];
  371|      0|                    if (!(0xDC80 <= ch && ch <= 0xDCFF))
  ------------------
  |  Branch (371:27): [True: 0, False: 0]
  |  Branch (371:43): [True: 0, False: 0]
  ------------------
  372|      0|                        break;
  373|      0|                    *p++ = (char)(ch & 0xff);
  374|      0|                }
  375|      0|                if (k >= endpos) {
  ------------------
  |  Branch (375:21): [True: 0, False: 0]
  ------------------
  376|      0|                    i += (endpos - startpos - 1);
  377|      0|                    break;
  378|      0|                }
  379|      0|                startpos = k;
  380|      0|                assert(startpos < endpos);
  ------------------
  |  Branch (380:17): [True: 0, False: 0]
  ------------------
  381|      0|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  382|     21|            default:
  ------------------
  |  Branch (382:13): [True: 21, False: 0]
  ------------------
  383|     21|                rep = unicode_encode_call_errorhandler(
  384|     21|                      errors, &error_handler_obj, "utf-8", "surrogates not allowed",
  385|     21|                      unicode, &exc, startpos, endpos, &newpos);
  386|     21|                if (!rep)
  ------------------
  |  Branch (386:21): [True: 21, False: 0]
  ------------------
  387|     21|                    goto error;
  388|       |
  389|      0|                if (newpos < startpos) {
  ------------------
  |  Branch (389:21): [True: 0, False: 0]
  ------------------
  390|      0|                    writer->overallocate = 1;
  391|      0|                    p = PyBytesWriter_GrowAndUpdatePointer(writer,
  392|      0|                                               max_char_size * (startpos - newpos),
  393|      0|                                               p);
  394|      0|                    if (p == NULL) {
  ------------------
  |  Branch (394:25): [True: 0, False: 0]
  ------------------
  395|      0|                        goto error;
  396|      0|                    }
  397|      0|                }
  398|      0|                else {
  399|       |                    /* Only overallocate the buffer if it's not the last write */
  400|      0|                    writer->overallocate = (newpos < size);
  401|       |
  402|       |                    /* subtract preallocated bytes */
  403|      0|                    Py_ssize_t prealloc = max_char_size * (newpos - startpos);
  404|      0|                    p = PyBytesWriter_GrowAndUpdatePointer(writer, -prealloc, p);
  405|      0|                    if (p == NULL) {
  ------------------
  |  Branch (405:25): [True: 0, False: 0]
  ------------------
  406|      0|                        goto error;
  407|      0|                    }
  408|      0|                }
  409|       |
  410|      0|                const char *rep_str;
  411|      0|                Py_ssize_t rep_len;
  412|      0|                if (PyBytes_Check(rep)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|      0|                    rep_str = PyBytes_AS_STRING(rep);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|      0|                    rep_len = PyBytes_GET_SIZE(rep);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|      0|                }
  416|      0|                else {
  417|       |                    /* rep is unicode */
  418|      0|                    if (!PyUnicode_IS_ASCII(rep)) {
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (418:25): [True: 0, False: 0]
  ------------------
  419|      0|                        raise_encode_exception(&exc, "utf-8", unicode,
  420|      0|                                               startpos, endpos,
  421|      0|                                               "surrogates not allowed");
  422|      0|                        goto error;
  423|      0|                    }
  424|       |
  425|      0|                    rep_str = PyUnicode_DATA(rep);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|      0|                    rep_len = PyUnicode_GET_LENGTH(rep);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|      0|                }
  428|       |
  429|      0|                p = PyBytesWriter_GrowAndUpdatePointer(writer, rep_len, p);
  430|      0|                if (p == NULL) {
  ------------------
  |  Branch (430:21): [True: 0, False: 0]
  ------------------
  431|      0|                    goto error;
  432|      0|                }
  433|      0|                memcpy(p, rep_str, rep_len);
  434|      0|                p += rep_len;
  435|      0|                Py_CLEAR(rep);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  436|       |
  437|      0|                i = newpos;
  438|     21|            }
  439|       |
  440|       |            /* If overallocation was disabled, ensure that it was the last
  441|       |               write. Otherwise, we missed an optimization */
  442|     21|            assert(writer->overallocate || i == size);
  ------------------
  |  Branch (442:13): [True: 0, False: 0]
  |  Branch (442:13): [True: 0, False: 0]
  ------------------
  443|      0|        }
  444|   263k|        else
  445|       |#if STRINGLIB_SIZEOF_CHAR > 2
  446|       |        if (ch < 0x10000)
  447|       |#endif
  448|   263k|        {
  449|   263k|            *p++ = (char)(0xe0 | (ch >> 12));
  450|   263k|            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  451|   263k|            *p++ = (char)(0x80 | (ch & 0x3f));
  452|   263k|        }
  453|       |#if STRINGLIB_SIZEOF_CHAR > 2
  454|       |        else /* ch >= 0x10000 */
  455|       |        {
  456|       |            assert(ch <= MAX_UNICODE);
  457|       |            /* Encode UCS4 Unicode ordinals */
  458|       |            *p++ = (char)(0xf0 | (ch >> 18));
  459|       |            *p++ = (char)(0x80 | ((ch >> 12) & 0x3f));
  460|       |            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  461|       |            *p++ = (char)(0x80 | (ch & 0x3f));
  462|       |        }
  463|       |#endif /* STRINGLIB_SIZEOF_CHAR > 2 */
  464|  4.83M|#endif /* STRINGLIB_SIZEOF_CHAR > 1 */
  465|  4.83M|    }
  466|       |
  467|  4.88k|#if STRINGLIB_SIZEOF_CHAR > 1
  468|  4.88k|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|  4.88k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|  4.88k|    Py_XDECREF(exc);
  ------------------
  |  |  524|  4.88k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.88k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.88k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|  4.88k|#endif
  471|  4.88k|    *end = p;
  472|  4.88k|    return writer;
  473|       |
  474|      0|#if STRINGLIB_SIZEOF_CHAR > 1
  475|     21| error:
  476|     21|    PyBytesWriter_Discard(writer);
  477|     21|    Py_XDECREF(rep);
  ------------------
  |  |  524|     21|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|     21|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|     21|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|     21|    Py_XDECREF(exc);
  ------------------
  |  |  524|     21|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|     21|    *end = NULL;
  481|       |    return NULL;
  482|  4.90k|#endif
  483|  4.90k|}
unicodeobject.c:ucs4lib_utf8_encoder:
  267|  1.44k|{
  268|  1.44k|#if STRINGLIB_SIZEOF_CHAR > 1
  269|  1.44k|    PyObject *error_handler_obj = NULL;
  270|  1.44k|    PyObject *exc = NULL;
  271|  1.44k|    PyObject *rep = NULL;
  272|  1.44k|#endif
  273|       |#if STRINGLIB_SIZEOF_CHAR == 1
  274|       |    const Py_ssize_t max_char_size = 2;
  275|       |#elif STRINGLIB_SIZEOF_CHAR == 2
  276|       |    const Py_ssize_t max_char_size = 3;
  277|       |#else /*  STRINGLIB_SIZEOF_CHAR == 4 */
  278|  1.44k|    const Py_ssize_t max_char_size = 4;
  279|  1.44k|#endif
  280|       |
  281|  1.44k|    assert(size >= 0);
  ------------------
  |  Branch (281:5): [True: 1.44k, False: 0]
  ------------------
  282|  1.44k|    if (size > PY_SSIZE_T_MAX / max_char_size) {
  ------------------
  |  |  137|  1.44k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (282:9): [True: 0, False: 1.44k]
  ------------------
  283|       |        /* integer overflow */
  284|      0|        PyErr_NoMemory();
  285|      0|        *end = NULL;
  286|      0|        return NULL;
  287|      0|    }
  288|       |
  289|  1.44k|    PyBytesWriter *writer = PyBytesWriter_Create(size * max_char_size);
  290|  1.44k|    if (writer == NULL) {
  ------------------
  |  Branch (290:9): [True: 0, False: 1.44k]
  ------------------
  291|      0|        *end = NULL;
  292|      0|        return NULL;
  293|      0|    }
  294|       |    /* next free byte in output buffer */
  295|  1.44k|    char *p = PyBytesWriter_GetData(writer);
  296|       |
  297|  1.44k|    Py_ssize_t i;                /* index into data of next input character */
  298|   678k|    for (i = 0; i < size;) {
  ------------------
  |  Branch (298:17): [True: 676k, False: 1.42k]
  ------------------
  299|   676k|        Py_UCS4 ch = data[i++];
  300|       |
  301|   676k|        if (ch < 0x80) {
  ------------------
  |  Branch (301:13): [True: 562k, False: 114k]
  ------------------
  302|       |            /* Encode ASCII */
  303|   562k|            *p++ = (char) ch;
  304|       |
  305|   562k|        }
  306|   114k|        else
  307|   114k|#if STRINGLIB_SIZEOF_CHAR > 1
  308|   114k|        if (ch < 0x0800)
  ------------------
  |  Branch (308:13): [True: 10.7k, False: 103k]
  ------------------
  309|  10.7k|#endif
  310|  10.7k|        {
  311|       |            /* Encode Latin-1 */
  312|  10.7k|            *p++ = (char)(0xc0 | (ch >> 6));
  313|  10.7k|            *p++ = (char)(0x80 | (ch & 0x3f));
  314|  10.7k|        }
  315|   103k|#if STRINGLIB_SIZEOF_CHAR > 1
  316|   103k|        else if (Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (316:18): [True: 13, False: 103k]
  ------------------
  317|     13|            Py_ssize_t startpos, endpos, newpos;
  318|     13|            Py_ssize_t k;
  319|     13|            if (error_handler == _Py_ERROR_UNKNOWN) {
  ------------------
  |  Branch (319:17): [True: 0, False: 13]
  ------------------
  320|      0|                error_handler = _Py_GetErrorHandler(errors);
  321|      0|            }
  322|       |
  323|     13|            startpos = i-1;
  324|     13|            endpos = startpos+1;
  325|       |
  326|     16|            while ((endpos < size) && Py_UNICODE_IS_SURROGATE(data[endpos]))
  ------------------
  |  Branch (326:20): [True: 15, False: 1]
  |  Branch (326:39): [True: 3, False: 12]
  ------------------
  327|      3|                endpos++;
  328|       |
  329|       |            /* Only overallocate the buffer if it's not the last write */
  330|     13|            writer->overallocate = (endpos < size);
  331|       |
  332|     13|            switch (error_handler)
  333|     13|            {
  334|      0|            case _Py_ERROR_REPLACE:
  ------------------
  |  Branch (334:13): [True: 0, False: 13]
  ------------------
  335|      0|                memset(p, '?', endpos - startpos);
  336|      0|                p += (endpos - startpos);
  337|      0|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  338|      0|            case _Py_ERROR_IGNORE:
  ------------------
  |  Branch (338:13): [True: 0, False: 13]
  ------------------
  339|      0|                i += (endpos - startpos - 1);
  340|      0|                break;
  341|       |
  342|      0|            case _Py_ERROR_SURROGATEPASS:
  ------------------
  |  Branch (342:13): [True: 0, False: 13]
  ------------------
  343|      0|                for (k=startpos; k<endpos; k++) {
  ------------------
  |  Branch (343:34): [True: 0, False: 0]
  ------------------
  344|      0|                    ch = data[k];
  345|      0|                    *p++ = (char)(0xe0 | (ch >> 12));
  346|      0|                    *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  347|      0|                    *p++ = (char)(0x80 | (ch & 0x3f));
  348|      0|                }
  349|      0|                i += (endpos - startpos - 1);
  350|      0|                break;
  351|       |
  352|      0|            case _Py_ERROR_BACKSLASHREPLACE:
  ------------------
  |  Branch (352:13): [True: 0, False: 13]
  ------------------
  353|      0|                p = backslashreplace(writer, p,
  354|      0|                                     unicode, startpos, endpos);
  355|      0|                if (p == NULL)
  ------------------
  |  Branch (355:21): [True: 0, False: 0]
  ------------------
  356|      0|                    goto error;
  357|      0|                i += (endpos - startpos - 1);
  358|      0|                break;
  359|       |
  360|      0|            case _Py_ERROR_XMLCHARREFREPLACE:
  ------------------
  |  Branch (360:13): [True: 0, False: 13]
  ------------------
  361|      0|                p = xmlcharrefreplace(writer, p,
  362|      0|                                      unicode, startpos, endpos);
  363|      0|                if (p == NULL)
  ------------------
  |  Branch (363:21): [True: 0, False: 0]
  ------------------
  364|      0|                    goto error;
  365|      0|                i += (endpos - startpos - 1);
  366|      0|                break;
  367|       |
  368|      0|            case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (368:13): [True: 0, False: 13]
  ------------------
  369|      0|                for (k=startpos; k<endpos; k++) {
  ------------------
  |  Branch (369:34): [True: 0, False: 0]
  ------------------
  370|      0|                    ch = data[k];
  371|      0|                    if (!(0xDC80 <= ch && ch <= 0xDCFF))
  ------------------
  |  Branch (371:27): [True: 0, False: 0]
  |  Branch (371:43): [True: 0, False: 0]
  ------------------
  372|      0|                        break;
  373|      0|                    *p++ = (char)(ch & 0xff);
  374|      0|                }
  375|      0|                if (k >= endpos) {
  ------------------
  |  Branch (375:21): [True: 0, False: 0]
  ------------------
  376|      0|                    i += (endpos - startpos - 1);
  377|      0|                    break;
  378|      0|                }
  379|      0|                startpos = k;
  380|      0|                assert(startpos < endpos);
  ------------------
  |  Branch (380:17): [True: 0, False: 0]
  ------------------
  381|      0|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  382|     13|            default:
  ------------------
  |  Branch (382:13): [True: 13, False: 0]
  ------------------
  383|     13|                rep = unicode_encode_call_errorhandler(
  384|     13|                      errors, &error_handler_obj, "utf-8", "surrogates not allowed",
  385|     13|                      unicode, &exc, startpos, endpos, &newpos);
  386|     13|                if (!rep)
  ------------------
  |  Branch (386:21): [True: 13, False: 0]
  ------------------
  387|     13|                    goto error;
  388|       |
  389|      0|                if (newpos < startpos) {
  ------------------
  |  Branch (389:21): [True: 0, False: 0]
  ------------------
  390|      0|                    writer->overallocate = 1;
  391|      0|                    p = PyBytesWriter_GrowAndUpdatePointer(writer,
  392|      0|                                               max_char_size * (startpos - newpos),
  393|      0|                                               p);
  394|      0|                    if (p == NULL) {
  ------------------
  |  Branch (394:25): [True: 0, False: 0]
  ------------------
  395|      0|                        goto error;
  396|      0|                    }
  397|      0|                }
  398|      0|                else {
  399|       |                    /* Only overallocate the buffer if it's not the last write */
  400|      0|                    writer->overallocate = (newpos < size);
  401|       |
  402|       |                    /* subtract preallocated bytes */
  403|      0|                    Py_ssize_t prealloc = max_char_size * (newpos - startpos);
  404|      0|                    p = PyBytesWriter_GrowAndUpdatePointer(writer, -prealloc, p);
  405|      0|                    if (p == NULL) {
  ------------------
  |  Branch (405:25): [True: 0, False: 0]
  ------------------
  406|      0|                        goto error;
  407|      0|                    }
  408|      0|                }
  409|       |
  410|      0|                const char *rep_str;
  411|      0|                Py_ssize_t rep_len;
  412|      0|                if (PyBytes_Check(rep)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|      0|                    rep_str = PyBytes_AS_STRING(rep);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|      0|                    rep_len = PyBytes_GET_SIZE(rep);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|      0|                }
  416|      0|                else {
  417|       |                    /* rep is unicode */
  418|      0|                    if (!PyUnicode_IS_ASCII(rep)) {
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (418:25): [True: 0, False: 0]
  ------------------
  419|      0|                        raise_encode_exception(&exc, "utf-8", unicode,
  420|      0|                                               startpos, endpos,
  421|      0|                                               "surrogates not allowed");
  422|      0|                        goto error;
  423|      0|                    }
  424|       |
  425|      0|                    rep_str = PyUnicode_DATA(rep);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|      0|                    rep_len = PyUnicode_GET_LENGTH(rep);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|      0|                }
  428|       |
  429|      0|                p = PyBytesWriter_GrowAndUpdatePointer(writer, rep_len, p);
  430|      0|                if (p == NULL) {
  ------------------
  |  Branch (430:21): [True: 0, False: 0]
  ------------------
  431|      0|                    goto error;
  432|      0|                }
  433|      0|                memcpy(p, rep_str, rep_len);
  434|      0|                p += rep_len;
  435|      0|                Py_CLEAR(rep);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  436|       |
  437|      0|                i = newpos;
  438|     13|            }
  439|       |
  440|       |            /* If overallocation was disabled, ensure that it was the last
  441|       |               write. Otherwise, we missed an optimization */
  442|     13|            assert(writer->overallocate || i == size);
  ------------------
  |  Branch (442:13): [True: 0, False: 0]
  |  Branch (442:13): [True: 0, False: 0]
  ------------------
  443|      0|        }
  444|   103k|        else
  445|   103k|#if STRINGLIB_SIZEOF_CHAR > 2
  446|   103k|        if (ch < 0x10000)
  ------------------
  |  Branch (446:13): [True: 89.1k, False: 14.6k]
  ------------------
  447|  89.1k|#endif
  448|  89.1k|        {
  449|  89.1k|            *p++ = (char)(0xe0 | (ch >> 12));
  450|  89.1k|            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  451|  89.1k|            *p++ = (char)(0x80 | (ch & 0x3f));
  452|  89.1k|        }
  453|  14.6k|#if STRINGLIB_SIZEOF_CHAR > 2
  454|  14.6k|        else /* ch >= 0x10000 */
  455|  14.6k|        {
  456|  14.6k|            assert(ch <= MAX_UNICODE);
  ------------------
  |  Branch (456:13): [True: 14.6k, False: 0]
  ------------------
  457|       |            /* Encode UCS4 Unicode ordinals */
  458|  14.6k|            *p++ = (char)(0xf0 | (ch >> 18));
  459|  14.6k|            *p++ = (char)(0x80 | ((ch >> 12) & 0x3f));
  460|  14.6k|            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
  461|  14.6k|            *p++ = (char)(0x80 | (ch & 0x3f));
  462|  14.6k|        }
  463|   676k|#endif /* STRINGLIB_SIZEOF_CHAR > 2 */
  464|   676k|#endif /* STRINGLIB_SIZEOF_CHAR > 1 */
  465|   676k|    }
  466|       |
  467|  1.42k|#if STRINGLIB_SIZEOF_CHAR > 1
  468|  1.42k|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|  1.42k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|  1.42k|    Py_XDECREF(exc);
  ------------------
  |  |  524|  1.42k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|  1.42k|#endif
  471|  1.42k|    *end = p;
  472|  1.42k|    return writer;
  473|       |
  474|      0|#if STRINGLIB_SIZEOF_CHAR > 1
  475|     13| error:
  476|     13|    PyBytesWriter_Discard(writer);
  477|     13|    Py_XDECREF(rep);
  ------------------
  |  |  524|     13|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|     13|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|     13|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|     13|    Py_XDECREF(exc);
  ------------------
  |  |  524|     13|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|     13|    *end = NULL;
  481|       |    return NULL;
  482|  1.44k|#endif
  483|  1.44k|}
unicodeobject.c:asciilib_utf8_decode:
   26|  8.69k|{
   27|  8.69k|    Py_UCS4 ch;
   28|  8.69k|    const char *s = *inptr;
   29|  8.69k|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|  8.69k|#define STRINGLIB_CHAR           Py_UCS1
  ------------------
   30|       |
   31|  8.69k|    while (s < end) {
  ------------------
  |  Branch (31:12): [True: 8.69k, False: 0]
  ------------------
   32|  8.69k|        ch = (unsigned char)*s;
   33|       |
   34|  8.69k|        if (ch < 0x80) {
  ------------------
  |  Branch (34:13): [True: 0, False: 8.69k]
  ------------------
   35|       |            /* Fast path for runs of ASCII characters. Given that common UTF-8
   36|       |               input will consist of an overwhelming majority of ASCII
   37|       |               characters, we try to optimize for this case by checking
   38|       |               as many characters as a C 'size_t' can contain.
   39|       |               First, check if we can do an aligned read, as most CPUs have
   40|       |               a penalty for unaligned reads.
   41|       |            */
   42|      0|            if (_Py_IS_ALIGNED(s, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|      0|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   43|       |                /* Help register allocation */
   44|      0|                const char *_s = s;
   45|      0|                STRINGLIB_CHAR *_p = p;
  ------------------
  |  |   11|      0|#define STRINGLIB_CHAR           Py_UCS1
  ------------------
   46|      0|                while (_s + SIZEOF_SIZE_T <= end) {
  ------------------
  |  | 1955|      0|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (46:24): [True: 0, False: 0]
  ------------------
   47|       |                    /* Read a whole size_t at a time (either 4 or 8 bytes),
   48|       |                       and do a fast unrolled copy if it only contains ASCII
   49|       |                       characters. */
   50|      0|                    size_t value = *(const size_t *) _s;
   51|      0|                    if (value & ASCII_CHAR_MASK)
  ------------------
  |  |   12|      0|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (51:25): [True: 0, False: 0]
  ------------------
   52|      0|                        break;
   53|      0|#if PY_LITTLE_ENDIAN
   54|      0|                    _p[0] = (STRINGLIB_CHAR)(value & 0xFFu);
   55|      0|                    _p[1] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   56|      0|                    _p[2] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   57|      0|                    _p[3] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   58|      0|# if SIZEOF_SIZE_T == 8
   59|      0|                    _p[4] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   60|      0|                    _p[5] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   61|      0|                    _p[6] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   62|      0|                    _p[7] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   63|      0|# endif
   64|       |#else
   65|       |# if SIZEOF_SIZE_T == 8
   66|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   67|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   68|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   69|       |                    _p[3] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   70|       |                    _p[4] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   71|       |                    _p[5] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   72|       |                    _p[6] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   73|       |                    _p[7] = (STRINGLIB_CHAR)(value & 0xFFu);
   74|       |# else
   75|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   76|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   77|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   78|       |                    _p[3] = (STRINGLIB_CHAR)(value & 0xFFu);
   79|       |# endif
   80|       |#endif
   81|      0|                    _s += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|      0|#define SIZEOF_SIZE_T 8
  ------------------
   82|      0|                    _p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|      0|#define SIZEOF_SIZE_T 8
  ------------------
   83|      0|                }
   84|      0|                s = _s;
   85|      0|                p = _p;
   86|      0|                if (s == end)
  ------------------
  |  Branch (86:21): [True: 0, False: 0]
  ------------------
   87|      0|                    break;
   88|      0|                ch = (unsigned char)*s;
   89|      0|            }
   90|      0|            if (ch < 0x80) {
  ------------------
  |  Branch (90:17): [True: 0, False: 0]
  ------------------
   91|      0|                s++;
   92|      0|                *p++ = ch;
   93|      0|                continue;
   94|      0|            }
   95|      0|        }
   96|       |
   97|  8.69k|        if (ch < 0xE0) {
  ------------------
  |  Branch (97:13): [True: 4.44k, False: 4.24k]
  ------------------
   98|       |            /* \xC2\x80-\xDF\xBF -- 0080-07FF */
   99|  4.44k|            Py_UCS4 ch2;
  100|  4.44k|            if (ch < 0xC2) {
  ------------------
  |  Branch (100:17): [True: 1.11k, False: 3.33k]
  ------------------
  101|       |                /* invalid sequence
  102|       |                \x80-\xBF -- continuation byte
  103|       |                \xC0-\xC1 -- fake 0000-007F */
  104|  1.11k|                goto InvalidStart;
  105|  1.11k|            }
  106|  3.33k|            if (end - s < 2) {
  ------------------
  |  Branch (106:17): [True: 79, False: 3.25k]
  ------------------
  107|       |                /* unexpected end of data: the caller will decide whether
  108|       |                   it's an error or not */
  109|     79|                break;
  110|     79|            }
  111|  3.25k|            ch2 = (unsigned char)s[1];
  112|  3.25k|            if (!IS_CONTINUATION_BYTE(ch2))
  ------------------
  |  |   20|  3.25k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 3.15k, False: 98]
  |  |  |  Branch (20:51): [True: 3.05k, False: 102]
  |  |  ------------------
  ------------------
  113|       |                /* invalid continuation byte */
  114|    200|                goto InvalidContinuation1;
  115|  3.05k|            ch = (ch << 6) + ch2 -
  116|  3.05k|                 ((0xC0 << 6) + 0x80);
  117|  3.05k|            assert ((ch > 0x007F) && (ch <= 0x07FF));
  ------------------
  |  Branch (117:13): [True: 3.05k, False: 0]
  |  Branch (117:13): [True: 3.05k, False: 0]
  ------------------
  118|  3.05k|            s += 2;
  119|  3.05k|            if (STRINGLIB_MAX_CHAR <= 0x007F ||
  ------------------
  |  |   10|  3.05k|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (119:17): [True: 3.05k, Folded]
  ------------------
  120|      0|                (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (120:18): [True: 0, Folded]
  |  Branch (120:49): [True: 0, False: 0]
  ------------------
  121|       |                /* Out-of-range */
  122|  3.05k|                goto Return;
  123|      0|            *p++ = ch;
  124|      0|            continue;
  125|  3.05k|        }
  126|       |
  127|  4.24k|        if (ch < 0xF0) {
  ------------------
  |  Branch (127:13): [True: 2.41k, False: 1.83k]
  ------------------
  128|       |            /* \xE0\xA0\x80-\xEF\xBF\xBF -- 0800-FFFF */
  129|  2.41k|            Py_UCS4 ch2, ch3;
  130|  2.41k|            if (end - s < 3) {
  ------------------
  |  Branch (130:17): [True: 388, False: 2.02k]
  ------------------
  131|       |                /* unexpected end of data: the caller will decide whether
  132|       |                   it's an error or not */
  133|    388|                if (end - s < 2)
  ------------------
  |  Branch (133:21): [True: 239, False: 149]
  ------------------
  134|    239|                    break;
  135|    149|                ch2 = (unsigned char)s[1];
  136|    149|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    298|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 134, False: 15]
  |  |  |  Branch (20:51): [True: 125, False: 9]
  |  |  ------------------
  ------------------
  137|    125|                    (ch2 < 0xA0 ? ch == 0xE0 : ch == 0xED))
  ------------------
  |  Branch (137:21): [True: 9, False: 116]
  |  Branch (137:22): [True: 11, False: 114]
  ------------------
  138|       |                    /* for clarification see comments below */
  139|     33|                    goto InvalidContinuation1;
  140|    116|                break;
  141|    149|            }
  142|  2.02k|            ch2 = (unsigned char)s[1];
  143|  2.02k|            ch3 = (unsigned char)s[2];
  144|  2.02k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|  2.02k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.97k, False: 53]
  |  |  |  Branch (20:51): [True: 1.92k, False: 46]
  |  |  ------------------
  ------------------
  145|       |                /* invalid continuation byte */
  146|     99|                goto InvalidContinuation1;
  147|     99|            }
  148|  1.92k|            if (ch == 0xE0) {
  ------------------
  |  Branch (148:17): [True: 125, False: 1.79k]
  ------------------
  149|    125|                if (ch2 < 0xA0)
  ------------------
  |  Branch (149:21): [True: 14, False: 111]
  ------------------
  150|       |                    /* invalid sequence
  151|       |                       \xE0\x80\x80-\xE0\x9F\xBF -- fake 0000-0800 */
  152|     14|                    goto InvalidContinuation1;
  153|  1.79k|            } else if (ch == 0xED && ch2 >= 0xA0) {
  ------------------
  |  Branch (153:24): [True: 59, False: 1.74k]
  |  Branch (153:38): [True: 14, False: 45]
  ------------------
  154|       |                /* Decoding UTF-8 sequences in range \xED\xA0\x80-\xED\xBF\xBF
  155|       |                   will result in surrogates in range D800-DFFF. Surrogates are
  156|       |                   not valid UTF-8 so they are rejected.
  157|       |                   See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
  158|       |                   (table 3-7) and http://www.rfc-editor.org/rfc/rfc3629.txt */
  159|     14|                goto InvalidContinuation1;
  160|     14|            }
  161|  1.89k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|  1.89k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.87k, False: 17]
  |  |  |  Branch (20:51): [True: 1.86k, False: 19]
  |  |  ------------------
  ------------------
  162|       |                /* invalid continuation byte */
  163|     36|                goto InvalidContinuation2;
  164|     36|            }
  165|  1.86k|            ch = (ch << 12) + (ch2 << 6) + ch3 -
  166|  1.86k|                 ((0xE0 << 12) + (0x80 << 6) + 0x80);
  167|  1.86k|            assert ((ch > 0x07FF) && (ch <= 0xFFFF));
  ------------------
  |  Branch (167:13): [True: 1.86k, False: 0]
  |  Branch (167:13): [True: 1.86k, False: 0]
  ------------------
  168|  1.86k|            s += 3;
  169|  1.86k|            if (STRINGLIB_MAX_CHAR <= 0x07FF ||
  ------------------
  |  |   10|  1.86k|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (169:17): [True: 1.86k, Folded]
  ------------------
  170|      0|                (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (170:18): [True: 0, Folded]
  |  Branch (170:49): [True: 0, False: 0]
  ------------------
  171|       |                /* Out-of-range */
  172|  1.86k|                goto Return;
  173|      0|            *p++ = ch;
  174|      0|            continue;
  175|  1.86k|        }
  176|       |
  177|  1.83k|        if (ch < 0xF5) {
  ------------------
  |  Branch (177:13): [True: 1.56k, False: 271]
  ------------------
  178|       |            /* \xF0\x90\x80\x80-\xF4\x8F\xBF\xBF -- 10000-10FFFF */
  179|  1.56k|            Py_UCS4 ch2, ch3, ch4;
  180|  1.56k|            if (end - s < 4) {
  ------------------
  |  Branch (180:17): [True: 127, False: 1.43k]
  ------------------
  181|       |                /* unexpected end of data: the caller will decide whether
  182|       |                   it's an error or not */
  183|    127|                if (end - s < 2)
  ------------------
  |  Branch (183:21): [True: 54, False: 73]
  ------------------
  184|     54|                    break;
  185|     73|                ch2 = (unsigned char)s[1];
  186|     73|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    146|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 53, False: 20]
  |  |  |  Branch (20:51): [True: 44, False: 9]
  |  |  ------------------
  ------------------
  187|     44|                    (ch2 < 0x90 ? ch == 0xF0 : ch == 0xF4))
  ------------------
  |  Branch (187:21): [True: 14, False: 30]
  |  Branch (187:22): [True: 16, False: 28]
  ------------------
  188|       |                    /* for clarification see comments below */
  189|     43|                    goto InvalidContinuation1;
  190|     30|                if (end - s < 3)
  ------------------
  |  Branch (190:21): [True: 10, False: 20]
  ------------------
  191|     10|                    break;
  192|     20|                ch3 = (unsigned char)s[2];
  193|     20|                if (!IS_CONTINUATION_BYTE(ch3))
  ------------------
  |  |   20|     20|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 11, False: 9]
  |  |  |  Branch (20:51): [True: 5, False: 6]
  |  |  ------------------
  ------------------
  194|     15|                    goto InvalidContinuation2;
  195|      5|                break;
  196|     20|            }
  197|  1.43k|            ch2 = (unsigned char)s[1];
  198|  1.43k|            ch3 = (unsigned char)s[2];
  199|  1.43k|            ch4 = (unsigned char)s[3];
  200|  1.43k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|  1.43k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.39k, False: 42]
  |  |  |  Branch (20:51): [True: 1.35k, False: 41]
  |  |  ------------------
  ------------------
  201|       |                /* invalid continuation byte */
  202|     83|                goto InvalidContinuation1;
  203|     83|            }
  204|  1.35k|            if (ch == 0xF0) {
  ------------------
  |  Branch (204:17): [True: 522, False: 833]
  ------------------
  205|    522|                if (ch2 < 0x90)
  ------------------
  |  Branch (205:21): [True: 14, False: 508]
  ------------------
  206|       |                    /* invalid sequence
  207|       |                       \xF0\x80\x80\x80-\xF0\x8F\xBF\xBF -- fake 0000-FFFF */
  208|     14|                    goto InvalidContinuation1;
  209|    833|            } else if (ch == 0xF4 && ch2 >= 0x90) {
  ------------------
  |  Branch (209:24): [True: 126, False: 707]
  |  Branch (209:38): [True: 13, False: 113]
  ------------------
  210|       |                /* invalid sequence
  211|       |                   \xF4\x90\x80\x80- -- 110000- overflow */
  212|     13|                goto InvalidContinuation1;
  213|     13|            }
  214|  1.32k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|  1.32k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.31k, False: 13]
  |  |  |  Branch (20:51): [True: 1.30k, False: 12]
  |  |  ------------------
  ------------------
  215|       |                /* invalid continuation byte */
  216|     25|                goto InvalidContinuation2;
  217|     25|            }
  218|  1.30k|            if (!IS_CONTINUATION_BYTE(ch4)) {
  ------------------
  |  |   20|  1.30k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.28k, False: 22]
  |  |  |  Branch (20:51): [True: 1.26k, False: 19]
  |  |  ------------------
  ------------------
  219|       |                /* invalid continuation byte */
  220|     41|                goto InvalidContinuation3;
  221|     41|            }
  222|  1.26k|            ch = (ch << 18) + (ch2 << 12) + (ch3 << 6) + ch4 -
  223|  1.26k|                 ((0xF0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80);
  224|  1.26k|            assert ((ch > 0xFFFF) && (ch <= 0x10FFFF));
  ------------------
  |  Branch (224:13): [True: 1.26k, False: 0]
  |  Branch (224:13): [True: 1.26k, False: 0]
  ------------------
  225|  1.26k|            s += 4;
  226|  1.26k|            if (STRINGLIB_MAX_CHAR <= 0xFFFF ||
  ------------------
  |  |   10|  1.26k|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (226:17): [True: 1.26k, Folded]
  ------------------
  227|      0|                (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (227:18): [True: 0, Folded]
  |  Branch (227:51): [True: 0, False: 0]
  ------------------
  228|       |                /* Out-of-range */
  229|  1.26k|                goto Return;
  230|      0|            *p++ = ch;
  231|      0|            continue;
  232|  1.26k|        }
  233|    271|        goto InvalidStart;
  234|  1.83k|    }
  235|    503|    ch = 0;
  236|  8.69k|Return:
  237|  8.69k|    *inptr = s;
  238|  8.69k|    *outpos = p - dest;
  239|  8.69k|    return ch;
  240|  1.38k|InvalidStart:
  241|  1.38k|    ch = 1;
  242|  1.38k|    goto Return;
  243|    513|InvalidContinuation1:
  244|    513|    ch = 2;
  245|    513|    goto Return;
  246|     76|InvalidContinuation2:
  247|     76|    ch = 3;
  248|     76|    goto Return;
  249|     41|InvalidContinuation3:
  250|     41|    ch = 4;
  251|     41|    goto Return;
  252|    503|}
unicodeobject.c:ucs1lib_utf8_decode:
   26|  72.0k|{
   27|  72.0k|    Py_UCS4 ch;
   28|  72.0k|    const char *s = *inptr;
   29|  72.0k|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|  72.0k|#define STRINGLIB_CHAR           Py_UCS1
  ------------------
   30|       |
   31|  1.27M|    while (s < end) {
  ------------------
  |  Branch (31:12): [True: 1.21M, False: 62.5k]
  ------------------
   32|  1.21M|        ch = (unsigned char)*s;
   33|       |
   34|  1.21M|        if (ch < 0x80) {
  ------------------
  |  Branch (34:13): [True: 276k, False: 934k]
  ------------------
   35|       |            /* Fast path for runs of ASCII characters. Given that common UTF-8
   36|       |               input will consist of an overwhelming majority of ASCII
   37|       |               characters, we try to optimize for this case by checking
   38|       |               as many characters as a C 'size_t' can contain.
   39|       |               First, check if we can do an aligned read, as most CPUs have
   40|       |               a penalty for unaligned reads.
   41|       |            */
   42|   276k|            if (_Py_IS_ALIGNED(s, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|   276k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 34.8k, False: 241k]
  |  |  ------------------
  ------------------
   43|       |                /* Help register allocation */
   44|  34.8k|                const char *_s = s;
   45|  34.8k|                STRINGLIB_CHAR *_p = p;
  ------------------
  |  |   11|  34.8k|#define STRINGLIB_CHAR           Py_UCS1
  ------------------
   46|   133k|                while (_s + SIZEOF_SIZE_T <= end) {
  ------------------
  |  | 1955|   133k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (46:24): [True: 121k, False: 11.5k]
  ------------------
   47|       |                    /* Read a whole size_t at a time (either 4 or 8 bytes),
   48|       |                       and do a fast unrolled copy if it only contains ASCII
   49|       |                       characters. */
   50|   121k|                    size_t value = *(const size_t *) _s;
   51|   121k|                    if (value & ASCII_CHAR_MASK)
  ------------------
  |  |   12|   121k|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (51:25): [True: 23.3k, False: 98.4k]
  ------------------
   52|  23.3k|                        break;
   53|  98.4k|#if PY_LITTLE_ENDIAN
   54|  98.4k|                    _p[0] = (STRINGLIB_CHAR)(value & 0xFFu);
   55|  98.4k|                    _p[1] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   56|  98.4k|                    _p[2] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   57|  98.4k|                    _p[3] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   58|  98.4k|# if SIZEOF_SIZE_T == 8
   59|  98.4k|                    _p[4] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   60|  98.4k|                    _p[5] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   61|  98.4k|                    _p[6] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   62|  98.4k|                    _p[7] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   63|  98.4k|# endif
   64|       |#else
   65|       |# if SIZEOF_SIZE_T == 8
   66|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   67|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   68|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   69|       |                    _p[3] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   70|       |                    _p[4] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   71|       |                    _p[5] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   72|       |                    _p[6] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   73|       |                    _p[7] = (STRINGLIB_CHAR)(value & 0xFFu);
   74|       |# else
   75|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   76|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   77|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   78|       |                    _p[3] = (STRINGLIB_CHAR)(value & 0xFFu);
   79|       |# endif
   80|       |#endif
   81|  98.4k|                    _s += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|  98.4k|#define SIZEOF_SIZE_T 8
  ------------------
   82|  98.4k|                    _p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|  98.4k|#define SIZEOF_SIZE_T 8
  ------------------
   83|  98.4k|                }
   84|  34.8k|                s = _s;
   85|  34.8k|                p = _p;
   86|  34.8k|                if (s == end)
  ------------------
  |  Branch (86:21): [True: 878, False: 33.9k]
  ------------------
   87|    878|                    break;
   88|  33.9k|                ch = (unsigned char)*s;
   89|  33.9k|            }
   90|   275k|            if (ch < 0x80) {
  ------------------
  |  Branch (90:17): [True: 273k, False: 2.32k]
  ------------------
   91|   273k|                s++;
   92|   273k|                *p++ = ch;
   93|   273k|                continue;
   94|   273k|            }
   95|   275k|        }
   96|       |
   97|   936k|        if (ch < 0xE0) {
  ------------------
  |  Branch (97:13): [True: 933k, False: 2.43k]
  ------------------
   98|       |            /* \xC2\x80-\xDF\xBF -- 0080-07FF */
   99|   933k|            Py_UCS4 ch2;
  100|   933k|            if (ch < 0xC2) {
  ------------------
  |  Branch (100:17): [True: 47, False: 933k]
  ------------------
  101|       |                /* invalid sequence
  102|       |                \x80-\xBF -- continuation byte
  103|       |                \xC0-\xC1 -- fake 0000-007F */
  104|     47|                goto InvalidStart;
  105|     47|            }
  106|   933k|            if (end - s < 2) {
  ------------------
  |  Branch (106:17): [True: 38, False: 933k]
  ------------------
  107|       |                /* unexpected end of data: the caller will decide whether
  108|       |                   it's an error or not */
  109|     38|                break;
  110|     38|            }
  111|   933k|            ch2 = (unsigned char)s[1];
  112|   933k|            if (!IS_CONTINUATION_BYTE(ch2))
  ------------------
  |  |   20|   933k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 933k, False: 25]
  |  |  |  Branch (20:51): [True: 933k, False: 21]
  |  |  ------------------
  ------------------
  113|       |                /* invalid continuation byte */
  114|     46|                goto InvalidContinuation1;
  115|   933k|            ch = (ch << 6) + ch2 -
  116|   933k|                 ((0xC0 << 6) + 0x80);
  117|   933k|            assert ((ch > 0x007F) && (ch <= 0x07FF));
  ------------------
  |  Branch (117:13): [True: 933k, False: 0]
  |  Branch (117:13): [True: 933k, False: 0]
  ------------------
  118|   933k|            s += 2;
  119|   933k|            if (STRINGLIB_MAX_CHAR <= 0x007F ||
  ------------------
  |  |   10|   933k|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
  |  Branch (119:17): [Folded, False: 933k]
  ------------------
  120|   933k|                (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|   933k|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|   933k|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
  |  Branch (120:18): [True: 933k, Folded]
  |  Branch (120:49): [True: 6.07k, False: 927k]
  ------------------
  121|       |                /* Out-of-range */
  122|  6.07k|                goto Return;
  123|   927k|            *p++ = ch;
  124|   927k|            continue;
  125|   933k|        }
  126|       |
  127|  2.43k|        if (ch < 0xF0) {
  ------------------
  |  Branch (127:13): [True: 803, False: 1.63k]
  ------------------
  128|       |            /* \xE0\xA0\x80-\xEF\xBF\xBF -- 0800-FFFF */
  129|    803|            Py_UCS4 ch2, ch3;
  130|    803|            if (end - s < 3) {
  ------------------
  |  Branch (130:17): [True: 112, False: 691]
  ------------------
  131|       |                /* unexpected end of data: the caller will decide whether
  132|       |                   it's an error or not */
  133|    112|                if (end - s < 2)
  ------------------
  |  Branch (133:21): [True: 35, False: 77]
  ------------------
  134|     35|                    break;
  135|     77|                ch2 = (unsigned char)s[1];
  136|     77|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    154|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 70, False: 7]
  |  |  |  Branch (20:51): [True: 59, False: 11]
  |  |  ------------------
  ------------------
  137|     59|                    (ch2 < 0xA0 ? ch == 0xE0 : ch == 0xED))
  ------------------
  |  Branch (137:21): [True: 12, False: 47]
  |  Branch (137:22): [True: 15, False: 44]
  ------------------
  138|       |                    /* for clarification see comments below */
  139|     30|                    goto InvalidContinuation1;
  140|     47|                break;
  141|     77|            }
  142|    691|            ch2 = (unsigned char)s[1];
  143|    691|            ch3 = (unsigned char)s[2];
  144|    691|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|    691|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 677, False: 14]
  |  |  |  Branch (20:51): [True: 662, False: 15]
  |  |  ------------------
  ------------------
  145|       |                /* invalid continuation byte */
  146|     29|                goto InvalidContinuation1;
  147|     29|            }
  148|    662|            if (ch == 0xE0) {
  ------------------
  |  Branch (148:17): [True: 50, False: 612]
  ------------------
  149|     50|                if (ch2 < 0xA0)
  ------------------
  |  Branch (149:21): [True: 15, False: 35]
  ------------------
  150|       |                    /* invalid sequence
  151|       |                       \xE0\x80\x80-\xE0\x9F\xBF -- fake 0000-0800 */
  152|     15|                    goto InvalidContinuation1;
  153|    612|            } else if (ch == 0xED && ch2 >= 0xA0) {
  ------------------
  |  Branch (153:24): [True: 107, False: 505]
  |  Branch (153:38): [True: 12, False: 95]
  ------------------
  154|       |                /* Decoding UTF-8 sequences in range \xED\xA0\x80-\xED\xBF\xBF
  155|       |                   will result in surrogates in range D800-DFFF. Surrogates are
  156|       |                   not valid UTF-8 so they are rejected.
  157|       |                   See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
  158|       |                   (table 3-7) and http://www.rfc-editor.org/rfc/rfc3629.txt */
  159|     12|                goto InvalidContinuation1;
  160|     12|            }
  161|    635|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|    635|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 621, False: 14]
  |  |  |  Branch (20:51): [True: 607, False: 14]
  |  |  ------------------
  ------------------
  162|       |                /* invalid continuation byte */
  163|     28|                goto InvalidContinuation2;
  164|     28|            }
  165|    607|            ch = (ch << 12) + (ch2 << 6) + ch3 -
  166|    607|                 ((0xE0 << 12) + (0x80 << 6) + 0x80);
  167|    607|            assert ((ch > 0x07FF) && (ch <= 0xFFFF));
  ------------------
  |  Branch (167:13): [True: 607, False: 0]
  |  Branch (167:13): [True: 607, False: 0]
  ------------------
  168|    607|            s += 3;
  169|    607|            if (STRINGLIB_MAX_CHAR <= 0x07FF ||
  ------------------
  |  |   10|    607|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
  |  Branch (169:17): [True: 607, Folded]
  ------------------
  170|      0|                (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
  |  Branch (170:18): [True: 0, Folded]
  |  Branch (170:49): [True: 0, False: 0]
  ------------------
  171|       |                /* Out-of-range */
  172|    607|                goto Return;
  173|      0|            *p++ = ch;
  174|      0|            continue;
  175|    607|        }
  176|       |
  177|  1.63k|        if (ch < 0xF5) {
  ------------------
  |  Branch (177:13): [True: 1.61k, False: 21]
  ------------------
  178|       |            /* \xF0\x90\x80\x80-\xF4\x8F\xBF\xBF -- 10000-10FFFF */
  179|  1.61k|            Py_UCS4 ch2, ch3, ch4;
  180|  1.61k|            if (end - s < 4) {
  ------------------
  |  Branch (180:17): [True: 114, False: 1.49k]
  ------------------
  181|       |                /* unexpected end of data: the caller will decide whether
  182|       |                   it's an error or not */
  183|    114|                if (end - s < 2)
  ------------------
  |  Branch (183:21): [True: 27, False: 87]
  ------------------
  184|     27|                    break;
  185|     87|                ch2 = (unsigned char)s[1];
  186|     87|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    174|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 71, False: 16]
  |  |  |  Branch (20:51): [True: 58, False: 13]
  |  |  ------------------
  ------------------
  187|     58|                    (ch2 < 0x90 ? ch == 0xF0 : ch == 0xF4))
  ------------------
  |  Branch (187:21): [True: 19, False: 39]
  |  Branch (187:22): [True: 22, False: 36]
  ------------------
  188|       |                    /* for clarification see comments below */
  189|     48|                    goto InvalidContinuation1;
  190|     39|                if (end - s < 3)
  ------------------
  |  Branch (190:21): [True: 12, False: 27]
  ------------------
  191|     12|                    break;
  192|     27|                ch3 = (unsigned char)s[2];
  193|     27|                if (!IS_CONTINUATION_BYTE(ch3))
  ------------------
  |  |   20|     27|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 18, False: 9]
  |  |  |  Branch (20:51): [True: 10, False: 8]
  |  |  ------------------
  ------------------
  194|     17|                    goto InvalidContinuation2;
  195|     10|                break;
  196|     27|            }
  197|  1.49k|            ch2 = (unsigned char)s[1];
  198|  1.49k|            ch3 = (unsigned char)s[2];
  199|  1.49k|            ch4 = (unsigned char)s[3];
  200|  1.49k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|  1.49k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.48k, False: 14]
  |  |  |  Branch (20:51): [True: 1.46k, False: 16]
  |  |  ------------------
  ------------------
  201|       |                /* invalid continuation byte */
  202|     30|                goto InvalidContinuation1;
  203|     30|            }
  204|  1.46k|            if (ch == 0xF0) {
  ------------------
  |  Branch (204:17): [True: 584, False: 882]
  ------------------
  205|    584|                if (ch2 < 0x90)
  ------------------
  |  Branch (205:21): [True: 12, False: 572]
  ------------------
  206|       |                    /* invalid sequence
  207|       |                       \xF0\x80\x80\x80-\xF0\x8F\xBF\xBF -- fake 0000-FFFF */
  208|     12|                    goto InvalidContinuation1;
  209|    882|            } else if (ch == 0xF4 && ch2 >= 0x90) {
  ------------------
  |  Branch (209:24): [True: 137, False: 745]
  |  Branch (209:38): [True: 14, False: 123]
  ------------------
  210|       |                /* invalid sequence
  211|       |                   \xF4\x90\x80\x80- -- 110000- overflow */
  212|     14|                goto InvalidContinuation1;
  213|     14|            }
  214|  1.44k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|  1.44k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.41k, False: 29]
  |  |  |  Branch (20:51): [True: 1.39k, False: 18]
  |  |  ------------------
  ------------------
  215|       |                /* invalid continuation byte */
  216|     47|                goto InvalidContinuation2;
  217|     47|            }
  218|  1.39k|            if (!IS_CONTINUATION_BYTE(ch4)) {
  ------------------
  |  |   20|  1.39k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.38k, False: 12]
  |  |  |  Branch (20:51): [True: 1.37k, False: 10]
  |  |  ------------------
  ------------------
  219|       |                /* invalid continuation byte */
  220|     22|                goto InvalidContinuation3;
  221|     22|            }
  222|  1.37k|            ch = (ch << 18) + (ch2 << 12) + (ch3 << 6) + ch4 -
  223|  1.37k|                 ((0xF0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80);
  224|  1.37k|            assert ((ch > 0xFFFF) && (ch <= 0x10FFFF));
  ------------------
  |  Branch (224:13): [True: 1.37k, False: 0]
  |  Branch (224:13): [True: 1.37k, False: 0]
  ------------------
  225|  1.37k|            s += 4;
  226|  1.37k|            if (STRINGLIB_MAX_CHAR <= 0xFFFF ||
  ------------------
  |  |   10|  1.37k|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
  |  Branch (226:17): [True: 1.37k, Folded]
  ------------------
  227|      0|                (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFu
  ------------------
  |  Branch (227:18): [True: 0, Folded]
  |  Branch (227:51): [True: 0, False: 0]
  ------------------
  228|       |                /* Out-of-range */
  229|  1.37k|                goto Return;
  230|      0|            *p++ = ch;
  231|      0|            continue;
  232|  1.37k|        }
  233|     21|        goto InvalidStart;
  234|  1.63k|    }
  235|  63.5k|    ch = 0;
  236|  72.0k|Return:
  237|  72.0k|    *inptr = s;
  238|  72.0k|    *outpos = p - dest;
  239|  72.0k|    return ch;
  240|     68|InvalidStart:
  241|     68|    ch = 1;
  242|     68|    goto Return;
  243|    236|InvalidContinuation1:
  244|    236|    ch = 2;
  245|    236|    goto Return;
  246|     92|InvalidContinuation2:
  247|     92|    ch = 3;
  248|     92|    goto Return;
  249|     22|InvalidContinuation3:
  250|     22|    ch = 4;
  251|     22|    goto Return;
  252|  63.5k|}
unicodeobject.c:ucs2lib_utf8_decode:
   26|   126k|{
   27|   126k|    Py_UCS4 ch;
   28|   126k|    const char *s = *inptr;
   29|   126k|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|   126k|#define STRINGLIB_CHAR           Py_UCS2
  ------------------
   30|       |
   31|  1.44M|    while (s < end) {
  ------------------
  |  Branch (31:12): [True: 1.33M, False: 104k]
  ------------------
   32|  1.33M|        ch = (unsigned char)*s;
   33|       |
   34|  1.33M|        if (ch < 0x80) {
  ------------------
  |  Branch (34:13): [True: 547k, False: 792k]
  ------------------
   35|       |            /* Fast path for runs of ASCII characters. Given that common UTF-8
   36|       |               input will consist of an overwhelming majority of ASCII
   37|       |               characters, we try to optimize for this case by checking
   38|       |               as many characters as a C 'size_t' can contain.
   39|       |               First, check if we can do an aligned read, as most CPUs have
   40|       |               a penalty for unaligned reads.
   41|       |            */
   42|   547k|            if (_Py_IS_ALIGNED(s, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|   547k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 76.0k, False: 471k]
  |  |  ------------------
  ------------------
   43|       |                /* Help register allocation */
   44|  76.0k|                const char *_s = s;
   45|  76.0k|                STRINGLIB_CHAR *_p = p;
  ------------------
  |  |   11|  76.0k|#define STRINGLIB_CHAR           Py_UCS2
  ------------------
   46|   265k|                while (_s + SIZEOF_SIZE_T <= end) {
  ------------------
  |  | 1955|   265k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (46:24): [True: 231k, False: 33.9k]
  ------------------
   47|       |                    /* Read a whole size_t at a time (either 4 or 8 bytes),
   48|       |                       and do a fast unrolled copy if it only contains ASCII
   49|       |                       characters. */
   50|   231k|                    size_t value = *(const size_t *) _s;
   51|   231k|                    if (value & ASCII_CHAR_MASK)
  ------------------
  |  |   12|   231k|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (51:25): [True: 42.1k, False: 189k]
  ------------------
   52|  42.1k|                        break;
   53|   189k|#if PY_LITTLE_ENDIAN
   54|   189k|                    _p[0] = (STRINGLIB_CHAR)(value & 0xFFu);
   55|   189k|                    _p[1] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   56|   189k|                    _p[2] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   57|   189k|                    _p[3] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   58|   189k|# if SIZEOF_SIZE_T == 8
   59|   189k|                    _p[4] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   60|   189k|                    _p[5] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   61|   189k|                    _p[6] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   62|   189k|                    _p[7] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   63|   189k|# endif
   64|       |#else
   65|       |# if SIZEOF_SIZE_T == 8
   66|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   67|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   68|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   69|       |                    _p[3] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   70|       |                    _p[4] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   71|       |                    _p[5] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   72|       |                    _p[6] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   73|       |                    _p[7] = (STRINGLIB_CHAR)(value & 0xFFu);
   74|       |# else
   75|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   76|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   77|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   78|       |                    _p[3] = (STRINGLIB_CHAR)(value & 0xFFu);
   79|       |# endif
   80|       |#endif
   81|   189k|                    _s += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   189k|#define SIZEOF_SIZE_T 8
  ------------------
   82|   189k|                    _p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   189k|#define SIZEOF_SIZE_T 8
  ------------------
   83|   189k|                }
   84|  76.0k|                s = _s;
   85|  76.0k|                p = _p;
   86|  76.0k|                if (s == end)
  ------------------
  |  Branch (86:21): [True: 846, False: 75.1k]
  ------------------
   87|    846|                    break;
   88|  75.1k|                ch = (unsigned char)*s;
   89|  75.1k|            }
   90|   546k|            if (ch < 0x80) {
  ------------------
  |  Branch (90:17): [True: 543k, False: 3.02k]
  ------------------
   91|   543k|                s++;
   92|   543k|                *p++ = ch;
   93|   543k|                continue;
   94|   543k|            }
   95|   546k|        }
   96|       |
   97|   795k|        if (ch < 0xE0) {
  ------------------
  |  Branch (97:13): [True: 386k, False: 409k]
  ------------------
   98|       |            /* \xC2\x80-\xDF\xBF -- 0080-07FF */
   99|   386k|            Py_UCS4 ch2;
  100|   386k|            if (ch < 0xC2) {
  ------------------
  |  Branch (100:17): [True: 7.48k, False: 378k]
  ------------------
  101|       |                /* invalid sequence
  102|       |                \x80-\xBF -- continuation byte
  103|       |                \xC0-\xC1 -- fake 0000-007F */
  104|  7.48k|                goto InvalidStart;
  105|  7.48k|            }
  106|   378k|            if (end - s < 2) {
  ------------------
  |  Branch (106:17): [True: 115, False: 378k]
  ------------------
  107|       |                /* unexpected end of data: the caller will decide whether
  108|       |                   it's an error or not */
  109|    115|                break;
  110|    115|            }
  111|   378k|            ch2 = (unsigned char)s[1];
  112|   378k|            if (!IS_CONTINUATION_BYTE(ch2))
  ------------------
  |  |   20|   378k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 378k, False: 642]
  |  |  |  Branch (20:51): [True: 376k, False: 1.62k]
  |  |  ------------------
  ------------------
  113|       |                /* invalid continuation byte */
  114|  2.26k|                goto InvalidContinuation1;
  115|   376k|            ch = (ch << 6) + ch2 -
  116|   376k|                 ((0xC0 << 6) + 0x80);
  117|   376k|            assert ((ch > 0x007F) && (ch <= 0x07FF));
  ------------------
  |  Branch (117:13): [True: 376k, False: 0]
  |  Branch (117:13): [True: 376k, False: 0]
  ------------------
  118|   376k|            s += 2;
  119|   376k|            if (STRINGLIB_MAX_CHAR <= 0x007F ||
  ------------------
  |  |   10|   376k|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
  |  Branch (119:17): [Folded, False: 0]
  ------------------
  120|      0|                (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
  |  Branch (120:18): [Folded, False: 0]
  |  Branch (120:49): [True: 0, False: 0]
  ------------------
  121|       |                /* Out-of-range */
  122|      0|                goto Return;
  123|   376k|            *p++ = ch;
  124|   376k|            continue;
  125|   376k|        }
  126|       |
  127|   409k|        if (ch < 0xF0) {
  ------------------
  |  Branch (127:13): [True: 401k, False: 8.09k]
  ------------------
  128|       |            /* \xE0\xA0\x80-\xEF\xBF\xBF -- 0800-FFFF */
  129|   401k|            Py_UCS4 ch2, ch3;
  130|   401k|            if (end - s < 3) {
  ------------------
  |  Branch (130:17): [True: 419, False: 400k]
  ------------------
  131|       |                /* unexpected end of data: the caller will decide whether
  132|       |                   it's an error or not */
  133|    419|                if (end - s < 2)
  ------------------
  |  Branch (133:21): [True: 210, False: 209]
  ------------------
  134|    210|                    break;
  135|    209|                ch2 = (unsigned char)s[1];
  136|    209|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    418|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 170, False: 39]
  |  |  |  Branch (20:51): [True: 152, False: 18]
  |  |  ------------------
  ------------------
  137|    152|                    (ch2 < 0xA0 ? ch == 0xE0 : ch == 0xED))
  ------------------
  |  Branch (137:21): [True: 27, False: 125]
  |  Branch (137:22): [True: 35, False: 117]
  ------------------
  138|       |                    /* for clarification see comments below */
  139|     84|                    goto InvalidContinuation1;
  140|    125|                break;
  141|    209|            }
  142|   400k|            ch2 = (unsigned char)s[1];
  143|   400k|            ch3 = (unsigned char)s[2];
  144|   400k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|   400k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 400k, False: 533]
  |  |  |  Branch (20:51): [True: 399k, False: 919]
  |  |  ------------------
  ------------------
  145|       |                /* invalid continuation byte */
  146|  1.45k|                goto InvalidContinuation1;
  147|  1.45k|            }
  148|   399k|            if (ch == 0xE0) {
  ------------------
  |  Branch (148:17): [True: 1.17k, False: 398k]
  ------------------
  149|  1.17k|                if (ch2 < 0xA0)
  ------------------
  |  Branch (149:21): [True: 181, False: 992]
  ------------------
  150|       |                    /* invalid sequence
  151|       |                       \xE0\x80\x80-\xE0\x9F\xBF -- fake 0000-0800 */
  152|    181|                    goto InvalidContinuation1;
  153|   398k|            } else if (ch == 0xED && ch2 >= 0xA0) {
  ------------------
  |  Branch (153:24): [True: 1.92k, False: 396k]
  |  Branch (153:38): [True: 206, False: 1.71k]
  ------------------
  154|       |                /* Decoding UTF-8 sequences in range \xED\xA0\x80-\xED\xBF\xBF
  155|       |                   will result in surrogates in range D800-DFFF. Surrogates are
  156|       |                   not valid UTF-8 so they are rejected.
  157|       |                   See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
  158|       |                   (table 3-7) and http://www.rfc-editor.org/rfc/rfc3629.txt */
  159|    206|                goto InvalidContinuation1;
  160|    206|            }
  161|   399k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|   399k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 398k, False: 580]
  |  |  |  Branch (20:51): [True: 398k, False: 288]
  |  |  ------------------
  ------------------
  162|       |                /* invalid continuation byte */
  163|    868|                goto InvalidContinuation2;
  164|    868|            }
  165|   398k|            ch = (ch << 12) + (ch2 << 6) + ch3 -
  166|   398k|                 ((0xE0 << 12) + (0x80 << 6) + 0x80);
  167|   398k|            assert ((ch > 0x07FF) && (ch <= 0xFFFF));
  ------------------
  |  Branch (167:13): [True: 398k, False: 0]
  |  Branch (167:13): [True: 398k, False: 0]
  ------------------
  168|   398k|            s += 3;
  169|   398k|            if (STRINGLIB_MAX_CHAR <= 0x07FF ||
  ------------------
  |  |   10|   398k|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
  |  Branch (169:17): [Folded, False: 0]
  ------------------
  170|      0|                (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
  |  Branch (170:18): [Folded, False: 0]
  |  Branch (170:49): [True: 0, False: 0]
  ------------------
  171|       |                /* Out-of-range */
  172|      0|                goto Return;
  173|   398k|            *p++ = ch;
  174|   398k|            continue;
  175|   398k|        }
  176|       |
  177|  8.09k|        if (ch < 0xF5) {
  ------------------
  |  Branch (177:13): [True: 5.05k, False: 3.03k]
  ------------------
  178|       |            /* \xF0\x90\x80\x80-\xF4\x8F\xBF\xBF -- 10000-10FFFF */
  179|  5.05k|            Py_UCS4 ch2, ch3, ch4;
  180|  5.05k|            if (end - s < 4) {
  ------------------
  |  Branch (180:17): [True: 198, False: 4.85k]
  ------------------
  181|       |                /* unexpected end of data: the caller will decide whether
  182|       |                   it's an error or not */
  183|    198|                if (end - s < 2)
  ------------------
  |  Branch (183:21): [True: 31, False: 167]
  ------------------
  184|     31|                    break;
  185|    167|                ch2 = (unsigned char)s[1];
  186|    167|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    334|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 131, False: 36]
  |  |  |  Branch (20:51): [True: 99, False: 32]
  |  |  ------------------
  ------------------
  187|     99|                    (ch2 < 0x90 ? ch == 0xF0 : ch == 0xF4))
  ------------------
  |  Branch (187:21): [True: 27, False: 72]
  |  Branch (187:22): [True: 39, False: 60]
  ------------------
  188|       |                    /* for clarification see comments below */
  189|     95|                    goto InvalidContinuation1;
  190|     72|                if (end - s < 3)
  ------------------
  |  Branch (190:21): [True: 33, False: 39]
  ------------------
  191|     33|                    break;
  192|     39|                ch3 = (unsigned char)s[2];
  193|     39|                if (!IS_CONTINUATION_BYTE(ch3))
  ------------------
  |  |   20|     39|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 27, False: 12]
  |  |  |  Branch (20:51): [True: 12, False: 15]
  |  |  ------------------
  ------------------
  194|     27|                    goto InvalidContinuation2;
  195|     12|                break;
  196|     39|            }
  197|  4.85k|            ch2 = (unsigned char)s[1];
  198|  4.85k|            ch3 = (unsigned char)s[2];
  199|  4.85k|            ch4 = (unsigned char)s[3];
  200|  4.85k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|  4.85k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 4.12k, False: 733]
  |  |  |  Branch (20:51): [True: 3.01k, False: 1.11k]
  |  |  ------------------
  ------------------
  201|       |                /* invalid continuation byte */
  202|  1.84k|                goto InvalidContinuation1;
  203|  1.84k|            }
  204|  3.01k|            if (ch == 0xF0) {
  ------------------
  |  Branch (204:17): [True: 1.26k, False: 1.74k]
  ------------------
  205|  1.26k|                if (ch2 < 0x90)
  ------------------
  |  Branch (205:21): [True: 279, False: 982]
  ------------------
  206|       |                    /* invalid sequence
  207|       |                       \xF0\x80\x80\x80-\xF0\x8F\xBF\xBF -- fake 0000-FFFF */
  208|    279|                    goto InvalidContinuation1;
  209|  1.74k|            } else if (ch == 0xF4 && ch2 >= 0x90) {
  ------------------
  |  Branch (209:24): [True: 638, False: 1.11k]
  |  Branch (209:38): [True: 239, False: 399]
  ------------------
  210|       |                /* invalid sequence
  211|       |                   \xF4\x90\x80\x80- -- 110000- overflow */
  212|    239|                goto InvalidContinuation1;
  213|    239|            }
  214|  2.49k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|  2.49k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 2.00k, False: 488]
  |  |  |  Branch (20:51): [True: 1.58k, False: 416]
  |  |  ------------------
  ------------------
  215|       |                /* invalid continuation byte */
  216|    904|                goto InvalidContinuation2;
  217|    904|            }
  218|  1.58k|            if (!IS_CONTINUATION_BYTE(ch4)) {
  ------------------
  |  |   20|  1.58k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 1.50k, False: 85]
  |  |  |  Branch (20:51): [True: 1.19k, False: 304]
  |  |  ------------------
  ------------------
  219|       |                /* invalid continuation byte */
  220|    389|                goto InvalidContinuation3;
  221|    389|            }
  222|  1.19k|            ch = (ch << 18) + (ch2 << 12) + (ch3 << 6) + ch4 -
  223|  1.19k|                 ((0xF0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80);
  224|  1.19k|            assert ((ch > 0xFFFF) && (ch <= 0x10FFFF));
  ------------------
  |  Branch (224:13): [True: 1.19k, False: 0]
  |  Branch (224:13): [True: 1.19k, False: 0]
  ------------------
  225|  1.19k|            s += 4;
  226|  1.19k|            if (STRINGLIB_MAX_CHAR <= 0xFFFF ||
  ------------------
  |  |   10|  1.19k|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
  |  Branch (226:17): [True: 1.19k, Folded]
  ------------------
  227|      0|                (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0xFFFFu
  ------------------
  |  Branch (227:18): [True: 0, Folded]
  |  Branch (227:51): [True: 0, False: 0]
  ------------------
  228|       |                /* Out-of-range */
  229|  1.19k|                goto Return;
  230|      0|            *p++ = ch;
  231|      0|            continue;
  232|  1.19k|        }
  233|  3.03k|        goto InvalidStart;
  234|  8.09k|    }
  235|   106k|    ch = 0;
  236|   126k|Return:
  237|   126k|    *inptr = s;
  238|   126k|    *outpos = p - dest;
  239|   126k|    return ch;
  240|  10.5k|InvalidStart:
  241|  10.5k|    ch = 1;
  242|  10.5k|    goto Return;
  243|  6.64k|InvalidContinuation1:
  244|  6.64k|    ch = 2;
  245|  6.64k|    goto Return;
  246|  1.79k|InvalidContinuation2:
  247|  1.79k|    ch = 3;
  248|  1.79k|    goto Return;
  249|    389|InvalidContinuation3:
  250|    389|    ch = 4;
  251|    389|    goto Return;
  252|   106k|}
unicodeobject.c:ucs4lib_utf8_decode:
   26|  50.8k|{
   27|  50.8k|    Py_UCS4 ch;
   28|  50.8k|    const char *s = *inptr;
   29|  50.8k|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|  50.8k|#define STRINGLIB_CHAR           Py_UCS4
  ------------------
   30|       |
   31|   237k|    while (s < end) {
  ------------------
  |  Branch (31:12): [True: 221k, False: 16.0k]
  ------------------
   32|   221k|        ch = (unsigned char)*s;
   33|       |
   34|   221k|        if (ch < 0x80) {
  ------------------
  |  Branch (34:13): [True: 145k, False: 75.7k]
  ------------------
   35|       |            /* Fast path for runs of ASCII characters. Given that common UTF-8
   36|       |               input will consist of an overwhelming majority of ASCII
   37|       |               characters, we try to optimize for this case by checking
   38|       |               as many characters as a C 'size_t' can contain.
   39|       |               First, check if we can do an aligned read, as most CPUs have
   40|       |               a penalty for unaligned reads.
   41|       |            */
   42|   145k|            if (_Py_IS_ALIGNED(s, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|   145k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 19.1k, False: 126k]
  |  |  ------------------
  ------------------
   43|       |                /* Help register allocation */
   44|  19.1k|                const char *_s = s;
   45|  19.1k|                STRINGLIB_CHAR *_p = p;
  ------------------
  |  |   11|  19.1k|#define STRINGLIB_CHAR           Py_UCS4
  ------------------
   46|   135k|                while (_s + SIZEOF_SIZE_T <= end) {
  ------------------
  |  | 1955|   135k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (46:24): [True: 130k, False: 5.90k]
  ------------------
   47|       |                    /* Read a whole size_t at a time (either 4 or 8 bytes),
   48|       |                       and do a fast unrolled copy if it only contains ASCII
   49|       |                       characters. */
   50|   130k|                    size_t value = *(const size_t *) _s;
   51|   130k|                    if (value & ASCII_CHAR_MASK)
  ------------------
  |  |   12|   130k|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (51:25): [True: 13.2k, False: 116k]
  ------------------
   52|  13.2k|                        break;
   53|   116k|#if PY_LITTLE_ENDIAN
   54|   116k|                    _p[0] = (STRINGLIB_CHAR)(value & 0xFFu);
   55|   116k|                    _p[1] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   56|   116k|                    _p[2] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   57|   116k|                    _p[3] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   58|   116k|# if SIZEOF_SIZE_T == 8
   59|   116k|                    _p[4] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   60|   116k|                    _p[5] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   61|   116k|                    _p[6] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   62|   116k|                    _p[7] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   63|   116k|# endif
   64|       |#else
   65|       |# if SIZEOF_SIZE_T == 8
   66|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 56) & 0xFFu);
   67|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 48) & 0xFFu);
   68|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 40) & 0xFFu);
   69|       |                    _p[3] = (STRINGLIB_CHAR)((value >> 32) & 0xFFu);
   70|       |                    _p[4] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   71|       |                    _p[5] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   72|       |                    _p[6] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   73|       |                    _p[7] = (STRINGLIB_CHAR)(value & 0xFFu);
   74|       |# else
   75|       |                    _p[0] = (STRINGLIB_CHAR)((value >> 24) & 0xFFu);
   76|       |                    _p[1] = (STRINGLIB_CHAR)((value >> 16) & 0xFFu);
   77|       |                    _p[2] = (STRINGLIB_CHAR)((value >> 8) & 0xFFu);
   78|       |                    _p[3] = (STRINGLIB_CHAR)(value & 0xFFu);
   79|       |# endif
   80|       |#endif
   81|   116k|                    _s += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   116k|#define SIZEOF_SIZE_T 8
  ------------------
   82|   116k|                    _p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   116k|#define SIZEOF_SIZE_T 8
  ------------------
   83|   116k|                }
   84|  19.1k|                s = _s;
   85|  19.1k|                p = _p;
   86|  19.1k|                if (s == end)
  ------------------
  |  Branch (86:21): [True: 255, False: 18.9k]
  ------------------
   87|    255|                    break;
   88|  18.9k|                ch = (unsigned char)*s;
   89|  18.9k|            }
   90|   145k|            if (ch < 0x80) {
  ------------------
  |  Branch (90:17): [True: 143k, False: 1.25k]
  ------------------
   91|   143k|                s++;
   92|   143k|                *p++ = ch;
   93|   143k|                continue;
   94|   143k|            }
   95|   145k|        }
   96|       |
   97|  77.0k|        if (ch < 0xE0) {
  ------------------
  |  Branch (97:13): [True: 19.2k, False: 57.7k]
  ------------------
   98|       |            /* \xC2\x80-\xDF\xBF -- 0080-07FF */
   99|  19.2k|            Py_UCS4 ch2;
  100|  19.2k|            if (ch < 0xC2) {
  ------------------
  |  Branch (100:17): [True: 8.43k, False: 10.8k]
  ------------------
  101|       |                /* invalid sequence
  102|       |                \x80-\xBF -- continuation byte
  103|       |                \xC0-\xC1 -- fake 0000-007F */
  104|  8.43k|                goto InvalidStart;
  105|  8.43k|            }
  106|  10.8k|            if (end - s < 2) {
  ------------------
  |  Branch (106:17): [True: 33, False: 10.8k]
  ------------------
  107|       |                /* unexpected end of data: the caller will decide whether
  108|       |                   it's an error or not */
  109|     33|                break;
  110|     33|            }
  111|  10.8k|            ch2 = (unsigned char)s[1];
  112|  10.8k|            if (!IS_CONTINUATION_BYTE(ch2))
  ------------------
  |  |   20|  10.8k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 10.3k, False: 475]
  |  |  |  Branch (20:51): [True: 8.74k, False: 1.59k]
  |  |  ------------------
  ------------------
  113|       |                /* invalid continuation byte */
  114|  2.07k|                goto InvalidContinuation1;
  115|  8.74k|            ch = (ch << 6) + ch2 -
  116|  8.74k|                 ((0xC0 << 6) + 0x80);
  117|  8.74k|            assert ((ch > 0x007F) && (ch <= 0x07FF));
  ------------------
  |  Branch (117:13): [True: 8.74k, False: 0]
  |  Branch (117:13): [True: 8.74k, False: 0]
  ------------------
  118|  8.74k|            s += 2;
  119|  8.74k|            if (STRINGLIB_MAX_CHAR <= 0x007F ||
  ------------------
  |  |   10|  8.74k|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
  |  Branch (119:17): [Folded, False: 0]
  ------------------
  120|      0|                (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x07FF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
  |  Branch (120:18): [Folded, False: 0]
  |  Branch (120:49): [True: 0, False: 0]
  ------------------
  121|       |                /* Out-of-range */
  122|      0|                goto Return;
  123|  8.74k|            *p++ = ch;
  124|  8.74k|            continue;
  125|  8.74k|        }
  126|       |
  127|  57.7k|        if (ch < 0xF0) {
  ------------------
  |  Branch (127:13): [True: 19.8k, False: 37.8k]
  ------------------
  128|       |            /* \xE0\xA0\x80-\xEF\xBF\xBF -- 0800-FFFF */
  129|  19.8k|            Py_UCS4 ch2, ch3;
  130|  19.8k|            if (end - s < 3) {
  ------------------
  |  Branch (130:17): [True: 134, False: 19.7k]
  ------------------
  131|       |                /* unexpected end of data: the caller will decide whether
  132|       |                   it's an error or not */
  133|    134|                if (end - s < 2)
  ------------------
  |  Branch (133:21): [True: 52, False: 82]
  ------------------
  134|     52|                    break;
  135|     82|                ch2 = (unsigned char)s[1];
  136|     82|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    164|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 67, False: 15]
  |  |  |  Branch (20:51): [True: 60, False: 7]
  |  |  ------------------
  ------------------
  137|     60|                    (ch2 < 0xA0 ? ch == 0xE0 : ch == 0xED))
  ------------------
  |  Branch (137:21): [True: 20, False: 40]
  |  Branch (137:22): [True: 21, False: 39]
  ------------------
  138|       |                    /* for clarification see comments below */
  139|     42|                    goto InvalidContinuation1;
  140|     40|                break;
  141|     82|            }
  142|  19.7k|            ch2 = (unsigned char)s[1];
  143|  19.7k|            ch3 = (unsigned char)s[2];
  144|  19.7k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|  19.7k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 18.8k, False: 931]
  |  |  |  Branch (20:51): [True: 17.8k, False: 944]
  |  |  ------------------
  ------------------
  145|       |                /* invalid continuation byte */
  146|  1.87k|                goto InvalidContinuation1;
  147|  1.87k|            }
  148|  17.8k|            if (ch == 0xE0) {
  ------------------
  |  Branch (148:17): [True: 561, False: 17.3k]
  ------------------
  149|    561|                if (ch2 < 0xA0)
  ------------------
  |  Branch (149:21): [True: 226, False: 335]
  ------------------
  150|       |                    /* invalid sequence
  151|       |                       \xE0\x80\x80-\xE0\x9F\xBF -- fake 0000-0800 */
  152|    226|                    goto InvalidContinuation1;
  153|  17.3k|            } else if (ch == 0xED && ch2 >= 0xA0) {
  ------------------
  |  Branch (153:24): [True: 1.50k, False: 15.8k]
  |  Branch (153:38): [True: 626, False: 877]
  ------------------
  154|       |                /* Decoding UTF-8 sequences in range \xED\xA0\x80-\xED\xBF\xBF
  155|       |                   will result in surrogates in range D800-DFFF. Surrogates are
  156|       |                   not valid UTF-8 so they are rejected.
  157|       |                   See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
  158|       |                   (table 3-7) and http://www.rfc-editor.org/rfc/rfc3629.txt */
  159|    626|                goto InvalidContinuation1;
  160|    626|            }
  161|  17.0k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|  17.0k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 16.6k, False: 392]
  |  |  |  Branch (20:51): [True: 15.4k, False: 1.18k]
  |  |  ------------------
  ------------------
  162|       |                /* invalid continuation byte */
  163|  1.58k|                goto InvalidContinuation2;
  164|  1.58k|            }
  165|  15.4k|            ch = (ch << 12) + (ch2 << 6) + ch3 -
  166|  15.4k|                 ((0xE0 << 12) + (0x80 << 6) + 0x80);
  167|  15.4k|            assert ((ch > 0x07FF) && (ch <= 0xFFFF));
  ------------------
  |  Branch (167:13): [True: 15.4k, False: 0]
  |  Branch (167:13): [True: 15.4k, False: 0]
  ------------------
  168|  15.4k|            s += 3;
  169|  15.4k|            if (STRINGLIB_MAX_CHAR <= 0x07FF ||
  ------------------
  |  |   10|  15.4k|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
  |  Branch (169:17): [Folded, False: 0]
  ------------------
  170|      0|                (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0xFFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
  |  Branch (170:18): [Folded, False: 0]
  |  Branch (170:49): [True: 0, False: 0]
  ------------------
  171|       |                /* Out-of-range */
  172|      0|                goto Return;
  173|  15.4k|            *p++ = ch;
  174|  15.4k|            continue;
  175|  15.4k|        }
  176|       |
  177|  37.8k|        if (ch < 0xF5) {
  ------------------
  |  Branch (177:13): [True: 24.8k, False: 12.9k]
  ------------------
  178|       |            /* \xF0\x90\x80\x80-\xF4\x8F\xBF\xBF -- 10000-10FFFF */
  179|  24.8k|            Py_UCS4 ch2, ch3, ch4;
  180|  24.8k|            if (end - s < 4) {
  ------------------
  |  Branch (180:17): [True: 259, False: 24.5k]
  ------------------
  181|       |                /* unexpected end of data: the caller will decide whether
  182|       |                   it's an error or not */
  183|    259|                if (end - s < 2)
  ------------------
  |  Branch (183:21): [True: 76, False: 183]
  ------------------
  184|     76|                    break;
  185|    183|                ch2 = (unsigned char)s[1];
  186|    183|                if (!IS_CONTINUATION_BYTE(ch2) ||
  ------------------
  |  |   20|    366|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 145, False: 38]
  |  |  |  Branch (20:51): [True: 116, False: 29]
  |  |  ------------------
  ------------------
  187|    116|                    (ch2 < 0x90 ? ch == 0xF0 : ch == 0xF4))
  ------------------
  |  Branch (187:21): [True: 24, False: 92]
  |  Branch (187:22): [True: 49, False: 67]
  ------------------
  188|       |                    /* for clarification see comments below */
  189|     91|                    goto InvalidContinuation1;
  190|     92|                if (end - s < 3)
  ------------------
  |  Branch (190:21): [True: 32, False: 60]
  ------------------
  191|     32|                    break;
  192|     60|                ch3 = (unsigned char)s[2];
  193|     60|                if (!IS_CONTINUATION_BYTE(ch3))
  ------------------
  |  |   20|     60|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 37, False: 23]
  |  |  |  Branch (20:51): [True: 24, False: 13]
  |  |  ------------------
  ------------------
  194|     36|                    goto InvalidContinuation2;
  195|     24|                break;
  196|     60|            }
  197|  24.5k|            ch2 = (unsigned char)s[1];
  198|  24.5k|            ch3 = (unsigned char)s[2];
  199|  24.5k|            ch4 = (unsigned char)s[3];
  200|  24.5k|            if (!IS_CONTINUATION_BYTE(ch2)) {
  ------------------
  |  |   20|  24.5k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 22.7k, False: 1.88k]
  |  |  |  Branch (20:51): [True: 21.1k, False: 1.52k]
  |  |  ------------------
  ------------------
  201|       |                /* invalid continuation byte */
  202|  3.41k|                goto InvalidContinuation1;
  203|  3.41k|            }
  204|  21.1k|            if (ch == 0xF0) {
  ------------------
  |  Branch (204:17): [True: 9.53k, False: 11.6k]
  ------------------
  205|  9.53k|                if (ch2 < 0x90)
  ------------------
  |  Branch (205:21): [True: 316, False: 9.21k]
  ------------------
  206|       |                    /* invalid sequence
  207|       |                       \xF0\x80\x80\x80-\xF0\x8F\xBF\xBF -- fake 0000-FFFF */
  208|    316|                    goto InvalidContinuation1;
  209|  11.6k|            } else if (ch == 0xF4 && ch2 >= 0x90) {
  ------------------
  |  Branch (209:24): [True: 1.98k, False: 9.66k]
  |  Branch (209:38): [True: 227, False: 1.75k]
  ------------------
  210|       |                /* invalid sequence
  211|       |                   \xF4\x90\x80\x80- -- 110000- overflow */
  212|    227|                goto InvalidContinuation1;
  213|    227|            }
  214|  20.6k|            if (!IS_CONTINUATION_BYTE(ch3)) {
  ------------------
  |  |   20|  20.6k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 20.0k, False: 541]
  |  |  |  Branch (20:51): [True: 19.6k, False: 448]
  |  |  ------------------
  ------------------
  215|       |                /* invalid continuation byte */
  216|    989|                goto InvalidContinuation2;
  217|    989|            }
  218|  19.6k|            if (!IS_CONTINUATION_BYTE(ch4)) {
  ------------------
  |  |   20|  19.6k|#define IS_CONTINUATION_BYTE(ch) ((ch) >= 0x80 && (ch) < 0xC0)
  |  |  ------------------
  |  |  |  Branch (20:35): [True: 19.0k, False: 610]
  |  |  |  Branch (20:51): [True: 18.2k, False: 747]
  |  |  ------------------
  ------------------
  219|       |                /* invalid continuation byte */
  220|  1.35k|                goto InvalidContinuation3;
  221|  1.35k|            }
  222|  18.2k|            ch = (ch << 18) + (ch2 << 12) + (ch3 << 6) + ch4 -
  223|  18.2k|                 ((0xF0 << 18) + (0x80 << 12) + (0x80 << 6) + 0x80);
  224|  18.2k|            assert ((ch > 0xFFFF) && (ch <= 0x10FFFF));
  ------------------
  |  Branch (224:13): [True: 18.2k, False: 0]
  |  Branch (224:13): [True: 18.2k, False: 0]
  ------------------
  225|  18.2k|            s += 4;
  226|  18.2k|            if (STRINGLIB_MAX_CHAR <= 0xFFFF ||
  ------------------
  |  |   10|  18.2k|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
  |  Branch (226:17): [Folded, False: 0]
  ------------------
  227|      0|                (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
                              (STRINGLIB_MAX_CHAR < 0x10FFFF && ch > STRINGLIB_MAX_CHAR))
  ------------------
  |  |   10|      0|#define STRINGLIB_MAX_CHAR       0x10FFFFu
  ------------------
  |  Branch (227:18): [Folded, False: 0]
  |  Branch (227:51): [True: 0, False: 0]
  ------------------
  228|       |                /* Out-of-range */
  229|      0|                goto Return;
  230|  18.2k|            *p++ = ch;
  231|  18.2k|            continue;
  232|  18.2k|        }
  233|  12.9k|        goto InvalidStart;
  234|  37.8k|    }
  235|  16.5k|    ch = 0;
  236|  50.8k|Return:
  237|  50.8k|    *inptr = s;
  238|  50.8k|    *outpos = p - dest;
  239|  50.8k|    return ch;
  240|  21.4k|InvalidStart:
  241|  21.4k|    ch = 1;
  242|  21.4k|    goto Return;
  243|  8.88k|InvalidContinuation1:
  244|  8.88k|    ch = 2;
  245|  8.88k|    goto Return;
  246|  2.60k|InvalidContinuation2:
  247|  2.60k|    ch = 3;
  248|  2.60k|    goto Return;
  249|  1.35k|InvalidContinuation3:
  250|  1.35k|    ch = 4;
  251|  1.35k|    goto Return;
  252|  16.5k|}
unicodeobject.c:asciilib_utf16_decode:
  517|    141|{
  518|    141|    Py_UCS4 ch;
  519|    141|    const unsigned char *q = *inptr;
  520|    141|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|    141|#define STRINGLIB_CHAR           Py_UCS1
  ------------------
  521|       |    /* Offsets from q for retrieving byte pairs in the right order. */
  522|    141|#if PY_LITTLE_ENDIAN
  523|    141|    int ihi = !!native_ordering, ilo = !native_ordering;
  524|       |#else
  525|       |    int ihi = !native_ordering, ilo = !!native_ordering;
  526|       |#endif
  527|    141|    --e;
  528|       |
  529|    141|    while (q < e) {
  ------------------
  |  Branch (529:12): [True: 141, False: 0]
  ------------------
  530|    141|        Py_UCS4 ch2;
  531|       |        /* First check for possible aligned read of a C 'long'. Unaligned
  532|       |           reads are more expensive, better to defer to another iteration. */
  533|    141|        if (_Py_IS_ALIGNED(q, ALIGNOF_LONG)) {
  ------------------
  |  |  246|    141|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 141, False: 0]
  |  |  ------------------
  ------------------
  534|       |            /* Fast path for runs of in-range non-surrogate chars. */
  535|    141|            const unsigned char *_q = q;
  536|    141|            while (_q + SIZEOF_LONG <= e) {
  ------------------
  |  | 1931|    141|#define SIZEOF_LONG 8
  ------------------
  |  Branch (536:20): [True: 141, False: 0]
  ------------------
  537|    141|                unsigned long block = * (const unsigned long *) _q;
  538|    141|                if (native_ordering) {
  ------------------
  |  Branch (538:21): [True: 85, False: 56]
  ------------------
  539|       |                    /* Can use buffer directly */
  540|     85|                    if (block & FAST_CHAR_MASK)
  ------------------
  |  |  498|     85|# define FAST_CHAR_MASK         (UCS2_REPEAT_MASK * (0xFFFFu & ~STRINGLIB_MAX_CHAR))
  |  |  ------------------
  |  |  |  |  487|     85|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  ------------------
  |  |               # define FAST_CHAR_MASK         (UCS2_REPEAT_MASK * (0xFFFFu & ~STRINGLIB_MAX_CHAR))
  |  |  ------------------
  |  |  |  |   10|     85|#define STRINGLIB_MAX_CHAR       0x7Fu
  |  |  ------------------
  ------------------
  |  Branch (540:25): [True: 85, False: 0]
  ------------------
  541|     85|                        break;
  542|     85|                }
  543|     56|                else {
  544|       |                    /* Need to byte-swap */
  545|     56|                    if (block & SWAB(FAST_CHAR_MASK))
  ------------------
  |  |  510|     56|#define SWAB(value)             ((((value) >> 8) & STRIPPED_MASK) | \
  |  |  ------------------
  |  |  |  |  508|     56|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|     56|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  511|     56|                                 (((value) & STRIPPED_MASK) << 8))
  |  |  ------------------
  |  |  |  |  508|     56|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|     56|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (545:25): [True: 56, False: 0]
  ------------------
  546|     56|                        break;
  547|      0|#if STRINGLIB_SIZEOF_CHAR == 1
  548|      0|                    block >>= 8;
  549|       |#else
  550|       |                    block = SWAB(block);
  551|       |#endif
  552|      0|                }
  553|      0|#if PY_LITTLE_ENDIAN
  554|       |# if SIZEOF_LONG == 4
  555|       |                p[0] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  556|       |                p[1] = (STRINGLIB_CHAR)(block >> 16);
  557|       |# elif SIZEOF_LONG == 8
  558|      0|                p[0] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  559|      0|                p[1] = (STRINGLIB_CHAR)((block >> 16) & 0xFFFFu);
  560|      0|                p[2] = (STRINGLIB_CHAR)((block >> 32) & 0xFFFFu);
  561|      0|                p[3] = (STRINGLIB_CHAR)(block >> 48);
  562|      0|# endif
  563|       |#else
  564|       |# if SIZEOF_LONG == 4
  565|       |                p[0] = (STRINGLIB_CHAR)(block >> 16);
  566|       |                p[1] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  567|       |# elif SIZEOF_LONG == 8
  568|       |                p[0] = (STRINGLIB_CHAR)(block >> 48);
  569|       |                p[1] = (STRINGLIB_CHAR)((block >> 32) & 0xFFFFu);
  570|       |                p[2] = (STRINGLIB_CHAR)((block >> 16) & 0xFFFFu);
  571|       |                p[3] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  572|       |# endif
  573|       |#endif
  574|      0|                _q += SIZEOF_LONG;
  ------------------
  |  | 1931|      0|#define SIZEOF_LONG 8
  ------------------
  575|      0|                p += SIZEOF_LONG / 2;
  ------------------
  |  | 1931|      0|#define SIZEOF_LONG 8
  ------------------
  576|      0|            }
  577|    141|            q = _q;
  578|    141|            if (q >= e)
  ------------------
  |  Branch (578:17): [True: 0, False: 141]
  ------------------
  579|      0|                break;
  580|    141|        }
  581|       |
  582|    141|        ch = (q[ihi] << 8) | q[ilo];
  583|    141|        q += 2;
  584|    141|        if (!Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (584:13): [True: 138, False: 3]
  ------------------
  585|    138|#if STRINGLIB_SIZEOF_CHAR < 2
  586|    138|            if (ch > STRINGLIB_MAX_CHAR)
  ------------------
  |  |   10|    138|#define STRINGLIB_MAX_CHAR       0x7Fu
  ------------------
  |  Branch (586:17): [True: 138, False: 0]
  ------------------
  587|       |                /* Out-of-range */
  588|    138|                goto Return;
  589|      0|#endif
  590|      0|            *p++ = (STRINGLIB_CHAR)ch;
  591|      0|            continue;
  592|    138|        }
  593|       |
  594|       |        /* UTF-16 code pair: */
  595|      3|        if (!Py_UNICODE_IS_HIGH_SURROGATE(ch))
  ------------------
  |  Branch (595:13): [True: 1, False: 2]
  ------------------
  596|      1|            goto IllegalEncoding;
  597|      2|        if (q >= e)
  ------------------
  |  Branch (597:13): [True: 0, False: 2]
  ------------------
  598|      0|            goto UnexpectedEnd;
  599|      2|        ch2 = (q[ihi] << 8) | q[ilo];
  600|      2|        q += 2;
  601|      2|        if (!Py_UNICODE_IS_LOW_SURROGATE(ch2))
  ------------------
  |  Branch (601:13): [True: 1, False: 1]
  ------------------
  602|      1|            goto IllegalSurrogate;
  603|      1|        ch = Py_UNICODE_JOIN_SURROGATES(ch, ch2);
  604|      1|#if STRINGLIB_SIZEOF_CHAR < 4
  605|       |        /* Out-of-range */
  606|      1|        goto Return;
  607|       |#else
  608|       |        *p++ = (STRINGLIB_CHAR)ch;
  609|       |#endif
  610|      2|    }
  611|      0|    ch = 0;
  612|    141|Return:
  613|    141|    *inptr = q;
  614|    141|    *outpos = p - dest;
  615|    141|    return ch;
  616|      0|UnexpectedEnd:
  617|      0|    ch = 1;
  618|      0|    goto Return;
  619|      1|IllegalEncoding:
  620|      1|    ch = 2;
  621|      1|    goto Return;
  622|      1|IllegalSurrogate:
  623|      1|    ch = 3;
  624|      1|    goto Return;
  625|      0|}
unicodeobject.c:ucs2lib_utf16_decode:
  517|    138|{
  518|    138|    Py_UCS4 ch;
  519|    138|    const unsigned char *q = *inptr;
  520|    138|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|    138|#define STRINGLIB_CHAR           Py_UCS2
  ------------------
  521|       |    /* Offsets from q for retrieving byte pairs in the right order. */
  522|    138|#if PY_LITTLE_ENDIAN
  523|    138|    int ihi = !!native_ordering, ilo = !native_ordering;
  524|       |#else
  525|       |    int ihi = !native_ordering, ilo = !!native_ordering;
  526|       |#endif
  527|    138|    --e;
  528|       |
  529|  12.2k|    while (q < e) {
  ------------------
  |  Branch (529:12): [True: 12.1k, False: 65]
  ------------------
  530|  12.1k|        Py_UCS4 ch2;
  531|       |        /* First check for possible aligned read of a C 'long'. Unaligned
  532|       |           reads are more expensive, better to defer to another iteration. */
  533|  12.1k|        if (_Py_IS_ALIGNED(q, ALIGNOF_LONG)) {
  ------------------
  |  |  246|  12.1k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 3.00k, False: 9.17k]
  |  |  ------------------
  ------------------
  534|       |            /* Fast path for runs of in-range non-surrogate chars. */
  535|  3.00k|            const unsigned char *_q = q;
  536|  4.25k|            while (_q + SIZEOF_LONG <= e) {
  ------------------
  |  | 1931|  4.25k|#define SIZEOF_LONG 8
  ------------------
  |  Branch (536:20): [True: 4.19k, False: 62]
  ------------------
  537|  4.19k|                unsigned long block = * (const unsigned long *) _q;
  538|  4.19k|                if (native_ordering) {
  ------------------
  |  Branch (538:21): [True: 3.26k, False: 926]
  ------------------
  539|       |                    /* Can use buffer directly */
  540|  3.26k|                    if (block & FAST_CHAR_MASK)
  ------------------
  |  |  505|  3.26k|# define FAST_CHAR_MASK         (UCS2_REPEAT_MASK * 0x8000u)
  |  |  ------------------
  |  |  |  |  487|  3.26k|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  ------------------
  ------------------
  |  Branch (540:25): [True: 2.33k, False: 928]
  ------------------
  541|  2.33k|                        break;
  542|  3.26k|                }
  543|    926|                else {
  544|       |                    /* Need to byte-swap */
  545|    926|                    if (block & SWAB(FAST_CHAR_MASK))
  ------------------
  |  |  510|    926|#define SWAB(value)             ((((value) >> 8) & STRIPPED_MASK) | \
  |  |  ------------------
  |  |  |  |  508|    926|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|    926|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  511|    926|                                 (((value) & STRIPPED_MASK) << 8))
  |  |  ------------------
  |  |  |  |  508|    926|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|    926|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (545:25): [True: 601, False: 325]
  ------------------
  546|    601|                        break;
  547|       |#if STRINGLIB_SIZEOF_CHAR == 1
  548|       |                    block >>= 8;
  549|       |#else
  550|    325|                    block = SWAB(block);
  ------------------
  |  |  510|    325|#define SWAB(value)             ((((value) >> 8) & STRIPPED_MASK) | \
  |  |  ------------------
  |  |  |  |  508|    325|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|    325|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  511|    325|                                 (((value) & STRIPPED_MASK) << 8))
  |  |  ------------------
  |  |  |  |  508|    325|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|    325|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|    325|#endif
  552|    325|                }
  553|  1.25k|#if PY_LITTLE_ENDIAN
  554|       |# if SIZEOF_LONG == 4
  555|       |                p[0] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  556|       |                p[1] = (STRINGLIB_CHAR)(block >> 16);
  557|       |# elif SIZEOF_LONG == 8
  558|  1.25k|                p[0] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  559|  1.25k|                p[1] = (STRINGLIB_CHAR)((block >> 16) & 0xFFFFu);
  560|  1.25k|                p[2] = (STRINGLIB_CHAR)((block >> 32) & 0xFFFFu);
  561|  1.25k|                p[3] = (STRINGLIB_CHAR)(block >> 48);
  562|  1.25k|# endif
  563|       |#else
  564|       |# if SIZEOF_LONG == 4
  565|       |                p[0] = (STRINGLIB_CHAR)(block >> 16);
  566|       |                p[1] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  567|       |# elif SIZEOF_LONG == 8
  568|       |                p[0] = (STRINGLIB_CHAR)(block >> 48);
  569|       |                p[1] = (STRINGLIB_CHAR)((block >> 32) & 0xFFFFu);
  570|       |                p[2] = (STRINGLIB_CHAR)((block >> 16) & 0xFFFFu);
  571|       |                p[3] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  572|       |# endif
  573|       |#endif
  574|  1.25k|                _q += SIZEOF_LONG;
  ------------------
  |  | 1931|  1.25k|#define SIZEOF_LONG 8
  ------------------
  575|  1.25k|                p += SIZEOF_LONG / 2;
  ------------------
  |  | 1931|  1.25k|#define SIZEOF_LONG 8
  ------------------
  576|  1.25k|            }
  577|  3.00k|            q = _q;
  578|  3.00k|            if (q >= e)
  ------------------
  |  Branch (578:17): [True: 4, False: 2.99k]
  ------------------
  579|      4|                break;
  580|  3.00k|        }
  581|       |
  582|  12.1k|        ch = (q[ihi] << 8) | q[ilo];
  583|  12.1k|        q += 2;
  584|  12.1k|        if (!Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (584:13): [True: 12.1k, False: 69]
  ------------------
  585|       |#if STRINGLIB_SIZEOF_CHAR < 2
  586|       |            if (ch > STRINGLIB_MAX_CHAR)
  587|       |                /* Out-of-range */
  588|       |                goto Return;
  589|       |#endif
  590|  12.1k|            *p++ = (STRINGLIB_CHAR)ch;
  591|  12.1k|            continue;
  592|  12.1k|        }
  593|       |
  594|       |        /* UTF-16 code pair: */
  595|     69|        if (!Py_UNICODE_IS_HIGH_SURROGATE(ch))
  ------------------
  |  Branch (595:13): [True: 5, False: 64]
  ------------------
  596|      5|            goto IllegalEncoding;
  597|     64|        if (q >= e)
  ------------------
  |  Branch (597:13): [True: 0, False: 64]
  ------------------
  598|      0|            goto UnexpectedEnd;
  599|     64|        ch2 = (q[ihi] << 8) | q[ilo];
  600|     64|        q += 2;
  601|     64|        if (!Py_UNICODE_IS_LOW_SURROGATE(ch2))
  ------------------
  |  Branch (601:13): [True: 5, False: 59]
  ------------------
  602|      5|            goto IllegalSurrogate;
  603|     59|        ch = Py_UNICODE_JOIN_SURROGATES(ch, ch2);
  604|     59|#if STRINGLIB_SIZEOF_CHAR < 4
  605|       |        /* Out-of-range */
  606|     59|        goto Return;
  607|       |#else
  608|       |        *p++ = (STRINGLIB_CHAR)ch;
  609|       |#endif
  610|     64|    }
  611|     69|    ch = 0;
  612|    138|Return:
  613|    138|    *inptr = q;
  614|    138|    *outpos = p - dest;
  615|    138|    return ch;
  616|      0|UnexpectedEnd:
  617|      0|    ch = 1;
  618|      0|    goto Return;
  619|      5|IllegalEncoding:
  620|      5|    ch = 2;
  621|      5|    goto Return;
  622|      5|IllegalSurrogate:
  623|      5|    ch = 3;
  624|      5|    goto Return;
  625|     69|}
unicodeobject.c:ucs4lib_utf16_decode:
  517|     59|{
  518|     59|    Py_UCS4 ch;
  519|     59|    const unsigned char *q = *inptr;
  520|     59|    STRINGLIB_CHAR *p = dest + *outpos;
  ------------------
  |  |   11|     59|#define STRINGLIB_CHAR           Py_UCS4
  ------------------
  521|       |    /* Offsets from q for retrieving byte pairs in the right order. */
  522|     59|#if PY_LITTLE_ENDIAN
  523|     59|    int ihi = !!native_ordering, ilo = !native_ordering;
  524|       |#else
  525|       |    int ihi = !native_ordering, ilo = !!native_ordering;
  526|       |#endif
  527|     59|    --e;
  528|       |
  529|  15.0k|    while (q < e) {
  ------------------
  |  Branch (529:12): [True: 14.9k, False: 50]
  ------------------
  530|  14.9k|        Py_UCS4 ch2;
  531|       |        /* First check for possible aligned read of a C 'long'. Unaligned
  532|       |           reads are more expensive, better to defer to another iteration. */
  533|  14.9k|        if (_Py_IS_ALIGNED(q, ALIGNOF_LONG)) {
  ------------------
  |  |  246|  14.9k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 3.75k, False: 11.2k]
  |  |  ------------------
  ------------------
  534|       |            /* Fast path for runs of in-range non-surrogate chars. */
  535|  3.75k|            const unsigned char *_q = q;
  536|  7.31k|            while (_q + SIZEOF_LONG <= e) {
  ------------------
  |  | 1931|  7.31k|#define SIZEOF_LONG 8
  ------------------
  |  Branch (536:20): [True: 7.26k, False: 55]
  ------------------
  537|  7.26k|                unsigned long block = * (const unsigned long *) _q;
  538|  7.26k|                if (native_ordering) {
  ------------------
  |  Branch (538:21): [True: 2.78k, False: 4.47k]
  ------------------
  539|       |                    /* Can use buffer directly */
  540|  2.78k|                    if (block & FAST_CHAR_MASK)
  ------------------
  |  |  505|  2.78k|# define FAST_CHAR_MASK         (UCS2_REPEAT_MASK * 0x8000u)
  |  |  ------------------
  |  |  |  |  487|  2.78k|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  ------------------
  ------------------
  |  Branch (540:25): [True: 1.04k, False: 1.74k]
  ------------------
  541|  1.04k|                        break;
  542|  2.78k|                }
  543|  4.47k|                else {
  544|       |                    /* Need to byte-swap */
  545|  4.47k|                    if (block & SWAB(FAST_CHAR_MASK))
  ------------------
  |  |  510|  4.47k|#define SWAB(value)             ((((value) >> 8) & STRIPPED_MASK) | \
  |  |  ------------------
  |  |  |  |  508|  4.47k|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|  4.47k|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  511|  4.47k|                                 (((value) & STRIPPED_MASK) << 8))
  |  |  ------------------
  |  |  |  |  508|  4.47k|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|  4.47k|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (545:25): [True: 2.65k, False: 1.81k]
  ------------------
  546|  2.65k|                        break;
  547|       |#if STRINGLIB_SIZEOF_CHAR == 1
  548|       |                    block >>= 8;
  549|       |#else
  550|  1.81k|                    block = SWAB(block);
  ------------------
  |  |  510|  1.81k|#define SWAB(value)             ((((value) >> 8) & STRIPPED_MASK) | \
  |  |  ------------------
  |  |  |  |  508|  1.81k|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|  1.81k|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  511|  1.81k|                                 (((value) & STRIPPED_MASK) << 8))
  |  |  ------------------
  |  |  |  |  508|  1.81k|#define STRIPPED_MASK           (UCS2_REPEAT_MASK * 0x00FFu)
  |  |  |  |  ------------------
  |  |  |  |  |  |  487|  1.81k|# define UCS2_REPEAT_MASK 0x0001000100010001ul
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|  1.81k|#endif
  552|  1.81k|                }
  553|  3.56k|#if PY_LITTLE_ENDIAN
  554|       |# if SIZEOF_LONG == 4
  555|       |                p[0] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  556|       |                p[1] = (STRINGLIB_CHAR)(block >> 16);
  557|       |# elif SIZEOF_LONG == 8
  558|  3.56k|                p[0] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  559|  3.56k|                p[1] = (STRINGLIB_CHAR)((block >> 16) & 0xFFFFu);
  560|  3.56k|                p[2] = (STRINGLIB_CHAR)((block >> 32) & 0xFFFFu);
  561|  3.56k|                p[3] = (STRINGLIB_CHAR)(block >> 48);
  562|  3.56k|# endif
  563|       |#else
  564|       |# if SIZEOF_LONG == 4
  565|       |                p[0] = (STRINGLIB_CHAR)(block >> 16);
  566|       |                p[1] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  567|       |# elif SIZEOF_LONG == 8
  568|       |                p[0] = (STRINGLIB_CHAR)(block >> 48);
  569|       |                p[1] = (STRINGLIB_CHAR)((block >> 32) & 0xFFFFu);
  570|       |                p[2] = (STRINGLIB_CHAR)((block >> 16) & 0xFFFFu);
  571|       |                p[3] = (STRINGLIB_CHAR)(block & 0xFFFFu);
  572|       |# endif
  573|       |#endif
  574|  3.56k|                _q += SIZEOF_LONG;
  ------------------
  |  | 1931|  3.56k|#define SIZEOF_LONG 8
  ------------------
  575|  3.56k|                p += SIZEOF_LONG / 2;
  ------------------
  |  | 1931|  3.56k|#define SIZEOF_LONG 8
  ------------------
  576|  3.56k|            }
  577|  3.75k|            q = _q;
  578|  3.75k|            if (q >= e)
  ------------------
  |  Branch (578:17): [True: 6, False: 3.74k]
  ------------------
  579|      6|                break;
  580|  3.75k|        }
  581|       |
  582|  14.9k|        ch = (q[ihi] << 8) | q[ilo];
  583|  14.9k|        q += 2;
  584|  14.9k|        if (!Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (584:13): [True: 14.7k, False: 162]
  ------------------
  585|       |#if STRINGLIB_SIZEOF_CHAR < 2
  586|       |            if (ch > STRINGLIB_MAX_CHAR)
  587|       |                /* Out-of-range */
  588|       |                goto Return;
  589|       |#endif
  590|  14.7k|            *p++ = (STRINGLIB_CHAR)ch;
  591|  14.7k|            continue;
  592|  14.7k|        }
  593|       |
  594|       |        /* UTF-16 code pair: */
  595|    162|        if (!Py_UNICODE_IS_HIGH_SURROGATE(ch))
  ------------------
  |  Branch (595:13): [True: 1, False: 161]
  ------------------
  596|      1|            goto IllegalEncoding;
  597|    161|        if (q >= e)
  ------------------
  |  Branch (597:13): [True: 1, False: 160]
  ------------------
  598|      1|            goto UnexpectedEnd;
  599|    160|        ch2 = (q[ihi] << 8) | q[ilo];
  600|    160|        q += 2;
  601|    160|        if (!Py_UNICODE_IS_LOW_SURROGATE(ch2))
  ------------------
  |  Branch (601:13): [True: 1, False: 159]
  ------------------
  602|      1|            goto IllegalSurrogate;
  603|    159|        ch = Py_UNICODE_JOIN_SURROGATES(ch, ch2);
  604|       |#if STRINGLIB_SIZEOF_CHAR < 4
  605|       |        /* Out-of-range */
  606|       |        goto Return;
  607|       |#else
  608|    159|        *p++ = (STRINGLIB_CHAR)ch;
  609|    159|#endif
  610|    159|    }
  611|     56|    ch = 0;
  612|     59|Return:
  613|     59|    *inptr = q;
  614|     59|    *outpos = p - dest;
  615|     59|    return ch;
  616|      1|UnexpectedEnd:
  617|      1|    ch = 1;
  618|      1|    goto Return;
  619|      1|IllegalEncoding:
  620|      1|    ch = 2;
  621|      1|    goto Return;
  622|      1|IllegalSurrogate:
  623|      1|    ch = 3;
  624|      1|    goto Return;
  625|     56|}

unicodeobject.c:ucs1lib_count:
   16|  37.4k|{
   17|  37.4k|    Py_ssize_t count;
   18|       |
   19|  37.4k|    if (str_len < 0)
  ------------------
  |  Branch (19:9): [True: 0, False: 37.4k]
  ------------------
   20|      0|        return 0; /* start > len(str) */
   21|  37.4k|    if (sub_len == 0)
  ------------------
  |  Branch (21:9): [True: 0, False: 37.4k]
  ------------------
   22|      0|        return (str_len < maxcount) ? str_len + 1 : maxcount;
  ------------------
  |  Branch (22:16): [True: 0, False: 0]
  ------------------
   23|       |
   24|  37.4k|    count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
  ------------------
  |  |    6|  37.4k|#define FASTSEARCH               ucs1lib_fastsearch
  ------------------
                  count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
  ------------------
  |  |   24|  37.4k|#define FAST_COUNT 0
  ------------------
   25|       |
   26|  37.4k|    if (count < 0)
  ------------------
  |  Branch (26:9): [True: 0, False: 37.4k]
  ------------------
   27|      0|        return 0; /* no match */
   28|       |
   29|  37.4k|    return count;
   30|  37.4k|}
unicodeobject.c:ucs2lib_count:
   16|  1.47k|{
   17|  1.47k|    Py_ssize_t count;
   18|       |
   19|  1.47k|    if (str_len < 0)
  ------------------
  |  Branch (19:9): [True: 0, False: 1.47k]
  ------------------
   20|      0|        return 0; /* start > len(str) */
   21|  1.47k|    if (sub_len == 0)
  ------------------
  |  Branch (21:9): [True: 0, False: 1.47k]
  ------------------
   22|      0|        return (str_len < maxcount) ? str_len + 1 : maxcount;
  ------------------
  |  Branch (22:16): [True: 0, False: 0]
  ------------------
   23|       |
   24|  1.47k|    count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
  ------------------
  |  |    6|  1.47k|#define FASTSEARCH               ucs2lib_fastsearch
  ------------------
                  count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
  ------------------
  |  |   24|  1.47k|#define FAST_COUNT 0
  ------------------
   25|       |
   26|  1.47k|    if (count < 0)
  ------------------
  |  Branch (26:9): [True: 0, False: 1.47k]
  ------------------
   27|      0|        return 0; /* no match */
   28|       |
   29|  1.47k|    return count;
   30|  1.47k|}
unicodeobject.c:ucs4lib_count:
   16|  2.20k|{
   17|  2.20k|    Py_ssize_t count;
   18|       |
   19|  2.20k|    if (str_len < 0)
  ------------------
  |  Branch (19:9): [True: 0, False: 2.20k]
  ------------------
   20|      0|        return 0; /* start > len(str) */
   21|  2.20k|    if (sub_len == 0)
  ------------------
  |  Branch (21:9): [True: 0, False: 2.20k]
  ------------------
   22|      0|        return (str_len < maxcount) ? str_len + 1 : maxcount;
  ------------------
  |  Branch (22:16): [True: 0, False: 0]
  ------------------
   23|       |
   24|  2.20k|    count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
  ------------------
  |  |    6|  2.20k|#define FASTSEARCH               ucs4lib_fastsearch
  ------------------
                  count = FASTSEARCH(str, str_len, sub, sub_len, maxcount, FAST_COUNT);
  ------------------
  |  |   24|  2.20k|#define FAST_COUNT 0
  ------------------
   25|       |
   26|  2.20k|    if (count < 0)
  ------------------
  |  Branch (26:9): [True: 0, False: 2.20k]
  ------------------
   27|      0|        return 0; /* no match */
   28|       |
   29|  2.20k|    return count;
   30|  2.20k|}

bytesobject.c:stringlib_lower:
   60|   130k|{
   61|   130k|    PyObject* newobj;
   62|   130k|    newobj = STRINGLIB_NEW(NULL, STRINGLIB_LEN(self));
  ------------------
  |  |   22|   130k|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  ------------------
                  newobj = STRINGLIB_NEW(NULL, STRINGLIB_LEN(self));
  ------------------
  |  |   21|   130k|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|   130k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   130k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   130k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|   130k|    if (!newobj)
  ------------------
  |  Branch (63:9): [True: 0, False: 130k]
  ------------------
   64|      0|            return NULL;
   65|   130k|    _Py_bytes_lower(STRINGLIB_STR(newobj), STRINGLIB_STR(self),
  ------------------
  |  |   20|   130k|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|   130k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   130k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   130k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  _Py_bytes_lower(STRINGLIB_STR(newobj), STRINGLIB_STR(self),
  ------------------
  |  |   20|   130k|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|   130k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   130k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   130k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|   130k|                 STRINGLIB_LEN(self));
  ------------------
  |  |   21|   130k|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|   130k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   130k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   130k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   67|   130k|    return newobj;
   68|   130k|}
bytesobject.c:stringlib_upper:
   72|  18.1k|{
   73|  18.1k|    PyObject* newobj;
   74|  18.1k|    newobj = STRINGLIB_NEW(NULL, STRINGLIB_LEN(self));
  ------------------
  |  |   22|  18.1k|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  ------------------
                  newobj = STRINGLIB_NEW(NULL, STRINGLIB_LEN(self));
  ------------------
  |  |   21|  18.1k|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|  18.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|  18.1k|    if (!newobj)
  ------------------
  |  Branch (75:9): [True: 0, False: 18.1k]
  ------------------
   76|      0|            return NULL;
   77|  18.1k|    _Py_bytes_upper(STRINGLIB_STR(newobj), STRINGLIB_STR(self),
  ------------------
  |  |   20|  18.1k|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|  18.1k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  _Py_bytes_upper(STRINGLIB_STR(newobj), STRINGLIB_STR(self),
  ------------------
  |  |   20|  18.1k|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|  18.1k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|  18.1k|                 STRINGLIB_LEN(self));
  ------------------
  |  |   21|  18.1k|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|  18.1k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|  18.1k|    return newobj;
   80|  18.1k|}

dictobject.c:unicode_eq:
    8|   327k|{
    9|   327k|    Py_ssize_t len = PyUnicode_GET_LENGTH(str1);
  ------------------
  |  |  299|   327k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   10|   327k|    if (PyUnicode_GET_LENGTH(str2) != len) {
  ------------------
  |  |  299|   327k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10:9): [True: 69, False: 327k]
  ------------------
   11|     69|        return 0;
   12|     69|    }
   13|       |
   14|   327k|    int kind = PyUnicode_KIND(str1);
  ------------------
  |  |  258|   327k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   655k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 327k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   15|   655k|    if (PyUnicode_KIND(str2) != kind) {
  ------------------
  |  |  258|   327k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   655k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 327k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (15:9): [True: 0, False: 327k]
  ------------------
   16|      0|        return 0;
   17|      0|    }
   18|       |
   19|   327k|    const void *data1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|   327k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   20|   327k|    const void *data2 = PyUnicode_DATA(str2);
  ------------------
  |  |  284|   327k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   327k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   327k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   21|   327k|    return (memcmp(data1, data2, len * kind) == 0);
   22|   327k|}
setobject.c:unicode_eq:
    8|  58.0k|{
    9|  58.0k|    Py_ssize_t len = PyUnicode_GET_LENGTH(str1);
  ------------------
  |  |  299|  58.0k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  58.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  58.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   10|  58.0k|    if (PyUnicode_GET_LENGTH(str2) != len) {
  ------------------
  |  |  299|  58.0k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  58.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  58.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10:9): [True: 0, False: 58.0k]
  ------------------
   11|      0|        return 0;
   12|      0|    }
   13|       |
   14|  58.0k|    int kind = PyUnicode_KIND(str1);
  ------------------
  |  |  258|  58.0k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   116k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 58.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   15|   116k|    if (PyUnicode_KIND(str2) != kind) {
  ------------------
  |  |  258|  58.0k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   116k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 58.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (15:9): [True: 0, False: 58.0k]
  ------------------
   16|      0|        return 0;
   17|      0|    }
   18|       |
   19|  58.0k|    const void *data1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|  58.0k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  58.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  58.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   20|  58.0k|    const void *data2 = PyUnicode_DATA(str2);
  ------------------
  |  |  284|  58.0k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  58.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  58.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   21|  58.0k|    return (memcmp(data1, data2, len * kind) == 0);
   22|  58.0k|}
unicodeobject.c:unicode_eq:
    8|  14.0M|{
    9|  14.0M|    Py_ssize_t len = PyUnicode_GET_LENGTH(str1);
  ------------------
  |  |  299|  14.0M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   10|  14.0M|    if (PyUnicode_GET_LENGTH(str2) != len) {
  ------------------
  |  |  299|  14.0M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10:9): [True: 413k, False: 13.6M]
  ------------------
   11|   413k|        return 0;
   12|   413k|    }
   13|       |
   14|  13.6M|    int kind = PyUnicode_KIND(str1);
  ------------------
  |  |  258|  13.6M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  27.2M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 13.6M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   15|  27.2M|    if (PyUnicode_KIND(str2) != kind) {
  ------------------
  |  |  258|  13.6M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  27.2M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 13.6M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (15:9): [True: 3.15M, False: 10.4M]
  ------------------
   16|  3.15M|        return 0;
   17|  3.15M|    }
   18|       |
   19|  10.4M|    const void *data1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|  10.4M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   20|  10.4M|    const void *data2 = PyUnicode_DATA(str2);
  ------------------
  |  |  284|  10.4M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   21|  10.4M|    return (memcmp(data1, data2, len * kind) == 0);
   22|  13.6M|}

unicodeobject.c:ucs1lib_find_char:
   51|   410k|{
   52|   410k|    const STRINGLIB_CHAR *p, *e;
   53|       |
   54|   410k|    p = s;
   55|   410k|    e = s + n;
   56|   410k|    if (n > MEMCHR_CUT_OFF) {
  ------------------
  |  |   44|   410k|#  define MEMCHR_CUT_OFF 15
  ------------------
  |  Branch (56:9): [True: 53.1k, False: 356k]
  ------------------
   57|  53.1k|#ifdef STRINGLIB_FAST_MEMCHR
   58|  53.1k|        p = STRINGLIB_FAST_MEMCHR(s, ch, n);
  ------------------
  |  |   23|  53.1k|#define STRINGLIB_FAST_MEMCHR    memchr
  ------------------
   59|  53.1k|        if (p != NULL)
  ------------------
  |  Branch (59:13): [True: 51.9k, False: 1.22k]
  ------------------
   60|  51.9k|            return (p - s);
   61|  1.22k|        return -1;
   62|       |#else
   63|       |        /* use memchr if we can choose a needle without too many likely
   64|       |           false positives */
   65|       |        const STRINGLIB_CHAR *s1, *e1;
   66|       |        unsigned char needle = ch & 0xff;
   67|       |        /* If looking for a multiple of 256, we'd have too
   68|       |           many false positives looking for the '\0' byte in UCS2
   69|       |           and UCS4 representations. */
   70|       |        if (needle != 0) {
   71|       |            do {
   72|       |                const void *candidate = memchr(p, needle,
   73|       |                                               (e - p) * sizeof(STRINGLIB_CHAR));
   74|       |                if (candidate == NULL)
   75|       |                    return -1;
   76|       |                s1 = p;
   77|       |                p = (const STRINGLIB_CHAR *)
   78|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
   79|       |                if (*p == ch)
   80|       |                    return (p - s);
   81|       |                /* False positive */
   82|       |                p++;
   83|       |                if (p - s1 > MEMCHR_CUT_OFF)
   84|       |                    continue;
   85|       |                if (e - p <= MEMCHR_CUT_OFF)
   86|       |                    break;
   87|       |                e1 = p + MEMCHR_CUT_OFF;
   88|       |                while (p != e1) {
   89|       |                    if (*p == ch)
   90|       |                        return (p - s);
   91|       |                    p++;
   92|       |                }
   93|       |            }
   94|       |            while (e - p > MEMCHR_CUT_OFF);
   95|       |        }
   96|       |#endif
   97|  53.1k|    }
   98|  2.55M|    while (p < e) {
  ------------------
  |  Branch (98:12): [True: 2.20M, False: 354k]
  ------------------
   99|  2.20M|        if (*p == ch)
  ------------------
  |  Branch (99:13): [True: 2.31k, False: 2.20M]
  ------------------
  100|  2.31k|            return (p - s);
  101|  2.20M|        p++;
  102|  2.20M|    }
  103|   354k|    return -1;
  104|   356k|}
unicodeobject.c:ucs1lib_rfind_char:
  117|    134|{
  118|    134|    const STRINGLIB_CHAR *p;
  119|    134|#ifdef HAVE_MEMRCHR
  120|       |    /* memrchr() is a GNU extension, available since glibc 2.1.91.  it
  121|       |       doesn't seem as optimized as memchr(), but is still quite
  122|       |       faster than our hand-written loop below. There is no wmemrchr
  123|       |       for 4-byte chars. */
  124|       |
  125|    134|    if (n > MEMRCHR_CUT_OFF) {
  ------------------
  |  |  109|    134|#  define MEMRCHR_CUT_OFF 15
  ------------------
  |  Branch (125:9): [True: 107, False: 27]
  ------------------
  126|    107|#if STRINGLIB_SIZEOF_CHAR == 1
  127|    107|        p = memrchr(s, ch, n);
  128|    107|        if (p != NULL)
  ------------------
  |  Branch (128:13): [True: 107, False: 0]
  ------------------
  129|    107|            return (p - s);
  130|      0|        return -1;
  131|       |#else
  132|       |        /* use memrchr if we can choose a needle without too many likely
  133|       |           false positives */
  134|       |        const STRINGLIB_CHAR *s1;
  135|       |        Py_ssize_t n1;
  136|       |        unsigned char needle = ch & 0xff;
  137|       |        /* If looking for a multiple of 256, we'd have too
  138|       |           many false positives looking for the '\0' byte in UCS2
  139|       |           and UCS4 representations. */
  140|       |        if (needle != 0) {
  141|       |            do {
  142|       |                void *candidate = memrchr(s, needle,
  143|       |                                          n * sizeof(STRINGLIB_CHAR));
  144|       |                if (candidate == NULL)
  145|       |                    return -1;
  146|       |                n1 = n;
  147|       |                p = (const STRINGLIB_CHAR *)
  148|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
  149|       |                n = p - s;
  150|       |                if (*p == ch)
  151|       |                    return n;
  152|       |                /* False positive */
  153|       |                if (n1 - n > MEMRCHR_CUT_OFF)
  154|       |                    continue;
  155|       |                if (n <= MEMRCHR_CUT_OFF)
  156|       |                    break;
  157|       |                s1 = p - MEMRCHR_CUT_OFF;
  158|       |                while (p > s1) {
  159|       |                    p--;
  160|       |                    if (*p == ch)
  161|       |                        return (p - s);
  162|       |                }
  163|       |                n = p - s;
  164|       |            }
  165|       |            while (n > MEMRCHR_CUT_OFF);
  166|       |        }
  167|       |#endif
  168|    107|    }
  169|     27|#endif  /* HAVE_MEMRCHR */
  170|     27|    p = s + n;
  171|    236|    while (p > s) {
  ------------------
  |  Branch (171:12): [True: 215, False: 21]
  ------------------
  172|    215|        p--;
  173|    215|        if (*p == ch)
  ------------------
  |  Branch (173:13): [True: 6, False: 209]
  ------------------
  174|      6|            return (p - s);
  175|    215|    }
  176|     21|    return -1;
  177|     27|}
unicodeobject.c:ucs2lib_find_char:
   51|  29.2k|{
   52|  29.2k|    const STRINGLIB_CHAR *p, *e;
   53|       |
   54|  29.2k|    p = s;
   55|  29.2k|    e = s + n;
   56|  29.2k|    if (n > MEMCHR_CUT_OFF) {
  ------------------
  |  |   46|  29.2k|#  define MEMCHR_CUT_OFF 40
  ------------------
  |  Branch (56:9): [True: 7.38k, False: 21.8k]
  ------------------
   57|       |#ifdef STRINGLIB_FAST_MEMCHR
   58|       |        p = STRINGLIB_FAST_MEMCHR(s, ch, n);
   59|       |        if (p != NULL)
   60|       |            return (p - s);
   61|       |        return -1;
   62|       |#else
   63|       |        /* use memchr if we can choose a needle without too many likely
   64|       |           false positives */
   65|  7.38k|        const STRINGLIB_CHAR *s1, *e1;
   66|  7.38k|        unsigned char needle = ch & 0xff;
   67|       |        /* If looking for a multiple of 256, we'd have too
   68|       |           many false positives looking for the '\0' byte in UCS2
   69|       |           and UCS4 representations. */
   70|  7.38k|        if (needle != 0) {
  ------------------
  |  Branch (70:13): [True: 7.38k, False: 0]
  ------------------
   71|  9.52k|            do {
   72|  9.52k|                const void *candidate = memchr(p, needle,
   73|  9.52k|                                               (e - p) * sizeof(STRINGLIB_CHAR));
   74|  9.52k|                if (candidate == NULL)
  ------------------
  |  Branch (74:21): [True: 147, False: 9.37k]
  ------------------
   75|    147|                    return -1;
   76|  9.37k|                s1 = p;
   77|  9.37k|                p = (const STRINGLIB_CHAR *)
   78|  9.37k|                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
  ------------------
  |  |  241|  9.37k|#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1)))
  ------------------
   79|  9.37k|                if (*p == ch)
  ------------------
  |  Branch (79:21): [True: 4.15k, False: 5.22k]
  ------------------
   80|  4.15k|                    return (p - s);
   81|       |                /* False positive */
   82|  5.22k|                p++;
   83|  5.22k|                if (p - s1 > MEMCHR_CUT_OFF)
  ------------------
  |  |   46|  5.22k|#  define MEMCHR_CUT_OFF 40
  ------------------
  |  Branch (83:21): [True: 519, False: 4.70k]
  ------------------
   84|    519|                    continue;
   85|  4.70k|                if (e - p <= MEMCHR_CUT_OFF)
  ------------------
  |  |   46|  4.70k|#  define MEMCHR_CUT_OFF 40
  ------------------
  |  Branch (85:21): [True: 938, False: 3.77k]
  ------------------
   86|    938|                    break;
   87|  3.77k|                e1 = p + MEMCHR_CUT_OFF;
  ------------------
  |  |   46|  3.77k|#  define MEMCHR_CUT_OFF 40
  ------------------
   88|   107k|                while (p != e1) {
  ------------------
  |  Branch (88:24): [True: 105k, False: 1.93k]
  ------------------
   89|   105k|                    if (*p == ch)
  ------------------
  |  Branch (89:25): [True: 1.83k, False: 103k]
  ------------------
   90|  1.83k|                        return (p - s);
   91|   103k|                    p++;
   92|   103k|                }
   93|  3.77k|            }
   94|  7.38k|            while (e - p > MEMCHR_CUT_OFF);
  ------------------
  |  |   46|  2.45k|#  define MEMCHR_CUT_OFF 40
  ------------------
  |  Branch (94:20): [True: 2.13k, False: 313]
  ------------------
   95|  7.38k|        }
   96|  7.38k|#endif
   97|  7.38k|    }
   98|   281k|    while (p < e) {
  ------------------
  |  Branch (98:12): [True: 264k, False: 17.0k]
  ------------------
   99|   264k|        if (*p == ch)
  ------------------
  |  Branch (99:13): [True: 6.01k, False: 258k]
  ------------------
  100|  6.01k|            return (p - s);
  101|   258k|        p++;
  102|   258k|    }
  103|  17.0k|    return -1;
  104|  23.0k|}
unicodeobject.c:ucs4lib_find_char:
   51|  6.27k|{
   52|  6.27k|    const STRINGLIB_CHAR *p, *e;
   53|       |
   54|  6.27k|    p = s;
   55|  6.27k|    e = s + n;
   56|  6.27k|    if (n > MEMCHR_CUT_OFF) {
  ------------------
  |  |   44|  6.27k|#  define MEMCHR_CUT_OFF 15
  ------------------
  |  Branch (56:9): [True: 4.70k, False: 1.57k]
  ------------------
   57|  4.70k|#ifdef STRINGLIB_FAST_MEMCHR
   58|  4.70k|        p = STRINGLIB_FAST_MEMCHR(s, ch, n);
  ------------------
  |  |   26|  4.70k|    (Py_UCS4 *)wmemchr((const wchar_t *)(s), c, n)
  ------------------
   59|  4.70k|        if (p != NULL)
  ------------------
  |  Branch (59:13): [True: 4.66k, False: 31]
  ------------------
   60|  4.66k|            return (p - s);
   61|     31|        return -1;
   62|       |#else
   63|       |        /* use memchr if we can choose a needle without too many likely
   64|       |           false positives */
   65|       |        const STRINGLIB_CHAR *s1, *e1;
   66|       |        unsigned char needle = ch & 0xff;
   67|       |        /* If looking for a multiple of 256, we'd have too
   68|       |           many false positives looking for the '\0' byte in UCS2
   69|       |           and UCS4 representations. */
   70|       |        if (needle != 0) {
   71|       |            do {
   72|       |                const void *candidate = memchr(p, needle,
   73|       |                                               (e - p) * sizeof(STRINGLIB_CHAR));
   74|       |                if (candidate == NULL)
   75|       |                    return -1;
   76|       |                s1 = p;
   77|       |                p = (const STRINGLIB_CHAR *)
   78|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
   79|       |                if (*p == ch)
   80|       |                    return (p - s);
   81|       |                /* False positive */
   82|       |                p++;
   83|       |                if (p - s1 > MEMCHR_CUT_OFF)
   84|       |                    continue;
   85|       |                if (e - p <= MEMCHR_CUT_OFF)
   86|       |                    break;
   87|       |                e1 = p + MEMCHR_CUT_OFF;
   88|       |                while (p != e1) {
   89|       |                    if (*p == ch)
   90|       |                        return (p - s);
   91|       |                    p++;
   92|       |                }
   93|       |            }
   94|       |            while (e - p > MEMCHR_CUT_OFF);
   95|       |        }
   96|       |#endif
   97|  4.70k|    }
   98|  5.12k|    while (p < e) {
  ------------------
  |  Branch (98:12): [True: 4.97k, False: 153]
  ------------------
   99|  4.97k|        if (*p == ch)
  ------------------
  |  Branch (99:13): [True: 1.42k, False: 3.54k]
  ------------------
  100|  1.42k|            return (p - s);
  101|  3.54k|        p++;
  102|  3.54k|    }
  103|    153|    return -1;
  104|  1.57k|}
unicodeobject.c:asciilib_fastsearch:
  776|  24.1k|{
  777|  24.1k|    if (n < m || (mode == FAST_COUNT && maxcount == 0)) {
  ------------------
  |  |   24|  48.3k|#define FAST_COUNT 0
  ------------------
  |  Branch (777:9): [True: 0, False: 24.1k]
  |  Branch (777:19): [True: 0, False: 24.1k]
  |  Branch (777:41): [True: 0, False: 0]
  ------------------
  778|      0|        return -1;
  779|      0|    }
  780|       |
  781|       |    /* look for special cases */
  782|  24.1k|    if (m <= 1) {
  ------------------
  |  Branch (782:9): [True: 4.70k, False: 19.4k]
  ------------------
  783|  4.70k|        if (m <= 0) {
  ------------------
  |  Branch (783:13): [True: 0, False: 4.70k]
  ------------------
  784|      0|            return -1;
  785|      0|        }
  786|       |        /* use special case for 1-character strings */
  787|  4.70k|        if (mode == FAST_SEARCH)
  ------------------
  |  |   25|  4.70k|#define FAST_SEARCH 1
  ------------------
  |  Branch (787:13): [True: 3.54k, False: 1.15k]
  ------------------
  788|  3.54k|            return STRINGLIB(find_char)(s, n, p[0]);
  ------------------
  |  |    7|  3.54k|#define STRINGLIB(F)             asciilib_##F
  ------------------
  789|  1.15k|        else if (mode == FAST_RSEARCH)
  ------------------
  |  |   26|  1.15k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (789:18): [True: 1.15k, False: 0]
  ------------------
  790|  1.15k|            return STRINGLIB(rfind_char)(s, n, p[0]);
  ------------------
  |  |    7|  1.15k|#define STRINGLIB(F)             asciilib_##F
  ------------------
  791|      0|        else {
  792|      0|            if (maxcount == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (792:17): [True: 0, False: 0]
  ------------------
  793|      0|                return STRINGLIB(count_char_no_maxcount)(s, n, p[0]);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             asciilib_##F
  ------------------
  794|      0|            }
  795|      0|            return STRINGLIB(count_char)(s, n, p[0], maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             asciilib_##F
  ------------------
  796|      0|        }
  797|  4.70k|    }
  798|       |
  799|  19.4k|    if (mode != FAST_RSEARCH) {
  ------------------
  |  |   26|  19.4k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (799:9): [True: 19.4k, False: 0]
  ------------------
  800|  19.4k|        if (n < 2500 || (m < 100 && n < 30000) || m < 6) {
  ------------------
  |  Branch (800:13): [True: 18.8k, False: 661]
  |  Branch (800:26): [True: 661, False: 0]
  |  Branch (800:37): [True: 661, False: 0]
  |  Branch (800:51): [True: 0, False: 0]
  ------------------
  801|  19.4k|            return STRINGLIB(default_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|  19.4k|#define STRINGLIB(F)             asciilib_##F
  ------------------
  802|  19.4k|        }
  803|      0|        else if ((m >> 2) * 3 < (n >> 2)) {
  ------------------
  |  Branch (803:18): [True: 0, False: 0]
  ------------------
  804|       |            /* 33% threshold, but don't overflow. */
  805|       |            /* For larger problems where the needle isn't a huge
  806|       |               percentage of the size of the haystack, the relatively
  807|       |               expensive O(m) startup cost of the two-way algorithm
  808|       |               will surely pay off. */
  809|      0|            if (mode == FAST_SEARCH) {
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  |  Branch (809:17): [True: 0, False: 0]
  ------------------
  810|      0|                return STRINGLIB(_two_way_find)(s, n, p, m);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             asciilib_##F
  ------------------
  811|      0|            }
  812|      0|            else {
  813|      0|                return STRINGLIB(_two_way_count)(s, n, p, m, maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             asciilib_##F
  ------------------
  814|      0|            }
  815|      0|        }
  816|      0|        else {
  817|       |            /* To ensure that we have good worst-case behavior,
  818|       |               here's an adaptive version of the algorithm, where if
  819|       |               we match O(m) characters without any matches of the
  820|       |               entire needle, then we predict that the startup cost of
  821|       |               the two-way algorithm will probably be worth it. */
  822|      0|            return STRINGLIB(adaptive_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             asciilib_##F
  ------------------
  823|      0|        }
  824|  19.4k|    }
  825|      0|    else {
  826|       |        /* FAST_RSEARCH */
  827|      0|        return STRINGLIB(default_rfind)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             asciilib_##F
  ------------------
  828|      0|    }
  829|  19.4k|}
unicodeobject.c:asciilib_find_char:
   51|  3.54k|{
   52|  3.54k|    const STRINGLIB_CHAR *p, *e;
   53|       |
   54|  3.54k|    p = s;
   55|  3.54k|    e = s + n;
   56|  3.54k|    if (n > MEMCHR_CUT_OFF) {
  ------------------
  |  |   44|  3.54k|#  define MEMCHR_CUT_OFF 15
  ------------------
  |  Branch (56:9): [True: 743, False: 2.80k]
  ------------------
   57|    743|#ifdef STRINGLIB_FAST_MEMCHR
   58|    743|        p = STRINGLIB_FAST_MEMCHR(s, ch, n);
  ------------------
  |  |   24|    743|#define STRINGLIB_FAST_MEMCHR    memchr
  ------------------
   59|    743|        if (p != NULL)
  ------------------
  |  Branch (59:13): [True: 743, False: 0]
  ------------------
   60|    743|            return (p - s);
   61|      0|        return -1;
   62|       |#else
   63|       |        /* use memchr if we can choose a needle without too many likely
   64|       |           false positives */
   65|       |        const STRINGLIB_CHAR *s1, *e1;
   66|       |        unsigned char needle = ch & 0xff;
   67|       |        /* If looking for a multiple of 256, we'd have too
   68|       |           many false positives looking for the '\0' byte in UCS2
   69|       |           and UCS4 representations. */
   70|       |        if (needle != 0) {
   71|       |            do {
   72|       |                const void *candidate = memchr(p, needle,
   73|       |                                               (e - p) * sizeof(STRINGLIB_CHAR));
   74|       |                if (candidate == NULL)
   75|       |                    return -1;
   76|       |                s1 = p;
   77|       |                p = (const STRINGLIB_CHAR *)
   78|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
   79|       |                if (*p == ch)
   80|       |                    return (p - s);
   81|       |                /* False positive */
   82|       |                p++;
   83|       |                if (p - s1 > MEMCHR_CUT_OFF)
   84|       |                    continue;
   85|       |                if (e - p <= MEMCHR_CUT_OFF)
   86|       |                    break;
   87|       |                e1 = p + MEMCHR_CUT_OFF;
   88|       |                while (p != e1) {
   89|       |                    if (*p == ch)
   90|       |                        return (p - s);
   91|       |                    p++;
   92|       |                }
   93|       |            }
   94|       |            while (e - p > MEMCHR_CUT_OFF);
   95|       |        }
   96|       |#endif
   97|    743|    }
   98|  3.92k|    while (p < e) {
  ------------------
  |  Branch (98:12): [True: 3.92k, False: 0]
  ------------------
   99|  3.92k|        if (*p == ch)
  ------------------
  |  Branch (99:13): [True: 2.80k, False: 1.11k]
  ------------------
  100|  2.80k|            return (p - s);
  101|  1.11k|        p++;
  102|  1.11k|    }
  103|      0|    return -1;
  104|  2.80k|}
unicodeobject.c:asciilib_rfind_char:
  117|  1.15k|{
  118|  1.15k|    const STRINGLIB_CHAR *p;
  119|  1.15k|#ifdef HAVE_MEMRCHR
  120|       |    /* memrchr() is a GNU extension, available since glibc 2.1.91.  it
  121|       |       doesn't seem as optimized as memchr(), but is still quite
  122|       |       faster than our hand-written loop below. There is no wmemrchr
  123|       |       for 4-byte chars. */
  124|       |
  125|  1.15k|    if (n > MEMRCHR_CUT_OFF) {
  ------------------
  |  |  109|  1.15k|#  define MEMRCHR_CUT_OFF 15
  ------------------
  |  Branch (125:9): [True: 378, False: 780]
  ------------------
  126|    378|#if STRINGLIB_SIZEOF_CHAR == 1
  127|    378|        p = memrchr(s, ch, n);
  128|    378|        if (p != NULL)
  ------------------
  |  Branch (128:13): [True: 368, False: 10]
  ------------------
  129|    368|            return (p - s);
  130|     10|        return -1;
  131|       |#else
  132|       |        /* use memrchr if we can choose a needle without too many likely
  133|       |           false positives */
  134|       |        const STRINGLIB_CHAR *s1;
  135|       |        Py_ssize_t n1;
  136|       |        unsigned char needle = ch & 0xff;
  137|       |        /* If looking for a multiple of 256, we'd have too
  138|       |           many false positives looking for the '\0' byte in UCS2
  139|       |           and UCS4 representations. */
  140|       |        if (needle != 0) {
  141|       |            do {
  142|       |                void *candidate = memrchr(s, needle,
  143|       |                                          n * sizeof(STRINGLIB_CHAR));
  144|       |                if (candidate == NULL)
  145|       |                    return -1;
  146|       |                n1 = n;
  147|       |                p = (const STRINGLIB_CHAR *)
  148|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
  149|       |                n = p - s;
  150|       |                if (*p == ch)
  151|       |                    return n;
  152|       |                /* False positive */
  153|       |                if (n1 - n > MEMRCHR_CUT_OFF)
  154|       |                    continue;
  155|       |                if (n <= MEMRCHR_CUT_OFF)
  156|       |                    break;
  157|       |                s1 = p - MEMRCHR_CUT_OFF;
  158|       |                while (p > s1) {
  159|       |                    p--;
  160|       |                    if (*p == ch)
  161|       |                        return (p - s);
  162|       |                }
  163|       |                n = p - s;
  164|       |            }
  165|       |            while (n > MEMRCHR_CUT_OFF);
  166|       |        }
  167|       |#endif
  168|    378|    }
  169|    780|#endif  /* HAVE_MEMRCHR */
  170|    780|    p = s + n;
  171|  4.63k|    while (p > s) {
  ------------------
  |  Branch (171:12): [True: 4.40k, False: 230]
  ------------------
  172|  4.40k|        p--;
  173|  4.40k|        if (*p == ch)
  ------------------
  |  Branch (173:13): [True: 550, False: 3.85k]
  ------------------
  174|    550|            return (p - s);
  175|  4.40k|    }
  176|    230|    return -1;
  177|    780|}
unicodeobject.c:asciilib_default_find:
  560|  19.4k|{
  561|  19.4k|    const Py_ssize_t w = n - m;
  562|  19.4k|    Py_ssize_t mlast = m - 1, count = 0;
  563|  19.4k|    Py_ssize_t gap = mlast;
  564|  19.4k|    const STRINGLIB_CHAR last = p[mlast];
  565|  19.4k|    const STRINGLIB_CHAR *const ss = &s[mlast];
  566|       |
  567|  19.4k|    unsigned long mask = 0;
  568|  42.0k|    for (Py_ssize_t i = 0; i < mlast; i++) {
  ------------------
  |  Branch (568:28): [True: 22.6k, False: 19.4k]
  ------------------
  569|  22.6k|        STRINGLIB_BLOOM_ADD(mask, p[i]);
  ------------------
  |  |   39|  22.6k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  22.6k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  570|  22.6k|        if (p[i] == last) {
  ------------------
  |  Branch (570:13): [True: 16.3k, False: 6.32k]
  ------------------
  571|  16.3k|            gap = mlast - i - 1;
  572|  16.3k|        }
  573|  22.6k|    }
  574|  19.4k|    STRINGLIB_BLOOM_ADD(mask, last);
  ------------------
  |  |   39|  19.4k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  19.4k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  575|       |
  576|  39.2k|    for (Py_ssize_t i = 0; i <= w; i++) {
  ------------------
  |  Branch (576:28): [True: 39.2k, False: 0]
  ------------------
  577|  39.2k|        if (ss[i] == last) {
  ------------------
  |  Branch (577:13): [True: 22.3k, False: 16.9k]
  ------------------
  578|       |            /* candidate match */
  579|  22.3k|            Py_ssize_t j;
  580|  44.9k|            for (j = 0; j < mlast; j++) {
  ------------------
  |  Branch (580:25): [True: 25.4k, False: 19.4k]
  ------------------
  581|  25.4k|                if (s[i+j] != p[j]) {
  ------------------
  |  Branch (581:21): [True: 2.83k, False: 22.6k]
  ------------------
  582|  2.83k|                    break;
  583|  2.83k|                }
  584|  25.4k|            }
  585|  22.3k|            if (j == mlast) {
  ------------------
  |  Branch (585:17): [True: 19.4k, False: 2.83k]
  ------------------
  586|       |                /* got a match! */
  587|  19.4k|                if (mode != FAST_COUNT) {
  ------------------
  |  |   24|  19.4k|#define FAST_COUNT 0
  ------------------
  |  Branch (587:21): [True: 19.4k, False: 0]
  ------------------
  588|  19.4k|                    return i;
  589|  19.4k|                }
  590|      0|                count++;
  591|      0|                if (count == maxcount) {
  ------------------
  |  Branch (591:21): [True: 0, False: 0]
  ------------------
  592|      0|                    return maxcount;
  593|      0|                }
  594|      0|                i = i + mlast;
  595|      0|                continue;
  596|      0|            }
  597|       |            /* miss: check if next character is part of pattern */
  598|  2.83k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  2.83k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  2.83k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (598:17): [True: 2.83k, False: 0]
  |  Branch (598:31): [True: 0, False: 2.83k]
  ------------------
  599|      0|                i = i + m;
  600|      0|            }
  601|  2.83k|            else {
  602|  2.83k|                i = i + gap;
  603|  2.83k|            }
  604|  2.83k|        }
  605|  16.9k|        else {
  606|       |            /* skip: check if next character is part of pattern */
  607|  16.9k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  16.9k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  16.9k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (607:17): [True: 16.9k, False: 0]
  |  Branch (607:31): [True: 14.9k, False: 1.98k]
  ------------------
  608|  14.9k|                i = i + m;
  609|  14.9k|            }
  610|  16.9k|        }
  611|  39.2k|    }
  612|      0|    return mode == FAST_COUNT ? count : -1;
  ------------------
  |  |   24|      0|#define FAST_COUNT 0
  ------------------
  |  Branch (612:12): [True: 0, False: 0]
  ------------------
  613|  19.4k|}
unicodeobject.c:ucs1lib_fastsearch:
  776|  47.3k|{
  777|  47.3k|    if (n < m || (mode == FAST_COUNT && maxcount == 0)) {
  ------------------
  |  |   24|  94.6k|#define FAST_COUNT 0
  ------------------
  |  Branch (777:9): [True: 0, False: 47.3k]
  |  Branch (777:19): [True: 37.4k, False: 9.84k]
  |  Branch (777:41): [True: 0, False: 37.4k]
  ------------------
  778|      0|        return -1;
  779|      0|    }
  780|       |
  781|       |    /* look for special cases */
  782|  47.3k|    if (m <= 1) {
  ------------------
  |  Branch (782:9): [True: 23.0k, False: 24.2k]
  ------------------
  783|  23.0k|        if (m <= 0) {
  ------------------
  |  Branch (783:13): [True: 0, False: 23.0k]
  ------------------
  784|      0|            return -1;
  785|      0|        }
  786|       |        /* use special case for 1-character strings */
  787|  23.0k|        if (mode == FAST_SEARCH)
  ------------------
  |  |   25|  23.0k|#define FAST_SEARCH 1
  ------------------
  |  Branch (787:13): [True: 4.08k, False: 18.9k]
  ------------------
  788|  4.08k|            return STRINGLIB(find_char)(s, n, p[0]);
  ------------------
  |  |    7|  4.08k|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  789|  18.9k|        else if (mode == FAST_RSEARCH)
  ------------------
  |  |   26|  18.9k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (789:18): [True: 0, False: 18.9k]
  ------------------
  790|      0|            return STRINGLIB(rfind_char)(s, n, p[0]);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  791|  18.9k|        else {
  792|  18.9k|            if (maxcount == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  18.9k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (792:17): [True: 18.9k, False: 0]
  ------------------
  793|  18.9k|                return STRINGLIB(count_char_no_maxcount)(s, n, p[0]);
  ------------------
  |  |    7|  18.9k|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  794|  18.9k|            }
  795|      0|            return STRINGLIB(count_char)(s, n, p[0], maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  796|  18.9k|        }
  797|  23.0k|    }
  798|       |
  799|  24.2k|    if (mode != FAST_RSEARCH) {
  ------------------
  |  |   26|  24.2k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (799:9): [True: 24.2k, False: 0]
  ------------------
  800|  24.2k|        if (n < 2500 || (m < 100 && n < 30000) || m < 6) {
  ------------------
  |  Branch (800:13): [True: 23.0k, False: 1.21k]
  |  Branch (800:26): [True: 1.21k, False: 0]
  |  Branch (800:37): [True: 1.21k, False: 0]
  |  Branch (800:51): [True: 0, False: 0]
  ------------------
  801|  24.2k|            return STRINGLIB(default_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|  24.2k|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  802|  24.2k|        }
  803|      0|        else if ((m >> 2) * 3 < (n >> 2)) {
  ------------------
  |  Branch (803:18): [True: 0, False: 0]
  ------------------
  804|       |            /* 33% threshold, but don't overflow. */
  805|       |            /* For larger problems where the needle isn't a huge
  806|       |               percentage of the size of the haystack, the relatively
  807|       |               expensive O(m) startup cost of the two-way algorithm
  808|       |               will surely pay off. */
  809|      0|            if (mode == FAST_SEARCH) {
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  |  Branch (809:17): [True: 0, False: 0]
  ------------------
  810|      0|                return STRINGLIB(_two_way_find)(s, n, p, m);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  811|      0|            }
  812|      0|            else {
  813|      0|                return STRINGLIB(_two_way_count)(s, n, p, m, maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  814|      0|            }
  815|      0|        }
  816|      0|        else {
  817|       |            /* To ensure that we have good worst-case behavior,
  818|       |               here's an adaptive version of the algorithm, where if
  819|       |               we match O(m) characters without any matches of the
  820|       |               entire needle, then we predict that the startup cost of
  821|       |               the two-way algorithm will probably be worth it. */
  822|      0|            return STRINGLIB(adaptive_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  823|      0|        }
  824|  24.2k|    }
  825|      0|    else {
  826|       |        /* FAST_RSEARCH */
  827|      0|        return STRINGLIB(default_rfind)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs1lib_##F
  ------------------
  828|      0|    }
  829|  24.2k|}
unicodeobject.c:ucs1lib_count_char_no_maxcount:
  761|  18.9k|{
  762|  18.9k|    Py_ssize_t count = 0;
  763|  1.53M|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (763:28): [True: 1.51M, False: 18.9k]
  ------------------
  764|  1.51M|        if (s[i] == p0) {
  ------------------
  |  Branch (764:13): [True: 7.63k, False: 1.50M]
  ------------------
  765|  7.63k|            count++;
  766|  7.63k|        }
  767|  1.51M|    }
  768|  18.9k|    return count;
  769|  18.9k|}
unicodeobject.c:ucs1lib_default_find:
  560|  24.2k|{
  561|  24.2k|    const Py_ssize_t w = n - m;
  562|  24.2k|    Py_ssize_t mlast = m - 1, count = 0;
  563|  24.2k|    Py_ssize_t gap = mlast;
  564|  24.2k|    const STRINGLIB_CHAR last = p[mlast];
  565|  24.2k|    const STRINGLIB_CHAR *const ss = &s[mlast];
  566|       |
  567|  24.2k|    unsigned long mask = 0;
  568|  64.6k|    for (Py_ssize_t i = 0; i < mlast; i++) {
  ------------------
  |  Branch (568:28): [True: 40.4k, False: 24.2k]
  ------------------
  569|  40.4k|        STRINGLIB_BLOOM_ADD(mask, p[i]);
  ------------------
  |  |   39|  40.4k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  40.4k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  570|  40.4k|        if (p[i] == last) {
  ------------------
  |  Branch (570:13): [True: 8.14k, False: 32.2k]
  ------------------
  571|  8.14k|            gap = mlast - i - 1;
  572|  8.14k|        }
  573|  40.4k|    }
  574|  24.2k|    STRINGLIB_BLOOM_ADD(mask, last);
  ------------------
  |  |   39|  24.2k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  24.2k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  575|       |
  576|   151k|    for (Py_ssize_t i = 0; i <= w; i++) {
  ------------------
  |  Branch (576:28): [True: 132k, False: 18.5k]
  ------------------
  577|   132k|        if (ss[i] == last) {
  ------------------
  |  Branch (577:13): [True: 34.4k, False: 98.1k]
  ------------------
  578|       |            /* candidate match */
  579|  34.4k|            Py_ssize_t j;
  580|  68.5k|            for (j = 0; j < mlast; j++) {
  ------------------
  |  Branch (580:25): [True: 37.6k, False: 30.9k]
  ------------------
  581|  37.6k|                if (s[i+j] != p[j]) {
  ------------------
  |  Branch (581:21): [True: 3.54k, False: 34.1k]
  ------------------
  582|  3.54k|                    break;
  583|  3.54k|                }
  584|  37.6k|            }
  585|  34.4k|            if (j == mlast) {
  ------------------
  |  Branch (585:17): [True: 30.9k, False: 3.54k]
  ------------------
  586|       |                /* got a match! */
  587|  30.9k|                if (mode != FAST_COUNT) {
  ------------------
  |  |   24|  30.9k|#define FAST_COUNT 0
  ------------------
  |  Branch (587:21): [True: 5.73k, False: 25.2k]
  ------------------
  588|  5.73k|                    return i;
  589|  5.73k|                }
  590|  25.2k|                count++;
  591|  25.2k|                if (count == maxcount) {
  ------------------
  |  Branch (591:21): [True: 0, False: 25.2k]
  ------------------
  592|      0|                    return maxcount;
  593|      0|                }
  594|  25.2k|                i = i + mlast;
  595|  25.2k|                continue;
  596|  25.2k|            }
  597|       |            /* miss: check if next character is part of pattern */
  598|  3.54k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  3.54k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  3.54k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (598:17): [True: 3.54k, False: 0]
  |  Branch (598:31): [True: 0, False: 3.54k]
  ------------------
  599|      0|                i = i + m;
  600|      0|            }
  601|  3.54k|            else {
  602|  3.54k|                i = i + gap;
  603|  3.54k|            }
  604|  3.54k|        }
  605|  98.1k|        else {
  606|       |            /* skip: check if next character is part of pattern */
  607|  98.1k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  94.6k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  94.6k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (607:17): [True: 94.6k, False: 3.50k]
  |  Branch (607:31): [True: 87.6k, False: 6.96k]
  ------------------
  608|  87.6k|                i = i + m;
  609|  87.6k|            }
  610|  98.1k|        }
  611|   132k|    }
  612|  18.5k|    return mode == FAST_COUNT ? count : -1;
  ------------------
  |  |   24|  18.5k|#define FAST_COUNT 0
  ------------------
  |  Branch (612:12): [True: 18.5k, False: 23]
  ------------------
  613|  24.2k|}
unicodeobject.c:ucs2lib_fastsearch:
  776|  11.0k|{
  777|  11.0k|    if (n < m || (mode == FAST_COUNT && maxcount == 0)) {
  ------------------
  |  |   24|  22.1k|#define FAST_COUNT 0
  ------------------
  |  Branch (777:9): [True: 0, False: 11.0k]
  |  Branch (777:19): [True: 1.47k, False: 9.59k]
  |  Branch (777:41): [True: 0, False: 1.47k]
  ------------------
  778|      0|        return -1;
  779|      0|    }
  780|       |
  781|       |    /* look for special cases */
  782|  11.0k|    if (m <= 1) {
  ------------------
  |  Branch (782:9): [True: 5.98k, False: 5.08k]
  ------------------
  783|  5.98k|        if (m <= 0) {
  ------------------
  |  Branch (783:13): [True: 0, False: 5.98k]
  ------------------
  784|      0|            return -1;
  785|      0|        }
  786|       |        /* use special case for 1-character strings */
  787|  5.98k|        if (mode == FAST_SEARCH)
  ------------------
  |  |   25|  5.98k|#define FAST_SEARCH 1
  ------------------
  |  Branch (787:13): [True: 4.80k, False: 1.17k]
  ------------------
  788|  4.80k|            return STRINGLIB(find_char)(s, n, p[0]);
  ------------------
  |  |    7|  4.80k|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  789|  1.17k|        else if (mode == FAST_RSEARCH)
  ------------------
  |  |   26|  1.17k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (789:18): [True: 0, False: 1.17k]
  ------------------
  790|      0|            return STRINGLIB(rfind_char)(s, n, p[0]);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  791|  1.17k|        else {
  792|  1.17k|            if (maxcount == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  1.17k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (792:17): [True: 1.17k, False: 0]
  ------------------
  793|  1.17k|                return STRINGLIB(count_char_no_maxcount)(s, n, p[0]);
  ------------------
  |  |    7|  1.17k|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  794|  1.17k|            }
  795|      0|            return STRINGLIB(count_char)(s, n, p[0], maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  796|  1.17k|        }
  797|  5.98k|    }
  798|       |
  799|  5.08k|    if (mode != FAST_RSEARCH) {
  ------------------
  |  |   26|  5.08k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (799:9): [True: 5.08k, False: 0]
  ------------------
  800|  5.08k|        if (n < 2500 || (m < 100 && n < 30000) || m < 6) {
  ------------------
  |  Branch (800:13): [True: 3.13k, False: 1.95k]
  |  Branch (800:26): [True: 1.95k, False: 0]
  |  Branch (800:37): [True: 1.95k, False: 0]
  |  Branch (800:51): [True: 0, False: 0]
  ------------------
  801|  5.08k|            return STRINGLIB(default_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|  5.08k|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  802|  5.08k|        }
  803|      0|        else if ((m >> 2) * 3 < (n >> 2)) {
  ------------------
  |  Branch (803:18): [True: 0, False: 0]
  ------------------
  804|       |            /* 33% threshold, but don't overflow. */
  805|       |            /* For larger problems where the needle isn't a huge
  806|       |               percentage of the size of the haystack, the relatively
  807|       |               expensive O(m) startup cost of the two-way algorithm
  808|       |               will surely pay off. */
  809|      0|            if (mode == FAST_SEARCH) {
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  |  Branch (809:17): [True: 0, False: 0]
  ------------------
  810|      0|                return STRINGLIB(_two_way_find)(s, n, p, m);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  811|      0|            }
  812|      0|            else {
  813|      0|                return STRINGLIB(_two_way_count)(s, n, p, m, maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  814|      0|            }
  815|      0|        }
  816|      0|        else {
  817|       |            /* To ensure that we have good worst-case behavior,
  818|       |               here's an adaptive version of the algorithm, where if
  819|       |               we match O(m) characters without any matches of the
  820|       |               entire needle, then we predict that the startup cost of
  821|       |               the two-way algorithm will probably be worth it. */
  822|      0|            return STRINGLIB(adaptive_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  823|      0|        }
  824|  5.08k|    }
  825|      0|    else {
  826|       |        /* FAST_RSEARCH */
  827|      0|        return STRINGLIB(default_rfind)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs2lib_##F
  ------------------
  828|      0|    }
  829|  5.08k|}
unicodeobject.c:ucs2lib_count_char_no_maxcount:
  761|  1.17k|{
  762|  1.17k|    Py_ssize_t count = 0;
  763|   520k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (763:28): [True: 518k, False: 1.17k]
  ------------------
  764|   518k|        if (s[i] == p0) {
  ------------------
  |  Branch (764:13): [True: 4.80k, False: 514k]
  ------------------
  765|  4.80k|            count++;
  766|  4.80k|        }
  767|   518k|    }
  768|  1.17k|    return count;
  769|  1.17k|}
unicodeobject.c:ucs2lib_default_find:
  560|  5.08k|{
  561|  5.08k|    const Py_ssize_t w = n - m;
  562|  5.08k|    Py_ssize_t mlast = m - 1, count = 0;
  563|  5.08k|    Py_ssize_t gap = mlast;
  564|  5.08k|    const STRINGLIB_CHAR last = p[mlast];
  565|  5.08k|    const STRINGLIB_CHAR *const ss = &s[mlast];
  566|       |
  567|  5.08k|    unsigned long mask = 0;
  568|  10.1k|    for (Py_ssize_t i = 0; i < mlast; i++) {
  ------------------
  |  Branch (568:28): [True: 5.08k, False: 5.08k]
  ------------------
  569|  5.08k|        STRINGLIB_BLOOM_ADD(mask, p[i]);
  ------------------
  |  |   39|  5.08k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  5.08k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  570|  5.08k|        if (p[i] == last) {
  ------------------
  |  Branch (570:13): [True: 5.08k, False: 0]
  ------------------
  571|  5.08k|            gap = mlast - i - 1;
  572|  5.08k|        }
  573|  5.08k|    }
  574|  5.08k|    STRINGLIB_BLOOM_ADD(mask, last);
  ------------------
  |  |   39|  5.08k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  5.08k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  575|       |
  576|  98.0k|    for (Py_ssize_t i = 0; i <= w; i++) {
  ------------------
  |  Branch (576:28): [True: 97.7k, False: 296]
  ------------------
  577|  97.7k|        if (ss[i] == last) {
  ------------------
  |  Branch (577:13): [True: 11.8k, False: 85.8k]
  ------------------
  578|       |            /* candidate match */
  579|  11.8k|            Py_ssize_t j;
  580|  21.4k|            for (j = 0; j < mlast; j++) {
  ------------------
  |  Branch (580:25): [True: 11.8k, False: 9.58k]
  ------------------
  581|  11.8k|                if (s[i+j] != p[j]) {
  ------------------
  |  Branch (581:21): [True: 2.26k, False: 9.58k]
  ------------------
  582|  2.26k|                    break;
  583|  2.26k|                }
  584|  11.8k|            }
  585|  11.8k|            if (j == mlast) {
  ------------------
  |  Branch (585:17): [True: 9.58k, False: 2.26k]
  ------------------
  586|       |                /* got a match! */
  587|  9.58k|                if (mode != FAST_COUNT) {
  ------------------
  |  |   24|  9.58k|#define FAST_COUNT 0
  ------------------
  |  Branch (587:21): [True: 4.79k, False: 4.79k]
  ------------------
  588|  4.79k|                    return i;
  589|  4.79k|                }
  590|  4.79k|                count++;
  591|  4.79k|                if (count == maxcount) {
  ------------------
  |  Branch (591:21): [True: 0, False: 4.79k]
  ------------------
  592|      0|                    return maxcount;
  593|      0|                }
  594|  4.79k|                i = i + mlast;
  595|  4.79k|                continue;
  596|  4.79k|            }
  597|       |            /* miss: check if next character is part of pattern */
  598|  2.26k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  2.26k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  2.26k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (598:17): [True: 2.26k, False: 0]
  |  Branch (598:31): [True: 0, False: 2.26k]
  ------------------
  599|      0|                i = i + m;
  600|      0|            }
  601|  2.26k|            else {
  602|  2.26k|                i = i + gap;
  603|  2.26k|            }
  604|  2.26k|        }
  605|  85.8k|        else {
  606|       |            /* skip: check if next character is part of pattern */
  607|  85.8k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  85.6k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  85.6k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (607:17): [True: 85.6k, False: 200]
  |  Branch (607:31): [True: 83.2k, False: 2.46k]
  ------------------
  608|  83.2k|                i = i + m;
  609|  83.2k|            }
  610|  85.8k|        }
  611|  97.7k|    }
  612|    296|    return mode == FAST_COUNT ? count : -1;
  ------------------
  |  |   24|    296|#define FAST_COUNT 0
  ------------------
  |  Branch (612:12): [True: 296, False: 0]
  ------------------
  613|  5.08k|}
unicodeobject.c:ucs4lib_fastsearch:
  776|  18.6k|{
  777|  18.6k|    if (n < m || (mode == FAST_COUNT && maxcount == 0)) {
  ------------------
  |  |   24|  37.3k|#define FAST_COUNT 0
  ------------------
  |  Branch (777:9): [True: 0, False: 18.6k]
  |  Branch (777:19): [True: 2.20k, False: 16.4k]
  |  Branch (777:41): [True: 0, False: 2.20k]
  ------------------
  778|      0|        return -1;
  779|      0|    }
  780|       |
  781|       |    /* look for special cases */
  782|  18.6k|    if (m <= 1) {
  ------------------
  |  Branch (782:9): [True: 6.56k, False: 12.1k]
  ------------------
  783|  6.56k|        if (m <= 0) {
  ------------------
  |  Branch (783:13): [True: 0, False: 6.56k]
  ------------------
  784|      0|            return -1;
  785|      0|        }
  786|       |        /* use special case for 1-character strings */
  787|  6.56k|        if (mode == FAST_SEARCH)
  ------------------
  |  |   25|  6.56k|#define FAST_SEARCH 1
  ------------------
  |  Branch (787:13): [True: 5.48k, False: 1.07k]
  ------------------
  788|  5.48k|            return STRINGLIB(find_char)(s, n, p[0]);
  ------------------
  |  |    7|  5.48k|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  789|  1.07k|        else if (mode == FAST_RSEARCH)
  ------------------
  |  |   26|  1.07k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (789:18): [True: 0, False: 1.07k]
  ------------------
  790|      0|            return STRINGLIB(rfind_char)(s, n, p[0]);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  791|  1.07k|        else {
  792|  1.07k|            if (maxcount == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  1.07k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (792:17): [True: 1.07k, False: 0]
  ------------------
  793|  1.07k|                return STRINGLIB(count_char_no_maxcount)(s, n, p[0]);
  ------------------
  |  |    7|  1.07k|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  794|  1.07k|            }
  795|      0|            return STRINGLIB(count_char)(s, n, p[0], maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  796|  1.07k|        }
  797|  6.56k|    }
  798|       |
  799|  12.1k|    if (mode != FAST_RSEARCH) {
  ------------------
  |  |   26|  12.1k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (799:9): [True: 12.1k, False: 0]
  ------------------
  800|  12.1k|        if (n < 2500 || (m < 100 && n < 30000) || m < 6) {
  ------------------
  |  Branch (800:13): [True: 11.9k, False: 221]
  |  Branch (800:26): [True: 221, False: 0]
  |  Branch (800:37): [True: 221, False: 0]
  |  Branch (800:51): [True: 0, False: 0]
  ------------------
  801|  12.1k|            return STRINGLIB(default_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|  12.1k|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  802|  12.1k|        }
  803|      0|        else if ((m >> 2) * 3 < (n >> 2)) {
  ------------------
  |  Branch (803:18): [True: 0, False: 0]
  ------------------
  804|       |            /* 33% threshold, but don't overflow. */
  805|       |            /* For larger problems where the needle isn't a huge
  806|       |               percentage of the size of the haystack, the relatively
  807|       |               expensive O(m) startup cost of the two-way algorithm
  808|       |               will surely pay off. */
  809|      0|            if (mode == FAST_SEARCH) {
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  |  Branch (809:17): [True: 0, False: 0]
  ------------------
  810|      0|                return STRINGLIB(_two_way_find)(s, n, p, m);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  811|      0|            }
  812|      0|            else {
  813|      0|                return STRINGLIB(_two_way_count)(s, n, p, m, maxcount);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  814|      0|            }
  815|      0|        }
  816|      0|        else {
  817|       |            /* To ensure that we have good worst-case behavior,
  818|       |               here's an adaptive version of the algorithm, where if
  819|       |               we match O(m) characters without any matches of the
  820|       |               entire needle, then we predict that the startup cost of
  821|       |               the two-way algorithm will probably be worth it. */
  822|      0|            return STRINGLIB(adaptive_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  823|      0|        }
  824|  12.1k|    }
  825|      0|    else {
  826|       |        /* FAST_RSEARCH */
  827|      0|        return STRINGLIB(default_rfind)(s, n, p, m, maxcount, mode);
  ------------------
  |  |    7|      0|#define STRINGLIB(F)             ucs4lib_##F
  ------------------
  828|      0|    }
  829|  12.1k|}
unicodeobject.c:ucs4lib_count_char_no_maxcount:
  761|  1.07k|{
  762|  1.07k|    Py_ssize_t count = 0;
  763|   313k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (763:28): [True: 312k, False: 1.07k]
  ------------------
  764|   312k|        if (s[i] == p0) {
  ------------------
  |  Branch (764:13): [True: 5.48k, False: 306k]
  ------------------
  765|  5.48k|            count++;
  766|  5.48k|        }
  767|   312k|    }
  768|  1.07k|    return count;
  769|  1.07k|}
unicodeobject.c:ucs4lib_default_find:
  560|  12.1k|{
  561|  12.1k|    const Py_ssize_t w = n - m;
  562|  12.1k|    Py_ssize_t mlast = m - 1, count = 0;
  563|  12.1k|    Py_ssize_t gap = mlast;
  564|  12.1k|    const STRINGLIB_CHAR last = p[mlast];
  565|  12.1k|    const STRINGLIB_CHAR *const ss = &s[mlast];
  566|       |
  567|  12.1k|    unsigned long mask = 0;
  568|  24.2k|    for (Py_ssize_t i = 0; i < mlast; i++) {
  ------------------
  |  Branch (568:28): [True: 12.1k, False: 12.1k]
  ------------------
  569|  12.1k|        STRINGLIB_BLOOM_ADD(mask, p[i]);
  ------------------
  |  |   39|  12.1k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  12.1k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  570|  12.1k|        if (p[i] == last) {
  ------------------
  |  Branch (570:13): [True: 12.1k, False: 0]
  ------------------
  571|  12.1k|            gap = mlast - i - 1;
  572|  12.1k|        }
  573|  12.1k|    }
  574|  12.1k|    STRINGLIB_BLOOM_ADD(mask, last);
  ------------------
  |  |   39|  12.1k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  12.1k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  575|       |
  576|  59.4k|    for (Py_ssize_t i = 0; i <= w; i++) {
  ------------------
  |  Branch (576:28): [True: 58.3k, False: 1.12k]
  ------------------
  577|  58.3k|        if (ss[i] == last) {
  ------------------
  |  Branch (577:13): [True: 27.7k, False: 30.6k]
  ------------------
  578|       |            /* candidate match */
  579|  27.7k|            Py_ssize_t j;
  580|  49.7k|            for (j = 0; j < mlast; j++) {
  ------------------
  |  Branch (580:25): [True: 27.7k, False: 22.0k]
  ------------------
  581|  27.7k|                if (s[i+j] != p[j]) {
  ------------------
  |  Branch (581:21): [True: 5.71k, False: 22.0k]
  ------------------
  582|  5.71k|                    break;
  583|  5.71k|                }
  584|  27.7k|            }
  585|  27.7k|            if (j == mlast) {
  ------------------
  |  Branch (585:17): [True: 22.0k, False: 5.71k]
  ------------------
  586|       |                /* got a match! */
  587|  22.0k|                if (mode != FAST_COUNT) {
  ------------------
  |  |   24|  22.0k|#define FAST_COUNT 0
  ------------------
  |  Branch (587:21): [True: 11.0k, False: 11.0k]
  ------------------
  588|  11.0k|                    return i;
  589|  11.0k|                }
  590|  11.0k|                count++;
  591|  11.0k|                if (count == maxcount) {
  ------------------
  |  Branch (591:21): [True: 0, False: 11.0k]
  ------------------
  592|      0|                    return maxcount;
  593|      0|                }
  594|  11.0k|                i = i + mlast;
  595|  11.0k|                continue;
  596|  11.0k|            }
  597|       |            /* miss: check if next character is part of pattern */
  598|  5.71k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  5.71k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  5.71k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (598:17): [True: 5.71k, False: 0]
  |  Branch (598:31): [True: 0, False: 5.71k]
  ------------------
  599|      0|                i = i + m;
  600|      0|            }
  601|  5.71k|            else {
  602|  5.71k|                i = i + gap;
  603|  5.71k|            }
  604|  5.71k|        }
  605|  30.6k|        else {
  606|       |            /* skip: check if next character is part of pattern */
  607|  30.6k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  30.4k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  30.4k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (607:17): [True: 30.4k, False: 231]
  |  Branch (607:31): [True: 27.1k, False: 3.28k]
  ------------------
  608|  27.1k|                i = i + m;
  609|  27.1k|            }
  610|  30.6k|        }
  611|  58.3k|    }
  612|  1.12k|    return mode == FAST_COUNT ? count : -1;
  ------------------
  |  |   24|  1.12k|#define FAST_COUNT 0
  ------------------
  |  Branch (612:12): [True: 1.12k, False: 0]
  ------------------
  613|  12.1k|}
bytes_methods.c:stringlib_find_char:
   51|     78|{
   52|     78|    const STRINGLIB_CHAR *p, *e;
   53|       |
   54|     78|    p = s;
   55|     78|    e = s + n;
   56|     78|    if (n > MEMCHR_CUT_OFF) {
  ------------------
  |  |   44|     78|#  define MEMCHR_CUT_OFF 15
  ------------------
  |  Branch (56:9): [True: 78, False: 0]
  ------------------
   57|     78|#ifdef STRINGLIB_FAST_MEMCHR
   58|     78|        p = STRINGLIB_FAST_MEMCHR(s, ch, n);
  ------------------
  |  |  383|     78|#define STRINGLIB_FAST_MEMCHR memchr
  ------------------
   59|     78|        if (p != NULL)
  ------------------
  |  Branch (59:13): [True: 69, False: 9]
  ------------------
   60|     69|            return (p - s);
   61|      9|        return -1;
   62|       |#else
   63|       |        /* use memchr if we can choose a needle without too many likely
   64|       |           false positives */
   65|       |        const STRINGLIB_CHAR *s1, *e1;
   66|       |        unsigned char needle = ch & 0xff;
   67|       |        /* If looking for a multiple of 256, we'd have too
   68|       |           many false positives looking for the '\0' byte in UCS2
   69|       |           and UCS4 representations. */
   70|       |        if (needle != 0) {
   71|       |            do {
   72|       |                const void *candidate = memchr(p, needle,
   73|       |                                               (e - p) * sizeof(STRINGLIB_CHAR));
   74|       |                if (candidate == NULL)
   75|       |                    return -1;
   76|       |                s1 = p;
   77|       |                p = (const STRINGLIB_CHAR *)
   78|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
   79|       |                if (*p == ch)
   80|       |                    return (p - s);
   81|       |                /* False positive */
   82|       |                p++;
   83|       |                if (p - s1 > MEMCHR_CUT_OFF)
   84|       |                    continue;
   85|       |                if (e - p <= MEMCHR_CUT_OFF)
   86|       |                    break;
   87|       |                e1 = p + MEMCHR_CUT_OFF;
   88|       |                while (p != e1) {
   89|       |                    if (*p == ch)
   90|       |                        return (p - s);
   91|       |                    p++;
   92|       |                }
   93|       |            }
   94|       |            while (e - p > MEMCHR_CUT_OFF);
   95|       |        }
   96|       |#endif
   97|     78|    }
   98|      0|    while (p < e) {
  ------------------
  |  Branch (98:12): [True: 0, False: 0]
  ------------------
   99|      0|        if (*p == ch)
  ------------------
  |  Branch (99:13): [True: 0, False: 0]
  ------------------
  100|      0|            return (p - s);
  101|      0|        p++;
  102|      0|    }
  103|      0|    return -1;
  104|      0|}
bytes_methods.c:stringlib_rfind_char:
  117|  18.1k|{
  118|  18.1k|    const STRINGLIB_CHAR *p;
  119|  18.1k|#ifdef HAVE_MEMRCHR
  120|       |    /* memrchr() is a GNU extension, available since glibc 2.1.91.  it
  121|       |       doesn't seem as optimized as memchr(), but is still quite
  122|       |       faster than our hand-written loop below. There is no wmemrchr
  123|       |       for 4-byte chars. */
  124|       |
  125|  18.1k|    if (n > MEMRCHR_CUT_OFF) {
  ------------------
  |  |  109|  18.1k|#  define MEMRCHR_CUT_OFF 15
  ------------------
  |  Branch (125:9): [True: 6.43k, False: 11.7k]
  ------------------
  126|  6.43k|#if STRINGLIB_SIZEOF_CHAR == 1
  127|  6.43k|        p = memrchr(s, ch, n);
  128|  6.43k|        if (p != NULL)
  ------------------
  |  Branch (128:13): [True: 2.66k, False: 3.76k]
  ------------------
  129|  2.66k|            return (p - s);
  130|  3.76k|        return -1;
  131|       |#else
  132|       |        /* use memrchr if we can choose a needle without too many likely
  133|       |           false positives */
  134|       |        const STRINGLIB_CHAR *s1;
  135|       |        Py_ssize_t n1;
  136|       |        unsigned char needle = ch & 0xff;
  137|       |        /* If looking for a multiple of 256, we'd have too
  138|       |           many false positives looking for the '\0' byte in UCS2
  139|       |           and UCS4 representations. */
  140|       |        if (needle != 0) {
  141|       |            do {
  142|       |                void *candidate = memrchr(s, needle,
  143|       |                                          n * sizeof(STRINGLIB_CHAR));
  144|       |                if (candidate == NULL)
  145|       |                    return -1;
  146|       |                n1 = n;
  147|       |                p = (const STRINGLIB_CHAR *)
  148|       |                        _Py_ALIGN_DOWN(candidate, sizeof(STRINGLIB_CHAR));
  149|       |                n = p - s;
  150|       |                if (*p == ch)
  151|       |                    return n;
  152|       |                /* False positive */
  153|       |                if (n1 - n > MEMRCHR_CUT_OFF)
  154|       |                    continue;
  155|       |                if (n <= MEMRCHR_CUT_OFF)
  156|       |                    break;
  157|       |                s1 = p - MEMRCHR_CUT_OFF;
  158|       |                while (p > s1) {
  159|       |                    p--;
  160|       |                    if (*p == ch)
  161|       |                        return (p - s);
  162|       |                }
  163|       |                n = p - s;
  164|       |            }
  165|       |            while (n > MEMRCHR_CUT_OFF);
  166|       |        }
  167|       |#endif
  168|  6.43k|    }
  169|  11.7k|#endif  /* HAVE_MEMRCHR */
  170|  11.7k|    p = s + n;
  171|   103k|    while (p > s) {
  ------------------
  |  Branch (171:12): [True: 93.0k, False: 10.2k]
  ------------------
  172|  93.0k|        p--;
  173|  93.0k|        if (*p == ch)
  ------------------
  |  Branch (173:13): [True: 1.48k, False: 91.6k]
  ------------------
  174|  1.48k|            return (p - s);
  175|  93.0k|    }
  176|  10.2k|    return -1;
  177|  11.7k|}
bytes_methods.c:fastsearch:
  776|  1.33k|{
  777|  1.33k|    if (n < m || (mode == FAST_COUNT && maxcount == 0)) {
  ------------------
  |  |   24|  2.66k|#define FAST_COUNT 0
  ------------------
  |  Branch (777:9): [True: 0, False: 1.33k]
  |  Branch (777:19): [True: 0, False: 1.33k]
  |  Branch (777:41): [True: 0, False: 0]
  ------------------
  778|      0|        return -1;
  779|      0|    }
  780|       |
  781|       |    /* look for special cases */
  782|  1.33k|    if (m <= 1) {
  ------------------
  |  Branch (782:9): [True: 0, False: 1.33k]
  ------------------
  783|      0|        if (m <= 0) {
  ------------------
  |  Branch (783:13): [True: 0, False: 0]
  ------------------
  784|      0|            return -1;
  785|      0|        }
  786|       |        /* use special case for 1-character strings */
  787|      0|        if (mode == FAST_SEARCH)
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  |  Branch (787:13): [True: 0, False: 0]
  ------------------
  788|      0|            return STRINGLIB(find_char)(s, n, p[0]);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  789|      0|        else if (mode == FAST_RSEARCH)
  ------------------
  |  |   26|      0|#define FAST_RSEARCH 2
  ------------------
  |  Branch (789:18): [True: 0, False: 0]
  ------------------
  790|      0|            return STRINGLIB(rfind_char)(s, n, p[0]);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  791|      0|        else {
  792|      0|            if (maxcount == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (792:17): [True: 0, False: 0]
  ------------------
  793|      0|                return STRINGLIB(count_char_no_maxcount)(s, n, p[0]);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  794|      0|            }
  795|      0|            return STRINGLIB(count_char)(s, n, p[0], maxcount);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  796|      0|        }
  797|      0|    }
  798|       |
  799|  1.33k|    if (mode != FAST_RSEARCH) {
  ------------------
  |  |   26|  1.33k|#define FAST_RSEARCH 2
  ------------------
  |  Branch (799:9): [True: 1.33k, False: 0]
  ------------------
  800|  1.33k|        if (n < 2500 || (m < 100 && n < 30000) || m < 6) {
  ------------------
  |  Branch (800:13): [True: 1.20k, False: 124]
  |  Branch (800:26): [True: 124, False: 0]
  |  Branch (800:37): [True: 124, False: 0]
  |  Branch (800:51): [True: 0, False: 0]
  ------------------
  801|  1.33k|            return STRINGLIB(default_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |  380|  1.33k|#define STRINGLIB(F) stringlib_##F
  ------------------
  802|  1.33k|        }
  803|      0|        else if ((m >> 2) * 3 < (n >> 2)) {
  ------------------
  |  Branch (803:18): [True: 0, False: 0]
  ------------------
  804|       |            /* 33% threshold, but don't overflow. */
  805|       |            /* For larger problems where the needle isn't a huge
  806|       |               percentage of the size of the haystack, the relatively
  807|       |               expensive O(m) startup cost of the two-way algorithm
  808|       |               will surely pay off. */
  809|      0|            if (mode == FAST_SEARCH) {
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  |  Branch (809:17): [True: 0, False: 0]
  ------------------
  810|      0|                return STRINGLIB(_two_way_find)(s, n, p, m);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  811|      0|            }
  812|      0|            else {
  813|      0|                return STRINGLIB(_two_way_count)(s, n, p, m, maxcount);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  814|      0|            }
  815|      0|        }
  816|      0|        else {
  817|       |            /* To ensure that we have good worst-case behavior,
  818|       |               here's an adaptive version of the algorithm, where if
  819|       |               we match O(m) characters without any matches of the
  820|       |               entire needle, then we predict that the startup cost of
  821|       |               the two-way algorithm will probably be worth it. */
  822|      0|            return STRINGLIB(adaptive_find)(s, n, p, m, maxcount, mode);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  823|      0|        }
  824|  1.33k|    }
  825|      0|    else {
  826|       |        /* FAST_RSEARCH */
  827|      0|        return STRINGLIB(default_rfind)(s, n, p, m, maxcount, mode);
  ------------------
  |  |  380|      0|#define STRINGLIB(F) stringlib_##F
  ------------------
  828|      0|    }
  829|  1.33k|}
bytes_methods.c:stringlib_default_find:
  560|  1.33k|{
  561|  1.33k|    const Py_ssize_t w = n - m;
  562|  1.33k|    Py_ssize_t mlast = m - 1, count = 0;
  563|  1.33k|    Py_ssize_t gap = mlast;
  564|  1.33k|    const STRINGLIB_CHAR last = p[mlast];
  565|  1.33k|    const STRINGLIB_CHAR *const ss = &s[mlast];
  566|       |
  567|  1.33k|    unsigned long mask = 0;
  568|  5.32k|    for (Py_ssize_t i = 0; i < mlast; i++) {
  ------------------
  |  Branch (568:28): [True: 3.99k, False: 1.33k]
  ------------------
  569|  3.99k|        STRINGLIB_BLOOM_ADD(mask, p[i]);
  ------------------
  |  |   39|  3.99k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  3.99k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  570|  3.99k|        if (p[i] == last) {
  ------------------
  |  Branch (570:13): [True: 1.33k, False: 2.66k]
  ------------------
  571|  1.33k|            gap = mlast - i - 1;
  572|  1.33k|        }
  573|  3.99k|    }
  574|  1.33k|    STRINGLIB_BLOOM_ADD(mask, last);
  ------------------
  |  |   39|  1.33k|    ((mask |= (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  1.33k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  575|       |
  576|  80.8k|    for (Py_ssize_t i = 0; i <= w; i++) {
  ------------------
  |  Branch (576:28): [True: 80.7k, False: 137]
  ------------------
  577|  80.7k|        if (ss[i] == last) {
  ------------------
  |  Branch (577:13): [True: 4.53k, False: 76.1k]
  ------------------
  578|       |            /* candidate match */
  579|  4.53k|            Py_ssize_t j;
  580|  8.72k|            for (j = 0; j < mlast; j++) {
  ------------------
  |  Branch (580:25): [True: 7.52k, False: 1.19k]
  ------------------
  581|  7.52k|                if (s[i+j] != p[j]) {
  ------------------
  |  Branch (581:21): [True: 3.34k, False: 4.18k]
  ------------------
  582|  3.34k|                    break;
  583|  3.34k|                }
  584|  7.52k|            }
  585|  4.53k|            if (j == mlast) {
  ------------------
  |  Branch (585:17): [True: 1.19k, False: 3.34k]
  ------------------
  586|       |                /* got a match! */
  587|  1.19k|                if (mode != FAST_COUNT) {
  ------------------
  |  |   24|  1.19k|#define FAST_COUNT 0
  ------------------
  |  Branch (587:21): [True: 1.19k, False: 0]
  ------------------
  588|  1.19k|                    return i;
  589|  1.19k|                }
  590|      0|                count++;
  591|      0|                if (count == maxcount) {
  ------------------
  |  Branch (591:21): [True: 0, False: 0]
  ------------------
  592|      0|                    return maxcount;
  593|      0|                }
  594|      0|                i = i + mlast;
  595|      0|                continue;
  596|      0|            }
  597|       |            /* miss: check if next character is part of pattern */
  598|  3.34k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  3.33k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  3.33k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (598:17): [True: 3.33k, False: 4]
  |  Branch (598:31): [True: 1.36k, False: 1.96k]
  ------------------
  599|  1.36k|                i = i + m;
  600|  1.36k|            }
  601|  1.97k|            else {
  602|  1.97k|                i = i + gap;
  603|  1.97k|            }
  604|  3.34k|        }
  605|  76.1k|        else {
  606|       |            /* skip: check if next character is part of pattern */
  607|  76.1k|            if (i + 1 <= w && !STRINGLIB_BLOOM(mask, ss[i+1])) {
  ------------------
  |  |   41|  76.1k|    ((mask &  (1UL << ((ch) & (STRINGLIB_BLOOM_WIDTH -1)))))
  |  |  ------------------
  |  |  |  |   31|  76.1k|#define STRINGLIB_BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (607:17): [True: 76.1k, False: 38]
  |  Branch (607:31): [True: 42.3k, False: 33.8k]
  ------------------
  608|  42.3k|                i = i + m;
  609|  42.3k|            }
  610|  76.1k|        }
  611|  80.7k|    }
  612|    137|    return mode == FAST_COUNT ? count : -1;
  ------------------
  |  |   24|    137|#define FAST_COUNT 0
  ------------------
  |  Branch (612:12): [True: 0, False: 137]
  ------------------
  613|  1.33k|}

unicodeobject.c:asciilib_find:
   11|  23.0k|{
   12|  23.0k|    Py_ssize_t pos;
   13|       |
   14|  23.0k|    assert(str_len >= 0);
  ------------------
  |  Branch (14:5): [True: 23.0k, False: 0]
  ------------------
   15|  23.0k|    if (sub_len == 0)
  ------------------
  |  Branch (15:9): [True: 0, False: 23.0k]
  ------------------
   16|      0|        return offset;
   17|       |
   18|  23.0k|    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |    6|  23.0k|#define FASTSEARCH               asciilib_fastsearch
  ------------------
                  pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|  23.0k|#define FAST_SEARCH 1
  ------------------
   19|       |
   20|  23.0k|    if (pos >= 0)
  ------------------
  |  Branch (20:9): [True: 23.0k, False: 0]
  ------------------
   21|  23.0k|        pos += offset;
   22|       |
   23|  23.0k|    return pos;
   24|  23.0k|}
unicodeobject.c:ucs1lib_find:
   11|  9.84k|{
   12|  9.84k|    Py_ssize_t pos;
   13|       |
   14|  9.84k|    assert(str_len >= 0);
  ------------------
  |  Branch (14:5): [True: 9.84k, False: 0]
  ------------------
   15|  9.84k|    if (sub_len == 0)
  ------------------
  |  Branch (15:9): [True: 0, False: 9.84k]
  ------------------
   16|      0|        return offset;
   17|       |
   18|  9.84k|    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |    6|  9.84k|#define FASTSEARCH               ucs1lib_fastsearch
  ------------------
                  pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|  9.84k|#define FAST_SEARCH 1
  ------------------
   19|       |
   20|  9.84k|    if (pos >= 0)
  ------------------
  |  Branch (20:9): [True: 9.82k, False: 23]
  ------------------
   21|  9.82k|        pos += offset;
   22|       |
   23|  9.84k|    return pos;
   24|  9.84k|}
unicodeobject.c:ucs2lib_find:
   11|  9.59k|{
   12|  9.59k|    Py_ssize_t pos;
   13|       |
   14|  9.59k|    assert(str_len >= 0);
  ------------------
  |  Branch (14:5): [True: 9.59k, False: 0]
  ------------------
   15|  9.59k|    if (sub_len == 0)
  ------------------
  |  Branch (15:9): [True: 0, False: 9.59k]
  ------------------
   16|      0|        return offset;
   17|       |
   18|  9.59k|    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |    6|  9.59k|#define FASTSEARCH               ucs2lib_fastsearch
  ------------------
                  pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|  9.59k|#define FAST_SEARCH 1
  ------------------
   19|       |
   20|  9.59k|    if (pos >= 0)
  ------------------
  |  Branch (20:9): [True: 9.59k, False: 0]
  ------------------
   21|  9.59k|        pos += offset;
   22|       |
   23|  9.59k|    return pos;
   24|  9.59k|}
unicodeobject.c:ucs4lib_find:
   11|  16.4k|{
   12|  16.4k|    Py_ssize_t pos;
   13|       |
   14|  16.4k|    assert(str_len >= 0);
  ------------------
  |  Branch (14:5): [True: 16.4k, False: 0]
  ------------------
   15|  16.4k|    if (sub_len == 0)
  ------------------
  |  Branch (15:9): [True: 0, False: 16.4k]
  ------------------
   16|      0|        return offset;
   17|       |
   18|  16.4k|    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |    6|  16.4k|#define FASTSEARCH               ucs4lib_fastsearch
  ------------------
                  pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|  16.4k|#define FAST_SEARCH 1
  ------------------
   19|       |
   20|  16.4k|    if (pos >= 0)
  ------------------
  |  Branch (20:9): [True: 16.4k, False: 0]
  ------------------
   21|  16.4k|        pos += offset;
   22|       |
   23|  16.4k|    return pos;
   24|  16.4k|}
bytes_methods.c:stringlib_find:
   11|  1.33k|{
   12|  1.33k|    Py_ssize_t pos;
   13|       |
   14|  1.33k|    assert(str_len >= 0);
  ------------------
  |  Branch (14:5): [True: 1.33k, False: 0]
  ------------------
   15|  1.33k|    if (sub_len == 0)
  ------------------
  |  Branch (15:9): [True: 0, False: 1.33k]
  ------------------
   16|      0|        return offset;
   17|       |
   18|  1.33k|    pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |  379|  1.33k|#define FASTSEARCH fastsearch
  ------------------
                  pos = FASTSEARCH(str, str_len, sub, sub_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|  1.33k|#define FAST_SEARCH 1
  ------------------
   19|       |
   20|  1.33k|    if (pos >= 0)
  ------------------
  |  Branch (20:9): [True: 1.19k, False: 137]
  ------------------
   21|  1.19k|        pos += offset;
   22|       |
   23|  1.33k|    return pos;
   24|  1.33k|}

unicode_writer.c:ucs1lib_find_max_char:
   22|   263k|{
   23|   263k|    const unsigned char *p = (const unsigned char *) begin;
   24|   263k|    const unsigned char *_end = (const unsigned char *)end;
   25|       |
   26|  1.59M|    while (p < _end) {
  ------------------
  |  Branch (26:12): [True: 1.33M, False: 252k]
  ------------------
   27|  1.33M|        if (_Py_IS_ALIGNED(p, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|  1.33M|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 174k, False: 1.16M]
  |  |  ------------------
  ------------------
   28|       |            /* Help register allocation */
   29|   174k|            const unsigned char *_p = p;
   30|   495k|            while (_p + SIZEOF_SIZE_T <= _end) {
  ------------------
  |  | 1955|   495k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (30:20): [True: 320k, False: 174k]
  ------------------
   31|   320k|                size_t value = *(const size_t *) _p;
   32|   320k|                if (value & UCS1_ASCII_CHAR_MASK)
  ------------------
  |  |   11|   320k|# define UCS1_ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (32:21): [True: 0, False: 320k]
  ------------------
   33|      0|                    return 255;
   34|   320k|                _p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   320k|#define SIZEOF_SIZE_T 8
  ------------------
   35|   320k|            }
   36|   174k|            p = _p;
   37|   174k|            if (p == _end)
  ------------------
  |  Branch (37:17): [True: 11.3k, False: 163k]
  ------------------
   38|  11.3k|                break;
   39|   174k|        }
   40|  1.32M|        if (*p++ & 0x80)
  ------------------
  |  Branch (40:13): [True: 0, False: 1.32M]
  ------------------
   41|      0|            return 255;
   42|  1.32M|    }
   43|   263k|    return 127;
   44|   263k|}
unicodeobject.c:ucs4lib_find_max_char:
   61|   128k|{
   62|       |#if STRINGLIB_SIZEOF_CHAR == 2
   63|       |    const Py_UCS4 mask_limit = MASK_UCS1;
   64|       |    const Py_UCS4 max_char_limit = MAX_CHAR_UCS2;
   65|       |#elif STRINGLIB_SIZEOF_CHAR == 4
   66|   128k|    const Py_UCS4 mask_limit = MASK_UCS2;
  ------------------
  |  |   52|   128k|#define MASK_UCS2 0xFFFF0000
  ------------------
   67|   128k|    const Py_UCS4 max_char_limit = MAX_CHAR_UCS4;
  ------------------
  |  |   57|   128k|#define MAX_CHAR_UCS4  0x10ffff
  ------------------
   68|       |#else
   69|       |#error Invalid STRINGLIB_SIZEOF_CHAR (must be 1, 2 or 4)
   70|       |#endif
   71|   128k|    Py_UCS4 mask;
   72|   128k|    Py_ssize_t n = end - begin;
   73|   128k|    const STRINGLIB_CHAR *p = begin;
   74|   128k|    const STRINGLIB_CHAR *unrolled_end = begin + _Py_SIZE_ROUND_DOWN(n, 4);
  ------------------
  |  |  236|   128k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  ------------------
   75|   128k|    Py_UCS4 max_char;
   76|       |
   77|   128k|    max_char = MAX_CHAR_ASCII;
  ------------------
  |  |   54|   128k|#define MAX_CHAR_ASCII 0x7f
  ------------------
   78|   128k|    mask = MASK_ASCII;
  ------------------
  |  |   50|   128k|#define MASK_ASCII 0xFFFFFF80
  ------------------
   79|   490k|    while (p < unrolled_end) {
  ------------------
  |  Branch (79:12): [True: 382k, False: 107k]
  ------------------
   80|   382k|        STRINGLIB_CHAR bits = p[0] | p[1] | p[2] | p[3];
  ------------------
  |  |   11|   382k|#define STRINGLIB_CHAR           Py_UCS4
  ------------------
   81|   382k|        if (bits & mask) {
  ------------------
  |  Branch (81:13): [True: 113k, False: 268k]
  ------------------
   82|   113k|            if (mask == mask_limit) {
  ------------------
  |  Branch (82:17): [True: 20.5k, False: 93.1k]
  ------------------
   83|       |                /* Limit reached */
   84|  20.5k|                return max_char_limit;
   85|  20.5k|            }
   86|  93.1k|            if (mask == MASK_ASCII) {
  ------------------
  |  |   50|  93.1k|#define MASK_ASCII 0xFFFFFF80
  ------------------
  |  Branch (86:17): [True: 47.1k, False: 46.0k]
  ------------------
   87|  47.1k|                max_char = MAX_CHAR_UCS1;
  ------------------
  |  |   55|  47.1k|#define MAX_CHAR_UCS1  0xff
  ------------------
   88|  47.1k|                mask = MASK_UCS1;
  ------------------
  |  |   51|  47.1k|#define MASK_UCS1 0xFFFFFF00
  ------------------
   89|  47.1k|            }
   90|  46.0k|            else {
   91|       |                /* mask can't be MASK_UCS2 because of mask_limit above */
   92|  46.0k|                assert(mask == MASK_UCS1);
  ------------------
  |  Branch (92:17): [True: 46.0k, False: 0]
  ------------------
   93|  46.0k|                max_char = MAX_CHAR_UCS2;
  ------------------
  |  |   56|  46.0k|#define MAX_CHAR_UCS2  0xffff
  ------------------
   94|  46.0k|                mask = MASK_UCS2;
  ------------------
  |  |   52|  46.0k|#define MASK_UCS2 0xFFFF0000
  ------------------
   95|  46.0k|            }
   96|       |            /* We check the new mask on the same chars in the next iteration */
   97|  93.1k|            continue;
   98|  93.1k|        }
   99|   268k|        p += 4;
  100|   268k|    }
  101|   458k|    while (p < end) {
  ------------------
  |  Branch (101:12): [True: 353k, False: 105k]
  ------------------
  102|   353k|        if (p[0] & mask) {
  ------------------
  |  Branch (102:13): [True: 144k, False: 208k]
  ------------------
  103|   144k|            if (mask == mask_limit) {
  ------------------
  |  Branch (103:17): [True: 2.49k, False: 142k]
  ------------------
  104|       |                /* Limit reached */
  105|  2.49k|                return max_char_limit;
  106|  2.49k|            }
  107|   142k|            if (mask == MASK_ASCII) {
  ------------------
  |  |   50|   142k|#define MASK_ASCII 0xFFFFFF80
  ------------------
  |  Branch (107:17): [True: 72.8k, False: 69.6k]
  ------------------
  108|  72.8k|                max_char = MAX_CHAR_UCS1;
  ------------------
  |  |   55|  72.8k|#define MAX_CHAR_UCS1  0xff
  ------------------
  109|  72.8k|                mask = MASK_UCS1;
  ------------------
  |  |   51|  72.8k|#define MASK_UCS1 0xFFFFFF00
  ------------------
  110|  72.8k|            }
  111|  69.6k|            else {
  112|       |                /* mask can't be MASK_UCS2 because of mask_limit above */
  113|  69.6k|                assert(mask == MASK_UCS1);
  ------------------
  |  Branch (113:17): [True: 69.6k, False: 0]
  ------------------
  114|  69.6k|                max_char = MAX_CHAR_UCS2;
  ------------------
  |  |   56|  69.6k|#define MAX_CHAR_UCS2  0xffff
  ------------------
  115|  69.6k|                mask = MASK_UCS2;
  ------------------
  |  |   52|  69.6k|#define MASK_UCS2 0xFFFF0000
  ------------------
  116|  69.6k|            }
  117|       |            /* We check the new mask on the same chars in the next iteration */
  118|   142k|            continue;
  119|   142k|        }
  120|   208k|        p++;
  121|   208k|    }
  122|   105k|    return max_char;
  123|   107k|}
unicodeobject.c:ucs1lib_find_max_char:
   22|   160k|{
   23|   160k|    const unsigned char *p = (const unsigned char *) begin;
   24|   160k|    const unsigned char *_end = (const unsigned char *)end;
   25|       |
   26|  1.25M|    while (p < _end) {
  ------------------
  |  Branch (26:12): [True: 1.11M, False: 142k]
  ------------------
   27|  1.11M|        if (_Py_IS_ALIGNED(p, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|  1.11M|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 143k, False: 970k]
  |  |  ------------------
  ------------------
   28|       |            /* Help register allocation */
   29|   143k|            const unsigned char *_p = p;
   30|   658k|            while (_p + SIZEOF_SIZE_T <= _end) {
  ------------------
  |  | 1955|   658k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (30:20): [True: 522k, False: 136k]
  ------------------
   31|   522k|                size_t value = *(const size_t *) _p;
   32|   522k|                if (value & UCS1_ASCII_CHAR_MASK)
  ------------------
  |  |   11|   522k|# define UCS1_ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (32:21): [True: 6.61k, False: 515k]
  ------------------
   33|  6.61k|                    return 255;
   34|   515k|                _p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   515k|#define SIZEOF_SIZE_T 8
  ------------------
   35|   515k|            }
   36|   136k|            p = _p;
   37|   136k|            if (p == _end)
  ------------------
  |  Branch (37:17): [True: 4.26k, False: 132k]
  ------------------
   38|  4.26k|                break;
   39|   136k|        }
   40|  1.10M|        if (*p++ & 0x80)
  ------------------
  |  Branch (40:13): [True: 6.85k, False: 1.09M]
  ------------------
   41|  6.85k|            return 255;
   42|  1.10M|    }
   43|   146k|    return 127;
   44|   160k|}
unicodeobject.c:ucs2lib_find_max_char:
   61|   263k|{
   62|   263k|#if STRINGLIB_SIZEOF_CHAR == 2
   63|   263k|    const Py_UCS4 mask_limit = MASK_UCS1;
  ------------------
  |  |   51|   263k|#define MASK_UCS1 0xFFFFFF00
  ------------------
   64|   263k|    const Py_UCS4 max_char_limit = MAX_CHAR_UCS2;
  ------------------
  |  |   56|   263k|#define MAX_CHAR_UCS2  0xffff
  ------------------
   65|       |#elif STRINGLIB_SIZEOF_CHAR == 4
   66|       |    const Py_UCS4 mask_limit = MASK_UCS2;
   67|       |    const Py_UCS4 max_char_limit = MAX_CHAR_UCS4;
   68|       |#else
   69|       |#error Invalid STRINGLIB_SIZEOF_CHAR (must be 1, 2 or 4)
   70|       |#endif
   71|   263k|    Py_UCS4 mask;
   72|   263k|    Py_ssize_t n = end - begin;
   73|   263k|    const STRINGLIB_CHAR *p = begin;
   74|   263k|    const STRINGLIB_CHAR *unrolled_end = begin + _Py_SIZE_ROUND_DOWN(n, 4);
  ------------------
  |  |  236|   263k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  ------------------
   75|   263k|    Py_UCS4 max_char;
   76|       |
   77|   263k|    max_char = MAX_CHAR_ASCII;
  ------------------
  |  |   54|   263k|#define MAX_CHAR_ASCII 0x7f
  ------------------
   78|   263k|    mask = MASK_ASCII;
  ------------------
  |  |   50|   263k|#define MASK_ASCII 0xFFFFFF80
  ------------------
   79|   532k|    while (p < unrolled_end) {
  ------------------
  |  Branch (79:12): [True: 477k, False: 55.4k]
  ------------------
   80|   477k|        STRINGLIB_CHAR bits = p[0] | p[1] | p[2] | p[3];
  ------------------
  |  |   11|   477k|#define STRINGLIB_CHAR           Py_UCS2
  ------------------
   81|   477k|        if (bits & mask) {
  ------------------
  |  Branch (81:13): [True: 416k, False: 60.9k]
  ------------------
   82|   416k|            if (mask == mask_limit) {
  ------------------
  |  Branch (82:17): [True: 207k, False: 208k]
  ------------------
   83|       |                /* Limit reached */
   84|   207k|                return max_char_limit;
   85|   207k|            }
   86|   208k|            if (mask == MASK_ASCII) {
  ------------------
  |  |   50|   208k|#define MASK_ASCII 0xFFFFFF80
  ------------------
  |  Branch (86:17): [True: 208k, False: 0]
  ------------------
   87|   208k|                max_char = MAX_CHAR_UCS1;
  ------------------
  |  |   55|   208k|#define MAX_CHAR_UCS1  0xff
  ------------------
   88|   208k|                mask = MASK_UCS1;
  ------------------
  |  |   51|   208k|#define MASK_UCS1 0xFFFFFF00
  ------------------
   89|   208k|            }
   90|      0|            else {
   91|       |                /* mask can't be MASK_UCS2 because of mask_limit above */
   92|      0|                assert(mask == MASK_UCS1);
  ------------------
  |  Branch (92:17): [True: 0, False: 0]
  ------------------
   93|      0|                max_char = MAX_CHAR_UCS2;
  ------------------
  |  |   56|      0|#define MAX_CHAR_UCS2  0xffff
  ------------------
   94|      0|                mask = MASK_UCS2;
  ------------------
  |  |   52|      0|#define MASK_UCS2 0xFFFF0000
  ------------------
   95|      0|            }
   96|       |            /* We check the new mask on the same chars in the next iteration */
   97|   208k|            continue;
   98|   208k|        }
   99|  60.9k|        p += 4;
  100|  60.9k|    }
  101|   114k|    while (p < end) {
  ------------------
  |  Branch (101:12): [True: 109k, False: 5.11k]
  ------------------
  102|   109k|        if (p[0] & mask) {
  ------------------
  |  Branch (102:13): [True: 100k, False: 9.18k]
  ------------------
  103|   100k|            if (mask == mask_limit) {
  ------------------
  |  Branch (103:17): [True: 50.2k, False: 50.1k]
  ------------------
  104|       |                /* Limit reached */
  105|  50.2k|                return max_char_limit;
  106|  50.2k|            }
  107|  50.1k|            if (mask == MASK_ASCII) {
  ------------------
  |  |   50|  50.1k|#define MASK_ASCII 0xFFFFFF80
  ------------------
  |  Branch (107:17): [True: 50.1k, False: 0]
  ------------------
  108|  50.1k|                max_char = MAX_CHAR_UCS1;
  ------------------
  |  |   55|  50.1k|#define MAX_CHAR_UCS1  0xff
  ------------------
  109|  50.1k|                mask = MASK_UCS1;
  ------------------
  |  |   51|  50.1k|#define MASK_UCS1 0xFFFFFF00
  ------------------
  110|  50.1k|            }
  111|      0|            else {
  112|       |                /* mask can't be MASK_UCS2 because of mask_limit above */
  113|      0|                assert(mask == MASK_UCS1);
  ------------------
  |  Branch (113:17): [True: 0, False: 0]
  ------------------
  114|      0|                max_char = MAX_CHAR_UCS2;
  ------------------
  |  |   56|      0|#define MAX_CHAR_UCS2  0xffff
  ------------------
  115|      0|                mask = MASK_UCS2;
  ------------------
  |  |   52|      0|#define MASK_UCS2 0xFFFF0000
  ------------------
  116|      0|            }
  117|       |            /* We check the new mask on the same chars in the next iteration */
  118|  50.1k|            continue;
  119|  50.1k|        }
  120|  9.18k|        p++;
  121|  9.18k|    }
  122|  5.11k|    return max_char;
  123|  55.4k|}

unicodeobject.c:asciilib_rpartition:
   74|  1.15k|{
   75|  1.15k|    PyObject* out;
   76|  1.15k|    Py_ssize_t pos;
   77|       |
   78|  1.15k|    if (sep_len == 0) {
  ------------------
  |  Branch (78:9): [True: 0, False: 1.15k]
  ------------------
   79|      0|        PyErr_SetString(PyExc_ValueError, "empty separator");
   80|      0|        return NULL;
   81|      0|    }
   82|       |
   83|  1.15k|    out = PyTuple_New(3);
   84|  1.15k|    if (!out)
  ------------------
  |  Branch (84:9): [True: 0, False: 1.15k]
  ------------------
   85|      0|        return NULL;
   86|       |
   87|  1.15k|    pos = FASTSEARCH(str, str_len, sep, sep_len, -1, FAST_RSEARCH);
  ------------------
  |  |    6|  1.15k|#define FASTSEARCH               asciilib_fastsearch
  ------------------
                  pos = FASTSEARCH(str, str_len, sep, sep_len, -1, FAST_RSEARCH);
  ------------------
  |  |   26|  1.15k|#define FAST_RSEARCH 2
  ------------------
   88|       |
   89|  1.15k|    if (pos < 0) {
  ------------------
  |  Branch (89:9): [True: 240, False: 918]
  ------------------
   90|       |#if STRINGLIB_MUTABLE
   91|       |        PyTuple_SET_ITEM(out, 0, STRINGLIB_NEW(NULL, 0));
   92|       |        PyTuple_SET_ITEM(out, 1, STRINGLIB_NEW(NULL, 0));
   93|       |        PyTuple_SET_ITEM(out, 2, STRINGLIB_NEW(str, str_len));
   94|       |
   95|       |        if (PyErr_Occurred()) {
   96|       |            Py_DECREF(out);
   97|       |            return NULL;
   98|       |        }
   99|       |#else
  100|    240|        PyObject *empty = (PyObject*)STRINGLIB_GET_EMPTY();
  ------------------
  |  |  970|    240|#define STRINGLIB_GET_EMPTY() _PyUnicode_GetEmpty()
  ------------------
  101|    240|        assert(empty != NULL);
  ------------------
  |  Branch (101:9): [True: 240, False: 0]
  ------------------
  102|    240|        Py_INCREF(empty);
  ------------------
  |  |  310|    240|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  103|    240|        PyTuple_SET_ITEM(out, 0, empty);
  ------------------
  |  |   40|    240|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|    240|        Py_INCREF(empty);
  ------------------
  |  |  310|    240|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  105|    240|        PyTuple_SET_ITEM(out, 1, empty);
  ------------------
  |  |   40|    240|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|    240|        Py_INCREF(str_obj);
  ------------------
  |  |  310|    240|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|    240|        PyTuple_SET_ITEM(out, 2, (PyObject*) str_obj);
  ------------------
  |  |   40|    240|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    240|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    240|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|    240|#endif
  109|    240|        return out;
  110|    240|    }
  111|       |
  112|    918|    PyTuple_SET_ITEM(out, 0, STRINGLIB_NEW(str, pos));
  ------------------
  |  |   40|    918|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|    918|    Py_INCREF(sep_obj);
  ------------------
  |  |  310|    918|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|    918|    PyTuple_SET_ITEM(out, 1, sep_obj);
  ------------------
  |  |   40|    918|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|    918|    pos += sep_len;
  116|    918|    PyTuple_SET_ITEM(out, 2, STRINGLIB_NEW(str + pos, str_len - pos));
  ------------------
  |  |   40|    918|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    918|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    918|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|       |
  118|    918|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (118:9): [True: 0, False: 918]
  ------------------
  119|      0|        Py_DECREF(out);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|      0|        return NULL;
  121|      0|    }
  122|       |
  123|    918|    return out;
  124|    918|}

unicodeobject.c:ucs1lib_replace_1char_inplace:
   10|     55|{
   11|     55|    *s = u2;
   12|  1.20k|    while (--maxcount && ++s != end) {
  ------------------
  |  Branch (12:12): [True: 1.20k, False: 0]
  |  Branch (12:26): [True: 1.17k, False: 29]
  ------------------
   13|       |        /* Find the next character to be replaced.
   14|       |
   15|       |           If it occurs often, it is faster to scan for it using an inline
   16|       |           loop.  If it occurs seldom, it is faster to scan for it using a
   17|       |           function call; the overhead of the function call is amortized
   18|       |           across the many characters that call covers.  We start with an
   19|       |           inline loop and use a heuristic to determine whether to fall back
   20|       |           to a function call. */
   21|  1.17k|        if (*s != u1) {
  ------------------
  |  Branch (21:13): [True: 596, False: 577]
  ------------------
   22|    596|            int attempts = 10;
   23|       |            /* search u1 in a dummy loop */
   24|  2.91k|            while (1) {
  ------------------
  |  Branch (24:20): [True: 2.91k, Folded]
  ------------------
   25|  2.91k|                if (++s == end)
  ------------------
  |  Branch (25:21): [True: 19, False: 2.89k]
  ------------------
   26|     19|                    return;
   27|  2.89k|                if (*s == u1)
  ------------------
  |  Branch (27:21): [True: 401, False: 2.49k]
  ------------------
   28|    401|                    break;
   29|  2.49k|                if (!--attempts) {
  ------------------
  |  Branch (29:21): [True: 176, False: 2.31k]
  ------------------
   30|       |                    /* if u1 was not found for attempts iterations,
   31|       |                       use FASTSEARCH() or memchr() */
   32|    176|#ifdef STRINGLIB_FAST_MEMCHR
   33|    176|                    s++;
   34|    176|                    s = STRINGLIB_FAST_MEMCHR(s, u1, end - s);
  ------------------
  |  |   23|    176|#define STRINGLIB_FAST_MEMCHR    memchr
  ------------------
   35|    176|                    if (s == NULL)
  ------------------
  |  Branch (35:25): [True: 7, False: 169]
  ------------------
   36|      7|                        return;
   37|       |#else
   38|       |                    Py_ssize_t i;
   39|       |                    STRINGLIB_CHAR ch1 = (STRINGLIB_CHAR) u1;
   40|       |                    s++;
   41|       |                    i = FASTSEARCH(s, end - s, &ch1, 1, 0, FAST_SEARCH);
   42|       |                    if (i < 0)
   43|       |                        return;
   44|       |                    s += i;
   45|       |#endif
   46|       |                    /* restart the dummy loop */
   47|    169|                    break;
   48|    176|                }
   49|  2.49k|            }
   50|    596|        }
   51|  1.14k|        *s = u2;
   52|  1.14k|    }
   53|     55|}

unicodeobject.c:ucs1lib_repr:
   11|  2.10k|{
   12|  2.10k|    Py_ssize_t isize = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  2.10k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   13|  2.10k|    const void *idata = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|  2.10k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.10k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.10k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   14|  2.10k|    int ikind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  2.10k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  4.21k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2.10k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   15|       |
   16|      0|    *odata++ = quote;
   17|   362k|    for (Py_ssize_t i = 0; i < isize; i++) {
  ------------------
  |  Branch (17:28): [True: 360k, False: 2.10k]
  ------------------
   18|   360k|        Py_UCS4 ch = PyUnicode_READ(ikind, idata, i);
  ------------------
  |  |  354|   360k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   360k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   360k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   360k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   360k|                   (index))
  ------------------
   19|       |
   20|       |        /* Escape quotes and backslashes */
   21|   360k|        if ((ch == quote) || (ch == '\\')) {
  ------------------
  |  Branch (21:13): [True: 2.62k, False: 358k]
  |  Branch (21:30): [True: 3.12k, False: 355k]
  ------------------
   22|  5.74k|            *odata++ = '\\';
   23|  5.74k|            *odata++ = ch;
   24|  5.74k|            continue;
   25|  5.74k|        }
   26|       |
   27|       |        /* Map special whitespace to '\t', \n', '\r' */
   28|   355k|        if (ch == '\t') {
  ------------------
  |  Branch (28:13): [True: 738, False: 354k]
  ------------------
   29|    738|            *odata++ = '\\';
   30|    738|            *odata++ = 't';
   31|    738|        }
   32|   354k|        else if (ch == '\n') {
  ------------------
  |  Branch (32:18): [True: 4.19k, False: 350k]
  ------------------
   33|  4.19k|            *odata++ = '\\';
   34|  4.19k|            *odata++ = 'n';
   35|  4.19k|        }
   36|   350k|        else if (ch == '\r') {
  ------------------
  |  Branch (36:18): [True: 123, False: 349k]
  ------------------
   37|    123|            *odata++ = '\\';
   38|    123|            *odata++ = 'r';
   39|    123|        }
   40|       |
   41|       |        /* Map non-printable US ASCII to '\xhh' */
   42|   349k|        else if (ch < ' ' || ch == 0x7F) {
  ------------------
  |  Branch (42:18): [True: 11.5k, False: 338k]
  |  Branch (42:30): [True: 1.50k, False: 336k]
  ------------------
   43|  13.0k|            *odata++ = '\\';
   44|  13.0k|            *odata++ = 'x';
   45|  13.0k|            *odata++ = Py_hexdigits[(ch >> 4) & 0x000F];
   46|  13.0k|            *odata++ = Py_hexdigits[ch & 0x000F];
   47|  13.0k|        }
   48|       |
   49|       |        /* Copy ASCII characters as-is */
   50|   336k|        else if (ch < 0x7F) {
  ------------------
  |  Branch (50:18): [True: 278k, False: 58.8k]
  ------------------
   51|   278k|            *odata++ = ch;
   52|   278k|        }
   53|       |
   54|       |        /* Non-ASCII characters */
   55|  58.8k|        else {
   56|       |            /* Map Unicode whitespace and control characters
   57|       |               (categories Z* and C* except ASCII space)
   58|       |            */
   59|  58.8k|            if (!Py_UNICODE_ISPRINTABLE(ch)) {
  ------------------
  |  |  761|  58.8k|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  ------------------
  |  Branch (59:17): [True: 12.3k, False: 46.4k]
  ------------------
   60|  12.3k|                *odata++ = '\\';
   61|       |                /* Map 8-bit characters to '\xhh' */
   62|  12.3k|                if (ch <= 0xff) {
  ------------------
  |  Branch (62:21): [True: 11.8k, False: 585]
  ------------------
   63|  11.8k|                    *odata++ = 'x';
   64|  11.8k|                    *odata++ = Py_hexdigits[(ch >> 4) & 0x000F];
   65|  11.8k|                    *odata++ = Py_hexdigits[ch & 0x000F];
   66|  11.8k|                }
   67|       |                /* Map 16-bit characters to '\uxxxx' */
   68|    585|                else if (ch <= 0xffff) {
  ------------------
  |  Branch (68:26): [True: 336, False: 249]
  ------------------
   69|    336|                    *odata++ = 'u';
   70|    336|                    *odata++ = Py_hexdigits[(ch >> 12) & 0xF];
   71|    336|                    *odata++ = Py_hexdigits[(ch >> 8) & 0xF];
   72|    336|                    *odata++ = Py_hexdigits[(ch >> 4) & 0xF];
   73|    336|                    *odata++ = Py_hexdigits[ch & 0xF];
   74|    336|                }
   75|       |                /* Map 21-bit characters to '\U00xxxxxx' */
   76|    249|                else {
   77|    249|                    *odata++ = 'U';
   78|    249|                    *odata++ = Py_hexdigits[(ch >> 28) & 0xF];
   79|    249|                    *odata++ = Py_hexdigits[(ch >> 24) & 0xF];
   80|    249|                    *odata++ = Py_hexdigits[(ch >> 20) & 0xF];
   81|    249|                    *odata++ = Py_hexdigits[(ch >> 16) & 0xF];
   82|    249|                    *odata++ = Py_hexdigits[(ch >> 12) & 0xF];
   83|    249|                    *odata++ = Py_hexdigits[(ch >> 8) & 0xF];
   84|    249|                    *odata++ = Py_hexdigits[(ch >> 4) & 0xF];
   85|    249|                    *odata++ = Py_hexdigits[ch & 0xF];
   86|    249|                }
   87|  12.3k|            }
   88|       |            /* Copy characters as-is */
   89|  46.4k|            else {
   90|  46.4k|                *odata++ = ch;
   91|  46.4k|            }
   92|  58.8k|        }
   93|   355k|    }
   94|  2.10k|    *odata = quote;
   95|  2.10k|}
unicodeobject.c:ucs2lib_repr:
   11|    507|{
   12|    507|    Py_ssize_t isize = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|    507|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    507|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    507|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   13|    507|    const void *idata = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|    507|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    507|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    507|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   14|    507|    int ikind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|    507|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.01k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 507, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   15|       |
   16|      0|    *odata++ = quote;
   17|   331k|    for (Py_ssize_t i = 0; i < isize; i++) {
  ------------------
  |  Branch (17:28): [True: 331k, False: 507]
  ------------------
   18|   331k|        Py_UCS4 ch = PyUnicode_READ(ikind, idata, i);
  ------------------
  |  |  354|   331k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   331k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   331k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   331k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   331k|                   (index))
  ------------------
   19|       |
   20|       |        /* Escape quotes and backslashes */
   21|   331k|        if ((ch == quote) || (ch == '\\')) {
  ------------------
  |  Branch (21:13): [True: 8.99k, False: 322k]
  |  Branch (21:30): [True: 3.86k, False: 318k]
  ------------------
   22|  12.8k|            *odata++ = '\\';
   23|  12.8k|            *odata++ = ch;
   24|  12.8k|            continue;
   25|  12.8k|        }
   26|       |
   27|       |        /* Map special whitespace to '\t', \n', '\r' */
   28|   318k|        if (ch == '\t') {
  ------------------
  |  Branch (28:13): [True: 755, False: 317k]
  ------------------
   29|    755|            *odata++ = '\\';
   30|    755|            *odata++ = 't';
   31|    755|        }
   32|   317k|        else if (ch == '\n') {
  ------------------
  |  Branch (32:18): [True: 6.96k, False: 310k]
  ------------------
   33|  6.96k|            *odata++ = '\\';
   34|  6.96k|            *odata++ = 'n';
   35|  6.96k|        }
   36|   310k|        else if (ch == '\r') {
  ------------------
  |  Branch (36:18): [True: 212, False: 310k]
  ------------------
   37|    212|            *odata++ = '\\';
   38|    212|            *odata++ = 'r';
   39|    212|        }
   40|       |
   41|       |        /* Map non-printable US ASCII to '\xhh' */
   42|   310k|        else if (ch < ' ' || ch == 0x7F) {
  ------------------
  |  Branch (42:18): [True: 6.81k, False: 303k]
  |  Branch (42:30): [True: 1.05k, False: 302k]
  ------------------
   43|  7.86k|            *odata++ = '\\';
   44|  7.86k|            *odata++ = 'x';
   45|  7.86k|            *odata++ = Py_hexdigits[(ch >> 4) & 0x000F];
   46|  7.86k|            *odata++ = Py_hexdigits[ch & 0x000F];
   47|  7.86k|        }
   48|       |
   49|       |        /* Copy ASCII characters as-is */
   50|   302k|        else if (ch < 0x7F) {
  ------------------
  |  Branch (50:18): [True: 250k, False: 52.2k]
  ------------------
   51|   250k|            *odata++ = ch;
   52|   250k|        }
   53|       |
   54|       |        /* Non-ASCII characters */
   55|  52.2k|        else {
   56|       |            /* Map Unicode whitespace and control characters
   57|       |               (categories Z* and C* except ASCII space)
   58|       |            */
   59|  52.2k|            if (!Py_UNICODE_ISPRINTABLE(ch)) {
  ------------------
  |  |  761|  52.2k|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  ------------------
  |  Branch (59:17): [True: 11.3k, False: 40.9k]
  ------------------
   60|  11.3k|                *odata++ = '\\';
   61|       |                /* Map 8-bit characters to '\xhh' */
   62|  11.3k|                if (ch <= 0xff) {
  ------------------
  |  Branch (62:21): [True: 10.9k, False: 367]
  ------------------
   63|  10.9k|                    *odata++ = 'x';
   64|  10.9k|                    *odata++ = Py_hexdigits[(ch >> 4) & 0x000F];
   65|  10.9k|                    *odata++ = Py_hexdigits[ch & 0x000F];
   66|  10.9k|                }
   67|       |                /* Map 16-bit characters to '\uxxxx' */
   68|    367|                else if (ch <= 0xffff) {
  ------------------
  |  Branch (68:26): [True: 243, False: 124]
  ------------------
   69|    243|                    *odata++ = 'u';
   70|    243|                    *odata++ = Py_hexdigits[(ch >> 12) & 0xF];
   71|    243|                    *odata++ = Py_hexdigits[(ch >> 8) & 0xF];
   72|    243|                    *odata++ = Py_hexdigits[(ch >> 4) & 0xF];
   73|    243|                    *odata++ = Py_hexdigits[ch & 0xF];
   74|    243|                }
   75|       |                /* Map 21-bit characters to '\U00xxxxxx' */
   76|    124|                else {
   77|    124|                    *odata++ = 'U';
   78|    124|                    *odata++ = Py_hexdigits[(ch >> 28) & 0xF];
   79|    124|                    *odata++ = Py_hexdigits[(ch >> 24) & 0xF];
   80|    124|                    *odata++ = Py_hexdigits[(ch >> 20) & 0xF];
   81|    124|                    *odata++ = Py_hexdigits[(ch >> 16) & 0xF];
   82|    124|                    *odata++ = Py_hexdigits[(ch >> 12) & 0xF];
   83|    124|                    *odata++ = Py_hexdigits[(ch >> 8) & 0xF];
   84|    124|                    *odata++ = Py_hexdigits[(ch >> 4) & 0xF];
   85|    124|                    *odata++ = Py_hexdigits[ch & 0xF];
   86|    124|                }
   87|  11.3k|            }
   88|       |            /* Copy characters as-is */
   89|  40.9k|            else {
   90|  40.9k|                *odata++ = ch;
   91|  40.9k|            }
   92|  52.2k|        }
   93|   318k|    }
   94|    507|    *odata = quote;
   95|    507|}
unicodeobject.c:ucs4lib_repr:
   11|    652|{
   12|    652|    Py_ssize_t isize = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|    652|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    652|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    652|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   13|    652|    const void *idata = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|    652|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    652|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    652|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   14|    652|    int ikind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|    652|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.30k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 652, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   15|       |
   16|      0|    *odata++ = quote;
   17|   246k|    for (Py_ssize_t i = 0; i < isize; i++) {
  ------------------
  |  Branch (17:28): [True: 246k, False: 652]
  ------------------
   18|   246k|        Py_UCS4 ch = PyUnicode_READ(ikind, idata, i);
  ------------------
  |  |  354|   246k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   246k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   246k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   246k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   246k|                   (index))
  ------------------
   19|       |
   20|       |        /* Escape quotes and backslashes */
   21|   246k|        if ((ch == quote) || (ch == '\\')) {
  ------------------
  |  Branch (21:13): [True: 2.68k, False: 243k]
  |  Branch (21:30): [True: 2.77k, False: 240k]
  ------------------
   22|  5.45k|            *odata++ = '\\';
   23|  5.45k|            *odata++ = ch;
   24|  5.45k|            continue;
   25|  5.45k|        }
   26|       |
   27|       |        /* Map special whitespace to '\t', \n', '\r' */
   28|   240k|        if (ch == '\t') {
  ------------------
  |  Branch (28:13): [True: 833, False: 240k]
  ------------------
   29|    833|            *odata++ = '\\';
   30|    833|            *odata++ = 't';
   31|    833|        }
   32|   240k|        else if (ch == '\n') {
  ------------------
  |  Branch (32:18): [True: 5.64k, False: 234k]
  ------------------
   33|  5.64k|            *odata++ = '\\';
   34|  5.64k|            *odata++ = 'n';
   35|  5.64k|        }
   36|   234k|        else if (ch == '\r') {
  ------------------
  |  Branch (36:18): [True: 113, False: 234k]
  ------------------
   37|    113|            *odata++ = '\\';
   38|    113|            *odata++ = 'r';
   39|    113|        }
   40|       |
   41|       |        /* Map non-printable US ASCII to '\xhh' */
   42|   234k|        else if (ch < ' ' || ch == 0x7F) {
  ------------------
  |  Branch (42:18): [True: 3.99k, False: 230k]
  |  Branch (42:30): [True: 2.01k, False: 228k]
  ------------------
   43|  6.00k|            *odata++ = '\\';
   44|  6.00k|            *odata++ = 'x';
   45|  6.00k|            *odata++ = Py_hexdigits[(ch >> 4) & 0x000F];
   46|  6.00k|            *odata++ = Py_hexdigits[ch & 0x000F];
   47|  6.00k|        }
   48|       |
   49|       |        /* Copy ASCII characters as-is */
   50|   228k|        else if (ch < 0x7F) {
  ------------------
  |  Branch (50:18): [True: 195k, False: 33.2k]
  ------------------
   51|   195k|            *odata++ = ch;
   52|   195k|        }
   53|       |
   54|       |        /* Non-ASCII characters */
   55|  33.2k|        else {
   56|       |            /* Map Unicode whitespace and control characters
   57|       |               (categories Z* and C* except ASCII space)
   58|       |            */
   59|  33.2k|            if (!Py_UNICODE_ISPRINTABLE(ch)) {
  ------------------
  |  |  761|  33.2k|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  ------------------
  |  Branch (59:17): [True: 4.19k, False: 29.0k]
  ------------------
   60|  4.19k|                *odata++ = '\\';
   61|       |                /* Map 8-bit characters to '\xhh' */
   62|  4.19k|                if (ch <= 0xff) {
  ------------------
  |  Branch (62:21): [True: 3.81k, False: 374]
  ------------------
   63|  3.81k|                    *odata++ = 'x';
   64|  3.81k|                    *odata++ = Py_hexdigits[(ch >> 4) & 0x000F];
   65|  3.81k|                    *odata++ = Py_hexdigits[ch & 0x000F];
   66|  3.81k|                }
   67|       |                /* Map 16-bit characters to '\uxxxx' */
   68|    374|                else if (ch <= 0xffff) {
  ------------------
  |  Branch (68:26): [True: 353, False: 21]
  ------------------
   69|    353|                    *odata++ = 'u';
   70|    353|                    *odata++ = Py_hexdigits[(ch >> 12) & 0xF];
   71|    353|                    *odata++ = Py_hexdigits[(ch >> 8) & 0xF];
   72|    353|                    *odata++ = Py_hexdigits[(ch >> 4) & 0xF];
   73|    353|                    *odata++ = Py_hexdigits[ch & 0xF];
   74|    353|                }
   75|       |                /* Map 21-bit characters to '\U00xxxxxx' */
   76|     21|                else {
   77|     21|                    *odata++ = 'U';
   78|     21|                    *odata++ = Py_hexdigits[(ch >> 28) & 0xF];
   79|     21|                    *odata++ = Py_hexdigits[(ch >> 24) & 0xF];
   80|     21|                    *odata++ = Py_hexdigits[(ch >> 20) & 0xF];
   81|     21|                    *odata++ = Py_hexdigits[(ch >> 16) & 0xF];
   82|     21|                    *odata++ = Py_hexdigits[(ch >> 12) & 0xF];
   83|     21|                    *odata++ = Py_hexdigits[(ch >> 8) & 0xF];
   84|     21|                    *odata++ = Py_hexdigits[(ch >> 4) & 0xF];
   85|     21|                    *odata++ = Py_hexdigits[ch & 0xF];
   86|     21|                }
   87|  4.19k|            }
   88|       |            /* Copy characters as-is */
   89|  29.0k|            else {
   90|  29.0k|                *odata++ = ch;
   91|  29.0k|            }
   92|  33.2k|        }
   93|   240k|    }
   94|    652|    *odata = quote;
   95|    652|}

unicodeobject.c:asciilib_split_whitespace:
   51|      2|{
   52|      2|    Py_ssize_t i, j, count=0;
   53|      2|    PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
  ------------------
  |  |   20|      2|    (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|      4|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |                   (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|      1|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (20:6): [True: 1, False: 1]
  |  |  ------------------
  ------------------
   54|      2|    PyObject *sub;
   55|       |
   56|      2|    if (list == NULL)
  ------------------
  |  Branch (56:9): [True: 0, False: 2]
  ------------------
   57|      0|        return NULL;
   58|       |
   59|      2|    i = j = 0;
   60|     10|    while (maxcount-- > 0) {
  ------------------
  |  Branch (60:12): [True: 10, False: 0]
  ------------------
   61|     16|        while (i < str_len && STRINGLIB_ISSPACE(str[i]))
  ------------------
  |  |   14|     14|#define STRINGLIB_ISSPACE        Py_UNICODE_ISSPACE
  ------------------
  |  Branch (61:16): [True: 14, False: 2]
  |  Branch (61:31): [True: 6, False: 8]
  ------------------
   62|      6|            i++;
   63|     10|        if (i == str_len) break;
  ------------------
  |  Branch (63:13): [True: 2, False: 8]
  ------------------
   64|      8|        j = i; i++;
   65|     40|        while (i < str_len && !STRINGLIB_ISSPACE(str[i]))
  ------------------
  |  |   14|     38|#define STRINGLIB_ISSPACE        Py_UNICODE_ISSPACE
  ------------------
  |  Branch (65:16): [True: 38, False: 2]
  |  Branch (65:31): [True: 32, False: 6]
  ------------------
   66|     32|            i++;
   67|      8|#if !STRINGLIB_MUTABLE
   68|      8|        if (j == 0 && i == str_len && STRINGLIB_CHECK_EXACT(str_obj)) {
  ------------------
  |  |   22|      0|#define STRINGLIB_CHECK_EXACT    PyUnicode_CheckExact
  |  |  ------------------
  |  |  |  |  104|      0|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (68:13): [True: 2, False: 6]
  |  Branch (68:23): [True: 0, False: 2]
  ------------------
   69|       |            /* No whitespace in str_obj, so just use it as list[0] */
   70|      0|            Py_INCREF(str_obj);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   71|      0|            PyList_SET_ITEM(list, 0, (PyObject *)str_obj);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|      0|            count++;
   73|      0|            break;
   74|      0|        }
   75|      8|#endif
   76|     24|        SPLIT_ADD(str, j, i);
  ------------------
  |  |   30|      8|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|      8|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   20|      8|#define STRINGLIB_NEW(STR,LEN)   _PyUnicode_FromASCII((const char*)(STR),(LEN))
  |  |  ------------------
  |  |   32|      8|                        (right) - (left));      \
  |  |   33|      8|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 8]
  |  |  ------------------
  |  |   34|      8|        goto onError;                           \
  |  |   35|      8|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|      8|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 8, False: 0]
  |  |  ------------------
  |  |   36|      8|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|      8|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      8|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|      8|    count++; }
  ------------------
   77|     24|    }
   78|       |
   79|      2|    if (i < str_len) {
  ------------------
  |  Branch (79:9): [True: 0, False: 2]
  ------------------
   80|       |        /* Only occurs when maxcount was reached */
   81|       |        /* Skip any remaining whitespace and copy to end of string */
   82|      0|        while (i < str_len && STRINGLIB_ISSPACE(str[i]))
  ------------------
  |  |   14|      0|#define STRINGLIB_ISSPACE        Py_UNICODE_ISSPACE
  ------------------
  |  Branch (82:16): [True: 0, False: 0]
  |  Branch (82:31): [True: 0, False: 0]
  ------------------
   83|      0|            i++;
   84|      0|        if (i != str_len)
  ------------------
  |  Branch (84:13): [True: 0, False: 0]
  ------------------
   85|      0|            SPLIT_ADD(str, i, str_len);
  ------------------
  |  |   30|      0|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|      0|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   20|      0|#define STRINGLIB_NEW(STR,LEN)   _PyUnicode_FromASCII((const char*)(STR),(LEN))
  |  |  ------------------
  |  |   32|      0|                        (right) - (left));      \
  |  |   33|      0|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   34|      0|        goto onError;                           \
  |  |   35|      0|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|      0|    count++; }
  ------------------
   86|      0|    }
   87|      2|    FIX_PREALLOC_SIZE(list);
  ------------------
  |  |   45|      2|#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
  |  |  ------------------
  |  |  |  |  216|      2|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      2|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      2|    return list;
   89|       |
   90|      0|  onError:
   91|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|       |    return NULL;
   93|      2|}
unicodeobject.c:asciilib_split:
  143|    249|{
  144|    249|    Py_ssize_t i, j, pos, count=0;
  145|    249|    PyObject *list, *sub;
  146|       |
  147|    249|    if (sep_len == 0) {
  ------------------
  |  Branch (147:9): [True: 0, False: 249]
  ------------------
  148|      0|        PyErr_SetString(PyExc_ValueError, "empty separator");
  149|      0|        return NULL;
  150|      0|    }
  151|    249|    else if (sep_len == 1)
  ------------------
  |  Branch (151:14): [True: 249, False: 0]
  ------------------
  152|    249|        return STRINGLIB(split_char)(str_obj, str, str_len, sep[0], maxcount);
  ------------------
  |  |    7|    249|#define STRINGLIB(F)             asciilib_##F
  ------------------
  153|       |
  154|      0|    list = PyList_New(PREALLOC_SIZE(maxcount));
  ------------------
  |  |   20|      0|    (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |                   (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (20:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  155|      0|    if (list == NULL)
  ------------------
  |  Branch (155:9): [True: 0, False: 0]
  ------------------
  156|      0|        return NULL;
  157|       |
  158|      0|    i = j = 0;
  159|      0|    while (maxcount-- > 0) {
  ------------------
  |  Branch (159:12): [True: 0, False: 0]
  ------------------
  160|      0|        pos = FASTSEARCH(str+i, str_len-i, sep, sep_len, -1, FAST_SEARCH);
  ------------------
  |  |    6|      0|#define FASTSEARCH               asciilib_fastsearch
  ------------------
                      pos = FASTSEARCH(str+i, str_len-i, sep, sep_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  161|      0|        if (pos < 0)
  ------------------
  |  Branch (161:13): [True: 0, False: 0]
  ------------------
  162|      0|            break;
  163|      0|        j = i + pos;
  164|      0|        SPLIT_ADD(str, i, j);
  ------------------
  |  |   30|      0|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|      0|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   20|      0|#define STRINGLIB_NEW(STR,LEN)   _PyUnicode_FromASCII((const char*)(STR),(LEN))
  |  |  ------------------
  |  |   32|      0|                        (right) - (left));      \
  |  |   33|      0|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   34|      0|        goto onError;                           \
  |  |   35|      0|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|      0|    count++; }
  ------------------
  165|      0|        i = j + sep_len;
  166|      0|    }
  167|      0|#if !STRINGLIB_MUTABLE
  168|      0|    if (count == 0 && STRINGLIB_CHECK_EXACT(str_obj)) {
  ------------------
  |  |   22|      0|#define STRINGLIB_CHECK_EXACT    PyUnicode_CheckExact
  |  |  ------------------
  |  |  |  |  104|      0|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (168:9): [True: 0, False: 0]
  ------------------
  169|       |        /* No match in str_obj, so just use it as list[0] */
  170|      0|        Py_INCREF(str_obj);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|      0|        PyList_SET_ITEM(list, 0, (PyObject *)str_obj);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|      0|        count++;
  173|      0|    } else
  174|      0|#endif
  175|      0|    {
  176|      0|        SPLIT_ADD(str, i, str_len);
  ------------------
  |  |   30|      0|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|      0|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   20|      0|#define STRINGLIB_NEW(STR,LEN)   _PyUnicode_FromASCII((const char*)(STR),(LEN))
  |  |  ------------------
  |  |   32|      0|                        (right) - (left));      \
  |  |   33|      0|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   34|      0|        goto onError;                           \
  |  |   35|      0|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|      0|    count++; }
  ------------------
  177|      0|    }
  178|      0|    FIX_PREALLOC_SIZE(list);
  ------------------
  |  |   45|      0|#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
  |  |  ------------------
  |  |  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|      0|    return list;
  180|       |
  181|      0|  onError:
  182|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|       |    return NULL;
  184|      0|}
unicodeobject.c:asciilib_split_char:
  100|    249|{
  101|    249|    Py_ssize_t i, j, count=0;
  102|    249|    PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
  ------------------
  |  |   20|    249|    (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|    498|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |                   (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|    248|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (20:6): [True: 248, False: 1]
  |  |  ------------------
  ------------------
  103|    249|    PyObject *sub;
  104|       |
  105|    249|    if (list == NULL)
  ------------------
  |  Branch (105:9): [True: 0, False: 249]
  ------------------
  106|      0|        return NULL;
  107|       |
  108|    249|    i = j = 0;
  109|    747|    while ((j < str_len) && (maxcount-- > 0)) {
  ------------------
  |  Branch (109:12): [True: 498, False: 249]
  |  Branch (109:29): [True: 498, False: 0]
  ------------------
  110|  16.2k|        for(; j < str_len; j++) {
  ------------------
  |  Branch (110:15): [True: 16.0k, False: 249]
  ------------------
  111|       |            /* I found that using memchr makes no difference */
  112|  16.0k|            if (str[j] == ch) {
  ------------------
  |  Branch (112:17): [True: 249, False: 15.7k]
  ------------------
  113|    249|                SPLIT_ADD(str, i, j);
  ------------------
  |  |   30|    249|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|    249|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   20|    249|#define STRINGLIB_NEW(STR,LEN)   _PyUnicode_FromASCII((const char*)(STR),(LEN))
  |  |  ------------------
  |  |   32|    249|                        (right) - (left));      \
  |  |   33|    249|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 249]
  |  |  ------------------
  |  |   34|    249|        goto onError;                           \
  |  |   35|    249|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|    249|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 249, False: 0]
  |  |  ------------------
  |  |   36|    249|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|    249|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|    249|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|    249|    count++; }
  ------------------
  114|    249|                i = j = j + 1;
  115|    249|                break;
  116|    249|            }
  117|  16.0k|        }
  118|    498|    }
  119|    249|#if !STRINGLIB_MUTABLE
  120|    249|    if (count == 0 && STRINGLIB_CHECK_EXACT(str_obj)) {
  ------------------
  |  |   22|      0|#define STRINGLIB_CHECK_EXACT    PyUnicode_CheckExact
  |  |  ------------------
  |  |  |  |  104|      0|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (120:9): [True: 0, False: 249]
  ------------------
  121|       |        /* ch not in str_obj, so just use str_obj as list[0] */
  122|      0|        Py_INCREF(str_obj);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|      0|        PyList_SET_ITEM(list, 0, (PyObject *)str_obj);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      0|        count++;
  125|      0|    } else
  126|    249|#endif
  127|    249|    if (i <= str_len) {
  ------------------
  |  Branch (127:9): [True: 249, False: 0]
  ------------------
  128|    498|        SPLIT_ADD(str, i, str_len);
  ------------------
  |  |   30|    249|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|    249|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   20|    249|#define STRINGLIB_NEW(STR,LEN)   _PyUnicode_FromASCII((const char*)(STR),(LEN))
  |  |  ------------------
  |  |   32|    249|                        (right) - (left));      \
  |  |   33|    249|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 249]
  |  |  ------------------
  |  |   34|    249|        goto onError;                           \
  |  |   35|    249|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|    249|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 249, False: 0]
  |  |  ------------------
  |  |   36|    249|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|    249|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|    249|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|    249|    count++; }
  ------------------
  129|    498|    }
  130|    249|    FIX_PREALLOC_SIZE(list);
  ------------------
  |  |   45|    249|#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
  |  |  ------------------
  |  |  |  |  216|    249|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|    249|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|    249|    return list;
  132|       |
  133|      0|  onError:
  134|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|       |    return NULL;
  136|    249|}
bytesobject.c:stringlib_split:
  143|  1.28k|{
  144|  1.28k|    Py_ssize_t i, j, pos, count=0;
  145|  1.28k|    PyObject *list, *sub;
  146|       |
  147|  1.28k|    if (sep_len == 0) {
  ------------------
  |  Branch (147:9): [True: 0, False: 1.28k]
  ------------------
  148|      0|        PyErr_SetString(PyExc_ValueError, "empty separator");
  149|      0|        return NULL;
  150|      0|    }
  151|  1.28k|    else if (sep_len == 1)
  ------------------
  |  Branch (151:14): [True: 1.28k, False: 0]
  ------------------
  152|  1.28k|        return STRINGLIB(split_char)(str_obj, str, str_len, sep[0], maxcount);
  ------------------
  |  |   10|  1.28k|#define STRINGLIB(F) stringlib_##F
  ------------------
  153|       |
  154|      0|    list = PyList_New(PREALLOC_SIZE(maxcount));
  ------------------
  |  |   20|      0|    (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |                   (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (20:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  155|      0|    if (list == NULL)
  ------------------
  |  Branch (155:9): [True: 0, False: 0]
  ------------------
  156|      0|        return NULL;
  157|       |
  158|      0|    i = j = 0;
  159|      0|    while (maxcount-- > 0) {
  ------------------
  |  Branch (159:12): [True: 0, False: 0]
  ------------------
  160|      0|        pos = FASTSEARCH(str+i, str_len-i, sep, sep_len, -1, FAST_SEARCH);
  ------------------
  |  |    9|      0|#define FASTSEARCH fastsearch
  ------------------
                      pos = FASTSEARCH(str+i, str_len-i, sep, sep_len, -1, FAST_SEARCH);
  ------------------
  |  |   25|      0|#define FAST_SEARCH 1
  ------------------
  161|      0|        if (pos < 0)
  ------------------
  |  Branch (161:13): [True: 0, False: 0]
  ------------------
  162|      0|            break;
  163|      0|        j = i + pos;
  164|      0|        SPLIT_ADD(str, i, j);
  ------------------
  |  |   30|      0|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|      0|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   22|      0|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  |  |  ------------------
  |  |   32|      0|                        (right) - (left));      \
  |  |   33|      0|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   34|      0|        goto onError;                           \
  |  |   35|      0|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|      0|    count++; }
  ------------------
  165|      0|        i = j + sep_len;
  166|      0|    }
  167|      0|#if !STRINGLIB_MUTABLE
  168|      0|    if (count == 0 && STRINGLIB_CHECK_EXACT(str_obj)) {
  ------------------
  |  |   24|      0|#define STRINGLIB_CHECK_EXACT    PyBytes_CheckExact
  |  |  ------------------
  |  |  |  |   29|      0|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (168:9): [True: 0, False: 0]
  ------------------
  169|       |        /* No match in str_obj, so just use it as list[0] */
  170|      0|        Py_INCREF(str_obj);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|      0|        PyList_SET_ITEM(list, 0, (PyObject *)str_obj);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|      0|        count++;
  173|      0|    } else
  174|      0|#endif
  175|      0|    {
  176|      0|        SPLIT_ADD(str, i, str_len);
  ------------------
  |  |   30|      0|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|      0|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   22|      0|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  |  |  ------------------
  |  |   32|      0|                        (right) - (left));      \
  |  |   33|      0|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   34|      0|        goto onError;                           \
  |  |   35|      0|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|      0|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|      0|    } else {                                    \
  |  |   38|      0|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   39|      0|            goto onError;                       \
  |  |   40|      0|    }                                           \
  |  |   41|      0|    count++; }
  ------------------
  177|      0|    }
  178|      0|    FIX_PREALLOC_SIZE(list);
  ------------------
  |  |   45|      0|#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
  |  |  ------------------
  |  |  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|      0|    return list;
  180|       |
  181|      0|  onError:
  182|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|       |    return NULL;
  184|      0|}
bytesobject.c:stringlib_split_char:
  100|  1.28k|{
  101|  1.28k|    Py_ssize_t i, j, count=0;
  102|  1.28k|    PyObject *list = PyList_New(PREALLOC_SIZE(maxcount));
  ------------------
  |  |   20|  1.28k|    (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|  2.57k|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |                   (maxsplit >= MAX_PREALLOC ? MAX_PREALLOC : maxsplit+1)
  |  |  ------------------
  |  |  |  |   16|  1.28k|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (20:6): [True: 1.28k, False: 0]
  |  |  ------------------
  ------------------
  103|  1.28k|    PyObject *sub;
  104|       |
  105|  1.28k|    if (list == NULL)
  ------------------
  |  Branch (105:9): [True: 0, False: 1.28k]
  ------------------
  106|      0|        return NULL;
  107|       |
  108|  1.28k|    i = j = 0;
  109|   195k|    while ((j < str_len) && (maxcount-- > 0)) {
  ------------------
  |  Branch (109:12): [True: 194k, False: 1.28k]
  |  Branch (109:29): [True: 194k, False: 0]
  ------------------
  110|  1.25M|        for(; j < str_len; j++) {
  ------------------
  |  Branch (110:15): [True: 1.25M, False: 648]
  ------------------
  111|       |            /* I found that using memchr makes no difference */
  112|  1.25M|            if (str[j] == ch) {
  ------------------
  |  Branch (112:17): [True: 193k, False: 1.06M]
  ------------------
  113|   193k|                SPLIT_ADD(str, i, j);
  ------------------
  |  |   30|   193k|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|   193k|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   22|   193k|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  |  |  ------------------
  |  |   32|   193k|                        (right) - (left));      \
  |  |   33|   193k|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 193k]
  |  |  ------------------
  |  |   34|   193k|        goto onError;                           \
  |  |   35|   193k|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|   193k|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 6.37k, False: 187k]
  |  |  ------------------
  |  |   36|  6.37k|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|  6.37k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|   187k|    } else {                                    \
  |  |   38|   187k|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 187k]
  |  |  ------------------
  |  |   39|   187k|            goto onError;                       \
  |  |   40|   187k|    }                                           \
  |  |   41|   193k|    count++; }
  ------------------
  114|   193k|                i = j = j + 1;
  115|   193k|                break;
  116|   193k|            }
  117|  1.25M|        }
  118|   194k|    }
  119|  1.28k|#if !STRINGLIB_MUTABLE
  120|  1.28k|    if (count == 0 && STRINGLIB_CHECK_EXACT(str_obj)) {
  ------------------
  |  |   24|      8|#define STRINGLIB_CHECK_EXACT    PyBytes_CheckExact
  |  |  ------------------
  |  |  |  |   29|      8|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      8|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (120:9): [True: 8, False: 1.28k]
  ------------------
  121|       |        /* ch not in str_obj, so just use str_obj as list[0] */
  122|      8|        Py_INCREF(str_obj);
  ------------------
  |  |  310|      8|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|      8|        PyList_SET_ITEM(list, 0, (PyObject *)str_obj);
  ------------------
  |  |   50|      8|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      8|        count++;
  125|      8|    } else
  126|  1.28k|#endif
  127|  1.28k|    if (i <= str_len) {
  ------------------
  |  Branch (127:9): [True: 1.28k, False: 0]
  ------------------
  128|  2.56k|        SPLIT_ADD(str, i, str_len);
  ------------------
  |  |   30|  1.28k|#define SPLIT_ADD(data, left, right) {          \
  |  |   31|  1.28k|    sub = STRINGLIB_NEW((data) + (left),        \
  |  |  ------------------
  |  |  |  |   22|  1.28k|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  |  |  ------------------
  |  |   32|  1.28k|                        (right) - (left));      \
  |  |   33|  1.28k|    if (sub == NULL)                            \
  |  |  ------------------
  |  |  |  Branch (33:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   34|  1.28k|        goto onError;                           \
  |  |   35|  1.28k|    if (count < MAX_PREALLOC) {                 \
  |  |  ------------------
  |  |  |  |   16|  1.28k|#define MAX_PREALLOC 12
  |  |  ------------------
  |  |  |  Branch (35:9): [True: 948, False: 332]
  |  |  ------------------
  |  |   36|    948|        PyList_SET_ITEM(list, count, sub);      \
  |  |  ------------------
  |  |  |  |   50|    948|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    948|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    948|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    948|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    948|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   37|    948|    } else {                                    \
  |  |   38|    332|        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
  |  |  ------------------
  |  |  |  Branch (38:13): [True: 0, False: 332]
  |  |  ------------------
  |  |   39|    332|            goto onError;                       \
  |  |   40|    332|    }                                           \
  |  |   41|  1.28k|    count++; }
  ------------------
  129|  2.56k|    }
  130|  1.28k|    FIX_PREALLOC_SIZE(list);
  ------------------
  |  |   45|  1.28k|#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
  |  |  ------------------
  |  |  |  |  216|  1.28k|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  182|  1.28k|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|  1.28k|    return list;
  132|       |
  133|      0|  onError:
  134|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|       |    return NULL;
  136|  1.28k|}

bytesobject.c:return_self:
   17|     10|{
   18|     10|#if !STRINGLIB_MUTABLE
   19|     10|    if (STRINGLIB_CHECK_EXACT(self)) {
  ------------------
  |  |   24|     10|#define STRINGLIB_CHECK_EXACT    PyBytes_CheckExact
  |  |  ------------------
  |  |  |  |   29|     10|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     10|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 10, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   20|     10|        return Py_NewRef(self);
  ------------------
  |  |  550|     10|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   21|     10|    }
   22|      0|#endif
   23|      0|    return STRINGLIB_NEW(STRINGLIB_STR(self), STRINGLIB_LEN(self));
  ------------------
  |  |   22|      0|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  ------------------
                  return STRINGLIB_NEW(STRINGLIB_STR(self), STRINGLIB_LEN(self));
  ------------------
  |  |   20|      0|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return STRINGLIB_NEW(STRINGLIB_STR(self), STRINGLIB_LEN(self));
  ------------------
  |  |   21|      0|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   24|     10|}
bytesobject.c:stringlib_replace:
  682|     10|{
  683|     10|    if (STRINGLIB_LEN(self) < from_len) {
  ------------------
  |  |   21|     10|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|     10|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (683:9): [True: 0, False: 10]
  ------------------
  684|       |        /* nothing to do; return the original bytes */
  685|      0|        return return_self(self);
  686|      0|    }
  687|     10|    if (maxcount < 0) {
  ------------------
  |  Branch (687:9): [True: 10, False: 0]
  ------------------
  688|     10|        maxcount = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|     10|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  689|     10|    } else if (maxcount == 0) {
  ------------------
  |  Branch (689:16): [True: 0, False: 0]
  ------------------
  690|       |        /* nothing to do; return the original bytes */
  691|      0|        return return_self(self);
  692|      0|    }
  693|       |
  694|       |    /* Handle zero-length special cases */
  695|     10|    if (from_len == 0) {
  ------------------
  |  Branch (695:9): [True: 0, False: 10]
  ------------------
  696|      0|        if (to_len == 0) {
  ------------------
  |  Branch (696:13): [True: 0, False: 0]
  ------------------
  697|       |            /* nothing to do; return the original bytes */
  698|      0|            return return_self(self);
  699|      0|        }
  700|       |        /* insert the 'to' bytes everywhere.    */
  701|       |        /*    >>> b"Python".replace(b"", b".")  */
  702|       |        /*    b'.P.y.t.h.o.n.'                  */
  703|      0|        return stringlib_replace_interleave(self, to_s, to_len, maxcount);
  704|      0|    }
  705|       |
  706|     10|    if (to_len == 0) {
  ------------------
  |  Branch (706:9): [True: 0, False: 10]
  ------------------
  707|       |        /* delete all occurrences of 'from' bytes */
  708|      0|        if (from_len == 1) {
  ------------------
  |  Branch (708:13): [True: 0, False: 0]
  ------------------
  709|      0|            return stringlib_replace_delete_single_character(
  710|      0|                self, from_s[0], maxcount);
  711|      0|        } else {
  712|      0|            return stringlib_replace_delete_substring(
  713|      0|                self, from_s, from_len, maxcount);
  714|      0|        }
  715|      0|    }
  716|       |
  717|       |    /* Handle special case where both bytes have the same length */
  718|       |
  719|     10|    if (from_len == to_len) {
  ------------------
  |  Branch (719:9): [True: 10, False: 0]
  ------------------
  720|     10|        if (from_len == 1) {
  ------------------
  |  Branch (720:13): [True: 10, False: 0]
  ------------------
  721|     10|            return stringlib_replace_single_character_in_place(
  722|     10|                self, from_s[0], to_s[0], maxcount);
  723|     10|        } else {
  724|      0|            return stringlib_replace_substring_in_place(
  725|      0|                self, from_s, from_len, to_s, to_len, maxcount);
  726|      0|        }
  727|     10|    }
  728|       |
  729|       |    /* Otherwise use the more generic algorithms */
  730|      0|    if (from_len == 1) {
  ------------------
  |  Branch (730:9): [True: 0, False: 0]
  ------------------
  731|      0|        return stringlib_replace_single_character(
  732|      0|            self, from_s[0], to_s, to_len, maxcount);
  733|      0|    } else {
  734|       |        /* len('from')>=2, len('to')>=1 */
  735|      0|        return stringlib_replace_substring(
  736|      0|            self, from_s, from_len, to_s, to_len, maxcount);
  737|      0|    }
  738|      0|}
bytesobject.c:stringlib_replace_single_character_in_place:
  449|     10|{
  450|     10|    const char *self_s, *end;
  451|     10|    char *result_s, *start, *next;
  452|     10|    Py_ssize_t self_len;
  453|     10|    PyObject *result;
  454|       |
  455|       |    /* The result string will be the same size */
  456|     10|    self_s = STRINGLIB_STR(self);
  ------------------
  |  |   20|     10|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|     10|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|     10|    self_len = STRINGLIB_LEN(self);
  ------------------
  |  |   21|     10|#define STRINGLIB_LEN            PyBytes_GET_SIZE
  |  |  ------------------
  |  |  |  |   33|     10|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|       |
  459|     10|    next = findchar(self_s, self_len, from_c);
  ------------------
  |  |  254|     10|  ((char *)memchr((const void *)(target), c, target_len))
  ------------------
  460|       |
  461|     10|    if (next == NULL) {
  ------------------
  |  Branch (461:9): [True: 10, False: 0]
  ------------------
  462|       |        /* No matches; return the original bytes */
  463|     10|        return return_self(self);
  464|     10|    }
  465|       |
  466|       |    /* Need to make a new bytes */
  467|      0|    result = STRINGLIB_NEW(NULL, self_len);
  ------------------
  |  |   22|      0|#define STRINGLIB_NEW            PyBytes_FromStringAndSize
  ------------------
  468|      0|    if (result == NULL) {
  ------------------
  |  Branch (468:9): [True: 0, False: 0]
  ------------------
  469|      0|        return NULL;
  470|      0|    }
  471|      0|    result_s = STRINGLIB_STR(result);
  ------------------
  |  |   20|      0|#define STRINGLIB_STR            PyBytes_AS_STRING
  |  |  ------------------
  |  |  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|      0|    memcpy(result_s, self_s, self_len);
  473|       |
  474|       |    /* change everything in-place, starting with this one */
  475|      0|    start =  result_s + (next - self_s);
  476|      0|    *start = to_c;
  477|      0|    start++;
  478|      0|    end = result_s + self_len;
  479|       |
  480|      0|    while (--maxcount > 0) {
  ------------------
  |  Branch (480:12): [True: 0, False: 0]
  ------------------
  481|      0|        next = findchar(start, end - start, from_c);
  ------------------
  |  |  254|      0|  ((char *)memchr((const void *)(target), c, target_len))
  ------------------
  482|      0|        if (next == NULL)
  ------------------
  |  Branch (482:13): [True: 0, False: 0]
  ------------------
  483|      0|            break;
  484|      0|        *next = to_c;
  485|      0|        start = next + 1;
  486|      0|    }
  487|       |
  488|      0|    return result;
  489|      0|}

PyStructSequence_New:
   66|    543|{
   67|    543|    PyStructSequence *obj;
   68|    543|    Py_ssize_t size = REAL_SIZE_TP(type), i;
  ------------------
  |  |   48|    543|    get_type_attr_as_size(tp, &_Py_ID(n_fields))
  |  |  ------------------
  |  |  |  |  936|    543|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    543|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    543|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|    543|    if (size < 0) {
  ------------------
  |  Branch (69:9): [True: 0, False: 543]
  ------------------
   70|      0|        return NULL;
   71|      0|    }
   72|    543|    Py_ssize_t vsize = VISIBLE_SIZE_TP(type);
  ------------------
  |  |   46|    543|    get_type_attr_as_size(tp, &_Py_ID(n_sequence_fields))
  |  |  ------------------
  |  |  |  |  936|    543|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    543|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    543|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|    543|    if (vsize < 0) {
  ------------------
  |  Branch (73:9): [True: 0, False: 543]
  ------------------
   74|      0|        return NULL;
   75|      0|    }
   76|       |
   77|    543|    obj = PyObject_GC_NewVar(PyStructSequence, type, size);
  ------------------
  |  |  183|    543|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|    543|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   78|    543|    if (obj == NULL)
  ------------------
  |  Branch (78:9): [True: 0, False: 543]
  ------------------
   79|      0|        return NULL;
   80|    543|    _PyTuple_RESET_HASH_CACHE(obj);
  ------------------
  |  |   44|    543|    do {                                    \
  |  |   45|    543|        assert(op != NULL);                 \
  |  |   46|  1.08k|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|    543|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    543|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  1.08k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 543]
  |  |  ------------------
  ------------------
  |  Branch (80:5): [True: 543, False: 0]
  |  Branch (80:5): [True: 543, False: 0]
  ------------------
   81|       |    /* Hack the size of the variable object, so invisible fields don't appear
   82|       |     to Python code. */
   83|    543|    Py_SET_SIZE(obj, vsize);
  ------------------
  |  |  216|    543|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|    543|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    543|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|  10.7k|    for (i = 0; i < size; i++)
  ------------------
  |  Branch (84:17): [True: 10.1k, False: 543]
  ------------------
   85|  10.1k|        obj->ob_item[i] = NULL;
   86|       |
   87|    543|    return (PyObject*)obj;
   88|    543|}
PyStructSequence_SetItem:
   92|  10.1k|{
   93|  10.1k|    PyTupleObject *tuple = _PyTuple_CAST(op);
  ------------------
  |  |   19|  10.1k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  10.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (93:28): [True: 10.1k, False: 0]
  ------------------
   94|  10.1k|    assert(0 <= index);
  ------------------
  |  Branch (94:5): [True: 10.1k, False: 0]
  ------------------
   95|  10.1k|#ifndef NDEBUG
   96|  10.1k|    Py_ssize_t n_fields = REAL_SIZE(op);
  ------------------
  |  |   49|  10.1k|#define REAL_SIZE(op) get_real_size((PyObject *)op)
  ------------------
   97|  10.1k|    assert(n_fields >= 0);
  ------------------
  |  Branch (97:5): [True: 10.1k, False: 0]
  ------------------
   98|  10.1k|    assert(index < n_fields);
  ------------------
  |  Branch (98:5): [True: 10.1k, False: 0]
  ------------------
   99|  10.1k|#endif
  100|  10.1k|    tuple->ob_item[index] = value;
  101|  10.1k|}
PyStructSequence_GetItem:
  105|     88|{
  106|     88|    assert(0 <= index);
  ------------------
  |  Branch (106:5): [True: 88, False: 0]
  ------------------
  107|     88|#ifndef NDEBUG
  108|     88|    Py_ssize_t n_fields = REAL_SIZE(op);
  ------------------
  |  |   49|     88|#define REAL_SIZE(op) get_real_size((PyObject *)op)
  ------------------
  109|     88|    assert(n_fields >= 0);
  ------------------
  |  Branch (109:5): [True: 88, False: 0]
  ------------------
  110|     88|    assert(index < n_fields);
  ------------------
  |  Branch (110:5): [True: 88, False: 0]
  ------------------
  111|     88|#endif
  112|     88|    return PyTuple_GET_ITEM(op, index);
  ------------------
  |  |   29|     88|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     88|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (112:12): [True: 88, False: 0]
  ------------------
  113|     88|}
_PyStructSequence_InitBuiltinWithFlags:
  618|     16|{
  619|     16|    if (Py_TYPE(type) == NULL) {
  ------------------
  |  |  213|     16|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (619:9): [True: 16, False: 0]
  ------------------
  620|     16|        Py_SET_TYPE(type, &PyType_Type);
  ------------------
  |  |  217|     16|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|     16|    }
  622|     16|    Py_ssize_t n_unnamed_members;
  623|     16|    Py_ssize_t n_members = count_members(desc, &n_unnamed_members);
  624|     16|    PyMemberDef *members = NULL;
  625|       |
  626|     16|    if ((type->tp_flags & Py_TPFLAGS_READY) == 0) {
  ------------------
  |  |  518|     16|#define Py_TPFLAGS_READY (1UL << 12)
  ------------------
  |  Branch (626:9): [True: 16, False: 0]
  ------------------
  627|     16|        assert(type->tp_name == NULL);
  ------------------
  |  Branch (627:9): [True: 16, False: 0]
  ------------------
  628|     16|        assert(type->tp_members == NULL);
  ------------------
  |  Branch (628:9): [True: 16, False: 0]
  ------------------
  629|     16|        assert(type->tp_base == NULL);
  ------------------
  |  Branch (629:9): [True: 16, False: 0]
  ------------------
  630|       |
  631|     16|        members = initialize_members(desc, n_members, n_unnamed_members);
  632|     16|        if (members == NULL) {
  ------------------
  |  Branch (632:13): [True: 0, False: 16]
  ------------------
  633|      0|            goto error;
  634|      0|        }
  635|     16|        initialize_static_fields(type, desc, members, n_members, tp_flags);
  636|       |
  637|     16|        _Py_SetImmortal((PyObject *)type);
  638|     16|    }
  639|      0|#ifndef NDEBUG
  640|      0|    else {
  641|       |        // Ensure that the type was initialized.
  642|      0|        assert(type->tp_name != NULL);
  ------------------
  |  Branch (642:9): [True: 0, False: 0]
  ------------------
  643|      0|        assert(type->tp_members != NULL);
  ------------------
  |  Branch (643:9): [True: 0, False: 0]
  ------------------
  644|      0|        assert(type->tp_base == &PyTuple_Type);
  ------------------
  |  Branch (644:9): [True: 0, False: 0]
  ------------------
  645|      0|        assert((type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN));
  ------------------
  |  Branch (645:9): [True: 0, False: 0]
  ------------------
  646|      0|        assert(_Py_IsImmortal(type));
  ------------------
  |  Branch (646:9): [True: 0, False: 0]
  ------------------
  647|      0|    }
  648|     16|#endif
  649|       |
  650|     16|    if (_PyStaticType_InitBuiltin(interp, type) < 0) {
  ------------------
  |  Branch (650:9): [True: 0, False: 16]
  ------------------
  651|      0|        PyErr_Format(PyExc_RuntimeError,
  652|      0|                     "Can't initialize builtin type %s",
  653|      0|                     desc->name);
  654|      0|        goto error;
  655|      0|    }
  656|       |
  657|     16|    if (initialize_structseq_dict(
  ------------------
  |  Branch (657:9): [True: 0, False: 16]
  ------------------
  658|     16|            desc, _PyType_GetDict(type), n_members, n_unnamed_members) < 0)
  659|      0|    {
  660|      0|        goto error;
  661|      0|    }
  662|       |
  663|     16|    return 0;
  664|       |
  665|      0|error:
  666|      0|    if (members != NULL) {
  ------------------
  |  Branch (666:9): [True: 0, False: 0]
  ------------------
  667|      0|        PyMem_Free(members);
  668|      0|    }
  669|      0|    return -1;
  670|     16|}
_PyStructSequence_NewType:
  746|     19|{
  747|     19|    PyMemberDef *members;
  748|     19|    PyTypeObject *type;
  749|     19|    PyType_Slot slots[8];
  750|     19|    PyType_Spec spec;
  751|     19|    Py_ssize_t n_members, n_unnamed_members;
  752|       |
  753|       |    /* Initialize MemberDefs */
  754|     19|    n_members = count_members(desc, &n_unnamed_members);
  755|     19|    members = initialize_members(desc, n_members, n_unnamed_members);
  756|     19|    if (members == NULL) {
  ------------------
  |  Branch (756:9): [True: 0, False: 19]
  ------------------
  757|      0|        return NULL;
  758|      0|    }
  759|       |
  760|       |    /* Initialize Slots */
  761|     19|    slots[0] = (PyType_Slot){Py_tp_dealloc, structseq_dealloc};
  ------------------
  |  |   60|     19|#define Py_tp_dealloc 52
  ------------------
  762|     19|    slots[1] = (PyType_Slot){Py_tp_repr, structseq_repr};
  ------------------
  |  |   74|     19|#define Py_tp_repr 66
  ------------------
  763|     19|    slots[2] = (PyType_Slot){Py_tp_doc, (void *)desc->doc};
  ------------------
  |  |   64|     19|#define Py_tp_doc 56
  ------------------
  764|     19|    slots[3] = (PyType_Slot){Py_tp_methods, structseq_methods};
  ------------------
  |  |   72|     19|#define Py_tp_methods 64
  ------------------
  765|     19|    slots[4] = (PyType_Slot){Py_tp_new, structseq_new};
  ------------------
  |  |   73|     19|#define Py_tp_new 65
  ------------------
  766|     19|    slots[5] = (PyType_Slot){Py_tp_members, members};
  ------------------
  |  |   80|     19|#define Py_tp_members 72
  ------------------
  767|     19|    slots[6] = (PyType_Slot){Py_tp_traverse, structseq_traverse};
  ------------------
  |  |   79|     19|#define Py_tp_traverse 71
  ------------------
  768|     19|    slots[7] = (PyType_Slot){0, 0};
  769|       |
  770|       |    /* Initialize Spec */
  771|       |    /* The name in this PyType_Spec is statically allocated so it is */
  772|       |    /* expected that it'll outlive the PyType_Spec */
  773|     19|    spec.name = desc->name;
  774|     19|    Py_ssize_t hidden = n_members - desc->n_in_sequence;
  775|     19|    spec.basicsize = (int)(sizeof(PyStructSequence) + (hidden - 1) * sizeof(PyObject *));
  776|     19|    spec.itemsize = sizeof(PyObject *);
  777|     19|    spec.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | tp_flags;
  ------------------
  |  |  560|     19|#define Py_TPFLAGS_DEFAULT  ( \
  |  |  561|     19|                 Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \
  |  |  ------------------
  |  |  |  |  530|     19|#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0
  |  |  ------------------
  |  |  562|     19|                0)
  ------------------
                  spec.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | tp_flags;
  ------------------
  |  |  524|     19|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  778|     19|    spec.slots = slots;
  779|       |
  780|     19|    type = (PyTypeObject *)PyType_FromSpecWithBases(&spec, (PyObject *)&PyTuple_Type);
  781|     19|    PyMem_Free(members);
  782|     19|    if (type == NULL) {
  ------------------
  |  Branch (782:9): [True: 0, False: 19]
  ------------------
  783|      0|        return NULL;
  784|      0|    }
  785|       |
  786|     19|    if (initialize_structseq_dict(
  ------------------
  |  Branch (786:9): [True: 0, False: 19]
  ------------------
  787|     19|            desc, _PyType_GetDict(type), n_members, n_unnamed_members) < 0) {
  788|      0|        Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|      0|        return NULL;
  790|      0|    }
  791|       |
  792|     19|    return type;
  793|     19|}
PyStructSequence_NewType:
  798|     19|{
  799|     19|    return _PyStructSequence_NewType(desc, 0);
  800|     19|}
structseq.c:get_type_attr_as_size:
   29|  1.08k|{
   30|  1.08k|    PyObject *v = PyDict_GetItemWithError(_PyType_GetDict(tp), name);
   31|       |
   32|  1.08k|    if (v == NULL) {
  ------------------
  |  Branch (32:9): [True: 0, False: 1.08k]
  ------------------
   33|      0|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (33:13): [True: 0, False: 0]
  ------------------
   34|      0|            return -1;
   35|      0|        }
   36|      0|        PyErr_Format(PyExc_TypeError,
   37|      0|                     "Missed attribute '%U' of type %s",
   38|      0|                     name, tp->tp_name);
   39|      0|        return -1;
   40|      0|    }
   41|  1.08k|    return PyLong_AsSsize_t(v);
   42|  1.08k|}
structseq.c:get_real_size:
   57|  10.7k|{
   58|       |    // Compute the real size from the visible size (i.e., Py_SIZE()) and the
   59|       |    // number of non-sequence fields accounted for in tp_basicsize.
   60|  10.7k|    Py_ssize_t hidden = Py_TYPE(op)->tp_basicsize - offsetof(PyStructSequence, ob_item);
  ------------------
  |  |  213|  10.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  10.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|  10.7k|    return Py_SIZE(op) + hidden / sizeof(PyObject *);
  ------------------
  |  |  214|  10.7k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  10.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   62|  10.7k|}
structseq.c:count_members:
  469|     35|count_members(PyStructSequence_Desc *desc, Py_ssize_t *n_unnamed_members) {
  470|     35|    Py_ssize_t i;
  471|       |
  472|     35|    *n_unnamed_members = 0;
  473|    287|    for (i = 0; desc->fields[i].name != NULL; ++i) {
  ------------------
  |  Branch (473:17): [True: 252, False: 35]
  ------------------
  474|    252|        if (desc->fields[i].name == PyStructSequence_UnnamedField) {
  ------------------
  |  Branch (474:13): [True: 6, False: 246]
  ------------------
  475|      6|            (*n_unnamed_members)++;
  476|      6|        }
  477|    252|    }
  478|     35|    return i;
  479|     35|}
structseq.c:initialize_members:
  542|     35|{
  543|     35|    PyMemberDef *members;
  544|       |
  545|     35|    members = PyMem_NEW(PyMemberDef, n_members - n_unnamed_members + 1);
  ------------------
  |  |   82|     35|#define PyMem_NEW(type, n)        PyMem_New(type, (n))
  |  |  ------------------
  |  |  |  |   64|     35|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|     35|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:5): [True: 0, False: 35]
  |  |  |  |  ------------------
  |  |  |  |   65|     35|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  |  |  ------------------
  ------------------
  546|     35|    if (members == NULL) {
  ------------------
  |  Branch (546:9): [True: 0, False: 35]
  ------------------
  547|      0|        PyErr_NoMemory();
  548|      0|        return NULL;
  549|      0|    }
  550|       |
  551|     35|    Py_ssize_t i, k;
  552|    287|    for (i = k = 0; i < n_members; ++i) {
  ------------------
  |  Branch (552:21): [True: 252, False: 35]
  ------------------
  553|    252|        if (desc->fields[i].name == PyStructSequence_UnnamedField) {
  ------------------
  |  Branch (553:13): [True: 6, False: 246]
  ------------------
  554|      6|            continue;
  555|      6|        }
  556|       |
  557|       |        /* The names and docstrings in these MemberDefs are statically */
  558|       |        /* allocated so it is expected that they'll outlive the MemberDef */
  559|    246|        members[k].name = desc->fields[i].name;
  560|    246|        members[k].type = _Py_T_OBJECT;
  ------------------
  |  |   59|    246|#define _Py_T_OBJECT   6  // Deprecated, use Py_T_OBJECT_EX instead
  ------------------
  561|    246|        members[k].offset = offsetof(PyStructSequence, ob_item)
  562|    246|          + i * sizeof(PyObject*);
  563|    246|        members[k].flags = Py_READONLY;
  ------------------
  |  |   83|    246|#define Py_READONLY            (1 << 0)
  ------------------
  564|    246|        members[k].doc = desc->fields[i].doc;
  565|    246|        k++;
  566|    246|    }
  567|     35|    members[k].name = NULL;
  568|       |
  569|     35|    return members;
  570|     35|}
structseq.c:initialize_static_fields:
  577|     16|{
  578|     16|    type->tp_name = desc->name;
  579|       |    // Account for hidden members in tp_basicsize because they are not
  580|       |    // included in the variable size.
  581|     16|    Py_ssize_t n_hidden = n_members - desc->n_in_sequence;
  582|     16|    type->tp_basicsize = sizeof(PyStructSequence) + (n_hidden - 1) * sizeof(PyObject *);
  583|     16|    type->tp_itemsize = sizeof(PyObject *);
  584|     16|    type->tp_dealloc = structseq_dealloc;
  585|     16|    type->tp_repr = structseq_repr;
  586|     16|    type->tp_doc = desc->doc;
  587|     16|    type->tp_base = &PyTuple_Type;
  588|     16|    type->tp_methods = structseq_methods;
  589|     16|    type->tp_new = structseq_new;
  590|     16|    type->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | tp_flags;
  ------------------
  |  |  560|     16|#define Py_TPFLAGS_DEFAULT  ( \
  |  |  561|     16|                 Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \
  |  |  ------------------
  |  |  |  |  530|     16|#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0
  |  |  ------------------
  |  |  562|     16|                0)
  ------------------
                  type->tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | tp_flags;
  ------------------
  |  |  524|     16|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  591|     16|    type->tp_traverse = structseq_traverse;
  592|     16|    type->tp_members = tp_members;
  593|     16|}
structseq.c:initialize_structseq_dict:
  483|     35|                          Py_ssize_t n_members, Py_ssize_t n_unnamed_members) {
  484|     35|    PyObject *v;
  485|       |
  486|     35|#define SET_DICT_FROM_SIZE(key, value)                                         \
  487|     35|    do {                                                                       \
  488|     35|        v = PyLong_FromSsize_t(value);                                         \
  489|     35|        if (v == NULL) {                                                       \
  490|     35|            return -1;                                                         \
  491|     35|        }                                                                      \
  492|     35|        if (PyDict_SetItemString(dict, key, v) < 0) {                          \
  493|     35|            Py_DECREF(v);                                                      \
  494|     35|            return -1;                                                         \
  495|     35|        }                                                                      \
  496|     35|        Py_DECREF(v);                                                          \
  497|     35|    } while (0)
  498|       |
  499|     35|    SET_DICT_FROM_SIZE(visible_length_key, desc->n_in_sequence);
  ------------------
  |  |  487|     35|    do {                                                                       \
  |  |  488|     35|        v = PyLong_FromSsize_t(value);                                         \
  |  |  489|     35|        if (v == NULL) {                                                       \
  |  |  ------------------
  |  |  |  Branch (489:13): [True: 0, False: 35]
  |  |  ------------------
  |  |  490|      0|            return -1;                                                         \
  |  |  491|      0|        }                                                                      \
  |  |  492|     35|        if (PyDict_SetItemString(dict, key, v) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (492:13): [True: 0, False: 35]
  |  |  ------------------
  |  |  493|      0|            Py_DECREF(v);                                                      \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  494|      0|            return -1;                                                         \
  |  |  495|      0|        }                                                                      \
  |  |  496|     35|        Py_DECREF(v);                                                          \
  |  |  ------------------
  |  |  |  |  430|     35|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  497|     35|    } while (0)
  |  |  ------------------
  |  |  |  Branch (497:14): [Folded, False: 35]
  |  |  ------------------
  ------------------
  500|     35|    SET_DICT_FROM_SIZE(real_length_key, n_members);
  ------------------
  |  |  487|     35|    do {                                                                       \
  |  |  488|     35|        v = PyLong_FromSsize_t(value);                                         \
  |  |  489|     35|        if (v == NULL) {                                                       \
  |  |  ------------------
  |  |  |  Branch (489:13): [True: 0, False: 35]
  |  |  ------------------
  |  |  490|      0|            return -1;                                                         \
  |  |  491|      0|        }                                                                      \
  |  |  492|     35|        if (PyDict_SetItemString(dict, key, v) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (492:13): [True: 0, False: 35]
  |  |  ------------------
  |  |  493|      0|            Py_DECREF(v);                                                      \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  494|      0|            return -1;                                                         \
  |  |  495|      0|        }                                                                      \
  |  |  496|     35|        Py_DECREF(v);                                                          \
  |  |  ------------------
  |  |  |  |  430|     35|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  497|     35|    } while (0)
  |  |  ------------------
  |  |  |  Branch (497:14): [Folded, False: 35]
  |  |  ------------------
  ------------------
  501|     35|    SET_DICT_FROM_SIZE(unnamed_fields_key, n_unnamed_members);
  ------------------
  |  |  487|     35|    do {                                                                       \
  |  |  488|     35|        v = PyLong_FromSsize_t(value);                                         \
  |  |  489|     35|        if (v == NULL) {                                                       \
  |  |  ------------------
  |  |  |  Branch (489:13): [True: 0, False: 35]
  |  |  ------------------
  |  |  490|      0|            return -1;                                                         \
  |  |  491|      0|        }                                                                      \
  |  |  492|     35|        if (PyDict_SetItemString(dict, key, v) < 0) {                          \
  |  |  ------------------
  |  |  |  Branch (492:13): [True: 0, False: 35]
  |  |  ------------------
  |  |  493|      0|            Py_DECREF(v);                                                      \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  494|      0|            return -1;                                                         \
  |  |  495|      0|        }                                                                      \
  |  |  496|     35|        Py_DECREF(v);                                                          \
  |  |  ------------------
  |  |  |  |  430|     35|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  497|     35|    } while (0)
  |  |  ------------------
  |  |  |  Branch (497:14): [Folded, False: 35]
  |  |  ------------------
  ------------------
  502|       |
  503|       |    // Prepare and set __match_args__
  504|     35|    Py_ssize_t i, k;
  505|     35|    PyObject* keys = PyTuple_New(desc->n_in_sequence);
  506|     35|    if (keys == NULL) {
  ------------------
  |  Branch (506:9): [True: 0, False: 35]
  ------------------
  507|      0|        return -1;
  508|      0|    }
  509|       |
  510|    255|    for (i = k = 0; i < desc->n_in_sequence; ++i) {
  ------------------
  |  Branch (510:21): [True: 220, False: 35]
  ------------------
  511|    220|        if (desc->fields[i].name == PyStructSequence_UnnamedField) {
  ------------------
  |  Branch (511:13): [True: 6, False: 214]
  ------------------
  512|      6|            continue;
  513|      6|        }
  514|    214|        PyObject* new_member = PyUnicode_FromString(desc->fields[i].name);
  515|    214|        if (new_member == NULL) {
  ------------------
  |  Branch (515:13): [True: 0, False: 214]
  ------------------
  516|      0|            goto error;
  517|      0|        }
  518|    214|        PyTuple_SET_ITEM(keys, k, new_member);
  ------------------
  |  |   40|    214|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    214|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    214|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    214|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    214|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|    214|        k++;
  520|    214|    }
  521|       |
  522|     35|    if (_PyTuple_Resize(&keys, k) == -1) {
  ------------------
  |  Branch (522:9): [True: 0, False: 35]
  ------------------
  523|      0|        assert(keys == NULL);
  ------------------
  |  Branch (523:9): [True: 0, False: 0]
  ------------------
  524|      0|        return -1;
  525|      0|    }
  526|       |
  527|     35|    if (PyDict_SetItemString(dict, match_args_key, keys) < 0) {
  ------------------
  |  Branch (527:9): [True: 0, False: 35]
  ------------------
  528|      0|        goto error;
  529|      0|    }
  530|       |
  531|     35|    Py_DECREF(keys);
  ------------------
  |  |  430|     35|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|     35|    return 0;
  533|       |
  534|      0|error:
  535|      0|    Py_DECREF(keys);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|      0|    return -1;
  537|     35|}
structseq.c:structseq_dealloc:
  133|    529|{
  134|    529|    PyStructSequence *obj = (PyStructSequence *)op;
  135|    529|    Py_ssize_t i, size;
  136|    529|    PyObject_GC_UnTrack(obj);
  137|       |
  138|    529|    PyTypeObject *tp = Py_TYPE(obj);
  ------------------
  |  |  213|    529|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    529|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    529|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|       |    // gh-122527: We can't use REAL_SIZE_TP() or any macros that access the
  140|       |    // type's dictionary here, because the dictionary may have already been
  141|       |    // cleared by the garbage collector.
  142|    529|    size = REAL_SIZE(obj);
  ------------------
  |  |   49|    529|#define REAL_SIZE(op) get_real_size((PyObject *)op)
  ------------------
  143|  10.5k|    for (i = 0; i < size; ++i) {
  ------------------
  |  Branch (143:17): [True: 10.0k, False: 529]
  ------------------
  144|  10.0k|        Py_XDECREF(obj->ob_item[i]);
  ------------------
  |  |  524|  10.0k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|  10.0k|    }
  146|    529|    PyObject_GC_Del(obj);
  147|    529|    if (_PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|    529|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (147:9): [True: 527, False: 2]
  ------------------
  148|    527|        Py_DECREF(tp);
  ------------------
  |  |  430|    527|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    527|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    527|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|    527|    }
  150|    529|}

PyTuple_New:
   76|   808k|{
   77|   808k|    PyTupleObject *op;
   78|   808k|    if (size == 0) {
  ------------------
  |  Branch (78:9): [True: 276k, False: 532k]
  ------------------
   79|   276k|        return tuple_get_empty();
   80|   276k|    }
   81|   532k|    op = tuple_alloc(size);
   82|   532k|    if (op == NULL) {
  ------------------
  |  Branch (82:9): [True: 0, False: 532k]
  ------------------
   83|      0|        return NULL;
   84|      0|    }
   85|   116M|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (85:28): [True: 115M, False: 532k]
  ------------------
   86|   115M|        op->ob_item[i] = NULL;
   87|   115M|    }
   88|   532k|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|   532k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   532k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   532k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|   532k|    return (PyObject *) op;
   90|   532k|}
PyTuple_Size:
   94|  2.39k|{
   95|  2.39k|    if (!PyTuple_Check(op)) {
  ------------------
  |  |   27|  2.39k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.39k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (95:9): [True: 0, False: 2.39k]
  ------------------
   96|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
   97|      0|        return -1;
   98|      0|    }
   99|  2.39k|    else
  100|  2.39k|        return Py_SIZE(op);
  ------------------
  |  |  214|  2.39k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.39k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.39k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|  2.39k|}
PyTuple_GetItem:
  105|  7.86k|{
  106|  7.86k|    if (!PyTuple_Check(op)) {
  ------------------
  |  |   27|  7.86k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  7.86k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (106:9): [True: 0, False: 7.86k]
  ------------------
  107|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  108|      0|        return NULL;
  109|      0|    }
  110|  7.86k|    if (i < 0 || i >= Py_SIZE(op)) {
  ------------------
  |  |  214|  7.86k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  7.86k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.86k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (110:9): [True: 0, False: 7.86k]
  |  Branch (110:18): [True: 0, False: 7.86k]
  ------------------
  111|      0|        PyErr_SetString(PyExc_IndexError, "tuple index out of range");
  112|      0|        return NULL;
  113|      0|    }
  114|  7.86k|    return ((PyTupleObject *)op) -> ob_item[i];
  115|  7.86k|}
_PyTuple_MaybeUntrack:
  139|  46.7M|{
  140|  46.7M|    PyTupleObject *t;
  141|  46.7M|    Py_ssize_t i, n;
  142|       |
  143|  46.7M|    if (!PyTuple_CheckExact(op) || !_PyObject_GC_IS_TRACKED(op))
  ------------------
  |  |   28|  46.7M|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  93.4M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  46.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  46.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!PyTuple_CheckExact(op) || !_PyObject_GC_IS_TRACKED(op))
  ------------------
  |  |   81|  46.7M|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  46.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (143:9): [True: 0, False: 46.7M]
  |  Branch (143:36): [True: 0, False: 46.7M]
  ------------------
  144|      0|        return;
  145|  46.7M|    t = (PyTupleObject *) op;
  146|  46.7M|    n = Py_SIZE(t);
  ------------------
  |  |  214|  46.7M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  46.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  147|   324M|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (147:17): [True: 277M, False: 46.5M]
  ------------------
  148|   277M|        PyObject *elt = PyTuple_GET_ITEM(t, i);
  ------------------
  |  |   29|   277M|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   277M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   277M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (148:25): [True: 277M, False: 0]
  ------------------
  149|       |        /* Tuple with NULL elements aren't
  150|       |           fully constructed, don't untrack
  151|       |           them yet. */
  152|   277M|        if (!elt ||
  ------------------
  |  Branch (152:13): [True: 0, False: 277M]
  ------------------
  153|   277M|            _PyObject_GC_MAY_BE_TRACKED(elt))
  ------------------
  |  Branch (153:13): [True: 189k, False: 277M]
  ------------------
  154|   189k|            return;
  155|   277M|    }
  156|  46.5M|    _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|  46.5M|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|  46.5M|}
PyTuple_Pack:
  173|   107k|{
  174|   107k|    Py_ssize_t i;
  175|   107k|    PyObject *o;
  176|   107k|    PyObject **items;
  177|   107k|    va_list vargs;
  178|   107k|    bool track = false;
  179|       |
  180|   107k|    if (n == 0) {
  ------------------
  |  Branch (180:9): [True: 0, False: 107k]
  ------------------
  181|      0|        return tuple_get_empty();
  182|      0|    }
  183|       |
  184|   107k|    va_start(vargs, n);
  185|   107k|    PyTupleObject *result = tuple_alloc(n);
  186|   107k|    if (result == NULL) {
  ------------------
  |  Branch (186:9): [True: 0, False: 107k]
  ------------------
  187|      0|        va_end(vargs);
  188|      0|        return NULL;
  189|      0|    }
  190|   107k|    items = result->ob_item;
  191|   421k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (191:17): [True: 314k, False: 107k]
  ------------------
  192|   314k|        o = va_arg(vargs, PyObject *);
  193|   314k|        if (!track && maybe_tracked(o)) {
  ------------------
  |  Branch (193:13): [True: 189k, False: 124k]
  |  Branch (193:23): [True: 90.8k, False: 99.1k]
  ------------------
  194|  90.8k|            track = true;
  195|  90.8k|        }
  196|   314k|        items[i] = Py_NewRef(o);
  ------------------
  |  |  550|   314k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   314k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   314k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|   314k|    }
  198|   107k|    va_end(vargs);
  199|   107k|    if (track) {
  ------------------
  |  Branch (199:9): [True: 90.8k, False: 16.3k]
  ------------------
  200|  90.8k|        _PyObject_GC_TRACK(result);
  ------------------
  |  |  505|  90.8k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  90.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  90.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|  90.8k|    }
  202|   107k|    return (PyObject *)result;
  203|   107k|}
_PyTuple_FromPair:
  207|  53.5M|{
  208|  53.5M|    assert(first != NULL);
  ------------------
  |  Branch (208:5): [True: 53.5M, False: 0]
  ------------------
  209|  53.5M|    assert(second != NULL);
  ------------------
  |  Branch (209:5): [True: 53.5M, False: 0]
  ------------------
  210|       |
  211|  53.5M|    return _PyTuple_FromPairSteal(Py_NewRef(first), Py_NewRef(second));
  ------------------
  |  |  550|  53.5M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  53.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  return _PyTuple_FromPairSteal(Py_NewRef(first), Py_NewRef(second));
  ------------------
  |  |  550|  53.5M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  53.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|  53.5M|}
_PyTuple_FromPairSteal:
  216|  53.5M|{
  217|  53.5M|    assert(first != NULL);
  ------------------
  |  Branch (217:5): [True: 53.5M, False: 0]
  ------------------
  218|  53.5M|    assert(second != NULL);
  ------------------
  |  Branch (218:5): [True: 53.5M, False: 0]
  ------------------
  219|       |
  220|  53.5M|    PyTupleObject *op = tuple_alloc(2);
  221|  53.5M|    if (op == NULL) {
  ------------------
  |  Branch (221:9): [True: 0, False: 53.5M]
  ------------------
  222|      0|        Py_DECREF(first);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      0|        Py_DECREF(second);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      0|        return NULL;
  225|      0|    }
  226|  53.5M|    PyObject **items = op->ob_item;
  227|  53.5M|    items[0] = first;
  228|  53.5M|    items[1] = second;
  229|  53.5M|    if (maybe_tracked(first) || maybe_tracked(second)) {
  ------------------
  |  Branch (229:9): [True: 53.5M, False: 49.5k]
  |  Branch (229:33): [True: 11.0k, False: 38.4k]
  ------------------
  230|  53.5M|        _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|  53.5M|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|  53.5M|    }
  232|  53.5M|    return (PyObject *)op;
  233|  53.5M|}
PyTuple_FromArray:
  437|   531k|{
  438|   531k|    if (n == 0) {
  ------------------
  |  Branch (438:9): [True: 254k, False: 276k]
  ------------------
  439|   254k|        return tuple_get_empty();
  440|   254k|    }
  441|       |
  442|   276k|    PyTupleObject *tuple = tuple_alloc(n);
  443|   276k|    if (tuple == NULL) {
  ------------------
  |  Branch (443:9): [True: 0, False: 276k]
  ------------------
  444|      0|        return NULL;
  445|      0|    }
  446|   276k|    PyObject **dst = tuple->ob_item;
  447|   276k|    bool track = false;
  448|  1.14M|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (448:28): [True: 866k, False: 276k]
  ------------------
  449|   866k|        PyObject *item = src[i];
  450|   866k|        if (!track && maybe_tracked(item)) {
  ------------------
  |  Branch (450:13): [True: 545k, False: 320k]
  |  Branch (450:23): [True: 78.8k, False: 466k]
  ------------------
  451|  78.8k|            track = true;
  452|  78.8k|        }
  453|   866k|        dst[i] = Py_NewRef(item);
  ------------------
  |  |  550|   866k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   866k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   866k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|   866k|    }
  455|   276k|    if (track) {
  ------------------
  |  Branch (455:9): [True: 78.8k, False: 197k]
  ------------------
  456|  78.8k|        _PyObject_GC_TRACK(tuple);
  ------------------
  |  |  505|  78.8k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  78.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  78.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|  78.8k|    }
  458|   276k|    return (PyObject *)tuple;
  459|   276k|}
_PyTuple_FromStackRefStealOnSuccess:
  463|   480k|{
  464|   480k|    if (n == 0) {
  ------------------
  |  Branch (464:9): [True: 0, False: 480k]
  ------------------
  465|      0|        return tuple_get_empty();
  466|      0|    }
  467|   480k|    PyTupleObject *tuple = tuple_alloc(n);
  468|   480k|    if (tuple == NULL) {
  ------------------
  |  Branch (468:9): [True: 0, False: 480k]
  ------------------
  469|      0|        return NULL;
  470|      0|    }
  471|   480k|    PyObject **dst = tuple->ob_item;
  472|   480k|    bool track = false;
  473|  1.43M|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (473:28): [True: 958k, False: 480k]
  ------------------
  474|   958k|        PyObject *item = PyStackRef_AsPyObjectSteal(src[i]);
  475|   958k|        if (!track && maybe_tracked(item)) {
  ------------------
  |  Branch (475:13): [True: 954k, False: 4.30k]
  |  Branch (475:23): [True: 21.6k, False: 932k]
  ------------------
  476|  21.6k|            track = true;
  477|  21.6k|        }
  478|   958k|        dst[i] = item;
  479|   958k|    }
  480|   480k|    if (track) {
  ------------------
  |  Branch (480:9): [True: 21.6k, False: 458k]
  ------------------
  481|  21.6k|        _PyObject_GC_TRACK(tuple);
  ------------------
  |  |  505|  21.6k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  482|  21.6k|    }
  483|   480k|    return (PyObject *)tuple;
  484|   480k|}
_PyTuple_FromArraySteal:
  488|  1.34k|{
  489|  1.34k|    if (n == 0) {
  ------------------
  |  Branch (489:9): [True: 0, False: 1.34k]
  ------------------
  490|      0|        return tuple_get_empty();
  491|      0|    }
  492|  1.34k|    PyTupleObject *tuple = tuple_alloc(n);
  493|  1.34k|    if (tuple == NULL) {
  ------------------
  |  Branch (493:9): [True: 0, False: 1.34k]
  ------------------
  494|      0|        for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (494:32): [True: 0, False: 0]
  ------------------
  495|      0|            Py_DECREF(src[i]);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  496|      0|        }
  497|      0|        return NULL;
  498|      0|    }
  499|  1.34k|    PyObject **dst = tuple->ob_item;
  500|  15.8k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (500:28): [True: 14.4k, False: 1.34k]
  ------------------
  501|  14.4k|        PyObject *item = src[i];
  502|  14.4k|        dst[i] = item;
  503|  14.4k|    }
  504|  1.34k|    _PyObject_GC_TRACK(tuple);
  ------------------
  |  |  505|  1.34k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  505|  1.34k|    return (PyObject *)tuple;
  506|  1.34k|}
PyTuple_GetSlice:
  545|  6.05k|{
  546|  6.05k|    if (op == NULL || !PyTuple_Check(op)) {
  ------------------
  |  |   27|  6.05k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  6.05k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (546:9): [True: 0, False: 6.05k]
  |  Branch (546:23): [True: 0, False: 6.05k]
  ------------------
  547|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  548|      0|        return NULL;
  549|      0|    }
  550|  6.05k|    return tuple_slice((PyTupleObject *)op, i, j);
  551|  6.05k|}
_PyTuple_Concat:
  555|  17.1k|{
  556|  17.1k|    PyTupleObject *a = _PyTuple_CAST(aa);
  ------------------
  |  |   19|  17.1k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  17.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (556:24): [True: 17.1k, False: 0]
  ------------------
  557|  17.1k|    if (Py_SIZE(a) == 0 && PyTuple_CheckExact(bb)) {
  ------------------
  |  |  214|  17.1k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  17.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_SIZE(a) == 0 && PyTuple_CheckExact(bb)) {
  ------------------
  |  |   28|  1.16k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  1.16k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.16k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.16k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.07k, False: 97]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (557:9): [True: 1.16k, False: 15.9k]
  ------------------
  558|  1.07k|        return Py_NewRef(bb);
  ------------------
  |  |  550|  1.07k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.07k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.07k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  559|  1.07k|    }
  560|  16.0k|    if (!PyTuple_Check(bb)) {
  ------------------
  |  |   27|  16.0k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  16.0k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (560:9): [True: 219, False: 15.8k]
  ------------------
  561|    219|        PyErr_Format(PyExc_TypeError,
  562|    219|             "can only concatenate tuple (not \"%.200s\") to tuple",
  563|    219|                 Py_TYPE(bb)->tp_name);
  ------------------
  |  |  213|    219|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    219|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    219|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|    219|        return NULL;
  565|    219|    }
  566|  15.8k|    PyTupleObject *b = (PyTupleObject *)bb;
  567|       |
  568|  15.8k|    if (Py_SIZE(b) == 0 && PyTuple_CheckExact(a)) {
  ------------------
  |  |  214|  15.8k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  15.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_SIZE(b) == 0 && PyTuple_CheckExact(a)) {
  ------------------
  |  |   28|    459|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|    459|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    459|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    459|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 459, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (568:9): [True: 459, False: 15.3k]
  ------------------
  569|    459|        return Py_NewRef(a);
  ------------------
  |  |  550|    459|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    459|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    459|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|    459|    }
  571|  15.8k|    assert((size_t)Py_SIZE(a) + (size_t)Py_SIZE(b) < PY_SSIZE_T_MAX);
  ------------------
  |  Branch (571:5): [True: 15.3k, False: 0]
  ------------------
  572|  15.3k|    Py_ssize_t size = Py_SIZE(a) + Py_SIZE(b);
  ------------------
  |  |  214|  15.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  15.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  Py_ssize_t size = Py_SIZE(a) + Py_SIZE(b);
  ------------------
  |  |  214|  15.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  15.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|  15.3k|    if (size == 0) {
  ------------------
  |  Branch (573:9): [True: 0, False: 15.3k]
  ------------------
  574|      0|        return tuple_get_empty();
  575|      0|    }
  576|       |
  577|  15.3k|    PyTupleObject *np = tuple_alloc(size);
  578|  15.3k|    if (np == NULL) {
  ------------------
  |  Branch (578:9): [True: 0, False: 15.3k]
  ------------------
  579|      0|        return NULL;
  580|      0|    }
  581|       |
  582|  15.3k|    PyObject **src = a->ob_item;
  583|  15.3k|    PyObject **dest = np->ob_item;
  584|   103M|    for (Py_ssize_t i = 0; i < Py_SIZE(a); i++) {
  ------------------
  |  |  214|   103M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   103M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   103M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (584:28): [True: 103M, False: 15.3k]
  ------------------
  585|   103M|        PyObject *v = src[i];
  586|   103M|        dest[i] = Py_NewRef(v);
  ------------------
  |  |  550|   103M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   103M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   103M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|   103M|    }
  588|       |
  589|  15.3k|    src = b->ob_item;
  590|  15.3k|    dest = np->ob_item + Py_SIZE(a);
  ------------------
  |  |  214|  15.3k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  15.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  591|  2.32M|    for (Py_ssize_t i = 0; i < Py_SIZE(b); i++) {
  ------------------
  |  |  214|  2.32M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.32M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.32M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (591:28): [True: 2.30M, False: 15.3k]
  ------------------
  592|  2.30M|        PyObject *v = src[i];
  593|  2.30M|        dest[i] = Py_NewRef(v);
  ------------------
  |  |  550|  2.30M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.30M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.30M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|  2.30M|    }
  595|       |
  596|  15.3k|    _PyObject_GC_TRACK(np);
  ------------------
  |  |  505|  15.3k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  597|  15.3k|    return (PyObject *)np;
  598|  15.3k|}
_PyTuple_Repeat:
  602|  30.6k|{
  603|  30.6k|    PyTupleObject *a = _PyTuple_CAST(self);
  ------------------
  |  |   19|  30.6k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  30.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (603:24): [True: 30.6k, False: 0]
  ------------------
  604|  30.6k|    const Py_ssize_t input_size = Py_SIZE(a);
  ------------------
  |  |  214|  30.6k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  30.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  30.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|  30.6k|    if (input_size == 0 || n == 1) {
  ------------------
  |  Branch (605:9): [True: 111, False: 30.4k]
  |  Branch (605:28): [True: 1.48k, False: 29.0k]
  ------------------
  606|  1.59k|        if (PyTuple_CheckExact(a)) {
  ------------------
  |  |   28|  1.59k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  1.59k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.59k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|       |            /* Since tuples are immutable, we can return a shared
  608|       |               copy in this case */
  609|  1.59k|            return Py_NewRef(a);
  ------------------
  |  |  550|  1.59k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|  1.59k|        }
  611|  1.59k|    }
  612|  29.0k|    if (input_size == 0 || n <= 0) {
  ------------------
  |  Branch (612:9): [True: 0, False: 29.0k]
  |  Branch (612:28): [True: 690, False: 28.3k]
  ------------------
  613|    690|        return tuple_get_empty();
  614|    690|    }
  615|  29.0k|    assert(n>0);
  ------------------
  |  Branch (615:5): [True: 28.3k, False: 0]
  ------------------
  616|       |
  617|  28.3k|    if (input_size > PY_SSIZE_T_MAX / n)
  ------------------
  |  |  137|  28.3k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (617:9): [True: 0, False: 28.3k]
  ------------------
  618|      0|        return PyErr_NoMemory();
  619|  28.3k|    Py_ssize_t output_size = input_size * n;
  620|       |
  621|  28.3k|    PyTupleObject *np = tuple_alloc(output_size);
  622|  28.3k|    if (np == NULL)
  ------------------
  |  Branch (622:9): [True: 0, False: 28.3k]
  ------------------
  623|      0|        return NULL;
  624|       |
  625|  28.3k|    PyObject **dest = np->ob_item;
  626|  28.3k|    if (input_size == 1) {
  ------------------
  |  Branch (626:9): [True: 5.34k, False: 22.9k]
  ------------------
  627|  5.34k|        PyObject *elem = a->ob_item[0];
  628|  5.34k|        _Py_RefcntAdd(elem, n);
  ------------------
  |  |  179|  5.34k|#define _Py_RefcntAdd(op, n) _Py_RefcntAdd(_PyObject_CAST(op), n)
  |  |  ------------------
  |  |  |  |  171|  5.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  629|  5.34k|        PyObject **dest_end = dest + output_size;
  630|  54.3k|        while (dest < dest_end) {
  ------------------
  |  Branch (630:16): [True: 49.0k, False: 5.34k]
  ------------------
  631|  49.0k|            *dest++ = elem;
  632|  49.0k|        }
  633|  5.34k|    }
  634|  22.9k|    else {
  635|  22.9k|        PyObject **src = a->ob_item;
  636|  22.9k|        PyObject **src_end = src + input_size;
  637|  75.0k|        while (src < src_end) {
  ------------------
  |  Branch (637:16): [True: 52.0k, False: 22.9k]
  ------------------
  638|  52.0k|            _Py_RefcntAdd(*src, n);
  ------------------
  |  |  179|  52.0k|#define _Py_RefcntAdd(op, n) _Py_RefcntAdd(_PyObject_CAST(op), n)
  |  |  ------------------
  |  |  |  |  171|  52.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  639|  52.0k|            *dest++ = *src++;
  640|  52.0k|        }
  641|       |
  642|  22.9k|        _Py_memory_repeat((char *)np->ob_item, sizeof(PyObject *)*output_size,
  643|  22.9k|                          sizeof(PyObject *)*input_size);
  644|  22.9k|    }
  645|  28.3k|    _PyObject_GC_TRACK(np);
  ------------------
  |  |  505|  28.3k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  28.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|  28.3k|    return (PyObject *) np;
  647|  28.3k|}
_PyTuple_Resize:
 1017|     35|{
 1018|     35|    PyTupleObject *v;
 1019|     35|    PyTupleObject *sv;
 1020|     35|    Py_ssize_t i;
 1021|     35|    Py_ssize_t oldsize;
 1022|       |
 1023|     35|    v = (PyTupleObject *) *pv;
 1024|     35|    if (v == NULL || !Py_IS_TYPE(v, &PyTuple_Type) ||
  ------------------
  |  |  215|     70|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1024:9): [True: 0, False: 35]
  |  Branch (1024:22): [True: 0, False: 35]
  ------------------
 1025|     35|        (Py_SIZE(v) != 0 && !_PyObject_IsUniquelyReferenced(*pv))) {
  ------------------
  |  |  214|     35|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1025:10): [True: 35, False: 0]
  |  Branch (1025:29): [True: 0, False: 35]
  ------------------
 1026|      0|        *pv = 0;
 1027|      0|        Py_XDECREF(v);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1028|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1029|      0|        return -1;
 1030|      0|    }
 1031|       |
 1032|     35|    oldsize = Py_SIZE(v);
  ------------------
  |  |  214|     35|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     35|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     35|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|     35|    if (oldsize == newsize) {
  ------------------
  |  Branch (1033:9): [True: 33, False: 2]
  ------------------
 1034|     33|        return 0;
 1035|     33|    }
 1036|      2|    if (newsize == 0) {
  ------------------
  |  Branch (1036:9): [True: 0, False: 2]
  ------------------
 1037|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|      0|        *pv = tuple_get_empty();
 1039|      0|        return 0;
 1040|      0|    }
 1041|      2|    if (oldsize == 0) {
  ------------------
  |  Branch (1041:9): [True: 0, False: 2]
  ------------------
 1042|       |#ifdef Py_DEBUG
 1043|       |        assert(v == &_Py_SINGLETON(tuple_empty));
 1044|       |#endif
 1045|       |        /* The empty tuple is statically allocated so we never
 1046|       |           resize it in-place. */
 1047|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|      0|        *pv = PyTuple_New(newsize);
 1049|      0|        return *pv == NULL ? -1 : 0;
  ------------------
  |  Branch (1049:16): [True: 0, False: 0]
  ------------------
 1050|      0|    }
 1051|       |
 1052|      2|    if (_PyObject_GC_IS_TRACKED(v)) {
  ------------------
  |  |   81|      2|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 2, False: 0]
  |  |  ------------------
  ------------------
 1053|      2|        _PyObject_GC_UNTRACK(v);
  ------------------
  |  |  507|      2|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|      2|    }
 1055|       |#ifdef Py_TRACE_REFS
 1056|       |    _Py_ForgetReference((PyObject *) v);
 1057|       |#endif
 1058|       |    /* DECREF items deleted by shrinkage */
 1059|      8|    for (i = newsize; i < oldsize; i++) {
  ------------------
  |  Branch (1059:23): [True: 6, False: 2]
  ------------------
 1060|      6|        Py_CLEAR(v->ob_item[i]);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 6]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 1061|      6|    }
 1062|      2|    _PyReftracerTrack((PyObject *)v, PyRefTracer_DESTROY);
  ------------------
  |  |  112|      2|    do { \
  |  |  113|      2|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|      2|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1063|      2|    sv = PyObject_GC_Resize(PyTupleObject, v, newsize);
  ------------------
  |  |  161|      2|                ( (type *) _PyObject_GC_Resize(_PyVarObject_CAST(op), (n)) )
  |  |  ------------------
  |  |  |  |  182|      2|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1064|      2|    if (sv == NULL) {
  ------------------
  |  Branch (1064:9): [True: 0, False: 2]
  ------------------
 1065|      0|        *pv = NULL;
 1066|       |#ifdef Py_REF_DEBUG
 1067|       |        _Py_DecRefTotal(_PyThreadState_GET());
 1068|       |#endif
 1069|      0|        PyObject_GC_Del(v);
 1070|      0|        return -1;
 1071|      0|    }
 1072|      2|    _Py_NewReferenceNoTotal((PyObject *) sv);
 1073|       |    /* Zero out items added by growing */
 1074|      2|    if (newsize > oldsize)
  ------------------
  |  Branch (1074:9): [True: 0, False: 2]
  ------------------
 1075|      0|        memset(&sv->ob_item[oldsize], 0,
 1076|      0|               sizeof(*sv->ob_item) * (newsize - oldsize));
 1077|      2|    *pv = (PyObject *) sv;
 1078|      2|    _PyObject_GC_TRACK(sv);
  ------------------
  |  |  505|      2|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1079|      2|    return 0;
 1080|      2|}
tupleobject.c:tuple_get_empty:
   70|   532k|{
   71|   532k|    return (PyObject *)&_Py_SINGLETON(tuple_empty);
  ------------------
  |  |   18|   532k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|   532k|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
   72|   532k|}
tupleobject.c:tuple_alloc:
   38|  55.0M|{
   39|  55.0M|    if (size < 0) {
  ------------------
  |  Branch (39:9): [True: 0, False: 55.0M]
  ------------------
   40|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
   41|      0|        return NULL;
   42|      0|    }
   43|  55.0M|    assert(size != 0);    // The empty tuple is statically allocated.
  ------------------
  |  Branch (43:5): [True: 55.0M, False: 0]
  ------------------
   44|  55.0M|    Py_ssize_t index = size - 1;
   45|  55.0M|    if (index < PyTuple_MAXSAVESIZE) {
  ------------------
  |  |   11|  55.0M|#  define PyTuple_MAXSAVESIZE 20     // Largest tuple to save on freelist
  ------------------
  |  Branch (45:9): [True: 54.9M, False: 84.4k]
  ------------------
   46|  54.9M|        PyTupleObject *op = _Py_FREELIST_POP(PyTupleObject, tuples[index]);
  ------------------
  |  |   43|  54.9M|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   47|  54.9M|        if (op != NULL) {
  ------------------
  |  Branch (47:13): [True: 6.36M, False: 48.5M]
  ------------------
   48|  6.36M|            _PyTuple_RESET_HASH_CACHE(op);
  ------------------
  |  |   44|  6.36M|    do {                                    \
  |  |   45|  6.36M|        assert(op != NULL);                 \
  |  |   46|  12.7M|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|  6.36M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.36M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  12.7M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 6.36M]
  |  |  ------------------
  ------------------
  |  Branch (48:13): [True: 6.36M, False: 0]
  |  Branch (48:13): [True: 6.36M, False: 0]
  ------------------
   49|  6.36M|            return op;
   50|  6.36M|        }
   51|  54.9M|    }
   52|       |    /* Check for overflow */
   53|  48.6M|    if ((size_t)size > ((size_t)PY_SSIZE_T_MAX - (sizeof(PyTupleObject) -
  ------------------
  |  |  137|  48.6M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (53:9): [True: 0, False: 48.6M]
  ------------------
   54|  48.6M|                sizeof(PyObject *))) / sizeof(PyObject *)) {
   55|      0|        return (PyTupleObject *)PyErr_NoMemory();
   56|      0|    }
   57|  48.6M|    PyTupleObject *result = PyObject_GC_NewVar(PyTupleObject, &PyTuple_Type, size);
  ------------------
  |  |  183|  48.6M|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|  48.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   58|  48.6M|    if (result != NULL) {
  ------------------
  |  Branch (58:9): [True: 48.6M, False: 0]
  ------------------
   59|  48.6M|        _PyTuple_RESET_HASH_CACHE(result);
  ------------------
  |  |   44|  48.6M|    do {                                    \
  |  |   45|  48.6M|        assert(op != NULL);                 \
  |  |   46|  97.2M|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|  48.6M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  97.2M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 48.6M]
  |  |  ------------------
  ------------------
  |  Branch (59:9): [True: 48.6M, False: 0]
  |  Branch (59:9): [True: 48.6M, False: 0]
  ------------------
   60|  48.6M|    }
   61|  48.6M|    return result;
   62|  48.6M|}
tupleobject.c:maybe_tracked:
  167|  55.2M|{
  168|  55.2M|    return _PyType_IS_GC(Py_TYPE(ob));
  ------------------
  |  |  820|  55.2M|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  55.2M|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  ------------------
  169|  55.2M|}
tupleobject.c:tuple_slice:
  511|  6.05k|{
  512|  6.05k|    if (ilow < 0)
  ------------------
  |  Branch (512:9): [True: 0, False: 6.05k]
  ------------------
  513|      0|        ilow = 0;
  514|  6.05k|    if (ihigh > Py_SIZE(a))
  ------------------
  |  |  214|  6.05k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.05k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.05k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (514:9): [True: 0, False: 6.05k]
  ------------------
  515|      0|        ihigh = Py_SIZE(a);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|  6.05k|    if (ihigh < ilow)
  ------------------
  |  Branch (516:9): [True: 0, False: 6.05k]
  ------------------
  517|      0|        ihigh = ilow;
  518|  6.05k|    if (ilow == 0 && ihigh == Py_SIZE(a) && PyTuple_CheckExact(a)) {
  ------------------
  |  |  214|  11.5k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (ilow == 0 && ihigh == Py_SIZE(a) && PyTuple_CheckExact(a)) {
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (518:9): [True: 5.54k, False: 516]
  |  Branch (518:22): [True: 0, False: 5.54k]
  ------------------
  519|      0|        return Py_NewRef(a);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      0|    }
  521|  6.05k|    return PyTuple_FromArray(a->ob_item + ilow, ihigh - ilow);
  522|  6.05k|}
tupleobject.c:tuple_dealloc:
  256|  54.9M|{
  257|  54.9M|    PyTupleObject *op = _PyTuple_CAST(self);
  ------------------
  |  |   19|  54.9M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (257:25): [True: 54.9M, False: 0]
  ------------------
  258|  54.9M|    if (Py_SIZE(op) == 0) {
  ------------------
  |  |  214|  54.9M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  54.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (258:9): [True: 0, False: 54.9M]
  ------------------
  259|       |        /* The empty tuple is statically allocated. */
  260|      0|        if (op == &_Py_SINGLETON(tuple_empty)) {
  ------------------
  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
  |  Branch (260:13): [True: 0, False: 0]
  ------------------
  261|       |#ifdef Py_DEBUG
  262|       |            _Py_FatalRefcountError("deallocating the empty tuple singleton");
  263|       |#else
  264|      0|            return;
  265|      0|#endif
  266|      0|        }
  267|       |#ifdef Py_DEBUG
  268|       |        /* tuple subclasses have their own empty instances. */
  269|       |        assert(!PyTuple_CheckExact(op));
  270|       |#endif
  271|      0|    }
  272|       |
  273|  54.9M|    PyObject_GC_UnTrack(op);
  274|       |
  275|  54.9M|    Py_ssize_t i = Py_SIZE(op);
  ------------------
  |  |  214|  54.9M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  54.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|   389M|    while (--i >= 0) {
  ------------------
  |  Branch (276:12): [True: 334M, False: 54.9M]
  ------------------
  277|   334M|        Py_XDECREF(op->ob_item[i]);
  ------------------
  |  |  524|   334M|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   334M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   334M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|   334M|    }
  279|       |    // This will abort on the empty singleton (if there is one).
  280|  54.9M|    if (!maybe_freelist_push(op)) {
  ------------------
  |  Branch (280:9): [True: 48.6M, False: 6.37M]
  ------------------
  281|  48.6M|        Py_TYPE(op)->tp_free((PyObject *)op);
  ------------------
  |  |  213|  48.6M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  48.6M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|  48.6M|    }
  283|  54.9M|}
tupleobject.c:tuple_length:
  408|  12.7k|{
  409|  12.7k|    PyTupleObject *a = _PyTuple_CAST(self);
  ------------------
  |  |   19|  12.7k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  12.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (409:24): [True: 12.7k, False: 0]
  ------------------
  410|  12.7k|    return Py_SIZE(a);
  ------------------
  |  |  214|  12.7k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  12.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|  12.7k|}
tupleobject.c:tuple_item:
  426|  1.27k|{
  427|  1.27k|    PyTupleObject *a = _PyTuple_CAST(op);
  ------------------
  |  |   19|  1.27k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (427:24): [True: 1.27k, False: 0]
  ------------------
  428|  1.27k|    if (i < 0 || i >= Py_SIZE(a)) {
  ------------------
  |  |  214|  1.00k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (428:9): [True: 270, False: 1.00k]
  |  Branch (428:18): [True: 913, False: 87]
  ------------------
  429|  1.18k|        PyErr_SetString(PyExc_IndexError, "tuple index out of range");
  430|  1.18k|        return NULL;
  431|  1.18k|    }
  432|     87|    return Py_NewRef(a->ob_item[i]);
  ------------------
  |  |  550|     87|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     87|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     87|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|  1.27k|}
tupleobject.c:tuple_contains:
  415|   319k|{
  416|   319k|    PyTupleObject *a = _PyTuple_CAST(self);
  ------------------
  |  |   19|   319k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   319k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (416:24): [True: 319k, False: 0]
  ------------------
  417|      0|    int cmp = 0;
  418|   939k|    for (Py_ssize_t i = 0; cmp == 0 && i < Py_SIZE(a); ++i) {
  ------------------
  |  |  214|   917k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   917k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   917k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (418:28): [True: 917k, False: 21.8k]
  |  Branch (418:40): [True: 619k, False: 297k]
  ------------------
  419|   619k|        cmp = PyObject_RichCompareBool(PyTuple_GET_ITEM(a, i), el, Py_EQ);
  ------------------
  |  |   29|   619k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   619k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   619k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      cmp = PyObject_RichCompareBool(PyTuple_GET_ITEM(a, i), el, Py_EQ);
  ------------------
  |  |  654|   619k|#define Py_EQ 2
  ------------------
  |  Branch (419:40): [True: 619k, False: 0]
  ------------------
  420|   619k|    }
  421|   319k|    return cmp;
  422|   319k|}
tupleobject.c:tuple_subscript:
  872|  2.28k|{
  873|  2.28k|    PyTupleObject *self = _PyTuple_CAST(op);
  ------------------
  |  |   19|  2.28k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  2.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (873:27): [True: 2.28k, False: 0]
  ------------------
  874|  2.28k|    if (_PyIndex_Check(item)) {
  ------------------
  |  Branch (874:9): [True: 1.77k, False: 510]
  ------------------
  875|  1.77k|        Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
  876|  1.77k|        if (i == -1 && PyErr_Occurred())
  ------------------
  |  Branch (876:13): [True: 545, False: 1.22k]
  |  Branch (876:24): [True: 502, False: 43]
  ------------------
  877|    502|            return NULL;
  878|  1.27k|        if (i < 0)
  ------------------
  |  Branch (878:13): [True: 305, False: 965]
  ------------------
  879|    305|            i += PyTuple_GET_SIZE(self);
  ------------------
  |  |   27|    305|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    305|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    305|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|  1.27k|        return tuple_item(op, i);
  881|  1.77k|    }
  882|    510|    else if (PySlice_Check(item)) {
  ------------------
  |  |   22|    510|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|    510|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    510|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    510|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 390, False: 120]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  883|    390|        Py_ssize_t start, stop, step, slicelength, i;
  884|    390|        size_t cur;
  885|    390|        PyObject* it;
  886|    390|        PyObject **src, **dest;
  887|       |
  888|    390|        if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (888:13): [True: 7, False: 383]
  ------------------
  889|      7|            return NULL;
  890|      7|        }
  891|    383|        slicelength = PySlice_AdjustIndices(PyTuple_GET_SIZE(self), &start,
  ------------------
  |  |   27|    383|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    383|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    383|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  892|    383|                                            &stop, step);
  893|       |
  894|    383|        if (slicelength <= 0) {
  ------------------
  |  Branch (894:13): [True: 17, False: 366]
  ------------------
  895|     17|            return tuple_get_empty();
  896|     17|        }
  897|    366|        else if (start == 0 && step == 1 &&
  ------------------
  |  Branch (897:18): [True: 353, False: 13]
  |  Branch (897:32): [True: 323, False: 30]
  ------------------
  898|    323|                 slicelength == PyTuple_GET_SIZE(self) &&
  ------------------
  |  |   27|    689|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    323|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    323|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (898:18): [True: 317, False: 6]
  ------------------
  899|    317|                 PyTuple_CheckExact(self)) {
  ------------------
  |  |   28|    317|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|    317|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 317, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  900|    317|            return Py_NewRef(self);
  ------------------
  |  |  550|    317|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    317|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    317|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  901|    317|        }
  902|     49|        else {
  903|     49|            PyTupleObject* result = tuple_alloc(slicelength);
  904|     49|            if (!result) return NULL;
  ------------------
  |  Branch (904:17): [True: 0, False: 49]
  ------------------
  905|       |
  906|     49|            src = self->ob_item;
  907|     49|            dest = result->ob_item;
  908|    151|            for (cur = start, i = 0; i < slicelength;
  ------------------
  |  Branch (908:38): [True: 102, False: 49]
  ------------------
  909|    102|                 cur += step, i++) {
  910|    102|                it = Py_NewRef(src[cur]);
  ------------------
  |  |  550|    102|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|    102|                dest[i] = it;
  912|    102|            }
  913|       |
  914|     49|            _PyObject_GC_TRACK(result);
  ------------------
  |  |  505|     49|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     49|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     49|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  915|     49|            return (PyObject *)result;
  916|     49|        }
  917|    383|    }
  918|    120|    else {
  919|    120|        PyErr_Format(PyExc_TypeError,
  920|    120|                     "tuple indices must be integers or slices, not %.200s",
  921|    120|                     Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|    120|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    120|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    120|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  922|       |        return NULL;
  923|    120|    }
  924|  2.28k|}
tupleobject.c:tuple_hash:
  373|  55.5M|{
  374|  55.5M|    PyTupleObject *v = _PyTuple_CAST(op);
  ------------------
  |  |   19|  55.5M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  55.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (374:24): [True: 55.5M, False: 0]
  ------------------
  375|       |
  376|  55.5M|    Py_uhash_t acc = FT_ATOMIC_LOAD_SSIZE_RELAXED(v->ob_hash);
  ------------------
  |  |  149|  55.5M|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
  377|  55.5M|    if (acc != (Py_uhash_t)-1) {
  ------------------
  |  Branch (377:9): [True: 1.44M, False: 54.0M]
  ------------------
  378|  1.44M|        return acc;
  379|  1.44M|    }
  380|       |
  381|  54.0M|    Py_ssize_t len = Py_SIZE(v);
  ------------------
  |  |  214|  54.0M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  54.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  382|  54.0M|    PyObject **item = v->ob_item;
  383|  54.0M|    acc = _PyTuple_HASH_XXPRIME_5;
  ------------------
  |  |   69|  54.0M|#define _PyTuple_HASH_XXPRIME_5 ((Py_uhash_t)2870177450012600261ULL)
  ------------------
  384|   385M|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (384:28): [True: 331M, False: 54.0M]
  ------------------
  385|   331M|        Py_uhash_t lane = PyObject_Hash(item[i]);
  386|   331M|        if (lane == (Py_uhash_t)-1) {
  ------------------
  |  Branch (386:13): [True: 0, False: 331M]
  ------------------
  387|      0|            return -1;
  388|      0|        }
  389|   331M|        acc += lane * _PyTuple_HASH_XXPRIME_2;
  ------------------
  |  |   68|   331M|#define _PyTuple_HASH_XXPRIME_2 ((Py_uhash_t)14029467366897019727ULL)
  ------------------
  390|   331M|        acc = _PyTuple_HASH_XXROTATE(acc);
  ------------------
  |  |   70|   331M|#define _PyTuple_HASH_XXROTATE(x) ((x << 31) | (x >> 33))  /* Rotate left 31 bits */
  ------------------
  391|   331M|        acc *= _PyTuple_HASH_XXPRIME_1;
  ------------------
  |  |   67|   331M|#define _PyTuple_HASH_XXPRIME_1 ((Py_uhash_t)11400714785074694791ULL)
  ------------------
  392|   331M|    }
  393|       |
  394|       |    /* Add input length, mangled to keep the historical value of hash(()). */
  395|  54.0M|    acc += len ^ (_PyTuple_HASH_XXPRIME_5 ^ 3527539UL);
  ------------------
  |  |   69|  54.0M|#define _PyTuple_HASH_XXPRIME_5 ((Py_uhash_t)2870177450012600261ULL)
  ------------------
  396|       |
  397|  54.0M|    if (acc == (Py_uhash_t)-1) {
  ------------------
  |  Branch (397:9): [True: 0, False: 54.0M]
  ------------------
  398|      0|        acc = 1546275796;
  399|      0|    }
  400|       |
  401|  54.0M|    FT_ATOMIC_STORE_SSIZE_RELAXED(v->ob_hash, acc);
  ------------------
  |  |  194|  54.0M|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  402|       |
  403|  54.0M|    return acc;
  404|  54.0M|}
tupleobject.c:tuple_traverse:
  719|  93.4M|{
  720|  93.4M|    PyTupleObject *o = _PyTuple_CAST(self);
  ------------------
  |  |   19|  93.4M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  93.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (720:24): [True: 93.4M, False: 0]
  ------------------
  721|   849M|    for (Py_ssize_t i = Py_SIZE(o); --i >= 0; ) {
  ------------------
  |  |  214|  93.4M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  93.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  93.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (721:37): [True: 756M, False: 93.4M]
  ------------------
  722|   756M|        Py_VISIT(o->ob_item[i]);
  ------------------
  |  |  194|   756M|    do {                                                                \
  |  |  195|   756M|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 756M, False: 0]
  |  |  ------------------
  |  |  196|   756M|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|   756M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   756M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|   756M|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 756M]
  |  |  ------------------
  |  |  198|   756M|                return vret;                                            \
  |  |  199|   756M|        }                                                               \
  |  |  200|   756M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 756M]
  |  |  ------------------
  ------------------
  723|   756M|    }
  724|  93.4M|    return 0;
  725|  93.4M|}
tupleobject.c:tuple_richcompare:
  729|  5.54M|{
  730|  5.54M|    PyTupleObject *vt, *wt;
  731|  5.54M|    Py_ssize_t i;
  732|  5.54M|    Py_ssize_t vlen, wlen;
  733|       |
  734|  5.54M|    if (!PyTuple_Check(v) || !PyTuple_Check(w))
  ------------------
  |  |   27|  5.54M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  11.0M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyTuple_Check(v) || !PyTuple_Check(w))
  ------------------
  |  |   27|  5.54M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  5.54M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (734:9): [True: 0, False: 5.54M]
  |  Branch (734:30): [True: 0, False: 5.54M]
  ------------------
  735|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  736|       |
  737|  5.54M|    vt = (PyTupleObject *)v;
  738|  5.54M|    wt = (PyTupleObject *)w;
  739|       |
  740|  5.54M|    vlen = Py_SIZE(vt);
  ------------------
  |  |  214|  5.54M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.54M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|  5.54M|    wlen = Py_SIZE(wt);
  ------------------
  |  |  214|  5.54M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.54M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.54M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  742|       |
  743|       |    /* Note:  the corresponding code for lists has an "early out" test
  744|       |     * here when op is EQ or NE and the lengths differ.  That pays there,
  745|       |     * but Tim was unable to find any real code where EQ/NE tuple
  746|       |     * compares don't have the same length, so testing for it here would
  747|       |     * have cost without benefit.
  748|       |     */
  749|       |
  750|       |    /* Search for the first index where items are different.
  751|       |     * Note that because tuples are immutable, it's safe to reuse
  752|       |     * vlen and wlen across the comparison calls.
  753|       |     */
  754|  34.1M|    for (i = 0; i < vlen && i < wlen; i++) {
  ------------------
  |  Branch (754:17): [True: 28.6M, False: 5.54M]
  |  Branch (754:29): [True: 28.6M, False: 0]
  ------------------
  755|  28.6M|        int k = PyObject_RichCompareBool(vt->ob_item[i],
  756|  28.6M|                                         wt->ob_item[i], Py_EQ);
  ------------------
  |  |  654|  28.6M|#define Py_EQ 2
  ------------------
  757|  28.6M|        if (k < 0)
  ------------------
  |  Branch (757:13): [True: 0, False: 28.6M]
  ------------------
  758|      0|            return NULL;
  759|  28.6M|        if (!k)
  ------------------
  |  Branch (759:13): [True: 1.27k, False: 28.6M]
  ------------------
  760|  1.27k|            break;
  761|  28.6M|    }
  762|       |
  763|  5.54M|    if (i >= vlen || i >= wlen) {
  ------------------
  |  Branch (763:9): [True: 5.54M, False: 1.27k]
  |  Branch (763:22): [True: 0, False: 1.27k]
  ------------------
  764|       |        /* No more items to compare -- compare sizes */
  765|  5.54M|        Py_RETURN_RICHCOMPARE(vlen, wlen, op);
  ------------------
  |  |  674|  5.54M|    do {                                                                    \
  |  |  675|  5.54M|        switch (op) {                                                       \
  |  |  676|  5.54M|        case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  654|  5.54M|#define Py_EQ 2
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|  5.54M|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  5.54M|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  5.54M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  5.54M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (676:9): [True: 5.54M, False: 0]
  |  |  |  Branch (676:25): [True: 5.54M, False: 0]
  |  |  ------------------
  |  |  677|  5.54M|        case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  655|      0|#define Py_NE 3
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (677:9): [True: 0, False: 5.54M]
  |  |  |  Branch (677:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  678|      0|        case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  652|      0|#define Py_LT 0
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (678:9): [True: 0, False: 5.54M]
  |  |  |  Branch (678:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  679|      0|        case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  656|      0|#define Py_GT 4
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (679:9): [True: 0, False: 5.54M]
  |  |  |  Branch (679:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  680|      0|        case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  653|      0|#define Py_LE 1
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (680:9): [True: 0, False: 5.54M]
  |  |  |  Branch (680:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  681|      0|        case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  657|      0|#define Py_GE 5
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (681:9): [True: 0, False: 5.54M]
  |  |  |  Branch (681:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  682|      0|        default:                                                            \
  |  |  ------------------
  |  |  |  Branch (682:9): [True: 0, False: 5.54M]
  |  |  ------------------
  |  |  683|      0|            Py_UNREACHABLE();                                               \
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |  684|  5.54M|        }                                                                   \
  |  |  685|  5.54M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (685:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  766|  5.54M|    }
  767|       |
  768|       |    /* We have an item that differs -- shortcuts for EQ/NE */
  769|  1.27k|    if (op == Py_EQ) {
  ------------------
  |  |  654|  1.27k|#define Py_EQ 2
  ------------------
  |  Branch (769:9): [True: 1.27k, False: 3]
  ------------------
  770|  1.27k|        Py_RETURN_FALSE;
  ------------------
  |  |   45|  1.27k|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|  1.27k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.27k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|  1.27k|    }
  772|      3|    if (op == Py_NE) {
  ------------------
  |  |  655|      3|#define Py_NE 3
  ------------------
  |  Branch (772:9): [True: 3, False: 0]
  ------------------
  773|      3|        Py_RETURN_TRUE;
  ------------------
  |  |   44|      3|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      3|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  774|      3|    }
  775|       |
  776|       |    /* Compare the final item again using the proper operator */
  777|      0|    return PyObject_RichCompare(vt->ob_item[i], wt->ob_item[i], op);
  778|      3|}
tupleobject.c:tuple_new_impl:
  801|    310|{
  802|    310|    if (type != &PyTuple_Type)
  ------------------
  |  Branch (802:9): [True: 153, False: 157]
  ------------------
  803|    153|        return tuple_subtype_new(type, iterable);
  804|       |
  805|    157|    if (iterable == NULL) {
  ------------------
  |  Branch (805:9): [True: 0, False: 157]
  ------------------
  806|      0|        return tuple_get_empty();
  807|      0|    }
  808|    157|    else {
  809|    157|        return PySequence_Tuple(iterable);
  810|    157|    }
  811|    157|}
tupleobject.c:tuple_subtype_new:
  815|    153|{
  816|    153|    PyObject *tmp, *newobj, *item;
  817|    153|    Py_ssize_t i, n;
  818|       |
  819|    153|    assert(PyType_IsSubtype(type, &PyTuple_Type));
  ------------------
  |  Branch (819:5): [True: 153, False: 0]
  ------------------
  820|       |    // tuple subclasses must implement the GC protocol
  821|    153|    assert(_PyType_IS_GC(type));
  ------------------
  |  Branch (821:5): [True: 153, False: 0]
  ------------------
  822|       |
  823|    153|    tmp = tuple_new_impl(&PyTuple_Type, iterable);
  824|    153|    if (tmp == NULL)
  ------------------
  |  Branch (824:9): [True: 0, False: 153]
  ------------------
  825|      0|        return NULL;
  826|    153|    assert(PyTuple_Check(tmp));
  ------------------
  |  Branch (826:5): [True: 153, False: 0]
  ------------------
  827|       |    /* This may allocate an empty tuple that is not the global one. */
  828|    153|    newobj = type->tp_alloc(type, n = PyTuple_GET_SIZE(tmp));
  ------------------
  |  |   27|    153|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    153|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  829|    153|    if (newobj == NULL) {
  ------------------
  |  Branch (829:9): [True: 0, False: 153]
  ------------------
  830|      0|        Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  831|      0|        return NULL;
  832|      0|    }
  833|    765|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (833:17): [True: 612, False: 153]
  ------------------
  834|    612|        item = PyTuple_GET_ITEM(tmp, i);
  ------------------
  |  |   29|    612|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    612|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    612|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (834:16): [True: 612, False: 0]
  ------------------
  835|    612|        PyTuple_SET_ITEM(newobj, i, Py_NewRef(item));
  ------------------
  |  |   40|    612|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    612|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    612|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    612|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    612|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  836|    612|    }
  837|    153|    Py_DECREF(tmp);
  ------------------
  |  |  430|    153|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    153|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  838|       |
  839|    153|    _PyTuple_RESET_HASH_CACHE(newobj);
  ------------------
  |  |   44|    153|    do {                                    \
  |  |   45|    153|        assert(op != NULL);                 \
  |  |   46|    306|        _PyTuple_CAST(op)->ob_hash = -1;    \
  |  |  ------------------
  |  |  |  |   19|    153|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|    306|    } while (0)
  |  |  ------------------
  |  |  |  Branch (47:14): [Folded, False: 153]
  |  |  ------------------
  ------------------
  |  Branch (839:5): [True: 153, False: 0]
  |  Branch (839:5): [True: 153, False: 0]
  ------------------
  840|       |
  841|       |    // Don't track if a subclass tp_alloc is PyType_GenericAlloc()
  842|    153|    if (!_PyObject_GC_IS_TRACKED(newobj)) {
  ------------------
  |  |   81|    153|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (842:9): [True: 0, False: 153]
  ------------------
  843|      0|        _PyObject_GC_TRACK(newobj);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  844|      0|    }
  845|    153|    return newobj;
  846|    153|}
tupleobject.c:tuple_iteritem:
  861|     51|{
  862|     51|    if (index >= PyTuple_GET_SIZE(obj)) {
  ------------------
  |  |   27|     51|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (862:9): [True: 6, False: 45]
  ------------------
  863|      6|        return (_PyObjectIndexPair) { .object = NULL, .index = index };
  864|      6|    }
  865|     45|    PyObject *result = PyTuple_GET_ITEM(obj, index);
  ------------------
  |  |   29|     45|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     45|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (865:24): [True: 45, False: 0]
  ------------------
  866|     45|    Py_INCREF(result);
  ------------------
  |  |  310|     45|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  867|     45|    return (_PyObjectIndexPair) { .object = result, .index = index + 1 };
  868|     45|}
tupleobject.c:tupleiter_dealloc:
 1088|  9.82k|{
 1089|  9.82k|    _PyTupleIterObject *it = _PyTupleIterObject_CAST(self);
  ------------------
  |  | 1084|  9.82k|#define _PyTupleIterObject_CAST(op) ((_PyTupleIterObject *)(op))
  ------------------
 1090|  9.82k|    _PyObject_GC_UNTRACK(it);
  ------------------
  |  |  507|  9.82k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1091|  9.82k|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|  9.82k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1092|  9.82k|    assert(Py_IS_TYPE(self, &PyTupleIter_Type));
  ------------------
  |  Branch (1092:5): [True: 9.82k, False: 0]
  ------------------
 1093|  9.82k|    _Py_FREELIST_FREE(tuple_iters, it, PyObject_GC_Del);
  ------------------
  |  |   35|  9.82k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  9.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  9.82k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   15|  9.82k|#  define Py_tuple_iters_MAXFREELIST 10
  |  |  ------------------
  ------------------
 1094|  9.82k|}
tupleobject.c:tupleiter_next:
 1106|  54.6k|{
 1107|  54.6k|    _PyTupleIterObject *it = _PyTupleIterObject_CAST(self);
  ------------------
  |  | 1084|  54.6k|#define _PyTupleIterObject_CAST(op) ((_PyTupleIterObject *)(op))
  ------------------
 1108|  54.6k|    PyTupleObject *seq;
 1109|  54.6k|    PyObject *item;
 1110|       |
 1111|  54.6k|    assert(it != NULL);
  ------------------
  |  Branch (1111:5): [True: 54.6k, False: 0]
  ------------------
 1112|  54.6k|    seq = it->it_seq;
 1113|  54.6k|#ifndef Py_GIL_DISABLED
 1114|  54.6k|    if (seq == NULL)
  ------------------
  |  Branch (1114:9): [True: 0, False: 54.6k]
  ------------------
 1115|      0|        return NULL;
 1116|  54.6k|#endif
 1117|  54.6k|    assert(PyTuple_Check(seq));
  ------------------
  |  Branch (1117:5): [True: 54.6k, False: 0]
  ------------------
 1118|       |
 1119|  54.6k|    Py_ssize_t index = FT_ATOMIC_LOAD_SSIZE_RELAXED(it->it_index);
  ------------------
  |  |  149|  54.6k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
 1120|  54.6k|    if (index < PyTuple_GET_SIZE(seq)) {
  ------------------
  |  |   27|  54.6k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1120:9): [True: 44.8k, False: 9.82k]
  ------------------
 1121|  44.8k|        FT_ATOMIC_STORE_SSIZE_RELAXED(it->it_index, index + 1);
  ------------------
  |  |  194|  44.8k|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
 1122|  44.8k|        item = PyTuple_GET_ITEM(seq, index);
  ------------------
  |  |   29|  44.8k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  44.8k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1122:16): [True: 44.8k, False: 0]
  ------------------
 1123|  44.8k|        return Py_NewRef(item);
  ------------------
  |  |  550|  44.8k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  44.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1124|  44.8k|    }
 1125|       |
 1126|  9.82k|#ifndef Py_GIL_DISABLED
 1127|  9.82k|    it->it_seq = NULL;
 1128|  9.82k|    Py_DECREF(seq);
  ------------------
  |  |  430|  9.82k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1129|  9.82k|#endif
 1130|       |    return NULL;
 1131|  54.6k|}
tupleobject.c:tuple_iter:
 1235|  9.82k|{
 1236|  9.82k|    if (!PyTuple_Check(seq)) {
  ------------------
  |  |   27|  9.82k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  9.82k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1236:9): [True: 0, False: 9.82k]
  ------------------
 1237|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1238|      0|        return NULL;
 1239|      0|    }
 1240|  9.82k|    _PyTupleIterObject *it = _Py_FREELIST_POP(_PyTupleIterObject, tuple_iters);
  ------------------
  |  |   43|  9.82k|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1241|  9.82k|    if (it == NULL) {
  ------------------
  |  Branch (1241:9): [True: 9, False: 9.81k]
  ------------------
 1242|      9|        it = PyObject_GC_New(_PyTupleIterObject, &PyTupleIter_Type);
  ------------------
  |  |  181|      9|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1243|      9|        if (it == NULL)
  ------------------
  |  Branch (1243:13): [True: 0, False: 9]
  ------------------
 1244|      0|            return NULL;
 1245|      9|    }
 1246|  9.82k|    it->it_index = 0;
 1247|  9.82k|    it->it_seq = (PyTupleObject *)Py_NewRef(seq);
  ------------------
  |  |  550|  9.82k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  9.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1248|  9.82k|    _PyObject_GC_TRACK(it);
  ------------------
  |  |  505|  9.82k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1249|  9.82k|    return (PyObject *)it;
 1250|  9.82k|}
tupleobject.c:maybe_freelist_push:
 1259|  54.9M|{
 1260|  54.9M|    if (!Py_IS_TYPE(op, &PyTuple_Type)) {
  ------------------
  |  |  215|  54.9M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  54.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1260:9): [True: 0, False: 54.9M]
  ------------------
 1261|      0|        return 0;
 1262|      0|    }
 1263|  54.9M|    Py_ssize_t index = Py_SIZE(op) - 1;
  ------------------
  |  |  214|  54.9M|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  54.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1264|  54.9M|    if (index < PyTuple_MAXSAVESIZE) {
  ------------------
  |  |   11|  54.9M|#  define PyTuple_MAXSAVESIZE 20     // Largest tuple to save on freelist
  ------------------
  |  Branch (1264:9): [True: 54.9M, False: 84.3k]
  ------------------
 1265|  54.9M|        return _Py_FREELIST_PUSH(tuples[index], op, Py_tuple_MAXFREELIST);
  ------------------
  |  |   39|  54.9M|    _PyFreeList_Push(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), limit)
  |  |  ------------------
  |  |  |  |  171|  54.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1266|  54.9M|    }
 1267|  84.3k|    return 0;
 1268|  54.9M|}

_PyStaticType_GetState:
  306|  1.89M|{
  307|  1.89M|    assert(self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN);
  ------------------
  |  Branch (307:5): [True: 1.89M, False: 0]
  ------------------
  308|  1.89M|    return managed_static_type_state_get(interp, self);
  309|  1.89M|}
_PyType_GetDict:
  543|  5.97M|{
  544|       |    /* It returns a borrowed reference. */
  545|  5.97M|    return lookup_tp_dict(self);
  546|  5.97M|}
PyType_GetDict:
  550|    113|{
  551|    113|    PyObject *dict = lookup_tp_dict(self);
  552|    113|    return _Py_XNewRef(dict);
  553|    113|}
_PyType_GetBases:
  590|     76|{
  591|     76|    PyObject *res;
  592|       |
  593|     76|    BEGIN_TYPE_LOCK();
  594|     76|    res = lookup_tp_bases(self);
  595|     76|    Py_INCREF(res);
  ------------------
  |  |  310|     76|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  596|     76|    END_TYPE_LOCK();
  597|       |
  598|     76|    return res;
  599|     76|}
_PyType_GetSubclasses:
  811|     58|{
  812|     58|    PyObject *list = PyList_New(0);
  813|     58|    if (list == NULL) {
  ------------------
  |  Branch (813:9): [True: 0, False: 58]
  ------------------
  814|      0|        return NULL;
  815|      0|    }
  816|       |
  817|       |    // The type lock protects tp_subclasses from being mutated while we
  818|       |    // iterate over it (e.g. by add_subclass() or by remove_subclass() when a
  819|       |    // subclass is deallocated).
  820|     58|    int res;
  821|     58|    BEGIN_TYPE_LOCK();
  822|     58|    res = get_subclasses_unlocked(self, list);
  823|     58|    END_TYPE_LOCK();
  824|       |
  825|     58|    if (res < 0) {
  ------------------
  |  Branch (825:9): [True: 0, False: 58]
  ------------------
  826|       |        Py_CLEAR(list);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  827|      0|    }
  828|     58|    return list;
  829|     58|}
_PyType_CheckConsistency:
  889|  3.48k|{
  890|  3.48k|#define CHECK(expr) \
  891|  3.48k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  892|       |
  893|  3.48k|    CHECK(!_PyObject_IsFreed((PyObject *)type));
  ------------------
  |  |  891|  3.48k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 3.48k]
  |  |  |  Branch (891:103): [Folded, False: 3.48k]
  |  |  ------------------
  ------------------
  894|       |
  895|  3.48k|    if (!(type->tp_flags & Py_TPFLAGS_READY)) {
  ------------------
  |  |  518|  3.48k|#define Py_TPFLAGS_READY (1UL << 12)
  ------------------
  |  Branch (895:9): [True: 902, False: 2.58k]
  ------------------
  896|       |        /* don't check static types before PyType_Ready() */
  897|    902|        return 1;
  898|    902|    }
  899|       |
  900|  2.58k|    CHECK(Py_REFCNT(type) >= 1);
  ------------------
  |  |  891|  2.58k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 2.58k]
  |  |  |  Branch (891:103): [Folded, False: 2.58k]
  |  |  ------------------
  ------------------
  901|  2.58k|    CHECK(PyType_Check(type));
  ------------------
  |  |  891|  2.58k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 2.58k]
  |  |  |  Branch (891:103): [Folded, False: 2.58k]
  |  |  ------------------
  ------------------
  902|       |
  903|  2.58k|    CHECK(!is_readying(type));
  ------------------
  |  |  891|  2.58k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 2.58k]
  |  |  |  Branch (891:103): [Folded, False: 2.58k]
  |  |  ------------------
  ------------------
  904|  2.58k|    CHECK(lookup_tp_dict(type) != NULL);
  ------------------
  |  |  891|  2.58k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 2.58k]
  |  |  |  Branch (891:103): [Folded, False: 2.58k]
  |  |  ------------------
  ------------------
  905|       |
  906|  2.58k|    if (type->tp_flags & Py_TPFLAGS_HAVE_GC) {
  ------------------
  |  |  524|  2.58k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (906:9): [True: 2.50k, False: 80]
  ------------------
  907|       |        // bpo-44263: tp_traverse is required if Py_TPFLAGS_HAVE_GC is set.
  908|       |        // Note: tp_clear is optional.
  909|  2.50k|        CHECK(type->tp_traverse != NULL);
  ------------------
  |  |  891|  2.50k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 2.50k]
  |  |  |  Branch (891:103): [Folded, False: 2.50k]
  |  |  ------------------
  ------------------
  910|  2.50k|    }
  911|       |
  912|  2.58k|    if (type->tp_flags & Py_TPFLAGS_DISALLOW_INSTANTIATION) {
  ------------------
  |  |  497|  2.58k|#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
  ------------------
  |  Branch (912:9): [True: 182, False: 2.40k]
  ------------------
  913|    182|        CHECK(type->tp_new == NULL);
  ------------------
  |  |  891|    182|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 182]
  |  |  |  Branch (891:103): [Folded, False: 182]
  |  |  ------------------
  ------------------
  914|    182|        CHECK(PyDict_Contains(lookup_tp_dict(type), &_Py_ID(__new__)) == 0);
  ------------------
  |  |  891|    182|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG((PyObject *)type, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (891:14): [True: 0, False: 182]
  |  |  |  Branch (891:103): [Folded, False: 182]
  |  |  ------------------
  ------------------
  915|    182|    }
  916|       |
  917|  2.58k|    return 1;
  918|  2.58k|#undef CHECK
  919|  2.58k|}
_PyType_GetDocFromInternalDoc:
  936|     24|{
  937|     24|    const char *doc = _PyType_DocWithoutSignature(name, internal_doc);
  938|       |
  939|     24|    if (!doc || *doc == '\0') {
  ------------------
  |  Branch (939:9): [True: 0, False: 24]
  |  Branch (939:17): [True: 0, False: 24]
  ------------------
  940|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  941|      0|    }
  942|       |
  943|     24|    return PyUnicode_FromString(doc);
  944|     24|}
_PyType_Modified_Unlocked:
 1131|  1.69k|{
 1132|       |    /* Invalidate any cached data for the specified type and all
 1133|       |       subclasses.  This function is called after the base
 1134|       |       classes, mro, or attributes of the type are altered.
 1135|       |
 1136|       |       Invariants:
 1137|       |
 1138|       |       - before tp_version_tag can be set on a type,
 1139|       |         it must first be set on all super types.
 1140|       |
 1141|       |       This function clears the tp_version_tag of a
 1142|       |       type (so it must first clear it on all subclasses).  The
 1143|       |       tp_version_tag value is meaningless when equal to zero.
 1144|       |       We don't assign new version tags eagerly, but only as
 1145|       |       needed.
 1146|       |     */
 1147|  1.69k|    ASSERT_NEW_TYPE_OR_LOCKED(type);
 1148|       |#ifdef Py_GIL_DISABLED
 1149|       |    // This function is re-entrant and it's not safe to call it
 1150|       |    // with the world stopped.
 1151|       |    assert(!types_world_is_stopped());
 1152|       |#endif
 1153|  1.69k|    if (type->tp_version_tag == 0) {
  ------------------
  |  Branch (1153:9): [True: 1.52k, False: 173]
  ------------------
 1154|  1.52k|        return;
 1155|  1.52k|    }
 1156|       |    // Cannot modify static builtin types.
 1157|  1.69k|    assert((type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) == 0);
  ------------------
  |  Branch (1157:5): [True: 173, False: 0]
  ------------------
 1158|       |
 1159|    173|    PyObject *subclasses = lookup_tp_subclasses(type);
 1160|    173|    if (subclasses != NULL) {
  ------------------
  |  Branch (1160:9): [True: 0, False: 173]
  ------------------
 1161|      0|        assert(PyDict_CheckExact(subclasses));
  ------------------
  |  Branch (1161:9): [True: 0, False: 0]
  ------------------
 1162|       |
 1163|      0|        Py_ssize_t i = 0;
 1164|      0|        PyObject *ref;
 1165|      0|        while (PyDict_Next(subclasses, &i, NULL, &ref)) {
  ------------------
  |  Branch (1165:16): [True: 0, False: 0]
  ------------------
 1166|      0|            PyTypeObject *subclass = type_from_ref(ref);
 1167|      0|            if (subclass == NULL) {
  ------------------
  |  Branch (1167:17): [True: 0, False: 0]
  ------------------
 1168|      0|                continue;
 1169|      0|            }
 1170|      0|            _PyType_Modified_Unlocked(subclass);
 1171|      0|            Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1172|      0|        }
 1173|      0|    }
 1174|       |
 1175|       |    // Notify registered type watchers, if any
 1176|    173|    if (type->tp_watched) {
  ------------------
  |  Branch (1176:9): [True: 0, False: 173]
  ------------------
 1177|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
 1178|      0|        int bits = type->tp_watched;
 1179|      0|        int i = 0;
 1180|      0|        while (bits) {
  ------------------
  |  Branch (1180:16): [True: 0, False: 0]
  ------------------
 1181|      0|            assert(i < TYPE_MAX_WATCHERS);
  ------------------
  |  Branch (1181:13): [True: 0, False: 0]
  ------------------
 1182|      0|            if (bits & 1) {
  ------------------
  |  Branch (1182:17): [True: 0, False: 0]
  ------------------
 1183|       |                // Note that PyErr_FormatUnraisable is potentially re-entrant
 1184|       |                // and the watcher callback might be too.
 1185|      0|                PyType_WatchCallback cb = interp->type_watchers[i];
 1186|      0|                if (cb && (cb(type) < 0)) {
  ------------------
  |  Branch (1186:21): [True: 0, False: 0]
  |  Branch (1186:27): [True: 0, False: 0]
  ------------------
 1187|      0|                    PyErr_FormatUnraisable(
 1188|      0|                        "Exception ignored in type watcher callback #%d for %R",
 1189|      0|                        i, type);
 1190|      0|                }
 1191|      0|            }
 1192|      0|            i++;
 1193|      0|            bits >>= 1;
 1194|      0|        }
 1195|      0|    }
 1196|       |
 1197|    173|    set_version_unlocked(type, 0); /* 0 is not a valid version tag */
 1198|    173|    _PyTypeCache_Invalidate(type);
 1199|    173|    if (PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|    173|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (1199:9): [True: 173, False: 0]
  ------------------
 1200|       |        // This field *must* be invalidated if the type is modified (see the
 1201|       |        // comment on struct _specialization_cache):
 1202|    173|        FT_ATOMIC_STORE_PTR_RELAXED(
  ------------------
  |  |  163|    173|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
 1203|    173|            ((PyHeapTypeObject *)type)->_spec_cache.getitem, NULL);
 1204|    173|    }
 1205|    173|}
PyType_Modified:
 1209|    128|{
 1210|       |    // Quick check without the lock held
 1211|    128|    if (FT_ATOMIC_LOAD_UINT_RELAXED(type->tp_version_tag) == 0) {
  ------------------
  |  |  189|    128|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  ------------------
  |  Branch (1211:9): [True: 127, False: 1]
  ------------------
 1212|    127|        return;
 1213|    127|    }
 1214|       |
 1215|      1|    BEGIN_TYPE_LOCK();
 1216|      1|    _PyType_Modified_Unlocked(type);
 1217|      1|    END_TYPE_LOCK();
 1218|      1|}
_PyType_SetVersion:
 1303|    392|{
 1304|    392|    BEGIN_TYPE_LOCK();
 1305|    392|    set_version_unlocked(tp, version);
 1306|    392|    END_TYPE_LOCK();
 1307|    392|}
_PyType_Name:
 1474|  97.1k|{
 1475|  97.1k|    assert(type->tp_name != NULL);
  ------------------
  |  Branch (1475:5): [True: 97.1k, False: 0]
  ------------------
 1476|  97.1k|    const char *s = strrchr(type->tp_name, '.');
 1477|  97.1k|    if (s == NULL) {
  ------------------
  |  Branch (1477:9): [True: 96.9k, False: 143]
  ------------------
 1478|  96.9k|        s = type->tp_name;
 1479|  96.9k|    }
 1480|    143|    else {
 1481|    143|        s++;
 1482|    143|    }
 1483|  97.1k|    return s;
 1484|  97.1k|}
_PyType_AllocNoTrack:
 2483|  1.52M|{
 2484|  1.52M|    PyObject *obj;
 2485|       |    /* The +1 on nitems is needed for most types but not all. We could save a
 2486|       |     * bit of space by allocating one less item in certain cases, depending on
 2487|       |     * the type. However, given the extra complexity (e.g. an additional type
 2488|       |     * flag to indicate when that is safe) it does not seem worth the memory
 2489|       |     * savings. An example type that doesn't need the +1 is a subclass of
 2490|       |     * tuple. See GH-100659 and GH-81381. */
 2491|  1.52M|    size_t size = _PyObject_VAR_SIZE(type, nitems+1);
 2492|       |
 2493|  1.52M|    const size_t presize = _PyType_PreHeaderSize(type);
 2494|  1.52M|    if (type->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|  1.52M|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (2494:9): [True: 51.2k, False: 1.47M]
  ------------------
 2495|  51.2k|        assert(type->tp_itemsize == 0);
  ------------------
  |  Branch (2495:9): [True: 51.2k, False: 0]
  ------------------
 2496|  51.2k|        size += _PyInlineValuesSize(type);
 2497|  51.2k|    }
 2498|  1.52M|    char *alloc = _PyObject_MallocWithType(type, size + presize);
 2499|  1.52M|    if (alloc  == NULL) {
  ------------------
  |  Branch (2499:9): [True: 0, False: 1.52M]
  ------------------
 2500|      0|        return PyErr_NoMemory();
 2501|      0|    }
 2502|  1.52M|    obj = (PyObject *)(alloc + presize);
 2503|  1.52M|    if (presize) {
  ------------------
  |  Branch (2503:9): [True: 1.28M, False: 239k]
  ------------------
 2504|  1.28M|        ((PyObject **)alloc)[0] = NULL;
 2505|  1.28M|        ((PyObject **)alloc)[1] = NULL;
 2506|  1.28M|    }
 2507|  1.52M|    if (PyType_IS_GC(type)) {
  ------------------
  |  |  157|  1.52M|#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  1.52M|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (157:25): [True: 1.28M, False: 239k]
  |  |  ------------------
  ------------------
 2508|  1.28M|        _PyObject_GC_Link(obj);
 2509|  1.28M|    }
 2510|       |    // Zero out the object after the PyObject header. The header fields are
 2511|       |    // initialized by _PyObject_Init[Var]().
 2512|  1.52M|    memset((char *)obj + sizeof(PyObject), 0, size - sizeof(PyObject));
 2513|       |
 2514|  1.52M|    if (type->tp_itemsize == 0) {
  ------------------
  |  Branch (2514:9): [True: 1.52M, False: 1.20k]
  ------------------
 2515|  1.52M|        _PyObject_Init(obj, type);
 2516|  1.52M|    }
 2517|  1.20k|    else {
 2518|  1.20k|        _PyObject_InitVar((PyVarObject *)obj, type, nitems);
 2519|  1.20k|    }
 2520|  1.52M|    if (type->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|  1.52M|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (2520:9): [True: 51.2k, False: 1.47M]
  ------------------
 2521|  51.2k|        _PyObject_InitInlineValues(obj, type);
 2522|  51.2k|    }
 2523|  1.52M|    return obj;
 2524|  1.52M|}
PyType_GenericAlloc:
 2528|   918k|{
 2529|   918k|    PyObject *obj = _PyType_AllocNoTrack(type, nitems);
 2530|   918k|    if (obj == NULL) {
  ------------------
  |  Branch (2530:9): [True: 0, False: 918k]
  ------------------
 2531|      0|        return NULL;
 2532|      0|    }
 2533|       |
 2534|   918k|    if (_PyType_IS_GC(type)) {
  ------------------
  |  |  820|   918k|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|   918k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (820:26): [True: 678k, False: 239k]
  |  |  ------------------
  ------------------
 2535|   678k|        _PyObject_GC_TRACK(obj);
  ------------------
  |  |  505|   678k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   678k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   678k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2536|   678k|    }
 2537|   918k|    return obj;
 2538|   918k|}
PyType_GenericNew:
 2542|   654k|{
 2543|   654k|    return type->tp_alloc(type, 0);
 2544|   654k|}
PyType_IsSubtype:
 2900|  19.4M|{
 2901|  19.4M|    return is_subtype_with_mro(a->tp_mro, a, b);
 2902|  19.4M|}
_PyObject_LookupSpecial:
 2921|  74.1k|{
 2922|  74.1k|    PyObject *res;
 2923|       |
 2924|  74.1k|    res = _PyType_LookupRef(Py_TYPE(self), attr);
  ------------------
  |  |  213|  74.1k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  74.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  74.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2925|  74.1k|    if (res != NULL) {
  ------------------
  |  Branch (2925:9): [True: 49.0k, False: 25.1k]
  ------------------
 2926|  49.0k|        descrgetfunc f;
 2927|  49.0k|        if ((f = Py_TYPE(res)->tp_descr_get) != NULL) {
  ------------------
  |  |  213|  49.0k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  49.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2927:13): [True: 49.0k, False: 0]
  ------------------
 2928|  49.0k|            Py_SETREF(res, f(res, self, (PyObject *)(Py_TYPE(self))));
  ------------------
  |  |  354|  49.0k|    do { \
  |  |  355|  49.0k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  49.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  49.0k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  49.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  49.0k|        *_tmp_dst_ptr = (src); \
  |  |  358|  49.0k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  49.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  49.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  49.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  49.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 49.0k]
  |  |  ------------------
  ------------------
 2929|  49.0k|        }
 2930|  49.0k|    }
 2931|  74.1k|    return res;
 2932|  74.1k|}
_PyObject_LookupSpecialMethod:
 2946|  5.04k|{
 2947|  5.04k|    PyObject *self_o = PyStackRef_AsPyObjectBorrow(*self);
 2948|  5.04k|    _PyType_LookupStackRefAndVersion(Py_TYPE(self_o), attr, method);
  ------------------
  |  |  213|  5.04k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.04k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.04k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2949|  5.04k|    PyObject *method_o = PyStackRef_AsPyObjectBorrow(*method);
 2950|  5.04k|    if (method_o == NULL) {
  ------------------
  |  Branch (2950:9): [True: 0, False: 5.04k]
  ------------------
 2951|      0|        return 0;
 2952|      0|    }
 2953|       |
 2954|  5.04k|    if (_PyType_HasFeature(Py_TYPE(method_o), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  213|  5.04k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  5.04k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.04k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (_PyType_HasFeature(Py_TYPE(method_o), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  534|  5.04k|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (2954:9): [True: 5.04k, False: 0]
  ------------------
 2955|       |        /* Avoid temporary PyMethodObject */
 2956|  5.04k|        return 1;
 2957|  5.04k|    }
 2958|       |
 2959|      0|    descrgetfunc f = Py_TYPE(method_o)->tp_descr_get;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2960|      0|    if (f != NULL) {
  ------------------
  |  Branch (2960:9): [True: 0, False: 0]
  ------------------
 2961|      0|        PyObject *func = f(method_o, self_o, (PyObject *)(Py_TYPE(self_o)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2962|      0|        if (func == NULL) {
  ------------------
  |  Branch (2962:13): [True: 0, False: 0]
  ------------------
 2963|      0|            return -1;
 2964|      0|        }
 2965|      0|        PyStackRef_CLEAR(*method); // clear method
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2966|      0|        *method = PyStackRef_FromPyObjectSteal(func);
 2967|      0|    }
 2968|      0|    PyStackRef_CLEAR(*self); // clear self
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2969|      0|    return 1;
 2970|      0|}
PyType_GetFlags:
 4122|    446|{
 4123|    446|    return type->tp_flags;
 4124|    446|}
_PyType_CalculateMetaclass:
 4137|  1.43k|{
 4138|  1.43k|    Py_ssize_t i, nbases;
 4139|  1.43k|    PyTypeObject *winner;
 4140|  1.43k|    PyObject *tmp;
 4141|  1.43k|    PyTypeObject *tmptype;
 4142|       |
 4143|       |    /* Determine the proper metatype to deal with this,
 4144|       |       and check for metatype conflicts while we're at it.
 4145|       |       Note that if some other metatype wins to contract,
 4146|       |       it's possible that its instances are not types. */
 4147|       |
 4148|  1.43k|    nbases = PyTuple_GET_SIZE(bases);
  ------------------
  |  |   27|  1.43k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4149|  1.43k|    winner = metatype;
 4150|  3.16k|    for (i = 0; i < nbases; i++) {
  ------------------
  |  Branch (4150:17): [True: 1.72k, False: 1.43k]
  ------------------
 4151|  1.72k|        tmp = PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|  1.72k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.72k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4151:15): [True: 1.72k, False: 0]
  ------------------
 4152|  1.72k|        tmptype = Py_TYPE(tmp);
  ------------------
  |  |  213|  1.72k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.72k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4153|  1.72k|        if (PyType_IsSubtype(winner, tmptype)) {
  ------------------
  |  Branch (4153:13): [True: 1.71k, False: 8]
  ------------------
 4154|  1.71k|            continue;
 4155|  1.71k|        }
 4156|      8|        if (PyType_IsSubtype(tmptype, winner)) {
  ------------------
  |  Branch (4156:13): [True: 8, False: 0]
  ------------------
 4157|      8|            winner = tmptype;
 4158|      8|            continue;
 4159|      8|        }
 4160|       |        /* else: */
 4161|      0|        PyErr_SetString(PyExc_TypeError,
 4162|      0|                        "metaclass conflict: "
 4163|      0|                        "the metaclass of a derived class "
 4164|      0|                        "must be a (non-strict) subclass "
 4165|      0|                        "of the metaclasses of all its bases");
 4166|      0|        return NULL;
 4167|      8|    }
 4168|  1.43k|    return winner;
 4169|  1.43k|}
PyType_FromMetaclass:
 5782|      5|{
 5783|       |    return type_from_slots_or_spec(NULL, spec, metaclass, module, bases);
 5784|      5|}
PyType_FromModuleAndSpec:
 5788|     87|{
 5789|     87|    return type_from_slots_or_spec(NULL, spec, NULL, module, bases);
 5790|     87|}
PyType_FromSpecWithBases:
 5794|     19|{
 5795|     19|    return type_from_slots_or_spec(NULL, spec, NULL, NULL, bases);
 5796|     19|}
PyType_FromSpec:
 5800|     20|{
 5801|     20|    return type_from_slots_or_spec(NULL, spec, NULL, NULL, NULL);
 5802|     20|}
PyType_GetSlot:
 5824|   414k|{
 5825|   414k|    uint16_t slot = _PySlot_resolve_type_slot(slot_in);
 5826|   414k|    return _PySlot_type_getslot(type, slot);
 5827|   414k|}
PyType_GetModule:
 5842|      4|{
 5843|      4|    assert(PyType_Check(type));
  ------------------
  |  Branch (5843:5): [True: 4, False: 0]
  ------------------
 5844|      4|    if (!_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|      4|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (5844:9): [True: 0, False: 4]
  ------------------
 5845|      0|        PyErr_Format(
 5846|      0|            PyExc_TypeError,
 5847|      0|            "PyType_GetModule: Type '%s' is not a heap type",
 5848|      0|            type->tp_name);
 5849|      0|        return NULL;
 5850|      0|    }
 5851|       |
 5852|      4|    PyHeapTypeObject* et = (PyHeapTypeObject*)type;
 5853|      4|    if (!et->ht_module) {
  ------------------
  |  Branch (5853:9): [True: 0, False: 4]
  ------------------
 5854|      0|        PyErr_Format(
 5855|      0|            PyExc_TypeError,
 5856|      0|            "PyType_GetModule: Type '%s' has no associated module",
 5857|      0|            type->tp_name);
 5858|      0|        return NULL;
 5859|      0|    }
 5860|      4|    return et->ht_module;
 5861|      4|}
PyType_GetModuleByToken_DuringGC:
 5888|    446|{
 5889|    446|    assert(PyType_Check(type));
  ------------------
  |  Branch (5889:5): [True: 446, False: 0]
  ------------------
 5890|       |
 5891|    446|    if (!_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|    446|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (5891:9): [True: 0, False: 446]
  ------------------
 5892|       |        // type_ready_mro() ensures that no heap type is
 5893|       |        // contained in a static type MRO.
 5894|      0|        return NULL;
 5895|      0|    }
 5896|    446|    else {
 5897|    446|        PyHeapTypeObject *ht = (PyHeapTypeObject*)type;
 5898|    446|        PyObject *module = ht->ht_module;
 5899|    446|        if (module && _PyModule_GetToken(module) == token) {
  ------------------
  |  Branch (5899:13): [True: 446, False: 0]
  |  Branch (5899:23): [True: 446, False: 0]
  ------------------
 5900|    446|            return module;
 5901|    446|        }
 5902|    446|    }
 5903|       |
 5904|      0|    PyObject *res = NULL;
 5905|      0|    BEGIN_TYPE_LOCK();
 5906|       |
 5907|      0|    PyObject *mro = lookup_tp_mro(type);
 5908|       |    // The type must be ready
 5909|      0|    assert(mro != NULL);
  ------------------
  |  Branch (5909:5): [True: 0, False: 0]
  ------------------
 5910|      0|    assert(PyTuple_Check(mro));
  ------------------
  |  Branch (5910:5): [True: 0, False: 0]
  ------------------
 5911|       |    // mro_invoke() ensures that the type MRO cannot be empty.
 5912|      0|    assert(PyTuple_GET_SIZE(mro) >= 1);
  ------------------
  |  Branch (5912:5): [True: 0, False: 0]
  ------------------
 5913|       |    // Also, the first item in the MRO is the type itself, which
 5914|       |    // we already checked above. We skip it in the loop.
 5915|      0|    assert(PyTuple_GET_ITEM(mro, 0) == (PyObject *)type);
  ------------------
  |  Branch (5915:5): [True: 0, False: 0]
  |  Branch (5915:5): [True: 0, False: 0]
  ------------------
 5916|       |
 5917|      0|    Py_ssize_t n = PyTuple_GET_SIZE(mro);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5918|      0|    for (Py_ssize_t i = 1; i < n; i++) {
  ------------------
  |  Branch (5918:28): [True: 0, False: 0]
  ------------------
 5919|      0|        PyObject *super = PyTuple_GET_ITEM(mro, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5919:27): [True: 0, False: 0]
  ------------------
 5920|      0|        if (!_PyType_HasFeature((PyTypeObject *)super, Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|      0|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (5920:13): [True: 0, False: 0]
  ------------------
 5921|       |            // Static types in the MRO need to be skipped
 5922|      0|            continue;
 5923|      0|        }
 5924|       |
 5925|      0|        PyHeapTypeObject *ht = (PyHeapTypeObject*)super;
 5926|      0|        PyObject *module = ht->ht_module;
 5927|      0|        if (module && _PyModule_GetToken(module) == token) {
  ------------------
  |  Branch (5927:13): [True: 0, False: 0]
  |  Branch (5927:23): [True: 0, False: 0]
  ------------------
 5928|      0|            res = module;
 5929|      0|            break;
 5930|      0|        }
 5931|      0|    }
 5932|      0|    END_TYPE_LOCK();
 5933|       |
 5934|      0|    return res;
 5935|      0|}
PyType_GetModuleByDef:
 5945|    446|{
 5946|    446|    PyObject *mod = PyType_GetModuleByToken_DuringGC(type, def);
 5947|    446|    if (!mod) {
  ------------------
  |  Branch (5947:9): [True: 0, False: 446]
  ------------------
 5948|      0|        PyErr_Format(
 5949|      0|            PyExc_TypeError,
 5950|      0|            "PyType_GetModuleByDef: No superclass of '%s' has the given module",
 5951|      0|            type->tp_name);
 5952|      0|        return NULL;
 5953|      0|    }
 5954|    446|    return mod;
 5955|    446|}
PyObject_GetItemData:
 6107|  1.46k|{
 6108|       |    return getitemdata(obj, true);
 6109|  1.46k|}
_PyType_LookupRefAndVersion:
 6193|  76.5k|{
 6194|  76.5k|    _PyStackRef out;
 6195|  76.5k|    unsigned int ver = _PyType_LookupStackRefAndVersion(type, name, &out);
 6196|  76.5k|    if (version) {
  ------------------
  |  Branch (6196:9): [True: 1.81k, False: 74.7k]
  ------------------
 6197|  1.81k|        *version = ver;
 6198|  1.81k|    }
 6199|  76.5k|    if (PyStackRef_IsNull(out)) {
  ------------------
  |  |  482|  76.5k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  76.5k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  76.5k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 26.0k, False: 50.4k]
  |  |  ------------------
  ------------------
 6200|  26.0k|        return NULL;
 6201|  26.0k|    }
 6202|  50.4k|    return PyStackRef_AsPyObjectSteal(out);
 6203|  76.5k|}
_PyType_LookupStackRefAndVersion:
 6215|  6.10M|{
 6216|  6.10M|    int cacheable = MCACHE_CACHEABLE_NAME(name);
  ------------------
  |  |   44|  6.10M|#define MCACHE_CACHEABLE_NAME(name) (PyUnicode_CheckExact(name) && PyUnicode_CHECK_INTERNED(name))
  |  |  ------------------
  |  |  |  |  104|  6.10M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  12.2M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  6.10M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  6.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 6.10M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MCACHE_CACHEABLE_NAME(name) (PyUnicode_CheckExact(name) && PyUnicode_CHECK_INTERNED(name))
  |  |  ------------------
  |  |  |  |  214|  6.10M|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.10M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.10M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (214:38): [True: 6.09M, False: 5.47k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6217|  6.10M|    if (cacheable) {
  ------------------
  |  Branch (6217:9): [True: 6.09M, False: 5.47k]
  ------------------
 6218|  6.09M|        struct _PyTypeCacheLookupResult r = _PyTypeCache_Lookup(type, name);
 6219|  6.09M|        if (r.cache_hit) {
  ------------------
  |  Branch (6219:13): [True: 6.09M, False: 4.78k]
  ------------------
 6220|  6.09M|            OBJECT_STAT_INC_COND(type_cache_hits, !is_dunder_name(name));
  ------------------
  |  |   78|  6.09M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 6221|  6.09M|            OBJECT_STAT_INC_COND(type_cache_dunder_hits, is_dunder_name(name));
  ------------------
  |  |   78|  6.09M|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 6222|  6.09M|            *out = r.value;
 6223|  6.09M|            return r.version_tag;
 6224|  6.09M|        }
 6225|  6.09M|    }
 6226|  10.2k|    OBJECT_STAT_INC_COND(type_cache_misses, !is_dunder_name(name));
  ------------------
  |  |   78|  10.2k|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 6227|  10.2k|    OBJECT_STAT_INC_COND(type_cache_dunder_misses, is_dunder_name(name));
  ------------------
  |  |   78|  10.2k|#define OBJECT_STAT_INC_COND(name, cond) ((void)0)
  ------------------
 6228|       |
 6229|       |    /* We may end up clearing live exceptions below, so make sure it's ours. */
 6230|  10.2k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (6230:5): [True: 10.2k, False: 0]
  ------------------
 6231|       |
 6232|  10.2k|    int res;
 6233|  10.2k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 6234|       |
 6235|  10.2k|    unsigned int version_tag = FT_ATOMIC_LOAD_UINT(type->tp_version_tag);
  ------------------
  |  |  188|  10.2k|#define FT_ATOMIC_LOAD_UINT(value) value
  ------------------
 6236|  10.2k|    if (cacheable &&
  ------------------
  |  Branch (6236:9): [True: 4.78k, False: 5.47k]
  ------------------
 6237|  4.78k|        (version_tag != 0 || should_assign_version_tag(type, name, version_tag)))
  ------------------
  |  Branch (6237:10): [True: 4.35k, False: 429]
  |  Branch (6237:30): [True: 429, False: 0]
  ------------------
 6238|  4.78k|    {
 6239|  4.78k|        BEGIN_TYPE_LOCK();
 6240|  4.78k|        version_tag = type->tp_version_tag;
 6241|  4.78k|        if (version_tag == 0) {
  ------------------
  |  Branch (6241:13): [True: 429, False: 4.35k]
  ------------------
 6242|    429|            assign_version_tag(interp, type);
 6243|    429|            version_tag = type->tp_version_tag;
 6244|    429|        }
 6245|  4.78k|        res = find_name_in_mro(type, name, out);
 6246|       |        // find_name_in_mro can release the type lock and another thread can
 6247|       |        // modify the type, so we need to check version tag again before caching the result.
 6248|  4.78k|        if (res >= 0 && version_tag != 0 && version_tag == type->tp_version_tag) {
  ------------------
  |  Branch (6248:13): [True: 4.78k, False: 0]
  |  Branch (6248:25): [True: 4.78k, False: 0]
  |  Branch (6248:45): [True: 4.78k, False: 0]
  ------------------
 6249|  4.78k|            _PyTypeCache_Insert(type, name, PyStackRef_AsPyObjectBorrow(*out));
 6250|  4.78k|        }
 6251|  4.78k|        END_TYPE_LOCK();
 6252|  4.78k|    }
 6253|  5.47k|    else {
 6254|  5.47k|        version_tag = 0;
 6255|  5.47k|        res = find_name_in_mro(type, name, out);
 6256|  5.47k|    }
 6257|       |
 6258|       |    /* Only put NULL results into cache if there was no error. */
 6259|  10.2k|    if (res < 0) {
  ------------------
  |  Branch (6259:9): [True: 0, False: 10.2k]
  ------------------
 6260|      0|        *out = PyStackRef_NULL;
 6261|      0|        return 0;
 6262|      0|    }
 6263|       |
 6264|  10.2k|    return version_tag;
 6265|  10.2k|}
_PyType_LookupRef:
 6272|  74.7k|{
 6273|       |    return _PyType_LookupRefAndVersion(type, name, NULL);
 6274|  74.7k|}
_PyType_Lookup:
 6280|      8|{
 6281|      8|    PyObject *res = _PyType_LookupRefAndVersion(type, name, NULL);
 6282|      8|    Py_XDECREF(res);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6283|      8|    return res;
 6284|      8|}
_PyType_CacheInitForSpecialization:
 6289|     16|{
 6290|     16|    if (!init || !tp_version) {
  ------------------
  |  Branch (6290:9): [True: 0, False: 16]
  |  Branch (6290:18): [True: 0, False: 16]
  ------------------
 6291|      0|        return 0;
 6292|      0|    }
 6293|     16|    int can_cache;
 6294|     16|    BEGIN_TYPE_LOCK();
 6295|     16|    can_cache = ((PyTypeObject*)type)->tp_version_tag == tp_version;
 6296|       |    #ifdef Py_GIL_DISABLED
 6297|       |    can_cache = can_cache && _PyObject_HasDeferredRefcount(init);
 6298|       |    #endif
 6299|     16|    if (can_cache) {
  ------------------
  |  Branch (6299:9): [True: 16, False: 0]
  ------------------
 6300|     16|        FT_ATOMIC_STORE_PTR_RELEASE(type->_spec_cache.init, init);
  ------------------
  |  |  164|     16|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 6301|     16|    }
 6302|     16|    END_TYPE_LOCK();
 6303|     16|    return can_cache;
 6304|     16|}
_PyType_CacheGetItemForSpecialization:
 6308|      9|{
 6309|      9|    if (!descriptor || !tp_version) {
  ------------------
  |  Branch (6309:9): [True: 0, False: 9]
  |  Branch (6309:24): [True: 0, False: 9]
  ------------------
 6310|      0|        return 0;
 6311|      0|    }
 6312|      9|    int can_cache;
 6313|      9|    BEGIN_TYPE_LOCK();
 6314|      9|    can_cache = ((PyTypeObject*)ht)->tp_version_tag == tp_version;
 6315|       |    // This pointer is invalidated by PyType_Modified (see the comment on
 6316|       |    // struct _specialization_cache):
 6317|      9|    PyFunctionObject *func = (PyFunctionObject *)descriptor;
 6318|      9|    uint32_t version = _PyFunction_GetVersionForCurrentState(func);
 6319|      9|    can_cache = can_cache && _PyFunction_IsVersionValid(version);
  ------------------
  |  Branch (6319:17): [True: 9, False: 0]
  |  Branch (6319:30): [True: 9, False: 0]
  ------------------
 6320|       |#ifdef Py_GIL_DISABLED
 6321|       |    can_cache = can_cache && _PyObject_HasDeferredRefcount(descriptor);
 6322|       |#endif
 6323|      9|    if (can_cache) {
  ------------------
  |  Branch (6323:9): [True: 9, False: 0]
  ------------------
 6324|      9|        FT_ATOMIC_STORE_PTR_RELEASE(ht->_spec_cache.getitem, descriptor);
  ------------------
  |  |  164|      9|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
 6325|      9|        FT_ATOMIC_STORE_UINT32_RELAXED(ht->_spec_cache.getitem_version, version);
  ------------------
  |  |  172|      9|#define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value
  ------------------
 6326|      9|    }
 6327|      9|    END_TYPE_LOCK();
 6328|      9|    return can_cache;
 6329|      9|}
_PyType_SetFlags:
 6333|      4|{
 6334|      4|    unsigned long new_flags = (self->tp_flags & ~mask) | flags;
 6335|      4|    if (new_flags != self->tp_flags) {
  ------------------
  |  Branch (6335:9): [True: 4, False: 0]
  ------------------
 6336|      4|        types_stop_world();
 6337|       |        // can't use new_flags here since they could be out-of-date
 6338|      4|        self->tp_flags = (self->tp_flags & ~mask) | flags;
 6339|      4|        types_start_world();
 6340|      4|    }
 6341|      4|}
_PyType_Validate:
 6345|      8|{
 6346|      8|    int err;
 6347|      8|    BEGIN_TYPE_LOCK();
 6348|      8|    err = validate(ty);
 6349|      8|    if (!err) {
  ------------------
  |  Branch (6349:9): [True: 2, False: 6]
  ------------------
 6350|      2|        if(assign_version_tag(_PyInterpreterState_GET(), ty)) {
  ------------------
  |  Branch (6350:12): [True: 2, False: 0]
  ------------------
 6351|      2|            *tp_version = ty->tp_version_tag;
 6352|      2|        }
 6353|      0|        else {
 6354|      0|            err = -1;
 6355|      0|        }
 6356|      2|    }
 6357|      8|    END_TYPE_LOCK();
 6358|      8|    return err;
 6359|      8|}
_PyType_SetFlagsRecursive:
 6386|     28|{
 6387|     28|    BEGIN_TYPE_LOCK();
 6388|       |    /* Ideally, changing flags and invalidating the old version tag would
 6389|       |       happen in one step. But _PyType_Modified_Unlocked() is re-entrant and
 6390|       |       cannot run with the world stopped, so we must invalidate first.
 6391|       |       Immutable/static-builtin types are skipped because
 6392|       |       set_flags_recursive() does not modify them. */
 6393|     28|    if (!PyType_HasFeature(self, Py_TPFLAGS_IMMUTABLETYPE) &&
  ------------------
  |  |  500|     28|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (6393:9): [True: 0, False: 28]
  ------------------
 6394|      0|        (self->tp_flags & mask) != flags)
  ------------------
  |  Branch (6394:9): [True: 0, False: 0]
  ------------------
 6395|      0|    {
 6396|      0|        _PyType_Modified_Unlocked(self);
 6397|      0|    }
 6398|       |    /* Keep TYPE_LOCK held while waiting for stop-the-world so no thread
 6399|       |       can reassign a version tag before the flag update. */
 6400|     28|    pinned_mutexes_t pinned;
 6401|     28|    type_lock_prevent_release(&pinned);
  ------------------
  |  |  198|     28|#define type_lock_prevent_release(pinned) ((void)(pinned))
  ------------------
 6402|     28|    types_stop_world();
 6403|     28|    set_flags_recursive(self, mask, flags);
 6404|     28|    types_start_world();
 6405|     28|    type_lock_allow_release(&pinned);
  ------------------
  |  |  199|     28|#define type_lock_allow_release(pinned) ((void)(pinned))
  ------------------
 6406|     28|    END_TYPE_LOCK();
 6407|     28|}
_Py_type_getattro_impl:
 6423|  3.06k|{
 6424|  3.06k|    _PyStackRef ref = _Py_type_getattro_stackref(type, name, suppress_missing_attribute);
 6425|  3.06k|    if (PyStackRef_IsNull(ref)) {
  ------------------
  |  |  482|  3.06k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  3.06k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  3.06k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 54, False: 3.01k]
  |  |  ------------------
  ------------------
 6426|     54|        return NULL;
 6427|     54|    }
 6428|  3.01k|    return PyStackRef_AsPyObjectSteal(ref);
 6429|  3.06k|}
_Py_type_getattro:
 6435|  1.92k|{
 6436|  1.92k|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|  1.92k|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 6437|       |    return _Py_type_getattro_impl(type, name, NULL);
 6438|  1.92k|}
_Py_type_getattro_stackref:
 6453|   102k|{
 6454|   102k|    PyTypeObject *metatype = Py_TYPE(type);
  ------------------
  |  |  213|   102k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   102k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   102k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6455|   102k|    descrgetfunc meta_get = NULL;
 6456|       |
 6457|   102k|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|   102k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   102k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (6457:9): [True: 0, False: 102k]
  ------------------
 6458|      0|        PyErr_Format(PyExc_TypeError,
 6459|      0|                     "attribute name must be string, not '%.200s'",
 6460|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6461|      0|        return PyStackRef_NULL;
 6462|      0|    }
 6463|       |
 6464|       |    /* Initialize this type (we'll assume the metatype is initialized) */
 6465|   102k|    if (!_PyType_IsReady(type)) {
  ------------------
  |  Branch (6465:9): [True: 0, False: 102k]
  ------------------
 6466|      0|        if (PyType_Ready(type) < 0)
  ------------------
  |  Branch (6466:13): [True: 0, False: 0]
  ------------------
 6467|      0|            return PyStackRef_NULL;
 6468|      0|    }
 6469|       |
 6470|       |    /* Set up GC-visible stack refs */
 6471|   102k|    _PyCStackRef result_ref, meta_attribute_ref, attribute_ref;
 6472|   102k|    PyThreadState *tstate = _PyThreadState_GET();
 6473|   102k|    _PyThreadState_PushCStackRef(tstate, &result_ref);
 6474|   102k|    _PyThreadState_PushCStackRef(tstate, &meta_attribute_ref);
 6475|   102k|    _PyThreadState_PushCStackRef(tstate, &attribute_ref);
 6476|       |
 6477|       |    /* Look for the attribute in the metatype */
 6478|   102k|    _PyType_LookupStackRefAndVersion(metatype, name, &meta_attribute_ref.ref);
 6479|       |
 6480|   102k|    if (!PyStackRef_IsNull(meta_attribute_ref.ref)) {
  ------------------
  |  |  482|   102k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|   102k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   102k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6480:9): [True: 99.4k, False: 3.18k]
  ------------------
 6481|  99.4k|        PyObject *meta_attr_obj = PyStackRef_AsPyObjectBorrow(meta_attribute_ref.ref);
 6482|  99.4k|        meta_get = Py_TYPE(meta_attr_obj)->tp_descr_get;
  ------------------
  |  |  213|  99.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  99.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  99.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6483|       |
 6484|  99.4k|        if (meta_get != NULL && PyDescr_IsData(meta_attr_obj)) {
  ------------------
  |  Branch (6484:13): [True: 98.7k, False: 759]
  |  Branch (6484:33): [True: 97.7k, False: 1.03k]
  ------------------
 6485|       |            /* Data descriptors implement tp_descr_set to intercept
 6486|       |             * writes. Assume the attribute is not overridden in
 6487|       |             * type's tp_dict (and bases): call the descriptor now.
 6488|       |             */
 6489|  97.7k|            PyObject *res = meta_get(meta_attr_obj, (PyObject *)type,
 6490|  97.7k|                                     (PyObject *)metatype);
 6491|  97.7k|            if (res != NULL) {
  ------------------
  |  Branch (6491:17): [True: 97.6k, False: 25]
  ------------------
 6492|  97.6k|                result_ref.ref = PyStackRef_FromPyObjectSteal(res);
 6493|  97.6k|            }
 6494|  97.7k|            goto done;
 6495|  97.7k|        }
 6496|  99.4k|    }
 6497|       |
 6498|       |    /* No data descriptor found on metatype. Look in tp_dict of this
 6499|       |     * type and its bases */
 6500|  4.97k|    _PyType_LookupStackRefAndVersion(type, name, &attribute_ref.ref);
 6501|  4.97k|    if (!PyStackRef_IsNull(attribute_ref.ref)) {
  ------------------
  |  |  482|  4.97k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  4.97k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  4.97k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6501:9): [True: 4.79k, False: 182]
  ------------------
 6502|       |        /* Implement descriptor functionality, if any */
 6503|  4.79k|        PyObject *attr_obj = PyStackRef_AsPyObjectBorrow(attribute_ref.ref);
 6504|  4.79k|        descrgetfunc local_get = Py_TYPE(attr_obj)->tp_descr_get;
  ------------------
  |  |  213|  4.79k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6505|       |
 6506|       |        /* Release meta_attribute early since we found in local dict */
 6507|  4.79k|        PyStackRef_CLEAR(meta_attribute_ref.ref);
  ------------------
  |  |  732|  4.79k|    do { \
  |  |  733|  4.79k|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  4.79k|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  4.79k|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  4.79k|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  4.79k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 4.79k]
  |  |  ------------------
  ------------------
 6508|       |
 6509|  4.79k|        if (local_get != NULL) {
  ------------------
  |  Branch (6509:13): [True: 4.47k, False: 315]
  ------------------
 6510|       |            /* Special case staticmethod to avoid descriptor call overhead.
 6511|       |             * staticmethod.__get__ just returns the wrapped callable. */
 6512|  4.47k|            if (Py_TYPE(attr_obj) == &PyStaticMethod_Type) {
  ------------------
  |  |  213|  4.47k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6512:17): [True: 1.32k, False: 3.15k]
  ------------------
 6513|  1.32k|                PyObject *callable = _PyStaticMethod_GetFunc(attr_obj);
 6514|  1.32k|                if (callable) {
  ------------------
  |  Branch (6514:21): [True: 1.32k, False: 0]
  ------------------
 6515|  1.32k|                    result_ref.ref = PyStackRef_FromPyObjectNew(callable);
  ------------------
  |  |  611|  1.32k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6516|  1.32k|                    goto done;
 6517|  1.32k|                }
 6518|  1.32k|            }
 6519|       |            /* NULL 2nd argument indicates the descriptor was
 6520|       |             * found on the target object itself (or a base)  */
 6521|  3.15k|            PyObject *res = local_get(attr_obj, (PyObject *)NULL,
 6522|  3.15k|                                      (PyObject *)type);
 6523|  3.15k|            if (res != NULL) {
  ------------------
  |  Branch (6523:17): [True: 3.15k, False: 0]
  ------------------
 6524|  3.15k|                result_ref.ref = PyStackRef_FromPyObjectSteal(res);
 6525|  3.15k|            }
 6526|  3.15k|            goto done;
 6527|  4.47k|        }
 6528|       |
 6529|       |        /* No descriptor, return the attribute directly */
 6530|    315|        result_ref.ref = attribute_ref.ref;
 6531|    315|        attribute_ref.ref = PyStackRef_NULL;
 6532|    315|        goto done;
 6533|  4.79k|    }
 6534|       |
 6535|       |    /* No attribute found in local __dict__ (or bases): use the
 6536|       |     * descriptor from the metatype, if any */
 6537|    182|    if (meta_get != NULL) {
  ------------------
  |  Branch (6537:9): [True: 151, False: 31]
  ------------------
 6538|    151|        PyObject *meta_attr_obj = PyStackRef_AsPyObjectBorrow(meta_attribute_ref.ref);
 6539|    151|        PyObject *res = meta_get(meta_attr_obj, (PyObject *)type,
 6540|    151|                                 (PyObject *)metatype);
 6541|    151|        if (res != NULL) {
  ------------------
  |  Branch (6541:13): [True: 151, False: 0]
  ------------------
 6542|    151|            result_ref.ref = PyStackRef_FromPyObjectSteal(res);
 6543|    151|        }
 6544|    151|        goto done;
 6545|    151|    }
 6546|       |
 6547|       |    /* If an ordinary attribute was found on the metatype, return it now */
 6548|     31|    if (!PyStackRef_IsNull(meta_attribute_ref.ref)) {
  ------------------
  |  |  482|     31|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|     31|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|     31|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6548:9): [True: 0, False: 31]
  ------------------
 6549|      0|        result_ref.ref = meta_attribute_ref.ref;
 6550|      0|        meta_attribute_ref.ref = PyStackRef_NULL;
 6551|      0|        goto done;
 6552|      0|    }
 6553|       |
 6554|       |    /* Give up */
 6555|     31|    if (suppress_missing_attribute == NULL) {
  ------------------
  |  Branch (6555:9): [True: 2, False: 29]
  ------------------
 6556|      2|        PyErr_Format(PyExc_AttributeError,
 6557|      2|                     "type object '%.100s' has no attribute '%U'",
 6558|      2|                     type->tp_name, name);
 6559|      2|    }
 6560|     29|    else {
 6561|       |        // signal the caller we have not set an PyExc_AttributeError and gave up
 6562|     29|        *suppress_missing_attribute = 1;
 6563|     29|    }
 6564|       |
 6565|   102k|done:
 6566|   102k|    _PyThreadState_PopCStackRef(tstate, &attribute_ref);
 6567|   102k|    _PyThreadState_PopCStackRef(tstate, &meta_attribute_ref);
 6568|   102k|    return _PyThreadState_PopCStackRefSteal(tstate, &result_ref);
 6569|     31|}
_Py_BaseObject_RichCompare:
 7458|    110|{
 7459|    110|    return object_richcompare(self, other, op);
 7460|    110|}
_PyType_AddMethod:
 8561|      2|{
 8562|      2|    return type_add_method(type, meth);
 8563|      2|}
_PyStaticType_InitForExtension:
 9619|     12|{
 9620|     12|    return init_static_type(interp, self, 0, ((self->tp_flags & Py_TPFLAGS_READY) == 0));
  ------------------
  |  |  518|     12|#define Py_TPFLAGS_READY (1UL << 12)
  ------------------
 9621|     12|}
_PyStaticType_InitBuiltin:
 9625|    404|{
 9626|    404|    return init_static_type(interp, self, 1, _Py_IsMainInterpreter(interp));
 9627|    404|}
_PyType_InitSlotDefs:
12130|      2|{
12131|      2|    if (!_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (12131:9): [True: 0, False: 2]
  ------------------
12132|      0|        return 0;
12133|      0|    }
12134|      2|    PyObject *bytearray = NULL;
12135|      2|    PyObject *cache = PyDict_New();
12136|      2|    if (!cache) {
  ------------------
  |  Branch (12136:9): [True: 0, False: 2]
  ------------------
12137|      0|        return -1;
12138|      0|    }
12139|       |
12140|      2|    pytype_slotdef *p;
12141|      2|    Py_ssize_t idx = 0;
12142|    190|    for (p = slotdefs; p->name_strobj; p++, idx++) {
  ------------------
  |  Branch (12142:24): [True: 188, False: 2]
  ------------------
12143|    188|        assert(idx < 255);
  ------------------
  |  Branch (12143:9): [True: 188, False: 0]
  ------------------
12144|       |
12145|    188|        if (PyDict_GetItemRef(cache, p->name_strobj, &bytearray) < 0) {
  ------------------
  |  Branch (12145:13): [True: 0, False: 188]
  ------------------
12146|      0|            goto error;
12147|      0|        }
12148|       |
12149|    188|        if (!bytearray) {
  ------------------
  |  Branch (12149:13): [True: 162, False: 26]
  ------------------
12150|    162|            Py_ssize_t size = sizeof(uint8_t) * (1 + MAX_EQUIV);
  ------------------
  |  |  726|    162|#define MAX_EQUIV 10
  ------------------
12151|    162|            bytearray = PyByteArray_FromStringAndSize(NULL, size);
12152|    162|            if (!bytearray) {
  ------------------
  |  Branch (12152:17): [True: 0, False: 162]
  ------------------
12153|      0|                goto error;
12154|      0|            }
12155|       |
12156|    162|            uint8_t *data = (uint8_t *)PyByteArray_AS_STRING(bytearray);
  ------------------
  |  |   28|    162|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12157|    162|            data[0] = 0;
12158|       |
12159|    162|            if (PyDict_SetItem(cache, p->name_strobj, bytearray) < 0) {
  ------------------
  |  Branch (12159:17): [True: 0, False: 162]
  ------------------
12160|      0|                goto error;
12161|      0|            }
12162|    162|        }
12163|       |
12164|    188|        assert(PyByteArray_CheckExact(bytearray));
  ------------------
  |  Branch (12164:9): [True: 188, False: 0]
  ------------------
12165|    188|        uint8_t *data = (uint8_t *)PyByteArray_AS_STRING(bytearray);
  ------------------
  |  |   28|    188|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    188|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    188|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12166|       |
12167|    188|        data[0] += 1;
12168|    188|        assert(data[0] < MAX_EQUIV);
  ------------------
  |  Branch (12168:9): [True: 188, False: 0]
  ------------------
12169|       |
12170|    188|        data[data[0]] = (uint8_t)idx;
12171|       |
12172|    188|        Py_CLEAR(bytearray);
  ------------------
  |  |  484|    188|    do { \
  |  |  485|    188|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    188|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    188|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    188|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    188|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    188|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 188, False: 0]
  |  |  ------------------
  |  |  488|    188|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    188|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    188|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    188|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    188|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    188|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    188|        } \
  |  |  491|    188|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 188]
  |  |  ------------------
  ------------------
12173|    188|    }
12174|       |
12175|      2|    memset(slotdefs_dups, -1, sizeof(slotdefs_dups));
12176|       |
12177|      2|    Py_ssize_t pos = 0;
12178|      2|    PyObject *key = NULL;
12179|      2|    PyObject *value = NULL;
12180|    164|    while (PyDict_Next(cache, &pos, &key, &value)) {
  ------------------
  |  Branch (12180:12): [True: 162, False: 2]
  ------------------
12181|    162|        uint8_t *data = (uint8_t *)PyByteArray_AS_STRING(value);
  ------------------
  |  |   28|    162|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12182|    162|        uint8_t n = data[0];
12183|    350|        for (uint8_t i = 0; i < n; i++) {
  ------------------
  |  Branch (12183:29): [True: 188, False: 162]
  ------------------
12184|    188|            uint8_t idx = data[i + 1];
12185|    188|            memcpy(&slotdefs_dups[idx], data, sizeof(uint8_t) * (n + 1));
12186|    188|        }
12187|    162|    }
12188|       |
12189|      2|    Py_DECREF(cache);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12190|      2|    return 0;
12191|       |
12192|      0|error:
12193|      0|    Py_XDECREF(bytearray);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12194|      0|    Py_DECREF(cache);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12195|      0|    return -1;
12196|      2|}
_PySuper_LookupDescr:
12533|  1.90k|{
12534|  1.90k|    PyObject *mro, *res;
12535|  1.90k|    Py_ssize_t i, n;
12536|       |
12537|  1.90k|    mro = lookup_tp_mro(su_obj_type);
12538|  1.90k|    if (mro == NULL)
  ------------------
  |  Branch (12538:9): [True: 0, False: 1.90k]
  ------------------
12539|      0|        return NULL;
12540|       |
12541|       |    /* Keep a strong reference to mro because su_obj_type->tp_mro can be
12542|       |       replaced during PyDict_GetItemRef(dict, name, &res). */
12543|  1.90k|    PyThreadState *tstate = _PyThreadState_GET();
12544|  1.90k|    _PyCStackRef mro_ref;
12545|  1.90k|    _PyThreadState_PushCStackRefNew(tstate, &mro_ref, mro);
12546|       |
12547|  1.90k|    assert(PyTuple_Check(mro));
  ------------------
  |  Branch (12547:5): [True: 1.90k, False: 0]
  ------------------
12548|  1.90k|    n = PyTuple_GET_SIZE(mro);
  ------------------
  |  |   27|  1.90k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.90k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.90k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12549|       |
12550|       |    /* No need to check the last one: it's gonna be skipped anyway.  */
12551|  1.90k|    for (i = 0; i+1 < n; i++) {
  ------------------
  |  Branch (12551:17): [True: 1.90k, False: 0]
  ------------------
12552|  1.90k|        if ((PyObject *)(su_type) == PyTuple_GET_ITEM(mro, i))
  ------------------
  |  |   29|  1.90k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.90k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.90k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12552:13): [True: 1.90k, False: 2]
  |  Branch (12552:38): [True: 1.90k, False: 0]
  ------------------
12553|  1.90k|            break;
12554|  1.90k|    }
12555|  1.90k|    i++;  /* skip su->type (if any)  */
12556|  1.90k|    if (i >= n) {
  ------------------
  |  Branch (12556:9): [True: 0, False: 1.90k]
  ------------------
12557|      0|        _PyThreadState_PopCStackRef(tstate, &mro_ref);
12558|      0|        return NULL;
12559|      0|    }
12560|       |
12561|  3.29k|    do {
12562|  3.29k|        PyObject *obj = PyTuple_GET_ITEM(mro, i);
  ------------------
  |  |   29|  3.29k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  3.29k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.29k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12562:25): [True: 3.29k, False: 0]
  ------------------
12563|  3.29k|        PyObject *dict = lookup_tp_dict(_PyType_CAST(obj));
  ------------------
  |  |  770|  3.29k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.29k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (12563:41): [True: 3.29k, False: 0]
  ------------------
12564|  3.29k|        assert(dict != NULL && PyDict_Check(dict));
  ------------------
  |  Branch (12564:9): [True: 3.29k, False: 0]
  |  Branch (12564:9): [True: 3.29k, False: 0]
  ------------------
12565|       |
12566|  3.29k|        if (PyDict_GetItemRef(dict, name, &res) != 0) {
  ------------------
  |  Branch (12566:13): [True: 1.90k, False: 1.39k]
  ------------------
12567|       |            // found or error
12568|  1.90k|            _PyThreadState_PopCStackRef(tstate, &mro_ref);
12569|  1.90k|            return res;
12570|  1.90k|        }
12571|       |
12572|  1.39k|        i++;
12573|  1.39k|    } while (i < n);
  ------------------
  |  Branch (12573:14): [True: 1.39k, False: 0]
  ------------------
12574|      0|    _PyThreadState_PopCStackRef(tstate, &mro_ref);
12575|       |    return NULL;
12576|  1.90k|}
_PySuper_Lookup:
12714|  1.11k|{
12715|  1.11k|    PyTypeObject *su_obj_type = supercheck(su_type, su_obj);
12716|  1.11k|    if (su_obj_type == NULL) {
  ------------------
  |  Branch (12716:9): [True: 0, False: 1.11k]
  ------------------
12717|      0|        return NULL;
12718|      0|    }
12719|  1.11k|    PyObject *res = do_super_lookup(NULL, su_type, su_obj, su_obj_type, name, method);
12720|  1.11k|    Py_DECREF(su_obj_type);
  ------------------
  |  |  430|  1.11k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.11k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12721|  1.11k|    return res;
12722|  1.11k|}
typeobject.c:managed_static_type_state_get:
  289|  1.89M|{
  290|       |    // It's probably a builtin type.
  291|  1.89M|    size_t index = managed_static_type_index_get(self);
  292|  1.89M|    managed_static_type_state *state =
  293|  1.89M|            &(interp->types.builtins.initialized[index]);
  294|  1.89M|    if (state->type == self) {
  ------------------
  |  Branch (294:9): [True: 1.89M, False: 318]
  ------------------
  295|  1.89M|        return state;
  296|  1.89M|    }
  297|    318|    if (index > _Py_MAX_MANAGED_STATIC_EXT_TYPES) {
  ------------------
  |  |  544|    318|#define _Py_MAX_MANAGED_STATIC_EXT_TYPES 10
  ------------------
  |  Branch (297:9): [True: 0, False: 318]
  ------------------
  298|      0|        return state;
  299|      0|    }
  300|    318|    return &(interp->types.for_extensions.initialized[index]);
  301|    318|}
typeobject.c:managed_static_type_index_get:
  243|  1.89M|{
  244|  1.89M|    assert(managed_static_type_index_is_set(self));
  ------------------
  |  Branch (244:5): [True: 1.89M, False: 0]
  ------------------
  245|       |    /* We store a 1-based index so 0 can mean "not initialized". */
  246|  1.89M|    return (size_t)self->tp_subclasses - 1;
  247|  1.89M|}
typeobject.c:managed_static_type_index_is_set:
  236|  1.89M|{
  237|       |    return self->tp_subclasses != NULL;
  238|  1.89M|}
typeobject.c:lookup_tp_dict:
  531|  6.27M|{
  532|  6.27M|    if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  6.27M|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (532:9): [True: 961k, False: 5.31M]
  ------------------
  533|   961k|        PyInterpreterState *interp = _PyInterpreterState_GET();
  534|   961k|        managed_static_type_state *state = _PyStaticType_GetState(interp, self);
  535|   961k|        assert(state != NULL);
  ------------------
  |  Branch (535:9): [True: 961k, False: 0]
  ------------------
  536|   961k|        return state->tp_dict;
  537|   961k|    }
  538|  5.31M|    return self->tp_dict;
  539|  6.27M|}
typeobject.c:lookup_tp_bases:
  584|  6.25k|{
  585|  6.25k|    return self->tp_bases;
  586|  6.25k|}
typeobject.c:lookup_tp_subclasses:
  737|  1.77k|{
  738|  1.77k|    if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.77k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (738:9): [True: 705, False: 1.06k]
  ------------------
  739|    705|        PyInterpreterState *interp = _PyInterpreterState_GET();
  740|    705|        managed_static_type_state *state = _PyStaticType_GetState(interp, self);
  741|    705|        assert(state != NULL);
  ------------------
  |  Branch (741:9): [True: 705, False: 0]
  ------------------
  742|    705|        return state->tp_subclasses;
  743|    705|    }
  744|  1.06k|    return (PyObject *)self->tp_subclasses;
  745|  1.77k|}
typeobject.c:init_tp_subclasses:
  705|    229|{
  706|    229|    PyObject *subclasses = PyDict_New();
  707|    229|    if (subclasses == NULL) {
  ------------------
  |  Branch (707:9): [True: 0, False: 229]
  ------------------
  708|      0|        return NULL;
  709|      0|    }
  710|    229|    if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|    229|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (710:9): [True: 72, False: 157]
  ------------------
  711|     72|        PyInterpreterState *interp = _PyInterpreterState_GET();
  712|     72|        managed_static_type_state *state = _PyStaticType_GetState(interp, self);
  713|     72|        state->tp_subclasses = subclasses;
  714|     72|        return subclasses;
  715|     72|    }
  716|    157|    self->tp_subclasses = (void *)subclasses;
  717|    157|    return subclasses;
  718|    229|}
typeobject.c:get_subclasses_unlocked:
  781|     58|{
  782|     58|    ASSERT_TYPE_LOCK_HELD();
  783|       |
  784|     58|    PyObject *subclasses = lookup_tp_subclasses(self);  // borrowed ref
  785|     58|    if (subclasses == NULL) {
  ------------------
  |  Branch (785:9): [True: 52, False: 6]
  ------------------
  786|     52|        return 0;
  787|     52|    }
  788|     58|    assert(PyDict_CheckExact(subclasses));
  ------------------
  |  Branch (788:5): [True: 6, False: 0]
  ------------------
  789|       |    // The loop cannot modify tp_subclasses, there is no need
  790|       |    // to hold a strong reference (use a borrowed reference).
  791|       |
  792|      6|    Py_ssize_t i = 0;
  793|      6|    PyObject *ref;  // borrowed ref
  794|     14|    while (PyDict_Next(subclasses, &i, NULL, &ref)) {
  ------------------
  |  Branch (794:12): [True: 8, False: 6]
  ------------------
  795|      8|        PyTypeObject *subclass = type_from_ref(ref);
  796|      8|        if (subclass == NULL) {
  ------------------
  |  Branch (796:13): [True: 0, False: 8]
  ------------------
  797|      0|            continue;
  798|      0|        }
  799|       |
  800|      8|        int res = PyList_Append(list, _PyObject_CAST(subclass));
  ------------------
  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  ------------------
  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  801|      8|        Py_DECREF(subclass);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|      8|        if (res < 0) {
  ------------------
  |  Branch (802:13): [True: 0, False: 8]
  ------------------
  803|      0|            return -1;
  804|      0|        }
  805|      8|    }
  806|      6|    return 0;
  807|      6|}
typeobject.c:is_readying:
  516|  4.80k|{
  517|  4.80k|    if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  4.80k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (517:9): [True: 832, False: 3.97k]
  ------------------
  518|    832|        PyInterpreterState *interp = _PyInterpreterState_GET();
  519|    832|        managed_static_type_state *state = managed_static_type_state_get(interp, type);
  520|    832|        assert(state != NULL);
  ------------------
  |  Branch (520:9): [True: 832, False: 0]
  ------------------
  521|    832|        return state->readying;
  522|    832|    }
  523|  3.97k|    return (type->tp_flags & Py_TPFLAGS_READYING) != 0;
  ------------------
  |  |  521|  3.97k|#define Py_TPFLAGS_READYING (1UL << 13)
  ------------------
  524|  4.80k|}
typeobject.c:_PyType_DocWithoutSignature:
  923|    490|{
  924|    490|    const char *doc = find_signature(name, internal_doc);
  925|       |
  926|    490|    if (doc) {
  ------------------
  |  Branch (926:9): [True: 218, False: 272]
  ------------------
  927|    218|        doc = skip_signature(doc);
  928|    218|        if (doc)
  ------------------
  |  Branch (928:13): [True: 194, False: 24]
  ------------------
  929|    194|            return doc;
  930|    218|        }
  931|    296|    return internal_doc;
  932|    490|}
typeobject.c:find_signature:
  844|    490|{
  845|    490|    const char *dot;
  846|    490|    size_t length;
  847|       |
  848|    490|    if (!doc)
  ------------------
  |  Branch (848:9): [True: 0, False: 490]
  ------------------
  849|      0|        return NULL;
  850|       |
  851|    490|    assert(name != NULL);
  ------------------
  |  Branch (851:5): [True: 490, False: 0]
  ------------------
  852|       |
  853|       |    /* for dotted names like classes, only use the last component */
  854|    490|    dot = strrchr(name, '.');
  855|    490|    if (dot)
  ------------------
  |  Branch (855:9): [True: 261, False: 229]
  ------------------
  856|    261|        name = dot + 1;
  857|       |
  858|    490|    length = strlen(name);
  859|    490|    if (strncmp(doc, name, length))
  ------------------
  |  Branch (859:9): [True: 240, False: 250]
  ------------------
  860|    240|        return NULL;
  861|    250|    doc += length;
  862|    250|    if (*doc != '(')
  ------------------
  |  Branch (862:9): [True: 32, False: 218]
  ------------------
  863|     32|        return NULL;
  864|    218|    return doc;
  865|    250|}
typeobject.c:skip_signature:
  875|    218|{
  876|  9.76k|    while (*doc) {
  ------------------
  |  Branch (876:12): [True: 9.76k, False: 8]
  ------------------
  877|  9.76k|        if ((*doc == *SIGNATURE_END_MARKER) &&
  ------------------
  |  |  867|  9.76k|#define SIGNATURE_END_MARKER         ")\n--\n\n"
  ------------------
  |  Branch (877:13): [True: 308, False: 9.45k]
  ------------------
  878|    308|            !strncmp(doc, SIGNATURE_END_MARKER, SIGNATURE_END_MARKER_LENGTH))
  ------------------
  |  |  867|    308|#define SIGNATURE_END_MARKER         ")\n--\n\n"
  ------------------
                          !strncmp(doc, SIGNATURE_END_MARKER, SIGNATURE_END_MARKER_LENGTH))
  ------------------
  |  |  868|    308|#define SIGNATURE_END_MARKER_LENGTH  6
  ------------------
  |  Branch (878:13): [True: 194, False: 114]
  ------------------
  879|    194|            return doc + SIGNATURE_END_MARKER_LENGTH;
  ------------------
  |  |  868|    194|#define SIGNATURE_END_MARKER_LENGTH  6
  ------------------
  880|  9.56k|        if ((*doc == '\n') && (doc[1] == '\n'))
  ------------------
  |  Branch (880:13): [True: 122, False: 9.44k]
  |  Branch (880:31): [True: 16, False: 106]
  ------------------
  881|     16|            return NULL;
  882|  9.55k|        doc++;
  883|  9.55k|    }
  884|      8|    return NULL;
  885|    218|}
typeobject.c:type_from_ref:
  222|      8|{
  223|      8|    PyObject *obj = _PyWeakref_GET_REF(ref);
  224|      8|    if (obj == NULL) {
  ------------------
  |  Branch (224:9): [True: 0, False: 8]
  ------------------
  225|      0|        return NULL;
  226|      0|    }
  227|      8|    return _PyType_CAST(obj);
  ------------------
  |  |  770|      8|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (227:12): [True: 8, False: 0]
  ------------------
  228|      8|}
typeobject.c:set_version_unlocked:
 1099|  1.04k|{
 1100|  1.04k|    assert(version == 0 || (tp->tp_versions_used != _Py_ATTR_CACHE_UNUSED));
  ------------------
  |  Branch (1100:5): [True: 173, False: 873]
  |  Branch (1100:5): [True: 873, False: 0]
  ------------------
 1101|  1.04k|#ifndef Py_GIL_DISABLED
 1102|  1.04k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 1103|       |    // lookup the old version and set to null
 1104|  1.04k|    if (tp->tp_version_tag != 0) {
  ------------------
  |  Branch (1104:9): [True: 173, False: 873]
  ------------------
 1105|    173|        PyTypeObject **slot =
 1106|    173|            interp->types.type_version_cache
 1107|    173|            + (tp->tp_version_tag % TYPE_VERSION_CACHE_SIZE);
  ------------------
  |  |  583|    173|#define TYPE_VERSION_CACHE_SIZE (1<<12)  /* Must be a power of 2 */
  ------------------
 1108|    173|        *slot = NULL;
 1109|    173|    }
 1110|  1.04k|    if (version) {
  ------------------
  |  Branch (1110:9): [True: 873, False: 173]
  ------------------
 1111|    873|        tp->tp_versions_used++;
 1112|    873|    }
 1113|       |#else
 1114|       |    if (version) {
 1115|       |        _Py_atomic_add_uint16(&tp->tp_versions_used, 1);
 1116|       |    }
 1117|       |#endif
 1118|  1.04k|    FT_ATOMIC_STORE_UINT_RELAXED(tp->tp_version_tag, version);
  ------------------
  |  |  190|  1.04k|#define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) value = new_value
  ------------------
 1119|  1.04k|#ifndef Py_GIL_DISABLED
 1120|  1.04k|    if (version != 0) {
  ------------------
  |  Branch (1120:9): [True: 873, False: 173]
  ------------------
 1121|    873|        PyTypeObject **slot =
 1122|    873|            interp->types.type_version_cache
 1123|    873|            + (version % TYPE_VERSION_CACHE_SIZE);
  ------------------
  |  |  583|    873|#define TYPE_VERSION_CACHE_SIZE (1<<12)  /* Must be a power of 2 */
  ------------------
 1124|    873|        *slot = tp;
 1125|    873|    }
 1126|  1.04k|#endif
 1127|  1.04k|}
typeobject.c:assign_version_tag:
 1375|    987|{
 1376|    987|    ASSERT_TYPE_LOCK_HELD();
 1377|       |
 1378|       |    /* Ensure that the tp_version_tag is valid.
 1379|       |     * To respect the invariant, this must first be done on all super classes.
 1380|       |     * Return 0 if this cannot be done, 1 if tp_version_tag is set.
 1381|       |    */
 1382|    987|    if (type->tp_version_tag != 0) {
  ------------------
  |  Branch (1382:9): [True: 506, False: 481]
  ------------------
 1383|    506|        return 1;
 1384|    506|    }
 1385|    481|    if (!_PyType_HasFeature(type, Py_TPFLAGS_READY)) {
  ------------------
  |  |  518|    481|#define Py_TPFLAGS_READY (1UL << 12)
  ------------------
  |  Branch (1385:9): [True: 0, False: 481]
  ------------------
 1386|      0|        return 0;
 1387|      0|    }
 1388|    481|    if (type->tp_versions_used >= MAX_VERSIONS_PER_CLASS) {
  ------------------
  |  | 1355|    481|#define MAX_VERSIONS_PER_CLASS 1000
  ------------------
  |  Branch (1388:9): [True: 0, False: 481]
  ------------------
 1389|       |        /* (this includes `tp_versions_used == _Py_ATTR_CACHE_UNUSED`) */
 1390|      0|        return 0;
 1391|      0|    }
 1392|       |
 1393|    481|    PyObject *bases = lookup_tp_bases(type);
 1394|    481|    Py_ssize_t n = PyTuple_GET_SIZE(bases);
  ------------------
  |  |   27|    481|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    481|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    481|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1395|  1.03k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (1395:28): [True: 556, False: 481]
  ------------------
 1396|    556|        PyObject *b = PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|    556|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    556|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    556|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1396:23): [True: 556, False: 0]
  ------------------
 1397|    556|        if (!assign_version_tag(interp, _PyType_CAST(b))) {
  ------------------
  |  |  770|    556|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    556|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1397:13): [True: 0, False: 556]
  |  Branch (1397:41): [True: 556, False: 0]
  ------------------
 1398|      0|            return 0;
 1399|      0|        }
 1400|    556|    }
 1401|    481|    if (type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) {
  ------------------
  |  |  500|    481|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (1401:9): [True: 24, False: 457]
  ------------------
 1402|       |        /* static types */
 1403|     24|        unsigned int next_version_tag = next_global_version_tag();
 1404|     24|        if (next_version_tag == 0) {
  ------------------
  |  Branch (1404:13): [True: 0, False: 24]
  ------------------
 1405|       |            /* We have run out of version numbers */
 1406|      0|            return 0;
 1407|      0|        }
 1408|     24|        set_version_unlocked(type, next_version_tag);
 1409|     24|        assert (type->tp_version_tag <= _Py_MAX_GLOBAL_TYPE_VERSION_TAG);
  ------------------
  |  Branch (1409:9): [True: 24, False: 0]
  ------------------
 1410|     24|    }
 1411|    457|    else {
 1412|       |        /* heap types */
 1413|    457|        if (NEXT_VERSION_TAG(interp) == 0) {
  ------------------
  |  |   47|    457|    (interp)->types.next_version_tag
  ------------------
  |  Branch (1413:13): [True: 0, False: 457]
  ------------------
 1414|       |            /* We have run out of version numbers */
 1415|      0|            return 0;
 1416|      0|        }
 1417|    457|        set_version_unlocked(type, NEXT_VERSION_TAG(interp)++);
  ------------------
  |  |   47|    457|    (interp)->types.next_version_tag
  ------------------
 1418|    457|        assert (type->tp_version_tag != 0);
  ------------------
  |  Branch (1418:9): [True: 457, False: 0]
  ------------------
 1419|    457|    }
 1420|    481|    return 1;
 1421|    481|}
typeobject.c:next_global_version_tag:
 1362|    416|{
 1363|    416|    unsigned int old;
 1364|    416|    do {
 1365|    416|        old = _Py_atomic_load_uint_relaxed(&_PyRuntime.types.next_version_tag);
 1366|    416|        if (old >= _Py_MAX_GLOBAL_TYPE_VERSION_TAG) {
  ------------------
  |  |   35|    416|#define _Py_MAX_GLOBAL_TYPE_VERSION_TAG (_Py_TYPE_BASE_VERSION_TAG - 1)
  |  |  ------------------
  |  |  |  |   34|    416|#define _Py_TYPE_BASE_VERSION_TAG (2<<16)
  |  |  ------------------
  ------------------
  |  Branch (1366:13): [True: 0, False: 416]
  ------------------
 1367|      0|            return 0;
 1368|      0|        }
 1369|    416|    } while (!_Py_atomic_compare_exchange_uint(&_PyRuntime.types.next_version_tag, &old, old + 1));
  ------------------
  |  Branch (1369:14): [True: 0, False: 416]
  ------------------
 1370|    416|    return old + 1;
 1371|    416|}
typeobject.c:type_qualname:
 1501|     25|{
 1502|     25|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     25|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1503|     25|    if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
  ------------------
  |  |  503|     25|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (1503:9): [True: 2, False: 23]
  ------------------
 1504|      2|        PyHeapTypeObject* et = (PyHeapTypeObject*)type;
 1505|      2|        return Py_NewRef(et->ht_qualname);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1506|      2|    }
 1507|     23|    else {
 1508|     23|        return PyUnicode_FromString(_PyType_Name(type));
 1509|     23|    }
 1510|     25|}
typeobject.c:type_module:
 1574|     25|{
 1575|     25|    PyObject *mod;
 1576|     25|    if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
  ------------------
  |  |  503|     25|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (1576:9): [True: 2, False: 23]
  ------------------
 1577|      2|        PyObject *dict = lookup_tp_dict(type);
 1578|      2|        if (PyDict_GetItemRef(dict, &_Py_ID(__module__), &mod) == 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1578:13): [True: 0, False: 2]
  ------------------
 1579|      0|            PyErr_Format(PyExc_AttributeError, "__module__");
 1580|      0|        }
 1581|      2|    }
 1582|     23|    else {
 1583|     23|        const char *s = strrchr(type->tp_name, '.');
 1584|     23|        if (s != NULL) {
  ------------------
  |  Branch (1584:13): [True: 17, False: 6]
  ------------------
 1585|     17|            mod = PyUnicode_FromStringAndSize(
 1586|     17|                type->tp_name, (Py_ssize_t)(s - type->tp_name));
 1587|     17|            if (mod != NULL) {
  ------------------
  |  Branch (1587:17): [True: 17, False: 0]
  ------------------
 1588|     17|                PyInterpreterState *interp = _PyInterpreterState_GET();
 1589|     17|                _PyUnicode_InternMortal(interp, &mod);
 1590|     17|            }
 1591|     17|        }
 1592|      6|        else {
 1593|      6|            mod = &_Py_ID(builtins);
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1594|      6|        }
 1595|     23|    }
 1596|     25|    return mod;
 1597|     25|}
typeobject.c:is_subtype_with_mro:
 2875|  19.4M|{
 2876|  19.4M|    int res;
 2877|  19.4M|    if (a_mro != NULL) {
  ------------------
  |  Branch (2877:9): [True: 19.4M, False: 2.09k]
  ------------------
 2878|       |        /* Deal with multiple inheritance without recursion
 2879|       |           by walking the MRO tuple */
 2880|  19.4M|        Py_ssize_t i, n;
 2881|  19.4M|        assert(PyTuple_Check(a_mro));
  ------------------
  |  Branch (2881:9): [True: 19.4M, False: 0]
  ------------------
 2882|  19.4M|        n = PyTuple_GET_SIZE(a_mro);
  ------------------
  |  |   27|  19.4M|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  19.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2883|  19.4M|        res = 0;
 2884|  64.0M|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (2884:21): [True: 44.8M, False: 19.1M]
  ------------------
 2885|  89.7M|            if (PyTuple_GET_ITEM(a_mro, i) == (PyObject *)b) {
  ------------------
  |  |   29|  44.8M|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  44.8M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2885:17): [True: 44.8M, False: 0]
  |  Branch (2885:17): [True: 265k, False: 44.6M]
  ------------------
 2886|   265k|                res = 1;
 2887|   265k|                break;
 2888|   265k|            }
 2889|  44.8M|        }
 2890|  19.4M|    }
 2891|  2.09k|    else {
 2892|       |        /* a is not completely initialized yet; follow tp_base */
 2893|  2.09k|        res = type_is_subtype_base_chain(a, b);
 2894|  2.09k|    }
 2895|  19.4M|    return res;
 2896|  19.4M|}
typeobject.c:type_is_subtype_base_chain:
 2863|  2.09k|{
 2864|  2.09k|    do {
 2865|  2.09k|        if (a == b)
  ------------------
  |  Branch (2865:13): [True: 6, False: 2.09k]
  ------------------
 2866|      6|            return 1;
 2867|  2.09k|        a = a->tp_base;
 2868|  2.09k|    } while (a != NULL);
  ------------------
  |  Branch (2868:14): [True: 8, False: 2.08k]
  ------------------
 2869|       |
 2870|  2.08k|    return (b == &PyBaseObject_Type);
 2871|  2.09k|}
typeobject.c:maybe_call_special_no_args:
 3140|      4|{
 3141|      4|    PyThreadState *tstate = _PyThreadState_GET();
 3142|      4|    _PyCStackRef cref;
 3143|      4|    _PyThreadState_PushCStackRef(tstate, &cref);
 3144|       |
 3145|      4|    PyObject *res = NULL;
 3146|      4|    int unbound = lookup_maybe_method(self, attr, &cref.ref);
 3147|      4|    PyObject *func = PyStackRef_AsPyObjectBorrow(cref.ref);
 3148|      4|    if (attr_is_none != NULL) {
  ------------------
  |  Branch (3148:9): [True: 4, False: 0]
  ------------------
 3149|      4|        *attr_is_none = (func == Py_None);
  ------------------
  |  |  616|      4|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3150|      4|    }
 3151|      4|    if (func != NULL && (func != Py_None || attr_is_none == NULL)) {
  ------------------
  |  |  616|      8|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3151:9): [True: 4, False: 0]
  |  Branch (3151:26): [True: 4, False: 0]
  |  Branch (3151:45): [True: 0, False: 0]
  ------------------
 3152|      4|        res = call_unbound_noarg(unbound, func, self);
 3153|      4|    }
 3154|      4|    _PyThreadState_PopCStackRef(tstate, &cref);
 3155|      4|    return res;
 3156|      4|}
typeobject.c:lookup_maybe_method:
 3009|     19|{
 3010|     19|    return lookup_method_ex(self, attr, out, 0);
 3011|     19|}
typeobject.c:lookup_method_ex:
 2975|  50.0k|{
 2976|  50.0k|    _PyType_LookupStackRefAndVersion(Py_TYPE(self), attr, out);
  ------------------
  |  |  213|  50.0k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2977|  50.0k|    if (PyStackRef_IsNull(*out)) {
  ------------------
  |  |  482|  50.0k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  50.0k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  50.0k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 50.0k]
  |  |  ------------------
  ------------------
 2978|      0|        if (raise_attribute_error) {
  ------------------
  |  Branch (2978:13): [True: 0, False: 0]
  ------------------
 2979|      0|            PyErr_SetObject(PyExc_AttributeError, attr);
 2980|      0|        }
 2981|      0|        return -1;
 2982|      0|    }
 2983|       |
 2984|  50.0k|    PyObject *value = PyStackRef_AsPyObjectBorrow(*out);
 2985|  50.0k|    if (_PyType_HasFeature(Py_TYPE(value), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  213|  50.0k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (_PyType_HasFeature(Py_TYPE(value), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  534|  50.0k|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (2985:9): [True: 50.0k, False: 0]
  ------------------
 2986|       |        /* Avoid temporary PyMethodObject */
 2987|  50.0k|        return 1;
 2988|  50.0k|    }
 2989|       |
 2990|      0|    descrgetfunc f = Py_TYPE(value)->tp_descr_get;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2991|      0|    if (f != NULL) {
  ------------------
  |  Branch (2991:9): [True: 0, False: 0]
  ------------------
 2992|      0|        value = f(value, self, (PyObject *)(Py_TYPE(self)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2993|      0|        PyStackRef_CLEAR(*out);
  ------------------
  |  |  732|      0|    do { \
  |  |  733|      0|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|      0|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|      0|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|      0|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2994|      0|        if (value == NULL) {
  ------------------
  |  Branch (2994:13): [True: 0, False: 0]
  ------------------
 2995|      0|            if (!raise_attribute_error &&
  ------------------
  |  Branch (2995:17): [True: 0, False: 0]
  ------------------
 2996|      0|                PyErr_ExceptionMatches(PyExc_AttributeError))
  ------------------
  |  Branch (2996:17): [True: 0, False: 0]
  ------------------
 2997|      0|            {
 2998|      0|                PyErr_Clear();
 2999|      0|            }
 3000|      0|            return -1;
 3001|      0|        }
 3002|      0|        *out = PyStackRef_FromPyObjectSteal(value);
 3003|      0|    }
 3004|      0|    return 0;
 3005|      0|}
typeobject.c:call_unbound_noarg:
 3037|     89|{
 3038|     89|    if (unbound) {
  ------------------
  |  Branch (3038:9): [True: 89, False: 0]
  ------------------
 3039|     89|        return PyObject_CallOneArg(func, self);
 3040|     89|    }
 3041|      0|    else {
 3042|      0|        return _PyObject_CallNoArgs(func);
 3043|      0|    }
 3044|     89|}
typeobject.c:maybe_call_special_one_arg:
 3161|      6|{
 3162|      6|    PyThreadState *tstate = _PyThreadState_GET();
 3163|      6|    _PyCStackRef cref;
 3164|      6|    _PyThreadState_PushCStackRef(tstate, &cref);
 3165|       |
 3166|      6|    PyObject *res = NULL;
 3167|      6|    int unbound = lookup_maybe_method(self, attr, &cref.ref);
 3168|      6|    PyObject *func = PyStackRef_AsPyObjectBorrow(cref.ref);
 3169|      6|    if (attr_is_none != NULL) {
  ------------------
  |  Branch (3169:9): [True: 6, False: 0]
  ------------------
 3170|      6|        *attr_is_none = (func == Py_None);
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3171|      6|    }
 3172|      6|    if (func != NULL && (func != Py_None || attr_is_none == NULL)) {
  ------------------
  |  |  616|     12|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3172:9): [True: 6, False: 0]
  |  Branch (3172:26): [True: 6, False: 0]
  |  Branch (3172:45): [True: 0, False: 0]
  ------------------
 3173|      6|        PyObject *args[] = { self, arg };
 3174|      6|        res = vectorcall_unbound(tstate, unbound, func, args, 2);
 3175|      6|    }
 3176|      6|    _PyThreadState_PopCStackRef(tstate, &cref);
 3177|      6|    return res;
 3178|      6|}
typeobject.c:vectorcall_unbound:
 3023|    613|{
 3024|    613|    size_t nargsf = nargs;
 3025|    613|    if (!unbound) {
  ------------------
  |  Branch (3025:9): [True: 0, False: 613]
  ------------------
 3026|       |        /* Skip self argument, freeing up args[0] to use for
 3027|       |         * PY_VECTORCALL_ARGUMENTS_OFFSET */
 3028|      0|        args++;
 3029|      0|        nargsf = nargsf - 1 + PY_VECTORCALL_ARGUMENTS_OFFSET;
  ------------------
  |  |  287|      0|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 3030|      0|    }
 3031|    613|    EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_SLOT, func);
  ------------------
  |  |   80|    613|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  ------------------
 3032|       |    return _PyObject_VectorcallTstate(tstate, func, args, nargsf, NULL);
 3033|    613|}
typeobject.c:type_from_slots_or_spec:
 5227|    131|{
 5228|       |    /* Invariant: A non-NULL value in one of these means this function holds
 5229|       |     * a strong reference or owns allocated memory.
 5230|       |     * These get decrefed/freed/returned at the end, on both success and error.
 5231|       |     */
 5232|    131|    PyHeapTypeObject *res = NULL;
 5233|    131|    PyTypeObject *type;
 5234|    131|    PyObject *bases = NULL;
 5235|    131|    char *tp_doc = NULL;
 5236|    131|    PyObject *ht_name = NULL;
 5237|    131|    char *_ht_tpname = NULL;
 5238|       |
 5239|    131|    int r;
 5240|       |
 5241|       |    /* First pass of slots */
 5242|       |
 5243|    131|    Py_ssize_t nmembers = 0;
 5244|    131|    const PyMemberDef *weaklistoffset_member = NULL;
 5245|    131|    const PyMemberDef *dictoffset_member = NULL;
 5246|    131|    const PyMemberDef *vectorcalloffset_member = NULL;
 5247|    131|    Py_ssize_t basicsize = 0;
 5248|    131|    Py_ssize_t extra_basicsize = 0;
 5249|    131|    Py_ssize_t itemsize = 0;
 5250|    131|    int flags = 0;
 5251|    131|    void *token = NULL;
 5252|       |
 5253|    131|    bool have_relative_members = false;
 5254|    131|    Py_ssize_t max_relative_offset = 0;
 5255|       |
 5256|    131|    PyObject *bases_slot = NULL; /* borrowed from the slots */
 5257|       |
 5258|    131|    _PySlotIterator it;
 5259|       |
 5260|    131|    if (spec) {
  ------------------
  |  Branch (5260:9): [True: 131, False: 0]
  ------------------
 5261|    131|        assert(!slots);
  ------------------
  |  Branch (5261:9): [True: 131, False: 0]
  ------------------
 5262|    131|        if (spec->basicsize > 0) {
  ------------------
  |  Branch (5262:13): [True: 125, False: 6]
  ------------------
 5263|    125|            basicsize = spec->basicsize;
 5264|    125|        }
 5265|    131|        if (spec->basicsize < 0) {
  ------------------
  |  Branch (5265:13): [True: 0, False: 131]
  ------------------
 5266|      0|            extra_basicsize = -spec->basicsize;
 5267|      0|        }
 5268|    131|        itemsize = spec->itemsize;
 5269|    131|        flags = spec->flags;
 5270|    131|        _PySlotIterator_InitLegacy(&it, spec->slots, _PySlot_KIND_TYPE);
 5271|    131|        it.name = spec->name;
 5272|    131|    }
 5273|      0|    else {
 5274|      0|        assert(!spec);
  ------------------
  |  Branch (5274:9): [True: 0, False: 0]
  ------------------
 5275|      0|        assert(!metaclass);
  ------------------
  |  Branch (5275:9): [True: 0, False: 0]
  ------------------
 5276|      0|        assert(!module);
  ------------------
  |  Branch (5276:9): [True: 0, False: 0]
  ------------------
 5277|      0|        assert(!bases_in);
  ------------------
  |  Branch (5277:9): [True: 0, False: 0]
  ------------------
 5278|      0|        _PySlotIterator_Init(&it, slots, _PySlot_KIND_TYPE);
 5279|      0|    }
 5280|       |
 5281|    131|    #define NO_SPEC                                         \
 5282|    131|        if (spec) {                                         \
 5283|    131|            PyErr_Format(                                   \
 5284|    131|                PyExc_SystemError,                          \
 5285|    131|                "%s must not be used with PyType_Spec",     \
 5286|    131|                _PySlot_GetName(it.current.sl_id));         \
 5287|    131|            goto finally;                                   \
 5288|    131|        }                                                   \
 5289|       |        /////////////////////////////////////////////////////
 5290|       |
 5291|  1.14k|    while (_PySlotIterator_Next(&it)) {
  ------------------
  |  Branch (5291:12): [True: 1.01k, False: 131]
  ------------------
 5292|  1.01k|        switch (it.current.sl_id) {
  ------------------
  |  Branch (5292:17): [True: 175, False: 839]
  ------------------
 5293|      0|        case Py_slot_invalid:
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  |  Branch (5293:9): [True: 0, False: 1.01k]
  ------------------
 5294|      0|            goto finally;
 5295|      0|        case Py_tp_name:
  ------------------
  |  |  103|      0|#define Py_tp_name 95
  ------------------
  |  Branch (5295:9): [True: 0, False: 1.01k]
  ------------------
 5296|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5297|      0|            it.name = it.current.sl_ptr;
 5298|      0|            break;
 5299|      0|        case Py_tp_metaclass:
  ------------------
  |  |  115|      0|#define Py_tp_metaclass 107
  ------------------
  |  Branch (5299:9): [True: 0, False: 1.01k]
  ------------------
 5300|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5301|      0|            metaclass = it.current.sl_ptr;
 5302|      0|            break;
 5303|      0|        case Py_tp_module:
  ------------------
  |  |  116|      0|#define Py_tp_module 108
  ------------------
  |  Branch (5303:9): [True: 0, False: 1.01k]
  ------------------
 5304|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5305|      0|            module = it.current.sl_ptr;
 5306|      0|            break;
 5307|      0|        case Py_tp_bases:
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (5307:9): [True: 0, False: 1.01k]
  ------------------
 5308|      0|            bases_slot = it.current.sl_ptr;
 5309|      0|            break;
 5310|      0|        case Py_tp_base:
  ------------------
  |  |   56|      0|#define Py_tp_base 48
  ------------------
  |  Branch (5310:9): [True: 0, False: 1.01k]
  ------------------
 5311|      0|            if (!_PySlotIterator_SawSlot(&it, Py_tp_bases)) {
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (5311:17): [True: 0, False: 0]
  ------------------
 5312|      0|                bases_slot = it.current.sl_ptr;
 5313|      0|            }
 5314|      0|            break;
 5315|      0|        case Py_tp_basicsize:
  ------------------
  |  |  104|      0|#define Py_tp_basicsize 96
  ------------------
  |  Branch (5315:9): [True: 0, False: 1.01k]
  ------------------
 5316|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5317|      0|            basicsize = it.current.sl_size;
 5318|      0|            if (basicsize <= 0) {
  ------------------
  |  Branch (5318:17): [True: 0, False: 0]
  ------------------
 5319|      0|                PyErr_SetString(
 5320|      0|                    PyExc_SystemError,
 5321|      0|                    "Py_tp_basicsize must be positive");
 5322|      0|                goto finally;
 5323|      0|            }
 5324|      0|            break;
 5325|      0|        case Py_tp_extra_basicsize:
  ------------------
  |  |  105|      0|#define Py_tp_extra_basicsize 97
  ------------------
  |  Branch (5325:9): [True: 0, False: 1.01k]
  ------------------
 5326|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5327|      0|            extra_basicsize = it.current.sl_size;
 5328|      0|            if (extra_basicsize <= 0) {
  ------------------
  |  Branch (5328:17): [True: 0, False: 0]
  ------------------
 5329|      0|                PyErr_SetString(
 5330|      0|                    PyExc_SystemError,
 5331|      0|                    "Py_tp_extra_basicsize must be positive");
 5332|      0|                goto finally;
 5333|      0|            }
 5334|      0|            break;
 5335|      0|        case Py_tp_itemsize:
  ------------------
  |  |  106|      0|#define Py_tp_itemsize 98
  ------------------
  |  Branch (5335:9): [True: 0, False: 1.01k]
  ------------------
 5336|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5337|      0|            itemsize = it.current.sl_size;
 5338|      0|            if (itemsize <= 0) {
  ------------------
  |  Branch (5338:17): [True: 0, False: 0]
  ------------------
 5339|      0|                PyErr_SetString(
 5340|      0|                    PyExc_SystemError,
 5341|      0|                    "Py_tp_itemsize must be positive");
 5342|      0|                goto finally;
 5343|      0|            }
 5344|      0|            break;
 5345|      0|        case Py_tp_flags:
  ------------------
  |  |  107|      0|#define Py_tp_flags 99
  ------------------
  |  Branch (5345:9): [True: 0, False: 1.01k]
  ------------------
 5346|      0|            NO_SPEC;
  ------------------
  |  | 5282|      0|        if (spec) {                                         \
  |  |  ------------------
  |  |  |  Branch (5282:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5283|      0|            PyErr_Format(                                   \
  |  | 5284|      0|                PyExc_SystemError,                          \
  |  | 5285|      0|                "%s must not be used with PyType_Spec",     \
  |  | 5286|      0|                _PySlot_GetName(it.current.sl_id));         \
  |  | 5287|      0|            goto finally;                                   \
  |  | 5288|      0|        }                                                   \
  ------------------
 5347|      0|            flags = (int)it.current.sl_uint64;
 5348|      0|            break;
 5349|     75|        case Py_tp_members:
  ------------------
  |  |   80|     75|#define Py_tp_members 72
  ------------------
  |  Branch (5349:9): [True: 75, False: 939]
  ------------------
 5350|     75|            for (const PyMemberDef *memb = it.current.sl_ptr;
 5351|    351|                 memb->name != NULL;
  ------------------
  |  Branch (5351:18): [True: 276, False: 75]
  ------------------
 5352|    276|                 memb++)
 5353|    276|            {
 5354|    276|                nmembers++;
 5355|    276|                if (memb->flags & Py_RELATIVE_OFFSET) {
  ------------------
  |  |   86|    276|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
  |  Branch (5355:21): [True: 0, False: 276]
  ------------------
 5356|      0|                    if (memb->offset < 0) {
  ------------------
  |  Branch (5356:25): [True: 0, False: 0]
  ------------------
 5357|      0|                        PyErr_SetString(
 5358|      0|                            PyExc_SystemError,
 5359|      0|                            "Member offset must not be negative");
 5360|      0|                        goto finally;
 5361|      0|                    }
 5362|      0|                    have_relative_members = true;
 5363|      0|                    max_relative_offset = Py_MAX(max_relative_offset,
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5364|      0|                                                 memb->offset);
 5365|      0|                }
 5366|    276|                if (strcmp(memb->name, "__weaklistoffset__") == 0) {
  ------------------
  |  Branch (5366:21): [True: 27, False: 249]
  ------------------
 5367|     27|                    weaklistoffset_member = memb;
 5368|     27|                }
 5369|    249|                else if (strcmp(memb->name, "__dictoffset__") == 0) {
  ------------------
  |  Branch (5369:26): [True: 21, False: 228]
  ------------------
 5370|     21|                    dictoffset_member = memb;
 5371|     21|                }
 5372|    228|                else if (strcmp(memb->name, "__vectorcalloffset__") == 0) {
  ------------------
  |  Branch (5372:26): [True: 4, False: 224]
  ------------------
 5373|      4|                    vectorcalloffset_member = memb;
 5374|      4|                }
 5375|    276|            }
 5376|     75|            break;
 5377|     75|        case Py_tp_token:
  ------------------
  |  |   91|      1|#define Py_tp_token 83
  ------------------
  |  Branch (5377:9): [True: 1, False: 1.01k]
  ------------------
 5378|      1|            token = it.current.sl_ptr;
 5379|      1|            if (token == Py_TP_USE_SPEC) {
  ------------------
  |  |  365|      1|#define Py_TP_USE_SPEC NULL
  ------------------
  |  Branch (5379:17): [True: 1, False: 0]
  ------------------
 5380|      1|                if (!spec) {
  ------------------
  |  Branch (5380:21): [True: 0, False: 1]
  ------------------
 5381|      0|                    PyErr_SetString(
 5382|      0|                        PyExc_SystemError,
 5383|      0|                        "Py_tp_token: Py_TP_USE_SPEC (NULL) can only be "
 5384|      0|                        "used with PyType_Spec");
 5385|      0|                    goto finally;
 5386|      0|                }
 5387|      1|                token = spec;
 5388|      1|            }
 5389|      1|            break;
 5390|     99|        case Py_tp_doc:
  ------------------
  |  |   64|     99|#define Py_tp_doc 56
  ------------------
  |  Branch (5390:9): [True: 99, False: 915]
  ------------------
 5391|       |            /* For the docstring slot, which usually points to a static string
 5392|       |               literal, we need to make a copy */
 5393|     99|            if (it.current.sl_ptr == NULL) {
  ------------------
  |  Branch (5393:17): [True: 0, False: 99]
  ------------------
 5394|      0|                PyMem_Free(tp_doc);
 5395|      0|                tp_doc = NULL;
 5396|      0|            }
 5397|     99|            else {
 5398|     99|                size_t len = strlen(it.current.sl_ptr)+1;
 5399|     99|                tp_doc = PyMem_Malloc(len);
 5400|     99|                if (tp_doc == NULL) {
  ------------------
  |  Branch (5400:21): [True: 0, False: 99]
  ------------------
 5401|      0|                    PyErr_NoMemory();
 5402|      0|                    goto finally;
 5403|      0|                }
 5404|     99|                memcpy(tp_doc, it.current.sl_ptr, len);
 5405|     99|            }
 5406|     99|            break;
 5407|  1.01k|        }
 5408|  1.01k|    }
 5409|    131|    #undef NO_SPEC
 5410|       |
 5411|       |    /* Required slots & bad combinations */
 5412|       |
 5413|    131|    if (it.name == NULL) {
  ------------------
  |  Branch (5413:9): [True: 0, False: 131]
  ------------------
 5414|      0|        if (spec) {
  ------------------
  |  Branch (5414:13): [True: 0, False: 0]
  ------------------
 5415|      0|            PyErr_SetString(PyExc_SystemError,
 5416|      0|                            "Type spec does not define the name field.");
 5417|      0|        }
 5418|      0|        else {
 5419|      0|            PyErr_SetString(PyExc_SystemError,
 5420|      0|                            "Py_tp_name slot is required.");
 5421|      0|        }
 5422|      0|        goto finally;
 5423|      0|    }
 5424|       |
 5425|    131|    if (_PySlotIterator_SawSlot(&it, Py_tp_basicsize)
  ------------------
  |  |  104|    131|#define Py_tp_basicsize 96
  ------------------
  |  Branch (5425:9): [True: 0, False: 131]
  ------------------
 5426|      0|        && _PySlotIterator_SawSlot(&it, Py_tp_extra_basicsize))
  ------------------
  |  |  105|      0|#define Py_tp_extra_basicsize 97
  ------------------
  |  Branch (5426:12): [True: 0, False: 0]
  ------------------
 5427|      0|    {
 5428|      0|        PyErr_Format(
 5429|      0|            PyExc_SystemError,
 5430|      0|            "type %s: Py_tp_basicsize and Py_tp_extra_basicsize are "
 5431|      0|            "mutually exclusive",
 5432|      0|            it.name);
 5433|      0|        goto finally;
 5434|      0|    }
 5435|       |
 5436|    131|    if (have_relative_members) {
  ------------------
  |  Branch (5436:9): [True: 0, False: 131]
  ------------------
 5437|      0|        if (!extra_basicsize) {
  ------------------
  |  Branch (5437:13): [True: 0, False: 0]
  ------------------
 5438|      0|            PyErr_SetString(
 5439|      0|                PyExc_SystemError,
 5440|      0|                "With Py_RELATIVE_OFFSET, basicsize must be extended");
 5441|      0|            goto finally;
 5442|      0|        }
 5443|      0|        if (max_relative_offset >= extra_basicsize) {
  ------------------
  |  Branch (5443:13): [True: 0, False: 0]
  ------------------
 5444|      0|            PyErr_SetString(
 5445|      0|                PyExc_SystemError,
 5446|      0|                "Member offset out of range (0..extra_basicsize)");
 5447|      0|            goto finally;
 5448|      0|        }
 5449|      0|    }
 5450|       |
 5451|       |    /* Prepare the type name and qualname */
 5452|       |
 5453|    131|    assert(it.name);
  ------------------
  |  Branch (5453:5): [True: 131, False: 0]
  ------------------
 5454|    131|    const char *s = strrchr(it.name, '.');
 5455|    131|    if (s == NULL) {
  ------------------
  |  Branch (5455:9): [True: 0, False: 131]
  ------------------
 5456|      0|        s = it.name;
 5457|      0|    }
 5458|    131|    else {
 5459|    131|        s++;
 5460|    131|    }
 5461|       |
 5462|    131|    ht_name = PyUnicode_FromString(s);
 5463|    131|    if (!ht_name) {
  ------------------
  |  Branch (5463:9): [True: 0, False: 131]
  ------------------
 5464|      0|        goto finally;
 5465|      0|    }
 5466|       |
 5467|       |    /* Copy the name to a buffer we own.
 5468|       |    *
 5469|       |    * Unfortunately, we can't use tp_name directly (with some
 5470|       |    * flag saying that it should be deallocated with the type),
 5471|       |    * because tp_name is public API and may be set independently
 5472|       |    * of any such flag.
 5473|       |    * So, we use a separate buffer, _ht_tpname, that's always
 5474|       |    * deallocated with the type (if it's non-NULL).
 5475|       |    */
 5476|    131|    Py_ssize_t name_buf_len = strlen(it.name) + 1;
 5477|    131|    _ht_tpname = PyMem_Malloc(name_buf_len);
 5478|    131|    if (_ht_tpname == NULL) {
  ------------------
  |  Branch (5478:9): [True: 0, False: 131]
  ------------------
 5479|      0|        PyErr_NoMemory();
 5480|      0|        goto finally;
 5481|      0|    }
 5482|    131|    memcpy(_ht_tpname, it.name, name_buf_len);
 5483|       |
 5484|       |    /* Get a tuple of bases.
 5485|       |     * bases is a strong reference (unlike bases_in).
 5486|       |     * (This is convoluted for backwards compatibility -- preserving priority
 5487|       |     * of the various ways to specify bases)
 5488|       |     */
 5489|    131|    if (!bases_in) {
  ------------------
  |  Branch (5489:9): [True: 89, False: 42]
  ------------------
 5490|     89|        bases_in = bases_slot;
 5491|     89|    }
 5492|    131|    if (bases_in) {
  ------------------
  |  Branch (5492:9): [True: 42, False: 89]
  ------------------
 5493|     42|        if (PyTuple_Check(bases_in)) {
  ------------------
  |  |   27|     42|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     42|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5494|      0|            bases = Py_NewRef(bases_in);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5495|      0|        }
 5496|     42|        else {
 5497|     42|            bases = PyTuple_Pack(1, bases_in);
 5498|     42|        }
 5499|     42|    }
 5500|     89|    else {
 5501|     89|        bases = PyTuple_Pack(1, &PyBaseObject_Type);
 5502|     89|    }
 5503|    131|    if (!bases) {
  ------------------
  |  Branch (5503:9): [True: 0, False: 131]
  ------------------
 5504|      0|        goto finally;
 5505|      0|    }
 5506|       |
 5507|       |    /* If this is an immutable type, check if all bases are also immutable.
 5508|       |     * (This isn't necessary for static types: those can't have heap bases,
 5509|       |     * and only heap types can be mutable.)
 5510|       |     */
 5511|    131|    if (flags & Py_TPFLAGS_IMMUTABLETYPE) {
  ------------------
  |  |  500|    131|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (5511:9): [True: 107, False: 24]
  ------------------
 5512|    107|        if (check_immutable_bases(it.name, bases, 0) < 0) {
  ------------------
  |  Branch (5512:13): [True: 0, False: 107]
  ------------------
 5513|      0|            goto finally;
 5514|      0|        }
 5515|    107|    }
 5516|       |
 5517|       |    /* Calculate best base, and check that all bases are type objects */
 5518|    131|    PyTypeObject *base = find_best_base(bases);  // borrowed ref
 5519|    131|    if (base == NULL) {
  ------------------
  |  Branch (5519:9): [True: 0, False: 131]
  ------------------
 5520|      0|        goto finally;
 5521|      0|    }
 5522|       |
 5523|       |    /* Calculate the metaclass */
 5524|       |
 5525|    131|    if (!metaclass) {
  ------------------
  |  Branch (5525:9): [True: 131, False: 0]
  ------------------
 5526|    131|        metaclass = &PyType_Type;
 5527|    131|    }
 5528|    131|    metaclass = _PyType_CalculateMetaclass(metaclass, bases);
 5529|    131|    if (metaclass == NULL) {
  ------------------
  |  Branch (5529:9): [True: 0, False: 131]
  ------------------
 5530|      0|        goto finally;
 5531|      0|    }
 5532|    131|    if (!PyType_Check(metaclass)) {
  ------------------
  |  |  766|    131|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5532:9): [True: 0, False: 131]
  ------------------
 5533|      0|        PyErr_Format(PyExc_TypeError,
 5534|      0|                     "Metaclass '%R' is not a subclass of 'type'.",
 5535|      0|                     metaclass);
 5536|      0|        goto finally;
 5537|      0|    }
 5538|    131|    if (metaclass->tp_new && metaclass->tp_new != PyType_Type.tp_new) {
  ------------------
  |  Branch (5538:9): [True: 131, False: 0]
  |  Branch (5538:30): [True: 0, False: 131]
  ------------------
 5539|      0|        PyErr_SetString(
 5540|      0|            PyExc_TypeError,
 5541|      0|            "Metaclasses with custom tp_new are not supported.");
 5542|      0|        goto finally;
 5543|      0|    }
 5544|       |
 5545|       |    // find_best_base() should check Py_TPFLAGS_BASETYPE & raise a proper
 5546|       |    // exception, here we just check its work
 5547|    131|    assert(_PyType_HasFeature(base, Py_TPFLAGS_BASETYPE));
  ------------------
  |  Branch (5547:5): [True: 131, False: 0]
  ------------------
 5548|       |
 5549|       |    /* Calculate sizes */
 5550|       |
 5551|    131|    Py_ssize_t type_data_offset = basicsize;
 5552|    131|    if (extra_basicsize) {
  ------------------
  |  Branch (5552:9): [True: 0, False: 131]
  ------------------
 5553|       |        /* Extend */
 5554|      0|        assert(basicsize == 0);
  ------------------
  |  Branch (5554:9): [True: 0, False: 0]
  ------------------
 5555|      0|        type_data_offset = _align_up(base->tp_basicsize);
 5556|      0|        basicsize = type_data_offset + _align_up(extra_basicsize);
 5557|       |
 5558|       |        /* Inheriting variable-sized types is limited */
 5559|      0|        if (base->tp_itemsize
  ------------------
  |  Branch (5559:13): [True: 0, False: 0]
  ------------------
 5560|      0|            && !((base->tp_flags | flags) & Py_TPFLAGS_ITEMS_AT_END))
  ------------------
  |  |  548|      0|#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23)
  ------------------
  |  Branch (5560:16): [True: 0, False: 0]
  ------------------
 5561|      0|        {
 5562|      0|            PyErr_SetString(
 5563|      0|                PyExc_SystemError,
 5564|      0|                "Cannot extend variable-size class without Py_TPFLAGS_ITEMS_AT_END.");
 5565|      0|            goto finally;
 5566|      0|        }
 5567|      0|    }
 5568|    131|    if (basicsize == 0) {
  ------------------
  |  Branch (5568:9): [True: 6, False: 125]
  ------------------
 5569|       |        /* Inherit */
 5570|      6|        basicsize = base->tp_basicsize;
 5571|      6|    }
 5572|       |
 5573|       |    /* Compute special offsets */
 5574|       |
 5575|    131|    Py_ssize_t weaklistoffset = 0;
 5576|    131|    if (special_offset_from_member(weaklistoffset_member, type_data_offset,
  ------------------
  |  Branch (5576:9): [True: 0, False: 131]
  ------------------
 5577|    131|                                  &weaklistoffset) < 0) {
 5578|      0|        goto finally;
 5579|      0|    }
 5580|    131|    Py_ssize_t dictoffset = 0;
 5581|    131|    if (special_offset_from_member(dictoffset_member, type_data_offset,
  ------------------
  |  Branch (5581:9): [True: 0, False: 131]
  ------------------
 5582|    131|                                  &dictoffset) < 0) {
 5583|      0|        goto finally;
 5584|      0|    }
 5585|    131|    Py_ssize_t vectorcalloffset = 0;
 5586|    131|    if (special_offset_from_member(vectorcalloffset_member, type_data_offset,
  ------------------
  |  Branch (5586:9): [True: 0, False: 131]
  ------------------
 5587|    131|                                  &vectorcalloffset) < 0) {
 5588|      0|        goto finally;
 5589|      0|    }
 5590|       |
 5591|       |    /* Allocate the new type
 5592|       |     *
 5593|       |     * Between here and PyType_Ready, we should limit:
 5594|       |     * - calls to Python code
 5595|       |     * - raising exceptions
 5596|       |     * - memory allocations
 5597|       |     */
 5598|       |
 5599|    131|    res = (PyHeapTypeObject*)metaclass->tp_alloc(metaclass, nmembers);
 5600|    131|    if (res == NULL) {
  ------------------
  |  Branch (5600:9): [True: 0, False: 131]
  ------------------
 5601|      0|        goto finally;
 5602|      0|    }
 5603|       |
 5604|    131|    type = &res->ht_type;
 5605|       |    /* The flags must be initialized early, before the GC traverses us */
 5606|    131|    type_set_flags(type, flags | Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  |  503|    131|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
 5607|       |
 5608|    131|    res->ht_module = Py_XNewRef(module);
  ------------------
  |  |  551|    131|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5609|       |
 5610|       |    /* Initialize essential fields */
 5611|       |
 5612|    131|    type->tp_as_async = &res->as_async;
 5613|    131|    type->tp_as_number = &res->as_number;
 5614|    131|    type->tp_as_sequence = &res->as_sequence;
 5615|    131|    type->tp_as_mapping = &res->as_mapping;
 5616|    131|    type->tp_as_buffer = &res->as_buffer;
 5617|       |
 5618|       |    /* Set slots we have prepared */
 5619|       |
 5620|    131|    type->tp_base = (PyTypeObject *)Py_NewRef(base);
  ------------------
  |  |  550|    131|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5621|    131|    set_tp_bases(type, bases, 1);
 5622|    131|    bases = NULL;  // We give our reference to bases to the type
 5623|       |
 5624|    131|    type->tp_doc = tp_doc;
 5625|    131|    tp_doc = NULL;  // Give ownership of the allocated memory to the type
 5626|       |
 5627|    131|    res->ht_qualname = Py_NewRef(ht_name);
  ------------------
  |  |  550|    131|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5628|    131|    res->ht_name = ht_name;
 5629|    131|    ht_name = NULL;  // Give our reference to the type
 5630|       |
 5631|    131|    type->tp_name = _ht_tpname;
 5632|    131|    res->_ht_tpname = _ht_tpname;
 5633|    131|    _ht_tpname = NULL;  // Give ownership to the type
 5634|       |
 5635|    131|    res->ht_token = token;
 5636|       |
 5637|       |    /* Copy the sizes */
 5638|       |
 5639|    131|    type->tp_basicsize = basicsize;
 5640|    131|    type->tp_itemsize = itemsize;
 5641|       |
 5642|       |    /* Second pass of slots: copy most of them into the type */
 5643|       |
 5644|    131|    _PySlotIterator_Rewind(&it, spec ? (void*)spec->slots : (void*)slots);
  ------------------
  |  Branch (5644:33): [True: 131, False: 0]
  ------------------
 5645|  1.14k|    while (_PySlotIterator_Next(&it)) {
  ------------------
  |  Branch (5645:12): [True: 1.01k, False: 131]
  ------------------
 5646|  1.01k|        switch (it.current.sl_id) {
 5647|      0|        case Py_slot_invalid:
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  |  Branch (5647:9): [True: 0, False: 1.01k]
  ------------------
 5648|      0|            goto finally;
 5649|      0|        case Py_tp_base:
  ------------------
  |  |   56|      0|#define Py_tp_base 48
  ------------------
  |  Branch (5649:9): [True: 0, False: 1.01k]
  ------------------
 5650|      0|        case Py_tp_bases:
  ------------------
  |  |   57|      0|#define Py_tp_bases 49
  ------------------
  |  Branch (5650:9): [True: 0, False: 1.01k]
  ------------------
 5651|     99|        case Py_tp_doc:
  ------------------
  |  |   64|     99|#define Py_tp_doc 56
  ------------------
  |  Branch (5651:9): [True: 99, False: 915]
  ------------------
 5652|       |            /* Processed above */
 5653|     99|            break;
 5654|     75|        case Py_tp_members:
  ------------------
  |  |   80|     75|#define Py_tp_members 72
  ------------------
  |  Branch (5654:9): [True: 75, False: 939]
  ------------------
 5655|     75|            {
 5656|       |                /* Move the slots to the heap type itself */
 5657|     75|                size_t len = Py_TYPE(type)->tp_itemsize * nmembers;
  ------------------
  |  |  213|     75|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     75|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     75|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5658|     75|                memcpy(_PyHeapType_GET_MEMBERS(res), it.current.sl_ptr, len);
 5659|     75|                type->tp_members = _PyHeapType_GET_MEMBERS(res);
 5660|     75|                PyMemberDef *memb;
 5661|     75|                Py_ssize_t i;
 5662|     75|                for (memb = _PyHeapType_GET_MEMBERS(res), i = nmembers;
 5663|    351|                     i > 0; ++memb, --i)
  ------------------
  |  Branch (5663:22): [True: 276, False: 75]
  ------------------
 5664|    276|                {
 5665|    276|                    if (memb->flags & Py_RELATIVE_OFFSET) {
  ------------------
  |  |   86|    276|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
  |  Branch (5665:25): [True: 0, False: 276]
  ------------------
 5666|      0|                        memb->flags &= ~Py_RELATIVE_OFFSET;
  ------------------
  |  |   86|      0|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
 5667|      0|                        memb->offset += type_data_offset;
 5668|      0|                    }
 5669|    276|                }
 5670|     75|            }
 5671|     75|            break;
 5672|    840|        default:
  ------------------
  |  Branch (5672:9): [True: 840, False: 174]
  ------------------
 5673|    840|            _PySlot_heaptype_apply_field_slot(res, it.current);
 5674|    840|            break;
 5675|  1.01k|        }
 5676|  1.01k|    }
 5677|    131|    if (type->tp_dealloc == NULL) {
  ------------------
  |  Branch (5677:9): [True: 6, False: 125]
  ------------------
 5678|       |        /* It's a heap type, so needs the heap types' dealloc.
 5679|       |           subtype_dealloc will call the base type's tp_dealloc, if
 5680|       |           necessary. */
 5681|      6|        type->tp_dealloc = subtype_dealloc;
 5682|      6|    }
 5683|       |
 5684|       |    /* Set up offsets */
 5685|       |
 5686|    131|    type->tp_vectorcall_offset = vectorcalloffset;
 5687|    131|    type->tp_weaklistoffset = weaklistoffset;
 5688|    131|    type->tp_dictoffset = dictoffset;
 5689|       |
 5690|       |#ifdef Py_GIL_DISABLED
 5691|       |    // Assign a unique id to enable per-thread refcounting
 5692|       |    res->unique_id = _PyObject_AssignUniqueId((PyObject *)res);
 5693|       |#endif
 5694|       |
 5695|       |    /* Ready the type (which includes inheritance).
 5696|       |     *
 5697|       |     * After this call we should generally only touch up what's
 5698|       |     * accessible to Python code, like __dict__.
 5699|       |     */
 5700|    131|    if (type_ready_publish(type, 0) < 0) {
  ------------------
  |  Branch (5700:9): [True: 0, False: 131]
  ------------------
 5701|      0|        goto finally;
 5702|      0|    }
 5703|       |
 5704|    131|    if (!check_basicsize_includes_size_and_offsets(type)) {
  ------------------
  |  Branch (5704:9): [True: 0, False: 131]
  ------------------
 5705|      0|        goto finally;
 5706|      0|    }
 5707|       |
 5708|    131|    PyObject *dict = lookup_tp_dict(type);
 5709|    131|    if (type->tp_doc) {
  ------------------
  |  Branch (5709:9): [True: 99, False: 32]
  ------------------
 5710|     99|        PyObject *__doc__ = PyUnicode_FromString(_PyType_DocWithoutSignature(type->tp_name, type->tp_doc));
 5711|     99|        if (!__doc__) {
  ------------------
  |  Branch (5711:13): [True: 0, False: 99]
  ------------------
 5712|      0|            goto finally;
 5713|      0|        }
 5714|     99|        r = PyDict_SetItem(dict, &_Py_ID(__doc__), __doc__);
  ------------------
  |  |  936|     99|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     99|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     99|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5715|     99|        Py_DECREF(__doc__);
  ------------------
  |  |  430|     99|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     99|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     99|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5716|     99|        if (r < 0) {
  ------------------
  |  Branch (5716:13): [True: 0, False: 99]
  ------------------
 5717|      0|            goto finally;
 5718|      0|        }
 5719|     99|    }
 5720|       |
 5721|    131|    if (weaklistoffset) {
  ------------------
  |  Branch (5721:9): [True: 27, False: 104]
  ------------------
 5722|     27|        if (PyDict_DelItem(dict, &_Py_ID(__weaklistoffset__)) < 0) {
  ------------------
  |  |  936|     27|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     27|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     27|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5722:13): [True: 0, False: 27]
  ------------------
 5723|      0|            goto finally;
 5724|      0|        }
 5725|     27|    }
 5726|    131|    if (dictoffset) {
  ------------------
  |  Branch (5726:9): [True: 21, False: 110]
  ------------------
 5727|     21|        if (PyDict_DelItem(dict, &_Py_ID(__dictoffset__)) < 0) {
  ------------------
  |  |  936|     21|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     21|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     21|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5727:13): [True: 0, False: 21]
  ------------------
 5728|      0|            goto finally;
 5729|      0|        }
 5730|     21|    }
 5731|       |
 5732|       |    /* Set type.__module__ */
 5733|    131|    r = PyDict_Contains(dict, &_Py_ID(__module__));
  ------------------
  |  |  936|    131|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    131|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    131|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5734|    131|    if (r < 0) {
  ------------------
  |  Branch (5734:9): [True: 0, False: 131]
  ------------------
 5735|      0|        goto finally;
 5736|      0|    }
 5737|    131|    if (r == 0) {
  ------------------
  |  Branch (5737:9): [True: 131, False: 0]
  ------------------
 5738|    131|        s = strrchr(it.name, '.');
 5739|    131|        if (s != NULL) {
  ------------------
  |  Branch (5739:13): [True: 131, False: 0]
  ------------------
 5740|    131|            PyObject *modname = PyUnicode_FromStringAndSize(
 5741|    131|                    it.name, (Py_ssize_t)(s - it.name));
 5742|    131|            if (modname == NULL) {
  ------------------
  |  Branch (5742:17): [True: 0, False: 131]
  ------------------
 5743|      0|                goto finally;
 5744|      0|            }
 5745|    131|            r = PyDict_SetItem(dict, &_Py_ID(__module__), modname);
  ------------------
  |  |  936|    131|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    131|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    131|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5746|    131|            Py_DECREF(modname);
  ------------------
  |  |  430|    131|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5747|    131|            if (r != 0) {
  ------------------
  |  Branch (5747:17): [True: 0, False: 131]
  ------------------
 5748|      0|                goto finally;
 5749|      0|            }
 5750|    131|        }
 5751|      0|        else {
 5752|      0|            if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
  ------------------
  |  Branch (5752:17): [True: 0, False: 0]
  ------------------
 5753|      0|                    "builtin type %.200s has no __module__ attribute",
 5754|      0|                    it.name))
 5755|      0|                goto finally;
 5756|      0|        }
 5757|    131|    }
 5758|       |
 5759|    131|    assert(_PyType_CheckConsistency(type));
  ------------------
  |  Branch (5759:5): [True: 131, False: 0]
  ------------------
 5760|       |
 5761|    131|finally:
 5762|    131|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (5762:9): [True: 0, False: 131]
  ------------------
 5763|      0|        Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5764|      0|    }
 5765|    131|    Py_XDECREF(bases);
  ------------------
  |  |  524|    131|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5766|    131|    PyMem_Free(tp_doc);
 5767|    131|    Py_XDECREF(ht_name);
  ------------------
  |  |  524|    131|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    131|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    131|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5768|    131|    PyMem_Free(_ht_tpname);
 5769|    131|    return (PyObject*)res;
 5770|    131|}
typeobject.c:find_best_base:
 3683|    805|{
 3684|    805|    Py_ssize_t i, n;
 3685|    805|    PyTypeObject *base, *winner, *candidate;
 3686|       |
 3687|    805|    assert(PyTuple_Check(bases));
  ------------------
  |  Branch (3687:5): [True: 805, False: 0]
  ------------------
 3688|    805|    n = PyTuple_GET_SIZE(bases);
  ------------------
  |  |   27|    805|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    805|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    805|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3689|    805|    assert(n > 0);
  ------------------
  |  Branch (3689:5): [True: 805, False: 0]
  ------------------
 3690|    805|    base = NULL;
 3691|    805|    winner = NULL;
 3692|  1.80k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3692:17): [True: 998, False: 805]
  ------------------
 3693|    998|        PyObject *base_proto = PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|    998|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    998|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    998|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3693:32): [True: 998, False: 0]
  ------------------
 3694|    998|        if (!PyType_Check(base_proto)) {
  ------------------
  |  |  766|    998|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    998|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    998|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3694:13): [True: 0, False: 998]
  ------------------
 3695|      0|            PyErr_Format(
 3696|      0|                PyExc_TypeError,
 3697|      0|                "bases must be types; got '%T'", base_proto);
 3698|      0|            return NULL;
 3699|      0|        }
 3700|    998|        PyTypeObject *base_i = (PyTypeObject *)base_proto;
 3701|       |
 3702|    998|        if (!_PyType_IsReady(base_i)) {
  ------------------
  |  Branch (3702:13): [True: 0, False: 998]
  ------------------
 3703|      0|            if (PyType_Ready(base_i) < 0)
  ------------------
  |  Branch (3703:17): [True: 0, False: 0]
  ------------------
 3704|      0|                return NULL;
 3705|      0|        }
 3706|    998|        if (!_PyType_HasFeature(base_i, Py_TPFLAGS_BASETYPE)) {
  ------------------
  |  |  506|    998|#define Py_TPFLAGS_BASETYPE (1UL << 10)
  ------------------
  |  Branch (3706:13): [True: 0, False: 998]
  ------------------
 3707|      0|            PyErr_Format(PyExc_TypeError,
 3708|      0|                         "type '%.100s' is not an acceptable base type",
 3709|      0|                         base_i->tp_name);
 3710|      0|            return NULL;
 3711|      0|        }
 3712|    998|        candidate = solid_base(base_i);
 3713|    998|        if (winner == NULL) {
  ------------------
  |  Branch (3713:13): [True: 805, False: 193]
  ------------------
 3714|    805|            winner = candidate;
 3715|    805|            base = base_i;
 3716|    805|        }
 3717|    193|        else if (PyType_IsSubtype(winner, candidate))
  ------------------
  |  Branch (3717:18): [True: 169, False: 24]
  ------------------
 3718|    169|            ;
 3719|     24|        else if (PyType_IsSubtype(candidate, winner)) {
  ------------------
  |  Branch (3719:18): [True: 24, False: 0]
  ------------------
 3720|     24|            winner = candidate;
 3721|     24|            base = base_i;
 3722|     24|        }
 3723|      0|        else {
 3724|      0|            PyErr_SetString(
 3725|      0|                PyExc_TypeError,
 3726|      0|                "multiple bases have "
 3727|      0|                "instance lay-out conflict");
 3728|      0|            return NULL;
 3729|      0|        }
 3730|    998|    }
 3731|    805|    assert (base != NULL);
  ------------------
  |  Branch (3731:5): [True: 805, False: 0]
  ------------------
 3732|       |
 3733|    805|    return base;
 3734|    805|}
typeobject.c:solid_base:
 3747|  3.80k|{
 3748|  3.80k|    PyTypeObject *base;
 3749|       |
 3750|  3.80k|    if (type->tp_base) {
  ------------------
  |  Branch (3750:9): [True: 2.32k, False: 1.48k]
  ------------------
 3751|  2.32k|        base = solid_base(type->tp_base);
 3752|  2.32k|    }
 3753|  1.48k|    else {
 3754|  1.48k|        base = &PyBaseObject_Type;
 3755|  1.48k|    }
 3756|  3.80k|    if (shape_differs(type, base)) {
  ------------------
  |  Branch (3756:9): [True: 389, False: 3.41k]
  ------------------
 3757|    389|        return type;
 3758|    389|    }
 3759|  3.41k|    else {
 3760|  3.41k|        return base;
 3761|  3.41k|    }
 3762|  3.80k|}
typeobject.c:shape_differs:
 3738|  3.80k|{
 3739|  3.80k|    return (
 3740|  3.80k|        t1->tp_basicsize != t2->tp_basicsize ||
  ------------------
  |  Branch (3740:9): [True: 389, False: 3.41k]
  ------------------
 3741|  3.41k|        t1->tp_itemsize != t2->tp_itemsize
  ------------------
  |  Branch (3741:9): [True: 0, False: 3.41k]
  ------------------
 3742|  3.80k|    );
 3743|  3.80k|}
typeobject.c:special_offset_from_member:
 5195|    393|{
 5196|    393|    if (memb == NULL) {
  ------------------
  |  Branch (5196:9): [True: 341, False: 52]
  ------------------
 5197|    341|        *dest = 0;
 5198|    341|        return 0;
 5199|    341|    }
 5200|     52|    if (memb->type != Py_T_PYSSIZET) {
  ------------------
  |  |   79|     52|#define Py_T_PYSSIZET  19      /* Py_ssize_t */
  ------------------
  |  Branch (5200:9): [True: 0, False: 52]
  ------------------
 5201|      0|        PyErr_Format(
 5202|      0|            PyExc_SystemError,
 5203|      0|            "type of %s must be Py_T_PYSSIZET",
 5204|      0|            memb->name);
 5205|      0|        return -1;
 5206|      0|    }
 5207|     52|    if (memb->flags == Py_READONLY) {
  ------------------
  |  |   83|     52|#define Py_READONLY            (1 << 0)
  ------------------
  |  Branch (5207:9): [True: 52, False: 0]
  ------------------
 5208|     52|        *dest = memb->offset;
 5209|     52|        return 0;
 5210|     52|    }
 5211|      0|    else if (memb->flags == (Py_READONLY | Py_RELATIVE_OFFSET)) {
  ------------------
  |  |   83|      0|#define Py_READONLY            (1 << 0)
  ------------------
                  else if (memb->flags == (Py_READONLY | Py_RELATIVE_OFFSET)) {
  ------------------
  |  |   86|      0|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
  |  Branch (5211:14): [True: 0, False: 0]
  ------------------
 5212|      0|        *dest = memb->offset + type_data_offset;
 5213|      0|        return 0;
 5214|      0|    }
 5215|      0|    PyErr_Format(
 5216|      0|        PyExc_SystemError,
 5217|      0|        "flags for %s must be Py_READONLY or (Py_READONLY | Py_RELATIVE_OFFSET)",
 5218|      0|        memb->name);
 5219|      0|    return -1;
 5220|     52|}
typeobject.c:type_set_flags:
  459|  11.6k|{
  460|  11.6k|    ASSERT_WORLD_STOPPED_OR_NEW_TYPE(tp);
  461|  11.6k|    tp->tp_flags = flags;
  462|  11.6k|}
typeobject.c:set_tp_bases:
  603|  1.31k|{
  604|  1.31k|    assert(PyTuple_Check(bases));
  ------------------
  |  Branch (604:5): [True: 1.31k, False: 0]
  ------------------
  605|  1.31k|    ASSERT_NEW_TYPE_OR_LOCKED(self);
  606|  1.31k|    if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (606:9): [True: 416, False: 902]
  ------------------
  607|       |        // XXX tp_bases can probably be statically allocated for each
  608|       |        // static builtin type.
  609|    416|        assert(PyTuple_CheckExact(bases));
  ------------------
  |  Branch (609:9): [True: 416, False: 0]
  ------------------
  610|    416|        assert(initial);
  ------------------
  |  Branch (610:9): [True: 416, False: 0]
  ------------------
  611|    416|        assert(self->tp_bases == NULL);
  ------------------
  |  Branch (611:9): [True: 416, False: 0]
  ------------------
  612|    416|        if (PyTuple_GET_SIZE(bases) == 0) {
  ------------------
  |  |   27|    416|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    416|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    416|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (612:13): [True: 2, False: 414]
  ------------------
  613|      2|            assert(self->tp_base == NULL);
  ------------------
  |  Branch (613:13): [True: 2, False: 0]
  ------------------
  614|      2|        }
  615|    414|        else {
  616|    414|            assert(PyTuple_GET_SIZE(bases) == 1);
  ------------------
  |  Branch (616:13): [True: 414, False: 0]
  ------------------
  617|    414|            assert(PyTuple_GET_ITEM(bases, 0) == (PyObject *)self->tp_base);
  ------------------
  |  Branch (617:13): [True: 414, False: 0]
  |  Branch (617:13): [True: 414, False: 0]
  ------------------
  618|    414|            assert(self->tp_base->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN);
  ------------------
  |  Branch (618:13): [True: 414, False: 0]
  ------------------
  619|    414|            assert(_Py_IsImmortal(self->tp_base));
  ------------------
  |  Branch (619:13): [True: 414, False: 0]
  ------------------
  620|    414|        }
  621|    416|        _Py_SetImmortal(bases);
  622|    416|    }
  623|  1.31k|    self->tp_bases = bases;
  624|  1.31k|}
typeobject.c:_PyHeapType_GET_MEMBERS:
 2550|  1.46k|{
 2551|  1.46k|    return PyObject_GetItemData((PyObject *)type);
 2552|  1.46k|}
typeobject.c:subtype_dealloc:
 2690|   466k|{
 2691|   466k|    PyTypeObject *type, *base;
 2692|   466k|    destructor basedealloc;
 2693|   466k|    int has_finalizer;
 2694|       |
 2695|       |    /* Extract the type; we expect it to be a heap type */
 2696|   466k|    type = Py_TYPE(self);
  ------------------
  |  |  213|   466k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   466k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   466k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2697|   466k|    _PyObject_ASSERT((PyObject *)type, type->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  |  425|   466k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|   466k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|   466k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 466k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|   466k|      ? (void)(0) \
  |  |  |  |  |  |  418|   466k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2698|       |
 2699|       |    /* Test whether the type has GC exactly once */
 2700|       |
 2701|   466k|    if (!_PyType_IS_GC(type)) {
  ------------------
  |  |  820|   466k|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|   466k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  ------------------
  |  Branch (2701:9): [True: 0, False: 466k]
  ------------------
 2702|       |        /* A non GC dynamic type allows certain simplifications:
 2703|       |           there's no need to call clear_slots(), or DECREF the dict,
 2704|       |           or clear weakrefs. */
 2705|       |
 2706|       |        /* Maybe call finalizer; exit early if resurrected */
 2707|      0|        if (type->tp_finalize) {
  ------------------
  |  Branch (2707:13): [True: 0, False: 0]
  ------------------
 2708|      0|            if (PyObject_CallFinalizerFromDealloc(self) < 0)
  ------------------
  |  Branch (2708:17): [True: 0, False: 0]
  ------------------
 2709|      0|                return;
 2710|      0|        }
 2711|      0|        if (type->tp_del) {
  ------------------
  |  Branch (2711:13): [True: 0, False: 0]
  ------------------
 2712|      0|            type->tp_del(self);
 2713|      0|            if (Py_REFCNT(self) > 0) {
  ------------------
  |  |  119|      0|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2713:17): [True: 0, False: 0]
  ------------------
 2714|      0|                return;
 2715|      0|            }
 2716|      0|        }
 2717|       |
 2718|       |        /* Find the nearest base with a different tp_dealloc */
 2719|      0|        base = type;
 2720|      0|        while ((basedealloc = base->tp_dealloc) == subtype_dealloc) {
  ------------------
  |  Branch (2720:16): [True: 0, False: 0]
  ------------------
 2721|      0|            base = base->tp_base;
 2722|      0|            assert(base);
  ------------------
  |  Branch (2722:13): [True: 0, False: 0]
  ------------------
 2723|      0|        }
 2724|       |
 2725|       |        /* Extract the type again; tp_del may have changed it */
 2726|      0|        type = Py_TYPE(self);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2727|       |
 2728|       |        // Don't read type memory after calling basedealloc() since basedealloc()
 2729|       |        // can deallocate the type and free its memory.
 2730|      0|        int type_needs_decref = (type->tp_flags & Py_TPFLAGS_HEAPTYPE
  ------------------
  |  |  503|      0|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2730:34): [True: 0, False: 0]
  ------------------
 2731|      0|                                 && !(base->tp_flags & Py_TPFLAGS_HEAPTYPE));
  ------------------
  |  |  503|      0|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2731:37): [True: 0, False: 0]
  ------------------
 2732|       |
 2733|      0|        assert((type->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0);
  ------------------
  |  Branch (2733:9): [True: 0, False: 0]
  ------------------
 2734|       |
 2735|       |        /* Call the base tp_dealloc() */
 2736|      0|        assert(basedealloc);
  ------------------
  |  Branch (2736:9): [True: 0, False: 0]
  ------------------
 2737|      0|        basedealloc(self);
 2738|       |
 2739|       |        /* Can't reference self beyond this point. It's possible tp_del switched
 2740|       |           our type from a HEAPTYPE to a non-HEAPTYPE, so be careful about
 2741|       |           reference counting. Only decref if the base type is not already a heap
 2742|       |           allocated type. Otherwise, basedealloc should have decref'd it already */
 2743|      0|        if (type_needs_decref) {
  ------------------
  |  Branch (2743:13): [True: 0, False: 0]
  ------------------
 2744|      0|            _Py_DECREF_TYPE(type);
  ------------------
  |  |  308|      0|#  define _Py_DECREF_TYPE Py_DECREF
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2745|      0|        }
 2746|       |
 2747|       |        /* Done */
 2748|      0|        return;
 2749|      0|    }
 2750|       |
 2751|       |    /* We get here only if the type has GC */
 2752|       |
 2753|       |    /* UnTrack and re-Track around the trashcan macro, alas */
 2754|       |    /* See explanation at end of function for full disclosure */
 2755|   466k|    PyObject_GC_UnTrack(self);
 2756|       |
 2757|       |    /* Find the nearest base with a different tp_dealloc */
 2758|   466k|    base = type;
 2759|  1.33M|    while ((/*basedealloc =*/ base->tp_dealloc) == subtype_dealloc) {
  ------------------
  |  Branch (2759:12): [True: 867k, False: 466k]
  ------------------
 2760|   867k|        base = base->tp_base;
 2761|   867k|        assert(base);
  ------------------
  |  Branch (2761:9): [True: 867k, False: 0]
  ------------------
 2762|   867k|    }
 2763|       |
 2764|   466k|    has_finalizer = type->tp_finalize || type->tp_del;
  ------------------
  |  Branch (2764:21): [True: 0, False: 466k]
  |  Branch (2764:42): [True: 0, False: 466k]
  ------------------
 2765|       |
 2766|   466k|    if (type->tp_finalize) {
  ------------------
  |  Branch (2766:9): [True: 0, False: 466k]
  ------------------
 2767|      0|        _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2768|      0|        if (PyObject_CallFinalizerFromDealloc(self) < 0) {
  ------------------
  |  Branch (2768:13): [True: 0, False: 0]
  ------------------
 2769|       |            /* Resurrected */
 2770|      0|            return;
 2771|      0|        }
 2772|      0|        _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|      0|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2773|      0|    }
 2774|       |    /*
 2775|       |      If we added a weaklist, we clear it. Do this *before* calling tp_del,
 2776|       |      clearing slots, or clearing the instance dict.
 2777|       |
 2778|       |      GC tracking must be off at this point. weakref callbacks (if any, and
 2779|       |      whether directly here or indirectly in something we call) may trigger GC,
 2780|       |      and if self is tracked at that point, it will look like trash to GC and GC
 2781|       |      will try to delete self again.
 2782|       |    */
 2783|   466k|    if (type->tp_weaklistoffset && !base->tp_weaklistoffset) {
  ------------------
  |  Branch (2783:9): [True: 465k, False: 377]
  |  Branch (2783:36): [True: 465k, False: 0]
  ------------------
 2784|   465k|        PyObject_ClearWeakRefs(self);
 2785|   465k|    }
 2786|       |
 2787|   466k|    if (type->tp_del) {
  ------------------
  |  Branch (2787:9): [True: 0, False: 466k]
  ------------------
 2788|      0|        _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|      0|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2789|      0|        type->tp_del(self);
 2790|      0|        if (Py_REFCNT(self) > 0) {
  ------------------
  |  |  119|      0|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2790:13): [True: 0, False: 0]
  ------------------
 2791|       |            /* Resurrected */
 2792|      0|            return;
 2793|      0|        }
 2794|      0|        _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|      0|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2795|      0|    }
 2796|   466k|    if (has_finalizer) {
  ------------------
  |  Branch (2796:9): [True: 0, False: 466k]
  ------------------
 2797|       |        /* New weakrefs could be created during the finalizer call.
 2798|       |           If this occurs, clear them out without calling their
 2799|       |           finalizers since they might rely on part of the object
 2800|       |           being finalized that has already been destroyed. */
 2801|      0|        if (type->tp_weaklistoffset && !base->tp_weaklistoffset) {
  ------------------
  |  Branch (2801:13): [True: 0, False: 0]
  |  Branch (2801:40): [True: 0, False: 0]
  ------------------
 2802|      0|            _PyWeakref_ClearWeakRefsNoCallbacks(self);
 2803|      0|        }
 2804|      0|    }
 2805|       |
 2806|       |    /*  Clear slots up to the nearest base with a different tp_dealloc */
 2807|   466k|    base = type;
 2808|  1.33M|    while ((basedealloc = base->tp_dealloc) == subtype_dealloc) {
  ------------------
  |  Branch (2808:12): [True: 867k, False: 466k]
  ------------------
 2809|   867k|        if (Py_SIZE(base))
  ------------------
  |  |  214|   867k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   867k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   867k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (214:23): [True: 369, False: 866k]
  |  |  ------------------
  ------------------
 2810|    369|            clear_slots(base, self);
 2811|   867k|        base = base->tp_base;
 2812|   867k|        assert(base);
  ------------------
  |  Branch (2812:9): [True: 867k, False: 0]
  ------------------
 2813|   867k|    }
 2814|       |
 2815|       |    /* If we added a dict, DECREF it, or free inline values. */
 2816|   466k|    if (type->tp_flags & Py_TPFLAGS_MANAGED_DICT) {
  ------------------
  |  |  482|   466k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (2816:9): [True: 50.8k, False: 415k]
  ------------------
 2817|  50.8k|        PyObject_ClearManagedDict(self);
 2818|  50.8k|    }
 2819|   415k|    else if (type->tp_dictoffset && !base->tp_dictoffset) {
  ------------------
  |  Branch (2819:14): [True: 414k, False: 737]
  |  Branch (2819:37): [True: 0, False: 414k]
  ------------------
 2820|      0|        PyObject **dictptr = _PyObject_ComputedDictPointer(self);
 2821|      0|        if (dictptr != NULL) {
  ------------------
  |  Branch (2821:13): [True: 0, False: 0]
  ------------------
 2822|      0|            PyObject *dict = *dictptr;
 2823|      0|            if (dict != NULL) {
  ------------------
  |  Branch (2823:17): [True: 0, False: 0]
  ------------------
 2824|      0|                Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2825|      0|                *dictptr = NULL;
 2826|      0|            }
 2827|      0|        }
 2828|      0|    }
 2829|       |
 2830|       |    /* Extract the type again; tp_del may have changed it */
 2831|   466k|    type = Py_TYPE(self);
  ------------------
  |  |  213|   466k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   466k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   466k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2832|       |
 2833|       |    /* Call the base tp_dealloc(); first retrack self if
 2834|       |     * basedealloc knows about gc.
 2835|       |     */
 2836|   466k|    if (_PyType_IS_GC(base)) {
  ------------------
  |  |  820|   466k|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|   466k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (820:26): [True: 415k, False: 50.8k]
  |  |  ------------------
  ------------------
 2837|   415k|        _PyObject_GC_TRACK(self);
  ------------------
  |  |  505|   415k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   415k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   415k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2838|   415k|    }
 2839|       |
 2840|       |    // Don't read type memory after calling basedealloc() since basedealloc()
 2841|       |    // can deallocate the type and free its memory.
 2842|   466k|    int type_needs_decref = (type->tp_flags & Py_TPFLAGS_HEAPTYPE
  ------------------
  |  |  503|   932k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2842:30): [True: 466k, False: 0]
  ------------------
 2843|   466k|                             && !(base->tp_flags & Py_TPFLAGS_HEAPTYPE));
  ------------------
  |  |  503|   466k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2843:33): [True: 51.5k, False: 414k]
  ------------------
 2844|       |
 2845|   466k|    assert(basedealloc);
  ------------------
  |  Branch (2845:5): [True: 466k, False: 0]
  ------------------
 2846|   466k|    basedealloc(self);
 2847|       |
 2848|       |    /* Can't reference self beyond this point. It's possible tp_del switched
 2849|       |       our type from a HEAPTYPE to a non-HEAPTYPE, so be careful about
 2850|       |       reference counting. Only decref if the base type is not already a heap
 2851|       |       allocated type. Otherwise, basedealloc should have decref'd it already */
 2852|   466k|    if (type_needs_decref) {
  ------------------
  |  Branch (2852:9): [True: 51.5k, False: 414k]
  ------------------
 2853|  51.5k|        _Py_DECREF_TYPE(type);
  ------------------
  |  |  308|  51.5k|#  define _Py_DECREF_TYPE Py_DECREF
  |  |  ------------------
  |  |  |  |  430|  51.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  51.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  51.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2854|  51.5k|    }
 2855|   466k|}
typeobject.c:clear_slots:
 2631|    369|{
 2632|    369|    Py_ssize_t i, n;
 2633|    369|    PyMemberDef *mp;
 2634|       |
 2635|    369|    n = Py_SIZE(type);
  ------------------
  |  |  214|    369|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    369|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    369|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2636|    369|    mp = _PyHeapType_GET_MEMBERS((PyHeapTypeObject *)type);
 2637|    746|    for (i = 0; i < n; i++, mp++) {
  ------------------
  |  Branch (2637:17): [True: 377, False: 369]
  ------------------
 2638|    377|        if (mp->type == Py_T_OBJECT_EX && !(mp->flags & Py_READONLY)) {
  ------------------
  |  |   75|    754|#define Py_T_OBJECT_EX 16
  ------------------
                      if (mp->type == Py_T_OBJECT_EX && !(mp->flags & Py_READONLY)) {
  ------------------
  |  |   83|    377|#define Py_READONLY            (1 << 0)
  ------------------
  |  Branch (2638:13): [True: 377, False: 0]
  |  Branch (2638:43): [True: 377, False: 0]
  ------------------
 2639|    377|            void *addr = _PyMember_GetOffset(self, mp);
 2640|    377|            PyObject *obj = *(PyObject **)addr;
 2641|    377|            if (obj != NULL) {
  ------------------
  |  Branch (2641:17): [True: 377, False: 0]
  ------------------
 2642|    377|                *(PyObject **)addr = NULL;
 2643|    377|                Py_DECREF(obj);
  ------------------
  |  |  430|    377|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    377|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    377|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2644|    377|            }
 2645|    377|        }
 2646|    377|    }
 2647|    369|}
typeobject.c:type_ready_publish:
 9510|    902|{
 9511|    902|    int res;
 9512|    902|    BEGIN_TYPE_LOCK();
 9513|    902|    res = type_ready(type, 1, 0);
 9514|    902|    if (res == 0) {
  ------------------
  |  Branch (9514:9): [True: 902, False: 0]
  ------------------
 9515|    902|        assert(!(type->tp_flags & Py_TPFLAGS_READY));
  ------------------
  |  Branch (9515:9): [True: 902, False: 0]
  ------------------
 9516|    902|        assert(!is_readying(type));
  ------------------
  |  Branch (9516:9): [True: 902, False: 0]
  ------------------
 9517|       |
 9518|    902|        if (fix_slots) {
  ------------------
  |  Branch (9518:13): [True: 771, False: 131]
  ------------------
 9519|       |            // Put the proper slots in place and only then publish the type as
 9520|       |            // a subclass of its bases.  Since the type is not reachable by
 9521|       |            // other threads before it is published, the slots can be updated
 9522|       |            // without stopping the world.  This step is skipped for
 9523|       |            // type_from_slots_or_spec().
 9524|    771|            fixup_slot_dispatchers(type);
 9525|    771|        }
 9526|       |
 9527|       |        // Set the ready flag before revealing the type since type_add_flags()
 9528|       |        // may only be used on types that are not yet revealed.
 9529|    902|        type_add_flags(type, Py_TPFLAGS_READY);
  ------------------
  |  |  518|    902|#define Py_TPFLAGS_READY (1UL << 12)
  ------------------
 9530|       |
 9531|       |#if defined(Py_GIL_DISABLED) && defined(Py_DEBUG) && SIZEOF_VOID_P > 4
 9532|       |        // Mark the type as revealed while still holding the type lock.
 9533|       |        // Threads can only find the type through the subclasses of its bases,
 9534|       |        // which is done below with the lock held.  So, they cannot see the
 9535|       |        // type before the flag is set.
 9536|       |        ((PyObject*)type)->ob_flags |= _Py_TYPE_REVEALED_FLAG;
 9537|       |#endif
 9538|       |
 9539|    902|        res = type_ready_add_subclasses(type);
 9540|    902|        if (res == 0) {
  ------------------
  |  Branch (9540:13): [True: 902, False: 0]
  ------------------
 9541|    902|            assert(_PyType_CheckConsistency(type));
  ------------------
  |  Branch (9541:13): [True: 902, False: 0]
  ------------------
 9542|    902|        }
 9543|    902|    }
 9544|    902|    END_TYPE_LOCK();
 9545|    902|    return res;
 9546|    902|}
typeobject.c:fixup_slot_dispatchers:
12072|    771|{
12073|    771|    ASSERT_TYPE_LOCK_HELD();
12074|    771|    ASSERT_WORLD_STOPPED_OR_NEW_TYPE(type);
12075|    771|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (12075:5): [True: 771, False: 0]
  ------------------
12076|  52.4k|    for (pytype_slotdef *p = slotdefs; p->name; ) {
  ------------------
  |  Branch (12076:40): [True: 51.6k, False: 771]
  ------------------
12077|  51.6k|        int rv = update_one_slot(type, p, &p, NULL);
12078|       |        // always returns 0 if queued_updates == NULL
12079|  51.6k|        assert (rv == 0);
  ------------------
  |  Branch (12079:9): [True: 51.6k, False: 0]
  ------------------
12080|  51.6k|        (void)rv;
12081|  51.6k|    }
12082|    771|}
typeobject.c:update_one_slot:
11847|  51.6k|{
11848|  51.6k|    ASSERT_NEW_TYPE_OR_LOCKED(type);
11849|       |
11850|  51.6k|    PyObject *descr;
11851|  51.6k|    PyWrapperDescrObject *d;
11852|       |
11853|       |    // The correct specialized C function, like "tp_repr of str" in the
11854|       |    // example above
11855|  51.6k|    void *specific = NULL;
11856|       |
11857|       |    // A generic wrapper that uses method lookup (safe but slow)
11858|  51.6k|    void *generic = NULL;
11859|       |
11860|       |    // Set to 1 if the generic wrapper is necessary
11861|  51.6k|    int use_generic = 0;
11862|       |
11863|  51.6k|    int offset = p->offset;
11864|  51.6k|    void **ptr = slotptr(type, offset);
11865|       |
11866|  51.6k|    if (ptr == NULL) {
  ------------------
  |  Branch (11866:9): [True: 0, False: 51.6k]
  ------------------
11867|      0|        do {
11868|      0|            ++p;
11869|      0|        } while (p->offset == offset);
  ------------------
  |  Branch (11869:18): [True: 0, False: 0]
  ------------------
11870|      0|        if (next_p != NULL) {
  ------------------
  |  Branch (11870:13): [True: 0, False: 0]
  ------------------
11871|      0|            *next_p = p;
11872|      0|        }
11873|      0|        return 0;
11874|      0|    }
11875|       |    /* We may end up clearing live exceptions below, so make sure it's ours. */
11876|  51.6k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (11876:5): [True: 51.6k, False: 0]
  ------------------
11877|  72.5k|    do {
11878|       |        /* Use faster uncached lookup as we won't get any cache hits during type setup. */
11879|  72.5k|        _PyStackRef descr_ref;
11880|  72.5k|        int res = find_name_in_mro(type, p->name_strobj, &descr_ref);
11881|  72.5k|        if (res <= 0) {
  ------------------
  |  Branch (11881:13): [True: 57.8k, False: 14.6k]
  ------------------
11882|  57.8k|            if (ptr == (void**)&type->tp_iternext) {
  ------------------
  |  Branch (11882:17): [True: 672, False: 57.1k]
  ------------------
11883|    672|                specific = (void *)_PyObject_NextNotImplemented;
11884|    672|            }
11885|  57.8k|            continue;
11886|  57.8k|        }
11887|  14.6k|        descr = PyStackRef_AsPyObjectBorrow(descr_ref);
11888|  14.6k|        if (Py_IS_TYPE(descr, &PyWrapperDescr_Type) &&
  ------------------
  |  |  215|  29.3k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  14.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 12.0k, False: 2.58k]
  |  |  ------------------
  ------------------
11889|  12.0k|            ((PyWrapperDescrObject *)descr)->d_base->name_strobj == p->name_strobj) {
  ------------------
  |  Branch (11889:13): [True: 12.0k, False: 2]
  ------------------
11890|  12.0k|            void **tptr;
11891|  12.0k|            size_t index = (p - slotdefs);
11892|  12.0k|            if (slotdefs_dups[index][0] > 1) {
  ------------------
  |  Branch (11892:17): [True: 4.78k, False: 7.31k]
  ------------------
11893|  4.78k|                tptr = NULL;
11894|  14.2k|                for (size_t i = 1; i <= slotdefs_dups[index][0]; i++) {
  ------------------
  |  Branch (11894:36): [True: 9.56k, False: 4.73k]
  ------------------
11895|  9.56k|                    pytype_slotdef *q = &slotdefs[slotdefs_dups[index][i]];
11896|  9.56k|                    void **qptr = slotptr(type, q->offset);
11897|  9.56k|                    if (qptr == NULL || *qptr == NULL)
  ------------------
  |  Branch (11897:25): [True: 0, False: 9.56k]
  |  Branch (11897:41): [True: 4.73k, False: 4.83k]
  ------------------
11898|  4.73k|                        continue;
11899|  4.83k|                    if (tptr != NULL) {
  ------------------
  |  Branch (11899:25): [True: 50, False: 4.78k]
  ------------------
11900|     50|                        tptr = NULL;
11901|     50|                        break;
11902|     50|                    }
11903|  4.78k|                    tptr = qptr;
11904|  4.78k|                }
11905|  4.78k|            }
11906|  7.31k|            else {
11907|  7.31k|                tptr = slotptr(type, offset);
11908|  7.31k|            }
11909|       |
11910|  12.0k|            if (tptr == NULL || tptr == ptr)
  ------------------
  |  Branch (11910:17): [True: 50, False: 12.0k]
  |  Branch (11910:33): [True: 9.68k, False: 2.36k]
  ------------------
11911|  9.73k|                generic = p->function;
11912|  12.0k|            d = (PyWrapperDescrObject *)descr;
11913|  12.0k|            if ((specific == NULL || specific == d->d_wrapped) &&
  ------------------
  |  Branch (11913:18): [True: 7.48k, False: 4.61k]
  |  Branch (11913:38): [True: 4.61k, False: 1]
  ------------------
11914|  12.0k|                d->d_base->wrapper == p->wrapper &&
  ------------------
  |  Branch (11914:17): [True: 9.72k, False: 2.37k]
  ------------------
11915|  9.72k|                is_subtype_with_mro(lookup_tp_mro(type), type, PyDescr_TYPE(d)))
  ------------------
  |  |   35|  9.72k|#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
  ------------------
  |  Branch (11915:17): [True: 9.72k, False: 0]
  ------------------
11916|  9.72k|            {
11917|  9.72k|                specific = d->d_wrapped;
11918|  9.72k|            }
11919|  2.37k|            else {
11920|       |                /* We cannot use the specific slot function because either
11921|       |                   - it is not unique: there are multiple methods for this
11922|       |                     slot and they conflict
11923|       |                   - the signature is wrong (as checked by the ->wrapper
11924|       |                     comparison above)
11925|       |                   - it's wrapping the wrong class
11926|       |                 */
11927|  2.37k|                use_generic = 1;
11928|  2.37k|            }
11929|  12.0k|        }
11930|  2.58k|        else if (Py_IS_TYPE(descr, &PyCFunction_Type) &&
  ------------------
  |  |  215|  5.16k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  2.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 743, False: 1.83k]
  |  |  ------------------
  ------------------
11931|    743|                 PyCFunction_GET_FUNCTION(descr) ==
  ------------------
  |  |   43|    743|#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|    743|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    743|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (11931:18): [True: 743, False: 0]
  ------------------
11932|  2.58k|                 _PyCFunction_CAST(tp_new_wrapper) &&
  ------------------
  |  |   53|  2.58k|    _Py_FUNC_CAST(PyCFunction, func)
  |  |  ------------------
  |  |  |  |   47|    743|#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11933|    743|                 ptr == (void**)&type->tp_new)
  ------------------
  |  Branch (11933:18): [True: 743, False: 0]
  ------------------
11934|    743|        {
11935|       |            /* The __new__ wrapper is not a wrapper descriptor,
11936|       |               so must be special-cased differently.
11937|       |               If we don't do this, creating an instance will
11938|       |               always use slot_tp_new which will look up
11939|       |               __new__ in the MRO which will call tp_new_wrapper
11940|       |               which will look through the base classes looking
11941|       |               for a static base and call its tp_new (usually
11942|       |               PyType_GenericNew), after performing various
11943|       |               sanity checks and constructing a new argument
11944|       |               list.  Cut all that nonsense short -- this speeds
11945|       |               up instance creation tremendously. */
11946|    743|            specific = (void *)type->tp_new;
11947|       |            /* XXX I'm not 100% sure that there isn't a hole
11948|       |               in this reasoning that requires additional
11949|       |               sanity checks.  I'll buy the first person to
11950|       |               point out a bug in this reasoning a beer. */
11951|    743|        }
11952|  1.83k|        else if (descr == Py_None &&
  ------------------
  |  |  616|  3.67k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (11952:18): [True: 32, False: 1.80k]
  ------------------
11953|     32|                 ptr == (void**)&type->tp_hash) {
  ------------------
  |  Branch (11953:18): [True: 32, False: 0]
  ------------------
11954|       |            /* We specifically allow __hash__ to be set to None
11955|       |               to prevent inheritance of the default
11956|       |               implementation from object.__hash__ */
11957|     32|            specific = (void *)PyObject_HashNotImplemented;
11958|     32|        }
11959|  1.80k|        else {
11960|  1.80k|            use_generic = 1;
11961|  1.80k|            if (generic == NULL && Py_IS_TYPE(descr, &PyMethodDescr_Type) &&
  ------------------
  |  |  215|  3.22k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  1.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 13, False: 1.40k]
  |  |  ------------------
  ------------------
  |  Branch (11961:17): [True: 1.41k, False: 390]
  ------------------
11962|     13|                *ptr == ((PyMethodDescrObject *)descr)->d_method->ml_meth)
  ------------------
  |  Branch (11962:17): [True: 5, False: 8]
  ------------------
11963|      5|            {
11964|      5|                generic = *ptr;
11965|      5|            }
11966|  1.80k|            else {
11967|  1.80k|                generic = p->function;
11968|  1.80k|            }
11969|  1.80k|            if (p->function == slot_tp_call) {
  ------------------
  |  Branch (11969:17): [True: 16, False: 1.79k]
  ------------------
11970|       |                /* A generic __call__ is incompatible with vectorcall */
11971|     16|                if (queued_updates == NULL) {
  ------------------
  |  Branch (11971:21): [True: 16, False: 0]
  ------------------
11972|     16|                    type_clear_flags(type, Py_TPFLAGS_HAVE_VECTORCALL);
  ------------------
  |  |  510|     16|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
11973|     16|                }
11974|     16|            }
11975|  1.80k|        }
11976|  14.6k|        PyStackRef_CLOSE(descr_ref);
11977|  72.5k|    } while ((++p)->offset == offset);
  ------------------
  |  Branch (11977:14): [True: 20.8k, False: 51.6k]
  ------------------
11978|       |
11979|  51.6k|    void *slot_value;
11980|  51.6k|    if (specific && !use_generic) {
  ------------------
  |  Branch (11980:9): [True: 6.55k, False: 45.1k]
  |  Branch (11980:21): [True: 6.33k, False: 221]
  ------------------
11981|  6.33k|        slot_value = specific;
11982|  45.3k|    } else {
11983|  45.3k|        slot_value = generic;
11984|  45.3k|    }
11985|       |
11986|       |#ifdef Py_GIL_DISABLED
11987|       |    if (queued_updates != NULL) {
11988|       |        // queue the update to perform later, while world is stopped
11989|       |        if (queue_slot_update(queued_updates, type, ptr, slot_value) < 0) {
11990|       |            return -1;
11991|       |        }
11992|       |    } else {
11993|       |        // do the update to the type structure now
11994|       |        *ptr = slot_value;
11995|       |    }
11996|       |#else
11997|       |    // always do the update immediately
11998|  51.6k|    assert(queued_updates == NULL);
  ------------------
  |  Branch (11998:5): [True: 51.6k, False: 0]
  ------------------
11999|  51.6k|    *ptr = slot_value;
12000|  51.6k|#endif
12001|       |
12002|  51.6k|    if (next_p != NULL) {
  ------------------
  |  Branch (12002:9): [True: 51.6k, False: 24]
  ------------------
12003|  51.6k|        *next_p = p;
12004|  51.6k|    }
12005|  51.6k|    return 0;
12006|  51.6k|}
typeobject.c:slotptr:
11734|   186k|{
11735|   186k|    char *ptr;
11736|   186k|    long offset = ioffset;
11737|       |
11738|       |    /* Note: this depends on the order of the members of PyHeapTypeObject! */
11739|   186k|    assert(offset >= 0);
  ------------------
  |  Branch (11739:5): [True: 186k, False: 0]
  ------------------
11740|   186k|    assert((size_t)offset < offsetof(PyHeapTypeObject, ht_name));
  ------------------
  |  Branch (11740:5): [True: 186k, False: 0]
  ------------------
11741|   186k|    if ((size_t)offset >= offsetof(PyHeapTypeObject, as_buffer)) {
  ------------------
  |  Branch (11741:9): [True: 4.19k, False: 182k]
  ------------------
11742|  4.19k|        ptr = (char *)type->tp_as_buffer;
11743|  4.19k|        offset -= offsetof(PyHeapTypeObject, as_buffer);
11744|  4.19k|    }
11745|   182k|    else if ((size_t)offset >= offsetof(PyHeapTypeObject, as_sequence)) {
  ------------------
  |  Branch (11745:14): [True: 19.6k, False: 162k]
  ------------------
11746|  19.6k|        ptr = (char *)type->tp_as_sequence;
11747|  19.6k|        offset -= offsetof(PyHeapTypeObject, as_sequence);
11748|  19.6k|    }
11749|   162k|    else if ((size_t)offset >= offsetof(PyHeapTypeObject, as_mapping)) {
  ------------------
  |  Branch (11749:14): [True: 7.74k, False: 155k]
  ------------------
11750|  7.74k|        ptr = (char *)type->tp_as_mapping;
11751|  7.74k|        offset -= offsetof(PyHeapTypeObject, as_mapping);
11752|  7.74k|    }
11753|   155k|    else if ((size_t)offset >= offsetof(PyHeapTypeObject, as_number)) {
  ------------------
  |  Branch (11753:14): [True: 92.3k, False: 62.8k]
  ------------------
11754|  92.3k|        ptr = (char *)type->tp_as_number;
11755|  92.3k|        offset -= offsetof(PyHeapTypeObject, as_number);
11756|  92.3k|    }
11757|  62.8k|    else if ((size_t)offset >= offsetof(PyHeapTypeObject, as_async)) {
  ------------------
  |  Branch (11757:14): [True: 6.28k, False: 56.5k]
  ------------------
11758|  6.28k|        ptr = (char *)type->tp_as_async;
11759|  6.28k|        offset -= offsetof(PyHeapTypeObject, as_async);
11760|  6.28k|    }
11761|  56.5k|    else {
11762|  56.5k|        ptr = (char *)type;
11763|  56.5k|    }
11764|   186k|    if (ptr != NULL)
  ------------------
  |  Branch (11764:9): [True: 161k, False: 25.5k]
  ------------------
11765|   161k|        ptr += offset;
11766|   186k|    return (void **)ptr;
11767|   186k|}
typeobject.c:tp_new_wrapper:
10352|    767|{
10353|    767|    PyTypeObject *staticbase;
10354|    767|    PyObject *arg0, *res;
10355|       |
10356|    767|    if (self == NULL || !PyType_Check(self)) {
  ------------------
  |  |  766|    767|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    767|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10356:9): [True: 0, False: 767]
  |  Branch (10356:25): [True: 0, False: 767]
  ------------------
10357|      0|        PyErr_Format(PyExc_SystemError,
10358|      0|                     "__new__() called with non-type 'self'");
10359|      0|        return NULL;
10360|      0|    }
10361|    767|    PyTypeObject *type = (PyTypeObject *)self;
10362|       |
10363|    767|    if (nargs < 1) {
  ------------------
  |  Branch (10363:9): [True: 0, False: 767]
  ------------------
10364|      0|        PyErr_Format(PyExc_TypeError,
10365|      0|                     "%s.__new__(): not enough arguments",
10366|      0|                     type->tp_name);
10367|      0|        return NULL;
10368|      0|    }
10369|    767|    arg0 = args[0];
10370|    767|    if (!PyType_Check(arg0)) {
  ------------------
  |  |  766|    767|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    767|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10370:9): [True: 0, False: 767]
  ------------------
10371|      0|        PyErr_Format(PyExc_TypeError,
10372|      0|                     "%s.__new__(X): X is not a type object (%s)",
10373|      0|                     type->tp_name,
10374|      0|                     Py_TYPE(arg0)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10375|      0|        return NULL;
10376|      0|    }
10377|    767|    PyTypeObject *subtype = (PyTypeObject *)arg0;
10378|       |
10379|    767|    if (!PyType_IsSubtype(subtype, type)) {
  ------------------
  |  Branch (10379:9): [True: 0, False: 767]
  ------------------
10380|      0|        PyErr_Format(PyExc_TypeError,
10381|      0|                     "%s.__new__(%s): %s is not a subtype of %s",
10382|      0|                     type->tp_name,
10383|      0|                     subtype->tp_name,
10384|      0|                     subtype->tp_name,
10385|      0|                     type->tp_name);
10386|      0|        return NULL;
10387|      0|    }
10388|       |
10389|       |    /* Check that the use doesn't do something silly and unsafe like
10390|       |       object.__new__(dict).  To do this, we check that the
10391|       |       most derived base that's not a heap type is this type. */
10392|    767|    staticbase = subtype;
10393|  1.55k|    while (staticbase && (staticbase->tp_new == slot_tp_new))
  ------------------
  |  Branch (10393:12): [True: 1.55k, False: 0]
  |  Branch (10393:26): [True: 790, False: 767]
  ------------------
10394|    790|        staticbase = staticbase->tp_base;
10395|       |    /* If staticbase is NULL now, it is a really weird type.
10396|       |       In the spirit of backwards compatibility (?), just shut up. */
10397|    767|    if (staticbase && staticbase->tp_new != type->tp_new) {
  ------------------
  |  Branch (10397:9): [True: 767, False: 0]
  |  Branch (10397:23): [True: 0, False: 767]
  ------------------
10398|      0|        if (staticbase->tp_new == NULL) {
  ------------------
  |  Branch (10398:13): [True: 0, False: 0]
  ------------------
10399|      0|            PyErr_Format(PyExc_TypeError,
10400|      0|                         "cannot create '%s' instances", subtype->tp_name);
10401|      0|            return NULL;
10402|      0|        }
10403|      0|        PyErr_Format(PyExc_TypeError,
10404|      0|                     "%s.__new__(%s) is not safe, use %s.__new__()",
10405|      0|                     type->tp_name,
10406|      0|                     subtype->tp_name,
10407|      0|                     staticbase->tp_name);
10408|      0|        return NULL;
10409|      0|    }
10410|       |
10411|    767|    PyObject *args_tuple = PyTuple_FromArray(args + 1, nargs - 1);
10412|    767|    if (args_tuple == NULL) {
  ------------------
  |  Branch (10412:9): [True: 0, False: 767]
  ------------------
10413|      0|        return NULL;
10414|      0|    }
10415|    767|    PyObject *kwds = NULL;
10416|    767|    if (kwnames != NULL) {
  ------------------
  |  Branch (10416:9): [True: 0, False: 767]
  ------------------
10417|      0|        kwds = _PyStack_AsDict(args + nargs, kwnames);
10418|      0|        if (kwds == NULL) {
  ------------------
  |  Branch (10418:13): [True: 0, False: 0]
  ------------------
10419|      0|            Py_DECREF(args_tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10420|      0|            return NULL;
10421|      0|        }
10422|      0|    }
10423|    767|    res = type->tp_new(subtype, args_tuple, kwds);
10424|    767|    Py_DECREF(args_tuple);
  ------------------
  |  |  430|    767|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    767|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10425|    767|    Py_XDECREF(kwds);
  ------------------
  |  |  524|    767|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    767|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10426|    767|    return res;
10427|    767|}
typeobject.c:slot_tp_new:
11136|    738|{
11137|    738|    PyThreadState *tstate = _PyThreadState_GET();
11138|    738|    PyObject *result;
11139|       |
11140|    738|    _PyCStackRef func_ref;
11141|    738|    _PyThreadState_PushCStackRef(tstate, &func_ref);
11142|    738|    func_ref.ref = _PyObject_GetAttrStackRef((PyObject *)type, &_Py_ID(__new__));
  ------------------
  |  |  936|    738|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    738|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    738|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11143|    738|    if (PyStackRef_IsNull(func_ref.ref)) {
  ------------------
  |  |  482|    738|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|    738|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    738|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 738]
  |  |  ------------------
  ------------------
11144|      0|        _PyThreadState_PopCStackRef(tstate, &func_ref);
11145|      0|        return NULL;
11146|      0|    }
11147|       |
11148|    738|    PyObject *func = PyStackRef_AsPyObjectBorrow(func_ref.ref);
11149|    738|    result = _PyObject_Call_Prepend(tstate, func, (PyObject *)type, args, kwds);
11150|    738|    _PyThreadState_PopCStackRef(tstate, &func_ref);
11151|    738|    return result;
11152|    738|}
typeobject.c:slot_tp_call:
10881|      9|{
10882|      9|    return call_method(self, &_Py_ID(__call__), args, kwds);
  ------------------
  |  |  936|      9|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      9|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      9|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10883|      9|}
typeobject.c:call_method:
 3066|  49.3k|{
 3067|  49.3k|    PyThreadState *tstate = _PyThreadState_GET();
 3068|  49.3k|    _PyCStackRef cref;
 3069|  49.3k|    _PyThreadState_PushCStackRef(tstate, &cref);
 3070|  49.3k|    PyObject *res = NULL;
 3071|  49.3k|    int unbound = lookup_method(self, attr, &cref.ref);
 3072|  49.3k|    if (unbound >= 0) {
  ------------------
  |  Branch (3072:9): [True: 49.3k, False: 0]
  ------------------
 3073|  49.3k|        PyObject *meth = PyStackRef_AsPyObjectBorrow(cref.ref);
 3074|  49.3k|        if (unbound) {
  ------------------
  |  Branch (3074:13): [True: 49.3k, False: 0]
  ------------------
 3075|  49.3k|            res = _PyObject_Call_Prepend(tstate, meth, self, args, kwds);
 3076|  49.3k|        }
 3077|      0|        else {
 3078|      0|            res = _PyObject_Call(tstate, meth, args, kwds);
 3079|      0|        }
 3080|  49.3k|    }
 3081|  49.3k|    _PyThreadState_PopCStackRef(tstate, &cref);
 3082|  49.3k|    return res;
 3083|  49.3k|}
typeobject.c:lookup_method:
 3015|  49.9k|{
 3016|  49.9k|    return lookup_method_ex(self, attr, out, 1);
 3017|  49.9k|}
typeobject.c:type_clear_flags:
  480|    942|{
  481|    942|    type_set_flags(tp, tp->tp_flags & ~flag);
  482|    942|}
typeobject.c:type_ready_add_subclasses:
 9291|  1.31k|{
 9292|  1.31k|    PyObject *bases = lookup_tp_bases(type);
 9293|  1.31k|    Py_ssize_t nbase = PyTuple_GET_SIZE(bases);
  ------------------
  |  |   27|  1.31k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9294|  2.82k|    for (Py_ssize_t i = 0; i < nbase; i++) {
  ------------------
  |  Branch (9294:28): [True: 1.50k, False: 1.31k]
  ------------------
 9295|  1.50k|        PyObject *b = PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|  1.50k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.50k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9295:23): [True: 1.50k, False: 0]
  ------------------
 9296|  1.50k|        if (PyType_Check(b) && add_subclass((PyTypeObject *)b, type) < 0) {
  ------------------
  |  |  766|  3.01k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 1.50k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (9296:32): [True: 0, False: 1.50k]
  ------------------
 9297|      0|            return -1;
 9298|      0|        }
 9299|  1.50k|    }
 9300|  1.31k|    return 0;
 9301|  1.31k|}
typeobject.c:add_subclass:
 9632|  1.50k|{
 9633|  1.50k|    PyObject *key = PyLong_FromVoidPtr((void *) type);
 9634|  1.50k|    if (key == NULL)
  ------------------
  |  Branch (9634:9): [True: 0, False: 1.50k]
  ------------------
 9635|      0|        return -1;
 9636|       |
 9637|  1.50k|    PyObject *ref = PyWeakref_NewRef((PyObject *)type, NULL);
 9638|  1.50k|    if (ref == NULL) {
  ------------------
  |  Branch (9638:9): [True: 0, False: 1.50k]
  ------------------
 9639|      0|        Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9640|      0|        return -1;
 9641|      0|    }
 9642|       |
 9643|       |    // Only get tp_subclasses after creating the key and value.
 9644|       |    // PyWeakref_NewRef() can trigger a garbage collection which can execute
 9645|       |    // arbitrary Python code and so modify base->tp_subclasses.
 9646|  1.50k|    PyObject *subclasses = lookup_tp_subclasses(base);
 9647|  1.50k|    if (subclasses == NULL) {
  ------------------
  |  Branch (9647:9): [True: 229, False: 1.28k]
  ------------------
 9648|    229|        subclasses = init_tp_subclasses(base);
 9649|    229|        if (subclasses == NULL) {
  ------------------
  |  Branch (9649:13): [True: 0, False: 229]
  ------------------
 9650|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9651|      0|            Py_DECREF(ref);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9652|      0|            return -1;
 9653|      0|        }
 9654|    229|    }
 9655|  1.50k|    assert(PyDict_CheckExact(subclasses));
  ------------------
  |  Branch (9655:5): [True: 1.50k, False: 0]
  ------------------
 9656|       |
 9657|  1.50k|    int result = PyDict_SetItem(subclasses, key, ref);
 9658|  1.50k|    Py_DECREF(ref);
  ------------------
  |  |  430|  1.50k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9659|  1.50k|    Py_DECREF(key);
  ------------------
  |  |  430|  1.50k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9660|  1.50k|    return result;
 9661|  1.50k|}
typeobject.c:check_basicsize_includes_size_and_offsets:
 5123|    131|{
 5124|    131|    if (type->tp_alloc != PyType_GenericAlloc) {
  ------------------
  |  Branch (5124:9): [True: 0, False: 131]
  ------------------
 5125|       |        // Custom allocators can ignore tp_basicsize
 5126|      0|        return 1;
 5127|      0|    }
 5128|    131|    Py_ssize_t max = (Py_ssize_t)type->tp_basicsize;
 5129|       |
 5130|    131|    if (type->tp_base && type->tp_base->tp_basicsize > type->tp_basicsize) {
  ------------------
  |  Branch (5130:9): [True: 131, False: 0]
  |  Branch (5130:26): [True: 0, False: 131]
  ------------------
 5131|      0|        PyErr_Format(PyExc_TypeError,
 5132|      0|                     "tp_basicsize for type '%s' (%zd) is too small for base '%s' (%zd)",
 5133|      0|                     type->tp_name, type->tp_basicsize,
 5134|      0|                     type->tp_base->tp_name, type->tp_base->tp_basicsize);
 5135|      0|        return 0;
 5136|      0|    }
 5137|    131|    if (type->tp_weaklistoffset + (Py_ssize_t)sizeof(PyObject*) > max) {
  ------------------
  |  Branch (5137:9): [True: 0, False: 131]
  ------------------
 5138|      0|        PyErr_Format(PyExc_TypeError,
 5139|      0|                     "weaklist offset %zd is out of bounds for type '%s' (tp_basicsize = %zd)",
 5140|      0|                     type->tp_weaklistoffset,
 5141|      0|                     type->tp_name, type->tp_basicsize);
 5142|      0|        return 0;
 5143|      0|    }
 5144|    131|    if (type->tp_dictoffset + (Py_ssize_t)sizeof(PyObject*) > max) {
  ------------------
  |  Branch (5144:9): [True: 0, False: 131]
  ------------------
 5145|      0|        PyErr_Format(PyExc_TypeError,
 5146|      0|                     "dict offset %zd is out of bounds for type '%s' (tp_basicsize = %zd)",
 5147|      0|                     type->tp_dictoffset,
 5148|      0|                     type->tp_name, type->tp_basicsize);
 5149|      0|        return 0;
 5150|      0|    }
 5151|    131|    if (type->tp_vectorcall_offset + (Py_ssize_t)sizeof(vectorcallfunc*) > max) {
  ------------------
  |  Branch (5151:9): [True: 0, False: 131]
  ------------------
 5152|      0|        PyErr_Format(PyExc_TypeError,
 5153|      0|                     "vectorcall offset %zd is out of bounds for type '%s' (tp_basicsize = %zd)",
 5154|      0|                     type->tp_vectorcall_offset,
 5155|      0|                     type->tp_name, type->tp_basicsize);
 5156|      0|        return 0;
 5157|      0|    }
 5158|    131|    return 1;
 5159|    131|}
typeobject.c:type_name:
 1488|  96.9k|{
 1489|  96.9k|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|  96.9k|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1490|  96.9k|    if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
  ------------------
  |  |  503|  96.9k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (1490:9): [True: 8, False: 96.9k]
  ------------------
 1491|      8|        PyHeapTypeObject* et = (PyHeapTypeObject*)type;
 1492|      8|        return Py_NewRef(et->ht_name);
  ------------------
  |  |  550|      8|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1493|      8|    }
 1494|  96.9k|    else {
 1495|  96.9k|        return PyUnicode_FromString(_PyType_Name(type));
 1496|  96.9k|    }
 1497|  96.9k|}
typeobject.c:lookup_tp_mro:
  649|   112k|{
  650|   112k|    return self->tp_mro;
  651|   112k|}
typeobject.c:getitemdata:
 6087|  1.46k|{
 6088|  1.46k|    if (!_PyType_HasFeature(Py_TYPE(obj), Py_TPFLAGS_ITEMS_AT_END)) {
  ------------------
  |  |  213|  1.46k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!_PyType_HasFeature(Py_TYPE(obj), Py_TPFLAGS_ITEMS_AT_END)) {
  ------------------
  |  |  548|  1.46k|#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23)
  ------------------
  |  Branch (6088:9): [True: 0, False: 1.46k]
  ------------------
 6089|      0|        if (raise) {
  ------------------
  |  Branch (6089:13): [True: 0, False: 0]
  ------------------
 6090|      0|            PyErr_Format(PyExc_TypeError,
 6091|      0|                         "type '%T' does not have Py_TPFLAGS_ITEMS_AT_END",
 6092|      0|                         obj);
 6093|      0|        }
 6094|      0|        return NULL;
 6095|      0|    }
 6096|  1.46k|    return (char *)obj + Py_TYPE(obj)->tp_basicsize;
  ------------------
  |  |  213|  1.46k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6097|  1.46k|}
typeobject.c:should_assign_version_tag:
 6207|    429|{
 6208|    429|    return (version_tag == 0
  ------------------
  |  Branch (6208:13): [True: 429, False: 0]
  ------------------
 6209|    429|        && FT_ATOMIC_LOAD_UINT16_RELAXED(type->tp_versions_used) < MAX_VERSIONS_PER_CLASS
  ------------------
  |  |  158|    429|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  ------------------
                      && FT_ATOMIC_LOAD_UINT16_RELAXED(type->tp_versions_used) < MAX_VERSIONS_PER_CLASS
  ------------------
  |  | 1355|    858|#define MAX_VERSIONS_PER_CLASS 1000
  ------------------
  |  Branch (6209:12): [True: 429, False: 0]
  ------------------
 6210|    429|        && MCACHE_CACHEABLE_NAME(name));
  ------------------
  |  |   44|    429|#define MCACHE_CACHEABLE_NAME(name) (PyUnicode_CheckExact(name) && PyUnicode_CHECK_INTERNED(name))
  |  |  ------------------
  |  |  |  |  104|    429|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|    858|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    429|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    429|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 429, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define MCACHE_CACHEABLE_NAME(name) (PyUnicode_CheckExact(name) && PyUnicode_CHECK_INTERNED(name))
  |  |  ------------------
  |  |  |  |  214|    429|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    429|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    429|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (214:38): [True: 429, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6211|    429|}
typeobject.c:find_name_in_mro:
 6117|  82.7k|{
 6118|  82.7k|    Py_hash_t hash = _PyObject_HashDictKey(name);
 6119|  82.7k|    if (hash == -1) {
  ------------------
  |  Branch (6119:9): [True: 0, False: 82.7k]
  ------------------
 6120|      0|        PyErr_Clear();
 6121|      0|        return -1;
 6122|      0|    }
 6123|       |
 6124|       |    /* Look in tp_dict of types in MRO */
 6125|  82.7k|    PyObject *mro = lookup_tp_mro(type);
 6126|  82.7k|    if (mro == NULL) {
  ------------------
  |  Branch (6126:9): [True: 0, False: 82.7k]
  ------------------
 6127|      0|        if (!is_readying(type)) {
  ------------------
  |  Branch (6127:13): [True: 0, False: 0]
  ------------------
 6128|      0|            if (PyType_Ready(type) < 0) {
  ------------------
  |  Branch (6128:17): [True: 0, False: 0]
  ------------------
 6129|      0|                PyErr_Clear();
 6130|      0|                return -1;
 6131|      0|            }
 6132|      0|            mro = lookup_tp_mro(type);
 6133|      0|        }
 6134|      0|        if (mro == NULL) {
  ------------------
  |  Branch (6134:13): [True: 0, False: 0]
  ------------------
 6135|      0|            return -1;
 6136|      0|        }
 6137|      0|    }
 6138|       |
 6139|  82.7k|    int res = 0;
 6140|  82.7k|    PyThreadState *tstate = _PyThreadState_GET();
 6141|       |    /* Keep a strong reference to mro because type->tp_mro can be replaced
 6142|       |       during dict lookup, e.g. when comparing to non-string keys. */
 6143|  82.7k|    _PyCStackRef mro_ref;
 6144|  82.7k|    _PyThreadState_PushCStackRef(tstate, &mro_ref);
 6145|  82.7k|    mro_ref.ref = PyStackRef_FromPyObjectNew(mro);
  ------------------
  |  |  611|  82.7k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  82.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  82.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6146|  82.7k|    Py_ssize_t n = PyTuple_GET_SIZE(mro);
  ------------------
  |  |   27|  82.7k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  82.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  82.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6147|   352k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (6147:28): [True: 287k, False: 64.6k]
  ------------------
 6148|   287k|        PyObject *base = PyTuple_GET_ITEM(mro, i);
  ------------------
  |  |   29|   287k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   287k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   287k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6148:26): [True: 287k, False: 0]
  ------------------
 6149|   287k|        PyObject *dict = lookup_tp_dict(_PyType_CAST(base));
  ------------------
  |  |  770|   287k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   287k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (6149:41): [True: 287k, False: 0]
  ------------------
 6150|   287k|        assert(dict && PyDict_Check(dict));
  ------------------
  |  Branch (6150:9): [True: 287k, False: 0]
  |  Branch (6150:9): [True: 287k, False: 0]
  ------------------
 6151|   287k|        Py_ssize_t ix = _Py_dict_lookup_threadsafe_stackref(
 6152|   287k|            (PyDictObject *)dict, name, hash, out);
 6153|   287k|        if (ix == DKIX_ERROR) {
  ------------------
  |  |  187|   287k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (6153:13): [True: 0, False: 287k]
  ------------------
 6154|      0|            PyErr_Clear();
 6155|      0|            res = -1;
 6156|      0|            goto done;
 6157|      0|        }
 6158|   287k|        if (!PyStackRef_IsNull(*out)) {
  ------------------
  |  |  482|   287k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|   287k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   287k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6158:13): [True: 18.0k, False: 269k]
  ------------------
 6159|  18.0k|            res = 1;
 6160|  18.0k|            break;
 6161|  18.0k|        }
 6162|   287k|    }
 6163|  82.7k|done:
 6164|  82.7k|    _PyThreadState_PopCStackRef(tstate, &mro_ref);
 6165|  82.7k|    return res;
 6166|  82.7k|}
typeobject.c:set_flags_recursive:
 6363|     28|{
 6364|     28|    if (PyType_HasFeature(self, Py_TPFLAGS_IMMUTABLETYPE) ||
  ------------------
  |  |  500|     28|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (6364:9): [True: 28, False: 0]
  ------------------
 6365|      0|        (self->tp_flags & mask) == flags)
  ------------------
  |  Branch (6365:9): [True: 0, False: 0]
  ------------------
 6366|     28|    {
 6367|     28|        return;
 6368|     28|    }
 6369|       |
 6370|      0|    type_set_flags_with_mask(self, mask, flags);
 6371|       |
 6372|      0|    PyObject *children = _PyType_GetSubclasses(self);
 6373|      0|    if (children == NULL) {
  ------------------
  |  Branch (6373:9): [True: 0, False: 0]
  ------------------
 6374|      0|        return;
 6375|      0|    }
 6376|       |
 6377|      0|    for (Py_ssize_t i = 0; i < PyList_GET_SIZE(children); i++) {
  ------------------
  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6377:28): [True: 0, False: 0]
  ------------------
 6378|      0|        PyObject *child = PyList_GET_ITEM(children, i);
  ------------------
  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6378:27): [True: 0, False: 0]
  ------------------
 6379|      0|        set_flags_recursive((PyTypeObject *)child, mask, flags);
 6380|      0|    }
 6381|      0|    Py_DECREF(children);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6382|      0|}
typeobject.c:type_dealloc_common:
 6738|      8|{
 6739|      8|    PyObject *bases = lookup_tp_bases(type);
 6740|      8|    if (bases != NULL) {
  ------------------
  |  Branch (6740:9): [True: 8, False: 0]
  ------------------
 6741|      8|        PyObject *exc = PyErr_GetRaisedException();
 6742|      8|        BEGIN_TYPE_LOCK();
 6743|      8|        remove_all_subclasses(type, bases);
 6744|      8|        END_TYPE_LOCK();
 6745|      8|        PyErr_SetRaisedException(exc);
 6746|      8|    }
 6747|      8|}
typeobject.c:remove_all_subclasses:
 9735|      8|{
 9736|      8|    assert(bases != NULL);
  ------------------
  |  Branch (9736:5): [True: 8, False: 0]
  ------------------
 9737|       |    // remove_subclass() can clear the current exception
 9738|      8|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (9738:5): [True: 8, False: 0]
  ------------------
 9739|       |
 9740|     16|    for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(bases); i++) {
  ------------------
  |  |   27|     16|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9740:28): [True: 8, False: 8]
  ------------------
 9741|      8|        PyObject *base = PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|      8|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      8|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9741:26): [True: 8, False: 0]
  ------------------
 9742|      8|        if (PyType_Check(base)) {
  ------------------
  |  |  766|      8|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 8, False: 0]
  |  |  ------------------
  ------------------
 9743|      8|            remove_subclass((PyTypeObject*) base, type);
 9744|      8|        }
 9745|      8|    }
 9746|      8|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (9746:5): [True: 8, False: 0]
  ------------------
 9747|      8|}
typeobject.c:remove_subclass:
 9712|      8|{
 9713|      8|    PyObject *subclasses = lookup_tp_subclasses(base);  // borrowed ref
 9714|      8|    if (subclasses == NULL) {
  ------------------
  |  Branch (9714:9): [True: 0, False: 8]
  ------------------
 9715|      0|        return;
 9716|      0|    }
 9717|      8|    assert(PyDict_CheckExact(subclasses));
  ------------------
  |  Branch (9717:5): [True: 8, False: 0]
  ------------------
 9718|       |
 9719|      8|    PyObject *key = get_subclasses_key(type, base);
 9720|      8|    if (key != NULL && PyDict_DelItem(subclasses, key)) {
  ------------------
  |  Branch (9720:9): [True: 8, False: 0]
  |  Branch (9720:24): [True: 0, False: 8]
  ------------------
 9721|       |        /* This can happen if the type initialization errored out before
 9722|       |           the base subclasses were updated (e.g. a non-str __qualname__
 9723|       |           was passed in the type dict). */
 9724|      0|        PyErr_Clear();
 9725|      0|    }
 9726|      8|    Py_XDECREF(key);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9727|       |
 9728|      8|    if (PyDict_Size(subclasses) == 0) {
  ------------------
  |  Branch (9728:9): [True: 0, False: 8]
  ------------------
 9729|      0|        clear_tp_subclasses(base);
 9730|      0|    }
 9731|      8|}
typeobject.c:get_subclasses_key:
 9681|      8|{
 9682|      8|    PyObject *key = PyLong_FromVoidPtr((void *) type);
 9683|      8|    if (key != NULL) {
  ------------------
  |  Branch (9683:9): [True: 8, False: 0]
  ------------------
 9684|      8|        return key;
 9685|      8|    }
 9686|      0|    PyErr_Clear();
 9687|       |
 9688|       |    /* This basically means we're out of memory.
 9689|       |       We fall back to manually traversing the values. */
 9690|      0|    Py_ssize_t i = 0;
 9691|      0|    PyObject *ref;  // borrowed ref
 9692|      0|    PyObject *subclasses = lookup_tp_subclasses(base);
 9693|      0|    if (subclasses != NULL) {
  ------------------
  |  Branch (9693:9): [True: 0, False: 0]
  ------------------
 9694|      0|        while (PyDict_Next(subclasses, &i, &key, &ref)) {
  ------------------
  |  Branch (9694:16): [True: 0, False: 0]
  ------------------
 9695|      0|            PyTypeObject *subclass = type_from_ref(ref);
 9696|      0|            if (subclass == NULL) {
  ------------------
  |  Branch (9696:17): [True: 0, False: 0]
  ------------------
 9697|      0|                continue;
 9698|      0|            }
 9699|      0|            if (subclass == type) {
  ------------------
  |  Branch (9699:17): [True: 0, False: 0]
  ------------------
 9700|      0|                Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9701|      0|                return Py_NewRef(key);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9702|      0|            }
 9703|      0|            Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9704|      0|        }
 9705|      0|    }
 9706|       |    /* It wasn't found. */
 9707|      0|    return NULL;
 9708|      0|}
typeobject.c:clear_tp_subclasses:
  722|      8|{
  723|       |    /* Delete the dictionary to save memory. _PyStaticType_Dealloc()
  724|       |       callers also test if tp_subclasses is NULL to check if a static type
  725|       |       has no subclass. */
  726|      8|    if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|      8|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (726:9): [True: 0, False: 8]
  ------------------
  727|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
  728|      0|        managed_static_type_state *state = _PyStaticType_GetState(interp, self);
  729|      0|        Py_CLEAR(state->tp_subclasses);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  730|      0|        return;
  731|      0|    }
  732|      8|    Py_CLEAR(self->tp_subclasses);
  ------------------
  |  |  484|      8|    do { \
  |  |  485|      8|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      8|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      8|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      8|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      8|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      8|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 8]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
  733|      8|}
typeobject.c:type_dealloc:
 6870|      8|{
 6871|      8|    PyTypeObject *type = PyTypeObject_CAST(self);
  ------------------
  |  |  203|      8|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 6872|       |
 6873|       |    // Assert this is a heap-allocated type object
 6874|      8|    _PyObject_ASSERT((PyObject *)type, type->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  |  425|      8|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      8|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      8|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      8|      ? (void)(0) \
  |  |  |  |  |  |  418|      8|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6875|       |
 6876|       |    // Notify type watchers before teardown.  The type object is still fully
 6877|       |    // intact at this point (dict, bases, mro, name are all valid), so
 6878|       |    // callbacks can safely inspect it.
 6879|      8|    if (type->tp_watched) {
  ------------------
  |  Branch (6879:9): [True: 0, False: 8]
  ------------------
 6880|      0|        _PyObject_ResurrectStart(self);
 6881|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
 6882|      0|        int bits = type->tp_watched;
 6883|      0|        int i = 0;
 6884|      0|        while (bits) {
  ------------------
  |  Branch (6884:16): [True: 0, False: 0]
  ------------------
 6885|      0|            assert(i < TYPE_MAX_WATCHERS);
  ------------------
  |  Branch (6885:13): [True: 0, False: 0]
  ------------------
 6886|      0|            if (bits & 1) {
  ------------------
  |  Branch (6886:17): [True: 0, False: 0]
  ------------------
 6887|      0|                PyType_WatchCallback cb = interp->type_watchers[i];
 6888|      0|                if (cb && (cb(type) < 0)) {
  ------------------
  |  Branch (6888:21): [True: 0, False: 0]
  |  Branch (6888:27): [True: 0, False: 0]
  ------------------
 6889|      0|                    PyErr_FormatUnraisable(
 6890|      0|                        "Exception ignored in type watcher callback #%d "
 6891|      0|                        "for %R",
 6892|      0|                        i, type);
 6893|      0|                }
 6894|      0|            }
 6895|      0|            i++;
 6896|      0|            bits >>= 1;
 6897|      0|        }
 6898|      0|        if (_PyObject_ResurrectEnd(self)) {
  ------------------
  |  Branch (6898:13): [True: 0, False: 0]
  ------------------
 6899|      0|            return;     // callback resurrected the object
 6900|      0|        }
 6901|      0|    }
 6902|       |
 6903|      8|    _PyObject_GC_UNTRACK(type);
  ------------------
  |  |  507|      8|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6904|      8|    type_dealloc_common(type);
 6905|       |
 6906|       |    // PyObject_ClearWeakRefs() raises an exception if Py_REFCNT() != 0
 6907|      8|    assert(Py_REFCNT(type) == 0);
  ------------------
  |  Branch (6907:5): [True: 8, False: 0]
  ------------------
 6908|      8|    PyObject_ClearWeakRefs((PyObject *)type);
 6909|       |
 6910|      8|    Py_XDECREF(type->tp_base);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6911|      8|    Py_XDECREF(type->tp_dict);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6912|      8|    Py_XDECREF(type->tp_bases);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6913|      8|    Py_XDECREF(type->tp_mro);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6914|      8|    Py_XDECREF(type->tp_cache);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6915|      8|    clear_tp_subclasses(type);
 6916|      8|    _PyTypeCache_Invalidate(type);
 6917|       |
 6918|       |    /* A type's tp_doc is heap allocated, unlike the tp_doc slots
 6919|       |     * of most other objects.  It's okay to cast it to char *.
 6920|       |     */
 6921|      8|    PyMem_Free((char *)type->tp_doc);
 6922|       |
 6923|      8|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
 6924|      8|    Py_XDECREF(et->ht_name);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6925|      8|    Py_XDECREF(et->ht_qualname);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6926|      8|    Py_XDECREF(et->ht_slots);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6927|      8|    if (et->ht_cached_keys) {
  ------------------
  |  Branch (6927:9): [True: 4, False: 4]
  ------------------
 6928|      4|        _PyDict_RemoveKeysForClass(et);
 6929|      4|    }
 6930|      8|    Py_XDECREF(et->ht_module);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6931|      8|    PyMem_Free(et->_ht_tpname);
 6932|       |#ifdef Py_GIL_DISABLED
 6933|       |    assert(et->unique_id == _Py_INVALID_UNIQUE_ID);
 6934|       |#endif
 6935|      8|    et->ht_token = NULL;
 6936|      8|    Py_TYPE(type)->tp_free((PyObject *)type);
  ------------------
  |  |  213|      8|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6937|      8|}
typeobject.c:type_call:
 2402|   374k|{
 2403|   374k|    PyTypeObject *type = PyTypeObject_CAST(self);
  ------------------
  |  |  203|   374k|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 2404|   374k|    PyObject *obj;
 2405|   374k|    PyThreadState *tstate = _PyThreadState_GET();
 2406|       |
 2407|       |#ifdef Py_DEBUG
 2408|       |    /* type_call() must not be called with an exception set,
 2409|       |       because it can clear it (directly or indirectly) and so the
 2410|       |       caller loses its exception */
 2411|       |    assert(!_PyErr_Occurred(tstate));
 2412|       |#endif
 2413|       |
 2414|       |    /* Special case: type(x) should return Py_TYPE(x) */
 2415|       |    /* We only want type itself to accept the one-argument form (#27157) */
 2416|   374k|    if (type == &PyType_Type) {
  ------------------
  |  Branch (2416:9): [True: 688, False: 373k]
  ------------------
 2417|    688|        assert(args != NULL && PyTuple_Check(args));
  ------------------
  |  Branch (2417:9): [True: 688, False: 0]
  |  Branch (2417:9): [True: 688, False: 0]
  ------------------
 2418|    688|        assert(kwds == NULL || PyDict_Check(kwds));
  ------------------
  |  Branch (2418:9): [True: 686, False: 2]
  |  Branch (2418:9): [True: 2, False: 0]
  ------------------
 2419|    688|        Py_ssize_t nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|    688|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    688|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    688|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2420|       |
 2421|    688|        if (nargs == 1 && (kwds == NULL || !PyDict_GET_SIZE(kwds))) {
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2421:13): [True: 0, False: 688]
  |  Branch (2421:28): [True: 0, False: 0]
  |  Branch (2421:44): [True: 0, False: 0]
  ------------------
 2422|      0|            obj = (PyObject *) Py_TYPE(PyTuple_GET_ITEM(args, 0));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2423|      0|            return Py_NewRef(obj);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2424|      0|        }
 2425|       |
 2426|       |        /* SF bug 475327 -- if that didn't trigger, we need 3
 2427|       |           arguments. But PyArg_ParseTuple in type_new may give
 2428|       |           a msg saying type() needs exactly 3. */
 2429|    688|        if (nargs != 3) {
  ------------------
  |  Branch (2429:13): [True: 0, False: 688]
  ------------------
 2430|      0|            PyErr_SetString(PyExc_TypeError,
 2431|      0|                            "type() takes 1 or 3 arguments");
 2432|      0|            return NULL;
 2433|      0|        }
 2434|    688|    }
 2435|       |
 2436|   374k|    if (type->tp_new == NULL) {
  ------------------
  |  Branch (2436:9): [True: 0, False: 374k]
  ------------------
 2437|      0|        _PyErr_Format(tstate, PyExc_TypeError,
 2438|      0|                      "cannot create '%s' instances", type->tp_name);
 2439|      0|        return NULL;
 2440|      0|    }
 2441|       |
 2442|   374k|    obj = type->tp_new(type, args, kwds);
 2443|   374k|    obj = _Py_CheckFunctionResult(tstate, (PyObject*)type, obj, NULL);
 2444|   374k|    if (obj == NULL)
  ------------------
  |  Branch (2444:9): [True: 0, False: 374k]
  ------------------
 2445|      0|        return NULL;
 2446|       |
 2447|       |    /* If the returned object is not an instance of type,
 2448|       |       it won't be initialized. */
 2449|   374k|    if (!PyObject_TypeCheck(obj, type))
  ------------------
  |  |  378|   374k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|   374k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   374k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2449:9): [True: 0, False: 374k]
  ------------------
 2450|      0|        return obj;
 2451|       |
 2452|   374k|    type = Py_TYPE(obj);
  ------------------
  |  |  213|   374k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   374k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   374k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2453|   374k|    if (type->tp_init != NULL) {
  ------------------
  |  Branch (2453:9): [True: 374k, False: 0]
  ------------------
 2454|   374k|        int res = type->tp_init(obj, args, kwds);
 2455|   374k|        if (res < 0) {
  ------------------
  |  Branch (2455:13): [True: 55, False: 374k]
  ------------------
 2456|     55|            assert(_PyErr_Occurred(tstate));
  ------------------
  |  Branch (2456:13): [True: 55, False: 0]
  ------------------
 2457|     55|            Py_SETREF(obj, NULL);
  ------------------
  |  |  354|     55|    do { \
  |  |  355|     55|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     55|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|     55|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     55|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|     55|        *_tmp_dst_ptr = (src); \
  |  |  358|     55|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|     55|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|     55|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 55]
  |  |  ------------------
  ------------------
 2458|     55|        }
 2459|   374k|        else {
 2460|   374k|            assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (2460:13): [True: 374k, False: 0]
  ------------------
 2461|   374k|        }
 2462|   374k|    }
 2463|   374k|    return obj;
 2464|   374k|}
typeobject.c:type_setattro:
 6636|    558|{
 6637|    558|    PyTypeObject *type = PyTypeObject_CAST(self);
  ------------------
  |  |  203|    558|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 6638|    558|    int res;
 6639|    558|    if (type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) {
  ------------------
  |  |  500|    558|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (6639:9): [True: 0, False: 558]
  ------------------
 6640|      0|        PyErr_Format(
 6641|      0|            PyExc_TypeError,
 6642|      0|            "cannot set %R attribute of immutable type '%s'",
 6643|      0|            name, type->tp_name);
 6644|      0|        return -1;
 6645|      0|    }
 6646|    558|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|    558|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    558|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (6646:9): [True: 0, False: 558]
  ------------------
 6647|      0|        PyErr_Format(PyExc_TypeError,
 6648|      0|                     "attribute name must be string, not '%.200s'",
 6649|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6650|      0|        return -1;
 6651|      0|    }
 6652|       |
 6653|    558|    if (PyUnicode_CheckExact(name)) {
  ------------------
  |  |  104|    558|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    558|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    558|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    558|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 558, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6654|    558|        Py_INCREF(name);
  ------------------
  |  |  310|    558|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    558|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    558|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6655|    558|    }
 6656|      0|    else {
 6657|      0|        name = _PyUnicode_Copy(name);
 6658|      0|        if (name == NULL)
  ------------------
  |  Branch (6658:13): [True: 0, False: 0]
  ------------------
 6659|      0|            return -1;
 6660|      0|    }
 6661|    558|    if (!PyUnicode_CHECK_INTERNED(name)) {
  ------------------
  |  |  214|    558|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    558|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    558|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6661:9): [True: 0, False: 558]
  ------------------
 6662|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
 6663|      0|        _PyUnicode_InternMortal(interp, &name);
 6664|      0|        if (!PyUnicode_CHECK_INTERNED(name)) {
  ------------------
  |  |  214|      0|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6664:13): [True: 0, False: 0]
  ------------------
 6665|      0|            PyErr_SetString(PyExc_MemoryError,
 6666|      0|                            "Out of memory interning an attribute name");
 6667|      0|            Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6668|      0|            return -1;
 6669|      0|        }
 6670|      0|    }
 6671|       |
 6672|    558|    PyTypeObject *metatype = Py_TYPE(type);
  ------------------
  |  |  213|    558|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    558|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    558|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6673|    558|    assert(!_PyType_HasFeature(metatype, Py_TPFLAGS_INLINE_VALUES));
  ------------------
  |  Branch (6673:5): [True: 558, False: 0]
  ------------------
 6674|    558|    assert(!_PyType_HasFeature(metatype, Py_TPFLAGS_MANAGED_DICT));
  ------------------
  |  Branch (6674:5): [True: 558, False: 0]
  ------------------
 6675|       |
 6676|       |#ifdef Py_GIL_DISABLED
 6677|       |    // gh-139103: Enable deferred refcounting for functions and descriptors
 6678|       |    // assigned to type objects.  This is important for `dataclass.__init__`,
 6679|       |    // which is generated dynamically, and for descriptor scaling on
 6680|       |    // free-threaded builds.
 6681|       |    if (value != NULL && (PyFunction_Check(value) || Py_TYPE(value)->tp_descr_get != NULL))
 6682|       |    {
 6683|       |        PyUnstable_Object_EnableDeferredRefcount(value);
 6684|       |    }
 6685|       |#endif
 6686|       |
 6687|    558|    PyObject *old_value = NULL;
 6688|    558|    PyObject *descr = _PyType_LookupRef(metatype, name);
 6689|    558|    if (descr != NULL) {
  ------------------
  |  Branch (6689:9): [True: 219, False: 339]
  ------------------
 6690|    219|        descrsetfunc f = Py_TYPE(descr)->tp_descr_set;
  ------------------
  |  |  213|    219|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    219|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    219|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6691|    219|        if (f != NULL) {
  ------------------
  |  Branch (6691:13): [True: 194, False: 25]
  ------------------
 6692|    194|            res = f(descr, (PyObject *)type, value);
 6693|    194|            goto done;
 6694|    194|        }
 6695|    219|    }
 6696|       |
 6697|    364|    PyObject *dict = type->tp_dict;
 6698|    364|    if (dict == NULL) {
  ------------------
  |  Branch (6698:9): [True: 0, False: 364]
  ------------------
 6699|       |        // This is an unlikely case.  PyType_Ready has not yet been done and
 6700|       |        // we need to initialize tp_dict.  We don't just do PyType_Ready
 6701|       |        // because we could already be readying.
 6702|      0|        BEGIN_TYPE_LOCK();
 6703|      0|        dict = type->tp_dict;
 6704|      0|        if (dict == NULL) {
  ------------------
  |  Branch (6704:13): [True: 0, False: 0]
  ------------------
 6705|      0|            dict = type->tp_dict = PyDict_New();
 6706|      0|        }
 6707|      0|        END_TYPE_LOCK();
 6708|      0|        if (dict == NULL) {
  ------------------
  |  Branch (6708:13): [True: 0, False: 0]
  ------------------
 6709|      0|            res = -1;
 6710|      0|            goto done;
 6711|      0|        }
 6712|      0|    }
 6713|       |
 6714|    364|    BEGIN_TYPE_DICT_LOCK(dict);
 6715|    364|    res = type_update_dict(type, (PyDictObject *)dict, name, value, &old_value);
 6716|    364|    assert(_PyType_CheckConsistency(type));
  ------------------
  |  Branch (6716:5): [True: 364, False: 0]
  ------------------
 6717|    364|    if (res == 0) {
  ------------------
  |  Branch (6717:9): [True: 364, False: 0]
  ------------------
 6718|    364|        if (is_dunder_name(name) && has_slotdef(name)) {
  ------------------
  |  Branch (6718:13): [True: 32, False: 332]
  |  Branch (6718:37): [True: 24, False: 8]
  ------------------
 6719|       |            // The name corresponds to a type slot.
 6720|     24|            res = update_slot_after_setattr(type, name);
 6721|     24|        }
 6722|    364|    }
 6723|    364|    END_TYPE_DICT_LOCK();
 6724|       |
 6725|    558|done:
 6726|    558|    Py_DECREF(name);
  ------------------
  |  |  430|    558|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    558|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    558|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6727|    558|    Py_XDECREF(descr);
  ------------------
  |  |  524|    558|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    558|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    558|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6728|       |    // delay decref of the old value as lock-free type cache readers may access it
 6729|    558|    if (old_value != NULL && !_Py_IsImmortal(old_value)) {
  ------------------
  |  |  137|     41|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6729:9): [True: 41, False: 517]
  |  Branch (6729:30): [True: 5, False: 36]
  ------------------
 6730|      5|        _PyObject_XDecRefDelayed(old_value);
 6731|      5|    }
 6732|    558|    return res;
 6733|    364|}
typeobject.c:type_update_dict:
 6576|    364|{
 6577|       |    // We don't want any re-entrancy between when we update the dict
 6578|       |    // and call _PyType_Modified_Unlocked, including running the destructor
 6579|       |    // of the current value as it can observe the cache in an inconsistent
 6580|       |    // state.  Because we have an exact unicode and our dict has exact
 6581|       |    // unicodes we know that this will all complete without releasing
 6582|       |    // the locks.
 6583|    364|    if (_PyDict_GetItemRef_Unicode_LockHeld(dict, name, old_value) < 0) {
  ------------------
  |  Branch (6583:9): [True: 0, False: 364]
  ------------------
 6584|      0|        return -1;
 6585|      0|    }
 6586|       |
 6587|       |    /* Clear the VALID_VERSION flag of 'type' and all its
 6588|       |        subclasses.  This could possibly be unified with the
 6589|       |        update_subclasses() recursion in update_slot(), but carefully:
 6590|       |        they each have their own conditions on which to stop
 6591|       |        recursing into subclasses. */
 6592|    364|    _PyType_Modified_Unlocked(type);
 6593|       |
 6594|    364|    if (_PyDict_SetItem_LockHeld(dict, name, value) < 0) {
  ------------------
  |  Branch (6594:9): [True: 0, False: 364]
  ------------------
 6595|      0|        PyErr_Format(PyExc_AttributeError,
 6596|      0|                     "type object '%.50s' has no attribute '%U'",
 6597|      0|                     ((PyTypeObject*)type)->tp_name, name);
 6598|      0|        _PyObject_SetAttributeErrorContext((PyObject *)type, name);
 6599|      0|        return -1;
 6600|      0|    }
 6601|       |
 6602|    364|    return 0;
 6603|    364|}
typeobject.c:is_dunder_name:
 6172|    364|{
 6173|    364|    Py_ssize_t length = PyUnicode_GET_LENGTH(name);
  ------------------
  |  |  299|    364|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    364|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    364|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6174|    364|    int kind = PyUnicode_KIND(name);
  ------------------
  |  |  258|    364|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    728|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 364, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6175|       |    /* Special names contain at least "__x__" and are always ASCII. */
 6176|    364|    if (length > 4 && kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (6176:9): [True: 343, False: 21]
  |  Branch (6176:23): [True: 343, False: 0]
  ------------------
 6177|    343|        const Py_UCS1 *characters = PyUnicode_1BYTE_DATA(name);
  ------------------
  |  |  291|    343|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    343|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 6178|    343|        return (
 6179|    343|            ((characters[length-2] == '_') && (characters[length-1] == '_')) &&
  ------------------
  |  Branch (6179:14): [True: 32, False: 311]
  |  Branch (6179:47): [True: 32, False: 0]
  ------------------
 6180|     32|            ((characters[0] == '_') && (characters[1] == '_'))
  ------------------
  |  Branch (6180:14): [True: 32, False: 0]
  |  Branch (6180:40): [True: 32, False: 0]
  ------------------
 6181|    343|        );
 6182|    343|    }
 6183|     21|    return 0;
 6184|    364|}
typeobject.c:has_slotdef:
11773|     32|{
11774|  1.40k|    for (pytype_slotdef *p = slotdefs; p->name_strobj; p++) {
  ------------------
  |  Branch (11774:40): [True: 1.39k, False: 8]
  ------------------
11775|  1.39k|        if (p->name_strobj == name) {
  ------------------
  |  Branch (11775:13): [True: 24, False: 1.36k]
  ------------------
11776|     24|            return true;
11777|     24|        }
11778|  1.39k|    }
11779|      8|    return false;
11780|     32|}
typeobject.c:update_slot_after_setattr:
 6607|     24|{
 6608|       |#ifdef Py_GIL_DISABLED
 6609|       |    assert(SLOT_UPDATE_CHUNK_SIZE >= MAX_EQUIV);
 6610|       |    slot_update_chunk_t chunk = {0};
 6611|       |    // Stack allocate the first chunk.  It is usually the only one needed but
 6612|       |    // updates are queued for subclasses as well, so more chunks are needed if
 6613|       |    // the type has more than SLOT_UPDATE_CHUNK_SIZE subclasses.
 6614|       |    slot_update_t queued_updates = {&chunk};
 6615|       |
 6616|       |    int res = update_slot(type, name, &queued_updates);
 6617|       |    if (res == 0 && queued_updates.head->n > 0) {
 6618|       |        apply_type_slot_updates(&queued_updates);
 6619|       |        ASSERT_TYPE_LOCK_HELD();
 6620|       |    }
 6621|       |    slot_update_chunk_t *cur = queued_updates.head;
 6622|       |    while (cur != &chunk) {
 6623|       |        slot_update_chunk_t *prev = cur->prev;
 6624|       |        PyMem_Free(cur);
 6625|       |        cur = prev;
 6626|       |    }
 6627|       |    return res;
 6628|       |#else
 6629|       |    update_slot(type, name, NULL);
 6630|     24|    return 0;
 6631|     24|#endif
 6632|     24|}
typeobject.c:update_slot:
12028|     24|{
12029|     24|    pytype_slotdef *ptrs[MAX_EQUIV];
12030|     24|    pytype_slotdef *p;
12031|     24|    pytype_slotdef **pp;
12032|     24|    int offset;
12033|       |
12034|     24|    ASSERT_TYPE_LOCK_HELD();
12035|     24|    assert(PyUnicode_CheckExact(name));
  ------------------
  |  Branch (12035:5): [True: 24, False: 0]
  ------------------
12036|     24|    assert(PyUnicode_CHECK_INTERNED(name));
  ------------------
  |  Branch (12036:5): [True: 24, False: 0]
  ------------------
12037|       |
12038|     24|    pp = ptrs;
12039|  2.28k|    for (p = slotdefs; p->name; p++) {
  ------------------
  |  Branch (12039:24): [True: 2.25k, False: 24]
  ------------------
12040|  2.25k|        assert(PyUnicode_CheckExact(p->name_strobj));
  ------------------
  |  Branch (12040:9): [True: 2.25k, False: 0]
  ------------------
12041|  2.25k|        assert(PyUnicode_CHECK_INTERNED(p->name_strobj));
  ------------------
  |  Branch (12041:9): [True: 2.25k, False: 0]
  ------------------
12042|  2.25k|        assert(PyUnicode_CheckExact(name));
  ------------------
  |  Branch (12042:9): [True: 2.25k, False: 0]
  ------------------
12043|       |        /* bpo-40521: Using interned strings. */
12044|  2.25k|        if (p->name_strobj == name) {
  ------------------
  |  Branch (12044:13): [True: 24, False: 2.23k]
  ------------------
12045|     24|            *pp++ = p;
12046|     24|        }
12047|  2.25k|    }
12048|     24|    *pp = NULL;
12049|     48|    for (pp = ptrs; *pp; pp++) {
  ------------------
  |  Branch (12049:21): [True: 24, False: 24]
  ------------------
12050|     24|        p = *pp;
12051|     24|        offset = p->offset;
12052|     27|        while (p > slotdefs && (p-1)->offset == offset)
  ------------------
  |  Branch (12052:16): [True: 27, False: 0]
  |  Branch (12052:32): [True: 3, False: 24]
  ------------------
12053|      3|            --p;
12054|     24|        *pp = p;
12055|     24|    }
12056|     24|    if (ptrs[0] == NULL)
  ------------------
  |  Branch (12056:9): [True: 0, False: 24]
  ------------------
12057|      0|        return 0; /* Not an attribute that affects any slots */
12058|       |
12059|     24|    update_callback_data_t callback_data;
12060|     24|    callback_data.defs = ptrs;
12061|     24|    callback_data.queued_updates = queued_updates;
12062|     24|    return update_subclasses(type, name,
12063|     24|                             update_slots_callback, (void *)&callback_data);
12064|     24|}
typeobject.c:update_subclasses:
12299|     24|{
12300|     24|    if (callback(type, data) < 0) {
  ------------------
  |  Branch (12300:9): [True: 0, False: 24]
  ------------------
12301|      0|        return -1;
12302|      0|    }
12303|     24|    return recurse_down_subclasses(type, attr_name, callback, data);
12304|     24|}
typeobject.c:recurse_down_subclasses:
12309|     24|{
12310|       |    // It is safe to use a borrowed reference because update_subclasses() is
12311|       |    // only used with update_slots_callback() which doesn't modify
12312|       |    // tp_subclasses.
12313|     24|    PyObject *subclasses = lookup_tp_subclasses(type);  // borrowed ref
12314|     24|    if (subclasses == NULL) {
  ------------------
  |  Branch (12314:9): [True: 24, False: 0]
  ------------------
12315|     24|        return 0;
12316|     24|    }
12317|     24|    assert(PyDict_CheckExact(subclasses));
  ------------------
  |  Branch (12317:5): [True: 0, False: 0]
  ------------------
12318|       |
12319|      0|    Py_ssize_t i = 0;
12320|      0|    PyObject *ref;
12321|      0|    while (PyDict_Next(subclasses, &i, NULL, &ref)) {
  ------------------
  |  Branch (12321:12): [True: 0, False: 0]
  ------------------
12322|      0|        PyTypeObject *subclass = type_from_ref(ref);
12323|      0|        if (subclass == NULL) {
  ------------------
  |  Branch (12323:13): [True: 0, False: 0]
  ------------------
12324|      0|            continue;
12325|      0|        }
12326|       |
12327|       |        /* Avoid recursing down into unaffected classes */
12328|      0|        PyObject *dict = lookup_tp_dict(subclass);
12329|      0|        if (dict != NULL && PyDict_Check(dict)) {
  ------------------
  |  |   18|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12329:13): [True: 0, False: 0]
  ------------------
12330|      0|            int r = PyDict_Contains(dict, attr_name);
12331|      0|            if (r < 0) {
  ------------------
  |  Branch (12331:17): [True: 0, False: 0]
  ------------------
12332|      0|                Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12333|      0|                return -1;
12334|      0|            }
12335|      0|            if (r > 0) {
  ------------------
  |  Branch (12335:17): [True: 0, False: 0]
  ------------------
12336|      0|                Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12337|      0|                continue;
12338|      0|            }
12339|      0|        }
12340|       |
12341|      0|        if (update_subclasses(subclass, attr_name, callback, data) < 0) {
  ------------------
  |  Branch (12341:13): [True: 0, False: 0]
  ------------------
12342|      0|            Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12343|      0|            return -1;
12344|      0|        }
12345|      0|        Py_DECREF(subclass);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12346|      0|    }
12347|      0|    return 0;
12348|      0|}
typeobject.c:update_slots_callback:
12012|     24|{
12013|     24|    ASSERT_NEW_TYPE_OR_LOCKED(type);
12014|       |
12015|     24|    update_callback_data_t *update_data = (update_callback_data_t *)data;
12016|     24|    pytype_slotdef **pp = update_data->defs;
12017|     48|    for (; *pp; pp++) {
  ------------------
  |  Branch (12017:12): [True: 24, False: 24]
  ------------------
12018|     24|        if (update_one_slot(type, *pp, NULL, update_data->queued_updates) < 0) {
  ------------------
  |  Branch (12018:13): [True: 0, False: 24]
  ------------------
12019|      0|            return -1;
12020|      0|        }
12021|     24|    }
12022|     24|    return 0;
12023|     24|}
typeobject.c:type_traverse:
 7091|  13.9k|{
 7092|  13.9k|    PyTypeObject *type = PyTypeObject_CAST(self);
  ------------------
  |  |  203|  13.9k|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 7093|       |
 7094|       |    /* Because of type_is_gc(), the collector only calls this
 7095|       |       for heaptypes. */
 7096|  13.9k|    if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|  13.9k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (7096:9): [True: 0, False: 13.9k]
  ------------------
 7097|      0|        char msg[200];
 7098|      0|        sprintf(msg, "type_traverse() called on non-heap type '%.100s'",
 7099|      0|                type->tp_name);
 7100|      0|        _PyObject_ASSERT_FAILED_MSG((PyObject *)type, msg);
  ------------------
  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  ------------------
 7101|      0|    }
 7102|       |
 7103|  13.9k|    Py_VISIT(type->tp_dict);
  ------------------
  |  |  194|  13.9k|    do {                                                                \
  |  |  195|  13.9k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 13.9k, False: 0]
  |  |  ------------------
  |  |  196|  13.9k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  13.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.9k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 13.9k]
  |  |  ------------------
  |  |  198|  13.9k|                return vret;                                            \
  |  |  199|  13.9k|        }                                                               \
  |  |  200|  13.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
 7104|  13.9k|    Py_VISIT(type->tp_cache);
  ------------------
  |  |  194|  13.9k|    do {                                                                \
  |  |  195|  13.9k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 13.9k]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|  13.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
 7105|  13.9k|    Py_VISIT(type->tp_mro);
  ------------------
  |  |  194|  13.9k|    do {                                                                \
  |  |  195|  13.9k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 13.9k, False: 0]
  |  |  ------------------
  |  |  196|  13.9k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  13.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.9k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 13.9k]
  |  |  ------------------
  |  |  198|  13.9k|                return vret;                                            \
  |  |  199|  13.9k|        }                                                               \
  |  |  200|  13.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
 7106|  13.9k|    Py_VISIT(type->tp_bases);
  ------------------
  |  |  194|  13.9k|    do {                                                                \
  |  |  195|  13.9k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 13.9k, False: 0]
  |  |  ------------------
  |  |  196|  13.9k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  13.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.9k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 13.9k]
  |  |  ------------------
  |  |  198|  13.9k|                return vret;                                            \
  |  |  199|  13.9k|        }                                                               \
  |  |  200|  13.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
 7107|  13.9k|    Py_VISIT(type->tp_base);
  ------------------
  |  |  194|  13.9k|    do {                                                                \
  |  |  195|  13.9k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 13.9k, False: 0]
  |  |  ------------------
  |  |  196|  13.9k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  13.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.9k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 13.9k]
  |  |  ------------------
  |  |  198|  13.9k|                return vret;                                            \
  |  |  199|  13.9k|        }                                                               \
  |  |  200|  13.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
 7108|  13.9k|    Py_VISIT(((PyHeapTypeObject *)type)->ht_module);
  ------------------
  |  |  194|  13.9k|    do {                                                                \
  |  |  195|  13.9k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.32k, False: 12.6k]
  |  |  ------------------
  |  |  196|  1.32k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.32k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.32k]
  |  |  ------------------
  |  |  198|  1.32k|                return vret;                                            \
  |  |  199|  1.32k|        }                                                               \
  |  |  200|  13.9k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
 7109|       |
 7110|       |    /* There's no need to visit others because they can't be involved
 7111|       |       in cycles:
 7112|       |       type->tp_subclasses is a list of weak references,
 7113|       |       ((PyHeapTypeObject *)type)->ht_slots is a tuple of strings,
 7114|       |       ((PyHeapTypeObject *)type)->ht_*name are strings.
 7115|       |       */
 7116|       |
 7117|  13.9k|    return 0;
 7118|  13.9k|}
typeobject.c:type_clear:
 7122|      8|{
 7123|      8|    PyTypeObject *type = PyTypeObject_CAST(self);
  ------------------
  |  |  203|      8|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 7124|       |
 7125|       |    /* Because of type_is_gc(), the collector only calls this
 7126|       |       for heaptypes. */
 7127|      8|    _PyObject_ASSERT((PyObject *)type, type->tp_flags & Py_TPFLAGS_HEAPTYPE);
  ------------------
  |  |  425|      8|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      8|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      8|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      8|      ? (void)(0) \
  |  |  |  |  |  |  418|      8|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7128|       |
 7129|       |    /* We need to invalidate the method cache carefully before clearing
 7130|       |       the dict, so that other objects caught in a reference cycle
 7131|       |       don't start calling destroyed methods.
 7132|       |
 7133|       |       Otherwise, we need to clear tp_mro, which is
 7134|       |       part of a hard cycle (its first element is the class itself) that
 7135|       |       won't be broken otherwise (it's a tuple and tuples don't have a
 7136|       |       tp_clear handler).
 7137|       |       We also need to clear ht_module, if present: the module usually holds a
 7138|       |       reference to its class. None of the other fields need to be
 7139|       |
 7140|       |       cleared, and here's why:
 7141|       |
 7142|       |       tp_cache:
 7143|       |           Not used; if it were, it would be a dict.
 7144|       |
 7145|       |       tp_bases, tp_base:
 7146|       |           If these are involved in a cycle, there must be at least
 7147|       |           one other, mutable object in the cycle, e.g. a base
 7148|       |           class's dict; the cycle will be broken that way.
 7149|       |
 7150|       |       tp_subclasses:
 7151|       |           A dict of weak references can't be part of a cycle; and
 7152|       |           dicts have their own tp_clear.
 7153|       |
 7154|       |       slots (in PyHeapTypeObject):
 7155|       |           A tuple of strings can't be part of a cycle.
 7156|       |    */
 7157|       |
 7158|      8|    PyType_Modified(type);
 7159|      8|    PyObject *dict = lookup_tp_dict(type);
 7160|      8|    if (dict) {
  ------------------
  |  Branch (7160:9): [True: 8, False: 0]
  ------------------
 7161|      8|        PyDict_Clear(dict);
 7162|      8|    }
 7163|      8|    Py_CLEAR(((PyHeapTypeObject *)type)->ht_module);
  ------------------
  |  |  484|      8|    do { \
  |  |  485|      8|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      8|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      8|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      8|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      8|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      8|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 8]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 7164|       |
 7165|      8|    Py_CLEAR(type->tp_mro);
  ------------------
  |  |  484|      8|    do { \
  |  |  485|      8|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      8|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      8|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      8|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      8|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      8|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 8, False: 0]
  |  |  ------------------
  |  |  488|      8|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      8|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      8|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      8|        } \
  |  |  491|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 7166|       |
 7167|      8|    return 0;
 7168|      8|}
typeobject.c:type_mro_impl:
 3512|     85|{
 3513|     85|    PyObject *seq;
 3514|     85|    seq = mro_implementation(self);
 3515|     85|    if (seq != NULL && !PyList_Check(seq)) {
  ------------------
  |  |   25|     85|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     85|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3515:9): [True: 85, False: 0]
  |  Branch (3515:24): [True: 69, False: 16]
  ------------------
 3516|     69|        Py_SETREF(seq, PySequence_List(seq));
  ------------------
  |  |  354|     69|    do { \
  |  |  355|     69|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     69|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|     69|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     69|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|     69|        *_tmp_dst_ptr = (src); \
  |  |  358|     69|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|     69|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|     69|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 69]
  |  |  ------------------
  ------------------
 3517|     69|    }
 3518|     85|    return seq;
 3519|     85|}
typeobject.c:mro_implementation:
 3495|     85|{
 3496|     85|    PyObject *mro;
 3497|     85|    BEGIN_TYPE_LOCK();
 3498|     85|    mro = mro_implementation_unlocked(type);
 3499|     85|    END_TYPE_LOCK();
 3500|     85|    return mro;
 3501|     85|}
typeobject.c:mro_implementation_unlocked:
 3407|  1.31k|{
 3408|  1.31k|    ASSERT_TYPE_LOCK_HELD();
 3409|       |
 3410|  1.31k|    if (!_PyType_IsReady(type)) {
  ------------------
  |  Branch (3410:9): [True: 0, False: 1.31k]
  ------------------
 3411|      0|        if (PyType_Ready(type) < 0)
  ------------------
  |  Branch (3411:13): [True: 0, False: 0]
  ------------------
 3412|      0|            return NULL;
 3413|      0|    }
 3414|       |
 3415|  1.31k|    PyObject *bases = lookup_tp_bases(type);
 3416|  1.31k|    Py_ssize_t n = PyTuple_GET_SIZE(bases);
  ------------------
  |  |   27|  1.31k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3417|  2.82k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3417:28): [True: 1.50k, False: 1.31k]
  ------------------
 3418|  3.01k|        PyTypeObject *base = _PyType_CAST(PyTuple_GET_ITEM(bases, i));
  ------------------
  |  |  770|  1.50k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:38): [True: 1.50k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3418:30): [True: 1.50k, False: 0]
  |  Branch (3418:30): [True: 1.50k, False: 0]
  ------------------
 3419|  1.50k|        if (lookup_tp_mro(base) == NULL) {
  ------------------
  |  Branch (3419:13): [True: 0, False: 1.50k]
  ------------------
 3420|      0|            PyErr_Format(PyExc_TypeError,
 3421|      0|                         "Cannot extend an incomplete type '%.100s'",
 3422|      0|                         base->tp_name);
 3423|      0|            return NULL;
 3424|      0|        }
 3425|  3.01k|        assert(PyTuple_Check(lookup_tp_mro(base)));
  ------------------
  |  Branch (3425:9): [True: 1.50k, False: 0]
  ------------------
 3426|  1.50k|    }
 3427|       |
 3428|  1.31k|    if (n == 1) {
  ------------------
  |  Branch (3428:9): [True: 1.15k, False: 167]
  ------------------
 3429|       |        /* Fast path: if there is a single base, constructing the MRO
 3430|       |         * is trivial.
 3431|       |         */
 3432|  2.30k|        PyTypeObject *base = _PyType_CAST(PyTuple_GET_ITEM(bases, 0));
  ------------------
  |  |  770|  1.15k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  2.30k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:38): [True: 1.15k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3432:30): [True: 1.15k, False: 0]
  |  Branch (3432:30): [True: 1.15k, False: 0]
  ------------------
 3433|      0|        PyObject *base_mro = lookup_tp_mro(base);
 3434|  2.30k|        assert(base_mro != NULL);
  ------------------
  |  Branch (3434:9): [True: 1.15k, False: 0]
  ------------------
 3435|  1.15k|        Py_ssize_t k = PyTuple_GET_SIZE(base_mro);
  ------------------
  |  |   27|  1.15k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3436|  1.15k|        PyObject *result = PyTuple_New(k + 1);
 3437|  1.15k|        if (result == NULL) {
  ------------------
  |  Branch (3437:13): [True: 0, False: 1.15k]
  ------------------
 3438|      0|            return NULL;
 3439|      0|        }
 3440|       |
 3441|  1.15k|        ;
 3442|  1.15k|        PyTuple_SET_ITEM(result, 0, Py_NewRef(type));
  ------------------
  |  |   40|  1.15k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3443|  3.62k|        for (Py_ssize_t i = 0; i < k; i++) {
  ------------------
  |  Branch (3443:32): [True: 2.47k, False: 1.15k]
  ------------------
 3444|  2.47k|            PyObject *cls = PyTuple_GET_ITEM(base_mro, i);
  ------------------
  |  |   29|  2.47k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.47k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3444:29): [True: 2.47k, False: 0]
  ------------------
 3445|  2.47k|            PyTuple_SET_ITEM(result, i + 1, Py_NewRef(cls));
  ------------------
  |  |   40|  2.47k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  2.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  2.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3446|  2.47k|        }
 3447|  1.15k|        return result;
 3448|  1.15k|    }
 3449|       |
 3450|       |    /* This is just a basic sanity check. */
 3451|    167|    if (check_duplicates(bases) < 0) {
  ------------------
  |  Branch (3451:9): [True: 0, False: 167]
  ------------------
 3452|      0|        return NULL;
 3453|      0|    }
 3454|       |
 3455|       |    /* Find a superclass linearization that honors the constraints
 3456|       |       of the explicit tuples of bases and the constraints implied by
 3457|       |       each base class.
 3458|       |
 3459|       |       to_merge is an array of tuples, where each tuple is a superclass
 3460|       |       linearization implied by a base class.  The last element of
 3461|       |       to_merge is the declared tuple of bases.
 3462|       |    */
 3463|    167|    PyObject **to_merge = PyMem_New(PyObject *, n + 1);
  ------------------
  |  |   64|    167|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|    167|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 167]
  |  |  ------------------
  |  |   65|    167|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 3464|    167|    if (to_merge == NULL) {
  ------------------
  |  Branch (3464:9): [True: 0, False: 167]
  ------------------
 3465|      0|        PyErr_NoMemory();
 3466|      0|        return NULL;
 3467|      0|    }
 3468|       |
 3469|    167|    PyObject *mro_to_merge;
 3470|    525|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3470:28): [True: 358, False: 167]
  ------------------
 3471|    716|        PyTypeObject *base = _PyType_CAST(PyTuple_GET_ITEM(bases, i));
  ------------------
  |  |  770|    358|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    716|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:38): [True: 358, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3471:30): [True: 358, False: 0]
  |  Branch (3471:30): [True: 358, False: 0]
  ------------------
 3472|      0|        mro_to_merge = lookup_tp_mro(base);
 3473|    716|        assert(mro_to_merge != NULL);
  ------------------
  |  Branch (3473:9): [True: 358, False: 0]
  ------------------
 3474|    358|        to_merge[i] = mro_to_merge;
 3475|    358|    }
 3476|    167|    to_merge[n] = bases;
 3477|       |
 3478|    167|    PyObject *result = PyList_New(1);
 3479|    167|    if (result == NULL) {
  ------------------
  |  Branch (3479:9): [True: 0, False: 167]
  ------------------
 3480|      0|        PyMem_Free(to_merge);
 3481|      0|        return NULL;
 3482|      0|    }
 3483|       |
 3484|    167|    PyList_SET_ITEM(result, 0, Py_NewRef(type));
  ------------------
  |  |   50|    167|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3485|    167|    if (pmerge(result, to_merge, n + 1) < 0) {
  ------------------
  |  Branch (3485:9): [True: 0, False: 167]
  ------------------
 3486|      0|        Py_CLEAR(result);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3487|      0|    }
 3488|    167|    PyMem_Free(to_merge);
 3489|       |
 3490|    167|    return result;
 3491|    167|}
typeobject.c:check_duplicates:
 3246|    167|{
 3247|    167|    Py_ssize_t i, j, n;
 3248|       |    /* Let's use a quadratic time algorithm,
 3249|       |       assuming that the bases tuples is short.
 3250|       |    */
 3251|    167|    n = PyTuple_GET_SIZE(tuple);
  ------------------
  |  |   27|    167|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3252|    525|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3252:17): [True: 358, False: 167]
  ------------------
 3253|    358|        PyObject *o = PyTuple_GET_ITEM(tuple, i);
  ------------------
  |  |   29|    358|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    358|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    358|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3253:23): [True: 358, False: 0]
  ------------------
 3254|    579|        for (j = i + 1; j < n; j++) {
  ------------------
  |  Branch (3254:25): [True: 221, False: 358]
  ------------------
 3255|    442|            if (PyTuple_GET_ITEM(tuple, j) == o) {
  ------------------
  |  |   29|    221|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    221|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    221|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3255:17): [True: 221, False: 0]
  |  Branch (3255:17): [True: 0, False: 221]
  ------------------
 3256|      0|                o = class_name(o);
 3257|      0|                if (o != NULL) {
  ------------------
  |  Branch (3257:21): [True: 0, False: 0]
  ------------------
 3258|      0|                    if (PyUnicode_Check(o)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3259|      0|                        PyErr_Format(PyExc_TypeError,
 3260|      0|                                     "duplicate base class %U", o);
 3261|      0|                    }
 3262|      0|                    else {
 3263|      0|                        PyErr_SetString(PyExc_TypeError,
 3264|      0|                                        "duplicate base class");
 3265|      0|                    }
 3266|      0|                    Py_DECREF(o);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3267|      0|                }
 3268|      0|                return -1;
 3269|      0|            }
 3270|    221|        }
 3271|    358|    }
 3272|    167|    return 0;
 3273|    167|}
typeobject.c:pmerge:
 3337|    167|{
 3338|    167|    int res = 0;
 3339|    167|    Py_ssize_t i, j, empty_cnt;
 3340|    167|    Py_ssize_t *remain;
 3341|       |
 3342|       |    /* remain stores an index into each sublist of to_merge.
 3343|       |       remain[i] is the index of the next base in to_merge[i]
 3344|       |       that is not included in acc.
 3345|       |    */
 3346|    167|    remain = PyMem_New(Py_ssize_t, to_merge_size);
  ------------------
  |  |   64|    167|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|    167|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 167]
  |  |  ------------------
  |  |   65|    167|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 3347|    167|    if (remain == NULL) {
  ------------------
  |  Branch (3347:9): [True: 0, False: 167]
  ------------------
 3348|      0|        PyErr_NoMemory();
 3349|      0|        return -1;
 3350|      0|    }
 3351|    692|    for (i = 0; i < to_merge_size; i++)
  ------------------
  |  Branch (3351:17): [True: 525, False: 167]
  ------------------
 3352|    525|        remain[i] = 0;
 3353|       |
 3354|    868|  again:
 3355|    868|    empty_cnt = 0;
 3356|  1.64k|    for (i = 0; i < to_merge_size; i++) {
  ------------------
  |  Branch (3356:17): [True: 1.47k, False: 167]
  ------------------
 3357|  1.47k|        PyObject *candidate;
 3358|       |
 3359|  1.47k|        PyObject *cur_tuple = to_merge[i];
 3360|       |
 3361|  1.47k|        if (remain[i] >= PyTuple_GET_SIZE(cur_tuple)) {
  ------------------
  |  |   27|  1.47k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3361:13): [True: 525, False: 949]
  ------------------
 3362|    525|            empty_cnt++;
 3363|    525|            continue;
 3364|    525|        }
 3365|       |
 3366|       |        /* Choose next candidate for MRO.
 3367|       |
 3368|       |           The input sequences alone can determine the choice.
 3369|       |           If not, choose the class which appears in the MRO
 3370|       |           of the earliest direct superclass of the new class.
 3371|       |        */
 3372|       |
 3373|    949|        candidate = PyTuple_GET_ITEM(cur_tuple, remain[i]);
  ------------------
  |  |   29|    949|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    949|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    949|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3373:21): [True: 949, False: 0]
  ------------------
 3374|  3.47k|        for (j = 0; j < to_merge_size; j++) {
  ------------------
  |  Branch (3374:21): [True: 2.77k, False: 701]
  ------------------
 3375|  2.77k|            PyObject *j_lst = to_merge[j];
 3376|  2.77k|            if (tail_contains(j_lst, remain[j], candidate))
  ------------------
  |  Branch (3376:17): [True: 248, False: 2.52k]
  ------------------
 3377|    248|                goto skip; /* continue outer loop */
 3378|  2.77k|        }
 3379|    701|        res = PyList_Append(acc, candidate);
 3380|    701|        if (res < 0)
  ------------------
  |  Branch (3380:13): [True: 0, False: 701]
  ------------------
 3381|      0|            goto out;
 3382|       |
 3383|  2.94k|        for (j = 0; j < to_merge_size; j++) {
  ------------------
  |  Branch (3383:21): [True: 2.24k, False: 701]
  ------------------
 3384|  2.24k|            PyObject *j_lst = to_merge[j];
 3385|  2.24k|            if (remain[j] < PyTuple_GET_SIZE(j_lst) &&
  ------------------
  |  |   27|  4.48k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3385:17): [True: 1.90k, False: 341]
  ------------------
 3386|  3.80k|                PyTuple_GET_ITEM(j_lst, remain[j]) == candidate) {
  ------------------
  |  |   29|  1.90k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.90k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.90k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3386:17): [True: 1.90k, False: 0]
  |  Branch (3386:17): [True: 1.40k, False: 499]
  ------------------
 3387|  1.40k|                remain[j]++;
 3388|  1.40k|            }
 3389|  2.24k|        }
 3390|    701|        goto again;
 3391|    248|      skip: ;
 3392|    248|    }
 3393|       |
 3394|    167|    if (empty_cnt != to_merge_size) {
  ------------------
  |  Branch (3394:9): [True: 0, False: 167]
  ------------------
 3395|      0|        set_mro_error(to_merge, to_merge_size, remain);
 3396|      0|        res = -1;
 3397|      0|    }
 3398|       |
 3399|    167|  out:
 3400|    167|    PyMem_Free(remain);
 3401|       |
 3402|    167|    return res;
 3403|    167|}
typeobject.c:tail_contains:
 3222|  2.77k|{
 3223|  2.77k|    Py_ssize_t j, size;
 3224|  2.77k|    size = PyTuple_GET_SIZE(tuple);
  ------------------
  |  |   27|  2.77k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.77k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.77k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3225|       |
 3226|  4.98k|    for (j = whence+1; j < size; j++) {
  ------------------
  |  Branch (3226:24): [True: 2.46k, False: 2.52k]
  ------------------
 3227|  4.92k|        if (PyTuple_GET_ITEM(tuple, j) == o)
  ------------------
  |  |   29|  2.46k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.46k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3227:13): [True: 2.46k, False: 0]
  |  Branch (3227:13): [True: 248, False: 2.21k]
  ------------------
 3228|    248|            return 1;
 3229|  2.46k|    }
 3230|  2.52k|    return 0;
 3231|  2.77k|}
typeobject.c:type___subclasses___impl:
 6949|     58|{
 6950|     58|    return _PyType_GetSubclasses(self);
 6951|     58|}
typeobject.c:type_prepare:
 6956|    624|{
 6957|    624|    return PyDict_New();
 6958|    624|}
typeobject.c:type___instancecheck___impl:
 2325|     12|{
 2326|     12|    return _PyObject_RealIsInstance(instance, (PyObject *)self);
 2327|     12|}
typeobject.c:type___subclasscheck___impl:
 2341|     10|{
 2342|     10|    return _PyObject_RealIsSubclass(subclass, (PyObject *)self);
 2343|     10|}
typeobject.c:check_set_special_type_attr:
 1450|      5|{
 1451|      5|    if (!value) {
  ------------------
  |  Branch (1451:9): [True: 0, False: 5]
  ------------------
 1452|      0|        PyErr_Format(PyExc_TypeError,
 1453|      0|                     "cannot delete '%s' attribute of type '%s'",
 1454|      0|                     name, type->tp_name);
 1455|      0|        return 0;
 1456|      0|    }
 1457|      5|    if (_PyType_HasFeature(type, Py_TPFLAGS_IMMUTABLETYPE)) {
  ------------------
  |  |  500|      5|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (1457:9): [True: 0, False: 5]
  ------------------
 1458|      0|        PyErr_Format(PyExc_TypeError,
 1459|      0|                     "cannot set '%s' attribute of immutable type '%s'",
 1460|      0|                     name, type->tp_name);
 1461|      0|        return 0;
 1462|      0|    }
 1463|       |
 1464|      5|    if (PySys_Audit("object.__setattr__", "OsO",
  ------------------
  |  Branch (1464:9): [True: 0, False: 5]
  ------------------
 1465|      5|                    type, name, value) < 0) {
 1466|      0|        return 0;
 1467|      0|    }
 1468|       |
 1469|      5|    return 1;
 1470|      5|}
typeobject.c:type_get_bases:
 1728|     76|{
 1729|     76|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     76|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1730|     76|    PyObject *bases = _PyType_GetBases(type);
 1731|     76|    if (bases == NULL) {
  ------------------
  |  Branch (1731:9): [True: 0, False: 76]
  ------------------
 1732|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1733|      0|    }
 1734|     76|    return bases;
 1735|     76|}
typeobject.c:mro_internal:
 3631|  1.31k|{
 3632|  1.31k|    ASSERT_TYPE_LOCK_HELD();
 3633|       |
 3634|  1.31k|    PyObject *new_mro, *old_mro;
 3635|  1.31k|    int reent;
 3636|       |
 3637|       |    /* Keep a reference to be able to do a reentrancy check below.
 3638|       |       Don't let old_mro be GC'ed and its address be reused for
 3639|       |       another object, like (suddenly!) a new tp_mro.  */
 3640|  1.31k|    old_mro = Py_XNewRef(lookup_tp_mro(type));
  ------------------
  |  |  551|  1.31k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3641|  1.31k|    new_mro = mro_invoke(type);  /* might cause reentrance */
 3642|  1.31k|    reent = (lookup_tp_mro(type) != old_mro);
 3643|  1.31k|    Py_XDECREF(old_mro);
  ------------------
  |  |  524|  1.31k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3644|  1.31k|    if (new_mro == NULL) {
  ------------------
  |  Branch (3644:9): [True: 0, False: 1.31k]
  ------------------
 3645|      0|        return -1;
 3646|      0|    }
 3647|       |
 3648|  1.31k|    if (reent) {
  ------------------
  |  Branch (3648:9): [True: 0, False: 1.31k]
  ------------------
 3649|      0|        Py_DECREF(new_mro);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3650|      0|        return 0;
 3651|      0|    }
 3652|       |
 3653|  1.31k|    set_tp_mro(type, new_mro, initial);
 3654|       |
 3655|  1.31k|    type_mro_modified(type, new_mro);
 3656|       |    /* corner case: the super class might have been hidden
 3657|       |       from the custom MRO */
 3658|  1.31k|    type_mro_modified(type, lookup_tp_bases(type));
 3659|       |
 3660|       |    // XXX Expand this to Py_TPFLAGS_IMMUTABLETYPE?
 3661|  1.31k|    if (!(type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN)) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (3661:9): [True: 902, False: 416]
  ------------------
 3662|    902|        _PyType_Modified_Unlocked(type);
 3663|    902|    }
 3664|    416|    else {
 3665|       |        /* For static builtin types, this is only called during init
 3666|       |           before the method cache has been populated. */
 3667|    416|        assert(type->tp_version_tag);
  ------------------
  |  Branch (3667:9): [True: 416, False: 0]
  ------------------
 3668|    416|    }
 3669|       |
 3670|  1.31k|    if (p_old_mro != NULL)
  ------------------
  |  Branch (3670:9): [True: 0, False: 1.31k]
  ------------------
 3671|      0|        *p_old_mro = old_mro;  /* transfer the ownership */
 3672|  1.31k|    else
 3673|  1.31k|        Py_XDECREF(old_mro);
  ------------------
  |  |  524|  1.31k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3674|       |
 3675|  1.31k|    return 1;
 3676|  1.31k|}
typeobject.c:mro_invoke:
 3567|  1.31k|{
 3568|  1.31k|    PyObject *mro_result;
 3569|  1.31k|    PyObject *new_mro;
 3570|       |
 3571|  1.31k|    ASSERT_TYPE_LOCK_HELD();
 3572|       |
 3573|  1.31k|    const int custom = !Py_IS_TYPE(type, &PyType_Type);
  ------------------
  |  |  215|  1.31k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3574|       |
 3575|  1.31k|    if (custom) {
  ------------------
  |  Branch (3575:9): [True: 85, False: 1.23k]
  ------------------
 3576|       |        // Custom mro() method on metaclass.  This is potentially re-entrant.
 3577|       |        // We are called either from type_ready() or from type_set_bases().
 3578|     85|        mro_result = call_method_noarg((PyObject *)type, &_Py_ID(mro));
  ------------------
  |  |  936|     85|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     85|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     85|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3579|     85|    }
 3580|  1.23k|    else {
 3581|       |        // In this case, the mro() method on the type object is being used and
 3582|       |        // we know that these calls are not re-entrant.
 3583|  1.23k|        mro_result = mro_implementation_unlocked(type);
 3584|  1.23k|    }
 3585|  1.31k|    if (mro_result == NULL)
  ------------------
  |  Branch (3585:9): [True: 0, False: 1.31k]
  ------------------
 3586|      0|        return NULL;
 3587|       |
 3588|  1.31k|    new_mro = PySequence_Tuple(mro_result);
 3589|  1.31k|    Py_DECREF(mro_result);
  ------------------
  |  |  430|  1.31k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3590|  1.31k|    if (new_mro == NULL) {
  ------------------
  |  Branch (3590:9): [True: 0, False: 1.31k]
  ------------------
 3591|      0|        return NULL;
 3592|      0|    }
 3593|       |
 3594|  1.31k|    if (PyTuple_GET_SIZE(new_mro) == 0) {
  ------------------
  |  |   27|  1.31k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3594:9): [True: 0, False: 1.31k]
  ------------------
 3595|      0|        Py_DECREF(new_mro);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3596|      0|        PyErr_Format(PyExc_TypeError, "type MRO must not be empty");
 3597|      0|        return NULL;
 3598|      0|    }
 3599|       |
 3600|  1.31k|    if (custom && mro_check(type, new_mro) < 0) {
  ------------------
  |  Branch (3600:9): [True: 85, False: 1.23k]
  |  Branch (3600:19): [True: 0, False: 85]
  ------------------
 3601|      0|        Py_DECREF(new_mro);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3602|      0|        return NULL;
 3603|      0|    }
 3604|  1.31k|    return new_mro;
 3605|  1.31k|}
typeobject.c:call_method_noarg:
 3050|     85|{
 3051|     85|    PyThreadState *tstate = _PyThreadState_GET();
 3052|     85|    _PyCStackRef cref;
 3053|     85|    _PyThreadState_PushCStackRef(tstate, &cref);
 3054|     85|    PyObject *res = NULL;
 3055|     85|    int unbound = lookup_method(self, attr, &cref.ref);
 3056|     85|    if (unbound >= 0) {
  ------------------
  |  Branch (3056:9): [True: 85, False: 0]
  ------------------
 3057|     85|        PyObject *func = PyStackRef_AsPyObjectBorrow(cref.ref);
 3058|     85|        res = call_unbound_noarg(unbound, func, self);
 3059|     85|    }
 3060|     85|    _PyThreadState_PopCStackRef(tstate, &cref);
 3061|     85|    return res;
 3062|     85|}
typeobject.c:mro_check:
 3523|     85|{
 3524|     85|    PyTypeObject *solid;
 3525|     85|    Py_ssize_t i, n;
 3526|       |
 3527|     85|    solid = solid_base(type);
 3528|       |
 3529|     85|    n = PyTuple_GET_SIZE(mro);
  ------------------
  |  |   27|     85|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     85|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     85|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3530|    487|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3530:17): [True: 402, False: 85]
  ------------------
 3531|    402|        PyObject *obj = PyTuple_GET_ITEM(mro, i);
  ------------------
  |  |   29|    402|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    402|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    402|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3531:25): [True: 402, False: 0]
  ------------------
 3532|    402|        if (!PyType_Check(obj)) {
  ------------------
  |  |  766|    402|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    402|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    402|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3532:13): [True: 0, False: 402]
  ------------------
 3533|      0|            PyErr_Format(PyExc_TypeError,
 3534|      0|                         "%N.mro() returned a non-class ('%T')", type, obj);
 3535|      0|            return -1;
 3536|      0|        }
 3537|    402|        PyTypeObject *base = (PyTypeObject*)obj;
 3538|       |
 3539|    402|        if (!is_subtype_with_mro(lookup_tp_mro(solid), solid, solid_base(base))) {
  ------------------
  |  Branch (3539:13): [True: 0, False: 402]
  ------------------
 3540|      0|            PyErr_Format(
 3541|      0|                PyExc_TypeError,
 3542|      0|                "%N.mro() returned base with unsuitable layout ('%N')",
 3543|      0|                type, base);
 3544|      0|            return -1;
 3545|      0|        }
 3546|    402|    }
 3547|       |
 3548|     85|    return 0;
 3549|     85|}
typeobject.c:type_mro_modified:
 1245|  2.63k|{
 1246|       |    /*
 1247|       |       Check that all base classes or elements of the MRO of type are
 1248|       |       able to be cached.  This function is called after the base
 1249|       |       classes or mro of the type are altered.
 1250|       |
 1251|       |       Unset HAVE_VERSION_TAG and VALID_VERSION_TAG if the type
 1252|       |       has a custom MRO that includes a type which is not officially
 1253|       |       super type, or if the type implements its own mro() method.
 1254|       |
 1255|       |       Called from mro_internal, which will subsequently be called on
 1256|       |       each subclass when their mro is recursively updated.
 1257|       |     */
 1258|  2.63k|    Py_ssize_t i, n;
 1259|       |
 1260|  2.63k|    ASSERT_TYPE_LOCK_HELD();
 1261|  2.63k|    if (!Py_IS_TYPE(type, &PyType_Type) && has_custom_mro(type)) {
  ------------------
  |  |  215|  5.27k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  2.63k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1261:9): [True: 170, False: 2.46k]
  |  Branch (1261:44): [True: 0, False: 170]
  ------------------
 1262|      0|        goto clear;
 1263|      0|    }
 1264|  2.63k|    n = PyTuple_GET_SIZE(bases);
  ------------------
  |  |   27|  2.63k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.63k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1265|  8.63k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1265:17): [True: 6.00k, False: 2.63k]
  ------------------
 1266|  6.00k|        PyObject *b = PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|  6.00k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  6.00k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1266:23): [True: 6.00k, False: 0]
  ------------------
 1267|  6.00k|        PyTypeObject *cls = _PyType_CAST(b);
  ------------------
  |  |  770|  6.00k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  6.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1267:29): [True: 6.00k, False: 0]
  ------------------
 1268|       |
 1269|  6.00k|        if (cls->tp_versions_used >= _Py_ATTR_CACHE_UNUSED) {
  ------------------
  |  |  253|  6.00k|#define _Py_ATTR_CACHE_UNUSED (30000)  // (see tp_versions_used)
  ------------------
  |  Branch (1269:13): [True: 0, False: 6.00k]
  ------------------
 1270|      0|            goto clear;
 1271|      0|        }
 1272|       |
 1273|  6.00k|        if (!is_subtype_with_mro(lookup_tp_mro(type), type, cls)) {
  ------------------
  |  Branch (1273:13): [True: 0, False: 6.00k]
  ------------------
 1274|      0|            goto clear;
 1275|      0|        }
 1276|  6.00k|    }
 1277|  2.63k|    return;
 1278|       |
 1279|  2.63k| clear:
 1280|      0|    assert(!(type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN));
  ------------------
  |  Branch (1280:5): [True: 0, False: 0]
  ------------------
 1281|      0|    set_version_unlocked(type, 0);  /* 0 is not a valid version tag */
 1282|      0|    _PyTypeCache_Invalidate(type);
 1283|      0|    type->tp_versions_used = _Py_ATTR_CACHE_UNUSED;
  ------------------
  |  |  253|      0|#define _Py_ATTR_CACHE_UNUSED (30000)  // (see tp_versions_used)
  ------------------
 1284|      0|    if (PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|      0|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (1284:9): [True: 0, False: 0]
  ------------------
 1285|       |        // This field *must* be invalidated if the type is modified (see the
 1286|       |        // comment on struct _specialization_cache):
 1287|      0|        FT_ATOMIC_STORE_PTR_RELAXED(
  ------------------
  |  |  163|      0|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
 1288|      0|            ((PyHeapTypeObject *)type)->_spec_cache.getitem, NULL);
 1289|      0|    }
 1290|      0|}
typeobject.c:has_custom_mro:
 1227|    170|{
 1228|    170|    _PyCStackRef c_ref1, c_ref2;
 1229|    170|    PyThreadState *tstate = _PyThreadState_GET();
 1230|    170|    _PyThreadState_PushCStackRef(tstate, &c_ref1);
 1231|    170|    _PyThreadState_PushCStackRef(tstate, &c_ref2);
 1232|       |
 1233|    170|    _PyType_LookupStackRefAndVersion(Py_TYPE(tp), &_Py_ID(mro), &c_ref1.ref);
  ------------------
  |  |  213|    170|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    170|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    170|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  _PyType_LookupStackRefAndVersion(Py_TYPE(tp), &_Py_ID(mro), &c_ref1.ref);
  ------------------
  |  |  936|    170|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    170|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    170|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1234|    170|    _PyType_LookupStackRefAndVersion(&PyType_Type, &_Py_ID(mro), &c_ref2.ref);
  ------------------
  |  |  936|    170|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    170|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    170|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1235|       |
 1236|    170|    int custom = !PyStackRef_Is(c_ref1.ref, c_ref2.ref);
  ------------------
  |  |  742|    170|#define PyStackRef_Is(a, b) (((a).bits & (~Py_TAG_REFCNT)) == ((b).bits & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|    170|#define Py_TAG_REFCNT 1
  |  |  ------------------
  |  |               #define PyStackRef_Is(a, b) (((a).bits & (~Py_TAG_REFCNT)) == ((b).bits & (~Py_TAG_REFCNT)))
  |  |  ------------------
  |  |  |  |   55|    170|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
 1237|       |
 1238|    170|    _PyThreadState_PopCStackRef(tstate, &c_ref2);
 1239|    170|    _PyThreadState_PopCStackRef(tstate, &c_ref1);
 1240|    170|    return custom;
 1241|    170|}
typeobject.c:set_tp_mro:
  655|  1.31k|{
  656|  1.31k|    if (mro != NULL) {
  ------------------
  |  Branch (656:9): [True: 1.31k, False: 0]
  ------------------
  657|  1.31k|        assert(PyTuple_CheckExact(mro));
  ------------------
  |  Branch (657:9): [True: 1.31k, False: 0]
  ------------------
  658|  1.31k|        if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (658:13): [True: 416, False: 902]
  ------------------
  659|       |            // XXX tp_mro can probably be statically allocated for each
  660|       |            // static builtin type.
  661|    416|            assert(initial);
  ------------------
  |  Branch (661:13): [True: 416, False: 0]
  ------------------
  662|    416|            assert(self->tp_mro == NULL);
  ------------------
  |  Branch (662:13): [True: 416, False: 0]
  ------------------
  663|       |            /* Other checks are done via set_tp_bases. */
  664|    416|            _Py_SetImmortal(mro);
  665|    416|        }
  666|    902|        else {
  667|    902|            PyUnstable_Object_EnableDeferredRefcount(mro);
  668|    902|        }
  669|  1.31k|    }
  670|  1.31k|    pinned_mutexes_t pinned;
  671|  1.31k|    if (!initial) {
  ------------------
  |  Branch (671:9): [True: 0, False: 1.31k]
  ------------------
  672|      0|        type_lock_prevent_release(&pinned);
  ------------------
  |  |  198|      0|#define type_lock_prevent_release(pinned) ((void)(pinned))
  ------------------
  673|      0|        types_stop_world();
  674|      0|    }
  675|  1.31k|    self->tp_mro = mro;
  676|  1.31k|    if (!initial) {
  ------------------
  |  Branch (676:9): [True: 0, False: 1.31k]
  ------------------
  677|      0|        types_start_world();
  678|      0|        type_lock_allow_release(&pinned);
  ------------------
  |  |  199|      0|#define type_lock_allow_release(pinned) ((void)(pinned))
  ------------------
  679|      0|    }
  680|  1.31k|}
typeobject.c:type_get_module:
 1601|     19|{
 1602|     19|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     19|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1603|     19|    return type_module(type);
 1604|     19|}
typeobject.c:type_set_module:
 1608|      5|{
 1609|      5|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|      5|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1610|      5|    if (!check_set_special_type_attr(type, value, "__module__"))
  ------------------
  |  Branch (1610:9): [True: 0, False: 5]
  ------------------
 1611|      0|        return -1;
 1612|       |
 1613|      5|    PyType_Modified(type);
 1614|       |
 1615|      5|    PyObject *dict = lookup_tp_dict(type);
 1616|      5|    if (PyDict_Pop(dict, &_Py_ID(__firstlineno__), NULL) < 0) {
  ------------------
  |  |  936|      5|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      5|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      5|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1616:9): [True: 0, False: 5]
  ------------------
 1617|      0|        return -1;
 1618|      0|    }
 1619|      5|    return PyDict_SetItem(dict, &_Py_ID(__module__), value);
  ------------------
  |  |  936|      5|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      5|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      5|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1620|      5|}
typeobject.c:type_abstractmethods:
 1664|     91|{
 1665|     91|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     91|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1666|     91|    PyObject *res = NULL;
 1667|       |    /* type itself has an __abstractmethods__ descriptor (this). Don't return
 1668|       |       that. */
 1669|     91|    if (type == &PyType_Type) {
  ------------------
  |  Branch (1669:9): [True: 0, False: 91]
  ------------------
 1670|      0|        PyErr_SetObject(PyExc_AttributeError, &_Py_ID(__abstractmethods__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1671|      0|    }
 1672|     91|    else {
 1673|     91|        PyObject *dict = lookup_tp_dict(type);
 1674|     91|        if (PyDict_GetItemRef(dict, &_Py_ID(__abstractmethods__), &res) == 0) {
  ------------------
  |  |  936|     91|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     91|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     91|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1674:13): [True: 25, False: 66]
  ------------------
 1675|     25|            PyErr_SetObject(PyExc_AttributeError, &_Py_ID(__abstractmethods__));
  ------------------
  |  |  936|     25|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     25|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     25|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1676|     25|        }
 1677|     91|    }
 1678|     91|    return res;
 1679|     91|}
typeobject.c:type_set_abstractmethods:
 1683|     76|{
 1684|     76|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     76|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1685|       |    /* __abstractmethods__ should only be set once on a type, in
 1686|       |       abc.ABCMeta.__new__, so this function doesn't do anything
 1687|       |       special to update subclasses.
 1688|       |    */
 1689|     76|    int abstract, res;
 1690|     76|    PyObject *dict = lookup_tp_dict(type);
 1691|     76|    if (value != NULL) {
  ------------------
  |  Branch (1691:9): [True: 76, False: 0]
  ------------------
 1692|     76|        abstract = PyObject_IsTrue(value);
 1693|     76|        if (abstract < 0)
  ------------------
  |  Branch (1693:13): [True: 0, False: 76]
  ------------------
 1694|      0|            return -1;
 1695|     76|        res = PyDict_SetItem(dict, &_Py_ID(__abstractmethods__), value);
  ------------------
  |  |  936|     76|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     76|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     76|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1696|     76|    }
 1697|      0|    else {
 1698|      0|        abstract = 0;
 1699|      0|        res = PyDict_Pop(dict, &_Py_ID(__abstractmethods__), NULL);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1700|      0|        if (res == 0) {
  ------------------
  |  Branch (1700:13): [True: 0, False: 0]
  ------------------
 1701|      0|            PyErr_SetObject(PyExc_AttributeError, &_Py_ID(__abstractmethods__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1702|      0|            return -1;
 1703|      0|        }
 1704|      0|    }
 1705|     76|    if (res < 0) {
  ------------------
  |  Branch (1705:9): [True: 0, False: 76]
  ------------------
 1706|      0|        return -1;
 1707|      0|    }
 1708|       |
 1709|     76|    pinned_mutexes_t pinned;
 1710|     76|    BEGIN_TYPE_LOCK();
 1711|     76|    _PyType_Modified_Unlocked(type);
 1712|     76|    type_lock_prevent_release(&pinned);
  ------------------
  |  |  198|     76|#define type_lock_prevent_release(pinned) ((void)(pinned))
  ------------------
 1713|     76|    types_stop_world();
 1714|     76|    if (abstract)
  ------------------
  |  Branch (1714:9): [True: 52, False: 24]
  ------------------
 1715|     52|        type_add_flags(type, Py_TPFLAGS_IS_ABSTRACT);
  ------------------
  |  |  540|     52|#define Py_TPFLAGS_IS_ABSTRACT (1UL << 20)
  ------------------
 1716|     24|    else
 1717|     24|        type_clear_flags(type, Py_TPFLAGS_IS_ABSTRACT);
  ------------------
  |  |  540|     24|#define Py_TPFLAGS_IS_ABSTRACT (1UL << 20)
  ------------------
 1718|     76|    types_start_world();
 1719|     76|    type_lock_allow_release(&pinned);
  ------------------
  |  |  199|     76|#define type_lock_allow_release(pinned) ((void)(pinned))
  ------------------
 1720|     76|    ASSERT_TYPE_LOCK_HELD();
 1721|     76|    END_TYPE_LOCK();
 1722|       |
 1723|     76|    return 0;
 1724|     76|}
typeobject.c:type_dict:
 2010|    386|{
 2011|    386|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|    386|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 2012|    386|    PyObject *dict = lookup_tp_dict(type);
 2013|    386|    if (dict == NULL) {
  ------------------
  |  Branch (2013:9): [True: 0, False: 386]
  ------------------
 2014|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2015|      0|    }
 2016|    386|    return PyDictProxy_New(dict);
 2017|    386|}
typeobject.c:type_get_doc:
 2021|     23|{
 2022|     23|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     23|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 2023|     23|    PyObject *result;
 2024|     23|    if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE) && type->tp_doc != NULL) {
  ------------------
  |  |  503|     23|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2024:9): [True: 17, False: 6]
  |  Branch (2024:52): [True: 17, False: 0]
  ------------------
 2025|     17|        return _PyType_GetDocFromInternalDoc(type->tp_name, type->tp_doc);
 2026|     17|    }
 2027|      6|    PyObject *dict = lookup_tp_dict(type);
 2028|      6|    if (PyDict_GetItemRef(dict, &_Py_ID(__doc__), &result) == 0) {
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2028:9): [True: 0, False: 6]
  ------------------
 2029|      0|        result = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2030|      0|    }
 2031|      6|    else if (result) {
  ------------------
  |  Branch (2031:14): [True: 6, False: 0]
  ------------------
 2032|      6|        descrgetfunc descr_get = Py_TYPE(result)->tp_descr_get;
  ------------------
  |  |  213|      6|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2033|      6|        if (descr_get) {
  ------------------
  |  Branch (2033:13): [True: 0, False: 6]
  ------------------
 2034|      0|            Py_SETREF(result, descr_get(result, NULL, (PyObject *)type));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2035|      0|        }
 2036|      6|    }
 2037|      6|    return result;
 2038|     23|}
typeobject.c:type_set_annotations:
 2210|    113|{
 2211|    113|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|    113|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 2212|    113|    if (_PyType_HasFeature(type, Py_TPFLAGS_IMMUTABLETYPE)) {
  ------------------
  |  |  500|    113|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (2212:9): [True: 0, False: 113]
  ------------------
 2213|      0|        PyErr_Format(PyExc_TypeError,
 2214|      0|                     "cannot set '__annotations__' attribute of immutable type '%s'",
 2215|      0|                     type->tp_name);
 2216|      0|        return -1;
 2217|      0|    }
 2218|       |
 2219|    113|    PyObject *dict = PyType_GetDict(type);
 2220|    113|    int result = PyDict_ContainsString(dict, "__annotations__");
 2221|    113|    if (result < 0) {
  ------------------
  |  Branch (2221:9): [True: 0, False: 113]
  ------------------
 2222|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2223|      0|        return -1;
 2224|      0|    }
 2225|    113|    if (result) {
  ------------------
  |  Branch (2225:9): [True: 0, False: 113]
  ------------------
 2226|       |        // If __annotations__ is currently in the dict, we update it,
 2227|      0|        if (value != NULL) {
  ------------------
  |  Branch (2227:13): [True: 0, False: 0]
  ------------------
 2228|      0|            result = PyDict_SetItem(dict, &_Py_ID(__annotations__), value);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2229|      0|        } else {
 2230|      0|            result = PyDict_Pop(dict, &_Py_ID(__annotations__), NULL);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2231|      0|            if (result == 0) {
  ------------------
  |  Branch (2231:17): [True: 0, False: 0]
  ------------------
 2232|       |                // Somebody else just deleted it?
 2233|      0|                PyErr_SetString(PyExc_AttributeError, "__annotations__");
 2234|      0|                Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2235|      0|                return -1;
 2236|      0|            }
 2237|      0|        }
 2238|      0|        if (result < 0) {
  ------------------
  |  Branch (2238:13): [True: 0, False: 0]
  ------------------
 2239|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2240|      0|            return -1;
 2241|      0|        }
 2242|       |        // Also clear __annotations_cache__ just in case.
 2243|      0|        result = PyDict_Pop(dict, &_Py_ID(__annotations_cache__), NULL);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2244|      0|    }
 2245|    113|    else {
 2246|       |        // Else we update only __annotations_cache__.
 2247|    113|        if (value != NULL) {
  ------------------
  |  Branch (2247:13): [True: 113, False: 0]
  ------------------
 2248|       |            /* set */
 2249|    113|            result = PyDict_SetItem(dict, &_Py_ID(__annotations_cache__), value);
  ------------------
  |  |  936|    113|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    113|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    113|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2250|    113|        } else {
 2251|       |            /* delete */
 2252|      0|            result = PyDict_Pop(dict, &_Py_ID(__annotations_cache__), NULL);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2253|      0|            if (result == 0) {
  ------------------
  |  Branch (2253:17): [True: 0, False: 0]
  ------------------
 2254|      0|                PyErr_SetString(PyExc_AttributeError, "__annotations__");
 2255|      0|                Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2256|      0|                return -1;
 2257|      0|            }
 2258|      0|        }
 2259|    113|    }
 2260|    113|    if (result < 0) {
  ------------------
  |  Branch (2260:9): [True: 0, False: 113]
  ------------------
 2261|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2262|      0|        return -1;
 2263|    113|    } else {  // result can be 0 or 1
 2264|    113|        if (PyDict_Pop(dict, &_Py_ID(__annotate_func__), NULL) < 0) {
  ------------------
  |  |  936|    113|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    113|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    113|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2264:13): [True: 0, False: 113]
  ------------------
 2265|      0|            PyType_Modified(type);
 2266|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2267|      0|            return -1;
 2268|      0|        }
 2269|    113|        if (PyDict_Pop(dict, &_Py_ID(__annotate__), NULL) < 0) {
  ------------------
  |  |  936|    113|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    113|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    113|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2269:13): [True: 0, False: 113]
  ------------------
 2270|      0|            PyType_Modified(type);
 2271|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2272|      0|            return -1;
 2273|      0|        }
 2274|    113|    }
 2275|    113|    PyType_Modified(type);
 2276|    113|    Py_DECREF(dict);
  ------------------
  |  |  430|    113|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    113|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    113|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2277|    113|    return 0;
 2278|    113|}
typeobject.c:type_init:
 4099|    771|{
 4100|    771|    assert(args != NULL && PyTuple_Check(args));
  ------------------
  |  Branch (4100:5): [True: 771, False: 0]
  |  Branch (4100:5): [True: 771, False: 0]
  ------------------
 4101|    771|    assert(kwds == NULL || PyDict_Check(kwds));
  ------------------
  |  Branch (4101:5): [True: 742, False: 29]
  |  Branch (4101:5): [True: 29, False: 0]
  ------------------
 4102|       |
 4103|    771|    if (kwds != NULL && PyTuple_GET_SIZE(args) == 1 &&
  ------------------
  |  |   27|     29|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4103:9): [True: 29, False: 742]
  |  Branch (4103:25): [True: 0, False: 29]
  ------------------
 4104|      0|        PyDict_GET_SIZE(kwds) != 0) {
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4104:9): [True: 0, False: 0]
  ------------------
 4105|      0|        PyErr_SetString(PyExc_TypeError,
 4106|      0|                        "type.__init__() takes no keyword arguments");
 4107|      0|        return -1;
 4108|      0|    }
 4109|       |
 4110|    771|    if ((PyTuple_GET_SIZE(args) != 1 && PyTuple_GET_SIZE(args) != 3)) {
  ------------------
  |  |   27|    771|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if ((PyTuple_GET_SIZE(args) != 1 && PyTuple_GET_SIZE(args) != 3)) {
  ------------------
  |  |   27|    771|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4110:10): [True: 771, False: 0]
  |  Branch (4110:41): [True: 0, False: 771]
  ------------------
 4111|      0|        PyErr_SetString(PyExc_TypeError,
 4112|      0|                        "type.__init__() takes 1 or 3 arguments");
 4113|      0|        return -1;
 4114|      0|    }
 4115|       |
 4116|    771|    return 0;
 4117|    771|}
typeobject.c:type_new:
 5042|    773|{
 5043|    773|    assert(args != NULL && PyTuple_Check(args));
  ------------------
  |  Branch (5043:5): [True: 773, False: 0]
  |  Branch (5043:5): [True: 773, False: 0]
  ------------------
 5044|    773|    assert(kwds == NULL || PyDict_Check(kwds));
  ------------------
  |  Branch (5044:5): [True: 771, False: 2]
  |  Branch (5044:5): [True: 2, False: 0]
  ------------------
 5045|       |
 5046|       |    /* Parse arguments: (name, bases, dict) */
 5047|    773|    PyObject *name, *bases, *orig_dict;
 5048|    773|    if (!PyArg_ParseTuple(args, "UO!O:type.__new__",
  ------------------
  |  Branch (5048:9): [True: 0, False: 773]
  ------------------
 5049|    773|                          &name,
 5050|    773|                          &PyTuple_Type, &bases,
 5051|    773|                          &orig_dict))
 5052|      0|    {
 5053|      0|        return NULL;
 5054|      0|    }
 5055|    773|    if (!PyAnyDict_Check(orig_dict)) {
  ------------------
  |  |   43|    773|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|    773|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|  1.54k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 773, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5056|      0|        PyErr_Format(PyExc_TypeError,
 5057|      0|                     "type.__new__() argument 3 must be dict or frozendict, not %T",
 5058|      0|                     orig_dict);
 5059|      0|        return NULL;
 5060|      0|    }
 5061|       |
 5062|    773|    type_new_ctx ctx = {
 5063|    773|        .metatype = metatype,
 5064|    773|        .args = args,
 5065|    773|        .kwds = kwds,
 5066|    773|        .orig_dict = orig_dict,
 5067|    773|        .name = name,
 5068|    773|        .bases = bases,
 5069|    773|        .base = NULL,
 5070|    773|        .slots = NULL,
 5071|    773|        .nslot = 0,
 5072|    773|        .add_dict = 0,
 5073|    773|        .add_weak = 0,
 5074|    773|        .may_add_dict = 0,
 5075|    773|        .may_add_weak = 0};
 5076|    773|    PyObject *type = NULL;
 5077|    773|    int res = type_new_get_bases(&ctx, &type);
 5078|    773|    if (res < 0) {
  ------------------
  |  Branch (5078:9): [True: 0, False: 773]
  ------------------
 5079|      0|        assert(PyErr_Occurred());
  ------------------
  |  Branch (5079:9): [True: 0, False: 0]
  ------------------
 5080|      0|        return NULL;
 5081|      0|    }
 5082|    773|    if (res == 1) {
  ------------------
  |  Branch (5082:9): [True: 2, False: 771]
  ------------------
 5083|      2|        assert(type != NULL);
  ------------------
  |  Branch (5083:9): [True: 2, False: 0]
  ------------------
 5084|      2|        return type;
 5085|      2|    }
 5086|    773|    assert(ctx.base != NULL);
  ------------------
  |  Branch (5086:5): [True: 771, False: 0]
  ------------------
 5087|    771|    assert(ctx.bases != NULL);
  ------------------
  |  Branch (5087:5): [True: 771, False: 0]
  ------------------
 5088|       |
 5089|    771|    type = type_new_impl(&ctx);
 5090|    771|    Py_DECREF(ctx.bases);
  ------------------
  |  |  430|    771|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5091|    771|    return type;
 5092|    771|}
typeobject.c:type_new_get_bases:
 4971|    773|{
 4972|    773|    Py_ssize_t nbases = PyTuple_GET_SIZE(ctx->bases);
  ------------------
  |  |   27|    773|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    773|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    773|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4973|    773|    if (nbases == 0) {
  ------------------
  |  Branch (4973:9): [True: 97, False: 676]
  ------------------
 4974|       |        // Adjust for empty tuple bases
 4975|     97|        ctx->base = &PyBaseObject_Type;
 4976|     97|        PyObject *new_bases = PyTuple_Pack(1, ctx->base);
 4977|     97|        if (new_bases == NULL) {
  ------------------
  |  Branch (4977:13): [True: 0, False: 97]
  ------------------
 4978|      0|            return -1;
 4979|      0|        }
 4980|     97|        ctx->bases = new_bases;
 4981|     97|        return 0;
 4982|     97|    }
 4983|       |
 4984|  1.54k|    for (Py_ssize_t i = 0; i < nbases; i++) {
  ------------------
  |  Branch (4984:28): [True: 869, False: 676]
  ------------------
 4985|    869|        PyObject *base = PyTuple_GET_ITEM(ctx->bases, i);
  ------------------
  |  |   29|    869|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    869|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    869|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4985:26): [True: 869, False: 0]
  ------------------
 4986|    869|        if (PyType_Check(base)) {
  ------------------
  |  |  766|    869|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    869|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    869|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 869, False: 0]
  |  |  ------------------
  ------------------
 4987|    869|            continue;
 4988|    869|        }
 4989|      0|        int rc = PyObject_HasAttrWithError(base, &_Py_ID(__mro_entries__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4990|      0|        if (rc < 0) {
  ------------------
  |  Branch (4990:13): [True: 0, False: 0]
  ------------------
 4991|      0|            return -1;
 4992|      0|        }
 4993|      0|        if (rc) {
  ------------------
  |  Branch (4993:13): [True: 0, False: 0]
  ------------------
 4994|      0|            PyErr_SetString(PyExc_TypeError,
 4995|      0|                            "type() doesn't support MRO entry resolution; "
 4996|      0|                            "use types.new_class()");
 4997|      0|            return -1;
 4998|      0|        }
 4999|      0|    }
 5000|       |
 5001|       |    // Search the bases for the proper metatype to deal with this
 5002|    676|    PyTypeObject *winner;
 5003|    676|    winner = _PyType_CalculateMetaclass(ctx->metatype, ctx->bases);
 5004|    676|    if (winner == NULL) {
  ------------------
  |  Branch (5004:9): [True: 0, False: 676]
  ------------------
 5005|      0|        return -1;
 5006|      0|    }
 5007|       |
 5008|    676|    if (winner != ctx->metatype) {
  ------------------
  |  Branch (5008:9): [True: 2, False: 674]
  ------------------
 5009|      2|        if (winner->tp_new != type_new) {
  ------------------
  |  Branch (5009:13): [True: 2, False: 0]
  ------------------
 5010|       |            /* Check if tp_new is NULL (cannot instantiate this type) */
 5011|      2|            if (winner->tp_new == NULL) {
  ------------------
  |  Branch (5011:17): [True: 0, False: 2]
  ------------------
 5012|      0|                PyErr_Format(PyExc_TypeError,
 5013|      0|                             "cannot create '%.400s' instances",
 5014|      0|                             winner->tp_name);
 5015|      0|                return -1;
 5016|      0|            }
 5017|       |            /* Pass it to the winner */
 5018|      2|            *type = winner->tp_new(winner, ctx->args, ctx->kwds);
 5019|      2|            if (*type == NULL) {
  ------------------
  |  Branch (5019:17): [True: 0, False: 2]
  ------------------
 5020|      0|                return -1;
 5021|      0|            }
 5022|      2|            return 1;
 5023|      2|        }
 5024|       |
 5025|      0|        ctx->metatype = winner;
 5026|      0|    }
 5027|       |
 5028|       |    /* Calculate best base, and check that all bases are type objects */
 5029|    674|    PyTypeObject *base = find_best_base(ctx->bases);
 5030|    674|    if (base == NULL) {
  ------------------
  |  Branch (5030:9): [True: 0, False: 674]
  ------------------
 5031|      0|        return -1;
 5032|      0|    }
 5033|       |
 5034|    674|    ctx->base = base;
 5035|    674|    ctx->bases = Py_NewRef(ctx->bases);
  ------------------
  |  |  550|    674|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    674|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    674|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5036|    674|    return 0;
 5037|    674|}
typeobject.c:type_new_impl:
 4925|    771|{
 4926|    771|    PyTypeObject *type = type_new_init(ctx);
 4927|    771|    if (type == NULL) {
  ------------------
  |  Branch (4927:9): [True: 0, False: 771]
  ------------------
 4928|      0|        return NULL;
 4929|      0|    }
 4930|       |
 4931|    771|    if (type_new_set_attrs(ctx, type) < 0) {
  ------------------
  |  Branch (4931:9): [True: 0, False: 771]
  ------------------
 4932|      0|        goto error;
 4933|      0|    }
 4934|       |
 4935|       |    /* Initialize the rest */
 4936|    771|    if (type_ready_publish(type, 1) < 0) {
  ------------------
  |  Branch (4936:9): [True: 0, False: 771]
  ------------------
 4937|      0|        goto error;
 4938|      0|    }
 4939|       |
 4940|    771|    if (!_PyDict_HasOnlyStringKeys(type->tp_dict)) {
  ------------------
  |  Branch (4940:9): [True: 0, False: 771]
  ------------------
 4941|      0|        if (PyErr_WarnFormat(
  ------------------
  |  Branch (4941:13): [True: 0, False: 0]
  ------------------
 4942|      0|                PyExc_RuntimeWarning,
 4943|      0|                1,
 4944|      0|                "non-string key in the __dict__ of class %.200s",
 4945|      0|                type->tp_name) == -1)
 4946|      0|        {
 4947|      0|            goto error;
 4948|      0|        }
 4949|      0|    }
 4950|       |
 4951|    771|    if (type_new_set_names(type) < 0) {
  ------------------
  |  Branch (4951:9): [True: 0, False: 771]
  ------------------
 4952|      0|        goto error;
 4953|      0|    }
 4954|       |
 4955|    771|    if (type_new_init_subclass(type, ctx->kwds) < 0) {
  ------------------
  |  Branch (4955:9): [True: 0, False: 771]
  ------------------
 4956|      0|        goto error;
 4957|      0|    }
 4958|       |
 4959|    771|    assert(_PyType_CheckConsistency(type));
  ------------------
  |  Branch (4959:5): [True: 771, False: 0]
  ------------------
 4960|       |
 4961|    771|    return (PyObject *)type;
 4962|       |
 4963|      0|error:
 4964|      0|    Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4965|       |    return NULL;
 4966|    771|}
typeobject.c:type_new_init:
 4882|    771|{
 4883|    771|    PyObject *dict = _PyDict_CopyAsDict(ctx->orig_dict);
 4884|    771|    if (dict == NULL) {
  ------------------
  |  Branch (4884:9): [True: 0, False: 771]
  ------------------
 4885|      0|        goto error;
 4886|      0|    }
 4887|       |
 4888|    771|    if (type_new_get_slots(ctx, dict) < 0) {
  ------------------
  |  Branch (4888:9): [True: 0, False: 771]
  ------------------
 4889|      0|        goto error;
 4890|      0|    }
 4891|    771|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (4891:5): [True: 771, False: 0]
  ------------------
 4892|       |
 4893|    771|    if (type_new_slots(ctx, dict) < 0) {
  ------------------
  |  Branch (4893:9): [True: 0, False: 771]
  ------------------
 4894|      0|        goto error;
 4895|      0|    }
 4896|       |
 4897|    771|    PyTypeObject *type = type_new_alloc(ctx);
 4898|    771|    if (type == NULL) {
  ------------------
  |  Branch (4898:9): [True: 0, False: 771]
  ------------------
 4899|      0|        goto error;
 4900|      0|    }
 4901|       |
 4902|    771|    set_tp_dict(type, dict);
 4903|       |
 4904|    771|    PyHeapTypeObject *et = (PyHeapTypeObject*)type;
 4905|    771|    if (ctx->slots && PyTuple_GET_SIZE(ctx->slots)) {
  ------------------
  |  |   27|     82|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 13, False: 69]
  |  |  ------------------
  ------------------
  |  Branch (4905:9): [True: 82, False: 689]
  ------------------
 4906|     13|        et->ht_slots = ctx->slots;
 4907|     13|        ctx->slots = NULL;
 4908|     13|    }
 4909|    758|    else {
 4910|    758|        et->ht_slots = NULL;
 4911|    758|        Py_CLEAR(ctx->slots);
  ------------------
  |  |  484|    758|    do { \
  |  |  485|    758|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    758|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    758|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    758|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    758|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    758|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 69, False: 689]
  |  |  ------------------
  |  |  488|     69|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     69|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     69|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     69|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     69|        } \
  |  |  491|    758|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 758]
  |  |  ------------------
  ------------------
 4912|    758|    }
 4913|       |
 4914|    771|    return type;
 4915|       |
 4916|      0|error:
 4917|      0|    Py_CLEAR(ctx->slots);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4918|      0|    Py_XDECREF(dict);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4919|       |    return NULL;
 4920|    771|}
typeobject.c:type_new_get_slots:
 4851|    771|{
 4852|    771|    PyObject *slots = PyDict_GetItemWithError(dict, &_Py_ID(__slots__));
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4853|    771|    if (slots == NULL) {
  ------------------
  |  Branch (4853:9): [True: 689, False: 82]
  ------------------
 4854|    689|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4854:13): [True: 0, False: 689]
  ------------------
 4855|      0|            return -1;
 4856|      0|        }
 4857|    689|        ctx->slots = NULL;
 4858|    689|        ctx->nslot = 0;
 4859|    689|        return 0;
 4860|    689|    }
 4861|       |
 4862|       |    // Make it into a tuple
 4863|     82|    PyObject *new_slots;
 4864|     82|    if (PyUnicode_Check(slots)) {
  ------------------
  |  |  103|     82|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     82|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 82]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4865|      0|        new_slots = PyTuple_Pack(1, slots);
 4866|      0|    }
 4867|     82|    else {
 4868|     82|        new_slots = PySequence_Tuple(slots);
 4869|     82|    }
 4870|     82|    if (new_slots == NULL) {
  ------------------
  |  Branch (4870:9): [True: 0, False: 82]
  ------------------
 4871|      0|        return -1;
 4872|      0|    }
 4873|     82|    assert(PyTuple_CheckExact(new_slots));
  ------------------
  |  Branch (4873:5): [True: 82, False: 0]
  ------------------
 4874|     82|    ctx->slots = new_slots;
 4875|     82|    ctx->nslot = PyTuple_GET_SIZE(new_slots);
  ------------------
  |  |   27|     82|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4876|     82|    return 0;
 4877|     82|}
typeobject.c:type_new_slots:
 4364|    771|{
 4365|       |    // Check for a __slots__ sequence variable in dict, and count it
 4366|    771|    ctx->add_dict = 0;
 4367|    771|    ctx->add_weak = 0;
 4368|    771|    ctx->may_add_dict = (ctx->base->tp_dictoffset == 0);
 4369|    771|    ctx->may_add_weak = (ctx->base->tp_weaklistoffset == 0);
 4370|       |
 4371|    771|    if (ctx->slots == NULL) {
  ------------------
  |  Branch (4371:9): [True: 689, False: 82]
  ------------------
 4372|    689|        if (ctx->may_add_dict) {
  ------------------
  |  Branch (4372:13): [True: 156, False: 533]
  ------------------
 4373|    156|            ctx->add_dict++;
 4374|    156|        }
 4375|    689|        if (ctx->may_add_weak && ctx->base->tp_itemsize == 0) {
  ------------------
  |  Branch (4375:13): [True: 200, False: 489]
  |  Branch (4375:34): [True: 192, False: 8]
  ------------------
 4376|    192|            ctx->add_weak++;
 4377|    192|        }
 4378|    689|    }
 4379|     82|    else {
 4380|       |        /* Have slots */
 4381|     82|        if (type_new_slots_impl(ctx, dict) < 0) {
  ------------------
  |  Branch (4381:13): [True: 0, False: 82]
  ------------------
 4382|      0|            return -1;
 4383|      0|        }
 4384|     82|    }
 4385|    771|    return 0;
 4386|    771|}
typeobject.c:type_new_slots_impl:
 4342|     82|{
 4343|     82|    if (type_new_visit_slots(ctx) < 0) {
  ------------------
  |  Branch (4343:9): [True: 0, False: 82]
  ------------------
 4344|      0|        return -1;
 4345|      0|    }
 4346|       |
 4347|     82|    PyObject *new_slots = type_new_copy_slots(ctx, dict);
 4348|     82|    if (new_slots == NULL) {
  ------------------
  |  Branch (4348:9): [True: 0, False: 82]
  ------------------
 4349|      0|        return -1;
 4350|      0|    }
 4351|     82|    assert(PyTuple_CheckExact(new_slots));
  ------------------
  |  Branch (4351:5): [True: 82, False: 0]
  ------------------
 4352|       |
 4353|     82|    Py_XSETREF(ctx->slots, new_slots);
  ------------------
  |  |  376|     82|    do { \
  |  |  377|     82|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|     82|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|     82|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|     82|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|     82|        *_tmp_dst_ptr = (src); \
  |  |  380|     82|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|     82|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|     82|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 82]
  |  |  ------------------
  ------------------
 4354|     82|    ctx->nslot = PyTuple_GET_SIZE(new_slots);
  ------------------
  |  |   27|     82|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4355|       |
 4356|       |    /* Secondary bases may provide weakrefs or dict */
 4357|     82|    type_new_slots_bases(ctx);
 4358|     82|    return 0;
 4359|     82|}
typeobject.c:type_new_visit_slots:
 4196|     82|{
 4197|     82|    PyObject *slots = ctx->slots;
 4198|     82|    Py_ssize_t nslot = ctx->nslot;
 4199|    123|    for (Py_ssize_t i = 0; i < nslot; i++) {
  ------------------
  |  Branch (4199:28): [True: 41, False: 82]
  ------------------
 4200|     41|        PyObject *name = PyTuple_GET_ITEM(slots, i);
  ------------------
  |  |   29|     41|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     41|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4200:26): [True: 41, False: 0]
  ------------------
 4201|     41|        if (!valid_identifier(name)) {
  ------------------
  |  Branch (4201:13): [True: 0, False: 41]
  ------------------
 4202|      0|            return -1;
 4203|      0|        }
 4204|     41|        assert(PyUnicode_Check(name));
  ------------------
  |  Branch (4204:9): [True: 41, False: 0]
  ------------------
 4205|     41|        if (_PyUnicode_Equal(name, &_Py_ID(__dict__))) {
  ------------------
  |  |  936|     41|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     41|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     41|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4205:13): [True: 1, False: 40]
  ------------------
 4206|      1|            if (!ctx->may_add_dict || ctx->add_dict != 0) {
  ------------------
  |  Branch (4206:17): [True: 0, False: 1]
  |  Branch (4206:39): [True: 0, False: 1]
  ------------------
 4207|      0|                PyErr_SetString(PyExc_TypeError,
 4208|      0|                    "__dict__ slot disallowed: "
 4209|      0|                    "we already got one");
 4210|      0|                return -1;
 4211|      0|            }
 4212|      1|            ctx->add_dict++;
 4213|      1|        }
 4214|     41|        if (_PyUnicode_Equal(name, &_Py_ID(__weakref__))) {
  ------------------
  |  |  936|     41|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     41|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     41|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4214:13): [True: 4, False: 37]
  ------------------
 4215|      4|            if (!ctx->may_add_weak || ctx->add_weak != 0) {
  ------------------
  |  Branch (4215:17): [True: 0, False: 4]
  |  Branch (4215:39): [True: 0, False: 4]
  ------------------
 4216|      0|                PyErr_SetString(PyExc_TypeError,
 4217|      0|                    "__weakref__ slot disallowed: "
 4218|      0|                    "we already got one");
 4219|      0|                return -1;
 4220|      0|            }
 4221|      4|            ctx->add_weak++;
 4222|      4|        }
 4223|     41|    }
 4224|     82|    return 0;
 4225|     82|}
typeobject.c:valid_identifier:
 4082|     41|{
 4083|     41|    if (!PyUnicode_Check(s)) {
  ------------------
  |  |  103|     41|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     41|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4083:9): [True: 0, False: 41]
  ------------------
 4084|      0|        PyErr_Format(PyExc_TypeError,
 4085|      0|                     "__slots__ items must be strings, not '%.200s'",
 4086|      0|                     Py_TYPE(s)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4087|      0|        return 0;
 4088|      0|    }
 4089|     41|    if (!PyUnicode_IsIdentifier(s)) {
  ------------------
  |  Branch (4089:9): [True: 0, False: 41]
  ------------------
 4090|      0|        PyErr_SetString(PyExc_TypeError,
 4091|      0|                        "__slots__ must be identifiers");
 4092|      0|        return 0;
 4093|      0|    }
 4094|     41|    return 1;
 4095|     41|}
typeobject.c:type_new_copy_slots:
 4234|     82|{
 4235|     82|    PyObject *slots = ctx->slots;
 4236|     82|    Py_ssize_t nslot = ctx->nslot;
 4237|       |
 4238|     82|    Py_ssize_t new_nslot = nslot - ctx->add_dict - ctx->add_weak;
 4239|     82|    PyObject *new_slots = PyList_New(new_nslot);
 4240|     82|    if (new_slots == NULL) {
  ------------------
  |  Branch (4240:9): [True: 0, False: 82]
  ------------------
 4241|      0|        return NULL;
 4242|      0|    }
 4243|       |
 4244|     82|    Py_ssize_t j = 0;
 4245|    123|    for (Py_ssize_t i = 0; i < nslot; i++) {
  ------------------
  |  Branch (4245:28): [True: 41, False: 82]
  ------------------
 4246|     41|        PyObject *slot = PyTuple_GET_ITEM(slots, i);
  ------------------
  |  |   29|     41|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     41|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4246:26): [True: 41, False: 0]
  ------------------
 4247|     41|        if ((ctx->add_dict && _PyUnicode_Equal(slot, &_Py_ID(__dict__))) ||
  ------------------
  |  |  936|      7|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      7|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      7|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4247:14): [True: 7, False: 34]
  |  Branch (4247:31): [True: 1, False: 6]
  ------------------
 4248|     40|            (ctx->add_weak && _PyUnicode_Equal(slot, &_Py_ID(__weakref__))))
  ------------------
  |  |  936|     12|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     12|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     12|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4248:14): [True: 12, False: 28]
  |  Branch (4248:31): [True: 4, False: 8]
  ------------------
 4249|      5|        {
 4250|      5|            continue;
 4251|      5|        }
 4252|       |
 4253|     36|        slot =_Py_Mangle(ctx->name, slot);
 4254|     36|        if (!slot) {
  ------------------
  |  Branch (4254:13): [True: 0, False: 36]
  ------------------
 4255|      0|            goto error;
 4256|      0|        }
 4257|     36|        PyList_SET_ITEM(new_slots, j, slot);
  ------------------
  |  |   50|     36|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4258|       |
 4259|     36|        int r = PyDict_Contains(dict, slot);
 4260|     36|        if (r < 0) {
  ------------------
  |  Branch (4260:13): [True: 0, False: 36]
  ------------------
 4261|      0|            goto error;
 4262|      0|        }
 4263|     36|        if (r > 0) {
  ------------------
  |  Branch (4263:13): [True: 0, False: 36]
  ------------------
 4264|       |            /* CPython inserts these names (when needed)
 4265|       |               into the namespace when creating a class.  They will be deleted
 4266|       |               below so won't act as class variables. */
 4267|      0|            if (!_PyUnicode_Equal(slot, &_Py_ID(__qualname__)) &&
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4267:17): [True: 0, False: 0]
  ------------------
 4268|      0|                !_PyUnicode_Equal(slot, &_Py_ID(__classcell__)) &&
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4268:17): [True: 0, False: 0]
  ------------------
 4269|      0|                !_PyUnicode_Equal(slot, &_Py_ID(__classdictcell__)))
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4269:17): [True: 0, False: 0]
  ------------------
 4270|      0|            {
 4271|      0|                PyErr_Format(PyExc_ValueError,
 4272|      0|                             "%R in __slots__ conflicts with class variable",
 4273|      0|                             slot);
 4274|      0|                goto error;
 4275|      0|            }
 4276|      0|        }
 4277|       |
 4278|     36|        j++;
 4279|     36|    }
 4280|     82|    assert(j == new_nslot);
  ------------------
  |  Branch (4280:5): [True: 82, False: 0]
  ------------------
 4281|       |
 4282|     82|    if (PyList_Sort(new_slots) == -1) {
  ------------------
  |  Branch (4282:9): [True: 0, False: 82]
  ------------------
 4283|      0|        goto error;
 4284|      0|    }
 4285|       |
 4286|     82|    PyObject *tuple = PyList_AsTuple(new_slots);
 4287|     82|    Py_DECREF(new_slots);
  ------------------
  |  |  430|     82|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4288|     82|    if (tuple == NULL) {
  ------------------
  |  Branch (4288:9): [True: 0, False: 82]
  ------------------
 4289|      0|        return NULL;
 4290|      0|    }
 4291|       |
 4292|     82|    assert(PyTuple_GET_SIZE(tuple) == new_nslot);
  ------------------
  |  Branch (4292:5): [True: 82, False: 0]
  ------------------
 4293|     82|    return tuple;
 4294|       |
 4295|      0|error:
 4296|      0|    Py_DECREF(new_slots);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4297|       |    return NULL;
 4298|     82|}
typeobject.c:type_new_slots_bases:
 4303|     82|{
 4304|     82|    Py_ssize_t nbases = PyTuple_GET_SIZE(ctx->bases);
  ------------------
  |  |   27|     82|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4305|     82|    if (nbases > 1 &&
  ------------------
  |  Branch (4305:9): [True: 10, False: 72]
  ------------------
 4306|     10|        ((ctx->may_add_dict && ctx->add_dict == 0) ||
  ------------------
  |  Branch (4306:11): [True: 10, False: 0]
  |  Branch (4306:32): [True: 10, False: 0]
  ------------------
 4307|      0|         (ctx->may_add_weak && ctx->add_weak == 0)))
  ------------------
  |  Branch (4307:11): [True: 0, False: 0]
  |  Branch (4307:32): [True: 0, False: 0]
  ------------------
 4308|     10|    {
 4309|     32|        for (Py_ssize_t i = 0; i < nbases; i++) {
  ------------------
  |  Branch (4309:32): [True: 22, False: 10]
  ------------------
 4310|     22|            PyObject *obj = PyTuple_GET_ITEM(ctx->bases, i);
  ------------------
  |  |   29|     22|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     22|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4310:29): [True: 22, False: 0]
  ------------------
 4311|     22|            if (obj == (PyObject *)ctx->base) {
  ------------------
  |  Branch (4311:17): [True: 10, False: 12]
  ------------------
 4312|       |                /* Skip primary base */
 4313|     10|                continue;
 4314|     10|            }
 4315|     12|            PyTypeObject *base = _PyType_CAST(obj);
  ------------------
  |  |  770|     12|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (4315:34): [True: 12, False: 0]
  ------------------
 4316|       |
 4317|     12|            if (ctx->may_add_dict && ctx->add_dict == 0 &&
  ------------------
  |  Branch (4317:17): [True: 12, False: 0]
  |  Branch (4317:38): [True: 12, False: 0]
  ------------------
 4318|     12|                base->tp_dictoffset != 0)
  ------------------
  |  Branch (4318:17): [True: 0, False: 12]
  ------------------
 4319|      0|            {
 4320|      0|                ctx->add_dict++;
 4321|      0|            }
 4322|     12|            if (ctx->may_add_weak && ctx->add_weak == 0 &&
  ------------------
  |  Branch (4322:17): [True: 12, False: 0]
  |  Branch (4322:38): [True: 12, False: 0]
  ------------------
 4323|     12|                base->tp_weaklistoffset != 0)
  ------------------
  |  Branch (4323:17): [True: 0, False: 12]
  ------------------
 4324|      0|            {
 4325|      0|                ctx->add_weak++;
 4326|      0|            }
 4327|     12|            if (ctx->may_add_dict && ctx->add_dict == 0) {
  ------------------
  |  Branch (4327:17): [True: 12, False: 0]
  |  Branch (4327:38): [True: 12, False: 0]
  ------------------
 4328|     12|                continue;
 4329|     12|            }
 4330|      0|            if (ctx->may_add_weak && ctx->add_weak == 0) {
  ------------------
  |  Branch (4330:17): [True: 0, False: 0]
  |  Branch (4330:38): [True: 0, False: 0]
  ------------------
 4331|      0|                continue;
 4332|      0|            }
 4333|       |            /* Nothing more to check */
 4334|      0|            break;
 4335|      0|        }
 4336|     10|    }
 4337|     82|}
typeobject.c:type_new_alloc:
 4391|    771|{
 4392|    771|    PyTypeObject *metatype = ctx->metatype;
 4393|    771|    PyTypeObject *type;
 4394|       |
 4395|       |    // Allocate the type object
 4396|    771|    type = (PyTypeObject *)metatype->tp_alloc(metatype, ctx->nslot);
 4397|    771|    if (type == NULL) {
  ------------------
  |  Branch (4397:9): [True: 0, False: 771]
  ------------------
 4398|      0|        return NULL;
 4399|      0|    }
 4400|    771|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
 4401|       |
 4402|       |    // Initialize tp_flags.
 4403|       |    // All heap types need GC, since we can create a reference cycle by storing
 4404|       |    // an instance on one of its parents.
 4405|    771|    type_set_flags(type, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HEAPTYPE |
  ------------------
  |  |  560|    771|#define Py_TPFLAGS_DEFAULT  ( \
  |  |  561|    771|                 Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \
  |  |  ------------------
  |  |  |  |  530|    771|#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0
  |  |  ------------------
  |  |  562|    771|                0)
  ------------------
                  type_set_flags(type, Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HEAPTYPE |
  ------------------
  |  |  503|    771|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
 4406|    771|                   Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC);
  ------------------
  |  |  506|    771|#define Py_TPFLAGS_BASETYPE (1UL << 10)
  ------------------
                                 Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC);
  ------------------
  |  |  524|    771|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
 4407|       |
 4408|       |    // Initialize essential fields
 4409|    771|    type->tp_as_async = &et->as_async;
 4410|    771|    type->tp_as_number = &et->as_number;
 4411|    771|    type->tp_as_sequence = &et->as_sequence;
 4412|    771|    type->tp_as_mapping = &et->as_mapping;
 4413|    771|    type->tp_as_buffer = &et->as_buffer;
 4414|       |
 4415|    771|    set_tp_bases(type, Py_NewRef(ctx->bases), 1);
  ------------------
  |  |  550|    771|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4416|    771|    type->tp_base = (PyTypeObject *)Py_NewRef(ctx->base);
  ------------------
  |  |  550|    771|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4417|       |
 4418|    771|    type->tp_dealloc = subtype_dealloc;
 4419|       |    /* Always override allocation strategy to use regular heap */
 4420|    771|    type->tp_alloc = PyType_GenericAlloc;
 4421|    771|    type->tp_free = PyObject_GC_Del;
 4422|       |
 4423|    771|    type->tp_traverse = subtype_traverse;
 4424|    771|    type->tp_clear = subtype_clear;
 4425|       |
 4426|    771|    et->ht_name = Py_NewRef(ctx->name);
  ------------------
  |  |  550|    771|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4427|    771|    et->ht_module = NULL;
 4428|    771|    et->_ht_tpname = NULL;
 4429|    771|    et->ht_token = NULL;
 4430|       |
 4431|       |#ifdef Py_GIL_DISABLED
 4432|       |    et->unique_id = _PyObject_AssignUniqueId((PyObject *)et);
 4433|       |#endif
 4434|       |
 4435|    771|    return type;
 4436|    771|}
typeobject.c:subtype_traverse:
 2578|  14.2k|{
 2579|  14.2k|    PyTypeObject *type, *base;
 2580|  14.2k|    traverseproc basetraverse;
 2581|       |
 2582|       |    /* Find the nearest base with a different tp_traverse,
 2583|       |       and traverse slots while we're at it */
 2584|  14.2k|    type = Py_TYPE(self);
  ------------------
  |  |  213|  14.2k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  14.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2585|  14.2k|    base = type;
 2586|  33.8k|    while ((basetraverse = base->tp_traverse) == subtype_traverse) {
  ------------------
  |  Branch (2586:12): [True: 19.5k, False: 14.2k]
  ------------------
 2587|  19.5k|        if (Py_SIZE(base)) {
  ------------------
  |  |  214|  19.5k|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  19.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (214:23): [True: 84, False: 19.4k]
  |  |  ------------------
  ------------------
 2588|     84|            int err = traverse_slots(base, self, visit, arg);
 2589|     84|            if (err)
  ------------------
  |  Branch (2589:17): [True: 0, False: 84]
  ------------------
 2590|      0|                return err;
 2591|     84|        }
 2592|  19.5k|        base = base->tp_base;
 2593|  19.5k|        assert(base);
  ------------------
  |  Branch (2593:9): [True: 19.5k, False: 0]
  ------------------
 2594|  19.5k|    }
 2595|       |
 2596|  14.2k|    if (type->tp_dictoffset != base->tp_dictoffset) {
  ------------------
  |  Branch (2596:9): [True: 12.5k, False: 1.70k]
  ------------------
 2597|  12.5k|        assert(base->tp_dictoffset == 0);
  ------------------
  |  Branch (2597:9): [True: 12.5k, False: 0]
  ------------------
 2598|  12.5k|        if (type->tp_flags & Py_TPFLAGS_MANAGED_DICT) {
  ------------------
  |  |  482|  12.5k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (2598:13): [True: 12.5k, False: 0]
  ------------------
 2599|  12.5k|            assert(type->tp_dictoffset == -1);
  ------------------
  |  Branch (2599:13): [True: 12.5k, False: 0]
  ------------------
 2600|  12.5k|            int err = PyObject_VisitManagedDict(self, visit, arg);
 2601|  12.5k|            if (err) {
  ------------------
  |  Branch (2601:17): [True: 0, False: 12.5k]
  ------------------
 2602|      0|                return err;
 2603|      0|            }
 2604|  12.5k|        }
 2605|      0|        else {
 2606|      0|            PyObject **dictptr = _PyObject_ComputedDictPointer(self);
 2607|      0|            if (dictptr && *dictptr) {
  ------------------
  |  Branch (2607:17): [True: 0, False: 0]
  |  Branch (2607:28): [True: 0, False: 0]
  ------------------
 2608|      0|                Py_VISIT(*dictptr);
  ------------------
  |  |  194|      0|    do {                                                                \
  |  |  195|      0|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2609|      0|            }
 2610|      0|        }
 2611|  12.5k|    }
 2612|       |
 2613|  14.2k|    if (type->tp_flags & Py_TPFLAGS_HEAPTYPE
  ------------------
  |  |  503|  28.5k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2613:9): [True: 14.2k, False: 0]
  ------------------
 2614|  14.2k|        && (!basetraverse || !(base->tp_flags & Py_TPFLAGS_HEAPTYPE))) {
  ------------------
  |  |  503|  4.35k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2614:13): [True: 9.90k, False: 4.35k]
  |  Branch (2614:30): [True: 3.77k, False: 576]
  ------------------
 2615|       |        /* For a heaptype, the instances count as references
 2616|       |           to the type.          Traverse the type so the collector
 2617|       |           can find cycles involving this link.
 2618|       |           Skip this visit if basetraverse belongs to a heap type: in that
 2619|       |           case, basetraverse will visit the type when we call it later.
 2620|       |           */
 2621|  13.6k|        Py_VISIT(type);
  ------------------
  |  |  194|  13.6k|    do {                                                                \
  |  |  195|  13.6k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 13.6k, False: 0]
  |  |  ------------------
  |  |  196|  13.6k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  13.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  13.6k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 13.6k]
  |  |  ------------------
  |  |  198|  13.6k|                return vret;                                            \
  |  |  199|  13.6k|        }                                                               \
  |  |  200|  13.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 13.6k]
  |  |  ------------------
  ------------------
 2622|  13.6k|    }
 2623|       |
 2624|  14.2k|    if (basetraverse)
  ------------------
  |  Branch (2624:9): [True: 4.35k, False: 9.90k]
  ------------------
 2625|  4.35k|        return basetraverse(self, visit, arg);
 2626|  9.90k|    return 0;
 2627|  14.2k|}
typeobject.c:traverse_slots:
 2556|     84|{
 2557|     84|    Py_ssize_t i, n;
 2558|     84|    PyMemberDef *mp;
 2559|       |
 2560|     84|    n = Py_SIZE(type);
  ------------------
  |  |  214|     84|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     84|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     84|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2561|     84|    mp = _PyHeapType_GET_MEMBERS((PyHeapTypeObject *)type);
 2562|    420|    for (i = 0; i < n; i++, mp++) {
  ------------------
  |  Branch (2562:17): [True: 336, False: 84]
  ------------------
 2563|    336|        if (mp->type == Py_T_OBJECT_EX) {
  ------------------
  |  |   75|    336|#define Py_T_OBJECT_EX 16
  ------------------
  |  Branch (2563:13): [True: 336, False: 0]
  ------------------
 2564|    336|            void *addr = _PyMember_GetOffset(self, mp);
 2565|    336|            PyObject *obj = *(PyObject **)addr;
 2566|    336|            if (obj != NULL) {
  ------------------
  |  Branch (2566:17): [True: 336, False: 0]
  ------------------
 2567|    336|                int err = visit(obj, arg);
 2568|    336|                if (err)
  ------------------
  |  Branch (2568:21): [True: 0, False: 336]
  ------------------
 2569|      0|                    return err;
 2570|    336|            }
 2571|    336|        }
 2572|    336|    }
 2573|     84|    return 0;
 2574|     84|}
typeobject.c:set_tp_dict:
  557|  1.31k|{
  558|  1.31k|    if (self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (558:9): [True: 416, False: 902]
  ------------------
  559|    416|        PyInterpreterState *interp = _PyInterpreterState_GET();
  560|    416|        managed_static_type_state *state = _PyStaticType_GetState(interp, self);
  561|    416|        assert(state != NULL);
  ------------------
  |  Branch (561:9): [True: 416, False: 0]
  ------------------
  562|    416|        state->tp_dict = dict;
  563|    416|        return;
  564|    416|    }
  565|    902|    self->tp_dict = dict;
  566|    902|}
typeobject.c:type_new_set_attrs:
 4786|    771|{
 4787|    771|    if (type_new_set_name(ctx, type) < 0) {
  ------------------
  |  Branch (4787:9): [True: 0, False: 771]
  ------------------
 4788|      0|        return -1;
 4789|      0|    }
 4790|       |
 4791|    771|    PyObject *dict = lookup_tp_dict(type);
 4792|    771|    assert(dict);
  ------------------
  |  Branch (4792:5): [True: 771, False: 0]
  ------------------
 4793|       |
 4794|    771|    if (type_new_set_module(dict) < 0) {
  ------------------
  |  Branch (4794:9): [True: 0, False: 771]
  ------------------
 4795|      0|        return -1;
 4796|      0|    }
 4797|       |
 4798|    771|    if (type_new_set_ht_name(type, dict) < 0) {
  ------------------
  |  Branch (4798:9): [True: 0, False: 771]
  ------------------
 4799|      0|        return -1;
 4800|      0|    }
 4801|       |
 4802|    771|    if (type_new_set_doc(type, dict) < 0) {
  ------------------
  |  Branch (4802:9): [True: 0, False: 771]
  ------------------
 4803|      0|        return -1;
 4804|      0|    }
 4805|       |
 4806|       |    /* Special-case __new__: if it's a plain function,
 4807|       |       make it a static function */
 4808|    771|    if (type_new_staticmethod(dict, &_Py_ID(__new__)) < 0) {
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4808:9): [True: 0, False: 771]
  ------------------
 4809|      0|        return -1;
 4810|      0|    }
 4811|       |
 4812|       |    /* Special-case __init_subclass__ and __class_getitem__:
 4813|       |       if they are plain functions, make them classmethods */
 4814|    771|    if (type_new_classmethod(dict, &_Py_ID(__init_subclass__)) < 0) {
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4814:9): [True: 0, False: 771]
  ------------------
 4815|      0|        return -1;
 4816|      0|    }
 4817|    771|    if (type_new_classmethod(dict, &_Py_ID(__class_getitem__)) < 0) {
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4817:9): [True: 0, False: 771]
  ------------------
 4818|      0|        return -1;
 4819|      0|    }
 4820|       |
 4821|    771|    if (type_new_descriptors(ctx, type, dict) < 0) {
  ------------------
  |  Branch (4821:9): [True: 0, False: 771]
  ------------------
 4822|      0|        return -1;
 4823|      0|    }
 4824|       |
 4825|    771|    type_new_set_slots(ctx, type);
 4826|       |
 4827|    771|    if (type_new_set_classcell(type, dict) < 0) {
  ------------------
  |  Branch (4827:9): [True: 0, False: 771]
  ------------------
 4828|      0|        return -1;
 4829|      0|    }
 4830|    771|    if (type_new_set_classdictcell(dict) < 0) {
  ------------------
  |  Branch (4830:9): [True: 0, False: 771]
  ------------------
 4831|      0|        return -1;
 4832|      0|    }
 4833|       |
 4834|       |#ifdef Py_GIL_DISABLED
 4835|       |    // enable deferred reference counting on functions and descriptors
 4836|       |    Py_ssize_t pos = 0;
 4837|       |    PyObject *key, *value;
 4838|       |    while (PyDict_Next(dict, &pos, &key, &value)) {
 4839|       |        if (PyFunction_Check(value) || Py_TYPE(value)->tp_descr_get != NULL) {
 4840|       |            PyUnstable_Object_EnableDeferredRefcount(value);
 4841|       |        }
 4842|       |    }
 4843|       |#endif
 4844|       |
 4845|    771|    return 0;
 4846|    771|}
typeobject.c:type_new_set_name:
 4441|    771|{
 4442|    771|    Py_ssize_t name_size;
 4443|    771|    type->tp_name = PyUnicode_AsUTF8AndSize(ctx->name, &name_size);
 4444|    771|    if (!type->tp_name) {
  ------------------
  |  Branch (4444:9): [True: 0, False: 771]
  ------------------
 4445|      0|        return -1;
 4446|      0|    }
 4447|    771|    if (strlen(type->tp_name) != (size_t)name_size) {
  ------------------
  |  Branch (4447:9): [True: 0, False: 771]
  ------------------
 4448|      0|        PyErr_SetString(PyExc_ValueError,
 4449|      0|                        "type name must not contain null characters");
 4450|      0|        return -1;
 4451|      0|    }
 4452|    771|    return 0;
 4453|    771|}
typeobject.c:type_new_set_module:
 4459|    771|{
 4460|    771|    int r = PyDict_Contains(dict, &_Py_ID(__module__));
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4461|    771|    if (r < 0) {
  ------------------
  |  Branch (4461:9): [True: 0, False: 771]
  ------------------
 4462|      0|        return -1;
 4463|      0|    }
 4464|    771|    if (r > 0) {
  ------------------
  |  Branch (4464:9): [True: 766, False: 5]
  ------------------
 4465|    766|        return 0;
 4466|    766|    }
 4467|       |
 4468|      5|    PyObject *globals = PyEval_GetGlobals();
 4469|      5|    if (globals == NULL) {
  ------------------
  |  Branch (4469:9): [True: 0, False: 5]
  ------------------
 4470|      0|        return 0;
 4471|      0|    }
 4472|       |
 4473|      5|    PyObject *module;
 4474|      5|    r = PyDict_GetItemRef(globals, &_Py_ID(__name__), &module);
  ------------------
  |  |  936|      5|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      5|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      5|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4475|      5|    if (module) {
  ------------------
  |  Branch (4475:9): [True: 5, False: 0]
  ------------------
 4476|      5|        r = PyDict_SetItem(dict, &_Py_ID(__module__), module);
  ------------------
  |  |  936|      5|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      5|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      5|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4477|      5|        Py_DECREF(module);
  ------------------
  |  |  430|      5|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4478|      5|    }
 4479|      5|    return r;
 4480|      5|}
typeobject.c:type_new_set_ht_name:
 4487|    771|{
 4488|    771|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
 4489|    771|    PyObject *qualname;
 4490|    771|    if (PyDict_GetItemRef(dict, &_Py_ID(__qualname__), &qualname) < 0) {
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4490:9): [True: 0, False: 771]
  ------------------
 4491|      0|        return -1;
 4492|      0|    }
 4493|    771|    if (qualname != NULL) {
  ------------------
  |  Branch (4493:9): [True: 631, False: 140]
  ------------------
 4494|    631|        if (!PyUnicode_Check(qualname)) {
  ------------------
  |  |  103|    631|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    631|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4494:13): [True: 0, False: 631]
  ------------------
 4495|      0|            PyErr_Format(PyExc_TypeError,
 4496|      0|                    "type __qualname__ must be a str, not %s",
 4497|      0|                    Py_TYPE(qualname)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4498|      0|            Py_DECREF(qualname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4499|      0|            return -1;
 4500|      0|        }
 4501|    631|        et->ht_qualname = qualname;
 4502|    631|        if (PyDict_DelItem(dict, &_Py_ID(__qualname__)) < 0) {
  ------------------
  |  |  936|    631|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    631|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    631|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4502:13): [True: 0, False: 631]
  ------------------
 4503|      0|            return -1;
 4504|      0|        }
 4505|    631|    }
 4506|    140|    else {
 4507|    140|        et->ht_qualname = Py_NewRef(et->ht_name);
  ------------------
  |  |  550|    140|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    140|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    140|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4508|    140|    }
 4509|    771|    return 0;
 4510|    771|}
typeobject.c:type_new_set_doc:
 4518|    771|{
 4519|    771|    PyObject *doc = PyDict_GetItemWithError(dict, &_Py_ID(__doc__));
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4520|    771|    if (doc == NULL) {
  ------------------
  |  Branch (4520:9): [True: 488, False: 283]
  ------------------
 4521|    488|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4521:13): [True: 0, False: 488]
  ------------------
 4522|      0|            return -1;
 4523|      0|        }
 4524|       |        // no __doc__ key
 4525|    488|        return 0;
 4526|    488|    }
 4527|    283|    if (!PyUnicode_Check(doc)) {
  ------------------
  |  |  103|    283|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    283|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4527:9): [True: 0, False: 283]
  ------------------
 4528|       |        // ignore non-string __doc__
 4529|      0|        return 0;
 4530|      0|    }
 4531|       |
 4532|    283|    const char *doc_str = PyUnicode_AsUTF8(doc);
 4533|    283|    if (doc_str == NULL) {
  ------------------
  |  Branch (4533:9): [True: 0, False: 283]
  ------------------
 4534|      0|        return -1;
 4535|      0|    }
 4536|       |
 4537|       |    // Silently truncate the docstring if it contains a null byte
 4538|    283|    Py_ssize_t size = strlen(doc_str) + 1;
 4539|    283|    char *tp_doc = (char *)PyMem_Malloc(size);
 4540|    283|    if (tp_doc == NULL) {
  ------------------
  |  Branch (4540:9): [True: 0, False: 283]
  ------------------
 4541|      0|        PyErr_NoMemory();
 4542|      0|        return -1;
 4543|      0|    }
 4544|       |
 4545|    283|    memcpy(tp_doc, doc_str, size);
 4546|    283|    type->tp_doc = tp_doc;
 4547|    283|    return 0;
 4548|    283|}
typeobject.c:type_new_staticmethod:
 4553|    771|{
 4554|    771|    PyObject *func = PyDict_GetItemWithError(dict, attr);
 4555|    771|    if (func == NULL) {
  ------------------
  |  Branch (4555:9): [True: 749, False: 22]
  ------------------
 4556|    749|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4556:13): [True: 0, False: 749]
  ------------------
 4557|      0|            return -1;
 4558|      0|        }
 4559|    749|        return 0;
 4560|    749|    }
 4561|     22|    if (!PyFunction_Check(func)) {
  ------------------
  |  |   68|     22|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|     22|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4561:9): [True: 0, False: 22]
  ------------------
 4562|      0|        return 0;
 4563|      0|    }
 4564|       |
 4565|     22|    PyObject *static_func = PyStaticMethod_New(func);
 4566|     22|    if (static_func == NULL) {
  ------------------
  |  Branch (4566:9): [True: 0, False: 22]
  ------------------
 4567|      0|        return -1;
 4568|      0|    }
 4569|     22|    if (PyDict_SetItem(dict, attr, static_func) < 0) {
  ------------------
  |  Branch (4569:9): [True: 0, False: 22]
  ------------------
 4570|      0|        Py_DECREF(static_func);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4571|      0|        return -1;
 4572|      0|    }
 4573|     22|    Py_DECREF(static_func);
  ------------------
  |  |  430|     22|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4574|     22|    return 0;
 4575|     22|}
typeobject.c:type_new_classmethod:
 4580|  1.54k|{
 4581|  1.54k|    PyObject *func = PyDict_GetItemWithError(dict, attr);
 4582|  1.54k|    if (func == NULL) {
  ------------------
  |  Branch (4582:9): [True: 1.52k, False: 20]
  ------------------
 4583|  1.52k|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4583:13): [True: 0, False: 1.52k]
  ------------------
 4584|      0|            return -1;
 4585|      0|        }
 4586|  1.52k|        return 0;
 4587|  1.52k|    }
 4588|     20|    if (!PyFunction_Check(func)) {
  ------------------
  |  |   68|     20|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|     20|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4588:9): [True: 19, False: 1]
  ------------------
 4589|     19|        return 0;
 4590|     19|    }
 4591|       |
 4592|      1|    PyObject *method = PyClassMethod_New(func);
 4593|      1|    if (method == NULL) {
  ------------------
  |  Branch (4593:9): [True: 0, False: 1]
  ------------------
 4594|      0|        return -1;
 4595|      0|    }
 4596|       |
 4597|      1|    if (PyDict_SetItem(dict, attr, method) < 0) {
  ------------------
  |  Branch (4597:9): [True: 0, False: 1]
  ------------------
 4598|      0|        Py_DECREF(method);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4599|      0|        return -1;
 4600|      0|    }
 4601|      1|    Py_DECREF(method);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4602|      1|    return 0;
 4603|      1|}
typeobject.c:type_new_descriptors:
 4635|    771|{
 4636|    771|    PyHeapTypeObject *et = (PyHeapTypeObject *)type;
 4637|    771|    Py_ssize_t slotoffset = ctx->base->tp_basicsize;
 4638|    771|    if (et->ht_slots != NULL) {
  ------------------
  |  Branch (4638:9): [True: 13, False: 758]
  ------------------
 4639|     13|        PyMemberDef *mp = _PyHeapType_GET_MEMBERS(et);
 4640|     13|        Py_ssize_t nslot = PyTuple_GET_SIZE(et->ht_slots);
  ------------------
  |  |   27|     13|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4641|     13|        int after_items = (ctx->base->tp_itemsize != 0 &&
  ------------------
  |  Branch (4641:28): [True: 0, False: 13]
  ------------------
 4642|      0|                           !(ctx->base->tp_flags & Py_TPFLAGS_ITEMS_AT_END));
  ------------------
  |  |  548|      0|#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23)
  ------------------
  |  Branch (4642:28): [True: 0, False: 0]
  ------------------
 4643|     13|        if (ctx->base->tp_itemsize != 0 &&
  ------------------
  |  Branch (4643:13): [True: 0, False: 13]
  ------------------
 4644|      0|            !(ctx->base->tp_flags & Py_TPFLAGS_TUPLE_SUBCLASS))
  ------------------
  |  |  553|      0|#define Py_TPFLAGS_TUPLE_SUBCLASS       (1UL << 26)
  ------------------
  |  Branch (4644:13): [True: 0, False: 0]
  ------------------
 4645|      0|        {
 4646|      0|            PyErr_Format(PyExc_TypeError,
 4647|      0|                         "arbitrary __slots__ not supported for subtype of '%s'",
 4648|      0|                         ctx->base->tp_name);
 4649|      0|            return -1;
 4650|      0|        }
 4651|     49|        for (Py_ssize_t i = 0; i < nslot; i++, mp++) {
  ------------------
  |  Branch (4651:32): [True: 36, False: 13]
  ------------------
 4652|     36|            mp->name = PyUnicode_AsUTF8(
 4653|     36|                PyTuple_GET_ITEM(et->ht_slots, i));
  ------------------
  |  |   29|     36|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     36|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4653:17): [True: 36, False: 0]
  ------------------
 4654|     36|            if (mp->name == NULL) {
  ------------------
  |  Branch (4654:17): [True: 0, False: 36]
  ------------------
 4655|      0|                return -1;
 4656|      0|            }
 4657|     36|            mp->type = Py_T_OBJECT_EX;
  ------------------
  |  |   75|     36|#define Py_T_OBJECT_EX 16
  ------------------
 4658|     36|            mp->offset = slotoffset;
 4659|     36|            if (after_items) {
  ------------------
  |  Branch (4659:17): [True: 0, False: 36]
  ------------------
 4660|      0|                mp->flags |= _Py_AFTER_ITEMS;
  ------------------
  |  |   89|      0|#  define _Py_AFTER_ITEMS      (1 << 4) // For internal use.
  ------------------
 4661|      0|            }
 4662|       |
 4663|       |            /* __dict__ and __weakref__ are already filtered out */
 4664|     36|            assert(strcmp(mp->name, "__dict__") != 0);
  ------------------
  |  Branch (4664:13): [True: 36, False: 0]
  ------------------
 4665|     36|            assert(strcmp(mp->name, "__weakref__") != 0);
  ------------------
  |  Branch (4665:13): [True: 36, False: 0]
  ------------------
 4666|       |
 4667|     36|            slotoffset += sizeof(PyObject *);
 4668|     36|        }
 4669|     13|    }
 4670|       |
 4671|    771|    if (ctx->add_weak) {
  ------------------
  |  Branch (4671:9): [True: 196, False: 575]
  ------------------
 4672|    196|        assert((type->tp_flags & Py_TPFLAGS_MANAGED_WEAKREF) == 0);
  ------------------
  |  Branch (4672:9): [True: 196, False: 0]
  ------------------
 4673|    196|        type_add_flags(type, Py_TPFLAGS_MANAGED_WEAKREF);
  ------------------
  |  |  477|    196|#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3)
  ------------------
 4674|    196|        type->tp_weaklistoffset = MANAGED_WEAKREF_OFFSET;
  ------------------
  |  |  924|    196|#  define MANAGED_WEAKREF_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-4)
  ------------------
 4675|    196|    }
 4676|    771|    if (ctx->add_dict) {
  ------------------
  |  Branch (4676:9): [True: 157, False: 614]
  ------------------
 4677|    157|        assert((type->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0);
  ------------------
  |  Branch (4677:9): [True: 157, False: 0]
  ------------------
 4678|    157|        type_add_flags(type, Py_TPFLAGS_MANAGED_DICT);
  ------------------
  |  |  482|    157|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
 4679|    157|        type->tp_dictoffset = -1;
 4680|    157|    }
 4681|       |
 4682|    771|    type->tp_basicsize = slotoffset;
 4683|    771|    type->tp_itemsize = ctx->base->tp_itemsize;
 4684|    771|    type->tp_members = _PyHeapType_GET_MEMBERS(et);
 4685|       |
 4686|    771|    PyInterpreterState *interp = _PyInterpreterState_GET();
 4687|       |
 4688|    771|    if (type->tp_dictoffset) {
  ------------------
  |  Branch (4688:9): [True: 157, False: 614]
  ------------------
 4689|    157|        if (type_add_common_descriptor(
  ------------------
  |  Branch (4689:13): [True: 0, False: 157]
  ------------------
 4690|    157|            interp,
 4691|    157|            &interp->cached_objects.dict_descriptor,
 4692|    157|            &subtype_getset_dict,
 4693|    157|            dict) < 0)
 4694|      0|        {
 4695|      0|            return -1;
 4696|      0|        }
 4697|    157|    }
 4698|    771|    if (type->tp_weaklistoffset) {
  ------------------
  |  Branch (4698:9): [True: 196, False: 575]
  ------------------
 4699|    196|        if (type_add_common_descriptor(
  ------------------
  |  Branch (4699:13): [True: 0, False: 196]
  ------------------
 4700|    196|            interp,
 4701|    196|            &interp->cached_objects.weakref_descriptor,
 4702|    196|            &subtype_getset_weakref,
 4703|    196|            dict) < 0)
 4704|      0|        {
 4705|      0|            return -1;
 4706|      0|        }
 4707|    196|    }
 4708|       |
 4709|    771|    return 0;
 4710|    771|}
typeobject.c:type_add_common_descriptor:
 4611|    353|{
 4612|       |#ifdef Py_GIL_DISABLED
 4613|       |    PyMutex_Lock(&interp->cached_objects.descriptor_mutex);
 4614|       |#endif
 4615|    353|    PyObject *descr = *cache;
 4616|    353|    if (!descr) {
  ------------------
  |  Branch (4616:9): [True: 4, False: 349]
  ------------------
 4617|      4|        descr = PyDescr_NewGetSet(&PyBaseObject_Type, getset_def);
 4618|      4|        *cache = descr;
 4619|      4|    }
 4620|       |#ifdef Py_GIL_DISABLED
 4621|       |    PyMutex_Unlock(&interp->cached_objects.descriptor_mutex);
 4622|       |#endif
 4623|    353|    if (!descr) {
  ------------------
  |  Branch (4623:9): [True: 0, False: 353]
  ------------------
 4624|      0|        return -1;
 4625|      0|    }
 4626|    353|    if (PyDict_SetDefaultRef(dict, PyDescr_NAME(descr), descr, NULL) < 0) {
  ------------------
  |  |   36|    353|#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
  ------------------
  |  Branch (4626:9): [True: 0, False: 353]
  ------------------
 4627|      0|        return -1;
 4628|      0|    }
 4629|    353|    return 0;
 4630|    353|}
typeobject.c:type_new_set_slots:
 4715|    771|{
 4716|    771|    type->tp_getset = NULL;
 4717|       |
 4718|       |    /* Special case some slots */
 4719|    771|    if (type->tp_dictoffset != 0 || ctx->nslot > 0) {
  ------------------
  |  Branch (4719:9): [True: 157, False: 614]
  |  Branch (4719:37): [True: 12, False: 602]
  ------------------
 4720|    169|        PyTypeObject *base = ctx->base;
 4721|    169|        if (base->tp_getattr == NULL && base->tp_getattro == NULL) {
  ------------------
  |  Branch (4721:13): [True: 169, False: 0]
  |  Branch (4721:41): [True: 0, False: 169]
  ------------------
 4722|      0|            type->tp_getattro = PyObject_GenericGetAttr;
 4723|      0|        }
 4724|    169|        if (base->tp_setattr == NULL && base->tp_setattro == NULL) {
  ------------------
  |  Branch (4724:13): [True: 169, False: 0]
  |  Branch (4724:41): [True: 0, False: 169]
  ------------------
 4725|      0|            type->tp_setattro = PyObject_GenericSetAttr;
 4726|      0|        }
 4727|    169|    }
 4728|    771|}
typeobject.c:type_new_set_classcell:
 4734|    771|{
 4735|    771|    PyObject *cell = PyDict_GetItemWithError(dict, &_Py_ID(__classcell__));
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4736|    771|    if (cell == NULL) {
  ------------------
  |  Branch (4736:9): [True: 751, False: 20]
  ------------------
 4737|    751|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4737:13): [True: 0, False: 751]
  ------------------
 4738|      0|            return -1;
 4739|      0|        }
 4740|    751|        return 0;
 4741|    751|    }
 4742|       |
 4743|       |    /* At least one method requires a reference to its defining class */
 4744|     20|    if (!PyCell_Check(cell)) {
  ------------------
  |  |   18|     20|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|     20|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4744:9): [True: 0, False: 20]
  ------------------
 4745|      0|        PyErr_Format(PyExc_TypeError,
 4746|      0|                     "__classcell__ must be a nonlocal cell, not %.200R",
 4747|      0|                     Py_TYPE(cell));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4748|      0|        return -1;
 4749|      0|    }
 4750|       |
 4751|     20|    (void)PyCell_Set(cell, (PyObject *) type);
 4752|     20|    if (PyDict_DelItem(dict, &_Py_ID(__classcell__)) < 0) {
  ------------------
  |  |  936|     20|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     20|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     20|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4752:9): [True: 0, False: 20]
  ------------------
 4753|      0|        return -1;
 4754|      0|    }
 4755|     20|    return 0;
 4756|     20|}
typeobject.c:type_new_set_classdictcell:
 4760|    771|{
 4761|    771|    PyObject *cell = PyDict_GetItemWithError(dict, &_Py_ID(__classdictcell__));
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4762|    771|    if (cell == NULL) {
  ------------------
  |  Branch (4762:9): [True: 340, False: 431]
  ------------------
 4763|    340|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (4763:13): [True: 0, False: 340]
  ------------------
 4764|      0|            return -1;
 4765|      0|        }
 4766|    340|        return 0;
 4767|    340|    }
 4768|       |
 4769|       |    /* At least one method requires a reference to the dict of its defining class */
 4770|    431|    if (!PyCell_Check(cell)) {
  ------------------
  |  |   18|    431|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|    431|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    431|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    431|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4770:9): [True: 0, False: 431]
  ------------------
 4771|      0|        PyErr_Format(PyExc_TypeError,
 4772|      0|                     "__classdictcell__ must be a nonlocal cell, not %.200R",
 4773|      0|                     Py_TYPE(cell));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4774|      0|        return -1;
 4775|      0|    }
 4776|       |
 4777|    431|    (void)PyCell_Set(cell, (PyObject *)dict);
 4778|    431|    if (PyDict_DelItem(dict, &_Py_ID(__classdictcell__)) < 0) {
  ------------------
  |  |  936|    431|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    431|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    431|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4778:9): [True: 0, False: 431]
  ------------------
 4779|      0|        return -1;
 4780|      0|    }
 4781|    431|    return 0;
 4782|    431|}
typeobject.c:type_new_set_names:
12221|    771|{
12222|    771|    PyObject *dict = lookup_tp_dict(type);
12223|    771|    PyObject *names_to_set = PyDict_Copy(dict);
12224|    771|    if (names_to_set == NULL) {
  ------------------
  |  Branch (12224:9): [True: 0, False: 771]
  ------------------
12225|      0|        return -1;
12226|      0|    }
12227|       |
12228|    771|    Py_ssize_t i = 0;
12229|    771|    PyObject *key, *value;
12230|  6.42k|    while (PyDict_Next(names_to_set, &i, &key, &value)) {
  ------------------
  |  Branch (12230:12): [True: 5.65k, False: 771]
  ------------------
12231|  5.65k|        PyObject *set_name = _PyObject_LookupSpecial(value,
12232|  5.65k|                                                     &_Py_ID(__set_name__));
  ------------------
  |  |  936|  5.65k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  5.65k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  5.65k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12233|  5.65k|        if (set_name == NULL) {
  ------------------
  |  Branch (12233:13): [True: 5.60k, False: 46]
  ------------------
12234|  5.60k|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (12234:17): [True: 0, False: 5.60k]
  ------------------
12235|      0|                goto error;
12236|      0|            }
12237|  5.60k|            continue;
12238|  5.60k|        }
12239|       |
12240|     46|        PyObject *res = PyObject_CallFunctionObjArgs(set_name, type, key, NULL);
12241|     46|        Py_DECREF(set_name);
  ------------------
  |  |  430|     46|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12242|       |
12243|     46|        if (res == NULL) {
  ------------------
  |  Branch (12243:13): [True: 0, False: 46]
  ------------------
12244|      0|            _PyErr_FormatNote(
12245|      0|                "Error calling __set_name__ on '%.100s' instance %R "
12246|      0|                "in '%.100s'",
12247|      0|                Py_TYPE(value)->tp_name, key, type->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12248|      0|            goto error;
12249|      0|        }
12250|     46|        else {
12251|     46|            Py_DECREF(res);
  ------------------
  |  |  430|     46|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12252|     46|        }
12253|     46|    }
12254|       |
12255|    771|    Py_DECREF(names_to_set);
  ------------------
  |  |  430|    771|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12256|    771|    return 0;
12257|       |
12258|      0|error:
12259|      0|    Py_DECREF(names_to_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12260|      0|    return -1;
12261|    771|}
typeobject.c:type_new_init_subclass:
12267|    771|{
12268|    771|    PyObject *args[2] = {(PyObject *)type, (PyObject *)type};
12269|    771|    PyObject *super = PyObject_Vectorcall((PyObject *)&PySuper_Type,
12270|    771|                                          args, 2, NULL);
12271|    771|    if (super == NULL) {
  ------------------
  |  Branch (12271:9): [True: 0, False: 771]
  ------------------
12272|      0|        return -1;
12273|      0|    }
12274|       |
12275|    771|    PyObject *func = PyObject_GetAttr(super, &_Py_ID(__init_subclass__));
  ------------------
  |  |  936|    771|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    771|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    771|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12276|    771|    Py_DECREF(super);
  ------------------
  |  |  430|    771|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12277|    771|    if (func == NULL) {
  ------------------
  |  Branch (12277:9): [True: 0, False: 771]
  ------------------
12278|      0|        return -1;
12279|      0|    }
12280|       |
12281|    771|    PyObject *result = PyObject_VectorcallDict(func, NULL, 0, kwds);
12282|    771|    Py_DECREF(func);
  ------------------
  |  |  430|    771|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12283|    771|    if (result == NULL) {
  ------------------
  |  Branch (12283:9): [True: 0, False: 771]
  ------------------
12284|      0|        return -1;
12285|      0|    }
12286|       |
12287|    771|    Py_DECREF(result);
  ------------------
  |  |  430|    771|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    771|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    771|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12288|    771|    return 0;
12289|    771|}
typeobject.c:type_is_gc:
 7172|   139M|{
 7173|   139M|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|   139M|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 7174|   139M|    return type->tp_flags & Py_TPFLAGS_HEAPTYPE;
  ------------------
  |  |  503|   139M|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
 7175|   139M|}
typeobject.c:type_vectorcall:
 5098|    761|{
 5099|    761|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    761|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 5100|    761|    if (nargs == 1 && metatype == (PyObject *)&PyType_Type){
  ------------------
  |  Branch (5100:9): [True: 73, False: 688]
  |  Branch (5100:23): [True: 73, False: 0]
  ------------------
 5101|     73|        if (!_PyArg_NoKwnames("type", kwnames)) {
  ------------------
  |  |   15|     73|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 73, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5102|      0|            return NULL;
 5103|      0|        }
 5104|     73|        return Py_NewRef(Py_TYPE(args[0]));
  ------------------
  |  |  550|     73|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     73|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     73|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5105|     73|    }
 5106|       |    /* In other (much less common) cases, fall back to
 5107|       |       more flexible calling conventions. */
 5108|    688|    PyThreadState *tstate = _PyThreadState_GET();
 5109|    688|    return _PyObject_MakeTpCall(tstate, metatype, args, nargs, kwnames);
 5110|    761|}
typeobject.c:object_richcompare:
 7414|  1.05k|{
 7415|  1.05k|    PyObject *res;
 7416|       |
 7417|  1.05k|    switch (op) {
 7418|       |
 7419|  1.05k|    case Py_EQ:
  ------------------
  |  |  654|  1.05k|#define Py_EQ 2
  ------------------
  |  Branch (7419:5): [True: 1.05k, False: 0]
  ------------------
 7420|       |        /* Return NotImplemented instead of False, so if two
 7421|       |           objects are compared, both get a chance at the
 7422|       |           comparison.  See issue #1393. */
 7423|  1.05k|        res = Py_NewRef((self == other) ? Py_True : Py_NotImplemented);
  ------------------
  |  |  550|  1.05k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.05k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 4, False: 1.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7424|  1.05k|        break;
 7425|       |
 7426|      0|    case Py_NE:
  ------------------
  |  |  655|      0|#define Py_NE 3
  ------------------
  |  Branch (7426:5): [True: 0, False: 1.05k]
  ------------------
 7427|       |        /* By default, __ne__() delegates to __eq__() and inverts the result,
 7428|       |           unless the latter returns NotImplemented. */
 7429|      0|        if (Py_TYPE(self)->tp_richcompare == NULL) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (7429:13): [True: 0, False: 0]
  ------------------
 7430|      0|            res = Py_NewRef(Py_NotImplemented);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7431|      0|            break;
 7432|      0|        }
 7433|      0|        res = (*Py_TYPE(self)->tp_richcompare)(self, other, Py_EQ);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      res = (*Py_TYPE(self)->tp_richcompare)(self, other, Py_EQ);
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
 7434|      0|        if (res != NULL && res != Py_NotImplemented) {
  ------------------
  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  ------------------
  |  Branch (7434:13): [True: 0, False: 0]
  |  Branch (7434:28): [True: 0, False: 0]
  ------------------
 7435|      0|            int ok = PyObject_IsTrue(res);
 7436|      0|            Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7437|      0|            if (ok < 0)
  ------------------
  |  Branch (7437:17): [True: 0, False: 0]
  ------------------
 7438|      0|                res = NULL;
 7439|      0|            else {
 7440|      0|                if (ok)
  ------------------
  |  Branch (7440:21): [True: 0, False: 0]
  ------------------
 7441|      0|                    res = Py_NewRef(Py_False);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7442|      0|                else
 7443|      0|                    res = Py_NewRef(Py_True);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7444|      0|            }
 7445|      0|        }
 7446|      0|        break;
 7447|       |
 7448|      0|    default:
  ------------------
  |  Branch (7448:5): [True: 0, False: 1.05k]
  ------------------
 7449|      0|        res = Py_NewRef(Py_NotImplemented);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7450|      0|        break;
 7451|  1.05k|    }
 7452|       |
 7453|  1.05k|    return res;
 7454|  1.05k|}
typeobject.c:object_dealloc:
 7369|  2.05M|{
 7370|  2.05M|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|  2.05M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.05M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.05M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7371|  2.05M|}
typeobject.c:object_str:
 7403|  48.6k|{
 7404|  48.6k|    unaryfunc f;
 7405|       |
 7406|  48.6k|    f = Py_TYPE(self)->tp_repr;
  ------------------
  |  |  213|  48.6k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  48.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7407|  48.6k|    if (f == NULL)
  ------------------
  |  Branch (7407:9): [True: 0, False: 48.6k]
  ------------------
 7408|      0|        f = object_repr;
 7409|  48.6k|    return f(self);
 7410|  48.6k|}
typeobject.c:object_subclasshook:
 8301|     16|{
 8302|     16|    Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|     16|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|     16|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 8303|     16|}
typeobject.c:object_init_subclass:
 8315|    771|{
 8316|    771|    Py_RETURN_NONE;
  ------------------
  |  |  628|    771|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    771|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 8317|    771|}
typeobject.c:object___format___impl:
 8339|  48.4k|{
 8340|       |    /* Issue 7994: If we're converting to a string, we
 8341|       |       should reject format specifications */
 8342|  48.4k|    if (PyUnicode_GET_LENGTH(format_spec) > 0) {
  ------------------
  |  |  299|  48.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8342:9): [True: 0, False: 48.4k]
  ------------------
 8343|      0|        PyErr_Format(PyExc_TypeError,
 8344|      0|                     "unsupported format string passed to %.200s.__format__",
 8345|      0|                     Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8346|      0|        return NULL;
 8347|      0|    }
 8348|  48.4k|    return PyObject_Str(self);
 8349|  48.4k|}
typeobject.c:object_get_class:
 7464|  20.4k|{
 7465|  20.4k|    return Py_NewRef(Py_TYPE(self));
  ------------------
  |  |  550|  20.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  20.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7466|  20.4k|}
typeobject.c:object_init:
 7279|  21.4k|{
 7280|  21.4k|    PyTypeObject *type = Py_TYPE(self);
  ------------------
  |  |  213|  21.4k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  21.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7281|  21.4k|    if (excess_args(args, kwds)) {
  ------------------
  |  Branch (7281:9): [True: 19.9k, False: 1.48k]
  ------------------
 7282|  19.9k|        if (type->tp_init != object_init) {
  ------------------
  |  Branch (7282:13): [True: 0, False: 19.9k]
  ------------------
 7283|      0|            PyErr_SetString(PyExc_TypeError,
 7284|      0|                            "object.__init__() takes exactly one argument (the instance to initialize)");
 7285|      0|            return -1;
 7286|      0|        }
 7287|  19.9k|        if (type->tp_new == object_new) {
  ------------------
  |  Branch (7287:13): [True: 0, False: 19.9k]
  ------------------
 7288|      0|            PyErr_Format(PyExc_TypeError,
 7289|      0|                         "%.200s.__init__() takes exactly one argument (the instance to initialize)",
 7290|      0|                         type->tp_name);
 7291|      0|            return -1;
 7292|      0|        }
 7293|  19.9k|    }
 7294|  21.4k|    return 0;
 7295|  21.4k|}
typeobject.c:excess_args:
 7272|  71.6k|{
 7273|  71.6k|    return PyTuple_GET_SIZE(args) ||
  ------------------
  |  |   27|   143k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  71.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  71.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 68.8k, False: 2.81k]
  |  |  ------------------
  ------------------
 7274|  2.81k|        (kwds && PyDict_Check(kwds) && PyDict_GET_SIZE(kwds));
  ------------------
  |  |   18|    156|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.96k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 156, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      (kwds && PyDict_Check(kwds) && PyDict_GET_SIZE(kwds));
  ------------------
  |  |   63|    156|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    156|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (63:29): [True: 156, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (7274:10): [True: 156, False: 2.65k]
  ------------------
 7275|  71.6k|}
typeobject.c:object_new:
 7299|  50.1k|{
 7300|  50.1k|    if (excess_args(args, kwds)) {
  ------------------
  |  Branch (7300:9): [True: 49.0k, False: 1.16k]
  ------------------
 7301|  49.0k|        if (type->tp_new != object_new) {
  ------------------
  |  Branch (7301:13): [True: 0, False: 49.0k]
  ------------------
 7302|      0|            PyErr_SetString(PyExc_TypeError,
 7303|      0|                            "object.__new__() takes exactly one argument (the type to instantiate)");
 7304|      0|            return NULL;
 7305|      0|        }
 7306|  49.0k|        if (type->tp_init == object_init) {
  ------------------
  |  Branch (7306:13): [True: 0, False: 49.0k]
  ------------------
 7307|      0|            PyErr_Format(PyExc_TypeError, "%.200s() takes no arguments",
 7308|      0|                         type->tp_name);
 7309|      0|            return NULL;
 7310|      0|        }
 7311|  49.0k|    }
 7312|       |
 7313|  50.1k|    if (type->tp_flags & Py_TPFLAGS_IS_ABSTRACT) {
  ------------------
  |  |  540|  50.1k|#define Py_TPFLAGS_IS_ABSTRACT (1UL << 20)
  ------------------
  |  Branch (7313:9): [True: 0, False: 50.1k]
  ------------------
 7314|      0|        PyObject *abstract_methods;
 7315|      0|        PyObject *sorted_methods;
 7316|      0|        PyObject *joined;
 7317|      0|        PyObject* comma_w_quotes_sep;
 7318|      0|        Py_ssize_t method_count;
 7319|       |
 7320|       |        /* Compute "', '".join(sorted(type.__abstractmethods__))
 7321|       |           into joined. */
 7322|      0|        abstract_methods = type_abstractmethods((PyObject *)type, NULL);
 7323|      0|        if (abstract_methods == NULL)
  ------------------
  |  Branch (7323:13): [True: 0, False: 0]
  ------------------
 7324|      0|            return NULL;
 7325|      0|        sorted_methods = PySequence_List(abstract_methods);
 7326|      0|        Py_DECREF(abstract_methods);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7327|      0|        if (sorted_methods == NULL)
  ------------------
  |  Branch (7327:13): [True: 0, False: 0]
  ------------------
 7328|      0|            return NULL;
 7329|      0|        if (PyList_Sort(sorted_methods)) {
  ------------------
  |  Branch (7329:13): [True: 0, False: 0]
  ------------------
 7330|      0|            Py_DECREF(sorted_methods);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7331|      0|            return NULL;
 7332|      0|        }
 7333|      0|        comma_w_quotes_sep = PyUnicode_FromString("', '");
 7334|      0|        if (!comma_w_quotes_sep) {
  ------------------
  |  Branch (7334:13): [True: 0, False: 0]
  ------------------
 7335|      0|            Py_DECREF(sorted_methods);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7336|      0|            return NULL;
 7337|      0|        }
 7338|      0|        joined = PyUnicode_Join(comma_w_quotes_sep, sorted_methods);
 7339|      0|        Py_DECREF(comma_w_quotes_sep);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7340|      0|        if (joined == NULL)  {
  ------------------
  |  Branch (7340:13): [True: 0, False: 0]
  ------------------
 7341|      0|            Py_DECREF(sorted_methods);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7342|      0|            return NULL;
 7343|      0|        }
 7344|      0|        method_count = PyObject_Length(sorted_methods);
  ------------------
  |  |  353|      0|#define PyObject_Length PyObject_Size
  ------------------
 7345|      0|        Py_DECREF(sorted_methods);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7346|      0|        if (method_count == -1) {
  ------------------
  |  Branch (7346:13): [True: 0, False: 0]
  ------------------
 7347|      0|            Py_DECREF(joined);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7348|      0|            return NULL;
 7349|      0|        }
 7350|       |
 7351|      0|        PyErr_Format(PyExc_TypeError,
 7352|      0|                     "Can't instantiate abstract class %s "
 7353|      0|                     "without an implementation for abstract method%s '%U'",
 7354|      0|                     type->tp_name,
 7355|      0|                     method_count > 1 ? "s" : "",
  ------------------
  |  Branch (7355:22): [True: 0, False: 0]
  ------------------
 7356|      0|                     joined);
 7357|      0|        Py_DECREF(joined);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7358|      0|        return NULL;
 7359|      0|    }
 7360|  50.1k|    PyObject *obj = type->tp_alloc(type, 0);
 7361|  50.1k|    if (obj == NULL) {
  ------------------
  |  Branch (7361:9): [True: 0, False: 50.1k]
  ------------------
 7362|      0|        return NULL;
 7363|      0|    }
 7364|  50.1k|    return obj;
 7365|  50.1k|}
typeobject.c:type_add_method:
 8494|  1.78k|{
 8495|  1.78k|    PyObject *descr;
 8496|  1.78k|    int isdescr = 1;
 8497|  1.78k|    if (meth->ml_flags & METH_CLASS) {
  ------------------
  |  |  104|  1.78k|#define METH_CLASS    0x0010
  ------------------
  |  Branch (8497:9): [True: 115, False: 1.67k]
  ------------------
 8498|    115|        if (meth->ml_flags & METH_STATIC) {
  ------------------
  |  |  105|    115|#define METH_STATIC   0x0020
  ------------------
  |  Branch (8498:13): [True: 0, False: 115]
  ------------------
 8499|      0|            PyErr_SetString(PyExc_ValueError,
 8500|      0|                    "method cannot be both class and static");
 8501|      0|            return -1;
 8502|      0|        }
 8503|    115|        descr = PyDescr_NewClassMethod(type, meth);
 8504|    115|    }
 8505|  1.67k|    else if (meth->ml_flags & METH_STATIC) {
  ------------------
  |  |  105|  1.67k|#define METH_STATIC   0x0020
  ------------------
  |  Branch (8505:14): [True: 6, False: 1.66k]
  ------------------
 8506|      6|        PyObject *mod = type_module(type);
 8507|      6|        if (mod == NULL) {
  ------------------
  |  Branch (8507:13): [True: 0, False: 6]
  ------------------
 8508|      0|            if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
  ------------------
  |  Branch (8508:17): [True: 0, False: 0]
  ------------------
 8509|      0|                return -1;
 8510|      0|            }
 8511|      0|            PyErr_Clear();
 8512|      0|        }
 8513|      6|        PyObject *cfunc = PyCFunction_NewEx(meth, (PyObject*)type, mod);
  ------------------
  |  |   87|      6|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
 8514|      6|        Py_XDECREF(mod);
  ------------------
  |  |  524|      6|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8515|      6|        if (cfunc == NULL) {
  ------------------
  |  Branch (8515:13): [True: 0, False: 6]
  ------------------
 8516|      0|            return -1;
 8517|      0|        }
 8518|      6|        descr = PyStaticMethod_New(cfunc);
 8519|      6|        isdescr = 0;  // PyStaticMethod is not PyDescrObject
 8520|      6|        Py_DECREF(cfunc);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8521|      6|    }
 8522|  1.66k|    else {
 8523|  1.66k|        descr = PyDescr_NewMethod(type, meth);
 8524|  1.66k|    }
 8525|  1.78k|    if (descr == NULL) {
  ------------------
  |  Branch (8525:9): [True: 0, False: 1.78k]
  ------------------
 8526|      0|        return -1;
 8527|      0|    }
 8528|       |
 8529|  1.78k|    PyObject *name;
 8530|  1.78k|    if (isdescr) {
  ------------------
  |  Branch (8530:9): [True: 1.78k, False: 6]
  ------------------
 8531|  1.78k|        name = PyDescr_NAME(descr);
  ------------------
  |  |   36|  1.78k|#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
  ------------------
 8532|  1.78k|    }
 8533|      6|    else {
 8534|      6|        name = PyUnicode_FromString(meth->ml_name);
 8535|      6|        if (name == NULL) {
  ------------------
  |  Branch (8535:13): [True: 0, False: 6]
  ------------------
 8536|      0|            Py_DECREF(descr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8537|      0|            return -1;
 8538|      0|        }
 8539|      6|    }
 8540|       |
 8541|  1.78k|    int err;
 8542|  1.78k|    PyObject *dict = lookup_tp_dict(type);
 8543|  1.78k|    if (!(meth->ml_flags & METH_COEXIST)) {
  ------------------
  |  |  112|  1.78k|#define METH_COEXIST   0x0040
  ------------------
  |  Branch (8543:9): [True: 1.76k, False: 20]
  ------------------
 8544|  1.76k|        err = PyDict_SetDefaultRef(dict, name, descr, NULL) < 0;
 8545|  1.76k|    }
 8546|     20|    else {
 8547|     20|        err = PyDict_SetItem(dict, name, descr) < 0;
 8548|     20|    }
 8549|  1.78k|    if (!isdescr) {
  ------------------
  |  Branch (8549:9): [True: 6, False: 1.78k]
  ------------------
 8550|      6|        Py_DECREF(name);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8551|      6|    }
 8552|  1.78k|    Py_DECREF(descr);
  ------------------
  |  |  430|  1.78k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.78k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.78k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8553|  1.78k|    if (err) {
  ------------------
  |  Branch (8553:9): [True: 0, False: 1.78k]
  ------------------
 8554|      0|        return -1;
 8555|      0|    }
 8556|  1.78k|    return 0;
 8557|  1.78k|}
typeobject.c:type_add_flags:
  474|  9.79k|{
  475|  9.79k|    type_set_flags(tp, tp->tp_flags | flag);
  476|  9.79k|}
typeobject.c:type_ready:
 9421|  1.31k|{
 9422|  1.31k|    ASSERT_TYPE_LOCK_HELD();
 9423|       |
 9424|  1.31k|    _PyObject_ASSERT((PyObject *)type, !is_readying(type));
  ------------------
  |  |  425|  1.31k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  1.31k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  1.31k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 1.31k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  1.31k|      ? (void)(0) \
  |  |  |  |  |  |  418|  1.31k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9425|  1.31k|    start_readying(type);
 9426|       |
 9427|  1.31k|    if (type_ready_pre_checks(type) < 0) {
  ------------------
  |  Branch (9427:9): [True: 0, False: 1.31k]
  ------------------
 9428|      0|        goto error;
 9429|      0|    }
 9430|       |
 9431|  1.31k|    _PyTypeCache_InitType(type);
 9432|       |
 9433|       |#ifdef Py_TRACE_REFS
 9434|       |    /* PyType_Ready is the closest thing we have to a choke point
 9435|       |     * for type objects, so is the best place I can think of to try
 9436|       |     * to get type objects into the doubly-linked list of all objects.
 9437|       |     * Still, not all type objects go through PyType_Ready.
 9438|       |     */
 9439|       |    _Py_AddToAllObjects((PyObject *)type);
 9440|       |#endif
 9441|       |
 9442|       |    /* Initialize tp_dict: _PyType_IsReady() tests if tp_dict != NULL */
 9443|  1.31k|    if (type_ready_set_dict(type) < 0) {
  ------------------
  |  Branch (9443:9): [True: 0, False: 1.31k]
  ------------------
 9444|      0|        goto error;
 9445|      0|    }
 9446|  1.31k|    if (type_ready_set_base(type) < 0) {
  ------------------
  |  Branch (9446:9): [True: 0, False: 1.31k]
  ------------------
 9447|      0|        goto error;
 9448|      0|    }
 9449|  1.31k|    if (type_ready_set_type(type) < 0) {
  ------------------
  |  Branch (9449:9): [True: 0, False: 1.31k]
  ------------------
 9450|      0|        goto error;
 9451|      0|    }
 9452|  1.31k|    if (type_ready_set_bases(type, initial) < 0) {
  ------------------
  |  Branch (9452:9): [True: 0, False: 1.31k]
  ------------------
 9453|      0|        goto error;
 9454|      0|    }
 9455|  1.31k|    if (type_ready_mro(type, initial) < 0) {
  ------------------
  |  Branch (9455:9): [True: 0, False: 1.31k]
  ------------------
 9456|      0|        goto error;
 9457|      0|    }
 9458|  1.31k|    if (type_ready_set_new(type, initial) < 0) {
  ------------------
  |  Branch (9458:9): [True: 0, False: 1.31k]
  ------------------
 9459|      0|        goto error;
 9460|      0|    }
 9461|  1.31k|    if (type_ready_fill_dict(type) < 0) {
  ------------------
  |  Branch (9461:9): [True: 0, False: 1.31k]
  ------------------
 9462|      0|        goto error;
 9463|      0|    }
 9464|  1.31k|    if (initial) {
  ------------------
  |  Branch (9464:9): [True: 1.31k, False: 0]
  ------------------
 9465|  1.31k|        if (type_ready_inherit(type) < 0) {
  ------------------
  |  Branch (9465:13): [True: 0, False: 1.31k]
  ------------------
 9466|      0|            goto error;
 9467|      0|        }
 9468|  1.31k|        if (type_ready_preheader(type) < 0) {
  ------------------
  |  Branch (9468:13): [True: 0, False: 1.31k]
  ------------------
 9469|      0|            goto error;
 9470|      0|        }
 9471|  1.31k|    }
 9472|  1.31k|    if (type_ready_set_hash(type) < 0) {
  ------------------
  |  Branch (9472:9): [True: 0, False: 1.31k]
  ------------------
 9473|      0|        goto error;
 9474|      0|    }
 9475|  1.31k|    if (add_subclasses) {
  ------------------
  |  Branch (9475:9): [True: 416, False: 902]
  ------------------
 9476|    416|        if (type_ready_add_subclasses(type) < 0) {
  ------------------
  |  Branch (9476:13): [True: 0, False: 416]
  ------------------
 9477|      0|            goto error;
 9478|      0|        }
 9479|    416|    }
 9480|  1.31k|    if (initial) {
  ------------------
  |  Branch (9480:9): [True: 1.31k, False: 0]
  ------------------
 9481|  1.31k|        if (type_ready_managed_dict(type) < 0) {
  ------------------
  |  Branch (9481:13): [True: 0, False: 1.31k]
  ------------------
 9482|      0|            goto error;
 9483|      0|        }
 9484|  1.31k|        if (type_ready_post_checks(type) < 0) {
  ------------------
  |  Branch (9484:13): [True: 0, False: 1.31k]
  ------------------
 9485|      0|            goto error;
 9486|      0|        }
 9487|  1.31k|    }
 9488|       |
 9489|  1.31k|    if (add_subclasses) {
  ------------------
  |  Branch (9489:9): [True: 416, False: 902]
  ------------------
 9490|       |        /* All done -- set the ready flag */
 9491|    416|        if (initial) {
  ------------------
  |  Branch (9491:13): [True: 416, False: 0]
  ------------------
 9492|    416|            type_add_flags(type, Py_TPFLAGS_READY);
  ------------------
  |  |  518|    416|#define Py_TPFLAGS_READY (1UL << 12)
  ------------------
 9493|    416|        } else {
 9494|      0|            assert(type->tp_flags & Py_TPFLAGS_READY);
  ------------------
  |  Branch (9494:13): [True: 0, False: 0]
  ------------------
 9495|      0|        }
 9496|    416|    }
 9497|       |
 9498|  1.31k|    stop_readying(type);
 9499|       |
 9500|  1.31k|    assert(_PyType_CheckConsistency(type));
  ------------------
  |  Branch (9500:5): [True: 1.31k, False: 0]
  ------------------
 9501|  1.31k|    return 0;
 9502|       |
 9503|      0|error:
 9504|      0|    stop_readying(type);
 9505|      0|    return -1;
 9506|  1.31k|}
typeobject.c:start_readying:
  486|  1.31k|{
  487|  1.31k|    if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (487:9): [True: 416, False: 902]
  ------------------
  488|    416|        PyInterpreterState *interp = _PyInterpreterState_GET();
  489|    416|        managed_static_type_state *state = managed_static_type_state_get(interp, type);
  490|    416|        assert(state != NULL);
  ------------------
  |  Branch (490:9): [True: 416, False: 0]
  ------------------
  491|    416|        assert(!state->readying);
  ------------------
  |  Branch (491:9): [True: 416, False: 0]
  ------------------
  492|    416|        state->readying = 1;
  493|    416|        return;
  494|    416|    }
  495|  1.31k|    assert((type->tp_flags & Py_TPFLAGS_READYING) == 0);
  ------------------
  |  Branch (495:5): [True: 902, False: 0]
  ------------------
  496|    902|    type_add_flags(type, Py_TPFLAGS_READYING);
  ------------------
  |  |  521|    902|#define Py_TPFLAGS_READYING (1UL << 13)
  ------------------
  497|    902|}
typeobject.c:type_ready_pre_checks:
 8916|  1.31k|{
 8917|       |    /* Consistency checks for PEP 590:
 8918|       |     * - Py_TPFLAGS_METHOD_DESCRIPTOR requires tp_descr_get
 8919|       |     * - Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and
 8920|       |     *   tp_vectorcall_offset > 0
 8921|       |     * To avoid mistakes, we require this before inheriting.
 8922|       |     */
 8923|  1.31k|    if (type->tp_flags & Py_TPFLAGS_METHOD_DESCRIPTOR) {
  ------------------
  |  |  534|  1.31k|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (8923:9): [True: 7, False: 1.31k]
  ------------------
 8924|      7|        _PyObject_ASSERT((PyObject *)type, type->tp_descr_get != NULL);
  ------------------
  |  |  425|      7|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      7|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      7|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 7, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      7|      ? (void)(0) \
  |  |  |  |  |  |  418|      7|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8925|      7|    }
 8926|  1.31k|    if (type->tp_flags & Py_TPFLAGS_HAVE_VECTORCALL) {
  ------------------
  |  |  510|  1.31k|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (8926:9): [True: 20, False: 1.29k]
  ------------------
 8927|     20|        _PyObject_ASSERT((PyObject *)type, type->tp_vectorcall_offset > 0);
  ------------------
  |  |  425|     20|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|     20|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|     20|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 20, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|     20|      ? (void)(0) \
  |  |  |  |  |  |  418|     20|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8928|     20|        _PyObject_ASSERT((PyObject *)type, type->tp_call != NULL);
  ------------------
  |  |  425|     20|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|     20|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|     20|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 20, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|     20|      ? (void)(0) \
  |  |  |  |  |  |  418|     20|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8929|     20|    }
 8930|       |
 8931|       |    /* Consistency checks for pattern matching
 8932|       |     * Py_TPFLAGS_SEQUENCE and Py_TPFLAGS_MAPPING are mutually exclusive */
 8933|  1.31k|    _PyObject_ASSERT((PyObject *)type, (type->tp_flags & COLLECTION_FLAGS) != COLLECTION_FLAGS);
  ------------------
  |  |  425|  1.31k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  1.31k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  1.31k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 1.31k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  1.31k|      ? (void)(0) \
  |  |  |  |  |  |  418|  1.31k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8934|       |
 8935|  1.31k|    if (type->tp_name == NULL) {
  ------------------
  |  Branch (8935:9): [True: 0, False: 1.31k]
  ------------------
 8936|      0|        PyErr_Format(PyExc_SystemError,
 8937|      0|                     "Type does not define the tp_name field.");
 8938|      0|        return -1;
 8939|      0|    }
 8940|  1.31k|    return 0;
 8941|  1.31k|}
typeobject.c:type_ready_set_dict:
 9022|  1.31k|{
 9023|  1.31k|    if (lookup_tp_dict(type) != NULL) {
  ------------------
  |  Branch (9023:9): [True: 771, False: 547]
  ------------------
 9024|    771|        return 0;
 9025|    771|    }
 9026|       |
 9027|    547|    PyObject *dict = PyDict_New();
 9028|    547|    if (dict == NULL) {
  ------------------
  |  Branch (9028:9): [True: 0, False: 547]
  ------------------
 9029|      0|        return -1;
 9030|      0|    }
 9031|    547|    set_tp_dict(type, dict);
 9032|    547|    return 0;
 9033|    547|}
typeobject.c:type_ready_set_base:
 8946|  1.31k|{
 8947|       |    /* Initialize tp_base (defaults to BaseObject unless that's us) */
 8948|  1.31k|    PyTypeObject *base = type->tp_base;
 8949|  1.31k|    if (base == NULL && type != &PyBaseObject_Type) {
  ------------------
  |  Branch (8949:9): [True: 244, False: 1.07k]
  |  Branch (8949:25): [True: 242, False: 2]
  ------------------
 8950|    242|        base = &PyBaseObject_Type;
 8951|    242|        if (type->tp_flags & Py_TPFLAGS_HEAPTYPE) {
  ------------------
  |  |  503|    242|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (8951:13): [True: 0, False: 242]
  ------------------
 8952|      0|            type->tp_base = (PyTypeObject*)Py_NewRef((PyObject*)base);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8953|      0|        }
 8954|    242|        else {
 8955|    242|            type->tp_base = base;
 8956|    242|        }
 8957|    242|    }
 8958|  1.31k|    assert(type->tp_base != NULL || type == &PyBaseObject_Type);
  ------------------
  |  Branch (8958:5): [True: 1.31k, False: 2]
  |  Branch (8958:5): [True: 2, False: 0]
  ------------------
 8959|       |
 8960|       |    /* Now the only way base can still be NULL is if type is
 8961|       |     * &PyBaseObject_Type. */
 8962|       |
 8963|       |    /* Initialize the base class */
 8964|  1.31k|    if (base != NULL && !_PyType_IsReady(base)) {
  ------------------
  |  Branch (8964:9): [True: 1.31k, False: 2]
  |  Branch (8964:25): [True: 0, False: 1.31k]
  ------------------
 8965|      0|        if (PyType_Ready(base) < 0) {
  ------------------
  |  Branch (8965:13): [True: 0, False: 0]
  ------------------
 8966|      0|            return -1;
 8967|      0|        }
 8968|      0|    }
 8969|       |
 8970|  1.31k|    return 0;
 8971|  1.31k|}
typeobject.c:type_ready_set_type:
 8975|  1.31k|{
 8976|       |    /* Initialize ob_type if NULL.      This means extensions that want to be
 8977|       |       compilable separately on Windows can call PyType_Ready() instead of
 8978|       |       initializing the ob_type field of their type objects. */
 8979|       |    /* The test for base != NULL is really unnecessary, since base is only
 8980|       |       NULL when type is &PyBaseObject_Type, and we know its ob_type is
 8981|       |       not NULL (it's initialized to &PyType_Type).      But coverity doesn't
 8982|       |       know that. */
 8983|  1.31k|    PyTypeObject *base = type->tp_base;
 8984|  1.31k|    if (Py_IS_TYPE(type, NULL) && base != NULL) {
  ------------------
  |  |  215|  2.63k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 170, False: 1.14k]
  |  |  ------------------
  ------------------
  |  Branch (8984:35): [True: 170, False: 0]
  ------------------
 8985|    170|        Py_SET_TYPE(type, Py_TYPE(base));
  ------------------
  |  |  217|    170|#  define Py_SET_TYPE(ob, type) Py_SET_TYPE(_PyObject_CAST(ob), type)
  |  |  ------------------
  |  |  |  |  171|    170|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    170|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8986|    170|    }
 8987|       |
 8988|  1.31k|    return 0;
 8989|  1.31k|}
typeobject.c:type_ready_set_bases:
 8993|  1.31k|{
 8994|  1.31k|    if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (8994:9): [True: 416, False: 902]
  ------------------
 8995|    416|        if (!initial) {
  ------------------
  |  Branch (8995:13): [True: 0, False: 416]
  ------------------
 8996|      0|            assert(lookup_tp_bases(type) != NULL);
  ------------------
  |  Branch (8996:13): [True: 0, False: 0]
  ------------------
 8997|      0|            return 0;
 8998|      0|        }
 8999|    416|        assert(lookup_tp_bases(type) == NULL);
  ------------------
  |  Branch (8999:9): [True: 416, False: 0]
  ------------------
 9000|    416|    }
 9001|       |
 9002|  1.31k|    PyObject *bases = lookup_tp_bases(type);
 9003|  1.31k|    if (bases == NULL) {
  ------------------
  |  Branch (9003:9): [True: 416, False: 902]
  ------------------
 9004|    416|        PyTypeObject *base = type->tp_base;
 9005|    416|        if (base == NULL) {
  ------------------
  |  Branch (9005:13): [True: 2, False: 414]
  ------------------
 9006|      2|            bases = PyTuple_New(0);
 9007|      2|        }
 9008|    414|        else {
 9009|    414|            bases = PyTuple_Pack(1, base);
 9010|    414|        }
 9011|    416|        if (bases == NULL) {
  ------------------
  |  Branch (9011:13): [True: 0, False: 416]
  ------------------
 9012|      0|            return -1;
 9013|      0|        }
 9014|    416|        set_tp_bases(type, bases, 1);
 9015|    416|    }
 9016|  1.31k|    return 0;
 9017|  1.31k|}
typeobject.c:type_ready_mro:
 9139|  1.31k|{
 9140|  1.31k|    ASSERT_TYPE_LOCK_HELD();
 9141|       |
 9142|  1.31k|    if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (9142:9): [True: 416, False: 902]
  ------------------
 9143|    416|        if (!initial) {
  ------------------
  |  Branch (9143:13): [True: 0, False: 416]
  ------------------
 9144|      0|            assert(lookup_tp_mro(type) != NULL);
  ------------------
  |  Branch (9144:13): [True: 0, False: 0]
  ------------------
 9145|      0|            return 0;
 9146|      0|        }
 9147|    416|        assert(lookup_tp_mro(type) == NULL);
  ------------------
  |  Branch (9147:9): [True: 416, False: 0]
  ------------------
 9148|    416|    }
 9149|       |
 9150|       |    /* Calculate method resolution order */
 9151|  1.31k|    if (mro_internal(type, initial, NULL) < 0) {
  ------------------
  |  Branch (9151:9): [True: 0, False: 1.31k]
  ------------------
 9152|      0|        return -1;
 9153|      0|    }
 9154|  1.31k|    PyObject *mro = lookup_tp_mro(type);
 9155|  1.31k|    assert(mro != NULL);
  ------------------
  |  Branch (9155:5): [True: 1.31k, False: 0]
  ------------------
 9156|  1.31k|    assert(PyTuple_Check(mro));
  ------------------
  |  Branch (9156:5): [True: 1.31k, False: 0]
  ------------------
 9157|       |
 9158|       |    /* All bases of statically allocated type should be statically allocated,
 9159|       |       and static builtin types must have static builtin bases. */
 9160|  1.31k|    if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|  1.31k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (9160:9): [True: 416, False: 902]
  ------------------
 9161|    416|        assert(type->tp_flags & Py_TPFLAGS_IMMUTABLETYPE);
  ------------------
  |  Branch (9161:9): [True: 416, False: 0]
  ------------------
 9162|    416|        Py_ssize_t n = PyTuple_GET_SIZE(mro);
  ------------------
  |  |   27|    416|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    416|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    416|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9163|  1.65k|        for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (9163:32): [True: 1.23k, False: 416]
  ------------------
 9164|  2.47k|            PyTypeObject *base = _PyType_CAST(PyTuple_GET_ITEM(mro, i));
  ------------------
  |  |  770|  1.23k|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  2.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:38): [True: 1.23k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9164:34): [True: 1.23k, False: 0]
  |  Branch (9164:34): [True: 1.23k, False: 0]
  ------------------
 9165|  1.23k|            if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) {
  ------------------
  |  |  503|  1.23k|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (9165:17): [True: 0, False: 1.23k]
  ------------------
 9166|      0|                PyErr_Format(PyExc_TypeError,
 9167|      0|                             "type '%.100s' is not dynamically allocated but "
 9168|      0|                             "its base type '%.100s' is dynamically allocated",
 9169|      0|                             type->tp_name, base->tp_name);
 9170|      0|                return -1;
 9171|      0|            }
 9172|  2.47k|            assert(!(type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) ||
  ------------------
  |  Branch (9172:13): [True: 0, False: 1.23k]
  |  Branch (9172:13): [True: 1.23k, False: 0]
  ------------------
 9173|  1.23k|                   (base->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN));
 9174|  1.23k|        }
 9175|    416|    }
 9176|  1.31k|    return 0;
 9177|  1.31k|}
typeobject.c:type_ready_set_new:
 9308|  1.31k|{
 9309|  1.31k|    PyTypeObject *base = type->tp_base;
 9310|       |    /* The condition below could use some explanation.
 9311|       |
 9312|       |       It appears that tp_new is not inherited for static types whose base
 9313|       |       class is 'object'; this seems to be a precaution so that old extension
 9314|       |       types don't suddenly become callable (object.__new__ wouldn't insure the
 9315|       |       invariants that the extension type's own factory function ensures).
 9316|       |
 9317|       |       Heap types, of course, are under our control, so they do inherit tp_new;
 9318|       |       static extension types that specify some other built-in type as the
 9319|       |       default also inherit object.__new__. */
 9320|  1.31k|    if (type->tp_new == NULL
  ------------------
  |  Branch (9320:9): [True: 1.01k, False: 300]
  ------------------
 9321|  1.01k|        && base == &PyBaseObject_Type
  ------------------
  |  Branch (9321:12): [True: 277, False: 741]
  ------------------
 9322|    277|        && !(type->tp_flags & Py_TPFLAGS_HEAPTYPE))
  ------------------
  |  |  503|    277|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (9322:12): [True: 130, False: 147]
  ------------------
 9323|    130|    {
 9324|    130|        if (initial) {
  ------------------
  |  Branch (9324:13): [True: 130, False: 0]
  ------------------
 9325|    130|            type_add_flags(type, Py_TPFLAGS_DISALLOW_INSTANTIATION);
  ------------------
  |  |  497|    130|#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
  ------------------
 9326|    130|        } else {
 9327|      0|            assert(type->tp_flags & Py_TPFLAGS_DISALLOW_INSTANTIATION);
  ------------------
  |  Branch (9327:13): [True: 0, False: 0]
  ------------------
 9328|      0|        }
 9329|    130|    }
 9330|       |
 9331|  1.31k|    if (!(type->tp_flags & Py_TPFLAGS_DISALLOW_INSTANTIATION)) {
  ------------------
  |  |  497|  1.31k|#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
  ------------------
  |  Branch (9331:9): [True: 1.16k, False: 158]
  ------------------
 9332|  1.16k|        if (type->tp_new != NULL) {
  ------------------
  |  Branch (9332:13): [True: 296, False: 864]
  ------------------
 9333|    296|            if (initial || base == NULL || type->tp_new != base->tp_new) {
  ------------------
  |  Branch (9333:17): [True: 296, False: 0]
  |  Branch (9333:28): [True: 0, False: 0]
  |  Branch (9333:44): [True: 0, False: 0]
  ------------------
 9334|       |                // If "__new__" key does not exists in the type dictionary,
 9335|       |                // set it to tp_new_wrapper().
 9336|    296|                if (add_tp_new_wrapper(type) < 0) {
  ------------------
  |  Branch (9336:21): [True: 0, False: 296]
  ------------------
 9337|      0|                    return -1;
 9338|      0|                }
 9339|    296|            }
 9340|    296|        }
 9341|    864|        else {
 9342|    864|            if (initial) {
  ------------------
  |  Branch (9342:17): [True: 864, False: 0]
  ------------------
 9343|       |                // tp_new is NULL: inherit tp_new from base
 9344|    864|                type->tp_new = base->tp_new;
 9345|    864|            }
 9346|    864|        }
 9347|  1.16k|    }
 9348|    158|    else {
 9349|       |        // Py_TPFLAGS_DISALLOW_INSTANTIATION sets tp_new to NULL
 9350|    158|        if (initial) {
  ------------------
  |  Branch (9350:13): [True: 158, False: 0]
  ------------------
 9351|    158|            type->tp_new = NULL;
 9352|    158|        }
 9353|    158|    }
 9354|  1.31k|    return 0;
 9355|  1.31k|}
typeobject.c:add_tp_new_wrapper:
10439|    296|{
10440|    296|    PyObject *dict = lookup_tp_dict(type);
10441|    296|    int r = PyDict_Contains(dict, &_Py_ID(__new__));
  ------------------
  |  |  936|    296|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    296|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    296|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10442|    296|    if (r > 0) {
  ------------------
  |  Branch (10442:9): [True: 0, False: 296]
  ------------------
10443|      0|        return 0;
10444|      0|    }
10445|    296|    if (r < 0) {
  ------------------
  |  Branch (10445:9): [True: 0, False: 296]
  ------------------
10446|      0|        return -1;
10447|      0|    }
10448|       |
10449|    296|    PyObject *func = PyCFunction_NewEx(tp_new_methoddef, (PyObject *)type, NULL);
  ------------------
  |  |   87|    296|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
10450|    296|    if (func == NULL) {
  ------------------
  |  Branch (10450:9): [True: 0, False: 296]
  ------------------
10451|      0|        return -1;
10452|      0|    }
10453|    296|    _PyObject_SetDeferredRefcount(func);
10454|    296|    r = PyDict_SetItem(dict, &_Py_ID(__new__), func);
  ------------------
  |  |  936|    296|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    296|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    296|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10455|    296|    Py_DECREF(func);
  ------------------
  |  |  430|    296|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    296|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    296|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10456|    296|    return r;
10457|    296|}
typeobject.c:type_ready_fill_dict:
 9075|  1.31k|{
 9076|       |    /* Add type-specific descriptors to tp_dict */
 9077|  1.31k|    if (add_operators(type) < 0) {
  ------------------
  |  Branch (9077:9): [True: 0, False: 1.31k]
  ------------------
 9078|      0|        return -1;
 9079|      0|    }
 9080|  1.31k|    if (type_add_methods(type) < 0) {
  ------------------
  |  Branch (9080:9): [True: 0, False: 1.31k]
  ------------------
 9081|      0|        return -1;
 9082|      0|    }
 9083|  1.31k|    if (type_add_members(type) < 0) {
  ------------------
  |  Branch (9083:9): [True: 0, False: 1.31k]
  ------------------
 9084|      0|        return -1;
 9085|      0|    }
 9086|  1.31k|    if (type_add_getset(type) < 0) {
  ------------------
  |  Branch (9086:9): [True: 0, False: 1.31k]
  ------------------
 9087|      0|        return -1;
 9088|      0|    }
 9089|  1.31k|    if (type_dict_set_doc(type) < 0) {
  ------------------
  |  Branch (9089:9): [True: 0, False: 1.31k]
  ------------------
 9090|      0|        return -1;
 9091|      0|    }
 9092|  1.31k|    return 0;
 9093|  1.31k|}
typeobject.c:add_operators:
12402|  1.31k|{
12403|  1.31k|    PyObject *dict = lookup_tp_dict(type);
12404|  1.31k|    pytype_slotdef *p;
12405|  1.31k|    PyObject *descr;
12406|  1.31k|    void **ptr;
12407|       |
12408|   125k|    for (p = slotdefs; p->name; p++) {
  ------------------
  |  Branch (12408:24): [True: 123k, False: 1.31k]
  ------------------
12409|   123k|        if (p->wrapper == NULL)
  ------------------
  |  Branch (12409:13): [True: 7.90k, False: 115k]
  ------------------
12410|  7.90k|            continue;
12411|   115k|        ptr = slotptr(type, p->offset);
12412|   115k|        if (!ptr || !*ptr)
  ------------------
  |  Branch (12412:13): [True: 24.7k, False: 91.1k]
  |  Branch (12412:21): [True: 88.6k, False: 2.58k]
  ------------------
12413|   113k|            continue;
12414|       |        /* Also ignore when the type slot has been inherited. */
12415|  2.58k|        if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN
  ------------------
  |  |  467|  5.16k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (12415:13): [True: 2.28k, False: 298]
  ------------------
12416|  2.28k|            && type->tp_base != NULL
  ------------------
  |  Branch (12416:16): [True: 2.26k, False: 26]
  ------------------
12417|  2.26k|            && slot_inherited(type, p, ptr))
  ------------------
  |  Branch (12417:16): [True: 322, False: 1.93k]
  ------------------
12418|    322|        {
12419|    322|            continue;
12420|    322|        }
12421|  2.26k|        int r = PyDict_Contains(dict, p->name_strobj);
12422|  2.26k|        if (r > 0)
  ------------------
  |  Branch (12422:13): [True: 40, False: 2.22k]
  ------------------
12423|     40|            continue;
12424|  2.22k|        if (r < 0) {
  ------------------
  |  Branch (12424:13): [True: 0, False: 2.22k]
  ------------------
12425|      0|            return -1;
12426|      0|        }
12427|  2.22k|        if (*ptr == (void *)PyObject_HashNotImplemented) {
  ------------------
  |  Branch (12427:13): [True: 19, False: 2.20k]
  ------------------
12428|       |            /* Classes may prevent the inheritance of the tp_hash
12429|       |               slot by storing PyObject_HashNotImplemented in it. Make it
12430|       |               visible as a None value for the __hash__ attribute. */
12431|     19|            if (PyDict_SetItem(dict, p->name_strobj, Py_None) < 0)
  ------------------
  |  |  616|     19|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (12431:17): [True: 0, False: 19]
  ------------------
12432|      0|                return -1;
12433|     19|        }
12434|  2.20k|        else {
12435|  2.20k|            descr = PyDescr_NewWrapper(type, p, *ptr);
12436|  2.20k|            if (descr == NULL)
  ------------------
  |  Branch (12436:17): [True: 0, False: 2.20k]
  ------------------
12437|      0|                return -1;
12438|  2.20k|            if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) {
  ------------------
  |  Branch (12438:17): [True: 0, False: 2.20k]
  ------------------
12439|      0|                Py_DECREF(descr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12440|      0|                return -1;
12441|      0|            }
12442|  2.20k|            Py_DECREF(descr);
  ------------------
  |  |  430|  2.20k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12443|  2.20k|        }
12444|  2.22k|    }
12445|  1.31k|    return 0;
12446|  1.31k|}
typeobject.c:slot_inherited:
12352|  2.26k|{
12353|  2.26k|    void **slot_base = slotptr(type->tp_base, slotdef->offset);
12354|  2.26k|    if (slot_base == NULL || *slot != *slot_base) {
  ------------------
  |  Branch (12354:9): [True: 770, False: 1.49k]
  |  Branch (12354:30): [True: 1.16k, False: 324]
  ------------------
12355|  1.93k|        return 0;
12356|  1.93k|    }
12357|       |
12358|       |    /* Some slots are inherited in pairs. */
12359|    324|    if (slot == (void *)&type->tp_hash) {
  ------------------
  |  Branch (12359:9): [True: 2, False: 322]
  ------------------
12360|      2|        return (type->tp_richcompare == type->tp_base->tp_richcompare);
12361|      2|    }
12362|    322|    else if (slot == (void *)&type->tp_richcompare) {
  ------------------
  |  Branch (12362:14): [True: 0, False: 322]
  ------------------
12363|      0|        return (type->tp_hash == type->tp_base->tp_hash);
12364|      0|    }
12365|       |
12366|       |    /* It must be inherited (see type_ready_inherit()). */
12367|    322|    return 1;
12368|    324|}
typeobject.c:type_add_methods:
 8569|  1.31k|{
 8570|  1.31k|    PyMethodDef *meth = type->tp_methods;
 8571|  1.31k|    if (meth == NULL) {
  ------------------
  |  Branch (8571:9): [True: 992, False: 326]
  ------------------
 8572|    992|        return 0;
 8573|    992|    }
 8574|       |
 8575|  2.11k|    for (; meth->ml_name != NULL; meth++) {
  ------------------
  |  Branch (8575:12): [True: 1.78k, False: 326]
  ------------------
 8576|  1.78k|        if (type_add_method(type, meth) < 0) {
  ------------------
  |  Branch (8576:13): [True: 0, False: 1.78k]
  ------------------
 8577|      0|            return -1;
 8578|      0|        }
 8579|  1.78k|    }
 8580|    326|    return 0;
 8581|    326|}
typeobject.c:type_add_members:
 8586|  1.31k|{
 8587|  1.31k|    PyMemberDef *memb = type->tp_members;
 8588|  1.31k|    if (memb == NULL) {
  ------------------
  |  Branch (8588:9): [True: 358, False: 960]
  ------------------
 8589|    358|        return 0;
 8590|    358|    }
 8591|       |
 8592|    960|    PyObject *dict = lookup_tp_dict(type);
 8593|  1.65k|    for (; memb->name != NULL; memb++) {
  ------------------
  |  Branch (8593:12): [True: 696, False: 960]
  ------------------
 8594|    696|        PyObject *descr = PyDescr_NewMember(type, memb);
 8595|    696|        if (descr == NULL)
  ------------------
  |  Branch (8595:13): [True: 0, False: 696]
  ------------------
 8596|      0|            return -1;
 8597|       |
 8598|    696|        if (PyDict_SetDefaultRef(dict, PyDescr_NAME(descr), descr, NULL) < 0) {
  ------------------
  |  |   36|    696|#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
  ------------------
  |  Branch (8598:13): [True: 0, False: 696]
  ------------------
 8599|      0|            Py_DECREF(descr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8600|      0|            return -1;
 8601|      0|        }
 8602|    696|        Py_DECREF(descr);
  ------------------
  |  |  430|    696|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    696|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    696|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8603|    696|    }
 8604|    960|    return 0;
 8605|    960|}
typeobject.c:type_add_getset:
 8610|  1.31k|{
 8611|  1.31k|    PyGetSetDef *gsp = type->tp_getset;
 8612|  1.31k|    if (gsp == NULL) {
  ------------------
  |  Branch (8612:9): [True: 1.18k, False: 132]
  ------------------
 8613|  1.18k|        return 0;
 8614|  1.18k|    }
 8615|       |
 8616|    132|    PyObject *dict = lookup_tp_dict(type);
 8617|    591|    for (; gsp->name != NULL; gsp++) {
  ------------------
  |  Branch (8617:12): [True: 459, False: 132]
  ------------------
 8618|    459|        PyObject *descr = PyDescr_NewGetSet(type, gsp);
 8619|    459|        if (descr == NULL) {
  ------------------
  |  Branch (8619:13): [True: 0, False: 459]
  ------------------
 8620|      0|            return -1;
 8621|      0|        }
 8622|       |
 8623|    459|        if (PyDict_SetDefaultRef(dict, PyDescr_NAME(descr), descr, NULL) < 0) {
  ------------------
  |  |   36|    459|#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
  ------------------
  |  Branch (8623:13): [True: 0, False: 459]
  ------------------
 8624|      0|            Py_DECREF(descr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8625|      0|            return -1;
 8626|      0|        }
 8627|    459|        Py_DECREF(descr);
  ------------------
  |  |  430|    459|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    459|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    459|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8628|    459|    }
 8629|    132|    return 0;
 8630|    132|}
typeobject.c:type_dict_set_doc:
 9040|  1.31k|{
 9041|  1.31k|    PyObject *dict = lookup_tp_dict(type);
 9042|  1.31k|    int r = PyDict_Contains(dict, &_Py_ID(__doc__));
  ------------------
  |  |  936|  1.31k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.31k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.31k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9043|  1.31k|    if (r < 0) {
  ------------------
  |  Branch (9043:9): [True: 0, False: 1.31k]
  ------------------
 9044|      0|        return -1;
 9045|      0|    }
 9046|  1.31k|    if (r > 0) {
  ------------------
  |  Branch (9046:9): [True: 308, False: 1.01k]
  ------------------
 9047|    308|        return 0;
 9048|    308|    }
 9049|       |
 9050|  1.01k|    if (type->tp_doc != NULL) {
  ------------------
  |  Branch (9050:9): [True: 367, False: 643]
  ------------------
 9051|    367|        const char *doc_str;
 9052|    367|        doc_str = _PyType_DocWithoutSignature(type->tp_name, type->tp_doc);
 9053|    367|        PyObject *doc = PyUnicode_FromString(doc_str);
 9054|    367|        if (doc == NULL) {
  ------------------
  |  Branch (9054:13): [True: 0, False: 367]
  ------------------
 9055|      0|            return -1;
 9056|      0|        }
 9057|       |
 9058|    367|        if (PyDict_SetItem(dict, &_Py_ID(__doc__), doc) < 0) {
  ------------------
  |  |  936|    367|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    367|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    367|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9058:13): [True: 0, False: 367]
  ------------------
 9059|      0|            Py_DECREF(doc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9060|      0|            return -1;
 9061|      0|        }
 9062|    367|        Py_DECREF(doc);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9063|    367|    }
 9064|    643|    else {
 9065|    643|        if (PyDict_SetItem(dict, &_Py_ID(__doc__), Py_None) < 0) {
  ------------------
  |  |  936|    643|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    643|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    643|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PyDict_SetItem(dict, &_Py_ID(__doc__), Py_None) < 0) {
  ------------------
  |  |  616|    643|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (9065:13): [True: 0, False: 643]
  ------------------
 9066|      0|            return -1;
 9067|      0|        }
 9068|    643|    }
 9069|  1.01k|    return 0;
 9070|  1.01k|}
typeobject.c:type_ready_inherit:
 9214|  1.31k|{
 9215|  1.31k|    ASSERT_TYPE_LOCK_HELD();
 9216|       |
 9217|       |    /* Inherit special flags from dominant base */
 9218|  1.31k|    PyTypeObject *base = type->tp_base;
 9219|  1.31k|    if (base != NULL) {
  ------------------
  |  Branch (9219:9): [True: 1.31k, False: 2]
  ------------------
 9220|  1.31k|        inherit_special(type, base);
 9221|  1.31k|    }
 9222|       |
 9223|       |    // Inherit slots
 9224|  1.31k|    PyObject *mro = lookup_tp_mro(type);
 9225|  1.31k|    assert(mro != NULL);
  ------------------
  |  Branch (9225:5): [True: 1.31k, False: 0]
  ------------------
 9226|  1.31k|    Py_ssize_t n = PyTuple_GET_SIZE(mro);
  ------------------
  |  |   27|  1.31k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9227|  4.49k|    for (Py_ssize_t i = 1; i < n; i++) {
  ------------------
  |  Branch (9227:28): [True: 3.17k, False: 1.31k]
  ------------------
 9228|  3.17k|        PyObject *b = PyTuple_GET_ITEM(mro, i);
  ------------------
  |  |   29|  3.17k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  3.17k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.17k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9228:23): [True: 3.17k, False: 0]
  ------------------
 9229|  3.17k|        if (PyType_Check(b)) {
  ------------------
  |  |  766|  3.17k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.17k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.17k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 3.17k, False: 0]
  |  |  ------------------
  ------------------
 9230|  3.17k|            if (inherit_slots(type, (PyTypeObject *)b) < 0) {
  ------------------
  |  Branch (9230:17): [True: 0, False: 3.17k]
  ------------------
 9231|      0|                return -1;
 9232|      0|            }
 9233|  3.17k|            inherit_patma_flags(type, (PyTypeObject *)b);
 9234|  3.17k|        }
 9235|  3.17k|    }
 9236|       |
 9237|  1.31k|    if (base != NULL) {
  ------------------
  |  Branch (9237:9): [True: 1.31k, False: 2]
  ------------------
 9238|  1.31k|        type_ready_inherit_as_structs(type, base);
 9239|  1.31k|    }
 9240|       |
 9241|       |    /* Sanity check for tp_free. */
 9242|  1.31k|    if (_PyType_IS_GC(type) && (type->tp_flags & Py_TPFLAGS_BASETYPE) &&
  ------------------
  |  |  820|  2.63k|#define _PyType_IS_GC(t) _PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
  |  |  ------------------
  |  |  |  |  524|  1.31k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  |  |  ------------------
  |  |  |  Branch (820:26): [True: 1.24k, False: 72]
  |  |  ------------------
  ------------------
                  if (_PyType_IS_GC(type) && (type->tp_flags & Py_TPFLAGS_BASETYPE) &&
  ------------------
  |  |  506|  1.24k|#define Py_TPFLAGS_BASETYPE (1UL << 10)
  ------------------
  |  Branch (9242:32): [True: 1.01k, False: 232]
  ------------------
 9243|  1.01k|        (type->tp_free == NULL || type->tp_free == PyObject_Free))
  ------------------
  |  Branch (9243:10): [True: 0, False: 1.01k]
  |  Branch (9243:35): [True: 0, False: 1.01k]
  ------------------
 9244|      0|    {
 9245|       |        /* This base class needs to call tp_free, but doesn't have
 9246|       |         * one, or its tp_free is for non-gc'ed objects.
 9247|       |         */
 9248|      0|        PyErr_Format(PyExc_TypeError, "type '%.100s' participates in "
 9249|      0|                     "gc and is a base type but has inappropriate "
 9250|      0|                     "tp_free slot",
 9251|      0|                     type->tp_name);
 9252|      0|        return -1;
 9253|      0|    }
 9254|       |
 9255|  1.31k|    return 0;
 9256|  1.31k|}
typeobject.c:inherit_special:
 8635|  1.31k|{
 8636|       |    /* Copying tp_traverse and tp_clear is connected to the GC flags */
 8637|  1.31k|    if (!(type->tp_flags & Py_TPFLAGS_HAVE_GC) &&
  ------------------
  |  |  524|  1.31k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (8637:9): [True: 84, False: 1.23k]
  ------------------
 8638|     84|        (base->tp_flags & Py_TPFLAGS_HAVE_GC) &&
  ------------------
  |  |  524|     84|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (8638:9): [True: 14, False: 70]
  ------------------
 8639|     14|        (!type->tp_traverse && !type->tp_clear)) {
  ------------------
  |  Branch (8639:10): [True: 14, False: 0]
  |  Branch (8639:32): [True: 14, False: 0]
  ------------------
 8640|     14|        type_add_flags(type, Py_TPFLAGS_HAVE_GC);
  ------------------
  |  |  524|     14|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
 8641|     14|        if (type->tp_traverse == NULL)
  ------------------
  |  Branch (8641:13): [True: 14, False: 0]
  ------------------
 8642|     14|            type->tp_traverse = base->tp_traverse;
 8643|     14|        if (type->tp_clear == NULL)
  ------------------
  |  Branch (8643:13): [True: 14, False: 0]
  ------------------
 8644|     14|            type->tp_clear = base->tp_clear;
 8645|     14|    }
 8646|  1.31k|    type_add_flags(type, base->tp_flags & Py_TPFLAGS_PREHEADER);
  ------------------
  |  |  487|  1.31k|#define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
  |  |  ------------------
  |  |  |  |  477|  1.31k|#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3)
  |  |  ------------------
  |  |               #define Py_TPFLAGS_PREHEADER (Py_TPFLAGS_MANAGED_WEAKREF | Py_TPFLAGS_MANAGED_DICT)
  |  |  ------------------
  |  |  |  |  482|  1.31k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  |  |  ------------------
  ------------------
 8647|       |
 8648|  1.31k|    if (type->tp_basicsize == 0)
  ------------------
  |  Branch (8648:9): [True: 18, False: 1.29k]
  ------------------
 8649|     18|        type->tp_basicsize = base->tp_basicsize;
 8650|       |
 8651|       |    /* Copy other non-function slots */
 8652|       |
 8653|  1.31k|#define COPYVAL(SLOT) \
 8654|  1.31k|    if (type->SLOT == 0) { type->SLOT = base->SLOT; }
 8655|       |
 8656|  1.31k|    COPYVAL(tp_itemsize);
  ------------------
  |  | 8654|  1.31k|    if (type->SLOT == 0) { type->SLOT = base->SLOT; }
  |  |  ------------------
  |  |  |  Branch (8654:9): [True: 1.23k, False: 80]
  |  |  ------------------
  ------------------
 8657|  1.31k|    COPYVAL(tp_weaklistoffset);
  ------------------
  |  | 8654|  1.31k|    if (type->SLOT == 0) { type->SLOT = base->SLOT; }
  |  |  ------------------
  |  |  |  Branch (8654:9): [True: 1.05k, False: 261]
  |  |  ------------------
  ------------------
 8658|  1.31k|    COPYVAL(tp_dictoffset);
  ------------------
  |  | 8654|  1.31k|    if (type->SLOT == 0) { type->SLOT = base->SLOT; }
  |  |  ------------------
  |  |  |  Branch (8654:9): [True: 986, False: 330]
  |  |  ------------------
  ------------------
 8659|       |
 8660|  1.31k|#undef COPYVAL
 8661|       |
 8662|       |    /* Setup fast subclass flags */
 8663|  1.31k|    PyObject *mro = lookup_tp_mro(base);
 8664|  1.31k|    unsigned long flags = 0;
 8665|  1.31k|    if (is_subtype_with_mro(mro, base, (PyTypeObject*)PyExc_BaseException)) {
  ------------------
  |  Branch (8665:9): [True: 173, False: 1.14k]
  ------------------
 8666|    173|        flags |= Py_TPFLAGS_BASE_EXC_SUBCLASS;
  ------------------
  |  |  557|    173|#define Py_TPFLAGS_BASE_EXC_SUBCLASS    (1UL << 30)
  ------------------
 8667|    173|    }
 8668|  1.14k|    else if (is_subtype_with_mro(mro, base, &PyType_Type)) {
  ------------------
  |  Branch (8668:14): [True: 5, False: 1.13k]
  ------------------
 8669|      5|        flags |= Py_TPFLAGS_TYPE_SUBCLASS;
  ------------------
  |  |  558|      5|#define Py_TPFLAGS_TYPE_SUBCLASS        (1UL << 31)
  ------------------
 8670|      5|    }
 8671|  1.13k|    else if (is_subtype_with_mro(mro, base, &PyLong_Type)) {
  ------------------
  |  Branch (8671:14): [True: 7, False: 1.13k]
  ------------------
 8672|      7|        flags |= Py_TPFLAGS_LONG_SUBCLASS;
  ------------------
  |  |  551|      7|#define Py_TPFLAGS_LONG_SUBCLASS        (1UL << 24)
  ------------------
 8673|      7|    }
 8674|  1.13k|    else if (is_subtype_with_mro(mro, base, &PyBytes_Type)) {
  ------------------
  |  Branch (8674:14): [True: 0, False: 1.13k]
  ------------------
 8675|      0|        flags |= Py_TPFLAGS_BYTES_SUBCLASS;
  ------------------
  |  |  554|      0|#define Py_TPFLAGS_BYTES_SUBCLASS       (1UL << 27)
  ------------------
 8676|      0|    }
 8677|  1.13k|    else if (is_subtype_with_mro(mro, base, &PyUnicode_Type)) {
  ------------------
  |  Branch (8677:14): [True: 3, False: 1.12k]
  ------------------
 8678|      3|        flags |= Py_TPFLAGS_UNICODE_SUBCLASS;
  ------------------
  |  |  555|      3|#define Py_TPFLAGS_UNICODE_SUBCLASS     (1UL << 28)
  ------------------
 8679|      3|    }
 8680|  1.12k|    else if (is_subtype_with_mro(mro, base, &PyTuple_Type)) {
  ------------------
  |  Branch (8680:14): [True: 41, False: 1.08k]
  ------------------
 8681|     41|        flags |= Py_TPFLAGS_TUPLE_SUBCLASS;
  ------------------
  |  |  553|     41|#define Py_TPFLAGS_TUPLE_SUBCLASS       (1UL << 26)
  ------------------
 8682|     41|    }
 8683|  1.08k|    else if (is_subtype_with_mro(mro, base, &PyList_Type)) {
  ------------------
  |  Branch (8683:14): [True: 2, False: 1.08k]
  ------------------
 8684|      2|        flags |= Py_TPFLAGS_LIST_SUBCLASS;
  ------------------
  |  |  552|      2|#define Py_TPFLAGS_LIST_SUBCLASS        (1UL << 25)
  ------------------
 8685|      2|    }
 8686|  1.08k|    else if (is_subtype_with_mro(mro, base, &PyDict_Type)) {
  ------------------
  |  Branch (8686:14): [True: 6, False: 1.07k]
  ------------------
 8687|      6|        flags |= Py_TPFLAGS_DICT_SUBCLASS;
  ------------------
  |  |  556|      6|#define Py_TPFLAGS_DICT_SUBCLASS        (1UL << 29)
  ------------------
 8688|      6|    }
 8689|       |
 8690|       |    /* Setup some inheritable flags */
 8691|  1.31k|    if (PyType_HasFeature(base, _Py_TPFLAGS_MATCH_SELF)) {
  ------------------
  |  |  545|  1.31k|#define _Py_TPFLAGS_MATCH_SELF (1UL << 22)
  ------------------
  |  Branch (8691:9): [True: 59, False: 1.25k]
  ------------------
 8692|     59|        flags |= _Py_TPFLAGS_MATCH_SELF;
  ------------------
  |  |  545|     59|#define _Py_TPFLAGS_MATCH_SELF (1UL << 22)
  ------------------
 8693|     59|    }
 8694|  1.31k|    if (PyType_HasFeature(base, Py_TPFLAGS_ITEMS_AT_END)) {
  ------------------
  |  |  548|  1.31k|#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23)
  ------------------
  |  Branch (8694:9): [True: 5, False: 1.31k]
  ------------------
 8695|      5|        flags |= Py_TPFLAGS_ITEMS_AT_END;
  ------------------
  |  |  548|      5|#define Py_TPFLAGS_ITEMS_AT_END (1UL << 23)
  ------------------
 8696|      5|    }
 8697|  1.31k|    type_add_flags(type, flags);
 8698|  1.31k|}
typeobject.c:inherit_slots:
 8715|  3.17k|{
 8716|  3.17k|    PyTypeObject *basebase;
 8717|       |
 8718|  3.17k|#undef SLOTDEFINED
 8719|  3.17k|#undef COPYSLOT
 8720|  3.17k|#undef COPYNUM
 8721|  3.17k|#undef COPYSEQ
 8722|  3.17k|#undef COPYMAP
 8723|  3.17k|#undef COPYBUF
 8724|       |
 8725|  3.17k|#define SLOTDEFINED(SLOT) \
 8726|  3.17k|    (base->SLOT != 0 && \
 8727|  3.17k|     (basebase == NULL || base->SLOT != basebase->SLOT))
 8728|       |
 8729|  3.17k|#define COPYSLOT(SLOT) \
 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
 8731|       |
 8732|  3.17k|#define COPYASYNC(SLOT) COPYSLOT(tp_as_async->SLOT)
 8733|  3.17k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
 8734|  3.17k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
 8735|  3.17k|#define COPYMAP(SLOT) COPYSLOT(tp_as_mapping->SLOT)
 8736|  3.17k|#define COPYBUF(SLOT) COPYSLOT(tp_as_buffer->SLOT)
 8737|       |
 8738|       |    /* This won't inherit indirect slots (from tp_as_number etc.)
 8739|       |       if type doesn't provide the space. */
 8740|       |
 8741|  3.17k|    if (type->tp_as_number != NULL && base->tp_as_number != NULL) {
  ------------------
  |  Branch (8741:9): [True: 2.41k, False: 758]
  |  Branch (8741:39): [True: 1.32k, False: 1.09k]
  ------------------
 8742|  1.32k|        basebase = base->tp_base;
 8743|  1.32k|        if (basebase->tp_as_number == NULL)
  ------------------
  |  Branch (8743:13): [True: 772, False: 549]
  ------------------
 8744|    772|            basebase = NULL;
 8745|  1.32k|        COPYNUM(nb_add);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 13]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8746|  1.32k|        COPYNUM(nb_subtract);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.27k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 22, False: 1.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.27k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 15]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 11, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.27k, False: 49]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8747|  1.32k|        COPYNUM(nb_multiply);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8748|  1.32k|        COPYNUM(nb_remainder);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 16, False: 1.28k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 10, False: 6]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 2, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 18]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8749|  1.32k|        COPYNUM(nb_divmod);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 11, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 4]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 2, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8750|  1.32k|        COPYNUM(nb_power);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8751|  1.32k|        COPYNUM(nb_negative);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8752|  1.32k|        COPYNUM(nb_positive);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8753|  1.32k|        COPYNUM(nb_absolute);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8754|  1.32k|        COPYNUM(nb_bool);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8755|  1.32k|        COPYNUM(nb_invert);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 5, False: 1.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 4, False: 1]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8756|  1.32k|        COPYNUM(nb_lshift);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 8, False: 1.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 1]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8757|  1.32k|        COPYNUM(nb_rshift);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 8, False: 1.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 1]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8758|  1.32k|        COPYNUM(nb_and);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.27k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 13, False: 1.26k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.27k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 4, False: 9]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 9, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.27k, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8759|  1.32k|        COPYNUM(nb_xor);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.27k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 13, False: 1.26k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.27k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 4, False: 9]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 9, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.27k, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8760|  1.32k|        COPYNUM(nb_or);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.27k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 25, False: 1.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.27k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 14, False: 11]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 9, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.27k, False: 50]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8761|  1.32k|        COPYNUM(nb_int);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 8, False: 1.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 1]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8762|  1.32k|        COPYNUM(nb_float);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 11, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 4]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 2, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8763|  1.32k|        COPYNUM(nb_inplace_add);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 1, False: 1.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 1]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8764|  1.32k|        COPYNUM(nb_inplace_subtract);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8765|  1.32k|        COPYNUM(nb_inplace_multiply);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8766|  1.32k|        COPYNUM(nb_inplace_remainder);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8767|  1.32k|        COPYNUM(nb_inplace_power);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8768|  1.32k|        COPYNUM(nb_inplace_lshift);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8769|  1.32k|        COPYNUM(nb_inplace_rshift);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8770|  1.32k|        COPYNUM(nb_inplace_and);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8771|  1.32k|        COPYNUM(nb_inplace_xor);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8772|  1.32k|        COPYNUM(nb_inplace_or);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 4, False: 1.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 4, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8773|  1.32k|        COPYNUM(nb_true_divide);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 14, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 7]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 3, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8774|  1.32k|        COPYNUM(nb_floor_divide);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 11, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 4]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 2, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8775|  1.32k|        COPYNUM(nb_inplace_true_divide);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8776|  1.32k|        COPYNUM(nb_inplace_floor_divide);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8777|  1.32k|        COPYNUM(nb_index);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.31k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 8, False: 1.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.31k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 7, False: 1]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.31k, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8778|  1.32k|        COPYNUM(nb_matrix_multiply);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8779|  1.32k|        COPYNUM(nb_inplace_matrix_multiply);
  ------------------
  |  | 8733|  1.32k|#define COPYNUM(SLOT) COPYSLOT(tp_as_number->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.32k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8780|  1.32k|    }
 8781|       |
 8782|  3.17k|    if (type->tp_as_async != NULL && base->tp_as_async != NULL) {
  ------------------
  |  Branch (8782:9): [True: 2.36k, False: 808]
  |  Branch (8782:38): [True: 1.29k, False: 1.07k]
  ------------------
 8783|  1.29k|        basebase = base->tp_base;
 8784|  1.29k|        if (basebase->tp_as_async == NULL)
  ------------------
  |  Branch (8784:13): [True: 752, False: 544]
  ------------------
 8785|    752|            basebase = NULL;
 8786|  1.29k|        COPYASYNC(am_await);
  ------------------
  |  | 8732|  1.29k|#define COPYASYNC(SLOT) COPYSLOT(tp_as_async->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.29k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.29k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 2, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.29k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 2, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8787|  1.29k|        COPYASYNC(am_aiter);
  ------------------
  |  | 8732|  1.29k|#define COPYASYNC(SLOT) COPYSLOT(tp_as_async->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.29k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.29k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 6, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.29k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 4, False: 2]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8788|  1.29k|        COPYASYNC(am_anext);
  ------------------
  |  | 8732|  1.29k|#define COPYASYNC(SLOT) COPYSLOT(tp_as_async->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.29k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.29k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 2, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.29k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.29k, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8789|  1.29k|    }
 8790|       |
 8791|  3.17k|    if (type->tp_as_sequence != NULL && base->tp_as_sequence != NULL) {
  ------------------
  |  Branch (8791:9): [True: 2.39k, False: 780]
  |  Branch (8791:41): [True: 1.33k, False: 1.06k]
  ------------------
 8792|  1.33k|        basebase = base->tp_base;
 8793|  1.33k|        if (basebase->tp_as_sequence == NULL)
  ------------------
  |  Branch (8793:13): [True: 783, False: 547]
  ------------------
 8794|    783|            basebase = NULL;
 8795|  1.33k|        COPYSEQ(sq_length);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.24k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 122, False: 1.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.24k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 58, False: 64]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 7, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.24k, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8796|  1.33k|        COPYSEQ(sq_concat);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 33, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 30, False: 3]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8797|  1.33k|        COPYSEQ(sq_repeat);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.32k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 33, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.32k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 30, False: 3]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.32k, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8798|  1.33k|        COPYSEQ(sq_item);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.26k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 47, False: 1.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.26k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 27, False: 20]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 15, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.26k, False: 63]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8799|  1.33k|        COPYSEQ(sq_ass_item);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 7, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 2, False: 5]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 5, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 26]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8800|  1.33k|        COPYSEQ(sq_contains);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.21k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 87, False: 1.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.21k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 37, False: 50]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 30, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.21k, False: 117]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8801|  1.33k|        COPYSEQ(sq_inplace_concat);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.33k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 2, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.33k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 2, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.33k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8802|  1.33k|        COPYSEQ(sq_inplace_repeat);
  ------------------
  |  | 8734|  1.33k|#define COPYSEQ(SLOT) COPYSLOT(tp_as_sequence->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.33k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 2, False: 1.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.33k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 2, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.33k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8803|  1.33k|    }
 8804|       |
 8805|  3.17k|    if (type->tp_as_mapping != NULL && base->tp_as_mapping != NULL) {
  ------------------
  |  Branch (8805:9): [True: 2.39k, False: 776]
  |  Branch (8805:40): [True: 1.33k, False: 1.06k]
  ------------------
 8806|  1.33k|        basebase = base->tp_base;
 8807|  1.33k|        if (basebase->tp_as_mapping == NULL)
  ------------------
  |  Branch (8807:13): [True: 787, False: 547]
  ------------------
 8808|    787|            basebase = NULL;
 8809|  1.33k|        COPYMAP(mp_length);
  ------------------
  |  | 8735|  1.33k|#define COPYMAP(SLOT) COPYSLOT(tp_as_mapping->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.24k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 128, False: 1.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.24k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 64, False: 64]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 7, False: 57]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.24k, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8810|  1.33k|        COPYMAP(mp_subscript);
  ------------------
  |  | 8735|  1.33k|#define COPYMAP(SLOT) COPYSLOT(tp_as_mapping->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.27k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 58, False: 1.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.27k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 38, False: 20]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 12, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.27k, False: 60]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8811|  1.33k|        COPYMAP(mp_ass_subscript);
  ------------------
  |  | 8735|  1.33k|#define COPYMAP(SLOT) COPYSLOT(tp_as_mapping->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.33k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.30k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 11, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.30k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 6, False: 5]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 5, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.30k, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8812|  1.33k|    }
 8813|       |
 8814|  3.17k|    if (type->tp_as_buffer != NULL && base->tp_as_buffer != NULL) {
  ------------------
  |  Branch (8814:9): [True: 2.36k, False: 812]
  |  Branch (8814:39): [True: 1.29k, False: 1.06k]
  ------------------
 8815|  1.29k|        basebase = base->tp_base;
 8816|  1.29k|        if (basebase->tp_as_buffer == NULL)
  ------------------
  |  Branch (8816:13): [True: 752, False: 544]
  ------------------
 8817|    752|            basebase = NULL;
 8818|  1.29k|        COPYBUF(bf_getbuffer);
  ------------------
  |  | 8736|  1.29k|#define COPYBUF(SLOT) COPYSLOT(tp_as_buffer->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.29k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.29k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.29k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8819|  1.29k|        COPYBUF(bf_releasebuffer);
  ------------------
  |  | 8736|  1.29k|#define COPYBUF(SLOT) COPYSLOT(tp_as_buffer->SLOT)
  |  |  ------------------
  |  |  |  | 8730|  1.29k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  |  |  ------------------
  |  |  |  |  |  | 8726|  1.29k|    (base->SLOT != 0 && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8726:6): [True: 0, False: 1.29k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 8727|  1.29k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8730:9): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8820|  1.29k|    }
 8821|       |
 8822|  3.17k|    basebase = base->tp_base;
 8823|       |
 8824|  3.17k|    COPYSLOT(tp_dealloc);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|     34|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 34, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8727|     34|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 16, False: 18]
  |  |  |  |  |  Branch (8727:27): [True: 12, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 34, False: 3.14k]
  |  |  ------------------
  ------------------
 8825|  3.17k|    if (type->tp_getattr == NULL && type->tp_getattro == NULL) {
  ------------------
  |  Branch (8825:9): [True: 3.17k, False: 0]
  |  Branch (8825:37): [True: 1.07k, False: 2.09k]
  ------------------
 8826|  1.07k|        type->tp_getattr = base->tp_getattr;
 8827|  1.07k|        type->tp_getattro = base->tp_getattro;
 8828|  1.07k|    }
 8829|  3.17k|    if (type->tp_setattr == NULL && type->tp_setattro == NULL) {
  ------------------
  |  Branch (8829:9): [True: 3.17k, False: 0]
  |  Branch (8829:37): [True: 1.29k, False: 1.88k]
  ------------------
 8830|  1.29k|        type->tp_setattr = base->tp_setattr;
 8831|  1.29k|        type->tp_setattro = base->tp_setattro;
 8832|  1.29k|    }
 8833|  3.17k|    COPYSLOT(tp_repr);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  2.45k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 2.45k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8727|  2.45k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 746, False: 1.71k]
  |  |  |  |  |  Branch (8727:27): [True: 345, False: 1.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 2.45k, False: 716]
  |  |  ------------------
  ------------------
 8834|       |    /* tp_hash see tp_richcompare */
 8835|  3.17k|    {
 8836|       |        /* Always inherit tp_vectorcall_offset to support PyVectorcall_Call().
 8837|       |         * If Py_TPFLAGS_HAVE_VECTORCALL is not inherited, then vectorcall
 8838|       |         * won't be used automatically. */
 8839|  3.17k|        COPYSLOT(tp_vectorcall_offset);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  3.14k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 13, False: 3.13k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  3.14k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 13]
  |  |  |  |  |  Branch (8727:27): [True: 11, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 3.14k, False: 31]
  |  |  ------------------
  ------------------
 8840|       |
 8841|       |        /* Inherit Py_TPFLAGS_HAVE_VECTORCALL if tp_call is not overridden */
 8842|  3.17k|        if (!type->tp_call &&
  ------------------
  |  Branch (8842:13): [True: 3.12k, False: 49]
  ------------------
 8843|  3.12k|            _PyType_HasFeature(base, Py_TPFLAGS_HAVE_VECTORCALL))
  ------------------
  |  |  510|  3.12k|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
  |  Branch (8843:13): [True: 13, False: 3.11k]
  ------------------
 8844|     13|        {
 8845|     13|            type_add_flags(type, Py_TPFLAGS_HAVE_VECTORCALL);
  ------------------
  |  |  510|     13|#define Py_TPFLAGS_HAVE_VECTORCALL (1UL << 11)
  ------------------
 8846|     13|        }
 8847|  3.17k|        COPYSLOT(tp_call);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  3.12k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 15, False: 3.11k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  3.12k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 15]
  |  |  |  |  |  Branch (8727:27): [True: 13, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 3.12k, False: 49]
  |  |  ------------------
  ------------------
 8848|  3.17k|    }
 8849|  3.17k|    COPYSLOT(tp_str);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  2.80k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 2.80k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8727|  2.80k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 1.11k, False: 1.69k]
  |  |  |  |  |  Branch (8727:27): [True: 161, False: 1.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 2.80k, False: 366]
  |  |  ------------------
  ------------------
 8850|  3.17k|    {
 8851|       |        /* Copy comparison-related slots only when
 8852|       |           not overriding them anywhere */
 8853|  3.17k|        if (type->tp_richcompare == NULL &&
  ------------------
  |  Branch (8853:13): [True: 1.26k, False: 1.91k]
  ------------------
 8854|  1.26k|            type->tp_hash == NULL)
  ------------------
  |  Branch (8854:13): [True: 1.25k, False: 10]
  ------------------
 8855|  1.25k|        {
 8856|  1.25k|            int r = overrides_hash(type);
 8857|  1.25k|            if (r < 0) {
  ------------------
  |  Branch (8857:17): [True: 0, False: 1.25k]
  ------------------
 8858|      0|                return -1;
 8859|      0|            }
 8860|  1.25k|            if (!r) {
  ------------------
  |  Branch (8860:17): [True: 1.19k, False: 57]
  ------------------
 8861|  1.19k|                type->tp_richcompare = base->tp_richcompare;
 8862|  1.19k|                type->tp_hash = base->tp_hash;
 8863|  1.19k|            }
 8864|  1.25k|        }
 8865|  3.17k|    }
 8866|  3.17k|    {
 8867|  3.17k|        COPYSLOT(tp_iter);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  2.59k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 255, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  2.59k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 255]
  |  |  |  |  |  Branch (8727:27): [True: 199, False: 56]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 2.59k, False: 575]
  |  |  ------------------
  ------------------
 8868|  3.17k|        COPYSLOT(tp_iternext);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  2.10k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 932, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  2.10k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 932]
  |  |  |  |  |  Branch (8727:27): [True: 602, False: 330]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 2.10k, False: 1.06k]
  |  |  ------------------
  ------------------
 8869|  3.17k|    }
 8870|  3.17k|    {
 8871|  3.17k|        COPYSLOT(tp_descr_get);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  3.14k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 7, False: 3.13k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  3.14k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 7]
  |  |  |  |  |  Branch (8727:27): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 3.14k, False: 34]
  |  |  ------------------
  ------------------
 8872|       |        /* Inherit Py_TPFLAGS_METHOD_DESCRIPTOR if tp_descr_get was inherited,
 8873|       |         * but only for extension types */
 8874|  3.17k|        if (base->tp_descr_get &&
  ------------------
  |  Branch (8874:13): [True: 7, False: 3.16k]
  ------------------
 8875|      7|            type->tp_descr_get == base->tp_descr_get &&
  ------------------
  |  Branch (8875:13): [True: 7, False: 0]
  ------------------
 8876|      7|            _PyType_HasFeature(type, Py_TPFLAGS_IMMUTABLETYPE) &&
  ------------------
  |  |  500|      7|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (8876:13): [True: 0, False: 7]
  ------------------
 8877|      0|            _PyType_HasFeature(base, Py_TPFLAGS_METHOD_DESCRIPTOR))
  ------------------
  |  |  534|      0|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (8877:13): [True: 0, False: 0]
  ------------------
 8878|      0|        {
 8879|      0|            type_add_flags(type, Py_TPFLAGS_METHOD_DESCRIPTOR);
  ------------------
  |  |  534|      0|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
 8880|      0|        }
 8881|  3.17k|        COPYSLOT(tp_descr_set);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  3.16k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 3, False: 3.16k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  3.16k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 3]
  |  |  |  |  |  Branch (8727:27): [True: 3, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 3.16k, False: 10]
  |  |  ------------------
  ------------------
 8882|  3.17k|        COPYSLOT(tp_dictoffset);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|    642|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 0, False: 642]
  |  |  |  |  ------------------
  |  |  |  | 8727|    642|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (8727:27): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 642, False: 2.53k]
  |  |  ------------------
  ------------------
 8883|  3.17k|        COPYSLOT(tp_init);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  1.76k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 1.76k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8727|  1.76k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 594, False: 1.16k]
  |  |  |  |  |  Branch (8727:27): [True: 533, False: 636]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 1.76k, False: 1.41k]
  |  |  ------------------
  ------------------
 8884|  3.17k|        COPYSLOT(tp_alloc);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|    921|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 921, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8727|    921|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 460, False: 461]
  |  |  |  |  |  Branch (8727:27): [True: 0, False: 461]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 921, False: 2.25k]
  |  |  ------------------
  ------------------
 8885|  3.17k|        COPYSLOT(tp_is_gc);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  3.16k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 7, False: 3.16k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  3.16k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 7]
  |  |  |  |  |  Branch (8727:27): [True: 5, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 3.16k, False: 7]
  |  |  ------------------
  ------------------
 8886|  3.17k|        COPYSLOT(tp_finalize);
  ------------------
  |  | 8730|  3.17k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|  3.13k|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 48, False: 3.08k]
  |  |  |  |  ------------------
  |  |  |  | 8727|  3.13k|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 0, False: 48]
  |  |  |  |  |  Branch (8727:27): [True: 26, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 3.13k, False: 40]
  |  |  ------------------
  ------------------
 8887|  3.17k|        if ((type->tp_flags & Py_TPFLAGS_HAVE_GC) ==
  ------------------
  |  |  524|  3.17k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (8887:13): [True: 1.92k, False: 1.25k]
  ------------------
 8888|  3.17k|            (base->tp_flags & Py_TPFLAGS_HAVE_GC)) {
  ------------------
  |  |  524|  3.17k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
 8889|       |            /* They agree about gc. */
 8890|  1.92k|            COPYSLOT(tp_free);
  ------------------
  |  | 8730|  1.92k|    if (!type->SLOT && SLOTDEFINED(SLOT)) type->SLOT = base->SLOT
  |  |  ------------------
  |  |  |  | 8726|    519|    (base->SLOT != 0 && \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8726:6): [True: 519, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8727|    519|     (basebase == NULL || base->SLOT != basebase->SLOT))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8727:7): [True: 54, False: 465]
  |  |  |  |  |  Branch (8727:27): [True: 207, False: 258]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8730:9): [True: 519, False: 1.40k]
  |  |  ------------------
  ------------------
 8891|  1.92k|        }
 8892|  1.25k|        else if ((type->tp_flags & Py_TPFLAGS_HAVE_GC) &&
  ------------------
  |  |  524|  1.25k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (8892:18): [True: 1.25k, False: 0]
  ------------------
 8893|  1.25k|                 type->tp_free == NULL &&
  ------------------
  |  Branch (8893:18): [True: 160, False: 1.09k]
  ------------------
 8894|    160|                 base->tp_free == PyObject_Free) {
  ------------------
  |  Branch (8894:18): [True: 160, False: 0]
  ------------------
 8895|       |            /* A bit of magic to plug in the correct default
 8896|       |             * tp_free function when a derived class adds gc,
 8897|       |             * didn't define tp_free, and the base uses the
 8898|       |             * default non-gc tp_free.
 8899|       |             */
 8900|    160|            type->tp_free = PyObject_GC_Del;
 8901|    160|        }
 8902|       |        /* else they didn't agree about gc, and there isn't something
 8903|       |         * obvious to be done -- the type is on its own.
 8904|       |         */
 8905|  3.17k|    }
 8906|  3.17k|    return 0;
 8907|  3.17k|}
typeobject.c:overrides_hash:
 8702|  1.25k|{
 8703|  1.25k|    PyObject *dict = lookup_tp_dict(type);
 8704|       |
 8705|  1.25k|    assert(dict != NULL);
  ------------------
  |  Branch (8705:5): [True: 1.25k, False: 0]
  ------------------
 8706|  1.25k|    int r = PyDict_Contains(dict, &_Py_ID(__eq__));
  ------------------
  |  |  936|  1.25k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.25k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.25k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8707|  1.25k|    if (r == 0) {
  ------------------
  |  Branch (8707:9): [True: 1.20k, False: 52]
  ------------------
 8708|  1.20k|        r = PyDict_Contains(dict, &_Py_ID(__hash__));
  ------------------
  |  |  936|  1.20k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.20k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.20k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8709|  1.20k|    }
 8710|  1.25k|    return r;
 8711|  1.25k|}
typeobject.c:inherit_patma_flags:
 9206|  3.17k|inherit_patma_flags(PyTypeObject *type, PyTypeObject *base) {
 9207|  3.17k|    if ((type->tp_flags & COLLECTION_FLAGS) == 0) {
  ------------------
  |  | 8912|  3.17k|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|  3.17k|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|  3.17k|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
  |  Branch (9207:9): [True: 3.03k, False: 138]
  ------------------
 9208|  3.03k|        type_add_flags(type, base->tp_flags & COLLECTION_FLAGS);
  ------------------
  |  | 8912|  3.03k|#define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  490|  3.03k|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |               #define COLLECTION_FLAGS (Py_TPFLAGS_SEQUENCE | Py_TPFLAGS_MAPPING)
  |  |  ------------------
  |  |  |  |  492|  3.03k|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  ------------------
 9209|  3.03k|    }
 9210|  3.17k|}
typeobject.c:type_ready_inherit_as_structs:
 9187|  1.31k|{
 9188|  1.31k|    if (type->tp_as_async == NULL) {
  ------------------
  |  Branch (9188:9): [True: 400, False: 916]
  ------------------
 9189|    400|        type->tp_as_async = base->tp_as_async;
 9190|    400|    }
 9191|  1.31k|    if (type->tp_as_number == NULL) {
  ------------------
  |  Branch (9191:9): [True: 356, False: 960]
  ------------------
 9192|    356|        type->tp_as_number = base->tp_as_number;
 9193|    356|    }
 9194|  1.31k|    if (type->tp_as_sequence == NULL) {
  ------------------
  |  Branch (9194:9): [True: 372, False: 944]
  ------------------
 9195|    372|        type->tp_as_sequence = base->tp_as_sequence;
 9196|    372|    }
 9197|  1.31k|    if (type->tp_as_mapping == NULL) {
  ------------------
  |  Branch (9197:9): [True: 370, False: 946]
  ------------------
 9198|    370|        type->tp_as_mapping = base->tp_as_mapping;
 9199|    370|    }
 9200|  1.31k|    if (type->tp_as_buffer == NULL) {
  ------------------
  |  Branch (9200:9): [True: 404, False: 912]
  ------------------
 9201|    404|        type->tp_as_buffer = base->tp_as_buffer;
 9202|    404|    }
 9203|  1.31k|}
typeobject.c:type_ready_preheader:
 9097|  1.31k|{
 9098|  1.31k|    if (type->tp_flags & Py_TPFLAGS_MANAGED_DICT) {
  ------------------
  |  |  482|  1.31k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (9098:9): [True: 525, False: 793]
  ------------------
 9099|    525|        if (type->tp_dictoffset > 0 || type->tp_dictoffset < -1) {
  ------------------
  |  Branch (9099:13): [True: 0, False: 525]
  |  Branch (9099:40): [True: 0, False: 525]
  ------------------
 9100|      0|            PyErr_Format(PyExc_TypeError,
 9101|      0|                        "type %s has the Py_TPFLAGS_MANAGED_DICT flag "
 9102|      0|                        "but tp_dictoffset is set",
 9103|      0|                        type->tp_name);
 9104|      0|            return -1;
 9105|      0|        }
 9106|    525|        if (!(type->tp_flags & Py_TPFLAGS_HAVE_GC)) {
  ------------------
  |  |  524|    525|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (9106:13): [True: 0, False: 525]
  ------------------
 9107|      0|            PyErr_Format(PyExc_SystemError,
 9108|      0|                        "type %s has the Py_TPFLAGS_MANAGED_DICT flag "
 9109|      0|                        "but not Py_TPFLAGS_HAVE_GC flag",
 9110|      0|                        type->tp_name);
 9111|      0|            return -1;
 9112|      0|        }
 9113|    525|        type->tp_dictoffset = -1;
 9114|    525|    }
 9115|  1.31k|    if (type->tp_flags & Py_TPFLAGS_MANAGED_WEAKREF) {
  ------------------
  |  |  477|  1.31k|#define Py_TPFLAGS_MANAGED_WEAKREF (1 << 3)
  ------------------
  |  Branch (9115:9): [True: 690, False: 628]
  ------------------
 9116|    690|        if (type->tp_weaklistoffset != 0 &&
  ------------------
  |  Branch (9116:13): [True: 676, False: 14]
  ------------------
 9117|    676|            type->tp_weaklistoffset != MANAGED_WEAKREF_OFFSET)
  ------------------
  |  |  924|    676|#  define MANAGED_WEAKREF_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-4)
  ------------------
  |  Branch (9117:13): [True: 0, False: 676]
  ------------------
 9118|      0|        {
 9119|      0|            PyErr_Format(PyExc_TypeError,
 9120|      0|                        "type %s has the Py_TPFLAGS_MANAGED_WEAKREF flag "
 9121|      0|                        "but tp_weaklistoffset is set",
 9122|      0|                        type->tp_name);
 9123|      0|            return -1;
 9124|      0|        }
 9125|    690|        if (!(type->tp_flags & Py_TPFLAGS_HAVE_GC)) {
  ------------------
  |  |  524|    690|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (9125:13): [True: 0, False: 690]
  ------------------
 9126|      0|            PyErr_Format(PyExc_SystemError,
 9127|      0|                        "type %s has the Py_TPFLAGS_MANAGED_WEAKREF flag "
 9128|      0|                        "but not Py_TPFLAGS_HAVE_GC flag",
 9129|      0|                        type->tp_name);
 9130|      0|            return -1;
 9131|      0|        }
 9132|    690|        type->tp_weaklistoffset = MANAGED_WEAKREF_OFFSET;
  ------------------
  |  |  924|    690|#  define MANAGED_WEAKREF_OFFSET (((Py_ssize_t)sizeof(PyObject *))*-4)
  ------------------
 9133|    690|    }
 9134|  1.31k|    return 0;
 9135|  1.31k|}
typeobject.c:type_ready_set_hash:
 9266|  1.31k|{
 9267|  1.31k|    if (type->tp_hash != NULL) {
  ------------------
  |  Branch (9267:9): [True: 1.27k, False: 46]
  ------------------
 9268|  1.27k|        return 0;
 9269|  1.27k|    }
 9270|       |
 9271|     46|    PyObject *dict = lookup_tp_dict(type);
 9272|     46|    int r = PyDict_Contains(dict, &_Py_ID(__hash__));
  ------------------
  |  |  936|     46|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     46|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     46|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9273|     46|    if (r < 0) {
  ------------------
  |  Branch (9273:9): [True: 0, False: 46]
  ------------------
 9274|      0|        return -1;
 9275|      0|    }
 9276|     46|    if (r > 0) {
  ------------------
  |  Branch (9276:9): [True: 11, False: 35]
  ------------------
 9277|     11|        return 0;
 9278|     11|    }
 9279|       |
 9280|     35|    if (PyDict_SetItem(dict, &_Py_ID(__hash__), Py_None) < 0) {
  ------------------
  |  |  936|     35|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     35|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     35|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyDict_SetItem(dict, &_Py_ID(__hash__), Py_None) < 0) {
  ------------------
  |  |  616|     35|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (9280:9): [True: 0, False: 35]
  ------------------
 9281|      0|        return -1;
 9282|      0|    }
 9283|     35|    type->tp_hash = PyObject_HashNotImplemented;
 9284|     35|    return 0;
 9285|     35|}
typeobject.c:type_ready_managed_dict:
 9359|  1.31k|{
 9360|  1.31k|    if (!(type->tp_flags & Py_TPFLAGS_MANAGED_DICT)) {
  ------------------
  |  |  482|  1.31k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (9360:9): [True: 793, False: 525]
  ------------------
 9361|    793|        return 0;
 9362|    793|    }
 9363|    525|    if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|    525|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (9363:9): [True: 0, False: 525]
  ------------------
 9364|      0|        PyErr_Format(PyExc_SystemError,
 9365|      0|                     "type %s has the Py_TPFLAGS_MANAGED_DICT flag "
 9366|      0|                     "but not Py_TPFLAGS_HEAPTYPE flag",
 9367|      0|                     type->tp_name);
 9368|      0|        return -1;
 9369|      0|    }
 9370|    525|    PyHeapTypeObject* et = (PyHeapTypeObject*)type;
 9371|    525|    if (et->ht_cached_keys == NULL) {
  ------------------
  |  Branch (9371:9): [True: 525, False: 0]
  ------------------
 9372|    525|        et->ht_cached_keys = _PyDict_NewKeysForClass(et);
 9373|    525|        if (et->ht_cached_keys == NULL) {
  ------------------
  |  Branch (9373:13): [True: 0, False: 525]
  ------------------
 9374|      0|            PyErr_NoMemory();
 9375|      0|            return -1;
 9376|      0|        }
 9377|    525|    }
 9378|    525|    if (type->tp_itemsize == 0) {
  ------------------
  |  Branch (9378:9): [True: 517, False: 8]
  ------------------
 9379|    517|        type_add_flags(type, Py_TPFLAGS_INLINE_VALUES);
  ------------------
  |  |  472|    517|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
 9380|    517|    }
 9381|    525|    return 0;
 9382|    525|}
typeobject.c:type_ready_post_checks:
 9386|  1.31k|{
 9387|       |    // bpo-44263: tp_traverse is required if Py_TPFLAGS_HAVE_GC is set.
 9388|       |    // Note: tp_clear is optional.
 9389|  1.31k|    if (type->tp_flags & Py_TPFLAGS_HAVE_GC
  ------------------
  |  |  524|  2.63k|#define Py_TPFLAGS_HAVE_GC (1UL << 14)
  ------------------
  |  Branch (9389:9): [True: 1.24k, False: 72]
  ------------------
 9390|  1.24k|        && type->tp_traverse == NULL)
  ------------------
  |  Branch (9390:12): [True: 0, False: 1.24k]
  ------------------
 9391|      0|    {
 9392|      0|        PyErr_Format(PyExc_SystemError,
 9393|      0|                     "type %s has the Py_TPFLAGS_HAVE_GC flag "
 9394|      0|                     "but has no traverse function",
 9395|      0|                     type->tp_name);
 9396|      0|        return -1;
 9397|      0|    }
 9398|  1.31k|    if (type->tp_flags & Py_TPFLAGS_MANAGED_DICT) {
  ------------------
  |  |  482|  1.31k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (9398:9): [True: 525, False: 793]
  ------------------
 9399|    525|        if (type->tp_dictoffset != -1) {
  ------------------
  |  Branch (9399:13): [True: 0, False: 525]
  ------------------
 9400|      0|            PyErr_Format(PyExc_SystemError,
 9401|      0|                        "type %s has the Py_TPFLAGS_MANAGED_DICT flag "
 9402|      0|                        "but tp_dictoffset is set to incompatible value",
 9403|      0|                        type->tp_name);
 9404|      0|            return -1;
 9405|      0|        }
 9406|    525|    }
 9407|    793|    else if (type->tp_dictoffset < (Py_ssize_t)sizeof(PyObject)) {
  ------------------
  |  Branch (9407:14): [True: 439, False: 354]
  ------------------
 9408|    439|        if (type->tp_dictoffset + type->tp_basicsize <= 0) {
  ------------------
  |  Branch (9408:13): [True: 0, False: 439]
  ------------------
 9409|      0|            PyErr_Format(PyExc_SystemError,
 9410|      0|                         "type %s has a tp_dictoffset that is too small",
 9411|      0|                         type->tp_name);
 9412|      0|            return -1;
 9413|      0|        }
 9414|    439|    }
 9415|  1.31k|    return 0;
 9416|  1.31k|}
typeobject.c:stop_readying:
  501|  1.31k|{
  502|  1.31k|    if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  1.31k|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (502:9): [True: 416, False: 902]
  ------------------
  503|    416|        PyInterpreterState *interp = _PyInterpreterState_GET();
  504|    416|        managed_static_type_state *state = managed_static_type_state_get(interp, type);
  505|    416|        assert(state != NULL);
  ------------------
  |  Branch (505:9): [True: 416, False: 0]
  ------------------
  506|    416|        assert(state->readying);
  ------------------
  |  Branch (506:9): [True: 416, False: 0]
  ------------------
  507|    416|        state->readying = 0;
  508|    416|        return;
  509|    416|    }
  510|  1.31k|    assert(type->tp_flags & Py_TPFLAGS_READYING);
  ------------------
  |  Branch (510:5): [True: 902, False: 0]
  ------------------
  511|    902|    type_clear_flags(type, Py_TPFLAGS_READYING);
  ------------------
  |  |  521|    902|#define Py_TPFLAGS_READYING (1UL << 13)
  ------------------
  512|    902|}
typeobject.c:init_static_type:
 9580|    416|{
 9581|    416|    assert(_Py_IsImmortal((PyObject *)self));
  ------------------
  |  Branch (9581:5): [True: 416, False: 0]
  ------------------
 9582|    416|    assert(!(self->tp_flags & Py_TPFLAGS_HEAPTYPE));
  ------------------
  |  Branch (9582:5): [True: 416, False: 0]
  ------------------
 9583|    416|    assert(!(self->tp_flags & Py_TPFLAGS_MANAGED_DICT));
  ------------------
  |  Branch (9583:5): [True: 416, False: 0]
  ------------------
 9584|    416|    assert(!(self->tp_flags & Py_TPFLAGS_MANAGED_WEAKREF));
  ------------------
  |  Branch (9584:5): [True: 416, False: 0]
  ------------------
 9585|       |
 9586|    416|    if (initial) {
  ------------------
  |  Branch (9586:9): [True: 416, False: 0]
  ------------------
 9587|    416|        assert((self->tp_flags & Py_TPFLAGS_READY) == 0);
  ------------------
  |  Branch (9587:9): [True: 416, False: 0]
  ------------------
 9588|       |
 9589|    416|        type_add_flags(self, _Py_TPFLAGS_STATIC_BUILTIN);
  ------------------
  |  |  467|    416|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
 9590|    416|        type_add_flags(self, Py_TPFLAGS_IMMUTABLETYPE);
  ------------------
  |  |  500|    416|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
 9591|       |
 9592|    416|        if (self->tp_version_tag == 0) {
  ------------------
  |  Branch (9592:13): [True: 392, False: 24]
  ------------------
 9593|    392|            unsigned int next_version_tag = next_global_version_tag();
 9594|    392|            assert(next_version_tag != 0);
  ------------------
  |  Branch (9594:13): [True: 392, False: 0]
  ------------------
 9595|    392|            _PyType_SetVersion(self, next_version_tag);
 9596|    392|        }
 9597|    416|    }
 9598|      0|    else {
 9599|      0|        assert(!initial);
  ------------------
  |  Branch (9599:9): [True: 0, False: 0]
  ------------------
 9600|      0|        assert(self->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN);
  ------------------
  |  Branch (9600:9): [True: 0, False: 0]
  ------------------
 9601|      0|        assert(self->tp_version_tag != 0);
  ------------------
  |  Branch (9601:9): [True: 0, False: 0]
  ------------------
 9602|      0|    }
 9603|       |
 9604|    416|    managed_static_type_state_init(interp, self, isbuiltin, initial);
 9605|       |
 9606|    416|    int res;
 9607|    416|    BEGIN_TYPE_LOCK();
 9608|    416|    res = type_ready(self, initial, 1);
 9609|    416|    END_TYPE_LOCK();
 9610|    416|    if (res < 0) {
  ------------------
  |  Branch (9610:9): [True: 0, False: 416]
  ------------------
 9611|      0|        _PyStaticType_ClearWeakRefs(interp, self);
 9612|      0|        managed_static_type_state_clear(interp, self, isbuiltin, initial);
 9613|      0|    }
 9614|    416|    return res;
 9615|    416|}
typeobject.c:managed_static_type_state_init:
  315|    416|{
  316|    416|    assert(interp->runtime == &_PyRuntime);
  ------------------
  |  Branch (316:5): [True: 416, False: 0]
  ------------------
  317|       |
  318|    416|    size_t index;
  319|    416|    if (initial) {
  ------------------
  |  Branch (319:9): [True: 416, False: 0]
  ------------------
  320|    416|        assert(!managed_static_type_index_is_set(self));
  ------------------
  |  Branch (320:9): [True: 416, False: 0]
  ------------------
  321|    416|        if (isbuiltin) {
  ------------------
  |  Branch (321:13): [True: 404, False: 12]
  ------------------
  322|    404|            index = interp->types.builtins.num_initialized;
  323|    404|            assert(index < _Py_MAX_MANAGED_STATIC_BUILTIN_TYPES);
  ------------------
  |  Branch (323:13): [True: 404, False: 0]
  ------------------
  324|    404|        }
  325|     12|        else {
  326|     12|            PyMutex_Lock(&interp->types.mutex);
  ------------------
  |  |   59|     12|#define PyMutex_Lock _PyMutex_Lock
  ------------------
  327|     12|            index = interp->types.for_extensions.next_index;
  328|     12|            interp->types.for_extensions.next_index++;
  329|     12|            PyMutex_Unlock(&interp->types.mutex);
  ------------------
  |  |   70|     12|#define PyMutex_Unlock _PyMutex_Unlock
  ------------------
  330|     12|            assert(index < _Py_MAX_MANAGED_STATIC_EXT_TYPES);
  ------------------
  |  Branch (330:13): [True: 12, False: 0]
  ------------------
  331|     12|        }
  332|    416|        managed_static_type_index_set(self, index);
  333|    416|    }
  334|      0|    else {
  335|      0|        index = managed_static_type_index_get(self);
  336|      0|        if (isbuiltin) {
  ------------------
  |  Branch (336:13): [True: 0, False: 0]
  ------------------
  337|      0|            assert(index == interp->types.builtins.num_initialized);
  ------------------
  |  Branch (337:13): [True: 0, False: 0]
  ------------------
  338|      0|            assert(index < _Py_MAX_MANAGED_STATIC_BUILTIN_TYPES);
  ------------------
  |  Branch (338:13): [True: 0, False: 0]
  ------------------
  339|      0|        }
  340|      0|        else {
  341|      0|            assert(index < _Py_MAX_MANAGED_STATIC_EXT_TYPES);
  ------------------
  |  Branch (341:13): [True: 0, False: 0]
  ------------------
  342|      0|        }
  343|      0|    }
  344|    416|    size_t full_index = isbuiltin
  ------------------
  |  Branch (344:25): [True: 404, False: 12]
  ------------------
  345|    416|        ? index
  346|    416|        : index + _Py_MAX_MANAGED_STATIC_BUILTIN_TYPES;
  ------------------
  |  |  543|     12|    (_Py_NUM_MANAGED_PREINITIALIZED_TYPES + 83)
  |  |  ------------------
  |  |  |  |  541|     12|#define _Py_NUM_MANAGED_PREINITIALIZED_TYPES 122
  |  |  ------------------
  ------------------
  347|       |
  348|    416|    assert((initial == 1) ==
  ------------------
  |  Branch (348:5): [True: 416, False: 0]
  ------------------
  349|    416|            (_Py_atomic_load_int64(&_PyRuntime.types.managed_static.types[full_index].interp_count) == 0));
  350|    416|    (void)_Py_atomic_add_int64(
  351|    416|            &_PyRuntime.types.managed_static.types[full_index].interp_count, 1);
  352|       |
  353|    416|    if (initial) {
  ------------------
  |  Branch (353:9): [True: 416, False: 0]
  ------------------
  354|    416|        assert(_PyRuntime.types.managed_static.types[full_index].type == NULL);
  ------------------
  |  Branch (354:9): [True: 416, False: 0]
  ------------------
  355|    416|        _PyRuntime.types.managed_static.types[full_index].type = self;
  356|    416|    }
  357|      0|    else {
  358|      0|        assert(_PyRuntime.types.managed_static.types[full_index].type == self);
  ------------------
  |  Branch (358:9): [True: 0, False: 0]
  ------------------
  359|      0|    }
  360|       |
  361|    416|    managed_static_type_state *state = isbuiltin
  ------------------
  |  Branch (361:40): [True: 404, False: 12]
  ------------------
  362|    416|        ? &(interp->types.builtins.initialized[index])
  363|    416|        : &(interp->types.for_extensions.initialized[index]);
  364|       |
  365|       |    /* It should only be called once for each builtin type per interpreter. */
  366|    416|    assert(state->type == NULL);
  ------------------
  |  Branch (366:5): [True: 416, False: 0]
  ------------------
  367|    416|    state->type = self;
  368|    416|    state->isbuiltin = isbuiltin;
  369|       |
  370|       |    /* state->tp_subclasses is left NULL until init_subclasses() sets it. */
  371|       |    /* state->tp_weaklist is left NULL until insert_head() or insert_after()
  372|       |       (in weakrefobject.c) sets it. */
  373|       |
  374|    416|    if (isbuiltin) {
  ------------------
  |  Branch (374:9): [True: 404, False: 12]
  ------------------
  375|    404|        interp->types.builtins.num_initialized++;
  376|    404|    }
  377|     12|    else {
  378|     12|        interp->types.for_extensions.num_initialized++;
  379|     12|    }
  380|    416|}
typeobject.c:managed_static_type_index_set:
  251|    416|{
  252|    416|    assert(index < _Py_MAX_MANAGED_STATIC_BUILTIN_TYPES);
  ------------------
  |  Branch (252:5): [True: 416, False: 0]
  ------------------
  253|       |    /* We store a 1-based index so 0 can mean "not initialized". */
  254|    416|    self->tp_subclasses = (PyObject *)(index + 1);
  255|    416|}
typeobject.c:vectorcall_method:
 3092|    598|{
 3093|    598|    assert(nargs >= 1);
  ------------------
  |  Branch (3093:5): [True: 598, False: 0]
  ------------------
 3094|       |
 3095|    598|    PyThreadState *tstate = _PyThreadState_GET();
 3096|    598|    PyObject *retval = NULL;
 3097|    598|    PyObject *self = args[0];
 3098|    598|    _PyCStackRef cref;
 3099|    598|    _PyThreadState_PushCStackRef(tstate, &cref);
 3100|    598|    int unbound = lookup_method(self, name, &cref.ref);
 3101|    598|    if (unbound >= 0) {
  ------------------
  |  Branch (3101:9): [True: 598, False: 0]
  ------------------
 3102|    598|        PyObject *func = PyStackRef_AsPyObjectBorrow(cref.ref);
 3103|    598|        retval = vectorcall_unbound(tstate, unbound, func, args, nargs);
 3104|    598|    }
 3105|    598|    _PyThreadState_PopCStackRef(tstate, &cref);
 3106|    598|    return retval;
 3107|    598|}
typeobject.c:check_num_args:
 9751|     36|{
 9752|     36|    if (!PyTuple_CheckExact(ob)) {
  ------------------
  |  |   28|     36|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|     36|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9752:9): [True: 0, False: 36]
  ------------------
 9753|      0|        PyErr_SetString(PyExc_SystemError,
 9754|      0|            "PyArg_UnpackTuple() argument list is not a tuple");
 9755|      0|        return 0;
 9756|      0|    }
 9757|     36|    if (n == PyTuple_GET_SIZE(ob))
  ------------------
  |  |   27|     36|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     36|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9757:9): [True: 36, False: 0]
  ------------------
 9758|     36|        return 1;
 9759|      0|    PyErr_Format(
 9760|      0|        PyExc_TypeError,
 9761|      0|        "expected %d argument%s, got %zd", n, n == 1 ? "" : "s", PyTuple_GET_SIZE(ob));
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9761:47): [True: 0, False: 0]
  ------------------
 9762|      0|    return 0;
 9763|     36|}
typeobject.c:slot_tp_setattro:
10981|    142|{
10982|    142|    PyObject *stack[3];
10983|    142|    PyObject *res;
10984|       |
10985|    142|    stack[0] = self;
10986|    142|    stack[1] = name;
10987|    142|    if (value == NULL) {
  ------------------
  |  Branch (10987:9): [True: 36, False: 106]
  ------------------
10988|     36|        res = vectorcall_method(&_Py_ID(__delattr__), stack, 2);
  ------------------
  |  |  936|     36|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     36|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     36|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10989|     36|    }
10990|    106|    else {
10991|    106|        stack[2] = value;
10992|    106|        res = vectorcall_method(&_Py_ID(__setattr__), stack, 3);
  ------------------
  |  |  936|    106|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    106|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    106|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10993|    106|    }
10994|    142|    if (res == NULL)
  ------------------
  |  Branch (10994:9): [True: 0, False: 142]
  ------------------
10995|      0|        return -1;
10996|    142|    Py_DECREF(res);
  ------------------
  |  |  430|    142|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    142|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    142|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10997|    142|    return 0;
10998|    142|}
typeobject.c:wrap_setattr:
10123|    106|{
10124|    106|    setattrofunc func = (setattrofunc)wrapped;
10125|    106|    int res;
10126|    106|    PyObject *name, *value;
10127|       |
10128|    106|    if (!PyArg_UnpackTuple(args, "__setattr__", 2, 2, &name, &value))
  ------------------
  |  Branch (10128:9): [True: 0, False: 106]
  ------------------
10129|      0|        return NULL;
10130|    106|    if (!hackcheck(self, func, "__setattr__"))
  ------------------
  |  Branch (10130:9): [True: 0, False: 106]
  ------------------
10131|      0|        return NULL;
10132|    106|    res = (*func)(self, name, value);
10133|    106|    if (res < 0)
  ------------------
  |  Branch (10133:9): [True: 0, False: 106]
  ------------------
10134|      0|        return NULL;
10135|    106|    Py_RETURN_NONE;
  ------------------
  |  |  628|    106|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    106|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
10136|    106|}
typeobject.c:hackcheck:
10109|    142|{
10110|    142|    if (!PyType_Check(self)) {
  ------------------
  |  |  766|    142|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    142|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    142|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10110:9): [True: 48, False: 94]
  ------------------
10111|     48|        return 1;
10112|     48|    }
10113|       |
10114|     94|    int res;
10115|     94|    BEGIN_TYPE_LOCK();
10116|     94|    res = hackcheck_unlocked(self, func, what);
10117|     94|    END_TYPE_LOCK();
10118|     94|    return res;
10119|    142|}
typeobject.c:hackcheck_unlocked:
10061|     94|{
10062|     94|    PyTypeObject *type = Py_TYPE(self);
  ------------------
  |  |  213|     94|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     94|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     94|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10063|       |
10064|     94|    ASSERT_TYPE_LOCK_HELD();
10065|       |
10066|     94|    PyObject *mro = lookup_tp_mro(type);
10067|     94|    if (!mro) {
  ------------------
  |  Branch (10067:9): [True: 0, False: 94]
  ------------------
10068|       |        /* Probably ok not to check the call in this case. */
10069|      0|        return 1;
10070|      0|    }
10071|     94|    assert(PyTuple_Check(mro));
  ------------------
  |  Branch (10071:5): [True: 94, False: 0]
  ------------------
10072|       |
10073|       |    /* Find the (base) type that defined the type's slot function. */
10074|     94|    PyTypeObject *defining_type = type;
10075|     94|    Py_ssize_t i;
10076|    376|    for (i = PyTuple_GET_SIZE(mro) - 1; i >= 0; i--) {
  ------------------
  |  |   27|     94|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     94|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     94|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10076:41): [True: 282, False: 94]
  ------------------
10077|    564|        PyTypeObject *base = _PyType_CAST(PyTuple_GET_ITEM(mro, i));
  ------------------
  |  |  770|    282|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    564|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:38): [True: 282, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10077:30): [True: 282, False: 0]
  |  Branch (10077:30): [True: 282, False: 0]
  ------------------
10078|    282|        if (base->tp_setattro == slot_tp_setattro) {
  ------------------
  |  Branch (10078:13): [True: 94, False: 188]
  ------------------
10079|       |            /* Ignore Python classes:
10080|       |               they never define their own C-level setattro. */
10081|     94|        }
10082|    188|        else if (base->tp_setattro == type->tp_setattro) {
  ------------------
  |  Branch (10082:18): [True: 0, False: 188]
  ------------------
10083|      0|            defining_type = base;
10084|      0|            break;
10085|      0|        }
10086|    564|    }
10087|       |
10088|       |    /* Reject calls that jump over intermediate C-level overrides. */
10089|    188|    for (PyTypeObject *base = defining_type; base; base = base->tp_base) {
  ------------------
  |  Branch (10089:46): [True: 188, False: 0]
  ------------------
10090|    188|        if (base->tp_setattro == func) {
  ------------------
  |  Branch (10090:13): [True: 94, False: 94]
  ------------------
10091|       |            /* 'func' is the right slot function to call. */
10092|     94|            break;
10093|     94|        }
10094|     94|        else if (base->tp_setattro != slot_tp_setattro) {
  ------------------
  |  Branch (10094:18): [True: 0, False: 94]
  ------------------
10095|       |            /* 'base' is not a Python class and overrides 'func'.
10096|       |               Its tp_setattro should be called instead. */
10097|      0|            PyErr_Format(PyExc_TypeError,
10098|      0|                         "can't apply this %s to %s object",
10099|      0|                         what,
10100|      0|                         type->tp_name);
10101|      0|            return 0;
10102|      0|        }
10103|    188|    }
10104|     94|    return 1;
10105|     94|}
typeobject.c:wrap_delattr:
10140|     36|{
10141|     36|    setattrofunc func = (setattrofunc)wrapped;
10142|     36|    int res;
10143|     36|    PyObject *name;
10144|       |
10145|     36|    if (!check_num_args(args, 1))
  ------------------
  |  Branch (10145:9): [True: 0, False: 36]
  ------------------
10146|      0|        return NULL;
10147|     36|    name = PyTuple_GET_ITEM(args, 0);
  ------------------
  |  |   29|     36|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     36|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     36|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10147:12): [True: 36, False: 0]
  ------------------
10148|     36|    if (!hackcheck(self, func, "__delattr__"))
  ------------------
  |  Branch (10148:9): [True: 0, False: 36]
  ------------------
10149|      0|        return NULL;
10150|     36|    res = (*func)(self, name, NULL);
10151|     36|    if (res < 0)
  ------------------
  |  Branch (10151:9): [True: 0, False: 36]
  ------------------
10152|      0|        return NULL;
10153|     36|    Py_RETURN_NONE;
  ------------------
  |  |  628|     36|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     36|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
10154|     36|}
typeobject.c:slot_tp_iter:
11036|      4|{
11037|      4|    int attr_is_none = 0;
11038|      4|    PyObject *res = maybe_call_special_no_args(self, &_Py_ID(__iter__),
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11039|      4|                                               &attr_is_none);
11040|      4|    if (res != NULL) {
  ------------------
  |  Branch (11040:9): [True: 4, False: 0]
  ------------------
11041|      4|        return res;
11042|      4|    }
11043|      0|    else if (PyErr_Occurred()) {
  ------------------
  |  Branch (11043:14): [True: 0, False: 0]
  ------------------
11044|      0|        return NULL;
11045|      0|    }
11046|      0|    else if (attr_is_none || !has_dunder_getitem(self)) {
  ------------------
  |  Branch (11046:14): [True: 0, False: 0]
  |  Branch (11046:30): [True: 0, False: 0]
  ------------------
11047|      0|        PyErr_Format(PyExc_TypeError,
11048|      0|            "'%.200s' object is not iterable",
11049|      0|            Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11050|      0|        return NULL;
11051|      0|    }
11052|      0|    return PySeqIter_New(self);
11053|      4|}
typeobject.c:slot_tp_descr_get:
11070|      4|{
11071|      4|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11072|      4|    PyThreadState *tstate = _PyThreadState_GET();
11073|      4|    _PyCStackRef cref;
11074|      4|    _PyThreadState_PushCStackRef(tstate, &cref);
11075|      4|    _PyType_LookupStackRefAndVersion(tp, &_Py_ID(__get__), &cref.ref);
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11076|      4|    if (PyStackRef_IsNull(cref.ref)) {
  ------------------
  |  |  482|      4|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|      4|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      4|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 4]
  |  |  ------------------
  ------------------
11077|      0|        _PyThreadState_PopCStackRef(tstate, &cref);
11078|      0|#ifndef Py_GIL_DISABLED
11079|       |        /* Avoid further slowdowns */
11080|      0|        if (tp->tp_descr_get == slot_tp_descr_get)
  ------------------
  |  Branch (11080:13): [True: 0, False: 0]
  ------------------
11081|      0|            tp->tp_descr_get = NULL;
11082|      0|#endif
11083|      0|        return Py_NewRef(self);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11084|      0|    }
11085|      4|    if (obj == NULL)
  ------------------
  |  Branch (11085:9): [True: 0, False: 4]
  ------------------
11086|      0|        obj = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
11087|      4|    if (type == NULL)
  ------------------
  |  Branch (11087:9): [True: 0, False: 4]
  ------------------
11088|      0|        type = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
11089|      4|    PyObject *get = PyStackRef_AsPyObjectBorrow(cref.ref);
11090|      4|    PyObject *stack[3] = {self, obj, type};
11091|       |    PyObject *res = PyObject_Vectorcall(get, stack, 3, NULL);
11092|      4|    _PyThreadState_PopCStackRef(tstate, &cref);
11093|      4|    return res;
11094|      4|}
typeobject.c:slot_tp_init:
11119|  49.2k|{
11120|  49.2k|    PyObject *res = call_method(self, &_Py_ID(__init__), args, kwds);
  ------------------
  |  |  936|  49.2k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  49.2k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  49.2k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11121|  49.2k|    if (res == NULL)
  ------------------
  |  Branch (11121:9): [True: 11, False: 49.2k]
  ------------------
11122|     11|        return -1;
11123|  49.2k|    if (res != Py_None) {
  ------------------
  |  |  616|  49.2k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (11123:9): [True: 0, False: 49.2k]
  ------------------
11124|      0|        PyErr_Format(PyExc_TypeError,
11125|      0|                     "__init__() should return None, not '%.200s'",
11126|      0|                     Py_TYPE(res)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11127|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11128|      0|        return -1;
11129|      0|    }
11130|  49.2k|    Py_DECREF(res);
  ------------------
  |  |  430|  49.2k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  49.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11131|  49.2k|    return 0;
11132|  49.2k|}
typeobject.c:wrap_init:
10342|    390|{
10343|    390|    initproc func = (initproc)wrapped;
10344|       |
10345|    390|    if (func(self, args, kwds) < 0)
  ------------------
  |  Branch (10345:9): [True: 0, False: 390]
  ------------------
10346|      0|        return NULL;
10347|    390|    Py_RETURN_NONE;
  ------------------
  |  |  628|    390|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    390|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
10348|    390|}
typeobject.c:vectorcall_maybe:
 3114|      9|{
 3115|      9|    assert(nargs >= 1);
  ------------------
  |  Branch (3115:5): [True: 9, False: 0]
  ------------------
 3116|       |
 3117|      9|    PyObject *self = args[0];
 3118|      9|    _PyCStackRef cref;
 3119|      9|    _PyThreadState_PushCStackRef(tstate, &cref);
 3120|      9|    int unbound = lookup_maybe_method(self, name, &cref.ref);
 3121|      9|    PyObject *func = PyStackRef_AsPyObjectBorrow(cref.ref);
 3122|      9|    if (func == NULL) {
  ------------------
  |  Branch (3122:9): [True: 0, False: 9]
  ------------------
 3123|      0|        _PyThreadState_PopCStackRef(tstate, &cref);
 3124|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (3124:13): [True: 0, False: 0]
  ------------------
 3125|      0|            Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
 3126|      0|        }
 3127|      0|        return NULL;
 3128|      0|    }
 3129|      9|    PyObject *retval = vectorcall_unbound(tstate, unbound, func, args, nargs);
 3130|      9|    _PyThreadState_PopCStackRef(tstate, &cref);
 3131|      9|    return retval;
 3132|      9|}
typeobject.c:slot_sq_length:
10559|    145|{
10560|    145|    PyObject* stack[1] = {self};
10561|    145|    PyObject *res = vectorcall_method(&_Py_ID(__len__), stack, 1);
  ------------------
  |  |  936|    145|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    145|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    145|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10562|    145|    Py_ssize_t len;
10563|       |
10564|    145|    if (res == NULL)
  ------------------
  |  Branch (10564:9): [True: 0, False: 145]
  ------------------
10565|      0|        return -1;
10566|       |
10567|    145|    Py_SETREF(res, _PyNumber_Index(res));
  ------------------
  |  |  354|    145|    do { \
  |  |  355|    145|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    145|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|    145|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    145|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|    145|        *_tmp_dst_ptr = (src); \
  |  |  358|    145|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|    145|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    145|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 145]
  |  |  ------------------
  ------------------
10568|    145|    if (res == NULL)
  ------------------
  |  Branch (10568:9): [True: 0, False: 145]
  ------------------
10569|      0|        return -1;
10570|       |
10571|    145|    assert(PyLong_Check(res));
  ------------------
  |  Branch (10571:5): [True: 145, False: 0]
  ------------------
10572|    145|    if (_PyLong_IsNegative((PyLongObject *)res)) {
  ------------------
  |  Branch (10572:9): [True: 0, False: 145]
  ------------------
10573|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10574|      0|        PyErr_SetString(PyExc_ValueError,
10575|      0|                        "__len__() should return >= 0");
10576|      0|        return -1;
10577|      0|    }
10578|       |
10579|    145|    len = PyNumber_AsSsize_t(res, PyExc_OverflowError);
10580|    145|    assert(len >= 0 || PyErr_ExceptionMatches(PyExc_OverflowError));
  ------------------
  |  Branch (10580:5): [True: 145, False: 0]
  |  Branch (10580:5): [True: 0, False: 0]
  ------------------
10581|    145|    Py_DECREF(res);
  ------------------
  |  |  430|    145|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    145|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    145|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10582|    145|    return len;
10583|    145|}
typeobject.c:slot_mp_subscript:
10472|     46|FUNCNAME(PyObject *self, ARG1TYPE arg1) \
10473|     46|{ \
10474|     46|    PyObject* stack[2] = {self, arg1}; \
10475|     46|    return vectorcall_method(&_Py_ID(DUNDER), stack, 2); \
  ------------------
  |  |  936|     46|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     46|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     46|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10476|     46|}
typeobject.c:slot_mp_ass_subscript:
10657|    117|{
10658|    117|    PyObject *stack[3];
10659|    117|    PyObject *res;
10660|       |
10661|    117|    stack[0] = self;
10662|    117|    stack[1] = key;
10663|    117|    if (value == NULL) {
  ------------------
  |  Branch (10663:9): [True: 0, False: 117]
  ------------------
10664|      0|        res = vectorcall_method(&_Py_ID(__delitem__), stack, 2);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10665|      0|    }
10666|    117|    else {
10667|    117|        stack[2] = value;
10668|    117|        res = vectorcall_method(&_Py_ID(__setitem__), stack, 3);
  ------------------
  |  |  936|    117|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    117|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    117|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10669|    117|    }
10670|       |
10671|    117|    if (res == NULL)
  ------------------
  |  Branch (10671:9): [True: 0, False: 117]
  ------------------
10672|      0|        return -1;
10673|    117|    Py_DECREF(res);
  ------------------
  |  |  430|    117|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10674|    117|    return 0;
10675|    117|}
typeobject.c:wrap_objobjargproc:
10026|     85|{
10027|     85|    objobjargproc func = (objobjargproc)wrapped;
10028|     85|    int res;
10029|     85|    PyObject *key, *value;
10030|       |
10031|     85|    if (!PyArg_UnpackTuple(args, "__setitem__", 2, 2, &key, &value))
  ------------------
  |  Branch (10031:9): [True: 0, False: 85]
  ------------------
10032|      0|        return NULL;
10033|     85|    res = (*func)(self, key, value);
10034|     85|    if (res == -1 && PyErr_Occurred())
  ------------------
  |  Branch (10034:9): [True: 0, False: 85]
  |  Branch (10034:22): [True: 0, False: 0]
  ------------------
10035|      0|        return NULL;
10036|     85|    Py_RETURN_NONE;
  ------------------
  |  |  628|     85|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     85|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
10037|     85|}
typeobject.c:slot_sq_item:
10587|    148|{
10588|    148|    PyObject *ival = PyLong_FromSsize_t(i);
10589|    148|    if (ival == NULL) {
  ------------------
  |  Branch (10589:9): [True: 0, False: 148]
  ------------------
10590|      0|        return NULL;
10591|      0|    }
10592|    148|    PyObject *stack[2] = {self, ival};
10593|    148|    PyObject *retval = vectorcall_method(&_Py_ID(__getitem__), stack, 2);
  ------------------
  |  |  936|    148|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    148|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    148|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10594|    148|    Py_DECREF(ival);
  ------------------
  |  |  430|    148|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    148|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    148|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10595|    148|    return retval;
10596|    148|}
typeobject.c:slot_sq_contains:
10630|      6|{
10631|      6|    int attr_is_none = 0;
10632|      6|    PyObject *res = maybe_call_special_one_arg(self, &_Py_ID(__contains__), value,
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10633|      6|                                               &attr_is_none);
10634|      6|    if (attr_is_none) {
  ------------------
  |  Branch (10634:9): [True: 0, False: 6]
  ------------------
10635|      0|        PyErr_Format(PyExc_TypeError,
10636|      0|            "'%.200s' object is not a container",
10637|      0|            Py_TYPE(self)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10638|      0|        return -1;
10639|      0|    }
10640|      6|    else if (res == NULL && PyErr_Occurred()) {
  ------------------
  |  Branch (10640:14): [True: 0, False: 6]
  |  Branch (10640:29): [True: 0, False: 0]
  ------------------
10641|      0|        return -1;
10642|      0|    }
10643|      6|    else if (res == NULL) {
  ------------------
  |  Branch (10643:14): [True: 0, False: 6]
  ------------------
10644|      0|        return (int)_PySequence_IterSearch(self, value, PY_ITERSEARCH_CONTAINS);
  ------------------
  |  |   29|      0|#define PY_ITERSEARCH_CONTAINS 3
  ------------------
10645|      0|    }
10646|      6|    int result = PyObject_IsTrue(res);
10647|      6|    Py_DECREF(res);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10648|      6|    return result;
10649|      6|}
typeobject.c:type_get_mro:
 1739|     79|{
 1740|     79|    PyTypeObject *type = PyTypeObject_CAST(tp);
  ------------------
  |  |  203|     79|#define PyTypeObject_CAST(op)   ((PyTypeObject *)(op))
  ------------------
 1741|     79|    PyObject *mro = lookup_tp_mro(type);
 1742|     79|    if (mro == NULL) {
  ------------------
  |  Branch (1742:9): [True: 0, False: 79]
  ------------------
 1743|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1744|      0|    }
 1745|     79|    return Py_NewRef(mro);
  ------------------
  |  |  550|     79|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1746|     79|}
typeobject.c:check_immutable_bases:
 5163|    107|{
 5164|    107|    Py_ssize_t i = 0;
 5165|    107|    if (skip_first) {
  ------------------
  |  Branch (5165:9): [True: 0, False: 107]
  ------------------
 5166|       |        // When testing the MRO, skip the type itself
 5167|      0|        i = 1;
 5168|      0|    }
 5169|    214|    for (; i<PyTuple_GET_SIZE(bases); i++) {
  ------------------
  |  |   27|    214|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    214|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    214|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5169:12): [True: 107, False: 107]
  ------------------
 5170|    107|        PyTypeObject *b = (PyTypeObject*)PyTuple_GET_ITEM(bases, i);
  ------------------
  |  |   29|    107|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    107|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    107|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5170:42): [True: 107, False: 0]
  ------------------
 5171|    107|        if (!b) {
  ------------------
  |  Branch (5171:13): [True: 0, False: 107]
  ------------------
 5172|      0|            return -1;
 5173|      0|        }
 5174|    107|        if (!_PyType_HasFeature(b, Py_TPFLAGS_IMMUTABLETYPE)) {
  ------------------
  |  |  500|    107|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (5174:13): [True: 0, False: 107]
  ------------------
 5175|      0|            PyErr_Format(
 5176|      0|                PyExc_TypeError,
 5177|      0|                "Creating immutable type %s from mutable base %N",
 5178|      0|                type_name, b
 5179|      0|            );
 5180|      0|            return -1;
 5181|      0|        }
 5182|    107|    }
 5183|    107|    return 0;
 5184|    107|}
typeobject.c:supercheck:
12648|  1.90k|{
12649|       |    /* Check that a super() call makes sense.  Return a type object.
12650|       |
12651|       |       obj can be a class, or an instance of one:
12652|       |
12653|       |       - If it is a class, it must be a subclass of 'type'.      This case is
12654|       |         used for class methods; the return value is obj.
12655|       |
12656|       |       - If it is an instance, it must be an instance of 'type'.  This is
12657|       |         the normal case; the return value is obj.__class__.
12658|       |
12659|       |       But... when obj is an instance, we want to allow for the case where
12660|       |       Py_TYPE(obj) is not a subclass of type, but obj.__class__ is!
12661|       |       This will allow using super() with a proxy for obj.
12662|       |    */
12663|       |
12664|       |    /* Check for first bullet above (special case) */
12665|  1.90k|    if (PyType_Check(obj) && PyType_IsSubtype((PyTypeObject *)obj, type)) {
  ------------------
  |  |  766|  3.80k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.90k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.90k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 1.44k, False: 459]
  |  |  ------------------
  ------------------
  |  Branch (12665:30): [True: 1.35k, False: 94]
  ------------------
12666|  1.35k|        return (PyTypeObject *)Py_NewRef(obj);
  ------------------
  |  |  550|  1.35k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12667|  1.35k|    }
12668|       |
12669|       |    /* Normal case */
12670|    553|    if (PyType_IsSubtype(Py_TYPE(obj), type)) {
  ------------------
  |  |  213|    553|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    553|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    553|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12670:9): [True: 553, False: 0]
  ------------------
12671|    553|        return (PyTypeObject*)Py_NewRef(Py_TYPE(obj));
  ------------------
  |  |  550|    553|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    553|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    553|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12672|    553|    }
12673|      0|    else {
12674|       |        /* Try the slow way */
12675|      0|        PyObject *class_attr;
12676|       |
12677|      0|        if (PyObject_GetOptionalAttr(obj, &_Py_ID(__class__), &class_attr) < 0) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12677:13): [True: 0, False: 0]
  ------------------
12678|      0|            return NULL;
12679|      0|        }
12680|      0|        if (class_attr != NULL &&
  ------------------
  |  Branch (12680:13): [True: 0, False: 0]
  ------------------
12681|      0|            PyType_Check(class_attr) &&
  ------------------
  |  |  766|      0|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12682|      0|            (PyTypeObject *)class_attr != Py_TYPE(obj))
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12682:13): [True: 0, False: 0]
  ------------------
12683|      0|        {
12684|      0|            int ok = PyType_IsSubtype(
12685|      0|                (PyTypeObject *)class_attr, type);
12686|      0|            if (ok) {
  ------------------
  |  Branch (12686:17): [True: 0, False: 0]
  ------------------
12687|      0|                return (PyTypeObject *)class_attr;
12688|      0|            }
12689|      0|        }
12690|      0|        Py_XDECREF(class_attr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12691|      0|    }
12692|       |
12693|      0|    const char *type_or_instance, *obj_str;
12694|       |
12695|      0|    if (PyType_Check(obj)) {
  ------------------
  |  |  766|      0|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12696|      0|        type_or_instance = "type";
12697|      0|        obj_str = ((PyTypeObject*)obj)->tp_name;
12698|      0|    }
12699|      0|    else {
12700|      0|        type_or_instance = "instance of";
12701|      0|        obj_str = Py_TYPE(obj)->tp_name;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12702|      0|    }
12703|       |
12704|      0|    PyErr_Format(PyExc_TypeError,
12705|      0|                "super(type, obj): obj (%s %.200s) is not "
12706|      0|                "an instance or subtype of type (%.200s).",
12707|      0|                type_or_instance, obj_str, type->tp_name);
12708|       |
12709|       |    return NULL;
12710|    553|}
typeobject.c:do_super_lookup:
12583|  1.90k|{
12584|  1.90k|    PyObject *res;
12585|  1.90k|    int temp_su = 0;
12586|       |
12587|  1.90k|    if (su_obj_type == NULL) {
  ------------------
  |  Branch (12587:9): [True: 0, False: 1.90k]
  ------------------
12588|      0|        goto skip;
12589|      0|    }
12590|       |
12591|  1.90k|    res = _PySuper_LookupDescr(su_type, su_obj_type, name);
12592|  1.90k|    if (res != NULL) {
  ------------------
  |  Branch (12592:9): [True: 1.90k, False: 0]
  ------------------
12593|  1.90k|        if (method && _PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  213|    455|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    455|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    455|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (method && _PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
  ------------------
  |  |  534|    455|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (12593:13): [True: 455, False: 1.44k]
  |  Branch (12593:23): [True: 455, False: 0]
  ------------------
12594|    455|            *method = 1;
12595|    455|        }
12596|  1.44k|        else {
12597|  1.44k|            descrgetfunc f = Py_TYPE(res)->tp_descr_get;
  ------------------
  |  |  213|  1.44k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.44k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.44k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12598|  1.44k|            if (f != NULL) {
  ------------------
  |  Branch (12598:17): [True: 871, False: 578]
  ------------------
12599|    871|                PyObject *res2;
12600|    871|                res2 = f(res,
12601|       |                    /* Only pass 'obj' param if this is instance-mode super
12602|       |                    (See SF ID #743627)  */
12603|    871|                    (su_obj == (PyObject *)su_obj_type) ? NULL : su_obj,
  ------------------
  |  Branch (12603:21): [True: 773, False: 98]
  ------------------
12604|    871|                    (PyObject *)su_obj_type);
12605|    871|                Py_SETREF(res, res2);
  ------------------
  |  |  354|    871|    do { \
  |  |  355|    871|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    871|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|    871|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    871|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|    871|        *_tmp_dst_ptr = (src); \
  |  |  358|    871|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|    871|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    871|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    871|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    871|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 871]
  |  |  ------------------
  ------------------
12606|    871|            }
12607|  1.44k|        }
12608|       |
12609|  1.90k|        return res;
12610|  1.90k|    }
12611|      0|    else if (PyErr_Occurred()) {
  ------------------
  |  Branch (12611:14): [True: 0, False: 0]
  ------------------
12612|      0|        return NULL;
12613|      0|    }
12614|       |
12615|      0|  skip:
12616|      0|    if (su == NULL) {
  ------------------
  |  Branch (12616:9): [True: 0, False: 0]
  ------------------
12617|      0|        PyObject *args[] = {(PyObject *)su_type, su_obj};
12618|      0|        su = (superobject *)PyObject_Vectorcall((PyObject *)&PySuper_Type, args, 2, NULL);
12619|      0|        if (su == NULL) {
  ------------------
  |  Branch (12619:13): [True: 0, False: 0]
  ------------------
12620|      0|            return NULL;
12621|      0|        }
12622|      0|        temp_su = 1;
12623|      0|    }
12624|      0|    res = PyObject_GenericGetAttr((PyObject *)su, name);
12625|      0|    if (temp_su) {
  ------------------
  |  Branch (12625:9): [True: 0, False: 0]
  ------------------
12626|      0|        Py_DECREF(su);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12627|      0|    }
12628|      0|    return res;
12629|      0|}
typeobject.c:super_dealloc:
12501|    786|{
12502|    786|    superobject *su = superobject_CAST(self);
  ------------------
  |  |12487|    786|#define superobject_CAST(op)    ((superobject *)(op))
  ------------------
12503|       |
12504|    786|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|    786|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12505|    786|    Py_XDECREF(su->obj);
  ------------------
  |  |  524|    786|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12506|    786|    Py_XDECREF(su->type);
  ------------------
  |  |  524|    786|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12507|    786|    Py_XDECREF(su->obj_type);
  ------------------
  |  |  524|    786|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12508|    786|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|    786|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12509|    786|}
typeobject.c:super_getattro:
12633|    786|{
12634|    786|    superobject *su = superobject_CAST(self);
  ------------------
  |  |12487|    786|#define superobject_CAST(op)    ((superobject *)(op))
  ------------------
12635|       |
12636|       |    /* We want __class__ to return the class of the super object
12637|       |       (i.e. super, or a subclass), not the class of su->obj. */
12638|    786|    if (PyUnicode_Check(name) &&
  ------------------
  |  |  103|    786|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.57k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 786, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12639|    786|        PyUnicode_GET_LENGTH(name) == 9 &&
  ------------------
  |  |  299|    786|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12639:9): [True: 0, False: 786]
  ------------------
12640|      0|        _PyUnicode_Equal(name, &_Py_ID(__class__)))
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12640:9): [True: 0, False: 0]
  ------------------
12641|      0|        return PyObject_GenericGetAttr(self, name);
12642|       |
12643|    786|    return do_super_lookup(su, su->type, su->obj, su->obj_type, name, NULL);
12644|    786|}
typeobject.c:super_init_impl:
12858|    786|super_init_impl(PyObject *self, PyTypeObject *type, PyObject *obj) {
12859|    786|    superobject *su = superobject_CAST(self);
  ------------------
  |  |12487|    786|#define superobject_CAST(op)    ((superobject *)(op))
  ------------------
12860|    786|    PyTypeObject *obj_type = NULL;
12861|    786|    if (type == NULL) {
  ------------------
  |  Branch (12861:9): [True: 14, False: 772]
  ------------------
12862|       |        /* Call super(), without args -- fill in from __class__
12863|       |           and first local variable on the stack. */
12864|     14|        PyThreadState *tstate = _PyThreadState_GET();
12865|     14|        _PyInterpreterFrame *frame = _PyThreadState_GetFrame(tstate);
12866|     14|        if (frame == NULL) {
  ------------------
  |  Branch (12866:13): [True: 0, False: 14]
  ------------------
12867|      0|            PyErr_SetString(PyExc_RuntimeError,
12868|      0|                            "super(): no current frame");
12869|      0|            return -1;
12870|      0|        }
12871|     14|        int res = super_init_without_args(frame, &type, &obj);
12872|       |
12873|     14|        if (res < 0) {
  ------------------
  |  Branch (12873:13): [True: 0, False: 14]
  ------------------
12874|      0|            return -1;
12875|      0|        }
12876|     14|    }
12877|    772|    else {
12878|    772|        Py_INCREF(type);
  ------------------
  |  |  310|    772|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    772|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    772|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12879|    772|        Py_XINCREF(obj);
  ------------------
  |  |  514|    772|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    772|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    772|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12880|    772|    }
12881|       |
12882|    786|    if (obj == Py_None) {
  ------------------
  |  |  616|    786|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (12882:9): [True: 0, False: 786]
  ------------------
12883|      0|        Py_DECREF(obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12884|      0|        obj = NULL;
12885|      0|    }
12886|    786|    if (obj != NULL) {
  ------------------
  |  Branch (12886:9): [True: 786, False: 0]
  ------------------
12887|    786|        obj_type = supercheck(type, obj);
12888|    786|        if (obj_type == NULL) {
  ------------------
  |  Branch (12888:13): [True: 0, False: 786]
  ------------------
12889|      0|            Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12890|      0|            Py_DECREF(obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12891|      0|            return -1;
12892|      0|        }
12893|    786|    }
12894|    786|    Py_XSETREF(su->type, (PyTypeObject*)type);
  ------------------
  |  |  376|    786|    do { \
  |  |  377|    786|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    786|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    786|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    786|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    786|        *_tmp_dst_ptr = (src); \
  |  |  380|    786|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    786|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    786|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 786]
  |  |  ------------------
  ------------------
12895|    786|    Py_XSETREF(su->obj, obj);
  ------------------
  |  |  376|    786|    do { \
  |  |  377|    786|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    786|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    786|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    786|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    786|        *_tmp_dst_ptr = (src); \
  |  |  380|    786|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    786|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    786|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 786]
  |  |  ------------------
  ------------------
12896|    786|    Py_XSETREF(su->obj_type, obj_type);
  ------------------
  |  |  376|    786|    do { \
  |  |  377|    786|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    786|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    786|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    786|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    786|        *_tmp_dst_ptr = (src); \
  |  |  380|    786|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    786|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    786|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    786|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    786|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 786]
  |  |  ------------------
  ------------------
12897|    786|    return 0;
12898|    786|}
typeobject.c:super_init_without_args:
12760|     14|{
12761|     14|    PyCodeObject *co = _PyFrame_GetCode(cframe);
12762|     14|    if (co->co_argcount == 0) {
  ------------------
  |  Branch (12762:9): [True: 0, False: 14]
  ------------------
12763|      0|        PyErr_SetString(PyExc_RuntimeError,
12764|      0|                        "super(): no arguments");
12765|      0|        return -1;
12766|      0|    }
12767|       |
12768|     14|    assert(_PyFrame_GetCode(cframe)->co_nlocalsplus > 0);
  ------------------
  |  Branch (12768:5): [True: 14, False: 0]
  ------------------
12769|     14|    PyObject *firstarg = PyStackRef_AsPyObjectBorrow(_PyFrame_GetLocalsArray(cframe)[0]);
12770|     14|    if (firstarg == NULL) {
  ------------------
  |  Branch (12770:9): [True: 0, False: 14]
  ------------------
12771|      0|        PyErr_SetString(PyExc_RuntimeError, "super(): arg[0] deleted");
12772|      0|        return -1;
12773|      0|    }
12774|       |    // The first argument might be a cell.
12775|       |    // "firstarg" is a cell here unless (very unlikely) super()
12776|       |    // was called from the C-API before the first MAKE_CELL op.
12777|     14|    if ((_PyLocals_GetKind(co->co_localspluskinds, 0) & CO_FAST_CELL) &&
  ------------------
  |  |  198|     14|#define CO_FAST_CELL    (0x40)
  ------------------
  |  Branch (12777:9): [True: 0, False: 14]
  ------------------
12778|      0|            (_PyInterpreterFrame_LASTI(cframe) >= 0)) {
  ------------------
  |  |   19|      0|    ((int)((IF)->instr_ptr - _PyFrame_GetBytecode((IF))))
  ------------------
  |  Branch (12778:13): [True: 0, False: 0]
  ------------------
12779|       |        // MAKE_CELL and COPY_FREE_VARS have no quickened forms, so no need
12780|       |        // to use _PyOpcode_Deopt here:
12781|      0|        assert(_PyCode_CODE(co)[0].op.code == MAKE_CELL ||
  ------------------
  |  Branch (12781:9): [True: 0, False: 0]
  |  Branch (12781:9): [True: 0, False: 0]
  ------------------
12782|      0|                _PyCode_CODE(co)[0].op.code == COPY_FREE_VARS);
12783|      0|        assert(PyCell_Check(firstarg));
  ------------------
  |  Branch (12783:9): [True: 0, False: 0]
  ------------------
12784|      0|        firstarg = PyCell_GetRef((PyCellObject *)firstarg);
12785|      0|        if (firstarg == NULL) {
  ------------------
  |  Branch (12785:13): [True: 0, False: 0]
  ------------------
12786|      0|            PyErr_SetString(PyExc_RuntimeError, "super(): arg[0] deleted");
12787|      0|            return -1;
12788|      0|        }
12789|      0|    }
12790|     14|    else {
12791|     14|        Py_INCREF(firstarg);
  ------------------
  |  |  310|     14|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12792|     14|    }
12793|       |
12794|       |    // Look for __class__ in the free vars.
12795|     14|    PyTypeObject *type = NULL;
12796|     14|    int i = PyUnstable_Code_GetFirstFree(co);
12797|     14|    for (; i < co->co_nlocalsplus; i++) {
  ------------------
  |  Branch (12797:12): [True: 14, False: 0]
  ------------------
12798|     14|        assert((_PyLocals_GetKind(co->co_localspluskinds, i) & CO_FAST_FREE) != 0);
  ------------------
  |  Branch (12798:9): [True: 14, False: 0]
  ------------------
12799|     14|        PyObject *name = PyTuple_GET_ITEM(co->co_localsplusnames, i);
  ------------------
  |  |   29|     14|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     14|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12799:26): [True: 14, False: 0]
  ------------------
12800|     14|        assert(PyUnicode_Check(name));
  ------------------
  |  Branch (12800:9): [True: 14, False: 0]
  ------------------
12801|     14|        if (_PyUnicode_Equal(name, &_Py_ID(__class__))) {
  ------------------
  |  |  936|     14|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     14|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     14|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12801:13): [True: 14, False: 0]
  ------------------
12802|     14|            PyObject *cell = PyStackRef_AsPyObjectBorrow(_PyFrame_GetLocalsArray(cframe)[i]);
12803|     14|            if (cell == NULL || !PyCell_Check(cell)) {
  ------------------
  |  |   18|     14|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|     14|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12803:17): [True: 0, False: 14]
  |  Branch (12803:33): [True: 0, False: 14]
  ------------------
12804|      0|                PyErr_SetString(PyExc_RuntimeError,
12805|      0|                  "super(): bad __class__ cell");
12806|      0|                Py_DECREF(firstarg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12807|      0|                return -1;
12808|      0|            }
12809|     14|            type = (PyTypeObject *) PyCell_GetRef((PyCellObject *)cell);
12810|     14|            if (type == NULL) {
  ------------------
  |  Branch (12810:17): [True: 0, False: 14]
  ------------------
12811|      0|                PyErr_SetString(PyExc_RuntimeError,
12812|      0|                  "super(): empty __class__ cell");
12813|      0|                Py_DECREF(firstarg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12814|      0|                return -1;
12815|      0|            }
12816|     14|            if (!PyType_Check(type)) {
  ------------------
  |  |  766|     14|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12816:17): [True: 0, False: 14]
  ------------------
12817|      0|                PyErr_Format(PyExc_RuntimeError,
12818|      0|                  "super(): __class__ is not a type (%s)",
12819|      0|                  Py_TYPE(type)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12820|      0|                Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12821|      0|                Py_DECREF(firstarg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12822|      0|                return -1;
12823|      0|            }
12824|     14|            break;
12825|     14|        }
12826|     14|    }
12827|     14|    if (type == NULL) {
  ------------------
  |  Branch (12827:9): [True: 0, False: 14]
  ------------------
12828|      0|        PyErr_SetString(PyExc_RuntimeError,
12829|      0|                        "super(): __class__ cell not found");
12830|      0|        Py_DECREF(firstarg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12831|      0|        return -1;
12832|      0|    }
12833|       |
12834|     14|    *type_p = type;
12835|     14|    *obj_p = firstarg;
12836|     14|    return 0;
12837|     14|}
typeobject.c:super_vectorcall:
12931|    786|{
12932|    786|    assert(PyType_Check(self));
  ------------------
  |  Branch (12932:5): [True: 786, False: 0]
  ------------------
12933|    786|    if (!_PyArg_NoKwnames("super", kwnames)) {
  ------------------
  |  |   15|    786|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 786, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12934|      0|        return NULL;
12935|      0|    }
12936|    786|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    786|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
12937|    786|    if (!_PyArg_CheckPositional("super()", nargs, 0, 2)) {
  ------------------
  |  |   31|    786|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 786, False: 0]
  |  |  |  Branch (31:27): [True: 786, False: 0]
  |  |  ------------------
  |  |   32|    786|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12938|      0|        return NULL;
12939|      0|    }
12940|    786|    PyTypeObject *type = NULL;
12941|    786|    PyObject *obj = NULL;
12942|    786|    PyTypeObject *self_type = (PyTypeObject *)self;
12943|    786|    PyObject *su = self_type->tp_alloc(self_type, 0);
12944|    786|    if (su == NULL) {
  ------------------
  |  Branch (12944:9): [True: 0, False: 786]
  ------------------
12945|      0|        return NULL;
12946|      0|    }
12947|       |    // 1 or 2 argument form super().
12948|    786|    if (nargs != 0) {
  ------------------
  |  Branch (12948:9): [True: 772, False: 14]
  ------------------
12949|    772|        PyObject *arg0 = args[0];
12950|    772|        if (!PyType_Check(arg0)) {
  ------------------
  |  |  766|    772|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    772|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    772|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12950:13): [True: 0, False: 772]
  ------------------
12951|      0|            PyErr_Format(PyExc_TypeError,
12952|      0|                "super() argument 1 must be a type, not %.200s", Py_TYPE(arg0)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12953|      0|            goto fail;
12954|      0|        }
12955|    772|        type = (PyTypeObject *)arg0;
12956|    772|    }
12957|    786|    if (nargs == 2) {
  ------------------
  |  Branch (12957:9): [True: 772, False: 14]
  ------------------
12958|    772|        obj = args[1];
12959|    772|    }
12960|    786|    if (super_init_impl(su, type, obj) < 0) {
  ------------------
  |  Branch (12960:9): [True: 0, False: 786]
  ------------------
12961|      0|        goto fail;
12962|      0|    }
12963|    786|    return su;
12964|      0|fail:
12965|      0|    Py_DECREF(su);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12966|       |    return NULL;
12967|    786|}

_Py_initialize_generic:
 2405|      2|{
 2406|      2|#define MAKE_TYPE(name) \
 2407|      2|    do { \
 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
 2409|      2|        if (name ## _type == NULL) { \
 2410|      2|            return -1; \
 2411|      2|        } \
 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
 2413|      2|    } while(0)
 2414|       |
 2415|      2|    MAKE_TYPE(generic);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2416|      2|    MAKE_TYPE(typevar);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2417|      2|    MAKE_TYPE(typevartuple);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2418|      2|    MAKE_TYPE(paramspec);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2419|      2|    MAKE_TYPE(paramspecargs);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2420|      2|    MAKE_TYPE(paramspeckwargs);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2421|      2|    MAKE_TYPE(constevaluator);
  ------------------
  |  | 2407|      2|    do { \
  |  | 2408|      2|        PyTypeObject *name ## _type = (PyTypeObject *)PyType_FromSpec(&name ## _spec); \
  |  | 2409|      2|        if (name ## _type == NULL) { \
  |  |  ------------------
  |  |  |  Branch (2409:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 2410|      0|            return -1; \
  |  | 2411|      0|        } \
  |  | 2412|      2|        interp->cached_objects.name ## _type = name ## _type; \
  |  | 2413|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (2413:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 2422|      2|#undef MAKE_TYPE
 2423|      2|    return 0;
 2424|      2|}

PyUnicode_Format:
 1028|     21|{
 1029|     21|    struct unicode_formatter_t ctx;
 1030|       |
 1031|     21|    if (format == NULL || args == NULL) {
  ------------------
  |  Branch (1031:9): [True: 0, False: 21]
  |  Branch (1031:27): [True: 0, False: 21]
  ------------------
 1032|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1033|      0|        return NULL;
 1034|      0|    }
 1035|       |
 1036|     21|    if (ensure_unicode(format) < 0)
  ------------------
  |  |   52|     21|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (1036:9): [True: 0, False: 21]
  ------------------
 1037|      0|        return NULL;
 1038|       |
 1039|     21|    ctx.fmtstr = format;
 1040|     21|    ctx.fmtdata = PyUnicode_DATA(ctx.fmtstr);
  ------------------
  |  |  284|     21|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|     21|    ctx.fmtkind = PyUnicode_KIND(ctx.fmtstr);
  ------------------
  |  |  258|     21|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|     42|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 21, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1042|     21|    ctx.fmtcnt = PyUnicode_GET_LENGTH(ctx.fmtstr);
  ------------------
  |  |  299|     21|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|     21|    ctx.fmtpos = 0;
 1044|       |
 1045|     21|    _PyUnicodeWriter_Init(&ctx.writer);
 1046|     21|    ctx.writer.min_length = ctx.fmtcnt + 100;
 1047|     21|    ctx.writer.overallocate = 1;
 1048|       |
 1049|     21|    if (PyTuple_Check(args)) {
  ------------------
  |  |   27|     21|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     21|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 21]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1050|      0|        ctx.arglen = PyTuple_Size(args);
 1051|      0|        ctx.argidx = 0;
 1052|      0|    }
 1053|     21|    else {
 1054|     21|        ctx.arglen = -1;
 1055|     21|        ctx.argidx = -2;
 1056|     21|    }
 1057|     21|    ctx.args_owned = 0;
 1058|     21|    if (PyMapping_Check(args) && !PyTuple_Check(args) && !PyUnicode_Check(args))
  ------------------
  |  |   27|     21|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     42|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (PyMapping_Check(args) && !PyTuple_Check(args) && !PyUnicode_Check(args))
  ------------------
  |  |  103|     21|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     21|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1058:9): [True: 21, False: 0]
  |  Branch (1058:34): [True: 21, False: 0]
  |  Branch (1058:58): [True: 0, False: 21]
  ------------------
 1059|      0|        ctx.dict = args;
 1060|     21|    else
 1061|     21|        ctx.dict = NULL;
 1062|     21|    ctx.args = args;
 1063|       |
 1064|     84|    while (--ctx.fmtcnt >= 0) {
  ------------------
  |  Branch (1064:12): [True: 63, False: 21]
  ------------------
 1065|     63|        if (PyUnicode_READ(ctx.fmtkind, ctx.fmtdata, ctx.fmtpos) != '%') {
  ------------------
  |  |  354|     63|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|     63|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|     63|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|     63|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|     63|                   (index))
  ------------------
  |  Branch (1065:13): [True: 42, False: 21]
  ------------------
 1066|     42|            Py_ssize_t nonfmtpos;
 1067|       |
 1068|     42|            nonfmtpos = ctx.fmtpos++;
 1069|    315|            while (ctx.fmtcnt >= 0 &&
  ------------------
  |  Branch (1069:20): [True: 294, False: 21]
  ------------------
 1070|    294|                   PyUnicode_READ(ctx.fmtkind, ctx.fmtdata, ctx.fmtpos) != '%') {
  ------------------
  |  |  354|    294|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|    294|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|    294|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|    294|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|    294|                   (index))
  ------------------
  |  Branch (1070:20): [True: 273, False: 21]
  ------------------
 1071|    273|                ctx.fmtpos++;
 1072|    273|                ctx.fmtcnt--;
 1073|    273|            }
 1074|     42|            if (ctx.fmtcnt < 0) {
  ------------------
  |  Branch (1074:17): [True: 21, False: 21]
  ------------------
 1075|     21|                ctx.fmtpos--;
 1076|     21|                ctx.writer.overallocate = 0;
 1077|     21|            }
 1078|       |
 1079|     42|            if (_PyUnicodeWriter_WriteSubstring(&ctx.writer, ctx.fmtstr,
  ------------------
  |  Branch (1079:17): [True: 0, False: 42]
  ------------------
 1080|     42|                                                nonfmtpos, ctx.fmtpos) < 0)
 1081|      0|                goto onError;
 1082|     42|        }
 1083|     21|        else {
 1084|     21|            ctx.fmtpos++;
 1085|     21|            if (unicode_format_arg(&ctx) == -1)
  ------------------
  |  Branch (1085:17): [True: 0, False: 21]
  ------------------
 1086|      0|                goto onError;
 1087|     21|        }
 1088|     63|    }
 1089|       |
 1090|     21|    if (ctx.argidx < ctx.arglen && !ctx.dict) {
  ------------------
  |  Branch (1090:9): [True: 0, False: 21]
  |  Branch (1090:36): [True: 0, False: 0]
  ------------------
 1091|      0|        PyErr_Format(PyExc_TypeError,
 1092|      0|                     "not all arguments converted during string formatting "
 1093|      0|                     "(required %zd, got %zd)",
 1094|      0|                     ctx.arglen < 0 ? 0 : ctx.argidx,
  ------------------
  |  Branch (1094:22): [True: 0, False: 0]
  ------------------
 1095|      0|                     ctx.arglen < 0 ? 1 : ctx.arglen);
  ------------------
  |  Branch (1095:22): [True: 0, False: 0]
  ------------------
 1096|      0|        goto onError;
 1097|      0|    }
 1098|       |
 1099|     21|    if (ctx.args_owned) {
  ------------------
  |  Branch (1099:9): [True: 0, False: 21]
  ------------------
 1100|      0|        Py_DECREF(ctx.args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|      0|    }
 1102|     21|    return _PyUnicodeWriter_Finish(&ctx.writer);
 1103|       |
 1104|      0|  onError:
 1105|      0|    _PyUnicodeWriter_Dealloc(&ctx.writer);
 1106|      0|    if (ctx.args_owned) {
  ------------------
  |  Branch (1106:9): [True: 0, False: 0]
  ------------------
 1107|      0|        Py_DECREF(ctx.args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1108|      0|    }
 1109|       |    return NULL;
 1110|     21|}
unicode_format.c:unicode_format_arg:
  972|     21|{
  973|     21|    struct unicode_format_arg_t arg;
  974|     21|    PyObject *str;
  975|     21|    int ret;
  976|       |
  977|     21|    arg.ch = PyUnicode_READ(ctx->fmtkind, ctx->fmtdata, ctx->fmtpos);
  ------------------
  |  |  354|     21|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|     21|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|     21|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|     21|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|     21|                   (index))
  ------------------
  978|     21|    if (arg.ch == '%') {
  ------------------
  |  Branch (978:9): [True: 0, False: 21]
  ------------------
  979|      0|        ctx->fmtpos++;
  980|      0|        ctx->fmtcnt--;
  981|      0|        if (_PyUnicodeWriter_WriteCharInline(&ctx->writer, '%') < 0)
  ------------------
  |  Branch (981:13): [True: 0, False: 0]
  ------------------
  982|      0|            return -1;
  983|      0|        return 0;
  984|      0|    }
  985|     21|    arg.flags = 0;
  986|     21|    arg.width = -1;
  987|     21|    arg.prec = -1;
  988|     21|    arg.sign = 0;
  989|     21|    arg.fmtstart = ctx->fmtpos - 1;
  990|     21|    arg.key = NULL;
  991|     21|    str = NULL;
  992|       |
  993|     21|    ret = unicode_format_arg_parse(ctx, &arg);
  994|     21|    if (ret == -1) {
  ------------------
  |  Branch (994:9): [True: 0, False: 21]
  ------------------
  995|      0|        goto onError;
  996|      0|    }
  997|       |
  998|     21|    ret = unicode_format_arg_format(ctx, &arg, &str);
  999|     21|    if (ret == -1) {
  ------------------
  |  Branch (999:9): [True: 0, False: 21]
  ------------------
 1000|      0|        goto onError;
 1001|      0|    }
 1002|       |
 1003|     21|    if (ret != 1) {
  ------------------
  |  Branch (1003:9): [True: 21, False: 0]
  ------------------
 1004|     21|        ret = unicode_format_arg_output(ctx, &arg, str);
 1005|     21|        Py_DECREF(str);
  ------------------
  |  |  430|     21|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1006|     21|        if (ret == -1) {
  ------------------
  |  Branch (1006:13): [True: 0, False: 21]
  ------------------
 1007|      0|            goto onError;
 1008|      0|        }
 1009|     21|    }
 1010|       |
 1011|     21|    if (ctx->dict && (ctx->argidx < ctx->arglen)) {
  ------------------
  |  Branch (1011:9): [True: 0, False: 21]
  |  Branch (1011:22): [True: 0, False: 0]
  ------------------
 1012|       |        // XXX: Never happens?
 1013|      0|        PyErr_SetString(PyExc_TypeError,
 1014|      0|                        "not all arguments converted during string formatting");
 1015|      0|        goto onError;
 1016|      0|    }
 1017|     21|    Py_XDECREF(arg.key);
  ------------------
  |  |  524|     21|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1018|     21|    return 0;
 1019|       |
 1020|      0|  onError:
 1021|      0|    Py_XDECREF(arg.key);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1022|      0|    return -1;
 1023|     21|}
unicode_format.c:unicode_format_arg_parse:
  466|     21|{
  467|     21|#define FORMAT_READ(ctx) \
  468|     21|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  469|       |
  470|     21|    PyObject *v;
  471|       |
  472|     21|    if (arg->ch == '(') {
  ------------------
  |  Branch (472:9): [True: 0, False: 21]
  ------------------
  473|       |        /* Get argument value from a dictionary. Example: "%(name)s". */
  474|      0|        Py_ssize_t keystart;
  475|      0|        Py_ssize_t keylen;
  476|      0|        int pcount = 1;
  477|       |
  478|      0|        if (ctx->dict == NULL) {
  ------------------
  |  Branch (478:13): [True: 0, False: 0]
  ------------------
  479|      0|            PyErr_Format(PyExc_TypeError,
  480|      0|                         "format requires a mapping, not %T",
  481|      0|                         ctx->args);
  482|      0|            return -1;
  483|      0|        }
  484|      0|        ++ctx->fmtpos;
  485|      0|        --ctx->fmtcnt;
  486|      0|        keystart = ctx->fmtpos;
  487|       |        /* Skip over balanced parentheses */
  488|      0|        while (pcount > 0 && --ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (488:16): [True: 0, False: 0]
  |  Branch (488:30): [True: 0, False: 0]
  ------------------
  489|      0|            arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  490|      0|            if (arg->ch == ')')
  ------------------
  |  Branch (490:17): [True: 0, False: 0]
  ------------------
  491|      0|                --pcount;
  492|      0|            else if (arg->ch == '(')
  ------------------
  |  Branch (492:22): [True: 0, False: 0]
  ------------------
  493|      0|                ++pcount;
  494|      0|            ctx->fmtpos++;
  495|      0|        }
  496|      0|        keylen = ctx->fmtpos - keystart - 1;
  497|      0|        if (ctx->fmtcnt < 0 || pcount > 0) {
  ------------------
  |  Branch (497:13): [True: 0, False: 0]
  |  Branch (497:32): [True: 0, False: 0]
  ------------------
  498|      0|            PyErr_Format(PyExc_ValueError,
  499|      0|                         "stray %% or incomplete format key at position %zd",
  500|      0|                         arg->fmtstart);
  501|      0|            return -1;
  502|      0|        }
  503|      0|        arg->key = PyUnicode_Substring(ctx->fmtstr,
  504|      0|                                       keystart, keystart + keylen);
  505|      0|        if (arg->key == NULL)
  ------------------
  |  Branch (505:13): [True: 0, False: 0]
  ------------------
  506|      0|            return -1;
  507|      0|        if (ctx->args_owned) {
  ------------------
  |  Branch (507:13): [True: 0, False: 0]
  ------------------
  508|      0|            ctx->args_owned = 0;
  509|      0|            Py_DECREF(ctx->args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  510|      0|        }
  511|      0|        ctx->args = PyObject_GetItem(ctx->dict, arg->key);
  512|      0|        if (ctx->args == NULL)
  ------------------
  |  Branch (512:13): [True: 0, False: 0]
  ------------------
  513|      0|            return -1;
  514|      0|        ctx->args_owned = 1;
  515|      0|        ctx->arglen = -3;
  516|      0|        ctx->argidx = -4;
  517|      0|    }
  518|     21|    else {
  519|     21|        if (ctx->arglen < -1) {
  ------------------
  |  Branch (519:13): [True: 0, False: 21]
  ------------------
  520|      0|            PyErr_Format(PyExc_ValueError,
  521|      0|                         "format requires a parenthesised mapping key "
  522|      0|                         "at position %zd",
  523|      0|                         arg->fmtstart);
  524|      0|            return -1;
  525|      0|        }
  526|     21|    }
  527|       |
  528|       |    /* Parse flags. Example: "%+i" => flags=F_SIGN. */
  529|     21|    while (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (529:12): [True: 21, False: 0]
  ------------------
  530|     21|        arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|     21|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|     21|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|     21|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|     21|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|     21|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|     21|                   (index))
  |  |  ------------------
  ------------------
  531|     21|        ctx->fmtpos++;
  532|     21|        switch (arg->ch) {
  ------------------
  |  Branch (532:17): [True: 0, False: 21]
  ------------------
  533|      0|        case '-': arg->flags |= F_LJUST; continue;
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (533:9): [True: 0, False: 21]
  ------------------
  534|      0|        case '+': arg->flags |= F_SIGN; continue;
  ------------------
  |  |   19|      0|#define F_SIGN  (1<<1)
  ------------------
  |  Branch (534:9): [True: 0, False: 21]
  ------------------
  535|      0|        case ' ': arg->flags |= F_BLANK; continue;
  ------------------
  |  |   20|      0|#define F_BLANK (1<<2)
  ------------------
  |  Branch (535:9): [True: 0, False: 21]
  ------------------
  536|      0|        case '#': arg->flags |= F_ALT; continue;
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (536:9): [True: 0, False: 21]
  ------------------
  537|      0|        case '0': arg->flags |= F_ZERO; continue;
  ------------------
  |  |   22|      0|#define F_ZERO  (1<<4)
  ------------------
  |  Branch (537:9): [True: 0, False: 21]
  ------------------
  538|     21|        }
  539|     21|        break;
  540|     21|    }
  541|       |
  542|       |    /* Parse width. Example: "%10s" => width=10 */
  543|     21|    if (arg->ch == '*') {
  ------------------
  |  Branch (543:9): [True: 0, False: 21]
  ------------------
  544|      0|        if (ctx->arglen < -1) {
  ------------------
  |  Branch (544:13): [True: 0, False: 0]
  ------------------
  545|      0|            PyErr_Format(PyExc_ValueError,
  546|      0|                    "* cannot be used with a parenthesised mapping key "
  547|      0|                    "at position %zd",
  548|      0|                    arg->fmtstart);
  549|      0|            return -1;
  550|      0|        }
  551|      0|        v = unicode_format_getnextarg(ctx, 0);
  552|      0|        if (v == NULL)
  ------------------
  |  Branch (552:13): [True: 0, False: 0]
  ------------------
  553|      0|            return -1;
  554|      0|        if (!PyLong_Check(v)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (554:13): [True: 0, False: 0]
  ------------------
  555|      0|            FORMAT_ERROR(PyExc_TypeError, "* requires int, not %T", v);
  ------------------
  |  |   81|      0|#define FORMAT_ERROR(EXC, FMT, ...) do {                                    \
  |  |   82|      0|    if (arg->key != NULL) {                                                 \
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   83|      0|        PyErr_Format((EXC), "format argument %R: " FMT,                     \
  |  |   84|      0|                     arg->key, __VA_ARGS__);                                \
  |  |   85|      0|    }                                                                       \
  |  |   86|      0|    else if (ctx->argidx >= 0) {                                            \
  |  |  ------------------
  |  |  |  Branch (86:14): [True: 0, False: 0]
  |  |  ------------------
  |  |   87|      0|        PyErr_Format((EXC), "format argument %zd: " FMT,                    \
  |  |   88|      0|                     ctx->argidx, __VA_ARGS__);                             \
  |  |   89|      0|    }                                                                       \
  |  |   90|      0|    else {                                                                  \
  |  |   91|      0|        PyErr_Format((EXC), "format argument: " FMT, __VA_ARGS__);          \
  |  |   92|      0|    }                                                                       \
  |  |   93|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (93:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  556|      0|            return -1;
  557|      0|        }
  558|      0|        arg->width = PyLong_AsSsize_t(v);
  559|      0|        if (arg->width == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (559:13): [True: 0, False: 0]
  |  Branch (559:33): [True: 0, False: 0]
  ------------------
  560|      0|            if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
  ------------------
  |  Branch (560:17): [True: 0, False: 0]
  ------------------
  561|      0|                FORMAT_ERROR(PyExc_OverflowError,
  ------------------
  |  |   81|      0|#define FORMAT_ERROR(EXC, FMT, ...) do {                                    \
  |  |   82|      0|    if (arg->key != NULL) {                                                 \
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   83|      0|        PyErr_Format((EXC), "format argument %R: " FMT,                     \
  |  |   84|      0|                     arg->key, __VA_ARGS__);                                \
  |  |   85|      0|    }                                                                       \
  |  |   86|      0|    else if (ctx->argidx >= 0) {                                            \
  |  |  ------------------
  |  |  |  Branch (86:14): [True: 0, False: 0]
  |  |  ------------------
  |  |   87|      0|        PyErr_Format((EXC), "format argument %zd: " FMT,                    \
  |  |   88|      0|                     ctx->argidx, __VA_ARGS__);                             \
  |  |   89|      0|    }                                                                       \
  |  |   90|      0|    else {                                                                  \
  |  |   91|      0|        PyErr_Format((EXC), "format argument: " FMT, __VA_ARGS__);          \
  |  |   92|      0|    }                                                                       \
  |  |   93|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (93:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  562|      0|                             "too big for width%s", "");
  563|      0|            }
  564|      0|            return -1;
  565|      0|        }
  566|      0|        if (arg->width < 0) {
  ------------------
  |  Branch (566:13): [True: 0, False: 0]
  ------------------
  567|      0|            arg->flags |= F_LJUST;
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  568|      0|            arg->width = -arg->width;
  569|      0|        }
  570|      0|        if (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (570:13): [True: 0, False: 0]
  ------------------
  571|      0|            arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  572|      0|            ctx->fmtpos++;
  573|      0|        }
  574|      0|    }
  575|     21|    else if (arg->ch >= '0' && arg->ch <= '9') {
  ------------------
  |  Branch (575:14): [True: 21, False: 0]
  |  Branch (575:32): [True: 0, False: 21]
  ------------------
  576|      0|        arg->width = arg->ch - '0';
  577|      0|        while (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (577:16): [True: 0, False: 0]
  ------------------
  578|      0|            arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  579|      0|            ctx->fmtpos++;
  580|      0|            if (arg->ch < '0' || arg->ch > '9')
  ------------------
  |  Branch (580:17): [True: 0, False: 0]
  |  Branch (580:34): [True: 0, False: 0]
  ------------------
  581|      0|                break;
  582|       |            /* Since arg->ch is unsigned, the RHS would end up as unsigned,
  583|       |               mixing signed and unsigned comparison. Since arg->ch is between
  584|       |               '0' and '9', casting to int is safe. */
  585|      0|            if (arg->width > (PY_SSIZE_T_MAX - ((int)arg->ch - '0')) / 10) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (585:17): [True: 0, False: 0]
  ------------------
  586|      0|                PyErr_Format(PyExc_ValueError,
  587|      0|                             "width too big at position %zd",
  588|      0|                             arg->fmtstart);
  589|      0|                return -1;
  590|      0|            }
  591|      0|            arg->width = arg->width*10 + (arg->ch - '0');
  592|      0|        }
  593|      0|    }
  594|       |
  595|       |    /* Parse precision. Example: "%.3f" => prec=3 */
  596|     21|    if (arg->ch == '.') {
  ------------------
  |  Branch (596:9): [True: 0, False: 21]
  ------------------
  597|      0|        arg->prec = 0;
  598|      0|        if (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (598:13): [True: 0, False: 0]
  ------------------
  599|      0|            arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  600|      0|            ctx->fmtpos++;
  601|      0|        }
  602|      0|        if (arg->ch == '*') {
  ------------------
  |  Branch (602:13): [True: 0, False: 0]
  ------------------
  603|      0|            if (ctx->arglen < -1) {
  ------------------
  |  Branch (603:17): [True: 0, False: 0]
  ------------------
  604|      0|                PyErr_Format(PyExc_ValueError,
  605|      0|                        "* cannot be used with a parenthesised mapping key "
  606|      0|                        "at position %zd",
  607|      0|                        arg->fmtstart);
  608|      0|                return -1;
  609|      0|            }
  610|      0|            v = unicode_format_getnextarg(ctx, 0);
  611|      0|            if (v == NULL)
  ------------------
  |  Branch (611:17): [True: 0, False: 0]
  ------------------
  612|      0|                return -1;
  613|      0|            if (!PyLong_Check(v)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (613:17): [True: 0, False: 0]
  ------------------
  614|      0|                FORMAT_ERROR(PyExc_TypeError, "* requires int, not %T", v);
  ------------------
  |  |   81|      0|#define FORMAT_ERROR(EXC, FMT, ...) do {                                    \
  |  |   82|      0|    if (arg->key != NULL) {                                                 \
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   83|      0|        PyErr_Format((EXC), "format argument %R: " FMT,                     \
  |  |   84|      0|                     arg->key, __VA_ARGS__);                                \
  |  |   85|      0|    }                                                                       \
  |  |   86|      0|    else if (ctx->argidx >= 0) {                                            \
  |  |  ------------------
  |  |  |  Branch (86:14): [True: 0, False: 0]
  |  |  ------------------
  |  |   87|      0|        PyErr_Format((EXC), "format argument %zd: " FMT,                    \
  |  |   88|      0|                     ctx->argidx, __VA_ARGS__);                             \
  |  |   89|      0|    }                                                                       \
  |  |   90|      0|    else {                                                                  \
  |  |   91|      0|        PyErr_Format((EXC), "format argument: " FMT, __VA_ARGS__);          \
  |  |   92|      0|    }                                                                       \
  |  |   93|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (93:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  615|      0|                return -1;
  616|      0|            }
  617|      0|            arg->prec = PyLong_AsInt(v);
  618|      0|            if (arg->prec == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (618:17): [True: 0, False: 0]
  |  Branch (618:36): [True: 0, False: 0]
  ------------------
  619|      0|                if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
  ------------------
  |  Branch (619:21): [True: 0, False: 0]
  ------------------
  620|      0|                    FORMAT_ERROR(PyExc_OverflowError,
  ------------------
  |  |   81|      0|#define FORMAT_ERROR(EXC, FMT, ...) do {                                    \
  |  |   82|      0|    if (arg->key != NULL) {                                                 \
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   83|      0|        PyErr_Format((EXC), "format argument %R: " FMT,                     \
  |  |   84|      0|                     arg->key, __VA_ARGS__);                                \
  |  |   85|      0|    }                                                                       \
  |  |   86|      0|    else if (ctx->argidx >= 0) {                                            \
  |  |  ------------------
  |  |  |  Branch (86:14): [True: 0, False: 0]
  |  |  ------------------
  |  |   87|      0|        PyErr_Format((EXC), "format argument %zd: " FMT,                    \
  |  |   88|      0|                     ctx->argidx, __VA_ARGS__);                             \
  |  |   89|      0|    }                                                                       \
  |  |   90|      0|    else {                                                                  \
  |  |   91|      0|        PyErr_Format((EXC), "format argument: " FMT, __VA_ARGS__);          \
  |  |   92|      0|    }                                                                       \
  |  |   93|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (93:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
  621|      0|                                 "too big for precision%s", "");
  622|      0|                }
  623|      0|                return -1;
  624|      0|            }
  625|      0|            if (arg->prec < 0)
  ------------------
  |  Branch (625:17): [True: 0, False: 0]
  ------------------
  626|      0|                arg->prec = 0;
  627|      0|            if (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (627:17): [True: 0, False: 0]
  ------------------
  628|      0|                arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  629|      0|                ctx->fmtpos++;
  630|      0|            }
  631|      0|        }
  632|      0|        else if (arg->ch >= '0' && arg->ch <= '9') {
  ------------------
  |  Branch (632:18): [True: 0, False: 0]
  |  Branch (632:36): [True: 0, False: 0]
  ------------------
  633|      0|            arg->prec = arg->ch - '0';
  634|      0|            while (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (634:20): [True: 0, False: 0]
  ------------------
  635|      0|                arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  636|      0|                ctx->fmtpos++;
  637|      0|                if (arg->ch < '0' || arg->ch > '9')
  ------------------
  |  Branch (637:21): [True: 0, False: 0]
  |  Branch (637:38): [True: 0, False: 0]
  ------------------
  638|      0|                    break;
  639|      0|                if (arg->prec > (INT_MAX - ((int)arg->ch - '0')) / 10) {
  ------------------
  |  Branch (639:21): [True: 0, False: 0]
  ------------------
  640|      0|                    PyErr_Format(PyExc_ValueError,
  641|      0|                                 "precision too big at position %zd",
  642|      0|                                 arg->fmtstart);
  643|      0|                    return -1;
  644|      0|                }
  645|      0|                arg->prec = arg->prec*10 + (arg->ch - '0');
  646|      0|            }
  647|      0|        }
  648|      0|    }
  649|       |
  650|       |    /* Ignore "h", "l" and "L" format prefix (ex: "%hi" or "%ls") */
  651|     21|    if (ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (651:9): [True: 21, False: 0]
  ------------------
  652|     21|        if (arg->ch == 'h' || arg->ch == 'l' || arg->ch == 'L') {
  ------------------
  |  Branch (652:13): [True: 0, False: 21]
  |  Branch (652:31): [True: 0, False: 21]
  |  Branch (652:49): [True: 0, False: 21]
  ------------------
  653|      0|            if (--ctx->fmtcnt >= 0) {
  ------------------
  |  Branch (653:17): [True: 0, False: 0]
  ------------------
  654|      0|                arg->ch = FORMAT_READ(ctx);
  ------------------
  |  |  468|      0|        PyUnicode_READ((ctx)->fmtkind, (ctx)->fmtdata, (ctx)->fmtpos)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  655|      0|                ctx->fmtpos++;
  656|      0|            }
  657|      0|        }
  658|     21|    }
  659|     21|    if (ctx->fmtcnt < 0) {
  ------------------
  |  Branch (659:9): [True: 0, False: 21]
  ------------------
  660|      0|        PyErr_Format(PyExc_ValueError,
  661|      0|                     "stray %% at position %zd", arg->fmtstart);
  662|      0|        return -1;
  663|      0|    }
  664|     21|    return 0;
  665|       |
  666|     21|#undef FORMAT_READ
  667|     21|}
unicode_format.c:unicode_format_getnextarg:
   98|     21|{
   99|     21|    Py_ssize_t argidx = ctx->argidx;
  100|       |
  101|     21|    if (argidx < ctx->arglen && (allowone || ctx->arglen >= 0)) {
  ------------------
  |  Branch (101:9): [True: 21, False: 0]
  |  Branch (101:34): [True: 21, False: 0]
  |  Branch (101:46): [True: 0, False: 0]
  ------------------
  102|     21|        ctx->argidx++;
  103|     21|        if (ctx->arglen >= 0) {
  ------------------
  |  Branch (103:13): [True: 0, False: 21]
  ------------------
  104|      0|            return PyTuple_GetItem(ctx->args, argidx);
  105|      0|        }
  106|     21|        else if (allowone) {
  ------------------
  |  Branch (106:18): [True: 21, False: 0]
  ------------------
  107|     21|            return ctx->args;
  108|     21|        }
  109|     21|    }
  110|      0|    PyErr_Format(PyExc_TypeError,
  111|      0|                 "not enough arguments for format string (got %zd)",
  112|      0|                 ctx->arglen < 0 ? 1 : ctx->arglen);
  ------------------
  |  Branch (112:18): [True: 0, False: 0]
  ------------------
  113|       |    return NULL;
  114|     21|}
unicode_format.c:unicode_format_arg_format:
  688|     21|{
  689|     21|    PyObject *v;
  690|     21|    _PyUnicodeWriter *writer = &ctx->writer;
  691|       |
  692|     21|    if (ctx->fmtcnt == 0)
  ------------------
  |  Branch (692:9): [True: 0, False: 21]
  ------------------
  693|      0|        ctx->writer.overallocate = 0;
  694|       |
  695|     21|    v = unicode_format_getnextarg(ctx, 1);
  696|     21|    if (v == NULL)
  ------------------
  |  Branch (696:9): [True: 0, False: 21]
  ------------------
  697|      0|        return -1;
  698|       |
  699|       |
  700|     21|    switch (arg->ch) {
  701|     21|    case 's':
  ------------------
  |  Branch (701:5): [True: 21, False: 0]
  ------------------
  702|     21|    case 'r':
  ------------------
  |  Branch (702:5): [True: 0, False: 21]
  ------------------
  703|     21|    case 'a':
  ------------------
  |  Branch (703:5): [True: 0, False: 21]
  ------------------
  704|     21|        if (PyLong_CheckExact(v) && arg->width == -1 && arg->prec == -1) {
  ------------------
  |  |   14|     21|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|     42|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 21]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (704:37): [True: 0, False: 0]
  |  Branch (704:57): [True: 0, False: 0]
  ------------------
  705|       |            /* Fast path */
  706|      0|            if (_PyLong_FormatWriter(writer, v, 10, arg->flags & F_ALT) == -1)
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (706:17): [True: 0, False: 0]
  ------------------
  707|      0|                return -1;
  708|      0|            return 1;
  709|      0|        }
  710|       |
  711|     21|        if (PyUnicode_CheckExact(v) && arg->ch == 's') {
  ------------------
  |  |  104|     21|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|     42|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 21, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (711:40): [True: 21, False: 0]
  ------------------
  712|     21|            *p_str = Py_NewRef(v);
  ------------------
  |  |  550|     21|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|     21|        }
  714|      0|        else {
  715|      0|            if (arg->ch == 's')
  ------------------
  |  Branch (715:17): [True: 0, False: 0]
  ------------------
  716|      0|                *p_str = PyObject_Str(v);
  717|      0|            else if (arg->ch == 'r')
  ------------------
  |  Branch (717:22): [True: 0, False: 0]
  ------------------
  718|      0|                *p_str = PyObject_Repr(v);
  719|      0|            else
  720|      0|                *p_str = PyObject_ASCII(v);
  721|      0|        }
  722|     21|        break;
  723|       |
  724|      0|    case 'i':
  ------------------
  |  Branch (724:5): [True: 0, False: 21]
  ------------------
  725|      0|    case 'd':
  ------------------
  |  Branch (725:5): [True: 0, False: 21]
  ------------------
  726|      0|    case 'u':
  ------------------
  |  Branch (726:5): [True: 0, False: 21]
  ------------------
  727|      0|    case 'o':
  ------------------
  |  Branch (727:5): [True: 0, False: 21]
  ------------------
  728|      0|    case 'x':
  ------------------
  |  Branch (728:5): [True: 0, False: 21]
  ------------------
  729|      0|    case 'X':
  ------------------
  |  Branch (729:5): [True: 0, False: 21]
  ------------------
  730|      0|    {
  731|      0|        int ret = mainformatlong(v, ctx, arg, p_str, writer);
  732|      0|        if (ret != 0)
  ------------------
  |  Branch (732:13): [True: 0, False: 0]
  ------------------
  733|      0|            return ret;
  734|      0|        arg->sign = 1;
  735|      0|        break;
  736|      0|    }
  737|       |
  738|      0|    case 'e':
  ------------------
  |  Branch (738:5): [True: 0, False: 21]
  ------------------
  739|      0|    case 'E':
  ------------------
  |  Branch (739:5): [True: 0, False: 21]
  ------------------
  740|      0|    case 'f':
  ------------------
  |  Branch (740:5): [True: 0, False: 21]
  ------------------
  741|      0|    case 'F':
  ------------------
  |  Branch (741:5): [True: 0, False: 21]
  ------------------
  742|      0|    case 'g':
  ------------------
  |  Branch (742:5): [True: 0, False: 21]
  ------------------
  743|      0|    case 'G':
  ------------------
  |  Branch (743:5): [True: 0, False: 21]
  ------------------
  744|      0|        if (arg->width == -1 && arg->prec == -1
  ------------------
  |  Branch (744:13): [True: 0, False: 0]
  |  Branch (744:33): [True: 0, False: 0]
  ------------------
  745|      0|            && !(arg->flags & (F_SIGN | F_BLANK)))
  ------------------
  |  |   19|      0|#define F_SIGN  (1<<1)
  ------------------
                          && !(arg->flags & (F_SIGN | F_BLANK)))
  ------------------
  |  |   20|      0|#define F_BLANK (1<<2)
  ------------------
  |  Branch (745:16): [True: 0, False: 0]
  ------------------
  746|      0|        {
  747|       |            /* Fast path */
  748|      0|            if (formatfloat(v, ctx, arg, NULL, writer) == -1)
  ------------------
  |  Branch (748:17): [True: 0, False: 0]
  ------------------
  749|      0|                return -1;
  750|      0|            return 1;
  751|      0|        }
  752|       |
  753|      0|        arg->sign = 1;
  754|      0|        if (formatfloat(v, ctx, arg, p_str, NULL) == -1)
  ------------------
  |  Branch (754:13): [True: 0, False: 0]
  ------------------
  755|      0|            return -1;
  756|      0|        break;
  757|       |
  758|      0|    case 'c':
  ------------------
  |  Branch (758:5): [True: 0, False: 21]
  ------------------
  759|      0|    {
  760|      0|        Py_UCS4 ch = formatchar(v, ctx, arg);
  761|      0|        if (ch == (Py_UCS4) -1)
  ------------------
  |  Branch (761:13): [True: 0, False: 0]
  ------------------
  762|      0|            return -1;
  763|      0|        if (arg->width == -1 && arg->prec == -1) {
  ------------------
  |  Branch (763:13): [True: 0, False: 0]
  |  Branch (763:33): [True: 0, False: 0]
  ------------------
  764|       |            /* Fast path */
  765|      0|            if (_PyUnicodeWriter_WriteCharInline(writer, ch) < 0)
  ------------------
  |  Branch (765:17): [True: 0, False: 0]
  ------------------
  766|      0|                return -1;
  767|      0|            return 1;
  768|      0|        }
  769|      0|        *p_str = PyUnicode_FromOrdinal(ch);
  770|      0|        break;
  771|      0|    }
  772|       |
  773|      0|    default:
  ------------------
  |  Branch (773:5): [True: 0, False: 21]
  ------------------
  774|      0|        if (arg->ch < 128 && Py_ISALPHA(arg->ch)) {
  ------------------
  |  |   23|      0|#define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |   10|      0|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|      0|#define PY_CTF_LOWER  0x01
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    9|      0|#define PY_CTF_UPPER  0x02
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (23:24): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (774:13): [True: 0, False: 0]
  ------------------
  775|      0|            PyErr_Format(PyExc_ValueError,
  776|      0|                         "unsupported format %%%c at position %zd",
  777|      0|                         (int)arg->ch, arg->fmtstart);
  778|      0|        }
  779|      0|        else if (arg->ch == '\'') {
  ------------------
  |  Branch (779:18): [True: 0, False: 0]
  ------------------
  780|      0|            PyErr_Format(PyExc_ValueError,
  781|      0|                         "stray %% at position %zd or unexpected "
  782|      0|                         "format character \"'\" at position %zd",
  783|      0|                         arg->fmtstart,
  784|      0|                         ctx->fmtpos - 1);
  785|      0|        }
  786|      0|        else if (arg->ch >= 32 && arg->ch < 127) {
  ------------------
  |  Branch (786:18): [True: 0, False: 0]
  |  Branch (786:35): [True: 0, False: 0]
  ------------------
  787|      0|            PyErr_Format(PyExc_ValueError,
  788|      0|                         "stray %% at position %zd or unexpected "
  789|      0|                         "format character '%c' at position %zd",
  790|      0|                         arg->fmtstart,
  791|      0|                         (int)arg->ch, ctx->fmtpos - 1);
  792|      0|        }
  793|      0|        else if (Py_UNICODE_ISPRINTABLE(arg->ch)) {
  ------------------
  |  |  761|      0|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  ------------------
  |  |  |  Branch (761:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  794|      0|            PyErr_Format(PyExc_ValueError,
  795|      0|                         "stray %% at position %zd or unexpected "
  796|      0|                         "format character '%c' (U+%04X) at position %zd",
  797|      0|                         arg->fmtstart,
  798|      0|                         (int)arg->ch, (int)arg->ch, ctx->fmtpos - 1);
  799|      0|        }
  800|      0|        else {
  801|      0|            PyErr_Format(PyExc_ValueError,
  802|      0|                         "stray %% at position %zd or unexpected "
  803|      0|                         "format character U+%04X at position %zd",
  804|      0|                         arg->fmtstart, (int)arg->ch, ctx->fmtpos - 1);
  805|      0|        }
  806|      0|        return -1;
  807|     21|    }
  808|     21|    if (*p_str == NULL)
  ------------------
  |  Branch (808:9): [True: 0, False: 21]
  ------------------
  809|      0|        return -1;
  810|     21|    assert (PyUnicode_Check(*p_str));
  ------------------
  |  Branch (810:5): [True: 21, False: 0]
  ------------------
  811|     21|    return 0;
  812|     21|}
unicode_format.c:unicode_format_arg_output:
  819|     21|{
  820|     21|    Py_ssize_t len;
  821|     21|    int kind;
  822|     21|    const void *pbuf;
  823|     21|    Py_ssize_t pindex;
  824|     21|    Py_UCS4 signchar;
  825|     21|    Py_ssize_t buflen;
  826|     21|    Py_UCS4 maxchar;
  827|     21|    Py_ssize_t sublen;
  828|     21|    _PyUnicodeWriter *writer = &ctx->writer;
  829|     21|    Py_UCS4 fill;
  830|       |
  831|     21|    fill = ' ';
  832|     21|    if (arg->sign && arg->flags & F_ZERO)
  ------------------
  |  |   22|      0|#define F_ZERO  (1<<4)
  ------------------
  |  Branch (832:9): [True: 0, False: 21]
  |  Branch (832:22): [True: 0, False: 0]
  ------------------
  833|      0|        fill = '0';
  834|       |
  835|     21|    len = PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|     21|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  836|     21|    if ((arg->width == -1 || arg->width <= len)
  ------------------
  |  Branch (836:10): [True: 21, False: 0]
  |  Branch (836:30): [True: 0, False: 0]
  ------------------
  837|     21|        && (arg->prec == -1 || arg->prec >= len)
  ------------------
  |  Branch (837:13): [True: 21, False: 0]
  |  Branch (837:32): [True: 0, False: 0]
  ------------------
  838|     21|        && !(arg->flags & (F_SIGN | F_BLANK)))
  ------------------
  |  |   19|     21|#define F_SIGN  (1<<1)
  ------------------
                      && !(arg->flags & (F_SIGN | F_BLANK)))
  ------------------
  |  |   20|     21|#define F_BLANK (1<<2)
  ------------------
  |  Branch (838:12): [True: 21, False: 0]
  ------------------
  839|     21|    {
  840|       |        /* Fast path */
  841|     21|        if (_PyUnicodeWriter_WriteStr(writer, str) == -1)
  ------------------
  |  Branch (841:13): [True: 0, False: 21]
  ------------------
  842|      0|            return -1;
  843|     21|        return 0;
  844|     21|    }
  845|       |
  846|       |    /* Truncate the string for "s", "r" and "a" formats
  847|       |       if the precision is set */
  848|      0|    if (arg->ch == 's' || arg->ch == 'r' || arg->ch == 'a') {
  ------------------
  |  Branch (848:9): [True: 0, False: 0]
  |  Branch (848:27): [True: 0, False: 0]
  |  Branch (848:45): [True: 0, False: 0]
  ------------------
  849|      0|        if (arg->prec >= 0 && len > arg->prec)
  ------------------
  |  Branch (849:13): [True: 0, False: 0]
  |  Branch (849:31): [True: 0, False: 0]
  ------------------
  850|      0|            len = arg->prec;
  851|      0|    }
  852|       |
  853|       |    /* Adjust sign and width */
  854|      0|    kind = PyUnicode_KIND(str);
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  855|      0|    pbuf = PyUnicode_DATA(str);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  856|      0|    pindex = 0;
  857|      0|    signchar = '\0';
  858|      0|    if (arg->sign) {
  ------------------
  |  Branch (858:9): [True: 0, False: 0]
  ------------------
  859|      0|        Py_UCS4 ch = PyUnicode_READ(kind, pbuf, pindex);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
  860|      0|        if (ch == '-' || ch == '+') {
  ------------------
  |  Branch (860:13): [True: 0, False: 0]
  |  Branch (860:26): [True: 0, False: 0]
  ------------------
  861|      0|            signchar = ch;
  862|      0|            len--;
  863|      0|            pindex++;
  864|      0|        }
  865|      0|        else if (arg->flags & F_SIGN)
  ------------------
  |  |   19|      0|#define F_SIGN  (1<<1)
  ------------------
  |  Branch (865:18): [True: 0, False: 0]
  ------------------
  866|      0|            signchar = '+';
  867|      0|        else if (arg->flags & F_BLANK)
  ------------------
  |  |   20|      0|#define F_BLANK (1<<2)
  ------------------
  |  Branch (867:18): [True: 0, False: 0]
  ------------------
  868|      0|            signchar = ' ';
  869|      0|        else
  870|      0|            arg->sign = 0;
  871|      0|    }
  872|      0|    if (arg->width < len)
  ------------------
  |  Branch (872:9): [True: 0, False: 0]
  ------------------
  873|      0|        arg->width = len;
  874|       |
  875|       |    /* Prepare the writer */
  876|      0|    maxchar = writer->maxchar;
  877|      0|    if (!(arg->flags & F_LJUST)) {
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (877:9): [True: 0, False: 0]
  ------------------
  878|      0|        if (arg->sign) {
  ------------------
  |  Branch (878:13): [True: 0, False: 0]
  ------------------
  879|      0|            if ((arg->width-1) > len)
  ------------------
  |  Branch (879:17): [True: 0, False: 0]
  ------------------
  880|      0|                maxchar = Py_MAX(maxchar, fill);
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  881|      0|        }
  882|      0|        else {
  883|      0|            if (arg->width > len)
  ------------------
  |  Branch (883:17): [True: 0, False: 0]
  ------------------
  884|      0|                maxchar = Py_MAX(maxchar, fill);
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  885|      0|        }
  886|      0|    }
  887|      0|    if (PyUnicode_MAX_CHAR_VALUE(str) > maxchar) {
  ------------------
  |  |  405|      0|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (887:9): [True: 0, False: 0]
  ------------------
  888|      0|        Py_UCS4 strmaxchar = _PyUnicode_FindMaxChar(str, 0, pindex+len);
  889|      0|        maxchar = Py_MAX(maxchar, strmaxchar);
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  890|      0|    }
  891|       |
  892|      0|    buflen = arg->width;
  893|      0|    if (arg->sign && len == arg->width)
  ------------------
  |  Branch (893:9): [True: 0, False: 0]
  |  Branch (893:22): [True: 0, False: 0]
  ------------------
  894|      0|        buflen++;
  895|      0|    if (_PyUnicodeWriter_Prepare(writer, buflen, maxchar) == -1)
  ------------------
  |  |  562|      0|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  563|      0|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|      0|     ? 0                                                              \
  |  |  565|      0|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (895:9): [True: 0, False: 0]
  ------------------
  896|      0|        return -1;
  897|       |
  898|       |    /* Write the sign if needed */
  899|      0|    if (arg->sign) {
  ------------------
  |  Branch (899:9): [True: 0, False: 0]
  ------------------
  900|      0|        if (fill != ' ') {
  ------------------
  |  Branch (900:13): [True: 0, False: 0]
  ------------------
  901|      0|            PyUnicode_WRITE(writer->kind, writer->data, writer->pos, signchar);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  902|      0|            writer->pos += 1;
  903|      0|        }
  904|      0|        if (arg->width > len)
  ------------------
  |  Branch (904:13): [True: 0, False: 0]
  ------------------
  905|      0|            arg->width--;
  906|      0|    }
  907|       |
  908|       |    /* Write the numeric prefix for "x", "X" and "o" formats
  909|       |       if the alternate form is used.
  910|       |       For example, write "0x" for the "%#x" format. */
  911|      0|    if ((arg->flags & F_ALT) && (arg->ch == 'x' || arg->ch == 'X' || arg->ch == 'o')) {
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (911:9): [True: 0, False: 0]
  |  Branch (911:34): [True: 0, False: 0]
  |  Branch (911:52): [True: 0, False: 0]
  |  Branch (911:70): [True: 0, False: 0]
  ------------------
  912|      0|        assert(PyUnicode_READ(kind, pbuf, pindex) == '0');
  ------------------
  |  Branch (912:9): [True: 0, False: 0]
  ------------------
  913|      0|        assert(PyUnicode_READ(kind, pbuf, pindex + 1) == arg->ch);
  ------------------
  |  Branch (913:9): [True: 0, False: 0]
  ------------------
  914|      0|        if (fill != ' ') {
  ------------------
  |  Branch (914:13): [True: 0, False: 0]
  ------------------
  915|      0|            PyUnicode_WRITE(writer->kind, writer->data, writer->pos, '0');
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  916|      0|            PyUnicode_WRITE(writer->kind, writer->data, writer->pos+1, arg->ch);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  917|      0|            writer->pos += 2;
  918|      0|            pindex += 2;
  919|      0|        }
  920|      0|        arg->width -= 2;
  921|      0|        if (arg->width < 0)
  ------------------
  |  Branch (921:13): [True: 0, False: 0]
  ------------------
  922|      0|            arg->width = 0;
  923|      0|        len -= 2;
  924|      0|    }
  925|       |
  926|       |    /* Pad left with the fill character if needed */
  927|      0|    if (arg->width > len && !(arg->flags & F_LJUST)) {
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (927:9): [True: 0, False: 0]
  |  Branch (927:29): [True: 0, False: 0]
  ------------------
  928|      0|        sublen = arg->width - len;
  929|      0|        _PyUnicode_Fill(writer->kind, writer->data, fill, writer->pos, sublen);
  930|      0|        writer->pos += sublen;
  931|      0|        arg->width = len;
  932|      0|    }
  933|       |
  934|       |    /* If padding with spaces: write sign if needed and/or numeric prefix if
  935|       |       the alternate form is used */
  936|      0|    if (fill == ' ') {
  ------------------
  |  Branch (936:9): [True: 0, False: 0]
  ------------------
  937|      0|        if (arg->sign) {
  ------------------
  |  Branch (937:13): [True: 0, False: 0]
  ------------------
  938|      0|            PyUnicode_WRITE(writer->kind, writer->data, writer->pos, signchar);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  939|      0|            writer->pos += 1;
  940|      0|        }
  941|      0|        if ((arg->flags & F_ALT) && (arg->ch == 'x' || arg->ch == 'X' || arg->ch == 'o')) {
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (941:13): [True: 0, False: 0]
  |  Branch (941:38): [True: 0, False: 0]
  |  Branch (941:56): [True: 0, False: 0]
  |  Branch (941:74): [True: 0, False: 0]
  ------------------
  942|      0|            assert(PyUnicode_READ(kind, pbuf, pindex) == '0');
  ------------------
  |  Branch (942:13): [True: 0, False: 0]
  ------------------
  943|      0|            assert(PyUnicode_READ(kind, pbuf, pindex+1) == arg->ch);
  ------------------
  |  Branch (943:13): [True: 0, False: 0]
  ------------------
  944|      0|            PyUnicode_WRITE(writer->kind, writer->data, writer->pos, '0');
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  945|      0|            PyUnicode_WRITE(writer->kind, writer->data, writer->pos+1, arg->ch);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  946|      0|            writer->pos += 2;
  947|      0|            pindex += 2;
  948|      0|        }
  949|      0|    }
  950|       |
  951|       |    /* Write characters */
  952|      0|    if (len) {
  ------------------
  |  Branch (952:9): [True: 0, False: 0]
  ------------------
  953|      0|        _PyUnicode_FastCopyCharacters(writer->buffer, writer->pos,
  954|      0|                                      str, pindex, len);
  955|      0|        writer->pos += len;
  956|      0|    }
  957|       |
  958|       |    /* Pad right with the fill character if needed */
  959|      0|    if (arg->width > len) {
  ------------------
  |  Branch (959:9): [True: 0, False: 0]
  ------------------
  960|      0|        sublen = arg->width - len;
  961|      0|        _PyUnicode_Fill(writer->kind, writer->data, ' ', writer->pos, sublen);
  962|      0|        writer->pos += sublen;
  963|      0|    }
  964|      0|    return 0;
  965|      0|}

_PyLong_FormatAdvancedWriter:
 1831|    132|{
 1832|    132|    PyObject *tmp = NULL;
 1833|    132|    InternalFormatSpec format;
 1834|    132|    int result = -1;
 1835|       |
 1836|       |    /* check for the special case of zero length format spec, make
 1837|       |       it equivalent to str(obj) */
 1838|    132|    if (start == end) {
  ------------------
  |  Branch (1838:9): [True: 0, False: 132]
  ------------------
 1839|      0|        if (PyLong_CheckExact(obj))
  ------------------
  |  |   14|      0|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1840|      0|            return _PyLong_FormatWriter(writer, obj, 10, 0);
 1841|      0|        else
 1842|      0|            return format_obj(obj, writer);
 1843|      0|    }
 1844|       |
 1845|       |    /* parse the format_spec */
 1846|    132|    if (!parse_internal_render_format_spec(obj, format_spec, start, end,
  ------------------
  |  Branch (1846:9): [True: 0, False: 132]
  ------------------
 1847|    132|                                           &format, 'd', '>'))
 1848|      0|        goto done;
 1849|       |
 1850|       |    /* type conversion? */
 1851|    132|    switch (format.type) {
 1852|      0|    case 'b':
  ------------------
  |  Branch (1852:5): [True: 0, False: 132]
  ------------------
 1853|      0|    case 'c':
  ------------------
  |  Branch (1853:5): [True: 0, False: 132]
  ------------------
 1854|      0|    case 'd':
  ------------------
  |  Branch (1854:5): [True: 0, False: 132]
  ------------------
 1855|      0|    case 'o':
  ------------------
  |  Branch (1855:5): [True: 0, False: 132]
  ------------------
 1856|    132|    case 'x':
  ------------------
  |  Branch (1856:5): [True: 132, False: 0]
  ------------------
 1857|    132|    case 'X':
  ------------------
  |  Branch (1857:5): [True: 0, False: 132]
  ------------------
 1858|    132|    case 'n':
  ------------------
  |  Branch (1858:5): [True: 0, False: 132]
  ------------------
 1859|       |        /* no type conversion needed, already an int.  do the formatting */
 1860|    132|        result = format_long_internal(obj, &format, writer);
 1861|    132|        break;
 1862|       |
 1863|      0|    case 'e':
  ------------------
  |  Branch (1863:5): [True: 0, False: 132]
  ------------------
 1864|      0|    case 'E':
  ------------------
  |  Branch (1864:5): [True: 0, False: 132]
  ------------------
 1865|      0|    case 'f':
  ------------------
  |  Branch (1865:5): [True: 0, False: 132]
  ------------------
 1866|      0|    case 'F':
  ------------------
  |  Branch (1866:5): [True: 0, False: 132]
  ------------------
 1867|      0|    case 'g':
  ------------------
  |  Branch (1867:5): [True: 0, False: 132]
  ------------------
 1868|      0|    case 'G':
  ------------------
  |  Branch (1868:5): [True: 0, False: 132]
  ------------------
 1869|      0|    case '%':
  ------------------
  |  Branch (1869:5): [True: 0, False: 132]
  ------------------
 1870|       |        /* convert to float */
 1871|      0|        tmp = PyNumber_Float(obj);
 1872|      0|        if (tmp == NULL)
  ------------------
  |  Branch (1872:13): [True: 0, False: 0]
  ------------------
 1873|      0|            goto done;
 1874|      0|        result = format_float_internal(tmp, &format, writer);
 1875|      0|        break;
 1876|       |
 1877|      0|    default:
  ------------------
  |  Branch (1877:5): [True: 0, False: 132]
  ------------------
 1878|       |        /* unknown */
 1879|      0|        unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1880|      0|        goto done;
 1881|    132|    }
 1882|       |
 1883|    132|done:
 1884|    132|    Py_XDECREF(tmp);
  ------------------
  |  |  524|    132|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1885|    132|    return result;
 1886|    132|}
unicode_formatter.c:parse_internal_render_format_spec:
  392|    132|{
  393|    132|    Py_ssize_t pos = start;
  394|    132|    int kind = PyUnicode_KIND(format_spec);
  ------------------
  |  |  258|    132|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    264|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 132, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|    132|    const void *data = PyUnicode_DATA(format_spec);
  ------------------
  |  |  284|    132|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  396|       |    /* end-pos is used throughout this code to specify the length of
  397|       |       the input string */
  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  399|       |
  400|    132|    Py_ssize_t consumed;
  401|    132|    int align_specified = 0;
  402|    132|    int fill_char_specified = 0;
  403|       |
  404|    132|    format->fill_char = ' ';
  405|    132|    format->align = default_align;
  406|    132|    format->alternate = 0;
  407|    132|    format->no_neg_0 = 0;
  408|    132|    format->sign = '\0';
  409|    132|    format->width = -1;
  410|    132|    format->thousands_separators = LT_NO_LOCALE;
  411|    132|    format->frac_thousands_separator = LT_NO_LOCALE;
  412|    132|    format->precision = -1;
  413|    132|    format->type = default_type;
  414|       |
  415|       |    /* If the second char is an alignment token,
  416|       |       then parse the fill char */
  417|    132|    if (end-pos >= 2 && is_alignment_token(READ_spec(pos+1))) {
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (417:9): [True: 0, False: 132]
  |  Branch (417:25): [True: 0, False: 0]
  ------------------
  418|      0|        format->align = READ_spec(pos+1);
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  419|      0|        format->fill_char = READ_spec(pos);
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  420|      0|        fill_char_specified = 1;
  421|      0|        align_specified = 1;
  422|      0|        pos += 2;
  423|      0|    }
  424|    132|    else if (end-pos >= 1 && is_alignment_token(READ_spec(pos))) {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (424:14): [True: 132, False: 0]
  |  Branch (424:30): [True: 0, False: 132]
  ------------------
  425|      0|        format->align = READ_spec(pos);
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  426|      0|        align_specified = 1;
  427|      0|        ++pos;
  428|      0|    }
  429|       |
  430|       |    /* Parse the various sign options */
  431|    132|    if (end-pos >= 1 && is_sign_element(READ_spec(pos))) {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (431:9): [True: 132, False: 0]
  |  Branch (431:25): [True: 0, False: 132]
  ------------------
  432|      0|        format->sign = READ_spec(pos);
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  433|      0|        ++pos;
  434|      0|    }
  435|       |
  436|       |    /* If the next character is z, request coercion of negative 0.
  437|       |       Applies only to floats. */
  438|    132|    if (end-pos >= 1 && READ_spec(pos) == 'z') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (438:9): [True: 132, False: 0]
  |  Branch (438:25): [True: 0, False: 132]
  ------------------
  439|      0|        format->no_neg_0 = 1;
  440|      0|        ++pos;
  441|      0|    }
  442|       |
  443|       |    /* If the next character is #, we're in alternate mode.  This only
  444|       |       applies to integers. */
  445|    132|    if (end-pos >= 1 && READ_spec(pos) == '#') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (445:9): [True: 132, False: 0]
  |  Branch (445:25): [True: 0, False: 132]
  ------------------
  446|      0|        format->alternate = 1;
  447|      0|        ++pos;
  448|      0|    }
  449|       |
  450|       |    /* The special case for 0-padding (backwards compat) */
  451|    132|    if (!fill_char_specified && end-pos >= 1 && READ_spec(pos) == '0') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (451:9): [True: 132, False: 0]
  |  Branch (451:33): [True: 132, False: 0]
  |  Branch (451:49): [True: 0, False: 132]
  ------------------
  452|      0|        format->fill_char = '0';
  453|      0|        if (!align_specified && default_align == '>') {
  ------------------
  |  Branch (453:13): [True: 0, False: 0]
  |  Branch (453:33): [True: 0, False: 0]
  ------------------
  454|      0|            format->align = '=';
  455|      0|        }
  456|      0|        ++pos;
  457|      0|    }
  458|       |
  459|    132|    consumed = get_integer(format_spec, &pos, end, &format->width);
  460|    132|    if (consumed == -1)
  ------------------
  |  Branch (460:9): [True: 0, False: 132]
  ------------------
  461|       |        /* Overflow error. Exception already set. */
  462|      0|        return 0;
  463|       |
  464|       |    /* If consumed is 0, we didn't consume any characters for the
  465|       |       width. In that case, reset the width to -1, because
  466|       |       get_integer() will have set it to zero. -1 is how we record
  467|       |       that the width wasn't specified. */
  468|    132|    if (consumed == 0)
  ------------------
  |  Branch (468:9): [True: 132, False: 0]
  ------------------
  469|    132|        format->width = -1;
  470|       |
  471|       |    /* Comma signifies add thousands separators */
  472|    132|    if (end-pos && READ_spec(pos) == ',') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (472:9): [True: 132, False: 0]
  |  Branch (472:20): [True: 0, False: 132]
  ------------------
  473|      0|        format->thousands_separators = LT_DEFAULT_LOCALE;
  474|      0|        ++pos;
  475|      0|    }
  476|       |    /* Underscore signifies add thousands separators */
  477|    132|    if (end-pos && READ_spec(pos) == '_') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (477:9): [True: 132, False: 0]
  |  Branch (477:20): [True: 0, False: 132]
  ------------------
  478|      0|        if (format->thousands_separators != LT_NO_LOCALE) {
  ------------------
  |  Branch (478:13): [True: 0, False: 0]
  ------------------
  479|      0|            invalid_comma_and_underscore();
  480|      0|            return 0;
  481|      0|        }
  482|      0|        format->thousands_separators = LT_UNDERSCORE_LOCALE;
  483|      0|        ++pos;
  484|      0|    }
  485|    132|    if (end-pos && READ_spec(pos) == ',') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (485:9): [True: 132, False: 0]
  |  Branch (485:20): [True: 0, False: 132]
  ------------------
  486|      0|        if (format->thousands_separators == LT_UNDERSCORE_LOCALE) {
  ------------------
  |  Branch (486:13): [True: 0, False: 0]
  ------------------
  487|      0|            invalid_comma_and_underscore();
  488|      0|            return 0;
  489|      0|        }
  490|      0|    }
  491|       |
  492|       |    /* Parse field precision */
  493|    132|    if (end-pos && READ_spec(pos) == '.') {
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (493:9): [True: 132, False: 0]
  |  Branch (493:20): [True: 0, False: 132]
  ------------------
  494|      0|        ++pos;
  495|       |
  496|      0|        consumed = get_integer(format_spec, &pos, end, &format->precision);
  497|      0|        if (consumed == -1)
  ------------------
  |  Branch (497:13): [True: 0, False: 0]
  ------------------
  498|       |            /* Overflow error. Exception already set. */
  499|      0|            return 0;
  500|       |
  501|      0|        if (end-pos && READ_spec(pos) == ',') {
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (501:13): [True: 0, False: 0]
  |  Branch (501:24): [True: 0, False: 0]
  ------------------
  502|      0|            if (consumed == 0) {
  ------------------
  |  Branch (502:17): [True: 0, False: 0]
  ------------------
  503|      0|                format->precision = -1;
  504|      0|            }
  505|      0|            format->frac_thousands_separator = LT_DEFAULT_LOCALE;
  506|      0|            ++pos;
  507|      0|            ++consumed;
  508|      0|        }
  509|      0|        if (end-pos && READ_spec(pos) == '_') {
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (509:13): [True: 0, False: 0]
  |  Branch (509:24): [True: 0, False: 0]
  ------------------
  510|      0|            if (format->frac_thousands_separator != LT_NO_LOCALE) {
  ------------------
  |  Branch (510:17): [True: 0, False: 0]
  ------------------
  511|      0|                invalid_comma_and_underscore();
  512|      0|                return 0;
  513|      0|            }
  514|      0|            if (consumed == 0) {
  ------------------
  |  Branch (514:17): [True: 0, False: 0]
  ------------------
  515|      0|                format->precision = -1;
  516|      0|            }
  517|      0|            format->frac_thousands_separator = LT_UNDERSCORE_LOCALE;
  518|      0|            ++pos;
  519|      0|            ++consumed;
  520|      0|        }
  521|      0|        if (end-pos && READ_spec(pos) == ',') {
  ------------------
  |  |  398|      0|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|      0|                   (index))
  |  |  ------------------
  ------------------
  |  Branch (521:13): [True: 0, False: 0]
  |  Branch (521:24): [True: 0, False: 0]
  ------------------
  522|      0|            if (format->frac_thousands_separator == LT_UNDERSCORE_LOCALE) {
  ------------------
  |  Branch (522:17): [True: 0, False: 0]
  ------------------
  523|      0|                invalid_comma_and_underscore();
  524|      0|                return 0;
  525|      0|            }
  526|      0|        }
  527|       |
  528|       |        /* Not having a precision or underscore/comma after a dot
  529|       |           is an error. */
  530|      0|        if (consumed == 0) {
  ------------------
  |  Branch (530:13): [True: 0, False: 0]
  ------------------
  531|      0|            PyErr_Format(PyExc_ValueError,
  532|      0|                         "Format specifier missing precision");
  533|      0|            return 0;
  534|      0|        }
  535|       |
  536|      0|    }
  537|       |
  538|       |    /* Finally, parse the type field. */
  539|       |
  540|    132|    if (end-pos > 1) {
  ------------------
  |  Branch (540:9): [True: 0, False: 132]
  ------------------
  541|       |        /* More than one char remains, so this is an invalid format
  542|       |           specifier. */
  543|       |        /* Create a temporary object that contains the format spec we're
  544|       |           operating on.  It's format_spec[start:end] (in Python syntax). */
  545|      0|        PyObject* actual_format_spec = PyUnicode_FromKindAndData(kind,
  546|      0|                                         (char*)data + kind*start,
  547|      0|                                         end-start);
  548|      0|        if (actual_format_spec != NULL) {
  ------------------
  |  Branch (548:13): [True: 0, False: 0]
  ------------------
  549|      0|            PyErr_Format(PyExc_ValueError,
  550|      0|                "Invalid format specifier '%U' for object of type '%.200s'",
  551|      0|                actual_format_spec, Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  552|      0|            Py_DECREF(actual_format_spec);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  553|      0|        }
  554|      0|        return 0;
  555|      0|    }
  556|       |
  557|    132|    if (end-pos == 1) {
  ------------------
  |  Branch (557:9): [True: 132, False: 0]
  ------------------
  558|    132|        format->type = READ_spec(pos);
  ------------------
  |  |  398|    132|#define READ_spec(index) PyUnicode_READ(kind, data, index)
  |  |  ------------------
  |  |  |  |  354|    132|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  355|    132|                   _Py_STATIC_CAST(const void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    132|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  356|    132|                   (index))
  |  |  ------------------
  ------------------
  559|    132|        ++pos;
  560|    132|    }
  561|       |
  562|       |    /* Do as much validating as we can, just by looking at the format
  563|       |       specifier.  Do not take into account what type of formatting
  564|       |       we're doing (int, float, string). */
  565|       |
  566|    132|    if (format->thousands_separators) {
  ------------------
  |  Branch (566:9): [True: 0, False: 132]
  ------------------
  567|      0|        switch (format->type) {
  568|      0|        case 'd':
  ------------------
  |  Branch (568:9): [True: 0, False: 0]
  ------------------
  569|      0|        case 'e':
  ------------------
  |  Branch (569:9): [True: 0, False: 0]
  ------------------
  570|      0|        case 'f':
  ------------------
  |  Branch (570:9): [True: 0, False: 0]
  ------------------
  571|      0|        case 'g':
  ------------------
  |  Branch (571:9): [True: 0, False: 0]
  ------------------
  572|      0|        case 'E':
  ------------------
  |  Branch (572:9): [True: 0, False: 0]
  ------------------
  573|      0|        case 'G':
  ------------------
  |  Branch (573:9): [True: 0, False: 0]
  ------------------
  574|      0|        case '%':
  ------------------
  |  Branch (574:9): [True: 0, False: 0]
  ------------------
  575|      0|        case 'F':
  ------------------
  |  Branch (575:9): [True: 0, False: 0]
  ------------------
  576|      0|        case '\0':
  ------------------
  |  Branch (576:9): [True: 0, False: 0]
  ------------------
  577|       |            /* These are allowed. See PEP 378.*/
  578|      0|            break;
  579|      0|        case 'b':
  ------------------
  |  Branch (579:9): [True: 0, False: 0]
  ------------------
  580|      0|        case 'o':
  ------------------
  |  Branch (580:9): [True: 0, False: 0]
  ------------------
  581|      0|        case 'x':
  ------------------
  |  Branch (581:9): [True: 0, False: 0]
  ------------------
  582|      0|        case 'X':
  ------------------
  |  Branch (582:9): [True: 0, False: 0]
  ------------------
  583|       |            /* Underscores are allowed in bin/oct/hex. See PEP 515. */
  584|      0|            if (format->thousands_separators == LT_UNDERSCORE_LOCALE) {
  ------------------
  |  Branch (584:17): [True: 0, False: 0]
  ------------------
  585|       |                /* Every four digits, not every three, in bin/oct/hex. */
  586|      0|                format->thousands_separators = LT_UNDER_FOUR_LOCALE;
  587|      0|                break;
  588|      0|            }
  589|      0|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  590|      0|        default:
  ------------------
  |  Branch (590:9): [True: 0, False: 0]
  ------------------
  591|      0|            invalid_thousands_separator_type(format->thousands_separators, format->type);
  592|      0|            return 0;
  593|      0|        }
  594|      0|    }
  595|       |
  596|    132|    if (format->type == 'n'
  ------------------
  |  Branch (596:9): [True: 0, False: 132]
  ------------------
  597|      0|        && format->frac_thousands_separator != LT_NO_LOCALE)
  ------------------
  |  Branch (597:12): [True: 0, False: 0]
  ------------------
  598|      0|    {
  599|      0|        invalid_thousands_separator_type(format->frac_thousands_separator,
  600|      0|                                         format->type);
  601|      0|        return 0;
  602|      0|    }
  603|       |
  604|    132|    assert (format->align <= 127);
  ------------------
  |  Branch (604:5): [True: 132, False: 0]
  ------------------
  605|    132|    assert (format->sign <= 127);
  ------------------
  |  Branch (605:5): [True: 132, False: 0]
  ------------------
  606|    132|    return 1;
  607|    132|}
unicode_formatter.c:is_alignment_token:
  335|    132|{
  336|    132|    switch (c) {
  337|      0|    case '<': case '>': case '=': case '^':
  ------------------
  |  Branch (337:5): [True: 0, False: 132]
  |  Branch (337:15): [True: 0, False: 132]
  |  Branch (337:25): [True: 0, False: 132]
  |  Branch (337:35): [True: 0, False: 132]
  ------------------
  338|      0|        return 1;
  339|    132|    default:
  ------------------
  |  Branch (339:5): [True: 132, False: 0]
  ------------------
  340|    132|        return 0;
  341|    132|    }
  342|    132|}
unicode_formatter.c:is_sign_element:
  347|    132|{
  348|    132|    switch (c) {
  349|      0|    case ' ': case '+': case '-':
  ------------------
  |  Branch (349:5): [True: 0, False: 132]
  |  Branch (349:15): [True: 0, False: 132]
  |  Branch (349:25): [True: 0, False: 132]
  ------------------
  350|      0|        return 1;
  351|    132|    default:
  ------------------
  |  Branch (351:5): [True: 132, False: 0]
  ------------------
  352|    132|        return 0;
  353|    132|    }
  354|    132|}
unicode_formatter.c:get_integer:
  298|    132|{
  299|    132|    Py_ssize_t accumulator, digitval, pos = *ppos;
  300|    132|    int numdigits;
  301|    132|    int kind = PyUnicode_KIND(str);
  ------------------
  |  |  258|    132|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    264|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 132, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|    132|    const void *data = PyUnicode_DATA(str);
  ------------------
  |  |  284|    132|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|       |
  304|    132|    accumulator = numdigits = 0;
  305|    132|    for (; pos < end; pos++, numdigits++) {
  ------------------
  |  Branch (305:12): [True: 132, False: 0]
  ------------------
  306|    132|        digitval = Py_UNICODE_TODECIMAL(PyUnicode_READ(kind, data, pos));
  ------------------
  |  |  763|    132|#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
  ------------------
  307|    132|        if (digitval < 0)
  ------------------
  |  Branch (307:13): [True: 132, False: 0]
  ------------------
  308|    132|            break;
  309|       |        /*
  310|       |           Detect possible overflow before it happens:
  311|       |
  312|       |              accumulator * 10 + digitval > PY_SSIZE_T_MAX if and only if
  313|       |              accumulator > (PY_SSIZE_T_MAX - digitval) / 10.
  314|       |        */
  315|      0|        if (accumulator > (PY_SSIZE_T_MAX - digitval) / 10) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (315:13): [True: 0, False: 0]
  ------------------
  316|      0|            PyErr_Format(PyExc_ValueError,
  317|      0|                         "Too many decimal digits in format string");
  318|      0|            *ppos = pos;
  319|      0|            return -1;
  320|      0|        }
  321|      0|        accumulator = accumulator * 10 + digitval;
  322|      0|    }
  323|    132|    *ppos = pos;
  324|    132|    *result = accumulator;
  325|    132|    return numdigits;
  326|    132|}
unicode_formatter.c:format_long_internal:
 1199|    132|{
 1200|    132|    int result = -1;
 1201|    132|    Py_UCS4 maxchar = 127;
 1202|    132|    PyObject *tmp = NULL;
 1203|    132|    Py_ssize_t inumeric_chars;
 1204|    132|    Py_UCS4 sign_char = '\0';
 1205|    132|    Py_ssize_t n_digits;       /* count of digits need from the computed
 1206|       |                                  string */
 1207|    132|    Py_ssize_t n_remainder = 0; /* Used only for 'c' formatting, which
 1208|       |                                   produces non-digits */
 1209|    132|    Py_ssize_t n_prefix = 0;   /* Count of prefix chars, (e.g., '0x') */
 1210|    132|    Py_ssize_t n_total;
 1211|    132|    Py_ssize_t prefix = 0;
 1212|    132|    NumberFieldWidths spec;
 1213|    132|    long x;
 1214|       |
 1215|       |    /* Locale settings, either from the actual locale or
 1216|       |       from a hard-code pseudo-locale */
 1217|    132|    LocaleInfo locale = LocaleInfo_STATIC_INIT;
  ------------------
  |  |  684|    132|#define LocaleInfo_STATIC_INIT {0, 0, 0, 0}
  ------------------
 1218|       |
 1219|       |    /* no precision allowed on integers */
 1220|    132|    if (format->precision != -1) {
  ------------------
  |  Branch (1220:9): [True: 0, False: 132]
  ------------------
 1221|      0|        PyErr_SetString(PyExc_ValueError,
 1222|      0|                        "Precision not allowed in integer format specifier");
 1223|      0|        goto done;
 1224|      0|    }
 1225|       |    /* no negative zero coercion on integers */
 1226|    132|    if (format->no_neg_0) {
  ------------------
  |  Branch (1226:9): [True: 0, False: 132]
  ------------------
 1227|      0|        PyErr_SetString(PyExc_ValueError,
 1228|      0|                        "Negative zero coercion (z) not allowed in integer"
 1229|      0|                        " format specifier");
 1230|      0|        goto done;
 1231|      0|    }
 1232|       |
 1233|       |    /* special case for character formatting */
 1234|    132|    if (format->type == 'c') {
  ------------------
  |  Branch (1234:9): [True: 0, False: 132]
  ------------------
 1235|       |        /* error to specify a sign */
 1236|      0|        if (format->sign != '\0') {
  ------------------
  |  Branch (1236:13): [True: 0, False: 0]
  ------------------
 1237|      0|            PyErr_SetString(PyExc_ValueError,
 1238|      0|                            "Sign not allowed with integer"
 1239|      0|                            " format specifier 'c'");
 1240|      0|            goto done;
 1241|      0|        }
 1242|       |        /* error to request alternate format */
 1243|      0|        if (format->alternate) {
  ------------------
  |  Branch (1243:13): [True: 0, False: 0]
  ------------------
 1244|      0|            PyErr_SetString(PyExc_ValueError,
 1245|      0|                            "Alternate form (#) not allowed with integer"
 1246|      0|                            " format specifier 'c'");
 1247|      0|            goto done;
 1248|      0|        }
 1249|       |
 1250|       |        /* taken from unicodeobject.c formatchar() */
 1251|       |        /* Integer input truncated to a character */
 1252|      0|        x = PyLong_AsLong(value);
 1253|      0|        if (x == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1253:13): [True: 0, False: 0]
  |  Branch (1253:24): [True: 0, False: 0]
  ------------------
 1254|      0|            goto done;
 1255|      0|        if (x < 0 || x > 0x10ffff) {
  ------------------
  |  Branch (1255:13): [True: 0, False: 0]
  |  Branch (1255:22): [True: 0, False: 0]
  ------------------
 1256|      0|            PyErr_SetString(PyExc_OverflowError,
 1257|      0|                            "%c arg not in range(0x110000)");
 1258|      0|            goto done;
 1259|      0|        }
 1260|      0|        tmp = PyUnicode_FromOrdinal(x);
 1261|      0|        inumeric_chars = 0;
 1262|      0|        n_digits = 1;
 1263|      0|        maxchar = Py_MAX(maxchar, (Py_UCS4)x);
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1264|       |
 1265|       |        /* As a sort-of hack, we tell calc_number_widths that we only
 1266|       |           have "remainder" characters. calc_number_widths thinks
 1267|       |           these are characters that don't get formatted, only copied
 1268|       |           into the output string. We do this for 'c' formatting,
 1269|       |           because the characters are likely to be non-digits. */
 1270|      0|        n_remainder = 1;
 1271|      0|    }
 1272|    132|    else {
 1273|    132|        int base;
 1274|    132|        int leading_chars_to_skip = 0;  /* Number of characters added by
 1275|       |                                           PyNumber_ToBase that we want to
 1276|       |                                           skip over. */
 1277|       |
 1278|       |        /* Compute the base and how many characters will be added by
 1279|       |           PyNumber_ToBase */
 1280|    132|        switch (format->type) {
 1281|      0|        case 'b':
  ------------------
  |  Branch (1281:9): [True: 0, False: 132]
  ------------------
 1282|      0|            base = 2;
 1283|      0|            leading_chars_to_skip = 2; /* 0b */
 1284|      0|            break;
 1285|      0|        case 'o':
  ------------------
  |  Branch (1285:9): [True: 0, False: 132]
  ------------------
 1286|      0|            base = 8;
 1287|      0|            leading_chars_to_skip = 2; /* 0o */
 1288|      0|            break;
 1289|    132|        case 'x':
  ------------------
  |  Branch (1289:9): [True: 132, False: 0]
  ------------------
 1290|    132|        case 'X':
  ------------------
  |  Branch (1290:9): [True: 0, False: 132]
  ------------------
 1291|    132|            base = 16;
 1292|    132|            leading_chars_to_skip = 2; /* 0x */
 1293|    132|            break;
 1294|      0|        default:  /* shouldn't be needed, but stops a compiler warning */
  ------------------
  |  Branch (1294:9): [True: 0, False: 132]
  ------------------
 1295|      0|        case 'd':
  ------------------
  |  Branch (1295:9): [True: 0, False: 132]
  ------------------
 1296|      0|        case 'n':
  ------------------
  |  Branch (1296:9): [True: 0, False: 132]
  ------------------
 1297|      0|            base = 10;
 1298|      0|            break;
 1299|    132|        }
 1300|       |
 1301|    132|        if (format->sign != '+' && format->sign != ' '
  ------------------
  |  Branch (1301:13): [True: 132, False: 0]
  |  Branch (1301:36): [True: 132, False: 0]
  ------------------
 1302|    132|            && format->width == -1
  ------------------
  |  Branch (1302:16): [True: 132, False: 0]
  ------------------
 1303|    132|            && format->type != 'X' && format->type != 'n'
  ------------------
  |  Branch (1303:16): [True: 132, False: 0]
  |  Branch (1303:39): [True: 132, False: 0]
  ------------------
 1304|    132|            && !format->thousands_separators
  ------------------
  |  Branch (1304:16): [True: 132, False: 0]
  ------------------
 1305|    132|            && PyLong_CheckExact(value))
  ------------------
  |  |   14|    132|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    132|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    132|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    132|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 132, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1306|    132|        {
 1307|       |            /* Fast path */
 1308|    132|            return _PyLong_FormatWriter(writer, value, base, format->alternate);
 1309|    132|        }
 1310|       |
 1311|       |        /* The number of prefix chars is the same as the leading
 1312|       |           chars to skip */
 1313|      0|        if (format->alternate)
  ------------------
  |  Branch (1313:13): [True: 0, False: 0]
  ------------------
 1314|      0|            n_prefix = leading_chars_to_skip;
 1315|       |
 1316|       |        /* Do the hard part, converting to a string in a given base */
 1317|      0|        tmp = _PyLong_Format(value, base);
 1318|      0|        if (tmp == NULL)
  ------------------
  |  Branch (1318:13): [True: 0, False: 0]
  ------------------
 1319|      0|            goto done;
 1320|       |
 1321|      0|        inumeric_chars = 0;
 1322|      0|        n_digits = PyUnicode_GET_LENGTH(tmp);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1323|       |
 1324|      0|        prefix = inumeric_chars;
 1325|       |
 1326|       |        /* Is a sign character present in the output?  If so, remember it
 1327|       |           and skip it */
 1328|      0|        if (PyUnicode_READ_CHAR(tmp, inumeric_chars) == '-') {
  ------------------
  |  |  381|      0|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1328:13): [True: 0, False: 0]
  ------------------
 1329|      0|            sign_char = '-';
 1330|      0|            ++prefix;
 1331|      0|            ++leading_chars_to_skip;
 1332|      0|        }
 1333|       |
 1334|       |        /* Skip over the leading chars (0x, 0b, etc.) */
 1335|      0|        n_digits -= leading_chars_to_skip;
 1336|      0|        inumeric_chars += leading_chars_to_skip;
 1337|      0|    }
 1338|       |
 1339|       |    /* Determine the grouping, separator, and decimal point, if any. */
 1340|      0|    if (get_locale_info(format->type == 'n' ? LT_CURRENT_LOCALE :
  ------------------
  |  Branch (1340:9): [True: 0, False: 0]
  |  Branch (1340:25): [True: 0, False: 0]
  ------------------
 1341|      0|                        format->thousands_separators, 0,
 1342|      0|                        &locale) == -1)
 1343|      0|        goto done;
 1344|       |
 1345|       |    /* Calculate how much memory we'll need. */
 1346|      0|    n_total = calc_number_widths(&spec, n_prefix, sign_char, inumeric_chars,
 1347|      0|                                 inumeric_chars + n_digits, n_remainder, 0, 0,
 1348|      0|                                 &locale, format, &maxchar);
 1349|      0|    if (n_total == -1) {
  ------------------
  |  Branch (1349:9): [True: 0, False: 0]
  ------------------
 1350|      0|        goto done;
 1351|      0|    }
 1352|       |
 1353|       |    /* Allocate the memory. */
 1354|      0|    if (_PyUnicodeWriter_Prepare(writer, n_total, maxchar) == -1)
  ------------------
  |  |  562|      0|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  563|      0|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|      0|     ? 0                                                              \
  |  |  565|      0|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (1354:9): [True: 0, False: 0]
  ------------------
 1355|      0|        goto done;
 1356|       |
 1357|       |    /* Populate the memory. */
 1358|      0|    result = fill_number(writer, &spec,
 1359|      0|                         tmp, inumeric_chars,
 1360|      0|                         tmp, prefix, format->fill_char,
 1361|      0|                         &locale, format->type == 'X');
 1362|       |
 1363|      0|done:
 1364|      0|    Py_XDECREF(tmp);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1365|      0|    free_locale_info(&locale);
 1366|      0|    return result;
 1367|      0|}

_PyUnicodeWriter_Init:
  120|   239k|{
  121|   239k|    memset(writer, 0, sizeof(*writer));
  122|       |
  123|       |    /* ASCII is the bare minimum */
  124|   239k|    writer->min_char = 127;
  125|       |
  126|       |    /* use a kind value smaller than PyUnicode_1BYTE_KIND so
  127|       |       _PyUnicodeWriter_PrepareKind() will copy the buffer. */
  128|   239k|    assert(writer->kind == 0);
  ------------------
  |  Branch (128:5): [True: 239k, False: 0]
  ------------------
  129|   239k|    assert(writer->kind < PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (129:5): [True: 239k, False: 0]
  ------------------
  130|   239k|}
PyUnicodeWriter_Create:
  135|  82.4k|{
  136|  82.4k|    if (length < 0) {
  ------------------
  |  Branch (136:9): [True: 0, False: 82.4k]
  ------------------
  137|      0|        PyErr_SetString(PyExc_ValueError,
  138|      0|                        "length must be positive");
  139|      0|        return NULL;
  140|      0|    }
  141|       |
  142|  82.4k|    const size_t size = sizeof(_PyUnicodeWriter);
  143|  82.4k|    PyUnicodeWriter *pub_writer;
  144|  82.4k|    pub_writer = _Py_FREELIST_POP_MEM(unicode_writers);
  ------------------
  |  |   48|  82.4k|    _PyFreeList_PopMem(&_Py_freelists_GET()->NAME)
  ------------------
  145|  82.4k|    if (pub_writer == NULL) {
  ------------------
  |  Branch (145:9): [True: 2.40k, False: 80.0k]
  ------------------
  146|  2.40k|        pub_writer = (PyUnicodeWriter *)PyMem_Malloc(size);
  147|  2.40k|        if (pub_writer == NULL) {
  ------------------
  |  Branch (147:13): [True: 0, False: 2.40k]
  ------------------
  148|      0|            return (PyUnicodeWriter *)PyErr_NoMemory();
  149|      0|        }
  150|  2.40k|    }
  151|  82.4k|    _PyUnicodeWriter *writer = (_PyUnicodeWriter *)pub_writer;
  152|       |
  153|  82.4k|    _PyUnicodeWriter_Init(writer);
  154|       |    // The buffer is created lazily at the first write, except if
  155|       |    // the read-only optimization is used.
  156|  82.4k|    writer->min_length = length;
  157|  82.4k|    writer->overallocate = 1;
  158|       |
  159|  82.4k|    return pub_writer;
  160|  82.4k|}
_PyUnicodeWriter_InitWithBuffer:
  176|   178k|{
  177|   178k|    assert(PyUnstable_Object_IsUniquelyReferenced(buffer));
  ------------------
  |  Branch (177:5): [True: 178k, False: 0]
  ------------------
  178|       |
  179|   178k|    memset(writer, 0, sizeof(*writer));
  180|   178k|    writer->buffer = buffer;
  181|   178k|    _PyUnicodeWriter_Update(writer);
  182|   178k|    writer->min_length = writer->size;
  183|       |    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (183:5): [True: 178k, False: 0]
  ------------------
  184|   178k|}
_PyUnicodeWriter_PrepareInternal:
  190|   279k|{
  191|   279k|    assert(length >= 0);
  ------------------
  |  Branch (191:5): [True: 279k, False: 0]
  ------------------
  192|   279k|    assert(maxchar <= _Py_MAX_UNICODE);
  ------------------
  |  Branch (192:5): [True: 279k, False: 0]
  ------------------
  193|       |
  194|       |    /* ensure that the _PyUnicodeWriter_Prepare macro was used */
  195|   279k|    assert((maxchar > writer->maxchar && length >= 0)
  ------------------
  |  Branch (195:5): [True: 229k, False: 49.7k]
  |  Branch (195:5): [True: 229k, False: 0]
  |  Branch (195:5): [True: 49.7k, False: 0]
  ------------------
  196|   279k|           || length > 0);
  197|       |
  198|   279k|    if (length > PY_SSIZE_T_MAX - writer->pos) {
  ------------------
  |  |  137|   279k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (198:9): [True: 0, False: 279k]
  ------------------
  199|      0|        PyErr_NoMemory();
  200|      0|        return -1;
  201|      0|    }
  202|   279k|    Py_ssize_t alloc = writer->pos + length;
  203|       |
  204|   279k|    maxchar = Py_MAX(maxchar, writer->min_char);
  ------------------
  |  |  126|   279k|       __extension__ \
  |  |  127|   279k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   279k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   279k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   279k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   279k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 93.8k, False: 185k]
  |  |  ------------------
  ------------------
  205|       |
  206|   279k|    PyObject *newbuffer;
  207|   279k|    if (writer->buffer == NULL) {
  ------------------
  |  Branch (207:9): [True: 140k, False: 139k]
  ------------------
  208|   140k|        assert(!writer->readonly);
  ------------------
  |  Branch (208:9): [True: 140k, False: 0]
  ------------------
  209|       |        // Do not overallocate at the first allocation, but use min_length
  210|   140k|        if (alloc < writer->min_length)
  ------------------
  |  Branch (210:13): [True: 109k, False: 30.4k]
  ------------------
  211|   109k|            alloc = writer->min_length;
  212|       |
  213|   140k|        writer->buffer = PyUnicode_New(alloc, maxchar);
  214|   140k|        if (writer->buffer == NULL)
  ------------------
  |  Branch (214:13): [True: 0, False: 140k]
  ------------------
  215|      0|            return -1;
  216|   140k|    }
  217|   139k|    else if (alloc > writer->size) {
  ------------------
  |  Branch (217:14): [True: 97.5k, False: 41.5k]
  ------------------
  218|       |        // Do not overallocate at the first allocation, but use min_length
  219|  97.5k|        int overallocate = (writer->overallocate && !writer->readonly);
  ------------------
  |  Branch (219:29): [True: 93.1k, False: 4.44k]
  |  Branch (219:53): [True: 15.5k, False: 77.5k]
  ------------------
  220|  97.5k|        if (overallocate
  ------------------
  |  Branch (220:13): [True: 15.5k, False: 82.0k]
  ------------------
  221|  15.5k|            && alloc <= (PY_SSIZE_T_MAX - alloc / OVERALLOCATE_FACTOR)) {
  ------------------
  |  |  137|  15.5k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
                          && alloc <= (PY_SSIZE_T_MAX - alloc / OVERALLOCATE_FACTOR)) {
  ------------------
  |  |   52|  15.5k|#  define OVERALLOCATE_FACTOR 4
  ------------------
  |  Branch (221:16): [True: 15.5k, False: 0]
  ------------------
  222|       |            /* overallocate to limit the number of realloc() */
  223|  15.5k|            alloc += alloc / OVERALLOCATE_FACTOR;
  ------------------
  |  |   52|  15.5k|#  define OVERALLOCATE_FACTOR 4
  ------------------
  224|  15.5k|        }
  225|  97.5k|        if (alloc < writer->min_length)
  ------------------
  |  Branch (225:13): [True: 63.8k, False: 33.7k]
  ------------------
  226|  63.8k|            alloc = writer->min_length;
  227|       |
  228|  97.5k|        if (maxchar > writer->maxchar || writer->readonly) {
  ------------------
  |  Branch (228:13): [True: 47.8k, False: 49.7k]
  |  Branch (228:42): [True: 31.8k, False: 17.8k]
  ------------------
  229|       |            /* resize + widen */
  230|  79.7k|            maxchar = Py_MAX(maxchar, writer->maxchar);
  ------------------
  |  |  126|  79.7k|       __extension__ \
  |  |  127|  79.7k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  79.7k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  79.7k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  79.7k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  79.7k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 47.8k, False: 31.8k]
  |  |  ------------------
  ------------------
  231|  79.7k|            newbuffer = PyUnicode_New(alloc, maxchar);
  232|  79.7k|            if (newbuffer == NULL)
  ------------------
  |  Branch (232:17): [True: 0, False: 79.7k]
  ------------------
  233|      0|                return -1;
  234|  79.7k|            _PyUnicode_FastCopyCharacters(newbuffer, 0,
  235|  79.7k|                                          writer->buffer, 0, writer->pos);
  236|  79.7k|            writer->readonly = 0;
  237|  79.7k|            Py_DECREF(writer->buffer);
  ------------------
  |  |  430|  79.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  79.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  79.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|  79.7k|            writer->buffer = newbuffer;
  239|  79.7k|        }
  240|  17.8k|        else {
  241|  17.8k|            newbuffer = _PyUnicode_ResizeCompact(writer->buffer, alloc);
  242|  17.8k|            if (newbuffer == NULL)
  ------------------
  |  Branch (242:17): [True: 0, False: 17.8k]
  ------------------
  243|      0|                return -1;
  244|  17.8k|            writer->buffer = newbuffer;
  245|  17.8k|        }
  246|  97.5k|    }
  247|  41.5k|    else if (maxchar > writer->maxchar) {
  ------------------
  |  Branch (247:14): [True: 41.5k, False: 0]
  ------------------
  248|  41.5k|        assert(!writer->readonly);
  ------------------
  |  Branch (248:9): [True: 41.5k, False: 0]
  ------------------
  249|  41.5k|        newbuffer = PyUnicode_New(writer->size, maxchar);
  250|  41.5k|        if (newbuffer == NULL)
  ------------------
  |  Branch (250:13): [True: 0, False: 41.5k]
  ------------------
  251|      0|            return -1;
  252|  41.5k|        _PyUnicode_FastCopyCharacters(newbuffer, 0,
  253|  41.5k|                                      writer->buffer, 0, writer->pos);
  254|  41.5k|        Py_SETREF(writer->buffer, newbuffer);
  ------------------
  |  |  354|  41.5k|    do { \
  |  |  355|  41.5k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  41.5k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  41.5k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  41.5k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  41.5k|        *_tmp_dst_ptr = (src); \
  |  |  358|  41.5k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  41.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  41.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  41.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  41.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 41.5k]
  |  |  ------------------
  ------------------
  255|  41.5k|    }
  256|   279k|    _PyUnicodeWriter_Update(writer);
  257|   279k|    return 0;
  258|       |
  259|   279k|#undef OVERALLOCATE_FACTOR
  260|   279k|}
_PyUnicodeWriter_WriteChar:
  286|  62.6k|{
  287|  62.6k|    return _PyUnicodeWriter_WriteCharInline(writer, ch);
  288|  62.6k|}
PyUnicodeWriter_WriteChar:
  293|  62.6k|{
  294|  62.6k|    if (ch > _Py_MAX_UNICODE) {
  ------------------
  |  |   17|  62.6k|#define _Py_MAX_UNICODE 0x10ffff
  ------------------
  |  Branch (294:9): [True: 0, False: 62.6k]
  ------------------
  295|      0|        PyErr_SetString(PyExc_ValueError,
  296|      0|                        "character must be in range(0x110000)");
  297|      0|        return -1;
  298|      0|    }
  299|       |
  300|  62.6k|    return _PyUnicodeWriter_WriteChar((_PyUnicodeWriter*)writer, ch);
  301|  62.6k|}
_PyUnicodeWriter_WriteStr:
  306|   298k|{
  307|   298k|    assert(PyUnicode_Check(str));
  ------------------
  |  Branch (307:5): [True: 298k, False: 0]
  ------------------
  308|       |
  309|   298k|    Py_ssize_t len = PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|   298k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   298k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   298k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|   298k|    if (len == 0) {
  ------------------
  |  Branch (310:9): [True: 7.27k, False: 290k]
  ------------------
  311|  7.27k|        return 0;
  312|  7.27k|    }
  313|   290k|    Py_UCS4 maxchar = PyUnicode_MAX_CHAR_VALUE(str);
  ------------------
  |  |  405|   290k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   290k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   290k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|       |
  315|   290k|    if (maxchar > writer->maxchar || len > writer->size - writer->pos) {
  ------------------
  |  Branch (315:9): [True: 67.3k, False: 223k]
  |  Branch (315:38): [True: 28.5k, False: 194k]
  ------------------
  316|  95.9k|        if (writer->buffer == NULL) {
  ------------------
  |  Branch (316:13): [True: 37.0k, False: 58.9k]
  ------------------
  317|  37.0k|            assert(_PyUnicode_CheckConsistency(str, 1));
  ------------------
  |  Branch (317:13): [True: 37.0k, False: 0]
  ------------------
  318|  37.0k|            writer->readonly = 1;
  319|  37.0k|            writer->buffer = Py_NewRef(str);
  ------------------
  |  |  550|  37.0k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  37.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|  37.0k|            _PyUnicodeWriter_Update(writer);
  321|  37.0k|            writer->pos += len;
  322|       |            // The next write will create a new buffer and copy the string
  323|  37.0k|            return 0;
  324|  37.0k|        }
  325|  58.9k|        if (_PyUnicodeWriter_PrepareInternal(writer, len, maxchar) == -1)
  ------------------
  |  Branch (325:13): [True: 0, False: 58.9k]
  ------------------
  326|      0|            return -1;
  327|  58.9k|    }
  328|       |
  329|   290k|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (329:5): [True: 253k, False: 0]
  ------------------
  330|   253k|    _PyUnicode_FastCopyCharacters(writer->buffer, writer->pos,
  331|   253k|                                  str, 0, len);
  332|   253k|    writer->pos += len;
  333|   253k|    return 0;
  334|   253k|}
PyUnicodeWriter_WriteStr:
  339|   247k|{
  340|   247k|    PyTypeObject *type = Py_TYPE(obj);
  ------------------
  |  |  213|   247k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   247k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   247k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|   247k|    if (type == &PyUnicode_Type) {
  ------------------
  |  Branch (341:9): [True: 247k, False: 0]
  ------------------
  342|   247k|        return _PyUnicodeWriter_WriteStr((_PyUnicodeWriter*)writer, obj);
  343|   247k|    }
  344|       |
  345|      0|    if (type == &PyLong_Type) {
  ------------------
  |  Branch (345:9): [True: 0, False: 0]
  ------------------
  346|      0|        return _PyLong_FormatWriter((_PyUnicodeWriter*)writer, obj, 10, 0);
  347|      0|    }
  348|       |
  349|      0|    PyObject *str = PyObject_Str(obj);
  350|      0|    if (str == NULL) {
  ------------------
  |  Branch (350:9): [True: 0, False: 0]
  ------------------
  351|      0|        return -1;
  352|      0|    }
  353|       |
  354|      0|    int res = _PyUnicodeWriter_WriteStr((_PyUnicodeWriter*)writer, str);
  355|      0|    Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|      0|    return res;
  357|      0|}
_PyUnicodeWriter_WriteSubstring:
  385|  52.4k|{
  386|  52.4k|    assert(0 <= start);
  ------------------
  |  Branch (386:5): [True: 52.4k, False: 0]
  ------------------
  387|  52.4k|    assert(end <= PyUnicode_GET_LENGTH(str));
  ------------------
  |  Branch (387:5): [True: 52.4k, False: 0]
  ------------------
  388|  52.4k|    assert(start <= end);
  ------------------
  |  Branch (388:5): [True: 52.4k, False: 0]
  ------------------
  389|       |
  390|  52.4k|    if (start == 0 && end == PyUnicode_GET_LENGTH(str))
  ------------------
  |  |  299|  20.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  20.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (390:9): [True: 20.4k, False: 32.0k]
  |  Branch (390:23): [True: 20.3k, False: 21]
  ------------------
  391|  20.3k|        return _PyUnicodeWriter_WriteStr(writer, str);
  392|       |
  393|  32.0k|    Py_ssize_t len = end - start;
  394|  32.0k|    if (len == 0) {
  ------------------
  |  Branch (394:9): [True: 0, False: 32.0k]
  ------------------
  395|      0|        return 0;
  396|      0|    }
  397|       |
  398|  32.0k|    Py_UCS4 maxchar;
  399|  32.0k|    if (PyUnicode_MAX_CHAR_VALUE(str) > writer->maxchar) {
  ------------------
  |  |  405|  32.0k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (399:9): [True: 26.4k, False: 5.52k]
  ------------------
  400|  26.4k|        maxchar = _PyUnicode_FindMaxChar(str, start, end);
  401|  26.4k|    }
  402|  5.52k|    else {
  403|  5.52k|        maxchar = writer->maxchar;
  404|  5.52k|    }
  405|  32.0k|    if (_PyUnicodeWriter_Prepare(writer, len, maxchar) < 0) {
  ------------------
  |  |  562|  32.0k|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 5.52k, False: 26.4k]
  |  |  ------------------
  |  |  563|  32.0k|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 21, False: 5.50k]
  |  |  ------------------
  |  |  564|  32.0k|     ? 0                                                              \
  |  |  565|  32.0k|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 32.0k]
  |  |  ------------------
  |  |  566|  32.0k|        ? 0                                                           \
  |  |  567|  32.0k|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (405:9): [True: 0, False: 32.0k]
  ------------------
  406|      0|        return -1;
  407|      0|    }
  408|  32.0k|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (408:5): [True: 32.0k, False: 0]
  ------------------
  409|       |
  410|  32.0k|    _PyUnicode_FastCopyCharacters(writer->buffer, writer->pos,
  411|  32.0k|                                  str, start, len);
  412|  32.0k|    writer->pos += len;
  413|  32.0k|    return 0;
  414|  32.0k|}
PyUnicodeWriter_WriteSubstring:
  420|  52.3k|{
  421|  52.3k|    if (!PyUnicode_Check(str)) {
  ------------------
  |  |  103|  52.3k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  52.3k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (421:9): [True: 0, False: 52.3k]
  ------------------
  422|      0|        PyErr_Format(PyExc_TypeError, "expect str, not %T", str);
  423|      0|        return -1;
  424|      0|    }
  425|  52.3k|    if (start < 0 || start > end) {
  ------------------
  |  Branch (425:9): [True: 0, False: 52.3k]
  |  Branch (425:22): [True: 0, False: 52.3k]
  ------------------
  426|      0|        PyErr_Format(PyExc_ValueError, "invalid start argument");
  427|      0|        return -1;
  428|      0|    }
  429|  52.3k|    if (end > PyUnicode_GET_LENGTH(str)) {
  ------------------
  |  |  299|  52.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (429:9): [True: 0, False: 52.3k]
  ------------------
  430|      0|        PyErr_Format(PyExc_ValueError, "invalid end argument");
  431|      0|        return -1;
  432|      0|    }
  433|       |
  434|  52.3k|    return _PyUnicodeWriter_WriteSubstring((_PyUnicodeWriter*)writer, str,
  435|  52.3k|                                           start, end);
  436|  52.3k|}
_PyUnicodeWriter_WriteASCIIString:
  442|   263k|{
  443|   263k|    if (len == -1)
  ------------------
  |  Branch (443:9): [True: 0, False: 263k]
  ------------------
  444|      0|        len = strlen(ascii);
  445|       |
  446|   263k|    if (len == 0) {
  ------------------
  |  Branch (446:9): [True: 0, False: 263k]
  ------------------
  447|      0|        return 0;
  448|      0|    }
  449|       |
  450|   263k|    assert(ucs1lib_find_max_char((const Py_UCS1*)ascii, (const Py_UCS1*)ascii + len) < 128);
  ------------------
  |  Branch (450:5): [True: 263k, False: 0]
  ------------------
  451|       |
  452|   263k|    if (writer->buffer == NULL && !writer->overallocate) {
  ------------------
  |  Branch (452:9): [True: 93.2k, False: 170k]
  |  Branch (452:35): [True: 7.09k, False: 86.1k]
  ------------------
  453|  7.09k|        PyObject *str;
  454|       |
  455|  7.09k|        str = _PyUnicode_FromASCII(ascii, len);
  456|  7.09k|        if (str == NULL)
  ------------------
  |  Branch (456:13): [True: 0, False: 7.09k]
  ------------------
  457|      0|            return -1;
  458|       |
  459|  7.09k|        writer->readonly = 1;
  460|  7.09k|        writer->buffer = str;
  461|  7.09k|        _PyUnicodeWriter_Update(writer);
  462|  7.09k|        writer->pos += len;
  463|  7.09k|        return 0;
  464|  7.09k|    }
  465|       |
  466|   256k|    if (_PyUnicodeWriter_Prepare(writer, len, 127) == -1) {
  ------------------
  |  |  562|   256k|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 170k, False: 86.1k]
  |  |  ------------------
  |  |  563|   256k|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 160k, False: 9.58k]
  |  |  ------------------
  |  |  564|   256k|     ? 0                                                              \
  |  |  565|   256k|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 95.7k]
  |  |  ------------------
  |  |  566|  95.7k|        ? 0                                                           \
  |  |  567|  95.7k|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (466:9): [True: 0, False: 256k]
  ------------------
  467|      0|        return -1;
  468|      0|    }
  469|   256k|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (469:5): [True: 256k, False: 0]
  ------------------
  470|       |
  471|   256k|    switch (writer->kind)
  472|   256k|    {
  473|   248k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (473:5): [True: 248k, False: 8.00k]
  ------------------
  474|   248k|    {
  475|   248k|        const Py_UCS1 *str = (const Py_UCS1 *)ascii;
  476|   248k|        Py_UCS1 *data = writer->data;
  477|       |
  478|   248k|        memcpy(data + writer->pos, str, len);
  479|   248k|        break;
  480|      0|    }
  481|  7.63k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (481:5): [True: 7.63k, False: 248k]
  ------------------
  482|  7.63k|    {
  483|  7.63k|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|  7.63k|    do {                                                \
  |  |   49|  7.63k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  7.63k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  7.63k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  7.63k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  7.63k|        const from_type *_unrolled_end =                \
  |  |   54|  7.63k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  7.63k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  7.88k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 242, False: 7.63k]
  |  |  ------------------
  |  |   56|    242|            _to[0] = (to_type) _iter[0];                \
  |  |   57|    242|            _to[1] = (to_type) _iter[1];                \
  |  |   58|    242|            _to[2] = (to_type) _iter[2];                \
  |  |   59|    242|            _to[3] = (to_type) _iter[3];                \
  |  |   60|    242|            _iter += 4; _to += 4;                       \
  |  |   61|    242|        }                                               \
  |  |   62|  15.2k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 7.64k, False: 7.63k]
  |  |  ------------------
  |  |   63|  7.64k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  7.63k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 7.63k]
  |  |  ------------------
  ------------------
  484|  7.63k|            Py_UCS1, Py_UCS2,
  485|  7.63k|            ascii, ascii + len,
  486|  7.63k|            (Py_UCS2 *)writer->data + writer->pos);
  487|  7.63k|        break;
  488|      0|    }
  489|    369|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (489:5): [True: 369, False: 255k]
  ------------------
  490|    369|    {
  491|    369|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|    369|    do {                                                \
  |  |   49|    369|        to_type *_to = (to_type *)(to);                 \
  |  |   50|    369|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|    369|        const from_type *_end = (const from_type *)(end);\
  |  |   52|    369|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|    369|        const from_type *_unrolled_end =                \
  |  |   54|    369|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|    369|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|    419|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 50, False: 369]
  |  |  ------------------
  |  |   56|     50|            _to[0] = (to_type) _iter[0];                \
  |  |   57|     50|            _to[1] = (to_type) _iter[1];                \
  |  |   58|     50|            _to[2] = (to_type) _iter[2];                \
  |  |   59|     50|            _to[3] = (to_type) _iter[3];                \
  |  |   60|     50|            _iter += 4; _to += 4;                       \
  |  |   61|     50|        }                                               \
  |  |   62|    739|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 370, False: 369]
  |  |  ------------------
  |  |   63|    370|            *_to++ = (to_type) *_iter++;                \
  |  |   64|    369|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 369]
  |  |  ------------------
  ------------------
  492|    369|            Py_UCS1, Py_UCS4,
  493|    369|            ascii, ascii + len,
  494|    369|            (Py_UCS4 *)writer->data + writer->pos);
  495|    369|        break;
  496|      0|    }
  497|      0|    default:
  ------------------
  |  Branch (497:5): [True: 0, False: 256k]
  ------------------
  498|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  499|   256k|    }
  500|       |
  501|   256k|    writer->pos += len;
  502|   256k|    return 0;
  503|   256k|}
PyUnicodeWriter_WriteUTF8:
  523|   151k|{
  524|   151k|    if (size < 0) {
  ------------------
  |  Branch (524:9): [True: 151k, False: 0]
  ------------------
  525|   151k|        size = strlen(str);
  526|   151k|    }
  527|       |
  528|   151k|    _PyUnicodeWriter *_writer = (_PyUnicodeWriter*)writer;
  529|   151k|    Py_ssize_t old_pos = _writer->pos;
  530|   151k|    int res = _PyUnicode_DecodeUTF8Writer(_writer, str, size,
  531|   151k|                                          _Py_ERROR_STRICT, NULL, NULL);
  532|   151k|    if (res < 0) {
  ------------------
  |  Branch (532:9): [True: 0, False: 151k]
  ------------------
  533|      0|        _writer->pos = old_pos;
  534|      0|    }
  535|   151k|    return res;
  536|   151k|}
_PyUnicodeWriter_Finish:
  583|   414k|{
  584|       |#ifdef Py_DEBUG
  585|       |    // Check for buffer overflow
  586|       |    if (writer->buffer != NULL) {
  587|       |        Py_ssize_t pos = PyUnicode_GET_LENGTH(writer->buffer);
  588|       |        Py_UCS4 ch = PyUnicode_READ_CHAR(writer->buffer, pos);
  589|       |        if (ch != 0) {
  590|       |            _Py_FatalErrorFormat(__func__,
  591|       |                                 "Buffer overflow detected in "
  592|       |                                 "PyUnicodeWriter %p at position %zd",
  593|       |                                 writer, pos);
  594|       |        }
  595|       |    }
  596|       |#endif
  597|       |
  598|   414k|    PyObject *str = writer->buffer;
  599|   414k|    writer->buffer = NULL;
  600|       |
  601|   414k|    Py_ssize_t final_size = writer->pos;
  602|   414k|    if (final_size == 0) {
  ------------------
  |  Branch (602:9): [True: 3.25k, False: 411k]
  ------------------
  603|  3.25k|        PyObject *empty = _PyUnicode_GetEmpty();
  604|  3.25k|        Py_XDECREF(str);  // writer->buffer can be NULL if the position is 0
  ------------------
  |  |  524|  3.25k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|  3.25k|        return empty;
  606|  3.25k|    }
  607|       |
  608|   411k|    Py_ssize_t length = PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|   411k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   411k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   411k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|   411k|    if (final_size == 1 && PyUnicode_KIND(str) == PyUnicode_1BYTE_KIND) {
  ------------------
  |  |  258|  51.6k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   103k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 51.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (609:9): [True: 51.6k, False: 360k]
  |  Branch (609:28): [True: 27.0k, False: 24.6k]
  ------------------
  610|  27.0k|        assert(length >= 1);
  ------------------
  |  Branch (610:9): [True: 27.0k, False: 0]
  ------------------
  611|  27.0k|        const Py_UCS1 *data = PyUnicode_1BYTE_DATA(str);
  ------------------
  |  |  291|  27.0k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  27.0k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  612|  27.0k|        Py_UCS1 ch = data[0];
  613|  27.0k|        PyObject *latin1_char = _Py_LATIN1_CHR(ch);
  ------------------
  |  |  940|  27.0k|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 12.8k, False: 14.2k]
  |  |  ------------------
  |  |  941|  27.0k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|  12.8k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.8k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|  27.0k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|  14.2k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  14.2k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  614|  27.0k|        Py_DECREF(str);
  ------------------
  |  |  430|  27.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  615|  27.0k|        return latin1_char;
  616|  27.0k|    }
  617|       |
  618|   384k|    if (!writer->readonly && length != final_size) {
  ------------------
  |  Branch (618:9): [True: 371k, False: 12.9k]
  |  Branch (618:30): [True: 143k, False: 227k]
  ------------------
  619|   143k|        PyObject *str2 = _PyUnicode_ResizeCompact(str, final_size);
  620|   143k|        if (str2 == NULL) {
  ------------------
  |  Branch (620:13): [True: 0, False: 143k]
  ------------------
  621|      0|            Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|      0|            return NULL;
  623|      0|        }
  624|   143k|        str = str2;
  625|   143k|    }
  626|       |
  627|   384k|    assert(_PyUnicode_CheckConsistency(str, 1));
  ------------------
  |  Branch (627:5): [True: 384k, False: 0]
  ------------------
  628|   384k|    return str;
  629|   384k|}
PyUnicodeWriter_Finish:
  634|  82.4k|{
  635|  82.4k|    PyObject *str = _PyUnicodeWriter_Finish((_PyUnicodeWriter*)writer);
  636|  82.4k|    assert(((_PyUnicodeWriter*)writer)->buffer == NULL);
  ------------------
  |  Branch (636:5): [True: 82.4k, False: 0]
  ------------------
  637|  82.4k|    _Py_FREELIST_FREE(unicode_writers, writer, PyMem_Free);
  ------------------
  |  |   35|  82.4k|    _PyFreeList_Free(&_Py_freelists_GET()->NAME, _PyObject_CAST(op), \
  |  |  ------------------
  |  |  |  |  171|  82.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  82.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   36|  82.4k|                     Py_ ## NAME ## _MAXFREELIST, freefunc)
  |  |  ------------------
  |  |  |  |   29|  82.4k|#  define Py_unicode_writers_MAXFREELIST 1
  |  |  ------------------
  ------------------
  638|  82.4k|    return str;
  639|  82.4k|}
_PyUnicodeWriter_Dealloc:
  644|  3.36k|{
  645|       |    Py_CLEAR(writer->buffer);
  ------------------
  |  |  484|  3.36k|    do { \
  |  |  485|  3.36k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  3.36k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  3.36k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  3.36k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  3.36k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  3.36k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 3.36k, False: 5]
  |  |  ------------------
  |  |  488|  3.36k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  3.36k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  3.36k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  3.36k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.36k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.36k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  3.36k|        } \
  |  |  491|  3.36k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 3.36k]
  |  |  ------------------
  ------------------
  646|  3.36k|}

_PyUnicode_IsXidStart:
   86|  97.3k|{
   87|  97.3k|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
   88|       |
   89|  97.3k|    return (ctype->flags & XID_START_MASK) != 0;
  ------------------
  |  |   20|  97.3k|#define XID_START_MASK 0x100
  ------------------
   90|  97.3k|}
_PyUnicode_IsXidContinue:
   96|   966k|{
   97|   966k|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
   98|       |
   99|   966k|    return (ctype->flags & XID_CONTINUE_MASK) != 0;
  ------------------
  |  |   21|   966k|#define XID_CONTINUE_MASK 0x200
  ------------------
  100|   966k|}
_PyUnicode_ToDecimalDigit:
  106|    135|{
  107|    135|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
  108|       |
  109|    135|    return (ctype->flags & DECIMAL_MASK) ? ctype->decimal : -1;
  ------------------
  |  |   15|    135|#define DECIMAL_MASK 0x02
  ------------------
  |  Branch (109:12): [True: 0, False: 135]
  ------------------
  110|    135|}
_PyUnicode_IsDecimalDigit:
  113|      3|{
  114|      3|    if (_PyUnicode_ToDecimalDigit(ch) < 0)
  ------------------
  |  Branch (114:9): [True: 3, False: 0]
  ------------------
  115|      3|        return 0;
  116|      0|    return 1;
  117|      3|}
_PyUnicode_IsPrintable:
  152|  2.64M|{
  153|  2.64M|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
  154|       |
  155|  2.64M|    return (ctype->flags & PRINTABLE_MASK) != 0;
  ------------------
  |  |   22|  2.64M|#define PRINTABLE_MASK 0x400
  ------------------
  156|  2.64M|}
_PyUnicode_ToUppercase:
  182|     15|{
  183|     15|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
  184|       |
  185|     15|    if (ctype->flags & EXTENDED_CASE_MASK)
  ------------------
  |  |   26|     15|#define EXTENDED_CASE_MASK 0x4000
  ------------------
  |  Branch (185:9): [True: 0, False: 15]
  ------------------
  186|      0|        return _PyUnicode_ExtendedCase[ctype->upper & 0xFFFF];
  187|     15|    return ch + ctype->upper;
  188|     15|}
_PyUnicode_ToLowercase:
  194|     47|{
  195|     47|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
  196|       |
  197|     47|    if (ctype->flags & EXTENDED_CASE_MASK)
  ------------------
  |  |   26|     47|#define EXTENDED_CASE_MASK 0x4000
  ------------------
  |  Branch (197:9): [True: 0, False: 47]
  ------------------
  198|      0|        return _PyUnicode_ExtendedCase[ctype->lower & 0xFFFF];
  199|     47|    return ch + ctype->lower;
  200|     47|}
_PyUnicode_ToLowerFull:
  203|   694k|{
  204|   694k|    const _PyUnicode_TypeRecord *ctype = gettyperecord(ch);
  205|       |
  206|   694k|    if (ctype->flags & EXTENDED_CASE_MASK) {
  ------------------
  |  |   26|   694k|#define EXTENDED_CASE_MASK 0x4000
  ------------------
  |  Branch (206:9): [True: 306, False: 694k]
  ------------------
  207|    306|        int index = ctype->lower & 0xFFFF;
  208|    306|        int n = ctype->lower >> 24;
  209|    306|        int i;
  210|    622|        for (i = 0; i < n; i++)
  ------------------
  |  Branch (210:21): [True: 316, False: 306]
  ------------------
  211|    316|            res[i] = _PyUnicode_ExtendedCase[index + i];
  212|    306|        return n;
  213|    306|    }
  214|   694k|    res[0] = ch + ctype->lower;
  215|   694k|    return 1;
  216|   694k|}
unicodectype.c:gettyperecord:
   46|  4.40M|{
   47|  4.40M|    int index;
   48|       |
   49|  4.40M|    if (code >= 0x110000)
  ------------------
  |  Branch (49:9): [True: 0, False: 4.40M]
  ------------------
   50|      0|        index = 0;
   51|  4.40M|    else
   52|  4.40M|    {
   53|  4.40M|        index = index1[(code>>SHIFT)];
  ------------------
  |  | 1772|  4.40M|#define SHIFT 6
  ------------------
   54|  4.40M|        index = index2[(index<<SHIFT)+(code&((1<<SHIFT)-1))];
  ------------------
  |  | 1772|  4.40M|#define SHIFT 6
  ------------------
                      index = index2[(index<<SHIFT)+(code&((1<<SHIFT)-1))];
  ------------------
  |  | 1772|  4.40M|#define SHIFT 6
  ------------------
   55|  4.40M|    }
   56|       |
   57|  4.40M|    return &_PyUnicode_TypeRecords[index];
   58|  4.40M|}

_PyUnicode_GetEmpty:
  207|   732k|{
  208|   732k|    _Py_DECLARE_STR(empty, "");
  209|   732k|    return &_Py_STR(empty);
  ------------------
  |  |  938|   732k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   732k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   732k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|   732k|}
_Py_GetErrorHandler:
  474|  45.8k|{
  475|  45.8k|    if (errors == NULL || strcmp(errors, "strict") == 0) {
  ------------------
  |  Branch (475:9): [True: 35.8k, False: 9.97k]
  |  Branch (475:27): [True: 10, False: 9.96k]
  ------------------
  476|  35.8k|        return _Py_ERROR_STRICT;
  477|  35.8k|    }
  478|  9.96k|    if (strcmp(errors, "surrogateescape") == 0) {
  ------------------
  |  Branch (478:9): [True: 6.97k, False: 2.98k]
  ------------------
  479|  6.97k|        return _Py_ERROR_SURROGATEESCAPE;
  480|  6.97k|    }
  481|  2.98k|    if (strcmp(errors, "replace") == 0) {
  ------------------
  |  Branch (481:9): [True: 2.98k, False: 0]
  ------------------
  482|  2.98k|        return _Py_ERROR_REPLACE;
  483|  2.98k|    }
  484|      0|    if (strcmp(errors, "ignore") == 0) {
  ------------------
  |  Branch (484:9): [True: 0, False: 0]
  ------------------
  485|      0|        return _Py_ERROR_IGNORE;
  486|      0|    }
  487|      0|    if (strcmp(errors, "backslashreplace") == 0) {
  ------------------
  |  Branch (487:9): [True: 0, False: 0]
  ------------------
  488|      0|        return _Py_ERROR_BACKSLASHREPLACE;
  489|      0|    }
  490|      0|    if (strcmp(errors, "surrogatepass") == 0) {
  ------------------
  |  Branch (490:9): [True: 0, False: 0]
  ------------------
  491|      0|        return _Py_ERROR_SURROGATEPASS;
  492|      0|    }
  493|      0|    if (strcmp(errors, "xmlcharrefreplace") == 0) {
  ------------------
  |  Branch (493:9): [True: 0, False: 0]
  ------------------
  494|      0|        return _Py_ERROR_XMLCHARREFREPLACE;
  495|      0|    }
  496|      0|    return _Py_ERROR_OTHER;
  497|      0|}
_PyUnicode_CheckConsistency:
  593|  44.8M|{
  594|  44.8M|#define CHECK(expr) \
  595|  44.8M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  596|       |#ifdef Py_GIL_DISABLED
  597|       |# define CHECK_IF_GIL(expr) (void)(expr)
  598|       |# define CHECK_IF_FT(expr) CHECK(expr)
  599|       |#else
  600|  44.8M|# define CHECK_IF_GIL(expr) CHECK(expr)
  601|  44.8M|# define CHECK_IF_FT(expr) (void)(expr)
  602|  44.8M|#endif
  603|       |
  604|  44.8M|    assert(op != NULL);
  ------------------
  |  Branch (604:5): [True: 44.8M, False: 0]
  ------------------
  605|  44.8M|    CHECK(PyUnicode_Check(op));
  ------------------
  |  |  595|  44.8M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 44.8M]
  |  |  |  Branch (595:89): [Folded, False: 44.8M]
  |  |  ------------------
  ------------------
  606|       |
  607|  44.8M|    PyASCIIObject *ascii = _PyASCIIObject_CAST(op);
  ------------------
  |  |  186|  44.8M|    (assert(PyUnicode_Check(op)), \
  |  |  187|  44.8M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  44.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (607:28): [True: 44.8M, False: 0]
  ------------------
  608|      0|    int kind = ascii->state.kind;
  609|       |
  610|  44.8M|    if (ascii->state.ascii == 1 && ascii->state.compact == 1) {
  ------------------
  |  Branch (610:9): [True: 3.02M, False: 41.8M]
  |  Branch (610:36): [True: 3.02M, False: 7]
  ------------------
  611|  3.02M|        CHECK(kind == PyUnicode_1BYTE_KIND);
  ------------------
  |  |  595|  3.02M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 3.02M]
  |  |  |  Branch (595:89): [Folded, False: 3.02M]
  |  |  ------------------
  ------------------
  612|  3.02M|    }
  613|  41.8M|    else {
  614|  41.8M|        PyCompactUnicodeObject *compact = _PyCompactUnicodeObject_CAST(op);
  ------------------
  |  |  189|  41.8M|    (assert(PyUnicode_Check(op)), \
  |  |  190|  41.8M|     _Py_CAST(PyCompactUnicodeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  41.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (614:43): [True: 41.8M, False: 0]
  ------------------
  615|      0|        void *data;
  616|       |
  617|  41.8M|        if (ascii->state.compact == 1) {
  ------------------
  |  Branch (617:13): [True: 41.8M, False: 7]
  ------------------
  618|  41.8M|            data = compact + 1;
  619|  41.8M|            CHECK(kind == PyUnicode_1BYTE_KIND
  ------------------
  |  |  595|   127M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:16): [True: 282k, False: 41.5M]
  |  |  |  Branch (595:16): [True: 38.8M, False: 2.67M]
  |  |  |  Branch (595:16): [True: 2.67M, False: 0]
  |  |  |  Branch (595:89): [Folded, False: 41.8M]
  |  |  ------------------
  ------------------
  620|  41.8M|                                 || kind == PyUnicode_2BYTE_KIND
  621|  41.8M|                                 || kind == PyUnicode_4BYTE_KIND);
  622|  41.8M|            CHECK(ascii->state.ascii == 0);
  ------------------
  |  |  595|  41.8M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 41.8M]
  |  |  |  Branch (595:89): [Folded, False: 41.8M]
  |  |  ------------------
  ------------------
  623|  41.8M|            CHECK(_PyUnicode_UTF8(op) != data);
  ------------------
  |  |  595|  41.8M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 41.8M]
  |  |  |  Branch (595:89): [Folded, False: 41.8M]
  |  |  ------------------
  ------------------
  624|  41.8M|        }
  625|      7|        else {
  626|      7|            PyUnicodeObject *unicode = _PyUnicodeObject_CAST(op);
  ------------------
  |  |  192|      7|    (assert(PyUnicode_Check(op)), \
  |  |  193|      7|     _Py_CAST(PyUnicodeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (626:40): [True: 7, False: 0]
  ------------------
  627|       |
  628|      0|            data = unicode->data.any;
  629|      7|            CHECK(kind == PyUnicode_1BYTE_KIND
  ------------------
  |  |  595|     14|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:16): [True: 7, False: 0]
  |  |  |  Branch (595:16): [True: 0, False: 0]
  |  |  |  Branch (595:16): [True: 0, False: 0]
  |  |  |  Branch (595:89): [Folded, False: 7]
  |  |  ------------------
  ------------------
  630|      7|                     || kind == PyUnicode_2BYTE_KIND
  631|      7|                     || kind == PyUnicode_4BYTE_KIND);
  632|      7|            CHECK(ascii->state.compact == 0);
  ------------------
  |  |  595|      7|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 7]
  |  |  |  Branch (595:89): [Folded, False: 7]
  |  |  ------------------
  ------------------
  633|      7|            CHECK(data != NULL);
  ------------------
  |  |  595|      7|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 7]
  |  |  |  Branch (595:89): [Folded, False: 7]
  |  |  ------------------
  ------------------
  634|      7|            if (ascii->state.ascii) {
  ------------------
  |  Branch (634:17): [True: 7, False: 0]
  ------------------
  635|      7|                CHECK(_PyUnicode_UTF8(op) == data);
  ------------------
  |  |  595|      7|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 7]
  |  |  |  Branch (595:89): [Folded, False: 7]
  |  |  ------------------
  ------------------
  636|      7|                CHECK(compact->utf8_length == ascii->length);
  ------------------
  |  |  595|      7|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 7]
  |  |  |  Branch (595:89): [Folded, False: 7]
  |  |  ------------------
  ------------------
  637|      7|            }
  638|      0|            else {
  639|      0|                CHECK(_PyUnicode_UTF8(op) != data);
  ------------------
  |  |  595|      0|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 0]
  |  |  |  Branch (595:89): [Folded, False: 0]
  |  |  ------------------
  ------------------
  640|      0|            }
  641|      7|        }
  642|  41.8M|#ifndef Py_GIL_DISABLED
  643|  41.8M|        if (_PyUnicode_UTF8(op) == NULL)
  ------------------
  |  Branch (643:13): [True: 41.8M, False: 25]
  ------------------
  644|  41.8M|            CHECK(compact->utf8_length == 0);
  ------------------
  |  |  595|  41.8M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 41.8M]
  |  |  |  Branch (595:89): [Folded, False: 41.8M]
  |  |  ------------------
  ------------------
  645|  41.8M|#endif
  646|  41.8M|    }
  647|       |
  648|       |    /* check that the best kind is used: O(n) operation */
  649|  44.8M|    const void *data = PyUnicode_DATA(ascii);
  ------------------
  |  |  284|  44.8M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  650|  44.8M|    if (check_content) {
  ------------------
  |  Branch (650:9): [True: 21.2M, False: 23.6M]
  ------------------
  651|  21.2M|        Py_ssize_t i;
  652|  21.2M|        Py_UCS4 maxchar = 0;
  653|  21.2M|        Py_UCS4 ch;
  654|       |
  655|   158M|        for (i=0; i < ascii->length; i++)
  ------------------
  |  Branch (655:19): [True: 136M, False: 21.2M]
  ------------------
  656|   136M|        {
  657|   136M|            ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|   136M|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   136M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   136M|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   136M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   136M|                   (index))
  ------------------
  658|   136M|            if (ch > maxchar)
  ------------------
  |  Branch (658:17): [True: 24.0M, False: 112M]
  ------------------
  659|  24.0M|                maxchar = ch;
  660|   136M|        }
  661|  21.2M|        if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (661:13): [True: 679k, False: 20.5M]
  ------------------
  662|   679k|            if (ascii->state.ascii == 0) {
  ------------------
  |  Branch (662:17): [True: 108k, False: 570k]
  ------------------
  663|   108k|                CHECK(maxchar >= 128);
  ------------------
  |  |  595|   108k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 108k]
  |  |  |  Branch (595:89): [Folded, False: 108k]
  |  |  ------------------
  ------------------
  664|   108k|                CHECK(maxchar <= 255);
  ------------------
  |  |  595|   108k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 108k]
  |  |  |  Branch (595:89): [Folded, False: 108k]
  |  |  ------------------
  ------------------
  665|   108k|            }
  666|   570k|            else
  667|   570k|                CHECK(maxchar < 128);
  ------------------
  |  |  595|   570k|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 570k]
  |  |  |  Branch (595:89): [Folded, False: 570k]
  |  |  ------------------
  ------------------
  668|   679k|        }
  669|  20.5M|        else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (669:18): [True: 19.2M, False: 1.31M]
  ------------------
  670|  19.2M|            CHECK(maxchar >= 0x100);
  ------------------
  |  |  595|  19.2M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 19.2M]
  |  |  |  Branch (595:89): [Folded, False: 19.2M]
  |  |  ------------------
  ------------------
  671|  19.2M|            CHECK(maxchar <= 0xFFFF);
  ------------------
  |  |  595|  19.2M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 19.2M]
  |  |  |  Branch (595:89): [Folded, False: 19.2M]
  |  |  ------------------
  ------------------
  672|  19.2M|        }
  673|  1.31M|        else {
  674|  1.31M|            CHECK(maxchar >= 0x10000);
  ------------------
  |  |  595|  1.31M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 1.31M]
  |  |  |  Branch (595:89): [Folded, False: 1.31M]
  |  |  ------------------
  ------------------
  675|  1.31M|            CHECK(maxchar <= MAX_UNICODE);
  ------------------
  |  |  595|  1.31M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 1.31M]
  |  |  |  Branch (595:89): [Folded, False: 1.31M]
  |  |  ------------------
  ------------------
  676|  1.31M|        }
  677|  21.2M|    }
  678|       |
  679|       |    // Detect buffer overflow: check if the trailing null character
  680|       |    // has been overridden
  681|  44.8M|    CHECK(PyUnicode_READ(kind, data, ascii->length) == 0);
  ------------------
  |  |  595|  44.8M|    do { if (!(expr)) { _PyObject_ASSERT_FAILED_MSG(op, Py_STRINGIFY(expr)); } } while (0)
  |  |  ------------------
  |  |  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  Branch (595:14): [True: 0, False: 44.8M]
  |  |  |  Branch (595:89): [Folded, False: 44.8M]
  |  |  ------------------
  ------------------
  682|       |
  683|       |    /* Check interning state */
  684|       |#ifdef Py_DEBUG
  685|       |    // Note that we do not check `_Py_IsImmortal(op)` in the GIL-enabled build
  686|       |    // since stable ABI extensions can make immortal strings mortal (but with a
  687|       |    // high enough refcount).
  688|       |    switch (PyUnicode_CHECK_INTERNED(op)) {
  689|       |        case SSTATE_NOT_INTERNED:
  690|       |            if (ascii->state.statically_allocated) {
  691|       |                // This state is for two exceptions:
  692|       |                // - strings are currently checked before they're interned
  693|       |                // - the 256 one-latin1-character strings
  694|       |                //   are static but use SSTATE_NOT_INTERNED
  695|       |            }
  696|       |            else {
  697|       |                CHECK_IF_GIL(!_Py_IsImmortal(op));
  698|       |            }
  699|       |            break;
  700|       |        case SSTATE_INTERNED_MORTAL:
  701|       |            CHECK(!ascii->state.statically_allocated);
  702|       |            CHECK_IF_GIL(!_Py_IsImmortal(op));
  703|       |            break;
  704|       |        case SSTATE_INTERNED_IMMORTAL:
  705|       |            CHECK(!ascii->state.statically_allocated);
  706|       |            CHECK_IF_FT(_Py_IsImmortal(op));
  707|       |            break;
  708|       |        case SSTATE_INTERNED_IMMORTAL_STATIC:
  709|       |            CHECK(ascii->state.statically_allocated);
  710|       |            CHECK_IF_FT(_Py_IsImmortal(op));
  711|       |            break;
  712|       |        default:
  713|       |            Py_UNREACHABLE();
  714|       |    }
  715|       |#endif
  716|       |
  717|  44.8M|    return 1;
  718|       |
  719|  44.8M|#undef CHECK
  720|  44.8M|}
_PyUnicode_Result:
  724|  29.8k|{
  725|  29.8k|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (725:5): [True: 29.8k, False: 0]
  ------------------
  726|       |
  727|  29.8k|    Py_ssize_t length = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  29.8k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  29.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  29.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  728|  29.8k|    if (length == 0) {
  ------------------
  |  Branch (728:9): [True: 1, False: 29.8k]
  ------------------
  729|      1|        PyObject *empty = _PyUnicode_GetEmpty();
  730|      1|        if (unicode != empty) {
  ------------------
  |  Branch (730:13): [True: 0, False: 1]
  ------------------
  731|      0|            Py_DECREF(unicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|      0|        }
  733|      1|        return empty;
  734|      1|    }
  735|       |
  736|  29.8k|    if (length == 1) {
  ------------------
  |  Branch (736:9): [True: 1.36k, False: 28.4k]
  ------------------
  737|  1.36k|        int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  1.36k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  2.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.36k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|  1.36k|        if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (738:13): [True: 1.31k, False: 53]
  ------------------
  739|  1.31k|            const Py_UCS1 *data = PyUnicode_1BYTE_DATA(unicode);
  ------------------
  |  |  291|  1.31k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  1.31k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  740|  1.31k|            Py_UCS1 ch = data[0];
  741|  1.31k|            PyObject *latin1_char = LATIN1(ch);
  ------------------
  |  |  188|  1.31k|#define LATIN1 _Py_LATIN1_CHR
  |  |  ------------------
  |  |  |  |  940|  1.31k|    ((CH) < 128 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (940:6): [True: 2, False: 1.31k]
  |  |  |  |  ------------------
  |  |  |  |  941|  1.31k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  942|  1.31k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  1.31k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  1.31k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  742|  1.31k|            if (unicode != latin1_char) {
  ------------------
  |  Branch (742:17): [True: 0, False: 1.31k]
  ------------------
  743|      0|                Py_DECREF(unicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  744|      0|            }
  745|  1.31k|            return latin1_char;
  746|  1.31k|        }
  747|  1.36k|    }
  748|       |
  749|  29.8k|    assert(_PyUnicode_CheckConsistency(unicode, 1));
  ------------------
  |  Branch (749:5): [True: 28.4k, False: 0]
  ------------------
  750|  28.4k|    return unicode;
  751|  28.4k|}
_PyUnicode_ResizeCompact:
 1084|   176k|{
 1085|   176k|    Py_ssize_t char_size;
 1086|   176k|    Py_ssize_t struct_size;
 1087|   176k|    Py_ssize_t new_size;
 1088|   176k|    PyObject *new_unicode;
 1089|       |#ifdef Py_DEBUG
 1090|       |    Py_ssize_t old_length = _PyUnicode_LENGTH(unicode);
 1091|       |#endif
 1092|       |
 1093|   176k|    if (!_PyUnicode_IsModifiable(unicode)) {
  ------------------
  |  Branch (1093:9): [True: 0, False: 176k]
  ------------------
 1094|      0|        PyObject *copy = resize_copy(unicode, length);
 1095|      0|        if (copy == NULL) {
  ------------------
  |  Branch (1095:13): [True: 0, False: 0]
  ------------------
 1096|      0|            return NULL;
 1097|      0|        }
 1098|      0|        Py_DECREF(unicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|      0|        return copy;
 1100|      0|    }
 1101|   176k|    assert(PyUnicode_IS_COMPACT(unicode));
  ------------------
  |  Branch (1101:5): [True: 176k, False: 0]
  ------------------
 1102|       |
 1103|   176k|    char_size = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|   176k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   352k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 176k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1104|   176k|    if (PyUnicode_IS_ASCII(unicode))
  ------------------
  |  |  227|   176k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   176k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 137k, False: 38.6k]
  |  |  ------------------
  ------------------
 1105|   137k|        struct_size = sizeof(PyASCIIObject);
 1106|  38.6k|    else
 1107|  38.6k|        struct_size = sizeof(PyCompactUnicodeObject);
 1108|       |
 1109|   176k|    if (length > ((PY_SSIZE_T_MAX - struct_size) / char_size - 1)) {
  ------------------
  |  |  137|   176k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1109:9): [True: 0, False: 176k]
  ------------------
 1110|      0|        PyErr_NoMemory();
 1111|      0|        return NULL;
 1112|      0|    }
 1113|   176k|    new_size = (struct_size + (length + 1) * char_size);
 1114|       |
 1115|   176k|    if (_PyUnicode_HAS_UTF8_MEMORY(unicode)) {
  ------------------
  |  Branch (1115:9): [True: 0, False: 176k]
  ------------------
 1116|      0|        PyMem_Free(_PyUnicode_UTF8(unicode));
 1117|      0|        PyUnicode_SET_UTF8_LENGTH(unicode, 0);
 1118|      0|        PyUnicode_SET_UTF8(unicode, NULL);
 1119|      0|    }
 1120|       |#ifdef Py_TRACE_REFS
 1121|       |    _Py_ForgetReference(unicode);
 1122|       |#endif
 1123|   176k|    _PyReftracerTrack(unicode, PyRefTracer_DESTROY);
  ------------------
  |  |  112|   176k|    do { \
  |  |  113|   176k|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  114|   176k|        if (tracer->tracer_func != NULL) { \
  |  |  ------------------
  |  |  |  Branch (114:13): [True: 0, False: 176k]
  |  |  ------------------
  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  117|      0|        } \
  |  |  118|   176k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (118:13): [Folded, False: 176k]
  |  |  ------------------
  ------------------
 1124|       |
 1125|   176k|    new_unicode = (PyObject *)PyObject_Realloc(unicode, new_size);
 1126|   176k|    if (new_unicode == NULL) {
  ------------------
  |  Branch (1126:9): [True: 0, False: 176k]
  ------------------
 1127|      0|        _Py_NewReferenceNoTotal(unicode);
 1128|      0|        PyErr_NoMemory();
 1129|      0|        return NULL;
 1130|      0|    }
 1131|   176k|    unicode = new_unicode;
 1132|   176k|    _Py_NewReferenceNoTotal(unicode);
 1133|       |
 1134|   176k|    _PyUnicode_LENGTH(unicode) = length;
  ------------------
  |  |  155|   176k|    (_PyASCIIObject_CAST(op)->length)
  |  |  ------------------
  |  |  |  |  186|   176k|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|   176k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1134:5): [True: 176k, False: 0]
  ------------------
 1135|       |#ifdef Py_DEBUG
 1136|       |    unicode_fill_invalid(unicode, old_length);
 1137|       |#endif
 1138|   176k|    PyUnicode_WRITE(PyUnicode_KIND(unicode), PyUnicode_DATA(unicode),
  ------------------
  |  |  335|   176k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|   352k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (34:47): [True: 176k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|   176k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|   176k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1139|   176k|                    length, 0);
 1140|   176k|    assert(_PyUnicode_CheckConsistency(unicode, 0));
  ------------------
  |  Branch (1140:5): [True: 176k, False: 0]
  ------------------
 1141|   176k|    return unicode;
 1142|   176k|}
PyUnicode_New:
 1288|  23.4M|{
 1289|       |    /* Optimization for empty strings */
 1290|  23.4M|    if (size == 0) {
  ------------------
  |  Branch (1290:9): [True: 1.60k, False: 23.4M]
  ------------------
 1291|  1.60k|        return _PyUnicode_GetEmpty();
 1292|  1.60k|    }
 1293|       |
 1294|  23.4M|    PyObject *obj;
 1295|  23.4M|    PyCompactUnicodeObject *unicode;
 1296|  23.4M|    void *data;
 1297|  23.4M|    int kind;
 1298|  23.4M|    int is_ascii;
 1299|  23.4M|    Py_ssize_t char_size;
 1300|  23.4M|    Py_ssize_t struct_size;
 1301|       |
 1302|  23.4M|    is_ascii = 0;
 1303|  23.4M|    struct_size = sizeof(PyCompactUnicodeObject);
 1304|  23.4M|    if (maxchar < 128) {
  ------------------
  |  Branch (1304:9): [True: 2.32M, False: 21.1M]
  ------------------
 1305|  2.32M|        kind = PyUnicode_1BYTE_KIND;
 1306|  2.32M|        char_size = 1;
 1307|  2.32M|        is_ascii = 1;
 1308|  2.32M|        struct_size = sizeof(PyASCIIObject);
 1309|  2.32M|    }
 1310|  21.1M|    else if (maxchar < 256) {
  ------------------
  |  Branch (1310:14): [True: 165k, False: 20.9M]
  ------------------
 1311|   165k|        kind = PyUnicode_1BYTE_KIND;
 1312|   165k|        char_size = 1;
 1313|   165k|    }
 1314|  20.9M|    else if (maxchar < 65536) {
  ------------------
  |  Branch (1314:14): [True: 19.5M, False: 1.35M]
  ------------------
 1315|  19.5M|        kind = PyUnicode_2BYTE_KIND;
 1316|  19.5M|        char_size = 2;
 1317|  19.5M|    }
 1318|  1.35M|    else {
 1319|  1.35M|        if (maxchar > MAX_UNICODE) {
  ------------------
  |  |  108|  1.35M|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|  1.35M|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
  |  Branch (1319:13): [True: 0, False: 1.35M]
  ------------------
 1320|      0|            PyErr_SetString(PyExc_SystemError,
 1321|      0|                            "invalid maximum character passed to PyUnicode_New");
 1322|      0|            return NULL;
 1323|      0|        }
 1324|  1.35M|        kind = PyUnicode_4BYTE_KIND;
 1325|  1.35M|        char_size = 4;
 1326|  1.35M|    }
 1327|       |
 1328|       |    /* Ensure we won't overflow the size. */
 1329|  23.4M|    if (size < 0) {
  ------------------
  |  Branch (1329:9): [True: 0, False: 23.4M]
  ------------------
 1330|      0|        PyErr_SetString(PyExc_SystemError,
 1331|      0|                        "Negative size passed to PyUnicode_New");
 1332|      0|        return NULL;
 1333|      0|    }
 1334|  23.4M|    if (size > ((PY_SSIZE_T_MAX - struct_size) / char_size - 1))
  ------------------
  |  |  137|  23.4M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1334:9): [True: 0, False: 23.4M]
  ------------------
 1335|      0|        return PyErr_NoMemory();
 1336|       |
 1337|       |    /* Duplicated allocation code from _PyObject_New() instead of a call to
 1338|       |     * PyObject_New() so we are able to allocate space for the object and
 1339|       |     * it's data buffer.
 1340|       |     */
 1341|  23.4M|    obj = (PyObject *) PyObject_Malloc(struct_size + (size + 1) * char_size);
 1342|  23.4M|    if (obj == NULL) {
  ------------------
  |  Branch (1342:9): [True: 0, False: 23.4M]
  ------------------
 1343|      0|        return PyErr_NoMemory();
 1344|      0|    }
 1345|  23.4M|    _PyObject_Init(obj, &PyUnicode_Type);
 1346|       |
 1347|  23.4M|    unicode = (PyCompactUnicodeObject *)obj;
 1348|  23.4M|    if (is_ascii)
  ------------------
  |  Branch (1348:9): [True: 2.32M, False: 21.1M]
  ------------------
 1349|  2.32M|        data = ((PyASCIIObject*)obj) + 1;
 1350|  21.1M|    else
 1351|  21.1M|        data = unicode + 1;
 1352|  23.4M|    _PyUnicode_LENGTH(unicode) = size;
  ------------------
  |  |  155|  23.4M|    (_PyASCIIObject_CAST(op)->length)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1352:5): [True: 23.4M, False: 0]
  ------------------
 1353|  23.4M|    _PyUnicode_HASH(unicode) = -1;
  ------------------
  |  |  159|  23.4M|    (_PyASCIIObject_CAST(op)->hash)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1353:5): [True: 23.4M, False: 0]
  ------------------
 1354|  23.4M|    _PyUnicode_STATE(unicode).interned = 0;
  ------------------
  |  |  157|  23.4M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1354:5): [True: 23.4M, False: 0]
  ------------------
 1355|  23.4M|    _PyUnicode_STATE(unicode).kind = kind;
  ------------------
  |  |  157|  23.4M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1355:5): [True: 23.4M, False: 0]
  ------------------
 1356|  23.4M|    _PyUnicode_STATE(unicode).compact = 1;
  ------------------
  |  |  157|  23.4M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1356:5): [True: 23.4M, False: 0]
  ------------------
 1357|  23.4M|    _PyUnicode_STATE(unicode).ascii = is_ascii;
  ------------------
  |  |  157|  23.4M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1357:5): [True: 23.4M, False: 0]
  ------------------
 1358|  23.4M|    _PyUnicode_STATE(unicode).statically_allocated = 0;
  ------------------
  |  |  157|  23.4M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.4M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.4M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1358:5): [True: 23.4M, False: 0]
  ------------------
 1359|  23.4M|    if (is_ascii) {
  ------------------
  |  Branch (1359:9): [True: 2.32M, False: 21.1M]
  ------------------
 1360|  2.32M|        ((char*)data)[size] = 0;
 1361|  2.32M|    }
 1362|  21.1M|    else if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (1362:14): [True: 165k, False: 20.9M]
  ------------------
 1363|   165k|        ((char*)data)[size] = 0;
 1364|   165k|        unicode->utf8 = NULL;
 1365|   165k|        unicode->utf8_length = 0;
 1366|   165k|    }
 1367|  20.9M|    else {
 1368|  20.9M|        unicode->utf8 = NULL;
 1369|  20.9M|        unicode->utf8_length = 0;
 1370|  20.9M|        if (kind == PyUnicode_2BYTE_KIND)
  ------------------
  |  Branch (1370:13): [True: 19.5M, False: 1.35M]
  ------------------
 1371|  19.5M|            ((Py_UCS2*)data)[size] = 0;
 1372|  1.35M|        else /* kind == PyUnicode_4BYTE_KIND */
 1373|  1.35M|            ((Py_UCS4*)data)[size] = 0;
 1374|  20.9M|    }
 1375|       |#ifdef Py_DEBUG
 1376|       |    unicode_fill_invalid((PyObject*)unicode, 0);
 1377|       |#endif
 1378|  23.4M|    assert(_PyUnicode_CheckConsistency((PyObject*)unicode, 0));
  ------------------
  |  Branch (1378:5): [True: 23.4M, False: 0]
  ------------------
 1379|  23.4M|    return obj;
 1380|  23.4M|}
_PyUnicode_FastCopyCharacters:
 1540|  1.52M|{
 1541|  1.52M|    (void)_copy_characters(to, to_start, from, from_start, how_many, 0);
 1542|  1.52M|}
_PyUnicode_IsModifiable:
 1750|   207k|{
 1751|   207k|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (1751:5): [True: 207k, False: 0]
  ------------------
 1752|   207k|    if (!PyUnicode_CheckExact(unicode))
  ------------------
  |  |  104|   207k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   207k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   207k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   207k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1752:9): [True: 0, False: 207k]
  ------------------
 1753|      0|        return 0;
 1754|       |    // On Free Threading, this test fails if called from a thread other
 1755|       |    // than the one which created the str object.
 1756|   207k|    if (!_PyObject_IsUniquelyReferenced(unicode))
  ------------------
  |  Branch (1756:9): [True: 62, False: 207k]
  ------------------
 1757|     62|        return 0;
 1758|   207k|    if (PyUnicode_HASH(unicode) != -1)
  ------------------
  |  |  161|   207k|#define PyUnicode_HASH PyUnstable_Unicode_GET_CACHED_HASH
  ------------------
  |  Branch (1758:9): [True: 0, False: 207k]
  ------------------
 1759|      0|        return 0;
 1760|   207k|    if (PyUnicode_CHECK_INTERNED(unicode))
  ------------------
  |  |  214|   207k|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   207k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   207k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (214:38): [True: 0, False: 207k]
  |  |  ------------------
  ------------------
 1761|      0|        return 0;
 1762|       |#ifdef Py_DEBUG
 1763|       |    /* singleton refcount is greater than 1 */
 1764|       |    assert(!unicode_is_singleton(unicode));
 1765|       |#endif
 1766|   207k|    return 1;
 1767|   207k|}
PyUnicode_FromWideChar:
 1918|  7.72k|{
 1919|  7.72k|    PyObject *unicode;
 1920|  7.72k|    Py_UCS4 maxchar = 0;
 1921|  7.72k|    Py_ssize_t num_surrogates;
 1922|       |
 1923|  7.72k|    if (u == NULL && size != 0) {
  ------------------
  |  Branch (1923:9): [True: 0, False: 7.72k]
  |  Branch (1923:22): [True: 0, False: 0]
  ------------------
 1924|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1925|      0|        return NULL;
 1926|      0|    }
 1927|       |
 1928|  7.72k|    if (size == -1) {
  ------------------
  |  Branch (1928:9): [True: 82, False: 7.64k]
  ------------------
 1929|     82|        size = wcslen(u);
 1930|     82|    }
 1931|       |
 1932|       |    /* If the Unicode data is known at construction time, we can apply
 1933|       |       some optimizations which share commonly used objects. */
 1934|       |
 1935|       |    /* Optimization for empty strings */
 1936|  7.72k|    if (size == 0)
  ------------------
  |  Branch (1936:9): [True: 4, False: 7.72k]
  ------------------
 1937|      4|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      4|    do {                             \
  |  |  380|      4|        return _PyUnicode_GetEmpty();\
  |  |  381|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1938|       |
 1939|       |#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
 1940|       |    /* Oracle Solaris uses non-Unicode internal wchar_t form for
 1941|       |       non-Unicode locales and hence needs conversion to UCS-4 first. */
 1942|       |    if (_Py_LocaleUsesNonUnicodeWchar()) {
 1943|       |        wchar_t* converted = _Py_DecodeNonUnicodeWchar(u, size);
 1944|       |        if (!converted) {
 1945|       |            return NULL;
 1946|       |        }
 1947|       |        PyObject *unicode = _PyUnicode_FromUCS4(converted, size);
 1948|       |        PyMem_Free(converted);
 1949|       |        return unicode;
 1950|       |    }
 1951|       |#endif
 1952|       |
 1953|       |    /* Single character Unicode objects in the Latin-1 range are
 1954|       |       shared when using this constructor */
 1955|  7.72k|    if (size == 1 && (Py_UCS4)*u < 256)
  ------------------
  |  Branch (1955:9): [True: 0, False: 7.72k]
  |  Branch (1955:22): [True: 0, False: 0]
  ------------------
 1956|      0|        return get_latin1_char((unsigned char)*u);
 1957|       |
 1958|       |    /* If not empty and not single character, copy the Unicode data
 1959|       |       into the new object */
 1960|  7.72k|    if (find_maxchar_surrogates(u, u + size,
  ------------------
  |  Branch (1960:9): [True: 0, False: 7.72k]
  ------------------
 1961|  7.72k|                                &maxchar, &num_surrogates) == -1)
 1962|      0|        return NULL;
 1963|       |
 1964|  7.72k|    unicode = PyUnicode_New(size - num_surrogates, maxchar);
 1965|  7.72k|    if (!unicode)
  ------------------
  |  Branch (1965:9): [True: 0, False: 7.72k]
  ------------------
 1966|      0|        return NULL;
 1967|       |
 1968|  7.72k|    unicode_write_widechar(PyUnicode_KIND(unicode), PyUnicode_DATA(unicode),
  ------------------
  |  |  258|  7.72k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  15.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 7.72k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  unicode_write_widechar(PyUnicode_KIND(unicode), PyUnicode_DATA(unicode),
  ------------------
  |  |  284|  7.72k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.72k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1969|  7.72k|                           u, size, num_surrogates);
 1970|       |
 1971|  7.72k|    return unicode_result(unicode);
  ------------------
  |  |  752|  7.72k|#define unicode_result _PyUnicode_Result
  ------------------
 1972|  7.72k|}
PyUnicode_FromStringAndSize:
 2028|  80.1k|{
 2029|  80.1k|    if (size < 0) {
  ------------------
  |  Branch (2029:9): [True: 0, False: 80.1k]
  ------------------
 2030|      0|        PyErr_SetString(PyExc_SystemError,
 2031|      0|                        "Negative size passed to PyUnicode_FromStringAndSize");
 2032|      0|        return NULL;
 2033|      0|    }
 2034|  80.1k|    if (u != NULL) {
  ------------------
  |  Branch (2034:9): [True: 80.1k, False: 0]
  ------------------
 2035|  80.1k|        return PyUnicode_DecodeUTF8Stateful(u, size, NULL, NULL);
 2036|  80.1k|    }
 2037|      0|    if (size > 0) {
  ------------------
  |  Branch (2037:9): [True: 0, False: 0]
  ------------------
 2038|      0|        PyErr_SetString(PyExc_SystemError,
 2039|      0|            "NULL string with positive size with NULL passed to PyUnicode_FromStringAndSize");
 2040|      0|        return NULL;
 2041|      0|    }
 2042|      0|    return _PyUnicode_GetEmpty();
 2043|      0|}
PyUnicode_FromString:
 2047|  1.68M|{
 2048|  1.68M|    size_t size = strlen(u);
 2049|  1.68M|    if (size > PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  1.68M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2049:9): [True: 0, False: 1.68M]
  ------------------
 2050|      0|        PyErr_SetString(PyExc_OverflowError, "input too long");
 2051|      0|        return NULL;
 2052|      0|    }
 2053|  1.68M|    return PyUnicode_DecodeUTF8Stateful(u, (Py_ssize_t)size, NULL, NULL);
 2054|  1.68M|}
_PyUnicode_FromASCII:
 2142|  45.9k|{
 2143|  45.9k|    const unsigned char *s = (const unsigned char *)buffer;
 2144|  45.9k|    PyObject *unicode;
 2145|  45.9k|    if (size == 1) {
  ------------------
  |  Branch (2145:9): [True: 1.65k, False: 44.3k]
  ------------------
 2146|       |#ifdef Py_DEBUG
 2147|       |        assert((unsigned char)s[0] < 128);
 2148|       |#endif
 2149|  1.65k|        return get_latin1_char(s[0]);
 2150|  1.65k|    }
 2151|  44.3k|    unicode = PyUnicode_New(size, 127);
 2152|  44.3k|    if (!unicode)
  ------------------
  |  Branch (2152:9): [True: 0, False: 44.3k]
  ------------------
 2153|      0|        return NULL;
 2154|  44.3k|    memcpy(PyUnicode_1BYTE_DATA(unicode), s, size);
  ------------------
  |  |  291|  44.3k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  44.3k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2155|  44.3k|    assert(_PyUnicode_CheckConsistency(unicode, 1));
  ------------------
  |  Branch (2155:5): [True: 44.3k, False: 0]
  ------------------
 2156|  44.3k|    return unicode;
 2157|  44.3k|}
PyUnicodeWriter_WriteUCS4:
 2256|    394|{
 2257|    394|    _PyUnicodeWriter *writer = (_PyUnicodeWriter*)pub_writer;
 2258|       |
 2259|    394|    if (size < 0) {
  ------------------
  |  Branch (2259:9): [True: 0, False: 394]
  ------------------
 2260|      0|        PyErr_SetString(PyExc_ValueError,
 2261|      0|                        "size must be positive");
 2262|      0|        return -1;
 2263|      0|    }
 2264|       |
 2265|    394|    if (size == 0) {
  ------------------
  |  Branch (2265:9): [True: 0, False: 394]
  ------------------
 2266|      0|        return 0;
 2267|      0|    }
 2268|       |
 2269|    394|    Py_UCS4 max_char = ucs4lib_find_max_char(str, str + size);
 2270|       |
 2271|    394|    if (_PyUnicodeWriter_Prepare(writer, size, max_char) < 0) {
  ------------------
  |  |  562|    394|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 273, False: 121]
  |  |  ------------------
  |  |  563|    394|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 273, False: 0]
  |  |  ------------------
  |  |  564|    394|     ? 0                                                              \
  |  |  565|    394|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 121]
  |  |  ------------------
  |  |  566|    121|        ? 0                                                           \
  |  |  567|    121|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (2271:9): [True: 0, False: 394]
  ------------------
 2272|      0|        return -1;
 2273|      0|    }
 2274|    394|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (2274:5): [True: 394, False: 0]
  ------------------
 2275|       |
 2276|    394|    int kind = writer->kind;
 2277|    394|    void *data = (Py_UCS1*)writer->data + writer->pos * kind;
 2278|    394|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (2278:9): [True: 201, False: 193]
  ------------------
 2279|    201|        _PyUnicode_CONVERT_BYTES(Py_UCS4, Py_UCS1,
  ------------------
  |  |   48|    201|    do {                                                \
  |  |   49|    201|        to_type *_to = (to_type *)(to);                 \
  |  |   50|    201|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|    201|        const from_type *_end = (const from_type *)(end);\
  |  |   52|    201|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|    201|        const from_type *_unrolled_end =                \
  |  |   54|    201|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|    201|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  39.7k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 39.5k, False: 201]
  |  |  ------------------
  |  |   56|  39.5k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  39.5k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  39.5k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  39.5k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  39.5k|            _iter += 4; _to += 4;                       \
  |  |   61|  39.5k|        }                                               \
  |  |   62|    282|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 81, False: 201]
  |  |  ------------------
  |  |   63|    201|            *_to++ = (to_type) *_iter++;                \
  |  |   64|    201|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 201]
  |  |  ------------------
  ------------------
 2280|    201|                                 str, str + size,
 2281|    201|                                 data);
 2282|    201|    }
 2283|    193|    else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (2283:14): [True: 193, False: 0]
  ------------------
 2284|    193|        _PyUnicode_CONVERT_BYTES(Py_UCS4, Py_UCS2,
  ------------------
  |  |   48|    193|    do {                                                \
  |  |   49|    193|        to_type *_to = (to_type *)(to);                 \
  |  |   50|    193|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|    193|        const from_type *_end = (const from_type *)(end);\
  |  |   52|    193|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|    193|        const from_type *_unrolled_end =                \
  |  |   54|    193|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|    193|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  38.9k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 38.7k, False: 193]
  |  |  ------------------
  |  |   56|  38.7k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  38.7k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  38.7k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  38.7k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  38.7k|            _iter += 4; _to += 4;                       \
  |  |   61|  38.7k|        }                                               \
  |  |   62|    293|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 100, False: 193]
  |  |  ------------------
  |  |   63|    193|            *_to++ = (to_type) *_iter++;                \
  |  |   64|    193|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 193]
  |  |  ------------------
  ------------------
 2285|    193|                                 str, str + size,
 2286|    193|                                 data);
 2287|    193|    }
 2288|      0|    else {
 2289|      0|        memcpy(data, str, size * sizeof(Py_UCS4));
 2290|      0|    }
 2291|    394|    writer->pos += size;
 2292|       |
 2293|    394|    return 0;
 2294|    394|}
PyUnicode_FromKindAndData:
 2299|   907k|{
 2300|   907k|    if (size < 0) {
  ------------------
  |  Branch (2300:9): [True: 0, False: 907k]
  ------------------
 2301|      0|        PyErr_SetString(PyExc_ValueError, "size must be positive");
 2302|      0|        return NULL;
 2303|      0|    }
 2304|   907k|    switch (kind) {
 2305|  34.1k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (2305:5): [True: 34.1k, False: 873k]
  ------------------
 2306|  34.1k|        return _PyUnicode_FromUCS1(buffer, size);
 2307|   268k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (2307:5): [True: 268k, False: 638k]
  ------------------
 2308|   268k|        return _PyUnicode_FromUCS2(buffer, size);
 2309|   604k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (2309:5): [True: 604k, False: 303k]
  ------------------
 2310|   604k|        return _PyUnicode_FromUCS4(buffer, size);
 2311|      0|    default:
  ------------------
  |  Branch (2311:5): [True: 0, False: 907k]
  ------------------
 2312|      0|        PyErr_SetString(PyExc_SystemError, "invalid kind");
 2313|       |        return NULL;
 2314|   907k|    }
 2315|   907k|}
_PyUnicode_FindMaxChar:
 2319|  26.4k|{
 2320|  26.4k|    int kind;
 2321|  26.4k|    const void *startptr, *endptr;
 2322|       |
 2323|  26.4k|    assert(0 <= start);
  ------------------
  |  Branch (2323:5): [True: 26.4k, False: 0]
  ------------------
 2324|  26.4k|    assert(end <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (2324:5): [True: 26.4k, False: 0]
  ------------------
 2325|  26.4k|    assert(start <= end);
  ------------------
  |  Branch (2325:5): [True: 26.4k, False: 0]
  ------------------
 2326|       |
 2327|  26.4k|    if (start == 0 && end == PyUnicode_GET_LENGTH(unicode))
  ------------------
  |  |  299|     21|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     21|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     21|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2327:9): [True: 21, False: 26.4k]
  |  Branch (2327:23): [True: 0, False: 21]
  ------------------
 2328|      0|        return PyUnicode_MAX_CHAR_VALUE(unicode);
  ------------------
  |  |  405|      0|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2329|       |
 2330|  26.4k|    if (start == end)
  ------------------
  |  Branch (2330:9): [True: 0, False: 26.4k]
  ------------------
 2331|      0|        return 127;
 2332|       |
 2333|  26.4k|    if (PyUnicode_IS_ASCII(unicode))
  ------------------
  |  |  227|  26.4k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  26.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  26.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 21, False: 26.4k]
  |  |  ------------------
  ------------------
 2334|     21|        return 127;
 2335|       |
 2336|  26.4k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  26.4k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  52.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 26.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2337|  26.4k|    startptr = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|  26.4k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  26.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  26.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2338|  26.4k|    endptr = (char *)startptr + end * kind;
 2339|  26.4k|    startptr = (char *)startptr + start * kind;
 2340|  26.4k|    switch(kind) {
 2341|  3.08k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (2341:5): [True: 3.08k, False: 23.3k]
  ------------------
 2342|  3.08k|        return ucs1lib_find_max_char(startptr, endptr);
 2343|  23.0k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (2343:5): [True: 23.0k, False: 3.40k]
  ------------------
 2344|  23.0k|        return ucs2lib_find_max_char(startptr, endptr);
 2345|    320|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (2345:5): [True: 320, False: 26.1k]
  ------------------
 2346|    320|        return ucs4lib_find_max_char(startptr, endptr);
 2347|      0|    default:
  ------------------
  |  Branch (2347:5): [True: 0, False: 26.4k]
  ------------------
 2348|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2349|  26.4k|    }
 2350|  26.4k|}
PyUnicode_FromFormatV:
 3135|   125k|{
 3136|   125k|    _PyUnicodeWriter writer;
 3137|   125k|    _PyUnicodeWriter_Init(&writer);
 3138|       |
 3139|   125k|    if (unicode_from_format(&writer, format, vargs) < 0) {
  ------------------
  |  Branch (3139:9): [True: 0, False: 125k]
  ------------------
 3140|      0|        _PyUnicodeWriter_Dealloc(&writer);
 3141|      0|        return NULL;
 3142|      0|    }
 3143|   125k|    return _PyUnicodeWriter_Finish(&writer);
 3144|   125k|}
PyUnicode_FromFormat:
 3148|  47.5k|{
 3149|  47.5k|    PyObject* ret;
 3150|  47.5k|    va_list vargs;
 3151|       |
 3152|  47.5k|    va_start(vargs, format);
 3153|  47.5k|    ret = PyUnicode_FromFormatV(format, vargs);
 3154|       |    va_end(vargs);
 3155|  47.5k|    return ret;
 3156|  47.5k|}
PyUnicode_AsWideChar:
 3265|    133|{
 3266|    133|    Py_ssize_t res;
 3267|       |
 3268|    133|    if (unicode == NULL) {
  ------------------
  |  Branch (3268:9): [True: 0, False: 133]
  ------------------
 3269|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3270|      0|        return -1;
 3271|      0|    }
 3272|    133|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|    133|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    133|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3272:9): [True: 0, False: 133]
  ------------------
 3273|      0|        PyErr_BadArgument();
 3274|      0|        return -1;
 3275|      0|    }
 3276|       |
 3277|    133|    res = unicode_get_widechar_size(unicode);
 3278|    133|    if (w == NULL) {
  ------------------
  |  Branch (3278:9): [True: 0, False: 133]
  ------------------
 3279|      0|        return res + 1;
 3280|      0|    }
 3281|       |
 3282|    133|    if (size > res) {
  ------------------
  |  Branch (3282:9): [True: 133, False: 0]
  ------------------
 3283|    133|        size = res + 1;
 3284|    133|    }
 3285|      0|    else {
 3286|      0|        res = size;
 3287|      0|    }
 3288|    133|    unicode_copy_as_widechar(unicode, w, size);
 3289|       |
 3290|       |#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
 3291|       |    /* Oracle Solaris uses non-Unicode internal wchar_t form for
 3292|       |       non-Unicode locales and hence needs conversion first. */
 3293|       |    if (_Py_LocaleUsesNonUnicodeWchar()) {
 3294|       |        if (_Py_EncodeNonUnicodeWchar_InPlace(w, size) < 0) {
 3295|       |            return -1;
 3296|       |        }
 3297|       |    }
 3298|       |#endif
 3299|       |
 3300|    133|    return res;
 3301|    133|}
PyUnicode_AsWideCharString:
 3306|    192|{
 3307|    192|    wchar_t *buffer;
 3308|    192|    Py_ssize_t buflen;
 3309|       |
 3310|    192|    if (unicode == NULL) {
  ------------------
  |  Branch (3310:9): [True: 0, False: 192]
  ------------------
 3311|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3312|      0|        return NULL;
 3313|      0|    }
 3314|    192|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|    192|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    192|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3314:9): [True: 0, False: 192]
  ------------------
 3315|      0|        PyErr_BadArgument();
 3316|      0|        return NULL;
 3317|      0|    }
 3318|       |
 3319|    192|    buflen = unicode_get_widechar_size(unicode);
 3320|    192|    buffer = (wchar_t *) PyMem_New(wchar_t, (buflen + 1));
  ------------------
  |  |   64|    192|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|    192|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 192]
  |  |  ------------------
  |  |   65|    192|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 3321|    192|    if (buffer == NULL) {
  ------------------
  |  Branch (3321:9): [True: 0, False: 192]
  ------------------
 3322|      0|        PyErr_NoMemory();
 3323|      0|        return NULL;
 3324|      0|    }
 3325|    192|    unicode_copy_as_widechar(unicode, buffer, buflen + 1);
 3326|       |
 3327|       |#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
 3328|       |    /* Oracle Solaris uses non-Unicode internal wchar_t form for
 3329|       |       non-Unicode locales and hence needs conversion first. */
 3330|       |    if (_Py_LocaleUsesNonUnicodeWchar()) {
 3331|       |        if (_Py_EncodeNonUnicodeWchar_InPlace(buffer, (buflen + 1)) < 0) {
 3332|       |            return NULL;
 3333|       |        }
 3334|       |    }
 3335|       |#endif
 3336|       |
 3337|    192|    if (size != NULL) {
  ------------------
  |  Branch (3337:9): [True: 142, False: 50]
  ------------------
 3338|    142|        *size = buflen;
 3339|    142|    }
 3340|     50|    else if (wcslen(buffer) != (size_t)buflen) {
  ------------------
  |  Branch (3340:14): [True: 0, False: 50]
  ------------------
 3341|      0|        PyMem_Free(buffer);
 3342|      0|        PyErr_SetString(PyExc_ValueError,
 3343|      0|                        "embedded null character");
 3344|      0|        return NULL;
 3345|      0|    }
 3346|    192|    return buffer;
 3347|    192|}
PyUnicode_FromOrdinal:
 3401|   211k|{
 3402|   211k|    if (ordinal < 0 || ordinal > MAX_UNICODE) {
  ------------------
  |  |  108|   211k|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|   211k|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
  |  Branch (3402:9): [True: 0, False: 211k]
  |  Branch (3402:24): [True: 0, False: 211k]
  ------------------
 3403|      0|        PyErr_SetString(PyExc_ValueError,
 3404|      0|                        "chr() arg not in range(0x110000)");
 3405|      0|        return NULL;
 3406|      0|    }
 3407|       |
 3408|   211k|    return unicode_char((Py_UCS4)ordinal);
 3409|   211k|}
PyUnicode_FromObject:
 3413|  96.7k|{
 3414|       |    /* XXX Perhaps we should make this API an alias of
 3415|       |       PyObject_Str() instead ?! */
 3416|  96.7k|    if (PyUnicode_CheckExact(obj)) {
  ------------------
  |  |  104|  96.7k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  96.7k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  96.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  96.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 96.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3417|  96.7k|        return Py_NewRef(obj);
  ------------------
  |  |  550|  96.7k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  96.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  96.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3418|  96.7k|    }
 3419|      0|    if (PyUnicode_Check(obj)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3420|       |        /* For a Unicode subtype that's not a Unicode object,
 3421|       |           return a true Unicode object with the same data. */
 3422|      0|        return _PyUnicode_Copy(obj);
 3423|      0|    }
 3424|      0|    PyErr_Format(PyExc_TypeError,
 3425|      0|                 "Can't convert '%.100s' object to str implicitly",
 3426|      0|                 Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3427|       |    return NULL;
 3428|      0|}
PyUnicode_FromEncodedObject:
 3434|   168k|{
 3435|   168k|    Py_buffer buffer;
 3436|   168k|    PyObject *v;
 3437|       |
 3438|   168k|    if (obj == NULL) {
  ------------------
  |  Branch (3438:9): [True: 0, False: 168k]
  ------------------
 3439|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 3440|      0|        return NULL;
 3441|      0|    }
 3442|       |
 3443|       |    /* Decoding bytes objects is the most common case and should be fast */
 3444|   168k|    if (PyBytes_Check(obj)) {
  ------------------
  |  |   28|   168k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   168k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 168k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3445|   168k|        if (PyBytes_GET_SIZE(obj) == 0) {
  ------------------
  |  |   33|   168k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|   168k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   168k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3445:13): [True: 83.5k, False: 84.7k]
  ------------------
 3446|  83.5k|            if (unicode_check_encoding_errors(encoding, errors) < 0) {
  ------------------
  |  Branch (3446:17): [True: 0, False: 83.5k]
  ------------------
 3447|      0|                return NULL;
 3448|      0|            }
 3449|  83.5k|            _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|  83.5k|    do {                             \
  |  |  380|  83.5k|        return _PyUnicode_GetEmpty();\
  |  |  381|  83.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3450|  83.5k|        }
 3451|  84.7k|        return PyUnicode_Decode(
 3452|  84.7k|                PyBytes_AS_STRING(obj), PyBytes_GET_SIZE(obj),
  ------------------
  |  |   27|  84.7k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  84.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              PyBytes_AS_STRING(obj), PyBytes_GET_SIZE(obj),
  ------------------
  |  |   33|  84.7k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  84.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3453|  84.7k|                encoding, errors);
 3454|   168k|    }
 3455|       |
 3456|      0|    if (PyUnicode_Check(obj)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3457|      0|        PyErr_SetString(PyExc_TypeError,
 3458|      0|                        "decoding str is not supported");
 3459|      0|        return NULL;
 3460|      0|    }
 3461|       |
 3462|       |    /* Retrieve a bytes buffer view through the PEP 3118 buffer interface */
 3463|      0|    if (PyObject_GetBuffer(obj, &buffer, PyBUF_SIMPLE) < 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (3463:9): [True: 0, False: 0]
  ------------------
 3464|      0|        PyErr_Format(PyExc_TypeError,
 3465|      0|                     "decoding to str: need a bytes-like object, %.80s found",
 3466|      0|                     Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3467|      0|        return NULL;
 3468|      0|    }
 3469|       |
 3470|      0|    if (buffer.len == 0) {
  ------------------
  |  Branch (3470:9): [True: 0, False: 0]
  ------------------
 3471|      0|        PyBuffer_Release(&buffer);
 3472|      0|        if (unicode_check_encoding_errors(encoding, errors) < 0) {
  ------------------
  |  Branch (3472:13): [True: 0, False: 0]
  ------------------
 3473|      0|            return NULL;
 3474|      0|        }
 3475|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3476|      0|    }
 3477|       |
 3478|      0|    v = PyUnicode_Decode((char*) buffer.buf, buffer.len, encoding, errors);
 3479|      0|    PyBuffer_Release(&buffer);
 3480|      0|    return v;
 3481|      0|}
_Py_normalize_encoding:
 3491|   148k|{
 3492|   148k|    const char *e;
 3493|   148k|    char *l;
 3494|   148k|    char *l_end;
 3495|   148k|    int punct;
 3496|       |
 3497|   148k|    assert(encoding != NULL);
  ------------------
  |  Branch (3497:5): [True: 148k, False: 0]
  ------------------
 3498|       |
 3499|   148k|    e = encoding;
 3500|   148k|    l = lower;
 3501|   148k|    l_end = &lower[lower_len - 1];
 3502|   148k|    punct = 0;
 3503|  1.01M|    while (1) {
  ------------------
  |  Branch (3503:12): [True: 1.01M, Folded]
  ------------------
 3504|  1.01M|        char c = *e;
 3505|  1.01M|        if (c == 0) {
  ------------------
  |  Branch (3505:13): [True: 148k, False: 871k]
  ------------------
 3506|   148k|            break;
 3507|   148k|        }
 3508|       |
 3509|   871k|        if (Py_ISALNUM(c) || c == '.') {
  ------------------
  |  |   26|  1.74M|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |  163|   871k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |   12|   871k|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   10|   871k|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    8|   871k|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|   871k|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|   871k|#define PY_CTF_DIGIT  0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (26:24): [True: 861k, False: 9.74k]
  |  |  ------------------
  ------------------
  |  Branch (3509:30): [True: 1.34k, False: 8.40k]
  ------------------
 3510|   862k|            if (punct && l != lower) {
  ------------------
  |  Branch (3510:17): [True: 5.59k, False: 857k]
  |  Branch (3510:26): [True: 5.54k, False: 55]
  ------------------
 3511|  5.54k|                if (l == l_end) {
  ------------------
  |  Branch (3511:21): [True: 3, False: 5.53k]
  ------------------
 3512|      3|                    return 0;
 3513|      3|                }
 3514|  5.53k|                *l++ = '_';
 3515|  5.53k|            }
 3516|   862k|            punct = 0;
 3517|       |
 3518|   862k|            if (l == l_end) {
  ------------------
  |  Branch (3518:17): [True: 65, False: 862k]
  ------------------
 3519|     65|                return 0;
 3520|     65|            }
 3521|   862k|            *l++ = to_lower ? Py_TOLOWER(c) : c;
  ------------------
  |  |   32|   842k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|   842k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  |  Branch (3521:20): [True: 842k, False: 19.8k]
  ------------------
 3522|   862k|        }
 3523|  8.40k|        else {
 3524|  8.40k|            punct = 1;
 3525|  8.40k|        }
 3526|       |
 3527|   870k|        e++;
 3528|   870k|    }
 3529|   148k|    *l = '\0';
 3530|   148k|    return 1;
 3531|   148k|}
PyUnicode_Decode:
 3538|  94.4k|{
 3539|  94.4k|    PyObject *buffer = NULL, *unicode;
 3540|  94.4k|    Py_buffer info;
 3541|  94.4k|    char buflower[11];   /* strlen("iso-8859-1\0") == 11, longest shortcut */
 3542|       |
 3543|  94.4k|    if (unicode_check_encoding_errors(encoding, errors) < 0) {
  ------------------
  |  Branch (3543:9): [True: 0, False: 94.4k]
  ------------------
 3544|      0|        return NULL;
 3545|      0|    }
 3546|       |
 3547|  94.4k|    if (size == 0) {
  ------------------
  |  Branch (3547:9): [True: 2, False: 94.4k]
  ------------------
 3548|      2|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      2|    do {                             \
  |  |  380|      2|        return _PyUnicode_GetEmpty();\
  |  |  381|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3549|      2|    }
 3550|       |
 3551|  94.4k|    if (encoding == NULL) {
  ------------------
  |  Branch (3551:9): [True: 0, False: 94.4k]
  ------------------
 3552|      0|        return PyUnicode_DecodeUTF8Stateful(s, size, errors, NULL);
 3553|      0|    }
 3554|       |
 3555|       |    /* Shortcuts for common default encodings */
 3556|  94.4k|    if (_Py_normalize_encoding(encoding, buflower, sizeof(buflower), 1)) {
  ------------------
  |  Branch (3556:9): [True: 94.3k, False: 68]
  ------------------
 3557|  94.3k|        char *lower = buflower;
 3558|       |
 3559|       |        /* Fast paths */
 3560|  94.3k|        if (lower[0] == 'u' && lower[1] == 't' && lower[2] == 'f') {
  ------------------
  |  Branch (3560:13): [True: 4.51k, False: 89.8k]
  |  Branch (3560:32): [True: 4.33k, False: 180]
  |  Branch (3560:51): [True: 4.32k, False: 7]
  ------------------
 3561|  4.32k|            lower += 3;
 3562|  4.32k|            if (*lower == '_') {
  ------------------
  |  Branch (3562:17): [True: 4.30k, False: 17]
  ------------------
 3563|       |                /* Match "utf8" and "utf_8" */
 3564|  4.30k|                lower++;
 3565|  4.30k|            }
 3566|       |
 3567|  4.32k|            if (lower[0] == '8' && lower[1] == 0) {
  ------------------
  |  Branch (3567:17): [True: 4.11k, False: 212]
  |  Branch (3567:36): [True: 4.11k, False: 3]
  ------------------
 3568|  4.11k|                return PyUnicode_DecodeUTF8Stateful(s, size, errors, NULL);
 3569|  4.11k|            }
 3570|    215|            else if (lower[0] == '1' && lower[1] == '6' && lower[2] == 0) {
  ------------------
  |  Branch (3570:22): [True: 102, False: 113]
  |  Branch (3570:41): [True: 101, False: 1]
  |  Branch (3570:60): [True: 39, False: 62]
  ------------------
 3571|     39|                return PyUnicode_DecodeUTF16(s, size, errors, 0);
 3572|     39|            }
 3573|    176|            else if (lower[0] == '3' && lower[1] == '2' && lower[2] == 0) {
  ------------------
  |  Branch (3573:22): [True: 14, False: 162]
  |  Branch (3573:41): [True: 11, False: 3]
  |  Branch (3573:60): [True: 7, False: 4]
  ------------------
 3574|      7|                return PyUnicode_DecodeUTF32(s, size, errors, 0);
 3575|      7|            }
 3576|  4.32k|        }
 3577|  90.0k|        else {
 3578|  90.0k|            if (strcmp(lower, "ascii") == 0
  ------------------
  |  Branch (3578:17): [True: 66.5k, False: 23.4k]
  ------------------
 3579|  66.5k|                || strcmp(lower, "us_ascii") == 0) {
  ------------------
  |  Branch (3579:20): [True: 3, False: 23.4k]
  ------------------
 3580|  66.5k|                return PyUnicode_DecodeASCII(s, size, errors);
 3581|  66.5k|            }
 3582|       |    #ifdef MS_WINDOWS
 3583|       |            else if (strcmp(lower, "mbcs") == 0) {
 3584|       |                return PyUnicode_DecodeMBCS(s, size, errors);
 3585|       |            }
 3586|       |    #endif
 3587|  23.4k|            else if (strcmp(lower, "latin1") == 0
  ------------------
  |  Branch (3587:22): [True: 34, False: 23.4k]
  ------------------
 3588|  23.4k|                     || strcmp(lower, "latin_1") == 0
  ------------------
  |  Branch (3588:25): [True: 3, False: 23.4k]
  ------------------
 3589|  23.4k|                     || strcmp(lower, "iso_8859_1") == 0
  ------------------
  |  Branch (3589:25): [True: 24, False: 23.4k]
  ------------------
 3590|  23.4k|                     || strcmp(lower, "iso8859_1") == 0) {
  ------------------
  |  Branch (3590:25): [True: 3, False: 23.4k]
  ------------------
 3591|     64|                return PyUnicode_DecodeLatin1(s, size, errors);
 3592|     64|            }
 3593|  90.0k|        }
 3594|  94.3k|    }
 3595|       |
 3596|       |    /* Decode via the codec registry */
 3597|  23.6k|    buffer = NULL;
 3598|  23.6k|    if (PyBuffer_FillInfo(&info, NULL, (void *)s, size, 1, PyBUF_FULL_RO) < 0)
  ------------------
  |  |  134|  23.6k|#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  122|  23.6k|#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|  23.6k|#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  117|  23.6k|#define PyBUF_ND 0x0008
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
  |  |  ------------------
  |  |  |  |  116|  23.6k|#define PyBUF_FORMAT 0x0004
  |  |  ------------------
  ------------------
  |  Branch (3598:9): [True: 0, False: 23.6k]
  ------------------
 3599|      0|        goto onError;
 3600|  23.6k|    buffer = PyMemoryView_FromBuffer(&info);
 3601|  23.6k|    if (buffer == NULL)
  ------------------
  |  Branch (3601:9): [True: 0, False: 23.6k]
  ------------------
 3602|      0|        goto onError;
 3603|  23.6k|    unicode = _PyCodec_DecodeText(buffer, encoding, errors);
 3604|  23.6k|    if (unicode == NULL)
  ------------------
  |  Branch (3604:9): [True: 2.15k, False: 21.5k]
  ------------------
 3605|  2.15k|        goto onError;
 3606|  21.5k|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|  21.5k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  21.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3606:9): [True: 0, False: 21.5k]
  ------------------
 3607|      0|        PyErr_Format(PyExc_TypeError,
 3608|      0|                     "'%.400s' decoder returned '%.400s' instead of 'str'; "
 3609|      0|                     "use codecs.decode() to decode to arbitrary types",
 3610|      0|                     encoding,
 3611|      0|                     Py_TYPE(unicode)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3612|      0|        Py_DECREF(unicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3613|      0|        goto onError;
 3614|      0|    }
 3615|  21.5k|    Py_DECREF(buffer);
  ------------------
  |  |  430|  21.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3616|  21.5k|    return unicode_result(unicode);
  ------------------
  |  |  752|  21.5k|#define unicode_result _PyUnicode_Result
  ------------------
 3617|       |
 3618|  2.15k|  onError:
 3619|  2.15k|    Py_XDECREF(buffer);
  ------------------
  |  |  524|  2.15k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3620|       |    return NULL;
 3621|  21.5k|}
PyUnicode_EncodeFSDefault:
 3759|  6.19k|{
 3760|  6.19k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 3761|  6.19k|    struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
 3762|  6.19k|    if (fs_codec->utf8) {
  ------------------
  |  Branch (3762:9): [True: 6.10k, False: 82]
  ------------------
 3763|  6.10k|        return unicode_encode_utf8(unicode,
 3764|  6.10k|                                   fs_codec->error_handler,
 3765|  6.10k|                                   fs_codec->errors);
 3766|  6.10k|    }
 3767|     82|#ifndef _Py_FORCE_UTF8_FS_ENCODING
 3768|     82|    else if (fs_codec->encoding) {
  ------------------
  |  Branch (3768:14): [True: 0, False: 82]
  ------------------
 3769|      0|        return PyUnicode_AsEncodedString(unicode,
 3770|      0|                                         fs_codec->encoding,
 3771|      0|                                         fs_codec->errors);
 3772|      0|    }
 3773|     82|#endif
 3774|     82|    else {
 3775|       |        /* Before _PyUnicode_InitEncodings() is called, the Python codec
 3776|       |           machinery is not ready and so cannot be used:
 3777|       |           use wcstombs() in this case. */
 3778|     82|        const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 3779|     82|        const wchar_t *filesystem_errors = config->filesystem_errors;
 3780|     82|        assert(filesystem_errors != NULL);
  ------------------
  |  Branch (3780:9): [True: 82, False: 0]
  ------------------
 3781|     82|        _Py_error_handler errors = get_error_handler_wide(filesystem_errors);
 3782|     82|        assert(errors != _Py_ERROR_UNKNOWN);
  ------------------
  |  Branch (3782:9): [True: 82, False: 0]
  ------------------
 3783|       |#ifdef _Py_FORCE_UTF8_FS_ENCODING
 3784|       |        return unicode_encode_utf8(unicode, errors, NULL);
 3785|       |#else
 3786|     82|        return unicode_encode_locale(unicode, errors, 0);
 3787|     82|#endif
 3788|     82|    }
 3789|  6.19k|}
PyUnicode_AsEncodedString:
 3795|  53.3k|{
 3796|  53.3k|    PyObject *v;
 3797|  53.3k|    char buflower[11];   /* strlen("iso_8859_1\0") == 11, longest shortcut */
 3798|       |
 3799|  53.3k|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|  53.3k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  53.3k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3799:9): [True: 0, False: 53.3k]
  ------------------
 3800|      0|        PyErr_BadArgument();
 3801|      0|        return NULL;
 3802|      0|    }
 3803|       |
 3804|  53.3k|    if (unicode_check_encoding_errors(encoding, errors) < 0) {
  ------------------
  |  Branch (3804:9): [True: 0, False: 53.3k]
  ------------------
 3805|      0|        return NULL;
 3806|      0|    }
 3807|       |
 3808|  53.3k|    if (encoding == NULL) {
  ------------------
  |  Branch (3808:9): [True: 0, False: 53.3k]
  ------------------
 3809|      0|        return _PyUnicode_AsUTF8String(unicode, errors);
 3810|      0|    }
 3811|       |
 3812|       |    /* Shortcuts for common default encodings */
 3813|  53.3k|    if (_Py_normalize_encoding(encoding, buflower, sizeof(buflower), 1)) {
  ------------------
  |  Branch (3813:9): [True: 53.3k, False: 0]
  ------------------
 3814|  53.3k|        char *lower = buflower;
 3815|       |
 3816|       |        /* Fast paths */
 3817|  53.3k|        if (lower[0] == 'u' && lower[1] == 't' && lower[2] == 'f') {
  ------------------
  |  Branch (3817:13): [True: 6, False: 53.3k]
  |  Branch (3817:32): [True: 6, False: 0]
  |  Branch (3817:51): [True: 6, False: 0]
  ------------------
 3818|      6|            lower += 3;
 3819|      6|            if (*lower == '_') {
  ------------------
  |  Branch (3819:17): [True: 6, False: 0]
  ------------------
 3820|       |                /* Match "utf8" and "utf_8" */
 3821|      6|                lower++;
 3822|      6|            }
 3823|       |
 3824|      6|            if (lower[0] == '8' && lower[1] == 0) {
  ------------------
  |  Branch (3824:17): [True: 6, False: 0]
  |  Branch (3824:36): [True: 6, False: 0]
  ------------------
 3825|      6|                return _PyUnicode_AsUTF8String(unicode, errors);
 3826|      6|            }
 3827|      0|            else if (lower[0] == '1' && lower[1] == '6' && lower[2] == 0) {
  ------------------
  |  Branch (3827:22): [True: 0, False: 0]
  |  Branch (3827:41): [True: 0, False: 0]
  |  Branch (3827:60): [True: 0, False: 0]
  ------------------
 3828|      0|                return _PyUnicode_EncodeUTF16(unicode, errors, 0);
 3829|      0|            }
 3830|      0|            else if (lower[0] == '3' && lower[1] == '2' && lower[2] == 0) {
  ------------------
  |  Branch (3830:22): [True: 0, False: 0]
  |  Branch (3830:41): [True: 0, False: 0]
  |  Branch (3830:60): [True: 0, False: 0]
  ------------------
 3831|      0|                return _PyUnicode_EncodeUTF32(unicode, errors, 0);
 3832|      0|            }
 3833|      6|        }
 3834|  53.3k|        else {
 3835|  53.3k|            if (strcmp(lower, "ascii") == 0
  ------------------
  |  Branch (3835:17): [True: 35.6k, False: 17.7k]
  ------------------
 3836|  35.6k|                || strcmp(lower, "us_ascii") == 0) {
  ------------------
  |  Branch (3836:20): [True: 0, False: 17.7k]
  ------------------
 3837|  35.6k|                return _PyUnicode_AsASCIIString(unicode, errors);
 3838|  35.6k|            }
 3839|       |#ifdef MS_WINDOWS
 3840|       |            else if (strcmp(lower, "mbcs") == 0) {
 3841|       |                return PyUnicode_EncodeCodePage(CP_ACP, unicode, errors);
 3842|       |            }
 3843|       |#endif
 3844|  17.7k|            else if (strcmp(lower, "latin1") == 0 ||
  ------------------
  |  Branch (3844:22): [True: 0, False: 17.7k]
  ------------------
 3845|  17.7k|                     strcmp(lower, "latin_1") == 0 ||
  ------------------
  |  Branch (3845:22): [True: 0, False: 17.7k]
  ------------------
 3846|  17.7k|                     strcmp(lower, "iso_8859_1") == 0 ||
  ------------------
  |  Branch (3846:22): [True: 0, False: 17.7k]
  ------------------
 3847|  17.7k|                     strcmp(lower, "iso8859_1") == 0) {
  ------------------
  |  Branch (3847:22): [True: 0, False: 17.7k]
  ------------------
 3848|      0|                return _PyUnicode_AsLatin1String(unicode, errors);
 3849|      0|            }
 3850|  53.3k|        }
 3851|  53.3k|    }
 3852|       |
 3853|       |    /* Encode via the codec registry */
 3854|  17.7k|    v = _PyCodec_EncodeText(unicode, encoding, errors);
 3855|  17.7k|    if (v == NULL)
  ------------------
  |  Branch (3855:9): [True: 0, False: 17.7k]
  ------------------
 3856|      0|        return NULL;
 3857|       |
 3858|       |    /* The normal path */
 3859|  17.7k|    if (PyBytes_Check(v))
  ------------------
  |  |   28|  17.7k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  17.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 17.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3860|  17.7k|        return v;
 3861|       |
 3862|       |    /* If the codec returns a buffer, raise a warning and convert to bytes */
 3863|      0|    if (PyByteArray_Check(v)) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3864|      0|        int error;
 3865|      0|        PyObject *b;
 3866|       |
 3867|      0|        error = PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
 3868|      0|            "encoder %s returned bytearray instead of bytes; "
 3869|      0|            "use codecs.encode() to encode to arbitrary types",
 3870|      0|            encoding);
 3871|      0|        if (error) {
  ------------------
  |  Branch (3871:13): [True: 0, False: 0]
  ------------------
 3872|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3873|      0|            return NULL;
 3874|      0|        }
 3875|       |
 3876|      0|        b = PyBytes_FromStringAndSize(PyByteArray_AS_STRING(v),
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3877|      0|                                      PyByteArray_GET_SIZE(v));
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3878|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3879|      0|        return b;
 3880|      0|    }
 3881|       |
 3882|      0|    PyErr_Format(PyExc_TypeError,
 3883|      0|                 "'%.400s' encoder returned '%.400s' instead of 'bytes'; "
 3884|      0|                 "use codecs.encode() to encode to arbitrary types",
 3885|      0|                 encoding,
 3886|      0|                 Py_TYPE(v)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3887|      0|    Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3888|       |    return NULL;
 3889|      0|}
PyUnicode_DecodeLocale:
 3976|  6.97k|{
 3977|  6.97k|    Py_ssize_t size = (Py_ssize_t)strlen(str);
 3978|  6.97k|    _Py_error_handler error_handler = _Py_GetErrorHandler(errors);
 3979|  6.97k|    return unicode_decode_locale(str, size, error_handler, 1);
 3980|  6.97k|}
PyUnicode_DecodeFSDefault:
 3984|  24.5k|PyUnicode_DecodeFSDefault(const char *s) {
 3985|  24.5k|    Py_ssize_t size = (Py_ssize_t)strlen(s);
 3986|  24.5k|    return PyUnicode_DecodeFSDefaultAndSize(s, size);
 3987|  24.5k|}
PyUnicode_DecodeFSDefaultAndSize:
 3991|  25.3k|{
 3992|  25.3k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 3993|  25.3k|    struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
 3994|  25.3k|    if (fs_codec->utf8) {
  ------------------
  |  Branch (3994:9): [True: 24.7k, False: 648]
  ------------------
 3995|  24.7k|        return unicode_decode_utf8(s, size,
 3996|  24.7k|                                   fs_codec->error_handler,
 3997|  24.7k|                                   fs_codec->errors,
 3998|  24.7k|                                   NULL);
 3999|  24.7k|    }
 4000|    648|#ifndef _Py_FORCE_UTF8_FS_ENCODING
 4001|    648|    else if (fs_codec->encoding) {
  ------------------
  |  Branch (4001:14): [True: 0, False: 648]
  ------------------
 4002|      0|        return PyUnicode_Decode(s, size,
 4003|      0|                                fs_codec->encoding,
 4004|      0|                                fs_codec->errors);
 4005|      0|    }
 4006|    648|#endif
 4007|    648|    else {
 4008|       |        /* Before _PyUnicode_InitEncodings() is called, the Python codec
 4009|       |           machinery is not ready and so cannot be used:
 4010|       |           use mbstowcs() in this case. */
 4011|    648|        const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 4012|    648|        const wchar_t *filesystem_errors = config->filesystem_errors;
 4013|    648|        assert(filesystem_errors != NULL);
  ------------------
  |  Branch (4013:9): [True: 648, False: 0]
  ------------------
 4014|    648|        _Py_error_handler errors = get_error_handler_wide(filesystem_errors);
 4015|    648|        assert(errors != _Py_ERROR_UNKNOWN);
  ------------------
  |  Branch (4015:9): [True: 648, False: 0]
  ------------------
 4016|       |#ifdef _Py_FORCE_UTF8_FS_ENCODING
 4017|       |        return unicode_decode_utf8(s, size, errors, NULL, NULL);
 4018|       |#else
 4019|    648|        return unicode_decode_locale(s, size, errors, 0);
 4020|    648|#endif
 4021|    648|    }
 4022|  25.3k|}
PyUnicode_FSConverter:
 4027|  5.59k|{
 4028|  5.59k|    PyObject *path = NULL;
 4029|  5.59k|    PyObject *output = NULL;
 4030|  5.59k|    Py_ssize_t size;
 4031|  5.59k|    const char *data;
 4032|  5.59k|    if (arg == NULL) {
  ------------------
  |  Branch (4032:9): [True: 0, False: 5.59k]
  ------------------
 4033|      0|        Py_DECREF(*(PyObject**)addr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4034|      0|        *(PyObject**)addr = NULL;
 4035|      0|        return 1;
 4036|      0|    }
 4037|  5.59k|    path = PyOS_FSPath(arg);
 4038|  5.59k|    if (path == NULL) {
  ------------------
  |  Branch (4038:9): [True: 0, False: 5.59k]
  ------------------
 4039|      0|        return 0;
 4040|      0|    }
 4041|  5.59k|    if (PyBytes_Check(path)) {
  ------------------
  |  |   28|  5.59k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  5.59k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 5.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4042|      0|        output = path;
 4043|      0|    }
 4044|  5.59k|    else {  // PyOS_FSPath() guarantees its returned value is bytes or str.
 4045|  5.59k|        output = PyUnicode_EncodeFSDefault(path);
 4046|  5.59k|        Py_DECREF(path);
  ------------------
  |  |  430|  5.59k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4047|  5.59k|        if (!output) {
  ------------------
  |  Branch (4047:13): [True: 0, False: 5.59k]
  ------------------
 4048|      0|            return 0;
 4049|      0|        }
 4050|  5.59k|        assert(PyBytes_Check(output));
  ------------------
  |  Branch (4050:9): [True: 5.59k, False: 0]
  ------------------
 4051|  5.59k|    }
 4052|       |
 4053|  5.59k|    size = PyBytes_GET_SIZE(output);
  ------------------
  |  |   33|  5.59k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  5.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4054|  5.59k|    data = PyBytes_AS_STRING(output);
  ------------------
  |  |   27|  5.59k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4055|  5.59k|    if ((size_t)size != strlen(data)) {
  ------------------
  |  Branch (4055:9): [True: 0, False: 5.59k]
  ------------------
 4056|      0|        PyErr_SetString(PyExc_ValueError, "embedded null byte");
 4057|      0|        Py_DECREF(output);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4058|      0|        return 0;
 4059|      0|    }
 4060|  5.59k|    *(PyObject**)addr = output;
 4061|  5.59k|    return Py_CLEANUP_SUPPORTED;
  ------------------
  |  |   57|  5.59k|#define Py_CLEANUP_SUPPORTED 0x20000
  ------------------
 4062|  5.59k|}
PyUnicode_AsUTF8AndSize:
 4129|   309k|{
 4130|   309k|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|   309k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   309k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4130:9): [True: 0, False: 309k]
  ------------------
 4131|      0|        PyErr_BadArgument();
 4132|      0|        if (psize) {
  ------------------
  |  Branch (4132:13): [True: 0, False: 0]
  ------------------
 4133|      0|            *psize = -1;
 4134|      0|        }
 4135|      0|        return NULL;
 4136|      0|    }
 4137|       |
 4138|   309k|    if (unicode_ensure_utf8(unicode) == -1) {
  ------------------
  |  Branch (4138:9): [True: 34, False: 309k]
  ------------------
 4139|     34|        if (psize) {
  ------------------
  |  Branch (4139:13): [True: 34, False: 0]
  ------------------
 4140|     34|            *psize = -1;
 4141|     34|        }
 4142|     34|        return NULL;
 4143|     34|    }
 4144|       |
 4145|   309k|    if (psize) {
  ------------------
  |  Branch (4145:9): [True: 236k, False: 72.8k]
  ------------------
 4146|   236k|        *psize = PyUnicode_UTF8_LENGTH(unicode);
 4147|   236k|    }
 4148|   309k|    return PyUnicode_UTF8(unicode);
 4149|   309k|}
PyUnicode_AsUTF8:
 4153|  72.8k|{
 4154|       |    return PyUnicode_AsUTF8AndSize(unicode, NULL);
 4155|  72.8k|}
_PyUnicode_AsUTF8NoNUL:
 4159|   154k|{
 4160|   154k|    Py_ssize_t size;
 4161|   154k|    const char *s = PyUnicode_AsUTF8AndSize(unicode, &size);
 4162|   154k|    if (s && strlen(s) != (size_t)size) {
  ------------------
  |  Branch (4162:9): [True: 154k, False: 0]
  |  Branch (4162:14): [True: 0, False: 154k]
  ------------------
 4163|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 4164|      0|        return NULL;
 4165|      0|    }
 4166|   154k|    return s;
 4167|   154k|}
PyUnicode_GetLength:
 4187|     84|{
 4188|     84|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|     84|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     84|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4188:9): [True: 0, False: 84]
  ------------------
 4189|      0|        PyErr_BadArgument();
 4190|      0|        return -1;
 4191|      0|    }
 4192|     84|    return PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|     84|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     84|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     84|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4193|     84|}
PyUnicode_ReadChar:
 4197|     29|{
 4198|     29|    const void *data;
 4199|     29|    int kind;
 4200|       |
 4201|     29|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|     29|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     29|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4201:9): [True: 0, False: 29]
  ------------------
 4202|      0|        PyErr_BadArgument();
 4203|      0|        return (Py_UCS4)-1;
 4204|      0|    }
 4205|     29|    if (index < 0 || index >= PyUnicode_GET_LENGTH(unicode)) {
  ------------------
  |  |  299|     29|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4205:9): [True: 0, False: 29]
  |  Branch (4205:22): [True: 0, False: 29]
  ------------------
 4206|      0|        PyErr_SetString(PyExc_IndexError, "string index out of range");
 4207|      0|        return (Py_UCS4)-1;
 4208|      0|    }
 4209|     29|    data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|     29|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4210|     29|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|     29|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|     58|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 29, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4211|     29|    return PyUnicode_READ(kind, data, index);
  ------------------
  |  |  354|     29|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|     29|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|     29|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|     29|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|     29|                   (index))
  ------------------
 4212|     29|}
PyUnicode_DecodeUTF7Stateful:
 4593|    170|{
 4594|    170|    const char *starts = s;
 4595|    170|    Py_ssize_t startinpos;
 4596|    170|    Py_ssize_t endinpos;
 4597|    170|    const char *e;
 4598|    170|    _PyUnicodeWriter writer;
 4599|    170|    const char *errmsg = "";
 4600|    170|    int inShift = 0;
 4601|    170|    Py_ssize_t shiftOutStart;
 4602|    170|    unsigned int base64bits = 0;
 4603|    170|    unsigned long base64buffer = 0;
 4604|    170|    Py_UCS4 surrogate = 0;
 4605|    170|    PyObject *errorHandler = NULL;
 4606|    170|    PyObject *exc = NULL;
 4607|       |
 4608|    170|    if (size == 0) {
  ------------------
  |  Branch (4608:9): [True: 0, False: 170]
  ------------------
 4609|      0|        if (consumed)
  ------------------
  |  Branch (4609:13): [True: 0, False: 0]
  ------------------
 4610|      0|            *consumed = 0;
 4611|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4612|      0|    }
 4613|       |
 4614|       |    /* Start off assuming it's all ASCII. Widen later as necessary. */
 4615|    170|    _PyUnicodeWriter_Init(&writer);
 4616|    170|    writer.min_length = size;
 4617|       |
 4618|    170|    shiftOutStart = 0;
 4619|    170|    e = s + size;
 4620|       |
 4621|   117k|    while (s < e) {
  ------------------
  |  Branch (4621:12): [True: 117k, False: 89]
  ------------------
 4622|   117k|        Py_UCS4 ch;
 4623|   117k|      restart:
 4624|   117k|        ch = (unsigned char) *s;
 4625|       |
 4626|   117k|        if (inShift) { /* in a base-64 section */
  ------------------
  |  Branch (4626:13): [True: 17.0k, False: 100k]
  ------------------
 4627|  17.0k|            if (IS_BASE64(ch)) { /* consume a base-64 character */
  ------------------
  |  | 4504|  17.0k|    (((c) >= 'A' && (c) <= 'Z') ||     \
  |  |  ------------------
  |  |  |  Branch (4504:7): [True: 4.47k, False: 12.6k]
  |  |  |  Branch (4504:21): [True: 690, False: 3.78k]
  |  |  ------------------
  |  | 4505|  17.0k|     ((c) >= 'a' && (c) <= 'z') ||     \
  |  |  ------------------
  |  |  |  Branch (4505:7): [True: 3.64k, False: 12.7k]
  |  |  |  Branch (4505:21): [True: 3.61k, False: 32]
  |  |  ------------------
  |  | 4506|  17.0k|     ((c) >= '0' && (c) <= '9') ||     \
  |  |  ------------------
  |  |  |  Branch (4506:7): [True: 4.80k, False: 7.98k]
  |  |  |  Branch (4506:21): [True: 4.43k, False: 375]
  |  |  ------------------
  |  | 4507|  17.0k|     (c) == '+' || (c) == '/')
  |  |  ------------------
  |  |  |  Branch (4507:6): [True: 3.31k, False: 5.04k]
  |  |  |  Branch (4507:20): [True: 3.56k, False: 1.48k]
  |  |  ------------------
  ------------------
 4628|  15.6k|                base64buffer = (base64buffer << 6) | FROM_BASE64(ch);
  ------------------
  |  | 4512|  15.6k|    (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' :                           \
  |  |  ------------------
  |  |  |  Branch (4512:7): [True: 4.30k, False: 11.3k]
  |  |  |  Branch (4512:21): [True: 690, False: 3.61k]
  |  |  ------------------
  |  | 4513|  15.6k|     ((c) >= 'a' && (c) <= 'z') ? (c) - 'a' + 26 :                      \
  |  |  ------------------
  |  |  |  Branch (4513:7): [True: 3.61k, False: 11.3k]
  |  |  |  Branch (4513:21): [True: 3.61k, False: 0]
  |  |  ------------------
  |  | 4514|  14.9k|     ((c) >= '0' && (c) <= '9') ? (c) - '0' + 52 :                      \
  |  |  ------------------
  |  |  |  Branch (4514:7): [True: 4.43k, False: 6.87k]
  |  |  |  Branch (4514:21): [True: 4.43k, False: 0]
  |  |  ------------------
  |  | 4515|  11.3k|     (c) == '+' ? 62 : 63)
  |  |  ------------------
  |  |  |  Branch (4515:6): [True: 3.31k, False: 3.56k]
  |  |  ------------------
  ------------------
 4629|  15.6k|                base64bits += 6;
 4630|  15.6k|                s++;
 4631|  15.6k|                if (base64bits >= 16) {
  ------------------
  |  Branch (4631:21): [True: 5.76k, False: 9.85k]
  ------------------
 4632|       |                    /* we have enough bits for a UTF-16 value */
 4633|  5.76k|                    Py_UCS4 outCh = (Py_UCS4)(base64buffer >> (base64bits-16));
 4634|  5.76k|                    base64bits -= 16;
 4635|  5.76k|                    base64buffer &= (1 << base64bits) - 1; /* clear high bits */
 4636|  5.76k|                    assert(outCh <= 0xffff);
  ------------------
  |  Branch (4636:21): [True: 5.76k, False: 0]
  ------------------
 4637|  5.76k|                    if (surrogate) {
  ------------------
  |  Branch (4637:25): [True: 516, False: 5.24k]
  ------------------
 4638|       |                        /* expecting a second surrogate */
 4639|    516|                        if (Py_UNICODE_IS_LOW_SURROGATE(outCh)) {
  ------------------
  |  Branch (4639:29): [True: 309, False: 207]
  ------------------
 4640|    309|                            Py_UCS4 ch2 = Py_UNICODE_JOIN_SURROGATES(surrogate, outCh);
 4641|    309|                            if (_PyUnicodeWriter_WriteCharInline(&writer, ch2) < 0)
  ------------------
  |  Branch (4641:33): [True: 0, False: 309]
  ------------------
 4642|      0|                                goto onError;
 4643|    309|                            surrogate = 0;
 4644|    309|                            continue;
 4645|    309|                        }
 4646|    207|                        else {
 4647|    207|                            if (_PyUnicodeWriter_WriteCharInline(&writer, surrogate) < 0)
  ------------------
  |  Branch (4647:33): [True: 0, False: 207]
  ------------------
 4648|      0|                                goto onError;
 4649|    207|                            surrogate = 0;
 4650|    207|                        }
 4651|    516|                    }
 4652|  5.45k|                    if (Py_UNICODE_IS_HIGH_SURROGATE(outCh)) {
  ------------------
  |  Branch (4652:25): [True: 829, False: 4.62k]
  ------------------
 4653|       |                        /* first surrogate */
 4654|    829|                        surrogate = outCh;
 4655|    829|                    }
 4656|  4.62k|                    else {
 4657|  4.62k|                        if (_PyUnicodeWriter_WriteCharInline(&writer, outCh) < 0)
  ------------------
  |  Branch (4657:29): [True: 0, False: 4.62k]
  ------------------
 4658|      0|                            goto onError;
 4659|  4.62k|                    }
 4660|  5.45k|                }
 4661|  15.6k|            }
 4662|  1.48k|            else { /* now leaving a base-64 section */
 4663|  1.48k|                inShift = 0;
 4664|  1.48k|                if (base64bits > 0) { /* left-over bits */
  ------------------
  |  Branch (4664:21): [True: 530, False: 950]
  ------------------
 4665|    530|                    if (base64bits >= 6) {
  ------------------
  |  Branch (4665:25): [True: 35, False: 495]
  ------------------
 4666|       |                        /* We've seen at least one base-64 character */
 4667|     35|                        s++;
 4668|     35|                        errmsg = "partial character in shift sequence";
 4669|     35|                        goto utf7Error;
 4670|     35|                    }
 4671|    495|                    else {
 4672|       |                        /* Some bits remain; they should be zero */
 4673|    495|                        if (base64buffer != 0) {
  ------------------
  |  Branch (4673:29): [True: 17, False: 478]
  ------------------
 4674|     17|                            s++;
 4675|     17|                            errmsg = "non-zero padding bits in shift sequence";
 4676|     17|                            goto utf7Error;
 4677|     17|                        }
 4678|    495|                    }
 4679|    530|                }
 4680|  1.42k|                if (surrogate && DECODE_DIRECT(ch)) {
  ------------------
  |  | 4528|    306|    ((c) <= 127 && (c) != '+')
  |  |  ------------------
  |  |  |  Branch (4528:6): [True: 305, False: 1]
  |  |  |  Branch (4528:20): [True: 305, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (4680:21): [True: 306, False: 1.12k]
  ------------------
 4681|    305|                    if (_PyUnicodeWriter_WriteCharInline(&writer, surrogate) < 0)
  ------------------
  |  Branch (4681:25): [True: 0, False: 305]
  ------------------
 4682|      0|                        goto onError;
 4683|    305|                }
 4684|  1.42k|                surrogate = 0;
 4685|  1.42k|                if (ch == '-') {
  ------------------
  |  Branch (4685:21): [True: 234, False: 1.19k]
  ------------------
 4686|       |                    /* '-' is absorbed; other terminating
 4687|       |                       characters are preserved */
 4688|    234|                    s++;
 4689|    234|                }
 4690|  1.42k|            }
 4691|  17.0k|        }
 4692|   100k|        else if ( ch == '+' ) {
  ------------------
  |  Branch (4692:19): [True: 2.34k, False: 98.1k]
  ------------------
 4693|  2.34k|            startinpos = s-starts;
 4694|  2.34k|            s++; /* consume '+' */
 4695|  2.34k|            if (s < e && *s == '-') { /* '+-' encodes '+' */
  ------------------
  |  Branch (4695:17): [True: 2.34k, False: 2]
  |  Branch (4695:26): [True: 831, False: 1.51k]
  ------------------
 4696|    831|                s++;
 4697|    831|                if (_PyUnicodeWriter_WriteCharInline(&writer, '+') < 0)
  ------------------
  |  Branch (4697:21): [True: 0, False: 831]
  ------------------
 4698|      0|                    goto onError;
 4699|    831|            }
 4700|  1.51k|            else if (s < e && !IS_BASE64(*s)) {
  ------------------
  |  | 4504|  1.51k|    (((c) >= 'A' && (c) <= 'Z') ||     \
  |  |  ------------------
  |  |  |  Branch (4504:7): [True: 403, False: 1.11k]
  |  |  |  Branch (4504:21): [True: 13, False: 390]
  |  |  ------------------
  |  | 4505|  1.51k|     ((c) >= 'a' && (c) <= 'z') ||     \
  |  |  ------------------
  |  |  |  Branch (4505:7): [True: 389, False: 1.11k]
  |  |  |  Branch (4505:21): [True: 386, False: 3]
  |  |  ------------------
  |  | 4506|  1.51k|     ((c) >= '0' && (c) <= '9') ||     \
  |  |  ------------------
  |  |  |  Branch (4506:7): [True: 624, False: 492]
  |  |  |  Branch (4506:21): [True: 619, False: 5]
  |  |  ------------------
  |  | 4507|  1.51k|     (c) == '+' || (c) == '/')
  |  |  ------------------
  |  |  |  Branch (4507:6): [True: 127, False: 370]
  |  |  |  Branch (4507:20): [True: 361, False: 9]
  |  |  ------------------
  ------------------
  |  Branch (4700:22): [True: 1.51k, False: 2]
  ------------------
 4701|      9|                s++;
 4702|      9|                errmsg = "ill-formed sequence";
 4703|      9|                goto utf7Error;
 4704|      9|            }
 4705|  1.50k|            else { /* begin base64-encoded section */
 4706|  1.50k|                inShift = 1;
 4707|  1.50k|                surrogate = 0;
 4708|  1.50k|                shiftOutStart = writer.pos;
 4709|  1.50k|                base64bits = 0;
 4710|  1.50k|                base64buffer = 0;
 4711|  1.50k|            }
 4712|  2.34k|        }
 4713|  98.1k|        else if (DECODE_DIRECT(ch)) { /* character decodes as itself */
  ------------------
  |  | 4528|  98.1k|    ((c) <= 127 && (c) != '+')
  |  |  ------------------
  |  |  |  Branch (4528:6): [True: 98.1k, False: 20]
  |  |  |  Branch (4528:20): [True: 98.1k, False: 0]
  |  |  ------------------
  ------------------
 4714|  98.1k|            s++;
 4715|  98.1k|            if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0)
  ------------------
  |  Branch (4715:17): [True: 0, False: 98.1k]
  ------------------
 4716|      0|                goto onError;
 4717|  98.1k|        }
 4718|     20|        else {
 4719|     20|            startinpos = s-starts;
 4720|     20|            s++;
 4721|     20|            errmsg = "unexpected special character";
 4722|     20|            goto utf7Error;
 4723|     20|        }
 4724|   117k|        continue;
 4725|   117k|utf7Error:
 4726|     81|        endinpos = s-starts;
 4727|     81|        if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (4727:13): [True: 81, False: 0]
  ------------------
 4728|     81|                errors, &errorHandler,
 4729|     81|                "utf7", errmsg,
 4730|     81|                &starts, &e, &startinpos, &endinpos, &exc, &s,
 4731|     81|                &writer))
 4732|     81|            goto onError;
 4733|     81|    }
 4734|       |
 4735|       |    /* end of string */
 4736|       |
 4737|     89|    if (inShift && !consumed) { /* in shift sequence, no more to follow */
  ------------------
  |  Branch (4737:9): [True: 28, False: 61]
  |  Branch (4737:20): [True: 28, False: 0]
  ------------------
 4738|       |        /* if we're in an inconsistent state, that's an error */
 4739|     28|        inShift = 0;
 4740|     28|        if (surrogate ||
  ------------------
  |  Branch (4740:13): [True: 3, False: 25]
  ------------------
 4741|     25|                (base64bits >= 6) ||
  ------------------
  |  Branch (4741:17): [True: 15, False: 10]
  ------------------
 4742|     21|                (base64bits > 0 && base64buffer != 0)) {
  ------------------
  |  Branch (4742:18): [True: 4, False: 6]
  |  Branch (4742:36): [True: 3, False: 1]
  ------------------
 4743|     21|            endinpos = size;
 4744|     21|            if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (4744:17): [True: 21, False: 0]
  ------------------
 4745|     21|                    errors, &errorHandler,
 4746|     21|                    "utf7", "unterminated shift sequence",
 4747|     21|                    &starts, &e, &startinpos, &endinpos, &exc, &s,
 4748|     21|                    &writer))
 4749|     21|                goto onError;
 4750|      0|            if (s < e)
  ------------------
  |  Branch (4750:17): [True: 0, False: 0]
  ------------------
 4751|      0|                goto restart;
 4752|      0|        }
 4753|     28|    }
 4754|       |
 4755|       |    /* return state */
 4756|     68|    if (consumed) {
  ------------------
  |  Branch (4756:9): [True: 0, False: 68]
  ------------------
 4757|      0|        if (inShift) {
  ------------------
  |  Branch (4757:13): [True: 0, False: 0]
  ------------------
 4758|      0|            *consumed = startinpos;
 4759|      0|            if (writer.pos != shiftOutStart && writer.maxchar > 127) {
  ------------------
  |  Branch (4759:17): [True: 0, False: 0]
  |  Branch (4759:48): [True: 0, False: 0]
  ------------------
 4760|      0|                PyObject *result = PyUnicode_FromKindAndData(
 4761|      0|                        writer.kind, writer.data, shiftOutStart);
 4762|      0|                Py_XDECREF(errorHandler);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4763|      0|                Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4764|      0|                _PyUnicodeWriter_Dealloc(&writer);
 4765|      0|                return result;
 4766|      0|            }
 4767|      0|            writer.pos = shiftOutStart; /* back off output */
 4768|      0|        }
 4769|      0|        else {
 4770|      0|            *consumed = s-starts;
 4771|      0|        }
 4772|      0|    }
 4773|       |
 4774|     68|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     68|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4775|     68|    Py_XDECREF(exc);
  ------------------
  |  |  524|     68|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4776|     68|    return _PyUnicodeWriter_Finish(&writer);
 4777|       |
 4778|    102|  onError:
 4779|    102|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|    102|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4780|    102|    Py_XDECREF(exc);
  ------------------
  |  |  524|    102|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4781|    102|    _PyUnicodeWriter_Dealloc(&writer);
 4782|       |    return NULL;
 4783|     68|}
PyUnicode_DecodeUTF8:
 4888|   296k|{
 4889|       |    return PyUnicode_DecodeUTF8Stateful(s, size, errors, NULL);
 4890|   296k|}
_PyUnicode_DecodeUTF8Writer:
 5373|   331k|{
 5374|   331k|    if (size == 0) {
  ------------------
  |  Branch (5374:9): [True: 59.3k, False: 272k]
  ------------------
 5375|  59.3k|        if (consumed) {
  ------------------
  |  Branch (5375:13): [True: 0, False: 59.3k]
  ------------------
 5376|      0|            *consumed = 0;
 5377|      0|        }
 5378|  59.3k|        return 0;
 5379|  59.3k|    }
 5380|       |
 5381|       |    // fast path: try ASCII string.
 5382|   272k|    if (_PyUnicodeWriter_Prepare(writer, size, 127) < 0) {
  ------------------
  |  |  562|   272k|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 248k, False: 23.4k]
  |  |  ------------------
  |  |  563|   272k|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 243k, False: 4.96k]
  |  |  ------------------
  |  |  564|   272k|     ? 0                                                              \
  |  |  565|   272k|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 28.3k]
  |  |  ------------------
  |  |  566|  28.3k|        ? 0                                                           \
  |  |  567|  28.3k|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (5382:9): [True: 0, False: 272k]
  ------------------
 5383|      0|        return -1;
 5384|      0|    }
 5385|   272k|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (5385:5): [True: 272k, False: 0]
  ------------------
 5386|       |
 5387|   272k|    const char *starts = s;
 5388|   272k|    const char *end = s + size;
 5389|   272k|    Py_ssize_t decoded = 0;
 5390|   272k|    Py_UCS1 *dest = (Py_UCS1*)writer->data + writer->pos * writer->kind;
 5391|   272k|    if (writer->kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (5391:9): [True: 258k, False: 13.1k]
  ------------------
 5392|   258k|        decoded = ascii_decode(s, end, dest);
 5393|   258k|        writer->pos += decoded;
 5394|       |
 5395|   258k|        if (decoded == size) {
  ------------------
  |  Branch (5395:13): [True: 258k, False: 5]
  ------------------
 5396|   258k|            if (consumed) {
  ------------------
  |  Branch (5396:17): [True: 3.60k, False: 255k]
  ------------------
 5397|  3.60k|                *consumed = size;
 5398|  3.60k|            }
 5399|   258k|            return 0;
 5400|   258k|        }
 5401|      5|        s += decoded;
 5402|      5|    }
 5403|       |
 5404|  13.1k|    return unicode_decode_utf8_impl(writer, starts, s, end,
 5405|  13.1k|                                    error_handler, errors, consumed);
 5406|   272k|}
PyUnicode_DecodeUTF8Stateful:
 5414|  2.17M|{
 5415|  2.17M|    return unicode_decode_utf8(s, size,
 5416|  2.17M|                               errors ? _Py_ERROR_UNKNOWN : _Py_ERROR_STRICT,
  ------------------
  |  Branch (5416:32): [True: 30.3k, False: 2.14M]
  ------------------
 5417|  2.17M|                               errors, consumed);
 5418|  2.17M|}
_Py_DecodeUTF8Ex:
 5436|    660|{
 5437|    660|    const char *orig_s = s;
 5438|    660|    const char *e;
 5439|    660|    wchar_t *unicode;
 5440|    660|    Py_ssize_t outpos;
 5441|       |
 5442|    660|    int surrogateescape = 0;
 5443|    660|    int surrogatepass = 0;
 5444|    660|    switch (errors)
 5445|    660|    {
 5446|      0|    case _Py_ERROR_STRICT:
  ------------------
  |  Branch (5446:5): [True: 0, False: 660]
  ------------------
 5447|      0|        break;
 5448|    660|    case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (5448:5): [True: 660, False: 0]
  ------------------
 5449|    660|        surrogateescape = 1;
 5450|    660|        break;
 5451|      0|    case _Py_ERROR_SURROGATEPASS:
  ------------------
  |  Branch (5451:5): [True: 0, False: 660]
  ------------------
 5452|      0|        surrogatepass = 1;
 5453|      0|        break;
 5454|      0|    default:
  ------------------
  |  Branch (5454:5): [True: 0, False: 660]
  ------------------
 5455|      0|        return -3;
 5456|    660|    }
 5457|       |
 5458|       |    /* Note: size will always be longer than the resulting Unicode
 5459|       |       character count */
 5460|    660|    if (PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(wchar_t) - 1 < size) {
  ------------------
  |  |  137|    660|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (5460:9): [True: 0, False: 660]
  ------------------
 5461|      0|        return -1;
 5462|      0|    }
 5463|       |
 5464|    660|    unicode = PyMem_RawMalloc((size + 1) * sizeof(wchar_t));
 5465|    660|    if (!unicode) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 660]
  ------------------
 5466|      0|        return -1;
 5467|      0|    }
 5468|       |
 5469|       |    /* Unpack UTF-8 encoded data */
 5470|    660|    e = s + size;
 5471|    660|    outpos = 0;
 5472|    660|    while (s < e) {
  ------------------
  |  Branch (5472:12): [True: 660, False: 0]
  ------------------
 5473|    660|        Py_UCS4 ch;
 5474|    660|#if SIZEOF_WCHAR_T == 4
 5475|    660|        ch = ucs4lib_utf8_decode(&s, e, (Py_UCS4 *)unicode, &outpos);
 5476|       |#else
 5477|       |        ch = ucs2lib_utf8_decode(&s, e, (Py_UCS2 *)unicode, &outpos);
 5478|       |#endif
 5479|    660|        if (ch > 0xFF) {
  ------------------
  |  Branch (5479:13): [True: 0, False: 660]
  ------------------
 5480|      0|#if SIZEOF_WCHAR_T == 4
 5481|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 5482|       |#else
 5483|       |            assert(ch > 0xFFFF && ch <= MAX_UNICODE);
 5484|       |            /* write a surrogate pair */
 5485|       |            unicode[outpos++] = (wchar_t)Py_UNICODE_HIGH_SURROGATE(ch);
 5486|       |            unicode[outpos++] = (wchar_t)Py_UNICODE_LOW_SURROGATE(ch);
 5487|       |#endif
 5488|      0|        }
 5489|    660|        else {
 5490|    660|            if (!ch && s == e) {
  ------------------
  |  Branch (5490:17): [True: 660, False: 0]
  |  Branch (5490:24): [True: 660, False: 0]
  ------------------
 5491|    660|                break;
 5492|    660|            }
 5493|       |
 5494|      0|            if (surrogateescape) {
  ------------------
  |  Branch (5494:17): [True: 0, False: 0]
  ------------------
 5495|      0|                unicode[outpos++] = 0xDC00 + (unsigned char)*s++;
 5496|      0|            }
 5497|      0|            else {
 5498|       |                /* Is it a valid three-byte code? */
 5499|      0|                if (surrogatepass
  ------------------
  |  Branch (5499:21): [True: 0, False: 0]
  ------------------
 5500|      0|                    && (e - s) >= 3
  ------------------
  |  Branch (5500:24): [True: 0, False: 0]
  ------------------
 5501|      0|                    && (s[0] & 0xf0) == 0xe0
  ------------------
  |  Branch (5501:24): [True: 0, False: 0]
  ------------------
 5502|      0|                    && (s[1] & 0xc0) == 0x80
  ------------------
  |  Branch (5502:24): [True: 0, False: 0]
  ------------------
 5503|      0|                    && (s[2] & 0xc0) == 0x80)
  ------------------
  |  Branch (5503:24): [True: 0, False: 0]
  ------------------
 5504|      0|                {
 5505|      0|                    ch = ((s[0] & 0x0f) << 12) + ((s[1] & 0x3f) << 6) + (s[2] & 0x3f);
 5506|      0|                    s += 3;
 5507|      0|                    unicode[outpos++] = ch;
 5508|      0|                }
 5509|      0|                else {
 5510|      0|                    PyMem_RawFree(unicode );
 5511|      0|                    if (reason != NULL) {
  ------------------
  |  Branch (5511:25): [True: 0, False: 0]
  ------------------
 5512|      0|                        switch (ch) {
 5513|      0|                        case 0:
  ------------------
  |  Branch (5513:25): [True: 0, False: 0]
  ------------------
 5514|      0|                            *reason = "unexpected end of data";
 5515|      0|                            break;
 5516|      0|                        case 1:
  ------------------
  |  Branch (5516:25): [True: 0, False: 0]
  ------------------
 5517|      0|                            *reason = "invalid start byte";
 5518|      0|                            break;
 5519|       |                        /* 2, 3, 4 */
 5520|      0|                        default:
  ------------------
  |  Branch (5520:25): [True: 0, False: 0]
  ------------------
 5521|      0|                            *reason = "invalid continuation byte";
 5522|      0|                            break;
 5523|      0|                        }
 5524|      0|                    }
 5525|      0|                    if (wlen != NULL) {
  ------------------
  |  Branch (5525:25): [True: 0, False: 0]
  ------------------
 5526|      0|                        *wlen = s - orig_s;
 5527|      0|                    }
 5528|      0|                    return -2;
 5529|      0|                }
 5530|      0|            }
 5531|      0|        }
 5532|    660|    }
 5533|    660|    unicode[outpos] = L'\0';
 5534|    660|    if (wlen) {
  ------------------
  |  Branch (5534:9): [True: 660, False: 0]
  ------------------
 5535|    660|        *wlen = outpos;
 5536|    660|    }
 5537|    660|    *wstr = unicode;
 5538|    660|    return 0;
 5539|    660|}
_Py_EncodeUTF8Ex:
 5575|    100|{
 5576|    100|    const Py_ssize_t max_char_size = 4;
 5577|    100|    Py_ssize_t len = wcslen(text);
 5578|       |
 5579|    100|    assert(len >= 0);
  ------------------
  |  Branch (5579:5): [True: 100, False: 0]
  ------------------
 5580|       |
 5581|    100|    int surrogateescape = 0;
 5582|    100|    int surrogatepass = 0;
 5583|    100|    switch (errors)
 5584|    100|    {
 5585|      8|    case _Py_ERROR_STRICT:
  ------------------
  |  Branch (5585:5): [True: 8, False: 92]
  ------------------
 5586|      8|        break;
 5587|     92|    case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (5587:5): [True: 92, False: 8]
  ------------------
 5588|     92|        surrogateescape = 1;
 5589|     92|        break;
 5590|      0|    case _Py_ERROR_SURROGATEPASS:
  ------------------
  |  Branch (5590:5): [True: 0, False: 100]
  ------------------
 5591|      0|        surrogatepass = 1;
 5592|      0|        break;
 5593|      0|    default:
  ------------------
  |  Branch (5593:5): [True: 0, False: 100]
  ------------------
 5594|      0|        return -3;
 5595|    100|    }
 5596|       |
 5597|    100|    if (len > PY_SSIZE_T_MAX / max_char_size - 1) {
  ------------------
  |  |  137|    100|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (5597:9): [True: 0, False: 100]
  ------------------
 5598|      0|        return -1;
 5599|      0|    }
 5600|    100|    char *bytes;
 5601|    100|    if (raw_malloc) {
  ------------------
  |  Branch (5601:9): [True: 100, False: 0]
  ------------------
 5602|    100|        bytes = PyMem_RawMalloc((len + 1) * max_char_size);
 5603|    100|    }
 5604|      0|    else {
 5605|      0|        bytes = PyMem_Malloc((len + 1) * max_char_size);
 5606|      0|    }
 5607|    100|    if (bytes == NULL) {
  ------------------
  |  Branch (5607:9): [True: 0, False: 100]
  ------------------
 5608|      0|        return -1;
 5609|      0|    }
 5610|       |
 5611|    100|    char *p = bytes;
 5612|    100|    Py_ssize_t i;
 5613|  6.44k|    for (i = 0; i < len; ) {
  ------------------
  |  Branch (5613:17): [True: 6.34k, False: 100]
  ------------------
 5614|  6.34k|        Py_ssize_t ch_pos = i;
 5615|  6.34k|        Py_UCS4 ch = text[i];
 5616|  6.34k|        i++;
 5617|  6.34k|        if (sizeof(wchar_t) == 2
  ------------------
  |  Branch (5617:13): [Folded, False: 6.34k]
  ------------------
 5618|      0|            && Py_UNICODE_IS_HIGH_SURROGATE(ch)
  ------------------
  |  Branch (5618:16): [True: 0, False: 0]
  ------------------
 5619|      0|            && i < len
  ------------------
  |  Branch (5619:16): [True: 0, False: 0]
  ------------------
 5620|      0|            && Py_UNICODE_IS_LOW_SURROGATE(text[i]))
  ------------------
  |  Branch (5620:16): [True: 0, False: 0]
  ------------------
 5621|      0|        {
 5622|      0|            ch = Py_UNICODE_JOIN_SURROGATES(ch, text[i]);
 5623|      0|            i++;
 5624|      0|        }
 5625|       |
 5626|  6.34k|        if (ch < 0x80) {
  ------------------
  |  Branch (5626:13): [True: 6.34k, False: 0]
  ------------------
 5627|       |            /* Encode ASCII */
 5628|  6.34k|            *p++ = (char) ch;
 5629|       |
 5630|  6.34k|        }
 5631|      0|        else if (ch < 0x0800) {
  ------------------
  |  Branch (5631:18): [True: 0, False: 0]
  ------------------
 5632|       |            /* Encode Latin-1 */
 5633|      0|            *p++ = (char)(0xc0 | (ch >> 6));
 5634|      0|            *p++ = (char)(0x80 | (ch & 0x3f));
 5635|      0|        }
 5636|      0|        else if (Py_UNICODE_IS_SURROGATE(ch) && !surrogatepass) {
  ------------------
  |  Branch (5636:18): [True: 0, False: 0]
  |  Branch (5636:49): [True: 0, False: 0]
  ------------------
 5637|       |            /* surrogateescape error handler */
 5638|      0|            if (!surrogateescape || !(0xDC80 <= ch && ch <= 0xDCFF)) {
  ------------------
  |  Branch (5638:17): [True: 0, False: 0]
  |  Branch (5638:39): [True: 0, False: 0]
  |  Branch (5638:55): [True: 0, False: 0]
  ------------------
 5639|      0|                if (error_pos != NULL) {
  ------------------
  |  Branch (5639:21): [True: 0, False: 0]
  ------------------
 5640|      0|                    *error_pos = (size_t)ch_pos;
 5641|      0|                }
 5642|      0|                if (reason != NULL) {
  ------------------
  |  Branch (5642:21): [True: 0, False: 0]
  ------------------
 5643|      0|                    *reason = "encoding error";
 5644|      0|                }
 5645|      0|                if (raw_malloc) {
  ------------------
  |  Branch (5645:21): [True: 0, False: 0]
  ------------------
 5646|      0|                    PyMem_RawFree(bytes);
 5647|      0|                }
 5648|      0|                else {
 5649|      0|                    PyMem_Free(bytes);
 5650|      0|                }
 5651|      0|                return -2;
 5652|      0|            }
 5653|      0|            *p++ = (char)(ch & 0xff);
 5654|      0|        }
 5655|      0|        else if (ch < 0x10000) {
  ------------------
  |  Branch (5655:18): [True: 0, False: 0]
  ------------------
 5656|      0|            *p++ = (char)(0xe0 | (ch >> 12));
 5657|      0|            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
 5658|      0|            *p++ = (char)(0x80 | (ch & 0x3f));
 5659|      0|        }
 5660|      0|        else {  /* ch >= 0x10000 */
 5661|      0|            assert(ch <= MAX_UNICODE);
  ------------------
  |  Branch (5661:13): [True: 0, False: 0]
  ------------------
 5662|       |            /* Encode UCS4 Unicode ordinals */
 5663|      0|            *p++ = (char)(0xf0 | (ch >> 18));
 5664|      0|            *p++ = (char)(0x80 | ((ch >> 12) & 0x3f));
 5665|      0|            *p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
 5666|      0|            *p++ = (char)(0x80 | (ch & 0x3f));
 5667|      0|        }
 5668|  6.34k|    }
 5669|    100|    *p++ = '\0';
 5670|       |
 5671|    100|    size_t final_size = (p - bytes);
 5672|    100|    char *bytes2;
 5673|    100|    if (raw_malloc) {
  ------------------
  |  Branch (5673:9): [True: 100, False: 0]
  ------------------
 5674|    100|        bytes2 = PyMem_RawRealloc(bytes, final_size);
 5675|    100|    }
 5676|      0|    else {
 5677|      0|        bytes2 = PyMem_Realloc(bytes, final_size);
 5678|      0|    }
 5679|    100|    if (bytes2 == NULL) {
  ------------------
  |  Branch (5679:9): [True: 0, False: 100]
  ------------------
 5680|      0|        if (error_pos != NULL) {
  ------------------
  |  Branch (5680:13): [True: 0, False: 0]
  ------------------
 5681|      0|            *error_pos = (size_t)-1;
 5682|      0|        }
 5683|      0|        if (raw_malloc) {
  ------------------
  |  Branch (5683:13): [True: 0, False: 0]
  ------------------
 5684|      0|            PyMem_RawFree(bytes);
 5685|      0|        }
 5686|      0|        else {
 5687|      0|            PyMem_Free(bytes);
 5688|      0|        }
 5689|      0|        return -1;
 5690|      0|    }
 5691|    100|    *str = bytes2;
 5692|    100|    return 0;
 5693|    100|}
_PyUnicode_AsUTF8String:
 5802|    237|{
 5803|    237|    return unicode_encode_utf8(unicode, _Py_ERROR_UNKNOWN, errors);
 5804|    237|}
PyUnicode_AsUTF8String:
 5809|    231|{
 5810|       |    return _PyUnicode_AsUTF8String(unicode, NULL);
 5811|    231|}
PyUnicode_DecodeUTF32:
 5820|      7|{
 5821|       |    return PyUnicode_DecodeUTF32Stateful(s, size, errors, byteorder, NULL);
 5822|      7|}
PyUnicode_DecodeUTF32Stateful:
 5830|     15|{
 5831|     15|    const char *starts = s;
 5832|     15|    Py_ssize_t startinpos;
 5833|     15|    Py_ssize_t endinpos;
 5834|     15|    _PyUnicodeWriter writer;
 5835|     15|    const unsigned char *q, *e;
 5836|     15|    int le, bo = 0;       /* assume native ordering by default */
 5837|     15|    const char *encoding;
 5838|     15|    const char *errmsg = "";
 5839|     15|    PyObject *errorHandler = NULL;
 5840|     15|    PyObject *exc = NULL;
 5841|       |
 5842|     15|    q = (const unsigned char *)s;
 5843|     15|    e = q + size;
 5844|       |
 5845|     15|    if (byteorder)
  ------------------
  |  Branch (5845:9): [True: 8, False: 7]
  ------------------
 5846|      8|        bo = *byteorder;
 5847|       |
 5848|       |    /* Check for BOM marks (U+FEFF) in the input and adjust current
 5849|       |       byte order setting accordingly. In native mode, the leading BOM
 5850|       |       mark is skipped, in all other modes, it is copied to the output
 5851|       |       stream as-is (giving a ZWNBSP character). */
 5852|     15|    if (bo == 0 && size >= 4) {
  ------------------
  |  Branch (5852:9): [True: 12, False: 3]
  |  Branch (5852:20): [True: 12, False: 0]
  ------------------
 5853|     12|        Py_UCS4 bom = ((unsigned int)q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0];
 5854|     12|        if (bom == 0x0000FEFF) {
  ------------------
  |  Branch (5854:13): [True: 0, False: 12]
  ------------------
 5855|      0|            bo = -1;
 5856|      0|            q += 4;
 5857|      0|        }
 5858|     12|        else if (bom == 0xFFFE0000) {
  ------------------
  |  Branch (5858:18): [True: 0, False: 12]
  ------------------
 5859|      0|            bo = 1;
 5860|      0|            q += 4;
 5861|      0|        }
 5862|     12|        if (byteorder)
  ------------------
  |  Branch (5862:13): [True: 5, False: 7]
  ------------------
 5863|      5|            *byteorder = bo;
 5864|     12|    }
 5865|       |
 5866|     15|    if (q == e) {
  ------------------
  |  Branch (5866:9): [True: 0, False: 15]
  ------------------
 5867|      0|        if (consumed)
  ------------------
  |  Branch (5867:13): [True: 0, False: 0]
  ------------------
 5868|      0|            *consumed = size;
 5869|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5870|      0|    }
 5871|       |
 5872|       |#ifdef WORDS_BIGENDIAN
 5873|       |    le = bo < 0;
 5874|       |#else
 5875|     15|    le = bo <= 0;
 5876|     15|#endif
 5877|     15|    encoding = le ? "utf-32-le" : "utf-32-be";
  ------------------
  |  Branch (5877:16): [True: 14, False: 1]
  ------------------
 5878|       |
 5879|     15|    _PyUnicodeWriter_Init(&writer);
 5880|     15|    writer.min_length = (e - q + 3) / 4;
 5881|     15|    if (_PyUnicodeWriter_Prepare(&writer, writer.min_length, 127) == -1)
  ------------------
  |  |  562|     15|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 15]
  |  |  ------------------
  |  |  563|     15|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|     15|     ? 0                                                              \
  |  |  565|     15|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 15]
  |  |  ------------------
  |  |  566|     15|        ? 0                                                           \
  |  |  567|     15|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (5881:9): [True: 0, False: 15]
  ------------------
 5882|      0|        goto onError;
 5883|       |
 5884|     15|    while (1) {
  ------------------
  |  Branch (5884:12): [True: 15, Folded]
  ------------------
 5885|     15|        Py_UCS4 ch = 0;
 5886|     15|        Py_UCS4 maxch = PyUnicode_MAX_CHAR_VALUE(writer.buffer);
  ------------------
  |  |  405|     15|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5887|       |
 5888|     15|        if (e - q >= 4) {
  ------------------
  |  Branch (5888:13): [True: 15, False: 0]
  ------------------
 5889|     15|            int kind = writer.kind;
 5890|     15|            void *data = writer.data;
 5891|     15|            const unsigned char *last = e - 4;
 5892|     15|            Py_ssize_t pos = writer.pos;
 5893|     15|            if (le) {
  ------------------
  |  Branch (5893:17): [True: 14, False: 1]
  ------------------
 5894|     14|                do {
 5895|     14|                    ch = ((unsigned int)q[3] << 24) | (q[2] << 16) | (q[1] << 8) | q[0];
 5896|     14|                    if (ch > maxch)
  ------------------
  |  Branch (5896:25): [True: 14, False: 0]
  ------------------
 5897|     14|                        break;
 5898|      0|                    if (kind != PyUnicode_1BYTE_KIND &&
  ------------------
  |  Branch (5898:25): [True: 0, False: 0]
  ------------------
 5899|      0|                        Py_UNICODE_IS_SURROGATE(ch))
  ------------------
  |  Branch (5899:25): [True: 0, False: 0]
  ------------------
 5900|      0|                        break;
 5901|      0|                    PyUnicode_WRITE(kind, data, pos++, ch);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 5902|      0|                    q += 4;
 5903|      0|                } while (q <= last);
  ------------------
  |  Branch (5903:26): [True: 0, False: 0]
  ------------------
 5904|     14|            }
 5905|      1|            else {
 5906|      1|                do {
 5907|      1|                    ch = ((unsigned int)q[0] << 24) | (q[1] << 16) | (q[2] << 8) | q[3];
 5908|      1|                    if (ch > maxch)
  ------------------
  |  Branch (5908:25): [True: 1, False: 0]
  ------------------
 5909|      1|                        break;
 5910|      0|                    if (kind != PyUnicode_1BYTE_KIND &&
  ------------------
  |  Branch (5910:25): [True: 0, False: 0]
  ------------------
 5911|      0|                        Py_UNICODE_IS_SURROGATE(ch))
  ------------------
  |  Branch (5911:25): [True: 0, False: 0]
  ------------------
 5912|      0|                        break;
 5913|      0|                    PyUnicode_WRITE(kind, data, pos++, ch);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 5914|      0|                    q += 4;
 5915|      0|                } while (q <= last);
  ------------------
  |  Branch (5915:26): [True: 0, False: 0]
  ------------------
 5916|      1|            }
 5917|     15|            writer.pos = pos;
 5918|     15|        }
 5919|       |
 5920|     15|        if (Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (5920:13): [True: 0, False: 15]
  ------------------
 5921|      0|            errmsg = "code point in surrogate code point range(0xd800, 0xe000)";
 5922|      0|            startinpos = ((const char *)q) - starts;
 5923|      0|            endinpos = startinpos + 4;
 5924|      0|        }
 5925|     15|        else if (ch <= maxch) {
  ------------------
  |  Branch (5925:18): [True: 0, False: 15]
  ------------------
 5926|      0|            if (q == e || consumed)
  ------------------
  |  Branch (5926:17): [True: 0, False: 0]
  |  Branch (5926:27): [True: 0, False: 0]
  ------------------
 5927|      0|                break;
 5928|       |            /* remaining bytes at the end? (size should be divisible by 4) */
 5929|      0|            errmsg = "truncated data";
 5930|      0|            startinpos = ((const char *)q) - starts;
 5931|      0|            endinpos = ((const char *)e) - starts;
 5932|      0|        }
 5933|     15|        else {
 5934|     15|            if (ch < 0x110000) {
  ------------------
  |  Branch (5934:17): [True: 0, False: 15]
  ------------------
 5935|      0|                if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0)
  ------------------
  |  Branch (5935:21): [True: 0, False: 0]
  ------------------
 5936|      0|                    goto onError;
 5937|      0|                q += 4;
 5938|      0|                continue;
 5939|      0|            }
 5940|     15|            errmsg = "code point not in range(0x110000)";
 5941|     15|            startinpos = ((const char *)q) - starts;
 5942|     15|            endinpos = startinpos + 4;
 5943|     15|        }
 5944|       |
 5945|       |        /* The remaining input chars are ignored if the callback
 5946|       |           chooses to skip the input */
 5947|     15|        if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (5947:13): [True: 15, False: 0]
  ------------------
 5948|     15|                errors, &errorHandler,
 5949|     15|                encoding, errmsg,
 5950|     15|                &starts, (const char **)&e, &startinpos, &endinpos, &exc, (const char **)&q,
 5951|     15|                &writer))
 5952|     15|            goto onError;
 5953|     15|    }
 5954|       |
 5955|      0|    if (consumed)
  ------------------
  |  Branch (5955:9): [True: 0, False: 0]
  ------------------
 5956|      0|        *consumed = (const char *)q-starts;
 5957|       |
 5958|      0|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5959|      0|    Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5960|      0|    return _PyUnicodeWriter_Finish(&writer);
 5961|       |
 5962|     15|  onError:
 5963|     15|    _PyUnicodeWriter_Dealloc(&writer);
 5964|     15|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     15|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5965|     15|    Py_XDECREF(exc);
  ------------------
  |  |  524|     15|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5966|       |    return NULL;
 5967|     15|}
PyUnicode_DecodeUTF16:
 6136|     39|{
 6137|       |    return PyUnicode_DecodeUTF16Stateful(s, size, errors, byteorder, NULL);
 6138|     39|}
PyUnicode_DecodeUTF16Stateful:
 6146|    141|{
 6147|    141|    const char *starts = s;
 6148|    141|    Py_ssize_t startinpos;
 6149|    141|    Py_ssize_t endinpos;
 6150|    141|    _PyUnicodeWriter writer;
 6151|    141|    const unsigned char *q, *e;
 6152|    141|    int bo = 0;       /* assume native ordering by default */
 6153|    141|    int native_ordering;
 6154|    141|    const char *errmsg = "";
 6155|    141|    PyObject *errorHandler = NULL;
 6156|    141|    PyObject *exc = NULL;
 6157|    141|    const char *encoding;
 6158|       |
 6159|    141|    q = (const unsigned char *)s;
 6160|    141|    e = q + size;
 6161|       |
 6162|    141|    if (byteorder)
  ------------------
  |  Branch (6162:9): [True: 102, False: 39]
  ------------------
 6163|    102|        bo = *byteorder;
 6164|       |
 6165|       |    /* Check for BOM marks (U+FEFF) in the input and adjust current
 6166|       |       byte order setting accordingly. In native mode, the leading BOM
 6167|       |       mark is skipped, in all other modes, it is copied to the output
 6168|       |       stream as-is (giving a ZWNBSP character). */
 6169|    141|    if (bo == 0 && size >= 2) {
  ------------------
  |  Branch (6169:9): [True: 79, False: 62]
  |  Branch (6169:20): [True: 79, False: 0]
  ------------------
 6170|     79|        const Py_UCS4 bom = (q[1] << 8) | q[0];
 6171|     79|        if (bom == 0xFEFF) {
  ------------------
  |  Branch (6171:13): [True: 0, False: 79]
  ------------------
 6172|      0|            q += 2;
 6173|      0|            bo = -1;
 6174|      0|        }
 6175|     79|        else if (bom == 0xFFFE) {
  ------------------
  |  Branch (6175:18): [True: 0, False: 79]
  ------------------
 6176|      0|            q += 2;
 6177|      0|            bo = 1;
 6178|      0|        }
 6179|     79|        if (byteorder)
  ------------------
  |  Branch (6179:13): [True: 40, False: 39]
  ------------------
 6180|     40|            *byteorder = bo;
 6181|     79|    }
 6182|       |
 6183|    141|    if (q == e) {
  ------------------
  |  Branch (6183:9): [True: 0, False: 141]
  ------------------
 6184|      0|        if (consumed)
  ------------------
  |  Branch (6184:13): [True: 0, False: 0]
  ------------------
 6185|      0|            *consumed = size;
 6186|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6187|      0|    }
 6188|       |
 6189|    141|#if PY_LITTLE_ENDIAN
 6190|    141|    native_ordering = bo <= 0;
 6191|    141|    encoding = bo <= 0 ? "utf-16-le" : "utf-16-be";
  ------------------
  |  Branch (6191:16): [True: 85, False: 56]
  ------------------
 6192|       |#else
 6193|       |    native_ordering = bo >= 0;
 6194|       |    encoding = bo >= 0 ? "utf-16-be" : "utf-16-le";
 6195|       |#endif
 6196|       |
 6197|       |    /* Note: size will always be longer than the resulting Unicode
 6198|       |       character count normally.  Error handler will take care of
 6199|       |       resizing when needed. */
 6200|    141|    _PyUnicodeWriter_Init(&writer);
 6201|    141|    writer.min_length = (e - q + 1) / 2;
 6202|    141|    if (_PyUnicodeWriter_Prepare(&writer, writer.min_length, 127) == -1)
  ------------------
  |  |  562|    141|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 141]
  |  |  ------------------
  |  |  563|    141|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|    141|     ? 0                                                              \
  |  |  565|    141|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 141]
  |  |  ------------------
  |  |  566|    141|        ? 0                                                           \
  |  |  567|    141|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (6202:9): [True: 0, False: 141]
  ------------------
 6203|      0|        goto onError;
 6204|       |
 6205|    339|    while (1) {
  ------------------
  |  Branch (6205:12): [True: 339, Folded]
  ------------------
 6206|    339|        Py_UCS4 ch = 0;
 6207|    339|        if (e - q >= 2) {
  ------------------
  |  Branch (6207:13): [True: 338, False: 1]
  ------------------
 6208|    338|            int kind = writer.kind;
 6209|    338|            if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (6209:17): [True: 141, False: 197]
  ------------------
 6210|    141|                if (PyUnicode_IS_ASCII(writer.buffer))
  ------------------
  |  |  227|    141|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    141|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    141|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 141, False: 0]
  |  |  ------------------
  ------------------
 6211|    141|                    ch = asciilib_utf16_decode(&q, e,
 6212|    141|                            (Py_UCS1*)writer.data, &writer.pos,
 6213|    141|                            native_ordering);
 6214|      0|                else
 6215|      0|                    ch = ucs1lib_utf16_decode(&q, e,
 6216|      0|                            (Py_UCS1*)writer.data, &writer.pos,
 6217|      0|                            native_ordering);
 6218|    197|            } else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (6218:24): [True: 138, False: 59]
  ------------------
 6219|    138|                ch = ucs2lib_utf16_decode(&q, e,
 6220|    138|                        (Py_UCS2*)writer.data, &writer.pos,
 6221|    138|                        native_ordering);
 6222|    138|            } else {
 6223|     59|                assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (6223:17): [True: 59, False: 0]
  ------------------
 6224|     59|                ch = ucs4lib_utf16_decode(&q, e,
 6225|     59|                        (Py_UCS4*)writer.data, &writer.pos,
 6226|     59|                        native_ordering);
 6227|     59|            }
 6228|    338|        }
 6229|       |
 6230|    339|        switch (ch)
 6231|    339|        {
 6232|    126|        case 0:
  ------------------
  |  Branch (6232:9): [True: 126, False: 213]
  ------------------
 6233|       |            /* remaining byte at the end? (size should be even) */
 6234|    126|            if (q == e || consumed)
  ------------------
  |  Branch (6234:17): [True: 46, False: 80]
  |  Branch (6234:27): [True: 0, False: 80]
  ------------------
 6235|     46|                goto End;
 6236|     80|            errmsg = "truncated data";
 6237|     80|            startinpos = ((const char *)q) - starts;
 6238|     80|            endinpos = ((const char *)e) - starts;
 6239|     80|            break;
 6240|       |            /* The remaining input chars are ignored if the callback
 6241|       |               chooses to skip the input */
 6242|      1|        case 1:
  ------------------
  |  Branch (6242:9): [True: 1, False: 338]
  ------------------
 6243|      1|            q -= 2;
 6244|      1|            if (consumed)
  ------------------
  |  Branch (6244:17): [True: 0, False: 1]
  ------------------
 6245|      0|                goto End;
 6246|      1|            errmsg = "unexpected end of data";
 6247|      1|            startinpos = ((const char *)q) - starts;
 6248|      1|            endinpos = ((const char *)e) - starts;
 6249|      1|            break;
 6250|      7|        case 2:
  ------------------
  |  Branch (6250:9): [True: 7, False: 332]
  ------------------
 6251|      7|            errmsg = "illegal encoding";
 6252|      7|            startinpos = ((const char *)q) - 2 - starts;
 6253|      7|            endinpos = startinpos + 2;
 6254|      7|            break;
 6255|      7|        case 3:
  ------------------
  |  Branch (6255:9): [True: 7, False: 332]
  ------------------
 6256|      7|            errmsg = "illegal UTF-16 surrogate";
 6257|      7|            startinpos = ((const char *)q) - 4 - starts;
 6258|      7|            endinpos = startinpos + 2;
 6259|      7|            break;
 6260|    198|        default:
  ------------------
  |  Branch (6260:9): [True: 198, False: 141]
  ------------------
 6261|    198|            if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0)
  ------------------
  |  Branch (6261:17): [True: 0, False: 198]
  ------------------
 6262|      0|                goto onError;
 6263|    198|            continue;
 6264|    339|        }
 6265|       |
 6266|     95|        if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (6266:13): [True: 95, False: 0]
  ------------------
 6267|     95|                errors,
 6268|     95|                &errorHandler,
 6269|     95|                encoding, errmsg,
 6270|     95|                &starts,
 6271|     95|                (const char **)&e,
 6272|     95|                &startinpos,
 6273|     95|                &endinpos,
 6274|     95|                &exc,
 6275|     95|                (const char **)&q,
 6276|     95|                &writer))
 6277|     95|            goto onError;
 6278|     95|    }
 6279|       |
 6280|     46|End:
 6281|     46|    if (consumed)
  ------------------
  |  Branch (6281:9): [True: 0, False: 46]
  ------------------
 6282|      0|        *consumed = (const char *)q-starts;
 6283|       |
 6284|     46|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     46|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6285|     46|    Py_XDECREF(exc);
  ------------------
  |  |  524|     46|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6286|     46|    return _PyUnicodeWriter_Finish(&writer);
 6287|       |
 6288|     95|  onError:
 6289|     95|    _PyUnicodeWriter_Dealloc(&writer);
 6290|     95|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     95|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6291|     95|    Py_XDECREF(exc);
  ------------------
  |  |  524|     95|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6292|       |    return NULL;
 6293|    141|}
_PyUnicode_GetNameCAPI:
 6469|  5.91k|{
 6470|  5.91k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 6471|  5.91k|    _PyUnicode_Name_CAPI *ucnhash_capi;
 6472|       |
 6473|  5.91k|    ucnhash_capi = _Py_atomic_load_ptr(&interp->unicode.ucnhash_capi);
 6474|  5.91k|    if (ucnhash_capi == NULL) {
  ------------------
  |  Branch (6474:9): [True: 1, False: 5.90k]
  ------------------
 6475|      1|        ucnhash_capi = (_PyUnicode_Name_CAPI *)PyCapsule_Import(
 6476|      1|                PyUnicodeData_CAPSULE_NAME, 1);
  ------------------
  |  |   14|      1|#define PyUnicodeData_CAPSULE_NAME "unicodedata._ucnhash_CAPI"
  ------------------
 6477|       |
 6478|       |        // It's fine if we overwrite the value here. It's always the same value.
 6479|      1|        _Py_atomic_store_ptr(&interp->unicode.ucnhash_capi, ucnhash_capi);
 6480|      1|    }
 6481|  5.91k|    return ucnhash_capi;
 6482|  5.91k|}
_PyUnicode_DecodeUnicodeEscapeInternal2:
 6493|  32.8k|{
 6494|  32.8k|    const char *starts = s;
 6495|  32.8k|    const char *initial_starts = starts;
 6496|  32.8k|    _PyUnicodeWriter writer;
 6497|  32.8k|    const char *end;
 6498|  32.8k|    PyObject *errorHandler = NULL;
 6499|  32.8k|    PyObject *exc = NULL;
 6500|  32.8k|    _PyUnicode_Name_CAPI *ucnhash_capi;
 6501|       |
 6502|       |    // so we can remember if we've seen an invalid escape char or not
 6503|  32.8k|    *first_invalid_escape_char = -1;
 6504|  32.8k|    *first_invalid_escape_ptr = NULL;
 6505|       |
 6506|  32.8k|    if (size == 0) {
  ------------------
  |  Branch (6506:9): [True: 4.43k, False: 28.3k]
  ------------------
 6507|  4.43k|        if (consumed) {
  ------------------
  |  Branch (6507:13): [True: 0, False: 4.43k]
  ------------------
 6508|      0|            *consumed = 0;
 6509|      0|        }
 6510|  4.43k|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|  4.43k|    do {                             \
  |  |  380|  4.43k|        return _PyUnicode_GetEmpty();\
  |  |  381|  4.43k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6511|  4.43k|    }
 6512|       |    /* Escaped strings will always be longer than the resulting
 6513|       |       Unicode string, so we start with size here and then reduce the
 6514|       |       length after conversion to the true value.
 6515|       |       (but if the error callback returns a long replacement string
 6516|       |       we'll have to allocate more space) */
 6517|  28.3k|    _PyUnicodeWriter_Init(&writer);
 6518|  28.3k|    writer.min_length = size;
 6519|  28.3k|    if (_PyUnicodeWriter_Prepare(&writer, size, 127) < 0) {
  ------------------
  |  |  562|  28.3k|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 28.3k]
  |  |  ------------------
  |  |  563|  28.3k|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|  28.3k|     ? 0                                                              \
  |  |  565|  28.3k|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 28.3k]
  |  |  ------------------
  |  |  566|  28.3k|        ? 0                                                           \
  |  |  567|  28.3k|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (6519:9): [True: 0, False: 28.3k]
  ------------------
 6520|      0|        goto onError;
 6521|      0|    }
 6522|       |
 6523|  28.3k|    end = s + size;
 6524|  1.98M|    while (s < end) {
  ------------------
  |  Branch (6524:12): [True: 1.95M, False: 28.3k]
  ------------------
 6525|  1.95M|        unsigned char c = (unsigned char) *s++;
 6526|  1.95M|        Py_UCS4 ch;
 6527|  1.95M|        int count;
 6528|  1.95M|        const char *message;
 6529|       |
 6530|  1.95M|#define WRITE_ASCII_CHAR(ch)                                                  \
 6531|  1.95M|            do {                                                              \
 6532|  1.95M|                assert(ch <= 127);                                            \
 6533|  1.95M|                assert(writer.pos < writer.size);                             \
 6534|  1.95M|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
 6535|  1.95M|            } while(0)
 6536|       |
 6537|  1.95M|#define WRITE_CHAR(ch)                                                        \
 6538|  1.95M|            do {                                                              \
 6539|  1.95M|                if (ch <= writer.maxchar) {                                   \
 6540|  1.95M|                    assert(writer.pos < writer.size);                         \
 6541|  1.95M|                    PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch); \
 6542|  1.95M|                }                                                             \
 6543|  1.95M|                else if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0) { \
 6544|  1.95M|                    goto onError;                                             \
 6545|  1.95M|                }                                                             \
 6546|  1.95M|            } while(0)
 6547|       |
 6548|       |        /* Non-escape characters are interpreted as Unicode ordinals */
 6549|  1.95M|        if (c != '\\') {
  ------------------
  |  Branch (6549:13): [True: 1.60M, False: 352k]
  ------------------
 6550|  1.60M|            WRITE_CHAR(c);
  ------------------
  |  | 6538|  1.60M|            do {                                                              \
  |  | 6539|  1.60M|                if (ch <= writer.maxchar) {                                   \
  |  |  ------------------
  |  |  |  Branch (6539:21): [True: 1.60M, False: 0]
  |  |  ------------------
  |  | 6540|  1.60M|                    assert(writer.pos < writer.size);                         \
  |  | 6541|  1.60M|                    PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch); \
  |  |  ------------------
  |  |  |  |  335|  1.60M|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.60M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.60M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  1.60M|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.60M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6542|  1.60M|                }                                                             \
  |  | 6543|  1.60M|                else if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0) { \
  |  |  ------------------
  |  |  |  Branch (6543:26): [True: 0, False: 0]
  |  |  ------------------
  |  | 6544|      0|                    goto onError;                                             \
  |  | 6545|      0|                }                                                             \
  |  | 6546|  1.60M|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6546:21): [Folded, False: 1.60M]
  |  |  ------------------
  ------------------
  |  Branch (6550:13): [True: 1.60M, False: 0]
  ------------------
 6551|  1.60M|            continue;
 6552|  1.60M|        }
 6553|       |
 6554|   352k|        Py_ssize_t startinpos = s - starts - 1;
 6555|       |        /* \ - Escapes */
 6556|   352k|        if (s >= end) {
  ------------------
  |  Branch (6556:13): [True: 0, False: 352k]
  ------------------
 6557|      0|            message = "\\ at end of string";
 6558|      0|            goto incomplete;
 6559|      0|        }
 6560|   352k|        c = (unsigned char) *s++;
 6561|       |
 6562|   352k|        assert(writer.pos < writer.size);
  ------------------
  |  Branch (6562:9): [True: 352k, False: 0]
  ------------------
 6563|   352k|        switch (c) {
 6564|       |
 6565|       |            /* \x escapes */
 6566|  2.06k|        case '\n': continue;
  ------------------
  |  Branch (6566:9): [True: 2.06k, False: 350k]
  ------------------
 6567|  21.5k|        case '\\': WRITE_ASCII_CHAR('\\'); continue;
  ------------------
  |  | 6531|  21.5k|            do {                                                              \
  |  | 6532|  21.5k|                assert(ch <= 127);                                            \
  |  | 6533|  21.5k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  21.5k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  21.5k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  21.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  21.5k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  21.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  21.5k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 21.5k]
  |  |  ------------------
  ------------------
  |  Branch (6567:9): [True: 21.5k, False: 331k]
  |  Branch (6567:20): [True: 21.5k, Folded]
  |  Branch (6567:20): [True: 21.5k, False: 0]
  ------------------
 6568|  21.5k|        case '\'': WRITE_ASCII_CHAR('\''); continue;
  ------------------
  |  | 6531|  7.35k|            do {                                                              \
  |  | 6532|  7.35k|                assert(ch <= 127);                                            \
  |  | 6533|  7.35k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  7.35k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  7.35k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  7.35k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  7.35k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  7.35k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  7.35k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 7.35k]
  |  |  ------------------
  ------------------
  |  Branch (6568:9): [True: 7.35k, False: 345k]
  |  Branch (6568:20): [True: 7.35k, Folded]
  |  Branch (6568:20): [True: 7.35k, False: 0]
  ------------------
 6569|  7.35k|        case '\"': WRITE_ASCII_CHAR('\"'); continue;
  ------------------
  |  | 6531|  1.46k|            do {                                                              \
  |  | 6532|  1.46k|                assert(ch <= 127);                                            \
  |  | 6533|  1.46k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  1.46k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  1.46k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.46k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  1.46k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.46k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  1.46k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 1.46k]
  |  |  ------------------
  ------------------
  |  Branch (6569:9): [True: 1.46k, False: 351k]
  |  Branch (6569:20): [True: 1.46k, Folded]
  |  Branch (6569:20): [True: 1.46k, False: 0]
  ------------------
 6570|  1.46k|        case 'b': WRITE_ASCII_CHAR('\b'); continue;
  ------------------
  |  | 6531|  1.20k|            do {                                                              \
  |  | 6532|  1.20k|                assert(ch <= 127);                                            \
  |  | 6533|  1.20k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  1.20k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  1.20k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.20k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  1.20k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.20k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  1.20k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 1.20k]
  |  |  ------------------
  ------------------
  |  Branch (6570:9): [True: 1.20k, False: 351k]
  |  Branch (6570:19): [True: 1.20k, Folded]
  |  Branch (6570:19): [True: 1.20k, False: 0]
  ------------------
 6571|       |        /* FF */
 6572|  1.20k|        case 'f': WRITE_ASCII_CHAR('\014'); continue;
  ------------------
  |  | 6531|  1.15k|            do {                                                              \
  |  | 6532|  1.15k|                assert(ch <= 127);                                            \
  |  | 6533|  1.15k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  1.15k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  1.15k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.15k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  1.15k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  1.15k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  1.15k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 1.15k]
  |  |  ------------------
  ------------------
  |  Branch (6572:9): [True: 1.15k, False: 351k]
  |  Branch (6572:19): [True: 1.15k, Folded]
  |  Branch (6572:19): [True: 1.15k, False: 0]
  ------------------
 6573|  3.97k|        case 't': WRITE_ASCII_CHAR('\t'); continue;
  ------------------
  |  | 6531|  3.97k|            do {                                                              \
  |  | 6532|  3.97k|                assert(ch <= 127);                                            \
  |  | 6533|  3.97k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  3.97k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  3.97k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  3.97k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  3.97k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  3.97k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  3.97k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 3.97k]
  |  |  ------------------
  ------------------
  |  Branch (6573:9): [True: 3.97k, False: 348k]
  |  Branch (6573:19): [True: 3.97k, Folded]
  |  Branch (6573:19): [True: 3.97k, False: 0]
  ------------------
 6574|  8.41k|        case 'n': WRITE_ASCII_CHAR('\n'); continue;
  ------------------
  |  | 6531|  8.41k|            do {                                                              \
  |  | 6532|  8.41k|                assert(ch <= 127);                                            \
  |  | 6533|  8.41k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  8.41k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  8.41k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  8.41k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  8.41k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  8.41k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  8.41k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 8.41k]
  |  |  ------------------
  ------------------
  |  Branch (6574:9): [True: 8.41k, False: 344k]
  |  Branch (6574:19): [True: 8.41k, Folded]
  |  Branch (6574:19): [True: 8.41k, False: 0]
  ------------------
 6575|  8.41k|        case 'r': WRITE_ASCII_CHAR('\r'); continue;
  ------------------
  |  | 6531|  2.22k|            do {                                                              \
  |  | 6532|  2.22k|                assert(ch <= 127);                                            \
  |  | 6533|  2.22k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  2.22k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  2.22k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  2.22k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  2.22k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  2.22k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  2.22k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 2.22k]
  |  |  ------------------
  ------------------
  |  Branch (6575:9): [True: 2.22k, False: 350k]
  |  Branch (6575:19): [True: 2.22k, Folded]
  |  Branch (6575:19): [True: 2.22k, False: 0]
  ------------------
 6576|       |        /* VT */
 6577|  3.47k|        case 'v': WRITE_ASCII_CHAR('\013'); continue;
  ------------------
  |  | 6531|  3.47k|            do {                                                              \
  |  | 6532|  3.47k|                assert(ch <= 127);                                            \
  |  | 6533|  3.47k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  3.47k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  3.47k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  3.47k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  3.47k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  3.47k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  3.47k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 3.47k]
  |  |  ------------------
  ------------------
  |  Branch (6577:9): [True: 3.47k, False: 349k]
  |  Branch (6577:19): [True: 3.47k, Folded]
  |  Branch (6577:19): [True: 3.47k, False: 0]
  ------------------
 6578|       |        /* BEL, not classic C */
 6579|  3.51k|        case 'a': WRITE_ASCII_CHAR('\007'); continue;
  ------------------
  |  | 6531|  3.51k|            do {                                                              \
  |  | 6532|  3.51k|                assert(ch <= 127);                                            \
  |  | 6533|  3.51k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  3.51k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  3.51k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  3.51k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.51k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  3.51k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  3.51k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  3.51k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 3.51k]
  |  |  ------------------
  ------------------
  |  Branch (6579:9): [True: 3.51k, False: 349k]
  |  Branch (6579:19): [True: 3.51k, Folded]
  |  Branch (6579:19): [True: 3.51k, False: 0]
  ------------------
 6580|       |
 6581|       |            /* \OOO (octal) escapes */
 6582|  21.6k|        case '0': case '1': case '2': case '3':
  ------------------
  |  Branch (6582:9): [True: 1.23k, False: 351k]
  |  Branch (6582:19): [True: 2.14k, False: 350k]
  |  Branch (6582:29): [True: 14.1k, False: 338k]
  |  Branch (6582:39): [True: 4.05k, False: 348k]
  ------------------
 6583|  36.5k|        case '4': case '5': case '6': case '7':
  ------------------
  |  Branch (6583:9): [True: 527, False: 352k]
  |  Branch (6583:19): [True: 2.55k, False: 350k]
  |  Branch (6583:29): [True: 3.99k, False: 348k]
  |  Branch (6583:39): [True: 7.82k, False: 344k]
  ------------------
 6584|  36.5k|            ch = c - '0';
 6585|  36.5k|            if (s < end && '0' <= *s && *s <= '7') {
  ------------------
  |  Branch (6585:17): [True: 36.3k, False: 179]
  |  Branch (6585:28): [True: 17.1k, False: 19.1k]
  |  Branch (6585:41): [True: 5.70k, False: 11.4k]
  ------------------
 6586|  5.70k|                ch = (ch<<3) + *s++ - '0';
 6587|  5.70k|                if (s < end && '0' <= *s && *s <= '7') {
  ------------------
  |  Branch (6587:21): [True: 5.61k, False: 93]
  |  Branch (6587:32): [True: 3.49k, False: 2.11k]
  |  Branch (6587:45): [True: 2.13k, False: 1.36k]
  ------------------
 6588|  2.13k|                    ch = (ch<<3) + *s++ - '0';
 6589|  2.13k|                }
 6590|  5.70k|            }
 6591|  36.5k|            if (ch > 0377) {
  ------------------
  |  Branch (6591:17): [True: 1.50k, False: 35.0k]
  ------------------
 6592|  1.50k|                if (*first_invalid_escape_char == -1) {
  ------------------
  |  Branch (6592:21): [True: 696, False: 808]
  ------------------
 6593|    696|                    *first_invalid_escape_char = ch;
 6594|    696|                    if (starts == initial_starts) {
  ------------------
  |  Branch (6594:25): [True: 696, False: 0]
  ------------------
 6595|       |                        /* Back up 3 chars, since we've already incremented s. */
 6596|    696|                        *first_invalid_escape_ptr = s - 3;
 6597|    696|                    }
 6598|    696|                }
 6599|  1.50k|            }
 6600|  36.5k|            WRITE_CHAR(ch);
  ------------------
  |  | 6538|  36.5k|            do {                                                              \
  |  | 6539|  36.5k|                if (ch <= writer.maxchar) {                                   \
  |  |  ------------------
  |  |  |  Branch (6539:21): [True: 35.6k, False: 814]
  |  |  ------------------
  |  | 6540|  35.6k|                    assert(writer.pos < writer.size);                         \
  |  | 6541|  35.6k|                    PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch); \
  |  |  ------------------
  |  |  |  |  335|  35.6k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  35.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  35.6k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  35.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6542|  35.6k|                }                                                             \
  |  | 6543|  36.5k|                else if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0) { \
  |  |  ------------------
  |  |  |  Branch (6543:26): [True: 0, False: 814]
  |  |  ------------------
  |  | 6544|      0|                    goto onError;                                             \
  |  | 6545|      0|                }                                                             \
  |  | 6546|  36.5k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6546:21): [Folded, False: 36.5k]
  |  |  ------------------
  ------------------
  |  Branch (6600:13): [True: 35.6k, False: 0]
  ------------------
 6601|  36.5k|            continue;
 6602|       |
 6603|       |            /* hex escapes */
 6604|       |            /* \xXX */
 6605|  36.5k|        case 'x':
  ------------------
  |  Branch (6605:9): [True: 46, False: 352k]
  ------------------
 6606|     46|            count = 2;
 6607|     46|            message = "truncated \\xXX escape";
 6608|     46|            goto hexescape;
 6609|       |
 6610|       |            /* \uXXXX */
 6611|  6.33k|        case 'u':
  ------------------
  |  Branch (6611:9): [True: 6.33k, False: 346k]
  ------------------
 6612|  6.33k|            count = 4;
 6613|  6.33k|            message = "truncated \\uXXXX escape";
 6614|  6.33k|            goto hexescape;
 6615|       |
 6616|       |            /* \UXXXXXXXX */
 6617|   209k|        case 'U':
  ------------------
  |  Branch (6617:9): [True: 209k, False: 142k]
  ------------------
 6618|   209k|            count = 8;
 6619|   209k|            message = "truncated \\UXXXXXXXX escape";
 6620|   216k|        hexescape:
 6621|  1.92M|            for (ch = 0; count; ++s, --count) {
  ------------------
  |  Branch (6621:26): [True: 1.70M, False: 216k]
  ------------------
 6622|  1.70M|                if (s >= end) {
  ------------------
  |  Branch (6622:21): [True: 3, False: 1.70M]
  ------------------
 6623|      3|                    goto incomplete;
 6624|      3|                }
 6625|  1.70M|                c = (unsigned char)*s;
 6626|  1.70M|                ch <<= 4;
 6627|  1.70M|                if (c >= '0' && c <= '9') {
  ------------------
  |  Branch (6627:21): [True: 1.70M, False: 5]
  |  Branch (6627:33): [True: 1.40M, False: 301k]
  ------------------
 6628|  1.40M|                    ch += c - '0';
 6629|  1.40M|                }
 6630|   301k|                else if (c >= 'a' && c <= 'f') {
  ------------------
  |  Branch (6630:26): [True: 300k, False: 1.50k]
  |  Branch (6630:38): [True: 300k, False: 2]
  ------------------
 6631|   300k|                    ch += c - ('a' - 10);
 6632|   300k|                }
 6633|  1.50k|                else if (c >= 'A' && c <= 'F') {
  ------------------
  |  Branch (6633:26): [True: 1.49k, False: 7]
  |  Branch (6633:38): [True: 1.49k, False: 3]
  ------------------
 6634|  1.49k|                    ch += c - ('A' - 10);
 6635|  1.49k|                }
 6636|     10|                else {
 6637|     10|                    goto error;
 6638|     10|                }
 6639|  1.70M|            }
 6640|       |
 6641|       |            /* when we get here, ch is a 32-bit unicode character */
 6642|   216k|            if (ch > MAX_UNICODE) {
  ------------------
  |  |  108|   216k|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|   216k|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
  |  Branch (6642:17): [True: 1, False: 216k]
  ------------------
 6643|      1|                message = "illegal Unicode character";
 6644|      1|                goto error;
 6645|      1|            }
 6646|       |
 6647|   216k|            WRITE_CHAR(ch);
  ------------------
  |  | 6538|   216k|            do {                                                              \
  |  | 6539|   216k|                if (ch <= writer.maxchar) {                                   \
  |  |  ------------------
  |  |  |  Branch (6539:21): [True: 208k, False: 8.09k]
  |  |  ------------------
  |  | 6540|   208k|                    assert(writer.pos < writer.size);                         \
  |  | 6541|   208k|                    PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch); \
  |  |  ------------------
  |  |  |  |  335|   208k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|   208k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   208k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|   208k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|   208k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6542|   208k|                }                                                             \
  |  | 6543|   216k|                else if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0) { \
  |  |  ------------------
  |  |  |  Branch (6543:26): [True: 0, False: 8.09k]
  |  |  ------------------
  |  | 6544|      0|                    goto onError;                                             \
  |  | 6545|      0|                }                                                             \
  |  | 6546|   216k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6546:21): [Folded, False: 216k]
  |  |  ------------------
  ------------------
  |  Branch (6647:13): [True: 208k, False: 0]
  ------------------
 6648|   216k|            continue;
 6649|       |
 6650|       |            /* \N{name} */
 6651|   216k|        case 'N':
  ------------------
  |  Branch (6651:9): [True: 5.91k, False: 346k]
  ------------------
 6652|  5.91k|            ucnhash_capi = _PyUnicode_GetNameCAPI();
 6653|  5.91k|            if (ucnhash_capi == NULL) {
  ------------------
  |  Branch (6653:17): [True: 0, False: 5.91k]
  ------------------
 6654|      0|                PyErr_SetString(
 6655|      0|                        PyExc_UnicodeError,
 6656|      0|                        "\\N escapes not supported (can't load unicodedata module)"
 6657|      0|                );
 6658|      0|                goto onError;
 6659|      0|            }
 6660|       |
 6661|  5.91k|            message = "malformed \\N character escape";
 6662|  5.91k|            if (s >= end) {
  ------------------
  |  Branch (6662:17): [True: 11, False: 5.89k]
  ------------------
 6663|     11|                goto incomplete;
 6664|     11|            }
 6665|  5.89k|            if (*s == '{') {
  ------------------
  |  Branch (6665:17): [True: 5.89k, False: 4]
  ------------------
 6666|  5.89k|                const char *start = ++s;
 6667|  5.89k|                size_t namelen;
 6668|       |                /* look for the closing brace */
 6669|  33.4k|                while (s < end && *s != '}')
  ------------------
  |  Branch (6669:24): [True: 33.4k, False: 5]
  |  Branch (6669:35): [True: 27.5k, False: 5.89k]
  ------------------
 6670|  27.5k|                    s++;
 6671|  5.89k|                if (s >= end) {
  ------------------
  |  Branch (6671:21): [True: 5, False: 5.89k]
  ------------------
 6672|      5|                    goto incomplete;
 6673|      5|                }
 6674|  5.89k|                namelen = s - start;
 6675|  5.89k|                if (namelen) {
  ------------------
  |  Branch (6675:21): [True: 5.88k, False: 1]
  ------------------
 6676|       |                    /* found a name.  look it up in the unicode database */
 6677|  5.88k|                    s++;
 6678|  5.88k|                    ch = 0xffffffff; /* in case 'getcode' messes up */
 6679|  5.88k|                    if (namelen <= INT_MAX &&
  ------------------
  |  Branch (6679:25): [True: 5.88k, False: 0]
  ------------------
 6680|  5.88k|                        ucnhash_capi->getcode(start, (int)namelen,
  ------------------
  |  Branch (6680:25): [True: 5.83k, False: 51]
  ------------------
 6681|  5.88k|                                              &ch, 0)) {
 6682|  5.83k|                        assert(ch <= MAX_UNICODE);
  ------------------
  |  Branch (6682:25): [True: 5.83k, False: 0]
  ------------------
 6683|  5.83k|                        WRITE_CHAR(ch);
  ------------------
  |  | 6538|  5.83k|            do {                                                              \
  |  | 6539|  5.83k|                if (ch <= writer.maxchar) {                                   \
  |  |  ------------------
  |  |  |  Branch (6539:21): [True: 4.00k, False: 1.83k]
  |  |  ------------------
  |  | 6540|  4.00k|                    assert(writer.pos < writer.size);                         \
  |  | 6541|  4.00k|                    PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch); \
  |  |  ------------------
  |  |  |  |  335|  4.00k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  4.00k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  4.00k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  4.00k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6542|  4.00k|                }                                                             \
  |  | 6543|  5.83k|                else if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0) { \
  |  |  ------------------
  |  |  |  Branch (6543:26): [True: 0, False: 1.83k]
  |  |  ------------------
  |  | 6544|      0|                    goto onError;                                             \
  |  | 6545|      0|                }                                                             \
  |  | 6546|  5.83k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6546:21): [Folded, False: 5.83k]
  |  |  ------------------
  ------------------
  |  Branch (6683:25): [True: 4.00k, False: 0]
  ------------------
 6684|  5.83k|                        continue;
 6685|  5.83k|                    }
 6686|     51|                    message = "unknown Unicode character name";
 6687|     51|                }
 6688|  5.89k|            }
 6689|     56|            goto error;
 6690|       |
 6691|  37.6k|        default:
  ------------------
  |  Branch (6691:9): [True: 37.6k, False: 315k]
  ------------------
 6692|  37.6k|            if (*first_invalid_escape_char == -1) {
  ------------------
  |  Branch (6692:17): [True: 9.58k, False: 28.0k]
  ------------------
 6693|  9.58k|                *first_invalid_escape_char = c;
 6694|  9.58k|                if (starts == initial_starts) {
  ------------------
  |  Branch (6694:21): [True: 9.58k, False: 0]
  ------------------
 6695|       |                    /* Back up one char, since we've already incremented s. */
 6696|  9.58k|                    *first_invalid_escape_ptr = s - 1;
 6697|  9.58k|                }
 6698|  9.58k|            }
 6699|  37.6k|            WRITE_ASCII_CHAR('\\');
  ------------------
  |  | 6531|  37.6k|            do {                                                              \
  |  | 6532|  37.6k|                assert(ch <= 127);                                            \
  |  | 6533|  37.6k|                assert(writer.pos < writer.size);                             \
  |  | 6534|  37.6k|                PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch);  \
  |  |  ------------------
  |  |  |  |  335|  37.6k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  37.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  37.6k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  37.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6535|  37.6k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6535:21): [Folded, False: 37.6k]
  |  |  ------------------
  ------------------
  |  Branch (6699:13): [True: 37.6k, Folded]
  |  Branch (6699:13): [True: 37.6k, False: 0]
  ------------------
 6700|  37.6k|            WRITE_CHAR(c);
  ------------------
  |  | 6538|  37.6k|            do {                                                              \
  |  | 6539|  37.6k|                if (ch <= writer.maxchar) {                                   \
  |  |  ------------------
  |  |  |  Branch (6539:21): [True: 37.6k, False: 0]
  |  |  ------------------
  |  | 6540|  37.6k|                    assert(writer.pos < writer.size);                         \
  |  | 6541|  37.6k|                    PyUnicode_WRITE(writer.kind, writer.data, writer.pos++, ch); \
  |  |  ------------------
  |  |  |  |  335|  37.6k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  37.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  |  |  336|  37.6k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  37.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6542|  37.6k|                }                                                             \
  |  | 6543|  37.6k|                else if (_PyUnicodeWriter_WriteCharInline(&writer, ch) < 0) { \
  |  |  ------------------
  |  |  |  Branch (6543:26): [True: 0, False: 0]
  |  |  ------------------
  |  | 6544|      0|                    goto onError;                                             \
  |  | 6545|      0|                }                                                             \
  |  | 6546|  37.6k|            } while(0)
  |  |  ------------------
  |  |  |  Branch (6546:21): [Folded, False: 37.6k]
  |  |  ------------------
  ------------------
  |  Branch (6700:13): [True: 37.6k, False: 0]
  ------------------
 6701|  37.6k|            continue;
 6702|   352k|        }
 6703|       |
 6704|     19|      incomplete:
 6705|     19|        if (consumed) {
  ------------------
  |  Branch (6705:13): [True: 0, False: 19]
  ------------------
 6706|      0|            *consumed = startinpos;
 6707|      0|            break;
 6708|      0|        }
 6709|     86|      error:;
 6710|     86|        Py_ssize_t endinpos = s-starts;
 6711|     86|        writer.min_length = end - s + writer.pos;
 6712|     86|        if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (6712:13): [True: 86, False: 0]
  ------------------
 6713|     86|                errors, &errorHandler,
 6714|     86|                "unicodeescape", message,
 6715|     86|                &starts, &end, &startinpos, &endinpos, &exc, &s,
 6716|     86|                &writer)) {
 6717|     86|            goto onError;
 6718|     86|        }
 6719|     86|        assert(end - s <= writer.size - writer.pos);
  ------------------
  |  Branch (6719:9): [True: 0, False: 0]
  ------------------
 6720|       |
 6721|      0|#undef WRITE_ASCII_CHAR
 6722|      0|#undef WRITE_CHAR
 6723|      0|    }
 6724|       |
 6725|  28.3k|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|  28.3k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  28.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6726|  28.3k|    Py_XDECREF(exc);
  ------------------
  |  |  524|  28.3k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  28.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  28.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6727|  28.3k|    return _PyUnicodeWriter_Finish(&writer);
 6728|       |
 6729|     86|  onError:
 6730|     86|    _PyUnicodeWriter_Dealloc(&writer);
 6731|     86|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     86|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     86|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     86|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6732|     86|    Py_XDECREF(exc);
  ------------------
  |  |  524|     86|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     86|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     86|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6733|       |    return NULL;
 6734|  28.3k|}
PyUnicode_DecodeLatin1:
 7104|    958|{
 7105|       |    /* Latin-1 is equivalent to the first 256 ordinals in Unicode. */
 7106|    958|    return _PyUnicode_FromUCS1((const unsigned char*)s, size);
 7107|    958|}
PyUnicode_DecodeASCII:
 7420|  66.6k|{
 7421|  66.6k|    const char *starts = s;
 7422|  66.6k|    const char *e = s + size;
 7423|  66.6k|    PyObject *error_handler_obj = NULL;
 7424|  66.6k|    PyObject *exc = NULL;
 7425|  66.6k|    _Py_error_handler error_handler = _Py_ERROR_UNKNOWN;
 7426|       |
 7427|  66.6k|    if (size == 0)
  ------------------
  |  Branch (7427:9): [True: 0, False: 66.6k]
  ------------------
 7428|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 7429|       |
 7430|       |    /* ASCII is equivalent to the first 128 ordinals in Unicode. */
 7431|  66.6k|    if (size == 1 && (unsigned char)s[0] < 128) {
  ------------------
  |  Branch (7431:9): [True: 3.04k, False: 63.6k]
  |  Branch (7431:22): [True: 3.03k, False: 7]
  ------------------
 7432|  3.03k|        return get_latin1_char((unsigned char)s[0]);
 7433|  3.03k|    }
 7434|       |
 7435|       |    // Shortcut for simple case
 7436|  63.6k|    PyObject *u = PyUnicode_New(size, 127);
 7437|  63.6k|    if (u == NULL) {
  ------------------
  |  Branch (7437:9): [True: 0, False: 63.6k]
  ------------------
 7438|      0|        return NULL;
 7439|      0|    }
 7440|  63.6k|    Py_ssize_t outpos = ascii_decode(s, e, PyUnicode_1BYTE_DATA(u));
  ------------------
  |  |  291|  63.6k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  63.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 7441|  63.6k|    if (outpos == size) {
  ------------------
  |  Branch (7441:9): [True: 63.3k, False: 277]
  ------------------
 7442|  63.3k|        return u;
 7443|  63.3k|    }
 7444|       |
 7445|    277|    _PyUnicodeWriter writer;
 7446|    277|    _PyUnicodeWriter_InitWithBuffer(&writer, u);
 7447|    277|    writer.pos = outpos;
 7448|       |
 7449|    277|    s += outpos;
 7450|    277|    int kind = writer.kind;
 7451|    277|    void *data = writer.data;
 7452|    277|    Py_ssize_t startinpos, endinpos;
 7453|       |
 7454|    277|    while (s < e) {
  ------------------
  |  Branch (7454:12): [True: 277, False: 0]
  ------------------
 7455|    277|        unsigned char c = (unsigned char)*s;
 7456|    277|        if (c < 128) {
  ------------------
  |  Branch (7456:13): [True: 0, False: 277]
  ------------------
 7457|      0|            PyUnicode_WRITE(kind, data, writer.pos, c);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 7458|      0|            writer.pos++;
 7459|      0|            ++s;
 7460|      0|            continue;
 7461|      0|        }
 7462|       |
 7463|       |        /* byte outsize range 0x00..0x7f: call the error handler */
 7464|       |
 7465|    277|        if (error_handler == _Py_ERROR_UNKNOWN)
  ------------------
  |  Branch (7465:13): [True: 277, False: 0]
  ------------------
 7466|    277|            error_handler = _Py_GetErrorHandler(errors);
 7467|       |
 7468|    277|        switch (error_handler)
 7469|    277|        {
 7470|      0|        case _Py_ERROR_REPLACE:
  ------------------
  |  Branch (7470:9): [True: 0, False: 277]
  ------------------
 7471|      0|        case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (7471:9): [True: 0, False: 277]
  ------------------
 7472|       |            /* Fast-path: the error handler only writes one character,
 7473|       |               but we may switch to UCS2 at the first write */
 7474|      0|            if (_PyUnicodeWriter_PrepareKind(&writer, PyUnicode_2BYTE_KIND) < 0)
  ------------------
  |  |  582|      0|    ((KIND) <= (WRITER)->kind                                         \
  |  |  ------------------
  |  |  |  Branch (582:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  583|      0|     ? 0                                                              \
  |  |  584|      0|     : _PyUnicodeWriter_PrepareKindInternal((WRITER), (KIND)))
  ------------------
  |  Branch (7474:17): [True: 0, False: 0]
  ------------------
 7475|      0|                goto onError;
 7476|      0|            assert(_PyUnicodeWriter_CanWrite(&writer));
  ------------------
  |  Branch (7476:13): [True: 0, False: 0]
  ------------------
 7477|      0|            kind = writer.kind;
 7478|      0|            data = writer.data;
 7479|       |
 7480|      0|            if (error_handler == _Py_ERROR_REPLACE)
  ------------------
  |  Branch (7480:17): [True: 0, False: 0]
  ------------------
 7481|      0|                PyUnicode_WRITE(kind, data, writer.pos, 0xfffd);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 7482|      0|            else
 7483|      0|                PyUnicode_WRITE(kind, data, writer.pos, c + 0xdc00);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 7484|      0|            writer.pos++;
 7485|      0|            ++s;
 7486|      0|            break;
 7487|       |
 7488|      0|        case _Py_ERROR_IGNORE:
  ------------------
  |  Branch (7488:9): [True: 0, False: 277]
  ------------------
 7489|      0|            ++s;
 7490|      0|            break;
 7491|       |
 7492|    277|        default:
  ------------------
  |  Branch (7492:9): [True: 277, False: 0]
  ------------------
 7493|    277|            startinpos = s-starts;
 7494|    277|            endinpos = startinpos + 1;
 7495|    277|            if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (7495:17): [True: 277, False: 0]
  ------------------
 7496|    277|                    errors, &error_handler_obj,
 7497|    277|                    "ascii", "ordinal not in range(128)",
 7498|    277|                    &starts, &e, &startinpos, &endinpos, &exc, &s,
 7499|    277|                    &writer))
 7500|    277|                goto onError;
 7501|      0|            kind = writer.kind;
 7502|      0|            data = writer.data;
 7503|    277|        }
 7504|    277|    }
 7505|      0|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7506|      0|    Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7507|      0|    return _PyUnicodeWriter_Finish(&writer);
 7508|       |
 7509|    277|  onError:
 7510|    277|    _PyUnicodeWriter_Dealloc(&writer);
 7511|    277|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|    277|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    277|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    277|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7512|    277|    Py_XDECREF(exc);
  ------------------
  |  |  524|    277|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    277|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    277|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7513|       |    return NULL;
 7514|    277|}
_PyUnicode_AsASCIIString:
 7518|  35.6k|{
 7519|  35.6k|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|  35.6k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  35.6k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (7519:9): [True: 0, False: 35.6k]
  ------------------
 7520|      0|        PyErr_BadArgument();
 7521|      0|        return NULL;
 7522|      0|    }
 7523|       |    /* Fast path: if it is an ASCII-only string, construct bytes object
 7524|       |       directly. Else defer to above function to raise the exception. */
 7525|  35.6k|    if (PyUnicode_IS_ASCII(unicode))
  ------------------
  |  |  227|  35.6k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 82, False: 35.5k]
  |  |  ------------------
  ------------------
 7526|     82|        return PyBytes_FromStringAndSize(PyUnicode_DATA(unicode),
  ------------------
  |  |  284|     82|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7527|     82|                                         PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  |  299|     82|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     82|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     82|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7528|  35.5k|    return unicode_encode_ucs1(unicode, errors, 128);
 7529|  35.6k|}
PyUnicode_AsASCIIString:
 7533|      2|{
 7534|       |    return _PyUnicode_AsASCIIString(unicode, NULL);
 7535|      2|}
_PyUnicode_DecodeIconv:
 8275|    122|{
 8276|    122|    if (size < 0) {
  ------------------
  |  Branch (8276:9): [True: 0, False: 122]
  ------------------
 8277|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 8278|      0|        return NULL;
 8279|      0|    }
 8280|       |
 8281|    122|    iconv_t cd = iconv_open_or_set_error(ICONV_PIVOT, encoding, encoding);
  ------------------
  |  | 8232|    122|#  define ICONV_PIVOT "UTF-32LE"
  ------------------
 8282|    122|    if (cd == (iconv_t)-1) {
  ------------------
  |  Branch (8282:9): [True: 0, False: 122]
  ------------------
 8283|      0|        return NULL;
 8284|      0|    }
 8285|       |
 8286|       |    /* Scratch buffer for one iconv() output chunk, as UTF-32 code points. */
 8287|    122|    Py_UCS4 chunk[1024];
 8288|    122|    const char *starts = s;
 8289|    122|    const char *in = s;
 8290|    122|    const char *inend = s + size;
 8291|    122|    _PyUnicodeWriter writer;
 8292|    122|    PyObject *errorHandler = NULL;
 8293|    122|    PyObject *exc = NULL;
 8294|       |
 8295|    122|    _PyUnicodeWriter_Init(&writer);
 8296|    122|    writer.min_length = size;
 8297|       |
 8298|    399|    while (in < inend) {
  ------------------
  |  Branch (8298:12): [True: 399, False: 0]
  ------------------
 8299|    399|        char *inptr = (char *)in;
 8300|    399|        size_t inleft = (size_t)(inend - in);
 8301|    399|        char *outptr = (char *)chunk;
 8302|    399|        size_t outleft = sizeof(chunk);
 8303|       |
 8304|       |        /* Cast the input buffer through void*: iconv() declares its second
 8305|       |           argument as "char **" on most systems but "const char **" on some
 8306|       |           (e.g. illumos), and void* converts to either without a warning. */
 8307|    399|        size_t ret = iconv(cd, (void *)&inptr, &inleft, &outptr, &outleft);
 8308|    399|        int err = errno;
 8309|    399|        in = inptr;
 8310|       |
 8311|       |        /* Append whatever code points this call produced. */
 8312|    399|        Py_ssize_t nch = (Py_UCS4 *)outptr - chunk;
 8313|    399|        if (nch > 0 && PyUnicodeWriter_WriteUCS4((PyUnicodeWriter *)&writer,
  ------------------
  |  Branch (8313:13): [True: 394, False: 5]
  |  Branch (8313:24): [True: 0, False: 394]
  ------------------
 8314|    394|                                                 chunk, nch) < 0) {
 8315|      0|            goto error;
 8316|      0|        }
 8317|       |
 8318|    399|        if (ret != (size_t)-1) {
  ------------------
  |  Branch (8318:13): [True: 91, False: 308]
  ------------------
 8319|     91|            assert(in == inend);
  ------------------
  |  Branch (8319:13): [True: 91, False: 0]
  ------------------
 8320|     91|            break;
 8321|     91|        }
 8322|       |
 8323|    308|        if (err == E2BIG) {
  ------------------
  |  Branch (8323:13): [True: 277, False: 31]
  ------------------
 8324|       |            /* The scratch buffer filled up; drain it and continue. */
 8325|    277|            continue;
 8326|    277|        }
 8327|       |
 8328|     31|        const char *reason;
 8329|     31|        if (err == EINVAL) {
  ------------------
  |  Branch (8329:13): [True: 0, False: 31]
  ------------------
 8330|       |            /* Incomplete multibyte sequence at the end of the input. */
 8331|      0|            if (consumed != NULL) {
  ------------------
  |  Branch (8331:17): [True: 0, False: 0]
  ------------------
 8332|       |                /* Stateful decoding: stop and report the consumed bytes. */
 8333|      0|                break;
 8334|      0|            }
 8335|      0|            reason = "incomplete multibyte sequence";
 8336|      0|        }
 8337|     31|        else if (err == EILSEQ) {
  ------------------
  |  Branch (8337:18): [True: 31, False: 0]
  ------------------
 8338|     31|            reason = "invalid multibyte sequence";
 8339|     31|        }
 8340|      0|        else {
 8341|      0|            errno = err;
 8342|      0|            PyErr_SetFromErrno(PyExc_OSError);
 8343|      0|            goto error;
 8344|      0|        }
 8345|       |
 8346|     31|        Py_ssize_t startinpos = in - starts;
 8347|     31|        Py_ssize_t endinpos = startinpos + 1;
 8348|     31|        if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (8348:13): [True: 31, False: 0]
  ------------------
 8349|     31|                errors, &errorHandler, encoding, reason,
 8350|     31|                &starts, &inend, &startinpos, &endinpos, &exc, &in,
 8351|     31|                &writer)) {
 8352|     31|            goto error;
 8353|     31|        }
 8354|       |        /* The error handler may have skipped bytes; reset the conversion
 8355|       |           descriptor to the initial shift state before continuing. */
 8356|      0|        iconv(cd, NULL, NULL, NULL, NULL);
 8357|      0|    }
 8358|       |
 8359|     91|    if (consumed != NULL) {
  ------------------
  |  Branch (8359:9): [True: 0, False: 91]
  ------------------
 8360|      0|        *consumed = in - starts;
 8361|      0|    }
 8362|     91|    iconv_close(cd);
 8363|     91|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     91|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     91|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     91|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8364|     91|    Py_XDECREF(exc);
  ------------------
  |  |  524|     91|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     91|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     91|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8365|     91|    return _PyUnicodeWriter_Finish(&writer);
 8366|       |
 8367|     31|error:
 8368|     31|    iconv_close(cd);
 8369|     31|    _PyUnicodeWriter_Dealloc(&writer);
 8370|     31|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     31|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     31|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     31|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8371|     31|    Py_XDECREF(exc);
  ------------------
  |  |  524|     31|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     31|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     31|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8372|       |    return NULL;
 8373|    122|}
_PyUnicode_EncodeIconv:
 8405|    243|{
 8406|    243|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|    243|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    243|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (8406:9): [True: 0, False: 243]
  ------------------
 8407|      0|        PyErr_BadArgument();
 8408|      0|        return NULL;
 8409|      0|    }
 8410|       |
 8411|    243|    Py_ssize_t ulen = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|    243|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    243|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    243|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8412|    243|    const char *source;         /* iconv source encoding for this kind */
 8413|    243|    const char *data;           /* the units to encode */
 8414|    243|    Py_ssize_t unit;            /* bytes per code point in *data */
 8415|    243|    Py_UCS4 *widened = NULL;    /* owned UTF-32 copy of a 2-byte string */
 8416|    243|    int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|    243|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    486|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 243, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8417|    243|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (8417:9): [True: 243, False: 0]
  ------------------
 8418|    243|        source = "ISO-8859-1";
 8419|    243|        data = (const char *)PyUnicode_1BYTE_DATA(unicode);
  ------------------
  |  |  291|    243|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    243|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 8420|    243|        unit = 1;
 8421|    243|    }
 8422|      0|    else if (kind == PyUnicode_4BYTE_KIND) {
  ------------------
  |  Branch (8422:14): [True: 0, False: 0]
  ------------------
 8423|      0|        source = ICONV_PIVOT;
  ------------------
  |  | 8232|      0|#  define ICONV_PIVOT "UTF-32LE"
  ------------------
 8424|      0|        data = (const char *)PyUnicode_4BYTE_DATA(unicode);
  ------------------
  |  |  293|      0|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 8425|      0|        unit = 4;
 8426|      0|    }
 8427|      0|    else {
 8428|      0|#ifdef ICONV_UCS2_PIVOT
 8429|       |        /* Known-strict UCS-2: feed the 2-byte buffer directly. */
 8430|      0|        source = ICONV_UCS2_PIVOT;
  ------------------
  |  | 8244|      0|#    define ICONV_UCS2_PIVOT "UCS-2LE"
  ------------------
 8431|      0|        data = (const char *)PyUnicode_2BYTE_DATA(unicode);
  ------------------
  |  |  292|      0|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 8432|      0|        unit = 2;
 8433|       |#else
 8434|       |        /* UCS-2 may be aliased to UTF-16 here; widen to UTF-32 to be safe. */
 8435|       |        widened = PyUnicode_AsUCS4Copy(unicode);
 8436|       |        if (widened == NULL) {
 8437|       |            return NULL;
 8438|       |        }
 8439|       |        source = ICONV_PIVOT;
 8440|       |        data = (const char *)widened;
 8441|       |        unit = 4;
 8442|       |#endif
 8443|      0|    }
 8444|       |
 8445|    243|    iconv_t cd = iconv_open_or_set_error(encoding, source, encoding);
 8446|    243|    if (cd == (iconv_t)-1) {
  ------------------
  |  Branch (8446:9): [True: 223, False: 20]
  ------------------
 8447|    223|        PyMem_Free(widened);
 8448|    223|        return NULL;
 8449|    223|    }
 8450|       |
 8451|     20|    PyBytesWriter *writer = NULL;
 8452|     20|    PyObject *errorHandler = NULL;
 8453|     20|    PyObject *exc = NULL;
 8454|     20|    PyObject *result = NULL;
 8455|     20|    const char *ustart = data;
 8456|     20|    const char *up = data;
 8457|     20|    const char *uend = data + (size_t)ulen * unit;
 8458|     20|    int flushing = 0;
 8459|     20|    int careful = 0;            /* feed one code point per iconv() call */
 8460|       |
 8461|       |    /* A generous initial estimate for the output size. */
 8462|     20|    writer = PyBytesWriter_Create(ulen + (ulen >> 1) + 16);
 8463|     20|    if (writer == NULL) {
  ------------------
  |  Branch (8463:9): [True: 0, False: 20]
  ------------------
 8464|      0|        goto done;
 8465|      0|    }
 8466|     20|    char *out = PyBytesWriter_GetData(writer);
 8467|     20|    char *outend = out + PyBytesWriter_GetSize(writer);
 8468|       |
 8469|     40|    for (;;) {
 8470|     40|        char *inptr = (char *)up;
 8471|     40|        size_t inleft = (size_t)(uend - up);
 8472|       |        /* One code point at a time, to pin a substitution to its position. */
 8473|     40|        if (careful && inleft > (size_t)unit) {
  ------------------
  |  Branch (8473:13): [True: 0, False: 40]
  |  Branch (8473:24): [True: 0, False: 0]
  ------------------
 8474|      0|            inleft = (size_t)unit;
 8475|      0|        }
 8476|     40|        char *out_before = out;
 8477|     40|        size_t outleft = (size_t)(outend - out);
 8478|       |        /* When the whole string is converted, a final iconv() call with a
 8479|       |           NULL input flushes any pending shift sequence (e.g. ISO-2022). */
 8480|       |        /* See the note above on the void* cast of the iconv() input buffer. */
 8481|     40|        size_t ret = iconv(cd, flushing ? NULL : (void *)&inptr, &inleft, &out, &outleft);
  ------------------
  |  Branch (8481:32): [True: 20, False: 20]
  ------------------
 8482|     40|        if (!flushing) {
  ------------------
  |  Branch (8482:13): [True: 20, False: 20]
  ------------------
 8483|     20|            up = inptr;
 8484|     20|        }
 8485|       |
 8486|     40|        if (ret != (size_t)-1) {
  ------------------
  |  Branch (8486:13): [True: 40, False: 0]
  ------------------
 8487|     40|            if (flushing) {
  ------------------
  |  Branch (8487:17): [True: 20, False: 20]
  ------------------
 8488|     20|                break;
 8489|     20|            }
 8490|       |            /* A positive result counts nonreversible conversions: iconv()
 8491|       |               substituted an unencodable character instead of failing with
 8492|       |               EILSEQ (musl and *BSD citrus do this).  Treat it as unencodable
 8493|       |               and re-run one code point at a time to locate it. */
 8494|     20|            if (ret > 0) {
  ------------------
  |  Branch (8494:17): [True: 0, False: 20]
  ------------------
 8495|      0|                if (!careful) {
  ------------------
  |  Branch (8495:21): [True: 0, False: 0]
  ------------------
 8496|      0|                    careful = 1;
 8497|      0|                    iconv(cd, NULL, NULL, NULL, NULL);
 8498|      0|                    out = PyBytesWriter_GetData(writer);
 8499|      0|                    outend = out + PyBytesWriter_GetSize(writer);
 8500|      0|                    up = ustart;
 8501|      0|                    continue;
 8502|      0|                }
 8503|       |                /* This code point was substituted; drop it and report it. */
 8504|      0|                out = out_before;
 8505|      0|                up -= unit;
 8506|      0|            }
 8507|     20|            else if (careful && up < uend) {
  ------------------
  |  Branch (8507:22): [True: 0, False: 20]
  |  Branch (8507:33): [True: 0, False: 0]
  ------------------
 8508|      0|                continue;
 8509|      0|            }
 8510|     20|            else {
 8511|       |                /* All input consumed; switch to flushing the shift state. */
 8512|     20|                flushing = 1;
 8513|     20|                continue;
 8514|     20|            }
 8515|     20|        }
 8516|      0|        else if (errno == E2BIG) {
  ------------------
  |  Branch (8516:18): [True: 0, False: 0]
  ------------------
 8517|      0|            if (iconv_grow_writer(writer, &out, &outend) < 0) {
  ------------------
  |  Branch (8517:17): [True: 0, False: 0]
  ------------------
 8518|      0|                goto done;
 8519|      0|            }
 8520|      0|            continue;
 8521|      0|        }
 8522|      0|        else if (errno != EILSEQ && errno != EINVAL) {
  ------------------
  |  Branch (8522:18): [True: 0, False: 0]
  |  Branch (8522:37): [True: 0, False: 0]
  ------------------
 8523|      0|            PyErr_SetFromErrno(PyExc_OSError);
 8524|      0|            goto done;
 8525|      0|        }
 8526|       |
 8527|       |        /* An unencodable code point at *up; one input unit is one code point. */
 8528|      0|        Py_ssize_t pos = (up - ustart) / unit;
 8529|      0|        Py_ssize_t newpos;
 8530|      0|        PyObject *rep = unicode_encode_call_errorhandler(
 8531|      0|                errors, &errorHandler, encoding, "invalid character",
 8532|      0|                unicode, &exc, pos, pos + 1, &newpos);
 8533|      0|        if (rep == NULL) {
  ------------------
  |  Branch (8533:13): [True: 0, False: 0]
  ------------------
 8534|      0|            goto done;
 8535|      0|        }
 8536|       |
 8537|      0|        const char *repdata;
 8538|      0|        Py_ssize_t replen;
 8539|      0|        PyObject *repbytes = NULL;
 8540|      0|        if (PyBytes_Check(rep)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8541|      0|            repdata = PyBytes_AS_STRING(rep);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8542|      0|            replen = PyBytes_GET_SIZE(rep);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8543|      0|        }
 8544|      0|        else {
 8545|       |            /* A str replacement is encoded through the same codec, but
 8546|       |               strictly: handling its errors in turn could never terminate. */
 8547|      0|            assert(PyUnicode_Check(rep));
  ------------------
  |  Branch (8547:13): [True: 0, False: 0]
  ------------------
 8548|      0|            repbytes = _PyUnicode_EncodeIconv(encoding, rep, NULL);
 8549|      0|            Py_DECREF(rep);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8550|      0|            if (repbytes == NULL) {
  ------------------
  |  Branch (8550:17): [True: 0, False: 0]
  ------------------
 8551|      0|                if (PyErr_ExceptionMatches(PyExc_UnicodeEncodeError)) {
  ------------------
  |  Branch (8551:21): [True: 0, False: 0]
  ------------------
 8552|       |                    /* Report the input the caller knows about, not the
 8553|       |                       replacement. */
 8554|      0|                    PyErr_Clear();
 8555|      0|                    raise_encode_exception(&exc, encoding, unicode, pos, pos + 1,
 8556|      0|                            "unable to encode error handler result");
 8557|      0|                }
 8558|      0|                goto done;
 8559|      0|            }
 8560|      0|            repdata = PyBytes_AS_STRING(repbytes);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8561|      0|            replen = PyBytes_GET_SIZE(repbytes);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8562|      0|        }
 8563|       |
 8564|      0|        while (outend - out < replen) {
  ------------------
  |  Branch (8564:16): [True: 0, False: 0]
  ------------------
 8565|      0|            if (iconv_grow_writer(writer, &out, &outend) < 0) {
  ------------------
  |  Branch (8565:17): [True: 0, False: 0]
  ------------------
 8566|      0|                if (repbytes != NULL) {
  ------------------
  |  Branch (8566:21): [True: 0, False: 0]
  ------------------
 8567|      0|                    Py_DECREF(repbytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8568|      0|                }
 8569|      0|                else {
 8570|      0|                    Py_DECREF(rep);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8571|      0|                }
 8572|      0|                goto done;
 8573|      0|            }
 8574|      0|        }
 8575|      0|        memcpy(out, repdata, replen);
 8576|      0|        out += replen;
 8577|      0|        if (repbytes != NULL) {
  ------------------
  |  Branch (8577:13): [True: 0, False: 0]
  ------------------
 8578|      0|            Py_DECREF(repbytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8579|      0|        }
 8580|      0|        else {
 8581|      0|            Py_DECREF(rep);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8582|      0|        }
 8583|      0|        up = ustart + (size_t)newpos * unit;
 8584|       |        /* Reset the shift state after the injected replacement bytes. */
 8585|      0|        iconv(cd, NULL, NULL, NULL, NULL);
 8586|      0|    }
 8587|       |
 8588|     20|    if (PyBytesWriter_Resize(writer, out - (char *)PyBytesWriter_GetData(writer)) < 0) {
  ------------------
  |  Branch (8588:9): [True: 0, False: 20]
  ------------------
 8589|      0|        goto done;
 8590|      0|    }
 8591|     20|    result = PyBytesWriter_Finish(writer);
 8592|     20|    writer = NULL;
 8593|       |
 8594|     20|done:
 8595|     20|    if (writer != NULL) {
  ------------------
  |  Branch (8595:9): [True: 0, False: 20]
  ------------------
 8596|      0|        PyBytesWriter_Discard(writer);
 8597|      0|    }
 8598|     20|    iconv_close(cd);
 8599|     20|    PyMem_Free(widened);
 8600|     20|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     20|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8601|     20|    Py_XDECREF(exc);
  ------------------
  |  |  524|     20|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8602|     20|    return result;
 8603|     20|}
PyUnicode_DecodeCharmap:
 8834|  1.68k|{
 8835|  1.68k|    _PyUnicodeWriter writer;
 8836|       |
 8837|       |    /* Default to Latin-1 */
 8838|  1.68k|    if (mapping == NULL)
  ------------------
  |  Branch (8838:9): [True: 0, False: 1.68k]
  ------------------
 8839|      0|        return PyUnicode_DecodeLatin1(s, size, errors);
 8840|       |
 8841|  1.68k|    if (size == 0)
  ------------------
  |  Branch (8841:9): [True: 0, False: 1.68k]
  ------------------
 8842|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 8843|  1.68k|    _PyUnicodeWriter_Init(&writer);
 8844|  1.68k|    writer.min_length = size;
 8845|  1.68k|    if (_PyUnicodeWriter_Prepare(&writer, writer.min_length, 127) == -1)
  ------------------
  |  |  562|  1.68k|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 1.68k]
  |  |  ------------------
  |  |  563|  1.68k|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|  1.68k|     ? 0                                                              \
  |  |  565|  1.68k|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 1.68k]
  |  |  ------------------
  |  |  566|  1.68k|        ? 0                                                           \
  |  |  567|  1.68k|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (8845:9): [True: 0, False: 1.68k]
  ------------------
 8846|      0|        goto onError;
 8847|       |
 8848|  1.68k|    if (PyUnicode_CheckExact(mapping)) {
  ------------------
  |  |  104|  1.68k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  1.68k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.68k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8849|  1.68k|        if (charmap_decode_string(s, size, mapping, errors, &writer) < 0)
  ------------------
  |  Branch (8849:13): [True: 24, False: 1.65k]
  ------------------
 8850|     24|            goto onError;
 8851|  1.68k|    }
 8852|      0|    else {
 8853|      0|        if (charmap_decode_mapping(s, size, mapping, errors, &writer) < 0)
  ------------------
  |  Branch (8853:13): [True: 0, False: 0]
  ------------------
 8854|      0|            goto onError;
 8855|      0|    }
 8856|  1.65k|    return _PyUnicodeWriter_Finish(&writer);
 8857|       |
 8858|     24|  onError:
 8859|     24|    _PyUnicodeWriter_Dealloc(&writer);
 8860|       |    return NULL;
 8861|  1.68k|}
PyUnicode_BuildEncodingMap:
 8907|     20|{
 8908|     20|    PyObject *result;
 8909|     20|    struct encoding_map *mresult;
 8910|     20|    int i;
 8911|     20|    int need_dict = 0;
 8912|     20|    unsigned char level1[32];
 8913|     20|    unsigned char level2[512];
 8914|     20|    unsigned char *mlevel1, *mlevel2, *mlevel3;
 8915|     20|    int count2 = 0, count3 = 0;
 8916|     20|    int kind;
 8917|     20|    const void *data;
 8918|     20|    int length;
 8919|     20|    Py_UCS4 ch;
 8920|       |
 8921|     20|    if (!PyUnicode_Check(string) || !PyUnicode_GET_LENGTH(string)) {
  ------------------
  |  |  103|     20|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     40|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyUnicode_Check(string) || !PyUnicode_GET_LENGTH(string)) {
  ------------------
  |  |  299|     20|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8921:9): [True: 0, False: 20]
  |  Branch (8921:37): [True: 0, False: 20]
  ------------------
 8922|      0|        PyErr_BadArgument();
 8923|      0|        return NULL;
 8924|      0|    }
 8925|     20|    kind = PyUnicode_KIND(string);
  ------------------
  |  |  258|     20|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|     40|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 20, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8926|     20|    data = PyUnicode_DATA(string);
  ------------------
  |  |  284|     20|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8927|     20|    length = (int)Py_MIN(PyUnicode_GET_LENGTH(string), 256);
  ------------------
  |  |  120|     20|       __extension__ \
  |  |  121|     20|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|     20|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|     20|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|     20|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|     20|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 20]
  |  |  ------------------
  ------------------
 8928|     20|    memset(level1, 0xFF, sizeof level1);
 8929|     20|    memset(level2, 0xFF, sizeof level2);
 8930|       |
 8931|       |    /* If there isn't a one-to-one mapping of NULL to \0,
 8932|       |       or if there are non-BMP characters, we need to use
 8933|       |       a mapping dictionary. */
 8934|     20|    if (PyUnicode_READ(kind, data, 0) != 0)
  ------------------
  |  |  354|     20|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|     20|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|     20|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|     20|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|     20|                   (index))
  ------------------
  |  Branch (8934:9): [True: 0, False: 20]
  ------------------
 8935|      0|        need_dict = 1;
 8936|  5.12k|    for (i = 1; i < length; i++) {
  ------------------
  |  Branch (8936:17): [True: 5.10k, False: 20]
  ------------------
 8937|  5.10k|        int l1, l2;
 8938|  5.10k|        ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|  5.10k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  5.10k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  5.10k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  5.10k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  5.10k|                   (index))
  ------------------
 8939|  5.10k|        if (ch == 0 || ch > 0xFFFF) {
  ------------------
  |  Branch (8939:13): [True: 0, False: 5.10k]
  |  Branch (8939:24): [True: 0, False: 5.10k]
  ------------------
 8940|      0|            need_dict = 1;
 8941|      0|            break;
 8942|      0|        }
 8943|  5.10k|        if (ch == 0xFFFE)
  ------------------
  |  Branch (8943:13): [True: 110, False: 4.99k]
  ------------------
 8944|       |            /* unmapped character */
 8945|    110|            continue;
 8946|  4.99k|        l1 = ch >> 11;
 8947|  4.99k|        l2 = ch >> 7;
 8948|  4.99k|        if (level1[l1] == 0xFF)
  ------------------
  |  Branch (8948:13): [True: 35, False: 4.95k]
  ------------------
 8949|     35|            level1[l1] = count2++;
 8950|  4.99k|        if (level2[l2] == 0xFF)
  ------------------
  |  Branch (8950:13): [True: 98, False: 4.89k]
  ------------------
 8951|     98|            level2[l2] = count3++;
 8952|  4.99k|    }
 8953|       |
 8954|     20|    if (count2 >= 0xFF || count3 >= 0xFF)
  ------------------
  |  Branch (8954:9): [True: 0, False: 20]
  |  Branch (8954:27): [True: 0, False: 20]
  ------------------
 8955|      0|        need_dict = 1;
 8956|       |
 8957|     20|    if (need_dict) {
  ------------------
  |  Branch (8957:9): [True: 0, False: 20]
  ------------------
 8958|      0|        PyObject *result = PyDict_New();
 8959|      0|        if (!result)
  ------------------
  |  Branch (8959:13): [True: 0, False: 0]
  ------------------
 8960|      0|            return NULL;
 8961|      0|        for (i = 0; i < length; i++) {
  ------------------
  |  Branch (8961:21): [True: 0, False: 0]
  ------------------
 8962|      0|            Py_UCS4 c = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
 8963|      0|            PyObject *key = PyLong_FromLong(c);
 8964|      0|            if (key == NULL) {
  ------------------
  |  Branch (8964:17): [True: 0, False: 0]
  ------------------
 8965|      0|                Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8966|      0|                return NULL;
 8967|      0|            }
 8968|      0|            PyObject *value = PyLong_FromLong(i);
 8969|      0|            if (value == NULL) {
  ------------------
  |  Branch (8969:17): [True: 0, False: 0]
  ------------------
 8970|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8971|      0|                Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8972|      0|                return NULL;
 8973|      0|            }
 8974|      0|            int rc = PyDict_SetItem(result, key, value);
 8975|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8976|      0|            Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8977|      0|            if (rc < 0) {
  ------------------
  |  Branch (8977:17): [True: 0, False: 0]
  ------------------
 8978|      0|                Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8979|      0|                return NULL;
 8980|      0|            }
 8981|      0|        }
 8982|      0|        return result;
 8983|      0|    }
 8984|       |
 8985|       |    /* Create a three-level trie */
 8986|     20|    result = PyObject_Malloc(sizeof(struct encoding_map) +
 8987|     20|                             16*count2 + 128*count3 - 1);
 8988|     20|    if (!result) {
  ------------------
  |  Branch (8988:9): [True: 0, False: 20]
  ------------------
 8989|      0|        return PyErr_NoMemory();
 8990|      0|    }
 8991|       |
 8992|     20|    _PyObject_Init(result, &EncodingMapType);
 8993|     20|    mresult = (struct encoding_map*)result;
 8994|     20|    mresult->count2 = count2;
 8995|     20|    mresult->count3 = count3;
 8996|     20|    mlevel1 = mresult->level1;
 8997|     20|    mlevel2 = mresult->level23;
 8998|     20|    mlevel3 = mresult->level23 + 16*count2;
 8999|     20|    memcpy(mlevel1, level1, 32);
 9000|     20|    memset(mlevel2, 0xFF, 16*count2);
 9001|     20|    memset(mlevel3, 0, 128*count3);
 9002|     20|    count3 = 0;
 9003|  5.12k|    for (i = 1; i < length; i++) {
  ------------------
  |  Branch (9003:17): [True: 5.10k, False: 20]
  ------------------
 9004|  5.10k|        int o1, o2, o3, i2, i3;
 9005|  5.10k|        Py_UCS4 ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|  5.10k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  5.10k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  5.10k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  5.10k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  5.10k|                   (index))
  ------------------
 9006|  5.10k|        if (ch == 0xFFFE)
  ------------------
  |  Branch (9006:13): [True: 110, False: 4.99k]
  ------------------
 9007|       |            /* unmapped character */
 9008|    110|            continue;
 9009|  4.99k|        o1 = ch>>11;
 9010|  4.99k|        o2 = (ch>>7) & 0xF;
 9011|  4.99k|        i2 = 16*mlevel1[o1] + o2;
 9012|  4.99k|        if (mlevel2[i2] == 0xFF)
  ------------------
  |  Branch (9012:13): [True: 98, False: 4.89k]
  ------------------
 9013|     98|            mlevel2[i2] = count3++;
 9014|  4.99k|        o3 = ch & 0x7F;
 9015|  4.99k|        i3 = 128*mlevel2[i2] + o3;
 9016|  4.99k|        mlevel3[i3] = i;
 9017|  4.99k|    }
 9018|     20|    return result;
 9019|     20|}
_PyUnicode_TransformDecimalAndSpaceToASCII:
 9867|    609|{
 9868|    609|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|    609|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    609|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (9868:9): [True: 0, False: 609]
  ------------------
 9869|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 9870|      0|        return NULL;
 9871|      0|    }
 9872|    609|    if (PyUnicode_IS_ASCII(unicode)) {
  ------------------
  |  |  227|    609|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    609|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    609|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 609, False: 0]
  |  |  ------------------
  ------------------
 9873|       |        /* If the string is already ASCII, just return the same string */
 9874|    609|        return Py_NewRef(unicode);
  ------------------
  |  |  550|    609|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    609|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    609|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9875|    609|    }
 9876|       |
 9877|      0|    Py_ssize_t len = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9878|      0|    PyObject *result = PyUnicode_New(len, 127);
 9879|      0|    if (result == NULL) {
  ------------------
  |  Branch (9879:9): [True: 0, False: 0]
  ------------------
 9880|      0|        return NULL;
 9881|      0|    }
 9882|       |
 9883|      0|    Py_UCS1 *out = PyUnicode_1BYTE_DATA(result);
  ------------------
  |  |  291|      0|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 9884|      0|    int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9885|      0|    const void *data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9886|      0|    Py_ssize_t i;
 9887|      0|    for (i = 0; i < len; ++i) {
  ------------------
  |  Branch (9887:17): [True: 0, False: 0]
  ------------------
 9888|      0|        Py_UCS4 ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
 9889|      0|        if (ch < 127) {
  ------------------
  |  Branch (9889:13): [True: 0, False: 0]
  ------------------
 9890|      0|            out[i] = ch;
 9891|      0|        }
 9892|      0|        else if (Py_UNICODE_ISSPACE(ch)) {
  ------------------
  |  Branch (9892:18): [True: 0, False: 0]
  ------------------
 9893|      0|            out[i] = ' ';
 9894|      0|        }
 9895|      0|        else {
 9896|      0|            int decimal = Py_UNICODE_TODECIMAL(ch);
  ------------------
  |  |  763|      0|#define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch)
  ------------------
 9897|      0|            if (decimal < 0) {
  ------------------
  |  Branch (9897:17): [True: 0, False: 0]
  ------------------
 9898|      0|                out[i] = '?';
 9899|      0|                out[i+1] = '\0';
 9900|      0|                _PyUnicode_LENGTH(result) = i + 1;
  ------------------
  |  |  155|      0|    (_PyASCIIObject_CAST(op)->length)
  |  |  ------------------
  |  |  |  |  186|      0|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      0|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9900:17): [True: 0, False: 0]
  ------------------
 9901|      0|                break;
 9902|      0|            }
 9903|      0|            out[i] = '0' + decimal;
 9904|      0|        }
 9905|      0|    }
 9906|       |
 9907|      0|    assert(_PyUnicode_CheckConsistency(result, 1));
  ------------------
  |  Branch (9907:5): [True: 0, False: 0]
  ------------------
 9908|      0|    return result;
 9909|      0|}
PyUnicode_Find:
10035|  5.82k|{
10036|  5.82k|    if (ensure_unicode(str) < 0 || ensure_unicode(substr) < 0)
  ------------------
  |  |  109|  5.82k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
                  if (ensure_unicode(str) < 0 || ensure_unicode(substr) < 0)
  ------------------
  |  |  109|  5.82k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (10036:9): [True: 0, False: 5.82k]
  |  Branch (10036:36): [True: 0, False: 5.82k]
  ------------------
10037|      0|        return -2;
10038|       |
10039|  5.82k|    return any_find_slice(str, substr, start, end, direction);
10040|  5.82k|}
PyUnicode_FindChar:
10046|   423k|{
10047|   423k|    int kind;
10048|   423k|    Py_ssize_t len, result;
10049|   423k|    len = PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|   423k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   423k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   423k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10050|   423k|    ADJUST_INDICES(start, end, len);
  ------------------
  |  | 9915|   423k|    do {                                \
  |  | 9916|   423k|        if (end > len) {                \
  |  |  ------------------
  |  |  |  Branch (9916:13): [True: 0, False: 423k]
  |  |  ------------------
  |  | 9917|      0|            end = len;                  \
  |  | 9918|      0|        }                               \
  |  | 9919|   423k|        else if (end < 0) {             \
  |  |  ------------------
  |  |  |  Branch (9919:18): [True: 0, False: 423k]
  |  |  ------------------
  |  | 9920|      0|            end += len;                 \
  |  | 9921|      0|            if (end < 0) {              \
  |  |  ------------------
  |  |  |  Branch (9921:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9922|      0|                end = 0;                \
  |  | 9923|      0|            }                           \
  |  | 9924|      0|        }                               \
  |  | 9925|   423k|        if (start < 0) {                \
  |  |  ------------------
  |  |  |  Branch (9925:13): [True: 0, False: 423k]
  |  |  ------------------
  |  | 9926|      0|            start += len;               \
  |  | 9927|      0|            if (start < 0) {            \
  |  |  ------------------
  |  |  |  Branch (9927:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9928|      0|                start = 0;              \
  |  | 9929|      0|            }                           \
  |  | 9930|      0|        }                               \
  |  | 9931|   423k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (9931:14): [Folded, False: 423k]
  |  |  ------------------
  ------------------
10051|   423k|    if (end - start < 1)
  ------------------
  |  Branch (10051:9): [True: 0, False: 423k]
  ------------------
10052|      0|        return -1;
10053|   423k|    kind = PyUnicode_KIND(str);
  ------------------
  |  |  258|   423k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   847k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 423k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10054|   423k|    result = findchar(PyUnicode_1BYTE_DATA(str) + kind*start,
  ------------------
  |  |  291|   423k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   423k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10055|   423k|                      kind, end-start, ch, direction);
10056|   423k|    if (result == -1)
  ------------------
  |  Branch (10056:9): [True: 366k, False: 57.3k]
  ------------------
10057|   366k|        return -1;
10058|  57.3k|    else
10059|  57.3k|        return start + result;
10060|   423k|}
PyUnicode_Join:
10372|   275k|{
10373|   275k|    PyObject *res;
10374|   275k|    PyObject *fseq;
10375|   275k|    Py_ssize_t seqlen;
10376|   275k|    PyObject **items;
10377|       |
10378|   275k|    fseq = PySequence_Fast(seq, "can only join an iterable");
10379|   275k|    if (fseq == NULL) {
  ------------------
  |  Branch (10379:9): [True: 0, False: 275k]
  ------------------
10380|      0|        return NULL;
10381|      0|    }
10382|       |
10383|   275k|    Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(seq);
  ------------------
  |  |   77|   275k|# define Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST(original) {
  ------------------
10384|       |
10385|   275k|    items = PySequence_Fast_ITEMS(fseq);
  ------------------
  |  |  102|   275k|    (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
  |  |  ------------------
  |  |  |  |   25|   275k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   275k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 275k, False: 124]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  103|   275k|                      : ((PyTupleObject *)(sf))->ob_item)
  ------------------
10386|   275k|    seqlen = PySequence_Fast_GET_SIZE(fseq);
  ------------------
  |  |   92|   275k|    (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   25|   275k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   275k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 275k, False: 124]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   38|   275k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   275k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
  |  |  ------------------
  |  |  |  |   27|    124|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    124|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    124|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10387|   275k|    res = _PyUnicode_JoinArray(separator, items, seqlen);
10388|       |
10389|   275k|    Py_END_CRITICAL_SECTION_SEQUENCE_FAST();
  ------------------
  |  |   78|   275k|# define Py_END_CRITICAL_SECTION_SEQUENCE_FAST() }
  ------------------
10390|       |
10391|   275k|    Py_DECREF(fseq);
  ------------------
  |  |  430|   275k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   275k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10392|   275k|    return res;
10393|   275k|}
_PyUnicode_JoinArray:
10397|   324k|{
10398|   324k|    PyObject *res = NULL; /* the result */
10399|   324k|    PyObject *sep = NULL;
10400|   324k|    Py_ssize_t seplen;
10401|   324k|    PyObject *item;
10402|   324k|    Py_ssize_t sz, i, res_offset;
10403|   324k|    Py_UCS4 maxchar;
10404|   324k|    Py_UCS4 item_maxchar;
10405|   324k|    int use_memcpy;
10406|   324k|    unsigned char *res_data = NULL, *sep_data = NULL;
10407|   324k|    PyObject *last_obj;
10408|   324k|    int kind = 0;
10409|       |
10410|       |    /* If empty sequence, return u"". */
10411|   324k|    if (seqlen == 0) {
  ------------------
  |  Branch (10411:9): [True: 0, False: 324k]
  ------------------
10412|      0|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|      0|    do {                             \
  |  |  380|      0|        return _PyUnicode_GetEmpty();\
  |  |  381|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
10413|      0|    }
10414|       |
10415|       |    /* If singleton sequence with an exact Unicode, return that. */
10416|   324k|    last_obj = NULL;
10417|   324k|    if (seqlen == 1) {
  ------------------
  |  Branch (10417:9): [True: 236k, False: 87.6k]
  ------------------
10418|   236k|        if (PyUnicode_CheckExact(items[0])) {
  ------------------
  |  |  104|   236k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   236k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   236k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   236k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 236k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10419|   236k|            res = items[0];
10420|   236k|            return Py_NewRef(res);
  ------------------
  |  |  550|   236k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   236k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   236k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10421|   236k|        }
10422|      0|        seplen = 0;
10423|      0|        maxchar = 0;
10424|      0|    }
10425|  87.6k|    else {
10426|       |        /* Set up sep and seplen */
10427|  87.6k|        if (separator == NULL) {
  ------------------
  |  Branch (10427:13): [True: 0, False: 87.6k]
  ------------------
10428|       |            /* fall back to a blank space separator */
10429|      0|            sep = PyUnicode_FromOrdinal(' ');
10430|      0|            if (!sep)
  ------------------
  |  Branch (10430:17): [True: 0, False: 0]
  ------------------
10431|      0|                goto onError;
10432|      0|            seplen = 1;
10433|      0|            maxchar = 32;
10434|      0|        }
10435|  87.6k|        else {
10436|  87.6k|            if (!PyUnicode_Check(separator)) {
  ------------------
  |  |  103|  87.6k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  87.6k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (10436:17): [True: 0, False: 87.6k]
  ------------------
10437|      0|                PyErr_Format(PyExc_TypeError,
10438|      0|                             "separator: expected str instance,"
10439|      0|                             " %.80s found",
10440|      0|                             Py_TYPE(separator)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10441|      0|                goto onError;
10442|      0|            }
10443|  87.6k|            sep = separator;
10444|  87.6k|            seplen = PyUnicode_GET_LENGTH(separator);
  ------------------
  |  |  299|  87.6k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  87.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  87.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10445|  87.6k|            maxchar = PyUnicode_MAX_CHAR_VALUE(separator);
  ------------------
  |  |  405|  87.6k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  87.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  87.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10446|       |            /* inc refcount to keep this code path symmetric with the
10447|       |               above case of a blank separator */
10448|  87.6k|            Py_INCREF(sep);
  ------------------
  |  |  310|  87.6k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  87.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  87.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10449|  87.6k|        }
10450|  87.6k|        last_obj = sep;
10451|  87.6k|    }
10452|       |
10453|       |    /* There are at least two things to join, or else we have a subclass
10454|       |     * of str in the sequence.
10455|       |     * Do a pre-pass to figure out the total amount of space we'll
10456|       |     * need (sz), and see whether all argument are strings.
10457|       |     */
10458|  87.6k|    sz = 0;
10459|       |#ifdef Py_DEBUG
10460|       |    use_memcpy = 0;
10461|       |#else
10462|  87.6k|    use_memcpy = 1;
10463|  87.6k|#endif
10464|   862k|    for (i = 0; i < seqlen; i++) {
  ------------------
  |  Branch (10464:17): [True: 774k, False: 87.6k]
  ------------------
10465|   774k|        size_t add_sz;
10466|   774k|        item = items[i];
10467|   774k|        if (!PyUnicode_Check(item)) {
  ------------------
  |  |  103|   774k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   774k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (10467:13): [True: 0, False: 774k]
  ------------------
10468|      0|            PyErr_Format(PyExc_TypeError,
10469|      0|                         "sequence item %zd: expected str instance,"
10470|      0|                         " %.80s found",
10471|      0|                         i, Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10472|      0|            goto onError;
10473|      0|        }
10474|   774k|        add_sz = PyUnicode_GET_LENGTH(item);
  ------------------
  |  |  299|   774k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   774k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   774k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10475|   774k|        item_maxchar = PyUnicode_MAX_CHAR_VALUE(item);
  ------------------
  |  |  405|   774k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   774k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   774k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10476|   774k|        maxchar = Py_MAX(maxchar, item_maxchar);
  ------------------
  |  |  126|   774k|       __extension__ \
  |  |  127|   774k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   774k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   774k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   774k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   774k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 117k, False: 657k]
  |  |  ------------------
  ------------------
10477|   774k|        if (i != 0) {
  ------------------
  |  Branch (10477:13): [True: 687k, False: 87.6k]
  ------------------
10478|   687k|            add_sz += seplen;
10479|   687k|        }
10480|   774k|        if (add_sz > (size_t)(PY_SSIZE_T_MAX - sz)) {
  ------------------
  |  |  137|   774k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (10480:13): [True: 0, False: 774k]
  ------------------
10481|      0|            PyErr_SetString(PyExc_OverflowError,
10482|      0|                            "join() result is too long for a Python string");
10483|      0|            goto onError;
10484|      0|        }
10485|   774k|        sz += add_sz;
10486|   774k|        if (use_memcpy && last_obj != NULL) {
  ------------------
  |  Branch (10486:13): [True: 477k, False: 296k]
  |  Branch (10486:27): [True: 477k, False: 0]
  ------------------
10487|   955k|            if (PyUnicode_KIND(last_obj) != PyUnicode_KIND(item))
  ------------------
  |  |  258|   477k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   955k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 477k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PyUnicode_KIND(last_obj) != PyUnicode_KIND(item))
  ------------------
  |  |  258|   477k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   955k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 477k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10487:17): [True: 28.1k, False: 449k]
  ------------------
10488|  28.1k|                use_memcpy = 0;
10489|   477k|        }
10490|      0|        last_obj = item;
10491|   774k|    }
10492|       |
10493|  87.6k|    res = PyUnicode_New(sz, maxchar);
10494|  87.6k|    if (res == NULL)
  ------------------
  |  Branch (10494:9): [True: 0, False: 87.6k]
  ------------------
10495|      0|        goto onError;
10496|       |
10497|       |    /* Catenate everything. */
10498|       |#ifdef Py_DEBUG
10499|       |    use_memcpy = 0;
10500|       |#else
10501|  87.6k|    if (use_memcpy) {
  ------------------
  |  Branch (10501:9): [True: 59.4k, False: 28.1k]
  ------------------
10502|  59.4k|        res_data = PyUnicode_1BYTE_DATA(res);
  ------------------
  |  |  291|  59.4k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  59.4k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10503|  59.4k|        kind = PyUnicode_KIND(res);
  ------------------
  |  |  258|  59.4k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   118k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 59.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10504|  59.4k|        if (seplen != 0)
  ------------------
  |  Branch (10504:13): [True: 2.73k, False: 56.7k]
  ------------------
10505|  2.73k|            sep_data = PyUnicode_1BYTE_DATA(sep);
  ------------------
  |  |  291|  2.73k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  2.73k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10506|  59.4k|    }
10507|  87.6k|#endif
10508|  87.6k|    if (use_memcpy) {
  ------------------
  |  Branch (10508:9): [True: 59.4k, False: 28.1k]
  ------------------
10509|   486k|        for (i = 0; i < seqlen; ++i) {
  ------------------
  |  Branch (10509:21): [True: 426k, False: 59.4k]
  ------------------
10510|   426k|            Py_ssize_t itemlen;
10511|   426k|            item = items[i];
10512|       |
10513|       |            /* Copy item, and maybe the separator. */
10514|   426k|            if (i && seplen != 0) {
  ------------------
  |  Branch (10514:17): [True: 367k, False: 59.4k]
  |  Branch (10514:22): [True: 5.54k, False: 361k]
  ------------------
10515|  5.54k|                memcpy(res_data,
10516|  5.54k|                          sep_data,
10517|  5.54k|                          kind * seplen);
10518|  5.54k|                res_data += kind * seplen;
10519|  5.54k|            }
10520|       |
10521|   426k|            itemlen = PyUnicode_GET_LENGTH(item);
  ------------------
  |  |  299|   426k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   426k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   426k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10522|   426k|            if (itemlen != 0) {
  ------------------
  |  Branch (10522:17): [True: 425k, False: 995]
  ------------------
10523|   425k|                memcpy(res_data,
10524|   425k|                          PyUnicode_DATA(item),
  ------------------
  |  |  284|   425k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   425k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   425k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10525|   425k|                          kind * itemlen);
10526|   425k|                res_data += kind * itemlen;
10527|   425k|            }
10528|   426k|        }
10529|  59.4k|        assert(res_data == PyUnicode_1BYTE_DATA(res)
  ------------------
  |  Branch (10529:9): [True: 59.4k, False: 0]
  ------------------
10530|  59.4k|                           + kind * PyUnicode_GET_LENGTH(res));
10531|  59.4k|    }
10532|  28.1k|    else {
10533|   376k|        for (i = 0, res_offset = 0; i < seqlen; ++i) {
  ------------------
  |  Branch (10533:37): [True: 347k, False: 28.1k]
  ------------------
10534|   347k|            Py_ssize_t itemlen;
10535|   347k|            item = items[i];
10536|       |
10537|       |            /* Copy item, and maybe the separator. */
10538|   347k|            if (i && seplen != 0) {
  ------------------
  |  Branch (10538:17): [True: 319k, False: 28.1k]
  |  Branch (10538:22): [True: 68.2k, False: 251k]
  ------------------
10539|  68.2k|                _PyUnicode_FastCopyCharacters(res, res_offset, sep, 0, seplen);
10540|  68.2k|                res_offset += seplen;
10541|  68.2k|            }
10542|       |
10543|   347k|            itemlen = PyUnicode_GET_LENGTH(item);
  ------------------
  |  |  299|   347k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   347k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   347k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10544|   347k|            if (itemlen != 0) {
  ------------------
  |  Branch (10544:17): [True: 301k, False: 46.8k]
  ------------------
10545|   301k|                _PyUnicode_FastCopyCharacters(res, res_offset, item, 0, itemlen);
10546|   301k|                res_offset += itemlen;
10547|   301k|            }
10548|   347k|        }
10549|  28.1k|        assert(res_offset == PyUnicode_GET_LENGTH(res));
  ------------------
  |  Branch (10549:9): [True: 28.1k, False: 0]
  ------------------
10550|  28.1k|    }
10551|       |
10552|  87.6k|    Py_XDECREF(sep);
  ------------------
  |  |  524|  87.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  87.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  87.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10553|  87.6k|    assert(_PyUnicode_CheckConsistency(res, 1));
  ------------------
  |  Branch (10553:5): [True: 87.6k, False: 0]
  ------------------
10554|  87.6k|    return res;
10555|       |
10556|      0|  onError:
10557|      0|    Py_XDECREF(sep);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10558|      0|    Py_XDECREF(res);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10559|       |    return NULL;
10560|  87.6k|}
_PyUnicode_FastFill:
10565|    732|{
10566|    732|    const int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|    732|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.46k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 732, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10567|    732|    void *data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|    732|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    732|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    732|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10568|    732|    assert(_PyUnicode_IsModifiable(unicode));
  ------------------
  |  Branch (10568:5): [True: 732, False: 0]
  ------------------
10569|    732|    assert(fill_char <= PyUnicode_MAX_CHAR_VALUE(unicode));
  ------------------
  |  Branch (10569:5): [True: 732, False: 0]
  ------------------
10570|    732|    assert(start >= 0);
  ------------------
  |  Branch (10570:5): [True: 732, False: 0]
  ------------------
10571|    732|    assert(start + length <= PyUnicode_GET_LENGTH(unicode));
  ------------------
  |  Branch (10571:5): [True: 732, False: 0]
  ------------------
10572|    732|    _PyUnicode_Fill(kind, data, fill_char, start, length);
10573|    732|}
PyUnicode_Fill:
10578|    732|{
10579|    732|    Py_ssize_t maxlen;
10580|       |
10581|    732|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|    732|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    732|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (10581:9): [True: 0, False: 732]
  ------------------
10582|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
10583|      0|        return -1;
10584|      0|    }
10585|    732|    if (unicode_check_modifiable(unicode))
  ------------------
  |  Branch (10585:9): [True: 0, False: 732]
  ------------------
10586|      0|        return -1;
10587|       |
10588|    732|    if (start < 0) {
  ------------------
  |  Branch (10588:9): [True: 0, False: 732]
  ------------------
10589|      0|        PyErr_SetString(PyExc_IndexError, "string index out of range");
10590|      0|        return -1;
10591|      0|    }
10592|    732|    if (fill_char > PyUnicode_MAX_CHAR_VALUE(unicode)) {
  ------------------
  |  |  405|    732|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    732|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    732|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10592:9): [True: 0, False: 732]
  ------------------
10593|      0|        PyErr_SetString(PyExc_ValueError,
10594|      0|                         "fill character is bigger than "
10595|      0|                         "the string maximum character");
10596|      0|        return -1;
10597|      0|    }
10598|       |
10599|    732|    maxlen = PyUnicode_GET_LENGTH(unicode) - start;
  ------------------
  |  |  299|    732|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    732|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    732|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10600|    732|    length = Py_MIN(maxlen, length);
  ------------------
  |  |  120|    732|       __extension__ \
  |  |  121|    732|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|    732|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|    732|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|    732|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|    732|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 732]
  |  |  ------------------
  ------------------
10601|    732|    if (length <= 0)
  ------------------
  |  Branch (10601:9): [True: 0, False: 732]
  ------------------
10602|      0|        return 0;
10603|       |
10604|    732|    _PyUnicode_FastFill(unicode, start, length, fill_char);
10605|    732|    return length;
10606|    732|}
_PyUnicode_Equal:
11429|  13.5M|{
11430|  13.5M|    assert(PyUnicode_Check(str1));
  ------------------
  |  Branch (11430:5): [True: 13.5M, False: 0]
  ------------------
11431|  13.5M|    assert(PyUnicode_Check(str2));
  ------------------
  |  Branch (11431:5): [True: 13.5M, False: 0]
  ------------------
11432|  13.5M|    if (str1 == str2) {
  ------------------
  |  Branch (11432:9): [True: 84.1k, False: 13.4M]
  ------------------
11433|  84.1k|        return 1;
11434|  84.1k|    }
11435|  13.4M|    return unicode_eq(str1, str2);
11436|  13.5M|}
PyUnicode_Compare:
11459|    582|{
11460|    582|    if (PyUnicode_Check(left) && PyUnicode_Check(right)) {
  ------------------
  |  |  103|    582|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.16k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 582, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyUnicode_Check(left) && PyUnicode_Check(right)) {
  ------------------
  |  |  103|    582|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    582|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 582, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11461|       |        /* a string is equal to itself */
11462|    582|        if (left == right)
  ------------------
  |  Branch (11462:13): [True: 57, False: 525]
  ------------------
11463|     57|            return 0;
11464|       |
11465|    525|        return unicode_compare(left, right);
11466|    582|    }
11467|      0|    PyErr_Format(PyExc_TypeError,
11468|      0|                 "Can't compare %.100s and %.100s",
11469|      0|                 Py_TYPE(left)->tp_name,
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11470|      0|                 Py_TYPE(right)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11471|      0|    return -1;
11472|    582|}
PyUnicode_CompareWithASCIIString:
11476|  1.12M|{
11477|  1.12M|    Py_ssize_t i;
11478|  1.12M|    int kind;
11479|  1.12M|    Py_UCS4 chr;
11480|       |
11481|  1.12M|    assert(_PyUnicode_CHECK(uni));
  ------------------
  |  Branch (11481:5): [True: 1.12M, False: 0]
  ------------------
11482|  1.12M|    kind = PyUnicode_KIND(uni);
  ------------------
  |  |  258|  1.12M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  2.25M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.12M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11483|  1.12M|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (11483:9): [True: 1.12M, False: 3.58k]
  ------------------
11484|  1.12M|        const void *data = PyUnicode_1BYTE_DATA(uni);
  ------------------
  |  |  291|  1.12M|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  1.12M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
11485|  1.12M|        size_t len1 = (size_t)PyUnicode_GET_LENGTH(uni);
  ------------------
  |  |  299|  1.12M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.12M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.12M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11486|  1.12M|        size_t len, len2 = strlen(str);
11487|  1.12M|        int cmp;
11488|       |
11489|  1.12M|        len = Py_MIN(len1, len2);
  ------------------
  |  |  120|  1.12M|       __extension__ \
  |  |  121|  1.12M|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  1.12M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  1.12M|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  1.12M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  1.12M|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 30.0k, False: 1.09M]
  |  |  ------------------
  ------------------
11490|  1.12M|        cmp = memcmp(data, str, len);
11491|  1.12M|        if (cmp != 0) {
  ------------------
  |  Branch (11491:13): [True: 572k, False: 551k]
  ------------------
11492|   572k|            if (cmp < 0)
  ------------------
  |  Branch (11492:17): [True: 23.8k, False: 548k]
  ------------------
11493|  23.8k|                return -1;
11494|   548k|            else
11495|   548k|                return 1;
11496|   572k|        }
11497|   551k|        if (len1 > len2)
  ------------------
  |  Branch (11497:13): [True: 1.40k, False: 550k]
  ------------------
11498|  1.40k|            return 1; /* uni is longer */
11499|   550k|        if (len1 < len2)
  ------------------
  |  Branch (11499:13): [True: 4.50k, False: 545k]
  ------------------
11500|  4.50k|            return -1; /* str is longer */
11501|   545k|        return 0;
11502|   550k|    }
11503|  3.58k|    else {
11504|  3.58k|        const void *data = PyUnicode_DATA(uni);
  ------------------
  |  |  284|  3.58k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.58k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.58k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11505|       |        /* Compare Unicode string and source character set string */
11506|  6.60k|        for (i = 0; (chr = PyUnicode_READ(kind, data, i)) && str[i]; i++)
  ------------------
  |  |  354|  6.60k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  6.60k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  6.60k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  6.60k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  6.60k|                   (index))
  ------------------
  |  Branch (11506:21): [True: 6.60k, False: 0]
  |  Branch (11506:62): [True: 5.90k, False: 698]
  ------------------
11507|  5.90k|            if (chr != (unsigned char)str[i])
  ------------------
  |  Branch (11507:17): [True: 2.88k, False: 3.02k]
  ------------------
11508|  2.88k|                return (chr < (unsigned char)(str[i])) ? -1 : 1;
  ------------------
  |  Branch (11508:24): [True: 907, False: 1.97k]
  ------------------
11509|       |        /* This check keeps Python strings that end in '\0' from comparing equal
11510|       |         to C strings identical up to that point. */
11511|    698|        if (PyUnicode_GET_LENGTH(uni) != i || chr)
  ------------------
  |  |  299|    698|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    698|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    698|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (11511:13): [True: 698, False: 0]
  |  Branch (11511:47): [True: 0, False: 0]
  ------------------
11512|    698|            return 1; /* uni is longer */
11513|      0|        if (str[i])
  ------------------
  |  Branch (11513:13): [True: 0, False: 0]
  ------------------
11514|      0|            return -1; /* str is longer */
11515|      0|        return 0;
11516|      0|    }
11517|  1.12M|}
PyUnicode_EqualToUTF8:
11521|      2|{
11522|      2|    return PyUnicode_EqualToUTF8AndSize(unicode, str, strlen(str));
11523|      2|}
PyUnicode_EqualToUTF8AndSize:
11527|      2|{
11528|      2|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (11528:5): [True: 2, False: 0]
  ------------------
11529|      2|    assert(str);
  ------------------
  |  Branch (11529:5): [True: 2, False: 0]
  ------------------
11530|       |
11531|      2|    if (PyUnicode_IS_ASCII(unicode)) {
  ------------------
  |  |  227|      2|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 2, False: 0]
  |  |  ------------------
  ------------------
11532|      2|        Py_ssize_t len = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|      2|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11533|      2|        return size == len &&
  ------------------
  |  Branch (11533:16): [True: 0, False: 2]
  ------------------
11534|      0|            memcmp(PyUnicode_1BYTE_DATA(unicode), str, len) == 0;
  ------------------
  |  |  291|      0|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (11534:13): [True: 0, False: 0]
  ------------------
11535|      2|    }
11536|      0|    if (PyUnicode_UTF8(unicode) != NULL) {
  ------------------
  |  Branch (11536:9): [True: 0, False: 0]
  ------------------
11537|      0|        Py_ssize_t len = PyUnicode_UTF8_LENGTH(unicode);
11538|      0|        return size == len &&
  ------------------
  |  Branch (11538:16): [True: 0, False: 0]
  ------------------
11539|      0|            memcmp(PyUnicode_UTF8(unicode), str, len) == 0;
  ------------------
  |  Branch (11539:13): [True: 0, False: 0]
  ------------------
11540|      0|    }
11541|       |
11542|      0|    Py_ssize_t len = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11543|      0|    if ((size_t)len >= (size_t)size || (size_t)len < (size_t)size / 4) {
  ------------------
  |  Branch (11543:9): [True: 0, False: 0]
  |  Branch (11543:40): [True: 0, False: 0]
  ------------------
11544|      0|        return 0;
11545|      0|    }
11546|      0|    const unsigned char *s = (const unsigned char *)str;
11547|      0|    const unsigned char *ends = s + (size_t)size;
11548|      0|    int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11549|      0|    const void *data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11550|       |    /* Compare Unicode string and UTF-8 string */
11551|      0|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (11551:28): [True: 0, False: 0]
  ------------------
11552|      0|        Py_UCS4 ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
11553|      0|        if (ch < 0x80) {
  ------------------
  |  Branch (11553:13): [True: 0, False: 0]
  ------------------
11554|      0|            if (ends == s || s[0] != ch) {
  ------------------
  |  Branch (11554:17): [True: 0, False: 0]
  |  Branch (11554:30): [True: 0, False: 0]
  ------------------
11555|      0|                return 0;
11556|      0|            }
11557|      0|            s += 1;
11558|      0|        }
11559|      0|        else if (ch < 0x800) {
  ------------------
  |  Branch (11559:18): [True: 0, False: 0]
  ------------------
11560|      0|            if ((ends - s) < 2 ||
  ------------------
  |  Branch (11560:17): [True: 0, False: 0]
  ------------------
11561|      0|                s[0] != (0xc0 | (ch >> 6)) ||
  ------------------
  |  Branch (11561:17): [True: 0, False: 0]
  ------------------
11562|      0|                s[1] != (0x80 | (ch & 0x3f)))
  ------------------
  |  Branch (11562:17): [True: 0, False: 0]
  ------------------
11563|      0|            {
11564|      0|                return 0;
11565|      0|            }
11566|      0|            s += 2;
11567|      0|        }
11568|      0|        else if (ch < 0x10000) {
  ------------------
  |  Branch (11568:18): [True: 0, False: 0]
  ------------------
11569|      0|            if (Py_UNICODE_IS_SURROGATE(ch) ||
  ------------------
  |  Branch (11569:17): [True: 0, False: 0]
  ------------------
11570|      0|                (ends - s) < 3 ||
  ------------------
  |  Branch (11570:17): [True: 0, False: 0]
  ------------------
11571|      0|                s[0] != (0xe0 | (ch >> 12)) ||
  ------------------
  |  Branch (11571:17): [True: 0, False: 0]
  ------------------
11572|      0|                s[1] != (0x80 | ((ch >> 6) & 0x3f)) ||
  ------------------
  |  Branch (11572:17): [True: 0, False: 0]
  ------------------
11573|      0|                s[2] != (0x80 | (ch & 0x3f)))
  ------------------
  |  Branch (11573:17): [True: 0, False: 0]
  ------------------
11574|      0|            {
11575|      0|                return 0;
11576|      0|            }
11577|      0|            s += 3;
11578|      0|        }
11579|      0|        else {
11580|      0|            assert(ch <= MAX_UNICODE);
  ------------------
  |  Branch (11580:13): [True: 0, False: 0]
  ------------------
11581|      0|            if ((ends - s) < 4 ||
  ------------------
  |  Branch (11581:17): [True: 0, False: 0]
  ------------------
11582|      0|                s[0] != (0xf0 | (ch >> 18)) ||
  ------------------
  |  Branch (11582:17): [True: 0, False: 0]
  ------------------
11583|      0|                s[1] != (0x80 | ((ch >> 12) & 0x3f)) ||
  ------------------
  |  Branch (11583:17): [True: 0, False: 0]
  ------------------
11584|      0|                s[2] != (0x80 | ((ch >> 6) & 0x3f)) ||
  ------------------
  |  Branch (11584:17): [True: 0, False: 0]
  ------------------
11585|      0|                s[3] != (0x80 | (ch & 0x3f)))
  ------------------
  |  Branch (11585:17): [True: 0, False: 0]
  ------------------
11586|      0|            {
11587|      0|                return 0;
11588|      0|            }
11589|      0|            s += 4;
11590|      0|        }
11591|      0|    }
11592|      0|    return s == ends;
11593|      0|}
_PyUnicode_EqualToASCIIString:
11597|  2.99M|{
11598|  2.99M|    size_t len;
11599|  2.99M|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (11599:5): [True: 2.99M, False: 0]
  ------------------
11600|  2.99M|    assert(str);
  ------------------
  |  Branch (11600:5): [True: 2.99M, False: 0]
  ------------------
11601|  2.99M|#ifndef NDEBUG
11602|  18.9M|    for (const char *p = str; *p; p++) {
  ------------------
  |  Branch (11602:31): [True: 15.9M, False: 2.99M]
  ------------------
11603|  15.9M|        assert((unsigned char)*p < 128);
  ------------------
  |  Branch (11603:9): [True: 15.9M, False: 0]
  ------------------
11604|  15.9M|    }
11605|  2.99M|#endif
11606|  2.99M|    if (!PyUnicode_IS_ASCII(unicode))
  ------------------
  |  |  227|  2.99M|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.99M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.99M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (11606:9): [True: 284k, False: 2.70M]
  ------------------
11607|   284k|        return 0;
11608|  2.70M|    len = (size_t)PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  2.70M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.70M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.70M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11609|  2.70M|    return strlen(str) == len &&
  ------------------
  |  Branch (11609:12): [True: 197k, False: 2.50M]
  ------------------
11610|   197k|           memcmp(PyUnicode_1BYTE_DATA(unicode), str, len) == 0;
  ------------------
  |  |  291|   197k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   197k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (11610:12): [True: 60.6k, False: 136k]
  ------------------
11611|  2.99M|}
PyUnicode_RichCompare:
11615|  13.5M|{
11616|  13.5M|    int result;
11617|       |
11618|  13.5M|    if (!PyUnicode_Check(left) || !PyUnicode_Check(right))
  ------------------
  |  |  103|  13.5M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  27.1M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyUnicode_Check(left) || !PyUnicode_Check(right))
  ------------------
  |  |  103|  13.5M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  13.5M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (11618:9): [True: 0, False: 13.5M]
  |  Branch (11618:35): [True: 5.70k, False: 13.5M]
  ------------------
11619|  5.70k|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|  5.70k|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|  5.70k|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
11620|       |
11621|  13.5M|    if (left == right) {
  ------------------
  |  Branch (11621:9): [True: 33, False: 13.5M]
  ------------------
11622|     33|        switch (op) {
11623|     24|        case Py_EQ:
  ------------------
  |  |  654|     24|#define Py_EQ 2
  ------------------
  |  Branch (11623:9): [True: 24, False: 9]
  ------------------
11624|     24|        case Py_LE:
  ------------------
  |  |  653|     24|#define Py_LE 1
  ------------------
  |  Branch (11624:9): [True: 0, False: 33]
  ------------------
11625|     24|        case Py_GE:
  ------------------
  |  |  657|     24|#define Py_GE 5
  ------------------
  |  Branch (11625:9): [True: 0, False: 33]
  ------------------
11626|       |            /* a string is equal to itself */
11627|     24|            Py_RETURN_TRUE;
  ------------------
  |  |   44|     24|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|     24|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11628|      9|        case Py_NE:
  ------------------
  |  |  655|      9|#define Py_NE 3
  ------------------
  |  Branch (11628:9): [True: 9, False: 24]
  ------------------
11629|      9|        case Py_LT:
  ------------------
  |  |  652|      9|#define Py_LT 0
  ------------------
  |  Branch (11629:9): [True: 0, False: 33]
  ------------------
11630|      9|        case Py_GT:
  ------------------
  |  |  656|      9|#define Py_GT 4
  ------------------
  |  Branch (11630:9): [True: 0, False: 33]
  ------------------
11631|      9|            Py_RETURN_FALSE;
  ------------------
  |  |   45|      9|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      9|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11632|      0|        default:
  ------------------
  |  Branch (11632:9): [True: 0, False: 33]
  ------------------
11633|      0|            PyErr_BadArgument();
11634|      0|            return NULL;
11635|     33|        }
11636|     33|    }
11637|  13.5M|    else if (op == Py_EQ || op == Py_NE) {
  ------------------
  |  |  654|  27.1M|#define Py_EQ 2
  ------------------
                  else if (op == Py_EQ || op == Py_NE) {
  ------------------
  |  |  655|  12.9M|#define Py_NE 3
  ------------------
  |  Branch (11637:14): [True: 603k, False: 12.9M]
  |  Branch (11637:29): [True: 20, False: 12.9M]
  ------------------
11638|   603k|        result = unicode_eq(left, right);
11639|   603k|        result ^= (op == Py_NE);
  ------------------
  |  |  655|   603k|#define Py_NE 3
  ------------------
11640|   603k|        return PyBool_FromLong(result);
11641|   603k|    }
11642|  12.9M|    else {
11643|  12.9M|        result = unicode_compare(left, right);
11644|  12.9M|        Py_RETURN_RICHCOMPARE(result, 0, op);
  ------------------
  |  |  674|  12.9M|    do {                                                                    \
  |  |  675|  12.9M|        switch (op) {                                                       \
  |  |  676|      0|        case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  654|      0|#define Py_EQ 2
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (676:9): [True: 0, False: 12.9M]
  |  |  |  Branch (676:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  677|      0|        case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  655|      0|#define Py_NE 3
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (677:9): [True: 0, False: 12.9M]
  |  |  |  Branch (677:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  678|  12.9M|        case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  652|  12.9M|#define Py_LT 0
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|  7.55M|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  7.55M|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  7.55M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  7.55M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|  5.39M|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|  5.39M|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  5.39M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  5.39M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (678:9): [True: 12.9M, False: 0]
  |  |  |  Branch (678:25): [True: 7.55M, False: 5.39M]
  |  |  ------------------
  |  |  679|  12.9M|        case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |  656|      0|#define Py_GT 4
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;   \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (679:9): [True: 0, False: 12.9M]
  |  |  |  Branch (679:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  680|      0|        case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  653|      0|#define Py_LE 1
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (680:9): [True: 0, False: 12.9M]
  |  |  |  Branch (680:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  681|      0|        case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |  657|      0|#define Py_GE 5
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE;  \
  |  |  ------------------
  |  |  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  |  |  ------------------
  |  |  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (681:9): [True: 0, False: 12.9M]
  |  |  |  Branch (681:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  682|      0|        default:                                                            \
  |  |  ------------------
  |  |  |  Branch (682:9): [True: 0, False: 12.9M]
  |  |  ------------------
  |  |  683|      0|            Py_UNREACHABLE();                                               \
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |  684|  12.9M|        }                                                                   \
  |  |  685|  12.9M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (685:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
11645|  12.9M|    }
11646|  13.5M|}
PyUnicode_Contains:
11650|  1.32k|{
11651|  1.32k|    int kind1, kind2;
11652|  1.32k|    const void *buf1, *buf2;
11653|  1.32k|    Py_ssize_t len1, len2;
11654|  1.32k|    int result;
11655|       |
11656|  1.32k|    if (!PyUnicode_Check(substr)) {
  ------------------
  |  |  103|  1.32k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.32k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (11656:9): [True: 0, False: 1.32k]
  ------------------
11657|      0|        PyErr_Format(PyExc_TypeError,
11658|      0|                     "'in <string>' requires string as left operand, not %.100s",
11659|      0|                     Py_TYPE(substr)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11660|      0|        return -1;
11661|      0|    }
11662|  1.32k|    if (ensure_unicode(str) < 0)
  ------------------
  |  |  109|  1.32k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (11662:9): [True: 0, False: 1.32k]
  ------------------
11663|      0|        return -1;
11664|       |
11665|  1.32k|    kind1 = PyUnicode_KIND(str);
  ------------------
  |  |  258|  1.32k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  2.64k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11666|  1.32k|    kind2 = PyUnicode_KIND(substr);
  ------------------
  |  |  258|  1.32k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  2.64k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.32k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11667|  1.32k|    if (kind1 < kind2)
  ------------------
  |  Branch (11667:9): [True: 3, False: 1.32k]
  ------------------
11668|      3|        return 0;
11669|  1.32k|    len1 = PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|  1.32k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11670|  1.32k|    len2 = PyUnicode_GET_LENGTH(substr);
  ------------------
  |  |  299|  1.32k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11671|  1.32k|    if (len1 < len2)
  ------------------
  |  Branch (11671:9): [True: 4, False: 1.31k]
  ------------------
11672|      4|        return 0;
11673|  1.31k|    buf1 = PyUnicode_DATA(str);
  ------------------
  |  |  284|  1.31k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11674|  1.31k|    buf2 = PyUnicode_DATA(substr);
  ------------------
  |  |  284|  1.31k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11675|  1.31k|    if (len2 == 1) {
  ------------------
  |  Branch (11675:9): [True: 1.29k, False: 23]
  ------------------
11676|  1.29k|        Py_UCS4 ch = PyUnicode_READ(kind2, buf2, 0);
  ------------------
  |  |  354|  1.29k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  1.29k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  1.29k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  1.29k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  1.29k|                   (index))
  ------------------
11677|  1.29k|        result = findchar((const char *)buf1, kind1, len1, ch, 1) != -1;
11678|  1.29k|        return result;
11679|  1.29k|    }
11680|     23|    if (kind2 != kind1) {
  ------------------
  |  Branch (11680:9): [True: 0, False: 23]
  ------------------
11681|      0|        buf2 = unicode_askind(kind2, buf2, len2, kind1);
11682|      0|        if (!buf2)
  ------------------
  |  Branch (11682:13): [True: 0, False: 0]
  ------------------
11683|      0|            return -1;
11684|      0|    }
11685|       |
11686|     23|    switch (kind1) {
11687|     23|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (11687:5): [True: 23, False: 0]
  ------------------
11688|     23|        result = ucs1lib_find(buf1, len1, buf2, len2, 0) != -1;
11689|     23|        break;
11690|      0|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (11690:5): [True: 0, False: 23]
  ------------------
11691|      0|        result = ucs2lib_find(buf1, len1, buf2, len2, 0) != -1;
11692|      0|        break;
11693|      0|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (11693:5): [True: 0, False: 23]
  ------------------
11694|      0|        result = ucs4lib_find(buf1, len1, buf2, len2, 0) != -1;
11695|      0|        break;
11696|      0|    default:
  ------------------
  |  Branch (11696:5): [True: 0, False: 23]
  ------------------
11697|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
11698|     23|    }
11699|       |
11700|     23|    assert((kind2 == kind1) == (buf2 == PyUnicode_DATA(substr)));
  ------------------
  |  Branch (11700:5): [True: 23, False: 0]
  ------------------
11701|     23|    if (kind2 != kind1)
  ------------------
  |  Branch (11701:9): [True: 0, False: 23]
  ------------------
11702|      0|        PyMem_Free((void *)buf2);
11703|       |
11704|     23|    return result;
11705|     23|}
PyUnicode_Concat:
11711|   449k|{
11712|   449k|    PyObject *result;
11713|   449k|    Py_UCS4 maxchar, maxchar2;
11714|   449k|    Py_ssize_t left_len, right_len, new_len;
11715|       |
11716|   449k|    if (ensure_unicode(left) < 0)
  ------------------
  |  |  109|   449k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (11716:9): [True: 0, False: 449k]
  ------------------
11717|      0|        return NULL;
11718|       |
11719|   449k|    if (!PyUnicode_Check(right)) {
  ------------------
  |  |  103|   449k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   449k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (11719:9): [True: 733, False: 448k]
  ------------------
11720|    733|        PyErr_Format(PyExc_TypeError,
11721|    733|            "can only concatenate str (not \"%.200s\") to str",
11722|    733|            Py_TYPE(right)->tp_name);
  ------------------
  |  |  213|    733|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    733|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    733|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11723|    733|        return NULL;
11724|    733|    }
11725|       |
11726|       |    /* Shortcuts */
11727|   448k|    PyObject *empty = _PyUnicode_GetEmpty();  // Borrowed reference
11728|   448k|    if (left == empty) {
  ------------------
  |  Branch (11728:9): [True: 33.9k, False: 414k]
  ------------------
11729|  33.9k|        return PyUnicode_FromObject(right);
11730|  33.9k|    }
11731|   414k|    if (right == empty) {
  ------------------
  |  Branch (11731:9): [True: 49.6k, False: 365k]
  ------------------
11732|  49.6k|        return PyUnicode_FromObject(left);
11733|  49.6k|    }
11734|       |
11735|   365k|    left_len = PyUnicode_GET_LENGTH(left);
  ------------------
  |  |  299|   365k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   365k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   365k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11736|   365k|    right_len = PyUnicode_GET_LENGTH(right);
  ------------------
  |  |  299|   365k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   365k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   365k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11737|   365k|    if (left_len > PY_SSIZE_T_MAX - right_len) {
  ------------------
  |  |  137|   365k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (11737:9): [True: 0, False: 365k]
  ------------------
11738|      0|        PyErr_SetString(PyExc_OverflowError,
11739|      0|                        "strings are too large to concat");
11740|      0|        return NULL;
11741|      0|    }
11742|   365k|    new_len = left_len + right_len;
11743|       |
11744|   365k|    maxchar = PyUnicode_MAX_CHAR_VALUE(left);
  ------------------
  |  |  405|   365k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   365k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   365k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11745|   365k|    maxchar2 = PyUnicode_MAX_CHAR_VALUE(right);
  ------------------
  |  |  405|   365k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   365k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   365k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11746|   365k|    maxchar = Py_MAX(maxchar, maxchar2);
  ------------------
  |  |  126|   365k|       __extension__ \
  |  |  127|   365k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   365k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   365k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   365k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   365k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 13.4k, False: 351k]
  |  |  ------------------
  ------------------
11747|       |
11748|       |    /* Concat the two Unicode strings */
11749|   365k|    result = PyUnicode_New(new_len, maxchar);
11750|   365k|    if (result == NULL)
  ------------------
  |  Branch (11750:9): [True: 0, False: 365k]
  ------------------
11751|      0|        return NULL;
11752|   365k|    _PyUnicode_FastCopyCharacters(result, 0, left, 0, left_len);
11753|   365k|    _PyUnicode_FastCopyCharacters(result, left_len, right, 0, right_len);
11754|   365k|    assert(_PyUnicode_CheckConsistency(result, 1));
  ------------------
  |  Branch (11754:5): [True: 365k, False: 0]
  ------------------
11755|   365k|    return result;
11756|   365k|}
PyUnicode_Append:
11760|  15.1k|{
11761|  15.1k|    PyObject *left, *res;
11762|  15.1k|    Py_UCS4 maxchar, maxchar2;
11763|  15.1k|    Py_ssize_t left_len, right_len, new_len;
11764|       |
11765|  15.1k|    if (p_left == NULL) {
  ------------------
  |  Branch (11765:9): [True: 0, False: 15.1k]
  ------------------
11766|      0|        if (!PyErr_Occurred())
  ------------------
  |  Branch (11766:13): [True: 0, False: 0]
  ------------------
11767|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
11768|      0|        return;
11769|      0|    }
11770|  15.1k|    left = *p_left;
11771|  15.1k|    if (right == NULL || left == NULL
  ------------------
  |  Branch (11771:9): [True: 0, False: 15.1k]
  |  Branch (11771:26): [True: 0, False: 15.1k]
  ------------------
11772|  15.1k|        || !PyUnicode_Check(left) || !PyUnicode_Check(right)) {
  ------------------
  |  |  103|  15.1k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  30.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                      || !PyUnicode_Check(left) || !PyUnicode_Check(right)) {
  ------------------
  |  |  103|  15.1k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  15.1k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (11772:12): [True: 0, False: 15.1k]
  |  Branch (11772:38): [True: 0, False: 15.1k]
  ------------------
11773|      0|        if (!PyErr_Occurred())
  ------------------
  |  Branch (11773:13): [True: 0, False: 0]
  ------------------
11774|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
11775|      0|        goto error;
11776|      0|    }
11777|       |
11778|       |    /* Shortcuts */
11779|  15.1k|    PyObject *empty = _PyUnicode_GetEmpty();  // Borrowed reference
11780|  15.1k|    if (left == empty) {
  ------------------
  |  Branch (11780:9): [True: 16, False: 15.1k]
  ------------------
11781|     16|        Py_DECREF(left);
  ------------------
  |  |  430|     16|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11782|     16|        *p_left = Py_NewRef(right);
  ------------------
  |  |  550|     16|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11783|     16|        return;
11784|     16|    }
11785|  15.1k|    if (right == empty) {
  ------------------
  |  Branch (11785:9): [True: 0, False: 15.1k]
  ------------------
11786|      0|        return;
11787|      0|    }
11788|       |
11789|  15.1k|    left_len = PyUnicode_GET_LENGTH(left);
  ------------------
  |  |  299|  15.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11790|  15.1k|    right_len = PyUnicode_GET_LENGTH(right);
  ------------------
  |  |  299|  15.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11791|  15.1k|    if (left_len > PY_SSIZE_T_MAX - right_len) {
  ------------------
  |  |  137|  15.1k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (11791:9): [True: 0, False: 15.1k]
  ------------------
11792|      0|        PyErr_SetString(PyExc_OverflowError,
11793|      0|                        "strings are too large to concat");
11794|      0|        goto error;
11795|      0|    }
11796|  15.1k|    new_len = left_len + right_len;
11797|       |
11798|  15.1k|    if (_PyUnicode_IsModifiable(left)
  ------------------
  |  Branch (11798:9): [True: 15.0k, False: 62]
  ------------------
11799|  15.1k|        && PyUnicode_CheckExact(right)
  ------------------
  |  |  104|  15.0k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  30.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  15.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  15.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 15.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11800|  30.1k|        && PyUnicode_KIND(right) <= PyUnicode_KIND(left)
  ------------------
  |  |  258|  15.0k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  30.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 15.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      && PyUnicode_KIND(right) <= PyUnicode_KIND(left)
  ------------------
  |  |  258|  15.0k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  30.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 15.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (11800:12): [True: 14.9k, False: 62]
  ------------------
11801|       |        /* Don't resize for ascii += latin1. Convert ascii to latin1 requires
11802|       |           to change the structure size, but characters are stored just after
11803|       |           the structure, and so it requires to move all characters which is
11804|       |           not so different than duplicating the string. */
11805|  14.9k|        && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right)))
  ------------------
  |  |  227|  29.9k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 10.7k, False: 4.19k]
  |  |  ------------------
  ------------------
                      && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right)))
  ------------------
  |  |  227|  10.7k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (11805:42): [True: 465, False: 10.3k]
  ------------------
11806|  14.5k|    {
11807|       |        /* append inplace */
11808|  14.5k|        if (unicode_resize(p_left, new_len) != 0)
  ------------------
  |  Branch (11808:13): [True: 0, False: 14.5k]
  ------------------
11809|      0|            goto error;
11810|       |
11811|       |        /* copy 'right' into the newly allocated area of 'left' */
11812|  14.5k|        _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len);
11813|  14.5k|    }
11814|    589|    else {
11815|    589|        maxchar = PyUnicode_MAX_CHAR_VALUE(left);
  ------------------
  |  |  405|    589|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    589|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    589|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11816|    589|        maxchar2 = PyUnicode_MAX_CHAR_VALUE(right);
  ------------------
  |  |  405|    589|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    589|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    589|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11817|    589|        maxchar = Py_MAX(maxchar, maxchar2);
  ------------------
  |  |  126|    589|       __extension__ \
  |  |  127|    589|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|    589|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|    589|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|    589|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|    589|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 589]
  |  |  ------------------
  ------------------
11818|       |
11819|       |        /* Concat the two Unicode strings */
11820|    589|        res = PyUnicode_New(new_len, maxchar);
11821|    589|        if (res == NULL)
  ------------------
  |  Branch (11821:13): [True: 0, False: 589]
  ------------------
11822|      0|            goto error;
11823|    589|        _PyUnicode_FastCopyCharacters(res, 0, left, 0, left_len);
11824|    589|        _PyUnicode_FastCopyCharacters(res, left_len, right, 0, right_len);
11825|    589|        Py_DECREF(left);
  ------------------
  |  |  430|    589|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    589|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    589|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11826|    589|        *p_left = res;
11827|    589|    }
11828|  15.1k|    assert(_PyUnicode_CheckConsistency(*p_left, 1));
  ------------------
  |  Branch (11828:5): [True: 15.1k, False: 0]
  ------------------
11829|  15.1k|    return;
11830|       |
11831|  15.1k|error:
11832|       |    Py_CLEAR(*p_left);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
11833|      0|}
_PyUnicode_ScanIdentifier:
12512|  97.3k|{
12513|  97.3k|    Py_ssize_t i;
12514|  97.3k|    Py_ssize_t len = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|  97.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12515|  97.3k|    if (len == 0) {
  ------------------
  |  Branch (12515:9): [True: 0, False: 97.3k]
  ------------------
12516|       |        /* an empty string is not a valid identifier */
12517|      0|        return 0;
12518|      0|    }
12519|       |
12520|  97.3k|    int kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|  97.3k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   194k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 97.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12521|  97.3k|    const void *data = PyUnicode_DATA(self);
  ------------------
  |  |  284|  97.3k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12522|  97.3k|    Py_UCS4 ch = PyUnicode_READ(kind, data, 0);
  ------------------
  |  |  354|  97.3k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  97.3k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  97.3k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  97.3k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  97.3k|                   (index))
  ------------------
12523|       |    /* PEP 3131 says that the first character must be in
12524|       |       XID_Start and subsequent characters in XID_Continue,
12525|       |       and for the ASCII range, the 2.x rules apply (i.e
12526|       |       start with letters and underscore, continue with
12527|       |       letters, digits, underscore). However, given the current
12528|       |       definition of XID_Start and XID_Continue, it is sufficient
12529|       |       to check just for these, except that _ must be allowed
12530|       |       as starting an identifier.  */
12531|  97.3k|    if (!_PyUnicode_IsXidStart(ch) && ch != 0x5F /* LOW LINE */) {
  ------------------
  |  Branch (12531:9): [True: 23.1k, False: 74.1k]
  |  Branch (12531:39): [True: 202, False: 22.9k]
  ------------------
12532|    202|        return 0;
12533|    202|    }
12534|       |
12535|  1.06M|    for (i = 1; i < len; i++) {
  ------------------
  |  Branch (12535:17): [True: 966k, False: 96.9k]
  ------------------
12536|   966k|        ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|   966k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   966k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   966k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   966k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   966k|                   (index))
  ------------------
12537|   966k|        if (!_PyUnicode_IsXidContinue(ch)) {
  ------------------
  |  Branch (12537:13): [True: 129, False: 966k]
  ------------------
12538|    129|            return i;
12539|    129|        }
12540|   966k|    }
12541|  96.9k|    return i;
12542|  97.1k|}
PyUnicode_IsIdentifier:
12546|     73|{
12547|     73|    Py_ssize_t i = _PyUnicode_ScanIdentifier(self);
12548|     73|    Py_ssize_t len = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|     73|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     73|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     73|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12549|       |    /* an empty string is not a valid identifier */
12550|     73|    return len && i == len;
  ------------------
  |  Branch (12550:12): [True: 73, False: 0]
  |  Branch (12550:19): [True: 73, False: 0]
  ------------------
12551|     73|}
_PyUnicode_XStrip:
12681|  4.91k|{
12682|  4.91k|    const void *data;
12683|  4.91k|    int kind;
12684|  4.91k|    Py_ssize_t i, j, len;
12685|  4.91k|    BLOOM_MASK sepmask;
  ------------------
  |  |  920|  4.91k|#define BLOOM_MASK unsigned long
  ------------------
12686|  4.91k|    Py_ssize_t seplen;
12687|       |
12688|  4.91k|    kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|  4.91k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  9.82k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 4.91k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12689|  4.91k|    data = PyUnicode_DATA(self);
  ------------------
  |  |  284|  4.91k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12690|  4.91k|    len = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|  4.91k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12691|  4.91k|    seplen = PyUnicode_GET_LENGTH(sepobj);
  ------------------
  |  |  299|  4.91k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12692|  4.91k|    sepmask = make_bloom_mask(PyUnicode_KIND(sepobj),
  ------------------
  |  |  258|  4.91k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  9.82k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 4.91k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12693|  4.91k|                              PyUnicode_DATA(sepobj),
  ------------------
  |  |  284|  4.91k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.91k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.91k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12694|  4.91k|                              seplen);
12695|       |
12696|      0|    i = 0;
12697|  4.91k|    if (striptype != RIGHTSTRIP) {
  ------------------
  |  |12670|  4.91k|#define RIGHTSTRIP 1
  ------------------
  |  Branch (12697:9): [True: 1, False: 4.91k]
  ------------------
12698|      2|        while (i < len) {
  ------------------
  |  Branch (12698:16): [True: 1, False: 1]
  ------------------
12699|      1|            Py_UCS4 ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|      1|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      1|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      1|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      1|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      1|                   (index))
  ------------------
12700|      1|            if (!BLOOM(sepmask, ch))
  ------------------
  |  |  924|      1|#define BLOOM(mask, ch)     ((mask &  (1UL << ((ch) & (BLOOM_WIDTH - 1)))))
  |  |  ------------------
  |  |  |  |  913|      1|#define BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (12700:17): [True: 0, False: 1]
  ------------------
12701|      0|                break;
12702|      1|            if (PyUnicode_FindChar(sepobj, ch, 0, seplen, 1) < 0)
  ------------------
  |  Branch (12702:17): [True: 0, False: 1]
  ------------------
12703|      0|                break;
12704|      1|            i++;
12705|      1|        }
12706|      1|    }
12707|       |
12708|  4.91k|    j = len;
12709|  4.91k|    if (striptype != LEFTSTRIP) {
  ------------------
  |  |12669|  4.91k|#define LEFTSTRIP 0
  ------------------
  |  Branch (12709:9): [True: 4.91k, False: 1]
  ------------------
12710|  4.91k|        j--;
12711|  4.91k|        while (j >= i) {
  ------------------
  |  Branch (12711:16): [True: 4.91k, False: 0]
  ------------------
12712|  4.91k|            Py_UCS4 ch = PyUnicode_READ(kind, data, j);
  ------------------
  |  |  354|  4.91k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  4.91k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  4.91k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  4.91k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  4.91k|                   (index))
  ------------------
12713|  4.91k|            if (!BLOOM(sepmask, ch))
  ------------------
  |  |  924|  4.91k|#define BLOOM(mask, ch)     ((mask &  (1UL << ((ch) & (BLOOM_WIDTH - 1)))))
  |  |  ------------------
  |  |  |  |  913|  4.91k|#define BLOOM_WIDTH 64
  |  |  ------------------
  ------------------
  |  Branch (12713:17): [True: 3.10k, False: 1.80k]
  ------------------
12714|  3.10k|                break;
12715|  1.80k|            if (PyUnicode_FindChar(sepobj, ch, 0, seplen, 1) < 0)
  ------------------
  |  Branch (12715:17): [True: 1.80k, False: 4]
  ------------------
12716|  1.80k|                break;
12717|      4|            j--;
12718|      4|        }
12719|       |
12720|  4.91k|        j++;
12721|  4.91k|    }
12722|       |
12723|  4.91k|    return PyUnicode_Substring(self, i, j);
12724|  4.91k|}
_PyUnicode_BinarySlice:
12728|   423k|{
12729|   423k|    assert(PyUnicode_CheckExact(container));
  ------------------
  |  Branch (12729:5): [True: 423k, False: 0]
  ------------------
12730|   423k|    Py_ssize_t len = PyUnicode_GET_LENGTH(container);
  ------------------
  |  |  299|   423k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   423k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   423k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12731|   423k|    Py_ssize_t istart, istop;
12732|   423k|    if (!_PyEval_UnpackIndices(start_o, stop_o, len, &istart, &istop)) {
  ------------------
  |  Branch (12732:9): [True: 0, False: 423k]
  ------------------
12733|      0|        return NULL;
12734|      0|    }
12735|   423k|    return PyUnicode_Substring(container, istart, istop);
12736|   423k|}
PyUnicode_Substring:
12740|   447k|{
12741|   447k|    const unsigned char *data;
12742|   447k|    int kind;
12743|   447k|    Py_ssize_t length;
12744|       |
12745|   447k|    length = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|   447k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   447k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   447k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12746|   447k|    end = Py_MIN(end, length);
  ------------------
  |  |  120|   447k|       __extension__ \
  |  |  121|   447k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   447k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|   447k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   447k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|   447k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 178k, False: 268k]
  |  |  ------------------
  ------------------
12747|       |
12748|   447k|    if (start == 0 && end == length)
  ------------------
  |  Branch (12748:9): [True: 265k, False: 181k]
  |  Branch (12748:23): [True: 90.1k, False: 175k]
  ------------------
12749|  90.1k|        return unicode_result_unchanged(self);
12750|       |
12751|   356k|    if (start < 0 || end < 0) {
  ------------------
  |  Branch (12751:9): [True: 0, False: 356k]
  |  Branch (12751:22): [True: 0, False: 356k]
  ------------------
12752|      0|        PyErr_SetString(PyExc_IndexError, "string index out of range");
12753|      0|        return NULL;
12754|      0|    }
12755|   356k|    if (start >= length || end < start)
  ------------------
  |  Branch (12755:9): [True: 35.5k, False: 321k]
  |  Branch (12755:28): [True: 0, False: 321k]
  ------------------
12756|  35.5k|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|  35.5k|    do {                             \
  |  |  380|  35.5k|        return _PyUnicode_GetEmpty();\
  |  |  381|  35.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
12757|       |
12758|   321k|    length = end - start;
12759|   321k|    if (PyUnicode_IS_ASCII(self)) {
  ------------------
  |  |  227|   321k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   321k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   321k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 13.2k, False: 308k]
  |  |  ------------------
  ------------------
12760|  13.2k|        data = PyUnicode_1BYTE_DATA(self);
  ------------------
  |  |  291|  13.2k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  13.2k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
12761|  13.2k|        return _PyUnicode_FromASCII((const char*)(data + start), length);
12762|  13.2k|    }
12763|   308k|    else {
12764|   308k|        kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|   308k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   616k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 308k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12765|   308k|        data = PyUnicode_1BYTE_DATA(self);
  ------------------
  |  |  291|   308k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   308k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
12766|   308k|        return PyUnicode_FromKindAndData(kind,
12767|   308k|                                         data + kind * start,
12768|   308k|                                         length);
12769|   308k|    }
12770|   321k|}
_PyUnicode_Repeat:
12913|  12.6k|{
12914|  12.6k|    PyObject *u;
12915|  12.6k|    Py_ssize_t nchars, n;
12916|       |
12917|  12.6k|    if (len < 1)
  ------------------
  |  Branch (12917:9): [True: 251, False: 12.3k]
  ------------------
12918|    251|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|    251|    do {                             \
  |  |  380|    251|        return _PyUnicode_GetEmpty();\
  |  |  381|    251|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
12919|       |
12920|       |    /* no repeat, return original string */
12921|  12.3k|    if (len == 1)
  ------------------
  |  Branch (12921:9): [True: 2.17k, False: 10.2k]
  ------------------
12922|  2.17k|        return unicode_result_unchanged(str);
12923|       |
12924|  10.2k|    if (PyUnicode_GET_LENGTH(str) > PY_SSIZE_T_MAX / len) {
  ------------------
  |  |  299|  10.2k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyUnicode_GET_LENGTH(str) > PY_SSIZE_T_MAX / len) {
  ------------------
  |  |  137|  10.2k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (12924:9): [True: 0, False: 10.2k]
  ------------------
12925|      0|        PyErr_SetString(PyExc_OverflowError,
12926|      0|                        "repeated string is too long");
12927|      0|        return NULL;
12928|      0|    }
12929|  10.2k|    nchars = len * PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|  10.2k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12930|       |
12931|  10.2k|    u = PyUnicode_New(nchars, PyUnicode_MAX_CHAR_VALUE(str));
  ------------------
  |  |  405|  10.2k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12932|  10.2k|    if (!u)
  ------------------
  |  Branch (12932:9): [True: 0, False: 10.2k]
  ------------------
12933|      0|        return NULL;
12934|  10.2k|    assert(PyUnicode_KIND(u) == PyUnicode_KIND(str));
  ------------------
  |  Branch (12934:5): [True: 10.2k, False: 0]
  |  Branch (12934:5): [True: 10.2k, False: 0]
  |  Branch (12934:5): [True: 10.2k, False: 0]
  ------------------
12935|       |
12936|  10.2k|    if (PyUnicode_GET_LENGTH(str) == 1) {
  ------------------
  |  |  299|  10.2k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12936:9): [True: 2.60k, False: 7.62k]
  ------------------
12937|  2.60k|        int kind = PyUnicode_KIND(str);
  ------------------
  |  |  258|  2.60k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  5.20k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2.60k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12938|  2.60k|        Py_UCS4 fill_char = PyUnicode_READ(kind, PyUnicode_DATA(str), 0);
  ------------------
  |  |  354|  2.60k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  2.60k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  2.60k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  2.60k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  2.60k|                   (index))
  ------------------
12939|  2.60k|        if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (12939:13): [True: 2.32k, False: 280]
  ------------------
12940|  2.32k|            void *to = PyUnicode_DATA(u);
  ------------------
  |  |  284|  2.32k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12941|  2.32k|            memset(to, (unsigned char)fill_char, len);
12942|  2.32k|        }
12943|    280|        else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (12943:18): [True: 236, False: 44]
  ------------------
12944|    236|            Py_UCS2 *ucs2 = PyUnicode_2BYTE_DATA(u);
  ------------------
  |  |  292|    236|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    236|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
12945|    801|            for (n = 0; n < len; ++n)
  ------------------
  |  Branch (12945:25): [True: 565, False: 236]
  ------------------
12946|    565|                ucs2[n] = fill_char;
12947|    236|        } else {
12948|     44|            Py_UCS4 *ucs4 = PyUnicode_4BYTE_DATA(u);
  ------------------
  |  |  293|     44|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     44|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
12949|     44|            assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (12949:13): [True: 44, False: 0]
  ------------------
12950|  8.99k|            for (n = 0; n < len; ++n)
  ------------------
  |  Branch (12950:25): [True: 8.94k, False: 44]
  ------------------
12951|  8.94k|                ucs4[n] = fill_char;
12952|     44|        }
12953|  2.60k|    }
12954|  7.62k|    else {
12955|  7.62k|        Py_ssize_t char_size = PyUnicode_KIND(str);
  ------------------
  |  |  258|  7.62k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  15.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 7.62k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12956|  7.62k|        char *to = (char *) PyUnicode_DATA(u);
  ------------------
  |  |  284|  7.62k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12957|  7.62k|        _PyBytes_RepeatBuffer(to, nchars * char_size, PyUnicode_DATA(str),
  ------------------
  |  |  284|  7.62k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12958|  7.62k|            PyUnicode_GET_LENGTH(str) * char_size);
  ------------------
  |  |  299|  7.62k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12959|  7.62k|    }
12960|       |
12961|  10.2k|    assert(_PyUnicode_CheckConsistency(u, 1));
  ------------------
  |  Branch (12961:5): [True: 10.2k, False: 0]
  ------------------
12962|  10.2k|    return u;
12963|  10.2k|}
PyUnicode_Replace:
12970|  45.9k|{
12971|  45.9k|    if (ensure_unicode(str) < 0 || ensure_unicode(substr) < 0 ||
  ------------------
  |  |  109|  45.9k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
                  if (ensure_unicode(str) < 0 || ensure_unicode(substr) < 0 ||
  ------------------
  |  |  109|  45.9k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (12971:9): [True: 0, False: 45.9k]
  |  Branch (12971:36): [True: 0, False: 45.9k]
  ------------------
12972|  45.9k|            ensure_unicode(replstr) < 0)
  ------------------
  |  |  109|  45.9k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (12972:13): [True: 0, False: 45.9k]
  ------------------
12973|      0|        return NULL;
12974|  45.9k|    return replace(str, substr, replstr, maxcount);
12975|  45.9k|}
PyUnicode_RPartition:
13320|  1.15k|{
13321|  1.15k|    PyObject* out;
13322|  1.15k|    int kind1, kind2;
13323|  1.15k|    const void *buf1, *buf2;
13324|  1.15k|    Py_ssize_t len1, len2;
13325|       |
13326|  1.15k|    if (ensure_unicode(str_obj) < 0 || ensure_unicode(sep_obj) < 0)
  ------------------
  |  |  109|  1.15k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
                  if (ensure_unicode(str_obj) < 0 || ensure_unicode(sep_obj) < 0)
  ------------------
  |  |  109|  1.15k|#define ensure_unicode _PyUnicode_EnsureUnicode
  ------------------
  |  Branch (13326:9): [True: 0, False: 1.15k]
  |  Branch (13326:40): [True: 0, False: 1.15k]
  ------------------
13327|      0|        return NULL;
13328|       |
13329|  1.15k|    kind1 = PyUnicode_KIND(str_obj);
  ------------------
  |  |  258|  1.15k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  2.31k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.15k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13330|  1.15k|    kind2 = PyUnicode_KIND(sep_obj);
  ------------------
  |  |  258|  1.15k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  2.31k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.15k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13331|  1.15k|    len1 = PyUnicode_GET_LENGTH(str_obj);
  ------------------
  |  |  299|  1.15k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13332|  1.15k|    len2 = PyUnicode_GET_LENGTH(sep_obj);
  ------------------
  |  |  299|  1.15k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13333|  1.15k|    if (kind1 < kind2 || len1 < len2) {
  ------------------
  |  Branch (13333:9): [True: 0, False: 1.15k]
  |  Branch (13333:26): [True: 0, False: 1.15k]
  ------------------
13334|      0|        PyObject *empty = _PyUnicode_GetEmpty();  // Borrowed reference
13335|      0|        return PyTuple_Pack(3, empty, empty, str_obj);
13336|      0|    }
13337|  1.15k|    buf1 = PyUnicode_DATA(str_obj);
  ------------------
  |  |  284|  1.15k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13338|  1.15k|    buf2 = PyUnicode_DATA(sep_obj);
  ------------------
  |  |  284|  1.15k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13339|  1.15k|    if (kind2 != kind1) {
  ------------------
  |  Branch (13339:9): [True: 0, False: 1.15k]
  ------------------
13340|      0|        buf2 = unicode_askind(kind2, buf2, len2, kind1);
13341|      0|        if (!buf2)
  ------------------
  |  Branch (13341:13): [True: 0, False: 0]
  ------------------
13342|      0|            return NULL;
13343|      0|    }
13344|       |
13345|  1.15k|    switch (kind1) {
13346|  1.15k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (13346:5): [True: 1.15k, False: 0]
  ------------------
13347|  1.15k|        if (PyUnicode_IS_ASCII(str_obj) && PyUnicode_IS_ASCII(sep_obj))
  ------------------
  |  |  227|  2.31k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 1.15k, False: 0]
  |  |  ------------------
  ------------------
                      if (PyUnicode_IS_ASCII(str_obj) && PyUnicode_IS_ASCII(sep_obj))
  ------------------
  |  |  227|  1.15k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 1.15k, False: 0]
  |  |  ------------------
  ------------------
13348|  1.15k|            out = asciilib_rpartition(str_obj, buf1, len1, sep_obj, buf2, len2);
13349|      0|        else
13350|      0|            out = ucs1lib_rpartition(str_obj, buf1, len1, sep_obj, buf2, len2);
13351|  1.15k|        break;
13352|      0|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (13352:5): [True: 0, False: 1.15k]
  ------------------
13353|      0|        out = ucs2lib_rpartition(str_obj, buf1, len1, sep_obj, buf2, len2);
13354|      0|        break;
13355|      0|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (13355:5): [True: 0, False: 1.15k]
  ------------------
13356|      0|        out = ucs4lib_rpartition(str_obj, buf1, len1, sep_obj, buf2, len2);
13357|      0|        break;
13358|      0|    default:
  ------------------
  |  Branch (13358:5): [True: 0, False: 1.15k]
  ------------------
13359|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
13360|  1.15k|    }
13361|       |
13362|  1.15k|    assert((kind2 == kind1) == (buf2 == PyUnicode_DATA(sep_obj)));
  ------------------
  |  Branch (13362:5): [True: 1.15k, False: 0]
  ------------------
13363|  1.15k|    if (kind2 != kind1)
  ------------------
  |  Branch (13363:9): [True: 0, False: 1.15k]
  ------------------
13364|      0|        PyMem_Free((void *)buf2);
13365|       |
13366|  1.15k|    return out;
13367|  1.15k|}
_PyUnicode_ExactDealloc:
14418|  1.70M|{
14419|  1.70M|    assert(PyUnicode_CheckExact(op));
  ------------------
  |  Branch (14419:5): [True: 1.70M, False: 0]
  ------------------
14420|  1.70M|    unicode_dealloc(op);
14421|  1.70M|}
_PyUnicode_InitState:
14514|      2|{
14515|      2|    if (!_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (14515:9): [True: 0, False: 2]
  ------------------
14516|      0|        return;
14517|      0|    }
14518|      2|    _init_global_state();
14519|      2|}
_PyUnicode_InitGlobalObjects:
14524|      2|{
14525|      2|    if (_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (14525:9): [True: 2, False: 0]
  ------------------
14526|      2|        PyStatus status = init_global_interned_strings(interp);
14527|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
14528|      0|            return status;
14529|      0|        }
14530|      2|    }
14531|      2|    assert(INTERNED_STRINGS);
  ------------------
  |  Branch (14531:5): [True: 2, False: 0]
  ------------------
14532|       |
14533|      2|    if (init_interned_dict(interp)) {
  ------------------
  |  Branch (14533:9): [True: 0, False: 2]
  ------------------
14534|      0|        PyErr_Clear();
14535|      0|        return _PyStatus_ERR("failed to create interned dict");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
14536|      0|    }
14537|       |
14538|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
14539|      2|}
_PyUnicode_InitTypes:
14544|      2|{
14545|      2|    if (_PyStaticType_InitBuiltin(interp, &EncodingMapType) < 0) {
  ------------------
  |  Branch (14545:9): [True: 0, False: 2]
  ------------------
14546|      0|        goto error;
14547|      0|    }
14548|      2|    if (_PyStaticType_InitBuiltin(interp, &PyFieldNameIter_Type) < 0) {
  ------------------
  |  Branch (14548:9): [True: 0, False: 2]
  ------------------
14549|      0|        goto error;
14550|      0|    }
14551|      2|    if (_PyStaticType_InitBuiltin(interp, &PyFormatterIter_Type) < 0) {
  ------------------
  |  Branch (14551:9): [True: 0, False: 2]
  ------------------
14552|      0|        goto error;
14553|      0|    }
14554|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
14555|       |
14556|      0|error:
14557|      0|    return _PyStatus_ERR("Can't initialize unicode types");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
14558|      2|}
_PyUnicode_InternStatic:
14601|  2.27k|{
14602|       |    // This should only be called as part of runtime initialization
14603|  2.27k|    assert(!Py_IsInitialized());
  ------------------
  |  Branch (14603:5): [True: 2.27k, False: 0]
  ------------------
14604|       |
14605|  2.27k|    *p = intern_static(interp, *p);
14606|       |    assert(*p);
  ------------------
  |  Branch (14606:5): [True: 2.27k, False: 0]
  ------------------
14607|  2.27k|}
_PyUnicode_InternImmortal:
14824|   495k|{
14825|   495k|    *p = intern_common(interp, *p, 1);
14826|       |    assert(*p);
  ------------------
  |  Branch (14826:5): [True: 495k, False: 0]
  ------------------
14827|   495k|}
_PyUnicode_InternMortal:
14831|  2.82M|{
14832|  2.82M|    *p = intern_common(interp, *p, 0);
14833|       |    assert(*p);
  ------------------
  |  Branch (14833:5): [True: 2.82M, False: 0]
  ------------------
14834|  2.82M|}
PyUnicode_InternFromString:
14862|  21.3k|{
14863|  21.3k|    PyObject *s = PyUnicode_FromString(cp);
14864|  21.3k|    if (s == NULL) {
  ------------------
  |  Branch (14864:9): [True: 0, False: 21.3k]
  ------------------
14865|      0|        return NULL;
14866|      0|    }
14867|  21.3k|    PyInterpreterState *interp = _PyInterpreterState_GET();
14868|  21.3k|    _PyUnicode_InternMortal(interp, &s);
14869|  21.3k|    return s;
14870|  21.3k|}
_PyUnicode_InitEncodings:
15328|      2|{
15329|      2|    PyStatus status = _PyCodec_InitRegistry(tstate->interp);
15330|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
15331|      0|        return status;
15332|      0|    }
15333|      2|    status = init_fs_encoding(tstate);
15334|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
15335|      0|        return status;
15336|      0|    }
15337|       |
15338|      2|    return init_stdio_encoding(tstate->interp);
15339|      2|}
unicodeobject.c:get_interned_dict:
  216|   225k|{
  217|   225k|    return _Py_INTERP_CACHED_OBJECT(interp, interned_strings);
  ------------------
  |  |   22|   225k|    (interp)->cached_objects.NAME
  ------------------
  218|   225k|}
unicodeobject.c:_PyUnicode_UTF8:
  118|   104M|{
  119|   104M|    return FT_ATOMIC_LOAD_PTR_ACQUIRE(_PyCompactUnicodeObject_CAST(op)->utf8);
  ------------------
  |  |  150|   314M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  |  |  Branch (150:43): [True: 104M, False: 0]
  |  |  ------------------
  ------------------
  120|   104M|}
unicodeobject.c:_PyUnicode_HAS_UTF8_MEMORY:
  181|  23.5M|{
  182|  23.5M|    return (!PyUnicode_IS_COMPACT_ASCII(op)
  ------------------
  |  |  241|  47.1M|#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  23.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (182:13): [True: 21.1M, False: 2.42M]
  ------------------
  183|  21.1M|            && _PyUnicode_UTF8(op) != NULL
  ------------------
  |  Branch (183:16): [True: 14.0k, False: 21.1M]
  ------------------
  184|  14.0k|            && _PyUnicode_UTF8(op) != PyUnicode_DATA(op));
  ------------------
  |  |  284|  14.0k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (184:16): [True: 14.0k, False: 0]
  ------------------
  185|  23.5M|}
unicodeobject.c:PyUnicode_SET_UTF8_LENGTH:
  150|  14.1k|{
  151|  14.1k|    _PyCompactUnicodeObject_CAST(op)->utf8_length = length;
  ------------------
  |  |  189|  14.1k|    (assert(PyUnicode_Check(op)), \
  |  |  190|  14.1k|     _Py_CAST(PyCompactUnicodeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (151:5): [True: 14.1k, False: 0]
  ------------------
  152|  14.1k|}
unicodeobject.c:PyUnicode_SET_UTF8:
  134|  14.1k|{
  135|  14.1k|    FT_ATOMIC_STORE_PTR_RELEASE(_PyCompactUnicodeObject_CAST(op)->utf8, utf8);
  ------------------
  |  |  164|  28.2k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  |  |  |  Branch (164:55): [True: 14.1k, False: 0]
  |  |  ------------------
  ------------------
  136|  14.1k|}
unicodeobject.c:_copy_characters:
 1397|  1.52M|{
 1398|  1.52M|    int from_kind, to_kind;
 1399|  1.52M|    const void *from_data;
 1400|  1.52M|    void *to_data;
 1401|       |
 1402|  1.52M|    assert(0 <= how_many);
  ------------------
  |  Branch (1402:5): [True: 1.52M, False: 0]
  ------------------
 1403|  1.52M|    assert(0 <= from_start);
  ------------------
  |  Branch (1403:5): [True: 1.52M, False: 0]
  ------------------
 1404|  1.52M|    assert(0 <= to_start);
  ------------------
  |  Branch (1404:5): [True: 1.52M, False: 0]
  ------------------
 1405|  1.52M|    assert(PyUnicode_Check(from));
  ------------------
  |  Branch (1405:5): [True: 1.52M, False: 0]
  ------------------
 1406|  1.52M|    assert(from_start + how_many <= PyUnicode_GET_LENGTH(from));
  ------------------
  |  Branch (1406:5): [True: 1.52M, False: 0]
  ------------------
 1407|       |
 1408|  1.52M|    assert(to == NULL || PyUnicode_Check(to));
  ------------------
  |  Branch (1408:5): [True: 0, False: 1.52M]
  |  Branch (1408:5): [True: 1.52M, False: 0]
  ------------------
 1409|       |
 1410|  1.52M|    if (how_many == 0) {
  ------------------
  |  Branch (1410:9): [True: 4.71k, False: 1.52M]
  ------------------
 1411|  4.71k|        return 0;
 1412|  4.71k|    }
 1413|       |
 1414|  1.52M|    assert(to != NULL);
  ------------------
  |  Branch (1414:5): [True: 1.52M, False: 0]
  ------------------
 1415|  1.52M|    assert(to_start + how_many <= PyUnicode_GET_LENGTH(to));
  ------------------
  |  Branch (1415:5): [True: 1.52M, False: 0]
  ------------------
 1416|       |
 1417|  1.52M|    from_kind = PyUnicode_KIND(from);
  ------------------
  |  |  258|  1.52M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  3.04M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.52M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1418|  1.52M|    from_data = PyUnicode_DATA(from);
  ------------------
  |  |  284|  1.52M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.52M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.52M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1419|  1.52M|    to_kind = PyUnicode_KIND(to);
  ------------------
  |  |  258|  1.52M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  3.04M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.52M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1420|  1.52M|    to_data = PyUnicode_DATA(to);
  ------------------
  |  |  284|  1.52M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.52M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.52M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1421|       |
 1422|       |#ifdef Py_DEBUG
 1423|       |    if (!check_maxchar
 1424|       |        && PyUnicode_MAX_CHAR_VALUE(from) > PyUnicode_MAX_CHAR_VALUE(to))
 1425|       |    {
 1426|       |        Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
 1427|       |        Py_UCS4 ch;
 1428|       |        Py_ssize_t i;
 1429|       |        for (i=0; i < how_many; i++) {
 1430|       |            ch = PyUnicode_READ(from_kind, from_data, from_start + i);
 1431|       |            assert(ch <= to_maxchar);
 1432|       |        }
 1433|       |    }
 1434|       |#endif
 1435|       |
 1436|  1.52M|    if (from_kind == to_kind) {
  ------------------
  |  Branch (1436:9): [True: 1.22M, False: 293k]
  ------------------
 1437|  1.22M|        if (check_maxchar
  ------------------
  |  Branch (1437:13): [True: 0, False: 1.22M]
  ------------------
 1438|      0|            && !PyUnicode_IS_ASCII(from) && PyUnicode_IS_ASCII(to))
  ------------------
  |  |  227|  1.22M|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          && !PyUnicode_IS_ASCII(from) && PyUnicode_IS_ASCII(to))
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1438:16): [True: 0, False: 0]
  ------------------
 1439|      0|        {
 1440|       |            /* Writing Latin-1 characters into an ASCII string requires to
 1441|       |               check that all written characters are pure ASCII */
 1442|      0|            Py_UCS4 max_char;
 1443|      0|            max_char = ucs1lib_find_max_char(from_data,
 1444|      0|                                             (const Py_UCS1*)from_data + how_many);
 1445|      0|            if (max_char >= 128)
  ------------------
  |  Branch (1445:17): [True: 0, False: 0]
  ------------------
 1446|      0|                return -1;
 1447|      0|        }
 1448|  1.22M|        memcpy((char*)to_data + to_kind * to_start,
 1449|  1.22M|                  (const char*)from_data + from_kind * from_start,
 1450|  1.22M|                  to_kind * how_many);
 1451|  1.22M|    }
 1452|   293k|    else if (from_kind == PyUnicode_1BYTE_KIND
  ------------------
  |  Branch (1452:14): [True: 282k, False: 10.2k]
  ------------------
 1453|   282k|             && to_kind == PyUnicode_2BYTE_KIND)
  ------------------
  |  Branch (1453:17): [True: 186k, False: 96.5k]
  ------------------
 1454|   186k|    {
 1455|   186k|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|   186k|    do {                                                \
  |  |   49|   186k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|   186k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|   186k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|   186k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|   186k|        const from_type *_unrolled_end =                \
  |  |   54|   186k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|   186k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|   639k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 453k, False: 186k]
  |  |  ------------------
  |  |   56|   453k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|   453k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|   453k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|   453k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|   453k|            _iter += 4; _to += 4;                       \
  |  |   61|   453k|        }                                               \
  |  |   62|   409k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 223k, False: 186k]
  |  |  ------------------
  |  |   63|   223k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|   186k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 186k]
  |  |  ------------------
  ------------------
 1456|   186k|            Py_UCS1, Py_UCS2,
 1457|   186k|            PyUnicode_1BYTE_DATA(from) + from_start,
 1458|   186k|            PyUnicode_1BYTE_DATA(from) + from_start + how_many,
 1459|   186k|            PyUnicode_2BYTE_DATA(to) + to_start
 1460|   186k|            );
 1461|   186k|    }
 1462|   106k|    else if (from_kind == PyUnicode_1BYTE_KIND
  ------------------
  |  Branch (1462:14): [True: 96.5k, False: 10.2k]
  ------------------
 1463|  96.5k|             && to_kind == PyUnicode_4BYTE_KIND)
  ------------------
  |  Branch (1463:17): [True: 96.5k, False: 0]
  ------------------
 1464|  96.5k|    {
 1465|  96.5k|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|  96.5k|    do {                                                \
  |  |   49|  96.5k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  96.5k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  96.5k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  96.5k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  96.5k|        const from_type *_unrolled_end =                \
  |  |   54|  96.5k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  96.5k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|   247k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 151k, False: 96.5k]
  |  |  ------------------
  |  |   56|   151k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|   151k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|   151k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|   151k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|   151k|            _iter += 4; _to += 4;                       \
  |  |   61|   151k|        }                                               \
  |  |   62|   208k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 112k, False: 96.5k]
  |  |  ------------------
  |  |   63|   112k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  96.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 96.5k]
  |  |  ------------------
  ------------------
 1466|  96.5k|            Py_UCS1, Py_UCS4,
 1467|  96.5k|            PyUnicode_1BYTE_DATA(from) + from_start,
 1468|  96.5k|            PyUnicode_1BYTE_DATA(from) + from_start + how_many,
 1469|  96.5k|            PyUnicode_4BYTE_DATA(to) + to_start
 1470|  96.5k|            );
 1471|  96.5k|    }
 1472|  10.2k|    else if (from_kind == PyUnicode_2BYTE_KIND
  ------------------
  |  Branch (1472:14): [True: 10.2k, False: 0]
  ------------------
 1473|  10.2k|             && to_kind == PyUnicode_4BYTE_KIND)
  ------------------
  |  Branch (1473:17): [True: 10.2k, False: 0]
  ------------------
 1474|  10.2k|    {
 1475|  10.2k|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|  10.2k|    do {                                                \
  |  |   49|  10.2k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  10.2k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  10.2k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  10.2k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  10.2k|        const from_type *_unrolled_end =                \
  |  |   54|  10.2k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  10.2k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|   141k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 130k, False: 10.2k]
  |  |  ------------------
  |  |   56|   130k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|   130k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|   130k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|   130k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|   130k|            _iter += 4; _to += 4;                       \
  |  |   61|   130k|        }                                               \
  |  |   62|  23.0k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 12.8k, False: 10.2k]
  |  |  ------------------
  |  |   63|  12.8k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  10.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 10.2k]
  |  |  ------------------
  ------------------
 1476|  10.2k|            Py_UCS2, Py_UCS4,
 1477|  10.2k|            PyUnicode_2BYTE_DATA(from) + from_start,
 1478|  10.2k|            PyUnicode_2BYTE_DATA(from) + from_start + how_many,
 1479|  10.2k|            PyUnicode_4BYTE_DATA(to) + to_start
 1480|  10.2k|            );
 1481|  10.2k|    }
 1482|      0|    else {
 1483|      0|        assert (PyUnicode_MAX_CHAR_VALUE(from) > PyUnicode_MAX_CHAR_VALUE(to));
  ------------------
  |  Branch (1483:9): [True: 0, False: 0]
  ------------------
 1484|       |
 1485|      0|        if (!check_maxchar) {
  ------------------
  |  Branch (1485:13): [True: 0, False: 0]
  ------------------
 1486|      0|            if (from_kind == PyUnicode_2BYTE_KIND
  ------------------
  |  Branch (1486:17): [True: 0, False: 0]
  ------------------
 1487|      0|                && to_kind == PyUnicode_1BYTE_KIND)
  ------------------
  |  Branch (1487:20): [True: 0, False: 0]
  ------------------
 1488|      0|            {
 1489|      0|                _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|      0|    do {                                                \
  |  |   49|      0|        to_type *_to = (to_type *)(to);                 \
  |  |   50|      0|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|      0|        const from_type *_end = (const from_type *)(end);\
  |  |   52|      0|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|      0|        const from_type *_unrolled_end =                \
  |  |   54|      0|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|      0|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|      0|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|      0|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   63|      0|            *_to++ = (to_type) *_iter++;                \
  |  |   64|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1490|      0|                    Py_UCS2, Py_UCS1,
 1491|      0|                    PyUnicode_2BYTE_DATA(from) + from_start,
 1492|      0|                    PyUnicode_2BYTE_DATA(from) + from_start + how_many,
 1493|      0|                    PyUnicode_1BYTE_DATA(to) + to_start
 1494|      0|                    );
 1495|      0|            }
 1496|      0|            else if (from_kind == PyUnicode_4BYTE_KIND
  ------------------
  |  Branch (1496:22): [True: 0, False: 0]
  ------------------
 1497|      0|                     && to_kind == PyUnicode_1BYTE_KIND)
  ------------------
  |  Branch (1497:25): [True: 0, False: 0]
  ------------------
 1498|      0|            {
 1499|      0|                _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|      0|    do {                                                \
  |  |   49|      0|        to_type *_to = (to_type *)(to);                 \
  |  |   50|      0|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|      0|        const from_type *_end = (const from_type *)(end);\
  |  |   52|      0|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|      0|        const from_type *_unrolled_end =                \
  |  |   54|      0|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|      0|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|      0|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|      0|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   63|      0|            *_to++ = (to_type) *_iter++;                \
  |  |   64|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1500|      0|                    Py_UCS4, Py_UCS1,
 1501|      0|                    PyUnicode_4BYTE_DATA(from) + from_start,
 1502|      0|                    PyUnicode_4BYTE_DATA(from) + from_start + how_many,
 1503|      0|                    PyUnicode_1BYTE_DATA(to) + to_start
 1504|      0|                    );
 1505|      0|            }
 1506|      0|            else if (from_kind == PyUnicode_4BYTE_KIND
  ------------------
  |  Branch (1506:22): [True: 0, False: 0]
  ------------------
 1507|      0|                     && to_kind == PyUnicode_2BYTE_KIND)
  ------------------
  |  Branch (1507:25): [True: 0, False: 0]
  ------------------
 1508|      0|            {
 1509|      0|                _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|      0|    do {                                                \
  |  |   49|      0|        to_type *_to = (to_type *)(to);                 \
  |  |   50|      0|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|      0|        const from_type *_end = (const from_type *)(end);\
  |  |   52|      0|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|      0|        const from_type *_unrolled_end =                \
  |  |   54|      0|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|      0|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|      0|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|      0|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   63|      0|            *_to++ = (to_type) *_iter++;                \
  |  |   64|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1510|      0|                    Py_UCS4, Py_UCS2,
 1511|      0|                    PyUnicode_4BYTE_DATA(from) + from_start,
 1512|      0|                    PyUnicode_4BYTE_DATA(from) + from_start + how_many,
 1513|      0|                    PyUnicode_2BYTE_DATA(to) + to_start
 1514|      0|                    );
 1515|      0|            }
 1516|      0|            else {
 1517|      0|                Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1518|      0|            }
 1519|      0|        }
 1520|      0|        else {
 1521|      0|            const Py_UCS4 to_maxchar = PyUnicode_MAX_CHAR_VALUE(to);
  ------------------
  |  |  405|      0|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1522|      0|            Py_UCS4 ch;
 1523|      0|            Py_ssize_t i;
 1524|       |
 1525|      0|            for (i=0; i < how_many; i++) {
  ------------------
  |  Branch (1525:23): [True: 0, False: 0]
  ------------------
 1526|      0|                ch = PyUnicode_READ(from_kind, from_data, from_start + i);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
 1527|      0|                if (ch > to_maxchar)
  ------------------
  |  Branch (1527:21): [True: 0, False: 0]
  ------------------
 1528|      0|                    return -1;
 1529|      0|                PyUnicode_WRITE(to_kind, to_data, to_start + i, ch);
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1530|      0|            }
 1531|      0|        }
 1532|      0|    }
 1533|  1.52M|    return 0;
 1534|  1.52M|}
unicodeobject.c:unicode_check_modifiable:
 1384|    732|{
 1385|    732|    if (!_PyUnicode_IsModifiable(unicode)) {
  ------------------
  |  Branch (1385:9): [True: 0, False: 732]
  ------------------
 1386|      0|        PyErr_SetString(PyExc_SystemError,
 1387|      0|                        "Cannot modify a string currently used");
 1388|      0|        return -1;
 1389|      0|    }
 1390|    732|    return 0;
 1391|    732|}
unicodeobject.c:unicode_resize:
 1771|  14.5k|{
 1772|  14.5k|    PyObject *unicode;
 1773|  14.5k|    Py_ssize_t old_length;
 1774|       |
 1775|  14.5k|    assert(p_unicode != NULL);
  ------------------
  |  Branch (1775:5): [True: 14.5k, False: 0]
  ------------------
 1776|  14.5k|    unicode = *p_unicode;
 1777|       |
 1778|  14.5k|    assert(unicode != NULL);
  ------------------
  |  Branch (1778:5): [True: 14.5k, False: 0]
  ------------------
 1779|  14.5k|    assert(PyUnicode_Check(unicode));
  ------------------
  |  Branch (1779:5): [True: 14.5k, False: 0]
  ------------------
 1780|  14.5k|    assert(0 <= length);
  ------------------
  |  Branch (1780:5): [True: 14.5k, False: 0]
  ------------------
 1781|       |
 1782|  14.5k|    old_length = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  14.5k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1783|  14.5k|    if (old_length == length)
  ------------------
  |  Branch (1783:9): [True: 0, False: 14.5k]
  ------------------
 1784|      0|        return 0;
 1785|       |
 1786|  14.5k|    if (length == 0) {
  ------------------
  |  Branch (1786:9): [True: 0, False: 14.5k]
  ------------------
 1787|      0|        PyObject *empty = _PyUnicode_GetEmpty();
 1788|      0|        Py_SETREF(*p_unicode, empty);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1789|      0|        return 0;
 1790|      0|    }
 1791|       |
 1792|  14.5k|    if (!_PyUnicode_IsModifiable(unicode)) {
  ------------------
  |  Branch (1792:9): [True: 0, False: 14.5k]
  ------------------
 1793|      0|        PyObject *copy = resize_copy(unicode, length);
 1794|      0|        if (copy == NULL)
  ------------------
  |  Branch (1794:13): [True: 0, False: 0]
  ------------------
 1795|      0|            return -1;
 1796|      0|        Py_SETREF(*p_unicode, copy);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1797|      0|        return 0;
 1798|      0|    }
 1799|       |
 1800|  14.5k|    if (PyUnicode_IS_COMPACT(unicode)) {
  ------------------
  |  |  234|  14.5k|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (234:34): [True: 14.5k, False: 0]
  |  |  ------------------
  ------------------
 1801|  14.5k|        PyObject *new_unicode = _PyUnicode_ResizeCompact(unicode, length);
 1802|  14.5k|        if (new_unicode == NULL)
  ------------------
  |  Branch (1802:13): [True: 0, False: 14.5k]
  ------------------
 1803|      0|            return -1;
 1804|  14.5k|        *p_unicode = new_unicode;
 1805|  14.5k|        return 0;
 1806|  14.5k|    }
 1807|      0|    return resize_inplace(unicode, length);
 1808|  14.5k|}
unicodeobject.c:get_latin1_char:
 1829|  3.99M|{
 1830|  3.99M|    PyObject *o = LATIN1(ch);
  ------------------
  |  |  188|  3.99M|#define LATIN1 _Py_LATIN1_CHR
  |  |  ------------------
  |  |  |  |  940|  3.99M|    ((CH) < 128 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (940:6): [True: 3.70M, False: 289k]
  |  |  |  |  ------------------
  |  |  |  |  941|  3.99M|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  3.70M|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  3.70M|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  942|  3.99M|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   289k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|   289k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1831|  3.99M|    return o;
 1832|  3.99M|}
unicodeobject.c:find_maxchar_surrogates:
 1603|  7.72k|{
 1604|  7.72k|    const wchar_t *iter;
 1605|  7.72k|    Py_UCS4 ch;
 1606|       |
 1607|  7.72k|    assert(num_surrogates != NULL && maxchar != NULL);
  ------------------
  |  Branch (1607:5): [True: 7.72k, False: 0]
  |  Branch (1607:5): [True: 7.72k, False: 0]
  ------------------
 1608|  7.72k|    *num_surrogates = 0;
 1609|  7.72k|    *maxchar = 0;
 1610|       |
 1611|   198k|    for (iter = begin; iter < end; ) {
  ------------------
  |  Branch (1611:24): [True: 190k, False: 7.72k]
  ------------------
 1612|       |#if SIZEOF_WCHAR_T == 2
 1613|       |        if (Py_UNICODE_IS_HIGH_SURROGATE(iter[0])
 1614|       |            && (iter+1) < end
 1615|       |            && Py_UNICODE_IS_LOW_SURROGATE(iter[1]))
 1616|       |        {
 1617|       |            ch = Py_UNICODE_JOIN_SURROGATES(iter[0], iter[1]);
 1618|       |            ++(*num_surrogates);
 1619|       |            iter += 2;
 1620|       |        }
 1621|       |        else
 1622|       |#endif
 1623|   190k|        {
 1624|   190k|            ch = *iter;
 1625|   190k|            iter++;
 1626|   190k|        }
 1627|   190k|        if (ch > *maxchar) {
  ------------------
  |  Branch (1627:13): [True: 32.8k, False: 157k]
  ------------------
 1628|  32.8k|            *maxchar = ch;
 1629|  32.8k|            if (*maxchar > MAX_UNICODE) {
  ------------------
  |  |  108|  32.8k|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|  32.8k|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
  |  Branch (1629:17): [True: 0, False: 32.8k]
  ------------------
 1630|      0|                PyErr_Format(PyExc_ValueError,
 1631|      0|                             "character U+%x is not in range [U+0000; U+%x]",
 1632|      0|                             ch, MAX_UNICODE);
  ------------------
  |  |  108|      0|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|      0|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
 1633|      0|                return -1;
 1634|      0|            }
 1635|  32.8k|        }
 1636|   190k|    }
 1637|  7.72k|    return 0;
 1638|  7.72k|}
unicodeobject.c:unicode_write_widechar:
 1865|  7.72k|{
 1866|  7.72k|    switch (kind) {
 1867|  7.72k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (1867:5): [True: 7.72k, False: 0]
  ------------------
 1868|  7.72k|        _PyUnicode_CONVERT_BYTES(wchar_t, unsigned char, u, u + size, data);
  ------------------
  |  |   48|  7.72k|    do {                                                \
  |  |   49|  7.72k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  7.72k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  7.72k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  7.72k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  7.72k|        const from_type *_unrolled_end =                \
  |  |   54|  7.72k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  7.72k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  53.3k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 45.6k, False: 7.72k]
  |  |  ------------------
  |  |   56|  45.6k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  45.6k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  45.6k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  45.6k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  45.6k|            _iter += 4; _to += 4;                       \
  |  |   61|  45.6k|        }                                               \
  |  |   62|  15.7k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 8.06k, False: 7.72k]
  |  |  ------------------
  |  |   63|  8.06k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  7.72k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 7.72k]
  |  |  ------------------
  ------------------
 1869|  7.72k|        break;
 1870|       |
 1871|      0|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (1871:5): [True: 0, False: 7.72k]
  ------------------
 1872|       |#if SIZEOF_WCHAR_T == 2
 1873|       |        memcpy(data, u, size * 2);
 1874|       |#else
 1875|      0|        _PyUnicode_CONVERT_BYTES(wchar_t, Py_UCS2, u, u + size, data);
  ------------------
  |  |   48|      0|    do {                                                \
  |  |   49|      0|        to_type *_to = (to_type *)(to);                 \
  |  |   50|      0|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|      0|        const from_type *_end = (const from_type *)(end);\
  |  |   52|      0|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|      0|        const from_type *_unrolled_end =                \
  |  |   54|      0|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|      0|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|      0|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|      0|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   63|      0|            *_to++ = (to_type) *_iter++;                \
  |  |   64|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1876|      0|#endif
 1877|      0|        break;
 1878|       |
 1879|      0|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (1879:5): [True: 0, False: 7.72k]
  ------------------
 1880|      0|    {
 1881|       |#if SIZEOF_WCHAR_T == 2
 1882|       |        // Convert a 16-bits wchar_t representation to UCS4, this will decode
 1883|       |        // surrogate pairs.
 1884|       |        const wchar_t *end = u + size;
 1885|       |        Py_UCS4 *ucs4_out = (Py_UCS4*)data;
 1886|       |#  ifndef NDEBUG
 1887|       |        Py_UCS4 *ucs4_end = (Py_UCS4*)data + (size - num_surrogates);
 1888|       |#  endif
 1889|       |        for (const wchar_t *iter = u; iter < end; ) {
 1890|       |            assert(ucs4_out < ucs4_end);
 1891|       |            if (Py_UNICODE_IS_HIGH_SURROGATE(iter[0])
 1892|       |                && (iter+1) < end
 1893|       |                && Py_UNICODE_IS_LOW_SURROGATE(iter[1]))
 1894|       |            {
 1895|       |                *ucs4_out++ = Py_UNICODE_JOIN_SURROGATES(iter[0], iter[1]);
 1896|       |                iter += 2;
 1897|       |            }
 1898|       |            else {
 1899|       |                *ucs4_out++ = *iter;
 1900|       |                iter++;
 1901|       |            }
 1902|       |        }
 1903|       |        assert(ucs4_out == ucs4_end);
 1904|       |#else
 1905|      0|        assert(num_surrogates == 0);
  ------------------
  |  Branch (1905:9): [True: 0, False: 0]
  ------------------
 1906|      0|        memcpy(data, u, size * 4);
 1907|      0|#endif
 1908|      0|        break;
 1909|      0|    }
 1910|      0|    default:
  ------------------
  |  Branch (1910:5): [True: 0, False: 7.72k]
  ------------------
 1911|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1912|  7.72k|    }
 1913|  7.72k|}
unicodeobject.c:_PyUnicode_FromUCS1:
 2176|  35.1k|{
 2177|  35.1k|    PyObject *res;
 2178|  35.1k|    unsigned char max_char;
 2179|       |
 2180|  35.1k|    if (size == 0) {
  ------------------
  |  Branch (2180:9): [True: 267, False: 34.8k]
  ------------------
 2181|    267|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|    267|    do {                             \
  |  |  380|    267|        return _PyUnicode_GetEmpty();\
  |  |  381|    267|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2182|    267|    }
 2183|  35.1k|    assert(size > 0);
  ------------------
  |  Branch (2183:5): [True: 34.8k, False: 0]
  ------------------
 2184|  34.8k|    if (size == 1) {
  ------------------
  |  Branch (2184:9): [True: 3.25k, False: 31.6k]
  ------------------
 2185|  3.25k|        return get_latin1_char(u[0]);
 2186|  3.25k|    }
 2187|       |
 2188|  31.6k|    max_char = ucs1lib_find_max_char(u, u + size);
 2189|  31.6k|    res = PyUnicode_New(size, max_char);
 2190|  31.6k|    if (!res)
  ------------------
  |  Branch (2190:9): [True: 0, False: 31.6k]
  ------------------
 2191|      0|        return NULL;
 2192|  31.6k|    memcpy(PyUnicode_1BYTE_DATA(res), u, size);
  ------------------
  |  |  291|  31.6k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  31.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2193|  31.6k|    assert(_PyUnicode_CheckConsistency(res, 1));
  ------------------
  |  Branch (2193:5): [True: 31.6k, False: 0]
  ------------------
 2194|  31.6k|    return res;
 2195|  31.6k|}
unicodeobject.c:_PyUnicode_FromUCS2:
 2199|   268k|{
 2200|   268k|    PyObject *res;
 2201|   268k|    Py_UCS2 max_char;
 2202|       |
 2203|   268k|    if (size == 0)
  ------------------
  |  Branch (2203:9): [True: 16.3k, False: 252k]
  ------------------
 2204|  16.3k|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|  16.3k|    do {                             \
  |  |  380|  16.3k|        return _PyUnicode_GetEmpty();\
  |  |  381|  16.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2205|   268k|    assert(size > 0);
  ------------------
  |  Branch (2205:5): [True: 252k, False: 0]
  ------------------
 2206|   252k|    if (size == 1)
  ------------------
  |  Branch (2206:9): [True: 12.4k, False: 240k]
  ------------------
 2207|  12.4k|        return unicode_char(u[0]);
 2208|       |
 2209|   240k|    max_char = ucs2lib_find_max_char(u, u + size);
 2210|   240k|    res = PyUnicode_New(size, max_char);
 2211|   240k|    if (!res)
  ------------------
  |  Branch (2211:9): [True: 0, False: 240k]
  ------------------
 2212|      0|        return NULL;
 2213|   240k|    if (max_char >= 256)
  ------------------
  |  Branch (2213:9): [True: 234k, False: 5.11k]
  ------------------
 2214|   234k|        memcpy(PyUnicode_2BYTE_DATA(res), u, sizeof(Py_UCS2)*size);
  ------------------
  |  |  292|   234k|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|   234k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2215|  5.11k|    else {
 2216|  5.11k|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|  5.11k|    do {                                                \
  |  |   49|  5.11k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  5.11k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  5.11k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  5.11k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  5.11k|        const from_type *_unrolled_end =                \
  |  |   54|  5.11k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  5.11k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  19.8k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 14.7k, False: 5.11k]
  |  |  ------------------
  |  |   56|  14.7k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  14.7k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  14.7k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  14.7k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  14.7k|            _iter += 4; _to += 4;                       \
  |  |   61|  14.7k|        }                                               \
  |  |   62|  12.9k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 7.81k, False: 5.11k]
  |  |  ------------------
  |  |   63|  7.81k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  5.11k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 5.11k]
  |  |  ------------------
  ------------------
 2217|  5.11k|            Py_UCS2, Py_UCS1, u, u + size, PyUnicode_1BYTE_DATA(res));
 2218|  5.11k|    }
 2219|   240k|    assert(_PyUnicode_CheckConsistency(res, 1));
  ------------------
  |  Branch (2219:5): [True: 240k, False: 0]
  ------------------
 2220|   240k|    return res;
 2221|   240k|}
unicodeobject.c:_PyUnicode_FromUCS4:
 2225|   604k|{
 2226|   604k|    PyObject *res;
 2227|   604k|    Py_UCS4 max_char;
 2228|       |
 2229|   604k|    if (size == 0)
  ------------------
  |  Branch (2229:9): [True: 1.94k, False: 602k]
  ------------------
 2230|  1.94k|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|  1.94k|    do {                             \
  |  |  380|  1.94k|        return _PyUnicode_GetEmpty();\
  |  |  381|  1.94k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2231|   604k|    assert(size > 0);
  ------------------
  |  Branch (2231:5): [True: 602k, False: 0]
  ------------------
 2232|   602k|    if (size == 1)
  ------------------
  |  Branch (2232:9): [True: 474k, False: 127k]
  ------------------
 2233|   474k|        return unicode_char(u[0]);
 2234|       |
 2235|   127k|    max_char = ucs4lib_find_max_char(u, u + size);
 2236|   127k|    res = PyUnicode_New(size, max_char);
 2237|   127k|    if (!res)
  ------------------
  |  Branch (2237:9): [True: 0, False: 127k]
  ------------------
 2238|      0|        return NULL;
 2239|   127k|    if (max_char < 256)
  ------------------
  |  Branch (2239:9): [True: 12.5k, False: 115k]
  ------------------
 2240|  12.5k|        _PyUnicode_CONVERT_BYTES(Py_UCS4, Py_UCS1, u, u + size,
  ------------------
  |  |   48|  12.5k|    do {                                                \
  |  |   49|  12.5k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  12.5k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  12.5k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  12.5k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  12.5k|        const from_type *_unrolled_end =                \
  |  |   54|  12.5k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  12.5k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  19.3k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 6.75k, False: 12.5k]
  |  |  ------------------
  |  |   56|  6.75k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  6.75k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  6.75k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  6.75k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  6.75k|            _iter += 4; _to += 4;                       \
  |  |   61|  6.75k|        }                                               \
  |  |   62|  36.7k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 24.1k, False: 12.5k]
  |  |  ------------------
  |  |   63|  24.1k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  12.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 12.5k]
  |  |  ------------------
  ------------------
 2241|   127k|                                 PyUnicode_1BYTE_DATA(res));
 2242|   115k|    else if (max_char < 0x10000)
  ------------------
  |  Branch (2242:14): [True: 92.5k, False: 22.6k]
  ------------------
 2243|  92.5k|        _PyUnicode_CONVERT_BYTES(Py_UCS4, Py_UCS2, u, u + size,
  ------------------
  |  |   48|  92.5k|    do {                                                \
  |  |   49|  92.5k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  92.5k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  92.5k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  92.5k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  92.5k|        const from_type *_unrolled_end =                \
  |  |   54|  92.5k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  92.5k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|   267k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 175k, False: 92.5k]
  |  |  ------------------
  |  |   56|   175k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|   175k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|   175k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|   175k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|   175k|            _iter += 4; _to += 4;                       \
  |  |   61|   175k|        }                                               \
  |  |   62|   275k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 182k, False: 92.5k]
  |  |  ------------------
  |  |   63|   182k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  92.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 92.5k]
  |  |  ------------------
  ------------------
 2244|   115k|                                 PyUnicode_2BYTE_DATA(res));
 2245|  22.6k|    else
 2246|  22.6k|        memcpy(PyUnicode_4BYTE_DATA(res), u, sizeof(Py_UCS4)*size);
  ------------------
  |  |  293|  22.6k|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  22.6k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2247|   127k|    assert(_PyUnicode_CheckConsistency(res, 1));
  ------------------
  |  Branch (2247:5): [True: 127k, False: 0]
  ------------------
 2248|   127k|    return res;
 2249|   127k|}
unicodeobject.c:unicode_from_format:
 3081|   125k|{
 3082|   125k|    Py_ssize_t len = strlen(format);
 3083|   125k|    writer->min_length += len + 100;
 3084|   125k|    writer->overallocate = 1;
 3085|       |
 3086|       |    // Copy varags to be able to pass a reference to a subfunction.
 3087|   125k|    va_list vargs2;
 3088|   125k|    va_copy(vargs2, vargs);
 3089|       |
 3090|       |    // _PyUnicodeWriter_WriteASCIIString() below requires the format string
 3091|       |    // to be encoded to ASCII.
 3092|   125k|    int is_ascii = (ucs1lib_find_max_char((Py_UCS1*)format, (Py_UCS1*)format + len) < 128);
 3093|   125k|    if (!is_ascii) {
  ------------------
  |  Branch (3093:9): [True: 0, False: 125k]
  ------------------
 3094|      0|        Py_ssize_t i;
 3095|      0|        for (i=0; i < len && (unsigned char)format[i] <= 127; i++);
  ------------------
  |  Branch (3095:19): [True: 0, False: 0]
  |  Branch (3095:30): [True: 0, False: 0]
  ------------------
 3096|      0|        PyErr_Format(PyExc_ValueError,
 3097|      0|            "PyUnicode_FromFormatV() expects an ASCII-encoded format "
 3098|      0|            "string, got a non-ASCII byte: 0x%02x",
 3099|      0|            (unsigned char)format[i]);
 3100|      0|        goto fail;
 3101|      0|    }
 3102|       |
 3103|   618k|    for (const char *f = format; *f; ) {
  ------------------
  |  Branch (3103:34): [True: 493k, False: 125k]
  ------------------
 3104|   493k|        if (*f == '%') {
  ------------------
  |  Branch (3104:13): [True: 237k, False: 256k]
  ------------------
 3105|   237k|            f = unicode_fromformat_arg(writer, f, &vargs2);
 3106|   237k|            if (f == NULL)
  ------------------
  |  Branch (3106:17): [True: 0, False: 237k]
  ------------------
 3107|      0|                goto fail;
 3108|   237k|        }
 3109|   256k|        else {
 3110|   256k|            const char *p = strchr(f, '%');
 3111|   256k|            if (p != NULL) {
  ------------------
  |  Branch (3111:17): [True: 165k, False: 90.4k]
  ------------------
 3112|   165k|                len = p - f;
 3113|   165k|            }
 3114|  90.4k|            else {
 3115|  90.4k|                len = strlen(f);
 3116|  90.4k|                writer->overallocate = 0;
 3117|  90.4k|            }
 3118|       |
 3119|   256k|            if (_PyUnicodeWriter_WriteASCIIString(writer, f, len) < 0) {
  ------------------
  |  Branch (3119:17): [True: 0, False: 256k]
  ------------------
 3120|      0|                goto fail;
 3121|      0|            }
 3122|   256k|            f += len;
 3123|   256k|        }
 3124|   493k|    }
 3125|   125k|    va_end(vargs2);
 3126|   125k|    return 0;
 3127|       |
 3128|      0|  fail:
 3129|       |    va_end(vargs2);
 3130|      0|    return -1;
 3131|   125k|}
unicodeobject.c:unicode_fromformat_arg:
 2665|   237k|{
 2666|   237k|    const char *p;
 2667|   237k|    Py_ssize_t len;
 2668|   237k|    int flags = 0;
 2669|   237k|    Py_ssize_t width;
 2670|   237k|    Py_ssize_t precision;
 2671|       |
 2672|   237k|    p = f;
 2673|   237k|    f++;
 2674|   237k|    if (*f == '%') {
  ------------------
  |  Branch (2674:9): [True: 0, False: 237k]
  ------------------
 2675|      0|        if (_PyUnicodeWriter_WriteCharInline(writer, '%') < 0)
  ------------------
  |  Branch (2675:13): [True: 0, False: 0]
  ------------------
 2676|      0|            return NULL;
 2677|      0|        f++;
 2678|      0|        return f;
 2679|      0|    }
 2680|       |
 2681|       |    /* Parse flags. Example: "%-i" => flags=F_LJUST. */
 2682|       |    /* Flags '+', ' ' and '#' are not particularly useful.
 2683|       |     * They are not worth the implementation and maintenance costs.
 2684|       |     * In addition, '#' should add "0" for "o" conversions for compatibility
 2685|       |     * with printf, but it would confuse Python users. */
 2686|   239k|    while (1) {
  ------------------
  |  Branch (2686:12): [True: 239k, Folded]
  ------------------
 2687|   239k|        switch (*f++) {
  ------------------
  |  Branch (2687:17): [True: 2.31k, False: 237k]
  ------------------
 2688|      0|        case '-': flags |= F_LJUST; continue;
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (2688:9): [True: 0, False: 239k]
  ------------------
 2689|  2.31k|        case '0': flags |= F_ZERO; continue;
  ------------------
  |  |   22|  2.31k|#define F_ZERO  (1<<4)
  ------------------
  |  Branch (2689:9): [True: 2.31k, False: 237k]
  ------------------
 2690|      0|        case '#': flags |= F_ALT; continue;
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (2690:9): [True: 0, False: 239k]
  ------------------
 2691|   239k|        }
 2692|   237k|        f--;
 2693|   237k|        break;
 2694|   239k|    }
 2695|       |
 2696|       |    /* parse the width.precision part, e.g. "%2.5s" => width=2, precision=5 */
 2697|   237k|    width = -1;
 2698|   237k|    if (*f == '*') {
  ------------------
  |  Branch (2698:9): [True: 0, False: 237k]
  ------------------
 2699|      0|        width = va_arg(*vargs, int);
 2700|      0|        if (width < 0) {
  ------------------
  |  Branch (2700:13): [True: 0, False: 0]
  ------------------
 2701|      0|            flags |= F_LJUST;
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
 2702|      0|            width = -width;
 2703|      0|        }
 2704|      0|        f++;
 2705|      0|    }
 2706|   237k|    else if (Py_ISDIGIT((unsigned)*f)) {
  ------------------
  |  |   24|   237k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|   237k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|   237k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 2.31k, False: 235k]
  |  |  ------------------
  ------------------
 2707|  2.31k|        width = *f - '0';
 2708|  2.31k|        f++;
 2709|  2.31k|        while (Py_ISDIGIT((unsigned)*f)) {
  ------------------
  |  |   24|  2.31k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  2.31k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  2.31k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 0, False: 2.31k]
  |  |  ------------------
  ------------------
 2710|      0|            if (width > (PY_SSIZE_T_MAX - ((int)*f - '0')) / 10) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2710:17): [True: 0, False: 0]
  ------------------
 2711|      0|                PyErr_SetString(PyExc_ValueError,
 2712|      0|                                "width too big");
 2713|      0|                return NULL;
 2714|      0|            }
 2715|      0|            width = (width * 10) + (*f - '0');
 2716|      0|            f++;
 2717|      0|        }
 2718|  2.31k|    }
 2719|   237k|    precision = -1;
 2720|   237k|    if (*f == '.') {
  ------------------
  |  Branch (2720:9): [True: 63.1k, False: 174k]
  ------------------
 2721|  63.1k|        f++;
 2722|  63.1k|        if (*f == '*') {
  ------------------
  |  Branch (2722:13): [True: 0, False: 63.1k]
  ------------------
 2723|      0|            precision = va_arg(*vargs, int);
 2724|      0|            if (precision < 0) {
  ------------------
  |  Branch (2724:17): [True: 0, False: 0]
  ------------------
 2725|      0|                precision = -2;
 2726|      0|            }
 2727|      0|            f++;
 2728|      0|        }
 2729|  63.1k|        else if (Py_ISDIGIT((unsigned)*f)) {
  ------------------
  |  |   24|  63.1k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  63.1k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  63.1k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 63.1k, False: 0]
  |  |  ------------------
  ------------------
 2730|  63.1k|            precision = (*f - '0');
 2731|  63.1k|            f++;
 2732|   181k|            while (Py_ISDIGIT((unsigned)*f)) {
  ------------------
  |  |   24|   181k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|   181k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|   181k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 118k, False: 63.1k]
  |  |  ------------------
  ------------------
 2733|   118k|                if (precision > (PY_SSIZE_T_MAX - ((int)*f - '0')) / 10) {
  ------------------
  |  |  137|   118k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2733:21): [True: 0, False: 118k]
  ------------------
 2734|      0|                    PyErr_SetString(PyExc_ValueError,
 2735|      0|                                    "precision too big");
 2736|      0|                    return NULL;
 2737|      0|                }
 2738|   118k|                precision = (precision * 10) + (*f - '0');
 2739|   118k|                f++;
 2740|   118k|            }
 2741|  63.1k|        }
 2742|  63.1k|    }
 2743|       |
 2744|   237k|    int sizemod = 0;
 2745|   237k|    if (*f == 'l') {
  ------------------
  |  Branch (2745:9): [True: 0, False: 237k]
  ------------------
 2746|      0|        if (f[1] == 'l') {
  ------------------
  |  Branch (2746:13): [True: 0, False: 0]
  ------------------
 2747|      0|            sizemod = F_LONGLONG;
  ------------------
  |  | 2657|      0|#define F_LONGLONG 2
  ------------------
 2748|      0|            f += 2;
 2749|      0|        }
 2750|      0|        else {
 2751|      0|            sizemod = F_LONG;
  ------------------
  |  | 2656|      0|#define F_LONG 1
  ------------------
 2752|      0|            ++f;
 2753|      0|        }
 2754|      0|    }
 2755|   237k|    else if (*f == 'z') {
  ------------------
  |  Branch (2755:14): [True: 3.12k, False: 234k]
  ------------------
 2756|  3.12k|        sizemod = F_SIZE;
  ------------------
  |  | 2658|  3.12k|#define F_SIZE 3
  ------------------
 2757|  3.12k|        ++f;
 2758|  3.12k|    }
 2759|   234k|    else if (*f == 't') {
  ------------------
  |  Branch (2759:14): [True: 0, False: 234k]
  ------------------
 2760|      0|        sizemod = F_PTRDIFF;
  ------------------
  |  | 2659|      0|#define F_PTRDIFF 4
  ------------------
 2761|      0|        ++f;
 2762|      0|    }
 2763|   234k|    else if (*f == 'j') {
  ------------------
  |  Branch (2763:14): [True: 0, False: 234k]
  ------------------
 2764|      0|        sizemod = F_INTMAX;
  ------------------
  |  | 2660|      0|#define F_INTMAX 5
  ------------------
 2765|      0|        ++f;
 2766|      0|    }
 2767|   237k|    if (f[0] != '\0' && f[1] == '\0')
  ------------------
  |  Branch (2767:9): [True: 237k, False: 0]
  |  Branch (2767:25): [True: 34.9k, False: 202k]
  ------------------
 2768|  34.9k|        writer->overallocate = 0;
 2769|       |
 2770|   237k|    switch (*f) {
 2771|  7.19k|    case 'd': case 'i': case 'o': case 'u': case 'x': case 'X':
  ------------------
  |  Branch (2771:5): [True: 4.40k, False: 232k]
  |  Branch (2771:15): [True: 238, False: 237k]
  |  Branch (2771:25): [True: 0, False: 237k]
  |  Branch (2771:35): [True: 0, False: 237k]
  |  Branch (2771:45): [True: 1.60k, False: 235k]
  |  Branch (2771:55): [True: 941, False: 236k]
  ------------------
 2772|  7.19k|        break;
 2773|  20.1k|    case 'c': case 'p':
  ------------------
  |  Branch (2773:5): [True: 20.1k, False: 217k]
  |  Branch (2773:15): [True: 0, False: 237k]
  ------------------
 2774|  20.1k|        if (sizemod || width >= 0 || precision >= 0) goto invalid_format;
  ------------------
  |  Branch (2774:13): [True: 0, False: 20.1k]
  |  Branch (2774:24): [True: 0, False: 20.1k]
  |  Branch (2774:38): [True: 0, False: 20.1k]
  ------------------
 2775|  20.1k|        break;
 2776|   179k|    case 's':
  ------------------
  |  Branch (2776:5): [True: 179k, False: 57.7k]
  ------------------
 2777|   179k|    case 'V':
  ------------------
  |  Branch (2777:5): [True: 238, False: 237k]
  ------------------
 2778|   179k|        if (sizemod && sizemod != F_LONG) goto invalid_format;
  ------------------
  |  | 2656|      0|#define F_LONG 1
  ------------------
  |  Branch (2778:13): [True: 0, False: 179k]
  |  Branch (2778:24): [True: 0, False: 0]
  ------------------
 2779|   179k|        break;
 2780|   179k|    default:
  ------------------
  |  Branch (2780:5): [True: 30.1k, False: 207k]
  ------------------
 2781|  30.1k|        if (sizemod) goto invalid_format;
  ------------------
  |  Branch (2781:13): [True: 0, False: 30.1k]
  ------------------
 2782|  30.1k|        break;
 2783|   237k|    }
 2784|       |
 2785|   237k|    switch (*f) {
 2786|  20.1k|    case 'c':
  ------------------
  |  Branch (2786:5): [True: 20.1k, False: 217k]
  ------------------
 2787|  20.1k|    {
 2788|  20.1k|        int ordinal = va_arg(*vargs, int);
 2789|  20.1k|        if (ordinal < 0 || ordinal > MAX_UNICODE) {
  ------------------
  |  |  108|  20.1k|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|  20.1k|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
  |  Branch (2789:13): [True: 0, False: 20.1k]
  |  Branch (2789:28): [True: 0, False: 20.1k]
  ------------------
 2790|      0|            PyErr_SetString(PyExc_OverflowError,
 2791|      0|                            "character argument not in range(0x110000)");
 2792|      0|            return NULL;
 2793|      0|        }
 2794|  20.1k|        if (_PyUnicodeWriter_WriteCharInline(writer, ordinal) < 0)
  ------------------
  |  Branch (2794:13): [True: 0, False: 20.1k]
  ------------------
 2795|      0|            return NULL;
 2796|  20.1k|        break;
 2797|  20.1k|    }
 2798|       |
 2799|  20.1k|    case 'd': case 'i':
  ------------------
  |  Branch (2799:5): [True: 4.40k, False: 232k]
  |  Branch (2799:15): [True: 238, False: 237k]
  ------------------
 2800|  7.19k|    case 'o': case 'u': case 'x': case 'X':
  ------------------
  |  Branch (2800:5): [True: 0, False: 237k]
  |  Branch (2800:15): [True: 0, False: 237k]
  |  Branch (2800:25): [True: 1.60k, False: 235k]
  |  Branch (2800:35): [True: 941, False: 236k]
  ------------------
 2801|  7.19k|    {
 2802|  7.19k|        char buffer[MAX_INTMAX_CHARS];
 2803|       |
 2804|       |        // Fill buffer using sprinf, with one of many possible format
 2805|       |        // strings, like "%llX" for `long long` in hexadecimal.
 2806|       |        // The type/size is in `sizemod`; the format is in `*f`.
 2807|       |
 2808|       |        // Use macros with nested switches to keep the sprintf format strings
 2809|       |        // as compile-time literals, avoiding warnings and maybe allowing
 2810|       |        // optimizations.
 2811|       |
 2812|       |        // `SPRINT` macro does one sprintf
 2813|       |        // Example usage: SPRINT("l", "X", unsigned long) expands to
 2814|       |        // sprintf(buffer, "%" "l" "X", va_arg(*vargs, unsigned long))
 2815|  7.19k|        #define SPRINT(SIZE_SPEC, FMT_CHAR, TYPE) \
 2816|  7.19k|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
 2817|       |
 2818|       |        // One inner switch to handle all format variants
 2819|  7.19k|        #define DO_SPRINTS(SIZE_SPEC, SIGNED_TYPE, UNSIGNED_TYPE)             \
 2820|  7.19k|            switch (*f) {                                                     \
 2821|  7.19k|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
 2822|  7.19k|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
 2823|  7.19k|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
 2824|  7.19k|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
 2825|  7.19k|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
 2826|  7.19k|            }
 2827|       |
 2828|       |        // Outer switch to handle all the sizes/types
 2829|  7.19k|        switch (sizemod) {
 2830|      0|            case F_LONG:     DO_SPRINTS("l", long, unsigned long); break;
  ------------------
  |  | 2656|      0|#define F_LONG 1
  ------------------
                          case F_LONG:     DO_SPRINTS("l", long, unsigned long); break;
  ------------------
  |  | 2820|      0|            switch (*f) {                                                     \
  |  | 2821|      0|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2821:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2822|      0|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2822:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2823|      0|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2823:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2824|      0|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2824:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2825|      0|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2826|      0|            }
  ------------------
  |  Branch (2830:13): [True: 0, False: 7.19k]
  ------------------
 2831|      0|            case F_LONGLONG: DO_SPRINTS("ll", long long, unsigned long long); break;
  ------------------
  |  | 2657|      0|#define F_LONGLONG 2
  ------------------
                          case F_LONGLONG: DO_SPRINTS("ll", long long, unsigned long long); break;
  ------------------
  |  | 2820|      0|            switch (*f) {                                                     \
  |  | 2821|      0|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2821:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2822|      0|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2822:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2823|      0|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2823:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2824|      0|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2824:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2825|      0|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2826|      0|            }
  ------------------
  |  Branch (2831:13): [True: 0, False: 7.19k]
  ------------------
 2832|  3.12k|            case F_SIZE:     DO_SPRINTS("z", Py_ssize_t, size_t); break;
  ------------------
  |  | 2658|  3.12k|#define F_SIZE 3
  ------------------
                          case F_SIZE:     DO_SPRINTS("z", Py_ssize_t, size_t); break;
  ------------------
  |  | 2820|  3.12k|            switch (*f) {                                                     \
  |  | 2821|      0|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2821:17): [True: 0, False: 3.12k]
  |  |  ------------------
  |  | 2822|      0|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2822:17): [True: 0, False: 3.12k]
  |  |  ------------------
  |  | 2823|      0|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2823:17): [True: 0, False: 3.12k]
  |  |  ------------------
  |  | 2824|      0|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2824:17): [True: 0, False: 3.12k]
  |  |  ------------------
  |  | 2825|  3.12k|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
  |  |  ------------------
  |  |  |  | 2816|  3.12k|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 3.12k, False: 0]
  |  |  ------------------
  |  | 2826|  3.12k|            }
  ------------------
  |  Branch (2832:13): [True: 3.12k, False: 4.06k]
  ------------------
 2833|      0|            case F_PTRDIFF:  DO_SPRINTS("t", ptrdiff_t, ptrdiff_t); break;
  ------------------
  |  | 2659|      0|#define F_PTRDIFF 4
  ------------------
                          case F_PTRDIFF:  DO_SPRINTS("t", ptrdiff_t, ptrdiff_t); break;
  ------------------
  |  | 2820|      0|            switch (*f) {                                                     \
  |  | 2821|      0|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2821:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2822|      0|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2822:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2823|      0|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2823:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2824|      0|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2824:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2825|      0|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2826|      0|            }
  ------------------
  |  Branch (2833:13): [True: 0, False: 7.19k]
  ------------------
 2834|      0|            case F_INTMAX:   DO_SPRINTS("j", intmax_t, uintmax_t); break;
  ------------------
  |  | 2660|      0|#define F_INTMAX 5
  ------------------
                          case F_INTMAX:   DO_SPRINTS("j", intmax_t, uintmax_t); break;
  ------------------
  |  | 2820|      0|            switch (*f) {                                                     \
  |  | 2821|      0|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2821:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2822|      0|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2822:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2823|      0|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2823:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2824|      0|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2824:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2825|      0|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2826|      0|            }
  ------------------
  |  Branch (2834:13): [True: 0, False: 7.19k]
  ------------------
 2835|  4.06k|            default:         DO_SPRINTS("", int, unsigned int); break;
  ------------------
  |  | 2820|  4.06k|            switch (*f) {                                                     \
  |  | 2821|      0|                case 'o': len = SPRINT(SIZE_SPEC, "o", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2821:17): [True: 0, False: 4.06k]
  |  |  ------------------
  |  | 2822|      0|                case 'u': len = SPRINT(SIZE_SPEC, "u", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|      0|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2822:17): [True: 0, False: 4.06k]
  |  |  ------------------
  |  | 2823|  1.60k|                case 'x': len = SPRINT(SIZE_SPEC, "x", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|  1.60k|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2823:17): [True: 1.60k, False: 2.45k]
  |  |  ------------------
  |  | 2824|    941|                case 'X': len = SPRINT(SIZE_SPEC, "X", UNSIGNED_TYPE); break; \
  |  |  ------------------
  |  |  |  | 2816|    941|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2824:17): [True: 941, False: 3.12k]
  |  |  ------------------
  |  | 2825|  1.51k|                default:  len = SPRINT(SIZE_SPEC, "d", SIGNED_TYPE); break;   \
  |  |  ------------------
  |  |  |  | 2816|  1.51k|            sprintf(buffer, "%" SIZE_SPEC FMT_CHAR, va_arg(*vargs, TYPE))
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 1.51k, False: 2.55k]
  |  |  ------------------
  |  | 2826|  4.06k|            }
  ------------------
  |  Branch (2835:13): [True: 4.06k, False: 3.12k]
  ------------------
 2836|  7.19k|        }
 2837|  7.19k|        #undef SPRINT
 2838|  7.19k|        #undef DO_SPRINTS
 2839|       |
 2840|  7.19k|        assert(len >= 0);
  ------------------
  |  Branch (2840:9): [True: 7.19k, False: 0]
  ------------------
 2841|       |
 2842|  7.19k|        int sign = (buffer[0] == '-');
 2843|  7.19k|        len -= sign;
 2844|       |
 2845|  7.19k|        precision = Py_MAX(precision, len);
  ------------------
  |  |  126|  7.19k|       __extension__ \
  |  |  127|  7.19k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  7.19k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  7.19k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 7.19k]
  |  |  ------------------
  ------------------
 2846|  7.19k|        width = Py_MAX(width, precision + sign);
  ------------------
  |  |  126|  7.19k|       __extension__ \
  |  |  127|  7.19k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  7.19k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  7.19k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 732, False: 6.46k]
  |  |  ------------------
  ------------------
 2847|  7.19k|        if ((flags & F_ZERO) && !(flags & F_LJUST)) {
  ------------------
  |  |   22|  7.19k|#define F_ZERO  (1<<4)
  ------------------
                      if ((flags & F_ZERO) && !(flags & F_LJUST)) {
  ------------------
  |  |   18|  2.31k|#define F_LJUST (1<<0)
  ------------------
  |  Branch (2847:13): [True: 2.31k, False: 4.88k]
  |  Branch (2847:33): [True: 2.31k, False: 0]
  ------------------
 2848|  2.31k|            precision = width - sign;
 2849|  2.31k|        }
 2850|       |
 2851|  7.19k|        Py_ssize_t spacepad = Py_MAX(width - precision - sign, 0);
  ------------------
  |  |  126|  7.19k|       __extension__ \
  |  |  127|  7.19k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  7.19k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  7.19k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 7.19k]
  |  |  ------------------
  ------------------
 2852|  7.19k|        Py_ssize_t zeropad = Py_MAX(precision - len, 0);
  ------------------
  |  |  126|  7.19k|       __extension__ \
  |  |  127|  7.19k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  7.19k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  7.19k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  7.19k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 732, False: 6.46k]
  |  |  ------------------
  ------------------
 2853|       |
 2854|  7.19k|        if (_PyUnicodeWriter_Prepare(writer, width, 127) == -1) {
  ------------------
  |  |  562|  7.19k|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 7.19k, False: 0]
  |  |  ------------------
  |  |  563|  7.19k|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 7.19k, False: 0]
  |  |  ------------------
  |  |  564|  7.19k|     ? 0                                                              \
  |  |  565|  7.19k|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (2854:13): [True: 0, False: 7.19k]
  ------------------
 2855|      0|            return NULL;
 2856|      0|        }
 2857|  7.19k|        assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (2857:9): [True: 7.19k, False: 0]
  ------------------
 2858|       |
 2859|  7.19k|        if (spacepad && !(flags & F_LJUST)) {
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (2859:13): [True: 0, False: 7.19k]
  |  Branch (2859:25): [True: 0, False: 0]
  ------------------
 2860|      0|            if (PyUnicode_Fill(writer->buffer, writer->pos, spacepad, ' ') == -1)
  ------------------
  |  Branch (2860:17): [True: 0, False: 0]
  ------------------
 2861|      0|                return NULL;
 2862|      0|            writer->pos += spacepad;
 2863|      0|        }
 2864|       |
 2865|  7.19k|        if (sign) {
  ------------------
  |  Branch (2865:13): [True: 0, False: 7.19k]
  ------------------
 2866|      0|            if (_PyUnicodeWriter_WriteChar(writer, '-') == -1)
  ------------------
  |  Branch (2866:17): [True: 0, False: 0]
  ------------------
 2867|      0|                return NULL;
 2868|      0|        }
 2869|       |
 2870|  7.19k|        if (zeropad) {
  ------------------
  |  Branch (2870:13): [True: 732, False: 6.46k]
  ------------------
 2871|    732|            if (PyUnicode_Fill(writer->buffer, writer->pos, zeropad, '0') == -1)
  ------------------
  |  Branch (2871:17): [True: 0, False: 732]
  ------------------
 2872|      0|                return NULL;
 2873|    732|            writer->pos += zeropad;
 2874|    732|        }
 2875|       |
 2876|  7.19k|        if (_PyUnicodeWriter_WriteASCIIString(writer, &buffer[sign], len) < 0)
  ------------------
  |  Branch (2876:13): [True: 0, False: 7.19k]
  ------------------
 2877|      0|            return NULL;
 2878|       |
 2879|  7.19k|        if (spacepad && (flags & F_LJUST)) {
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (2879:13): [True: 0, False: 7.19k]
  |  Branch (2879:25): [True: 0, False: 0]
  ------------------
 2880|      0|            if (PyUnicode_Fill(writer->buffer, writer->pos, spacepad, ' ') == -1)
  ------------------
  |  Branch (2880:17): [True: 0, False: 0]
  ------------------
 2881|      0|                return NULL;
 2882|      0|            writer->pos += spacepad;
 2883|      0|        }
 2884|  7.19k|        break;
 2885|  7.19k|    }
 2886|       |
 2887|  7.19k|    case 'p':
  ------------------
  |  Branch (2887:5): [True: 0, False: 237k]
  ------------------
 2888|      0|    {
 2889|      0|        char number[MAX_INTMAX_CHARS];
 2890|       |
 2891|      0|        len = sprintf(number, "%p", va_arg(*vargs, void*));
 2892|      0|        assert(len >= 0);
  ------------------
  |  Branch (2892:9): [True: 0, False: 0]
  ------------------
 2893|       |
 2894|       |        /* %p is ill-defined:  ensure leading 0x. */
 2895|      0|        if (number[1] == 'X')
  ------------------
  |  Branch (2895:13): [True: 0, False: 0]
  ------------------
 2896|      0|            number[1] = 'x';
 2897|      0|        else if (number[1] != 'x') {
  ------------------
  |  Branch (2897:18): [True: 0, False: 0]
  ------------------
 2898|      0|            memmove(number + 2, number,
 2899|      0|                    strlen(number) + 1);
 2900|      0|            number[0] = '0';
 2901|      0|            number[1] = 'x';
 2902|      0|            len += 2;
 2903|      0|        }
 2904|       |
 2905|      0|        if (_PyUnicodeWriter_WriteASCIIString(writer, number, len) < 0)
  ------------------
  |  Branch (2905:13): [True: 0, False: 0]
  ------------------
 2906|      0|            return NULL;
 2907|      0|        break;
 2908|      0|    }
 2909|       |
 2910|   179k|    case 's':
  ------------------
  |  Branch (2910:5): [True: 179k, False: 57.7k]
  ------------------
 2911|   179k|    {
 2912|   179k|        if (sizemod) {
  ------------------
  |  Branch (2912:13): [True: 0, False: 179k]
  ------------------
 2913|      0|            const wchar_t *s = va_arg(*vargs, const wchar_t*);
 2914|      0|            if (unicode_fromformat_write_wcstr(writer, s, width, precision, flags) < 0)
  ------------------
  |  Branch (2914:17): [True: 0, False: 0]
  ------------------
 2915|      0|                return NULL;
 2916|      0|        }
 2917|   179k|        else {
 2918|       |            /* UTF-8 */
 2919|   179k|            const char *s = va_arg(*vargs, const char*);
 2920|   179k|            if (unicode_fromformat_write_utf8(writer, s, width, precision, flags) < 0)
  ------------------
  |  Branch (2920:17): [True: 0, False: 179k]
  ------------------
 2921|      0|                return NULL;
 2922|   179k|        }
 2923|   179k|        break;
 2924|   179k|    }
 2925|       |
 2926|   179k|    case 'U':
  ------------------
  |  Branch (2926:5): [True: 30.0k, False: 207k]
  ------------------
 2927|  30.0k|    {
 2928|  30.0k|        PyObject *obj = va_arg(*vargs, PyObject *);
 2929|  30.0k|        assert(obj && _PyUnicode_CHECK(obj));
  ------------------
  |  Branch (2929:9): [True: 30.0k, False: 0]
  |  Branch (2929:9): [True: 30.0k, False: 0]
  ------------------
 2930|       |
 2931|  30.0k|        if (unicode_fromformat_write_str(writer, obj, width, precision, flags) == -1)
  ------------------
  |  Branch (2931:13): [True: 0, False: 30.0k]
  ------------------
 2932|      0|            return NULL;
 2933|  30.0k|        break;
 2934|  30.0k|    }
 2935|       |
 2936|  30.0k|    case 'V':
  ------------------
  |  Branch (2936:5): [True: 238, False: 237k]
  ------------------
 2937|    238|    {
 2938|    238|        PyObject *obj = va_arg(*vargs, PyObject *);
 2939|    238|        const char *str;
 2940|    238|        const wchar_t *wstr;
 2941|    238|        if (sizemod) {
  ------------------
  |  Branch (2941:13): [True: 0, False: 238]
  ------------------
 2942|      0|            wstr = va_arg(*vargs, const wchar_t*);
 2943|      0|        }
 2944|    238|        else {
 2945|    238|            str = va_arg(*vargs, const char *);
 2946|    238|        }
 2947|    238|        if (obj) {
  ------------------
  |  Branch (2947:13): [True: 0, False: 238]
  ------------------
 2948|      0|            assert(_PyUnicode_CHECK(obj));
  ------------------
  |  Branch (2948:13): [True: 0, False: 0]
  ------------------
 2949|      0|            if (unicode_fromformat_write_str(writer, obj, width, precision, flags) == -1)
  ------------------
  |  Branch (2949:17): [True: 0, False: 0]
  ------------------
 2950|      0|                return NULL;
 2951|      0|        }
 2952|    238|        else if (sizemod) {
  ------------------
  |  Branch (2952:18): [True: 0, False: 238]
  ------------------
 2953|      0|            assert(wstr != NULL);
  ------------------
  |  Branch (2953:13): [True: 0, False: 0]
  ------------------
 2954|      0|            if (unicode_fromformat_write_wcstr(writer, wstr, width, precision, flags) < 0)
  ------------------
  |  Branch (2954:17): [True: 0, False: 0]
  ------------------
 2955|      0|                return NULL;
 2956|      0|        }
 2957|    238|        else {
 2958|    238|            assert(str != NULL);
  ------------------
  |  Branch (2958:13): [True: 238, False: 0]
  ------------------
 2959|    238|            if (unicode_fromformat_write_utf8(writer, str, width, precision, flags) < 0)
  ------------------
  |  Branch (2959:17): [True: 0, False: 238]
  ------------------
 2960|      0|                return NULL;
 2961|    238|        }
 2962|    238|        break;
 2963|    238|    }
 2964|       |
 2965|    238|    case 'S':
  ------------------
  |  Branch (2965:5): [True: 8, False: 237k]
  ------------------
 2966|      8|    {
 2967|      8|        PyObject *obj = va_arg(*vargs, PyObject *);
 2968|      8|        PyObject *str;
 2969|      8|        assert(obj);
  ------------------
  |  Branch (2969:9): [True: 8, False: 0]
  ------------------
 2970|      8|        str = PyObject_Str(obj);
 2971|      8|        if (!str)
  ------------------
  |  Branch (2971:13): [True: 0, False: 8]
  ------------------
 2972|      0|            return NULL;
 2973|      8|        if (unicode_fromformat_write_str(writer, str, width, precision, flags) == -1) {
  ------------------
  |  Branch (2973:13): [True: 0, False: 8]
  ------------------
 2974|      0|            Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2975|      0|            return NULL;
 2976|      0|        }
 2977|      8|        Py_DECREF(str);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2978|      8|        break;
 2979|      8|    }
 2980|       |
 2981|     91|    case 'R':
  ------------------
  |  Branch (2981:5): [True: 91, False: 237k]
  ------------------
 2982|     91|    {
 2983|     91|        PyObject *obj = va_arg(*vargs, PyObject *);
 2984|     91|        PyObject *repr;
 2985|     91|        assert(obj);
  ------------------
  |  Branch (2985:9): [True: 91, False: 0]
  ------------------
 2986|     91|        repr = PyObject_Repr(obj);
 2987|     91|        if (!repr)
  ------------------
  |  Branch (2987:13): [True: 0, False: 91]
  ------------------
 2988|      0|            return NULL;
 2989|     91|        if (unicode_fromformat_write_str(writer, repr, width, precision, flags) == -1) {
  ------------------
  |  Branch (2989:13): [True: 0, False: 91]
  ------------------
 2990|      0|            Py_DECREF(repr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2991|      0|            return NULL;
 2992|      0|        }
 2993|     91|        Py_DECREF(repr);
  ------------------
  |  |  430|     91|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     91|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     91|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2994|     91|        break;
 2995|     91|    }
 2996|       |
 2997|      0|    case 'A':
  ------------------
  |  Branch (2997:5): [True: 0, False: 237k]
  ------------------
 2998|      0|    {
 2999|      0|        PyObject *obj = va_arg(*vargs, PyObject *);
 3000|      0|        PyObject *ascii;
 3001|      0|        assert(obj);
  ------------------
  |  Branch (3001:9): [True: 0, False: 0]
  ------------------
 3002|      0|        ascii = PyObject_ASCII(obj);
 3003|      0|        if (!ascii)
  ------------------
  |  Branch (3003:13): [True: 0, False: 0]
  ------------------
 3004|      0|            return NULL;
 3005|      0|        if (unicode_fromformat_write_str(writer, ascii, width, precision, flags) == -1) {
  ------------------
  |  Branch (3005:13): [True: 0, False: 0]
  ------------------
 3006|      0|            Py_DECREF(ascii);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3007|      0|            return NULL;
 3008|      0|        }
 3009|      0|        Py_DECREF(ascii);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3010|      0|        break;
 3011|      0|    }
 3012|       |
 3013|      0|    case 'T':
  ------------------
  |  Branch (3013:5): [True: 0, False: 237k]
  ------------------
 3014|      0|    {
 3015|      0|        PyObject *obj = va_arg(*vargs, PyObject *);
 3016|      0|        PyTypeObject *type = (PyTypeObject *)Py_NewRef(Py_TYPE(obj));
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3017|       |
 3018|      0|        PyObject *type_name;
 3019|      0|        if (flags & F_ALT) {
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (3019:13): [True: 0, False: 0]
  ------------------
 3020|      0|            type_name = _PyType_GetFullyQualifiedName(type, ':');
 3021|      0|        }
 3022|      0|        else {
 3023|      0|            type_name = PyType_GetFullyQualifiedName(type);
 3024|      0|        }
 3025|      0|        Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3026|      0|        if (!type_name) {
  ------------------
  |  Branch (3026:13): [True: 0, False: 0]
  ------------------
 3027|      0|            return NULL;
 3028|      0|        }
 3029|       |
 3030|      0|        if (unicode_fromformat_write_str(writer, type_name,
  ------------------
  |  Branch (3030:13): [True: 0, False: 0]
  ------------------
 3031|      0|                                         width, precision, flags) == -1) {
 3032|      0|            Py_DECREF(type_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3033|      0|            return NULL;
 3034|      0|        }
 3035|      0|        Py_DECREF(type_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3036|      0|        break;
 3037|      0|    }
 3038|       |
 3039|      0|    case 'N':
  ------------------
  |  Branch (3039:5): [True: 0, False: 237k]
  ------------------
 3040|      0|    {
 3041|      0|        PyObject *type_raw = va_arg(*vargs, PyObject *);
 3042|      0|        assert(type_raw != NULL);
  ------------------
  |  Branch (3042:9): [True: 0, False: 0]
  ------------------
 3043|       |
 3044|      0|        if (!PyType_Check(type_raw)) {
  ------------------
  |  |  766|      0|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3044:13): [True: 0, False: 0]
  ------------------
 3045|      0|            PyErr_SetString(PyExc_TypeError, "%N argument must be a type");
 3046|      0|            return NULL;
 3047|      0|        }
 3048|      0|        PyTypeObject *type = (PyTypeObject*)type_raw;
 3049|       |
 3050|      0|        PyObject *type_name;
 3051|      0|        if (flags & F_ALT) {
  ------------------
  |  |   21|      0|#define F_ALT   (1<<3)
  ------------------
  |  Branch (3051:13): [True: 0, False: 0]
  ------------------
 3052|      0|            type_name = _PyType_GetFullyQualifiedName(type, ':');
 3053|      0|        }
 3054|      0|        else {
 3055|      0|            type_name = PyType_GetFullyQualifiedName(type);
 3056|      0|        }
 3057|      0|        if (!type_name) {
  ------------------
  |  Branch (3057:13): [True: 0, False: 0]
  ------------------
 3058|      0|            return NULL;
 3059|      0|        }
 3060|      0|        if (unicode_fromformat_write_str(writer, type_name,
  ------------------
  |  Branch (3060:13): [True: 0, False: 0]
  ------------------
 3061|      0|                                         width, precision, flags) == -1) {
 3062|      0|            Py_DECREF(type_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3063|      0|            return NULL;
 3064|      0|        }
 3065|      0|        Py_DECREF(type_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3066|      0|        break;
 3067|      0|    }
 3068|       |
 3069|      0|    default:
  ------------------
  |  Branch (3069:5): [True: 0, False: 237k]
  ------------------
 3070|      0|    invalid_format:
 3071|      0|        PyErr_Format(PyExc_SystemError, "invalid format string: %s", p);
 3072|      0|        return NULL;
 3073|   237k|    }
 3074|       |
 3075|   237k|    f++;
 3076|   237k|    return f;
 3077|   237k|}
unicodeobject.c:unicode_fromformat_write_utf8:
 2589|   179k|{
 2590|       |    /* UTF-8 */
 2591|   179k|    Py_ssize_t *pconsumed = NULL;
 2592|   179k|    Py_ssize_t length;
 2593|   179k|    if (precision == -1) {
  ------------------
  |  Branch (2593:9): [True: 116k, False: 62.9k]
  ------------------
 2594|   116k|        length = strlen(str);
 2595|   116k|    }
 2596|  62.9k|    else {
 2597|  62.9k|        length = 0;
 2598|   312k|        while (length < precision && str[length]) {
  ------------------
  |  Branch (2598:16): [True: 308k, False: 3.60k]
  |  Branch (2598:38): [True: 249k, False: 59.3k]
  ------------------
 2599|   249k|            length++;
 2600|   249k|        }
 2601|  62.9k|        if (length == precision) {
  ------------------
  |  Branch (2601:13): [True: 3.60k, False: 59.3k]
  ------------------
 2602|       |            /* The input string is not NUL-terminated.  If it ends with an
 2603|       |             * incomplete UTF-8 sequence, truncate the string just before it.
 2604|       |             * Incomplete sequences in the middle and sequences which cannot
 2605|       |             * be valid prefixes are still treated as errors and replaced
 2606|       |             * with \xfffd. */
 2607|  3.60k|            pconsumed = &length;
 2608|  3.60k|        }
 2609|  62.9k|    }
 2610|       |
 2611|   179k|    if (width < 0) {
  ------------------
  |  Branch (2611:9): [True: 179k, False: 0]
  ------------------
 2612|   179k|        return _PyUnicode_DecodeUTF8Writer(writer, str, length,
 2613|   179k|                                           _Py_ERROR_REPLACE, "replace", pconsumed);
 2614|   179k|    }
 2615|       |
 2616|      0|    PyObject *unicode = PyUnicode_DecodeUTF8Stateful(str, length,
 2617|      0|                                                     "replace", pconsumed);
 2618|      0|    if (unicode == NULL)
  ------------------
  |  Branch (2618:9): [True: 0, False: 0]
  ------------------
 2619|      0|        return -1;
 2620|       |
 2621|      0|    int res = unicode_fromformat_write_str(writer, unicode,
 2622|      0|                                           width, -1, flags);
 2623|      0|    Py_DECREF(unicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2624|      0|    return res;
 2625|      0|}
unicodeobject.c:unicode_fromformat_write_str:
 2543|  30.1k|{
 2544|  30.1k|    Py_ssize_t length, fill, arglen;
 2545|  30.1k|    Py_UCS4 maxchar;
 2546|       |
 2547|  30.1k|    length = PyUnicode_GET_LENGTH(str);
  ------------------
  |  |  299|  30.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  30.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  30.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2548|  30.1k|    if ((precision == -1 || precision >= length)
  ------------------
  |  Branch (2548:10): [True: 30.1k, False: 0]
  |  Branch (2548:29): [True: 0, False: 0]
  ------------------
 2549|  30.1k|        && width <= length)
  ------------------
  |  Branch (2549:12): [True: 30.1k, False: 0]
  ------------------
 2550|  30.1k|        return _PyUnicodeWriter_WriteStr(writer, str);
 2551|       |
 2552|      0|    if (precision != -1)
  ------------------
  |  Branch (2552:9): [True: 0, False: 0]
  ------------------
 2553|      0|        length = Py_MIN(precision, length);
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2554|       |
 2555|      0|    arglen = Py_MAX(length, width);
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2556|      0|    if (PyUnicode_MAX_CHAR_VALUE(str) > writer->maxchar)
  ------------------
  |  |  405|      0|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2556:9): [True: 0, False: 0]
  ------------------
 2557|      0|        maxchar = _PyUnicode_FindMaxChar(str, 0, length);
 2558|      0|    else
 2559|      0|        maxchar = writer->maxchar;
 2560|       |
 2561|      0|    if (_PyUnicodeWriter_Prepare(writer, arglen, maxchar) == -1) {
  ------------------
  |  |  562|      0|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  563|      0|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|      0|     ? 0                                                              \
  |  |  565|      0|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (2561:9): [True: 0, False: 0]
  ------------------
 2562|      0|        return -1;
 2563|      0|    }
 2564|      0|    assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (2564:5): [True: 0, False: 0]
  ------------------
 2565|       |
 2566|      0|    fill = Py_MAX(width - length, 0);
  ------------------
  |  |  126|      0|       __extension__ \
  |  |  127|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|      0|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2567|      0|    if (fill && !(flags & F_LJUST)) {
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (2567:9): [True: 0, False: 0]
  |  Branch (2567:17): [True: 0, False: 0]
  ------------------
 2568|      0|        if (PyUnicode_Fill(writer->buffer, writer->pos, fill, ' ') == -1)
  ------------------
  |  Branch (2568:13): [True: 0, False: 0]
  ------------------
 2569|      0|            return -1;
 2570|      0|        writer->pos += fill;
 2571|      0|    }
 2572|       |
 2573|      0|    _PyUnicode_FastCopyCharacters(writer->buffer, writer->pos,
 2574|      0|                                  str, 0, length);
 2575|      0|    writer->pos += length;
 2576|       |
 2577|      0|    if (fill && (flags & F_LJUST)) {
  ------------------
  |  |   18|      0|#define F_LJUST (1<<0)
  ------------------
  |  Branch (2577:9): [True: 0, False: 0]
  |  Branch (2577:17): [True: 0, False: 0]
  ------------------
 2578|      0|        if (PyUnicode_Fill(writer->buffer, writer->pos, fill, ' ') == -1)
  ------------------
  |  Branch (2578:13): [True: 0, False: 0]
  ------------------
 2579|      0|            return -1;
 2580|      0|        writer->pos += fill;
 2581|      0|    }
 2582|       |
 2583|      0|    return 0;
 2584|      0|}
unicodeobject.c:unicode_get_widechar_size:
 3185|    325|{
 3186|    325|    Py_ssize_t res;
 3187|       |
 3188|    325|    assert(unicode != NULL);
  ------------------
  |  Branch (3188:5): [True: 325, False: 0]
  ------------------
 3189|    325|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (3189:5): [True: 325, False: 0]
  ------------------
 3190|       |
 3191|    325|    res = _PyUnicode_LENGTH(unicode);
  ------------------
  |  |  155|    325|    (_PyASCIIObject_CAST(op)->length)
  |  |  ------------------
  |  |  |  |  186|    325|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|    325|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    325|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3191:11): [True: 325, False: 0]
  ------------------
 3192|       |#if SIZEOF_WCHAR_T == 2
 3193|       |    if (PyUnicode_KIND(unicode) == PyUnicode_4BYTE_KIND) {
 3194|       |        const Py_UCS4 *s = PyUnicode_4BYTE_DATA(unicode);
 3195|       |        const Py_UCS4 *end = s + res;
 3196|       |        for (; s < end; ++s) {
 3197|       |            if (*s > 0xFFFF) {
 3198|       |                ++res;
 3199|       |            }
 3200|       |        }
 3201|       |    }
 3202|       |#endif
 3203|      0|    return res;
 3204|    325|}
unicodeobject.c:unicode_copy_as_widechar:
 3208|    325|{
 3209|    325|    assert(unicode != NULL);
  ------------------
  |  Branch (3209:5): [True: 325, False: 0]
  ------------------
 3210|    325|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (3210:5): [True: 325, False: 0]
  ------------------
 3211|       |
 3212|    650|    if (PyUnicode_KIND(unicode) == sizeof(wchar_t)) {
  ------------------
  |  |  258|    325|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    650|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 325, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3212:9): [True: 0, False: 325]
  ------------------
 3213|      0|        memcpy(w, PyUnicode_DATA(unicode), size * sizeof(wchar_t));
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3214|      0|        return;
 3215|      0|    }
 3216|       |
 3217|    650|    if (PyUnicode_KIND(unicode) == PyUnicode_1BYTE_KIND) {
  ------------------
  |  |  258|    325|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    650|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 325, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3217:9): [True: 325, False: 0]
  ------------------
 3218|    325|        const Py_UCS1 *s = PyUnicode_1BYTE_DATA(unicode);
  ------------------
  |  |  291|    325|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    325|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 3219|  20.1k|        for (; size--; ++s, ++w) {
  ------------------
  |  Branch (3219:16): [True: 19.8k, False: 325]
  ------------------
 3220|  19.8k|            *w = *s;
 3221|  19.8k|        }
 3222|    325|    }
 3223|      0|    else {
 3224|      0|#if SIZEOF_WCHAR_T == 4
 3225|      0|        assert(PyUnicode_KIND(unicode) == PyUnicode_2BYTE_KIND);
  ------------------
  |  Branch (3225:9): [True: 0, False: 0]
  |  Branch (3225:9): [True: 0, False: 0]
  ------------------
 3226|      0|        const Py_UCS2 *s = PyUnicode_2BYTE_DATA(unicode);
  ------------------
  |  |  292|      0|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 3227|      0|        for (; size--; ++s, ++w) {
  ------------------
  |  Branch (3227:16): [True: 0, False: 0]
  ------------------
 3228|      0|            *w = *s;
 3229|      0|        }
 3230|       |#else
 3231|       |        assert(PyUnicode_KIND(unicode) == PyUnicode_4BYTE_KIND);
 3232|       |        const Py_UCS4 *s = PyUnicode_4BYTE_DATA(unicode);
 3233|       |        for (; size--; ++s, ++w) {
 3234|       |            Py_UCS4 ch = *s;
 3235|       |            if (ch > 0xFFFF) {
 3236|       |                assert(ch <= MAX_UNICODE);
 3237|       |                /* encode surrogate pair in this case */
 3238|       |                *w++ = Py_UNICODE_HIGH_SURROGATE(ch);
 3239|       |                if (!size--)
 3240|       |                    break;
 3241|       |                *w = Py_UNICODE_LOW_SURROGATE(ch);
 3242|       |            }
 3243|       |            else {
 3244|       |                *w = ch;
 3245|       |            }
 3246|       |        }
 3247|       |#endif
 3248|      0|    }
 3249|    325|}
unicodeobject.c:unicode_char:
 1836|  23.4M|{
 1837|  23.4M|    PyObject *unicode;
 1838|       |
 1839|  23.4M|    assert(ch <= MAX_UNICODE);
  ------------------
  |  Branch (1839:5): [True: 23.4M, False: 0]
  ------------------
 1840|       |
 1841|  23.4M|    if (ch < 256) {
  ------------------
  |  Branch (1841:9): [True: 3.74M, False: 19.6M]
  ------------------
 1842|  3.74M|        return get_latin1_char(ch);
 1843|  3.74M|    }
 1844|       |
 1845|  19.6M|    unicode = PyUnicode_New(1, ch);
 1846|  19.6M|    if (unicode == NULL)
  ------------------
  |  Branch (1846:9): [True: 0, False: 19.6M]
  ------------------
 1847|      0|        return NULL;
 1848|       |
 1849|  19.6M|    assert(PyUnicode_KIND(unicode) != PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (1849:5): [True: 19.6M, False: 0]
  |  Branch (1849:5): [True: 19.6M, False: 0]
  ------------------
 1850|  39.3M|    if (PyUnicode_KIND(unicode) == PyUnicode_2BYTE_KIND) {
  ------------------
  |  |  258|  19.6M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  39.3M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 19.6M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1850:9): [True: 18.4M, False: 1.22M]
  ------------------
 1851|  18.4M|        PyUnicode_2BYTE_DATA(unicode)[0] = (Py_UCS2)ch;
  ------------------
  |  |  292|  18.4M|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  18.4M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1852|  18.4M|    } else {
 1853|  1.22M|        assert(PyUnicode_KIND(unicode) == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (1853:9): [True: 1.22M, False: 0]
  |  Branch (1853:9): [True: 1.22M, False: 0]
  ------------------
 1854|  1.22M|        PyUnicode_4BYTE_DATA(unicode)[0] = ch;
  ------------------
  |  |  293|  1.22M|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  1.22M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1855|  1.22M|    }
 1856|  19.6M|    assert(_PyUnicode_CheckConsistency(unicode, 1));
  ------------------
  |  Branch (1856:5): [True: 19.6M, False: 0]
  ------------------
 1857|  19.6M|    return unicode;
 1858|  19.6M|}
unicodeobject.c:unicode_check_encoding_errors:
  530|   231k|{
  531|   231k|    if (encoding == NULL && errors == NULL) {
  ------------------
  |  Branch (531:9): [True: 0, False: 231k]
  |  Branch (531:29): [True: 0, False: 0]
  ------------------
  532|      0|        return 0;
  533|      0|    }
  534|       |
  535|   231k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  536|   231k|#ifndef Py_DEBUG
  537|       |    /* In release mode, only check in development mode (-X dev) */
  538|   231k|    if (!_PyInterpreterState_GetConfig(interp)->dev_mode) {
  ------------------
  |  Branch (538:9): [True: 231k, False: 0]
  ------------------
  539|   231k|        return 0;
  540|   231k|    }
  541|       |#else
  542|       |    /* Always check in debug mode */
  543|       |#endif
  544|       |
  545|       |    /* Avoid calling _PyCodec_Lookup() and PyCodec_LookupError() before the
  546|       |       codec registry is ready: before_PyUnicode_InitEncodings() is called. */
  547|      0|    if (!interp->unicode.fs_codec.encoding) {
  ------------------
  |  Branch (547:9): [True: 0, False: 0]
  ------------------
  548|      0|        return 0;
  549|      0|    }
  550|       |
  551|       |    /* Disable checks during Python finalization. For example, it allows to
  552|       |     * call PyObject_Dump() during finalization for debugging purpose.
  553|       |     */
  554|      0|    if (_PyInterpreterState_GetFinalizing(interp) != NULL) {
  ------------------
  |  Branch (554:9): [True: 0, False: 0]
  ------------------
  555|      0|        return 0;
  556|      0|    }
  557|       |
  558|      0|    if (encoding != NULL
  ------------------
  |  Branch (558:9): [True: 0, False: 0]
  ------------------
  559|       |        // Fast path for the most common built-in encodings. Even if the codec
  560|       |        // is cached, _PyCodec_Lookup() decodes the bytes string from UTF-8 to
  561|       |        // create a temporary Unicode string (the key in the cache).
  562|      0|        && strcmp(encoding, "utf-8") != 0
  ------------------
  |  Branch (562:12): [True: 0, False: 0]
  ------------------
  563|      0|        && strcmp(encoding, "utf8") != 0
  ------------------
  |  Branch (563:12): [True: 0, False: 0]
  ------------------
  564|      0|        && strcmp(encoding, "ascii") != 0)
  ------------------
  |  Branch (564:12): [True: 0, False: 0]
  ------------------
  565|      0|    {
  566|      0|        PyObject *handler = _PyCodec_Lookup(encoding);
  567|      0|        if (handler == NULL) {
  ------------------
  |  Branch (567:13): [True: 0, False: 0]
  ------------------
  568|      0|            return -1;
  569|      0|        }
  570|      0|        Py_DECREF(handler);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|      0|    }
  572|       |
  573|      0|    if (errors != NULL
  ------------------
  |  Branch (573:9): [True: 0, False: 0]
  ------------------
  574|       |        // Fast path for the most common built-in error handlers.
  575|      0|        && strcmp(errors, "strict") != 0
  ------------------
  |  Branch (575:12): [True: 0, False: 0]
  ------------------
  576|      0|        && strcmp(errors, "ignore") != 0
  ------------------
  |  Branch (576:12): [True: 0, False: 0]
  ------------------
  577|      0|        && strcmp(errors, "replace") != 0
  ------------------
  |  Branch (577:12): [True: 0, False: 0]
  ------------------
  578|      0|        && strcmp(errors, "surrogateescape") != 0
  ------------------
  |  Branch (578:12): [True: 0, False: 0]
  ------------------
  579|      0|        && strcmp(errors, "surrogatepass") != 0)
  ------------------
  |  Branch (579:12): [True: 0, False: 0]
  ------------------
  580|      0|    {
  581|      0|        PyObject *handler = PyCodec_LookupError(errors);
  582|      0|        if (handler == NULL) {
  ------------------
  |  Branch (582:13): [True: 0, False: 0]
  ------------------
  583|      0|            return -1;
  584|      0|        }
  585|      0|        Py_DECREF(handler);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|      0|    }
  587|      0|    return 0;
  588|      0|}
unicodeobject.c:unicode_encode_locale:
 3703|     82|{
 3704|     82|    Py_ssize_t wlen;
 3705|     82|    wchar_t *wstr = PyUnicode_AsWideCharString(unicode, &wlen);
 3706|     82|    if (wstr == NULL) {
  ------------------
  |  Branch (3706:9): [True: 0, False: 82]
  ------------------
 3707|      0|        return NULL;
 3708|      0|    }
 3709|       |
 3710|     82|    if ((size_t)wlen != wcslen(wstr)) {
  ------------------
  |  Branch (3710:9): [True: 0, False: 82]
  ------------------
 3711|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
 3712|      0|        PyMem_Free(wstr);
 3713|      0|        return NULL;
 3714|      0|    }
 3715|       |
 3716|     82|    char *str;
 3717|     82|    size_t error_pos;
 3718|     82|    const char *reason;
 3719|     82|    int res = _Py_EncodeLocaleEx(wstr, &str, &error_pos, &reason,
 3720|     82|                                 current_locale, error_handler);
 3721|     82|    PyMem_Free(wstr);
 3722|       |
 3723|     82|    if (res != 0) {
  ------------------
  |  Branch (3723:9): [True: 0, False: 82]
  ------------------
 3724|      0|        if (res == -2) {
  ------------------
  |  Branch (3724:13): [True: 0, False: 0]
  ------------------
 3725|      0|            PyObject *exc;
 3726|      0|            exc = PyObject_CallFunction(PyExc_UnicodeEncodeError, "sOnns",
 3727|      0|                    "locale", unicode,
 3728|      0|                    (Py_ssize_t)error_pos,
 3729|      0|                    (Py_ssize_t)(error_pos+1),
 3730|      0|                    reason);
 3731|      0|            if (exc != NULL) {
  ------------------
  |  Branch (3731:17): [True: 0, False: 0]
  ------------------
 3732|      0|                PyCodec_StrictErrors(exc);
 3733|      0|                Py_DECREF(exc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3734|      0|            }
 3735|      0|        }
 3736|      0|        else if (res == -3) {
  ------------------
  |  Branch (3736:18): [True: 0, False: 0]
  ------------------
 3737|      0|            PyErr_SetString(PyExc_ValueError, "unsupported error handler");
 3738|      0|        }
 3739|      0|        else {
 3740|      0|            PyErr_NoMemory();
 3741|      0|        }
 3742|      0|        return NULL;
 3743|      0|    }
 3744|       |
 3745|     82|    PyObject *bytes = PyBytes_FromString(str);
 3746|     82|    PyMem_RawFree(str);
 3747|     82|    return bytes;
 3748|     82|}
unicodeobject.c:get_error_handler_wide:
  502|    732|{
  503|    732|    if (errors == NULL || wcscmp(errors, L"strict") == 0) {
  ------------------
  |  Branch (503:9): [True: 0, False: 732]
  |  Branch (503:27): [True: 0, False: 732]
  ------------------
  504|      0|        return _Py_ERROR_STRICT;
  505|      0|    }
  506|    732|    if (wcscmp(errors, L"surrogateescape") == 0) {
  ------------------
  |  Branch (506:9): [True: 732, False: 0]
  ------------------
  507|    732|        return _Py_ERROR_SURROGATEESCAPE;
  508|    732|    }
  509|      0|    if (wcscmp(errors, L"replace") == 0) {
  ------------------
  |  Branch (509:9): [True: 0, False: 0]
  ------------------
  510|      0|        return _Py_ERROR_REPLACE;
  511|      0|    }
  512|      0|    if (wcscmp(errors, L"ignore") == 0) {
  ------------------
  |  Branch (512:9): [True: 0, False: 0]
  ------------------
  513|      0|        return _Py_ERROR_IGNORE;
  514|      0|    }
  515|      0|    if (wcscmp(errors, L"backslashreplace") == 0) {
  ------------------
  |  Branch (515:9): [True: 0, False: 0]
  ------------------
  516|      0|        return _Py_ERROR_BACKSLASHREPLACE;
  517|      0|    }
  518|      0|    if (wcscmp(errors, L"surrogatepass") == 0) {
  ------------------
  |  Branch (518:9): [True: 0, False: 0]
  ------------------
  519|      0|        return _Py_ERROR_SURROGATEPASS;
  520|      0|    }
  521|      0|    if (wcscmp(errors, L"xmlcharrefreplace") == 0) {
  ------------------
  |  Branch (521:9): [True: 0, False: 0]
  ------------------
  522|      0|        return _Py_ERROR_XMLCHARREFREPLACE;
  523|      0|    }
  524|      0|    return _Py_ERROR_OTHER;
  525|      0|}
unicodeobject.c:unicode_decode_locale:
 3928|  7.62k|{
 3929|  7.62k|    if (str[len] != '\0' || (size_t)len != strlen(str))  {
  ------------------
  |  Branch (3929:9): [True: 0, False: 7.62k]
  |  Branch (3929:29): [True: 0, False: 7.62k]
  ------------------
 3930|      0|        PyErr_SetString(PyExc_ValueError, "embedded null byte");
 3931|      0|        return NULL;
 3932|      0|    }
 3933|       |
 3934|  7.62k|    wchar_t *wstr;
 3935|  7.62k|    size_t wlen;
 3936|  7.62k|    const char *reason;
 3937|  7.62k|    int res = _Py_DecodeLocaleEx(str, &wstr, &wlen, &reason,
 3938|  7.62k|                                 current_locale, errors);
 3939|  7.62k|    if (res != 0) {
  ------------------
  |  Branch (3939:9): [True: 0, False: 7.62k]
  ------------------
 3940|      0|        if (res == -2) {
  ------------------
  |  Branch (3940:13): [True: 0, False: 0]
  ------------------
 3941|      0|            PyObject *exc;
 3942|      0|            exc = PyObject_CallFunction(PyExc_UnicodeDecodeError, "sy#nns",
 3943|      0|                                        "locale", str, len,
 3944|      0|                                        (Py_ssize_t)wlen,
 3945|      0|                                        (Py_ssize_t)(wlen + 1),
 3946|      0|                                        reason);
 3947|      0|            if (exc != NULL) {
  ------------------
  |  Branch (3947:17): [True: 0, False: 0]
  ------------------
 3948|      0|                PyCodec_StrictErrors(exc);
 3949|      0|                Py_DECREF(exc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3950|      0|            }
 3951|      0|        }
 3952|      0|        else if (res == -3) {
  ------------------
  |  Branch (3952:18): [True: 0, False: 0]
  ------------------
 3953|      0|            PyErr_SetString(PyExc_ValueError, "unsupported error handler");
 3954|      0|        }
 3955|      0|        else {
 3956|      0|            PyErr_NoMemory();
 3957|      0|        }
 3958|      0|        return NULL;
 3959|      0|    }
 3960|       |
 3961|  7.62k|    PyObject *unicode = PyUnicode_FromWideChar(wstr, wlen);
 3962|  7.62k|    PyMem_RawFree(wstr);
 3963|  7.62k|    return unicode;
 3964|  7.62k|}
unicodeobject.c:findchar:
 1022|   431k|{
 1023|   431k|    switch (kind) {
 1024|   406k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (1024:5): [True: 406k, False: 25.2k]
  ------------------
 1025|   406k|        if ((Py_UCS1) ch != ch)
  ------------------
  |  Branch (1025:13): [True: 0, False: 406k]
  ------------------
 1026|      0|            return -1;
 1027|   406k|        if (direction > 0)
  ------------------
  |  Branch (1027:13): [True: 405k, False: 134]
  ------------------
 1028|   405k|            return ucs1lib_find_char((const Py_UCS1 *) s, size, (Py_UCS1) ch);
 1029|    134|        else
 1030|    134|            return ucs1lib_rfind_char((const Py_UCS1 *) s, size, (Py_UCS1) ch);
 1031|  24.4k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (1031:5): [True: 24.4k, False: 406k]
  ------------------
 1032|  24.4k|        if ((Py_UCS2) ch != ch)
  ------------------
  |  Branch (1032:13): [True: 0, False: 24.4k]
  ------------------
 1033|      0|            return -1;
 1034|  24.4k|        if (direction > 0)
  ------------------
  |  Branch (1034:13): [True: 24.4k, False: 0]
  ------------------
 1035|  24.4k|            return ucs2lib_find_char((const Py_UCS2 *) s, size, (Py_UCS2) ch);
 1036|      0|        else
 1037|      0|            return ucs2lib_rfind_char((const Py_UCS2 *) s, size, (Py_UCS2) ch);
 1038|    789|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (1038:5): [True: 789, False: 430k]
  ------------------
 1039|    789|        if (direction > 0)
  ------------------
  |  Branch (1039:13): [True: 789, False: 0]
  ------------------
 1040|    789|            return ucs4lib_find_char((const Py_UCS4 *) s, size, ch);
 1041|      0|        else
 1042|      0|            return ucs4lib_rfind_char((const Py_UCS4 *) s, size, ch);
 1043|      0|    default:
  ------------------
  |  Branch (1043:5): [True: 0, False: 431k]
  ------------------
 1044|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1045|   431k|    }
 1046|   431k|}
unicodeobject.c:unicode_ensure_utf8:
 4115|   309k|{
 4116|   309k|    int err = 0;
 4117|   309k|    if (PyUnicode_UTF8(unicode) == NULL) {
  ------------------
  |  Branch (4117:9): [True: 14.1k, False: 295k]
  ------------------
 4118|  14.1k|        Py_BEGIN_CRITICAL_SECTION(unicode);
  ------------------
  |  |   51|  14.1k|    {
  ------------------
 4119|  14.1k|        if (PyUnicode_UTF8(unicode) == NULL) {
  ------------------
  |  Branch (4119:13): [True: 14.1k, False: 0]
  ------------------
 4120|  14.1k|            err = unicode_fill_utf8(unicode);
 4121|  14.1k|        }
 4122|  14.1k|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  14.1k|    }
  ------------------
 4123|  14.1k|    }
 4124|   309k|    return err;
 4125|   309k|}
unicodeobject.c:unicode_fill_utf8:
 5751|  14.1k|{
 5752|  14.1k|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(unicode);
 5753|       |    /* the string cannot be ASCII, or PyUnicode_UTF8() would be set */
 5754|  14.1k|    assert(!PyUnicode_IS_ASCII(unicode));
  ------------------
  |  Branch (5754:5): [True: 14.1k, False: 0]
  ------------------
 5755|       |
 5756|  14.1k|    int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  14.1k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  28.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 14.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5757|  14.1k|    const void *data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|  14.1k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5758|  14.1k|    Py_ssize_t size = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  14.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5759|       |
 5760|  14.1k|    PyBytesWriter *writer;
 5761|  14.1k|    char *end;
 5762|       |
 5763|  14.1k|    switch (kind) {
 5764|      0|    default:
  ------------------
  |  Branch (5764:5): [True: 0, False: 14.1k]
  ------------------
 5765|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 5766|  7.93k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (5766:5): [True: 7.93k, False: 6.19k]
  ------------------
 5767|  7.93k|        writer = ucs1lib_utf8_encoder(unicode, data, size,
 5768|  7.93k|                                      _Py_ERROR_STRICT, NULL, &end);
 5769|  7.93k|        break;
 5770|  4.80k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (5770:5): [True: 4.80k, False: 9.31k]
  ------------------
 5771|  4.80k|        writer = ucs2lib_utf8_encoder(unicode, data, size,
 5772|  4.80k|                                      _Py_ERROR_STRICT, NULL, &end);
 5773|  4.80k|        break;
 5774|  1.38k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (5774:5): [True: 1.38k, False: 12.7k]
  ------------------
 5775|  1.38k|        writer = ucs4lib_utf8_encoder(unicode, data, size,
 5776|  1.38k|                                      _Py_ERROR_STRICT, NULL, &end);
 5777|  1.38k|        break;
 5778|  14.1k|    }
 5779|  14.1k|    if (writer == NULL) {
  ------------------
  |  Branch (5779:9): [True: 34, False: 14.0k]
  ------------------
 5780|     34|        return -1;
 5781|     34|    }
 5782|       |
 5783|  14.0k|    const char *start = PyBytesWriter_GetData(writer);
 5784|  14.0k|    Py_ssize_t len = end - start;
 5785|       |
 5786|  14.0k|    char *cache = PyMem_Malloc(len + 1);
 5787|  14.0k|    if (cache == NULL) {
  ------------------
  |  Branch (5787:9): [True: 0, False: 14.0k]
  ------------------
 5788|      0|        PyBytesWriter_Discard(writer);
 5789|      0|        PyErr_NoMemory();
 5790|      0|        return -1;
 5791|      0|    }
 5792|  14.0k|    memcpy(cache, start, len);
 5793|  14.0k|    cache[len] = '\0';
 5794|  14.0k|    PyUnicode_SET_UTF8_LENGTH(unicode, len);
 5795|  14.0k|    PyUnicode_SET_UTF8(unicode, cache);
 5796|  14.0k|    PyBytesWriter_Discard(writer);
 5797|  14.0k|    return 0;
 5798|  14.0k|}
unicodeobject.c:PyUnicode_UTF8_LENGTH:
  139|   242k|{
  140|   242k|    assert(_PyUnicode_CHECK(op));
  ------------------
  |  Branch (140:5): [True: 242k, False: 0]
  ------------------
  141|   242k|    if (PyUnicode_IS_COMPACT_ASCII(op)) {
  ------------------
  |  |  241|   242k|#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   242k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (241:40): [True: 238k, False: 3.85k]
  |  |  ------------------
  ------------------
  142|   238k|         return _PyASCIIObject_CAST(op)->length;
  ------------------
  |  |  186|   238k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   238k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   238k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (142:17): [True: 238k, False: 0]
  ------------------
  143|   238k|    }
  144|  3.85k|    else {
  145|  3.85k|         return _PyCompactUnicodeObject_CAST(op)->utf8_length;
  ------------------
  |  |  189|  3.85k|    (assert(PyUnicode_Check(op)), \
  |  |  190|  3.85k|     _Py_CAST(PyCompactUnicodeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  3.85k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (145:17): [True: 3.85k, False: 0]
  ------------------
  146|  3.85k|    }
  147|   242k|}
unicodeobject.c:PyUnicode_UTF8:
  123|   644k|{
  124|   644k|    assert(_PyUnicode_CHECK(op));
  ------------------
  |  Branch (124:5): [True: 644k, False: 0]
  ------------------
  125|   644k|    if (PyUnicode_IS_COMPACT_ASCII(op)) {
  ------------------
  |  |  241|   644k|#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   644k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   644k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (241:40): [True: 599k, False: 45.5k]
  |  |  ------------------
  ------------------
  126|   599k|        return ((char*)(_PyASCIIObject_CAST(op) + 1));
  ------------------
  |  |  186|   599k|    (assert(PyUnicode_Check(op)), \
  |  |  187|   599k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|   599k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (126:25): [True: 599k, False: 0]
  ------------------
  127|   599k|    }
  128|  45.5k|    else {
  129|  45.5k|         return _PyUnicode_UTF8(op);
  130|  45.5k|    }
  131|   644k|}
unicodeobject.c:unicode_decode_call_errorhandler_writer:
 4402|  2.94k|{
 4403|  2.94k|    static const char *argparse = "Un;decoding error handler must return (str, int) tuple";
 4404|       |
 4405|  2.94k|    PyObject *restuple = NULL;
 4406|  2.94k|    PyObject *repunicode = NULL;
 4407|  2.94k|    Py_ssize_t insize;
 4408|  2.94k|    Py_ssize_t newpos;
 4409|  2.94k|    Py_ssize_t replen;
 4410|  2.94k|    Py_ssize_t remain;
 4411|  2.94k|    PyObject *inputobj = NULL;
 4412|  2.94k|    int need_to_grow = 0;
 4413|  2.94k|    const char *new_inptr;
 4414|       |
 4415|  2.94k|    if (*errorHandler == NULL) {
  ------------------
  |  Branch (4415:9): [True: 2.94k, False: 0]
  ------------------
 4416|  2.94k|        *errorHandler = PyCodec_LookupError(errors);
 4417|  2.94k|        if (*errorHandler == NULL)
  ------------------
  |  Branch (4417:13): [True: 0, False: 2.94k]
  ------------------
 4418|      0|            goto onError;
 4419|  2.94k|    }
 4420|       |
 4421|  2.94k|    make_decode_exception(exceptionObject,
 4422|  2.94k|        encoding,
 4423|  2.94k|        *input, *inend - *input,
 4424|  2.94k|        *startinpos, *endinpos,
 4425|  2.94k|        reason);
 4426|  2.94k|    if (*exceptionObject == NULL)
  ------------------
  |  Branch (4426:9): [True: 0, False: 2.94k]
  ------------------
 4427|      0|        goto onError;
 4428|       |
 4429|  2.94k|    restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
 4430|  2.94k|    if (restuple == NULL)
  ------------------
  |  Branch (4430:9): [True: 2.94k, False: 0]
  ------------------
 4431|  2.94k|        goto onError;
 4432|      0|    if (!PyTuple_Check(restuple)) {
  ------------------
  |  |   27|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4432:9): [True: 0, False: 0]
  ------------------
 4433|      0|        PyErr_SetString(PyExc_TypeError, &argparse[3]);
 4434|      0|        goto onError;
 4435|      0|    }
 4436|      0|    if (!PyArg_ParseTuple(restuple, argparse, &repunicode, &newpos))
  ------------------
  |  Branch (4436:9): [True: 0, False: 0]
  ------------------
 4437|      0|        goto onError;
 4438|       |
 4439|       |    /* Copy back the bytes variables, which might have been modified by the
 4440|       |       callback */
 4441|      0|    inputobj = PyUnicodeDecodeError_GetObject(*exceptionObject);
 4442|      0|    if (!inputobj)
  ------------------
  |  Branch (4442:9): [True: 0, False: 0]
  ------------------
 4443|      0|        goto onError;
 4444|      0|    remain = *inend - *input - *endinpos;
 4445|      0|    *input = PyBytes_AS_STRING(inputobj);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4446|      0|    insize = PyBytes_GET_SIZE(inputobj);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4447|      0|    *inend = *input + insize;
 4448|       |    /* we can DECREF safely, as the exception has another reference,
 4449|       |       so the object won't go away. */
 4450|      0|    Py_DECREF(inputobj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4451|       |
 4452|      0|    if (newpos<0)
  ------------------
  |  Branch (4452:9): [True: 0, False: 0]
  ------------------
 4453|      0|        newpos = insize+newpos;
 4454|      0|    if (newpos<0 || newpos>insize) {
  ------------------
  |  Branch (4454:9): [True: 0, False: 0]
  |  Branch (4454:21): [True: 0, False: 0]
  ------------------
 4455|      0|        PyErr_Format(PyExc_IndexError, "position %zd from error handler out of bounds", newpos);
 4456|      0|        goto onError;
 4457|      0|    }
 4458|       |
 4459|      0|    replen = PyUnicode_GET_LENGTH(repunicode);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4460|      0|    if (replen > 1) {
  ------------------
  |  Branch (4460:9): [True: 0, False: 0]
  ------------------
 4461|      0|        writer->min_length += replen - 1;
 4462|      0|        need_to_grow = 1;
 4463|      0|    }
 4464|      0|    new_inptr = *input + newpos;
 4465|      0|    if (*inend - new_inptr > remain) {
  ------------------
  |  Branch (4465:9): [True: 0, False: 0]
  ------------------
 4466|       |        /* We don't know the decoding algorithm here so we make the worst
 4467|       |           assumption that one byte decodes to one unicode character.
 4468|       |           If unfortunately one byte could decode to more unicode characters,
 4469|       |           the decoder may write out-of-bound then.  Is it possible for the
 4470|       |           algorithms using this function? */
 4471|      0|        writer->min_length += *inend - new_inptr - remain;
 4472|      0|        need_to_grow = 1;
 4473|      0|    }
 4474|      0|    if (need_to_grow) {
  ------------------
  |  Branch (4474:9): [True: 0, False: 0]
  ------------------
 4475|      0|        writer->overallocate = 1;
 4476|      0|        if (_PyUnicodeWriter_Prepare(writer, writer->min_length - writer->pos,
  ------------------
  |  |  562|      0|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  563|      0|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|      0|     ? 0                                                              \
  |  |  565|      0|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (4476:13): [True: 0, False: 0]
  ------------------
 4477|      0|                            PyUnicode_MAX_CHAR_VALUE(repunicode)) == -1)
 4478|      0|            goto onError;
 4479|      0|    }
 4480|      0|    if (_PyUnicodeWriter_WriteStr(writer, repunicode) == -1)
  ------------------
  |  Branch (4480:9): [True: 0, False: 0]
  ------------------
 4481|      0|        goto onError;
 4482|       |
 4483|      0|    *endinpos = newpos;
 4484|      0|    *inptr = new_inptr;
 4485|       |
 4486|       |    /* we made it! */
 4487|      0|    Py_DECREF(restuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4488|      0|    return 0;
 4489|       |
 4490|  2.94k|  onError:
 4491|  2.94k|    Py_XDECREF(restuple);
  ------------------
  |  |  524|  2.94k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.94k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4492|  2.94k|    return -1;
 4493|      0|}
unicodeobject.c:make_decode_exception:
 4249|  2.94k|{
 4250|  2.94k|    if (*exceptionObject == NULL) {
  ------------------
  |  Branch (4250:9): [True: 2.94k, False: 0]
  ------------------
 4251|  2.94k|        *exceptionObject = PyUnicodeDecodeError_Create(
 4252|  2.94k|            encoding, input, length, startpos, endpos, reason);
 4253|  2.94k|    }
 4254|      0|    else {
 4255|      0|        if (PyUnicodeDecodeError_SetStart(*exceptionObject, startpos))
  ------------------
  |  Branch (4255:13): [True: 0, False: 0]
  ------------------
 4256|      0|            goto onError;
 4257|      0|        if (PyUnicodeDecodeError_SetEnd(*exceptionObject, endpos))
  ------------------
  |  Branch (4257:13): [True: 0, False: 0]
  ------------------
 4258|      0|            goto onError;
 4259|      0|        if (PyUnicodeDecodeError_SetReason(*exceptionObject, reason))
  ------------------
  |  Branch (4259:13): [True: 0, False: 0]
  ------------------
 4260|      0|            goto onError;
 4261|      0|    }
 4262|  2.94k|    return;
 4263|       |
 4264|  2.94k|onError:
 4265|       |    Py_CLEAR(*exceptionObject);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4266|      0|}
unicodeobject.c:unicode_decode_utf8:
 5278|  2.19M|{
 5279|  2.19M|    if (size == 0) {
  ------------------
  |  Branch (5279:9): [True: 120k, False: 2.07M]
  ------------------
 5280|   120k|        if (consumed) {
  ------------------
  |  Branch (5280:13): [True: 0, False: 120k]
  ------------------
 5281|      0|            *consumed = 0;
 5282|      0|        }
 5283|   120k|        _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|   120k|    do {                             \
  |  |  380|   120k|        return _PyUnicode_GetEmpty();\
  |  |  381|   120k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5284|   120k|    }
 5285|       |
 5286|       |    /* ASCII is equivalent to the first 128 ordinals in Unicode. */
 5287|  2.07M|    if (size == 1 && (unsigned char)s[0] < 128) {
  ------------------
  |  Branch (5287:9): [True: 241k, False: 1.83M]
  |  Branch (5287:22): [True: 240k, False: 385]
  ------------------
 5288|   240k|        if (consumed) {
  ------------------
  |  Branch (5288:13): [True: 0, False: 240k]
  ------------------
 5289|      0|            *consumed = 1;
 5290|      0|        }
 5291|   240k|        return get_latin1_char((unsigned char)s[0]);
 5292|   240k|    }
 5293|       |
 5294|       |    // I don't know this check is necessary or not. But there is a test
 5295|       |    // case that requires size=PY_SSIZE_T_MAX cause MemoryError.
 5296|  1.83M|    if (PY_SSIZE_T_MAX - sizeof(PyCompactUnicodeObject) < (size_t)size) {
  ------------------
  |  |  137|  1.83M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (5296:9): [True: 0, False: 1.83M]
  ------------------
 5297|      0|        PyErr_NoMemory();
 5298|      0|        return NULL;
 5299|      0|    }
 5300|       |
 5301|  1.83M|    const char *starts = s;
 5302|  1.83M|    const char *end = s + size;
 5303|       |
 5304|  1.83M|    Py_ssize_t pos = find_first_nonascii((const unsigned char*)starts, (const unsigned char*)end);
 5305|  1.83M|    if (pos == size) {  // fast path: ASCII string.
  ------------------
  |  Branch (5305:9): [True: 1.65M, False: 178k]
  ------------------
 5306|  1.65M|        PyObject *u = PyUnicode_New(size, 127);
 5307|  1.65M|        if (u == NULL) {
  ------------------
  |  Branch (5307:13): [True: 0, False: 1.65M]
  ------------------
 5308|      0|            return NULL;
 5309|      0|        }
 5310|  1.65M|        memcpy(PyUnicode_1BYTE_DATA(u), s, size);
  ------------------
  |  |  291|  1.65M|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  1.65M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 5311|  1.65M|        if (consumed) {
  ------------------
  |  Branch (5311:13): [True: 0, False: 1.65M]
  ------------------
 5312|      0|            *consumed = size;
 5313|      0|        }
 5314|  1.65M|        return u;
 5315|  1.65M|    }
 5316|       |
 5317|   178k|    int maxchr = 127;
 5318|   178k|    Py_ssize_t maxsize = size;
 5319|       |
 5320|   178k|    unsigned char ch = (unsigned char)(s[pos]);
 5321|       |    // error handler other than strict may remove/replace the invalid byte.
 5322|       |    // consumed != NULL allows 1~3 bytes remainings.
 5323|       |    // 0x80 <= ch < 0xc2 is invalid start byte that cause UnicodeDecodeError.
 5324|       |    // otherwise: check the input and decide the maxchr and maxsize to reduce
 5325|       |    // reallocation and copy.
 5326|   178k|    if (error_handler == _Py_ERROR_STRICT && !consumed && ch >= 0xc2) {
  ------------------
  |  Branch (5326:9): [True: 170k, False: 8.11k]
  |  Branch (5326:46): [True: 170k, False: 0]
  |  Branch (5326:59): [True: 169k, False: 574]
  ------------------
 5327|       |        // we only calculate the number of codepoints and don't determine the exact maxchr.
 5328|       |        // This is because writing fast and portable SIMD code to find maxchr is difficult.
 5329|       |        // If reallocation occurs for a larger maxchar, knowing the exact number of codepoints
 5330|       |        // means that it is no longer necessary to allocate several times the required amount
 5331|       |        // of memory.
 5332|   169k|        maxsize = utf8_count_codepoints((const unsigned char *)s, (const unsigned char *)end);
 5333|   169k|        if (ch < 0xc4) { // latin1
  ------------------
  |  Branch (5333:13): [True: 70.4k, False: 99.2k]
  ------------------
 5334|  70.4k|            maxchr = 0xff;
 5335|  70.4k|        }
 5336|  99.2k|        else if (ch < 0xf0) { // ucs2
  ------------------
  |  Branch (5336:18): [True: 92.2k, False: 7.06k]
  ------------------
 5337|  92.2k|            maxchr = 0xffff;
 5338|  92.2k|        }
 5339|  7.06k|        else { // ucs4
 5340|  7.06k|            maxchr = 0x10ffff;
 5341|  7.06k|        }
 5342|   169k|    }
 5343|   178k|    PyObject *u = PyUnicode_New(maxsize, maxchr);
 5344|   178k|    if (!u) {
  ------------------
  |  Branch (5344:9): [True: 0, False: 178k]
  ------------------
 5345|      0|        return NULL;
 5346|      0|    }
 5347|       |
 5348|       |    // Use _PyUnicodeWriter after fast path is failed.
 5349|   178k|    _PyUnicodeWriter writer;
 5350|   178k|    _PyUnicodeWriter_InitWithBuffer(&writer, u);
 5351|   178k|    if (maxchr <= 255) {
  ------------------
  |  Branch (5351:9): [True: 79.1k, False: 99.2k]
  ------------------
 5352|  79.1k|        memcpy(PyUnicode_1BYTE_DATA(u), s, pos);
  ------------------
  |  |  291|  79.1k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|  79.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 5353|  79.1k|        s += pos;
 5354|  79.1k|        writer.pos = pos;
 5355|  79.1k|    }
 5356|       |
 5357|   178k|    if (unicode_decode_utf8_impl(&writer, starts, s, end,
  ------------------
  |  Branch (5357:9): [True: 2.31k, False: 176k]
  ------------------
 5358|   178k|                                 error_handler, errors,
 5359|   178k|                                 consumed) < 0) {
 5360|  2.31k|        _PyUnicodeWriter_Dealloc(&writer);
 5361|  2.31k|        return NULL;
 5362|  2.31k|    }
 5363|   176k|    return _PyUnicodeWriter_Finish(&writer);
 5364|   178k|}
unicodeobject.c:find_first_nonascii:
 5005|  2.07M|{
 5006|       |    // The search is done in `size_t` chunks.
 5007|       |    // The start and end might not be aligned at `size_t` boundaries,
 5008|       |    // so they're handled specially.
 5009|       |
 5010|  2.07M|    const unsigned char *p = start;
 5011|       |
 5012|  2.07M|    if (end - start >= SIZEOF_SIZE_T) {
  ------------------
  |  | 1955|  2.07M|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (5012:9): [True: 449k, False: 1.62M]
  ------------------
 5013|       |        // Avoid unaligned read.
 5014|   449k|#if PY_LITTLE_ENDIAN && HAVE_CTZ
 5015|   449k|        size_t u;
 5016|   449k|        memcpy(&u, p, sizeof(size_t));
 5017|   449k|        u &= ASCII_CHAR_MASK;
  ------------------
  |  | 4911|   449k|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
 5018|   449k|        if (u) {
  ------------------
  |  Branch (5018:13): [True: 73.0k, False: 376k]
  ------------------
 5019|  73.0k|            return (ctz(u) - 7) / 8;
 5020|  73.0k|        }
 5021|   376k|        p = _Py_ALIGN_DOWN(p + SIZEOF_SIZE_T, SIZEOF_SIZE_T);
  ------------------
  |  |  241|   376k|#define _Py_ALIGN_DOWN(p, a) ((void *)((uintptr_t)(p) & ~(uintptr_t)((a) - 1)))
  ------------------
 5022|       |#else /* PY_LITTLE_ENDIAN && HAVE_CTZ */
 5023|       |        const unsigned char *p2 = _Py_ALIGN_UP(p, SIZEOF_SIZE_T);
 5024|       |        while (p < p2) {
 5025|       |            if (*p & 0x80) {
 5026|       |                return p - start;
 5027|       |            }
 5028|       |            p++;
 5029|       |        }
 5030|       |#endif
 5031|       |
 5032|   376k|        const unsigned char *e = end - SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   376k|#define SIZEOF_SIZE_T 8
  ------------------
 5033|  1.99M|        while (p <= e) {
  ------------------
  |  Branch (5033:16): [True: 1.64M, False: 358k]
  ------------------
 5034|  1.64M|            size_t u = (*(const size_t *)p) & ASCII_CHAR_MASK;
  ------------------
  |  | 4911|  1.64M|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
 5035|  1.64M|            if (u) {
  ------------------
  |  Branch (5035:17): [True: 18.5k, False: 1.62M]
  ------------------
 5036|  18.5k|#if PY_LITTLE_ENDIAN && HAVE_CTZ
 5037|  18.5k|                return p - start + (ctz(u) - 7) / 8;
 5038|       |#else
 5039|       |                // big endian and minor compilers are difficult to test.
 5040|       |                // fallback to per byte check.
 5041|       |                break;
 5042|       |#endif
 5043|  18.5k|            }
 5044|  1.62M|            p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|  1.62M|#define SIZEOF_SIZE_T 8
  ------------------
 5045|  1.62M|        }
 5046|   376k|    }
 5047|  1.98M|#if PY_LITTLE_ENDIAN && HAVE_CTZ
 5048|  2.07M|    assert((end - p) < SIZEOF_SIZE_T);
  ------------------
  |  Branch (5048:5): [True: 1.98M, False: 0]
  ------------------
 5049|       |    // we can not use *(const size_t*)p to avoid buffer overrun.
 5050|  1.98M|    size_t u = load_unaligned(p, end - p) & ASCII_CHAR_MASK;
  ------------------
  |  | 4911|  1.98M|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
 5051|  1.98M|    if (u) {
  ------------------
  |  Branch (5051:9): [True: 86.7k, False: 1.89M]
  ------------------
 5052|  86.7k|        return p - start + (ctz(u) - 7) / 8;
 5053|  86.7k|    }
 5054|  1.89M|    return end - start;
 5055|       |#else
 5056|       |    while (p < end) {
 5057|       |        if (*p & 0x80) {
 5058|       |            break;
 5059|       |        }
 5060|       |        p++;
 5061|       |    }
 5062|       |    return p - start;
 5063|       |#endif
 5064|  1.98M|}
unicodeobject.c:ctz:
 4927|   178k|{
 4928|   178k|    return __builtin_ctzll((unsigned long long)v);
 4929|   178k|}
unicodeobject.c:load_unaligned:
 4951|  1.98M|{
 4952|  1.98M|    union {
 4953|  1.98M|        size_t s;
 4954|  1.98M|        unsigned char b[SIZEOF_SIZE_T];
 4955|  1.98M|    } u;
 4956|  1.98M|    u.s = 0;
 4957|       |    // This switch statement assumes little endian because:
 4958|       |    // * union is faster than bitwise or and shift.
 4959|       |    // * big endian machine is rare and hard to maintain.
 4960|  1.98M|    switch (size) {
 4961|      0|    default:
  ------------------
  |  Branch (4961:5): [True: 0, False: 1.98M]
  ------------------
 4962|      0|#if SIZEOF_SIZE_T == 8
 4963|      0|    case 8:
  ------------------
  |  Branch (4963:5): [True: 0, False: 1.98M]
  ------------------
 4964|      0|        u.b[7] = p[7];
 4965|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4966|  77.9k|    case 7:
  ------------------
  |  Branch (4966:5): [True: 77.9k, False: 1.90M]
  ------------------
 4967|  77.9k|        u.b[6] = p[6];
 4968|  77.9k|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|  77.9k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4969|   126k|    case 6:
  ------------------
  |  Branch (4969:5): [True: 48.2k, False: 1.93M]
  ------------------
 4970|   126k|        u.b[5] = p[5];
 4971|   126k|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|   126k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4972|   360k|    case 5:
  ------------------
  |  Branch (4972:5): [True: 233k, False: 1.74M]
  ------------------
 4973|   360k|        u.b[4] = p[4];
 4974|   360k|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|   360k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4975|   360k|#endif
 4976|   467k|    case 4:
  ------------------
  |  Branch (4976:5): [True: 107k, False: 1.87M]
  ------------------
 4977|   467k|        u.b[3] = p[3];
 4978|   467k|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|   467k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4979|   634k|    case 3:
  ------------------
  |  Branch (4979:5): [True: 167k, False: 1.81M]
  ------------------
 4980|   634k|        u.b[2] = p[2];
 4981|   634k|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|   634k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4982|  1.82M|    case 2:
  ------------------
  |  Branch (4982:5): [True: 1.19M, False: 786k]
  ------------------
 4983|  1.82M|        u.b[1] = p[1];
 4984|  1.82M|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|  1.82M|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4985|  1.88M|    case 1:
  ------------------
  |  Branch (4985:5): [True: 52.9k, False: 1.92M]
  ------------------
 4986|  1.88M|        u.b[0] = p[0];
 4987|  1.88M|        break;
 4988|  98.7k|    case 0:
  ------------------
  |  Branch (4988:5): [True: 98.7k, False: 1.88M]
  ------------------
 4989|  98.7k|        break;
 4990|  1.98M|    }
 4991|  1.98M|    return u.s;
 4992|  1.98M|}
unicodeobject.c:utf8_count_codepoints:
 5083|   169k|{
 5084|   169k|    Py_ssize_t len = 0;
 5085|       |
 5086|   169k|    if (end - s >= SIZEOF_SIZE_T) {
  ------------------
  |  | 1955|   169k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (5086:9): [True: 90.3k, False: 79.3k]
  ------------------
 5087|   338k|        while (!_Py_IS_ALIGNED(s, ALIGNOF_SIZE_T)) {
  ------------------
  |  |  246|   338k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  ------------------
  |  Branch (5087:16): [True: 248k, False: 90.3k]
  ------------------
 5088|   248k|            len += scalar_utf8_start_char(*s++);
 5089|   248k|        }
 5090|       |
 5091|   158k|        while (s + SIZEOF_SIZE_T <= end) {
  ------------------
  |  | 1955|   158k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (5091:16): [True: 67.9k, False: 90.3k]
  ------------------
 5092|  67.9k|            const unsigned char *e = end;
 5093|  67.9k|            if (e - s > SIZEOF_SIZE_T * 255) {
  ------------------
  |  | 1955|  67.9k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (5093:17): [True: 860, False: 67.0k]
  ------------------
 5094|    860|                e = s + SIZEOF_SIZE_T * 255;
  ------------------
  |  | 1955|    860|#define SIZEOF_SIZE_T 8
  ------------------
 5095|    860|            }
 5096|  67.9k|            Py_ssize_t vstart = 0;
 5097|   689k|            while (s + SIZEOF_SIZE_T <= e) {
  ------------------
  |  | 1955|   689k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (5097:20): [True: 621k, False: 67.9k]
  ------------------
 5098|   621k|                size_t v = *(size_t*)s;
 5099|   621k|                size_t vs = vector_utf8_start_chars(v);
 5100|   621k|                vstart += vs;
 5101|   621k|                s += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   621k|#define SIZEOF_SIZE_T 8
  ------------------
 5102|   621k|            }
 5103|  67.9k|            vstart = (vstart & VECTOR_00FF) + ((vstart >> 8) & VECTOR_00FF);
  ------------------
  |  | 4914|  67.9k|# define VECTOR_00FF     0x00ff00ff00ff00ffULL
  ------------------
                          vstart = (vstart & VECTOR_00FF) + ((vstart >> 8) & VECTOR_00FF);
  ------------------
  |  | 4914|  67.9k|# define VECTOR_00FF     0x00ff00ff00ff00ffULL
  ------------------
 5104|  67.9k|            vstart += vstart >> 16;
 5105|  67.9k|#if SIZEOF_SIZE_T == 8
 5106|  67.9k|            vstart += vstart >> 32;
 5107|  67.9k|#endif
 5108|  67.9k|            len += vstart & 0x7ff;
 5109|  67.9k|        }
 5110|  90.3k|    }
 5111|   773k|    while (s < end) {
  ------------------
  |  Branch (5111:12): [True: 604k, False: 169k]
  ------------------
 5112|   604k|        len += scalar_utf8_start_char(*s++);
 5113|   604k|    }
 5114|   169k|    return len;
 5115|   169k|}
unicodeobject.c:scalar_utf8_start_char:
 5068|   852k|{
 5069|       |    // 0xxxxxxx or 11xxxxxx are first byte.
 5070|   852k|    return (~ch >> 7 | ch >> 6) & 1;
 5071|   852k|}
unicodeobject.c:vector_utf8_start_chars:
 5075|   621k|{
 5076|   621k|    return ((~v >> 7) | (v >> 6)) & VECTOR_0101;
  ------------------
  |  | 4913|   621k|# define VECTOR_0101     0x0101010101010101ULL
  ------------------
 5077|   621k|}
unicodeobject.c:ascii_decode:
 5119|   322k|{
 5120|   322k|#if SIZEOF_SIZE_T <= SIZEOF_VOID_P
 5121|   322k|    if (_Py_IS_ALIGNED(start, ALIGNOF_SIZE_T)
  ------------------
  |  |  246|   644k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 91.0k, False: 231k]
  |  |  ------------------
  ------------------
 5122|  91.0k|        && _Py_IS_ALIGNED(dest, ALIGNOF_SIZE_T))
  ------------------
  |  |  246|  91.0k|#define _Py_IS_ALIGNED(p, a) (!((uintptr_t)(p) & (uintptr_t)((a) - 1)))
  |  |  ------------------
  |  |  |  Branch (246:30): [True: 84.0k, False: 7.04k]
  |  |  ------------------
  ------------------
 5123|  84.0k|    {
 5124|       |        /* Fast path, see in STRINGLIB(utf8_decode) for
 5125|       |           an explanation. */
 5126|  84.0k|        const char *p = start;
 5127|  84.0k|        Py_UCS1 *q = dest;
 5128|   204k|        while (p + SIZEOF_SIZE_T <= end) {
  ------------------
  |  | 1955|   204k|#define SIZEOF_SIZE_T 8
  ------------------
  |  Branch (5128:16): [True: 120k, False: 83.8k]
  ------------------
 5129|   120k|            size_t value = *(const size_t *) p;
 5130|   120k|            if (value & ASCII_CHAR_MASK)
  ------------------
  |  | 4911|   120k|# define ASCII_CHAR_MASK 0x8080808080808080ULL
  ------------------
  |  Branch (5130:17): [True: 202, False: 120k]
  ------------------
 5131|    202|                break;
 5132|   120k|            *((size_t *)q) = value;
 5133|   120k|            p += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   120k|#define SIZEOF_SIZE_T 8
  ------------------
 5134|   120k|            q += SIZEOF_SIZE_T;
  ------------------
  |  | 1955|   120k|#define SIZEOF_SIZE_T 8
  ------------------
 5135|   120k|        }
 5136|   341k|        while (p < end) {
  ------------------
  |  Branch (5136:16): [True: 257k, False: 83.7k]
  ------------------
 5137|   257k|            if ((unsigned char)*p & 0x80)
  ------------------
  |  Branch (5137:17): [True: 282, False: 257k]
  ------------------
 5138|    282|                break;
 5139|   257k|            *q++ = *p++;
 5140|   257k|        }
 5141|  84.0k|        return p - start;
 5142|  84.0k|    }
 5143|   238k|#endif
 5144|   238k|    Py_ssize_t pos = find_first_nonascii((const unsigned char*)start,
 5145|   238k|                                         (const unsigned char*)end);
 5146|   238k|    memcpy(dest, start, pos);
 5147|   238k|    return pos;
 5148|   322k|}
unicodeobject.c:unicode_decode_utf8_impl:
 5156|   191k|{
 5157|   191k|    Py_ssize_t startinpos, endinpos;
 5158|   191k|    const char *errmsg = "";
 5159|   191k|    PyObject *error_handler_obj = NULL;
 5160|   191k|    PyObject *exc = NULL;
 5161|       |
 5162|   262k|    while (s < end) {
  ------------------
  |  Branch (5162:12): [True: 257k, False: 4.62k]
  ------------------
 5163|   257k|        Py_UCS4 ch;
 5164|   257k|        int kind = writer->kind;
 5165|       |
 5166|   257k|        if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (5166:13): [True: 80.7k, False: 176k]
  ------------------
 5167|  80.7k|            if (PyUnicode_IS_ASCII(writer->buffer))
  ------------------
  |  |  227|  80.7k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  80.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  80.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 8.69k, False: 72.0k]
  |  |  ------------------
  ------------------
 5168|  8.69k|                ch = asciilib_utf8_decode(&s, end, writer->data, &writer->pos);
 5169|  72.0k|            else
 5170|  72.0k|                ch = ucs1lib_utf8_decode(&s, end, writer->data, &writer->pos);
 5171|   176k|        } else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (5171:20): [True: 126k, False: 50.1k]
  ------------------
 5172|   126k|            ch = ucs2lib_utf8_decode(&s, end, writer->data, &writer->pos);
 5173|   126k|        } else {
 5174|  50.1k|            assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (5174:13): [True: 50.1k, False: 0]
  ------------------
 5175|  50.1k|            ch = ucs4lib_utf8_decode(&s, end, writer->data, &writer->pos);
 5176|  50.1k|        }
 5177|       |
 5178|   257k|        switch (ch) {
 5179|   186k|        case 0:
  ------------------
  |  Branch (5179:9): [True: 186k, False: 71.5k]
  ------------------
 5180|   186k|            if (s == end || consumed)
  ------------------
  |  Branch (5180:17): [True: 184k, False: 1.45k]
  |  Branch (5180:29): [True: 1, False: 1.45k]
  ------------------
 5181|   184k|                goto End;
 5182|  1.45k|            errmsg = "unexpected end of data";
 5183|  1.45k|            startinpos = s - starts;
 5184|  1.45k|            endinpos = end - starts;
 5185|  1.45k|            break;
 5186|  33.4k|        case 1:
  ------------------
  |  Branch (5186:9): [True: 33.4k, False: 224k]
  ------------------
 5187|  33.4k|            errmsg = "invalid start byte";
 5188|  33.4k|            startinpos = s - starts;
 5189|  33.4k|            endinpos = startinpos + 1;
 5190|  33.4k|            break;
 5191|  16.2k|        case 2:
  ------------------
  |  Branch (5191:9): [True: 16.2k, False: 241k]
  ------------------
 5192|  16.2k|            if (consumed && (unsigned char)s[0] == 0xED && end - s == 2
  ------------------
  |  Branch (5192:17): [True: 0, False: 16.2k]
  |  Branch (5192:29): [True: 0, False: 0]
  |  Branch (5192:60): [True: 0, False: 0]
  ------------------
 5193|      0|                && (unsigned char)s[1] >= 0xA0 && (unsigned char)s[1] <= 0xBF)
  ------------------
  |  Branch (5193:20): [True: 0, False: 0]
  |  Branch (5193:51): [True: 0, False: 0]
  ------------------
 5194|      0|            {
 5195|       |                /* Truncated surrogate code in range D800-DFFF */
 5196|      0|                goto End;
 5197|      0|            }
 5198|  16.2k|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|  16.2k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 5199|  20.8k|        case 3:
  ------------------
  |  Branch (5199:9): [True: 4.57k, False: 253k]
  ------------------
 5200|  22.6k|        case 4:
  ------------------
  |  Branch (5200:9): [True: 1.80k, False: 255k]
  ------------------
 5201|  22.6k|            errmsg = "invalid continuation byte";
 5202|  22.6k|            startinpos = s - starts;
 5203|  22.6k|            endinpos = startinpos + ch - 1;
 5204|  22.6k|            break;
 5205|  15.4k|        default:
  ------------------
  |  Branch (5205:9): [True: 15.4k, False: 242k]
  ------------------
 5206|       |            // ch doesn't fit into kind, so change the buffer kind to write
 5207|       |            // the character
 5208|  15.4k|            if (_PyUnicodeWriter_WriteCharInline(writer, ch) < 0)
  ------------------
  |  Branch (5208:17): [True: 0, False: 15.4k]
  ------------------
 5209|      0|                goto onError;
 5210|  15.4k|            continue;
 5211|   257k|        }
 5212|       |
 5213|  57.5k|        if (error_handler == _Py_ERROR_UNKNOWN)
  ------------------
  |  Branch (5213:13): [True: 2.99k, False: 54.5k]
  ------------------
 5214|  2.99k|            error_handler = _Py_GetErrorHandler(errors);
 5215|       |
 5216|  57.5k|        switch (error_handler) {
 5217|      0|        case _Py_ERROR_IGNORE:
  ------------------
  |  Branch (5217:9): [True: 0, False: 57.5k]
  ------------------
 5218|      0|            s += (endinpos - startinpos);
 5219|      0|            break;
 5220|       |
 5221|  55.2k|        case _Py_ERROR_REPLACE:
  ------------------
  |  Branch (5221:9): [True: 55.2k, False: 2.31k]
  ------------------
 5222|  55.2k|            if (_PyUnicodeWriter_WriteCharInline(writer, 0xfffd) < 0)
  ------------------
  |  Branch (5222:17): [True: 0, False: 55.2k]
  ------------------
 5223|      0|                goto onError;
 5224|  55.2k|            s += (endinpos - startinpos);
 5225|  55.2k|            break;
 5226|       |
 5227|      0|        case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (5227:9): [True: 0, False: 57.5k]
  ------------------
 5228|      0|        {
 5229|      0|            Py_ssize_t i;
 5230|       |
 5231|      0|            if (_PyUnicodeWriter_PrepareKind(writer, PyUnicode_2BYTE_KIND) < 0)
  ------------------
  |  |  582|      0|    ((KIND) <= (WRITER)->kind                                         \
  |  |  ------------------
  |  |  |  Branch (582:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  583|      0|     ? 0                                                              \
  |  |  584|      0|     : _PyUnicodeWriter_PrepareKindInternal((WRITER), (KIND)))
  ------------------
  |  Branch (5231:17): [True: 0, False: 0]
  ------------------
 5232|      0|                goto onError;
 5233|      0|            assert(_PyUnicodeWriter_CanWrite(writer));
  ------------------
  |  Branch (5233:13): [True: 0, False: 0]
  ------------------
 5234|      0|            for (i=startinpos; i<endinpos; i++) {
  ------------------
  |  Branch (5234:32): [True: 0, False: 0]
  ------------------
 5235|      0|                ch = (Py_UCS4)(unsigned char)(starts[i]);
 5236|      0|                PyUnicode_WRITE(writer->kind, writer->data, writer->pos,
  ------------------
  |  |  335|      0|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|      0|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 5237|      0|                                ch + 0xdc00);
 5238|      0|                writer->pos++;
 5239|      0|            }
 5240|      0|            s += (endinpos - startinpos);
 5241|      0|            break;
 5242|      0|        }
 5243|       |
 5244|  2.31k|        default:
  ------------------
  |  Branch (5244:9): [True: 2.31k, False: 55.2k]
  ------------------
 5245|  2.31k|            if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (5245:17): [True: 2.31k, False: 0]
  ------------------
 5246|  2.31k|                    errors, &error_handler_obj,
 5247|  2.31k|                    "utf-8", errmsg,
 5248|  2.31k|                    &starts, &end, &startinpos, &endinpos, &exc, &s,
 5249|  2.31k|                    writer)) {
 5250|  2.31k|                goto onError;
 5251|  2.31k|            }
 5252|       |
 5253|      0|            if (_PyUnicodeWriter_Prepare(writer, end - s, 127) < 0) {
  ------------------
  |  |  562|      0|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  563|      0|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|      0|     ? 0                                                              \
  |  |  565|      0|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  566|      0|        ? 0                                                           \
  |  |  567|      0|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (5253:17): [True: 0, False: 0]
  ------------------
 5254|      0|                goto onError;
 5255|      0|            }
 5256|  57.5k|        }
 5257|  57.5k|    }
 5258|       |
 5259|   189k|End:
 5260|   189k|    if (consumed)
  ------------------
  |  Branch (5260:9): [True: 2, False: 189k]
  ------------------
 5261|      2|        *consumed = s - starts;
 5262|       |
 5263|   189k|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|   189k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   189k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   189k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5264|   189k|    Py_XDECREF(exc);
  ------------------
  |  |  524|   189k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   189k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   189k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5265|   189k|    return 0;
 5266|       |
 5267|  2.31k|onError:
 5268|  2.31k|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|  2.31k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5269|  2.31k|    Py_XDECREF(exc);
  ------------------
  |  |  524|  2.31k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5270|  2.31k|    return -1;
 5271|   191k|}
unicodeobject.c:unicode_encode_utf8:
 5706|  6.34k|{
 5707|  6.34k|    if (!PyUnicode_Check(unicode)) {
  ------------------
  |  |  103|  6.34k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  6.34k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (5707:9): [True: 0, False: 6.34k]
  ------------------
 5708|      0|        PyErr_BadArgument();
 5709|      0|        return NULL;
 5710|      0|    }
 5711|       |
 5712|  6.34k|    if (PyUnicode_UTF8(unicode))
  ------------------
  |  Branch (5712:9): [True: 6.15k, False: 187]
  ------------------
 5713|  6.15k|        return PyBytes_FromStringAndSize(PyUnicode_UTF8(unicode),
 5714|  6.15k|                                         PyUnicode_UTF8_LENGTH(unicode));
 5715|       |
 5716|    187|    int kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|    187|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    374|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 187, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5717|    187|    const void *data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|    187|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    187|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    187|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5718|    187|    Py_ssize_t size = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|    187|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    187|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    187|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5719|       |
 5720|    187|    PyBytesWriter *writer;
 5721|    187|    char *end;
 5722|       |
 5723|    187|    switch (kind) {
 5724|      0|    default:
  ------------------
  |  Branch (5724:5): [True: 0, False: 187]
  ------------------
 5725|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 5726|     27|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (5726:5): [True: 27, False: 160]
  ------------------
 5727|       |        /* the string cannot be ASCII, or PyUnicode_UTF8() would be set */
 5728|     27|        assert(!PyUnicode_IS_ASCII(unicode));
  ------------------
  |  Branch (5728:9): [True: 27, False: 0]
  ------------------
 5729|     27|        writer = ucs1lib_utf8_encoder(unicode, data, size,
 5730|     27|                                      error_handler, errors, &end);
 5731|     27|        break;
 5732|     99|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (5732:5): [True: 99, False: 88]
  ------------------
 5733|     99|        writer = ucs2lib_utf8_encoder(unicode, data, size,
 5734|     99|                                      error_handler, errors, &end);
 5735|     99|        break;
 5736|     61|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (5736:5): [True: 61, False: 126]
  ------------------
 5737|     61|        writer = ucs4lib_utf8_encoder(unicode, data, size,
 5738|     61|                                      error_handler, errors, &end);
 5739|     61|        break;
 5740|    187|    }
 5741|       |
 5742|    187|    if (writer == NULL) {
  ------------------
  |  Branch (5742:9): [True: 0, False: 187]
  ------------------
 5743|      0|        PyBytesWriter_Discard(writer);
 5744|      0|        return NULL;
 5745|      0|    }
 5746|    187|    return PyBytesWriter_FinishWithPointer(writer, end);
 5747|    187|}
unicodeobject.c:raise_encode_exception:
 7142|  35.5k|{
 7143|  35.5k|    make_encode_exception(exceptionObject,
 7144|  35.5k|                          encoding, unicode, startpos, endpos, reason);
 7145|  35.5k|    if (*exceptionObject != NULL)
  ------------------
  |  Branch (7145:9): [True: 35.5k, False: 0]
  ------------------
 7146|  35.5k|        PyCodec_StrictErrors(*exceptionObject);
 7147|  35.5k|}
unicodeobject.c:make_encode_exception:
 7116|  35.6k|{
 7117|  35.6k|    if (*exceptionObject == NULL) {
  ------------------
  |  Branch (7117:9): [True: 35.6k, False: 0]
  ------------------
 7118|  35.6k|        *exceptionObject = PyObject_CallFunction(
 7119|  35.6k|            PyExc_UnicodeEncodeError, "sOnns",
 7120|  35.6k|            encoding, unicode, startpos, endpos, reason);
 7121|  35.6k|    }
 7122|      0|    else {
 7123|      0|        if (PyUnicodeEncodeError_SetStart(*exceptionObject, startpos))
  ------------------
  |  Branch (7123:13): [True: 0, False: 0]
  ------------------
 7124|      0|            goto onError;
 7125|      0|        if (PyUnicodeEncodeError_SetEnd(*exceptionObject, endpos))
  ------------------
  |  Branch (7125:13): [True: 0, False: 0]
  ------------------
 7126|      0|            goto onError;
 7127|      0|        if (PyUnicodeEncodeError_SetReason(*exceptionObject, reason))
  ------------------
  |  Branch (7127:13): [True: 0, False: 0]
  ------------------
 7128|      0|            goto onError;
 7129|      0|        return;
 7130|      0|      onError:
 7131|       |        Py_CLEAR(*exceptionObject);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 7132|      0|    }
 7133|  35.6k|}
unicodeobject.c:unicode_encode_call_errorhandler:
 7160|     34|{
 7161|     34|    static const char *argparse = "On;encoding error handler must return (str/bytes, int) tuple";
 7162|     34|    Py_ssize_t len;
 7163|     34|    PyObject *restuple;
 7164|     34|    PyObject *resunicode;
 7165|       |
 7166|     34|    if (*errorHandler == NULL) {
  ------------------
  |  Branch (7166:9): [True: 34, False: 0]
  ------------------
 7167|     34|        *errorHandler = PyCodec_LookupError(errors);
 7168|     34|        if (*errorHandler == NULL)
  ------------------
  |  Branch (7168:13): [True: 0, False: 34]
  ------------------
 7169|      0|            return NULL;
 7170|     34|    }
 7171|       |
 7172|     34|    len = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|     34|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7173|       |
 7174|     34|    make_encode_exception(exceptionObject,
 7175|     34|                          encoding, unicode, startpos, endpos, reason);
 7176|     34|    if (*exceptionObject == NULL)
  ------------------
  |  Branch (7176:9): [True: 0, False: 34]
  ------------------
 7177|      0|        return NULL;
 7178|       |
 7179|     34|    restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
 7180|     34|    if (restuple == NULL)
  ------------------
  |  Branch (7180:9): [True: 34, False: 0]
  ------------------
 7181|     34|        return NULL;
 7182|      0|    if (!PyTuple_Check(restuple)) {
  ------------------
  |  |   27|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (7182:9): [True: 0, False: 0]
  ------------------
 7183|      0|        PyErr_SetString(PyExc_TypeError, &argparse[3]);
 7184|      0|        Py_DECREF(restuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7185|      0|        return NULL;
 7186|      0|    }
 7187|      0|    if (!PyArg_ParseTuple(restuple, argparse,
  ------------------
  |  Branch (7187:9): [True: 0, False: 0]
  ------------------
 7188|      0|                          &resunicode, newpos)) {
 7189|      0|        Py_DECREF(restuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7190|      0|        return NULL;
 7191|      0|    }
 7192|      0|    if (!PyUnicode_Check(resunicode) && !PyBytes_Check(resunicode)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (!PyUnicode_Check(resunicode) && !PyBytes_Check(resunicode)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (7192:9): [True: 0, False: 0]
  |  Branch (7192:41): [True: 0, False: 0]
  ------------------
 7193|      0|        PyErr_SetString(PyExc_TypeError, &argparse[3]);
 7194|      0|        Py_DECREF(restuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7195|      0|        return NULL;
 7196|      0|    }
 7197|      0|    if (*newpos<0)
  ------------------
  |  Branch (7197:9): [True: 0, False: 0]
  ------------------
 7198|      0|        *newpos = len + *newpos;
 7199|      0|    if (*newpos<0 || *newpos>len) {
  ------------------
  |  Branch (7199:9): [True: 0, False: 0]
  |  Branch (7199:22): [True: 0, False: 0]
  ------------------
 7200|      0|        PyErr_Format(PyExc_IndexError, "position %zd from error handler out of bounds", *newpos);
 7201|      0|        Py_DECREF(restuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7202|      0|        return NULL;
 7203|      0|    }
 7204|      0|    Py_INCREF(resunicode);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7205|      0|    Py_DECREF(restuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7206|      0|    return resunicode;
 7207|      0|}
unicodeobject.c:unicode_encode_ucs1:
 7213|  35.5k|{
 7214|       |    /* input state */
 7215|  35.5k|    Py_ssize_t pos=0, size;
 7216|  35.5k|    int kind;
 7217|  35.5k|    const void *data;
 7218|  35.5k|    const char *encoding = (limit == 256) ? "latin-1" : "ascii";
  ------------------
  |  Branch (7218:28): [True: 0, False: 35.5k]
  ------------------
 7219|  35.5k|    const char *reason = (limit == 256) ? "ordinal not in range(256)" : "ordinal not in range(128)";
  ------------------
  |  Branch (7219:26): [True: 0, False: 35.5k]
  ------------------
 7220|  35.5k|    PyObject *error_handler_obj = NULL;
 7221|  35.5k|    PyObject *exc = NULL;
 7222|  35.5k|    _Py_error_handler error_handler = _Py_ERROR_UNKNOWN;
 7223|  35.5k|    PyObject *rep = NULL;
 7224|       |
 7225|  35.5k|    size = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  35.5k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7226|  35.5k|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  35.5k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  71.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 35.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7227|  35.5k|    data = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|  35.5k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7228|       |    /* allocate enough for a simple encoding without
 7229|       |       replacements, if we need more, we'll resize */
 7230|  35.5k|    if (size == 0)
  ------------------
  |  Branch (7230:9): [True: 0, False: 35.5k]
  ------------------
 7231|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
  ------------------
  |  |  598|      0|#define Py_CONSTANT_EMPTY_BYTES 8
  ------------------
 7232|       |
 7233|       |    /* output object */
 7234|  35.5k|    PyBytesWriter *writer = PyBytesWriter_Create(size);
 7235|  35.5k|    if (writer == NULL) {
  ------------------
  |  Branch (7235:9): [True: 0, False: 35.5k]
  ------------------
 7236|      0|        return NULL;
 7237|      0|    }
 7238|       |    /* pointer into the output */
 7239|  35.5k|    char *str = PyBytesWriter_GetData(writer);
 7240|       |
 7241|  54.5k|    while (pos < size) {
  ------------------
  |  Branch (7241:12): [True: 54.5k, False: 0]
  ------------------
 7242|  54.5k|        Py_UCS4 ch = PyUnicode_READ(kind, data, pos);
  ------------------
  |  |  354|  54.5k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  54.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  54.5k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  54.5k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  54.5k|                   (index))
  ------------------
 7243|       |
 7244|       |        /* can we encode this? */
 7245|  54.5k|        if (ch < limit) {
  ------------------
  |  Branch (7245:13): [True: 18.9k, False: 35.5k]
  ------------------
 7246|       |            /* no overflow check, because we know that the space is enough */
 7247|  18.9k|            *str++ = (char)ch;
 7248|  18.9k|            ++pos;
 7249|  18.9k|        }
 7250|  35.5k|        else {
 7251|  35.5k|            Py_ssize_t newpos, i;
 7252|       |            /* startpos for collecting unencodable chars */
 7253|  35.5k|            Py_ssize_t collstart = pos;
 7254|  35.5k|            Py_ssize_t collend = collstart + 1;
 7255|       |            /* find all unecodable characters */
 7256|       |
 7257|   312k|            while ((collend < size) && (PyUnicode_READ(kind, data, collend) >= limit))
  ------------------
  |  |  354|   284k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   284k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   284k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   284k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   284k|                   (index))
  ------------------
  |  Branch (7257:20): [True: 284k, False: 27.8k]
  |  Branch (7257:40): [True: 276k, False: 7.74k]
  ------------------
 7258|   276k|                ++collend;
 7259|       |
 7260|       |            /* Only overallocate the buffer if it's not the last write */
 7261|  35.5k|            writer->overallocate = (collend < size);
 7262|       |
 7263|       |            /* cache callback name lookup (if not done yet, i.e. it's the first error) */
 7264|  35.5k|            if (error_handler == _Py_ERROR_UNKNOWN)
  ------------------
  |  Branch (7264:17): [True: 35.5k, False: 0]
  ------------------
 7265|  35.5k|                error_handler = _Py_GetErrorHandler(errors);
 7266|       |
 7267|  35.5k|            switch (error_handler) {
 7268|  35.5k|            case _Py_ERROR_STRICT:
  ------------------
  |  Branch (7268:13): [True: 35.5k, False: 0]
  ------------------
 7269|  35.5k|                raise_encode_exception(&exc, encoding, unicode, collstart, collend, reason);
 7270|  35.5k|                goto onError;
 7271|       |
 7272|      0|            case _Py_ERROR_REPLACE:
  ------------------
  |  Branch (7272:13): [True: 0, False: 35.5k]
  ------------------
 7273|      0|                memset(str, '?', collend - collstart);
 7274|      0|                str += (collend - collstart);
 7275|      0|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 7276|      0|            case _Py_ERROR_IGNORE:
  ------------------
  |  Branch (7276:13): [True: 0, False: 35.5k]
  ------------------
 7277|      0|                pos = collend;
 7278|      0|                break;
 7279|       |
 7280|      0|            case _Py_ERROR_BACKSLASHREPLACE:
  ------------------
  |  Branch (7280:13): [True: 0, False: 35.5k]
  ------------------
 7281|      0|                str = backslashreplace(writer, str,
 7282|      0|                                       unicode, collstart, collend);
 7283|      0|                if (str == NULL)
  ------------------
  |  Branch (7283:21): [True: 0, False: 0]
  ------------------
 7284|      0|                    goto onError;
 7285|      0|                pos = collend;
 7286|      0|                break;
 7287|       |
 7288|      0|            case _Py_ERROR_XMLCHARREFREPLACE:
  ------------------
  |  Branch (7288:13): [True: 0, False: 35.5k]
  ------------------
 7289|      0|                str = xmlcharrefreplace(writer, str,
 7290|      0|                                        unicode, collstart, collend);
 7291|      0|                if (str == NULL)
  ------------------
  |  Branch (7291:21): [True: 0, False: 0]
  ------------------
 7292|      0|                    goto onError;
 7293|      0|                pos = collend;
 7294|      0|                break;
 7295|       |
 7296|      0|            case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (7296:13): [True: 0, False: 35.5k]
  ------------------
 7297|      0|                for (i = collstart; i < collend; ++i) {
  ------------------
  |  Branch (7297:37): [True: 0, False: 0]
  ------------------
 7298|      0|                    ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
 7299|      0|                    if (ch < 0xdc80 || 0xdcff < ch) {
  ------------------
  |  Branch (7299:25): [True: 0, False: 0]
  |  Branch (7299:40): [True: 0, False: 0]
  ------------------
 7300|       |                        /* Not a UTF-8b surrogate */
 7301|      0|                        break;
 7302|      0|                    }
 7303|      0|                    *str++ = (char)(ch - 0xdc00);
 7304|      0|                    ++pos;
 7305|      0|                }
 7306|      0|                if (i >= collend)
  ------------------
  |  Branch (7306:21): [True: 0, False: 0]
  ------------------
 7307|      0|                    break;
 7308|      0|                collstart = pos;
 7309|      0|                assert(collstart != collend);
  ------------------
  |  Branch (7309:17): [True: 0, False: 0]
  ------------------
 7310|      0|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 7311|       |
 7312|      0|            default:
  ------------------
  |  Branch (7312:13): [True: 0, False: 35.5k]
  ------------------
 7313|      0|                rep = unicode_encode_call_errorhandler(errors, &error_handler_obj,
 7314|      0|                                                       encoding, reason, unicode, &exc,
 7315|      0|                                                       collstart, collend, &newpos);
 7316|      0|                if (rep == NULL)
  ------------------
  |  Branch (7316:21): [True: 0, False: 0]
  ------------------
 7317|      0|                    goto onError;
 7318|       |
 7319|      0|                if (newpos < collstart) {
  ------------------
  |  Branch (7319:21): [True: 0, False: 0]
  ------------------
 7320|      0|                    writer->overallocate = 1;
 7321|      0|                    str = PyBytesWriter_GrowAndUpdatePointer(writer,
 7322|      0|                                                             collstart - newpos,
 7323|      0|                                                             str);
 7324|      0|                    if (str == NULL) {
  ------------------
  |  Branch (7324:25): [True: 0, False: 0]
  ------------------
 7325|      0|                        goto onError;
 7326|      0|                    }
 7327|      0|                }
 7328|      0|                else {
 7329|       |                    /* Only overallocate the buffer if it's not the last write */
 7330|      0|                    writer->overallocate = (newpos < size);
 7331|       |
 7332|       |                    /* subtract preallocated bytes */
 7333|      0|                    if (PyBytesWriter_Grow(writer, -(newpos - collstart)) < 0) {
  ------------------
  |  Branch (7333:25): [True: 0, False: 0]
  ------------------
 7334|      0|                        goto onError;
 7335|      0|                    }
 7336|      0|                }
 7337|       |
 7338|      0|                const char *rep_str;
 7339|      0|                Py_ssize_t rep_len;
 7340|      0|                if (PyBytes_Check(rep)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7341|       |                    /* Directly copy bytes result to output. */
 7342|      0|                    rep_str = PyBytes_AS_STRING(rep);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7343|      0|                    rep_len = PyBytes_GET_SIZE(rep);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7344|      0|                }
 7345|      0|                else {
 7346|      0|                    assert(PyUnicode_Check(rep));
  ------------------
  |  Branch (7346:21): [True: 0, False: 0]
  ------------------
 7347|       |
 7348|      0|                    if (limit == 256 ?
  ------------------
  |  Branch (7348:25): [True: 0, False: 0]
  |  Branch (7348:25): [True: 0, False: 0]
  ------------------
 7349|      0|                        PyUnicode_KIND(rep) != PyUnicode_1BYTE_KIND :
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7350|      0|                        !PyUnicode_IS_ASCII(rep))
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7351|      0|                    {
 7352|       |                        /* Not all characters are smaller than limit */
 7353|      0|                        raise_encode_exception(&exc, encoding, unicode,
 7354|      0|                                               collstart, collend, reason);
 7355|      0|                        goto onError;
 7356|      0|                    }
 7357|      0|                    assert(PyUnicode_KIND(rep) == PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (7357:21): [True: 0, False: 0]
  |  Branch (7357:21): [True: 0, False: 0]
  ------------------
 7358|      0|                    rep_str = PyUnicode_DATA(rep);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7359|      0|                    rep_len = PyUnicode_GET_LENGTH(rep);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7360|      0|                }
 7361|       |
 7362|      0|                str = PyBytesWriter_GrowAndUpdatePointer(writer, rep_len, str);
 7363|      0|                if (str == NULL) {
  ------------------
  |  Branch (7363:21): [True: 0, False: 0]
  ------------------
 7364|      0|                    goto onError;
 7365|      0|                }
 7366|      0|                memcpy(str, rep_str, rep_len);
 7367|      0|                str += rep_len;
 7368|       |
 7369|      0|                pos = newpos;
 7370|      0|                Py_CLEAR(rep);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 7371|  35.5k|            }
 7372|       |
 7373|       |            /* If overallocation was disabled, ensure that it was the last
 7374|       |               write. Otherwise, we missed an optimization */
 7375|  35.5k|            assert(writer->overallocate || pos == size);
  ------------------
  |  Branch (7375:13): [True: 0, False: 0]
  |  Branch (7375:13): [True: 0, False: 0]
  ------------------
 7376|      0|        }
 7377|  54.5k|    }
 7378|       |
 7379|      0|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7380|      0|    Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7381|      0|    return PyBytesWriter_FinishWithPointer(writer, str);
 7382|       |
 7383|  35.5k|  onError:
 7384|  35.5k|    Py_XDECREF(rep);
  ------------------
  |  |  524|  35.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7385|  35.5k|    PyBytesWriter_Discard(writer);
 7386|  35.5k|    Py_XDECREF(error_handler_obj);
  ------------------
  |  |  524|  35.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7387|  35.5k|    Py_XDECREF(exc);
  ------------------
  |  |  524|  35.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7388|       |    return NULL;
 7389|  35.5k|}
unicodeobject.c:iconv_open_or_set_error:
 8251|    365|{
 8252|    365|    iconv_t cd = iconv_open(tocode, fromcode);
 8253|    365|    if (cd == (iconv_t)-1) {
  ------------------
  |  Branch (8253:9): [True: 223, False: 142]
  ------------------
 8254|    223|        if (errno == EINVAL) {
  ------------------
  |  Branch (8254:13): [True: 223, False: 0]
  ------------------
 8255|    223|            PyErr_Format(PyExc_LookupError, "unknown encoding: %s", encoding);
 8256|    223|        }
 8257|      0|        else {
 8258|      0|            PyErr_SetFromErrno(PyExc_OSError);
 8259|      0|        }
 8260|    223|    }
 8261|    365|    return cd;
 8262|    365|}
unicodeobject.c:charmap_decode_string:
 8615|  1.68k|{
 8616|  1.68k|    const char *starts = s;
 8617|  1.68k|    const char *e;
 8618|  1.68k|    Py_ssize_t startinpos, endinpos;
 8619|  1.68k|    PyObject *errorHandler = NULL, *exc = NULL;
 8620|  1.68k|    Py_ssize_t maplen;
 8621|  1.68k|    int mapkind;
 8622|  1.68k|    const void *mapdata;
 8623|  1.68k|    Py_UCS4 x;
 8624|  1.68k|    unsigned char ch;
 8625|       |
 8626|  1.68k|    maplen = PyUnicode_GET_LENGTH(mapping);
  ------------------
  |  |  299|  1.68k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8627|  1.68k|    mapdata = PyUnicode_DATA(mapping);
  ------------------
  |  |  284|  1.68k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8628|  1.68k|    mapkind = PyUnicode_KIND(mapping);
  ------------------
  |  |  258|  1.68k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  3.36k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.68k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8629|       |
 8630|      0|    e = s + size;
 8631|       |
 8632|  1.68k|    if (mapkind == PyUnicode_1BYTE_KIND && maplen >= 256) {
  ------------------
  |  Branch (8632:9): [True: 16, False: 1.66k]
  |  Branch (8632:44): [True: 16, False: 0]
  ------------------
 8633|       |        /* fast-path for cp037, cp500 and iso8859_1 encodings. iso8859_1
 8634|       |         * is disabled in encoding aliases, latin1 is preferred because
 8635|       |         * its implementation is faster. */
 8636|     16|        const Py_UCS1 *mapdata_ucs1 = (const Py_UCS1 *)mapdata;
 8637|     16|        Py_UCS1 *outdata = (Py_UCS1 *)writer->data;
 8638|     16|        Py_UCS4 maxchar = writer->maxchar;
 8639|       |
 8640|     16|        assert (writer->kind == PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (8640:9): [True: 16, False: 0]
  ------------------
 8641|  2.02k|        while (s < e) {
  ------------------
  |  Branch (8641:16): [True: 2.00k, False: 16]
  ------------------
 8642|  2.00k|            ch = *s;
 8643|  2.00k|            x = mapdata_ucs1[ch];
 8644|  2.00k|            if (x > maxchar) {
  ------------------
  |  Branch (8644:17): [True: 16, False: 1.98k]
  ------------------
 8645|     16|                if (_PyUnicodeWriter_Prepare(writer, 1, 0xff) == -1)
  ------------------
  |  |  562|     16|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 16]
  |  |  ------------------
  |  |  563|     16|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|     16|     ? 0                                                              \
  |  |  565|     16|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [Folded, False: 16]
  |  |  ------------------
  |  |  566|     16|        ? 0                                                           \
  |  |  567|     16|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (8645:21): [True: 0, False: 16]
  ------------------
 8646|      0|                    goto onError;
 8647|     16|                maxchar = writer->maxchar;
 8648|     16|                outdata = (Py_UCS1 *)writer->data;
 8649|     16|            }
 8650|  2.00k|            outdata[writer->pos] = x;
 8651|  2.00k|            writer->pos++;
 8652|  2.00k|            ++s;
 8653|  2.00k|        }
 8654|     16|        return 0;
 8655|     16|    }
 8656|       |
 8657|  4.42k|    while (s < e) {
  ------------------
  |  Branch (8657:12): [True: 4.41k, False: 5]
  ------------------
 8658|  4.41k|        if (mapkind == PyUnicode_2BYTE_KIND && maplen >= 256) {
  ------------------
  |  Branch (8658:13): [True: 4.41k, False: 0]
  |  Branch (8658:48): [True: 4.41k, False: 0]
  ------------------
 8659|  4.41k|            int outkind = writer->kind;
 8660|  4.41k|            const Py_UCS2 *mapdata_ucs2 = (const Py_UCS2 *)mapdata;
 8661|  4.41k|            if (outkind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (8661:17): [True: 2.99k, False: 1.41k]
  ------------------
 8662|  2.99k|                Py_UCS1 *outdata = (Py_UCS1 *)writer->data;
 8663|  2.99k|                Py_UCS4 maxchar = writer->maxchar;
 8664|   541k|                while (s < e) {
  ------------------
  |  Branch (8664:24): [True: 540k, False: 236]
  ------------------
 8665|   540k|                    ch = *s;
 8666|   540k|                    x = mapdata_ucs2[ch];
 8667|   540k|                    if (x > maxchar)
  ------------------
  |  Branch (8667:25): [True: 2.76k, False: 538k]
  ------------------
 8668|  2.76k|                        goto Error;
 8669|   538k|                    outdata[writer->pos] = x;
 8670|   538k|                    writer->pos++;
 8671|   538k|                    ++s;
 8672|   538k|                }
 8673|    236|                break;
 8674|  2.99k|            }
 8675|  1.41k|            else if (outkind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (8675:22): [True: 1.41k, False: 0]
  ------------------
 8676|  1.41k|                Py_UCS2 *outdata = (Py_UCS2 *)writer->data;
 8677|  3.67M|                while (s < e) {
  ------------------
  |  Branch (8677:24): [True: 3.67M, False: 1.40k]
  ------------------
 8678|  3.67M|                    ch = *s;
 8679|  3.67M|                    x = mapdata_ucs2[ch];
 8680|  3.67M|                    if (x == 0xFFFE)
  ------------------
  |  Branch (8680:25): [True: 14, False: 3.67M]
  ------------------
 8681|     14|                        goto Error;
 8682|  3.67M|                    outdata[writer->pos] = x;
 8683|  3.67M|                    writer->pos++;
 8684|  3.67M|                    ++s;
 8685|  3.67M|                }
 8686|  1.40k|                break;
 8687|  1.41k|            }
 8688|  4.41k|        }
 8689|      0|        ch = *s;
 8690|       |
 8691|      0|        if (ch < maplen)
  ------------------
  |  Branch (8691:13): [True: 0, False: 0]
  ------------------
 8692|      0|            x = PyUnicode_READ(mapkind, mapdata, ch);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
 8693|      0|        else
 8694|      0|            x = 0xfffe; /* invalid value */
 8695|  2.77k|Error:
 8696|  2.77k|        if (x == 0xfffe)
  ------------------
  |  Branch (8696:13): [True: 24, False: 2.75k]
  ------------------
 8697|     24|        {
 8698|       |            /* undefined mapping */
 8699|     24|            startinpos = s-starts;
 8700|     24|            endinpos = startinpos+1;
 8701|     24|            if (unicode_decode_call_errorhandler_writer(
  ------------------
  |  Branch (8701:17): [True: 24, False: 0]
  ------------------
 8702|     24|                    errors, &errorHandler,
 8703|     24|                    "charmap", "character maps to <undefined>",
 8704|     24|                    &starts, &e, &startinpos, &endinpos, &exc, &s,
 8705|     24|                    writer)) {
 8706|     24|                goto onError;
 8707|     24|            }
 8708|      0|            continue;
 8709|     24|        }
 8710|       |
 8711|  2.75k|        if (_PyUnicodeWriter_WriteCharInline(writer, x) < 0)
  ------------------
  |  Branch (8711:13): [True: 0, False: 2.75k]
  ------------------
 8712|      0|            goto onError;
 8713|  2.75k|        ++s;
 8714|  2.75k|    }
 8715|  1.64k|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|  1.64k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.64k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.64k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8716|  1.64k|    Py_XDECREF(exc);
  ------------------
  |  |  524|  1.64k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.64k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.64k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8717|  1.64k|    return 0;
 8718|       |
 8719|     24|onError:
 8720|     24|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8721|     24|    Py_XDECREF(exc);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8722|     24|    return -1;
 8723|  1.66k|}
unicodeobject.c:_PyUnicode_TranslateCharmap:
 9742|     48|{
 9743|       |    /* input object */
 9744|     48|    const void *data;
 9745|     48|    Py_ssize_t size, i;
 9746|     48|    int kind;
 9747|       |    /* output buffer */
 9748|     48|    _PyUnicodeWriter writer;
 9749|       |    /* error handler */
 9750|     48|    const char *reason = "character maps to <undefined>";
 9751|     48|    PyObject *errorHandler = NULL;
 9752|     48|    PyObject *exc = NULL;
 9753|     48|    int ignore;
 9754|     48|    int res;
 9755|       |
 9756|     48|    if (mapping == NULL) {
  ------------------
  |  Branch (9756:9): [True: 0, False: 48]
  ------------------
 9757|      0|        PyErr_BadArgument();
 9758|      0|        return NULL;
 9759|      0|    }
 9760|       |
 9761|     48|    data = PyUnicode_DATA(input);
  ------------------
  |  |  284|     48|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     48|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9762|     48|    kind = PyUnicode_KIND(input);
  ------------------
  |  |  258|     48|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|     96|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 48, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9763|     48|    size = PyUnicode_GET_LENGTH(input);
  ------------------
  |  |  299|     48|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     48|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9764|       |
 9765|     48|    if (size == 0)
  ------------------
  |  Branch (9765:9): [True: 0, False: 48]
  ------------------
 9766|      0|        return PyUnicode_FromObject(input);
 9767|       |
 9768|       |    /* allocate enough for a simple 1:1 translation without
 9769|       |       replacements, if we need more, we'll resize */
 9770|     48|    _PyUnicodeWriter_Init(&writer);
 9771|     48|    if (_PyUnicodeWriter_Prepare(&writer, size, 127) == -1)
  ------------------
  |  |  562|     48|    (((MAXCHAR) <= (WRITER)->maxchar                                  \
  |  |  ------------------
  |  |  |  Branch (562:7): [True: 0, False: 48]
  |  |  ------------------
  |  |  563|     48|      && (LENGTH) <= (WRITER)->size - (WRITER)->pos)                  \
  |  |  ------------------
  |  |  |  Branch (563:10): [True: 0, False: 0]
  |  |  ------------------
  |  |  564|     48|     ? 0                                                              \
  |  |  565|     48|     : (((LENGTH) == 0)                                               \
  |  |  ------------------
  |  |  |  Branch (565:9): [True: 0, False: 48]
  |  |  ------------------
  |  |  566|     48|        ? 0                                                           \
  |  |  567|     48|        : _PyUnicodeWriter_PrepareInternal((WRITER), (LENGTH), (MAXCHAR))))
  ------------------
  |  Branch (9771:9): [True: 0, False: 48]
  ------------------
 9772|      0|        goto onError;
 9773|       |
 9774|     48|    ignore = (errors != NULL && strcmp(errors, "ignore") == 0);
  ------------------
  |  Branch (9774:15): [True: 48, False: 0]
  |  Branch (9774:33): [True: 48, False: 0]
  ------------------
 9775|       |
 9776|     48|    if (PyUnicode_IS_ASCII(input)) {
  ------------------
  |  |  227|     48|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     48|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 48, False: 0]
  |  |  ------------------
  ------------------
 9777|     48|        res = unicode_fast_translate(input, mapping, &writer, ignore, &i);
 9778|     48|        if (res < 0) {
  ------------------
  |  Branch (9778:13): [True: 0, False: 48]
  ------------------
 9779|      0|            _PyUnicodeWriter_Dealloc(&writer);
 9780|      0|            return NULL;
 9781|      0|        }
 9782|     48|        if (res == 1)
  ------------------
  |  Branch (9782:13): [True: 24, False: 24]
  ------------------
 9783|     24|            return _PyUnicodeWriter_Finish(&writer);
 9784|     48|    }
 9785|      0|    else {
 9786|      0|        i = 0;
 9787|      0|    }
 9788|       |
 9789|     60|    while (i<size) {
  ------------------
  |  Branch (9789:12): [True: 36, False: 24]
  ------------------
 9790|       |        /* try to encode it */
 9791|     36|        int translate;
 9792|     36|        PyObject *repunicode = NULL; /* initialize to prevent gcc warning */
 9793|     36|        Py_ssize_t newpos;
 9794|       |        /* startpos for collecting untranslatable chars */
 9795|     36|        Py_ssize_t collstart;
 9796|     36|        Py_ssize_t collend;
 9797|     36|        Py_UCS4 ch;
 9798|       |
 9799|     36|        ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|     36|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|     36|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|     36|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|     36|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|     36|                   (index))
  ------------------
 9800|     36|        translate = charmaptranslate_output(ch, mapping, &writer);
 9801|     36|        if (translate < 0)
  ------------------
  |  Branch (9801:13): [True: 0, False: 36]
  ------------------
 9802|      0|            goto onError;
 9803|       |
 9804|     36|        if (translate != 0) {
  ------------------
  |  Branch (9804:13): [True: 36, False: 0]
  ------------------
 9805|       |            /* it worked => adjust input pointer */
 9806|     36|            ++i;
 9807|     36|            continue;
 9808|     36|        }
 9809|       |
 9810|       |        /* untranslatable character */
 9811|      0|        collstart = i;
 9812|      0|        collend = i+1;
 9813|       |
 9814|       |        /* find all untranslatable characters */
 9815|      0|        while (collend < size) {
  ------------------
  |  Branch (9815:16): [True: 0, False: 0]
  ------------------
 9816|      0|            PyObject *x;
 9817|      0|            Py_UCS4 replace;
 9818|      0|            ch = PyUnicode_READ(kind, data, collend);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
 9819|      0|            if (charmaptranslate_lookup(ch, mapping, &x, &replace))
  ------------------
  |  Branch (9819:17): [True: 0, False: 0]
  ------------------
 9820|      0|                goto onError;
 9821|      0|            Py_XDECREF(x);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9822|      0|            if (x != Py_None)
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (9822:17): [True: 0, False: 0]
  ------------------
 9823|      0|                break;
 9824|      0|            ++collend;
 9825|      0|        }
 9826|       |
 9827|      0|        if (ignore) {
  ------------------
  |  Branch (9827:13): [True: 0, False: 0]
  ------------------
 9828|      0|            i = collend;
 9829|      0|        }
 9830|      0|        else {
 9831|      0|            repunicode = unicode_translate_call_errorhandler(errors, &errorHandler,
 9832|      0|                                                             reason, input, &exc,
 9833|      0|                                                             collstart, collend, &newpos);
 9834|      0|            if (repunicode == NULL)
  ------------------
  |  Branch (9834:17): [True: 0, False: 0]
  ------------------
 9835|      0|                goto onError;
 9836|      0|            if (_PyUnicodeWriter_WriteStr(&writer, repunicode) < 0) {
  ------------------
  |  Branch (9836:17): [True: 0, False: 0]
  ------------------
 9837|      0|                Py_DECREF(repunicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9838|      0|                goto onError;
 9839|      0|            }
 9840|      0|            Py_DECREF(repunicode);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9841|      0|            i = newpos;
 9842|      0|        }
 9843|      0|    }
 9844|     24|    Py_XDECREF(exc);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9845|     24|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9846|     24|    return _PyUnicodeWriter_Finish(&writer);
 9847|       |
 9848|      0|  onError:
 9849|      0|    _PyUnicodeWriter_Dealloc(&writer);
 9850|      0|    Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9851|      0|    Py_XDECREF(errorHandler);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9852|       |    return NULL;
 9853|     24|}
unicodeobject.c:unicode_fast_translate:
 9691|     48|{
 9692|     48|    Py_UCS1 ascii_table[128], ch, ch2;
 9693|     48|    Py_ssize_t len;
 9694|     48|    const Py_UCS1 *in, *end;
 9695|     48|    Py_UCS1 *out;
 9696|     48|    int res = 0;
 9697|       |
 9698|     48|    len = PyUnicode_GET_LENGTH(input);
  ------------------
  |  |  299|     48|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     48|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     48|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9699|       |
 9700|     48|    memset(ascii_table, 0xff, 128);
 9701|       |
 9702|     48|    in = PyUnicode_1BYTE_DATA(input);
  ------------------
  |  |  291|     48|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     48|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 9703|     48|    end = in + len;
 9704|       |
 9705|     48|    assert(PyUnicode_IS_ASCII(writer->buffer));
  ------------------
  |  Branch (9705:5): [True: 48, False: 0]
  ------------------
 9706|     48|    assert(PyUnicode_GET_LENGTH(writer->buffer) == len);
  ------------------
  |  Branch (9706:5): [True: 48, False: 0]
  ------------------
 9707|     48|    out = PyUnicode_1BYTE_DATA(writer->buffer);
  ------------------
  |  |  291|     48|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     48|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 9708|       |
 9709|     89|    for (; in < end; in++) {
  ------------------
  |  Branch (9709:12): [True: 65, False: 24]
  ------------------
 9710|     65|        ch = *in;
 9711|     65|        ch2 = ascii_table[ch];
 9712|     65|        if (ch2 == 0xff) {
  ------------------
  |  Branch (9712:13): [True: 58, False: 7]
  ------------------
 9713|     58|            int translate = unicode_fast_translate_lookup(mapping, ch,
 9714|     58|                                                          ascii_table);
 9715|     58|            if (translate < 0)
  ------------------
  |  Branch (9715:17): [True: 0, False: 58]
  ------------------
 9716|      0|                return -1;
 9717|     58|            if (translate == 0)
  ------------------
  |  Branch (9717:17): [True: 24, False: 34]
  ------------------
 9718|     24|                goto exit;
 9719|     34|            ch2 = ascii_table[ch];
 9720|     34|        }
 9721|     41|        if (ch2 == 0xfe) {
  ------------------
  |  Branch (9721:13): [True: 0, False: 41]
  ------------------
 9722|      0|            if (ignore)
  ------------------
  |  Branch (9722:17): [True: 0, False: 0]
  ------------------
 9723|      0|                continue;
 9724|      0|            goto exit;
 9725|      0|        }
 9726|     41|        assert(ch2 < 128);
  ------------------
  |  Branch (9726:9): [True: 41, False: 0]
  ------------------
 9727|     41|        *out = ch2;
 9728|     41|        out++;
 9729|     41|    }
 9730|     24|    res = 1;
 9731|       |
 9732|     48|exit:
 9733|     48|    writer->pos = out - PyUnicode_1BYTE_DATA(writer->buffer);
  ------------------
  |  |  291|     48|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     48|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 9734|     48|    *input_pos = in - PyUnicode_1BYTE_DATA(input);
  ------------------
  |  |  291|     48|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|     48|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 9735|     48|    return res;
 9736|     24|}
unicodeobject.c:unicode_fast_translate_lookup:
 9638|     58|{
 9639|     58|    PyObject *item = NULL;
 9640|     58|    Py_UCS4 replace;
 9641|     58|    int ret = 0;
 9642|       |
 9643|     58|    if (charmaptranslate_lookup(ch, mapping, &item, &replace)) {
  ------------------
  |  Branch (9643:9): [True: 0, False: 58]
  ------------------
 9644|      0|        return -1;
 9645|      0|    }
 9646|       |
 9647|     58|    if (item == Py_None) {
  ------------------
  |  |  616|     58|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (9647:9): [True: 0, False: 58]
  ------------------
 9648|       |        /* deletion */
 9649|      0|        translate[ch] = 0xfe;
 9650|      0|    }
 9651|     58|    else if (item == NULL) {
  ------------------
  |  Branch (9651:14): [True: 34, False: 24]
  ------------------
 9652|       |        /* not found => default to 1:1 mapping */
 9653|     34|        translate[ch] = ch;
 9654|     34|        return 1;
 9655|     34|    }
 9656|     24|    else if (PyLong_Check(item)) {
  ------------------
  |  |   13|     24|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     24|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9657|      0|        if (replace > 127) {
  ------------------
  |  Branch (9657:13): [True: 0, False: 0]
  ------------------
 9658|       |            /* invalid character or character outside ASCII:
 9659|       |               skip the fast translate */
 9660|      0|            goto exit;
 9661|      0|        }
 9662|      0|        translate[ch] = (Py_UCS1)replace;
 9663|      0|    }
 9664|     24|    else if (PyUnicode_Check(item)) {
  ------------------
  |  |  103|     24|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     24|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 24, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9665|     24|        if (PyUnicode_GET_LENGTH(item) != 1)
  ------------------
  |  |  299|     24|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9665:13): [True: 24, False: 0]
  ------------------
 9666|     24|            goto exit;
 9667|       |
 9668|      0|        replace = PyUnicode_READ_CHAR(item, 0);
  ------------------
  |  |  381|      0|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9669|      0|        if (replace > 127)
  ------------------
  |  Branch (9669:13): [True: 0, False: 0]
  ------------------
 9670|      0|            goto exit;
 9671|      0|        translate[ch] = (Py_UCS1)replace;
 9672|      0|    }
 9673|      0|    else {
 9674|       |        /* not None, NULL, long or unicode */
 9675|      0|        goto exit;
 9676|      0|    }
 9677|      0|    ret = 1;
 9678|       |
 9679|     24|  exit:
 9680|     24|    Py_DECREF(item);
  ------------------
  |  |  430|     24|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9681|     24|    return ret;
 9682|      0|}
unicodeobject.c:charmaptranslate_output:
 9592|     36|{
 9593|     36|    PyObject *item;
 9594|     36|    Py_UCS4 replace;
 9595|       |
 9596|     36|    if (charmaptranslate_lookup(ch, mapping, &item, &replace))
  ------------------
  |  Branch (9596:9): [True: 0, False: 36]
  ------------------
 9597|      0|        return -1;
 9598|       |
 9599|     36|    if (item == NULL) {
  ------------------
  |  Branch (9599:9): [True: 8, False: 28]
  ------------------
 9600|       |        /* not found => default to 1:1 mapping */
 9601|      8|        if (_PyUnicodeWriter_WriteCharInline(writer, ch) < 0) {
  ------------------
  |  Branch (9601:13): [True: 0, False: 8]
  ------------------
 9602|      0|            return -1;
 9603|      0|        }
 9604|      8|        return 1;
 9605|      8|    }
 9606|       |
 9607|     28|    if (item == Py_None) {
  ------------------
  |  |  616|     28|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (9607:9): [True: 0, False: 28]
  ------------------
 9608|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9609|      0|        return 0;
 9610|      0|    }
 9611|       |
 9612|     28|    if (PyLong_Check(item)) {
  ------------------
  |  |   13|     28|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     28|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9613|      0|        if (_PyUnicodeWriter_WriteCharInline(writer, replace) < 0) {
  ------------------
  |  Branch (9613:13): [True: 0, False: 0]
  ------------------
 9614|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9615|      0|            return -1;
 9616|      0|        }
 9617|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9618|      0|        return 1;
 9619|      0|    }
 9620|       |
 9621|     28|    if (!PyUnicode_Check(item)) {
  ------------------
  |  |  103|     28|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     28|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (9621:9): [True: 0, False: 28]
  ------------------
 9622|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9623|      0|        return -1;
 9624|      0|    }
 9625|       |
 9626|     28|    if (_PyUnicodeWriter_WriteStr(writer, item) < 0) {
  ------------------
  |  Branch (9626:9): [True: 0, False: 28]
  ------------------
 9627|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9628|      0|        return -1;
 9629|      0|    }
 9630|       |
 9631|     28|    Py_DECREF(item);
  ------------------
  |  |  430|     28|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9632|     28|    return 1;
 9633|     28|}
unicodeobject.c:charmaptranslate_lookup:
 9534|     94|{
 9535|     94|    PyObject *w = PyLong_FromLong((long)c);
 9536|     94|    PyObject *x;
 9537|       |
 9538|     94|    if (w == NULL)
  ------------------
  |  Branch (9538:9): [True: 0, False: 94]
  ------------------
 9539|      0|        return -1;
 9540|     94|    int rc = PyMapping_GetOptionalItem(mapping, w, &x);
 9541|     94|    Py_DECREF(w);
  ------------------
  |  |  430|     94|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     94|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     94|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9542|     94|    if (rc == 0) {
  ------------------
  |  Branch (9542:9): [True: 42, False: 52]
  ------------------
 9543|       |        /* No mapping found means: use 1:1 mapping. */
 9544|     42|        *result = NULL;
 9545|     42|        return 0;
 9546|     42|    }
 9547|     52|    if (x == NULL) {
  ------------------
  |  Branch (9547:9): [True: 0, False: 52]
  ------------------
 9548|      0|        if (PyErr_ExceptionMatches(PyExc_LookupError)) {
  ------------------
  |  Branch (9548:13): [True: 0, False: 0]
  ------------------
 9549|       |            /* No mapping found means: use 1:1 mapping. */
 9550|      0|            PyErr_Clear();
 9551|      0|            *result = NULL;
 9552|      0|            return 0;
 9553|      0|        } else
 9554|      0|            return -1;
 9555|      0|    }
 9556|     52|    else if (x == Py_None) {
  ------------------
  |  |  616|     52|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (9556:14): [True: 0, False: 52]
  ------------------
 9557|      0|        *result = x;
 9558|      0|        return 0;
 9559|      0|    }
 9560|     52|    else if (PyLong_Check(x)) {
  ------------------
  |  |   13|     52|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     52|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 52]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9561|      0|        long value = PyLong_AsLong(x);
 9562|      0|        if (value < 0 || value > MAX_UNICODE) {
  ------------------
  |  |  108|      0|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|      0|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
  |  Branch (9562:13): [True: 0, False: 0]
  |  Branch (9562:26): [True: 0, False: 0]
  ------------------
 9563|      0|            PyErr_Format(PyExc_ValueError,
 9564|      0|                         "character mapping must be in range(0x%lx)",
 9565|      0|                         (unsigned long)MAX_UNICODE + 1);
  ------------------
  |  |  108|      0|#define MAX_UNICODE _Py_MAX_UNICODE
  |  |  ------------------
  |  |  |  |   17|      0|#define _Py_MAX_UNICODE 0x10ffff
  |  |  ------------------
  ------------------
 9566|      0|            Py_DECREF(x);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9567|      0|            return -1;
 9568|      0|        }
 9569|      0|        *result = x;
 9570|      0|        *replace = (Py_UCS4)value;
 9571|      0|        return 0;
 9572|      0|    }
 9573|     52|    else if (PyUnicode_Check(x)) {
  ------------------
  |  |  103|     52|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     52|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9574|     52|        *result = x;
 9575|     52|        return 0;
 9576|     52|    }
 9577|      0|    else {
 9578|       |        /* wrong return value */
 9579|      0|        PyErr_SetString(PyExc_TypeError,
 9580|      0|                        "character mapping must return integer, None or str");
 9581|      0|        Py_DECREF(x);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9582|      0|        return -1;
 9583|      0|    }
 9584|     52|}
unicodeobject.c:any_find_slice:
 9938|  5.92k|{
 9939|  5.92k|    int kind1, kind2;
 9940|  5.92k|    const void *buf1, *buf2;
 9941|  5.92k|    Py_ssize_t len1, len2, result;
 9942|       |
 9943|  5.92k|    kind1 = PyUnicode_KIND(s1);
  ------------------
  |  |  258|  5.92k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  11.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 5.92k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9944|  5.92k|    kind2 = PyUnicode_KIND(s2);
  ------------------
  |  |  258|  5.92k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  11.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 5.92k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9945|  5.92k|    if (kind1 < kind2)
  ------------------
  |  Branch (9945:9): [True: 0, False: 5.92k]
  ------------------
 9946|      0|        return -1;
 9947|       |
 9948|  5.92k|    len1 = PyUnicode_GET_LENGTH(s1);
  ------------------
  |  |  299|  5.92k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9949|  5.92k|    len2 = PyUnicode_GET_LENGTH(s2);
  ------------------
  |  |  299|  5.92k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9950|  5.92k|    ADJUST_INDICES(start, end, len1);
  ------------------
  |  | 9915|  5.92k|    do {                                \
  |  | 9916|  5.92k|        if (end > len) {                \
  |  |  ------------------
  |  |  |  Branch (9916:13): [True: 101, False: 5.82k]
  |  |  ------------------
  |  | 9917|    101|            end = len;                  \
  |  | 9918|    101|        }                               \
  |  | 9919|  5.92k|        else if (end < 0) {             \
  |  |  ------------------
  |  |  |  Branch (9919:18): [True: 0, False: 5.82k]
  |  |  ------------------
  |  | 9920|      0|            end += len;                 \
  |  | 9921|      0|            if (end < 0) {              \
  |  |  ------------------
  |  |  |  Branch (9921:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9922|      0|                end = 0;                \
  |  | 9923|      0|            }                           \
  |  | 9924|      0|        }                               \
  |  | 9925|  5.92k|        if (start < 0) {                \
  |  |  ------------------
  |  |  |  Branch (9925:13): [True: 0, False: 5.92k]
  |  |  ------------------
  |  | 9926|      0|            start += len;               \
  |  | 9927|      0|            if (start < 0) {            \
  |  |  ------------------
  |  |  |  Branch (9927:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9928|      0|                start = 0;              \
  |  | 9929|      0|            }                           \
  |  | 9930|      0|        }                               \
  |  | 9931|  5.92k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (9931:14): [Folded, False: 5.92k]
  |  |  ------------------
  ------------------
 9951|  5.92k|    if (end - start < len2)
  ------------------
  |  Branch (9951:9): [True: 0, False: 5.92k]
  ------------------
 9952|      0|        return -1;
 9953|       |
 9954|  5.92k|    buf1 = PyUnicode_DATA(s1);
  ------------------
  |  |  284|  5.92k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9955|  5.92k|    buf2 = PyUnicode_DATA(s2);
  ------------------
  |  |  284|  5.92k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9956|  5.92k|    if (len2 == 1) {
  ------------------
  |  Branch (9956:9): [True: 5.92k, False: 0]
  ------------------
 9957|  5.92k|        Py_UCS4 ch = PyUnicode_READ(kind2, buf2, 0);
  ------------------
  |  |  354|  5.92k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  5.92k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  5.92k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  5.92k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  5.92k|                   (index))
  ------------------
 9958|  5.92k|        result = findchar((const char *)buf1 + kind1*start,
 9959|  5.92k|                          kind1, end - start, ch, direction);
 9960|  5.92k|        if (result == -1)
  ------------------
  |  Branch (9960:13): [True: 5.69k, False: 232]
  ------------------
 9961|  5.69k|            return -1;
 9962|    232|        else
 9963|    232|            return start + result;
 9964|  5.92k|    }
 9965|       |
 9966|      0|    if (kind2 != kind1) {
  ------------------
  |  Branch (9966:9): [True: 0, False: 0]
  ------------------
 9967|      0|        buf2 = unicode_askind(kind2, buf2, len2, kind1);
 9968|      0|        if (!buf2)
  ------------------
  |  Branch (9968:13): [True: 0, False: 0]
  ------------------
 9969|      0|            return -2;
 9970|      0|    }
 9971|       |
 9972|      0|    if (direction > 0) {
  ------------------
  |  Branch (9972:9): [True: 0, False: 0]
  ------------------
 9973|      0|        switch (kind1) {
 9974|      0|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (9974:9): [True: 0, False: 0]
  ------------------
 9975|      0|            if (PyUnicode_IS_ASCII(s1) && PyUnicode_IS_ASCII(s2))
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                          if (PyUnicode_IS_ASCII(s1) && PyUnicode_IS_ASCII(s2))
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 9976|      0|                result = asciilib_find_slice(buf1, len1, buf2, len2, start, end);
 9977|      0|            else
 9978|      0|                result = ucs1lib_find_slice(buf1, len1, buf2, len2, start, end);
 9979|      0|            break;
 9980|      0|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (9980:9): [True: 0, False: 0]
  ------------------
 9981|      0|            result = ucs2lib_find_slice(buf1, len1, buf2, len2, start, end);
 9982|      0|            break;
 9983|      0|        case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (9983:9): [True: 0, False: 0]
  ------------------
 9984|      0|            result = ucs4lib_find_slice(buf1, len1, buf2, len2, start, end);
 9985|      0|            break;
 9986|      0|        default:
  ------------------
  |  Branch (9986:9): [True: 0, False: 0]
  ------------------
 9987|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 9988|      0|        }
 9989|      0|    }
 9990|      0|    else {
 9991|      0|        switch (kind1) {
 9992|      0|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (9992:9): [True: 0, False: 0]
  ------------------
 9993|      0|            if (PyUnicode_IS_ASCII(s1) && PyUnicode_IS_ASCII(s2))
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
                          if (PyUnicode_IS_ASCII(s1) && PyUnicode_IS_ASCII(s2))
  ------------------
  |  |  227|      0|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 9994|      0|                result = asciilib_rfind_slice(buf1, len1, buf2, len2, start, end);
 9995|      0|            else
 9996|      0|                result = ucs1lib_rfind_slice(buf1, len1, buf2, len2, start, end);
 9997|      0|            break;
 9998|      0|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (9998:9): [True: 0, False: 0]
  ------------------
 9999|      0|            result = ucs2lib_rfind_slice(buf1, len1, buf2, len2, start, end);
10000|      0|            break;
10001|      0|        case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (10001:9): [True: 0, False: 0]
  ------------------
10002|      0|            result = ucs4lib_rfind_slice(buf1, len1, buf2, len2, start, end);
10003|      0|            break;
10004|      0|        default:
  ------------------
  |  Branch (10004:9): [True: 0, False: 0]
  ------------------
10005|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
10006|      0|        }
10007|      0|    }
10008|       |
10009|      0|    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(s2)));
  ------------------
  |  Branch (10009:5): [True: 0, False: 0]
  ------------------
10010|      0|    if (kind2 != kind1)
  ------------------
  |  Branch (10010:9): [True: 0, False: 0]
  ------------------
10011|      0|        PyMem_Free((void *)buf2);
10012|       |
10013|      0|    return result;
10014|      0|}
unicodeobject.c:tailmatch:
10068|   163k|{
10069|   163k|    int kind_self;
10070|   163k|    int kind_sub;
10071|   163k|    const void *data_self;
10072|   163k|    const void *data_sub;
10073|   163k|    Py_ssize_t offset;
10074|   163k|    Py_ssize_t i;
10075|   163k|    Py_ssize_t end_sub;
10076|       |
10077|   163k|    ADJUST_INDICES(start, end, PyUnicode_GET_LENGTH(self));
  ------------------
  |  | 9915|   163k|    do {                                \
  |  | 9916|   163k|        if (end > len) {                \
  |  |  ------------------
  |  |  |  Branch (9916:13): [True: 163k, False: 0]
  |  |  ------------------
  |  | 9917|   163k|            end = len;                  \
  |  | 9918|   163k|        }                               \
  |  | 9919|   163k|        else if (end < 0) {             \
  |  |  ------------------
  |  |  |  Branch (9919:18): [True: 0, False: 0]
  |  |  ------------------
  |  | 9920|      0|            end += len;                 \
  |  | 9921|      0|            if (end < 0) {              \
  |  |  ------------------
  |  |  |  Branch (9921:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9922|      0|                end = 0;                \
  |  | 9923|      0|            }                           \
  |  | 9924|      0|        }                               \
  |  | 9925|   163k|        if (start < 0) {                \
  |  |  ------------------
  |  |  |  Branch (9925:13): [True: 0, False: 163k]
  |  |  ------------------
  |  | 9926|      0|            start += len;               \
  |  | 9927|      0|            if (start < 0) {            \
  |  |  ------------------
  |  |  |  Branch (9927:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9928|      0|                start = 0;              \
  |  | 9929|      0|            }                           \
  |  | 9930|      0|        }                               \
  |  | 9931|   163k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (9931:14): [Folded, False: 163k]
  |  |  ------------------
  ------------------
10078|   163k|    end -= PyUnicode_GET_LENGTH(substring);
  ------------------
  |  |  299|   163k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   163k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   163k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10079|   163k|    if (end < start)
  ------------------
  |  Branch (10079:9): [True: 4.86k, False: 158k]
  ------------------
10080|  4.86k|        return 0;
10081|       |
10082|   158k|    if (PyUnicode_GET_LENGTH(substring) == 0)
  ------------------
  |  |  299|   158k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   158k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   158k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (10082:9): [True: 0, False: 158k]
  ------------------
10083|      0|        return 1;
10084|       |
10085|   158k|    kind_self = PyUnicode_KIND(self);
  ------------------
  |  |  258|   158k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   317k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 158k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10086|   158k|    data_self = PyUnicode_DATA(self);
  ------------------
  |  |  284|   158k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   158k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   158k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10087|   158k|    kind_sub = PyUnicode_KIND(substring);
  ------------------
  |  |  258|   158k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   317k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 158k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10088|   158k|    data_sub = PyUnicode_DATA(substring);
  ------------------
  |  |  284|   158k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   158k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   158k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10089|   158k|    end_sub = PyUnicode_GET_LENGTH(substring) - 1;
  ------------------
  |  |  299|   158k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   158k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   158k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10090|       |
10091|   158k|    if (direction > 0)
  ------------------
  |  Branch (10091:9): [True: 48.5k, False: 110k]
  ------------------
10092|  48.5k|        offset = end;
10093|   110k|    else
10094|   110k|        offset = start;
10095|       |
10096|   158k|    if (PyUnicode_READ(kind_self, data_self, offset) ==
  ------------------
  |  |  354|   158k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   158k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   158k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   158k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   158k|                   (index))
  ------------------
  |  Branch (10096:9): [True: 147k, False: 11.5k]
  ------------------
10097|   158k|        PyUnicode_READ(kind_sub, data_sub, 0) &&
  ------------------
  |  |  354|   317k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   158k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   317k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   158k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   317k|                   (index))
  ------------------
10098|   147k|        PyUnicode_READ(kind_self, data_self, offset + end_sub) ==
  ------------------
  |  |  354|   147k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   147k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   147k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   147k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   147k|                   (index))
  ------------------
  |  Branch (10098:9): [True: 98.7k, False: 48.7k]
  ------------------
10099|   147k|        PyUnicode_READ(kind_sub, data_sub, end_sub)) {
  ------------------
  |  |  354|   147k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   147k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   147k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   147k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   147k|                   (index))
  ------------------
10100|       |        /* If both are of the same kind, memcmp is sufficient */
10101|  98.7k|        if (kind_self == kind_sub) {
  ------------------
  |  Branch (10101:13): [True: 97.1k, False: 1.64k]
  ------------------
10102|  97.1k|            return ! memcmp((char *)data_self +
10103|  97.1k|                                (offset * PyUnicode_KIND(substring)),
  ------------------
  |  |  258|  97.1k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   194k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 97.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10104|      0|                            data_sub,
10105|  97.1k|                            PyUnicode_GET_LENGTH(substring) *
  ------------------
  |  |  299|  97.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10106|  97.1k|                                PyUnicode_KIND(substring));
  ------------------
  |  |  258|  97.1k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   194k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 97.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10107|  97.1k|        }
10108|       |        /* otherwise we have to compare each character by first accessing it */
10109|  1.64k|        else {
10110|       |            /* We do not need to compare 0 and len(substring)-1 because
10111|       |               the if statement above ensured already that they are equal
10112|       |               when we end up here. */
10113|  2.87k|            for (i = 1; i < end_sub; ++i) {
  ------------------
  |  Branch (10113:25): [True: 2.86k, False: 5]
  ------------------
10114|  2.86k|                if (PyUnicode_READ(kind_self, data_self, offset + i) !=
  ------------------
  |  |  354|  2.86k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  2.86k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  2.86k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  2.86k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  2.86k|                   (index))
  ------------------
  |  Branch (10114:21): [True: 1.63k, False: 1.23k]
  ------------------
10115|  2.86k|                    PyUnicode_READ(kind_sub, data_sub, i))
  ------------------
  |  |  354|  2.86k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  2.86k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  2.86k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  2.86k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  2.86k|                   (index))
  ------------------
10116|  1.63k|                    return 0;
10117|  2.86k|            }
10118|      5|            return 1;
10119|  1.64k|        }
10120|  98.7k|    }
10121|       |
10122|  60.2k|    return 0;
10123|   158k|}
unicodeobject.c:unicode_compare:
11312|  12.9M|{
11313|  12.9M|#define COMPARE(TYPE1, TYPE2) \
11314|  12.9M|    do { \
11315|  12.9M|        TYPE1* p1 = (TYPE1 *)data1; \
11316|  12.9M|        TYPE2* p2 = (TYPE2 *)data2; \
11317|  12.9M|        TYPE1* end = p1 + len; \
11318|  12.9M|        Py_UCS4 c1, c2; \
11319|  12.9M|        for (; p1 != end; p1++, p2++) { \
11320|  12.9M|            c1 = *p1; \
11321|  12.9M|            c2 = *p2; \
11322|  12.9M|            if (c1 != c2) \
11323|  12.9M|                return (c1 < c2) ? -1 : 1; \
11324|  12.9M|        } \
11325|  12.9M|    } \
11326|  12.9M|    while (0)
11327|       |
11328|  12.9M|    int kind1, kind2;
11329|  12.9M|    const void *data1, *data2;
11330|  12.9M|    Py_ssize_t len1, len2, len;
11331|       |
11332|  12.9M|    kind1 = PyUnicode_KIND(str1);
  ------------------
  |  |  258|  12.9M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  25.9M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 12.9M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11333|  12.9M|    kind2 = PyUnicode_KIND(str2);
  ------------------
  |  |  258|  12.9M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  25.9M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 12.9M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11334|  12.9M|    data1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|  12.9M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11335|  12.9M|    data2 = PyUnicode_DATA(str2);
  ------------------
  |  |  284|  12.9M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11336|  12.9M|    len1 = PyUnicode_GET_LENGTH(str1);
  ------------------
  |  |  299|  12.9M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11337|  12.9M|    len2 = PyUnicode_GET_LENGTH(str2);
  ------------------
  |  |  299|  12.9M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11338|  12.9M|    len = Py_MIN(len1, len2);
  ------------------
  |  |  120|  12.9M|       __extension__ \
  |  |  121|  12.9M|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  12.9M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  12.9M|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  12.9M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  12.9M|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 268k, False: 12.6M]
  |  |  ------------------
  ------------------
11339|       |
11340|  12.9M|    switch(kind1) {
11341|  3.58M|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (11341:5): [True: 3.58M, False: 9.36M]
  ------------------
11342|  3.58M|    {
11343|  3.58M|        switch(kind2) {
11344|   575k|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (11344:9): [True: 575k, False: 3.01M]
  ------------------
11345|   575k|        {
11346|   575k|            int cmp = memcmp(data1, data2, len);
11347|       |            /* normalize result of memcmp() into the range [-1; 1] */
11348|   575k|            if (cmp < 0)
  ------------------
  |  Branch (11348:17): [True: 285k, False: 290k]
  ------------------
11349|   285k|                return -1;
11350|   290k|            if (cmp > 0)
  ------------------
  |  Branch (11350:17): [True: 248k, False: 41.8k]
  ------------------
11351|   248k|                return 1;
11352|  41.8k|            break;
11353|   290k|        }
11354|  2.95M|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (11354:9): [True: 2.95M, False: 639k]
  ------------------
11355|  2.95M|            COMPARE(Py_UCS1, Py_UCS2);
  ------------------
  |  |11314|  2.95M|    do { \
  |  |11315|  2.95M|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|  2.95M|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|  2.95M|        TYPE1* end = p1 + len; \
  |  |11318|  2.95M|        Py_UCS4 c1, c2; \
  |  |11319|  2.96M|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 2.96M, False: 4.04k]
  |  |  ------------------
  |  |11320|  2.96M|            c1 = *p1; \
  |  |11321|  2.96M|            c2 = *p2; \
  |  |11322|  2.96M|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 2.94M, False: 16.5k]
  |  |  ------------------
  |  |11323|  2.96M|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 2.94M, False: 4.17k]
  |  |  ------------------
  |  |11324|  2.96M|        } \
  |  |11325|  2.95M|    } \
  |  |11326|  2.95M|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 4.04k]
  |  |  ------------------
  ------------------
11356|  4.04k|            break;
11357|  63.9k|        case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (11357:9): [True: 63.9k, False: 3.52M]
  ------------------
11358|  63.9k|            COMPARE(Py_UCS1, Py_UCS4);
  ------------------
  |  |11314|  63.9k|    do { \
  |  |11315|  63.9k|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|  63.9k|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|  63.9k|        TYPE1* end = p1 + len; \
  |  |11318|  63.9k|        Py_UCS4 c1, c2; \
  |  |11319|  64.1k|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 64.1k, False: 12]
  |  |  ------------------
  |  |11320|  64.1k|            c1 = *p1; \
  |  |11321|  64.1k|            c2 = *p2; \
  |  |11322|  64.1k|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 63.9k, False: 136]
  |  |  ------------------
  |  |11323|  64.1k|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 63.8k, False: 94]
  |  |  ------------------
  |  |11324|  64.1k|        } \
  |  |11325|  63.9k|    } \
  |  |11326|  63.9k|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 12]
  |  |  ------------------
  ------------------
11359|     12|            break;
11360|     12|        default:
  ------------------
  |  Branch (11360:9): [True: 0, False: 3.58M]
  ------------------
11361|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
11362|  3.58M|        }
11363|  45.8k|        break;
11364|  3.58M|    }
11365|  8.81M|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (11365:5): [True: 8.81M, False: 4.13M]
  ------------------
11366|  8.81M|    {
11367|  8.81M|        switch(kind2) {
11368|  38.3k|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (11368:9): [True: 38.3k, False: 8.78M]
  ------------------
11369|  38.3k|            COMPARE(Py_UCS2, Py_UCS1);
  ------------------
  |  |11314|  38.3k|    do { \
  |  |11315|  38.3k|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|  38.3k|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|  38.3k|        TYPE1* end = p1 + len; \
  |  |11318|  38.3k|        Py_UCS4 c1, c2; \
  |  |11319|  53.5k|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 50.8k, False: 2.72k]
  |  |  ------------------
  |  |11320|  50.8k|            c1 = *p1; \
  |  |11321|  50.8k|            c2 = *p2; \
  |  |11322|  50.8k|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 35.6k, False: 15.2k]
  |  |  ------------------
  |  |11323|  50.8k|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 6.35k, False: 29.2k]
  |  |  ------------------
  |  |11324|  50.8k|        } \
  |  |11325|  38.3k|    } \
  |  |11326|  38.3k|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 2.72k]
  |  |  ------------------
  ------------------
11370|  2.72k|            break;
11371|  8.71M|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (11371:9): [True: 8.71M, False: 107k]
  ------------------
11372|  8.71M|        {
11373|  8.71M|            COMPARE(Py_UCS2, Py_UCS2);
  ------------------
  |  |11314|  8.71M|    do { \
  |  |11315|  8.71M|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|  8.71M|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|  8.71M|        TYPE1* end = p1 + len; \
  |  |11318|  8.71M|        Py_UCS4 c1, c2; \
  |  |11319|  9.01M|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 9.00M, False: 10.6k]
  |  |  ------------------
  |  |11320|  9.00M|            c1 = *p1; \
  |  |11321|  9.00M|            c2 = *p2; \
  |  |11322|  9.00M|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 8.70M, False: 302k]
  |  |  ------------------
  |  |11323|  9.00M|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 3.94M, False: 4.75M]
  |  |  ------------------
  |  |11324|  9.00M|        } \
  |  |11325|  8.71M|    } \
  |  |11326|  8.71M|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 10.6k]
  |  |  ------------------
  ------------------
11374|  10.6k|            break;
11375|  8.71M|        }
11376|  68.7k|        case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (11376:9): [True: 68.7k, False: 8.75M]
  ------------------
11377|  68.7k|            COMPARE(Py_UCS2, Py_UCS4);
  ------------------
  |  |11314|  68.7k|    do { \
  |  |11315|  68.7k|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|  68.7k|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|  68.7k|        TYPE1* end = p1 + len; \
  |  |11318|  68.7k|        Py_UCS4 c1, c2; \
  |  |11319|  68.8k|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 68.8k, False: 4]
  |  |  ------------------
  |  |11320|  68.8k|            c1 = *p1; \
  |  |11321|  68.8k|            c2 = *p2; \
  |  |11322|  68.8k|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 68.7k, False: 97]
  |  |  ------------------
  |  |11323|  68.8k|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 68.7k, False: 4]
  |  |  ------------------
  |  |11324|  68.8k|        } \
  |  |11325|  68.7k|    } \
  |  |11326|  68.7k|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 4]
  |  |  ------------------
  ------------------
11378|      4|            break;
11379|      4|        default:
  ------------------
  |  Branch (11379:9): [True: 0, False: 8.81M]
  ------------------
11380|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
11381|  8.81M|        }
11382|  13.3k|        break;
11383|  8.81M|    }
11384|   549k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (11384:5): [True: 549k, False: 12.4M]
  ------------------
11385|   549k|    {
11386|   549k|        switch(kind2) {
11387|    696|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (11387:9): [True: 696, False: 548k]
  ------------------
11388|    696|            COMPARE(Py_UCS4, Py_UCS1);
  ------------------
  |  |11314|    696|    do { \
  |  |11315|    696|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|    696|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|    696|        TYPE1* end = p1 + len; \
  |  |11318|    696|        Py_UCS4 c1, c2; \
  |  |11319|    896|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 885, False: 11]
  |  |  ------------------
  |  |11320|    885|            c1 = *p1; \
  |  |11321|    885|            c2 = *p2; \
  |  |11322|    885|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 685, False: 200]
  |  |  ------------------
  |  |11323|    885|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 104, False: 581]
  |  |  ------------------
  |  |11324|    885|        } \
  |  |11325|    696|    } \
  |  |11326|    696|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 11]
  |  |  ------------------
  ------------------
11389|     11|            break;
11390|  76.6k|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (11390:9): [True: 76.6k, False: 472k]
  ------------------
11391|  76.6k|            COMPARE(Py_UCS4, Py_UCS2);
  ------------------
  |  |11314|  76.6k|    do { \
  |  |11315|  76.6k|        TYPE1* p1 = (TYPE1 *)data1; \
  |  |11316|  76.6k|        TYPE2* p2 = (TYPE2 *)data2; \
  |  |11317|  76.6k|        TYPE1* end = p1 + len; \
  |  |11318|  76.6k|        Py_UCS4 c1, c2; \
  |  |11319|  76.8k|        for (; p1 != end; p1++, p2++) { \
  |  |  ------------------
  |  |  |  Branch (11319:16): [True: 76.8k, False: 3]
  |  |  ------------------
  |  |11320|  76.8k|            c1 = *p1; \
  |  |11321|  76.8k|            c2 = *p2; \
  |  |11322|  76.8k|            if (c1 != c2) \
  |  |  ------------------
  |  |  |  Branch (11322:17): [True: 76.6k, False: 199]
  |  |  ------------------
  |  |11323|  76.8k|                return (c1 < c2) ? -1 : 1; \
  |  |  ------------------
  |  |  |  Branch (11323:24): [True: 20, False: 76.6k]
  |  |  ------------------
  |  |11324|  76.8k|        } \
  |  |11325|  76.6k|    } \
  |  |11326|  76.6k|    while (0)
  |  |  ------------------
  |  |  |  Branch (11326:12): [Folded, False: 3]
  |  |  ------------------
  ------------------
11392|      3|            break;
11393|   472k|        case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (11393:9): [True: 472k, False: 77.3k]
  ------------------
11394|   472k|        {
11395|   472k|#if defined(HAVE_WMEMCMP) && SIZEOF_WCHAR_T == 4
11396|   472k|            int cmp = wmemcmp((wchar_t *)data1, (wchar_t *)data2, len);
11397|       |            /* normalize result of wmemcmp() into the range [-1; 1] */
11398|   472k|            if (cmp < 0)
  ------------------
  |  Branch (11398:17): [True: 218k, False: 253k]
  ------------------
11399|   218k|                return -1;
11400|   253k|            if (cmp > 0)
  ------------------
  |  Branch (11400:17): [True: 253k, False: 26]
  ------------------
11401|   253k|                return 1;
11402|       |#else
11403|       |            COMPARE(Py_UCS4, Py_UCS4);
11404|       |#endif
11405|     26|            break;
11406|   253k|        }
11407|     26|        default:
  ------------------
  |  Branch (11407:9): [True: 0, False: 549k]
  ------------------
11408|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
11409|   549k|        }
11410|     40|        break;
11411|   549k|    }
11412|     40|    default:
  ------------------
  |  Branch (11412:5): [True: 0, False: 12.9M]
  ------------------
11413|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
11414|  12.9M|    }
11415|       |
11416|  59.2k|    if (len1 == len2)
  ------------------
  |  Branch (11416:9): [True: 94, False: 59.1k]
  ------------------
11417|     94|        return 0;
11418|  59.1k|    if (len1 < len2)
  ------------------
  |  Branch (11418:9): [True: 28.4k, False: 30.6k]
  ------------------
11419|  28.4k|        return -1;
11420|  30.6k|    else
11421|  30.6k|        return 1;
11422|       |
11423|  59.1k|#undef COMPARE
11424|  59.1k|}
unicodeobject.c:unicode_askind:
 2427|  6.52k|{
 2428|  6.52k|    void *result;
 2429|       |
 2430|  6.52k|    assert(skind < kind);
  ------------------
  |  Branch (2430:5): [True: 6.52k, False: 0]
  ------------------
 2431|  6.52k|    switch (kind) {
 2432|  2.41k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (2432:5): [True: 2.41k, False: 4.11k]
  ------------------
 2433|  2.41k|        result = PyMem_New(Py_UCS2, len);
  ------------------
  |  |   64|  2.41k|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|  2.41k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 2.41k]
  |  |  ------------------
  |  |   65|  2.41k|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 2434|  2.41k|        if (!result)
  ------------------
  |  Branch (2434:13): [True: 0, False: 2.41k]
  ------------------
 2435|      0|            return PyErr_NoMemory();
 2436|  2.41k|        assert(skind == PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (2436:9): [True: 2.41k, False: 0]
  ------------------
 2437|  2.41k|        _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|  2.41k|    do {                                                \
  |  |   49|  2.41k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  2.41k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  2.41k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  2.41k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  2.41k|        const from_type *_unrolled_end =                \
  |  |   54|  2.41k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  2.41k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  2.41k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 2.41k]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|  5.76k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 3.35k, False: 2.41k]
  |  |  ------------------
  |  |   63|  3.35k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  2.41k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 2.41k]
  |  |  ------------------
  ------------------
 2438|  2.41k|            Py_UCS1, Py_UCS2,
 2439|  2.41k|            (const Py_UCS1 *)data,
 2440|  2.41k|            ((const Py_UCS1 *)data) + len,
 2441|  2.41k|            result);
 2442|  2.41k|        return result;
 2443|  4.11k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (2443:5): [True: 4.11k, False: 2.41k]
  ------------------
 2444|  4.11k|        result = PyMem_New(Py_UCS4, len);
  ------------------
  |  |   64|  4.11k|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|  4.11k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 4.11k]
  |  |  ------------------
  |  |   65|  4.11k|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 2445|  4.11k|        if (!result)
  ------------------
  |  Branch (2445:13): [True: 0, False: 4.11k]
  ------------------
 2446|      0|            return PyErr_NoMemory();
 2447|  4.11k|        if (skind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (2447:13): [True: 0, False: 4.11k]
  ------------------
 2448|      0|            _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|      0|    do {                                                \
  |  |   49|      0|        to_type *_to = (to_type *)(to);                 \
  |  |   50|      0|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|      0|        const from_type *_end = (const from_type *)(end);\
  |  |   52|      0|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|      0|        const from_type *_unrolled_end =                \
  |  |   54|      0|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|      0|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|      0|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|      0|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 0, False: 0]
  |  |  ------------------
  |  |   63|      0|            *_to++ = (to_type) *_iter++;                \
  |  |   64|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2449|      0|                Py_UCS2, Py_UCS4,
 2450|      0|                (const Py_UCS2 *)data,
 2451|      0|                ((const Py_UCS2 *)data) + len,
 2452|      0|                result);
 2453|      0|        }
 2454|  4.11k|        else {
 2455|  4.11k|            assert(skind == PyUnicode_1BYTE_KIND);
  ------------------
  |  Branch (2455:13): [True: 4.11k, False: 0]
  ------------------
 2456|  4.11k|            _PyUnicode_CONVERT_BYTES(
  ------------------
  |  |   48|  4.11k|    do {                                                \
  |  |   49|  4.11k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  4.11k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  4.11k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  4.11k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  4.11k|        const from_type *_unrolled_end =                \
  |  |   54|  4.11k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  4.11k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  4.11k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 0, False: 4.11k]
  |  |  ------------------
  |  |   56|      0|            _to[0] = (to_type) _iter[0];                \
  |  |   57|      0|            _to[1] = (to_type) _iter[1];                \
  |  |   58|      0|            _to[2] = (to_type) _iter[2];                \
  |  |   59|      0|            _to[3] = (to_type) _iter[3];                \
  |  |   60|      0|            _iter += 4; _to += 4;                       \
  |  |   61|      0|        }                                               \
  |  |   62|  10.1k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 6.01k, False: 4.11k]
  |  |  ------------------
  |  |   63|  6.01k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  4.11k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 4.11k]
  |  |  ------------------
  ------------------
 2457|  4.11k|                Py_UCS1, Py_UCS4,
 2458|  4.11k|                (const Py_UCS1 *)data,
 2459|  4.11k|                ((const Py_UCS1 *)data) + len,
 2460|  4.11k|                result);
 2461|  4.11k|        }
 2462|  4.11k|        return result;
 2463|      0|    default:
  ------------------
  |  Branch (2463:5): [True: 0, False: 6.52k]
  ------------------
 2464|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2465|      0|        return NULL;
 2466|  6.52k|    }
 2467|  6.52k|}
unicodeobject.c:make_bloom_mask:
  932|  4.91k|{
  933|  4.91k|#define BLOOM_UPDATE(TYPE, MASK, PTR, LEN)             \
  934|  4.91k|    do {                                               \
  935|  4.91k|        TYPE *data = (TYPE *)PTR;                      \
  936|  4.91k|        TYPE *end = data + LEN;                        \
  937|  4.91k|        Py_UCS4 ch;                                    \
  938|  4.91k|        for (; data != end; data++) {                  \
  939|  4.91k|            ch = *data;                                \
  940|  4.91k|            MASK |= (1UL << (ch & (BLOOM_WIDTH - 1))); \
  941|  4.91k|        }                                              \
  942|  4.91k|        break;                                         \
  943|  4.91k|    } while (0)
  944|       |
  945|       |    /* calculate simple bloom-style bitmask for a given unicode string */
  946|       |
  947|  4.91k|    BLOOM_MASK mask;
  ------------------
  |  |  920|  4.91k|#define BLOOM_MASK unsigned long
  ------------------
  948|       |
  949|  4.91k|    mask = 0;
  950|  4.91k|    switch (kind) {
  951|  4.91k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (951:5): [True: 4.91k, False: 2]
  ------------------
  952|  4.91k|        BLOOM_UPDATE(Py_UCS1, mask, ptr, len);
  ------------------
  |  |  934|  4.91k|    do {                                               \
  |  |  935|  4.91k|        TYPE *data = (TYPE *)PTR;                      \
  |  |  936|  4.91k|        TYPE *end = data + LEN;                        \
  |  |  937|  4.91k|        Py_UCS4 ch;                                    \
  |  |  938|  9.82k|        for (; data != end; data++) {                  \
  |  |  ------------------
  |  |  |  Branch (938:16): [True: 4.91k, False: 4.91k]
  |  |  ------------------
  |  |  939|  4.91k|            ch = *data;                                \
  |  |  940|  4.91k|            MASK |= (1UL << (ch & (BLOOM_WIDTH - 1))); \
  |  |  ------------------
  |  |  |  |  913|  4.91k|#define BLOOM_WIDTH 64
  |  |  ------------------
  |  |  941|  4.91k|        }                                              \
  |  |  942|  4.91k|        break;                                         \
  |  |  943|  4.91k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (943:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  953|  4.91k|        break;
  954|      2|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (954:5): [True: 2, False: 4.91k]
  ------------------
  955|      2|        BLOOM_UPDATE(Py_UCS2, mask, ptr, len);
  ------------------
  |  |  934|      2|    do {                                               \
  |  |  935|      2|        TYPE *data = (TYPE *)PTR;                      \
  |  |  936|      2|        TYPE *end = data + LEN;                        \
  |  |  937|      2|        Py_UCS4 ch;                                    \
  |  |  938|     18|        for (; data != end; data++) {                  \
  |  |  ------------------
  |  |  |  Branch (938:16): [True: 16, False: 2]
  |  |  ------------------
  |  |  939|     16|            ch = *data;                                \
  |  |  940|     16|            MASK |= (1UL << (ch & (BLOOM_WIDTH - 1))); \
  |  |  ------------------
  |  |  |  |  913|     16|#define BLOOM_WIDTH 64
  |  |  ------------------
  |  |  941|     16|        }                                              \
  |  |  942|      2|        break;                                         \
  |  |  943|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (943:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  956|      2|        break;
  957|      0|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (957:5): [True: 0, False: 4.91k]
  ------------------
  958|      0|        BLOOM_UPDATE(Py_UCS4, mask, ptr, len);
  ------------------
  |  |  934|      0|    do {                                               \
  |  |  935|      0|        TYPE *data = (TYPE *)PTR;                      \
  |  |  936|      0|        TYPE *end = data + LEN;                        \
  |  |  937|      0|        Py_UCS4 ch;                                    \
  |  |  938|      0|        for (; data != end; data++) {                  \
  |  |  ------------------
  |  |  |  Branch (938:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  939|      0|            ch = *data;                                \
  |  |  940|      0|            MASK |= (1UL << (ch & (BLOOM_WIDTH - 1))); \
  |  |  ------------------
  |  |  |  |  913|      0|#define BLOOM_WIDTH 64
  |  |  ------------------
  |  |  941|      0|        }                                              \
  |  |  942|      0|        break;                                         \
  |  |  943|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (943:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  959|      0|        break;
  960|      0|    default:
  ------------------
  |  Branch (960:5): [True: 0, False: 4.91k]
  ------------------
  961|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  962|  4.91k|    }
  963|  4.91k|    return mask;
  964|       |
  965|  4.91k|#undef BLOOM_UPDATE
  966|  4.91k|}
unicodeobject.c:unicode_result_unchanged:
  756|   129k|{
  757|   129k|    if (PyUnicode_CheckExact(unicode)) {
  ------------------
  |  |  104|   129k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   129k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 129k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  758|   129k|        return Py_NewRef(unicode);
  ------------------
  |  |  550|   129k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   129k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   129k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  759|   129k|    }
  760|      0|    else
  761|       |        /* Subtype -- return genuine unicode string with the same value. */
  762|      0|        return _PyUnicode_Copy(unicode);
  763|   129k|}
unicodeobject.c:replace:
10930|  46.4k|{
10931|  46.4k|    PyObject *u;
10932|  46.4k|    const char *sbuf = PyUnicode_DATA(self);
  ------------------
  |  |  284|  46.4k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10933|  46.4k|    const void *buf1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|  46.4k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10934|  46.4k|    const void *buf2 = PyUnicode_DATA(str2);
  ------------------
  |  |  284|  46.4k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10935|  46.4k|    int srelease = 0, release1 = 0, release2 = 0;
10936|  46.4k|    int skind = PyUnicode_KIND(self);
  ------------------
  |  |  258|  46.4k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  92.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 46.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10937|  46.4k|    int kind1 = PyUnicode_KIND(str1);
  ------------------
  |  |  258|  46.4k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  92.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 46.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10938|  46.4k|    int kind2 = PyUnicode_KIND(str2);
  ------------------
  |  |  258|  46.4k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  92.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 46.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10939|  46.4k|    Py_ssize_t slen = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|  46.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10940|  46.4k|    Py_ssize_t len1 = PyUnicode_GET_LENGTH(str1);
  ------------------
  |  |  299|  46.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10941|  46.4k|    Py_ssize_t len2 = PyUnicode_GET_LENGTH(str2);
  ------------------
  |  |  299|  46.4k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10942|  46.4k|    int mayshrink;
10943|  46.4k|    Py_UCS4 maxchar, maxchar_str1, maxchar_str2;
10944|       |
10945|  46.4k|    if (slen < len1)
  ------------------
  |  Branch (10945:9): [True: 5.02k, False: 41.4k]
  ------------------
10946|  5.02k|        goto nothing;
10947|       |
10948|  41.4k|    if (maxcount < 0)
  ------------------
  |  Branch (10948:9): [True: 41.4k, False: 0]
  ------------------
10949|  41.4k|        maxcount = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  41.4k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
10950|      0|    else if (maxcount == 0)
  ------------------
  |  Branch (10950:14): [True: 0, False: 0]
  ------------------
10951|      0|        goto nothing;
10952|       |
10953|  41.4k|    if (str1 == str2)
  ------------------
  |  Branch (10953:9): [True: 0, False: 41.4k]
  ------------------
10954|      0|        goto nothing;
10955|       |
10956|  41.4k|    maxchar = PyUnicode_MAX_CHAR_VALUE(self);
  ------------------
  |  |  405|  41.4k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10957|  41.4k|    maxchar_str1 = PyUnicode_MAX_CHAR_VALUE(str1);
  ------------------
  |  |  405|  41.4k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10958|  41.4k|    if (maxchar < maxchar_str1)
  ------------------
  |  Branch (10958:9): [True: 0, False: 41.4k]
  ------------------
10959|       |        /* substring too wide to be present */
10960|      0|        goto nothing;
10961|  41.4k|    maxchar_str2 = PyUnicode_MAX_CHAR_VALUE(str2);
  ------------------
  |  |  405|  41.4k|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10962|       |    /* Replacing str1 with str2 may cause a maxchar reduction in the
10963|       |       result string. */
10964|  41.4k|    mayshrink = (maxchar_str2 < maxchar_str1) && (maxchar == maxchar_str1);
  ------------------
  |  Branch (10964:17): [True: 0, False: 41.4k]
  |  Branch (10964:50): [True: 0, False: 0]
  ------------------
10965|  41.4k|    maxchar = Py_MAX(maxchar, maxchar_str2);
  ------------------
  |  |  126|  41.4k|       __extension__ \
  |  |  127|  41.4k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  41.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  41.4k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  41.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  41.4k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 7.83k, False: 33.6k]
  |  |  ------------------
  ------------------
10966|       |
10967|  41.4k|    if (len1 == len2) {
  ------------------
  |  Branch (10967:9): [True: 312, False: 41.1k]
  ------------------
10968|       |        /* same length */
10969|    312|        if (len1 == 0)
  ------------------
  |  Branch (10969:13): [True: 0, False: 312]
  ------------------
10970|      0|            goto nothing;
10971|    312|        if (len1 == 1) {
  ------------------
  |  Branch (10971:13): [True: 312, False: 0]
  ------------------
10972|       |            /* replace characters */
10973|    312|            Py_UCS4 u1, u2;
10974|    312|            Py_ssize_t pos;
10975|       |
10976|    312|            u1 = PyUnicode_READ(kind1, buf1, 0);
  ------------------
  |  |  354|    312|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|    312|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|    312|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|    312|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|    312|                   (index))
  ------------------
10977|    312|            pos = findchar(sbuf, skind, slen, u1, 1);
10978|    312|            if (pos < 0)
  ------------------
  |  Branch (10978:17): [True: 257, False: 55]
  ------------------
10979|    257|                goto nothing;
10980|     55|            u2 = PyUnicode_READ(kind2, buf2, 0);
  ------------------
  |  |  354|     55|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|     55|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|     55|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|     55|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|     55|                   (index))
  ------------------
10981|     55|            u = PyUnicode_New(slen, maxchar);
10982|     55|            if (!u)
  ------------------
  |  Branch (10982:17): [True: 0, False: 55]
  ------------------
10983|      0|                goto error;
10984|       |
10985|     55|            _PyUnicode_FastCopyCharacters(u, 0, self, 0, slen);
10986|     55|            replace_1char_inplace(u, pos, u1, u2, maxcount);
10987|     55|        }
10988|      0|        else {
10989|      0|            int rkind = skind;
10990|      0|            char *res;
10991|      0|            Py_ssize_t i;
10992|       |
10993|      0|            if (kind1 < rkind) {
  ------------------
  |  Branch (10993:17): [True: 0, False: 0]
  ------------------
10994|       |                /* widen substring */
10995|      0|                buf1 = unicode_askind(kind1, buf1, len1, rkind);
10996|      0|                if (!buf1) goto error;
  ------------------
  |  Branch (10996:21): [True: 0, False: 0]
  ------------------
10997|      0|                release1 = 1;
10998|      0|            }
10999|      0|            i = anylib_find(rkind, self, sbuf, slen, str1, buf1, len1, 0);
11000|      0|            if (i < 0)
  ------------------
  |  Branch (11000:17): [True: 0, False: 0]
  ------------------
11001|      0|                goto nothing;
11002|      0|            if (rkind > kind2) {
  ------------------
  |  Branch (11002:17): [True: 0, False: 0]
  ------------------
11003|       |                /* widen replacement */
11004|      0|                buf2 = unicode_askind(kind2, buf2, len2, rkind);
11005|      0|                if (!buf2) goto error;
  ------------------
  |  Branch (11005:21): [True: 0, False: 0]
  ------------------
11006|      0|                release2 = 1;
11007|      0|            }
11008|      0|            else if (rkind < kind2) {
  ------------------
  |  Branch (11008:22): [True: 0, False: 0]
  ------------------
11009|       |                /* widen self and buf1 */
11010|      0|                rkind = kind2;
11011|      0|                if (release1) {
  ------------------
  |  Branch (11011:21): [True: 0, False: 0]
  ------------------
11012|      0|                    assert(buf1 != PyUnicode_DATA(str1));
  ------------------
  |  Branch (11012:21): [True: 0, False: 0]
  ------------------
11013|      0|                    PyMem_Free((void *)buf1);
11014|      0|                    buf1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11015|      0|                    release1 = 0;
11016|      0|                }
11017|      0|                sbuf = unicode_askind(skind, sbuf, slen, rkind);
11018|      0|                if (!sbuf) goto error;
  ------------------
  |  Branch (11018:21): [True: 0, False: 0]
  ------------------
11019|      0|                srelease = 1;
11020|      0|                buf1 = unicode_askind(kind1, buf1, len1, rkind);
11021|      0|                if (!buf1) goto error;
  ------------------
  |  Branch (11021:21): [True: 0, False: 0]
  ------------------
11022|      0|                release1 = 1;
11023|      0|            }
11024|      0|            u = PyUnicode_New(slen, maxchar);
11025|      0|            if (!u)
  ------------------
  |  Branch (11025:17): [True: 0, False: 0]
  ------------------
11026|      0|                goto error;
11027|      0|            assert(PyUnicode_KIND(u) == rkind);
  ------------------
  |  Branch (11027:13): [True: 0, False: 0]
  |  Branch (11027:13): [True: 0, False: 0]
  ------------------
11028|      0|            res = PyUnicode_DATA(u);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11029|       |
11030|      0|            memcpy(res, sbuf, rkind * slen);
11031|       |            /* change everything in-place, starting with this one */
11032|      0|            memcpy(res + rkind * i,
11033|      0|                   buf2,
11034|      0|                   rkind * len2);
11035|      0|            i += len1;
11036|       |
11037|      0|            while ( --maxcount > 0) {
  ------------------
  |  Branch (11037:21): [True: 0, False: 0]
  ------------------
11038|      0|                i = anylib_find(rkind, self,
11039|      0|                                sbuf+rkind*i, slen-i,
11040|      0|                                str1, buf1, len1, i);
11041|      0|                if (i == -1)
  ------------------
  |  Branch (11041:21): [True: 0, False: 0]
  ------------------
11042|      0|                    break;
11043|      0|                memcpy(res + rkind * i,
11044|      0|                       buf2,
11045|      0|                       rkind * len2);
11046|      0|                i += len1;
11047|      0|            }
11048|      0|        }
11049|    312|    }
11050|  41.1k|    else {
11051|  41.1k|        Py_ssize_t n, i, j, ires;
11052|  41.1k|        Py_ssize_t new_size;
11053|  41.1k|        int rkind = skind;
11054|  41.1k|        char *res;
11055|       |
11056|  41.1k|        if (kind1 < rkind) {
  ------------------
  |  Branch (11056:13): [True: 3.67k, False: 37.4k]
  ------------------
11057|       |            /* widen substring */
11058|  3.67k|            buf1 = unicode_askind(kind1, buf1, len1, rkind);
11059|  3.67k|            if (!buf1) goto error;
  ------------------
  |  Branch (11059:17): [True: 0, False: 3.67k]
  ------------------
11060|  3.67k|            release1 = 1;
11061|  3.67k|        }
11062|  41.1k|        n = anylib_count(rkind, self, sbuf, slen, str1, buf1, len1, maxcount);
11063|  41.1k|        if (n == 0)
  ------------------
  |  Branch (11063:13): [True: 30.2k, False: 10.9k]
  ------------------
11064|  30.2k|            goto nothing;
11065|  10.9k|        if (kind2 < rkind) {
  ------------------
  |  Branch (11065:13): [True: 2.84k, False: 8.07k]
  ------------------
11066|       |            /* widen replacement */
11067|  2.84k|            buf2 = unicode_askind(kind2, buf2, len2, rkind);
11068|  2.84k|            if (!buf2) goto error;
  ------------------
  |  Branch (11068:17): [True: 0, False: 2.84k]
  ------------------
11069|  2.84k|            release2 = 1;
11070|  2.84k|        }
11071|  8.07k|        else if (kind2 > rkind) {
  ------------------
  |  Branch (11071:18): [True: 0, False: 8.07k]
  ------------------
11072|       |            /* widen self and buf1 */
11073|      0|            rkind = kind2;
11074|      0|            sbuf = unicode_askind(skind, sbuf, slen, rkind);
11075|      0|            if (!sbuf) goto error;
  ------------------
  |  Branch (11075:17): [True: 0, False: 0]
  ------------------
11076|      0|            srelease = 1;
11077|      0|            if (release1) {
  ------------------
  |  Branch (11077:17): [True: 0, False: 0]
  ------------------
11078|      0|                assert(buf1 != PyUnicode_DATA(str1));
  ------------------
  |  Branch (11078:17): [True: 0, False: 0]
  ------------------
11079|      0|                PyMem_Free((void *)buf1);
11080|      0|                buf1 = PyUnicode_DATA(str1);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11081|      0|                release1 = 0;
11082|      0|            }
11083|      0|            buf1 = unicode_askind(kind1, buf1, len1, rkind);
11084|      0|            if (!buf1) goto error;
  ------------------
  |  Branch (11084:17): [True: 0, False: 0]
  ------------------
11085|      0|            release1 = 1;
11086|      0|        }
11087|       |        /* new_size = PyUnicode_GET_LENGTH(self) + n * (PyUnicode_GET_LENGTH(str2) -
11088|       |           PyUnicode_GET_LENGTH(str1)); */
11089|  10.9k|        if (len1 < len2 && len2 - len1 > (PY_SSIZE_T_MAX - slen) / n) {
  ------------------
  |  |  137|  7.07k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (11089:13): [True: 7.07k, False: 3.84k]
  |  Branch (11089:28): [True: 0, False: 7.07k]
  ------------------
11090|      0|                PyErr_SetString(PyExc_OverflowError,
11091|      0|                                "replace string is too long");
11092|      0|                goto error;
11093|      0|        }
11094|  10.9k|        new_size = slen + n * (len2 - len1);
11095|  10.9k|        if (new_size == 0) {
  ------------------
  |  Branch (11095:13): [True: 0, False: 10.9k]
  ------------------
11096|      0|            u = _PyUnicode_GetEmpty();
11097|      0|            goto done;
11098|      0|        }
11099|  10.9k|        if (new_size > (PY_SSIZE_T_MAX / rkind)) {
  ------------------
  |  |  137|  10.9k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (11099:13): [True: 0, False: 10.9k]
  ------------------
11100|      0|            PyErr_SetString(PyExc_OverflowError,
11101|      0|                            "replace string is too long");
11102|      0|            goto error;
11103|      0|        }
11104|  10.9k|        u = PyUnicode_New(new_size, maxchar);
11105|  10.9k|        if (!u)
  ------------------
  |  Branch (11105:13): [True: 0, False: 10.9k]
  ------------------
11106|      0|            goto error;
11107|  10.9k|        assert(PyUnicode_KIND(u) == rkind);
  ------------------
  |  Branch (11107:9): [True: 10.9k, False: 0]
  |  Branch (11107:9): [True: 10.9k, False: 0]
  ------------------
11108|  10.9k|        res = PyUnicode_DATA(u);
  ------------------
  |  |  284|  10.9k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11109|  10.9k|        ires = i = 0;
11110|  10.9k|        if (len1 > 0) {
  ------------------
  |  Branch (11110:13): [True: 10.9k, False: 0]
  ------------------
11111|  69.8k|            while (n-- > 0) {
  ------------------
  |  Branch (11111:20): [True: 58.9k, False: 10.9k]
  ------------------
11112|       |                /* look for next match */
11113|  58.9k|                j = anylib_find(rkind, self,
11114|  58.9k|                                sbuf + rkind * i, slen-i,
11115|  58.9k|                                str1, buf1, len1, i);
11116|  58.9k|                if (j == -1)
  ------------------
  |  Branch (11116:21): [True: 0, False: 58.9k]
  ------------------
11117|      0|                    break;
11118|  58.9k|                else if (j > i) {
  ------------------
  |  Branch (11118:26): [True: 17.2k, False: 41.6k]
  ------------------
11119|       |                    /* copy unchanged part [i:j] */
11120|  17.2k|                    memcpy(res + rkind * ires,
11121|  17.2k|                           sbuf + rkind * i,
11122|  17.2k|                           rkind * (j-i));
11123|  17.2k|                    ires += j - i;
11124|  17.2k|                }
11125|       |                /* copy substitution string */
11126|  58.9k|                if (len2 > 0) {
  ------------------
  |  Branch (11126:21): [True: 58.9k, False: 24]
  ------------------
11127|  58.9k|                    memcpy(res + rkind * ires,
11128|  58.9k|                           buf2,
11129|  58.9k|                           rkind * len2);
11130|  58.9k|                    ires += len2;
11131|  58.9k|                }
11132|  58.9k|                i = j + len1;
11133|  58.9k|            }
11134|  10.9k|            if (i < slen)
  ------------------
  |  Branch (11134:17): [True: 7.34k, False: 3.58k]
  ------------------
11135|       |                /* copy tail [i:] */
11136|  7.34k|                memcpy(res + rkind * ires,
11137|  7.34k|                       sbuf + rkind * i,
11138|  7.34k|                       rkind * (slen-i));
11139|  10.9k|        }
11140|      0|        else {
11141|       |            /* interleave */
11142|      0|            while (n > 0) {
  ------------------
  |  Branch (11142:20): [True: 0, False: 0]
  ------------------
11143|      0|                memcpy(res + rkind * ires,
11144|      0|                       buf2,
11145|      0|                       rkind * len2);
11146|      0|                ires += len2;
11147|      0|                if (--n <= 0)
  ------------------
  |  Branch (11147:21): [True: 0, False: 0]
  ------------------
11148|      0|                    break;
11149|      0|                memcpy(res + rkind * ires,
11150|      0|                       sbuf + rkind * i,
11151|      0|                       rkind);
11152|      0|                ires++;
11153|      0|                i++;
11154|      0|            }
11155|      0|            memcpy(res + rkind * ires,
11156|      0|                   sbuf + rkind * i,
11157|      0|                   rkind * (slen-i));
11158|      0|        }
11159|  10.9k|    }
11160|       |
11161|  10.9k|    if (mayshrink) {
  ------------------
  |  Branch (11161:9): [True: 0, False: 10.9k]
  ------------------
11162|      0|        unicode_adjust_maxchar(&u);
11163|      0|        if (u == NULL)
  ------------------
  |  Branch (11163:13): [True: 0, False: 0]
  ------------------
11164|      0|            goto error;
11165|      0|    }
11166|       |
11167|  10.9k|  done:
11168|  10.9k|    assert(srelease == (sbuf != NULL && sbuf != PyUnicode_DATA(self)));
  ------------------
  |  Branch (11168:5): [True: 10.9k, False: 0]
  |  Branch (11168:5): [True: 0, False: 10.9k]
  |  Branch (11168:5): [True: 10.9k, False: 0]
  ------------------
11169|  10.9k|    assert(release1 == (buf1 != NULL && buf1 != PyUnicode_DATA(str1)));
  ------------------
  |  Branch (11169:5): [True: 10.9k, False: 0]
  |  Branch (11169:5): [True: 2.84k, False: 8.13k]
  |  Branch (11169:5): [True: 10.9k, False: 0]
  ------------------
11170|  10.9k|    assert(release2 == (buf2 != NULL && buf2 != PyUnicode_DATA(str2)));
  ------------------
  |  Branch (11170:5): [True: 10.9k, False: 0]
  |  Branch (11170:5): [True: 2.84k, False: 8.13k]
  |  Branch (11170:5): [True: 10.9k, False: 0]
  ------------------
11171|  10.9k|    if (srelease)
  ------------------
  |  Branch (11171:9): [True: 0, False: 10.9k]
  ------------------
11172|      0|        PyMem_Free((void *)sbuf);
11173|  10.9k|    if (release1)
  ------------------
  |  Branch (11173:9): [True: 2.84k, False: 8.13k]
  ------------------
11174|  2.84k|        PyMem_Free((void *)buf1);
11175|  10.9k|    if (release2)
  ------------------
  |  Branch (11175:9): [True: 2.84k, False: 8.13k]
  ------------------
11176|  2.84k|        PyMem_Free((void *)buf2);
11177|  10.9k|    assert(_PyUnicode_CheckConsistency(u, 1));
  ------------------
  |  Branch (11177:5): [True: 10.9k, False: 0]
  ------------------
11178|  10.9k|    return u;
11179|       |
11180|  35.5k|  nothing:
11181|       |    /* nothing to replace; return original string (when possible) */
11182|  35.5k|    assert(srelease == (sbuf != NULL && sbuf != PyUnicode_DATA(self)));
  ------------------
  |  Branch (11182:5): [True: 35.5k, False: 0]
  |  Branch (11182:5): [True: 0, False: 35.5k]
  |  Branch (11182:5): [True: 35.5k, False: 0]
  ------------------
11183|  35.5k|    assert(release1 == (buf1 != NULL && buf1 != PyUnicode_DATA(str1)));
  ------------------
  |  Branch (11183:5): [True: 35.5k, False: 0]
  |  Branch (11183:5): [True: 826, False: 34.6k]
  |  Branch (11183:5): [True: 35.5k, False: 0]
  ------------------
11184|  35.5k|    assert(release2 == (buf2 != NULL && buf2 != PyUnicode_DATA(str2)));
  ------------------
  |  Branch (11184:5): [True: 35.5k, False: 0]
  |  Branch (11184:5): [True: 0, False: 35.5k]
  |  Branch (11184:5): [True: 35.5k, False: 0]
  ------------------
11185|  35.5k|    if (srelease)
  ------------------
  |  Branch (11185:9): [True: 0, False: 35.5k]
  ------------------
11186|      0|        PyMem_Free((void *)sbuf);
11187|  35.5k|    if (release1)
  ------------------
  |  Branch (11187:9): [True: 826, False: 34.6k]
  ------------------
11188|    826|        PyMem_Free((void *)buf1);
11189|  35.5k|    if (release2)
  ------------------
  |  Branch (11189:9): [True: 0, False: 35.5k]
  ------------------
11190|      0|        PyMem_Free((void *)buf2);
11191|  35.5k|    return unicode_result_unchanged(self);
11192|       |
11193|      0|  error:
11194|      0|    assert(srelease == (sbuf != NULL && sbuf != PyUnicode_DATA(self)));
  ------------------
  |  Branch (11194:5): [True: 0, False: 0]
  |  Branch (11194:5): [True: 0, False: 0]
  |  Branch (11194:5): [True: 0, False: 0]
  ------------------
11195|      0|    assert(release1 == (buf1 != NULL && buf1 != PyUnicode_DATA(str1)));
  ------------------
  |  Branch (11195:5): [True: 0, False: 0]
  |  Branch (11195:5): [True: 0, False: 0]
  |  Branch (11195:5): [True: 0, False: 0]
  ------------------
11196|      0|    assert(release2 == (buf2 != NULL && buf2 != PyUnicode_DATA(str2)));
  ------------------
  |  Branch (11196:5): [True: 0, False: 0]
  |  Branch (11196:5): [True: 0, False: 0]
  |  Branch (11196:5): [True: 0, False: 0]
  ------------------
11197|      0|    if (srelease)
  ------------------
  |  Branch (11197:9): [True: 0, False: 0]
  ------------------
11198|      0|        PyMem_Free((void *)sbuf);
11199|      0|    if (release1)
  ------------------
  |  Branch (11199:9): [True: 0, False: 0]
  ------------------
11200|      0|        PyMem_Free((void *)buf1);
11201|      0|    if (release2)
  ------------------
  |  Branch (11201:9): [True: 0, False: 0]
  ------------------
11202|      0|        PyMem_Free((void *)buf2);
11203|       |    return NULL;
11204|      0|}
unicodeobject.c:replace_1char_inplace:
10905|     55|{
10906|     55|    int kind = PyUnicode_KIND(u);
  ------------------
  |  |  258|     55|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    110|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 55, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10907|     55|    void *data = PyUnicode_DATA(u);
  ------------------
  |  |  284|     55|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10908|     55|    Py_ssize_t len = PyUnicode_GET_LENGTH(u);
  ------------------
  |  |  299|     55|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     55|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     55|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10909|     55|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (10909:9): [True: 55, False: 0]
  ------------------
10910|     55|        ucs1lib_replace_1char_inplace((Py_UCS1 *)data + pos,
10911|     55|                                      (Py_UCS1 *)data + len,
10912|     55|                                      u1, u2, maxcount);
10913|     55|    }
10914|      0|    else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (10914:14): [True: 0, False: 0]
  ------------------
10915|      0|        ucs2lib_replace_1char_inplace((Py_UCS2 *)data + pos,
10916|      0|                                      (Py_UCS2 *)data + len,
10917|      0|                                      u1, u2, maxcount);
10918|      0|    }
10919|      0|    else {
10920|      0|        assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (10920:9): [True: 0, False: 0]
  ------------------
10921|      0|        ucs4lib_replace_1char_inplace((Py_UCS4 *)data + pos,
10922|      0|                                      (Py_UCS4 *)data + len,
10923|      0|                                      u1, u2, maxcount);
10924|      0|    }
10925|     55|}
unicodeobject.c:anylib_find:
10872|  58.9k|{
10873|  58.9k|    switch (kind) {
  ------------------
  |  Branch (10873:13): [True: 58.9k, False: 0]
  ------------------
10874|  32.8k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (10874:5): [True: 32.8k, False: 26.0k]
  ------------------
10875|  32.8k|        if (PyUnicode_IS_ASCII(str1) && PyUnicode_IS_ASCII(str2))
  ------------------
  |  |  227|  65.6k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 23.0k, False: 9.82k]
  |  |  ------------------
  ------------------
                      if (PyUnicode_IS_ASCII(str1) && PyUnicode_IS_ASCII(str2))
  ------------------
  |  |  227|  23.0k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  23.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 23.0k, False: 0]
  |  |  ------------------
  ------------------
10876|  23.0k|            return asciilib_find(buf1, len1, buf2, len2, offset);
10877|  9.82k|        else
10878|  9.82k|            return ucs1lib_find(buf1, len1, buf2, len2, offset);
10879|  9.59k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (10879:5): [True: 9.59k, False: 49.3k]
  ------------------
10880|  9.59k|        return ucs2lib_find(buf1, len1, buf2, len2, offset);
10881|  16.4k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (10881:5): [True: 16.4k, False: 42.4k]
  ------------------
10882|  16.4k|        return ucs4lib_find(buf1, len1, buf2, len2, offset);
10883|  58.9k|    }
10884|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
10885|  58.9k|}
unicodeobject.c:anylib_count:
10890|  41.1k|{
10891|  41.1k|    switch (kind) {
  ------------------
  |  Branch (10891:13): [True: 41.1k, False: 0]
  ------------------
10892|  37.4k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (10892:5): [True: 37.4k, False: 3.67k]
  ------------------
10893|  37.4k|        return ucs1lib_count(sbuf, slen, buf1, len1, maxcount);
10894|  1.47k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (10894:5): [True: 1.47k, False: 39.6k]
  ------------------
10895|  1.47k|        return ucs2lib_count(sbuf, slen, buf1, len1, maxcount);
10896|  2.20k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (10896:5): [True: 2.20k, False: 38.9k]
  ------------------
10897|  2.20k|        return ucs4lib_count(sbuf, slen, buf1, len1, maxcount);
10898|  41.1k|    }
10899|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
10900|  41.1k|}
unicodeobject.c:split:
10689|    251|{
10690|    251|    int kind1, kind2;
10691|    251|    const void *buf1, *buf2;
10692|    251|    Py_ssize_t len1, len2;
10693|    251|    PyObject* out;
10694|    251|    len1 = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|    251|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    251|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    251|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10695|    251|    kind1 = PyUnicode_KIND(self);
  ------------------
  |  |  258|    251|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    502|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 251, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10696|       |
10697|    251|    if (substring == NULL) {
  ------------------
  |  Branch (10697:9): [True: 2, False: 249]
  ------------------
10698|      2|        if (maxcount < 0) {
  ------------------
  |  Branch (10698:13): [True: 2, False: 0]
  ------------------
10699|      2|            maxcount = (len1 - 1) / 2 + 1;
10700|      2|        }
10701|      2|        switch (kind1) {
10702|      2|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (10702:9): [True: 2, False: 0]
  ------------------
10703|      2|            if (PyUnicode_IS_ASCII(self))
  ------------------
  |  |  227|      2|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 2, False: 0]
  |  |  ------------------
  ------------------
10704|      2|                return asciilib_split_whitespace(
10705|      2|                    self,  PyUnicode_1BYTE_DATA(self),
  ------------------
  |  |  291|      2|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      2|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10706|      2|                    len1, maxcount
10707|      2|                    );
10708|      0|            else
10709|      0|                return ucs1lib_split_whitespace(
10710|      0|                    self,  PyUnicode_1BYTE_DATA(self),
  ------------------
  |  |  291|      0|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10711|      0|                    len1, maxcount
10712|      0|                    );
10713|      0|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (10713:9): [True: 0, False: 2]
  ------------------
10714|      0|            return ucs2lib_split_whitespace(
10715|      0|                self,  PyUnicode_2BYTE_DATA(self),
  ------------------
  |  |  292|      0|#define PyUnicode_2BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS2*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10716|      0|                len1, maxcount
10717|      0|                );
10718|      0|        case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (10718:9): [True: 0, False: 2]
  ------------------
10719|      0|            return ucs4lib_split_whitespace(
10720|      0|                self,  PyUnicode_4BYTE_DATA(self),
  ------------------
  |  |  293|      0|#define PyUnicode_4BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS4*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
10721|      0|                len1, maxcount
10722|      0|                );
10723|      0|        default:
  ------------------
  |  Branch (10723:9): [True: 0, False: 2]
  ------------------
10724|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
10725|      2|        }
10726|      2|    }
10727|       |
10728|    249|    kind2 = PyUnicode_KIND(substring);
  ------------------
  |  |  258|    249|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    498|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 249, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10729|    249|    len2 = PyUnicode_GET_LENGTH(substring);
  ------------------
  |  |  299|    249|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10730|    249|    if (maxcount < 0) {
  ------------------
  |  Branch (10730:9): [True: 249, False: 0]
  ------------------
10731|       |        // if len2 == 0, it will raise ValueError.
10732|    249|        maxcount = len2 == 0 ? 0 : (len1 / len2) + 1;
  ------------------
  |  Branch (10732:20): [True: 0, False: 249]
  ------------------
10733|       |        // handle expected overflow case: (Py_SSIZE_T_MAX / 1) + 1
10734|    249|        maxcount = maxcount < 0 ? len1 : maxcount;
  ------------------
  |  Branch (10734:20): [True: 0, False: 249]
  ------------------
10735|    249|    }
10736|    249|    if (kind1 < kind2 || len1 < len2) {
  ------------------
  |  Branch (10736:9): [True: 0, False: 249]
  |  Branch (10736:26): [True: 0, False: 249]
  ------------------
10737|      0|        out = PyList_New(1);
10738|      0|        if (out == NULL)
  ------------------
  |  Branch (10738:13): [True: 0, False: 0]
  ------------------
10739|      0|            return NULL;
10740|      0|        PyList_SET_ITEM(out, 0, Py_NewRef(self));
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10741|      0|        return out;
10742|      0|    }
10743|    249|    buf1 = PyUnicode_DATA(self);
  ------------------
  |  |  284|    249|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10744|    249|    buf2 = PyUnicode_DATA(substring);
  ------------------
  |  |  284|    249|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10745|    249|    if (kind2 != kind1) {
  ------------------
  |  Branch (10745:9): [True: 0, False: 249]
  ------------------
10746|      0|        buf2 = unicode_askind(kind2, buf2, len2, kind1);
10747|      0|        if (!buf2)
  ------------------
  |  Branch (10747:13): [True: 0, False: 0]
  ------------------
10748|      0|            return NULL;
10749|      0|    }
10750|       |
10751|    249|    switch (kind1) {
10752|    249|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (10752:5): [True: 249, False: 0]
  ------------------
10753|    249|        if (PyUnicode_IS_ASCII(self) && PyUnicode_IS_ASCII(substring))
  ------------------
  |  |  227|    498|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 249, False: 0]
  |  |  ------------------
  ------------------
                      if (PyUnicode_IS_ASCII(self) && PyUnicode_IS_ASCII(substring))
  ------------------
  |  |  227|    249|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    249|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    249|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 249, False: 0]
  |  |  ------------------
  ------------------
10754|    249|            out = asciilib_split(
10755|    249|                self,  buf1, len1, buf2, len2, maxcount);
10756|      0|        else
10757|      0|            out = ucs1lib_split(
10758|      0|                self,  buf1, len1, buf2, len2, maxcount);
10759|    249|        break;
10760|      0|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (10760:5): [True: 0, False: 249]
  ------------------
10761|      0|        out = ucs2lib_split(
10762|      0|            self,  buf1, len1, buf2, len2, maxcount);
10763|      0|        break;
10764|      0|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (10764:5): [True: 0, False: 249]
  ------------------
10765|      0|        out = ucs4lib_split(
10766|      0|            self,  buf1, len1, buf2, len2, maxcount);
10767|      0|        break;
10768|      0|    default:
  ------------------
  |  Branch (10768:5): [True: 0, False: 249]
  ------------------
10769|      0|        out = NULL;
10770|    249|    }
10771|    249|    assert((kind2 != kind1) == (buf2 != PyUnicode_DATA(substring)));
  ------------------
  |  Branch (10771:5): [True: 249, False: 0]
  ------------------
10772|    249|    if (kind2 != kind1)
  ------------------
  |  Branch (10772:9): [True: 0, False: 249]
  ------------------
10773|      0|        PyMem_Free((void *)buf2);
10774|    249|    return out;
10775|    249|}
unicodeobject.c:unicode_dealloc:
 1642|  23.3M|{
 1643|       |#ifdef Py_DEBUG
 1644|       |    if (!unicode_is_finalizing() && unicode_is_singleton(unicode)) {
 1645|       |        _Py_FatalRefcountError("deallocating an Unicode singleton");
 1646|       |    }
 1647|       |#endif
 1648|  46.7M|    if (_PyUnicode_STATE(unicode).statically_allocated) {
  ------------------
  |  |  157|  23.3M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.3M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.3M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1648:9): [True: 23.3M, False: 0]
  |  Branch (1648:9): [True: 0, False: 23.3M]
  ------------------
 1649|       |        /* This should never get called, but we also don't want to SEGV if
 1650|       |        * we accidentally decref an immortal string out of existence. Since
 1651|       |        * the string is an immortal object, just re-set the reference count.
 1652|       |        */
 1653|       |#ifdef Py_DEBUG
 1654|       |        Py_UNREACHABLE();
 1655|       |#endif
 1656|      0|        _Py_SetImmortal(unicode);
 1657|      0|        return;
 1658|      0|    }
 1659|  23.3M|    switch (_PyUnicode_STATE(unicode).interned) {
  ------------------
  |  |  157|  23.3M|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  23.3M|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  23.3M|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1659:13): [True: 23.3M, False: 0]
  ------------------
 1660|  23.3M|        case SSTATE_NOT_INTERNED:
  ------------------
  |  |  201|  23.3M|#define SSTATE_NOT_INTERNED 0
  ------------------
  |  Branch (1660:9): [True: 23.3M, False: 15.4k]
  ------------------
 1661|  23.3M|            break;
 1662|  15.4k|        case SSTATE_INTERNED_MORTAL:
  ------------------
  |  |  202|  15.4k|#define SSTATE_INTERNED_MORTAL 1
  ------------------
  |  Branch (1662:9): [True: 15.4k, False: 23.3M]
  ------------------
 1663|       |            /* Remove the object from the intern dict.
 1664|       |             * Before doing so, we set the refcount to 2: the key and value
 1665|       |             * in the interned_dict.
 1666|       |             */
 1667|  15.4k|            assert(Py_REFCNT(unicode) == 0);
  ------------------
  |  Branch (1667:13): [True: 15.4k, False: 0]
  ------------------
 1668|  15.4k|            Py_SET_REFCNT(unicode, 2);
  ------------------
  |  |  201|  15.4k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  15.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1669|       |#ifdef Py_REF_DEBUG
 1670|       |            /* let's be pedantic with the ref total */
 1671|       |            _Py_IncRefTotal(_PyThreadState_GET());
 1672|       |            _Py_IncRefTotal(_PyThreadState_GET());
 1673|       |#endif
 1674|  15.4k|            PyInterpreterState *interp = _PyInterpreterState_GET();
 1675|  15.4k|            PyObject *interned = get_interned_dict(interp);
 1676|  15.4k|            assert(interned != NULL);
  ------------------
  |  Branch (1676:13): [True: 15.4k, False: 0]
  ------------------
 1677|  15.4k|            PyObject *popped;
 1678|  15.4k|            int r = PyDict_Pop(interned, unicode, &popped);
 1679|  15.4k|            if (r == -1) {
  ------------------
  |  Branch (1679:17): [True: 0, False: 15.4k]
  ------------------
 1680|      0|                PyErr_FormatUnraisable("Exception ignored while "
 1681|      0|                                       "removing an interned string %R",
 1682|      0|                                       unicode);
 1683|       |                // We don't know what happened to the string. It's probably
 1684|       |                // best to leak it:
 1685|       |                // - if it was popped, there are no more references to it
 1686|       |                //   so it can't cause trouble (except wasted memory)
 1687|       |                // - if it wasn't popped, it'll remain interned
 1688|      0|                _Py_SetImmortal(unicode);
 1689|      0|                _PyUnicode_STATE(unicode).interned = SSTATE_INTERNED_IMMORTAL;
  ------------------
  |  |  157|      0|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      0|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      0|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              _PyUnicode_STATE(unicode).interned = SSTATE_INTERNED_IMMORTAL;
  ------------------
  |  |  203|      0|#define SSTATE_INTERNED_IMMORTAL 2
  ------------------
  |  Branch (1689:17): [True: 0, False: 0]
  ------------------
 1690|      0|                return;
 1691|      0|            }
 1692|  15.4k|            if (r == 0) {
  ------------------
  |  Branch (1692:17): [True: 0, False: 15.4k]
  ------------------
 1693|       |                // The interned string was not found in the interned_dict.
 1694|       |#ifdef Py_DEBUG
 1695|       |                Py_UNREACHABLE();
 1696|       |#endif
 1697|      0|                _Py_SetImmortal(unicode);
 1698|      0|                return;
 1699|      0|            }
 1700|       |            // Successfully popped.
 1701|  15.4k|            assert(popped == unicode);
  ------------------
  |  Branch (1701:13): [True: 15.4k, False: 0]
  ------------------
 1702|       |            // Only our `popped` reference should be left; remove it too.
 1703|  15.4k|            assert(Py_REFCNT(unicode) == 1);
  ------------------
  |  Branch (1703:13): [True: 15.4k, False: 0]
  ------------------
 1704|  15.4k|            Py_SET_REFCNT(unicode, 0);
  ------------------
  |  |  201|  15.4k|#  define Py_SET_REFCNT(ob, refcnt) Py_SET_REFCNT(_PyObject_CAST(ob), (refcnt))
  |  |  ------------------
  |  |  |  |  171|  15.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1705|       |#ifdef Py_REF_DEBUG
 1706|       |            /* let's be pedantic with the ref total */
 1707|       |            _Py_DecRefTotal(_PyThreadState_GET());
 1708|       |#endif
 1709|  15.4k|            break;
 1710|      0|        default:
  ------------------
  |  Branch (1710:9): [True: 0, False: 23.3M]
  ------------------
 1711|       |            // As with `statically_allocated` above.
 1712|       |#ifdef Py_REF_DEBUG
 1713|       |            Py_UNREACHABLE();
 1714|       |#endif
 1715|      0|            _Py_SetImmortal(unicode);
 1716|      0|            return;
 1717|  23.3M|    }
 1718|  23.3M|    if (_PyUnicode_HAS_UTF8_MEMORY(unicode)) {
  ------------------
  |  Branch (1718:9): [True: 14.0k, False: 23.3M]
  ------------------
 1719|  14.0k|        PyMem_Free(_PyUnicode_UTF8(unicode));
 1720|  14.0k|    }
 1721|  23.3M|    if (!PyUnicode_IS_COMPACT(unicode) && _PyUnicode_DATA_ANY(unicode)) {
  ------------------
  |  |  234|  46.7M|#define PyUnicode_IS_COMPACT(op) PyUnicode_IS_COMPACT(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  23.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (!PyUnicode_IS_COMPACT(unicode) && _PyUnicode_DATA_ANY(unicode)) {
  ------------------
  |  |  169|      0|    (_PyUnicodeObject_CAST(op)->data.any)
  |  |  ------------------
  |  |  |  |  192|      0|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  193|      0|     _Py_CAST(PyUnicodeObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (169:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1721:9): [True: 0, False: 23.3M]
  |  Branch (1721:43): [True: 0, False: 0]
  ------------------
 1722|      0|        PyMem_Free(_PyUnicode_DATA_ANY(unicode));
  ------------------
  |  |  169|      0|    (_PyUnicodeObject_CAST(op)->data.any)
  |  |  ------------------
  |  |  |  |  192|      0|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  193|      0|     _Py_CAST(PyUnicodeObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1722:20): [True: 0, False: 0]
  ------------------
 1723|      0|    }
 1724|       |
 1725|  23.3M|    Py_TYPE(unicode)->tp_free(unicode);
  ------------------
  |  |  213|  23.3M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  23.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  23.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1726|  23.3M|}
unicodeobject.c:unicode_repr:
13059|  8.20k|{
13060|  8.20k|    Py_ssize_t isize = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|  8.20k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13061|  8.20k|    const void *idata = PyUnicode_DATA(unicode);
  ------------------
  |  |  284|  8.20k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13062|       |
13063|       |    /* Compute length of output, quote characters, and
13064|       |       maximum character */
13065|  8.20k|    Py_ssize_t osize = 0;
13066|  8.20k|    Py_UCS4 maxch = 127;
13067|  8.20k|    Py_ssize_t squote = 0;
13068|  8.20k|    Py_ssize_t dquote = 0;
13069|  8.20k|    int ikind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|  8.20k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  16.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 8.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13070|   978k|    for (Py_ssize_t i = 0; i < isize; i++) {
  ------------------
  |  Branch (13070:28): [True: 970k, False: 8.20k]
  ------------------
13071|   970k|        Py_UCS4 ch = PyUnicode_READ(ikind, idata, i);
  ------------------
  |  |  354|   970k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   970k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   970k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   970k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   970k|                   (index))
  ------------------
13072|   970k|        Py_ssize_t incr = 1;
13073|   970k|        switch (ch) {
13074|  16.1k|        case '\'': squote++; break;
  ------------------
  |  Branch (13074:9): [True: 16.1k, False: 953k]
  ------------------
13075|  19.9k|        case '"':  dquote++; break;
  ------------------
  |  Branch (13075:9): [True: 19.9k, False: 950k]
  ------------------
13076|  29.3k|        case '\\': case '\t': case '\r': case '\n':
  ------------------
  |  Branch (13076:9): [True: 9.75k, False: 960k]
  |  Branch (13076:20): [True: 2.32k, False: 967k]
  |  Branch (13076:31): [True: 448, False: 969k]
  |  Branch (13076:42): [True: 16.8k, False: 953k]
  ------------------
13077|  29.3k|            incr = 2;
13078|  29.3k|            break;
13079|   904k|        default:
  ------------------
  |  Branch (13079:9): [True: 904k, False: 65.4k]
  ------------------
13080|       |            /* Fast-path ASCII */
13081|   904k|            if (ch < ' ' || ch == 0x7f)
  ------------------
  |  Branch (13081:17): [True: 22.3k, False: 882k]
  |  Branch (13081:29): [True: 4.57k, False: 877k]
  ------------------
13082|  26.8k|                incr = 4; /* \xHH */
13083|   877k|            else if (ch < 0x7f)
  ------------------
  |  Branch (13083:22): [True: 729k, False: 148k]
  ------------------
13084|   729k|                ;
13085|   148k|            else if (Py_UNICODE_ISPRINTABLE(ch))
  ------------------
  |  |  761|   148k|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  ------------------
  |  |  |  Branch (761:36): [True: 120k, False: 27.9k]
  |  |  ------------------
  ------------------
13086|   120k|                maxch = (ch > maxch) ? ch : maxch;
  ------------------
  |  Branch (13086:25): [True: 4.08k, False: 116k]
  ------------------
13087|  27.9k|            else if (ch < 0x100)
  ------------------
  |  Branch (13087:22): [True: 26.5k, False: 1.32k]
  ------------------
13088|  26.5k|                incr = 4; /* \xHH */
13089|  1.32k|            else if (ch < 0x10000)
  ------------------
  |  Branch (13089:22): [True: 932, False: 394]
  ------------------
13090|    932|                incr = 6; /* \uHHHH */
13091|    394|            else
13092|    394|                incr = 10; /* \uHHHHHHHH */
13093|   970k|        }
13094|   970k|        if (osize > PY_SSIZE_T_MAX - incr) {
  ------------------
  |  |  137|   970k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (13094:13): [True: 0, False: 970k]
  ------------------
13095|      0|            PyErr_SetString(PyExc_OverflowError,
13096|      0|                            "string is too long to generate repr");
13097|      0|            return NULL;
13098|      0|        }
13099|   970k|        osize += incr;
13100|   970k|    }
13101|       |
13102|  8.20k|    Py_UCS4 quote = '\'';
13103|  8.20k|    int changed = (osize != isize);
13104|  8.20k|    if (squote) {
  ------------------
  |  Branch (13104:9): [True: 1.24k, False: 6.96k]
  ------------------
13105|  1.24k|        changed = 1;
13106|  1.24k|        if (dquote)
  ------------------
  |  Branch (13106:13): [True: 804, False: 436]
  ------------------
13107|       |            /* Both squote and dquote present. Use squote,
13108|       |               and escape them */
13109|    804|            osize += squote;
13110|    436|        else
13111|    436|            quote = '"';
13112|  1.24k|    }
13113|  8.20k|    osize += 2;   /* quotes */
13114|       |
13115|  8.20k|    PyObject *repr = PyUnicode_New(osize, maxch);
13116|  8.20k|    if (repr == NULL)
  ------------------
  |  Branch (13116:9): [True: 0, False: 8.20k]
  ------------------
13117|      0|        return NULL;
13118|  8.20k|    int okind = PyUnicode_KIND(repr);
  ------------------
  |  |  258|  8.20k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  16.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 8.20k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13119|  8.20k|    void *odata = PyUnicode_DATA(repr);
  ------------------
  |  |  284|  8.20k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13120|       |
13121|  8.20k|    if (!changed) {
  ------------------
  |  Branch (13121:9): [True: 4.94k, False: 3.26k]
  ------------------
13122|  4.94k|        PyUnicode_WRITE(okind, odata, 0, quote);
  ------------------
  |  |  335|  4.94k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|  4.94k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|  4.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|  4.94k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|  4.94k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
13123|       |
13124|  4.94k|        _PyUnicode_FastCopyCharacters(repr, 1,
13125|  4.94k|                                      unicode, 0,
13126|  4.94k|                                      isize);
13127|       |
13128|  4.94k|        PyUnicode_WRITE(okind, odata, osize-1, quote);
  ------------------
  |  |  335|  4.94k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|  4.94k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|  4.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|  4.94k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|  4.94k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
13129|  4.94k|    }
13130|  3.26k|    else {
13131|  3.26k|        switch (okind) {
13132|  2.10k|        case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (13132:9): [True: 2.10k, False: 1.15k]
  ------------------
13133|  2.10k|            ucs1lib_repr(unicode, quote, odata);
13134|  2.10k|            break;
13135|    507|        case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (13135:9): [True: 507, False: 2.75k]
  ------------------
13136|    507|            ucs2lib_repr(unicode, quote, odata);
13137|    507|            break;
13138|    652|        default:
  ------------------
  |  Branch (13138:9): [True: 652, False: 2.61k]
  ------------------
13139|    652|            assert(okind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (13139:13): [True: 652, False: 0]
  ------------------
13140|    652|            ucs4lib_repr(unicode, quote, odata);
13141|  3.26k|        }
13142|  3.26k|    }
13143|       |
13144|  8.20k|    assert(_PyUnicode_CheckConsistency(repr, 1));
  ------------------
  |  Branch (13144:5): [True: 8.20k, False: 0]
  ------------------
13145|  8.20k|    return repr;
13146|  8.20k|}
unicodeobject.c:unicode_mod:
14130|     98|{
14131|     98|    if (!PyUnicode_Check(v))
  ------------------
  |  |  103|     98|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     98|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (14131:9): [True: 77, False: 21]
  ------------------
14132|     77|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|     77|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|     77|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
14133|     21|    return PyUnicode_Format(v, w);
14134|     98|}
unicodeobject.c:unicode_length:
12627|   997k|{
12628|   997k|    return PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|   997k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   997k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   997k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12629|   997k|}
unicodeobject.c:unicode_getitem:
12059|  9.14M|{
12060|  9.14M|    const void *data;
12061|  9.14M|    int kind;
12062|  9.14M|    Py_UCS4 ch;
12063|       |
12064|  9.14M|    if (!PyUnicode_Check(self)) {
  ------------------
  |  |  103|  9.14M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  9.14M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (12064:9): [True: 0, False: 9.14M]
  ------------------
12065|      0|        PyErr_BadArgument();
12066|      0|        return NULL;
12067|      0|    }
12068|  9.14M|    if (index < 0 || index >= PyUnicode_GET_LENGTH(self)) {
  ------------------
  |  |  299|  9.14M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.14M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.14M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (12068:9): [True: 100, False: 9.14M]
  |  Branch (12068:22): [True: 241, False: 9.14M]
  ------------------
12069|    341|        PyErr_SetString(PyExc_IndexError, "string index out of range");
12070|    341|        return NULL;
12071|    341|    }
12072|  9.14M|    kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|  9.14M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  18.2M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 9.14M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12073|  9.14M|    data = PyUnicode_DATA(self);
  ------------------
  |  |  284|  9.14M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.14M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.14M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12074|  9.14M|    ch = PyUnicode_READ(kind, data, index);
  ------------------
  |  |  354|  9.14M|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  9.14M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  9.14M|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  9.14M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  9.14M|                   (index))
  ------------------
12075|  9.14M|    return unicode_char(ch);
12076|  9.14M|}
unicodeobject.c:unicode_subscript:
14156|  9.15M|{
14157|  9.15M|    if (_PyIndex_Check(item)) {
  ------------------
  |  Branch (14157:9): [True: 9.14M, False: 1.21k]
  ------------------
14158|  9.14M|        Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
14159|  9.14M|        if (i == -1 && PyErr_Occurred())
  ------------------
  |  Branch (14159:13): [True: 445, False: 9.14M]
  |  Branch (14159:24): [True: 306, False: 139]
  ------------------
14160|    306|            return NULL;
14161|  9.14M|        if (i < 0)
  ------------------
  |  Branch (14161:13): [True: 313, False: 9.14M]
  ------------------
14162|    313|            i += PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|    313|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    313|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    313|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14163|  9.14M|        return unicode_getitem(self, i);
14164|  9.14M|    } else if (PySlice_Check(item)) {
  ------------------
  |  |   22|  1.21k|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|  1.21k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.07k, False: 149]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14165|  1.07k|        Py_ssize_t start, stop, step, slicelength, i;
14166|  1.07k|        size_t cur;
14167|  1.07k|        PyObject *result;
14168|  1.07k|        const void *src_data;
14169|  1.07k|        void *dest_data;
14170|  1.07k|        int src_kind, dest_kind;
14171|  1.07k|        Py_UCS4 ch, max_char, kind_limit;
14172|       |
14173|  1.07k|        if (PySlice_Unpack(item, &start, &stop, &step) < 0) {
  ------------------
  |  Branch (14173:13): [True: 143, False: 927]
  ------------------
14174|    143|            return NULL;
14175|    143|        }
14176|    927|        slicelength = PySlice_AdjustIndices(PyUnicode_GET_LENGTH(self),
  ------------------
  |  |  299|    927|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    927|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    927|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14177|    927|                                            &start, &stop, step);
14178|       |
14179|    927|        if (slicelength <= 0) {
  ------------------
  |  Branch (14179:13): [True: 603, False: 324]
  ------------------
14180|    603|            _Py_RETURN_UNICODE_EMPTY();
  ------------------
  |  |  379|    603|    do {                             \
  |  |  380|    603|        return _PyUnicode_GetEmpty();\
  |  |  381|    603|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
14181|    603|        } else if (start == 0 && step == 1 &&
  ------------------
  |  Branch (14181:20): [True: 299, False: 25]
  |  Branch (14181:34): [True: 160, False: 139]
  ------------------
14182|    160|                   slicelength == PyUnicode_GET_LENGTH(self)) {
  ------------------
  |  |  299|    160|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    160|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    160|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14182:20): [True: 71, False: 89]
  ------------------
14183|     71|            return unicode_result_unchanged(self);
14184|    253|        } else if (step == 1) {
  ------------------
  |  Branch (14184:20): [True: 109, False: 144]
  ------------------
14185|    109|            return PyUnicode_Substring(self,
14186|    109|                                       start, start + slicelength);
14187|    109|        }
14188|       |        /* General case */
14189|    144|        src_kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|    144|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    288|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 144, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14190|    144|        src_data = PyUnicode_DATA(self);
  ------------------
  |  |  284|    144|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    144|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14191|    144|        if (!PyUnicode_IS_ASCII(self)) {
  ------------------
  |  |  227|    144|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    144|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14191:13): [True: 75, False: 69]
  ------------------
14192|     75|            kind_limit = kind_maxchar_limit(src_kind);
14193|     75|            max_char = 0;
14194|  7.51k|            for (cur = start, i = 0; i < slicelength; cur += step, i++) {
  ------------------
  |  Branch (14194:38): [True: 7.48k, False: 31]
  ------------------
14195|  7.48k|                ch = PyUnicode_READ(src_kind, src_data, cur);
  ------------------
  |  |  354|  7.48k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  7.48k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  7.48k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  7.48k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  7.48k|                   (index))
  ------------------
14196|  7.48k|                if (ch > max_char) {
  ------------------
  |  Branch (14196:21): [True: 175, False: 7.30k]
  ------------------
14197|    175|                    max_char = ch;
14198|    175|                    if (max_char >= kind_limit)
  ------------------
  |  Branch (14198:25): [True: 44, False: 131]
  ------------------
14199|     44|                        break;
14200|    175|                }
14201|  7.48k|            }
14202|     75|        }
14203|     69|        else
14204|     69|            max_char = 127;
14205|    144|        result = PyUnicode_New(slicelength, max_char);
14206|    144|        if (result == NULL)
  ------------------
  |  Branch (14206:13): [True: 0, False: 144]
  ------------------
14207|      0|            return NULL;
14208|    144|        dest_kind = PyUnicode_KIND(result);
  ------------------
  |  |  258|    144|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|    288|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 144, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14209|    144|        dest_data = PyUnicode_DATA(result);
  ------------------
  |  |  284|    144|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    144|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14210|       |
14211|  9.51k|        for (cur = start, i = 0; i < slicelength; cur += step, i++) {
  ------------------
  |  Branch (14211:34): [True: 9.37k, False: 144]
  ------------------
14212|  9.37k|            Py_UCS4 ch = PyUnicode_READ(src_kind, src_data, cur);
  ------------------
  |  |  354|  9.37k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  9.37k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  9.37k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  9.37k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  9.37k|                   (index))
  ------------------
14213|  9.37k|            PyUnicode_WRITE(dest_kind, dest_data, i, ch);
  ------------------
  |  |  335|  9.37k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|  9.37k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|  9.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|  9.37k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|  9.37k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
14214|  9.37k|        }
14215|    144|        assert(_PyUnicode_CheckConsistency(result, 1));
  ------------------
  |  Branch (14215:9): [True: 144, False: 0]
  ------------------
14216|    144|        return result;
14217|    149|    } else {
14218|    149|        PyErr_Format(PyExc_TypeError, "string indices must be integers, not '%.200s'",
14219|    149|                     Py_TYPE(item)->tp_name);
  ------------------
  |  |  213|    149|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    149|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    149|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14220|       |        return NULL;
14221|    149|    }
14222|  9.15M|}
unicodeobject.c:kind_maxchar_limit:
 2161|     75|{
 2162|     75|    switch (kind) {
 2163|     11|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (2163:5): [True: 11, False: 64]
  ------------------
 2164|     11|        return 0x80;
 2165|     23|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (2165:5): [True: 23, False: 52]
  ------------------
 2166|     23|        return 0x100;
 2167|     41|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (2167:5): [True: 41, False: 34]
  ------------------
 2168|     41|        return 0x10000;
 2169|      0|    default:
  ------------------
  |  Branch (2169:5): [True: 0, False: 75]
  ------------------
 2170|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2171|     75|    }
 2172|     75|}
unicodeobject.c:unicode_hash:
12082|  2.56M|{
12083|  2.56M|    Py_uhash_t x;  /* Unsigned for defined overflow behavior. */
12084|       |
12085|       |#ifdef Py_DEBUG
12086|       |    assert(_Py_HashSecret_Initialized);
12087|       |#endif
12088|  2.56M|    Py_hash_t hash = PyUnicode_HASH(self);
  ------------------
  |  |  161|  2.56M|#define PyUnicode_HASH PyUnstable_Unicode_GET_CACHED_HASH
  ------------------
12089|  2.56M|    if (hash != -1) {
  ------------------
  |  Branch (12089:9): [True: 2.00M, False: 567k]
  ------------------
12090|  2.00M|        return hash;
12091|  2.00M|    }
12092|   567k|    x = Py_HashBuffer(PyUnicode_DATA(self),
  ------------------
  |  |  284|   567k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   567k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   567k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12093|   567k|                      PyUnicode_GET_LENGTH(self) * PyUnicode_KIND(self));
  ------------------
  |  |  299|   567k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   567k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   567k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                    PyUnicode_GET_LENGTH(self) * PyUnicode_KIND(self));
  ------------------
  |  |  258|   567k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.13M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 567k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12094|       |
12095|      0|    PyUnicode_SET_HASH(self, x);
12096|   567k|    return x;
12097|   567k|}
unicodeobject.c:PyUnicode_SET_HASH:
  164|   567k|{
  165|   567k|    FT_ATOMIC_STORE_SSIZE_RELAXED(_PyASCIIObject_CAST(op)->hash, hash);
  ------------------
  |  |  194|  1.13M|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  |  |  |  Branch (194:57): [True: 567k, False: 0]
  |  |  ------------------
  ------------------
  166|   567k|}
unicodeobject.c:unicode_encode_impl:
11945|  53.3k|{
11946|  53.3k|    return PyUnicode_AsEncodedString(self, encoding, errors);
11947|  53.3k|}
unicodeobject.c:unicode_replace_impl:
12997|    515|{
12998|    515|    return replace(self, old, new, count);
12999|    515|}
unicodeobject.c:unicode_split_impl:
13254|    251|{
13255|    251|    if (sep == Py_None)
  ------------------
  |  |  616|    251|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (13255:9): [True: 2, False: 249]
  ------------------
13256|      2|        return split(self, NULL, maxsplit);
13257|    249|    if (PyUnicode_Check(sep))
  ------------------
  |  |  103|    249|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    249|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 249, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13258|    249|        return split(self, sep, maxsplit);
13259|       |
13260|      0|    PyErr_Format(PyExc_TypeError,
13261|      0|                 "must be str or None, not %.100s",
13262|      0|                 Py_TYPE(sep)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13263|       |    return NULL;
13264|    249|}
unicodeobject.c:unicode_join:
12621|   275k|{
12622|   275k|    return PyUnicode_Join(self, iterable);
12623|   275k|}
unicodeobject.c:case_operation:
10327|   433k|{
10328|   433k|    PyObject *res = NULL;
10329|   433k|    Py_ssize_t length, newlength = 0;
10330|   433k|    int kind, outkind;
10331|   433k|    const void *data;
10332|   433k|    void *outdata;
10333|   433k|    Py_UCS4 maxchar = 0, *tmp, *tmpend;
10334|       |
10335|   433k|    kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|   433k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   867k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 433k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10336|   433k|    data = PyUnicode_DATA(self);
  ------------------
  |  |  284|   433k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   433k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   433k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10337|   433k|    length = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|   433k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   433k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   433k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10338|   433k|    if ((size_t) length > PY_SSIZE_T_MAX / (3 * sizeof(Py_UCS4))) {
  ------------------
  |  |  137|   433k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (10338:9): [True: 0, False: 433k]
  ------------------
10339|      0|        PyErr_SetString(PyExc_OverflowError, "string is too long");
10340|      0|        return NULL;
10341|      0|    }
10342|   433k|    tmp = PyMem_Malloc(sizeof(Py_UCS4) * 3 * length);
10343|   433k|    if (tmp == NULL)
  ------------------
  |  Branch (10343:9): [True: 0, False: 433k]
  ------------------
10344|      0|        return PyErr_NoMemory();
10345|   433k|    newlength = perform(kind, data, length, tmp, &maxchar);
10346|   433k|    res = PyUnicode_New(newlength, maxchar);
10347|   433k|    if (res == NULL)
  ------------------
  |  Branch (10347:9): [True: 0, False: 433k]
  ------------------
10348|      0|        goto leave;
10349|   433k|    tmpend = tmp + newlength;
10350|   433k|    outdata = PyUnicode_DATA(res);
  ------------------
  |  |  284|   433k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   433k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   433k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10351|   433k|    outkind = PyUnicode_KIND(res);
  ------------------
  |  |  258|   433k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   867k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 433k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10352|      0|    switch (outkind) {
10353|  39.2k|    case PyUnicode_1BYTE_KIND:
  ------------------
  |  Branch (10353:5): [True: 39.2k, False: 394k]
  ------------------
10354|  39.2k|        _PyUnicode_CONVERT_BYTES(Py_UCS4, Py_UCS1, tmp, tmpend, outdata);
  ------------------
  |  |   48|  39.2k|    do {                                                \
  |  |   49|  39.2k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|  39.2k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|  39.2k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|  39.2k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|  39.2k|        const from_type *_unrolled_end =                \
  |  |   54|  39.2k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|  39.2k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|  41.7k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 2.55k, False: 39.2k]
  |  |  ------------------
  |  |   56|  2.55k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  2.55k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  2.55k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  2.55k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  2.55k|            _iter += 4; _to += 4;                       \
  |  |   61|  2.55k|        }                                               \
  |  |   62|  81.9k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 42.7k, False: 39.2k]
  |  |  ------------------
  |  |   63|  42.7k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|  39.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 39.2k]
  |  |  ------------------
  ------------------
10355|  39.2k|        break;
10356|   346k|    case PyUnicode_2BYTE_KIND:
  ------------------
  |  Branch (10356:5): [True: 346k, False: 87.0k]
  ------------------
10357|   346k|        _PyUnicode_CONVERT_BYTES(Py_UCS4, Py_UCS2, tmp, tmpend, outdata);
  ------------------
  |  |   48|   346k|    do {                                                \
  |  |   49|   346k|        to_type *_to = (to_type *)(to);                 \
  |  |   50|   346k|        const from_type *_iter = (const from_type *)(begin);\
  |  |   51|   346k|        const from_type *_end = (const from_type *)(end);\
  |  |   52|   346k|        Py_ssize_t n = (_end) - (_iter);                \
  |  |   53|   346k|        const from_type *_unrolled_end =                \
  |  |   54|   346k|            _iter + _Py_SIZE_ROUND_DOWN(n, 4);          \
  |  |  ------------------
  |  |  |  |  236|   346k|#define _Py_SIZE_ROUND_DOWN(n, a) ((size_t)(n) & ~(size_t)((a) - 1))
  |  |  ------------------
  |  |   55|   399k|        while (_iter < (_unrolled_end)) {               \
  |  |  ------------------
  |  |  |  Branch (55:16): [True: 52.3k, False: 346k]
  |  |  ------------------
  |  |   56|  52.3k|            _to[0] = (to_type) _iter[0];                \
  |  |   57|  52.3k|            _to[1] = (to_type) _iter[1];                \
  |  |   58|  52.3k|            _to[2] = (to_type) _iter[2];                \
  |  |   59|  52.3k|            _to[3] = (to_type) _iter[3];                \
  |  |   60|  52.3k|            _iter += 4; _to += 4;                       \
  |  |   61|  52.3k|        }                                               \
  |  |   62|   697k|        while (_iter < (_end))                          \
  |  |  ------------------
  |  |  |  Branch (62:16): [True: 350k, False: 346k]
  |  |  ------------------
  |  |   63|   350k|            *_to++ = (to_type) *_iter++;                \
  |  |   64|   346k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (64:14): [Folded, False: 346k]
  |  |  ------------------
  ------------------
10358|   346k|        break;
10359|  47.8k|    case PyUnicode_4BYTE_KIND:
  ------------------
  |  Branch (10359:5): [True: 47.8k, False: 386k]
  ------------------
10360|  47.8k|        memcpy(outdata, tmp, sizeof(Py_UCS4) * newlength);
10361|  47.8k|        break;
10362|      0|    default:
  ------------------
  |  Branch (10362:5): [True: 0, False: 433k]
  ------------------
10363|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
10364|   433k|    }
10365|   433k|  leave:
10366|   433k|    PyMem_Free(tmp);
10367|   433k|    return res;
10368|   433k|}
unicodeobject.c:lower_ucs4:
10189|   694k|{
10190|       |    /* Obscure special case. */
10191|   694k|    if (c == 0x3A3) {
  ------------------
  |  Branch (10191:9): [True: 38, False: 694k]
  ------------------
10192|     38|        mapped[0] = handle_capital_sigma(kind, data, length, i);
10193|     38|        return 1;
10194|     38|    }
10195|   694k|    return _PyUnicode_ToLowerFull(c, mapped);
10196|   694k|}
unicodeobject.c:handle_capital_sigma:
10159|     38|{
10160|     38|    Py_ssize_t j;
10161|     38|    int final_sigma;
10162|     38|    Py_UCS4 c = 0;   /* initialize to prevent gcc warning */
10163|       |    /* U+03A3 is in the Final_Sigma context when, it is found like this:
10164|       |
10165|       |     \p{cased}\p{case-ignorable}*U+03A3!(\p{case-ignorable}*\p{cased})
10166|       |
10167|       |    where ! is a negation and \p{xxx} is a character with property xxx.
10168|       |    */
10169|     38|    for (j = i - 1; j >= 0; j--) {
  ------------------
  |  Branch (10169:21): [True: 0, False: 38]
  ------------------
10170|      0|        c = PyUnicode_READ(kind, data, j);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
10171|      0|        if (!_PyUnicode_IsCaseIgnorable(c))
  ------------------
  |  Branch (10171:13): [True: 0, False: 0]
  ------------------
10172|      0|            break;
10173|      0|    }
10174|     38|    final_sigma = j >= 0 && _PyUnicode_IsCased(c);
  ------------------
  |  Branch (10174:19): [True: 0, False: 38]
  |  Branch (10174:29): [True: 0, False: 0]
  ------------------
10175|     38|    if (final_sigma) {
  ------------------
  |  Branch (10175:9): [True: 0, False: 38]
  ------------------
10176|      0|        for (j = i + 1; j < length; j++) {
  ------------------
  |  Branch (10176:25): [True: 0, False: 0]
  ------------------
10177|      0|            c = PyUnicode_READ(kind, data, j);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
10178|      0|            if (!_PyUnicode_IsCaseIgnorable(c))
  ------------------
  |  Branch (10178:17): [True: 0, False: 0]
  ------------------
10179|      0|                break;
10180|      0|        }
10181|      0|        final_sigma = j == length || !_PyUnicode_IsCased(c);
  ------------------
  |  Branch (10181:23): [True: 0, False: 0]
  |  Branch (10181:38): [True: 0, False: 0]
  ------------------
10182|      0|    }
10183|     38|    return (final_sigma) ? 0x3C2 : 0x3C3;
  ------------------
  |  Branch (10183:12): [True: 0, False: 38]
  ------------------
10184|     38|}
unicodeobject.c:ascii_upper_or_lower:
10140|   142k|{
10141|   142k|    Py_ssize_t len = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|   142k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   142k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   142k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10142|   142k|    const char *data = PyUnicode_DATA(self);
  ------------------
  |  |  284|   142k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   142k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   142k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10143|   142k|    char *resdata;
10144|   142k|    PyObject *res;
10145|       |
10146|   142k|    res = PyUnicode_New(len, 127);
10147|   142k|    if (res == NULL)
  ------------------
  |  Branch (10147:9): [True: 0, False: 142k]
  ------------------
10148|      0|        return NULL;
10149|   142k|    resdata = PyUnicode_DATA(res);
  ------------------
  |  |  284|   142k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   142k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   142k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10150|   142k|    if (lower)
  ------------------
  |  Branch (10150:9): [True: 142k, False: 51]
  ------------------
10151|   142k|        _Py_bytes_lower(resdata, data, len);
10152|     51|    else
10153|     51|        _Py_bytes_upper(resdata, data, len);
10154|   142k|    return res;
10155|   142k|}
unicodeobject.c:unicode_expandtabs_impl:
11962|  1.94k|{
11963|  1.94k|    Py_ssize_t i, j, line_pos, src_len, incr;
11964|  1.94k|    Py_UCS4 ch;
11965|  1.94k|    PyObject *u;
11966|  1.94k|    const void *src_data;
11967|  1.94k|    void *dest_data;
11968|  1.94k|    int kind;
11969|  1.94k|    int found;
11970|       |
11971|       |    /* First pass: determine size of output string */
11972|  1.94k|    src_len = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|  1.94k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11973|  1.94k|    i = j = line_pos = 0;
11974|  1.94k|    kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|  1.94k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  3.89k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.94k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11975|  1.94k|    src_data = PyUnicode_DATA(self);
  ------------------
  |  |  284|  1.94k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.94k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
11976|  1.94k|    found = 0;
11977|   196k|    for (; i < src_len; i++) {
  ------------------
  |  Branch (11977:12): [True: 194k, False: 1.94k]
  ------------------
11978|   194k|        ch = PyUnicode_READ(kind, src_data, i);
  ------------------
  |  |  354|   194k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   194k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   194k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   194k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   194k|                   (index))
  ------------------
11979|   194k|        if (ch == '\t') {
  ------------------
  |  Branch (11979:13): [True: 5.43k, False: 189k]
  ------------------
11980|  5.43k|            found = 1;
11981|  5.43k|            if (tabsize > 0) {
  ------------------
  |  Branch (11981:17): [True: 5.43k, False: 0]
  ------------------
11982|  5.43k|                incr = tabsize - (line_pos % tabsize); /* cannot overflow */
11983|  5.43k|                if (j > PY_SSIZE_T_MAX - incr)
  ------------------
  |  |  137|  5.43k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (11983:21): [True: 0, False: 5.43k]
  ------------------
11984|      0|                    goto overflow;
11985|  5.43k|                line_pos += incr;
11986|  5.43k|                j += incr;
11987|  5.43k|            }
11988|  5.43k|        }
11989|   189k|        else {
11990|   189k|            if (j > PY_SSIZE_T_MAX - 1)
  ------------------
  |  |  137|   189k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (11990:17): [True: 0, False: 189k]
  ------------------
11991|      0|                goto overflow;
11992|   189k|            line_pos++;
11993|   189k|            j++;
11994|   189k|            if (ch == '\n' || ch == '\r')
  ------------------
  |  Branch (11994:17): [True: 28.6k, False: 160k]
  |  Branch (11994:31): [True: 409, False: 160k]
  ------------------
11995|  29.0k|                line_pos = 0;
11996|   189k|        }
11997|   194k|    }
11998|  1.94k|    if (!found)
  ------------------
  |  Branch (11998:9): [True: 1.36k, False: 586]
  ------------------
11999|  1.36k|        return unicode_result_unchanged(self);
12000|       |
12001|       |    /* Second pass: create output string and fill it */
12002|    586|    u = PyUnicode_New(j, PyUnicode_MAX_CHAR_VALUE(self));
  ------------------
  |  |  405|    586|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    586|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    586|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12003|    586|    if (!u)
  ------------------
  |  Branch (12003:9): [True: 0, False: 586]
  ------------------
12004|      0|        return NULL;
12005|    586|    dest_data = PyUnicode_DATA(u);
  ------------------
  |  |  284|    586|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    586|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    586|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12006|       |
12007|    586|    i = j = line_pos = 0;
12008|       |
12009|   172k|    for (; i < src_len; i++) {
  ------------------
  |  Branch (12009:12): [True: 171k, False: 586]
  ------------------
12010|   171k|        ch = PyUnicode_READ(kind, src_data, i);
  ------------------
  |  |  354|   171k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   171k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   171k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   171k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   171k|                   (index))
  ------------------
12011|   171k|        if (ch == '\t') {
  ------------------
  |  Branch (12011:13): [True: 5.43k, False: 166k]
  ------------------
12012|  5.43k|            if (tabsize > 0) {
  ------------------
  |  Branch (12012:17): [True: 5.43k, False: 0]
  ------------------
12013|  5.43k|                incr = tabsize - (line_pos % tabsize);
12014|  5.43k|                line_pos += incr;
12015|  5.43k|                _PyUnicode_Fill(kind, dest_data, ' ', j, incr);
12016|  5.43k|                j += incr;
12017|  5.43k|            }
12018|  5.43k|        }
12019|   166k|        else {
12020|   166k|            line_pos++;
12021|   166k|            PyUnicode_WRITE(kind, dest_data, j, ch);
  ------------------
  |  |  335|   166k|    PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   34|   166k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |                   PyUnicode_WRITE(_Py_STATIC_CAST(int, kind), _Py_CAST(void*, data), \
  |  |  ------------------
  |  |  |  |   37|   166k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  336|   166k|                    (index), _Py_STATIC_CAST(Py_UCS4, value))
  |  |  ------------------
  |  |  |  |   34|   166k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
12022|   166k|            j++;
12023|   166k|            if (ch == '\n' || ch == '\r')
  ------------------
  |  Branch (12023:17): [True: 23.3k, False: 142k]
  |  Branch (12023:31): [True: 401, False: 142k]
  ------------------
12024|  23.7k|                line_pos = 0;
12025|   166k|        }
12026|   171k|    }
12027|    586|    assert (j == PyUnicode_GET_LENGTH(u));
  ------------------
  |  Branch (12027:5): [True: 586, False: 0]
  ------------------
12028|    586|    return unicode_result(u);
  ------------------
  |  |  752|    586|#define unicode_result _PyUnicode_Result
  ------------------
12029|       |
12030|      0|  overflow:
12031|      0|    PyErr_SetString(PyExc_OverflowError, "new string is too long");
12032|       |    return NULL;
12033|    586|}
unicodeobject.c:unicode_find_impl:
12049|      2|{
12050|      2|    Py_ssize_t result = any_find_slice(str, substr, start, end, 1);
12051|      2|    if (result < 0) {
  ------------------
  |  Branch (12051:9): [True: 0, False: 2]
  ------------------
12052|      0|        return -1;
12053|      0|    }
12054|      2|    return result;
12055|      2|}
unicodeobject.c:unicode_lower_impl:
12663|   576k|{
12664|   576k|    if (PyUnicode_IS_ASCII(self))
  ------------------
  |  |  227|   576k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   576k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   576k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 142k, False: 433k]
  |  |  ------------------
  ------------------
12665|   142k|        return ascii_upper_or_lower(self, 1);
12666|   433k|    return case_operation(self, do_lower);
12667|   576k|}
unicodeobject.c:do_lower:
10276|   433k|{
10277|   433k|    return do_upper_or_lower(kind, data, length, res, maxchar, 1);
10278|   433k|}
unicodeobject.c:do_upper_or_lower:
10250|   433k|{
10251|   433k|    Py_ssize_t i, k = 0;
10252|       |
10253|  1.12M|    for (i = 0; i < length; i++) {
  ------------------
  |  Branch (10253:17): [True: 694k, False: 433k]
  ------------------
10254|   694k|        Py_UCS4 c = PyUnicode_READ(kind, data, i), mapped[3];
  ------------------
  |  |  354|   694k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   694k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   694k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   694k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   694k|                   (index))
  ------------------
10255|   694k|        int n_res, j;
10256|   694k|        if (lower)
  ------------------
  |  Branch (10256:13): [True: 694k, False: 0]
  ------------------
10257|   694k|            n_res = lower_ucs4(kind, data, length, i, c, mapped);
10258|      0|        else
10259|      0|            n_res = _PyUnicode_ToUpperFull(c, mapped);
10260|  1.38M|        for (j = 0; j < n_res; j++) {
  ------------------
  |  Branch (10260:21): [True: 694k, False: 694k]
  ------------------
10261|   694k|            *maxchar = Py_MAX(*maxchar, mapped[j]);
  ------------------
  |  |  126|   694k|       __extension__ \
  |  |  127|   694k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   694k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   694k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   694k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   694k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 232k, False: 462k]
  |  |  ------------------
  ------------------
10262|   694k|            res[k++] = mapped[j];
10263|   694k|        }
10264|   694k|    }
10265|   433k|    return k;
10266|   433k|}
unicodeobject.c:unicode_lstrip_impl:
12887|      1|{
12888|      1|    return do_argstrip(self, LEFTSTRIP, chars);
  ------------------
  |  |12669|      1|#define LEFTSTRIP 0
  ------------------
12889|      1|}
unicodeobject.c:do_argstrip:
12837|  5.06k|{
12838|  5.06k|    if (sep != Py_None) {
  ------------------
  |  |  616|  5.06k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (12838:9): [True: 4.91k, False: 155]
  ------------------
12839|  4.91k|        if (PyUnicode_Check(sep))
  ------------------
  |  |  103|  4.91k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  4.91k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 4.91k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12840|  4.91k|            return _PyUnicode_XStrip(self, striptype, sep);
12841|      0|        else {
12842|      0|            PyErr_Format(PyExc_TypeError,
12843|      0|                         "%s arg must be None or str",
12844|      0|                         STRIPNAME(striptype));
  ------------------
  |  |12676|      0|#define STRIPNAME(i) (stripfuncnames[i])
  ------------------
12845|      0|            return NULL;
12846|      0|        }
12847|  4.91k|    }
12848|       |
12849|    155|    return do_strip(self, striptype);
12850|  5.06k|}
unicodeobject.c:do_strip:
12774|    155|{
12775|    155|    Py_ssize_t len, i, j;
12776|       |
12777|    155|    len = PyUnicode_GET_LENGTH(self);
  ------------------
  |  |  299|    155|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    155|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12778|       |
12779|    155|    if (PyUnicode_IS_ASCII(self)) {
  ------------------
  |  |  227|    155|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    155|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    155|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 155, False: 0]
  |  |  ------------------
  ------------------
12780|    155|        const Py_UCS1 *data = PyUnicode_1BYTE_DATA(self);
  ------------------
  |  |  291|    155|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  ------------------
  |  |  |  |   34|    155|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
12781|       |
12782|    155|        i = 0;
12783|    155|        if (striptype != RIGHTSTRIP) {
  ------------------
  |  |12670|    155|#define RIGHTSTRIP 1
  ------------------
  |  Branch (12783:13): [True: 3, False: 152]
  ------------------
12784|      3|            while (i < len) {
  ------------------
  |  Branch (12784:20): [True: 3, False: 0]
  ------------------
12785|      3|                Py_UCS1 ch = data[i];
12786|      3|                if (!_Py_ascii_whitespace[ch])
  ------------------
  |  Branch (12786:21): [True: 3, False: 0]
  ------------------
12787|      3|                    break;
12788|      0|                i++;
12789|      0|            }
12790|      3|        }
12791|       |
12792|    155|        j = len;
12793|    155|        if (striptype != LEFTSTRIP) {
  ------------------
  |  |12669|    155|#define LEFTSTRIP 0
  ------------------
  |  Branch (12793:13): [True: 155, False: 0]
  ------------------
12794|    155|            j--;
12795|    155|            while (j >= i) {
  ------------------
  |  Branch (12795:20): [True: 155, False: 0]
  ------------------
12796|    155|                Py_UCS1 ch = data[j];
12797|    155|                if (!_Py_ascii_whitespace[ch])
  ------------------
  |  Branch (12797:21): [True: 155, False: 0]
  ------------------
12798|    155|                    break;
12799|      0|                j--;
12800|      0|            }
12801|    155|            j++;
12802|    155|        }
12803|    155|    }
12804|      0|    else {
12805|      0|        int kind = PyUnicode_KIND(self);
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12806|      0|        const void *data = PyUnicode_DATA(self);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12807|       |
12808|      0|        i = 0;
12809|      0|        if (striptype != RIGHTSTRIP) {
  ------------------
  |  |12670|      0|#define RIGHTSTRIP 1
  ------------------
  |  Branch (12809:13): [True: 0, False: 0]
  ------------------
12810|      0|            while (i < len) {
  ------------------
  |  Branch (12810:20): [True: 0, False: 0]
  ------------------
12811|      0|                Py_UCS4 ch = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
12812|      0|                if (!Py_UNICODE_ISSPACE(ch))
  ------------------
  |  Branch (12812:21): [True: 0, False: 0]
  ------------------
12813|      0|                    break;
12814|      0|                i++;
12815|      0|            }
12816|      0|        }
12817|       |
12818|      0|        j = len;
12819|      0|        if (striptype != LEFTSTRIP) {
  ------------------
  |  |12669|      0|#define LEFTSTRIP 0
  ------------------
  |  Branch (12819:13): [True: 0, False: 0]
  ------------------
12820|      0|            j--;
12821|      0|            while (j >= i) {
  ------------------
  |  Branch (12821:20): [True: 0, False: 0]
  ------------------
12822|      0|                Py_UCS4 ch = PyUnicode_READ(kind, data, j);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
12823|      0|                if (!Py_UNICODE_ISSPACE(ch))
  ------------------
  |  Branch (12823:21): [True: 0, False: 0]
  ------------------
12824|      0|                    break;
12825|      0|                j--;
12826|      0|            }
12827|      0|            j++;
12828|      0|        }
12829|      0|    }
12830|       |
12831|    155|    return PyUnicode_Substring(self, i, j);
12832|    155|}
unicodeobject.c:unicode_rfind_impl:
13162|     99|{
13163|     99|    Py_ssize_t result = any_find_slice(str, substr, start, end, -1);
13164|     99|    if (result < 0) {
  ------------------
  |  Branch (13164:9): [True: 0, False: 99]
  ------------------
13165|      0|        return -1;
13166|      0|    }
13167|     99|    return result;
13168|     99|}
unicodeobject.c:unicode_rstrip_impl:
12906|  5.06k|{
12907|  5.06k|    return do_argstrip(self, RIGHTSTRIP, chars);
  ------------------
  |  |12670|  5.06k|#define RIGHTSTRIP 1
  ------------------
12908|  5.06k|}
unicodeobject.c:unicode_rpartition:
13409|  1.15k|{
13410|  1.15k|    return PyUnicode_RPartition(self, sep);
13411|  1.15k|}
unicodeobject.c:unicode_strip_impl:
12868|      3|{
12869|      3|    return do_argstrip(self, BOTHSTRIP, chars);
  ------------------
  |  |12671|      3|#define BOTHSTRIP 2
  ------------------
12870|      3|}
unicodeobject.c:unicode_translate:
13650|     48|{
13651|     48|    return _PyUnicode_TranslateCharmap(self, table, "ignore");
13652|     48|}
unicodeobject.c:unicode_upper_impl:
13663|     51|{
13664|     51|    if (PyUnicode_IS_ASCII(self))
  ------------------
  |  |  227|     51|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (227:32): [True: 51, False: 0]
  |  |  ------------------
  ------------------
13665|     51|        return ascii_upper_or_lower(self, 0);
13666|      0|    return case_operation(self, do_upper);
13667|     51|}
unicodeobject.c:unicode_startswith_impl:
13735|   115k|{
13736|   115k|    if (PyTuple_Check(subobj)) {
  ------------------
  |  |   27|   115k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   115k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 11, False: 115k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13737|     11|        Py_ssize_t i;
13738|     77|        for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
  ------------------
  |  |   27|     77|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     77|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     77|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (13738:21): [True: 66, False: 11]
  ------------------
13739|     66|            PyObject *substring = PyTuple_GET_ITEM(subobj, i);
  ------------------
  |  |   29|     66|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     66|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (13739:35): [True: 66, False: 0]
  ------------------
13740|     66|            if (!PyUnicode_Check(substring)) {
  ------------------
  |  |  103|     66|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     66|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (13740:17): [True: 0, False: 66]
  ------------------
13741|      0|                PyErr_Format(PyExc_TypeError,
13742|      0|                             "tuple for startswith must only contain str, "
13743|      0|                             "not %.100s",
13744|      0|                             Py_TYPE(substring)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13745|      0|                return NULL;
13746|      0|            }
13747|     66|            int result = tailmatch(self, substring, start, end, -1);
13748|     66|            if (result < 0) {
  ------------------
  |  Branch (13748:17): [True: 0, False: 66]
  ------------------
13749|      0|                return NULL;
13750|      0|            }
13751|     66|            if (result) {
  ------------------
  |  Branch (13751:17): [True: 0, False: 66]
  ------------------
13752|      0|                Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13753|      0|            }
13754|     66|        }
13755|       |        /* nothing matched */
13756|     11|        Py_RETURN_FALSE;
  ------------------
  |  |   45|     11|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|     11|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13757|     11|    }
13758|   115k|    if (!PyUnicode_Check(subobj)) {
  ------------------
  |  |  103|   115k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   115k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (13758:9): [True: 0, False: 115k]
  ------------------
13759|      0|        PyErr_Format(PyExc_TypeError,
13760|      0|                     "startswith first arg must be str or "
13761|      0|                     "a tuple of str, not %.100s", Py_TYPE(subobj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13762|      0|        return NULL;
13763|      0|    }
13764|   115k|    int result = tailmatch(self, subobj, start, end, -1);
13765|   115k|    if (result < 0) {
  ------------------
  |  Branch (13765:9): [True: 0, False: 115k]
  ------------------
13766|      0|        return NULL;
13767|      0|    }
13768|   115k|    return PyBool_FromLong(result);
13769|   115k|}
unicodeobject.c:unicode_endswith_impl:
13792|  48.5k|{
13793|  48.5k|    if (PyTuple_Check(subobj)) {
  ------------------
  |  |   27|  48.5k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 48.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13794|      0|        Py_ssize_t i;
13795|      0|        for (i = 0; i < PyTuple_GET_SIZE(subobj); i++) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (13795:21): [True: 0, False: 0]
  ------------------
13796|      0|            PyObject *substring = PyTuple_GET_ITEM(subobj, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (13796:35): [True: 0, False: 0]
  ------------------
13797|      0|            if (!PyUnicode_Check(substring)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (13797:17): [True: 0, False: 0]
  ------------------
13798|      0|                PyErr_Format(PyExc_TypeError,
13799|      0|                             "tuple for endswith must only contain str, "
13800|      0|                             "not %.100s",
13801|      0|                             Py_TYPE(substring)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13802|      0|                return NULL;
13803|      0|            }
13804|      0|            int result = tailmatch(self, substring, start, end, +1);
13805|      0|            if (result < 0) {
  ------------------
  |  Branch (13805:17): [True: 0, False: 0]
  ------------------
13806|      0|                return NULL;
13807|      0|            }
13808|      0|            if (result) {
  ------------------
  |  Branch (13808:17): [True: 0, False: 0]
  ------------------
13809|      0|                Py_RETURN_TRUE;
  ------------------
  |  |   44|      0|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13810|      0|            }
13811|      0|        }
13812|      0|        Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13813|      0|    }
13814|  48.5k|    if (!PyUnicode_Check(subobj)) {
  ------------------
  |  |  103|  48.5k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (13814:9): [True: 0, False: 48.5k]
  ------------------
13815|      0|        PyErr_Format(PyExc_TypeError,
13816|      0|                     "endswith first arg must be str or "
13817|      0|                     "a tuple of str, not %.100s", Py_TYPE(subobj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13818|      0|        return NULL;
13819|      0|    }
13820|  48.5k|    int result = tailmatch(self, subobj, start, end, +1);
13821|  48.5k|    if (result < 0) {
  ------------------
  |  Branch (13821:9): [True: 0, False: 48.5k]
  ------------------
13822|      0|        return NULL;
13823|      0|    }
13824|  48.5k|    return PyBool_FromLong(result);
13825|  48.5k|}
unicodeobject.c:unicode_isascii_impl:
12137|    366|{
12138|    366|    return PyBool_FromLong(PyUnicode_IS_ASCII(self));
  ------------------
  |  |  227|    366|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    366|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    366|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
12139|    366|}
unicodeobject.c:unicode_isidentifier_impl:
12566|     32|{
12567|     32|    return PyBool_FromLong(PyUnicode_IsIdentifier(self));
12568|     32|}
unicodeobject.c:unicode_new_impl:
14248|      7|{
14249|      7|    PyObject *unicode;
14250|      7|    if (x == NULL) {
  ------------------
  |  Branch (14250:9): [True: 0, False: 7]
  ------------------
14251|      0|        unicode = _PyUnicode_GetEmpty();
14252|      0|    }
14253|      7|    else if (encoding == NULL && errors == NULL) {
  ------------------
  |  Branch (14253:14): [True: 7, False: 0]
  |  Branch (14253:34): [True: 7, False: 0]
  ------------------
14254|      7|        unicode = PyObject_Str(x);
14255|      7|    }
14256|      0|    else {
14257|      0|        unicode = PyUnicode_FromEncodedObject(x, encoding, errors);
14258|      0|    }
14259|       |
14260|      7|    if (unicode != NULL && type != &PyUnicode_Type) {
  ------------------
  |  Branch (14260:9): [True: 7, False: 0]
  |  Branch (14260:28): [True: 7, False: 0]
  ------------------
14261|      7|        Py_SETREF(unicode, unicode_subtype_new(type, unicode));
  ------------------
  |  |  354|      7|    do { \
  |  |  355|      7|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      7|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      7|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      7|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      7|        *_tmp_dst_ptr = (src); \
  |  |  358|      7|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      7|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 7]
  |  |  ------------------
  ------------------
14262|      7|    }
14263|      7|    return unicode;
14264|      7|}
unicodeobject.c:unicode_subtype_new:
14327|      7|{
14328|      7|    PyObject *self;
14329|      7|    Py_ssize_t length, char_size;
14330|      7|    int share_utf8;
14331|      7|    int kind;
14332|      7|    void *data;
14333|       |
14334|      7|    assert(PyType_IsSubtype(type, &PyUnicode_Type));
  ------------------
  |  Branch (14334:5): [True: 7, False: 0]
  ------------------
14335|      7|    assert(_PyUnicode_CHECK(unicode));
  ------------------
  |  Branch (14335:5): [True: 7, False: 0]
  ------------------
14336|       |
14337|      7|    self = type->tp_alloc(type, 0);
14338|      7|    if (self == NULL) {
  ------------------
  |  Branch (14338:9): [True: 0, False: 7]
  ------------------
14339|      0|        return NULL;
14340|      0|    }
14341|      7|    kind = PyUnicode_KIND(unicode);
  ------------------
  |  |  258|      7|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|     14|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14342|      7|    length = PyUnicode_GET_LENGTH(unicode);
  ------------------
  |  |  299|      7|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14343|       |
14344|      7|    _PyUnicode_LENGTH(self) = length;
  ------------------
  |  |  155|      7|    (_PyASCIIObject_CAST(op)->length)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14344:5): [True: 7, False: 0]
  ------------------
14345|       |#ifdef Py_DEBUG
14346|       |    _PyUnicode_HASH(self) = -1;
14347|       |#else
14348|      7|    _PyUnicode_HASH(self) = _PyUnicode_HASH(unicode);
  ------------------
  |  |  159|      7|    (_PyASCIIObject_CAST(op)->hash)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  _PyUnicode_HASH(self) = _PyUnicode_HASH(unicode);
  ------------------
  |  |  159|      7|    (_PyASCIIObject_CAST(op)->hash)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14348:5): [True: 7, False: 0]
  |  Branch (14348:29): [True: 7, False: 0]
  ------------------
14349|      0|#endif
14350|      7|    _PyUnicode_STATE(self).interned = 0;
  ------------------
  |  |  157|      7|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14350:5): [True: 7, False: 0]
  ------------------
14351|      7|    _PyUnicode_STATE(self).kind = kind;
  ------------------
  |  |  157|      7|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14351:5): [True: 7, False: 0]
  ------------------
14352|      7|    _PyUnicode_STATE(self).compact = 0;
  ------------------
  |  |  157|      7|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14352:5): [True: 7, False: 0]
  ------------------
14353|      7|    _PyUnicode_STATE(self).ascii = _PyUnicode_STATE(unicode).ascii;
  ------------------
  |  |  157|      7|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  _PyUnicode_STATE(self).ascii = _PyUnicode_STATE(unicode).ascii;
  ------------------
  |  |  157|      7|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14353:5): [True: 7, False: 0]
  |  Branch (14353:36): [True: 7, False: 0]
  ------------------
14354|      7|    _PyUnicode_STATE(self).statically_allocated = 0;
  ------------------
  |  |  157|      7|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|      7|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14354:5): [True: 7, False: 0]
  ------------------
14355|      0|    PyUnicode_SET_UTF8_LENGTH(self, 0);
14356|      7|    PyUnicode_SET_UTF8(self, NULL);
14357|      7|    _PyUnicode_DATA_ANY(self) = NULL;
  ------------------
  |  |  169|      7|    (_PyUnicodeObject_CAST(op)->data.any)
  |  |  ------------------
  |  |  |  |  192|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  193|      7|     _Py_CAST(PyUnicodeObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14357:5): [True: 7, False: 0]
  ------------------
14358|       |
14359|      0|    share_utf8 = 0;
14360|      7|    if (kind == PyUnicode_1BYTE_KIND) {
  ------------------
  |  Branch (14360:9): [True: 7, False: 0]
  ------------------
14361|      7|        char_size = 1;
14362|      7|        if (PyUnicode_MAX_CHAR_VALUE(unicode) < 128)
  ------------------
  |  |  405|      7|    PyUnicode_MAX_CHAR_VALUE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14362:13): [True: 7, False: 0]
  ------------------
14363|      7|            share_utf8 = 1;
14364|      7|    }
14365|      0|    else if (kind == PyUnicode_2BYTE_KIND) {
  ------------------
  |  Branch (14365:14): [True: 0, False: 0]
  ------------------
14366|      0|        char_size = 2;
14367|      0|    }
14368|      0|    else {
14369|      0|        assert(kind == PyUnicode_4BYTE_KIND);
  ------------------
  |  Branch (14369:9): [True: 0, False: 0]
  ------------------
14370|      0|        char_size = 4;
14371|      0|    }
14372|       |
14373|       |    /* Ensure we won't overflow the length. */
14374|      7|    if (length > (PY_SSIZE_T_MAX / char_size - 1)) {
  ------------------
  |  |  137|      7|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (14374:9): [True: 0, False: 7]
  ------------------
14375|      0|        PyErr_NoMemory();
14376|      0|        goto onError;
14377|      0|    }
14378|      7|    data = PyMem_Malloc((length + 1) * char_size);
14379|      7|    if (data == NULL) {
  ------------------
  |  Branch (14379:9): [True: 0, False: 7]
  ------------------
14380|      0|        PyErr_NoMemory();
14381|      0|        goto onError;
14382|      0|    }
14383|       |
14384|     14|    _PyUnicode_DATA_ANY(self) = data;
  ------------------
  |  |  169|      7|    (_PyUnicodeObject_CAST(op)->data.any)
  |  |  ------------------
  |  |  |  |  192|      7|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  193|      7|     _Py_CAST(PyUnicodeObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14384:5): [True: 7, False: 0]
  ------------------
14385|      7|    if (share_utf8) {
  ------------------
  |  Branch (14385:9): [True: 7, False: 0]
  ------------------
14386|      7|        PyUnicode_SET_UTF8_LENGTH(self, length);
14387|      7|        PyUnicode_SET_UTF8(self, data);
14388|      7|    }
14389|       |
14390|     14|    memcpy(data, PyUnicode_DATA(unicode), kind * (length + 1));
  ------------------
  |  |  284|      7|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14391|     14|    assert(_PyUnicode_CheckConsistency(self, 1));
  ------------------
  |  Branch (14391:5): [True: 7, False: 0]
  ------------------
14392|       |#ifdef Py_DEBUG
14393|       |    _PyUnicode_HASH(self) = _PyUnicode_HASH(unicode);
14394|       |#endif
14395|      7|    return self;
14396|       |
14397|      0|onError:
14398|      0|    Py_DECREF(self);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14399|       |    return NULL;
14400|     14|}
unicodeobject.c:unicode_vectorcall:
14281|   150k|{
14282|   150k|    assert(Py_Is(_PyType_CAST(type), &PyUnicode_Type));
  ------------------
  |  Branch (14282:5): [True: 150k, False: 0]
  |  Branch (14282:5): [True: 150k, False: 0]
  ------------------
14283|       |
14284|   150k|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|   150k|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
14285|   150k|    if (kwnames != NULL && PyTuple_GET_SIZE(kwnames) != 0) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14285:9): [True: 0, False: 150k]
  |  Branch (14285:28): [True: 0, False: 0]
  ------------------
14286|       |        // Fallback to unicode_new()
14287|      0|        PyObject *tuple = PyTuple_FromArray(args, nargs);
14288|      0|        if (tuple == NULL) {
  ------------------
  |  Branch (14288:13): [True: 0, False: 0]
  ------------------
14289|      0|            return NULL;
14290|      0|        }
14291|      0|        PyObject *dict = _PyStack_AsDict(args + nargs, kwnames);
14292|      0|        if (dict == NULL) {
  ------------------
  |  Branch (14292:13): [True: 0, False: 0]
  ------------------
14293|      0|            Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14294|      0|            return NULL;
14295|      0|        }
14296|      0|        PyObject *ret = unicode_new(_PyType_CAST(type), tuple, dict);
  ------------------
  |  |  770|      0|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (14296:37): [True: 0, False: 0]
  ------------------
14297|      0|        Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14298|      0|        Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14299|      0|        return ret;
14300|      0|    }
14301|   150k|    if (!_PyArg_CheckPositional("str", nargs, 0, 3)) {
  ------------------
  |  |   31|   150k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 150k, False: 0]
  |  |  |  Branch (31:27): [True: 150k, False: 0]
  |  |  ------------------
  |  |   32|   150k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
14302|      0|        return NULL;
14303|      0|    }
14304|   150k|    if (nargs == 0) {
  ------------------
  |  Branch (14304:9): [True: 0, False: 150k]
  ------------------
14305|      0|        return _PyUnicode_GetEmpty();
14306|      0|    }
14307|   150k|    PyObject *object = args[0];
14308|   150k|    if (nargs == 1) {
  ------------------
  |  Branch (14308:9): [True: 23, False: 150k]
  ------------------
14309|     23|        return PyObject_Str(object);
14310|     23|    }
14311|   150k|    const char *encoding = arg_as_utf8(args[1], "encoding");
14312|   150k|    if (encoding == NULL) {
  ------------------
  |  Branch (14312:9): [True: 0, False: 150k]
  ------------------
14313|      0|        return NULL;
14314|      0|    }
14315|   150k|    const char *errors = NULL;
14316|   150k|    if (nargs == 3) {
  ------------------
  |  Branch (14316:9): [True: 4.14k, False: 145k]
  ------------------
14317|  4.14k|        errors = arg_as_utf8(args[2], "errors");
14318|  4.14k|        if (errors == NULL) {
  ------------------
  |  Branch (14318:13): [True: 0, False: 4.14k]
  ------------------
14319|      0|            return NULL;
14320|      0|        }
14321|  4.14k|    }
14322|   150k|    return PyUnicode_FromEncodedObject(object, encoding, errors);
14323|   150k|}
unicodeobject.c:arg_as_utf8:
14268|   154k|{
14269|   154k|    if (!PyUnicode_Check(obj)) {
  ------------------
  |  |  103|   154k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   154k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (14269:9): [True: 0, False: 154k]
  ------------------
14270|      0|        PyErr_Format(PyExc_TypeError,
14271|      0|                     "str() argument '%s' must be str, not %T",
14272|      0|                     name, obj);
14273|      0|        return NULL;
14274|      0|    }
14275|   154k|    return _PyUnicode_AsUTF8NoNUL(obj);
14276|   154k|}
unicodeobject.c:unicode_iteritem:
14404|  13.7M|{
14405|  13.7M|    if (index >= PyUnicode_GET_LENGTH(obj)) {
  ------------------
  |  |  299|  13.7M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  13.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14405:9): [True: 447k, False: 13.2M]
  ------------------
14406|   447k|        return (_PyObjectIndexPair) { .object = NULL, .index = index };
14407|   447k|    }
14408|  13.2M|    const void *data = PyUnicode_DATA(obj);
  ------------------
  |  |  284|  13.2M|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  13.2M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.2M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14409|  13.2M|    int kind = PyUnicode_KIND(obj);
  ------------------
  |  |  258|  13.2M|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  26.5M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 13.2M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14410|  13.2M|    Py_UCS4 ch = PyUnicode_READ(kind, data, index);
  ------------------
  |  |  354|  13.2M|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  13.2M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  13.2M|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  13.2M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  13.2M|                   (index))
  ------------------
14411|  13.2M|    PyObject *result = unicode_char(ch);
14412|  13.2M|    index = (result == NULL) ? -1 : index + 1;
  ------------------
  |  Branch (14412:13): [True: 0, False: 13.2M]
  ------------------
14413|  13.2M|    return (_PyObjectIndexPair) { .object = result, .index = index };
14414|  13.2M|}
unicodeobject.c:_init_global_state:
14489|      2|{
14490|      2|    static int initialized = 0;
14491|      2|    if (initialized) {
  ------------------
  |  Branch (14491:9): [True: 0, False: 2]
  ------------------
14492|      0|        return;
14493|      0|    }
14494|      2|    initialized = 1;
14495|       |
14496|       |    /* initialize the linebreak bloom filter */
14497|      2|    const Py_UCS2 linebreak[] = {
14498|      2|        0x000A, /* LINE FEED */
14499|      2|        0x000D, /* CARRIAGE RETURN */
14500|      2|        0x001C, /* FILE SEPARATOR */
14501|      2|        0x001D, /* GROUP SEPARATOR */
14502|      2|        0x001E, /* RECORD SEPARATOR */
14503|      2|        0x0085, /* NEXT LINE */
14504|      2|        0x2028, /* LINE SEPARATOR */
14505|      2|        0x2029, /* PARAGRAPH SEPARATOR */
14506|      2|    };
14507|      2|    bloom_linebreak = make_bloom_mask(
14508|      2|        PyUnicode_2BYTE_KIND, linebreak,
14509|      2|        Py_ARRAY_LENGTH(linebreak));
  ------------------
  |  |  221|      2|    (sizeof(array) / sizeof((array)[0]))
  ------------------
14510|      2|}
unicodeobject.c:init_global_interned_strings:
  328|      2|{
  329|      2|    assert(INTERNED_STRINGS == NULL);
  ------------------
  |  Branch (329:5): [True: 2, False: 0]
  ------------------
  330|      2|    _Py_hashtable_allocator_t hashtable_alloc = {PyMem_RawMalloc, PyMem_RawFree};
  331|       |
  332|      2|    INTERNED_STRINGS = _Py_hashtable_new_full(
  ------------------
  |  |  223|      2|#define INTERNED_STRINGS _PyRuntime.cached_objects.interned_strings
  ------------------
  333|      2|        hashtable_unicode_hash,
  334|      2|        hashtable_unicode_compare,
  335|       |        // Objects stored here are immortal and statically allocated,
  336|       |        // so we don't need key_destroy_func & value_destroy_func:
  337|      2|        NULL,
  338|      2|        NULL,
  339|      2|        &hashtable_alloc
  340|      2|    );
  341|      2|    if (INTERNED_STRINGS == NULL) {
  ------------------
  |  |  223|      2|#define INTERNED_STRINGS _PyRuntime.cached_objects.interned_strings
  ------------------
  |  Branch (341:9): [True: 0, False: 2]
  ------------------
  342|      0|        PyErr_Clear();
  343|      0|        return _PyStatus_ERR("failed to create global interned dict");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  344|      0|    }
  345|       |
  346|       |    /* Intern statically allocated string identifiers, deepfreeze strings,
  347|       |        * and one-byte latin-1 strings.
  348|       |        * This must be done before any module initialization so that statically
  349|       |        * allocated string identifiers are used instead of heap allocated strings.
  350|       |        * Deepfreeze uses the interned identifiers if present to save space
  351|       |        * else generates them and they are interned to speed up dict lookups.
  352|       |    */
  353|      2|    _PyUnicode_InitStaticStrings(interp);
  354|       |
  355|    514|    for (int i = 0; i < 256; i++) {
  ------------------
  |  Branch (355:21): [True: 512, False: 2]
  ------------------
  356|    512|        PyObject *s = LATIN1(i);
  ------------------
  |  |  188|    512|#define LATIN1 _Py_LATIN1_CHR
  |  |  ------------------
  |  |  |  |  940|    512|    ((CH) < 128 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (940:6): [True: 256, False: 256]
  |  |  |  |  ------------------
  |  |  |  |  941|    512|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    256|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    256|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  942|    512|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    256|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    256|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|    512|        _PyUnicode_InternStatic(interp, &s);
  358|    512|        assert(s == LATIN1(i));
  ------------------
  |  Branch (358:9): [True: 256, False: 256]
  |  Branch (358:9): [True: 512, False: 0]
  ------------------
  359|    512|    }
  360|       |#ifdef Py_DEBUG
  361|       |    assert(_PyUnicode_CheckConsistency(&_Py_STR(empty), 1));
  362|       |
  363|       |    for (int i = 0; i < 256; i++) {
  364|       |        assert(_PyUnicode_CheckConsistency(LATIN1(i), 1));
  365|       |    }
  366|       |#endif
  367|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  368|      2|}
unicodeobject.c:hashtable_unicode_hash:
  259|   231k|{
  260|   231k|    return unicode_hash((PyObject *)key);
  261|   231k|}
unicodeobject.c:hashtable_unicode_compare:
  265|  10.0k|{
  266|  10.0k|    PyObject *obj1 = (PyObject *)key1;
  267|  10.0k|    PyObject *obj2 = (PyObject *)key2;
  268|  10.0k|    if (obj1 != NULL && obj2 != NULL) {
  ------------------
  |  Branch (268:9): [True: 10.0k, False: 0]
  |  Branch (268:25): [True: 10.0k, False: 0]
  ------------------
  269|  10.0k|        return unicode_eq(obj1, obj2);
  270|  10.0k|    }
  271|      0|    else {
  272|      0|        return obj1 == obj2;
  273|      0|    }
  274|  10.0k|}
unicodeobject.c:init_interned_dict:
  295|      2|{
  296|      2|    assert(get_interned_dict(interp) == NULL);
  ------------------
  |  Branch (296:5): [True: 2, False: 0]
  ------------------
  297|      2|    PyObject *interned;
  298|      2|    if (has_shared_intern_dict(interp)) {
  ------------------
  |  Branch (298:9): [True: 0, False: 2]
  ------------------
  299|      0|        interned = get_interned_dict(_PyInterpreterState_Main());
  300|      0|        Py_INCREF(interned);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      0|    }
  302|      2|    else {
  303|      2|        interned = PyDict_New();
  304|      2|        if (interned == NULL) {
  ------------------
  |  Branch (304:13): [True: 0, False: 2]
  ------------------
  305|      0|            return -1;
  306|      0|        }
  307|      2|    }
  308|      2|    _Py_INTERP_CACHED_OBJECT(interp, interned_strings) = interned;
  ------------------
  |  |   22|      2|    (interp)->cached_objects.NAME
  ------------------
  309|      2|    return 0;
  310|      2|}
unicodeobject.c:intern_static:
14562|  2.27k|{
14563|       |    // Note that this steals a reference to `s`, but in many cases that
14564|       |    // stolen ref is returned, requiring no decref/incref.
14565|       |
14566|  2.27k|    assert(s != NULL);
  ------------------
  |  Branch (14566:5): [True: 2.27k, False: 0]
  ------------------
14567|  2.27k|    assert(_PyUnicode_CHECK(s));
  ------------------
  |  Branch (14567:5): [True: 2.27k, False: 0]
  ------------------
14568|  2.27k|    assert(_PyUnicode_STATE(s).statically_allocated);
  ------------------
  |  Branch (14568:5): [True: 2.27k, False: 0]
  |  Branch (14568:5): [True: 2.27k, False: 0]
  ------------------
14569|  2.27k|    assert(!PyUnicode_CHECK_INTERNED(s));
  ------------------
  |  Branch (14569:5): [True: 2.27k, False: 0]
  ------------------
14570|       |
14571|       |#ifdef Py_DEBUG
14572|       |    /* We must not add process-global interned string if there's already a
14573|       |     * per-interpreter interned_dict, which might contain duplicates.
14574|       |     */
14575|       |    PyObject *interned = get_interned_dict(interp);
14576|       |    assert(interned == NULL);
14577|       |#endif
14578|       |
14579|       |    /* Look in the global cache first. */
14580|  2.27k|    PyObject *r = (PyObject *)_Py_hashtable_get(INTERNED_STRINGS, s);
  ------------------
  |  |  223|  2.27k|#define INTERNED_STRINGS _PyRuntime.cached_objects.interned_strings
  ------------------
14581|       |    /* We should only init each string once */
14582|  2.27k|    assert(r == NULL);
  ------------------
  |  Branch (14582:5): [True: 2.27k, False: 0]
  ------------------
14583|       |    /* but just in case (for the non-debug build), handle this */
14584|  2.27k|    if (r != NULL && r != s) {
  ------------------
  |  Branch (14584:9): [True: 0, False: 2.27k]
  |  Branch (14584:22): [True: 0, False: 0]
  ------------------
14585|      0|        assert(_PyUnicode_STATE(r).interned == SSTATE_INTERNED_IMMORTAL_STATIC);
  ------------------
  |  Branch (14585:9): [True: 0, False: 0]
  |  Branch (14585:9): [True: 0, False: 0]
  ------------------
14586|      0|        assert(_PyUnicode_CHECK(r));
  ------------------
  |  Branch (14586:9): [True: 0, False: 0]
  ------------------
14587|      0|        Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14588|      0|        return Py_NewRef(r);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14589|      0|    }
14590|       |
14591|  2.27k|    if (_Py_hashtable_set(INTERNED_STRINGS, s, s) < -1) {
  ------------------
  |  |  223|  2.27k|#define INTERNED_STRINGS _PyRuntime.cached_objects.interned_strings
  ------------------
  |  Branch (14591:9): [True: 0, False: 2.27k]
  ------------------
14592|      0|        Py_FatalError("failed to intern static string");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
14593|      0|    }
14594|       |
14595|  2.27k|    _PyUnicode_STATE(s).interned = SSTATE_INTERNED_IMMORTAL_STATIC;
  ------------------
  |  |  157|  2.27k|    (_PyASCIIObject_CAST(op)->state)
  |  |  ------------------
  |  |  |  |  186|  2.27k|    (assert(PyUnicode_Check(op)), \
  |  |  |  |  187|  2.27k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.27k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  _PyUnicode_STATE(s).interned = SSTATE_INTERNED_IMMORTAL_STATIC;
  ------------------
  |  |  204|  2.27k|#define SSTATE_INTERNED_IMMORTAL_STATIC 3
  ------------------
  |  Branch (14595:5): [True: 2.27k, False: 0]
  ------------------
14596|      0|    return s;
14597|  2.27k|}
unicodeobject.c:intern_common:
14644|  3.32M|{
14645|       |    // Note that this steals a reference to `s`, but in many cases that
14646|       |    // stolen ref is returned, requiring no decref/incref.
14647|       |
14648|       |#ifdef Py_DEBUG
14649|       |    assert(s != NULL);
14650|       |    assert(_PyUnicode_CHECK(s));
14651|       |#else
14652|  3.32M|    if (s == NULL || !PyUnicode_Check(s)) {
  ------------------
  |  |  103|  3.32M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  3.32M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (14652:9): [True: 0, False: 3.32M]
  |  Branch (14652:22): [True: 0, False: 3.32M]
  ------------------
14653|      0|        return s;
14654|      0|    }
14655|  3.32M|#endif
14656|       |
14657|       |    /* If it's a subclass, we don't really know what putting
14658|       |       it in the interned dict might do. */
14659|  3.32M|    if (!PyUnicode_CheckExact(s)) {
  ------------------
  |  |  104|  3.32M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  3.32M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.32M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.32M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14659:9): [True: 0, False: 3.32M]
  ------------------
14660|      0|        return s;
14661|      0|    }
14662|       |
14663|       |    /* Is it already interned? */
14664|  3.32M|    switch (PyUnicode_CHECK_INTERNED(s)) {
  ------------------
  |  |  214|  3.32M|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.32M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.32M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14665|   220k|        case SSTATE_NOT_INTERNED:
  ------------------
  |  |  201|   220k|#define SSTATE_NOT_INTERNED 0
  ------------------
  |  Branch (14665:9): [True: 220k, False: 3.10M]
  ------------------
14666|       |            // no, go on
14667|   220k|            break;
14668|   108k|        case SSTATE_INTERNED_MORTAL:
  ------------------
  |  |  202|   108k|#define SSTATE_INTERNED_MORTAL 1
  ------------------
  |  Branch (14668:9): [True: 108k, False: 3.21M]
  ------------------
14669|   108k|#ifndef Py_GIL_DISABLED
14670|       |            // yes but we might need to make it immortal
14671|   108k|            if (immortalize) {
  ------------------
  |  Branch (14671:17): [True: 80, False: 108k]
  ------------------
14672|     80|                immortalize_interned(s);
14673|     80|            }
14674|   108k|            return s;
14675|       |#else
14676|       |            // not fully interned yet; fall through to the locking path
14677|       |            break;
14678|       |#endif
14679|  2.99M|        default:
  ------------------
  |  Branch (14679:9): [True: 2.99M, False: 328k]
  ------------------
14680|       |            // all done
14681|  2.99M|            return s;
14682|  3.32M|    }
14683|       |
14684|       |    /* Statically allocated strings must be already interned. */
14685|  3.32M|    assert(!_PyUnicode_STATE(s).statically_allocated);
  ------------------
  |  Branch (14685:5): [True: 220k, False: 0]
  |  Branch (14685:5): [True: 220k, False: 0]
  ------------------
14686|       |
14687|       |#if Py_GIL_DISABLED
14688|       |    /* In the free-threaded build, all interned strings are immortal */
14689|       |    immortalize = 1;
14690|       |#endif
14691|       |
14692|       |    /* If it's already immortal, intern it as such */
14693|   220k|    if (_Py_IsImmortal(s)) {
  ------------------
  |  |  137|   220k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   220k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   220k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 220k]
  |  |  ------------------
  ------------------
14694|      0|        immortalize = 1;
14695|      0|    }
14696|       |
14697|       |    /* if it's a short string, get the singleton */
14698|   220k|    if (PyUnicode_GET_LENGTH(s) == 1 &&
  ------------------
  |  |  299|   220k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   220k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   220k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14698:9): [True: 771, False: 219k]
  ------------------
14699|  1.54k|                PyUnicode_KIND(s) == PyUnicode_1BYTE_KIND) {
  ------------------
  |  |  258|    771|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  1.54k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 771, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14699:17): [True: 10, False: 761]
  ------------------
14700|     10|        PyObject *r = LATIN1(*(unsigned char*)PyUnicode_DATA(s));
  ------------------
  |  |  188|     10|#define LATIN1 _Py_LATIN1_CHR
  |  |  ------------------
  |  |  |  |  940|     10|    ((CH) < 128 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (940:6): [True: 10, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  941|     10|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|     10|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|     10|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  942|     10|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14701|     10|        assert(PyUnicode_CHECK_INTERNED(r));
  ------------------
  |  Branch (14701:9): [True: 10, False: 0]
  ------------------
14702|     10|        Py_DECREF(s);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14703|     10|        return r;
14704|     10|    }
14705|       |#ifdef Py_DEBUG
14706|       |    assert(!unicode_is_singleton(s));
14707|       |#endif
14708|       |
14709|       |    /* Look in the global cache now. */
14710|   220k|    {
14711|   220k|        PyObject *r = (PyObject *)_Py_hashtable_get(INTERNED_STRINGS, s);
  ------------------
  |  |  223|   220k|#define INTERNED_STRINGS _PyRuntime.cached_objects.interned_strings
  ------------------
14712|   220k|        if (r != NULL) {
  ------------------
  |  Branch (14712:13): [True: 10.0k, False: 210k]
  ------------------
14713|  10.0k|            assert(_PyUnicode_STATE(r).statically_allocated);
  ------------------
  |  Branch (14713:13): [True: 10.0k, False: 0]
  |  Branch (14713:13): [True: 10.0k, False: 0]
  ------------------
14714|  10.0k|            assert(r != s);  // r must be statically_allocated; s is not
  ------------------
  |  Branch (14714:13): [True: 10.0k, False: 0]
  ------------------
14715|  10.0k|            Py_DECREF(s);
  ------------------
  |  |  430|  10.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14716|  10.0k|            return Py_NewRef(r);
  ------------------
  |  |  550|  10.0k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14717|  10.0k|        }
14718|   220k|    }
14719|       |
14720|       |    /* Do a setdefault on the per-interpreter cache. */
14721|   210k|    PyObject *interned = get_interned_dict(interp);
14722|   210k|    assert(interned != NULL);
  ------------------
  |  Branch (14722:5): [True: 210k, False: 0]
  ------------------
14723|       |#ifdef Py_GIL_DISABLED
14724|       |#  define INTERN_MUTEX &_Py_INTERP_CACHED_OBJECT(interp, interned_mutex)
14725|       |    // Lock-free fast path: check if there's already an interned copy that
14726|       |    // is in its final immortal state.
14727|       |    PyObject *r;
14728|       |    int res = PyDict_GetItemRef(interned, s, &r);
14729|       |    if (res < 0) {
14730|       |        PyErr_Clear();
14731|       |        return s;
14732|       |    }
14733|       |    if (res > 0) {
14734|       |        unsigned int state = _Py_atomic_load_uint8(&_PyUnicode_STATE(r).interned);
14735|       |        if (state == SSTATE_INTERNED_IMMORTAL) {
14736|       |            Py_DECREF(s);
14737|       |            return r;
14738|       |        }
14739|       |        // Not yet fully interned; fall through to the locking path.
14740|       |        Py_DECREF(r);
14741|       |    }
14742|       |#endif
14743|       |
14744|       |#ifdef Py_GIL_DISABLED
14745|       |    // Immortalization writes to the refcount fields non-atomically. That
14746|       |    // races with Py_INCREF / Py_DECREF on the thread that owns `s`. If we
14747|       |    // don't own it (and its refcount hasn't been merged), intern a copy
14748|       |    // we own instead.
14749|       |    if (!can_immortalize_safely(s)) {
14750|       |        PyObject *copy = _PyUnicode_Copy(s);
14751|       |        if (copy == NULL) {
14752|       |            PyErr_Clear();
14753|       |            return s;
14754|       |        }
14755|       |        Py_DECREF(s);
14756|       |        s = copy;
14757|       |    }
14758|       |#endif
14759|       |
14760|       |    // Why _Py_LOCK_DONT_DETACH is used here: waiting for the interned mutex
14761|       |    // must not detach the thread state. Extension code is expected to
14762|       |    // detach before blocking on opaque external synchronization. However,
14763|       |    // the lock used for C++ static initialization is hidden, making
14764|       |    // that difficult, and it is common for C++ extensions to call
14765|       |    // PyUnicode_InternFromString() from static initializers. Detaching here
14766|       |    // can therefore deadlock: a stop-the-world pause may prevent the lock
14767|       |    // owner from reattaching while the pause waits for another attached
14768|       |    // thread blocked on the hidden lock.
14769|   210k|    FT_MUTEX_LOCK_FLAGS(INTERN_MUTEX, _Py_LOCK_DONT_DETACH);
  ------------------
  |  |  205|   210k|#define FT_MUTEX_LOCK_FLAGS(lock, flags) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (205:55): [Folded, False: 210k]
  |  |  ------------------
  ------------------
14770|   210k|    PyObject *t;
14771|   210k|    {
14772|   210k|        int res = PyDict_SetDefaultRef(interned, s, s, &t);
14773|   210k|        if (res < 0) {
  ------------------
  |  Branch (14773:13): [True: 0, False: 210k]
  ------------------
14774|      0|            PyErr_Clear();
14775|      0|            FT_MUTEX_UNLOCK(INTERN_MUTEX);
  ------------------
  |  |  206|      0|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 0]
  |  |  ------------------
  ------------------
14776|      0|            return s;
14777|      0|        }
14778|   210k|        else if (res == 1) {
  ------------------
  |  Branch (14778:18): [True: 162k, False: 47.6k]
  ------------------
14779|       |            // value was already present (not inserted)
14780|   162k|            Py_DECREF(s);
  ------------------
  |  |  430|   162k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   162k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   162k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14781|   162k|            if (immortalize &&
  ------------------
  |  Branch (14781:17): [True: 87.5k, False: 75.2k]
  ------------------
14782|  87.5k|                    PyUnicode_CHECK_INTERNED(t) == SSTATE_INTERNED_MORTAL) {
  ------------------
  |  |  214|  87.5k|#define PyUnicode_CHECK_INTERNED(op) PyUnicode_CHECK_INTERNED(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  87.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  87.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                  PyUnicode_CHECK_INTERNED(t) == SSTATE_INTERNED_MORTAL) {
  ------------------
  |  |  202|  87.5k|#define SSTATE_INTERNED_MORTAL 1
  ------------------
  |  Branch (14782:21): [True: 438, False: 87.0k]
  ------------------
14783|    438|                immortalize_interned(t);
14784|    438|            }
14785|   162k|            FT_MUTEX_UNLOCK(INTERN_MUTEX);
  ------------------
  |  |  206|   162k|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 162k]
  |  |  ------------------
  ------------------
14786|   162k|            return t;
14787|   162k|        }
14788|  47.6k|        else {
14789|       |            // value was newly inserted
14790|  47.6k|            assert (s == t);
  ------------------
  |  Branch (14790:13): [True: 47.6k, False: 0]
  ------------------
14791|  47.6k|            Py_DECREF(t);
  ------------------
  |  |  430|  47.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  47.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14792|  47.6k|        }
14793|   210k|    }
14794|       |
14795|       |    /* NOT_INTERNED -> INTERNED_MORTAL */
14796|       |
14797|   210k|    assert(_PyUnicode_STATE(s).interned == SSTATE_NOT_INTERNED);
  ------------------
  |  Branch (14797:5): [True: 47.6k, False: 0]
  |  Branch (14797:5): [True: 47.6k, False: 0]
  ------------------
14798|       |
14799|  47.6k|    if (!_Py_IsImmortal(s)) {
  ------------------
  |  |  137|  47.6k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  47.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14799:9): [True: 47.6k, False: 0]
  ------------------
14800|       |        /* The two references in interned dict (key and value) are not counted.
14801|       |        unicode_dealloc() and _PyUnicode_ClearInterned() take care of this. */
14802|  47.6k|        Py_DECREF(s);
  ------------------
  |  |  430|  47.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  47.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14803|  47.6k|        Py_DECREF(s);
  ------------------
  |  |  430|  47.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  47.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  47.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14804|  47.6k|    }
14805|  47.6k|    FT_ATOMIC_STORE_UINT8(_PyUnicode_STATE(s).interned, SSTATE_INTERNED_MORTAL);
  ------------------
  |  |  155|  95.2k|#define FT_ATOMIC_STORE_UINT8(value, new_value) value = new_value
  |  |  ------------------
  |  |  |  Branch (155:49): [True: 47.6k, False: 0]
  |  |  ------------------
  ------------------
14806|       |
14807|       |    /* INTERNED_MORTAL -> INTERNED_IMMORTAL (if needed) */
14808|       |
14809|       |#ifdef Py_DEBUG
14810|       |    if (_Py_IsImmortal(s)) {
14811|       |        assert(immortalize);
14812|       |    }
14813|       |#endif
14814|  47.6k|    if (immortalize) {
  ------------------
  |  Branch (14814:9): [True: 30.2k, False: 17.3k]
  ------------------
14815|  30.2k|        immortalize_interned(s);
14816|  30.2k|    }
14817|       |
14818|  47.6k|    FT_MUTEX_UNLOCK(INTERN_MUTEX);
  ------------------
  |  |  206|  47.6k|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 47.6k]
  |  |  ------------------
  ------------------
14819|  47.6k|    return s;
14820|  47.6k|}
unicodeobject.c:immortalize_interned:
14611|  30.7k|{
14612|  30.7k|    assert(PyUnicode_CHECK_INTERNED(s) == SSTATE_INTERNED_MORTAL);
  ------------------
  |  Branch (14612:5): [True: 30.7k, False: 0]
  ------------------
14613|  30.7k|    assert(!_Py_IsImmortal(s));
  ------------------
  |  Branch (14613:5): [True: 30.7k, False: 0]
  ------------------
14614|       |#ifdef Py_REF_DEBUG
14615|       |    /* The reference count value should be excluded from the RefTotal.
14616|       |       The decrements to these objects will not be registered so they
14617|       |       need to be accounted for in here. */
14618|       |    for (Py_ssize_t i = 0; i < Py_REFCNT(s); i++) {
14619|       |        _Py_DecRefTotal(_PyThreadState_GET());
14620|       |    }
14621|       |#endif
14622|  30.7k|    _Py_SetImmortal(s);
14623|       |    // The switch to SSTATE_INTERNED_IMMORTAL must be the last thing done here
14624|       |    // to synchronize with the check in intern_common() that avoids locking if
14625|       |    // the string is already immortal.
14626|  30.7k|    FT_ATOMIC_STORE_UINT8(_PyUnicode_STATE(s).interned, SSTATE_INTERNED_IMMORTAL);
  ------------------
  |  |  155|  61.5k|#define FT_ATOMIC_STORE_UINT8(value, new_value) value = new_value
  |  |  ------------------
  |  |  |  Branch (155:49): [True: 30.7k, False: 0]
  |  |  ------------------
  ------------------
14627|  30.7k|}
unicodeobject.c:has_shared_intern_dict:
  288|      2|{
  289|      2|    PyInterpreterState *main_interp = _PyInterpreterState_Main();
  290|      2|    return interp != main_interp  && interp->feature_flags & Py_RTFLAGS_USE_MAIN_OBMALLOC;
  ------------------
  |  |   79|      2|#define Py_RTFLAGS_USE_MAIN_OBMALLOC (1UL << 5)
  ------------------
  |  Branch (290:12): [True: 0, False: 2]
  |  Branch (290:38): [True: 0, False: 0]
  ------------------
  291|      2|}
unicodeobject.c:unicodeiter_dealloc:
14972|  18.4k|{
14973|  18.4k|    unicodeiterobject *it = (unicodeiterobject *)op;
14974|  18.4k|    _PyObject_GC_UNTRACK(it);
  ------------------
  |  |  507|  18.4k|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14975|  18.4k|    Py_XDECREF(it->it_seq);
  ------------------
  |  |  524|  18.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
14976|  18.4k|    PyObject_GC_Del(it);
14977|  18.4k|}
unicodeobject.c:unicodeiter_next:
14989|   306k|{
14990|   306k|    unicodeiterobject *it = (unicodeiterobject *)op;
14991|   306k|    PyObject *seq;
14992|       |
14993|   306k|    assert(it != NULL);
  ------------------
  |  Branch (14993:5): [True: 306k, False: 0]
  ------------------
14994|   306k|    seq = it->it_seq;
14995|   306k|    if (seq == NULL)
  ------------------
  |  Branch (14995:9): [True: 0, False: 306k]
  ------------------
14996|      0|        return NULL;
14997|   306k|    assert(_PyUnicode_CHECK(seq));
  ------------------
  |  Branch (14997:5): [True: 306k, False: 0]
  ------------------
14998|       |
14999|   306k|    if (it->it_index < PyUnicode_GET_LENGTH(seq)) {
  ------------------
  |  |  299|   306k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   306k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   306k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (14999:9): [True: 288k, False: 18.3k]
  ------------------
15000|   288k|        int kind = PyUnicode_KIND(seq);
  ------------------
  |  |  258|   288k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|   576k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 288k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15001|   288k|        const void *data = PyUnicode_DATA(seq);
  ------------------
  |  |  284|   288k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   288k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   288k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15002|   288k|        Py_UCS4 chr = PyUnicode_READ(kind, data, it->it_index);
  ------------------
  |  |  354|   288k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   288k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   288k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   288k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   288k|                   (index))
  ------------------
15003|   288k|        it->it_index++;
15004|   288k|        return unicode_char(chr);
15005|   288k|    }
15006|       |
15007|  18.3k|    it->it_seq = NULL;
15008|  18.3k|    Py_DECREF(seq);
  ------------------
  |  |  430|  18.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15009|       |    return NULL;
15010|   306k|}
unicodeobject.c:unicode_ascii_iter_next:
15014|  1.06k|{
15015|  1.06k|    unicodeiterobject *it = (unicodeiterobject *)op;
15016|  1.06k|    assert(it != NULL);
  ------------------
  |  Branch (15016:5): [True: 1.06k, False: 0]
  ------------------
15017|  1.06k|    PyObject *seq = it->it_seq;
15018|  1.06k|    if (seq == NULL) {
  ------------------
  |  Branch (15018:9): [True: 0, False: 1.06k]
  ------------------
15019|      0|        return NULL;
15020|      0|    }
15021|  1.06k|    assert(_PyUnicode_CHECK(seq));
  ------------------
  |  Branch (15021:5): [True: 1.06k, False: 0]
  ------------------
15022|  1.06k|    assert(PyUnicode_IS_COMPACT_ASCII(seq));
  ------------------
  |  Branch (15022:5): [True: 1.06k, False: 0]
  ------------------
15023|  1.06k|    if (it->it_index < PyUnicode_GET_LENGTH(seq)) {
  ------------------
  |  |  299|  1.06k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (15023:9): [True: 1.02k, False: 41]
  ------------------
15024|  1.02k|        const void *data = ((void*)(_PyASCIIObject_CAST(seq) + 1));
  ------------------
  |  |  186|  1.02k|    (assert(PyUnicode_Check(op)), \
  |  |  187|  1.02k|     _Py_CAST(PyASCIIObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|  1.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (15024:37): [True: 1.02k, False: 0]
  ------------------
15025|  1.02k|        Py_UCS1 chr = (Py_UCS1)PyUnicode_READ(PyUnicode_1BYTE_KIND,
  ------------------
  |  |  354|  1.02k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  1.02k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  1.02k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  1.02k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  1.02k|                   (index))
  ------------------
15026|  1.02k|                                              data, it->it_index);
15027|  1.02k|        it->it_index++;
15028|  1.02k|        return (PyObject*)&_Py_SINGLETON(strings).ascii[chr];
  ------------------
  |  |   18|  1.02k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|  1.02k|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
15029|  1.02k|    }
15030|     41|    it->it_seq = NULL;
15031|     41|    Py_DECREF(seq);
  ------------------
  |  |  430|     41|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     41|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     41|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15032|       |    return NULL;
15033|  1.06k|}
unicodeobject.c:unicode_iter:
15145|  18.4k|{
15146|  18.4k|    unicodeiterobject *it;
15147|       |
15148|  18.4k|    if (!PyUnicode_Check(seq)) {
  ------------------
  |  |  103|  18.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  18.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (15148:9): [True: 0, False: 18.4k]
  ------------------
15149|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
15150|      0|        return NULL;
15151|      0|    }
15152|  18.4k|    if (PyUnicode_IS_COMPACT_ASCII(seq)) {
  ------------------
  |  |  241|  18.4k|#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (241:40): [True: 43, False: 18.4k]
  |  |  ------------------
  ------------------
15153|     43|        it = PyObject_GC_New(unicodeiterobject, &_PyUnicodeASCIIIter_Type);
  ------------------
  |  |  181|     43|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
15154|     43|    }
15155|  18.4k|    else {
15156|  18.4k|        it = PyObject_GC_New(unicodeiterobject, &PyUnicodeIter_Type);
  ------------------
  |  |  181|  18.4k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  18.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
15157|  18.4k|    }
15158|  18.4k|    if (it == NULL)
  ------------------
  |  Branch (15158:9): [True: 0, False: 18.4k]
  ------------------
15159|      0|        return NULL;
15160|  18.4k|    it->it_index = 0;
15161|  18.4k|    it->it_seq = Py_NewRef(seq);
  ------------------
  |  |  550|  18.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  18.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15162|  18.4k|    _PyObject_GC_TRACK(it);
  ------------------
  |  |  505|  18.4k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15163|  18.4k|    return (PyObject *)it;
15164|  18.4k|}
unicodeobject.c:init_fs_encoding:
15306|      2|{
15307|      2|    PyInterpreterState *interp = tstate->interp;
15308|       |
15309|       |    /* Update the filesystem encoding to the normalized Python codec name.
15310|       |       For example, replace "ANSI_X3.4-1968" (locale encoding) with "ascii"
15311|       |       (Python codec name). */
15312|      2|    PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(interp);
15313|      2|    if (config_get_codec_name(&config->filesystem_encoding) < 0) {
  ------------------
  |  Branch (15313:9): [True: 0, False: 2]
  ------------------
15314|      0|        _Py_DumpPathConfig(tstate);
15315|      0|        return _PyStatus_ERR("failed to get the Python codec "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
15316|      0|                             "of the filesystem encoding");
15317|      0|    }
15318|       |
15319|      2|    if (init_fs_codec(interp) < 0) {
  ------------------
  |  Branch (15319:9): [True: 0, False: 2]
  ------------------
15320|      0|        return _PyStatus_ERR("cannot initialize filesystem codec");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
15321|      0|    }
15322|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
15323|      2|}
unicodeobject.c:config_get_codec_name:
15185|      4|{
15186|      4|    char *encoding;
15187|      4|    if (encode_wstr_utf8(*config_encoding, &encoding, "stdio_encoding") < 0) {
  ------------------
  |  Branch (15187:9): [True: 0, False: 4]
  ------------------
15188|      0|        return -1;
15189|      0|    }
15190|       |
15191|      4|    PyObject *name_obj = NULL;
15192|      4|    PyObject *codec = _PyCodec_Lookup(encoding);
15193|      4|    PyMem_RawFree(encoding);
15194|       |
15195|      4|    if (!codec)
  ------------------
  |  Branch (15195:9): [True: 0, False: 4]
  ------------------
15196|      0|        goto error;
15197|       |
15198|      4|    name_obj = PyObject_GetAttrString(codec, "name");
15199|      4|    Py_CLEAR(codec);
  ------------------
  |  |  484|      4|    do { \
  |  |  485|      4|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      4|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      4|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      4|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 4, False: 0]
  |  |  ------------------
  |  |  488|      4|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      4|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      4|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      4|        } \
  |  |  491|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
15200|      4|    if (!name_obj) {
  ------------------
  |  Branch (15200:9): [True: 0, False: 4]
  ------------------
15201|      0|        goto error;
15202|      0|    }
15203|       |
15204|      4|    wchar_t *wname = PyUnicode_AsWideCharString(name_obj, NULL);
15205|      4|    Py_DECREF(name_obj);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15206|      4|    if (wname == NULL) {
  ------------------
  |  Branch (15206:9): [True: 0, False: 4]
  ------------------
15207|      0|        goto error;
15208|      0|    }
15209|       |
15210|      4|    wchar_t *raw_wname = _PyMem_RawWcsdup(wname);
15211|      4|    if (raw_wname == NULL) {
  ------------------
  |  Branch (15211:9): [True: 0, False: 4]
  ------------------
15212|      0|        PyMem_Free(wname);
15213|      0|        PyErr_NoMemory();
15214|      0|        goto error;
15215|      0|    }
15216|       |
15217|      4|    PyMem_RawFree(*config_encoding);
15218|      4|    *config_encoding = raw_wname;
15219|       |
15220|      4|    PyMem_Free(wname);
15221|      4|    return 0;
15222|       |
15223|      0|error:
15224|      0|    Py_XDECREF(codec);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15225|      0|    Py_XDECREF(name_obj);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
15226|      0|    return -1;
15227|      4|}
unicodeobject.c:encode_wstr_utf8:
15168|      8|{
15169|      8|    int res;
15170|      8|    res = _Py_EncodeUTF8Ex(wstr, str, NULL, NULL, 1, _Py_ERROR_STRICT);
15171|      8|    if (res == -2) {
  ------------------
  |  Branch (15171:9): [True: 0, False: 8]
  ------------------
15172|      0|        PyErr_Format(PyExc_RuntimeError, "cannot encode %s", name);
15173|      0|        return -1;
15174|      0|    }
15175|      8|    if (res < 0) {
  ------------------
  |  Branch (15175:9): [True: 0, False: 8]
  ------------------
15176|      0|        PyErr_NoMemory();
15177|      0|        return -1;
15178|      0|    }
15179|      8|    return 0;
15180|      8|}
unicodeobject.c:init_fs_codec:
15249|      2|{
15250|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
15251|       |
15252|      2|    _Py_error_handler error_handler;
15253|      2|    error_handler = get_error_handler_wide(config->filesystem_errors);
15254|      2|    if (error_handler == _Py_ERROR_UNKNOWN) {
  ------------------
  |  Branch (15254:9): [True: 0, False: 2]
  ------------------
15255|      0|        PyErr_SetString(PyExc_RuntimeError, "unknown filesystem error handler");
15256|      0|        return -1;
15257|      0|    }
15258|       |
15259|      2|    char *encoding, *errors;
15260|      2|    if (encode_wstr_utf8(config->filesystem_encoding,
  ------------------
  |  Branch (15260:9): [True: 0, False: 2]
  ------------------
15261|      2|                         &encoding,
15262|      2|                         "filesystem_encoding") < 0) {
15263|      0|        return -1;
15264|      0|    }
15265|       |
15266|      2|    if (encode_wstr_utf8(config->filesystem_errors,
  ------------------
  |  Branch (15266:9): [True: 0, False: 2]
  ------------------
15267|      2|                         &errors,
15268|      2|                         "filesystem_errors") < 0) {
15269|      0|        PyMem_RawFree(encoding);
15270|      0|        return -1;
15271|      0|    }
15272|       |
15273|      2|    struct _Py_unicode_fs_codec *fs_codec = &interp->unicode.fs_codec;
15274|      2|    PyMem_RawFree(fs_codec->encoding);
15275|      2|    fs_codec->encoding = encoding;
15276|       |    /* encoding has been normalized by init_fs_encoding() */
15277|      2|    fs_codec->utf8 = (strcmp(encoding, "utf-8") == 0);
15278|      2|    PyMem_RawFree(fs_codec->errors);
15279|      2|    fs_codec->errors = errors;
15280|      2|    fs_codec->error_handler = error_handler;
15281|       |
15282|       |#ifdef _Py_FORCE_UTF8_FS_ENCODING
15283|       |    assert(fs_codec->utf8 == 1);
15284|       |#endif
15285|       |
15286|       |    /* At this point, PyUnicode_EncodeFSDefault() and
15287|       |       PyUnicode_DecodeFSDefault() can now use the Python codec rather than
15288|       |       the C implementation of the filesystem encoding. */
15289|       |
15290|       |    /* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
15291|       |       global configuration variables. */
15292|      2|    if (_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (15292:9): [True: 2, False: 0]
  ------------------
15293|       |
15294|      2|        if (_Py_SetFileSystemEncoding(fs_codec->encoding,
  ------------------
  |  Branch (15294:13): [True: 0, False: 2]
  ------------------
15295|      2|                                      fs_codec->errors) < 0) {
15296|      0|            PyErr_NoMemory();
15297|      0|            return -1;
15298|      0|        }
15299|      2|    }
15300|      2|    return 0;
15301|      2|}
unicodeobject.c:init_stdio_encoding:
15232|      2|{
15233|       |    /* Update the stdio encoding to the normalized Python codec name. */
15234|      2|    PyConfig *config = (PyConfig*)_PyInterpreterState_GetConfig(interp);
15235|      2|    if (config->stdio_encoding == NULL) {
  ------------------
  |  Branch (15235:9): [True: 0, False: 2]
  ------------------
15236|       |        /* gh-86427: The encoding is determined for every stream. */
15237|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
15238|      0|    }
15239|      2|    if (config_get_codec_name(&config->stdio_encoding) < 0) {
  ------------------
  |  Branch (15239:9): [True: 0, False: 2]
  ------------------
15240|      0|        return _PyStatus_ERR("failed to get the Python codec name "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
15241|      0|                             "of the stdio encoding");
15242|      0|    }
15243|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
15244|      2|}

_PyUnicode_IsWhitespace:
 7091|  1.18k|{
 7092|  1.18k|    switch (ch) {
  ------------------
  |  Branch (7092:13): [True: 34, False: 1.14k]
  ------------------
 7093|      0|    case 0x0009:
  ------------------
  |  Branch (7093:5): [True: 0, False: 1.18k]
  ------------------
 7094|      0|    case 0x000A:
  ------------------
  |  Branch (7094:5): [True: 0, False: 1.18k]
  ------------------
 7095|      0|    case 0x000B:
  ------------------
  |  Branch (7095:5): [True: 0, False: 1.18k]
  ------------------
 7096|      0|    case 0x000C:
  ------------------
  |  Branch (7096:5): [True: 0, False: 1.18k]
  ------------------
 7097|      0|    case 0x000D:
  ------------------
  |  Branch (7097:5): [True: 0, False: 1.18k]
  ------------------
 7098|      0|    case 0x001C:
  ------------------
  |  Branch (7098:5): [True: 0, False: 1.18k]
  ------------------
 7099|      0|    case 0x001D:
  ------------------
  |  Branch (7099:5): [True: 0, False: 1.18k]
  ------------------
 7100|      0|    case 0x001E:
  ------------------
  |  Branch (7100:5): [True: 0, False: 1.18k]
  ------------------
 7101|      0|    case 0x001F:
  ------------------
  |  Branch (7101:5): [True: 0, False: 1.18k]
  ------------------
 7102|     34|    case 0x0020:
  ------------------
  |  Branch (7102:5): [True: 34, False: 1.14k]
  ------------------
 7103|     34|    case 0x0085:
  ------------------
  |  Branch (7103:5): [True: 0, False: 1.18k]
  ------------------
 7104|     34|    case 0x00A0:
  ------------------
  |  Branch (7104:5): [True: 0, False: 1.18k]
  ------------------
 7105|     34|    case 0x1680:
  ------------------
  |  Branch (7105:5): [True: 0, False: 1.18k]
  ------------------
 7106|     34|    case 0x2000:
  ------------------
  |  Branch (7106:5): [True: 0, False: 1.18k]
  ------------------
 7107|     34|    case 0x2001:
  ------------------
  |  Branch (7107:5): [True: 0, False: 1.18k]
  ------------------
 7108|     34|    case 0x2002:
  ------------------
  |  Branch (7108:5): [True: 0, False: 1.18k]
  ------------------
 7109|     34|    case 0x2003:
  ------------------
  |  Branch (7109:5): [True: 0, False: 1.18k]
  ------------------
 7110|     34|    case 0x2004:
  ------------------
  |  Branch (7110:5): [True: 0, False: 1.18k]
  ------------------
 7111|     34|    case 0x2005:
  ------------------
  |  Branch (7111:5): [True: 0, False: 1.18k]
  ------------------
 7112|     34|    case 0x2006:
  ------------------
  |  Branch (7112:5): [True: 0, False: 1.18k]
  ------------------
 7113|     34|    case 0x2007:
  ------------------
  |  Branch (7113:5): [True: 0, False: 1.18k]
  ------------------
 7114|     34|    case 0x2008:
  ------------------
  |  Branch (7114:5): [True: 0, False: 1.18k]
  ------------------
 7115|     34|    case 0x2009:
  ------------------
  |  Branch (7115:5): [True: 0, False: 1.18k]
  ------------------
 7116|     34|    case 0x200A:
  ------------------
  |  Branch (7116:5): [True: 0, False: 1.18k]
  ------------------
 7117|     34|    case 0x2028:
  ------------------
  |  Branch (7117:5): [True: 0, False: 1.18k]
  ------------------
 7118|     34|    case 0x2029:
  ------------------
  |  Branch (7118:5): [True: 0, False: 1.18k]
  ------------------
 7119|     34|    case 0x202F:
  ------------------
  |  Branch (7119:5): [True: 0, False: 1.18k]
  ------------------
 7120|     34|    case 0x205F:
  ------------------
  |  Branch (7120:5): [True: 0, False: 1.18k]
  ------------------
 7121|     34|    case 0x3000:
  ------------------
  |  Branch (7121:5): [True: 0, False: 1.18k]
  ------------------
 7122|     34|        return 1;
 7123|  1.18k|    }
 7124|  1.14k|    return 0;
 7125|  1.18k|}

_Py_union_type_or:
  259|     45|{
  260|     45|    if (!is_unionable(self) || !is_unionable(other)) {
  ------------------
  |  Branch (260:9): [True: 0, False: 45]
  |  Branch (260:32): [True: 0, False: 45]
  ------------------
  261|      0|        Py_RETURN_NOTIMPLEMENTED;
  ------------------
  |  |  648|      0|#  define Py_RETURN_NOTIMPLEMENTED return Py_NotImplemented
  |  |  ------------------
  |  |  |  |  640|      0|#  define Py_NotImplemented (&_Py_NotImplementedStruct)
  |  |  ------------------
  ------------------
  262|      0|    }
  263|       |
  264|     45|    unionbuilder ub;
  265|       |    // unchecked because we already checked is_unionable()
  266|     45|    if (!unionbuilder_init(&ub, false)) {
  ------------------
  |  Branch (266:9): [True: 0, False: 45]
  ------------------
  267|      0|        return NULL;
  268|      0|    }
  269|     45|    if (!unionbuilder_add_single(&ub, self) ||
  ------------------
  |  Branch (269:9): [True: 0, False: 45]
  ------------------
  270|     45|        !unionbuilder_add_single(&ub, other)) {
  ------------------
  |  Branch (270:9): [True: 0, False: 45]
  ------------------
  271|      0|        unionbuilder_finalize(&ub);
  272|      0|        return NULL;
  273|      0|    }
  274|       |
  275|     45|    PyObject *new_union = make_union(&ub);
  276|     45|    return new_union;
  277|     45|}
unionobject.c:is_unionable:
  245|     90|{
  246|     90|    if (obj == Py_None ||
  ------------------
  |  |  616|    180|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (246:9): [True: 44, False: 46]
  ------------------
  247|     46|        PyType_Check(obj) ||
  ------------------
  |  |  766|    136|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 46, False: 0]
  |  |  ------------------
  ------------------
  248|     90|        PySentinel_Check(obj) ||
  ------------------
  |  |   15|     90|#define PySentinel_Check(op) PySentinel_CheckExact(op)
  |  |  ------------------
  |  |  |  |   12|      0|#define PySentinel_CheckExact(op) Py_IS_TYPE((op), &PySentinel_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|     90|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|     90|        _PyGenericAlias_Check(obj) ||
  ------------------
  |  |   17|      0|#define _PyGenericAlias_Check(op) PyObject_TypeCheck((op), &Py_GenericAliasType)
  |  |  ------------------
  |  |  |  |  378|     90|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|     90|        _PyUnion_Check(obj) ||
  ------------------
  |  |   15|      0|#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type)
  |  |  ------------------
  |  |  |  |  215|     90|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|     90|        Py_IS_TYPE(obj, &_PyTypeAlias_Type)) {
  ------------------
  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  252|     90|        return 1;
  253|     90|    }
  254|      0|    return 0;
  255|     90|}
unionobject.c:unionbuilder_init:
  144|     45|{
  145|     45|    ub->args = PyList_New(0);
  146|     45|    if (ub->args == NULL) {
  ------------------
  |  Branch (146:9): [True: 0, False: 45]
  ------------------
  147|      0|        return false;
  148|      0|    }
  149|     45|    ub->hashable_args = PySet_New(NULL);
  150|     45|    if (ub->hashable_args == NULL) {
  ------------------
  |  Branch (150:9): [True: 0, False: 45]
  ------------------
  151|      0|        Py_DECREF(ub->args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|      0|        return false;
  153|      0|    }
  154|     45|    ub->unhashable_args = NULL;
  155|     45|    ub->is_checked = is_checked;
  156|       |    return true;
  157|     45|}
unionobject.c:unionbuilder_add_single:
  209|     90|{
  210|     90|    if (Py_IsNone(arg)) {
  ------------------
  |  |  621|     90|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|     90|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 44, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|     44|        arg = (PyObject *)&_PyNone_Type;  // immortal, so no refcounting needed
  212|     44|    }
  213|     46|    else if (_PyUnion_Check(arg)) {
  ------------------
  |  |   15|     46|#define _PyUnion_Check(op) Py_IS_TYPE((op), &_PyUnion_Type)
  |  |  ------------------
  |  |  |  |  215|     46|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|      0|        PyObject *args = ((unionobject *)arg)->args;
  215|      0|        return unionbuilder_add_tuple(ub, args);
  216|      0|    }
  217|     90|    if (ub->is_checked) {
  ------------------
  |  Branch (217:9): [True: 0, False: 90]
  ------------------
  218|      0|        PyObject *type = type_check(arg, "Union[arg, ...]: each arg must be a type.");
  219|      0|        if (type == NULL) {
  ------------------
  |  Branch (219:13): [True: 0, False: 0]
  ------------------
  220|      0|            return false;
  221|      0|        }
  222|      0|        bool result = unionbuilder_add_single_unchecked(ub, type);
  223|      0|        Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      0|        return result;
  225|      0|    }
  226|     90|    else {
  227|     90|        return unionbuilder_add_single_unchecked(ub, arg);
  228|     90|    }
  229|     90|}
unionobject.c:unionbuilder_add_single_unchecked:
  169|     90|{
  170|     90|    Py_hash_t hash = PyObject_Hash(arg);
  171|     90|    if (hash == -1) {
  ------------------
  |  Branch (171:9): [True: 0, False: 90]
  ------------------
  172|      0|        PyErr_Clear();
  173|      0|        if (ub->unhashable_args == NULL) {
  ------------------
  |  Branch (173:13): [True: 0, False: 0]
  ------------------
  174|      0|            ub->unhashable_args = PyList_New(0);
  175|      0|            if (ub->unhashable_args == NULL) {
  ------------------
  |  Branch (175:17): [True: 0, False: 0]
  ------------------
  176|      0|                return false;
  177|      0|            }
  178|      0|        }
  179|      0|        else {
  180|      0|            int contains = PySequence_Contains(ub->unhashable_args, arg);
  181|      0|            if (contains < 0) {
  ------------------
  |  Branch (181:17): [True: 0, False: 0]
  ------------------
  182|      0|                return false;
  183|      0|            }
  184|      0|            if (contains == 1) {
  ------------------
  |  Branch (184:17): [True: 0, False: 0]
  ------------------
  185|      0|                return true;
  186|      0|            }
  187|      0|        }
  188|      0|        if (PyList_Append(ub->unhashable_args, arg) < 0) {
  ------------------
  |  Branch (188:13): [True: 0, False: 0]
  ------------------
  189|      0|            return false;
  190|      0|        }
  191|      0|    }
  192|     90|    else {
  193|     90|        int contains = PySet_Contains(ub->hashable_args, arg);
  194|     90|        if (contains < 0) {
  ------------------
  |  Branch (194:13): [True: 0, False: 90]
  ------------------
  195|      0|            return false;
  196|      0|        }
  197|     90|        if (contains == 1) {
  ------------------
  |  Branch (197:13): [True: 0, False: 90]
  ------------------
  198|      0|            return true;
  199|      0|        }
  200|     90|        if (PySet_Add(ub->hashable_args, arg) < 0) {
  ------------------
  |  Branch (200:13): [True: 0, False: 90]
  ------------------
  201|      0|            return false;
  202|      0|        }
  203|     90|    }
  204|     90|    return PyList_Append(ub->args, arg) == 0;
  205|     90|}
unionobject.c:unionbuilder_finalize:
  161|     45|{
  162|     45|    Py_DECREF(ub->args);
  ------------------
  |  |  430|     45|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|     45|    Py_DECREF(ub->hashable_args);
  ------------------
  |  |  430|     45|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|     45|    Py_XDECREF(ub->unhashable_args);
  ------------------
  |  |  524|     45|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|     45|}
unionobject.c:unionobject_dealloc:
   21|      1|{
   22|      1|    unionobject *alias = (unionobject *)self;
   23|       |
   24|      1|    _PyObject_GC_UNTRACK(self);
  ------------------
  |  |  507|      1|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   25|      1|    FT_CLEAR_WEAKREFS(self, alias->weakreflist);
  ------------------
  |  |   47|      1|    do {                                            \
  |  |   48|      1|        assert(Py_REFCNT(obj) == 0);                \
  |  |   49|      1|        if (weakref_list != NULL) {                 \
  |  |  ------------------
  |  |  |  Branch (49:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   50|      0|            PyObject_ClearWeakRefs(obj);            \
  |  |   51|      0|        }                                           \
  |  |   52|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  |  Branch (25:5): [True: 1, False: 0]
  ------------------
   26|       |
   27|      1|    Py_XDECREF(alias->args);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   28|      1|    Py_XDECREF(alias->hashable_args);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   29|      1|    Py_XDECREF(alias->unhashable_args);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   30|      1|    Py_XDECREF(alias->parameters);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   31|      1|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   32|      1|}
unionobject.c:union_traverse:
   36|    792|{
   37|    792|    unionobject *alias = (unionobject *)self;
   38|    792|    Py_VISIT(alias->args);
  ------------------
  |  |  194|    792|    do {                                                                \
  |  |  195|    792|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 792, False: 0]
  |  |  ------------------
  |  |  196|    792|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    792|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    792|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    792|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 792]
  |  |  ------------------
  |  |  198|    792|                return vret;                                            \
  |  |  199|    792|        }                                                               \
  |  |  200|    792|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 792]
  |  |  ------------------
  ------------------
   39|    792|    Py_VISIT(alias->hashable_args);
  ------------------
  |  |  194|    792|    do {                                                                \
  |  |  195|    792|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 792, False: 0]
  |  |  ------------------
  |  |  196|    792|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    792|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    792|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    792|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 792]
  |  |  ------------------
  |  |  198|    792|                return vret;                                            \
  |  |  199|    792|        }                                                               \
  |  |  200|    792|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 792]
  |  |  ------------------
  ------------------
   40|    792|    Py_VISIT(alias->unhashable_args);
  ------------------
  |  |  194|    792|    do {                                                                \
  |  |  195|    792|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 792]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|    792|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 792]
  |  |  ------------------
  ------------------
   41|    792|    Py_VISIT(alias->parameters);
  ------------------
  |  |  194|    792|    do {                                                                \
  |  |  195|    792|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 792]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|    792|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 792]
  |  |  ------------------
  ------------------
   42|    792|    return 0;
   43|    792|}
unionobject.c:make_union:
  552|     45|{
  553|     45|    Py_ssize_t n = PyList_GET_SIZE(ub->args);
  ------------------
  |  |   38|     45|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|     45|    if (n == 0) {
  ------------------
  |  Branch (554:9): [True: 0, False: 45]
  ------------------
  555|      0|        PyErr_SetString(PyExc_TypeError, "Cannot take a Union of no types.");
  556|      0|        unionbuilder_finalize(ub);
  557|      0|        return NULL;
  558|      0|    }
  559|     45|    if (n == 1) {
  ------------------
  |  Branch (559:9): [True: 0, False: 45]
  ------------------
  560|      0|        PyObject *result = PyList_GET_ITEM(ub->args, 0);
  ------------------
  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (560:28): [True: 0, False: 0]
  ------------------
  561|      0|        Py_INCREF(result);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|      0|        unionbuilder_finalize(ub);
  563|      0|        return result;
  564|      0|    }
  565|       |
  566|     45|    PyObject *args = NULL, *hashable_args = NULL, *unhashable_args = NULL;
  567|     45|    args = PyList_AsTuple(ub->args);
  568|     45|    if (args == NULL) {
  ------------------
  |  Branch (568:9): [True: 0, False: 45]
  ------------------
  569|      0|        goto error;
  570|      0|    }
  571|     45|    hashable_args = PyFrozenSet_New(ub->hashable_args);
  572|     45|    if (hashable_args == NULL) {
  ------------------
  |  Branch (572:9): [True: 0, False: 45]
  ------------------
  573|      0|        goto error;
  574|      0|    }
  575|     45|    if (ub->unhashable_args != NULL) {
  ------------------
  |  Branch (575:9): [True: 0, False: 45]
  ------------------
  576|      0|        unhashable_args = PyList_AsTuple(ub->unhashable_args);
  577|      0|        if (unhashable_args == NULL) {
  ------------------
  |  Branch (577:13): [True: 0, False: 0]
  ------------------
  578|      0|            goto error;
  579|      0|        }
  580|      0|    }
  581|       |
  582|     45|    unionobject *result = PyObject_GC_New(unionobject, &_PyUnion_Type);
  ------------------
  |  |  181|     45|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  583|     45|    if (result == NULL) {
  ------------------
  |  Branch (583:9): [True: 0, False: 45]
  ------------------
  584|      0|        goto error;
  585|      0|    }
  586|     45|    unionbuilder_finalize(ub);
  587|       |
  588|     45|    result->parameters = NULL;
  589|     45|    result->args = args;
  590|     45|    result->hashable_args = hashable_args;
  591|     45|    result->unhashable_args = unhashable_args;
  592|     45|    result->weakreflist = NULL;
  593|     45|    _PyObject_GC_TRACK(result);
  ------------------
  |  |  505|     45|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|     45|    return (PyObject*)result;
  595|      0|error:
  596|      0|    Py_XDECREF(args);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  597|      0|    Py_XDECREF(hashable_args);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|      0|    Py_XDECREF(unhashable_args);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  599|      0|    unionbuilder_finalize(ub);
  600|       |    return NULL;
  601|     45|}

_PyWeakref_GetWeakrefCount:
   43|    703|{
   44|    703|    if (!_PyType_SUPPORTS_WEAKREFS(Py_TYPE(obj))) {
  ------------------
  |  |  213|    703|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (44:9): [True: 0, False: 703]
  ------------------
   45|      0|        return 0;
   46|      0|    }
   47|       |
   48|    703|    LOCK_WEAKREFS(obj);
   49|    703|    Py_ssize_t count = 0;
   50|    703|    PyWeakReference *head = *GET_WEAKREFS_LISTPTR(obj);
  ------------------
  |  |   38|    703|        ((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
  ------------------
   51|  1.40k|    while (head != NULL) {
  ------------------
  |  Branch (51:12): [True: 703, False: 703]
  ------------------
   52|    703|        ++count;
   53|    703|        head = head->wr_next;
   54|    703|    }
   55|    703|    UNLOCK_WEAKREFS(obj);
   56|    703|    return count;
   57|    703|}
_PyWeakref_ClearRef:
  134|      8|{
  135|      8|    assert(self != NULL);
  ------------------
  |  Branch (135:5): [True: 8, False: 0]
  ------------------
  136|      8|    assert(PyWeakref_Check(self));
  ------------------
  |  Branch (136:5): [True: 0, False: 0]
  |  Branch (136:5): [True: 0, False: 0]
  |  Branch (136:5): [True: 8, False: 0]
  ------------------
  137|      8|    clear_weakref_lock_held(self, NULL);
  138|      8|}
PyWeakref_NewRef:
  928|  1.84k|{
  929|  1.84k|    return (PyObject *)get_or_create_weakref(&_PyWeakref_RefType, ob,
  930|  1.84k|                                             callback);
  931|  1.84k|}
PyWeakref_GetRef:
  959|     50|{
  960|     50|    if (ref == NULL) {
  ------------------
  |  Branch (960:9): [True: 0, False: 50]
  ------------------
  961|      0|        *pobj = NULL;
  962|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  963|      0|        return -1;
  964|      0|    }
  965|     50|    if (!PyWeakref_Check(ref)) {
  ------------------
  |  |   23|     50|        (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
  |  |  ------------------
  |  |  |  |   15|     50|#define PyWeakref_CheckRef(op) PyObject_TypeCheck((op), &_PyWeakref_RefType)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|    100|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 50, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
  |  |  ------------------
  |  |  |  |   19|      0|        (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   20|      0|         || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType))
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  966|      0|        *pobj = NULL;
  967|      0|        PyErr_SetString(PyExc_TypeError, "expected a weakref");
  968|      0|        return -1;
  969|      0|    }
  970|     50|    *pobj = _PyWeakref_GET_REF(ref);
  971|       |    return (*pobj != NULL);
  972|     50|}
PyObject_ClearWeakRefs:
 1016|   466k|{
 1017|   466k|    PyWeakReference **list;
 1018|       |
 1019|   466k|    if (object == NULL
  ------------------
  |  Branch (1019:9): [True: 0, False: 466k]
  ------------------
 1020|   466k|        || !_PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))
  ------------------
  |  |  213|   466k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   466k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   466k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1020:12): [True: 0, False: 466k]
  ------------------
 1021|   466k|        || Py_REFCNT(object) != 0)
  ------------------
  |  |  119|   466k|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   466k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   466k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1021:12): [True: 0, False: 466k]
  ------------------
 1022|      0|    {
 1023|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1024|      0|        return;
 1025|      0|    }
 1026|       |
 1027|   466k|    list = GET_WEAKREFS_LISTPTR(object);
  ------------------
  |  |   38|   466k|        ((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
  ------------------
 1028|   466k|    if (FT_ATOMIC_LOAD_PTR(*list) == NULL) {
  ------------------
  |  |  145|   466k|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
  |  Branch (1028:9): [True: 465k, False: 703]
  ------------------
 1029|       |        // Fast path for the common case
 1030|   465k|        return;
 1031|   465k|    }
 1032|       |
 1033|       |    /* Remove the callback-less basic and proxy references, which always appear
 1034|       |       at the head of the list.
 1035|       |    */
 1036|  1.40k|    for (int done = 0; !done;) {
  ------------------
  |  Branch (1036:24): [True: 703, False: 703]
  ------------------
 1037|    703|        LOCK_WEAKREFS(object);
 1038|    703|        if (*list != NULL && is_basic_ref_or_proxy(*list)) {
  ------------------
  |  Branch (1038:13): [True: 703, False: 0]
  |  Branch (1038:30): [True: 0, False: 703]
  ------------------
 1039|      0|            PyObject *callback;
 1040|      0|            clear_weakref_lock_held(*list, &callback);
 1041|      0|            assert(callback == NULL);
  ------------------
  |  Branch (1041:13): [True: 0, False: 0]
  ------------------
 1042|      0|        }
 1043|    703|        done = (*list == NULL) || !is_basic_ref_or_proxy(*list);
  ------------------
  |  Branch (1043:16): [True: 0, False: 703]
  |  Branch (1043:35): [True: 703, False: 0]
  ------------------
 1044|    703|        UNLOCK_WEAKREFS(object);
 1045|    703|    }
 1046|       |
 1047|       |    /* Deal with non-canonical (subtypes or refs with callbacks) references. */
 1048|    703|    Py_ssize_t num_weakrefs = _PyWeakref_GetWeakrefCount(object);
 1049|    703|    if (num_weakrefs == 0) {
  ------------------
  |  Branch (1049:9): [True: 0, False: 703]
  ------------------
 1050|      0|        return;
 1051|      0|    }
 1052|       |
 1053|    703|    PyObject *exc = PyErr_GetRaisedException();
 1054|    703|    PyObject *tuple = PyTuple_New(num_weakrefs * 2);
 1055|    703|    if (tuple == NULL) {
  ------------------
  |  Branch (1055:9): [True: 0, False: 703]
  ------------------
 1056|      0|        _PyWeakref_ClearWeakRefsNoCallbacks(object);
 1057|      0|        PyErr_FormatUnraisable("Exception ignored while "
 1058|      0|                               "clearing object weakrefs");
 1059|      0|        PyErr_SetRaisedException(exc);
 1060|      0|        return;
 1061|      0|    }
 1062|       |
 1063|    703|    Py_ssize_t num_items = 0;
 1064|  1.40k|    for (int done = 0; !done;) {
  ------------------
  |  Branch (1064:24): [True: 703, False: 703]
  ------------------
 1065|    703|        PyObject *callback = NULL;
 1066|    703|        LOCK_WEAKREFS(object);
 1067|    703|        PyWeakReference *cur = *list;
 1068|    703|        if (cur != NULL) {
  ------------------
  |  Branch (1068:13): [True: 703, False: 0]
  ------------------
 1069|    703|            clear_weakref_lock_held(cur, &callback);
 1070|    703|            if (_Py_TryIncref((PyObject *) cur)) {
  ------------------
  |  Branch (1070:17): [True: 703, False: 0]
  ------------------
 1071|    703|                assert(num_items / 2 < num_weakrefs);
  ------------------
  |  Branch (1071:17): [True: 703, False: 0]
  ------------------
 1072|    703|                PyTuple_SET_ITEM(tuple, num_items, (PyObject *) cur);
  ------------------
  |  |   40|    703|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|    703|                PyTuple_SET_ITEM(tuple, num_items + 1, callback);
  ------------------
  |  |   40|    703|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|    703|                num_items += 2;
 1075|    703|                callback = NULL;
 1076|    703|            }
 1077|    703|        }
 1078|    703|        done = (*list == NULL);
 1079|    703|        UNLOCK_WEAKREFS(object);
 1080|       |
 1081|    703|        Py_XDECREF(callback);
  ------------------
  |  |  524|    703|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1082|    703|    }
 1083|       |
 1084|  1.40k|    for (Py_ssize_t i = 0; i < num_items; i += 2) {
  ------------------
  |  Branch (1084:28): [True: 703, False: 703]
  ------------------
 1085|    703|        PyObject *callback = PyTuple_GET_ITEM(tuple, i + 1);
  ------------------
  |  |   29|    703|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    703|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1085:30): [True: 703, False: 0]
  ------------------
 1086|    703|        if (callback != NULL) {
  ------------------
  |  Branch (1086:13): [True: 703, False: 0]
  ------------------
 1087|    703|            PyObject *weakref = PyTuple_GET_ITEM(tuple, i);
  ------------------
  |  |   29|    703|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    703|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1087:33): [True: 703, False: 0]
  ------------------
 1088|      0|            handle_callback((PyWeakReference *)weakref, callback);
 1089|    703|        }
 1090|    703|    }
 1091|       |
 1092|    703|    Py_DECREF(tuple);
  ------------------
  |  |  430|    703|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1093|       |
 1094|    703|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (1094:5): [True: 703, False: 0]
  ------------------
 1095|    703|    PyErr_SetRaisedException(exc);
 1096|    703|}
weakrefobject.c:clear_weakref_lock_held:
   80|  1.47k|{
   81|  1.47k|    if (self->wr_object != Py_None) {
  ------------------
  |  |  616|  1.47k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (81:9): [True: 767, False: 711]
  ------------------
   82|    767|        PyWeakReference **list = GET_WEAKREFS_LISTPTR(self->wr_object);
  ------------------
  |  |   38|    767|        ((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
  ------------------
   83|    767|        if (*list == self) {
  ------------------
  |  Branch (83:13): [True: 740, False: 27]
  ------------------
   84|       |            /* If 'self' is the end of the list (and thus self->wr_next ==
   85|       |               NULL) then the weakref list itself (and thus the value of *list)
   86|       |               will end up being set to NULL. */
   87|    740|            FT_ATOMIC_STORE_PTR(*list, self->wr_next);
  ------------------
  |  |  146|    740|#define FT_ATOMIC_STORE_PTR(value, new_value) value = new_value
  ------------------
   88|    740|        }
   89|    767|        FT_ATOMIC_STORE_PTR(self->wr_object, Py_None);
  ------------------
  |  |  146|    767|#define FT_ATOMIC_STORE_PTR(value, new_value) value = new_value
  ------------------
   90|    767|        if (self->wr_prev != NULL) {
  ------------------
  |  Branch (90:13): [True: 27, False: 740]
  ------------------
   91|     27|            self->wr_prev->wr_next = self->wr_next;
   92|     27|        }
   93|    767|        if (self->wr_next != NULL) {
  ------------------
  |  Branch (93:13): [True: 3, False: 764]
  ------------------
   94|      3|            self->wr_next->wr_prev = self->wr_prev;
   95|      3|        }
   96|    767|        self->wr_prev = NULL;
   97|    767|        self->wr_next = NULL;
   98|    767|    }
   99|  1.47k|    if (callback != NULL) {
  ------------------
  |  Branch (99:9): [True: 1.47k, False: 8]
  ------------------
  100|  1.47k|        *callback = self->wr_callback;
  101|       |        self->wr_callback = NULL;
  102|  1.47k|    }
  103|  1.47k|}
weakrefobject.c:weakref_dealloc:
  142|    767|{
  143|    767|    PyObject_GC_UnTrack(self);
  144|    767|    clear_weakref(self);
  145|    767|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|    767|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    767|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|    767|}
weakrefobject.c:clear_weakref:
  108|    767|{
  109|    767|    PyWeakReference *self = _PyWeakref_CAST(op);
  ------------------
  |  |   46|    767|    (assert(PyWeakref_Check(op)), _Py_CAST(PyWeakReference*, (op)))
  |  |  ------------------
  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (109:29): [True: 0, False: 0]
  |  Branch (109:29): [True: 0, False: 0]
  |  Branch (109:29): [True: 767, False: 0]
  ------------------
  110|    767|    PyObject *callback = NULL;
  111|       |
  112|       |    // self->wr_object may be Py_None if the GC cleared the weakref, so lock
  113|       |    // using the pointer in the weakref.
  114|    767|    LOCK_WEAKREFS_FOR_WR(self);
  115|    767|    clear_weakref_lock_held(self, &callback);
  116|    767|    UNLOCK_WEAKREFS_FOR_WR(self);
  117|    767|    Py_XDECREF(callback);
  ------------------
  |  |  524|    767|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    767|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    767|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|    767|}
weakrefobject.c:weakref_hash:
  206|    191|{
  207|    191|    PyWeakReference *self = _PyWeakref_CAST(op);
  ------------------
  |  |   46|    191|    (assert(PyWeakref_Check(op)), _Py_CAST(PyWeakReference*, (op)))
  |  |  ------------------
  |  |  |  |   37|    191|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (207:29): [True: 0, False: 0]
  |  Branch (207:29): [True: 0, False: 0]
  |  Branch (207:29): [True: 191, False: 0]
  ------------------
  208|      0|    Py_hash_t hash;
  209|    191|    Py_BEGIN_CRITICAL_SECTION(self);
  ------------------
  |  |   51|    191|    {
  ------------------
  210|    191|    hash = weakref_hash_lock_held(self);
  211|    191|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    191|    }
  ------------------
  212|    191|    return hash;
  213|    191|}
weakrefobject.c:weakref_hash_lock_held:
  191|    191|{
  192|    191|    if (self->hash != -1)
  ------------------
  |  Branch (192:9): [True: 5, False: 186]
  ------------------
  193|      5|        return self->hash;
  194|    186|    PyObject* obj = _PyWeakref_GET_REF((PyObject*)self);
  195|    186|    if (obj == NULL) {
  ------------------
  |  Branch (195:9): [True: 0, False: 186]
  ------------------
  196|      0|        PyErr_SetString(PyExc_TypeError, "weak object has gone away");
  197|      0|        return -1;
  198|      0|    }
  199|    186|    self->hash = PyObject_Hash(obj);
  200|    186|    Py_DECREF(obj);
  ------------------
  |  |  430|    186|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    186|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    186|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|    186|    return self->hash;
  202|    186|}
weakrefobject.c:gc_traverse:
  151|  20.2k|{
  152|  20.2k|    PyWeakReference *self = _PyWeakref_CAST(op);
  ------------------
  |  |   46|  20.2k|    (assert(PyWeakref_Check(op)), _Py_CAST(PyWeakReference*, (op)))
  |  |  ------------------
  |  |  |  |   37|  20.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (152:29): [True: 0, False: 0]
  |  Branch (152:29): [True: 0, False: 0]
  |  Branch (152:29): [True: 20.2k, False: 0]
  ------------------
  153|  20.2k|    Py_VISIT(self->wr_callback);
  ------------------
  |  |  194|  20.2k|    do {                                                                \
  |  |  195|  20.2k|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 1.31k, False: 18.8k]
  |  |  ------------------
  |  |  196|  1.31k|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|  1.31k|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 1.31k]
  |  |  ------------------
  |  |  198|  1.31k|                return vret;                                            \
  |  |  199|  1.31k|        }                                                               \
  |  |  200|  20.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 20.2k]
  |  |  ------------------
  ------------------
  154|  20.2k|    return 0;
  155|  20.2k|}
weakrefobject.c:weakref___init__:
  481|    705|{
  482|    705|    PyObject *tmp;
  483|       |
  484|    705|    if (!_PyArg_NoKeywords("ref", kwargs))
  ------------------
  |  |   25|    705|    ((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
  |  |  ------------------
  |  |  |  Branch (25:6): [True: 705, False: 0]
  |  |  |  Branch (25:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  485|      0|        return -1;
  486|       |
  487|    705|    if (parse_weakref_init_args("__init__", args, kwargs, &tmp, &tmp))
  ------------------
  |  Branch (487:9): [True: 705, False: 0]
  ------------------
  488|    705|        return 0;
  489|      0|    else
  490|      0|        return -1;
  491|    705|}
weakrefobject.c:parse_weakref_init_args:
  465|  1.41k|{
  466|  1.41k|    return PyArg_UnpackTuple(args, funcname, 1, 2, obp, callbackp);
  467|  1.41k|}
weakrefobject.c:weakref___new__:
  471|    705|{
  472|    705|    PyObject *ob, *callback = NULL;
  473|    705|    if (parse_weakref_init_args("__new__", args, kwargs, &ob, &callback)) {
  ------------------
  |  Branch (473:9): [True: 705, False: 0]
  ------------------
  474|    705|        return (PyObject *)get_or_create_weakref(type, ob, callback);
  475|    705|    }
  476|      0|    return NULL;
  477|    705|}
weakrefobject.c:get_or_create_weakref:
  412|  2.54k|{
  413|  2.54k|    if (!_PyType_SUPPORTS_WEAKREFS(Py_TYPE(obj))) {
  ------------------
  |  |  213|  2.54k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  2.54k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.54k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (413:9): [True: 0, False: 2.54k]
  ------------------
  414|      0|        PyErr_Format(PyExc_TypeError,
  415|      0|                     "cannot create weak reference to '%s' object",
  416|      0|                     Py_TYPE(obj)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      0|        return NULL;
  418|      0|    }
  419|  2.54k|    if (callback == Py_None) {
  ------------------
  |  |  616|  2.54k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (419:9): [True: 0, False: 2.54k]
  ------------------
  420|      0|        callback = NULL;
  421|      0|    }
  422|  2.54k|    if (callback != NULL && !PyCallable_Check(callback)) {
  ------------------
  |  Branch (422:9): [True: 843, False: 1.70k]
  |  Branch (422:29): [True: 0, False: 843]
  ------------------
  423|      0|        PyErr_Format(PyExc_TypeError,
  424|      0|                     "callback must be callable or None, not '%T'",
  425|      0|                     callback);
  426|      0|        return NULL;
  427|      0|    }
  428|       |
  429|  2.54k|    PyWeakReference **list = GET_WEAKREFS_LISTPTR(obj);
  ------------------
  |  |   38|  2.54k|        ((PyWeakReference **) _PyObject_GET_WEAKREFS_LISTPTR(o))
  ------------------
  430|  2.54k|    if ((type == &_PyWeakref_RefType) ||
  ------------------
  |  Branch (430:9): [True: 2.18k, False: 367]
  ------------------
  431|    367|        (type == &_PyWeakref_ProxyType) ||
  ------------------
  |  Branch (431:9): [True: 0, False: 367]
  ------------------
  432|    367|        (type == &_PyWeakref_CallableProxyType))
  ------------------
  |  Branch (432:9): [True: 0, False: 367]
  ------------------
  433|  2.18k|    {
  434|  2.18k|        LOCK_WEAKREFS(obj);
  435|  2.18k|        PyWeakReference *basic_ref = try_reuse_basic_ref(*list, type, callback);
  436|  2.18k|        if (basic_ref != NULL) {
  ------------------
  |  Branch (436:13): [True: 291, False: 1.88k]
  ------------------
  437|    291|            UNLOCK_WEAKREFS(obj);
  438|    291|            return basic_ref;
  439|    291|        }
  440|  1.88k|        PyWeakReference *newref = allocate_weakref(type, obj, callback);
  441|  1.88k|        if (newref == NULL) {
  ------------------
  |  Branch (441:13): [True: 0, False: 1.88k]
  ------------------
  442|      0|            UNLOCK_WEAKREFS(obj);
  443|      0|            return NULL;
  444|      0|        }
  445|  1.88k|        insert_weakref(newref, list);
  446|  1.88k|        UNLOCK_WEAKREFS(obj);
  447|  1.88k|        return newref;
  448|  1.88k|    }
  449|    367|    else {
  450|       |        // We may not be able to safely allocate inside the lock
  451|    367|        PyWeakReference *newref = allocate_weakref(type, obj, callback);
  452|    367|        if (newref == NULL) {
  ------------------
  |  Branch (452:13): [True: 0, False: 367]
  ------------------
  453|      0|            return NULL;
  454|      0|        }
  455|    367|        LOCK_WEAKREFS(obj);
  456|    367|        insert_weakref(newref, list);
  457|    367|        UNLOCK_WEAKREFS(obj);
  458|    367|        return newref;
  459|    367|    }
  460|  2.54k|}
weakrefobject.c:try_reuse_basic_ref:
  332|  2.18k|{
  333|  2.18k|    if (callback != NULL) {
  ------------------
  |  Branch (333:9): [True: 476, False: 1.70k]
  ------------------
  334|    476|        return NULL;
  335|    476|    }
  336|       |
  337|  1.70k|    PyWeakReference *ref, *proxy;
  338|  1.70k|    get_basic_refs(list, &ref, &proxy);
  339|       |
  340|  1.70k|    PyWeakReference *cand = NULL;
  341|  1.70k|    if (type == &_PyWeakref_RefType) {
  ------------------
  |  Branch (341:9): [True: 1.70k, False: 0]
  ------------------
  342|  1.70k|        cand = ref;
  343|  1.70k|    }
  344|  1.70k|    if ((type == &_PyWeakref_ProxyType) ||
  ------------------
  |  Branch (344:9): [True: 0, False: 1.70k]
  ------------------
  345|  1.70k|        (type == &_PyWeakref_CallableProxyType)) {
  ------------------
  |  Branch (345:9): [True: 0, False: 1.70k]
  ------------------
  346|      0|        cand = proxy;
  347|      0|    }
  348|       |
  349|  1.70k|    if (cand != NULL && _Py_TryIncref((PyObject *) cand)) {
  ------------------
  |  Branch (349:9): [True: 291, False: 1.41k]
  |  Branch (349:25): [True: 291, False: 0]
  ------------------
  350|    291|        return cand;
  351|    291|    }
  352|  1.41k|    return NULL;
  353|  1.70k|}
weakrefobject.c:get_basic_refs:
  279|  3.96k|{
  280|  3.96k|    *refp = NULL;
  281|  3.96k|    *proxyp = NULL;
  282|       |
  283|  3.96k|    if (head != NULL && head->wr_callback == NULL) {
  ------------------
  |  Branch (283:9): [True: 431, False: 3.52k]
  |  Branch (283:25): [True: 431, False: 0]
  ------------------
  284|       |        /* We need to be careful that the "basic refs" aren't
  285|       |           subclasses of the main types.  That complicates this a
  286|       |           little. */
  287|    431|        if (PyWeakref_CheckRefExact(head)) {
  ------------------
  |  |   17|    431|        Py_IS_TYPE((op), &_PyWeakref_RefType)
  |  |  ------------------
  |  |  |  |  215|    431|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    431|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    431|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 431, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|    431|            *refp = head;
  289|    431|            head = head->wr_next;
  290|    431|        }
  291|    431|        if (head != NULL
  ------------------
  |  Branch (291:13): [True: 64, False: 367]
  ------------------
  292|     64|            && head->wr_callback == NULL
  ------------------
  |  Branch (292:16): [True: 0, False: 64]
  ------------------
  293|      0|            && PyWeakref_CheckProxy(head)) {
  ------------------
  |  |   19|      0|        (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   20|      0|         || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType))
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|      0|            *proxyp = head;
  295|       |            /* head = head->wr_next; */
  296|      0|        }
  297|    431|    }
  298|  3.96k|}
weakrefobject.c:allocate_weakref:
  401|  2.25k|{
  402|  2.25k|    PyWeakReference *newref = (PyWeakReference *) type->tp_alloc(type, 0);
  403|  2.25k|    if (newref == NULL) {
  ------------------
  |  Branch (403:9): [True: 0, False: 2.25k]
  ------------------
  404|      0|        return NULL;
  405|      0|    }
  406|  2.25k|    init_weakref(newref, obj, callback);
  407|  2.25k|    return newref;
  408|  2.25k|}
weakrefobject.c:init_weakref:
   63|  2.25k|{
   64|  2.25k|    self->hash = -1;
   65|  2.25k|    self->wr_object = ob;
   66|  2.25k|    self->wr_prev = NULL;
   67|  2.25k|    self->wr_next = NULL;
   68|  2.25k|    self->wr_callback = Py_XNewRef(callback);
  ------------------
  |  |  551|  2.25k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|  2.25k|    self->vectorcall = weakref_vectorcall;
   70|       |#ifdef Py_GIL_DISABLED
   71|       |    self->weakrefs_lock = &WEAKREF_LIST_LOCK(ob);
   72|       |    _PyObject_SetMaybeWeakref(ob);
   73|       |    _PyObject_SetMaybeWeakref((PyObject *)self);
   74|       |#endif
   75|  2.25k|}
weakrefobject.c:weakref_vectorcall:
  174|    398|{
  175|    398|    if (!_PyArg_NoKwnames("weakref", kwnames)) {
  ------------------
  |  |   15|    398|    ((kwnames) == NULL || _PyArg_NoKwnames((funcname), (kwnames)))
  |  |  ------------------
  |  |  |  Branch (15:6): [True: 398, False: 0]
  |  |  |  Branch (15:27): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  176|      0|        return NULL;
  177|      0|    }
  178|    398|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|    398|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
  179|    398|    if (!_PyArg_CheckPositional("weakref", nargs, 0, 0)) {
  ------------------
  |  |   31|    398|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 398, False: 0]
  |  |  |  Branch (31:27): [True: 398, False: 0]
  |  |  ------------------
  |  |   32|    398|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  180|      0|        return NULL;
  181|      0|    }
  182|    398|    PyObject *obj = _PyWeakref_GET_REF(self);
  183|    398|    if (obj == NULL) {
  ------------------
  |  Branch (183:9): [True: 0, False: 398]
  ------------------
  184|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  185|      0|    }
  186|    398|    return obj;
  187|    398|}
weakrefobject.c:insert_weakref:
  376|  2.25k|{
  377|  2.25k|    PyWeakReference *ref, *proxy;
  378|  2.25k|    get_basic_refs(*list, &ref, &proxy);
  379|       |
  380|  2.25k|    PyWeakReference *prev;
  381|  2.25k|    if (is_basic_ref(newref)) {
  ------------------
  |  Branch (381:9): [True: 1.41k, False: 843]
  ------------------
  382|  1.41k|        prev = NULL;
  383|  1.41k|    }
  384|    843|    else if (is_basic_proxy(newref)) {
  ------------------
  |  Branch (384:14): [True: 0, False: 843]
  ------------------
  385|      0|        prev = ref;
  386|      0|    }
  387|    843|    else {
  388|    843|        prev = (proxy == NULL) ? ref : proxy;
  ------------------
  |  Branch (388:16): [True: 843, False: 0]
  ------------------
  389|    843|    }
  390|       |
  391|  2.25k|    if (prev == NULL) {
  ------------------
  |  Branch (391:9): [True: 2.11k, False: 140]
  ------------------
  392|  2.11k|        insert_head(newref, list);
  393|  2.11k|    }
  394|    140|    else {
  395|    140|        insert_after(newref, prev);
  396|    140|    }
  397|  2.25k|}
weakrefobject.c:is_basic_ref:
  357|  3.66k|{
  358|  3.66k|    return (ref->wr_callback == NULL) && PyWeakref_CheckRefExact(ref);
  ------------------
  |  |   17|  1.41k|        Py_IS_TYPE((op), &_PyWeakref_RefType)
  |  |  ------------------
  |  |  |  |  215|  1.41k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.41k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.41k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.41k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (358:12): [True: 1.41k, False: 2.24k]
  ------------------
  359|  3.66k|}
weakrefobject.c:is_basic_proxy:
  363|  2.24k|{
  364|  2.24k|    return (proxy->wr_callback == NULL) && PyWeakref_CheckProxy(proxy);
  ------------------
  |  |   19|      0|        (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   20|      0|         || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType))
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (364:12): [True: 0, False: 2.24k]
  ------------------
  365|  2.24k|}
weakrefobject.c:insert_head:
  316|  2.11k|{
  317|  2.11k|    PyWeakReference *next = *list;
  318|       |
  319|  2.11k|    newref->wr_prev = NULL;
  320|  2.11k|    newref->wr_next = next;
  321|  2.11k|    if (next != NULL)
  ------------------
  |  Branch (321:9): [True: 0, False: 2.11k]
  ------------------
  322|      0|        next->wr_prev = newref;
  323|  2.11k|    *list = newref;
  324|  2.11k|}
weakrefobject.c:insert_after:
  303|    140|{
  304|    140|    newref->wr_prev = prev;
  305|    140|    newref->wr_next = prev->wr_next;
  306|    140|    if (prev->wr_next != NULL)
  ------------------
  |  Branch (306:9): [True: 62, False: 78]
  ------------------
  307|     62|        prev->wr_next->wr_prev = newref;
  308|    140|    prev->wr_next = newref;
  309|    140|}
weakrefobject.c:is_basic_ref_or_proxy:
  369|  1.40k|{
  370|  1.40k|    return is_basic_ref(wr) || is_basic_proxy(wr);
  ------------------
  |  Branch (370:12): [True: 0, False: 1.40k]
  |  Branch (370:32): [True: 0, False: 1.40k]
  ------------------
  371|  1.40k|}
weakrefobject.c:handle_callback:
  996|    703|{
  997|    703|    PyObject *cbresult = PyObject_CallOneArg(callback, (PyObject *)ref);
  998|       |
  999|    703|    if (cbresult == NULL) {
  ------------------
  |  Branch (999:9): [True: 0, False: 703]
  ------------------
 1000|      0|        PyErr_FormatUnraisable("Exception ignored while "
 1001|      0|                               "calling weakref callback %R", callback);
 1002|      0|    }
 1003|    703|    else {
 1004|    703|        Py_DECREF(cbresult);
  ------------------
  |  |  430|    703|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    703|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    703|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1005|    703|    }
 1006|    703|}

_PyPegen_dummy_name:
   14|  72.6k|{
   15|  72.6k|    return &_PyRuntime.parser.dummy_name;
   16|  72.6k|}
_PyPegen_singleton_seq:
   21|   243k|{
   22|   243k|    assert(a != NULL);
  ------------------
  |  Branch (22:5): [True: 243k, False: 0]
  ------------------
   23|   243k|    asdl_seq *seq = (asdl_seq*)_Py_asdl_generic_seq_new(1, p->arena);
   24|   243k|    if (!seq) {
  ------------------
  |  Branch (24:9): [True: 0, False: 243k]
  ------------------
   25|      0|        return NULL;
   26|      0|    }
   27|   243k|    asdl_seq_SET_UNTYPED(seq, 0, a);
  ------------------
  |  |  106|   243k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   243k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   28|   243k|    return seq;
   29|   243k|}
_PyPegen_seq_insert_in_front:
   34|   569k|{
   35|   569k|    assert(a != NULL);
  ------------------
  |  Branch (35:5): [True: 569k, False: 0]
  ------------------
   36|   569k|    if (!seq) {
  ------------------
  |  Branch (36:9): [True: 34.4k, False: 535k]
  ------------------
   37|  34.4k|        return _PyPegen_singleton_seq(p, a);
   38|  34.4k|    }
   39|       |
   40|   535k|    asdl_seq *new_seq = (asdl_seq*)_Py_asdl_generic_seq_new(asdl_seq_LEN(seq) + 1, p->arena);
  ------------------
  |  |   83|   535k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.07M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 535k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   41|   535k|    if (!new_seq) {
  ------------------
  |  Branch (41:9): [True: 0, False: 535k]
  ------------------
   42|      0|        return NULL;
   43|      0|    }
   44|       |
   45|   535k|    asdl_seq_SET_UNTYPED(new_seq, 0, a);
  ------------------
  |  |  106|   535k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   535k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   46|  1.18M|    for (Py_ssize_t i = 1, l = asdl_seq_LEN(new_seq); i < l; i++) {
  ------------------
  |  |   83|   535k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.07M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 535k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (46:55): [True: 650k, False: 535k]
  ------------------
   47|   650k|        asdl_seq_SET_UNTYPED(new_seq, i, asdl_seq_GET_UNTYPED(seq, i - 1));
  ------------------
  |  |  106|   650k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   650k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   48|   650k|    }
   49|   535k|    return new_seq;
   50|   535k|}
_PyPegen_seq_flatten:
   87|  29.5k|{
   88|  29.5k|    Py_ssize_t flattened_seq_size = _get_flattened_seq_size(seqs);
   89|  29.5k|    assert(flattened_seq_size > 0);
  ------------------
  |  Branch (89:5): [True: 29.5k, False: 0]
  ------------------
   90|       |
   91|  29.5k|    asdl_seq *flattened_seq = (asdl_seq*)_Py_asdl_generic_seq_new(flattened_seq_size, p->arena);
   92|  29.5k|    if (!flattened_seq) {
  ------------------
  |  Branch (92:9): [True: 0, False: 29.5k]
  ------------------
   93|      0|        return NULL;
   94|      0|    }
   95|       |
   96|  29.5k|    int flattened_seq_idx = 0;
   97|   192k|    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seqs); i < l; i++) {
  ------------------
  |  |   83|  29.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  59.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 29.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (97:52): [True: 163k, False: 29.5k]
  ------------------
   98|   163k|        asdl_seq *inner_seq = asdl_seq_GET_UNTYPED(seqs, i);
  ------------------
  |  |   81|   163k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   163k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   99|   351k|        for (Py_ssize_t j = 0, li = asdl_seq_LEN(inner_seq); j < li; j++) {
  ------------------
  |  |   83|   163k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   326k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 163k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (99:62): [True: 187k, False: 163k]
  ------------------
  100|   187k|            asdl_seq_SET_UNTYPED(flattened_seq, flattened_seq_idx++, asdl_seq_GET_UNTYPED(inner_seq, j));
  ------------------
  |  |  106|   187k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   187k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  101|   187k|        }
  102|   163k|    }
  103|  29.5k|    assert(flattened_seq_idx == flattened_seq_size);
  ------------------
  |  Branch (103:5): [True: 29.5k, False: 0]
  ------------------
  104|       |
  105|  29.5k|    return flattened_seq;
  106|  29.5k|}
_PyPegen_seq_last_item:
  110|    138|{
  111|    138|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|    138|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    276|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 138]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|    138|    return asdl_seq_GET_UNTYPED(seq, len - 1);
  ------------------
  |  |   81|    138|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    138|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  113|    138|}
_PyPegen_seq_first_item:
  117|     74|{
  118|     74|    return asdl_seq_GET_UNTYPED(seq, 0);
  ------------------
  |  |   81|     74|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     74|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  119|     74|}
_PyPegen_join_names_with_dot:
  124|  9.40k|{
  125|  9.40k|    assert(first_name != NULL && second_name != NULL);
  ------------------
  |  Branch (125:5): [True: 9.40k, False: 0]
  |  Branch (125:5): [True: 9.40k, False: 0]
  ------------------
  126|  9.40k|    PyObject *uni = PyUnicode_FromFormat("%U.%U",
  127|  9.40k|            first_name->v.Name.id, second_name->v.Name.id);
  128|  9.40k|    if (!uni) {
  ------------------
  |  Branch (128:9): [True: 0, False: 9.40k]
  ------------------
  129|      0|        return NULL;
  130|      0|    }
  131|  9.40k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  132|  9.40k|    _PyUnicode_InternImmortal(interp, &uni);
  133|  9.40k|    if (_PyArena_AddPyObject(p->arena, uni) < 0) {
  ------------------
  |  Branch (133:9): [True: 0, False: 9.40k]
  ------------------
  134|      0|        Py_DECREF(uni);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|      0|        return NULL;
  136|      0|    }
  137|       |
  138|  9.40k|    return _PyAST_Name(uni, Load, EXTRA_EXPR(first_name, second_name));
  ------------------
  |  |  306|  9.40k|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  139|  9.40k|}
_PyPegen_seq_count_dots:
  144|  5.44k|{
  145|  5.44k|    int number_of_dots = 0;
  146|  7.28k|    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seq); i < l; i++) {
  ------------------
  |  |   83|  5.44k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  10.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (146:51): [True: 1.84k, False: 5.44k]
  ------------------
  147|  1.84k|        Token *current_expr = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|  1.84k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  148|  1.84k|        switch (current_expr->type) {
  149|    868|            case ELLIPSIS:
  ------------------
  |  |   68|    868|#define ELLIPSIS        52
  ------------------
  |  Branch (149:13): [True: 868, False: 980]
  ------------------
  150|    868|                number_of_dots += 3;
  151|    868|                break;
  152|    980|            case DOT:
  ------------------
  |  |   39|    980|#define DOT             23
  ------------------
  |  Branch (152:13): [True: 980, False: 868]
  ------------------
  153|    980|                number_of_dots += 1;
  154|    980|                break;
  155|      0|            default:
  ------------------
  |  Branch (155:13): [True: 0, False: 1.84k]
  ------------------
  156|      0|                Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  157|  1.84k|        }
  158|  1.84k|    }
  159|       |
  160|  5.44k|    return number_of_dots;
  161|  5.44k|}
_PyPegen_alias_for_star:
  166|     30|                        int end_col_offset, PyArena *arena) {
  167|     30|    PyObject *str = PyUnicode_InternFromString("*");
  168|     30|    if (!str) {
  ------------------
  |  Branch (168:9): [True: 0, False: 30]
  ------------------
  169|      0|        return NULL;
  170|      0|    }
  171|     30|    if (_PyArena_AddPyObject(p->arena, str) < 0) {
  ------------------
  |  Branch (171:9): [True: 0, False: 30]
  ------------------
  172|      0|        Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|      0|        return NULL;
  174|      0|    }
  175|     30|    return _PyAST_alias(str, NULL, lineno, col_offset, end_lineno, end_col_offset, arena);
  176|     30|}
_PyPegen_map_names_to_ids:
  181|  1.92k|{
  182|  1.92k|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  1.92k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.85k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.92k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|  1.92k|    assert(len > 0);
  ------------------
  |  Branch (183:5): [True: 1.92k, False: 0]
  ------------------
  184|       |
  185|  1.92k|    asdl_identifier_seq *new_seq = _Py_asdl_identifier_seq_new(len, p->arena);
  186|  1.92k|    if (!new_seq) {
  ------------------
  |  Branch (186:9): [True: 0, False: 1.92k]
  ------------------
  187|      0|        return NULL;
  188|      0|    }
  189|  5.70k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (189:28): [True: 3.78k, False: 1.92k]
  ------------------
  190|  3.78k|        expr_ty e = asdl_seq_GET(seq, i);
  ------------------
  |  |   82|  3.78k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  3.78k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  191|  3.78k|        asdl_seq_SET(new_seq, i, e->v.Name.id);
  ------------------
  |  |   94|  3.78k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.78k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  192|  3.78k|    }
  193|  1.92k|    return new_seq;
  194|  1.92k|}
_PyPegen_cmpop_expr_pair:
  199|   102k|{
  200|   102k|    assert(expr != NULL);
  ------------------
  |  Branch (200:5): [True: 102k, False: 0]
  ------------------
  201|   102k|    CmpopExprPair *a = _PyArena_Malloc(p->arena, sizeof(CmpopExprPair));
  202|   102k|    if (!a) {
  ------------------
  |  Branch (202:9): [True: 0, False: 102k]
  ------------------
  203|      0|        return NULL;
  204|      0|    }
  205|   102k|    a->cmpop = cmpop;
  206|   102k|    a->expr = expr;
  207|   102k|    return a;
  208|   102k|}
_PyPegen_get_cmpops:
  212|  32.6k|{
  213|  32.6k|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  32.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  65.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 32.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|  32.6k|    assert(len > 0);
  ------------------
  |  Branch (214:5): [True: 32.6k, False: 0]
  ------------------
  215|       |
  216|  32.6k|    asdl_int_seq *new_seq = _Py_asdl_int_seq_new(len, p->arena);
  217|  32.6k|    if (!new_seq) {
  ------------------
  |  Branch (217:9): [True: 0, False: 32.6k]
  ------------------
  218|      0|        return NULL;
  219|      0|    }
  220|   134k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (220:28): [True: 101k, False: 32.6k]
  ------------------
  221|   101k|        CmpopExprPair *pair = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|   101k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   101k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  222|   101k|        asdl_seq_SET(new_seq, i, pair->cmpop);
  ------------------
  |  |   94|   101k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   101k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  223|   101k|    }
  224|  32.6k|    return new_seq;
  225|  32.6k|}
_PyPegen_get_exprs:
  229|  32.6k|{
  230|  32.6k|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  32.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  65.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 32.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|  32.6k|    assert(len > 0);
  ------------------
  |  Branch (231:5): [True: 32.6k, False: 0]
  ------------------
  232|       |
  233|  32.6k|    asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(len, p->arena);
  234|  32.6k|    if (!new_seq) {
  ------------------
  |  Branch (234:9): [True: 0, False: 32.6k]
  ------------------
  235|      0|        return NULL;
  236|      0|    }
  237|   134k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (237:28): [True: 101k, False: 32.6k]
  ------------------
  238|   101k|        CmpopExprPair *pair = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|   101k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   101k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  239|   101k|        asdl_seq_SET(new_seq, i, pair->expr);
  ------------------
  |  |   94|   101k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   101k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  240|   101k|    }
  241|  32.6k|    return new_seq;
  242|  32.6k|}
_PyPegen_set_expr_context:
  321|   603k|{
  322|   603k|    assert(expr != NULL);
  ------------------
  |  Branch (322:5): [True: 603k, False: 0]
  ------------------
  323|       |
  324|   603k|    expr_ty new = NULL;
  325|   603k|    switch (expr->kind) {
  326|   555k|        case Name_kind:
  ------------------
  |  Branch (326:9): [True: 555k, False: 48.0k]
  ------------------
  327|   555k|            new = _set_name_context(p, expr, ctx);
  328|   555k|            break;
  329|  5.72k|        case Tuple_kind:
  ------------------
  |  Branch (329:9): [True: 5.72k, False: 598k]
  ------------------
  330|  5.72k|            new = _set_tuple_context(p, expr, ctx);
  331|  5.72k|            break;
  332|  2.06k|        case List_kind:
  ------------------
  |  Branch (332:9): [True: 2.06k, False: 601k]
  ------------------
  333|  2.06k|            new = _set_list_context(p, expr, ctx);
  334|  2.06k|            break;
  335|  9.52k|        case Subscript_kind:
  ------------------
  |  Branch (335:9): [True: 9.52k, False: 594k]
  ------------------
  336|  9.52k|            new = _set_subscript_context(p, expr, ctx);
  337|  9.52k|            break;
  338|  30.6k|        case Attribute_kind:
  ------------------
  |  Branch (338:9): [True: 30.6k, False: 573k]
  ------------------
  339|  30.6k|            new = _set_attribute_context(p, expr, ctx);
  340|  30.6k|            break;
  341|     82|        case Starred_kind:
  ------------------
  |  Branch (341:9): [True: 82, False: 603k]
  ------------------
  342|     82|            new = _set_starred_context(p, expr, ctx);
  343|     82|            break;
  344|      0|        default:
  ------------------
  |  Branch (344:9): [True: 0, False: 603k]
  ------------------
  345|      0|            new = expr;
  346|   603k|    }
  347|   603k|    return new;
  348|   603k|}
_PyPegen_make_target:
  354|   801k|{
  355|   801k|    assert(expr != NULL);
  ------------------
  |  Branch (355:5): [True: 801k, False: 0]
  ------------------
  356|   801k|    assert(targets_type != FOR_TARGETS);
  ------------------
  |  Branch (356:5): [True: 801k, False: 0]
  ------------------
  357|   801k|    if (_PyPegen_get_invalid_target(expr, targets_type) != NULL) {
  ------------------
  |  Branch (357:9): [True: 263k, False: 537k]
  ------------------
  358|   263k|        return NULL;
  359|   263k|    }
  360|   537k|    return _PyPegen_set_expr_context(
  361|   537k|        p, expr, targets_type == DEL_TARGETS ? Del : Store);
  ------------------
  |  Branch (361:18): [True: 8.08k, False: 529k]
  ------------------
  362|   801k|}
_PyPegen_key_value_pair:
  367|  10.5k|{
  368|  10.5k|    KeyValuePair *a = _PyArena_Malloc(p->arena, sizeof(KeyValuePair));
  369|  10.5k|    if (!a) {
  ------------------
  |  Branch (369:9): [True: 0, False: 10.5k]
  ------------------
  370|      0|        return NULL;
  371|      0|    }
  372|  10.5k|    a->key = key;
  373|  10.5k|    a->value = value;
  374|  10.5k|    return a;
  375|  10.5k|}
_PyPegen_get_keys:
  380|  2.28k|{
  381|  2.28k|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  2.28k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.56k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.60k, False: 672]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  382|  2.28k|    asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(len, p->arena);
  383|  2.28k|    if (!new_seq) {
  ------------------
  |  Branch (383:9): [True: 0, False: 2.28k]
  ------------------
  384|      0|        return NULL;
  385|      0|    }
  386|  4.01k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (386:28): [True: 1.73k, False: 2.28k]
  ------------------
  387|  1.73k|        KeyValuePair *pair = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|  1.73k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  388|  1.73k|        asdl_seq_SET(new_seq, i, pair->key);
  ------------------
  |  |   94|  1.73k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  389|  1.73k|    }
  390|  2.28k|    return new_seq;
  391|  2.28k|}
_PyPegen_get_values:
  396|  2.28k|{
  397|  2.28k|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  2.28k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.56k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.60k, False: 672]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  398|  2.28k|    asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(len, p->arena);
  399|  2.28k|    if (!new_seq) {
  ------------------
  |  Branch (399:9): [True: 0, False: 2.28k]
  ------------------
  400|      0|        return NULL;
  401|      0|    }
  402|  4.01k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (402:28): [True: 1.73k, False: 2.28k]
  ------------------
  403|  1.73k|        KeyValuePair *pair = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|  1.73k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  404|  1.73k|        asdl_seq_SET(new_seq, i, pair->value);
  ------------------
  |  |   94|  1.73k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  405|  1.73k|    }
  406|  2.28k|    return new_seq;
  407|  2.28k|}
_PyPegen_key_pattern_pair:
  412|  5.03k|{
  413|  5.03k|    KeyPatternPair *a = _PyArena_Malloc(p->arena, sizeof(KeyPatternPair));
  414|  5.03k|    if (!a) {
  ------------------
  |  Branch (414:9): [True: 0, False: 5.03k]
  ------------------
  415|      0|        return NULL;
  416|      0|    }
  417|  5.03k|    a->key = key;
  418|  5.03k|    a->pattern = pattern;
  419|  5.03k|    return a;
  420|  5.03k|}
_PyPegen_get_pattern_keys:
  425|    307|{
  426|    307|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|    307|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    614|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 307]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|    307|    asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(len, p->arena);
  428|    307|    if (!new_seq) {
  ------------------
  |  Branch (428:9): [True: 0, False: 307]
  ------------------
  429|      0|        return NULL;
  430|      0|    }
  431|  1.05k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (431:28): [True: 749, False: 307]
  ------------------
  432|    749|        KeyPatternPair *pair = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|    749|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    749|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  433|    749|        asdl_seq_SET(new_seq, i, pair->key);
  ------------------
  |  |   94|    749|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    749|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  434|    749|    }
  435|    307|    return new_seq;
  436|    307|}
_PyPegen_get_patterns:
  441|    307|{
  442|    307|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|    307|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    614|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 307]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  443|    307|    asdl_pattern_seq *new_seq = _Py_asdl_pattern_seq_new(len, p->arena);
  444|    307|    if (!new_seq) {
  ------------------
  |  Branch (444:9): [True: 0, False: 307]
  ------------------
  445|      0|        return NULL;
  446|      0|    }
  447|  1.05k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (447:28): [True: 749, False: 307]
  ------------------
  448|    749|        KeyPatternPair *pair = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|    749|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    749|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  449|    749|        asdl_seq_SET(new_seq, i, pair->pattern);
  ------------------
  |  |   94|    749|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    749|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  450|    749|    }
  451|    307|    return new_seq;
  452|    307|}
_PyPegen_name_default_pair:
  457|  57.7k|{
  458|  57.7k|    NameDefaultPair *a = _PyArena_Malloc(p->arena, sizeof(NameDefaultPair));
  459|  57.7k|    if (!a) {
  ------------------
  |  Branch (459:9): [True: 0, False: 57.7k]
  ------------------
  460|      0|        return NULL;
  461|      0|    }
  462|  57.7k|    a->arg = _PyPegen_add_type_comment_to_arg(p, arg, tc);
  463|  57.7k|    if (!a->arg) {
  ------------------
  |  Branch (463:9): [True: 3, False: 57.7k]
  ------------------
  464|      3|        return NULL;
  465|      3|    }
  466|  57.7k|    a->value = value;
  467|  57.7k|    return a;
  468|  57.7k|}
_PyPegen_slash_with_default:
  473|  4.08k|{
  474|  4.08k|    SlashWithDefault *a = _PyArena_Malloc(p->arena, sizeof(SlashWithDefault));
  475|  4.08k|    if (!a) {
  ------------------
  |  Branch (475:9): [True: 0, False: 4.08k]
  ------------------
  476|      0|        return NULL;
  477|      0|    }
  478|  4.08k|    a->plain_names = plain_names;
  479|  4.08k|    a->names_with_defaults = names_with_defaults;
  480|  4.08k|    return a;
  481|  4.08k|}
_PyPegen_star_etc:
  486|  11.2k|{
  487|  11.2k|    StarEtc *a = _PyArena_Malloc(p->arena, sizeof(StarEtc));
  488|  11.2k|    if (!a) {
  ------------------
  |  Branch (488:9): [True: 0, False: 11.2k]
  ------------------
  489|      0|        return NULL;
  490|      0|    }
  491|  11.2k|    a->vararg = vararg;
  492|  11.2k|    a->kwonlyargs = kwonlyargs;
  493|  11.2k|    a->kwarg = kwarg;
  494|  11.2k|    return a;
  495|  11.2k|}
_PyPegen_join_sequences:
  499|  16.6k|{
  500|  16.6k|    Py_ssize_t first_len = asdl_seq_LEN(a);
  ------------------
  |  |   83|  16.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  33.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 16.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|  16.6k|    Py_ssize_t second_len = asdl_seq_LEN(b);
  ------------------
  |  |   83|  16.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  33.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 16.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  502|  16.6k|    asdl_seq *new_seq = (asdl_seq*)_Py_asdl_generic_seq_new(first_len + second_len, p->arena);
  503|  16.6k|    if (!new_seq) {
  ------------------
  |  Branch (503:9): [True: 0, False: 16.6k]
  ------------------
  504|      0|        return NULL;
  505|      0|    }
  506|       |
  507|  16.6k|    int k = 0;
  508|  31.9k|    for (Py_ssize_t i = 0; i < first_len; i++) {
  ------------------
  |  Branch (508:28): [True: 15.3k, False: 16.6k]
  ------------------
  509|  15.3k|        asdl_seq_SET_UNTYPED(new_seq, k++, asdl_seq_GET_UNTYPED(a, i));
  ------------------
  |  |  106|  15.3k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  15.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  510|  15.3k|    }
  511|  21.5k|    for (Py_ssize_t i = 0; i < second_len; i++) {
  ------------------
  |  Branch (511:28): [True: 4.89k, False: 16.6k]
  ------------------
  512|  4.89k|        asdl_seq_SET_UNTYPED(new_seq, k++, asdl_seq_GET_UNTYPED(b, i));
  ------------------
  |  |  106|  4.89k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  4.89k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  513|  4.89k|    }
  514|       |
  515|  16.6k|    return new_seq;
  516|  16.6k|}
_PyPegen_make_arguments:
  672|  25.6k|{
  673|  25.6k|    asdl_arg_seq *posonlyargs;
  674|  25.6k|    if (_make_posonlyargs(p, slash_without_default, slash_with_default, &posonlyargs) == -1) {
  ------------------
  |  Branch (674:9): [True: 0, False: 25.6k]
  ------------------
  675|      0|        return NULL;
  676|      0|    }
  677|       |
  678|  25.6k|    asdl_arg_seq *posargs;
  679|  25.6k|    if (_make_posargs(p, plain_names, names_with_default, &posargs) == -1) {
  ------------------
  |  Branch (679:9): [True: 0, False: 25.6k]
  ------------------
  680|      0|        return NULL;
  681|      0|    }
  682|       |
  683|  25.6k|    asdl_expr_seq *posdefaults;
  684|  25.6k|    if (_make_posdefaults(p,slash_with_default, names_with_default, &posdefaults) == -1) {
  ------------------
  |  Branch (684:9): [True: 0, False: 25.6k]
  ------------------
  685|      0|        return NULL;
  686|      0|    }
  687|       |
  688|  25.6k|    arg_ty vararg = NULL;
  689|  25.6k|    if (star_etc != NULL && star_etc->vararg != NULL) {
  ------------------
  |  Branch (689:9): [True: 11.2k, False: 14.4k]
  |  Branch (689:29): [True: 7.08k, False: 4.14k]
  ------------------
  690|  7.08k|        vararg = star_etc->vararg;
  691|  7.08k|    }
  692|       |
  693|  25.6k|    asdl_arg_seq *kwonlyargs;
  694|  25.6k|    asdl_expr_seq *kwdefaults;
  695|  25.6k|    if (_make_kwargs(p, star_etc, &kwonlyargs, &kwdefaults) == -1) {
  ------------------
  |  Branch (695:9): [True: 0, False: 25.6k]
  ------------------
  696|      0|        return NULL;
  697|      0|    }
  698|       |
  699|  25.6k|    arg_ty kwarg = NULL;
  700|  25.6k|    if (star_etc != NULL && star_etc->kwarg != NULL) {
  ------------------
  |  Branch (700:9): [True: 11.2k, False: 14.4k]
  |  Branch (700:29): [True: 3.83k, False: 7.39k]
  ------------------
  701|  3.83k|        kwarg = star_etc->kwarg;
  702|  3.83k|    }
  703|       |
  704|  25.6k|    return _PyAST_arguments(posonlyargs, posargs, vararg, kwonlyargs,
  705|  25.6k|                            kwdefaults, kwarg, posdefaults, p->arena);
  706|  25.6k|}
_PyPegen_empty_arguments:
  713|  7.04k|{
  714|  7.04k|    asdl_arg_seq *posonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
  715|  7.04k|    if (!posonlyargs) {
  ------------------
  |  Branch (715:9): [True: 0, False: 7.04k]
  ------------------
  716|      0|        return NULL;
  717|      0|    }
  718|  7.04k|    asdl_arg_seq *posargs = _Py_asdl_arg_seq_new(0, p->arena);
  719|  7.04k|    if (!posargs) {
  ------------------
  |  Branch (719:9): [True: 0, False: 7.04k]
  ------------------
  720|      0|        return NULL;
  721|      0|    }
  722|  7.04k|    asdl_expr_seq *posdefaults = _Py_asdl_expr_seq_new(0, p->arena);
  723|  7.04k|    if (!posdefaults) {
  ------------------
  |  Branch (723:9): [True: 0, False: 7.04k]
  ------------------
  724|      0|        return NULL;
  725|      0|    }
  726|  7.04k|    asdl_arg_seq *kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
  727|  7.04k|    if (!kwonlyargs) {
  ------------------
  |  Branch (727:9): [True: 0, False: 7.04k]
  ------------------
  728|      0|        return NULL;
  729|      0|    }
  730|  7.04k|    asdl_expr_seq *kwdefaults = _Py_asdl_expr_seq_new(0, p->arena);
  731|  7.04k|    if (!kwdefaults) {
  ------------------
  |  Branch (731:9): [True: 0, False: 7.04k]
  ------------------
  732|      0|        return NULL;
  733|      0|    }
  734|       |
  735|  7.04k|    return _PyAST_arguments(posonlyargs, posargs, NULL, kwonlyargs,
  736|       |                            kwdefaults, NULL, posdefaults, p->arena);
  737|  7.04k|}
_PyPegen_augoperator:
  742|  14.2k|{
  743|  14.2k|    AugOperator *a = _PyArena_Malloc(p->arena, sizeof(AugOperator));
  744|  14.2k|    if (!a) {
  ------------------
  |  Branch (744:9): [True: 0, False: 14.2k]
  ------------------
  745|      0|        return NULL;
  746|      0|    }
  747|  14.2k|    a->kind = kind;
  748|  14.2k|    return a;
  749|  14.2k|}
_PyPegen_function_def_decorators:
  754|    936|{
  755|    936|    assert(function_def != NULL);
  ------------------
  |  Branch (755:5): [True: 936, False: 0]
  ------------------
  756|    936|    if (function_def->kind == AsyncFunctionDef_kind) {
  ------------------
  |  Branch (756:9): [True: 179, False: 757]
  ------------------
  757|    179|        return _PyAST_AsyncFunctionDef(
  758|    179|            function_def->v.AsyncFunctionDef.name,
  759|    179|            function_def->v.AsyncFunctionDef.args,
  760|    179|            function_def->v.AsyncFunctionDef.body, decorators,
  761|    179|            function_def->v.AsyncFunctionDef.returns,
  762|    179|            function_def->v.AsyncFunctionDef.type_comment,
  763|    179|            function_def->v.AsyncFunctionDef.type_params,
  764|    179|            function_def->lineno, function_def->col_offset,
  765|    179|            function_def->end_lineno, function_def->end_col_offset, p->arena);
  766|    179|    }
  767|       |
  768|    757|    return _PyAST_FunctionDef(
  769|    757|        function_def->v.FunctionDef.name,
  770|    757|        function_def->v.FunctionDef.args,
  771|    757|        function_def->v.FunctionDef.body, decorators,
  772|    757|        function_def->v.FunctionDef.returns,
  773|    757|        function_def->v.FunctionDef.type_comment,
  774|    757|        function_def->v.FunctionDef.type_params,
  775|    757|        function_def->lineno, function_def->col_offset,
  776|    757|        function_def->end_lineno, function_def->end_col_offset, p->arena);
  777|    936|}
_PyPegen_class_def_decorators:
  782|    709|{
  783|    709|    assert(class_def != NULL);
  ------------------
  |  Branch (783:5): [True: 709, False: 0]
  ------------------
  784|    709|    return _PyAST_ClassDef(
  785|    709|        class_def->v.ClassDef.name,
  786|    709|        class_def->v.ClassDef.bases, class_def->v.ClassDef.keywords,
  787|    709|        class_def->v.ClassDef.body, decorators,
  788|    709|        class_def->v.ClassDef.type_params,
  789|    709|        class_def->lineno, class_def->col_offset, class_def->end_lineno,
  790|    709|        class_def->end_col_offset, p->arena);
  791|    709|}
_PyPegen_keyword_or_starred:
  796|  34.6k|{
  797|  34.6k|    KeywordOrStarred *a = _PyArena_Malloc(p->arena, sizeof(KeywordOrStarred));
  798|  34.6k|    if (!a) {
  ------------------
  |  Branch (798:9): [True: 0, False: 34.6k]
  ------------------
  799|      0|        return NULL;
  800|      0|    }
  801|  34.6k|    a->element = element;
  802|  34.6k|    a->is_keyword = is_keyword;
  803|  34.6k|    return a;
  804|  34.6k|}
_PyPegen_seq_extract_starred_exprs:
  823|  14.6k|{
  824|  14.6k|    int new_len = _seq_number_of_starred_exprs(kwargs);
  825|  14.6k|    if (new_len == 0) {
  ------------------
  |  Branch (825:9): [True: 12.2k, False: 2.32k]
  ------------------
  826|  12.2k|        return NULL;
  827|  12.2k|    }
  828|  2.32k|    asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(new_len, p->arena);
  829|  2.32k|    if (!new_seq) {
  ------------------
  |  Branch (829:9): [True: 0, False: 2.32k]
  ------------------
  830|      0|        return NULL;
  831|      0|    }
  832|       |
  833|  2.32k|    int idx = 0;
  834|  11.4k|    for (Py_ssize_t i = 0, len = asdl_seq_LEN(kwargs); i < len; i++) {
  ------------------
  |  |   83|  2.32k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.65k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.32k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (834:56): [True: 9.08k, False: 2.32k]
  ------------------
  835|  9.08k|        KeywordOrStarred *k = asdl_seq_GET_UNTYPED(kwargs, i);
  ------------------
  |  |   81|  9.08k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  9.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  836|  9.08k|        if (!k->is_keyword) {
  ------------------
  |  Branch (836:13): [True: 3.80k, False: 5.28k]
  ------------------
  837|  3.80k|            asdl_seq_SET(new_seq, idx++, k->element);
  ------------------
  |  |   94|  3.80k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.80k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  838|  3.80k|        }
  839|  9.08k|    }
  840|  2.32k|    return new_seq;
  841|  2.32k|}
_PyPegen_seq_delete_starred_exprs:
  846|  14.6k|{
  847|  14.6k|    Py_ssize_t len = asdl_seq_LEN(kwargs);
  ------------------
  |  |   83|  14.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  29.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 14.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  848|  14.6k|    Py_ssize_t new_len = len - _seq_number_of_starred_exprs(kwargs);
  849|  14.6k|    if (new_len == 0) {
  ------------------
  |  Branch (849:9): [True: 0, False: 14.6k]
  ------------------
  850|      0|        return NULL;
  851|      0|    }
  852|  14.6k|    asdl_keyword_seq *new_seq = _Py_asdl_keyword_seq_new(new_len, p->arena);
  853|  14.6k|    if (!new_seq) {
  ------------------
  |  Branch (853:9): [True: 0, False: 14.6k]
  ------------------
  854|      0|        return NULL;
  855|      0|    }
  856|       |
  857|  14.6k|    int idx = 0;
  858|  42.1k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (858:28): [True: 27.5k, False: 14.6k]
  ------------------
  859|  27.5k|        KeywordOrStarred *k = asdl_seq_GET_UNTYPED(kwargs, i);
  ------------------
  |  |   81|  27.5k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  27.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  860|  27.5k|        if (k->is_keyword) {
  ------------------
  |  Branch (860:13): [True: 23.7k, False: 3.80k]
  ------------------
  861|  23.7k|            asdl_seq_SET(new_seq, idx++, k->element);
  ------------------
  |  |   94|  23.7k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  23.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  862|  23.7k|        }
  863|  27.5k|    }
  864|  14.6k|    return new_seq;
  865|  14.6k|}
_PyPegen_ensure_imaginary:
  869|     84|{
  870|     84|    if (exp->kind != Constant_kind || !PyComplex_CheckExact(exp->v.Constant.value)) {
  ------------------
  |  |   14|     84|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|     84|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     84|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     84|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (870:9): [True: 0, False: 84]
  |  Branch (870:39): [True: 10, False: 74]
  ------------------
  871|     10|        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(exp, "imaginary number required in complex literal");
  ------------------
  |  |  239|     10|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  872|     10|        return NULL;
  873|     10|    }
  874|     74|    return exp;
  875|     84|}
_PyPegen_ensure_real:
  879|    217|{
  880|    217|    if (exp->kind != Constant_kind || PyComplex_CheckExact(exp->v.Constant.value)) {
  ------------------
  |  |   14|    217|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|    217|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    217|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    217|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (880:9): [True: 0, False: 217]
  ------------------
  881|      2|        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(exp, "real number required in complex literal");
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  882|      2|        return NULL;
  883|      2|    }
  884|    215|    return exp;
  885|    217|}
_PyPegen_make_module:
  888|  8.78k|_PyPegen_make_module(Parser *p, asdl_stmt_seq *a) {
  889|  8.78k|    asdl_type_ignore_seq *type_ignores = NULL;
  890|  8.78k|    Py_ssize_t num = p->type_ignore_comments.num_items;
  891|  8.78k|    if (num > 0) {
  ------------------
  |  Branch (891:9): [True: 32, False: 8.75k]
  ------------------
  892|       |        // Turn the raw (comment, lineno) pairs into TypeIgnore objects in the arena
  893|     32|        type_ignores = _Py_asdl_type_ignore_seq_new(num, p->arena);
  894|     32|        if (type_ignores == NULL) {
  ------------------
  |  Branch (894:13): [True: 0, False: 32]
  ------------------
  895|      0|            return NULL;
  896|      0|        }
  897|    821|        for (Py_ssize_t i = 0; i < num; i++) {
  ------------------
  |  Branch (897:32): [True: 791, False: 30]
  ------------------
  898|    791|            PyObject *tag = _PyPegen_new_type_comment(p, p->type_ignore_comments.items[i].comment);
  899|    791|            if (tag == NULL) {
  ------------------
  |  Branch (899:17): [True: 2, False: 789]
  ------------------
  900|      2|                return NULL;
  901|      2|            }
  902|    789|            type_ignore_ty ti = _PyAST_TypeIgnore(p->type_ignore_comments.items[i].lineno,
  903|    789|                                                  tag, p->arena);
  904|    789|            if (ti == NULL) {
  ------------------
  |  Branch (904:17): [True: 0, False: 789]
  ------------------
  905|      0|                return NULL;
  906|      0|            }
  907|    789|            asdl_seq_SET(type_ignores, i, ti);
  ------------------
  |  |   94|    789|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    789|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  908|    789|        }
  909|     32|    }
  910|  8.78k|    return _PyAST_Module(a, type_ignores, p->arena);
  911|  8.78k|}
_PyPegen_new_type_comment:
  915|  1.86k|{
  916|  1.86k|    PyObject *res = PyUnicode_DecodeUTF8(s, strlen(s), NULL);
  917|  1.86k|    if (res == NULL) {
  ------------------
  |  Branch (917:9): [True: 11, False: 1.85k]
  ------------------
  918|     11|        return NULL;
  919|     11|    }
  920|  1.85k|    if (_PyArena_AddPyObject(p->arena, res) < 0) {
  ------------------
  |  Branch (920:9): [True: 0, False: 1.85k]
  ------------------
  921|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  922|      0|        return NULL;
  923|      0|    }
  924|  1.85k|    return res;
  925|  1.85k|}
_PyPegen_add_type_comment_to_arg:
  929|   125k|{
  930|   125k|    if (tc == NULL) {
  ------------------
  |  Branch (930:9): [True: 125k, False: 72]
  ------------------
  931|   125k|        return a;
  932|   125k|    }
  933|     72|    const char *bytes = PyBytes_AsString(tc->bytes);
  934|     72|    if (bytes == NULL) {
  ------------------
  |  Branch (934:9): [True: 0, False: 72]
  ------------------
  935|      0|        return NULL;
  936|      0|    }
  937|     72|    PyObject *tco = _PyPegen_new_type_comment(p, bytes);
  938|     72|    if (tco == NULL) {
  ------------------
  |  Branch (938:9): [True: 5, False: 67]
  ------------------
  939|      5|        return NULL;
  940|      5|    }
  941|     67|    return _PyAST_arg(a->arg, a->annotation, tco,
  942|     67|                      a->lineno, a->col_offset, a->end_lineno, a->end_col_offset,
  943|     67|                      p->arena);
  944|     72|}
_PyPegen_check_barry_as_flufl:
  949|  1.08k|_PyPegen_check_barry_as_flufl(Parser *p, Token* t) {
  950|  1.08k|    assert(t->bytes != NULL);
  ------------------
  |  Branch (950:5): [True: 1.08k, False: 0]
  ------------------
  951|  1.08k|    assert(t->type == NOTEQUAL);
  ------------------
  |  Branch (951:5): [True: 1.08k, False: 0]
  ------------------
  952|       |
  953|  1.08k|    const char* tok_str = PyBytes_AS_STRING(t->bytes);
  ------------------
  |  |   27|  1.08k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|  1.08k|    if (p->flags & PyPARSE_BARRY_AS_BDFL && strcmp(tok_str, "<>") != 0) {
  ------------------
  |  |   26|  2.17k|#define PyPARSE_BARRY_AS_BDFL 0x0020
  ------------------
  |  Branch (954:9): [True: 0, False: 1.08k]
  |  Branch (954:45): [True: 0, False: 0]
  ------------------
  955|      0|        RAISE_SYNTAX_ERROR("with Barry as BDFL, use '<>' instead of '!='");
  ------------------
  |  |  233|      0|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  956|      0|        return -1;
  957|      0|    }
  958|  1.08k|    if (!(p->flags & PyPARSE_BARRY_AS_BDFL)) {
  ------------------
  |  |   26|  1.08k|#define PyPARSE_BARRY_AS_BDFL 0x0020
  ------------------
  |  Branch (958:9): [True: 1.08k, False: 0]
  ------------------
  959|  1.08k|        return strcmp(tok_str, "!=");
  960|  1.08k|    }
  961|      0|    return 0;
  962|  1.08k|}
_PyPegen_check_legacy_stmt:
  965|  21.5k|_PyPegen_check_legacy_stmt(Parser *p, expr_ty name) {
  966|  21.5k|    if (name->kind != Name_kind) {
  ------------------
  |  Branch (966:9): [True: 1.68k, False: 19.8k]
  ------------------
  967|  1.68k|        return 0;
  968|  1.68k|    }
  969|  19.8k|    const char* candidates[2] = {"print", "exec"};
  970|  55.9k|    for (int i=0; i<2; i++) {
  ------------------
  |  Branch (970:19): [True: 39.7k, False: 16.2k]
  ------------------
  971|  39.7k|        if (PyUnicode_CompareWithASCIIString(name->v.Name.id, candidates[i]) == 0) {
  ------------------
  |  Branch (971:13): [True: 3.60k, False: 36.1k]
  ------------------
  972|  3.60k|            return 1;
  973|  3.60k|        }
  974|  39.7k|    }
  975|  16.2k|    return 0;
  976|  19.8k|}
_PyPegen_raise_error_for_missing_comma:
  980|  12.9k|{
  981|       |    // Don't raise for legacy statements like "print x" or "exec x"
  982|  12.9k|    if (_PyPegen_check_legacy_stmt(p, a)) {
  ------------------
  |  Branch (982:9): [True: 3.58k, False: 9.31k]
  ------------------
  983|  3.58k|        return NULL;
  984|  3.58k|    }
  985|       |    // Only raise inside parentheses/brackets (level > 0)
  986|  9.31k|    if (p->tokens[p->mark - 1]->level == 0) {
  ------------------
  |  Branch (986:9): [True: 9.06k, False: 243]
  ------------------
  987|  9.06k|        return NULL;
  988|  9.06k|    }
  989|       |    // For multi-line expressions (like string concatenations), point to the
  990|       |    // last line instead of the first for a more helpful error message.
  991|       |    // Use a->col_offset as the starting column since all strings in the
  992|       |    // concatenation typically share the same indentation.
  993|    243|    if (a->end_lineno > a->lineno) {
  ------------------
  |  Branch (993:9): [True: 13, False: 230]
  ------------------
  994|     13|        return RAISE_ERROR_KNOWN_LOCATION(
  995|     13|            p, PyExc_SyntaxError, a->end_lineno, a->col_offset,
  996|     13|            a->end_lineno, a->end_col_offset,
  997|     13|            "invalid syntax. Perhaps you forgot a comma?"
  998|     13|        );
  999|     13|    }
 1000|    230|    return RAISE_ERROR_KNOWN_LOCATION(
 1001|    230|        p, PyExc_SyntaxError, a->lineno, a->col_offset,
 1002|    230|        b->end_lineno, b->end_col_offset,
 1003|    230|        "invalid syntax. Perhaps you forgot a comma?"
 1004|    230|    );
 1005|    243|}
_PyPegen_check_fstring_conversion:
 1040|  5.89k|{
 1041|  5.89k|    if (conv_token->lineno != conv->lineno || conv_token->end_col_offset != conv->col_offset) {
  ------------------
  |  Branch (1041:9): [True: 2, False: 5.89k]
  |  Branch (1041:47): [True: 2, False: 5.89k]
  ------------------
 1042|      4|        return RAISE_SYNTAX_ERROR_KNOWN_RANGE(
  ------------------
  |  |  237|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
 1043|      4|            conv_token, conv,
 1044|      4|            "%c-string: conversion type must come right after the exclamation mark",
 1045|      4|            formatted_string_prefix(p)
 1046|      4|        );
 1047|      4|    }
 1048|       |
 1049|  5.89k|    Py_UCS4 first = PyUnicode_READ_CHAR(conv->v.Name.id, 0);
  ------------------
  |  |  381|  5.89k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  5.89k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.89k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1050|  5.89k|    if (PyUnicode_GET_LENGTH(conv->v.Name.id) > 1 ||
  ------------------
  |  |  299|  5.89k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.89k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.89k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1050:9): [True: 19, False: 5.87k]
  ------------------
 1051|  5.87k|            !(first == 's' || first == 'r' || first == 'a')) {
  ------------------
  |  Branch (1051:15): [True: 1.38k, False: 4.48k]
  |  Branch (1051:31): [True: 1.64k, False: 2.84k]
  |  Branch (1051:47): [True: 2.83k, False: 5]
  ------------------
 1052|     24|        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(conv,
  ------------------
  |  |  239|     24|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
 1053|     24|                                            "%c-string: invalid conversion character %R: expected 's', 'r', or 'a'",
 1054|     24|                                            formatted_string_prefix(p),
 1055|     24|                                            conv->v.Name.id);
 1056|     24|        return NULL;
 1057|     24|    }
 1058|       |
 1059|  5.86k|    return result_token_with_metadata(p, conv, conv_token->metadata);
 1060|  5.89k|}
_PyPegen_setup_full_format_spec:
 1065|  17.3k|{
 1066|  17.3k|    if (!spec) {
  ------------------
  |  Branch (1066:9): [True: 0, False: 17.3k]
  ------------------
 1067|      0|        return NULL;
 1068|      0|    }
 1069|       |
 1070|       |    // This is needed to keep compatibility with 3.11, where an empty format
 1071|       |    // spec is parsed as an *empty* JoinedStr node, instead of having an empty
 1072|       |    // constant in it.
 1073|  17.3k|    Py_ssize_t n_items = asdl_seq_LEN(spec);
  ------------------
  |  |   83|  17.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  34.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 17.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|  17.3k|    Py_ssize_t non_empty_count = 0;
 1075|  50.3k|    for (Py_ssize_t i = 0; i < n_items; i++) {
  ------------------
  |  Branch (1075:28): [True: 33.0k, False: 17.3k]
  ------------------
 1076|  33.0k|        expr_ty item = asdl_seq_GET(spec, i);
  ------------------
  |  |   82|  33.0k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  33.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1077|  33.0k|        non_empty_count += !(item->kind == Constant_kind &&
  ------------------
  |  Branch (1077:30): [True: 24.1k, False: 8.93k]
  ------------------
 1078|  33.0k|                             PyUnicode_CheckExact(item->v.Constant.value) &&
  ------------------
  |  |  104|  24.1k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  57.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  24.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  24.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 24.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1079|  24.1k|                             PyUnicode_GET_LENGTH(item->v.Constant.value) == 0);
  ------------------
  |  |  299|  24.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1079:30): [True: 7.03k, False: 17.0k]
  ------------------
 1080|  33.0k|    }
 1081|  17.3k|    if (non_empty_count != n_items) {
  ------------------
  |  Branch (1081:9): [True: 7.03k, False: 10.2k]
  ------------------
 1082|  7.03k|        asdl_expr_seq *resized_spec =
 1083|  7.03k|            _Py_asdl_expr_seq_new(non_empty_count, p->arena);
 1084|  7.03k|        if (resized_spec == NULL) {
  ------------------
  |  Branch (1084:13): [True: 0, False: 7.03k]
  ------------------
 1085|      0|            return NULL;
 1086|      0|        }
 1087|  7.03k|        Py_ssize_t j = 0;
 1088|  23.8k|        for (Py_ssize_t i = 0; i < n_items; i++) {
  ------------------
  |  Branch (1088:32): [True: 16.7k, False: 7.03k]
  ------------------
 1089|  16.7k|            expr_ty item = asdl_seq_GET(spec, i);
  ------------------
  |  |   82|  16.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  16.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1090|  16.7k|            if (item->kind == Constant_kind &&
  ------------------
  |  Branch (1090:17): [True: 11.6k, False: 5.13k]
  ------------------
 1091|  16.7k|                PyUnicode_CheckExact(item->v.Constant.value) &&
  ------------------
  |  |  104|  11.6k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  28.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  11.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 11.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1092|  11.6k|                PyUnicode_GET_LENGTH(item->v.Constant.value) == 0) {
  ------------------
  |  |  299|  11.6k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1092:17): [True: 7.03k, False: 4.61k]
  ------------------
 1093|  7.03k|                continue;
 1094|  7.03k|            }
 1095|  9.75k|            asdl_seq_SET(resized_spec, j++, item);
  ------------------
  |  |   94|  9.75k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.75k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1096|  9.75k|        }
 1097|  7.03k|        assert(j == non_empty_count);
  ------------------
  |  Branch (1097:9): [True: 7.03k, False: 0]
  ------------------
 1098|  7.03k|        spec = resized_spec;
 1099|  7.03k|    }
 1100|  17.3k|    expr_ty res;
 1101|  17.3k|    Py_ssize_t n = asdl_seq_LEN(spec);
  ------------------
  |  |   83|  17.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  34.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 17.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1102|  17.3k|    if (n == 0 || (n == 1 && asdl_seq_GET(spec, 0)->kind == Constant_kind)) {
  ------------------
  |  |   82|  7.87k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  7.87k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (1102:9): [True: 3.30k, False: 14.0k]
  |  Branch (1102:20): [True: 7.87k, False: 6.15k]
  |  Branch (1102:30): [True: 7.34k, False: 524]
  ------------------
 1103|  10.6k|        res = _PyAST_JoinedStr(spec, lineno, col_offset, end_lineno,
 1104|  10.6k|                                    end_col_offset, p->arena);
 1105|  10.6k|    } else {
 1106|  6.68k|        res = _PyPegen_concatenate_strings(p, spec,
 1107|  6.68k|                             lineno, col_offset, end_lineno,
 1108|  6.68k|                             end_col_offset, arena);
 1109|  6.68k|    }
 1110|  17.3k|    if (!res) {
  ------------------
  |  Branch (1110:9): [True: 0, False: 17.3k]
  ------------------
 1111|      0|        return NULL;
 1112|      0|    }
 1113|  17.3k|    return result_token_with_metadata(p, res, colon->metadata);
 1114|  17.3k|}
_PyPegen_get_expr_name:
 1118|    186|{
 1119|    186|    assert(e != NULL);
  ------------------
  |  Branch (1119:5): [True: 186, False: 0]
  ------------------
 1120|    186|    switch (e->kind) {
 1121|      4|        case Attribute_kind:
  ------------------
  |  Branch (1121:9): [True: 4, False: 182]
  ------------------
 1122|      4|            return "attribute";
 1123|      3|        case Subscript_kind:
  ------------------
  |  Branch (1123:9): [True: 3, False: 183]
  ------------------
 1124|      3|            return "subscript";
 1125|      6|        case Starred_kind:
  ------------------
  |  Branch (1125:9): [True: 6, False: 180]
  ------------------
 1126|      6|            return "starred";
 1127|      4|        case Name_kind:
  ------------------
  |  Branch (1127:9): [True: 4, False: 182]
  ------------------
 1128|      4|            return "name";
 1129|      2|        case List_kind:
  ------------------
  |  Branch (1129:9): [True: 2, False: 184]
  ------------------
 1130|      2|            return "list";
 1131|      7|        case Tuple_kind:
  ------------------
  |  Branch (1131:9): [True: 7, False: 179]
  ------------------
 1132|      7|            return "tuple";
 1133|      3|        case Lambda_kind:
  ------------------
  |  Branch (1133:9): [True: 3, False: 183]
  ------------------
 1134|      3|            return "lambda";
 1135|     10|        case Call_kind:
  ------------------
  |  Branch (1135:9): [True: 10, False: 176]
  ------------------
 1136|     10|            return "function call";
 1137|      4|        case BoolOp_kind:
  ------------------
  |  Branch (1137:9): [True: 4, False: 182]
  ------------------
 1138|     59|        case BinOp_kind:
  ------------------
  |  Branch (1138:9): [True: 55, False: 131]
  ------------------
 1139|     71|        case UnaryOp_kind:
  ------------------
  |  Branch (1139:9): [True: 12, False: 174]
  ------------------
 1140|     71|            return "expression";
 1141|      1|        case GeneratorExp_kind:
  ------------------
  |  Branch (1141:9): [True: 1, False: 185]
  ------------------
 1142|      1|            return "generator expression";
 1143|      1|        case Yield_kind:
  ------------------
  |  Branch (1143:9): [True: 1, False: 185]
  ------------------
 1144|      1|        case YieldFrom_kind:
  ------------------
  |  Branch (1144:9): [True: 0, False: 186]
  ------------------
 1145|      1|            return "yield expression";
 1146|      2|        case Await_kind:
  ------------------
  |  Branch (1146:9): [True: 2, False: 184]
  ------------------
 1147|      2|            return "await expression";
 1148|      1|        case ListComp_kind:
  ------------------
  |  Branch (1148:9): [True: 1, False: 185]
  ------------------
 1149|      1|            return "list comprehension";
 1150|      1|        case SetComp_kind:
  ------------------
  |  Branch (1150:9): [True: 1, False: 185]
  ------------------
 1151|      1|            return "set comprehension";
 1152|      0|        case DictComp_kind:
  ------------------
  |  Branch (1152:9): [True: 0, False: 186]
  ------------------
 1153|      0|            return "dict comprehension";
 1154|      1|        case Dict_kind:
  ------------------
  |  Branch (1154:9): [True: 1, False: 185]
  ------------------
 1155|      1|            return "dict literal";
 1156|      1|        case Set_kind:
  ------------------
  |  Branch (1156:9): [True: 1, False: 185]
  ------------------
 1157|      1|            return "set display";
 1158|      1|        case JoinedStr_kind:
  ------------------
  |  Branch (1158:9): [True: 1, False: 185]
  ------------------
 1159|      1|        case FormattedValue_kind:
  ------------------
  |  Branch (1159:9): [True: 0, False: 186]
  ------------------
 1160|      1|            return "f-string expression";
 1161|      2|        case TemplateStr_kind:
  ------------------
  |  Branch (1161:9): [True: 2, False: 184]
  ------------------
 1162|      2|        case Interpolation_kind:
  ------------------
  |  Branch (1162:9): [True: 0, False: 186]
  ------------------
 1163|      2|            return "t-string expression";
 1164|     48|        case Constant_kind: {
  ------------------
  |  Branch (1164:9): [True: 48, False: 138]
  ------------------
 1165|     48|            PyObject *value = e->v.Constant.value;
 1166|     48|            if (value == Py_None) {
  ------------------
  |  |  616|     48|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1166:17): [True: 2, False: 46]
  ------------------
 1167|      2|                return "None";
 1168|      2|            }
 1169|     46|            if (value == Py_False) {
  ------------------
  |  |   25|     46|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1169:17): [True: 1, False: 45]
  ------------------
 1170|      1|                return "False";
 1171|      1|            }
 1172|     45|            if (value == Py_True) {
  ------------------
  |  |   26|     45|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1172:17): [True: 3, False: 42]
  ------------------
 1173|      3|                return "True";
 1174|      3|            }
 1175|     42|            if (value == Py_Ellipsis) {
  ------------------
  |  |   14|     42|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (1175:17): [True: 1, False: 41]
  ------------------
 1176|      1|                return "ellipsis";
 1177|      1|            }
 1178|     41|            return "literal";
 1179|     42|        }
 1180|     15|        case Compare_kind:
  ------------------
  |  Branch (1180:9): [True: 15, False: 171]
  ------------------
 1181|     15|            return "comparison";
 1182|      1|        case IfExp_kind:
  ------------------
  |  Branch (1182:9): [True: 1, False: 185]
  ------------------
 1183|      1|            return "conditional expression";
 1184|      1|        case NamedExpr_kind:
  ------------------
  |  Branch (1184:9): [True: 1, False: 185]
  ------------------
 1185|      1|            return "named expression";
 1186|      0|        default:
  ------------------
  |  Branch (1186:9): [True: 0, False: 186]
  ------------------
 1187|      0|            PyErr_Format(PyExc_SystemError,
 1188|      0|                         "unexpected expression in assignment %d (line %d)",
 1189|      0|                         e->kind, e->lineno);
 1190|       |            return NULL;
 1191|    186|    }
 1192|    186|}
_PyPegen_get_last_comprehension_item:
 1195|     22|_PyPegen_get_last_comprehension_item(comprehension_ty comprehension) {
 1196|     22|    if (comprehension->ifs == NULL || asdl_seq_LEN(comprehension->ifs) == 0) {
  ------------------
  |  |   83|     22|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     44|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1196:9): [True: 0, False: 22]
  |  Branch (1196:39): [True: 18, False: 4]
  ------------------
 1197|     18|        return comprehension->iter;
 1198|     18|    }
 1199|      4|    return PyPegen_last_item(comprehension->ifs, expr_ty);
  ------------------
  |  |  302|      4|#define PyPegen_last_item(seq, type) ((type)_PyPegen_seq_last_item((asdl_seq*)seq))
  ------------------
 1200|     22|}
_PyPegen_collect_call_seqs:
 1204|  38.3k|                     int end_col_offset, PyArena *arena) {
 1205|  38.3k|    Py_ssize_t args_len = asdl_seq_LEN(a);
  ------------------
  |  |   83|  38.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  76.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 38.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1206|  38.3k|    Py_ssize_t total_len = args_len;
 1207|       |
 1208|  38.3k|    if (b == NULL) {
  ------------------
  |  Branch (1208:9): [True: 32.7k, False: 5.63k]
  ------------------
 1209|  32.7k|        return _PyAST_Call(_PyPegen_dummy_name(p), a, NULL, lineno, col_offset,
 1210|  32.7k|                        end_lineno, end_col_offset, arena);
 1211|       |
 1212|  32.7k|    }
 1213|       |
 1214|  5.63k|    asdl_expr_seq *starreds = _PyPegen_seq_extract_starred_exprs(p, b);
 1215|  5.63k|    if (!starreds && PyErr_Occurred()) {
  ------------------
  |  Branch (1215:9): [True: 3.65k, False: 1.97k]
  |  Branch (1215:22): [True: 0, False: 3.65k]
  ------------------
 1216|      0|        return NULL;
 1217|      0|    }
 1218|       |
 1219|  5.63k|    asdl_keyword_seq *keywords = _PyPegen_seq_delete_starred_exprs(p, b);
 1220|  5.63k|    if (!keywords && PyErr_Occurred()) {
  ------------------
  |  Branch (1220:9): [True: 0, False: 5.63k]
  |  Branch (1220:22): [True: 0, False: 0]
  ------------------
 1221|      0|        return NULL;
 1222|      0|    }
 1223|       |
 1224|  5.63k|    if (starreds) {
  ------------------
  |  Branch (1224:9): [True: 1.97k, False: 3.65k]
  ------------------
 1225|  1.97k|        total_len += asdl_seq_LEN(starreds);
  ------------------
  |  |   83|  1.97k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.95k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.97k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1226|  1.97k|    }
 1227|       |
 1228|  5.63k|    asdl_expr_seq *args = _Py_asdl_expr_seq_new(total_len, arena);
 1229|  5.63k|    if (args == NULL) {
  ------------------
  |  Branch (1229:9): [True: 0, False: 5.63k]
  ------------------
 1230|      0|        return NULL;
 1231|      0|    }
 1232|       |
 1233|  5.63k|    Py_ssize_t i = 0;
 1234|  13.0k|    for (i = 0; i < args_len; i++) {
  ------------------
  |  Branch (1234:17): [True: 7.43k, False: 5.63k]
  ------------------
 1235|  7.43k|        asdl_seq_SET(args, i, asdl_seq_GET(a, i));
  ------------------
  |  |   94|  7.43k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  7.43k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1236|  7.43k|    }
 1237|  8.65k|    for (; i < total_len; i++) {
  ------------------
  |  Branch (1237:12): [True: 3.01k, False: 5.63k]
  ------------------
 1238|  3.01k|        asdl_seq_SET(args, i, asdl_seq_GET(starreds, i - args_len));
  ------------------
  |  |   94|  3.01k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.01k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1239|  3.01k|    }
 1240|       |
 1241|  5.63k|    return _PyAST_Call(_PyPegen_dummy_name(p), args, keywords, lineno,
 1242|  5.63k|                       col_offset, end_lineno, end_col_offset, arena);
 1243|  5.63k|}
_PyPegen_get_invalid_target:
 1249|   809k|{
 1250|   809k|    if (e == NULL) {
  ------------------
  |  Branch (1250:9): [True: 0, False: 809k]
  ------------------
 1251|      0|        return NULL;
 1252|      0|    }
 1253|       |
 1254|   809k|    if (targets_type == SINGLE_TARGETS ||
  ------------------
  |  Branch (1254:9): [True: 197k, False: 611k]
  ------------------
 1255|   611k|        targets_type == ATTRIBUTE_OR_SUBSCRIPT_TARGETS) {
  ------------------
  |  Branch (1255:9): [True: 209k, False: 401k]
  ------------------
 1256|   407k|        if (targets_type == SINGLE_TARGETS && e->kind == Name_kind) {
  ------------------
  |  Branch (1256:13): [True: 197k, False: 209k]
  |  Branch (1256:47): [True: 153k, False: 43.8k]
  ------------------
 1257|   153k|            return NULL;
 1258|   153k|        }
 1259|   253k|        return e->kind == Attribute_kind || e->kind == Subscript_kind ? NULL : e;
  ------------------
  |  Branch (1259:16): [True: 18.2k, False: 235k]
  |  Branch (1259:45): [True: 5.25k, False: 230k]
  ------------------
 1260|   407k|    }
 1261|       |
 1262|   401k|#define VISIT_CONTAINER(CONTAINER, TYPE) do { \
 1263|   401k|        Py_ssize_t len = asdl_seq_LEN((CONTAINER)->v.TYPE.elts);\
 1264|   401k|        for (Py_ssize_t i = 0; i < len; i++) {\
 1265|   401k|            expr_ty other = asdl_seq_GET((CONTAINER)->v.TYPE.elts, i);\
 1266|   401k|            expr_ty child = _PyPegen_get_invalid_target(other, targets_type);\
 1267|   401k|            if (child != NULL) {\
 1268|   401k|                return child;\
 1269|   401k|            }\
 1270|   401k|        }\
 1271|   401k|    } while (0)
 1272|       |
 1273|       |    // We only need to visit List and Tuple nodes recursively as those
 1274|       |    // are the only ones that can contain valid names in targets when
 1275|       |    // they are parsed as expressions. Any other kind of expression
 1276|       |    // that is a container (like Sets or Dicts) is directly invalid and
 1277|       |    // we don't need to visit it recursively.
 1278|       |
 1279|   401k|    switch (e->kind) {
 1280|  3.94k|        case List_kind:
  ------------------
  |  Branch (1280:9): [True: 3.94k, False: 397k]
  ------------------
 1281|  3.94k|            VISIT_CONTAINER(e, List);
  ------------------
  |  | 1262|  3.94k|#define VISIT_CONTAINER(CONTAINER, TYPE) do { \
  |  | 1263|  3.94k|        Py_ssize_t len = asdl_seq_LEN((CONTAINER)->v.TYPE.elts);\
  |  |  ------------------
  |  |  |  |   83|  3.94k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.88k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 983, False: 2.95k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1264|  6.91k|        for (Py_ssize_t i = 0; i < len; i++) {\
  |  |  ------------------
  |  |  |  Branch (1264:32): [True: 3.65k, False: 3.26k]
  |  |  ------------------
  |  | 1265|  3.65k|            expr_ty other = asdl_seq_GET((CONTAINER)->v.TYPE.elts, i);\
  |  |  ------------------
  |  |  |  |   82|  3.65k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.65k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1266|  3.65k|            expr_ty child = _PyPegen_get_invalid_target(other, targets_type);\
  |  | 1267|  3.65k|            if (child != NULL) {\
  |  |  ------------------
  |  |  |  Branch (1267:17): [True: 675, False: 2.97k]
  |  |  ------------------
  |  | 1268|    675|                return child;\
  |  | 1269|    675|            }\
  |  | 1270|  3.65k|        }\
  |  | 1271|  3.94k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1271:14): [Folded, False: 3.26k]
  |  |  ------------------
  ------------------
 1282|  3.26k|            return NULL;
 1283|  6.85k|        case Tuple_kind:
  ------------------
  |  Branch (1283:9): [True: 6.85k, False: 394k]
  ------------------
 1284|  6.85k|            VISIT_CONTAINER(e, Tuple);
  ------------------
  |  | 1262|  6.85k|#define VISIT_CONTAINER(CONTAINER, TYPE) do { \
  |  | 1263|  6.85k|        Py_ssize_t len = asdl_seq_LEN((CONTAINER)->v.TYPE.elts);\
  |  |  ------------------
  |  |  |  |   83|  6.85k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 5.69k, False: 1.15k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1264|  9.57k|        for (Py_ssize_t i = 0; i < len; i++) {\
  |  |  ------------------
  |  |  |  Branch (1264:32): [True: 2.84k, False: 6.73k]
  |  |  ------------------
  |  | 1265|  2.84k|            expr_ty other = asdl_seq_GET((CONTAINER)->v.TYPE.elts, i);\
  |  |  ------------------
  |  |  |  |   82|  2.84k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1266|  2.84k|            expr_ty child = _PyPegen_get_invalid_target(other, targets_type);\
  |  | 1267|  2.84k|            if (child != NULL) {\
  |  |  ------------------
  |  |  |  Branch (1267:17): [True: 120, False: 2.72k]
  |  |  ------------------
  |  | 1268|    120|                return child;\
  |  | 1269|    120|            }\
  |  | 1270|  2.84k|        }\
  |  | 1271|  6.85k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1271:14): [Folded, False: 6.73k]
  |  |  ------------------
  ------------------
 1285|  6.73k|            return NULL;
 1286|    991|        case Starred_kind:
  ------------------
  |  Branch (1286:9): [True: 991, False: 400k]
  ------------------
 1287|    991|            if (targets_type == DEL_TARGETS) {
  ------------------
  |  Branch (1287:17): [True: 8, False: 983]
  ------------------
 1288|      8|                return e;
 1289|      8|            }
 1290|    983|            return _PyPegen_get_invalid_target(e->v.Starred.value, targets_type);
 1291|     61|        case Compare_kind:
  ------------------
  |  Branch (1291:9): [True: 61, False: 401k]
  ------------------
 1292|       |            // This is needed, because the `a in b` in `for a in b` gets parsed
 1293|       |            // as a comparison, and so we need to search the left side of the comparison
 1294|       |            // for invalid targets.
 1295|     61|            if (targets_type == FOR_TARGETS) {
  ------------------
  |  Branch (1295:17): [True: 39, False: 22]
  ------------------
 1296|     39|                cmpop_ty cmpop = (cmpop_ty) asdl_seq_GET(e->v.Compare.ops, 0);
  ------------------
  |  |   82|     39|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     39|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1297|     39|                if (cmpop == In) {
  ------------------
  |  Branch (1297:21): [True: 21, False: 18]
  ------------------
 1298|     21|                    return _PyPegen_get_invalid_target(e->v.Compare.left, targets_type);
 1299|     21|                }
 1300|     18|                return NULL;
 1301|     39|            }
 1302|     22|            return e;
 1303|   339k|        case Name_kind:
  ------------------
  |  Branch (1303:9): [True: 339k, False: 62.4k]
  ------------------
 1304|   343k|        case Subscript_kind:
  ------------------
  |  Branch (1304:9): [True: 4.47k, False: 397k]
  ------------------
 1305|   356k|        case Attribute_kind:
  ------------------
  |  Branch (1305:9): [True: 12.7k, False: 389k]
  ------------------
 1306|   356k|            return NULL;
 1307|  33.3k|        default:
  ------------------
  |  Branch (1307:9): [True: 33.3k, False: 368k]
  ------------------
 1308|  33.3k|            return e;
 1309|   401k|    }
 1310|   401k|}
_PyPegen_arguments_parsing_error:
 1312|     33|void *_PyPegen_arguments_parsing_error(Parser *p, expr_ty e) {
 1313|     33|    int kwarg_unpacking = 0;
 1314|    278|    for (Py_ssize_t i = 0, l = asdl_seq_LEN(e->v.Call.keywords); i < l; i++) {
  ------------------
  |  |   83|     33|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     66|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 33]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1314:66): [True: 245, False: 33]
  ------------------
 1315|    245|        keyword_ty keyword = asdl_seq_GET(e->v.Call.keywords, i);
  ------------------
  |  |   82|    245|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    245|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1316|    245|        if (!keyword->arg) {
  ------------------
  |  Branch (1316:13): [True: 88, False: 157]
  ------------------
 1317|     88|            kwarg_unpacking = 1;
 1318|     88|        }
 1319|    245|    }
 1320|       |
 1321|     33|    const char *msg = NULL;
 1322|     33|    if (kwarg_unpacking) {
  ------------------
  |  Branch (1322:9): [True: 14, False: 19]
  ------------------
 1323|     14|        msg = "positional argument follows keyword argument unpacking";
 1324|     19|    } else {
 1325|     19|        msg = "positional argument follows keyword argument";
 1326|     19|    }
 1327|       |
 1328|     33|    return RAISE_SYNTAX_ERROR(msg);
  ------------------
  |  |  233|     33|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
 1329|     33|}
_PyPegen_nonparen_genexp_in_call:
 1333|    551|{
 1334|       |    /* The rule that calls this function is 'args for_if_clauses'.
 1335|       |       For the input f(L, x for x in y), L and x are in args and
 1336|       |       the for is parsed as a for_if_clause. We have to check if
 1337|       |       len <= 1, so that input like dict((a, b) for a, b in x)
 1338|       |       gets successfully parsed and then we pass the last
 1339|       |       argument (x in the above example) as the location of the
 1340|       |       error */
 1341|    551|    Py_ssize_t len = asdl_seq_LEN(args->v.Call.args);
  ------------------
  |  |   83|    551|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.10k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 325, False: 226]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1342|    551|    if (len <= 1) {
  ------------------
  |  Branch (1342:9): [True: 549, False: 2]
  ------------------
 1343|    549|        return NULL;
 1344|    549|    }
 1345|       |
 1346|      2|    comprehension_ty last_comprehension = PyPegen_last_item(comprehensions, comprehension_ty);
  ------------------
  |  |  302|      2|#define PyPegen_last_item(seq, type) ((type)_PyPegen_seq_last_item((asdl_seq*)seq))
  ------------------
 1347|       |
 1348|      2|    return RAISE_SYNTAX_ERROR_KNOWN_RANGE(
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
 1349|    551|        (expr_ty) asdl_seq_GET(args->v.Call.args, len - 1),
 1350|    551|        _PyPegen_get_last_comprehension_item(last_comprehension),
 1351|    551|        "Generator expression must be parenthesized"
 1352|    551|    );
 1353|    551|}
_PyPegen_template_str:
 1476|  3.81k|_PyPegen_template_str(Parser *p, Token *a, asdl_expr_seq *raw_expressions, Token *b) {
 1477|       |
 1478|  3.81k|    asdl_expr_seq *resized_exprs = _get_resized_exprs(p, a, raw_expressions, b, 1);
 1479|  3.81k|    if (resized_exprs == NULL) {
  ------------------
  |  Branch (1479:9): [True: 5, False: 3.81k]
  ------------------
 1480|      5|        return NULL;
 1481|      5|    }
 1482|  3.81k|    return _PyAST_TemplateStr(resized_exprs, a->lineno, a->col_offset,
 1483|  3.81k|                              b->end_lineno, b->end_col_offset,
 1484|  3.81k|                              p->arena);
 1485|  3.81k|}
_PyPegen_joined_str:
 1488|  19.9k|_PyPegen_joined_str(Parser *p, Token* a, asdl_expr_seq* raw_expressions, Token*b) {
 1489|       |
 1490|  19.9k|    asdl_expr_seq *resized_exprs = _get_resized_exprs(p, a, raw_expressions, b, 0);
 1491|  19.9k|    if (resized_exprs == NULL) {
  ------------------
  |  Branch (1491:9): [True: 3, False: 19.9k]
  ------------------
 1492|      3|        return NULL;
 1493|      3|    }
 1494|  19.9k|    return _PyAST_JoinedStr(resized_exprs, a->lineno, a->col_offset,
 1495|  19.9k|                            b->end_lineno, b->end_col_offset,
 1496|  19.9k|                            p->arena);
 1497|  19.9k|}
_PyPegen_decoded_constant_from_token:
 1499|  24.2k|expr_ty _PyPegen_decoded_constant_from_token(Parser* p, Token* tok) {
 1500|  24.2k|    Py_ssize_t bsize;
 1501|  24.2k|    char* bstr;
 1502|  24.2k|    if (PyBytes_AsStringAndSize(tok->bytes, &bstr, &bsize) == -1) {
  ------------------
  |  Branch (1502:9): [True: 0, False: 24.2k]
  ------------------
 1503|      0|        return NULL;
 1504|      0|    }
 1505|       |
 1506|  24.2k|    int is_raw = tok->is_raw;
 1507|       |
 1508|  24.2k|    PyObject* str = _PyPegen_decode_string(p, is_raw, bstr, bsize, tok);
 1509|  24.2k|    if (str == NULL) {
  ------------------
  |  Branch (1509:9): [True: 6, False: 24.2k]
  ------------------
 1510|      6|        return NULL;
 1511|      6|    }
 1512|  24.2k|    if (_PyArena_AddPyObject(p->arena, str) < 0) {
  ------------------
  |  Branch (1512:9): [True: 0, False: 24.2k]
  ------------------
 1513|      0|        Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1514|      0|        return NULL;
 1515|      0|    }
 1516|  24.2k|    return _PyAST_Constant(str, NULL, tok->lineno, tok->col_offset,
 1517|  24.2k|                           tok->end_lineno, tok->end_col_offset,
 1518|  24.2k|                           p->arena);
 1519|  24.2k|}
_PyPegen_constant_from_token:
 1521|  64.5k|expr_ty _PyPegen_constant_from_token(Parser* p, Token* tok) {
 1522|  64.5k|    const char* bstr = PyBytes_AsString(tok->bytes);
 1523|  64.5k|    if (bstr == NULL) {
  ------------------
  |  Branch (1523:9): [True: 0, False: 64.5k]
  ------------------
 1524|      0|        return NULL;
 1525|      0|    }
 1526|  64.5k|    PyObject* str = PyUnicode_FromString(bstr);
 1527|  64.5k|    if (str == NULL) {
  ------------------
  |  Branch (1527:9): [True: 8, False: 64.5k]
  ------------------
 1528|      8|        return NULL;
 1529|      8|    }
 1530|  64.5k|    if (_PyArena_AddPyObject(p->arena, str) < 0) {
  ------------------
  |  Branch (1530:9): [True: 0, False: 64.5k]
  ------------------
 1531|      0|        Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1532|      0|        return NULL;
 1533|      0|    }
 1534|  64.5k|    return _PyAST_Constant(str, NULL, tok->lineno, tok->col_offset,
 1535|  64.5k|                           tok->end_lineno, tok->end_col_offset,
 1536|  64.5k|                           p->arena);
 1537|  64.5k|}
_PyPegen_constant_from_string:
 1539|  79.9k|expr_ty _PyPegen_constant_from_string(Parser* p, Token* tok) {
 1540|  79.9k|    const char* the_str = PyBytes_AsString(tok->bytes);
 1541|  79.9k|    if (the_str == NULL) {
  ------------------
  |  Branch (1541:9): [True: 0, False: 79.9k]
  ------------------
 1542|      0|        return NULL;
 1543|      0|    }
 1544|  79.9k|    PyObject *s = _PyPegen_parse_string(p, tok);
 1545|  79.9k|    if (s == NULL) {
  ------------------
  |  Branch (1545:9): [True: 195, False: 79.7k]
  ------------------
 1546|    195|        _Pypegen_raise_decode_error(p);
 1547|    195|        return NULL;
 1548|    195|    }
 1549|  79.7k|    if (_PyArena_AddPyObject(p->arena, s) < 0) {
  ------------------
  |  Branch (1549:9): [True: 0, False: 79.7k]
  ------------------
 1550|      0|        Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1551|      0|        return NULL;
 1552|      0|    }
 1553|  79.7k|    PyObject *kind = NULL;
 1554|  79.7k|    if (the_str && the_str[0] == 'u') {
  ------------------
  |  Branch (1554:9): [True: 79.7k, False: 0]
  |  Branch (1554:20): [True: 4.95k, False: 74.8k]
  ------------------
 1555|  4.95k|        kind = _PyPegen_new_identifier(p, "u");
 1556|  4.95k|        if (kind == NULL) {
  ------------------
  |  Branch (1556:13): [True: 0, False: 4.95k]
  ------------------
 1557|      0|            return NULL;
 1558|      0|        }
 1559|  4.95k|    }
 1560|  79.7k|    return _PyAST_Constant(s, kind, tok->lineno, tok->col_offset, tok->end_lineno, tok->end_col_offset, p->arena);
 1561|  79.7k|}
_PyPegen_interpolation:
 1617|  7.33k|                                 int end_lineno, int end_col_offset, PyArena *arena) {
 1618|       |
 1619|  7.33k|    int conversion_val = _get_interpolation_conversion(p, debug, conversion, format);
 1620|       |
 1621|       |    /* Find the non whitespace token after the "=" */
 1622|  7.33k|    int debug_end_line, debug_end_offset;
 1623|  7.33k|    PyObject *debug_metadata;
 1624|  7.33k|    constant exprstr;
 1625|       |
 1626|  7.33k|    if (conversion) {
  ------------------
  |  Branch (1626:9): [True: 1.42k, False: 5.91k]
  ------------------
 1627|  1.42k|        debug_end_line = ((expr_ty) conversion->result)->lineno;
 1628|  1.42k|        debug_end_offset = ((expr_ty) conversion->result)->col_offset;
 1629|  1.42k|        debug_metadata = exprstr = conversion->metadata;
 1630|  1.42k|    }
 1631|  5.91k|    else if (format) {
  ------------------
  |  Branch (1631:14): [True: 4.13k, False: 1.78k]
  ------------------
 1632|  4.13k|        debug_end_line = ((expr_ty) format->result)->lineno;
 1633|  4.13k|        debug_end_offset = ((expr_ty) format->result)->col_offset + 1;
 1634|  4.13k|        debug_metadata = exprstr = format->metadata;
 1635|  4.13k|    }
 1636|  1.78k|    else {
 1637|  1.78k|        debug_end_line = end_lineno;
 1638|  1.78k|        debug_end_offset = end_col_offset;
 1639|  1.78k|        debug_metadata = exprstr = closing_brace->metadata;
 1640|  1.78k|    }
 1641|       |
 1642|  7.33k|    assert(exprstr != NULL);
  ------------------
  |  Branch (1642:5): [True: 7.33k, False: 0]
  ------------------
 1643|  7.33k|    PyObject *final_exprstr = debug
  ------------------
  |  Branch (1643:31): [True: 1.14k, False: 6.18k]
  ------------------
 1644|  7.33k|        ? _strip_interpolation_debug_expr(exprstr)
 1645|  7.33k|        : Py_NewRef(exprstr);
  ------------------
  |  |  550|  6.18k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  6.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1646|  7.33k|    if (!final_exprstr || _PyArena_AddPyObject(arena, final_exprstr) < 0) {
  ------------------
  |  Branch (1646:9): [True: 0, False: 7.33k]
  |  Branch (1646:27): [True: 0, False: 7.33k]
  ------------------
 1647|      0|        Py_XDECREF(final_exprstr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1648|      0|        return NULL;
 1649|      0|    }
 1650|       |
 1651|  7.33k|    expr_ty interpolation = _PyAST_Interpolation(
 1652|  7.33k|        expression, final_exprstr, conversion_val, format ? (expr_ty) format->result : NULL,
  ------------------
  |  Branch (1652:52): [True: 4.13k, False: 3.20k]
  ------------------
 1653|  7.33k|        lineno, col_offset, end_lineno,
 1654|  7.33k|        end_col_offset, arena
 1655|  7.33k|    );
 1656|       |
 1657|  7.33k|    if (!interpolation || !debug) {
  ------------------
  |  Branch (1657:9): [True: 0, False: 7.33k]
  |  Branch (1657:27): [True: 6.18k, False: 1.14k]
  ------------------
 1658|  6.18k|        return interpolation;
 1659|  6.18k|    }
 1660|       |
 1661|  1.14k|    expr_ty debug_text = _PyAST_Constant(debug_metadata, NULL, lineno, col_offset + 1, debug_end_line,
 1662|  1.14k|                                            debug_end_offset - 1, p->arena);
 1663|  1.14k|    if (!debug_text) {
  ------------------
  |  Branch (1663:9): [True: 0, False: 1.14k]
  ------------------
 1664|      0|        return NULL;
 1665|      0|    }
 1666|       |
 1667|  1.14k|    asdl_expr_seq *values = _Py_asdl_expr_seq_new(2, arena);
 1668|  1.14k|    if (!values) {
  ------------------
  |  Branch (1668:9): [True: 0, False: 1.14k]
  ------------------
 1669|      0|        return NULL;
 1670|      0|    }
 1671|  1.14k|    asdl_seq_SET(values, 0, debug_text);
  ------------------
  |  |   94|  1.14k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.14k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1672|  1.14k|    asdl_seq_SET(values, 1, interpolation);
  ------------------
  |  |   94|  1.14k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.14k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1673|  1.14k|    return _PyAST_JoinedStr(values, lineno, col_offset, debug_end_line, debug_end_offset, p->arena);
 1674|  1.14k|}
_PyPegen_formatted_value:
 1678|  19.4k|                                 int end_lineno, int end_col_offset, PyArena *arena) {
 1679|  19.4k|    int conversion_val = _get_interpolation_conversion(p, debug, conversion, format);
 1680|       |
 1681|  19.4k|    expr_ty formatted_value = _PyAST_FormattedValue(
 1682|  19.4k|        expression, conversion_val, format ? (expr_ty) format->result : NULL,
  ------------------
  |  Branch (1682:37): [True: 11.5k, False: 7.81k]
  ------------------
 1683|  19.4k|        lineno, col_offset, end_lineno,
 1684|  19.4k|        end_col_offset, arena
 1685|  19.4k|    );
 1686|       |
 1687|  19.4k|    if (!formatted_value || !debug) {
  ------------------
  |  Branch (1687:9): [True: 0, False: 19.4k]
  |  Branch (1687:29): [True: 17.9k, False: 1.47k]
  ------------------
 1688|  17.9k|        return formatted_value;
 1689|  17.9k|    }
 1690|       |
 1691|       |    /* Find the non whitespace token after the "=" */
 1692|  1.47k|    int debug_end_line, debug_end_offset;
 1693|  1.47k|    PyObject *debug_metadata;
 1694|       |
 1695|  1.47k|    if (conversion) {
  ------------------
  |  Branch (1695:9): [True: 53, False: 1.42k]
  ------------------
 1696|     53|        debug_end_line = ((expr_ty) conversion->result)->lineno;
 1697|     53|        debug_end_offset = ((expr_ty) conversion->result)->col_offset;
 1698|     53|        debug_metadata = conversion->metadata;
 1699|     53|    }
 1700|  1.42k|    else if (format) {
  ------------------
  |  Branch (1700:14): [True: 872, False: 553]
  ------------------
 1701|    872|        debug_end_line = ((expr_ty) format->result)->lineno;
 1702|    872|        debug_end_offset = ((expr_ty) format->result)->col_offset + 1;
 1703|    872|        debug_metadata = format->metadata;
 1704|    872|    }
 1705|    553|    else {
 1706|    553|        debug_end_line = end_lineno;
 1707|    553|        debug_end_offset = end_col_offset;
 1708|    553|        debug_metadata = closing_brace->metadata;
 1709|    553|    }
 1710|  1.47k|    expr_ty debug_text = _PyAST_Constant(debug_metadata, NULL, lineno, col_offset + 1, debug_end_line,
 1711|  1.47k|                                            debug_end_offset - 1, p->arena);
 1712|  1.47k|    if (!debug_text) {
  ------------------
  |  Branch (1712:9): [True: 0, False: 1.47k]
  ------------------
 1713|      0|        return NULL;
 1714|      0|    }
 1715|       |
 1716|  1.47k|    asdl_expr_seq *values = _Py_asdl_expr_seq_new(2, arena);
 1717|  1.47k|    if (!values) {
  ------------------
  |  Branch (1717:9): [True: 0, False: 1.47k]
  ------------------
 1718|      0|        return NULL;
 1719|      0|    }
 1720|  1.47k|    asdl_seq_SET(values, 0, debug_text);
  ------------------
  |  |   94|  1.47k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.47k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1721|  1.47k|    asdl_seq_SET(values, 1, formatted_value);
  ------------------
  |  |   94|  1.47k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.47k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1722|  1.47k|    return _PyAST_JoinedStr(values, lineno, col_offset, debug_end_line, debug_end_offset, p->arena);
 1723|  1.47k|}
_PyPegen_concatenate_tstrings:
 1997|  3.45k|{
 1998|  3.45k|    asdl_expr_seq *values = _build_concatenated_str(p, strings, lineno,
 1999|  3.45k|        col_offset, end_lineno, end_col_offset, arena);
 2000|  3.45k|    if (!values) {
  ------------------
  |  Branch (2000:9): [True: 0, False: 3.45k]
  ------------------
 2001|      0|        return NULL;
 2002|      0|    }
 2003|  3.45k|    return _PyAST_TemplateStr(values, lineno, col_offset, end_lineno,
 2004|  3.45k|        end_col_offset, arena);
 2005|  3.45k|}
_PyPegen_concatenate_strings:
 2011|  66.2k|{
 2012|  66.2k|    Py_ssize_t len = asdl_seq_LEN(strings);
  ------------------
  |  |   83|  66.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   132k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 66.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2013|  66.2k|    assert(len > 0);
  ------------------
  |  Branch (2013:5): [True: 66.2k, False: 0]
  ------------------
 2014|       |
 2015|  66.2k|    int f_string_found = 0;
 2016|  66.2k|    int unicode_string_found = 0;
 2017|  66.2k|    int bytes_found = 0;
 2018|       |
 2019|  66.2k|    Py_ssize_t i = 0;
 2020|   166k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (2020:17): [True: 100k, False: 66.2k]
  ------------------
 2021|   100k|        expr_ty elem = asdl_seq_GET(strings, i);
  ------------------
  |  |   82|   100k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   100k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2022|   100k|        switch(elem->kind) {
 2023|  76.1k|            case Constant_kind:
  ------------------
  |  Branch (2023:13): [True: 76.1k, False: 24.1k]
  ------------------
 2024|  76.1k|                if (PyBytes_CheckExact(elem->v.Constant.value)) {
  ------------------
  |  |   29|  76.1k|#define PyBytes_CheckExact(op) Py_IS_TYPE((op), &PyBytes_Type)
  |  |  ------------------
  |  |  |  |  215|  76.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  76.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  76.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 17.9k, False: 58.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2025|  17.9k|                    bytes_found = 1;
 2026|  58.1k|                } else {
 2027|  58.1k|                    unicode_string_found = 1;
 2028|  58.1k|                }
 2029|  76.1k|                break;
 2030|  16.0k|            case JoinedStr_kind:
  ------------------
  |  Branch (2030:13): [True: 16.0k, False: 84.1k]
  ------------------
 2031|  16.0k|                f_string_found = 1;
 2032|  16.0k|                break;
 2033|      0|            case TemplateStr_kind:
  ------------------
  |  Branch (2033:13): [True: 0, False: 100k]
  ------------------
 2034|       |                // python.gram handles this; we should never get here
 2035|      0|                assert(0);
  ------------------
  |  Branch (2035:17): [Folded, False: 0]
  ------------------
 2036|      0|                break;
 2037|  8.05k|            default:
  ------------------
  |  Branch (2037:13): [True: 8.05k, False: 92.2k]
  ------------------
 2038|  8.05k|                f_string_found = 1;
 2039|  8.05k|                break;
 2040|   100k|        }
 2041|   100k|    }
 2042|       |
 2043|       |    // Cannot mix unicode and bytes
 2044|  66.2k|    if ((unicode_string_found || f_string_found) && bytes_found) {
  ------------------
  |  Branch (2044:10): [True: 43.7k, False: 22.5k]
  |  Branch (2044:34): [True: 8.42k, False: 14.1k]
  |  Branch (2044:53): [True: 30, False: 52.1k]
  ------------------
 2045|     30|        RAISE_SYNTAX_ERROR("cannot mix bytes and nonbytes literals");
  ------------------
  |  |  233|     30|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
 2046|     30|        return NULL;
 2047|     30|    }
 2048|       |
 2049|       |    // If it's only bytes or only unicode string, do a simple concat
 2050|  66.2k|    if (!f_string_found) {
  ------------------
  |  Branch (2050:9): [True: 46.8k, False: 19.3k]
  ------------------
 2051|  46.8k|        if (len == 1) {
  ------------------
  |  Branch (2051:13): [True: 44.3k, False: 2.55k]
  ------------------
 2052|  44.3k|            return asdl_seq_GET(strings, 0);
  ------------------
  |  |   82|  44.3k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  44.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2053|  44.3k|        }
 2054|  2.55k|        else if (bytes_found) {
  ------------------
  |  Branch (2054:18): [True: 856, False: 1.69k]
  ------------------
 2055|    856|            return _build_concatenated_bytes(p, strings, lineno, col_offset,
 2056|    856|                end_lineno, end_col_offset, arena);
 2057|    856|        }
 2058|  1.69k|        else {
 2059|  1.69k|            return _build_concatenated_unicode(p, strings, lineno, col_offset,
 2060|  1.69k|                end_lineno, end_col_offset, arena);
 2061|  1.69k|        }
 2062|  46.8k|    }
 2063|       |
 2064|  19.3k|    return _build_concatenated_joined_str(p, strings, lineno,
 2065|  19.3k|        col_offset, end_lineno, end_col_offset, arena);
 2066|  66.2k|}
_PyPegen_checked_from_import:
 2124|  4.29k|{
 2125|  4.29k|    identifier module = module_name->v.Name.id;
 2126|  4.29k|    int level = _PyPegen_seq_count_dots(dots);
 2127|  4.29k|    if (level == 0 && PyUnicode_CompareWithASCIIString(module, "__future__") == 0) {
  ------------------
  |  Branch (2127:9): [True: 4.18k, False: 108]
  |  Branch (2127:23): [True: 2.06k, False: 2.12k]
  ------------------
 2128|  2.06k|        if (lazy_token) {
  ------------------
  |  Branch (2128:13): [True: 1, False: 2.05k]
  ------------------
 2129|      1|            RAISE_SYNTAX_ERROR_KNOWN_LOCATION(lazy_token,
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
 2130|      1|                "lazy from __future__ import is not allowed");
 2131|      1|            return NULL;
 2132|      1|        }
 2133|  4.31k|        for (Py_ssize_t i = 0; i < asdl_seq_LEN(names); i++) {
  ------------------
  |  |   83|  4.31k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  8.63k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2133:32): [True: 2.26k, False: 2.05k]
  ------------------
 2134|  2.26k|            alias_ty alias = asdl_seq_GET(names, i);
  ------------------
  |  |   82|  2.26k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.26k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2135|  2.26k|            if (PyUnicode_CompareWithASCIIString(alias->name, "barry_as_FLUFL") == 0) {
  ------------------
  |  Branch (2135:17): [True: 0, False: 2.26k]
  ------------------
 2136|      0|                p->flags |= PyPARSE_BARRY_AS_BDFL;
  ------------------
  |  |   26|      0|#define PyPARSE_BARRY_AS_BDFL 0x0020
  ------------------
 2137|      0|                p->tok->barry_as_bdfl = 1;
 2138|      0|            }
 2139|  2.26k|        }
 2140|  2.05k|    }
 2141|  2.23k|    else if (
 2142|  2.23k|        level > 0
  ------------------
  |  Branch (2142:9): [True: 108, False: 2.12k]
  ------------------
 2143|    108|        && lazy_token == NULL
  ------------------
  |  Branch (2143:12): [True: 108, False: 0]
  ------------------
 2144|    108|        && PyUnicode_CompareWithASCIIString(module, "lazy") == 0
  ------------------
  |  Branch (2144:12): [True: 0, False: 108]
  ------------------
 2145|  2.23k|    ) {
 2146|      0|        if (_warn_relative_import_of_lazy(p, dots, module_name) < 0) {
  ------------------
  |  Branch (2146:13): [True: 0, False: 0]
  ------------------
 2147|      0|            return NULL;
 2148|      0|        }
 2149|      0|    }
 2150|  4.29k|    return _PyAST_ImportFrom(module, names, level, lazy_token ? 1 : 0, lineno,
  ------------------
  |  Branch (2150:52): [True: 13, False: 4.27k]
  ------------------
 2151|  4.29k|                             col_offset, end_lineno, end_col_offset, arena);
 2152|  4.29k|}
_PyPegen_register_stmts:
 2155|  54.6k|_PyPegen_register_stmts(Parser *p, asdl_stmt_seq* stmts) {
 2156|  54.6k|    if (!p->call_invalid_rules) {
  ------------------
  |  Branch (2156:9): [True: 45.5k, False: 9.07k]
  ------------------
 2157|  45.5k|        return stmts;
 2158|  45.5k|    }
 2159|  9.07k|    Py_ssize_t len = asdl_seq_LEN(stmts);
  ------------------
  |  |   83|  9.07k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  18.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 9.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2160|  9.07k|    if (len == 0) {
  ------------------
  |  Branch (2160:9): [True: 0, False: 9.07k]
  ------------------
 2161|      0|        return stmts;
 2162|      0|    }
 2163|  9.07k|    stmt_ty last_stmt = asdl_seq_GET(stmts, len - 1);
  ------------------
  |  |   82|  9.07k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  9.07k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2164|  9.07k|    if (p->last_stmt_location.lineno > last_stmt->lineno) {
  ------------------
  |  Branch (2164:9): [True: 914, False: 8.16k]
  ------------------
 2165|    914|        return stmts;
 2166|    914|    }
 2167|  8.16k|    p->last_stmt_location.lineno = last_stmt->lineno;
 2168|  8.16k|    p->last_stmt_location.col_offset = last_stmt->col_offset;
 2169|  8.16k|    p->last_stmt_location.end_lineno = last_stmt->end_lineno;
 2170|  8.16k|    p->last_stmt_location.end_col_offset = last_stmt->end_col_offset;
 2171|  8.16k|    return stmts;
 2172|  9.07k|}
action_helpers.c:_get_flattened_seq_size:
   75|  29.5k|{
   76|  29.5k|    Py_ssize_t size = 0;
   77|   192k|    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seqs); i < l; i++) {
  ------------------
  |  |   83|  29.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  59.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 29.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (77:52): [True: 163k, False: 29.5k]
  ------------------
   78|   163k|        asdl_seq *inner_seq = asdl_seq_GET_UNTYPED(seqs, i);
  ------------------
  |  |   81|   163k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   163k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   79|   163k|        size += asdl_seq_LEN(inner_seq);
  ------------------
  |  |   83|   163k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   326k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 163k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|   163k|    }
   81|  29.5k|    return size;
   82|  29.5k|}
action_helpers.c:_set_name_context:
  270|   555k|{
  271|   555k|    return _PyAST_Name(e->v.Name.id, ctx, EXTRA_EXPR(e, e));
  ------------------
  |  |  306|   555k|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  272|   555k|}
action_helpers.c:_set_tuple_context:
  276|  5.72k|{
  277|  5.72k|    asdl_expr_seq *seq = _set_seq_context(p, e->v.Tuple.elts, ctx);
  278|  5.72k|    if (!seq && PyErr_Occurred()) {
  ------------------
  |  Branch (278:9): [True: 5.47k, False: 253]
  |  Branch (278:17): [True: 0, False: 5.47k]
  ------------------
  279|      0|        return NULL;
  280|      0|    }
  281|  5.72k|    return _PyAST_Tuple(seq, ctx, EXTRA_EXPR(e, e));
  ------------------
  |  |  306|  5.72k|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  282|  5.72k|}
action_helpers.c:_set_seq_context:
  247|  7.79k|{
  248|  7.79k|    Py_ssize_t len = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  7.79k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  15.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 6.10k, False: 1.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|  7.79k|    if (len == 0) {
  ------------------
  |  Branch (249:9): [True: 6.10k, False: 1.69k]
  ------------------
  250|  6.10k|        return NULL;
  251|  6.10k|    }
  252|       |
  253|  1.69k|    asdl_expr_seq *new_seq = _Py_asdl_expr_seq_new(len, p->arena);
  254|  1.69k|    if (!new_seq) {
  ------------------
  |  Branch (254:9): [True: 0, False: 1.69k]
  ------------------
  255|      0|        return NULL;
  256|      0|    }
  257|  3.85k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (257:28): [True: 2.16k, False: 1.69k]
  ------------------
  258|  2.16k|        expr_ty e = asdl_seq_GET(seq, i);
  ------------------
  |  |   82|  2.16k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.16k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  259|  2.16k|        expr_ty new_e = _PyPegen_set_expr_context(p, e, ctx);
  260|  2.16k|        if (!new_e) {
  ------------------
  |  Branch (260:13): [True: 0, False: 2.16k]
  ------------------
  261|      0|            return NULL;
  262|      0|        }
  263|  2.16k|        asdl_seq_SET(new_seq, i, new_e);
  ------------------
  |  |   94|  2.16k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  2.16k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  264|  2.16k|    }
  265|  1.69k|    return new_seq;
  266|  1.69k|}
action_helpers.c:_set_list_context:
  286|  2.06k|{
  287|  2.06k|    asdl_expr_seq *seq = _set_seq_context(p, e->v.List.elts, ctx);
  288|  2.06k|    if (!seq && PyErr_Occurred()) {
  ------------------
  |  Branch (288:9): [True: 628, False: 1.44k]
  |  Branch (288:17): [True: 0, False: 628]
  ------------------
  289|      0|        return NULL;
  290|      0|    }
  291|  2.06k|    return _PyAST_List(seq, ctx, EXTRA_EXPR(e, e));
  ------------------
  |  |  306|  2.06k|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  292|  2.06k|}
action_helpers.c:_set_subscript_context:
  296|  9.52k|{
  297|  9.52k|    return _PyAST_Subscript(e->v.Subscript.value, e->v.Subscript.slice,
  298|  9.52k|                            ctx, EXTRA_EXPR(e, e));
  ------------------
  |  |  306|  9.52k|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  299|  9.52k|}
action_helpers.c:_set_attribute_context:
  303|  30.6k|{
  304|  30.6k|    return _PyAST_Attribute(e->v.Attribute.value, e->v.Attribute.attr,
  305|  30.6k|                            ctx, EXTRA_EXPR(e, e));
  ------------------
  |  |  306|  30.6k|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  306|  30.6k|}
action_helpers.c:_set_starred_context:
  310|     82|{
  311|     82|    expr_ty inner = _PyPegen_set_expr_context(p, e->v.Starred.value, ctx);
  312|     82|    if (!inner) {
  ------------------
  |  Branch (312:9): [True: 0, False: 82]
  ------------------
  313|      0|        return NULL;
  314|      0|    }
  315|     82|    return _PyAST_Starred(inner, ctx, EXTRA_EXPR(e, e));
  ------------------
  |  |  306|     82|#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena
  ------------------
  316|     82|}
action_helpers.c:_make_posonlyargs:
  552|  25.6k|                  asdl_arg_seq **posonlyargs) {
  553|  25.6k|    if (slash_without_default != NULL) {
  ------------------
  |  Branch (553:9): [True: 2.90k, False: 22.7k]
  ------------------
  554|  2.90k|        *posonlyargs = slash_without_default;
  555|  2.90k|    }
  556|  22.7k|    else if (slash_with_default != NULL) {
  ------------------
  |  Branch (556:14): [True: 1.47k, False: 21.3k]
  ------------------
  557|  1.47k|        asdl_arg_seq *slash_with_default_names =
  558|  1.47k|                _get_names(p, slash_with_default->names_with_defaults);
  559|  1.47k|        if (!slash_with_default_names) {
  ------------------
  |  Branch (559:13): [True: 0, False: 1.47k]
  ------------------
  560|      0|            return -1;
  561|      0|        }
  562|  1.47k|        *posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences(
  563|  1.47k|                p,
  564|  1.47k|                (asdl_seq*)slash_with_default->plain_names,
  565|  1.47k|                (asdl_seq*)slash_with_default_names);
  566|  1.47k|    }
  567|  21.3k|    else {
  568|  21.3k|        *posonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
  569|  21.3k|    }
  570|  25.6k|    return *posonlyargs == NULL ? -1 : 0;
  ------------------
  |  Branch (570:12): [True: 0, False: 25.6k]
  ------------------
  571|  25.6k|}
action_helpers.c:_get_names:
  520|  24.6k|{
  521|  24.6k|    Py_ssize_t len = asdl_seq_LEN(names_with_defaults);
  ------------------
  |  |   83|  24.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  49.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 24.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|  24.6k|    asdl_arg_seq *seq = _Py_asdl_arg_seq_new(len, p->arena);
  523|  24.6k|    if (!seq) {
  ------------------
  |  Branch (523:9): [True: 0, False: 24.6k]
  ------------------
  524|      0|        return NULL;
  525|      0|    }
  526|  36.9k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (526:28): [True: 12.2k, False: 24.6k]
  ------------------
  527|  12.2k|        NameDefaultPair *pair = asdl_seq_GET_UNTYPED(names_with_defaults, i);
  ------------------
  |  |   81|  12.2k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  12.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  528|  12.2k|        asdl_seq_SET(seq, i, pair->arg);
  ------------------
  |  |   94|  12.2k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  12.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  529|  12.2k|    }
  530|  24.6k|    return seq;
  531|  24.6k|}
action_helpers.c:_make_posargs:
  577|  25.6k|              asdl_arg_seq **posargs) {
  578|       |
  579|  25.6k|    if (names_with_default != NULL) {
  ------------------
  |  Branch (579:9): [True: 15.6k, False: 10.0k]
  ------------------
  580|  15.6k|        if (plain_names != NULL) {
  ------------------
  |  Branch (580:13): [True: 12.7k, False: 2.88k]
  ------------------
  581|  12.7k|            asdl_arg_seq *names_with_default_names = _get_names(p, names_with_default);
  582|  12.7k|            if (!names_with_default_names) {
  ------------------
  |  Branch (582:17): [True: 0, False: 12.7k]
  ------------------
  583|      0|                return -1;
  584|      0|            }
  585|  12.7k|            *posargs = (asdl_arg_seq*)_PyPegen_join_sequences(
  586|  12.7k|                    p,(asdl_seq*)plain_names, (asdl_seq*)names_with_default_names);
  587|  12.7k|        }
  588|  2.88k|        else {
  589|  2.88k|            *posargs = _get_names(p, names_with_default);
  590|  2.88k|        }
  591|  15.6k|    }
  592|  10.0k|    else {
  593|  10.0k|        if (plain_names != NULL) {
  ------------------
  |  Branch (593:13): [True: 0, False: 10.0k]
  ------------------
  594|       |            // With the current grammar, we never get here.
  595|       |            // If that has changed, remove the assert, and test thoroughly.
  596|      0|            assert(0);
  ------------------
  |  Branch (596:13): [Folded, False: 0]
  ------------------
  597|      0|            *posargs = plain_names;
  598|      0|        }
  599|  10.0k|        else {
  600|  10.0k|            *posargs = _Py_asdl_arg_seq_new(0, p->arena);
  601|  10.0k|        }
  602|  10.0k|    }
  603|  25.6k|    return *posargs == NULL ? -1 : 0;
  ------------------
  |  Branch (603:12): [True: 0, False: 25.6k]
  ------------------
  604|  25.6k|}
action_helpers.c:_make_posdefaults:
  610|  25.6k|                  asdl_expr_seq **posdefaults) {
  611|  25.6k|    if (slash_with_default != NULL && names_with_default != NULL) {
  ------------------
  |  Branch (611:9): [True: 1.47k, False: 24.2k]
  |  Branch (611:39): [True: 1.47k, False: 0]
  ------------------
  612|  1.47k|        asdl_expr_seq *slash_with_default_values =
  613|  1.47k|                _get_defaults(p, slash_with_default->names_with_defaults);
  614|  1.47k|        if (!slash_with_default_values) {
  ------------------
  |  Branch (614:13): [True: 0, False: 1.47k]
  ------------------
  615|      0|            return -1;
  616|      0|        }
  617|  1.47k|        asdl_expr_seq *names_with_default_values = _get_defaults(p, names_with_default);
  618|  1.47k|        if (!names_with_default_values) {
  ------------------
  |  Branch (618:13): [True: 0, False: 1.47k]
  ------------------
  619|      0|            return -1;
  620|      0|        }
  621|  1.47k|        *posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences(
  622|  1.47k|                p,
  623|  1.47k|                (asdl_seq*)slash_with_default_values,
  624|  1.47k|                (asdl_seq*)names_with_default_values);
  625|  1.47k|    }
  626|  24.2k|    else if (slash_with_default == NULL && names_with_default != NULL) {
  ------------------
  |  Branch (626:14): [True: 24.2k, False: 0]
  |  Branch (626:44): [True: 14.1k, False: 10.0k]
  ------------------
  627|  14.1k|        *posdefaults = _get_defaults(p, names_with_default);
  628|  14.1k|    }
  629|  10.0k|    else if (slash_with_default != NULL && names_with_default == NULL) {
  ------------------
  |  Branch (629:14): [True: 0, False: 10.0k]
  |  Branch (629:44): [True: 0, False: 0]
  ------------------
  630|      0|        *posdefaults = _get_defaults(p, slash_with_default->names_with_defaults);
  631|      0|    }
  632|  10.0k|    else {
  633|  10.0k|        *posdefaults = _Py_asdl_expr_seq_new(0, p->arena);
  634|  10.0k|    }
  635|  25.6k|    return *posdefaults == NULL ? -1 : 0;
  ------------------
  |  Branch (635:12): [True: 0, False: 25.6k]
  ------------------
  636|  25.6k|}
action_helpers.c:_get_defaults:
  535|  24.6k|{
  536|  24.6k|    Py_ssize_t len = asdl_seq_LEN(names_with_defaults);
  ------------------
  |  |   83|  24.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  49.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 24.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  24.6k|    asdl_expr_seq *seq = _Py_asdl_expr_seq_new(len, p->arena);
  538|  24.6k|    if (!seq) {
  ------------------
  |  Branch (538:9): [True: 0, False: 24.6k]
  ------------------
  539|      0|        return NULL;
  540|      0|    }
  541|  36.9k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (541:28): [True: 12.2k, False: 24.6k]
  ------------------
  542|  12.2k|        NameDefaultPair *pair = asdl_seq_GET_UNTYPED(names_with_defaults, i);
  ------------------
  |  |   81|  12.2k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  12.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  543|  12.2k|        asdl_seq_SET(seq, i, pair->value);
  ------------------
  |  |   94|  12.2k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  12.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  544|  12.2k|    }
  545|  24.6k|    return seq;
  546|  24.6k|}
action_helpers.c:_make_kwargs:
  641|  25.6k|             asdl_expr_seq **kwdefaults) {
  642|  25.6k|    if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
  ------------------
  |  Branch (642:9): [True: 11.2k, False: 14.4k]
  |  Branch (642:29): [True: 7.51k, False: 3.71k]
  ------------------
  643|  7.51k|        *kwonlyargs = _get_names(p, star_etc->kwonlyargs);
  644|  7.51k|    }
  645|  18.1k|    else {
  646|  18.1k|        *kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
  647|  18.1k|    }
  648|       |
  649|  25.6k|    if (*kwonlyargs == NULL) {
  ------------------
  |  Branch (649:9): [True: 0, False: 25.6k]
  ------------------
  650|      0|        return -1;
  651|      0|    }
  652|       |
  653|  25.6k|    if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
  ------------------
  |  Branch (653:9): [True: 11.2k, False: 14.4k]
  |  Branch (653:29): [True: 7.51k, False: 3.71k]
  ------------------
  654|  7.51k|        *kwdefaults = _get_defaults(p, star_etc->kwonlyargs);
  655|  7.51k|    }
  656|  18.1k|    else {
  657|  18.1k|        *kwdefaults = _Py_asdl_expr_seq_new(0, p->arena);
  658|  18.1k|    }
  659|       |
  660|  25.6k|    if (*kwdefaults == NULL) {
  ------------------
  |  Branch (660:9): [True: 0, False: 25.6k]
  ------------------
  661|      0|        return -1;
  662|      0|    }
  663|       |
  664|  25.6k|    return 0;
  665|  25.6k|}
action_helpers.c:_seq_number_of_starred_exprs:
  809|  29.2k|{
  810|  29.2k|    int n = 0;
  811|  84.2k|    for (Py_ssize_t i = 0, l = asdl_seq_LEN(seq); i < l; i++) {
  ------------------
  |  |   83|  29.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  58.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 29.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (811:51): [True: 55.0k, False: 29.2k]
  ------------------
  812|  55.0k|        KeywordOrStarred *k = asdl_seq_GET_UNTYPED(seq, i);
  ------------------
  |  |   81|  55.0k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  55.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  813|  55.0k|        if (!k->is_keyword) {
  ------------------
  |  Branch (813:13): [True: 7.60k, False: 47.4k]
  ------------------
  814|  7.60k|            n++;
  815|  7.60k|        }
  816|  55.0k|    }
  817|  29.2k|    return n;
  818|  29.2k|}
action_helpers.c:formatted_string_prefix:
 1021|     28|{
 1022|     28|    int nested = 0;
 1023|    152|    for (int i = p->mark - 1; i >= 0; i--) {
  ------------------
  |  Branch (1023:31): [True: 152, False: 0]
  ------------------
 1024|    152|        int type = p->tokens[i]->type;
 1025|    152|        if (type == FSTRING_END || type == TSTRING_END) {
  ------------------
  |  |   77|    304|#define FSTRING_END     61
  ------------------
                      if (type == FSTRING_END || type == TSTRING_END) {
  ------------------
  |  |   80|    152|#define TSTRING_END     64
  ------------------
  |  Branch (1025:13): [True: 0, False: 152]
  |  Branch (1025:36): [True: 0, False: 152]
  ------------------
 1026|      0|            nested++;
 1027|      0|        }
 1028|    152|        else if (type == FSTRING_START || type == TSTRING_START) {
  ------------------
  |  |   75|    304|#define FSTRING_START   59
  ------------------
                      else if (type == FSTRING_START || type == TSTRING_START) {
  ------------------
  |  |   78|    132|#define TSTRING_START   62
  ------------------
  |  Branch (1028:18): [True: 20, False: 132]
  |  Branch (1028:43): [True: 8, False: 124]
  ------------------
 1029|     28|            if (nested == 0) {
  ------------------
  |  Branch (1029:17): [True: 28, False: 0]
  ------------------
 1030|     28|                return type == TSTRING_START ? 't' : 'f';
  ------------------
  |  |   78|     28|#define TSTRING_START   62
  ------------------
  |  Branch (1030:24): [True: 8, False: 20]
  ------------------
 1031|     28|            }
 1032|      0|            nested--;
 1033|      0|        }
 1034|    152|    }
 1035|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1036|     28|}
action_helpers.c:result_token_with_metadata:
 1009|  23.2k|{
 1010|  23.2k|    ResultTokenWithMetadata *res = _PyArena_Malloc(p->arena, sizeof(ResultTokenWithMetadata));
 1011|  23.2k|    if (res == NULL) {
  ------------------
  |  Branch (1011:9): [True: 0, False: 23.2k]
  ------------------
 1012|      0|        return NULL;
 1013|      0|    }
 1014|  23.2k|    res->metadata = metadata;
 1015|  23.2k|    res->result = result;
 1016|  23.2k|    return res;
 1017|  23.2k|}
action_helpers.c:_get_resized_exprs:
 1391|  23.7k|{
 1392|  23.7k|    Py_ssize_t n_items = asdl_seq_LEN(raw_expressions);
  ------------------
  |  |   83|  23.7k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  47.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 23.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1393|  23.7k|    Py_ssize_t total_items = n_items;
 1394|  94.7k|    for (Py_ssize_t i = 0; i < n_items; i++) {
  ------------------
  |  Branch (1394:28): [True: 71.0k, False: 23.7k]
  ------------------
 1395|  71.0k|        expr_ty item = asdl_seq_GET(raw_expressions, i);
  ------------------
  |  |   82|  71.0k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  71.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1396|  71.0k|        if (item->kind == JoinedStr_kind) {
  ------------------
  |  Branch (1396:13): [True: 920, False: 70.1k]
  ------------------
 1397|    920|            total_items += asdl_seq_LEN(item->v.JoinedStr.values) - 1;
  ------------------
  |  |   83|    920|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 920]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|    920|        }
 1399|  71.0k|    }
 1400|       |
 1401|  23.7k|    const char* quote_str = PyBytes_AsString(a->bytes);
 1402|  23.7k|    if (quote_str == NULL) {
  ------------------
  |  Branch (1402:9): [True: 0, False: 23.7k]
  ------------------
 1403|      0|        return NULL;
 1404|      0|    }
 1405|  23.7k|    int is_raw = strpbrk(quote_str, "rR") != NULL;
 1406|       |
 1407|  23.7k|    asdl_expr_seq *seq = _Py_asdl_expr_seq_new(total_items, p->arena);
 1408|  23.7k|    if (seq == NULL) {
  ------------------
  |  Branch (1408:9): [True: 0, False: 23.7k]
  ------------------
 1409|      0|        return NULL;
 1410|      0|    }
 1411|       |
 1412|  23.7k|    Py_ssize_t index = 0;
 1413|  94.7k|    for (Py_ssize_t i = 0; i < n_items; i++) {
  ------------------
  |  Branch (1413:28): [True: 71.0k, False: 23.7k]
  ------------------
 1414|  71.0k|        expr_ty item = asdl_seq_GET(raw_expressions, i);
  ------------------
  |  |   82|  71.0k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  71.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1415|       |
 1416|       |        /* Debug expressions arrive as JoinedStr(text, value); flatten them
 1417|       |           into the surrounding string. */
 1418|  71.0k|        if (item->kind == JoinedStr_kind) {
  ------------------
  |  Branch (1418:13): [True: 920, False: 70.1k]
  ------------------
 1419|    920|            asdl_expr_seq *values = item->v.JoinedStr.values;
 1420|    920|            if (asdl_seq_LEN(values) != 2) {
  ------------------
  |  |   83|    920|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 920]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1420:17): [True: 0, False: 920]
  ------------------
 1421|      0|                PyErr_Format(PyExc_SystemError,
 1422|      0|                             is_tstring
  ------------------
  |  Branch (1422:30): [True: 0, False: 0]
  ------------------
 1423|      0|                             ? "unexpected TemplateStr node without debug data in t-string at line %d"
 1424|      0|                             : "unexpected JoinedStr node without debug data in f-string at line %d",
 1425|      0|                             item->lineno);
 1426|      0|                return NULL;
 1427|      0|            }
 1428|       |
 1429|    920|            expr_ty first = asdl_seq_GET(values, 0);
  ------------------
  |  |   82|    920|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    920|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1430|    920|            assert(first->kind == Constant_kind);
  ------------------
  |  Branch (1430:13): [True: 920, False: 0]
  ------------------
 1431|    920|            asdl_seq_SET(seq, index++, first);
  ------------------
  |  |   94|    920|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    920|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1432|       |
 1433|    920|            expr_ty second = asdl_seq_GET(values, 1);
  ------------------
  |  |   82|    920|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    920|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1434|    920|            assert((is_tstring &&
  ------------------
  |  Branch (1434:13): [True: 569, False: 351]
  |  Branch (1434:13): [True: 569, False: 0]
  |  Branch (1434:13): [True: 351, False: 0]
  ------------------
 1435|    920|                    second->kind == Interpolation_kind) ||
 1436|    920|                   second->kind == FormattedValue_kind);
 1437|    920|            asdl_seq_SET(seq, index++, second);
  ------------------
  |  |   94|    920|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    920|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1438|       |
 1439|    920|            continue;
 1440|    920|        }
 1441|       |
 1442|  70.1k|        if (item->kind == Constant_kind) {
  ------------------
  |  Branch (1442:13): [True: 56.2k, False: 13.8k]
  ------------------
 1443|  56.2k|            item = _PyPegen_decode_fstring_part(p, is_raw, item, b);
 1444|  56.2k|            if (item == NULL) {
  ------------------
  |  Branch (1444:17): [True: 8, False: 56.2k]
  ------------------
 1445|      8|                return NULL;
 1446|      8|            }
 1447|       |
 1448|       |            /* Tokenizer emits string parts even when the underlying string
 1449|       |            might become an empty value (e.g. FSTRING_MIDDLE with the value \\n)
 1450|       |            so we need to check for them and simplify it here. */
 1451|  56.2k|            if (PyUnicode_CheckExact(item->v.Constant.value)
  ------------------
  |  |  104|  56.2k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   112k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  56.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  56.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 56.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1452|  56.2k|                && PyUnicode_GET_LENGTH(item->v.Constant.value) == 0) {
  ------------------
  |  |  299|  56.2k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1452:20): [True: 1.64k, False: 54.6k]
  ------------------
 1453|  1.64k|                continue;
 1454|  1.64k|            }
 1455|  56.2k|        }
 1456|  68.4k|        asdl_seq_SET(seq, index++, item);
  ------------------
  |  |   94|  68.4k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  68.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1457|  68.4k|    }
 1458|       |
 1459|  23.7k|    asdl_expr_seq *resized_exprs;
 1460|  23.7k|    if (index != total_items) {
  ------------------
  |  Branch (1460:9): [True: 1.50k, False: 22.2k]
  ------------------
 1461|  1.50k|        resized_exprs = _Py_asdl_expr_seq_new(index, p->arena);
 1462|  1.50k|        if (resized_exprs == NULL) {
  ------------------
  |  Branch (1462:13): [True: 0, False: 1.50k]
  ------------------
 1463|      0|            return NULL;
 1464|      0|        }
 1465|  2.54k|        for (Py_ssize_t i = 0; i < index; i++) {
  ------------------
  |  Branch (1465:32): [True: 1.04k, False: 1.50k]
  ------------------
 1466|  1.04k|            asdl_seq_SET(resized_exprs, i, asdl_seq_GET(seq, i));
  ------------------
  |  |   94|  1.04k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.04k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1467|  1.04k|        }
 1468|  1.50k|    }
 1469|  22.2k|    else {
 1470|  22.2k|        resized_exprs = seq;
 1471|  22.2k|    }
 1472|  23.7k|    return resized_exprs;
 1473|  23.7k|}
action_helpers.c:_PyPegen_decode_fstring_part:
 1358|  56.2k|_PyPegen_decode_fstring_part(Parser* p, int is_raw, expr_ty constant, Token* token) {
 1359|  56.2k|    assert(PyUnicode_CheckExact(constant->v.Constant.value));
  ------------------
  |  Branch (1359:5): [True: 56.2k, False: 0]
  ------------------
 1360|       |
 1361|  56.2k|    const char* bstr = PyUnicode_AsUTF8(constant->v.Constant.value);
 1362|  56.2k|    if (bstr == NULL) {
  ------------------
  |  Branch (1362:9): [True: 0, False: 56.2k]
  ------------------
 1363|      0|        return NULL;
 1364|      0|    }
 1365|       |
 1366|  56.2k|    size_t len;
 1367|  56.2k|    if (strcmp(bstr, "{{") == 0 || strcmp(bstr, "}}") == 0) {
  ------------------
  |  Branch (1367:9): [True: 0, False: 56.2k]
  |  Branch (1367:36): [True: 0, False: 56.2k]
  ------------------
 1368|      0|        len = 1;
 1369|  56.2k|    } else {
 1370|  56.2k|        len = strlen(bstr);
 1371|  56.2k|    }
 1372|       |
 1373|  56.2k|    is_raw = is_raw || strchr(bstr, '\\') == NULL;
  ------------------
  |  Branch (1373:14): [True: 10.8k, False: 45.4k]
  |  Branch (1373:24): [True: 36.6k, False: 8.84k]
  ------------------
 1374|  56.2k|    PyObject *str = _PyPegen_decode_string(p, is_raw, bstr, len, token);
 1375|  56.2k|    if (str == NULL) {
  ------------------
  |  Branch (1375:9): [True: 8, False: 56.2k]
  ------------------
 1376|      8|        _Pypegen_raise_decode_error(p);
 1377|      8|        return NULL;
 1378|      8|    }
 1379|  56.2k|    if (_PyArena_AddPyObject(p->arena, str) < 0) {
  ------------------
  |  Branch (1379:9): [True: 0, False: 56.2k]
  ------------------
 1380|      0|        Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1381|      0|        return NULL;
 1382|      0|    }
 1383|  56.2k|    return _PyAST_Constant(str, NULL, constant->lineno, constant->col_offset,
 1384|  56.2k|                           constant->end_lineno, constant->end_col_offset,
 1385|  56.2k|                           p->arena);
 1386|  56.2k|}
action_helpers.c:_get_interpolation_conversion:
 1566|  26.7k|{
 1567|  26.7k|    if (conversion != NULL) {
  ------------------
  |  Branch (1567:9): [True: 5.84k, False: 20.9k]
  ------------------
 1568|  5.84k|        expr_ty conversion_expr = (expr_ty) conversion->result;
 1569|  5.84k|        assert(conversion_expr->kind == Name_kind);
  ------------------
  |  Branch (1569:9): [True: 5.84k, False: 0]
  ------------------
 1570|  5.84k|        Py_UCS4 first = PyUnicode_READ_CHAR(conversion_expr->v.Name.id, 0);
  ------------------
  |  |  381|  5.84k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  5.84k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.84k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|  5.84k|        return Py_SAFE_DOWNCAST(first, Py_UCS4, int);
  ------------------
  |  |  247|  5.84k|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  5.84k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1572|  5.84k|    }
 1573|  20.9k|    else if (debug && !format) {
  ------------------
  |  Branch (1573:14): [True: 2.57k, False: 18.3k]
  |  Branch (1573:23): [True: 1.03k, False: 1.54k]
  ------------------
 1574|       |        /* If no conversion is specified, use !r for debug expressions */
 1575|  1.03k|        return (int)'r';
 1576|  1.03k|    }
 1577|  19.8k|    return -1;
 1578|  26.7k|}
action_helpers.c:_strip_interpolation_debug_expr:
 1582|  1.14k|{
 1583|  1.14k|    Py_ssize_t len = PyUnicode_GET_LENGTH(exprstr);
  ------------------
  |  |  299|  1.14k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.14k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1584|       |
 1585|       |    /* Discard whitespace and explicit line continuations after the debug "="
 1586|       |       but preserve whitespace before it. */
 1587|  1.14k|    while (len > 0) {
  ------------------
  |  Branch (1587:12): [True: 1.14k, False: 0]
  ------------------
 1588|  1.14k|        int has_newline = 0;
 1589|  1.18k|        while (len > 0) {
  ------------------
  |  Branch (1589:16): [True: 1.18k, False: 0]
  ------------------
 1590|  1.18k|            Py_UCS4 c = PyUnicode_READ_CHAR(exprstr, len - 1);
  ------------------
  |  |  381|  1.18k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  1.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1591|  1.18k|            if (!_PyUnicode_IsWhitespace(c)) {
  ------------------
  |  Branch (1591:17): [True: 1.14k, False: 34]
  ------------------
 1592|  1.14k|                break;
 1593|  1.14k|            }
 1594|     34|            if (c == '\r' || c == '\n') {
  ------------------
  |  Branch (1594:17): [True: 0, False: 34]
  |  Branch (1594:30): [True: 0, False: 34]
  ------------------
 1595|      0|                has_newline = 1;
 1596|      0|            }
 1597|     34|            len--;
 1598|     34|        }
 1599|  1.14k|        if (!has_newline || len == 0 ||
  ------------------
  |  Branch (1599:13): [True: 1.14k, False: 0]
  |  Branch (1599:29): [True: 0, False: 0]
  ------------------
 1600|      0|            PyUnicode_READ_CHAR(exprstr, len - 1) != '\\')
  ------------------
  |  |  381|      0|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1600:13): [True: 0, False: 0]
  ------------------
 1601|  1.14k|        {
 1602|  1.14k|            break;
 1603|  1.14k|        }
 1604|      0|        len--;
 1605|      0|    }
 1606|       |
 1607|       |    /* Preserve unexpected metadata instead of dropping source text. */
 1608|  1.14k|    if (len == 0 || PyUnicode_READ_CHAR(exprstr, len - 1) != '=') {
  ------------------
  |  |  381|  1.14k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  1.14k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1608:9): [True: 0, False: 1.14k]
  |  Branch (1608:21): [True: 0, False: 1.14k]
  ------------------
 1609|      0|        return Py_NewRef(exprstr);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1610|      0|    }
 1611|       |
 1612|  1.14k|    return PyUnicode_Substring(exprstr, 0, len - 1);
 1613|  1.14k|}
action_helpers.c:_build_concatenated_str:
 1828|  22.8k|{
 1829|  22.8k|    Py_ssize_t len = asdl_seq_LEN(strings);
  ------------------
  |  |   83|  22.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  45.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 22.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1830|  22.8k|    assert(len > 0);
  ------------------
  |  Branch (1830:5): [True: 22.8k, False: 0]
  ------------------
 1831|       |
 1832|  22.8k|    Py_ssize_t n_flattened_elements = 0;
 1833|  72.5k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (1833:28): [True: 49.7k, False: 22.8k]
  ------------------
 1834|  49.7k|        expr_ty elem = asdl_seq_GET(strings, i);
  ------------------
  |  |   82|  49.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  49.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1835|  49.7k|        switch(elem->kind) {
 1836|  16.0k|            case JoinedStr_kind:
  ------------------
  |  Branch (1836:13): [True: 16.0k, False: 33.6k]
  ------------------
 1837|  16.0k|                n_flattened_elements += asdl_seq_LEN(elem->v.JoinedStr.values);
  ------------------
  |  |   83|  16.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  32.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 16.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1838|  16.0k|                break;
 1839|  3.67k|            case TemplateStr_kind:
  ------------------
  |  Branch (1839:13): [True: 3.67k, False: 46.0k]
  ------------------
 1840|  3.67k|                n_flattened_elements += asdl_seq_LEN(elem->v.TemplateStr.values);
  ------------------
  |  |   83|  3.67k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  7.34k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1841|  3.67k|                break;
 1842|  29.9k|            default:
  ------------------
  |  Branch (1842:13): [True: 29.9k, False: 19.7k]
  ------------------
 1843|  29.9k|                n_flattened_elements++;
 1844|  29.9k|                break;
 1845|  49.7k|        }
 1846|  49.7k|    }
 1847|       |
 1848|       |
 1849|  22.8k|    asdl_expr_seq* flattened = _Py_asdl_expr_seq_new(n_flattened_elements, p->arena);
 1850|  22.8k|    if (flattened == NULL) {
  ------------------
  |  Branch (1850:9): [True: 0, False: 22.8k]
  ------------------
 1851|      0|        return NULL;
 1852|      0|    }
 1853|       |
 1854|       |    /* build flattened list */
 1855|  22.8k|    Py_ssize_t current_pos = 0;
 1856|  72.5k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (1856:28): [True: 49.7k, False: 22.8k]
  ------------------
 1857|  49.7k|        expr_ty elem = asdl_seq_GET(strings, i);
  ------------------
  |  |   82|  49.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  49.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1858|  49.7k|        switch(elem->kind) {
 1859|  16.0k|            case JoinedStr_kind:
  ------------------
  |  Branch (1859:13): [True: 16.0k, False: 33.6k]
  ------------------
 1860|  62.2k|                for (Py_ssize_t j = 0; j < asdl_seq_LEN(elem->v.JoinedStr.values); j++) {
  ------------------
  |  |   83|  62.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   124k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 62.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1860:40): [True: 46.2k, False: 16.0k]
  ------------------
 1861|  46.2k|                    expr_ty subvalue = asdl_seq_GET(elem->v.JoinedStr.values, j);
  ------------------
  |  |   82|  46.2k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  46.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1862|  46.2k|                    if (subvalue == NULL) {
  ------------------
  |  Branch (1862:25): [True: 0, False: 46.2k]
  ------------------
 1863|      0|                        return NULL;
 1864|      0|                    }
 1865|  46.2k|                    asdl_seq_SET(flattened, current_pos++, subvalue);
  ------------------
  |  |   94|  46.2k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  46.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1866|  46.2k|                }
 1867|  16.0k|                break;
 1868|  16.0k|            case TemplateStr_kind:
  ------------------
  |  Branch (1868:13): [True: 3.67k, False: 46.0k]
  ------------------
 1869|  20.3k|                for (Py_ssize_t j = 0; j < asdl_seq_LEN(elem->v.TemplateStr.values); j++) {
  ------------------
  |  |   83|  20.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  40.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 20.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1869:40): [True: 16.6k, False: 3.67k]
  ------------------
 1870|  16.6k|                    expr_ty subvalue = asdl_seq_GET(elem->v.TemplateStr.values, j);
  ------------------
  |  |   82|  16.6k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  16.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1871|  16.6k|                    if (subvalue == NULL) {
  ------------------
  |  Branch (1871:25): [True: 0, False: 16.6k]
  ------------------
 1872|      0|                        return NULL;
 1873|      0|                    }
 1874|  16.6k|                    asdl_seq_SET(flattened, current_pos++, subvalue);
  ------------------
  |  |   94|  16.6k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  16.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1875|  16.6k|                }
 1876|  3.67k|                break;
 1877|  29.9k|            default:
  ------------------
  |  Branch (1877:13): [True: 29.9k, False: 19.7k]
  ------------------
 1878|  29.9k|                asdl_seq_SET(flattened, current_pos++, elem);
  ------------------
  |  |   94|  29.9k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  29.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1879|  29.9k|                break;
 1880|  49.7k|        }
 1881|  49.7k|    }
 1882|       |
 1883|       |    /* calculate folded element count */
 1884|  22.8k|    Py_ssize_t n_elements = 0;
 1885|  22.8k|    int prev_is_constant = 0;
 1886|   115k|    for (Py_ssize_t i = 0; i < n_flattened_elements; i++) {
  ------------------
  |  Branch (1886:28): [True: 92.8k, False: 22.8k]
  ------------------
 1887|  92.8k|        expr_ty elem = asdl_seq_GET(flattened, i);
  ------------------
  |  |   82|  92.8k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  92.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1888|       |
 1889|       |        /* The concatenation of a FormattedValue and an empty Constant should
 1890|       |           lead to the FormattedValue itself. Thus, we will not take any empty
 1891|       |           constants into account, just as in `_PyPegen_joined_str` */
 1892|  92.8k|        if (elem->kind == Constant_kind &&
  ------------------
  |  Branch (1892:13): [True: 70.3k, False: 22.4k]
  ------------------
 1893|  92.8k|            PyUnicode_CheckExact(elem->v.Constant.value) &&
  ------------------
  |  |  104|  70.3k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   163k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  70.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  70.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 70.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1894|  70.3k|            PyUnicode_GET_LENGTH(elem->v.Constant.value) == 0)
  ------------------
  |  |  299|  70.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  70.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  70.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1894:13): [True: 4.63k, False: 65.7k]
  ------------------
 1895|  4.63k|            continue;
 1896|       |
 1897|  88.1k|        if (!prev_is_constant || elem->kind != Constant_kind) {
  ------------------
  |  Branch (1897:13): [True: 36.6k, False: 51.5k]
  |  Branch (1897:34): [True: 18.0k, False: 33.5k]
  ------------------
 1898|  54.6k|            n_elements++;
 1899|  54.6k|        }
 1900|  88.1k|        prev_is_constant = elem->kind == Constant_kind;
 1901|  88.1k|    }
 1902|       |
 1903|  22.8k|    asdl_expr_seq* values = _Py_asdl_expr_seq_new(n_elements, p->arena);
 1904|  22.8k|    if (values == NULL) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 22.8k]
  ------------------
 1905|      0|        return NULL;
 1906|      0|    }
 1907|       |
 1908|       |    /* build folded list */
 1909|  22.8k|    current_pos = 0;
 1910|  77.5k|    for (Py_ssize_t i = 0; i < n_flattened_elements; i++) {
  ------------------
  |  Branch (1910:28): [True: 54.7k, False: 22.8k]
  ------------------
 1911|  54.7k|        expr_ty elem = asdl_seq_GET(flattened, i);
  ------------------
  |  |   82|  54.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  54.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1912|       |
 1913|       |        /* if the current elem and the following are constants,
 1914|       |           fold them and all consequent constants */
 1915|  54.7k|        if (elem->kind == Constant_kind) {
  ------------------
  |  Branch (1915:13): [True: 32.3k, False: 22.4k]
  ------------------
 1916|  32.3k|            if (i + 1 < n_flattened_elements &&
  ------------------
  |  Branch (1916:17): [True: 23.1k, False: 9.19k]
  ------------------
 1917|  23.1k|                asdl_seq_GET(flattened, i + 1)->kind == Constant_kind) {
  ------------------
  |  |   82|  23.1k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  23.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (1917:17): [True: 11.2k, False: 11.9k]
  ------------------
 1918|  11.2k|                expr_ty first_elem = elem;
 1919|       |
 1920|       |                /* When a string is getting concatenated, the kind of the string
 1921|       |                   is determined by the first string in the concatenation
 1922|       |                   sequence.
 1923|       |
 1924|       |                   u"abc" "def" -> u"abcdef"
 1925|       |                   "abc" u"abc" ->  "abcabc" */
 1926|  11.2k|                PyObject *kind = elem->v.Constant.kind;
 1927|       |
 1928|  11.2k|                PyUnicodeWriter *writer = PyUnicodeWriter_Create(0);
 1929|  11.2k|                if (writer == NULL) {
  ------------------
  |  Branch (1929:21): [True: 0, False: 11.2k]
  ------------------
 1930|      0|                    return NULL;
 1931|      0|                }
 1932|  11.2k|                expr_ty last_elem = elem;
 1933|  11.2k|                Py_ssize_t j;
 1934|  60.4k|                for (j = i; j < n_flattened_elements; j++) {
  ------------------
  |  Branch (1934:29): [True: 55.3k, False: 5.09k]
  ------------------
 1935|  55.3k|                    expr_ty current_elem = asdl_seq_GET(flattened, j);
  ------------------
  |  |   82|  55.3k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  55.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1936|  55.3k|                    if (current_elem->kind == Constant_kind) {
  ------------------
  |  Branch (1936:25): [True: 49.2k, False: 6.11k]
  ------------------
 1937|  49.2k|                        if (PyUnicodeWriter_WriteStr(writer,
  ------------------
  |  Branch (1937:29): [True: 0, False: 49.2k]
  ------------------
 1938|  49.2k|                                                     current_elem->v.Constant.value)) {
 1939|      0|                            PyUnicodeWriter_Discard(writer);
 1940|      0|                            return NULL;
 1941|      0|                        }
 1942|  49.2k|                        last_elem = current_elem;
 1943|  49.2k|                    } else {
 1944|  6.11k|                        break;
 1945|  6.11k|                    }
 1946|  55.3k|                }
 1947|  11.2k|                i = j - 1;
 1948|       |
 1949|  11.2k|                PyObject *concat_str = PyUnicodeWriter_Finish(writer);
 1950|  11.2k|                if (concat_str == NULL) {
  ------------------
  |  Branch (1950:21): [True: 0, False: 11.2k]
  ------------------
 1951|      0|                    return NULL;
 1952|      0|                }
 1953|  11.2k|                if (_PyArena_AddPyObject(p->arena, concat_str) < 0) {
  ------------------
  |  Branch (1953:21): [True: 0, False: 11.2k]
  ------------------
 1954|      0|                    Py_DECREF(concat_str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1955|      0|                    return NULL;
 1956|      0|                }
 1957|  11.2k|                elem = _PyAST_Constant(concat_str, kind, first_elem->lineno,
 1958|  11.2k|                                       first_elem->col_offset,
 1959|  11.2k|                                       last_elem->end_lineno,
 1960|  11.2k|                                       last_elem->end_col_offset, p->arena);
 1961|  11.2k|                if (elem == NULL) {
  ------------------
  |  Branch (1961:21): [True: 0, False: 11.2k]
  ------------------
 1962|      0|                    return NULL;
 1963|      0|                }
 1964|  11.2k|            }
 1965|       |
 1966|       |            /* Drop all empty contanst strings */
 1967|  32.3k|            if (PyUnicode_CheckExact(elem->v.Constant.value) &&
  ------------------
  |  |  104|  32.3k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  64.6k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  32.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  32.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 32.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1968|  32.3k|                PyUnicode_GET_LENGTH(elem->v.Constant.value) == 0) {
  ------------------
  |  |  299|  32.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1968:17): [True: 122, False: 32.2k]
  ------------------
 1969|    122|                continue;
 1970|    122|            }
 1971|  32.3k|        }
 1972|       |
 1973|  54.6k|        asdl_seq_SET(values, current_pos++, elem);
  ------------------
  |  |   94|  54.6k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  54.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1974|  54.6k|    }
 1975|       |
 1976|  22.8k|    assert(current_pos == n_elements);
  ------------------
  |  Branch (1976:5): [True: 22.8k, False: 0]
  ------------------
 1977|  22.8k|    return values;
 1978|  22.8k|}
action_helpers.c:_build_concatenated_bytes:
 1729|    856|{
 1730|    856|    Py_ssize_t len = asdl_seq_LEN(strings);
  ------------------
  |  |   83|    856|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.71k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 856]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1731|    856|    assert(len > 0);
  ------------------
  |  Branch (1731:5): [True: 856, False: 0]
  ------------------
 1732|       |
 1733|       |    /* Bytes literals never get a kind, but just for consistency
 1734|       |        since they are represented as Constant nodes, we'll mirror
 1735|       |        the same behavior as unicode strings for determining the
 1736|       |        kind. */
 1737|    856|    PyObject *kind = asdl_seq_GET(strings, 0)->v.Constant.kind;
  ------------------
  |  |   82|    856|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    856|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1738|       |
 1739|    856|    Py_ssize_t total = 0;
 1740|  5.21k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (1740:28): [True: 4.35k, False: 856]
  ------------------
 1741|  4.35k|        expr_ty elem = asdl_seq_GET(strings, i);
  ------------------
  |  |   82|  4.35k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  4.35k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1742|  4.35k|        PyObject *bytes = elem->v.Constant.value;
 1743|  4.35k|        Py_ssize_t part = PyBytes_GET_SIZE(bytes);
  ------------------
  |  |   33|  4.35k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  4.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1744|  4.35k|        if (part > PY_SSIZE_T_MAX - total) {
  ------------------
  |  |  137|  4.35k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1744:13): [True: 0, False: 4.35k]
  ------------------
 1745|      0|            PyErr_NoMemory();
 1746|      0|            return NULL;
 1747|      0|        }
 1748|  4.35k|        total += part;
 1749|  4.35k|    }
 1750|       |
 1751|    856|    PyBytesWriter *writer = PyBytesWriter_Create(total);
 1752|    856|    if (writer == NULL) {
  ------------------
  |  Branch (1752:9): [True: 0, False: 856]
  ------------------
 1753|      0|        return NULL;
 1754|      0|    }
 1755|    856|    char *out = PyBytesWriter_GetData(writer);
 1756|       |
 1757|  5.21k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (1757:28): [True: 4.35k, False: 856]
  ------------------
 1758|  4.35k|        expr_ty elem = asdl_seq_GET(strings, i);
  ------------------
  |  |   82|  4.35k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  4.35k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1759|  4.35k|        PyObject *bytes = elem->v.Constant.value;
 1760|  4.35k|        Py_ssize_t part = PyBytes_GET_SIZE(bytes);
  ------------------
  |  |   33|  4.35k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  4.35k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.35k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|  4.35k|        if (part > 0) {
  ------------------
  |  Branch (1761:13): [True: 2.86k, False: 1.49k]
  ------------------
 1762|  2.86k|            memcpy(out, PyBytes_AS_STRING(bytes), part);
  ------------------
  |  |   27|  2.86k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.86k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.86k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1763|  2.86k|            out += part;
 1764|  2.86k|        }
 1765|  4.35k|    }
 1766|       |
 1767|    856|    PyObject *res = PyBytesWriter_Finish(writer);
 1768|    856|    if (res == NULL) {
  ------------------
  |  Branch (1768:9): [True: 0, False: 856]
  ------------------
 1769|      0|        return NULL;
 1770|      0|    }
 1771|    856|    if (_PyArena_AddPyObject(arena, res) < 0) {
  ------------------
  |  Branch (1771:9): [True: 0, False: 856]
  ------------------
 1772|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1773|      0|        return NULL;
 1774|      0|    }
 1775|    856|    return _PyAST_Constant(res, kind, lineno, col_offset, end_lineno, end_col_offset, p->arena);
 1776|    856|}
action_helpers.c:_build_concatenated_unicode:
 1782|  1.69k|{
 1783|  1.69k|    Py_ssize_t len = asdl_seq_LEN(strings);
  ------------------
  |  |   83|  1.69k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.39k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1784|  1.69k|    assert(len > 1);
  ------------------
  |  Branch (1784:5): [True: 1.69k, False: 0]
  ------------------
 1785|       |
 1786|  1.69k|    expr_ty first = asdl_seq_GET(strings, 0);
  ------------------
  |  |   82|  1.69k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.69k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1787|       |
 1788|       |    /* When a string is getting concatenated, the kind of the string
 1789|       |        is determined by the first string in the concatenation
 1790|       |        sequence.
 1791|       |
 1792|       |        u"abc" "def" -> u"abcdef"
 1793|       |        "abc" u"abc" ->  "abcabc" */
 1794|  1.69k|    PyObject *kind = first->v.Constant.kind;
 1795|       |
 1796|  1.69k|    PyUnicodeWriter *writer = PyUnicodeWriter_Create(0);
 1797|  1.69k|    if (writer == NULL) {
  ------------------
  |  Branch (1797:9): [True: 0, False: 1.69k]
  ------------------
 1798|      0|        return NULL;
 1799|      0|    }
 1800|       |
 1801|  6.83k|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (1801:28): [True: 5.13k, False: 1.69k]
  ------------------
 1802|  5.13k|        expr_ty current_elem = asdl_seq_GET(strings, i);
  ------------------
  |  |   82|  5.13k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  5.13k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1803|  5.13k|        assert(current_elem->kind == Constant_kind);
  ------------------
  |  Branch (1803:9): [True: 5.13k, False: 0]
  ------------------
 1804|       |
 1805|  5.13k|        if (PyUnicodeWriter_WriteStr(writer,
  ------------------
  |  Branch (1805:13): [True: 0, False: 5.13k]
  ------------------
 1806|  5.13k|                                     current_elem->v.Constant.value)) {
 1807|      0|            PyUnicodeWriter_Discard(writer);
 1808|      0|            return NULL;
 1809|      0|        }
 1810|  5.13k|    }
 1811|       |
 1812|  1.69k|    PyObject *final = PyUnicodeWriter_Finish(writer);
 1813|  1.69k|    if (final == NULL) {
  ------------------
  |  Branch (1813:9): [True: 0, False: 1.69k]
  ------------------
 1814|      0|        return NULL;
 1815|      0|    }
 1816|  1.69k|    if (_PyArena_AddPyObject(p->arena, final) < 0) {
  ------------------
  |  Branch (1816:9): [True: 0, False: 1.69k]
  ------------------
 1817|      0|        Py_DECREF(final);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1818|      0|        return NULL;
 1819|      0|    }
 1820|  1.69k|    return _PyAST_Constant(final, kind, lineno, col_offset,
 1821|  1.69k|                           end_lineno, end_col_offset, arena);
 1822|  1.69k|}
action_helpers.c:_build_concatenated_joined_str:
 1984|  19.3k|{
 1985|  19.3k|    asdl_expr_seq *values = _build_concatenated_str(p, strings, lineno,
 1986|  19.3k|        col_offset, end_lineno, end_col_offset, arena);
 1987|  19.3k|    if (!values) {
  ------------------
  |  Branch (1987:9): [True: 0, False: 19.3k]
  ------------------
 1988|      0|        return NULL;
 1989|      0|    }
 1990|  19.3k|    return _PyAST_JoinedStr(values, lineno, col_offset, end_lineno, end_col_offset, p->arena);
 1991|  19.3k|}

_PyLexer_ContinueLine:
   14|  2.99k|{
   15|  2.99k|    int c = tok_nextc(tok);
   16|  2.99k|    if (c == '\r') {
  ------------------
  |  Branch (16:9): [True: 0, False: 2.99k]
  ------------------
   17|      0|        c = tok_nextc(tok);
   18|      0|    }
   19|  2.99k|    if (c != '\n') {
  ------------------
  |  Branch (19:9): [True: 208, False: 2.78k]
  ------------------
   20|    208|        tok->done = E_LINECONT;
  ------------------
  |  |   37|    208|#define E_LINECONT       25      /* Unexpected characters after a line continuation */
  ------------------
   21|    208|        return -1;
   22|    208|    }
   23|  2.78k|    c = tok_nextc(tok);
   24|  2.78k|    if (c == EOF) {
  ------------------
  |  Branch (24:9): [True: 17, False: 2.76k]
  ------------------
   25|     17|        tok->done = E_EOF;
  ------------------
  |  |   23|     17|#define E_EOF            11      /* End Of File */
  ------------------
   26|     17|        tok->cur = tok->inp;
   27|     17|        return -1;
   28|  2.76k|    } else {
   29|  2.76k|        tok_backup(tok, c);
  ------------------
  |  |   24|  2.76k|#define tok_backup _PyLexer_backup
  ------------------
   30|  2.76k|    }
   31|  2.76k|    return c;
   32|  2.78k|}
_PyLexer_BeginLine:
   79|   367k|{
   80|   367k|    assert(tok->layout.at_bol);
  ------------------
  |  Branch (80:5): [True: 367k, False: 0]
  ------------------
   81|   367k|    int c;
   82|   367k|    int blankline = 0;
   83|   367k|    int col = 0;
   84|   367k|    int altcol = 0;
   85|   367k|    tok->layout.at_bol = 0;
   86|   367k|    int cont_line_col = 0;
   87|   425k|    for (;;) {
   88|   425k|        c = tok_nextc(tok);
   89|   425k|        if (c == ' ') {
  ------------------
  |  Branch (89:13): [True: 54.2k, False: 371k]
  ------------------
   90|  54.2k|            col++, altcol++;
   91|  54.2k|        }
   92|   371k|        else if (c == '\t') {
  ------------------
  |  Branch (92:18): [True: 786, False: 370k]
  ------------------
   93|    786|            col = (col / TABSIZE + 1) * TABSIZE;
  ------------------
  |  |    9|    786|#define TABSIZE 8
  ------------------
                          col = (col / TABSIZE + 1) * TABSIZE;
  ------------------
  |  |    9|    786|#define TABSIZE 8
  ------------------
   94|    786|            altcol = (altcol / ALTTABSIZE + 1) * ALTTABSIZE;
  ------------------
  |  |   10|    786|#define ALTTABSIZE 1
  ------------------
                          altcol = (altcol / ALTTABSIZE + 1) * ALTTABSIZE;
  ------------------
  |  |   10|    786|#define ALTTABSIZE 1
  ------------------
   95|    786|        }
   96|   370k|        else if (c == '\014')  {/* Control-L (formfeed) */
  ------------------
  |  Branch (96:18): [True: 2.96k, False: 367k]
  ------------------
   97|  2.96k|            col = altcol = 0; /* For Emacs users */
   98|  2.96k|        }
   99|   367k|        else if (c == '\\') {
  ------------------
  |  Branch (99:18): [True: 744, False: 367k]
  ------------------
  100|       |            // Indentation cannot be split over multiple physical lines
  101|       |            // using backslashes. This means that if we found a backslash
  102|       |            // preceded by whitespace, **the first one we find** determines
  103|       |            // the level of indentation of whatever comes next.
  104|    744|            cont_line_col = cont_line_col ? cont_line_col : col;
  ------------------
  |  Branch (104:29): [True: 89, False: 655]
  ------------------
  105|    744|            if ((c = _PyLexer_ContinueLine(tok)) == -1) {
  ------------------
  |  Branch (105:17): [True: 29, False: 715]
  ------------------
  106|     29|                return -1;
  107|     29|            }
  108|    744|        }
  109|   367k|        else if (c == EOF && PyErr_Occurred()) {
  ------------------
  |  Branch (109:18): [True: 11.9k, False: 355k]
  |  Branch (109:30): [True: 0, False: 11.9k]
  ------------------
  110|      0|            return -1;
  111|      0|        }
  112|   367k|        else {
  113|   367k|            break;
  114|   367k|        }
  115|   425k|    }
  116|   367k|    tok_backup(tok, c);
  ------------------
  |  |   24|   367k|#define tok_backup _PyLexer_backup
  ------------------
  117|   367k|    if (c == '#' || c == '\n' || c == '\r') {
  ------------------
  |  Branch (117:9): [True: 8.80k, False: 358k]
  |  Branch (117:21): [True: 147k, False: 210k]
  |  Branch (117:34): [True: 0, False: 210k]
  ------------------
  118|   156k|        int interactive = _PyTok_ReaderIsInteractive(tok);
  119|       |        /* Lines with only whitespace and/or comments
  120|       |           shouldn't affect the indentation and are
  121|       |           not passed to the parser as NEWLINE tokens,
  122|       |           except *totally* empty lines in interactive
  123|       |           mode, which signal the end of a command group. */
  124|   156k|        if (col == 0 && c == '\n' && interactive) {
  ------------------
  |  Branch (124:13): [True: 155k, False: 1.56k]
  |  Branch (124:25): [True: 147k, False: 7.61k]
  |  Branch (124:38): [True: 0, False: 147k]
  ------------------
  125|      0|            blankline = 0; /* Let it through */
  126|      0|        }
  127|   156k|        else if (interactive && tok->lineno == 1) {
  ------------------
  |  Branch (127:18): [True: 0, False: 156k]
  |  Branch (127:33): [True: 0, False: 0]
  ------------------
  128|       |            /* In interactive mode, if the first line contains
  129|       |               only spaces and/or a comment, let it through. */
  130|      0|            blankline = 0;
  131|      0|            col = altcol = 0;
  132|      0|        }
  133|   156k|        else {
  134|   156k|            blankline = 1; /* Ignore completely */
  135|   156k|        }
  136|   156k|    }
  137|   367k|    if (!blankline && tok->level == 0) {
  ------------------
  |  Branch (137:9): [True: 210k, False: 156k]
  |  Branch (137:23): [True: 195k, False: 15.1k]
  ------------------
  138|   195k|        col = cont_line_col ? cont_line_col : col;
  ------------------
  |  Branch (138:15): [True: 544, False: 194k]
  ------------------
  139|   195k|        altcol = cont_line_col ? cont_line_col : altcol;
  ------------------
  |  Branch (139:18): [True: 544, False: 194k]
  ------------------
  140|   195k|        if (update_indentation(tok, col, altcol) < 0) {
  ------------------
  |  Branch (140:13): [True: 14, False: 195k]
  ------------------
  141|     14|            return -1;
  142|     14|        }
  143|   195k|    }
  144|   367k|    return blankline;
  145|   367k|}
_PyLexer_IndentationToken:
  149|  34.1k|{
  150|  34.1k|    assert(tok->layout.pending != 0);
  ------------------
  |  Branch (150:5): [True: 34.1k, False: 0]
  ------------------
  151|  34.1k|    _PyTok_Off p_start = -1;
  152|  34.1k|    _PyTok_Off p_end = -1;
  153|  34.1k|    if (tok->layout.pending < 0) {
  ------------------
  |  Branch (153:9): [True: 16.8k, False: 17.3k]
  ------------------
  154|  16.8k|        if (tok->tok_extra_tokens) {
  ------------------
  |  Branch (154:13): [True: 0, False: 16.8k]
  ------------------
  155|      0|            p_start = tok->cur;
  156|      0|            p_end = tok->cur;
  157|      0|        }
  158|  16.8k|        tok->layout.pending++;
  159|  16.8k|        return _PyLexer_token_setup(tok, token, DEDENT, p_start, p_end);
  ------------------
  |  |   22|  16.8k|#define DEDENT          6
  ------------------
  160|  16.8k|    }
  161|  17.3k|    else {
  162|  17.3k|        if (tok->tok_extra_tokens) {
  ------------------
  |  Branch (162:13): [True: 0, False: 17.3k]
  ------------------
  163|      0|            p_start = tok->buf_offset;
  164|      0|            p_end = tok->cur;
  165|      0|        }
  166|  17.3k|        tok->layout.pending--;
  167|  17.3k|        return _PyLexer_token_setup(tok, token, INDENT, p_start, p_end);
  ------------------
  |  |   21|  17.3k|#define INDENT          5
  ------------------
  168|  17.3k|    }
  169|  34.1k|}
_PyLexer_Newline:
  173|   343k|{
  174|   343k|    tok->layout.at_bol = 1;
  175|   343k|    if (blankline || tok->level > 0) {
  ------------------
  |  Branch (175:9): [True: 155k, False: 187k]
  |  Branch (175:22): [True: 15.2k, False: 172k]
  ------------------
  176|   170k|        if (!tok->tok_extra_tokens) {
  ------------------
  |  Branch (176:13): [True: 170k, False: 0]
  ------------------
  177|   170k|            return 0;
  178|   170k|        }
  179|   170k|    }
  180|   172k|    else if (!tok->layout.comment_newline || !tok->tok_extra_tokens) {
  ------------------
  |  Branch (180:14): [True: 172k, False: 0]
  |  Branch (180:46): [True: 0, False: 0]
  ------------------
  181|   172k|        return _PyLexer_token_setup(tok, token, NEWLINE,
  ------------------
  |  |   20|   172k|#define NEWLINE         4
  ------------------
  182|   172k|                                    tok->start, tok->cur - 1);
  183|   172k|    }
  184|      0|    tok->layout.comment_newline = 0;
  185|      0|    return _PyLexer_token_setup(tok, token, NL, tok->start, tok->cur);
  ------------------
  |  |   82|      0|#define NL              66
  ------------------
  186|   343k|}
_PyLexer_ImplyDedents:
  190|  1.59k|{
  191|  1.59k|    if (tok->layout.depth != 0) {
  ------------------
  |  Branch (191:9): [True: 95, False: 1.50k]
  ------------------
  192|     95|        tok->layout.pending = -tok->layout.depth;
  193|     95|        tok->layout.depth = 0;
  194|     95|    }
  195|  1.59k|}
layout.c:update_indentation:
   37|   195k|{
   38|   195k|    lexer_layout_state *layout = &tok->layout;
   39|   195k|    if (col == layout->stack[layout->depth].column) {
  ------------------
  |  Branch (39:9): [True: 161k, False: 33.6k]
  ------------------
   40|   161k|        if (altcol != layout->stack[layout->depth].alternate_column) {
  ------------------
  |  Branch (40:13): [True: 1, False: 161k]
  ------------------
   41|      1|            _PyTokenizer_indenterror(tok);
   42|      1|            return -1;
   43|      1|        }
   44|   161k|    }
   45|  33.6k|    else if (col > layout->stack[layout->depth].column) {
  ------------------
  |  Branch (45:14): [True: 17.3k, False: 16.3k]
  ------------------
   46|  17.3k|        if (layout->depth + 1 >= MAXINDENT) {
  ------------------
  |  |    8|  17.3k|#define MAXINDENT 100       /* Max indentation level */
  ------------------
  |  Branch (46:13): [True: 0, False: 17.3k]
  ------------------
   47|      0|            tok->done = E_TOODEEP;
  ------------------
  |  |   32|      0|#define E_TOODEEP        20      /* Too many indentation levels */
  ------------------
   48|      0|            tok->cur = tok->inp;
   49|      0|            return -1;
   50|      0|        }
   51|  17.3k|        if (altcol <= layout->stack[layout->depth].alternate_column) {
  ------------------
  |  Branch (51:13): [True: 3, False: 17.3k]
  ------------------
   52|      3|            _PyTokenizer_indenterror(tok);
   53|      3|            return -1;
   54|      3|        }
   55|  17.3k|        layout->pending++;
   56|  17.3k|        layout->stack[++layout->depth] = (indentation_level){col, altcol};
   57|  17.3k|    }
   58|  16.3k|    else {
   59|  33.1k|        while (layout->depth > 0 &&
  ------------------
  |  Branch (59:16): [True: 17.6k, False: 15.4k]
  ------------------
   60|  17.6k|            col < layout->stack[layout->depth].column) {
  ------------------
  |  Branch (60:13): [True: 16.7k, False: 927]
  ------------------
   61|  16.7k|            layout->pending--;
   62|  16.7k|            layout->depth--;
   63|  16.7k|        }
   64|  16.3k|        if (col != layout->stack[layout->depth].column) {
  ------------------
  |  Branch (64:13): [True: 9, False: 16.3k]
  ------------------
   65|      9|            tok->done = E_DEDENT;
  ------------------
  |  |   33|      9|#define E_DEDENT         21      /* No matching outer block for dedent */
  ------------------
   66|      9|            tok->cur = tok->inp;
   67|      9|            return -1;
   68|      9|        }
   69|  16.3k|        if (altcol != layout->stack[layout->depth].alternate_column) {
  ------------------
  |  Branch (69:13): [True: 1, False: 16.3k]
  ------------------
   70|      1|            _PyTokenizer_indenterror(tok);
   71|      1|            return -1;
   72|      1|        }
   73|  16.3k|    }
   74|   195k|    return 0;
   75|   195k|}

_PyLexer_refill:
   24|   476k|{
   25|   476k|    if (tok->done != E_OK) {
  ------------------
  |  |   22|   476k|#define E_OK             10      /* No error */
  ------------------
  |  Branch (25:9): [True: 35.8k, False: 440k]
  ------------------
   26|  35.8k|        return 0;
   27|  35.8k|    }
   28|   440k|    int rc = _PyTok_ReaderUnderflow(tok);
   29|       |#if defined(Py_DEBUG)
   30|       |    if (tok->debug) {
   31|       |        fprintf(stderr, "line[%d] = ", tok->lineno);
   32|       |        _PyTokenizer_print_escape(stderr, _PyLexer_BufferPointer(tok, tok->cur),
   33|       |                                  tok->inp - tok->cur);
   34|       |        fprintf(stderr, "  tok->done = %d\n", tok->done);
   35|       |    }
   36|       |#endif
   37|   440k|    if (!rc) {
  ------------------
  |  Branch (37:9): [True: 19.4k, False: 421k]
  ------------------
   38|  19.4k|        tok->cur = tok->inp;
   39|  19.4k|        return 0;
   40|  19.4k|    }
   41|   421k|    tok->line_start = tok->cur;
   42|   421k|    if (contains_null_bytes(_PyLexer_BufferPointer(tok, tok->line_start),
  ------------------
  |  Branch (42:9): [True: 0, False: 421k]
  ------------------
   43|   421k|                            tok->inp - tok->line_start)) {
   44|      0|        _PyTokenizer_syntaxerror(tok, "source code cannot contain null bytes");
   45|      0|        tok->cur = tok->inp;
   46|      0|        return 0;
   47|      0|    }
   48|   421k|    return 1;
   49|   421k|}
_PyLexer_backup:
   54|  10.7M|{
   55|  10.7M|    if (c != EOF) {
  ------------------
  |  Branch (55:9): [True: 10.7M, False: 36.2k]
  ------------------
   56|  10.7M|        if (--tok->cur < tok->buf_offset) {
  ------------------
  |  Branch (56:13): [True: 0, False: 10.7M]
  ------------------
   57|      0|            Py_FatalError("tokenizer beginning of buffer");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
   58|      0|        }
   59|  10.7M|        if ((int)(unsigned char)*_PyLexer_BufferPointer(tok, tok->cur) != Py_CHARMASK(c)) {
  ------------------
  |  |  163|  10.7M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (59:13): [True: 0, False: 10.7M]
  ------------------
   60|      0|            Py_FatalError("tok_backup: wrong character");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
   61|      0|        }
   62|  10.7M|    }
   63|  10.7M|}
_PyLexer_get_normal:
  126|  5.13M|{
  127|  5.13M|    assert(current == NULL ||
  ------------------
  |  Branch (127:5): [True: 140k, False: 0]
  |  Branch (127:5): [True: 140k, False: 0]
  |  Branch (127:5): [True: 4.99M, False: 140k]
  ------------------
  128|  5.13M|           (current->mode == FTSTRING_MODE_EXPRESSION &&
  129|  5.13M|            current->replacement_depth > 0));
  130|  5.13M|    int c;
  131|  5.13M|    int blankline, nonascii;
  132|       |
  133|  5.13M|    _PyTok_Off p_start = -1;
  134|  5.13M|    _PyTok_Off p_end = -1;
  135|  5.30M|  nextline:
  136|  5.30M|    tok->start = -1;
  137|  5.30M|    tok->start_loc = (_PyTok_Loc){tok->lineno, -1};
  138|  5.30M|    blankline = 0;
  139|       |
  140|       |
  141|  5.30M|    if (tok->layout.at_bol) {
  ------------------
  |  Branch (141:9): [True: 367k, False: 4.94M]
  ------------------
  142|   367k|        blankline = _PyLexer_BeginLine(tok);
  143|   367k|        if (blankline < 0) {
  ------------------
  |  Branch (143:13): [True: 43, False: 367k]
  ------------------
  144|     43|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|     43|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  145|     43|        }
  146|   367k|    }
  147|       |
  148|  5.30M|    tok->start = tok->cur;
  149|  5.30M|    tok->start_loc = (_PyTok_Loc){
  150|  5.30M|        tok->lineno, tok->line_start >= 0 ? _PyLexer_ByteColumn(tok) : -1};
  ------------------
  |  Branch (150:22): [True: 5.30M, False: 0]
  ------------------
  151|       |
  152|  5.30M|    if (tok->layout.pending != 0) {
  ------------------
  |  Branch (152:9): [True: 34.1k, False: 5.27M]
  ------------------
  153|  34.1k|        return _PyLexer_IndentationToken(tok, token);
  154|  34.1k|    }
  155|       |
  156|       |    /* Peek ahead at the next character */
  157|  5.27M|    c = tok_nextc(tok);
  158|  5.27M|    tok_backup(tok, c);
  ------------------
  |  |   24|  5.27M|#define tok_backup _PyLexer_backup
  ------------------
  159|       |
  160|  5.27M| again:
  161|  5.27M|    tok->start = -1;
  162|       |    /* Skip spaces */
  163|  5.74M|    do {
  164|  5.74M|        c = tok_nextc(tok);
  165|  5.74M|    } while (c == ' ' || c == '\t' || c == '\014');
  ------------------
  |  Branch (165:14): [True: 440k, False: 5.30M]
  |  Branch (165:26): [True: 5.71k, False: 5.29M]
  |  Branch (165:39): [True: 17.2k, False: 5.27M]
  ------------------
  166|       |
  167|       |    /* Set start of current token */
  168|  5.27M|    tok->start = tok->cur - 1;
  169|  5.27M|    tok->start_loc = (_PyTok_Loc){
  170|  5.27M|        tok->lineno, tok->line_start >= 0 ? _PyLexer_ByteColumn(tok) - 1 : -1};
  ------------------
  |  Branch (170:22): [True: 5.27M, False: 0]
  ------------------
  171|       |
  172|       |    /* Skip comment, unless it's a type comment */
  173|  5.27M|    if (c == '#') {
  ------------------
  |  Branch (173:9): [True: 54.9k, False: 5.22M]
  ------------------
  174|       |
  175|  54.9k|        const char* p = NULL;
  176|  54.9k|        const char *prefix, *type_start;
  177|  54.9k|        int current_starting_col_offset;
  178|       |
  179|  3.15M|        while (c != EOF && c != '\n' && c != '\r') {
  ------------------
  |  Branch (179:16): [True: 3.15M, False: 210]
  |  Branch (179:28): [True: 3.10M, False: 54.7k]
  |  Branch (179:41): [True: 3.10M, False: 0]
  ------------------
  180|  3.10M|            c = tok_nextc(tok);
  181|  3.10M|        }
  182|       |
  183|  54.9k|        if (current != NULL) {
  ------------------
  |  Branch (183:13): [True: 200, False: 54.7k]
  ------------------
  184|    200|            _PyTok_Off comment_end = tok->cur;
  185|    200|            if (c == '\n' || c == '\r') {
  ------------------
  |  Branch (185:17): [True: 194, False: 6]
  |  Branch (185:30): [True: 0, False: 6]
  ------------------
  186|    194|                comment_end--;
  187|    194|            }
  188|    200|            if (_PyLexer_record_ftstring_comment(
  ------------------
  |  Branch (188:17): [True: 0, False: 200]
  ------------------
  189|    200|                    tok, current, tok->start, comment_end) < 0) {
  190|      0|                tok->done = E_NOMEM;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
  191|      0|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  192|      0|            }
  193|    200|        }
  194|       |
  195|  54.9k|        if (tok->tok_extra_tokens) {
  ------------------
  |  Branch (195:13): [True: 0, False: 54.9k]
  ------------------
  196|      0|            p = _PyLexer_BufferPointer(tok, tok->start);
  197|      0|        }
  198|       |
  199|  54.9k|        if (tok->type_comments) {
  ------------------
  |  Branch (199:13): [True: 20.0k, False: 34.8k]
  ------------------
  200|  20.0k|            p = _PyLexer_BufferPointer(tok, tok->start);
  201|  20.0k|            current_starting_col_offset = tok->start_loc.byte_col;
  202|  20.0k|            prefix = type_comment_prefix;
  203|  75.0k|            while (*prefix && p < _PyLexer_BufferPointer(tok, tok->cur)) {
  ------------------
  |  Branch (203:20): [True: 72.6k, False: 2.37k]
  |  Branch (203:31): [True: 72.6k, False: 15]
  ------------------
  204|  72.6k|                if (*prefix == ' ') {
  ------------------
  |  Branch (204:21): [True: 22.4k, False: 50.2k]
  ------------------
  205|  36.6k|                    while (*p == ' ' || *p == '\t') {
  ------------------
  |  Branch (205:28): [True: 12.4k, False: 24.2k]
  |  Branch (205:41): [True: 1.77k, False: 22.4k]
  ------------------
  206|  14.2k|                        p++;
  207|  14.2k|                        current_starting_col_offset++;
  208|  14.2k|                    }
  209|  50.2k|                } else if (*prefix == *p) {
  ------------------
  |  Branch (209:28): [True: 32.5k, False: 17.6k]
  ------------------
  210|  32.5k|                    p++;
  211|  32.5k|                    current_starting_col_offset++;
  212|  32.5k|                } else {
  213|  17.6k|                    break;
  214|  17.6k|                }
  215|       |
  216|  54.9k|                prefix++;
  217|  54.9k|            }
  218|       |
  219|       |            /* This is a type comment if we matched all of type_comment_prefix. */
  220|  20.0k|            if (!*prefix) {
  ------------------
  |  Branch (220:17): [True: 2.37k, False: 17.6k]
  ------------------
  221|  2.37k|                int is_type_ignore = 1;
  222|       |                // +6 in order to skip the word 'ignore'
  223|  2.37k|                const char *ignore_end = p + 6;
  224|  2.37k|                const int ignore_end_col_offset = current_starting_col_offset + 6;
  225|  2.37k|                tok_backup(tok, c);  /* don't eat the newline or EOF */
  ------------------
  |  |   24|  2.37k|#define tok_backup _PyLexer_backup
  ------------------
  226|       |
  227|  2.37k|                type_start = p;
  228|       |
  229|       |                /* A TYPE_IGNORE is "type: ignore" followed by the end of the token
  230|       |                 * or anything ASCII and non-alphanumeric. */
  231|  2.37k|                is_type_ignore = (
  232|  2.37k|                    _PyLexer_BufferPointer(tok, tok->cur) >= ignore_end && memcmp(p, "ignore", 6) == 0
  ------------------
  |  Branch (232:21): [True: 2.26k, False: 112]
  |  Branch (232:76): [True: 1.31k, False: 943]
  ------------------
  233|  1.31k|                    && !(_PyLexer_BufferPointer(tok, tok->cur) > ignore_end
  ------------------
  |  Branch (233:26): [True: 767, False: 552]
  ------------------
  234|    767|                         && ((unsigned char)ignore_end[0] >= 128 || Py_ISALNUM(ignore_end[0]))));
  ------------------
  |  |   26|    697|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |  163|    697|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |   12|    697|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   10|    697|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    8|    697|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|    697|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|    697|#define PY_CTF_DIGIT  0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (26:24): [True: 4, False: 693]
  |  |  ------------------
  ------------------
  |  Branch (234:30): [True: 70, False: 697]
  ------------------
  235|       |
  236|  2.37k|                int type = is_type_ignore ? TYPE_IGNORE : TYPE_COMMENT;
  ------------------
  |  |   72|  1.24k|#define TYPE_IGNORE     56
  ------------------
                              int type = is_type_ignore ? TYPE_IGNORE : TYPE_COMMENT;
  ------------------
  |  |   73|  1.12k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (236:28): [True: 1.24k, False: 1.12k]
  ------------------
  237|  2.37k|                int start_col_offset = is_type_ignore
  ------------------
  |  Branch (237:40): [True: 1.24k, False: 1.12k]
  ------------------
  238|  2.37k|                    ? ignore_end_col_offset : current_starting_col_offset;
  239|  2.37k|                p_end = tok->cur;
  240|  2.37k|                if (is_type_ignore) {
  ------------------
  |  Branch (240:21): [True: 1.24k, False: 1.12k]
  ------------------
  241|  1.24k|                    p_start = _PyLexer_BufferOffset(tok, ignore_end);
  242|       |
  243|       |                    /* If this type ignore is the only thing on the line, consume the newline also. */
  244|  1.24k|                    if (blankline) {
  ------------------
  |  Branch (244:25): [True: 1.18k, False: 63]
  ------------------
  245|  1.18k|                        tok_nextc(tok);
  246|  1.18k|                        tok->layout.at_bol = 1;
  247|  1.18k|                    }
  248|  1.24k|                } else {
  249|  1.12k|                    p_start = _PyLexer_BufferOffset(tok, type_start);
  250|  1.12k|                }
  251|  2.37k|                _PyLexer_token_setup(tok, token, type, p_start, p_end);
  252|  2.37k|                token->start_loc = (_PyTok_Loc){tok->lineno, start_col_offset};
  253|  2.37k|                token->end_loc = (_PyTok_Loc){tok->lineno,
  254|  2.37k|                                              _PyLexer_ByteColumn(tok)};
  255|  2.37k|                return type;
  256|  2.37k|            }
  257|  20.0k|        }
  258|  52.5k|        if (tok->tok_extra_tokens) {
  ------------------
  |  Branch (258:13): [True: 0, False: 52.5k]
  ------------------
  259|      0|            tok_backup(tok, c);  /* don't eat the newline or EOF */
  ------------------
  |  |   24|      0|#define tok_backup _PyLexer_backup
  ------------------
  260|      0|            p_start = _PyLexer_BufferOffset(tok, p);
  261|      0|            p_end = tok->cur;
  262|      0|            tok->layout.comment_newline = blankline;
  263|      0|            return MAKE_TOKEN(COMMENT);
  ------------------
  |  |   10|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  264|      0|        }
  265|  52.5k|    }
  266|       |
  267|  5.27M|    if (tok->done == E_INTERACT_STOP) {
  ------------------
  |  |   39|  5.27M|#define E_INTERACT_STOP  28      /* Interactive mode stopped tokenization */
  ------------------
  |  Branch (267:9): [True: 0, False: 5.27M]
  ------------------
  268|      0|        return MAKE_TOKEN(ENDMARKER);
  ------------------
  |  |   10|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  269|      0|    }
  270|       |
  271|       |    /* Check for EOF and errors now */
  272|  5.27M|    if (c == EOF) {
  ------------------
  |  Branch (272:9): [True: 18.3k, False: 5.25M]
  ------------------
  273|  18.3k|        if (tok->level) {
  ------------------
  |  Branch (273:13): [True: 2.68k, False: 15.7k]
  ------------------
  274|  2.68k|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|  2.68k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  275|  2.68k|        }
  276|  15.7k|        return MAKE_TOKEN(tok->done == E_EOF ? ENDMARKER : ERRORTOKEN);
  ------------------
  |  |   10|  31.4k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  |  |  ------------------
  |  |  |  Branch (10:65): [True: 15.7k, False: 0]
  |  |  ------------------
  ------------------
  277|  18.3k|    }
  278|       |
  279|       |    /* Identifier (most frequent token!) */
  280|  5.25M|    nonascii = 0;
  281|  5.25M|    if (is_potential_identifier_start(c)) {
  ------------------
  |  |    7|  5.25M|#define is_potential_identifier_start(c) (\
  |  |    8|  5.25M|              (c >= 'a' && c <= 'z')\
  |  |  ------------------
  |  |  |  Branch (8:16): [True: 1.11M, False: 4.14M]
  |  |  |  Branch (8:28): [True: 939k, False: 175k]
  |  |  ------------------
  |  |    9|  5.25M|               || (c >= 'A' && c <= 'Z')\
  |  |  ------------------
  |  |  |  Branch (9:20): [True: 476k, False: 3.84M]
  |  |  |  Branch (9:32): [True: 107k, False: 369k]
  |  |  ------------------
  |  |   10|  5.25M|               || c == '_'\
  |  |  ------------------
  |  |  |  Branch (10:19): [True: 78.8k, False: 4.13M]
  |  |  ------------------
  |  |   11|  5.25M|               || (c >= 128))
  |  |  ------------------
  |  |  |  Branch (11:19): [True: 43.8k, False: 4.08M]
  |  |  ------------------
  ------------------
  282|       |        /* Process the various legal combinations of b"", r"", u"", and f"". */
  283|  1.16M|        int saw_b = 0, saw_r = 0, saw_u = 0, saw_f = 0, saw_t = 0;
  284|  1.51M|        while (1) {
  ------------------
  |  Branch (284:16): [True: 1.51M, Folded]
  ------------------
  285|  1.51M|            if (!saw_b && (c == 'b' || c == 'B')) {
  ------------------
  |  Branch (285:17): [True: 1.49M, False: 22.4k]
  |  Branch (285:28): [True: 29.0k, False: 1.46M]
  |  Branch (285:40): [True: 6.33k, False: 1.46M]
  ------------------
  286|  35.4k|                saw_b = 1;
  287|  35.4k|            }
  288|       |            /* Since this is a backwards compatibility support literal we don't
  289|       |               want to support it in arbitrary order like byte literals. */
  290|  1.48M|            else if (!saw_u && (c == 'u'|| c == 'U')) {
  ------------------
  |  Branch (290:22): [True: 1.45M, False: 29.9k]
  |  Branch (290:33): [True: 30.7k, False: 1.42M]
  |  Branch (290:44): [True: 1.22k, False: 1.42M]
  ------------------
  291|  31.9k|                saw_u = 1;
  292|  31.9k|            }
  293|       |            /* ur"" and ru"" are not supported */
  294|  1.45M|            else if (!saw_r && (c == 'r' || c == 'R')) {
  ------------------
  |  Branch (294:22): [True: 1.31M, False: 132k]
  |  Branch (294:33): [True: 116k, False: 1.20M]
  |  Branch (294:45): [True: 4.32k, False: 1.19M]
  ------------------
  295|   120k|                saw_r = 1;
  296|   120k|            }
  297|  1.33M|            else if (!saw_f && (c == 'f' || c == 'F')) {
  ------------------
  |  Branch (297:22): [True: 1.21M, False: 117k]
  |  Branch (297:33): [True: 101k, False: 1.11M]
  |  Branch (297:45): [True: 13.6k, False: 1.09M]
  ------------------
  298|   115k|                saw_f = 1;
  299|   115k|            }
  300|  1.21M|            else if (!saw_t && (c == 't' || c == 'T')) {
  ------------------
  |  Branch (300:22): [True: 1.13M, False: 81.6k]
  |  Branch (300:33): [True: 70.3k, False: 1.06M]
  |  Branch (300:45): [True: 20.6k, False: 1.04M]
  ------------------
  301|  90.9k|                saw_t = 1;
  302|  90.9k|            }
  303|  1.12M|            else {
  304|  1.12M|                break;
  305|  1.12M|            }
  306|   394k|            c = tok_nextc(tok);
  307|   394k|            if (c == '"' || c == '\'') {
  ------------------
  |  Branch (307:17): [True: 35.6k, False: 358k]
  |  Branch (307:29): [True: 10.0k, False: 348k]
  ------------------
  308|       |                // Raise error on incompatible string prefixes:
  309|  45.7k|                int status = _PyLexer_check_string_prefixes(
  310|  45.7k|                    tok, saw_b, saw_r, saw_u, saw_f, saw_t);
  311|  45.7k|                if (status < 0) {
  ------------------
  |  Branch (311:21): [True: 14, False: 45.6k]
  ------------------
  312|     14|                    return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|     14|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  313|     14|                }
  314|       |
  315|       |                // Handle valid f or t string creation:
  316|  45.6k|                if (saw_f || saw_t) {
  ------------------
  |  Branch (316:21): [True: 14.6k, False: 31.0k]
  |  Branch (316:30): [True: 9.35k, False: 21.7k]
  ------------------
  317|  23.9k|                    return _PyLexer_scan_fstring_start(tok, token, c);
  318|  23.9k|                }
  319|  21.7k|                return _PyLexer_scan_string(tok, token, c);
  320|  45.6k|            }
  321|   394k|        }
  322|  6.26M|        while (is_potential_identifier_char(c)) {
  ------------------
  |  |   13|  6.26M|#define is_potential_identifier_char(c) (\
  |  |   14|  6.26M|              (c >= 'a' && c <= 'z')\
  |  |  ------------------
  |  |  |  Branch (14:16): [True: 4.39M, False: 1.87M]
  |  |  |  Branch (14:28): [True: 3.02M, False: 1.37M]
  |  |  ------------------
  |  |   15|  6.26M|               || (c >= 'A' && c <= 'Z')\
  |  |  ------------------
  |  |  |  Branch (15:20): [True: 1.90M, False: 1.34M]
  |  |  |  Branch (15:32): [True: 304k, False: 1.59M]
  |  |  ------------------
  |  |   16|  6.26M|               || (c >= '0' && c <= '9')\
  |  |  ------------------
  |  |  |  Branch (16:20): [True: 2.16M, False: 776k]
  |  |  |  Branch (16:32): [True: 274k, False: 1.88M]
  |  |  ------------------
  |  |   17|  6.26M|               || c == '_'\
  |  |  ------------------
  |  |  |  Branch (17:19): [True: 194k, False: 2.46M]
  |  |  ------------------
  |  |   18|  6.26M|               || (c >= 128))
  |  |  ------------------
  |  |  |  Branch (18:19): [True: 1.34M, False: 1.12M]
  |  |  ------------------
  ------------------
  323|  5.14M|            if (c >= 128) {
  ------------------
  |  Branch (323:17): [True: 1.34M, False: 3.79M]
  ------------------
  324|  1.34M|                nonascii = 1;
  325|  1.34M|            }
  326|  5.14M|            c = tok_nextc(tok);
  327|  5.14M|        }
  328|  1.12M|        tok_backup(tok, c);
  ------------------
  |  |   24|  1.12M|#define tok_backup _PyLexer_backup
  ------------------
  329|  1.12M|        if (nonascii && !verify_identifier(tok)) {
  ------------------
  |  Branch (329:13): [True: 98.1k, False: 1.02M]
  |  Branch (329:25): [True: 1.27k, False: 96.9k]
  ------------------
  330|  1.27k|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|  1.27k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  331|  1.27k|        }
  332|       |
  333|  1.12M|        p_start = tok->start;
  334|  1.12M|        p_end = tok->cur;
  335|       |
  336|  1.12M|        return MAKE_TOKEN(NAME);
  ------------------
  |  |   10|  1.12M|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  337|  1.12M|    }
  338|       |
  339|  4.08M|    if (c == '\r') {
  ------------------
  |  Branch (339:9): [True: 0, False: 4.08M]
  ------------------
  340|      0|        c = tok_nextc(tok);
  341|      0|    }
  342|       |
  343|  4.08M|    if (c == '\n') {
  ------------------
  |  Branch (343:9): [True: 343k, False: 3.74M]
  ------------------
  344|   343k|        int type = _PyLexer_Newline(tok, token, blankline);
  345|   343k|        if (type == 0) {
  ------------------
  |  Branch (345:13): [True: 170k, False: 172k]
  ------------------
  346|   170k|            goto nextline;
  347|   170k|        }
  348|   172k|        return type;
  349|   343k|    }
  350|       |
  351|       |    /* Period or number starting with period? */
  352|  3.74M|    if (c == '.') {
  ------------------
  |  Branch (352:9): [True: 63.1k, False: 3.68M]
  ------------------
  353|  63.1k|        c = tok_nextc(tok);
  354|  63.1k|        if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  63.1k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  63.1k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  63.1k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 15.9k, False: 47.2k]
  |  |  ------------------
  ------------------
  355|  15.9k|            return _PyLexer_scan_number(tok, token, c, 1);
  356|  47.2k|        } else if (c == '.') {
  ------------------
  |  Branch (356:20): [True: 6.11k, False: 41.1k]
  ------------------
  357|  6.11k|            c = tok_nextc(tok);
  358|  6.11k|            if (c == '.') {
  ------------------
  |  Branch (358:17): [True: 3.14k, False: 2.96k]
  ------------------
  359|  3.14k|                p_start = tok->start;
  360|  3.14k|                p_end = tok->cur;
  361|  3.14k|                return MAKE_TOKEN(ELLIPSIS);
  ------------------
  |  |   10|  3.14k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  362|  3.14k|            }
  363|  2.96k|            else {
  364|  2.96k|                tok_backup(tok, c);
  ------------------
  |  |   24|  2.96k|#define tok_backup _PyLexer_backup
  ------------------
  365|  2.96k|            }
  366|  2.96k|            tok_backup(tok, '.');
  ------------------
  |  |   24|  2.96k|#define tok_backup _PyLexer_backup
  ------------------
  367|  2.96k|        }
  368|  41.1k|        else {
  369|  41.1k|            tok_backup(tok, c);
  ------------------
  |  |   24|  41.1k|#define tok_backup _PyLexer_backup
  ------------------
  370|  41.1k|        }
  371|  44.0k|        p_start = tok->start;
  372|  44.0k|        p_end = tok->cur;
  373|  44.0k|        return MAKE_TOKEN(DOT);
  ------------------
  |  |   10|  44.0k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  374|  63.1k|    }
  375|       |
  376|       |
  377|       |    /* Number */
  378|  3.68M|    if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  3.68M|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  3.68M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  3.68M|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 1.05M, False: 2.62M]
  |  |  ------------------
  ------------------
  379|  1.05M|        return _PyLexer_scan_number(tok, token, c, 0);
  380|  1.05M|    }
  381|       |
  382|       |    /* String */
  383|  2.62M|    if (c == '\'' || c == '"') {
  ------------------
  |  Branch (383:9): [True: 13.5k, False: 2.61M]
  |  Branch (383:22): [True: 26.5k, False: 2.58M]
  ------------------
  384|  40.0k|        return _PyLexer_scan_string(tok, token, c);
  385|  40.0k|    }
  386|       |
  387|       |    /* Line continuation */
  388|  2.58M|    if (c == '\\') {
  ------------------
  |  Branch (388:9): [True: 2.24k, False: 2.58M]
  ------------------
  389|  2.24k|        if ((c = _PyLexer_ContinueLine(tok)) == -1) {
  ------------------
  |  Branch (389:13): [True: 196, False: 2.05k]
  ------------------
  390|    196|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|    196|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  391|    196|        }
  392|  2.05k|        goto again; /* Read next line */
  393|  2.24k|    }
  394|       |
  395|       |    /* Punctuation character */
  396|  2.58M|    int is_punctuation = (c == ':' || c == '}' || c == '!');
  ------------------
  |  Branch (396:27): [True: 153k, False: 2.42M]
  |  Branch (396:39): [True: 34.7k, False: 2.39M]
  |  Branch (396:51): [True: 6.67k, False: 2.38M]
  ------------------
  397|  2.58M|    if (is_punctuation && current != NULL) {
  ------------------
  |  Branch (397:9): [True: 195k, False: 2.38M]
  |  Branch (397:27): [True: 40.5k, False: 154k]
  ------------------
  398|  40.5k|        int type = _PyLexer_ftstring_punctuation(tok, current, token, c);
  399|  40.5k|        if (type < 0) {
  ------------------
  |  Branch (399:13): [True: 24, False: 40.5k]
  ------------------
  400|     24|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|     24|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  401|     24|        }
  402|  40.5k|        if (type != 0) {
  ------------------
  |  Branch (402:13): [True: 12.9k, False: 27.6k]
  ------------------
  403|  12.9k|            p_start = tok->start;
  404|  12.9k|            p_end = tok->cur;
  405|  12.9k|            return MAKE_TOKEN(type);
  ------------------
  |  |   10|  12.9k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  406|  12.9k|        }
  407|  40.5k|    }
  408|       |
  409|       |    /* Check for two-character token */
  410|  2.57M|    {
  411|  2.57M|        int c2 = tok_nextc(tok);
  412|  2.57M|        int current_token = _PyToken_TwoChars(c, c2, tok->barry_as_bdfl);
  413|  2.57M|        if (current_token != OP) {
  ------------------
  |  |   71|  2.57M|#define OP              55
  ------------------
  |  Branch (413:13): [True: 213k, False: 2.35M]
  ------------------
  414|   213k|            int c3 = tok_nextc(tok);
  415|   213k|            int current_token3 = _PyToken_ThreeChars(c, c2, c3);
  416|   213k|            if (current_token3 != OP) {
  ------------------
  |  |   71|   213k|#define OP              55
  ------------------
  |  Branch (416:17): [True: 1.28k, False: 211k]
  ------------------
  417|  1.28k|                current_token = current_token3;
  418|  1.28k|            }
  419|   211k|            else {
  420|   211k|                tok_backup(tok, c3);
  ------------------
  |  |   24|   211k|#define tok_backup _PyLexer_backup
  ------------------
  421|   211k|            }
  422|   213k|            p_start = tok->start;
  423|   213k|            p_end = tok->cur;
  424|   213k|            return MAKE_TOKEN(current_token);
  ------------------
  |  |   10|   213k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  425|   213k|        }
  426|  2.35M|        tok_backup(tok, c2);
  ------------------
  |  |   24|  2.35M|#define tok_backup _PyLexer_backup
  ------------------
  427|  2.35M|    }
  428|       |
  429|       |    /* Keep track of parentheses nesting level */
  430|      0|    switch (c) {
  431|   142k|    case '(':
  ------------------
  |  Branch (431:5): [True: 142k, False: 2.21M]
  ------------------
  432|   195k|    case '[':
  ------------------
  |  Branch (432:5): [True: 52.5k, False: 2.30M]
  ------------------
  433|   254k|    case '{':
  ------------------
  |  Branch (433:5): [True: 59.2k, False: 2.29M]
  ------------------
  434|   254k|        if (tok->level >= MAXLEVEL) {
  ------------------
  |  |    9|   254k|#define MAXLEVEL 200        /* Max parentheses level */
  ------------------
  |  Branch (434:13): [True: 46, False: 254k]
  ------------------
  435|     46|            return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "too many nested parentheses"));
  ------------------
  |  |   10|     46|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  436|     46|        }
  437|   254k|        tok->parenstack[tok->level] = c;
  438|   254k|        tok->parenlinenostack[tok->level] = tok->lineno;
  439|   254k|        tok->parencolstack[tok->level] = (int)(tok->start - tok->line_start);
  440|   254k|        tok->level++;
  441|   254k|        break;
  442|   100k|    case ')':
  ------------------
  |  Branch (442:5): [True: 100k, False: 2.25M]
  ------------------
  443|   128k|    case ']':
  ------------------
  |  Branch (443:5): [True: 27.9k, False: 2.32M]
  ------------------
  444|   162k|    case '}':
  ------------------
  |  Branch (444:5): [True: 34.7k, False: 2.32M]
  ------------------
  445|   162k|        if (current != NULL &&
  ------------------
  |  Branch (445:13): [True: 21.7k, False: 141k]
  ------------------
  446|  21.7k|                _PyLexer_FTStringBracketDepth(tok, current) == 0) {
  ------------------
  |  Branch (446:17): [True: 0, False: 21.7k]
  ------------------
  447|      0|            if (c == '}') {
  ------------------
  |  Branch (447:17): [True: 0, False: 0]
  ------------------
  448|      0|                return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
  ------------------
  |  |   10|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  449|      0|                    "%c-string: single '}' is not allowed",
  450|      0|                    _PyLexer_StringPrefix(current->kind)));
  451|      0|            }
  452|      0|            return MAKE_TOKEN(_PyTokenizer_syntaxerror(
  ------------------
  |  |   10|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  453|      0|                tok, "%c-string: unmatched '%c'",
  454|      0|                _PyLexer_StringPrefix(current->kind), c));
  455|      0|        }
  456|   162k|        if (!tok->tok_extra_tokens && !tok->level) {
  ------------------
  |  Branch (456:13): [True: 162k, False: 0]
  |  Branch (456:39): [True: 278, False: 162k]
  ------------------
  457|    278|            return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "unmatched '%c'", c));
  ------------------
  |  |   10|    278|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  458|    278|        }
  459|   162k|        if (tok->level > 0) {
  ------------------
  |  Branch (459:13): [True: 162k, False: 0]
  ------------------
  460|   162k|            tok->level--;
  461|   162k|            int opening = tok->parenstack[tok->level];
  462|   162k|            if (!tok->tok_extra_tokens && !((opening == '(' && c == ')') ||
  ------------------
  |  Branch (462:17): [True: 162k, False: 0]
  |  Branch (462:46): [True: 100k, False: 62.5k]
  |  Branch (462:64): [True: 100k, False: 53]
  ------------------
  463|  62.5k|                                            (opening == '[' && c == ']') ||
  ------------------
  |  Branch (463:46): [True: 27.8k, False: 34.7k]
  |  Branch (463:64): [True: 27.8k, False: 36]
  ------------------
  464|  34.7k|                                            (opening == '{' && c == '}'))) {
  ------------------
  |  Branch (464:46): [True: 34.7k, False: 89]
  |  Branch (464:64): [True: 34.6k, False: 56]
  ------------------
  465|       |                /* Do not match a closer against the brace that opened the
  466|       |                 * current replacement field. */
  467|    145|                if (current != NULL && opening == '{') {
  ------------------
  |  Branch (467:21): [True: 21, False: 124]
  |  Branch (467:40): [True: 16, False: 5]
  ------------------
  468|     16|                    int bracket_depth =
  469|     16|                        _PyLexer_FTStringBracketDepth(tok, current);
  470|     16|                    if (bracket_depth == current->replacement_depth - 1) {
  ------------------
  |  Branch (470:25): [True: 10, False: 6]
  ------------------
  471|     10|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
  ------------------
  |  |   10|     10|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  472|     10|                            "%c-string: unmatched '%c'",
  473|     10|                            _PyLexer_StringPrefix(current->kind), c));
  474|     10|                    }
  475|     16|                }
  476|    135|                if (tok->parenlinenostack[tok->level] != tok->lineno) {
  ------------------
  |  Branch (476:21): [True: 11, False: 124]
  ------------------
  477|     11|                    return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
  ------------------
  |  |   10|     11|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  478|     11|                            "closing parenthesis '%c' does not match "
  479|     11|                            "opening parenthesis '%c' on line %d",
  480|     11|                            c, opening, tok->parenlinenostack[tok->level]));
  481|     11|                }
  482|    124|                else {
  483|    124|                    return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
  ------------------
  |  |   10|    124|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  484|    124|                            "closing parenthesis '%c' does not match "
  485|    124|                            "opening parenthesis '%c'",
  486|    124|                            c, opening));
  487|    124|                }
  488|    135|            }
  489|   162k|        }
  490|   162k|        if (current != NULL &&
  ------------------
  |  Branch (490:13): [True: 21.7k, False: 140k]
  ------------------
  491|  21.7k|                _PyLexer_close_ftstring_expr(tok, current, c) < 0) {
  ------------------
  |  Branch (491:17): [True: 0, False: 21.7k]
  ------------------
  492|      0|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |   10|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  493|      0|        }
  494|   162k|        break;
  495|  1.93M|    default:
  ------------------
  |  Branch (495:5): [True: 1.93M, False: 417k]
  ------------------
  496|  1.93M|        break;
  497|  2.35M|    }
  498|       |
  499|  2.35M|    if (!Py_UNICODE_ISPRINTABLE(c)) {
  ------------------
  |  |  761|  2.35M|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  ------------------
  |  Branch (499:9): [True: 610, False: 2.35M]
  ------------------
  500|    610|        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid non-printable character U+%04X", c));
  ------------------
  |  |   10|    610|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  501|    610|    }
  502|       |
  503|  2.35M|    if (c == '=' && current != NULL) {
  ------------------
  |  Branch (503:9): [True: 85.9k, False: 2.27M]
  |  Branch (503:21): [True: 2.01k, False: 83.9k]
  ------------------
  504|  2.01k|        _PyLexer_mark_ftstring_debug(tok, current);
  505|  2.01k|    }
  506|       |
  507|       |    /* Punctuation character */
  508|  2.35M|    p_start = tok->start;
  509|  2.35M|    p_end = tok->cur;
  510|  2.35M|    return MAKE_TOKEN(_PyToken_OneChar(c));
  ------------------
  |  |   10|  2.35M|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  511|  2.35M|}
_PyTokenizer_Get:
  516|  5.21M|{
  517|  5.21M|    _PyToken_Free(token);
  518|  5.21M|    ftstring_state *current = _PyLexer_CurrentFTString(tok);
  519|  5.21M|    int result;
  520|  5.21M|    if (current == NULL) {
  ------------------
  |  Branch (520:9): [True: 4.99M, False: 220k]
  ------------------
  521|  4.99M|        result = _PyLexer_get_normal(tok, NULL, token);
  522|  4.99M|    }
  523|   220k|    else {
  524|   220k|        switch (current->mode) {
  525|   127k|        case FTSTRING_MODE_EXPRESSION:
  ------------------
  |  Branch (525:9): [True: 127k, False: 92.8k]
  ------------------
  526|   127k|            result = _PyLexer_get_normal(tok, current, token);
  527|   127k|            break;
  528|  79.8k|        case FTSTRING_MODE_MIDDLE:
  ------------------
  |  Branch (528:9): [True: 79.8k, False: 140k]
  ------------------
  529|  92.8k|        case FTSTRING_MODE_FORMAT_SPEC:
  ------------------
  |  Branch (529:9): [True: 13.0k, False: 207k]
  ------------------
  530|  92.8k|            result = _PyLexer_get_ftstring(tok, current, token);
  531|  92.8k|            break;
  532|      0|        default:
  ------------------
  |  Branch (532:9): [True: 0, False: 220k]
  ------------------
  533|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  534|   220k|        }
  535|   220k|    }
  536|  5.21M|    if (tok_failed(tok)) {
  ------------------
  |  Branch (536:9): [True: 4.18k, False: 5.21M]
  ------------------
  537|  4.18k|        result = ERRORTOKEN;
  ------------------
  |  |   83|  4.18k|#define ERRORTOKEN      67
  ------------------
  538|  4.18k|    }
  539|  5.21M|    token->type = result;
  540|  5.21M|}
lexer.c:contains_null_bytes:
   18|   421k|{
   19|       |    return memchr(str, 0, size) != NULL;
   20|   421k|}
lexer.c:verify_identifier:
   70|  98.1k|{
   71|  98.1k|    if (tok->tok_extra_tokens) {
  ------------------
  |  Branch (71:9): [True: 0, False: 98.1k]
  ------------------
   72|      0|        return 1;
   73|      0|    }
   74|  98.1k|    PyObject *s;
   75|  98.1k|    if (tok_failed(tok))
  ------------------
  |  Branch (75:9): [True: 0, False: 98.1k]
  ------------------
   76|      0|        return 0;
   77|  98.1k|    s = PyUnicode_DecodeUTF8(_PyLexer_BufferPointer(tok, tok->start), tok->cur - tok->start, NULL);
   78|  98.1k|    if (s == NULL) {
  ------------------
  |  Branch (78:9): [True: 948, False: 97.2k]
  ------------------
   79|    948|        if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
  ------------------
  |  Branch (79:13): [True: 948, False: 0]
  ------------------
   80|    948|            tok->done = E_DECODE;
  ------------------
  |  |   34|    948|#define E_DECODE         22      /* Error in decoding into Unicode */
  ------------------
   81|    948|        }
   82|      0|        else {
   83|      0|            tok->done = E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
   84|      0|        }
   85|    948|        return 0;
   86|    948|    }
   87|  97.2k|    Py_ssize_t invalid = _PyUnicode_ScanIdentifier(s);
   88|  97.2k|    assert(invalid >= 0);
  ------------------
  |  Branch (88:5): [True: 97.2k, False: 0]
  ------------------
   89|  97.2k|    assert(PyUnicode_GET_LENGTH(s) > 0);
  ------------------
  |  Branch (89:5): [True: 97.2k, False: 0]
  ------------------
   90|  97.2k|    if (invalid < PyUnicode_GET_LENGTH(s)) {
  ------------------
  |  |  299|  97.2k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (90:9): [True: 331, False: 96.9k]
  ------------------
   91|    331|        Py_UCS4 ch = PyUnicode_READ_CHAR(s, invalid);
  ------------------
  |  |  381|    331|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|    331|        _PyTok_Off error_cursor = tok->cur;
   93|    331|        if (invalid + 1 < PyUnicode_GET_LENGTH(s)) {
  ------------------
  |  |  299|    331|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (93:13): [True: 231, False: 100]
  ------------------
   94|       |            /* Determine the offset in UTF-8 encoded input */
   95|    231|            Py_SETREF(s, PyUnicode_Substring(s, 0, invalid + 1));
  ------------------
  |  |  354|    231|    do { \
  |  |  355|    231|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    231|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|    231|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    231|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|    231|        *_tmp_dst_ptr = (src); \
  |  |  358|    231|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|    231|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    231|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    231|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 231]
  |  |  ------------------
  ------------------
   96|    231|            if (s != NULL) {
  ------------------
  |  Branch (96:17): [True: 231, False: 0]
  ------------------
   97|    231|                Py_SETREF(s, PyUnicode_AsUTF8String(s));
  ------------------
  |  |  354|    231|    do { \
  |  |  355|    231|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    231|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|    231|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    231|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|    231|        *_tmp_dst_ptr = (src); \
  |  |  358|    231|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|    231|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    231|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    231|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 231]
  |  |  ------------------
  ------------------
   98|    231|            }
   99|    231|            if (s == NULL) {
  ------------------
  |  Branch (99:17): [True: 0, False: 231]
  ------------------
  100|      0|                tok->done = E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
  101|      0|                return 0;
  102|      0|            }
  103|    231|            error_cursor = tok->start + PyBytes_GET_SIZE(s);
  ------------------
  |  |   33|    231|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|    231|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|    231|        }
  105|    331|        Py_DECREF(s);
  ------------------
  |  |  430|    331|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|    331|        if (Py_UNICODE_ISPRINTABLE(ch)) {
  ------------------
  |  |  761|    331|#define Py_UNICODE_ISPRINTABLE(ch) _PyUnicode_IsPrintable(ch)
  |  |  ------------------
  |  |  |  Branch (761:36): [True: 115, False: 216]
  |  |  ------------------
  ------------------
  107|    115|            _PyTokenizer_syntaxerror_at(
  108|    115|                tok, _PyLexer_BufferPointer(tok, tok->line_start),
  109|    115|                error_cursor - tok->line_start, tok->lineno, -1, -1,
  110|    115|                "invalid character '%c' (U+%04X)", ch, ch);
  111|    115|        }
  112|    216|        else {
  113|    216|            _PyTokenizer_syntaxerror_at(
  114|    216|                tok, _PyLexer_BufferPointer(tok, tok->line_start),
  115|    216|                error_cursor - tok->line_start, tok->lineno, -1, -1,
  116|    216|                "invalid non-printable character U+%04X", ch);
  117|    216|        }
  118|    331|        return 0;
  119|    331|    }
  120|  96.9k|    Py_DECREF(s);
  ------------------
  |  |  430|  96.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  96.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  96.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|  96.9k|    return 1;
  122|  97.2k|}

lexer.c:tok_nextc:
   37|  22.5M|{
   38|  22.5M|    while (tok->cur == tok->inp) {
  ------------------
  |  Branch (38:12): [True: 40.0k, False: 22.4M]
  ------------------
   39|  40.0k|        if (!_PyLexer_refill(tok)) {
  ------------------
  |  Branch (39:13): [True: 40.0k, False: 0]
  ------------------
   40|  40.0k|            return EOF;
   41|  40.0k|        }
   42|  40.0k|    }
   43|  22.5M|    assert(tok->cur >= tok->source.base_offset);
  ------------------
  |  Branch (43:5): [True: 22.4M, False: 0]
  ------------------
   44|  22.4M|    assert(tok->cur - tok->source.base_offset < tok->source.len);
  ------------------
  |  Branch (44:5): [True: 22.4M, False: 0]
  ------------------
   45|  22.4M|    if (tok->cur - tok->line_start >= INT_MAX) {
  ------------------
  |  Branch (45:9): [True: 0, False: 22.4M]
  ------------------
   46|      0|        tok->done = E_COLUMNOVERFLOW;
  ------------------
  |  |   40|      0|#define E_COLUMNOVERFLOW 29      /* Column offset overflow */
  ------------------
   47|      0|        return EOF;
   48|      0|    }
   49|  22.4M|    return Py_CHARMASK(
  ------------------
  |  |  163|  22.4M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
   50|  22.4M|        tok->source.bytes[tok->cur++ - tok->source.base_offset]);
   51|  22.4M|}
lexer.c:tok_failed:
   28|  5.31M|{
   29|  5.31M|    return tok->done != E_OK && tok->done != E_EOF &&
  ------------------
  |  |   22|  10.6M|#define E_OK             10      /* No error */
  ------------------
                  return tok->done != E_OK && tok->done != E_EOF &&
  ------------------
  |  |   23|  5.34M|#define E_EOF            11      /* End Of File */
  ------------------
  |  Branch (29:12): [True: 30.6k, False: 5.28M]
  |  Branch (29:33): [True: 4.18k, False: 26.4k]
  ------------------
   30|  4.18k|           tok->done != E_INTERACT_STOP;
  ------------------
  |  |   39|  4.18k|#define E_INTERACT_STOP  28      /* Interactive mode stopped tokenization */
  ------------------
  |  Branch (30:12): [True: 4.18k, False: 0]
  ------------------
   31|  5.31M|}
layout.c:tok_nextc:
   37|   431k|{
   38|   789k|    while (tok->cur == tok->inp) {
  ------------------
  |  Branch (38:12): [True: 369k, False: 419k]
  ------------------
   39|   369k|        if (!_PyLexer_refill(tok)) {
  ------------------
  |  Branch (39:13): [True: 12.0k, False: 357k]
  ------------------
   40|  12.0k|            return EOF;
   41|  12.0k|        }
   42|   369k|    }
   43|   431k|    assert(tok->cur >= tok->source.base_offset);
  ------------------
  |  Branch (43:5): [True: 419k, False: 0]
  ------------------
   44|   419k|    assert(tok->cur - tok->source.base_offset < tok->source.len);
  ------------------
  |  Branch (44:5): [True: 419k, False: 0]
  ------------------
   45|   419k|    if (tok->cur - tok->line_start >= INT_MAX) {
  ------------------
  |  Branch (45:9): [True: 0, False: 419k]
  ------------------
   46|      0|        tok->done = E_COLUMNOVERFLOW;
  ------------------
  |  |   40|      0|#define E_COLUMNOVERFLOW 29      /* Column offset overflow */
  ------------------
   47|      0|        return EOF;
   48|      0|    }
   49|   419k|    return Py_CHARMASK(
  ------------------
  |  |  163|   419k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
   50|   419k|        tok->source.bytes[tok->cur++ - tok->source.base_offset]);
   51|   419k|}
number.c:tok_nextc:
   37|  6.23M|{
   38|  6.23M|    while (tok->cur == tok->inp) {
  ------------------
  |  Branch (38:12): [True: 2.46k, False: 6.23M]
  ------------------
   39|  2.46k|        if (!_PyLexer_refill(tok)) {
  ------------------
  |  Branch (39:13): [True: 2.46k, False: 0]
  ------------------
   40|  2.46k|            return EOF;
   41|  2.46k|        }
   42|  2.46k|    }
   43|  6.23M|    assert(tok->cur >= tok->source.base_offset);
  ------------------
  |  Branch (43:5): [True: 6.23M, False: 0]
  ------------------
   44|  6.23M|    assert(tok->cur - tok->source.base_offset < tok->source.len);
  ------------------
  |  Branch (44:5): [True: 6.23M, False: 0]
  ------------------
   45|  6.23M|    if (tok->cur - tok->line_start >= INT_MAX) {
  ------------------
  |  Branch (45:9): [True: 0, False: 6.23M]
  ------------------
   46|      0|        tok->done = E_COLUMNOVERFLOW;
  ------------------
  |  |   40|      0|#define E_COLUMNOVERFLOW 29      /* Column offset overflow */
  ------------------
   47|      0|        return EOF;
   48|      0|    }
   49|  6.23M|    return Py_CHARMASK(
  ------------------
  |  |  163|  6.23M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
   50|  6.23M|        tok->source.bytes[tok->cur++ - tok->source.base_offset]);
   51|  6.23M|}
string.c:tok_nextc:
   37|  3.37M|{
   38|  3.43M|    while (tok->cur == tok->inp) {
  ------------------
  |  Branch (38:12): [True: 64.2k, False: 3.37M]
  ------------------
   39|  64.2k|        if (!_PyLexer_refill(tok)) {
  ------------------
  |  Branch (39:13): [True: 736, False: 63.4k]
  ------------------
   40|    736|            return EOF;
   41|    736|        }
   42|  64.2k|    }
   43|  3.37M|    assert(tok->cur >= tok->source.base_offset);
  ------------------
  |  Branch (43:5): [True: 3.37M, False: 0]
  ------------------
   44|  3.37M|    assert(tok->cur - tok->source.base_offset < tok->source.len);
  ------------------
  |  Branch (44:5): [True: 3.37M, False: 0]
  ------------------
   45|  3.37M|    if (tok->cur - tok->line_start >= INT_MAX) {
  ------------------
  |  Branch (45:9): [True: 0, False: 3.37M]
  ------------------
   46|      0|        tok->done = E_COLUMNOVERFLOW;
  ------------------
  |  |   40|      0|#define E_COLUMNOVERFLOW 29      /* Column offset overflow */
  ------------------
   47|      0|        return EOF;
   48|      0|    }
   49|  3.37M|    return Py_CHARMASK(
  ------------------
  |  |  163|  3.37M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
   50|  3.37M|        tok->source.bytes[tok->cur++ - tok->source.base_offset]);
   51|  3.37M|}
string.c:tok_failed:
   28|    255|{
   29|    255|    return tok->done != E_OK && tok->done != E_EOF &&
  ------------------
  |  |   22|    510|#define E_OK             10      /* No error */
  ------------------
                  return tok->done != E_OK && tok->done != E_EOF &&
  ------------------
  |  |   23|    400|#define E_EOF            11      /* End Of File */
  ------------------
  |  Branch (29:12): [True: 145, False: 110]
  |  Branch (29:33): [True: 0, False: 145]
  ------------------
   30|      0|           tok->done != E_INTERACT_STOP;
  ------------------
  |  |   39|      0|#define E_INTERACT_STOP  28      /* Interactive mode stopped tokenization */
  ------------------
  |  Branch (30:12): [True: 0, False: 0]
  ------------------
   31|    255|}

_PyLexer_scan_number:
  115|  1.07M|{
  116|  1.07M|    _PyTok_Off p_start = -1;
  117|  1.07M|    _PyTok_Off p_end = -1;
  118|       |
  119|  1.07M|    if (leading_dot) {
  ------------------
  |  Branch (119:9): [True: 15.9k, False: 1.05M]
  ------------------
  120|  15.9k|        goto fraction;
  121|  15.9k|    }
  122|  1.05M|    if (c == '0') {
  ------------------
  |  Branch (122:9): [True: 69.1k, False: 985k]
  ------------------
  123|       |        /* Hex, octal or binary -- maybe. */
  124|  69.1k|        c = tok_nextc(tok);
  125|  69.1k|        if (c == 'x' || c == 'X') {
  ------------------
  |  Branch (125:13): [True: 1.47k, False: 67.6k]
  |  Branch (125:25): [True: 632, False: 67.0k]
  ------------------
  126|       |            /* Hex */
  127|  2.10k|            c = tok_nextc(tok);
  128|  3.44k|            do {
  129|  3.44k|                if (c == '_') {
  ------------------
  |  Branch (129:21): [True: 1.34k, False: 2.10k]
  ------------------
  130|  1.34k|                    c = tok_nextc(tok);
  131|  1.34k|                }
  132|  3.44k|                if (!Py_ISXDIGIT(c)) {
  ------------------
  |  |   25|  3.44k|#define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
  |  |  ------------------
  |  |  |  |  163|  3.44k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
  |  |  ------------------
  |  |  |  |   14|  3.44k|#define PY_CTF_XDIGIT 0x10
  |  |  ------------------
  ------------------
  |  Branch (132:21): [True: 9, False: 3.43k]
  ------------------
  133|      9|                    tok_backup(tok, c);
  ------------------
  |  |   24|      9|#define tok_backup _PyLexer_backup
  ------------------
  134|      9|                    return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid hexadecimal literal"));
  ------------------
  |  |    7|      9|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  135|      9|                }
  136|  93.0k|                do {
  137|  93.0k|                    c = tok_nextc(tok);
  138|  93.0k|                } while (Py_ISXDIGIT(c));
  ------------------
  |  |   25|  93.0k|#define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
  |  |  ------------------
  |  |  |  |  163|  93.0k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
  |  |  ------------------
  |  |  |  |   14|  93.0k|#define PY_CTF_XDIGIT 0x10
  |  |  ------------------
  |  |  |  Branch (25:24): [True: 89.5k, False: 3.43k]
  |  |  ------------------
  ------------------
  139|  3.43k|            } while (c == '_');
  ------------------
  |  Branch (139:22): [True: 1.34k, False: 2.09k]
  ------------------
  140|  2.09k|            if (!verify_end_of_number(tok, c, "hexadecimal")) {
  ------------------
  |  Branch (140:17): [True: 2, False: 2.09k]
  ------------------
  141|      2|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|      2|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  142|      2|            }
  143|  2.09k|        }
  144|  67.0k|        else if (c == 'o' || c == 'O') {
  ------------------
  |  Branch (144:18): [True: 845, False: 66.1k]
  |  Branch (144:30): [True: 668, False: 65.5k]
  ------------------
  145|       |            /* Octal */
  146|  1.51k|            c = tok_nextc(tok);
  147|  2.20k|            do {
  148|  2.20k|                if (c == '_') {
  ------------------
  |  Branch (148:21): [True: 692, False: 1.51k]
  ------------------
  149|    692|                    c = tok_nextc(tok);
  150|    692|                }
  151|  2.20k|                if (c < '0' || c >= '8') {
  ------------------
  |  Branch (151:21): [True: 8, False: 2.19k]
  |  Branch (151:32): [True: 4, False: 2.19k]
  ------------------
  152|     12|                    if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|     12|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|     12|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|     12|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 1, False: 11]
  |  |  ------------------
  ------------------
  153|      1|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
  ------------------
  |  |    7|      1|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  154|      1|                                "invalid digit '%c' in octal literal", c));
  155|      1|                    }
  156|     11|                    else {
  157|     11|                        tok_backup(tok, c);
  ------------------
  |  |   24|     11|#define tok_backup _PyLexer_backup
  ------------------
  158|     11|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid octal literal"));
  ------------------
  |  |    7|     11|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  159|     11|                    }
  160|     12|                }
  161|  19.7k|                do {
  162|  19.7k|                    c = tok_nextc(tok);
  163|  19.7k|                } while ('0' <= c && c < '8');
  ------------------
  |  Branch (163:26): [True: 18.3k, False: 1.41k]
  |  Branch (163:38): [True: 17.5k, False: 780]
  ------------------
  164|  2.19k|            } while (c == '_');
  ------------------
  |  Branch (164:22): [True: 691, False: 1.50k]
  ------------------
  165|  1.50k|            if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  1.50k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  1.50k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  1.50k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 1, False: 1.50k]
  |  |  ------------------
  ------------------
  166|      1|                return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok,
  ------------------
  |  |    7|      1|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  167|      1|                        "invalid digit '%c' in octal literal", c));
  168|      1|            }
  169|  1.50k|            if (!verify_end_of_number(tok, c, "octal")) {
  ------------------
  |  Branch (169:17): [True: 7, False: 1.49k]
  ------------------
  170|      7|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|      7|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  171|      7|            }
  172|  1.50k|        }
  173|  65.5k|        else if (c == 'b' || c == 'B') {
  ------------------
  |  Branch (173:18): [True: 1.11k, False: 64.4k]
  |  Branch (173:30): [True: 582, False: 63.8k]
  ------------------
  174|       |            /* Binary */
  175|  1.69k|            c = tok_nextc(tok);
  176|  2.40k|            do {
  177|  2.40k|                if (c == '_') {
  ------------------
  |  Branch (177:21): [True: 1.66k, False: 736]
  ------------------
  178|  1.66k|                    c = tok_nextc(tok);
  179|  1.66k|                }
  180|  2.40k|                if (c != '0' && c != '1') {
  ------------------
  |  Branch (180:21): [True: 337, False: 2.06k]
  |  Branch (180:33): [True: 8, False: 329]
  ------------------
  181|      8|                    if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|      8|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|      8|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|      8|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 1, False: 7]
  |  |  ------------------
  ------------------
  182|      1|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid digit '%c' in binary literal", c));
  ------------------
  |  |    7|      1|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  183|      1|                    }
  184|      7|                    else {
  185|      7|                        tok_backup(tok, c);
  ------------------
  |  |   24|      7|#define tok_backup _PyLexer_backup
  ------------------
  186|      7|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid binary literal"));
  ------------------
  |  |    7|      7|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  187|      7|                    }
  188|      8|                }
  189|  57.1k|                do {
  190|  57.1k|                    c = tok_nextc(tok);
  191|  57.1k|                } while (c == '0' || c == '1');
  ------------------
  |  Branch (191:26): [True: 53.3k, False: 3.75k]
  |  Branch (191:38): [True: 1.35k, False: 2.39k]
  ------------------
  192|  2.39k|            } while (c == '_');
  ------------------
  |  Branch (192:22): [True: 707, False: 1.69k]
  ------------------
  193|  1.69k|            if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  1.69k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  1.69k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  1.69k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 3, False: 1.68k]
  |  |  ------------------
  ------------------
  194|      3|                return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid digit '%c' in binary literal", c));
  ------------------
  |  |    7|      3|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  195|      3|            }
  196|  1.68k|            if (!verify_end_of_number(tok, c, "binary")) {
  ------------------
  |  Branch (196:17): [True: 4, False: 1.68k]
  ------------------
  197|      4|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|      4|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  198|      4|            }
  199|  1.68k|        }
  200|  63.8k|        else {
  201|  63.8k|            int nonzero = 0;
  202|       |            /* maybe old-style octal; c is first char of it */
  203|       |            /* in any case, allow '0' as a literal */
  204|   132k|            while (1) {
  ------------------
  |  Branch (204:20): [True: 132k, Folded]
  ------------------
  205|   132k|                if (c == '_') {
  ------------------
  |  Branch (205:21): [True: 427, False: 131k]
  ------------------
  206|    427|                    c = tok_nextc(tok);
  207|    427|                    if (!Py_ISDIGIT(c)) {
  ------------------
  |  |   24|    427|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|    427|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|    427|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  ------------------
  |  Branch (207:25): [True: 4, False: 423]
  ------------------
  208|      4|                        tok_backup(tok, c);
  ------------------
  |  |   24|      4|#define tok_backup _PyLexer_backup
  ------------------
  209|      4|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid decimal literal"));
  ------------------
  |  |    7|      4|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  210|      4|                    }
  211|    427|                }
  212|   132k|                if (c != '0') {
  ------------------
  |  Branch (212:21): [True: 63.8k, False: 68.5k]
  ------------------
  213|  63.8k|                    break;
  214|  63.8k|                }
  215|  68.5k|                c = tok_nextc(tok);
  216|  68.5k|            }
  217|  63.8k|            _PyTok_Off zeros_end = tok->cur;
  218|  63.8k|            if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  63.8k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  63.8k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  63.8k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 2.97k, False: 60.8k]
  |  |  ------------------
  ------------------
  219|  2.97k|                nonzero = 1;
  220|  2.97k|                c = tok_decimal_tail(tok);
  221|  2.97k|                if (c == 0) {
  ------------------
  |  Branch (221:21): [True: 2, False: 2.97k]
  ------------------
  222|      2|                    return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|      2|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  223|      2|                }
  224|  2.97k|            }
  225|  63.8k|            if (c == '.') {
  ------------------
  |  Branch (225:17): [True: 7.69k, False: 56.1k]
  ------------------
  226|  7.69k|                c = tok_nextc(tok);
  227|  7.69k|                goto fraction;
  228|  7.69k|            }
  229|  56.1k|            else if (c == 'e' || c == 'E') {
  ------------------
  |  Branch (229:22): [True: 1.59k, False: 54.5k]
  |  Branch (229:34): [True: 341, False: 54.1k]
  ------------------
  230|  1.93k|                goto exponent;
  231|  1.93k|            }
  232|  54.1k|            else if (c == 'j' || c == 'J') {
  ------------------
  |  Branch (232:22): [True: 10.6k, False: 43.5k]
  |  Branch (232:34): [True: 1.34k, False: 42.2k]
  ------------------
  233|  11.9k|                goto imaginary;
  234|  11.9k|            }
  235|  42.2k|            else if (nonzero && !tok->tok_extra_tokens) {
  ------------------
  |  Branch (235:22): [True: 84, False: 42.1k]
  |  Branch (235:33): [True: 84, False: 0]
  ------------------
  236|       |                /* Old-style octal: now disallowed. */
  237|     84|                tok_backup(tok, c);
  ------------------
  |  |   24|     84|#define tok_backup _PyLexer_backup
  ------------------
  238|     84|                return MAKE_TOKEN(_PyTokenizer_syntaxerror_known_range(
  ------------------
  |  |    7|     84|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  239|     84|                        tok, (int)(tok->start + 1 - tok->line_start),
  240|     84|                        (int)(zeros_end - tok->line_start),
  241|     84|                        "leading zeros in decimal integer "
  242|     84|                        "literals are not permitted; "
  243|     84|                        "use an 0o prefix for octal integers"));
  244|     84|            }
  245|  42.1k|            if (!verify_end_of_number(tok, c, "decimal")) {
  ------------------
  |  Branch (245:17): [True: 69, False: 42.0k]
  ------------------
  246|     69|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|     69|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  247|     69|            }
  248|  42.1k|        }
  249|  69.1k|    }
  250|   985k|    else {
  251|       |        /* Decimal */
  252|   985k|        c = tok_decimal_tail(tok);
  253|   985k|        if (c == 0) {
  ------------------
  |  Branch (253:13): [True: 12, False: 985k]
  ------------------
  254|     12|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|     12|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  255|     12|        }
  256|   985k|        {
  257|       |            /* Accept floating-point numbers. */
  258|   985k|            if (c == '.') {
  ------------------
  |  Branch (258:17): [True: 49.9k, False: 935k]
  ------------------
  259|  49.9k|                c = tok_nextc(tok);
  260|  73.5k|    fraction:
  261|       |                /* Fraction */
  262|  73.5k|                if (Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  73.5k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  73.5k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  73.5k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 41.3k, False: 32.1k]
  |  |  ------------------
  ------------------
  263|  41.3k|                    c = tok_decimal_tail(tok);
  264|  41.3k|                    if (c == 0) {
  ------------------
  |  Branch (264:25): [True: 4, False: 41.3k]
  ------------------
  265|      4|                        return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|      4|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  266|      4|                    }
  267|  41.3k|                }
  268|  73.5k|            }
  269|  1.00M|            if (c == 'e' || c == 'E') {
  ------------------
  |  Branch (269:17): [True: 53.8k, False: 955k]
  |  Branch (269:29): [True: 5.61k, False: 949k]
  ------------------
  270|  59.4k|                int e;
  271|  61.3k|              exponent:
  272|  61.3k|                e = c;
  273|       |                /* Exponent part */
  274|  61.3k|                c = tok_nextc(tok);
  275|  61.3k|                if (c == '+' || c == '-') {
  ------------------
  |  Branch (275:21): [True: 877, False: 60.5k]
  |  Branch (275:33): [True: 9.44k, False: 51.0k]
  ------------------
  276|  10.3k|                    c = tok_nextc(tok);
  277|  10.3k|                    if (!Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  10.3k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  10.3k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  10.3k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  ------------------
  |  Branch (277:25): [True: 8, False: 10.3k]
  ------------------
  278|      8|                        tok_backup(tok, c);
  ------------------
  |  |   24|      8|#define tok_backup _PyLexer_backup
  ------------------
  279|      8|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(tok, "invalid decimal literal"));
  ------------------
  |  |    7|      8|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  280|      8|                    }
  281|  51.0k|                } else if (!Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  51.0k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  51.0k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  51.0k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  ------------------
  |  Branch (281:28): [True: 3.37k, False: 47.7k]
  ------------------
  282|  3.37k|                    tok_backup(tok, c);
  ------------------
  |  |   24|  3.37k|#define tok_backup _PyLexer_backup
  ------------------
  283|  3.37k|                    if (!verify_end_of_number(tok, e, "decimal")) {
  ------------------
  |  Branch (283:25): [True: 58, False: 3.31k]
  ------------------
  284|     58|                        return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|     58|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  285|     58|                    }
  286|  3.31k|                    tok_backup(tok, e);
  ------------------
  |  |   24|  3.31k|#define tok_backup _PyLexer_backup
  ------------------
  287|  3.31k|                    p_start = tok->start;
  288|  3.31k|                    p_end = tok->cur;
  289|  3.31k|                    return MAKE_TOKEN(NUMBER);
  ------------------
  |  |    7|  3.31k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  290|  3.37k|                }
  291|  58.0k|                c = tok_decimal_tail(tok);
  292|  58.0k|                if (c == 0) {
  ------------------
  |  Branch (292:21): [True: 2, False: 58.0k]
  ------------------
  293|      2|                    return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|      2|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  294|      2|                }
  295|  58.0k|            }
  296|  1.00M|            if (c == 'j' || c == 'J') {
  ------------------
  |  Branch (296:17): [True: 66.7k, False: 941k]
  |  Branch (296:29): [True: 14.5k, False: 926k]
  ------------------
  297|       |                /* Imaginary part */
  298|  93.1k|    imaginary:
  299|  93.1k|                c = tok_nextc(tok);
  300|  93.1k|                if (!verify_end_of_number(tok, c, "imaginary")) {
  ------------------
  |  Branch (300:21): [True: 21, False: 93.1k]
  ------------------
  301|     21|                    return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|     21|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  302|     21|                }
  303|  93.1k|            }
  304|   926k|            else if (!verify_end_of_number(tok, c, "decimal")) {
  ------------------
  |  Branch (304:22): [True: 341, False: 926k]
  ------------------
  305|    341|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    7|    341|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  306|    341|            }
  307|  1.00M|        }
  308|  1.00M|    }
  309|  1.06M|    tok_backup(tok, c);
  ------------------
  |  |   24|  1.06M|#define tok_backup _PyLexer_backup
  ------------------
  310|  1.06M|    p_start = tok->start;
  311|  1.06M|    p_end = tok->cur;
  312|  1.06M|    return MAKE_TOKEN(NUMBER);
  ------------------
  |  |    7|  1.06M|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  313|  1.05M|}
number.c:verify_end_of_number:
   33|  1.07M|verify_end_of_number(struct tok_state *tok, int c, const char *kind) {
   34|  1.07M|    if (tok->tok_extra_tokens) {
  ------------------
  |  Branch (34:9): [True: 0, False: 1.07M]
  ------------------
   35|       |        // When we are parsing extra tokens, we don't want to emit warnings
   36|       |        // about invalid literals, because we want to be a bit more liberal.
   37|      0|        return 1;
   38|      0|    }
   39|       |    /* Emit a deprecation warning only if the numeric literal is immediately
   40|       |     * followed by one of keywords which can occur after a numeric literal
   41|       |     * in valid code: "and", "else", "for", "if", "in", "is" and "or".
   42|       |     * It allows to gradually deprecate existing valid code without adding
   43|       |     * warning before error in most cases of invalid numeric literal (which
   44|       |     * would be confusing and break existing tests).
   45|       |     * Raise a syntax error with slightly better message than plain
   46|       |     * "invalid syntax" if the numeric literal is immediately followed by
   47|       |     * other keyword or identifier.
   48|       |     */
   49|  1.07M|    int r = 0;
   50|  1.07M|    if (c == 'a') {
  ------------------
  |  Branch (50:9): [True: 7.23k, False: 1.06M]
  ------------------
   51|  7.23k|        r = lookahead(tok, "nd");
   52|  7.23k|    }
   53|  1.06M|    else if (c == 'e') {
  ------------------
  |  Branch (53:14): [True: 3.37k, False: 1.05M]
  ------------------
   54|  3.37k|        r = lookahead(tok, "lse");
   55|  3.37k|    }
   56|  1.05M|    else if (c == 'f') {
  ------------------
  |  Branch (56:14): [True: 3.58k, False: 1.05M]
  ------------------
   57|  3.58k|        r = lookahead(tok, "or");
   58|  3.58k|    }
   59|  1.05M|    else if (c == 'i') {
  ------------------
  |  Branch (59:14): [True: 12.5k, False: 1.04M]
  ------------------
   60|  12.5k|        int c2 = tok_nextc(tok);
   61|  12.5k|        if (c2 == 'f' || c2 == 'n' || c2 == 's') {
  ------------------
  |  Branch (61:13): [True: 5.48k, False: 7.11k]
  |  Branch (61:26): [True: 2.60k, False: 4.51k]
  |  Branch (61:39): [True: 4.49k, False: 20]
  ------------------
   62|  12.5k|            r = 1;
   63|  12.5k|        }
   64|  12.5k|        tok_backup(tok, c2);
  ------------------
  |  |   24|  12.5k|#define tok_backup _PyLexer_backup
  ------------------
   65|  12.5k|    }
   66|  1.04M|    else if (c == 'o') {
  ------------------
  |  Branch (66:14): [True: 4.83k, False: 1.03M]
  ------------------
   67|  4.83k|        r = lookahead(tok, "r");
   68|  4.83k|    }
   69|  1.03M|    else if (c == 'n') {
  ------------------
  |  Branch (69:14): [True: 393, False: 1.03M]
  ------------------
   70|    393|        r = lookahead(tok, "ot");
   71|    393|    }
   72|  1.07M|    if (r) {
  ------------------
  |  Branch (72:9): [True: 31.7k, False: 1.03M]
  ------------------
   73|  31.7k|        tok_backup(tok, c);
  ------------------
  |  |   24|  31.7k|#define tok_backup _PyLexer_backup
  ------------------
   74|  31.7k|        if (_PyTokenizer_parser_warn(tok, PyExc_SyntaxWarning,
  ------------------
  |  Branch (74:13): [True: 0, False: 31.7k]
  ------------------
   75|  31.7k|                "invalid %s literal", kind))
   76|      0|        {
   77|      0|            return 0;
   78|      0|        }
   79|  31.7k|        tok_nextc(tok);
   80|  31.7k|    }
   81|  1.03M|    else /* In future releases, only error will remain. */
   82|  1.03M|    if (c < 128 && is_potential_identifier_char(c)) {
  ------------------
  |  |   13|  1.03M|#define is_potential_identifier_char(c) (\
  |  |   14|  1.03M|              (c >= 'a' && c <= 'z')\
  |  |  ------------------
  |  |  |  Branch (14:16): [True: 14.3k, False: 1.02M]
  |  |  |  Branch (14:28): [True: 427, False: 13.9k]
  |  |  ------------------
  |  |   15|  1.03M|               || (c >= 'A' && c <= 'Z')\
  |  |  ------------------
  |  |  |  Branch (15:20): [True: 54.2k, False: 983k]
  |  |  |  Branch (15:32): [True: 65, False: 54.1k]
  |  |  ------------------
  |  |   16|  1.03M|               || (c >= '0' && c <= '9')\
  |  |  ------------------
  |  |  |  Branch (16:20): [True: 154k, False: 883k]
  |  |  |  Branch (16:32): [True: 8, False: 154k]
  |  |  ------------------
  |  |   17|  1.03M|               || c == '_'\
  |  |  ------------------
  |  |  |  Branch (17:19): [True: 2, False: 1.03M]
  |  |  ------------------
  |  |   18|  1.03M|               || (c >= 128))
  |  |  ------------------
  |  |  |  Branch (18:19): [True: 0, False: 1.03M]
  |  |  ------------------
  ------------------
  |  Branch (82:9): [True: 1.03M, False: 557]
  ------------------
   83|    502|        tok_backup(tok, c);
  ------------------
  |  |   24|    502|#define tok_backup _PyLexer_backup
  ------------------
   84|    502|        _PyTokenizer_syntaxerror(tok, "invalid %s literal", kind);
   85|    502|        return 0;
   86|    502|    }
   87|  1.07M|    return 1;
   88|  1.07M|}
number.c:lookahead:
   11|  19.4k|{
   12|  19.4k|    const char *s = test;
   13|  19.4k|    int res = 0;
   14|  56.4k|    while (1) {
  ------------------
  |  Branch (14:12): [True: 56.4k, Folded]
  ------------------
   15|  56.4k|        int c = tok_nextc(tok);
   16|  56.4k|        if (*s == 0) {
  ------------------
  |  Branch (16:13): [True: 19.2k, False: 37.2k]
  ------------------
   17|  19.2k|            res = !is_potential_identifier_char(c);
  ------------------
  |  |   13|  19.2k|#define is_potential_identifier_char(c) (\
  |  |   14|  19.2k|              (c >= 'a' && c <= 'z')\
  |  |  ------------------
  |  |  |  Branch (14:16): [True: 138, False: 19.1k]
  |  |  |  Branch (14:28): [True: 13, False: 125]
  |  |  ------------------
  |  |   15|  19.2k|               || (c >= 'A' && c <= 'Z')\
  |  |  ------------------
  |  |  |  Branch (15:20): [True: 704, False: 18.5k]
  |  |  |  Branch (15:32): [True: 5, False: 699]
  |  |  ------------------
  |  |   16|  19.2k|               || (c >= '0' && c <= '9')\
  |  |  ------------------
  |  |  |  Branch (16:20): [True: 953, False: 18.2k]
  |  |  |  Branch (16:32): [True: 10, False: 943]
  |  |  ------------------
  |  |   17|  19.2k|               || c == '_'\
  |  |  ------------------
  |  |  |  Branch (17:19): [True: 6, False: 19.2k]
  |  |  ------------------
  |  |   18|  19.2k|               || (c >= 128))
  |  |  ------------------
  |  |  |  Branch (18:19): [True: 5, False: 19.2k]
  |  |  ------------------
  ------------------
   18|  19.2k|        }
   19|  37.2k|        else if (c == *s) {
  ------------------
  |  Branch (19:18): [True: 37.0k, False: 165]
  ------------------
   20|  37.0k|            s++;
   21|  37.0k|            continue;
   22|  37.0k|        }
   23|       |
   24|  19.4k|        tok_backup(tok, c);
  ------------------
  |  |   24|  19.4k|#define tok_backup _PyLexer_backup
  ------------------
   25|  56.4k|        while (s != test) {
  ------------------
  |  Branch (25:16): [True: 37.0k, False: 19.4k]
  ------------------
   26|  37.0k|            tok_backup(tok, *--s);
  ------------------
  |  |   24|  37.0k|#define tok_backup _PyLexer_backup
  ------------------
   27|  37.0k|        }
   28|  19.4k|        return res;
   29|  56.4k|    }
   30|  19.4k|}
number.c:tok_decimal_tail:
   92|  1.08M|{
   93|  1.08M|    int c;
   94|       |
   95|  1.10M|    while (1) {
  ------------------
  |  Branch (95:12): [True: 1.10M, Folded]
  ------------------
   96|  5.58M|        do {
   97|  5.58M|            c = tok_nextc(tok);
   98|  5.58M|        } while (Py_ISDIGIT(c));
  ------------------
  |  |   24|  5.58M|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  5.58M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  5.58M|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  |  |  |  Branch (24:24): [True: 4.47M, False: 1.10M]
  |  |  ------------------
  ------------------
   99|  1.10M|        if (c != '_') {
  ------------------
  |  Branch (99:13): [True: 1.08M, False: 13.6k]
  ------------------
  100|  1.08M|            break;
  101|  1.08M|        }
  102|  13.6k|        c = tok_nextc(tok);
  103|  13.6k|        if (!Py_ISDIGIT(c)) {
  ------------------
  |  |   24|  13.6k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  13.6k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  13.6k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  ------------------
  |  Branch (103:13): [True: 20, False: 13.6k]
  ------------------
  104|     20|            tok_backup(tok, c);
  ------------------
  |  |   24|     20|#define tok_backup _PyLexer_backup
  ------------------
  105|     20|            _PyTokenizer_syntaxerror(tok, "invalid decimal literal");
  106|     20|            return 0;
  107|     20|        }
  108|  13.6k|    }
  109|  1.08M|    return c;
  110|  1.08M|}

_PyLexer_PushFTString:
   11|  23.9k|{
   12|  23.9k|    assert(tok->ftstring_depth >= 0 && tok->ftstring_depth <= tok->ftstring_capacity);
  ------------------
  |  Branch (12:5): [True: 23.9k, False: 0]
  |  Branch (12:5): [True: 23.9k, False: 0]
  ------------------
   13|  23.9k|    int next_depth = tok->ftstring_depth + 1;
   14|  23.9k|    if (next_depth >= MAXFTSTRINGLEVEL) {
  ------------------
  |  |   10|  23.9k|#define MAXFTSTRINGLEVEL 150
  ------------------
  |  Branch (14:9): [True: 1, False: 23.9k]
  ------------------
   15|      1|        _PyTokenizer_syntaxerror(
   16|      1|            tok, "too many nested f-strings or t-strings");
   17|      1|        return NULL;
   18|      1|    }
   19|  23.9k|    if (tok->ftstring_depth == tok->ftstring_capacity) {
  ------------------
  |  Branch (19:9): [True: 842, False: 23.1k]
  ------------------
   20|    842|        int capacity = Py_MIN(Py_MAX(tok->ftstring_capacity * 2, 4),
  ------------------
  |  |  120|    842|       __extension__ \
  |  |  121|  1.68k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|    842|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  |  Branch (121:32): [True: 507, False: 335]
  |  |  ------------------
  |  |  122|    842|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|    842|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|    842|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 834, False: 8]
  |  |  ------------------
  ------------------
   21|    842|                              MAXFTSTRINGLEVEL);
   22|    842|        size_t size = (size_t)capacity * sizeof(*tok->ftstring_stack);
   23|    842|        ftstring_state *stack;
   24|    842|        if (tok->ftstring_stack == tok->ftstring_stack_inline) {
  ------------------
  |  Branch (24:13): [True: 335, False: 507]
  ------------------
   25|    335|            stack = PyMem_Malloc(size);
   26|    335|            if (stack != NULL) {
  ------------------
  |  Branch (26:17): [True: 335, False: 0]
  ------------------
   27|    335|                memcpy(stack, tok->ftstring_stack,
   28|    335|                       (size_t)tok->ftstring_depth * sizeof(*stack));
   29|    335|            }
   30|    335|        }
   31|    507|        else {
   32|    507|            stack = PyMem_Realloc(tok->ftstring_stack, size);
   33|    507|        }
   34|    842|        if (stack == NULL) {
  ------------------
  |  Branch (34:13): [True: 0, False: 842]
  ------------------
   35|      0|            PyErr_NoMemory();
   36|      0|            tok->done = E_NOMEM;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
   37|      0|            return NULL;
   38|      0|        }
   39|    842|        tok->ftstring_stack = stack;
   40|    842|        tok->ftstring_capacity = capacity;
   41|    842|    }
   42|  23.9k|    ftstring_state *state = &tok->ftstring_stack[tok->ftstring_depth];
   43|  23.9k|    tok->ftstring_depth = next_depth;
   44|  23.9k|    *state = (ftstring_state){0};
   45|  23.9k|    return state;
   46|  23.9k|}
_PyLexer_PopFTString:
   50|  16.1k|{
   51|  16.1k|    ftstring_state *state = _PyLexer_CurrentFTString(tok);
   52|  16.1k|    assert(state != NULL);
  ------------------
  |  Branch (52:5): [True: 16.1k, False: 0]
  ------------------
   53|  16.1k|    PyMem_Free(state->comments);
   54|  16.1k|    tok->ftstring_depth--;
   55|  16.1k|}
_PyTokenizer_Free:
   60|  24.5k|{
   61|  24.5k|    if (tok->encoding != NULL) {
  ------------------
  |  Branch (61:9): [True: 15.8k, False: 8.70k]
  ------------------
   62|  15.8k|        PyMem_Free(tok->encoding);
   63|  15.8k|    }
   64|  24.5k|    Py_XDECREF(tok->filename);
  ------------------
  |  |  524|  24.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   65|  24.5k|    Py_XDECREF(tok->module);
  ------------------
  |  |  524|  24.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  24.5k|    _PyTok_ReaderFree(tok);
   67|  24.5k|    _PyTok_SourceClear(&tok->source);
   68|  32.4k|    for (int i = 0; i < tok->ftstring_depth; i++) {
  ------------------
  |  Branch (68:21): [True: 7.85k, False: 24.5k]
  ------------------
   69|  7.85k|        PyMem_Free(tok->ftstring_stack[i].comments);
   70|  7.85k|    }
   71|  24.5k|    if (tok->ftstring_stack != tok->ftstring_stack_inline) {
  ------------------
  |  Branch (71:9): [True: 335, False: 24.2k]
  ------------------
   72|    335|        PyMem_Free(tok->ftstring_stack);
   73|    335|    }
   74|  24.5k|    PyMem_Free(tok);
   75|  24.5k|}
_PyToken_Init:
   78|  5.04M|_PyToken_Init(struct token *token) {
   79|  5.04M|    *token = (struct token){
   80|  5.04M|        .type = -1,
   81|  5.04M|        .span = {-1, -1},
   82|  5.04M|        .start_loc = {-1, -1},
   83|  5.04M|        .end_loc = {-1, -1},
   84|  5.04M|    };
   85|  5.04M|}
_PyLexer_token_setup:
   89|  5.21M|{
   90|  5.21M|    token->level = tok->level;
   91|  5.21M|    token->is_raw = 0;
   92|  5.21M|    assert((start == -1 && end == -1) || (start >= 0 && end >= start));
  ------------------
  |  Branch (92:5): [True: 56.7k, False: 5.16M]
  |  Branch (92:5): [True: 56.7k, False: 0]
  |  Branch (92:5): [True: 5.16M, False: 0]
  |  Branch (92:5): [True: 5.16M, False: 0]
  ------------------
   93|  5.21M|    token->span = (_PyTok_Span){start, end};
   94|  5.21M|    if (start >= 0) {
  ------------------
  |  Branch (94:9): [True: 5.16M, False: 56.7k]
  ------------------
   95|  5.16M|        token->start_loc = tok->start_loc;
   96|  5.16M|        token->end_loc = (_PyTok_Loc){tok->lineno, _PyLexer_ByteColumn(tok)};
   97|  5.16M|    }
   98|  56.7k|    else {
   99|  56.7k|        token->start_loc = token->end_loc = (_PyTok_Loc){tok->lineno, -1};
  100|  56.7k|    }
  101|  5.21M|    return type;
  102|  5.21M|}

reader.c:_PyLexer_CurrentFTString:
  116|   355k|{
  117|   355k|    assert(tok->ftstring_stack != NULL);
  ------------------
  |  Branch (117:5): [True: 355k, False: 0]
  ------------------
  118|   355k|    assert(tok->ftstring_depth >= 0 && tok->ftstring_depth <= tok->ftstring_capacity);
  ------------------
  |  Branch (118:5): [True: 355k, False: 0]
  |  Branch (118:5): [True: 355k, False: 0]
  ------------------
  119|   355k|    if (tok->ftstring_depth == 0) {
  ------------------
  |  Branch (119:9): [True: 354k, False: 808]
  ------------------
  120|   354k|        return NULL;
  121|   354k|    }
  122|    808|    return &tok->ftstring_stack[tok->ftstring_depth - 1];
  123|   355k|}
reader.c:_PyLexer_BufferOffset:
  140|   421k|{
  141|   421k|    const char *base = _PyTok_SourceData(&tok->source);
  142|   421k|    assert(position >= base && position <= base + tok->source.len);
  ------------------
  |  Branch (142:5): [True: 421k, False: 0]
  |  Branch (142:5): [True: 421k, False: 0]
  ------------------
  143|   421k|    return tok->source.base_offset + (position - base);
  144|   421k|}
reader.c:_PyLexer_BufferPointer:
  148|   421k|{
  149|   421k|    assert(offset >= tok->source.base_offset);
  ------------------
  |  Branch (149:5): [True: 421k, False: 0]
  ------------------
  150|   421k|    assert(offset - tok->source.base_offset <= tok->source.len);
  ------------------
  |  Branch (150:5): [True: 421k, False: 0]
  ------------------
  151|   421k|    return _PyTok_SourceData(&tok->source) + (offset - tok->source.base_offset);
  152|   421k|}
helpers.c:_PyLexer_BufferPointer:
  148|  1.83k|{
  149|  1.83k|    assert(offset >= tok->source.base_offset);
  ------------------
  |  Branch (149:5): [True: 1.83k, False: 0]
  ------------------
  150|  1.83k|    assert(offset - tok->source.base_offset <= tok->source.len);
  ------------------
  |  Branch (150:5): [True: 1.83k, False: 0]
  ------------------
  151|  1.83k|    return _PyTok_SourceData(&tok->source) + (offset - tok->source.base_offset);
  152|  1.83k|}
lexer.c:_PyLexer_BufferPointer:
  148|  11.3M|{
  149|  11.3M|    assert(offset >= tok->source.base_offset);
  ------------------
  |  Branch (149:5): [True: 11.3M, False: 0]
  ------------------
  150|  11.3M|    assert(offset - tok->source.base_offset <= tok->source.len);
  ------------------
  |  Branch (150:5): [True: 11.3M, False: 0]
  ------------------
  151|  11.3M|    return _PyTok_SourceData(&tok->source) + (offset - tok->source.base_offset);
  152|  11.3M|}
lexer.c:_PyLexer_ByteColumn:
  167|  10.5M|{
  168|  10.5M|    assert(tok->line_start >= 0);
  ------------------
  |  Branch (168:5): [True: 10.5M, False: 0]
  ------------------
  169|  10.5M|    assert(tok->cur >= tok->line_start);
  ------------------
  |  Branch (169:5): [True: 10.5M, False: 0]
  ------------------
  170|  10.5M|    Py_ssize_t column = tok->cur - tok->line_start;
  171|  10.5M|    assert(column <= INT_MAX);
  ------------------
  |  Branch (171:5): [True: 10.5M, False: 0]
  ------------------
  172|  10.5M|    return (int)column;
  173|  10.5M|}
lexer.c:_PyLexer_BufferOffset:
  140|  2.37k|{
  141|  2.37k|    const char *base = _PyTok_SourceData(&tok->source);
  142|  2.37k|    assert(position >= base && position <= base + tok->source.len);
  ------------------
  |  Branch (142:5): [True: 2.37k, False: 0]
  |  Branch (142:5): [True: 2.37k, False: 0]
  ------------------
  143|  2.37k|    return tok->source.base_offset + (position - base);
  144|  2.37k|}
lexer.c:_PyLexer_FTStringBracketDepth:
  134|  21.8k|{
  135|  21.8k|    return tok->level - state->paren_level;
  136|  21.8k|}
lexer.c:_PyLexer_StringPrefix:
  127|     10|{
  128|     10|    return _PyLexer_IsTString(kind) ? 't' : 'f';
  ------------------
  |  Branch (128:12): [True: 3, False: 7]
  ------------------
  129|     10|}
lexer.c:_PyLexer_IsTString:
   50|     10|{
   51|     10|    return kind == TSTRING || kind == RAW_TSTRING;
  ------------------
  |  Branch (51:12): [True: 3, False: 7]
  |  Branch (51:31): [True: 0, False: 7]
  ------------------
   52|     10|}
lexer.c:_PyLexer_CurrentFTString:
  116|  5.21M|{
  117|  5.21M|    assert(tok->ftstring_stack != NULL);
  ------------------
  |  Branch (117:5): [True: 5.21M, False: 0]
  ------------------
  118|  5.21M|    assert(tok->ftstring_depth >= 0 && tok->ftstring_depth <= tok->ftstring_capacity);
  ------------------
  |  Branch (118:5): [True: 5.21M, False: 0]
  |  Branch (118:5): [True: 5.21M, False: 0]
  ------------------
  119|  5.21M|    if (tok->ftstring_depth == 0) {
  ------------------
  |  Branch (119:9): [True: 4.99M, False: 220k]
  ------------------
  120|  4.99M|        return NULL;
  121|  4.99M|    }
  122|   220k|    return &tok->ftstring_stack[tok->ftstring_depth - 1];
  123|  5.21M|}
state.c:_PyLexer_CurrentFTString:
  116|  16.1k|{
  117|  16.1k|    assert(tok->ftstring_stack != NULL);
  ------------------
  |  Branch (117:5): [True: 16.1k, False: 0]
  ------------------
  118|  16.1k|    assert(tok->ftstring_depth >= 0 && tok->ftstring_depth <= tok->ftstring_capacity);
  ------------------
  |  Branch (118:5): [True: 16.1k, False: 0]
  |  Branch (118:5): [True: 16.1k, False: 0]
  ------------------
  119|  16.1k|    if (tok->ftstring_depth == 0) {
  ------------------
  |  Branch (119:9): [True: 0, False: 16.1k]
  ------------------
  120|      0|        return NULL;
  121|      0|    }
  122|  16.1k|    return &tok->ftstring_stack[tok->ftstring_depth - 1];
  123|  16.1k|}
state.c:_PyLexer_ByteColumn:
  167|  5.16M|{
  168|  5.16M|    assert(tok->line_start >= 0);
  ------------------
  |  Branch (168:5): [True: 5.16M, False: 0]
  ------------------
  169|  5.16M|    assert(tok->cur >= tok->line_start);
  ------------------
  |  Branch (169:5): [True: 5.16M, False: 0]
  ------------------
  170|  5.16M|    Py_ssize_t column = tok->cur - tok->line_start;
  171|  5.16M|    assert(column <= INT_MAX);
  ------------------
  |  Branch (171:5): [True: 5.16M, False: 0]
  ------------------
  172|  5.16M|    return (int)column;
  173|  5.16M|}
string.c:_PyLexer_CurrentFTString:
  116|   132k|{
  117|   132k|    assert(tok->ftstring_stack != NULL);
  ------------------
  |  Branch (117:5): [True: 132k, False: 0]
  ------------------
  118|   132k|    assert(tok->ftstring_depth >= 0 && tok->ftstring_depth <= tok->ftstring_capacity);
  ------------------
  |  Branch (118:5): [True: 132k, False: 0]
  |  Branch (118:5): [True: 132k, False: 0]
  ------------------
  119|   132k|    if (tok->ftstring_depth == 0) {
  ------------------
  |  Branch (119:9): [True: 594, False: 131k]
  ------------------
  120|    594|        return NULL;
  121|    594|    }
  122|   131k|    return &tok->ftstring_stack[tok->ftstring_depth - 1];
  123|   132k|}
string.c:_PyLexer_FTStringBracketDepth:
  134|  91.3k|{
  135|  91.3k|    return tok->level - state->paren_level;
  136|  91.3k|}
string.c:_PyLexer_BufferSpanView:
  157|  7.30k|{
  158|  7.30k|    assert(length != NULL);
  ------------------
  |  Branch (158:5): [True: 7.30k, False: 0]
  ------------------
  159|  7.30k|    assert(_PyTok_SpanIsValid(span));
  ------------------
  |  Branch (159:5): [True: 7.30k, False: 0]
  ------------------
  160|  7.30k|    *length = span.end - span.start;
  161|  7.30k|    (void)_PyLexer_BufferPointer(tok, span.end);
  162|  7.30k|    return _PyLexer_BufferPointer(tok, span.start);
  163|  7.30k|}
string.c:_PyLexer_StringPrefix:
  127|    374|{
  128|    374|    return _PyLexer_IsTString(kind) ? 't' : 'f';
  ------------------
  |  Branch (128:12): [True: 201, False: 173]
  ------------------
  129|    374|}
string.c:_PyLexer_BufferPointer:
  148|  63.3k|{
  149|  63.3k|    assert(offset >= tok->source.base_offset);
  ------------------
  |  Branch (149:5): [True: 63.3k, False: 0]
  ------------------
  150|  63.3k|    assert(offset - tok->source.base_offset <= tok->source.len);
  ------------------
  |  Branch (150:5): [True: 63.3k, False: 0]
  ------------------
  151|  63.3k|    return _PyTok_SourceData(&tok->source) + (offset - tok->source.base_offset);
  152|  63.3k|}
string.c:_PyLexer_IsRawString:
   56|  92.8k|{
   57|  92.8k|    return kind == RAW_FSTRING || kind == RAW_TSTRING;
  ------------------
  |  Branch (57:12): [True: 17.7k, False: 75.0k]
  |  Branch (57:35): [True: 1.95k, False: 73.1k]
  ------------------
   58|  92.8k|}
string.c:_PyLexer_ByteColumn:
  167|  92.8k|{
  168|  92.8k|    assert(tok->line_start >= 0);
  ------------------
  |  Branch (168:5): [True: 92.8k, False: 0]
  ------------------
  169|  92.8k|    assert(tok->cur >= tok->line_start);
  ------------------
  |  Branch (169:5): [True: 92.8k, False: 0]
  ------------------
  170|  92.8k|    Py_ssize_t column = tok->cur - tok->line_start;
  171|  92.8k|    assert(column <= INT_MAX);
  ------------------
  |  Branch (171:5): [True: 92.8k, False: 0]
  ------------------
  172|  92.8k|    return (int)column;
  173|  92.8k|}
string.c:_PyLexer_IsTString:
   50|   102k|{
   51|   102k|    return kind == TSTRING || kind == RAW_TSTRING;
  ------------------
  |  Branch (51:12): [True: 27.5k, False: 74.9k]
  |  Branch (51:31): [True: 1.95k, False: 72.9k]
  ------------------
   52|   102k|}
api.c:_PyLexer_BufferSpanView:
  157|  5.00M|{
  158|  5.00M|    assert(length != NULL);
  ------------------
  |  Branch (158:5): [True: 5.00M, False: 0]
  ------------------
  159|  5.00M|    assert(_PyTok_SpanIsValid(span));
  ------------------
  |  Branch (159:5): [True: 5.00M, False: 0]
  ------------------
  160|  5.00M|    *length = span.end - span.start;
  161|  5.00M|    (void)_PyLexer_BufferPointer(tok, span.end);
  162|  5.00M|    return _PyLexer_BufferPointer(tok, span.start);
  163|  5.00M|}
api.c:_PyLexer_BufferPointer:
  148|  10.0M|{
  149|  10.0M|    assert(offset >= tok->source.base_offset);
  ------------------
  |  Branch (149:5): [True: 10.0M, False: 0]
  ------------------
  150|  10.0M|    assert(offset - tok->source.base_offset <= tok->source.len);
  ------------------
  |  Branch (150:5): [True: 10.0M, False: 0]
  ------------------
  151|  10.0M|    return _PyTok_SourceData(&tok->source) + (offset - tok->source.base_offset);
  152|  10.0M|}

_PyLexer_record_ftstring_comment:
   27|    200|{
   28|    200|    assert(state == _PyLexer_CurrentFTString(tok) && state->mode == FTSTRING_MODE_EXPRESSION);
  ------------------
  |  Branch (28:5): [True: 200, False: 0]
  |  Branch (28:5): [True: 200, False: 0]
  ------------------
   29|    200|    if (state->expr_span.end >= 0) {
  ------------------
  |  Branch (29:9): [True: 1, False: 199]
  ------------------
   30|      1|        return 0;
   31|      1|    }
   32|    200|    assert(state->expr_span.start >= 0);
  ------------------
  |  Branch (32:5): [True: 199, False: 0]
  ------------------
   33|    199|    tokenizer_comments *comments = state->comments;
   34|    199|    if (comments == NULL || comments->count == comments->capacity) {
  ------------------
  |  Branch (34:9): [True: 46, False: 153]
  |  Branch (34:29): [True: 22, False: 131]
  ------------------
   35|     68|        Py_ssize_t max_capacity = (PY_SSIZE_T_MAX -
  ------------------
  |  |  137|     68|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
   36|     68|            (Py_ssize_t)sizeof(*comments)) /
   37|     68|            (Py_ssize_t)sizeof(*comments->spans);
   38|     68|        if (comments != NULL && comments->capacity > max_capacity / 2) {
  ------------------
  |  Branch (38:13): [True: 22, False: 46]
  |  Branch (38:33): [True: 0, False: 22]
  ------------------
   39|      0|            PyErr_NoMemory();
   40|      0|            return -1;
   41|      0|        }
   42|     68|        Py_ssize_t capacity = comments == NULL ? 4 : comments->capacity * 2;
  ------------------
  |  Branch (42:31): [True: 46, False: 22]
  ------------------
   43|     68|        size_t size = sizeof(*comments) +
   44|     68|            (size_t)capacity * sizeof(*comments->spans);
   45|     68|        tokenizer_comments *resized = PyMem_Realloc(comments, size);
   46|     68|        if (resized == NULL) {
  ------------------
  |  Branch (46:13): [True: 0, False: 68]
  ------------------
   47|      0|            PyErr_NoMemory();
   48|      0|            return -1;
   49|      0|        }
   50|     68|        comments = resized;
   51|     68|        if (state->comments == NULL) {
  ------------------
  |  Branch (51:13): [True: 46, False: 22]
  ------------------
   52|     46|            comments->count = 0;
   53|     46|        }
   54|     68|        comments->capacity = capacity;
   55|     68|        state->comments = comments;
   56|     68|    }
   57|    199|    comments->spans[comments->count++] =
   58|    199|        (_PyTok_Span){start, end};
   59|    199|    return 0;
   60|    199|}
_PyLexer_ftstring_punctuation:
  159|  40.5k|{
  160|  40.5k|    assert(state->mode == FTSTRING_MODE_EXPRESSION);
  ------------------
  |  Branch (160:5): [True: 40.5k, False: 0]
  ------------------
  161|  40.5k|    assert(c == ':' || c == '}' || c == '!');
  ------------------
  |  Branch (161:5): [True: 13.7k, False: 26.8k]
  |  Branch (161:5): [True: 21.3k, False: 5.50k]
  |  Branch (161:5): [True: 5.50k, False: 0]
  ------------------
  162|  40.5k|    if (_PyLexer_FTStringBracketDepth(tok, state) != state->replacement_depth) {
  ------------------
  |  Branch (162:9): [True: 1.76k, False: 38.8k]
  ------------------
  163|  1.76k|        return 0;
  164|  1.76k|    }
  165|  38.8k|    if (c == '!') {
  ------------------
  |  Branch (165:9): [True: 5.44k, False: 33.3k]
  ------------------
  166|  5.44k|        int next = tok_nextc(tok);
  167|  5.44k|        tok_backup(tok, next);
  ------------------
  |  |   24|  5.44k|#define tok_backup _PyLexer_backup
  ------------------
  168|  5.44k|        if (next == '=') {
  ------------------
  |  Branch (168:13): [True: 8, False: 5.43k]
  ------------------
  169|      8|            return 0;
  170|      8|        }
  171|  5.44k|    }
  172|  38.8k|    if (finish_ftstring_expr(tok, state, token) < 0) {
  ------------------
  |  Branch (172:9): [True: 24, False: 38.8k]
  ------------------
  173|     24|        return -1;
  174|     24|    }
  175|  38.8k|    if (c == ':') {
  ------------------
  |  Branch (175:9): [True: 12.9k, False: 25.8k]
  ------------------
  176|  12.9k|        state->mode = FTSTRING_MODE_FORMAT_SPEC;
  177|  12.9k|        return COLON;
  ------------------
  |  |   27|  12.9k|#define COLON           11
  ------------------
  178|  12.9k|    }
  179|  25.8k|    return 0;
  180|  38.8k|}
_PyLexer_close_ftstring_expr:
  185|  21.7k|{
  186|  21.7k|    assert(state->mode == FTSTRING_MODE_EXPRESSION);
  ------------------
  |  Branch (186:5): [True: 21.7k, False: 0]
  ------------------
  187|  21.7k|    assert(c == ')' || c == ']' || c == '}');
  ------------------
  |  Branch (187:5): [True: 373, False: 21.4k]
  |  Branch (187:5): [True: 19, False: 21.3k]
  |  Branch (187:5): [True: 21.3k, False: 0]
  ------------------
  188|  21.7k|    int depth = _PyLexer_FTStringBracketDepth(tok, state);
  189|  21.7k|    if (depth < 0) {
  ------------------
  |  Branch (189:9): [True: 0, False: 21.7k]
  ------------------
  190|      0|        _PyTokenizer_syntaxerror(tok, "%c-string: unmatched '%c'",
  191|      0|                                _PyLexer_StringPrefix(state->kind), c);
  192|      0|        return -1;
  193|      0|    }
  194|  21.7k|    if (c == '}' && depth == state->replacement_depth - 1) {
  ------------------
  |  Branch (194:9): [True: 21.3k, False: 392]
  |  Branch (194:21): [True: 20.4k, False: 955]
  ------------------
  195|  20.4k|        state->replacement_depth--;
  196|  20.4k|        state->mode = FTSTRING_MODE_MIDDLE;
  197|  20.4k|        state->debug_expr = 0;
  198|  20.4k|    }
  199|  21.7k|    return 0;
  200|  21.7k|}
_PyLexer_mark_ftstring_debug:
  204|  2.01k|{
  205|  2.01k|    assert(state->mode == FTSTRING_MODE_EXPRESSION);
  ------------------
  |  Branch (205:5): [True: 2.01k, False: 0]
  ------------------
  206|  2.01k|    if (_PyLexer_FTStringBracketDepth(tok, state) == state->replacement_depth) {
  ------------------
  |  Branch (206:9): [True: 1.98k, False: 29]
  ------------------
  207|  1.98k|        state->debug_expr = 1;
  208|  1.98k|    }
  209|  2.01k|}
_PyLexer_check_string_prefixes:
  214|  45.7k|                                             int saw_f, int saw_t) {
  215|       |    // Supported: rb, rf, rt (in any order)
  216|       |    // Unsupported: ub, ur, uf, ut, bf, bt, ft (in any order)
  217|       |
  218|  45.7k|#define RETURN_SYNTAX_ERROR(PREFIX1, PREFIX2)                             \
  219|  45.7k|    do {                                                                  \
  220|  45.7k|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  221|  45.7k|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  222|  45.7k|            (int)(tok->cur - tok->line_start),                            \
  223|  45.7k|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  224|  45.7k|        return -1;                                                        \
  225|  45.7k|    } while (0)
  226|       |
  227|  45.7k|    if (saw_u && saw_b) {
  ------------------
  |  Branch (227:9): [True: 3.79k, False: 41.9k]
  |  Branch (227:18): [True: 1, False: 3.79k]
  ------------------
  228|      1|        RETURN_SYNTAX_ERROR("u", "b");
  ------------------
  |  |  219|      1|    do {                                                                  \
  |  |  220|      1|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      1|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      1|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      1|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      1|        return -1;                                                        \
  |  |  225|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  229|      1|    }
  230|  45.6k|    if (saw_u && saw_r) {
  ------------------
  |  Branch (230:9): [True: 3.79k, False: 41.9k]
  |  Branch (230:18): [True: 1, False: 3.79k]
  ------------------
  231|      1|        RETURN_SYNTAX_ERROR("u", "r");
  ------------------
  |  |  219|      1|    do {                                                                  \
  |  |  220|      1|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      1|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      1|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      1|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      1|        return -1;                                                        \
  |  |  225|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  232|      1|    }
  233|  45.6k|    if (saw_u && saw_f) {
  ------------------
  |  Branch (233:9): [True: 3.79k, False: 41.9k]
  |  Branch (233:18): [True: 3, False: 3.79k]
  ------------------
  234|      3|        RETURN_SYNTAX_ERROR("u", "f");
  ------------------
  |  |  219|      3|    do {                                                                  \
  |  |  220|      3|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      3|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      3|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      3|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      3|        return -1;                                                        \
  |  |  225|      3|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  235|      3|    }
  236|  45.6k|    if (saw_u && saw_t) {
  ------------------
  |  Branch (236:9): [True: 3.79k, False: 41.9k]
  |  Branch (236:18): [True: 4, False: 3.78k]
  ------------------
  237|      4|        RETURN_SYNTAX_ERROR("u", "t");
  ------------------
  |  |  219|      4|    do {                                                                  \
  |  |  220|      4|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      4|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      4|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      4|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      4|        return -1;                                                        \
  |  |  225|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  238|      4|    }
  239|       |
  240|  45.6k|    if (saw_b && saw_f) {
  ------------------
  |  Branch (240:9): [True: 15.8k, False: 29.8k]
  |  Branch (240:18): [True: 2, False: 15.8k]
  ------------------
  241|      2|        RETURN_SYNTAX_ERROR("b", "f");
  ------------------
  |  |  219|      2|    do {                                                                  \
  |  |  220|      2|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      2|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      2|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      2|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      2|        return -1;                                                        \
  |  |  225|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  242|      2|    }
  243|  45.6k|    if (saw_b && saw_t) {
  ------------------
  |  Branch (243:9): [True: 15.8k, False: 29.8k]
  |  Branch (243:18): [True: 1, False: 15.8k]
  ------------------
  244|      1|        RETURN_SYNTAX_ERROR("b", "t");
  ------------------
  |  |  219|      1|    do {                                                                  \
  |  |  220|      1|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      1|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      1|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      1|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      1|        return -1;                                                        \
  |  |  225|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  245|      1|    }
  246|       |
  247|  45.6k|    if (saw_f && saw_t) {
  ------------------
  |  Branch (247:9): [True: 14.6k, False: 31.0k]
  |  Branch (247:18): [True: 2, False: 14.6k]
  ------------------
  248|      2|        RETURN_SYNTAX_ERROR("f", "t");
  ------------------
  |  |  219|      2|    do {                                                                  \
  |  |  220|      2|        (void)_PyTokenizer_syntaxerror_known_range(                       \
  |  |  221|      2|            tok, (int)(tok->start + 1 - tok->line_start),                 \
  |  |  222|      2|            (int)(tok->cur - tok->line_start),                            \
  |  |  223|      2|            "'" PREFIX1 "' and '" PREFIX2 "' prefixes are incompatible"); \
  |  |  224|      2|        return -1;                                                        \
  |  |  225|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (225:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  249|      2|    }
  250|       |
  251|  45.6k|#undef RETURN_SYNTAX_ERROR
  252|       |
  253|  45.6k|    return 0;
  254|  45.6k|}
_PyLexer_scan_fstring_start:
  258|  23.9k|{
  259|  23.9k|    _PyTok_Off p_start = -1;
  260|  23.9k|    _PyTok_Off p_end = -1;
  261|       |
  262|  23.9k|    int quote = c;
  263|  23.9k|    int quote_size = 1;             /* 1 or 3 */
  264|       |
  265|       |    /* Find the quote size and start of string */
  266|  23.9k|    int after_quote = tok_nextc(tok);
  267|  23.9k|    if (after_quote == quote) {
  ------------------
  |  Branch (267:9): [True: 8.31k, False: 15.6k]
  ------------------
  268|  8.31k|        int after_after_quote = tok_nextc(tok);
  269|  8.31k|        if (after_after_quote == quote) {
  ------------------
  |  Branch (269:13): [True: 5.84k, False: 2.47k]
  ------------------
  270|  5.84k|            quote_size = 3;
  271|  5.84k|        }
  272|  2.47k|        else {
  273|       |            // TODO: Check this
  274|  2.47k|            tok_backup(tok, after_after_quote);
  ------------------
  |  |   24|  2.47k|#define tok_backup _PyLexer_backup
  ------------------
  275|  2.47k|            tok_backup(tok, after_quote);
  ------------------
  |  |   24|  2.47k|#define tok_backup _PyLexer_backup
  ------------------
  276|  2.47k|        }
  277|  8.31k|    }
  278|  23.9k|    if (after_quote != quote) {
  ------------------
  |  Branch (278:9): [True: 15.6k, False: 8.31k]
  ------------------
  279|  15.6k|        tok_backup(tok, after_quote);
  ------------------
  |  |   24|  15.6k|#define tok_backup _PyLexer_backup
  ------------------
  280|  15.6k|    }
  281|       |
  282|  23.9k|    p_start = tok->start;
  283|  23.9k|    p_end = tok->cur;
  284|  23.9k|    ftstring_state *state = _PyLexer_PushFTString(tok);
  285|  23.9k|    if (state == NULL) {
  ------------------
  |  Branch (285:9): [True: 1, False: 23.9k]
  ------------------
  286|      1|        return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    8|      1|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  287|      1|    }
  288|  23.9k|    state->mode = FTSTRING_MODE_MIDDLE;
  289|  23.9k|    state->quote = quote;
  290|  23.9k|    state->quote_size = quote_size;
  291|  23.9k|    state->paren_level = tok->level;
  292|  23.9k|    state->start = tok->start;
  293|  23.9k|    state->start_loc = tok->start_loc;
  294|  23.9k|    state->expr_span = (_PyTok_Span){-1, -1};
  295|       |
  296|  23.9k|    int raw = 0;
  297|  23.9k|    int tstring = 0;
  298|  23.9k|    switch (*_PyLexer_BufferPointer(tok, tok->start)) {
  299|  2.67k|        case 'T':
  ------------------
  |  Branch (299:9): [True: 2.67k, False: 21.2k]
  ------------------
  300|  8.66k|        case 't':
  ------------------
  |  Branch (300:9): [True: 5.99k, False: 17.9k]
  ------------------
  301|  8.66k|            raw = Py_TOLOWER(_PyLexer_BufferPointer(tok, tok->start)[1]) == 'r';
  ------------------
  |  |   32|  8.66k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  8.66k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  302|  8.66k|            tstring = 1;
  303|  8.66k|            break;
  304|    496|        case 'F':
  ------------------
  |  Branch (304:9): [True: 496, False: 23.4k]
  ------------------
  305|  13.7k|        case 'f':
  ------------------
  |  Branch (305:9): [True: 13.2k, False: 10.7k]
  ------------------
  306|  13.7k|            raw = Py_TOLOWER(_PyLexer_BufferPointer(tok, tok->start)[1]) == 'r';
  ------------------
  |  |   32|  13.7k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  13.7k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  307|  13.7k|            break;
  308|    284|        case 'R':
  ------------------
  |  Branch (308:9): [True: 284, False: 23.6k]
  ------------------
  309|  1.58k|        case 'r':
  ------------------
  |  Branch (309:9): [True: 1.29k, False: 22.6k]
  ------------------
  310|  1.58k|            raw = 1;
  311|  1.58k|            tstring = Py_TOLOWER(_PyLexer_BufferPointer(tok, tok->start)[1]) == 't';
  ------------------
  |  |   32|  1.58k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  1.58k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  312|  1.58k|            break;
  313|      0|        default:
  ------------------
  |  Branch (313:9): [True: 0, False: 23.9k]
  ------------------
  314|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  315|  23.9k|    }
  316|  23.9k|    state->kind = tstring
  ------------------
  |  Branch (316:19): [True: 9.35k, False: 14.6k]
  ------------------
  317|  23.9k|        ? (raw ? RAW_TSTRING : TSTRING)
  ------------------
  |  Branch (317:12): [True: 828, False: 8.52k]
  ------------------
  318|  23.9k|        : (raw ? RAW_FSTRING : FSTRING);
  ------------------
  |  Branch (318:12): [True: 904, False: 13.7k]
  ------------------
  319|  23.9k|    return tstring ? MAKE_TOKEN(TSTRING_START) : MAKE_TOKEN(FSTRING_START);
  ------------------
  |  |    8|  9.35k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
                  return tstring ? MAKE_TOKEN(TSTRING_START) : MAKE_TOKEN(FSTRING_START);
  ------------------
  |  |    8|  14.6k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  |  Branch (319:12): [True: 9.35k, False: 14.6k]
  ------------------
  320|  23.9k|}
_PyLexer_scan_string:
  324|  61.7k|{
  325|  61.7k|    _PyTok_Off p_start = -1;
  326|  61.7k|    _PyTok_Off p_end = -1;
  327|       |
  328|  61.7k|    int quote = c;
  329|  61.7k|    int quote_size = 1;             /* 1 or 3 */
  330|  61.7k|    int end_quote_size = 0;
  331|  61.7k|    int has_escaped_quote = 0;
  332|       |
  333|       |    /* Find the quote size and start of string */
  334|  61.7k|    c = tok_nextc(tok);
  335|  61.7k|    if (c == quote) {
  ------------------
  |  Branch (335:9): [True: 27.7k, False: 34.0k]
  ------------------
  336|  27.7k|        c = tok_nextc(tok);
  337|  27.7k|        if (c == quote) {
  ------------------
  |  Branch (337:13): [True: 10.5k, False: 17.2k]
  ------------------
  338|  10.5k|            quote_size = 3;
  339|  10.5k|        }
  340|  17.2k|        else {
  341|  17.2k|            end_quote_size = 1;     /* empty string found */
  342|  17.2k|        }
  343|  27.7k|    }
  344|  61.7k|    if (c != quote) {
  ------------------
  |  Branch (344:9): [True: 51.2k, False: 10.5k]
  ------------------
  345|  51.2k|        tok_backup(tok, c);
  ------------------
  |  |   24|  51.2k|#define tok_backup _PyLexer_backup
  ------------------
  346|  51.2k|    }
  347|       |
  348|       |    /* Get rest of string */
  349|  2.13M|    while (end_quote_size != quote_size) {
  ------------------
  |  Branch (349:12): [True: 2.06M, False: 61.1k]
  ------------------
  350|  2.06M|        c = tok_nextc(tok);
  351|  2.06M|        if (tok->done == E_ERROR) {
  ------------------
  |  |   29|  2.06M|#define E_ERROR          17      /* Execution error */
  ------------------
  |  Branch (351:13): [True: 0, False: 2.06M]
  ------------------
  352|      0|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    8|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  353|      0|        }
  354|  2.06M|        if (tok->done == E_DECODE) {
  ------------------
  |  |   34|  2.06M|#define E_DECODE         22      /* Error in decoding into Unicode */
  ------------------
  |  Branch (354:13): [True: 0, False: 2.06M]
  ------------------
  355|      0|            break;
  356|      0|        }
  357|  2.06M|        if (c == EOF || (quote_size == 1 && c == '\n')) {
  ------------------
  |  Branch (357:13): [True: 399, False: 2.06M]
  |  Branch (357:26): [True: 1.14M, False: 923k]
  |  Branch (357:45): [True: 240, False: 1.14M]
  ------------------
  358|    639|            int end_lineno = tok->lineno;
  359|    639|            _PyTok_Loc location = tok->start_loc;
  360|    639|            const char *line = _PyLexer_BufferPointer(tok, tok->start) - location.byte_col;
  361|    639|            Py_ssize_t cursor_offset = (Py_ssize_t)location.byte_col + 1;
  362|       |
  363|    639|            const ftstring_state *state = _PyLexer_CurrentFTString(tok);
  364|    639|            if (state != NULL) {
  ------------------
  |  Branch (364:17): [True: 45, False: 594]
  ------------------
  365|       |                /* A matching quote may have been intended to close the
  366|       |                 * surrounding formatted string instead of opening a string
  367|       |                 * inside a replacement field. */
  368|     45|                if (state->quote == quote && state->quote_size == quote_size) {
  ------------------
  |  Branch (368:21): [True: 36, False: 9]
  |  Branch (368:46): [True: 34, False: 2]
  ------------------
  369|     34|                    int level = state->paren_level + state->replacement_depth - 1;
  370|     34|                    assert(level >= 0 && level < tok->level);
  ------------------
  |  Branch (370:21): [True: 34, False: 0]
  |  Branch (370:21): [True: 34, False: 0]
  ------------------
  371|     34|                    assert(tok->parenstack[level] == '{');
  ------------------
  |  Branch (371:21): [True: 34, False: 0]
  ------------------
  372|     34|                    int lineno = tok->parenlinenostack[level];
  373|     34|                    if (lineno != tok->lineno) {
  ------------------
  |  Branch (373:25): [True: 2, False: 32]
  ------------------
  374|      2|                        _PyTokenizer_syntaxerror_at(
  375|      2|                            tok, line, cursor_offset, location.lineno, -1, -1,
  376|      2|                            "%c-string: expecting '}' to close '{' on line %d",
  377|      2|                            _PyLexer_StringPrefix(state->kind), lineno);
  378|      2|                    }
  379|     32|                    else {
  380|     32|                        _PyTokenizer_syntaxerror_at(
  381|     32|                            tok, line, cursor_offset, location.lineno, -1, -1,
  382|     32|                            "%c-string: expecting '}'",
  383|     32|                            _PyLexer_StringPrefix(state->kind));
  384|     32|                    }
  385|     34|                    return string_error_token(tok, token, tok->start, location);
  386|     34|                }
  387|     45|            }
  388|       |
  389|    605|            if (quote_size == 3) {
  ------------------
  |  Branch (389:17): [True: 60, False: 545]
  ------------------
  390|     60|                _PyTokenizer_syntaxerror_at(
  391|     60|                    tok, line, cursor_offset, location.lineno, -1, -1,
  392|     60|                    "unterminated triple-quoted string literal"
  393|     60|                    " (detected at line %d)", end_lineno);
  394|     60|                if (c != '\n') {
  ------------------
  |  Branch (394:21): [True: 60, False: 0]
  ------------------
  395|     60|                    tok->done = E_EOFS;
  ------------------
  |  |   35|     60|#define E_EOFS           23      /* EOF in triple-quoted string */
  ------------------
  396|     60|                }
  397|     60|                return string_error_token(tok, token, tok->start, location);
  398|     60|            }
  399|    545|            else {
  400|    545|                if (has_escaped_quote) {
  ------------------
  |  Branch (400:21): [True: 5, False: 540]
  ------------------
  401|      5|                    _PyTokenizer_syntaxerror_at(
  402|      5|                        tok, line, cursor_offset, location.lineno, -1, -1,
  403|      5|                        "unterminated string literal (detected at line %d); "
  404|      5|                        "perhaps you escaped the end quote?",
  405|      5|                        end_lineno
  406|      5|                    );
  407|    540|                } else {
  408|    540|                    _PyTokenizer_syntaxerror_at(
  409|    540|                        tok, line, cursor_offset, location.lineno, -1, -1,
  410|    540|                        "unterminated string literal (detected at line %d)", end_lineno
  411|    540|                    );
  412|    540|                }
  413|    545|                if (c != '\n') {
  ------------------
  |  Branch (413:21): [True: 315, False: 230]
  ------------------
  414|    315|                    tok->done = E_EOLS;
  ------------------
  |  |   36|    315|#define E_EOLS           24      /* EOL in single-quoted string */
  ------------------
  415|    315|                }
  416|    545|                return string_error_token(tok, token, tok->start, location);
  417|    545|            }
  418|    605|        }
  419|  2.06M|        if (c == quote) {
  ------------------
  |  Branch (419:13): [True: 87.9k, False: 1.98M]
  ------------------
  420|  87.9k|            end_quote_size += 1;
  421|  87.9k|        }
  422|  1.98M|        else {
  423|  1.98M|            end_quote_size = 0;
  424|  1.98M|            if (c == '\\') {
  ------------------
  |  Branch (424:17): [True: 99.2k, False: 1.88M]
  ------------------
  425|  99.2k|                c = tok_nextc(tok);  /* skip escaped char */
  426|  99.2k|                if (c == quote) {  /* but record whether the escaped char was a quote */
  ------------------
  |  Branch (426:21): [True: 1.25k, False: 98.0k]
  ------------------
  427|  1.25k|                    has_escaped_quote = 1;
  428|  1.25k|                }
  429|  99.2k|                if (c == '\r') {
  ------------------
  |  Branch (429:21): [True: 0, False: 99.2k]
  ------------------
  430|      0|                    c = tok_nextc(tok);
  431|      0|                }
  432|  99.2k|            }
  433|  1.98M|        }
  434|  2.06M|    }
  435|       |
  436|  61.1k|    p_start = tok->start;
  437|  61.1k|    p_end = tok->cur;
  438|  61.1k|    return MAKE_TOKEN(STRING);
  ------------------
  |  |    8|  61.1k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  439|  61.7k|}
_PyLexer_get_ftstring:
  443|  92.8k|{
  444|  92.8k|    assert(current == _PyLexer_CurrentFTString(tok) && current->mode != FTSTRING_MODE_EXPRESSION);
  ------------------
  |  Branch (444:5): [True: 92.8k, False: 0]
  |  Branch (444:5): [True: 92.8k, False: 0]
  ------------------
  445|  92.8k|    assert((current->quote_size == 1 || current->quote_size == 3) &&
  ------------------
  |  Branch (445:5): [True: 55.9k, False: 36.8k]
  |  Branch (445:5): [True: 36.8k, False: 0]
  |  Branch (445:5): [True: 92.8k, False: 0]
  ------------------
  446|  92.8k|           current->replacement_depth <= MAX_EXPR_NESTING);
  447|  92.8k|    _PyTok_Off p_start = -1;
  448|  92.8k|    _PyTok_Off p_end = -1;
  449|  92.8k|    int token_type;
  450|  92.8k|    int end_quote_size = 0;
  451|  92.8k|    int unicode_escape = 0;
  452|  92.8k|    int quote = current->quote;
  453|  92.8k|    int quote_size = current->quote_size;
  454|  92.8k|    int in_format_spec = current->mode == FTSTRING_MODE_FORMAT_SPEC;
  455|  92.8k|    int raw = _PyLexer_IsRawString(current->kind);
  456|       |
  457|  92.8k|    tok->start = tok->cur;
  458|  92.8k|    tok->start_loc = (_PyTok_Loc){tok->lineno, _PyLexer_ByteColumn(tok)};
  459|       |
  460|  1.01M|    while (end_quote_size != quote_size) {
  ------------------
  |  Branch (460:12): [True: 990k, False: 28.0k]
  ------------------
  461|   990k|        int c = tok_nextc(tok);
  462|   990k|        if (tok->done == E_ERROR || tok->done == E_DECODE) {
  ------------------
  |  |   29|  1.98M|#define E_ERROR          17      /* Execution error */
  ------------------
                      if (tok->done == E_ERROR || tok->done == E_DECODE) {
  ------------------
  |  |   34|   990k|#define E_DECODE         22      /* Error in decoding into Unicode */
  ------------------
  |  Branch (462:13): [True: 0, False: 990k]
  |  Branch (462:37): [True: 0, False: 990k]
  ------------------
  463|      0|            return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    8|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  464|      0|        }
  465|       |
  466|   990k|        if (c == EOF || (quote_size == 1 && c == '\n')) {
  ------------------
  |  Branch (466:13): [True: 145, False: 990k]
  |  Branch (466:26): [True: 171k, False: 818k]
  |  Branch (466:45): [True: 110, False: 171k]
  ------------------
  467|    255|            if (tok_failed(tok)) {
  ------------------
  |  Branch (467:17): [True: 0, False: 255]
  ------------------
  468|      0|                return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    8|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  469|      0|            }
  470|       |
  471|    255|            if (in_format_spec && c == '\n') {
  ------------------
  |  Branch (471:17): [True: 64, False: 191]
  |  Branch (471:35): [True: 38, False: 26]
  ------------------
  472|     38|                return MAKE_TOKEN(_PyTokenizer_syntaxerror(
  ------------------
  |  |    8|     38|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  473|     38|                    tok,
  474|     38|                    "%c-string: newlines are not allowed in format specifiers for single quoted %c-strings",
  475|     38|                    _PyLexer_StringPrefix(current->kind),
  476|     38|                    _PyLexer_StringPrefix(current->kind)));
  477|     38|            }
  478|       |
  479|    217|            int end_lineno = tok->lineno;
  480|    217|            _PyTok_Loc location = current->start_loc;
  481|    217|            const char *line = _PyLexer_BufferPointer(tok, current->start) - location.byte_col;
  482|    217|            Py_ssize_t cursor_offset = (Py_ssize_t)location.byte_col + 1;
  483|       |
  484|    217|            if (quote_size == 3) {
  ------------------
  |  Branch (484:17): [True: 31, False: 186]
  ------------------
  485|     31|                _PyTokenizer_syntaxerror_at(
  486|     31|                    tok, line, cursor_offset, location.lineno, -1, -1,
  487|     31|                    "unterminated triple-quoted %c-string literal"
  488|     31|                    " (detected at line %d)",
  489|     31|                    _PyLexer_StringPrefix(current->kind), end_lineno);
  490|     31|                if (c != '\n') {
  ------------------
  |  Branch (490:21): [True: 31, False: 0]
  ------------------
  491|     31|                    tok->done = E_EOFS;
  ------------------
  |  |   35|     31|#define E_EOFS           23      /* EOF in triple-quoted string */
  ------------------
  492|     31|                }
  493|     31|                return string_error_token(tok, token,
  494|     31|                    current->start, location);
  495|     31|            }
  496|    186|            else {
  497|    186|                _PyTokenizer_syntaxerror_at(
  498|    186|                    tok, line, cursor_offset, location.lineno, -1, -1,
  499|    186|                    "unterminated %c-string literal (detected at line %d)",
  500|    186|                    _PyLexer_StringPrefix(current->kind), end_lineno);
  501|    186|                return string_error_token(tok, token,
  502|    186|                    current->start, location);
  503|    186|            }
  504|    217|        }
  505|       |
  506|   990k|        if (c == quote) {
  ------------------
  |  Branch (506:13): [True: 67.3k, False: 922k]
  ------------------
  507|  67.3k|            end_quote_size += 1;
  508|  67.3k|            continue;
  509|   922k|        } else {
  510|   922k|            end_quote_size = 0;
  511|   922k|        }
  512|       |
  513|   922k|        if (c == '{') {
  ------------------
  |  Branch (513:13): [True: 37.2k, False: 885k]
  ------------------
  514|  37.2k|            int peek = tok_nextc(tok);
  515|  37.2k|            if (peek != '{' || in_format_spec) {
  ------------------
  |  Branch (515:17): [True: 28.7k, False: 8.50k]
  |  Branch (515:32): [True: 512, False: 7.99k]
  ------------------
  516|  29.2k|                tok_backup(tok, peek);
  ------------------
  |  |   24|  29.2k|#define tok_backup _PyLexer_backup
  ------------------
  517|  29.2k|                _PyTok_Off expr_start = tok->cur;
  518|  29.2k|                tok_backup(tok, c);
  ------------------
  |  |   24|  29.2k|#define tok_backup _PyLexer_backup
  ------------------
  519|  29.2k|                if (begin_ftstring_expr(tok, current, expr_start) < 0) {
  ------------------
  |  Branch (519:21): [True: 13, False: 29.2k]
  ------------------
  520|     13|                    return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    8|     13|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  521|     13|                }
  522|  29.2k|                p_start = tok->start;
  523|  29.2k|                p_end = tok->cur;
  524|  29.2k|                if (p_start == p_end) {
  ------------------
  |  Branch (524:21): [True: 12.2k, False: 17.0k]
  ------------------
  525|  12.2k|                    return _PyLexer_get_normal(tok, current, token);
  526|  12.2k|                }
  527|  29.2k|            } else {
  528|  7.99k|                p_start = tok->start;
  529|  7.99k|                p_end = tok->cur - 1;
  530|  7.99k|            }
  531|  24.9k|            goto emit_middle;
  532|   885k|        } else if (c == '}') {
  ------------------
  |  Branch (532:20): [True: 27.2k, False: 858k]
  ------------------
  533|  27.2k|            if (unicode_escape) {
  ------------------
  |  Branch (533:17): [True: 348, False: 26.9k]
  ------------------
  534|    348|                p_start = tok->start;
  535|    348|                p_end = tok->cur;
  536|    348|                goto emit_middle;
  537|    348|            }
  538|  26.9k|            int peek = tok_nextc(tok);
  539|       |
  540|  26.9k|            int bracket_depth = _PyLexer_FTStringBracketDepth(tok, current);
  541|  26.9k|            if (peek == '}' && !in_format_spec && bracket_depth == 0) {
  ------------------
  |  Branch (541:17): [True: 21.2k, False: 5.71k]
  |  Branch (541:32): [True: 19.3k, False: 1.90k]
  |  Branch (541:51): [True: 15.2k, False: 4.08k]
  ------------------
  542|  15.2k|                p_start = tok->start;
  543|  15.2k|                p_end = tok->cur - 1;
  544|  15.2k|            }
  545|  11.6k|            else {
  546|  11.6k|                tok_backup(tok, peek);
  ------------------
  |  |   24|  11.6k|#define tok_backup _PyLexer_backup
  ------------------
  547|  11.6k|                if (!in_format_spec && bracket_depth == 0) {
  ------------------
  |  Branch (547:21): [True: 4.96k, False: 6.73k]
  |  Branch (547:40): [True: 51, False: 4.90k]
  ------------------
  548|     51|                    if (tok->start == tok->cur - 1) {
  ------------------
  |  Branch (548:25): [True: 34, False: 17]
  ------------------
  549|     34|                        return MAKE_TOKEN(_PyTokenizer_syntaxerror(
  ------------------
  |  |    8|     34|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  550|     34|                            tok, "%c-string: single '}' is not allowed",
  551|     34|                            _PyLexer_StringPrefix(current->kind)));
  552|     34|                    }
  553|     17|                    tok_backup(tok, c);
  ------------------
  |  |   24|     17|#define tok_backup _PyLexer_backup
  ------------------
  554|     17|                    p_start = tok->start;
  555|     17|                    p_end = tok->cur;
  556|     17|                    goto emit_middle;
  557|     51|                }
  558|  11.6k|                tok_backup(tok, c);
  ------------------
  |  |   24|  11.6k|#define tok_backup _PyLexer_backup
  ------------------
  559|  11.6k|                current->mode = FTSTRING_MODE_EXPRESSION;
  560|  11.6k|                p_start = tok->start;
  561|  11.6k|                p_end = tok->cur;
  562|  11.6k|            }
  563|  26.8k|            goto emit_middle;
  564|   858k|        } else if (c == '\\') {
  ------------------
  |  Branch (564:20): [True: 20.7k, False: 837k]
  ------------------
  565|  20.7k|            int peek = tok_nextc(tok);
  566|  20.7k|            if (peek == '\r') {
  ------------------
  |  Branch (566:17): [True: 0, False: 20.7k]
  ------------------
  567|      0|                peek = tok_nextc(tok);
  568|      0|            }
  569|  20.7k|            if (peek == '{' || peek == '}') {
  ------------------
  |  Branch (569:17): [True: 2.06k, False: 18.6k]
  |  Branch (569:32): [True: 2.09k, False: 16.5k]
  ------------------
  570|  4.15k|                if (!raw) {
  ------------------
  |  Branch (570:21): [True: 3.95k, False: 193]
  ------------------
  571|  3.95k|                    if (_PyTokenizer_warn_invalid_escape_sequence(tok, peek)) {
  ------------------
  |  Branch (571:25): [True: 0, False: 3.95k]
  ------------------
  572|      0|                        return MAKE_TOKEN(ERRORTOKEN);
  ------------------
  |  |    8|      0|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  573|      0|                    }
  574|  3.95k|                }
  575|  4.15k|                tok_backup(tok, peek);
  ------------------
  |  |   24|  4.15k|#define tok_backup _PyLexer_backup
  ------------------
  576|  4.15k|                continue;
  577|  4.15k|            }
  578|       |
  579|  16.5k|            if (!raw) {
  ------------------
  |  Branch (579:17): [True: 15.2k, False: 1.34k]
  ------------------
  580|  15.2k|                if (peek == 'N') {
  ------------------
  |  Branch (580:21): [True: 578, False: 14.6k]
  ------------------
  581|       |                    /* Handle named unicode escapes (\N{BULLET}) */
  582|    578|                    peek = tok_nextc(tok);
  583|    578|                    if (peek == '{') {
  ------------------
  |  Branch (583:25): [True: 364, False: 214]
  ------------------
  584|    364|                        unicode_escape = 1;
  585|    364|                    } else {
  586|    214|                        tok_backup(tok, peek);
  ------------------
  |  |   24|    214|#define tok_backup _PyLexer_backup
  ------------------
  587|    214|                    }
  588|    578|                }
  589|  15.2k|            }
  590|  16.5k|        }
  591|   922k|    }
  592|       |
  593|  28.0k|    p_start = tok->start;
  594|  28.0k|    p_end = tok->cur;
  595|  28.0k|    if (p_end - quote_size == p_start) {
  ------------------
  |  Branch (595:9): [True: 16.1k, False: 11.9k]
  ------------------
  596|  16.1k|        int end_token = FTSTRING_END(current);
  ------------------
  |  |   23|  16.1k|    (_PyLexer_IsTString((state)->kind) ? TSTRING_END : FSTRING_END)
  |  |  ------------------
  |  |  |  |   80|  3.78k|#define TSTRING_END     64
  |  |  ------------------
  |  |                   (_PyLexer_IsTString((state)->kind) ? TSTRING_END : FSTRING_END)
  |  |  ------------------
  |  |  |  |   77|  12.3k|#define FSTRING_END     61
  |  |  ------------------
  |  |  |  Branch (23:6): [True: 3.78k, False: 12.3k]
  |  |  ------------------
  ------------------
  597|  16.1k|        _PyLexer_PopFTString(tok);
  598|  16.1k|        return MAKE_TOKEN(end_token);
  ------------------
  |  |    8|  16.1k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  ------------------
  599|  16.1k|    }
  600|  35.3k|    for (int i = 0; i < quote_size; i++) {
  ------------------
  |  Branch (600:21): [True: 23.4k, False: 11.9k]
  ------------------
  601|  23.4k|        tok_backup(tok, quote);
  ------------------
  |  |   24|  23.4k|#define tok_backup _PyLexer_backup
  ------------------
  602|  23.4k|    }
  603|  11.9k|    p_end = tok->cur;
  604|  64.1k|emit_middle:
  605|  64.1k|    token_type = MAKE_TOKEN(FTSTRING_MIDDLE(current));
  ------------------
  |  |    8|   128k|#define MAKE_TOKEN(token_type) _PyLexer_token_setup(tok, token, token_type, p_start, p_end)
  |  |  ------------------
  |  |  |  Branch (8:65): [True: 17.0k, False: 47.1k]
  |  |  ------------------
  ------------------
  606|  64.1k|    token->is_raw = raw;
  607|  64.1k|    return token_type;
  608|  11.9k|}
string.c:finish_ftstring_expr:
   65|  38.8k|{
   66|  38.8k|    assert(token != NULL && state == _PyLexer_CurrentFTString(tok));
  ------------------
  |  Branch (66:5): [True: 38.8k, False: 0]
  |  Branch (66:5): [True: 38.8k, False: 0]
  ------------------
   67|  38.8k|    assert(state->mode == FTSTRING_MODE_EXPRESSION && tok->start >= 0);
  ------------------
  |  Branch (67:5): [True: 38.8k, False: 0]
  |  Branch (67:5): [True: 38.8k, False: 0]
  ------------------
   68|       |
   69|  38.8k|    if (state->expr_span.end >= 0) {
  ------------------
  |  Branch (69:9): [True: 17.0k, False: 21.8k]
  ------------------
   70|  17.0k|        return 0;
   71|  17.0k|    }
   72|  38.8k|    assert(state->expr_span.start >= 0);
  ------------------
  |  Branch (72:5): [True: 21.8k, False: 0]
  ------------------
   73|  21.8k|    state->expr_span.end = tok->start;
   74|  21.8k|    int tstring_interpolation = _PyLexer_IsTString(state->kind) &&
  ------------------
  |  Branch (74:33): [True: 8.47k, False: 13.3k]
  ------------------
   75|  8.47k|        state->replacement_depth == 1;
  ------------------
  |  Branch (75:9): [True: 6.36k, False: 2.11k]
  ------------------
   76|  21.8k|    if (!(state->debug_expr || tstring_interpolation) || token->metadata) {
  ------------------
  |  Branch (76:11): [True: 1.79k, False: 20.0k]
  |  Branch (76:32): [True: 5.50k, False: 14.5k]
  |  Branch (76:58): [True: 0, False: 7.30k]
  ------------------
   77|  14.5k|        return 0;
   78|  14.5k|    }
   79|  7.30k|    Py_ssize_t expr_len;
   80|  7.30k|    const char *expr = _PyLexer_BufferSpanView(
   81|  7.30k|        tok, state->expr_span, &expr_len);
   82|  7.30k|    tokenizer_comments *comments = state->comments;
   83|  7.30k|    PyObject *res;
   84|  7.30k|    if (comments != NULL && comments->count > 0) {
  ------------------
  |  Branch (84:9): [True: 37, False: 7.26k]
  |  Branch (84:29): [True: 29, False: 8]
  ------------------
   85|     29|        Py_ssize_t stripped_size = expr_len;
   86|     29|        _PyTok_Off previous_end = state->expr_span.start;
   87|     29|        Py_ssize_t comment_count = 0;
   88|    133|        for (Py_ssize_t i = 0; i < comments->count; i++) {
  ------------------
  |  Branch (88:32): [True: 104, False: 29]
  ------------------
   89|    104|            _PyTok_Span comment = comments->spans[i];
   90|    104|            assert(_PyTok_SpanIsValid(comment));
  ------------------
  |  Branch (90:13): [True: 104, False: 0]
  ------------------
   91|    104|            assert(comment.start >= previous_end);
  ------------------
  |  Branch (91:13): [True: 104, False: 0]
  ------------------
   92|    104|            if (comment.start >= state->expr_span.end) {
  ------------------
  |  Branch (92:17): [True: 0, False: 104]
  ------------------
   93|      0|                break;
   94|      0|            }
   95|    104|            assert(comment.end <= state->expr_span.end);
  ------------------
  |  Branch (95:13): [True: 104, False: 0]
  ------------------
   96|    104|            stripped_size -= comment.end - comment.start;
   97|    104|            previous_end = comment.end;
   98|    104|            comment_count++;
   99|    104|        }
  100|     29|        char *stripped = PyMem_Malloc((size_t)stripped_size);
  101|     29|        if (stripped == NULL) {
  ------------------
  |  Branch (101:13): [True: 0, False: 29]
  ------------------
  102|      0|            PyErr_NoMemory();
  103|      0|            return -1;
  104|      0|        }
  105|     29|        _PyTok_Off copied_to = state->expr_span.start;
  106|     29|        Py_ssize_t stripped_len = 0;
  107|    133|        for (Py_ssize_t i = 0; i < comment_count; i++) {
  ------------------
  |  Branch (107:32): [True: 104, False: 29]
  ------------------
  108|    104|            _PyTok_Span comment = comments->spans[i];
  109|    104|            Py_ssize_t length = comment.start - copied_to;
  110|    104|            memcpy(stripped + stripped_len,
  111|    104|                   expr + copied_to - state->expr_span.start,
  112|    104|                   (size_t)length);
  113|    104|            stripped_len += length;
  114|    104|            copied_to = comment.end;
  115|    104|        }
  116|     29|        Py_ssize_t length = state->expr_span.end - copied_to;
  117|     29|        memcpy(stripped + stripped_len,
  118|     29|               expr + copied_to - state->expr_span.start,
  119|     29|               (size_t)length);
  120|     29|        stripped_len += length;
  121|     29|        res = PyUnicode_DecodeUTF8(stripped, stripped_len, NULL);
  122|     29|        PyMem_Free(stripped);
  123|     29|    }
  124|  7.27k|    else {
  125|  7.27k|        res = PyUnicode_DecodeUTF8(expr, expr_len, NULL);
  126|  7.27k|    }
  127|       |
  128|  7.30k|    if (!res) {
  ------------------
  |  Branch (128:9): [True: 24, False: 7.27k]
  ------------------
  129|     24|        return -1;
  130|     24|    }
  131|  7.27k|    token->metadata = res;
  132|  7.27k|    return 0;
  133|  7.30k|}
string.c:string_error_token:
   13|    856|{
   14|    856|    tok->diagnostic = (_PyTokenizer_Diagnostic){
   15|    856|        .location = {location.lineno, location.byte_col + 1},
   16|    856|        .text_span = _PyTok_SpanFromBounds(start - location.byte_col, tok->inp),
   17|    856|    };
   18|    856|    int type = _PyLexer_token_setup(tok, token, ERRORTOKEN, -1, -1);
  ------------------
  |  |   83|    856|#define ERRORTOKEN      67
  ------------------
   19|    856|    token->start_loc = location;
   20|    856|    token->end_loc = (_PyTok_Loc){location.lineno, -1};
   21|    856|    return type;
   22|    856|}
string.c:begin_ftstring_expr:
  138|  29.2k|{
  139|  29.2k|    assert(state->mode != FTSTRING_MODE_EXPRESSION);
  ------------------
  |  Branch (139:5): [True: 29.2k, False: 0]
  ------------------
  140|  29.2k|    state->expr_span = (_PyTok_Span){expr_start, -1};
  141|  29.2k|    if (state->comments != NULL) {
  ------------------
  |  Branch (141:9): [True: 10, False: 29.2k]
  ------------------
  142|     10|        state->comments->count = 0;
  143|     10|    }
  144|  29.2k|    if (state->replacement_depth >= MAX_EXPR_NESTING) {
  ------------------
  |  |   26|  29.2k|#define MAX_EXPR_NESTING 3
  ------------------
  |  Branch (144:9): [True: 13, False: 29.2k]
  ------------------
  145|     13|        _PyTokenizer_syntaxerror(
  146|     13|            tok, "%c-string: expressions nested too deeply",
  147|     13|            _PyLexer_StringPrefix(state->kind));
  148|     13|        return -1;
  149|     13|    }
  150|  29.2k|    state->replacement_depth++;
  151|  29.2k|    state->mode = FTSTRING_MODE_EXPRESSION;
  152|  29.2k|    state->debug_expr = 0;
  153|  29.2k|    return 0;
  154|  29.2k|}

_PyPegen_parse:
38173|  31.7k|{
38174|       |    // Initialize keywords
38175|  31.7k|    p->keywords = reserved_keywords;
38176|  31.7k|    p->n_keyword_lists = n_keyword_lists;
38177|  31.7k|    p->soft_keywords = soft_keywords;
38178|       |
38179|       |    // Run parser
38180|  31.7k|    void *result = NULL;
38181|  31.7k|    if (p->start_rule == Py_file_input) {
  ------------------
  |  |    9|  31.7k|#define Py_file_input 257
  ------------------
  |  Branch (38181:9): [True: 19.1k, False: 12.6k]
  ------------------
38182|  19.1k|        result = file_rule(p);
38183|  19.1k|    } else if (p->start_rule == Py_single_input) {
  ------------------
  |  |    8|  12.6k|#define Py_single_input 256
  ------------------
  |  Branch (38183:16): [True: 8.01k, False: 4.58k]
  ------------------
38184|  8.01k|        result = interactive_rule(p);
38185|  8.01k|    } else if (p->start_rule == Py_eval_input) {
  ------------------
  |  |   10|  4.58k|#define Py_eval_input 258
  ------------------
  |  Branch (38185:16): [True: 4.58k, False: 0]
  ------------------
38186|  4.58k|        result = eval_rule(p);
38187|  4.58k|    } else if (p->start_rule == Py_func_type_input) {
  ------------------
  |  |   11|      0|#define Py_func_type_input 345
  ------------------
  |  Branch (38187:16): [True: 0, False: 0]
  ------------------
38188|      0|        result = func_type_rule(p);
38189|      0|    }
38190|       |
38191|  31.7k|    return result;
38192|  31.7k|}
parser.c:file_rule:
  981|  19.1k|{
  982|  19.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  38.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (982:9): [True: 0, False: 19.1k]
  |  Branch (982:35): [True: 0, False: 19.1k]
  ------------------
  983|      0|        _Pypegen_stack_overflow(p);
  984|      0|    }
  985|  19.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (985:9): [True: 850, False: 18.2k]
  ------------------
  986|    850|        p->level--;
  987|    850|        return NULL;
  988|    850|    }
  989|  18.2k|    mod_ty _res = NULL;
  990|  18.2k|    int _mark = p->mark;
  991|  18.2k|    { // statements? $
  992|  18.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (992:13): [True: 0, False: 18.2k]
  ------------------
  993|      0|            p->level--;
  994|      0|            return NULL;
  995|      0|        }
  996|  18.2k|        D(fprintf(stderr, "%*c> file[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statements? $"));
  997|  18.2k|        void *a;
  998|  18.2k|        Token * endmarker_var;
  999|  18.2k|        if (
 1000|  18.2k|            (a = statements_rule(p), !p->error_indicator)  // statements?
  ------------------
  |  Branch (1000:13): [True: 15.5k, False: 2.70k]
  ------------------
 1001|  15.5k|            &&
 1002|  15.5k|            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
  ------------------
  |  |   16|  15.5k|#define ENDMARKER       0
  ------------------
  |  Branch (1002:13): [True: 8.78k, False: 6.76k]
  ------------------
 1003|  18.2k|        )
 1004|  8.78k|        {
 1005|  8.78k|            D(fprintf(stderr, "%*c+ file[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statements? $"));
 1006|  8.78k|            _res = _PyPegen_make_module ( p , a );
 1007|  8.78k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1007:18): [True: 2, False: 8.78k]
  |  Branch (1007:34): [True: 0, False: 8.78k]
  |  Branch (1007:57): [True: 2, False: 0]
  ------------------
 1008|      2|                p->error_indicator = 1;
 1009|      2|                p->level--;
 1010|      2|                return NULL;
 1011|      2|            }
 1012|  8.78k|            goto done;
 1013|  8.78k|        }
 1014|  9.46k|        p->mark = _mark;
 1015|  9.46k|        D(fprintf(stderr, "%*c%s file[%d-%d]: %s failed!\n", p->level, ' ',
 1016|  9.46k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statements? $"));
 1017|  9.46k|    }
 1018|  9.46k|    _res = NULL;
 1019|  18.2k|  done:
 1020|  18.2k|    p->level--;
 1021|  18.2k|    return _res;
 1022|  9.46k|}
parser.c:statements_rule:
 1180|  37.8k|{
 1181|  37.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  75.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1181:9): [True: 0, False: 37.8k]
  |  Branch (1181:35): [True: 0, False: 37.8k]
  ------------------
 1182|      0|        _Pypegen_stack_overflow(p);
 1183|      0|    }
 1184|  37.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (1184:9): [True: 0, False: 37.8k]
  ------------------
 1185|      0|        p->level--;
 1186|      0|        return NULL;
 1187|      0|    }
 1188|  37.8k|    asdl_stmt_seq* _res = NULL;
 1189|  37.8k|    int _mark = p->mark;
 1190|  37.8k|    { // statement+
 1191|  37.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (1191:13): [True: 0, False: 37.8k]
  ------------------
 1192|      0|            p->level--;
 1193|      0|            return NULL;
 1194|      0|        }
 1195|  37.8k|        D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+"));
 1196|  37.8k|        asdl_seq * a;
 1197|  37.8k|        if (
 1198|  37.8k|            (a = _loop1_2_rule(p))  // statement+
  ------------------
  |  Branch (1198:13): [True: 29.5k, False: 8.36k]
  ------------------
 1199|  37.8k|        )
 1200|  29.5k|        {
 1201|  29.5k|            D(fprintf(stderr, "%*c+ statements[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement+"));
 1202|  29.5k|            _res = ( asdl_stmt_seq* ) _PyPegen_seq_flatten ( p , a );
 1203|  29.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1203:18): [True: 0, False: 29.5k]
  |  Branch (1203:34): [True: 0, False: 29.5k]
  |  Branch (1203:57): [True: 0, False: 0]
  ------------------
 1204|      0|                p->error_indicator = 1;
 1205|      0|                p->level--;
 1206|      0|                return NULL;
 1207|      0|            }
 1208|  29.5k|            goto done;
 1209|  29.5k|        }
 1210|  8.36k|        p->mark = _mark;
 1211|  8.36k|        D(fprintf(stderr, "%*c%s statements[%d-%d]: %s failed!\n", p->level, ' ',
 1212|  8.36k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement+"));
 1213|  8.36k|    }
 1214|  8.36k|    _res = NULL;
 1215|  37.8k|  done:
 1216|  37.8k|    p->level--;
 1217|  37.8k|    return _res;
 1218|  8.36k|}
parser.c:_loop1_2_rule:
27410|  37.8k|{
27411|  37.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  75.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27411:9): [True: 0, False: 37.8k]
  |  Branch (27411:35): [True: 0, False: 37.8k]
  ------------------
27412|      0|        _Pypegen_stack_overflow(p);
27413|      0|    }
27414|  37.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (27414:9): [True: 0, False: 37.8k]
  ------------------
27415|      0|        p->level--;
27416|      0|        return NULL;
27417|      0|    }
27418|  37.8k|    void *_res = NULL;
27419|  37.8k|    int _mark = p->mark;
27420|  37.8k|    void **_children = PyMem_Malloc(sizeof(void *));
27421|  37.8k|    if (!_children) {
  ------------------
  |  Branch (27421:9): [True: 0, False: 37.8k]
  ------------------
27422|      0|        p->error_indicator = 1;
27423|      0|        PyErr_NoMemory();
27424|      0|        p->level--;
27425|      0|        return NULL;
27426|      0|    }
27427|  37.8k|    Py_ssize_t _children_capacity = 1;
27428|  37.8k|    Py_ssize_t _n = 0;
27429|  37.8k|    { // statement
27430|  37.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (27430:13): [True: 0, False: 37.8k]
  ------------------
27431|      0|            p->level--;
27432|      0|            return NULL;
27433|      0|        }
27434|  37.8k|        D(fprintf(stderr, "%*c> _loop1_2[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement"));
27435|  37.8k|        asdl_stmt_seq* statement_var;
27436|  37.8k|        while (
27437|   207k|            (statement_var = statement_rule(p))  // statement
  ------------------
  |  Branch (27437:13): [True: 169k, False: 37.8k]
  ------------------
27438|  37.8k|        )
27439|   169k|        {
27440|   169k|            _res = statement_var;
27441|   169k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (27441:17): [True: 22.2k, False: 147k]
  ------------------
27442|  22.2k|                _children_capacity *= 2;
27443|  22.2k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27444|  22.2k|                if (!_new_children) {
  ------------------
  |  Branch (27444:21): [True: 0, False: 22.2k]
  ------------------
27445|      0|                    PyMem_Free(_children);
27446|      0|                    p->error_indicator = 1;
27447|      0|                    PyErr_NoMemory();
27448|      0|                    p->level--;
27449|      0|                    return NULL;
27450|      0|                }
27451|  22.2k|                _children = _new_children;
27452|  22.2k|            }
27453|   169k|            _children[_n++] = _res;
27454|   169k|            _mark = p->mark;
27455|   169k|        }
27456|  37.8k|        p->mark = _mark;
27457|  37.8k|        D(fprintf(stderr, "%*c%s _loop1_2[%d-%d]: %s failed!\n", p->level, ' ',
27458|  37.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement"));
27459|  37.8k|    }
27460|  37.8k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (27460:9): [True: 7.82k, False: 30.0k]
  |  Branch (27460:20): [True: 542, False: 29.5k]
  ------------------
27461|  8.36k|        PyMem_Free(_children);
27462|  8.36k|        p->level--;
27463|  8.36k|        return NULL;
27464|  8.36k|    }
27465|  29.5k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
27466|  29.5k|    if (!_seq) {
  ------------------
  |  Branch (27466:9): [True: 0, False: 29.5k]
  ------------------
27467|      0|        PyMem_Free(_children);
27468|      0|        p->error_indicator = 1;
27469|      0|        PyErr_NoMemory();
27470|      0|        p->level--;
27471|      0|        return NULL;
27472|      0|    }
27473|   192k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|   163k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   192k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (27473:28): [True: 163k, False: 29.5k]
  ------------------
27474|  29.5k|    PyMem_Free(_children);
27475|  29.5k|    p->level--;
27476|  29.5k|    return _seq;
27477|  29.5k|}
parser.c:statement_rule:
 1223|   207k|{
 1224|   207k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   414k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1224:9): [True: 0, False: 207k]
  |  Branch (1224:35): [True: 0, False: 207k]
  ------------------
 1225|      0|        _Pypegen_stack_overflow(p);
 1226|      0|    }
 1227|   207k|    if (p->error_indicator) {
  ------------------
  |  Branch (1227:9): [True: 0, False: 207k]
  ------------------
 1228|      0|        p->level--;
 1229|      0|        return NULL;
 1230|      0|    }
 1231|   207k|    asdl_stmt_seq* _res = NULL;
 1232|   207k|    int _mark = p->mark;
 1233|   207k|    { // compound_stmt
 1234|   207k|        if (p->error_indicator) {
  ------------------
  |  Branch (1234:13): [True: 0, False: 207k]
  ------------------
 1235|      0|            p->level--;
 1236|      0|            return NULL;
 1237|      0|        }
 1238|   207k|        D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
 1239|   207k|        stmt_ty a;
 1240|   207k|        if (
 1241|   207k|            (a = compound_stmt_rule(p))  // compound_stmt
  ------------------
  |  Branch (1241:13): [True: 54.5k, False: 152k]
  ------------------
 1242|   207k|        )
 1243|  54.5k|        {
 1244|  54.5k|            D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
 1245|  54.5k|            _res = _PyPegen_register_stmts ( p , ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , a ) );
 1246|  54.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1246:18): [True: 0, False: 54.5k]
  |  Branch (1246:34): [True: 0, False: 54.5k]
  |  Branch (1246:57): [True: 0, False: 0]
  ------------------
 1247|      0|                p->error_indicator = 1;
 1248|      0|                p->level--;
 1249|      0|                return NULL;
 1250|      0|            }
 1251|  54.5k|            goto done;
 1252|  54.5k|        }
 1253|   152k|        p->mark = _mark;
 1254|   152k|        D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
 1255|   152k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
 1256|   152k|    }
 1257|      0|    { // simple_stmts
 1258|   152k|        if (p->error_indicator) {
  ------------------
  |  Branch (1258:13): [True: 1.05k, False: 151k]
  ------------------
 1259|  1.05k|            p->level--;
 1260|  1.05k|            return NULL;
 1261|  1.05k|        }
 1262|   151k|        D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
 1263|   151k|        asdl_stmt_seq* a;
 1264|   151k|        if (
 1265|   151k|            (a = (asdl_stmt_seq*)simple_stmts_rule(p))  // simple_stmts
  ------------------
  |  Branch (1265:13): [True: 115k, False: 36.8k]
  ------------------
 1266|   151k|        )
 1267|   115k|        {
 1268|   115k|            D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
 1269|   115k|            _res = a;
 1270|   115k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1270:18): [True: 0, False: 115k]
  |  Branch (1270:34): [True: 0, False: 115k]
  |  Branch (1270:57): [True: 0, False: 0]
  ------------------
 1271|      0|                p->error_indicator = 1;
 1272|      0|                p->level--;
 1273|      0|                return NULL;
 1274|      0|            }
 1275|   115k|            goto done;
 1276|   115k|        }
 1277|  36.8k|        p->mark = _mark;
 1278|  36.8k|        D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ',
 1279|  36.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
 1280|  36.8k|    }
 1281|  36.8k|    _res = NULL;
 1282|   206k|  done:
 1283|   206k|    p->level--;
 1284|   206k|    return _res;
 1285|  36.8k|}
parser.c:compound_stmt_rule:
 1902|   214k|{
 1903|   214k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   429k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1903:9): [True: 0, False: 214k]
  |  Branch (1903:35): [True: 0, False: 214k]
  ------------------
 1904|      0|        _Pypegen_stack_overflow(p);
 1905|      0|    }
 1906|   214k|    if (p->error_indicator) {
  ------------------
  |  Branch (1906:9): [True: 0, False: 214k]
  ------------------
 1907|      0|        p->level--;
 1908|      0|        return NULL;
 1909|      0|    }
 1910|   214k|    stmt_ty _res = NULL;
 1911|   214k|    int _mark = p->mark;
 1912|   214k|    { // &('def' | '@' | 'async') function_def
 1913|   214k|        if (p->error_indicator) {
  ------------------
  |  Branch (1913:13): [True: 0, False: 214k]
  ------------------
 1914|      0|            p->level--;
 1915|      0|            return NULL;
 1916|      0|        }
 1917|   214k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | 'async') function_def"));
 1918|   214k|        stmt_ty function_def_var;
 1919|   214k|        if (
 1920|   214k|            _PyPegen_lookahead(1, _tmp_6_rule, p)
  ------------------
  |  Branch (1920:13): [True: 20.1k, False: 194k]
  ------------------
 1921|  20.1k|            &&
 1922|  20.1k|            (function_def_var = function_def_rule(p))  // function_def
  ------------------
  |  Branch (1922:13): [True: 14.2k, False: 5.89k]
  ------------------
 1923|   214k|        )
 1924|  14.2k|        {
 1925|  14.2k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | 'async') function_def"));
 1926|  14.2k|            _res = function_def_var;
 1927|  14.2k|            goto done;
 1928|  14.2k|        }
 1929|   200k|        p->mark = _mark;
 1930|   200k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1931|   200k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('def' | '@' | 'async') function_def"));
 1932|   200k|    }
 1933|      0|    { // &'if' if_stmt
 1934|   200k|        if (p->error_indicator) {
  ------------------
  |  Branch (1934:13): [True: 513, False: 199k]
  ------------------
 1935|    513|            p->level--;
 1936|    513|            return NULL;
 1937|    513|        }
 1938|   199k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
 1939|   199k|        stmt_ty if_stmt_var;
 1940|   199k|        if (
 1941|   199k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 700)  // token='if'
  ------------------
  |  Branch (1941:13): [True: 2.82k, False: 196k]
  ------------------
 1942|  2.82k|            &&
 1943|  2.82k|            (if_stmt_var = if_stmt_rule(p))  // if_stmt
  ------------------
  |  Branch (1943:13): [True: 2.71k, False: 110]
  ------------------
 1944|   199k|        )
 1945|  2.71k|        {
 1946|  2.71k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'if' if_stmt"));
 1947|  2.71k|            _res = if_stmt_var;
 1948|  2.71k|            goto done;
 1949|  2.71k|        }
 1950|   197k|        p->mark = _mark;
 1951|   197k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1952|   197k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'if' if_stmt"));
 1953|   197k|    }
 1954|      0|    { // &('class' | '@') class_def
 1955|   197k|        if (p->error_indicator) {
  ------------------
  |  Branch (1955:13): [True: 54, False: 197k]
  ------------------
 1956|     54|            p->level--;
 1957|     54|            return NULL;
 1958|     54|        }
 1959|   197k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
 1960|   197k|        stmt_ty class_def_var;
 1961|   197k|        if (
 1962|   197k|            _PyPegen_lookahead(1, _tmp_7_rule, p)
  ------------------
  |  Branch (1962:13): [True: 17.4k, False: 179k]
  ------------------
 1963|  17.4k|            &&
 1964|  17.4k|            (class_def_var = class_def_rule(p))  // class_def
  ------------------
  |  Branch (1964:13): [True: 17.1k, False: 351]
  ------------------
 1965|   197k|        )
 1966|  17.1k|        {
 1967|  17.1k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def"));
 1968|  17.1k|            _res = class_def_var;
 1969|  17.1k|            goto done;
 1970|  17.1k|        }
 1971|   179k|        p->mark = _mark;
 1972|   179k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1973|   179k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('class' | '@') class_def"));
 1974|   179k|    }
 1975|      0|    { // &('with' | 'async') with_stmt
 1976|   179k|        if (p->error_indicator) {
  ------------------
  |  Branch (1976:13): [True: 58, False: 179k]
  ------------------
 1977|     58|            p->level--;
 1978|     58|            return NULL;
 1979|     58|        }
 1980|   179k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | 'async') with_stmt"));
 1981|   179k|        stmt_ty with_stmt_var;
 1982|   179k|        if (
 1983|   179k|            _PyPegen_lookahead(1, _tmp_8_rule, p)
  ------------------
  |  Branch (1983:13): [True: 6.92k, False: 172k]
  ------------------
 1984|  6.92k|            &&
 1985|  6.92k|            (with_stmt_var = with_stmt_rule(p))  // with_stmt
  ------------------
  |  Branch (1985:13): [True: 5.75k, False: 1.17k]
  ------------------
 1986|   179k|        )
 1987|  5.75k|        {
 1988|  5.75k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('with' | 'async') with_stmt"));
 1989|  5.75k|            _res = with_stmt_var;
 1990|  5.75k|            goto done;
 1991|  5.75k|        }
 1992|   174k|        p->mark = _mark;
 1993|   174k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1994|   174k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('with' | 'async') with_stmt"));
 1995|   174k|    }
 1996|      0|    { // &('for' | 'async') for_stmt
 1997|   174k|        if (p->error_indicator) {
  ------------------
  |  Branch (1997:13): [True: 101, False: 173k]
  ------------------
 1998|    101|            p->level--;
 1999|    101|            return NULL;
 2000|    101|        }
 2001|   173k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | 'async') for_stmt"));
 2002|   173k|        stmt_ty for_stmt_var;
 2003|   173k|        if (
 2004|   173k|            _PyPegen_lookahead(1, _tmp_9_rule, p)
  ------------------
  |  Branch (2004:13): [True: 2.81k, False: 171k]
  ------------------
 2005|  2.81k|            &&
 2006|  2.81k|            (for_stmt_var = for_stmt_rule(p))  // for_stmt
  ------------------
  |  Branch (2006:13): [True: 2.36k, False: 459]
  ------------------
 2007|   173k|        )
 2008|  2.36k|        {
 2009|  2.36k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('for' | 'async') for_stmt"));
 2010|  2.36k|            _res = for_stmt_var;
 2011|  2.36k|            goto done;
 2012|  2.36k|        }
 2013|   171k|        p->mark = _mark;
 2014|   171k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2015|   171k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('for' | 'async') for_stmt"));
 2016|   171k|    }
 2017|      0|    { // &'try' try_stmt
 2018|   171k|        if (p->error_indicator) {
  ------------------
  |  Branch (2018:13): [True: 40, False: 171k]
  ------------------
 2019|     40|            p->level--;
 2020|     40|            return NULL;
 2021|     40|        }
 2022|   171k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
 2023|   171k|        stmt_ty try_stmt_var;
 2024|   171k|        if (
 2025|   171k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 674)  // token='try'
  ------------------
  |  Branch (2025:13): [True: 9.52k, False: 162k]
  ------------------
 2026|  9.52k|            &&
 2027|  9.52k|            (try_stmt_var = try_stmt_rule(p))  // try_stmt
  ------------------
  |  Branch (2027:13): [True: 8.97k, False: 558]
  ------------------
 2028|   171k|        )
 2029|  8.97k|        {
 2030|  8.97k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'try' try_stmt"));
 2031|  8.97k|            _res = try_stmt_var;
 2032|  8.97k|            goto done;
 2033|  8.97k|        }
 2034|   162k|        p->mark = _mark;
 2035|   162k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2036|   162k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'try' try_stmt"));
 2037|   162k|    }
 2038|      0|    { // &'while' while_stmt
 2039|   162k|        if (p->error_indicator) {
  ------------------
  |  Branch (2039:13): [True: 198, False: 162k]
  ------------------
 2040|    198|            p->level--;
 2041|    198|            return NULL;
 2042|    198|        }
 2043|   162k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
 2044|   162k|        stmt_ty while_stmt_var;
 2045|   162k|        if (
 2046|   162k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 707)  // token='while'
  ------------------
  |  Branch (2046:13): [True: 3.18k, False: 159k]
  ------------------
 2047|  3.18k|            &&
 2048|  3.18k|            (while_stmt_var = while_stmt_rule(p))  // while_stmt
  ------------------
  |  Branch (2048:13): [True: 3.12k, False: 57]
  ------------------
 2049|   162k|        )
 2050|  3.12k|        {
 2051|  3.12k|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'while' while_stmt"));
 2052|  3.12k|            _res = while_stmt_var;
 2053|  3.12k|            goto done;
 2054|  3.12k|        }
 2055|   159k|        p->mark = _mark;
 2056|   159k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2057|   159k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'while' while_stmt"));
 2058|   159k|    }
 2059|      0|    { // match_stmt
 2060|   159k|        if (p->error_indicator) {
  ------------------
  |  Branch (2060:13): [True: 16, False: 159k]
  ------------------
 2061|     16|            p->level--;
 2062|     16|            return NULL;
 2063|     16|        }
 2064|   159k|        D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "match_stmt"));
 2065|   159k|        stmt_ty match_stmt_var;
 2066|   159k|        if (
 2067|   159k|            (match_stmt_var = match_stmt_rule(p))  // match_stmt
  ------------------
  |  Branch (2067:13): [True: 287, False: 158k]
  ------------------
 2068|   159k|        )
 2069|    287|        {
 2070|    287|            D(fprintf(stderr, "%*c+ compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "match_stmt"));
 2071|    287|            _res = match_stmt_var;
 2072|    287|            goto done;
 2073|    287|        }
 2074|   158k|        p->mark = _mark;
 2075|   158k|        D(fprintf(stderr, "%*c%s compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2076|   158k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "match_stmt"));
 2077|   158k|    }
 2078|   158k|    _res = NULL;
 2079|   213k|  done:
 2080|   213k|    p->level--;
 2081|   213k|    return _res;
 2082|   158k|}
parser.c:_tmp_6_rule:
27675|   214k|{
27676|   214k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   429k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27676:9): [True: 0, False: 214k]
  |  Branch (27676:35): [True: 0, False: 214k]
  ------------------
27677|      0|        _Pypegen_stack_overflow(p);
27678|      0|    }
27679|   214k|    if (p->error_indicator) {
  ------------------
  |  Branch (27679:9): [True: 0, False: 214k]
  ------------------
27680|      0|        p->level--;
27681|      0|        return NULL;
27682|      0|    }
27683|   214k|    void * _res = NULL;
27684|   214k|    int _mark = p->mark;
27685|   214k|    { // 'def'
27686|   214k|        if (p->error_indicator) {
  ------------------
  |  Branch (27686:13): [True: 0, False: 214k]
  ------------------
27687|      0|            p->level--;
27688|      0|            return NULL;
27689|      0|        }
27690|   214k|        D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'"));
27691|   214k|        Token * _keyword;
27692|   214k|        if (
27693|   214k|            (_keyword = _PyPegen_expect_token(p, 717))  // token='def'
  ------------------
  |  Branch (27693:13): [True: 8.50k, False: 206k]
  ------------------
27694|   214k|        )
27695|  8.50k|        {
27696|  8.50k|            D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'"));
27697|  8.50k|            _res = _keyword;
27698|  8.50k|            goto done;
27699|  8.50k|        }
27700|   206k|        p->mark = _mark;
27701|   206k|        D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ',
27702|   206k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'"));
27703|   206k|    }
27704|      0|    { // '@'
27705|   206k|        if (p->error_indicator) {
  ------------------
  |  Branch (27705:13): [True: 254, False: 205k]
  ------------------
27706|    254|            p->level--;
27707|    254|            return NULL;
27708|    254|        }
27709|   205k|        D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
27710|   205k|        Token * _literal;
27711|   205k|        if (
27712|   205k|            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
  ------------------
  |  Branch (27712:13): [True: 1.80k, False: 204k]
  ------------------
27713|   205k|        )
27714|  1.80k|        {
27715|  1.80k|            D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
27716|  1.80k|            _res = _literal;
27717|  1.80k|            goto done;
27718|  1.80k|        }
27719|   204k|        p->mark = _mark;
27720|   204k|        D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ',
27721|   204k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
27722|   204k|    }
27723|      0|    { // 'async'
27724|   204k|        if (p->error_indicator) {
  ------------------
  |  Branch (27724:13): [True: 0, False: 204k]
  ------------------
27725|      0|            p->level--;
27726|      0|            return NULL;
27727|      0|        }
27728|   204k|        D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'"));
27729|   204k|        Token * _keyword;
27730|   204k|        if (
27731|   204k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (27731:13): [True: 9.89k, False: 194k]
  ------------------
27732|   204k|        )
27733|  9.89k|        {
27734|  9.89k|            D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'"));
27735|  9.89k|            _res = _keyword;
27736|  9.89k|            goto done;
27737|  9.89k|        }
27738|   194k|        p->mark = _mark;
27739|   194k|        D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ',
27740|   194k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'"));
27741|   194k|    }
27742|   194k|    _res = NULL;
27743|   214k|  done:
27744|   214k|    p->level--;
27745|   214k|    return _res;
27746|   194k|}
parser.c:function_def_rule:
 4568|  20.1k|{
 4569|  20.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  40.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4569:9): [True: 0, False: 20.1k]
  |  Branch (4569:35): [True: 0, False: 20.1k]
  ------------------
 4570|      0|        _Pypegen_stack_overflow(p);
 4571|      0|    }
 4572|  20.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (4572:9): [True: 0, False: 20.1k]
  ------------------
 4573|      0|        p->level--;
 4574|      0|        return NULL;
 4575|      0|    }
 4576|  20.1k|    stmt_ty _res = NULL;
 4577|  20.1k|    int _mark = p->mark;
 4578|  20.1k|    { // decorators function_def_raw
 4579|  20.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (4579:13): [True: 0, False: 20.1k]
  ------------------
 4580|      0|            p->level--;
 4581|      0|            return NULL;
 4582|      0|        }
 4583|  20.1k|        D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
 4584|  20.1k|        asdl_expr_seq* d;
 4585|  20.1k|        stmt_ty f;
 4586|  20.1k|        if (
 4587|  20.1k|            (d = decorators_rule(p))  // decorators
  ------------------
  |  Branch (4587:13): [True: 1.73k, False: 18.4k]
  ------------------
 4588|  1.73k|            &&
 4589|  1.73k|            (f = function_def_raw_rule(p))  // function_def_raw
  ------------------
  |  Branch (4589:13): [True: 936, False: 795]
  ------------------
 4590|  20.1k|        )
 4591|    936|        {
 4592|    936|            D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw"));
 4593|    936|            _res = _PyPegen_function_def_decorators ( p , d , f );
 4594|    936|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4594:18): [True: 0, False: 936]
  |  Branch (4594:34): [True: 0, False: 936]
  |  Branch (4594:57): [True: 0, False: 0]
  ------------------
 4595|      0|                p->error_indicator = 1;
 4596|      0|                p->level--;
 4597|      0|                return NULL;
 4598|      0|            }
 4599|    936|            goto done;
 4600|    936|        }
 4601|  19.2k|        p->mark = _mark;
 4602|  19.2k|        D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ',
 4603|  19.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators function_def_raw"));
 4604|  19.2k|    }
 4605|      0|    { // function_def_raw
 4606|  19.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (4606:13): [True: 25, False: 19.2k]
  ------------------
 4607|     25|            p->level--;
 4608|     25|            return NULL;
 4609|     25|        }
 4610|  19.2k|        D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
 4611|  19.2k|        stmt_ty function_def_raw_var;
 4612|  19.2k|        if (
 4613|  19.2k|            (function_def_raw_var = function_def_raw_rule(p))  // function_def_raw
  ------------------
  |  Branch (4613:13): [True: 13.3k, False: 5.87k]
  ------------------
 4614|  19.2k|        )
 4615|  13.3k|        {
 4616|  13.3k|            D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "function_def_raw"));
 4617|  13.3k|            _res = function_def_raw_var;
 4618|  13.3k|            goto done;
 4619|  13.3k|        }
 4620|  5.87k|        p->mark = _mark;
 4621|  5.87k|        D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ',
 4622|  5.87k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "function_def_raw"));
 4623|  5.87k|    }
 4624|  5.87k|    _res = NULL;
 4625|  20.1k|  done:
 4626|  20.1k|    p->level--;
 4627|  20.1k|    return _res;
 4628|  5.87k|}
parser.c:decorators_rule:
 4363|  37.6k|{
 4364|  37.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  75.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4364:9): [True: 0, False: 37.6k]
  |  Branch (4364:35): [True: 0, False: 37.6k]
  ------------------
 4365|      0|        _Pypegen_stack_overflow(p);
 4366|      0|    }
 4367|  37.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (4367:9): [True: 0, False: 37.6k]
  ------------------
 4368|      0|        p->level--;
 4369|      0|        return NULL;
 4370|      0|    }
 4371|  37.6k|    asdl_expr_seq* _res = NULL;
 4372|  37.6k|    int _mark = p->mark;
 4373|  37.6k|    { // (('@' named_expression NEWLINE))+
 4374|  37.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (4374:13): [True: 0, False: 37.6k]
  ------------------
 4375|      0|            p->level--;
 4376|      0|            return NULL;
 4377|      0|        }
 4378|  37.6k|        D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
 4379|  37.6k|        asdl_expr_seq* a;
 4380|  37.6k|        if (
 4381|  37.6k|            (a = (asdl_expr_seq*)_loop1_24_rule(p))  // (('@' named_expression NEWLINE))+
  ------------------
  |  Branch (4381:13): [True: 2.52k, False: 35.1k]
  ------------------
 4382|  37.6k|        )
 4383|  2.52k|        {
 4384|  2.52k|            D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+"));
 4385|  2.52k|            _res = a;
 4386|  2.52k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4386:18): [True: 0, False: 2.52k]
  |  Branch (4386:34): [True: 0, False: 2.52k]
  |  Branch (4386:57): [True: 0, False: 0]
  ------------------
 4387|      0|                p->error_indicator = 1;
 4388|      0|                p->level--;
 4389|      0|                return NULL;
 4390|      0|            }
 4391|  2.52k|            goto done;
 4392|  2.52k|        }
 4393|  35.1k|        p->mark = _mark;
 4394|  35.1k|        D(fprintf(stderr, "%*c%s decorators[%d-%d]: %s failed!\n", p->level, ' ',
 4395|  35.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(('@' named_expression NEWLINE))+"));
 4396|  35.1k|    }
 4397|  35.1k|    _res = NULL;
 4398|  37.6k|  done:
 4399|  37.6k|    p->level--;
 4400|  37.6k|    return _res;
 4401|  35.1k|}
parser.c:_loop1_24_rule:
28747|  37.6k|{
28748|  37.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  75.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28748:9): [True: 0, False: 37.6k]
  |  Branch (28748:35): [True: 0, False: 37.6k]
  ------------------
28749|      0|        _Pypegen_stack_overflow(p);
28750|      0|    }
28751|  37.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (28751:9): [True: 0, False: 37.6k]
  ------------------
28752|      0|        p->level--;
28753|      0|        return NULL;
28754|      0|    }
28755|  37.6k|    void *_res = NULL;
28756|  37.6k|    int _mark = p->mark;
28757|  37.6k|    void **_children = PyMem_Malloc(sizeof(void *));
28758|  37.6k|    if (!_children) {
  ------------------
  |  Branch (28758:9): [True: 0, False: 37.6k]
  ------------------
28759|      0|        p->error_indicator = 1;
28760|      0|        PyErr_NoMemory();
28761|      0|        p->level--;
28762|      0|        return NULL;
28763|      0|    }
28764|  37.6k|    Py_ssize_t _children_capacity = 1;
28765|  37.6k|    Py_ssize_t _n = 0;
28766|  37.6k|    { // ('@' named_expression NEWLINE)
28767|  37.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (28767:13): [True: 0, False: 37.6k]
  ------------------
28768|      0|            p->level--;
28769|      0|            return NULL;
28770|      0|        }
28771|  37.6k|        D(fprintf(stderr, "%*c> _loop1_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)"));
28772|  37.6k|        void *_tmp_159_var;
28773|  37.6k|        while (
28774|  46.6k|            (_tmp_159_var = _tmp_159_rule(p))  // '@' named_expression NEWLINE
  ------------------
  |  Branch (28774:13): [True: 8.95k, False: 37.6k]
  ------------------
28775|  37.6k|        )
28776|  8.95k|        {
28777|  8.95k|            _res = _tmp_159_var;
28778|  8.95k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28778:17): [True: 3.06k, False: 5.88k]
  ------------------
28779|  3.06k|                _children_capacity *= 2;
28780|  3.06k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28781|  3.06k|                if (!_new_children) {
  ------------------
  |  Branch (28781:21): [True: 0, False: 3.06k]
  ------------------
28782|      0|                    PyMem_Free(_children);
28783|      0|                    p->error_indicator = 1;
28784|      0|                    PyErr_NoMemory();
28785|      0|                    p->level--;
28786|      0|                    return NULL;
28787|      0|                }
28788|  3.06k|                _children = _new_children;
28789|  3.06k|            }
28790|  8.95k|            _children[_n++] = _res;
28791|  8.95k|            _mark = p->mark;
28792|  8.95k|        }
28793|  37.6k|        p->mark = _mark;
28794|  37.6k|        D(fprintf(stderr, "%*c%s _loop1_24[%d-%d]: %s failed!\n", p->level, ' ',
28795|  37.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)"));
28796|  37.6k|    }
28797|  37.6k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (28797:9): [True: 35.1k, False: 2.52k]
  |  Branch (28797:20): [True: 1, False: 2.52k]
  ------------------
28798|  35.1k|        PyMem_Free(_children);
28799|  35.1k|        p->level--;
28800|  35.1k|        return NULL;
28801|  35.1k|    }
28802|  2.52k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28803|  2.52k|    if (!_seq) {
  ------------------
  |  Branch (28803:9): [True: 0, False: 2.52k]
  ------------------
28804|      0|        PyMem_Free(_children);
28805|      0|        p->error_indicator = 1;
28806|      0|        PyErr_NoMemory();
28807|      0|        p->level--;
28808|      0|        return NULL;
28809|      0|    }
28810|  11.4k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  8.95k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  11.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28810:28): [True: 8.95k, False: 2.52k]
  ------------------
28811|  2.52k|    PyMem_Free(_children);
28812|  2.52k|    p->level--;
28813|  2.52k|    return _seq;
28814|  2.52k|}
parser.c:_tmp_159_rule:
37153|  46.6k|{
37154|  46.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  93.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37154:9): [True: 0, False: 46.6k]
  |  Branch (37154:35): [True: 0, False: 46.6k]
  ------------------
37155|      0|        _Pypegen_stack_overflow(p);
37156|      0|    }
37157|  46.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (37157:9): [True: 0, False: 46.6k]
  ------------------
37158|      0|        p->level--;
37159|      0|        return NULL;
37160|      0|    }
37161|  46.6k|    void * _res = NULL;
37162|  46.6k|    int _mark = p->mark;
37163|  46.6k|    { // '@' named_expression NEWLINE
37164|  46.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (37164:13): [True: 0, False: 46.6k]
  ------------------
37165|      0|            p->level--;
37166|      0|            return NULL;
37167|      0|        }
37168|  46.6k|        D(fprintf(stderr, "%*c> _tmp_159[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
37169|  46.6k|        Token * _literal;
37170|  46.6k|        expr_ty f;
37171|  46.6k|        Token * newline_var;
37172|  46.6k|        if (
37173|  46.6k|            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
  ------------------
  |  Branch (37173:13): [True: 9.08k, False: 37.5k]
  ------------------
37174|  9.08k|            &&
37175|  9.08k|            (f = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (37175:13): [True: 9.00k, False: 72]
  ------------------
37176|  9.00k|            &&
37177|  9.00k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  9.00k|#define NEWLINE         4
  ------------------
  |  Branch (37177:13): [True: 8.95k, False: 52]
  ------------------
37178|  46.6k|        )
37179|  8.95k|        {
37180|  8.95k|            D(fprintf(stderr, "%*c+ _tmp_159[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@' named_expression NEWLINE"));
37181|  8.95k|            _res = f;
37182|  8.95k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37182:18): [True: 0, False: 8.95k]
  |  Branch (37182:34): [True: 0, False: 8.95k]
  |  Branch (37182:57): [True: 0, False: 0]
  ------------------
37183|      0|                p->error_indicator = 1;
37184|      0|                p->level--;
37185|      0|                return NULL;
37186|      0|            }
37187|  8.95k|            goto done;
37188|  8.95k|        }
37189|  37.6k|        p->mark = _mark;
37190|  37.6k|        D(fprintf(stderr, "%*c%s _tmp_159[%d-%d]: %s failed!\n", p->level, ' ',
37191|  37.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@' named_expression NEWLINE"));
37192|  37.6k|    }
37193|  37.6k|    _res = NULL;
37194|  46.6k|  done:
37195|  46.6k|    p->level--;
37196|  46.6k|    return _res;
37197|  37.6k|}
parser.c:named_expression_rule:
12285|   673k|{
12286|   673k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.34M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12286:9): [True: 0, False: 673k]
  |  Branch (12286:35): [True: 0, False: 673k]
  ------------------
12287|      0|        _Pypegen_stack_overflow(p);
12288|      0|    }
12289|   673k|    if (p->error_indicator) {
  ------------------
  |  Branch (12289:9): [True: 0, False: 673k]
  ------------------
12290|      0|        p->level--;
12291|      0|        return NULL;
12292|      0|    }
12293|   673k|    expr_ty _res = NULL;
12294|   673k|    int _mark = p->mark;
12295|   673k|    { // assignment_expression
12296|   673k|        if (p->error_indicator) {
  ------------------
  |  Branch (12296:13): [True: 0, False: 673k]
  ------------------
12297|      0|            p->level--;
12298|      0|            return NULL;
12299|      0|        }
12300|   673k|        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
12301|   673k|        expr_ty assignment_expression_var;
12302|   673k|        if (
12303|   673k|            (assignment_expression_var = assignment_expression_rule(p))  // assignment_expression
  ------------------
  |  Branch (12303:13): [True: 5.72k, False: 667k]
  ------------------
12304|   673k|        )
12305|  5.72k|        {
12306|  5.72k|            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
12307|  5.72k|            _res = assignment_expression_var;
12308|  5.72k|            goto done;
12309|  5.72k|        }
12310|   667k|        p->mark = _mark;
12311|   667k|        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12312|   667k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression"));
12313|   667k|    }
12314|   667k|    if (p->call_invalid_rules) { // invalid_named_expression
  ------------------
  |  Branch (12314:9): [True: 242k, False: 424k]
  ------------------
12315|   242k|        if (p->error_indicator) {
  ------------------
  |  Branch (12315:13): [True: 120, False: 242k]
  ------------------
12316|    120|            p->level--;
12317|    120|            return NULL;
12318|    120|        }
12319|   242k|        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
12320|   242k|        void *invalid_named_expression_var;
12321|   242k|        if (
12322|   242k|            (invalid_named_expression_var = invalid_named_expression_rule(p))  // invalid_named_expression
  ------------------
  |  Branch (12322:13): [True: 0, False: 242k]
  ------------------
12323|   242k|        )
12324|      0|        {
12325|      0|            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_named_expression"));
12326|      0|            _res = invalid_named_expression_var;
12327|      0|            goto done;
12328|      0|        }
12329|   242k|        p->mark = _mark;
12330|   242k|        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12331|   242k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_named_expression"));
12332|   242k|    }
12333|   667k|    { // expression !':='
12334|   667k|        if (p->error_indicator) {
  ------------------
  |  Branch (12334:13): [True: 10.9k, False: 656k]
  ------------------
12335|  10.9k|            p->level--;
12336|  10.9k|            return NULL;
12337|  10.9k|        }
12338|   656k|        D(fprintf(stderr, "%*c> named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
12339|   656k|        expr_ty expression_var;
12340|   656k|        if (
12341|   656k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (12341:13): [True: 471k, False: 185k]
  ------------------
12342|   471k|            &&
12343|   471k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53)  // token=':='
  ------------------
  |  Branch (12343:13): [True: 470k, False: 634]
  ------------------
12344|   656k|        )
12345|   470k|        {
12346|   470k|            D(fprintf(stderr, "%*c+ named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='"));
12347|   470k|            _res = expression_var;
12348|   470k|            goto done;
12349|   470k|        }
12350|   185k|        p->mark = _mark;
12351|   185k|        D(fprintf(stderr, "%*c%s named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12352|   185k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='"));
12353|   185k|    }
12354|   185k|    _res = NULL;
12355|   662k|  done:
12356|   662k|    p->level--;
12357|   662k|    return _res;
12358|   185k|}
parser.c:assignment_expression_rule:
12211|   995k|{
12212|   995k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.99M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12212:9): [True: 2, False: 995k]
  |  Branch (12212:35): [True: 0, False: 995k]
  ------------------
12213|      2|        _Pypegen_stack_overflow(p);
12214|      2|    }
12215|   995k|    if (p->error_indicator) {
  ------------------
  |  Branch (12215:9): [True: 2, False: 995k]
  ------------------
12216|      2|        p->level--;
12217|      2|        return NULL;
12218|      2|    }
12219|   995k|    expr_ty _res = NULL;
12220|   995k|    int _mark = p->mark;
12221|   995k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12221:9): [True: 125k, False: 870k]
  |  Branch (12221:31): [True: 139, False: 124k]
  ------------------
12222|    139|        p->error_indicator = 1;
12223|    139|        p->level--;
12224|    139|        return NULL;
12225|    139|    }
12226|   995k|    int _start_lineno = p->tokens[_mark]->lineno;
12227|   995k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   995k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 995k]
  |  |  ------------------
  ------------------
12228|   995k|    int _start_col_offset = p->tokens[_mark]->col_offset;
12229|   995k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   995k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 995k]
  |  |  ------------------
  ------------------
12230|   995k|    { // NAME ':=' ~ expression
12231|   995k|        if (p->error_indicator) {
  ------------------
  |  Branch (12231:13): [True: 0, False: 995k]
  ------------------
12232|      0|            p->level--;
12233|      0|            return NULL;
12234|      0|        }
12235|   995k|        D(fprintf(stderr, "%*c> assignment_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
12236|   995k|        int _cut_var = 0;
12237|   995k|        Token * _literal;
12238|   995k|        expr_ty a;
12239|   995k|        expr_ty b;
12240|   995k|        if (
12241|   995k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (12241:13): [True: 326k, False: 669k]
  ------------------
12242|   326k|            &&
12243|   326k|            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
  ------------------
  |  Branch (12243:13): [True: 8.96k, False: 317k]
  ------------------
12244|  8.96k|            &&
12245|  8.96k|            (_cut_var = 1)
  ------------------
  |  Branch (12245:13): [True: 8.96k, False: 0]
  ------------------
12246|  8.96k|            &&
12247|  8.96k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (12247:13): [True: 7.62k, False: 1.34k]
  ------------------
12248|   995k|        )
12249|  7.62k|        {
12250|  7.62k|            D(fprintf(stderr, "%*c+ assignment_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':=' ~ expression"));
12251|  7.62k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12252|  7.62k|            if (_token == NULL) {
  ------------------
  |  Branch (12252:17): [True: 0, False: 7.62k]
  ------------------
12253|      0|                p->level--;
12254|      0|                return NULL;
12255|      0|            }
12256|  7.62k|            int _end_lineno = _token->end_lineno;
12257|  7.62k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.62k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.62k]
  |  |  ------------------
  ------------------
12258|  7.62k|            int _end_col_offset = _token->end_col_offset;
12259|  7.62k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.62k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.62k]
  |  |  ------------------
  ------------------
12260|  7.62k|            _res = CHECK_VERSION ( expr_ty , 8 , "Assignment expressions are" , _PyAST_NamedExpr ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , EXTRA ) );
  ------------------
  |  |  345|  7.62k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
12261|  7.62k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12261:18): [True: 0, False: 7.62k]
  |  Branch (12261:34): [True: 0, False: 7.62k]
  |  Branch (12261:57): [True: 0, False: 0]
  ------------------
12262|      0|                p->error_indicator = 1;
12263|      0|                p->level--;
12264|      0|                return NULL;
12265|      0|            }
12266|  7.62k|            goto done;
12267|  7.62k|        }
12268|   988k|        p->mark = _mark;
12269|   988k|        D(fprintf(stderr, "%*c%s assignment_expression[%d-%d]: %s failed!\n", p->level, ' ',
12270|   988k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':=' ~ expression"));
12271|   988k|        if (_cut_var) {
  ------------------
  |  Branch (12271:13): [True: 1.34k, False: 986k]
  ------------------
12272|  1.34k|            p->level--;
12273|  1.34k|            return NULL;
12274|  1.34k|        }
12275|   988k|    }
12276|   986k|    _res = NULL;
12277|   994k|  done:
12278|   994k|    p->level--;
12279|   994k|    return _res;
12280|   986k|}
parser.c:invalid_named_expression_rule:
20729|   242k|{
20730|   242k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   485k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20730:9): [True: 0, False: 242k]
  |  Branch (20730:35): [True: 0, False: 242k]
  ------------------
20731|      0|        _Pypegen_stack_overflow(p);
20732|      0|    }
20733|   242k|    if (p->error_indicator) {
  ------------------
  |  Branch (20733:9): [True: 0, False: 242k]
  ------------------
20734|      0|        p->level--;
20735|      0|        return NULL;
20736|      0|    }
20737|   242k|    void * _res = NULL;
20738|   242k|    if (_PyPegen_is_memoized(p, invalid_named_expression_type, &_res)) {
  ------------------
  |  |  289|   242k|#define invalid_named_expression_type 1200
  ------------------
  |  Branch (20738:9): [True: 126k, False: 116k]
  ------------------
20739|   126k|        p->level--;
20740|   126k|        return _res;
20741|   126k|    }
20742|   116k|    int _mark = p->mark;
20743|   116k|    { // expression ':=' expression
20744|   116k|        if (p->error_indicator) {
  ------------------
  |  Branch (20744:13): [True: 0, False: 116k]
  ------------------
20745|      0|            p->level--;
20746|      0|            return NULL;
20747|      0|        }
20748|   116k|        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
20749|   116k|        Token * _literal;
20750|   116k|        expr_ty a;
20751|   116k|        expr_ty expression_var;
20752|   116k|        if (
20753|   116k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (20753:13): [True: 70.0k, False: 46.4k]
  ------------------
20754|  70.0k|            &&
20755|  70.0k|            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
  ------------------
  |  Branch (20755:13): [True: 154, False: 69.9k]
  ------------------
20756|    154|            &&
20757|    154|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (20757:13): [True: 6, False: 148]
  ------------------
20758|   116k|        )
20759|      6|        {
20760|      6|            D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':=' expression"));
20761|      6|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use assignment expressions with %s" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      6|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20762|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20762:18): [True: 6, False: 0]
  |  Branch (20762:34): [True: 0, False: 0]
  |  Branch (20762:57): [True: 6, False: 0]
  ------------------
20763|      6|                p->error_indicator = 1;
20764|      6|                p->level--;
20765|      6|                return NULL;
20766|      6|            }
20767|      0|            goto done;
20768|      6|        }
20769|   116k|        p->mark = _mark;
20770|   116k|        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
20771|   116k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':=' expression"));
20772|   116k|    }
20773|      0|    { // NAME '=' bitwise_or !('=' | ':=')
20774|   116k|        if (p->error_indicator) {
  ------------------
  |  Branch (20774:13): [True: 10.0k, False: 106k]
  ------------------
20775|  10.0k|            p->level--;
20776|  10.0k|            return NULL;
20777|  10.0k|        }
20778|   106k|        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
20779|   106k|        Token * _literal;
20780|   106k|        expr_ty a;
20781|   106k|        expr_ty b;
20782|   106k|        if (
20783|   106k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (20783:13): [True: 47.5k, False: 58.7k]
  ------------------
20784|  47.5k|            &&
20785|  47.5k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (20785:13): [True: 464, False: 47.1k]
  ------------------
20786|    464|            &&
20787|    464|            (b = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (20787:13): [True: 70, False: 394]
  ------------------
20788|     70|            &&
20789|     70|            _PyPegen_lookahead(0, _tmp_117_rule, p)
  ------------------
  |  Branch (20789:13): [True: 45, False: 25]
  ------------------
20790|   106k|        )
20791|     45|        {
20792|     45|            D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
20793|     45|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
  ------------------
  |  |  237|     45|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20794|     45|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20794:18): [True: 45, False: 0]
  |  Branch (20794:34): [True: 0, False: 0]
  |  Branch (20794:57): [True: 45, False: 0]
  ------------------
20795|     45|                p->error_indicator = 1;
20796|     45|                p->level--;
20797|     45|                return NULL;
20798|     45|            }
20799|      0|            goto done;
20800|     45|        }
20801|   106k|        p->mark = _mark;
20802|   106k|        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
20803|   106k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' bitwise_or !('=' | ':=')"));
20804|   106k|    }
20805|      0|    { // !(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')
20806|   106k|        if (p->error_indicator) {
  ------------------
  |  Branch (20806:13): [True: 337, False: 105k]
  ------------------
20807|    337|            p->level--;
20808|    337|            return NULL;
20809|    337|        }
20810|   105k|        D(fprintf(stderr, "%*c> invalid_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')"));
20811|   105k|        expr_ty a;
20812|   105k|        Token * b;
20813|   105k|        expr_ty bitwise_or_var;
20814|   105k|        if (
20815|   105k|            _PyPegen_lookahead(0, _tmp_118_rule, p)
  ------------------
  |  Branch (20815:13): [True: 102k, False: 3.40k]
  ------------------
20816|   102k|            &&
20817|   102k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (20817:13): [True: 66.1k, False: 36.4k]
  ------------------
20818|  66.1k|            &&
20819|  66.1k|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (20819:13): [True: 407, False: 65.7k]
  ------------------
20820|    407|            &&
20821|    407|            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (20821:13): [True: 50, False: 357]
  ------------------
20822|     50|            &&
20823|     50|            _PyPegen_lookahead(0, _tmp_117_rule, p)
  ------------------
  |  Branch (20823:13): [True: 19, False: 31]
  ------------------
20824|   105k|        )
20825|     19|        {
20826|     19|            D(fprintf(stderr, "%*c+ invalid_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')"));
20827|     19|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|     19|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20828|     19|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20828:18): [True: 19, False: 0]
  |  Branch (20828:34): [True: 0, False: 0]
  |  Branch (20828:57): [True: 19, False: 0]
  ------------------
20829|     19|                p->error_indicator = 1;
20830|     19|                p->level--;
20831|     19|                return NULL;
20832|     19|            }
20833|      0|            goto done;
20834|     19|        }
20835|   105k|        p->mark = _mark;
20836|   105k|        D(fprintf(stderr, "%*c%s invalid_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
20837|   105k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(list | tuple | genexp | 'True' | 'None' | 'False') bitwise_or '=' bitwise_or !('=' | ':=')"));
20838|   105k|    }
20839|   105k|    _res = NULL;
20840|   105k|  done:
20841|   105k|    _PyPegen_insert_memo(p, _mark, invalid_named_expression_type, _res);
  ------------------
  |  |  289|   105k|#define invalid_named_expression_type 1200
  ------------------
20842|   105k|    p->level--;
20843|   105k|    return _res;
20844|   105k|}
parser.c:bitwise_or_rule:
13043|  4.28M|{
13044|  4.28M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.57M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13044:9): [True: 1, False: 4.28M]
  |  Branch (13044:35): [True: 0, False: 4.28M]
  ------------------
13045|      1|        _Pypegen_stack_overflow(p);
13046|      1|    }
13047|  4.28M|    expr_ty _res = NULL;
13048|  4.28M|    if (_PyPegen_is_memoized(p, bitwise_or_type, &_res)) {
  ------------------
  |  |  212|  4.28M|#define bitwise_or_type 1123  // Left-recursive
  ------------------
  |  Branch (13048:9): [True: 2.98M, False: 1.30M]
  ------------------
13049|  2.98M|        p->level--;
13050|  2.98M|        return _res;
13051|  2.98M|    }
13052|  1.30M|    int _mark = p->mark;
13053|  1.30M|    int _resmark = p->mark;
13054|  1.30M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, bitwise_or_type);
  ------------------
  |  |  212|  1.30M|#define bitwise_or_type 1123  // Left-recursive
  ------------------
13055|  1.30M|    if (_memo == NULL) {
  ------------------
  |  Branch (13055:9): [True: 0, False: 1.30M]
  ------------------
13056|      0|        p->level--;
13057|      0|        return NULL;
13058|      0|    }
13059|  2.22M|    while (1) {
  ------------------
  |  Branch (13059:12): [True: 2.22M, Folded]
  ------------------
13060|  2.22M|        _memo->node = _res;
13061|  2.22M|        _memo->mark = p->mark;
13062|  2.22M|        p->mark = _mark;
13063|  2.22M|        void *_raw = bitwise_or_raw(p);
13064|  2.22M|        if (p->error_indicator) {
  ------------------
  |  Branch (13064:13): [True: 53.1k, False: 2.16M]
  ------------------
13065|  53.1k|            p->level--;
13066|  53.1k|            return NULL;
13067|  53.1k|        }
13068|  2.16M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (13068:13): [True: 347k, False: 1.82M]
  |  Branch (13068:29): [True: 902k, False: 919k]
  ------------------
13069|  1.25M|            break;
13070|   919k|        _resmark = p->mark;
13071|   919k|        _res = _raw;
13072|   919k|    }
13073|  1.25M|    p->mark = _resmark;
13074|  1.25M|    p->level--;
13075|  1.25M|    return _res;
13076|  1.30M|}
parser.c:bitwise_or_raw:
13079|  2.22M|{
13080|  2.22M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.44M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13080:9): [True: 0, False: 2.22M]
  |  Branch (13080:35): [True: 0, False: 2.22M]
  ------------------
13081|      0|        _Pypegen_stack_overflow(p);
13082|      0|    }
13083|  2.22M|    if (p->error_indicator) {
  ------------------
  |  Branch (13083:9): [True: 0, False: 2.22M]
  ------------------
13084|      0|        p->level--;
13085|      0|        return NULL;
13086|      0|    }
13087|  2.22M|    expr_ty _res = NULL;
13088|  2.22M|    int _mark = p->mark;
13089|  2.22M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (13089:9): [True: 0, False: 2.22M]
  |  Branch (13089:31): [True: 0, False: 0]
  ------------------
13090|      0|        p->error_indicator = 1;
13091|      0|        p->level--;
13092|      0|        return NULL;
13093|      0|    }
13094|  2.22M|    int _start_lineno = p->tokens[_mark]->lineno;
13095|  2.22M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.22M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.22M]
  |  |  ------------------
  ------------------
13096|  2.22M|    int _start_col_offset = p->tokens[_mark]->col_offset;
13097|  2.22M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.22M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.22M]
  |  |  ------------------
  ------------------
13098|  2.22M|    { // bitwise_or '|' bitwise_xor
13099|  2.22M|        if (p->error_indicator) {
  ------------------
  |  Branch (13099:13): [True: 0, False: 2.22M]
  ------------------
13100|      0|            p->level--;
13101|      0|            return NULL;
13102|      0|        }
13103|  2.22M|        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
13104|  2.22M|        Token * _literal;
13105|  2.22M|        expr_ty a;
13106|  2.22M|        expr_ty b;
13107|  2.22M|        if (
13108|  2.22M|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (13108:13): [True: 919k, False: 1.30M]
  ------------------
13109|   919k|            &&
13110|   919k|            (_literal = _PyPegen_expect_token(p, 18))  // token='|'
  ------------------
  |  Branch (13110:13): [True: 17.1k, False: 902k]
  ------------------
13111|  17.1k|            &&
13112|  17.1k|            (b = bitwise_xor_rule(p))  // bitwise_xor
  ------------------
  |  Branch (13112:13): [True: 15.5k, False: 1.55k]
  ------------------
13113|  2.22M|        )
13114|  15.5k|        {
13115|  15.5k|            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor"));
13116|  15.5k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13117|  15.5k|            if (_token == NULL) {
  ------------------
  |  Branch (13117:17): [True: 0, False: 15.5k]
  ------------------
13118|      0|                p->level--;
13119|      0|                return NULL;
13120|      0|            }
13121|  15.5k|            int _end_lineno = _token->end_lineno;
13122|  15.5k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
13123|  15.5k|            int _end_col_offset = _token->end_col_offset;
13124|  15.5k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
13125|  15.5k|            _res = _PyAST_BinOp ( a , BitOr , b , EXTRA );
  ------------------
  |  |  307|  15.5k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13126|  15.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13126:18): [True: 0, False: 15.5k]
  |  Branch (13126:34): [True: 0, False: 15.5k]
  |  Branch (13126:57): [True: 0, False: 0]
  ------------------
13127|      0|                p->error_indicator = 1;
13128|      0|                p->level--;
13129|      0|                return NULL;
13130|      0|            }
13131|  15.5k|            goto done;
13132|  15.5k|        }
13133|  2.20M|        p->mark = _mark;
13134|  2.20M|        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13135|  2.20M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or '|' bitwise_xor"));
13136|  2.20M|    }
13137|  2.20M|    if (p->call_invalid_rules) { // invalid_bitwise_or
  ------------------
  |  Branch (13137:9): [True: 430k, False: 1.77M]
  ------------------
13138|   430k|        if (p->error_indicator) {
  ------------------
  |  Branch (13138:13): [True: 683, False: 430k]
  ------------------
13139|    683|            p->level--;
13140|    683|            return NULL;
13141|    683|        }
13142|   430k|        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_bitwise_or"));
13143|   430k|        void *invalid_bitwise_or_var;
13144|   430k|        if (
13145|   430k|            (invalid_bitwise_or_var = invalid_bitwise_or_rule(p))  // invalid_bitwise_or
  ------------------
  |  Branch (13145:13): [True: 0, False: 430k]
  ------------------
13146|   430k|        )
13147|      0|        {
13148|      0|            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_bitwise_or"));
13149|      0|            _res = invalid_bitwise_or_var;
13150|      0|            goto done;
13151|      0|        }
13152|   430k|        p->mark = _mark;
13153|   430k|        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13154|   430k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_bitwise_or"));
13155|   430k|    }
13156|  2.20M|    { // bitwise_xor
13157|  2.20M|        if (p->error_indicator) {
  ------------------
  |  Branch (13157:13): [True: 254, False: 2.20M]
  ------------------
13158|    254|            p->level--;
13159|    254|            return NULL;
13160|    254|        }
13161|  2.20M|        D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
13162|  2.20M|        expr_ty bitwise_xor_var;
13163|  2.20M|        if (
13164|  2.20M|            (bitwise_xor_var = bitwise_xor_rule(p))  // bitwise_xor
  ------------------
  |  Branch (13164:13): [True: 1.80M, False: 399k]
  ------------------
13165|  2.20M|        )
13166|  1.80M|        {
13167|  1.80M|            D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor"));
13168|  1.80M|            _res = bitwise_xor_var;
13169|  1.80M|            goto done;
13170|  1.80M|        }
13171|   399k|        p->mark = _mark;
13172|   399k|        D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
13173|   399k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor"));
13174|   399k|    }
13175|   399k|    _res = NULL;
13176|  2.22M|  done:
13177|  2.22M|    p->level--;
13178|  2.22M|    return _res;
13179|   399k|}
parser.c:bitwise_xor_rule:
13186|  4.49M|{
13187|  4.49M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.99M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13187:9): [True: 1, False: 4.49M]
  |  Branch (13187:35): [True: 0, False: 4.49M]
  ------------------
13188|      1|        _Pypegen_stack_overflow(p);
13189|      1|    }
13190|  4.49M|    expr_ty _res = NULL;
13191|  4.49M|    if (_PyPegen_is_memoized(p, bitwise_xor_type, &_res)) {
  ------------------
  |  |  213|  4.49M|#define bitwise_xor_type 1124  // Left-recursive
  ------------------
  |  Branch (13191:9): [True: 3.17M, False: 1.32M]
  ------------------
13192|  3.17M|        p->level--;
13193|  3.17M|        return _res;
13194|  3.17M|    }
13195|  1.32M|    int _mark = p->mark;
13196|  1.32M|    int _resmark = p->mark;
13197|  1.32M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, bitwise_xor_type);
  ------------------
  |  |  213|  1.32M|#define bitwise_xor_type 1124  // Left-recursive
  ------------------
13198|  1.32M|    if (_memo == NULL) {
  ------------------
  |  Branch (13198:9): [True: 0, False: 1.32M]
  ------------------
13199|      0|        p->level--;
13200|      0|        return NULL;
13201|      0|    }
13202|  2.27M|    while (1) {
  ------------------
  |  Branch (13202:12): [True: 2.27M, Folded]
  ------------------
13203|  2.27M|        _memo->node = _res;
13204|  2.27M|        _memo->mark = p->mark;
13205|  2.27M|        p->mark = _mark;
13206|  2.27M|        void *_raw = bitwise_xor_raw(p);
13207|  2.27M|        if (p->error_indicator) {
  ------------------
  |  Branch (13207:13): [True: 53.1k, False: 2.21M]
  ------------------
13208|  53.1k|            p->level--;
13209|  53.1k|            return NULL;
13210|  53.1k|        }
13211|  2.21M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (13211:13): [True: 347k, False: 1.87M]
  |  Branch (13211:29): [True: 919k, False: 952k]
  ------------------
13212|  1.26M|            break;
13213|   952k|        _resmark = p->mark;
13214|   952k|        _res = _raw;
13215|   952k|    }
13216|  1.26M|    p->mark = _resmark;
13217|  1.26M|    p->level--;
13218|  1.26M|    return _res;
13219|  1.32M|}
parser.c:bitwise_xor_raw:
13222|  2.27M|{
13223|  2.27M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.54M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13223:9): [True: 1, False: 2.27M]
  |  Branch (13223:35): [True: 0, False: 2.27M]
  ------------------
13224|      1|        _Pypegen_stack_overflow(p);
13225|      1|    }
13226|  2.27M|    if (p->error_indicator) {
  ------------------
  |  Branch (13226:9): [True: 1, False: 2.27M]
  ------------------
13227|      1|        p->level--;
13228|      1|        return NULL;
13229|      1|    }
13230|  2.27M|    expr_ty _res = NULL;
13231|  2.27M|    int _mark = p->mark;
13232|  2.27M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (13232:9): [True: 0, False: 2.27M]
  |  Branch (13232:31): [True: 0, False: 0]
  ------------------
13233|      0|        p->error_indicator = 1;
13234|      0|        p->level--;
13235|      0|        return NULL;
13236|      0|    }
13237|  2.27M|    int _start_lineno = p->tokens[_mark]->lineno;
13238|  2.27M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.27M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.27M]
  |  |  ------------------
  ------------------
13239|  2.27M|    int _start_col_offset = p->tokens[_mark]->col_offset;
13240|  2.27M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.27M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.27M]
  |  |  ------------------
  ------------------
13241|  2.27M|    { // bitwise_xor '^' bitwise_and
13242|  2.27M|        if (p->error_indicator) {
  ------------------
  |  Branch (13242:13): [True: 0, False: 2.27M]
  ------------------
13243|      0|            p->level--;
13244|      0|            return NULL;
13245|      0|        }
13246|  2.27M|        D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
13247|  2.27M|        Token * _literal;
13248|  2.27M|        expr_ty a;
13249|  2.27M|        expr_ty b;
13250|  2.27M|        if (
13251|  2.27M|            (a = bitwise_xor_rule(p))  // bitwise_xor
  ------------------
  |  Branch (13251:13): [True: 952k, False: 1.32M]
  ------------------
13252|   952k|            &&
13253|   952k|            (_literal = _PyPegen_expect_token(p, 32))  // token='^'
  ------------------
  |  Branch (13253:13): [True: 33.6k, False: 919k]
  ------------------
13254|  33.6k|            &&
13255|  33.6k|            (b = bitwise_and_rule(p))  // bitwise_and
  ------------------
  |  Branch (13255:13): [True: 33.1k, False: 517]
  ------------------
13256|  2.27M|        )
13257|  33.1k|        {
13258|  33.1k|            D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and"));
13259|  33.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13260|  33.1k|            if (_token == NULL) {
  ------------------
  |  Branch (13260:17): [True: 0, False: 33.1k]
  ------------------
13261|      0|                p->level--;
13262|      0|                return NULL;
13263|      0|            }
13264|  33.1k|            int _end_lineno = _token->end_lineno;
13265|  33.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  33.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 33.1k]
  |  |  ------------------
  ------------------
13266|  33.1k|            int _end_col_offset = _token->end_col_offset;
13267|  33.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  33.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 33.1k]
  |  |  ------------------
  ------------------
13268|  33.1k|            _res = _PyAST_BinOp ( a , BitXor , b , EXTRA );
  ------------------
  |  |  307|  33.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13269|  33.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13269:18): [True: 0, False: 33.1k]
  |  Branch (13269:34): [True: 0, False: 33.1k]
  |  Branch (13269:57): [True: 0, False: 0]
  ------------------
13270|      0|                p->error_indicator = 1;
13271|      0|                p->level--;
13272|      0|                return NULL;
13273|      0|            }
13274|  33.1k|            goto done;
13275|  33.1k|        }
13276|  2.24M|        p->mark = _mark;
13277|  2.24M|        D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ',
13278|  2.24M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor '^' bitwise_and"));
13279|  2.24M|    }
13280|      0|    { // bitwise_and
13281|  2.24M|        if (p->error_indicator) {
  ------------------
  |  Branch (13281:13): [True: 411, False: 2.23M]
  ------------------
13282|    411|            p->level--;
13283|    411|            return NULL;
13284|    411|        }
13285|  2.23M|        D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
13286|  2.23M|        expr_ty bitwise_and_var;
13287|  2.23M|        if (
13288|  2.23M|            (bitwise_and_var = bitwise_and_rule(p))  // bitwise_and
  ------------------
  |  Branch (13288:13): [True: 1.83M, False: 400k]
  ------------------
13289|  2.23M|        )
13290|  1.83M|        {
13291|  1.83M|            D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and"));
13292|  1.83M|            _res = bitwise_and_var;
13293|  1.83M|            goto done;
13294|  1.83M|        }
13295|   400k|        p->mark = _mark;
13296|   400k|        D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ',
13297|   400k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and"));
13298|   400k|    }
13299|   400k|    _res = NULL;
13300|  2.27M|  done:
13301|  2.27M|    p->level--;
13302|  2.27M|    return _res;
13303|   400k|}
parser.c:bitwise_and_rule:
13310|  5.04M|{
13311|  5.04M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.0M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13311:9): [True: 1, False: 5.04M]
  |  Branch (13311:35): [True: 0, False: 5.04M]
  ------------------
13312|      1|        _Pypegen_stack_overflow(p);
13313|      1|    }
13314|  5.04M|    expr_ty _res = NULL;
13315|  5.04M|    if (_PyPegen_is_memoized(p, bitwise_and_type, &_res)) {
  ------------------
  |  |  214|  5.04M|#define bitwise_and_type 1125  // Left-recursive
  ------------------
  |  Branch (13315:9): [True: 3.68M, False: 1.35M]
  ------------------
13316|  3.68M|        p->level--;
13317|  3.68M|        return _res;
13318|  3.68M|    }
13319|  1.35M|    int _mark = p->mark;
13320|  1.35M|    int _resmark = p->mark;
13321|  1.35M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, bitwise_and_type);
  ------------------
  |  |  214|  1.35M|#define bitwise_and_type 1125  // Left-recursive
  ------------------
13322|  1.35M|    if (_memo == NULL) {
  ------------------
  |  Branch (13322:9): [True: 0, False: 1.35M]
  ------------------
13323|      0|        p->level--;
13324|      0|        return NULL;
13325|      0|    }
13326|  2.32M|    while (1) {
  ------------------
  |  Branch (13326:12): [True: 2.32M, Folded]
  ------------------
13327|  2.32M|        _memo->node = _res;
13328|  2.32M|        _memo->mark = p->mark;
13329|  2.32M|        p->mark = _mark;
13330|  2.32M|        void *_raw = bitwise_and_raw(p);
13331|  2.32M|        if (p->error_indicator) {
  ------------------
  |  Branch (13331:13): [True: 53.1k, False: 2.27M]
  ------------------
13332|  53.1k|            p->level--;
13333|  53.1k|            return NULL;
13334|  53.1k|        }
13335|  2.27M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (13335:13): [True: 348k, False: 1.92M]
  |  Branch (13335:29): [True: 952k, False: 972k]
  ------------------
13336|  1.30M|            break;
13337|   972k|        _resmark = p->mark;
13338|   972k|        _res = _raw;
13339|   972k|    }
13340|  1.30M|    p->mark = _resmark;
13341|  1.30M|    p->level--;
13342|  1.30M|    return _res;
13343|  1.35M|}
parser.c:bitwise_and_raw:
13346|  2.32M|{
13347|  2.32M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.65M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13347:9): [True: 1, False: 2.32M]
  |  Branch (13347:35): [True: 0, False: 2.32M]
  ------------------
13348|      1|        _Pypegen_stack_overflow(p);
13349|      1|    }
13350|  2.32M|    if (p->error_indicator) {
  ------------------
  |  Branch (13350:9): [True: 1, False: 2.32M]
  ------------------
13351|      1|        p->level--;
13352|      1|        return NULL;
13353|      1|    }
13354|  2.32M|    expr_ty _res = NULL;
13355|  2.32M|    int _mark = p->mark;
13356|  2.32M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (13356:9): [True: 0, False: 2.32M]
  |  Branch (13356:31): [True: 0, False: 0]
  ------------------
13357|      0|        p->error_indicator = 1;
13358|      0|        p->level--;
13359|      0|        return NULL;
13360|      0|    }
13361|  2.32M|    int _start_lineno = p->tokens[_mark]->lineno;
13362|  2.32M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.32M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.32M]
  |  |  ------------------
  ------------------
13363|  2.32M|    int _start_col_offset = p->tokens[_mark]->col_offset;
13364|  2.32M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.32M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.32M]
  |  |  ------------------
  ------------------
13365|  2.32M|    { // bitwise_and '&' shift_expr
13366|  2.32M|        if (p->error_indicator) {
  ------------------
  |  Branch (13366:13): [True: 0, False: 2.32M]
  ------------------
13367|      0|            p->level--;
13368|      0|            return NULL;
13369|      0|        }
13370|  2.32M|        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
13371|  2.32M|        Token * _literal;
13372|  2.32M|        expr_ty a;
13373|  2.32M|        expr_ty b;
13374|  2.32M|        if (
13375|  2.32M|            (a = bitwise_and_rule(p))  // bitwise_and
  ------------------
  |  Branch (13375:13): [True: 972k, False: 1.35M]
  ------------------
13376|   972k|            &&
13377|   972k|            (_literal = _PyPegen_expect_token(p, 19))  // token='&'
  ------------------
  |  Branch (13377:13): [True: 20.8k, False: 951k]
  ------------------
13378|  20.8k|            &&
13379|  20.8k|            (b = shift_expr_rule(p))  // shift_expr
  ------------------
  |  Branch (13379:13): [True: 19.7k, False: 1.15k]
  ------------------
13380|  2.32M|        )
13381|  19.7k|        {
13382|  19.7k|            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr"));
13383|  19.7k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13384|  19.7k|            if (_token == NULL) {
  ------------------
  |  Branch (13384:17): [True: 0, False: 19.7k]
  ------------------
13385|      0|                p->level--;
13386|      0|                return NULL;
13387|      0|            }
13388|  19.7k|            int _end_lineno = _token->end_lineno;
13389|  19.7k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  19.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19.7k]
  |  |  ------------------
  ------------------
13390|  19.7k|            int _end_col_offset = _token->end_col_offset;
13391|  19.7k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  19.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19.7k]
  |  |  ------------------
  ------------------
13392|  19.7k|            _res = _PyAST_BinOp ( a , BitAnd , b , EXTRA );
  ------------------
  |  |  307|  19.7k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13393|  19.7k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13393:18): [True: 0, False: 19.7k]
  |  Branch (13393:34): [True: 0, False: 19.7k]
  |  Branch (13393:57): [True: 0, False: 0]
  ------------------
13394|      0|                p->error_indicator = 1;
13395|      0|                p->level--;
13396|      0|                return NULL;
13397|      0|            }
13398|  19.7k|            goto done;
13399|  19.7k|        }
13400|  2.30M|        p->mark = _mark;
13401|  2.30M|        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
13402|  2.30M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and '&' shift_expr"));
13403|  2.30M|    }
13404|  2.30M|    if (p->call_invalid_rules) { // invalid_bitwise_and
  ------------------
  |  Branch (13404:9): [True: 442k, False: 1.86M]
  ------------------
13405|   442k|        if (p->error_indicator) {
  ------------------
  |  Branch (13405:13): [True: 399, False: 441k]
  ------------------
13406|    399|            p->level--;
13407|    399|            return NULL;
13408|    399|        }
13409|   441k|        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_bitwise_and"));
13410|   441k|        void *invalid_bitwise_and_var;
13411|   441k|        if (
13412|   441k|            (invalid_bitwise_and_var = invalid_bitwise_and_rule(p))  // invalid_bitwise_and
  ------------------
  |  Branch (13412:13): [True: 0, False: 441k]
  ------------------
13413|   441k|        )
13414|      0|        {
13415|      0|            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_bitwise_and"));
13416|      0|            _res = invalid_bitwise_and_var;
13417|      0|            goto done;
13418|      0|        }
13419|   441k|        p->mark = _mark;
13420|   441k|        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
13421|   441k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_bitwise_and"));
13422|   441k|    }
13423|  2.30M|    { // shift_expr
13424|  2.30M|        if (p->error_indicator) {
  ------------------
  |  Branch (13424:13): [True: 262, False: 2.30M]
  ------------------
13425|    262|            p->level--;
13426|    262|            return NULL;
13427|    262|        }
13428|  2.30M|        D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr"));
13429|  2.30M|        expr_ty shift_expr_var;
13430|  2.30M|        if (
13431|  2.30M|            (shift_expr_var = shift_expr_rule(p))  // shift_expr
  ------------------
  |  Branch (13431:13): [True: 1.90M, False: 400k]
  ------------------
13432|  2.30M|        )
13433|  1.90M|        {
13434|  1.90M|            D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr"));
13435|  1.90M|            _res = shift_expr_var;
13436|  1.90M|            goto done;
13437|  1.90M|        }
13438|   400k|        p->mark = _mark;
13439|   400k|        D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
13440|   400k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr"));
13441|   400k|    }
13442|   400k|    _res = NULL;
13443|  2.32M|  done:
13444|  2.32M|    p->level--;
13445|  2.32M|    return _res;
13446|   400k|}
parser.c:shift_expr_rule:
13453|  5.15M|{
13454|  5.15M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.3M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13454:9): [True: 2, False: 5.15M]
  |  Branch (13454:35): [True: 0, False: 5.15M]
  ------------------
13455|      2|        _Pypegen_stack_overflow(p);
13456|      2|    }
13457|  5.15M|    expr_ty _res = NULL;
13458|  5.15M|    if (_PyPegen_is_memoized(p, shift_expr_type, &_res)) {
  ------------------
  |  |  215|  5.15M|#define shift_expr_type 1126  // Left-recursive
  ------------------
  |  Branch (13458:9): [True: 3.77M, False: 1.37M]
  ------------------
13459|  3.77M|        p->level--;
13460|  3.77M|        return _res;
13461|  3.77M|    }
13462|  1.37M|    int _mark = p->mark;
13463|  1.37M|    int _resmark = p->mark;
13464|  1.37M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, shift_expr_type);
  ------------------
  |  |  215|  1.37M|#define shift_expr_type 1126  // Left-recursive
  ------------------
13465|  1.37M|    if (_memo == NULL) {
  ------------------
  |  Branch (13465:9): [True: 0, False: 1.37M]
  ------------------
13466|      0|        p->level--;
13467|      0|        return NULL;
13468|      0|    }
13469|  2.37M|    while (1) {
  ------------------
  |  Branch (13469:12): [True: 2.37M, Folded]
  ------------------
13470|  2.37M|        _memo->node = _res;
13471|  2.37M|        _memo->mark = p->mark;
13472|  2.37M|        p->mark = _mark;
13473|  2.37M|        void *_raw = shift_expr_raw(p);
13474|  2.37M|        if (p->error_indicator) {
  ------------------
  |  Branch (13474:13): [True: 53.1k, False: 2.32M]
  ------------------
13475|  53.1k|            p->level--;
13476|  53.1k|            return NULL;
13477|  53.1k|        }
13478|  2.32M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (13478:13): [True: 348k, False: 1.97M]
  |  Branch (13478:29): [True: 972k, False: 1.00M]
  ------------------
13479|  1.32M|            break;
13480|  1.00M|        _resmark = p->mark;
13481|  1.00M|        _res = _raw;
13482|  1.00M|    }
13483|  1.32M|    p->mark = _resmark;
13484|  1.32M|    p->level--;
13485|  1.32M|    return _res;
13486|  1.37M|}
parser.c:shift_expr_raw:
13489|  2.37M|{
13490|  2.37M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.75M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13490:9): [True: 0, False: 2.37M]
  |  Branch (13490:35): [True: 0, False: 2.37M]
  ------------------
13491|      0|        _Pypegen_stack_overflow(p);
13492|      0|    }
13493|  2.37M|    if (p->error_indicator) {
  ------------------
  |  Branch (13493:9): [True: 0, False: 2.37M]
  ------------------
13494|      0|        p->level--;
13495|      0|        return NULL;
13496|      0|    }
13497|  2.37M|    expr_ty _res = NULL;
13498|  2.37M|    int _mark = p->mark;
13499|  2.37M|    expr_ty _prefix_5_result = NULL;
13500|  2.37M|    int _prefix_5_end = 0, _prefix_5_valid = 0;
13501|  2.37M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (13501:9): [True: 0, False: 2.37M]
  |  Branch (13501:31): [True: 0, False: 0]
  ------------------
13502|      0|        p->error_indicator = 1;
13503|      0|        p->level--;
13504|      0|        return NULL;
13505|      0|    }
13506|  2.37M|    int _start_lineno = p->tokens[_mark]->lineno;
13507|  2.37M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.37M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.37M]
  |  |  ------------------
  ------------------
13508|  2.37M|    int _start_col_offset = p->tokens[_mark]->col_offset;
13509|  2.37M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.37M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.37M]
  |  |  ------------------
  ------------------
13510|  2.37M|    { // shift_expr '<<' sum
13511|  2.37M|        if (p->error_indicator) {
  ------------------
  |  Branch (13511:13): [True: 0, False: 2.37M]
  ------------------
13512|      0|            p->level--;
13513|      0|            return NULL;
13514|      0|        }
13515|  2.37M|        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
13516|  2.37M|        Token * _literal;
13517|  2.37M|        expr_ty a;
13518|  2.37M|        expr_ty b;
13519|  2.37M|        if (
13520|  2.37M|            (a = ((!p->call_invalid_rules && _prefix_5_valid) ? (p->mark = _prefix_5_end, _prefix_5_result) : (_prefix_5_result = shift_expr_rule(p), _prefix_5_end = p->mark, _prefix_5_valid = 1, _prefix_5_result)))  // shift_expr
  ------------------
  |  Branch (13520:13): [True: 1.00M, False: 1.37M]
  |  Branch (13520:20): [True: 1.93M, False: 447k]
  |  Branch (13520:46): [True: 0, False: 1.93M]
  ------------------
13521|  1.00M|            &&
13522|  1.00M|            (_literal = _PyPegen_expect_token(p, 33))  // token='<<'
  ------------------
  |  Branch (13522:13): [True: 16.3k, False: 989k]
  ------------------
13523|  16.3k|            &&
13524|  16.3k|            (b = sum_rule(p))  // sum
  ------------------
  |  Branch (13524:13): [True: 15.9k, False: 346]
  ------------------
13525|  2.37M|        )
13526|  15.9k|        {
13527|  15.9k|            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum"));
13528|  15.9k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13529|  15.9k|            if (_token == NULL) {
  ------------------
  |  Branch (13529:17): [True: 0, False: 15.9k]
  ------------------
13530|      0|                p->level--;
13531|      0|                return NULL;
13532|      0|            }
13533|  15.9k|            int _end_lineno = _token->end_lineno;
13534|  15.9k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.9k]
  |  |  ------------------
  ------------------
13535|  15.9k|            int _end_col_offset = _token->end_col_offset;
13536|  15.9k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.9k]
  |  |  ------------------
  ------------------
13537|  15.9k|            _res = _PyAST_BinOp ( a , LShift , b , EXTRA );
  ------------------
  |  |  307|  15.9k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13538|  15.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13538:18): [True: 0, False: 15.9k]
  |  Branch (13538:34): [True: 0, False: 15.9k]
  |  Branch (13538:57): [True: 0, False: 0]
  ------------------
13539|      0|                p->error_indicator = 1;
13540|      0|                p->level--;
13541|      0|                return NULL;
13542|      0|            }
13543|  15.9k|            goto done;
13544|  15.9k|        }
13545|  2.36M|        p->mark = _mark;
13546|  2.36M|        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13547|  2.36M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '<<' sum"));
13548|  2.36M|    }
13549|      0|    { // shift_expr '>>' sum
13550|  2.36M|        if (p->error_indicator) {
  ------------------
  |  Branch (13550:13): [True: 289, False: 2.36M]
  ------------------
13551|    289|            p->level--;
13552|    289|            return NULL;
13553|    289|        }
13554|  2.36M|        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
13555|  2.36M|        Token * _literal;
13556|  2.36M|        expr_ty a;
13557|  2.36M|        expr_ty b;
13558|  2.36M|        if (
13559|  2.36M|            (a = ((!p->call_invalid_rules && _prefix_5_valid) ? (p->mark = _prefix_5_end, _prefix_5_result) : (_prefix_5_result = shift_expr_rule(p), _prefix_5_end = p->mark, _prefix_5_valid = 1, _prefix_5_result)))  // shift_expr
  ------------------
  |  Branch (13559:13): [True: 989k, False: 1.37M]
  |  Branch (13559:20): [True: 1.91M, False: 445k]
  |  Branch (13559:46): [True: 1.91M, False: 0]
  ------------------
13560|   989k|            &&
13561|   989k|            (_literal = _PyPegen_expect_token(p, 34))  // token='>>'
  ------------------
  |  Branch (13561:13): [True: 16.5k, False: 972k]
  ------------------
13562|  16.5k|            &&
13563|  16.5k|            (b = sum_rule(p))  // sum
  ------------------
  |  Branch (13563:13): [True: 16.4k, False: 163]
  ------------------
13564|  2.36M|        )
13565|  16.4k|        {
13566|  16.4k|            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum"));
13567|  16.4k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13568|  16.4k|            if (_token == NULL) {
  ------------------
  |  Branch (13568:17): [True: 0, False: 16.4k]
  ------------------
13569|      0|                p->level--;
13570|      0|                return NULL;
13571|      0|            }
13572|  16.4k|            int _end_lineno = _token->end_lineno;
13573|  16.4k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.4k]
  |  |  ------------------
  ------------------
13574|  16.4k|            int _end_col_offset = _token->end_col_offset;
13575|  16.4k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.4k]
  |  |  ------------------
  ------------------
13576|  16.4k|            _res = _PyAST_BinOp ( a , RShift , b , EXTRA );
  ------------------
  |  |  307|  16.4k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13577|  16.4k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13577:18): [True: 0, False: 16.4k]
  |  Branch (13577:34): [True: 0, False: 16.4k]
  |  Branch (13577:57): [True: 0, False: 0]
  ------------------
13578|      0|                p->error_indicator = 1;
13579|      0|                p->level--;
13580|      0|                return NULL;
13581|      0|            }
13582|  16.4k|            goto done;
13583|  16.4k|        }
13584|  2.34M|        p->mark = _mark;
13585|  2.34M|        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13586|  2.34M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '>>' sum"));
13587|  2.34M|    }
13588|      0|    { // sum
13589|  2.34M|        if (p->error_indicator) {
  ------------------
  |  Branch (13589:13): [True: 117, False: 2.34M]
  ------------------
13590|    117|            p->level--;
13591|    117|            return NULL;
13592|    117|        }
13593|  2.34M|        D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum"));
13594|  2.34M|        expr_ty sum_var;
13595|  2.34M|        if (
13596|  2.34M|            (sum_var = sum_rule(p))  // sum
  ------------------
  |  Branch (13596:13): [True: 1.94M, False: 401k]
  ------------------
13597|  2.34M|        )
13598|  1.94M|        {
13599|  1.94M|            D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum"));
13600|  1.94M|            _res = sum_var;
13601|  1.94M|            goto done;
13602|  1.94M|        }
13603|   401k|        p->mark = _mark;
13604|   401k|        D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ',
13605|   401k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum"));
13606|   401k|    }
13607|   401k|    _res = NULL;
13608|  2.37M|  done:
13609|  2.37M|    p->level--;
13610|  2.37M|    return _res;
13611|   401k|}
parser.c:sum_rule:
13618|  6.09M|{
13619|  6.09M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  12.1M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13619:9): [True: 2, False: 6.09M]
  |  Branch (13619:35): [True: 0, False: 6.09M]
  ------------------
13620|      2|        _Pypegen_stack_overflow(p);
13621|      2|    }
13622|  6.09M|    expr_ty _res = NULL;
13623|  6.09M|    if (_PyPegen_is_memoized(p, sum_type, &_res)) {
  ------------------
  |  |  216|  6.09M|#define sum_type 1127  // Left-recursive
  ------------------
  |  Branch (13623:9): [True: 4.68M, False: 1.40M]
  ------------------
13624|  4.68M|        p->level--;
13625|  4.68M|        return _res;
13626|  4.68M|    }
13627|  1.40M|    int _mark = p->mark;
13628|  1.40M|    int _resmark = p->mark;
13629|  1.40M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, sum_type);
  ------------------
  |  |  216|  1.40M|#define sum_type 1127  // Left-recursive
  ------------------
13630|  1.40M|    if (_memo == NULL) {
  ------------------
  |  Branch (13630:9): [True: 0, False: 1.40M]
  ------------------
13631|      0|        p->level--;
13632|      0|        return NULL;
13633|      0|    }
13634|  2.80M|    while (1) {
  ------------------
  |  Branch (13634:12): [True: 2.80M, Folded]
  ------------------
13635|  2.80M|        _memo->node = _res;
13636|  2.80M|        _memo->mark = p->mark;
13637|  2.80M|        p->mark = _mark;
13638|  2.80M|        void *_raw = sum_raw(p);
13639|  2.80M|        if (p->error_indicator) {
  ------------------
  |  Branch (13639:13): [True: 53.1k, False: 2.74M]
  ------------------
13640|  53.1k|            p->level--;
13641|  53.1k|            return NULL;
13642|  53.1k|        }
13643|  2.74M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (13643:13): [True: 348k, False: 2.39M]
  |  Branch (13643:29): [True: 1.00M, False: 1.39M]
  ------------------
13644|  1.35M|            break;
13645|  1.39M|        _resmark = p->mark;
13646|  1.39M|        _res = _raw;
13647|  1.39M|    }
13648|  1.35M|    p->mark = _resmark;
13649|  1.35M|    p->level--;
13650|  1.35M|    return _res;
13651|  1.40M|}
parser.c:sum_raw:
13654|  2.80M|{
13655|  2.80M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.60M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13655:9): [True: 1, False: 2.80M]
  |  Branch (13655:35): [True: 0, False: 2.80M]
  ------------------
13656|      1|        _Pypegen_stack_overflow(p);
13657|      1|    }
13658|  2.80M|    if (p->error_indicator) {
  ------------------
  |  Branch (13658:9): [True: 1, False: 2.80M]
  ------------------
13659|      1|        p->level--;
13660|      1|        return NULL;
13661|      1|    }
13662|  2.80M|    expr_ty _res = NULL;
13663|  2.80M|    int _mark = p->mark;
13664|  2.80M|    expr_ty _prefix_6_result = NULL;
13665|  2.80M|    int _prefix_6_end = 0, _prefix_6_valid = 0;
13666|  2.80M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (13666:9): [True: 0, False: 2.80M]
  |  Branch (13666:31): [True: 0, False: 0]
  ------------------
13667|      0|        p->error_indicator = 1;
13668|      0|        p->level--;
13669|      0|        return NULL;
13670|      0|    }
13671|  2.80M|    int _start_lineno = p->tokens[_mark]->lineno;
13672|  2.80M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.80M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.80M]
  |  |  ------------------
  ------------------
13673|  2.80M|    int _start_col_offset = p->tokens[_mark]->col_offset;
13674|  2.80M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.80M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.80M]
  |  |  ------------------
  ------------------
13675|  2.80M|    { // sum '+' term
13676|  2.80M|        if (p->error_indicator) {
  ------------------
  |  Branch (13676:13): [True: 0, False: 2.80M]
  ------------------
13677|      0|            p->level--;
13678|      0|            return NULL;
13679|      0|        }
13680|  2.80M|        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
13681|  2.80M|        Token * _literal;
13682|  2.80M|        expr_ty a;
13683|  2.80M|        expr_ty b;
13684|  2.80M|        if (
13685|  2.80M|            (a = ((!p->call_invalid_rules && _prefix_6_valid) ? (p->mark = _prefix_6_end, _prefix_6_result) : (_prefix_6_result = sum_rule(p), _prefix_6_end = p->mark, _prefix_6_valid = 1, _prefix_6_result)))  // sum
  ------------------
  |  Branch (13685:13): [True: 1.39M, False: 1.40M]
  |  Branch (13685:20): [True: 2.32M, False: 472k]
  |  Branch (13685:46): [True: 0, False: 2.32M]
  ------------------
13686|  1.39M|            &&
13687|  1.39M|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (13687:13): [True: 195k, False: 1.19M]
  ------------------
13688|   195k|            &&
13689|   195k|            (b = term_rule(p))  // term
  ------------------
  |  Branch (13689:13): [True: 194k, False: 1.32k]
  ------------------
13690|  2.80M|        )
13691|   194k|        {
13692|   194k|            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '+' term"));
13693|   194k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13694|   194k|            if (_token == NULL) {
  ------------------
  |  Branch (13694:17): [True: 0, False: 194k]
  ------------------
13695|      0|                p->level--;
13696|      0|                return NULL;
13697|      0|            }
13698|   194k|            int _end_lineno = _token->end_lineno;
13699|   194k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   194k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 194k]
  |  |  ------------------
  ------------------
13700|   194k|            int _end_col_offset = _token->end_col_offset;
13701|   194k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   194k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 194k]
  |  |  ------------------
  ------------------
13702|   194k|            _res = _PyAST_BinOp ( a , Add , b , EXTRA );
  ------------------
  |  |  307|   194k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13703|   194k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13703:18): [True: 0, False: 194k]
  |  Branch (13703:34): [True: 0, False: 194k]
  |  Branch (13703:57): [True: 0, False: 0]
  ------------------
13704|      0|                p->error_indicator = 1;
13705|      0|                p->level--;
13706|      0|                return NULL;
13707|      0|            }
13708|   194k|            goto done;
13709|   194k|        }
13710|  2.60M|        p->mark = _mark;
13711|  2.60M|        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13712|  2.60M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '+' term"));
13713|  2.60M|    }
13714|      0|    { // sum '-' term
13715|  2.60M|        if (p->error_indicator) {
  ------------------
  |  Branch (13715:13): [True: 708, False: 2.60M]
  ------------------
13716|    708|            p->level--;
13717|    708|            return NULL;
13718|    708|        }
13719|  2.60M|        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
13720|  2.60M|        Token * _literal;
13721|  2.60M|        expr_ty a;
13722|  2.60M|        expr_ty b;
13723|  2.60M|        if (
13724|  2.60M|            (a = ((!p->call_invalid_rules && _prefix_6_valid) ? (p->mark = _prefix_6_end, _prefix_6_result) : (_prefix_6_result = sum_rule(p), _prefix_6_end = p->mark, _prefix_6_valid = 1, _prefix_6_result)))  // sum
  ------------------
  |  Branch (13724:13): [True: 1.19M, False: 1.40M]
  |  Branch (13724:20): [True: 2.14M, False: 462k]
  |  Branch (13724:46): [True: 2.14M, False: 0]
  ------------------
13725|  1.19M|            &&
13726|  1.19M|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (13726:13): [True: 194k, False: 1.00M]
  ------------------
13727|   194k|            &&
13728|   194k|            (b = term_rule(p))  // term
  ------------------
  |  Branch (13728:13): [True: 190k, False: 3.28k]
  ------------------
13729|  2.60M|        )
13730|   190k|        {
13731|   190k|            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '-' term"));
13732|   190k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13733|   190k|            if (_token == NULL) {
  ------------------
  |  Branch (13733:17): [True: 0, False: 190k]
  ------------------
13734|      0|                p->level--;
13735|      0|                return NULL;
13736|      0|            }
13737|   190k|            int _end_lineno = _token->end_lineno;
13738|   190k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   190k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 190k]
  |  |  ------------------
  ------------------
13739|   190k|            int _end_col_offset = _token->end_col_offset;
13740|   190k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   190k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 190k]
  |  |  ------------------
  ------------------
13741|   190k|            _res = _PyAST_BinOp ( a , Sub , b , EXTRA );
  ------------------
  |  |  307|   190k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13742|   190k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13742:18): [True: 0, False: 190k]
  |  Branch (13742:34): [True: 0, False: 190k]
  |  Branch (13742:57): [True: 0, False: 0]
  ------------------
13743|      0|                p->error_indicator = 1;
13744|      0|                p->level--;
13745|      0|                return NULL;
13746|      0|            }
13747|   190k|            goto done;
13748|   190k|        }
13749|  2.41M|        p->mark = _mark;
13750|  2.41M|        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13751|  2.41M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '-' term"));
13752|  2.41M|    }
13753|  2.41M|    if (p->call_invalid_rules) { // invalid_arithmetic
  ------------------
  |  Branch (13753:9): [True: 451k, False: 1.96M]
  ------------------
13754|   451k|        if (p->error_indicator) {
  ------------------
  |  Branch (13754:13): [True: 1.43k, False: 449k]
  ------------------
13755|  1.43k|            p->level--;
13756|  1.43k|            return NULL;
13757|  1.43k|        }
13758|   449k|        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arithmetic"));
13759|   449k|        void *invalid_arithmetic_var;
13760|   449k|        if (
13761|   449k|            (invalid_arithmetic_var = invalid_arithmetic_rule(p))  // invalid_arithmetic
  ------------------
  |  Branch (13761:13): [True: 0, False: 449k]
  ------------------
13762|   449k|        )
13763|      0|        {
13764|      0|            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arithmetic"));
13765|      0|            _res = invalid_arithmetic_var;
13766|      0|            goto done;
13767|      0|        }
13768|   449k|        p->mark = _mark;
13769|   449k|        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13770|   449k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arithmetic"));
13771|   449k|    }
13772|  2.41M|    { // term
13773|  2.41M|        if (p->error_indicator) {
  ------------------
  |  Branch (13773:13): [True: 1.10k, False: 2.41M]
  ------------------
13774|  1.10k|            p->level--;
13775|  1.10k|            return NULL;
13776|  1.10k|        }
13777|  2.41M|        D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term"));
13778|  2.41M|        expr_ty term_var;
13779|  2.41M|        if (
13780|  2.41M|            (term_var = term_rule(p))  // term
  ------------------
  |  Branch (13780:13): [True: 2.01M, False: 398k]
  ------------------
13781|  2.41M|        )
13782|  2.01M|        {
13783|  2.01M|            D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term"));
13784|  2.01M|            _res = term_var;
13785|  2.01M|            goto done;
13786|  2.01M|        }
13787|   398k|        p->mark = _mark;
13788|   398k|        D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ',
13789|   398k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term"));
13790|   398k|    }
13791|   398k|    _res = NULL;
13792|  2.79M|  done:
13793|  2.79M|    p->level--;
13794|  2.79M|    return _res;
13795|   398k|}
parser.c:term_rule:
13808|  8.37M|{
13809|  8.37M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  16.7M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13809:9): [True: 1, False: 8.37M]
  |  Branch (13809:35): [True: 0, False: 8.37M]
  ------------------
13810|      1|        _Pypegen_stack_overflow(p);
13811|      1|    }
13812|  8.37M|    expr_ty _res = NULL;
13813|  8.37M|    if (_PyPegen_is_memoized(p, term_type, &_res)) {
  ------------------
  |  |  217|  8.37M|#define term_type 1128  // Left-recursive
  ------------------
  |  Branch (13813:9): [True: 6.58M, False: 1.79M]
  ------------------
13814|  6.58M|        p->level--;
13815|  6.58M|        return _res;
13816|  6.58M|    }
13817|  1.79M|    int _mark = p->mark;
13818|  1.79M|    int _resmark = p->mark;
13819|  1.79M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, term_type);
  ------------------
  |  |  217|  1.79M|#define term_type 1128  // Left-recursive
  ------------------
13820|  1.79M|    if (_memo == NULL) {
  ------------------
  |  Branch (13820:9): [True: 0, False: 1.79M]
  ------------------
13821|      0|        p->level--;
13822|      0|        return NULL;
13823|      0|    }
13824|  3.56M|    while (1) {
  ------------------
  |  Branch (13824:12): [True: 3.56M, Folded]
  ------------------
13825|  3.56M|        _memo->node = _res;
13826|  3.56M|        _memo->mark = p->mark;
13827|  3.56M|        p->mark = _mark;
13828|  3.56M|        void *_raw = term_raw(p);
13829|  3.56M|        if (p->error_indicator) {
  ------------------
  |  Branch (13829:13): [True: 52.9k, False: 3.51M]
  ------------------
13830|  52.9k|            p->level--;
13831|  52.9k|            return NULL;
13832|  52.9k|        }
13833|  3.51M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (13833:13): [True: 350k, False: 3.16M]
  |  Branch (13833:29): [True: 1.39M, False: 1.77M]
  ------------------
13834|  1.74M|            break;
13835|  1.77M|        _resmark = p->mark;
13836|  1.77M|        _res = _raw;
13837|  1.77M|    }
13838|  1.74M|    p->mark = _resmark;
13839|  1.74M|    p->level--;
13840|  1.74M|    return _res;
13841|  1.79M|}
parser.c:term_raw:
13844|  3.56M|{
13845|  3.56M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.13M|#  define MAXSTACK 6000
  ------------------
  |  Branch (13845:9): [True: 1, False: 3.56M]
  |  Branch (13845:35): [True: 0, False: 3.56M]
  ------------------
13846|      1|        _Pypegen_stack_overflow(p);
13847|      1|    }
13848|  3.56M|    if (p->error_indicator) {
  ------------------
  |  Branch (13848:9): [True: 1, False: 3.56M]
  ------------------
13849|      1|        p->level--;
13850|      1|        return NULL;
13851|      1|    }
13852|  3.56M|    expr_ty _res = NULL;
13853|  3.56M|    int _mark = p->mark;
13854|  3.56M|    expr_ty _prefix_7_result = NULL;
13855|  3.56M|    int _prefix_7_end = 0, _prefix_7_valid = 0;
13856|  3.56M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (13856:9): [True: 0, False: 3.56M]
  |  Branch (13856:31): [True: 0, False: 0]
  ------------------
13857|      0|        p->error_indicator = 1;
13858|      0|        p->level--;
13859|      0|        return NULL;
13860|      0|    }
13861|  3.56M|    int _start_lineno = p->tokens[_mark]->lineno;
13862|  3.56M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.56M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.56M]
  |  |  ------------------
  ------------------
13863|  3.56M|    int _start_col_offset = p->tokens[_mark]->col_offset;
13864|  3.56M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.56M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.56M]
  |  |  ------------------
  ------------------
13865|  3.56M|    { // term '*' factor
13866|  3.56M|        if (p->error_indicator) {
  ------------------
  |  Branch (13866:13): [True: 0, False: 3.56M]
  ------------------
13867|      0|            p->level--;
13868|      0|            return NULL;
13869|      0|        }
13870|  3.56M|        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
13871|  3.56M|        Token * _literal;
13872|  3.56M|        expr_ty a;
13873|  3.56M|        expr_ty b;
13874|  3.56M|        if (
13875|  3.56M|            (a = ((!p->call_invalid_rules && _prefix_7_valid) ? (p->mark = _prefix_7_end, _prefix_7_result) : (_prefix_7_result = term_rule(p), _prefix_7_end = p->mark, _prefix_7_valid = 1, _prefix_7_result)))  // term
  ------------------
  |  Branch (13875:13): [True: 1.77M, False: 1.79M]
  |  Branch (13875:20): [True: 3.04M, False: 523k]
  |  Branch (13875:46): [True: 0, False: 3.04M]
  ------------------
13876|  1.77M|            &&
13877|  1.77M|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (13877:13): [True: 192k, False: 1.58M]
  ------------------
13878|   192k|            &&
13879|   192k|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (13879:13): [True: 189k, False: 3.61k]
  ------------------
13880|  3.56M|        )
13881|   189k|        {
13882|   189k|            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '*' factor"));
13883|   189k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13884|   189k|            if (_token == NULL) {
  ------------------
  |  Branch (13884:17): [True: 0, False: 189k]
  ------------------
13885|      0|                p->level--;
13886|      0|                return NULL;
13887|      0|            }
13888|   189k|            int _end_lineno = _token->end_lineno;
13889|   189k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   189k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 189k]
  |  |  ------------------
  ------------------
13890|   189k|            int _end_col_offset = _token->end_col_offset;
13891|   189k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   189k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 189k]
  |  |  ------------------
  ------------------
13892|   189k|            _res = _PyAST_BinOp ( a , Mult , b , EXTRA );
  ------------------
  |  |  307|   189k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13893|   189k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13893:18): [True: 0, False: 189k]
  |  Branch (13893:34): [True: 0, False: 189k]
  |  Branch (13893:57): [True: 0, False: 0]
  ------------------
13894|      0|                p->error_indicator = 1;
13895|      0|                p->level--;
13896|      0|                return NULL;
13897|      0|            }
13898|   189k|            goto done;
13899|   189k|        }
13900|  3.37M|        p->mark = _mark;
13901|  3.37M|        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
13902|  3.37M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '*' factor"));
13903|  3.37M|    }
13904|      0|    { // term '/' factor
13905|  3.37M|        if (p->error_indicator) {
  ------------------
  |  Branch (13905:13): [True: 2.24k, False: 3.37M]
  ------------------
13906|  2.24k|            p->level--;
13907|  2.24k|            return NULL;
13908|  2.24k|        }
13909|  3.37M|        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
13910|  3.37M|        Token * _literal;
13911|  3.37M|        expr_ty a;
13912|  3.37M|        expr_ty b;
13913|  3.37M|        if (
13914|  3.37M|            (a = ((!p->call_invalid_rules && _prefix_7_valid) ? (p->mark = _prefix_7_end, _prefix_7_result) : (_prefix_7_result = term_rule(p), _prefix_7_end = p->mark, _prefix_7_valid = 1, _prefix_7_result)))  // term
  ------------------
  |  Branch (13914:13): [True: 1.58M, False: 1.79M]
  |  Branch (13914:20): [True: 2.86M, False: 506k]
  |  Branch (13914:46): [True: 2.86M, False: 0]
  ------------------
13915|  1.58M|            &&
13916|  1.58M|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (13916:13): [True: 93.3k, False: 1.48M]
  ------------------
13917|  93.3k|            &&
13918|  93.3k|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (13918:13): [True: 92.0k, False: 1.32k]
  ------------------
13919|  3.37M|        )
13920|  92.0k|        {
13921|  92.0k|            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '/' factor"));
13922|  92.0k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13923|  92.0k|            if (_token == NULL) {
  ------------------
  |  Branch (13923:17): [True: 0, False: 92.0k]
  ------------------
13924|      0|                p->level--;
13925|      0|                return NULL;
13926|      0|            }
13927|  92.0k|            int _end_lineno = _token->end_lineno;
13928|  92.0k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  92.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 92.0k]
  |  |  ------------------
  ------------------
13929|  92.0k|            int _end_col_offset = _token->end_col_offset;
13930|  92.0k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  92.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 92.0k]
  |  |  ------------------
  ------------------
13931|  92.0k|            _res = _PyAST_BinOp ( a , Div , b , EXTRA );
  ------------------
  |  |  307|  92.0k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13932|  92.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13932:18): [True: 0, False: 92.0k]
  |  Branch (13932:34): [True: 0, False: 92.0k]
  |  Branch (13932:57): [True: 0, False: 0]
  ------------------
13933|      0|                p->error_indicator = 1;
13934|      0|                p->level--;
13935|      0|                return NULL;
13936|      0|            }
13937|  92.0k|            goto done;
13938|  92.0k|        }
13939|  3.28M|        p->mark = _mark;
13940|  3.28M|        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
13941|  3.28M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '/' factor"));
13942|  3.28M|    }
13943|      0|    { // term '//' factor
13944|  3.28M|        if (p->error_indicator) {
  ------------------
  |  Branch (13944:13): [True: 967, False: 3.28M]
  ------------------
13945|    967|            p->level--;
13946|    967|            return NULL;
13947|    967|        }
13948|  3.28M|        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
13949|  3.28M|        Token * _literal;
13950|  3.28M|        expr_ty a;
13951|  3.28M|        expr_ty b;
13952|  3.28M|        if (
13953|  3.28M|            (a = ((!p->call_invalid_rules && _prefix_7_valid) ? (p->mark = _prefix_7_end, _prefix_7_result) : (_prefix_7_result = term_rule(p), _prefix_7_end = p->mark, _prefix_7_valid = 1, _prefix_7_result)))  // term
  ------------------
  |  Branch (13953:13): [True: 1.48M, False: 1.79M]
  |  Branch (13953:20): [True: 2.78M, False: 501k]
  |  Branch (13953:46): [True: 2.78M, False: 0]
  ------------------
13954|  1.48M|            &&
13955|  1.48M|            (_literal = _PyPegen_expect_token(p, 47))  // token='//'
  ------------------
  |  Branch (13955:13): [True: 22.6k, False: 1.46M]
  ------------------
13956|  22.6k|            &&
13957|  22.6k|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (13957:13): [True: 21.7k, False: 885]
  ------------------
13958|  3.28M|        )
13959|  21.7k|        {
13960|  21.7k|            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '//' factor"));
13961|  21.7k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
13962|  21.7k|            if (_token == NULL) {
  ------------------
  |  Branch (13962:17): [True: 0, False: 21.7k]
  ------------------
13963|      0|                p->level--;
13964|      0|                return NULL;
13965|      0|            }
13966|  21.7k|            int _end_lineno = _token->end_lineno;
13967|  21.7k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  21.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 21.7k]
  |  |  ------------------
  ------------------
13968|  21.7k|            int _end_col_offset = _token->end_col_offset;
13969|  21.7k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  21.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 21.7k]
  |  |  ------------------
  ------------------
13970|  21.7k|            _res = _PyAST_BinOp ( a , FloorDiv , b , EXTRA );
  ------------------
  |  |  307|  21.7k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
13971|  21.7k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13971:18): [True: 0, False: 21.7k]
  |  Branch (13971:34): [True: 0, False: 21.7k]
  |  Branch (13971:57): [True: 0, False: 0]
  ------------------
13972|      0|                p->error_indicator = 1;
13973|      0|                p->level--;
13974|      0|                return NULL;
13975|      0|            }
13976|  21.7k|            goto done;
13977|  21.7k|        }
13978|  3.26M|        p->mark = _mark;
13979|  3.26M|        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
13980|  3.26M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '//' factor"));
13981|  3.26M|    }
13982|      0|    { // term '%' factor
13983|  3.26M|        if (p->error_indicator) {
  ------------------
  |  Branch (13983:13): [True: 157, False: 3.26M]
  ------------------
13984|    157|            p->level--;
13985|    157|            return NULL;
13986|    157|        }
13987|  3.26M|        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
13988|  3.26M|        Token * _literal;
13989|  3.26M|        expr_ty a;
13990|  3.26M|        expr_ty b;
13991|  3.26M|        if (
13992|  3.26M|            (a = ((!p->call_invalid_rules && _prefix_7_valid) ? (p->mark = _prefix_7_end, _prefix_7_result) : (_prefix_7_result = term_rule(p), _prefix_7_end = p->mark, _prefix_7_valid = 1, _prefix_7_result)))  // term
  ------------------
  |  Branch (13992:13): [True: 1.46M, False: 1.79M]
  |  Branch (13992:20): [True: 2.76M, False: 500k]
  |  Branch (13992:46): [True: 2.76M, False: 0]
  ------------------
13993|  1.46M|            &&
13994|  1.46M|            (_literal = _PyPegen_expect_token(p, 24))  // token='%'
  ------------------
  |  Branch (13994:13): [True: 64.1k, False: 1.40M]
  ------------------
13995|  64.1k|            &&
13996|  64.1k|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (13996:13): [True: 63.0k, False: 1.14k]
  ------------------
13997|  3.26M|        )
13998|  63.0k|        {
13999|  63.0k|            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '%' factor"));
14000|  63.0k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14001|  63.0k|            if (_token == NULL) {
  ------------------
  |  Branch (14001:17): [True: 0, False: 63.0k]
  ------------------
14002|      0|                p->level--;
14003|      0|                return NULL;
14004|      0|            }
14005|  63.0k|            int _end_lineno = _token->end_lineno;
14006|  63.0k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  63.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 63.0k]
  |  |  ------------------
  ------------------
14007|  63.0k|            int _end_col_offset = _token->end_col_offset;
14008|  63.0k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  63.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 63.0k]
  |  |  ------------------
  ------------------
14009|  63.0k|            _res = _PyAST_BinOp ( a , Mod , b , EXTRA );
  ------------------
  |  |  307|  63.0k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14010|  63.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14010:18): [True: 0, False: 63.0k]
  |  Branch (14010:34): [True: 0, False: 63.0k]
  |  Branch (14010:57): [True: 0, False: 0]
  ------------------
14011|      0|                p->error_indicator = 1;
14012|      0|                p->level--;
14013|      0|                return NULL;
14014|      0|            }
14015|  63.0k|            goto done;
14016|  63.0k|        }
14017|  3.19M|        p->mark = _mark;
14018|  3.19M|        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14019|  3.19M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '%' factor"));
14020|  3.19M|    }
14021|      0|    { // term '@' factor
14022|  3.19M|        if (p->error_indicator) {
  ------------------
  |  Branch (14022:13): [True: 423, False: 3.19M]
  ------------------
14023|    423|            p->level--;
14024|    423|            return NULL;
14025|    423|        }
14026|  3.19M|        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
14027|  3.19M|        Token * _literal;
14028|  3.19M|        expr_ty a;
14029|  3.19M|        expr_ty b;
14030|  3.19M|        if (
14031|  3.19M|            (a = ((!p->call_invalid_rules && _prefix_7_valid) ? (p->mark = _prefix_7_end, _prefix_7_result) : (_prefix_7_result = term_rule(p), _prefix_7_end = p->mark, _prefix_7_valid = 1, _prefix_7_result)))  // term
  ------------------
  |  Branch (14031:13): [True: 1.40M, False: 1.79M]
  |  Branch (14031:20): [True: 2.70M, False: 496k]
  |  Branch (14031:46): [True: 2.70M, False: 0]
  ------------------
14032|  1.40M|            &&
14033|  1.40M|            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
  ------------------
  |  Branch (14033:13): [True: 11.8k, False: 1.39M]
  ------------------
14034|  11.8k|            &&
14035|  11.8k|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (14035:13): [True: 10.5k, False: 1.23k]
  ------------------
14036|  3.19M|        )
14037|  10.5k|        {
14038|  10.5k|            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '@' factor"));
14039|  10.5k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14040|  10.5k|            if (_token == NULL) {
  ------------------
  |  Branch (14040:17): [True: 0, False: 10.5k]
  ------------------
14041|      0|                p->level--;
14042|      0|                return NULL;
14043|      0|            }
14044|  10.5k|            int _end_lineno = _token->end_lineno;
14045|  10.5k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  10.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.5k]
  |  |  ------------------
  ------------------
14046|  10.5k|            int _end_col_offset = _token->end_col_offset;
14047|  10.5k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  10.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.5k]
  |  |  ------------------
  ------------------
14048|  10.5k|            _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _PyAST_BinOp ( a , MatMult , b , EXTRA ) );
  ------------------
  |  |  345|  10.5k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
14049|  10.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14049:18): [True: 0, False: 10.5k]
  |  Branch (14049:34): [True: 0, False: 10.5k]
  |  Branch (14049:57): [True: 0, False: 0]
  ------------------
14050|      0|                p->error_indicator = 1;
14051|      0|                p->level--;
14052|      0|                return NULL;
14053|      0|            }
14054|  10.5k|            goto done;
14055|  10.5k|        }
14056|  3.18M|        p->mark = _mark;
14057|  3.18M|        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14058|  3.18M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '@' factor"));
14059|  3.18M|    }
14060|      0|    { // factor
14061|  3.18M|        if (p->error_indicator) {
  ------------------
  |  Branch (14061:13): [True: 473, False: 3.18M]
  ------------------
14062|    473|            p->level--;
14063|    473|            return NULL;
14064|    473|        }
14065|  3.18M|        D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "factor"));
14066|  3.18M|        expr_ty factor_var;
14067|  3.18M|        if (
14068|  3.18M|            (factor_var = factor_rule(p))  // factor
  ------------------
  |  Branch (14068:13): [True: 2.78M, False: 398k]
  ------------------
14069|  3.18M|        )
14070|  2.78M|        {
14071|  2.78M|            D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "factor"));
14072|  2.78M|            _res = factor_var;
14073|  2.78M|            goto done;
14074|  2.78M|        }
14075|   398k|        p->mark = _mark;
14076|   398k|        D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ',
14077|   398k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "factor"));
14078|   398k|    }
14079|   398k|    _res = NULL;
14080|  3.56M|  done:
14081|  3.56M|    p->level--;
14082|  3.56M|    return _res;
14083|   398k|}
parser.c:factor_rule:
14088|  4.01M|{
14089|  4.01M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.03M|#  define MAXSTACK 6000
  ------------------
  |  Branch (14089:9): [True: 1, False: 4.01M]
  |  Branch (14089:35): [True: 0, False: 4.01M]
  ------------------
14090|      1|        _Pypegen_stack_overflow(p);
14091|      1|    }
14092|  4.01M|    if (p->error_indicator) {
  ------------------
  |  Branch (14092:9): [True: 1, False: 4.01M]
  ------------------
14093|      1|        p->level--;
14094|      1|        return NULL;
14095|      1|    }
14096|  4.01M|    expr_ty _res = NULL;
14097|  4.01M|    if (_PyPegen_is_memoized(p, factor_type, &_res)) {
  ------------------
  |  |  218|  4.01M|#define factor_type 1129
  ------------------
  |  Branch (14097:9): [True: 1.40M, False: 2.61M]
  ------------------
14098|  1.40M|        p->level--;
14099|  1.40M|        return _res;
14100|  1.40M|    }
14101|  2.61M|    int _mark = p->mark;
14102|  2.61M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14102:9): [True: 0, False: 2.61M]
  |  Branch (14102:31): [True: 0, False: 0]
  ------------------
14103|      0|        p->error_indicator = 1;
14104|      0|        p->level--;
14105|      0|        return NULL;
14106|      0|    }
14107|  2.61M|    int _start_lineno = p->tokens[_mark]->lineno;
14108|  2.61M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.61M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.61M]
  |  |  ------------------
  ------------------
14109|  2.61M|    int _start_col_offset = p->tokens[_mark]->col_offset;
14110|  2.61M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.61M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.61M]
  |  |  ------------------
  ------------------
14111|  2.61M|    { // '+' factor
14112|  2.61M|        if (p->error_indicator) {
  ------------------
  |  Branch (14112:13): [True: 0, False: 2.61M]
  ------------------
14113|      0|            p->level--;
14114|      0|            return NULL;
14115|      0|        }
14116|  2.61M|        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' factor"));
14117|  2.61M|        Token * _literal;
14118|  2.61M|        expr_ty a;
14119|  2.61M|        if (
14120|  2.61M|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (14120:13): [True: 114k, False: 2.50M]
  ------------------
14121|   114k|            &&
14122|   114k|            (a = factor_rule(p))  // factor
  ------------------
  |  Branch (14122:13): [True: 106k, False: 8.10k]
  ------------------
14123|  2.61M|        )
14124|   106k|        {
14125|   106k|            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' factor"));
14126|   106k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14127|   106k|            if (_token == NULL) {
  ------------------
  |  Branch (14127:17): [True: 0, False: 106k]
  ------------------
14128|      0|                p->level--;
14129|      0|                return NULL;
14130|      0|            }
14131|   106k|            int _end_lineno = _token->end_lineno;
14132|   106k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   106k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 106k]
  |  |  ------------------
  ------------------
14133|   106k|            int _end_col_offset = _token->end_col_offset;
14134|   106k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   106k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 106k]
  |  |  ------------------
  ------------------
14135|   106k|            _res = _PyAST_UnaryOp ( UAdd , a , EXTRA );
  ------------------
  |  |  307|   106k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14136|   106k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14136:18): [True: 0, False: 106k]
  |  Branch (14136:34): [True: 0, False: 106k]
  |  Branch (14136:57): [True: 0, False: 0]
  ------------------
14137|      0|                p->error_indicator = 1;
14138|      0|                p->level--;
14139|      0|                return NULL;
14140|      0|            }
14141|   106k|            goto done;
14142|   106k|        }
14143|  2.51M|        p->mark = _mark;
14144|  2.51M|        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14145|  2.51M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' factor"));
14146|  2.51M|    }
14147|      0|    { // '-' factor
14148|  2.51M|        if (p->error_indicator) {
  ------------------
  |  Branch (14148:13): [True: 6.46k, False: 2.50M]
  ------------------
14149|  6.46k|            p->level--;
14150|  6.46k|            return NULL;
14151|  6.46k|        }
14152|  2.50M|        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' factor"));
14153|  2.50M|        Token * _literal;
14154|  2.50M|        expr_ty a;
14155|  2.50M|        if (
14156|  2.50M|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (14156:13): [True: 192k, False: 2.31M]
  ------------------
14157|   192k|            &&
14158|   192k|            (a = factor_rule(p))  // factor
  ------------------
  |  Branch (14158:13): [True: 189k, False: 3.72k]
  ------------------
14159|  2.50M|        )
14160|   189k|        {
14161|   189k|            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' factor"));
14162|   189k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14163|   189k|            if (_token == NULL) {
  ------------------
  |  Branch (14163:17): [True: 0, False: 189k]
  ------------------
14164|      0|                p->level--;
14165|      0|                return NULL;
14166|      0|            }
14167|   189k|            int _end_lineno = _token->end_lineno;
14168|   189k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   189k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 189k]
  |  |  ------------------
  ------------------
14169|   189k|            int _end_col_offset = _token->end_col_offset;
14170|   189k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   189k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 189k]
  |  |  ------------------
  ------------------
14171|   189k|            _res = _PyAST_UnaryOp ( USub , a , EXTRA );
  ------------------
  |  |  307|   189k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14172|   189k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14172:18): [True: 0, False: 189k]
  |  Branch (14172:34): [True: 0, False: 189k]
  |  Branch (14172:57): [True: 0, False: 0]
  ------------------
14173|      0|                p->error_indicator = 1;
14174|      0|                p->level--;
14175|      0|                return NULL;
14176|      0|            }
14177|   189k|            goto done;
14178|   189k|        }
14179|  2.31M|        p->mark = _mark;
14180|  2.31M|        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14181|  2.31M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' factor"));
14182|  2.31M|    }
14183|      0|    { // '~' factor
14184|  2.31M|        if (p->error_indicator) {
  ------------------
  |  Branch (14184:13): [True: 2.02k, False: 2.31M]
  ------------------
14185|  2.02k|            p->level--;
14186|  2.02k|            return NULL;
14187|  2.02k|        }
14188|  2.31M|        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~' factor"));
14189|  2.31M|        Token * _literal;
14190|  2.31M|        expr_ty a;
14191|  2.31M|        if (
14192|  2.31M|            (_literal = _PyPegen_expect_token(p, 31))  // token='~'
  ------------------
  |  Branch (14192:13): [True: 20.4k, False: 2.29M]
  ------------------
14193|  20.4k|            &&
14194|  20.4k|            (a = factor_rule(p))  // factor
  ------------------
  |  Branch (14194:13): [True: 19.1k, False: 1.29k]
  ------------------
14195|  2.31M|        )
14196|  19.1k|        {
14197|  19.1k|            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~' factor"));
14198|  19.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14199|  19.1k|            if (_token == NULL) {
  ------------------
  |  Branch (14199:17): [True: 0, False: 19.1k]
  ------------------
14200|      0|                p->level--;
14201|      0|                return NULL;
14202|      0|            }
14203|  19.1k|            int _end_lineno = _token->end_lineno;
14204|  19.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  19.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19.1k]
  |  |  ------------------
  ------------------
14205|  19.1k|            int _end_col_offset = _token->end_col_offset;
14206|  19.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  19.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19.1k]
  |  |  ------------------
  ------------------
14207|  19.1k|            _res = _PyAST_UnaryOp ( Invert , a , EXTRA );
  ------------------
  |  |  307|  19.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14208|  19.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14208:18): [True: 0, False: 19.1k]
  |  Branch (14208:34): [True: 0, False: 19.1k]
  |  Branch (14208:57): [True: 0, False: 0]
  ------------------
14209|      0|                p->error_indicator = 1;
14210|      0|                p->level--;
14211|      0|                return NULL;
14212|      0|            }
14213|  19.1k|            goto done;
14214|  19.1k|        }
14215|  2.29M|        p->mark = _mark;
14216|  2.29M|        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14217|  2.29M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~' factor"));
14218|  2.29M|    }
14219|      0|    { // power
14220|  2.29M|        if (p->error_indicator) {
  ------------------
  |  Branch (14220:13): [True: 403, False: 2.29M]
  ------------------
14221|    403|            p->level--;
14222|    403|            return NULL;
14223|    403|        }
14224|  2.29M|        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "power"));
14225|  2.29M|        expr_ty power_var;
14226|  2.29M|        if (
14227|  2.29M|            (power_var = power_rule(p))  // power
  ------------------
  |  Branch (14227:13): [True: 1.88M, False: 411k]
  ------------------
14228|  2.29M|        )
14229|  1.88M|        {
14230|  1.88M|            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "power"));
14231|  1.88M|            _res = power_var;
14232|  1.88M|            goto done;
14233|  1.88M|        }
14234|   411k|        p->mark = _mark;
14235|   411k|        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14236|   411k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "power"));
14237|   411k|    }
14238|   411k|    if (p->call_invalid_rules) { // invalid_factor
  ------------------
  |  Branch (14238:9): [True: 109k, False: 301k]
  ------------------
14239|   109k|        if (p->error_indicator) {
  ------------------
  |  Branch (14239:13): [True: 37.9k, False: 71.8k]
  ------------------
14240|  37.9k|            p->level--;
14241|  37.9k|            return NULL;
14242|  37.9k|        }
14243|  71.8k|        D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_factor"));
14244|  71.8k|        void *invalid_factor_var;
14245|  71.8k|        if (
14246|  71.8k|            (invalid_factor_var = invalid_factor_rule(p))  // invalid_factor
  ------------------
  |  Branch (14246:13): [True: 0, False: 71.8k]
  ------------------
14247|  71.8k|        )
14248|      0|        {
14249|      0|            D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_factor"));
14250|      0|            _res = invalid_factor_var;
14251|      0|            goto done;
14252|      0|        }
14253|  71.8k|        p->mark = _mark;
14254|  71.8k|        D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ',
14255|  71.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_factor"));
14256|  71.8k|    }
14257|   373k|    _res = NULL;
14258|  2.57M|  done:
14259|  2.57M|    _PyPegen_insert_memo(p, _mark, factor_type, _res);
  ------------------
  |  |  218|  2.57M|#define factor_type 1129
  ------------------
14260|  2.57M|    p->level--;
14261|  2.57M|    return _res;
14262|   373k|}
parser.c:power_rule:
14267|  2.29M|{
14268|  2.29M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.59M|#  define MAXSTACK 6000
  ------------------
  |  Branch (14268:9): [True: 3, False: 2.29M]
  |  Branch (14268:35): [True: 0, False: 2.29M]
  ------------------
14269|      3|        _Pypegen_stack_overflow(p);
14270|      3|    }
14271|  2.29M|    if (p->error_indicator) {
  ------------------
  |  Branch (14271:9): [True: 3, False: 2.29M]
  ------------------
14272|      3|        p->level--;
14273|      3|        return NULL;
14274|      3|    }
14275|  2.29M|    expr_ty _res = NULL;
14276|  2.29M|    int _mark = p->mark;
14277|  2.29M|    expr_ty _prefix_8_result = NULL;
14278|  2.29M|    int _prefix_8_end = 0, _prefix_8_valid = 0;
14279|  2.29M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14279:9): [True: 0, False: 2.29M]
  |  Branch (14279:31): [True: 0, False: 0]
  ------------------
14280|      0|        p->error_indicator = 1;
14281|      0|        p->level--;
14282|      0|        return NULL;
14283|      0|    }
14284|  2.29M|    int _start_lineno = p->tokens[_mark]->lineno;
14285|  2.29M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.29M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.29M]
  |  |  ------------------
  ------------------
14286|  2.29M|    int _start_col_offset = p->tokens[_mark]->col_offset;
14287|  2.29M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.29M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.29M]
  |  |  ------------------
  ------------------
14288|  2.29M|    { // await_primary '**' factor
14289|  2.29M|        if (p->error_indicator) {
  ------------------
  |  Branch (14289:13): [True: 0, False: 2.29M]
  ------------------
14290|      0|            p->level--;
14291|      0|            return NULL;
14292|      0|        }
14293|  2.29M|        D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
14294|  2.29M|        Token * _literal;
14295|  2.29M|        expr_ty a;
14296|  2.29M|        expr_ty b;
14297|  2.29M|        if (
14298|  2.29M|            (a = ((!p->call_invalid_rules && _prefix_8_valid) ? (p->mark = _prefix_8_end, _prefix_8_result) : (_prefix_8_result = await_primary_rule(p), _prefix_8_end = p->mark, _prefix_8_valid = 1, _prefix_8_result)))  // await_primary
  ------------------
  |  Branch (14298:13): [True: 1.88M, False: 410k]
  |  Branch (14298:20): [True: 1.96M, False: 333k]
  |  Branch (14298:46): [True: 0, False: 1.96M]
  ------------------
14299|  1.88M|            &&
14300|  1.88M|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (14300:13): [True: 119k, False: 1.76M]
  ------------------
14301|   119k|            &&
14302|   119k|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (14302:13): [True: 118k, False: 987]
  ------------------
14303|  2.29M|        )
14304|   118k|        {
14305|   118k|            D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor"));
14306|   118k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14307|   118k|            if (_token == NULL) {
  ------------------
  |  Branch (14307:17): [True: 0, False: 118k]
  ------------------
14308|      0|                p->level--;
14309|      0|                return NULL;
14310|      0|            }
14311|   118k|            int _end_lineno = _token->end_lineno;
14312|   118k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   118k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 118k]
  |  |  ------------------
  ------------------
14313|   118k|            int _end_col_offset = _token->end_col_offset;
14314|   118k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   118k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 118k]
  |  |  ------------------
  ------------------
14315|   118k|            _res = _PyAST_BinOp ( a , Pow , b , EXTRA );
  ------------------
  |  |  307|   118k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14316|   118k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14316:18): [True: 0, False: 118k]
  |  Branch (14316:34): [True: 0, False: 118k]
  |  Branch (14316:57): [True: 0, False: 0]
  ------------------
14317|      0|                p->error_indicator = 1;
14318|      0|                p->level--;
14319|      0|                return NULL;
14320|      0|            }
14321|   118k|            goto done;
14322|   118k|        }
14323|  2.17M|        p->mark = _mark;
14324|  2.17M|        D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ',
14325|  2.17M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary '**' factor"));
14326|  2.17M|    }
14327|      0|    { // await_primary
14328|  2.17M|        if (p->error_indicator) {
  ------------------
  |  Branch (14328:13): [True: 53.6k, False: 2.12M]
  ------------------
14329|  53.6k|            p->level--;
14330|  53.6k|            return NULL;
14331|  53.6k|        }
14332|  2.12M|        D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary"));
14333|  2.12M|        expr_ty await_primary_var;
14334|  2.12M|        if (
14335|  2.12M|            (await_primary_var = ((!p->call_invalid_rules && _prefix_8_valid) ? (p->mark = _prefix_8_end, _prefix_8_result) : (_prefix_8_result = await_primary_rule(p), _prefix_8_end = p->mark, _prefix_8_valid = 1, _prefix_8_result)))  // await_primary
  ------------------
  |  Branch (14335:13): [True: 1.76M, False: 357k]
  |  Branch (14335:36): [True: 1.83M, False: 290k]
  |  Branch (14335:62): [True: 1.83M, False: 0]
  ------------------
14336|  2.12M|        )
14337|  1.76M|        {
14338|  1.76M|            D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary"));
14339|  1.76M|            _res = await_primary_var;
14340|  1.76M|            goto done;
14341|  1.76M|        }
14342|   357k|        p->mark = _mark;
14343|   357k|        D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ',
14344|   357k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary"));
14345|   357k|    }
14346|   357k|    _res = NULL;
14347|  2.24M|  done:
14348|  2.24M|    p->level--;
14349|  2.24M|    return _res;
14350|   357k|}
parser.c:await_primary_rule:
14355|  2.58M|{
14356|  2.58M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.17M|#  define MAXSTACK 6000
  ------------------
  |  Branch (14356:9): [True: 2, False: 2.58M]
  |  Branch (14356:35): [True: 0, False: 2.58M]
  ------------------
14357|      2|        _Pypegen_stack_overflow(p);
14358|      2|    }
14359|  2.58M|    if (p->error_indicator) {
  ------------------
  |  Branch (14359:9): [True: 2, False: 2.58M]
  ------------------
14360|      2|        p->level--;
14361|      2|        return NULL;
14362|      2|    }
14363|  2.58M|    expr_ty _res = NULL;
14364|  2.58M|    if (_PyPegen_is_memoized(p, await_primary_type, &_res)) {
  ------------------
  |  |  220|  2.58M|#define await_primary_type 1131
  ------------------
  |  Branch (14364:9): [True: 290k, False: 2.29M]
  ------------------
14365|   290k|        p->level--;
14366|   290k|        return _res;
14367|   290k|    }
14368|  2.29M|    int _mark = p->mark;
14369|  2.29M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14369:9): [True: 0, False: 2.29M]
  |  Branch (14369:31): [True: 0, False: 0]
  ------------------
14370|      0|        p->error_indicator = 1;
14371|      0|        p->level--;
14372|      0|        return NULL;
14373|      0|    }
14374|  2.29M|    int _start_lineno = p->tokens[_mark]->lineno;
14375|  2.29M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.29M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.29M]
  |  |  ------------------
  ------------------
14376|  2.29M|    int _start_col_offset = p->tokens[_mark]->col_offset;
14377|  2.29M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.29M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.29M]
  |  |  ------------------
  ------------------
14378|  2.29M|    { // 'await' primary
14379|  2.29M|        if (p->error_indicator) {
  ------------------
  |  Branch (14379:13): [True: 0, False: 2.29M]
  ------------------
14380|      0|            p->level--;
14381|      0|            return NULL;
14382|      0|        }
14383|  2.29M|        D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'await' primary"));
14384|  2.29M|        Token * _keyword;
14385|  2.29M|        expr_ty a;
14386|  2.29M|        if (
14387|  2.29M|            (_keyword = _PyPegen_expect_token(p, 598))  // token='await'
  ------------------
  |  Branch (14387:13): [True: 1.80k, False: 2.29M]
  ------------------
14388|  1.80k|            &&
14389|  1.80k|            (a = primary_rule(p))  // primary
  ------------------
  |  Branch (14389:13): [True: 1.68k, False: 121]
  ------------------
14390|  2.29M|        )
14391|  1.68k|        {
14392|  1.68k|            D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'await' primary"));
14393|  1.68k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14394|  1.68k|            if (_token == NULL) {
  ------------------
  |  Branch (14394:17): [True: 0, False: 1.68k]
  ------------------
14395|      0|                p->level--;
14396|      0|                return NULL;
14397|      0|            }
14398|  1.68k|            int _end_lineno = _token->end_lineno;
14399|  1.68k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.68k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.68k]
  |  |  ------------------
  ------------------
14400|  1.68k|            int _end_col_offset = _token->end_col_offset;
14401|  1.68k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.68k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.68k]
  |  |  ------------------
  ------------------
14402|  1.68k|            _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _PyAST_Await ( a , EXTRA ) );
  ------------------
  |  |  345|  1.68k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
14403|  1.68k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14403:18): [True: 0, False: 1.68k]
  |  Branch (14403:34): [True: 0, False: 1.68k]
  |  Branch (14403:57): [True: 0, False: 0]
  ------------------
14404|      0|                p->error_indicator = 1;
14405|      0|                p->level--;
14406|      0|                return NULL;
14407|      0|            }
14408|  1.68k|            goto done;
14409|  1.68k|        }
14410|  2.29M|        p->mark = _mark;
14411|  2.29M|        D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ',
14412|  2.29M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'await' primary"));
14413|  2.29M|    }
14414|      0|    { // primary
14415|  2.29M|        if (p->error_indicator) {
  ------------------
  |  Branch (14415:13): [True: 97, False: 2.29M]
  ------------------
14416|     97|            p->level--;
14417|     97|            return NULL;
14418|     97|        }
14419|  2.29M|        D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary"));
14420|  2.29M|        expr_ty primary_var;
14421|  2.29M|        if (
14422|  2.29M|            (primary_var = primary_rule(p))  // primary
  ------------------
  |  Branch (14422:13): [True: 1.88M, False: 410k]
  ------------------
14423|  2.29M|        )
14424|  1.88M|        {
14425|  1.88M|            D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary"));
14426|  1.88M|            _res = primary_var;
14427|  1.88M|            goto done;
14428|  1.88M|        }
14429|   410k|        p->mark = _mark;
14430|   410k|        D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ',
14431|   410k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary"));
14432|   410k|    }
14433|   410k|    _res = NULL;
14434|  2.29M|  done:
14435|  2.29M|    _PyPegen_insert_memo(p, _mark, await_primary_type, _res);
  ------------------
  |  |  220|  2.29M|#define await_primary_type 1131
  ------------------
14436|  2.29M|    p->level--;
14437|  2.29M|    return _res;
14438|   410k|}
parser.c:primary_rule:
14450|  9.79M|{
14451|  9.79M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.5M|#  define MAXSTACK 6000
  ------------------
  |  Branch (14451:9): [True: 3, False: 9.79M]
  |  Branch (14451:35): [True: 0, False: 9.79M]
  ------------------
14452|      3|        _Pypegen_stack_overflow(p);
14453|      3|    }
14454|  9.79M|    expr_ty _res = NULL;
14455|  9.79M|    if (_PyPegen_is_memoized(p, primary_type, &_res)) {
  ------------------
  |  |  221|  9.79M|#define primary_type 1132  // Left-recursive
  ------------------
  |  Branch (14455:9): [True: 7.30M, False: 2.49M]
  ------------------
14456|  7.30M|        p->level--;
14457|  7.30M|        return _res;
14458|  7.30M|    }
14459|  2.49M|    int _mark = p->mark;
14460|  2.49M|    int _resmark = p->mark;
14461|  2.49M|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, primary_type);
  ------------------
  |  |  221|  2.49M|#define primary_type 1132  // Left-recursive
  ------------------
14462|  2.49M|    if (_memo == NULL) {
  ------------------
  |  Branch (14462:9): [True: 0, False: 2.49M]
  ------------------
14463|      0|        p->level--;
14464|      0|        return NULL;
14465|      0|    }
14466|  4.63M|    while (1) {
  ------------------
  |  Branch (14466:12): [True: 4.63M, Folded]
  ------------------
14467|  4.63M|        _memo->node = _res;
14468|  4.63M|        _memo->mark = p->mark;
14469|  4.63M|        p->mark = _mark;
14470|  4.63M|        void *_raw = primary_raw(p);
14471|  4.63M|        if (p->error_indicator) {
  ------------------
  |  Branch (14471:13): [True: 55.6k, False: 4.57M]
  ------------------
14472|  55.6k|            p->level--;
14473|  55.6k|            return NULL;
14474|  55.6k|        }
14475|  4.57M|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (14475:13): [True: 389k, False: 4.18M]
  |  Branch (14475:29): [True: 2.04M, False: 2.13M]
  ------------------
14476|  2.43M|            break;
14477|  2.13M|        _resmark = p->mark;
14478|  2.13M|        _res = _raw;
14479|  2.13M|    }
14480|  2.43M|    p->mark = _resmark;
14481|  2.43M|    p->level--;
14482|  2.43M|    return _res;
14483|  2.49M|}
parser.c:primary_raw:
14486|  4.63M|{
14487|  4.63M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.26M|#  define MAXSTACK 6000
  ------------------
  |  Branch (14487:9): [True: 3, False: 4.63M]
  |  Branch (14487:35): [True: 0, False: 4.63M]
  ------------------
14488|      3|        _Pypegen_stack_overflow(p);
14489|      3|    }
14490|  4.63M|    if (p->error_indicator) {
  ------------------
  |  Branch (14490:9): [True: 3, False: 4.63M]
  ------------------
14491|      3|        p->level--;
14492|      3|        return NULL;
14493|      3|    }
14494|  4.63M|    expr_ty _res = NULL;
14495|  4.63M|    int _mark = p->mark;
14496|  4.63M|    expr_ty _prefix_9_result = NULL;
14497|  4.63M|    int _prefix_9_end = 0, _prefix_9_valid = 0;
14498|  4.63M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14498:9): [True: 0, False: 4.63M]
  |  Branch (14498:31): [True: 0, False: 0]
  ------------------
14499|      0|        p->error_indicator = 1;
14500|      0|        p->level--;
14501|      0|        return NULL;
14502|      0|    }
14503|  4.63M|    int _start_lineno = p->tokens[_mark]->lineno;
14504|  4.63M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.63M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.63M]
  |  |  ------------------
  ------------------
14505|  4.63M|    int _start_col_offset = p->tokens[_mark]->col_offset;
14506|  4.63M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.63M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.63M]
  |  |  ------------------
  ------------------
14507|  4.63M|    { // primary '.' NAME
14508|  4.63M|        if (p->error_indicator) {
  ------------------
  |  Branch (14508:13): [True: 0, False: 4.63M]
  ------------------
14509|      0|            p->level--;
14510|      0|            return NULL;
14511|      0|        }
14512|  4.63M|        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
14513|  4.63M|        Token * _literal;
14514|  4.63M|        expr_ty a;
14515|  4.63M|        expr_ty b;
14516|  4.63M|        if (
14517|  4.63M|            (a = ((!p->call_invalid_rules && _prefix_9_valid) ? (p->mark = _prefix_9_end, _prefix_9_result) : (_prefix_9_result = primary_rule(p), _prefix_9_end = p->mark, _prefix_9_valid = 1, _prefix_9_result)))  // primary
  ------------------
  |  Branch (14517:13): [True: 2.13M, False: 2.49M]
  |  Branch (14517:20): [True: 4.01M, False: 615k]
  |  Branch (14517:46): [True: 0, False: 4.01M]
  ------------------
14518|  2.13M|            &&
14519|  2.13M|            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
  ------------------
  |  Branch (14519:13): [True: 30.6k, False: 2.10M]
  ------------------
14520|  30.6k|            &&
14521|  30.6k|            (b = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (14521:13): [True: 30.2k, False: 371]
  ------------------
14522|  4.63M|        )
14523|  30.2k|        {
14524|  30.2k|            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '.' NAME"));
14525|  30.2k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14526|  30.2k|            if (_token == NULL) {
  ------------------
  |  Branch (14526:17): [True: 0, False: 30.2k]
  ------------------
14527|      0|                p->level--;
14528|      0|                return NULL;
14529|      0|            }
14530|  30.2k|            int _end_lineno = _token->end_lineno;
14531|  30.2k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  30.2k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30.2k]
  |  |  ------------------
  ------------------
14532|  30.2k|            int _end_col_offset = _token->end_col_offset;
14533|  30.2k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  30.2k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30.2k]
  |  |  ------------------
  ------------------
14534|  30.2k|            _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA );
  ------------------
  |  |  307|  30.2k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14535|  30.2k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14535:18): [True: 0, False: 30.2k]
  |  Branch (14535:34): [True: 0, False: 30.2k]
  |  Branch (14535:57): [True: 0, False: 0]
  ------------------
14536|      0|                p->error_indicator = 1;
14537|      0|                p->level--;
14538|      0|                return NULL;
14539|      0|            }
14540|  30.2k|            goto done;
14541|  30.2k|        }
14542|  4.60M|        p->mark = _mark;
14543|  4.60M|        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14544|  4.60M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '.' NAME"));
14545|  4.60M|    }
14546|      0|    { // primary genexp
14547|  4.60M|        if (p->error_indicator) {
  ------------------
  |  Branch (14547:13): [True: 1.04k, False: 4.60M]
  ------------------
14548|  1.04k|            p->level--;
14549|  1.04k|            return NULL;
14550|  1.04k|        }
14551|  4.60M|        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary genexp"));
14552|  4.60M|        expr_ty a;
14553|  4.60M|        expr_ty b;
14554|  4.60M|        if (
14555|  4.60M|            (a = ((!p->call_invalid_rules && _prefix_9_valid) ? (p->mark = _prefix_9_end, _prefix_9_result) : (_prefix_9_result = primary_rule(p), _prefix_9_end = p->mark, _prefix_9_valid = 1, _prefix_9_result)))  // primary
  ------------------
  |  Branch (14555:13): [True: 2.10M, False: 2.49M]
  |  Branch (14555:20): [True: 3.99M, False: 610k]
  |  Branch (14555:46): [True: 3.99M, False: 0]
  ------------------
14556|  2.10M|            &&
14557|  2.10M|            (b = genexp_rule(p))  // genexp
  ------------------
  |  Branch (14557:13): [True: 1.63k, False: 2.10M]
  ------------------
14558|  4.60M|        )
14559|  1.63k|        {
14560|  1.63k|            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary genexp"));
14561|  1.63k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14562|  1.63k|            if (_token == NULL) {
  ------------------
  |  Branch (14562:17): [True: 0, False: 1.63k]
  ------------------
14563|      0|                p->level--;
14564|      0|                return NULL;
14565|      0|            }
14566|  1.63k|            int _end_lineno = _token->end_lineno;
14567|  1.63k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.63k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.63k]
  |  |  ------------------
  ------------------
14568|  1.63k|            int _end_col_offset = _token->end_col_offset;
14569|  1.63k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.63k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.63k]
  |  |  ------------------
  ------------------
14570|  1.63k|            _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq* , ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
  ------------------
  |  |  271|  1.63k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq* , ( asdl_expr_seq* ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA );
  ------------------
  |  |  307|  1.63k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14571|  1.63k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14571:18): [True: 0, False: 1.63k]
  |  Branch (14571:34): [True: 0, False: 1.63k]
  |  Branch (14571:57): [True: 0, False: 0]
  ------------------
14572|      0|                p->error_indicator = 1;
14573|      0|                p->level--;
14574|      0|                return NULL;
14575|      0|            }
14576|  1.63k|            goto done;
14577|  1.63k|        }
14578|  4.60M|        p->mark = _mark;
14579|  4.60M|        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14580|  4.60M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary genexp"));
14581|  4.60M|    }
14582|      0|    { // primary '(' arguments? ')'
14583|  4.60M|        if (p->error_indicator) {
  ------------------
  |  Branch (14583:13): [True: 12.0k, False: 4.58M]
  ------------------
14584|  12.0k|            p->level--;
14585|  12.0k|            return NULL;
14586|  12.0k|        }
14587|  4.58M|        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
14588|  4.58M|        Token * _literal;
14589|  4.58M|        Token * _literal_1;
14590|  4.58M|        expr_ty a;
14591|  4.58M|        void *b;
14592|  4.58M|        if (
14593|  4.58M|            (a = ((!p->call_invalid_rules && _prefix_9_valid) ? (p->mark = _prefix_9_end, _prefix_9_result) : (_prefix_9_result = primary_rule(p), _prefix_9_end = p->mark, _prefix_9_valid = 1, _prefix_9_result)))  // primary
  ------------------
  |  Branch (14593:13): [True: 2.09M, False: 2.49M]
  |  Branch (14593:20): [True: 3.98M, False: 600k]
  |  Branch (14593:46): [True: 3.98M, False: 0]
  ------------------
14594|  2.09M|            &&
14595|  2.09M|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (14595:13): [True: 39.0k, False: 2.05M]
  ------------------
14596|  39.0k|            &&
14597|  39.0k|            (b = arguments_rule(p), !p->error_indicator)  // arguments?
  ------------------
  |  Branch (14597:13): [True: 33.3k, False: 5.72k]
  ------------------
14598|  33.3k|            &&
14599|  33.3k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (14599:13): [True: 20.0k, False: 13.3k]
  ------------------
14600|  4.58M|        )
14601|  20.0k|        {
14602|  20.0k|            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'"));
14603|  20.0k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14604|  20.0k|            if (_token == NULL) {
  ------------------
  |  Branch (14604:17): [True: 0, False: 20.0k]
  ------------------
14605|      0|                p->level--;
14606|      0|                return NULL;
14607|      0|            }
14608|  20.0k|            int _end_lineno = _token->end_lineno;
14609|  20.0k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  20.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20.0k]
  |  |  ------------------
  ------------------
14610|  20.0k|            int _end_col_offset = _token->end_col_offset;
14611|  20.0k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  20.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20.0k]
  |  |  ------------------
  ------------------
14612|  20.0k|            _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA );
  ------------------
  |  |  307|  20.0k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (14612:38): [True: 15.9k, False: 4.08k]
  |  Branch (14612:92): [True: 15.9k, False: 4.08k]
  ------------------
14613|  20.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14613:18): [True: 0, False: 20.0k]
  |  Branch (14613:34): [True: 0, False: 20.0k]
  |  Branch (14613:57): [True: 0, False: 0]
  ------------------
14614|      0|                p->error_indicator = 1;
14615|      0|                p->level--;
14616|      0|                return NULL;
14617|      0|            }
14618|  20.0k|            goto done;
14619|  20.0k|        }
14620|  4.56M|        p->mark = _mark;
14621|  4.56M|        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14622|  4.56M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '(' arguments? ')'"));
14623|  4.56M|    }
14624|      0|    { // primary '[' slices ']'
14625|  4.56M|        if (p->error_indicator) {
  ------------------
  |  Branch (14625:13): [True: 5.72k, False: 4.56M]
  ------------------
14626|  5.72k|            p->level--;
14627|  5.72k|            return NULL;
14628|  5.72k|        }
14629|  4.56M|        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
14630|  4.56M|        Token * _literal;
14631|  4.56M|        Token * _literal_1;
14632|  4.56M|        expr_ty a;
14633|  4.56M|        expr_ty b;
14634|  4.56M|        if (
14635|  4.56M|            (a = ((!p->call_invalid_rules && _prefix_9_valid) ? (p->mark = _prefix_9_end, _prefix_9_result) : (_prefix_9_result = primary_rule(p), _prefix_9_end = p->mark, _prefix_9_valid = 1, _prefix_9_result)))  // primary
  ------------------
  |  Branch (14635:13): [True: 2.06M, False: 2.49M]
  |  Branch (14635:20): [True: 3.96M, False: 593k]
  |  Branch (14635:46): [True: 3.96M, False: 0]
  ------------------
14636|  2.06M|            &&
14637|  2.06M|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (14637:13): [True: 22.9k, False: 2.04M]
  ------------------
14638|  22.9k|            &&
14639|  22.9k|            (b = slices_rule(p))  // slices
  ------------------
  |  Branch (14639:13): [True: 18.5k, False: 4.44k]
  ------------------
14640|  18.5k|            &&
14641|  18.5k|            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
  ------------------
  |  Branch (14641:13): [True: 15.1k, False: 3.38k]
  ------------------
14642|  4.56M|        )
14643|  15.1k|        {
14644|  15.1k|            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'"));
14645|  15.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14646|  15.1k|            if (_token == NULL) {
  ------------------
  |  Branch (14646:17): [True: 0, False: 15.1k]
  ------------------
14647|      0|                p->level--;
14648|      0|                return NULL;
14649|      0|            }
14650|  15.1k|            int _end_lineno = _token->end_lineno;
14651|  15.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.1k]
  |  |  ------------------
  ------------------
14652|  15.1k|            int _end_col_offset = _token->end_col_offset;
14653|  15.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.1k]
  |  |  ------------------
  ------------------
14654|  15.1k|            _res = _PyAST_Subscript ( a , b , Load , EXTRA );
  ------------------
  |  |  307|  15.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14655|  15.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14655:18): [True: 0, False: 15.1k]
  |  Branch (14655:34): [True: 0, False: 15.1k]
  |  Branch (14655:57): [True: 0, False: 0]
  ------------------
14656|      0|                p->error_indicator = 1;
14657|      0|                p->level--;
14658|      0|                return NULL;
14659|      0|            }
14660|  15.1k|            goto done;
14661|  15.1k|        }
14662|  4.54M|        p->mark = _mark;
14663|  4.54M|        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14664|  4.54M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '[' slices ']'"));
14665|  4.54M|    }
14666|      0|    { // atom
14667|  4.54M|        if (p->error_indicator) {
  ------------------
  |  Branch (14667:13): [True: 2.89k, False: 4.54M]
  ------------------
14668|  2.89k|            p->level--;
14669|  2.89k|            return NULL;
14670|  2.89k|        }
14671|  4.54M|        D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom"));
14672|  4.54M|        expr_ty atom_var;
14673|  4.54M|        if (
14674|  4.54M|            (atom_var = atom_rule(p))  // atom
  ------------------
  |  Branch (14674:13): [True: 4.12M, False: 423k]
  ------------------
14675|  4.54M|        )
14676|  4.12M|        {
14677|  4.12M|            D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom"));
14678|  4.12M|            _res = atom_var;
14679|  4.12M|            goto done;
14680|  4.12M|        }
14681|   423k|        p->mark = _mark;
14682|   423k|        D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ',
14683|   423k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom"));
14684|   423k|    }
14685|   423k|    _res = NULL;
14686|  4.61M|  done:
14687|  4.61M|    p->level--;
14688|  4.61M|    return _res;
14689|   423k|}
parser.c:genexp_rule:
18094|  2.38M|{
18095|  2.38M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.76M|#  define MAXSTACK 6000
  ------------------
  |  Branch (18095:9): [True: 1, False: 2.38M]
  |  Branch (18095:35): [True: 0, False: 2.38M]
  ------------------
18096|      1|        _Pypegen_stack_overflow(p);
18097|      1|    }
18098|  2.38M|    if (p->error_indicator) {
  ------------------
  |  Branch (18098:9): [True: 1, False: 2.38M]
  ------------------
18099|      1|        p->level--;
18100|      1|        return NULL;
18101|      1|    }
18102|  2.38M|    expr_ty _res = NULL;
18103|  2.38M|    int _mark = p->mark;
18104|  2.38M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18104:9): [True: 0, False: 2.38M]
  |  Branch (18104:31): [True: 0, False: 0]
  ------------------
18105|      0|        p->error_indicator = 1;
18106|      0|        p->level--;
18107|      0|        return NULL;
18108|      0|    }
18109|  2.38M|    int _start_lineno = p->tokens[_mark]->lineno;
18110|  2.38M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.38M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.38M]
  |  |  ------------------
  ------------------
18111|  2.38M|    int _start_col_offset = p->tokens[_mark]->col_offset;
18112|  2.38M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.38M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.38M]
  |  |  ------------------
  ------------------
18113|  2.38M|    { // '(' (assignment_expression | expression !':=' | starred_expression) for_if_clauses ')'
18114|  2.38M|        if (p->error_indicator) {
  ------------------
  |  Branch (18114:13): [True: 0, False: 2.38M]
  ------------------
18115|      0|            p->level--;
18116|      0|            return NULL;
18117|      0|        }
18118|  2.38M|        D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (assignment_expression | expression !':=' | starred_expression) for_if_clauses ')'"));
18119|  2.38M|        Token * _literal;
18120|  2.38M|        Token * _literal_1;
18121|  2.38M|        void *a;
18122|  2.38M|        asdl_comprehension_seq* b;
18123|  2.38M|        if (
18124|  2.38M|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (18124:13): [True: 221k, False: 2.15M]
  ------------------
18125|   221k|            &&
18126|   221k|            (a = _tmp_89_rule(p))  // assignment_expression | expression !':=' | starred_expression
  ------------------
  |  Branch (18126:13): [True: 149k, False: 72.1k]
  ------------------
18127|   149k|            &&
18128|   149k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (18128:13): [True: 5.62k, False: 144k]
  ------------------
18129|  5.62k|            &&
18130|  5.62k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (18130:13): [True: 4.47k, False: 1.15k]
  ------------------
18131|  2.38M|        )
18132|  4.47k|        {
18133|  4.47k|            D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (assignment_expression | expression !':=' | starred_expression) for_if_clauses ')'"));
18134|  4.47k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18135|  4.47k|            if (_token == NULL) {
  ------------------
  |  Branch (18135:17): [True: 0, False: 4.47k]
  ------------------
18136|      0|                p->level--;
18137|      0|                return NULL;
18138|      0|            }
18139|  4.47k|            int _end_lineno = _token->end_lineno;
18140|  4.47k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.47k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.47k]
  |  |  ------------------
  ------------------
18141|  4.47k|            int _end_col_offset = _token->end_col_offset;
18142|  4.47k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.47k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.47k]
  |  |  ------------------
  ------------------
18143|  4.47k|            _res = _PyAST_GeneratorExp ( a , b , EXTRA );
  ------------------
  |  |  307|  4.47k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18144|  4.47k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18144:18): [True: 0, False: 4.47k]
  |  Branch (18144:34): [True: 0, False: 4.47k]
  |  Branch (18144:57): [True: 0, False: 0]
  ------------------
18145|      0|                p->error_indicator = 1;
18146|      0|                p->level--;
18147|      0|                return NULL;
18148|      0|            }
18149|  4.47k|            goto done;
18150|  4.47k|        }
18151|  2.37M|        p->mark = _mark;
18152|  2.37M|        D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ',
18153|  2.37M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (assignment_expression | expression !':=' | starred_expression) for_if_clauses ')'"));
18154|  2.37M|    }
18155|  2.37M|    if (p->call_invalid_rules) { // invalid_comprehension
  ------------------
  |  Branch (18155:9): [True: 392k, False: 1.98M]
  ------------------
18156|   392k|        if (p->error_indicator) {
  ------------------
  |  Branch (18156:13): [True: 9.70k, False: 382k]
  ------------------
18157|  9.70k|            p->level--;
18158|  9.70k|            return NULL;
18159|  9.70k|        }
18160|   382k|        D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18161|   382k|        void *invalid_comprehension_var;
18162|   382k|        if (
18163|   382k|            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
  ------------------
  |  Branch (18163:13): [True: 0, False: 382k]
  ------------------
18164|   382k|        )
18165|      0|        {
18166|      0|            D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18167|      0|            _res = invalid_comprehension_var;
18168|      0|            goto done;
18169|      0|        }
18170|   382k|        p->mark = _mark;
18171|   382k|        D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ',
18172|   382k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
18173|   382k|    }
18174|  2.36M|    _res = NULL;
18175|  2.37M|  done:
18176|  2.37M|    p->level--;
18177|  2.37M|    return _res;
18178|  2.36M|}
parser.c:_tmp_89_rule:
32927|   221k|{
32928|   221k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   443k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32928:9): [True: 0, False: 221k]
  |  Branch (32928:35): [True: 0, False: 221k]
  ------------------
32929|      0|        _Pypegen_stack_overflow(p);
32930|      0|    }
32931|   221k|    if (p->error_indicator) {
  ------------------
  |  Branch (32931:9): [True: 0, False: 221k]
  ------------------
32932|      0|        p->level--;
32933|      0|        return NULL;
32934|      0|    }
32935|   221k|    void * _res = NULL;
32936|   221k|    int _mark = p->mark;
32937|   221k|    { // assignment_expression
32938|   221k|        if (p->error_indicator) {
  ------------------
  |  Branch (32938:13): [True: 0, False: 221k]
  ------------------
32939|      0|            p->level--;
32940|      0|            return NULL;
32941|      0|        }
32942|   221k|        D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
32943|   221k|        expr_ty assignment_expression_var;
32944|   221k|        if (
32945|   221k|            (assignment_expression_var = assignment_expression_rule(p))  // assignment_expression
  ------------------
  |  Branch (32945:13): [True: 626, False: 221k]
  ------------------
32946|   221k|        )
32947|    626|        {
32948|    626|            D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
32949|    626|            _res = assignment_expression_var;
32950|    626|            goto done;
32951|    626|        }
32952|   221k|        p->mark = _mark;
32953|   221k|        D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ',
32954|   221k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression"));
32955|   221k|    }
32956|      0|    { // expression !':='
32957|   221k|        if (p->error_indicator) {
  ------------------
  |  Branch (32957:13): [True: 469, False: 220k]
  ------------------
32958|    469|            p->level--;
32959|    469|            return NULL;
32960|    469|        }
32961|   220k|        D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
32962|   220k|        expr_ty expression_var;
32963|   220k|        if (
32964|   220k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (32964:13): [True: 143k, False: 76.9k]
  ------------------
32965|   143k|            &&
32966|   143k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53)  // token=':='
  ------------------
  |  Branch (32966:13): [True: 143k, False: 253]
  ------------------
32967|   220k|        )
32968|   143k|        {
32969|   143k|            D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='"));
32970|   143k|            _res = expression_var;
32971|   143k|            goto done;
32972|   143k|        }
32973|  77.1k|        p->mark = _mark;
32974|  77.1k|        D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ',
32975|  77.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='"));
32976|  77.1k|    }
32977|      0|    { // starred_expression
32978|  77.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (32978:13): [True: 12.4k, False: 64.7k]
  ------------------
32979|  12.4k|            p->level--;
32980|  12.4k|            return NULL;
32981|  12.4k|        }
32982|  64.7k|        D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
32983|  64.7k|        expr_ty starred_expression_var;
32984|  64.7k|        if (
32985|  64.7k|            (starred_expression_var = starred_expression_rule(p))  // starred_expression
  ------------------
  |  Branch (32985:13): [True: 5.46k, False: 59.2k]
  ------------------
32986|  64.7k|        )
32987|  5.46k|        {
32988|  5.46k|            D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
32989|  5.46k|            _res = starred_expression_var;
32990|  5.46k|            goto done;
32991|  5.46k|        }
32992|  59.2k|        p->mark = _mark;
32993|  59.2k|        D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ',
32994|  59.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
32995|  59.2k|    }
32996|  59.2k|    _res = NULL;
32997|   208k|  done:
32998|   208k|    p->level--;
32999|   208k|    return _res;
33000|  59.2k|}
parser.c:starred_expression_rule:
18540|   235k|{
18541|   235k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   471k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18541:9): [True: 0, False: 235k]
  |  Branch (18541:35): [True: 0, False: 235k]
  ------------------
18542|      0|        _Pypegen_stack_overflow(p);
18543|      0|    }
18544|   235k|    if (p->error_indicator) {
  ------------------
  |  Branch (18544:9): [True: 0, False: 235k]
  ------------------
18545|      0|        p->level--;
18546|      0|        return NULL;
18547|      0|    }
18548|   235k|    expr_ty _res = NULL;
18549|   235k|    int _mark = p->mark;
18550|   235k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18550:9): [True: 16.4k, False: 219k]
  |  Branch (18550:31): [True: 15, False: 16.4k]
  ------------------
18551|     15|        p->error_indicator = 1;
18552|     15|        p->level--;
18553|     15|        return NULL;
18554|     15|    }
18555|   235k|    int _start_lineno = p->tokens[_mark]->lineno;
18556|   235k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   235k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 235k]
  |  |  ------------------
  ------------------
18557|   235k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18558|   235k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   235k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 235k]
  |  |  ------------------
  ------------------
18559|   235k|    if (p->call_invalid_rules) { // invalid_starred_expression_unpacking
  ------------------
  |  Branch (18559:9): [True: 137k, False: 98.6k]
  ------------------
18560|   137k|        if (p->error_indicator) {
  ------------------
  |  Branch (18560:13): [True: 0, False: 137k]
  ------------------
18561|      0|            p->level--;
18562|      0|            return NULL;
18563|      0|        }
18564|   137k|        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking"));
18565|   137k|        void *invalid_starred_expression_unpacking_var;
18566|   137k|        if (
18567|   137k|            (invalid_starred_expression_unpacking_var = invalid_starred_expression_unpacking_rule(p))  // invalid_starred_expression_unpacking
  ------------------
  |  Branch (18567:13): [True: 0, False: 137k]
  ------------------
18568|   137k|        )
18569|      0|        {
18570|      0|            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking"));
18571|      0|            _res = invalid_starred_expression_unpacking_var;
18572|      0|            goto done;
18573|      0|        }
18574|   137k|        p->mark = _mark;
18575|   137k|        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
18576|   137k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_starred_expression_unpacking"));
18577|   137k|    }
18578|   235k|    { // '*' expression
18579|   235k|        if (p->error_indicator) {
  ------------------
  |  Branch (18579:13): [True: 2.54k, False: 233k]
  ------------------
18580|  2.54k|            p->level--;
18581|  2.54k|            return NULL;
18582|  2.54k|        }
18583|   233k|        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression"));
18584|   233k|        Token * _literal;
18585|   233k|        expr_ty a;
18586|   233k|        if (
18587|   233k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (18587:13): [True: 22.9k, False: 210k]
  ------------------
18588|  22.9k|            &&
18589|  22.9k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (18589:13): [True: 22.1k, False: 826]
  ------------------
18590|   233k|        )
18591|  22.1k|        {
18592|  22.1k|            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression"));
18593|  22.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18594|  22.1k|            if (_token == NULL) {
  ------------------
  |  Branch (18594:17): [True: 0, False: 22.1k]
  ------------------
18595|      0|                p->level--;
18596|      0|                return NULL;
18597|      0|            }
18598|  22.1k|            int _end_lineno = _token->end_lineno;
18599|  22.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  22.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 22.1k]
  |  |  ------------------
  ------------------
18600|  22.1k|            int _end_col_offset = _token->end_col_offset;
18601|  22.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  22.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 22.1k]
  |  |  ------------------
  ------------------
18602|  22.1k|            _res = _PyAST_Starred ( a , Load , EXTRA );
  ------------------
  |  |  307|  22.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18603|  22.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18603:18): [True: 0, False: 22.1k]
  |  Branch (18603:34): [True: 0, False: 22.1k]
  |  Branch (18603:57): [True: 0, False: 0]
  ------------------
18604|      0|                p->error_indicator = 1;
18605|      0|                p->level--;
18606|      0|                return NULL;
18607|      0|            }
18608|  22.1k|            goto done;
18609|  22.1k|        }
18610|   210k|        p->mark = _mark;
18611|   210k|        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
18612|   210k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression"));
18613|   210k|    }
18614|   210k|    if (p->call_invalid_rules) { // invalid_starred_expression
  ------------------
  |  Branch (18614:9): [True: 123k, False: 87.0k]
  ------------------
18615|   123k|        if (p->error_indicator) {
  ------------------
  |  Branch (18615:13): [True: 0, False: 123k]
  ------------------
18616|      0|            p->level--;
18617|      0|            return NULL;
18618|      0|        }
18619|   123k|        D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression"));
18620|   123k|        void *invalid_starred_expression_var;
18621|   123k|        if (
18622|   123k|            (invalid_starred_expression_var = invalid_starred_expression_rule(p))  // invalid_starred_expression
  ------------------
  |  Branch (18622:13): [True: 0, False: 123k]
  ------------------
18623|   123k|        )
18624|      0|        {
18625|      0|            D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression"));
18626|      0|            _res = invalid_starred_expression_var;
18627|      0|            goto done;
18628|      0|        }
18629|   123k|        p->mark = _mark;
18630|   123k|        D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
18631|   123k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_starred_expression"));
18632|   123k|    }
18633|   210k|    _res = NULL;
18634|   233k|  done:
18635|   233k|    p->level--;
18636|   233k|    return _res;
18637|   210k|}
parser.c:invalid_starred_expression_unpacking_rule:
25901|   203k|{
25902|   203k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   407k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25902:9): [True: 0, False: 203k]
  |  Branch (25902:35): [True: 0, False: 203k]
  ------------------
25903|      0|        _Pypegen_stack_overflow(p);
25904|      0|    }
25905|   203k|    if (p->error_indicator) {
  ------------------
  |  Branch (25905:9): [True: 0, False: 203k]
  ------------------
25906|      0|        p->level--;
25907|      0|        return NULL;
25908|      0|    }
25909|   203k|    void * _res = NULL;
25910|   203k|    int _mark = p->mark;
25911|   203k|    { // '*' if_expression
25912|   203k|        if (p->error_indicator) {
  ------------------
  |  Branch (25912:13): [True: 0, False: 203k]
  ------------------
25913|      0|            p->level--;
25914|      0|            return NULL;
25915|      0|        }
25916|   203k|        D(fprintf(stderr, "%*c> invalid_starred_expression_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' if_expression"));
25917|   203k|        Token * a;
25918|   203k|        expr_ty b;
25919|   203k|        if (
25920|   203k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (25920:13): [True: 14.9k, False: 188k]
  ------------------
25921|  14.9k|            &&
25922|  14.9k|            (b = if_expression_rule(p))  // if_expression
  ------------------
  |  Branch (25922:13): [True: 1, False: 14.9k]
  ------------------
25923|   203k|        )
25924|      1|        {
25925|      1|            D(fprintf(stderr, "%*c+ invalid_starred_expression_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' if_expression"));
25926|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid starred expression. Did you forget to wrap the conditional expression in parentheses?" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25927|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25927:18): [True: 1, False: 0]
  |  Branch (25927:34): [True: 0, False: 0]
  |  Branch (25927:57): [True: 1, False: 0]
  ------------------
25928|      1|                p->error_indicator = 1;
25929|      1|                p->level--;
25930|      1|                return NULL;
25931|      1|            }
25932|      0|            goto done;
25933|      1|        }
25934|   203k|        p->mark = _mark;
25935|   203k|        D(fprintf(stderr, "%*c%s invalid_starred_expression_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25936|   203k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' if_expression"));
25937|   203k|    }
25938|      0|    { // '*' expression '=' expression
25939|   203k|        if (p->error_indicator) {
  ------------------
  |  Branch (25939:13): [True: 2.46k, False: 201k]
  ------------------
25940|  2.46k|            p->level--;
25941|  2.46k|            return NULL;
25942|  2.46k|        }
25943|   201k|        D(fprintf(stderr, "%*c> invalid_starred_expression_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression '=' expression"));
25944|   201k|        Token * _literal;
25945|   201k|        Token * a;
25946|   201k|        expr_ty b;
25947|   201k|        expr_ty expression_var;
25948|   201k|        if (
25949|   201k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (25949:13): [True: 12.5k, False: 188k]
  ------------------
25950|  12.5k|            &&
25951|  12.5k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (25951:13): [True: 11.8k, False: 626]
  ------------------
25952|  11.8k|            &&
25953|  11.8k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (25953:13): [True: 433, False: 11.4k]
  ------------------
25954|    433|            &&
25955|    433|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (25955:13): [True: 4, False: 429]
  ------------------
25956|   201k|        )
25957|      4|        {
25958|      4|            D(fprintf(stderr, "%*c+ invalid_starred_expression_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression '=' expression"));
25959|      4|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to iterable argument unpacking" );
  ------------------
  |  |  237|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25960|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25960:18): [True: 4, False: 0]
  |  Branch (25960:34): [True: 0, False: 0]
  |  Branch (25960:57): [True: 4, False: 0]
  ------------------
25961|      4|                p->error_indicator = 1;
25962|      4|                p->level--;
25963|      4|                return NULL;
25964|      4|            }
25965|      0|            goto done;
25966|      4|        }
25967|   201k|        p->mark = _mark;
25968|   201k|        D(fprintf(stderr, "%*c%s invalid_starred_expression_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25969|   201k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression '=' expression"));
25970|   201k|    }
25971|   201k|    _res = NULL;
25972|   201k|  done:
25973|   201k|    p->level--;
25974|   201k|    return _res;
25975|   201k|}
parser.c:if_expression_rule:
11689|  1.05M|{
11690|  1.05M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.10M|#  define MAXSTACK 6000
  ------------------
  |  Branch (11690:9): [True: 1, False: 1.05M]
  |  Branch (11690:35): [True: 0, False: 1.05M]
  ------------------
11691|      1|        _Pypegen_stack_overflow(p);
11692|      1|    }
11693|  1.05M|    if (p->error_indicator) {
  ------------------
  |  Branch (11693:9): [True: 1, False: 1.05M]
  ------------------
11694|      1|        p->level--;
11695|      1|        return NULL;
11696|      1|    }
11697|  1.05M|    expr_ty _res = NULL;
11698|  1.05M|    int _mark = p->mark;
11699|  1.05M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (11699:9): [True: 4.95k, False: 1.04M]
  |  Branch (11699:31): [True: 10, False: 4.94k]
  ------------------
11700|     10|        p->error_indicator = 1;
11701|     10|        p->level--;
11702|     10|        return NULL;
11703|     10|    }
11704|  1.05M|    int _start_lineno = p->tokens[_mark]->lineno;
11705|  1.05M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.05M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.05M]
  |  |  ------------------
  ------------------
11706|  1.05M|    int _start_col_offset = p->tokens[_mark]->col_offset;
11707|  1.05M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.05M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.05M]
  |  |  ------------------
  ------------------
11708|  1.05M|    { // disjunction 'if' disjunction 'else' expression
11709|  1.05M|        if (p->error_indicator) {
  ------------------
  |  Branch (11709:13): [True: 0, False: 1.05M]
  ------------------
11710|      0|            p->level--;
11711|      0|            return NULL;
11712|      0|        }
11713|  1.05M|        D(fprintf(stderr, "%*c> if_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
11714|  1.05M|        Token * _keyword;
11715|  1.05M|        Token * _keyword_1;
11716|  1.05M|        expr_ty a;
11717|  1.05M|        expr_ty b;
11718|  1.05M|        expr_ty c;
11719|  1.05M|        if (
11720|  1.05M|            (a = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (11720:13): [True: 745k, False: 306k]
  ------------------
11721|   745k|            &&
11722|   745k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (11722:13): [True: 5.24k, False: 740k]
  ------------------
11723|  5.24k|            &&
11724|  5.24k|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (11724:13): [True: 4.21k, False: 1.03k]
  ------------------
11725|  4.21k|            &&
11726|  4.21k|            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (11726:13): [True: 3.68k, False: 536]
  ------------------
11727|  3.68k|            &&
11728|  3.68k|            (c = expression_rule(p))  // expression
  ------------------
  |  Branch (11728:13): [True: 3.31k, False: 368]
  ------------------
11729|  1.05M|        )
11730|  3.31k|        {
11731|  3.31k|            D(fprintf(stderr, "%*c+ if_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
11732|  3.31k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11733|  3.31k|            if (_token == NULL) {
  ------------------
  |  Branch (11733:17): [True: 0, False: 3.31k]
  ------------------
11734|      0|                p->level--;
11735|      0|                return NULL;
11736|      0|            }
11737|  3.31k|            int _end_lineno = _token->end_lineno;
11738|  3.31k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.31k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.31k]
  |  |  ------------------
  ------------------
11739|  3.31k|            int _end_col_offset = _token->end_col_offset;
11740|  3.31k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.31k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.31k]
  |  |  ------------------
  ------------------
11741|  3.31k|            _res = _PyAST_IfExp ( b , a , c , EXTRA );
  ------------------
  |  |  307|  3.31k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11742|  3.31k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11742:18): [True: 0, False: 3.31k]
  |  Branch (11742:34): [True: 0, False: 3.31k]
  |  Branch (11742:57): [True: 0, False: 0]
  ------------------
11743|      0|                p->error_indicator = 1;
11744|      0|                p->level--;
11745|      0|                return NULL;
11746|      0|            }
11747|  3.31k|            goto done;
11748|  3.31k|        }
11749|  1.04M|        p->mark = _mark;
11750|  1.04M|        D(fprintf(stderr, "%*c%s if_expression[%d-%d]: %s failed!\n", p->level, ' ',
11751|  1.04M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
11752|  1.04M|    }
11753|  1.04M|    _res = NULL;
11754|  1.05M|  done:
11755|  1.05M|    p->level--;
11756|  1.05M|    return _res;
11757|  1.04M|}
parser.c:disjunction_rule:
12363|  3.71M|{
12364|  3.71M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.43M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12364:9): [True: 1, False: 3.71M]
  |  Branch (12364:35): [True: 0, False: 3.71M]
  ------------------
12365|      1|        _Pypegen_stack_overflow(p);
12366|      1|    }
12367|  3.71M|    if (p->error_indicator) {
  ------------------
  |  Branch (12367:9): [True: 1, False: 3.71M]
  ------------------
12368|      1|        p->level--;
12369|      1|        return NULL;
12370|      1|    }
12371|  3.71M|    expr_ty _res = NULL;
12372|  3.71M|    if (_PyPegen_is_memoized(p, disjunction_type, &_res)) {
  ------------------
  |  |  207|  3.71M|#define disjunction_type 1118
  ------------------
  |  Branch (12372:9): [True: 2.55M, False: 1.16M]
  ------------------
12373|  2.55M|        p->level--;
12374|  2.55M|        return _res;
12375|  2.55M|    }
12376|  1.16M|    int _mark = p->mark;
12377|  1.16M|    expr_ty _prefix_2_result = NULL;
12378|  1.16M|    int _prefix_2_end = 0, _prefix_2_valid = 0;
12379|  1.16M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12379:9): [True: 0, False: 1.16M]
  |  Branch (12379:31): [True: 0, False: 0]
  ------------------
12380|      0|        p->error_indicator = 1;
12381|      0|        p->level--;
12382|      0|        return NULL;
12383|      0|    }
12384|  1.16M|    int _start_lineno = p->tokens[_mark]->lineno;
12385|  1.16M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.16M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.16M]
  |  |  ------------------
  ------------------
12386|  1.16M|    int _start_col_offset = p->tokens[_mark]->col_offset;
12387|  1.16M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.16M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.16M]
  |  |  ------------------
  ------------------
12388|  1.16M|    { // conjunction (('or' conjunction))+
12389|  1.16M|        if (p->error_indicator) {
  ------------------
  |  Branch (12389:13): [True: 0, False: 1.16M]
  ------------------
12390|      0|            p->level--;
12391|      0|            return NULL;
12392|      0|        }
12393|  1.16M|        D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
12394|  1.16M|        expr_ty a;
12395|  1.16M|        asdl_seq * b;
12396|  1.16M|        if (
12397|  1.16M|            (a = ((!p->call_invalid_rules && _prefix_2_valid) ? (p->mark = _prefix_2_end, _prefix_2_result) : (_prefix_2_result = conjunction_rule(p), _prefix_2_end = p->mark, _prefix_2_valid = 1, _prefix_2_result)))  // conjunction
  ------------------
  |  Branch (12397:13): [True: 769k, False: 393k]
  |  Branch (12397:20): [True: 919k, False: 243k]
  |  Branch (12397:46): [True: 0, False: 919k]
  ------------------
12398|   769k|            &&
12399|   769k|            (b = _loop1_59_rule(p))  // (('or' conjunction))+
  ------------------
  |  Branch (12399:13): [True: 3.57k, False: 765k]
  ------------------
12400|  1.16M|        )
12401|  3.57k|        {
12402|  3.57k|            D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+"));
12403|  3.57k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12404|  3.57k|            if (_token == NULL) {
  ------------------
  |  Branch (12404:17): [True: 0, False: 3.57k]
  ------------------
12405|      0|                p->level--;
12406|      0|                return NULL;
12407|      0|            }
12408|  3.57k|            int _end_lineno = _token->end_lineno;
12409|  3.57k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.57k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.57k]
  |  |  ------------------
  ------------------
12410|  3.57k|            int _end_col_offset = _token->end_col_offset;
12411|  3.57k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.57k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.57k]
  |  |  ------------------
  ------------------
12412|  3.57k|            _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
  ------------------
  |  |  271|  3.57k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
  ------------------
  |  |  307|  3.57k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
12413|  3.57k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12413:18): [True: 0, False: 3.57k]
  |  Branch (12413:34): [True: 0, False: 3.57k]
  |  Branch (12413:57): [True: 0, False: 0]
  ------------------
12414|      0|                p->error_indicator = 1;
12415|      0|                p->level--;
12416|      0|                return NULL;
12417|      0|            }
12418|  3.57k|            goto done;
12419|  3.57k|        }
12420|  1.15M|        p->mark = _mark;
12421|  1.15M|        D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ',
12422|  1.15M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction (('or' conjunction))+"));
12423|  1.15M|    }
12424|      0|    { // conjunction
12425|  1.15M|        if (p->error_indicator) {
  ------------------
  |  Branch (12425:13): [True: 50.2k, False: 1.10M]
  ------------------
12426|  50.2k|            p->level--;
12427|  50.2k|            return NULL;
12428|  50.2k|        }
12429|  1.10M|        D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction"));
12430|  1.10M|        expr_ty conjunction_var;
12431|  1.10M|        if (
12432|  1.10M|            (conjunction_var = ((!p->call_invalid_rules && _prefix_2_valid) ? (p->mark = _prefix_2_end, _prefix_2_result) : (_prefix_2_result = conjunction_rule(p), _prefix_2_end = p->mark, _prefix_2_valid = 1, _prefix_2_result)))  // conjunction
  ------------------
  |  Branch (12432:13): [True: 765k, False: 343k]
  |  Branch (12432:34): [True: 900k, False: 208k]
  |  Branch (12432:60): [True: 900k, False: 0]
  ------------------
12433|  1.10M|        )
12434|   765k|        {
12435|   765k|            D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction"));
12436|   765k|            _res = conjunction_var;
12437|   765k|            goto done;
12438|   765k|        }
12439|   343k|        p->mark = _mark;
12440|   343k|        D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ',
12441|   343k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction"));
12442|   343k|    }
12443|   343k|    _res = NULL;
12444|  1.11M|  done:
12445|  1.11M|    _PyPegen_insert_memo(p, _mark, disjunction_type, _res);
  ------------------
  |  |  207|  1.11M|#define disjunction_type 1118
  ------------------
12446|  1.11M|    p->level--;
12447|  1.11M|    return _res;
12448|   343k|}
parser.c:conjunction_rule:
12453|  1.37M|{
12454|  1.37M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.75M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12454:9): [True: 1, False: 1.37M]
  |  Branch (12454:35): [True: 0, False: 1.37M]
  ------------------
12455|      1|        _Pypegen_stack_overflow(p);
12456|      1|    }
12457|  1.37M|    if (p->error_indicator) {
  ------------------
  |  Branch (12457:9): [True: 1, False: 1.37M]
  ------------------
12458|      1|        p->level--;
12459|      1|        return NULL;
12460|      1|    }
12461|  1.37M|    expr_ty _res = NULL;
12462|  1.37M|    if (_PyPegen_is_memoized(p, conjunction_type, &_res)) {
  ------------------
  |  |  208|  1.37M|#define conjunction_type 1119
  ------------------
  |  Branch (12462:9): [True: 208k, False: 1.16M]
  ------------------
12463|   208k|        p->level--;
12464|   208k|        return _res;
12465|   208k|    }
12466|  1.16M|    int _mark = p->mark;
12467|  1.16M|    expr_ty _prefix_3_result = NULL;
12468|  1.16M|    int _prefix_3_end = 0, _prefix_3_valid = 0;
12469|  1.16M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12469:9): [True: 0, False: 1.16M]
  |  Branch (12469:31): [True: 0, False: 0]
  ------------------
12470|      0|        p->error_indicator = 1;
12471|      0|        p->level--;
12472|      0|        return NULL;
12473|      0|    }
12474|  1.16M|    int _start_lineno = p->tokens[_mark]->lineno;
12475|  1.16M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.16M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.16M]
  |  |  ------------------
  ------------------
12476|  1.16M|    int _start_col_offset = p->tokens[_mark]->col_offset;
12477|  1.16M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.16M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.16M]
  |  |  ------------------
  ------------------
12478|  1.16M|    { // inversion (('and' inversion))+
12479|  1.16M|        if (p->error_indicator) {
  ------------------
  |  Branch (12479:13): [True: 0, False: 1.16M]
  ------------------
12480|      0|            p->level--;
12481|      0|            return NULL;
12482|      0|        }
12483|  1.16M|        D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
12484|  1.16M|        expr_ty a;
12485|  1.16M|        asdl_seq * b;
12486|  1.16M|        if (
12487|  1.16M|            (a = ((!p->call_invalid_rules && _prefix_3_valid) ? (p->mark = _prefix_3_end, _prefix_3_result) : (_prefix_3_result = inversion_rule(p), _prefix_3_end = p->mark, _prefix_3_valid = 1, _prefix_3_result)))  // inversion
  ------------------
  |  Branch (12487:13): [True: 775k, False: 394k]
  |  Branch (12487:20): [True: 924k, False: 245k]
  |  Branch (12487:46): [True: 0, False: 924k]
  ------------------
12488|   775k|            &&
12489|   775k|            (b = _loop1_60_rule(p))  // (('and' inversion))+
  ------------------
  |  Branch (12489:13): [True: 2.43k, False: 772k]
  ------------------
12490|  1.16M|        )
12491|  2.43k|        {
12492|  2.43k|            D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+"));
12493|  2.43k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12494|  2.43k|            if (_token == NULL) {
  ------------------
  |  Branch (12494:17): [True: 0, False: 2.43k]
  ------------------
12495|      0|                p->level--;
12496|      0|                return NULL;
12497|      0|            }
12498|  2.43k|            int _end_lineno = _token->end_lineno;
12499|  2.43k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.43k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.43k]
  |  |  ------------------
  ------------------
12500|  2.43k|            int _end_col_offset = _token->end_col_offset;
12501|  2.43k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.43k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.43k]
  |  |  ------------------
  ------------------
12502|  2.43k|            _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
  ------------------
  |  |  271|  2.43k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA );
  ------------------
  |  |  307|  2.43k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
12503|  2.43k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12503:18): [True: 0, False: 2.43k]
  |  Branch (12503:34): [True: 0, False: 2.43k]
  |  Branch (12503:57): [True: 0, False: 0]
  ------------------
12504|      0|                p->error_indicator = 1;
12505|      0|                p->level--;
12506|      0|                return NULL;
12507|      0|            }
12508|  2.43k|            goto done;
12509|  2.43k|        }
12510|  1.16M|        p->mark = _mark;
12511|  1.16M|        D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ',
12512|  1.16M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion (('and' inversion))+"));
12513|  1.16M|    }
12514|      0|    { // inversion
12515|  1.16M|        if (p->error_indicator) {
  ------------------
  |  Branch (12515:13): [True: 50.2k, False: 1.11M]
  ------------------
12516|  50.2k|            p->level--;
12517|  50.2k|            return NULL;
12518|  50.2k|        }
12519|  1.11M|        D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion"));
12520|  1.11M|        expr_ty inversion_var;
12521|  1.11M|        if (
12522|  1.11M|            (inversion_var = ((!p->call_invalid_rules && _prefix_3_valid) ? (p->mark = _prefix_3_end, _prefix_3_result) : (_prefix_3_result = inversion_rule(p), _prefix_3_end = p->mark, _prefix_3_valid = 1, _prefix_3_result)))  // inversion
  ------------------
  |  Branch (12522:13): [True: 772k, False: 344k]
  |  Branch (12522:32): [True: 906k, False: 210k]
  |  Branch (12522:58): [True: 906k, False: 0]
  ------------------
12523|  1.11M|        )
12524|   772k|        {
12525|   772k|            D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion"));
12526|   772k|            _res = inversion_var;
12527|   772k|            goto done;
12528|   772k|        }
12529|   344k|        p->mark = _mark;
12530|   344k|        D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ',
12531|   344k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion"));
12532|   344k|    }
12533|   344k|    _res = NULL;
12534|  1.11M|  done:
12535|  1.11M|    _PyPegen_insert_memo(p, _mark, conjunction_type, _res);
  ------------------
  |  |  208|  1.11M|#define conjunction_type 1119
  ------------------
12536|  1.11M|    p->level--;
12537|  1.11M|    return _res;
12538|   344k|}
parser.c:inversion_rule:
12543|  1.38M|{
12544|  1.38M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.77M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12544:9): [True: 1, False: 1.38M]
  |  Branch (12544:35): [True: 0, False: 1.38M]
  ------------------
12545|      1|        _Pypegen_stack_overflow(p);
12546|      1|    }
12547|  1.38M|    if (p->error_indicator) {
  ------------------
  |  Branch (12547:9): [True: 1, False: 1.38M]
  ------------------
12548|      1|        p->level--;
12549|      1|        return NULL;
12550|      1|    }
12551|  1.38M|    expr_ty _res = NULL;
12552|  1.38M|    if (_PyPegen_is_memoized(p, inversion_type, &_res)) {
  ------------------
  |  |  209|  1.38M|#define inversion_type 1120
  ------------------
  |  Branch (12552:9): [True: 210k, False: 1.17M]
  ------------------
12553|   210k|        p->level--;
12554|   210k|        return _res;
12555|   210k|    }
12556|  1.17M|    int _mark = p->mark;
12557|  1.17M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12557:9): [True: 0, False: 1.17M]
  |  Branch (12557:31): [True: 0, False: 0]
  ------------------
12558|      0|        p->error_indicator = 1;
12559|      0|        p->level--;
12560|      0|        return NULL;
12561|      0|    }
12562|  1.17M|    int _start_lineno = p->tokens[_mark]->lineno;
12563|  1.17M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.17M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.17M]
  |  |  ------------------
  ------------------
12564|  1.17M|    int _start_col_offset = p->tokens[_mark]->col_offset;
12565|  1.17M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.17M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.17M]
  |  |  ------------------
  ------------------
12566|  1.17M|    { // 'not' inversion
12567|  1.17M|        if (p->error_indicator) {
  ------------------
  |  Branch (12567:13): [True: 0, False: 1.17M]
  ------------------
12568|      0|            p->level--;
12569|      0|            return NULL;
12570|      0|        }
12571|  1.17M|        D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
12572|  1.17M|        Token * _keyword;
12573|  1.17M|        expr_ty a;
12574|  1.17M|        if (
12575|  1.17M|            (_keyword = _PyPegen_expect_token(p, 721))  // token='not'
  ------------------
  |  Branch (12575:13): [True: 2.04k, False: 1.17M]
  ------------------
12576|  2.04k|            &&
12577|  2.04k|            (a = inversion_rule(p))  // inversion
  ------------------
  |  Branch (12577:13): [True: 1.71k, False: 328]
  ------------------
12578|  1.17M|        )
12579|  1.71k|        {
12580|  1.71k|            D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' inversion"));
12581|  1.71k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12582|  1.71k|            if (_token == NULL) {
  ------------------
  |  Branch (12582:17): [True: 0, False: 1.71k]
  ------------------
12583|      0|                p->level--;
12584|      0|                return NULL;
12585|      0|            }
12586|  1.71k|            int _end_lineno = _token->end_lineno;
12587|  1.71k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.71k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.71k]
  |  |  ------------------
  ------------------
12588|  1.71k|            int _end_col_offset = _token->end_col_offset;
12589|  1.71k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.71k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.71k]
  |  |  ------------------
  ------------------
12590|  1.71k|            _res = _PyAST_UnaryOp ( Not , a , EXTRA );
  ------------------
  |  |  307|  1.71k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
12591|  1.71k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12591:18): [True: 0, False: 1.71k]
  |  Branch (12591:34): [True: 0, False: 1.71k]
  |  Branch (12591:57): [True: 0, False: 0]
  ------------------
12592|      0|                p->error_indicator = 1;
12593|      0|                p->level--;
12594|      0|                return NULL;
12595|      0|            }
12596|  1.71k|            goto done;
12597|  1.71k|        }
12598|  1.17M|        p->mark = _mark;
12599|  1.17M|        D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ',
12600|  1.17M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' inversion"));
12601|  1.17M|    }
12602|      0|    { // comparison
12603|  1.17M|        if (p->error_indicator) {
  ------------------
  |  Branch (12603:13): [True: 177, False: 1.17M]
  ------------------
12604|    177|            p->level--;
12605|    177|            return NULL;
12606|    177|        }
12607|  1.17M|        D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "comparison"));
12608|  1.17M|        expr_ty comparison_var;
12609|  1.17M|        if (
12610|  1.17M|            (comparison_var = comparison_rule(p))  // comparison
  ------------------
  |  Branch (12610:13): [True: 782k, False: 394k]
  ------------------
12611|  1.17M|        )
12612|   782k|        {
12613|   782k|            D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "comparison"));
12614|   782k|            _res = comparison_var;
12615|   782k|            goto done;
12616|   782k|        }
12617|   394k|        p->mark = _mark;
12618|   394k|        D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ',
12619|   394k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "comparison"));
12620|   394k|    }
12621|   394k|    _res = NULL;
12622|  1.17M|  done:
12623|  1.17M|    _PyPegen_insert_memo(p, _mark, inversion_type, _res);
  ------------------
  |  |  209|  1.17M|#define inversion_type 1120
  ------------------
12624|  1.17M|    p->level--;
12625|  1.17M|    return _res;
12626|   394k|}
parser.c:comparison_rule:
12631|  1.17M|{
12632|  1.17M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.35M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12632:9): [True: 3, False: 1.17M]
  |  Branch (12632:35): [True: 0, False: 1.17M]
  ------------------
12633|      3|        _Pypegen_stack_overflow(p);
12634|      3|    }
12635|  1.17M|    if (p->error_indicator) {
  ------------------
  |  Branch (12635:9): [True: 3, False: 1.17M]
  ------------------
12636|      3|        p->level--;
12637|      3|        return NULL;
12638|      3|    }
12639|  1.17M|    expr_ty _res = NULL;
12640|  1.17M|    int _mark = p->mark;
12641|  1.17M|    expr_ty _prefix_4_result = NULL;
12642|  1.17M|    int _prefix_4_end = 0, _prefix_4_valid = 0;
12643|  1.17M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12643:9): [True: 0, False: 1.17M]
  |  Branch (12643:31): [True: 0, False: 0]
  ------------------
12644|      0|        p->error_indicator = 1;
12645|      0|        p->level--;
12646|      0|        return NULL;
12647|      0|    }
12648|  1.17M|    int _start_lineno = p->tokens[_mark]->lineno;
12649|  1.17M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.17M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.17M]
  |  |  ------------------
  ------------------
12650|  1.17M|    int _start_col_offset = p->tokens[_mark]->col_offset;
12651|  1.17M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.17M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.17M]
  |  |  ------------------
  ------------------
12652|  1.17M|    { // bitwise_or compare_op_bitwise_or_pair+
12653|  1.17M|        if (p->error_indicator) {
  ------------------
  |  Branch (12653:13): [True: 0, False: 1.17M]
  ------------------
12654|      0|            p->level--;
12655|      0|            return NULL;
12656|      0|        }
12657|  1.17M|        D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
12658|  1.17M|        expr_ty a;
12659|  1.17M|        asdl_seq * b;
12660|  1.17M|        if (
12661|  1.17M|            (a = ((!p->call_invalid_rules && _prefix_4_valid) ? (p->mark = _prefix_4_end, _prefix_4_result) : (_prefix_4_result = bitwise_or_rule(p), _prefix_4_end = p->mark, _prefix_4_valid = 1, _prefix_4_result)))  // bitwise_or
  ------------------
  |  Branch (12661:13): [True: 785k, False: 391k]
  |  Branch (12661:20): [True: 930k, False: 246k]
  |  Branch (12661:46): [True: 0, False: 930k]
  ------------------
12662|   785k|            &&
12663|   785k|            (b = _loop1_61_rule(p))  // compare_op_bitwise_or_pair+
  ------------------
  |  Branch (12663:13): [True: 32.6k, False: 752k]
  ------------------
12664|  1.17M|        )
12665|  32.6k|        {
12666|  32.6k|            D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
12667|  32.6k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12668|  32.6k|            if (_token == NULL) {
  ------------------
  |  Branch (12668:17): [True: 0, False: 32.6k]
  ------------------
12669|      0|                p->level--;
12670|      0|                return NULL;
12671|      0|            }
12672|  32.6k|            int _end_lineno = _token->end_lineno;
12673|  32.6k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  32.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 32.6k]
  |  |  ------------------
  ------------------
12674|  32.6k|            int _end_col_offset = _token->end_col_offset;
12675|  32.6k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  32.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 32.6k]
  |  |  ------------------
  ------------------
12676|  32.6k|            _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq* , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_exprs ( p , b ) ) , EXTRA );
  ------------------
  |  |  271|  32.6k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq* , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_exprs ( p , b ) ) , EXTRA );
  ------------------
  |  |  271|  32.6k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq* , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_exprs ( p , b ) ) , EXTRA );
  ------------------
  |  |  307|  32.6k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
12677|  32.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12677:18): [True: 0, False: 32.6k]
  |  Branch (12677:34): [True: 0, False: 32.6k]
  |  Branch (12677:57): [True: 0, False: 0]
  ------------------
12678|      0|                p->error_indicator = 1;
12679|      0|                p->level--;
12680|      0|                return NULL;
12681|      0|            }
12682|  32.6k|            goto done;
12683|  32.6k|        }
12684|  1.14M|        p->mark = _mark;
12685|  1.14M|        D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ',
12686|  1.14M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+"));
12687|  1.14M|    }
12688|      0|    { // bitwise_or
12689|  1.14M|        if (p->error_indicator) {
  ------------------
  |  Branch (12689:13): [True: 50.3k, False: 1.09M]
  ------------------
12690|  50.3k|            p->level--;
12691|  50.3k|            return NULL;
12692|  50.3k|        }
12693|  1.09M|        D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
12694|  1.09M|        expr_ty bitwise_or_var;
12695|  1.09M|        if (
12696|  1.09M|            (bitwise_or_var = ((!p->call_invalid_rules && _prefix_4_valid) ? (p->mark = _prefix_4_end, _prefix_4_result) : (_prefix_4_result = bitwise_or_rule(p), _prefix_4_end = p->mark, _prefix_4_valid = 1, _prefix_4_result)))  // bitwise_or
  ------------------
  |  Branch (12696:13): [True: 749k, False: 344k]
  |  Branch (12696:33): [True: 887k, False: 206k]
  |  Branch (12696:59): [True: 887k, False: 0]
  ------------------
12697|  1.09M|        )
12698|   749k|        {
12699|   749k|            D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or"));
12700|   749k|            _res = bitwise_or_var;
12701|   749k|            goto done;
12702|   749k|        }
12703|   344k|        p->mark = _mark;
12704|   344k|        D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ',
12705|   344k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or"));
12706|   344k|    }
12707|   344k|    _res = NULL;
12708|  1.12M|  done:
12709|  1.12M|    p->level--;
12710|  1.12M|    return _res;
12711|   344k|}
parser.c:_loop1_61_rule:
31113|   785k|{
31114|   785k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.57M|#  define MAXSTACK 6000
  ------------------
  |  Branch (31114:9): [True: 0, False: 785k]
  |  Branch (31114:35): [True: 0, False: 785k]
  ------------------
31115|      0|        _Pypegen_stack_overflow(p);
31116|      0|    }
31117|   785k|    if (p->error_indicator) {
  ------------------
  |  Branch (31117:9): [True: 0, False: 785k]
  ------------------
31118|      0|        p->level--;
31119|      0|        return NULL;
31120|      0|    }
31121|   785k|    void *_res = NULL;
31122|   785k|    int _mark = p->mark;
31123|   785k|    void **_children = PyMem_Malloc(sizeof(void *));
31124|   785k|    if (!_children) {
  ------------------
  |  Branch (31124:9): [True: 0, False: 785k]
  ------------------
31125|      0|        p->error_indicator = 1;
31126|      0|        PyErr_NoMemory();
31127|      0|        p->level--;
31128|      0|        return NULL;
31129|      0|    }
31130|   785k|    Py_ssize_t _children_capacity = 1;
31131|   785k|    Py_ssize_t _n = 0;
31132|   785k|    { // compare_op_bitwise_or_pair
31133|   785k|        if (p->error_indicator) {
  ------------------
  |  Branch (31133:13): [True: 0, False: 785k]
  ------------------
31134|      0|            p->level--;
31135|      0|            return NULL;
31136|      0|        }
31137|   785k|        D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair"));
31138|   785k|        CmpopExprPair* compare_op_bitwise_or_pair_var;
31139|   785k|        while (
31140|   887k|            (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p))  // compare_op_bitwise_or_pair
  ------------------
  |  Branch (31140:13): [True: 102k, False: 785k]
  ------------------
31141|   785k|        )
31142|   102k|        {
31143|   102k|            _res = compare_op_bitwise_or_pair_var;
31144|   102k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31144:17): [True: 25.3k, False: 77.0k]
  ------------------
31145|  25.3k|                _children_capacity *= 2;
31146|  25.3k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31147|  25.3k|                if (!_new_children) {
  ------------------
  |  Branch (31147:21): [True: 0, False: 25.3k]
  ------------------
31148|      0|                    PyMem_Free(_children);
31149|      0|                    p->error_indicator = 1;
31150|      0|                    PyErr_NoMemory();
31151|      0|                    p->level--;
31152|      0|                    return NULL;
31153|      0|                }
31154|  25.3k|                _children = _new_children;
31155|  25.3k|            }
31156|   102k|            _children[_n++] = _res;
31157|   102k|            _mark = p->mark;
31158|   102k|        }
31159|   785k|        p->mark = _mark;
31160|   785k|        D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ',
31161|   785k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair"));
31162|   785k|    }
31163|   785k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (31163:9): [True: 752k, False: 33.3k]
  |  Branch (31163:20): [True: 703, False: 32.6k]
  ------------------
31164|   752k|        PyMem_Free(_children);
31165|   752k|        p->level--;
31166|   752k|        return NULL;
31167|   752k|    }
31168|  32.6k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31169|  32.6k|    if (!_seq) {
  ------------------
  |  Branch (31169:9): [True: 0, False: 32.6k]
  ------------------
31170|      0|        PyMem_Free(_children);
31171|      0|        p->error_indicator = 1;
31172|      0|        PyErr_NoMemory();
31173|      0|        p->level--;
31174|      0|        return NULL;
31175|      0|    }
31176|   134k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|   101k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   134k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31176:28): [True: 101k, False: 32.6k]
  ------------------
31177|  32.6k|    PyMem_Free(_children);
31178|  32.6k|    p->level--;
31179|  32.6k|    return _seq;
31180|  32.6k|}
parser.c:compare_op_bitwise_or_pair_rule:
12727|   887k|{
12728|   887k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.77M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12728:9): [True: 0, False: 887k]
  |  Branch (12728:35): [True: 0, False: 887k]
  ------------------
12729|      0|        _Pypegen_stack_overflow(p);
12730|      0|    }
12731|   887k|    if (p->error_indicator) {
  ------------------
  |  Branch (12731:9): [True: 0, False: 887k]
  ------------------
12732|      0|        p->level--;
12733|      0|        return NULL;
12734|      0|    }
12735|   887k|    CmpopExprPair* _res = NULL;
12736|   887k|    int _mark = p->mark;
12737|   887k|    { // '==' bitwise_or
12738|   887k|        if (p->error_indicator) {
  ------------------
  |  Branch (12738:13): [True: 0, False: 887k]
  ------------------
12739|      0|            p->level--;
12740|      0|            return NULL;
12741|      0|        }
12742|   887k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
12743|   887k|        Token * _literal;
12744|   887k|        expr_ty a;
12745|   887k|        if (
12746|   887k|            (_literal = _PyPegen_expect_token(p, 27))  // token='=='
  ------------------
  |  Branch (12746:13): [True: 3.02k, False: 884k]
  ------------------
12747|  3.02k|            &&
12748|  3.02k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12748:13): [True: 2.89k, False: 132]
  ------------------
12749|   887k|        )
12750|  2.89k|        {
12751|  2.89k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or"));
12752|  2.89k|            _res = _PyPegen_cmpop_expr_pair ( p , Eq , a );
12753|  2.89k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12753:18): [True: 0, False: 2.89k]
  |  Branch (12753:34): [True: 0, False: 2.89k]
  |  Branch (12753:57): [True: 0, False: 0]
  ------------------
12754|      0|                p->error_indicator = 1;
12755|      0|                p->level--;
12756|      0|                return NULL;
12757|      0|            }
12758|  2.89k|            goto done;
12759|  2.89k|        }
12760|   885k|        p->mark = _mark;
12761|   885k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12762|   885k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'==' bitwise_or"));
12763|   885k|    }
12764|      0|    { // ('!=') bitwise_or
12765|   885k|        if (p->error_indicator) {
  ------------------
  |  Branch (12765:13): [True: 99, False: 884k]
  ------------------
12766|     99|            p->level--;
12767|     99|            return NULL;
12768|     99|        }
12769|   884k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
12770|   884k|        void *_tmp_62_var;
12771|   884k|        expr_ty a;
12772|   884k|        if (
12773|   884k|            (_tmp_62_var = _tmp_62_rule(p))  // '!='
  ------------------
  |  Branch (12773:13): [True: 1.08k, False: 883k]
  ------------------
12774|  1.08k|            &&
12775|  1.08k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12775:13): [True: 697, False: 391]
  ------------------
12776|   884k|        )
12777|    697|        {
12778|    697|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or"));
12779|    697|            _res = _PyPegen_cmpop_expr_pair ( p , NotEq , a );
12780|    697|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12780:18): [True: 0, False: 697]
  |  Branch (12780:34): [True: 0, False: 697]
  |  Branch (12780:57): [True: 0, False: 0]
  ------------------
12781|      0|                p->error_indicator = 1;
12782|      0|                p->level--;
12783|      0|                return NULL;
12784|      0|            }
12785|    697|            goto done;
12786|    697|        }
12787|   884k|        p->mark = _mark;
12788|   884k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12789|   884k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('!=') bitwise_or"));
12790|   884k|    }
12791|      0|    { // '<=' bitwise_or
12792|   884k|        if (p->error_indicator) {
  ------------------
  |  Branch (12792:13): [True: 207, False: 884k]
  ------------------
12793|    207|            p->level--;
12794|    207|            return NULL;
12795|    207|        }
12796|   884k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
12797|   884k|        Token * _literal;
12798|   884k|        expr_ty a;
12799|   884k|        if (
12800|   884k|            (_literal = _PyPegen_expect_token(p, 29))  // token='<='
  ------------------
  |  Branch (12800:13): [True: 4.47k, False: 879k]
  ------------------
12801|  4.47k|            &&
12802|  4.47k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12802:13): [True: 4.21k, False: 261]
  ------------------
12803|   884k|        )
12804|  4.21k|        {
12805|  4.21k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or"));
12806|  4.21k|            _res = _PyPegen_cmpop_expr_pair ( p , LtE , a );
12807|  4.21k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12807:18): [True: 0, False: 4.21k]
  |  Branch (12807:34): [True: 0, False: 4.21k]
  |  Branch (12807:57): [True: 0, False: 0]
  ------------------
12808|      0|                p->error_indicator = 1;
12809|      0|                p->level--;
12810|      0|                return NULL;
12811|      0|            }
12812|  4.21k|            goto done;
12813|  4.21k|        }
12814|   879k|        p->mark = _mark;
12815|   879k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12816|   879k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<=' bitwise_or"));
12817|   879k|    }
12818|   879k|    if (p->call_invalid_rules) { // invalid_noteq
  ------------------
  |  Branch (12818:9): [True: 156k, False: 723k]
  ------------------
12819|   156k|        if (p->error_indicator) {
  ------------------
  |  Branch (12819:13): [True: 92, False: 155k]
  ------------------
12820|     92|            p->level--;
12821|     92|            return NULL;
12822|     92|        }
12823|   155k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_noteq"));
12824|   155k|        void *invalid_noteq_var;
12825|   155k|        if (
12826|   155k|            (invalid_noteq_var = invalid_noteq_rule(p))  // invalid_noteq
  ------------------
  |  Branch (12826:13): [True: 0, False: 155k]
  ------------------
12827|   155k|        )
12828|      0|        {
12829|      0|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_noteq"));
12830|      0|            _res = invalid_noteq_var;
12831|      0|            goto done;
12832|      0|        }
12833|   155k|        p->mark = _mark;
12834|   155k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12835|   155k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_noteq"));
12836|   155k|    }
12837|   879k|    { // '<' bitwise_or
12838|   879k|        if (p->error_indicator) {
  ------------------
  |  Branch (12838:13): [True: 158, False: 879k]
  ------------------
12839|    158|            p->level--;
12840|    158|            return NULL;
12841|    158|        }
12842|   879k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
12843|   879k|        Token * _literal;
12844|   879k|        expr_ty a;
12845|   879k|        if (
12846|   879k|            (_literal = _PyPegen_expect_token(p, 20))  // token='<'
  ------------------
  |  Branch (12846:13): [True: 40.5k, False: 838k]
  ------------------
12847|  40.5k|            &&
12848|  40.5k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12848:13): [True: 39.7k, False: 783]
  ------------------
12849|   879k|        )
12850|  39.7k|        {
12851|  39.7k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or"));
12852|  39.7k|            _res = _PyPegen_cmpop_expr_pair ( p , Lt , a );
12853|  39.7k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12853:18): [True: 0, False: 39.7k]
  |  Branch (12853:34): [True: 0, False: 39.7k]
  |  Branch (12853:57): [True: 0, False: 0]
  ------------------
12854|      0|                p->error_indicator = 1;
12855|      0|                p->level--;
12856|      0|                return NULL;
12857|      0|            }
12858|  39.7k|            goto done;
12859|  39.7k|        }
12860|   839k|        p->mark = _mark;
12861|   839k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12862|   839k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<' bitwise_or"));
12863|   839k|    }
12864|      0|    { // '>=' bitwise_or
12865|   839k|        if (p->error_indicator) {
  ------------------
  |  Branch (12865:13): [True: 511, False: 839k]
  ------------------
12866|    511|            p->level--;
12867|    511|            return NULL;
12868|    511|        }
12869|   839k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
12870|   839k|        Token * _literal;
12871|   839k|        expr_ty a;
12872|   839k|        if (
12873|   839k|            (_literal = _PyPegen_expect_token(p, 30))  // token='>='
  ------------------
  |  Branch (12873:13): [True: 5.41k, False: 833k]
  ------------------
12874|  5.41k|            &&
12875|  5.41k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12875:13): [True: 4.95k, False: 458]
  ------------------
12876|   839k|        )
12877|  4.95k|        {
12878|  4.95k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or"));
12879|  4.95k|            _res = _PyPegen_cmpop_expr_pair ( p , GtE , a );
12880|  4.95k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12880:18): [True: 0, False: 4.95k]
  |  Branch (12880:34): [True: 0, False: 4.95k]
  |  Branch (12880:57): [True: 0, False: 0]
  ------------------
12881|      0|                p->error_indicator = 1;
12882|      0|                p->level--;
12883|      0|                return NULL;
12884|      0|            }
12885|  4.95k|            goto done;
12886|  4.95k|        }
12887|   834k|        p->mark = _mark;
12888|   834k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12889|   834k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>=' bitwise_or"));
12890|   834k|    }
12891|      0|    { // '>' bitwise_or
12892|   834k|        if (p->error_indicator) {
  ------------------
  |  Branch (12892:13): [True: 325, False: 833k]
  ------------------
12893|    325|            p->level--;
12894|    325|            return NULL;
12895|    325|        }
12896|   833k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
12897|   833k|        Token * _literal;
12898|   833k|        expr_ty a;
12899|   833k|        if (
12900|   833k|            (_literal = _PyPegen_expect_token(p, 21))  // token='>'
  ------------------
  |  Branch (12900:13): [True: 39.6k, False: 794k]
  ------------------
12901|  39.6k|            &&
12902|  39.6k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12902:13): [True: 38.2k, False: 1.39k]
  ------------------
12903|   833k|        )
12904|  38.2k|        {
12905|  38.2k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or"));
12906|  38.2k|            _res = _PyPegen_cmpop_expr_pair ( p , Gt , a );
12907|  38.2k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12907:18): [True: 0, False: 38.2k]
  |  Branch (12907:34): [True: 0, False: 38.2k]
  |  Branch (12907:57): [True: 0, False: 0]
  ------------------
12908|      0|                p->error_indicator = 1;
12909|      0|                p->level--;
12910|      0|                return NULL;
12911|      0|            }
12912|  38.2k|            goto done;
12913|  38.2k|        }
12914|   795k|        p->mark = _mark;
12915|   795k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12916|   795k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>' bitwise_or"));
12917|   795k|    }
12918|      0|    { // 'not' 'in' bitwise_or
12919|   795k|        if (p->error_indicator) {
  ------------------
  |  Branch (12919:13): [True: 1.18k, False: 794k]
  ------------------
12920|  1.18k|            p->level--;
12921|  1.18k|            return NULL;
12922|  1.18k|        }
12923|   794k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
12924|   794k|        Token * _keyword;
12925|   794k|        Token * _keyword_1;
12926|   794k|        expr_ty a;
12927|   794k|        if (
12928|   794k|            (_keyword = _PyPegen_expect_token(p, 721))  // token='not'
  ------------------
  |  Branch (12928:13): [True: 391, False: 794k]
  ------------------
12929|    391|            &&
12930|    391|            (_keyword_1 = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (12930:13): [True: 188, False: 203]
  ------------------
12931|    188|            &&
12932|    188|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12932:13): [True: 94, False: 94]
  ------------------
12933|   794k|        )
12934|     94|        {
12935|     94|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or"));
12936|     94|            _res = _PyPegen_cmpop_expr_pair ( p , NotIn , a );
12937|     94|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12937:18): [True: 0, False: 94]
  |  Branch (12937:34): [True: 0, False: 94]
  |  Branch (12937:57): [True: 0, False: 0]
  ------------------
12938|      0|                p->error_indicator = 1;
12939|      0|                p->level--;
12940|      0|                return NULL;
12941|      0|            }
12942|     94|            goto done;
12943|     94|        }
12944|   794k|        p->mark = _mark;
12945|   794k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12946|   794k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' 'in' bitwise_or"));
12947|   794k|    }
12948|      0|    { // 'in' bitwise_or
12949|   794k|        if (p->error_indicator) {
  ------------------
  |  Branch (12949:13): [True: 48, False: 794k]
  ------------------
12950|     48|            p->level--;
12951|     48|            return NULL;
12952|     48|        }
12953|   794k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
12954|   794k|        Token * _keyword;
12955|   794k|        expr_ty a;
12956|   794k|        if (
12957|   794k|            (_keyword = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (12957:13): [True: 6.54k, False: 787k]
  ------------------
12958|  6.54k|            &&
12959|  6.54k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12959:13): [True: 6.20k, False: 334]
  ------------------
12960|   794k|        )
12961|  6.20k|        {
12962|  6.20k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or"));
12963|  6.20k|            _res = _PyPegen_cmpop_expr_pair ( p , In , a );
12964|  6.20k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12964:18): [True: 0, False: 6.20k]
  |  Branch (12964:34): [True: 0, False: 6.20k]
  |  Branch (12964:57): [True: 0, False: 0]
  ------------------
12965|      0|                p->error_indicator = 1;
12966|      0|                p->level--;
12967|      0|                return NULL;
12968|      0|            }
12969|  6.20k|            goto done;
12970|  6.20k|        }
12971|   788k|        p->mark = _mark;
12972|   788k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
12973|   788k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'in' bitwise_or"));
12974|   788k|    }
12975|      0|    { // 'is' 'not' bitwise_or
12976|   788k|        if (p->error_indicator) {
  ------------------
  |  Branch (12976:13): [True: 117, False: 788k]
  ------------------
12977|    117|            p->level--;
12978|    117|            return NULL;
12979|    117|        }
12980|   788k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
12981|   788k|        Token * _keyword;
12982|   788k|        Token * _keyword_1;
12983|   788k|        expr_ty a;
12984|   788k|        if (
12985|   788k|            (_keyword = _PyPegen_expect_token(p, 597))  // token='is'
  ------------------
  |  Branch (12985:13): [True: 5.96k, False: 782k]
  ------------------
12986|  5.96k|            &&
12987|  5.96k|            (_keyword_1 = _PyPegen_expect_token(p, 721))  // token='not'
  ------------------
  |  Branch (12987:13): [True: 228, False: 5.73k]
  ------------------
12988|    228|            &&
12989|    228|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12989:13): [True: 37, False: 191]
  ------------------
12990|   788k|        )
12991|     37|        {
12992|     37|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or"));
12993|     37|            _res = _PyPegen_cmpop_expr_pair ( p , IsNot , a );
12994|     37|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12994:18): [True: 0, False: 37]
  |  Branch (12994:34): [True: 0, False: 37]
  |  Branch (12994:57): [True: 0, False: 0]
  ------------------
12995|      0|                p->error_indicator = 1;
12996|      0|                p->level--;
12997|      0|                return NULL;
12998|      0|            }
12999|     37|            goto done;
13000|     37|        }
13001|   788k|        p->mark = _mark;
13002|   788k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
13003|   788k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' 'not' bitwise_or"));
13004|   788k|    }
13005|      0|    { // 'is' bitwise_or
13006|   788k|        if (p->error_indicator) {
  ------------------
  |  Branch (13006:13): [True: 81, False: 788k]
  ------------------
13007|     81|            p->level--;
13008|     81|            return NULL;
13009|     81|        }
13010|   788k|        D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
13011|   788k|        Token * _keyword;
13012|   788k|        expr_ty a;
13013|   788k|        if (
13014|   788k|            (_keyword = _PyPegen_expect_token(p, 597))  // token='is'
  ------------------
  |  Branch (13014:13): [True: 5.84k, False: 782k]
  ------------------
13015|  5.84k|            &&
13016|  5.84k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (13016:13): [True: 5.36k, False: 485]
  ------------------
13017|   788k|        )
13018|  5.36k|        {
13019|  5.36k|            D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or"));
13020|  5.36k|            _res = _PyPegen_cmpop_expr_pair ( p , Is , a );
13021|  5.36k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (13021:18): [True: 0, False: 5.36k]
  |  Branch (13021:34): [True: 0, False: 5.36k]
  |  Branch (13021:57): [True: 0, False: 0]
  ------------------
13022|      0|                p->error_indicator = 1;
13023|      0|                p->level--;
13024|      0|                return NULL;
13025|      0|            }
13026|  5.36k|            goto done;
13027|  5.36k|        }
13028|   782k|        p->mark = _mark;
13029|   782k|        D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ',
13030|   782k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' bitwise_or"));
13031|   782k|    }
13032|   782k|    _res = NULL;
13033|   885k|  done:
13034|   885k|    p->level--;
13035|   885k|    return _res;
13036|   782k|}
parser.c:_tmp_62_rule:
31185|   884k|{
31186|   884k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.76M|#  define MAXSTACK 6000
  ------------------
  |  Branch (31186:9): [True: 0, False: 884k]
  |  Branch (31186:35): [True: 0, False: 884k]
  ------------------
31187|      0|        _Pypegen_stack_overflow(p);
31188|      0|    }
31189|   884k|    if (p->error_indicator) {
  ------------------
  |  Branch (31189:9): [True: 0, False: 884k]
  ------------------
31190|      0|        p->level--;
31191|      0|        return NULL;
31192|      0|    }
31193|   884k|    void * _res = NULL;
31194|   884k|    int _mark = p->mark;
31195|   884k|    { // '!='
31196|   884k|        if (p->error_indicator) {
  ------------------
  |  Branch (31196:13): [True: 0, False: 884k]
  ------------------
31197|      0|            p->level--;
31198|      0|            return NULL;
31199|      0|        }
31200|   884k|        D(fprintf(stderr, "%*c> _tmp_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='"));
31201|   884k|        Token * tok;
31202|   884k|        if (
31203|   884k|            (tok = _PyPegen_expect_token(p, 28))  // token='!='
  ------------------
  |  Branch (31203:13): [True: 1.08k, False: 883k]
  ------------------
31204|   884k|        )
31205|  1.08k|        {
31206|  1.08k|            D(fprintf(stderr, "%*c+ _tmp_62[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='"));
31207|  1.08k|            _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok;
  ------------------
  |  Branch (31207:20): [True: 0, False: 1.08k]
  ------------------
31208|  1.08k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (31208:18): [True: 0, False: 1.08k]
  |  Branch (31208:34): [True: 0, False: 1.08k]
  |  Branch (31208:57): [True: 0, False: 0]
  ------------------
31209|      0|                p->error_indicator = 1;
31210|      0|                p->level--;
31211|      0|                return NULL;
31212|      0|            }
31213|  1.08k|            goto done;
31214|  1.08k|        }
31215|   883k|        p->mark = _mark;
31216|   883k|        D(fprintf(stderr, "%*c%s _tmp_62[%d-%d]: %s failed!\n", p->level, ' ',
31217|   883k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='"));
31218|   883k|    }
31219|   883k|    _res = NULL;
31220|   884k|  done:
31221|   884k|    p->level--;
31222|   884k|    return _res;
31223|   883k|}
parser.c:invalid_noteq_rule:
27297|   155k|{
27298|   155k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   311k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27298:9): [True: 0, False: 155k]
  |  Branch (27298:35): [True: 0, False: 155k]
  ------------------
27299|      0|        _Pypegen_stack_overflow(p);
27300|      0|    }
27301|   155k|    if (p->error_indicator) {
  ------------------
  |  Branch (27301:9): [True: 0, False: 155k]
  ------------------
27302|      0|        p->level--;
27303|      0|        return NULL;
27304|      0|    }
27305|   155k|    void * _res = NULL;
27306|   155k|    int _mark = p->mark;
27307|   155k|    { // '<' '>'
27308|   155k|        if (p->error_indicator) {
  ------------------
  |  Branch (27308:13): [True: 0, False: 155k]
  ------------------
27309|      0|            p->level--;
27310|      0|            return NULL;
27311|      0|        }
27312|   155k|        D(fprintf(stderr, "%*c> invalid_noteq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' '>'"));
27313|   155k|        Token * a;
27314|   155k|        Token * b;
27315|   155k|        if (
27316|   155k|            (a = _PyPegen_expect_token(p, 20))  // token='<'
  ------------------
  |  Branch (27316:13): [True: 2.97k, False: 153k]
  ------------------
27317|  2.97k|            &&
27318|  2.97k|            (b = _PyPegen_expect_token(p, 21))  // token='>'
  ------------------
  |  Branch (27318:13): [True: 7, False: 2.96k]
  ------------------
27319|   155k|        )
27320|      7|        {
27321|      7|            D(fprintf(stderr, "%*c+ invalid_noteq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<' '>'"));
27322|      7|            _res = _PyPegen_tokens_are_adjacent ( a , b ) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax.  Maybe you meant '!=' instead of '<>'?" ) : NULL;
  ------------------
  |  |  237|      7|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (27322:20): [True: 7, False: 0]
  ------------------
27323|      7|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27323:18): [True: 7, False: 0]
  |  Branch (27323:34): [True: 0, False: 0]
  |  Branch (27323:57): [True: 7, False: 0]
  ------------------
27324|      7|                p->error_indicator = 1;
27325|      7|                p->level--;
27326|      7|                return NULL;
27327|      7|            }
27328|      0|            goto done;
27329|      7|        }
27330|   155k|        p->mark = _mark;
27331|   155k|        D(fprintf(stderr, "%*c%s invalid_noteq[%d-%d]: %s failed!\n", p->level, ' ',
27332|   155k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<' '>'"));
27333|   155k|    }
27334|   155k|    _res = NULL;
27335|   155k|  done:
27336|   155k|    p->level--;
27337|   155k|    return _res;
27338|   155k|}
parser.c:_loop1_60_rule:
31041|   775k|{
31042|   775k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.55M|#  define MAXSTACK 6000
  ------------------
  |  Branch (31042:9): [True: 0, False: 775k]
  |  Branch (31042:35): [True: 0, False: 775k]
  ------------------
31043|      0|        _Pypegen_stack_overflow(p);
31044|      0|    }
31045|   775k|    if (p->error_indicator) {
  ------------------
  |  Branch (31045:9): [True: 0, False: 775k]
  ------------------
31046|      0|        p->level--;
31047|      0|        return NULL;
31048|      0|    }
31049|   775k|    void *_res = NULL;
31050|   775k|    int _mark = p->mark;
31051|   775k|    void **_children = PyMem_Malloc(sizeof(void *));
31052|   775k|    if (!_children) {
  ------------------
  |  Branch (31052:9): [True: 0, False: 775k]
  ------------------
31053|      0|        p->error_indicator = 1;
31054|      0|        PyErr_NoMemory();
31055|      0|        p->level--;
31056|      0|        return NULL;
31057|      0|    }
31058|   775k|    Py_ssize_t _children_capacity = 1;
31059|   775k|    Py_ssize_t _n = 0;
31060|   775k|    { // ('and' inversion)
31061|   775k|        if (p->error_indicator) {
  ------------------
  |  Branch (31061:13): [True: 0, False: 775k]
  ------------------
31062|      0|            p->level--;
31063|      0|            return NULL;
31064|      0|        }
31065|   775k|        D(fprintf(stderr, "%*c> _loop1_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)"));
31066|   775k|        void *_tmp_162_var;
31067|   775k|        while (
31068|   782k|            (_tmp_162_var = _tmp_162_rule(p))  // 'and' inversion
  ------------------
  |  Branch (31068:13): [True: 7.66k, False: 775k]
  ------------------
31069|   775k|        )
31070|  7.66k|        {
31071|  7.66k|            _res = _tmp_162_var;
31072|  7.66k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31072:17): [True: 2.30k, False: 5.35k]
  ------------------
31073|  2.30k|                _children_capacity *= 2;
31074|  2.30k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31075|  2.30k|                if (!_new_children) {
  ------------------
  |  Branch (31075:21): [True: 0, False: 2.30k]
  ------------------
31076|      0|                    PyMem_Free(_children);
31077|      0|                    p->error_indicator = 1;
31078|      0|                    PyErr_NoMemory();
31079|      0|                    p->level--;
31080|      0|                    return NULL;
31081|      0|                }
31082|  2.30k|                _children = _new_children;
31083|  2.30k|            }
31084|  7.66k|            _children[_n++] = _res;
31085|  7.66k|            _mark = p->mark;
31086|  7.66k|        }
31087|   775k|        p->mark = _mark;
31088|   775k|        D(fprintf(stderr, "%*c%s _loop1_60[%d-%d]: %s failed!\n", p->level, ' ',
31089|   775k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)"));
31090|   775k|    }
31091|   775k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (31091:9): [True: 772k, False: 2.51k]
  |  Branch (31091:20): [True: 84, False: 2.43k]
  ------------------
31092|   772k|        PyMem_Free(_children);
31093|   772k|        p->level--;
31094|   772k|        return NULL;
31095|   772k|    }
31096|  2.43k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31097|  2.43k|    if (!_seq) {
  ------------------
  |  Branch (31097:9): [True: 0, False: 2.43k]
  ------------------
31098|      0|        PyMem_Free(_children);
31099|      0|        p->error_indicator = 1;
31100|      0|        PyErr_NoMemory();
31101|      0|        p->level--;
31102|      0|        return NULL;
31103|      0|    }
31104|  9.81k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  7.37k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.81k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31104:28): [True: 7.37k, False: 2.43k]
  ------------------
31105|  2.43k|    PyMem_Free(_children);
31106|  2.43k|    p->level--;
31107|  2.43k|    return _seq;
31108|  2.43k|}
parser.c:_tmp_162_rule:
37294|   782k|{
37295|   782k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.56M|#  define MAXSTACK 6000
  ------------------
  |  Branch (37295:9): [True: 0, False: 782k]
  |  Branch (37295:35): [True: 0, False: 782k]
  ------------------
37296|      0|        _Pypegen_stack_overflow(p);
37297|      0|    }
37298|   782k|    if (p->error_indicator) {
  ------------------
  |  Branch (37298:9): [True: 0, False: 782k]
  ------------------
37299|      0|        p->level--;
37300|      0|        return NULL;
37301|      0|    }
37302|   782k|    void * _res = NULL;
37303|   782k|    int _mark = p->mark;
37304|   782k|    { // 'and' inversion
37305|   782k|        if (p->error_indicator) {
  ------------------
  |  Branch (37305:13): [True: 0, False: 782k]
  ------------------
37306|      0|            p->level--;
37307|      0|            return NULL;
37308|      0|        }
37309|   782k|        D(fprintf(stderr, "%*c> _tmp_162[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
37310|   782k|        Token * _keyword;
37311|   782k|        expr_ty c;
37312|   782k|        if (
37313|   782k|            (_keyword = _PyPegen_expect_token(p, 590))  // token='and'
  ------------------
  |  Branch (37313:13): [True: 7.87k, False: 774k]
  ------------------
37314|  7.87k|            &&
37315|  7.87k|            (c = inversion_rule(p))  // inversion
  ------------------
  |  Branch (37315:13): [True: 7.66k, False: 214]
  ------------------
37316|   782k|        )
37317|  7.66k|        {
37318|  7.66k|            D(fprintf(stderr, "%*c+ _tmp_162[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'and' inversion"));
37319|  7.66k|            _res = c;
37320|  7.66k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37320:18): [True: 0, False: 7.66k]
  |  Branch (37320:34): [True: 0, False: 7.66k]
  |  Branch (37320:57): [True: 0, False: 0]
  ------------------
37321|      0|                p->error_indicator = 1;
37322|      0|                p->level--;
37323|      0|                return NULL;
37324|      0|            }
37325|  7.66k|            goto done;
37326|  7.66k|        }
37327|   775k|        p->mark = _mark;
37328|   775k|        D(fprintf(stderr, "%*c%s _tmp_162[%d-%d]: %s failed!\n", p->level, ' ',
37329|   775k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'and' inversion"));
37330|   775k|    }
37331|   775k|    _res = NULL;
37332|   782k|  done:
37333|   782k|    p->level--;
37334|   782k|    return _res;
37335|   775k|}
parser.c:_loop1_59_rule:
30969|   769k|{
30970|   769k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.53M|#  define MAXSTACK 6000
  ------------------
  |  Branch (30970:9): [True: 0, False: 769k]
  |  Branch (30970:35): [True: 0, False: 769k]
  ------------------
30971|      0|        _Pypegen_stack_overflow(p);
30972|      0|    }
30973|   769k|    if (p->error_indicator) {
  ------------------
  |  Branch (30973:9): [True: 0, False: 769k]
  ------------------
30974|      0|        p->level--;
30975|      0|        return NULL;
30976|      0|    }
30977|   769k|    void *_res = NULL;
30978|   769k|    int _mark = p->mark;
30979|   769k|    void **_children = PyMem_Malloc(sizeof(void *));
30980|   769k|    if (!_children) {
  ------------------
  |  Branch (30980:9): [True: 0, False: 769k]
  ------------------
30981|      0|        p->error_indicator = 1;
30982|      0|        PyErr_NoMemory();
30983|      0|        p->level--;
30984|      0|        return NULL;
30985|      0|    }
30986|   769k|    Py_ssize_t _children_capacity = 1;
30987|   769k|    Py_ssize_t _n = 0;
30988|   769k|    { // ('or' conjunction)
30989|   769k|        if (p->error_indicator) {
  ------------------
  |  Branch (30989:13): [True: 0, False: 769k]
  ------------------
30990|      0|            p->level--;
30991|      0|            return NULL;
30992|      0|        }
30993|   769k|        D(fprintf(stderr, "%*c> _loop1_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)"));
30994|   769k|        void *_tmp_161_var;
30995|   769k|        while (
30996|   775k|            (_tmp_161_var = _tmp_161_rule(p))  // 'or' conjunction
  ------------------
  |  Branch (30996:13): [True: 5.59k, False: 769k]
  ------------------
30997|   769k|        )
30998|  5.59k|        {
30999|  5.59k|            _res = _tmp_161_var;
31000|  5.59k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31000:17): [True: 1.22k, False: 4.36k]
  ------------------
31001|  1.22k|                _children_capacity *= 2;
31002|  1.22k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31003|  1.22k|                if (!_new_children) {
  ------------------
  |  Branch (31003:21): [True: 0, False: 1.22k]
  ------------------
31004|      0|                    PyMem_Free(_children);
31005|      0|                    p->error_indicator = 1;
31006|      0|                    PyErr_NoMemory();
31007|      0|                    p->level--;
31008|      0|                    return NULL;
31009|      0|                }
31010|  1.22k|                _children = _new_children;
31011|  1.22k|            }
31012|  5.59k|            _children[_n++] = _res;
31013|  5.59k|            _mark = p->mark;
31014|  5.59k|        }
31015|   769k|        p->mark = _mark;
31016|   769k|        D(fprintf(stderr, "%*c%s _loop1_59[%d-%d]: %s failed!\n", p->level, ' ',
31017|   769k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)"));
31018|   769k|    }
31019|   769k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (31019:9): [True: 765k, False: 3.71k]
  |  Branch (31019:20): [True: 134, False: 3.57k]
  ------------------
31020|   765k|        PyMem_Free(_children);
31021|   765k|        p->level--;
31022|   765k|        return NULL;
31023|   765k|    }
31024|  3.57k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31025|  3.57k|    if (!_seq) {
  ------------------
  |  Branch (31025:9): [True: 0, False: 3.57k]
  ------------------
31026|      0|        PyMem_Free(_children);
31027|      0|        p->error_indicator = 1;
31028|      0|        PyErr_NoMemory();
31029|      0|        p->level--;
31030|      0|        return NULL;
31031|      0|    }
31032|  8.86k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  5.28k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  8.86k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31032:28): [True: 5.28k, False: 3.57k]
  ------------------
31033|  3.57k|    PyMem_Free(_children);
31034|  3.57k|    p->level--;
31035|  3.57k|    return _seq;
31036|  3.57k|}
parser.c:_tmp_161_rule:
37248|   775k|{
37249|   775k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.55M|#  define MAXSTACK 6000
  ------------------
  |  Branch (37249:9): [True: 0, False: 775k]
  |  Branch (37249:35): [True: 0, False: 775k]
  ------------------
37250|      0|        _Pypegen_stack_overflow(p);
37251|      0|    }
37252|   775k|    if (p->error_indicator) {
  ------------------
  |  Branch (37252:9): [True: 0, False: 775k]
  ------------------
37253|      0|        p->level--;
37254|      0|        return NULL;
37255|      0|    }
37256|   775k|    void * _res = NULL;
37257|   775k|    int _mark = p->mark;
37258|   775k|    { // 'or' conjunction
37259|   775k|        if (p->error_indicator) {
  ------------------
  |  Branch (37259:13): [True: 0, False: 775k]
  ------------------
37260|      0|            p->level--;
37261|      0|            return NULL;
37262|      0|        }
37263|   775k|        D(fprintf(stderr, "%*c> _tmp_161[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
37264|   775k|        Token * _keyword;
37265|   775k|        expr_ty c;
37266|   775k|        if (
37267|   775k|            (_keyword = _PyPegen_expect_token(p, 589))  // token='or'
  ------------------
  |  Branch (37267:13): [True: 6.34k, False: 768k]
  ------------------
37268|  6.34k|            &&
37269|  6.34k|            (c = conjunction_rule(p))  // conjunction
  ------------------
  |  Branch (37269:13): [True: 5.59k, False: 753]
  ------------------
37270|   775k|        )
37271|  5.59k|        {
37272|  5.59k|            D(fprintf(stderr, "%*c+ _tmp_161[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'or' conjunction"));
37273|  5.59k|            _res = c;
37274|  5.59k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37274:18): [True: 0, False: 5.59k]
  |  Branch (37274:34): [True: 0, False: 5.59k]
  |  Branch (37274:57): [True: 0, False: 0]
  ------------------
37275|      0|                p->error_indicator = 1;
37276|      0|                p->level--;
37277|      0|                return NULL;
37278|      0|            }
37279|  5.59k|            goto done;
37280|  5.59k|        }
37281|   769k|        p->mark = _mark;
37282|   769k|        D(fprintf(stderr, "%*c%s _tmp_161[%d-%d]: %s failed!\n", p->level, ' ',
37283|   769k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'or' conjunction"));
37284|   769k|    }
37285|   769k|    _res = NULL;
37286|   775k|  done:
37287|   775k|    p->level--;
37288|   775k|    return _res;
37289|   769k|}
parser.c:invalid_starred_expression_rule:
26047|   123k|{
26048|   123k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   247k|#  define MAXSTACK 6000
  ------------------
  |  Branch (26048:9): [True: 0, False: 123k]
  |  Branch (26048:35): [True: 0, False: 123k]
  ------------------
26049|      0|        _Pypegen_stack_overflow(p);
26050|      0|    }
26051|   123k|    if (p->error_indicator) {
  ------------------
  |  Branch (26051:9): [True: 0, False: 123k]
  ------------------
26052|      0|        p->level--;
26053|      0|        return NULL;
26054|      0|    }
26055|   123k|    void * _res = NULL;
26056|   123k|    int _mark = p->mark;
26057|   123k|    { // '*'
26058|   123k|        if (p->error_indicator) {
  ------------------
  |  Branch (26058:13): [True: 0, False: 123k]
  ------------------
26059|      0|            p->level--;
26060|      0|            return NULL;
26061|      0|        }
26062|   123k|        D(fprintf(stderr, "%*c> invalid_starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
26063|   123k|        Token * _literal;
26064|   123k|        if (
26065|   123k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (26065:13): [True: 32, False: 123k]
  ------------------
26066|   123k|        )
26067|     32|        {
26068|     32|            D(fprintf(stderr, "%*c+ invalid_starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
26069|     32|            _res = RAISE_SYNTAX_ERROR ( "Invalid star expression" );
  ------------------
  |  |  233|     32|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
26070|     32|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26070:18): [True: 32, False: 0]
  |  Branch (26070:34): [True: 0, False: 0]
  |  Branch (26070:57): [True: 32, False: 0]
  ------------------
26071|     32|                p->error_indicator = 1;
26072|     32|                p->level--;
26073|     32|                return NULL;
26074|     32|            }
26075|      0|            goto done;
26076|     32|        }
26077|   123k|        p->mark = _mark;
26078|   123k|        D(fprintf(stderr, "%*c%s invalid_starred_expression[%d-%d]: %s failed!\n", p->level, ' ',
26079|   123k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
26080|   123k|    }
26081|   123k|    _res = NULL;
26082|   123k|  done:
26083|   123k|    p->level--;
26084|   123k|    return _res;
26085|   123k|}
parser.c:for_if_clauses_rule:
17721|   242k|{
17722|   242k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   485k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17722:9): [True: 0, False: 242k]
  |  Branch (17722:35): [True: 0, False: 242k]
  ------------------
17723|      0|        _Pypegen_stack_overflow(p);
17724|      0|    }
17725|   242k|    if (p->error_indicator) {
  ------------------
  |  Branch (17725:9): [True: 0, False: 242k]
  ------------------
17726|      0|        p->level--;
17727|      0|        return NULL;
17728|      0|    }
17729|   242k|    asdl_comprehension_seq* _res = NULL;
17730|   242k|    int _mark = p->mark;
17731|   242k|    { // for_if_clause+
17732|   242k|        if (p->error_indicator) {
  ------------------
  |  Branch (17732:13): [True: 0, False: 242k]
  ------------------
17733|      0|            p->level--;
17734|      0|            return NULL;
17735|      0|        }
17736|   242k|        D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
17737|   242k|        asdl_comprehension_seq* a;
17738|   242k|        if (
17739|   242k|            (a = (asdl_comprehension_seq*)_loop1_87_rule(p))  // for_if_clause+
  ------------------
  |  Branch (17739:13): [True: 20.5k, False: 222k]
  ------------------
17740|   242k|        )
17741|  20.5k|        {
17742|  20.5k|            D(fprintf(stderr, "%*c+ for_if_clauses[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "for_if_clause+"));
17743|  20.5k|            _res = a;
17744|  20.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17744:18): [True: 0, False: 20.5k]
  |  Branch (17744:34): [True: 0, False: 20.5k]
  |  Branch (17744:57): [True: 0, False: 0]
  ------------------
17745|      0|                p->error_indicator = 1;
17746|      0|                p->level--;
17747|      0|                return NULL;
17748|      0|            }
17749|  20.5k|            goto done;
17750|  20.5k|        }
17751|   222k|        p->mark = _mark;
17752|   222k|        D(fprintf(stderr, "%*c%s for_if_clauses[%d-%d]: %s failed!\n", p->level, ' ',
17753|   222k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause+"));
17754|   222k|    }
17755|   222k|    _res = NULL;
17756|   242k|  done:
17757|   242k|    p->level--;
17758|   242k|    return _res;
17759|   222k|}
parser.c:_loop1_87_rule:
32788|   242k|{
32789|   242k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   485k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32789:9): [True: 0, False: 242k]
  |  Branch (32789:35): [True: 0, False: 242k]
  ------------------
32790|      0|        _Pypegen_stack_overflow(p);
32791|      0|    }
32792|   242k|    if (p->error_indicator) {
  ------------------
  |  Branch (32792:9): [True: 0, False: 242k]
  ------------------
32793|      0|        p->level--;
32794|      0|        return NULL;
32795|      0|    }
32796|   242k|    void *_res = NULL;
32797|   242k|    int _mark = p->mark;
32798|   242k|    void **_children = PyMem_Malloc(sizeof(void *));
32799|   242k|    if (!_children) {
  ------------------
  |  Branch (32799:9): [True: 0, False: 242k]
  ------------------
32800|      0|        p->error_indicator = 1;
32801|      0|        PyErr_NoMemory();
32802|      0|        p->level--;
32803|      0|        return NULL;
32804|      0|    }
32805|   242k|    Py_ssize_t _children_capacity = 1;
32806|   242k|    Py_ssize_t _n = 0;
32807|   242k|    { // for_if_clause
32808|   242k|        if (p->error_indicator) {
  ------------------
  |  Branch (32808:13): [True: 0, False: 242k]
  ------------------
32809|      0|            p->level--;
32810|      0|            return NULL;
32811|      0|        }
32812|   242k|        D(fprintf(stderr, "%*c> _loop1_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause"));
32813|   242k|        comprehension_ty for_if_clause_var;
32814|   242k|        while (
32815|   265k|            (for_if_clause_var = for_if_clause_rule(p))  // for_if_clause
  ------------------
  |  Branch (32815:13): [True: 23.0k, False: 242k]
  ------------------
32816|   242k|        )
32817|  23.0k|        {
32818|  23.0k|            _res = for_if_clause_var;
32819|  23.0k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32819:17): [True: 2.09k, False: 20.9k]
  ------------------
32820|  2.09k|                _children_capacity *= 2;
32821|  2.09k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32822|  2.09k|                if (!_new_children) {
  ------------------
  |  Branch (32822:21): [True: 0, False: 2.09k]
  ------------------
32823|      0|                    PyMem_Free(_children);
32824|      0|                    p->error_indicator = 1;
32825|      0|                    PyErr_NoMemory();
32826|      0|                    p->level--;
32827|      0|                    return NULL;
32828|      0|                }
32829|  2.09k|                _children = _new_children;
32830|  2.09k|            }
32831|  23.0k|            _children[_n++] = _res;
32832|  23.0k|            _mark = p->mark;
32833|  23.0k|        }
32834|   242k|        p->mark = _mark;
32835|   242k|        D(fprintf(stderr, "%*c%s _loop1_87[%d-%d]: %s failed!\n", p->level, ' ',
32836|   242k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause"));
32837|   242k|    }
32838|   242k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (32838:9): [True: 222k, False: 20.6k]
  |  Branch (32838:20): [True: 103, False: 20.5k]
  ------------------
32839|   222k|        PyMem_Free(_children);
32840|   222k|        p->level--;
32841|   222k|        return NULL;
32842|   222k|    }
32843|  20.5k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32844|  20.5k|    if (!_seq) {
  ------------------
  |  Branch (32844:9): [True: 0, False: 20.5k]
  ------------------
32845|      0|        PyMem_Free(_children);
32846|      0|        p->error_indicator = 1;
32847|      0|        PyErr_NoMemory();
32848|      0|        p->level--;
32849|      0|        return NULL;
32850|      0|    }
32851|  43.4k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  22.9k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  43.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32851:28): [True: 22.9k, False: 20.5k]
  ------------------
32852|  20.5k|    PyMem_Free(_children);
32853|  20.5k|    p->level--;
32854|  20.5k|    return _seq;
32855|  20.5k|}
parser.c:for_if_clause_rule:
17768|   265k|{
17769|   265k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   531k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17769:9): [True: 0, False: 265k]
  |  Branch (17769:35): [True: 0, False: 265k]
  ------------------
17770|      0|        _Pypegen_stack_overflow(p);
17771|      0|    }
17772|   265k|    if (p->error_indicator) {
  ------------------
  |  Branch (17772:9): [True: 0, False: 265k]
  ------------------
17773|      0|        p->level--;
17774|      0|        return NULL;
17775|      0|    }
17776|   265k|    comprehension_ty _res = NULL;
17777|   265k|    int _mark = p->mark;
17778|   265k|    { // 'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
17779|   265k|        if (p->error_indicator) {
  ------------------
  |  Branch (17779:13): [True: 0, False: 265k]
  ------------------
17780|      0|            p->level--;
17781|      0|            return NULL;
17782|      0|        }
17783|   265k|        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17784|   265k|        int _cut_var = 0;
17785|   265k|        Token * _keyword;
17786|   265k|        Token * _keyword_1;
17787|   265k|        Token * _keyword_2;
17788|   265k|        expr_ty a;
17789|   265k|        expr_ty b;
17790|   265k|        asdl_expr_seq* c;
17791|   265k|        if (
17792|   265k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (17792:13): [True: 5.21k, False: 260k]
  ------------------
17793|  5.21k|            &&
17794|  5.21k|            (_keyword_1 = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (17794:13): [True: 5.18k, False: 35]
  ------------------
17795|  5.18k|            &&
17796|  5.18k|            (a = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (17796:13): [True: 4.55k, False: 633]
  ------------------
17797|  4.55k|            &&
17798|  4.55k|            (_keyword_2 = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (17798:13): [True: 4.53k, False: 19]
  ------------------
17799|  4.53k|            &&
17800|  4.53k|            (_cut_var = 1)
  ------------------
  |  Branch (17800:13): [True: 4.53k, False: 0]
  ------------------
17801|  4.53k|            &&
17802|  4.53k|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (17802:13): [True: 4.22k, False: 304]
  ------------------
17803|  4.22k|            &&
17804|  4.22k|            (c = (asdl_expr_seq*)_loop0_88_rule(p))  // (('if' disjunction))*
  ------------------
  |  Branch (17804:13): [True: 4.22k, False: 0]
  ------------------
17805|   265k|        )
17806|  4.22k|        {
17807|  4.22k|            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17808|  4.22k|            _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _PyAST_comprehension ( a , b , c , 1 , p -> arena ) );
  ------------------
  |  |  345|  4.22k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
17809|  4.22k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17809:18): [True: 0, False: 4.22k]
  |  Branch (17809:34): [True: 24, False: 4.20k]
  |  Branch (17809:57): [True: 24, False: 0]
  ------------------
17810|     24|                p->error_indicator = 1;
17811|     24|                p->level--;
17812|     24|                return NULL;
17813|     24|            }
17814|  4.20k|            goto done;
17815|  4.22k|        }
17816|   261k|        p->mark = _mark;
17817|   261k|        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17818|   261k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17819|   261k|        if (_cut_var) {
  ------------------
  |  Branch (17819:13): [True: 304, False: 261k]
  ------------------
17820|    304|            p->level--;
17821|    304|            return NULL;
17822|    304|        }
17823|   261k|    }
17824|   261k|    { // 'for' star_targets 'in' ~ disjunction (('if' disjunction))*
17825|   261k|        if (p->error_indicator) {
  ------------------
  |  Branch (17825:13): [True: 279, False: 260k]
  ------------------
17826|    279|            p->level--;
17827|    279|            return NULL;
17828|    279|        }
17829|   260k|        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17830|   260k|        int _cut_var = 0;
17831|   260k|        Token * _keyword;
17832|   260k|        Token * _keyword_1;
17833|   260k|        expr_ty a;
17834|   260k|        expr_ty b;
17835|   260k|        asdl_expr_seq* c;
17836|   260k|        if (
17837|   260k|            (_keyword = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (17837:13): [True: 23.4k, False: 237k]
  ------------------
17838|  23.4k|            &&
17839|  23.4k|            (a = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (17839:13): [True: 21.0k, False: 2.46k]
  ------------------
17840|  21.0k|            &&
17841|  21.0k|            (_keyword_1 = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (17841:13): [True: 19.3k, False: 1.63k]
  ------------------
17842|  19.3k|            &&
17843|  19.3k|            (_cut_var = 1)
  ------------------
  |  Branch (17843:13): [True: 19.3k, False: 0]
  ------------------
17844|  19.3k|            &&
17845|  19.3k|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (17845:13): [True: 18.9k, False: 450]
  ------------------
17846|  18.9k|            &&
17847|  18.9k|            (c = (asdl_expr_seq*)_loop0_88_rule(p))  // (('if' disjunction))*
  ------------------
  |  Branch (17847:13): [True: 18.9k, False: 0]
  ------------------
17848|   260k|        )
17849|  18.9k|        {
17850|  18.9k|            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17851|  18.9k|            _res = _PyAST_comprehension ( a , b , c , 0 , p -> arena );
17852|  18.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17852:18): [True: 0, False: 18.9k]
  |  Branch (17852:34): [True: 88, False: 18.8k]
  |  Branch (17852:57): [True: 88, False: 0]
  ------------------
17853|     88|                p->error_indicator = 1;
17854|     88|                p->level--;
17855|     88|                return NULL;
17856|     88|            }
17857|  18.8k|            goto done;
17858|  18.9k|        }
17859|   242k|        p->mark = _mark;
17860|   242k|        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17861|   242k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*"));
17862|   242k|        if (_cut_var) {
  ------------------
  |  Branch (17862:13): [True: 450, False: 241k]
  ------------------
17863|    450|            p->level--;
17864|    450|            return NULL;
17865|    450|        }
17866|   242k|    }
17867|   241k|    if (p->call_invalid_rules) { // invalid_for_if_clause
  ------------------
  |  Branch (17867:9): [True: 70.1k, False: 171k]
  ------------------
17868|  70.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (17868:13): [True: 570, False: 69.5k]
  ------------------
17869|    570|            p->level--;
17870|    570|            return NULL;
17871|    570|        }
17872|  69.5k|        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_if_clause"));
17873|  69.5k|        void *invalid_for_if_clause_var;
17874|  69.5k|        if (
17875|  69.5k|            (invalid_for_if_clause_var = invalid_for_if_clause_rule(p))  // invalid_for_if_clause
  ------------------
  |  Branch (17875:13): [True: 0, False: 69.5k]
  ------------------
17876|  69.5k|        )
17877|      0|        {
17878|      0|            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_if_clause"));
17879|      0|            _res = invalid_for_if_clause_var;
17880|      0|            goto done;
17881|      0|        }
17882|  69.5k|        p->mark = _mark;
17883|  69.5k|        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17884|  69.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_if_clause"));
17885|  69.5k|    }
17886|   241k|    if (p->call_invalid_rules) { // invalid_for_target
  ------------------
  |  Branch (17886:9): [True: 69.5k, False: 171k]
  ------------------
17887|  69.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (17887:13): [True: 1.08k, False: 68.4k]
  ------------------
17888|  1.08k|            p->level--;
17889|  1.08k|            return NULL;
17890|  1.08k|        }
17891|  68.4k|        D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
17892|  68.4k|        void *invalid_for_target_var;
17893|  68.4k|        if (
17894|  68.4k|            (invalid_for_target_var = invalid_for_target_rule(p))  // invalid_for_target
  ------------------
  |  Branch (17894:13): [True: 0, False: 68.4k]
  ------------------
17895|  68.4k|        )
17896|      0|        {
17897|      0|            D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
17898|      0|            _res = invalid_for_target_var;
17899|      0|            goto done;
17900|      0|        }
17901|  68.4k|        p->mark = _mark;
17902|  68.4k|        D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
17903|  68.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target"));
17904|  68.4k|    }
17905|   239k|    _res = NULL;
17906|   262k|  done:
17907|   262k|    p->level--;
17908|   262k|    return _res;
17909|   239k|}
parser.c:star_targets_rule:
18874|   465k|{
18875|   465k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   931k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18875:9): [True: 0, False: 465k]
  |  Branch (18875:35): [True: 0, False: 465k]
  ------------------
18876|      0|        _Pypegen_stack_overflow(p);
18877|      0|    }
18878|   465k|    if (p->error_indicator) {
  ------------------
  |  Branch (18878:9): [True: 0, False: 465k]
  ------------------
18879|      0|        p->level--;
18880|      0|        return NULL;
18881|      0|    }
18882|   465k|    expr_ty _res = NULL;
18883|   465k|    int _mark = p->mark;
18884|   465k|    expr_ty _prefix_10_result = NULL;
18885|   465k|    int _prefix_10_end = 0, _prefix_10_valid = 0;
18886|   465k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18886:9): [True: 74.9k, False: 390k]
  |  Branch (18886:31): [True: 24, False: 74.8k]
  ------------------
18887|     24|        p->error_indicator = 1;
18888|     24|        p->level--;
18889|     24|        return NULL;
18890|     24|    }
18891|   465k|    int _start_lineno = p->tokens[_mark]->lineno;
18892|   465k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   465k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 465k]
  |  |  ------------------
  ------------------
18893|   465k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18894|   465k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   465k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 465k]
  |  |  ------------------
  ------------------
18895|   465k|    { // star_target !','
18896|   465k|        if (p->error_indicator) {
  ------------------
  |  Branch (18896:13): [True: 0, False: 465k]
  ------------------
18897|      0|            p->level--;
18898|      0|            return NULL;
18899|      0|        }
18900|   465k|        D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target !','"));
18901|   465k|        expr_ty a;
18902|   465k|        if (
18903|   465k|            (a = ((!p->call_invalid_rules && _prefix_10_valid) ? (p->mark = _prefix_10_end, _prefix_10_result) : (_prefix_10_result = star_target_rule(p), _prefix_10_end = p->mark, _prefix_10_valid = 1, _prefix_10_result)))  // star_target
  ------------------
  |  Branch (18903:13): [True: 310k, False: 155k]
  |  Branch (18903:20): [True: 318k, False: 147k]
  |  Branch (18903:46): [True: 0, False: 318k]
  ------------------
18904|   310k|            &&
18905|   310k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
  ------------------
  |  Branch (18905:13): [True: 265k, False: 44.3k]
  ------------------
18906|   465k|        )
18907|   265k|        {
18908|   265k|            D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target !','"));
18909|   265k|            _res = a;
18910|   265k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18910:18): [True: 0, False: 265k]
  |  Branch (18910:34): [True: 0, False: 265k]
  |  Branch (18910:57): [True: 0, False: 0]
  ------------------
18911|      0|                p->error_indicator = 1;
18912|      0|                p->level--;
18913|      0|                return NULL;
18914|      0|            }
18915|   265k|            goto done;
18916|   265k|        }
18917|   199k|        p->mark = _mark;
18918|   199k|        D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ',
18919|   199k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target !','"));
18920|   199k|    }
18921|      0|    { // star_target ((',' star_target))* ','?
18922|   199k|        if (p->error_indicator) {
  ------------------
  |  Branch (18922:13): [True: 1.24k, False: 198k]
  ------------------
18923|  1.24k|            p->level--;
18924|  1.24k|            return NULL;
18925|  1.24k|        }
18926|   198k|        D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
18927|   198k|        void *_opt_var;
18928|   198k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|   198k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 198k]
  |  |  ------------------
  ------------------
18929|   198k|        expr_ty a;
18930|   198k|        asdl_seq * b;
18931|   198k|        if (
18932|   198k|            (a = ((!p->call_invalid_rules && _prefix_10_valid) ? (p->mark = _prefix_10_end, _prefix_10_result) : (_prefix_10_result = star_target_rule(p), _prefix_10_end = p->mark, _prefix_10_valid = 1, _prefix_10_result)))  // star_target
  ------------------
  |  Branch (18932:13): [True: 44.3k, False: 154k]
  |  Branch (18932:20): [True: 125k, False: 73.3k]
  |  Branch (18932:46): [True: 125k, False: 0]
  ------------------
18933|  44.3k|            &&
18934|  44.3k|            (b = _loop0_98_rule(p))  // ((',' star_target))*
  ------------------
  |  Branch (18934:13): [True: 44.3k, False: 0]
  ------------------
18935|  44.3k|            &&
18936|  44.3k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (18936:13): [True: 44.0k, False: 306]
  ------------------
18937|   198k|        )
18938|  44.0k|        {
18939|  44.0k|            D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?"));
18940|  44.0k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18941|  44.0k|            if (_token == NULL) {
  ------------------
  |  Branch (18941:17): [True: 0, False: 44.0k]
  ------------------
18942|      0|                p->level--;
18943|      0|                return NULL;
18944|      0|            }
18945|  44.0k|            int _end_lineno = _token->end_lineno;
18946|  44.0k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  44.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 44.0k]
  |  |  ------------------
  ------------------
18947|  44.0k|            int _end_col_offset = _token->end_col_offset;
18948|  44.0k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  44.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 44.0k]
  |  |  ------------------
  ------------------
18949|  44.0k|            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA );
  ------------------
  |  |  271|  44.0k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA );
  ------------------
  |  |  307|  44.0k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18950|  44.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18950:18): [True: 0, False: 44.0k]
  |  Branch (18950:34): [True: 0, False: 44.0k]
  |  Branch (18950:57): [True: 0, False: 0]
  ------------------
18951|      0|                p->error_indicator = 1;
18952|      0|                p->level--;
18953|      0|                return NULL;
18954|      0|            }
18955|  44.0k|            goto done;
18956|  44.0k|        }
18957|   154k|        p->mark = _mark;
18958|   154k|        D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ',
18959|   154k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))* ','?"));
18960|   154k|    }
18961|   154k|    _res = NULL;
18962|   464k|  done:
18963|   464k|    p->level--;
18964|   464k|    return _res;
18965|   154k|}
parser.c:star_target_rule:
18970|   681k|{
18971|   681k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.36M|#  define MAXSTACK 6000
  ------------------
  |  Branch (18971:9): [True: 0, False: 681k]
  |  Branch (18971:35): [True: 0, False: 681k]
  ------------------
18972|      0|        _Pypegen_stack_overflow(p);
18973|      0|    }
18974|   681k|    if (p->error_indicator) {
  ------------------
  |  Branch (18974:9): [True: 6, False: 681k]
  ------------------
18975|      6|        p->level--;
18976|      6|        return NULL;
18977|      6|    }
18978|   681k|    expr_ty _res = NULL;
18979|   681k|    if (_PyPegen_is_memoized(p, star_target_type, &_res)) {
  ------------------
  |  |  273|   681k|#define star_target_type 1184
  ------------------
  |  Branch (18979:9): [True: 192k, False: 489k]
  ------------------
18980|   192k|        p->level--;
18981|   192k|        return _res;
18982|   192k|    }
18983|   489k|    int _mark = p->mark;
18984|   489k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18984:9): [True: 0, False: 489k]
  |  Branch (18984:31): [True: 0, False: 0]
  ------------------
18985|      0|        p->error_indicator = 1;
18986|      0|        p->level--;
18987|      0|        return NULL;
18988|      0|    }
18989|   489k|    int _start_lineno = p->tokens[_mark]->lineno;
18990|   489k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   489k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 489k]
  |  |  ------------------
  ------------------
18991|   489k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18992|   489k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   489k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 489k]
  |  |  ------------------
  ------------------
18993|   489k|    { // '*' (!'*' star_target)
18994|   489k|        if (p->error_indicator) {
  ------------------
  |  Branch (18994:13): [True: 0, False: 489k]
  ------------------
18995|      0|            p->level--;
18996|      0|            return NULL;
18997|      0|        }
18998|   489k|        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
18999|   489k|        Token * _literal;
19000|   489k|        void *a;
19001|   489k|        if (
19002|   489k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (19002:13): [True: 3.54k, False: 485k]
  ------------------
19003|  3.54k|            &&
19004|  3.54k|            (a = _tmp_99_rule(p))  // !'*' star_target
  ------------------
  |  Branch (19004:13): [True: 1.99k, False: 1.55k]
  ------------------
19005|   489k|        )
19006|  1.99k|        {
19007|  1.99k|            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)"));
19008|  1.99k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
19009|  1.99k|            if (_token == NULL) {
  ------------------
  |  Branch (19009:17): [True: 0, False: 1.99k]
  ------------------
19010|      0|                p->level--;
19011|      0|                return NULL;
19012|      0|            }
19013|  1.99k|            int _end_lineno = _token->end_lineno;
19014|  1.99k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.99k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.99k]
  |  |  ------------------
  ------------------
19015|  1.99k|            int _end_col_offset = _token->end_col_offset;
19016|  1.99k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.99k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.99k]
  |  |  ------------------
  ------------------
19017|  1.99k|            _res = _PyAST_Starred ( a , Store , EXTRA );
  ------------------
  |  |  307|  1.99k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
19018|  1.99k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19018:18): [True: 0, False: 1.99k]
  |  Branch (19018:34): [True: 0, False: 1.99k]
  |  Branch (19018:57): [True: 0, False: 0]
  ------------------
19019|      0|                p->error_indicator = 1;
19020|      0|                p->level--;
19021|      0|                return NULL;
19022|      0|            }
19023|  1.99k|            goto done;
19024|  1.99k|        }
19025|   487k|        p->mark = _mark;
19026|   487k|        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
19027|   487k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (!'*' star_target)"));
19028|   487k|    }
19029|      0|    { // target
19030|   487k|        if (p->error_indicator) {
  ------------------
  |  Branch (19030:13): [True: 537, False: 486k]
  ------------------
19031|    537|            p->level--;
19032|    537|            return NULL;
19033|    537|        }
19034|   486k|        D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target"));
19035|   486k|        expr_ty target_var;
19036|   486k|        if (
19037|   486k|            (target_var = target_rule(p))  // target
  ------------------
  |  Branch (19037:13): [True: 352k, False: 134k]
  ------------------
19038|   486k|        )
19039|   352k|        {
19040|   352k|            D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target"));
19041|   352k|            _res = target_var;
19042|   352k|            goto done;
19043|   352k|        }
19044|   134k|        p->mark = _mark;
19045|   134k|        D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ',
19046|   134k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target"));
19047|   134k|    }
19048|   134k|    _res = NULL;
19049|   488k|  done:
19050|   488k|    _PyPegen_insert_memo(p, _mark, star_target_type, _res);
  ------------------
  |  |  273|   488k|#define star_target_type 1184
  ------------------
19051|   488k|    p->level--;
19052|   488k|    return _res;
19053|   134k|}
parser.c:_tmp_99_rule:
33516|  3.54k|{
33517|  3.54k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.09k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33517:9): [True: 0, False: 3.54k]
  |  Branch (33517:35): [True: 0, False: 3.54k]
  ------------------
33518|      0|        _Pypegen_stack_overflow(p);
33519|      0|    }
33520|  3.54k|    if (p->error_indicator) {
  ------------------
  |  Branch (33520:9): [True: 0, False: 3.54k]
  ------------------
33521|      0|        p->level--;
33522|      0|        return NULL;
33523|      0|    }
33524|  3.54k|    void * _res = NULL;
33525|  3.54k|    int _mark = p->mark;
33526|  3.54k|    { // !'*' star_target
33527|  3.54k|        if (p->error_indicator) {
  ------------------
  |  Branch (33527:13): [True: 0, False: 3.54k]
  ------------------
33528|      0|            p->level--;
33529|      0|            return NULL;
33530|      0|        }
33531|  3.54k|        D(fprintf(stderr, "%*c> _tmp_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
33532|  3.54k|        expr_ty star_target_var;
33533|  3.54k|        if (
33534|  3.54k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 16)  // token='*'
  ------------------
  |  Branch (33534:13): [True: 3.54k, False: 5]
  ------------------
33535|  3.54k|            &&
33536|  3.54k|            (star_target_var = star_target_rule(p))  // star_target
  ------------------
  |  Branch (33536:13): [True: 1.99k, False: 1.54k]
  ------------------
33537|  3.54k|        )
33538|  1.99k|        {
33539|  1.99k|            D(fprintf(stderr, "%*c+ _tmp_99[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target"));
33540|  1.99k|            _res = star_target_var;
33541|  1.99k|            goto done;
33542|  1.99k|        }
33543|  1.55k|        p->mark = _mark;
33544|  1.55k|        D(fprintf(stderr, "%*c%s _tmp_99[%d-%d]: %s failed!\n", p->level, ' ',
33545|  1.55k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!'*' star_target"));
33546|  1.55k|    }
33547|  1.55k|    _res = NULL;
33548|  3.54k|  done:
33549|  3.54k|    p->level--;
33550|  3.54k|    return _res;
33551|  1.55k|}
parser.c:target_rule:
19058|   486k|{
19059|   486k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   972k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19059:9): [True: 0, False: 486k]
  |  Branch (19059:35): [True: 0, False: 486k]
  ------------------
19060|      0|        _Pypegen_stack_overflow(p);
19061|      0|    }
19062|   486k|    if (p->error_indicator) {
  ------------------
  |  Branch (19062:9): [True: 0, False: 486k]
  ------------------
19063|      0|        p->level--;
19064|      0|        return NULL;
19065|      0|    }
19066|   486k|    expr_ty _res = NULL;
19067|   486k|    if (_PyPegen_is_memoized(p, target_type, &_res)) {
  ------------------
  |  |  274|   486k|#define target_type 1185
  ------------------
  |  Branch (19067:9): [True: 0, False: 486k]
  ------------------
19068|      0|        p->level--;
19069|      0|        return _res;
19070|      0|    }
19071|   486k|    int _mark = p->mark;
19072|   486k|    { // target_value
19073|   486k|        if (p->error_indicator) {
  ------------------
  |  Branch (19073:13): [True: 0, False: 486k]
  ------------------
19074|      0|            p->level--;
19075|      0|            return NULL;
19076|      0|        }
19077|   486k|        D(fprintf(stderr, "%*c> target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_value"));
19078|   486k|        expr_ty a;
19079|   486k|        if (
19080|   486k|            (a = target_value_rule(p))  // target_value
  ------------------
  |  Branch (19080:13): [True: 385k, False: 101k]
  ------------------
19081|   486k|        )
19082|   385k|        {
19083|   385k|            D(fprintf(stderr, "%*c+ target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_value"));
19084|   385k|            _res = _PyPegen_make_target ( p , a , STAR_TARGETS );
19085|   385k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19085:18): [True: 33.2k, False: 352k]
  |  Branch (19085:34): [True: 0, False: 352k]
  |  Branch (19085:57): [True: 0, False: 33.2k]
  ------------------
19086|      0|                p->error_indicator = 1;
19087|      0|                p->level--;
19088|      0|                return NULL;
19089|      0|            }
19090|   385k|            goto done;
19091|   385k|        }
19092|   101k|        p->mark = _mark;
19093|   101k|        D(fprintf(stderr, "%*c%s target[%d-%d]: %s failed!\n", p->level, ' ',
19094|   101k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_value"));
19095|   101k|    }
19096|   101k|    _res = NULL;
19097|   486k|  done:
19098|   486k|    _PyPegen_insert_memo(p, _mark, target_type, _res);
  ------------------
  |  |  274|   486k|#define target_type 1185
  ------------------
19099|   486k|    p->level--;
19100|   486k|    return _res;
19101|   101k|}
parser.c:target_value_rule:
19192|  1.06M|{
19193|  1.06M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.12M|#  define MAXSTACK 6000
  ------------------
  |  Branch (19193:9): [True: 0, False: 1.06M]
  |  Branch (19193:35): [True: 0, False: 1.06M]
  ------------------
19194|      0|        _Pypegen_stack_overflow(p);
19195|      0|    }
19196|  1.06M|    if (p->error_indicator) {
  ------------------
  |  Branch (19196:9): [True: 0, False: 1.06M]
  ------------------
19197|      0|        p->level--;
19198|      0|        return NULL;
19199|      0|    }
19200|  1.06M|    expr_ty _res = NULL;
19201|  1.06M|    int _mark = p->mark;
19202|  1.06M|    { // primary !('(' | '[' | '.')
19203|  1.06M|        if (p->error_indicator) {
  ------------------
  |  Branch (19203:13): [True: 0, False: 1.06M]
  ------------------
19204|      0|            p->level--;
19205|      0|            return NULL;
19206|      0|        }
19207|  1.06M|        D(fprintf(stderr, "%*c> target_value[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary !('(' | '[' | '.')"));
19208|  1.06M|        expr_ty a;
19209|  1.06M|        if (
19210|  1.06M|            (a = primary_rule(p))  // primary
  ------------------
  |  Branch (19210:13): [True: 804k, False: 255k]
  ------------------
19211|   804k|            &&
19212|   804k|            _PyPegen_lookahead(0, _tmp_100_rule, p)
  ------------------
  |  Branch (19212:13): [True: 801k, False: 3.62k]
  ------------------
19213|  1.06M|        )
19214|   801k|        {
19215|   801k|            D(fprintf(stderr, "%*c+ target_value[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary !('(' | '[' | '.')"));
19216|   801k|            _res = a;
19217|   801k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19217:18): [True: 0, False: 801k]
  |  Branch (19217:34): [True: 0, False: 801k]
  |  Branch (19217:57): [True: 0, False: 0]
  ------------------
19218|      0|                p->error_indicator = 1;
19219|      0|                p->level--;
19220|      0|                return NULL;
19221|      0|            }
19222|   801k|            goto done;
19223|   801k|        }
19224|   259k|        p->mark = _mark;
19225|   259k|        D(fprintf(stderr, "%*c%s target_value[%d-%d]: %s failed!\n", p->level, ' ',
19226|   259k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary !('(' | '[' | '.')"));
19227|   259k|    }
19228|   259k|    _res = NULL;
19229|  1.06M|  done:
19230|  1.06M|    p->level--;
19231|  1.06M|    return _res;
19232|   259k|}
parser.c:_tmp_100_rule:
33556|   804k|{
33557|   804k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.60M|#  define MAXSTACK 6000
  ------------------
  |  Branch (33557:9): [True: 0, False: 804k]
  |  Branch (33557:35): [True: 0, False: 804k]
  ------------------
33558|      0|        _Pypegen_stack_overflow(p);
33559|      0|    }
33560|   804k|    if (p->error_indicator) {
  ------------------
  |  Branch (33560:9): [True: 0, False: 804k]
  ------------------
33561|      0|        p->level--;
33562|      0|        return NULL;
33563|      0|    }
33564|   804k|    void * _res = NULL;
33565|   804k|    int _mark = p->mark;
33566|   804k|    { // '('
33567|   804k|        if (p->error_indicator) {
  ------------------
  |  Branch (33567:13): [True: 0, False: 804k]
  ------------------
33568|      0|            p->level--;
33569|      0|            return NULL;
33570|      0|        }
33571|   804k|        D(fprintf(stderr, "%*c> _tmp_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
33572|   804k|        Token * _literal;
33573|   804k|        if (
33574|   804k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (33574:13): [True: 2.27k, False: 802k]
  ------------------
33575|   804k|        )
33576|  2.27k|        {
33577|  2.27k|            D(fprintf(stderr, "%*c+ _tmp_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
33578|  2.27k|            _res = _literal;
33579|  2.27k|            goto done;
33580|  2.27k|        }
33581|   802k|        p->mark = _mark;
33582|   802k|        D(fprintf(stderr, "%*c%s _tmp_100[%d-%d]: %s failed!\n", p->level, ' ',
33583|   802k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
33584|   802k|    }
33585|      0|    { // '['
33586|   802k|        if (p->error_indicator) {
  ------------------
  |  Branch (33586:13): [True: 0, False: 802k]
  ------------------
33587|      0|            p->level--;
33588|      0|            return NULL;
33589|      0|        }
33590|   802k|        D(fprintf(stderr, "%*c> _tmp_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
33591|   802k|        Token * _literal;
33592|   802k|        if (
33593|   802k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (33593:13): [True: 816, False: 801k]
  ------------------
33594|   802k|        )
33595|    816|        {
33596|    816|            D(fprintf(stderr, "%*c+ _tmp_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
33597|    816|            _res = _literal;
33598|    816|            goto done;
33599|    816|        }
33600|   801k|        p->mark = _mark;
33601|   801k|        D(fprintf(stderr, "%*c%s _tmp_100[%d-%d]: %s failed!\n", p->level, ' ',
33602|   801k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
33603|   801k|    }
33604|      0|    { // '.'
33605|   801k|        if (p->error_indicator) {
  ------------------
  |  Branch (33605:13): [True: 0, False: 801k]
  ------------------
33606|      0|            p->level--;
33607|      0|            return NULL;
33608|      0|        }
33609|   801k|        D(fprintf(stderr, "%*c> _tmp_100[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
33610|   801k|        Token * _literal;
33611|   801k|        if (
33612|   801k|            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
  ------------------
  |  Branch (33612:13): [True: 530, False: 801k]
  ------------------
33613|   801k|        )
33614|    530|        {
33615|    530|            D(fprintf(stderr, "%*c+ _tmp_100[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
33616|    530|            _res = _literal;
33617|    530|            goto done;
33618|    530|        }
33619|   801k|        p->mark = _mark;
33620|   801k|        D(fprintf(stderr, "%*c%s _tmp_100[%d-%d]: %s failed!\n", p->level, ' ',
33621|   801k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
33622|   801k|    }
33623|   801k|    _res = NULL;
33624|   804k|  done:
33625|   804k|    p->level--;
33626|   804k|    return _res;
33627|   801k|}
parser.c:_loop0_98_rule:
33449|  44.3k|{
33450|  44.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  88.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33450:9): [True: 0, False: 44.3k]
  |  Branch (33450:35): [True: 0, False: 44.3k]
  ------------------
33451|      0|        _Pypegen_stack_overflow(p);
33452|      0|    }
33453|  44.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (33453:9): [True: 0, False: 44.3k]
  ------------------
33454|      0|        p->level--;
33455|      0|        return NULL;
33456|      0|    }
33457|  44.3k|    void *_res = NULL;
33458|  44.3k|    int _mark = p->mark;
33459|  44.3k|    void **_children = PyMem_Malloc(sizeof(void *));
33460|  44.3k|    if (!_children) {
  ------------------
  |  Branch (33460:9): [True: 0, False: 44.3k]
  ------------------
33461|      0|        p->error_indicator = 1;
33462|      0|        PyErr_NoMemory();
33463|      0|        p->level--;
33464|      0|        return NULL;
33465|      0|    }
33466|  44.3k|    Py_ssize_t _children_capacity = 1;
33467|  44.3k|    Py_ssize_t _n = 0;
33468|  44.3k|    { // (',' star_target)
33469|  44.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (33469:13): [True: 0, False: 44.3k]
  ------------------
33470|      0|            p->level--;
33471|      0|            return NULL;
33472|      0|        }
33473|  44.3k|        D(fprintf(stderr, "%*c> _loop0_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)"));
33474|  44.3k|        void *_tmp_166_var;
33475|  44.3k|        while (
33476|   158k|            (_tmp_166_var = _tmp_166_rule(p))  // ',' star_target
  ------------------
  |  Branch (33476:13): [True: 114k, False: 44.3k]
  ------------------
33477|  44.3k|        )
33478|   114k|        {
33479|   114k|            _res = _tmp_166_var;
33480|   114k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (33480:17): [True: 28.0k, False: 85.9k]
  ------------------
33481|  28.0k|                _children_capacity *= 2;
33482|  28.0k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33483|  28.0k|                if (!_new_children) {
  ------------------
  |  Branch (33483:21): [True: 0, False: 28.0k]
  ------------------
33484|      0|                    PyMem_Free(_children);
33485|      0|                    p->error_indicator = 1;
33486|      0|                    PyErr_NoMemory();
33487|      0|                    p->level--;
33488|      0|                    return NULL;
33489|      0|                }
33490|  28.0k|                _children = _new_children;
33491|  28.0k|            }
33492|   114k|            _children[_n++] = _res;
33493|   114k|            _mark = p->mark;
33494|   114k|        }
33495|  44.3k|        p->mark = _mark;
33496|  44.3k|        D(fprintf(stderr, "%*c%s _loop0_98[%d-%d]: %s failed!\n", p->level, ' ',
33497|  44.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)"));
33498|  44.3k|    }
33499|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33500|  44.3k|    if (!_seq) {
  ------------------
  |  Branch (33500:9): [True: 0, False: 44.3k]
  ------------------
33501|      0|        PyMem_Free(_children);
33502|      0|        p->error_indicator = 1;
33503|      0|        PyErr_NoMemory();
33504|      0|        p->level--;
33505|      0|        return NULL;
33506|      0|    }
33507|   158k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|   114k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   158k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (33507:28): [True: 114k, False: 44.3k]
  ------------------
33508|  44.3k|    PyMem_Free(_children);
33509|  44.3k|    p->level--;
33510|  44.3k|    return _seq;
33511|  44.3k|}
parser.c:_tmp_166_rule:
37502|   158k|{
37503|   158k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   316k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37503:9): [True: 0, False: 158k]
  |  Branch (37503:35): [True: 0, False: 158k]
  ------------------
37504|      0|        _Pypegen_stack_overflow(p);
37505|      0|    }
37506|   158k|    if (p->error_indicator) {
  ------------------
  |  Branch (37506:9): [True: 0, False: 158k]
  ------------------
37507|      0|        p->level--;
37508|      0|        return NULL;
37509|      0|    }
37510|   158k|    void * _res = NULL;
37511|   158k|    int _mark = p->mark;
37512|   158k|    { // ',' star_target
37513|   158k|        if (p->error_indicator) {
  ------------------
  |  Branch (37513:13): [True: 0, False: 158k]
  ------------------
37514|      0|            p->level--;
37515|      0|            return NULL;
37516|      0|        }
37517|   158k|        D(fprintf(stderr, "%*c> _tmp_166[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target"));
37518|   158k|        Token * _literal;
37519|   158k|        expr_ty c;
37520|   158k|        if (
37521|   158k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (37521:13): [True: 136k, False: 21.8k]
  ------------------
37522|   136k|            &&
37523|   136k|            (c = star_target_rule(p))  // star_target
  ------------------
  |  Branch (37523:13): [True: 114k, False: 22.5k]
  ------------------
37524|   158k|        )
37525|   114k|        {
37526|   114k|            D(fprintf(stderr, "%*c+ _tmp_166[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_target"));
37527|   114k|            _res = c;
37528|   114k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37528:18): [True: 0, False: 114k]
  |  Branch (37528:34): [True: 0, False: 114k]
  |  Branch (37528:57): [True: 0, False: 0]
  ------------------
37529|      0|                p->error_indicator = 1;
37530|      0|                p->level--;
37531|      0|                return NULL;
37532|      0|            }
37533|   114k|            goto done;
37534|   114k|        }
37535|  44.3k|        p->mark = _mark;
37536|  44.3k|        D(fprintf(stderr, "%*c%s _tmp_166[%d-%d]: %s failed!\n", p->level, ' ',
37537|  44.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target"));
37538|  44.3k|    }
37539|  44.3k|    _res = NULL;
37540|   158k|  done:
37541|   158k|    p->level--;
37542|   158k|    return _res;
37543|  44.3k|}
parser.c:_loop0_88_rule:
32860|  23.1k|{
32861|  23.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  46.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32861:9): [True: 0, False: 23.1k]
  |  Branch (32861:35): [True: 0, False: 23.1k]
  ------------------
32862|      0|        _Pypegen_stack_overflow(p);
32863|      0|    }
32864|  23.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (32864:9): [True: 0, False: 23.1k]
  ------------------
32865|      0|        p->level--;
32866|      0|        return NULL;
32867|      0|    }
32868|  23.1k|    void *_res = NULL;
32869|  23.1k|    int _mark = p->mark;
32870|  23.1k|    void **_children = PyMem_Malloc(sizeof(void *));
32871|  23.1k|    if (!_children) {
  ------------------
  |  Branch (32871:9): [True: 0, False: 23.1k]
  ------------------
32872|      0|        p->error_indicator = 1;
32873|      0|        PyErr_NoMemory();
32874|      0|        p->level--;
32875|      0|        return NULL;
32876|      0|    }
32877|  23.1k|    Py_ssize_t _children_capacity = 1;
32878|  23.1k|    Py_ssize_t _n = 0;
32879|  23.1k|    { // ('if' disjunction)
32880|  23.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (32880:13): [True: 0, False: 23.1k]
  ------------------
32881|      0|            p->level--;
32882|      0|            return NULL;
32883|      0|        }
32884|  23.1k|        D(fprintf(stderr, "%*c> _loop0_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)"));
32885|  23.1k|        void *_tmp_164_var;
32886|  23.1k|        while (
32887|  26.0k|            (_tmp_164_var = _tmp_164_rule(p))  // 'if' disjunction
  ------------------
  |  Branch (32887:13): [True: 2.89k, False: 23.1k]
  ------------------
32888|  23.1k|        )
32889|  2.89k|        {
32890|  2.89k|            _res = _tmp_164_var;
32891|  2.89k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32891:17): [True: 1.15k, False: 1.74k]
  ------------------
32892|  1.15k|                _children_capacity *= 2;
32893|  1.15k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32894|  1.15k|                if (!_new_children) {
  ------------------
  |  Branch (32894:21): [True: 0, False: 1.15k]
  ------------------
32895|      0|                    PyMem_Free(_children);
32896|      0|                    p->error_indicator = 1;
32897|      0|                    PyErr_NoMemory();
32898|      0|                    p->level--;
32899|      0|                    return NULL;
32900|      0|                }
32901|  1.15k|                _children = _new_children;
32902|  1.15k|            }
32903|  2.89k|            _children[_n++] = _res;
32904|  2.89k|            _mark = p->mark;
32905|  2.89k|        }
32906|  23.1k|        p->mark = _mark;
32907|  23.1k|        D(fprintf(stderr, "%*c%s _loop0_88[%d-%d]: %s failed!\n", p->level, ' ',
32908|  23.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)"));
32909|  23.1k|    }
32910|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32911|  23.1k|    if (!_seq) {
  ------------------
  |  Branch (32911:9): [True: 0, False: 23.1k]
  ------------------
32912|      0|        PyMem_Free(_children);
32913|      0|        p->error_indicator = 1;
32914|      0|        PyErr_NoMemory();
32915|      0|        p->level--;
32916|      0|        return NULL;
32917|      0|    }
32918|  26.0k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  2.89k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  26.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32918:28): [True: 2.89k, False: 23.1k]
  ------------------
32919|  23.1k|    PyMem_Free(_children);
32920|  23.1k|    p->level--;
32921|  23.1k|    return _seq;
32922|  23.1k|}
parser.c:_tmp_164_rule:
37397|  26.0k|{
37398|  26.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  52.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37398:9): [True: 0, False: 26.0k]
  |  Branch (37398:35): [True: 0, False: 26.0k]
  ------------------
37399|      0|        _Pypegen_stack_overflow(p);
37400|      0|    }
37401|  26.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (37401:9): [True: 0, False: 26.0k]
  ------------------
37402|      0|        p->level--;
37403|      0|        return NULL;
37404|      0|    }
37405|  26.0k|    void * _res = NULL;
37406|  26.0k|    int _mark = p->mark;
37407|  26.0k|    { // 'if' disjunction
37408|  26.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (37408:13): [True: 0, False: 26.0k]
  ------------------
37409|      0|            p->level--;
37410|      0|            return NULL;
37411|      0|        }
37412|  26.0k|        D(fprintf(stderr, "%*c> _tmp_164[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
37413|  26.0k|        Token * _keyword;
37414|  26.0k|        expr_ty z;
37415|  26.0k|        if (
37416|  26.0k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (37416:13): [True: 3.38k, False: 22.6k]
  ------------------
37417|  3.38k|            &&
37418|  3.38k|            (z = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (37418:13): [True: 2.89k, False: 495]
  ------------------
37419|  26.0k|        )
37420|  2.89k|        {
37421|  2.89k|            D(fprintf(stderr, "%*c+ _tmp_164[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' disjunction"));
37422|  2.89k|            _res = z;
37423|  2.89k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37423:18): [True: 0, False: 2.89k]
  |  Branch (37423:34): [True: 0, False: 2.89k]
  |  Branch (37423:57): [True: 0, False: 0]
  ------------------
37424|      0|                p->error_indicator = 1;
37425|      0|                p->level--;
37426|      0|                return NULL;
37427|      0|            }
37428|  2.89k|            goto done;
37429|  2.89k|        }
37430|  23.1k|        p->mark = _mark;
37431|  23.1k|        D(fprintf(stderr, "%*c%s _tmp_164[%d-%d]: %s failed!\n", p->level, ' ',
37432|  23.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' disjunction"));
37433|  23.1k|    }
37434|  23.1k|    _res = NULL;
37435|  26.0k|  done:
37436|  26.0k|    p->level--;
37437|  26.0k|    return _res;
37438|  23.1k|}
parser.c:invalid_for_if_clause_rule:
22856|  69.5k|{
22857|  69.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   139k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22857:9): [True: 0, False: 69.5k]
  |  Branch (22857:35): [True: 0, False: 69.5k]
  ------------------
22858|      0|        _Pypegen_stack_overflow(p);
22859|      0|    }
22860|  69.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (22860:9): [True: 0, False: 69.5k]
  ------------------
22861|      0|        p->level--;
22862|      0|        return NULL;
22863|      0|    }
22864|  69.5k|    void * _res = NULL;
22865|  69.5k|    int _mark = p->mark;
22866|  69.5k|    { // 'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'
22867|  69.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (22867:13): [True: 0, False: 69.5k]
  ------------------
22868|      0|            p->level--;
22869|      0|            return NULL;
22870|      0|        }
22871|  69.5k|        D(fprintf(stderr, "%*c> invalid_for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'"));
22872|  69.5k|        Token * _keyword;
22873|  69.5k|        void *_opt_var;
22874|  69.5k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  69.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 69.5k]
  |  |  ------------------
  ------------------
22875|  69.5k|        void *_tmp_134_var;
22876|  69.5k|        if (
22877|  69.5k|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (22877:13): [True: 69.5k, False: 0]
  ------------------
22878|  69.5k|            &&
22879|  69.5k|            (_keyword = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (22879:13): [True: 2.41k, False: 67.1k]
  ------------------
22880|  2.41k|            &&
22881|  2.41k|            (_tmp_134_var = _tmp_134_rule(p))  // bitwise_or ((',' bitwise_or))* ','?
  ------------------
  |  Branch (22881:13): [True: 57, False: 2.35k]
  ------------------
22882|     57|            &&
22883|     57|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 713)  // token='in'
  ------------------
  |  Branch (22883:13): [True: 38, False: 19]
  ------------------
22884|  69.5k|        )
22885|     38|        {
22886|     38|            D(fprintf(stderr, "%*c+ invalid_for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'"));
22887|     38|            _res = RAISE_SYNTAX_ERROR ( "'in' expected after for-loop variables" );
  ------------------
  |  |  233|     38|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
22888|     38|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22888:18): [True: 38, False: 0]
  |  Branch (22888:34): [True: 0, False: 0]
  |  Branch (22888:57): [True: 38, False: 0]
  ------------------
22889|     38|                p->error_indicator = 1;
22890|     38|                p->level--;
22891|     38|                return NULL;
22892|     38|            }
22893|      0|            goto done;
22894|     38|        }
22895|  69.5k|        p->mark = _mark;
22896|  69.5k|        D(fprintf(stderr, "%*c%s invalid_for_if_clause[%d-%d]: %s failed!\n", p->level, ' ',
22897|  69.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' (bitwise_or ((',' bitwise_or))* ','?) !'in'"));
22898|  69.5k|    }
22899|  69.5k|    _res = NULL;
22900|  69.5k|  done:
22901|  69.5k|    p->level--;
22902|  69.5k|    return _res;
22903|  69.5k|}
parser.c:_tmp_134_rule:
35640|  2.41k|{
35641|  2.41k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.82k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35641:9): [True: 0, False: 2.41k]
  |  Branch (35641:35): [True: 0, False: 2.41k]
  ------------------
35642|      0|        _Pypegen_stack_overflow(p);
35643|      0|    }
35644|  2.41k|    if (p->error_indicator) {
  ------------------
  |  Branch (35644:9): [True: 0, False: 2.41k]
  ------------------
35645|      0|        p->level--;
35646|      0|        return NULL;
35647|      0|    }
35648|  2.41k|    void * _res = NULL;
35649|  2.41k|    int _mark = p->mark;
35650|  2.41k|    { // bitwise_or ((',' bitwise_or))* ','?
35651|  2.41k|        if (p->error_indicator) {
  ------------------
  |  Branch (35651:13): [True: 0, False: 2.41k]
  ------------------
35652|      0|            p->level--;
35653|      0|            return NULL;
35654|      0|        }
35655|  2.41k|        D(fprintf(stderr, "%*c> _tmp_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?"));
35656|  2.41k|        asdl_seq * _loop0_172_var;
35657|  2.41k|        void *_opt_var;
35658|  2.41k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  2.41k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.41k]
  |  |  ------------------
  ------------------
35659|  2.41k|        expr_ty bitwise_or_var;
35660|  2.41k|        if (
35661|  2.41k|            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (35661:13): [True: 1.08k, False: 1.32k]
  ------------------
35662|  1.08k|            &&
35663|  1.08k|            (_loop0_172_var = _loop0_172_rule(p))  // ((',' bitwise_or))*
  ------------------
  |  Branch (35663:13): [True: 1.08k, False: 0]
  ------------------
35664|  1.08k|            &&
35665|  1.08k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (35665:13): [True: 57, False: 1.02k]
  ------------------
35666|  2.41k|        )
35667|     57|        {
35668|     57|            D(fprintf(stderr, "%*c+ _tmp_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?"));
35669|     57|            _res = _PyPegen_dummy_name(p, bitwise_or_var, _loop0_172_var, _opt_var);
35670|     57|            goto done;
35671|     57|        }
35672|  2.35k|        p->mark = _mark;
35673|  2.35k|        D(fprintf(stderr, "%*c%s _tmp_134[%d-%d]: %s failed!\n", p->level, ' ',
35674|  2.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or ((',' bitwise_or))* ','?"));
35675|  2.35k|    }
35676|  2.35k|    _res = NULL;
35677|  2.41k|  done:
35678|  2.41k|    p->level--;
35679|  2.41k|    return _res;
35680|  2.35k|}
parser.c:_loop0_172_rule:
37787|  1.08k|{
37788|  1.08k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.17k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37788:9): [True: 0, False: 1.08k]
  |  Branch (37788:35): [True: 0, False: 1.08k]
  ------------------
37789|      0|        _Pypegen_stack_overflow(p);
37790|      0|    }
37791|  1.08k|    if (p->error_indicator) {
  ------------------
  |  Branch (37791:9): [True: 0, False: 1.08k]
  ------------------
37792|      0|        p->level--;
37793|      0|        return NULL;
37794|      0|    }
37795|  1.08k|    void *_res = NULL;
37796|  1.08k|    int _mark = p->mark;
37797|  1.08k|    void **_children = PyMem_Malloc(sizeof(void *));
37798|  1.08k|    if (!_children) {
  ------------------
  |  Branch (37798:9): [True: 0, False: 1.08k]
  ------------------
37799|      0|        p->error_indicator = 1;
37800|      0|        PyErr_NoMemory();
37801|      0|        p->level--;
37802|      0|        return NULL;
37803|      0|    }
37804|  1.08k|    Py_ssize_t _children_capacity = 1;
37805|  1.08k|    Py_ssize_t _n = 0;
37806|  1.08k|    { // (',' bitwise_or)
37807|  1.08k|        if (p->error_indicator) {
  ------------------
  |  Branch (37807:13): [True: 0, False: 1.08k]
  ------------------
37808|      0|            p->level--;
37809|      0|            return NULL;
37810|      0|        }
37811|  1.08k|        D(fprintf(stderr, "%*c> _loop0_172[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' bitwise_or)"));
37812|  1.08k|        void *_tmp_177_var;
37813|  1.08k|        while (
37814|  2.25k|            (_tmp_177_var = _tmp_177_rule(p))  // ',' bitwise_or
  ------------------
  |  Branch (37814:13): [True: 1.17k, False: 1.08k]
  ------------------
37815|  1.08k|        )
37816|  1.17k|        {
37817|  1.17k|            _res = _tmp_177_var;
37818|  1.17k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (37818:17): [True: 470, False: 700]
  ------------------
37819|    470|                _children_capacity *= 2;
37820|    470|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
37821|    470|                if (!_new_children) {
  ------------------
  |  Branch (37821:21): [True: 0, False: 470]
  ------------------
37822|      0|                    PyMem_Free(_children);
37823|      0|                    p->error_indicator = 1;
37824|      0|                    PyErr_NoMemory();
37825|      0|                    p->level--;
37826|      0|                    return NULL;
37827|      0|                }
37828|    470|                _children = _new_children;
37829|    470|            }
37830|  1.17k|            _children[_n++] = _res;
37831|  1.17k|            _mark = p->mark;
37832|  1.17k|        }
37833|  1.08k|        p->mark = _mark;
37834|  1.08k|        D(fprintf(stderr, "%*c%s _loop0_172[%d-%d]: %s failed!\n", p->level, ' ',
37835|  1.08k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' bitwise_or)"));
37836|  1.08k|    }
37837|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
37838|  1.08k|    if (!_seq) {
  ------------------
  |  Branch (37838:9): [True: 0, False: 1.08k]
  ------------------
37839|      0|        PyMem_Free(_children);
37840|      0|        p->error_indicator = 1;
37841|      0|        PyErr_NoMemory();
37842|      0|        p->level--;
37843|      0|        return NULL;
37844|      0|    }
37845|  2.25k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  1.17k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  2.25k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (37845:28): [True: 1.17k, False: 1.08k]
  ------------------
37846|  1.08k|    PyMem_Free(_children);
37847|  1.08k|    p->level--;
37848|  1.08k|    return _seq;
37849|  1.08k|}
parser.c:_tmp_177_rule:
38092|  2.25k|{
38093|  2.25k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.51k|#  define MAXSTACK 6000
  ------------------
  |  Branch (38093:9): [True: 0, False: 2.25k]
  |  Branch (38093:35): [True: 0, False: 2.25k]
  ------------------
38094|      0|        _Pypegen_stack_overflow(p);
38095|      0|    }
38096|  2.25k|    if (p->error_indicator) {
  ------------------
  |  Branch (38096:9): [True: 0, False: 2.25k]
  ------------------
38097|      0|        p->level--;
38098|      0|        return NULL;
38099|      0|    }
38100|  2.25k|    void * _res = NULL;
38101|  2.25k|    int _mark = p->mark;
38102|  2.25k|    { // ',' bitwise_or
38103|  2.25k|        if (p->error_indicator) {
  ------------------
  |  Branch (38103:13): [True: 0, False: 2.25k]
  ------------------
38104|      0|            p->level--;
38105|      0|            return NULL;
38106|      0|        }
38107|  2.25k|        D(fprintf(stderr, "%*c> _tmp_177[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' bitwise_or"));
38108|  2.25k|        Token * _literal;
38109|  2.25k|        expr_ty bitwise_or_var;
38110|  2.25k|        if (
38111|  2.25k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (38111:13): [True: 2.20k, False: 52]
  ------------------
38112|  2.20k|            &&
38113|  2.20k|            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (38113:13): [True: 1.17k, False: 1.03k]
  ------------------
38114|  2.25k|        )
38115|  1.17k|        {
38116|  1.17k|            D(fprintf(stderr, "%*c+ _tmp_177[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' bitwise_or"));
38117|  1.17k|            _res = _PyPegen_dummy_name(p, _literal, bitwise_or_var);
38118|  1.17k|            goto done;
38119|  1.17k|        }
38120|  1.08k|        p->mark = _mark;
38121|  1.08k|        D(fprintf(stderr, "%*c%s _tmp_177[%d-%d]: %s failed!\n", p->level, ' ',
38122|  1.08k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' bitwise_or"));
38123|  1.08k|    }
38124|  1.08k|    _res = NULL;
38125|  2.25k|  done:
38126|  2.25k|    p->level--;
38127|  2.25k|    return _res;
38128|  1.08k|}
parser.c:invalid_for_target_rule:
22908|  68.6k|{
22909|  68.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   137k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22909:9): [True: 0, False: 68.6k]
  |  Branch (22909:35): [True: 0, False: 68.6k]
  ------------------
22910|      0|        _Pypegen_stack_overflow(p);
22911|      0|    }
22912|  68.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (22912:9): [True: 0, False: 68.6k]
  ------------------
22913|      0|        p->level--;
22914|      0|        return NULL;
22915|      0|    }
22916|  68.6k|    void * _res = NULL;
22917|  68.6k|    int _mark = p->mark;
22918|  68.6k|    { // 'async'? 'for' star_expressions
22919|  68.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (22919:13): [True: 0, False: 68.6k]
  ------------------
22920|      0|            p->level--;
22921|      0|            return NULL;
22922|      0|        }
22923|  68.6k|        D(fprintf(stderr, "%*c> invalid_for_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_expressions"));
22924|  68.6k|        Token * _keyword;
22925|  68.6k|        void *_opt_var;
22926|  68.6k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  68.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 68.6k]
  |  |  ------------------
  ------------------
22927|  68.6k|        expr_ty a;
22928|  68.6k|        if (
22929|  68.6k|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (22929:13): [True: 68.6k, False: 0]
  ------------------
22930|  68.6k|            &&
22931|  68.6k|            (_keyword = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (22931:13): [True: 1.35k, False: 67.2k]
  ------------------
22932|  1.35k|            &&
22933|  1.35k|            (a = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (22933:13): [True: 676, False: 681]
  ------------------
22934|  68.6k|        )
22935|    676|        {
22936|    676|            D(fprintf(stderr, "%*c+ invalid_for_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_expressions"));
22937|    676|            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( FOR_TARGETS , a );
  ------------------
  |  |  242|    676|#define RAISE_SYNTAX_ERROR_INVALID_TARGET(type, e) _RAISE_SYNTAX_ERROR_INVALID_TARGET(p, type, e)
  ------------------
22938|    676|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22938:18): [True: 676, False: 0]
  |  Branch (22938:34): [True: 0, False: 0]
  |  Branch (22938:57): [True: 11, False: 665]
  ------------------
22939|     11|                p->error_indicator = 1;
22940|     11|                p->level--;
22941|     11|                return NULL;
22942|     11|            }
22943|    665|            goto done;
22944|    676|        }
22945|  67.9k|        p->mark = _mark;
22946|  67.9k|        D(fprintf(stderr, "%*c%s invalid_for_target[%d-%d]: %s failed!\n", p->level, ' ',
22947|  67.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' star_expressions"));
22948|  67.9k|    }
22949|  67.9k|    _res = NULL;
22950|  68.6k|  done:
22951|  68.6k|    p->level--;
22952|  68.6k|    return _res;
22953|  67.9k|}
parser.c:star_expressions_rule:
11868|   510k|{
11869|   510k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.02M|#  define MAXSTACK 6000
  ------------------
  |  Branch (11869:9): [True: 0, False: 510k]
  |  Branch (11869:35): [True: 0, False: 510k]
  ------------------
11870|      0|        _Pypegen_stack_overflow(p);
11871|      0|    }
11872|   510k|    if (p->error_indicator) {
  ------------------
  |  Branch (11872:9): [True: 0, False: 510k]
  ------------------
11873|      0|        p->level--;
11874|      0|        return NULL;
11875|      0|    }
11876|   510k|    expr_ty _res = NULL;
11877|   510k|    int _mark = p->mark;
11878|   510k|    expr_ty _prefix_1_result = NULL;
11879|   510k|    int _prefix_1_end = 0, _prefix_1_valid = 0;
11880|   510k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (11880:9): [True: 3.36k, False: 507k]
  |  Branch (11880:31): [True: 2, False: 3.36k]
  ------------------
11881|      2|        p->error_indicator = 1;
11882|      2|        p->level--;
11883|      2|        return NULL;
11884|      2|    }
11885|   510k|    int _start_lineno = p->tokens[_mark]->lineno;
11886|   510k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   510k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 510k]
  |  |  ------------------
  ------------------
11887|   510k|    int _start_col_offset = p->tokens[_mark]->col_offset;
11888|   510k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   510k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 510k]
  |  |  ------------------
  ------------------
11889|   510k|    { // star_expression ((',' star_expression))+ ','?
11890|   510k|        if (p->error_indicator) {
  ------------------
  |  Branch (11890:13): [True: 0, False: 510k]
  ------------------
11891|      0|            p->level--;
11892|      0|            return NULL;
11893|      0|        }
11894|   510k|        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
11895|   510k|        void *_opt_var;
11896|   510k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|   510k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 510k]
  |  |  ------------------
  ------------------
11897|   510k|        expr_ty a;
11898|   510k|        asdl_seq * b;
11899|   510k|        if (
11900|   510k|            (a = ((!p->call_invalid_rules && _prefix_1_valid) ? (p->mark = _prefix_1_end, _prefix_1_result) : (_prefix_1_result = star_expression_rule(p), _prefix_1_end = p->mark, _prefix_1_valid = 1, _prefix_1_result)))  // star_expression
  ------------------
  |  Branch (11900:13): [True: 316k, False: 194k]
  |  Branch (11900:20): [True: 259k, False: 251k]
  |  Branch (11900:46): [True: 0, False: 259k]
  ------------------
11901|   316k|            &&
11902|   316k|            (b = _loop1_56_rule(p))  // ((',' star_expression))+
  ------------------
  |  Branch (11902:13): [True: 18.9k, False: 297k]
  ------------------
11903|  18.9k|            &&
11904|  18.9k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (11904:13): [True: 18.9k, False: 0]
  ------------------
11905|   510k|        )
11906|  18.9k|        {
11907|  18.9k|            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
11908|  18.9k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11909|  18.9k|            if (_token == NULL) {
  ------------------
  |  Branch (11909:17): [True: 0, False: 18.9k]
  ------------------
11910|      0|                p->level--;
11911|      0|                return NULL;
11912|      0|            }
11913|  18.9k|            int _end_lineno = _token->end_lineno;
11914|  18.9k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.9k]
  |  |  ------------------
  ------------------
11915|  18.9k|            int _end_col_offset = _token->end_col_offset;
11916|  18.9k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.9k]
  |  |  ------------------
  ------------------
11917|  18.9k|            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
  ------------------
  |  |  271|  18.9k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
  ------------------
  |  |  307|  18.9k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11918|  18.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11918:18): [True: 0, False: 18.9k]
  |  Branch (11918:34): [True: 0, False: 18.9k]
  |  Branch (11918:57): [True: 0, False: 0]
  ------------------
11919|      0|                p->error_indicator = 1;
11920|      0|                p->level--;
11921|      0|                return NULL;
11922|      0|            }
11923|  18.9k|            goto done;
11924|  18.9k|        }
11925|   491k|        p->mark = _mark;
11926|   491k|        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11927|   491k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression ((',' star_expression))+ ','?"));
11928|   491k|    }
11929|      0|    { // star_expression ','
11930|   491k|        if (p->error_indicator) {
  ------------------
  |  Branch (11930:13): [True: 17.5k, False: 474k]
  ------------------
11931|  17.5k|            p->level--;
11932|  17.5k|            return NULL;
11933|  17.5k|        }
11934|   474k|        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
11935|   474k|        Token * _literal;
11936|   474k|        expr_ty a;
11937|   474k|        if (
11938|   474k|            (a = ((!p->call_invalid_rules && _prefix_1_valid) ? (p->mark = _prefix_1_end, _prefix_1_result) : (_prefix_1_result = star_expression_rule(p), _prefix_1_end = p->mark, _prefix_1_valid = 1, _prefix_1_result)))  // star_expression
  ------------------
  |  Branch (11938:13): [True: 297k, False: 177k]
  |  Branch (11938:20): [True: 245k, False: 229k]
  |  Branch (11938:46): [True: 245k, False: 0]
  ------------------
11939|   297k|            &&
11940|   297k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (11940:13): [True: 6.04k, False: 291k]
  ------------------
11941|   474k|        )
11942|  6.04k|        {
11943|  6.04k|            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression ','"));
11944|  6.04k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11945|  6.04k|            if (_token == NULL) {
  ------------------
  |  Branch (11945:17): [True: 0, False: 6.04k]
  ------------------
11946|      0|                p->level--;
11947|      0|                return NULL;
11948|      0|            }
11949|  6.04k|            int _end_lineno = _token->end_lineno;
11950|  6.04k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.04k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.04k]
  |  |  ------------------
  ------------------
11951|  6.04k|            int _end_col_offset = _token->end_col_offset;
11952|  6.04k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.04k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.04k]
  |  |  ------------------
  ------------------
11953|  6.04k|            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
  ------------------
  |  |  271|  6.04k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
  ------------------
  |  |  307|  6.04k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11954|  6.04k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11954:18): [True: 0, False: 6.04k]
  |  Branch (11954:34): [True: 0, False: 6.04k]
  |  Branch (11954:57): [True: 0, False: 0]
  ------------------
11955|      0|                p->error_indicator = 1;
11956|      0|                p->level--;
11957|      0|                return NULL;
11958|      0|            }
11959|  6.04k|            goto done;
11960|  6.04k|        }
11961|   468k|        p->mark = _mark;
11962|   468k|        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11963|   468k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression ','"));
11964|   468k|    }
11965|      0|    { // star_expression
11966|   468k|        if (p->error_indicator) {
  ------------------
  |  Branch (11966:13): [True: 0, False: 468k]
  ------------------
11967|      0|            p->level--;
11968|      0|            return NULL;
11969|      0|        }
11970|   468k|        D(fprintf(stderr, "%*c> star_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expression"));
11971|   468k|        expr_ty star_expression_var;
11972|   468k|        if (
11973|   468k|            (star_expression_var = ((!p->call_invalid_rules && _prefix_1_valid) ? (p->mark = _prefix_1_end, _prefix_1_result) : (_prefix_1_result = star_expression_rule(p), _prefix_1_end = p->mark, _prefix_1_valid = 1, _prefix_1_result)))  // star_expression
  ------------------
  |  Branch (11973:13): [True: 291k, False: 177k]
  |  Branch (11973:38): [True: 243k, False: 224k]
  |  Branch (11973:64): [True: 243k, False: 0]
  ------------------
11974|   468k|        )
11975|   291k|        {
11976|   291k|            D(fprintf(stderr, "%*c+ star_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expression"));
11977|   291k|            _res = star_expression_var;
11978|   291k|            goto done;
11979|   291k|        }
11980|   177k|        p->mark = _mark;
11981|   177k|        D(fprintf(stderr, "%*c%s star_expressions[%d-%d]: %s failed!\n", p->level, ' ',
11982|   177k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expression"));
11983|   177k|    }
11984|   177k|    _res = NULL;
11985|   493k|  done:
11986|   493k|    p->level--;
11987|   493k|    return _res;
11988|   177k|}
parser.c:star_expression_rule:
11993|  1.09M|{
11994|  1.09M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.18M|#  define MAXSTACK 6000
  ------------------
  |  Branch (11994:9): [True: 0, False: 1.09M]
  |  Branch (11994:35): [True: 0, False: 1.09M]
  ------------------
11995|      0|        _Pypegen_stack_overflow(p);
11996|      0|    }
11997|  1.09M|    if (p->error_indicator) {
  ------------------
  |  Branch (11997:9): [True: 0, False: 1.09M]
  ------------------
11998|      0|        p->level--;
11999|      0|        return NULL;
12000|      0|    }
12001|  1.09M|    expr_ty _res = NULL;
12002|  1.09M|    if (_PyPegen_is_memoized(p, star_expression_type, &_res)) {
  ------------------
  |  |  202|  1.09M|#define star_expression_type 1113
  ------------------
  |  Branch (12002:9): [True: 568k, False: 523k]
  ------------------
12003|   568k|        p->level--;
12004|   568k|        return _res;
12005|   568k|    }
12006|   523k|    int _mark = p->mark;
12007|   523k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12007:9): [True: 0, False: 523k]
  |  Branch (12007:31): [True: 0, False: 0]
  ------------------
12008|      0|        p->error_indicator = 1;
12009|      0|        p->level--;
12010|      0|        return NULL;
12011|      0|    }
12012|   523k|    int _start_lineno = p->tokens[_mark]->lineno;
12013|   523k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   523k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 523k]
  |  |  ------------------
  ------------------
12014|   523k|    int _start_col_offset = p->tokens[_mark]->col_offset;
12015|   523k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   523k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 523k]
  |  |  ------------------
  ------------------
12016|   523k|    { // '*' bitwise_or
12017|   523k|        if (p->error_indicator) {
  ------------------
  |  Branch (12017:13): [True: 0, False: 523k]
  ------------------
12018|      0|            p->level--;
12019|      0|            return NULL;
12020|      0|        }
12021|   523k|        D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
12022|   523k|        Token * _literal;
12023|   523k|        expr_ty a;
12024|   523k|        if (
12025|   523k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (12025:13): [True: 7.22k, False: 515k]
  ------------------
12026|  7.22k|            &&
12027|  7.22k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12027:13): [True: 6.45k, False: 773]
  ------------------
12028|   523k|        )
12029|  6.45k|        {
12030|  6.45k|            D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
12031|  6.45k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12032|  6.45k|            if (_token == NULL) {
  ------------------
  |  Branch (12032:17): [True: 0, False: 6.45k]
  ------------------
12033|      0|                p->level--;
12034|      0|                return NULL;
12035|      0|            }
12036|  6.45k|            int _end_lineno = _token->end_lineno;
12037|  6.45k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.45k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.45k]
  |  |  ------------------
  ------------------
12038|  6.45k|            int _end_col_offset = _token->end_col_offset;
12039|  6.45k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.45k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.45k]
  |  |  ------------------
  ------------------
12040|  6.45k|            _res = _PyAST_Starred ( a , Load , EXTRA );
  ------------------
  |  |  307|  6.45k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
12041|  6.45k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12041:18): [True: 0, False: 6.45k]
  |  Branch (12041:34): [True: 0, False: 6.45k]
  |  Branch (12041:57): [True: 0, False: 0]
  ------------------
12042|      0|                p->error_indicator = 1;
12043|      0|                p->level--;
12044|      0|                return NULL;
12045|      0|            }
12046|  6.45k|            goto done;
12047|  6.45k|        }
12048|   516k|        p->mark = _mark;
12049|   516k|        D(fprintf(stderr, "%*c%s star_expression[%d-%d]: %s failed!\n", p->level, ' ',
12050|   516k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or"));
12051|   516k|    }
12052|      0|    { // expression
12053|   516k|        if (p->error_indicator) {
  ------------------
  |  Branch (12053:13): [True: 254, False: 516k]
  ------------------
12054|    254|            p->level--;
12055|    254|            return NULL;
12056|    254|        }
12057|   516k|        D(fprintf(stderr, "%*c> star_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
12058|   516k|        expr_ty expression_var;
12059|   516k|        if (
12060|   516k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (12060:13): [True: 343k, False: 172k]
  ------------------
12061|   516k|        )
12062|   343k|        {
12063|   343k|            D(fprintf(stderr, "%*c+ star_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
12064|   343k|            _res = expression_var;
12065|   343k|            goto done;
12066|   343k|        }
12067|   172k|        p->mark = _mark;
12068|   172k|        D(fprintf(stderr, "%*c%s star_expression[%d-%d]: %s failed!\n", p->level, ' ',
12069|   172k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
12070|   172k|    }
12071|   172k|    _res = NULL;
12072|   522k|  done:
12073|   522k|    _PyPegen_insert_memo(p, _mark, star_expression_type, _res);
  ------------------
  |  |  202|   522k|#define star_expression_type 1113
  ------------------
12074|   522k|    p->level--;
12075|   522k|    return _res;
12076|   172k|}
parser.c:_loop1_56_rule:
30780|   316k|{
30781|   316k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   633k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30781:9): [True: 0, False: 316k]
  |  Branch (30781:35): [True: 0, False: 316k]
  ------------------
30782|      0|        _Pypegen_stack_overflow(p);
30783|      0|    }
30784|   316k|    if (p->error_indicator) {
  ------------------
  |  Branch (30784:9): [True: 0, False: 316k]
  ------------------
30785|      0|        p->level--;
30786|      0|        return NULL;
30787|      0|    }
30788|   316k|    void *_res = NULL;
30789|   316k|    int _mark = p->mark;
30790|   316k|    void **_children = PyMem_Malloc(sizeof(void *));
30791|   316k|    if (!_children) {
  ------------------
  |  Branch (30791:9): [True: 0, False: 316k]
  ------------------
30792|      0|        p->error_indicator = 1;
30793|      0|        PyErr_NoMemory();
30794|      0|        p->level--;
30795|      0|        return NULL;
30796|      0|    }
30797|   316k|    Py_ssize_t _children_capacity = 1;
30798|   316k|    Py_ssize_t _n = 0;
30799|   316k|    { // (',' star_expression)
30800|   316k|        if (p->error_indicator) {
  ------------------
  |  Branch (30800:13): [True: 0, False: 316k]
  ------------------
30801|      0|            p->level--;
30802|      0|            return NULL;
30803|      0|        }
30804|   316k|        D(fprintf(stderr, "%*c> _loop1_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)"));
30805|   316k|        void *_tmp_160_var;
30806|   316k|        while (
30807|   434k|            (_tmp_160_var = _tmp_160_rule(p))  // ',' star_expression
  ------------------
  |  Branch (30807:13): [True: 118k, False: 316k]
  ------------------
30808|   316k|        )
30809|   118k|        {
30810|   118k|            _res = _tmp_160_var;
30811|   118k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30811:17): [True: 24.0k, False: 94.0k]
  ------------------
30812|  24.0k|                _children_capacity *= 2;
30813|  24.0k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30814|  24.0k|                if (!_new_children) {
  ------------------
  |  Branch (30814:21): [True: 0, False: 24.0k]
  ------------------
30815|      0|                    PyMem_Free(_children);
30816|      0|                    p->error_indicator = 1;
30817|      0|                    PyErr_NoMemory();
30818|      0|                    p->level--;
30819|      0|                    return NULL;
30820|      0|                }
30821|  24.0k|                _children = _new_children;
30822|  24.0k|            }
30823|   118k|            _children[_n++] = _res;
30824|   118k|            _mark = p->mark;
30825|   118k|        }
30826|   316k|        p->mark = _mark;
30827|   316k|        D(fprintf(stderr, "%*c%s _loop1_56[%d-%d]: %s failed!\n", p->level, ' ',
30828|   316k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)"));
30829|   316k|    }
30830|   316k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (30830:9): [True: 297k, False: 19.1k]
  |  Branch (30830:20): [True: 221, False: 18.9k]
  ------------------
30831|   297k|        PyMem_Free(_children);
30832|   297k|        p->level--;
30833|   297k|        return NULL;
30834|   297k|    }
30835|  18.9k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30836|  18.9k|    if (!_seq) {
  ------------------
  |  Branch (30836:9): [True: 0, False: 18.9k]
  ------------------
30837|      0|        PyMem_Free(_children);
30838|      0|        p->error_indicator = 1;
30839|      0|        PyErr_NoMemory();
30840|      0|        p->level--;
30841|      0|        return NULL;
30842|      0|    }
30843|   135k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|   117k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   135k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30843:28): [True: 117k, False: 18.9k]
  ------------------
30844|  18.9k|    PyMem_Free(_children);
30845|  18.9k|    p->level--;
30846|  18.9k|    return _seq;
30847|  18.9k|}
parser.c:_tmp_160_rule:
37202|   434k|{
37203|   434k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   869k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37203:9): [True: 0, False: 434k]
  |  Branch (37203:35): [True: 0, False: 434k]
  ------------------
37204|      0|        _Pypegen_stack_overflow(p);
37205|      0|    }
37206|   434k|    if (p->error_indicator) {
  ------------------
  |  Branch (37206:9): [True: 0, False: 434k]
  ------------------
37207|      0|        p->level--;
37208|      0|        return NULL;
37209|      0|    }
37210|   434k|    void * _res = NULL;
37211|   434k|    int _mark = p->mark;
37212|   434k|    { // ',' star_expression
37213|   434k|        if (p->error_indicator) {
  ------------------
  |  Branch (37213:13): [True: 0, False: 434k]
  ------------------
37214|      0|            p->level--;
37215|      0|            return NULL;
37216|      0|        }
37217|   434k|        D(fprintf(stderr, "%*c> _tmp_160[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
37218|   434k|        Token * _literal;
37219|   434k|        expr_ty c;
37220|   434k|        if (
37221|   434k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (37221:13): [True: 125k, False: 309k]
  ------------------
37222|   125k|            &&
37223|   125k|            (c = star_expression_rule(p))  // star_expression
  ------------------
  |  Branch (37223:13): [True: 118k, False: 7.60k]
  ------------------
37224|   434k|        )
37225|   118k|        {
37226|   118k|            D(fprintf(stderr, "%*c+ _tmp_160[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression"));
37227|   118k|            _res = c;
37228|   118k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37228:18): [True: 0, False: 118k]
  |  Branch (37228:34): [True: 0, False: 118k]
  |  Branch (37228:57): [True: 0, False: 0]
  ------------------
37229|      0|                p->error_indicator = 1;
37230|      0|                p->level--;
37231|      0|                return NULL;
37232|      0|            }
37233|   118k|            goto done;
37234|   118k|        }
37235|   316k|        p->mark = _mark;
37236|   316k|        D(fprintf(stderr, "%*c%s _tmp_160[%d-%d]: %s failed!\n", p->level, ' ',
37237|   316k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression"));
37238|   316k|    }
37239|   316k|    _res = NULL;
37240|   434k|  done:
37241|   434k|    p->level--;
37242|   434k|    return _res;
37243|   316k|}
parser.c:invalid_comprehension_rule:
21485|   400k|{
21486|   400k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   801k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21486:9): [True: 1, False: 400k]
  |  Branch (21486:35): [True: 0, False: 400k]
  ------------------
21487|      1|        _Pypegen_stack_overflow(p);
21488|      1|    }
21489|   400k|    if (p->error_indicator) {
  ------------------
  |  Branch (21489:9): [True: 1, False: 400k]
  ------------------
21490|      1|        p->level--;
21491|      1|        return NULL;
21492|      1|    }
21493|   400k|    void * _res = NULL;
21494|   400k|    int _mark = p->mark;
21495|   400k|    { // '[' '**' expression for_if_clauses
21496|   400k|        if (p->error_indicator) {
  ------------------
  |  Branch (21496:13): [True: 0, False: 400k]
  ------------------
21497|      0|            p->level--;
21498|      0|            return NULL;
21499|      0|        }
21500|   400k|        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' '**' expression for_if_clauses"));
21501|   400k|        Token * _literal;
21502|   400k|        Token * a;
21503|   400k|        expr_ty b;
21504|   400k|        asdl_comprehension_seq* for_if_clauses_var;
21505|   400k|        if (
21506|   400k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (21506:13): [True: 22.5k, False: 377k]
  ------------------
21507|  22.5k|            &&
21508|  22.5k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (21508:13): [True: 568, False: 21.9k]
  ------------------
21509|    568|            &&
21510|    568|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (21510:13): [True: 206, False: 362]
  ------------------
21511|    206|            &&
21512|    206|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (21512:13): [True: 1, False: 205]
  ------------------
21513|   400k|        )
21514|      1|        {
21515|      1|            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' '**' expression for_if_clauses"));
21516|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use dict unpacking in list comprehension" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21517|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21517:18): [True: 1, False: 0]
  |  Branch (21517:34): [True: 0, False: 0]
  |  Branch (21517:57): [True: 1, False: 0]
  ------------------
21518|      1|                p->error_indicator = 1;
21519|      1|                p->level--;
21520|      1|                return NULL;
21521|      1|            }
21522|      0|            goto done;
21523|      1|        }
21524|   400k|        p->mark = _mark;
21525|   400k|        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
21526|   400k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' '**' expression for_if_clauses"));
21527|   400k|    }
21528|      0|    { // '(' '**' expression for_if_clauses
21529|   400k|        if (p->error_indicator) {
  ------------------
  |  Branch (21529:13): [True: 329, False: 400k]
  ------------------
21530|    329|            p->level--;
21531|    329|            return NULL;
21532|    329|        }
21533|   400k|        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' '**' expression for_if_clauses"));
21534|   400k|        Token * _literal;
21535|   400k|        Token * a;
21536|   400k|        expr_ty b;
21537|   400k|        asdl_comprehension_seq* for_if_clauses_var;
21538|   400k|        if (
21539|   400k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (21539:13): [True: 42.5k, False: 357k]
  ------------------
21540|  42.5k|            &&
21541|  42.5k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (21541:13): [True: 2.99k, False: 39.5k]
  ------------------
21542|  2.99k|            &&
21543|  2.99k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (21543:13): [True: 2.60k, False: 386]
  ------------------
21544|  2.60k|            &&
21545|  2.60k|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (21545:13): [True: 2, False: 2.60k]
  ------------------
21546|   400k|        )
21547|      2|        {
21548|      2|            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' '**' expression for_if_clauses"));
21549|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use dict unpacking in generator expression" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21550|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21550:18): [True: 2, False: 0]
  |  Branch (21550:34): [True: 0, False: 0]
  |  Branch (21550:57): [True: 2, False: 0]
  ------------------
21551|      2|                p->error_indicator = 1;
21552|      2|                p->level--;
21553|      2|                return NULL;
21554|      2|            }
21555|      0|            goto done;
21556|      2|        }
21557|   400k|        p->mark = _mark;
21558|   400k|        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
21559|   400k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' '**' expression for_if_clauses"));
21560|   400k|    }
21561|      0|    { // ('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses
21562|   400k|        if (p->error_indicator) {
  ------------------
  |  Branch (21562:13): [True: 190, False: 400k]
  ------------------
21563|    190|            p->level--;
21564|    190|            return NULL;
21565|    190|        }
21566|   400k|        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
21567|   400k|        Token * _literal;
21568|   400k|        void *_tmp_121_var;
21569|   400k|        expr_ty a;
21570|   400k|        asdl_expr_seq* b;
21571|   400k|        asdl_comprehension_seq* for_if_clauses_var;
21572|   400k|        if (
21573|   400k|            (_tmp_121_var = _tmp_121_rule(p))  // '[' | '{'
  ------------------
  |  Branch (21573:13): [True: 33.6k, False: 366k]
  ------------------
21574|  33.6k|            &&
21575|  33.6k|            (a = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (21575:13): [True: 18.8k, False: 14.8k]
  ------------------
21576|  18.8k|            &&
21577|  18.8k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (21577:13): [True: 5.75k, False: 13.1k]
  ------------------
21578|  5.75k|            &&
21579|  5.75k|            (b = star_named_expressions_rule(p))  // star_named_expressions
  ------------------
  |  Branch (21579:13): [True: 2.29k, False: 3.45k]
  ------------------
21580|  2.29k|            &&
21581|  2.29k|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (21581:13): [True: 1, False: 2.29k]
  ------------------
21582|   400k|        )
21583|      1|        {
21584|      1|            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
21585|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , PyPegen_last_item ( b , expr_ty ) , "did you forget parentheses around the comprehension target?" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21586|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21586:18): [True: 1, False: 0]
  |  Branch (21586:34): [True: 0, False: 0]
  |  Branch (21586:57): [True: 1, False: 0]
  ------------------
21587|      1|                p->error_indicator = 1;
21588|      1|                p->level--;
21589|      1|                return NULL;
21590|      1|            }
21591|      0|            goto done;
21592|      1|        }
21593|   400k|        p->mark = _mark;
21594|   400k|        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
21595|   400k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' star_named_expressions for_if_clauses"));
21596|   400k|    }
21597|      0|    { // ('[' | '{') star_named_expression ',' for_if_clauses
21598|   400k|        if (p->error_indicator) {
  ------------------
  |  Branch (21598:13): [True: 5.70k, False: 394k]
  ------------------
21599|  5.70k|            p->level--;
21600|  5.70k|            return NULL;
21601|  5.70k|        }
21602|   394k|        D(fprintf(stderr, "%*c> invalid_comprehension[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
21603|   394k|        void *_tmp_121_var;
21604|   394k|        expr_ty a;
21605|   394k|        Token * b;
21606|   394k|        asdl_comprehension_seq* for_if_clauses_var;
21607|   394k|        if (
21608|   394k|            (_tmp_121_var = _tmp_121_rule(p))  // '[' | '{'
  ------------------
  |  Branch (21608:13): [True: 27.9k, False: 366k]
  ------------------
21609|  27.9k|            &&
21610|  27.9k|            (a = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (21610:13): [True: 17.6k, False: 10.3k]
  ------------------
21611|  17.6k|            &&
21612|  17.6k|            (b = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (21612:13): [True: 4.49k, False: 13.1k]
  ------------------
21613|  4.49k|            &&
21614|  4.49k|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (21614:13): [True: 1, False: 4.49k]
  ------------------
21615|   394k|        )
21616|      1|        {
21617|      1|            D(fprintf(stderr, "%*c+ invalid_comprehension[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
21618|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "did you forget parentheses around the comprehension target?" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21619|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21619:18): [True: 1, False: 0]
  |  Branch (21619:34): [True: 0, False: 0]
  |  Branch (21619:57): [True: 1, False: 0]
  ------------------
21620|      1|                p->error_indicator = 1;
21621|      1|                p->level--;
21622|      1|                return NULL;
21623|      1|            }
21624|      0|            goto done;
21625|      1|        }
21626|   394k|        p->mark = _mark;
21627|   394k|        D(fprintf(stderr, "%*c%s invalid_comprehension[%d-%d]: %s failed!\n", p->level, ' ',
21628|   394k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('[' | '{') star_named_expression ',' for_if_clauses"));
21629|   394k|    }
21630|   394k|    _res = NULL;
21631|   394k|  done:
21632|   394k|    p->level--;
21633|   394k|    return _res;
21634|   394k|}
parser.c:_tmp_121_rule:
34871|   794k|{
34872|   794k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.58M|#  define MAXSTACK 6000
  ------------------
  |  Branch (34872:9): [True: 0, False: 794k]
  |  Branch (34872:35): [True: 0, False: 794k]
  ------------------
34873|      0|        _Pypegen_stack_overflow(p);
34874|      0|    }
34875|   794k|    if (p->error_indicator) {
  ------------------
  |  Branch (34875:9): [True: 0, False: 794k]
  ------------------
34876|      0|        p->level--;
34877|      0|        return NULL;
34878|      0|    }
34879|   794k|    void * _res = NULL;
34880|   794k|    int _mark = p->mark;
34881|   794k|    { // '['
34882|   794k|        if (p->error_indicator) {
  ------------------
  |  Branch (34882:13): [True: 0, False: 794k]
  ------------------
34883|      0|            p->level--;
34884|      0|            return NULL;
34885|      0|        }
34886|   794k|        D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['"));
34887|   794k|        Token * _literal;
34888|   794k|        if (
34889|   794k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (34889:13): [True: 41.8k, False: 752k]
  ------------------
34890|   794k|        )
34891|  41.8k|        {
34892|  41.8k|            D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['"));
34893|  41.8k|            _res = _literal;
34894|  41.8k|            goto done;
34895|  41.8k|        }
34896|   752k|        p->mark = _mark;
34897|   752k|        D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ',
34898|   752k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['"));
34899|   752k|    }
34900|      0|    { // '{'
34901|   752k|        if (p->error_indicator) {
  ------------------
  |  Branch (34901:13): [True: 0, False: 752k]
  ------------------
34902|      0|            p->level--;
34903|      0|            return NULL;
34904|      0|        }
34905|   752k|        D(fprintf(stderr, "%*c> _tmp_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{'"));
34906|   752k|        Token * _literal;
34907|   752k|        if (
34908|   752k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (34908:13): [True: 19.7k, False: 732k]
  ------------------
34909|   752k|        )
34910|  19.7k|        {
34911|  19.7k|            D(fprintf(stderr, "%*c+ _tmp_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{'"));
34912|  19.7k|            _res = _literal;
34913|  19.7k|            goto done;
34914|  19.7k|        }
34915|   732k|        p->mark = _mark;
34916|   732k|        D(fprintf(stderr, "%*c%s _tmp_121[%d-%d]: %s failed!\n", p->level, ' ',
34917|   732k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{'"));
34918|   732k|    }
34919|   732k|    _res = NULL;
34920|   794k|  done:
34921|   794k|    p->level--;
34922|   794k|    return _res;
34923|   732k|}
parser.c:star_named_expression_rule:
12128|   596k|{
12129|   596k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.19M|#  define MAXSTACK 6000
  ------------------
  |  Branch (12129:9): [True: 0, False: 596k]
  |  Branch (12129:35): [True: 0, False: 596k]
  ------------------
12130|      0|        _Pypegen_stack_overflow(p);
12131|      0|    }
12132|   596k|    if (p->error_indicator) {
  ------------------
  |  Branch (12132:9): [True: 0, False: 596k]
  ------------------
12133|      0|        p->level--;
12134|      0|        return NULL;
12135|      0|    }
12136|   596k|    expr_ty _res = NULL;
12137|   596k|    int _mark = p->mark;
12138|   596k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (12138:9): [True: 101k, False: 494k]
  |  Branch (12138:31): [True: 116, False: 101k]
  ------------------
12139|    116|        p->error_indicator = 1;
12140|    116|        p->level--;
12141|    116|        return NULL;
12142|    116|    }
12143|   596k|    int _start_lineno = p->tokens[_mark]->lineno;
12144|   596k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   596k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 596k]
  |  |  ------------------
  ------------------
12145|   596k|    int _start_col_offset = p->tokens[_mark]->col_offset;
12146|   596k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   596k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 596k]
  |  |  ------------------
  ------------------
12147|   596k|    { // '*' bitwise_or
12148|   596k|        if (p->error_indicator) {
  ------------------
  |  Branch (12148:13): [True: 0, False: 596k]
  ------------------
12149|      0|            p->level--;
12150|      0|            return NULL;
12151|      0|        }
12152|   596k|        D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
12153|   596k|        Token * _literal;
12154|   596k|        expr_ty a;
12155|   596k|        if (
12156|   596k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (12156:13): [True: 23.3k, False: 572k]
  ------------------
12157|  23.3k|            &&
12158|  23.3k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (12158:13): [True: 18.9k, False: 4.41k]
  ------------------
12159|   596k|        )
12160|  18.9k|        {
12161|  18.9k|            D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or"));
12162|  18.9k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
12163|  18.9k|            if (_token == NULL) {
  ------------------
  |  Branch (12163:17): [True: 0, False: 18.9k]
  ------------------
12164|      0|                p->level--;
12165|      0|                return NULL;
12166|      0|            }
12167|  18.9k|            int _end_lineno = _token->end_lineno;
12168|  18.9k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.9k]
  |  |  ------------------
  ------------------
12169|  18.9k|            int _end_col_offset = _token->end_col_offset;
12170|  18.9k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.9k]
  |  |  ------------------
  ------------------
12171|  18.9k|            _res = _PyAST_Starred ( a , Load , EXTRA );
  ------------------
  |  |  307|  18.9k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
12172|  18.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12172:18): [True: 0, False: 18.9k]
  |  Branch (12172:34): [True: 0, False: 18.9k]
  |  Branch (12172:57): [True: 0, False: 0]
  ------------------
12173|      0|                p->error_indicator = 1;
12174|      0|                p->level--;
12175|      0|                return NULL;
12176|      0|            }
12177|  18.9k|            goto done;
12178|  18.9k|        }
12179|   577k|        p->mark = _mark;
12180|   577k|        D(fprintf(stderr, "%*c%s star_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12181|   577k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or"));
12182|   577k|    }
12183|      0|    { // named_expression
12184|   577k|        if (p->error_indicator) {
  ------------------
  |  Branch (12184:13): [True: 685, False: 576k]
  ------------------
12185|    685|            p->level--;
12186|    685|            return NULL;
12187|    685|        }
12188|   576k|        D(fprintf(stderr, "%*c> star_named_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
12189|   576k|        expr_ty named_expression_var;
12190|   576k|        if (
12191|   576k|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (12191:13): [True: 400k, False: 176k]
  ------------------
12192|   576k|        )
12193|   400k|        {
12194|   400k|            D(fprintf(stderr, "%*c+ star_named_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
12195|   400k|            _res = named_expression_var;
12196|   400k|            goto done;
12197|   400k|        }
12198|   176k|        p->mark = _mark;
12199|   176k|        D(fprintf(stderr, "%*c%s star_named_expression[%d-%d]: %s failed!\n", p->level, ' ',
12200|   176k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
12201|   176k|    }
12202|   176k|    _res = NULL;
12203|   595k|  done:
12204|   595k|    p->level--;
12205|   595k|    return _res;
12206|   176k|}
parser.c:star_named_expressions_rule:
12081|  13.2k|{
12082|  13.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  26.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (12082:9): [True: 0, False: 13.2k]
  |  Branch (12082:35): [True: 0, False: 13.2k]
  ------------------
12083|      0|        _Pypegen_stack_overflow(p);
12084|      0|    }
12085|  13.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (12085:9): [True: 0, False: 13.2k]
  ------------------
12086|      0|        p->level--;
12087|      0|        return NULL;
12088|      0|    }
12089|  13.2k|    asdl_expr_seq* _res = NULL;
12090|  13.2k|    int _mark = p->mark;
12091|  13.2k|    { // ','.star_named_expression+ ','?
12092|  13.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (12092:13): [True: 0, False: 13.2k]
  ------------------
12093|      0|            p->level--;
12094|      0|            return NULL;
12095|      0|        }
12096|  13.2k|        D(fprintf(stderr, "%*c> star_named_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
12097|  13.2k|        void *_opt_var;
12098|  13.2k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  13.2k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.2k]
  |  |  ------------------
  ------------------
12099|  13.2k|        asdl_expr_seq* a;
12100|  13.2k|        if (
12101|  13.2k|            (a = (asdl_expr_seq*)_gather_58_rule(p))  // ','.star_named_expression+
  ------------------
  |  Branch (12101:13): [True: 7.67k, False: 5.52k]
  ------------------
12102|  7.67k|            &&
12103|  7.67k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (12103:13): [True: 7.14k, False: 529]
  ------------------
12104|  13.2k|        )
12105|  7.14k|        {
12106|  7.14k|            D(fprintf(stderr, "%*c+ star_named_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_named_expression+ ','?"));
12107|  7.14k|            _res = a;
12108|  7.14k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (12108:18): [True: 0, False: 7.14k]
  |  Branch (12108:34): [True: 0, False: 7.14k]
  |  Branch (12108:57): [True: 0, False: 0]
  ------------------
12109|      0|                p->error_indicator = 1;
12110|      0|                p->level--;
12111|      0|                return NULL;
12112|      0|            }
12113|  7.14k|            goto done;
12114|  7.14k|        }
12115|  6.05k|        p->mark = _mark;
12116|  6.05k|        D(fprintf(stderr, "%*c%s star_named_expressions[%d-%d]: %s failed!\n", p->level, ' ',
12117|  6.05k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_named_expression+ ','?"));
12118|  6.05k|    }
12119|  6.05k|    _res = NULL;
12120|  13.2k|  done:
12121|  13.2k|    p->level--;
12122|  13.2k|    return _res;
12123|  6.05k|}
parser.c:_gather_58_rule:
30928|  13.2k|{
30929|  13.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  26.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30929:9): [True: 0, False: 13.2k]
  |  Branch (30929:35): [True: 0, False: 13.2k]
  ------------------
30930|      0|        _Pypegen_stack_overflow(p);
30931|      0|    }
30932|  13.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (30932:9): [True: 0, False: 13.2k]
  ------------------
30933|      0|        p->level--;
30934|      0|        return NULL;
30935|      0|    }
30936|  13.2k|    asdl_seq * _res = NULL;
30937|  13.2k|    int _mark = p->mark;
30938|  13.2k|    { // star_named_expression _loop0_57
30939|  13.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (30939:13): [True: 0, False: 13.2k]
  ------------------
30940|      0|            p->level--;
30941|      0|            return NULL;
30942|      0|        }
30943|  13.2k|        D(fprintf(stderr, "%*c> _gather_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_57"));
30944|  13.2k|        expr_ty elem;
30945|  13.2k|        asdl_seq * seq;
30946|  13.2k|        if (
30947|  13.2k|            (elem = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (30947:13): [True: 7.67k, False: 5.52k]
  ------------------
30948|  7.67k|            &&
30949|  7.67k|            (seq = _loop0_57_rule(p))  // _loop0_57
  ------------------
  |  Branch (30949:13): [True: 7.67k, False: 0]
  ------------------
30950|  13.2k|        )
30951|  7.67k|        {
30952|  7.67k|            D(fprintf(stderr, "%*c+ _gather_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_57"));
30953|  7.67k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30954|  7.67k|            goto done;
30955|  7.67k|        }
30956|  5.52k|        p->mark = _mark;
30957|  5.52k|        D(fprintf(stderr, "%*c%s _gather_58[%d-%d]: %s failed!\n", p->level, ' ',
30958|  5.52k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_57"));
30959|  5.52k|    }
30960|  5.52k|    _res = NULL;
30961|  13.2k|  done:
30962|  13.2k|    p->level--;
30963|  13.2k|    return _res;
30964|  5.52k|}
parser.c:_loop0_57_rule:
30852|  7.67k|{
30853|  7.67k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30853:9): [True: 0, False: 7.67k]
  |  Branch (30853:35): [True: 0, False: 7.67k]
  ------------------
30854|      0|        _Pypegen_stack_overflow(p);
30855|      0|    }
30856|  7.67k|    if (p->error_indicator) {
  ------------------
  |  Branch (30856:9): [True: 0, False: 7.67k]
  ------------------
30857|      0|        p->level--;
30858|      0|        return NULL;
30859|      0|    }
30860|  7.67k|    void *_res = NULL;
30861|  7.67k|    int _mark = p->mark;
30862|  7.67k|    void **_children = PyMem_Malloc(sizeof(void *));
30863|  7.67k|    if (!_children) {
  ------------------
  |  Branch (30863:9): [True: 0, False: 7.67k]
  ------------------
30864|      0|        p->error_indicator = 1;
30865|      0|        PyErr_NoMemory();
30866|      0|        p->level--;
30867|      0|        return NULL;
30868|      0|    }
30869|  7.67k|    Py_ssize_t _children_capacity = 1;
30870|  7.67k|    Py_ssize_t _n = 0;
30871|  7.67k|    { // ',' star_named_expression
30872|  7.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (30872:13): [True: 0, False: 7.67k]
  ------------------
30873|      0|            p->level--;
30874|      0|            return NULL;
30875|      0|        }
30876|  7.67k|        D(fprintf(stderr, "%*c> _loop0_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression"));
30877|  7.67k|        Token * _literal;
30878|  7.67k|        expr_ty elem;
30879|  7.67k|        while (
30880|  16.1k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (30880:13): [True: 9.76k, False: 6.42k]
  ------------------
30881|  9.76k|            &&
30882|  9.76k|            (elem = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (30882:13): [True: 8.50k, False: 1.25k]
  ------------------
30883|  7.67k|        )
30884|  8.50k|        {
30885|  8.50k|            _res = elem;
30886|  8.50k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (30886:18): [True: 0, False: 8.50k]
  |  Branch (30886:34): [True: 0, False: 8.50k]
  |  Branch (30886:57): [True: 0, False: 0]
  ------------------
30887|      0|                p->error_indicator = 1;
30888|      0|                PyMem_Free(_children);
30889|      0|                p->level--;
30890|      0|                return NULL;
30891|      0|            }
30892|  8.50k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30892:17): [True: 1.96k, False: 6.54k]
  ------------------
30893|  1.96k|                _children_capacity *= 2;
30894|  1.96k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30895|  1.96k|                if (!_new_children) {
  ------------------
  |  Branch (30895:21): [True: 0, False: 1.96k]
  ------------------
30896|      0|                    PyMem_Free(_children);
30897|      0|                    p->error_indicator = 1;
30898|      0|                    PyErr_NoMemory();
30899|      0|                    p->level--;
30900|      0|                    return NULL;
30901|      0|                }
30902|  1.96k|                _children = _new_children;
30903|  1.96k|            }
30904|  8.50k|            _children[_n++] = _res;
30905|  8.50k|            _mark = p->mark;
30906|  8.50k|        }
30907|  7.67k|        p->mark = _mark;
30908|  7.67k|        D(fprintf(stderr, "%*c%s _loop0_57[%d-%d]: %s failed!\n", p->level, ' ',
30909|  7.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression"));
30910|  7.67k|    }
30911|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30912|  7.67k|    if (!_seq) {
  ------------------
  |  Branch (30912:9): [True: 0, False: 7.67k]
  ------------------
30913|      0|        PyMem_Free(_children);
30914|      0|        p->error_indicator = 1;
30915|      0|        PyErr_NoMemory();
30916|      0|        p->level--;
30917|      0|        return NULL;
30918|      0|    }
30919|  16.1k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  8.50k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  16.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30919:28): [True: 8.50k, False: 7.67k]
  ------------------
30920|  7.67k|    PyMem_Free(_children);
30921|  7.67k|    p->level--;
30922|  7.67k|    return _seq;
30923|  7.67k|}
parser.c:arguments_rule:
18298|  42.7k|{
18299|  42.7k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  85.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18299:9): [True: 0, False: 42.7k]
  |  Branch (18299:35): [True: 0, False: 42.7k]
  ------------------
18300|      0|        _Pypegen_stack_overflow(p);
18301|      0|    }
18302|  42.7k|    if (p->error_indicator) {
  ------------------
  |  Branch (18302:9): [True: 0, False: 42.7k]
  ------------------
18303|      0|        p->level--;
18304|      0|        return NULL;
18305|      0|    }
18306|  42.7k|    expr_ty _res = NULL;
18307|  42.7k|    if (_PyPegen_is_memoized(p, arguments_type, &_res)) {
  ------------------
  |  |  266|  42.7k|#define arguments_type 1177
  ------------------
  |  Branch (18307:9): [True: 1.07k, False: 41.6k]
  ------------------
18308|  1.07k|        p->level--;
18309|  1.07k|        return _res;
18310|  1.07k|    }
18311|  41.6k|    int _mark = p->mark;
18312|  41.6k|    { // args ','? &')'
18313|  41.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (18313:13): [True: 0, False: 41.6k]
  ------------------
18314|      0|            p->level--;
18315|      0|            return NULL;
18316|      0|        }
18317|  41.6k|        D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
18318|  41.6k|        void *_opt_var;
18319|  41.6k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  41.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 41.6k]
  |  |  ------------------
  ------------------
18320|  41.6k|        expr_ty a;
18321|  41.6k|        if (
18322|  41.6k|            (a = args_rule(p))  // args
  ------------------
  |  Branch (18322:13): [True: 28.4k, False: 13.2k]
  ------------------
18323|  28.4k|            &&
18324|  28.4k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (18324:13): [True: 28.4k, False: 0]
  ------------------
18325|  28.4k|            &&
18326|  28.4k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (18326:13): [True: 16.6k, False: 11.7k]
  ------------------
18327|  41.6k|        )
18328|  16.6k|        {
18329|  16.6k|            D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','? &')'"));
18330|  16.6k|            _res = a;
18331|  16.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18331:18): [True: 0, False: 16.6k]
  |  Branch (18331:34): [True: 0, False: 16.6k]
  |  Branch (18331:57): [True: 0, False: 0]
  ------------------
18332|      0|                p->error_indicator = 1;
18333|      0|                p->level--;
18334|      0|                return NULL;
18335|      0|            }
18336|  16.6k|            goto done;
18337|  16.6k|        }
18338|  25.0k|        p->mark = _mark;
18339|  25.0k|        D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ',
18340|  25.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','? &')'"));
18341|  25.0k|    }
18342|  25.0k|    if (p->call_invalid_rules) { // invalid_arguments
  ------------------
  |  Branch (18342:9): [True: 11.9k, False: 13.0k]
  ------------------
18343|  11.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (18343:13): [True: 2.36k, False: 9.57k]
  ------------------
18344|  2.36k|            p->level--;
18345|  2.36k|            return NULL;
18346|  2.36k|        }
18347|  9.57k|        D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
18348|  9.57k|        void *invalid_arguments_var;
18349|  9.57k|        if (
18350|  9.57k|            (invalid_arguments_var = invalid_arguments_rule(p))  // invalid_arguments
  ------------------
  |  Branch (18350:13): [True: 0, False: 9.57k]
  ------------------
18351|  9.57k|        )
18352|      0|        {
18353|      0|            D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arguments"));
18354|      0|            _res = invalid_arguments_var;
18355|      0|            goto done;
18356|      0|        }
18357|  9.57k|        p->mark = _mark;
18358|  9.57k|        D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ',
18359|  9.57k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arguments"));
18360|  9.57k|    }
18361|  22.6k|    _res = NULL;
18362|  39.3k|  done:
18363|  39.3k|    _PyPegen_insert_memo(p, _mark, arguments_type, _res);
  ------------------
  |  |  266|  39.3k|#define arguments_type 1177
  ------------------
18364|  39.3k|    p->level--;
18365|  39.3k|    return _res;
18366|  22.6k|}
parser.c:args_rule:
18373|  72.4k|{
18374|  72.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   144k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18374:9): [True: 0, False: 72.4k]
  |  Branch (18374:35): [True: 0, False: 72.4k]
  ------------------
18375|      0|        _Pypegen_stack_overflow(p);
18376|      0|    }
18377|  72.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (18377:9): [True: 0, False: 72.4k]
  ------------------
18378|      0|        p->level--;
18379|      0|        return NULL;
18380|      0|    }
18381|  72.4k|    expr_ty _res = NULL;
18382|  72.4k|    int _mark = p->mark;
18383|  72.4k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18383:9): [True: 317, False: 72.1k]
  |  Branch (18383:31): [True: 1, False: 316]
  ------------------
18384|      1|        p->error_indicator = 1;
18385|      1|        p->level--;
18386|      1|        return NULL;
18387|      1|    }
18388|  72.4k|    int _start_lineno = p->tokens[_mark]->lineno;
18389|  72.4k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  72.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 72.4k]
  |  |  ------------------
  ------------------
18390|  72.4k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18391|  72.4k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  72.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 72.4k]
  |  |  ------------------
  ------------------
18392|  72.4k|    { // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]
18393|  72.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (18393:13): [True: 0, False: 72.4k]
  ------------------
18394|      0|            p->level--;
18395|      0|            return NULL;
18396|      0|        }
18397|  72.4k|        D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
18398|  72.4k|        asdl_expr_seq* a;
18399|  72.4k|        void *b;
18400|  72.4k|        if (
18401|  72.4k|            (a = (asdl_expr_seq*)_gather_91_rule(p))  // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+
  ------------------
  |  Branch (18401:13): [True: 40.4k, False: 31.9k]
  ------------------
18402|  40.4k|            &&
18403|  40.4k|            (b = _tmp_92_rule(p), !p->error_indicator)  // [',' kwargs]
  ------------------
  |  Branch (18403:13): [True: 38.3k, False: 2.12k]
  ------------------
18404|  72.4k|        )
18405|  38.3k|        {
18406|  38.3k|            D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
18407|  38.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18408|  38.3k|            if (_token == NULL) {
  ------------------
  |  Branch (18408:17): [True: 0, False: 38.3k]
  ------------------
18409|      0|                p->level--;
18410|      0|                return NULL;
18411|      0|            }
18412|  38.3k|            int _end_lineno = _token->end_lineno;
18413|  38.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  38.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 38.3k]
  |  |  ------------------
  ------------------
18414|  38.3k|            int _end_col_offset = _token->end_col_offset;
18415|  38.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  38.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 38.3k]
  |  |  ------------------
  ------------------
18416|  38.3k|            _res = _PyPegen_collect_call_seqs ( p , a , b , EXTRA );
  ------------------
  |  |  307|  38.3k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18417|  38.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18417:18): [True: 0, False: 38.3k]
  |  Branch (18417:34): [True: 0, False: 38.3k]
  |  Branch (18417:57): [True: 0, False: 0]
  ------------------
18418|      0|                p->error_indicator = 1;
18419|      0|                p->level--;
18420|      0|                return NULL;
18421|      0|            }
18422|  38.3k|            goto done;
18423|  38.3k|        }
18424|  34.1k|        p->mark = _mark;
18425|  34.1k|        D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ',
18426|  34.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ [',' kwargs]"));
18427|  34.1k|    }
18428|      0|    { // kwargs
18429|  34.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (18429:13): [True: 2.43k, False: 31.6k]
  ------------------
18430|  2.43k|            p->level--;
18431|  2.43k|            return NULL;
18432|  2.43k|        }
18433|  31.6k|        D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs"));
18434|  31.6k|        asdl_seq* a;
18435|  31.6k|        if (
18436|  31.6k|            (a = kwargs_rule(p))  // kwargs
  ------------------
  |  Branch (18436:13): [True: 8.98k, False: 22.7k]
  ------------------
18437|  31.6k|        )
18438|  8.98k|        {
18439|  8.98k|            D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs"));
18440|  8.98k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18441|  8.98k|            if (_token == NULL) {
  ------------------
  |  Branch (18441:17): [True: 0, False: 8.98k]
  ------------------
18442|      0|                p->level--;
18443|      0|                return NULL;
18444|      0|            }
18445|  8.98k|            int _end_lineno = _token->end_lineno;
18446|  8.98k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  8.98k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 8.98k]
  |  |  ------------------
  ------------------
18447|  8.98k|            int _end_col_offset = _token->end_col_offset;
18448|  8.98k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  8.98k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 8.98k]
  |  |  ------------------
  ------------------
18449|  8.98k|            _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq* , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq* , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA );
  ------------------
  |  |  272|  8.98k|#define CHECK_NULL_ALLOWED(type, result) ((type) CHECK_CALL_NULL_ALLOWED(p, result))
  ------------------
                          _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq* , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq* , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA );
  ------------------
  |  |  272|  8.98k|#define CHECK_NULL_ALLOWED(type, result) ((type) CHECK_CALL_NULL_ALLOWED(p, result))
  ------------------
                          _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq* , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq* , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA );
  ------------------
  |  |  307|  8.98k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18450|  8.98k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18450:18): [True: 0, False: 8.98k]
  |  Branch (18450:34): [True: 493, False: 8.48k]
  |  Branch (18450:57): [True: 493, False: 0]
  ------------------
18451|    493|                p->error_indicator = 1;
18452|    493|                p->level--;
18453|    493|                return NULL;
18454|    493|            }
18455|  8.48k|            goto done;
18456|  8.98k|        }
18457|  22.7k|        p->mark = _mark;
18458|  22.7k|        D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ',
18459|  22.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs"));
18460|  22.7k|    }
18461|  22.7k|    _res = NULL;
18462|  69.5k|  done:
18463|  69.5k|    p->level--;
18464|  69.5k|    return _res;
18465|  22.7k|}
parser.c:_gather_91_rule:
33082|  82.0k|{
33083|  82.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   164k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33083:9): [True: 0, False: 82.0k]
  |  Branch (33083:35): [True: 0, False: 82.0k]
  ------------------
33084|      0|        _Pypegen_stack_overflow(p);
33085|      0|    }
33086|  82.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (33086:9): [True: 0, False: 82.0k]
  ------------------
33087|      0|        p->level--;
33088|      0|        return NULL;
33089|      0|    }
33090|  82.0k|    asdl_seq * _res = NULL;
33091|  82.0k|    int _mark = p->mark;
33092|  82.0k|    { // (starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90
33093|  82.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (33093:13): [True: 0, False: 82.0k]
  ------------------
33094|      0|            p->level--;
33095|      0|            return NULL;
33096|      0|        }
33097|  82.0k|        D(fprintf(stderr, "%*c> _gather_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90"));
33098|  82.0k|        void *elem;
33099|  82.0k|        asdl_seq * seq;
33100|  82.0k|        if (
33101|  82.0k|            (elem = _tmp_165_rule(p))  // starred_expression | (assignment_expression | expression !':=') !'='
  ------------------
  |  Branch (33101:13): [True: 44.5k, False: 37.5k]
  ------------------
33102|  44.5k|            &&
33103|  44.5k|            (seq = _loop0_90_rule(p))  // _loop0_90
  ------------------
  |  Branch (33103:13): [True: 44.5k, False: 0]
  ------------------
33104|  82.0k|        )
33105|  44.5k|        {
33106|  44.5k|            D(fprintf(stderr, "%*c+ _gather_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90"));
33107|  44.5k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33108|  44.5k|            goto done;
33109|  44.5k|        }
33110|  37.5k|        p->mark = _mark;
33111|  37.5k|        D(fprintf(stderr, "%*c%s _gather_91[%d-%d]: %s failed!\n", p->level, ' ',
33112|  37.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assignment_expression | expression !':=') !'=') _loop0_90"));
33113|  37.5k|    }
33114|  37.5k|    _res = NULL;
33115|  82.0k|  done:
33116|  82.0k|    p->level--;
33117|  82.0k|    return _res;
33118|  37.5k|}
parser.c:_tmp_165_rule:
37443|   107k|{
37444|   107k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   215k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37444:9): [True: 0, False: 107k]
  |  Branch (37444:35): [True: 0, False: 107k]
  ------------------
37445|      0|        _Pypegen_stack_overflow(p);
37446|      0|    }
37447|   107k|    if (p->error_indicator) {
  ------------------
  |  Branch (37447:9): [True: 0, False: 107k]
  ------------------
37448|      0|        p->level--;
37449|      0|        return NULL;
37450|      0|    }
37451|   107k|    void * _res = NULL;
37452|   107k|    int _mark = p->mark;
37453|   107k|    { // starred_expression
37454|   107k|        if (p->error_indicator) {
  ------------------
  |  Branch (37454:13): [True: 0, False: 107k]
  ------------------
37455|      0|            p->level--;
37456|      0|            return NULL;
37457|      0|        }
37458|   107k|        D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37459|   107k|        expr_ty starred_expression_var;
37460|   107k|        if (
37461|   107k|            (starred_expression_var = starred_expression_rule(p))  // starred_expression
  ------------------
  |  Branch (37461:13): [True: 6.65k, False: 101k]
  ------------------
37462|   107k|        )
37463|  6.65k|        {
37464|  6.65k|            D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37465|  6.65k|            _res = starred_expression_var;
37466|  6.65k|            goto done;
37467|  6.65k|        }
37468|   101k|        p->mark = _mark;
37469|   101k|        D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ',
37470|   101k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
37471|   101k|    }
37472|      0|    { // (assignment_expression | expression !':=') !'='
37473|   101k|        if (p->error_indicator) {
  ------------------
  |  Branch (37473:13): [True: 533, False: 100k]
  ------------------
37474|    533|            p->level--;
37475|    533|            return NULL;
37476|    533|        }
37477|   100k|        D(fprintf(stderr, "%*c> _tmp_165[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
37478|   100k|        void *_tmp_176_var;
37479|   100k|        if (
37480|   100k|            (_tmp_176_var = _tmp_176_rule(p))  // assignment_expression | expression !':='
  ------------------
  |  Branch (37480:13): [True: 64.9k, False: 35.7k]
  ------------------
37481|  64.9k|            &&
37482|  64.9k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
  ------------------
  |  Branch (37482:13): [True: 52.3k, False: 12.6k]
  ------------------
37483|   100k|        )
37484|  52.3k|        {
37485|  52.3k|            D(fprintf(stderr, "%*c+ _tmp_165[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
37486|  52.3k|            _res = _tmp_176_var;
37487|  52.3k|            goto done;
37488|  52.3k|        }
37489|  48.3k|        p->mark = _mark;
37490|  48.3k|        D(fprintf(stderr, "%*c%s _tmp_165[%d-%d]: %s failed!\n", p->level, ' ',
37491|  48.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(assignment_expression | expression !':=') !'='"));
37492|  48.3k|    }
37493|  48.3k|    _res = NULL;
37494|   107k|  done:
37495|   107k|    p->level--;
37496|   107k|    return _res;
37497|  48.3k|}
parser.c:_tmp_176_rule:
38033|   100k|{
38034|   100k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   201k|#  define MAXSTACK 6000
  ------------------
  |  Branch (38034:9): [True: 0, False: 100k]
  |  Branch (38034:35): [True: 0, False: 100k]
  ------------------
38035|      0|        _Pypegen_stack_overflow(p);
38036|      0|    }
38037|   100k|    if (p->error_indicator) {
  ------------------
  |  Branch (38037:9): [True: 0, False: 100k]
  ------------------
38038|      0|        p->level--;
38039|      0|        return NULL;
38040|      0|    }
38041|   100k|    void * _res = NULL;
38042|   100k|    int _mark = p->mark;
38043|   100k|    { // assignment_expression
38044|   100k|        if (p->error_indicator) {
  ------------------
  |  Branch (38044:13): [True: 0, False: 100k]
  ------------------
38045|      0|            p->level--;
38046|      0|            return NULL;
38047|      0|        }
38048|   100k|        D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
38049|   100k|        expr_ty assignment_expression_var;
38050|   100k|        if (
38051|   100k|            (assignment_expression_var = assignment_expression_rule(p))  // assignment_expression
  ------------------
  |  Branch (38051:13): [True: 1.27k, False: 99.4k]
  ------------------
38052|   100k|        )
38053|  1.27k|        {
38054|  1.27k|            D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment_expression"));
38055|  1.27k|            _res = assignment_expression_var;
38056|  1.27k|            goto done;
38057|  1.27k|        }
38058|  99.4k|        p->mark = _mark;
38059|  99.4k|        D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ',
38060|  99.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment_expression"));
38061|  99.4k|    }
38062|      0|    { // expression !':='
38063|  99.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (38063:13): [True: 42, False: 99.3k]
  ------------------
38064|     42|            p->level--;
38065|     42|            return NULL;
38066|     42|        }
38067|  99.3k|        D(fprintf(stderr, "%*c> _tmp_176[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='"));
38068|  99.3k|        expr_ty expression_var;
38069|  99.3k|        if (
38070|  99.3k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (38070:13): [True: 63.8k, False: 35.5k]
  ------------------
38071|  63.8k|            &&
38072|  63.8k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53)  // token=':='
  ------------------
  |  Branch (38072:13): [True: 63.6k, False: 176]
  ------------------
38073|  99.3k|        )
38074|  63.6k|        {
38075|  63.6k|            D(fprintf(stderr, "%*c+ _tmp_176[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='"));
38076|  63.6k|            _res = expression_var;
38077|  63.6k|            goto done;
38078|  63.6k|        }
38079|  35.7k|        p->mark = _mark;
38080|  35.7k|        D(fprintf(stderr, "%*c%s _tmp_176[%d-%d]: %s failed!\n", p->level, ' ',
38081|  35.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='"));
38082|  35.7k|    }
38083|  35.7k|    _res = NULL;
38084|   100k|  done:
38085|   100k|    p->level--;
38086|   100k|    return _res;
38087|  35.7k|}
parser.c:_loop0_90_rule:
33005|  44.5k|{
33006|  44.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  89.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33006:9): [True: 0, False: 44.5k]
  |  Branch (33006:35): [True: 0, False: 44.5k]
  ------------------
33007|      0|        _Pypegen_stack_overflow(p);
33008|      0|    }
33009|  44.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (33009:9): [True: 0, False: 44.5k]
  ------------------
33010|      0|        p->level--;
33011|      0|        return NULL;
33012|      0|    }
33013|  44.5k|    void *_res = NULL;
33014|  44.5k|    int _mark = p->mark;
33015|  44.5k|    void **_children = PyMem_Malloc(sizeof(void *));
33016|  44.5k|    if (!_children) {
  ------------------
  |  Branch (33016:9): [True: 0, False: 44.5k]
  ------------------
33017|      0|        p->error_indicator = 1;
33018|      0|        PyErr_NoMemory();
33019|      0|        p->level--;
33020|      0|        return NULL;
33021|      0|    }
33022|  44.5k|    Py_ssize_t _children_capacity = 1;
33023|  44.5k|    Py_ssize_t _n = 0;
33024|  44.5k|    { // ',' (starred_expression | (assignment_expression | expression !':=') !'=')
33025|  44.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (33025:13): [True: 0, False: 44.5k]
  ------------------
33026|      0|            p->level--;
33027|      0|            return NULL;
33028|      0|        }
33029|  44.5k|        D(fprintf(stderr, "%*c> _loop0_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')"));
33030|  44.5k|        Token * _literal;
33031|  44.5k|        void *elem;
33032|  44.5k|        while (
33033|  58.9k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33033:13): [True: 25.8k, False: 33.1k]
  ------------------
33034|  25.8k|            &&
33035|  25.8k|            (elem = _tmp_165_rule(p))  // starred_expression | (assignment_expression | expression !':=') !'='
  ------------------
  |  Branch (33035:13): [True: 14.4k, False: 11.4k]
  ------------------
33036|  44.5k|        )
33037|  14.4k|        {
33038|  14.4k|            _res = elem;
33039|  14.4k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (33039:18): [True: 0, False: 14.4k]
  |  Branch (33039:34): [True: 0, False: 14.4k]
  |  Branch (33039:57): [True: 0, False: 0]
  ------------------
33040|      0|                p->error_indicator = 1;
33041|      0|                PyMem_Free(_children);
33042|      0|                p->level--;
33043|      0|                return NULL;
33044|      0|            }
33045|  14.4k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (33045:17): [True: 1.11k, False: 13.3k]
  ------------------
33046|  1.11k|                _children_capacity *= 2;
33047|  1.11k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33048|  1.11k|                if (!_new_children) {
  ------------------
  |  Branch (33048:21): [True: 0, False: 1.11k]
  ------------------
33049|      0|                    PyMem_Free(_children);
33050|      0|                    p->error_indicator = 1;
33051|      0|                    PyErr_NoMemory();
33052|      0|                    p->level--;
33053|      0|                    return NULL;
33054|      0|                }
33055|  1.11k|                _children = _new_children;
33056|  1.11k|            }
33057|  14.4k|            _children[_n++] = _res;
33058|  14.4k|            _mark = p->mark;
33059|  14.4k|        }
33060|  44.5k|        p->mark = _mark;
33061|  44.5k|        D(fprintf(stderr, "%*c%s _loop0_90[%d-%d]: %s failed!\n", p->level, ' ',
33062|  44.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | (assignment_expression | expression !':=') !'=')"));
33063|  44.5k|    }
33064|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33065|  44.5k|    if (!_seq) {
  ------------------
  |  Branch (33065:9): [True: 0, False: 44.5k]
  ------------------
33066|      0|        PyMem_Free(_children);
33067|      0|        p->error_indicator = 1;
33068|      0|        PyErr_NoMemory();
33069|      0|        p->level--;
33070|      0|        return NULL;
33071|      0|    }
33072|  58.9k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  14.4k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  58.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (33072:28): [True: 14.4k, False: 44.5k]
  ------------------
33073|  44.5k|    PyMem_Free(_children);
33074|  44.5k|    p->level--;
33075|  44.5k|    return _seq;
33076|  44.5k|}
parser.c:_tmp_92_rule:
33123|  40.4k|{
33124|  40.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  80.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33124:9): [True: 0, False: 40.4k]
  |  Branch (33124:35): [True: 0, False: 40.4k]
  ------------------
33125|      0|        _Pypegen_stack_overflow(p);
33126|      0|    }
33127|  40.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (33127:9): [True: 1.11k, False: 39.3k]
  ------------------
33128|  1.11k|        p->level--;
33129|  1.11k|        return NULL;
33130|  1.11k|    }
33131|  39.3k|    void * _res = NULL;
33132|  39.3k|    int _mark = p->mark;
33133|  39.3k|    { // ',' kwargs
33134|  39.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (33134:13): [True: 0, False: 39.3k]
  ------------------
33135|      0|            p->level--;
33136|      0|            return NULL;
33137|      0|        }
33138|  39.3k|        D(fprintf(stderr, "%*c> _tmp_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
33139|  39.3k|        Token * _literal;
33140|  39.3k|        asdl_seq* k;
33141|  39.3k|        if (
33142|  39.3k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33142:13): [True: 9.49k, False: 29.8k]
  ------------------
33143|  9.49k|            &&
33144|  9.49k|            (k = kwargs_rule(p))  // kwargs
  ------------------
  |  Branch (33144:13): [True: 5.65k, False: 3.83k]
  ------------------
33145|  39.3k|        )
33146|  5.65k|        {
33147|  5.65k|            D(fprintf(stderr, "%*c+ _tmp_92[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs"));
33148|  5.65k|            _res = k;
33149|  5.65k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (33149:18): [True: 0, False: 5.65k]
  |  Branch (33149:34): [True: 27, False: 5.63k]
  |  Branch (33149:57): [True: 27, False: 0]
  ------------------
33150|     27|                p->error_indicator = 1;
33151|     27|                p->level--;
33152|     27|                return NULL;
33153|     27|            }
33154|  5.63k|            goto done;
33155|  5.65k|        }
33156|  33.6k|        p->mark = _mark;
33157|  33.6k|        D(fprintf(stderr, "%*c%s _tmp_92[%d-%d]: %s failed!\n", p->level, ' ',
33158|  33.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwargs"));
33159|  33.6k|    }
33160|  33.6k|    _res = NULL;
33161|  39.3k|  done:
33162|  39.3k|    p->level--;
33163|  39.3k|    return _res;
33164|  33.6k|}
parser.c:kwargs_rule:
18472|  50.8k|{
18473|  50.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   101k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18473:9): [True: 0, False: 50.8k]
  |  Branch (18473:35): [True: 0, False: 50.8k]
  ------------------
18474|      0|        _Pypegen_stack_overflow(p);
18475|      0|    }
18476|  50.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (18476:9): [True: 0, False: 50.8k]
  ------------------
18477|      0|        p->level--;
18478|      0|        return NULL;
18479|      0|    }
18480|  50.8k|    asdl_seq* _res = NULL;
18481|  50.8k|    int _mark = p->mark;
18482|  50.8k|    { // ','.kwarg_or_starred+ [',' ','.kwarg_or_double_starred+]
18483|  50.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (18483:13): [True: 0, False: 50.8k]
  ------------------
18484|      0|            p->level--;
18485|      0|            return NULL;
18486|      0|        }
18487|  50.8k|        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ [',' ','.kwarg_or_double_starred+]"));
18488|  50.8k|        asdl_seq * a;
18489|  50.8k|        void *b;
18490|  50.8k|        if (
18491|  50.8k|            (a = _gather_94_rule(p))  // ','.kwarg_or_starred+
  ------------------
  |  Branch (18491:13): [True: 10.9k, False: 39.9k]
  ------------------
18492|  10.9k|            &&
18493|  10.9k|            (b = _tmp_95_rule(p), !p->error_indicator)  // [',' ','.kwarg_or_double_starred+]
  ------------------
  |  Branch (18493:13): [True: 9.93k, False: 1.02k]
  ------------------
18494|  50.8k|        )
18495|  9.93k|        {
18496|  9.93k|            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ [',' ','.kwarg_or_double_starred+]"));
18497|  9.93k|            _res = b ? _PyPegen_join_sequences ( p , a , b ) : a;
  ------------------
  |  Branch (18497:20): [True: 885, False: 9.05k]
  ------------------
18498|  9.93k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18498:18): [True: 0, False: 9.93k]
  |  Branch (18498:34): [True: 0, False: 9.93k]
  |  Branch (18498:57): [True: 0, False: 0]
  ------------------
18499|      0|                p->error_indicator = 1;
18500|      0|                p->level--;
18501|      0|                return NULL;
18502|      0|            }
18503|  9.93k|            goto done;
18504|  9.93k|        }
18505|  40.9k|        p->mark = _mark;
18506|  40.9k|        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
18507|  40.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+ [',' ','.kwarg_or_double_starred+]"));
18508|  40.9k|    }
18509|      0|    { // ','.kwarg_or_double_starred+
18510|  40.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (18510:13): [True: 1.97k, False: 38.9k]
  ------------------
18511|  1.97k|            p->level--;
18512|  1.97k|            return NULL;
18513|  1.97k|        }
18514|  38.9k|        D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
18515|  38.9k|        asdl_seq * _gather_97_var;
18516|  38.9k|        if (
18517|  38.9k|            (_gather_97_var = _gather_97_rule(p))  // ','.kwarg_or_double_starred+
  ------------------
  |  Branch (18517:13): [True: 8.30k, False: 30.6k]
  ------------------
18518|  38.9k|        )
18519|  8.30k|        {
18520|  8.30k|            D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+"));
18521|  8.30k|            _res = _gather_97_var;
18522|  8.30k|            goto done;
18523|  8.30k|        }
18524|  30.6k|        p->mark = _mark;
18525|  30.6k|        D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ',
18526|  30.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_double_starred+"));
18527|  30.6k|    }
18528|  30.6k|    _res = NULL;
18529|  48.9k|  done:
18530|  48.9k|    p->level--;
18531|  48.9k|    return _res;
18532|  30.6k|}
parser.c:_gather_94_rule:
33245|  50.8k|{
33246|  50.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   101k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33246:9): [True: 0, False: 50.8k]
  |  Branch (33246:35): [True: 0, False: 50.8k]
  ------------------
33247|      0|        _Pypegen_stack_overflow(p);
33248|      0|    }
33249|  50.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (33249:9): [True: 0, False: 50.8k]
  ------------------
33250|      0|        p->level--;
33251|      0|        return NULL;
33252|      0|    }
33253|  50.8k|    asdl_seq * _res = NULL;
33254|  50.8k|    int _mark = p->mark;
33255|  50.8k|    { // kwarg_or_starred _loop0_93
33256|  50.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (33256:13): [True: 0, False: 50.8k]
  ------------------
33257|      0|            p->level--;
33258|      0|            return NULL;
33259|      0|        }
33260|  50.8k|        D(fprintf(stderr, "%*c> _gather_94[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_93"));
33261|  50.8k|        KeywordOrStarred* elem;
33262|  50.8k|        asdl_seq * seq;
33263|  50.8k|        if (
33264|  50.8k|            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
  ------------------
  |  Branch (33264:13): [True: 10.9k, False: 39.9k]
  ------------------
33265|  10.9k|            &&
33266|  10.9k|            (seq = _loop0_93_rule(p))  // _loop0_93
  ------------------
  |  Branch (33266:13): [True: 10.9k, False: 0]
  ------------------
33267|  50.8k|        )
33268|  10.9k|        {
33269|  10.9k|            D(fprintf(stderr, "%*c+ _gather_94[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_93"));
33270|  10.9k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33271|  10.9k|            goto done;
33272|  10.9k|        }
33273|  39.9k|        p->mark = _mark;
33274|  39.9k|        D(fprintf(stderr, "%*c%s _gather_94[%d-%d]: %s failed!\n", p->level, ' ',
33275|  39.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_93"));
33276|  39.9k|    }
33277|  39.9k|    _res = NULL;
33278|  50.8k|  done:
33279|  50.8k|    p->level--;
33280|  50.8k|    return _res;
33281|  39.9k|}
parser.c:kwarg_or_starred_rule:
18642|  62.3k|{
18643|  62.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   124k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18643:9): [True: 0, False: 62.3k]
  |  Branch (18643:35): [True: 0, False: 62.3k]
  ------------------
18644|      0|        _Pypegen_stack_overflow(p);
18645|      0|    }
18646|  62.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (18646:9): [True: 0, False: 62.3k]
  ------------------
18647|      0|        p->level--;
18648|      0|        return NULL;
18649|      0|    }
18650|  62.3k|    KeywordOrStarred* _res = NULL;
18651|  62.3k|    int _mark = p->mark;
18652|  62.3k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18652:9): [True: 4.20k, False: 58.1k]
  |  Branch (18652:31): [True: 7, False: 4.19k]
  ------------------
18653|      7|        p->error_indicator = 1;
18654|      7|        p->level--;
18655|      7|        return NULL;
18656|      7|    }
18657|  62.3k|    int _start_lineno = p->tokens[_mark]->lineno;
18658|  62.3k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  62.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 62.3k]
  |  |  ------------------
  ------------------
18659|  62.3k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18660|  62.3k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  62.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 62.3k]
  |  |  ------------------
  ------------------
18661|  62.3k|    if (p->call_invalid_rules) { // invalid_kwarg
  ------------------
  |  Branch (18661:9): [True: 45.3k, False: 16.9k]
  ------------------
18662|  45.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (18662:13): [True: 0, False: 45.3k]
  ------------------
18663|      0|            p->level--;
18664|      0|            return NULL;
18665|      0|        }
18666|  45.3k|        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18667|  45.3k|        void *invalid_kwarg_var;
18668|  45.3k|        if (
18669|  45.3k|            (invalid_kwarg_var = invalid_kwarg_rule(p))  // invalid_kwarg
  ------------------
  |  Branch (18669:13): [True: 0, False: 45.3k]
  ------------------
18670|  45.3k|        )
18671|      0|        {
18672|      0|            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18673|      0|            _res = invalid_kwarg_var;
18674|      0|            goto done;
18675|      0|        }
18676|  45.3k|        p->mark = _mark;
18677|  45.3k|        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
18678|  45.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg"));
18679|  45.3k|    }
18680|  62.3k|    { // NAME '=' expression
18681|  62.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (18681:13): [True: 1.24k, False: 61.0k]
  ------------------
18682|  1.24k|            p->level--;
18683|  1.24k|            return NULL;
18684|  1.24k|        }
18685|  61.0k|        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18686|  61.0k|        Token * _literal;
18687|  61.0k|        expr_ty a;
18688|  61.0k|        expr_ty b;
18689|  61.0k|        if (
18690|  61.0k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (18690:13): [True: 19.2k, False: 41.8k]
  ------------------
18691|  19.2k|            &&
18692|  19.2k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (18692:13): [True: 16.1k, False: 3.04k]
  ------------------
18693|  16.1k|            &&
18694|  16.1k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (18694:13): [True: 14.4k, False: 1.72k]
  ------------------
18695|  61.0k|        )
18696|  14.4k|        {
18697|  14.4k|            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18698|  14.4k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18699|  14.4k|            if (_token == NULL) {
  ------------------
  |  Branch (18699:17): [True: 0, False: 14.4k]
  ------------------
18700|      0|                p->level--;
18701|      0|                return NULL;
18702|      0|            }
18703|  14.4k|            int _end_lineno = _token->end_lineno;
18704|  14.4k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  14.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
18705|  14.4k|            int _end_col_offset = _token->end_col_offset;
18706|  14.4k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  14.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 14.4k]
  |  |  ------------------
  ------------------
18707|  14.4k|            _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
  ------------------
  |  |  271|  14.4k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
18708|  14.4k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18708:18): [True: 0, False: 14.4k]
  |  Branch (18708:34): [True: 0, False: 14.4k]
  |  Branch (18708:57): [True: 0, False: 0]
  ------------------
18709|      0|                p->error_indicator = 1;
18710|      0|                p->level--;
18711|      0|                return NULL;
18712|      0|            }
18713|  14.4k|            goto done;
18714|  14.4k|        }
18715|  46.6k|        p->mark = _mark;
18716|  46.6k|        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
18717|  46.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression"));
18718|  46.6k|    }
18719|      0|    { // starred_expression
18720|  46.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (18720:13): [True: 628, False: 45.9k]
  ------------------
18721|    628|            p->level--;
18722|    628|            return NULL;
18723|    628|        }
18724|  45.9k|        D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
18725|  45.9k|        expr_ty a;
18726|  45.9k|        if (
18727|  45.9k|            (a = starred_expression_rule(p))  // starred_expression
  ------------------
  |  Branch (18727:13): [True: 4.86k, False: 41.1k]
  ------------------
18728|  45.9k|        )
18729|  4.86k|        {
18730|  4.86k|            D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
18731|  4.86k|            _res = _PyPegen_keyword_or_starred ( p , a , 0 );
18732|  4.86k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18732:18): [True: 0, False: 4.86k]
  |  Branch (18732:34): [True: 0, False: 4.86k]
  |  Branch (18732:57): [True: 0, False: 0]
  ------------------
18733|      0|                p->error_indicator = 1;
18734|      0|                p->level--;
18735|      0|                return NULL;
18736|      0|            }
18737|  4.86k|            goto done;
18738|  4.86k|        }
18739|  41.1k|        p->mark = _mark;
18740|  41.1k|        D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ',
18741|  41.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
18742|  41.1k|    }
18743|  41.1k|    _res = NULL;
18744|  60.4k|  done:
18745|  60.4k|    p->level--;
18746|  60.4k|    return _res;
18747|  41.1k|}
parser.c:invalid_kwarg_rule:
19921|  86.3k|{
19922|  86.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   172k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19922:9): [True: 0, False: 86.3k]
  |  Branch (19922:35): [True: 0, False: 86.3k]
  ------------------
19923|      0|        _Pypegen_stack_overflow(p);
19924|      0|    }
19925|  86.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (19925:9): [True: 0, False: 86.3k]
  ------------------
19926|      0|        p->level--;
19927|      0|        return NULL;
19928|      0|    }
19929|  86.3k|    void * _res = NULL;
19930|  86.3k|    int _mark = p->mark;
19931|  86.3k|    { // 'True' '='
19932|  86.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (19932:13): [True: 0, False: 86.3k]
  ------------------
19933|      0|            p->level--;
19934|      0|            return NULL;
19935|      0|        }
19936|  86.3k|        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True' '='"));
19937|  86.3k|        Token * a;
19938|  86.3k|        Token * b;
19939|  86.3k|        if (
19940|  86.3k|            (a = _PyPegen_expect_token(p, 627))  // token='True'
  ------------------
  |  Branch (19940:13): [True: 207, False: 86.1k]
  ------------------
19941|    207|            &&
19942|    207|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (19942:13): [True: 2, False: 205]
  ------------------
19943|  86.3k|        )
19944|      2|        {
19945|      2|            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True' '='"));
19946|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to True" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
19947|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19947:18): [True: 2, False: 0]
  |  Branch (19947:34): [True: 0, False: 0]
  |  Branch (19947:57): [True: 2, False: 0]
  ------------------
19948|      2|                p->error_indicator = 1;
19949|      2|                p->level--;
19950|      2|                return NULL;
19951|      2|            }
19952|      0|            goto done;
19953|      2|        }
19954|  86.3k|        p->mark = _mark;
19955|  86.3k|        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
19956|  86.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True' '='"));
19957|  86.3k|    }
19958|      0|    { // 'False' '='
19959|  86.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (19959:13): [True: 1, False: 86.3k]
  ------------------
19960|      1|            p->level--;
19961|      1|            return NULL;
19962|      1|        }
19963|  86.3k|        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False' '='"));
19964|  86.3k|        Token * a;
19965|  86.3k|        Token * b;
19966|  86.3k|        if (
19967|  86.3k|            (a = _PyPegen_expect_token(p, 629))  // token='False'
  ------------------
  |  Branch (19967:13): [True: 889, False: 85.4k]
  ------------------
19968|    889|            &&
19969|    889|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (19969:13): [True: 0, False: 889]
  ------------------
19970|  86.3k|        )
19971|      0|        {
19972|      0|            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False' '='"));
19973|      0|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to False" );
  ------------------
  |  |  237|      0|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
19974|      0|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19974:18): [True: 0, False: 0]
  |  Branch (19974:34): [True: 0, False: 0]
  |  Branch (19974:57): [True: 0, False: 0]
  ------------------
19975|      0|                p->error_indicator = 1;
19976|      0|                p->level--;
19977|      0|                return NULL;
19978|      0|            }
19979|      0|            goto done;
19980|      0|        }
19981|  86.3k|        p->mark = _mark;
19982|  86.3k|        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
19983|  86.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False' '='"));
19984|  86.3k|    }
19985|      0|    { // 'None' '='
19986|  86.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (19986:13): [True: 0, False: 86.3k]
  ------------------
19987|      0|            p->level--;
19988|      0|            return NULL;
19989|      0|        }
19990|  86.3k|        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None' '='"));
19991|  86.3k|        Token * a;
19992|  86.3k|        Token * b;
19993|  86.3k|        if (
19994|  86.3k|            (a = _PyPegen_expect_token(p, 628))  // token='None'
  ------------------
  |  Branch (19994:13): [True: 47, False: 86.3k]
  ------------------
19995|     47|            &&
19996|     47|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (19996:13): [True: 1, False: 46]
  ------------------
19997|  86.3k|        )
19998|      1|        {
19999|      1|            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None' '='"));
20000|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to None" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20001|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20001:18): [True: 1, False: 0]
  |  Branch (20001:34): [True: 0, False: 0]
  |  Branch (20001:57): [True: 1, False: 0]
  ------------------
20002|      1|                p->error_indicator = 1;
20003|      1|                p->level--;
20004|      1|                return NULL;
20005|      1|            }
20006|      0|            goto done;
20007|      1|        }
20008|  86.3k|        p->mark = _mark;
20009|  86.3k|        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20010|  86.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None' '='"));
20011|  86.3k|    }
20012|      0|    { // NAME '=' expression for_if_clauses
20013|  86.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (20013:13): [True: 0, False: 86.3k]
  ------------------
20014|      0|            p->level--;
20015|      0|            return NULL;
20016|      0|        }
20017|  86.3k|        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
20018|  86.3k|        expr_ty a;
20019|  86.3k|        Token * b;
20020|  86.3k|        expr_ty expression_var;
20021|  86.3k|        asdl_comprehension_seq* for_if_clauses_var;
20022|  86.3k|        if (
20023|  86.3k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (20023:13): [True: 20.3k, False: 65.9k]
  ------------------
20024|  20.3k|            &&
20025|  20.3k|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (20025:13): [True: 13.2k, False: 7.18k]
  ------------------
20026|  13.2k|            &&
20027|  13.2k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (20027:13): [True: 10.4k, False: 2.77k]
  ------------------
20028|  10.4k|            &&
20029|  10.4k|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (20029:13): [True: 1, False: 10.4k]
  ------------------
20030|  86.3k|        )
20031|      1|        {
20032|      1|            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
20033|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20034|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20034:18): [True: 1, False: 0]
  |  Branch (20034:34): [True: 0, False: 0]
  |  Branch (20034:57): [True: 1, False: 0]
  ------------------
20035|      1|                p->error_indicator = 1;
20036|      1|                p->level--;
20037|      1|                return NULL;
20038|      1|            }
20039|      0|            goto done;
20040|      1|        }
20041|  86.3k|        p->mark = _mark;
20042|  86.3k|        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20043|  86.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression for_if_clauses"));
20044|  86.3k|    }
20045|      0|    { // !(NAME '=') expression '='
20046|  86.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (20046:13): [True: 887, False: 85.4k]
  ------------------
20047|    887|            p->level--;
20048|    887|            return NULL;
20049|    887|        }
20050|  85.4k|        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME '=') expression '='"));
20051|  85.4k|        expr_ty a;
20052|  85.4k|        Token * b;
20053|  85.4k|        if (
20054|  85.4k|            _PyPegen_lookahead(0, _tmp_112_rule, p)
  ------------------
  |  Branch (20054:13): [True: 73.1k, False: 12.3k]
  ------------------
20055|  73.1k|            &&
20056|  73.1k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (20056:13): [True: 9.75k, False: 63.4k]
  ------------------
20057|  9.75k|            &&
20058|  9.75k|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (20058:13): [True: 10, False: 9.74k]
  ------------------
20059|  85.4k|        )
20060|     10|        {
20061|     10|            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(NAME '=') expression '='"));
20062|     10|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expression cannot contain assignment, perhaps you meant \"==\"?" );
  ------------------
  |  |  237|     10|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20063|     10|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20063:18): [True: 10, False: 0]
  |  Branch (20063:34): [True: 0, False: 0]
  |  Branch (20063:57): [True: 10, False: 0]
  ------------------
20064|     10|                p->error_indicator = 1;
20065|     10|                p->level--;
20066|     10|                return NULL;
20067|     10|            }
20068|      0|            goto done;
20069|     10|        }
20070|  85.4k|        p->mark = _mark;
20071|  85.4k|        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20072|  85.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(NAME '=') expression '='"));
20073|  85.4k|    }
20074|      0|    { // '**' expression '=' expression
20075|  85.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (20075:13): [True: 583, False: 84.8k]
  ------------------
20076|    583|            p->level--;
20077|    583|            return NULL;
20078|    583|        }
20079|  84.8k|        D(fprintf(stderr, "%*c> invalid_kwarg[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression '=' expression"));
20080|  84.8k|        Token * _literal;
20081|  84.8k|        Token * a;
20082|  84.8k|        expr_ty b;
20083|  84.8k|        expr_ty expression_var;
20084|  84.8k|        if (
20085|  84.8k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (20085:13): [True: 21.6k, False: 63.2k]
  ------------------
20086|  21.6k|            &&
20087|  21.6k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (20087:13): [True: 20.7k, False: 907]
  ------------------
20088|  20.7k|            &&
20089|  20.7k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (20089:13): [True: 91, False: 20.6k]
  ------------------
20090|     91|            &&
20091|     91|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (20091:13): [True: 2, False: 89]
  ------------------
20092|  84.8k|        )
20093|      2|        {
20094|      2|            D(fprintf(stderr, "%*c+ invalid_kwarg[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression '=' expression"));
20095|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to keyword argument unpacking" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20096|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20096:18): [True: 2, False: 0]
  |  Branch (20096:34): [True: 0, False: 0]
  |  Branch (20096:57): [True: 2, False: 0]
  ------------------
20097|      2|                p->error_indicator = 1;
20098|      2|                p->level--;
20099|      2|                return NULL;
20100|      2|            }
20101|      0|            goto done;
20102|      2|        }
20103|  84.8k|        p->mark = _mark;
20104|  84.8k|        D(fprintf(stderr, "%*c%s invalid_kwarg[%d-%d]: %s failed!\n", p->level, ' ',
20105|  84.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression '=' expression"));
20106|  84.8k|    }
20107|  84.8k|    _res = NULL;
20108|  84.8k|  done:
20109|  84.8k|    p->level--;
20110|  84.8k|    return _res;
20111|  84.8k|}
parser.c:_tmp_112_rule:
34241|  85.4k|{
34242|  85.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   170k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34242:9): [True: 0, False: 85.4k]
  |  Branch (34242:35): [True: 0, False: 85.4k]
  ------------------
34243|      0|        _Pypegen_stack_overflow(p);
34244|      0|    }
34245|  85.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (34245:9): [True: 0, False: 85.4k]
  ------------------
34246|      0|        p->level--;
34247|      0|        return NULL;
34248|      0|    }
34249|  85.4k|    void * _res = NULL;
34250|  85.4k|    int _mark = p->mark;
34251|  85.4k|    { // NAME '='
34252|  85.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (34252:13): [True: 0, False: 85.4k]
  ------------------
34253|      0|            p->level--;
34254|      0|            return NULL;
34255|      0|        }
34256|  85.4k|        D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '='"));
34257|  85.4k|        Token * _literal;
34258|  85.4k|        expr_ty name_var;
34259|  85.4k|        if (
34260|  85.4k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (34260:13): [True: 19.5k, False: 65.9k]
  ------------------
34261|  19.5k|            &&
34262|  19.5k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (34262:13): [True: 12.3k, False: 7.18k]
  ------------------
34263|  85.4k|        )
34264|  12.3k|        {
34265|  12.3k|            D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '='"));
34266|  12.3k|            _res = _PyPegen_dummy_name(p, name_var, _literal);
34267|  12.3k|            goto done;
34268|  12.3k|        }
34269|  73.1k|        p->mark = _mark;
34270|  73.1k|        D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ',
34271|  73.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '='"));
34272|  73.1k|    }
34273|  73.1k|    _res = NULL;
34274|  85.4k|  done:
34275|  85.4k|    p->level--;
34276|  85.4k|    return _res;
34277|  73.1k|}
parser.c:_loop0_93_rule:
33169|  10.9k|{
33170|  10.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  21.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33170:9): [True: 0, False: 10.9k]
  |  Branch (33170:35): [True: 0, False: 10.9k]
  ------------------
33171|      0|        _Pypegen_stack_overflow(p);
33172|      0|    }
33173|  10.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (33173:9): [True: 0, False: 10.9k]
  ------------------
33174|      0|        p->level--;
33175|      0|        return NULL;
33176|      0|    }
33177|  10.9k|    void *_res = NULL;
33178|  10.9k|    int _mark = p->mark;
33179|  10.9k|    void **_children = PyMem_Malloc(sizeof(void *));
33180|  10.9k|    if (!_children) {
  ------------------
  |  Branch (33180:9): [True: 0, False: 10.9k]
  ------------------
33181|      0|        p->error_indicator = 1;
33182|      0|        PyErr_NoMemory();
33183|      0|        p->level--;
33184|      0|        return NULL;
33185|      0|    }
33186|  10.9k|    Py_ssize_t _children_capacity = 1;
33187|  10.9k|    Py_ssize_t _n = 0;
33188|  10.9k|    { // ',' kwarg_or_starred
33189|  10.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (33189:13): [True: 0, False: 10.9k]
  ------------------
33190|      0|            p->level--;
33191|      0|            return NULL;
33192|      0|        }
33193|  10.9k|        D(fprintf(stderr, "%*c> _loop0_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred"));
33194|  10.9k|        Token * _literal;
33195|  10.9k|        KeywordOrStarred* elem;
33196|  10.9k|        while (
33197|  19.3k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33197:13): [True: 11.4k, False: 7.86k]
  ------------------
33198|  11.4k|            &&
33199|  11.4k|            (elem = kwarg_or_starred_rule(p))  // kwarg_or_starred
  ------------------
  |  Branch (33199:13): [True: 8.37k, False: 3.09k]
  ------------------
33200|  10.9k|        )
33201|  8.37k|        {
33202|  8.37k|            _res = elem;
33203|  8.37k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (33203:18): [True: 0, False: 8.37k]
  |  Branch (33203:34): [True: 0, False: 8.37k]
  |  Branch (33203:57): [True: 0, False: 0]
  ------------------
33204|      0|                p->error_indicator = 1;
33205|      0|                PyMem_Free(_children);
33206|      0|                p->level--;
33207|      0|                return NULL;
33208|      0|            }
33209|  8.37k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (33209:17): [True: 2.55k, False: 5.82k]
  ------------------
33210|  2.55k|                _children_capacity *= 2;
33211|  2.55k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33212|  2.55k|                if (!_new_children) {
  ------------------
  |  Branch (33212:21): [True: 0, False: 2.55k]
  ------------------
33213|      0|                    PyMem_Free(_children);
33214|      0|                    p->error_indicator = 1;
33215|      0|                    PyErr_NoMemory();
33216|      0|                    p->level--;
33217|      0|                    return NULL;
33218|      0|                }
33219|  2.55k|                _children = _new_children;
33220|  2.55k|            }
33221|  8.37k|            _children[_n++] = _res;
33222|  8.37k|            _mark = p->mark;
33223|  8.37k|        }
33224|  10.9k|        p->mark = _mark;
33225|  10.9k|        D(fprintf(stderr, "%*c%s _loop0_93[%d-%d]: %s failed!\n", p->level, ' ',
33226|  10.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred"));
33227|  10.9k|    }
33228|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33229|  10.9k|    if (!_seq) {
  ------------------
  |  Branch (33229:9): [True: 0, False: 10.9k]
  ------------------
33230|      0|        PyMem_Free(_children);
33231|      0|        p->error_indicator = 1;
33232|      0|        PyErr_NoMemory();
33233|      0|        p->level--;
33234|      0|        return NULL;
33235|      0|    }
33236|  19.3k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  8.37k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  19.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (33236:28): [True: 8.37k, False: 10.9k]
  ------------------
33237|  10.9k|    PyMem_Free(_children);
33238|  10.9k|    p->level--;
33239|  10.9k|    return _seq;
33240|  10.9k|}
parser.c:_tmp_95_rule:
33286|  10.9k|{
33287|  10.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  21.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33287:9): [True: 0, False: 10.9k]
  |  Branch (33287:35): [True: 0, False: 10.9k]
  ------------------
33288|      0|        _Pypegen_stack_overflow(p);
33289|      0|    }
33290|  10.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (33290:9): [True: 968, False: 9.99k]
  ------------------
33291|    968|        p->level--;
33292|    968|        return NULL;
33293|    968|    }
33294|  9.99k|    void * _res = NULL;
33295|  9.99k|    int _mark = p->mark;
33296|  9.99k|    { // ',' ','.kwarg_or_double_starred+
33297|  9.99k|        if (p->error_indicator) {
  ------------------
  |  Branch (33297:13): [True: 0, False: 9.99k]
  ------------------
33298|      0|            p->level--;
33299|      0|            return NULL;
33300|      0|        }
33301|  9.99k|        D(fprintf(stderr, "%*c> _tmp_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' ','.kwarg_or_double_starred+"));
33302|  9.99k|        Token * _literal;
33303|  9.99k|        asdl_seq * c;
33304|  9.99k|        if (
33305|  9.99k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33305:13): [True: 2.12k, False: 7.86k]
  ------------------
33306|  2.12k|            &&
33307|  2.12k|            (c = _gather_97_rule(p))  // ','.kwarg_or_double_starred+
  ------------------
  |  Branch (33307:13): [True: 940, False: 1.18k]
  ------------------
33308|  9.99k|        )
33309|    940|        {
33310|    940|            D(fprintf(stderr, "%*c+ _tmp_95[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' ','.kwarg_or_double_starred+"));
33311|    940|            _res = c;
33312|    940|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (33312:18): [True: 0, False: 940]
  |  Branch (33312:34): [True: 55, False: 885]
  |  Branch (33312:57): [True: 55, False: 0]
  ------------------
33313|     55|                p->error_indicator = 1;
33314|     55|                p->level--;
33315|     55|                return NULL;
33316|     55|            }
33317|    885|            goto done;
33318|    940|        }
33319|  9.05k|        p->mark = _mark;
33320|  9.05k|        D(fprintf(stderr, "%*c%s _tmp_95[%d-%d]: %s failed!\n", p->level, ' ',
33321|  9.05k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' ','.kwarg_or_double_starred+"));
33322|  9.05k|    }
33323|  9.05k|    _res = NULL;
33324|  9.93k|  done:
33325|  9.93k|    p->level--;
33326|  9.93k|    return _res;
33327|  9.05k|}
parser.c:_gather_97_rule:
33408|  41.0k|{
33409|  41.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  82.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33409:9): [True: 0, False: 41.0k]
  |  Branch (33409:35): [True: 0, False: 41.0k]
  ------------------
33410|      0|        _Pypegen_stack_overflow(p);
33411|      0|    }
33412|  41.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (33412:9): [True: 0, False: 41.0k]
  ------------------
33413|      0|        p->level--;
33414|      0|        return NULL;
33415|      0|    }
33416|  41.0k|    asdl_seq * _res = NULL;
33417|  41.0k|    int _mark = p->mark;
33418|  41.0k|    { // kwarg_or_double_starred _loop0_96
33419|  41.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (33419:13): [True: 0, False: 41.0k]
  ------------------
33420|      0|            p->level--;
33421|      0|            return NULL;
33422|      0|        }
33423|  41.0k|        D(fprintf(stderr, "%*c> _gather_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_96"));
33424|  41.0k|        KeywordOrStarred* elem;
33425|  41.0k|        asdl_seq * seq;
33426|  41.0k|        if (
33427|  41.0k|            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
  ------------------
  |  Branch (33427:13): [True: 9.24k, False: 31.8k]
  ------------------
33428|  9.24k|            &&
33429|  9.24k|            (seq = _loop0_96_rule(p))  // _loop0_96
  ------------------
  |  Branch (33429:13): [True: 9.24k, False: 0]
  ------------------
33430|  41.0k|        )
33431|  9.24k|        {
33432|  9.24k|            D(fprintf(stderr, "%*c+ _gather_97[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_96"));
33433|  9.24k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33434|  9.24k|            goto done;
33435|  9.24k|        }
33436|  31.8k|        p->mark = _mark;
33437|  31.8k|        D(fprintf(stderr, "%*c%s _gather_97[%d-%d]: %s failed!\n", p->level, ' ',
33438|  31.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_96"));
33439|  31.8k|    }
33440|  31.8k|    _res = NULL;
33441|  41.0k|  done:
33442|  41.0k|    p->level--;
33443|  41.0k|    return _res;
33444|  31.8k|}
parser.c:kwarg_or_double_starred_rule:
18752|  52.1k|{
18753|  52.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   104k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18753:9): [True: 0, False: 52.1k]
  |  Branch (18753:35): [True: 0, False: 52.1k]
  ------------------
18754|      0|        _Pypegen_stack_overflow(p);
18755|      0|    }
18756|  52.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (18756:9): [True: 0, False: 52.1k]
  ------------------
18757|      0|        p->level--;
18758|      0|        return NULL;
18759|      0|    }
18760|  52.1k|    KeywordOrStarred* _res = NULL;
18761|  52.1k|    int _mark = p->mark;
18762|  52.1k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18762:9): [True: 3.04k, False: 49.1k]
  |  Branch (18762:31): [True: 8, False: 3.03k]
  ------------------
18763|      8|        p->error_indicator = 1;
18764|      8|        p->level--;
18765|      8|        return NULL;
18766|      8|    }
18767|  52.1k|    int _start_lineno = p->tokens[_mark]->lineno;
18768|  52.1k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  52.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 52.1k]
  |  |  ------------------
  ------------------
18769|  52.1k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18770|  52.1k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  52.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 52.1k]
  |  |  ------------------
  ------------------
18771|  52.1k|    if (p->call_invalid_rules) { // invalid_kwarg
  ------------------
  |  Branch (18771:9): [True: 41.0k, False: 11.1k]
  ------------------
18772|  41.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (18772:13): [True: 0, False: 41.0k]
  ------------------
18773|      0|            p->level--;
18774|      0|            return NULL;
18775|      0|        }
18776|  41.0k|        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18777|  41.0k|        void *invalid_kwarg_var;
18778|  41.0k|        if (
18779|  41.0k|            (invalid_kwarg_var = invalid_kwarg_rule(p))  // invalid_kwarg
  ------------------
  |  Branch (18779:13): [True: 0, False: 41.0k]
  ------------------
18780|  41.0k|        )
18781|      0|        {
18782|      0|            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg"));
18783|      0|            _res = invalid_kwarg_var;
18784|      0|            goto done;
18785|      0|        }
18786|  41.0k|        p->mark = _mark;
18787|  41.0k|        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
18788|  41.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg"));
18789|  41.0k|    }
18790|  52.1k|    { // NAME '=' expression
18791|  52.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (18791:13): [True: 479, False: 51.6k]
  ------------------
18792|    479|            p->level--;
18793|    479|            return NULL;
18794|    479|        }
18795|  51.6k|        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18796|  51.6k|        Token * _literal;
18797|  51.6k|        expr_ty a;
18798|  51.6k|        expr_ty b;
18799|  51.6k|        if (
18800|  51.6k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (18800:13): [True: 5.75k, False: 45.9k]
  ------------------
18801|  5.75k|            &&
18802|  5.75k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (18802:13): [True: 1.87k, False: 3.87k]
  ------------------
18803|  1.87k|            &&
18804|  1.87k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (18804:13): [True: 679, False: 1.19k]
  ------------------
18805|  51.6k|        )
18806|    679|        {
18807|    679|            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression"));
18808|    679|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18809|    679|            if (_token == NULL) {
  ------------------
  |  Branch (18809:17): [True: 0, False: 679]
  ------------------
18810|      0|                p->level--;
18811|      0|                return NULL;
18812|      0|            }
18813|    679|            int _end_lineno = _token->end_lineno;
18814|    679|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    679|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 679]
  |  |  ------------------
  ------------------
18815|    679|            int _end_col_offset = _token->end_col_offset;
18816|    679|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    679|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 679]
  |  |  ------------------
  ------------------
18817|    679|            _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 );
  ------------------
  |  |  271|    679|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
18818|    679|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18818:18): [True: 0, False: 679]
  |  Branch (18818:34): [True: 0, False: 679]
  |  Branch (18818:57): [True: 0, False: 0]
  ------------------
18819|      0|                p->error_indicator = 1;
18820|      0|                p->level--;
18821|      0|                return NULL;
18822|      0|            }
18823|    679|            goto done;
18824|    679|        }
18825|  50.9k|        p->mark = _mark;
18826|  50.9k|        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
18827|  50.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression"));
18828|  50.9k|    }
18829|      0|    { // '**' expression
18830|  50.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (18830:13): [True: 84, False: 50.8k]
  ------------------
18831|     84|            p->level--;
18832|     84|            return NULL;
18833|     84|        }
18834|  50.8k|        D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression"));
18835|  50.8k|        Token * _literal;
18836|  50.8k|        expr_ty a;
18837|  50.8k|        if (
18838|  50.8k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (18838:13): [True: 15.0k, False: 35.8k]
  ------------------
18839|  15.0k|            &&
18840|  15.0k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (18840:13): [True: 14.6k, False: 404]
  ------------------
18841|  50.8k|        )
18842|  14.6k|        {
18843|  14.6k|            D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression"));
18844|  14.6k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18845|  14.6k|            if (_token == NULL) {
  ------------------
  |  Branch (18845:17): [True: 0, False: 14.6k]
  ------------------
18846|      0|                p->level--;
18847|      0|                return NULL;
18848|      0|            }
18849|  14.6k|            int _end_lineno = _token->end_lineno;
18850|  14.6k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  14.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 14.6k]
  |  |  ------------------
  ------------------
18851|  14.6k|            int _end_col_offset = _token->end_col_offset;
18852|  14.6k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  14.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 14.6k]
  |  |  ------------------
  ------------------
18853|  14.6k|            _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( NULL , a , EXTRA ) ) , 1 );
  ------------------
  |  |  271|  14.6k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
18854|  14.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18854:18): [True: 0, False: 14.6k]
  |  Branch (18854:34): [True: 0, False: 14.6k]
  |  Branch (18854:57): [True: 0, False: 0]
  ------------------
18855|      0|                p->error_indicator = 1;
18856|      0|                p->level--;
18857|      0|                return NULL;
18858|      0|            }
18859|  14.6k|            goto done;
18860|  14.6k|        }
18861|  36.2k|        p->mark = _mark;
18862|  36.2k|        D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ',
18863|  36.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression"));
18864|  36.2k|    }
18865|  36.2k|    _res = NULL;
18866|  51.5k|  done:
18867|  51.5k|    p->level--;
18868|  51.5k|    return _res;
18869|  36.2k|}
parser.c:_loop0_96_rule:
33332|  9.24k|{
33333|  9.24k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33333:9): [True: 0, False: 9.24k]
  |  Branch (33333:35): [True: 0, False: 9.24k]
  ------------------
33334|      0|        _Pypegen_stack_overflow(p);
33335|      0|    }
33336|  9.24k|    if (p->error_indicator) {
  ------------------
  |  Branch (33336:9): [True: 0, False: 9.24k]
  ------------------
33337|      0|        p->level--;
33338|      0|        return NULL;
33339|      0|    }
33340|  9.24k|    void *_res = NULL;
33341|  9.24k|    int _mark = p->mark;
33342|  9.24k|    void **_children = PyMem_Malloc(sizeof(void *));
33343|  9.24k|    if (!_children) {
  ------------------
  |  Branch (33343:9): [True: 0, False: 9.24k]
  ------------------
33344|      0|        p->error_indicator = 1;
33345|      0|        PyErr_NoMemory();
33346|      0|        p->level--;
33347|      0|        return NULL;
33348|      0|    }
33349|  9.24k|    Py_ssize_t _children_capacity = 1;
33350|  9.24k|    Py_ssize_t _n = 0;
33351|  9.24k|    { // ',' kwarg_or_double_starred
33352|  9.24k|        if (p->error_indicator) {
  ------------------
  |  Branch (33352:13): [True: 0, False: 9.24k]
  ------------------
33353|      0|            p->level--;
33354|      0|            return NULL;
33355|      0|        }
33356|  9.24k|        D(fprintf(stderr, "%*c> _loop0_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred"));
33357|  9.24k|        Token * _literal;
33358|  9.24k|        KeywordOrStarred* elem;
33359|  9.24k|        while (
33360|  15.3k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33360:13): [True: 11.0k, False: 4.24k]
  ------------------
33361|  11.0k|            &&
33362|  11.0k|            (elem = kwarg_or_double_starred_rule(p))  // kwarg_or_double_starred
  ------------------
  |  Branch (33362:13): [True: 6.05k, False: 5.00k]
  ------------------
33363|  9.24k|        )
33364|  6.05k|        {
33365|  6.05k|            _res = elem;
33366|  6.05k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (33366:18): [True: 0, False: 6.05k]
  |  Branch (33366:34): [True: 0, False: 6.05k]
  |  Branch (33366:57): [True: 0, False: 0]
  ------------------
33367|      0|                p->error_indicator = 1;
33368|      0|                PyMem_Free(_children);
33369|      0|                p->level--;
33370|      0|                return NULL;
33371|      0|            }
33372|  6.05k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (33372:17): [True: 1.69k, False: 4.36k]
  ------------------
33373|  1.69k|                _children_capacity *= 2;
33374|  1.69k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33375|  1.69k|                if (!_new_children) {
  ------------------
  |  Branch (33375:21): [True: 0, False: 1.69k]
  ------------------
33376|      0|                    PyMem_Free(_children);
33377|      0|                    p->error_indicator = 1;
33378|      0|                    PyErr_NoMemory();
33379|      0|                    p->level--;
33380|      0|                    return NULL;
33381|      0|                }
33382|  1.69k|                _children = _new_children;
33383|  1.69k|            }
33384|  6.05k|            _children[_n++] = _res;
33385|  6.05k|            _mark = p->mark;
33386|  6.05k|        }
33387|  9.24k|        p->mark = _mark;
33388|  9.24k|        D(fprintf(stderr, "%*c%s _loop0_96[%d-%d]: %s failed!\n", p->level, ' ',
33389|  9.24k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred"));
33390|  9.24k|    }
33391|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33392|  9.24k|    if (!_seq) {
  ------------------
  |  Branch (33392:9): [True: 0, False: 9.24k]
  ------------------
33393|      0|        PyMem_Free(_children);
33394|      0|        p->error_indicator = 1;
33395|      0|        PyErr_NoMemory();
33396|      0|        p->level--;
33397|      0|        return NULL;
33398|      0|    }
33399|  15.3k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  6.05k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  15.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (33399:28): [True: 6.05k, False: 9.24k]
  ------------------
33400|  9.24k|    PyMem_Free(_children);
33401|  9.24k|    p->level--;
33402|  9.24k|    return _seq;
33403|  9.24k|}
parser.c:invalid_arguments_rule:
19676|  9.57k|{
19677|  9.57k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19677:9): [True: 0, False: 9.57k]
  |  Branch (19677:35): [True: 0, False: 9.57k]
  ------------------
19678|      0|        _Pypegen_stack_overflow(p);
19679|      0|    }
19680|  9.57k|    if (p->error_indicator) {
  ------------------
  |  Branch (19680:9): [True: 0, False: 9.57k]
  ------------------
19681|      0|        p->level--;
19682|      0|        return NULL;
19683|      0|    }
19684|  9.57k|    void * _res = NULL;
19685|  9.57k|    int _mark = p->mark;
19686|  9.57k|    { // ((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+
19687|  9.57k|        if (p->error_indicator) {
  ------------------
  |  Branch (19687:13): [True: 0, False: 9.57k]
  ------------------
19688|      0|            p->level--;
19689|      0|            return NULL;
19690|      0|        }
19691|  9.57k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+"));
19692|  9.57k|        asdl_seq * _gather_108_var;
19693|  9.57k|        void *_tmp_106_var;
19694|  9.57k|        Token * a;
19695|  9.57k|        if (
19696|  9.57k|            (_tmp_106_var = _tmp_106_rule(p))  // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs
  ------------------
  |  Branch (19696:13): [True: 3.60k, False: 5.96k]
  ------------------
19697|  3.60k|            &&
19698|  3.60k|            (a = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (19698:13): [True: 1.95k, False: 1.64k]
  ------------------
19699|  1.95k|            &&
19700|  1.95k|            (_gather_108_var = _gather_108_rule(p))  // ','.(starred_expression !'=')+
  ------------------
  |  Branch (19700:13): [True: 1.03k, False: 921]
  ------------------
19701|  9.57k|        )
19702|  1.03k|        {
19703|  1.03k|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+"));
19704|  1.03k|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "iterable argument unpacking follows keyword argument unpacking" );
  ------------------
  |  |  241|  1.03k|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|  1.03k|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|  1.03k|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
19705|  1.03k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19705:18): [True: 1.03k, False: 0]
  |  Branch (19705:34): [True: 0, False: 0]
  |  Branch (19705:57): [True: 1.03k, False: 0]
  ------------------
19706|  1.03k|                p->error_indicator = 1;
19707|  1.03k|                p->level--;
19708|  1.03k|                return NULL;
19709|  1.03k|            }
19710|      0|            goto done;
19711|  1.03k|        }
19712|  8.53k|        p->mark = _mark;
19713|  8.53k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19714|  8.53k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) ',' ','.(starred_expression !'=')+"));
19715|  8.53k|    }
19716|      0|    { // expression for_if_clauses ',' [args | expression for_if_clauses]
19717|  8.53k|        if (p->error_indicator) {
  ------------------
  |  Branch (19717:13): [True: 234, False: 8.29k]
  ------------------
19718|    234|            p->level--;
19719|    234|            return NULL;
19720|    234|        }
19721|  8.29k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
19722|  8.29k|        Token * _literal;
19723|  8.29k|        void *_opt_var;
19724|  8.29k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  8.29k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 8.29k]
  |  |  ------------------
  ------------------
19725|  8.29k|        expr_ty a;
19726|  8.29k|        asdl_comprehension_seq* b;
19727|  8.29k|        if (
19728|  8.29k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (19728:13): [True: 4.31k, False: 3.98k]
  ------------------
19729|  4.31k|            &&
19730|  4.31k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (19730:13): [True: 539, False: 3.78k]
  ------------------
19731|    539|            &&
19732|    539|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (19732:13): [True: 317, False: 222]
  ------------------
19733|    317|            &&
19734|    317|            (_opt_var = _tmp_109_rule(p), !p->error_indicator)  // [args | expression for_if_clauses]
  ------------------
  |  Branch (19734:13): [True: 7, False: 310]
  ------------------
19735|  8.29k|        )
19736|      7|        {
19737|      7|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
19738|      7|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , _PyPegen_get_last_comprehension_item ( PyPegen_last_item ( b , comprehension_ty ) ) , "Generator expression must be parenthesized" );
  ------------------
  |  |  237|      7|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
19739|      7|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19739:18): [True: 7, False: 0]
  |  Branch (19739:34): [True: 0, False: 0]
  |  Branch (19739:57): [True: 7, False: 0]
  ------------------
19740|      7|                p->error_indicator = 1;
19741|      7|                p->level--;
19742|      7|                return NULL;
19743|      7|            }
19744|      0|            goto done;
19745|      7|        }
19746|  8.29k|        p->mark = _mark;
19747|  8.29k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19748|  8.29k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses ',' [args | expression for_if_clauses]"));
19749|  8.29k|    }
19750|      0|    { // NAME '=' expression for_if_clauses
19751|  8.29k|        if (p->error_indicator) {
  ------------------
  |  Branch (19751:13): [True: 310, False: 7.98k]
  ------------------
19752|    310|            p->level--;
19753|    310|            return NULL;
19754|    310|        }
19755|  7.98k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
19756|  7.98k|        expr_ty a;
19757|  7.98k|        Token * b;
19758|  7.98k|        expr_ty expression_var;
19759|  7.98k|        asdl_comprehension_seq* for_if_clauses_var;
19760|  7.98k|        if (
19761|  7.98k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (19761:13): [True: 3.09k, False: 4.89k]
  ------------------
19762|  3.09k|            &&
19763|  3.09k|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (19763:13): [True: 617, False: 2.47k]
  ------------------
19764|    617|            &&
19765|    617|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (19765:13): [True: 459, False: 158]
  ------------------
19766|    459|            &&
19767|    459|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (19767:13): [True: 0, False: 459]
  ------------------
19768|  7.98k|        )
19769|      0|        {
19770|      0|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression for_if_clauses"));
19771|      0|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid syntax. Maybe you meant '==' or ':=' instead of '='?" );
  ------------------
  |  |  237|      0|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
19772|      0|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19772:18): [True: 0, False: 0]
  |  Branch (19772:34): [True: 0, False: 0]
  |  Branch (19772:57): [True: 0, False: 0]
  ------------------
19773|      0|                p->error_indicator = 1;
19774|      0|                p->level--;
19775|      0|                return NULL;
19776|      0|            }
19777|      0|            goto done;
19778|      0|        }
19779|  7.98k|        p->mark = _mark;
19780|  7.98k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19781|  7.98k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression for_if_clauses"));
19782|  7.98k|    }
19783|      0|    { // [(args ',')] NAME '=' &(',' | ')')
19784|  7.98k|        if (p->error_indicator) {
  ------------------
  |  Branch (19784:13): [True: 0, False: 7.98k]
  ------------------
19785|      0|            p->level--;
19786|      0|            return NULL;
19787|      0|        }
19788|  7.98k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')"));
19789|  7.98k|        void *_opt_var;
19790|  7.98k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  7.98k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.98k]
  |  |  ------------------
  ------------------
19791|  7.98k|        expr_ty a;
19792|  7.98k|        Token * b;
19793|  7.98k|        if (
19794|  7.98k|            (_opt_var = _tmp_110_rule(p), !p->error_indicator)  // [(args ',')]
  ------------------
  |  Branch (19794:13): [True: 7.98k, False: 0]
  ------------------
19795|  7.98k|            &&
19796|  7.98k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (19796:13): [True: 2.94k, False: 5.04k]
  ------------------
19797|  2.94k|            &&
19798|  2.94k|            (b = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (19798:13): [True: 470, False: 2.47k]
  ------------------
19799|    470|            &&
19800|    470|            _PyPegen_lookahead(1, _tmp_111_rule, p)
  ------------------
  |  Branch (19800:13): [True: 11, False: 459]
  ------------------
19801|  7.98k|        )
19802|     11|        {
19803|     11|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')"));
19804|     11|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expected argument value expression" );
  ------------------
  |  |  237|     11|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
19805|     11|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19805:18): [True: 11, False: 0]
  |  Branch (19805:34): [True: 0, False: 0]
  |  Branch (19805:57): [True: 11, False: 0]
  ------------------
19806|     11|                p->error_indicator = 1;
19807|     11|                p->level--;
19808|     11|                return NULL;
19809|     11|            }
19810|      0|            goto done;
19811|     11|        }
19812|  7.97k|        p->mark = _mark;
19813|  7.97k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19814|  7.97k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[(args ',')] NAME '=' &(',' | ')')"));
19815|  7.97k|    }
19816|      0|    { // args for_if_clauses
19817|  7.97k|        if (p->error_indicator) {
  ------------------
  |  Branch (19817:13): [True: 0, False: 7.97k]
  ------------------
19818|      0|            p->level--;
19819|      0|            return NULL;
19820|      0|        }
19821|  7.97k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
19822|  7.97k|        expr_ty a;
19823|  7.97k|        asdl_comprehension_seq* b;
19824|  7.97k|        if (
19825|  7.97k|            (a = args_rule(p))  // args
  ------------------
  |  Branch (19825:13): [True: 5.06k, False: 2.90k]
  ------------------
19826|  5.06k|            &&
19827|  5.06k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (19827:13): [True: 551, False: 4.51k]
  ------------------
19828|  7.97k|        )
19829|    551|        {
19830|    551|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args for_if_clauses"));
19831|    551|            _res = _PyPegen_nonparen_genexp_in_call ( p , a , b );
19832|    551|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19832:18): [True: 551, False: 0]
  |  Branch (19832:34): [True: 0, False: 0]
  |  Branch (19832:57): [True: 2, False: 549]
  ------------------
19833|      2|                p->error_indicator = 1;
19834|      2|                p->level--;
19835|      2|                return NULL;
19836|      2|            }
19837|    549|            goto done;
19838|    551|        }
19839|  7.42k|        p->mark = _mark;
19840|  7.42k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19841|  7.42k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args for_if_clauses"));
19842|  7.42k|    }
19843|      0|    { // args ',' expression for_if_clauses
19844|  7.42k|        if (p->error_indicator) {
  ------------------
  |  Branch (19844:13): [True: 318, False: 7.10k]
  ------------------
19845|    318|            p->level--;
19846|    318|            return NULL;
19847|    318|        }
19848|  7.10k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
19849|  7.10k|        Token * _literal;
19850|  7.10k|        expr_ty a;
19851|  7.10k|        expr_ty args_var;
19852|  7.10k|        asdl_comprehension_seq* b;
19853|  7.10k|        if (
19854|  7.10k|            (args_var = args_rule(p))  // args
  ------------------
  |  Branch (19854:13): [True: 4.20k, False: 2.90k]
  ------------------
19855|  4.20k|            &&
19856|  4.20k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (19856:13): [True: 596, False: 3.60k]
  ------------------
19857|    596|            &&
19858|    596|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (19858:13): [True: 421, False: 175]
  ------------------
19859|    421|            &&
19860|    421|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (19860:13): [True: 2, False: 419]
  ------------------
19861|  7.10k|        )
19862|      2|        {
19863|      2|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' expression for_if_clauses"));
19864|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , _PyPegen_get_last_comprehension_item ( PyPegen_last_item ( b , comprehension_ty ) ) , "Generator expression must be parenthesized" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
19865|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19865:18): [True: 2, False: 0]
  |  Branch (19865:34): [True: 0, False: 0]
  |  Branch (19865:57): [True: 2, False: 0]
  ------------------
19866|      2|                p->error_indicator = 1;
19867|      2|                p->level--;
19868|      2|                return NULL;
19869|      2|            }
19870|      0|            goto done;
19871|      2|        }
19872|  7.10k|        p->mark = _mark;
19873|  7.10k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19874|  7.10k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' expression for_if_clauses"));
19875|  7.10k|    }
19876|      0|    { // args ',' args
19877|  7.10k|        if (p->error_indicator) {
  ------------------
  |  Branch (19877:13): [True: 144, False: 6.95k]
  ------------------
19878|    144|            p->level--;
19879|    144|            return NULL;
19880|    144|        }
19881|  6.95k|        D(fprintf(stderr, "%*c> invalid_arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ',' args"));
19882|  6.95k|        Token * _literal;
19883|  6.95k|        expr_ty a;
19884|  6.95k|        expr_ty args_var;
19885|  6.95k|        if (
19886|  6.95k|            (a = args_rule(p))  // args
  ------------------
  |  Branch (19886:13): [True: 4.05k, False: 2.90k]
  ------------------
19887|  4.05k|            &&
19888|  4.05k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (19888:13): [True: 450, False: 3.60k]
  ------------------
19889|    450|            &&
19890|    450|            (args_var = args_rule(p))  // args
  ------------------
  |  Branch (19890:13): [True: 33, False: 417]
  ------------------
19891|  6.95k|        )
19892|     33|        {
19893|     33|            D(fprintf(stderr, "%*c+ invalid_arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ',' args"));
19894|     33|            _res = _PyPegen_arguments_parsing_error ( p , a );
19895|     33|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19895:18): [True: 33, False: 0]
  |  Branch (19895:34): [True: 0, False: 0]
  |  Branch (19895:57): [True: 33, False: 0]
  ------------------
19896|     33|                p->error_indicator = 1;
19897|     33|                p->level--;
19898|     33|                return NULL;
19899|     33|            }
19900|      0|            goto done;
19901|     33|        }
19902|  6.92k|        p->mark = _mark;
19903|  6.92k|        D(fprintf(stderr, "%*c%s invalid_arguments[%d-%d]: %s failed!\n", p->level, ' ',
19904|  6.92k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ',' args"));
19905|  6.92k|    }
19906|  6.92k|    _res = NULL;
19907|  7.47k|  done:
19908|  7.47k|    p->level--;
19909|  7.47k|    return _res;
19910|  6.92k|}
parser.c:_tmp_106_rule:
33909|  9.57k|{
33910|  9.57k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33910:9): [True: 0, False: 9.57k]
  |  Branch (33910:35): [True: 0, False: 9.57k]
  ------------------
33911|      0|        _Pypegen_stack_overflow(p);
33912|      0|    }
33913|  9.57k|    if (p->error_indicator) {
  ------------------
  |  Branch (33913:9): [True: 0, False: 9.57k]
  ------------------
33914|      0|        p->level--;
33915|      0|        return NULL;
33916|      0|    }
33917|  9.57k|    void * _res = NULL;
33918|  9.57k|    int _mark = p->mark;
33919|  9.57k|    { // (','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)
33920|  9.57k|        if (p->error_indicator) {
  ------------------
  |  Branch (33920:13): [True: 0, False: 9.57k]
  ------------------
33921|      0|            p->level--;
33922|      0|            return NULL;
33923|      0|        }
33924|  9.57k|        D(fprintf(stderr, "%*c> _tmp_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)"));
33925|  9.57k|        void *_tmp_167_var;
33926|  9.57k|        if (
33927|  9.57k|            (_tmp_167_var = _tmp_167_rule(p))  // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs
  ------------------
  |  Branch (33927:13): [True: 667, False: 8.90k]
  ------------------
33928|  9.57k|        )
33929|    667|        {
33930|    667|            D(fprintf(stderr, "%*c+ _tmp_106[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)"));
33931|    667|            _res = _tmp_167_var;
33932|    667|            goto done;
33933|    667|        }
33934|  8.90k|        p->mark = _mark;
33935|  8.90k|        D(fprintf(stderr, "%*c%s _tmp_106[%d-%d]: %s failed!\n", p->level, ' ',
33936|  8.90k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs)"));
33937|  8.90k|    }
33938|      0|    { // kwargs
33939|  8.90k|        if (p->error_indicator) {
  ------------------
  |  Branch (33939:13): [True: 0, False: 8.90k]
  ------------------
33940|      0|            p->level--;
33941|      0|            return NULL;
33942|      0|        }
33943|  8.90k|        D(fprintf(stderr, "%*c> _tmp_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs"));
33944|  8.90k|        asdl_seq* kwargs_var;
33945|  8.90k|        if (
33946|  8.90k|            (kwargs_var = kwargs_rule(p))  // kwargs
  ------------------
  |  Branch (33946:13): [True: 2.93k, False: 5.96k]
  ------------------
33947|  8.90k|        )
33948|  2.93k|        {
33949|  2.93k|            D(fprintf(stderr, "%*c+ _tmp_106[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs"));
33950|  2.93k|            _res = kwargs_var;
33951|  2.93k|            goto done;
33952|  2.93k|        }
33953|  5.96k|        p->mark = _mark;
33954|  5.96k|        D(fprintf(stderr, "%*c%s _tmp_106[%d-%d]: %s failed!\n", p->level, ' ',
33955|  5.96k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs"));
33956|  5.96k|    }
33957|  5.96k|    _res = NULL;
33958|  9.57k|  done:
33959|  9.57k|    p->level--;
33960|  9.57k|    return _res;
33961|  5.96k|}
parser.c:_tmp_167_rule:
37549|  9.57k|{
37550|  9.57k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37550:9): [True: 0, False: 9.57k]
  |  Branch (37550:35): [True: 0, False: 9.57k]
  ------------------
37551|      0|        _Pypegen_stack_overflow(p);
37552|      0|    }
37553|  9.57k|    if (p->error_indicator) {
  ------------------
  |  Branch (37553:9): [True: 0, False: 9.57k]
  ------------------
37554|      0|        p->level--;
37555|      0|        return NULL;
37556|      0|    }
37557|  9.57k|    void * _res = NULL;
37558|  9.57k|    int _mark = p->mark;
37559|  9.57k|    { // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs
37560|  9.57k|        if (p->error_indicator) {
  ------------------
  |  Branch (37560:13): [True: 0, False: 9.57k]
  ------------------
37561|      0|            p->level--;
37562|      0|            return NULL;
37563|      0|        }
37564|  9.57k|        D(fprintf(stderr, "%*c> _tmp_167[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs"));
37565|  9.57k|        asdl_seq * _gather_91_var;
37566|  9.57k|        Token * _literal;
37567|  9.57k|        asdl_seq* kwargs_var;
37568|  9.57k|        if (
37569|  9.57k|            (_gather_91_var = _gather_91_rule(p))  // ','.(starred_expression | (assignment_expression | expression !':=') !'=')+
  ------------------
  |  Branch (37569:13): [True: 4.06k, False: 5.50k]
  ------------------
37570|  4.06k|            &&
37571|  4.06k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (37571:13): [True: 800, False: 3.26k]
  ------------------
37572|    800|            &&
37573|    800|            (kwargs_var = kwargs_rule(p))  // kwargs
  ------------------
  |  Branch (37573:13): [True: 667, False: 133]
  ------------------
37574|  9.57k|        )
37575|    667|        {
37576|    667|            D(fprintf(stderr, "%*c+ _tmp_167[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs"));
37577|    667|            _res = _PyPegen_dummy_name(p, _gather_91_var, _literal, kwargs_var);
37578|    667|            goto done;
37579|    667|        }
37580|  8.90k|        p->mark = _mark;
37581|  8.90k|        D(fprintf(stderr, "%*c%s _tmp_167[%d-%d]: %s failed!\n", p->level, ' ',
37582|  8.90k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assignment_expression | expression !':=') !'=')+ ',' kwargs"));
37583|  8.90k|    }
37584|  8.90k|    _res = NULL;
37585|  9.57k|  done:
37586|  9.57k|    p->level--;
37587|  9.57k|    return _res;
37588|  8.90k|}
parser.c:_gather_108_rule:
34042|  1.95k|{
34043|  1.95k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.91k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34043:9): [True: 0, False: 1.95k]
  |  Branch (34043:35): [True: 0, False: 1.95k]
  ------------------
34044|      0|        _Pypegen_stack_overflow(p);
34045|      0|    }
34046|  1.95k|    if (p->error_indicator) {
  ------------------
  |  Branch (34046:9): [True: 0, False: 1.95k]
  ------------------
34047|      0|        p->level--;
34048|      0|        return NULL;
34049|      0|    }
34050|  1.95k|    asdl_seq * _res = NULL;
34051|  1.95k|    int _mark = p->mark;
34052|  1.95k|    { // (starred_expression !'=') _loop0_107
34053|  1.95k|        if (p->error_indicator) {
  ------------------
  |  Branch (34053:13): [True: 0, False: 1.95k]
  ------------------
34054|      0|            p->level--;
34055|      0|            return NULL;
34056|      0|        }
34057|  1.95k|        D(fprintf(stderr, "%*c> _gather_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_107"));
34058|  1.95k|        void *elem;
34059|  1.95k|        asdl_seq * seq;
34060|  1.95k|        if (
34061|  1.95k|            (elem = _tmp_168_rule(p))  // starred_expression !'='
  ------------------
  |  Branch (34061:13): [True: 1.03k, False: 921]
  ------------------
34062|  1.03k|            &&
34063|  1.03k|            (seq = _loop0_107_rule(p))  // _loop0_107
  ------------------
  |  Branch (34063:13): [True: 1.03k, False: 0]
  ------------------
34064|  1.95k|        )
34065|  1.03k|        {
34066|  1.03k|            D(fprintf(stderr, "%*c+ _gather_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression !'=') _loop0_107"));
34067|  1.03k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
34068|  1.03k|            goto done;
34069|  1.03k|        }
34070|    921|        p->mark = _mark;
34071|    921|        D(fprintf(stderr, "%*c%s _gather_108[%d-%d]: %s failed!\n", p->level, ' ',
34072|    921|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression !'=') _loop0_107"));
34073|    921|    }
34074|    921|    _res = NULL;
34075|  1.95k|  done:
34076|  1.95k|    p->level--;
34077|  1.95k|    return _res;
34078|    921|}
parser.c:_tmp_168_rule:
37593|  4.80k|{
37594|  4.80k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.60k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37594:9): [True: 0, False: 4.80k]
  |  Branch (37594:35): [True: 0, False: 4.80k]
  ------------------
37595|      0|        _Pypegen_stack_overflow(p);
37596|      0|    }
37597|  4.80k|    if (p->error_indicator) {
  ------------------
  |  Branch (37597:9): [True: 0, False: 4.80k]
  ------------------
37598|      0|        p->level--;
37599|      0|        return NULL;
37600|      0|    }
37601|  4.80k|    void * _res = NULL;
37602|  4.80k|    int _mark = p->mark;
37603|  4.80k|    { // starred_expression !'='
37604|  4.80k|        if (p->error_indicator) {
  ------------------
  |  Branch (37604:13): [True: 0, False: 4.80k]
  ------------------
37605|      0|            p->level--;
37606|      0|            return NULL;
37607|      0|        }
37608|  4.80k|        D(fprintf(stderr, "%*c> _tmp_168[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression !'='"));
37609|  4.80k|        expr_ty starred_expression_var;
37610|  4.80k|        if (
37611|  4.80k|            (starred_expression_var = starred_expression_rule(p))  // starred_expression
  ------------------
  |  Branch (37611:13): [True: 2.85k, False: 1.94k]
  ------------------
37612|  2.85k|            &&
37613|  2.85k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
  ------------------
  |  Branch (37613:13): [True: 2.85k, False: 2]
  ------------------
37614|  4.80k|        )
37615|  2.85k|        {
37616|  2.85k|            D(fprintf(stderr, "%*c+ _tmp_168[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression !'='"));
37617|  2.85k|            _res = starred_expression_var;
37618|  2.85k|            goto done;
37619|  2.85k|        }
37620|  1.94k|        p->mark = _mark;
37621|  1.94k|        D(fprintf(stderr, "%*c%s _tmp_168[%d-%d]: %s failed!\n", p->level, ' ',
37622|  1.94k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression !'='"));
37623|  1.94k|    }
37624|  1.94k|    _res = NULL;
37625|  4.80k|  done:
37626|  4.80k|    p->level--;
37627|  4.80k|    return _res;
37628|  1.94k|}
parser.c:_loop0_107_rule:
33966|  1.03k|{
33967|  1.03k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.07k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33967:9): [True: 0, False: 1.03k]
  |  Branch (33967:35): [True: 0, False: 1.03k]
  ------------------
33968|      0|        _Pypegen_stack_overflow(p);
33969|      0|    }
33970|  1.03k|    if (p->error_indicator) {
  ------------------
  |  Branch (33970:9): [True: 0, False: 1.03k]
  ------------------
33971|      0|        p->level--;
33972|      0|        return NULL;
33973|      0|    }
33974|  1.03k|    void *_res = NULL;
33975|  1.03k|    int _mark = p->mark;
33976|  1.03k|    void **_children = PyMem_Malloc(sizeof(void *));
33977|  1.03k|    if (!_children) {
  ------------------
  |  Branch (33977:9): [True: 0, False: 1.03k]
  ------------------
33978|      0|        p->error_indicator = 1;
33979|      0|        PyErr_NoMemory();
33980|      0|        p->level--;
33981|      0|        return NULL;
33982|      0|    }
33983|  1.03k|    Py_ssize_t _children_capacity = 1;
33984|  1.03k|    Py_ssize_t _n = 0;
33985|  1.03k|    { // ',' (starred_expression !'=')
33986|  1.03k|        if (p->error_indicator) {
  ------------------
  |  Branch (33986:13): [True: 0, False: 1.03k]
  ------------------
33987|      0|            p->level--;
33988|      0|            return NULL;
33989|      0|        }
33990|  1.03k|        D(fprintf(stderr, "%*c> _loop0_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression !'=')"));
33991|  1.03k|        Token * _literal;
33992|  1.03k|        void *elem;
33993|  1.03k|        while (
33994|  2.85k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33994:13): [True: 2.84k, False: 9]
  ------------------
33995|  2.84k|            &&
33996|  2.84k|            (elem = _tmp_168_rule(p))  // starred_expression !'='
  ------------------
  |  Branch (33996:13): [True: 1.81k, False: 1.02k]
  ------------------
33997|  1.03k|        )
33998|  1.81k|        {
33999|  1.81k|            _res = elem;
34000|  1.81k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (34000:18): [True: 0, False: 1.81k]
  |  Branch (34000:34): [True: 0, False: 1.81k]
  |  Branch (34000:57): [True: 0, False: 0]
  ------------------
34001|      0|                p->error_indicator = 1;
34002|      0|                PyMem_Free(_children);
34003|      0|                p->level--;
34004|      0|                return NULL;
34005|      0|            }
34006|  1.81k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (34006:17): [True: 948, False: 868]
  ------------------
34007|    948|                _children_capacity *= 2;
34008|    948|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34009|    948|                if (!_new_children) {
  ------------------
  |  Branch (34009:21): [True: 0, False: 948]
  ------------------
34010|      0|                    PyMem_Free(_children);
34011|      0|                    p->error_indicator = 1;
34012|      0|                    PyErr_NoMemory();
34013|      0|                    p->level--;
34014|      0|                    return NULL;
34015|      0|                }
34016|    948|                _children = _new_children;
34017|    948|            }
34018|  1.81k|            _children[_n++] = _res;
34019|  1.81k|            _mark = p->mark;
34020|  1.81k|        }
34021|  1.03k|        p->mark = _mark;
34022|  1.03k|        D(fprintf(stderr, "%*c%s _loop0_107[%d-%d]: %s failed!\n", p->level, ' ',
34023|  1.03k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression !'=')"));
34024|  1.03k|    }
34025|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34026|  1.03k|    if (!_seq) {
  ------------------
  |  Branch (34026:9): [True: 0, False: 1.03k]
  ------------------
34027|      0|        PyMem_Free(_children);
34028|      0|        p->error_indicator = 1;
34029|      0|        PyErr_NoMemory();
34030|      0|        p->level--;
34031|      0|        return NULL;
34032|      0|    }
34033|  2.85k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  1.81k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  2.85k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (34033:28): [True: 1.81k, False: 1.03k]
  ------------------
34034|  1.03k|    PyMem_Free(_children);
34035|  1.03k|    p->level--;
34036|  1.03k|    return _seq;
34037|  1.03k|}
parser.c:_tmp_109_rule:
34083|    317|{
34084|    317|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    634|#  define MAXSTACK 6000
  ------------------
  |  Branch (34084:9): [True: 0, False: 317]
  |  Branch (34084:35): [True: 0, False: 317]
  ------------------
34085|      0|        _Pypegen_stack_overflow(p);
34086|      0|    }
34087|    317|    if (p->error_indicator) {
  ------------------
  |  Branch (34087:9): [True: 0, False: 317]
  ------------------
34088|      0|        p->level--;
34089|      0|        return NULL;
34090|      0|    }
34091|    317|    void * _res = NULL;
34092|    317|    int _mark = p->mark;
34093|    317|    { // args
34094|    317|        if (p->error_indicator) {
  ------------------
  |  Branch (34094:13): [True: 0, False: 317]
  ------------------
34095|      0|            p->level--;
34096|      0|            return NULL;
34097|      0|        }
34098|    317|        D(fprintf(stderr, "%*c> _tmp_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args"));
34099|    317|        expr_ty args_var;
34100|    317|        if (
34101|    317|            (args_var = args_rule(p))  // args
  ------------------
  |  Branch (34101:13): [True: 4, False: 313]
  ------------------
34102|    317|        )
34103|      4|        {
34104|      4|            D(fprintf(stderr, "%*c+ _tmp_109[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args"));
34105|      4|            _res = args_var;
34106|      4|            goto done;
34107|      4|        }
34108|    313|        p->mark = _mark;
34109|    313|        D(fprintf(stderr, "%*c%s _tmp_109[%d-%d]: %s failed!\n", p->level, ' ',
34110|    313|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args"));
34111|    313|    }
34112|      0|    { // expression for_if_clauses
34113|    313|        if (p->error_indicator) {
  ------------------
  |  Branch (34113:13): [True: 310, False: 3]
  ------------------
34114|    310|            p->level--;
34115|    310|            return NULL;
34116|    310|        }
34117|      3|        D(fprintf(stderr, "%*c> _tmp_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
34118|      3|        expr_ty expression_var;
34119|      3|        asdl_comprehension_seq* for_if_clauses_var;
34120|      3|        if (
34121|      3|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (34121:13): [True: 1, False: 2]
  ------------------
34122|      1|            &&
34123|      1|            (for_if_clauses_var = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (34123:13): [True: 0, False: 1]
  ------------------
34124|      3|        )
34125|      0|        {
34126|      0|            D(fprintf(stderr, "%*c+ _tmp_109[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression for_if_clauses"));
34127|      0|            _res = _PyPegen_dummy_name(p, expression_var, for_if_clauses_var);
34128|      0|            goto done;
34129|      0|        }
34130|      3|        p->mark = _mark;
34131|      3|        D(fprintf(stderr, "%*c%s _tmp_109[%d-%d]: %s failed!\n", p->level, ' ',
34132|      3|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression for_if_clauses"));
34133|      3|    }
34134|      3|    _res = NULL;
34135|      7|  done:
34136|      7|    p->level--;
34137|      7|    return _res;
34138|      3|}
parser.c:_tmp_110_rule:
34143|  7.98k|{
34144|  7.98k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34144:9): [True: 0, False: 7.98k]
  |  Branch (34144:35): [True: 0, False: 7.98k]
  ------------------
34145|      0|        _Pypegen_stack_overflow(p);
34146|      0|    }
34147|  7.98k|    if (p->error_indicator) {
  ------------------
  |  Branch (34147:9): [True: 0, False: 7.98k]
  ------------------
34148|      0|        p->level--;
34149|      0|        return NULL;
34150|      0|    }
34151|  7.98k|    void * _res = NULL;
34152|  7.98k|    int _mark = p->mark;
34153|  7.98k|    { // args ','
34154|  7.98k|        if (p->error_indicator) {
  ------------------
  |  Branch (34154:13): [True: 0, False: 7.98k]
  ------------------
34155|      0|            p->level--;
34156|      0|            return NULL;
34157|      0|        }
34158|  7.98k|        D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','"));
34159|  7.98k|        Token * _literal;
34160|  7.98k|        expr_ty args_var;
34161|  7.98k|        if (
34162|  7.98k|            (args_var = args_rule(p))  // args
  ------------------
  |  Branch (34162:13): [True: 5.07k, False: 2.91k]
  ------------------
34163|  5.07k|            &&
34164|  5.07k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (34164:13): [True: 599, False: 4.47k]
  ------------------
34165|  7.98k|        )
34166|    599|        {
34167|    599|            D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','"));
34168|    599|            _res = _PyPegen_dummy_name(p, args_var, _literal);
34169|    599|            goto done;
34170|    599|        }
34171|  7.38k|        p->mark = _mark;
34172|  7.38k|        D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ',
34173|  7.38k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','"));
34174|  7.38k|    }
34175|  7.38k|    _res = NULL;
34176|  7.98k|  done:
34177|  7.98k|    p->level--;
34178|  7.98k|    return _res;
34179|  7.38k|}
parser.c:_tmp_111_rule:
34184|    470|{
34185|    470|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    940|#  define MAXSTACK 6000
  ------------------
  |  Branch (34185:9): [True: 0, False: 470]
  |  Branch (34185:35): [True: 0, False: 470]
  ------------------
34186|      0|        _Pypegen_stack_overflow(p);
34187|      0|    }
34188|    470|    if (p->error_indicator) {
  ------------------
  |  Branch (34188:9): [True: 0, False: 470]
  ------------------
34189|      0|        p->level--;
34190|      0|        return NULL;
34191|      0|    }
34192|    470|    void * _res = NULL;
34193|    470|    int _mark = p->mark;
34194|    470|    { // ','
34195|    470|        if (p->error_indicator) {
  ------------------
  |  Branch (34195:13): [True: 0, False: 470]
  ------------------
34196|      0|            p->level--;
34197|      0|            return NULL;
34198|      0|        }
34199|    470|        D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
34200|    470|        Token * _literal;
34201|    470|        if (
34202|    470|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (34202:13): [True: 7, False: 463]
  ------------------
34203|    470|        )
34204|      7|        {
34205|      7|            D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
34206|      7|            _res = _literal;
34207|      7|            goto done;
34208|      7|        }
34209|    463|        p->mark = _mark;
34210|    463|        D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ',
34211|    463|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
34212|    463|    }
34213|      0|    { // ')'
34214|    463|        if (p->error_indicator) {
  ------------------
  |  Branch (34214:13): [True: 0, False: 463]
  ------------------
34215|      0|            p->level--;
34216|      0|            return NULL;
34217|      0|        }
34218|    463|        D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
34219|    463|        Token * _literal;
34220|    463|        if (
34221|    463|            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (34221:13): [True: 4, False: 459]
  ------------------
34222|    463|        )
34223|      4|        {
34224|      4|            D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
34225|      4|            _res = _literal;
34226|      4|            goto done;
34227|      4|        }
34228|    459|        p->mark = _mark;
34229|    459|        D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ',
34230|    459|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
34231|    459|    }
34232|    459|    _res = NULL;
34233|    470|  done:
34234|    470|    p->level--;
34235|    470|    return _res;
34236|    459|}
parser.c:slices_rule:
14694|  22.9k|{
14695|  22.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  45.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (14695:9): [True: 0, False: 22.9k]
  |  Branch (14695:35): [True: 0, False: 22.9k]
  ------------------
14696|      0|        _Pypegen_stack_overflow(p);
14697|      0|    }
14698|  22.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (14698:9): [True: 0, False: 22.9k]
  ------------------
14699|      0|        p->level--;
14700|      0|        return NULL;
14701|      0|    }
14702|  22.9k|    expr_ty _res = NULL;
14703|  22.9k|    int _mark = p->mark;
14704|  22.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14704:9): [True: 18.8k, False: 4.11k]
  |  Branch (14704:31): [True: 36, False: 18.8k]
  ------------------
14705|     36|        p->error_indicator = 1;
14706|     36|        p->level--;
14707|     36|        return NULL;
14708|     36|    }
14709|  22.9k|    int _start_lineno = p->tokens[_mark]->lineno;
14710|  22.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  22.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 22.9k]
  |  |  ------------------
  ------------------
14711|  22.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
14712|  22.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  22.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 22.9k]
  |  |  ------------------
  ------------------
14713|  22.9k|    { // slice !','
14714|  22.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (14714:13): [True: 0, False: 22.9k]
  ------------------
14715|      0|            p->level--;
14716|      0|            return NULL;
14717|      0|        }
14718|  22.9k|        D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice !','"));
14719|  22.9k|        expr_ty a;
14720|  22.9k|        if (
14721|  22.9k|            (a = slice_rule(p))  // slice
  ------------------
  |  Branch (14721:13): [True: 18.2k, False: 4.70k]
  ------------------
14722|  18.2k|            &&
14723|  18.2k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
  ------------------
  |  Branch (14723:13): [True: 14.0k, False: 4.20k]
  ------------------
14724|  22.9k|        )
14725|  14.0k|        {
14726|  14.0k|            D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice !','"));
14727|  14.0k|            _res = a;
14728|  14.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14728:18): [True: 0, False: 14.0k]
  |  Branch (14728:34): [True: 0, False: 14.0k]
  |  Branch (14728:57): [True: 0, False: 0]
  ------------------
14729|      0|                p->error_indicator = 1;
14730|      0|                p->level--;
14731|      0|                return NULL;
14732|      0|            }
14733|  14.0k|            goto done;
14734|  14.0k|        }
14735|  8.91k|        p->mark = _mark;
14736|  8.91k|        D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ',
14737|  8.91k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice !','"));
14738|  8.91k|    }
14739|      0|    { // ','.(slice | starred_expression)+ ','?
14740|  8.91k|        if (p->error_indicator) {
  ------------------
  |  Branch (14740:13): [True: 1.74k, False: 7.16k]
  ------------------
14741|  1.74k|            p->level--;
14742|  1.74k|            return NULL;
14743|  1.74k|        }
14744|  7.16k|        D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(slice | starred_expression)+ ','?"));
14745|  7.16k|        void *_opt_var;
14746|  7.16k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  7.16k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.16k]
  |  |  ------------------
  ------------------
14747|  7.16k|        asdl_expr_seq* a;
14748|  7.16k|        if (
14749|  7.16k|            (a = (asdl_expr_seq*)_gather_64_rule(p))  // ','.(slice | starred_expression)+
  ------------------
  |  Branch (14749:13): [True: 5.60k, False: 1.55k]
  ------------------
14750|  5.60k|            &&
14751|  5.60k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (14751:13): [True: 4.50k, False: 1.10k]
  ------------------
14752|  7.16k|        )
14753|  4.50k|        {
14754|  4.50k|            D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(slice | starred_expression)+ ','?"));
14755|  4.50k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14756|  4.50k|            if (_token == NULL) {
  ------------------
  |  Branch (14756:17): [True: 0, False: 4.50k]
  ------------------
14757|      0|                p->level--;
14758|      0|                return NULL;
14759|      0|            }
14760|  4.50k|            int _end_lineno = _token->end_lineno;
14761|  4.50k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.50k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.50k]
  |  |  ------------------
  ------------------
14762|  4.50k|            int _end_col_offset = _token->end_col_offset;
14763|  4.50k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.50k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.50k]
  |  |  ------------------
  ------------------
14764|  4.50k|            _res = _PyAST_Tuple ( a , Load , EXTRA );
  ------------------
  |  |  307|  4.50k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14765|  4.50k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14765:18): [True: 0, False: 4.50k]
  |  Branch (14765:34): [True: 0, False: 4.50k]
  |  Branch (14765:57): [True: 0, False: 0]
  ------------------
14766|      0|                p->error_indicator = 1;
14767|      0|                p->level--;
14768|      0|                return NULL;
14769|      0|            }
14770|  4.50k|            goto done;
14771|  4.50k|        }
14772|  2.65k|        p->mark = _mark;
14773|  2.65k|        D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ',
14774|  2.65k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(slice | starred_expression)+ ','?"));
14775|  2.65k|    }
14776|  2.65k|    _res = NULL;
14777|  21.2k|  done:
14778|  21.2k|    p->level--;
14779|  21.2k|    return _res;
14780|  2.65k|}
parser.c:slice_rule:
14785|  47.8k|{
14786|  47.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  95.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (14786:9): [True: 0, False: 47.8k]
  |  Branch (14786:35): [True: 0, False: 47.8k]
  ------------------
14787|      0|        _Pypegen_stack_overflow(p);
14788|      0|    }
14789|  47.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (14789:9): [True: 0, False: 47.8k]
  ------------------
14790|      0|        p->level--;
14791|      0|        return NULL;
14792|      0|    }
14793|  47.8k|    expr_ty _res = NULL;
14794|  47.8k|    int _mark = p->mark;
14795|  47.8k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14795:9): [True: 15.7k, False: 32.1k]
  |  Branch (14795:31): [True: 6, False: 15.7k]
  ------------------
14796|      6|        p->error_indicator = 1;
14797|      6|        p->level--;
14798|      6|        return NULL;
14799|      6|    }
14800|  47.8k|    int _start_lineno = p->tokens[_mark]->lineno;
14801|  47.8k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  47.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 47.8k]
  |  |  ------------------
  ------------------
14802|  47.8k|    int _start_col_offset = p->tokens[_mark]->col_offset;
14803|  47.8k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  47.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 47.8k]
  |  |  ------------------
  ------------------
14804|  47.8k|    { // expression? ':' expression? [':' expression?]
14805|  47.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (14805:13): [True: 0, False: 47.8k]
  ------------------
14806|      0|            p->level--;
14807|      0|            return NULL;
14808|      0|        }
14809|  47.8k|        D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
14810|  47.8k|        Token * _literal;
14811|  47.8k|        void *a;
14812|  47.8k|        void *b;
14813|  47.8k|        void *c;
14814|  47.8k|        if (
14815|  47.8k|            (a = expression_rule(p), !p->error_indicator)  // expression?
  ------------------
  |  Branch (14815:13): [True: 46.5k, False: 1.25k]
  ------------------
14816|  46.5k|            &&
14817|  46.5k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (14817:13): [True: 17.4k, False: 29.1k]
  ------------------
14818|  17.4k|            &&
14819|  17.4k|            (b = expression_rule(p), !p->error_indicator)  // expression?
  ------------------
  |  Branch (14819:13): [True: 17.0k, False: 429]
  ------------------
14820|  17.0k|            &&
14821|  17.0k|            (c = _tmp_65_rule(p), !p->error_indicator)  // [':' expression?]
  ------------------
  |  Branch (14821:13): [True: 16.8k, False: 228]
  ------------------
14822|  47.8k|        )
14823|  16.8k|        {
14824|  16.8k|            D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]"));
14825|  16.8k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14826|  16.8k|            if (_token == NULL) {
  ------------------
  |  Branch (14826:17): [True: 0, False: 16.8k]
  ------------------
14827|      0|                p->level--;
14828|      0|                return NULL;
14829|      0|            }
14830|  16.8k|            int _end_lineno = _token->end_lineno;
14831|  16.8k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.8k]
  |  |  ------------------
  ------------------
14832|  16.8k|            int _end_col_offset = _token->end_col_offset;
14833|  16.8k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.8k]
  |  |  ------------------
  ------------------
14834|  16.8k|            _res = _PyAST_Slice ( a , b , c , EXTRA );
  ------------------
  |  |  307|  16.8k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14835|  16.8k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14835:18): [True: 0, False: 16.8k]
  |  Branch (14835:34): [True: 0, False: 16.8k]
  |  Branch (14835:57): [True: 0, False: 0]
  ------------------
14836|      0|                p->error_indicator = 1;
14837|      0|                p->level--;
14838|      0|                return NULL;
14839|      0|            }
14840|  16.8k|            goto done;
14841|  16.8k|        }
14842|  31.0k|        p->mark = _mark;
14843|  31.0k|        D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ',
14844|  31.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression? ':' expression? [':' expression?]"));
14845|  31.0k|    }
14846|      0|    { // named_expression
14847|  31.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (14847:13): [True: 1.90k, False: 29.1k]
  ------------------
14848|  1.90k|            p->level--;
14849|  1.90k|            return NULL;
14850|  1.90k|        }
14851|  29.1k|        D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
14852|  29.1k|        expr_ty a;
14853|  29.1k|        if (
14854|  29.1k|            (a = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (14854:13): [True: 20.9k, False: 8.15k]
  ------------------
14855|  29.1k|        )
14856|  20.9k|        {
14857|  20.9k|            D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
14858|  20.9k|            _res = a;
14859|  20.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14859:18): [True: 0, False: 20.9k]
  |  Branch (14859:34): [True: 0, False: 20.9k]
  |  Branch (14859:57): [True: 0, False: 0]
  ------------------
14860|      0|                p->error_indicator = 1;
14861|      0|                p->level--;
14862|      0|                return NULL;
14863|      0|            }
14864|  20.9k|            goto done;
14865|  20.9k|        }
14866|  8.15k|        p->mark = _mark;
14867|  8.15k|        D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ',
14868|  8.15k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
14869|  8.15k|    }
14870|  8.15k|    _res = NULL;
14871|  45.9k|  done:
14872|  45.9k|    p->level--;
14873|  45.9k|    return _res;
14874|  8.15k|}
parser.c:_tmp_65_rule:
31345|  17.0k|{
31346|  17.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31346:9): [True: 0, False: 17.0k]
  |  Branch (31346:35): [True: 0, False: 17.0k]
  ------------------
31347|      0|        _Pypegen_stack_overflow(p);
31348|      0|    }
31349|  17.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (31349:9): [True: 0, False: 17.0k]
  ------------------
31350|      0|        p->level--;
31351|      0|        return NULL;
31352|      0|    }
31353|  17.0k|    void * _res = NULL;
31354|  17.0k|    int _mark = p->mark;
31355|  17.0k|    { // ':' expression?
31356|  17.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (31356:13): [True: 0, False: 17.0k]
  ------------------
31357|      0|            p->level--;
31358|      0|            return NULL;
31359|      0|        }
31360|  17.0k|        D(fprintf(stderr, "%*c> _tmp_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?"));
31361|  17.0k|        Token * _literal;
31362|  17.0k|        void *d;
31363|  17.0k|        if (
31364|  17.0k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (31364:13): [True: 7.02k, False: 10.0k]
  ------------------
31365|  7.02k|            &&
31366|  7.02k|            (d = expression_rule(p), !p->error_indicator)  // expression?
  ------------------
  |  Branch (31366:13): [True: 6.79k, False: 228]
  ------------------
31367|  17.0k|        )
31368|  6.79k|        {
31369|  6.79k|            D(fprintf(stderr, "%*c+ _tmp_65[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?"));
31370|  6.79k|            _res = d;
31371|  6.79k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (31371:18): [True: 2.22k, False: 4.56k]
  |  Branch (31371:34): [True: 0, False: 4.56k]
  |  Branch (31371:57): [True: 0, False: 2.22k]
  ------------------
31372|      0|                p->error_indicator = 1;
31373|      0|                p->level--;
31374|      0|                return NULL;
31375|      0|            }
31376|  6.79k|            goto done;
31377|  6.79k|        }
31378|  10.2k|        p->mark = _mark;
31379|  10.2k|        D(fprintf(stderr, "%*c%s _tmp_65[%d-%d]: %s failed!\n", p->level, ' ',
31380|  10.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?"));
31381|  10.2k|    }
31382|  10.2k|    _res = NULL;
31383|  17.0k|  done:
31384|  17.0k|    p->level--;
31385|  17.0k|    return _res;
31386|  10.2k|}
parser.c:_gather_64_rule:
31304|  7.16k|{
31305|  7.16k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  14.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31305:9): [True: 0, False: 7.16k]
  |  Branch (31305:35): [True: 0, False: 7.16k]
  ------------------
31306|      0|        _Pypegen_stack_overflow(p);
31307|      0|    }
31308|  7.16k|    if (p->error_indicator) {
  ------------------
  |  Branch (31308:9): [True: 0, False: 7.16k]
  ------------------
31309|      0|        p->level--;
31310|      0|        return NULL;
31311|      0|    }
31312|  7.16k|    asdl_seq * _res = NULL;
31313|  7.16k|    int _mark = p->mark;
31314|  7.16k|    { // (slice | starred_expression) _loop0_63
31315|  7.16k|        if (p->error_indicator) {
  ------------------
  |  Branch (31315:13): [True: 0, False: 7.16k]
  ------------------
31316|      0|            p->level--;
31317|      0|            return NULL;
31318|      0|        }
31319|  7.16k|        D(fprintf(stderr, "%*c> _gather_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_63"));
31320|  7.16k|        void *elem;
31321|  7.16k|        asdl_seq * seq;
31322|  7.16k|        if (
31323|  7.16k|            (elem = _tmp_163_rule(p))  // slice | starred_expression
  ------------------
  |  Branch (31323:13): [True: 5.60k, False: 1.55k]
  ------------------
31324|  5.60k|            &&
31325|  5.60k|            (seq = _loop0_63_rule(p))  // _loop0_63
  ------------------
  |  Branch (31325:13): [True: 5.60k, False: 0]
  ------------------
31326|  7.16k|        )
31327|  5.60k|        {
31328|  5.60k|            D(fprintf(stderr, "%*c+ _gather_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slice | starred_expression) _loop0_63"));
31329|  5.60k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
31330|  5.60k|            goto done;
31331|  5.60k|        }
31332|  1.55k|        p->mark = _mark;
31333|  1.55k|        D(fprintf(stderr, "%*c%s _gather_64[%d-%d]: %s failed!\n", p->level, ' ',
31334|  1.55k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slice | starred_expression) _loop0_63"));
31335|  1.55k|    }
31336|  1.55k|    _res = NULL;
31337|  7.16k|  done:
31338|  7.16k|    p->level--;
31339|  7.16k|    return _res;
31340|  1.55k|}
parser.c:_tmp_163_rule:
37340|  24.8k|{
37341|  24.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  49.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37341:9): [True: 0, False: 24.8k]
  |  Branch (37341:35): [True: 0, False: 24.8k]
  ------------------
37342|      0|        _Pypegen_stack_overflow(p);
37343|      0|    }
37344|  24.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (37344:9): [True: 0, False: 24.8k]
  ------------------
37345|      0|        p->level--;
37346|      0|        return NULL;
37347|      0|    }
37348|  24.8k|    void * _res = NULL;
37349|  24.8k|    int _mark = p->mark;
37350|  24.8k|    { // slice
37351|  24.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (37351:13): [True: 0, False: 24.8k]
  ------------------
37352|      0|            p->level--;
37353|      0|            return NULL;
37354|      0|        }
37355|  24.8k|        D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice"));
37356|  24.8k|        expr_ty slice_var;
37357|  24.8k|        if (
37358|  24.8k|            (slice_var = slice_rule(p))  // slice
  ------------------
  |  Branch (37358:13): [True: 19.5k, False: 5.36k]
  ------------------
37359|  24.8k|        )
37360|  19.5k|        {
37361|  19.5k|            D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice"));
37362|  19.5k|            _res = slice_var;
37363|  19.5k|            goto done;
37364|  19.5k|        }
37365|  5.36k|        p->mark = _mark;
37366|  5.36k|        D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ',
37367|  5.36k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice"));
37368|  5.36k|    }
37369|      0|    { // starred_expression
37370|  5.36k|        if (p->error_indicator) {
  ------------------
  |  Branch (37370:13): [True: 299, False: 5.07k]
  ------------------
37371|    299|            p->level--;
37372|    299|            return NULL;
37373|    299|        }
37374|  5.07k|        D(fprintf(stderr, "%*c> _tmp_163[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37375|  5.07k|        expr_ty starred_expression_var;
37376|  5.07k|        if (
37377|  5.07k|            (starred_expression_var = starred_expression_rule(p))  // starred_expression
  ------------------
  |  Branch (37377:13): [True: 2.14k, False: 2.92k]
  ------------------
37378|  5.07k|        )
37379|  2.14k|        {
37380|  2.14k|            D(fprintf(stderr, "%*c+ _tmp_163[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression"));
37381|  2.14k|            _res = starred_expression_var;
37382|  2.14k|            goto done;
37383|  2.14k|        }
37384|  2.92k|        p->mark = _mark;
37385|  2.92k|        D(fprintf(stderr, "%*c%s _tmp_163[%d-%d]: %s failed!\n", p->level, ' ',
37386|  2.92k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression"));
37387|  2.92k|    }
37388|  2.92k|    _res = NULL;
37389|  24.5k|  done:
37390|  24.5k|    p->level--;
37391|  24.5k|    return _res;
37392|  2.92k|}
parser.c:_loop0_63_rule:
31228|  5.60k|{
31229|  5.60k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31229:9): [True: 0, False: 5.60k]
  |  Branch (31229:35): [True: 0, False: 5.60k]
  ------------------
31230|      0|        _Pypegen_stack_overflow(p);
31231|      0|    }
31232|  5.60k|    if (p->error_indicator) {
  ------------------
  |  Branch (31232:9): [True: 0, False: 5.60k]
  ------------------
31233|      0|        p->level--;
31234|      0|        return NULL;
31235|      0|    }
31236|  5.60k|    void *_res = NULL;
31237|  5.60k|    int _mark = p->mark;
31238|  5.60k|    void **_children = PyMem_Malloc(sizeof(void *));
31239|  5.60k|    if (!_children) {
  ------------------
  |  Branch (31239:9): [True: 0, False: 5.60k]
  ------------------
31240|      0|        p->error_indicator = 1;
31241|      0|        PyErr_NoMemory();
31242|      0|        p->level--;
31243|      0|        return NULL;
31244|      0|    }
31245|  5.60k|    Py_ssize_t _children_capacity = 1;
31246|  5.60k|    Py_ssize_t _n = 0;
31247|  5.60k|    { // ',' (slice | starred_expression)
31248|  5.60k|        if (p->error_indicator) {
  ------------------
  |  Branch (31248:13): [True: 0, False: 5.60k]
  ------------------
31249|      0|            p->level--;
31250|      0|            return NULL;
31251|      0|        }
31252|  5.60k|        D(fprintf(stderr, "%*c> _loop0_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (slice | starred_expression)"));
31253|  5.60k|        Token * _literal;
31254|  5.60k|        void *elem;
31255|  5.60k|        while (
31256|  21.6k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (31256:13): [True: 17.7k, False: 3.93k]
  ------------------
31257|  17.7k|            &&
31258|  17.7k|            (elem = _tmp_163_rule(p))  // slice | starred_expression
  ------------------
  |  Branch (31258:13): [True: 16.0k, False: 1.66k]
  ------------------
31259|  5.60k|        )
31260|  16.0k|        {
31261|  16.0k|            _res = elem;
31262|  16.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (31262:18): [True: 0, False: 16.0k]
  |  Branch (31262:34): [True: 0, False: 16.0k]
  |  Branch (31262:57): [True: 0, False: 0]
  ------------------
31263|      0|                p->error_indicator = 1;
31264|      0|                PyMem_Free(_children);
31265|      0|                p->level--;
31266|      0|                return NULL;
31267|      0|            }
31268|  16.0k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31268:17): [True: 2.35k, False: 13.7k]
  ------------------
31269|  2.35k|                _children_capacity *= 2;
31270|  2.35k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31271|  2.35k|                if (!_new_children) {
  ------------------
  |  Branch (31271:21): [True: 0, False: 2.35k]
  ------------------
31272|      0|                    PyMem_Free(_children);
31273|      0|                    p->error_indicator = 1;
31274|      0|                    PyErr_NoMemory();
31275|      0|                    p->level--;
31276|      0|                    return NULL;
31277|      0|                }
31278|  2.35k|                _children = _new_children;
31279|  2.35k|            }
31280|  16.0k|            _children[_n++] = _res;
31281|  16.0k|            _mark = p->mark;
31282|  16.0k|        }
31283|  5.60k|        p->mark = _mark;
31284|  5.60k|        D(fprintf(stderr, "%*c%s _loop0_63[%d-%d]: %s failed!\n", p->level, ' ',
31285|  5.60k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (slice | starred_expression)"));
31286|  5.60k|    }
31287|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31288|  5.60k|    if (!_seq) {
  ------------------
  |  Branch (31288:9): [True: 0, False: 5.60k]
  ------------------
31289|      0|        PyMem_Free(_children);
31290|      0|        p->error_indicator = 1;
31291|      0|        PyErr_NoMemory();
31292|      0|        p->level--;
31293|      0|        return NULL;
31294|      0|    }
31295|  21.6k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  16.0k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  21.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31295:28): [True: 16.0k, False: 5.60k]
  ------------------
31296|  5.60k|    PyMem_Free(_children);
31297|  5.60k|    p->level--;
31298|  5.60k|    return _seq;
31299|  5.60k|}
parser.c:atom_rule:
14889|  4.54M|{
14890|  4.54M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.09M|#  define MAXSTACK 6000
  ------------------
  |  Branch (14890:9): [True: 0, False: 4.54M]
  |  Branch (14890:35): [True: 0, False: 4.54M]
  ------------------
14891|      0|        _Pypegen_stack_overflow(p);
14892|      0|    }
14893|  4.54M|    if (p->error_indicator) {
  ------------------
  |  Branch (14893:9): [True: 0, False: 4.54M]
  ------------------
14894|      0|        p->level--;
14895|      0|        return NULL;
14896|      0|    }
14897|  4.54M|    expr_ty _res = NULL;
14898|  4.54M|    int _mark = p->mark;
14899|  4.54M|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (14899:9): [True: 0, False: 4.54M]
  |  Branch (14899:31): [True: 0, False: 0]
  ------------------
14900|      0|        p->error_indicator = 1;
14901|      0|        p->level--;
14902|      0|        return NULL;
14903|      0|    }
14904|  4.54M|    int _start_lineno = p->tokens[_mark]->lineno;
14905|  4.54M|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.54M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.54M]
  |  |  ------------------
  ------------------
14906|  4.54M|    int _start_col_offset = p->tokens[_mark]->col_offset;
14907|  4.54M|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.54M|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.54M]
  |  |  ------------------
  ------------------
14908|  4.54M|    { // NAME
14909|  4.54M|        if (p->error_indicator) {
  ------------------
  |  Branch (14909:13): [True: 0, False: 4.54M]
  ------------------
14910|      0|            p->level--;
14911|      0|            return NULL;
14912|      0|        }
14913|  4.54M|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
14914|  4.54M|        expr_ty name_var;
14915|  4.54M|        if (
14916|  4.54M|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (14916:13): [True: 1.54M, False: 3.00M]
  ------------------
14917|  4.54M|        )
14918|  1.54M|        {
14919|  1.54M|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
14920|  1.54M|            _res = name_var;
14921|  1.54M|            goto done;
14922|  1.54M|        }
14923|  3.00M|        p->mark = _mark;
14924|  3.00M|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
14925|  3.00M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
14926|  3.00M|    }
14927|      0|    { // 'True'
14928|  3.00M|        if (p->error_indicator) {
  ------------------
  |  Branch (14928:13): [True: 0, False: 3.00M]
  ------------------
14929|      0|            p->level--;
14930|      0|            return NULL;
14931|      0|        }
14932|  3.00M|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
14933|  3.00M|        Token * _keyword;
14934|  3.00M|        if (
14935|  3.00M|            (_keyword = _PyPegen_expect_token(p, 627))  // token='True'
  ------------------
  |  Branch (14935:13): [True: 25.1k, False: 2.97M]
  ------------------
14936|  3.00M|        )
14937|  25.1k|        {
14938|  25.1k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
14939|  25.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14940|  25.1k|            if (_token == NULL) {
  ------------------
  |  Branch (14940:17): [True: 0, False: 25.1k]
  ------------------
14941|      0|                p->level--;
14942|      0|                return NULL;
14943|      0|            }
14944|  25.1k|            int _end_lineno = _token->end_lineno;
14945|  25.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  25.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 25.1k]
  |  |  ------------------
  ------------------
14946|  25.1k|            int _end_col_offset = _token->end_col_offset;
14947|  25.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  25.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 25.1k]
  |  |  ------------------
  ------------------
14948|  25.1k|            _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
  ------------------
  |  |   26|  25.1k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  25.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
  ------------------
  |  |  307|  25.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14949|  25.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14949:18): [True: 0, False: 25.1k]
  |  Branch (14949:34): [True: 0, False: 25.1k]
  |  Branch (14949:57): [True: 0, False: 0]
  ------------------
14950|      0|                p->error_indicator = 1;
14951|      0|                p->level--;
14952|      0|                return NULL;
14953|      0|            }
14954|  25.1k|            goto done;
14955|  25.1k|        }
14956|  2.97M|        p->mark = _mark;
14957|  2.97M|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
14958|  2.97M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
14959|  2.97M|    }
14960|      0|    { // 'False'
14961|  2.97M|        if (p->error_indicator) {
  ------------------
  |  Branch (14961:13): [True: 0, False: 2.97M]
  ------------------
14962|      0|            p->level--;
14963|      0|            return NULL;
14964|      0|        }
14965|  2.97M|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
14966|  2.97M|        Token * _keyword;
14967|  2.97M|        if (
14968|  2.97M|            (_keyword = _PyPegen_expect_token(p, 629))  // token='False'
  ------------------
  |  Branch (14968:13): [True: 2.86k, False: 2.97M]
  ------------------
14969|  2.97M|        )
14970|  2.86k|        {
14971|  2.86k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
14972|  2.86k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
14973|  2.86k|            if (_token == NULL) {
  ------------------
  |  Branch (14973:17): [True: 0, False: 2.86k]
  ------------------
14974|      0|                p->level--;
14975|      0|                return NULL;
14976|      0|            }
14977|  2.86k|            int _end_lineno = _token->end_lineno;
14978|  2.86k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.86k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.86k]
  |  |  ------------------
  ------------------
14979|  2.86k|            int _end_col_offset = _token->end_col_offset;
14980|  2.86k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.86k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.86k]
  |  |  ------------------
  ------------------
14981|  2.86k|            _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
  ------------------
  |  |   25|  2.86k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  2.86k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.86k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
  ------------------
  |  |  307|  2.86k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
14982|  2.86k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (14982:18): [True: 0, False: 2.86k]
  |  Branch (14982:34): [True: 0, False: 2.86k]
  |  Branch (14982:57): [True: 0, False: 0]
  ------------------
14983|      0|                p->error_indicator = 1;
14984|      0|                p->level--;
14985|      0|                return NULL;
14986|      0|            }
14987|  2.86k|            goto done;
14988|  2.86k|        }
14989|  2.97M|        p->mark = _mark;
14990|  2.97M|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
14991|  2.97M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
14992|  2.97M|    }
14993|      0|    { // 'None'
14994|  2.97M|        if (p->error_indicator) {
  ------------------
  |  Branch (14994:13): [True: 0, False: 2.97M]
  ------------------
14995|      0|            p->level--;
14996|      0|            return NULL;
14997|      0|        }
14998|  2.97M|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
14999|  2.97M|        Token * _keyword;
15000|  2.97M|        if (
15001|  2.97M|            (_keyword = _PyPegen_expect_token(p, 628))  // token='None'
  ------------------
  |  Branch (15001:13): [True: 6.23k, False: 2.96M]
  ------------------
15002|  2.97M|        )
15003|  6.23k|        {
15004|  6.23k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
15005|  6.23k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15006|  6.23k|            if (_token == NULL) {
  ------------------
  |  Branch (15006:17): [True: 0, False: 6.23k]
  ------------------
15007|      0|                p->level--;
15008|      0|                return NULL;
15009|      0|            }
15010|  6.23k|            int _end_lineno = _token->end_lineno;
15011|  6.23k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.23k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.23k]
  |  |  ------------------
  ------------------
15012|  6.23k|            int _end_col_offset = _token->end_col_offset;
15013|  6.23k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.23k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.23k]
  |  |  ------------------
  ------------------
15014|  6.23k|            _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
  ------------------
  |  |  616|  6.23k|#  define Py_None (&_Py_NoneStruct)
  ------------------
                          _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
  ------------------
  |  |  307|  6.23k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
15015|  6.23k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15015:18): [True: 0, False: 6.23k]
  |  Branch (15015:34): [True: 0, False: 6.23k]
  |  Branch (15015:57): [True: 0, False: 0]
  ------------------
15016|      0|                p->error_indicator = 1;
15017|      0|                p->level--;
15018|      0|                return NULL;
15019|      0|            }
15020|  6.23k|            goto done;
15021|  6.23k|        }
15022|  2.96M|        p->mark = _mark;
15023|  2.96M|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15024|  2.96M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
15025|  2.96M|    }
15026|      0|    { // &(STRING | FSTRING_START | TSTRING_START) strings
15027|  2.96M|        if (p->error_indicator) {
  ------------------
  |  Branch (15027:13): [True: 0, False: 2.96M]
  ------------------
15028|      0|            p->level--;
15029|      0|            return NULL;
15030|      0|        }
15031|  2.96M|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
15032|  2.96M|        expr_ty strings_var;
15033|  2.96M|        if (
15034|  2.96M|            _PyPegen_lookahead(1, _tmp_42_rule, p)
  ------------------
  |  Branch (15034:13): [True: 131k, False: 2.83M]
  ------------------
15035|   131k|            &&
15036|   131k|            (strings_var = strings_rule(p))  // strings
  ------------------
  |  Branch (15036:13): [True: 122k, False: 9.00k]
  ------------------
15037|  2.96M|        )
15038|   122k|        {
15039|   122k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
15040|   122k|            _res = strings_var;
15041|   122k|            goto done;
15042|   122k|        }
15043|  2.84M|        p->mark = _mark;
15044|  2.84M|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15045|  2.84M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
15046|  2.84M|    }
15047|      0|    { // NUMBER
15048|  2.84M|        if (p->error_indicator) {
  ------------------
  |  Branch (15048:13): [True: 7.54k, False: 2.83M]
  ------------------
15049|  7.54k|            p->level--;
15050|  7.54k|            return NULL;
15051|  7.54k|        }
15052|  2.83M|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
15053|  2.83M|        expr_ty number_var;
15054|  2.83M|        if (
15055|  2.83M|            (number_var = _PyPegen_number_token(p))  // NUMBER
  ------------------
  |  Branch (15055:13): [True: 2.22M, False: 607k]
  ------------------
15056|  2.83M|        )
15057|  2.22M|        {
15058|  2.22M|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
15059|  2.22M|            _res = number_var;
15060|  2.22M|            goto done;
15061|  2.22M|        }
15062|   607k|        p->mark = _mark;
15063|   607k|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15064|   607k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
15065|   607k|    }
15066|      0|    { // &'(' (genexp | tuple | group)
15067|   607k|        if (p->error_indicator) {
  ------------------
  |  Branch (15067:13): [True: 2, False: 607k]
  ------------------
15068|      2|            p->level--;
15069|      2|            return NULL;
15070|      2|        }
15071|   607k|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (genexp | tuple | group)"));
15072|   607k|        void *_tmp_66_var;
15073|   607k|        if (
15074|   607k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7)  // token='('
  ------------------
  |  Branch (15074:13): [True: 170k, False: 436k]
  ------------------
15075|   170k|            &&
15076|   170k|            (_tmp_66_var = _tmp_66_rule(p))  // genexp | tuple | group
  ------------------
  |  Branch (15076:13): [True: 137k, False: 32.9k]
  ------------------
15077|   607k|        )
15078|   137k|        {
15079|   137k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (genexp | tuple | group)"));
15080|   137k|            _res = _tmp_66_var;
15081|   137k|            goto done;
15082|   137k|        }
15083|   469k|        p->mark = _mark;
15084|   469k|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15085|   469k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'(' (genexp | tuple | group)"));
15086|   469k|    }
15087|      0|    { // &'[' (listcomp | list)
15088|   469k|        if (p->error_indicator) {
  ------------------
  |  Branch (15088:13): [True: 10.3k, False: 459k]
  ------------------
15089|  10.3k|            p->level--;
15090|  10.3k|            return NULL;
15091|  10.3k|        }
15092|   459k|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (listcomp | list)"));
15093|   459k|        void *_tmp_67_var;
15094|   459k|        if (
15095|   459k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9)  // token='['
  ------------------
  |  Branch (15095:13): [True: 41.6k, False: 417k]
  ------------------
15096|  41.6k|            &&
15097|  41.6k|            (_tmp_67_var = _tmp_67_rule(p))  // listcomp | list
  ------------------
  |  Branch (15097:13): [True: 18.9k, False: 22.7k]
  ------------------
15098|   459k|        )
15099|  18.9k|        {
15100|  18.9k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (listcomp | list)"));
15101|  18.9k|            _res = _tmp_67_var;
15102|  18.9k|            goto done;
15103|  18.9k|        }
15104|   440k|        p->mark = _mark;
15105|   440k|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15106|   440k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'[' (listcomp | list)"));
15107|   440k|    }
15108|      0|    { // &'{' (dictcomp | setcomp | dict | set)
15109|   440k|        if (p->error_indicator) {
  ------------------
  |  Branch (15109:13): [True: 9.02k, False: 431k]
  ------------------
15110|  9.02k|            p->level--;
15111|  9.02k|            return NULL;
15112|  9.02k|        }
15113|   431k|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dictcomp | setcomp | dict | set)"));
15114|   431k|        void *_tmp_68_var;
15115|   431k|        if (
15116|   431k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25)  // token='{'
  ------------------
  |  Branch (15116:13): [True: 44.9k, False: 386k]
  ------------------
15117|  44.9k|            &&
15118|  44.9k|            (_tmp_68_var = _tmp_68_rule(p))  // dictcomp | setcomp | dict | set
  ------------------
  |  Branch (15118:13): [True: 30.0k, False: 14.8k]
  ------------------
15119|   431k|        )
15120|  30.0k|        {
15121|  30.0k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dictcomp | setcomp | dict | set)"));
15122|  30.0k|            _res = _tmp_68_var;
15123|  30.0k|            goto done;
15124|  30.0k|        }
15125|   401k|        p->mark = _mark;
15126|   401k|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15127|   401k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'{' (dictcomp | setcomp | dict | set)"));
15128|   401k|    }
15129|      0|    { // '...'
15130|   401k|        if (p->error_indicator) {
  ------------------
  |  Branch (15130:13): [True: 7.03k, False: 394k]
  ------------------
15131|  7.03k|            p->level--;
15132|  7.03k|            return NULL;
15133|  7.03k|        }
15134|   394k|        D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
15135|   394k|        Token * _literal;
15136|   394k|        if (
15137|   394k|            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
  ------------------
  |  Branch (15137:13): [True: 4.62k, False: 389k]
  ------------------
15138|   394k|        )
15139|  4.62k|        {
15140|  4.62k|            D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
15141|  4.62k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15142|  4.62k|            if (_token == NULL) {
  ------------------
  |  Branch (15142:17): [True: 0, False: 4.62k]
  ------------------
15143|      0|                p->level--;
15144|      0|                return NULL;
15145|      0|            }
15146|  4.62k|            int _end_lineno = _token->end_lineno;
15147|  4.62k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.62k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.62k]
  |  |  ------------------
  ------------------
15148|  4.62k|            int _end_col_offset = _token->end_col_offset;
15149|  4.62k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.62k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.62k]
  |  |  ------------------
  ------------------
15150|  4.62k|            _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA );
  ------------------
  |  |   14|  4.62k|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
                          _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA );
  ------------------
  |  |  307|  4.62k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
15151|  4.62k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15151:18): [True: 0, False: 4.62k]
  |  Branch (15151:34): [True: 0, False: 4.62k]
  |  Branch (15151:57): [True: 0, False: 0]
  ------------------
15152|      0|                p->error_indicator = 1;
15153|      0|                p->level--;
15154|      0|                return NULL;
15155|      0|            }
15156|  4.62k|            goto done;
15157|  4.62k|        }
15158|   389k|        p->mark = _mark;
15159|   389k|        D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ',
15160|   389k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
15161|   389k|    }
15162|   389k|    _res = NULL;
15163|  4.51M|  done:
15164|  4.51M|    p->level--;
15165|  4.51M|    return _res;
15166|   389k|}
parser.c:_tmp_42_rule:
29914|  2.96M|{
29915|  2.96M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.93M|#  define MAXSTACK 6000
  ------------------
  |  Branch (29915:9): [True: 4, False: 2.96M]
  |  Branch (29915:35): [True: 0, False: 2.96M]
  ------------------
29916|      4|        _Pypegen_stack_overflow(p);
29917|      4|    }
29918|  2.96M|    if (p->error_indicator) {
  ------------------
  |  Branch (29918:9): [True: 4, False: 2.96M]
  ------------------
29919|      4|        p->level--;
29920|      4|        return NULL;
29921|      4|    }
29922|  2.96M|    void * _res = NULL;
29923|  2.96M|    int _mark = p->mark;
29924|  2.96M|    { // STRING
29925|  2.96M|        if (p->error_indicator) {
  ------------------
  |  Branch (29925:13): [True: 0, False: 2.96M]
  ------------------
29926|      0|            p->level--;
29927|      0|            return NULL;
29928|      0|        }
29929|  2.96M|        D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING"));
29930|  2.96M|        expr_ty string_var;
29931|  2.96M|        if (
29932|  2.96M|            (string_var = _PyPegen_string_token(p))  // STRING
  ------------------
  |  Branch (29932:13): [True: 99.5k, False: 2.86M]
  ------------------
29933|  2.96M|        )
29934|  99.5k|        {
29935|  99.5k|            D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING"));
29936|  99.5k|            _res = string_var;
29937|  99.5k|            goto done;
29938|  99.5k|        }
29939|  2.86M|        p->mark = _mark;
29940|  2.86M|        D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ',
29941|  2.86M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING"));
29942|  2.86M|    }
29943|      0|    { // FSTRING_START
29944|  2.86M|        if (p->error_indicator) {
  ------------------
  |  Branch (29944:13): [True: 0, False: 2.86M]
  ------------------
29945|      0|            p->level--;
29946|      0|            return NULL;
29947|      0|        }
29948|  2.86M|        D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START"));
29949|  2.86M|        Token * fstring_start_var;
29950|  2.86M|        if (
29951|  2.86M|            (fstring_start_var = _PyPegen_expect_token(p, FSTRING_START))  // token='FSTRING_START'
  ------------------
  |  |   75|  2.86M|#define FSTRING_START   59
  ------------------
  |  Branch (29951:13): [True: 19.9k, False: 2.84M]
  ------------------
29952|  2.86M|        )
29953|  19.9k|        {
29954|  19.9k|            D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START"));
29955|  19.9k|            _res = fstring_start_var;
29956|  19.9k|            goto done;
29957|  19.9k|        }
29958|  2.84M|        p->mark = _mark;
29959|  2.84M|        D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ',
29960|  2.84M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START"));
29961|  2.84M|    }
29962|      0|    { // TSTRING_START
29963|  2.84M|        if (p->error_indicator) {
  ------------------
  |  Branch (29963:13): [True: 0, False: 2.84M]
  ------------------
29964|      0|            p->level--;
29965|      0|            return NULL;
29966|      0|        }
29967|  2.84M|        D(fprintf(stderr, "%*c> _tmp_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_START"));
29968|  2.84M|        Token * tstring_start_var;
29969|  2.84M|        if (
29970|  2.84M|            (tstring_start_var = _PyPegen_expect_token(p, TSTRING_START))  // token='TSTRING_START'
  ------------------
  |  |   78|  2.84M|#define TSTRING_START   62
  ------------------
  |  Branch (29970:13): [True: 12.2k, False: 2.83M]
  ------------------
29971|  2.84M|        )
29972|  12.2k|        {
29973|  12.2k|            D(fprintf(stderr, "%*c+ _tmp_42[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_START"));
29974|  12.2k|            _res = tstring_start_var;
29975|  12.2k|            goto done;
29976|  12.2k|        }
29977|  2.83M|        p->mark = _mark;
29978|  2.83M|        D(fprintf(stderr, "%*c%s _tmp_42[%d-%d]: %s failed!\n", p->level, ' ',
29979|  2.83M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_START"));
29980|  2.83M|    }
29981|  2.83M|    _res = NULL;
29982|  2.96M|  done:
29983|  2.96M|    p->level--;
29984|  2.96M|    return _res;
29985|  2.83M|}
parser.c:strings_rule:
17045|   175k|{
17046|   175k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   351k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17046:9): [True: 0, False: 175k]
  |  Branch (17046:35): [True: 0, False: 175k]
  ------------------
17047|      0|        _Pypegen_stack_overflow(p);
17048|      0|    }
17049|   175k|    if (p->error_indicator) {
  ------------------
  |  Branch (17049:9): [True: 0, False: 175k]
  ------------------
17050|      0|        p->level--;
17051|      0|        return NULL;
17052|      0|    }
17053|   175k|    expr_ty _res = NULL;
17054|   175k|    if (_PyPegen_is_memoized(p, strings_type, &_res)) {
  ------------------
  |  |  250|   175k|#define strings_type 1161
  ------------------
  |  Branch (17054:9): [True: 60.3k, False: 115k]
  ------------------
17055|  60.3k|        p->level--;
17056|  60.3k|        return _res;
17057|  60.3k|    }
17058|   115k|    int _mark = p->mark;
17059|   115k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (17059:9): [True: 0, False: 115k]
  |  Branch (17059:31): [True: 0, False: 0]
  ------------------
17060|      0|        p->error_indicator = 1;
17061|      0|        p->level--;
17062|      0|        return NULL;
17063|      0|    }
17064|   115k|    int _start_lineno = p->tokens[_mark]->lineno;
17065|   115k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   115k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 115k]
  |  |  ------------------
  ------------------
17066|   115k|    int _start_col_offset = p->tokens[_mark]->col_offset;
17067|   115k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   115k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 115k]
  |  |  ------------------
  ------------------
17068|   115k|    if (p->call_invalid_rules) { // invalid_string_tstring_concat
  ------------------
  |  Branch (17068:9): [True: 40.7k, False: 74.7k]
  ------------------
17069|  40.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (17069:13): [True: 0, False: 40.7k]
  ------------------
17070|      0|            p->level--;
17071|      0|            return NULL;
17072|      0|        }
17073|  40.7k|        D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_string_tstring_concat"));
17074|  40.7k|        void *invalid_string_tstring_concat_var;
17075|  40.7k|        if (
17076|  40.7k|            (invalid_string_tstring_concat_var = invalid_string_tstring_concat_rule(p))  // invalid_string_tstring_concat
  ------------------
  |  Branch (17076:13): [True: 0, False: 40.7k]
  ------------------
17077|  40.7k|        )
17078|      0|        {
17079|      0|            D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_string_tstring_concat"));
17080|      0|            _res = invalid_string_tstring_concat_var;
17081|      0|            goto done;
17082|      0|        }
17083|  40.7k|        p->mark = _mark;
17084|  40.7k|        D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ',
17085|  40.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_string_tstring_concat"));
17086|  40.7k|    }
17087|   115k|    { // ((fstring | string))+
17088|   115k|        if (p->error_indicator) {
  ------------------
  |  Branch (17088:13): [True: 6.73k, False: 108k]
  ------------------
17089|  6.73k|            p->level--;
17090|  6.73k|            return NULL;
17091|  6.73k|        }
17092|   108k|        D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((fstring | string))+"));
17093|   108k|        asdl_expr_seq* a;
17094|   108k|        if (
17095|   108k|            (a = (asdl_expr_seq*)_loop1_80_rule(p))  // ((fstring | string))+
  ------------------
  |  Branch (17095:13): [True: 59.5k, False: 49.1k]
  ------------------
17096|   108k|        )
17097|  59.5k|        {
17098|  59.5k|            D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((fstring | string))+"));
17099|  59.5k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17100|  59.5k|            if (_token == NULL) {
  ------------------
  |  Branch (17100:17): [True: 0, False: 59.5k]
  ------------------
17101|      0|                p->level--;
17102|      0|                return NULL;
17103|      0|            }
17104|  59.5k|            int _end_lineno = _token->end_lineno;
17105|  59.5k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  59.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 59.5k]
  |  |  ------------------
  ------------------
17106|  59.5k|            int _end_col_offset = _token->end_col_offset;
17107|  59.5k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  59.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 59.5k]
  |  |  ------------------
  ------------------
17108|  59.5k|            _res = _PyPegen_concatenate_strings ( p , a , EXTRA );
  ------------------
  |  |  307|  59.5k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17109|  59.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17109:18): [True: 30, False: 59.5k]
  |  Branch (17109:34): [True: 0, False: 59.5k]
  |  Branch (17109:57): [True: 30, False: 0]
  ------------------
17110|     30|                p->error_indicator = 1;
17111|     30|                p->level--;
17112|     30|                return NULL;
17113|     30|            }
17114|  59.5k|            goto done;
17115|  59.5k|        }
17116|  49.1k|        p->mark = _mark;
17117|  49.1k|        D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ',
17118|  49.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((fstring | string))+"));
17119|  49.1k|    }
17120|      0|    { // tstring+
17121|  49.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (17121:13): [True: 448, False: 48.7k]
  ------------------
17122|    448|            p->level--;
17123|    448|            return NULL;
17124|    448|        }
17125|  48.7k|        D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring+"));
17126|  48.7k|        asdl_expr_seq* a;
17127|  48.7k|        if (
17128|  48.7k|            (a = (asdl_expr_seq*)_loop1_81_rule(p))  // tstring+
  ------------------
  |  Branch (17128:13): [True: 3.45k, False: 45.2k]
  ------------------
17129|  48.7k|        )
17130|  3.45k|        {
17131|  3.45k|            D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring+"));
17132|  3.45k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17133|  3.45k|            if (_token == NULL) {
  ------------------
  |  Branch (17133:17): [True: 0, False: 3.45k]
  ------------------
17134|      0|                p->level--;
17135|      0|                return NULL;
17136|      0|            }
17137|  3.45k|            int _end_lineno = _token->end_lineno;
17138|  3.45k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.45k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
17139|  3.45k|            int _end_col_offset = _token->end_col_offset;
17140|  3.45k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.45k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
17141|  3.45k|            _res = _PyPegen_concatenate_tstrings ( p , a , EXTRA );
  ------------------
  |  |  307|  3.45k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17142|  3.45k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17142:18): [True: 0, False: 3.45k]
  |  Branch (17142:34): [True: 0, False: 3.45k]
  |  Branch (17142:57): [True: 0, False: 0]
  ------------------
17143|      0|                p->error_indicator = 1;
17144|      0|                p->level--;
17145|      0|                return NULL;
17146|      0|            }
17147|  3.45k|            goto done;
17148|  3.45k|        }
17149|  45.2k|        p->mark = _mark;
17150|  45.2k|        D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ',
17151|  45.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring+"));
17152|  45.2k|    }
17153|  45.2k|    _res = NULL;
17154|   108k|  done:
17155|   108k|    _PyPegen_insert_memo(p, _mark, strings_type, _res);
  ------------------
  |  |  250|   108k|#define strings_type 1161
  ------------------
17156|   108k|    p->level--;
17157|   108k|    return _res;
17158|  45.2k|}
parser.c:invalid_string_tstring_concat_rule:
26976|  40.7k|{
26977|  40.7k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  81.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (26977:9): [True: 1, False: 40.7k]
  |  Branch (26977:35): [True: 0, False: 40.7k]
  ------------------
26978|      1|        _Pypegen_stack_overflow(p);
26979|      1|    }
26980|  40.7k|    if (p->error_indicator) {
  ------------------
  |  Branch (26980:9): [True: 1, False: 40.7k]
  ------------------
26981|      1|        p->level--;
26982|      1|        return NULL;
26983|      1|    }
26984|  40.7k|    void * _res = NULL;
26985|  40.7k|    int _mark = p->mark;
26986|  40.7k|    { // ((fstring | string))+ tstring
26987|  40.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (26987:13): [True: 0, False: 40.7k]
  ------------------
26988|      0|            p->level--;
26989|      0|            return NULL;
26990|      0|        }
26991|  40.7k|        D(fprintf(stderr, "%*c> invalid_string_tstring_concat[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((fstring | string))+ tstring"));
26992|  40.7k|        asdl_seq * a;
26993|  40.7k|        expr_ty b;
26994|  40.7k|        if (
26995|  40.7k|            (a = _loop1_80_rule(p))  // ((fstring | string))+
  ------------------
  |  Branch (26995:13): [True: 10.2k, False: 30.5k]
  ------------------
26996|  10.2k|            &&
26997|  10.2k|            (b = (expr_ty)tstring_rule(p))  // tstring
  ------------------
  |  Branch (26997:13): [True: 8, False: 10.1k]
  ------------------
26998|  40.7k|        )
26999|      8|        {
27000|      8|            D(fprintf(stderr, "%*c+ invalid_string_tstring_concat[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((fstring | string))+ tstring"));
27001|      8|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_last_item ( a , expr_ty ) , b , "cannot mix t-string literals with string or bytes literals" );
  ------------------
  |  |  237|      8|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
27002|      8|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27002:18): [True: 8, False: 0]
  |  Branch (27002:34): [True: 0, False: 0]
  |  Branch (27002:57): [True: 8, False: 0]
  ------------------
27003|      8|                p->error_indicator = 1;
27004|      8|                p->level--;
27005|      8|                return NULL;
27006|      8|            }
27007|      0|            goto done;
27008|      8|        }
27009|  40.7k|        p->mark = _mark;
27010|  40.7k|        D(fprintf(stderr, "%*c%s invalid_string_tstring_concat[%d-%d]: %s failed!\n", p->level, ' ',
27011|  40.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((fstring | string))+ tstring"));
27012|  40.7k|    }
27013|      0|    { // tstring+ (fstring | string)
27014|  40.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (27014:13): [True: 1.84k, False: 38.8k]
  ------------------
27015|  1.84k|            p->level--;
27016|  1.84k|            return NULL;
27017|  1.84k|        }
27018|  38.8k|        D(fprintf(stderr, "%*c> invalid_string_tstring_concat[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring+ (fstring | string)"));
27019|  38.8k|        asdl_seq * a;
27020|  38.8k|        expr_ty b;
27021|  38.8k|        if (
27022|  38.8k|            (a = _loop1_81_rule(p))  // tstring+
  ------------------
  |  Branch (27022:13): [True: 1.28k, False: 37.6k]
  ------------------
27023|  1.28k|            &&
27024|  1.28k|            (b = (expr_ty)_tmp_154_rule(p))  // fstring | string
  ------------------
  |  Branch (27024:13): [True: 11, False: 1.27k]
  ------------------
27025|  38.8k|        )
27026|     11|        {
27027|     11|            D(fprintf(stderr, "%*c+ invalid_string_tstring_concat[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring+ (fstring | string)"));
27028|     11|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_last_item ( a , expr_ty ) , b , "cannot mix t-string literals with string or bytes literals" );
  ------------------
  |  |  237|     11|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
27029|     11|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27029:18): [True: 11, False: 0]
  |  Branch (27029:34): [True: 0, False: 0]
  |  Branch (27029:57): [True: 11, False: 0]
  ------------------
27030|     11|                p->error_indicator = 1;
27031|     11|                p->level--;
27032|     11|                return NULL;
27033|     11|            }
27034|      0|            goto done;
27035|     11|        }
27036|  38.8k|        p->mark = _mark;
27037|  38.8k|        D(fprintf(stderr, "%*c%s invalid_string_tstring_concat[%d-%d]: %s failed!\n", p->level, ' ',
27038|  38.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring+ (fstring | string)"));
27039|  38.8k|    }
27040|  38.8k|    _res = NULL;
27041|  38.8k|  done:
27042|  38.8k|    p->level--;
27043|  38.8k|    return _res;
27044|  38.8k|}
parser.c:tstring_rule:
16948|   102k|{
16949|   102k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   205k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16949:9): [True: 0, False: 102k]
  |  Branch (16949:35): [True: 0, False: 102k]
  ------------------
16950|      0|        _Pypegen_stack_overflow(p);
16951|      0|    }
16952|   102k|    if (p->error_indicator) {
  ------------------
  |  Branch (16952:9): [True: 0, False: 102k]
  ------------------
16953|      0|        p->level--;
16954|      0|        return NULL;
16955|      0|    }
16956|   102k|    expr_ty _res = NULL;
16957|   102k|    if (_PyPegen_is_memoized(p, tstring_type, &_res)) {
  ------------------
  |  |  248|   102k|#define tstring_type 1159
  ------------------
  |  Branch (16957:9): [True: 25.2k, False: 77.7k]
  ------------------
16958|  25.2k|        p->level--;
16959|  25.2k|        return _res;
16960|  25.2k|    }
16961|  77.7k|    int _mark = p->mark;
16962|  77.7k|    { // TSTRING_START tstring_middle* TSTRING_END
16963|  77.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (16963:13): [True: 0, False: 77.7k]
  ------------------
16964|      0|            p->level--;
16965|      0|            return NULL;
16966|      0|        }
16967|  77.7k|        D(fprintf(stderr, "%*c> tstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_START tstring_middle* TSTRING_END"));
16968|  77.7k|        Token * a;
16969|  77.7k|        asdl_seq * b;
16970|  77.7k|        Token * c;
16971|  77.7k|        if (
16972|  77.7k|            (a = _PyPegen_expect_token(p, TSTRING_START))  // token='TSTRING_START'
  ------------------
  |  |   78|  77.7k|#define TSTRING_START   62
  ------------------
  |  Branch (16972:13): [True: 10.0k, False: 67.7k]
  ------------------
16973|  10.0k|            &&
16974|  10.0k|            (b = _loop0_79_rule(p))  // tstring_middle*
  ------------------
  |  Branch (16974:13): [True: 10.0k, False: 0]
  ------------------
16975|  10.0k|            &&
16976|  10.0k|            (c = _PyPegen_expect_token(p, TSTRING_END))  // token='TSTRING_END'
  ------------------
  |  |   80|  10.0k|#define TSTRING_END     64
  ------------------
  |  Branch (16976:13): [True: 3.81k, False: 6.20k]
  ------------------
16977|  77.7k|        )
16978|  3.81k|        {
16979|  3.81k|            D(fprintf(stderr, "%*c+ tstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_START tstring_middle* TSTRING_END"));
16980|  3.81k|            _res = CHECK_VERSION ( expr_ty , 14 , "t-strings are" , _PyPegen_template_str ( p , a , ( asdl_expr_seq* ) b , c ) );
  ------------------
  |  |  345|  3.81k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
16981|  3.81k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16981:18): [True: 5, False: 3.81k]
  |  Branch (16981:34): [True: 0, False: 3.81k]
  |  Branch (16981:57): [True: 5, False: 0]
  ------------------
16982|      5|                p->error_indicator = 1;
16983|      5|                p->level--;
16984|      5|                return NULL;
16985|      5|            }
16986|  3.81k|            goto done;
16987|  3.81k|        }
16988|  73.9k|        p->mark = _mark;
16989|  73.9k|        D(fprintf(stderr, "%*c%s tstring[%d-%d]: %s failed!\n", p->level, ' ',
16990|  73.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_START tstring_middle* TSTRING_END"));
16991|  73.9k|    }
16992|  73.9k|    _res = NULL;
16993|  77.7k|  done:
16994|  77.7k|    _PyPegen_insert_memo(p, _mark, tstring_type, _res);
  ------------------
  |  |  248|  77.7k|#define tstring_type 1159
  ------------------
16995|  77.7k|    p->level--;
16996|  77.7k|    return _res;
16997|  73.9k|}
parser.c:_loop0_79_rule:
32294|  10.0k|{
32295|  10.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  20.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32295:9): [True: 0, False: 10.0k]
  |  Branch (32295:35): [True: 0, False: 10.0k]
  ------------------
32296|      0|        _Pypegen_stack_overflow(p);
32297|      0|    }
32298|  10.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (32298:9): [True: 0, False: 10.0k]
  ------------------
32299|      0|        p->level--;
32300|      0|        return NULL;
32301|      0|    }
32302|  10.0k|    void *_res = NULL;
32303|  10.0k|    int _mark = p->mark;
32304|  10.0k|    void **_children = PyMem_Malloc(sizeof(void *));
32305|  10.0k|    if (!_children) {
  ------------------
  |  Branch (32305:9): [True: 0, False: 10.0k]
  ------------------
32306|      0|        p->error_indicator = 1;
32307|      0|        PyErr_NoMemory();
32308|      0|        p->level--;
32309|      0|        return NULL;
32310|      0|    }
32311|  10.0k|    Py_ssize_t _children_capacity = 1;
32312|  10.0k|    Py_ssize_t _n = 0;
32313|  10.0k|    { // tstring_middle
32314|  10.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (32314:13): [True: 0, False: 10.0k]
  ------------------
32315|      0|            p->level--;
32316|      0|            return NULL;
32317|      0|        }
32318|  10.0k|        D(fprintf(stderr, "%*c> _loop0_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_middle"));
32319|  10.0k|        expr_ty tstring_middle_var;
32320|  10.0k|        while (
32321|  30.2k|            (tstring_middle_var = tstring_middle_rule(p))  // tstring_middle
  ------------------
  |  Branch (32321:13): [True: 20.2k, False: 10.0k]
  ------------------
32322|  10.0k|        )
32323|  20.2k|        {
32324|  20.2k|            _res = tstring_middle_var;
32325|  20.2k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32325:17): [True: 3.68k, False: 16.5k]
  ------------------
32326|  3.68k|                _children_capacity *= 2;
32327|  3.68k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32328|  3.68k|                if (!_new_children) {
  ------------------
  |  Branch (32328:21): [True: 0, False: 3.68k]
  ------------------
32329|      0|                    PyMem_Free(_children);
32330|      0|                    p->error_indicator = 1;
32331|      0|                    PyErr_NoMemory();
32332|      0|                    p->level--;
32333|      0|                    return NULL;
32334|      0|                }
32335|  3.68k|                _children = _new_children;
32336|  3.68k|            }
32337|  20.2k|            _children[_n++] = _res;
32338|  20.2k|            _mark = p->mark;
32339|  20.2k|        }
32340|  10.0k|        p->mark = _mark;
32341|  10.0k|        D(fprintf(stderr, "%*c%s _loop0_79[%d-%d]: %s failed!\n", p->level, ' ',
32342|  10.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_middle"));
32343|  10.0k|    }
32344|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32345|  10.0k|    if (!_seq) {
  ------------------
  |  Branch (32345:9): [True: 0, False: 10.0k]
  ------------------
32346|      0|        PyMem_Free(_children);
32347|      0|        p->error_indicator = 1;
32348|      0|        PyErr_NoMemory();
32349|      0|        p->level--;
32350|      0|        return NULL;
32351|      0|    }
32352|  30.2k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  20.2k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  30.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32352:28): [True: 20.2k, False: 10.0k]
  ------------------
32353|  10.0k|    PyMem_Free(_children);
32354|  10.0k|    p->level--;
32355|  10.0k|    return _seq;
32356|  10.0k|}
parser.c:tstring_middle_rule:
16886|  30.2k|{
16887|  30.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  60.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16887:9): [True: 2, False: 30.2k]
  |  Branch (16887:35): [True: 0, False: 30.2k]
  ------------------
16888|      2|        _Pypegen_stack_overflow(p);
16889|      2|    }
16890|  30.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (16890:9): [True: 2, False: 30.2k]
  ------------------
16891|      2|        p->level--;
16892|      2|        return NULL;
16893|      2|    }
16894|  30.2k|    expr_ty _res = NULL;
16895|  30.2k|    int _mark = p->mark;
16896|  30.2k|    { // tstring_replacement_field
16897|  30.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (16897:13): [True: 0, False: 30.2k]
  ------------------
16898|      0|            p->level--;
16899|      0|            return NULL;
16900|      0|        }
16901|  30.2k|        D(fprintf(stderr, "%*c> tstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_replacement_field"));
16902|  30.2k|        expr_ty tstring_replacement_field_var;
16903|  30.2k|        if (
16904|  30.2k|            (tstring_replacement_field_var = tstring_replacement_field_rule(p))  // tstring_replacement_field
  ------------------
  |  Branch (16904:13): [True: 7.33k, False: 22.8k]
  ------------------
16905|  30.2k|        )
16906|  7.33k|        {
16907|  7.33k|            D(fprintf(stderr, "%*c+ tstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring_replacement_field"));
16908|  7.33k|            _res = tstring_replacement_field_var;
16909|  7.33k|            goto done;
16910|  7.33k|        }
16911|  22.8k|        p->mark = _mark;
16912|  22.8k|        D(fprintf(stderr, "%*c%s tstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16913|  22.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_replacement_field"));
16914|  22.8k|    }
16915|      0|    { // TSTRING_MIDDLE
16916|  22.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (16916:13): [True: 5.20k, False: 17.6k]
  ------------------
16917|  5.20k|            p->level--;
16918|  5.20k|            return NULL;
16919|  5.20k|        }
16920|  17.6k|        D(fprintf(stderr, "%*c> tstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
16921|  17.6k|        Token * t;
16922|  17.6k|        if (
16923|  17.6k|            (t = _PyPegen_expect_token(p, TSTRING_MIDDLE))  // token='TSTRING_MIDDLE'
  ------------------
  |  |   79|  17.6k|#define TSTRING_MIDDLE  63
  ------------------
  |  Branch (16923:13): [True: 12.8k, False: 4.81k]
  ------------------
16924|  17.6k|        )
16925|  12.8k|        {
16926|  12.8k|            D(fprintf(stderr, "%*c+ tstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
16927|  12.8k|            _res = _PyPegen_constant_from_token ( p , t );
16928|  12.8k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16928:18): [True: 3, False: 12.8k]
  |  Branch (16928:34): [True: 0, False: 12.8k]
  |  Branch (16928:57): [True: 3, False: 0]
  ------------------
16929|      3|                p->error_indicator = 1;
16930|      3|                p->level--;
16931|      3|                return NULL;
16932|      3|            }
16933|  12.8k|            goto done;
16934|  12.8k|        }
16935|  4.81k|        p->mark = _mark;
16936|  4.81k|        D(fprintf(stderr, "%*c%s tstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16937|  4.81k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_MIDDLE"));
16938|  4.81k|    }
16939|  4.81k|    _res = NULL;
16940|  25.0k|  done:
16941|  25.0k|    p->level--;
16942|  25.0k|    return _res;
16943|  4.81k|}
parser.c:tstring_replacement_field_rule:
16791|  30.2k|{
16792|  30.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  60.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16792:9): [True: 1, False: 30.2k]
  |  Branch (16792:35): [True: 0, False: 30.2k]
  ------------------
16793|      1|        _Pypegen_stack_overflow(p);
16794|      1|    }
16795|  30.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (16795:9): [True: 1, False: 30.2k]
  ------------------
16796|      1|        p->level--;
16797|      1|        return NULL;
16798|      1|    }
16799|  30.2k|    expr_ty _res = NULL;
16800|  30.2k|    int _mark = p->mark;
16801|  30.2k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (16801:9): [True: 24.2k, False: 6.03k]
  |  Branch (16801:31): [True: 71, False: 24.1k]
  ------------------
16802|     71|        p->error_indicator = 1;
16803|     71|        p->level--;
16804|     71|        return NULL;
16805|     71|    }
16806|  30.1k|    int _start_lineno = p->tokens[_mark]->lineno;
16807|  30.1k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  30.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30.1k]
  |  |  ------------------
  ------------------
16808|  30.1k|    int _start_col_offset = p->tokens[_mark]->col_offset;
16809|  30.1k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  30.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30.1k]
  |  |  ------------------
  ------------------
16810|  30.1k|    { // '{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'
16811|  30.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (16811:13): [True: 0, False: 30.1k]
  ------------------
16812|      0|            p->level--;
16813|      0|            return NULL;
16814|      0|        }
16815|  30.1k|        D(fprintf(stderr, "%*c> tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16816|  30.1k|        Token * _literal;
16817|  30.1k|        expr_ty a;
16818|  30.1k|        void *conversion;
16819|  30.1k|        void *debug_expr;
16820|  30.1k|        void *format;
16821|  30.1k|        Token * rbrace;
16822|  30.1k|        if (
16823|  30.1k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (16823:13): [True: 13.4k, False: 16.6k]
  ------------------
16824|  13.4k|            &&
16825|  13.4k|            (a = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (16825:13): [True: 8.27k, False: 5.20k]
  ------------------
16826|  8.27k|            &&
16827|  8.27k|            (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (16827:13): [True: 8.27k, False: 0]
  ------------------
16828|  8.27k|            &&
16829|  8.27k|            (conversion = fstring_conversion_rule(p), !p->error_indicator)  // fstring_conversion?
  ------------------
  |  Branch (16829:13): [True: 8.26k, False: 8]
  ------------------
16830|  8.26k|            &&
16831|  8.26k|            (format = tstring_full_format_spec_rule(p), !p->error_indicator)  // tstring_full_format_spec?
  ------------------
  |  Branch (16831:13): [True: 7.77k, False: 492]
  ------------------
16832|  7.77k|            &&
16833|  7.77k|            (rbrace = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (16833:13): [True: 7.33k, False: 432]
  ------------------
16834|  30.1k|        )
16835|  7.33k|        {
16836|  7.33k|            D(fprintf(stderr, "%*c+ tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16837|  7.33k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16838|  7.33k|            if (_token == NULL) {
  ------------------
  |  Branch (16838:17): [True: 0, False: 7.33k]
  ------------------
16839|      0|                p->level--;
16840|      0|                return NULL;
16841|      0|            }
16842|  7.33k|            int _end_lineno = _token->end_lineno;
16843|  7.33k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.33k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.33k]
  |  |  ------------------
  ------------------
16844|  7.33k|            int _end_col_offset = _token->end_col_offset;
16845|  7.33k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.33k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.33k]
  |  |  ------------------
  ------------------
16846|  7.33k|            _res = _PyPegen_interpolation ( p , a , debug_expr , conversion , format , rbrace , EXTRA );
  ------------------
  |  |  307|  7.33k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
16847|  7.33k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16847:18): [True: 0, False: 7.33k]
  |  Branch (16847:34): [True: 0, False: 7.33k]
  |  Branch (16847:57): [True: 0, False: 0]
  ------------------
16848|      0|                p->error_indicator = 1;
16849|      0|                p->level--;
16850|      0|                return NULL;
16851|      0|            }
16852|  7.33k|            goto done;
16853|  7.33k|        }
16854|  22.8k|        p->mark = _mark;
16855|  22.8k|        D(fprintf(stderr, "%*c%s tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16856|  22.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16857|  22.8k|    }
16858|  22.8k|    if (p->call_invalid_rules) { // invalid_tstring_replacement_field
  ------------------
  |  Branch (16858:9): [True: 10.1k, False: 12.6k]
  ------------------
16859|  10.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (16859:13): [True: 4.77k, False: 5.40k]
  ------------------
16860|  4.77k|            p->level--;
16861|  4.77k|            return NULL;
16862|  4.77k|        }
16863|  5.40k|        D(fprintf(stderr, "%*c> tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16864|  5.40k|        void *invalid_tstring_replacement_field_var;
16865|  5.40k|        if (
16866|  5.40k|            (invalid_tstring_replacement_field_var = invalid_tstring_replacement_field_rule(p))  // invalid_tstring_replacement_field
  ------------------
  |  Branch (16866:13): [True: 0, False: 5.40k]
  ------------------
16867|  5.40k|        )
16868|      0|        {
16869|      0|            D(fprintf(stderr, "%*c+ tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16870|      0|            _res = invalid_tstring_replacement_field_var;
16871|      0|            goto done;
16872|      0|        }
16873|  5.40k|        p->mark = _mark;
16874|  5.40k|        D(fprintf(stderr, "%*c%s tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16875|  5.40k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_tstring_replacement_field"));
16876|  5.40k|    }
16877|  18.0k|    _res = NULL;
16878|  25.3k|  done:
16879|  25.3k|    p->level--;
16880|  25.3k|    return _res;
16881|  18.0k|}
parser.c:annotated_rhs_rule:
 2310|  64.6k|{
 2311|  64.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   129k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2311:9): [True: 1, False: 64.6k]
  |  Branch (2311:35): [True: 0, False: 64.6k]
  ------------------
 2312|      1|        _Pypegen_stack_overflow(p);
 2313|      1|    }
 2314|  64.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (2314:9): [True: 1, False: 64.6k]
  ------------------
 2315|      1|        p->level--;
 2316|      1|        return NULL;
 2317|      1|    }
 2318|  64.6k|    expr_ty _res = NULL;
 2319|  64.6k|    int _mark = p->mark;
 2320|  64.6k|    { // yield_expr
 2321|  64.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (2321:13): [True: 0, False: 64.6k]
  ------------------
 2322|      0|            p->level--;
 2323|      0|            return NULL;
 2324|      0|        }
 2325|  64.6k|        D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
 2326|  64.6k|        expr_ty yield_expr_var;
 2327|  64.6k|        if (
 2328|  64.6k|            (yield_expr_var = yield_expr_rule(p))  // yield_expr
  ------------------
  |  Branch (2328:13): [True: 336, False: 64.3k]
  ------------------
 2329|  64.6k|        )
 2330|    336|        {
 2331|    336|            D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
 2332|    336|            _res = yield_expr_var;
 2333|    336|            goto done;
 2334|    336|        }
 2335|  64.3k|        p->mark = _mark;
 2336|  64.3k|        D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ',
 2337|  64.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
 2338|  64.3k|    }
 2339|      0|    { // star_expressions
 2340|  64.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (2340:13): [True: 64, False: 64.2k]
  ------------------
 2341|     64|            p->level--;
 2342|     64|            return NULL;
 2343|     64|        }
 2344|  64.2k|        D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
 2345|  64.2k|        expr_ty star_expressions_var;
 2346|  64.2k|        if (
 2347|  64.2k|            (star_expressions_var = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (2347:13): [True: 56.2k, False: 7.98k]
  ------------------
 2348|  64.2k|        )
 2349|  56.2k|        {
 2350|  56.2k|            D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
 2351|  56.2k|            _res = star_expressions_var;
 2352|  56.2k|            goto done;
 2353|  56.2k|        }
 2354|  7.98k|        p->mark = _mark;
 2355|  7.98k|        D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ',
 2356|  7.98k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
 2357|  7.98k|    }
 2358|  7.98k|    _res = NULL;
 2359|  64.5k|  done:
 2360|  64.5k|    p->level--;
 2361|  64.5k|    return _res;
 2362|  7.98k|}
parser.c:yield_expr_rule:
11762|   152k|{
11763|   152k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   304k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11763:9): [True: 1, False: 152k]
  |  Branch (11763:35): [True: 0, False: 152k]
  ------------------
11764|      1|        _Pypegen_stack_overflow(p);
11765|      1|    }
11766|   152k|    if (p->error_indicator) {
  ------------------
  |  Branch (11766:9): [True: 1, False: 152k]
  ------------------
11767|      1|        p->level--;
11768|      1|        return NULL;
11769|      1|    }
11770|   152k|    expr_ty _res = NULL;
11771|   152k|    int _mark = p->mark;
11772|   152k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (11772:9): [True: 39.5k, False: 112k]
  |  Branch (11772:31): [True: 50, False: 39.5k]
  ------------------
11773|     50|        p->error_indicator = 1;
11774|     50|        p->level--;
11775|     50|        return NULL;
11776|     50|    }
11777|   152k|    int _start_lineno = p->tokens[_mark]->lineno;
11778|   152k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   152k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 152k]
  |  |  ------------------
  ------------------
11779|   152k|    int _start_col_offset = p->tokens[_mark]->col_offset;
11780|   152k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   152k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 152k]
  |  |  ------------------
  ------------------
11781|   152k|    { // 'yield' 'from' expression
11782|   152k|        if (p->error_indicator) {
  ------------------
  |  Branch (11782:13): [True: 0, False: 152k]
  ------------------
11783|      0|            p->level--;
11784|      0|            return NULL;
11785|      0|        }
11786|   152k|        D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
11787|   152k|        Token * _keyword;
11788|   152k|        Token * _keyword_1;
11789|   152k|        expr_ty a;
11790|   152k|        if (
11791|   152k|            (_keyword = _PyPegen_expect_token(p, 588))  // token='yield'
  ------------------
  |  Branch (11791:13): [True: 5.01k, False: 147k]
  ------------------
11792|  5.01k|            &&
11793|  5.01k|            (_keyword_1 = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (11793:13): [True: 885, False: 4.12k]
  ------------------
11794|    885|            &&
11795|    885|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (11795:13): [True: 404, False: 481]
  ------------------
11796|   152k|        )
11797|    404|        {
11798|    404|            D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression"));
11799|    404|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11800|    404|            if (_token == NULL) {
  ------------------
  |  Branch (11800:17): [True: 0, False: 404]
  ------------------
11801|      0|                p->level--;
11802|      0|                return NULL;
11803|      0|            }
11804|    404|            int _end_lineno = _token->end_lineno;
11805|    404|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    404|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 404]
  |  |  ------------------
  ------------------
11806|    404|            int _end_col_offset = _token->end_col_offset;
11807|    404|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    404|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 404]
  |  |  ------------------
  ------------------
11808|    404|            _res = _PyAST_YieldFrom ( a , EXTRA );
  ------------------
  |  |  307|    404|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11809|    404|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11809:18): [True: 0, False: 404]
  |  Branch (11809:34): [True: 0, False: 404]
  |  Branch (11809:57): [True: 0, False: 0]
  ------------------
11810|      0|                p->error_indicator = 1;
11811|      0|                p->level--;
11812|      0|                return NULL;
11813|      0|            }
11814|    404|            goto done;
11815|    404|        }
11816|   151k|        p->mark = _mark;
11817|   151k|        D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ',
11818|   151k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' 'from' expression"));
11819|   151k|    }
11820|      0|    { // 'yield' star_expressions?
11821|   151k|        if (p->error_indicator) {
  ------------------
  |  Branch (11821:13): [True: 119, False: 151k]
  ------------------
11822|    119|            p->level--;
11823|    119|            return NULL;
11824|    119|        }
11825|   151k|        D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
11826|   151k|        Token * _keyword;
11827|   151k|        void *a;
11828|   151k|        if (
11829|   151k|            (_keyword = _PyPegen_expect_token(p, 588))  // token='yield'
  ------------------
  |  Branch (11829:13): [True: 4.49k, False: 147k]
  ------------------
11830|  4.49k|            &&
11831|  4.49k|            (a = star_expressions_rule(p), !p->error_indicator)  // star_expressions?
  ------------------
  |  Branch (11831:13): [True: 4.33k, False: 159]
  ------------------
11832|   151k|        )
11833|  4.33k|        {
11834|  4.33k|            D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?"));
11835|  4.33k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11836|  4.33k|            if (_token == NULL) {
  ------------------
  |  Branch (11836:17): [True: 0, False: 4.33k]
  ------------------
11837|      0|                p->level--;
11838|      0|                return NULL;
11839|      0|            }
11840|  4.33k|            int _end_lineno = _token->end_lineno;
11841|  4.33k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.33k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.33k]
  |  |  ------------------
  ------------------
11842|  4.33k|            int _end_col_offset = _token->end_col_offset;
11843|  4.33k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.33k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.33k]
  |  |  ------------------
  ------------------
11844|  4.33k|            _res = _PyAST_Yield ( a , EXTRA );
  ------------------
  |  |  307|  4.33k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11845|  4.33k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11845:18): [True: 0, False: 4.33k]
  |  Branch (11845:34): [True: 0, False: 4.33k]
  |  Branch (11845:57): [True: 0, False: 0]
  ------------------
11846|      0|                p->error_indicator = 1;
11847|      0|                p->level--;
11848|      0|                return NULL;
11849|      0|            }
11850|  4.33k|            goto done;
11851|  4.33k|        }
11852|   147k|        p->mark = _mark;
11853|   147k|        D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ',
11854|   147k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' star_expressions?"));
11855|   147k|    }
11856|   147k|    _res = NULL;
11857|   152k|  done:
11858|   152k|    p->level--;
11859|   152k|    return _res;
11860|   147k|}
parser.c:fstring_conversion_rule:
16345|  29.0k|{
16346|  29.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  58.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16346:9): [True: 0, False: 29.0k]
  |  Branch (16346:35): [True: 0, False: 29.0k]
  ------------------
16347|      0|        _Pypegen_stack_overflow(p);
16348|      0|    }
16349|  29.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (16349:9): [True: 0, False: 29.0k]
  ------------------
16350|      0|        p->level--;
16351|      0|        return NULL;
16352|      0|    }
16353|  29.0k|    ResultTokenWithMetadata* _res = NULL;
16354|  29.0k|    int _mark = p->mark;
16355|  29.0k|    { // "!" NAME
16356|  29.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (16356:13): [True: 0, False: 29.0k]
  ------------------
16357|      0|            p->level--;
16358|      0|            return NULL;
16359|      0|        }
16360|  29.0k|        D(fprintf(stderr, "%*c> fstring_conversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"!\" NAME"));
16361|  29.0k|        expr_ty conv;
16362|  29.0k|        Token * conv_token;
16363|  29.0k|        if (
16364|  29.0k|            (conv_token = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (16364:13): [True: 5.96k, False: 23.0k]
  ------------------
16365|  5.96k|            &&
16366|  5.96k|            (conv = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (16366:13): [True: 5.89k, False: 68]
  ------------------
16367|  29.0k|        )
16368|  5.89k|        {
16369|  5.89k|            D(fprintf(stderr, "%*c+ fstring_conversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"!\" NAME"));
16370|  5.89k|            _res = _PyPegen_check_fstring_conversion ( p , conv_token , conv );
16371|  5.89k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16371:18): [True: 28, False: 5.86k]
  |  Branch (16371:34): [True: 0, False: 5.86k]
  |  Branch (16371:57): [True: 28, False: 0]
  ------------------
16372|     28|                p->error_indicator = 1;
16373|     28|                p->level--;
16374|     28|                return NULL;
16375|     28|            }
16376|  5.86k|            goto done;
16377|  5.89k|        }
16378|  23.1k|        p->mark = _mark;
16379|  23.1k|        D(fprintf(stderr, "%*c%s fstring_conversion[%d-%d]: %s failed!\n", p->level, ' ',
16380|  23.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"!\" NAME"));
16381|  23.1k|    }
16382|  23.1k|    _res = NULL;
16383|  28.9k|  done:
16384|  28.9k|    p->level--;
16385|  28.9k|    return _res;
16386|  23.1k|}
parser.c:tstring_full_format_spec_rule:
16725|  11.5k|{
16726|  11.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  23.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16726:9): [True: 0, False: 11.5k]
  |  Branch (16726:35): [True: 0, False: 11.5k]
  ------------------
16727|      0|        _Pypegen_stack_overflow(p);
16728|      0|    }
16729|  11.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (16729:9): [True: 0, False: 11.5k]
  ------------------
16730|      0|        p->level--;
16731|      0|        return NULL;
16732|      0|    }
16733|  11.5k|    ResultTokenWithMetadata* _res = NULL;
16734|  11.5k|    int _mark = p->mark;
16735|  11.5k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (16735:9): [True: 1.36k, False: 10.1k]
  |  Branch (16735:31): [True: 1, False: 1.36k]
  ------------------
16736|      1|        p->error_indicator = 1;
16737|      1|        p->level--;
16738|      1|        return NULL;
16739|      1|    }
16740|  11.5k|    int _start_lineno = p->tokens[_mark]->lineno;
16741|  11.5k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  11.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 11.5k]
  |  |  ------------------
  ------------------
16742|  11.5k|    int _start_col_offset = p->tokens[_mark]->col_offset;
16743|  11.5k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  11.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 11.5k]
  |  |  ------------------
  ------------------
16744|  11.5k|    { // ':' tstring_format_spec*
16745|  11.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (16745:13): [True: 0, False: 11.5k]
  ------------------
16746|      0|            p->level--;
16747|      0|            return NULL;
16748|      0|        }
16749|  11.5k|        D(fprintf(stderr, "%*c> tstring_full_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' tstring_format_spec*"));
16750|  11.5k|        Token * colon;
16751|  11.5k|        asdl_seq * spec;
16752|  11.5k|        if (
16753|  11.5k|            (colon = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (16753:13): [True: 7.98k, False: 3.56k]
  ------------------
16754|  7.98k|            &&
16755|  7.98k|            (spec = _loop0_78_rule(p))  // tstring_format_spec*
  ------------------
  |  Branch (16755:13): [True: 7.98k, False: 0]
  ------------------
16756|  11.5k|        )
16757|  7.98k|        {
16758|  7.98k|            D(fprintf(stderr, "%*c+ tstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' tstring_format_spec*"));
16759|  7.98k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16760|  7.98k|            if (_token == NULL) {
  ------------------
  |  Branch (16760:17): [True: 0, False: 7.98k]
  ------------------
16761|      0|                p->level--;
16762|      0|                return NULL;
16763|      0|            }
16764|  7.98k|            int _end_lineno = _token->end_lineno;
16765|  7.98k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.98k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.98k]
  |  |  ------------------
  ------------------
16766|  7.98k|            int _end_col_offset = _token->end_col_offset;
16767|  7.98k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.98k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.98k]
  |  |  ------------------
  ------------------
16768|  7.98k|            _res = _PyPegen_setup_full_format_spec ( p , colon , ( asdl_expr_seq* ) spec , EXTRA );
  ------------------
  |  |  307|  7.98k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
16769|  7.98k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16769:18): [True: 0, False: 7.98k]
  |  Branch (16769:34): [True: 687, False: 7.30k]
  |  Branch (16769:57): [True: 687, False: 0]
  ------------------
16770|    687|                p->error_indicator = 1;
16771|    687|                p->level--;
16772|    687|                return NULL;
16773|    687|            }
16774|  7.30k|            goto done;
16775|  7.98k|        }
16776|  3.56k|        p->mark = _mark;
16777|  3.56k|        D(fprintf(stderr, "%*c%s tstring_full_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16778|  3.56k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' tstring_format_spec*"));
16779|  3.56k|    }
16780|  3.56k|    _res = NULL;
16781|  10.8k|  done:
16782|  10.8k|    p->level--;
16783|  10.8k|    return _res;
16784|  3.56k|}
parser.c:_loop0_78_rule:
32227|  7.98k|{
32228|  7.98k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32228:9): [True: 0, False: 7.98k]
  |  Branch (32228:35): [True: 0, False: 7.98k]
  ------------------
32229|      0|        _Pypegen_stack_overflow(p);
32230|      0|    }
32231|  7.98k|    if (p->error_indicator) {
  ------------------
  |  Branch (32231:9): [True: 0, False: 7.98k]
  ------------------
32232|      0|        p->level--;
32233|      0|        return NULL;
32234|      0|    }
32235|  7.98k|    void *_res = NULL;
32236|  7.98k|    int _mark = p->mark;
32237|  7.98k|    void **_children = PyMem_Malloc(sizeof(void *));
32238|  7.98k|    if (!_children) {
  ------------------
  |  Branch (32238:9): [True: 0, False: 7.98k]
  ------------------
32239|      0|        p->error_indicator = 1;
32240|      0|        PyErr_NoMemory();
32241|      0|        p->level--;
32242|      0|        return NULL;
32243|      0|    }
32244|  7.98k|    Py_ssize_t _children_capacity = 1;
32245|  7.98k|    Py_ssize_t _n = 0;
32246|  7.98k|    { // tstring_format_spec
32247|  7.98k|        if (p->error_indicator) {
  ------------------
  |  Branch (32247:13): [True: 0, False: 7.98k]
  ------------------
32248|      0|            p->level--;
32249|      0|            return NULL;
32250|      0|        }
32251|  7.98k|        D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_format_spec"));
32252|  7.98k|        expr_ty tstring_format_spec_var;
32253|  7.98k|        while (
32254|  20.5k|            (tstring_format_spec_var = tstring_format_spec_rule(p))  // tstring_format_spec
  ------------------
  |  Branch (32254:13): [True: 12.5k, False: 7.98k]
  ------------------
32255|  7.98k|        )
32256|  12.5k|        {
32257|  12.5k|            _res = tstring_format_spec_var;
32258|  12.5k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32258:17): [True: 3.46k, False: 9.11k]
  ------------------
32259|  3.46k|                _children_capacity *= 2;
32260|  3.46k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32261|  3.46k|                if (!_new_children) {
  ------------------
  |  Branch (32261:21): [True: 0, False: 3.46k]
  ------------------
32262|      0|                    PyMem_Free(_children);
32263|      0|                    p->error_indicator = 1;
32264|      0|                    PyErr_NoMemory();
32265|      0|                    p->level--;
32266|      0|                    return NULL;
32267|      0|                }
32268|  3.46k|                _children = _new_children;
32269|  3.46k|            }
32270|  12.5k|            _children[_n++] = _res;
32271|  12.5k|            _mark = p->mark;
32272|  12.5k|        }
32273|  7.98k|        p->mark = _mark;
32274|  7.98k|        D(fprintf(stderr, "%*c%s _loop0_78[%d-%d]: %s failed!\n", p->level, ' ',
32275|  7.98k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_format_spec"));
32276|  7.98k|    }
32277|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32278|  7.98k|    if (!_seq) {
  ------------------
  |  Branch (32278:9): [True: 0, False: 7.98k]
  ------------------
32279|      0|        PyMem_Free(_children);
32280|      0|        p->error_indicator = 1;
32281|      0|        PyErr_NoMemory();
32282|      0|        p->level--;
32283|      0|        return NULL;
32284|      0|    }
32285|  20.5k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  12.5k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  20.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32285:28): [True: 12.5k, False: 7.98k]
  ------------------
32286|  7.98k|    PyMem_Free(_children);
32287|  7.98k|    p->level--;
32288|  7.98k|    return _seq;
32289|  7.98k|}
parser.c:tstring_format_spec_rule:
16663|  20.5k|{
16664|  20.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  41.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16664:9): [True: 0, False: 20.5k]
  |  Branch (16664:35): [True: 0, False: 20.5k]
  ------------------
16665|      0|        _Pypegen_stack_overflow(p);
16666|      0|    }
16667|  20.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (16667:9): [True: 0, False: 20.5k]
  ------------------
16668|      0|        p->level--;
16669|      0|        return NULL;
16670|      0|    }
16671|  20.5k|    expr_ty _res = NULL;
16672|  20.5k|    int _mark = p->mark;
16673|  20.5k|    { // TSTRING_MIDDLE
16674|  20.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (16674:13): [True: 0, False: 20.5k]
  ------------------
16675|      0|            p->level--;
16676|      0|            return NULL;
16677|      0|        }
16678|  20.5k|        D(fprintf(stderr, "%*c> tstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
16679|  20.5k|        Token * t;
16680|  20.5k|        if (
16681|  20.5k|            (t = _PyPegen_expect_token(p, TSTRING_MIDDLE))  // token='TSTRING_MIDDLE'
  ------------------
  |  |   79|  20.5k|#define TSTRING_MIDDLE  63
  ------------------
  |  Branch (16681:13): [True: 9.65k, False: 10.9k]
  ------------------
16682|  20.5k|        )
16683|  9.65k|        {
16684|  9.65k|            D(fprintf(stderr, "%*c+ tstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TSTRING_MIDDLE"));
16685|  9.65k|            _res = _PyPegen_decoded_constant_from_token ( p , t );
16686|  9.65k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16686:18): [True: 2, False: 9.65k]
  |  Branch (16686:34): [True: 0, False: 9.65k]
  |  Branch (16686:57): [True: 2, False: 0]
  ------------------
16687|      2|                p->error_indicator = 1;
16688|      2|                p->level--;
16689|      2|                return NULL;
16690|      2|            }
16691|  9.65k|            goto done;
16692|  9.65k|        }
16693|  10.9k|        p->mark = _mark;
16694|  10.9k|        D(fprintf(stderr, "%*c%s tstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16695|  10.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TSTRING_MIDDLE"));
16696|  10.9k|    }
16697|      0|    { // tstring_format_spec_replacement_field
16698|  10.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (16698:13): [True: 21, False: 10.8k]
  ------------------
16699|     21|            p->level--;
16700|     21|            return NULL;
16701|     21|        }
16702|  10.8k|        D(fprintf(stderr, "%*c> tstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring_format_spec_replacement_field"));
16703|  10.8k|        expr_ty tstring_format_spec_replacement_field_var;
16704|  10.8k|        if (
16705|  10.8k|            (tstring_format_spec_replacement_field_var = tstring_format_spec_replacement_field_rule(p))  // tstring_format_spec_replacement_field
  ------------------
  |  Branch (16705:13): [True: 2.91k, False: 7.96k]
  ------------------
16706|  10.8k|        )
16707|  2.91k|        {
16708|  2.91k|            D(fprintf(stderr, "%*c+ tstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tstring_format_spec_replacement_field"));
16709|  2.91k|            _res = tstring_format_spec_replacement_field_var;
16710|  2.91k|            goto done;
16711|  2.91k|        }
16712|  7.96k|        p->mark = _mark;
16713|  7.96k|        D(fprintf(stderr, "%*c%s tstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16714|  7.96k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring_format_spec_replacement_field"));
16715|  7.96k|    }
16716|  7.96k|    _res = NULL;
16717|  20.5k|  done:
16718|  20.5k|    p->level--;
16719|  20.5k|    return _res;
16720|  7.96k|}
parser.c:tstring_format_spec_replacement_field_rule:
16568|  10.8k|{
16569|  10.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  21.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16569:9): [True: 0, False: 10.8k]
  |  Branch (16569:35): [True: 0, False: 10.8k]
  ------------------
16570|      0|        _Pypegen_stack_overflow(p);
16571|      0|    }
16572|  10.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (16572:9): [True: 0, False: 10.8k]
  ------------------
16573|      0|        p->level--;
16574|      0|        return NULL;
16575|      0|    }
16576|  10.8k|    expr_ty _res = NULL;
16577|  10.8k|    int _mark = p->mark;
16578|  10.8k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (16578:9): [True: 0, False: 10.8k]
  |  Branch (16578:31): [True: 0, False: 0]
  ------------------
16579|      0|        p->error_indicator = 1;
16580|      0|        p->level--;
16581|      0|        return NULL;
16582|      0|    }
16583|  10.8k|    int _start_lineno = p->tokens[_mark]->lineno;
16584|  10.8k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  10.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.8k]
  |  |  ------------------
  ------------------
16585|  10.8k|    int _start_col_offset = p->tokens[_mark]->col_offset;
16586|  10.8k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  10.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.8k]
  |  |  ------------------
  ------------------
16587|  10.8k|    { // '{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'
16588|  10.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (16588:13): [True: 0, False: 10.8k]
  ------------------
16589|      0|            p->level--;
16590|      0|            return NULL;
16591|      0|        }
16592|  10.8k|        D(fprintf(stderr, "%*c> tstring_format_spec_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16593|  10.8k|        Token * _literal;
16594|  10.8k|        expr_ty a;
16595|  10.8k|        void *conversion;
16596|  10.8k|        void *debug_expr;
16597|  10.8k|        void *format;
16598|  10.8k|        Token * rbrace;
16599|  10.8k|        if (
16600|  10.8k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (16600:13): [True: 3.89k, False: 6.98k]
  ------------------
16601|  3.89k|            &&
16602|  3.89k|            (a = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (16602:13): [True: 3.29k, False: 608]
  ------------------
16603|  3.29k|            &&
16604|  3.29k|            (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (16604:13): [True: 3.29k, False: 0]
  ------------------
16605|  3.29k|            &&
16606|  3.29k|            (conversion = fstring_conversion_rule(p), !p->error_indicator)  // fstring_conversion?
  ------------------
  |  Branch (16606:13): [True: 3.28k, False: 1]
  ------------------
16607|  3.28k|            &&
16608|  3.28k|            (format = tstring_full_format_spec_rule(p), !p->error_indicator)  // tstring_full_format_spec?
  ------------------
  |  Branch (16608:13): [True: 3.09k, False: 196]
  ------------------
16609|  3.09k|            &&
16610|  3.09k|            (rbrace = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (16610:13): [True: 2.91k, False: 177]
  ------------------
16611|  10.8k|        )
16612|  2.91k|        {
16613|  2.91k|            D(fprintf(stderr, "%*c+ tstring_format_spec_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16614|  2.91k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16615|  2.91k|            if (_token == NULL) {
  ------------------
  |  Branch (16615:17): [True: 0, False: 2.91k]
  ------------------
16616|      0|                p->level--;
16617|      0|                return NULL;
16618|      0|            }
16619|  2.91k|            int _end_lineno = _token->end_lineno;
16620|  2.91k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.91k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.91k]
  |  |  ------------------
  ------------------
16621|  2.91k|            int _end_col_offset = _token->end_col_offset;
16622|  2.91k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.91k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.91k]
  |  |  ------------------
  ------------------
16623|  2.91k|            _res = _PyPegen_formatted_value ( p , a , debug_expr , conversion , format , rbrace , EXTRA );
  ------------------
  |  |  307|  2.91k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
16624|  2.91k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16624:18): [True: 0, False: 2.91k]
  |  Branch (16624:34): [True: 0, False: 2.91k]
  |  Branch (16624:57): [True: 0, False: 0]
  ------------------
16625|      0|                p->error_indicator = 1;
16626|      0|                p->level--;
16627|      0|                return NULL;
16628|      0|            }
16629|  2.91k|            goto done;
16630|  2.91k|        }
16631|  7.96k|        p->mark = _mark;
16632|  7.96k|        D(fprintf(stderr, "%*c%s tstring_format_spec_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16633|  7.96k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? tstring_full_format_spec? '}'"));
16634|  7.96k|    }
16635|  7.96k|    if (p->call_invalid_rules) { // invalid_tstring_replacement_field
  ------------------
  |  Branch (16635:9): [True: 2.95k, False: 5.00k]
  ------------------
16636|  2.95k|        if (p->error_indicator) {
  ------------------
  |  Branch (16636:13): [True: 542, False: 2.41k]
  ------------------
16637|    542|            p->level--;
16638|    542|            return NULL;
16639|    542|        }
16640|  2.41k|        D(fprintf(stderr, "%*c> tstring_format_spec_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16641|  2.41k|        void *invalid_tstring_replacement_field_var;
16642|  2.41k|        if (
16643|  2.41k|            (invalid_tstring_replacement_field_var = invalid_tstring_replacement_field_rule(p))  // invalid_tstring_replacement_field
  ------------------
  |  Branch (16643:13): [True: 0, False: 2.41k]
  ------------------
16644|  2.41k|        )
16645|      0|        {
16646|      0|            D(fprintf(stderr, "%*c+ tstring_format_spec_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_tstring_replacement_field"));
16647|      0|            _res = invalid_tstring_replacement_field_var;
16648|      0|            goto done;
16649|      0|        }
16650|  2.41k|        p->mark = _mark;
16651|  2.41k|        D(fprintf(stderr, "%*c%s tstring_format_spec_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16652|  2.41k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_tstring_replacement_field"));
16653|  2.41k|    }
16654|  7.42k|    _res = NULL;
16655|  10.3k|  done:
16656|  10.3k|    p->level--;
16657|  10.3k|    return _res;
16658|  7.42k|}
parser.c:invalid_tstring_replacement_field_rule:
26543|  7.82k|{
26544|  7.82k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (26544:9): [True: 0, False: 7.82k]
  |  Branch (26544:35): [True: 0, False: 7.82k]
  ------------------
26545|      0|        _Pypegen_stack_overflow(p);
26546|      0|    }
26547|  7.82k|    if (p->error_indicator) {
  ------------------
  |  Branch (26547:9): [True: 0, False: 7.82k]
  ------------------
26548|      0|        p->level--;
26549|      0|        return NULL;
26550|      0|    }
26551|  7.82k|    void * _res = NULL;
26552|  7.82k|    int _mark = p->mark;
26553|  7.82k|    { // '{' '='
26554|  7.82k|        if (p->error_indicator) {
  ------------------
  |  Branch (26554:13): [True: 0, False: 7.82k]
  ------------------
26555|      0|            p->level--;
26556|      0|            return NULL;
26557|      0|        }
26558|  7.82k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26559|  7.82k|        Token * _literal;
26560|  7.82k|        Token * a;
26561|  7.82k|        if (
26562|  7.82k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26562:13): [True: 125, False: 7.69k]
  ------------------
26563|    125|            &&
26564|    125|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (26564:13): [True: 3, False: 122]
  ------------------
26565|  7.82k|        )
26566|      3|        {
26567|      3|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26568|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before '='" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26569|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26569:18): [True: 3, False: 0]
  |  Branch (26569:34): [True: 0, False: 0]
  |  Branch (26569:57): [True: 3, False: 0]
  ------------------
26570|      3|                p->error_indicator = 1;
26571|      3|                p->level--;
26572|      3|                return NULL;
26573|      3|            }
26574|      0|            goto done;
26575|      3|        }
26576|  7.82k|        p->mark = _mark;
26577|  7.82k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26578|  7.82k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '='"));
26579|  7.82k|    }
26580|      0|    { // '{' '!'
26581|  7.82k|        if (p->error_indicator) {
  ------------------
  |  Branch (26581:13): [True: 0, False: 7.82k]
  ------------------
26582|      0|            p->level--;
26583|      0|            return NULL;
26584|      0|        }
26585|  7.82k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26586|  7.82k|        Token * _literal;
26587|  7.82k|        Token * a;
26588|  7.82k|        if (
26589|  7.82k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26589:13): [True: 122, False: 7.69k]
  ------------------
26590|    122|            &&
26591|    122|            (a = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (26591:13): [True: 5, False: 117]
  ------------------
26592|  7.82k|        )
26593|      5|        {
26594|      5|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26595|      5|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before '!'" );
  ------------------
  |  |  239|      5|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26596|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26596:18): [True: 5, False: 0]
  |  Branch (26596:34): [True: 0, False: 0]
  |  Branch (26596:57): [True: 5, False: 0]
  ------------------
26597|      5|                p->error_indicator = 1;
26598|      5|                p->level--;
26599|      5|                return NULL;
26600|      5|            }
26601|      0|            goto done;
26602|      5|        }
26603|  7.81k|        p->mark = _mark;
26604|  7.81k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26605|  7.81k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '!'"));
26606|  7.81k|    }
26607|      0|    { // '{' ':'
26608|  7.81k|        if (p->error_indicator) {
  ------------------
  |  Branch (26608:13): [True: 0, False: 7.81k]
  ------------------
26609|      0|            p->level--;
26610|      0|            return NULL;
26611|      0|        }
26612|  7.81k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26613|  7.81k|        Token * _literal;
26614|  7.81k|        Token * a;
26615|  7.81k|        if (
26616|  7.81k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26616:13): [True: 117, False: 7.69k]
  ------------------
26617|    117|            &&
26618|    117|            (a = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (26618:13): [True: 14, False: 103]
  ------------------
26619|  7.81k|        )
26620|     14|        {
26621|     14|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26622|     14|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before ':'" );
  ------------------
  |  |  239|     14|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26623|     14|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26623:18): [True: 14, False: 0]
  |  Branch (26623:34): [True: 0, False: 0]
  |  Branch (26623:57): [True: 14, False: 0]
  ------------------
26624|     14|                p->error_indicator = 1;
26625|     14|                p->level--;
26626|     14|                return NULL;
26627|     14|            }
26628|      0|            goto done;
26629|     14|        }
26630|  7.80k|        p->mark = _mark;
26631|  7.80k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26632|  7.80k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' ':'"));
26633|  7.80k|    }
26634|      0|    { // '{' '}'
26635|  7.80k|        if (p->error_indicator) {
  ------------------
  |  Branch (26635:13): [True: 0, False: 7.80k]
  ------------------
26636|      0|            p->level--;
26637|      0|            return NULL;
26638|      0|        }
26639|  7.80k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26640|  7.80k|        Token * _literal;
26641|  7.80k|        Token * a;
26642|  7.80k|        if (
26643|  7.80k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26643:13): [True: 103, False: 7.69k]
  ------------------
26644|    103|            &&
26645|    103|            (a = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (26645:13): [True: 7, False: 96]
  ------------------
26646|  7.80k|        )
26647|      7|        {
26648|      7|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26649|      7|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "t-string: valid expression required before '}'" );
  ------------------
  |  |  239|      7|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26650|      7|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26650:18): [True: 7, False: 0]
  |  Branch (26650:34): [True: 0, False: 0]
  |  Branch (26650:57): [True: 7, False: 0]
  ------------------
26651|      7|                p->error_indicator = 1;
26652|      7|                p->level--;
26653|      7|                return NULL;
26654|      7|            }
26655|      0|            goto done;
26656|      7|        }
26657|  7.79k|        p->mark = _mark;
26658|  7.79k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26659|  7.79k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'"));
26660|  7.79k|    }
26661|      0|    { // '{' !annotated_rhs
26662|  7.79k|        if (p->error_indicator) {
  ------------------
  |  Branch (26662:13): [True: 0, False: 7.79k]
  ------------------
26663|      0|            p->level--;
26664|      0|            return NULL;
26665|      0|        }
26666|  7.79k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26667|  7.79k|        Token * _literal;
26668|  7.79k|        if (
26669|  7.79k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26669:13): [True: 96, False: 7.69k]
  ------------------
26670|     96|            &&
26671|     96|            _PyPegen_lookahead_for_expr(0, annotated_rhs_rule, p)
  ------------------
  |  Branch (26671:13): [True: 14, False: 82]
  ------------------
26672|  7.79k|        )
26673|     14|        {
26674|     14|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26675|     14|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting a valid expression after '{'" );
  ------------------
  |  |  235|     14|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
26676|     14|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26676:18): [True: 14, False: 0]
  |  Branch (26676:34): [True: 0, False: 0]
  |  Branch (26676:57): [True: 14, False: 0]
  ------------------
26677|     14|                p->error_indicator = 1;
26678|     14|                p->level--;
26679|     14|                return NULL;
26680|     14|            }
26681|      0|            goto done;
26682|     14|        }
26683|  7.78k|        p->mark = _mark;
26684|  7.78k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26685|  7.78k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' !annotated_rhs"));
26686|  7.78k|    }
26687|      0|    { // '{' annotated_rhs !('=' | '!' | ':' | '}')
26688|  7.78k|        if (p->error_indicator) {
  ------------------
  |  Branch (26688:13): [True: 0, False: 7.78k]
  ------------------
26689|      0|            p->level--;
26690|      0|            return NULL;
26691|      0|        }
26692|  7.78k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26693|  7.78k|        Token * _literal;
26694|  7.78k|        expr_ty annotated_rhs_var;
26695|  7.78k|        if (
26696|  7.78k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26696:13): [True: 82, False: 7.69k]
  ------------------
26697|     82|            &&
26698|     82|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26698:13): [True: 82, False: 0]
  ------------------
26699|     82|            &&
26700|     82|            _PyPegen_lookahead(0, _tmp_150_rule, p)
  ------------------
  |  Branch (26700:13): [True: 31, False: 51]
  ------------------
26701|  7.78k|        )
26702|     31|        {
26703|     31|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26704|     31|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '=', or '!', or ':', or '}'" );
  ------------------
  |  |  235|     62|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26704:20): [True: 0, False: 31]
  ------------------
26705|     31|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26705:18): [True: 31, False: 0]
  |  Branch (26705:34): [True: 0, False: 0]
  |  Branch (26705:57): [True: 31, False: 0]
  ------------------
26706|     31|                p->error_indicator = 1;
26707|     31|                p->level--;
26708|     31|                return NULL;
26709|     31|            }
26710|      0|            goto done;
26711|     31|        }
26712|  7.74k|        p->mark = _mark;
26713|  7.74k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26714|  7.74k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26715|  7.74k|    }
26716|      0|    { // '{' annotated_rhs '=' !('!' | ':' | '}')
26717|  7.74k|        if (p->error_indicator) {
  ------------------
  |  Branch (26717:13): [True: 0, False: 7.74k]
  ------------------
26718|      0|            p->level--;
26719|      0|            return NULL;
26720|      0|        }
26721|  7.74k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26722|  7.74k|        Token * _literal;
26723|  7.74k|        Token * _literal_1;
26724|  7.74k|        expr_ty annotated_rhs_var;
26725|  7.74k|        if (
26726|  7.74k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26726:13): [True: 51, False: 7.69k]
  ------------------
26727|     51|            &&
26728|     51|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26728:13): [True: 51, False: 0]
  ------------------
26729|     51|            &&
26730|     51|            (_literal_1 = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (26730:13): [True: 19, False: 32]
  ------------------
26731|     19|            &&
26732|     19|            _PyPegen_lookahead(0, _tmp_151_rule, p)
  ------------------
  |  Branch (26732:13): [True: 7, False: 12]
  ------------------
26733|  7.74k|        )
26734|      7|        {
26735|      7|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26736|      7|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '!', or ':', or '}'" );
  ------------------
  |  |  235|     14|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26736:20): [True: 0, False: 7]
  ------------------
26737|      7|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26737:18): [True: 7, False: 0]
  |  Branch (26737:34): [True: 0, False: 0]
  |  Branch (26737:57): [True: 7, False: 0]
  ------------------
26738|      7|                p->error_indicator = 1;
26739|      7|                p->level--;
26740|      7|                return NULL;
26741|      7|            }
26742|      0|            goto done;
26743|      7|        }
26744|  7.74k|        p->mark = _mark;
26745|  7.74k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26746|  7.74k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26747|  7.74k|    }
26748|      0|    { // '{' annotated_rhs '='? invalid_tstring_conversion_character
26749|  7.74k|        if (p->error_indicator) {
  ------------------
  |  Branch (26749:13): [True: 0, False: 7.74k]
  ------------------
26750|      0|            p->level--;
26751|      0|            return NULL;
26752|      0|        }
26753|  7.74k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_tstring_conversion_character"));
26754|  7.74k|        Token * _literal;
26755|  7.74k|        void *_opt_var;
26756|  7.74k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  7.74k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.74k]
  |  |  ------------------
  ------------------
26757|  7.74k|        expr_ty annotated_rhs_var;
26758|  7.74k|        void *invalid_tstring_conversion_character_var;
26759|  7.74k|        if (
26760|  7.74k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26760:13): [True: 44, False: 7.69k]
  ------------------
26761|     44|            &&
26762|     44|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26762:13): [True: 44, False: 0]
  ------------------
26763|     44|            &&
26764|     44|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26764:13): [True: 44, False: 0]
  ------------------
26765|     44|            &&
26766|     44|            (invalid_tstring_conversion_character_var = invalid_tstring_conversion_character_rule(p))  // invalid_tstring_conversion_character
  ------------------
  |  Branch (26766:13): [True: 0, False: 44]
  ------------------
26767|  7.74k|        )
26768|      0|        {
26769|      0|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_tstring_conversion_character"));
26770|      0|            _res = _PyPegen_dummy_name(p, _literal, annotated_rhs_var, _opt_var, invalid_tstring_conversion_character_var);
26771|      0|            goto done;
26772|      0|        }
26773|  7.74k|        p->mark = _mark;
26774|  7.74k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26775|  7.74k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? invalid_tstring_conversion_character"));
26776|  7.74k|    }
26777|      0|    { // '{' annotated_rhs '='? ['!' NAME] !(':' | '}')
26778|  7.74k|        if (p->error_indicator) {
  ------------------
  |  Branch (26778:13): [True: 10, False: 7.73k]
  ------------------
26779|     10|            p->level--;
26780|     10|            return NULL;
26781|     10|        }
26782|  7.73k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26783|  7.73k|        Token * _literal;
26784|  7.73k|        void *_opt_var;
26785|  7.73k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  7.73k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.73k]
  |  |  ------------------
  ------------------
26786|  7.73k|        void *_opt_var_1;
26787|  7.73k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  7.73k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.73k]
  |  |  ------------------
  ------------------
26788|  7.73k|        expr_ty annotated_rhs_var;
26789|  7.73k|        if (
26790|  7.73k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26790:13): [True: 34, False: 7.69k]
  ------------------
26791|     34|            &&
26792|     34|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26792:13): [True: 34, False: 0]
  ------------------
26793|     34|            &&
26794|     34|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26794:13): [True: 34, False: 0]
  ------------------
26795|     34|            &&
26796|     34|            (_opt_var_1 = _tmp_152_rule(p), !p->error_indicator)  // ['!' NAME]
  ------------------
  |  Branch (26796:13): [True: 34, False: 0]
  ------------------
26797|     34|            &&
26798|     34|            _PyPegen_lookahead(0, _tmp_153_rule, p)
  ------------------
  |  Branch (26798:13): [True: 2, False: 32]
  ------------------
26799|  7.73k|        )
26800|      2|        {
26801|      2|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26802|      2|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting ':' or '}'" );
  ------------------
  |  |  235|      4|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26802:20): [True: 0, False: 2]
  ------------------
26803|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26803:18): [True: 2, False: 0]
  |  Branch (26803:34): [True: 0, False: 0]
  |  Branch (26803:57): [True: 2, False: 0]
  ------------------
26804|      2|                p->error_indicator = 1;
26805|      2|                p->level--;
26806|      2|                return NULL;
26807|      2|            }
26808|      0|            goto done;
26809|      2|        }
26810|  7.73k|        p->mark = _mark;
26811|  7.73k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26812|  7.73k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26813|  7.73k|    }
26814|      0|    { // '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'
26815|  7.73k|        if (p->error_indicator) {
  ------------------
  |  Branch (26815:13): [True: 0, False: 7.73k]
  ------------------
26816|      0|            p->level--;
26817|      0|            return NULL;
26818|      0|        }
26819|  7.73k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26820|  7.73k|        Token * _literal;
26821|  7.73k|        Token * _literal_1;
26822|  7.73k|        asdl_seq * _loop0_76_var;
26823|  7.73k|        void *_opt_var;
26824|  7.73k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  7.73k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.73k]
  |  |  ------------------
  ------------------
26825|  7.73k|        void *_opt_var_1;
26826|  7.73k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  7.73k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.73k]
  |  |  ------------------
  ------------------
26827|  7.73k|        expr_ty annotated_rhs_var;
26828|  7.73k|        if (
26829|  7.73k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26829:13): [True: 32, False: 7.69k]
  ------------------
26830|     32|            &&
26831|     32|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26831:13): [True: 32, False: 0]
  ------------------
26832|     32|            &&
26833|     32|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26833:13): [True: 32, False: 0]
  ------------------
26834|     32|            &&
26835|     32|            (_opt_var_1 = _tmp_152_rule(p), !p->error_indicator)  // ['!' NAME]
  ------------------
  |  Branch (26835:13): [True: 32, False: 0]
  ------------------
26836|     32|            &&
26837|     32|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (26837:13): [True: 32, False: 0]
  ------------------
26838|     32|            &&
26839|     32|            (_loop0_76_var = _loop0_76_rule(p))  // fstring_format_spec*
  ------------------
  |  Branch (26839:13): [True: 32, False: 0]
  ------------------
26840|     32|            &&
26841|     32|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
  ------------------
  |  Branch (26841:13): [True: 32, False: 0]
  ------------------
26842|  7.73k|        )
26843|     32|        {
26844|     32|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26845|     32|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '}', or format specs" );
  ------------------
  |  |  235|     59|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26845:20): [True: 5, False: 27]
  ------------------
26846|     32|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26846:18): [True: 32, False: 0]
  |  Branch (26846:34): [True: 0, False: 0]
  |  Branch (26846:57): [True: 32, False: 0]
  ------------------
26847|     32|                p->error_indicator = 1;
26848|     32|                p->level--;
26849|     32|                return NULL;
26850|     32|            }
26851|      0|            goto done;
26852|     32|        }
26853|  7.69k|        p->mark = _mark;
26854|  7.69k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26855|  7.69k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26856|  7.69k|    }
26857|      0|    { // '{' annotated_rhs '='? ['!' NAME] !'}'
26858|  7.69k|        if (p->error_indicator) {
  ------------------
  |  Branch (26858:13): [True: 0, False: 7.69k]
  ------------------
26859|      0|            p->level--;
26860|      0|            return NULL;
26861|      0|        }
26862|  7.69k|        D(fprintf(stderr, "%*c> invalid_tstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26863|  7.69k|        Token * _literal;
26864|  7.69k|        void *_opt_var;
26865|  7.69k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  7.69k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.69k]
  |  |  ------------------
  ------------------
26866|  7.69k|        void *_opt_var_1;
26867|  7.69k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  7.69k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.69k]
  |  |  ------------------
  ------------------
26868|  7.69k|        expr_ty annotated_rhs_var;
26869|  7.69k|        if (
26870|  7.69k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26870:13): [True: 0, False: 7.69k]
  ------------------
26871|      0|            &&
26872|      0|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26872:13): [True: 0, False: 0]
  ------------------
26873|      0|            &&
26874|      0|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26874:13): [True: 0, False: 0]
  ------------------
26875|      0|            &&
26876|      0|            (_opt_var_1 = _tmp_152_rule(p), !p->error_indicator)  // ['!' NAME]
  ------------------
  |  Branch (26876:13): [True: 0, False: 0]
  ------------------
26877|      0|            &&
26878|      0|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
  ------------------
  |  Branch (26878:13): [True: 0, False: 0]
  ------------------
26879|  7.69k|        )
26880|      0|        {
26881|      0|            D(fprintf(stderr, "%*c+ invalid_tstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26882|      0|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: expecting '}'" );
  ------------------
  |  |  235|      0|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26882:20): [True: 0, False: 0]
  ------------------
26883|      0|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26883:18): [True: 0, False: 0]
  |  Branch (26883:34): [True: 0, False: 0]
  |  Branch (26883:57): [True: 0, False: 0]
  ------------------
26884|      0|                p->error_indicator = 1;
26885|      0|                p->level--;
26886|      0|                return NULL;
26887|      0|            }
26888|      0|            goto done;
26889|      0|        }
26890|  7.69k|        p->mark = _mark;
26891|  7.69k|        D(fprintf(stderr, "%*c%s invalid_tstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26892|  7.69k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26893|  7.69k|    }
26894|  7.69k|    _res = NULL;
26895|  7.69k|  done:
26896|  7.69k|    p->level--;
26897|  7.69k|    return _res;
26898|  7.69k|}
parser.c:_tmp_150_rule:
36496|    173|{
36497|    173|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    346|#  define MAXSTACK 6000
  ------------------
  |  Branch (36497:9): [True: 0, False: 173]
  |  Branch (36497:35): [True: 0, False: 173]
  ------------------
36498|      0|        _Pypegen_stack_overflow(p);
36499|      0|    }
36500|    173|    if (p->error_indicator) {
  ------------------
  |  Branch (36500:9): [True: 0, False: 173]
  ------------------
36501|      0|        p->level--;
36502|      0|        return NULL;
36503|      0|    }
36504|    173|    void * _res = NULL;
36505|    173|    int _mark = p->mark;
36506|    173|    { // '='
36507|    173|        if (p->error_indicator) {
  ------------------
  |  Branch (36507:13): [True: 0, False: 173]
  ------------------
36508|      0|            p->level--;
36509|      0|            return NULL;
36510|      0|        }
36511|    173|        D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
36512|    173|        Token * _literal;
36513|    173|        if (
36514|    173|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (36514:13): [True: 38, False: 135]
  ------------------
36515|    173|        )
36516|     38|        {
36517|     38|            D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='"));
36518|     38|            _res = _literal;
36519|     38|            goto done;
36520|     38|        }
36521|    135|        p->mark = _mark;
36522|    135|        D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ',
36523|    135|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='"));
36524|    135|    }
36525|      0|    { // '!'
36526|    135|        if (p->error_indicator) {
  ------------------
  |  Branch (36526:13): [True: 0, False: 135]
  ------------------
36527|      0|            p->level--;
36528|      0|            return NULL;
36529|      0|        }
36530|    135|        D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'"));
36531|    135|        Token * _literal;
36532|    135|        if (
36533|    135|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (36533:13): [True: 33, False: 102]
  ------------------
36534|    135|        )
36535|     33|        {
36536|     33|            D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'"));
36537|     33|            _res = _literal;
36538|     33|            goto done;
36539|     33|        }
36540|    102|        p->mark = _mark;
36541|    102|        D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ',
36542|    102|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'"));
36543|    102|    }
36544|      0|    { // ':'
36545|    102|        if (p->error_indicator) {
  ------------------
  |  Branch (36545:13): [True: 0, False: 102]
  ------------------
36546|      0|            p->level--;
36547|      0|            return NULL;
36548|      0|        }
36549|    102|        D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36550|    102|        Token * _literal;
36551|    102|        if (
36552|    102|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (36552:13): [True: 46, False: 56]
  ------------------
36553|    102|        )
36554|     46|        {
36555|     46|            D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36556|     46|            _res = _literal;
36557|     46|            goto done;
36558|     46|        }
36559|     56|        p->mark = _mark;
36560|     56|        D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ',
36561|     56|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36562|     56|    }
36563|      0|    { // '}'
36564|     56|        if (p->error_indicator) {
  ------------------
  |  Branch (36564:13): [True: 0, False: 56]
  ------------------
36565|      0|            p->level--;
36566|      0|            return NULL;
36567|      0|        }
36568|     56|        D(fprintf(stderr, "%*c> _tmp_150[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36569|     56|        Token * _literal;
36570|     56|        if (
36571|     56|            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (36571:13): [True: 0, False: 56]
  ------------------
36572|     56|        )
36573|      0|        {
36574|      0|            D(fprintf(stderr, "%*c+ _tmp_150[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36575|      0|            _res = _literal;
36576|      0|            goto done;
36577|      0|        }
36578|     56|        p->mark = _mark;
36579|     56|        D(fprintf(stderr, "%*c%s _tmp_150[%d-%d]: %s failed!\n", p->level, ' ',
36580|     56|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36581|     56|    }
36582|     56|    _res = NULL;
36583|    173|  done:
36584|    173|    p->level--;
36585|    173|    return _res;
36586|     56|}
parser.c:_tmp_151_rule:
36591|     38|{
36592|     38|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|     76|#  define MAXSTACK 6000
  ------------------
  |  Branch (36592:9): [True: 0, False: 38]
  |  Branch (36592:35): [True: 0, False: 38]
  ------------------
36593|      0|        _Pypegen_stack_overflow(p);
36594|      0|    }
36595|     38|    if (p->error_indicator) {
  ------------------
  |  Branch (36595:9): [True: 0, False: 38]
  ------------------
36596|      0|        p->level--;
36597|      0|        return NULL;
36598|      0|    }
36599|     38|    void * _res = NULL;
36600|     38|    int _mark = p->mark;
36601|     38|    { // '!'
36602|     38|        if (p->error_indicator) {
  ------------------
  |  Branch (36602:13): [True: 0, False: 38]
  ------------------
36603|      0|            p->level--;
36604|      0|            return NULL;
36605|      0|        }
36606|     38|        D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!'"));
36607|     38|        Token * _literal;
36608|     38|        if (
36609|     38|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (36609:13): [True: 11, False: 27]
  ------------------
36610|     38|        )
36611|     11|        {
36612|     11|            D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!'"));
36613|     11|            _res = _literal;
36614|     11|            goto done;
36615|     11|        }
36616|     27|        p->mark = _mark;
36617|     27|        D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ',
36618|     27|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!'"));
36619|     27|    }
36620|      0|    { // ':'
36621|     27|        if (p->error_indicator) {
  ------------------
  |  Branch (36621:13): [True: 0, False: 27]
  ------------------
36622|      0|            p->level--;
36623|      0|            return NULL;
36624|      0|        }
36625|     27|        D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36626|     27|        Token * _literal;
36627|     27|        if (
36628|     27|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (36628:13): [True: 12, False: 15]
  ------------------
36629|     27|        )
36630|     12|        {
36631|     12|            D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36632|     12|            _res = _literal;
36633|     12|            goto done;
36634|     12|        }
36635|     15|        p->mark = _mark;
36636|     15|        D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ',
36637|     15|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36638|     15|    }
36639|      0|    { // '}'
36640|     15|        if (p->error_indicator) {
  ------------------
  |  Branch (36640:13): [True: 0, False: 15]
  ------------------
36641|      0|            p->level--;
36642|      0|            return NULL;
36643|      0|        }
36644|     15|        D(fprintf(stderr, "%*c> _tmp_151[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36645|     15|        Token * _literal;
36646|     15|        if (
36647|     15|            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (36647:13): [True: 0, False: 15]
  ------------------
36648|     15|        )
36649|      0|        {
36650|      0|            D(fprintf(stderr, "%*c+ _tmp_151[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36651|      0|            _res = _literal;
36652|      0|            goto done;
36653|      0|        }
36654|     15|        p->mark = _mark;
36655|     15|        D(fprintf(stderr, "%*c%s _tmp_151[%d-%d]: %s failed!\n", p->level, ' ',
36656|     15|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36657|     15|    }
36658|     15|    _res = NULL;
36659|     38|  done:
36660|     38|    p->level--;
36661|     38|    return _res;
36662|     15|}
parser.c:invalid_tstring_conversion_character_rule:
26903|     44|{
26904|     44|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|     88|#  define MAXSTACK 6000
  ------------------
  |  Branch (26904:9): [True: 0, False: 44]
  |  Branch (26904:35): [True: 0, False: 44]
  ------------------
26905|      0|        _Pypegen_stack_overflow(p);
26906|      0|    }
26907|     44|    if (p->error_indicator) {
  ------------------
  |  Branch (26907:9): [True: 0, False: 44]
  ------------------
26908|      0|        p->level--;
26909|      0|        return NULL;
26910|      0|    }
26911|     44|    void * _res = NULL;
26912|     44|    int _mark = p->mark;
26913|     44|    { // '!' &(':' | '}')
26914|     44|        if (p->error_indicator) {
  ------------------
  |  Branch (26914:13): [True: 0, False: 44]
  ------------------
26915|      0|            p->level--;
26916|      0|            return NULL;
26917|      0|        }
26918|     44|        D(fprintf(stderr, "%*c> invalid_tstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
26919|     44|        Token * _literal;
26920|     44|        if (
26921|     44|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (26921:13): [True: 14, False: 30]
  ------------------
26922|     14|            &&
26923|     14|            _PyPegen_lookahead(1, _tmp_153_rule, p)
  ------------------
  |  Branch (26923:13): [True: 6, False: 8]
  ------------------
26924|     44|        )
26925|      6|        {
26926|      6|            D(fprintf(stderr, "%*c+ invalid_tstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
26927|      6|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: missing conversion character" );
  ------------------
  |  |  235|      6|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
26928|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26928:18): [True: 6, False: 0]
  |  Branch (26928:34): [True: 0, False: 0]
  |  Branch (26928:57): [True: 6, False: 0]
  ------------------
26929|      6|                p->error_indicator = 1;
26930|      6|                p->level--;
26931|      6|                return NULL;
26932|      6|            }
26933|      0|            goto done;
26934|      6|        }
26935|     38|        p->mark = _mark;
26936|     38|        D(fprintf(stderr, "%*c%s invalid_tstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
26937|     38|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' &(':' | '}')"));
26938|     38|    }
26939|      0|    { // '!' !NAME
26940|     38|        if (p->error_indicator) {
  ------------------
  |  Branch (26940:13): [True: 0, False: 38]
  ------------------
26941|      0|            p->level--;
26942|      0|            return NULL;
26943|      0|        }
26944|     38|        D(fprintf(stderr, "%*c> invalid_tstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
26945|     38|        Token * _literal;
26946|     38|        if (
26947|     38|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (26947:13): [True: 8, False: 30]
  ------------------
26948|      8|            &&
26949|      8|            _PyPegen_lookahead_for_expr(0, _PyPegen_name_token, p)
  ------------------
  |  Branch (26949:13): [True: 4, False: 4]
  ------------------
26950|     38|        )
26951|      4|        {
26952|      4|            D(fprintf(stderr, "%*c+ invalid_tstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
26953|      4|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "t-string: invalid conversion character" );
  ------------------
  |  |  235|      4|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
26954|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26954:18): [True: 4, False: 0]
  |  Branch (26954:34): [True: 0, False: 0]
  |  Branch (26954:57): [True: 4, False: 0]
  ------------------
26955|      4|                p->error_indicator = 1;
26956|      4|                p->level--;
26957|      4|                return NULL;
26958|      4|            }
26959|      0|            goto done;
26960|      4|        }
26961|     34|        p->mark = _mark;
26962|     34|        D(fprintf(stderr, "%*c%s invalid_tstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
26963|     34|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' !NAME"));
26964|     34|    }
26965|     34|    _res = NULL;
26966|     34|  done:
26967|     34|    p->level--;
26968|     34|    return _res;
26969|     34|}
parser.c:_tmp_152_rule:
36667|    129|{
36668|    129|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    258|#  define MAXSTACK 6000
  ------------------
  |  Branch (36668:9): [True: 0, False: 129]
  |  Branch (36668:35): [True: 0, False: 129]
  ------------------
36669|      0|        _Pypegen_stack_overflow(p);
36670|      0|    }
36671|    129|    if (p->error_indicator) {
  ------------------
  |  Branch (36671:9): [True: 0, False: 129]
  ------------------
36672|      0|        p->level--;
36673|      0|        return NULL;
36674|      0|    }
36675|    129|    void * _res = NULL;
36676|    129|    int _mark = p->mark;
36677|    129|    { // '!' NAME
36678|    129|        if (p->error_indicator) {
  ------------------
  |  Branch (36678:13): [True: 0, False: 129]
  ------------------
36679|      0|            p->level--;
36680|      0|            return NULL;
36681|      0|        }
36682|    129|        D(fprintf(stderr, "%*c> _tmp_152[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' NAME"));
36683|    129|        Token * _literal;
36684|    129|        expr_ty name_var;
36685|    129|        if (
36686|    129|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (36686:13): [True: 13, False: 116]
  ------------------
36687|     13|            &&
36688|     13|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (36688:13): [True: 13, False: 0]
  ------------------
36689|    129|        )
36690|     13|        {
36691|     13|            D(fprintf(stderr, "%*c+ _tmp_152[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' NAME"));
36692|     13|            _res = _PyPegen_dummy_name(p, _literal, name_var);
36693|     13|            goto done;
36694|     13|        }
36695|    116|        p->mark = _mark;
36696|    116|        D(fprintf(stderr, "%*c%s _tmp_152[%d-%d]: %s failed!\n", p->level, ' ',
36697|    116|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' NAME"));
36698|    116|    }
36699|    116|    _res = NULL;
36700|    129|  done:
36701|    129|    p->level--;
36702|    129|    return _res;
36703|    116|}
parser.c:_tmp_153_rule:
36708|    112|{
36709|    112|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    224|#  define MAXSTACK 6000
  ------------------
  |  Branch (36709:9): [True: 0, False: 112]
  |  Branch (36709:35): [True: 0, False: 112]
  ------------------
36710|      0|        _Pypegen_stack_overflow(p);
36711|      0|    }
36712|    112|    if (p->error_indicator) {
  ------------------
  |  Branch (36712:9): [True: 0, False: 112]
  ------------------
36713|      0|        p->level--;
36714|      0|        return NULL;
36715|      0|    }
36716|    112|    void * _res = NULL;
36717|    112|    int _mark = p->mark;
36718|    112|    { // ':'
36719|    112|        if (p->error_indicator) {
  ------------------
  |  Branch (36719:13): [True: 0, False: 112]
  ------------------
36720|      0|            p->level--;
36721|      0|            return NULL;
36722|      0|        }
36723|    112|        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36724|    112|        Token * _literal;
36725|    112|        if (
36726|    112|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (36726:13): [True: 67, False: 45]
  ------------------
36727|    112|        )
36728|     67|        {
36729|     67|            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36730|     67|            _res = _literal;
36731|     67|            goto done;
36732|     67|        }
36733|     45|        p->mark = _mark;
36734|     45|        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
36735|     45|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36736|     45|    }
36737|      0|    { // '}'
36738|     45|        if (p->error_indicator) {
  ------------------
  |  Branch (36738:13): [True: 0, False: 45]
  ------------------
36739|      0|            p->level--;
36740|      0|            return NULL;
36741|      0|        }
36742|     45|        D(fprintf(stderr, "%*c> _tmp_153[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36743|     45|        Token * _literal;
36744|     45|        if (
36745|     45|            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (36745:13): [True: 7, False: 38]
  ------------------
36746|     45|        )
36747|      7|        {
36748|      7|            D(fprintf(stderr, "%*c+ _tmp_153[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36749|      7|            _res = _literal;
36750|      7|            goto done;
36751|      7|        }
36752|     38|        p->mark = _mark;
36753|     38|        D(fprintf(stderr, "%*c%s _tmp_153[%d-%d]: %s failed!\n", p->level, ' ',
36754|     38|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36755|     38|    }
36756|     38|    _res = NULL;
36757|    112|  done:
36758|    112|    p->level--;
36759|    112|    return _res;
36760|     38|}
parser.c:_loop0_76_rule:
32093|  9.40k|{
32094|  9.40k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32094:9): [True: 0, False: 9.40k]
  |  Branch (32094:35): [True: 0, False: 9.40k]
  ------------------
32095|      0|        _Pypegen_stack_overflow(p);
32096|      0|    }
32097|  9.40k|    if (p->error_indicator) {
  ------------------
  |  Branch (32097:9): [True: 0, False: 9.40k]
  ------------------
32098|      0|        p->level--;
32099|      0|        return NULL;
32100|      0|    }
32101|  9.40k|    void *_res = NULL;
32102|  9.40k|    int _mark = p->mark;
32103|  9.40k|    void **_children = PyMem_Malloc(sizeof(void *));
32104|  9.40k|    if (!_children) {
  ------------------
  |  Branch (32104:9): [True: 0, False: 9.40k]
  ------------------
32105|      0|        p->error_indicator = 1;
32106|      0|        PyErr_NoMemory();
32107|      0|        p->level--;
32108|      0|        return NULL;
32109|      0|    }
32110|  9.40k|    Py_ssize_t _children_capacity = 1;
32111|  9.40k|    Py_ssize_t _n = 0;
32112|  9.40k|    { // fstring_format_spec
32113|  9.40k|        if (p->error_indicator) {
  ------------------
  |  Branch (32113:13): [True: 0, False: 9.40k]
  ------------------
32114|      0|            p->level--;
32115|      0|            return NULL;
32116|      0|        }
32117|  9.40k|        D(fprintf(stderr, "%*c> _loop0_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_format_spec"));
32118|  9.40k|        expr_ty fstring_format_spec_var;
32119|  9.40k|        while (
32120|  30.0k|            (fstring_format_spec_var = fstring_format_spec_rule(p))  // fstring_format_spec
  ------------------
  |  Branch (32120:13): [True: 20.6k, False: 9.40k]
  ------------------
32121|  9.40k|        )
32122|  20.6k|        {
32123|  20.6k|            _res = fstring_format_spec_var;
32124|  20.6k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32124:17): [True: 10.0k, False: 10.5k]
  ------------------
32125|  10.0k|                _children_capacity *= 2;
32126|  10.0k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32127|  10.0k|                if (!_new_children) {
  ------------------
  |  Branch (32127:21): [True: 0, False: 10.0k]
  ------------------
32128|      0|                    PyMem_Free(_children);
32129|      0|                    p->error_indicator = 1;
32130|      0|                    PyErr_NoMemory();
32131|      0|                    p->level--;
32132|      0|                    return NULL;
32133|      0|                }
32134|  10.0k|                _children = _new_children;
32135|  10.0k|            }
32136|  20.6k|            _children[_n++] = _res;
32137|  20.6k|            _mark = p->mark;
32138|  20.6k|        }
32139|  9.40k|        p->mark = _mark;
32140|  9.40k|        D(fprintf(stderr, "%*c%s _loop0_76[%d-%d]: %s failed!\n", p->level, ' ',
32141|  9.40k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_format_spec"));
32142|  9.40k|    }
32143|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32144|  9.40k|    if (!_seq) {
  ------------------
  |  Branch (32144:9): [True: 0, False: 9.40k]
  ------------------
32145|      0|        PyMem_Free(_children);
32146|      0|        p->error_indicator = 1;
32147|      0|        PyErr_NoMemory();
32148|      0|        p->level--;
32149|      0|        return NULL;
32150|      0|    }
32151|  30.0k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  20.6k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  30.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32151:28): [True: 20.6k, False: 9.40k]
  ------------------
32152|  9.40k|    PyMem_Free(_children);
32153|  9.40k|    p->level--;
32154|  9.40k|    return _seq;
32155|  9.40k|}
parser.c:fstring_format_spec_rule:
16455|  30.0k|{
16456|  30.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  60.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16456:9): [True: 0, False: 30.0k]
  |  Branch (16456:35): [True: 0, False: 30.0k]
  ------------------
16457|      0|        _Pypegen_stack_overflow(p);
16458|      0|    }
16459|  30.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (16459:9): [True: 0, False: 30.0k]
  ------------------
16460|      0|        p->level--;
16461|      0|        return NULL;
16462|      0|    }
16463|  30.0k|    expr_ty _res = NULL;
16464|  30.0k|    int _mark = p->mark;
16465|  30.0k|    { // FSTRING_MIDDLE
16466|  30.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (16466:13): [True: 0, False: 30.0k]
  ------------------
16467|      0|            p->level--;
16468|      0|            return NULL;
16469|      0|        }
16470|  30.0k|        D(fprintf(stderr, "%*c> fstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16471|  30.0k|        Token * t;
16472|  30.0k|        if (
16473|  30.0k|            (t = _PyPegen_expect_token(p, FSTRING_MIDDLE))  // token='FSTRING_MIDDLE'
  ------------------
  |  |   76|  30.0k|#define FSTRING_MIDDLE  60
  ------------------
  |  Branch (16473:13): [True: 14.5k, False: 15.4k]
  ------------------
16474|  30.0k|        )
16475|  14.5k|        {
16476|  14.5k|            D(fprintf(stderr, "%*c+ fstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16477|  14.5k|            _res = _PyPegen_decoded_constant_from_token ( p , t );
16478|  14.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16478:18): [True: 4, False: 14.5k]
  |  Branch (16478:34): [True: 0, False: 14.5k]
  |  Branch (16478:57): [True: 4, False: 0]
  ------------------
16479|      4|                p->error_indicator = 1;
16480|      4|                p->level--;
16481|      4|                return NULL;
16482|      4|            }
16483|  14.5k|            goto done;
16484|  14.5k|        }
16485|  15.4k|        p->mark = _mark;
16486|  15.4k|        D(fprintf(stderr, "%*c%s fstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16487|  15.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_MIDDLE"));
16488|  15.4k|    }
16489|      0|    { // fstring_replacement_field
16490|  15.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (16490:13): [True: 19, False: 15.4k]
  ------------------
16491|     19|            p->level--;
16492|     19|            return NULL;
16493|     19|        }
16494|  15.4k|        D(fprintf(stderr, "%*c> fstring_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16495|  15.4k|        expr_ty fstring_replacement_field_var;
16496|  15.4k|        if (
16497|  15.4k|            (fstring_replacement_field_var = fstring_replacement_field_rule(p))  // fstring_replacement_field
  ------------------
  |  Branch (16497:13): [True: 6.09k, False: 9.38k]
  ------------------
16498|  15.4k|        )
16499|  6.09k|        {
16500|  6.09k|            D(fprintf(stderr, "%*c+ fstring_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16501|  6.09k|            _res = fstring_replacement_field_var;
16502|  6.09k|            goto done;
16503|  6.09k|        }
16504|  9.38k|        p->mark = _mark;
16505|  9.38k|        D(fprintf(stderr, "%*c%s fstring_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16506|  9.38k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_replacement_field"));
16507|  9.38k|    }
16508|  9.38k|    _res = NULL;
16509|  30.0k|  done:
16510|  30.0k|    p->level--;
16511|  30.0k|    return _res;
16512|  9.38k|}
parser.c:fstring_replacement_field_rule:
16250|   100k|{
16251|   100k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   200k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16251:9): [True: 0, False: 100k]
  |  Branch (16251:35): [True: 0, False: 100k]
  ------------------
16252|      0|        _Pypegen_stack_overflow(p);
16253|      0|    }
16254|   100k|    if (p->error_indicator) {
  ------------------
  |  Branch (16254:9): [True: 0, False: 100k]
  ------------------
16255|      0|        p->level--;
16256|      0|        return NULL;
16257|      0|    }
16258|   100k|    expr_ty _res = NULL;
16259|   100k|    int _mark = p->mark;
16260|   100k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (16260:9): [True: 55.1k, False: 44.9k]
  |  Branch (16260:31): [True: 63, False: 55.0k]
  ------------------
16261|     63|        p->error_indicator = 1;
16262|     63|        p->level--;
16263|     63|        return NULL;
16264|     63|    }
16265|  99.9k|    int _start_lineno = p->tokens[_mark]->lineno;
16266|  99.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  99.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 99.9k]
  |  |  ------------------
  ------------------
16267|  99.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
16268|  99.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  99.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 99.9k]
  |  |  ------------------
  ------------------
16269|  99.9k|    { // '{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'
16270|  99.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (16270:13): [True: 0, False: 99.9k]
  ------------------
16271|      0|            p->level--;
16272|      0|            return NULL;
16273|      0|        }
16274|  99.9k|        D(fprintf(stderr, "%*c> fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'"));
16275|  99.9k|        Token * _literal;
16276|  99.9k|        expr_ty a;
16277|  99.9k|        void *conversion;
16278|  99.9k|        void *debug_expr;
16279|  99.9k|        void *format;
16280|  99.9k|        Token * rbrace;
16281|  99.9k|        if (
16282|  99.9k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (16282:13): [True: 19.4k, False: 80.5k]
  ------------------
16283|  19.4k|            &&
16284|  19.4k|            (a = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (16284:13): [True: 17.4k, False: 2.00k]
  ------------------
16285|  17.4k|            &&
16286|  17.4k|            (debug_expr = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (16286:13): [True: 17.4k, False: 0]
  ------------------
16287|  17.4k|            &&
16288|  17.4k|            (conversion = fstring_conversion_rule(p), !p->error_indicator)  // fstring_conversion?
  ------------------
  |  Branch (16288:13): [True: 17.4k, False: 21]
  ------------------
16289|  17.4k|            &&
16290|  17.4k|            (format = fstring_full_format_spec_rule(p), !p->error_indicator)  // fstring_full_format_spec?
  ------------------
  |  Branch (16290:13): [True: 17.0k, False: 363]
  ------------------
16291|  17.0k|            &&
16292|  17.0k|            (rbrace = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (16292:13): [True: 16.4k, False: 573]
  ------------------
16293|  99.9k|        )
16294|  16.4k|        {
16295|  16.4k|            D(fprintf(stderr, "%*c+ fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'"));
16296|  16.4k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16297|  16.4k|            if (_token == NULL) {
  ------------------
  |  Branch (16297:17): [True: 0, False: 16.4k]
  ------------------
16298|      0|                p->level--;
16299|      0|                return NULL;
16300|      0|            }
16301|  16.4k|            int _end_lineno = _token->end_lineno;
16302|  16.4k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.4k]
  |  |  ------------------
  ------------------
16303|  16.4k|            int _end_col_offset = _token->end_col_offset;
16304|  16.4k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.4k]
  |  |  ------------------
  ------------------
16305|  16.4k|            _res = _PyPegen_formatted_value ( p , a , debug_expr , conversion , format , rbrace , EXTRA );
  ------------------
  |  |  307|  16.4k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
16306|  16.4k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16306:18): [True: 0, False: 16.4k]
  |  Branch (16306:34): [True: 0, False: 16.4k]
  |  Branch (16306:57): [True: 0, False: 0]
  ------------------
16307|      0|                p->error_indicator = 1;
16308|      0|                p->level--;
16309|      0|                return NULL;
16310|      0|            }
16311|  16.4k|            goto done;
16312|  16.4k|        }
16313|  83.4k|        p->mark = _mark;
16314|  83.4k|        D(fprintf(stderr, "%*c%s fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16315|  83.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? fstring_conversion? fstring_full_format_spec? '}'"));
16316|  83.4k|    }
16317|  83.4k|    if (p->call_invalid_rules) { // invalid_fstring_replacement_field
  ------------------
  |  Branch (16317:9): [True: 31.2k, False: 52.1k]
  ------------------
16318|  31.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (16318:13): [True: 1.85k, False: 29.4k]
  ------------------
16319|  1.85k|            p->level--;
16320|  1.85k|            return NULL;
16321|  1.85k|        }
16322|  29.4k|        D(fprintf(stderr, "%*c> fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_fstring_replacement_field"));
16323|  29.4k|        void *invalid_fstring_replacement_field_var;
16324|  29.4k|        if (
16325|  29.4k|            (invalid_fstring_replacement_field_var = invalid_fstring_replacement_field_rule(p))  // invalid_fstring_replacement_field
  ------------------
  |  Branch (16325:13): [True: 0, False: 29.4k]
  ------------------
16326|  29.4k|        )
16327|      0|        {
16328|      0|            D(fprintf(stderr, "%*c+ fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_fstring_replacement_field"));
16329|      0|            _res = invalid_fstring_replacement_field_var;
16330|      0|            goto done;
16331|      0|        }
16332|  29.4k|        p->mark = _mark;
16333|  29.4k|        D(fprintf(stderr, "%*c%s fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
16334|  29.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_fstring_replacement_field"));
16335|  29.4k|    }
16336|  81.6k|    _res = NULL;
16337|  98.1k|  done:
16338|  98.1k|    p->level--;
16339|  98.1k|    return _res;
16340|  81.6k|}
parser.c:fstring_full_format_spec_rule:
16391|  17.4k|{
16392|  17.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16392:9): [True: 0, False: 17.4k]
  |  Branch (16392:35): [True: 0, False: 17.4k]
  ------------------
16393|      0|        _Pypegen_stack_overflow(p);
16394|      0|    }
16395|  17.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (16395:9): [True: 0, False: 17.4k]
  ------------------
16396|      0|        p->level--;
16397|      0|        return NULL;
16398|      0|    }
16399|  17.4k|    ResultTokenWithMetadata* _res = NULL;
16400|  17.4k|    int _mark = p->mark;
16401|  17.4k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (16401:9): [True: 3.41k, False: 14.0k]
  |  Branch (16401:31): [True: 2, False: 3.41k]
  ------------------
16402|      2|        p->error_indicator = 1;
16403|      2|        p->level--;
16404|      2|        return NULL;
16405|      2|    }
16406|  17.4k|    int _start_lineno = p->tokens[_mark]->lineno;
16407|  17.4k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
16408|  17.4k|    int _start_col_offset = p->tokens[_mark]->col_offset;
16409|  17.4k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
16410|  17.4k|    { // ':' fstring_format_spec*
16411|  17.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (16411:13): [True: 0, False: 17.4k]
  ------------------
16412|      0|            p->level--;
16413|      0|            return NULL;
16414|      0|        }
16415|  17.4k|        D(fprintf(stderr, "%*c> fstring_full_format_spec[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' fstring_format_spec*"));
16416|  17.4k|        Token * colon;
16417|  17.4k|        asdl_seq * spec;
16418|  17.4k|        if (
16419|  17.4k|            (colon = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (16419:13): [True: 9.34k, False: 8.08k]
  ------------------
16420|  9.34k|            &&
16421|  9.34k|            (spec = _loop0_76_rule(p))  // fstring_format_spec*
  ------------------
  |  Branch (16421:13): [True: 9.34k, False: 0]
  ------------------
16422|  17.4k|        )
16423|  9.34k|        {
16424|  9.34k|            D(fprintf(stderr, "%*c+ fstring_full_format_spec[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' fstring_format_spec*"));
16425|  9.34k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16426|  9.34k|            if (_token == NULL) {
  ------------------
  |  Branch (16426:17): [True: 0, False: 9.34k]
  ------------------
16427|      0|                p->level--;
16428|      0|                return NULL;
16429|      0|            }
16430|  9.34k|            int _end_lineno = _token->end_lineno;
16431|  9.34k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  9.34k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.34k]
  |  |  ------------------
  ------------------
16432|  9.34k|            int _end_col_offset = _token->end_col_offset;
16433|  9.34k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  9.34k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.34k]
  |  |  ------------------
  ------------------
16434|  9.34k|            _res = _PyPegen_setup_full_format_spec ( p , colon , ( asdl_expr_seq* ) spec , EXTRA );
  ------------------
  |  |  307|  9.34k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
16435|  9.34k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16435:18): [True: 0, False: 9.34k]
  |  Branch (16435:34): [True: 361, False: 8.98k]
  |  Branch (16435:57): [True: 361, False: 0]
  ------------------
16436|    361|                p->error_indicator = 1;
16437|    361|                p->level--;
16438|    361|                return NULL;
16439|    361|            }
16440|  8.98k|            goto done;
16441|  9.34k|        }
16442|  8.08k|        p->mark = _mark;
16443|  8.08k|        D(fprintf(stderr, "%*c%s fstring_full_format_spec[%d-%d]: %s failed!\n", p->level, ' ',
16444|  8.08k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' fstring_format_spec*"));
16445|  8.08k|    }
16446|  8.08k|    _res = NULL;
16447|  17.0k|  done:
16448|  17.0k|    p->level--;
16449|  17.0k|    return _res;
16450|  8.08k|}
parser.c:invalid_fstring_replacement_field_rule:
26101|  29.4k|{
26102|  29.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  58.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (26102:9): [True: 0, False: 29.4k]
  |  Branch (26102:35): [True: 0, False: 29.4k]
  ------------------
26103|      0|        _Pypegen_stack_overflow(p);
26104|      0|    }
26105|  29.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (26105:9): [True: 0, False: 29.4k]
  ------------------
26106|      0|        p->level--;
26107|      0|        return NULL;
26108|      0|    }
26109|  29.4k|    void * _res = NULL;
26110|  29.4k|    int _mark = p->mark;
26111|  29.4k|    { // '{' '='
26112|  29.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (26112:13): [True: 0, False: 29.4k]
  ------------------
26113|      0|            p->level--;
26114|      0|            return NULL;
26115|      0|        }
26116|  29.4k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26117|  29.4k|        Token * _literal;
26118|  29.4k|        Token * a;
26119|  29.4k|        if (
26120|  29.4k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26120:13): [True: 118, False: 29.3k]
  ------------------
26121|    118|            &&
26122|    118|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (26122:13): [True: 3, False: 115]
  ------------------
26123|  29.4k|        )
26124|      3|        {
26125|      3|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '='"));
26126|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before '='" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26127|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26127:18): [True: 3, False: 0]
  |  Branch (26127:34): [True: 0, False: 0]
  |  Branch (26127:57): [True: 3, False: 0]
  ------------------
26128|      3|                p->error_indicator = 1;
26129|      3|                p->level--;
26130|      3|                return NULL;
26131|      3|            }
26132|      0|            goto done;
26133|      3|        }
26134|  29.4k|        p->mark = _mark;
26135|  29.4k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26136|  29.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '='"));
26137|  29.4k|    }
26138|      0|    { // '{' '!'
26139|  29.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (26139:13): [True: 0, False: 29.4k]
  ------------------
26140|      0|            p->level--;
26141|      0|            return NULL;
26142|      0|        }
26143|  29.4k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26144|  29.4k|        Token * _literal;
26145|  29.4k|        Token * a;
26146|  29.4k|        if (
26147|  29.4k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26147:13): [True: 115, False: 29.3k]
  ------------------
26148|    115|            &&
26149|    115|            (a = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (26149:13): [True: 3, False: 112]
  ------------------
26150|  29.4k|        )
26151|      3|        {
26152|      3|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '!'"));
26153|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before '!'" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26154|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26154:18): [True: 3, False: 0]
  |  Branch (26154:34): [True: 0, False: 0]
  |  Branch (26154:57): [True: 3, False: 0]
  ------------------
26155|      3|                p->error_indicator = 1;
26156|      3|                p->level--;
26157|      3|                return NULL;
26158|      3|            }
26159|      0|            goto done;
26160|      3|        }
26161|  29.4k|        p->mark = _mark;
26162|  29.4k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26163|  29.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '!'"));
26164|  29.4k|    }
26165|      0|    { // '{' ':'
26166|  29.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (26166:13): [True: 0, False: 29.4k]
  ------------------
26167|      0|            p->level--;
26168|      0|            return NULL;
26169|      0|        }
26170|  29.4k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26171|  29.4k|        Token * _literal;
26172|  29.4k|        Token * a;
26173|  29.4k|        if (
26174|  29.4k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26174:13): [True: 112, False: 29.3k]
  ------------------
26175|    112|            &&
26176|    112|            (a = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (26176:13): [True: 7, False: 105]
  ------------------
26177|  29.4k|        )
26178|      7|        {
26179|      7|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' ':'"));
26180|      7|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before ':'" );
  ------------------
  |  |  239|      7|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26181|      7|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26181:18): [True: 7, False: 0]
  |  Branch (26181:34): [True: 0, False: 0]
  |  Branch (26181:57): [True: 7, False: 0]
  ------------------
26182|      7|                p->error_indicator = 1;
26183|      7|                p->level--;
26184|      7|                return NULL;
26185|      7|            }
26186|      0|            goto done;
26187|      7|        }
26188|  29.4k|        p->mark = _mark;
26189|  29.4k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26190|  29.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' ':'"));
26191|  29.4k|    }
26192|      0|    { // '{' '}'
26193|  29.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (26193:13): [True: 0, False: 29.4k]
  ------------------
26194|      0|            p->level--;
26195|      0|            return NULL;
26196|      0|        }
26197|  29.4k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26198|  29.4k|        Token * _literal;
26199|  29.4k|        Token * a;
26200|  29.4k|        if (
26201|  29.4k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26201:13): [True: 105, False: 29.3k]
  ------------------
26202|    105|            &&
26203|    105|            (a = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (26203:13): [True: 1, False: 104]
  ------------------
26204|  29.4k|        )
26205|      1|        {
26206|      1|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
26207|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "f-string: valid expression required before '}'" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26208|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26208:18): [True: 1, False: 0]
  |  Branch (26208:34): [True: 0, False: 0]
  |  Branch (26208:57): [True: 1, False: 0]
  ------------------
26209|      1|                p->error_indicator = 1;
26210|      1|                p->level--;
26211|      1|                return NULL;
26212|      1|            }
26213|      0|            goto done;
26214|      1|        }
26215|  29.4k|        p->mark = _mark;
26216|  29.4k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26217|  29.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'"));
26218|  29.4k|    }
26219|      0|    { // '{' !annotated_rhs
26220|  29.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (26220:13): [True: 0, False: 29.4k]
  ------------------
26221|      0|            p->level--;
26222|      0|            return NULL;
26223|      0|        }
26224|  29.4k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26225|  29.4k|        Token * _literal;
26226|  29.4k|        if (
26227|  29.4k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26227:13): [True: 104, False: 29.3k]
  ------------------
26228|    104|            &&
26229|    104|            _PyPegen_lookahead_for_expr(0, annotated_rhs_rule, p)
  ------------------
  |  Branch (26229:13): [True: 13, False: 91]
  ------------------
26230|  29.4k|        )
26231|     13|        {
26232|     13|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' !annotated_rhs"));
26233|     13|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting a valid expression after '{'" );
  ------------------
  |  |  235|     13|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
26234|     13|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26234:18): [True: 13, False: 0]
  |  Branch (26234:34): [True: 0, False: 0]
  |  Branch (26234:57): [True: 13, False: 0]
  ------------------
26235|     13|                p->error_indicator = 1;
26236|     13|                p->level--;
26237|     13|                return NULL;
26238|     13|            }
26239|      0|            goto done;
26240|     13|        }
26241|  29.4k|        p->mark = _mark;
26242|  29.4k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26243|  29.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' !annotated_rhs"));
26244|  29.4k|    }
26245|      0|    { // '{' annotated_rhs !('=' | '!' | ':' | '}')
26246|  29.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (26246:13): [True: 0, False: 29.4k]
  ------------------
26247|      0|            p->level--;
26248|      0|            return NULL;
26249|      0|        }
26250|  29.4k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26251|  29.4k|        Token * _literal;
26252|  29.4k|        expr_ty annotated_rhs_var;
26253|  29.4k|        if (
26254|  29.4k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26254:13): [True: 91, False: 29.3k]
  ------------------
26255|     91|            &&
26256|     91|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26256:13): [True: 91, False: 0]
  ------------------
26257|     91|            &&
26258|     91|            _PyPegen_lookahead(0, _tmp_150_rule, p)
  ------------------
  |  Branch (26258:13): [True: 25, False: 66]
  ------------------
26259|  29.4k|        )
26260|     25|        {
26261|     25|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26262|     25|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '=', or '!', or ':', or '}'" );
  ------------------
  |  |  235|     50|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26262:20): [True: 0, False: 25]
  ------------------
26263|     25|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26263:18): [True: 25, False: 0]
  |  Branch (26263:34): [True: 0, False: 0]
  |  Branch (26263:57): [True: 25, False: 0]
  ------------------
26264|     25|                p->error_indicator = 1;
26265|     25|                p->level--;
26266|     25|                return NULL;
26267|     25|            }
26268|      0|            goto done;
26269|     25|        }
26270|  29.3k|        p->mark = _mark;
26271|  29.3k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26272|  29.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs !('=' | '!' | ':' | '}')"));
26273|  29.3k|    }
26274|      0|    { // '{' annotated_rhs '=' !('!' | ':' | '}')
26275|  29.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (26275:13): [True: 0, False: 29.3k]
  ------------------
26276|      0|            p->level--;
26277|      0|            return NULL;
26278|      0|        }
26279|  29.3k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26280|  29.3k|        Token * _literal;
26281|  29.3k|        Token * _literal_1;
26282|  29.3k|        expr_ty annotated_rhs_var;
26283|  29.3k|        if (
26284|  29.3k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26284:13): [True: 66, False: 29.3k]
  ------------------
26285|     66|            &&
26286|     66|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26286:13): [True: 66, False: 0]
  ------------------
26287|     66|            &&
26288|     66|            (_literal_1 = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (26288:13): [True: 19, False: 47]
  ------------------
26289|     19|            &&
26290|     19|            _PyPegen_lookahead(0, _tmp_151_rule, p)
  ------------------
  |  Branch (26290:13): [True: 8, False: 11]
  ------------------
26291|  29.3k|        )
26292|      8|        {
26293|      8|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26294|      8|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '!', or ':', or '}'" );
  ------------------
  |  |  235|     16|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26294:20): [True: 0, False: 8]
  ------------------
26295|      8|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26295:18): [True: 8, False: 0]
  |  Branch (26295:34): [True: 0, False: 0]
  |  Branch (26295:57): [True: 8, False: 0]
  ------------------
26296|      8|                p->error_indicator = 1;
26297|      8|                p->level--;
26298|      8|                return NULL;
26299|      8|            }
26300|      0|            goto done;
26301|      8|        }
26302|  29.3k|        p->mark = _mark;
26303|  29.3k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26304|  29.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '=' !('!' | ':' | '}')"));
26305|  29.3k|    }
26306|      0|    { // '{' annotated_rhs '='? invalid_fstring_conversion_character
26307|  29.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (26307:13): [True: 0, False: 29.3k]
  ------------------
26308|      0|            p->level--;
26309|      0|            return NULL;
26310|      0|        }
26311|  29.3k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_fstring_conversion_character"));
26312|  29.3k|        Token * _literal;
26313|  29.3k|        void *_opt_var;
26314|  29.3k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26315|  29.3k|        expr_ty annotated_rhs_var;
26316|  29.3k|        void *invalid_fstring_conversion_character_var;
26317|  29.3k|        if (
26318|  29.3k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26318:13): [True: 58, False: 29.3k]
  ------------------
26319|     58|            &&
26320|     58|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26320:13): [True: 58, False: 0]
  ------------------
26321|     58|            &&
26322|     58|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26322:13): [True: 58, False: 0]
  ------------------
26323|     58|            &&
26324|     58|            (invalid_fstring_conversion_character_var = invalid_fstring_conversion_character_rule(p))  // invalid_fstring_conversion_character
  ------------------
  |  Branch (26324:13): [True: 0, False: 58]
  ------------------
26325|  29.3k|        )
26326|      0|        {
26327|      0|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? invalid_fstring_conversion_character"));
26328|      0|            _res = _PyPegen_dummy_name(p, _literal, annotated_rhs_var, _opt_var, invalid_fstring_conversion_character_var);
26329|      0|            goto done;
26330|      0|        }
26331|  29.3k|        p->mark = _mark;
26332|  29.3k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26333|  29.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? invalid_fstring_conversion_character"));
26334|  29.3k|    }
26335|      0|    { // '{' annotated_rhs '='? ['!' NAME] !(':' | '}')
26336|  29.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (26336:13): [True: 24, False: 29.3k]
  ------------------
26337|     24|            p->level--;
26338|     24|            return NULL;
26339|     24|        }
26340|  29.3k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26341|  29.3k|        Token * _literal;
26342|  29.3k|        void *_opt_var;
26343|  29.3k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26344|  29.3k|        void *_opt_var_1;
26345|  29.3k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26346|  29.3k|        expr_ty annotated_rhs_var;
26347|  29.3k|        if (
26348|  29.3k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26348:13): [True: 34, False: 29.3k]
  ------------------
26349|     34|            &&
26350|     34|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26350:13): [True: 34, False: 0]
  ------------------
26351|     34|            &&
26352|     34|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26352:13): [True: 34, False: 0]
  ------------------
26353|     34|            &&
26354|     34|            (_opt_var_1 = _tmp_152_rule(p), !p->error_indicator)  // ['!' NAME]
  ------------------
  |  Branch (26354:13): [True: 34, False: 0]
  ------------------
26355|     34|            &&
26356|     34|            _PyPegen_lookahead(0, _tmp_153_rule, p)
  ------------------
  |  Branch (26356:13): [True: 5, False: 29]
  ------------------
26357|  29.3k|        )
26358|      5|        {
26359|      5|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26360|      5|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting ':' or '}'" );
  ------------------
  |  |  235|     10|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26360:20): [True: 0, False: 5]
  ------------------
26361|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26361:18): [True: 5, False: 0]
  |  Branch (26361:34): [True: 0, False: 0]
  |  Branch (26361:57): [True: 5, False: 0]
  ------------------
26362|      5|                p->error_indicator = 1;
26363|      5|                p->level--;
26364|      5|                return NULL;
26365|      5|            }
26366|      0|            goto done;
26367|      5|        }
26368|  29.3k|        p->mark = _mark;
26369|  29.3k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26370|  29.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !(':' | '}')"));
26371|  29.3k|    }
26372|      0|    { // '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'
26373|  29.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (26373:13): [True: 0, False: 29.3k]
  ------------------
26374|      0|            p->level--;
26375|      0|            return NULL;
26376|      0|        }
26377|  29.3k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26378|  29.3k|        Token * _literal;
26379|  29.3k|        Token * _literal_1;
26380|  29.3k|        asdl_seq * _loop0_76_var;
26381|  29.3k|        void *_opt_var;
26382|  29.3k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26383|  29.3k|        void *_opt_var_1;
26384|  29.3k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26385|  29.3k|        expr_ty annotated_rhs_var;
26386|  29.3k|        if (
26387|  29.3k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26387:13): [True: 29, False: 29.3k]
  ------------------
26388|     29|            &&
26389|     29|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26389:13): [True: 29, False: 0]
  ------------------
26390|     29|            &&
26391|     29|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26391:13): [True: 29, False: 0]
  ------------------
26392|     29|            &&
26393|     29|            (_opt_var_1 = _tmp_152_rule(p), !p->error_indicator)  // ['!' NAME]
  ------------------
  |  Branch (26393:13): [True: 29, False: 0]
  ------------------
26394|     29|            &&
26395|     29|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (26395:13): [True: 29, False: 0]
  ------------------
26396|     29|            &&
26397|     29|            (_loop0_76_var = _loop0_76_rule(p))  // fstring_format_spec*
  ------------------
  |  Branch (26397:13): [True: 29, False: 0]
  ------------------
26398|     29|            &&
26399|     29|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
  ------------------
  |  Branch (26399:13): [True: 29, False: 0]
  ------------------
26400|  29.3k|        )
26401|     29|        {
26402|     29|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26403|     29|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '}', or format specs" );
  ------------------
  |  |  235|     58|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26403:20): [True: 0, False: 29]
  ------------------
26404|     29|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26404:18): [True: 29, False: 0]
  |  Branch (26404:34): [True: 0, False: 0]
  |  Branch (26404:57): [True: 29, False: 0]
  ------------------
26405|     29|                p->error_indicator = 1;
26406|     29|                p->level--;
26407|     29|                return NULL;
26408|     29|            }
26409|      0|            goto done;
26410|     29|        }
26411|  29.3k|        p->mark = _mark;
26412|  29.3k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26413|  29.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}'"));
26414|  29.3k|    }
26415|      0|    { // '{' annotated_rhs '='? ['!' NAME] !'}'
26416|  29.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (26416:13): [True: 0, False: 29.3k]
  ------------------
26417|      0|            p->level--;
26418|      0|            return NULL;
26419|      0|        }
26420|  29.3k|        D(fprintf(stderr, "%*c> invalid_fstring_replacement_field[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26421|  29.3k|        Token * _literal;
26422|  29.3k|        void *_opt_var;
26423|  29.3k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26424|  29.3k|        void *_opt_var_1;
26425|  29.3k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  29.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.3k]
  |  |  ------------------
  ------------------
26426|  29.3k|        expr_ty annotated_rhs_var;
26427|  29.3k|        if (
26428|  29.3k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (26428:13): [True: 0, False: 29.3k]
  ------------------
26429|      0|            &&
26430|      0|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (26430:13): [True: 0, False: 0]
  ------------------
26431|      0|            &&
26432|      0|            (_opt_var = _PyPegen_expect_token(p, 22), !p->error_indicator)  // '='?
  ------------------
  |  Branch (26432:13): [True: 0, False: 0]
  ------------------
26433|      0|            &&
26434|      0|            (_opt_var_1 = _tmp_152_rule(p), !p->error_indicator)  // ['!' NAME]
  ------------------
  |  Branch (26434:13): [True: 0, False: 0]
  ------------------
26435|      0|            &&
26436|      0|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 26)  // token='}'
  ------------------
  |  Branch (26436:13): [True: 0, False: 0]
  ------------------
26437|  29.3k|        )
26438|      0|        {
26439|      0|            D(fprintf(stderr, "%*c+ invalid_fstring_replacement_field[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26440|      0|            _res = PyErr_Occurred ( ) ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: expecting '}'" );
  ------------------
  |  |  235|      0|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (26440:20): [True: 0, False: 0]
  ------------------
26441|      0|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26441:18): [True: 0, False: 0]
  |  Branch (26441:34): [True: 0, False: 0]
  |  Branch (26441:57): [True: 0, False: 0]
  ------------------
26442|      0|                p->error_indicator = 1;
26443|      0|                p->level--;
26444|      0|                return NULL;
26445|      0|            }
26446|      0|            goto done;
26447|      0|        }
26448|  29.3k|        p->mark = _mark;
26449|  29.3k|        D(fprintf(stderr, "%*c%s invalid_fstring_replacement_field[%d-%d]: %s failed!\n", p->level, ' ',
26450|  29.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' annotated_rhs '='? ['!' NAME] !'}'"));
26451|  29.3k|    }
26452|  29.3k|    _res = NULL;
26453|  29.3k|  done:
26454|  29.3k|    p->level--;
26455|  29.3k|    return _res;
26456|  29.3k|}
parser.c:invalid_fstring_conversion_character_rule:
26461|     58|{
26462|     58|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    116|#  define MAXSTACK 6000
  ------------------
  |  Branch (26462:9): [True: 0, False: 58]
  |  Branch (26462:35): [True: 0, False: 58]
  ------------------
26463|      0|        _Pypegen_stack_overflow(p);
26464|      0|    }
26465|     58|    if (p->error_indicator) {
  ------------------
  |  Branch (26465:9): [True: 0, False: 58]
  ------------------
26466|      0|        p->level--;
26467|      0|        return NULL;
26468|      0|    }
26469|     58|    void * _res = NULL;
26470|     58|    int _mark = p->mark;
26471|     58|    { // '!' &(':' | '}')
26472|     58|        if (p->error_indicator) {
  ------------------
  |  Branch (26472:13): [True: 0, False: 58]
  ------------------
26473|      0|            p->level--;
26474|      0|            return NULL;
26475|      0|        }
26476|     58|        D(fprintf(stderr, "%*c> invalid_fstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
26477|     58|        Token * _literal;
26478|     58|        if (
26479|     58|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (26479:13): [True: 30, False: 28]
  ------------------
26480|     30|            &&
26481|     30|            _PyPegen_lookahead(1, _tmp_153_rule, p)
  ------------------
  |  Branch (26481:13): [True: 7, False: 23]
  ------------------
26482|     58|        )
26483|      7|        {
26484|      7|            D(fprintf(stderr, "%*c+ invalid_fstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' &(':' | '}')"));
26485|      7|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: missing conversion character" );
  ------------------
  |  |  235|      7|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
26486|      7|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26486:18): [True: 7, False: 0]
  |  Branch (26486:34): [True: 0, False: 0]
  |  Branch (26486:57): [True: 7, False: 0]
  ------------------
26487|      7|                p->error_indicator = 1;
26488|      7|                p->level--;
26489|      7|                return NULL;
26490|      7|            }
26491|      0|            goto done;
26492|      7|        }
26493|     51|        p->mark = _mark;
26494|     51|        D(fprintf(stderr, "%*c%s invalid_fstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
26495|     51|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' &(':' | '}')"));
26496|     51|    }
26497|      0|    { // '!' !NAME
26498|     51|        if (p->error_indicator) {
  ------------------
  |  Branch (26498:13): [True: 0, False: 51]
  ------------------
26499|      0|            p->level--;
26500|      0|            return NULL;
26501|      0|        }
26502|     51|        D(fprintf(stderr, "%*c> invalid_fstring_conversion_character[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
26503|     51|        Token * _literal;
26504|     51|        if (
26505|     51|            (_literal = _PyPegen_expect_token(p, 54))  // token='!'
  ------------------
  |  Branch (26505:13): [True: 23, False: 28]
  ------------------
26506|     23|            &&
26507|     23|            _PyPegen_lookahead_for_expr(0, _PyPegen_name_token, p)
  ------------------
  |  Branch (26507:13): [True: 17, False: 6]
  ------------------
26508|     51|        )
26509|     17|        {
26510|     17|            D(fprintf(stderr, "%*c+ invalid_fstring_conversion_character[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!' !NAME"));
26511|     17|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "f-string: invalid conversion character" );
  ------------------
  |  |  235|     17|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
26512|     17|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26512:18): [True: 17, False: 0]
  |  Branch (26512:34): [True: 0, False: 0]
  |  Branch (26512:57): [True: 17, False: 0]
  ------------------
26513|     17|                p->error_indicator = 1;
26514|     17|                p->level--;
26515|     17|                return NULL;
26516|     17|            }
26517|      0|            goto done;
26518|     17|        }
26519|     34|        p->mark = _mark;
26520|     34|        D(fprintf(stderr, "%*c%s invalid_fstring_conversion_character[%d-%d]: %s failed!\n", p->level, ' ',
26521|     34|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!' !NAME"));
26522|     34|    }
26523|     34|    _res = NULL;
26524|     34|  done:
26525|     34|    p->level--;
26526|     34|    return _res;
26527|     34|}
parser.c:_tmp_154_rule:
36765|   250k|{
36766|   250k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   500k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36766:9): [True: 1, False: 250k]
  |  Branch (36766:35): [True: 0, False: 250k]
  ------------------
36767|      1|        _Pypegen_stack_overflow(p);
36768|      1|    }
36769|   250k|    if (p->error_indicator) {
  ------------------
  |  Branch (36769:9): [True: 1, False: 250k]
  ------------------
36770|      1|        p->level--;
36771|      1|        return NULL;
36772|      1|    }
36773|   250k|    void * _res = NULL;
36774|   250k|    int _mark = p->mark;
36775|   250k|    { // fstring
36776|   250k|        if (p->error_indicator) {
  ------------------
  |  Branch (36776:13): [True: 0, False: 250k]
  ------------------
36777|      0|            p->level--;
36778|      0|            return NULL;
36779|      0|        }
36780|   250k|        D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring"));
36781|   250k|        expr_ty fstring_var;
36782|   250k|        if (
36783|   250k|            (fstring_var = fstring_rule(p))  // fstring
  ------------------
  |  Branch (36783:13): [True: 19.9k, False: 230k]
  ------------------
36784|   250k|        )
36785|  19.9k|        {
36786|  19.9k|            D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring"));
36787|  19.9k|            _res = fstring_var;
36788|  19.9k|            goto done;
36789|  19.9k|        }
36790|   230k|        p->mark = _mark;
36791|   230k|        D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ',
36792|   230k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring"));
36793|   230k|    }
36794|      0|    { // string
36795|   230k|        if (p->error_indicator) {
  ------------------
  |  Branch (36795:13): [True: 2.06k, False: 228k]
  ------------------
36796|  2.06k|            p->level--;
36797|  2.06k|            return NULL;
36798|  2.06k|        }
36799|   228k|        D(fprintf(stderr, "%*c> _tmp_154[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "string"));
36800|   228k|        expr_ty string_var;
36801|   228k|        if (
36802|   228k|            (string_var = string_rule(p))  // string
  ------------------
  |  Branch (36802:13): [True: 79.7k, False: 148k]
  ------------------
36803|   228k|        )
36804|  79.7k|        {
36805|  79.7k|            D(fprintf(stderr, "%*c+ _tmp_154[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "string"));
36806|  79.7k|            _res = string_var;
36807|  79.7k|            goto done;
36808|  79.7k|        }
36809|   148k|        p->mark = _mark;
36810|   148k|        D(fprintf(stderr, "%*c%s _tmp_154[%d-%d]: %s failed!\n", p->level, ' ',
36811|   148k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "string"));
36812|   148k|    }
36813|   148k|    _res = NULL;
36814|   248k|  done:
36815|   248k|    p->level--;
36816|   248k|    return _res;
36817|   148k|}
parser.c:fstring_rule:
16517|   250k|{
16518|   250k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   500k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16518:9): [True: 2, False: 250k]
  |  Branch (16518:35): [True: 0, False: 250k]
  ------------------
16519|      2|        _Pypegen_stack_overflow(p);
16520|      2|    }
16521|   250k|    if (p->error_indicator) {
  ------------------
  |  Branch (16521:9): [True: 2, False: 250k]
  ------------------
16522|      2|        p->level--;
16523|      2|        return NULL;
16524|      2|    }
16525|   250k|    expr_ty _res = NULL;
16526|   250k|    int _mark = p->mark;
16527|   250k|    { // FSTRING_START fstring_middle* FSTRING_END
16528|   250k|        if (p->error_indicator) {
  ------------------
  |  Branch (16528:13): [True: 0, False: 250k]
  ------------------
16529|      0|            p->level--;
16530|      0|            return NULL;
16531|      0|        }
16532|   250k|        D(fprintf(stderr, "%*c> fstring[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END"));
16533|   250k|        Token * a;
16534|   250k|        asdl_seq * b;
16535|   250k|        Token * c;
16536|   250k|        if (
16537|   250k|            (a = _PyPegen_expect_token(p, FSTRING_START))  // token='FSTRING_START'
  ------------------
  |  |   75|   250k|#define FSTRING_START   59
  ------------------
  |  Branch (16537:13): [True: 22.4k, False: 228k]
  ------------------
16538|  22.4k|            &&
16539|  22.4k|            (b = _loop0_77_rule(p))  // fstring_middle*
  ------------------
  |  Branch (16539:13): [True: 22.4k, False: 0]
  ------------------
16540|  22.4k|            &&
16541|  22.4k|            (c = _PyPegen_expect_token(p, FSTRING_END))  // token='FSTRING_END'
  ------------------
  |  |   77|  22.4k|#define FSTRING_END     61
  ------------------
  |  Branch (16541:13): [True: 19.9k, False: 2.54k]
  ------------------
16542|   250k|        )
16543|  19.9k|        {
16544|  19.9k|            D(fprintf(stderr, "%*c+ fstring[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END"));
16545|  19.9k|            _res = _PyPegen_joined_str ( p , a , ( asdl_expr_seq* ) b , c );
16546|  19.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16546:18): [True: 3, False: 19.9k]
  |  Branch (16546:34): [True: 0, False: 19.9k]
  |  Branch (16546:57): [True: 3, False: 0]
  ------------------
16547|      3|                p->error_indicator = 1;
16548|      3|                p->level--;
16549|      3|                return NULL;
16550|      3|            }
16551|  19.9k|            goto done;
16552|  19.9k|        }
16553|   230k|        p->mark = _mark;
16554|   230k|        D(fprintf(stderr, "%*c%s fstring[%d-%d]: %s failed!\n", p->level, ' ',
16555|   230k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_START fstring_middle* FSTRING_END"));
16556|   230k|    }
16557|   230k|    _res = NULL;
16558|   250k|  done:
16559|   250k|    p->level--;
16560|   250k|    return _res;
16561|   230k|}
parser.c:_loop0_77_rule:
32160|  22.4k|{
32161|  22.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  44.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32161:9): [True: 0, False: 22.4k]
  |  Branch (32161:35): [True: 0, False: 22.4k]
  ------------------
32162|      0|        _Pypegen_stack_overflow(p);
32163|      0|    }
32164|  22.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (32164:9): [True: 0, False: 22.4k]
  ------------------
32165|      0|        p->level--;
32166|      0|        return NULL;
32167|      0|    }
32168|  22.4k|    void *_res = NULL;
32169|  22.4k|    int _mark = p->mark;
32170|  22.4k|    void **_children = PyMem_Malloc(sizeof(void *));
32171|  22.4k|    if (!_children) {
  ------------------
  |  Branch (32171:9): [True: 0, False: 22.4k]
  ------------------
32172|      0|        p->error_indicator = 1;
32173|      0|        PyErr_NoMemory();
32174|      0|        p->level--;
32175|      0|        return NULL;
32176|      0|    }
32177|  22.4k|    Py_ssize_t _children_capacity = 1;
32178|  22.4k|    Py_ssize_t _n = 0;
32179|  22.4k|    { // fstring_middle
32180|  22.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (32180:13): [True: 0, False: 22.4k]
  ------------------
32181|      0|            p->level--;
32182|      0|            return NULL;
32183|      0|        }
32184|  22.4k|        D(fprintf(stderr, "%*c> _loop0_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_middle"));
32185|  22.4k|        expr_ty fstring_middle_var;
32186|  22.4k|        while (
32187|  84.5k|            (fstring_middle_var = fstring_middle_rule(p))  // fstring_middle
  ------------------
  |  Branch (32187:13): [True: 62.0k, False: 22.4k]
  ------------------
32188|  22.4k|        )
32189|  62.0k|        {
32190|  62.0k|            _res = fstring_middle_var;
32191|  62.0k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32191:17): [True: 8.05k, False: 54.0k]
  ------------------
32192|  8.05k|                _children_capacity *= 2;
32193|  8.05k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32194|  8.05k|                if (!_new_children) {
  ------------------
  |  Branch (32194:21): [True: 0, False: 8.05k]
  ------------------
32195|      0|                    PyMem_Free(_children);
32196|      0|                    p->error_indicator = 1;
32197|      0|                    PyErr_NoMemory();
32198|      0|                    p->level--;
32199|      0|                    return NULL;
32200|      0|                }
32201|  8.05k|                _children = _new_children;
32202|  8.05k|            }
32203|  62.0k|            _children[_n++] = _res;
32204|  62.0k|            _mark = p->mark;
32205|  62.0k|        }
32206|  22.4k|        p->mark = _mark;
32207|  22.4k|        D(fprintf(stderr, "%*c%s _loop0_77[%d-%d]: %s failed!\n", p->level, ' ',
32208|  22.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_middle"));
32209|  22.4k|    }
32210|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32211|  22.4k|    if (!_seq) {
  ------------------
  |  Branch (32211:9): [True: 0, False: 22.4k]
  ------------------
32212|      0|        PyMem_Free(_children);
32213|      0|        p->error_indicator = 1;
32214|      0|        PyErr_NoMemory();
32215|      0|        p->level--;
32216|      0|        return NULL;
32217|      0|    }
32218|  84.5k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  62.0k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  84.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32218:28): [True: 62.0k, False: 22.4k]
  ------------------
32219|  22.4k|    PyMem_Free(_children);
32220|  22.4k|    p->level--;
32221|  22.4k|    return _seq;
32222|  22.4k|}
parser.c:fstring_middle_rule:
16186|  84.5k|{
16187|  84.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   169k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16187:9): [True: 1, False: 84.5k]
  |  Branch (16187:35): [True: 0, False: 84.5k]
  ------------------
16188|      1|        _Pypegen_stack_overflow(p);
16189|      1|    }
16190|  84.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (16190:9): [True: 1, False: 84.5k]
  ------------------
16191|      1|        p->level--;
16192|      1|        return NULL;
16193|      1|    }
16194|  84.5k|    expr_ty _res = NULL;
16195|  84.5k|    int _mark = p->mark;
16196|  84.5k|    { // fstring_replacement_field
16197|  84.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (16197:13): [True: 0, False: 84.5k]
  ------------------
16198|      0|            p->level--;
16199|      0|            return NULL;
16200|      0|        }
16201|  84.5k|        D(fprintf(stderr, "%*c> fstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16202|  84.5k|        expr_ty fstring_replacement_field_var;
16203|  84.5k|        if (
16204|  84.5k|            (fstring_replacement_field_var = fstring_replacement_field_rule(p))  // fstring_replacement_field
  ------------------
  |  Branch (16204:13): [True: 10.4k, False: 74.1k]
  ------------------
16205|  84.5k|        )
16206|  10.4k|        {
16207|  10.4k|            D(fprintf(stderr, "%*c+ fstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "fstring_replacement_field"));
16208|  10.4k|            _res = fstring_replacement_field_var;
16209|  10.4k|            goto done;
16210|  10.4k|        }
16211|  74.1k|        p->mark = _mark;
16212|  74.1k|        D(fprintf(stderr, "%*c%s fstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16213|  74.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "fstring_replacement_field"));
16214|  74.1k|    }
16215|      0|    { // FSTRING_MIDDLE
16216|  74.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (16216:13): [True: 1.93k, False: 72.2k]
  ------------------
16217|  1.93k|            p->level--;
16218|  1.93k|            return NULL;
16219|  1.93k|        }
16220|  72.2k|        D(fprintf(stderr, "%*c> fstring_middle[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16221|  72.2k|        Token * t;
16222|  72.2k|        if (
16223|  72.2k|            (t = _PyPegen_expect_token(p, FSTRING_MIDDLE))  // token='FSTRING_MIDDLE'
  ------------------
  |  |   76|  72.2k|#define FSTRING_MIDDLE  60
  ------------------
  |  Branch (16223:13): [True: 51.6k, False: 20.5k]
  ------------------
16224|  72.2k|        )
16225|  51.6k|        {
16226|  51.6k|            D(fprintf(stderr, "%*c+ fstring_middle[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "FSTRING_MIDDLE"));
16227|  51.6k|            _res = _PyPegen_constant_from_token ( p , t );
16228|  51.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16228:18): [True: 5, False: 51.6k]
  |  Branch (16228:34): [True: 0, False: 51.6k]
  |  Branch (16228:57): [True: 5, False: 0]
  ------------------
16229|      5|                p->error_indicator = 1;
16230|      5|                p->level--;
16231|      5|                return NULL;
16232|      5|            }
16233|  51.6k|            goto done;
16234|  51.6k|        }
16235|  20.5k|        p->mark = _mark;
16236|  20.5k|        D(fprintf(stderr, "%*c%s fstring_middle[%d-%d]: %s failed!\n", p->level, ' ',
16237|  20.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "FSTRING_MIDDLE"));
16238|  20.5k|    }
16239|  20.5k|    _res = NULL;
16240|  82.6k|  done:
16241|  82.6k|    p->level--;
16242|  82.6k|    return _res;
16243|  20.5k|}
parser.c:string_rule:
17002|   228k|{
17003|   228k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   456k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17003:9): [True: 0, False: 228k]
  |  Branch (17003:35): [True: 0, False: 228k]
  ------------------
17004|      0|        _Pypegen_stack_overflow(p);
17005|      0|    }
17006|   228k|    if (p->error_indicator) {
  ------------------
  |  Branch (17006:9): [True: 0, False: 228k]
  ------------------
17007|      0|        p->level--;
17008|      0|        return NULL;
17009|      0|    }
17010|   228k|    expr_ty _res = NULL;
17011|   228k|    int _mark = p->mark;
17012|   228k|    { // STRING
17013|   228k|        if (p->error_indicator) {
  ------------------
  |  Branch (17013:13): [True: 0, False: 228k]
  ------------------
17014|      0|            p->level--;
17015|      0|            return NULL;
17016|      0|        }
17017|   228k|        D(fprintf(stderr, "%*c> string[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING"));
17018|   228k|        Token* s;
17019|   228k|        if (
17020|   228k|            (s = (Token*)_PyPegen_string_token(p))  // STRING
  ------------------
  |  Branch (17020:13): [True: 79.9k, False: 148k]
  ------------------
17021|   228k|        )
17022|  79.9k|        {
17023|  79.9k|            D(fprintf(stderr, "%*c+ string[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING"));
17024|  79.9k|            _res = _PyPegen_constant_from_string ( p , s );
17025|  79.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17025:18): [True: 195, False: 79.7k]
  |  Branch (17025:34): [True: 0, False: 79.7k]
  |  Branch (17025:57): [True: 195, False: 0]
  ------------------
17026|    195|                p->error_indicator = 1;
17027|    195|                p->level--;
17028|    195|                return NULL;
17029|    195|            }
17030|  79.7k|            goto done;
17031|  79.9k|        }
17032|   148k|        p->mark = _mark;
17033|   148k|        D(fprintf(stderr, "%*c%s string[%d-%d]: %s failed!\n", p->level, ' ',
17034|   148k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING"));
17035|   148k|    }
17036|   148k|    _res = NULL;
17037|   228k|  done:
17038|   228k|    p->level--;
17039|   228k|    return _res;
17040|   148k|}
parser.c:_loop1_80_rule:
32361|   149k|{
32362|   149k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   298k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32362:9): [True: 2, False: 149k]
  |  Branch (32362:35): [True: 0, False: 149k]
  ------------------
32363|      2|        _Pypegen_stack_overflow(p);
32364|      2|    }
32365|   149k|    if (p->error_indicator) {
  ------------------
  |  Branch (32365:9): [True: 2, False: 149k]
  ------------------
32366|      2|        p->level--;
32367|      2|        return NULL;
32368|      2|    }
32369|   149k|    void *_res = NULL;
32370|   149k|    int _mark = p->mark;
32371|   149k|    void **_children = PyMem_Malloc(sizeof(void *));
32372|   149k|    if (!_children) {
  ------------------
  |  Branch (32372:9): [True: 0, False: 149k]
  ------------------
32373|      0|        p->error_indicator = 1;
32374|      0|        PyErr_NoMemory();
32375|      0|        p->level--;
32376|      0|        return NULL;
32377|      0|    }
32378|   149k|    Py_ssize_t _children_capacity = 1;
32379|   149k|    Py_ssize_t _n = 0;
32380|   149k|    { // (fstring | string)
32381|   149k|        if (p->error_indicator) {
  ------------------
  |  Branch (32381:13): [True: 0, False: 149k]
  ------------------
32382|      0|            p->level--;
32383|      0|            return NULL;
32384|      0|        }
32385|   149k|        D(fprintf(stderr, "%*c> _loop1_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(fstring | string)"));
32386|   149k|        void *_tmp_154_var;
32387|   149k|        while (
32388|   249k|            (_tmp_154_var = _tmp_154_rule(p))  // fstring | string
  ------------------
  |  Branch (32388:13): [True: 99.6k, False: 149k]
  ------------------
32389|   149k|        )
32390|  99.6k|        {
32391|  99.6k|            _res = _tmp_154_var;
32392|  99.6k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32392:17): [True: 17.0k, False: 82.6k]
  ------------------
32393|  17.0k|                _children_capacity *= 2;
32394|  17.0k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32395|  17.0k|                if (!_new_children) {
  ------------------
  |  Branch (32395:21): [True: 0, False: 17.0k]
  ------------------
32396|      0|                    PyMem_Free(_children);
32397|      0|                    p->error_indicator = 1;
32398|      0|                    PyErr_NoMemory();
32399|      0|                    p->level--;
32400|      0|                    return NULL;
32401|      0|                }
32402|  17.0k|                _children = _new_children;
32403|  17.0k|            }
32404|  99.6k|            _children[_n++] = _res;
32405|  99.6k|            _mark = p->mark;
32406|  99.6k|        }
32407|   149k|        p->mark = _mark;
32408|   149k|        D(fprintf(stderr, "%*c%s _loop1_80[%d-%d]: %s failed!\n", p->level, ' ',
32409|   149k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(fstring | string)"));
32410|   149k|    }
32411|   149k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (32411:9): [True: 79.3k, False: 70.1k]
  |  Branch (32411:20): [True: 376, False: 69.7k]
  ------------------
32412|  79.7k|        PyMem_Free(_children);
32413|  79.7k|        p->level--;
32414|  79.7k|        return NULL;
32415|  79.7k|    }
32416|  69.7k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32417|  69.7k|    if (!_seq) {
  ------------------
  |  Branch (32417:9): [True: 0, False: 69.7k]
  ------------------
32418|      0|        PyMem_Free(_children);
32419|      0|        p->error_indicator = 1;
32420|      0|        PyErr_NoMemory();
32421|      0|        p->level--;
32422|      0|        return NULL;
32423|      0|    }
32424|   168k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  98.5k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   168k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32424:28): [True: 98.5k, False: 69.7k]
  ------------------
32425|  69.7k|    PyMem_Free(_children);
32426|  69.7k|    p->level--;
32427|  69.7k|    return _seq;
32428|  69.7k|}
parser.c:_loop1_81_rule:
32433|  87.6k|{
32434|  87.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   175k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32434:9): [True: 0, False: 87.6k]
  |  Branch (32434:35): [True: 0, False: 87.6k]
  ------------------
32435|      0|        _Pypegen_stack_overflow(p);
32436|      0|    }
32437|  87.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (32437:9): [True: 0, False: 87.6k]
  ------------------
32438|      0|        p->level--;
32439|      0|        return NULL;
32440|      0|    }
32441|  87.6k|    void *_res = NULL;
32442|  87.6k|    int _mark = p->mark;
32443|  87.6k|    void **_children = PyMem_Malloc(sizeof(void *));
32444|  87.6k|    if (!_children) {
  ------------------
  |  Branch (32444:9): [True: 0, False: 87.6k]
  ------------------
32445|      0|        p->error_indicator = 1;
32446|      0|        PyErr_NoMemory();
32447|      0|        p->level--;
32448|      0|        return NULL;
32449|      0|    }
32450|  87.6k|    Py_ssize_t _children_capacity = 1;
32451|  87.6k|    Py_ssize_t _n = 0;
32452|  87.6k|    { // tstring
32453|  87.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (32453:13): [True: 0, False: 87.6k]
  ------------------
32454|      0|            p->level--;
32455|      0|            return NULL;
32456|      0|        }
32457|  87.6k|        D(fprintf(stderr, "%*c> _loop1_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tstring"));
32458|  87.6k|        expr_ty tstring_var;
32459|  87.6k|        while (
32460|  92.7k|            (tstring_var = tstring_rule(p))  // tstring
  ------------------
  |  Branch (32460:13): [True: 5.15k, False: 87.6k]
  ------------------
32461|  87.6k|        )
32462|  5.15k|        {
32463|  5.15k|            _res = tstring_var;
32464|  5.15k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32464:17): [True: 206, False: 4.94k]
  ------------------
32465|    206|                _children_capacity *= 2;
32466|    206|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32467|    206|                if (!_new_children) {
  ------------------
  |  Branch (32467:21): [True: 0, False: 206]
  ------------------
32468|      0|                    PyMem_Free(_children);
32469|      0|                    p->error_indicator = 1;
32470|      0|                    PyErr_NoMemory();
32471|      0|                    p->level--;
32472|      0|                    return NULL;
32473|      0|                }
32474|    206|                _children = _new_children;
32475|    206|            }
32476|  5.15k|            _children[_n++] = _res;
32477|  5.15k|            _mark = p->mark;
32478|  5.15k|        }
32479|  87.6k|        p->mark = _mark;
32480|  87.6k|        D(fprintf(stderr, "%*c%s _loop1_81[%d-%d]: %s failed!\n", p->level, ' ',
32481|  87.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tstring"));
32482|  87.6k|    }
32483|  87.6k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (32483:9): [True: 82.8k, False: 4.82k]
  |  Branch (32483:20): [True: 79, False: 4.74k]
  ------------------
32484|  82.8k|        PyMem_Free(_children);
32485|  82.8k|        p->level--;
32486|  82.8k|        return NULL;
32487|  82.8k|    }
32488|  4.74k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32489|  4.74k|    if (!_seq) {
  ------------------
  |  Branch (32489:9): [True: 0, False: 4.74k]
  ------------------
32490|      0|        PyMem_Free(_children);
32491|      0|        p->error_indicator = 1;
32492|      0|        PyErr_NoMemory();
32493|      0|        p->level--;
32494|      0|        return NULL;
32495|      0|    }
32496|  9.80k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  5.05k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.80k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32496:28): [True: 5.05k, False: 4.74k]
  ------------------
32497|  4.74k|    PyMem_Free(_children);
32498|  4.74k|    p->level--;
32499|  4.74k|    return _seq;
32500|  4.74k|}
parser.c:_tmp_66_rule:
31391|   170k|{
31392|   170k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   340k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31392:9): [True: 0, False: 170k]
  |  Branch (31392:35): [True: 0, False: 170k]
  ------------------
31393|      0|        _Pypegen_stack_overflow(p);
31394|      0|    }
31395|   170k|    if (p->error_indicator) {
  ------------------
  |  Branch (31395:9): [True: 0, False: 170k]
  ------------------
31396|      0|        p->level--;
31397|      0|        return NULL;
31398|      0|    }
31399|   170k|    void * _res = NULL;
31400|   170k|    int _mark = p->mark;
31401|   170k|    { // genexp
31402|   170k|        if (p->error_indicator) {
  ------------------
  |  Branch (31402:13): [True: 0, False: 170k]
  ------------------
31403|      0|            p->level--;
31404|      0|            return NULL;
31405|      0|        }
31406|   170k|        D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
31407|   170k|        expr_ty genexp_var;
31408|   170k|        if (
31409|   170k|            (genexp_var = genexp_rule(p))  // genexp
  ------------------
  |  Branch (31409:13): [True: 2.49k, False: 167k]
  ------------------
31410|   170k|        )
31411|  2.49k|        {
31412|  2.49k|            D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp"));
31413|  2.49k|            _res = genexp_var;
31414|  2.49k|            goto done;
31415|  2.49k|        }
31416|   167k|        p->mark = _mark;
31417|   167k|        D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ',
31418|   167k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp"));
31419|   167k|    }
31420|      0|    { // tuple
31421|   167k|        if (p->error_indicator) {
  ------------------
  |  Branch (31421:13): [True: 8.59k, False: 159k]
  ------------------
31422|  8.59k|            p->level--;
31423|  8.59k|            return NULL;
31424|  8.59k|        }
31425|   159k|        D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
31426|   159k|        expr_ty tuple_var;
31427|   159k|        if (
31428|   159k|            (tuple_var = tuple_rule(p))  // tuple
  ------------------
  |  Branch (31428:13): [True: 114k, False: 45.2k]
  ------------------
31429|   159k|        )
31430|   114k|        {
31431|   114k|            D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
31432|   114k|            _res = tuple_var;
31433|   114k|            goto done;
31434|   114k|        }
31435|  45.2k|        p->mark = _mark;
31436|  45.2k|        D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ',
31437|  45.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
31438|  45.2k|    }
31439|      0|    { // group
31440|  45.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (31440:13): [True: 1.49k, False: 43.7k]
  ------------------
31441|  1.49k|            p->level--;
31442|  1.49k|            return NULL;
31443|  1.49k|        }
31444|  43.7k|        D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group"));
31445|  43.7k|        expr_ty group_var;
31446|  43.7k|        if (
31447|  43.7k|            (group_var = group_rule(p))  // group
  ------------------
  |  Branch (31447:13): [True: 20.8k, False: 22.8k]
  ------------------
31448|  43.7k|        )
31449|  20.8k|        {
31450|  20.8k|            D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group"));
31451|  20.8k|            _res = group_var;
31452|  20.8k|            goto done;
31453|  20.8k|        }
31454|  22.8k|        p->mark = _mark;
31455|  22.8k|        D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ',
31456|  22.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group"));
31457|  22.8k|    }
31458|  22.8k|    _res = NULL;
31459|   160k|  done:
31460|   160k|    p->level--;
31461|   160k|    return _res;
31462|  22.8k|}
parser.c:tuple_rule:
17334|   309k|{
17335|   309k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   618k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17335:9): [True: 0, False: 309k]
  |  Branch (17335:35): [True: 0, False: 309k]
  ------------------
17336|      0|        _Pypegen_stack_overflow(p);
17337|      0|    }
17338|   309k|    if (p->error_indicator) {
  ------------------
  |  Branch (17338:9): [True: 0, False: 309k]
  ------------------
17339|      0|        p->level--;
17340|      0|        return NULL;
17341|      0|    }
17342|   309k|    expr_ty _res = NULL;
17343|   309k|    int _mark = p->mark;
17344|   309k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (17344:9): [True: 0, False: 309k]
  |  Branch (17344:31): [True: 0, False: 0]
  ------------------
17345|      0|        p->error_indicator = 1;
17346|      0|        p->level--;
17347|      0|        return NULL;
17348|      0|    }
17349|   309k|    int _start_lineno = p->tokens[_mark]->lineno;
17350|   309k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   309k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 309k]
  |  |  ------------------
  ------------------
17351|   309k|    int _start_col_offset = p->tokens[_mark]->col_offset;
17352|   309k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   309k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 309k]
  |  |  ------------------
  ------------------
17353|   309k|    { // '(' [display_item ',' display_items?] ')'
17354|   309k|        if (p->error_indicator) {
  ------------------
  |  Branch (17354:13): [True: 0, False: 309k]
  ------------------
17355|      0|            p->level--;
17356|      0|            return NULL;
17357|      0|        }
17358|   309k|        D(fprintf(stderr, "%*c> tuple[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' [display_item ',' display_items?] ')'"));
17359|   309k|        Token * _literal;
17360|   309k|        Token * _literal_1;
17361|   309k|        void *a;
17362|   309k|        if (
17363|   309k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (17363:13): [True: 166k, False: 142k]
  ------------------
17364|   166k|            &&
17365|   166k|            (a = _tmp_84_rule(p), !p->error_indicator)  // [display_item ',' display_items?]
  ------------------
  |  Branch (17365:13): [True: 165k, False: 1.58k]
  ------------------
17366|   165k|            &&
17367|   165k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (17367:13): [True: 115k, False: 49.6k]
  ------------------
17368|   309k|        )
17369|   115k|        {
17370|   115k|            D(fprintf(stderr, "%*c+ tuple[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' [display_item ',' display_items?] ')'"));
17371|   115k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17372|   115k|            if (_token == NULL) {
  ------------------
  |  Branch (17372:17): [True: 0, False: 115k]
  ------------------
17373|      0|                p->level--;
17374|      0|                return NULL;
17375|      0|            }
17376|   115k|            int _end_lineno = _token->end_lineno;
17377|   115k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   115k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 115k]
  |  |  ------------------
  ------------------
17378|   115k|            int _end_col_offset = _token->end_col_offset;
17379|   115k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   115k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 115k]
  |  |  ------------------
  ------------------
17380|   115k|            _res = _PyAST_Tuple ( a , Load , EXTRA );
  ------------------
  |  |  307|   115k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17381|   115k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17381:18): [True: 0, False: 115k]
  |  Branch (17381:34): [True: 0, False: 115k]
  |  Branch (17381:57): [True: 0, False: 0]
  ------------------
17382|      0|                p->error_indicator = 1;
17383|      0|                p->level--;
17384|      0|                return NULL;
17385|      0|            }
17386|   115k|            goto done;
17387|   115k|        }
17388|   193k|        p->mark = _mark;
17389|   193k|        D(fprintf(stderr, "%*c%s tuple[%d-%d]: %s failed!\n", p->level, ' ',
17390|   193k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' [display_item ',' display_items?] ')'"));
17391|   193k|    }
17392|   193k|    _res = NULL;
17393|   309k|  done:
17394|   309k|    p->level--;
17395|   309k|    return _res;
17396|   193k|}
parser.c:_tmp_84_rule:
32622|   166k|{
32623|   166k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   333k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32623:9): [True: 0, False: 166k]
  |  Branch (32623:35): [True: 0, False: 166k]
  ------------------
32624|      0|        _Pypegen_stack_overflow(p);
32625|      0|    }
32626|   166k|    if (p->error_indicator) {
  ------------------
  |  Branch (32626:9): [True: 0, False: 166k]
  ------------------
32627|      0|        p->level--;
32628|      0|        return NULL;
32629|      0|    }
32630|   166k|    void * _res = NULL;
32631|   166k|    int _mark = p->mark;
32632|   166k|    { // display_item ',' display_items?
32633|   166k|        if (p->error_indicator) {
  ------------------
  |  Branch (32633:13): [True: 0, False: 166k]
  ------------------
32634|      0|            p->level--;
32635|      0|            return NULL;
32636|      0|        }
32637|   166k|        D(fprintf(stderr, "%*c> _tmp_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "display_item ',' display_items?"));
32638|   166k|        Token * _literal;
32639|   166k|        expr_ty y;
32640|   166k|        void *z;
32641|   166k|        if (
32642|   166k|            (y = display_item_rule(p))  // display_item
  ------------------
  |  Branch (32642:13): [True: 117k, False: 49.2k]
  ------------------
32643|   117k|            &&
32644|   117k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (32644:13): [True: 87.9k, False: 29.5k]
  ------------------
32645|  87.9k|            &&
32646|  87.9k|            (z = display_items_rule(p), !p->error_indicator)  // display_items?
  ------------------
  |  Branch (32646:13): [True: 86.5k, False: 1.43k]
  ------------------
32647|   166k|        )
32648|  86.5k|        {
32649|  86.5k|            D(fprintf(stderr, "%*c+ _tmp_84[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "display_item ',' display_items?"));
32650|  86.5k|            _res = _PyPegen_seq_insert_in_front ( p , y , z );
32651|  86.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (32651:18): [True: 0, False: 86.5k]
  |  Branch (32651:34): [True: 0, False: 86.5k]
  |  Branch (32651:57): [True: 0, False: 0]
  ------------------
32652|      0|                p->error_indicator = 1;
32653|      0|                p->level--;
32654|      0|                return NULL;
32655|      0|            }
32656|  86.5k|            goto done;
32657|  86.5k|        }
32658|  80.3k|        p->mark = _mark;
32659|  80.3k|        D(fprintf(stderr, "%*c%s _tmp_84[%d-%d]: %s failed!\n", p->level, ' ',
32660|  80.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "display_item ',' display_items?"));
32661|  80.3k|    }
32662|  80.3k|    _res = NULL;
32663|   166k|  done:
32664|   166k|    p->level--;
32665|   166k|    return _res;
32666|  80.3k|}
parser.c:display_item_rule:
17210|   384k|{
17211|   384k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   769k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17211:9): [True: 0, False: 384k]
  |  Branch (17211:35): [True: 0, False: 384k]
  ------------------
17212|      0|        _Pypegen_stack_overflow(p);
17213|      0|    }
17214|   384k|    if (p->error_indicator) {
  ------------------
  |  Branch (17214:9): [True: 0, False: 384k]
  ------------------
17215|      0|        p->level--;
17216|      0|        return NULL;
17217|      0|    }
17218|   384k|    expr_ty _res = NULL;
17219|   384k|    int _mark = p->mark;
17220|   384k|    if (p->call_invalid_rules) { // invalid_starred_expression_unpacking_sequence
  ------------------
  |  Branch (17220:9): [True: 66.6k, False: 318k]
  ------------------
17221|  66.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (17221:13): [True: 0, False: 66.6k]
  ------------------
17222|      0|            p->level--;
17223|      0|            return NULL;
17224|      0|        }
17225|  66.6k|        D(fprintf(stderr, "%*c> display_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking_sequence"));
17226|  66.6k|        void *invalid_starred_expression_unpacking_sequence_var;
17227|  66.6k|        if (
17228|  66.6k|            (invalid_starred_expression_unpacking_sequence_var = invalid_starred_expression_unpacking_sequence_rule(p))  // invalid_starred_expression_unpacking_sequence
  ------------------
  |  Branch (17228:13): [True: 0, False: 66.6k]
  ------------------
17229|  66.6k|        )
17230|      0|        {
17231|      0|            D(fprintf(stderr, "%*c+ display_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking_sequence"));
17232|      0|            _res = invalid_starred_expression_unpacking_sequence_var;
17233|      0|            goto done;
17234|      0|        }
17235|  66.6k|        p->mark = _mark;
17236|  66.6k|        D(fprintf(stderr, "%*c%s display_item[%d-%d]: %s failed!\n", p->level, ' ',
17237|  66.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_starred_expression_unpacking_sequence"));
17238|  66.6k|    }
17239|   384k|    { // star_named_expression
17240|   384k|        if (p->error_indicator) {
  ------------------
  |  Branch (17240:13): [True: 135, False: 384k]
  ------------------
17241|    135|            p->level--;
17242|    135|            return NULL;
17243|    135|        }
17244|   384k|        D(fprintf(stderr, "%*c> display_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression"));
17245|   384k|        expr_ty star_named_expression_var;
17246|   384k|        if (
17247|   384k|            (star_named_expression_var = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (17247:13): [True: 277k, False: 107k]
  ------------------
17248|   384k|        )
17249|   277k|        {
17250|   277k|            D(fprintf(stderr, "%*c+ display_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression"));
17251|   277k|            _res = star_named_expression_var;
17252|   277k|            goto done;
17253|   277k|        }
17254|   107k|        p->mark = _mark;
17255|   107k|        D(fprintf(stderr, "%*c%s display_item[%d-%d]: %s failed!\n", p->level, ' ',
17256|   107k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression"));
17257|   107k|    }
17258|   107k|    _res = NULL;
17259|   384k|  done:
17260|   384k|    p->level--;
17261|   384k|    return _res;
17262|   107k|}
parser.c:invalid_starred_expression_unpacking_sequence_rule:
25982|  66.6k|{
25983|  66.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   133k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25983:9): [True: 0, False: 66.6k]
  |  Branch (25983:35): [True: 0, False: 66.6k]
  ------------------
25984|      0|        _Pypegen_stack_overflow(p);
25985|      0|    }
25986|  66.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (25986:9): [True: 0, False: 66.6k]
  ------------------
25987|      0|        p->level--;
25988|      0|        return NULL;
25989|      0|    }
25990|  66.6k|    void * _res = NULL;
25991|  66.6k|    int _mark = p->mark;
25992|  66.6k|    { // '**' bitwise_or
25993|  66.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (25993:13): [True: 0, False: 66.6k]
  ------------------
25994|      0|            p->level--;
25995|      0|            return NULL;
25996|      0|        }
25997|  66.6k|        D(fprintf(stderr, "%*c> invalid_starred_expression_unpacking_sequence[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
25998|  66.6k|        Token * a;
25999|  66.6k|        expr_ty bitwise_or_var;
26000|  66.6k|        if (
26001|  66.6k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (26001:13): [True: 397, False: 66.2k]
  ------------------
26002|    397|            &&
26003|    397|            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (26003:13): [True: 25, False: 372]
  ------------------
26004|  66.6k|        )
26005|     25|        {
26006|     25|            D(fprintf(stderr, "%*c+ invalid_starred_expression_unpacking_sequence[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
26007|     25|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use dict unpacking here" );
  ------------------
  |  |  239|     25|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
26008|     25|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (26008:18): [True: 25, False: 0]
  |  Branch (26008:34): [True: 0, False: 0]
  |  Branch (26008:57): [True: 25, False: 0]
  ------------------
26009|     25|                p->error_indicator = 1;
26010|     25|                p->level--;
26011|     25|                return NULL;
26012|     25|            }
26013|      0|            goto done;
26014|     25|        }
26015|  66.5k|        p->mark = _mark;
26016|  66.5k|        D(fprintf(stderr, "%*c%s invalid_starred_expression_unpacking_sequence[%d-%d]: %s failed!\n", p->level, ' ',
26017|  66.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or"));
26018|  66.5k|    }
26019|  66.5k|    if (p->call_invalid_rules) { // invalid_starred_expression_unpacking
  ------------------
  |  Branch (26019:9): [True: 66.5k, False: 0]
  ------------------
26020|  66.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (26020:13): [True: 83, False: 66.5k]
  ------------------
26021|     83|            p->level--;
26022|     83|            return NULL;
26023|     83|        }
26024|  66.5k|        D(fprintf(stderr, "%*c> invalid_starred_expression_unpacking_sequence[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking"));
26025|  66.5k|        void *invalid_starred_expression_unpacking_var;
26026|  66.5k|        if (
26027|  66.5k|            (invalid_starred_expression_unpacking_var = invalid_starred_expression_unpacking_rule(p))  // invalid_starred_expression_unpacking
  ------------------
  |  Branch (26027:13): [True: 0, False: 66.5k]
  ------------------
26028|  66.5k|        )
26029|      0|        {
26030|      0|            D(fprintf(stderr, "%*c+ invalid_starred_expression_unpacking_sequence[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_starred_expression_unpacking"));
26031|      0|            _res = invalid_starred_expression_unpacking_var;
26032|      0|            goto done;
26033|      0|        }
26034|  66.5k|        p->mark = _mark;
26035|  66.5k|        D(fprintf(stderr, "%*c%s invalid_starred_expression_unpacking_sequence[%d-%d]: %s failed!\n", p->level, ' ',
26036|  66.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_starred_expression_unpacking"));
26037|  66.5k|    }
26038|  66.5k|    _res = NULL;
26039|  66.5k|  done:
26040|  66.5k|    p->level--;
26041|  66.5k|    return _res;
26042|  66.5k|}
parser.c:display_items_rule:
17163|   149k|{
17164|   149k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   299k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17164:9): [True: 0, False: 149k]
  |  Branch (17164:35): [True: 0, False: 149k]
  ------------------
17165|      0|        _Pypegen_stack_overflow(p);
17166|      0|    }
17167|   149k|    if (p->error_indicator) {
  ------------------
  |  Branch (17167:9): [True: 0, False: 149k]
  ------------------
17168|      0|        p->level--;
17169|      0|        return NULL;
17170|      0|    }
17171|   149k|    asdl_expr_seq* _res = NULL;
17172|   149k|    int _mark = p->mark;
17173|   149k|    { // ','.display_item+ ','?
17174|   149k|        if (p->error_indicator) {
  ------------------
  |  Branch (17174:13): [True: 0, False: 149k]
  ------------------
17175|      0|            p->level--;
17176|      0|            return NULL;
17177|      0|        }
17178|   149k|        D(fprintf(stderr, "%*c> display_items[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.display_item+ ','?"));
17179|   149k|        void *_opt_var;
17180|   149k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|   149k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 149k]
  |  |  ------------------
  ------------------
17181|   149k|        asdl_expr_seq* a;
17182|   149k|        if (
17183|   149k|            (a = (asdl_expr_seq*)_gather_83_rule(p))  // ','.display_item+
  ------------------
  |  Branch (17183:13): [True: 98.4k, False: 51.4k]
  ------------------
17184|  98.4k|            &&
17185|  98.4k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (17185:13): [True: 96.5k, False: 1.86k]
  ------------------
17186|   149k|        )
17187|  96.5k|        {
17188|  96.5k|            D(fprintf(stderr, "%*c+ display_items[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.display_item+ ','?"));
17189|  96.5k|            _res = a;
17190|  96.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17190:18): [True: 0, False: 96.5k]
  |  Branch (17190:34): [True: 0, False: 96.5k]
  |  Branch (17190:57): [True: 0, False: 0]
  ------------------
17191|      0|                p->error_indicator = 1;
17192|      0|                p->level--;
17193|      0|                return NULL;
17194|      0|            }
17195|  96.5k|            goto done;
17196|  96.5k|        }
17197|  53.3k|        p->mark = _mark;
17198|  53.3k|        D(fprintf(stderr, "%*c%s display_items[%d-%d]: %s failed!\n", p->level, ' ',
17199|  53.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.display_item+ ','?"));
17200|  53.3k|    }
17201|  53.3k|    _res = NULL;
17202|   149k|  done:
17203|   149k|    p->level--;
17204|   149k|    return _res;
17205|  53.3k|}
parser.c:_gather_83_rule:
32581|   149k|{
32582|   149k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   299k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32582:9): [True: 0, False: 149k]
  |  Branch (32582:35): [True: 0, False: 149k]
  ------------------
32583|      0|        _Pypegen_stack_overflow(p);
32584|      0|    }
32585|   149k|    if (p->error_indicator) {
  ------------------
  |  Branch (32585:9): [True: 0, False: 149k]
  ------------------
32586|      0|        p->level--;
32587|      0|        return NULL;
32588|      0|    }
32589|   149k|    asdl_seq * _res = NULL;
32590|   149k|    int _mark = p->mark;
32591|   149k|    { // display_item _loop0_82
32592|   149k|        if (p->error_indicator) {
  ------------------
  |  Branch (32592:13): [True: 0, False: 149k]
  ------------------
32593|      0|            p->level--;
32594|      0|            return NULL;
32595|      0|        }
32596|   149k|        D(fprintf(stderr, "%*c> _gather_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "display_item _loop0_82"));
32597|   149k|        expr_ty elem;
32598|   149k|        asdl_seq * seq;
32599|   149k|        if (
32600|   149k|            (elem = display_item_rule(p))  // display_item
  ------------------
  |  Branch (32600:13): [True: 98.4k, False: 51.4k]
  ------------------
32601|  98.4k|            &&
32602|  98.4k|            (seq = _loop0_82_rule(p))  // _loop0_82
  ------------------
  |  Branch (32602:13): [True: 98.4k, False: 0]
  ------------------
32603|   149k|        )
32604|  98.4k|        {
32605|  98.4k|            D(fprintf(stderr, "%*c+ _gather_83[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "display_item _loop0_82"));
32606|  98.4k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
32607|  98.4k|            goto done;
32608|  98.4k|        }
32609|  51.4k|        p->mark = _mark;
32610|  51.4k|        D(fprintf(stderr, "%*c%s _gather_83[%d-%d]: %s failed!\n", p->level, ' ',
32611|  51.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "display_item _loop0_82"));
32612|  51.4k|    }
32613|  51.4k|    _res = NULL;
32614|   149k|  done:
32615|   149k|    p->level--;
32616|   149k|    return _res;
32617|  51.4k|}
parser.c:_loop0_82_rule:
32505|  98.4k|{
32506|  98.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   196k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32506:9): [True: 0, False: 98.4k]
  |  Branch (32506:35): [True: 0, False: 98.4k]
  ------------------
32507|      0|        _Pypegen_stack_overflow(p);
32508|      0|    }
32509|  98.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (32509:9): [True: 0, False: 98.4k]
  ------------------
32510|      0|        p->level--;
32511|      0|        return NULL;
32512|      0|    }
32513|  98.4k|    void *_res = NULL;
32514|  98.4k|    int _mark = p->mark;
32515|  98.4k|    void **_children = PyMem_Malloc(sizeof(void *));
32516|  98.4k|    if (!_children) {
  ------------------
  |  Branch (32516:9): [True: 0, False: 98.4k]
  ------------------
32517|      0|        p->error_indicator = 1;
32518|      0|        PyErr_NoMemory();
32519|      0|        p->level--;
32520|      0|        return NULL;
32521|      0|    }
32522|  98.4k|    Py_ssize_t _children_capacity = 1;
32523|  98.4k|    Py_ssize_t _n = 0;
32524|  98.4k|    { // ',' display_item
32525|  98.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (32525:13): [True: 0, False: 98.4k]
  ------------------
32526|      0|            p->level--;
32527|      0|            return NULL;
32528|      0|        }
32529|  98.4k|        D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' display_item"));
32530|  98.4k|        Token * _literal;
32531|  98.4k|        expr_ty elem;
32532|  98.4k|        while (
32533|   159k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (32533:13): [True: 67.9k, False: 91.7k]
  ------------------
32534|  67.9k|            &&
32535|  67.9k|            (elem = display_item_rule(p))  // display_item
  ------------------
  |  Branch (32535:13): [True: 61.2k, False: 6.68k]
  ------------------
32536|  98.4k|        )
32537|  61.2k|        {
32538|  61.2k|            _res = elem;
32539|  61.2k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (32539:18): [True: 0, False: 61.2k]
  |  Branch (32539:34): [True: 0, False: 61.2k]
  |  Branch (32539:57): [True: 0, False: 0]
  ------------------
32540|      0|                p->error_indicator = 1;
32541|      0|                PyMem_Free(_children);
32542|      0|                p->level--;
32543|      0|                return NULL;
32544|      0|            }
32545|  61.2k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32545:17): [True: 26.0k, False: 35.2k]
  ------------------
32546|  26.0k|                _children_capacity *= 2;
32547|  26.0k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32548|  26.0k|                if (!_new_children) {
  ------------------
  |  Branch (32548:21): [True: 0, False: 26.0k]
  ------------------
32549|      0|                    PyMem_Free(_children);
32550|      0|                    p->error_indicator = 1;
32551|      0|                    PyErr_NoMemory();
32552|      0|                    p->level--;
32553|      0|                    return NULL;
32554|      0|                }
32555|  26.0k|                _children = _new_children;
32556|  26.0k|            }
32557|  61.2k|            _children[_n++] = _res;
32558|  61.2k|            _mark = p->mark;
32559|  61.2k|        }
32560|  98.4k|        p->mark = _mark;
32561|  98.4k|        D(fprintf(stderr, "%*c%s _loop0_82[%d-%d]: %s failed!\n", p->level, ' ',
32562|  98.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' display_item"));
32563|  98.4k|    }
32564|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32565|  98.4k|    if (!_seq) {
  ------------------
  |  Branch (32565:9): [True: 0, False: 98.4k]
  ------------------
32566|      0|        PyMem_Free(_children);
32567|      0|        p->error_indicator = 1;
32568|      0|        PyErr_NoMemory();
32569|      0|        p->level--;
32570|      0|        return NULL;
32571|      0|    }
32572|   159k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  61.2k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   159k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32572:28): [True: 61.2k, False: 98.4k]
  ------------------
32573|  98.4k|    PyMem_Free(_children);
32574|  98.4k|    p->level--;
32575|  98.4k|    return _seq;
32576|  98.4k|}
parser.c:group_rule:
15171|  43.7k|{
15172|  43.7k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  87.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15172:9): [True: 0, False: 43.7k]
  |  Branch (15172:35): [True: 0, False: 43.7k]
  ------------------
15173|      0|        _Pypegen_stack_overflow(p);
15174|      0|    }
15175|  43.7k|    if (p->error_indicator) {
  ------------------
  |  Branch (15175:9): [True: 0, False: 43.7k]
  ------------------
15176|      0|        p->level--;
15177|      0|        return NULL;
15178|      0|    }
15179|  43.7k|    expr_ty _res = NULL;
15180|  43.7k|    int _mark = p->mark;
15181|  43.7k|    { // '(' (yield_expr | named_expression) ')'
15182|  43.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (15182:13): [True: 0, False: 43.7k]
  ------------------
15183|      0|            p->level--;
15184|      0|            return NULL;
15185|      0|        }
15186|  43.7k|        D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
15187|  43.7k|        Token * _literal;
15188|  43.7k|        Token * _literal_1;
15189|  43.7k|        void *a;
15190|  43.7k|        if (
15191|  43.7k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (15191:13): [True: 43.7k, False: 0]
  ------------------
15192|  43.7k|            &&
15193|  43.7k|            (a = _tmp_69_rule(p))  // yield_expr | named_expression
  ------------------
  |  Branch (15193:13): [True: 32.4k, False: 11.2k]
  ------------------
15194|  32.4k|            &&
15195|  32.4k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (15195:13): [True: 20.8k, False: 11.6k]
  ------------------
15196|  43.7k|        )
15197|  20.8k|        {
15198|  20.8k|            D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
15199|  20.8k|            _res = a;
15200|  20.8k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15200:18): [True: 0, False: 20.8k]
  |  Branch (15200:34): [True: 0, False: 20.8k]
  |  Branch (15200:57): [True: 0, False: 0]
  ------------------
15201|      0|                p->error_indicator = 1;
15202|      0|                p->level--;
15203|      0|                return NULL;
15204|      0|            }
15205|  20.8k|            goto done;
15206|  20.8k|        }
15207|  22.8k|        p->mark = _mark;
15208|  22.8k|        D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ',
15209|  22.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (yield_expr | named_expression) ')'"));
15210|  22.8k|    }
15211|  22.8k|    if (p->call_invalid_rules) { // invalid_group
  ------------------
  |  Branch (15211:9): [True: 7.30k, False: 15.5k]
  ------------------
15212|  7.30k|        if (p->error_indicator) {
  ------------------
  |  Branch (15212:13): [True: 110, False: 7.19k]
  ------------------
15213|    110|            p->level--;
15214|    110|            return NULL;
15215|    110|        }
15216|  7.19k|        D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_group"));
15217|  7.19k|        void *invalid_group_var;
15218|  7.19k|        if (
15219|  7.19k|            (invalid_group_var = invalid_group_rule(p))  // invalid_group
  ------------------
  |  Branch (15219:13): [True: 0, False: 7.19k]
  ------------------
15220|  7.19k|        )
15221|      0|        {
15222|      0|            D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_group"));
15223|      0|            _res = invalid_group_var;
15224|      0|            goto done;
15225|      0|        }
15226|  7.19k|        p->mark = _mark;
15227|  7.19k|        D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ',
15228|  7.19k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_group"));
15229|  7.19k|    }
15230|  22.7k|    _res = NULL;
15231|  43.5k|  done:
15232|  43.5k|    p->level--;
15233|  43.5k|    return _res;
15234|  22.7k|}
parser.c:_tmp_69_rule:
31619|  43.7k|{
31620|  43.7k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  87.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31620:9): [True: 0, False: 43.7k]
  |  Branch (31620:35): [True: 0, False: 43.7k]
  ------------------
31621|      0|        _Pypegen_stack_overflow(p);
31622|      0|    }
31623|  43.7k|    if (p->error_indicator) {
  ------------------
  |  Branch (31623:9): [True: 0, False: 43.7k]
  ------------------
31624|      0|        p->level--;
31625|      0|        return NULL;
31626|      0|    }
31627|  43.7k|    void * _res = NULL;
31628|  43.7k|    int _mark = p->mark;
31629|  43.7k|    { // yield_expr
31630|  43.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (31630:13): [True: 0, False: 43.7k]
  ------------------
31631|      0|            p->level--;
31632|      0|            return NULL;
31633|      0|        }
31634|  43.7k|        D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
31635|  43.7k|        expr_ty yield_expr_var;
31636|  43.7k|        if (
31637|  43.7k|            (yield_expr_var = yield_expr_rule(p))  // yield_expr
  ------------------
  |  Branch (31637:13): [True: 2.20k, False: 41.5k]
  ------------------
31638|  43.7k|        )
31639|  2.20k|        {
31640|  2.20k|            D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
31641|  2.20k|            _res = yield_expr_var;
31642|  2.20k|            goto done;
31643|  2.20k|        }
31644|  41.5k|        p->mark = _mark;
31645|  41.5k|        D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ',
31646|  41.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
31647|  41.5k|    }
31648|      0|    { // named_expression
31649|  41.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (31649:13): [True: 258, False: 41.2k]
  ------------------
31650|    258|            p->level--;
31651|    258|            return NULL;
31652|    258|        }
31653|  41.2k|        D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
31654|  41.2k|        expr_ty named_expression_var;
31655|  41.2k|        if (
31656|  41.2k|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (31656:13): [True: 30.2k, False: 10.9k]
  ------------------
31657|  41.2k|        )
31658|  30.2k|        {
31659|  30.2k|            D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
31660|  30.2k|            _res = named_expression_var;
31661|  30.2k|            goto done;
31662|  30.2k|        }
31663|  10.9k|        p->mark = _mark;
31664|  10.9k|        D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ',
31665|  10.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
31666|  10.9k|    }
31667|  10.9k|    _res = NULL;
31668|  43.4k|  done:
31669|  43.4k|    p->level--;
31670|  43.4k|    return _res;
31671|  10.9k|}
parser.c:invalid_group_rule:
22958|  7.19k|{
22959|  7.19k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  14.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22959:9): [True: 0, False: 7.19k]
  |  Branch (22959:35): [True: 0, False: 7.19k]
  ------------------
22960|      0|        _Pypegen_stack_overflow(p);
22961|      0|    }
22962|  7.19k|    if (p->error_indicator) {
  ------------------
  |  Branch (22962:9): [True: 0, False: 7.19k]
  ------------------
22963|      0|        p->level--;
22964|      0|        return NULL;
22965|      0|    }
22966|  7.19k|    void * _res = NULL;
22967|  7.19k|    int _mark = p->mark;
22968|  7.19k|    { // '(' starred_expression ')'
22969|  7.19k|        if (p->error_indicator) {
  ------------------
  |  Branch (22969:13): [True: 0, False: 7.19k]
  ------------------
22970|      0|            p->level--;
22971|      0|            return NULL;
22972|      0|        }
22973|  7.19k|        D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
22974|  7.19k|        Token * _literal;
22975|  7.19k|        Token * _literal_1;
22976|  7.19k|        expr_ty a;
22977|  7.19k|        if (
22978|  7.19k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (22978:13): [True: 7.19k, False: 0]
  ------------------
22979|  7.19k|            &&
22980|  7.19k|            (a = starred_expression_rule(p))  // starred_expression
  ------------------
  |  Branch (22980:13): [True: 190, False: 7.00k]
  ------------------
22981|    190|            &&
22982|    190|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (22982:13): [True: 4, False: 186]
  ------------------
22983|  7.19k|        )
22984|      4|        {
22985|      4|            D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' starred_expression ')'"));
22986|      4|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use starred expression here" );
  ------------------
  |  |  239|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22987|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22987:18): [True: 4, False: 0]
  |  Branch (22987:34): [True: 0, False: 0]
  |  Branch (22987:57): [True: 4, False: 0]
  ------------------
22988|      4|                p->error_indicator = 1;
22989|      4|                p->level--;
22990|      4|                return NULL;
22991|      4|            }
22992|      0|            goto done;
22993|      4|        }
22994|  7.18k|        p->mark = _mark;
22995|  7.18k|        D(fprintf(stderr, "%*c%s invalid_group[%d-%d]: %s failed!\n", p->level, ' ',
22996|  7.18k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' starred_expression ')'"));
22997|  7.18k|    }
22998|      0|    { // '(' '**' expression ')'
22999|  7.18k|        if (p->error_indicator) {
  ------------------
  |  Branch (22999:13): [True: 0, False: 7.18k]
  ------------------
23000|      0|            p->level--;
23001|      0|            return NULL;
23002|      0|        }
23003|  7.18k|        D(fprintf(stderr, "%*c> invalid_group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' '**' expression ')'"));
23004|  7.18k|        Token * _literal;
23005|  7.18k|        Token * _literal_1;
23006|  7.18k|        Token * a;
23007|  7.18k|        expr_ty expression_var;
23008|  7.18k|        if (
23009|  7.18k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (23009:13): [True: 7.18k, False: 0]
  ------------------
23010|  7.18k|            &&
23011|  7.18k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (23011:13): [True: 81, False: 7.10k]
  ------------------
23012|     81|            &&
23013|     81|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (23013:13): [True: 3, False: 78]
  ------------------
23014|      3|            &&
23015|      3|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (23015:13): [True: 1, False: 2]
  ------------------
23016|  7.18k|        )
23017|      1|        {
23018|      1|            D(fprintf(stderr, "%*c+ invalid_group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' '**' expression ')'"));
23019|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use double starred expression here" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23020|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23020:18): [True: 1, False: 0]
  |  Branch (23020:34): [True: 0, False: 0]
  |  Branch (23020:57): [True: 1, False: 0]
  ------------------
23021|      1|                p->error_indicator = 1;
23022|      1|                p->level--;
23023|      1|                return NULL;
23024|      1|            }
23025|      0|            goto done;
23026|      1|        }
23027|  7.18k|        p->mark = _mark;
23028|  7.18k|        D(fprintf(stderr, "%*c%s invalid_group[%d-%d]: %s failed!\n", p->level, ' ',
23029|  7.18k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' '**' expression ')'"));
23030|  7.18k|    }
23031|  7.18k|    _res = NULL;
23032|  7.18k|  done:
23033|  7.18k|    p->level--;
23034|  7.18k|    return _res;
23035|  7.18k|}
parser.c:_tmp_67_rule:
31467|  41.6k|{
31468|  41.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  83.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31468:9): [True: 0, False: 41.6k]
  |  Branch (31468:35): [True: 0, False: 41.6k]
  ------------------
31469|      0|        _Pypegen_stack_overflow(p);
31470|      0|    }
31471|  41.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (31471:9): [True: 0, False: 41.6k]
  ------------------
31472|      0|        p->level--;
31473|      0|        return NULL;
31474|      0|    }
31475|  41.6k|    void * _res = NULL;
31476|  41.6k|    int _mark = p->mark;
31477|  41.6k|    { // listcomp
31478|  41.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (31478:13): [True: 0, False: 41.6k]
  ------------------
31479|      0|            p->level--;
31480|      0|            return NULL;
31481|      0|        }
31482|  41.6k|        D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp"));
31483|  41.6k|        expr_ty listcomp_var;
31484|  41.6k|        if (
31485|  41.6k|            (listcomp_var = listcomp_rule(p))  // listcomp
  ------------------
  |  Branch (31485:13): [True: 3.88k, False: 37.8k]
  ------------------
31486|  41.6k|        )
31487|  3.88k|        {
31488|  3.88k|            D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp"));
31489|  3.88k|            _res = listcomp_var;
31490|  3.88k|            goto done;
31491|  3.88k|        }
31492|  37.8k|        p->mark = _mark;
31493|  37.8k|        D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ',
31494|  37.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp"));
31495|  37.8k|    }
31496|      0|    { // list
31497|  37.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (31497:13): [True: 7.46k, False: 30.3k]
  ------------------
31498|  7.46k|            p->level--;
31499|  7.46k|            return NULL;
31500|  7.46k|        }
31501|  30.3k|        D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
31502|  30.3k|        expr_ty list_var;
31503|  30.3k|        if (
31504|  30.3k|            (list_var = list_rule(p))  // list
  ------------------
  |  Branch (31504:13): [True: 15.0k, False: 15.2k]
  ------------------
31505|  30.3k|        )
31506|  15.0k|        {
31507|  15.0k|            D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
31508|  15.0k|            _res = list_var;
31509|  15.0k|            goto done;
31510|  15.0k|        }
31511|  15.2k|        p->mark = _mark;
31512|  15.2k|        D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ',
31513|  15.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
31514|  15.2k|    }
31515|  15.2k|    _res = NULL;
31516|  34.2k|  done:
31517|  34.2k|    p->level--;
31518|  34.2k|    return _res;
31519|  15.2k|}
parser.c:listcomp_rule:
17914|  41.6k|{
17915|  41.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  83.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17915:9): [True: 1, False: 41.6k]
  |  Branch (17915:35): [True: 0, False: 41.6k]
  ------------------
17916|      1|        _Pypegen_stack_overflow(p);
17917|      1|    }
17918|  41.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (17918:9): [True: 1, False: 41.6k]
  ------------------
17919|      1|        p->level--;
17920|      1|        return NULL;
17921|      1|    }
17922|  41.6k|    expr_ty _res = NULL;
17923|  41.6k|    int _mark = p->mark;
17924|  41.6k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (17924:9): [True: 0, False: 41.6k]
  |  Branch (17924:31): [True: 0, False: 0]
  ------------------
17925|      0|        p->error_indicator = 1;
17926|      0|        p->level--;
17927|      0|        return NULL;
17928|      0|    }
17929|  41.6k|    int _start_lineno = p->tokens[_mark]->lineno;
17930|  41.6k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  41.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 41.6k]
  |  |  ------------------
  ------------------
17931|  41.6k|    int _start_col_offset = p->tokens[_mark]->col_offset;
17932|  41.6k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  41.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 41.6k]
  |  |  ------------------
  ------------------
17933|  41.6k|    { // '[' star_named_expression for_if_clauses ']'
17934|  41.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (17934:13): [True: 0, False: 41.6k]
  ------------------
17935|      0|            p->level--;
17936|      0|            return NULL;
17937|      0|        }
17938|  41.6k|        D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_named_expression for_if_clauses ']'"));
17939|  41.6k|        Token * _literal;
17940|  41.6k|        Token * _literal_1;
17941|  41.6k|        expr_ty a;
17942|  41.6k|        asdl_comprehension_seq* b;
17943|  41.6k|        if (
17944|  41.6k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (17944:13): [True: 41.6k, False: 0]
  ------------------
17945|  41.6k|            &&
17946|  41.6k|            (a = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (17946:13): [True: 26.0k, False: 15.6k]
  ------------------
17947|  26.0k|            &&
17948|  26.0k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (17948:13): [True: 3.98k, False: 22.0k]
  ------------------
17949|  3.98k|            &&
17950|  3.98k|            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
  ------------------
  |  Branch (17950:13): [True: 3.88k, False: 100]
  ------------------
17951|  41.6k|        )
17952|  3.88k|        {
17953|  3.88k|            D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_named_expression for_if_clauses ']'"));
17954|  3.88k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17955|  3.88k|            if (_token == NULL) {
  ------------------
  |  Branch (17955:17): [True: 0, False: 3.88k]
  ------------------
17956|      0|                p->level--;
17957|      0|                return NULL;
17958|      0|            }
17959|  3.88k|            int _end_lineno = _token->end_lineno;
17960|  3.88k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.88k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.88k]
  |  |  ------------------
  ------------------
17961|  3.88k|            int _end_col_offset = _token->end_col_offset;
17962|  3.88k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.88k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.88k]
  |  |  ------------------
  ------------------
17963|  3.88k|            _res = _PyAST_ListComp ( a , b , EXTRA );
  ------------------
  |  |  307|  3.88k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17964|  3.88k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17964:18): [True: 0, False: 3.88k]
  |  Branch (17964:34): [True: 0, False: 3.88k]
  |  Branch (17964:57): [True: 0, False: 0]
  ------------------
17965|      0|                p->error_indicator = 1;
17966|      0|                p->level--;
17967|      0|                return NULL;
17968|      0|            }
17969|  3.88k|            goto done;
17970|  3.88k|        }
17971|  37.8k|        p->mark = _mark;
17972|  37.8k|        D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ',
17973|  37.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_named_expression for_if_clauses ']'"));
17974|  37.8k|    }
17975|  37.8k|    if (p->call_invalid_rules) { // invalid_comprehension
  ------------------
  |  Branch (17975:9): [True: 15.4k, False: 22.3k]
  ------------------
17976|  15.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (17976:13): [True: 3.65k, False: 11.8k]
  ------------------
17977|  3.65k|            p->level--;
17978|  3.65k|            return NULL;
17979|  3.65k|        }
17980|  11.8k|        D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
17981|  11.8k|        void *invalid_comprehension_var;
17982|  11.8k|        if (
17983|  11.8k|            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
  ------------------
  |  Branch (17983:13): [True: 0, False: 11.8k]
  ------------------
17984|  11.8k|        )
17985|      0|        {
17986|      0|            D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
17987|      0|            _res = invalid_comprehension_var;
17988|      0|            goto done;
17989|      0|        }
17990|  11.8k|        p->mark = _mark;
17991|  11.8k|        D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ',
17992|  11.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
17993|  11.8k|    }
17994|  34.1k|    _res = NULL;
17995|  38.0k|  done:
17996|  38.0k|    p->level--;
17997|  38.0k|    return _res;
17998|  34.1k|}
parser.c:list_rule:
17267|   181k|{
17268|   181k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   362k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17268:9): [True: 0, False: 181k]
  |  Branch (17268:35): [True: 0, False: 181k]
  ------------------
17269|      0|        _Pypegen_stack_overflow(p);
17270|      0|    }
17271|   181k|    if (p->error_indicator) {
  ------------------
  |  Branch (17271:9): [True: 0, False: 181k]
  ------------------
17272|      0|        p->level--;
17273|      0|        return NULL;
17274|      0|    }
17275|   181k|    expr_ty _res = NULL;
17276|   181k|    int _mark = p->mark;
17277|   181k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (17277:9): [True: 0, False: 181k]
  |  Branch (17277:31): [True: 0, False: 0]
  ------------------
17278|      0|        p->error_indicator = 1;
17279|      0|        p->level--;
17280|      0|        return NULL;
17281|      0|    }
17282|   181k|    int _start_lineno = p->tokens[_mark]->lineno;
17283|   181k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   181k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 181k]
  |  |  ------------------
  ------------------
17284|   181k|    int _start_col_offset = p->tokens[_mark]->col_offset;
17285|   181k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   181k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 181k]
  |  |  ------------------
  ------------------
17286|   181k|    { // '[' display_items? ']'
17287|   181k|        if (p->error_indicator) {
  ------------------
  |  Branch (17287:13): [True: 0, False: 181k]
  ------------------
17288|      0|            p->level--;
17289|      0|            return NULL;
17290|      0|        }
17291|   181k|        D(fprintf(stderr, "%*c> list[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' display_items? ']'"));
17292|   181k|        Token * _literal;
17293|   181k|        Token * _literal_1;
17294|   181k|        void *a;
17295|   181k|        if (
17296|   181k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (17296:13): [True: 35.6k, False: 145k]
  ------------------
17297|  35.6k|            &&
17298|  35.6k|            (a = display_items_rule(p), !p->error_indicator)  // display_items?
  ------------------
  |  Branch (17298:13): [True: 34.0k, False: 1.63k]
  ------------------
17299|  34.0k|            &&
17300|  34.0k|            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
  ------------------
  |  Branch (17300:13): [True: 16.3k, False: 17.7k]
  ------------------
17301|   181k|        )
17302|  16.3k|        {
17303|  16.3k|            D(fprintf(stderr, "%*c+ list[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' display_items? ']'"));
17304|  16.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17305|  16.3k|            if (_token == NULL) {
  ------------------
  |  Branch (17305:17): [True: 0, False: 16.3k]
  ------------------
17306|      0|                p->level--;
17307|      0|                return NULL;
17308|      0|            }
17309|  16.3k|            int _end_lineno = _token->end_lineno;
17310|  16.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.3k]
  |  |  ------------------
  ------------------
17311|  16.3k|            int _end_col_offset = _token->end_col_offset;
17312|  16.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.3k]
  |  |  ------------------
  ------------------
17313|  16.3k|            _res = _PyAST_List ( a , Load , EXTRA );
  ------------------
  |  |  307|  16.3k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17314|  16.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17314:18): [True: 0, False: 16.3k]
  |  Branch (17314:34): [True: 0, False: 16.3k]
  |  Branch (17314:57): [True: 0, False: 0]
  ------------------
17315|      0|                p->error_indicator = 1;
17316|      0|                p->level--;
17317|      0|                return NULL;
17318|      0|            }
17319|  16.3k|            goto done;
17320|  16.3k|        }
17321|   165k|        p->mark = _mark;
17322|   165k|        D(fprintf(stderr, "%*c%s list[%d-%d]: %s failed!\n", p->level, ' ',
17323|   165k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' display_items? ']'"));
17324|   165k|    }
17325|   165k|    _res = NULL;
17326|   181k|  done:
17327|   181k|    p->level--;
17328|   181k|    return _res;
17329|   165k|}
parser.c:_tmp_68_rule:
31524|  44.9k|{
31525|  44.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  89.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31525:9): [True: 0, False: 44.9k]
  |  Branch (31525:35): [True: 0, False: 44.9k]
  ------------------
31526|      0|        _Pypegen_stack_overflow(p);
31527|      0|    }
31528|  44.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (31528:9): [True: 0, False: 44.9k]
  ------------------
31529|      0|        p->level--;
31530|      0|        return NULL;
31531|      0|    }
31532|  44.9k|    void * _res = NULL;
31533|  44.9k|    int _mark = p->mark;
31534|  44.9k|    { // dictcomp
31535|  44.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (31535:13): [True: 0, False: 44.9k]
  ------------------
31536|      0|            p->level--;
31537|      0|            return NULL;
31538|      0|        }
31539|  44.9k|        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp"));
31540|  44.9k|        expr_ty dictcomp_var;
31541|  44.9k|        if (
31542|  44.9k|            (dictcomp_var = dictcomp_rule(p))  // dictcomp
  ------------------
  |  Branch (31542:13): [True: 2.20k, False: 42.6k]
  ------------------
31543|  44.9k|        )
31544|  2.20k|        {
31545|  2.20k|            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp"));
31546|  2.20k|            _res = dictcomp_var;
31547|  2.20k|            goto done;
31548|  2.20k|        }
31549|  42.6k|        p->mark = _mark;
31550|  42.6k|        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31551|  42.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp"));
31552|  42.6k|    }
31553|      0|    { // setcomp
31554|  42.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (31554:13): [True: 4.68k, False: 38.0k]
  ------------------
31555|  4.68k|            p->level--;
31556|  4.68k|            return NULL;
31557|  4.68k|        }
31558|  38.0k|        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp"));
31559|  38.0k|        expr_ty setcomp_var;
31560|  38.0k|        if (
31561|  38.0k|            (setcomp_var = setcomp_rule(p))  // setcomp
  ------------------
  |  Branch (31561:13): [True: 7.21k, False: 30.7k]
  ------------------
31562|  38.0k|        )
31563|  7.21k|        {
31564|  7.21k|            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp"));
31565|  7.21k|            _res = setcomp_var;
31566|  7.21k|            goto done;
31567|  7.21k|        }
31568|  30.7k|        p->mark = _mark;
31569|  30.7k|        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31570|  30.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp"));
31571|  30.7k|    }
31572|      0|    { // dict
31573|  30.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (31573:13): [True: 934, False: 29.8k]
  ------------------
31574|    934|            p->level--;
31575|    934|            return NULL;
31576|    934|        }
31577|  29.8k|        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict"));
31578|  29.8k|        expr_ty dict_var;
31579|  29.8k|        if (
31580|  29.8k|            (dict_var = dict_rule(p))  // dict
  ------------------
  |  Branch (31580:13): [True: 2.28k, False: 27.5k]
  ------------------
31581|  29.8k|        )
31582|  2.28k|        {
31583|  2.28k|            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict"));
31584|  2.28k|            _res = dict_var;
31585|  2.28k|            goto done;
31586|  2.28k|        }
31587|  27.5k|        p->mark = _mark;
31588|  27.5k|        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31589|  27.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict"));
31590|  27.5k|    }
31591|      0|    { // set
31592|  27.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (31592:13): [True: 1.38k, False: 26.1k]
  ------------------
31593|  1.38k|            p->level--;
31594|  1.38k|            return NULL;
31595|  1.38k|        }
31596|  26.1k|        D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set"));
31597|  26.1k|        expr_ty set_var;
31598|  26.1k|        if (
31599|  26.1k|            (set_var = set_rule(p))  // set
  ------------------
  |  Branch (31599:13): [True: 18.3k, False: 7.84k]
  ------------------
31600|  26.1k|        )
31601|  18.3k|        {
31602|  18.3k|            D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set"));
31603|  18.3k|            _res = set_var;
31604|  18.3k|            goto done;
31605|  18.3k|        }
31606|  7.84k|        p->mark = _mark;
31607|  7.84k|        D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ',
31608|  7.84k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set"));
31609|  7.84k|    }
31610|  7.84k|    _res = NULL;
31611|  37.9k|  done:
31612|  37.9k|    p->level--;
31613|  37.9k|    return _res;
31614|  7.84k|}
parser.c:dictcomp_rule:
18183|  44.9k|{
18184|  44.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  89.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18184:9): [True: 1, False: 44.9k]
  |  Branch (18184:35): [True: 0, False: 44.9k]
  ------------------
18185|      1|        _Pypegen_stack_overflow(p);
18186|      1|    }
18187|  44.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (18187:9): [True: 1, False: 44.9k]
  ------------------
18188|      1|        p->level--;
18189|      1|        return NULL;
18190|      1|    }
18191|  44.9k|    expr_ty _res = NULL;
18192|  44.9k|    int _mark = p->mark;
18193|  44.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18193:9): [True: 0, False: 44.9k]
  |  Branch (18193:31): [True: 0, False: 0]
  ------------------
18194|      0|        p->error_indicator = 1;
18195|      0|        p->level--;
18196|      0|        return NULL;
18197|      0|    }
18198|  44.9k|    int _start_lineno = p->tokens[_mark]->lineno;
18199|  44.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  44.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 44.9k]
  |  |  ------------------
  ------------------
18200|  44.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18201|  44.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  44.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 44.9k]
  |  |  ------------------
  ------------------
18202|  44.9k|    { // '{' kvpair for_if_clauses '}'
18203|  44.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (18203:13): [True: 0, False: 44.9k]
  ------------------
18204|      0|            p->level--;
18205|      0|            return NULL;
18206|      0|        }
18207|  44.9k|        D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
18208|  44.9k|        Token * _literal;
18209|  44.9k|        Token * _literal_1;
18210|  44.9k|        KeyValuePair* a;
18211|  44.9k|        asdl_comprehension_seq* b;
18212|  44.9k|        if (
18213|  44.9k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (18213:13): [True: 44.9k, False: 0]
  ------------------
18214|  44.9k|            &&
18215|  44.9k|            (a = kvpair_rule(p))  // kvpair
  ------------------
  |  Branch (18215:13): [True: 3.43k, False: 41.4k]
  ------------------
18216|  3.43k|            &&
18217|  3.43k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (18217:13): [True: 1.21k, False: 2.22k]
  ------------------
18218|  1.21k|            &&
18219|  1.21k|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (18219:13): [True: 1.19k, False: 18]
  ------------------
18220|  44.9k|        )
18221|  1.19k|        {
18222|  1.19k|            D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
18223|  1.19k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18224|  1.19k|            if (_token == NULL) {
  ------------------
  |  Branch (18224:17): [True: 0, False: 1.19k]
  ------------------
18225|      0|                p->level--;
18226|      0|                return NULL;
18227|      0|            }
18228|  1.19k|            int _end_lineno = _token->end_lineno;
18229|  1.19k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.19k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.19k]
  |  |  ------------------
  ------------------
18230|  1.19k|            int _end_col_offset = _token->end_col_offset;
18231|  1.19k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.19k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.19k]
  |  |  ------------------
  ------------------
18232|  1.19k|            _res = _PyAST_DictComp ( a -> key , a -> value , b , EXTRA );
  ------------------
  |  |  307|  1.19k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18233|  1.19k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18233:18): [True: 0, False: 1.19k]
  |  Branch (18233:34): [True: 0, False: 1.19k]
  |  Branch (18233:57): [True: 0, False: 0]
  ------------------
18234|      0|                p->error_indicator = 1;
18235|      0|                p->level--;
18236|      0|                return NULL;
18237|      0|            }
18238|  1.19k|            goto done;
18239|  1.19k|        }
18240|  43.7k|        p->mark = _mark;
18241|  43.7k|        D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ',
18242|  43.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' kvpair for_if_clauses '}'"));
18243|  43.7k|    }
18244|      0|    { // '{' '**' expression for_if_clauses '}'
18245|  43.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (18245:13): [True: 4.54k, False: 39.1k]
  ------------------
18246|  4.54k|            p->level--;
18247|  4.54k|            return NULL;
18248|  4.54k|        }
18249|  39.1k|        D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '**' expression for_if_clauses '}'"));
18250|  39.1k|        Token * _literal;
18251|  39.1k|        Token * _literal_1;
18252|  39.1k|        Token * _literal_2;
18253|  39.1k|        expr_ty a;
18254|  39.1k|        asdl_comprehension_seq* b;
18255|  39.1k|        if (
18256|  39.1k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (18256:13): [True: 39.1k, False: 0]
  ------------------
18257|  39.1k|            &&
18258|  39.1k|            (_literal_1 = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (18258:13): [True: 2.24k, False: 36.9k]
  ------------------
18259|  2.24k|            &&
18260|  2.24k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (18260:13): [True: 1.83k, False: 416]
  ------------------
18261|  1.83k|            &&
18262|  1.83k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (18262:13): [True: 1.01k, False: 814]
  ------------------
18263|  1.01k|            &&
18264|  1.01k|            (_literal_2 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (18264:13): [True: 1.01k, False: 5]
  ------------------
18265|  39.1k|        )
18266|  1.01k|        {
18267|  1.01k|            D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '**' expression for_if_clauses '}'"));
18268|  1.01k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18269|  1.01k|            if (_token == NULL) {
  ------------------
  |  Branch (18269:17): [True: 0, False: 1.01k]
  ------------------
18270|      0|                p->level--;
18271|      0|                return NULL;
18272|      0|            }
18273|  1.01k|            int _end_lineno = _token->end_lineno;
18274|  1.01k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.01k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.01k]
  |  |  ------------------
  ------------------
18275|  1.01k|            int _end_col_offset = _token->end_col_offset;
18276|  1.01k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.01k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.01k]
  |  |  ------------------
  ------------------
18277|  1.01k|            _res = _PyAST_DictComp ( a , NULL , b , EXTRA );
  ------------------
  |  |  307|  1.01k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18278|  1.01k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18278:18): [True: 0, False: 1.01k]
  |  Branch (18278:34): [True: 0, False: 1.01k]
  |  Branch (18278:57): [True: 0, False: 0]
  ------------------
18279|      0|                p->error_indicator = 1;
18280|      0|                p->level--;
18281|      0|                return NULL;
18282|      0|            }
18283|  1.01k|            goto done;
18284|  1.01k|        }
18285|  38.1k|        p->mark = _mark;
18286|  38.1k|        D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ',
18287|  38.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '**' expression for_if_clauses '}'"));
18288|  38.1k|    }
18289|  38.1k|    _res = NULL;
18290|  40.3k|  done:
18291|  40.3k|    p->level--;
18292|  40.3k|    return _res;
18293|  38.1k|}
parser.c:kvpair_rule:
17672|   103k|{
17673|   103k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   206k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17673:9): [True: 0, False: 103k]
  |  Branch (17673:35): [True: 0, False: 103k]
  ------------------
17674|      0|        _Pypegen_stack_overflow(p);
17675|      0|    }
17676|   103k|    if (p->error_indicator) {
  ------------------
  |  Branch (17676:9): [True: 0, False: 103k]
  ------------------
17677|      0|        p->level--;
17678|      0|        return NULL;
17679|      0|    }
17680|   103k|    KeyValuePair* _res = NULL;
17681|   103k|    int _mark = p->mark;
17682|   103k|    { // expression ':' expression
17683|   103k|        if (p->error_indicator) {
  ------------------
  |  Branch (17683:13): [True: 0, False: 103k]
  ------------------
17684|      0|            p->level--;
17685|      0|            return NULL;
17686|      0|        }
17687|   103k|        D(fprintf(stderr, "%*c> kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
17688|   103k|        Token * _literal;
17689|   103k|        expr_ty a;
17690|   103k|        expr_ty b;
17691|   103k|        if (
17692|   103k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (17692:13): [True: 78.9k, False: 24.4k]
  ------------------
17693|  78.9k|            &&
17694|  78.9k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (17694:13): [True: 10.8k, False: 68.0k]
  ------------------
17695|  10.8k|            &&
17696|  10.8k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (17696:13): [True: 8.77k, False: 2.11k]
  ------------------
17697|   103k|        )
17698|  8.77k|        {
17699|  8.77k|            D(fprintf(stderr, "%*c+ kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
17700|  8.77k|            _res = _PyPegen_key_value_pair ( p , a , b );
17701|  8.77k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17701:18): [True: 0, False: 8.77k]
  |  Branch (17701:34): [True: 0, False: 8.77k]
  |  Branch (17701:57): [True: 0, False: 0]
  ------------------
17702|      0|                p->error_indicator = 1;
17703|      0|                p->level--;
17704|      0|                return NULL;
17705|      0|            }
17706|  8.77k|            goto done;
17707|  8.77k|        }
17708|  94.6k|        p->mark = _mark;
17709|  94.6k|        D(fprintf(stderr, "%*c%s kvpair[%d-%d]: %s failed!\n", p->level, ' ',
17710|  94.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression"));
17711|  94.6k|    }
17712|  94.6k|    _res = NULL;
17713|   103k|  done:
17714|   103k|    p->level--;
17715|   103k|    return _res;
17716|  94.6k|}
parser.c:setcomp_rule:
18003|  38.0k|{
18004|  38.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  76.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (18004:9): [True: 0, False: 38.0k]
  |  Branch (18004:35): [True: 0, False: 38.0k]
  ------------------
18005|      0|        _Pypegen_stack_overflow(p);
18006|      0|    }
18007|  38.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (18007:9): [True: 0, False: 38.0k]
  ------------------
18008|      0|        p->level--;
18009|      0|        return NULL;
18010|      0|    }
18011|  38.0k|    expr_ty _res = NULL;
18012|  38.0k|    int _mark = p->mark;
18013|  38.0k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (18013:9): [True: 0, False: 38.0k]
  |  Branch (18013:31): [True: 0, False: 0]
  ------------------
18014|      0|        p->error_indicator = 1;
18015|      0|        p->level--;
18016|      0|        return NULL;
18017|      0|    }
18018|  38.0k|    int _start_lineno = p->tokens[_mark]->lineno;
18019|  38.0k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  38.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 38.0k]
  |  |  ------------------
  ------------------
18020|  38.0k|    int _start_col_offset = p->tokens[_mark]->col_offset;
18021|  38.0k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  38.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 38.0k]
  |  |  ------------------
  ------------------
18022|  38.0k|    { // '{' star_named_expression for_if_clauses '}'
18023|  38.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (18023:13): [True: 0, False: 38.0k]
  ------------------
18024|      0|            p->level--;
18025|      0|            return NULL;
18026|      0|        }
18027|  38.0k|        D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' star_named_expression for_if_clauses '}'"));
18028|  38.0k|        Token * _literal;
18029|  38.0k|        Token * _literal_1;
18030|  38.0k|        expr_ty a;
18031|  38.0k|        asdl_comprehension_seq* b;
18032|  38.0k|        if (
18033|  38.0k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (18033:13): [True: 38.0k, False: 0]
  ------------------
18034|  38.0k|            &&
18035|  38.0k|            (a = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (18035:13): [True: 31.4k, False: 6.56k]
  ------------------
18036|  31.4k|            &&
18037|  31.4k|            (b = for_if_clauses_rule(p))  // for_if_clauses
  ------------------
  |  Branch (18037:13): [True: 7.57k, False: 23.8k]
  ------------------
18038|  7.57k|            &&
18039|  7.57k|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (18039:13): [True: 7.21k, False: 357]
  ------------------
18040|  38.0k|        )
18041|  7.21k|        {
18042|  7.21k|            D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' star_named_expression for_if_clauses '}'"));
18043|  7.21k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
18044|  7.21k|            if (_token == NULL) {
  ------------------
  |  Branch (18044:17): [True: 0, False: 7.21k]
  ------------------
18045|      0|                p->level--;
18046|      0|                return NULL;
18047|      0|            }
18048|  7.21k|            int _end_lineno = _token->end_lineno;
18049|  7.21k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.21k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.21k]
  |  |  ------------------
  ------------------
18050|  7.21k|            int _end_col_offset = _token->end_col_offset;
18051|  7.21k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.21k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.21k]
  |  |  ------------------
  ------------------
18052|  7.21k|            _res = _PyAST_SetComp ( a , b , EXTRA );
  ------------------
  |  |  307|  7.21k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
18053|  7.21k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (18053:18): [True: 0, False: 7.21k]
  |  Branch (18053:34): [True: 0, False: 7.21k]
  |  Branch (18053:57): [True: 0, False: 0]
  ------------------
18054|      0|                p->error_indicator = 1;
18055|      0|                p->level--;
18056|      0|                return NULL;
18057|      0|            }
18058|  7.21k|            goto done;
18059|  7.21k|        }
18060|  30.7k|        p->mark = _mark;
18061|  30.7k|        D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ',
18062|  30.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' star_named_expression for_if_clauses '}'"));
18063|  30.7k|    }
18064|  30.7k|    if (p->call_invalid_rules) { // invalid_comprehension
  ------------------
  |  Branch (18064:9): [True: 6.84k, False: 23.9k]
  ------------------
18065|  6.84k|        if (p->error_indicator) {
  ------------------
  |  Branch (18065:13): [True: 557, False: 6.28k]
  ------------------
18066|    557|            p->level--;
18067|    557|            return NULL;
18068|    557|        }
18069|  6.28k|        D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18070|  6.28k|        void *invalid_comprehension_var;
18071|  6.28k|        if (
18072|  6.28k|            (invalid_comprehension_var = invalid_comprehension_rule(p))  // invalid_comprehension
  ------------------
  |  Branch (18072:13): [True: 0, False: 6.28k]
  ------------------
18073|  6.28k|        )
18074|      0|        {
18075|      0|            D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension"));
18076|      0|            _res = invalid_comprehension_var;
18077|      0|            goto done;
18078|      0|        }
18079|  6.28k|        p->mark = _mark;
18080|  6.28k|        D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ',
18081|  6.28k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension"));
18082|  6.28k|    }
18083|  30.2k|    _res = NULL;
18084|  37.4k|  done:
18085|  37.4k|    p->level--;
18086|  37.4k|    return _res;
18087|  30.2k|}
parser.c:dict_rule:
17468|  29.8k|{
17469|  29.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  59.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17469:9): [True: 0, False: 29.8k]
  |  Branch (17469:35): [True: 0, False: 29.8k]
  ------------------
17470|      0|        _Pypegen_stack_overflow(p);
17471|      0|    }
17472|  29.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (17472:9): [True: 0, False: 29.8k]
  ------------------
17473|      0|        p->level--;
17474|      0|        return NULL;
17475|      0|    }
17476|  29.8k|    expr_ty _res = NULL;
17477|  29.8k|    int _mark = p->mark;
17478|  29.8k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (17478:9): [True: 0, False: 29.8k]
  |  Branch (17478:31): [True: 0, False: 0]
  ------------------
17479|      0|        p->error_indicator = 1;
17480|      0|        p->level--;
17481|      0|        return NULL;
17482|      0|    }
17483|  29.8k|    int _start_lineno = p->tokens[_mark]->lineno;
17484|  29.8k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  29.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.8k]
  |  |  ------------------
  ------------------
17485|  29.8k|    int _start_col_offset = p->tokens[_mark]->col_offset;
17486|  29.8k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  29.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.8k]
  |  |  ------------------
  ------------------
17487|  29.8k|    { // '{' double_starred_kvpairs? '}'
17488|  29.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (17488:13): [True: 0, False: 29.8k]
  ------------------
17489|      0|            p->level--;
17490|      0|            return NULL;
17491|      0|        }
17492|  29.8k|        D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
17493|  29.8k|        Token * _literal;
17494|  29.8k|        Token * _literal_1;
17495|  29.8k|        void *a;
17496|  29.8k|        if (
17497|  29.8k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (17497:13): [True: 29.8k, False: 0]
  ------------------
17498|  29.8k|            &&
17499|  29.8k|            (a = double_starred_kvpairs_rule(p), !p->error_indicator)  // double_starred_kvpairs?
  ------------------
  |  Branch (17499:13): [True: 29.5k, False: 351]
  ------------------
17500|  29.5k|            &&
17501|  29.5k|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (17501:13): [True: 2.28k, False: 27.2k]
  ------------------
17502|  29.8k|        )
17503|  2.28k|        {
17504|  2.28k|            D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
17505|  2.28k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17506|  2.28k|            if (_token == NULL) {
  ------------------
  |  Branch (17506:17): [True: 0, False: 2.28k]
  ------------------
17507|      0|                p->level--;
17508|      0|                return NULL;
17509|      0|            }
17510|  2.28k|            int _end_lineno = _token->end_lineno;
17511|  2.28k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.28k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
17512|  2.28k|            int _end_col_offset = _token->end_col_offset;
17513|  2.28k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.28k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
17514|  2.28k|            _res = _PyAST_Dict ( CHECK ( asdl_expr_seq* , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_values ( p , a ) ) , EXTRA );
  ------------------
  |  |  271|  2.28k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Dict ( CHECK ( asdl_expr_seq* , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_values ( p , a ) ) , EXTRA );
  ------------------
  |  |  271|  2.28k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Dict ( CHECK ( asdl_expr_seq* , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq* , _PyPegen_get_values ( p , a ) ) , EXTRA );
  ------------------
  |  |  307|  2.28k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17515|  2.28k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17515:18): [True: 0, False: 2.28k]
  |  Branch (17515:34): [True: 0, False: 2.28k]
  |  Branch (17515:57): [True: 0, False: 0]
  ------------------
17516|      0|                p->error_indicator = 1;
17517|      0|                p->level--;
17518|      0|                return NULL;
17519|      0|            }
17520|  2.28k|            goto done;
17521|  2.28k|        }
17522|  27.5k|        p->mark = _mark;
17523|  27.5k|        D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ',
17524|  27.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_starred_kvpairs? '}'"));
17525|  27.5k|    }
17526|      0|    { // '{' invalid_double_starred_kvpairs '}'
17527|  27.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (17527:13): [True: 351, False: 27.2k]
  ------------------
17528|    351|            p->level--;
17529|    351|            return NULL;
17530|    351|        }
17531|  27.2k|        D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
17532|  27.2k|        Token * _literal;
17533|  27.2k|        Token * _literal_1;
17534|  27.2k|        void *invalid_double_starred_kvpairs_var;
17535|  27.2k|        if (
17536|  27.2k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (17536:13): [True: 27.2k, False: 0]
  ------------------
17537|  27.2k|            &&
17538|  27.2k|            (invalid_double_starred_kvpairs_var = invalid_double_starred_kvpairs_rule(p))  // invalid_double_starred_kvpairs
  ------------------
  |  Branch (17538:13): [True: 0, False: 27.2k]
  ------------------
17539|      0|            &&
17540|      0|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (17540:13): [True: 0, False: 0]
  ------------------
17541|  27.2k|        )
17542|      0|        {
17543|      0|            D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
17544|      0|            _res = _PyPegen_dummy_name(p, _literal, invalid_double_starred_kvpairs_var, _literal_1);
17545|      0|            goto done;
17546|      0|        }
17547|  27.2k|        p->mark = _mark;
17548|  27.2k|        D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ',
17549|  27.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'"));
17550|  27.2k|    }
17551|  27.2k|    _res = NULL;
17552|  29.5k|  done:
17553|  29.5k|    p->level--;
17554|  29.5k|    return _res;
17555|  27.2k|}
parser.c:double_starred_kvpairs_rule:
17560|  29.8k|{
17561|  29.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  59.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17561:9): [True: 0, False: 29.8k]
  |  Branch (17561:35): [True: 0, False: 29.8k]
  ------------------
17562|      0|        _Pypegen_stack_overflow(p);
17563|      0|    }
17564|  29.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (17564:9): [True: 0, False: 29.8k]
  ------------------
17565|      0|        p->level--;
17566|      0|        return NULL;
17567|      0|    }
17568|  29.8k|    asdl_seq* _res = NULL;
17569|  29.8k|    int _mark = p->mark;
17570|  29.8k|    { // ','.double_starred_kvpair+ ','?
17571|  29.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (17571:13): [True: 0, False: 29.8k]
  ------------------
17572|      0|            p->level--;
17573|      0|            return NULL;
17574|      0|        }
17575|  29.8k|        D(fprintf(stderr, "%*c> double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
17576|  29.8k|        void *_opt_var;
17577|  29.8k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  29.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.8k]
  |  |  ------------------
  ------------------
17578|  29.8k|        asdl_seq * a;
17579|  29.8k|        if (
17580|  29.8k|            (a = _gather_86_rule(p))  // ','.double_starred_kvpair+
  ------------------
  |  Branch (17580:13): [True: 3.05k, False: 26.8k]
  ------------------
17581|  3.05k|            &&
17582|  3.05k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (17582:13): [True: 2.70k, False: 351]
  ------------------
17583|  29.8k|        )
17584|  2.70k|        {
17585|  2.70k|            D(fprintf(stderr, "%*c+ double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?"));
17586|  2.70k|            _res = a;
17587|  2.70k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17587:18): [True: 0, False: 2.70k]
  |  Branch (17587:34): [True: 0, False: 2.70k]
  |  Branch (17587:57): [True: 0, False: 0]
  ------------------
17588|      0|                p->error_indicator = 1;
17589|      0|                p->level--;
17590|      0|                return NULL;
17591|      0|            }
17592|  2.70k|            goto done;
17593|  2.70k|        }
17594|  27.1k|        p->mark = _mark;
17595|  27.1k|        D(fprintf(stderr, "%*c%s double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
17596|  27.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ','?"));
17597|  27.1k|    }
17598|  27.1k|    _res = NULL;
17599|  29.8k|  done:
17600|  29.8k|    p->level--;
17601|  29.8k|    return _res;
17602|  27.1k|}
parser.c:_gather_86_rule:
32747|  56.2k|{
32748|  56.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   112k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32748:9): [True: 0, False: 56.2k]
  |  Branch (32748:35): [True: 0, False: 56.2k]
  ------------------
32749|      0|        _Pypegen_stack_overflow(p);
32750|      0|    }
32751|  56.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (32751:9): [True: 0, False: 56.2k]
  ------------------
32752|      0|        p->level--;
32753|      0|        return NULL;
32754|      0|    }
32755|  56.2k|    asdl_seq * _res = NULL;
32756|  56.2k|    int _mark = p->mark;
32757|  56.2k|    { // double_starred_kvpair _loop0_85
32758|  56.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (32758:13): [True: 0, False: 56.2k]
  ------------------
32759|      0|            p->level--;
32760|      0|            return NULL;
32761|      0|        }
32762|  56.2k|        D(fprintf(stderr, "%*c> _gather_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_85"));
32763|  56.2k|        KeyValuePair* elem;
32764|  56.2k|        asdl_seq * seq;
32765|  56.2k|        if (
32766|  56.2k|            (elem = double_starred_kvpair_rule(p))  // double_starred_kvpair
  ------------------
  |  Branch (32766:13): [True: 4.71k, False: 51.5k]
  ------------------
32767|  4.71k|            &&
32768|  4.71k|            (seq = _loop0_85_rule(p))  // _loop0_85
  ------------------
  |  Branch (32768:13): [True: 4.71k, False: 0]
  ------------------
32769|  56.2k|        )
32770|  4.71k|        {
32771|  4.71k|            D(fprintf(stderr, "%*c+ _gather_86[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_85"));
32772|  4.71k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
32773|  4.71k|            goto done;
32774|  4.71k|        }
32775|  51.5k|        p->mark = _mark;
32776|  51.5k|        D(fprintf(stderr, "%*c%s _gather_86[%d-%d]: %s failed!\n", p->level, ' ',
32777|  51.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_85"));
32778|  51.5k|    }
32779|  51.5k|    _res = NULL;
32780|  56.2k|  done:
32781|  56.2k|    p->level--;
32782|  56.2k|    return _res;
32783|  51.5k|}
parser.c:double_starred_kvpair_rule:
17607|  60.3k|{
17608|  60.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   120k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17608:9): [True: 0, False: 60.3k]
  |  Branch (17608:35): [True: 0, False: 60.3k]
  ------------------
17609|      0|        _Pypegen_stack_overflow(p);
17610|      0|    }
17611|  60.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (17611:9): [True: 0, False: 60.3k]
  ------------------
17612|      0|        p->level--;
17613|      0|        return NULL;
17614|      0|    }
17615|  60.3k|    KeyValuePair* _res = NULL;
17616|  60.3k|    int _mark = p->mark;
17617|  60.3k|    { // '**' bitwise_or
17618|  60.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (17618:13): [True: 0, False: 60.3k]
  ------------------
17619|      0|            p->level--;
17620|      0|            return NULL;
17621|      0|        }
17622|  60.3k|        D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
17623|  60.3k|        Token * _literal;
17624|  60.3k|        expr_ty a;
17625|  60.3k|        if (
17626|  60.3k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (17626:13): [True: 2.34k, False: 57.9k]
  ------------------
17627|  2.34k|            &&
17628|  2.34k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (17628:13): [True: 1.75k, False: 597]
  ------------------
17629|  60.3k|        )
17630|  1.75k|        {
17631|  1.75k|            D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or"));
17632|  1.75k|            _res = _PyPegen_key_value_pair ( p , NULL , a );
17633|  1.75k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17633:18): [True: 0, False: 1.75k]
  |  Branch (17633:34): [True: 0, False: 1.75k]
  |  Branch (17633:57): [True: 0, False: 0]
  ------------------
17634|      0|                p->error_indicator = 1;
17635|      0|                p->level--;
17636|      0|                return NULL;
17637|      0|            }
17638|  1.75k|            goto done;
17639|  1.75k|        }
17640|  58.5k|        p->mark = _mark;
17641|  58.5k|        D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
17642|  58.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or"));
17643|  58.5k|    }
17644|      0|    { // kvpair
17645|  58.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (17645:13): [True: 58, False: 58.5k]
  ------------------
17646|     58|            p->level--;
17647|     58|            return NULL;
17648|     58|        }
17649|  58.5k|        D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kvpair"));
17650|  58.5k|        KeyValuePair* kvpair_var;
17651|  58.5k|        if (
17652|  58.5k|            (kvpair_var = kvpair_rule(p))  // kvpair
  ------------------
  |  Branch (17652:13): [True: 5.34k, False: 53.1k]
  ------------------
17653|  58.5k|        )
17654|  5.34k|        {
17655|  5.34k|            D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kvpair"));
17656|  5.34k|            _res = kvpair_var;
17657|  5.34k|            goto done;
17658|  5.34k|        }
17659|  53.1k|        p->mark = _mark;
17660|  53.1k|        D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
17661|  53.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kvpair"));
17662|  53.1k|    }
17663|  53.1k|    _res = NULL;
17664|  60.2k|  done:
17665|  60.2k|    p->level--;
17666|  60.2k|    return _res;
17667|  53.1k|}
parser.c:_loop0_85_rule:
32671|  4.71k|{
32672|  4.71k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.42k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32672:9): [True: 0, False: 4.71k]
  |  Branch (32672:35): [True: 0, False: 4.71k]
  ------------------
32673|      0|        _Pypegen_stack_overflow(p);
32674|      0|    }
32675|  4.71k|    if (p->error_indicator) {
  ------------------
  |  Branch (32675:9): [True: 0, False: 4.71k]
  ------------------
32676|      0|        p->level--;
32677|      0|        return NULL;
32678|      0|    }
32679|  4.71k|    void *_res = NULL;
32680|  4.71k|    int _mark = p->mark;
32681|  4.71k|    void **_children = PyMem_Malloc(sizeof(void *));
32682|  4.71k|    if (!_children) {
  ------------------
  |  Branch (32682:9): [True: 0, False: 4.71k]
  ------------------
32683|      0|        p->error_indicator = 1;
32684|      0|        PyErr_NoMemory();
32685|      0|        p->level--;
32686|      0|        return NULL;
32687|      0|    }
32688|  4.71k|    Py_ssize_t _children_capacity = 1;
32689|  4.71k|    Py_ssize_t _n = 0;
32690|  4.71k|    { // ',' double_starred_kvpair
32691|  4.71k|        if (p->error_indicator) {
  ------------------
  |  Branch (32691:13): [True: 0, False: 4.71k]
  ------------------
32692|      0|            p->level--;
32693|      0|            return NULL;
32694|      0|        }
32695|  4.71k|        D(fprintf(stderr, "%*c> _loop0_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair"));
32696|  4.71k|        Token * _literal;
32697|  4.71k|        KeyValuePair* elem;
32698|  4.71k|        while (
32699|  7.09k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (32699:13): [True: 4.05k, False: 3.03k]
  ------------------
32700|  4.05k|            &&
32701|  4.05k|            (elem = double_starred_kvpair_rule(p))  // double_starred_kvpair
  ------------------
  |  Branch (32701:13): [True: 2.37k, False: 1.68k]
  ------------------
32702|  4.71k|        )
32703|  2.37k|        {
32704|  2.37k|            _res = elem;
32705|  2.37k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (32705:18): [True: 0, False: 2.37k]
  |  Branch (32705:34): [True: 0, False: 2.37k]
  |  Branch (32705:57): [True: 0, False: 0]
  ------------------
32706|      0|                p->error_indicator = 1;
32707|      0|                PyMem_Free(_children);
32708|      0|                p->level--;
32709|      0|                return NULL;
32710|      0|            }
32711|  2.37k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32711:17): [True: 447, False: 1.93k]
  ------------------
32712|    447|                _children_capacity *= 2;
32713|    447|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32714|    447|                if (!_new_children) {
  ------------------
  |  Branch (32714:21): [True: 0, False: 447]
  ------------------
32715|      0|                    PyMem_Free(_children);
32716|      0|                    p->error_indicator = 1;
32717|      0|                    PyErr_NoMemory();
32718|      0|                    p->level--;
32719|      0|                    return NULL;
32720|      0|                }
32721|    447|                _children = _new_children;
32722|    447|            }
32723|  2.37k|            _children[_n++] = _res;
32724|  2.37k|            _mark = p->mark;
32725|  2.37k|        }
32726|  4.71k|        p->mark = _mark;
32727|  4.71k|        D(fprintf(stderr, "%*c%s _loop0_85[%d-%d]: %s failed!\n", p->level, ' ',
32728|  4.71k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair"));
32729|  4.71k|    }
32730|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32731|  4.71k|    if (!_seq) {
  ------------------
  |  Branch (32731:9): [True: 0, False: 4.71k]
  ------------------
32732|      0|        PyMem_Free(_children);
32733|      0|        p->error_indicator = 1;
32734|      0|        PyErr_NoMemory();
32735|      0|        p->level--;
32736|      0|        return NULL;
32737|      0|    }
32738|  7.09k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  2.37k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  7.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32738:28): [True: 2.37k, False: 4.71k]
  ------------------
32739|  4.71k|    PyMem_Free(_children);
32740|  4.71k|    p->level--;
32741|  4.71k|    return _seq;
32742|  4.71k|}
parser.c:invalid_double_starred_kvpairs_rule:
25474|  27.2k|{
25475|  27.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  54.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25475:9): [True: 0, False: 27.2k]
  |  Branch (25475:35): [True: 0, False: 27.2k]
  ------------------
25476|      0|        _Pypegen_stack_overflow(p);
25477|      0|    }
25478|  27.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (25478:9): [True: 0, False: 27.2k]
  ------------------
25479|      0|        p->level--;
25480|      0|        return NULL;
25481|      0|    }
25482|  27.2k|    void * _res = NULL;
25483|  27.2k|    int _mark = p->mark;
25484|  27.2k|    { // invalid_kvpair_unpacking ','?
25485|  27.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (25485:13): [True: 0, False: 27.2k]
  ------------------
25486|      0|            p->level--;
25487|      0|            return NULL;
25488|      0|        }
25489|  27.2k|        D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking ','?"));
25490|  27.2k|        void *_opt_var;
25491|  27.2k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  27.2k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 27.2k]
  |  |  ------------------
  ------------------
25492|  27.2k|        void *invalid_kvpair_unpacking_var;
25493|  27.2k|        if (
25494|  27.2k|            (invalid_kvpair_unpacking_var = invalid_kvpair_unpacking_rule(p))  // invalid_kvpair_unpacking
  ------------------
  |  Branch (25494:13): [True: 0, False: 27.2k]
  ------------------
25495|      0|            &&
25496|      0|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (25496:13): [True: 0, False: 0]
  ------------------
25497|  27.2k|        )
25498|      0|        {
25499|      0|            D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking ','?"));
25500|      0|            _res = _PyPegen_dummy_name(p, invalid_kvpair_unpacking_var, _opt_var);
25501|      0|            goto done;
25502|      0|        }
25503|  27.2k|        p->mark = _mark;
25504|  27.2k|        D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
25505|  27.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kvpair_unpacking ','?"));
25506|  27.2k|    }
25507|      0|    { // ','.double_starred_kvpair+ ',' (invalid_kvpair | invalid_kvpair_unpacking)
25508|  27.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (25508:13): [True: 821, False: 26.4k]
  ------------------
25509|    821|            p->level--;
25510|    821|            return NULL;
25511|    821|        }
25512|  26.4k|        D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' (invalid_kvpair | invalid_kvpair_unpacking)"));
25513|  26.4k|        asdl_seq * _gather_86_var;
25514|  26.4k|        Token * _literal;
25515|  26.4k|        void *_tmp_148_var;
25516|  26.4k|        if (
25517|  26.4k|            (_gather_86_var = _gather_86_rule(p))  // ','.double_starred_kvpair+
  ------------------
  |  Branch (25517:13): [True: 1.66k, False: 24.7k]
  ------------------
25518|  1.66k|            &&
25519|  1.66k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (25519:13): [True: 657, False: 1.00k]
  ------------------
25520|    657|            &&
25521|    657|            (_tmp_148_var = _tmp_148_rule(p))  // invalid_kvpair | invalid_kvpair_unpacking
  ------------------
  |  Branch (25521:13): [True: 0, False: 657]
  ------------------
25522|  26.4k|        )
25523|      0|        {
25524|      0|            D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ',' (invalid_kvpair | invalid_kvpair_unpacking)"));
25525|      0|            _res = _PyPegen_dummy_name(p, _gather_86_var, _literal, _tmp_148_var);
25526|      0|            goto done;
25527|      0|        }
25528|  26.4k|        p->mark = _mark;
25529|  26.4k|        D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
25530|  26.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ',' (invalid_kvpair | invalid_kvpair_unpacking)"));
25531|  26.4k|    }
25532|      0|    { // expression ':' &('}' | ',')
25533|  26.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (25533:13): [True: 205, False: 26.2k]
  ------------------
25534|    205|            p->level--;
25535|    205|            return NULL;
25536|    205|        }
25537|  26.2k|        D(fprintf(stderr, "%*c> invalid_double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
25538|  26.2k|        Token * a;
25539|  26.2k|        expr_ty expression_var;
25540|  26.2k|        if (
25541|  26.2k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (25541:13): [True: 21.5k, False: 4.68k]
  ------------------
25542|  21.5k|            &&
25543|  21.5k|            (a = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25543:13): [True: 1.32k, False: 20.1k]
  ------------------
25544|  1.32k|            &&
25545|  1.32k|            _PyPegen_lookahead(1, _tmp_149_rule, p)
  ------------------
  |  Branch (25545:13): [True: 5, False: 1.31k]
  ------------------
25546|  26.2k|        )
25547|      5|        {
25548|      5|            D(fprintf(stderr, "%*c+ invalid_double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
25549|      5|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" );
  ------------------
  |  |  239|      5|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25550|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25550:18): [True: 5, False: 0]
  |  Branch (25550:34): [True: 0, False: 0]
  |  Branch (25550:57): [True: 5, False: 0]
  ------------------
25551|      5|                p->error_indicator = 1;
25552|      5|                p->level--;
25553|      5|                return NULL;
25554|      5|            }
25555|      0|            goto done;
25556|      5|        }
25557|  26.1k|        p->mark = _mark;
25558|  26.1k|        D(fprintf(stderr, "%*c%s invalid_double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ',
25559|  26.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')"));
25560|  26.1k|    }
25561|  26.1k|    _res = NULL;
25562|  26.1k|  done:
25563|  26.1k|    p->level--;
25564|  26.1k|    return _res;
25565|  26.1k|}
parser.c:invalid_kvpair_unpacking_rule:
25575|  27.4k|{
25576|  27.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  54.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25576:9): [True: 0, False: 27.4k]
  |  Branch (25576:35): [True: 0, False: 27.4k]
  ------------------
25577|      0|        _Pypegen_stack_overflow(p);
25578|      0|    }
25579|  27.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (25579:9): [True: 0, False: 27.4k]
  ------------------
25580|      0|        p->level--;
25581|      0|        return NULL;
25582|      0|    }
25583|  27.4k|    void * _res = NULL;
25584|  27.4k|    int _mark = p->mark;
25585|  27.4k|    expr_ty _prefix_14_result = NULL;
25586|  27.4k|    int _prefix_14_end = 0, _prefix_14_valid = 0;
25587|  27.4k|    { // '**' if_expression
25588|  27.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (25588:13): [True: 0, False: 27.4k]
  ------------------
25589|      0|            p->level--;
25590|      0|            return NULL;
25591|      0|        }
25592|  27.4k|        D(fprintf(stderr, "%*c> invalid_kvpair_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' if_expression"));
25593|  27.4k|        Token * a;
25594|  27.4k|        expr_ty b;
25595|  27.4k|        if (
25596|  27.4k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (25596:13): [True: 960, False: 26.5k]
  ------------------
25597|    960|            &&
25598|    960|            (b = if_expression_rule(p))  // if_expression
  ------------------
  |  Branch (25598:13): [True: 1, False: 959]
  ------------------
25599|  27.4k|        )
25600|      1|        {
25601|      1|            D(fprintf(stderr, "%*c+ invalid_kvpair_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' if_expression"));
25602|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "invalid double starred expression. Did you forget to wrap the conditional expression in parentheses?" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25603|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25603:18): [True: 1, False: 0]
  |  Branch (25603:34): [True: 0, False: 0]
  |  Branch (25603:57): [True: 1, False: 0]
  ------------------
25604|      1|                p->error_indicator = 1;
25605|      1|                p->level--;
25606|      1|                return NULL;
25607|      1|            }
25608|      0|            goto done;
25609|      1|        }
25610|  27.4k|        p->mark = _mark;
25611|  27.4k|        D(fprintf(stderr, "%*c%s invalid_kvpair_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25612|  27.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' if_expression"));
25613|  27.4k|    }
25614|      0|    { // '*' bitwise_or ':' expression
25615|  27.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (25615:13): [True: 0, False: 27.4k]
  ------------------
25616|      0|            p->level--;
25617|      0|            return NULL;
25618|      0|        }
25619|  27.4k|        D(fprintf(stderr, "%*c> invalid_kvpair_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or ':' expression"));
25620|  27.4k|        Token * _literal;
25621|  27.4k|        Token * a;
25622|  27.4k|        expr_ty b;
25623|  27.4k|        expr_ty expression_var;
25624|  27.4k|        if (
25625|  27.4k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (25625:13): [True: 2.20k, False: 25.2k]
  ------------------
25626|  2.20k|            &&
25627|  2.20k|            (b = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (25627:13): [True: 1.21k, False: 986]
  ------------------
25628|  1.21k|            &&
25629|  1.21k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25629:13): [True: 537, False: 678]
  ------------------
25630|    537|            &&
25631|    537|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (25631:13): [True: 2, False: 535]
  ------------------
25632|  27.4k|        )
25633|      2|        {
25634|      2|            D(fprintf(stderr, "%*c+ invalid_kvpair_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' bitwise_or ':' expression"));
25635|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use a starred expression in a dictionary key" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25636|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25636:18): [True: 2, False: 0]
  |  Branch (25636:34): [True: 0, False: 0]
  |  Branch (25636:57): [True: 2, False: 0]
  ------------------
25637|      2|                p->error_indicator = 1;
25638|      2|                p->level--;
25639|      2|                return NULL;
25640|      2|            }
25641|      0|            goto done;
25642|      2|        }
25643|  27.4k|        p->mark = _mark;
25644|  27.4k|        D(fprintf(stderr, "%*c%s invalid_kvpair_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25645|  27.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' bitwise_or ':' expression"));
25646|  27.4k|    }
25647|      0|    { // '**' bitwise_or ':' expression
25648|  27.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (25648:13): [True: 426, False: 27.0k]
  ------------------
25649|    426|            p->level--;
25650|    426|            return NULL;
25651|    426|        }
25652|  27.0k|        D(fprintf(stderr, "%*c> invalid_kvpair_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or ':' expression"));
25653|  27.0k|        Token * _literal;
25654|  27.0k|        Token * a;
25655|  27.0k|        expr_ty b;
25656|  27.0k|        expr_ty expression_var;
25657|  27.0k|        if (
25658|  27.0k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (25658:13): [True: 959, False: 26.1k]
  ------------------
25659|    959|            &&
25660|    959|            (b = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (25660:13): [True: 687, False: 272]
  ------------------
25661|    687|            &&
25662|    687|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25662:13): [True: 580, False: 107]
  ------------------
25663|    580|            &&
25664|    580|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (25664:13): [True: 1, False: 579]
  ------------------
25665|  27.0k|        )
25666|      1|        {
25667|      1|            D(fprintf(stderr, "%*c+ invalid_kvpair_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or ':' expression"));
25668|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use dict unpacking in a dictionary key" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25669|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25669:18): [True: 1, False: 0]
  |  Branch (25669:34): [True: 0, False: 0]
  |  Branch (25669:57): [True: 1, False: 0]
  ------------------
25670|      1|                p->error_indicator = 1;
25671|      1|                p->level--;
25672|      1|                return NULL;
25673|      1|            }
25674|      0|            goto done;
25675|      1|        }
25676|  27.0k|        p->mark = _mark;
25677|  27.0k|        D(fprintf(stderr, "%*c%s invalid_kvpair_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25678|  27.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or ':' expression"));
25679|  27.0k|    }
25680|      0|    { // expression ':' '*' bitwise_or
25681|  27.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (25681:13): [True: 365, False: 26.7k]
  ------------------
25682|    365|            p->level--;
25683|    365|            return NULL;
25684|    365|        }
25685|  26.7k|        D(fprintf(stderr, "%*c> invalid_kvpair_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
25686|  26.7k|        Token * _literal;
25687|  26.7k|        Token * a;
25688|  26.7k|        expr_ty b;
25689|  26.7k|        expr_ty expression_var;
25690|  26.7k|        if (
25691|  26.7k|            (expression_var = ((!p->call_invalid_rules && _prefix_14_valid) ? (p->mark = _prefix_14_end, _prefix_14_result) : (_prefix_14_result = expression_rule(p), _prefix_14_end = p->mark, _prefix_14_valid = 1, _prefix_14_result)))  // expression
  ------------------
  |  Branch (25691:13): [True: 21.9k, False: 4.70k]
  |  Branch (25691:33): [True: 21.2k, False: 5.41k]
  |  Branch (25691:59): [True: 0, False: 21.2k]
  ------------------
25692|  21.9k|            &&
25693|  21.9k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25693:13): [True: 1.80k, False: 20.1k]
  ------------------
25694|  1.80k|            &&
25695|  1.80k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (25695:13): [True: 138, False: 1.66k]
  ------------------
25696|    138|            &&
25697|    138|            (b = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (25697:13): [True: 3, False: 135]
  ------------------
25698|  26.7k|        )
25699|      3|        {
25700|      3|            D(fprintf(stderr, "%*c+ invalid_kvpair_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
25701|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use a starred expression in a dictionary value" );
  ------------------
  |  |  237|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25702|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25702:18): [True: 3, False: 0]
  |  Branch (25702:34): [True: 0, False: 0]
  |  Branch (25702:57): [True: 3, False: 0]
  ------------------
25703|      3|                p->error_indicator = 1;
25704|      3|                p->level--;
25705|      3|                return NULL;
25706|      3|            }
25707|      0|            goto done;
25708|      3|        }
25709|  26.7k|        p->mark = _mark;
25710|  26.7k|        D(fprintf(stderr, "%*c%s invalid_kvpair_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25711|  26.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or"));
25712|  26.7k|    }
25713|      0|    { // expression ':' '**' bitwise_or
25714|  26.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (25714:13): [True: 77, False: 26.6k]
  ------------------
25715|     77|            p->level--;
25716|     77|            return NULL;
25717|     77|        }
25718|  26.6k|        D(fprintf(stderr, "%*c> invalid_kvpair_unpacking[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '**' bitwise_or"));
25719|  26.6k|        Token * _literal;
25720|  26.6k|        Token * a;
25721|  26.6k|        expr_ty b;
25722|  26.6k|        expr_ty expression_var;
25723|  26.6k|        if (
25724|  26.6k|            (expression_var = ((!p->call_invalid_rules && _prefix_14_valid) ? (p->mark = _prefix_14_end, _prefix_14_result) : (_prefix_14_result = expression_rule(p), _prefix_14_end = p->mark, _prefix_14_valid = 1, _prefix_14_result)))  // expression
  ------------------
  |  Branch (25724:13): [True: 21.9k, False: 4.70k]
  |  Branch (25724:33): [True: 21.2k, False: 5.39k]
  |  Branch (25724:59): [True: 21.2k, False: 0]
  ------------------
25725|  21.9k|            &&
25726|  21.9k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25726:13): [True: 1.72k, False: 20.1k]
  ------------------
25727|  1.72k|            &&
25728|  1.72k|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (25728:13): [True: 71, False: 1.65k]
  ------------------
25729|     71|            &&
25730|     71|            (b = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (25730:13): [True: 1, False: 70]
  ------------------
25731|  26.6k|        )
25732|      1|        {
25733|      1|            D(fprintf(stderr, "%*c+ invalid_kvpair_unpacking[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '**' bitwise_or"));
25734|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use dict unpacking in a dictionary value" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25735|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25735:18): [True: 1, False: 0]
  |  Branch (25735:34): [True: 0, False: 0]
  |  Branch (25735:57): [True: 1, False: 0]
  ------------------
25736|      1|                p->error_indicator = 1;
25737|      1|                p->level--;
25738|      1|                return NULL;
25739|      1|            }
25740|      0|            goto done;
25741|      1|        }
25742|  26.6k|        p->mark = _mark;
25743|  26.6k|        D(fprintf(stderr, "%*c%s invalid_kvpair_unpacking[%d-%d]: %s failed!\n", p->level, ' ',
25744|  26.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '**' bitwise_or"));
25745|  26.6k|    }
25746|  26.6k|    _res = NULL;
25747|  26.6k|  done:
25748|  26.6k|    p->level--;
25749|  26.6k|    return _res;
25750|  26.6k|}
parser.c:_tmp_148_rule:
36382|    657|{
36383|    657|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.31k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36383:9): [True: 0, False: 657]
  |  Branch (36383:35): [True: 0, False: 657]
  ------------------
36384|      0|        _Pypegen_stack_overflow(p);
36385|      0|    }
36386|    657|    if (p->error_indicator) {
  ------------------
  |  Branch (36386:9): [True: 0, False: 657]
  ------------------
36387|      0|        p->level--;
36388|      0|        return NULL;
36389|      0|    }
36390|    657|    void * _res = NULL;
36391|    657|    int _mark = p->mark;
36392|    657|    if (p->call_invalid_rules) { // invalid_kvpair
  ------------------
  |  Branch (36392:9): [True: 396, False: 261]
  ------------------
36393|    396|        if (p->error_indicator) {
  ------------------
  |  Branch (36393:13): [True: 0, False: 396]
  ------------------
36394|      0|            p->level--;
36395|      0|            return NULL;
36396|      0|        }
36397|    396|        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair"));
36398|    396|        void *invalid_kvpair_var;
36399|    396|        if (
36400|    396|            (invalid_kvpair_var = invalid_kvpair_rule(p))  // invalid_kvpair
  ------------------
  |  Branch (36400:13): [True: 0, False: 396]
  ------------------
36401|    396|        )
36402|      0|        {
36403|      0|            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair"));
36404|      0|            _res = invalid_kvpair_var;
36405|      0|            goto done;
36406|      0|        }
36407|    396|        p->mark = _mark;
36408|    396|        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
36409|    396|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kvpair"));
36410|    396|    }
36411|    657|    if (p->call_invalid_rules) { // invalid_kvpair_unpacking
  ------------------
  |  Branch (36411:9): [True: 396, False: 261]
  ------------------
36412|    396|        if (p->error_indicator) {
  ------------------
  |  Branch (36412:13): [True: 128, False: 268]
  ------------------
36413|    128|            p->level--;
36414|    128|            return NULL;
36415|    128|        }
36416|    268|        D(fprintf(stderr, "%*c> _tmp_148[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking"));
36417|    268|        void *invalid_kvpair_unpacking_var;
36418|    268|        if (
36419|    268|            (invalid_kvpair_unpacking_var = invalid_kvpair_unpacking_rule(p))  // invalid_kvpair_unpacking
  ------------------
  |  Branch (36419:13): [True: 0, False: 268]
  ------------------
36420|    268|        )
36421|      0|        {
36422|      0|            D(fprintf(stderr, "%*c+ _tmp_148[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kvpair_unpacking"));
36423|      0|            _res = invalid_kvpair_unpacking_var;
36424|      0|            goto done;
36425|      0|        }
36426|    268|        p->mark = _mark;
36427|    268|        D(fprintf(stderr, "%*c%s _tmp_148[%d-%d]: %s failed!\n", p->level, ' ',
36428|    268|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kvpair_unpacking"));
36429|    268|    }
36430|    529|    _res = NULL;
36431|    529|  done:
36432|    529|    p->level--;
36433|    529|    return _res;
36434|    529|}
parser.c:invalid_kvpair_rule:
25759|    396|{
25760|    396|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    792|#  define MAXSTACK 6000
  ------------------
  |  Branch (25760:9): [True: 0, False: 396]
  |  Branch (25760:35): [True: 0, False: 396]
  ------------------
25761|      0|        _Pypegen_stack_overflow(p);
25762|      0|    }
25763|    396|    if (p->error_indicator) {
  ------------------
  |  Branch (25763:9): [True: 0, False: 396]
  ------------------
25764|      0|        p->level--;
25765|      0|        return NULL;
25766|      0|    }
25767|    396|    void * _res = NULL;
25768|    396|    int _mark = p->mark;
25769|    396|    expr_ty _prefix_15_result = NULL;
25770|    396|    int _prefix_15_end = 0, _prefix_15_valid = 0;
25771|    396|    { // expression !(':')
25772|    396|        if (p->error_indicator) {
  ------------------
  |  Branch (25772:13): [True: 0, False: 396]
  ------------------
25773|      0|            p->level--;
25774|      0|            return NULL;
25775|      0|        }
25776|    396|        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !(':')"));
25777|    396|        expr_ty a;
25778|    396|        if (
25779|    396|            (a = ((!p->call_invalid_rules && _prefix_15_valid) ? (p->mark = _prefix_15_end, _prefix_15_result) : (_prefix_15_result = expression_rule(p), _prefix_15_end = p->mark, _prefix_15_valid = 1, _prefix_15_result)))  // expression
  ------------------
  |  Branch (25779:13): [True: 311, False: 85]
  |  Branch (25779:20): [True: 0, False: 396]
  |  Branch (25779:46): [True: 0, False: 0]
  ------------------
25780|    311|            &&
25781|    311|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 11)  // token=(':')
  ------------------
  |  Branch (25781:13): [True: 15, False: 296]
  ------------------
25782|    396|        )
25783|     15|        {
25784|     15|            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !(':')"));
25785|     15|            _res = RAISE_ERROR_KNOWN_LOCATION ( p , PyExc_SyntaxError , a -> lineno , a -> end_col_offset - 1 , a -> end_lineno , - 1 , "':' expected after dictionary key" );
25786|     15|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25786:18): [True: 15, False: 0]
  |  Branch (25786:34): [True: 0, False: 0]
  |  Branch (25786:57): [True: 15, False: 0]
  ------------------
25787|     15|                p->error_indicator = 1;
25788|     15|                p->level--;
25789|     15|                return NULL;
25790|     15|            }
25791|      0|            goto done;
25792|     15|        }
25793|    381|        p->mark = _mark;
25794|    381|        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
25795|    381|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !(':')"));
25796|    381|    }
25797|      0|    { // expression ':' '*' bitwise_or
25798|    381|        if (p->error_indicator) {
  ------------------
  |  Branch (25798:13): [True: 0, False: 381]
  ------------------
25799|      0|            p->level--;
25800|      0|            return NULL;
25801|      0|        }
25802|    381|        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
25803|    381|        Token * _literal;
25804|    381|        Token * a;
25805|    381|        expr_ty bitwise_or_var;
25806|    381|        expr_ty expression_var;
25807|    381|        if (
25808|    381|            (expression_var = ((!p->call_invalid_rules && _prefix_15_valid) ? (p->mark = _prefix_15_end, _prefix_15_result) : (_prefix_15_result = expression_rule(p), _prefix_15_end = p->mark, _prefix_15_valid = 1, _prefix_15_result)))  // expression
  ------------------
  |  Branch (25808:13): [True: 296, False: 85]
  |  Branch (25808:33): [True: 0, False: 381]
  |  Branch (25808:59): [True: 0, False: 0]
  ------------------
25809|    296|            &&
25810|    296|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25810:13): [True: 296, False: 0]
  ------------------
25811|    296|            &&
25812|    296|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (25812:13): [True: 32, False: 264]
  ------------------
25813|     32|            &&
25814|     32|            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (25814:13): [True: 1, False: 31]
  ------------------
25815|    381|        )
25816|      1|        {
25817|      1|            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '*' bitwise_or"));
25818|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use a starred expression in a dictionary value" );
  ------------------
  |  |  241|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
25819|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25819:18): [True: 1, False: 0]
  |  Branch (25819:34): [True: 0, False: 0]
  |  Branch (25819:57): [True: 1, False: 0]
  ------------------
25820|      1|                p->error_indicator = 1;
25821|      1|                p->level--;
25822|      1|                return NULL;
25823|      1|            }
25824|      0|            goto done;
25825|      1|        }
25826|    380|        p->mark = _mark;
25827|    380|        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
25828|    380|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '*' bitwise_or"));
25829|    380|    }
25830|      0|    { // expression ':' '**' bitwise_or
25831|    380|        if (p->error_indicator) {
  ------------------
  |  Branch (25831:13): [True: 31, False: 349]
  ------------------
25832|     31|            p->level--;
25833|     31|            return NULL;
25834|     31|        }
25835|    349|        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' '**' bitwise_or"));
25836|    349|        Token * _literal;
25837|    349|        Token * a;
25838|    349|        expr_ty bitwise_or_var;
25839|    349|        expr_ty expression_var;
25840|    349|        if (
25841|    349|            (expression_var = ((!p->call_invalid_rules && _prefix_15_valid) ? (p->mark = _prefix_15_end, _prefix_15_result) : (_prefix_15_result = expression_rule(p), _prefix_15_end = p->mark, _prefix_15_valid = 1, _prefix_15_result)))  // expression
  ------------------
  |  Branch (25841:13): [True: 264, False: 85]
  |  Branch (25841:33): [True: 0, False: 349]
  |  Branch (25841:59): [True: 0, False: 0]
  ------------------
25842|    264|            &&
25843|    264|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25843:13): [True: 264, False: 0]
  ------------------
25844|    264|            &&
25845|    264|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (25845:13): [True: 120, False: 144]
  ------------------
25846|    120|            &&
25847|    120|            (bitwise_or_var = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (25847:13): [True: 1, False: 119]
  ------------------
25848|    349|        )
25849|      1|        {
25850|      1|            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' '**' bitwise_or"));
25851|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "cannot use dict unpacking in a dictionary value" );
  ------------------
  |  |  241|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
25852|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25852:18): [True: 1, False: 0]
  |  Branch (25852:34): [True: 0, False: 0]
  |  Branch (25852:57): [True: 1, False: 0]
  ------------------
25853|      1|                p->error_indicator = 1;
25854|      1|                p->level--;
25855|      1|                return NULL;
25856|      1|            }
25857|      0|            goto done;
25858|      1|        }
25859|    348|        p->mark = _mark;
25860|    348|        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
25861|    348|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' '**' bitwise_or"));
25862|    348|    }
25863|      0|    { // expression ':' &('}' | ',')
25864|    348|        if (p->error_indicator) {
  ------------------
  |  Branch (25864:13): [True: 77, False: 271]
  ------------------
25865|     77|            p->level--;
25866|     77|            return NULL;
25867|     77|        }
25868|    271|        D(fprintf(stderr, "%*c> invalid_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
25869|    271|        Token * a;
25870|    271|        expr_ty expression_var;
25871|    271|        if (
25872|    271|            (expression_var = ((!p->call_invalid_rules && _prefix_15_valid) ? (p->mark = _prefix_15_end, _prefix_15_result) : (_prefix_15_result = expression_rule(p), _prefix_15_end = p->mark, _prefix_15_valid = 1, _prefix_15_result)))  // expression
  ------------------
  |  Branch (25872:13): [True: 186, False: 85]
  |  Branch (25872:33): [True: 0, False: 271]
  |  Branch (25872:59): [True: 0, False: 0]
  ------------------
25873|    186|            &&
25874|    186|            (a = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25874:13): [True: 186, False: 0]
  ------------------
25875|    186|            &&
25876|    186|            _PyPegen_lookahead(1, _tmp_149_rule, p)
  ------------------
  |  Branch (25876:13): [True: 3, False: 183]
  ------------------
25877|    271|        )
25878|      3|        {
25879|      3|            D(fprintf(stderr, "%*c+ invalid_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' &('}' | ',')"));
25880|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expression expected after dictionary key and ':'" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
25881|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25881:18): [True: 3, False: 0]
  |  Branch (25881:34): [True: 0, False: 0]
  |  Branch (25881:57): [True: 3, False: 0]
  ------------------
25882|      3|                p->error_indicator = 1;
25883|      3|                p->level--;
25884|      3|                return NULL;
25885|      3|            }
25886|      0|            goto done;
25887|      3|        }
25888|    268|        p->mark = _mark;
25889|    268|        D(fprintf(stderr, "%*c%s invalid_kvpair[%d-%d]: %s failed!\n", p->level, ' ',
25890|    268|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' &('}' | ',')"));
25891|    268|    }
25892|    268|    _res = NULL;
25893|    268|  done:
25894|    268|    p->level--;
25895|    268|    return _res;
25896|    268|}
parser.c:_tmp_149_rule:
36439|  1.51k|{
36440|  1.51k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.02k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36440:9): [True: 0, False: 1.51k]
  |  Branch (36440:35): [True: 0, False: 1.51k]
  ------------------
36441|      0|        _Pypegen_stack_overflow(p);
36442|      0|    }
36443|  1.51k|    if (p->error_indicator) {
  ------------------
  |  Branch (36443:9): [True: 0, False: 1.51k]
  ------------------
36444|      0|        p->level--;
36445|      0|        return NULL;
36446|      0|    }
36447|  1.51k|    void * _res = NULL;
36448|  1.51k|    int _mark = p->mark;
36449|  1.51k|    { // '}'
36450|  1.51k|        if (p->error_indicator) {
  ------------------
  |  Branch (36450:13): [True: 0, False: 1.51k]
  ------------------
36451|      0|            p->level--;
36452|      0|            return NULL;
36453|      0|        }
36454|  1.51k|        D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'}'"));
36455|  1.51k|        Token * _literal;
36456|  1.51k|        if (
36457|  1.51k|            (_literal = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (36457:13): [True: 4, False: 1.50k]
  ------------------
36458|  1.51k|        )
36459|      4|        {
36460|      4|            D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'}'"));
36461|      4|            _res = _literal;
36462|      4|            goto done;
36463|      4|        }
36464|  1.50k|        p->mark = _mark;
36465|  1.50k|        D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ',
36466|  1.50k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'}'"));
36467|  1.50k|    }
36468|      0|    { // ','
36469|  1.50k|        if (p->error_indicator) {
  ------------------
  |  Branch (36469:13): [True: 0, False: 1.50k]
  ------------------
36470|      0|            p->level--;
36471|      0|            return NULL;
36472|      0|        }
36473|  1.50k|        D(fprintf(stderr, "%*c> _tmp_149[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
36474|  1.50k|        Token * _literal;
36475|  1.50k|        if (
36476|  1.50k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (36476:13): [True: 4, False: 1.50k]
  ------------------
36477|  1.50k|        )
36478|      4|        {
36479|      4|            D(fprintf(stderr, "%*c+ _tmp_149[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
36480|      4|            _res = _literal;
36481|      4|            goto done;
36482|      4|        }
36483|  1.50k|        p->mark = _mark;
36484|  1.50k|        D(fprintf(stderr, "%*c%s _tmp_149[%d-%d]: %s failed!\n", p->level, ' ',
36485|  1.50k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
36486|  1.50k|    }
36487|  1.50k|    _res = NULL;
36488|  1.51k|  done:
36489|  1.51k|    p->level--;
36490|  1.51k|    return _res;
36491|  1.50k|}
parser.c:set_rule:
17401|  26.1k|{
17402|  26.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  52.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (17402:9): [True: 0, False: 26.1k]
  |  Branch (17402:35): [True: 0, False: 26.1k]
  ------------------
17403|      0|        _Pypegen_stack_overflow(p);
17404|      0|    }
17405|  26.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (17405:9): [True: 0, False: 26.1k]
  ------------------
17406|      0|        p->level--;
17407|      0|        return NULL;
17408|      0|    }
17409|  26.1k|    expr_ty _res = NULL;
17410|  26.1k|    int _mark = p->mark;
17411|  26.1k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (17411:9): [True: 0, False: 26.1k]
  |  Branch (17411:31): [True: 0, False: 0]
  ------------------
17412|      0|        p->error_indicator = 1;
17413|      0|        p->level--;
17414|      0|        return NULL;
17415|      0|    }
17416|  26.1k|    int _start_lineno = p->tokens[_mark]->lineno;
17417|  26.1k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  26.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 26.1k]
  |  |  ------------------
  ------------------
17418|  26.1k|    int _start_col_offset = p->tokens[_mark]->col_offset;
17419|  26.1k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  26.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 26.1k]
  |  |  ------------------
  ------------------
17420|  26.1k|    { // '{' display_items '}'
17421|  26.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (17421:13): [True: 0, False: 26.1k]
  ------------------
17422|      0|            p->level--;
17423|      0|            return NULL;
17424|      0|        }
17425|  26.1k|        D(fprintf(stderr, "%*c> set[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' display_items '}'"));
17426|  26.1k|        Token * _literal;
17427|  26.1k|        Token * _literal_1;
17428|  26.1k|        asdl_expr_seq* a;
17429|  26.1k|        if (
17430|  26.1k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (17430:13): [True: 26.1k, False: 0]
  ------------------
17431|  26.1k|            &&
17432|  26.1k|            (a = display_items_rule(p))  // display_items
  ------------------
  |  Branch (17432:13): [True: 22.2k, False: 3.90k]
  ------------------
17433|  22.2k|            &&
17434|  22.2k|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (17434:13): [True: 18.3k, False: 3.93k]
  ------------------
17435|  26.1k|        )
17436|  18.3k|        {
17437|  18.3k|            D(fprintf(stderr, "%*c+ set[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' display_items '}'"));
17438|  18.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
17439|  18.3k|            if (_token == NULL) {
  ------------------
  |  Branch (17439:17): [True: 0, False: 18.3k]
  ------------------
17440|      0|                p->level--;
17441|      0|                return NULL;
17442|      0|            }
17443|  18.3k|            int _end_lineno = _token->end_lineno;
17444|  18.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
17445|  18.3k|            int _end_col_offset = _token->end_col_offset;
17446|  18.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
17447|  18.3k|            _res = _PyAST_Set ( a , EXTRA );
  ------------------
  |  |  307|  18.3k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
17448|  18.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (17448:18): [True: 0, False: 18.3k]
  |  Branch (17448:34): [True: 0, False: 18.3k]
  |  Branch (17448:57): [True: 0, False: 0]
  ------------------
17449|      0|                p->error_indicator = 1;
17450|      0|                p->level--;
17451|      0|                return NULL;
17452|      0|            }
17453|  18.3k|            goto done;
17454|  18.3k|        }
17455|  7.84k|        p->mark = _mark;
17456|  7.84k|        D(fprintf(stderr, "%*c%s set[%d-%d]: %s failed!\n", p->level, ' ',
17457|  7.84k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' display_items '}'"));
17458|  7.84k|    }
17459|  7.84k|    _res = NULL;
17460|  26.1k|  done:
17461|  26.1k|    p->level--;
17462|  26.1k|    return _res;
17463|  7.84k|}
parser.c:invalid_factor_rule:
27102|  71.8k|{
27103|  71.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   143k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27103:9): [True: 0, False: 71.8k]
  |  Branch (27103:35): [True: 0, False: 71.8k]
  ------------------
27104|      0|        _Pypegen_stack_overflow(p);
27105|      0|    }
27106|  71.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (27106:9): [True: 0, False: 71.8k]
  ------------------
27107|      0|        p->level--;
27108|      0|        return NULL;
27109|      0|    }
27110|  71.8k|    void * _res = NULL;
27111|  71.8k|    int _mark = p->mark;
27112|  71.8k|    { // ('+' | '-' | '~') 'not' factor
27113|  71.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (27113:13): [True: 0, False: 71.8k]
  ------------------
27114|      0|            p->level--;
27115|      0|            return NULL;
27116|      0|        }
27117|  71.8k|        D(fprintf(stderr, "%*c> invalid_factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('+' | '-' | '~') 'not' factor"));
27118|  71.8k|        void *_tmp_156_var;
27119|  71.8k|        Token * a;
27120|  71.8k|        expr_ty b;
27121|  71.8k|        if (
27122|  71.8k|            (_tmp_156_var = _tmp_156_rule(p))  // '+' | '-' | '~'
  ------------------
  |  Branch (27122:13): [True: 1.81k, False: 70.0k]
  ------------------
27123|  1.81k|            &&
27124|  1.81k|            (a = _PyPegen_expect_token(p, 721))  // token='not'
  ------------------
  |  Branch (27124:13): [True: 273, False: 1.54k]
  ------------------
27125|    273|            &&
27126|    273|            (b = factor_rule(p))  // factor
  ------------------
  |  Branch (27126:13): [True: 2, False: 271]
  ------------------
27127|  71.8k|        )
27128|      2|        {
27129|      2|            D(fprintf(stderr, "%*c+ invalid_factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('+' | '-' | '~') 'not' factor"));
27130|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "'not' after an operator must be parenthesized" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
27131|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27131:18): [True: 2, False: 0]
  |  Branch (27131:34): [True: 0, False: 0]
  |  Branch (27131:57): [True: 2, False: 0]
  ------------------
27132|      2|                p->error_indicator = 1;
27133|      2|                p->level--;
27134|      2|                return NULL;
27135|      2|            }
27136|      0|            goto done;
27137|      2|        }
27138|  71.8k|        p->mark = _mark;
27139|  71.8k|        D(fprintf(stderr, "%*c%s invalid_factor[%d-%d]: %s failed!\n", p->level, ' ',
27140|  71.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('+' | '-' | '~') 'not' factor"));
27141|  71.8k|    }
27142|  71.8k|    _res = NULL;
27143|  71.8k|  done:
27144|  71.8k|    p->level--;
27145|  71.8k|    return _res;
27146|  71.8k|}
parser.c:_tmp_156_rule:
36974|  71.8k|{
36975|  71.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   143k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36975:9): [True: 0, False: 71.8k]
  |  Branch (36975:35): [True: 0, False: 71.8k]
  ------------------
36976|      0|        _Pypegen_stack_overflow(p);
36977|      0|    }
36978|  71.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (36978:9): [True: 0, False: 71.8k]
  ------------------
36979|      0|        p->level--;
36980|      0|        return NULL;
36981|      0|    }
36982|  71.8k|    void * _res = NULL;
36983|  71.8k|    int _mark = p->mark;
36984|  71.8k|    { // '+'
36985|  71.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (36985:13): [True: 0, False: 71.8k]
  ------------------
36986|      0|            p->level--;
36987|      0|            return NULL;
36988|      0|        }
36989|  71.8k|        D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
36990|  71.8k|        Token * _literal;
36991|  71.8k|        if (
36992|  71.8k|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (36992:13): [True: 604, False: 71.2k]
  ------------------
36993|  71.8k|        )
36994|    604|        {
36995|    604|            D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'"));
36996|    604|            _res = _literal;
36997|    604|            goto done;
36998|    604|        }
36999|  71.2k|        p->mark = _mark;
37000|  71.2k|        D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ',
37001|  71.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'"));
37002|  71.2k|    }
37003|      0|    { // '-'
37004|  71.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (37004:13): [True: 0, False: 71.2k]
  ------------------
37005|      0|            p->level--;
37006|      0|            return NULL;
37007|      0|        }
37008|  71.2k|        D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
37009|  71.2k|        Token * _literal;
37010|  71.2k|        if (
37011|  71.2k|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (37011:13): [True: 812, False: 70.4k]
  ------------------
37012|  71.2k|        )
37013|    812|        {
37014|    812|            D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'"));
37015|    812|            _res = _literal;
37016|    812|            goto done;
37017|    812|        }
37018|  70.4k|        p->mark = _mark;
37019|  70.4k|        D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ',
37020|  70.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'"));
37021|  70.4k|    }
37022|      0|    { // '~'
37023|  70.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (37023:13): [True: 0, False: 70.4k]
  ------------------
37024|      0|            p->level--;
37025|      0|            return NULL;
37026|      0|        }
37027|  70.4k|        D(fprintf(stderr, "%*c> _tmp_156[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~'"));
37028|  70.4k|        Token * _literal;
37029|  70.4k|        if (
37030|  70.4k|            (_literal = _PyPegen_expect_token(p, 31))  // token='~'
  ------------------
  |  Branch (37030:13): [True: 398, False: 70.0k]
  ------------------
37031|  70.4k|        )
37032|    398|        {
37033|    398|            D(fprintf(stderr, "%*c+ _tmp_156[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~'"));
37034|    398|            _res = _literal;
37035|    398|            goto done;
37036|    398|        }
37037|  70.0k|        p->mark = _mark;
37038|  70.0k|        D(fprintf(stderr, "%*c%s _tmp_156[%d-%d]: %s failed!\n", p->level, ' ',
37039|  70.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~'"));
37040|  70.0k|    }
37041|  70.0k|    _res = NULL;
37042|  71.8k|  done:
37043|  71.8k|    p->level--;
37044|  71.8k|    return _res;
37045|  70.0k|}
parser.c:invalid_arithmetic_rule:
27050|   449k|{
27051|   449k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   899k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27051:9): [True: 0, False: 449k]
  |  Branch (27051:35): [True: 0, False: 449k]
  ------------------
27052|      0|        _Pypegen_stack_overflow(p);
27053|      0|    }
27054|   449k|    if (p->error_indicator) {
  ------------------
  |  Branch (27054:9): [True: 0, False: 449k]
  ------------------
27055|      0|        p->level--;
27056|      0|        return NULL;
27057|      0|    }
27058|   449k|    void * _res = NULL;
27059|   449k|    int _mark = p->mark;
27060|   449k|    { // sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion
27061|   449k|        if (p->error_indicator) {
  ------------------
  |  Branch (27061:13): [True: 0, False: 449k]
  ------------------
27062|      0|            p->level--;
27063|      0|            return NULL;
27064|      0|        }
27065|   449k|        D(fprintf(stderr, "%*c> invalid_arithmetic[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion"));
27066|   449k|        void *_tmp_155_var;
27067|   449k|        Token * a;
27068|   449k|        expr_ty b;
27069|   449k|        expr_ty sum_var;
27070|   449k|        if (
27071|   449k|            (sum_var = sum_rule(p))  // sum
  ------------------
  |  Branch (27071:13): [True: 172k, False: 277k]
  ------------------
27072|   172k|            &&
27073|   172k|            (_tmp_155_var = _tmp_155_rule(p))  // '+' | '-' | '*' | '/' | '%' | '//' | '@'
  ------------------
  |  Branch (27073:13): [True: 2.94k, False: 169k]
  ------------------
27074|  2.94k|            &&
27075|  2.94k|            (a = _PyPegen_expect_token(p, 721))  // token='not'
  ------------------
  |  Branch (27075:13): [True: 125, False: 2.82k]
  ------------------
27076|    125|            &&
27077|    125|            (b = inversion_rule(p))  // inversion
  ------------------
  |  Branch (27077:13): [True: 2, False: 123]
  ------------------
27078|   449k|        )
27079|      2|        {
27080|      2|            D(fprintf(stderr, "%*c+ invalid_arithmetic[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion"));
27081|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "'not' after an operator must be parenthesized" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
27082|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27082:18): [True: 2, False: 0]
  |  Branch (27082:34): [True: 0, False: 0]
  |  Branch (27082:57): [True: 2, False: 0]
  ------------------
27083|      2|                p->error_indicator = 1;
27084|      2|                p->level--;
27085|      2|                return NULL;
27086|      2|            }
27087|      0|            goto done;
27088|      2|        }
27089|   449k|        p->mark = _mark;
27090|   449k|        D(fprintf(stderr, "%*c%s invalid_arithmetic[%d-%d]: %s failed!\n", p->level, ' ',
27091|   449k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum ('+' | '-' | '*' | '/' | '%' | '//' | '@') 'not' inversion"));
27092|   449k|    }
27093|   449k|    _res = NULL;
27094|   449k|  done:
27095|   449k|    p->level--;
27096|   449k|    return _res;
27097|   449k|}
parser.c:_tmp_155_rule:
36822|   172k|{
36823|   172k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   345k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36823:9): [True: 0, False: 172k]
  |  Branch (36823:35): [True: 0, False: 172k]
  ------------------
36824|      0|        _Pypegen_stack_overflow(p);
36825|      0|    }
36826|   172k|    if (p->error_indicator) {
  ------------------
  |  Branch (36826:9): [True: 0, False: 172k]
  ------------------
36827|      0|        p->level--;
36828|      0|        return NULL;
36829|      0|    }
36830|   172k|    void * _res = NULL;
36831|   172k|    int _mark = p->mark;
36832|   172k|    { // '+'
36833|   172k|        if (p->error_indicator) {
  ------------------
  |  Branch (36833:13): [True: 0, False: 172k]
  ------------------
36834|      0|            p->level--;
36835|      0|            return NULL;
36836|      0|        }
36837|   172k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
36838|   172k|        Token * _literal;
36839|   172k|        if (
36840|   172k|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (36840:13): [True: 364, False: 172k]
  ------------------
36841|   172k|        )
36842|    364|        {
36843|    364|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'"));
36844|    364|            _res = _literal;
36845|    364|            goto done;
36846|    364|        }
36847|   172k|        p->mark = _mark;
36848|   172k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36849|   172k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'"));
36850|   172k|    }
36851|      0|    { // '-'
36852|   172k|        if (p->error_indicator) {
  ------------------
  |  Branch (36852:13): [True: 0, False: 172k]
  ------------------
36853|      0|            p->level--;
36854|      0|            return NULL;
36855|      0|        }
36856|   172k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
36857|   172k|        Token * _literal;
36858|   172k|        if (
36859|   172k|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (36859:13): [True: 538, False: 171k]
  ------------------
36860|   172k|        )
36861|    538|        {
36862|    538|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'"));
36863|    538|            _res = _literal;
36864|    538|            goto done;
36865|    538|        }
36866|   171k|        p->mark = _mark;
36867|   171k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36868|   171k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'"));
36869|   171k|    }
36870|      0|    { // '*'
36871|   171k|        if (p->error_indicator) {
  ------------------
  |  Branch (36871:13): [True: 0, False: 171k]
  ------------------
36872|      0|            p->level--;
36873|      0|            return NULL;
36874|      0|        }
36875|   171k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
36876|   171k|        Token * _literal;
36877|   171k|        if (
36878|   171k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (36878:13): [True: 783, False: 170k]
  ------------------
36879|   171k|        )
36880|    783|        {
36881|    783|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
36882|    783|            _res = _literal;
36883|    783|            goto done;
36884|    783|        }
36885|   170k|        p->mark = _mark;
36886|   170k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36887|   170k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
36888|   170k|    }
36889|      0|    { // '/'
36890|   170k|        if (p->error_indicator) {
  ------------------
  |  Branch (36890:13): [True: 0, False: 170k]
  ------------------
36891|      0|            p->level--;
36892|      0|            return NULL;
36893|      0|        }
36894|   170k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'"));
36895|   170k|        Token * _literal;
36896|   170k|        if (
36897|   170k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (36897:13): [True: 111, False: 170k]
  ------------------
36898|   170k|        )
36899|    111|        {
36900|    111|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'"));
36901|    111|            _res = _literal;
36902|    111|            goto done;
36903|    111|        }
36904|   170k|        p->mark = _mark;
36905|   170k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36906|   170k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'"));
36907|   170k|    }
36908|      0|    { // '%'
36909|   170k|        if (p->error_indicator) {
  ------------------
  |  Branch (36909:13): [True: 0, False: 170k]
  ------------------
36910|      0|            p->level--;
36911|      0|            return NULL;
36912|      0|        }
36913|   170k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%'"));
36914|   170k|        Token * _literal;
36915|   170k|        if (
36916|   170k|            (_literal = _PyPegen_expect_token(p, 24))  // token='%'
  ------------------
  |  Branch (36916:13): [True: 401, False: 170k]
  ------------------
36917|   170k|        )
36918|    401|        {
36919|    401|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%'"));
36920|    401|            _res = _literal;
36921|    401|            goto done;
36922|    401|        }
36923|   170k|        p->mark = _mark;
36924|   170k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36925|   170k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'%'"));
36926|   170k|    }
36927|      0|    { // '//'
36928|   170k|        if (p->error_indicator) {
  ------------------
  |  Branch (36928:13): [True: 0, False: 170k]
  ------------------
36929|      0|            p->level--;
36930|      0|            return NULL;
36931|      0|        }
36932|   170k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//'"));
36933|   170k|        Token * _literal;
36934|   170k|        if (
36935|   170k|            (_literal = _PyPegen_expect_token(p, 47))  // token='//'
  ------------------
  |  Branch (36935:13): [True: 424, False: 169k]
  ------------------
36936|   170k|        )
36937|    424|        {
36938|    424|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//'"));
36939|    424|            _res = _literal;
36940|    424|            goto done;
36941|    424|        }
36942|   169k|        p->mark = _mark;
36943|   169k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36944|   169k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'//'"));
36945|   169k|    }
36946|      0|    { // '@'
36947|   169k|        if (p->error_indicator) {
  ------------------
  |  Branch (36947:13): [True: 0, False: 169k]
  ------------------
36948|      0|            p->level--;
36949|      0|            return NULL;
36950|      0|        }
36951|   169k|        D(fprintf(stderr, "%*c> _tmp_155[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
36952|   169k|        Token * _literal;
36953|   169k|        if (
36954|   169k|            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
  ------------------
  |  Branch (36954:13): [True: 325, False: 169k]
  ------------------
36955|   169k|        )
36956|    325|        {
36957|    325|            D(fprintf(stderr, "%*c+ _tmp_155[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
36958|    325|            _res = _literal;
36959|    325|            goto done;
36960|    325|        }
36961|   169k|        p->mark = _mark;
36962|   169k|        D(fprintf(stderr, "%*c%s _tmp_155[%d-%d]: %s failed!\n", p->level, ' ',
36963|   169k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
36964|   169k|    }
36965|   169k|    _res = NULL;
36966|   172k|  done:
36967|   172k|    p->level--;
36968|   172k|    return _res;
36969|   169k|}
parser.c:invalid_bitwise_and_rule:
27198|   441k|{
27199|   441k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   883k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27199:9): [True: 0, False: 441k]
  |  Branch (27199:35): [True: 0, False: 441k]
  ------------------
27200|      0|        _Pypegen_stack_overflow(p);
27201|      0|    }
27202|   441k|    if (p->error_indicator) {
  ------------------
  |  Branch (27202:9): [True: 0, False: 441k]
  ------------------
27203|      0|        p->level--;
27204|      0|        return NULL;
27205|      0|    }
27206|   441k|    void * _res = NULL;
27207|   441k|    int _mark = p->mark;
27208|   441k|    { // bitwise_and '&' '&'
27209|   441k|        if (p->error_indicator) {
  ------------------
  |  Branch (27209:13): [True: 0, False: 441k]
  ------------------
27210|      0|            p->level--;
27211|      0|            return NULL;
27212|      0|        }
27213|   441k|        D(fprintf(stderr, "%*c> invalid_bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' '&'"));
27214|   441k|        expr_ty a;
27215|   441k|        Token * b;
27216|   441k|        Token * c;
27217|   441k|        if (
27218|   441k|            (a = bitwise_and_rule(p))  // bitwise_and
  ------------------
  |  Branch (27218:13): [True: 168k, False: 273k]
  ------------------
27219|   168k|            &&
27220|   168k|            (b = _PyPegen_expect_token(p, 19))  // token='&'
  ------------------
  |  Branch (27220:13): [True: 122, False: 168k]
  ------------------
27221|    122|            &&
27222|    122|            (c = _PyPegen_expect_token(p, 19))  // token='&'
  ------------------
  |  Branch (27222:13): [True: 6, False: 116]
  ------------------
27223|   441k|        )
27224|      6|        {
27225|      6|            D(fprintf(stderr, "%*c+ invalid_bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' '&'"));
27226|      6|            _res = _PyPegen_tokens_are_adjacent ( b , c ) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE ( b , c , "invalid syntax.  Maybe you meant 'and' or '&' instead of '&&'?" ) : NULL;
  ------------------
  |  |  237|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (27226:20): [True: 3, False: 3]
  ------------------
27227|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27227:18): [True: 6, False: 0]
  |  Branch (27227:34): [True: 0, False: 0]
  |  Branch (27227:57): [True: 3, False: 3]
  ------------------
27228|      3|                p->error_indicator = 1;
27229|      3|                p->level--;
27230|      3|                return NULL;
27231|      3|            }
27232|      3|            goto done;
27233|      6|        }
27234|   441k|        p->mark = _mark;
27235|   441k|        D(fprintf(stderr, "%*c%s invalid_bitwise_and[%d-%d]: %s failed!\n", p->level, ' ',
27236|   441k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and '&' '&'"));
27237|   441k|    }
27238|   441k|    _res = NULL;
27239|   441k|  done:
27240|   441k|    p->level--;
27241|   441k|    return _res;
27242|   441k|}
parser.c:invalid_bitwise_or_rule:
27248|   430k|{
27249|   430k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   860k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27249:9): [True: 0, False: 430k]
  |  Branch (27249:35): [True: 0, False: 430k]
  ------------------
27250|      0|        _Pypegen_stack_overflow(p);
27251|      0|    }
27252|   430k|    if (p->error_indicator) {
  ------------------
  |  Branch (27252:9): [True: 0, False: 430k]
  ------------------
27253|      0|        p->level--;
27254|      0|        return NULL;
27255|      0|    }
27256|   430k|    void * _res = NULL;
27257|   430k|    int _mark = p->mark;
27258|   430k|    { // bitwise_or '|' '|'
27259|   430k|        if (p->error_indicator) {
  ------------------
  |  Branch (27259:13): [True: 0, False: 430k]
  ------------------
27260|      0|            p->level--;
27261|      0|            return NULL;
27262|      0|        }
27263|   430k|        D(fprintf(stderr, "%*c> invalid_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' '|'"));
27264|   430k|        expr_ty a;
27265|   430k|        Token * b;
27266|   430k|        Token * c;
27267|   430k|        if (
27268|   430k|            (a = bitwise_or_rule(p))  // bitwise_or
  ------------------
  |  Branch (27268:13): [True: 162k, False: 267k]
  ------------------
27269|   162k|            &&
27270|   162k|            (b = _PyPegen_expect_token(p, 18))  // token='|'
  ------------------
  |  Branch (27270:13): [True: 478, False: 162k]
  ------------------
27271|    478|            &&
27272|    478|            (c = _PyPegen_expect_token(p, 18))  // token='|'
  ------------------
  |  Branch (27272:13): [True: 15, False: 463]
  ------------------
27273|   430k|        )
27274|     15|        {
27275|     15|            D(fprintf(stderr, "%*c+ invalid_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' '|'"));
27276|     15|            _res = _PyPegen_tokens_are_adjacent ( b , c ) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE ( b , c , "invalid syntax.  Maybe you meant 'or' or '|' instead of '||'?" ) : NULL;
  ------------------
  |  |  237|      5|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (27276:20): [True: 5, False: 10]
  ------------------
27277|     15|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27277:18): [True: 15, False: 0]
  |  Branch (27277:34): [True: 0, False: 0]
  |  Branch (27277:57): [True: 5, False: 10]
  ------------------
27278|      5|                p->error_indicator = 1;
27279|      5|                p->level--;
27280|      5|                return NULL;
27281|      5|            }
27282|     10|            goto done;
27283|     15|        }
27284|   430k|        p->mark = _mark;
27285|   430k|        D(fprintf(stderr, "%*c%s invalid_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ',
27286|   430k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or '|' '|'"));
27287|   430k|    }
27288|   430k|    _res = NULL;
27289|   430k|  done:
27290|   430k|    p->level--;
27291|   430k|    return _res;
27292|   430k|}
parser.c:_tmp_117_rule:
34547|    120|{
34548|    120|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    240|#  define MAXSTACK 6000
  ------------------
  |  Branch (34548:9): [True: 0, False: 120]
  |  Branch (34548:35): [True: 0, False: 120]
  ------------------
34549|      0|        _Pypegen_stack_overflow(p);
34550|      0|    }
34551|    120|    if (p->error_indicator) {
  ------------------
  |  Branch (34551:9): [True: 0, False: 120]
  ------------------
34552|      0|        p->level--;
34553|      0|        return NULL;
34554|      0|    }
34555|    120|    void * _res = NULL;
34556|    120|    int _mark = p->mark;
34557|    120|    { // '='
34558|    120|        if (p->error_indicator) {
  ------------------
  |  Branch (34558:13): [True: 0, False: 120]
  ------------------
34559|      0|            p->level--;
34560|      0|            return NULL;
34561|      0|        }
34562|    120|        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
34563|    120|        Token * _literal;
34564|    120|        if (
34565|    120|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (34565:13): [True: 50, False: 70]
  ------------------
34566|    120|        )
34567|     50|        {
34568|     50|            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='"));
34569|     50|            _res = _literal;
34570|     50|            goto done;
34571|     50|        }
34572|     70|        p->mark = _mark;
34573|     70|        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34574|     70|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='"));
34575|     70|    }
34576|      0|    { // ':='
34577|     70|        if (p->error_indicator) {
  ------------------
  |  Branch (34577:13): [True: 0, False: 70]
  ------------------
34578|      0|            p->level--;
34579|      0|            return NULL;
34580|      0|        }
34581|     70|        D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':='"));
34582|     70|        Token * _literal;
34583|     70|        if (
34584|     70|            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
  ------------------
  |  Branch (34584:13): [True: 6, False: 64]
  ------------------
34585|     70|        )
34586|      6|        {
34587|      6|            D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':='"));
34588|      6|            _res = _literal;
34589|      6|            goto done;
34590|      6|        }
34591|     64|        p->mark = _mark;
34592|     64|        D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ',
34593|     64|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':='"));
34594|     64|    }
34595|     64|    _res = NULL;
34596|    120|  done:
34597|    120|    p->level--;
34598|    120|    return _res;
34599|     64|}
parser.c:_tmp_118_rule:
34604|   105k|{
34605|   105k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   211k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34605:9): [True: 0, False: 105k]
  |  Branch (34605:35): [True: 0, False: 105k]
  ------------------
34606|      0|        _Pypegen_stack_overflow(p);
34607|      0|    }
34608|   105k|    if (p->error_indicator) {
  ------------------
  |  Branch (34608:9): [True: 0, False: 105k]
  ------------------
34609|      0|        p->level--;
34610|      0|        return NULL;
34611|      0|    }
34612|   105k|    void * _res = NULL;
34613|   105k|    int _mark = p->mark;
34614|   105k|    { // list
34615|   105k|        if (p->error_indicator) {
  ------------------
  |  Branch (34615:13): [True: 0, False: 105k]
  ------------------
34616|      0|            p->level--;
34617|      0|            return NULL;
34618|      0|        }
34619|   105k|        D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
34620|   105k|        expr_ty list_var;
34621|   105k|        if (
34622|   105k|            (list_var = list_rule(p))  // list
  ------------------
  |  Branch (34622:13): [True: 1.16k, False: 104k]
  ------------------
34623|   105k|        )
34624|  1.16k|        {
34625|  1.16k|            D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
34626|  1.16k|            _res = list_var;
34627|  1.16k|            goto done;
34628|  1.16k|        }
34629|   104k|        p->mark = _mark;
34630|   104k|        D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ',
34631|   104k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
34632|   104k|    }
34633|      0|    { // tuple
34634|   104k|        if (p->error_indicator) {
  ------------------
  |  Branch (34634:13): [True: 73, False: 104k]
  ------------------
34635|     73|            p->level--;
34636|     73|            return NULL;
34637|     73|        }
34638|   104k|        D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
34639|   104k|        expr_ty tuple_var;
34640|   104k|        if (
34641|   104k|            (tuple_var = tuple_rule(p))  // tuple
  ------------------
  |  Branch (34641:13): [True: 1.30k, False: 103k]
  ------------------
34642|   104k|        )
34643|  1.30k|        {
34644|  1.30k|            D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
34645|  1.30k|            _res = tuple_var;
34646|  1.30k|            goto done;
34647|  1.30k|        }
34648|   103k|        p->mark = _mark;
34649|   103k|        D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ',
34650|   103k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
34651|   103k|    }
34652|      0|    { // genexp
34653|   103k|        if (p->error_indicator) {
  ------------------
  |  Branch (34653:13): [True: 89, False: 103k]
  ------------------
34654|     89|            p->level--;
34655|     89|            return NULL;
34656|     89|        }
34657|   103k|        D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp"));
34658|   103k|        expr_ty genexp_var;
34659|   103k|        if (
34660|   103k|            (genexp_var = genexp_rule(p))  // genexp
  ------------------
  |  Branch (34660:13): [True: 344, False: 102k]
  ------------------
34661|   103k|        )
34662|    344|        {
34663|    344|            D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp"));
34664|    344|            _res = genexp_var;
34665|    344|            goto done;
34666|    344|        }
34667|   102k|        p->mark = _mark;
34668|   102k|        D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ',
34669|   102k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp"));
34670|   102k|    }
34671|      0|    { // 'True'
34672|   102k|        if (p->error_indicator) {
  ------------------
  |  Branch (34672:13): [True: 6, False: 102k]
  ------------------
34673|      6|            p->level--;
34674|      6|            return NULL;
34675|      6|        }
34676|   102k|        D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
34677|   102k|        Token * _keyword;
34678|   102k|        if (
34679|   102k|            (_keyword = _PyPegen_expect_token(p, 627))  // token='True'
  ------------------
  |  Branch (34679:13): [True: 338, False: 102k]
  ------------------
34680|   102k|        )
34681|    338|        {
34682|    338|            D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
34683|    338|            _res = _keyword;
34684|    338|            goto done;
34685|    338|        }
34686|   102k|        p->mark = _mark;
34687|   102k|        D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ',
34688|   102k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
34689|   102k|    }
34690|      0|    { // 'None'
34691|   102k|        if (p->error_indicator) {
  ------------------
  |  Branch (34691:13): [True: 0, False: 102k]
  ------------------
34692|      0|            p->level--;
34693|      0|            return NULL;
34694|      0|        }
34695|   102k|        D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
34696|   102k|        Token * _keyword;
34697|   102k|        if (
34698|   102k|            (_keyword = _PyPegen_expect_token(p, 628))  // token='None'
  ------------------
  |  Branch (34698:13): [True: 41, False: 102k]
  ------------------
34699|   102k|        )
34700|     41|        {
34701|     41|            D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
34702|     41|            _res = _keyword;
34703|     41|            goto done;
34704|     41|        }
34705|   102k|        p->mark = _mark;
34706|   102k|        D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ',
34707|   102k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
34708|   102k|    }
34709|      0|    { // 'False'
34710|   102k|        if (p->error_indicator) {
  ------------------
  |  Branch (34710:13): [True: 0, False: 102k]
  ------------------
34711|      0|            p->level--;
34712|      0|            return NULL;
34713|      0|        }
34714|   102k|        D(fprintf(stderr, "%*c> _tmp_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
34715|   102k|        Token * _keyword;
34716|   102k|        if (
34717|   102k|            (_keyword = _PyPegen_expect_token(p, 629))  // token='False'
  ------------------
  |  Branch (34717:13): [True: 212, False: 102k]
  ------------------
34718|   102k|        )
34719|    212|        {
34720|    212|            D(fprintf(stderr, "%*c+ _tmp_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
34721|    212|            _res = _keyword;
34722|    212|            goto done;
34723|    212|        }
34724|   102k|        p->mark = _mark;
34725|   102k|        D(fprintf(stderr, "%*c%s _tmp_118[%d-%d]: %s failed!\n", p->level, ' ',
34726|   102k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
34727|   102k|    }
34728|   102k|    _res = NULL;
34729|   105k|  done:
34730|   105k|    p->level--;
34731|   105k|    return _res;
34732|   102k|}
parser.c:expression_rule:
11551|  2.39M|{
11552|  2.39M|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.79M|#  define MAXSTACK 6000
  ------------------
  |  Branch (11552:9): [True: 1, False: 2.39M]
  |  Branch (11552:35): [True: 0, False: 2.39M]
  ------------------
11553|      1|        _Pypegen_stack_overflow(p);
11554|      1|    }
11555|  2.39M|    if (p->error_indicator) {
  ------------------
  |  Branch (11555:9): [True: 1, False: 2.39M]
  ------------------
11556|      1|        p->level--;
11557|      1|        return NULL;
11558|      1|    }
11559|  2.39M|    expr_ty _res = NULL;
11560|  2.39M|    if (_PyPegen_is_memoized(p, expression_type, &_res)) {
  ------------------
  |  |  198|  2.39M|#define expression_type 1109
  ------------------
  |  Branch (11560:9): [True: 1.31M, False: 1.08M]
  ------------------
11561|  1.31M|        p->level--;
11562|  1.31M|        return _res;
11563|  1.31M|    }
11564|  1.08M|    int _mark = p->mark;
11565|  1.08M|    if (p->call_invalid_rules) { // invalid_if_expression
  ------------------
  |  Branch (11565:9): [True: 323k, False: 757k]
  ------------------
11566|   323k|        if (p->error_indicator) {
  ------------------
  |  Branch (11566:13): [True: 0, False: 323k]
  ------------------
11567|      0|            p->level--;
11568|      0|            return NULL;
11569|      0|        }
11570|   323k|        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_expression"));
11571|   323k|        void *invalid_if_expression_var;
11572|   323k|        if (
11573|   323k|            (invalid_if_expression_var = invalid_if_expression_rule(p))  // invalid_if_expression
  ------------------
  |  Branch (11573:13): [True: 0, False: 323k]
  ------------------
11574|   323k|        )
11575|      0|        {
11576|      0|            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_expression"));
11577|      0|            _res = invalid_if_expression_var;
11578|      0|            goto done;
11579|      0|        }
11580|   323k|        p->mark = _mark;
11581|   323k|        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11582|   323k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_expression"));
11583|   323k|    }
11584|  1.08M|    if (p->call_invalid_rules) { // invalid_expression
  ------------------
  |  Branch (11584:9): [True: 323k, False: 757k]
  ------------------
11585|   323k|        if (p->error_indicator) {
  ------------------
  |  Branch (11585:13): [True: 31.6k, False: 291k]
  ------------------
11586|  31.6k|            p->level--;
11587|  31.6k|            return NULL;
11588|  31.6k|        }
11589|   291k|        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_expression"));
11590|   291k|        void *invalid_expression_var;
11591|   291k|        if (
11592|   291k|            (invalid_expression_var = invalid_expression_rule(p))  // invalid_expression
  ------------------
  |  Branch (11592:13): [True: 0, False: 291k]
  ------------------
11593|   291k|        )
11594|      0|        {
11595|      0|            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_expression"));
11596|      0|            _res = invalid_expression_var;
11597|      0|            goto done;
11598|      0|        }
11599|   291k|        p->mark = _mark;
11600|   291k|        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11601|   291k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_expression"));
11602|   291k|    }
11603|  1.04M|    if (p->call_invalid_rules) { // invalid_legacy_expression
  ------------------
  |  Branch (11603:9): [True: 291k, False: 757k]
  ------------------
11604|   291k|        if (p->error_indicator) {
  ------------------
  |  Branch (11604:13): [True: 2.91k, False: 289k]
  ------------------
11605|  2.91k|            p->level--;
11606|  2.91k|            return NULL;
11607|  2.91k|        }
11608|   289k|        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_legacy_expression"));
11609|   289k|        void *invalid_legacy_expression_var;
11610|   289k|        if (
11611|   289k|            (invalid_legacy_expression_var = invalid_legacy_expression_rule(p))  // invalid_legacy_expression
  ------------------
  |  Branch (11611:13): [True: 0, False: 289k]
  ------------------
11612|   289k|        )
11613|      0|        {
11614|      0|            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_legacy_expression"));
11615|      0|            _res = invalid_legacy_expression_var;
11616|      0|            goto done;
11617|      0|        }
11618|   289k|        p->mark = _mark;
11619|   289k|        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11620|   289k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_legacy_expression"));
11621|   289k|    }
11622|  1.04M|    { // if_expression
11623|  1.04M|        if (p->error_indicator) {
  ------------------
  |  Branch (11623:13): [True: 10.3k, False: 1.03M]
  ------------------
11624|  10.3k|            p->level--;
11625|  10.3k|            return NULL;
11626|  10.3k|        }
11627|  1.03M|        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "if_expression"));
11628|  1.03M|        expr_ty if_expression_var;
11629|  1.03M|        if (
11630|  1.03M|            (if_expression_var = if_expression_rule(p))  // if_expression
  ------------------
  |  Branch (11630:13): [True: 3.31k, False: 1.03M]
  ------------------
11631|  1.03M|        )
11632|  3.31k|        {
11633|  3.31k|            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "if_expression"));
11634|  3.31k|            _res = if_expression_var;
11635|  3.31k|            goto done;
11636|  3.31k|        }
11637|  1.03M|        p->mark = _mark;
11638|  1.03M|        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11639|  1.03M|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "if_expression"));
11640|  1.03M|    }
11641|      0|    { // disjunction
11642|  1.03M|        if (p->error_indicator) {
  ------------------
  |  Branch (11642:13): [True: 15.0k, False: 1.01M]
  ------------------
11643|  15.0k|            p->level--;
11644|  15.0k|            return NULL;
11645|  15.0k|        }
11646|  1.01M|        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
11647|  1.01M|        expr_ty disjunction_var;
11648|  1.01M|        if (
11649|  1.01M|            (disjunction_var = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (11649:13): [True: 728k, False: 289k]
  ------------------
11650|  1.01M|        )
11651|   728k|        {
11652|   728k|            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction"));
11653|   728k|            _res = disjunction_var;
11654|   728k|            goto done;
11655|   728k|        }
11656|   289k|        p->mark = _mark;
11657|   289k|        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11658|   289k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction"));
11659|   289k|    }
11660|      0|    { // lambdef
11661|   289k|        if (p->error_indicator) {
  ------------------
  |  Branch (11661:13): [True: 0, False: 289k]
  ------------------
11662|      0|            p->level--;
11663|      0|            return NULL;
11664|      0|        }
11665|   289k|        D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
11666|   289k|        expr_ty lambdef_var;
11667|   289k|        if (
11668|   289k|            (lambdef_var = lambdef_rule(p))  // lambdef
  ------------------
  |  Branch (11668:13): [True: 7.92k, False: 281k]
  ------------------
11669|   289k|        )
11670|  7.92k|        {
11671|  7.92k|            D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef"));
11672|  7.92k|            _res = lambdef_var;
11673|  7.92k|            goto done;
11674|  7.92k|        }
11675|   281k|        p->mark = _mark;
11676|   281k|        D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ',
11677|   281k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef"));
11678|   281k|    }
11679|   281k|    _res = NULL;
11680|  1.02M|  done:
11681|  1.02M|    _PyPegen_insert_memo(p, _mark, expression_type, _res);
  ------------------
  |  |  198|  1.02M|#define expression_type 1109
  ------------------
11682|  1.02M|    p->level--;
11683|  1.02M|    return _res;
11684|   281k|}
parser.c:invalid_if_expression_rule:
20633|   323k|{
20634|   323k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   647k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20634:9): [True: 0, False: 323k]
  |  Branch (20634:35): [True: 0, False: 323k]
  ------------------
20635|      0|        _Pypegen_stack_overflow(p);
20636|      0|    }
20637|   323k|    if (p->error_indicator) {
  ------------------
  |  Branch (20637:9): [True: 0, False: 323k]
  ------------------
20638|      0|        p->level--;
20639|      0|        return NULL;
20640|      0|    }
20641|   323k|    void * _res = NULL;
20642|   323k|    int _mark = p->mark;
20643|   323k|    expr_ty _prefix_13_result = NULL;
20644|   323k|    int _prefix_13_end = 0, _prefix_13_valid = 0;
20645|   323k|    { // disjunction 'if' disjunction 'else' '*'
20646|   323k|        if (p->error_indicator) {
  ------------------
  |  Branch (20646:13): [True: 0, False: 323k]
  ------------------
20647|      0|            p->level--;
20648|      0|            return NULL;
20649|      0|        }
20650|   323k|        D(fprintf(stderr, "%*c> invalid_if_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' '*'"));
20651|   323k|        Token * _keyword;
20652|   323k|        Token * _keyword_1;
20653|   323k|        Token * a;
20654|   323k|        expr_ty b;
20655|   323k|        expr_ty disjunction_var;
20656|   323k|        if (
20657|   323k|            (disjunction_var = ((!p->call_invalid_rules && _prefix_13_valid) ? (p->mark = _prefix_13_end, _prefix_13_result) : (_prefix_13_result = disjunction_rule(p), _prefix_13_end = p->mark, _prefix_13_valid = 1, _prefix_13_result)))  // disjunction
  ------------------
  |  Branch (20657:13): [True: 149k, False: 173k]
  |  Branch (20657:34): [True: 0, False: 323k]
  |  Branch (20657:60): [True: 0, False: 0]
  ------------------
20658|   149k|            &&
20659|   149k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (20659:13): [True: 1.07k, False: 148k]
  ------------------
20660|  1.07k|            &&
20661|  1.07k|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20661:13): [True: 838, False: 233]
  ------------------
20662|    838|            &&
20663|    838|            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (20663:13): [True: 794, False: 44]
  ------------------
20664|    794|            &&
20665|    794|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (20665:13): [True: 1, False: 793]
  ------------------
20666|   323k|        )
20667|      1|        {
20668|      1|            D(fprintf(stderr, "%*c+ invalid_if_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' '*'"));
20669|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot unpack only part of a conditional expression" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20670|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20670:18): [True: 1, False: 0]
  |  Branch (20670:34): [True: 0, False: 0]
  |  Branch (20670:57): [True: 1, False: 0]
  ------------------
20671|      1|                p->error_indicator = 1;
20672|      1|                p->level--;
20673|      1|                return NULL;
20674|      1|            }
20675|      0|            goto done;
20676|      1|        }
20677|   323k|        p->mark = _mark;
20678|   323k|        D(fprintf(stderr, "%*c%s invalid_if_expression[%d-%d]: %s failed!\n", p->level, ' ',
20679|   323k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' '*'"));
20680|   323k|    }
20681|      0|    { // disjunction 'if' disjunction 'else' '**'
20682|   323k|        if (p->error_indicator) {
  ------------------
  |  Branch (20682:13): [True: 31.6k, False: 291k]
  ------------------
20683|  31.6k|            p->level--;
20684|  31.6k|            return NULL;
20685|  31.6k|        }
20686|   291k|        D(fprintf(stderr, "%*c> invalid_if_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' '**'"));
20687|   291k|        Token * _keyword;
20688|   291k|        Token * _keyword_1;
20689|   291k|        Token * a;
20690|   291k|        expr_ty b;
20691|   291k|        expr_ty disjunction_var;
20692|   291k|        if (
20693|   291k|            (disjunction_var = ((!p->call_invalid_rules && _prefix_13_valid) ? (p->mark = _prefix_13_end, _prefix_13_result) : (_prefix_13_result = disjunction_rule(p), _prefix_13_end = p->mark, _prefix_13_valid = 1, _prefix_13_result)))  // disjunction
  ------------------
  |  Branch (20693:13): [True: 149k, False: 142k]
  |  Branch (20693:34): [True: 0, False: 291k]
  |  Branch (20693:60): [True: 0, False: 0]
  ------------------
20694|   149k|            &&
20695|   149k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (20695:13): [True: 956, False: 148k]
  ------------------
20696|    956|            &&
20697|    956|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20697:13): [True: 837, False: 119]
  ------------------
20698|    837|            &&
20699|    837|            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (20699:13): [True: 793, False: 44]
  ------------------
20700|    793|            &&
20701|    793|            (a = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (20701:13): [True: 1, False: 792]
  ------------------
20702|   291k|        )
20703|      1|        {
20704|      1|            D(fprintf(stderr, "%*c+ invalid_if_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' '**'"));
20705|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use dict unpacking on only part of a conditional expression" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20706|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20706:18): [True: 1, False: 0]
  |  Branch (20706:34): [True: 0, False: 0]
  |  Branch (20706:57): [True: 1, False: 0]
  ------------------
20707|      1|                p->error_indicator = 1;
20708|      1|                p->level--;
20709|      1|                return NULL;
20710|      1|            }
20711|      0|            goto done;
20712|      1|        }
20713|   291k|        p->mark = _mark;
20714|   291k|        D(fprintf(stderr, "%*c%s invalid_if_expression[%d-%d]: %s failed!\n", p->level, ' ',
20715|   291k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' '**'"));
20716|   291k|    }
20717|   291k|    _res = NULL;
20718|   291k|  done:
20719|   291k|    p->level--;
20720|   291k|    return _res;
20721|   291k|}
parser.c:invalid_expression_rule:
20382|   291k|{
20383|   291k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   583k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20383:9): [True: 0, False: 291k]
  |  Branch (20383:35): [True: 0, False: 291k]
  ------------------
20384|      0|        _Pypegen_stack_overflow(p);
20385|      0|    }
20386|   291k|    if (p->error_indicator) {
  ------------------
  |  Branch (20386:9): [True: 0, False: 291k]
  ------------------
20387|      0|        p->level--;
20388|      0|        return NULL;
20389|      0|    }
20390|   291k|    void * _res = NULL;
20391|   291k|    int _mark = p->mark;
20392|   291k|    expr_ty _prefix_12_result = NULL;
20393|   291k|    int _prefix_12_end = 0, _prefix_12_valid = 0;
20394|   291k|    { // STRING ((!STRING expression_without_invalid))+ STRING
20395|   291k|        if (p->error_indicator) {
  ------------------
  |  Branch (20395:13): [True: 0, False: 291k]
  ------------------
20396|      0|            p->level--;
20397|      0|            return NULL;
20398|      0|        }
20399|   291k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING ((!STRING expression_without_invalid))+ STRING"));
20400|   291k|        asdl_seq * a;
20401|   291k|        expr_ty string_var;
20402|   291k|        expr_ty string_var_1;
20403|   291k|        if (
20404|   291k|            (string_var = _PyPegen_string_token(p))  // STRING
  ------------------
  |  Branch (20404:13): [True: 3.15k, False: 288k]
  ------------------
20405|  3.15k|            &&
20406|  3.15k|            (a = _loop1_113_rule(p))  // ((!STRING expression_without_invalid))+
  ------------------
  |  Branch (20406:13): [True: 1.19k, False: 1.96k]
  ------------------
20407|  1.19k|            &&
20408|  1.19k|            (string_var_1 = _PyPegen_string_token(p))  // STRING
  ------------------
  |  Branch (20408:13): [True: 31, False: 1.16k]
  ------------------
20409|   291k|        )
20410|     31|        {
20411|     31|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING ((!STRING expression_without_invalid))+ STRING"));
20412|     31|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_first_item ( a , expr_ty ) , PyPegen_last_item ( a , expr_ty ) , "invalid syntax. Is this intended to be part of the string?" );
  ------------------
  |  |  237|     31|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20413|     31|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20413:18): [True: 31, False: 0]
  |  Branch (20413:34): [True: 0, False: 0]
  |  Branch (20413:57): [True: 31, False: 0]
  ------------------
20414|     31|                p->error_indicator = 1;
20415|     31|                p->level--;
20416|     31|                return NULL;
20417|     31|            }
20418|      0|            goto done;
20419|     31|        }
20420|   291k|        p->mark = _mark;
20421|   291k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20422|   291k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING ((!STRING expression_without_invalid))+ STRING"));
20423|   291k|    }
20424|      0|    { // !(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid
20425|   291k|        if (p->error_indicator) {
  ------------------
  |  Branch (20425:13): [True: 156, False: 291k]
  ------------------
20426|    156|            p->level--;
20427|    156|            return NULL;
20428|    156|        }
20429|   291k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
20430|   291k|        expr_ty a;
20431|   291k|        expr_ty b;
20432|   291k|        if (
20433|   291k|            _PyPegen_lookahead(0, _tmp_114_rule, p)
  ------------------
  |  Branch (20433:13): [True: 287k, False: 4.47k]
  ------------------
20434|   287k|            &&
20435|   287k|            (a = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20435:13): [True: 144k, False: 142k]
  ------------------
20436|   144k|            &&
20437|   144k|            (b = expression_without_invalid_rule(p))  // expression_without_invalid
  ------------------
  |  Branch (20437:13): [True: 12.9k, False: 131k]
  ------------------
20438|   291k|        )
20439|  12.9k|        {
20440|  12.9k|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
20441|  12.9k|            _res = _PyPegen_raise_error_for_missing_comma ( p , a , b );
20442|  12.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20442:18): [True: 12.9k, False: 0]
  |  Branch (20442:34): [True: 0, False: 0]
  |  Branch (20442:57): [True: 243, False: 12.6k]
  ------------------
20443|    243|                p->error_indicator = 1;
20444|    243|                p->level--;
20445|    243|                return NULL;
20446|    243|            }
20447|  12.6k|            goto done;
20448|  12.9k|        }
20449|   278k|        p->mark = _mark;
20450|   278k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20451|   278k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!(NAME STRING | SOFT_KEYWORD) disjunction expression_without_invalid"));
20452|   278k|    }
20453|      0|    { // disjunction 'if' disjunction !('else' | ':')
20454|   278k|        if (p->error_indicator) {
  ------------------
  |  Branch (20454:13): [True: 424, False: 278k]
  ------------------
20455|    424|            p->level--;
20456|    424|            return NULL;
20457|    424|        }
20458|   278k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
20459|   278k|        Token * _keyword;
20460|   278k|        expr_ty a;
20461|   278k|        expr_ty b;
20462|   278k|        if (
20463|   278k|            (a = ((!p->call_invalid_rules && _prefix_12_valid) ? (p->mark = _prefix_12_end, _prefix_12_result) : (_prefix_12_result = disjunction_rule(p), _prefix_12_end = p->mark, _prefix_12_valid = 1, _prefix_12_result)))  // disjunction
  ------------------
  |  Branch (20463:13): [True: 136k, False: 142k]
  |  Branch (20463:20): [True: 0, False: 278k]
  |  Branch (20463:46): [True: 0, False: 0]
  ------------------
20464|   136k|            &&
20465|   136k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (20465:13): [True: 955, False: 135k]
  ------------------
20466|    955|            &&
20467|    955|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20467:13): [True: 836, False: 119]
  ------------------
20468|    836|            &&
20469|    836|            _PyPegen_lookahead(0, _tmp_115_rule, p)
  ------------------
  |  Branch (20469:13): [True: 37, False: 799]
  ------------------
20470|   278k|        )
20471|     37|        {
20472|     37|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
20473|     37|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "expected 'else' after 'if' expression" );
  ------------------
  |  |  237|     37|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20474|     37|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20474:18): [True: 37, False: 0]
  |  Branch (20474:34): [True: 0, False: 0]
  |  Branch (20474:57): [True: 37, False: 0]
  ------------------
20475|     37|                p->error_indicator = 1;
20476|     37|                p->level--;
20477|     37|                return NULL;
20478|     37|            }
20479|      0|            goto done;
20480|     37|        }
20481|   278k|        p->mark = _mark;
20482|   278k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20483|   278k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction !('else' | ':')"));
20484|   278k|    }
20485|      0|    { // disjunction 'if' disjunction 'else' !expression
20486|   278k|        if (p->error_indicator) {
  ------------------
  |  Branch (20486:13): [True: 0, False: 278k]
  ------------------
20487|      0|            p->level--;
20488|      0|            return NULL;
20489|      0|        }
20490|   278k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' !expression"));
20491|   278k|        Token * _keyword;
20492|   278k|        Token * _keyword_1;
20493|   278k|        expr_ty a;
20494|   278k|        expr_ty b;
20495|   278k|        if (
20496|   278k|            (a = ((!p->call_invalid_rules && _prefix_12_valid) ? (p->mark = _prefix_12_end, _prefix_12_result) : (_prefix_12_result = disjunction_rule(p), _prefix_12_end = p->mark, _prefix_12_valid = 1, _prefix_12_result)))  // disjunction
  ------------------
  |  Branch (20496:13): [True: 136k, False: 142k]
  |  Branch (20496:20): [True: 0, False: 278k]
  |  Branch (20496:46): [True: 0, False: 0]
  ------------------
20497|   136k|            &&
20498|   136k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (20498:13): [True: 918, False: 135k]
  ------------------
20499|    918|            &&
20500|    918|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20500:13): [True: 799, False: 119]
  ------------------
20501|    799|            &&
20502|    799|            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (20502:13): [True: 792, False: 7]
  ------------------
20503|    792|            &&
20504|    792|            _PyPegen_lookahead_for_expr(0, expression_rule, p)
  ------------------
  |  Branch (20504:13): [True: 166, False: 626]
  ------------------
20505|   278k|        )
20506|    166|        {
20507|    166|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' !expression"));
20508|    166|            _res = RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN ( "expected expression after 'else', but statement is given" );
  ------------------
  |  |  235|    166|#define RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 1, msg, ##__VA_ARGS__)
  ------------------
20509|    166|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20509:18): [True: 166, False: 0]
  |  Branch (20509:34): [True: 0, False: 0]
  |  Branch (20509:57): [True: 166, False: 0]
  ------------------
20510|    166|                p->error_indicator = 1;
20511|    166|                p->level--;
20512|    166|                return NULL;
20513|    166|            }
20514|      0|            goto done;
20515|    166|        }
20516|   278k|        p->mark = _mark;
20517|   278k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20518|   278k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' !expression"));
20519|   278k|    }
20520|      0|    { // (pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt
20521|   278k|        if (p->error_indicator) {
  ------------------
  |  Branch (20521:13): [True: 0, False: 278k]
  ------------------
20522|      0|            p->level--;
20523|      0|            return NULL;
20524|      0|        }
20525|   278k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt"));
20526|   278k|        Token * _keyword;
20527|   278k|        Token * _keyword_1;
20528|   278k|        stmt_ty a;
20529|   278k|        expr_ty b;
20530|   278k|        stmt_ty c;
20531|   278k|        if (
20532|   278k|            (a = (stmt_ty)_tmp_116_rule(p))  // pass_stmt | break_stmt | continue_stmt
  ------------------
  |  Branch (20532:13): [True: 2.68k, False: 275k]
  ------------------
20533|  2.68k|            &&
20534|  2.68k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (20534:13): [True: 1.36k, False: 1.32k]
  ------------------
20535|  1.36k|            &&
20536|  1.36k|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20536:13): [True: 1.16k, False: 193]
  ------------------
20537|  1.16k|            &&
20538|  1.16k|            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (20538:13): [True: 1.12k, False: 45]
  ------------------
20539|  1.12k|            &&
20540|  1.12k|            (c = simple_stmt_rule(p))  // simple_stmt
  ------------------
  |  Branch (20540:13): [True: 9, False: 1.11k]
  ------------------
20541|   278k|        )
20542|      9|        {
20543|      9|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt"));
20544|      9|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected expression before 'if', but statement is given" );
  ------------------
  |  |  239|      9|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20545|      9|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20545:18): [True: 9, False: 0]
  |  Branch (20545:34): [True: 0, False: 0]
  |  Branch (20545:57): [True: 9, False: 0]
  ------------------
20546|      9|                p->error_indicator = 1;
20547|      9|                p->level--;
20548|      9|                return NULL;
20549|      9|            }
20550|      0|            goto done;
20551|      9|        }
20552|   278k|        p->mark = _mark;
20553|   278k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20554|   278k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(pass_stmt | break_stmt | continue_stmt) 'if' disjunction 'else' simple_stmt"));
20555|   278k|    }
20556|      0|    { // 'lambda' lambda_params? ':' &FSTRING_MIDDLE
20557|   278k|        if (p->error_indicator) {
  ------------------
  |  Branch (20557:13): [True: 1.15k, False: 277k]
  ------------------
20558|  1.15k|            p->level--;
20559|  1.15k|            return NULL;
20560|  1.15k|        }
20561|   277k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE"));
20562|   277k|        void *_opt_var;
20563|   277k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|   277k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 277k]
  |  |  ------------------
  ------------------
20564|   277k|        Token * a;
20565|   277k|        Token * b;
20566|   277k|        if (
20567|   277k|            (a = _PyPegen_expect_token(p, 622))  // token='lambda'
  ------------------
  |  Branch (20567:13): [True: 3.75k, False: 273k]
  ------------------
20568|  3.75k|            &&
20569|  3.75k|            (_opt_var = lambda_params_rule(p), !p->error_indicator)  // lambda_params?
  ------------------
  |  Branch (20569:13): [True: 3.07k, False: 675]
  ------------------
20570|  3.07k|            &&
20571|  3.07k|            (b = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20571:13): [True: 2.21k, False: 861]
  ------------------
20572|  2.21k|            &&
20573|  2.21k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, FSTRING_MIDDLE)  // token=FSTRING_MIDDLE
  ------------------
  |  |   76|  2.21k|#define FSTRING_MIDDLE  60
  ------------------
  |  Branch (20573:13): [True: 2, False: 2.21k]
  ------------------
20574|   277k|        )
20575|      2|        {
20576|      2|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE"));
20577|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "f-string: lambda expressions are not allowed without parentheses" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20578|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20578:18): [True: 2, False: 0]
  |  Branch (20578:34): [True: 0, False: 0]
  |  Branch (20578:57): [True: 2, False: 0]
  ------------------
20579|      2|                p->error_indicator = 1;
20580|      2|                p->level--;
20581|      2|                return NULL;
20582|      2|            }
20583|      0|            goto done;
20584|      2|        }
20585|   277k|        p->mark = _mark;
20586|   277k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20587|   277k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' &FSTRING_MIDDLE"));
20588|   277k|    }
20589|      0|    { // 'lambda' lambda_params? ':' &TSTRING_MIDDLE
20590|   277k|        if (p->error_indicator) {
  ------------------
  |  Branch (20590:13): [True: 682, False: 276k]
  ------------------
20591|    682|            p->level--;
20592|    682|            return NULL;
20593|    682|        }
20594|   276k|        D(fprintf(stderr, "%*c> invalid_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &TSTRING_MIDDLE"));
20595|   276k|        void *_opt_var;
20596|   276k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|   276k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 276k]
  |  |  ------------------
  ------------------
20597|   276k|        Token * a;
20598|   276k|        Token * b;
20599|   276k|        if (
20600|   276k|            (a = _PyPegen_expect_token(p, 622))  // token='lambda'
  ------------------
  |  Branch (20600:13): [True: 3.06k, False: 273k]
  ------------------
20601|  3.06k|            &&
20602|  3.06k|            (_opt_var = lambda_params_rule(p), !p->error_indicator)  // lambda_params?
  ------------------
  |  Branch (20602:13): [True: 3.06k, False: 0]
  ------------------
20603|  3.06k|            &&
20604|  3.06k|            (b = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20604:13): [True: 2.20k, False: 861]
  ------------------
20605|  2.20k|            &&
20606|  2.20k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, TSTRING_MIDDLE)  // token=TSTRING_MIDDLE
  ------------------
  |  |   79|  2.20k|#define TSTRING_MIDDLE  63
  ------------------
  |  Branch (20606:13): [True: 8, False: 2.19k]
  ------------------
20607|   276k|        )
20608|      8|        {
20609|      8|            D(fprintf(stderr, "%*c+ invalid_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' &TSTRING_MIDDLE"));
20610|      8|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "t-string: lambda expressions are not allowed without parentheses" );
  ------------------
  |  |  237|      8|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20611|      8|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20611:18): [True: 8, False: 0]
  |  Branch (20611:34): [True: 0, False: 0]
  |  Branch (20611:57): [True: 8, False: 0]
  ------------------
20612|      8|                p->error_indicator = 1;
20613|      8|                p->level--;
20614|      8|                return NULL;
20615|      8|            }
20616|      0|            goto done;
20617|      8|        }
20618|   276k|        p->mark = _mark;
20619|   276k|        D(fprintf(stderr, "%*c%s invalid_expression[%d-%d]: %s failed!\n", p->level, ' ',
20620|   276k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' &TSTRING_MIDDLE"));
20621|   276k|    }
20622|   276k|    _res = NULL;
20623|   289k|  done:
20624|   289k|    p->level--;
20625|   289k|    return _res;
20626|   276k|}
parser.c:_loop1_113_rule:
34282|  3.15k|{
34283|  3.15k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  6.30k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34283:9): [True: 0, False: 3.15k]
  |  Branch (34283:35): [True: 0, False: 3.15k]
  ------------------
34284|      0|        _Pypegen_stack_overflow(p);
34285|      0|    }
34286|  3.15k|    if (p->error_indicator) {
  ------------------
  |  Branch (34286:9): [True: 0, False: 3.15k]
  ------------------
34287|      0|        p->level--;
34288|      0|        return NULL;
34289|      0|    }
34290|  3.15k|    void *_res = NULL;
34291|  3.15k|    int _mark = p->mark;
34292|  3.15k|    void **_children = PyMem_Malloc(sizeof(void *));
34293|  3.15k|    if (!_children) {
  ------------------
  |  Branch (34293:9): [True: 0, False: 3.15k]
  ------------------
34294|      0|        p->error_indicator = 1;
34295|      0|        PyErr_NoMemory();
34296|      0|        p->level--;
34297|      0|        return NULL;
34298|      0|    }
34299|  3.15k|    Py_ssize_t _children_capacity = 1;
34300|  3.15k|    Py_ssize_t _n = 0;
34301|  3.15k|    { // (!STRING expression_without_invalid)
34302|  3.15k|        if (p->error_indicator) {
  ------------------
  |  Branch (34302:13): [True: 0, False: 3.15k]
  ------------------
34303|      0|            p->level--;
34304|      0|            return NULL;
34305|      0|        }
34306|  3.15k|        D(fprintf(stderr, "%*c> _loop1_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(!STRING expression_without_invalid)"));
34307|  3.15k|        void *_tmp_169_var;
34308|  3.15k|        while (
34309|  7.66k|            (_tmp_169_var = _tmp_169_rule(p))  // !STRING expression_without_invalid
  ------------------
  |  Branch (34309:13): [True: 4.51k, False: 3.15k]
  ------------------
34310|  3.15k|        )
34311|  4.51k|        {
34312|  4.51k|            _res = _tmp_169_var;
34313|  4.51k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (34313:17): [True: 252, False: 4.26k]
  ------------------
34314|    252|                _children_capacity *= 2;
34315|    252|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34316|    252|                if (!_new_children) {
  ------------------
  |  Branch (34316:21): [True: 0, False: 252]
  ------------------
34317|      0|                    PyMem_Free(_children);
34318|      0|                    p->error_indicator = 1;
34319|      0|                    PyErr_NoMemory();
34320|      0|                    p->level--;
34321|      0|                    return NULL;
34322|      0|                }
34323|    252|                _children = _new_children;
34324|    252|            }
34325|  4.51k|            _children[_n++] = _res;
34326|  4.51k|            _mark = p->mark;
34327|  4.51k|        }
34328|  3.15k|        p->mark = _mark;
34329|  3.15k|        D(fprintf(stderr, "%*c%s _loop1_113[%d-%d]: %s failed!\n", p->level, ' ',
34330|  3.15k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(!STRING expression_without_invalid)"));
34331|  3.15k|    }
34332|  3.15k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (34332:9): [True: 1.92k, False: 1.23k]
  |  Branch (34332:20): [True: 39, False: 1.19k]
  ------------------
34333|  1.96k|        PyMem_Free(_children);
34334|  1.96k|        p->level--;
34335|  1.96k|        return NULL;
34336|  1.96k|    }
34337|  1.19k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34338|  1.19k|    if (!_seq) {
  ------------------
  |  Branch (34338:9): [True: 0, False: 1.19k]
  ------------------
34339|      0|        PyMem_Free(_children);
34340|      0|        p->error_indicator = 1;
34341|      0|        PyErr_NoMemory();
34342|      0|        p->level--;
34343|      0|        return NULL;
34344|      0|    }
34345|  4.45k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  3.26k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  4.45k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (34345:28): [True: 3.26k, False: 1.19k]
  ------------------
34346|  1.19k|    PyMem_Free(_children);
34347|  1.19k|    p->level--;
34348|  1.19k|    return _seq;
34349|  1.19k|}
parser.c:_tmp_169_rule:
37633|  7.66k|{
37634|  7.66k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37634:9): [True: 0, False: 7.66k]
  |  Branch (37634:35): [True: 0, False: 7.66k]
  ------------------
37635|      0|        _Pypegen_stack_overflow(p);
37636|      0|    }
37637|  7.66k|    if (p->error_indicator) {
  ------------------
  |  Branch (37637:9): [True: 0, False: 7.66k]
  ------------------
37638|      0|        p->level--;
37639|      0|        return NULL;
37640|      0|    }
37641|  7.66k|    void * _res = NULL;
37642|  7.66k|    int _mark = p->mark;
37643|  7.66k|    { // !STRING expression_without_invalid
37644|  7.66k|        if (p->error_indicator) {
  ------------------
  |  Branch (37644:13): [True: 0, False: 7.66k]
  ------------------
37645|      0|            p->level--;
37646|      0|            return NULL;
37647|      0|        }
37648|  7.66k|        D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid"));
37649|  7.66k|        expr_ty expression_without_invalid_var;
37650|  7.66k|        if (
37651|  7.66k|            _PyPegen_lookahead(0, _PyPegen_string_token, p)
  ------------------
  |  Branch (37651:13): [True: 7.21k, False: 456]
  ------------------
37652|  7.21k|            &&
37653|  7.21k|            (expression_without_invalid_var = expression_without_invalid_rule(p))  // expression_without_invalid
  ------------------
  |  Branch (37653:13): [True: 4.51k, False: 2.69k]
  ------------------
37654|  7.66k|        )
37655|  4.51k|        {
37656|  4.51k|            D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!STRING expression_without_invalid"));
37657|  4.51k|            _res = expression_without_invalid_var;
37658|  4.51k|            goto done;
37659|  4.51k|        }
37660|  3.15k|        p->mark = _mark;
37661|  3.15k|        D(fprintf(stderr, "%*c%s _tmp_169[%d-%d]: %s failed!\n", p->level, ' ',
37662|  3.15k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!STRING expression_without_invalid"));
37663|  3.15k|    }
37664|  3.15k|    _res = NULL;
37665|  7.66k|  done:
37666|  7.66k|    p->level--;
37667|  7.66k|    return _res;
37668|  3.15k|}
parser.c:_tmp_114_rule:
34354|   291k|{
34355|   291k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   583k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34355:9): [True: 0, False: 291k]
  |  Branch (34355:35): [True: 0, False: 291k]
  ------------------
34356|      0|        _Pypegen_stack_overflow(p);
34357|      0|    }
34358|   291k|    if (p->error_indicator) {
  ------------------
  |  Branch (34358:9): [True: 0, False: 291k]
  ------------------
34359|      0|        p->level--;
34360|      0|        return NULL;
34361|      0|    }
34362|   291k|    void * _res = NULL;
34363|   291k|    int _mark = p->mark;
34364|   291k|    { // NAME STRING
34365|   291k|        if (p->error_indicator) {
  ------------------
  |  Branch (34365:13): [True: 0, False: 291k]
  ------------------
34366|      0|            p->level--;
34367|      0|            return NULL;
34368|      0|        }
34369|   291k|        D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME STRING"));
34370|   291k|        expr_ty name_var;
34371|   291k|        expr_ty string_var;
34372|   291k|        if (
34373|   291k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (34373:13): [True: 109k, False: 182k]
  ------------------
34374|   109k|            &&
34375|   109k|            (string_var = _PyPegen_string_token(p))  // STRING
  ------------------
  |  Branch (34375:13): [True: 1.10k, False: 108k]
  ------------------
34376|   291k|        )
34377|  1.10k|        {
34378|  1.10k|            D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME STRING"));
34379|  1.10k|            _res = _PyPegen_dummy_name(p, name_var, string_var);
34380|  1.10k|            goto done;
34381|  1.10k|        }
34382|   290k|        p->mark = _mark;
34383|   290k|        D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ',
34384|   290k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME STRING"));
34385|   290k|    }
34386|      0|    { // SOFT_KEYWORD
34387|   290k|        if (p->error_indicator) {
  ------------------
  |  Branch (34387:13): [True: 0, False: 290k]
  ------------------
34388|      0|            p->level--;
34389|      0|            return NULL;
34390|      0|        }
34391|   290k|        D(fprintf(stderr, "%*c> _tmp_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD"));
34392|   290k|        expr_ty soft_keyword_var;
34393|   290k|        if (
34394|   290k|            (soft_keyword_var = _PyPegen_soft_keyword_token(p))  // SOFT_KEYWORD
  ------------------
  |  Branch (34394:13): [True: 3.37k, False: 287k]
  ------------------
34395|   290k|        )
34396|  3.37k|        {
34397|  3.37k|            D(fprintf(stderr, "%*c+ _tmp_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "SOFT_KEYWORD"));
34398|  3.37k|            _res = soft_keyword_var;
34399|  3.37k|            goto done;
34400|  3.37k|        }
34401|   287k|        p->mark = _mark;
34402|   287k|        D(fprintf(stderr, "%*c%s _tmp_114[%d-%d]: %s failed!\n", p->level, ' ',
34403|   287k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "SOFT_KEYWORD"));
34404|   287k|    }
34405|   287k|    _res = NULL;
34406|   291k|  done:
34407|   291k|    p->level--;
34408|   291k|    return _res;
34409|   287k|}
parser.c:expression_without_invalid_rule:
20119|   152k|{
20120|   152k|    int _prev_call_invalid = p->call_invalid_rules;
20121|   152k|    p->call_invalid_rules = 0;
20122|   152k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   304k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20122:9): [True: 0, False: 152k]
  |  Branch (20122:35): [True: 0, False: 152k]
  ------------------
20123|      0|        _Pypegen_stack_overflow(p);
20124|      0|    }
20125|   152k|    if (p->error_indicator) {
  ------------------
  |  Branch (20125:9): [True: 0, False: 152k]
  ------------------
20126|      0|        p->call_invalid_rules = _prev_call_invalid;
20127|      0|        p->level--;
20128|      0|        return NULL;
20129|      0|    }
20130|   152k|    expr_ty _res = NULL;
20131|   152k|    int _mark = p->mark;
20132|   152k|    expr_ty _prefix_11_result = NULL;
20133|   152k|    int _prefix_11_end = 0, _prefix_11_valid = 0;
20134|   152k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (20134:9): [True: 0, False: 152k]
  |  Branch (20134:31): [True: 0, False: 0]
  ------------------
20135|      0|        p->error_indicator = 1;
20136|      0|        p->call_invalid_rules = _prev_call_invalid;
20137|      0|        p->level--;
20138|      0|        return NULL;
20139|      0|    }
20140|   152k|    int _start_lineno = p->tokens[_mark]->lineno;
20141|   152k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   152k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 152k]
  |  |  ------------------
  ------------------
20142|   152k|    int _start_col_offset = p->tokens[_mark]->col_offset;
20143|   152k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   152k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 152k]
  |  |  ------------------
  ------------------
20144|   152k|    { // disjunction 'if' disjunction 'else' expression
20145|   152k|        if (p->error_indicator) {
  ------------------
  |  Branch (20145:13): [True: 0, False: 152k]
  ------------------
20146|      0|            p->call_invalid_rules = _prev_call_invalid;
20147|      0|            p->level--;
20148|      0|            return NULL;
20149|      0|        }
20150|   152k|        D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
20151|   152k|        Token * _keyword;
20152|   152k|        Token * _keyword_1;
20153|   152k|        expr_ty a;
20154|   152k|        expr_ty b;
20155|   152k|        expr_ty c;
20156|   152k|        if (
20157|   152k|            (a = ((!p->call_invalid_rules && _prefix_11_valid) ? (p->mark = _prefix_11_end, _prefix_11_result) : (_prefix_11_result = disjunction_rule(p), _prefix_11_end = p->mark, _prefix_11_valid = 1, _prefix_11_result)))  // disjunction
  ------------------
  |  Branch (20157:13): [True: 17.3k, False: 134k]
  |  Branch (20157:20): [True: 152k, False: 0]
  |  Branch (20157:46): [True: 0, False: 152k]
  ------------------
20158|  17.3k|            &&
20159|  17.3k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (20159:13): [True: 82, False: 17.2k]
  ------------------
20160|     82|            &&
20161|     82|            (b = disjunction_rule(p))  // disjunction
  ------------------
  |  Branch (20161:13): [True: 77, False: 5]
  ------------------
20162|     77|            &&
20163|     77|            (_keyword_1 = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (20163:13): [True: 66, False: 11]
  ------------------
20164|     66|            &&
20165|     66|            (c = expression_rule(p))  // expression
  ------------------
  |  Branch (20165:13): [True: 59, False: 7]
  ------------------
20166|   152k|        )
20167|     59|        {
20168|     59|            D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
20169|     59|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
20170|     59|            if (_token == NULL) {
  ------------------
  |  Branch (20170:17): [True: 0, False: 59]
  ------------------
20171|      0|                p->call_invalid_rules = _prev_call_invalid;
20172|      0|                p->level--;
20173|      0|                return NULL;
20174|      0|            }
20175|     59|            int _end_lineno = _token->end_lineno;
20176|     59|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     59|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 59]
  |  |  ------------------
  ------------------
20177|     59|            int _end_col_offset = _token->end_col_offset;
20178|     59|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     59|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 59]
  |  |  ------------------
  ------------------
20179|     59|            _res = _PyAST_IfExp ( b , a , c , EXTRA );
  ------------------
  |  |  307|     59|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
20180|     59|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20180:18): [True: 0, False: 59]
  |  Branch (20180:34): [True: 0, False: 59]
  |  Branch (20180:57): [True: 0, False: 0]
  ------------------
20181|      0|                p->error_indicator = 1;
20182|      0|                p->call_invalid_rules = _prev_call_invalid;
20183|      0|                p->level--;
20184|      0|                return NULL;
20185|      0|            }
20186|     59|            goto done;
20187|     59|        }
20188|   152k|        p->mark = _mark;
20189|   152k|        D(fprintf(stderr, "%*c%s expression_without_invalid[%d-%d]: %s failed!\n", p->level, ' ',
20190|   152k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression"));
20191|   152k|    }
20192|      0|    { // disjunction
20193|   152k|        if (p->error_indicator) {
  ------------------
  |  Branch (20193:13): [True: 576, False: 151k]
  ------------------
20194|    576|            p->call_invalid_rules = _prev_call_invalid;
20195|    576|            p->level--;
20196|    576|            return NULL;
20197|    576|        }
20198|   151k|        D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction"));
20199|   151k|        expr_ty disjunction_var;
20200|   151k|        if (
20201|   151k|            (disjunction_var = ((!p->call_invalid_rules && _prefix_11_valid) ? (p->mark = _prefix_11_end, _prefix_11_result) : (_prefix_11_result = disjunction_rule(p), _prefix_11_end = p->mark, _prefix_11_valid = 1, _prefix_11_result)))  // disjunction
  ------------------
  |  Branch (20201:13): [True: 17.2k, False: 134k]
  |  Branch (20201:34): [True: 151k, False: 0]
  |  Branch (20201:60): [True: 151k, False: 0]
  ------------------
20202|   151k|        )
20203|  17.2k|        {
20204|  17.2k|            D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction"));
20205|  17.2k|            _res = disjunction_var;
20206|  17.2k|            goto done;
20207|  17.2k|        }
20208|   134k|        p->mark = _mark;
20209|   134k|        D(fprintf(stderr, "%*c%s expression_without_invalid[%d-%d]: %s failed!\n", p->level, ' ',
20210|   134k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction"));
20211|   134k|    }
20212|      0|    { // lambdef
20213|   134k|        if (p->error_indicator) {
  ------------------
  |  Branch (20213:13): [True: 0, False: 134k]
  ------------------
20214|      0|            p->call_invalid_rules = _prev_call_invalid;
20215|      0|            p->level--;
20216|      0|            return NULL;
20217|      0|        }
20218|   134k|        D(fprintf(stderr, "%*c> expression_without_invalid[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef"));
20219|   134k|        expr_ty lambdef_var;
20220|   134k|        if (
20221|   134k|            (lambdef_var = lambdef_rule(p))  // lambdef
  ------------------
  |  Branch (20221:13): [True: 62, False: 134k]
  ------------------
20222|   134k|        )
20223|     62|        {
20224|     62|            D(fprintf(stderr, "%*c+ expression_without_invalid[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef"));
20225|     62|            _res = lambdef_var;
20226|     62|            goto done;
20227|     62|        }
20228|   134k|        p->mark = _mark;
20229|   134k|        D(fprintf(stderr, "%*c%s expression_without_invalid[%d-%d]: %s failed!\n", p->level, ' ',
20230|   134k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef"));
20231|   134k|    }
20232|   134k|    _res = NULL;
20233|   151k|  done:
20234|   151k|    p->call_invalid_rules = _prev_call_invalid;
20235|   151k|    p->level--;
20236|   151k|    return _res;
20237|   134k|}
parser.c:_tmp_115_rule:
34414|    836|{
34415|    836|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.67k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34415:9): [True: 0, False: 836]
  |  Branch (34415:35): [True: 0, False: 836]
  ------------------
34416|      0|        _Pypegen_stack_overflow(p);
34417|      0|    }
34418|    836|    if (p->error_indicator) {
  ------------------
  |  Branch (34418:9): [True: 0, False: 836]
  ------------------
34419|      0|        p->level--;
34420|      0|        return NULL;
34421|      0|    }
34422|    836|    void * _res = NULL;
34423|    836|    int _mark = p->mark;
34424|    836|    { // 'else'
34425|    836|        if (p->error_indicator) {
  ------------------
  |  Branch (34425:13): [True: 0, False: 836]
  ------------------
34426|      0|            p->level--;
34427|      0|            return NULL;
34428|      0|        }
34429|    836|        D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else'"));
34430|    836|        Token * _keyword;
34431|    836|        if (
34432|    836|            (_keyword = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (34432:13): [True: 792, False: 44]
  ------------------
34433|    836|        )
34434|    792|        {
34435|    792|            D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else'"));
34436|    792|            _res = _keyword;
34437|    792|            goto done;
34438|    792|        }
34439|     44|        p->mark = _mark;
34440|     44|        D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ',
34441|     44|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else'"));
34442|     44|    }
34443|      0|    { // ':'
34444|     44|        if (p->error_indicator) {
  ------------------
  |  Branch (34444:13): [True: 0, False: 44]
  ------------------
34445|      0|            p->level--;
34446|      0|            return NULL;
34447|      0|        }
34448|     44|        D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
34449|     44|        Token * _literal;
34450|     44|        if (
34451|     44|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (34451:13): [True: 7, False: 37]
  ------------------
34452|     44|        )
34453|      7|        {
34454|      7|            D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
34455|      7|            _res = _literal;
34456|      7|            goto done;
34457|      7|        }
34458|     37|        p->mark = _mark;
34459|     37|        D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ',
34460|     37|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
34461|     37|    }
34462|     37|    _res = NULL;
34463|    836|  done:
34464|    836|    p->level--;
34465|    836|    return _res;
34466|     37|}
parser.c:_tmp_116_rule:
34471|   278k|{
34472|   278k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   556k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34472:9): [True: 0, False: 278k]
  |  Branch (34472:35): [True: 0, False: 278k]
  ------------------
34473|      0|        _Pypegen_stack_overflow(p);
34474|      0|    }
34475|   278k|    if (p->error_indicator) {
  ------------------
  |  Branch (34475:9): [True: 0, False: 278k]
  ------------------
34476|      0|        p->level--;
34477|      0|        return NULL;
34478|      0|    }
34479|   278k|    void * _res = NULL;
34480|   278k|    int _mark = p->mark;
34481|   278k|    { // pass_stmt
34482|   278k|        if (p->error_indicator) {
  ------------------
  |  Branch (34482:13): [True: 0, False: 278k]
  ------------------
34483|      0|            p->level--;
34484|      0|            return NULL;
34485|      0|        }
34486|   278k|        D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pass_stmt"));
34487|   278k|        stmt_ty pass_stmt_var;
34488|   278k|        if (
34489|   278k|            (pass_stmt_var = pass_stmt_rule(p))  // pass_stmt
  ------------------
  |  Branch (34489:13): [True: 1.83k, False: 276k]
  ------------------
34490|   278k|        )
34491|  1.83k|        {
34492|  1.83k|            D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pass_stmt"));
34493|  1.83k|            _res = pass_stmt_var;
34494|  1.83k|            goto done;
34495|  1.83k|        }
34496|   276k|        p->mark = _mark;
34497|   276k|        D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ',
34498|   276k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pass_stmt"));
34499|   276k|    }
34500|      0|    { // break_stmt
34501|   276k|        if (p->error_indicator) {
  ------------------
  |  Branch (34501:13): [True: 0, False: 276k]
  ------------------
34502|      0|            p->level--;
34503|      0|            return NULL;
34504|      0|        }
34505|   276k|        D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "break_stmt"));
34506|   276k|        stmt_ty break_stmt_var;
34507|   276k|        if (
34508|   276k|            (break_stmt_var = break_stmt_rule(p))  // break_stmt
  ------------------
  |  Branch (34508:13): [True: 470, False: 275k]
  ------------------
34509|   276k|        )
34510|    470|        {
34511|    470|            D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "break_stmt"));
34512|    470|            _res = break_stmt_var;
34513|    470|            goto done;
34514|    470|        }
34515|   275k|        p->mark = _mark;
34516|   275k|        D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ',
34517|   275k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "break_stmt"));
34518|   275k|    }
34519|      0|    { // continue_stmt
34520|   275k|        if (p->error_indicator) {
  ------------------
  |  Branch (34520:13): [True: 0, False: 275k]
  ------------------
34521|      0|            p->level--;
34522|      0|            return NULL;
34523|      0|        }
34524|   275k|        D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "continue_stmt"));
34525|   275k|        stmt_ty continue_stmt_var;
34526|   275k|        if (
34527|   275k|            (continue_stmt_var = continue_stmt_rule(p))  // continue_stmt
  ------------------
  |  Branch (34527:13): [True: 383, False: 275k]
  ------------------
34528|   275k|        )
34529|    383|        {
34530|    383|            D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "continue_stmt"));
34531|    383|            _res = continue_stmt_var;
34532|    383|            goto done;
34533|    383|        }
34534|   275k|        p->mark = _mark;
34535|   275k|        D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ',
34536|   275k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "continue_stmt"));
34537|   275k|    }
34538|   275k|    _res = NULL;
34539|   278k|  done:
34540|   278k|    p->level--;
34541|   278k|    return _res;
34542|   275k|}
parser.c:pass_stmt_rule:
 2937|   280k|{
 2938|   280k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   561k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2938:9): [True: 0, False: 280k]
  |  Branch (2938:35): [True: 0, False: 280k]
  ------------------
 2939|      0|        _Pypegen_stack_overflow(p);
 2940|      0|    }
 2941|   280k|    if (p->error_indicator) {
  ------------------
  |  Branch (2941:9): [True: 0, False: 280k]
  ------------------
 2942|      0|        p->level--;
 2943|      0|        return NULL;
 2944|      0|    }
 2945|   280k|    stmt_ty _res = NULL;
 2946|   280k|    int _mark = p->mark;
 2947|   280k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (2947:9): [True: 0, False: 280k]
  |  Branch (2947:31): [True: 0, False: 0]
  ------------------
 2948|      0|        p->error_indicator = 1;
 2949|      0|        p->level--;
 2950|      0|        return NULL;
 2951|      0|    }
 2952|   280k|    int _start_lineno = p->tokens[_mark]->lineno;
 2953|   280k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   280k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 280k]
  |  |  ------------------
  ------------------
 2954|   280k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 2955|   280k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   280k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 280k]
  |  |  ------------------
  ------------------
 2956|   280k|    { // 'pass'
 2957|   280k|        if (p->error_indicator) {
  ------------------
  |  Branch (2957:13): [True: 0, False: 280k]
  ------------------
 2958|      0|            p->level--;
 2959|      0|            return NULL;
 2960|      0|        }
 2961|   280k|        D(fprintf(stderr, "%*c> pass_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'pass'"));
 2962|   280k|        Token * _keyword;
 2963|   280k|        if (
 2964|   280k|            (_keyword = _PyPegen_expect_token(p, 527))  // token='pass'
  ------------------
  |  Branch (2964:13): [True: 4.34k, False: 276k]
  ------------------
 2965|   280k|        )
 2966|  4.34k|        {
 2967|  4.34k|            D(fprintf(stderr, "%*c+ pass_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'pass'"));
 2968|  4.34k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2969|  4.34k|            if (_token == NULL) {
  ------------------
  |  Branch (2969:17): [True: 0, False: 4.34k]
  ------------------
 2970|      0|                p->level--;
 2971|      0|                return NULL;
 2972|      0|            }
 2973|  4.34k|            int _end_lineno = _token->end_lineno;
 2974|  4.34k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.34k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.34k]
  |  |  ------------------
  ------------------
 2975|  4.34k|            int _end_col_offset = _token->end_col_offset;
 2976|  4.34k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.34k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.34k]
  |  |  ------------------
  ------------------
 2977|  4.34k|            _res = _PyAST_Pass ( EXTRA );
  ------------------
  |  |  307|  4.34k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2978|  4.34k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2978:18): [True: 0, False: 4.34k]
  |  Branch (2978:34): [True: 0, False: 4.34k]
  |  Branch (2978:57): [True: 0, False: 0]
  ------------------
 2979|      0|                p->error_indicator = 1;
 2980|      0|                p->level--;
 2981|      0|                return NULL;
 2982|      0|            }
 2983|  4.34k|            goto done;
 2984|  4.34k|        }
 2985|   276k|        p->mark = _mark;
 2986|   276k|        D(fprintf(stderr, "%*c%s pass_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2987|   276k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'pass'"));
 2988|   276k|    }
 2989|   276k|    _res = NULL;
 2990|   280k|  done:
 2991|   280k|    p->level--;
 2992|   280k|    return _res;
 2993|   276k|}
parser.c:break_stmt_rule:
 2998|   277k|{
 2999|   277k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   555k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2999:9): [True: 0, False: 277k]
  |  Branch (2999:35): [True: 0, False: 277k]
  ------------------
 3000|      0|        _Pypegen_stack_overflow(p);
 3001|      0|    }
 3002|   277k|    if (p->error_indicator) {
  ------------------
  |  Branch (3002:9): [True: 0, False: 277k]
  ------------------
 3003|      0|        p->level--;
 3004|      0|        return NULL;
 3005|      0|    }
 3006|   277k|    stmt_ty _res = NULL;
 3007|   277k|    int _mark = p->mark;
 3008|   277k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3008:9): [True: 0, False: 277k]
  |  Branch (3008:31): [True: 0, False: 0]
  ------------------
 3009|      0|        p->error_indicator = 1;
 3010|      0|        p->level--;
 3011|      0|        return NULL;
 3012|      0|    }
 3013|   277k|    int _start_lineno = p->tokens[_mark]->lineno;
 3014|   277k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   277k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 277k]
  |  |  ------------------
  ------------------
 3015|   277k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3016|   277k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   277k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 277k]
  |  |  ------------------
  ------------------
 3017|   277k|    { // 'break'
 3018|   277k|        if (p->error_indicator) {
  ------------------
  |  Branch (3018:13): [True: 0, False: 277k]
  ------------------
 3019|      0|            p->level--;
 3020|      0|            return NULL;
 3021|      0|        }
 3022|   277k|        D(fprintf(stderr, "%*c> break_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'break'"));
 3023|   277k|        Token * _keyword;
 3024|   277k|        if (
 3025|   277k|            (_keyword = _PyPegen_expect_token(p, 528))  // token='break'
  ------------------
  |  Branch (3025:13): [True: 1.79k, False: 275k]
  ------------------
 3026|   277k|        )
 3027|  1.79k|        {
 3028|  1.79k|            D(fprintf(stderr, "%*c+ break_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'break'"));
 3029|  1.79k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3030|  1.79k|            if (_token == NULL) {
  ------------------
  |  Branch (3030:17): [True: 0, False: 1.79k]
  ------------------
 3031|      0|                p->level--;
 3032|      0|                return NULL;
 3033|      0|            }
 3034|  1.79k|            int _end_lineno = _token->end_lineno;
 3035|  1.79k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.79k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.79k]
  |  |  ------------------
  ------------------
 3036|  1.79k|            int _end_col_offset = _token->end_col_offset;
 3037|  1.79k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.79k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.79k]
  |  |  ------------------
  ------------------
 3038|  1.79k|            _res = _PyAST_Break ( EXTRA );
  ------------------
  |  |  307|  1.79k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3039|  1.79k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3039:18): [True: 0, False: 1.79k]
  |  Branch (3039:34): [True: 0, False: 1.79k]
  |  Branch (3039:57): [True: 0, False: 0]
  ------------------
 3040|      0|                p->error_indicator = 1;
 3041|      0|                p->level--;
 3042|      0|                return NULL;
 3043|      0|            }
 3044|  1.79k|            goto done;
 3045|  1.79k|        }
 3046|   275k|        p->mark = _mark;
 3047|   275k|        D(fprintf(stderr, "%*c%s break_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3048|   275k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'break'"));
 3049|   275k|    }
 3050|   275k|    _res = NULL;
 3051|   277k|  done:
 3052|   277k|    p->level--;
 3053|   277k|    return _res;
 3054|   275k|}
parser.c:continue_stmt_rule:
 3059|   277k|{
 3060|   277k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   554k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3060:9): [True: 0, False: 277k]
  |  Branch (3060:35): [True: 0, False: 277k]
  ------------------
 3061|      0|        _Pypegen_stack_overflow(p);
 3062|      0|    }
 3063|   277k|    if (p->error_indicator) {
  ------------------
  |  Branch (3063:9): [True: 0, False: 277k]
  ------------------
 3064|      0|        p->level--;
 3065|      0|        return NULL;
 3066|      0|    }
 3067|   277k|    stmt_ty _res = NULL;
 3068|   277k|    int _mark = p->mark;
 3069|   277k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3069:9): [True: 0, False: 277k]
  |  Branch (3069:31): [True: 0, False: 0]
  ------------------
 3070|      0|        p->error_indicator = 1;
 3071|      0|        p->level--;
 3072|      0|        return NULL;
 3073|      0|    }
 3074|   277k|    int _start_lineno = p->tokens[_mark]->lineno;
 3075|   277k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   277k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 277k]
  |  |  ------------------
  ------------------
 3076|   277k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3077|   277k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   277k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 277k]
  |  |  ------------------
  ------------------
 3078|   277k|    { // 'continue'
 3079|   277k|        if (p->error_indicator) {
  ------------------
  |  Branch (3079:13): [True: 0, False: 277k]
  ------------------
 3080|      0|            p->level--;
 3081|      0|            return NULL;
 3082|      0|        }
 3083|   277k|        D(fprintf(stderr, "%*c> continue_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'continue'"));
 3084|   277k|        Token * _keyword;
 3085|   277k|        if (
 3086|   277k|            (_keyword = _PyPegen_expect_token(p, 529))  // token='continue'
  ------------------
  |  Branch (3086:13): [True: 1.83k, False: 275k]
  ------------------
 3087|   277k|        )
 3088|  1.83k|        {
 3089|  1.83k|            D(fprintf(stderr, "%*c+ continue_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'continue'"));
 3090|  1.83k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3091|  1.83k|            if (_token == NULL) {
  ------------------
  |  Branch (3091:17): [True: 0, False: 1.83k]
  ------------------
 3092|      0|                p->level--;
 3093|      0|                return NULL;
 3094|      0|            }
 3095|  1.83k|            int _end_lineno = _token->end_lineno;
 3096|  1.83k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.83k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.83k]
  |  |  ------------------
  ------------------
 3097|  1.83k|            int _end_col_offset = _token->end_col_offset;
 3098|  1.83k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.83k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.83k]
  |  |  ------------------
  ------------------
 3099|  1.83k|            _res = _PyAST_Continue ( EXTRA );
  ------------------
  |  |  307|  1.83k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3100|  1.83k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3100:18): [True: 0, False: 1.83k]
  |  Branch (3100:34): [True: 0, False: 1.83k]
  |  Branch (3100:57): [True: 0, False: 0]
  ------------------
 3101|      0|                p->error_indicator = 1;
 3102|      0|                p->level--;
 3103|      0|                return NULL;
 3104|      0|            }
 3105|  1.83k|            goto done;
 3106|  1.83k|        }
 3107|   275k|        p->mark = _mark;
 3108|   275k|        D(fprintf(stderr, "%*c%s continue_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3109|   275k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'continue'"));
 3110|   275k|    }
 3111|   275k|    _res = NULL;
 3112|   277k|  done:
 3113|   277k|    p->level--;
 3114|   277k|    return _res;
 3115|   275k|}
parser.c:simple_stmt_rule:
 1557|   388k|{
 1558|   388k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   776k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1558:9): [True: 0, False: 388k]
  |  Branch (1558:35): [True: 0, False: 388k]
  ------------------
 1559|      0|        _Pypegen_stack_overflow(p);
 1560|      0|    }
 1561|   388k|    if (p->error_indicator) {
  ------------------
  |  Branch (1561:9): [True: 0, False: 388k]
  ------------------
 1562|      0|        p->level--;
 1563|      0|        return NULL;
 1564|      0|    }
 1565|   388k|    stmt_ty _res = NULL;
 1566|   388k|    if (_PyPegen_is_memoized(p, simple_stmt_type, &_res)) {
  ------------------
  |  |   98|   388k|#define simple_stmt_type 1009
  ------------------
  |  Branch (1566:9): [True: 67.9k, False: 320k]
  ------------------
 1567|  67.9k|        p->level--;
 1568|  67.9k|        return _res;
 1569|  67.9k|    }
 1570|   320k|    int _mark = p->mark;
 1571|   320k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (1571:9): [True: 0, False: 320k]
  |  Branch (1571:31): [True: 0, False: 0]
  ------------------
 1572|      0|        p->error_indicator = 1;
 1573|      0|        p->level--;
 1574|      0|        return NULL;
 1575|      0|    }
 1576|   320k|    int _start_lineno = p->tokens[_mark]->lineno;
 1577|   320k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   320k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 320k]
  |  |  ------------------
  ------------------
 1578|   320k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 1579|   320k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   320k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 320k]
  |  |  ------------------
  ------------------
 1580|   320k|    { // assignment
 1581|   320k|        if (p->error_indicator) {
  ------------------
  |  Branch (1581:13): [True: 0, False: 320k]
  ------------------
 1582|      0|            p->level--;
 1583|      0|            return NULL;
 1584|      0|        }
 1585|   320k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assignment"));
 1586|   320k|        stmt_ty assignment_var;
 1587|   320k|        if (
 1588|   320k|            (assignment_var = assignment_rule(p))  // assignment
  ------------------
  |  Branch (1588:13): [True: 58.0k, False: 262k]
  ------------------
 1589|   320k|        )
 1590|  58.0k|        {
 1591|  58.0k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assignment"));
 1592|  58.0k|            _res = assignment_var;
 1593|  58.0k|            goto done;
 1594|  58.0k|        }
 1595|   262k|        p->mark = _mark;
 1596|   262k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1597|   262k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assignment"));
 1598|   262k|    }
 1599|      0|    { // &"type" type_alias
 1600|   262k|        if (p->error_indicator) {
  ------------------
  |  Branch (1600:13): [True: 3.91k, False: 258k]
  ------------------
 1601|  3.91k|            p->level--;
 1602|  3.91k|            return NULL;
 1603|  3.91k|        }
 1604|   258k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&\"type\" type_alias"));
 1605|   258k|        stmt_ty type_alias_var;
 1606|   258k|        if (
 1607|   258k|            _PyPegen_lookahead_with_string(1, _PyPegen_expect_soft_keyword, p, "type")
  ------------------
  |  Branch (1607:13): [True: 1.07k, False: 257k]
  ------------------
 1608|  1.07k|            &&
 1609|  1.07k|            (type_alias_var = type_alias_rule(p))  // type_alias
  ------------------
  |  Branch (1609:13): [True: 826, False: 249]
  ------------------
 1610|   258k|        )
 1611|    826|        {
 1612|    826|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&\"type\" type_alias"));
 1613|    826|            _res = type_alias_var;
 1614|    826|            goto done;
 1615|    826|        }
 1616|   257k|        p->mark = _mark;
 1617|   257k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1618|   257k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&\"type\" type_alias"));
 1619|   257k|    }
 1620|      0|    { // &('import' | 'from' | "lazy") import_stmt
 1621|   257k|        if (p->error_indicator) {
  ------------------
  |  Branch (1621:13): [True: 10, False: 257k]
  ------------------
 1622|     10|            p->level--;
 1623|     10|            return NULL;
 1624|     10|        }
 1625|   257k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from' | \"lazy\") import_stmt"));
 1626|   257k|        stmt_ty import_stmt_var;
 1627|   257k|        if (
 1628|   257k|            _PyPegen_lookahead(1, _tmp_5_rule, p)
  ------------------
  |  Branch (1628:13): [True: 10.4k, False: 247k]
  ------------------
 1629|  10.4k|            &&
 1630|  10.4k|            (import_stmt_var = import_stmt_rule(p))  // import_stmt
  ------------------
  |  Branch (1630:13): [True: 10.2k, False: 245]
  ------------------
 1631|   257k|        )
 1632|  10.2k|        {
 1633|  10.2k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&('import' | 'from' | \"lazy\") import_stmt"));
 1634|  10.2k|            _res = import_stmt_var;
 1635|  10.2k|            goto done;
 1636|  10.2k|        }
 1637|   247k|        p->mark = _mark;
 1638|   247k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1639|   247k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&('import' | 'from' | \"lazy\") import_stmt"));
 1640|   247k|    }
 1641|      0|    { // star_expressions
 1642|   247k|        if (p->error_indicator) {
  ------------------
  |  Branch (1642:13): [True: 52, False: 247k]
  ------------------
 1643|     52|            p->level--;
 1644|     52|            return NULL;
 1645|     52|        }
 1646|   247k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions"));
 1647|   247k|        expr_ty e;
 1648|   247k|        if (
 1649|   247k|            (e = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (1649:13): [True: 187k, False: 59.9k]
  ------------------
 1650|   247k|        )
 1651|   187k|        {
 1652|   187k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions"));
 1653|   187k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 1654|   187k|            if (_token == NULL) {
  ------------------
  |  Branch (1654:17): [True: 0, False: 187k]
  ------------------
 1655|      0|                p->level--;
 1656|      0|                return NULL;
 1657|      0|            }
 1658|   187k|            int _end_lineno = _token->end_lineno;
 1659|   187k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   187k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 187k]
  |  |  ------------------
  ------------------
 1660|   187k|            int _end_col_offset = _token->end_col_offset;
 1661|   187k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   187k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 187k]
  |  |  ------------------
  ------------------
 1662|   187k|            _res = _PyAST_Expr ( e , EXTRA );
  ------------------
  |  |  307|   187k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 1663|   187k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1663:18): [True: 0, False: 187k]
  |  Branch (1663:34): [True: 0, False: 187k]
  |  Branch (1663:57): [True: 0, False: 0]
  ------------------
 1664|      0|                p->error_indicator = 1;
 1665|      0|                p->level--;
 1666|      0|                return NULL;
 1667|      0|            }
 1668|   187k|            goto done;
 1669|   187k|        }
 1670|  59.9k|        p->mark = _mark;
 1671|  59.9k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1672|  59.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions"));
 1673|  59.9k|    }
 1674|      0|    { // &'return' return_stmt
 1675|  59.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (1675:13): [True: 351, False: 59.6k]
  ------------------
 1676|    351|            p->level--;
 1677|    351|            return NULL;
 1678|    351|        }
 1679|  59.6k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
 1680|  59.6k|        stmt_ty return_stmt_var;
 1681|  59.6k|        if (
 1682|  59.6k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 522)  // token='return'
  ------------------
  |  Branch (1682:13): [True: 1.93k, False: 57.6k]
  ------------------
 1683|  1.93k|            &&
 1684|  1.93k|            (return_stmt_var = return_stmt_rule(p))  // return_stmt
  ------------------
  |  Branch (1684:13): [True: 1.93k, False: 2]
  ------------------
 1685|  59.6k|        )
 1686|  1.93k|        {
 1687|  1.93k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'return' return_stmt"));
 1688|  1.93k|            _res = return_stmt_var;
 1689|  1.93k|            goto done;
 1690|  1.93k|        }
 1691|  57.6k|        p->mark = _mark;
 1692|  57.6k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1693|  57.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'return' return_stmt"));
 1694|  57.6k|    }
 1695|      0|    { // &'raise' raise_stmt
 1696|  57.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (1696:13): [True: 2, False: 57.6k]
  ------------------
 1697|      2|            p->level--;
 1698|      2|            return NULL;
 1699|      2|        }
 1700|  57.6k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
 1701|  57.6k|        stmt_ty raise_stmt_var;
 1702|  57.6k|        if (
 1703|  57.6k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 632)  // token='raise'
  ------------------
  |  Branch (1703:13): [True: 2.17k, False: 55.5k]
  ------------------
 1704|  2.17k|            &&
 1705|  2.17k|            (raise_stmt_var = raise_stmt_rule(p))  // raise_stmt
  ------------------
  |  Branch (1705:13): [True: 2.16k, False: 11]
  ------------------
 1706|  57.6k|        )
 1707|  2.16k|        {
 1708|  2.16k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'raise' raise_stmt"));
 1709|  2.16k|            _res = raise_stmt_var;
 1710|  2.16k|            goto done;
 1711|  2.16k|        }
 1712|  55.5k|        p->mark = _mark;
 1713|  55.5k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1714|  55.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'raise' raise_stmt"));
 1715|  55.5k|    }
 1716|      0|    { // &'pass' pass_stmt
 1717|  55.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (1717:13): [True: 11, False: 55.5k]
  ------------------
 1718|     11|            p->level--;
 1719|     11|            return NULL;
 1720|     11|        }
 1721|  55.5k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'pass' pass_stmt"));
 1722|  55.5k|        stmt_ty pass_stmt_var;
 1723|  55.5k|        if (
 1724|  55.5k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 527)  // token='pass'
  ------------------
  |  Branch (1724:13): [True: 2.50k, False: 53.0k]
  ------------------
 1725|  2.50k|            &&
 1726|  2.50k|            (pass_stmt_var = pass_stmt_rule(p))  // pass_stmt
  ------------------
  |  Branch (1726:13): [True: 2.50k, False: 0]
  ------------------
 1727|  55.5k|        )
 1728|  2.50k|        {
 1729|  2.50k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'pass' pass_stmt"));
 1730|  2.50k|            _res = pass_stmt_var;
 1731|  2.50k|            goto done;
 1732|  2.50k|        }
 1733|  53.0k|        p->mark = _mark;
 1734|  53.0k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1735|  53.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'pass' pass_stmt"));
 1736|  53.0k|    }
 1737|      0|    { // &'del' del_stmt
 1738|  53.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (1738:13): [True: 0, False: 53.0k]
  ------------------
 1739|      0|            p->level--;
 1740|      0|            return NULL;
 1741|      0|        }
 1742|  53.0k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
 1743|  53.0k|        stmt_ty del_stmt_var;
 1744|  53.0k|        if (
 1745|  53.0k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 634)  // token='del'
  ------------------
  |  Branch (1745:13): [True: 1.96k, False: 51.0k]
  ------------------
 1746|  1.96k|            &&
 1747|  1.96k|            (del_stmt_var = del_stmt_rule(p))  // del_stmt
  ------------------
  |  Branch (1747:13): [True: 1.74k, False: 221]
  ------------------
 1748|  53.0k|        )
 1749|  1.74k|        {
 1750|  1.74k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'del' del_stmt"));
 1751|  1.74k|            _res = del_stmt_var;
 1752|  1.74k|            goto done;
 1753|  1.74k|        }
 1754|  51.2k|        p->mark = _mark;
 1755|  51.2k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1756|  51.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'del' del_stmt"));
 1757|  51.2k|    }
 1758|      0|    { // &'yield' yield_stmt
 1759|  51.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (1759:13): [True: 47, False: 51.2k]
  ------------------
 1760|     47|            p->level--;
 1761|     47|            return NULL;
 1762|     47|        }
 1763|  51.2k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
 1764|  51.2k|        stmt_ty yield_stmt_var;
 1765|  51.2k|        if (
 1766|  51.2k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 588)  // token='yield'
  ------------------
  |  Branch (1766:13): [True: 1.85k, False: 49.3k]
  ------------------
 1767|  1.85k|            &&
 1768|  1.85k|            (yield_stmt_var = yield_stmt_rule(p))  // yield_stmt
  ------------------
  |  Branch (1768:13): [True: 1.85k, False: 2]
  ------------------
 1769|  51.2k|        )
 1770|  1.85k|        {
 1771|  1.85k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'yield' yield_stmt"));
 1772|  1.85k|            _res = yield_stmt_var;
 1773|  1.85k|            goto done;
 1774|  1.85k|        }
 1775|  49.3k|        p->mark = _mark;
 1776|  49.3k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1777|  49.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'yield' yield_stmt"));
 1778|  49.3k|    }
 1779|      0|    { // &'assert' assert_stmt
 1780|  49.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (1780:13): [True: 2, False: 49.3k]
  ------------------
 1781|      2|            p->level--;
 1782|      2|            return NULL;
 1783|      2|        }
 1784|  49.3k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
 1785|  49.3k|        stmt_ty assert_stmt_var;
 1786|  49.3k|        if (
 1787|  49.3k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 638)  // token='assert'
  ------------------
  |  Branch (1787:13): [True: 4.33k, False: 45.0k]
  ------------------
 1788|  4.33k|            &&
 1789|  4.33k|            (assert_stmt_var = assert_stmt_rule(p))  // assert_stmt
  ------------------
  |  Branch (1789:13): [True: 4.31k, False: 26]
  ------------------
 1790|  49.3k|        )
 1791|  4.31k|        {
 1792|  4.31k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'assert' assert_stmt"));
 1793|  4.31k|            _res = assert_stmt_var;
 1794|  4.31k|            goto done;
 1795|  4.31k|        }
 1796|  45.0k|        p->mark = _mark;
 1797|  45.0k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1798|  45.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'assert' assert_stmt"));
 1799|  45.0k|    }
 1800|      0|    { // &'break' break_stmt
 1801|  45.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (1801:13): [True: 16, False: 45.0k]
  ------------------
 1802|     16|            p->level--;
 1803|     16|            return NULL;
 1804|     16|        }
 1805|  45.0k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'break' break_stmt"));
 1806|  45.0k|        stmt_ty break_stmt_var;
 1807|  45.0k|        if (
 1808|  45.0k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 528)  // token='break'
  ------------------
  |  Branch (1808:13): [True: 1.32k, False: 43.7k]
  ------------------
 1809|  1.32k|            &&
 1810|  1.32k|            (break_stmt_var = break_stmt_rule(p))  // break_stmt
  ------------------
  |  Branch (1810:13): [True: 1.32k, False: 0]
  ------------------
 1811|  45.0k|        )
 1812|  1.32k|        {
 1813|  1.32k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'break' break_stmt"));
 1814|  1.32k|            _res = break_stmt_var;
 1815|  1.32k|            goto done;
 1816|  1.32k|        }
 1817|  43.7k|        p->mark = _mark;
 1818|  43.7k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1819|  43.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'break' break_stmt"));
 1820|  43.7k|    }
 1821|      0|    { // &'continue' continue_stmt
 1822|  43.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (1822:13): [True: 0, False: 43.7k]
  ------------------
 1823|      0|            p->level--;
 1824|      0|            return NULL;
 1825|      0|        }
 1826|  43.7k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'continue' continue_stmt"));
 1827|  43.7k|        stmt_ty continue_stmt_var;
 1828|  43.7k|        if (
 1829|  43.7k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 529)  // token='continue'
  ------------------
  |  Branch (1829:13): [True: 1.45k, False: 42.2k]
  ------------------
 1830|  1.45k|            &&
 1831|  1.45k|            (continue_stmt_var = continue_stmt_rule(p))  // continue_stmt
  ------------------
  |  Branch (1831:13): [True: 1.45k, False: 0]
  ------------------
 1832|  43.7k|        )
 1833|  1.45k|        {
 1834|  1.45k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'continue' continue_stmt"));
 1835|  1.45k|            _res = continue_stmt_var;
 1836|  1.45k|            goto done;
 1837|  1.45k|        }
 1838|  42.2k|        p->mark = _mark;
 1839|  42.2k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1840|  42.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'continue' continue_stmt"));
 1841|  42.2k|    }
 1842|      0|    { // &'global' global_stmt
 1843|  42.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (1843:13): [True: 0, False: 42.2k]
  ------------------
 1844|      0|            p->level--;
 1845|      0|            return NULL;
 1846|      0|        }
 1847|  42.2k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
 1848|  42.2k|        stmt_ty global_stmt_var;
 1849|  42.2k|        if (
 1850|  42.2k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 530)  // token='global'
  ------------------
  |  Branch (1850:13): [True: 1.26k, False: 40.9k]
  ------------------
 1851|  1.26k|            &&
 1852|  1.26k|            (global_stmt_var = global_stmt_rule(p))  // global_stmt
  ------------------
  |  Branch (1852:13): [True: 1.25k, False: 11]
  ------------------
 1853|  42.2k|        )
 1854|  1.25k|        {
 1855|  1.25k|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'global' global_stmt"));
 1856|  1.25k|            _res = global_stmt_var;
 1857|  1.25k|            goto done;
 1858|  1.25k|        }
 1859|  40.9k|        p->mark = _mark;
 1860|  40.9k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1861|  40.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'global' global_stmt"));
 1862|  40.9k|    }
 1863|      0|    { // &'nonlocal' nonlocal_stmt
 1864|  40.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (1864:13): [True: 4, False: 40.9k]
  ------------------
 1865|      4|            p->level--;
 1866|      4|            return NULL;
 1867|      4|        }
 1868|  40.9k|        D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
 1869|  40.9k|        stmt_ty nonlocal_stmt_var;
 1870|  40.9k|        if (
 1871|  40.9k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 531)  // token='nonlocal'
  ------------------
  |  Branch (1871:13): [True: 391, False: 40.5k]
  ------------------
 1872|    391|            &&
 1873|    391|            (nonlocal_stmt_var = nonlocal_stmt_rule(p))  // nonlocal_stmt
  ------------------
  |  Branch (1873:13): [True: 387, False: 4]
  ------------------
 1874|  40.9k|        )
 1875|    387|        {
 1876|    387|            D(fprintf(stderr, "%*c+ simple_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
 1877|    387|            _res = nonlocal_stmt_var;
 1878|    387|            goto done;
 1879|    387|        }
 1880|  40.6k|        p->mark = _mark;
 1881|  40.6k|        D(fprintf(stderr, "%*c%s simple_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1882|  40.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'nonlocal' nonlocal_stmt"));
 1883|  40.6k|    }
 1884|  40.6k|    _res = NULL;
 1885|   316k|  done:
 1886|   316k|    _PyPegen_insert_memo(p, _mark, simple_stmt_type, _res);
  ------------------
  |  |   98|   316k|#define simple_stmt_type 1009
  ------------------
 1887|   316k|    p->level--;
 1888|   316k|    return _res;
 1889|  40.6k|}
parser.c:assignment_rule:
 2092|   320k|{
 2093|   320k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   640k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2093:9): [True: 0, False: 320k]
  |  Branch (2093:35): [True: 0, False: 320k]
  ------------------
 2094|      0|        _Pypegen_stack_overflow(p);
 2095|      0|    }
 2096|   320k|    if (p->error_indicator) {
  ------------------
  |  Branch (2096:9): [True: 0, False: 320k]
  ------------------
 2097|      0|        p->level--;
 2098|      0|        return NULL;
 2099|      0|    }
 2100|   320k|    stmt_ty _res = NULL;
 2101|   320k|    int _mark = p->mark;
 2102|   320k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (2102:9): [True: 0, False: 320k]
  |  Branch (2102:31): [True: 0, False: 0]
  ------------------
 2103|      0|        p->error_indicator = 1;
 2104|      0|        p->level--;
 2105|      0|        return NULL;
 2106|      0|    }
 2107|   320k|    int _start_lineno = p->tokens[_mark]->lineno;
 2108|   320k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   320k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 320k]
  |  |  ------------------
  ------------------
 2109|   320k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 2110|   320k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   320k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 320k]
  |  |  ------------------
  ------------------
 2111|   320k|    { // NAME ':' expression ['=' annotated_rhs]
 2112|   320k|        if (p->error_indicator) {
  ------------------
  |  Branch (2112:13): [True: 0, False: 320k]
  ------------------
 2113|      0|            p->level--;
 2114|      0|            return NULL;
 2115|      0|        }
 2116|   320k|        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
 2117|   320k|        Token * _literal;
 2118|   320k|        expr_ty a;
 2119|   320k|        expr_ty b;
 2120|   320k|        void *c;
 2121|   320k|        if (
 2122|   320k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (2122:13): [True: 211k, False: 109k]
  ------------------
 2123|   211k|            &&
 2124|   211k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (2124:13): [True: 30.9k, False: 180k]
  ------------------
 2125|  30.9k|            &&
 2126|  30.9k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (2126:13): [True: 30.3k, False: 531]
  ------------------
 2127|  30.3k|            &&
 2128|  30.3k|            (c = _tmp_10_rule(p), !p->error_indicator)  // ['=' annotated_rhs]
  ------------------
  |  Branch (2128:13): [True: 30.3k, False: 2]
  ------------------
 2129|   320k|        )
 2130|  30.3k|        {
 2131|  30.3k|            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
 2132|  30.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2133|  30.3k|            if (_token == NULL) {
  ------------------
  |  Branch (2133:17): [True: 0, False: 30.3k]
  ------------------
 2134|      0|                p->level--;
 2135|      0|                return NULL;
 2136|      0|            }
 2137|  30.3k|            int _end_lineno = _token->end_lineno;
 2138|  30.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  30.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30.3k]
  |  |  ------------------
  ------------------
 2139|  30.3k|            int _end_col_offset = _token->end_col_offset;
 2140|  30.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  30.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30.3k]
  |  |  ------------------
  ------------------
 2141|  30.3k|            _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotation syntax is" , _PyAST_AnnAssign ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , b , c , 1 , EXTRA ) );
  ------------------
  |  |  345|  30.3k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 2142|  30.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2142:18): [True: 0, False: 30.3k]
  |  Branch (2142:34): [True: 0, False: 30.3k]
  |  Branch (2142:57): [True: 0, False: 0]
  ------------------
 2143|      0|                p->error_indicator = 1;
 2144|      0|                p->level--;
 2145|      0|                return NULL;
 2146|      0|            }
 2147|  30.3k|            goto done;
 2148|  30.3k|        }
 2149|   290k|        p->mark = _mark;
 2150|   290k|        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
 2151|   290k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]"));
 2152|   290k|    }
 2153|      0|    { // ('(' single_target ')' | attribute_or_subscript_target) ':' expression ['=' annotated_rhs]
 2154|   290k|        if (p->error_indicator) {
  ------------------
  |  Branch (2154:13): [True: 451, False: 289k]
  ------------------
 2155|    451|            p->level--;
 2156|    451|            return NULL;
 2157|    451|        }
 2158|   289k|        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | attribute_or_subscript_target) ':' expression ['=' annotated_rhs]"));
 2159|   289k|        Token * _literal;
 2160|   289k|        void *a;
 2161|   289k|        expr_ty b;
 2162|   289k|        void *c;
 2163|   289k|        if (
 2164|   289k|            (a = _tmp_11_rule(p))  // '(' single_target ')' | attribute_or_subscript_target
  ------------------
  |  Branch (2164:13): [True: 12.8k, False: 276k]
  ------------------
 2165|  12.8k|            &&
 2166|  12.8k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (2166:13): [True: 1.58k, False: 11.2k]
  ------------------
 2167|  1.58k|            &&
 2168|  1.58k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (2168:13): [True: 1.57k, False: 11]
  ------------------
 2169|  1.57k|            &&
 2170|  1.57k|            (c = _tmp_10_rule(p), !p->error_indicator)  // ['=' annotated_rhs]
  ------------------
  |  Branch (2170:13): [True: 1.57k, False: 1]
  ------------------
 2171|   289k|        )
 2172|  1.57k|        {
 2173|  1.57k|            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | attribute_or_subscript_target) ':' expression ['=' annotated_rhs]"));
 2174|  1.57k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2175|  1.57k|            if (_token == NULL) {
  ------------------
  |  Branch (2175:17): [True: 0, False: 1.57k]
  ------------------
 2176|      0|                p->level--;
 2177|      0|                return NULL;
 2178|      0|            }
 2179|  1.57k|            int _end_lineno = _token->end_lineno;
 2180|  1.57k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.57k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.57k]
  |  |  ------------------
  ------------------
 2181|  1.57k|            int _end_col_offset = _token->end_col_offset;
 2182|  1.57k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.57k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.57k]
  |  |  ------------------
  ------------------
 2183|  1.57k|            _res = CHECK_VERSION ( stmt_ty , 6 , "Variable annotations syntax is" , _PyAST_AnnAssign ( a , b , c , 0 , EXTRA ) );
  ------------------
  |  |  345|  1.57k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 2184|  1.57k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2184:18): [True: 0, False: 1.57k]
  |  Branch (2184:34): [True: 0, False: 1.57k]
  |  Branch (2184:57): [True: 0, False: 0]
  ------------------
 2185|      0|                p->error_indicator = 1;
 2186|      0|                p->level--;
 2187|      0|                return NULL;
 2188|      0|            }
 2189|  1.57k|            goto done;
 2190|  1.57k|        }
 2191|   287k|        p->mark = _mark;
 2192|   287k|        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
 2193|   287k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('(' single_target ')' | attribute_or_subscript_target) ':' expression ['=' annotated_rhs]"));
 2194|   287k|    }
 2195|      0|    { // ((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?
 2196|   287k|        if (p->error_indicator) {
  ------------------
  |  Branch (2196:13): [True: 1.46k, False: 286k]
  ------------------
 2197|  1.46k|            p->level--;
 2198|  1.46k|            return NULL;
 2199|  1.46k|        }
 2200|   286k|        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?"));
 2201|   286k|        asdl_expr_seq* a;
 2202|   286k|        expr_ty b;
 2203|   286k|        void *tc;
 2204|   286k|        if (
 2205|   286k|            (a = (asdl_expr_seq*)_loop1_12_rule(p))  // ((star_targets '='))+
  ------------------
  |  Branch (2205:13): [True: 12.1k, False: 274k]
  ------------------
 2206|  12.1k|            &&
 2207|  12.1k|            (b = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (2207:13): [True: 12.0k, False: 104]
  ------------------
 2208|  12.0k|            &&
 2209|  12.0k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22)  // token='='
  ------------------
  |  Branch (2209:13): [True: 12.0k, False: 23]
  ------------------
 2210|  12.0k|            &&
 2211|  12.0k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  12.0k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (2211:13): [True: 12.0k, False: 0]
  ------------------
 2212|   286k|        )
 2213|  12.0k|        {
 2214|  12.0k|            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?"));
 2215|  12.0k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2216|  12.0k|            if (_token == NULL) {
  ------------------
  |  Branch (2216:17): [True: 0, False: 12.0k]
  ------------------
 2217|      0|                p->level--;
 2218|      0|                return NULL;
 2219|      0|            }
 2220|  12.0k|            int _end_lineno = _token->end_lineno;
 2221|  12.0k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  12.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 12.0k]
  |  |  ------------------
  ------------------
 2222|  12.0k|            int _end_col_offset = _token->end_col_offset;
 2223|  12.0k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  12.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 12.0k]
  |  |  ------------------
  ------------------
 2224|  12.0k|            _res = _PyAST_Assign ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
  ------------------
  |  |  307|  12.0k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2225|  12.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2225:18): [True: 0, False: 12.0k]
  |  Branch (2225:34): [True: 3, False: 12.0k]
  |  Branch (2225:57): [True: 3, False: 0]
  ------------------
 2226|      3|                p->error_indicator = 1;
 2227|      3|                p->level--;
 2228|      3|                return NULL;
 2229|      3|            }
 2230|  12.0k|            goto done;
 2231|  12.0k|        }
 2232|   274k|        p->mark = _mark;
 2233|   274k|        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
 2234|   274k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))+ annotated_rhs !'=' TYPE_COMMENT?"));
 2235|   274k|    }
 2236|      0|    { // single_target augassign ~ annotated_rhs
 2237|   274k|        if (p->error_indicator) {
  ------------------
  |  Branch (2237:13): [True: 339, False: 274k]
  ------------------
 2238|    339|            p->level--;
 2239|    339|            return NULL;
 2240|    339|        }
 2241|   274k|        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ annotated_rhs"));
 2242|   274k|        int _cut_var = 0;
 2243|   274k|        expr_ty a;
 2244|   274k|        AugOperator* b;
 2245|   274k|        expr_ty c;
 2246|   274k|        if (
 2247|   274k|            (a = single_target_rule(p))  // single_target
  ------------------
  |  Branch (2247:13): [True: 164k, False: 109k]
  ------------------
 2248|   164k|            &&
 2249|   164k|            (b = augassign_rule(p))  // augassign
  ------------------
  |  Branch (2249:13): [True: 14.1k, False: 150k]
  ------------------
 2250|  14.1k|            &&
 2251|  14.1k|            (_cut_var = 1)
  ------------------
  |  Branch (2251:13): [True: 14.1k, False: 0]
  ------------------
 2252|  14.1k|            &&
 2253|  14.1k|            (c = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (2253:13): [True: 14.1k, False: 77]
  ------------------
 2254|   274k|        )
 2255|  14.1k|        {
 2256|  14.1k|            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ annotated_rhs"));
 2257|  14.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2258|  14.1k|            if (_token == NULL) {
  ------------------
  |  Branch (2258:17): [True: 0, False: 14.1k]
  ------------------
 2259|      0|                p->level--;
 2260|      0|                return NULL;
 2261|      0|            }
 2262|  14.1k|            int _end_lineno = _token->end_lineno;
 2263|  14.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  14.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2264|  14.1k|            int _end_col_offset = _token->end_col_offset;
 2265|  14.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  14.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 14.1k]
  |  |  ------------------
  ------------------
 2266|  14.1k|            _res = _PyAST_AugAssign ( a , b -> kind , c , EXTRA );
  ------------------
  |  |  307|  14.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2267|  14.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2267:18): [True: 0, False: 14.1k]
  |  Branch (2267:34): [True: 0, False: 14.1k]
  |  Branch (2267:57): [True: 0, False: 0]
  ------------------
 2268|      0|                p->error_indicator = 1;
 2269|      0|                p->level--;
 2270|      0|                return NULL;
 2271|      0|            }
 2272|  14.1k|            goto done;
 2273|  14.1k|        }
 2274|   260k|        p->mark = _mark;
 2275|   260k|        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
 2276|   260k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_target augassign ~ annotated_rhs"));
 2277|   260k|        if (_cut_var) {
  ------------------
  |  Branch (2277:13): [True: 77, False: 259k]
  ------------------
 2278|     77|            p->level--;
 2279|     77|            return NULL;
 2280|     77|        }
 2281|   260k|    }
 2282|   259k|    if (p->call_invalid_rules) { // invalid_assignment
  ------------------
  |  Branch (2282:9): [True: 43.6k, False: 216k]
  ------------------
 2283|  43.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (2283:13): [True: 0, False: 43.6k]
  ------------------
 2284|      0|            p->level--;
 2285|      0|            return NULL;
 2286|      0|        }
 2287|  43.6k|        D(fprintf(stderr, "%*c> assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
 2288|  43.6k|        void *invalid_assignment_var;
 2289|  43.6k|        if (
 2290|  43.6k|            (invalid_assignment_var = invalid_assignment_rule(p))  // invalid_assignment
  ------------------
  |  Branch (2290:13): [True: 0, False: 43.6k]
  ------------------
 2291|  43.6k|        )
 2292|      0|        {
 2293|      0|            D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_assignment"));
 2294|      0|            _res = invalid_assignment_var;
 2295|      0|            goto done;
 2296|      0|        }
 2297|  43.6k|        p->mark = _mark;
 2298|  43.6k|        D(fprintf(stderr, "%*c%s assignment[%d-%d]: %s failed!\n", p->level, ' ',
 2299|  43.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_assignment"));
 2300|  43.6k|    }
 2301|   259k|    _res = NULL;
 2302|   318k|  done:
 2303|   318k|    p->level--;
 2304|   318k|    return _res;
 2305|   259k|}
parser.c:_tmp_10_rule:
27922|  31.9k|{
27923|  31.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  63.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27923:9): [True: 0, False: 31.9k]
  |  Branch (27923:35): [True: 0, False: 31.9k]
  ------------------
27924|      0|        _Pypegen_stack_overflow(p);
27925|      0|    }
27926|  31.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (27926:9): [True: 0, False: 31.9k]
  ------------------
27927|      0|        p->level--;
27928|      0|        return NULL;
27929|      0|    }
27930|  31.9k|    void * _res = NULL;
27931|  31.9k|    int _mark = p->mark;
27932|  31.9k|    { // '=' annotated_rhs
27933|  31.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (27933:13): [True: 0, False: 31.9k]
  ------------------
27934|      0|            p->level--;
27935|      0|            return NULL;
27936|      0|        }
27937|  31.9k|        D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
27938|  31.9k|        Token * _literal;
27939|  31.9k|        expr_ty d;
27940|  31.9k|        if (
27941|  31.9k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (27941:13): [True: 719, False: 31.2k]
  ------------------
27942|    719|            &&
27943|    719|            (d = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (27943:13): [True: 710, False: 9]
  ------------------
27944|  31.9k|        )
27945|    710|        {
27946|    710|            D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs"));
27947|    710|            _res = d;
27948|    710|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27948:18): [True: 0, False: 710]
  |  Branch (27948:34): [True: 0, False: 710]
  |  Branch (27948:57): [True: 0, False: 0]
  ------------------
27949|      0|                p->error_indicator = 1;
27950|      0|                p->level--;
27951|      0|                return NULL;
27952|      0|            }
27953|    710|            goto done;
27954|    710|        }
27955|  31.2k|        p->mark = _mark;
27956|  31.2k|        D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ',
27957|  31.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs"));
27958|  31.2k|    }
27959|  31.2k|    _res = NULL;
27960|  31.9k|  done:
27961|  31.9k|    p->level--;
27962|  31.9k|    return _res;
27963|  31.2k|}
parser.c:_tmp_11_rule:
27968|   289k|{
27969|   289k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   579k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27969:9): [True: 0, False: 289k]
  |  Branch (27969:35): [True: 0, False: 289k]
  ------------------
27970|      0|        _Pypegen_stack_overflow(p);
27971|      0|    }
27972|   289k|    if (p->error_indicator) {
  ------------------
  |  Branch (27972:9): [True: 0, False: 289k]
  ------------------
27973|      0|        p->level--;
27974|      0|        return NULL;
27975|      0|    }
27976|   289k|    void * _res = NULL;
27977|   289k|    int _mark = p->mark;
27978|   289k|    { // '(' single_target ')'
27979|   289k|        if (p->error_indicator) {
  ------------------
  |  Branch (27979:13): [True: 0, False: 289k]
  ------------------
27980|      0|            p->level--;
27981|      0|            return NULL;
27982|      0|        }
27983|   289k|        D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
27984|   289k|        Token * _literal;
27985|   289k|        Token * _literal_1;
27986|   289k|        expr_ty b;
27987|   289k|        if (
27988|   289k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (27988:13): [True: 2.44k, False: 287k]
  ------------------
27989|  2.44k|            &&
27990|  2.44k|            (b = single_target_rule(p))  // single_target
  ------------------
  |  Branch (27990:13): [True: 590, False: 1.85k]
  ------------------
27991|    590|            &&
27992|    590|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (27992:13): [True: 322, False: 268]
  ------------------
27993|   289k|        )
27994|    322|        {
27995|    322|            D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'"));
27996|    322|            _res = b;
27997|    322|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27997:18): [True: 0, False: 322]
  |  Branch (27997:34): [True: 0, False: 322]
  |  Branch (27997:57): [True: 0, False: 0]
  ------------------
27998|      0|                p->error_indicator = 1;
27999|      0|                p->level--;
28000|      0|                return NULL;
28001|      0|            }
28002|    322|            goto done;
28003|    322|        }
28004|   289k|        p->mark = _mark;
28005|   289k|        D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ',
28006|   289k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'"));
28007|   289k|    }
28008|      0|    { // attribute_or_subscript_target
28009|   289k|        if (p->error_indicator) {
  ------------------
  |  Branch (28009:13): [True: 118, False: 289k]
  ------------------
28010|    118|            p->level--;
28011|    118|            return NULL;
28012|    118|        }
28013|   289k|        D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attribute_or_subscript_target"));
28014|   289k|        expr_ty attribute_or_subscript_target_var;
28015|   289k|        if (
28016|   289k|            (attribute_or_subscript_target_var = attribute_or_subscript_target_rule(p))  // attribute_or_subscript_target
  ------------------
  |  Branch (28016:13): [True: 12.5k, False: 276k]
  ------------------
28017|   289k|        )
28018|  12.5k|        {
28019|  12.5k|            D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attribute_or_subscript_target"));
28020|  12.5k|            _res = attribute_or_subscript_target_var;
28021|  12.5k|            goto done;
28022|  12.5k|        }
28023|   276k|        p->mark = _mark;
28024|   276k|        D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ',
28025|   276k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attribute_or_subscript_target"));
28026|   276k|    }
28027|   276k|    _res = NULL;
28028|   289k|  done:
28029|   289k|    p->level--;
28030|   289k|    return _res;
28031|   276k|}
parser.c:attribute_or_subscript_target_rule:
19149|   289k|{
19150|   289k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   578k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19150:9): [True: 0, False: 289k]
  |  Branch (19150:35): [True: 0, False: 289k]
  ------------------
19151|      0|        _Pypegen_stack_overflow(p);
19152|      0|    }
19153|   289k|    if (p->error_indicator) {
  ------------------
  |  Branch (19153:9): [True: 0, False: 289k]
  ------------------
19154|      0|        p->level--;
19155|      0|        return NULL;
19156|      0|    }
19157|   289k|    expr_ty _res = NULL;
19158|   289k|    int _mark = p->mark;
19159|   289k|    { // target_value
19160|   289k|        if (p->error_indicator) {
  ------------------
  |  Branch (19160:13): [True: 0, False: 289k]
  ------------------
19161|      0|            p->level--;
19162|      0|            return NULL;
19163|      0|        }
19164|   289k|        D(fprintf(stderr, "%*c> attribute_or_subscript_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_value"));
19165|   289k|        expr_ty a;
19166|   289k|        if (
19167|   289k|            (a = target_value_rule(p))  // target_value
  ------------------
  |  Branch (19167:13): [True: 209k, False: 79.3k]
  ------------------
19168|   289k|        )
19169|   209k|        {
19170|   209k|            D(fprintf(stderr, "%*c+ attribute_or_subscript_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_value"));
19171|   209k|            _res = _PyPegen_make_target ( p , a , ATTRIBUTE_OR_SUBSCRIPT_TARGETS );
19172|   209k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19172:18): [True: 197k, False: 12.5k]
  |  Branch (19172:34): [True: 0, False: 12.5k]
  |  Branch (19172:57): [True: 0, False: 197k]
  ------------------
19173|      0|                p->error_indicator = 1;
19174|      0|                p->level--;
19175|      0|                return NULL;
19176|      0|            }
19177|   209k|            goto done;
19178|   209k|        }
19179|  79.3k|        p->mark = _mark;
19180|  79.3k|        D(fprintf(stderr, "%*c%s attribute_or_subscript_target[%d-%d]: %s failed!\n", p->level, ' ',
19181|  79.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_value"));
19182|  79.3k|    }
19183|  79.3k|    _res = NULL;
19184|   289k|  done:
19185|   289k|    p->level--;
19186|   289k|    return _res;
19187|  79.3k|}
parser.c:_loop1_12_rule:
28036|   286k|{
28037|   286k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   573k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28037:9): [True: 0, False: 286k]
  |  Branch (28037:35): [True: 0, False: 286k]
  ------------------
28038|      0|        _Pypegen_stack_overflow(p);
28039|      0|    }
28040|   286k|    if (p->error_indicator) {
  ------------------
  |  Branch (28040:9): [True: 0, False: 286k]
  ------------------
28041|      0|        p->level--;
28042|      0|        return NULL;
28043|      0|    }
28044|   286k|    void *_res = NULL;
28045|   286k|    int _mark = p->mark;
28046|   286k|    void **_children = PyMem_Malloc(sizeof(void *));
28047|   286k|    if (!_children) {
  ------------------
  |  Branch (28047:9): [True: 0, False: 286k]
  ------------------
28048|      0|        p->error_indicator = 1;
28049|      0|        PyErr_NoMemory();
28050|      0|        p->level--;
28051|      0|        return NULL;
28052|      0|    }
28053|   286k|    Py_ssize_t _children_capacity = 1;
28054|   286k|    Py_ssize_t _n = 0;
28055|   286k|    { // (star_targets '=')
28056|   286k|        if (p->error_indicator) {
  ------------------
  |  Branch (28056:13): [True: 0, False: 286k]
  ------------------
28057|      0|            p->level--;
28058|      0|            return NULL;
28059|      0|        }
28060|   286k|        D(fprintf(stderr, "%*c> _loop1_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
28061|   286k|        void *_tmp_157_var;
28062|   286k|        while (
28063|   348k|            (_tmp_157_var = _tmp_157_rule(p))  // star_targets '='
  ------------------
  |  Branch (28063:13): [True: 62.3k, False: 286k]
  ------------------
28064|   286k|        )
28065|  62.3k|        {
28066|  62.3k|            _res = _tmp_157_var;
28067|  62.3k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28067:17): [True: 20.1k, False: 42.2k]
  ------------------
28068|  20.1k|                _children_capacity *= 2;
28069|  20.1k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28070|  20.1k|                if (!_new_children) {
  ------------------
  |  Branch (28070:21): [True: 0, False: 20.1k]
  ------------------
28071|      0|                    PyMem_Free(_children);
28072|      0|                    p->error_indicator = 1;
28073|      0|                    PyErr_NoMemory();
28074|      0|                    p->level--;
28075|      0|                    return NULL;
28076|      0|                }
28077|  20.1k|                _children = _new_children;
28078|  20.1k|            }
28079|  62.3k|            _children[_n++] = _res;
28080|  62.3k|            _mark = p->mark;
28081|  62.3k|        }
28082|   286k|        p->mark = _mark;
28083|   286k|        D(fprintf(stderr, "%*c%s _loop1_12[%d-%d]: %s failed!\n", p->level, ' ',
28084|   286k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
28085|   286k|    }
28086|   286k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (28086:9): [True: 274k, False: 12.2k]
  |  Branch (28086:20): [True: 149, False: 12.1k]
  ------------------
28087|   274k|        PyMem_Free(_children);
28088|   274k|        p->level--;
28089|   274k|        return NULL;
28090|   274k|    }
28091|  12.1k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28092|  12.1k|    if (!_seq) {
  ------------------
  |  Branch (28092:9): [True: 0, False: 12.1k]
  ------------------
28093|      0|        PyMem_Free(_children);
28094|      0|        p->error_indicator = 1;
28095|      0|        PyErr_NoMemory();
28096|      0|        p->level--;
28097|      0|        return NULL;
28098|      0|    }
28099|  74.3k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  62.1k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  74.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28099:28): [True: 62.1k, False: 12.1k]
  ------------------
28100|  12.1k|    PyMem_Free(_children);
28101|  12.1k|    p->level--;
28102|  12.1k|    return _seq;
28103|  12.1k|}
parser.c:_tmp_157_rule:
37050|   433k|{
37051|   433k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   866k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37051:9): [True: 0, False: 433k]
  |  Branch (37051:35): [True: 0, False: 433k]
  ------------------
37052|      0|        _Pypegen_stack_overflow(p);
37053|      0|    }
37054|   433k|    if (p->error_indicator) {
  ------------------
  |  Branch (37054:9): [True: 0, False: 433k]
  ------------------
37055|      0|        p->level--;
37056|      0|        return NULL;
37057|      0|    }
37058|   433k|    void * _res = NULL;
37059|   433k|    int _mark = p->mark;
37060|   433k|    { // star_targets '='
37061|   433k|        if (p->error_indicator) {
  ------------------
  |  Branch (37061:13): [True: 0, False: 433k]
  ------------------
37062|      0|            p->level--;
37063|      0|            return NULL;
37064|      0|        }
37065|   433k|        D(fprintf(stderr, "%*c> _tmp_157[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
37066|   433k|        Token * _literal;
37067|   433k|        expr_ty z;
37068|   433k|        if (
37069|   433k|            (z = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (37069:13): [True: 280k, False: 152k]
  ------------------
37070|   280k|            &&
37071|   280k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (37071:13): [True: 62.7k, False: 218k]
  ------------------
37072|   433k|        )
37073|  62.7k|        {
37074|  62.7k|            D(fprintf(stderr, "%*c+ _tmp_157[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_targets '='"));
37075|  62.7k|            _res = z;
37076|  62.7k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (37076:18): [True: 0, False: 62.7k]
  |  Branch (37076:34): [True: 0, False: 62.7k]
  |  Branch (37076:57): [True: 0, False: 0]
  ------------------
37077|      0|                p->error_indicator = 1;
37078|      0|                p->level--;
37079|      0|                return NULL;
37080|      0|            }
37081|  62.7k|            goto done;
37082|  62.7k|        }
37083|   370k|        p->mark = _mark;
37084|   370k|        D(fprintf(stderr, "%*c%s _tmp_157[%d-%d]: %s failed!\n", p->level, ' ',
37085|   370k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_targets '='"));
37086|   370k|    }
37087|   370k|    _res = NULL;
37088|   433k|  done:
37089|   433k|    p->level--;
37090|   433k|    return _res;
37091|   370k|}
parser.c:single_target_rule:
19106|   276k|{
19107|   276k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   553k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19107:9): [True: 0, False: 276k]
  |  Branch (19107:35): [True: 0, False: 276k]
  ------------------
19108|      0|        _Pypegen_stack_overflow(p);
19109|      0|    }
19110|   276k|    if (p->error_indicator) {
  ------------------
  |  Branch (19110:9): [True: 0, False: 276k]
  ------------------
19111|      0|        p->level--;
19112|      0|        return NULL;
19113|      0|    }
19114|   276k|    expr_ty _res = NULL;
19115|   276k|    int _mark = p->mark;
19116|   276k|    { // target_value
19117|   276k|        if (p->error_indicator) {
  ------------------
  |  Branch (19117:13): [True: 0, False: 276k]
  ------------------
19118|      0|            p->level--;
19119|      0|            return NULL;
19120|      0|        }
19121|   276k|        D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_value"));
19122|   276k|        expr_ty a;
19123|   276k|        if (
19124|   276k|            (a = target_value_rule(p))  // target_value
  ------------------
  |  Branch (19124:13): [True: 197k, False: 78.7k]
  ------------------
19125|   276k|        )
19126|   197k|        {
19127|   197k|            D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_value"));
19128|   197k|            _res = _PyPegen_make_target ( p , a , SINGLE_TARGETS );
19129|   197k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19129:18): [True: 32.8k, False: 164k]
  |  Branch (19129:34): [True: 0, False: 164k]
  |  Branch (19129:57): [True: 0, False: 32.8k]
  ------------------
19130|      0|                p->error_indicator = 1;
19131|      0|                p->level--;
19132|      0|                return NULL;
19133|      0|            }
19134|   197k|            goto done;
19135|   197k|        }
19136|  78.7k|        p->mark = _mark;
19137|  78.7k|        D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ',
19138|  78.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_value"));
19139|  78.7k|    }
19140|  78.7k|    _res = NULL;
19141|   276k|  done:
19142|   276k|    p->level--;
19143|   276k|    return _res;
19144|  78.7k|}
parser.c:augassign_rule:
 2380|   192k|{
 2381|   192k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   384k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2381:9): [True: 0, False: 192k]
  |  Branch (2381:35): [True: 0, False: 192k]
  ------------------
 2382|      0|        _Pypegen_stack_overflow(p);
 2383|      0|    }
 2384|   192k|    if (p->error_indicator) {
  ------------------
  |  Branch (2384:9): [True: 0, False: 192k]
  ------------------
 2385|      0|        p->level--;
 2386|      0|        return NULL;
 2387|      0|    }
 2388|   192k|    AugOperator* _res = NULL;
 2389|   192k|    int _mark = p->mark;
 2390|   192k|    { // '+='
 2391|   192k|        if (p->error_indicator) {
  ------------------
  |  Branch (2391:13): [True: 0, False: 192k]
  ------------------
 2392|      0|            p->level--;
 2393|      0|            return NULL;
 2394|      0|        }
 2395|   192k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+='"));
 2396|   192k|        Token * _literal;
 2397|   192k|        if (
 2398|   192k|            (_literal = _PyPegen_expect_token(p, 36))  // token='+='
  ------------------
  |  Branch (2398:13): [True: 2.06k, False: 190k]
  ------------------
 2399|   192k|        )
 2400|  2.06k|        {
 2401|  2.06k|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+='"));
 2402|  2.06k|            _res = _PyPegen_augoperator ( p , Add );
 2403|  2.06k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2403:18): [True: 0, False: 2.06k]
  |  Branch (2403:34): [True: 0, False: 2.06k]
  |  Branch (2403:57): [True: 0, False: 0]
  ------------------
 2404|      0|                p->error_indicator = 1;
 2405|      0|                p->level--;
 2406|      0|                return NULL;
 2407|      0|            }
 2408|  2.06k|            goto done;
 2409|  2.06k|        }
 2410|   190k|        p->mark = _mark;
 2411|   190k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2412|   190k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+='"));
 2413|   190k|    }
 2414|      0|    { // '-='
 2415|   190k|        if (p->error_indicator) {
  ------------------
  |  Branch (2415:13): [True: 0, False: 190k]
  ------------------
 2416|      0|            p->level--;
 2417|      0|            return NULL;
 2418|      0|        }
 2419|   190k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-='"));
 2420|   190k|        Token * _literal;
 2421|   190k|        if (
 2422|   190k|            (_literal = _PyPegen_expect_token(p, 37))  // token='-='
  ------------------
  |  Branch (2422:13): [True: 192, False: 190k]
  ------------------
 2423|   190k|        )
 2424|    192|        {
 2425|    192|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-='"));
 2426|    192|            _res = _PyPegen_augoperator ( p , Sub );
 2427|    192|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2427:18): [True: 0, False: 192]
  |  Branch (2427:34): [True: 0, False: 192]
  |  Branch (2427:57): [True: 0, False: 0]
  ------------------
 2428|      0|                p->error_indicator = 1;
 2429|      0|                p->level--;
 2430|      0|                return NULL;
 2431|      0|            }
 2432|    192|            goto done;
 2433|    192|        }
 2434|   190k|        p->mark = _mark;
 2435|   190k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2436|   190k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-='"));
 2437|   190k|    }
 2438|      0|    { // '*='
 2439|   190k|        if (p->error_indicator) {
  ------------------
  |  Branch (2439:13): [True: 0, False: 190k]
  ------------------
 2440|      0|            p->level--;
 2441|      0|            return NULL;
 2442|      0|        }
 2443|   190k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*='"));
 2444|   190k|        Token * _literal;
 2445|   190k|        if (
 2446|   190k|            (_literal = _PyPegen_expect_token(p, 38))  // token='*='
  ------------------
  |  Branch (2446:13): [True: 4.09k, False: 186k]
  ------------------
 2447|   190k|        )
 2448|  4.09k|        {
 2449|  4.09k|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*='"));
 2450|  4.09k|            _res = _PyPegen_augoperator ( p , Mult );
 2451|  4.09k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2451:18): [True: 0, False: 4.09k]
  |  Branch (2451:34): [True: 0, False: 4.09k]
  |  Branch (2451:57): [True: 0, False: 0]
  ------------------
 2452|      0|                p->error_indicator = 1;
 2453|      0|                p->level--;
 2454|      0|                return NULL;
 2455|      0|            }
 2456|  4.09k|            goto done;
 2457|  4.09k|        }
 2458|   186k|        p->mark = _mark;
 2459|   186k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2460|   186k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*='"));
 2461|   186k|    }
 2462|      0|    { // '@='
 2463|   186k|        if (p->error_indicator) {
  ------------------
  |  Branch (2463:13): [True: 0, False: 186k]
  ------------------
 2464|      0|            p->level--;
 2465|      0|            return NULL;
 2466|      0|        }
 2467|   186k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@='"));
 2468|   186k|        Token * _literal;
 2469|   186k|        if (
 2470|   186k|            (_literal = _PyPegen_expect_token(p, 50))  // token='@='
  ------------------
  |  Branch (2470:13): [True: 190, False: 185k]
  ------------------
 2471|   186k|        )
 2472|    190|        {
 2473|    190|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@='"));
 2474|    190|            _res = CHECK_VERSION ( AugOperator* , 5 , "The '@' operator is" , _PyPegen_augoperator ( p , MatMult ) );
  ------------------
  |  |  345|    190|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 2475|    190|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2475:18): [True: 0, False: 190]
  |  Branch (2475:34): [True: 0, False: 190]
  |  Branch (2475:57): [True: 0, False: 0]
  ------------------
 2476|      0|                p->error_indicator = 1;
 2477|      0|                p->level--;
 2478|      0|                return NULL;
 2479|      0|            }
 2480|    190|            goto done;
 2481|    190|        }
 2482|   185k|        p->mark = _mark;
 2483|   185k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2484|   185k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@='"));
 2485|   185k|    }
 2486|      0|    { // '/='
 2487|   185k|        if (p->error_indicator) {
  ------------------
  |  Branch (2487:13): [True: 0, False: 185k]
  ------------------
 2488|      0|            p->level--;
 2489|      0|            return NULL;
 2490|      0|        }
 2491|   185k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/='"));
 2492|   185k|        Token * _literal;
 2493|   185k|        if (
 2494|   185k|            (_literal = _PyPegen_expect_token(p, 39))  // token='/='
  ------------------
  |  Branch (2494:13): [True: 1.86k, False: 184k]
  ------------------
 2495|   185k|        )
 2496|  1.86k|        {
 2497|  1.86k|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/='"));
 2498|  1.86k|            _res = _PyPegen_augoperator ( p , Div );
 2499|  1.86k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2499:18): [True: 0, False: 1.86k]
  |  Branch (2499:34): [True: 0, False: 1.86k]
  |  Branch (2499:57): [True: 0, False: 0]
  ------------------
 2500|      0|                p->error_indicator = 1;
 2501|      0|                p->level--;
 2502|      0|                return NULL;
 2503|      0|            }
 2504|  1.86k|            goto done;
 2505|  1.86k|        }
 2506|   184k|        p->mark = _mark;
 2507|   184k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2508|   184k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/='"));
 2509|   184k|    }
 2510|      0|    { // '%='
 2511|   184k|        if (p->error_indicator) {
  ------------------
  |  Branch (2511:13): [True: 0, False: 184k]
  ------------------
 2512|      0|            p->level--;
 2513|      0|            return NULL;
 2514|      0|        }
 2515|   184k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'%='"));
 2516|   184k|        Token * _literal;
 2517|   184k|        if (
 2518|   184k|            (_literal = _PyPegen_expect_token(p, 40))  // token='%='
  ------------------
  |  Branch (2518:13): [True: 2.36k, False: 181k]
  ------------------
 2519|   184k|        )
 2520|  2.36k|        {
 2521|  2.36k|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'%='"));
 2522|  2.36k|            _res = _PyPegen_augoperator ( p , Mod );
 2523|  2.36k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2523:18): [True: 0, False: 2.36k]
  |  Branch (2523:34): [True: 0, False: 2.36k]
  |  Branch (2523:57): [True: 0, False: 0]
  ------------------
 2524|      0|                p->error_indicator = 1;
 2525|      0|                p->level--;
 2526|      0|                return NULL;
 2527|      0|            }
 2528|  2.36k|            goto done;
 2529|  2.36k|        }
 2530|   181k|        p->mark = _mark;
 2531|   181k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2532|   181k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'%='"));
 2533|   181k|    }
 2534|      0|    { // '&='
 2535|   181k|        if (p->error_indicator) {
  ------------------
  |  Branch (2535:13): [True: 0, False: 181k]
  ------------------
 2536|      0|            p->level--;
 2537|      0|            return NULL;
 2538|      0|        }
 2539|   181k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'&='"));
 2540|   181k|        Token * _literal;
 2541|   181k|        if (
 2542|   181k|            (_literal = _PyPegen_expect_token(p, 41))  // token='&='
  ------------------
  |  Branch (2542:13): [True: 1.25k, False: 180k]
  ------------------
 2543|   181k|        )
 2544|  1.25k|        {
 2545|  1.25k|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'&='"));
 2546|  1.25k|            _res = _PyPegen_augoperator ( p , BitAnd );
 2547|  1.25k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2547:18): [True: 0, False: 1.25k]
  |  Branch (2547:34): [True: 0, False: 1.25k]
  |  Branch (2547:57): [True: 0, False: 0]
  ------------------
 2548|      0|                p->error_indicator = 1;
 2549|      0|                p->level--;
 2550|      0|                return NULL;
 2551|      0|            }
 2552|  1.25k|            goto done;
 2553|  1.25k|        }
 2554|   180k|        p->mark = _mark;
 2555|   180k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2556|   180k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'&='"));
 2557|   180k|    }
 2558|      0|    { // '|='
 2559|   180k|        if (p->error_indicator) {
  ------------------
  |  Branch (2559:13): [True: 0, False: 180k]
  ------------------
 2560|      0|            p->level--;
 2561|      0|            return NULL;
 2562|      0|        }
 2563|   180k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|='"));
 2564|   180k|        Token * _literal;
 2565|   180k|        if (
 2566|   180k|            (_literal = _PyPegen_expect_token(p, 42))  // token='|='
  ------------------
  |  Branch (2566:13): [True: 368, False: 180k]
  ------------------
 2567|   180k|        )
 2568|    368|        {
 2569|    368|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|='"));
 2570|    368|            _res = _PyPegen_augoperator ( p , BitOr );
 2571|    368|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2571:18): [True: 0, False: 368]
  |  Branch (2571:34): [True: 0, False: 368]
  |  Branch (2571:57): [True: 0, False: 0]
  ------------------
 2572|      0|                p->error_indicator = 1;
 2573|      0|                p->level--;
 2574|      0|                return NULL;
 2575|      0|            }
 2576|    368|            goto done;
 2577|    368|        }
 2578|   180k|        p->mark = _mark;
 2579|   180k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2580|   180k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|='"));
 2581|   180k|    }
 2582|      0|    { // '^='
 2583|   180k|        if (p->error_indicator) {
  ------------------
  |  Branch (2583:13): [True: 0, False: 180k]
  ------------------
 2584|      0|            p->level--;
 2585|      0|            return NULL;
 2586|      0|        }
 2587|   180k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'^='"));
 2588|   180k|        Token * _literal;
 2589|   180k|        if (
 2590|   180k|            (_literal = _PyPegen_expect_token(p, 43))  // token='^='
  ------------------
  |  Branch (2590:13): [True: 556, False: 179k]
  ------------------
 2591|   180k|        )
 2592|    556|        {
 2593|    556|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'^='"));
 2594|    556|            _res = _PyPegen_augoperator ( p , BitXor );
 2595|    556|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2595:18): [True: 0, False: 556]
  |  Branch (2595:34): [True: 0, False: 556]
  |  Branch (2595:57): [True: 0, False: 0]
  ------------------
 2596|      0|                p->error_indicator = 1;
 2597|      0|                p->level--;
 2598|      0|                return NULL;
 2599|      0|            }
 2600|    556|            goto done;
 2601|    556|        }
 2602|   179k|        p->mark = _mark;
 2603|   179k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2604|   179k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'^='"));
 2605|   179k|    }
 2606|      0|    { // '<<='
 2607|   179k|        if (p->error_indicator) {
  ------------------
  |  Branch (2607:13): [True: 0, False: 179k]
  ------------------
 2608|      0|            p->level--;
 2609|      0|            return NULL;
 2610|      0|        }
 2611|   179k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<<='"));
 2612|   179k|        Token * _literal;
 2613|   179k|        if (
 2614|   179k|            (_literal = _PyPegen_expect_token(p, 44))  // token='<<='
  ------------------
  |  Branch (2614:13): [True: 82, False: 179k]
  ------------------
 2615|   179k|        )
 2616|     82|        {
 2617|     82|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<<='"));
 2618|     82|            _res = _PyPegen_augoperator ( p , LShift );
 2619|     82|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2619:18): [True: 0, False: 82]
  |  Branch (2619:34): [True: 0, False: 82]
  |  Branch (2619:57): [True: 0, False: 0]
  ------------------
 2620|      0|                p->error_indicator = 1;
 2621|      0|                p->level--;
 2622|      0|                return NULL;
 2623|      0|            }
 2624|     82|            goto done;
 2625|     82|        }
 2626|   179k|        p->mark = _mark;
 2627|   179k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2628|   179k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<<='"));
 2629|   179k|    }
 2630|      0|    { // '>>='
 2631|   179k|        if (p->error_indicator) {
  ------------------
  |  Branch (2631:13): [True: 0, False: 179k]
  ------------------
 2632|      0|            p->level--;
 2633|      0|            return NULL;
 2634|      0|        }
 2635|   179k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>>='"));
 2636|   179k|        Token * _literal;
 2637|   179k|        if (
 2638|   179k|            (_literal = _PyPegen_expect_token(p, 45))  // token='>>='
  ------------------
  |  Branch (2638:13): [True: 92, False: 179k]
  ------------------
 2639|   179k|        )
 2640|     92|        {
 2641|     92|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>>='"));
 2642|     92|            _res = _PyPegen_augoperator ( p , RShift );
 2643|     92|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2643:18): [True: 0, False: 92]
  |  Branch (2643:34): [True: 0, False: 92]
  |  Branch (2643:57): [True: 0, False: 0]
  ------------------
 2644|      0|                p->error_indicator = 1;
 2645|      0|                p->level--;
 2646|      0|                return NULL;
 2647|      0|            }
 2648|     92|            goto done;
 2649|     92|        }
 2650|   179k|        p->mark = _mark;
 2651|   179k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2652|   179k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>>='"));
 2653|   179k|    }
 2654|      0|    { // '**='
 2655|   179k|        if (p->error_indicator) {
  ------------------
  |  Branch (2655:13): [True: 0, False: 179k]
  ------------------
 2656|      0|            p->level--;
 2657|      0|            return NULL;
 2658|      0|        }
 2659|   179k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**='"));
 2660|   179k|        Token * _literal;
 2661|   179k|        if (
 2662|   179k|            (_literal = _PyPegen_expect_token(p, 46))  // token='**='
  ------------------
  |  Branch (2662:13): [True: 525, False: 178k]
  ------------------
 2663|   179k|        )
 2664|    525|        {
 2665|    525|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**='"));
 2666|    525|            _res = _PyPegen_augoperator ( p , Pow );
 2667|    525|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2667:18): [True: 0, False: 525]
  |  Branch (2667:34): [True: 0, False: 525]
  |  Branch (2667:57): [True: 0, False: 0]
  ------------------
 2668|      0|                p->error_indicator = 1;
 2669|      0|                p->level--;
 2670|      0|                return NULL;
 2671|      0|            }
 2672|    525|            goto done;
 2673|    525|        }
 2674|   178k|        p->mark = _mark;
 2675|   178k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2676|   178k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**='"));
 2677|   178k|    }
 2678|      0|    { // '//='
 2679|   178k|        if (p->error_indicator) {
  ------------------
  |  Branch (2679:13): [True: 0, False: 178k]
  ------------------
 2680|      0|            p->level--;
 2681|      0|            return NULL;
 2682|      0|        }
 2683|   178k|        D(fprintf(stderr, "%*c> augassign[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'//='"));
 2684|   178k|        Token * _literal;
 2685|   178k|        if (
 2686|   178k|            (_literal = _PyPegen_expect_token(p, 48))  // token='//='
  ------------------
  |  Branch (2686:13): [True: 588, False: 178k]
  ------------------
 2687|   178k|        )
 2688|    588|        {
 2689|    588|            D(fprintf(stderr, "%*c+ augassign[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'//='"));
 2690|    588|            _res = _PyPegen_augoperator ( p , FloorDiv );
 2691|    588|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2691:18): [True: 0, False: 588]
  |  Branch (2691:34): [True: 0, False: 588]
  |  Branch (2691:57): [True: 0, False: 0]
  ------------------
 2692|      0|                p->error_indicator = 1;
 2693|      0|                p->level--;
 2694|      0|                return NULL;
 2695|      0|            }
 2696|    588|            goto done;
 2697|    588|        }
 2698|   178k|        p->mark = _mark;
 2699|   178k|        D(fprintf(stderr, "%*c%s augassign[%d-%d]: %s failed!\n", p->level, ' ',
 2700|   178k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'//='"));
 2701|   178k|    }
 2702|   178k|    _res = NULL;
 2703|   192k|  done:
 2704|   192k|    p->level--;
 2705|   192k|    return _res;
 2706|   178k|}
parser.c:invalid_assignment_rule:
20855|  43.6k|{
20856|  43.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  87.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20856:9): [True: 0, False: 43.6k]
  |  Branch (20856:35): [True: 0, False: 43.6k]
  ------------------
20857|      0|        _Pypegen_stack_overflow(p);
20858|      0|    }
20859|  43.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (20859:9): [True: 0, False: 43.6k]
  ------------------
20860|      0|        p->level--;
20861|      0|        return NULL;
20862|      0|    }
20863|  43.6k|    void * _res = NULL;
20864|  43.6k|    int _mark = p->mark;
20865|  43.6k|    { // invalid_ann_assign_target ':' expression
20866|  43.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (20866:13): [True: 0, False: 43.6k]
  ------------------
20867|      0|            p->level--;
20868|      0|            return NULL;
20869|      0|        }
20870|  43.6k|        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
20871|  43.6k|        Token * _literal;
20872|  43.6k|        expr_ty a;
20873|  43.6k|        expr_ty expression_var;
20874|  43.6k|        if (
20875|  43.6k|            (a = invalid_ann_assign_target_rule(p))  // invalid_ann_assign_target
  ------------------
  |  Branch (20875:13): [True: 269, False: 43.3k]
  ------------------
20876|    269|            &&
20877|    269|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20877:13): [True: 10, False: 259]
  ------------------
20878|     10|            &&
20879|     10|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (20879:13): [True: 4, False: 6]
  ------------------
20880|  43.6k|        )
20881|      4|        {
20882|      4|            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_ann_assign_target ':' expression"));
20883|      4|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not %s) can be annotated" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20884|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20884:18): [True: 4, False: 0]
  |  Branch (20884:34): [True: 0, False: 0]
  |  Branch (20884:57): [True: 4, False: 0]
  ------------------
20885|      4|                p->error_indicator = 1;
20886|      4|                p->level--;
20887|      4|                return NULL;
20888|      4|            }
20889|      0|            goto done;
20890|      4|        }
20891|  43.6k|        p->mark = _mark;
20892|  43.6k|        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
20893|  43.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_ann_assign_target ':' expression"));
20894|  43.6k|    }
20895|      0|    { // star_named_expression ',' star_named_expressions* ':' expression
20896|  43.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (20896:13): [True: 2, False: 43.6k]
  ------------------
20897|      2|            p->level--;
20898|      2|            return NULL;
20899|      2|        }
20900|  43.6k|        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
20901|  43.6k|        Token * _literal;
20902|  43.6k|        Token * _literal_1;
20903|  43.6k|        asdl_seq * _loop0_119_var;
20904|  43.6k|        expr_ty a;
20905|  43.6k|        expr_ty expression_var;
20906|  43.6k|        if (
20907|  43.6k|            (a = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (20907:13): [True: 28.8k, False: 14.7k]
  ------------------
20908|  28.8k|            &&
20909|  28.8k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (20909:13): [True: 2.58k, False: 26.3k]
  ------------------
20910|  2.58k|            &&
20911|  2.58k|            (_loop0_119_var = _loop0_119_rule(p))  // star_named_expressions*
  ------------------
  |  Branch (20911:13): [True: 2.58k, False: 0]
  ------------------
20912|  2.58k|            &&
20913|  2.58k|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20913:13): [True: 275, False: 2.31k]
  ------------------
20914|    275|            &&
20915|    275|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (20915:13): [True: 14, False: 261]
  ------------------
20916|  43.6k|        )
20917|     14|        {
20918|     14|            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
20919|     14|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "only single target (not tuple) can be annotated" );
  ------------------
  |  |  239|     14|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20920|     14|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20920:18): [True: 14, False: 0]
  |  Branch (20920:34): [True: 0, False: 0]
  |  Branch (20920:57): [True: 14, False: 0]
  ------------------
20921|     14|                p->error_indicator = 1;
20922|     14|                p->level--;
20923|     14|                return NULL;
20924|     14|            }
20925|      0|            goto done;
20926|     14|        }
20927|  43.5k|        p->mark = _mark;
20928|  43.5k|        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
20929|  43.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions* ':' expression"));
20930|  43.5k|    }
20931|      0|    { // expression ':' expression
20932|  43.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (20932:13): [True: 1.10k, False: 42.4k]
  ------------------
20933|  1.10k|            p->level--;
20934|  1.10k|            return NULL;
20935|  1.10k|        }
20936|  42.4k|        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
20937|  42.4k|        Token * _literal;
20938|  42.4k|        expr_ty a;
20939|  42.4k|        expr_ty expression_var;
20940|  42.4k|        if (
20941|  42.4k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (20941:13): [True: 28.4k, False: 14.0k]
  ------------------
20942|  28.4k|            &&
20943|  28.4k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20943:13): [True: 451, False: 27.9k]
  ------------------
20944|    451|            &&
20945|    451|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (20945:13): [True: 44, False: 407]
  ------------------
20946|  42.4k|        )
20947|     44|        {
20948|     44|            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression"));
20949|     44|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "illegal target for annotation" );
  ------------------
  |  |  239|     44|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
20950|     44|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20950:18): [True: 44, False: 0]
  |  Branch (20950:34): [True: 0, False: 0]
  |  Branch (20950:57): [True: 44, False: 0]
  ------------------
20951|     44|                p->error_indicator = 1;
20952|     44|                p->level--;
20953|     44|                return NULL;
20954|     44|            }
20955|      0|            goto done;
20956|     44|        }
20957|  42.4k|        p->mark = _mark;
20958|  42.4k|        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
20959|  42.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression"));
20960|  42.4k|    }
20961|      0|    { // ((star_targets '='))* star_expressions '='
20962|  42.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (20962:13): [True: 332, False: 42.1k]
  ------------------
20963|    332|            p->level--;
20964|    332|            return NULL;
20965|    332|        }
20966|  42.1k|        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
20967|  42.1k|        Token * _literal;
20968|  42.1k|        asdl_seq * _loop0_120_var;
20969|  42.1k|        expr_ty a;
20970|  42.1k|        if (
20971|  42.1k|            (_loop0_120_var = _loop0_120_rule(p))  // ((star_targets '='))*
  ------------------
  |  Branch (20971:13): [True: 42.1k, False: 0]
  ------------------
20972|  42.1k|            &&
20973|  42.1k|            (a = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (20973:13): [True: 28.0k, False: 14.0k]
  ------------------
20974|  28.0k|            &&
20975|  28.0k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (20975:13): [True: 77, False: 28.0k]
  ------------------
20976|  42.1k|        )
20977|     77|        {
20978|     77|            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* star_expressions '='"));
20979|     77|            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
  ------------------
  |  |  242|     77|#define RAISE_SYNTAX_ERROR_INVALID_TARGET(type, e) _RAISE_SYNTAX_ERROR_INVALID_TARGET(p, type, e)
  ------------------
20980|     77|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20980:18): [True: 77, False: 0]
  |  Branch (20980:34): [True: 0, False: 0]
  |  Branch (20980:57): [True: 77, False: 0]
  ------------------
20981|     77|                p->error_indicator = 1;
20982|     77|                p->level--;
20983|     77|                return NULL;
20984|     77|            }
20985|      0|            goto done;
20986|     77|        }
20987|  42.0k|        p->mark = _mark;
20988|  42.0k|        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
20989|  42.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))* star_expressions '='"));
20990|  42.0k|    }
20991|      0|    { // ((star_targets '='))* yield_expr '='
20992|  42.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (20992:13): [True: 0, False: 42.0k]
  ------------------
20993|      0|            p->level--;
20994|      0|            return NULL;
20995|      0|        }
20996|  42.0k|        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
20997|  42.0k|        Token * _literal;
20998|  42.0k|        asdl_seq * _loop0_120_var;
20999|  42.0k|        expr_ty a;
21000|  42.0k|        if (
21001|  42.0k|            (_loop0_120_var = _loop0_120_rule(p))  // ((star_targets '='))*
  ------------------
  |  Branch (21001:13): [True: 42.0k, False: 0]
  ------------------
21002|  42.0k|            &&
21003|  42.0k|            (a = yield_expr_rule(p))  // yield_expr
  ------------------
  |  Branch (21003:13): [True: 349, False: 41.6k]
  ------------------
21004|    349|            &&
21005|    349|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (21005:13): [True: 2, False: 347]
  ------------------
21006|  42.0k|        )
21007|      2|        {
21008|      2|            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "((star_targets '='))* yield_expr '='"));
21009|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "assignment to yield expression not possible" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21010|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21010:18): [True: 2, False: 0]
  |  Branch (21010:34): [True: 0, False: 0]
  |  Branch (21010:57): [True: 2, False: 0]
  ------------------
21011|      2|                p->error_indicator = 1;
21012|      2|                p->level--;
21013|      2|                return NULL;
21014|      2|            }
21015|      0|            goto done;
21016|      2|        }
21017|  42.0k|        p->mark = _mark;
21018|  42.0k|        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21019|  42.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "((star_targets '='))* yield_expr '='"));
21020|  42.0k|    }
21021|      0|    { // star_expressions augassign annotated_rhs
21022|  42.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (21022:13): [True: 5, False: 42.0k]
  ------------------
21023|      5|            p->level--;
21024|      5|            return NULL;
21025|      5|        }
21026|  42.0k|        D(fprintf(stderr, "%*c> invalid_assignment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions augassign annotated_rhs"));
21027|  42.0k|        expr_ty a;
21028|  42.0k|        expr_ty annotated_rhs_var;
21029|  42.0k|        AugOperator* augassign_var;
21030|  42.0k|        if (
21031|  42.0k|            (a = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (21031:13): [True: 28.0k, False: 13.9k]
  ------------------
21032|  28.0k|            &&
21033|  28.0k|            (augassign_var = augassign_rule(p))  // augassign
  ------------------
  |  Branch (21033:13): [True: 51, False: 27.9k]
  ------------------
21034|     51|            &&
21035|     51|            (annotated_rhs_var = annotated_rhs_rule(p))  // annotated_rhs
  ------------------
  |  Branch (21035:13): [True: 32, False: 19]
  ------------------
21036|  42.0k|        )
21037|     32|        {
21038|     32|            D(fprintf(stderr, "%*c+ invalid_assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions augassign annotated_rhs"));
21039|     32|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "'%s' is an illegal expression for augmented assignment" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|     32|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21040|     32|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21040:18): [True: 32, False: 0]
  |  Branch (21040:34): [True: 0, False: 0]
  |  Branch (21040:57): [True: 32, False: 0]
  ------------------
21041|     32|                p->error_indicator = 1;
21042|     32|                p->level--;
21043|     32|                return NULL;
21044|     32|            }
21045|      0|            goto done;
21046|     32|        }
21047|  41.9k|        p->mark = _mark;
21048|  41.9k|        D(fprintf(stderr, "%*c%s invalid_assignment[%d-%d]: %s failed!\n", p->level, ' ',
21049|  41.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions augassign annotated_rhs"));
21050|  41.9k|    }
21051|  41.9k|    _res = NULL;
21052|  41.9k|  done:
21053|  41.9k|    p->level--;
21054|  41.9k|    return _res;
21055|  41.9k|}
parser.c:invalid_ann_assign_target_rule:
21060|  45.0k|{
21061|  45.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  90.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21061:9): [True: 0, False: 45.0k]
  |  Branch (21061:35): [True: 0, False: 45.0k]
  ------------------
21062|      0|        _Pypegen_stack_overflow(p);
21063|      0|    }
21064|  45.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (21064:9): [True: 0, False: 45.0k]
  ------------------
21065|      0|        p->level--;
21066|      0|        return NULL;
21067|      0|    }
21068|  45.0k|    expr_ty _res = NULL;
21069|  45.0k|    int _mark = p->mark;
21070|  45.0k|    { // list
21071|  45.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (21071:13): [True: 0, False: 45.0k]
  ------------------
21072|      0|            p->level--;
21073|      0|            return NULL;
21074|      0|        }
21075|  45.0k|        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list"));
21076|  45.0k|        expr_ty list_var;
21077|  45.0k|        if (
21078|  45.0k|            (list_var = list_rule(p))  // list
  ------------------
  |  Branch (21078:13): [True: 123, False: 44.9k]
  ------------------
21079|  45.0k|        )
21080|    123|        {
21081|    123|            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list"));
21082|    123|            _res = list_var;
21083|    123|            goto done;
21084|    123|        }
21085|  44.9k|        p->mark = _mark;
21086|  44.9k|        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
21087|  44.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list"));
21088|  44.9k|    }
21089|      0|    { // tuple
21090|  44.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (21090:13): [True: 0, False: 44.9k]
  ------------------
21091|      0|            p->level--;
21092|      0|            return NULL;
21093|      0|        }
21094|  44.9k|        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple"));
21095|  44.9k|        expr_ty tuple_var;
21096|  44.9k|        if (
21097|  44.9k|            (tuple_var = tuple_rule(p))  // tuple
  ------------------
  |  Branch (21097:13): [True: 169, False: 44.7k]
  ------------------
21098|  44.9k|        )
21099|    169|        {
21100|    169|            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple"));
21101|    169|            _res = tuple_var;
21102|    169|            goto done;
21103|    169|        }
21104|  44.7k|        p->mark = _mark;
21105|  44.7k|        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
21106|  44.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple"));
21107|  44.7k|    }
21108|      0|    { // '(' invalid_ann_assign_target ')'
21109|  44.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (21109:13): [True: 0, False: 44.7k]
  ------------------
21110|      0|            p->level--;
21111|      0|            return NULL;
21112|      0|        }
21113|  44.7k|        D(fprintf(stderr, "%*c> invalid_ann_assign_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
21114|  44.7k|        Token * _literal;
21115|  44.7k|        Token * _literal_1;
21116|  44.7k|        expr_ty a;
21117|  44.7k|        if (
21118|  44.7k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (21118:13): [True: 1.47k, False: 43.3k]
  ------------------
21119|  1.47k|            &&
21120|  1.47k|            (a = invalid_ann_assign_target_rule(p))  // invalid_ann_assign_target
  ------------------
  |  Branch (21120:13): [True: 195, False: 1.28k]
  ------------------
21121|    195|            &&
21122|    195|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (21122:13): [True: 172, False: 23]
  ------------------
21123|  44.7k|        )
21124|    172|        {
21125|    172|            D(fprintf(stderr, "%*c+ invalid_ann_assign_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
21126|    172|            _res = a;
21127|    172|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21127:18): [True: 0, False: 172]
  |  Branch (21127:34): [True: 0, False: 172]
  |  Branch (21127:57): [True: 0, False: 0]
  ------------------
21128|      0|                p->error_indicator = 1;
21129|      0|                p->level--;
21130|      0|                return NULL;
21131|      0|            }
21132|    172|            goto done;
21133|    172|        }
21134|  44.6k|        p->mark = _mark;
21135|  44.6k|        D(fprintf(stderr, "%*c%s invalid_ann_assign_target[%d-%d]: %s failed!\n", p->level, ' ',
21136|  44.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' invalid_ann_assign_target ')'"));
21137|  44.6k|    }
21138|  44.6k|    _res = NULL;
21139|  45.0k|  done:
21140|  45.0k|    p->level--;
21141|  45.0k|    return _res;
21142|  44.6k|}
parser.c:_loop0_119_rule:
34737|  2.58k|{
34738|  2.58k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.17k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34738:9): [True: 0, False: 2.58k]
  |  Branch (34738:35): [True: 0, False: 2.58k]
  ------------------
34739|      0|        _Pypegen_stack_overflow(p);
34740|      0|    }
34741|  2.58k|    if (p->error_indicator) {
  ------------------
  |  Branch (34741:9): [True: 0, False: 2.58k]
  ------------------
34742|      0|        p->level--;
34743|      0|        return NULL;
34744|      0|    }
34745|  2.58k|    void *_res = NULL;
34746|  2.58k|    int _mark = p->mark;
34747|  2.58k|    void **_children = PyMem_Malloc(sizeof(void *));
34748|  2.58k|    if (!_children) {
  ------------------
  |  Branch (34748:9): [True: 0, False: 2.58k]
  ------------------
34749|      0|        p->error_indicator = 1;
34750|      0|        PyErr_NoMemory();
34751|      0|        p->level--;
34752|      0|        return NULL;
34753|      0|    }
34754|  2.58k|    Py_ssize_t _children_capacity = 1;
34755|  2.58k|    Py_ssize_t _n = 0;
34756|  2.58k|    { // star_named_expressions
34757|  2.58k|        if (p->error_indicator) {
  ------------------
  |  Branch (34757:13): [True: 0, False: 2.58k]
  ------------------
34758|      0|            p->level--;
34759|      0|            return NULL;
34760|      0|        }
34761|  2.58k|        D(fprintf(stderr, "%*c> _loop0_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expressions"));
34762|  2.58k|        asdl_expr_seq* star_named_expressions_var;
34763|  2.58k|        while (
34764|  7.21k|            (star_named_expressions_var = star_named_expressions_rule(p))  // star_named_expressions
  ------------------
  |  Branch (34764:13): [True: 4.62k, False: 2.58k]
  ------------------
34765|  2.58k|        )
34766|  4.62k|        {
34767|  4.62k|            _res = star_named_expressions_var;
34768|  4.62k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (34768:17): [True: 391, False: 4.23k]
  ------------------
34769|    391|                _children_capacity *= 2;
34770|    391|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34771|    391|                if (!_new_children) {
  ------------------
  |  Branch (34771:21): [True: 0, False: 391]
  ------------------
34772|      0|                    PyMem_Free(_children);
34773|      0|                    p->error_indicator = 1;
34774|      0|                    PyErr_NoMemory();
34775|      0|                    p->level--;
34776|      0|                    return NULL;
34777|      0|                }
34778|    391|                _children = _new_children;
34779|    391|            }
34780|  4.62k|            _children[_n++] = _res;
34781|  4.62k|            _mark = p->mark;
34782|  4.62k|        }
34783|  2.58k|        p->mark = _mark;
34784|  2.58k|        D(fprintf(stderr, "%*c%s _loop0_119[%d-%d]: %s failed!\n", p->level, ' ',
34785|  2.58k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expressions"));
34786|  2.58k|    }
34787|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34788|  2.58k|    if (!_seq) {
  ------------------
  |  Branch (34788:9): [True: 0, False: 2.58k]
  ------------------
34789|      0|        PyMem_Free(_children);
34790|      0|        p->error_indicator = 1;
34791|      0|        PyErr_NoMemory();
34792|      0|        p->level--;
34793|      0|        return NULL;
34794|      0|    }
34795|  7.21k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  4.62k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  7.21k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (34795:28): [True: 4.62k, False: 2.58k]
  ------------------
34796|  2.58k|    PyMem_Free(_children);
34797|  2.58k|    p->level--;
34798|  2.58k|    return _seq;
34799|  2.58k|}
parser.c:_loop0_120_rule:
34804|  84.1k|{
34805|  84.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   168k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34805:9): [True: 0, False: 84.1k]
  |  Branch (34805:35): [True: 0, False: 84.1k]
  ------------------
34806|      0|        _Pypegen_stack_overflow(p);
34807|      0|    }
34808|  84.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (34808:9): [True: 0, False: 84.1k]
  ------------------
34809|      0|        p->level--;
34810|      0|        return NULL;
34811|      0|    }
34812|  84.1k|    void *_res = NULL;
34813|  84.1k|    int _mark = p->mark;
34814|  84.1k|    void **_children = PyMem_Malloc(sizeof(void *));
34815|  84.1k|    if (!_children) {
  ------------------
  |  Branch (34815:9): [True: 0, False: 84.1k]
  ------------------
34816|      0|        p->error_indicator = 1;
34817|      0|        PyErr_NoMemory();
34818|      0|        p->level--;
34819|      0|        return NULL;
34820|      0|    }
34821|  84.1k|    Py_ssize_t _children_capacity = 1;
34822|  84.1k|    Py_ssize_t _n = 0;
34823|  84.1k|    { // (star_targets '=')
34824|  84.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (34824:13): [True: 0, False: 84.1k]
  ------------------
34825|      0|            p->level--;
34826|      0|            return NULL;
34827|      0|        }
34828|  84.1k|        D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')"));
34829|  84.1k|        void *_tmp_157_var;
34830|  84.1k|        while (
34831|  84.5k|            (_tmp_157_var = _tmp_157_rule(p))  // star_targets '='
  ------------------
  |  Branch (34831:13): [True: 399, False: 84.1k]
  ------------------
34832|  84.1k|        )
34833|    399|        {
34834|    399|            _res = _tmp_157_var;
34835|    399|            if (_n == _children_capacity) {
  ------------------
  |  Branch (34835:17): [True: 92, False: 307]
  ------------------
34836|     92|                _children_capacity *= 2;
34837|     92|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
34838|     92|                if (!_new_children) {
  ------------------
  |  Branch (34838:21): [True: 0, False: 92]
  ------------------
34839|      0|                    PyMem_Free(_children);
34840|      0|                    p->error_indicator = 1;
34841|      0|                    PyErr_NoMemory();
34842|      0|                    p->level--;
34843|      0|                    return NULL;
34844|      0|                }
34845|     92|                _children = _new_children;
34846|     92|            }
34847|    399|            _children[_n++] = _res;
34848|    399|            _mark = p->mark;
34849|    399|        }
34850|  84.1k|        p->mark = _mark;
34851|  84.1k|        D(fprintf(stderr, "%*c%s _loop0_120[%d-%d]: %s failed!\n", p->level, ' ',
34852|  84.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')"));
34853|  84.1k|    }
34854|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
34855|  84.1k|    if (!_seq) {
  ------------------
  |  Branch (34855:9): [True: 0, False: 84.1k]
  ------------------
34856|      0|        PyMem_Free(_children);
34857|      0|        p->error_indicator = 1;
34858|      0|        PyErr_NoMemory();
34859|      0|        p->level--;
34860|      0|        return NULL;
34861|      0|    }
34862|  84.5k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|    399|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  84.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (34862:28): [True: 399, False: 84.1k]
  ------------------
34863|  84.1k|    PyMem_Free(_children);
34864|  84.1k|    p->level--;
34865|  84.1k|    return _seq;
34866|  84.1k|}
parser.c:type_alias_rule:
10921|  1.07k|{
10922|  1.07k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.15k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10922:9): [True: 0, False: 1.07k]
  |  Branch (10922:35): [True: 0, False: 1.07k]
  ------------------
10923|      0|        _Pypegen_stack_overflow(p);
10924|      0|    }
10925|  1.07k|    if (p->error_indicator) {
  ------------------
  |  Branch (10925:9): [True: 0, False: 1.07k]
  ------------------
10926|      0|        p->level--;
10927|      0|        return NULL;
10928|      0|    }
10929|  1.07k|    stmt_ty _res = NULL;
10930|  1.07k|    int _mark = p->mark;
10931|  1.07k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (10931:9): [True: 0, False: 1.07k]
  |  Branch (10931:31): [True: 0, False: 0]
  ------------------
10932|      0|        p->error_indicator = 1;
10933|      0|        p->level--;
10934|      0|        return NULL;
10935|      0|    }
10936|  1.07k|    int _start_lineno = p->tokens[_mark]->lineno;
10937|  1.07k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.07k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.07k]
  |  |  ------------------
  ------------------
10938|  1.07k|    int _start_col_offset = p->tokens[_mark]->col_offset;
10939|  1.07k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.07k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.07k]
  |  |  ------------------
  ------------------
10940|  1.07k|    { // "type" NAME type_params? '=' expression
10941|  1.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (10941:13): [True: 0, False: 1.07k]
  ------------------
10942|      0|            p->level--;
10943|      0|            return NULL;
10944|      0|        }
10945|  1.07k|        D(fprintf(stderr, "%*c> type_alias[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"type\" NAME type_params? '=' expression"));
10946|  1.07k|        expr_ty _keyword;
10947|  1.07k|        Token * _literal;
10948|  1.07k|        expr_ty b;
10949|  1.07k|        expr_ty n;
10950|  1.07k|        void *t;
10951|  1.07k|        if (
10952|  1.07k|            (_keyword = _PyPegen_expect_soft_keyword(p, "type"))  // soft_keyword='"type"'
  ------------------
  |  Branch (10952:13): [True: 1.07k, False: 0]
  ------------------
10953|  1.07k|            &&
10954|  1.07k|            (n = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (10954:13): [True: 861, False: 214]
  ------------------
10955|    861|            &&
10956|    861|            (t = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (10956:13): [True: 855, False: 6]
  ------------------
10957|    855|            &&
10958|    855|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (10958:13): [True: 835, False: 20]
  ------------------
10959|    835|            &&
10960|    835|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (10960:13): [True: 826, False: 9]
  ------------------
10961|  1.07k|        )
10962|    826|        {
10963|    826|            D(fprintf(stderr, "%*c+ type_alias[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"type\" NAME type_params? '=' expression"));
10964|    826|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10965|    826|            if (_token == NULL) {
  ------------------
  |  Branch (10965:17): [True: 0, False: 826]
  ------------------
10966|      0|                p->level--;
10967|      0|                return NULL;
10968|      0|            }
10969|    826|            int _end_lineno = _token->end_lineno;
10970|    826|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    826|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 826]
  |  |  ------------------
  ------------------
10971|    826|            int _end_col_offset = _token->end_col_offset;
10972|    826|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    826|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 826]
  |  |  ------------------
  ------------------
10973|    826|            _res = CHECK_VERSION ( stmt_ty , 12 , "Type statement is" , _PyAST_TypeAlias ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , n , Store ) ) , t , b , EXTRA ) );
  ------------------
  |  |  345|    826|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
10974|    826|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10974:18): [True: 0, False: 826]
  |  Branch (10974:34): [True: 0, False: 826]
  |  Branch (10974:57): [True: 0, False: 0]
  ------------------
10975|      0|                p->error_indicator = 1;
10976|      0|                p->level--;
10977|      0|                return NULL;
10978|      0|            }
10979|    826|            goto done;
10980|    826|        }
10981|    249|        p->mark = _mark;
10982|    249|        D(fprintf(stderr, "%*c%s type_alias[%d-%d]: %s failed!\n", p->level, ' ',
10983|    249|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"type\" NAME type_params? '=' expression"));
10984|    249|    }
10985|    249|    _res = NULL;
10986|  1.07k|  done:
10987|  1.07k|    p->level--;
10988|  1.07k|    return _res;
10989|    249|}
parser.c:type_params_rule:
10994|  39.8k|{
10995|  39.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  79.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10995:9): [True: 0, False: 39.8k]
  |  Branch (10995:35): [True: 0, False: 39.8k]
  ------------------
10996|      0|        _Pypegen_stack_overflow(p);
10997|      0|    }
10998|  39.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (10998:9): [True: 0, False: 39.8k]
  ------------------
10999|      0|        p->level--;
11000|      0|        return NULL;
11001|      0|    }
11002|  39.8k|    asdl_type_param_seq* _res = NULL;
11003|  39.8k|    int _mark = p->mark;
11004|  39.8k|    if (p->call_invalid_rules) { // invalid_type_params
  ------------------
  |  Branch (11004:9): [True: 11.2k, False: 28.5k]
  ------------------
11005|  11.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (11005:13): [True: 0, False: 11.2k]
  ------------------
11006|      0|            p->level--;
11007|      0|            return NULL;
11008|      0|        }
11009|  11.2k|        D(fprintf(stderr, "%*c> type_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_type_params"));
11010|  11.2k|        void *invalid_type_params_var;
11011|  11.2k|        if (
11012|  11.2k|            (invalid_type_params_var = invalid_type_params_rule(p))  // invalid_type_params
  ------------------
  |  Branch (11012:13): [True: 0, False: 11.2k]
  ------------------
11013|  11.2k|        )
11014|      0|        {
11015|      0|            D(fprintf(stderr, "%*c+ type_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_type_params"));
11016|      0|            _res = invalid_type_params_var;
11017|      0|            goto done;
11018|      0|        }
11019|  11.2k|        p->mark = _mark;
11020|  11.2k|        D(fprintf(stderr, "%*c%s type_params[%d-%d]: %s failed!\n", p->level, ' ',
11021|  11.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_type_params"));
11022|  11.2k|    }
11023|  39.8k|    { // '[' type_param_seq ']'
11024|  39.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (11024:13): [True: 2, False: 39.8k]
  ------------------
11025|      2|            p->level--;
11026|      2|            return NULL;
11027|      2|        }
11028|  39.8k|        D(fprintf(stderr, "%*c> type_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' type_param_seq ']'"));
11029|  39.8k|        Token * _literal;
11030|  39.8k|        Token * _literal_1;
11031|  39.8k|        asdl_type_param_seq* t;
11032|  39.8k|        if (
11033|  39.8k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (11033:13): [True: 8.84k, False: 30.9k]
  ------------------
11034|  8.84k|            &&
11035|  8.84k|            (t = type_param_seq_rule(p))  // type_param_seq
  ------------------
  |  Branch (11035:13): [True: 8.81k, False: 36]
  ------------------
11036|  8.81k|            &&
11037|  8.81k|            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
  ------------------
  |  Branch (11037:13): [True: 8.70k, False: 113]
  ------------------
11038|  39.8k|        )
11039|  8.70k|        {
11040|  8.70k|            D(fprintf(stderr, "%*c+ type_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' type_param_seq ']'"));
11041|  8.70k|            _res = CHECK_VERSION ( asdl_type_param_seq* , 12 , "Type parameter lists are" , t );
  ------------------
  |  |  345|  8.70k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
11042|  8.70k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11042:18): [True: 0, False: 8.70k]
  |  Branch (11042:34): [True: 0, False: 8.70k]
  |  Branch (11042:57): [True: 0, False: 0]
  ------------------
11043|      0|                p->error_indicator = 1;
11044|      0|                p->level--;
11045|      0|                return NULL;
11046|      0|            }
11047|  8.70k|            goto done;
11048|  8.70k|        }
11049|  31.1k|        p->mark = _mark;
11050|  31.1k|        D(fprintf(stderr, "%*c%s type_params[%d-%d]: %s failed!\n", p->level, ' ',
11051|  31.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' type_param_seq ']'"));
11052|  31.1k|    }
11053|  31.1k|    _res = NULL;
11054|  39.8k|  done:
11055|  39.8k|    p->level--;
11056|  39.8k|    return _res;
11057|  31.1k|}
parser.c:invalid_type_params_rule:
27151|  11.2k|{
27152|  11.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  22.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27152:9): [True: 0, False: 11.2k]
  |  Branch (27152:35): [True: 0, False: 11.2k]
  ------------------
27153|      0|        _Pypegen_stack_overflow(p);
27154|      0|    }
27155|  11.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (27155:9): [True: 0, False: 11.2k]
  ------------------
27156|      0|        p->level--;
27157|      0|        return NULL;
27158|      0|    }
27159|  11.2k|    void * _res = NULL;
27160|  11.2k|    int _mark = p->mark;
27161|  11.2k|    { // '[' ']'
27162|  11.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (27162:13): [True: 0, False: 11.2k]
  ------------------
27163|      0|            p->level--;
27164|      0|            return NULL;
27165|      0|        }
27166|  11.2k|        D(fprintf(stderr, "%*c> invalid_type_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' ']'"));
27167|  11.2k|        Token * _literal;
27168|  11.2k|        Token * token;
27169|  11.2k|        if (
27170|  11.2k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (27170:13): [True: 2.71k, False: 8.57k]
  ------------------
27171|  2.71k|            &&
27172|  2.71k|            (token = _PyPegen_expect_token(p, 10))  // token=']'
  ------------------
  |  Branch (27172:13): [True: 1, False: 2.71k]
  ------------------
27173|  11.2k|        )
27174|      1|        {
27175|      1|            D(fprintf(stderr, "%*c+ invalid_type_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' ']'"));
27176|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( token , "Type parameter list cannot be empty" );
  ------------------
  |  |  241|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
27177|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27177:18): [True: 1, False: 0]
  |  Branch (27177:34): [True: 0, False: 0]
  |  Branch (27177:57): [True: 1, False: 0]
  ------------------
27178|      1|                p->error_indicator = 1;
27179|      1|                p->level--;
27180|      1|                return NULL;
27181|      1|            }
27182|      0|            goto done;
27183|      1|        }
27184|  11.2k|        p->mark = _mark;
27185|  11.2k|        D(fprintf(stderr, "%*c%s invalid_type_params[%d-%d]: %s failed!\n", p->level, ' ',
27186|  11.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' ']'"));
27187|  11.2k|    }
27188|  11.2k|    _res = NULL;
27189|  11.2k|  done:
27190|  11.2k|    p->level--;
27191|  11.2k|    return _res;
27192|  11.2k|}
parser.c:type_param_seq_rule:
11062|  8.84k|{
11063|  8.84k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  17.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11063:9): [True: 0, False: 8.84k]
  |  Branch (11063:35): [True: 0, False: 8.84k]
  ------------------
11064|      0|        _Pypegen_stack_overflow(p);
11065|      0|    }
11066|  8.84k|    if (p->error_indicator) {
  ------------------
  |  Branch (11066:9): [True: 0, False: 8.84k]
  ------------------
11067|      0|        p->level--;
11068|      0|        return NULL;
11069|      0|    }
11070|  8.84k|    asdl_type_param_seq* _res = NULL;
11071|  8.84k|    int _mark = p->mark;
11072|  8.84k|    { // ','.type_param+ ','?
11073|  8.84k|        if (p->error_indicator) {
  ------------------
  |  Branch (11073:13): [True: 0, False: 8.84k]
  ------------------
11074|      0|            p->level--;
11075|      0|            return NULL;
11076|      0|        }
11077|  8.84k|        D(fprintf(stderr, "%*c> type_param_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.type_param+ ','?"));
11078|  8.84k|        void *_opt_var;
11079|  8.84k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  8.84k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 8.84k]
  |  |  ------------------
  ------------------
11080|  8.84k|        asdl_type_param_seq* a;
11081|  8.84k|        if (
11082|  8.84k|            (a = (asdl_type_param_seq*)_gather_54_rule(p))  // ','.type_param+
  ------------------
  |  Branch (11082:13): [True: 8.82k, False: 24]
  ------------------
11083|  8.82k|            &&
11084|  8.82k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (11084:13): [True: 8.81k, False: 12]
  ------------------
11085|  8.84k|        )
11086|  8.81k|        {
11087|  8.81k|            D(fprintf(stderr, "%*c+ type_param_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.type_param+ ','?"));
11088|  8.81k|            _res = a;
11089|  8.81k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11089:18): [True: 0, False: 8.81k]
  |  Branch (11089:34): [True: 0, False: 8.81k]
  |  Branch (11089:57): [True: 0, False: 0]
  ------------------
11090|      0|                p->error_indicator = 1;
11091|      0|                p->level--;
11092|      0|                return NULL;
11093|      0|            }
11094|  8.81k|            goto done;
11095|  8.81k|        }
11096|     36|        p->mark = _mark;
11097|     36|        D(fprintf(stderr, "%*c%s type_param_seq[%d-%d]: %s failed!\n", p->level, ' ',
11098|     36|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.type_param+ ','?"));
11099|     36|    }
11100|     36|    _res = NULL;
11101|  8.84k|  done:
11102|  8.84k|    p->level--;
11103|  8.84k|    return _res;
11104|     36|}
parser.c:_gather_54_rule:
30667|  8.84k|{
30668|  8.84k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  17.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30668:9): [True: 0, False: 8.84k]
  |  Branch (30668:35): [True: 0, False: 8.84k]
  ------------------
30669|      0|        _Pypegen_stack_overflow(p);
30670|      0|    }
30671|  8.84k|    if (p->error_indicator) {
  ------------------
  |  Branch (30671:9): [True: 0, False: 8.84k]
  ------------------
30672|      0|        p->level--;
30673|      0|        return NULL;
30674|      0|    }
30675|  8.84k|    asdl_seq * _res = NULL;
30676|  8.84k|    int _mark = p->mark;
30677|  8.84k|    { // type_param _loop0_53
30678|  8.84k|        if (p->error_indicator) {
  ------------------
  |  Branch (30678:13): [True: 0, False: 8.84k]
  ------------------
30679|      0|            p->level--;
30680|      0|            return NULL;
30681|      0|        }
30682|  8.84k|        D(fprintf(stderr, "%*c> _gather_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "type_param _loop0_53"));
30683|  8.84k|        type_param_ty elem;
30684|  8.84k|        asdl_seq * seq;
30685|  8.84k|        if (
30686|  8.84k|            (elem = type_param_rule(p))  // type_param
  ------------------
  |  Branch (30686:13): [True: 8.82k, False: 24]
  ------------------
30687|  8.82k|            &&
30688|  8.82k|            (seq = _loop0_53_rule(p))  // _loop0_53
  ------------------
  |  Branch (30688:13): [True: 8.82k, False: 0]
  ------------------
30689|  8.84k|        )
30690|  8.82k|        {
30691|  8.82k|            D(fprintf(stderr, "%*c+ _gather_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "type_param _loop0_53"));
30692|  8.82k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30693|  8.82k|            goto done;
30694|  8.82k|        }
30695|     24|        p->mark = _mark;
30696|     24|        D(fprintf(stderr, "%*c%s _gather_54[%d-%d]: %s failed!\n", p->level, ' ',
30697|     24|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "type_param _loop0_53"));
30698|     24|    }
30699|     24|    _res = NULL;
30700|  8.84k|  done:
30701|  8.84k|    p->level--;
30702|  8.84k|    return _res;
30703|     24|}
parser.c:type_param_rule:
11113|  25.0k|{
11114|  25.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  50.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11114:9): [True: 0, False: 25.0k]
  |  Branch (11114:35): [True: 0, False: 25.0k]
  ------------------
11115|      0|        _Pypegen_stack_overflow(p);
11116|      0|    }
11117|  25.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (11117:9): [True: 0, False: 25.0k]
  ------------------
11118|      0|        p->level--;
11119|      0|        return NULL;
11120|      0|    }
11121|  25.0k|    type_param_ty _res = NULL;
11122|  25.0k|    if (_PyPegen_is_memoized(p, type_param_type, &_res)) {
  ------------------
  |  |  193|  25.0k|#define type_param_type 1104
  ------------------
  |  Branch (11122:9): [True: 4.84k, False: 20.1k]
  ------------------
11123|  4.84k|        p->level--;
11124|  4.84k|        return _res;
11125|  4.84k|    }
11126|  20.1k|    int _mark = p->mark;
11127|  20.1k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (11127:9): [True: 0, False: 20.1k]
  |  Branch (11127:31): [True: 0, False: 0]
  ------------------
11128|      0|        p->error_indicator = 1;
11129|      0|        p->level--;
11130|      0|        return NULL;
11131|      0|    }
11132|  20.1k|    int _start_lineno = p->tokens[_mark]->lineno;
11133|  20.1k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  20.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20.1k]
  |  |  ------------------
  ------------------
11134|  20.1k|    int _start_col_offset = p->tokens[_mark]->col_offset;
11135|  20.1k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  20.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20.1k]
  |  |  ------------------
  ------------------
11136|  20.1k|    { // NAME type_param_bound? type_param_default?
11137|  20.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (11137:13): [True: 0, False: 20.1k]
  ------------------
11138|      0|            p->level--;
11139|      0|            return NULL;
11140|      0|        }
11141|  20.1k|        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME type_param_bound? type_param_default?"));
11142|  20.1k|        expr_ty a;
11143|  20.1k|        void *b;
11144|  20.1k|        void *c;
11145|  20.1k|        if (
11146|  20.1k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (11146:13): [True: 17.3k, False: 2.79k]
  ------------------
11147|  17.3k|            &&
11148|  17.3k|            (b = type_param_bound_rule(p), !p->error_indicator)  // type_param_bound?
  ------------------
  |  Branch (11148:13): [True: 17.3k, False: 6]
  ------------------
11149|  17.3k|            &&
11150|  17.3k|            (c = type_param_default_rule(p), !p->error_indicator)  // type_param_default?
  ------------------
  |  Branch (11150:13): [True: 17.3k, False: 3]
  ------------------
11151|  20.1k|        )
11152|  17.3k|        {
11153|  17.3k|            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME type_param_bound? type_param_default?"));
11154|  17.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11155|  17.3k|            if (_token == NULL) {
  ------------------
  |  Branch (11155:17): [True: 0, False: 17.3k]
  ------------------
11156|      0|                p->level--;
11157|      0|                return NULL;
11158|      0|            }
11159|  17.3k|            int _end_lineno = _token->end_lineno;
11160|  17.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.3k]
  |  |  ------------------
  ------------------
11161|  17.3k|            int _end_col_offset = _token->end_col_offset;
11162|  17.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.3k]
  |  |  ------------------
  ------------------
11163|  17.3k|            _res = _PyAST_TypeVar ( a -> v . Name . id , b , c , EXTRA );
  ------------------
  |  |  307|  17.3k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11164|  17.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11164:18): [True: 0, False: 17.3k]
  |  Branch (11164:34): [True: 0, False: 17.3k]
  |  Branch (11164:57): [True: 0, False: 0]
  ------------------
11165|      0|                p->error_indicator = 1;
11166|      0|                p->level--;
11167|      0|                return NULL;
11168|      0|            }
11169|  17.3k|            goto done;
11170|  17.3k|        }
11171|  2.80k|        p->mark = _mark;
11172|  2.80k|        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11173|  2.80k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME type_param_bound? type_param_default?"));
11174|  2.80k|    }
11175|  2.80k|    if (p->call_invalid_rules) { // invalid_type_param
  ------------------
  |  Branch (11175:9): [True: 606, False: 2.19k]
  ------------------
11176|    606|        if (p->error_indicator) {
  ------------------
  |  Branch (11176:13): [True: 3, False: 603]
  ------------------
11177|      3|            p->level--;
11178|      3|            return NULL;
11179|      3|        }
11180|    603|        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_type_param"));
11181|    603|        void *invalid_type_param_var;
11182|    603|        if (
11183|    603|            (invalid_type_param_var = invalid_type_param_rule(p))  // invalid_type_param
  ------------------
  |  Branch (11183:13): [True: 0, False: 603]
  ------------------
11184|    603|        )
11185|      0|        {
11186|      0|            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_type_param"));
11187|      0|            _res = invalid_type_param_var;
11188|      0|            goto done;
11189|      0|        }
11190|    603|        p->mark = _mark;
11191|    603|        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11192|    603|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_type_param"));
11193|    603|    }
11194|  2.79k|    { // '*' NAME type_param_starred_default?
11195|  2.79k|        if (p->error_indicator) {
  ------------------
  |  Branch (11195:13): [True: 13, False: 2.78k]
  ------------------
11196|     13|            p->level--;
11197|     13|            return NULL;
11198|     13|        }
11199|  2.78k|        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' NAME type_param_starred_default?"));
11200|  2.78k|        Token * _literal;
11201|  2.78k|        expr_ty a;
11202|  2.78k|        void *b;
11203|  2.78k|        if (
11204|  2.78k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (11204:13): [True: 944, False: 1.84k]
  ------------------
11205|    944|            &&
11206|    944|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (11206:13): [True: 936, False: 8]
  ------------------
11207|    936|            &&
11208|    936|            (b = type_param_starred_default_rule(p), !p->error_indicator)  // type_param_starred_default?
  ------------------
  |  Branch (11208:13): [True: 933, False: 3]
  ------------------
11209|  2.78k|        )
11210|    933|        {
11211|    933|            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' NAME type_param_starred_default?"));
11212|    933|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11213|    933|            if (_token == NULL) {
  ------------------
  |  Branch (11213:17): [True: 0, False: 933]
  ------------------
11214|      0|                p->level--;
11215|      0|                return NULL;
11216|      0|            }
11217|    933|            int _end_lineno = _token->end_lineno;
11218|    933|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    933|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 933]
  |  |  ------------------
  ------------------
11219|    933|            int _end_col_offset = _token->end_col_offset;
11220|    933|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    933|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 933]
  |  |  ------------------
  ------------------
11221|    933|            _res = _PyAST_TypeVarTuple ( a -> v . Name . id , b , EXTRA );
  ------------------
  |  |  307|    933|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11222|    933|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11222:18): [True: 0, False: 933]
  |  Branch (11222:34): [True: 0, False: 933]
  |  Branch (11222:57): [True: 0, False: 0]
  ------------------
11223|      0|                p->error_indicator = 1;
11224|      0|                p->level--;
11225|      0|                return NULL;
11226|      0|            }
11227|    933|            goto done;
11228|    933|        }
11229|  1.85k|        p->mark = _mark;
11230|  1.85k|        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11231|  1.85k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME type_param_starred_default?"));
11232|  1.85k|    }
11233|      0|    { // '**' NAME type_param_default?
11234|  1.85k|        if (p->error_indicator) {
  ------------------
  |  Branch (11234:13): [True: 5, False: 1.84k]
  ------------------
11235|      5|            p->level--;
11236|      5|            return NULL;
11237|      5|        }
11238|  1.84k|        D(fprintf(stderr, "%*c> type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' NAME type_param_default?"));
11239|  1.84k|        Token * _literal;
11240|  1.84k|        expr_ty a;
11241|  1.84k|        void *b;
11242|  1.84k|        if (
11243|  1.84k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (11243:13): [True: 410, False: 1.43k]
  ------------------
11244|    410|            &&
11245|    410|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (11245:13): [True: 403, False: 7]
  ------------------
11246|    403|            &&
11247|    403|            (b = type_param_default_rule(p), !p->error_indicator)  // type_param_default?
  ------------------
  |  Branch (11247:13): [True: 401, False: 2]
  ------------------
11248|  1.84k|        )
11249|    401|        {
11250|    401|            D(fprintf(stderr, "%*c+ type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' NAME type_param_default?"));
11251|    401|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11252|    401|            if (_token == NULL) {
  ------------------
  |  Branch (11252:17): [True: 0, False: 401]
  ------------------
11253|      0|                p->level--;
11254|      0|                return NULL;
11255|      0|            }
11256|    401|            int _end_lineno = _token->end_lineno;
11257|    401|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    401|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 401]
  |  |  ------------------
  ------------------
11258|    401|            int _end_col_offset = _token->end_col_offset;
11259|    401|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    401|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 401]
  |  |  ------------------
  ------------------
11260|    401|            _res = _PyAST_ParamSpec ( a -> v . Name . id , b , EXTRA );
  ------------------
  |  |  307|    401|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11261|    401|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11261:18): [True: 0, False: 401]
  |  Branch (11261:34): [True: 0, False: 401]
  |  Branch (11261:57): [True: 0, False: 0]
  ------------------
11262|      0|                p->error_indicator = 1;
11263|      0|                p->level--;
11264|      0|                return NULL;
11265|      0|            }
11266|    401|            goto done;
11267|    401|        }
11268|  1.44k|        p->mark = _mark;
11269|  1.44k|        D(fprintf(stderr, "%*c%s type_param[%d-%d]: %s failed!\n", p->level, ' ',
11270|  1.44k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' NAME type_param_default?"));
11271|  1.44k|    }
11272|  1.44k|    _res = NULL;
11273|  20.1k|  done:
11274|  20.1k|    _PyPegen_insert_memo(p, _mark, type_param_type, _res);
  ------------------
  |  |  193|  20.1k|#define type_param_type 1104
  ------------------
11275|  20.1k|    p->level--;
11276|  20.1k|    return _res;
11277|  1.44k|}
parser.c:type_param_bound_rule:
11282|  17.3k|{
11283|  17.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11283:9): [True: 0, False: 17.3k]
  |  Branch (11283:35): [True: 0, False: 17.3k]
  ------------------
11284|      0|        _Pypegen_stack_overflow(p);
11285|      0|    }
11286|  17.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (11286:9): [True: 0, False: 17.3k]
  ------------------
11287|      0|        p->level--;
11288|      0|        return NULL;
11289|      0|    }
11290|  17.3k|    expr_ty _res = NULL;
11291|  17.3k|    int _mark = p->mark;
11292|  17.3k|    { // ':' expression
11293|  17.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (11293:13): [True: 0, False: 17.3k]
  ------------------
11294|      0|            p->level--;
11295|      0|            return NULL;
11296|      0|        }
11297|  17.3k|        D(fprintf(stderr, "%*c> type_param_bound[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression"));
11298|  17.3k|        Token * _literal;
11299|  17.3k|        expr_ty e;
11300|  17.3k|        if (
11301|  17.3k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (11301:13): [True: 2.71k, False: 14.6k]
  ------------------
11302|  2.71k|            &&
11303|  2.71k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (11303:13): [True: 2.70k, False: 4]
  ------------------
11304|  17.3k|        )
11305|  2.70k|        {
11306|  2.70k|            D(fprintf(stderr, "%*c+ type_param_bound[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression"));
11307|  2.70k|            _res = e;
11308|  2.70k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11308:18): [True: 0, False: 2.70k]
  |  Branch (11308:34): [True: 0, False: 2.70k]
  |  Branch (11308:57): [True: 0, False: 0]
  ------------------
11309|      0|                p->error_indicator = 1;
11310|      0|                p->level--;
11311|      0|                return NULL;
11312|      0|            }
11313|  2.70k|            goto done;
11314|  2.70k|        }
11315|  14.6k|        p->mark = _mark;
11316|  14.6k|        D(fprintf(stderr, "%*c%s type_param_bound[%d-%d]: %s failed!\n", p->level, ' ',
11317|  14.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression"));
11318|  14.6k|    }
11319|  14.6k|    _res = NULL;
11320|  17.3k|  done:
11321|  17.3k|    p->level--;
11322|  17.3k|    return _res;
11323|  14.6k|}
parser.c:type_param_default_rule:
11328|  17.7k|{
11329|  17.7k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  35.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11329:9): [True: 0, False: 17.7k]
  |  Branch (11329:35): [True: 0, False: 17.7k]
  ------------------
11330|      0|        _Pypegen_stack_overflow(p);
11331|      0|    }
11332|  17.7k|    if (p->error_indicator) {
  ------------------
  |  Branch (11332:9): [True: 0, False: 17.7k]
  ------------------
11333|      0|        p->level--;
11334|      0|        return NULL;
11335|      0|    }
11336|  17.7k|    expr_ty _res = NULL;
11337|  17.7k|    int _mark = p->mark;
11338|  17.7k|    { // '=' expression
11339|  17.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (11339:13): [True: 0, False: 17.7k]
  ------------------
11340|      0|            p->level--;
11341|      0|            return NULL;
11342|      0|        }
11343|  17.7k|        D(fprintf(stderr, "%*c> type_param_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression"));
11344|  17.7k|        Token * _literal;
11345|  17.7k|        expr_ty e;
11346|  17.7k|        if (
11347|  17.7k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (11347:13): [True: 1.80k, False: 15.9k]
  ------------------
11348|  1.80k|            &&
11349|  1.80k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (11349:13): [True: 1.79k, False: 11]
  ------------------
11350|  17.7k|        )
11351|  1.79k|        {
11352|  1.79k|            D(fprintf(stderr, "%*c+ type_param_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression"));
11353|  1.79k|            _res = CHECK_VERSION ( expr_ty , 13 , "Type parameter defaults are" , e );
  ------------------
  |  |  345|  1.79k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
11354|  1.79k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11354:18): [True: 0, False: 1.79k]
  |  Branch (11354:34): [True: 0, False: 1.79k]
  |  Branch (11354:57): [True: 0, False: 0]
  ------------------
11355|      0|                p->error_indicator = 1;
11356|      0|                p->level--;
11357|      0|                return NULL;
11358|      0|            }
11359|  1.79k|            goto done;
11360|  1.79k|        }
11361|  16.0k|        p->mark = _mark;
11362|  16.0k|        D(fprintf(stderr, "%*c%s type_param_default[%d-%d]: %s failed!\n", p->level, ' ',
11363|  16.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression"));
11364|  16.0k|    }
11365|  16.0k|    _res = NULL;
11366|  17.7k|  done:
11367|  17.7k|    p->level--;
11368|  17.7k|    return _res;
11369|  16.0k|}
parser.c:invalid_type_param_rule:
20290|    603|{
20291|    603|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.20k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20291:9): [True: 0, False: 603]
  |  Branch (20291:35): [True: 0, False: 603]
  ------------------
20292|      0|        _Pypegen_stack_overflow(p);
20293|      0|    }
20294|    603|    if (p->error_indicator) {
  ------------------
  |  Branch (20294:9): [True: 0, False: 603]
  ------------------
20295|      0|        p->level--;
20296|      0|        return NULL;
20297|      0|    }
20298|    603|    void * _res = NULL;
20299|    603|    int _mark = p->mark;
20300|    603|    { // '*' NAME ':' expression
20301|    603|        if (p->error_indicator) {
  ------------------
  |  Branch (20301:13): [True: 0, False: 603]
  ------------------
20302|      0|            p->level--;
20303|      0|            return NULL;
20304|      0|        }
20305|    603|        D(fprintf(stderr, "%*c> invalid_type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' NAME ':' expression"));
20306|    603|        Token * _literal;
20307|    603|        expr_ty a;
20308|    603|        Token * colon;
20309|    603|        expr_ty e;
20310|    603|        if (
20311|    603|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (20311:13): [True: 232, False: 371]
  ------------------
20312|    232|            &&
20313|    232|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (20313:13): [True: 228, False: 4]
  ------------------
20314|    228|            &&
20315|    228|            (colon = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20315:13): [True: 5, False: 223]
  ------------------
20316|      5|            &&
20317|      5|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (20317:13): [True: 1, False: 4]
  ------------------
20318|    603|        )
20319|      1|        {
20320|      1|            D(fprintf(stderr, "%*c+ invalid_type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' NAME ':' expression"));
20321|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( colon , e -> kind == Tuple_kind ? "cannot use constraints with TypeVarTuple" : "cannot use bound with TypeVarTuple" );
  ------------------
  |  |  241|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |  |  Branch (241:110): [True: 0, False: 1]
  |  |  ------------------
  ------------------
20322|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20322:18): [True: 1, False: 0]
  |  Branch (20322:34): [True: 0, False: 0]
  |  Branch (20322:57): [True: 1, False: 0]
  ------------------
20323|      1|                p->error_indicator = 1;
20324|      1|                p->level--;
20325|      1|                return NULL;
20326|      1|            }
20327|      0|            goto done;
20328|      1|        }
20329|    602|        p->mark = _mark;
20330|    602|        D(fprintf(stderr, "%*c%s invalid_type_param[%d-%d]: %s failed!\n", p->level, ' ',
20331|    602|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' NAME ':' expression"));
20332|    602|    }
20333|      0|    { // '**' NAME ':' expression
20334|    602|        if (p->error_indicator) {
  ------------------
  |  Branch (20334:13): [True: 4, False: 598]
  ------------------
20335|      4|            p->level--;
20336|      4|            return NULL;
20337|      4|        }
20338|    598|        D(fprintf(stderr, "%*c> invalid_type_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' NAME ':' expression"));
20339|    598|        Token * _literal;
20340|    598|        expr_ty a;
20341|    598|        Token * colon;
20342|    598|        expr_ty e;
20343|    598|        if (
20344|    598|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (20344:13): [True: 95, False: 503]
  ------------------
20345|     95|            &&
20346|     95|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (20346:13): [True: 92, False: 3]
  ------------------
20347|     92|            &&
20348|     92|            (colon = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (20348:13): [True: 2, False: 90]
  ------------------
20349|      2|            &&
20350|      2|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (20350:13): [True: 1, False: 1]
  ------------------
20351|    598|        )
20352|      1|        {
20353|      1|            D(fprintf(stderr, "%*c+ invalid_type_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' NAME ':' expression"));
20354|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( colon , e -> kind == Tuple_kind ? "cannot use constraints with ParamSpec" : "cannot use bound with ParamSpec" );
  ------------------
  |  |  241|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |  |  Branch (241:110): [True: 0, False: 1]
  |  |  ------------------
  ------------------
20355|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20355:18): [True: 1, False: 0]
  |  Branch (20355:34): [True: 0, False: 0]
  |  Branch (20355:57): [True: 1, False: 0]
  ------------------
20356|      1|                p->error_indicator = 1;
20357|      1|                p->level--;
20358|      1|                return NULL;
20359|      1|            }
20360|      0|            goto done;
20361|      1|        }
20362|    597|        p->mark = _mark;
20363|    597|        D(fprintf(stderr, "%*c%s invalid_type_param[%d-%d]: %s failed!\n", p->level, ' ',
20364|    597|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' NAME ':' expression"));
20365|    597|    }
20366|    597|    _res = NULL;
20367|    597|  done:
20368|    597|    p->level--;
20369|    597|    return _res;
20370|    597|}
parser.c:type_param_starred_default_rule:
11374|    936|{
11375|    936|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.87k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11375:9): [True: 0, False: 936]
  |  Branch (11375:35): [True: 0, False: 936]
  ------------------
11376|      0|        _Pypegen_stack_overflow(p);
11377|      0|    }
11378|    936|    if (p->error_indicator) {
  ------------------
  |  Branch (11378:9): [True: 0, False: 936]
  ------------------
11379|      0|        p->level--;
11380|      0|        return NULL;
11381|      0|    }
11382|    936|    expr_ty _res = NULL;
11383|    936|    int _mark = p->mark;
11384|    936|    { // '=' star_expression
11385|    936|        if (p->error_indicator) {
  ------------------
  |  Branch (11385:13): [True: 0, False: 936]
  ------------------
11386|      0|            p->level--;
11387|      0|            return NULL;
11388|      0|        }
11389|    936|        D(fprintf(stderr, "%*c> type_param_starred_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' star_expression"));
11390|    936|        Token * _literal;
11391|    936|        expr_ty e;
11392|    936|        if (
11393|    936|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (11393:13): [True: 271, False: 665]
  ------------------
11394|    271|            &&
11395|    271|            (e = star_expression_rule(p))  // star_expression
  ------------------
  |  Branch (11395:13): [True: 267, False: 4]
  ------------------
11396|    936|        )
11397|    267|        {
11398|    267|            D(fprintf(stderr, "%*c+ type_param_starred_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' star_expression"));
11399|    267|            _res = CHECK_VERSION ( expr_ty , 13 , "Type parameter defaults are" , e );
  ------------------
  |  |  345|    267|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
11400|    267|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11400:18): [True: 0, False: 267]
  |  Branch (11400:34): [True: 0, False: 267]
  |  Branch (11400:57): [True: 0, False: 0]
  ------------------
11401|      0|                p->error_indicator = 1;
11402|      0|                p->level--;
11403|      0|                return NULL;
11404|      0|            }
11405|    267|            goto done;
11406|    267|        }
11407|    669|        p->mark = _mark;
11408|    669|        D(fprintf(stderr, "%*c%s type_param_starred_default[%d-%d]: %s failed!\n", p->level, ' ',
11409|    669|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' star_expression"));
11410|    669|    }
11411|    669|    _res = NULL;
11412|    936|  done:
11413|    936|    p->level--;
11414|    936|    return _res;
11415|    669|}
parser.c:_loop0_53_rule:
30591|  8.82k|{
30592|  8.82k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  17.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30592:9): [True: 0, False: 8.82k]
  |  Branch (30592:35): [True: 0, False: 8.82k]
  ------------------
30593|      0|        _Pypegen_stack_overflow(p);
30594|      0|    }
30595|  8.82k|    if (p->error_indicator) {
  ------------------
  |  Branch (30595:9): [True: 0, False: 8.82k]
  ------------------
30596|      0|        p->level--;
30597|      0|        return NULL;
30598|      0|    }
30599|  8.82k|    void *_res = NULL;
30600|  8.82k|    int _mark = p->mark;
30601|  8.82k|    void **_children = PyMem_Malloc(sizeof(void *));
30602|  8.82k|    if (!_children) {
  ------------------
  |  Branch (30602:9): [True: 0, False: 8.82k]
  ------------------
30603|      0|        p->error_indicator = 1;
30604|      0|        PyErr_NoMemory();
30605|      0|        p->level--;
30606|      0|        return NULL;
30607|      0|    }
30608|  8.82k|    Py_ssize_t _children_capacity = 1;
30609|  8.82k|    Py_ssize_t _n = 0;
30610|  8.82k|    { // ',' type_param
30611|  8.82k|        if (p->error_indicator) {
  ------------------
  |  Branch (30611:13): [True: 0, False: 8.82k]
  ------------------
30612|      0|            p->level--;
30613|      0|            return NULL;
30614|      0|        }
30615|  8.82k|        D(fprintf(stderr, "%*c> _loop0_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' type_param"));
30616|  8.82k|        Token * _literal;
30617|  8.82k|        type_param_ty elem;
30618|  8.82k|        while (
30619|  23.0k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (30619:13): [True: 16.1k, False: 6.82k]
  ------------------
30620|  16.1k|            &&
30621|  16.1k|            (elem = type_param_rule(p))  // type_param
  ------------------
  |  Branch (30621:13): [True: 14.1k, False: 2.00k]
  ------------------
30622|  8.82k|        )
30623|  14.1k|        {
30624|  14.1k|            _res = elem;
30625|  14.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (30625:18): [True: 0, False: 14.1k]
  |  Branch (30625:34): [True: 0, False: 14.1k]
  |  Branch (30625:57): [True: 0, False: 0]
  ------------------
30626|      0|                p->error_indicator = 1;
30627|      0|                PyMem_Free(_children);
30628|      0|                p->level--;
30629|      0|                return NULL;
30630|      0|            }
30631|  14.1k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30631:17): [True: 2.56k, False: 11.6k]
  ------------------
30632|  2.56k|                _children_capacity *= 2;
30633|  2.56k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30634|  2.56k|                if (!_new_children) {
  ------------------
  |  Branch (30634:21): [True: 0, False: 2.56k]
  ------------------
30635|      0|                    PyMem_Free(_children);
30636|      0|                    p->error_indicator = 1;
30637|      0|                    PyErr_NoMemory();
30638|      0|                    p->level--;
30639|      0|                    return NULL;
30640|      0|                }
30641|  2.56k|                _children = _new_children;
30642|  2.56k|            }
30643|  14.1k|            _children[_n++] = _res;
30644|  14.1k|            _mark = p->mark;
30645|  14.1k|        }
30646|  8.82k|        p->mark = _mark;
30647|  8.82k|        D(fprintf(stderr, "%*c%s _loop0_53[%d-%d]: %s failed!\n", p->level, ' ',
30648|  8.82k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' type_param"));
30649|  8.82k|    }
30650|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30651|  8.82k|    if (!_seq) {
  ------------------
  |  Branch (30651:9): [True: 0, False: 8.82k]
  ------------------
30652|      0|        PyMem_Free(_children);
30653|      0|        p->error_indicator = 1;
30654|      0|        PyErr_NoMemory();
30655|      0|        p->level--;
30656|      0|        return NULL;
30657|      0|    }
30658|  23.0k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  14.1k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  23.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30658:28): [True: 14.1k, False: 8.82k]
  ------------------
30659|  8.82k|    PyMem_Free(_children);
30660|  8.82k|    p->level--;
30661|  8.82k|    return _seq;
30662|  8.82k|}
parser.c:_tmp_5_rule:
27599|   257k|{
27600|   257k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   515k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27600:9): [True: 0, False: 257k]
  |  Branch (27600:35): [True: 0, False: 257k]
  ------------------
27601|      0|        _Pypegen_stack_overflow(p);
27602|      0|    }
27603|   257k|    if (p->error_indicator) {
  ------------------
  |  Branch (27603:9): [True: 0, False: 257k]
  ------------------
27604|      0|        p->level--;
27605|      0|        return NULL;
27606|      0|    }
27607|   257k|    void * _res = NULL;
27608|   257k|    int _mark = p->mark;
27609|   257k|    { // 'import'
27610|   257k|        if (p->error_indicator) {
  ------------------
  |  Branch (27610:13): [True: 0, False: 257k]
  ------------------
27611|      0|            p->level--;
27612|      0|            return NULL;
27613|      0|        }
27614|   257k|        D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'"));
27615|   257k|        Token * _keyword;
27616|   257k|        if (
27617|   257k|            (_keyword = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (27617:13): [True: 4.83k, False: 252k]
  ------------------
27618|   257k|        )
27619|  4.83k|        {
27620|  4.83k|            D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'"));
27621|  4.83k|            _res = _keyword;
27622|  4.83k|            goto done;
27623|  4.83k|        }
27624|   252k|        p->mark = _mark;
27625|   252k|        D(fprintf(stderr, "%*c%s _tmp_5[%d-%d]: %s failed!\n", p->level, ' ',
27626|   252k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import'"));
27627|   252k|    }
27628|      0|    { // 'from'
27629|   252k|        if (p->error_indicator) {
  ------------------
  |  Branch (27629:13): [True: 0, False: 252k]
  ------------------
27630|      0|            p->level--;
27631|      0|            return NULL;
27632|      0|        }
27633|   252k|        D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'"));
27634|   252k|        Token * _keyword;
27635|   252k|        if (
27636|   252k|            (_keyword = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (27636:13): [True: 5.58k, False: 247k]
  ------------------
27637|   252k|        )
27638|  5.58k|        {
27639|  5.58k|            D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'"));
27640|  5.58k|            _res = _keyword;
27641|  5.58k|            goto done;
27642|  5.58k|        }
27643|   247k|        p->mark = _mark;
27644|   247k|        D(fprintf(stderr, "%*c%s _tmp_5[%d-%d]: %s failed!\n", p->level, ' ',
27645|   247k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from'"));
27646|   247k|    }
27647|      0|    { // "lazy"
27648|   247k|        if (p->error_indicator) {
  ------------------
  |  Branch (27648:13): [True: 0, False: 247k]
  ------------------
27649|      0|            p->level--;
27650|      0|            return NULL;
27651|      0|        }
27652|   247k|        D(fprintf(stderr, "%*c> _tmp_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"lazy\""));
27653|   247k|        expr_ty _keyword;
27654|   247k|        if (
27655|   247k|            (_keyword = _PyPegen_expect_soft_keyword(p, "lazy"))  // soft_keyword='"lazy"'
  ------------------
  |  Branch (27655:13): [True: 76, False: 247k]
  ------------------
27656|   247k|        )
27657|     76|        {
27658|     76|            D(fprintf(stderr, "%*c+ _tmp_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"lazy\""));
27659|     76|            _res = _keyword;
27660|     76|            goto done;
27661|     76|        }
27662|   247k|        p->mark = _mark;
27663|   247k|        D(fprintf(stderr, "%*c%s _tmp_5[%d-%d]: %s failed!\n", p->level, ' ',
27664|   247k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"lazy\""));
27665|   247k|    }
27666|   247k|    _res = NULL;
27667|   257k|  done:
27668|   257k|    p->level--;
27669|   257k|    return _res;
27670|   247k|}
parser.c:import_stmt_rule:
 3480|  10.4k|{
 3481|  10.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  20.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3481:9): [True: 0, False: 10.4k]
  |  Branch (3481:35): [True: 0, False: 10.4k]
  ------------------
 3482|      0|        _Pypegen_stack_overflow(p);
 3483|      0|    }
 3484|  10.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (3484:9): [True: 0, False: 10.4k]
  ------------------
 3485|      0|        p->level--;
 3486|      0|        return NULL;
 3487|      0|    }
 3488|  10.4k|    stmt_ty _res = NULL;
 3489|  10.4k|    if (_PyPegen_is_memoized(p, import_stmt_type, &_res)) {
  ------------------
  |  |  113|  10.4k|#define import_stmt_type 1024
  ------------------
  |  Branch (3489:9): [True: 0, False: 10.4k]
  ------------------
 3490|      0|        p->level--;
 3491|      0|        return _res;
 3492|      0|    }
 3493|  10.4k|    int _mark = p->mark;
 3494|  10.4k|    if (p->call_invalid_rules) { // invalid_import
  ------------------
  |  Branch (3494:9): [True: 2.48k, False: 8.01k]
  ------------------
 3495|  2.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (3495:13): [True: 0, False: 2.48k]
  ------------------
 3496|      0|            p->level--;
 3497|      0|            return NULL;
 3498|      0|        }
 3499|  2.48k|        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import"));
 3500|  2.48k|        void *invalid_import_var;
 3501|  2.48k|        if (
 3502|  2.48k|            (invalid_import_var = invalid_import_rule(p))  // invalid_import
  ------------------
  |  Branch (3502:13): [True: 0, False: 2.48k]
  ------------------
 3503|  2.48k|        )
 3504|      0|        {
 3505|      0|            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import"));
 3506|      0|            _res = invalid_import_var;
 3507|      0|            goto done;
 3508|      0|        }
 3509|  2.48k|        p->mark = _mark;
 3510|  2.48k|        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3511|  2.48k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import"));
 3512|  2.48k|    }
 3513|  10.4k|    { // import_name
 3514|  10.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (3514:13): [True: 6, False: 10.4k]
  ------------------
 3515|      6|            p->level--;
 3516|      6|            return NULL;
 3517|      6|        }
 3518|  10.4k|        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_name"));
 3519|  10.4k|        stmt_ty import_name_var;
 3520|  10.4k|        if (
 3521|  10.4k|            (import_name_var = import_name_rule(p))  // import_name
  ------------------
  |  Branch (3521:13): [True: 4.80k, False: 5.67k]
  ------------------
 3522|  10.4k|        )
 3523|  4.80k|        {
 3524|  4.80k|            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_name"));
 3525|  4.80k|            _res = import_name_var;
 3526|  4.80k|            goto done;
 3527|  4.80k|        }
 3528|  5.67k|        p->mark = _mark;
 3529|  5.67k|        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3530|  5.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_name"));
 3531|  5.67k|    }
 3532|      0|    { // import_from
 3533|  5.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (3533:13): [True: 12, False: 5.66k]
  ------------------
 3534|     12|            p->level--;
 3535|     12|            return NULL;
 3536|     12|        }
 3537|  5.66k|        D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from"));
 3538|  5.66k|        stmt_ty import_from_var;
 3539|  5.66k|        if (
 3540|  5.66k|            (import_from_var = import_from_rule(p))  // import_from
  ------------------
  |  Branch (3540:13): [True: 5.44k, False: 227]
  ------------------
 3541|  5.66k|        )
 3542|  5.44k|        {
 3543|  5.44k|            D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from"));
 3544|  5.44k|            _res = import_from_var;
 3545|  5.44k|            goto done;
 3546|  5.44k|        }
 3547|    227|        p->mark = _mark;
 3548|    227|        D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3549|    227|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from"));
 3550|    227|    }
 3551|    227|    _res = NULL;
 3552|  10.4k|  done:
 3553|  10.4k|    _PyPegen_insert_memo(p, _mark, import_stmt_type, _res);
  ------------------
  |  |  113|  10.4k|#define import_stmt_type 1024
  ------------------
 3554|  10.4k|    p->level--;
 3555|  10.4k|    return _res;
 3556|    227|}
parser.c:invalid_import_rule:
23040|  2.48k|{
23041|  2.48k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.96k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23041:9): [True: 0, False: 2.48k]
  |  Branch (23041:35): [True: 0, False: 2.48k]
  ------------------
23042|      0|        _Pypegen_stack_overflow(p);
23043|      0|    }
23044|  2.48k|    if (p->error_indicator) {
  ------------------
  |  Branch (23044:9): [True: 0, False: 2.48k]
  ------------------
23045|      0|        p->level--;
23046|      0|        return NULL;
23047|      0|    }
23048|  2.48k|    void * _res = NULL;
23049|  2.48k|    int _mark = p->mark;
23050|  2.48k|    { // 'import' ','.dotted_name+ 'from' dotted_name
23051|  2.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (23051:13): [True: 0, False: 2.48k]
  ------------------
23052|      0|            p->level--;
23053|      0|            return NULL;
23054|      0|        }
23055|  2.48k|        D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name"));
23056|  2.48k|        asdl_seq * _gather_136_var;
23057|  2.48k|        Token * _keyword;
23058|  2.48k|        Token * a;
23059|  2.48k|        expr_ty dotted_name_var;
23060|  2.48k|        if (
23061|  2.48k|            (a = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (23061:13): [True: 982, False: 1.50k]
  ------------------
23062|    982|            &&
23063|    982|            (_gather_136_var = _gather_136_rule(p))  // ','.dotted_name+
  ------------------
  |  Branch (23063:13): [True: 975, False: 7]
  ------------------
23064|    975|            &&
23065|    975|            (_keyword = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (23065:13): [True: 3, False: 972]
  ------------------
23066|      3|            &&
23067|      3|            (dotted_name_var = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (23067:13): [True: 2, False: 1]
  ------------------
23068|  2.48k|        )
23069|      2|        {
23070|      2|            D(fprintf(stderr, "%*c+ invalid_import[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name"));
23071|      2|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "Did you mean to use 'from ... import ...' instead?" );
  ------------------
  |  |  241|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      2|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      2|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
23072|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23072:18): [True: 2, False: 0]
  |  Branch (23072:34): [True: 0, False: 0]
  |  Branch (23072:57): [True: 2, False: 0]
  ------------------
23073|      2|                p->error_indicator = 1;
23074|      2|                p->level--;
23075|      2|                return NULL;
23076|      2|            }
23077|      0|            goto done;
23078|      2|        }
23079|  2.48k|        p->mark = _mark;
23080|  2.48k|        D(fprintf(stderr, "%*c%s invalid_import[%d-%d]: %s failed!\n", p->level, ' ',
23081|  2.48k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import' ','.dotted_name+ 'from' dotted_name"));
23082|  2.48k|    }
23083|      0|    { // 'import' NEWLINE
23084|  2.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (23084:13): [True: 1, False: 2.47k]
  ------------------
23085|      1|            p->level--;
23086|      1|            return NULL;
23087|      1|        }
23088|  2.47k|        D(fprintf(stderr, "%*c> invalid_import[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import' NEWLINE"));
23089|  2.47k|        Token * _keyword;
23090|  2.47k|        Token * token;
23091|  2.47k|        if (
23092|  2.47k|            (_keyword = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (23092:13): [True: 979, False: 1.50k]
  ------------------
23093|    979|            &&
23094|    979|            (token = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    979|#define NEWLINE         4
  ------------------
  |  Branch (23094:13): [True: 3, False: 976]
  ------------------
23095|  2.47k|        )
23096|      3|        {
23097|      3|            D(fprintf(stderr, "%*c+ invalid_import[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import' NEWLINE"));
23098|      3|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( token , "Expected one or more names after 'import'" );
  ------------------
  |  |  241|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      3|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      3|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
23099|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23099:18): [True: 3, False: 0]
  |  Branch (23099:34): [True: 0, False: 0]
  |  Branch (23099:57): [True: 3, False: 0]
  ------------------
23100|      3|                p->error_indicator = 1;
23101|      3|                p->level--;
23102|      3|                return NULL;
23103|      3|            }
23104|      0|            goto done;
23105|      3|        }
23106|  2.47k|        p->mark = _mark;
23107|  2.47k|        D(fprintf(stderr, "%*c%s invalid_import[%d-%d]: %s failed!\n", p->level, ' ',
23108|  2.47k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import' NEWLINE"));
23109|  2.47k|    }
23110|  2.47k|    _res = NULL;
23111|  2.47k|  done:
23112|  2.47k|    p->level--;
23113|  2.47k|    return _res;
23114|  2.47k|}
parser.c:_gather_136_rule:
35761|    982|{
35762|    982|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.96k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35762:9): [True: 0, False: 982]
  |  Branch (35762:35): [True: 0, False: 982]
  ------------------
35763|      0|        _Pypegen_stack_overflow(p);
35764|      0|    }
35765|    982|    if (p->error_indicator) {
  ------------------
  |  Branch (35765:9): [True: 0, False: 982]
  ------------------
35766|      0|        p->level--;
35767|      0|        return NULL;
35768|      0|    }
35769|    982|    asdl_seq * _res = NULL;
35770|    982|    int _mark = p->mark;
35771|    982|    { // dotted_name _loop0_135
35772|    982|        if (p->error_indicator) {
  ------------------
  |  Branch (35772:13): [True: 0, False: 982]
  ------------------
35773|      0|            p->level--;
35774|      0|            return NULL;
35775|      0|        }
35776|    982|        D(fprintf(stderr, "%*c> _gather_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_135"));
35777|    982|        expr_ty elem;
35778|    982|        asdl_seq * seq;
35779|    982|        if (
35780|    982|            (elem = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (35780:13): [True: 975, False: 7]
  ------------------
35781|    975|            &&
35782|    975|            (seq = _loop0_135_rule(p))  // _loop0_135
  ------------------
  |  Branch (35782:13): [True: 975, False: 0]
  ------------------
35783|    982|        )
35784|    975|        {
35785|    975|            D(fprintf(stderr, "%*c+ _gather_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name _loop0_135"));
35786|    975|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35787|    975|            goto done;
35788|    975|        }
35789|      7|        p->mark = _mark;
35790|      7|        D(fprintf(stderr, "%*c%s _gather_136[%d-%d]: %s failed!\n", p->level, ' ',
35791|      7|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name _loop0_135"));
35792|      7|    }
35793|      7|    _res = NULL;
35794|    982|  done:
35795|    982|    p->level--;
35796|    982|    return _res;
35797|      7|}
parser.c:_loop0_135_rule:
35685|    975|{
35686|    975|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.95k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35686:9): [True: 0, False: 975]
  |  Branch (35686:35): [True: 0, False: 975]
  ------------------
35687|      0|        _Pypegen_stack_overflow(p);
35688|      0|    }
35689|    975|    if (p->error_indicator) {
  ------------------
  |  Branch (35689:9): [True: 0, False: 975]
  ------------------
35690|      0|        p->level--;
35691|      0|        return NULL;
35692|      0|    }
35693|    975|    void *_res = NULL;
35694|    975|    int _mark = p->mark;
35695|    975|    void **_children = PyMem_Malloc(sizeof(void *));
35696|    975|    if (!_children) {
  ------------------
  |  Branch (35696:9): [True: 0, False: 975]
  ------------------
35697|      0|        p->error_indicator = 1;
35698|      0|        PyErr_NoMemory();
35699|      0|        p->level--;
35700|      0|        return NULL;
35701|      0|    }
35702|    975|    Py_ssize_t _children_capacity = 1;
35703|    975|    Py_ssize_t _n = 0;
35704|    975|    { // ',' dotted_name
35705|    975|        if (p->error_indicator) {
  ------------------
  |  Branch (35705:13): [True: 0, False: 975]
  ------------------
35706|      0|            p->level--;
35707|      0|            return NULL;
35708|      0|        }
35709|    975|        D(fprintf(stderr, "%*c> _loop0_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_name"));
35710|    975|        Token * _literal;
35711|    975|        expr_ty elem;
35712|    975|        while (
35713|  3.39k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35713:13): [True: 2.43k, False: 965]
  ------------------
35714|  2.43k|            &&
35715|  2.43k|            (elem = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (35715:13): [True: 2.42k, False: 10]
  ------------------
35716|    975|        )
35717|  2.42k|        {
35718|  2.42k|            _res = elem;
35719|  2.42k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (35719:18): [True: 0, False: 2.42k]
  |  Branch (35719:34): [True: 0, False: 2.42k]
  |  Branch (35719:57): [True: 0, False: 0]
  ------------------
35720|      0|                p->error_indicator = 1;
35721|      0|                PyMem_Free(_children);
35722|      0|                p->level--;
35723|      0|                return NULL;
35724|      0|            }
35725|  2.42k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (35725:17): [True: 1.29k, False: 1.12k]
  ------------------
35726|  1.29k|                _children_capacity *= 2;
35727|  1.29k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35728|  1.29k|                if (!_new_children) {
  ------------------
  |  Branch (35728:21): [True: 0, False: 1.29k]
  ------------------
35729|      0|                    PyMem_Free(_children);
35730|      0|                    p->error_indicator = 1;
35731|      0|                    PyErr_NoMemory();
35732|      0|                    p->level--;
35733|      0|                    return NULL;
35734|      0|                }
35735|  1.29k|                _children = _new_children;
35736|  1.29k|            }
35737|  2.42k|            _children[_n++] = _res;
35738|  2.42k|            _mark = p->mark;
35739|  2.42k|        }
35740|    975|        p->mark = _mark;
35741|    975|        D(fprintf(stderr, "%*c%s _loop0_135[%d-%d]: %s failed!\n", p->level, ' ',
35742|    975|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_name"));
35743|    975|    }
35744|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35745|    975|    if (!_seq) {
  ------------------
  |  Branch (35745:9): [True: 0, False: 975]
  ------------------
35746|      0|        PyMem_Free(_children);
35747|      0|        p->error_indicator = 1;
35748|      0|        PyErr_NoMemory();
35749|      0|        p->level--;
35750|      0|        return NULL;
35751|      0|    }
35752|  3.39k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  2.42k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.39k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (35752:28): [True: 2.42k, False: 975]
  ------------------
35753|    975|    PyMem_Free(_children);
35754|    975|    p->level--;
35755|    975|    return _seq;
35756|    975|}
parser.c:dotted_name_rule:
 4164|  82.8k|{
 4165|  82.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   165k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4165:9): [True: 0, False: 82.8k]
  |  Branch (4165:35): [True: 0, False: 82.8k]
  ------------------
 4166|      0|        _Pypegen_stack_overflow(p);
 4167|      0|    }
 4168|  82.8k|    expr_ty _res = NULL;
 4169|  82.8k|    if (_PyPegen_is_memoized(p, dotted_name_type, &_res)) {
  ------------------
  |  |  121|  82.8k|#define dotted_name_type 1032  // Left-recursive
  ------------------
  |  Branch (4169:9): [True: 60.7k, False: 22.1k]
  ------------------
 4170|  60.7k|        p->level--;
 4171|  60.7k|        return _res;
 4172|  60.7k|    }
 4173|  22.1k|    int _mark = p->mark;
 4174|  22.1k|    int _resmark = p->mark;
 4175|  22.1k|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, dotted_name_type);
  ------------------
  |  |  121|  22.1k|#define dotted_name_type 1032  // Left-recursive
  ------------------
 4176|  22.1k|    if (_memo == NULL) {
  ------------------
  |  Branch (4176:9): [True: 0, False: 22.1k]
  ------------------
 4177|      0|        p->level--;
 4178|      0|        return NULL;
 4179|      0|    }
 4180|  52.4k|    while (1) {
  ------------------
  |  Branch (4180:12): [True: 52.4k, Folded]
  ------------------
 4181|  52.4k|        _memo->node = _res;
 4182|  52.4k|        _memo->mark = p->mark;
 4183|  52.4k|        p->mark = _mark;
 4184|  52.4k|        void *_raw = dotted_name_raw(p);
 4185|  52.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (4185:13): [True: 12, False: 52.4k]
  ------------------
 4186|     12|            p->level--;
 4187|     12|            return NULL;
 4188|     12|        }
 4189|  52.4k|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (4189:13): [True: 1.22k, False: 51.1k]
  |  Branch (4189:29): [True: 20.8k, False: 30.3k]
  ------------------
 4190|  22.1k|            break;
 4191|  30.3k|        _resmark = p->mark;
 4192|  30.3k|        _res = _raw;
 4193|  30.3k|    }
 4194|  22.1k|    p->mark = _resmark;
 4195|  22.1k|    p->level--;
 4196|  22.1k|    return _res;
 4197|  22.1k|}
parser.c:dotted_name_raw:
 4200|  52.4k|{
 4201|  52.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   104k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4201:9): [True: 0, False: 52.4k]
  |  Branch (4201:35): [True: 0, False: 52.4k]
  ------------------
 4202|      0|        _Pypegen_stack_overflow(p);
 4203|      0|    }
 4204|  52.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (4204:9): [True: 6, False: 52.4k]
  ------------------
 4205|      6|        p->level--;
 4206|      6|        return NULL;
 4207|      6|    }
 4208|  52.4k|    expr_ty _res = NULL;
 4209|  52.4k|    int _mark = p->mark;
 4210|  52.4k|    { // dotted_name '.' NAME
 4211|  52.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (4211:13): [True: 0, False: 52.4k]
  ------------------
 4212|      0|            p->level--;
 4213|      0|            return NULL;
 4214|      0|        }
 4215|  52.4k|        D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
 4216|  52.4k|        Token * _literal;
 4217|  52.4k|        expr_ty a;
 4218|  52.4k|        expr_ty b;
 4219|  52.4k|        if (
 4220|  52.4k|            (a = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (4220:13): [True: 30.3k, False: 22.1k]
  ------------------
 4221|  30.3k|            &&
 4222|  30.3k|            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
  ------------------
  |  Branch (4222:13): [True: 9.41k, False: 20.8k]
  ------------------
 4223|  9.41k|            &&
 4224|  9.41k|            (b = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (4224:13): [True: 9.40k, False: 7]
  ------------------
 4225|  52.4k|        )
 4226|  9.40k|        {
 4227|  9.40k|            D(fprintf(stderr, "%*c+ dotted_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name '.' NAME"));
 4228|  9.40k|            _res = _PyPegen_join_names_with_dot ( p , a , b );
 4229|  9.40k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4229:18): [True: 0, False: 9.40k]
  |  Branch (4229:34): [True: 0, False: 9.40k]
  |  Branch (4229:57): [True: 0, False: 0]
  ------------------
 4230|      0|                p->error_indicator = 1;
 4231|      0|                p->level--;
 4232|      0|                return NULL;
 4233|      0|            }
 4234|  9.40k|            goto done;
 4235|  9.40k|        }
 4236|  43.0k|        p->mark = _mark;
 4237|  43.0k|        D(fprintf(stderr, "%*c%s dotted_name[%d-%d]: %s failed!\n", p->level, ' ',
 4238|  43.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name '.' NAME"));
 4239|  43.0k|    }
 4240|      0|    { // NAME
 4241|  43.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (4241:13): [True: 6, False: 43.0k]
  ------------------
 4242|      6|            p->level--;
 4243|      6|            return NULL;
 4244|      6|        }
 4245|  43.0k|        D(fprintf(stderr, "%*c> dotted_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
 4246|  43.0k|        expr_ty name_var;
 4247|  43.0k|        if (
 4248|  43.0k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (4248:13): [True: 41.7k, False: 1.22k]
  ------------------
 4249|  43.0k|        )
 4250|  41.7k|        {
 4251|  41.7k|            D(fprintf(stderr, "%*c+ dotted_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
 4252|  41.7k|            _res = name_var;
 4253|  41.7k|            goto done;
 4254|  41.7k|        }
 4255|  1.22k|        p->mark = _mark;
 4256|  1.22k|        D(fprintf(stderr, "%*c%s dotted_name[%d-%d]: %s failed!\n", p->level, ' ',
 4257|  1.22k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
 4258|  1.22k|    }
 4259|  1.22k|    _res = NULL;
 4260|  52.4k|  done:
 4261|  52.4k|    p->level--;
 4262|  52.4k|    return _res;
 4263|  1.22k|}
parser.c:import_name_rule:
 3561|  10.4k|{
 3562|  10.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  20.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3562:9): [True: 0, False: 10.4k]
  |  Branch (3562:35): [True: 0, False: 10.4k]
  ------------------
 3563|      0|        _Pypegen_stack_overflow(p);
 3564|      0|    }
 3565|  10.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (3565:9): [True: 0, False: 10.4k]
  ------------------
 3566|      0|        p->level--;
 3567|      0|        return NULL;
 3568|      0|    }
 3569|  10.4k|    stmt_ty _res = NULL;
 3570|  10.4k|    int _mark = p->mark;
 3571|  10.4k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3571:9): [True: 0, False: 10.4k]
  |  Branch (3571:31): [True: 0, False: 0]
  ------------------
 3572|      0|        p->error_indicator = 1;
 3573|      0|        p->level--;
 3574|      0|        return NULL;
 3575|      0|    }
 3576|  10.4k|    int _start_lineno = p->tokens[_mark]->lineno;
 3577|  10.4k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  10.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.4k]
  |  |  ------------------
  ------------------
 3578|  10.4k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3579|  10.4k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  10.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.4k]
  |  |  ------------------
  ------------------
 3580|  10.4k|    { // "lazy"? 'import' dotted_as_names
 3581|  10.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (3581:13): [True: 0, False: 10.4k]
  ------------------
 3582|      0|            p->level--;
 3583|      0|            return NULL;
 3584|      0|        }
 3585|  10.4k|        D(fprintf(stderr, "%*c> import_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"lazy\"? 'import' dotted_as_names"));
 3586|  10.4k|        Token * _keyword;
 3587|  10.4k|        asdl_alias_seq* a;
 3588|  10.4k|        void *lazy;
 3589|  10.4k|        if (
 3590|  10.4k|            (lazy = _PyPegen_expect_soft_keyword(p, "lazy"), !p->error_indicator)  // "lazy"?
  ------------------
  |  Branch (3590:13): [True: 10.4k, False: 0]
  ------------------
 3591|  10.4k|            &&
 3592|  10.4k|            (_keyword = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (3592:13): [True: 4.83k, False: 5.65k]
  ------------------
 3593|  4.83k|            &&
 3594|  4.83k|            (a = dotted_as_names_rule(p))  // dotted_as_names
  ------------------
  |  Branch (3594:13): [True: 4.80k, False: 24]
  ------------------
 3595|  10.4k|        )
 3596|  4.80k|        {
 3597|  4.80k|            D(fprintf(stderr, "%*c+ import_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"lazy\"? 'import' dotted_as_names"));
 3598|  4.80k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3599|  4.80k|            if (_token == NULL) {
  ------------------
  |  Branch (3599:17): [True: 0, False: 4.80k]
  ------------------
 3600|      0|                p->level--;
 3601|      0|                return NULL;
 3602|      0|            }
 3603|  4.80k|            int _end_lineno = _token->end_lineno;
 3604|  4.80k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.80k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.80k]
  |  |  ------------------
  ------------------
 3605|  4.80k|            int _end_col_offset = _token->end_col_offset;
 3606|  4.80k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.80k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.80k]
  |  |  ------------------
  ------------------
 3607|  4.80k|            _res = _PyAST_Import ( a , lazy ? 1 : 0 , EXTRA );
  ------------------
  |  |  307|  4.80k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (3607:40): [True: 6, False: 4.80k]
  ------------------
 3608|  4.80k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3608:18): [True: 0, False: 4.80k]
  |  Branch (3608:34): [True: 0, False: 4.80k]
  |  Branch (3608:57): [True: 0, False: 0]
  ------------------
 3609|      0|                p->error_indicator = 1;
 3610|      0|                p->level--;
 3611|      0|                return NULL;
 3612|      0|            }
 3613|  4.80k|            goto done;
 3614|  4.80k|        }
 3615|  5.67k|        p->mark = _mark;
 3616|  5.67k|        D(fprintf(stderr, "%*c%s import_name[%d-%d]: %s failed!\n", p->level, ' ',
 3617|  5.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"lazy\"? 'import' dotted_as_names"));
 3618|  5.67k|    }
 3619|  5.67k|    _res = NULL;
 3620|  10.4k|  done:
 3621|  10.4k|    p->level--;
 3622|  10.4k|    return _res;
 3623|  5.67k|}
parser.c:dotted_as_names_rule:
 4036|  4.83k|{
 4037|  4.83k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.66k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4037:9): [True: 0, False: 4.83k]
  |  Branch (4037:35): [True: 0, False: 4.83k]
  ------------------
 4038|      0|        _Pypegen_stack_overflow(p);
 4039|      0|    }
 4040|  4.83k|    if (p->error_indicator) {
  ------------------
  |  Branch (4040:9): [True: 0, False: 4.83k]
  ------------------
 4041|      0|        p->level--;
 4042|      0|        return NULL;
 4043|      0|    }
 4044|  4.83k|    asdl_alias_seq* _res = NULL;
 4045|  4.83k|    int _mark = p->mark;
 4046|  4.83k|    { // ','.dotted_as_name+
 4047|  4.83k|        if (p->error_indicator) {
  ------------------
  |  Branch (4047:13): [True: 0, False: 4.83k]
  ------------------
 4048|      0|            p->level--;
 4049|      0|            return NULL;
 4050|      0|        }
 4051|  4.83k|        D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
 4052|  4.83k|        asdl_alias_seq* a;
 4053|  4.83k|        if (
 4054|  4.83k|            (a = (asdl_alias_seq*)_gather_23_rule(p))  // ','.dotted_as_name+
  ------------------
  |  Branch (4054:13): [True: 4.81k, False: 19]
  ------------------
 4055|  4.83k|        )
 4056|  4.81k|        {
 4057|  4.81k|            D(fprintf(stderr, "%*c+ dotted_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+"));
 4058|  4.81k|            _res = a;
 4059|  4.81k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4059:18): [True: 0, False: 4.81k]
  |  Branch (4059:34): [True: 5, False: 4.80k]
  |  Branch (4059:57): [True: 5, False: 0]
  ------------------
 4060|      5|                p->error_indicator = 1;
 4061|      5|                p->level--;
 4062|      5|                return NULL;
 4063|      5|            }
 4064|  4.80k|            goto done;
 4065|  4.81k|        }
 4066|     19|        p->mark = _mark;
 4067|     19|        D(fprintf(stderr, "%*c%s dotted_as_names[%d-%d]: %s failed!\n", p->level, ' ',
 4068|     19|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.dotted_as_name+"));
 4069|     19|    }
 4070|     19|    _res = NULL;
 4071|  4.82k|  done:
 4072|  4.82k|    p->level--;
 4073|  4.82k|    return _res;
 4074|     19|}
parser.c:_gather_23_rule:
28706|  4.83k|{
28707|  4.83k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.66k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28707:9): [True: 0, False: 4.83k]
  |  Branch (28707:35): [True: 0, False: 4.83k]
  ------------------
28708|      0|        _Pypegen_stack_overflow(p);
28709|      0|    }
28710|  4.83k|    if (p->error_indicator) {
  ------------------
  |  Branch (28710:9): [True: 0, False: 4.83k]
  ------------------
28711|      0|        p->level--;
28712|      0|        return NULL;
28713|      0|    }
28714|  4.83k|    asdl_seq * _res = NULL;
28715|  4.83k|    int _mark = p->mark;
28716|  4.83k|    { // dotted_as_name _loop0_22
28717|  4.83k|        if (p->error_indicator) {
  ------------------
  |  Branch (28717:13): [True: 0, False: 4.83k]
  ------------------
28718|      0|            p->level--;
28719|      0|            return NULL;
28720|      0|        }
28721|  4.83k|        D(fprintf(stderr, "%*c> _gather_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_22"));
28722|  4.83k|        alias_ty elem;
28723|  4.83k|        asdl_seq * seq;
28724|  4.83k|        if (
28725|  4.83k|            (elem = dotted_as_name_rule(p))  // dotted_as_name
  ------------------
  |  Branch (28725:13): [True: 4.81k, False: 19]
  ------------------
28726|  4.81k|            &&
28727|  4.81k|            (seq = _loop0_22_rule(p))  // _loop0_22
  ------------------
  |  Branch (28727:13): [True: 4.81k, False: 0]
  ------------------
28728|  4.83k|        )
28729|  4.81k|        {
28730|  4.81k|            D(fprintf(stderr, "%*c+ _gather_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_22"));
28731|  4.81k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
28732|  4.81k|            goto done;
28733|  4.81k|        }
28734|     19|        p->mark = _mark;
28735|     19|        D(fprintf(stderr, "%*c%s _gather_23[%d-%d]: %s failed!\n", p->level, ' ',
28736|     19|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_22"));
28737|     19|    }
28738|     19|    _res = NULL;
28739|  4.83k|  done:
28740|  4.83k|    p->level--;
28741|  4.83k|    return _res;
28742|     19|}
parser.c:dotted_as_name_rule:
 4079|  16.5k|{
 4080|  16.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  33.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4080:9): [True: 0, False: 16.5k]
  |  Branch (4080:35): [True: 0, False: 16.5k]
  ------------------
 4081|      0|        _Pypegen_stack_overflow(p);
 4082|      0|    }
 4083|  16.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (4083:9): [True: 0, False: 16.5k]
  ------------------
 4084|      0|        p->level--;
 4085|      0|        return NULL;
 4086|      0|    }
 4087|  16.5k|    alias_ty _res = NULL;
 4088|  16.5k|    int _mark = p->mark;
 4089|  16.5k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (4089:9): [True: 13.0k, False: 3.45k]
  |  Branch (4089:31): [True: 4, False: 13.0k]
  ------------------
 4090|      4|        p->error_indicator = 1;
 4091|      4|        p->level--;
 4092|      4|        return NULL;
 4093|      4|    }
 4094|  16.5k|    int _start_lineno = p->tokens[_mark]->lineno;
 4095|  16.5k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.5k]
  |  |  ------------------
  ------------------
 4096|  16.5k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 4097|  16.5k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.5k]
  |  |  ------------------
  ------------------
 4098|  16.5k|    if (p->call_invalid_rules) { // invalid_dotted_as_name
  ------------------
  |  Branch (4098:9): [True: 3.45k, False: 13.0k]
  ------------------
 4099|  3.45k|        if (p->error_indicator) {
  ------------------
  |  Branch (4099:13): [True: 0, False: 3.45k]
  ------------------
 4100|      0|            p->level--;
 4101|      0|            return NULL;
 4102|      0|        }
 4103|  3.45k|        D(fprintf(stderr, "%*c> dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dotted_as_name"));
 4104|  3.45k|        void *invalid_dotted_as_name_var;
 4105|  3.45k|        if (
 4106|  3.45k|            (invalid_dotted_as_name_var = invalid_dotted_as_name_rule(p))  // invalid_dotted_as_name
  ------------------
  |  Branch (4106:13): [True: 0, False: 3.45k]
  ------------------
 4107|  3.45k|        )
 4108|      0|        {
 4109|      0|            D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_dotted_as_name"));
 4110|      0|            _res = invalid_dotted_as_name_var;
 4111|      0|            goto done;
 4112|      0|        }
 4113|  3.45k|        p->mark = _mark;
 4114|  3.45k|        D(fprintf(stderr, "%*c%s dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
 4115|  3.45k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_dotted_as_name"));
 4116|  3.45k|    }
 4117|  16.5k|    { // dotted_name ['as' NAME]
 4118|  16.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (4118:13): [True: 5, False: 16.5k]
  ------------------
 4119|      5|            p->level--;
 4120|      5|            return NULL;
 4121|      5|        }
 4122|  16.5k|        D(fprintf(stderr, "%*c> dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
 4123|  16.5k|        expr_ty a;
 4124|  16.5k|        void *b;
 4125|  16.5k|        if (
 4126|  16.5k|            (a = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (4126:13): [True: 16.4k, False: 35]
  ------------------
 4127|  16.4k|            &&
 4128|  16.4k|            (b = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (4128:13): [True: 16.4k, False: 2]
  ------------------
 4129|  16.5k|        )
 4130|  16.4k|        {
 4131|  16.4k|            D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]"));
 4132|  16.4k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 4133|  16.4k|            if (_token == NULL) {
  ------------------
  |  Branch (4133:17): [True: 0, False: 16.4k]
  ------------------
 4134|      0|                p->level--;
 4135|      0|                return NULL;
 4136|      0|            }
 4137|  16.4k|            int _end_lineno = _token->end_lineno;
 4138|  16.4k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.4k]
  |  |  ------------------
  ------------------
 4139|  16.4k|            int _end_col_offset = _token->end_col_offset;
 4140|  16.4k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  16.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 16.4k]
  |  |  ------------------
  ------------------
 4141|  16.4k|            _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA );
  ------------------
  |  |  307|  16.4k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (4141:56): [True: 328, False: 16.1k]
  ------------------
 4142|  16.4k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4142:18): [True: 0, False: 16.4k]
  |  Branch (4142:34): [True: 0, False: 16.4k]
  |  Branch (4142:57): [True: 0, False: 0]
  ------------------
 4143|      0|                p->error_indicator = 1;
 4144|      0|                p->level--;
 4145|      0|                return NULL;
 4146|      0|            }
 4147|  16.4k|            goto done;
 4148|  16.4k|        }
 4149|     37|        p->mark = _mark;
 4150|     37|        D(fprintf(stderr, "%*c%s dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
 4151|     37|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name ['as' NAME]"));
 4152|     37|    }
 4153|     37|    _res = NULL;
 4154|  16.5k|  done:
 4155|  16.5k|    p->level--;
 4156|  16.5k|    return _res;
 4157|     37|}
parser.c:invalid_dotted_as_name_rule:
23119|  3.45k|{
23120|  3.45k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  6.91k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23120:9): [True: 0, False: 3.45k]
  |  Branch (23120:35): [True: 0, False: 3.45k]
  ------------------
23121|      0|        _Pypegen_stack_overflow(p);
23122|      0|    }
23123|  3.45k|    if (p->error_indicator) {
  ------------------
  |  Branch (23123:9): [True: 0, False: 3.45k]
  ------------------
23124|      0|        p->level--;
23125|      0|        return NULL;
23126|      0|    }
23127|  3.45k|    void * _res = NULL;
23128|  3.45k|    int _mark = p->mark;
23129|  3.45k|    { // dotted_name 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression
23130|  3.45k|        if (p->error_indicator) {
  ------------------
  |  Branch (23130:13): [True: 0, False: 3.45k]
  ------------------
23131|      0|            p->level--;
23132|      0|            return NULL;
23133|      0|        }
23134|  3.45k|        D(fprintf(stderr, "%*c> invalid_dotted_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_name 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression"));
23135|  3.45k|        Token * _keyword;
23136|  3.45k|        expr_ty a;
23137|  3.45k|        expr_ty dotted_name_var;
23138|  3.45k|        if (
23139|  3.45k|            (dotted_name_var = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (23139:13): [True: 3.44k, False: 15]
  ------------------
23140|  3.44k|            &&
23141|  3.44k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (23141:13): [True: 75, False: 3.36k]
  ------------------
23142|     75|            &&
23143|     75|            _PyPegen_lookahead(0, _tmp_137_rule, p)
  ------------------
  |  Branch (23143:13): [True: 7, False: 68]
  ------------------
23144|      7|            &&
23145|      7|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (23145:13): [True: 3, False: 4]
  ------------------
23146|  3.45k|        )
23147|      3|        {
23148|      3|            D(fprintf(stderr, "%*c+ invalid_dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression"));
23149|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use %s as import target" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23150|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23150:18): [True: 3, False: 0]
  |  Branch (23150:34): [True: 0, False: 0]
  |  Branch (23150:57): [True: 3, False: 0]
  ------------------
23151|      3|                p->error_indicator = 1;
23152|      3|                p->level--;
23153|      3|                return NULL;
23154|      3|            }
23155|      0|            goto done;
23156|      3|        }
23157|  3.45k|        p->mark = _mark;
23158|  3.45k|        D(fprintf(stderr, "%*c%s invalid_dotted_as_name[%d-%d]: %s failed!\n", p->level, ' ',
23159|  3.45k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_name 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression"));
23160|  3.45k|    }
23161|  3.45k|    _res = NULL;
23162|  3.45k|  done:
23163|  3.45k|    p->level--;
23164|  3.45k|    return _res;
23165|  3.45k|}
parser.c:_tmp_137_rule:
35802|    646|{
35803|    646|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.29k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35803:9): [True: 0, False: 646]
  |  Branch (35803:35): [True: 0, False: 646]
  ------------------
35804|      0|        _Pypegen_stack_overflow(p);
35805|      0|    }
35806|    646|    if (p->error_indicator) {
  ------------------
  |  Branch (35806:9): [True: 0, False: 646]
  ------------------
35807|      0|        p->level--;
35808|      0|        return NULL;
35809|      0|    }
35810|    646|    void * _res = NULL;
35811|    646|    int _mark = p->mark;
35812|    646|    { // NAME (',' | ')' | ';' | NEWLINE)
35813|    646|        if (p->error_indicator) {
  ------------------
  |  Branch (35813:13): [True: 0, False: 646]
  ------------------
35814|      0|            p->level--;
35815|      0|            return NULL;
35816|      0|        }
35817|    646|        D(fprintf(stderr, "%*c> _tmp_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)"));
35818|    646|        void *_tmp_173_var;
35819|    646|        expr_ty name_var;
35820|    646|        if (
35821|    646|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (35821:13): [True: 643, False: 3]
  ------------------
35822|    643|            &&
35823|    643|            (_tmp_173_var = _tmp_173_rule(p))  // ',' | ')' | ';' | NEWLINE
  ------------------
  |  Branch (35823:13): [True: 634, False: 9]
  ------------------
35824|    646|        )
35825|    634|        {
35826|    634|            D(fprintf(stderr, "%*c+ _tmp_137[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)"));
35827|    634|            _res = _PyPegen_dummy_name(p, name_var, _tmp_173_var);
35828|    634|            goto done;
35829|    634|        }
35830|     12|        p->mark = _mark;
35831|     12|        D(fprintf(stderr, "%*c%s _tmp_137[%d-%d]: %s failed!\n", p->level, ' ',
35832|     12|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME (',' | ')' | ';' | NEWLINE)"));
35833|     12|    }
35834|     12|    _res = NULL;
35835|    646|  done:
35836|    646|    p->level--;
35837|    646|    return _res;
35838|     12|}
parser.c:_tmp_173_rule:
37854|    643|{
37855|    643|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.28k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37855:9): [True: 0, False: 643]
  |  Branch (37855:35): [True: 0, False: 643]
  ------------------
37856|      0|        _Pypegen_stack_overflow(p);
37857|      0|    }
37858|    643|    if (p->error_indicator) {
  ------------------
  |  Branch (37858:9): [True: 0, False: 643]
  ------------------
37859|      0|        p->level--;
37860|      0|        return NULL;
37861|      0|    }
37862|    643|    void * _res = NULL;
37863|    643|    int _mark = p->mark;
37864|    643|    { // ','
37865|    643|        if (p->error_indicator) {
  ------------------
  |  Branch (37865:13): [True: 0, False: 643]
  ------------------
37866|      0|            p->level--;
37867|      0|            return NULL;
37868|      0|        }
37869|    643|        D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
37870|    643|        Token * _literal;
37871|    643|        if (
37872|    643|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (37872:13): [True: 536, False: 107]
  ------------------
37873|    643|        )
37874|    536|        {
37875|    536|            D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
37876|    536|            _res = _literal;
37877|    536|            goto done;
37878|    536|        }
37879|    107|        p->mark = _mark;
37880|    107|        D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ',
37881|    107|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
37882|    107|    }
37883|      0|    { // ')'
37884|    107|        if (p->error_indicator) {
  ------------------
  |  Branch (37884:13): [True: 0, False: 107]
  ------------------
37885|      0|            p->level--;
37886|      0|            return NULL;
37887|      0|        }
37888|    107|        D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
37889|    107|        Token * _literal;
37890|    107|        if (
37891|    107|            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (37891:13): [True: 1, False: 106]
  ------------------
37892|    107|        )
37893|      1|        {
37894|      1|            D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
37895|      1|            _res = _literal;
37896|      1|            goto done;
37897|      1|        }
37898|    106|        p->mark = _mark;
37899|    106|        D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ',
37900|    106|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
37901|    106|    }
37902|      0|    { // ';'
37903|    106|        if (p->error_indicator) {
  ------------------
  |  Branch (37903:13): [True: 0, False: 106]
  ------------------
37904|      0|            p->level--;
37905|      0|            return NULL;
37906|      0|        }
37907|    106|        D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'"));
37908|    106|        Token * _literal;
37909|    106|        if (
37910|    106|            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
  ------------------
  |  Branch (37910:13): [True: 74, False: 32]
  ------------------
37911|    106|        )
37912|     74|        {
37913|     74|            D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'"));
37914|     74|            _res = _literal;
37915|     74|            goto done;
37916|     74|        }
37917|     32|        p->mark = _mark;
37918|     32|        D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ',
37919|     32|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'"));
37920|     32|    }
37921|      0|    { // NEWLINE
37922|     32|        if (p->error_indicator) {
  ------------------
  |  Branch (37922:13): [True: 0, False: 32]
  ------------------
37923|      0|            p->level--;
37924|      0|            return NULL;
37925|      0|        }
37926|     32|        D(fprintf(stderr, "%*c> _tmp_173[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
37927|     32|        Token * newline_var;
37928|     32|        if (
37929|     32|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     32|#define NEWLINE         4
  ------------------
  |  Branch (37929:13): [True: 23, False: 9]
  ------------------
37930|     32|        )
37931|     23|        {
37932|     23|            D(fprintf(stderr, "%*c+ _tmp_173[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
37933|     23|            _res = newline_var;
37934|     23|            goto done;
37935|     23|        }
37936|      9|        p->mark = _mark;
37937|      9|        D(fprintf(stderr, "%*c%s _tmp_173[%d-%d]: %s failed!\n", p->level, ' ',
37938|      9|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
37939|      9|    }
37940|      9|    _res = NULL;
37941|    643|  done:
37942|    643|    p->level--;
37943|    643|    return _res;
37944|      9|}
parser.c:_tmp_21_rule:
28584|  38.6k|{
28585|  38.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  77.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28585:9): [True: 0, False: 38.6k]
  |  Branch (28585:35): [True: 0, False: 38.6k]
  ------------------
28586|      0|        _Pypegen_stack_overflow(p);
28587|      0|    }
28588|  38.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (28588:9): [True: 0, False: 38.6k]
  ------------------
28589|      0|        p->level--;
28590|      0|        return NULL;
28591|      0|    }
28592|  38.6k|    void * _res = NULL;
28593|  38.6k|    int _mark = p->mark;
28594|  38.6k|    { // 'as' NAME
28595|  38.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (28595:13): [True: 0, False: 38.6k]
  ------------------
28596|      0|            p->level--;
28597|      0|            return NULL;
28598|      0|        }
28599|  38.6k|        D(fprintf(stderr, "%*c> _tmp_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
28600|  38.6k|        Token * _keyword;
28601|  38.6k|        expr_ty z;
28602|  38.6k|        if (
28603|  38.6k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (28603:13): [True: 2.02k, False: 36.6k]
  ------------------
28604|  2.02k|            &&
28605|  2.02k|            (z = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (28605:13): [True: 1.98k, False: 35]
  ------------------
28606|  38.6k|        )
28607|  1.98k|        {
28608|  1.98k|            D(fprintf(stderr, "%*c+ _tmp_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME"));
28609|  1.98k|            _res = z;
28610|  1.98k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28610:18): [True: 0, False: 1.98k]
  |  Branch (28610:34): [True: 0, False: 1.98k]
  |  Branch (28610:57): [True: 0, False: 0]
  ------------------
28611|      0|                p->error_indicator = 1;
28612|      0|                p->level--;
28613|      0|                return NULL;
28614|      0|            }
28615|  1.98k|            goto done;
28616|  1.98k|        }
28617|  36.6k|        p->mark = _mark;
28618|  36.6k|        D(fprintf(stderr, "%*c%s _tmp_21[%d-%d]: %s failed!\n", p->level, ' ',
28619|  36.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME"));
28620|  36.6k|    }
28621|  36.6k|    _res = NULL;
28622|  38.6k|  done:
28623|  38.6k|    p->level--;
28624|  38.6k|    return _res;
28625|  36.6k|}
parser.c:_loop0_22_rule:
28630|  4.81k|{
28631|  4.81k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.62k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28631:9): [True: 0, False: 4.81k]
  |  Branch (28631:35): [True: 0, False: 4.81k]
  ------------------
28632|      0|        _Pypegen_stack_overflow(p);
28633|      0|    }
28634|  4.81k|    if (p->error_indicator) {
  ------------------
  |  Branch (28634:9): [True: 0, False: 4.81k]
  ------------------
28635|      0|        p->level--;
28636|      0|        return NULL;
28637|      0|    }
28638|  4.81k|    void *_res = NULL;
28639|  4.81k|    int _mark = p->mark;
28640|  4.81k|    void **_children = PyMem_Malloc(sizeof(void *));
28641|  4.81k|    if (!_children) {
  ------------------
  |  Branch (28641:9): [True: 0, False: 4.81k]
  ------------------
28642|      0|        p->error_indicator = 1;
28643|      0|        PyErr_NoMemory();
28644|      0|        p->level--;
28645|      0|        return NULL;
28646|      0|    }
28647|  4.81k|    Py_ssize_t _children_capacity = 1;
28648|  4.81k|    Py_ssize_t _n = 0;
28649|  4.81k|    { // ',' dotted_as_name
28650|  4.81k|        if (p->error_indicator) {
  ------------------
  |  Branch (28650:13): [True: 0, False: 4.81k]
  ------------------
28651|      0|            p->level--;
28652|      0|            return NULL;
28653|      0|        }
28654|  4.81k|        D(fprintf(stderr, "%*c> _loop0_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name"));
28655|  4.81k|        Token * _literal;
28656|  4.81k|        alias_ty elem;
28657|  4.81k|        while (
28658|  16.4k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (28658:13): [True: 11.6k, False: 4.78k]
  ------------------
28659|  11.6k|            &&
28660|  11.6k|            (elem = dotted_as_name_rule(p))  // dotted_as_name
  ------------------
  |  Branch (28660:13): [True: 11.6k, False: 27]
  ------------------
28661|  4.81k|        )
28662|  11.6k|        {
28663|  11.6k|            _res = elem;
28664|  11.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28664:18): [True: 0, False: 11.6k]
  |  Branch (28664:34): [True: 0, False: 11.6k]
  |  Branch (28664:57): [True: 0, False: 0]
  ------------------
28665|      0|                p->error_indicator = 1;
28666|      0|                PyMem_Free(_children);
28667|      0|                p->level--;
28668|      0|                return NULL;
28669|      0|            }
28670|  11.6k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28670:17): [True: 5.98k, False: 5.67k]
  ------------------
28671|  5.98k|                _children_capacity *= 2;
28672|  5.98k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28673|  5.98k|                if (!_new_children) {
  ------------------
  |  Branch (28673:21): [True: 0, False: 5.98k]
  ------------------
28674|      0|                    PyMem_Free(_children);
28675|      0|                    p->error_indicator = 1;
28676|      0|                    PyErr_NoMemory();
28677|      0|                    p->level--;
28678|      0|                    return NULL;
28679|      0|                }
28680|  5.98k|                _children = _new_children;
28681|  5.98k|            }
28682|  11.6k|            _children[_n++] = _res;
28683|  11.6k|            _mark = p->mark;
28684|  11.6k|        }
28685|  4.81k|        p->mark = _mark;
28686|  4.81k|        D(fprintf(stderr, "%*c%s _loop0_22[%d-%d]: %s failed!\n", p->level, ' ',
28687|  4.81k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name"));
28688|  4.81k|    }
28689|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28690|  4.81k|    if (!_seq) {
  ------------------
  |  Branch (28690:9): [True: 0, False: 4.81k]
  ------------------
28691|      0|        PyMem_Free(_children);
28692|      0|        p->error_indicator = 1;
28693|      0|        PyErr_NoMemory();
28694|      0|        p->level--;
28695|      0|        return NULL;
28696|      0|    }
28697|  16.4k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  11.6k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  16.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28697:28): [True: 11.6k, False: 4.81k]
  ------------------
28698|  4.81k|    PyMem_Free(_children);
28699|  4.81k|    p->level--;
28700|  4.81k|    return _seq;
28701|  4.81k|}
parser.c:import_from_rule:
 3631|  5.66k|{
 3632|  5.66k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3632:9): [True: 0, False: 5.66k]
  |  Branch (3632:35): [True: 0, False: 5.66k]
  ------------------
 3633|      0|        _Pypegen_stack_overflow(p);
 3634|      0|    }
 3635|  5.66k|    if (p->error_indicator) {
  ------------------
  |  Branch (3635:9): [True: 0, False: 5.66k]
  ------------------
 3636|      0|        p->level--;
 3637|      0|        return NULL;
 3638|      0|    }
 3639|  5.66k|    stmt_ty _res = NULL;
 3640|  5.66k|    int _mark = p->mark;
 3641|  5.66k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3641:9): [True: 0, False: 5.66k]
  |  Branch (3641:31): [True: 0, False: 0]
  ------------------
 3642|      0|        p->error_indicator = 1;
 3643|      0|        p->level--;
 3644|      0|        return NULL;
 3645|      0|    }
 3646|  5.66k|    int _start_lineno = p->tokens[_mark]->lineno;
 3647|  5.66k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  5.66k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.66k]
  |  |  ------------------
  ------------------
 3648|  5.66k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3649|  5.66k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  5.66k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.66k]
  |  |  ------------------
  ------------------
 3650|  5.66k|    if (p->call_invalid_rules) { // invalid_import_from
  ------------------
  |  Branch (3650:9): [True: 1.50k, False: 4.16k]
  ------------------
 3651|  1.50k|        if (p->error_indicator) {
  ------------------
  |  Branch (3651:13): [True: 0, False: 1.50k]
  ------------------
 3652|      0|            p->level--;
 3653|      0|            return NULL;
 3654|      0|        }
 3655|  1.50k|        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from"));
 3656|  1.50k|        void *invalid_import_from_var;
 3657|  1.50k|        if (
 3658|  1.50k|            (invalid_import_from_var = invalid_import_from_rule(p))  // invalid_import_from
  ------------------
  |  Branch (3658:13): [True: 0, False: 1.50k]
  ------------------
 3659|  1.50k|        )
 3660|      0|        {
 3661|      0|            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import_from"));
 3662|      0|            _res = invalid_import_from_var;
 3663|      0|            goto done;
 3664|      0|        }
 3665|  1.50k|        p->mark = _mark;
 3666|  1.50k|        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
 3667|  1.50k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import_from"));
 3668|  1.50k|    }
 3669|  5.66k|    { // "lazy"? 'from' (('.' | '...'))* dotted_name 'import' import_from_targets
 3670|  5.66k|        if (p->error_indicator) {
  ------------------
  |  Branch (3670:13): [True: 3, False: 5.66k]
  ------------------
 3671|      3|            p->level--;
 3672|      3|            return NULL;
 3673|      3|        }
 3674|  5.66k|        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"lazy\"? 'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
 3675|  5.66k|        Token * _keyword;
 3676|  5.66k|        Token * _keyword_1;
 3677|  5.66k|        asdl_seq * a;
 3678|  5.66k|        expr_ty b;
 3679|  5.66k|        asdl_alias_seq* c;
 3680|  5.66k|        void *lazy;
 3681|  5.66k|        if (
 3682|  5.66k|            (lazy = _PyPegen_expect_soft_keyword(p, "lazy"), !p->error_indicator)  // "lazy"?
  ------------------
  |  Branch (3682:13): [True: 5.66k, False: 0]
  ------------------
 3683|  5.66k|            &&
 3684|  5.66k|            (_keyword = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (3684:13): [True: 5.59k, False: 66]
  ------------------
 3685|  5.59k|            &&
 3686|  5.59k|            (a = _loop0_17_rule(p))  // (('.' | '...'))*
  ------------------
  |  Branch (3686:13): [True: 5.59k, False: 0]
  ------------------
 3687|  5.59k|            &&
 3688|  5.59k|            (b = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (3688:13): [True: 4.39k, False: 1.20k]
  ------------------
 3689|  4.39k|            &&
 3690|  4.39k|            (_keyword_1 = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (3690:13): [True: 4.33k, False: 68]
  ------------------
 3691|  4.33k|            &&
 3692|  4.33k|            (c = import_from_targets_rule(p))  // import_from_targets
  ------------------
  |  Branch (3692:13): [True: 4.29k, False: 37]
  ------------------
 3693|  5.66k|        )
 3694|  4.29k|        {
 3695|  4.29k|            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"lazy\"? 'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
 3696|  4.29k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3697|  4.29k|            if (_token == NULL) {
  ------------------
  |  Branch (3697:17): [True: 0, False: 4.29k]
  ------------------
 3698|      0|                p->level--;
 3699|      0|                return NULL;
 3700|      0|            }
 3701|  4.29k|            int _end_lineno = _token->end_lineno;
 3702|  4.29k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.29k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.29k]
  |  |  ------------------
  ------------------
 3703|  4.29k|            int _end_col_offset = _token->end_col_offset;
 3704|  4.29k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.29k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.29k]
  |  |  ------------------
  ------------------
 3705|  4.29k|            _res = _PyPegen_checked_from_import ( p , a , b , c , lazy , EXTRA );
  ------------------
  |  |  307|  4.29k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3706|  4.29k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3706:18): [True: 1, False: 4.29k]
  |  Branch (3706:34): [True: 0, False: 4.29k]
  |  Branch (3706:57): [True: 1, False: 0]
  ------------------
 3707|      1|                p->error_indicator = 1;
 3708|      1|                p->level--;
 3709|      1|                return NULL;
 3710|      1|            }
 3711|  4.29k|            goto done;
 3712|  4.29k|        }
 3713|  1.37k|        p->mark = _mark;
 3714|  1.37k|        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
 3715|  1.37k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"lazy\"? 'from' (('.' | '...'))* dotted_name 'import' import_from_targets"));
 3716|  1.37k|    }
 3717|      0|    { // "lazy"? 'from' (('.' | '...'))+ 'import' import_from_targets
 3718|  1.37k|        if (p->error_indicator) {
  ------------------
  |  Branch (3718:13): [True: 24, False: 1.34k]
  ------------------
 3719|     24|            p->level--;
 3720|     24|            return NULL;
 3721|     24|        }
 3722|  1.34k|        D(fprintf(stderr, "%*c> import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"lazy\"? 'from' (('.' | '...'))+ 'import' import_from_targets"));
 3723|  1.34k|        Token * _keyword;
 3724|  1.34k|        Token * _keyword_1;
 3725|  1.34k|        asdl_seq * a;
 3726|  1.34k|        asdl_alias_seq* b;
 3727|  1.34k|        void *lazy;
 3728|  1.34k|        if (
 3729|  1.34k|            (lazy = _PyPegen_expect_soft_keyword(p, "lazy"), !p->error_indicator)  // "lazy"?
  ------------------
  |  Branch (3729:13): [True: 1.34k, False: 0]
  ------------------
 3730|  1.34k|            &&
 3731|  1.34k|            (_keyword = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (3731:13): [True: 1.28k, False: 66]
  ------------------
 3732|  1.28k|            &&
 3733|  1.28k|            (a = _loop1_18_rule(p))  // (('.' | '...'))+
  ------------------
  |  Branch (3733:13): [True: 1.21k, False: 71]
  ------------------
 3734|  1.21k|            &&
 3735|  1.21k|            (_keyword_1 = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (3735:13): [True: 1.15k, False: 51]
  ------------------
 3736|  1.15k|            &&
 3737|  1.15k|            (b = import_from_targets_rule(p))  // import_from_targets
  ------------------
  |  Branch (3737:13): [True: 1.14k, False: 11]
  ------------------
 3738|  1.34k|        )
 3739|  1.14k|        {
 3740|  1.14k|            D(fprintf(stderr, "%*c+ import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"lazy\"? 'from' (('.' | '...'))+ 'import' import_from_targets"));
 3741|  1.14k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3742|  1.14k|            if (_token == NULL) {
  ------------------
  |  Branch (3742:17): [True: 0, False: 1.14k]
  ------------------
 3743|      0|                p->level--;
 3744|      0|                return NULL;
 3745|      0|            }
 3746|  1.14k|            int _end_lineno = _token->end_lineno;
 3747|  1.14k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.14k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.14k]
  |  |  ------------------
  ------------------
 3748|  1.14k|            int _end_col_offset = _token->end_col_offset;
 3749|  1.14k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.14k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.14k]
  |  |  ------------------
  ------------------
 3750|  1.14k|            _res = _PyAST_ImportFrom ( NULL , b , _PyPegen_seq_count_dots ( a ) , lazy ? 1 : 0 , EXTRA );
  ------------------
  |  |  307|  1.14k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (3750:83): [True: 0, False: 1.14k]
  ------------------
 3751|  1.14k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3751:18): [True: 0, False: 1.14k]
  |  Branch (3751:34): [True: 0, False: 1.14k]
  |  Branch (3751:57): [True: 0, False: 0]
  ------------------
 3752|      0|                p->error_indicator = 1;
 3753|      0|                p->level--;
 3754|      0|                return NULL;
 3755|      0|            }
 3756|  1.14k|            goto done;
 3757|  1.14k|        }
 3758|    199|        p->mark = _mark;
 3759|    199|        D(fprintf(stderr, "%*c%s import_from[%d-%d]: %s failed!\n", p->level, ' ',
 3760|    199|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"lazy\"? 'from' (('.' | '...'))+ 'import' import_from_targets"));
 3761|    199|    }
 3762|    199|    _res = NULL;
 3763|  5.63k|  done:
 3764|  5.63k|    p->level--;
 3765|  5.63k|    return _res;
 3766|    199|}
parser.c:invalid_import_from_rule:
23222|  1.50k|{
23223|  1.50k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.00k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23223:9): [True: 0, False: 1.50k]
  |  Branch (23223:35): [True: 0, False: 1.50k]
  ------------------
23224|      0|        _Pypegen_stack_overflow(p);
23225|      0|    }
23226|  1.50k|    if (p->error_indicator) {
  ------------------
  |  Branch (23226:9): [True: 0, False: 1.50k]
  ------------------
23227|      0|        p->level--;
23228|      0|        return NULL;
23229|      0|    }
23230|  1.50k|    void * _res = NULL;
23231|  1.50k|    int _mark = p->mark;
23232|  1.50k|    { // 'from' (('.' | '...'))* dotted_name "lazy" 'import' import_from_targets
23233|  1.50k|        if (p->error_indicator) {
  ------------------
  |  Branch (23233:13): [True: 0, False: 1.50k]
  ------------------
23234|      0|            p->level--;
23235|      0|            return NULL;
23236|      0|        }
23237|  1.50k|        D(fprintf(stderr, "%*c> invalid_import_from[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name \"lazy\" 'import' import_from_targets"));
23238|  1.50k|        Token * _keyword;
23239|  1.50k|        Token * _keyword_1;
23240|  1.50k|        asdl_seq * _loop0_17_var;
23241|  1.50k|        expr_ty a;
23242|  1.50k|        expr_ty dotted_name_var;
23243|  1.50k|        asdl_alias_seq* import_from_targets_var;
23244|  1.50k|        if (
23245|  1.50k|            (_keyword = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (23245:13): [True: 1.47k, False: 27]
  ------------------
23246|  1.47k|            &&
23247|  1.47k|            (_loop0_17_var = _loop0_17_rule(p))  // (('.' | '...'))*
  ------------------
  |  Branch (23247:13): [True: 1.47k, False: 0]
  ------------------
23248|  1.47k|            &&
23249|  1.47k|            (dotted_name_var = dotted_name_rule(p))  // dotted_name
  ------------------
  |  Branch (23249:13): [True: 1.12k, False: 356]
  ------------------
23250|  1.12k|            &&
23251|  1.12k|            (a = _PyPegen_expect_soft_keyword(p, "lazy"))  // soft_keyword='"lazy"'
  ------------------
  |  Branch (23251:13): [True: 3, False: 1.11k]
  ------------------
23252|      3|            &&
23253|      3|            (_keyword_1 = _PyPegen_expect_token(p, 651))  // token='import'
  ------------------
  |  Branch (23253:13): [True: 2, False: 1]
  ------------------
23254|      2|            &&
23255|      2|            (import_from_targets_var = import_from_targets_rule(p))  // import_from_targets
  ------------------
  |  Branch (23255:13): [True: 1, False: 1]
  ------------------
23256|  1.50k|        )
23257|      1|        {
23258|      1|            D(fprintf(stderr, "%*c+ invalid_import_from[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' (('.' | '...'))* dotted_name \"lazy\" 'import' import_from_targets"));
23259|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "use 'lazy from ... ' instead of 'from ... lazy import'" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23260|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23260:18): [True: 1, False: 0]
  |  Branch (23260:34): [True: 0, False: 0]
  |  Branch (23260:57): [True: 1, False: 0]
  ------------------
23261|      1|                p->error_indicator = 1;
23262|      1|                p->level--;
23263|      1|                return NULL;
23264|      1|            }
23265|      0|            goto done;
23266|      1|        }
23267|  1.50k|        p->mark = _mark;
23268|  1.50k|        D(fprintf(stderr, "%*c%s invalid_import_from[%d-%d]: %s failed!\n", p->level, ' ',
23269|  1.50k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' (('.' | '...'))* dotted_name \"lazy\" 'import' import_from_targets"));
23270|  1.50k|    }
23271|  1.50k|    _res = NULL;
23272|  1.50k|  done:
23273|  1.50k|    p->level--;
23274|  1.50k|    return _res;
23275|  1.50k|}
parser.c:_loop0_17_rule:
28328|  7.07k|{
28329|  7.07k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  14.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28329:9): [True: 0, False: 7.07k]
  |  Branch (28329:35): [True: 0, False: 7.07k]
  ------------------
28330|      0|        _Pypegen_stack_overflow(p);
28331|      0|    }
28332|  7.07k|    if (p->error_indicator) {
  ------------------
  |  Branch (28332:9): [True: 0, False: 7.07k]
  ------------------
28333|      0|        p->level--;
28334|      0|        return NULL;
28335|      0|    }
28336|  7.07k|    void *_res = NULL;
28337|  7.07k|    int _mark = p->mark;
28338|  7.07k|    void **_children = PyMem_Malloc(sizeof(void *));
28339|  7.07k|    if (!_children) {
  ------------------
  |  Branch (28339:9): [True: 0, False: 7.07k]
  ------------------
28340|      0|        p->error_indicator = 1;
28341|      0|        PyErr_NoMemory();
28342|      0|        p->level--;
28343|      0|        return NULL;
28344|      0|    }
28345|  7.07k|    Py_ssize_t _children_capacity = 1;
28346|  7.07k|    Py_ssize_t _n = 0;
28347|  7.07k|    { // ('.' | '...')
28348|  7.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (28348:13): [True: 0, False: 7.07k]
  ------------------
28349|      0|            p->level--;
28350|      0|            return NULL;
28351|      0|        }
28352|  7.07k|        D(fprintf(stderr, "%*c> _loop0_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
28353|  7.07k|        void *_tmp_158_var;
28354|  7.07k|        while (
28355|  9.88k|            (_tmp_158_var = _tmp_158_rule(p))  // '.' | '...'
  ------------------
  |  Branch (28355:13): [True: 2.80k, False: 7.07k]
  ------------------
28356|  7.07k|        )
28357|  2.80k|        {
28358|  2.80k|            _res = _tmp_158_var;
28359|  2.80k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28359:17): [True: 806, False: 2.00k]
  ------------------
28360|    806|                _children_capacity *= 2;
28361|    806|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28362|    806|                if (!_new_children) {
  ------------------
  |  Branch (28362:21): [True: 0, False: 806]
  ------------------
28363|      0|                    PyMem_Free(_children);
28364|      0|                    p->error_indicator = 1;
28365|      0|                    PyErr_NoMemory();
28366|      0|                    p->level--;
28367|      0|                    return NULL;
28368|      0|                }
28369|    806|                _children = _new_children;
28370|    806|            }
28371|  2.80k|            _children[_n++] = _res;
28372|  2.80k|            _mark = p->mark;
28373|  2.80k|        }
28374|  7.07k|        p->mark = _mark;
28375|  7.07k|        D(fprintf(stderr, "%*c%s _loop0_17[%d-%d]: %s failed!\n", p->level, ' ',
28376|  7.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')"));
28377|  7.07k|    }
28378|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28379|  7.07k|    if (!_seq) {
  ------------------
  |  Branch (28379:9): [True: 0, False: 7.07k]
  ------------------
28380|      0|        PyMem_Free(_children);
28381|      0|        p->error_indicator = 1;
28382|      0|        PyErr_NoMemory();
28383|      0|        p->level--;
28384|      0|        return NULL;
28385|      0|    }
28386|  9.88k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  2.80k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.88k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28386:28): [True: 2.80k, False: 7.07k]
  ------------------
28387|  7.07k|    PyMem_Free(_children);
28388|  7.07k|    p->level--;
28389|  7.07k|    return _seq;
28390|  7.07k|}
parser.c:_tmp_158_rule:
37096|  12.9k|{
37097|  12.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  25.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37097:9): [True: 0, False: 12.9k]
  |  Branch (37097:35): [True: 0, False: 12.9k]
  ------------------
37098|      0|        _Pypegen_stack_overflow(p);
37099|      0|    }
37100|  12.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (37100:9): [True: 0, False: 12.9k]
  ------------------
37101|      0|        p->level--;
37102|      0|        return NULL;
37103|      0|    }
37104|  12.9k|    void * _res = NULL;
37105|  12.9k|    int _mark = p->mark;
37106|  12.9k|    { // '.'
37107|  12.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (37107:13): [True: 0, False: 12.9k]
  ------------------
37108|      0|            p->level--;
37109|      0|            return NULL;
37110|      0|        }
37111|  12.9k|        D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
37112|  12.9k|        Token * _literal;
37113|  12.9k|        if (
37114|  12.9k|            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
  ------------------
  |  Branch (37114:13): [True: 2.46k, False: 10.4k]
  ------------------
37115|  12.9k|        )
37116|  2.46k|        {
37117|  2.46k|            D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
37118|  2.46k|            _res = _literal;
37119|  2.46k|            goto done;
37120|  2.46k|        }
37121|  10.4k|        p->mark = _mark;
37122|  10.4k|        D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ',
37123|  10.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
37124|  10.4k|    }
37125|      0|    { // '...'
37126|  10.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (37126:13): [True: 6, False: 10.4k]
  ------------------
37127|      6|            p->level--;
37128|      6|            return NULL;
37129|      6|        }
37130|  10.4k|        D(fprintf(stderr, "%*c> _tmp_158[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'"));
37131|  10.4k|        Token * _literal;
37132|  10.4k|        if (
37133|  10.4k|            (_literal = _PyPegen_expect_token(p, 52))  // token='...'
  ------------------
  |  Branch (37133:13): [True: 2.12k, False: 8.35k]
  ------------------
37134|  10.4k|        )
37135|  2.12k|        {
37136|  2.12k|            D(fprintf(stderr, "%*c+ _tmp_158[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'"));
37137|  2.12k|            _res = _literal;
37138|  2.12k|            goto done;
37139|  2.12k|        }
37140|  8.35k|        p->mark = _mark;
37141|  8.35k|        D(fprintf(stderr, "%*c%s _tmp_158[%d-%d]: %s failed!\n", p->level, ' ',
37142|  8.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'"));
37143|  8.35k|    }
37144|  8.35k|    _res = NULL;
37145|  12.9k|  done:
37146|  12.9k|    p->level--;
37147|  12.9k|    return _res;
37148|  8.35k|}
parser.c:import_from_targets_rule:
 3775|  5.49k|{
 3776|  5.49k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3776:9): [True: 0, False: 5.49k]
  |  Branch (3776:35): [True: 0, False: 5.49k]
  ------------------
 3777|      0|        _Pypegen_stack_overflow(p);
 3778|      0|    }
 3779|  5.49k|    if (p->error_indicator) {
  ------------------
  |  Branch (3779:9): [True: 0, False: 5.49k]
  ------------------
 3780|      0|        p->level--;
 3781|      0|        return NULL;
 3782|      0|    }
 3783|  5.49k|    asdl_alias_seq* _res = NULL;
 3784|  5.49k|    int _mark = p->mark;
 3785|  5.49k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3785:9): [True: 4.05k, False: 1.43k]
  |  Branch (3785:31): [True: 2, False: 4.05k]
  ------------------
 3786|      2|        p->error_indicator = 1;
 3787|      2|        p->level--;
 3788|      2|        return NULL;
 3789|      2|    }
 3790|  5.48k|    int _start_lineno = p->tokens[_mark]->lineno;
 3791|  5.48k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  5.48k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.48k]
  |  |  ------------------
  ------------------
 3792|  5.48k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3793|  5.48k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  5.48k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.48k]
  |  |  ------------------
  ------------------
 3794|  5.48k|    { // '(' import_from_as_names ','? ')'
 3795|  5.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (3795:13): [True: 0, False: 5.48k]
  ------------------
 3796|      0|            p->level--;
 3797|      0|            return NULL;
 3798|      0|        }
 3799|  5.48k|        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
 3800|  5.48k|        Token * _literal;
 3801|  5.48k|        Token * _literal_1;
 3802|  5.48k|        void *_opt_var;
 3803|  5.48k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  5.48k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.48k]
  |  |  ------------------
  ------------------
 3804|  5.48k|        asdl_alias_seq* a;
 3805|  5.48k|        if (
 3806|  5.48k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (3806:13): [True: 15, False: 5.47k]
  ------------------
 3807|     15|            &&
 3808|     15|            (a = import_from_as_names_rule(p))  // import_from_as_names
  ------------------
  |  Branch (3808:13): [True: 8, False: 7]
  ------------------
 3809|      8|            &&
 3810|      8|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (3810:13): [True: 8, False: 0]
  ------------------
 3811|      8|            &&
 3812|      8|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (3812:13): [True: 4, False: 4]
  ------------------
 3813|  5.48k|        )
 3814|      4|        {
 3815|      4|            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' import_from_as_names ','? ')'"));
 3816|      4|            _res = a;
 3817|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3817:18): [True: 0, False: 4]
  |  Branch (3817:34): [True: 0, False: 4]
  |  Branch (3817:57): [True: 0, False: 0]
  ------------------
 3818|      0|                p->error_indicator = 1;
 3819|      0|                p->level--;
 3820|      0|                return NULL;
 3821|      0|            }
 3822|      4|            goto done;
 3823|      4|        }
 3824|  5.48k|        p->mark = _mark;
 3825|  5.48k|        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
 3826|  5.48k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' import_from_as_names ','? ')'"));
 3827|  5.48k|    }
 3828|      0|    { // import_from_as_names !','
 3829|  5.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (3829:13): [True: 5, False: 5.48k]
  ------------------
 3830|      5|            p->level--;
 3831|      5|            return NULL;
 3832|      5|        }
 3833|  5.48k|        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
 3834|  5.48k|        asdl_alias_seq* import_from_as_names_var;
 3835|  5.48k|        if (
 3836|  5.48k|            (import_from_as_names_var = import_from_as_names_rule(p))  // import_from_as_names
  ------------------
  |  Branch (3836:13): [True: 5.43k, False: 50]
  ------------------
 3837|  5.43k|            &&
 3838|  5.43k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12)  // token=','
  ------------------
  |  Branch (3838:13): [True: 5.40k, False: 22]
  ------------------
 3839|  5.48k|        )
 3840|  5.40k|        {
 3841|  5.40k|            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_names !','"));
 3842|  5.40k|            _res = import_from_as_names_var;
 3843|  5.40k|            goto done;
 3844|  5.40k|        }
 3845|     72|        p->mark = _mark;
 3846|     72|        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
 3847|     72|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_names !','"));
 3848|     72|    }
 3849|      0|    { // '*'
 3850|     72|        if (p->error_indicator) {
  ------------------
  |  Branch (3850:13): [True: 4, False: 68]
  ------------------
 3851|      4|            p->level--;
 3852|      4|            return NULL;
 3853|      4|        }
 3854|     68|        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
 3855|     68|        Token * _literal;
 3856|     68|        if (
 3857|     68|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (3857:13): [True: 30, False: 38]
  ------------------
 3858|     68|        )
 3859|     30|        {
 3860|     30|            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
 3861|     30|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3862|     30|            if (_token == NULL) {
  ------------------
  |  Branch (3862:17): [True: 0, False: 30]
  ------------------
 3863|      0|                p->level--;
 3864|      0|                return NULL;
 3865|      0|            }
 3866|     30|            int _end_lineno = _token->end_lineno;
 3867|     30|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     30|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30]
  |  |  ------------------
  ------------------
 3868|     30|            int _end_col_offset = _token->end_col_offset;
 3869|     30|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     30|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 30]
  |  |  ------------------
  ------------------
 3870|     30|            _res = ( asdl_alias_seq* ) _PyPegen_singleton_seq ( p , CHECK ( alias_ty , _PyPegen_alias_for_star ( p , EXTRA ) ) );
  ------------------
  |  |  271|     30|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
 3871|     30|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3871:18): [True: 0, False: 30]
  |  Branch (3871:34): [True: 0, False: 30]
  |  Branch (3871:57): [True: 0, False: 0]
  ------------------
 3872|      0|                p->error_indicator = 1;
 3873|      0|                p->level--;
 3874|      0|                return NULL;
 3875|      0|            }
 3876|     30|            goto done;
 3877|     30|        }
 3878|     38|        p->mark = _mark;
 3879|     38|        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
 3880|     38|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
 3881|     38|    }
 3882|     38|    if (p->call_invalid_rules) { // invalid_import_from_targets
  ------------------
  |  Branch (3882:9): [True: 18, False: 20]
  ------------------
 3883|     18|        if (p->error_indicator) {
  ------------------
  |  Branch (3883:13): [True: 0, False: 18]
  ------------------
 3884|      0|            p->level--;
 3885|      0|            return NULL;
 3886|      0|        }
 3887|     18|        D(fprintf(stderr, "%*c> import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
 3888|     18|        void *invalid_import_from_targets_var;
 3889|     18|        if (
 3890|     18|            (invalid_import_from_targets_var = invalid_import_from_targets_rule(p))  // invalid_import_from_targets
  ------------------
  |  Branch (3890:13): [True: 0, False: 18]
  ------------------
 3891|     18|        )
 3892|      0|        {
 3893|      0|            D(fprintf(stderr, "%*c+ import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import_from_targets"));
 3894|      0|            _res = invalid_import_from_targets_var;
 3895|      0|            goto done;
 3896|      0|        }
 3897|     18|        p->mark = _mark;
 3898|     18|        D(fprintf(stderr, "%*c%s import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
 3899|     18|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import_from_targets"));
 3900|     18|    }
 3901|     38|    _res = NULL;
 3902|  5.48k|  done:
 3903|  5.48k|    p->level--;
 3904|  5.48k|    return _res;
 3905|     38|}
parser.c:import_from_as_names_rule:
 3910|  5.51k|{
 3911|  5.51k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3911:9): [True: 0, False: 5.51k]
  |  Branch (3911:35): [True: 0, False: 5.51k]
  ------------------
 3912|      0|        _Pypegen_stack_overflow(p);
 3913|      0|    }
 3914|  5.51k|    if (p->error_indicator) {
  ------------------
  |  Branch (3914:9): [True: 0, False: 5.51k]
  ------------------
 3915|      0|        p->level--;
 3916|      0|        return NULL;
 3917|      0|    }
 3918|  5.51k|    asdl_alias_seq* _res = NULL;
 3919|  5.51k|    int _mark = p->mark;
 3920|  5.51k|    { // ','.import_from_as_name+
 3921|  5.51k|        if (p->error_indicator) {
  ------------------
  |  Branch (3921:13): [True: 0, False: 5.51k]
  ------------------
 3922|      0|            p->level--;
 3923|      0|            return NULL;
 3924|      0|        }
 3925|  5.51k|        D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
 3926|  5.51k|        asdl_alias_seq* a;
 3927|  5.51k|        if (
 3928|  5.51k|            (a = (asdl_alias_seq*)_gather_20_rule(p))  // ','.import_from_as_name+
  ------------------
  |  Branch (3928:13): [True: 5.45k, False: 59]
  ------------------
 3929|  5.51k|        )
 3930|  5.45k|        {
 3931|  5.45k|            D(fprintf(stderr, "%*c+ import_from_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+"));
 3932|  5.45k|            _res = a;
 3933|  5.45k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3933:18): [True: 0, False: 5.45k]
  |  Branch (3933:34): [True: 5, False: 5.44k]
  |  Branch (3933:57): [True: 5, False: 0]
  ------------------
 3934|      5|                p->error_indicator = 1;
 3935|      5|                p->level--;
 3936|      5|                return NULL;
 3937|      5|            }
 3938|  5.44k|            goto done;
 3939|  5.45k|        }
 3940|     59|        p->mark = _mark;
 3941|     59|        D(fprintf(stderr, "%*c%s import_from_as_names[%d-%d]: %s failed!\n", p->level, ' ',
 3942|     59|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.import_from_as_name+"));
 3943|     59|    }
 3944|     59|    _res = NULL;
 3945|  5.50k|  done:
 3946|  5.50k|    p->level--;
 3947|  5.50k|    return _res;
 3948|     59|}
parser.c:_gather_20_rule:
28543|  5.51k|{
28544|  5.51k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28544:9): [True: 0, False: 5.51k]
  |  Branch (28544:35): [True: 0, False: 5.51k]
  ------------------
28545|      0|        _Pypegen_stack_overflow(p);
28546|      0|    }
28547|  5.51k|    if (p->error_indicator) {
  ------------------
  |  Branch (28547:9): [True: 0, False: 5.51k]
  ------------------
28548|      0|        p->level--;
28549|      0|        return NULL;
28550|      0|    }
28551|  5.51k|    asdl_seq * _res = NULL;
28552|  5.51k|    int _mark = p->mark;
28553|  5.51k|    { // import_from_as_name _loop0_19
28554|  5.51k|        if (p->error_indicator) {
  ------------------
  |  Branch (28554:13): [True: 0, False: 5.51k]
  ------------------
28555|      0|            p->level--;
28556|      0|            return NULL;
28557|      0|        }
28558|  5.51k|        D(fprintf(stderr, "%*c> _gather_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_19"));
28559|  5.51k|        alias_ty elem;
28560|  5.51k|        asdl_seq * seq;
28561|  5.51k|        if (
28562|  5.51k|            (elem = import_from_as_name_rule(p))  // import_from_as_name
  ------------------
  |  Branch (28562:13): [True: 5.45k, False: 59]
  ------------------
28563|  5.45k|            &&
28564|  5.45k|            (seq = _loop0_19_rule(p))  // _loop0_19
  ------------------
  |  Branch (28564:13): [True: 5.45k, False: 0]
  ------------------
28565|  5.51k|        )
28566|  5.45k|        {
28567|  5.45k|            D(fprintf(stderr, "%*c+ _gather_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_19"));
28568|  5.45k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
28569|  5.45k|            goto done;
28570|  5.45k|        }
28571|     59|        p->mark = _mark;
28572|     59|        D(fprintf(stderr, "%*c%s _gather_20[%d-%d]: %s failed!\n", p->level, ' ',
28573|     59|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_19"));
28574|     59|    }
28575|     59|    _res = NULL;
28576|  5.51k|  done:
28577|  5.51k|    p->level--;
28578|  5.51k|    return _res;
28579|     59|}
parser.c:import_from_as_name_rule:
 3953|  18.4k|{
 3954|  18.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  36.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3954:9): [True: 0, False: 18.4k]
  |  Branch (3954:35): [True: 0, False: 18.4k]
  ------------------
 3955|      0|        _Pypegen_stack_overflow(p);
 3956|      0|    }
 3957|  18.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (3957:9): [True: 0, False: 18.4k]
  ------------------
 3958|      0|        p->level--;
 3959|      0|        return NULL;
 3960|      0|    }
 3961|  18.4k|    alias_ty _res = NULL;
 3962|  18.4k|    int _mark = p->mark;
 3963|  18.4k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3963:9): [True: 7.76k, False: 10.7k]
  |  Branch (3963:31): [True: 2, False: 7.75k]
  ------------------
 3964|      2|        p->error_indicator = 1;
 3965|      2|        p->level--;
 3966|      2|        return NULL;
 3967|      2|    }
 3968|  18.4k|    int _start_lineno = p->tokens[_mark]->lineno;
 3969|  18.4k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.4k]
  |  |  ------------------
  ------------------
 3970|  18.4k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3971|  18.4k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.4k]
  |  |  ------------------
  ------------------
 3972|  18.4k|    if (p->call_invalid_rules) { // invalid_import_from_as_name
  ------------------
  |  Branch (3972:9): [True: 6.67k, False: 11.8k]
  ------------------
 3973|  6.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (3973:13): [True: 0, False: 6.67k]
  ------------------
 3974|      0|            p->level--;
 3975|      0|            return NULL;
 3976|      0|        }
 3977|  6.67k|        D(fprintf(stderr, "%*c> import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_import_from_as_name"));
 3978|  6.67k|        void *invalid_import_from_as_name_var;
 3979|  6.67k|        if (
 3980|  6.67k|            (invalid_import_from_as_name_var = invalid_import_from_as_name_rule(p))  // invalid_import_from_as_name
  ------------------
  |  Branch (3980:13): [True: 0, False: 6.67k]
  ------------------
 3981|  6.67k|        )
 3982|      0|        {
 3983|      0|            D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_import_from_as_name"));
 3984|      0|            _res = invalid_import_from_as_name_var;
 3985|      0|            goto done;
 3986|      0|        }
 3987|  6.67k|        p->mark = _mark;
 3988|  6.67k|        D(fprintf(stderr, "%*c%s import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
 3989|  6.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_import_from_as_name"));
 3990|  6.67k|    }
 3991|  18.4k|    { // NAME ['as' NAME]
 3992|  18.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (3992:13): [True: 5, False: 18.4k]
  ------------------
 3993|      5|            p->level--;
 3994|      5|            return NULL;
 3995|      5|        }
 3996|  18.4k|        D(fprintf(stderr, "%*c> import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
 3997|  18.4k|        expr_ty a;
 3998|  18.4k|        void *b;
 3999|  18.4k|        if (
 4000|  18.4k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (4000:13): [True: 18.3k, False: 88]
  ------------------
 4001|  18.3k|            &&
 4002|  18.3k|            (b = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (4002:13): [True: 18.3k, False: 1]
  ------------------
 4003|  18.4k|        )
 4004|  18.3k|        {
 4005|  18.3k|            D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]"));
 4006|  18.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 4007|  18.3k|            if (_token == NULL) {
  ------------------
  |  Branch (4007:17): [True: 0, False: 18.3k]
  ------------------
 4008|      0|                p->level--;
 4009|      0|                return NULL;
 4010|      0|            }
 4011|  18.3k|            int _end_lineno = _token->end_lineno;
 4012|  18.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
 4013|  18.3k|            int _end_col_offset = _token->end_col_offset;
 4014|  18.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
 4015|  18.3k|            _res = _PyAST_alias ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Name . id : NULL , EXTRA );
  ------------------
  |  |  307|  18.3k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (4015:56): [True: 1.45k, False: 16.9k]
  ------------------
 4016|  18.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4016:18): [True: 0, False: 18.3k]
  |  Branch (4016:34): [True: 0, False: 18.3k]
  |  Branch (4016:57): [True: 0, False: 0]
  ------------------
 4017|      0|                p->error_indicator = 1;
 4018|      0|                p->level--;
 4019|      0|                return NULL;
 4020|      0|            }
 4021|  18.3k|            goto done;
 4022|  18.3k|        }
 4023|     89|        p->mark = _mark;
 4024|     89|        D(fprintf(stderr, "%*c%s import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
 4025|     89|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME ['as' NAME]"));
 4026|     89|    }
 4027|     89|    _res = NULL;
 4028|  18.4k|  done:
 4029|  18.4k|    p->level--;
 4030|  18.4k|    return _res;
 4031|     89|}
parser.c:invalid_import_from_as_name_rule:
23170|  6.67k|{
23171|  6.67k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  13.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23171:9): [True: 0, False: 6.67k]
  |  Branch (23171:35): [True: 0, False: 6.67k]
  ------------------
23172|      0|        _Pypegen_stack_overflow(p);
23173|      0|    }
23174|  6.67k|    if (p->error_indicator) {
  ------------------
  |  Branch (23174:9): [True: 0, False: 6.67k]
  ------------------
23175|      0|        p->level--;
23176|      0|        return NULL;
23177|      0|    }
23178|  6.67k|    void * _res = NULL;
23179|  6.67k|    int _mark = p->mark;
23180|  6.67k|    { // NAME 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression
23181|  6.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (23181:13): [True: 0, False: 6.67k]
  ------------------
23182|      0|            p->level--;
23183|      0|            return NULL;
23184|      0|        }
23185|  6.67k|        D(fprintf(stderr, "%*c> invalid_import_from_as_name[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression"));
23186|  6.67k|        Token * _keyword;
23187|  6.67k|        expr_ty a;
23188|  6.67k|        expr_ty name_var;
23189|  6.67k|        if (
23190|  6.67k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (23190:13): [True: 6.62k, False: 49]
  ------------------
23191|  6.62k|            &&
23192|  6.62k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (23192:13): [True: 571, False: 6.05k]
  ------------------
23193|    571|            &&
23194|    571|            _PyPegen_lookahead(0, _tmp_137_rule, p)
  ------------------
  |  Branch (23194:13): [True: 5, False: 566]
  ------------------
23195|      5|            &&
23196|      5|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (23196:13): [True: 2, False: 3]
  ------------------
23197|  6.67k|        )
23198|      2|        {
23199|      2|            D(fprintf(stderr, "%*c+ invalid_import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression"));
23200|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use %s as import target" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23201|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23201:18): [True: 2, False: 0]
  |  Branch (23201:34): [True: 0, False: 0]
  |  Branch (23201:57): [True: 2, False: 0]
  ------------------
23202|      2|                p->error_indicator = 1;
23203|      2|                p->level--;
23204|      2|                return NULL;
23205|      2|            }
23206|      0|            goto done;
23207|      2|        }
23208|  6.67k|        p->mark = _mark;
23209|  6.67k|        D(fprintf(stderr, "%*c%s invalid_import_from_as_name[%d-%d]: %s failed!\n", p->level, ' ',
23210|  6.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME 'as' !(NAME (',' | ')' | ';' | NEWLINE)) expression"));
23211|  6.67k|    }
23212|  6.67k|    _res = NULL;
23213|  6.67k|  done:
23214|  6.67k|    p->level--;
23215|  6.67k|    return _res;
23216|  6.67k|}
parser.c:_loop0_19_rule:
28467|  5.45k|{
28468|  5.45k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28468:9): [True: 0, False: 5.45k]
  |  Branch (28468:35): [True: 0, False: 5.45k]
  ------------------
28469|      0|        _Pypegen_stack_overflow(p);
28470|      0|    }
28471|  5.45k|    if (p->error_indicator) {
  ------------------
  |  Branch (28471:9): [True: 0, False: 5.45k]
  ------------------
28472|      0|        p->level--;
28473|      0|        return NULL;
28474|      0|    }
28475|  5.45k|    void *_res = NULL;
28476|  5.45k|    int _mark = p->mark;
28477|  5.45k|    void **_children = PyMem_Malloc(sizeof(void *));
28478|  5.45k|    if (!_children) {
  ------------------
  |  Branch (28478:9): [True: 0, False: 5.45k]
  ------------------
28479|      0|        p->error_indicator = 1;
28480|      0|        PyErr_NoMemory();
28481|      0|        p->level--;
28482|      0|        return NULL;
28483|      0|    }
28484|  5.45k|    Py_ssize_t _children_capacity = 1;
28485|  5.45k|    Py_ssize_t _n = 0;
28486|  5.45k|    { // ',' import_from_as_name
28487|  5.45k|        if (p->error_indicator) {
  ------------------
  |  Branch (28487:13): [True: 0, False: 5.45k]
  ------------------
28488|      0|            p->level--;
28489|      0|            return NULL;
28490|      0|        }
28491|  5.45k|        D(fprintf(stderr, "%*c> _loop0_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name"));
28492|  5.45k|        Token * _literal;
28493|  5.45k|        alias_ty elem;
28494|  5.45k|        while (
28495|  18.3k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (28495:13): [True: 12.9k, False: 5.41k]
  ------------------
28496|  12.9k|            &&
28497|  12.9k|            (elem = import_from_as_name_rule(p))  // import_from_as_name
  ------------------
  |  Branch (28497:13): [True: 12.9k, False: 37]
  ------------------
28498|  5.45k|        )
28499|  12.9k|        {
28500|  12.9k|            _res = elem;
28501|  12.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28501:18): [True: 0, False: 12.9k]
  |  Branch (28501:34): [True: 0, False: 12.9k]
  |  Branch (28501:57): [True: 0, False: 0]
  ------------------
28502|      0|                p->error_indicator = 1;
28503|      0|                PyMem_Free(_children);
28504|      0|                p->level--;
28505|      0|                return NULL;
28506|      0|            }
28507|  12.9k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28507:17): [True: 5.14k, False: 7.78k]
  ------------------
28508|  5.14k|                _children_capacity *= 2;
28509|  5.14k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28510|  5.14k|                if (!_new_children) {
  ------------------
  |  Branch (28510:21): [True: 0, False: 5.14k]
  ------------------
28511|      0|                    PyMem_Free(_children);
28512|      0|                    p->error_indicator = 1;
28513|      0|                    PyErr_NoMemory();
28514|      0|                    p->level--;
28515|      0|                    return NULL;
28516|      0|                }
28517|  5.14k|                _children = _new_children;
28518|  5.14k|            }
28519|  12.9k|            _children[_n++] = _res;
28520|  12.9k|            _mark = p->mark;
28521|  12.9k|        }
28522|  5.45k|        p->mark = _mark;
28523|  5.45k|        D(fprintf(stderr, "%*c%s _loop0_19[%d-%d]: %s failed!\n", p->level, ' ',
28524|  5.45k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name"));
28525|  5.45k|    }
28526|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28527|  5.45k|    if (!_seq) {
  ------------------
  |  Branch (28527:9): [True: 0, False: 5.45k]
  ------------------
28528|      0|        PyMem_Free(_children);
28529|      0|        p->error_indicator = 1;
28530|      0|        PyErr_NoMemory();
28531|      0|        p->level--;
28532|      0|        return NULL;
28533|      0|    }
28534|  18.3k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  12.9k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  18.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28534:28): [True: 12.9k, False: 5.45k]
  ------------------
28535|  5.45k|    PyMem_Free(_children);
28536|  5.45k|    p->level--;
28537|  5.45k|    return _seq;
28538|  5.45k|}
parser.c:invalid_import_from_targets_rule:
23280|     18|{
23281|     18|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|     36|#  define MAXSTACK 6000
  ------------------
  |  Branch (23281:9): [True: 0, False: 18]
  |  Branch (23281:35): [True: 0, False: 18]
  ------------------
23282|      0|        _Pypegen_stack_overflow(p);
23283|      0|    }
23284|     18|    if (p->error_indicator) {
  ------------------
  |  Branch (23284:9): [True: 0, False: 18]
  ------------------
23285|      0|        p->level--;
23286|      0|        return NULL;
23287|      0|    }
23288|     18|    void * _res = NULL;
23289|     18|    int _mark = p->mark;
23290|     18|    { // import_from_as_names ',' NEWLINE
23291|     18|        if (p->error_indicator) {
  ------------------
  |  Branch (23291:13): [True: 0, False: 18]
  ------------------
23292|      0|            p->level--;
23293|      0|            return NULL;
23294|      0|        }
23295|     18|        D(fprintf(stderr, "%*c> invalid_import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_names ',' NEWLINE"));
23296|     18|        Token * _literal;
23297|     18|        asdl_alias_seq* import_from_as_names_var;
23298|     18|        Token * newline_var;
23299|     18|        if (
23300|     18|            (import_from_as_names_var = import_from_as_names_rule(p))  // import_from_as_names
  ------------------
  |  Branch (23300:13): [True: 11, False: 7]
  ------------------
23301|     11|            &&
23302|     11|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (23302:13): [True: 11, False: 0]
  ------------------
23303|     11|            &&
23304|     11|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     11|#define NEWLINE         4
  ------------------
  |  Branch (23304:13): [True: 6, False: 5]
  ------------------
23305|     18|        )
23306|      6|        {
23307|      6|            D(fprintf(stderr, "%*c+ invalid_import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_names ',' NEWLINE"));
23308|      6|            _res = RAISE_SYNTAX_ERROR ( "trailing comma not allowed without surrounding parentheses" );
  ------------------
  |  |  233|      6|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
23309|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23309:18): [True: 6, False: 0]
  |  Branch (23309:34): [True: 0, False: 0]
  |  Branch (23309:57): [True: 6, False: 0]
  ------------------
23310|      6|                p->error_indicator = 1;
23311|      6|                p->level--;
23312|      6|                return NULL;
23313|      6|            }
23314|      0|            goto done;
23315|      6|        }
23316|     12|        p->mark = _mark;
23317|     12|        D(fprintf(stderr, "%*c%s invalid_import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
23318|     12|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_names ',' NEWLINE"));
23319|     12|    }
23320|      0|    { // NEWLINE
23321|     12|        if (p->error_indicator) {
  ------------------
  |  Branch (23321:13): [True: 0, False: 12]
  ------------------
23322|      0|            p->level--;
23323|      0|            return NULL;
23324|      0|        }
23325|     12|        D(fprintf(stderr, "%*c> invalid_import_from_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
23326|     12|        Token * token;
23327|     12|        if (
23328|     12|            (token = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     12|#define NEWLINE         4
  ------------------
  |  Branch (23328:13): [True: 3, False: 9]
  ------------------
23329|     12|        )
23330|      3|        {
23331|      3|            D(fprintf(stderr, "%*c+ invalid_import_from_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
23332|      3|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( token , "Expected one or more names after 'import'" );
  ------------------
  |  |  241|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      3|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      3|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
23333|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23333:18): [True: 3, False: 0]
  |  Branch (23333:34): [True: 0, False: 0]
  |  Branch (23333:57): [True: 3, False: 0]
  ------------------
23334|      3|                p->error_indicator = 1;
23335|      3|                p->level--;
23336|      3|                return NULL;
23337|      3|            }
23338|      0|            goto done;
23339|      3|        }
23340|      9|        p->mark = _mark;
23341|      9|        D(fprintf(stderr, "%*c%s invalid_import_from_targets[%d-%d]: %s failed!\n", p->level, ' ',
23342|      9|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
23343|      9|    }
23344|      9|    _res = NULL;
23345|      9|  done:
23346|      9|    p->level--;
23347|      9|    return _res;
23348|      9|}
parser.c:_loop1_18_rule:
28395|  1.28k|{
28396|  1.28k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.56k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28396:9): [True: 0, False: 1.28k]
  |  Branch (28396:35): [True: 0, False: 1.28k]
  ------------------
28397|      0|        _Pypegen_stack_overflow(p);
28398|      0|    }
28399|  1.28k|    if (p->error_indicator) {
  ------------------
  |  Branch (28399:9): [True: 0, False: 1.28k]
  ------------------
28400|      0|        p->level--;
28401|      0|        return NULL;
28402|      0|    }
28403|  1.28k|    void *_res = NULL;
28404|  1.28k|    int _mark = p->mark;
28405|  1.28k|    void **_children = PyMem_Malloc(sizeof(void *));
28406|  1.28k|    if (!_children) {
  ------------------
  |  Branch (28406:9): [True: 0, False: 1.28k]
  ------------------
28407|      0|        p->error_indicator = 1;
28408|      0|        PyErr_NoMemory();
28409|      0|        p->level--;
28410|      0|        return NULL;
28411|      0|    }
28412|  1.28k|    Py_ssize_t _children_capacity = 1;
28413|  1.28k|    Py_ssize_t _n = 0;
28414|  1.28k|    { // ('.' | '...')
28415|  1.28k|        if (p->error_indicator) {
  ------------------
  |  Branch (28415:13): [True: 0, False: 1.28k]
  ------------------
28416|      0|            p->level--;
28417|      0|            return NULL;
28418|      0|        }
28419|  1.28k|        D(fprintf(stderr, "%*c> _loop1_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')"));
28420|  1.28k|        void *_tmp_158_var;
28421|  1.28k|        while (
28422|  3.07k|            (_tmp_158_var = _tmp_158_rule(p))  // '.' | '...'
  ------------------
  |  Branch (28422:13): [True: 1.79k, False: 1.28k]
  ------------------
28423|  1.28k|        )
28424|  1.79k|        {
28425|  1.79k|            _res = _tmp_158_var;
28426|  1.79k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28426:17): [True: 496, False: 1.29k]
  ------------------
28427|    496|                _children_capacity *= 2;
28428|    496|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28429|    496|                if (!_new_children) {
  ------------------
  |  Branch (28429:21): [True: 0, False: 496]
  ------------------
28430|      0|                    PyMem_Free(_children);
28431|      0|                    p->error_indicator = 1;
28432|      0|                    PyErr_NoMemory();
28433|      0|                    p->level--;
28434|      0|                    return NULL;
28435|      0|                }
28436|    496|                _children = _new_children;
28437|    496|            }
28438|  1.79k|            _children[_n++] = _res;
28439|  1.79k|            _mark = p->mark;
28440|  1.79k|        }
28441|  1.28k|        p->mark = _mark;
28442|  1.28k|        D(fprintf(stderr, "%*c%s _loop1_18[%d-%d]: %s failed!\n", p->level, ' ',
28443|  1.28k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')"));
28444|  1.28k|    }
28445|  1.28k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (28445:9): [True: 71, False: 1.21k]
  |  Branch (28445:20): [True: 0, False: 1.21k]
  ------------------
28446|     71|        PyMem_Free(_children);
28447|     71|        p->level--;
28448|     71|        return NULL;
28449|     71|    }
28450|  1.21k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28451|  1.21k|    if (!_seq) {
  ------------------
  |  Branch (28451:9): [True: 0, False: 1.21k]
  ------------------
28452|      0|        PyMem_Free(_children);
28453|      0|        p->error_indicator = 1;
28454|      0|        PyErr_NoMemory();
28455|      0|        p->level--;
28456|      0|        return NULL;
28457|      0|    }
28458|  3.00k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  1.79k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.00k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28458:28): [True: 1.79k, False: 1.21k]
  ------------------
28459|  1.21k|    PyMem_Free(_children);
28460|  1.21k|    p->level--;
28461|  1.21k|    return _seq;
28462|  1.21k|}
parser.c:return_stmt_rule:
 2711|  1.93k|{
 2712|  1.93k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.87k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2712:9): [True: 0, False: 1.93k]
  |  Branch (2712:35): [True: 0, False: 1.93k]
  ------------------
 2713|      0|        _Pypegen_stack_overflow(p);
 2714|      0|    }
 2715|  1.93k|    if (p->error_indicator) {
  ------------------
  |  Branch (2715:9): [True: 0, False: 1.93k]
  ------------------
 2716|      0|        p->level--;
 2717|      0|        return NULL;
 2718|      0|    }
 2719|  1.93k|    stmt_ty _res = NULL;
 2720|  1.93k|    int _mark = p->mark;
 2721|  1.93k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (2721:9): [True: 0, False: 1.93k]
  |  Branch (2721:31): [True: 0, False: 0]
  ------------------
 2722|      0|        p->error_indicator = 1;
 2723|      0|        p->level--;
 2724|      0|        return NULL;
 2725|      0|    }
 2726|  1.93k|    int _start_lineno = p->tokens[_mark]->lineno;
 2727|  1.93k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.93k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 2728|  1.93k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 2729|  1.93k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.93k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 2730|  1.93k|    { // 'return' star_expressions?
 2731|  1.93k|        if (p->error_indicator) {
  ------------------
  |  Branch (2731:13): [True: 0, False: 1.93k]
  ------------------
 2732|      0|            p->level--;
 2733|      0|            return NULL;
 2734|      0|        }
 2735|  1.93k|        D(fprintf(stderr, "%*c> return_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
 2736|  1.93k|        Token * _keyword;
 2737|  1.93k|        void *a;
 2738|  1.93k|        if (
 2739|  1.93k|            (_keyword = _PyPegen_expect_token(p, 522))  // token='return'
  ------------------
  |  Branch (2739:13): [True: 1.93k, False: 0]
  ------------------
 2740|  1.93k|            &&
 2741|  1.93k|            (a = star_expressions_rule(p), !p->error_indicator)  // star_expressions?
  ------------------
  |  Branch (2741:13): [True: 1.93k, False: 2]
  ------------------
 2742|  1.93k|        )
 2743|  1.93k|        {
 2744|  1.93k|            D(fprintf(stderr, "%*c+ return_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?"));
 2745|  1.93k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2746|  1.93k|            if (_token == NULL) {
  ------------------
  |  Branch (2746:17): [True: 0, False: 1.93k]
  ------------------
 2747|      0|                p->level--;
 2748|      0|                return NULL;
 2749|      0|            }
 2750|  1.93k|            int _end_lineno = _token->end_lineno;
 2751|  1.93k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.93k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 2752|  1.93k|            int _end_col_offset = _token->end_col_offset;
 2753|  1.93k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.93k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 2754|  1.93k|            _res = _PyAST_Return ( a , EXTRA );
  ------------------
  |  |  307|  1.93k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2755|  1.93k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2755:18): [True: 0, False: 1.93k]
  |  Branch (2755:34): [True: 0, False: 1.93k]
  |  Branch (2755:57): [True: 0, False: 0]
  ------------------
 2756|      0|                p->error_indicator = 1;
 2757|      0|                p->level--;
 2758|      0|                return NULL;
 2759|      0|            }
 2760|  1.93k|            goto done;
 2761|  1.93k|        }
 2762|      2|        p->mark = _mark;
 2763|      2|        D(fprintf(stderr, "%*c%s return_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2764|      2|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'return' star_expressions?"));
 2765|      2|    }
 2766|      2|    _res = NULL;
 2767|  1.93k|  done:
 2768|  1.93k|    p->level--;
 2769|  1.93k|    return _res;
 2770|      2|}
parser.c:raise_stmt_rule:
 2779|  2.17k|{
 2780|  2.17k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.35k|#  define MAXSTACK 6000
  ------------------
  |  Branch (2780:9): [True: 0, False: 2.17k]
  |  Branch (2780:35): [True: 0, False: 2.17k]
  ------------------
 2781|      0|        _Pypegen_stack_overflow(p);
 2782|      0|    }
 2783|  2.17k|    if (p->error_indicator) {
  ------------------
  |  Branch (2783:9): [True: 0, False: 2.17k]
  ------------------
 2784|      0|        p->level--;
 2785|      0|        return NULL;
 2786|      0|    }
 2787|  2.17k|    stmt_ty _res = NULL;
 2788|  2.17k|    int _mark = p->mark;
 2789|  2.17k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (2789:9): [True: 0, False: 2.17k]
  |  Branch (2789:31): [True: 0, False: 0]
  ------------------
 2790|      0|        p->error_indicator = 1;
 2791|      0|        p->level--;
 2792|      0|        return NULL;
 2793|      0|    }
 2794|  2.17k|    int _start_lineno = p->tokens[_mark]->lineno;
 2795|  2.17k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.17k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.17k]
  |  |  ------------------
  ------------------
 2796|  2.17k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 2797|  2.17k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.17k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.17k]
  |  |  ------------------
  ------------------
 2798|  2.17k|    { // 'raise' expression 'from' expression
 2799|  2.17k|        if (p->error_indicator) {
  ------------------
  |  Branch (2799:13): [True: 0, False: 2.17k]
  ------------------
 2800|      0|            p->level--;
 2801|      0|            return NULL;
 2802|      0|        }
 2803|  2.17k|        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from' expression"));
 2804|  2.17k|        Token * _keyword;
 2805|  2.17k|        Token * _keyword_1;
 2806|  2.17k|        expr_ty a;
 2807|  2.17k|        expr_ty b;
 2808|  2.17k|        if (
 2809|  2.17k|            (_keyword = _PyPegen_expect_token(p, 632))  // token='raise'
  ------------------
  |  Branch (2809:13): [True: 2.17k, False: 0]
  ------------------
 2810|  2.17k|            &&
 2811|  2.17k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (2811:13): [True: 1.20k, False: 976]
  ------------------
 2812|  1.20k|            &&
 2813|  1.20k|            (_keyword_1 = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (2813:13): [True: 295, False: 908]
  ------------------
 2814|    295|            &&
 2815|    295|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (2815:13): [True: 290, False: 5]
  ------------------
 2816|  2.17k|        )
 2817|    290|        {
 2818|    290|            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from' expression"));
 2819|    290|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2820|    290|            if (_token == NULL) {
  ------------------
  |  Branch (2820:17): [True: 0, False: 290]
  ------------------
 2821|      0|                p->level--;
 2822|      0|                return NULL;
 2823|      0|            }
 2824|    290|            int _end_lineno = _token->end_lineno;
 2825|    290|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    290|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 290]
  |  |  ------------------
  ------------------
 2826|    290|            int _end_col_offset = _token->end_col_offset;
 2827|    290|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    290|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 290]
  |  |  ------------------
  ------------------
 2828|    290|            _res = _PyAST_Raise ( a , b , EXTRA );
  ------------------
  |  |  307|    290|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2829|    290|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2829:18): [True: 0, False: 290]
  |  Branch (2829:34): [True: 0, False: 290]
  |  Branch (2829:57): [True: 0, False: 0]
  ------------------
 2830|      0|                p->error_indicator = 1;
 2831|      0|                p->level--;
 2832|      0|                return NULL;
 2833|      0|            }
 2834|    290|            goto done;
 2835|    290|        }
 2836|  1.88k|        p->mark = _mark;
 2837|  1.88k|        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2838|  1.88k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression 'from' expression"));
 2839|  1.88k|    }
 2840|  1.88k|    if (p->call_invalid_rules) { // invalid_raise_stmt
  ------------------
  |  Branch (2840:9): [True: 538, False: 1.35k]
  ------------------
 2841|    538|        if (p->error_indicator) {
  ------------------
  |  Branch (2841:13): [True: 4, False: 534]
  ------------------
 2842|      4|            p->level--;
 2843|      4|            return NULL;
 2844|      4|        }
 2845|    534|        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_raise_stmt"));
 2846|    534|        void *invalid_raise_stmt_var;
 2847|    534|        if (
 2848|    534|            (invalid_raise_stmt_var = invalid_raise_stmt_rule(p))  // invalid_raise_stmt
  ------------------
  |  Branch (2848:13): [True: 0, False: 534]
  ------------------
 2849|    534|        )
 2850|      0|        {
 2851|      0|            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_raise_stmt"));
 2852|      0|            _res = invalid_raise_stmt_var;
 2853|      0|            goto done;
 2854|      0|        }
 2855|    534|        p->mark = _mark;
 2856|    534|        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2857|    534|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_raise_stmt"));
 2858|    534|    }
 2859|  1.88k|    { // 'raise' expression
 2860|  1.88k|        if (p->error_indicator) {
  ------------------
  |  Branch (2860:13): [True: 7, False: 1.87k]
  ------------------
 2861|      7|            p->level--;
 2862|      7|            return NULL;
 2863|      7|        }
 2864|  1.87k|        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression"));
 2865|  1.87k|        Token * _keyword;
 2866|  1.87k|        expr_ty a;
 2867|  1.87k|        if (
 2868|  1.87k|            (_keyword = _PyPegen_expect_token(p, 632))  // token='raise'
  ------------------
  |  Branch (2868:13): [True: 1.87k, False: 0]
  ------------------
 2869|  1.87k|            &&
 2870|  1.87k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (2870:13): [True: 910, False: 968]
  ------------------
 2871|  1.87k|        )
 2872|    910|        {
 2873|    910|            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression"));
 2874|    910|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2875|    910|            if (_token == NULL) {
  ------------------
  |  Branch (2875:17): [True: 0, False: 910]
  ------------------
 2876|      0|                p->level--;
 2877|      0|                return NULL;
 2878|      0|            }
 2879|    910|            int _end_lineno = _token->end_lineno;
 2880|    910|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    910|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 910]
  |  |  ------------------
  ------------------
 2881|    910|            int _end_col_offset = _token->end_col_offset;
 2882|    910|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    910|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 910]
  |  |  ------------------
  ------------------
 2883|    910|            _res = _PyAST_Raise ( a , NULL , EXTRA );
  ------------------
  |  |  307|    910|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2884|    910|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2884:18): [True: 0, False: 910]
  |  Branch (2884:34): [True: 0, False: 910]
  |  Branch (2884:57): [True: 0, False: 0]
  ------------------
 2885|      0|                p->error_indicator = 1;
 2886|      0|                p->level--;
 2887|      0|                return NULL;
 2888|      0|            }
 2889|    910|            goto done;
 2890|    910|        }
 2891|    968|        p->mark = _mark;
 2892|    968|        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2893|    968|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression"));
 2894|    968|    }
 2895|      0|    { // 'raise'
 2896|    968|        if (p->error_indicator) {
  ------------------
  |  Branch (2896:13): [True: 0, False: 968]
  ------------------
 2897|      0|            p->level--;
 2898|      0|            return NULL;
 2899|      0|        }
 2900|    968|        D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'"));
 2901|    968|        Token * _keyword;
 2902|    968|        if (
 2903|    968|            (_keyword = _PyPegen_expect_token(p, 632))  // token='raise'
  ------------------
  |  Branch (2903:13): [True: 968, False: 0]
  ------------------
 2904|    968|        )
 2905|    968|        {
 2906|    968|            D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'"));
 2907|    968|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 2908|    968|            if (_token == NULL) {
  ------------------
  |  Branch (2908:17): [True: 0, False: 968]
  ------------------
 2909|      0|                p->level--;
 2910|      0|                return NULL;
 2911|      0|            }
 2912|    968|            int _end_lineno = _token->end_lineno;
 2913|    968|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    968|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 968]
  |  |  ------------------
  ------------------
 2914|    968|            int _end_col_offset = _token->end_col_offset;
 2915|    968|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    968|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 968]
  |  |  ------------------
  ------------------
 2916|    968|            _res = _PyAST_Raise ( NULL , NULL , EXTRA );
  ------------------
  |  |  307|    968|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 2917|    968|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (2917:18): [True: 0, False: 968]
  |  Branch (2917:34): [True: 0, False: 968]
  |  Branch (2917:57): [True: 0, False: 0]
  ------------------
 2918|      0|                p->error_indicator = 1;
 2919|      0|                p->level--;
 2920|      0|                return NULL;
 2921|      0|            }
 2922|    968|            goto done;
 2923|    968|        }
 2924|      0|        p->mark = _mark;
 2925|      0|        D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 2926|      0|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise'"));
 2927|      0|    }
 2928|      0|    _res = NULL;
 2929|  2.16k|  done:
 2930|  2.16k|    p->level--;
 2931|  2.16k|    return _res;
 2932|      0|}
parser.c:invalid_raise_stmt_rule:
21147|    534|{
21148|    534|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.06k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21148:9): [True: 0, False: 534]
  |  Branch (21148:35): [True: 0, False: 534]
  ------------------
21149|      0|        _Pypegen_stack_overflow(p);
21150|      0|    }
21151|    534|    if (p->error_indicator) {
  ------------------
  |  Branch (21151:9): [True: 0, False: 534]
  ------------------
21152|      0|        p->level--;
21153|      0|        return NULL;
21154|      0|    }
21155|    534|    void * _res = NULL;
21156|    534|    int _mark = p->mark;
21157|    534|    { // 'raise' 'from'
21158|    534|        if (p->error_indicator) {
  ------------------
  |  Branch (21158:13): [True: 0, False: 534]
  ------------------
21159|      0|            p->level--;
21160|      0|            return NULL;
21161|      0|        }
21162|    534|        D(fprintf(stderr, "%*c> invalid_raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' 'from'"));
21163|    534|        Token * a;
21164|    534|        Token * b;
21165|    534|        if (
21166|    534|            (a = _PyPegen_expect_token(p, 632))  // token='raise'
  ------------------
  |  Branch (21166:13): [True: 534, False: 0]
  ------------------
21167|    534|            &&
21168|    534|            (b = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (21168:13): [True: 2, False: 532]
  ------------------
21169|    534|        )
21170|      2|        {
21171|      2|            D(fprintf(stderr, "%*c+ invalid_raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' 'from'"));
21172|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "did you forget an expression between 'raise' and 'from'?" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21173|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21173:18): [True: 2, False: 0]
  |  Branch (21173:34): [True: 0, False: 0]
  |  Branch (21173:57): [True: 2, False: 0]
  ------------------
21174|      2|                p->error_indicator = 1;
21175|      2|                p->level--;
21176|      2|                return NULL;
21177|      2|            }
21178|      0|            goto done;
21179|      2|        }
21180|    532|        p->mark = _mark;
21181|    532|        D(fprintf(stderr, "%*c%s invalid_raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21182|    532|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' 'from'"));
21183|    532|    }
21184|      0|    { // 'raise' expression 'from'
21185|    532|        if (p->error_indicator) {
  ------------------
  |  Branch (21185:13): [True: 0, False: 532]
  ------------------
21186|      0|            p->level--;
21187|      0|            return NULL;
21188|      0|        }
21189|    532|        D(fprintf(stderr, "%*c> invalid_raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from'"));
21190|    532|        Token * _keyword;
21191|    532|        Token * a;
21192|    532|        expr_ty expression_var;
21193|    532|        if (
21194|    532|            (_keyword = _PyPegen_expect_token(p, 632))  // token='raise'
  ------------------
  |  Branch (21194:13): [True: 532, False: 0]
  ------------------
21195|    532|            &&
21196|    532|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (21196:13): [True: 289, False: 243]
  ------------------
21197|    289|            &&
21198|    289|            (a = _PyPegen_expect_token(p, 650))  // token='from'
  ------------------
  |  Branch (21198:13): [True: 2, False: 287]
  ------------------
21199|    532|        )
21200|      2|        {
21201|      2|            D(fprintf(stderr, "%*c+ invalid_raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression 'from'"));
21202|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "did you forget an expression after 'from'?" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21203|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21203:18): [True: 2, False: 0]
  |  Branch (21203:34): [True: 0, False: 0]
  |  Branch (21203:57): [True: 2, False: 0]
  ------------------
21204|      2|                p->error_indicator = 1;
21205|      2|                p->level--;
21206|      2|                return NULL;
21207|      2|            }
21208|      0|            goto done;
21209|      2|        }
21210|    530|        p->mark = _mark;
21211|    530|        D(fprintf(stderr, "%*c%s invalid_raise_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21212|    530|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression 'from'"));
21213|    530|    }
21214|    530|    _res = NULL;
21215|    530|  done:
21216|    530|    p->level--;
21217|    530|    return _res;
21218|    530|}
parser.c:del_stmt_rule:
 3248|  1.96k|{
 3249|  1.96k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.93k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3249:9): [True: 0, False: 1.96k]
  |  Branch (3249:35): [True: 0, False: 1.96k]
  ------------------
 3250|      0|        _Pypegen_stack_overflow(p);
 3251|      0|    }
 3252|  1.96k|    if (p->error_indicator) {
  ------------------
  |  Branch (3252:9): [True: 0, False: 1.96k]
  ------------------
 3253|      0|        p->level--;
 3254|      0|        return NULL;
 3255|      0|    }
 3256|  1.96k|    stmt_ty _res = NULL;
 3257|  1.96k|    int _mark = p->mark;
 3258|  1.96k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3258:9): [True: 0, False: 1.96k]
  |  Branch (3258:31): [True: 0, False: 0]
  ------------------
 3259|      0|        p->error_indicator = 1;
 3260|      0|        p->level--;
 3261|      0|        return NULL;
 3262|      0|    }
 3263|  1.96k|    int _start_lineno = p->tokens[_mark]->lineno;
 3264|  1.96k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.96k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.96k]
  |  |  ------------------
  ------------------
 3265|  1.96k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3266|  1.96k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.96k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.96k]
  |  |  ------------------
  ------------------
 3267|  1.96k|    { // 'del' del_targets &(';' | NEWLINE)
 3268|  1.96k|        if (p->error_indicator) {
  ------------------
  |  Branch (3268:13): [True: 0, False: 1.96k]
  ------------------
 3269|      0|            p->level--;
 3270|      0|            return NULL;
 3271|      0|        }
 3272|  1.96k|        D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
 3273|  1.96k|        Token * _keyword;
 3274|  1.96k|        asdl_expr_seq* a;
 3275|  1.96k|        if (
 3276|  1.96k|            (_keyword = _PyPegen_expect_token(p, 634))  // token='del'
  ------------------
  |  Branch (3276:13): [True: 1.96k, False: 0]
  ------------------
 3277|  1.96k|            &&
 3278|  1.96k|            (a = del_targets_rule(p))  // del_targets
  ------------------
  |  Branch (3278:13): [True: 1.83k, False: 130]
  ------------------
 3279|  1.83k|            &&
 3280|  1.83k|            _PyPegen_lookahead(1, _tmp_15_rule, p)
  ------------------
  |  Branch (3280:13): [True: 1.74k, False: 91]
  ------------------
 3281|  1.96k|        )
 3282|  1.74k|        {
 3283|  1.74k|            D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
 3284|  1.74k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3285|  1.74k|            if (_token == NULL) {
  ------------------
  |  Branch (3285:17): [True: 0, False: 1.74k]
  ------------------
 3286|      0|                p->level--;
 3287|      0|                return NULL;
 3288|      0|            }
 3289|  1.74k|            int _end_lineno = _token->end_lineno;
 3290|  1.74k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.74k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.74k]
  |  |  ------------------
  ------------------
 3291|  1.74k|            int _end_col_offset = _token->end_col_offset;
 3292|  1.74k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.74k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.74k]
  |  |  ------------------
  ------------------
 3293|  1.74k|            _res = _PyAST_Delete ( a , EXTRA );
  ------------------
  |  |  307|  1.74k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3294|  1.74k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3294:18): [True: 0, False: 1.74k]
  |  Branch (3294:34): [True: 0, False: 1.74k]
  |  Branch (3294:57): [True: 0, False: 0]
  ------------------
 3295|      0|                p->error_indicator = 1;
 3296|      0|                p->level--;
 3297|      0|                return NULL;
 3298|      0|            }
 3299|  1.74k|            goto done;
 3300|  1.74k|        }
 3301|    221|        p->mark = _mark;
 3302|    221|        D(fprintf(stderr, "%*c%s del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3303|    221|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'del' del_targets &(';' | NEWLINE)"));
 3304|    221|    }
 3305|    221|    if (p->call_invalid_rules) { // invalid_del_stmt
  ------------------
  |  Branch (3305:9): [True: 106, False: 115]
  ------------------
 3306|    106|        if (p->error_indicator) {
  ------------------
  |  Branch (3306:13): [True: 16, False: 90]
  ------------------
 3307|     16|            p->level--;
 3308|     16|            return NULL;
 3309|     16|        }
 3310|     90|        D(fprintf(stderr, "%*c> del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
 3311|     90|        void *invalid_del_stmt_var;
 3312|     90|        if (
 3313|     90|            (invalid_del_stmt_var = invalid_del_stmt_rule(p))  // invalid_del_stmt
  ------------------
  |  Branch (3313:13): [True: 0, False: 90]
  ------------------
 3314|     90|        )
 3315|      0|        {
 3316|      0|            D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_del_stmt"));
 3317|      0|            _res = invalid_del_stmt_var;
 3318|      0|            goto done;
 3319|      0|        }
 3320|     90|        p->mark = _mark;
 3321|     90|        D(fprintf(stderr, "%*c%s del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3322|     90|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_del_stmt"));
 3323|     90|    }
 3324|    205|    _res = NULL;
 3325|  1.95k|  done:
 3326|  1.95k|    p->level--;
 3327|  1.95k|    return _res;
 3328|    205|}
parser.c:del_targets_rule:
19237|  1.96k|{
19238|  1.96k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.93k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19238:9): [True: 0, False: 1.96k]
  |  Branch (19238:35): [True: 0, False: 1.96k]
  ------------------
19239|      0|        _Pypegen_stack_overflow(p);
19240|      0|    }
19241|  1.96k|    if (p->error_indicator) {
  ------------------
  |  Branch (19241:9): [True: 0, False: 1.96k]
  ------------------
19242|      0|        p->level--;
19243|      0|        return NULL;
19244|      0|    }
19245|  1.96k|    asdl_expr_seq* _res = NULL;
19246|  1.96k|    int _mark = p->mark;
19247|  1.96k|    { // ','.del_target+ ','?
19248|  1.96k|        if (p->error_indicator) {
  ------------------
  |  Branch (19248:13): [True: 0, False: 1.96k]
  ------------------
19249|      0|            p->level--;
19250|      0|            return NULL;
19251|      0|        }
19252|  1.96k|        D(fprintf(stderr, "%*c> del_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
19253|  1.96k|        void *_opt_var;
19254|  1.96k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  1.96k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.96k]
  |  |  ------------------
  ------------------
19255|  1.96k|        asdl_expr_seq* a;
19256|  1.96k|        if (
19257|  1.96k|            (a = (asdl_expr_seq*)_gather_102_rule(p))  // ','.del_target+
  ------------------
  |  Branch (19257:13): [True: 1.84k, False: 124]
  ------------------
19258|  1.84k|            &&
19259|  1.84k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (19259:13): [True: 1.83k, False: 6]
  ------------------
19260|  1.96k|        )
19261|  1.83k|        {
19262|  1.83k|            D(fprintf(stderr, "%*c+ del_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.del_target+ ','?"));
19263|  1.83k|            _res = a;
19264|  1.83k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19264:18): [True: 0, False: 1.83k]
  |  Branch (19264:34): [True: 0, False: 1.83k]
  |  Branch (19264:57): [True: 0, False: 0]
  ------------------
19265|      0|                p->error_indicator = 1;
19266|      0|                p->level--;
19267|      0|                return NULL;
19268|      0|            }
19269|  1.83k|            goto done;
19270|  1.83k|        }
19271|    130|        p->mark = _mark;
19272|    130|        D(fprintf(stderr, "%*c%s del_targets[%d-%d]: %s failed!\n", p->level, ' ',
19273|    130|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.del_target+ ','?"));
19274|    130|    }
19275|    130|    _res = NULL;
19276|  1.96k|  done:
19277|  1.96k|    p->level--;
19278|  1.96k|    return _res;
19279|    130|}
parser.c:_gather_102_rule:
33708|  1.96k|{
33709|  1.96k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.93k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33709:9): [True: 0, False: 1.96k]
  |  Branch (33709:35): [True: 0, False: 1.96k]
  ------------------
33710|      0|        _Pypegen_stack_overflow(p);
33711|      0|    }
33712|  1.96k|    if (p->error_indicator) {
  ------------------
  |  Branch (33712:9): [True: 0, False: 1.96k]
  ------------------
33713|      0|        p->level--;
33714|      0|        return NULL;
33715|      0|    }
33716|  1.96k|    asdl_seq * _res = NULL;
33717|  1.96k|    int _mark = p->mark;
33718|  1.96k|    { // del_target _loop0_101
33719|  1.96k|        if (p->error_indicator) {
  ------------------
  |  Branch (33719:13): [True: 0, False: 1.96k]
  ------------------
33720|      0|            p->level--;
33721|      0|            return NULL;
33722|      0|        }
33723|  1.96k|        D(fprintf(stderr, "%*c> _gather_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_101"));
33724|  1.96k|        expr_ty elem;
33725|  1.96k|        asdl_seq * seq;
33726|  1.96k|        if (
33727|  1.96k|            (elem = del_target_rule(p))  // del_target
  ------------------
  |  Branch (33727:13): [True: 1.84k, False: 124]
  ------------------
33728|  1.84k|            &&
33729|  1.84k|            (seq = _loop0_101_rule(p))  // _loop0_101
  ------------------
  |  Branch (33729:13): [True: 1.84k, False: 0]
  ------------------
33730|  1.96k|        )
33731|  1.84k|        {
33732|  1.84k|            D(fprintf(stderr, "%*c+ _gather_102[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_101"));
33733|  1.84k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
33734|  1.84k|            goto done;
33735|  1.84k|        }
33736|    124|        p->mark = _mark;
33737|    124|        D(fprintf(stderr, "%*c%s _gather_102[%d-%d]: %s failed!\n", p->level, ' ',
33738|    124|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_101"));
33739|    124|    }
33740|    124|    _res = NULL;
33741|  1.96k|  done:
33742|  1.96k|    p->level--;
33743|  1.96k|    return _res;
33744|    124|}
parser.c:del_target_rule:
19284|  8.29k|{
19285|  8.29k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  16.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19285:9): [True: 0, False: 8.29k]
  |  Branch (19285:35): [True: 0, False: 8.29k]
  ------------------
19286|      0|        _Pypegen_stack_overflow(p);
19287|      0|    }
19288|  8.29k|    if (p->error_indicator) {
  ------------------
  |  Branch (19288:9): [True: 0, False: 8.29k]
  ------------------
19289|      0|        p->level--;
19290|      0|        return NULL;
19291|      0|    }
19292|  8.29k|    expr_ty _res = NULL;
19293|  8.29k|    if (_PyPegen_is_memoized(p, del_target_type, &_res)) {
  ------------------
  |  |  279|  8.29k|#define del_target_type 1190
  ------------------
  |  Branch (19293:9): [True: 3, False: 8.29k]
  ------------------
19294|      3|        p->level--;
19295|      3|        return _res;
19296|      3|    }
19297|  8.29k|    int _mark = p->mark;
19298|  8.29k|    { // target_value
19299|  8.29k|        if (p->error_indicator) {
  ------------------
  |  Branch (19299:13): [True: 0, False: 8.29k]
  ------------------
19300|      0|            p->level--;
19301|      0|            return NULL;
19302|      0|        }
19303|  8.29k|        D(fprintf(stderr, "%*c> del_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_value"));
19304|  8.29k|        expr_ty a;
19305|  8.29k|        if (
19306|  8.29k|            (a = target_value_rule(p))  // target_value
  ------------------
  |  Branch (19306:13): [True: 8.12k, False: 168]
  ------------------
19307|  8.29k|        )
19308|  8.12k|        {
19309|  8.12k|            D(fprintf(stderr, "%*c+ del_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_value"));
19310|  8.12k|            _res = _PyPegen_make_target ( p , a , DEL_TARGETS );
19311|  8.12k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19311:18): [True: 34, False: 8.08k]
  |  Branch (19311:34): [True: 0, False: 8.08k]
  |  Branch (19311:57): [True: 0, False: 34]
  ------------------
19312|      0|                p->error_indicator = 1;
19313|      0|                p->level--;
19314|      0|                return NULL;
19315|      0|            }
19316|  8.12k|            goto done;
19317|  8.12k|        }
19318|    168|        p->mark = _mark;
19319|    168|        D(fprintf(stderr, "%*c%s del_target[%d-%d]: %s failed!\n", p->level, ' ',
19320|    168|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_value"));
19321|    168|    }
19322|    168|    _res = NULL;
19323|  8.29k|  done:
19324|  8.29k|    _PyPegen_insert_memo(p, _mark, del_target_type, _res);
  ------------------
  |  |  279|  8.29k|#define del_target_type 1190
  ------------------
19325|  8.29k|    p->level--;
19326|  8.29k|    return _res;
19327|    168|}
parser.c:_loop0_101_rule:
33632|  1.84k|{
33633|  1.84k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.68k|#  define MAXSTACK 6000
  ------------------
  |  Branch (33633:9): [True: 0, False: 1.84k]
  |  Branch (33633:35): [True: 0, False: 1.84k]
  ------------------
33634|      0|        _Pypegen_stack_overflow(p);
33635|      0|    }
33636|  1.84k|    if (p->error_indicator) {
  ------------------
  |  Branch (33636:9): [True: 0, False: 1.84k]
  ------------------
33637|      0|        p->level--;
33638|      0|        return NULL;
33639|      0|    }
33640|  1.84k|    void *_res = NULL;
33641|  1.84k|    int _mark = p->mark;
33642|  1.84k|    void **_children = PyMem_Malloc(sizeof(void *));
33643|  1.84k|    if (!_children) {
  ------------------
  |  Branch (33643:9): [True: 0, False: 1.84k]
  ------------------
33644|      0|        p->error_indicator = 1;
33645|      0|        PyErr_NoMemory();
33646|      0|        p->level--;
33647|      0|        return NULL;
33648|      0|    }
33649|  1.84k|    Py_ssize_t _children_capacity = 1;
33650|  1.84k|    Py_ssize_t _n = 0;
33651|  1.84k|    { // ',' del_target
33652|  1.84k|        if (p->error_indicator) {
  ------------------
  |  Branch (33652:13): [True: 0, False: 1.84k]
  ------------------
33653|      0|            p->level--;
33654|      0|            return NULL;
33655|      0|        }
33656|  1.84k|        D(fprintf(stderr, "%*c> _loop0_101[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target"));
33657|  1.84k|        Token * _literal;
33658|  1.84k|        expr_ty elem;
33659|  1.84k|        while (
33660|  8.08k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (33660:13): [True: 6.32k, False: 1.76k]
  ------------------
33661|  6.32k|            &&
33662|  6.32k|            (elem = del_target_rule(p))  // del_target
  ------------------
  |  Branch (33662:13): [True: 6.24k, False: 81]
  ------------------
33663|  1.84k|        )
33664|  6.24k|        {
33665|  6.24k|            _res = elem;
33666|  6.24k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (33666:18): [True: 0, False: 6.24k]
  |  Branch (33666:34): [True: 0, False: 6.24k]
  |  Branch (33666:57): [True: 0, False: 0]
  ------------------
33667|      0|                p->error_indicator = 1;
33668|      0|                PyMem_Free(_children);
33669|      0|                p->level--;
33670|      0|                return NULL;
33671|      0|            }
33672|  6.24k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (33672:17): [True: 2.09k, False: 4.14k]
  ------------------
33673|  2.09k|                _children_capacity *= 2;
33674|  2.09k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
33675|  2.09k|                if (!_new_children) {
  ------------------
  |  Branch (33675:21): [True: 0, False: 2.09k]
  ------------------
33676|      0|                    PyMem_Free(_children);
33677|      0|                    p->error_indicator = 1;
33678|      0|                    PyErr_NoMemory();
33679|      0|                    p->level--;
33680|      0|                    return NULL;
33681|      0|                }
33682|  2.09k|                _children = _new_children;
33683|  2.09k|            }
33684|  6.24k|            _children[_n++] = _res;
33685|  6.24k|            _mark = p->mark;
33686|  6.24k|        }
33687|  1.84k|        p->mark = _mark;
33688|  1.84k|        D(fprintf(stderr, "%*c%s _loop0_101[%d-%d]: %s failed!\n", p->level, ' ',
33689|  1.84k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' del_target"));
33690|  1.84k|    }
33691|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
33692|  1.84k|    if (!_seq) {
  ------------------
  |  Branch (33692:9): [True: 0, False: 1.84k]
  ------------------
33693|      0|        PyMem_Free(_children);
33694|      0|        p->error_indicator = 1;
33695|      0|        PyErr_NoMemory();
33696|      0|        p->level--;
33697|      0|        return NULL;
33698|      0|    }
33699|  8.08k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  6.24k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  8.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (33699:28): [True: 6.24k, False: 1.84k]
  ------------------
33700|  1.84k|    PyMem_Free(_children);
33701|  1.84k|    p->level--;
33702|  1.84k|    return _seq;
33703|  1.84k|}
parser.c:_tmp_15_rule:
28225|  1.83k|{
28226|  1.83k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.67k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28226:9): [True: 0, False: 1.83k]
  |  Branch (28226:35): [True: 0, False: 1.83k]
  ------------------
28227|      0|        _Pypegen_stack_overflow(p);
28228|      0|    }
28229|  1.83k|    if (p->error_indicator) {
  ------------------
  |  Branch (28229:9): [True: 0, False: 1.83k]
  ------------------
28230|      0|        p->level--;
28231|      0|        return NULL;
28232|      0|    }
28233|  1.83k|    void * _res = NULL;
28234|  1.83k|    int _mark = p->mark;
28235|  1.83k|    { // ';'
28236|  1.83k|        if (p->error_indicator) {
  ------------------
  |  Branch (28236:13): [True: 0, False: 1.83k]
  ------------------
28237|      0|            p->level--;
28238|      0|            return NULL;
28239|      0|        }
28240|  1.83k|        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'"));
28241|  1.83k|        Token * _literal;
28242|  1.83k|        if (
28243|  1.83k|            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
  ------------------
  |  Branch (28243:13): [True: 328, False: 1.51k]
  ------------------
28244|  1.83k|        )
28245|    328|        {
28246|    328|            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'"));
28247|    328|            _res = _literal;
28248|    328|            goto done;
28249|    328|        }
28250|  1.51k|        p->mark = _mark;
28251|  1.51k|        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
28252|  1.51k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'"));
28253|  1.51k|    }
28254|      0|    { // NEWLINE
28255|  1.51k|        if (p->error_indicator) {
  ------------------
  |  Branch (28255:13): [True: 0, False: 1.51k]
  ------------------
28256|      0|            p->level--;
28257|      0|            return NULL;
28258|      0|        }
28259|  1.51k|        D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
28260|  1.51k|        Token * newline_var;
28261|  1.51k|        if (
28262|  1.51k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.51k|#define NEWLINE         4
  ------------------
  |  Branch (28262:13): [True: 1.41k, False: 91]
  ------------------
28263|  1.51k|        )
28264|  1.41k|        {
28265|  1.41k|            D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
28266|  1.41k|            _res = newline_var;
28267|  1.41k|            goto done;
28268|  1.41k|        }
28269|     91|        p->mark = _mark;
28270|     91|        D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ',
28271|     91|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
28272|     91|    }
28273|     91|    _res = NULL;
28274|  1.83k|  done:
28275|  1.83k|    p->level--;
28276|  1.83k|    return _res;
28277|     91|}
parser.c:invalid_del_stmt_rule:
21223|     90|{
21224|     90|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    180|#  define MAXSTACK 6000
  ------------------
  |  Branch (21224:9): [True: 0, False: 90]
  |  Branch (21224:35): [True: 0, False: 90]
  ------------------
21225|      0|        _Pypegen_stack_overflow(p);
21226|      0|    }
21227|     90|    if (p->error_indicator) {
  ------------------
  |  Branch (21227:9): [True: 0, False: 90]
  ------------------
21228|      0|        p->level--;
21229|      0|        return NULL;
21230|      0|    }
21231|     90|    void * _res = NULL;
21232|     90|    int _mark = p->mark;
21233|     90|    { // 'del' star_expressions
21234|     90|        if (p->error_indicator) {
  ------------------
  |  Branch (21234:13): [True: 0, False: 90]
  ------------------
21235|      0|            p->level--;
21236|      0|            return NULL;
21237|      0|        }
21238|     90|        D(fprintf(stderr, "%*c> invalid_del_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
21239|     90|        Token * _keyword;
21240|     90|        expr_ty a;
21241|     90|        if (
21242|     90|            (_keyword = _PyPegen_expect_token(p, 634))  // token='del'
  ------------------
  |  Branch (21242:13): [True: 90, False: 0]
  ------------------
21243|     90|            &&
21244|     90|            (a = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (21244:13): [True: 55, False: 35]
  ------------------
21245|     90|        )
21246|     55|        {
21247|     55|            D(fprintf(stderr, "%*c+ invalid_del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' star_expressions"));
21248|     55|            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( DEL_TARGETS , a );
  ------------------
  |  |  242|     55|#define RAISE_SYNTAX_ERROR_INVALID_TARGET(type, e) _RAISE_SYNTAX_ERROR_INVALID_TARGET(p, type, e)
  ------------------
21249|     55|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21249:18): [True: 55, False: 0]
  |  Branch (21249:34): [True: 0, False: 0]
  |  Branch (21249:57): [True: 22, False: 33]
  ------------------
21250|     22|                p->error_indicator = 1;
21251|     22|                p->level--;
21252|     22|                return NULL;
21253|     22|            }
21254|     33|            goto done;
21255|     55|        }
21256|     35|        p->mark = _mark;
21257|     35|        D(fprintf(stderr, "%*c%s invalid_del_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21258|     35|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'del' star_expressions"));
21259|     35|    }
21260|     35|    _res = NULL;
21261|     68|  done:
21262|     68|    p->level--;
21263|     68|    return _res;
21264|     35|}
parser.c:yield_stmt_rule:
 3333|  1.85k|{
 3334|  1.85k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.70k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3334:9): [True: 0, False: 1.85k]
  |  Branch (3334:35): [True: 0, False: 1.85k]
  ------------------
 3335|      0|        _Pypegen_stack_overflow(p);
 3336|      0|    }
 3337|  1.85k|    if (p->error_indicator) {
  ------------------
  |  Branch (3337:9): [True: 0, False: 1.85k]
  ------------------
 3338|      0|        p->level--;
 3339|      0|        return NULL;
 3340|      0|    }
 3341|  1.85k|    stmt_ty _res = NULL;
 3342|  1.85k|    int _mark = p->mark;
 3343|  1.85k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3343:9): [True: 0, False: 1.85k]
  |  Branch (3343:31): [True: 0, False: 0]
  ------------------
 3344|      0|        p->error_indicator = 1;
 3345|      0|        p->level--;
 3346|      0|        return NULL;
 3347|      0|    }
 3348|  1.85k|    int _start_lineno = p->tokens[_mark]->lineno;
 3349|  1.85k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.85k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.85k]
  |  |  ------------------
  ------------------
 3350|  1.85k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3351|  1.85k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.85k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.85k]
  |  |  ------------------
  ------------------
 3352|  1.85k|    { // yield_expr
 3353|  1.85k|        if (p->error_indicator) {
  ------------------
  |  Branch (3353:13): [True: 0, False: 1.85k]
  ------------------
 3354|      0|            p->level--;
 3355|      0|            return NULL;
 3356|      0|        }
 3357|  1.85k|        D(fprintf(stderr, "%*c> yield_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr"));
 3358|  1.85k|        expr_ty y;
 3359|  1.85k|        if (
 3360|  1.85k|            (y = yield_expr_rule(p))  // yield_expr
  ------------------
  |  Branch (3360:13): [True: 1.85k, False: 2]
  ------------------
 3361|  1.85k|        )
 3362|  1.85k|        {
 3363|  1.85k|            D(fprintf(stderr, "%*c+ yield_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr"));
 3364|  1.85k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3365|  1.85k|            if (_token == NULL) {
  ------------------
  |  Branch (3365:17): [True: 0, False: 1.85k]
  ------------------
 3366|      0|                p->level--;
 3367|      0|                return NULL;
 3368|      0|            }
 3369|  1.85k|            int _end_lineno = _token->end_lineno;
 3370|  1.85k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.85k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.85k]
  |  |  ------------------
  ------------------
 3371|  1.85k|            int _end_col_offset = _token->end_col_offset;
 3372|  1.85k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.85k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.85k]
  |  |  ------------------
  ------------------
 3373|  1.85k|            _res = _PyAST_Expr ( y , EXTRA );
  ------------------
  |  |  307|  1.85k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3374|  1.85k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3374:18): [True: 0, False: 1.85k]
  |  Branch (3374:34): [True: 0, False: 1.85k]
  |  Branch (3374:57): [True: 0, False: 0]
  ------------------
 3375|      0|                p->error_indicator = 1;
 3376|      0|                p->level--;
 3377|      0|                return NULL;
 3378|      0|            }
 3379|  1.85k|            goto done;
 3380|  1.85k|        }
 3381|      2|        p->mark = _mark;
 3382|      2|        D(fprintf(stderr, "%*c%s yield_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3383|      2|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr"));
 3384|      2|    }
 3385|      2|    _res = NULL;
 3386|  1.85k|  done:
 3387|  1.85k|    p->level--;
 3388|  1.85k|    return _res;
 3389|      2|}
parser.c:assert_stmt_rule:
 3394|  4.33k|{
 3395|  4.33k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.67k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3395:9): [True: 0, False: 4.33k]
  |  Branch (3395:35): [True: 0, False: 4.33k]
  ------------------
 3396|      0|        _Pypegen_stack_overflow(p);
 3397|      0|    }
 3398|  4.33k|    if (p->error_indicator) {
  ------------------
  |  Branch (3398:9): [True: 0, False: 4.33k]
  ------------------
 3399|      0|        p->level--;
 3400|      0|        return NULL;
 3401|      0|    }
 3402|  4.33k|    stmt_ty _res = NULL;
 3403|  4.33k|    int _mark = p->mark;
 3404|  4.33k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3404:9): [True: 0, False: 4.33k]
  |  Branch (3404:31): [True: 0, False: 0]
  ------------------
 3405|      0|        p->error_indicator = 1;
 3406|      0|        p->level--;
 3407|      0|        return NULL;
 3408|      0|    }
 3409|  4.33k|    int _start_lineno = p->tokens[_mark]->lineno;
 3410|  4.33k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.33k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.33k]
  |  |  ------------------
  ------------------
 3411|  4.33k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3412|  4.33k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.33k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.33k]
  |  |  ------------------
  ------------------
 3413|  4.33k|    if (p->call_invalid_rules) { // invalid_assert_stmt
  ------------------
  |  Branch (3413:9): [True: 779, False: 3.55k]
  ------------------
 3414|    779|        if (p->error_indicator) {
  ------------------
  |  Branch (3414:13): [True: 0, False: 779]
  ------------------
 3415|      0|            p->level--;
 3416|      0|            return NULL;
 3417|      0|        }
 3418|    779|        D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_assert_stmt"));
 3419|    779|        void *invalid_assert_stmt_var;
 3420|    779|        if (
 3421|    779|            (invalid_assert_stmt_var = invalid_assert_stmt_rule(p))  // invalid_assert_stmt
  ------------------
  |  Branch (3421:13): [True: 0, False: 779]
  ------------------
 3422|    779|        )
 3423|      0|        {
 3424|      0|            D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_assert_stmt"));
 3425|      0|            _res = invalid_assert_stmt_var;
 3426|      0|            goto done;
 3427|      0|        }
 3428|    779|        p->mark = _mark;
 3429|    779|        D(fprintf(stderr, "%*c%s assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3430|    779|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_assert_stmt"));
 3431|    779|    }
 3432|  4.33k|    { // 'assert' expression [',' expression]
 3433|  4.33k|        if (p->error_indicator) {
  ------------------
  |  Branch (3433:13): [True: 11, False: 4.32k]
  ------------------
 3434|     11|            p->level--;
 3435|     11|            return NULL;
 3436|     11|        }
 3437|  4.32k|        D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
 3438|  4.32k|        Token * _keyword;
 3439|  4.32k|        expr_ty a;
 3440|  4.32k|        void *b;
 3441|  4.32k|        if (
 3442|  4.32k|            (_keyword = _PyPegen_expect_token(p, 638))  // token='assert'
  ------------------
  |  Branch (3442:13): [True: 4.32k, False: 0]
  ------------------
 3443|  4.32k|            &&
 3444|  4.32k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (3444:13): [True: 4.31k, False: 13]
  ------------------
 3445|  4.31k|            &&
 3446|  4.31k|            (b = _tmp_16_rule(p), !p->error_indicator)  // [',' expression]
  ------------------
  |  Branch (3446:13): [True: 4.31k, False: 2]
  ------------------
 3447|  4.32k|        )
 3448|  4.31k|        {
 3449|  4.31k|            D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]"));
 3450|  4.31k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3451|  4.31k|            if (_token == NULL) {
  ------------------
  |  Branch (3451:17): [True: 0, False: 4.31k]
  ------------------
 3452|      0|                p->level--;
 3453|      0|                return NULL;
 3454|      0|            }
 3455|  4.31k|            int _end_lineno = _token->end_lineno;
 3456|  4.31k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.31k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.31k]
  |  |  ------------------
  ------------------
 3457|  4.31k|            int _end_col_offset = _token->end_col_offset;
 3458|  4.31k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.31k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.31k]
  |  |  ------------------
  ------------------
 3459|  4.31k|            _res = _PyAST_Assert ( a , b , EXTRA );
  ------------------
  |  |  307|  4.31k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3460|  4.31k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3460:18): [True: 0, False: 4.31k]
  |  Branch (3460:34): [True: 0, False: 4.31k]
  |  Branch (3460:57): [True: 0, False: 0]
  ------------------
 3461|      0|                p->error_indicator = 1;
 3462|      0|                p->level--;
 3463|      0|                return NULL;
 3464|      0|            }
 3465|  4.31k|            goto done;
 3466|  4.31k|        }
 3467|     15|        p->mark = _mark;
 3468|     15|        D(fprintf(stderr, "%*c%s assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3469|     15|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression [',' expression]"));
 3470|     15|    }
 3471|     15|    _res = NULL;
 3472|  4.32k|  done:
 3473|  4.32k|    p->level--;
 3474|  4.32k|    return _res;
 3475|     15|}
parser.c:invalid_assert_stmt_rule:
21273|    779|{
21274|    779|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.55k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21274:9): [True: 0, False: 779]
  |  Branch (21274:35): [True: 0, False: 779]
  ------------------
21275|      0|        _Pypegen_stack_overflow(p);
21276|      0|    }
21277|    779|    if (p->error_indicator) {
  ------------------
  |  Branch (21277:9): [True: 0, False: 779]
  ------------------
21278|      0|        p->level--;
21279|      0|        return NULL;
21280|      0|    }
21281|    779|    void * _res = NULL;
21282|    779|    int _mark = p->mark;
21283|    779|    { // 'assert' expression '=' expression
21284|    779|        if (p->error_indicator) {
  ------------------
  |  Branch (21284:13): [True: 0, False: 779]
  ------------------
21285|      0|            p->level--;
21286|      0|            return NULL;
21287|      0|        }
21288|    779|        D(fprintf(stderr, "%*c> invalid_assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression '=' expression"));
21289|    779|        Token * _keyword;
21290|    779|        Token * _literal;
21291|    779|        expr_ty a;
21292|    779|        expr_ty b;
21293|    779|        if (
21294|    779|            (_keyword = _PyPegen_expect_token(p, 638))  // token='assert'
  ------------------
  |  Branch (21294:13): [True: 779, False: 0]
  ------------------
21295|    779|            &&
21296|    779|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (21296:13): [True: 772, False: 7]
  ------------------
21297|    772|            &&
21298|    772|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (21298:13): [True: 4, False: 768]
  ------------------
21299|      4|            &&
21300|      4|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (21300:13): [True: 3, False: 1]
  ------------------
21301|    779|        )
21302|      3|        {
21303|      3|            D(fprintf(stderr, "%*c+ invalid_assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression '=' expression"));
21304|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  237|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21305|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21305:18): [True: 3, False: 0]
  |  Branch (21305:34): [True: 0, False: 0]
  |  Branch (21305:57): [True: 3, False: 0]
  ------------------
21306|      3|                p->error_indicator = 1;
21307|      3|                p->level--;
21308|      3|                return NULL;
21309|      3|            }
21310|      0|            goto done;
21311|      3|        }
21312|    776|        p->mark = _mark;
21313|    776|        D(fprintf(stderr, "%*c%s invalid_assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21314|    776|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression '=' expression"));
21315|    776|    }
21316|      0|    { // 'assert' expression ',' expression '=' expression
21317|    776|        if (p->error_indicator) {
  ------------------
  |  Branch (21317:13): [True: 2, False: 774]
  ------------------
21318|      2|            p->level--;
21319|      2|            return NULL;
21320|      2|        }
21321|    774|        D(fprintf(stderr, "%*c> invalid_assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression ',' expression '=' expression"));
21322|    774|        Token * _keyword;
21323|    774|        Token * _literal;
21324|    774|        Token * _literal_1;
21325|    774|        expr_ty a;
21326|    774|        expr_ty b;
21327|    774|        expr_ty expression_var;
21328|    774|        if (
21329|    774|            (_keyword = _PyPegen_expect_token(p, 638))  // token='assert'
  ------------------
  |  Branch (21329:13): [True: 774, False: 0]
  ------------------
21330|    774|            &&
21331|    774|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (21331:13): [True: 769, False: 5]
  ------------------
21332|    769|            &&
21333|    769|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (21333:13): [True: 227, False: 542]
  ------------------
21334|    227|            &&
21335|    227|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (21335:13): [True: 224, False: 3]
  ------------------
21336|    224|            &&
21337|    224|            (_literal_1 = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (21337:13): [True: 2, False: 222]
  ------------------
21338|      2|            &&
21339|      2|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (21339:13): [True: 1, False: 1]
  ------------------
21340|    774|        )
21341|      1|        {
21342|      1|            D(fprintf(stderr, "%*c+ invalid_assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression ',' expression '=' expression"));
21343|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot assign to %s here. Maybe you meant '==' instead of '='?" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21344|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21344:18): [True: 1, False: 0]
  |  Branch (21344:34): [True: 0, False: 0]
  |  Branch (21344:57): [True: 1, False: 0]
  ------------------
21345|      1|                p->error_indicator = 1;
21346|      1|                p->level--;
21347|      1|                return NULL;
21348|      1|            }
21349|      0|            goto done;
21350|      1|        }
21351|    773|        p->mark = _mark;
21352|    773|        D(fprintf(stderr, "%*c%s invalid_assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21353|    773|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression ',' expression '=' expression"));
21354|    773|    }
21355|      0|    { // 'assert' expression ':=' expression
21356|    773|        if (p->error_indicator) {
  ------------------
  |  Branch (21356:13): [True: 1, False: 772]
  ------------------
21357|      1|            p->level--;
21358|      1|            return NULL;
21359|      1|        }
21360|    772|        D(fprintf(stderr, "%*c> invalid_assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression ':=' expression"));
21361|    772|        Token * _keyword;
21362|    772|        Token * _literal;
21363|    772|        expr_ty a;
21364|    772|        expr_ty b;
21365|    772|        if (
21366|    772|            (_keyword = _PyPegen_expect_token(p, 638))  // token='assert'
  ------------------
  |  Branch (21366:13): [True: 772, False: 0]
  ------------------
21367|    772|            &&
21368|    772|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (21368:13): [True: 767, False: 5]
  ------------------
21369|    767|            &&
21370|    767|            (_literal = _PyPegen_expect_token(p, 53))  // token=':='
  ------------------
  |  Branch (21370:13): [True: 3, False: 764]
  ------------------
21371|      3|            &&
21372|      3|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (21372:13): [True: 1, False: 2]
  ------------------
21373|    772|        )
21374|      1|        {
21375|      1|            D(fprintf(stderr, "%*c+ invalid_assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression ':=' expression"));
21376|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use named expression without parentheses here" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21377|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21377:18): [True: 1, False: 0]
  |  Branch (21377:34): [True: 0, False: 0]
  |  Branch (21377:57): [True: 1, False: 0]
  ------------------
21378|      1|                p->error_indicator = 1;
21379|      1|                p->level--;
21380|      1|                return NULL;
21381|      1|            }
21382|      0|            goto done;
21383|      1|        }
21384|    771|        p->mark = _mark;
21385|    771|        D(fprintf(stderr, "%*c%s invalid_assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21386|    771|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression ':=' expression"));
21387|    771|    }
21388|      0|    { // 'assert' expression ',' expression ':=' expression
21389|    771|        if (p->error_indicator) {
  ------------------
  |  Branch (21389:13): [True: 2, False: 769]
  ------------------
21390|      2|            p->level--;
21391|      2|            return NULL;
21392|      2|        }
21393|    769|        D(fprintf(stderr, "%*c> invalid_assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression ',' expression ':=' expression"));
21394|    769|        Token * _keyword;
21395|    769|        Token * _literal;
21396|    769|        Token * _literal_1;
21397|    769|        expr_ty a;
21398|    769|        expr_ty b;
21399|    769|        expr_ty expression_var;
21400|    769|        if (
21401|    769|            (_keyword = _PyPegen_expect_token(p, 638))  // token='assert'
  ------------------
  |  Branch (21401:13): [True: 769, False: 0]
  ------------------
21402|    769|            &&
21403|    769|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (21403:13): [True: 764, False: 5]
  ------------------
21404|    764|            &&
21405|    764|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (21405:13): [True: 225, False: 539]
  ------------------
21406|    225|            &&
21407|    225|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (21407:13): [True: 222, False: 3]
  ------------------
21408|    222|            &&
21409|    222|            (_literal_1 = _PyPegen_expect_token(p, 53))  // token=':='
  ------------------
  |  Branch (21409:13): [True: 2, False: 220]
  ------------------
21410|      2|            &&
21411|      2|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (21411:13): [True: 1, False: 1]
  ------------------
21412|    769|        )
21413|      1|        {
21414|      1|            D(fprintf(stderr, "%*c+ invalid_assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression ',' expression ':=' expression"));
21415|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot use named expression without parentheses here" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21416|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21416:18): [True: 1, False: 0]
  |  Branch (21416:34): [True: 0, False: 0]
  |  Branch (21416:57): [True: 1, False: 0]
  ------------------
21417|      1|                p->error_indicator = 1;
21418|      1|                p->level--;
21419|      1|                return NULL;
21420|      1|            }
21421|      0|            goto done;
21422|      1|        }
21423|    768|        p->mark = _mark;
21424|    768|        D(fprintf(stderr, "%*c%s invalid_assert_stmt[%d-%d]: %s failed!\n", p->level, ' ',
21425|    768|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression ',' expression ':=' expression"));
21426|    768|    }
21427|    768|    _res = NULL;
21428|    768|  done:
21429|    768|    p->level--;
21430|    768|    return _res;
21431|    768|}
parser.c:_tmp_16_rule:
28282|  18.1k|{
28283|  18.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  36.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28283:9): [True: 0, False: 18.1k]
  |  Branch (28283:35): [True: 0, False: 18.1k]
  ------------------
28284|      0|        _Pypegen_stack_overflow(p);
28285|      0|    }
28286|  18.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (28286:9): [True: 0, False: 18.1k]
  ------------------
28287|      0|        p->level--;
28288|      0|        return NULL;
28289|      0|    }
28290|  18.1k|    void * _res = NULL;
28291|  18.1k|    int _mark = p->mark;
28292|  18.1k|    { // ',' expression
28293|  18.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (28293:13): [True: 0, False: 18.1k]
  ------------------
28294|      0|            p->level--;
28295|      0|            return NULL;
28296|      0|        }
28297|  18.1k|        D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression"));
28298|  18.1k|        Token * _literal;
28299|  18.1k|        expr_ty z;
28300|  18.1k|        if (
28301|  18.1k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (28301:13): [True: 11.2k, False: 6.96k]
  ------------------
28302|  11.2k|            &&
28303|  11.2k|            (z = expression_rule(p))  // expression
  ------------------
  |  Branch (28303:13): [True: 10.1k, False: 1.08k]
  ------------------
28304|  18.1k|        )
28305|  10.1k|        {
28306|  10.1k|            D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression"));
28307|  10.1k|            _res = z;
28308|  10.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28308:18): [True: 0, False: 10.1k]
  |  Branch (28308:34): [True: 0, False: 10.1k]
  |  Branch (28308:57): [True: 0, False: 0]
  ------------------
28309|      0|                p->error_indicator = 1;
28310|      0|                p->level--;
28311|      0|                return NULL;
28312|      0|            }
28313|  10.1k|            goto done;
28314|  10.1k|        }
28315|  8.05k|        p->mark = _mark;
28316|  8.05k|        D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ',
28317|  8.05k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression"));
28318|  8.05k|    }
28319|  8.05k|    _res = NULL;
28320|  18.1k|  done:
28321|  18.1k|    p->level--;
28322|  18.1k|    return _res;
28323|  8.05k|}
parser.c:global_stmt_rule:
 3120|  1.26k|{
 3121|  1.26k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.53k|#  define MAXSTACK 6000
  ------------------
  |  Branch (3121:9): [True: 0, False: 1.26k]
  |  Branch (3121:35): [True: 0, False: 1.26k]
  ------------------
 3122|      0|        _Pypegen_stack_overflow(p);
 3123|      0|    }
 3124|  1.26k|    if (p->error_indicator) {
  ------------------
  |  Branch (3124:9): [True: 0, False: 1.26k]
  ------------------
 3125|      0|        p->level--;
 3126|      0|        return NULL;
 3127|      0|    }
 3128|  1.26k|    stmt_ty _res = NULL;
 3129|  1.26k|    int _mark = p->mark;
 3130|  1.26k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3130:9): [True: 0, False: 1.26k]
  |  Branch (3130:31): [True: 0, False: 0]
  ------------------
 3131|      0|        p->error_indicator = 1;
 3132|      0|        p->level--;
 3133|      0|        return NULL;
 3134|      0|    }
 3135|  1.26k|    int _start_lineno = p->tokens[_mark]->lineno;
 3136|  1.26k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.26k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.26k]
  |  |  ------------------
  ------------------
 3137|  1.26k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3138|  1.26k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.26k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.26k]
  |  |  ------------------
  ------------------
 3139|  1.26k|    { // 'global' ','.NAME+
 3140|  1.26k|        if (p->error_indicator) {
  ------------------
  |  Branch (3140:13): [True: 0, False: 1.26k]
  ------------------
 3141|      0|            p->level--;
 3142|      0|            return NULL;
 3143|      0|        }
 3144|  1.26k|        D(fprintf(stderr, "%*c> global_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
 3145|  1.26k|        Token * _keyword;
 3146|  1.26k|        asdl_expr_seq* a;
 3147|  1.26k|        if (
 3148|  1.26k|            (_keyword = _PyPegen_expect_token(p, 530))  // token='global'
  ------------------
  |  Branch (3148:13): [True: 1.26k, False: 0]
  ------------------
 3149|  1.26k|            &&
 3150|  1.26k|            (a = (asdl_expr_seq*)_gather_14_rule(p))  // ','.NAME+
  ------------------
  |  Branch (3150:13): [True: 1.25k, False: 9]
  ------------------
 3151|  1.26k|        )
 3152|  1.25k|        {
 3153|  1.25k|            D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+"));
 3154|  1.25k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3155|  1.25k|            if (_token == NULL) {
  ------------------
  |  Branch (3155:17): [True: 0, False: 1.25k]
  ------------------
 3156|      0|                p->level--;
 3157|      0|                return NULL;
 3158|      0|            }
 3159|  1.25k|            int _end_lineno = _token->end_lineno;
 3160|  1.25k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.25k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.25k]
  |  |  ------------------
  ------------------
 3161|  1.25k|            int _end_col_offset = _token->end_col_offset;
 3162|  1.25k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.25k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.25k]
  |  |  ------------------
  ------------------
 3163|  1.25k|            _res = _PyAST_Global ( CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
  ------------------
  |  |  271|  1.25k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Global ( CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
  ------------------
  |  |  307|  1.25k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3164|  1.25k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3164:18): [True: 0, False: 1.25k]
  |  Branch (3164:34): [True: 2, False: 1.25k]
  |  Branch (3164:57): [True: 2, False: 0]
  ------------------
 3165|      2|                p->error_indicator = 1;
 3166|      2|                p->level--;
 3167|      2|                return NULL;
 3168|      2|            }
 3169|  1.25k|            goto done;
 3170|  1.25k|        }
 3171|      9|        p->mark = _mark;
 3172|      9|        D(fprintf(stderr, "%*c%s global_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3173|      9|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'global' ','.NAME+"));
 3174|      9|    }
 3175|      9|    _res = NULL;
 3176|  1.26k|  done:
 3177|  1.26k|    p->level--;
 3178|  1.26k|    return _res;
 3179|      9|}
parser.c:_gather_14_rule:
28184|  1.65k|{
28185|  1.65k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.31k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28185:9): [True: 0, False: 1.65k]
  |  Branch (28185:35): [True: 0, False: 1.65k]
  ------------------
28186|      0|        _Pypegen_stack_overflow(p);
28187|      0|    }
28188|  1.65k|    if (p->error_indicator) {
  ------------------
  |  Branch (28188:9): [True: 0, False: 1.65k]
  ------------------
28189|      0|        p->level--;
28190|      0|        return NULL;
28191|      0|    }
28192|  1.65k|    asdl_seq * _res = NULL;
28193|  1.65k|    int _mark = p->mark;
28194|  1.65k|    { // NAME _loop0_13
28195|  1.65k|        if (p->error_indicator) {
  ------------------
  |  Branch (28195:13): [True: 0, False: 1.65k]
  ------------------
28196|      0|            p->level--;
28197|      0|            return NULL;
28198|      0|        }
28199|  1.65k|        D(fprintf(stderr, "%*c> _gather_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_13"));
28200|  1.65k|        expr_ty elem;
28201|  1.65k|        asdl_seq * seq;
28202|  1.65k|        if (
28203|  1.65k|            (elem = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (28203:13): [True: 1.64k, False: 12]
  ------------------
28204|  1.64k|            &&
28205|  1.64k|            (seq = _loop0_13_rule(p))  // _loop0_13
  ------------------
  |  Branch (28205:13): [True: 1.64k, False: 0]
  ------------------
28206|  1.65k|        )
28207|  1.64k|        {
28208|  1.64k|            D(fprintf(stderr, "%*c+ _gather_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_13"));
28209|  1.64k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
28210|  1.64k|            goto done;
28211|  1.64k|        }
28212|     12|        p->mark = _mark;
28213|     12|        D(fprintf(stderr, "%*c%s _gather_14[%d-%d]: %s failed!\n", p->level, ' ',
28214|     12|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_13"));
28215|     12|    }
28216|     12|    _res = NULL;
28217|  1.65k|  done:
28218|  1.65k|    p->level--;
28219|  1.65k|    return _res;
28220|     12|}
parser.c:_loop0_13_rule:
28108|  1.64k|{
28109|  1.64k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.28k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28109:9): [True: 0, False: 1.64k]
  |  Branch (28109:35): [True: 0, False: 1.64k]
  ------------------
28110|      0|        _Pypegen_stack_overflow(p);
28111|      0|    }
28112|  1.64k|    if (p->error_indicator) {
  ------------------
  |  Branch (28112:9): [True: 0, False: 1.64k]
  ------------------
28113|      0|        p->level--;
28114|      0|        return NULL;
28115|      0|    }
28116|  1.64k|    void *_res = NULL;
28117|  1.64k|    int _mark = p->mark;
28118|  1.64k|    void **_children = PyMem_Malloc(sizeof(void *));
28119|  1.64k|    if (!_children) {
  ------------------
  |  Branch (28119:9): [True: 0, False: 1.64k]
  ------------------
28120|      0|        p->error_indicator = 1;
28121|      0|        PyErr_NoMemory();
28122|      0|        p->level--;
28123|      0|        return NULL;
28124|      0|    }
28125|  1.64k|    Py_ssize_t _children_capacity = 1;
28126|  1.64k|    Py_ssize_t _n = 0;
28127|  1.64k|    { // ',' NAME
28128|  1.64k|        if (p->error_indicator) {
  ------------------
  |  Branch (28128:13): [True: 0, False: 1.64k]
  ------------------
28129|      0|            p->level--;
28130|      0|            return NULL;
28131|      0|        }
28132|  1.64k|        D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME"));
28133|  1.64k|        Token * _literal;
28134|  1.64k|        expr_ty elem;
28135|  1.64k|        while (
28136|  3.19k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (28136:13): [True: 1.56k, False: 1.63k]
  ------------------
28137|  1.56k|            &&
28138|  1.56k|            (elem = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (28138:13): [True: 1.55k, False: 11]
  ------------------
28139|  1.64k|        )
28140|  1.55k|        {
28141|  1.55k|            _res = elem;
28142|  1.55k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28142:18): [True: 0, False: 1.55k]
  |  Branch (28142:34): [True: 0, False: 1.55k]
  |  Branch (28142:57): [True: 0, False: 0]
  ------------------
28143|      0|                p->error_indicator = 1;
28144|      0|                PyMem_Free(_children);
28145|      0|                p->level--;
28146|      0|                return NULL;
28147|      0|            }
28148|  1.55k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28148:17): [True: 595, False: 955]
  ------------------
28149|    595|                _children_capacity *= 2;
28150|    595|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28151|    595|                if (!_new_children) {
  ------------------
  |  Branch (28151:21): [True: 0, False: 595]
  ------------------
28152|      0|                    PyMem_Free(_children);
28153|      0|                    p->error_indicator = 1;
28154|      0|                    PyErr_NoMemory();
28155|      0|                    p->level--;
28156|      0|                    return NULL;
28157|      0|                }
28158|    595|                _children = _new_children;
28159|    595|            }
28160|  1.55k|            _children[_n++] = _res;
28161|  1.55k|            _mark = p->mark;
28162|  1.55k|        }
28163|  1.64k|        p->mark = _mark;
28164|  1.64k|        D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ',
28165|  1.64k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME"));
28166|  1.64k|    }
28167|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28168|  1.64k|    if (!_seq) {
  ------------------
  |  Branch (28168:9): [True: 0, False: 1.64k]
  ------------------
28169|      0|        PyMem_Free(_children);
28170|      0|        p->error_indicator = 1;
28171|      0|        PyErr_NoMemory();
28172|      0|        p->level--;
28173|      0|        return NULL;
28174|      0|    }
28175|  3.19k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  1.55k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.19k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28175:28): [True: 1.55k, False: 1.64k]
  ------------------
28176|  1.64k|    PyMem_Free(_children);
28177|  1.64k|    p->level--;
28178|  1.64k|    return _seq;
28179|  1.64k|}
parser.c:nonlocal_stmt_rule:
 3184|    391|{
 3185|    391|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    782|#  define MAXSTACK 6000
  ------------------
  |  Branch (3185:9): [True: 0, False: 391]
  |  Branch (3185:35): [True: 0, False: 391]
  ------------------
 3186|      0|        _Pypegen_stack_overflow(p);
 3187|      0|    }
 3188|    391|    if (p->error_indicator) {
  ------------------
  |  Branch (3188:9): [True: 0, False: 391]
  ------------------
 3189|      0|        p->level--;
 3190|      0|        return NULL;
 3191|      0|    }
 3192|    391|    stmt_ty _res = NULL;
 3193|    391|    int _mark = p->mark;
 3194|    391|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (3194:9): [True: 0, False: 391]
  |  Branch (3194:31): [True: 0, False: 0]
  ------------------
 3195|      0|        p->error_indicator = 1;
 3196|      0|        p->level--;
 3197|      0|        return NULL;
 3198|      0|    }
 3199|    391|    int _start_lineno = p->tokens[_mark]->lineno;
 3200|    391|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    391|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 391]
  |  |  ------------------
  ------------------
 3201|    391|    int _start_col_offset = p->tokens[_mark]->col_offset;
 3202|    391|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    391|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 391]
  |  |  ------------------
  ------------------
 3203|    391|    { // 'nonlocal' ','.NAME+
 3204|    391|        if (p->error_indicator) {
  ------------------
  |  Branch (3204:13): [True: 0, False: 391]
  ------------------
 3205|      0|            p->level--;
 3206|      0|            return NULL;
 3207|      0|        }
 3208|    391|        D(fprintf(stderr, "%*c> nonlocal_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
 3209|    391|        Token * _keyword;
 3210|    391|        asdl_expr_seq* a;
 3211|    391|        if (
 3212|    391|            (_keyword = _PyPegen_expect_token(p, 531))  // token='nonlocal'
  ------------------
  |  Branch (3212:13): [True: 391, False: 0]
  ------------------
 3213|    391|            &&
 3214|    391|            (a = (asdl_expr_seq*)_gather_14_rule(p))  // ','.NAME+
  ------------------
  |  Branch (3214:13): [True: 388, False: 3]
  ------------------
 3215|    391|        )
 3216|    388|        {
 3217|    388|            D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+"));
 3218|    388|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 3219|    388|            if (_token == NULL) {
  ------------------
  |  Branch (3219:17): [True: 0, False: 388]
  ------------------
 3220|      0|                p->level--;
 3221|      0|                return NULL;
 3222|      0|            }
 3223|    388|            int _end_lineno = _token->end_lineno;
 3224|    388|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    388|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 388]
  |  |  ------------------
  ------------------
 3225|    388|            int _end_col_offset = _token->end_col_offset;
 3226|    388|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    388|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 388]
  |  |  ------------------
  ------------------
 3227|    388|            _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
  ------------------
  |  |  271|    388|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA );
  ------------------
  |  |  307|    388|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 3228|    388|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (3228:18): [True: 0, False: 388]
  |  Branch (3228:34): [True: 1, False: 387]
  |  Branch (3228:57): [True: 1, False: 0]
  ------------------
 3229|      1|                p->error_indicator = 1;
 3230|      1|                p->level--;
 3231|      1|                return NULL;
 3232|      1|            }
 3233|    387|            goto done;
 3234|    388|        }
 3235|      3|        p->mark = _mark;
 3236|      3|        D(fprintf(stderr, "%*c%s nonlocal_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 3237|      3|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'nonlocal' ','.NAME+"));
 3238|      3|    }
 3239|      3|    _res = NULL;
 3240|    390|  done:
 3241|    390|    p->level--;
 3242|    390|    return _res;
 3243|      3|}
parser.c:lambda_params_rule:
15309|  19.2k|{
15310|  19.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  38.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15310:9): [True: 0, False: 19.2k]
  |  Branch (15310:35): [True: 0, False: 19.2k]
  ------------------
15311|      0|        _Pypegen_stack_overflow(p);
15312|      0|    }
15313|  19.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (15313:9): [True: 0, False: 19.2k]
  ------------------
15314|      0|        p->level--;
15315|      0|        return NULL;
15316|      0|    }
15317|  19.2k|    arguments_ty _res = NULL;
15318|  19.2k|    int _mark = p->mark;
15319|  19.2k|    if (p->call_invalid_rules) { // invalid_lambda_parameters
  ------------------
  |  Branch (15319:9): [True: 9.88k, False: 9.36k]
  ------------------
15320|  9.88k|        if (p->error_indicator) {
  ------------------
  |  Branch (15320:13): [True: 0, False: 9.88k]
  ------------------
15321|      0|            p->level--;
15322|      0|            return NULL;
15323|      0|        }
15324|  9.88k|        D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
15325|  9.88k|        void *invalid_lambda_parameters_var;
15326|  9.88k|        if (
15327|  9.88k|            (invalid_lambda_parameters_var = invalid_lambda_parameters_rule(p))  // invalid_lambda_parameters
  ------------------
  |  Branch (15327:13): [True: 0, False: 9.88k]
  ------------------
15328|  9.88k|        )
15329|      0|        {
15330|      0|            D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters"));
15331|      0|            _res = invalid_lambda_parameters_var;
15332|      0|            goto done;
15333|      0|        }
15334|  9.88k|        p->mark = _mark;
15335|  9.88k|        D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ',
15336|  9.88k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_parameters"));
15337|  9.88k|    }
15338|  19.2k|    { // lambda_parameters
15339|  19.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (15339:13): [True: 656, False: 18.5k]
  ------------------
15340|    656|            p->level--;
15341|    656|            return NULL;
15342|    656|        }
15343|  18.5k|        D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
15344|  18.5k|        arguments_ty lambda_parameters_var;
15345|  18.5k|        if (
15346|  18.5k|            (lambda_parameters_var = lambda_parameters_rule(p))  // lambda_parameters
  ------------------
  |  Branch (15346:13): [True: 14.8k, False: 3.74k]
  ------------------
15347|  18.5k|        )
15348|  14.8k|        {
15349|  14.8k|            D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_parameters"));
15350|  14.8k|            _res = lambda_parameters_var;
15351|  14.8k|            goto done;
15352|  14.8k|        }
15353|  3.74k|        p->mark = _mark;
15354|  3.74k|        D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ',
15355|  3.74k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_parameters"));
15356|  3.74k|    }
15357|  3.74k|    _res = NULL;
15358|  18.5k|  done:
15359|  18.5k|    p->level--;
15360|  18.5k|    return _res;
15361|  3.74k|}
parser.c:invalid_lambda_parameters_rule:
22236|  9.88k|{
22237|  9.88k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22237:9): [True: 0, False: 9.88k]
  |  Branch (22237:35): [True: 0, False: 9.88k]
  ------------------
22238|      0|        _Pypegen_stack_overflow(p);
22239|      0|    }
22240|  9.88k|    if (p->error_indicator) {
  ------------------
  |  Branch (22240:9): [True: 0, False: 9.88k]
  ------------------
22241|      0|        p->level--;
22242|      0|        return NULL;
22243|      0|    }
22244|  9.88k|    void * _res = NULL;
22245|  9.88k|    int _mark = p->mark;
22246|  9.88k|    { // "/" ','
22247|  9.88k|        if (p->error_indicator) {
  ------------------
  |  Branch (22247:13): [True: 0, False: 9.88k]
  ------------------
22248|      0|            p->level--;
22249|      0|            return NULL;
22250|      0|        }
22251|  9.88k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
22252|  9.88k|        Token * _literal;
22253|  9.88k|        Token * a;
22254|  9.88k|        if (
22255|  9.88k|            (a = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (22255:13): [True: 6, False: 9.87k]
  ------------------
22256|      6|            &&
22257|      6|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (22257:13): [True: 2, False: 4]
  ------------------
22258|  9.88k|        )
22259|      2|        {
22260|      2|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
22261|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one parameter must precede /" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22262|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22262:18): [True: 2, False: 0]
  |  Branch (22262:34): [True: 0, False: 0]
  |  Branch (22262:57): [True: 2, False: 0]
  ------------------
22263|      2|                p->error_indicator = 1;
22264|      2|                p->level--;
22265|      2|                return NULL;
22266|      2|            }
22267|      0|            goto done;
22268|      2|        }
22269|  9.87k|        p->mark = _mark;
22270|  9.87k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22271|  9.87k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"/\" ','"));
22272|  9.87k|    }
22273|      0|    { // (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'
22274|  9.87k|        if (p->error_indicator) {
  ------------------
  |  Branch (22274:13): [True: 3, False: 9.87k]
  ------------------
22275|      3|            p->level--;
22276|      3|            return NULL;
22277|      3|        }
22278|  9.87k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'"));
22279|  9.87k|        asdl_seq * _loop0_74_var;
22280|  9.87k|        void *_tmp_128_var;
22281|  9.87k|        Token * a;
22282|  9.87k|        if (
22283|  9.87k|            (_tmp_128_var = _tmp_128_rule(p))  // lambda_slash_no_default | lambda_slash_with_default
  ------------------
  |  Branch (22283:13): [True: 2.57k, False: 7.29k]
  ------------------
22284|  2.57k|            &&
22285|  2.57k|            (_loop0_74_var = _loop0_74_rule(p))  // lambda_param_maybe_default*
  ------------------
  |  Branch (22285:13): [True: 2.57k, False: 0]
  ------------------
22286|  2.57k|            &&
22287|  2.57k|            (a = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (22287:13): [True: 4, False: 2.57k]
  ------------------
22288|  9.87k|        )
22289|      4|        {
22290|      4|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'"));
22291|      4|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ may appear only once" );
  ------------------
  |  |  239|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22292|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22292:18): [True: 4, False: 0]
  |  Branch (22292:34): [True: 0, False: 0]
  |  Branch (22292:57): [True: 4, False: 0]
  ------------------
22293|      4|                p->error_indicator = 1;
22294|      4|                p->level--;
22295|      4|                return NULL;
22296|      4|            }
22297|      0|            goto done;
22298|      4|        }
22299|  9.87k|        p->mark = _mark;
22300|  9.87k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22301|  9.87k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* '/'"));
22302|  9.87k|    }
22303|      0|    { // lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default
22304|  9.87k|        if (p->error_indicator) {
  ------------------
  |  Branch (22304:13): [True: 192, False: 9.67k]
  ------------------
22305|    192|            p->level--;
22306|    192|            return NULL;
22307|    192|        }
22308|  9.67k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default"));
22309|  9.67k|        asdl_seq * _loop0_70_var;
22310|  9.67k|        void *_opt_var;
22311|  9.67k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  9.67k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.67k]
  |  |  ------------------
  ------------------
22312|  9.67k|        arg_ty a;
22313|  9.67k|        void *invalid_lambda_parameters_helper_var;
22314|  9.67k|        if (
22315|  9.67k|            (_opt_var = lambda_slash_no_default_rule(p), !p->error_indicator)  // lambda_slash_no_default?
  ------------------
  |  Branch (22315:13): [True: 9.67k, False: 0]
  ------------------
22316|  9.67k|            &&
22317|  9.67k|            (_loop0_70_var = _loop0_70_rule(p))  // lambda_param_no_default*
  ------------------
  |  Branch (22317:13): [True: 9.67k, False: 0]
  ------------------
22318|  9.67k|            &&
22319|  9.67k|            (invalid_lambda_parameters_helper_var = invalid_lambda_parameters_helper_rule(p))  // invalid_lambda_parameters_helper
  ------------------
  |  Branch (22319:13): [True: 1.67k, False: 8.00k]
  ------------------
22320|  1.67k|            &&
22321|  1.67k|            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (22321:13): [True: 5, False: 1.66k]
  ------------------
22322|  9.67k|        )
22323|      5|        {
22324|      5|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default"));
22325|      5|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameter without a default follows parameter with a default" );
  ------------------
  |  |  239|      5|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22326|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22326:18): [True: 5, False: 0]
  |  Branch (22326:34): [True: 0, False: 0]
  |  Branch (22326:57): [True: 5, False: 0]
  ------------------
22327|      5|                p->error_indicator = 1;
22328|      5|                p->level--;
22329|      5|                return NULL;
22330|      5|            }
22331|      0|            goto done;
22332|      5|        }
22333|  9.67k|        p->mark = _mark;
22334|  9.67k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22335|  9.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper lambda_param_no_default"));
22336|  9.67k|    }
22337|      0|    { // lambda_param_no_default* '(' ','.lambda_param+ ','? ')'
22338|  9.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (22338:13): [True: 0, False: 9.67k]
  ------------------
22339|      0|            p->level--;
22340|      0|            return NULL;
22341|      0|        }
22342|  9.67k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'"));
22343|  9.67k|        asdl_seq * _gather_130_var;
22344|  9.67k|        asdl_seq * _loop0_70_var;
22345|  9.67k|        void *_opt_var;
22346|  9.67k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  9.67k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.67k]
  |  |  ------------------
  ------------------
22347|  9.67k|        Token * a;
22348|  9.67k|        Token * b;
22349|  9.67k|        if (
22350|  9.67k|            (_loop0_70_var = _loop0_70_rule(p))  // lambda_param_no_default*
  ------------------
  |  Branch (22350:13): [True: 9.67k, False: 0]
  ------------------
22351|  9.67k|            &&
22352|  9.67k|            (a = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (22352:13): [True: 57, False: 9.61k]
  ------------------
22353|     57|            &&
22354|     57|            (_gather_130_var = _gather_130_rule(p))  // ','.lambda_param+
  ------------------
  |  Branch (22354:13): [True: 46, False: 11]
  ------------------
22355|     46|            &&
22356|     46|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (22356:13): [True: 41, False: 5]
  ------------------
22357|     41|            &&
22358|     41|            (b = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (22358:13): [True: 2, False: 39]
  ------------------
22359|  9.67k|        )
22360|      2|        {
22361|      2|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'"));
22362|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Lambda expression parameters cannot be parenthesized" );
  ------------------
  |  |  237|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22363|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22363:18): [True: 2, False: 0]
  |  Branch (22363:34): [True: 0, False: 0]
  |  Branch (22363:57): [True: 2, False: 0]
  ------------------
22364|      2|                p->error_indicator = 1;
22365|      2|                p->level--;
22366|      2|                return NULL;
22367|      2|            }
22368|      0|            goto done;
22369|      2|        }
22370|  9.67k|        p->mark = _mark;
22371|  9.67k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22372|  9.67k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* '(' ','.lambda_param+ ','? ')'"));
22373|  9.67k|    }
22374|      0|    { // [(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'
22375|  9.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (22375:13): [True: 7, False: 9.66k]
  ------------------
22376|      7|            p->level--;
22377|      7|            return NULL;
22378|      7|        }
22379|  9.66k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'"));
22380|  9.66k|        Token * _literal;
22381|  9.66k|        asdl_seq * _loop0_74_var;
22382|  9.66k|        asdl_seq * _loop0_74_var_1;
22383|  9.66k|        void *_opt_var;
22384|  9.66k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  9.66k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.66k]
  |  |  ------------------
  ------------------
22385|  9.66k|        void *_tmp_131_var;
22386|  9.66k|        Token * a;
22387|  9.66k|        if (
22388|  9.66k|            (_opt_var = _tmp_128_rule(p), !p->error_indicator)  // [(lambda_slash_no_default | lambda_slash_with_default)]
  ------------------
  |  Branch (22388:13): [True: 9.66k, False: 0]
  ------------------
22389|  9.66k|            &&
22390|  9.66k|            (_loop0_74_var = _loop0_74_rule(p))  // lambda_param_maybe_default*
  ------------------
  |  Branch (22390:13): [True: 9.66k, False: 0]
  ------------------
22391|  9.66k|            &&
22392|  9.66k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22392:13): [True: 4.51k, False: 5.15k]
  ------------------
22393|  4.51k|            &&
22394|  4.51k|            (_tmp_131_var = _tmp_131_rule(p))  // ',' | lambda_param_no_default
  ------------------
  |  Branch (22394:13): [True: 4.44k, False: 71]
  ------------------
22395|  4.44k|            &&
22396|  4.44k|            (_loop0_74_var_1 = _loop0_74_rule(p))  // lambda_param_maybe_default*
  ------------------
  |  Branch (22396:13): [True: 4.44k, False: 0]
  ------------------
22397|  4.44k|            &&
22398|  4.44k|            (a = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (22398:13): [True: 2, False: 4.44k]
  ------------------
22399|  9.66k|        )
22400|      2|        {
22401|      2|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'"));
22402|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ must be ahead of *" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22403|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22403:18): [True: 2, False: 0]
  |  Branch (22403:34): [True: 0, False: 0]
  |  Branch (22403:57): [True: 2, False: 0]
  ------------------
22404|      2|                p->error_indicator = 1;
22405|      2|                p->level--;
22406|      2|                return NULL;
22407|      2|            }
22408|      0|            goto done;
22409|      2|        }
22410|  9.66k|        p->mark = _mark;
22411|  9.66k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22412|  9.66k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[(lambda_slash_no_default | lambda_slash_with_default)] lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* '/'"));
22413|  9.66k|    }
22414|      0|    { // lambda_param_maybe_default+ '/' '*'
22415|  9.66k|        if (p->error_indicator) {
  ------------------
  |  Branch (22415:13): [True: 434, False: 9.22k]
  ------------------
22416|    434|            p->level--;
22417|    434|            return NULL;
22418|    434|        }
22419|  9.22k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'"));
22420|  9.22k|        Token * _literal;
22421|  9.22k|        asdl_seq * _loop1_75_var;
22422|  9.22k|        Token * a;
22423|  9.22k|        if (
22424|  9.22k|            (_loop1_75_var = _loop1_75_rule(p))  // lambda_param_maybe_default+
  ------------------
  |  Branch (22424:13): [True: 5.62k, False: 3.60k]
  ------------------
22425|  5.62k|            &&
22426|  5.62k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (22426:13): [True: 2.29k, False: 3.32k]
  ------------------
22427|  2.29k|            &&
22428|  2.29k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22428:13): [True: 5, False: 2.29k]
  ------------------
22429|  9.22k|        )
22430|      5|        {
22431|      5|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default+ '/' '*'"));
22432|      5|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected comma between / and *" );
  ------------------
  |  |  239|      5|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22433|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22433:18): [True: 5, False: 0]
  |  Branch (22433:34): [True: 0, False: 0]
  |  Branch (22433:57): [True: 5, False: 0]
  ------------------
22434|      5|                p->error_indicator = 1;
22435|      5|                p->level--;
22436|      5|                return NULL;
22437|      5|            }
22438|      0|            goto done;
22439|      5|        }
22440|  9.22k|        p->mark = _mark;
22441|  9.22k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
22442|  9.22k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default+ '/' '*'"));
22443|  9.22k|    }
22444|  9.22k|    _res = NULL;
22445|  9.22k|  done:
22446|  9.22k|    p->level--;
22447|  9.22k|    return _res;
22448|  9.22k|}
parser.c:_tmp_128_rule:
35292|  19.5k|{
35293|  19.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  39.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35293:9): [True: 0, False: 19.5k]
  |  Branch (35293:35): [True: 0, False: 19.5k]
  ------------------
35294|      0|        _Pypegen_stack_overflow(p);
35295|      0|    }
35296|  19.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (35296:9): [True: 0, False: 19.5k]
  ------------------
35297|      0|        p->level--;
35298|      0|        return NULL;
35299|      0|    }
35300|  19.5k|    void * _res = NULL;
35301|  19.5k|    int _mark = p->mark;
35302|  19.5k|    { // lambda_slash_no_default
35303|  19.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (35303:13): [True: 0, False: 19.5k]
  ------------------
35304|      0|            p->level--;
35305|      0|            return NULL;
35306|      0|        }
35307|  19.5k|        D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default"));
35308|  19.5k|        asdl_arg_seq* lambda_slash_no_default_var;
35309|  19.5k|        if (
35310|  19.5k|            (lambda_slash_no_default_var = lambda_slash_no_default_rule(p))  // lambda_slash_no_default
  ------------------
  |  Branch (35310:13): [True: 3.73k, False: 15.8k]
  ------------------
35311|  19.5k|        )
35312|  3.73k|        {
35313|  3.73k|            D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default"));
35314|  3.73k|            _res = lambda_slash_no_default_var;
35315|  3.73k|            goto done;
35316|  3.73k|        }
35317|  15.8k|        p->mark = _mark;
35318|  15.8k|        D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ',
35319|  15.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default"));
35320|  15.8k|    }
35321|      0|    { // lambda_slash_with_default
35322|  15.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (35322:13): [True: 2, False: 15.8k]
  ------------------
35323|      2|            p->level--;
35324|      2|            return NULL;
35325|      2|        }
35326|  15.8k|        D(fprintf(stderr, "%*c> _tmp_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
35327|  15.8k|        SlashWithDefault* lambda_slash_with_default_var;
35328|  15.8k|        if (
35329|  15.8k|            (lambda_slash_with_default_var = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
  ------------------
  |  Branch (35329:13): [True: 1.37k, False: 14.4k]
  ------------------
35330|  15.8k|        )
35331|  1.37k|        {
35332|  1.37k|            D(fprintf(stderr, "%*c+ _tmp_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
35333|  1.37k|            _res = lambda_slash_with_default_var;
35334|  1.37k|            goto done;
35335|  1.37k|        }
35336|  14.4k|        p->mark = _mark;
35337|  14.4k|        D(fprintf(stderr, "%*c%s _tmp_128[%d-%d]: %s failed!\n", p->level, ' ',
35338|  14.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default"));
35339|  14.4k|    }
35340|  14.4k|    _res = NULL;
35341|  19.5k|  done:
35342|  19.5k|    p->level--;
35343|  19.5k|    return _res;
35344|  14.4k|}
parser.c:lambda_slash_with_default_rule:
15616|  41.3k|{
15617|  41.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  82.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15617:9): [True: 0, False: 41.3k]
  |  Branch (15617:35): [True: 0, False: 41.3k]
  ------------------
15618|      0|        _Pypegen_stack_overflow(p);
15619|      0|    }
15620|  41.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (15620:9): [True: 0, False: 41.3k]
  ------------------
15621|      0|        p->level--;
15622|      0|        return NULL;
15623|      0|    }
15624|  41.3k|    SlashWithDefault* _res = NULL;
15625|  41.3k|    int _mark = p->mark;
15626|  41.3k|    { // lambda_param_no_default* lambda_param_with_default+ '/' ','
15627|  41.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (15627:13): [True: 0, False: 41.3k]
  ------------------
15628|      0|            p->level--;
15629|      0|            return NULL;
15630|      0|        }
15631|  41.3k|        D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
15632|  41.3k|        Token * _literal;
15633|  41.3k|        Token * _literal_1;
15634|  41.3k|        asdl_seq * a;
15635|  41.3k|        asdl_seq * b;
15636|  41.3k|        if (
15637|  41.3k|            (a = _loop0_70_rule(p))  // lambda_param_no_default*
  ------------------
  |  Branch (15637:13): [True: 41.3k, False: 0]
  ------------------
15638|  41.3k|            &&
15639|  41.3k|            (b = _loop1_73_rule(p))  // lambda_param_with_default+
  ------------------
  |  Branch (15639:13): [True: 7.77k, False: 33.6k]
  ------------------
15640|  7.77k|            &&
15641|  7.77k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (15641:13): [True: 3.09k, False: 4.68k]
  ------------------
15642|  3.09k|            &&
15643|  3.09k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (15643:13): [True: 2.77k, False: 313]
  ------------------
15644|  41.3k|        )
15645|  2.77k|        {
15646|  2.77k|            D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
15647|  2.77k|            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
15648|  2.77k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15648:18): [True: 0, False: 2.77k]
  |  Branch (15648:34): [True: 0, False: 2.77k]
  |  Branch (15648:57): [True: 0, False: 0]
  ------------------
15649|      0|                p->error_indicator = 1;
15650|      0|                p->level--;
15651|      0|                return NULL;
15652|      0|            }
15653|  2.77k|            goto done;
15654|  2.77k|        }
15655|  38.6k|        p->mark = _mark;
15656|  38.6k|        D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
15657|  38.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','"));
15658|  38.6k|    }
15659|      0|    { // lambda_param_no_default* lambda_param_with_default+ '/' &':'
15660|  38.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (15660:13): [True: 323, False: 38.2k]
  ------------------
15661|    323|            p->level--;
15662|    323|            return NULL;
15663|    323|        }
15664|  38.2k|        D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
15665|  38.2k|        Token * _literal;
15666|  38.2k|        asdl_seq * a;
15667|  38.2k|        asdl_seq * b;
15668|  38.2k|        if (
15669|  38.2k|            (a = _loop0_70_rule(p))  // lambda_param_no_default*
  ------------------
  |  Branch (15669:13): [True: 38.2k, False: 0]
  ------------------
15670|  38.2k|            &&
15671|  38.2k|            (b = _loop1_73_rule(p))  // lambda_param_with_default+
  ------------------
  |  Branch (15671:13): [True: 4.99k, False: 33.3k]
  ------------------
15672|  4.99k|            &&
15673|  4.99k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (15673:13): [True: 312, False: 4.68k]
  ------------------
15674|    312|            &&
15675|    312|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
  ------------------
  |  Branch (15675:13): [True: 263, False: 49]
  ------------------
15676|  38.2k|        )
15677|    263|        {
15678|    263|            D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
15679|    263|            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
15680|    263|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15680:18): [True: 0, False: 263]
  |  Branch (15680:34): [True: 0, False: 263]
  |  Branch (15680:57): [True: 0, False: 0]
  ------------------
15681|      0|                p->error_indicator = 1;
15682|      0|                p->level--;
15683|      0|                return NULL;
15684|      0|            }
15685|    263|            goto done;
15686|    263|        }
15687|  38.0k|        p->mark = _mark;
15688|  38.0k|        D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
15689|  38.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'"));
15690|  38.0k|    }
15691|  38.0k|    _res = NULL;
15692|  41.0k|  done:
15693|  41.0k|    p->level--;
15694|  41.0k|    return _res;
15695|  38.0k|}
parser.c:_loop1_73_rule:
31882|  98.8k|{
31883|  98.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   197k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31883:9): [True: 0, False: 98.8k]
  |  Branch (31883:35): [True: 0, False: 98.8k]
  ------------------
31884|      0|        _Pypegen_stack_overflow(p);
31885|      0|    }
31886|  98.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (31886:9): [True: 0, False: 98.8k]
  ------------------
31887|      0|        p->level--;
31888|      0|        return NULL;
31889|      0|    }
31890|  98.8k|    void *_res = NULL;
31891|  98.8k|    int _mark = p->mark;
31892|  98.8k|    void **_children = PyMem_Malloc(sizeof(void *));
31893|  98.8k|    if (!_children) {
  ------------------
  |  Branch (31893:9): [True: 0, False: 98.8k]
  ------------------
31894|      0|        p->error_indicator = 1;
31895|      0|        PyErr_NoMemory();
31896|      0|        p->level--;
31897|      0|        return NULL;
31898|      0|    }
31899|  98.8k|    Py_ssize_t _children_capacity = 1;
31900|  98.8k|    Py_ssize_t _n = 0;
31901|  98.8k|    { // lambda_param_with_default
31902|  98.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (31902:13): [True: 0, False: 98.8k]
  ------------------
31903|      0|            p->level--;
31904|      0|            return NULL;
31905|      0|        }
31906|  98.8k|        D(fprintf(stderr, "%*c> _loop1_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
31907|  98.8k|        NameDefaultPair* lambda_param_with_default_var;
31908|  98.8k|        while (
31909|   119k|            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
  ------------------
  |  Branch (31909:13): [True: 20.5k, False: 98.8k]
  ------------------
31910|  98.8k|        )
31911|  20.5k|        {
31912|  20.5k|            _res = lambda_param_with_default_var;
31913|  20.5k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31913:17): [True: 2.41k, False: 18.1k]
  ------------------
31914|  2.41k|                _children_capacity *= 2;
31915|  2.41k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31916|  2.41k|                if (!_new_children) {
  ------------------
  |  Branch (31916:21): [True: 0, False: 2.41k]
  ------------------
31917|      0|                    PyMem_Free(_children);
31918|      0|                    p->error_indicator = 1;
31919|      0|                    PyErr_NoMemory();
31920|      0|                    p->level--;
31921|      0|                    return NULL;
31922|      0|                }
31923|  2.41k|                _children = _new_children;
31924|  2.41k|            }
31925|  20.5k|            _children[_n++] = _res;
31926|  20.5k|            _mark = p->mark;
31927|  20.5k|        }
31928|  98.8k|        p->mark = _mark;
31929|  98.8k|        D(fprintf(stderr, "%*c%s _loop1_73[%d-%d]: %s failed!\n", p->level, ' ',
31930|  98.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
31931|  98.8k|    }
31932|  98.8k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (31932:9): [True: 83.5k, False: 15.2k]
  |  Branch (31932:20): [True: 124, False: 15.1k]
  ------------------
31933|  83.6k|        PyMem_Free(_children);
31934|  83.6k|        p->level--;
31935|  83.6k|        return NULL;
31936|  83.6k|    }
31937|  15.1k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31938|  15.1k|    if (!_seq) {
  ------------------
  |  Branch (31938:9): [True: 0, False: 15.1k]
  ------------------
31939|      0|        PyMem_Free(_children);
31940|      0|        p->error_indicator = 1;
31941|      0|        PyErr_NoMemory();
31942|      0|        p->level--;
31943|      0|        return NULL;
31944|      0|    }
31945|  35.4k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  20.3k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  35.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31945:28): [True: 20.3k, False: 15.1k]
  ------------------
31946|  15.1k|    PyMem_Free(_children);
31947|  15.1k|    p->level--;
31948|  15.1k|    return _seq;
31949|  15.1k|}
parser.c:lambda_param_with_default_rule:
15969|   128k|{
15970|   128k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   257k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15970:9): [True: 0, False: 128k]
  |  Branch (15970:35): [True: 0, False: 128k]
  ------------------
15971|      0|        _Pypegen_stack_overflow(p);
15972|      0|    }
15973|   128k|    if (p->error_indicator) {
  ------------------
  |  Branch (15973:9): [True: 0, False: 128k]
  ------------------
15974|      0|        p->level--;
15975|      0|        return NULL;
15976|      0|    }
15977|   128k|    NameDefaultPair* _res = NULL;
15978|   128k|    int _mark = p->mark;
15979|   128k|    { // lambda_param default ','
15980|   128k|        if (p->error_indicator) {
  ------------------
  |  Branch (15980:13): [True: 0, False: 128k]
  ------------------
15981|      0|            p->level--;
15982|      0|            return NULL;
15983|      0|        }
15984|   128k|        D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
15985|   128k|        Token * _literal;
15986|   128k|        arg_ty a;
15987|   128k|        expr_ty c;
15988|   128k|        if (
15989|   128k|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (15989:13): [True: 29.9k, False: 98.6k]
  ------------------
15990|  29.9k|            &&
15991|  29.9k|            (c = default_rule(p))  // default
  ------------------
  |  Branch (15991:13): [True: 28.3k, False: 1.59k]
  ------------------
15992|  28.3k|            &&
15993|  28.3k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (15993:13): [True: 18.4k, False: 9.96k]
  ------------------
15994|   128k|        )
15995|  18.4k|        {
15996|  18.4k|            D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default ','"));
15997|  18.4k|            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
15998|  18.4k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15998:18): [True: 0, False: 18.4k]
  |  Branch (15998:34): [True: 0, False: 18.4k]
  |  Branch (15998:57): [True: 0, False: 0]
  ------------------
15999|      0|                p->error_indicator = 1;
16000|      0|                p->level--;
16001|      0|                return NULL;
16002|      0|            }
16003|  18.4k|            goto done;
16004|  18.4k|        }
16005|   110k|        p->mark = _mark;
16006|   110k|        D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
16007|   110k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default ','"));
16008|   110k|    }
16009|      0|    { // lambda_param default &':'
16010|   110k|        if (p->error_indicator) {
  ------------------
  |  Branch (16010:13): [True: 355, False: 109k]
  ------------------
16011|    355|            p->level--;
16012|    355|            return NULL;
16013|    355|        }
16014|   109k|        D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
16015|   109k|        arg_ty a;
16016|   109k|        expr_ty c;
16017|   109k|        if (
16018|   109k|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (16018:13): [True: 11.2k, False: 98.6k]
  ------------------
16019|  11.2k|            &&
16020|  11.2k|            (c = default_rule(p))  // default
  ------------------
  |  Branch (16020:13): [True: 9.96k, False: 1.24k]
  ------------------
16021|  9.96k|            &&
16022|  9.96k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
  ------------------
  |  Branch (16022:13): [True: 3.09k, False: 6.87k]
  ------------------
16023|   109k|        )
16024|  3.09k|        {
16025|  3.09k|            D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'"));
16026|  3.09k|            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16027|  3.09k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16027:18): [True: 0, False: 3.09k]
  |  Branch (16027:34): [True: 0, False: 3.09k]
  |  Branch (16027:57): [True: 0, False: 0]
  ------------------
16028|      0|                p->error_indicator = 1;
16029|      0|                p->level--;
16030|      0|                return NULL;
16031|      0|            }
16032|  3.09k|            goto done;
16033|  3.09k|        }
16034|   106k|        p->mark = _mark;
16035|   106k|        D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
16036|   106k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default &':'"));
16037|   106k|    }
16038|   106k|    _res = NULL;
16039|   128k|  done:
16040|   128k|    p->level--;
16041|   128k|    return _res;
16042|   106k|}
parser.c:lambda_param_rule:
16125|   909k|{
16126|   909k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.81M|#  define MAXSTACK 6000
  ------------------
  |  Branch (16126:9): [True: 0, False: 909k]
  |  Branch (16126:35): [True: 0, False: 909k]
  ------------------
16127|      0|        _Pypegen_stack_overflow(p);
16128|      0|    }
16129|   909k|    if (p->error_indicator) {
  ------------------
  |  Branch (16129:9): [True: 0, False: 909k]
  ------------------
16130|      0|        p->level--;
16131|      0|        return NULL;
16132|      0|    }
16133|   909k|    arg_ty _res = NULL;
16134|   909k|    int _mark = p->mark;
16135|   909k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (16135:9): [True: 24.6k, False: 885k]
  |  Branch (16135:31): [True: 37, False: 24.6k]
  ------------------
16136|     37|        p->error_indicator = 1;
16137|     37|        p->level--;
16138|     37|        return NULL;
16139|     37|    }
16140|   909k|    int _start_lineno = p->tokens[_mark]->lineno;
16141|   909k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   909k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 909k]
  |  |  ------------------
  ------------------
16142|   909k|    int _start_col_offset = p->tokens[_mark]->col_offset;
16143|   909k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   909k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 909k]
  |  |  ------------------
  ------------------
16144|   909k|    { // NAME
16145|   909k|        if (p->error_indicator) {
  ------------------
  |  Branch (16145:13): [True: 0, False: 909k]
  ------------------
16146|      0|            p->level--;
16147|      0|            return NULL;
16148|      0|        }
16149|   909k|        D(fprintf(stderr, "%*c> lambda_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
16150|   909k|        expr_ty a;
16151|   909k|        if (
16152|   909k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (16152:13): [True: 314k, False: 595k]
  ------------------
16153|   909k|        )
16154|   314k|        {
16155|   314k|            D(fprintf(stderr, "%*c+ lambda_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
16156|   314k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
16157|   314k|            if (_token == NULL) {
  ------------------
  |  Branch (16157:17): [True: 0, False: 314k]
  ------------------
16158|      0|                p->level--;
16159|      0|                return NULL;
16160|      0|            }
16161|   314k|            int _end_lineno = _token->end_lineno;
16162|   314k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   314k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 314k]
  |  |  ------------------
  ------------------
16163|   314k|            int _end_col_offset = _token->end_col_offset;
16164|   314k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   314k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 314k]
  |  |  ------------------
  ------------------
16165|   314k|            _res = _PyAST_arg ( a -> v . Name . id , NULL , NULL , EXTRA );
  ------------------
  |  |  307|   314k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
16166|   314k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16166:18): [True: 0, False: 314k]
  |  Branch (16166:34): [True: 0, False: 314k]
  |  Branch (16166:57): [True: 0, False: 0]
  ------------------
16167|      0|                p->error_indicator = 1;
16168|      0|                p->level--;
16169|      0|                return NULL;
16170|      0|            }
16171|   314k|            goto done;
16172|   314k|        }
16173|   595k|        p->mark = _mark;
16174|   595k|        D(fprintf(stderr, "%*c%s lambda_param[%d-%d]: %s failed!\n", p->level, ' ',
16175|   595k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
16176|   595k|    }
16177|   595k|    _res = NULL;
16178|   909k|  done:
16179|   909k|    p->level--;
16180|   909k|    return _res;
16181|   595k|}
parser.c:default_rule:
 5974|   112k|{
 5975|   112k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   225k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5975:9): [True: 0, False: 112k]
  |  Branch (5975:35): [True: 0, False: 112k]
  ------------------
 5976|      0|        _Pypegen_stack_overflow(p);
 5977|      0|    }
 5978|   112k|    if (p->error_indicator) {
  ------------------
  |  Branch (5978:9): [True: 0, False: 112k]
  ------------------
 5979|      0|        p->level--;
 5980|      0|        return NULL;
 5981|      0|    }
 5982|   112k|    expr_ty _res = NULL;
 5983|   112k|    int _mark = p->mark;
 5984|   112k|    { // '=' expression
 5985|   112k|        if (p->error_indicator) {
  ------------------
  |  Branch (5985:13): [True: 0, False: 112k]
  ------------------
 5986|      0|            p->level--;
 5987|      0|            return NULL;
 5988|      0|        }
 5989|   112k|        D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression"));
 5990|   112k|        Token * _literal;
 5991|   112k|        expr_ty a;
 5992|   112k|        if (
 5993|   112k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (5993:13): [True: 79.3k, False: 33.2k]
  ------------------
 5994|  79.3k|            &&
 5995|  79.3k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (5995:13): [True: 76.2k, False: 3.09k]
  ------------------
 5996|   112k|        )
 5997|  76.2k|        {
 5998|  76.2k|            D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression"));
 5999|  76.2k|            _res = a;
 6000|  76.2k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6000:18): [True: 0, False: 76.2k]
  |  Branch (6000:34): [True: 0, False: 76.2k]
  |  Branch (6000:57): [True: 0, False: 0]
  ------------------
 6001|      0|                p->error_indicator = 1;
 6002|      0|                p->level--;
 6003|      0|                return NULL;
 6004|      0|            }
 6005|  76.2k|            goto done;
 6006|  76.2k|        }
 6007|  36.3k|        p->mark = _mark;
 6008|  36.3k|        D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ',
 6009|  36.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression"));
 6010|  36.3k|    }
 6011|  36.3k|    if (p->call_invalid_rules) { // invalid_default
  ------------------
  |  Branch (6011:9): [True: 31.2k, False: 5.14k]
  ------------------
 6012|  31.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (6012:13): [True: 615, False: 30.6k]
  ------------------
 6013|    615|            p->level--;
 6014|    615|            return NULL;
 6015|    615|        }
 6016|  30.6k|        D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_default"));
 6017|  30.6k|        void *invalid_default_var;
 6018|  30.6k|        if (
 6019|  30.6k|            (invalid_default_var = invalid_default_rule(p))  // invalid_default
  ------------------
  |  Branch (6019:13): [True: 0, False: 30.6k]
  ------------------
 6020|  30.6k|        )
 6021|      0|        {
 6022|      0|            D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_default"));
 6023|      0|            _res = invalid_default_var;
 6024|      0|            goto done;
 6025|      0|        }
 6026|  30.6k|        p->mark = _mark;
 6027|  30.6k|        D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ',
 6028|  30.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_default"));
 6029|  30.6k|    }
 6030|  35.7k|    _res = NULL;
 6031|   111k|  done:
 6032|   111k|    p->level--;
 6033|   111k|    return _res;
 6034|  35.7k|}
parser.c:invalid_default_rule:
21862|  30.6k|{
21863|  30.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  61.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21863:9): [True: 0, False: 30.6k]
  |  Branch (21863:35): [True: 0, False: 30.6k]
  ------------------
21864|      0|        _Pypegen_stack_overflow(p);
21865|      0|    }
21866|  30.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (21866:9): [True: 0, False: 30.6k]
  ------------------
21867|      0|        p->level--;
21868|      0|        return NULL;
21869|      0|    }
21870|  30.6k|    void * _res = NULL;
21871|  30.6k|    int _mark = p->mark;
21872|  30.6k|    { // '=' &(')' | ',')
21873|  30.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (21873:13): [True: 0, False: 30.6k]
  ------------------
21874|      0|            p->level--;
21875|      0|            return NULL;
21876|      0|        }
21877|  30.6k|        D(fprintf(stderr, "%*c> invalid_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')"));
21878|  30.6k|        Token * a;
21879|  30.6k|        if (
21880|  30.6k|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (21880:13): [True: 1.48k, False: 29.1k]
  ------------------
21881|  1.48k|            &&
21882|  1.48k|            _PyPegen_lookahead(1, _tmp_124_rule, p)
  ------------------
  |  Branch (21882:13): [True: 11, False: 1.47k]
  ------------------
21883|  30.6k|        )
21884|     11|        {
21885|     11|            D(fprintf(stderr, "%*c+ invalid_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' &(')' | ',')"));
21886|     11|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected default value expression" );
  ------------------
  |  |  239|     11|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21887|     11|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21887:18): [True: 11, False: 0]
  |  Branch (21887:34): [True: 0, False: 0]
  |  Branch (21887:57): [True: 11, False: 0]
  ------------------
21888|     11|                p->error_indicator = 1;
21889|     11|                p->level--;
21890|     11|                return NULL;
21891|     11|            }
21892|      0|            goto done;
21893|     11|        }
21894|  30.6k|        p->mark = _mark;
21895|  30.6k|        D(fprintf(stderr, "%*c%s invalid_default[%d-%d]: %s failed!\n", p->level, ' ',
21896|  30.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' &(')' | ',')"));
21897|  30.6k|    }
21898|  30.6k|    _res = NULL;
21899|  30.6k|  done:
21900|  30.6k|    p->level--;
21901|  30.6k|    return _res;
21902|  30.6k|}
parser.c:_tmp_124_rule:
35042|  1.48k|{
35043|  1.48k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.97k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35043:9): [True: 0, False: 1.48k]
  |  Branch (35043:35): [True: 0, False: 1.48k]
  ------------------
35044|      0|        _Pypegen_stack_overflow(p);
35045|      0|    }
35046|  1.48k|    if (p->error_indicator) {
  ------------------
  |  Branch (35046:9): [True: 0, False: 1.48k]
  ------------------
35047|      0|        p->level--;
35048|      0|        return NULL;
35049|      0|    }
35050|  1.48k|    void * _res = NULL;
35051|  1.48k|    int _mark = p->mark;
35052|  1.48k|    { // ')'
35053|  1.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (35053:13): [True: 0, False: 1.48k]
  ------------------
35054|      0|            p->level--;
35055|      0|            return NULL;
35056|      0|        }
35057|  1.48k|        D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
35058|  1.48k|        Token * _literal;
35059|  1.48k|        if (
35060|  1.48k|            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (35060:13): [True: 3, False: 1.48k]
  ------------------
35061|  1.48k|        )
35062|      3|        {
35063|      3|            D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
35064|      3|            _res = _literal;
35065|      3|            goto done;
35066|      3|        }
35067|  1.48k|        p->mark = _mark;
35068|  1.48k|        D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ',
35069|  1.48k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
35070|  1.48k|    }
35071|      0|    { // ','
35072|  1.48k|        if (p->error_indicator) {
  ------------------
  |  Branch (35072:13): [True: 0, False: 1.48k]
  ------------------
35073|      0|            p->level--;
35074|      0|            return NULL;
35075|      0|        }
35076|  1.48k|        D(fprintf(stderr, "%*c> _tmp_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35077|  1.48k|        Token * _literal;
35078|  1.48k|        if (
35079|  1.48k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35079:13): [True: 8, False: 1.47k]
  ------------------
35080|  1.48k|        )
35081|      8|        {
35082|      8|            D(fprintf(stderr, "%*c+ _tmp_124[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35083|      8|            _res = _literal;
35084|      8|            goto done;
35085|      8|        }
35086|  1.47k|        p->mark = _mark;
35087|  1.47k|        D(fprintf(stderr, "%*c%s _tmp_124[%d-%d]: %s failed!\n", p->level, ' ',
35088|  1.47k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35089|  1.47k|    }
35090|  1.47k|    _res = NULL;
35091|  1.48k|  done:
35092|  1.48k|    p->level--;
35093|  1.48k|    return _res;
35094|  1.47k|}
parser.c:_loop0_74_rule:
31954|  26.5k|{
31955|  26.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  53.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31955:9): [True: 0, False: 26.5k]
  |  Branch (31955:35): [True: 0, False: 26.5k]
  ------------------
31956|      0|        _Pypegen_stack_overflow(p);
31957|      0|    }
31958|  26.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (31958:9): [True: 0, False: 26.5k]
  ------------------
31959|      0|        p->level--;
31960|      0|        return NULL;
31961|      0|    }
31962|  26.5k|    void *_res = NULL;
31963|  26.5k|    int _mark = p->mark;
31964|  26.5k|    void **_children = PyMem_Malloc(sizeof(void *));
31965|  26.5k|    if (!_children) {
  ------------------
  |  Branch (31965:9): [True: 0, False: 26.5k]
  ------------------
31966|      0|        p->error_indicator = 1;
31967|      0|        PyErr_NoMemory();
31968|      0|        p->level--;
31969|      0|        return NULL;
31970|      0|    }
31971|  26.5k|    Py_ssize_t _children_capacity = 1;
31972|  26.5k|    Py_ssize_t _n = 0;
31973|  26.5k|    { // lambda_param_maybe_default
31974|  26.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (31974:13): [True: 0, False: 26.5k]
  ------------------
31975|      0|            p->level--;
31976|      0|            return NULL;
31977|      0|        }
31978|  26.5k|        D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
31979|  26.5k|        NameDefaultPair* lambda_param_maybe_default_var;
31980|  26.5k|        while (
31981|  40.3k|            (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p))  // lambda_param_maybe_default
  ------------------
  |  Branch (31981:13): [True: 13.8k, False: 26.5k]
  ------------------
31982|  26.5k|        )
31983|  13.8k|        {
31984|  13.8k|            _res = lambda_param_maybe_default_var;
31985|  13.8k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31985:17): [True: 1.70k, False: 12.1k]
  ------------------
31986|  1.70k|                _children_capacity *= 2;
31987|  1.70k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31988|  1.70k|                if (!_new_children) {
  ------------------
  |  Branch (31988:21): [True: 0, False: 1.70k]
  ------------------
31989|      0|                    PyMem_Free(_children);
31990|      0|                    p->error_indicator = 1;
31991|      0|                    PyErr_NoMemory();
31992|      0|                    p->level--;
31993|      0|                    return NULL;
31994|      0|                }
31995|  1.70k|                _children = _new_children;
31996|  1.70k|            }
31997|  13.8k|            _children[_n++] = _res;
31998|  13.8k|            _mark = p->mark;
31999|  13.8k|        }
32000|  26.5k|        p->mark = _mark;
32001|  26.5k|        D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ',
32002|  26.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default"));
32003|  26.5k|    }
32004|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32005|  26.5k|    if (!_seq) {
  ------------------
  |  Branch (32005:9): [True: 0, False: 26.5k]
  ------------------
32006|      0|        PyMem_Free(_children);
32007|      0|        p->error_indicator = 1;
32008|      0|        PyErr_NoMemory();
32009|      0|        p->level--;
32010|      0|        return NULL;
32011|      0|    }
32012|  40.3k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  13.8k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  40.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32012:28): [True: 13.8k, False: 26.5k]
  ------------------
32013|  26.5k|    PyMem_Free(_children);
32014|  26.5k|    p->level--;
32015|  26.5k|    return _seq;
32016|  26.5k|}
parser.c:lambda_param_maybe_default_rule:
16047|  60.0k|{
16048|  60.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   120k|#  define MAXSTACK 6000
  ------------------
  |  Branch (16048:9): [True: 0, False: 60.0k]
  |  Branch (16048:35): [True: 0, False: 60.0k]
  ------------------
16049|      0|        _Pypegen_stack_overflow(p);
16050|      0|    }
16051|  60.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (16051:9): [True: 0, False: 60.0k]
  ------------------
16052|      0|        p->level--;
16053|      0|        return NULL;
16054|      0|    }
16055|  60.0k|    NameDefaultPair* _res = NULL;
16056|  60.0k|    int _mark = p->mark;
16057|  60.0k|    { // lambda_param default? ','
16058|  60.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (16058:13): [True: 0, False: 60.0k]
  ------------------
16059|      0|            p->level--;
16060|      0|            return NULL;
16061|      0|        }
16062|  60.0k|        D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
16063|  60.0k|        Token * _literal;
16064|  60.0k|        arg_ty a;
16065|  60.0k|        void *c;
16066|  60.0k|        if (
16067|  60.0k|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (16067:13): [True: 29.2k, False: 30.7k]
  ------------------
16068|  29.2k|            &&
16069|  29.2k|            (c = default_rule(p), !p->error_indicator)  // default?
  ------------------
  |  Branch (16069:13): [True: 28.2k, False: 1.07k]
  ------------------
16070|  28.2k|            &&
16071|  28.2k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (16071:13): [True: 9.29k, False: 18.9k]
  ------------------
16072|  60.0k|        )
16073|  9.29k|        {
16074|  9.29k|            D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','"));
16075|  9.29k|            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16076|  9.29k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16076:18): [True: 0, False: 9.29k]
  |  Branch (16076:34): [True: 0, False: 9.29k]
  |  Branch (16076:57): [True: 0, False: 0]
  ------------------
16077|      0|                p->error_indicator = 1;
16078|      0|                p->level--;
16079|      0|                return NULL;
16080|      0|            }
16081|  9.29k|            goto done;
16082|  9.29k|        }
16083|  50.7k|        p->mark = _mark;
16084|  50.7k|        D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
16085|  50.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? ','"));
16086|  50.7k|    }
16087|      0|    { // lambda_param default? &':'
16088|  50.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (16088:13): [True: 1.08k, False: 49.6k]
  ------------------
16089|  1.08k|            p->level--;
16090|  1.08k|            return NULL;
16091|  1.08k|        }
16092|  49.6k|        D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
16093|  49.6k|        arg_ty a;
16094|  49.6k|        void *c;
16095|  49.6k|        if (
16096|  49.6k|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (16096:13): [True: 18.9k, False: 30.7k]
  ------------------
16097|  18.9k|            &&
16098|  18.9k|            (c = default_rule(p), !p->error_indicator)  // default?
  ------------------
  |  Branch (16098:13): [True: 18.9k, False: 0]
  ------------------
16099|  18.9k|            &&
16100|  18.9k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
  ------------------
  |  Branch (16100:13): [True: 12.0k, False: 6.91k]
  ------------------
16101|  49.6k|        )
16102|  12.0k|        {
16103|  12.0k|            D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'"));
16104|  12.0k|            _res = _PyPegen_name_default_pair ( p , a , c , NULL );
16105|  12.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (16105:18): [True: 0, False: 12.0k]
  |  Branch (16105:34): [True: 0, False: 12.0k]
  |  Branch (16105:57): [True: 0, False: 0]
  ------------------
16106|      0|                p->error_indicator = 1;
16107|      0|                p->level--;
16108|      0|                return NULL;
16109|      0|            }
16110|  12.0k|            goto done;
16111|  12.0k|        }
16112|  37.6k|        p->mark = _mark;
16113|  37.6k|        D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
16114|  37.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? &':'"));
16115|  37.6k|    }
16116|  37.6k|    _res = NULL;
16117|  58.9k|  done:
16118|  58.9k|    p->level--;
16119|  58.9k|    return _res;
16120|  37.6k|}
parser.c:lambda_slash_no_default_rule:
15536|  47.8k|{
15537|  47.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  95.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15537:9): [True: 0, False: 47.8k]
  |  Branch (15537:35): [True: 0, False: 47.8k]
  ------------------
15538|      0|        _Pypegen_stack_overflow(p);
15539|      0|    }
15540|  47.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (15540:9): [True: 0, False: 47.8k]
  ------------------
15541|      0|        p->level--;
15542|      0|        return NULL;
15543|      0|    }
15544|  47.8k|    asdl_arg_seq* _res = NULL;
15545|  47.8k|    int _mark = p->mark;
15546|  47.8k|    { // lambda_param_no_default+ '/' ','
15547|  47.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (15547:13): [True: 0, False: 47.8k]
  ------------------
15548|      0|            p->level--;
15549|      0|            return NULL;
15550|      0|        }
15551|  47.8k|        D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
15552|  47.8k|        Token * _literal;
15553|  47.8k|        Token * _literal_1;
15554|  47.8k|        asdl_arg_seq* a;
15555|  47.8k|        if (
15556|  47.8k|            (a = (asdl_arg_seq*)_loop1_72_rule(p))  // lambda_param_no_default+
  ------------------
  |  Branch (15556:13): [True: 23.2k, False: 24.5k]
  ------------------
15557|  23.2k|            &&
15558|  23.2k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (15558:13): [True: 8.33k, False: 14.9k]
  ------------------
15559|  8.33k|            &&
15560|  8.33k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (15560:13): [True: 7.89k, False: 437]
  ------------------
15561|  47.8k|        )
15562|  7.89k|        {
15563|  7.89k|            D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','"));
15564|  7.89k|            _res = a;
15565|  7.89k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15565:18): [True: 0, False: 7.89k]
  |  Branch (15565:34): [True: 0, False: 7.89k]
  |  Branch (15565:57): [True: 0, False: 0]
  ------------------
15566|      0|                p->error_indicator = 1;
15567|      0|                p->level--;
15568|      0|                return NULL;
15569|      0|            }
15570|  7.89k|            goto done;
15571|  7.89k|        }
15572|  39.9k|        p->mark = _mark;
15573|  39.9k|        D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
15574|  39.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' ','"));
15575|  39.9k|    }
15576|      0|    { // lambda_param_no_default+ '/' &':'
15577|  39.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (15577:13): [True: 14, False: 39.8k]
  ------------------
15578|     14|            p->level--;
15579|     14|            return NULL;
15580|     14|        }
15581|  39.8k|        D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
15582|  39.8k|        Token * _literal;
15583|  39.8k|        asdl_arg_seq* a;
15584|  39.8k|        if (
15585|  39.8k|            (a = (asdl_arg_seq*)_loop1_72_rule(p))  // lambda_param_no_default+
  ------------------
  |  Branch (15585:13): [True: 15.3k, False: 24.5k]
  ------------------
15586|  15.3k|            &&
15587|  15.3k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (15587:13): [True: 436, False: 14.9k]
  ------------------
15588|    436|            &&
15589|    436|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
  ------------------
  |  Branch (15589:13): [True: 371, False: 65]
  ------------------
15590|  39.8k|        )
15591|    371|        {
15592|    371|            D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
15593|    371|            _res = a;
15594|    371|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15594:18): [True: 0, False: 371]
  |  Branch (15594:34): [True: 0, False: 371]
  |  Branch (15594:57): [True: 0, False: 0]
  ------------------
15595|      0|                p->error_indicator = 1;
15596|      0|                p->level--;
15597|      0|                return NULL;
15598|      0|            }
15599|    371|            goto done;
15600|    371|        }
15601|  39.5k|        p->mark = _mark;
15602|  39.5k|        D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
15603|  39.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' &':'"));
15604|  39.5k|    }
15605|  39.5k|    _res = NULL;
15606|  47.7k|  done:
15607|  47.7k|    p->level--;
15608|  47.7k|    return _res;
15609|  39.5k|}
parser.c:_loop1_72_rule:
31810|   102k|{
31811|   102k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   204k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31811:9): [True: 0, False: 102k]
  |  Branch (31811:35): [True: 0, False: 102k]
  ------------------
31812|      0|        _Pypegen_stack_overflow(p);
31813|      0|    }
31814|   102k|    if (p->error_indicator) {
  ------------------
  |  Branch (31814:9): [True: 0, False: 102k]
  ------------------
31815|      0|        p->level--;
31816|      0|        return NULL;
31817|      0|    }
31818|   102k|    void *_res = NULL;
31819|   102k|    int _mark = p->mark;
31820|   102k|    void **_children = PyMem_Malloc(sizeof(void *));
31821|   102k|    if (!_children) {
  ------------------
  |  Branch (31821:9): [True: 0, False: 102k]
  ------------------
31822|      0|        p->error_indicator = 1;
31823|      0|        PyErr_NoMemory();
31824|      0|        p->level--;
31825|      0|        return NULL;
31826|      0|    }
31827|   102k|    Py_ssize_t _children_capacity = 1;
31828|   102k|    Py_ssize_t _n = 0;
31829|   102k|    { // lambda_param_no_default
31830|   102k|        if (p->error_indicator) {
  ------------------
  |  Branch (31830:13): [True: 0, False: 102k]
  ------------------
31831|      0|            p->level--;
31832|      0|            return NULL;
31833|      0|        }
31834|   102k|        D(fprintf(stderr, "%*c> _loop1_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
31835|   102k|        arg_ty lambda_param_no_default_var;
31836|   102k|        while (
31837|   147k|            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (31837:13): [True: 45.4k, False: 102k]
  ------------------
31838|   102k|        )
31839|  45.4k|        {
31840|  45.4k|            _res = lambda_param_no_default_var;
31841|  45.4k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31841:17): [True: 1.14k, False: 44.3k]
  ------------------
31842|  1.14k|                _children_capacity *= 2;
31843|  1.14k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31844|  1.14k|                if (!_new_children) {
  ------------------
  |  Branch (31844:21): [True: 0, False: 1.14k]
  ------------------
31845|      0|                    PyMem_Free(_children);
31846|      0|                    p->error_indicator = 1;
31847|      0|                    PyErr_NoMemory();
31848|      0|                    p->level--;
31849|      0|                    return NULL;
31850|      0|                }
31851|  1.14k|                _children = _new_children;
31852|  1.14k|            }
31853|  45.4k|            _children[_n++] = _res;
31854|  45.4k|            _mark = p->mark;
31855|  45.4k|        }
31856|   102k|        p->mark = _mark;
31857|   102k|        D(fprintf(stderr, "%*c%s _loop1_72[%d-%d]: %s failed!\n", p->level, ' ',
31858|   102k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
31859|   102k|    }
31860|   102k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (31860:9): [True: 59.1k, False: 43.3k]
  |  Branch (31860:20): [True: 2, False: 43.3k]
  ------------------
31861|  59.1k|        PyMem_Free(_children);
31862|  59.1k|        p->level--;
31863|  59.1k|        return NULL;
31864|  59.1k|    }
31865|  43.3k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31866|  43.3k|    if (!_seq) {
  ------------------
  |  Branch (31866:9): [True: 0, False: 43.3k]
  ------------------
31867|      0|        PyMem_Free(_children);
31868|      0|        p->error_indicator = 1;
31869|      0|        PyErr_NoMemory();
31870|      0|        p->level--;
31871|      0|        return NULL;
31872|      0|    }
31873|  88.7k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  45.4k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  88.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31873:28): [True: 45.4k, False: 43.3k]
  ------------------
31874|  43.3k|    PyMem_Free(_children);
31875|  43.3k|    p->level--;
31876|  43.3k|    return _seq;
31877|  43.3k|}
parser.c:_loop0_70_rule:
31676|   101k|{
31677|   101k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   203k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31677:9): [True: 0, False: 101k]
  |  Branch (31677:35): [True: 0, False: 101k]
  ------------------
31678|      0|        _Pypegen_stack_overflow(p);
31679|      0|    }
31680|   101k|    if (p->error_indicator) {
  ------------------
  |  Branch (31680:9): [True: 0, False: 101k]
  ------------------
31681|      0|        p->level--;
31682|      0|        return NULL;
31683|      0|    }
31684|   101k|    void *_res = NULL;
31685|   101k|    int _mark = p->mark;
31686|   101k|    void **_children = PyMem_Malloc(sizeof(void *));
31687|   101k|    if (!_children) {
  ------------------
  |  Branch (31687:9): [True: 0, False: 101k]
  ------------------
31688|      0|        p->error_indicator = 1;
31689|      0|        PyErr_NoMemory();
31690|      0|        p->level--;
31691|      0|        return NULL;
31692|      0|    }
31693|   101k|    Py_ssize_t _children_capacity = 1;
31694|   101k|    Py_ssize_t _n = 0;
31695|   101k|    { // lambda_param_no_default
31696|   101k|        if (p->error_indicator) {
  ------------------
  |  Branch (31696:13): [True: 0, False: 101k]
  ------------------
31697|      0|            p->level--;
31698|      0|            return NULL;
31699|      0|        }
31700|   101k|        D(fprintf(stderr, "%*c> _loop0_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
31701|   101k|        arg_ty lambda_param_no_default_var;
31702|   101k|        while (
31703|   133k|            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (31703:13): [True: 31.6k, False: 101k]
  ------------------
31704|   101k|        )
31705|  31.6k|        {
31706|  31.6k|            _res = lambda_param_no_default_var;
31707|  31.6k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31707:17): [True: 860, False: 30.8k]
  ------------------
31708|    860|                _children_capacity *= 2;
31709|    860|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31710|    860|                if (!_new_children) {
  ------------------
  |  Branch (31710:21): [True: 0, False: 860]
  ------------------
31711|      0|                    PyMem_Free(_children);
31712|      0|                    p->error_indicator = 1;
31713|      0|                    PyErr_NoMemory();
31714|      0|                    p->level--;
31715|      0|                    return NULL;
31716|      0|                }
31717|    860|                _children = _new_children;
31718|    860|            }
31719|  31.6k|            _children[_n++] = _res;
31720|  31.6k|            _mark = p->mark;
31721|  31.6k|        }
31722|   101k|        p->mark = _mark;
31723|   101k|        D(fprintf(stderr, "%*c%s _loop0_70[%d-%d]: %s failed!\n", p->level, ' ',
31724|   101k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
31725|   101k|    }
31726|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31727|   101k|    if (!_seq) {
  ------------------
  |  Branch (31727:9): [True: 0, False: 101k]
  ------------------
31728|      0|        PyMem_Free(_children);
31729|      0|        p->error_indicator = 1;
31730|      0|        PyErr_NoMemory();
31731|      0|        p->level--;
31732|      0|        return NULL;
31733|      0|    }
31734|   133k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  31.6k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   133k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31734:28): [True: 31.6k, False: 101k]
  ------------------
31735|   101k|    PyMem_Free(_children);
31736|   101k|    p->level--;
31737|   101k|    return _seq;
31738|   101k|}
parser.c:invalid_lambda_parameters_helper_rule:
22455|  9.67k|{
22456|  9.67k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22456:9): [True: 0, False: 9.67k]
  |  Branch (22456:35): [True: 0, False: 9.67k]
  ------------------
22457|      0|        _Pypegen_stack_overflow(p);
22458|      0|    }
22459|  9.67k|    if (p->error_indicator) {
  ------------------
  |  Branch (22459:9): [True: 0, False: 9.67k]
  ------------------
22460|      0|        p->level--;
22461|      0|        return NULL;
22462|      0|    }
22463|  9.67k|    void * _res = NULL;
22464|  9.67k|    int _mark = p->mark;
22465|  9.67k|    { // lambda_slash_with_default
22466|  9.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (22466:13): [True: 0, False: 9.67k]
  ------------------
22467|      0|            p->level--;
22468|      0|            return NULL;
22469|      0|        }
22470|  9.67k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
22471|  9.67k|        SlashWithDefault* a;
22472|  9.67k|        if (
22473|  9.67k|            (a = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
  ------------------
  |  Branch (22473:13): [True: 668, False: 9.01k]
  ------------------
22474|  9.67k|        )
22475|    668|        {
22476|    668|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default"));
22477|    668|            _res = _PyPegen_singleton_seq ( p , a );
22478|    668|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22478:18): [True: 0, False: 668]
  |  Branch (22478:34): [True: 0, False: 668]
  |  Branch (22478:57): [True: 0, False: 0]
  ------------------
22479|      0|                p->error_indicator = 1;
22480|      0|                p->level--;
22481|      0|                return NULL;
22482|      0|            }
22483|    668|            goto done;
22484|    668|        }
22485|  9.01k|        p->mark = _mark;
22486|  9.01k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
22487|  9.01k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default"));
22488|  9.01k|    }
22489|      0|    { // lambda_param_with_default+
22490|  9.01k|        if (p->error_indicator) {
  ------------------
  |  Branch (22490:13): [True: 0, False: 9.01k]
  ------------------
22491|      0|            p->level--;
22492|      0|            return NULL;
22493|      0|        }
22494|  9.01k|        D(fprintf(stderr, "%*c> invalid_lambda_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
22495|  9.01k|        asdl_seq * _loop1_73_var;
22496|  9.01k|        if (
22497|  9.01k|            (_loop1_73_var = _loop1_73_rule(p))  // lambda_param_with_default+
  ------------------
  |  Branch (22497:13): [True: 1.00k, False: 8.00k]
  ------------------
22498|  9.01k|        )
22499|  1.00k|        {
22500|  1.00k|            D(fprintf(stderr, "%*c+ invalid_lambda_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+"));
22501|  1.00k|            _res = _loop1_73_var;
22502|  1.00k|            goto done;
22503|  1.00k|        }
22504|  8.00k|        p->mark = _mark;
22505|  8.00k|        D(fprintf(stderr, "%*c%s invalid_lambda_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
22506|  8.00k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+"));
22507|  8.00k|    }
22508|  8.00k|    _res = NULL;
22509|  9.67k|  done:
22510|  9.67k|    p->level--;
22511|  9.67k|    return _res;
22512|  8.00k|}
parser.c:lambda_param_no_default_rule:
15897|   299k|{
15898|   299k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   598k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15898:9): [True: 0, False: 299k]
  |  Branch (15898:35): [True: 0, False: 299k]
  ------------------
15899|      0|        _Pypegen_stack_overflow(p);
15900|      0|    }
15901|   299k|    if (p->error_indicator) {
  ------------------
  |  Branch (15901:9): [True: 0, False: 299k]
  ------------------
15902|      0|        p->level--;
15903|      0|        return NULL;
15904|      0|    }
15905|   299k|    arg_ty _res = NULL;
15906|   299k|    int _mark = p->mark;
15907|   299k|    { // lambda_param ','
15908|   299k|        if (p->error_indicator) {
  ------------------
  |  Branch (15908:13): [True: 0, False: 299k]
  ------------------
15909|      0|            p->level--;
15910|      0|            return NULL;
15911|      0|        }
15912|   299k|        D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
15913|   299k|        Token * _literal;
15914|   299k|        arg_ty a;
15915|   299k|        if (
15916|   299k|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (15916:13): [True: 131k, False: 167k]
  ------------------
15917|   131k|            &&
15918|   131k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (15918:13): [True: 42.2k, False: 89.2k]
  ------------------
15919|   299k|        )
15920|  42.2k|        {
15921|  42.2k|            D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param ','"));
15922|  42.2k|            _res = a;
15923|  42.2k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15923:18): [True: 0, False: 42.2k]
  |  Branch (15923:34): [True: 0, False: 42.2k]
  |  Branch (15923:57): [True: 0, False: 0]
  ------------------
15924|      0|                p->error_indicator = 1;
15925|      0|                p->level--;
15926|      0|                return NULL;
15927|      0|            }
15928|  42.2k|            goto done;
15929|  42.2k|        }
15930|   256k|        p->mark = _mark;
15931|   256k|        D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
15932|   256k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param ','"));
15933|   256k|    }
15934|      0|    { // lambda_param &':'
15935|   256k|        if (p->error_indicator) {
  ------------------
  |  Branch (15935:13): [True: 23, False: 256k]
  ------------------
15936|     23|            p->level--;
15937|     23|            return NULL;
15938|     23|        }
15939|   256k|        D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
15940|   256k|        arg_ty a;
15941|   256k|        if (
15942|   256k|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (15942:13): [True: 89.2k, False: 167k]
  ------------------
15943|  89.2k|            &&
15944|  89.2k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11)  // token=':'
  ------------------
  |  Branch (15944:13): [True: 46.3k, False: 42.9k]
  ------------------
15945|   256k|        )
15946|  46.3k|        {
15947|  46.3k|            D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param &':'"));
15948|  46.3k|            _res = a;
15949|  46.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15949:18): [True: 0, False: 46.3k]
  |  Branch (15949:34): [True: 0, False: 46.3k]
  |  Branch (15949:57): [True: 0, False: 0]
  ------------------
15950|      0|                p->error_indicator = 1;
15951|      0|                p->level--;
15952|      0|                return NULL;
15953|      0|            }
15954|  46.3k|            goto done;
15955|  46.3k|        }
15956|   210k|        p->mark = _mark;
15957|   210k|        D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
15958|   210k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param &':'"));
15959|   210k|    }
15960|   210k|    _res = NULL;
15961|   299k|  done:
15962|   299k|    p->level--;
15963|   299k|    return _res;
15964|   210k|}
parser.c:_gather_130_rule:
35425|     57|{
35426|     57|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    114|#  define MAXSTACK 6000
  ------------------
  |  Branch (35426:9): [True: 0, False: 57]
  |  Branch (35426:35): [True: 0, False: 57]
  ------------------
35427|      0|        _Pypegen_stack_overflow(p);
35428|      0|    }
35429|     57|    if (p->error_indicator) {
  ------------------
  |  Branch (35429:9): [True: 0, False: 57]
  ------------------
35430|      0|        p->level--;
35431|      0|        return NULL;
35432|      0|    }
35433|     57|    asdl_seq * _res = NULL;
35434|     57|    int _mark = p->mark;
35435|     57|    { // lambda_param _loop0_129
35436|     57|        if (p->error_indicator) {
  ------------------
  |  Branch (35436:13): [True: 0, False: 57]
  ------------------
35437|      0|            p->level--;
35438|      0|            return NULL;
35439|      0|        }
35440|     57|        D(fprintf(stderr, "%*c> _gather_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_129"));
35441|     57|        arg_ty elem;
35442|     57|        asdl_seq * seq;
35443|     57|        if (
35444|     57|            (elem = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (35444:13): [True: 46, False: 11]
  ------------------
35445|     46|            &&
35446|     46|            (seq = _loop0_129_rule(p))  // _loop0_129
  ------------------
  |  Branch (35446:13): [True: 46, False: 0]
  ------------------
35447|     57|        )
35448|     46|        {
35449|     46|            D(fprintf(stderr, "%*c+ _gather_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param _loop0_129"));
35450|     46|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35451|     46|            goto done;
35452|     46|        }
35453|     11|        p->mark = _mark;
35454|     11|        D(fprintf(stderr, "%*c%s _gather_130[%d-%d]: %s failed!\n", p->level, ' ',
35455|     11|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param _loop0_129"));
35456|     11|    }
35457|     11|    _res = NULL;
35458|     57|  done:
35459|     57|    p->level--;
35460|     57|    return _res;
35461|     11|}
parser.c:_loop0_129_rule:
35349|     46|{
35350|     46|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|     92|#  define MAXSTACK 6000
  ------------------
  |  Branch (35350:9): [True: 0, False: 46]
  |  Branch (35350:35): [True: 0, False: 46]
  ------------------
35351|      0|        _Pypegen_stack_overflow(p);
35352|      0|    }
35353|     46|    if (p->error_indicator) {
  ------------------
  |  Branch (35353:9): [True: 0, False: 46]
  ------------------
35354|      0|        p->level--;
35355|      0|        return NULL;
35356|      0|    }
35357|     46|    void *_res = NULL;
35358|     46|    int _mark = p->mark;
35359|     46|    void **_children = PyMem_Malloc(sizeof(void *));
35360|     46|    if (!_children) {
  ------------------
  |  Branch (35360:9): [True: 0, False: 46]
  ------------------
35361|      0|        p->error_indicator = 1;
35362|      0|        PyErr_NoMemory();
35363|      0|        p->level--;
35364|      0|        return NULL;
35365|      0|    }
35366|     46|    Py_ssize_t _children_capacity = 1;
35367|     46|    Py_ssize_t _n = 0;
35368|     46|    { // ',' lambda_param
35369|     46|        if (p->error_indicator) {
  ------------------
  |  Branch (35369:13): [True: 0, False: 46]
  ------------------
35370|      0|            p->level--;
35371|      0|            return NULL;
35372|      0|        }
35373|     46|        D(fprintf(stderr, "%*c> _loop0_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' lambda_param"));
35374|     46|        Token * _literal;
35375|     46|        arg_ty elem;
35376|     46|        while (
35377|    315|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35377:13): [True: 288, False: 27]
  ------------------
35378|    288|            &&
35379|    288|            (elem = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (35379:13): [True: 269, False: 19]
  ------------------
35380|     46|        )
35381|    269|        {
35382|    269|            _res = elem;
35383|    269|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (35383:18): [True: 0, False: 269]
  |  Branch (35383:34): [True: 0, False: 269]
  |  Branch (35383:57): [True: 0, False: 0]
  ------------------
35384|      0|                p->error_indicator = 1;
35385|      0|                PyMem_Free(_children);
35386|      0|                p->level--;
35387|      0|                return NULL;
35388|      0|            }
35389|    269|            if (_n == _children_capacity) {
  ------------------
  |  Branch (35389:17): [True: 85, False: 184]
  ------------------
35390|     85|                _children_capacity *= 2;
35391|     85|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35392|     85|                if (!_new_children) {
  ------------------
  |  Branch (35392:21): [True: 0, False: 85]
  ------------------
35393|      0|                    PyMem_Free(_children);
35394|      0|                    p->error_indicator = 1;
35395|      0|                    PyErr_NoMemory();
35396|      0|                    p->level--;
35397|      0|                    return NULL;
35398|      0|                }
35399|     85|                _children = _new_children;
35400|     85|            }
35401|    269|            _children[_n++] = _res;
35402|    269|            _mark = p->mark;
35403|    269|        }
35404|     46|        p->mark = _mark;
35405|     46|        D(fprintf(stderr, "%*c%s _loop0_129[%d-%d]: %s failed!\n", p->level, ' ',
35406|     46|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' lambda_param"));
35407|     46|    }
35408|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35409|     46|    if (!_seq) {
  ------------------
  |  Branch (35409:9): [True: 0, False: 46]
  ------------------
35410|      0|        PyMem_Free(_children);
35411|      0|        p->error_indicator = 1;
35412|      0|        PyErr_NoMemory();
35413|      0|        p->level--;
35414|      0|        return NULL;
35415|      0|    }
35416|    315|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|    269|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    315|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (35416:28): [True: 269, False: 46]
  ------------------
35417|     46|    PyMem_Free(_children);
35418|     46|    p->level--;
35419|     46|    return _seq;
35420|     46|}
parser.c:_tmp_131_rule:
35466|  4.51k|{
35467|  4.51k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.02k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35467:9): [True: 0, False: 4.51k]
  |  Branch (35467:35): [True: 0, False: 4.51k]
  ------------------
35468|      0|        _Pypegen_stack_overflow(p);
35469|      0|    }
35470|  4.51k|    if (p->error_indicator) {
  ------------------
  |  Branch (35470:9): [True: 0, False: 4.51k]
  ------------------
35471|      0|        p->level--;
35472|      0|        return NULL;
35473|      0|    }
35474|  4.51k|    void * _res = NULL;
35475|  4.51k|    int _mark = p->mark;
35476|  4.51k|    { // ','
35477|  4.51k|        if (p->error_indicator) {
  ------------------
  |  Branch (35477:13): [True: 0, False: 4.51k]
  ------------------
35478|      0|            p->level--;
35479|      0|            return NULL;
35480|      0|        }
35481|  4.51k|        D(fprintf(stderr, "%*c> _tmp_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35482|  4.51k|        Token * _literal;
35483|  4.51k|        if (
35484|  4.51k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35484:13): [True: 1.92k, False: 2.59k]
  ------------------
35485|  4.51k|        )
35486|  1.92k|        {
35487|  1.92k|            D(fprintf(stderr, "%*c+ _tmp_131[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35488|  1.92k|            _res = _literal;
35489|  1.92k|            goto done;
35490|  1.92k|        }
35491|  2.59k|        p->mark = _mark;
35492|  2.59k|        D(fprintf(stderr, "%*c%s _tmp_131[%d-%d]: %s failed!\n", p->level, ' ',
35493|  2.59k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35494|  2.59k|    }
35495|      0|    { // lambda_param_no_default
35496|  2.59k|        if (p->error_indicator) {
  ------------------
  |  Branch (35496:13): [True: 1, False: 2.59k]
  ------------------
35497|      1|            p->level--;
35498|      1|            return NULL;
35499|      1|        }
35500|  2.59k|        D(fprintf(stderr, "%*c> _tmp_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35501|  2.59k|        arg_ty lambda_param_no_default_var;
35502|  2.59k|        if (
35503|  2.59k|            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (35503:13): [True: 2.52k, False: 70]
  ------------------
35504|  2.59k|        )
35505|  2.52k|        {
35506|  2.52k|            D(fprintf(stderr, "%*c+ _tmp_131[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35507|  2.52k|            _res = lambda_param_no_default_var;
35508|  2.52k|            goto done;
35509|  2.52k|        }
35510|     70|        p->mark = _mark;
35511|     70|        D(fprintf(stderr, "%*c%s _tmp_131[%d-%d]: %s failed!\n", p->level, ' ',
35512|     70|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
35513|     70|    }
35514|     70|    _res = NULL;
35515|  4.51k|  done:
35516|  4.51k|    p->level--;
35517|  4.51k|    return _res;
35518|     70|}
parser.c:_loop1_75_rule:
32021|  12.1k|{
32022|  12.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  24.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (32022:9): [True: 0, False: 12.1k]
  |  Branch (32022:35): [True: 0, False: 12.1k]
  ------------------
32023|      0|        _Pypegen_stack_overflow(p);
32024|      0|    }
32025|  12.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (32025:9): [True: 0, False: 12.1k]
  ------------------
32026|      0|        p->level--;
32027|      0|        return NULL;
32028|      0|    }
32029|  12.1k|    void *_res = NULL;
32030|  12.1k|    int _mark = p->mark;
32031|  12.1k|    void **_children = PyMem_Malloc(sizeof(void *));
32032|  12.1k|    if (!_children) {
  ------------------
  |  Branch (32032:9): [True: 0, False: 12.1k]
  ------------------
32033|      0|        p->error_indicator = 1;
32034|      0|        PyErr_NoMemory();
32035|      0|        p->level--;
32036|      0|        return NULL;
32037|      0|    }
32038|  12.1k|    Py_ssize_t _children_capacity = 1;
32039|  12.1k|    Py_ssize_t _n = 0;
32040|  12.1k|    { // lambda_param_maybe_default
32041|  12.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (32041:13): [True: 0, False: 12.1k]
  ------------------
32042|      0|            p->level--;
32043|      0|            return NULL;
32044|      0|        }
32045|  12.1k|        D(fprintf(stderr, "%*c> _loop1_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default"));
32046|  12.1k|        NameDefaultPair* lambda_param_maybe_default_var;
32047|  12.1k|        while (
32048|  19.6k|            (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p))  // lambda_param_maybe_default
  ------------------
  |  Branch (32048:13): [True: 7.47k, False: 12.1k]
  ------------------
32049|  12.1k|        )
32050|  7.47k|        {
32051|  7.47k|            _res = lambda_param_maybe_default_var;
32052|  7.47k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (32052:17): [True: 1.18k, False: 6.29k]
  ------------------
32053|  1.18k|                _children_capacity *= 2;
32054|  1.18k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
32055|  1.18k|                if (!_new_children) {
  ------------------
  |  Branch (32055:21): [True: 0, False: 1.18k]
  ------------------
32056|      0|                    PyMem_Free(_children);
32057|      0|                    p->error_indicator = 1;
32058|      0|                    PyErr_NoMemory();
32059|      0|                    p->level--;
32060|      0|                    return NULL;
32061|      0|                }
32062|  1.18k|                _children = _new_children;
32063|  1.18k|            }
32064|  7.47k|            _children[_n++] = _res;
32065|  7.47k|            _mark = p->mark;
32066|  7.47k|        }
32067|  12.1k|        p->mark = _mark;
32068|  12.1k|        D(fprintf(stderr, "%*c%s _loop1_75[%d-%d]: %s failed!\n", p->level, ' ',
32069|  12.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default"));
32070|  12.1k|    }
32071|  12.1k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (32071:9): [True: 6.28k, False: 5.87k]
  |  Branch (32071:20): [True: 22, False: 5.85k]
  ------------------
32072|  6.30k|        PyMem_Free(_children);
32073|  6.30k|        p->level--;
32074|  6.30k|        return NULL;
32075|  6.30k|    }
32076|  5.85k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
32077|  5.85k|    if (!_seq) {
  ------------------
  |  Branch (32077:9): [True: 0, False: 5.85k]
  ------------------
32078|      0|        PyMem_Free(_children);
32079|      0|        p->error_indicator = 1;
32080|      0|        PyErr_NoMemory();
32081|      0|        p->level--;
32082|      0|        return NULL;
32083|      0|    }
32084|  13.2k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  7.44k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  13.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (32084:28): [True: 7.44k, False: 5.85k]
  ------------------
32085|  5.85k|    PyMem_Free(_children);
32086|  5.85k|    p->level--;
32087|  5.85k|    return _seq;
32088|  5.85k|}
parser.c:lambda_parameters_rule:
15371|  18.5k|{
15372|  18.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  37.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15372:9): [True: 0, False: 18.5k]
  |  Branch (15372:35): [True: 0, False: 18.5k]
  ------------------
15373|      0|        _Pypegen_stack_overflow(p);
15374|      0|    }
15375|  18.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (15375:9): [True: 0, False: 18.5k]
  ------------------
15376|      0|        p->level--;
15377|      0|        return NULL;
15378|      0|    }
15379|  18.5k|    arguments_ty _res = NULL;
15380|  18.5k|    int _mark = p->mark;
15381|  18.5k|    { // lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?
15382|  18.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (15382:13): [True: 0, False: 18.5k]
  ------------------
15383|      0|            p->level--;
15384|      0|            return NULL;
15385|      0|        }
15386|  18.5k|        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
15387|  18.5k|        asdl_arg_seq* a;
15388|  18.5k|        asdl_arg_seq* b;
15389|  18.5k|        asdl_seq * c;
15390|  18.5k|        void *d;
15391|  18.5k|        if (
15392|  18.5k|            (a = lambda_slash_no_default_rule(p))  // lambda_slash_no_default
  ------------------
  |  Branch (15392:13): [True: 2.65k, False: 15.9k]
  ------------------
15393|  2.65k|            &&
15394|  2.65k|            (b = (asdl_arg_seq*)_loop0_70_rule(p))  // lambda_param_no_default*
  ------------------
  |  Branch (15394:13): [True: 2.65k, False: 0]
  ------------------
15395|  2.65k|            &&
15396|  2.65k|            (c = _loop0_71_rule(p))  // lambda_param_with_default*
  ------------------
  |  Branch (15396:13): [True: 2.65k, False: 1]
  ------------------
15397|  2.65k|            &&
15398|  2.65k|            (d = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
  ------------------
  |  Branch (15398:13): [True: 2.31k, False: 348]
  ------------------
15399|  18.5k|        )
15400|  2.31k|        {
15401|  2.31k|            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
15402|  2.31k|            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , a , NULL , b , c , d ) );
  ------------------
  |  |  345|  2.31k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
15403|  2.31k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15403:18): [True: 0, False: 2.31k]
  |  Branch (15403:34): [True: 0, False: 2.31k]
  |  Branch (15403:57): [True: 0, False: 0]
  ------------------
15404|      0|                p->error_indicator = 1;
15405|      0|                p->level--;
15406|      0|                return NULL;
15407|      0|            }
15408|  2.31k|            goto done;
15409|  2.31k|        }
15410|  16.2k|        p->mark = _mark;
15411|  16.2k|        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15412|  16.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?"));
15413|  16.2k|    }
15414|      0|    { // lambda_slash_with_default lambda_param_with_default* lambda_star_etc?
15415|  16.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (15415:13): [True: 361, False: 15.9k]
  ------------------
15416|    361|            p->level--;
15417|    361|            return NULL;
15418|    361|        }
15419|  15.9k|        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
15420|  15.9k|        SlashWithDefault* a;
15421|  15.9k|        asdl_seq * b;
15422|  15.9k|        void *c;
15423|  15.9k|        if (
15424|  15.9k|            (a = lambda_slash_with_default_rule(p))  // lambda_slash_with_default
  ------------------
  |  Branch (15424:13): [True: 999, False: 14.9k]
  ------------------
15425|    999|            &&
15426|    999|            (b = _loop0_71_rule(p))  // lambda_param_with_default*
  ------------------
  |  Branch (15426:13): [True: 999, False: 0]
  ------------------
15427|    999|            &&
15428|    999|            (c = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
  ------------------
  |  Branch (15428:13): [True: 967, False: 32]
  ------------------
15429|  15.9k|        )
15430|    967|        {
15431|    967|            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
15432|    967|            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ) );
  ------------------
  |  |  345|    967|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
15433|    967|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15433:18): [True: 0, False: 967]
  |  Branch (15433:34): [True: 0, False: 967]
  |  Branch (15433:57): [True: 0, False: 0]
  ------------------
15434|      0|                p->error_indicator = 1;
15435|      0|                p->level--;
15436|      0|                return NULL;
15437|      0|            }
15438|    967|            goto done;
15439|    967|        }
15440|  14.9k|        p->mark = _mark;
15441|  14.9k|        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15442|  14.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?"));
15443|  14.9k|    }
15444|      0|    { // lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?
15445|  14.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (15445:13): [True: 204, False: 14.7k]
  ------------------
15446|    204|            p->level--;
15447|    204|            return NULL;
15448|    204|        }
15449|  14.7k|        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
15450|  14.7k|        asdl_arg_seq* a;
15451|  14.7k|        asdl_seq * b;
15452|  14.7k|        void *c;
15453|  14.7k|        if (
15454|  14.7k|            (a = (asdl_arg_seq*)_loop1_72_rule(p))  // lambda_param_no_default+
  ------------------
  |  Branch (15454:13): [True: 4.63k, False: 10.1k]
  ------------------
15455|  4.63k|            &&
15456|  4.63k|            (b = _loop0_71_rule(p))  // lambda_param_with_default*
  ------------------
  |  Branch (15456:13): [True: 4.63k, False: 0]
  ------------------
15457|  4.63k|            &&
15458|  4.63k|            (c = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
  ------------------
  |  Branch (15458:13): [True: 4.62k, False: 9]
  ------------------
15459|  14.7k|        )
15460|  4.62k|        {
15461|  4.62k|            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
15462|  4.62k|            _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
15463|  4.62k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15463:18): [True: 0, False: 4.62k]
  |  Branch (15463:34): [True: 0, False: 4.62k]
  |  Branch (15463:57): [True: 0, False: 0]
  ------------------
15464|      0|                p->error_indicator = 1;
15465|      0|                p->level--;
15466|      0|                return NULL;
15467|      0|            }
15468|  4.62k|            goto done;
15469|  4.62k|        }
15470|  10.1k|        p->mark = _mark;
15471|  10.1k|        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15472|  10.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?"));
15473|  10.1k|    }
15474|      0|    { // lambda_param_with_default+ lambda_star_etc?
15475|  10.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (15475:13): [True: 9, False: 10.1k]
  ------------------
15476|      9|            p->level--;
15477|      9|            return NULL;
15478|      9|        }
15479|  10.1k|        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
15480|  10.1k|        asdl_seq * a;
15481|  10.1k|        void *b;
15482|  10.1k|        if (
15483|  10.1k|            (a = _loop1_73_rule(p))  // lambda_param_with_default+
  ------------------
  |  Branch (15483:13): [True: 1.34k, False: 8.76k]
  ------------------
15484|  1.34k|            &&
15485|  1.34k|            (b = lambda_star_etc_rule(p), !p->error_indicator)  // lambda_star_etc?
  ------------------
  |  Branch (15485:13): [True: 1.15k, False: 192]
  ------------------
15486|  10.1k|        )
15487|  1.15k|        {
15488|  1.15k|            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
15489|  1.15k|            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
15490|  1.15k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15490:18): [True: 0, False: 1.15k]
  |  Branch (15490:34): [True: 0, False: 1.15k]
  |  Branch (15490:57): [True: 0, False: 0]
  ------------------
15491|      0|                p->error_indicator = 1;
15492|      0|                p->level--;
15493|      0|                return NULL;
15494|      0|            }
15495|  1.15k|            goto done;
15496|  1.15k|        }
15497|  8.95k|        p->mark = _mark;
15498|  8.95k|        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15499|  8.95k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?"));
15500|  8.95k|    }
15501|      0|    { // lambda_star_etc
15502|  8.95k|        if (p->error_indicator) {
  ------------------
  |  Branch (15502:13): [True: 192, False: 8.76k]
  ------------------
15503|    192|            p->level--;
15504|    192|            return NULL;
15505|    192|        }
15506|  8.76k|        D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
15507|  8.76k|        StarEtc* a;
15508|  8.76k|        if (
15509|  8.76k|            (a = lambda_star_etc_rule(p))  // lambda_star_etc
  ------------------
  |  Branch (15509:13): [True: 5.78k, False: 2.97k]
  ------------------
15510|  8.76k|        )
15511|  5.78k|        {
15512|  5.78k|            D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_star_etc"));
15513|  5.78k|            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
15514|  5.78k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15514:18): [True: 0, False: 5.78k]
  |  Branch (15514:34): [True: 0, False: 5.78k]
  |  Branch (15514:57): [True: 0, False: 0]
  ------------------
15515|      0|                p->error_indicator = 1;
15516|      0|                p->level--;
15517|      0|                return NULL;
15518|      0|            }
15519|  5.78k|            goto done;
15520|  5.78k|        }
15521|  2.97k|        p->mark = _mark;
15522|  2.97k|        D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ',
15523|  2.97k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_star_etc"));
15524|  2.97k|    }
15525|  2.97k|    _res = NULL;
15526|  17.8k|  done:
15527|  17.8k|    p->level--;
15528|  17.8k|    return _res;
15529|  2.97k|}
parser.c:_loop0_71_rule:
31743|  8.29k|{
31744|  8.29k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  16.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (31744:9): [True: 0, False: 8.29k]
  |  Branch (31744:35): [True: 0, False: 8.29k]
  ------------------
31745|      0|        _Pypegen_stack_overflow(p);
31746|      0|    }
31747|  8.29k|    if (p->error_indicator) {
  ------------------
  |  Branch (31747:9): [True: 1, False: 8.29k]
  ------------------
31748|      1|        p->level--;
31749|      1|        return NULL;
31750|      1|    }
31751|  8.29k|    void *_res = NULL;
31752|  8.29k|    int _mark = p->mark;
31753|  8.29k|    void **_children = PyMem_Malloc(sizeof(void *));
31754|  8.29k|    if (!_children) {
  ------------------
  |  Branch (31754:9): [True: 0, False: 8.29k]
  ------------------
31755|      0|        p->error_indicator = 1;
31756|      0|        PyErr_NoMemory();
31757|      0|        p->level--;
31758|      0|        return NULL;
31759|      0|    }
31760|  8.29k|    Py_ssize_t _children_capacity = 1;
31761|  8.29k|    Py_ssize_t _n = 0;
31762|  8.29k|    { // lambda_param_with_default
31763|  8.29k|        if (p->error_indicator) {
  ------------------
  |  Branch (31763:13): [True: 0, False: 8.29k]
  ------------------
31764|      0|            p->level--;
31765|      0|            return NULL;
31766|      0|        }
31767|  8.29k|        D(fprintf(stderr, "%*c> _loop0_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default"));
31768|  8.29k|        NameDefaultPair* lambda_param_with_default_var;
31769|  8.29k|        while (
31770|  9.24k|            (lambda_param_with_default_var = lambda_param_with_default_rule(p))  // lambda_param_with_default
  ------------------
  |  Branch (31770:13): [True: 950, False: 8.29k]
  ------------------
31771|  8.29k|        )
31772|    950|        {
31773|    950|            _res = lambda_param_with_default_var;
31774|    950|            if (_n == _children_capacity) {
  ------------------
  |  Branch (31774:17): [True: 137, False: 813]
  ------------------
31775|    137|                _children_capacity *= 2;
31776|    137|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
31777|    137|                if (!_new_children) {
  ------------------
  |  Branch (31777:21): [True: 0, False: 137]
  ------------------
31778|      0|                    PyMem_Free(_children);
31779|      0|                    p->error_indicator = 1;
31780|      0|                    PyErr_NoMemory();
31781|      0|                    p->level--;
31782|      0|                    return NULL;
31783|      0|                }
31784|    137|                _children = _new_children;
31785|    137|            }
31786|    950|            _children[_n++] = _res;
31787|    950|            _mark = p->mark;
31788|    950|        }
31789|  8.29k|        p->mark = _mark;
31790|  8.29k|        D(fprintf(stderr, "%*c%s _loop0_71[%d-%d]: %s failed!\n", p->level, ' ',
31791|  8.29k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default"));
31792|  8.29k|    }
31793|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
31794|  8.29k|    if (!_seq) {
  ------------------
  |  Branch (31794:9): [True: 0, False: 8.29k]
  ------------------
31795|      0|        PyMem_Free(_children);
31796|      0|        p->error_indicator = 1;
31797|      0|        PyErr_NoMemory();
31798|      0|        p->level--;
31799|      0|        return NULL;
31800|      0|    }
31801|  9.24k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|    950|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.24k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (31801:28): [True: 950, False: 8.29k]
  ------------------
31802|  8.29k|    PyMem_Free(_children);
31803|  8.29k|    p->level--;
31804|  8.29k|    return _seq;
31805|  8.29k|}
parser.c:lambda_star_etc_rule:
15704|  18.4k|{
15705|  18.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  36.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15705:9): [True: 0, False: 18.4k]
  |  Branch (15705:35): [True: 0, False: 18.4k]
  ------------------
15706|      0|        _Pypegen_stack_overflow(p);
15707|      0|    }
15708|  18.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (15708:9): [True: 33, False: 18.3k]
  ------------------
15709|     33|        p->level--;
15710|     33|        return NULL;
15711|     33|    }
15712|  18.3k|    StarEtc* _res = NULL;
15713|  18.3k|    int _mark = p->mark;
15714|  18.3k|    if (p->call_invalid_rules) { // invalid_lambda_star_etc
  ------------------
  |  Branch (15714:9): [True: 9.22k, False: 9.14k]
  ------------------
15715|  9.22k|        if (p->error_indicator) {
  ------------------
  |  Branch (15715:13): [True: 0, False: 9.22k]
  ------------------
15716|      0|            p->level--;
15717|      0|            return NULL;
15718|      0|        }
15719|  9.22k|        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
15720|  9.22k|        void *invalid_lambda_star_etc_var;
15721|  9.22k|        if (
15722|  9.22k|            (invalid_lambda_star_etc_var = invalid_lambda_star_etc_rule(p))  // invalid_lambda_star_etc
  ------------------
  |  Branch (15722:13): [True: 0, False: 9.22k]
  ------------------
15723|  9.22k|        )
15724|      0|        {
15725|      0|            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc"));
15726|      0|            _res = invalid_lambda_star_etc_var;
15727|      0|            goto done;
15728|      0|        }
15729|  9.22k|        p->mark = _mark;
15730|  9.22k|        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15731|  9.22k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_star_etc"));
15732|  9.22k|    }
15733|  18.3k|    { // '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?
15734|  18.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (15734:13): [True: 10, False: 18.3k]
  ------------------
15735|     10|            p->level--;
15736|     10|            return NULL;
15737|     10|        }
15738|  18.3k|        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
15739|  18.3k|        Token * _literal;
15740|  18.3k|        arg_ty a;
15741|  18.3k|        asdl_seq * b;
15742|  18.3k|        void *c;
15743|  18.3k|        if (
15744|  18.3k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (15744:13): [True: 8.88k, False: 9.47k]
  ------------------
15745|  8.88k|            &&
15746|  8.88k|            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (15746:13): [True: 5.86k, False: 3.01k]
  ------------------
15747|  5.86k|            &&
15748|  5.86k|            (b = _loop0_74_rule(p))  // lambda_param_maybe_default*
  ------------------
  |  Branch (15748:13): [True: 5.86k, False: 0]
  ------------------
15749|  5.86k|            &&
15750|  5.86k|            (c = lambda_kwds_rule(p), !p->error_indicator)  // lambda_kwds?
  ------------------
  |  Branch (15750:13): [True: 5.79k, False: 75]
  ------------------
15751|  18.3k|        )
15752|  5.79k|        {
15753|  5.79k|            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
15754|  5.79k|            _res = _PyPegen_star_etc ( p , a , b , c );
15755|  5.79k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15755:18): [True: 0, False: 5.79k]
  |  Branch (15755:34): [True: 0, False: 5.79k]
  |  Branch (15755:57): [True: 0, False: 0]
  ------------------
15756|      0|                p->error_indicator = 1;
15757|      0|                p->level--;
15758|      0|                return NULL;
15759|      0|            }
15760|  5.79k|            goto done;
15761|  5.79k|        }
15762|  12.5k|        p->mark = _mark;
15763|  12.5k|        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15764|  12.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?"));
15765|  12.5k|    }
15766|      0|    { // '*' ',' lambda_param_maybe_default+ lambda_kwds?
15767|  12.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (15767:13): [True: 80, False: 12.4k]
  ------------------
15768|     80|            p->level--;
15769|     80|            return NULL;
15770|     80|        }
15771|  12.4k|        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
15772|  12.4k|        Token * _literal;
15773|  12.4k|        Token * _literal_1;
15774|  12.4k|        asdl_seq * b;
15775|  12.4k|        void *c;
15776|  12.4k|        if (
15777|  12.4k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (15777:13): [True: 3.01k, False: 9.47k]
  ------------------
15778|  3.01k|            &&
15779|  3.01k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (15779:13): [True: 2.92k, False: 88]
  ------------------
15780|  2.92k|            &&
15781|  2.92k|            (b = _loop1_75_rule(p))  // lambda_param_maybe_default+
  ------------------
  |  Branch (15781:13): [True: 225, False: 2.69k]
  ------------------
15782|    225|            &&
15783|    225|            (c = lambda_kwds_rule(p), !p->error_indicator)  // lambda_kwds?
  ------------------
  |  Branch (15783:13): [True: 224, False: 1]
  ------------------
15784|  12.4k|        )
15785|    224|        {
15786|    224|            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
15787|    224|            _res = _PyPegen_star_etc ( p , NULL , b , c );
15788|    224|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15788:18): [True: 0, False: 224]
  |  Branch (15788:34): [True: 0, False: 224]
  |  Branch (15788:57): [True: 0, False: 0]
  ------------------
15789|      0|                p->error_indicator = 1;
15790|      0|                p->level--;
15791|      0|                return NULL;
15792|      0|            }
15793|    224|            goto done;
15794|    224|        }
15795|  12.2k|        p->mark = _mark;
15796|  12.2k|        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15797|  12.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?"));
15798|  12.2k|    }
15799|      0|    { // lambda_kwds
15800|  12.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (15800:13): [True: 539, False: 11.7k]
  ------------------
15801|    539|            p->level--;
15802|    539|            return NULL;
15803|    539|        }
15804|  11.7k|        D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
15805|  11.7k|        arg_ty a;
15806|  11.7k|        if (
15807|  11.7k|            (a = lambda_kwds_rule(p))  // lambda_kwds
  ------------------
  |  Branch (15807:13): [True: 513, False: 11.2k]
  ------------------
15808|  11.7k|        )
15809|    513|        {
15810|    513|            D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_kwds"));
15811|    513|            _res = _PyPegen_star_etc ( p , NULL , NULL , a );
15812|    513|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15812:18): [True: 0, False: 513]
  |  Branch (15812:34): [True: 0, False: 513]
  |  Branch (15812:57): [True: 0, False: 0]
  ------------------
15813|      0|                p->error_indicator = 1;
15814|      0|                p->level--;
15815|      0|                return NULL;
15816|      0|            }
15817|    513|            goto done;
15818|    513|        }
15819|  11.2k|        p->mark = _mark;
15820|  11.2k|        D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
15821|  11.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_kwds"));
15822|  11.2k|    }
15823|  11.2k|    _res = NULL;
15824|  17.7k|  done:
15825|  17.7k|    p->level--;
15826|  17.7k|    return _res;
15827|  11.2k|}
parser.c:invalid_lambda_star_etc_rule:
22520|  9.22k|{
22521|  9.22k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22521:9): [True: 0, False: 9.22k]
  |  Branch (22521:35): [True: 0, False: 9.22k]
  ------------------
22522|      0|        _Pypegen_stack_overflow(p);
22523|      0|    }
22524|  9.22k|    if (p->error_indicator) {
  ------------------
  |  Branch (22524:9): [True: 0, False: 9.22k]
  ------------------
22525|      0|        p->level--;
22526|      0|        return NULL;
22527|      0|    }
22528|  9.22k|    void * _res = NULL;
22529|  9.22k|    int _mark = p->mark;
22530|  9.22k|    { // '*' (':' | ',' (':' | '**'))
22531|  9.22k|        if (p->error_indicator) {
  ------------------
  |  Branch (22531:13): [True: 0, False: 9.22k]
  ------------------
22532|      0|            p->level--;
22533|      0|            return NULL;
22534|      0|        }
22535|  9.22k|        D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
22536|  9.22k|        Token * _literal;
22537|  9.22k|        void *_tmp_132_var;
22538|  9.22k|        if (
22539|  9.22k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22539:13): [True: 4.07k, False: 5.14k]
  ------------------
22540|  4.07k|            &&
22541|  4.07k|            (_tmp_132_var = _tmp_132_rule(p))  // ':' | ',' (':' | '**')
  ------------------
  |  Branch (22541:13): [True: 5, False: 4.07k]
  ------------------
22542|  9.22k|        )
22543|      5|        {
22544|      5|            D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
22545|      5|            _res = RAISE_SYNTAX_ERROR ( "named parameters must follow bare *" );
  ------------------
  |  |  233|      5|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
22546|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22546:18): [True: 5, False: 0]
  |  Branch (22546:34): [True: 0, False: 0]
  |  Branch (22546:57): [True: 5, False: 0]
  ------------------
22547|      5|                p->error_indicator = 1;
22548|      5|                p->level--;
22549|      5|                return NULL;
22550|      5|            }
22551|      0|            goto done;
22552|      5|        }
22553|  9.21k|        p->mark = _mark;
22554|  9.21k|        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22555|  9.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (':' | ',' (':' | '**'))"));
22556|  9.21k|    }
22557|      0|    { // '*' lambda_param '='
22558|  9.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (22558:13): [True: 0, False: 9.21k]
  ------------------
22559|      0|            p->level--;
22560|      0|            return NULL;
22561|      0|        }
22562|  9.21k|        D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param '='"));
22563|  9.21k|        Token * _literal;
22564|  9.21k|        Token * a;
22565|  9.21k|        arg_ty lambda_param_var;
22566|  9.21k|        if (
22567|  9.21k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22567:13): [True: 4.07k, False: 5.14k]
  ------------------
22568|  4.07k|            &&
22569|  4.07k|            (lambda_param_var = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (22569:13): [True: 2.42k, False: 1.64k]
  ------------------
22570|  2.42k|            &&
22571|  2.42k|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (22571:13): [True: 1, False: 2.42k]
  ------------------
22572|  9.21k|        )
22573|      1|        {
22574|      1|            D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param '='"));
22575|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional parameter cannot have default value" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22576|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22576:18): [True: 1, False: 0]
  |  Branch (22576:34): [True: 0, False: 0]
  |  Branch (22576:57): [True: 1, False: 0]
  ------------------
22577|      1|                p->error_indicator = 1;
22578|      1|                p->level--;
22579|      1|                return NULL;
22580|      1|            }
22581|      0|            goto done;
22582|      1|        }
22583|  9.21k|        p->mark = _mark;
22584|  9.21k|        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22585|  9.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param '='"));
22586|  9.21k|    }
22587|      0|    { // '*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')
22588|  9.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (22588:13): [True: 0, False: 9.21k]
  ------------------
22589|      0|            p->level--;
22590|      0|            return NULL;
22591|      0|        }
22592|  9.21k|        D(fprintf(stderr, "%*c> invalid_lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')"));
22593|  9.21k|        Token * _literal;
22594|  9.21k|        asdl_seq * _loop0_74_var;
22595|  9.21k|        void *_tmp_133_var;
22596|  9.21k|        void *_tmp_133_var_1;
22597|  9.21k|        Token * a;
22598|  9.21k|        if (
22599|  9.21k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22599:13): [True: 4.07k, False: 5.14k]
  ------------------
22600|  4.07k|            &&
22601|  4.07k|            (_tmp_133_var = _tmp_133_rule(p))  // lambda_param_no_default | ','
  ------------------
  |  Branch (22601:13): [True: 4.00k, False: 66]
  ------------------
22602|  4.00k|            &&
22603|  4.00k|            (_loop0_74_var = _loop0_74_rule(p))  // lambda_param_maybe_default*
  ------------------
  |  Branch (22603:13): [True: 4.00k, False: 0]
  ------------------
22604|  4.00k|            &&
22605|  4.00k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22605:13): [True: 13, False: 3.99k]
  ------------------
22606|     13|            &&
22607|     13|            (_tmp_133_var_1 = _tmp_133_rule(p))  // lambda_param_no_default | ','
  ------------------
  |  Branch (22607:13): [True: 3, False: 10]
  ------------------
22608|  9.21k|        )
22609|      3|        {
22610|      3|            D(fprintf(stderr, "%*c+ invalid_lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')"));
22611|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* may appear only once" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22612|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22612:18): [True: 3, False: 0]
  |  Branch (22612:34): [True: 0, False: 0]
  |  Branch (22612:57): [True: 3, False: 0]
  ------------------
22613|      3|                p->error_indicator = 1;
22614|      3|                p->level--;
22615|      3|                return NULL;
22616|      3|            }
22617|      0|            goto done;
22618|      3|        }
22619|  9.21k|        p->mark = _mark;
22620|  9.21k|        D(fprintf(stderr, "%*c%s invalid_lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22621|  9.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (lambda_param_no_default | ',') lambda_param_maybe_default* '*' (lambda_param_no_default | ',')"));
22622|  9.21k|    }
22623|  9.21k|    _res = NULL;
22624|  9.21k|  done:
22625|  9.21k|    p->level--;
22626|  9.21k|    return _res;
22627|  9.21k|}
parser.c:_tmp_132_rule:
35523|  4.07k|{
35524|  4.07k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.15k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35524:9): [True: 0, False: 4.07k]
  |  Branch (35524:35): [True: 0, False: 4.07k]
  ------------------
35525|      0|        _Pypegen_stack_overflow(p);
35526|      0|    }
35527|  4.07k|    if (p->error_indicator) {
  ------------------
  |  Branch (35527:9): [True: 0, False: 4.07k]
  ------------------
35528|      0|        p->level--;
35529|      0|        return NULL;
35530|      0|    }
35531|  4.07k|    void * _res = NULL;
35532|  4.07k|    int _mark = p->mark;
35533|  4.07k|    { // ':'
35534|  4.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (35534:13): [True: 0, False: 4.07k]
  ------------------
35535|      0|            p->level--;
35536|      0|            return NULL;
35537|      0|        }
35538|  4.07k|        D(fprintf(stderr, "%*c> _tmp_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
35539|  4.07k|        Token * _literal;
35540|  4.07k|        if (
35541|  4.07k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (35541:13): [True: 2, False: 4.07k]
  ------------------
35542|  4.07k|        )
35543|      2|        {
35544|      2|            D(fprintf(stderr, "%*c+ _tmp_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
35545|      2|            _res = _literal;
35546|      2|            goto done;
35547|      2|        }
35548|  4.07k|        p->mark = _mark;
35549|  4.07k|        D(fprintf(stderr, "%*c%s _tmp_132[%d-%d]: %s failed!\n", p->level, ' ',
35550|  4.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
35551|  4.07k|    }
35552|      0|    { // ',' (':' | '**')
35553|  4.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (35553:13): [True: 0, False: 4.07k]
  ------------------
35554|      0|            p->level--;
35555|      0|            return NULL;
35556|      0|        }
35557|  4.07k|        D(fprintf(stderr, "%*c> _tmp_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
35558|  4.07k|        Token * _literal;
35559|  4.07k|        void *_tmp_171_var;
35560|  4.07k|        if (
35561|  4.07k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35561:13): [True: 1.63k, False: 2.44k]
  ------------------
35562|  1.63k|            &&
35563|  1.63k|            (_tmp_171_var = _tmp_171_rule(p))  // ':' | '**'
  ------------------
  |  Branch (35563:13): [True: 3, False: 1.62k]
  ------------------
35564|  4.07k|        )
35565|      3|        {
35566|      3|            D(fprintf(stderr, "%*c+ _tmp_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (':' | '**')"));
35567|      3|            _res = _PyPegen_dummy_name(p, _literal, _tmp_171_var);
35568|      3|            goto done;
35569|      3|        }
35570|  4.07k|        p->mark = _mark;
35571|  4.07k|        D(fprintf(stderr, "%*c%s _tmp_132[%d-%d]: %s failed!\n", p->level, ' ',
35572|  4.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (':' | '**')"));
35573|  4.07k|    }
35574|  4.07k|    _res = NULL;
35575|  4.07k|  done:
35576|  4.07k|    p->level--;
35577|  4.07k|    return _res;
35578|  4.07k|}
parser.c:_tmp_171_rule:
37730|  1.63k|{
37731|  1.63k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.26k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37731:9): [True: 0, False: 1.63k]
  |  Branch (37731:35): [True: 0, False: 1.63k]
  ------------------
37732|      0|        _Pypegen_stack_overflow(p);
37733|      0|    }
37734|  1.63k|    if (p->error_indicator) {
  ------------------
  |  Branch (37734:9): [True: 0, False: 1.63k]
  ------------------
37735|      0|        p->level--;
37736|      0|        return NULL;
37737|      0|    }
37738|  1.63k|    void * _res = NULL;
37739|  1.63k|    int _mark = p->mark;
37740|  1.63k|    { // ':'
37741|  1.63k|        if (p->error_indicator) {
  ------------------
  |  Branch (37741:13): [True: 0, False: 1.63k]
  ------------------
37742|      0|            p->level--;
37743|      0|            return NULL;
37744|      0|        }
37745|  1.63k|        D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
37746|  1.63k|        Token * _literal;
37747|  1.63k|        if (
37748|  1.63k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (37748:13): [True: 1, False: 1.63k]
  ------------------
37749|  1.63k|        )
37750|      1|        {
37751|      1|            D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
37752|      1|            _res = _literal;
37753|      1|            goto done;
37754|      1|        }
37755|  1.63k|        p->mark = _mark;
37756|  1.63k|        D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ',
37757|  1.63k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
37758|  1.63k|    }
37759|      0|    { // '**'
37760|  1.63k|        if (p->error_indicator) {
  ------------------
  |  Branch (37760:13): [True: 0, False: 1.63k]
  ------------------
37761|      0|            p->level--;
37762|      0|            return NULL;
37763|      0|        }
37764|  1.63k|        D(fprintf(stderr, "%*c> _tmp_171[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
37765|  1.63k|        Token * _literal;
37766|  1.63k|        if (
37767|  1.63k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (37767:13): [True: 2, False: 1.62k]
  ------------------
37768|  1.63k|        )
37769|      2|        {
37770|      2|            D(fprintf(stderr, "%*c+ _tmp_171[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
37771|      2|            _res = _literal;
37772|      2|            goto done;
37773|      2|        }
37774|  1.62k|        p->mark = _mark;
37775|  1.62k|        D(fprintf(stderr, "%*c%s _tmp_171[%d-%d]: %s failed!\n", p->level, ' ',
37776|  1.62k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
37777|  1.62k|    }
37778|  1.62k|    _res = NULL;
37779|  1.63k|  done:
37780|  1.63k|    p->level--;
37781|  1.63k|    return _res;
37782|  1.62k|}
parser.c:_tmp_133_rule:
35583|  4.08k|{
35584|  4.08k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.17k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35584:9): [True: 0, False: 4.08k]
  |  Branch (35584:35): [True: 0, False: 4.08k]
  ------------------
35585|      0|        _Pypegen_stack_overflow(p);
35586|      0|    }
35587|  4.08k|    if (p->error_indicator) {
  ------------------
  |  Branch (35587:9): [True: 0, False: 4.08k]
  ------------------
35588|      0|        p->level--;
35589|      0|        return NULL;
35590|      0|    }
35591|  4.08k|    void * _res = NULL;
35592|  4.08k|    int _mark = p->mark;
35593|  4.08k|    { // lambda_param_no_default
35594|  4.08k|        if (p->error_indicator) {
  ------------------
  |  Branch (35594:13): [True: 0, False: 4.08k]
  ------------------
35595|      0|            p->level--;
35596|      0|            return NULL;
35597|      0|        }
35598|  4.08k|        D(fprintf(stderr, "%*c> _tmp_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35599|  4.08k|        arg_ty lambda_param_no_default_var;
35600|  4.08k|        if (
35601|  4.08k|            (lambda_param_no_default_var = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (35601:13): [True: 2.38k, False: 1.70k]
  ------------------
35602|  4.08k|        )
35603|  2.38k|        {
35604|  2.38k|            D(fprintf(stderr, "%*c+ _tmp_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default"));
35605|  2.38k|            _res = lambda_param_no_default_var;
35606|  2.38k|            goto done;
35607|  2.38k|        }
35608|  1.70k|        p->mark = _mark;
35609|  1.70k|        D(fprintf(stderr, "%*c%s _tmp_133[%d-%d]: %s failed!\n", p->level, ' ',
35610|  1.70k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default"));
35611|  1.70k|    }
35612|      0|    { // ','
35613|  1.70k|        if (p->error_indicator) {
  ------------------
  |  Branch (35613:13): [True: 1, False: 1.70k]
  ------------------
35614|      1|            p->level--;
35615|      1|            return NULL;
35616|      1|        }
35617|  1.70k|        D(fprintf(stderr, "%*c> _tmp_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35618|  1.70k|        Token * _literal;
35619|  1.70k|        if (
35620|  1.70k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35620:13): [True: 1.62k, False: 75]
  ------------------
35621|  1.70k|        )
35622|  1.62k|        {
35623|  1.62k|            D(fprintf(stderr, "%*c+ _tmp_133[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35624|  1.62k|            _res = _literal;
35625|  1.62k|            goto done;
35626|  1.62k|        }
35627|     75|        p->mark = _mark;
35628|     75|        D(fprintf(stderr, "%*c%s _tmp_133[%d-%d]: %s failed!\n", p->level, ' ',
35629|     75|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35630|     75|    }
35631|     75|    _res = NULL;
35632|  4.08k|  done:
35633|  4.08k|    p->level--;
35634|  4.08k|    return _res;
35635|     75|}
parser.c:lambda_kwds_rule:
15832|  17.8k|{
15833|  17.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  35.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15833:9): [True: 0, False: 17.8k]
  |  Branch (15833:35): [True: 0, False: 17.8k]
  ------------------
15834|      0|        _Pypegen_stack_overflow(p);
15835|      0|    }
15836|  17.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (15836:9): [True: 74, False: 17.7k]
  ------------------
15837|     74|        p->level--;
15838|     74|        return NULL;
15839|     74|    }
15840|  17.7k|    arg_ty _res = NULL;
15841|  17.7k|    int _mark = p->mark;
15842|  17.7k|    if (p->call_invalid_rules) { // invalid_lambda_kwds
  ------------------
  |  Branch (15842:9): [True: 9.21k, False: 8.52k]
  ------------------
15843|  9.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (15843:13): [True: 0, False: 9.21k]
  ------------------
15844|      0|            p->level--;
15845|      0|            return NULL;
15846|      0|        }
15847|  9.21k|        D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_kwds"));
15848|  9.21k|        void *invalid_lambda_kwds_var;
15849|  9.21k|        if (
15850|  9.21k|            (invalid_lambda_kwds_var = invalid_lambda_kwds_rule(p))  // invalid_lambda_kwds
  ------------------
  |  Branch (15850:13): [True: 0, False: 9.21k]
  ------------------
15851|  9.21k|        )
15852|      0|        {
15853|      0|            D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_kwds"));
15854|      0|            _res = invalid_lambda_kwds_var;
15855|      0|            goto done;
15856|      0|        }
15857|  9.21k|        p->mark = _mark;
15858|  9.21k|        D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
15859|  9.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_kwds"));
15860|  9.21k|    }
15861|  17.7k|    { // '**' lambda_param_no_default
15862|  17.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (15862:13): [True: 9, False: 17.7k]
  ------------------
15863|      9|            p->level--;
15864|      9|            return NULL;
15865|      9|        }
15866|  17.7k|        D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
15867|  17.7k|        Token * _literal;
15868|  17.7k|        arg_ty a;
15869|  17.7k|        if (
15870|  17.7k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (15870:13): [True: 673, False: 17.0k]
  ------------------
15871|    673|            &&
15872|    673|            (a = lambda_param_no_default_rule(p))  // lambda_param_no_default
  ------------------
  |  Branch (15872:13): [True: 631, False: 42]
  ------------------
15873|  17.7k|        )
15874|    631|        {
15875|    631|            D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default"));
15876|    631|            _res = a;
15877|    631|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15877:18): [True: 0, False: 631]
  |  Branch (15877:34): [True: 0, False: 631]
  |  Branch (15877:57): [True: 0, False: 0]
  ------------------
15878|      0|                p->error_indicator = 1;
15879|      0|                p->level--;
15880|      0|                return NULL;
15881|      0|            }
15882|    631|            goto done;
15883|    631|        }
15884|  17.1k|        p->mark = _mark;
15885|  17.1k|        D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
15886|  17.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param_no_default"));
15887|  17.1k|    }
15888|  17.1k|    _res = NULL;
15889|  17.7k|  done:
15890|  17.7k|    p->level--;
15891|  17.7k|    return _res;
15892|  17.1k|}
parser.c:invalid_lambda_kwds_rule:
22635|  9.21k|{
22636|  9.21k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22636:9): [True: 0, False: 9.21k]
  |  Branch (22636:35): [True: 0, False: 9.21k]
  ------------------
22637|      0|        _Pypegen_stack_overflow(p);
22638|      0|    }
22639|  9.21k|    if (p->error_indicator) {
  ------------------
  |  Branch (22639:9): [True: 0, False: 9.21k]
  ------------------
22640|      0|        p->level--;
22641|      0|        return NULL;
22642|      0|    }
22643|  9.21k|    void * _res = NULL;
22644|  9.21k|    int _mark = p->mark;
22645|  9.21k|    { // '**' lambda_param '='
22646|  9.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (22646:13): [True: 0, False: 9.21k]
  ------------------
22647|      0|            p->level--;
22648|      0|            return NULL;
22649|      0|        }
22650|  9.21k|        D(fprintf(stderr, "%*c> invalid_lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param '='"));
22651|  9.21k|        Token * _literal;
22652|  9.21k|        Token * a;
22653|  9.21k|        arg_ty lambda_param_var;
22654|  9.21k|        if (
22655|  9.21k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (22655:13): [True: 441, False: 8.77k]
  ------------------
22656|    441|            &&
22657|    441|            (lambda_param_var = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (22657:13): [True: 433, False: 8]
  ------------------
22658|    433|            &&
22659|    433|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (22659:13): [True: 1, False: 432]
  ------------------
22660|  9.21k|        )
22661|      1|        {
22662|      1|            D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param '='"));
22663|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword parameter cannot have default value" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22664|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22664:18): [True: 1, False: 0]
  |  Branch (22664:34): [True: 0, False: 0]
  |  Branch (22664:57): [True: 1, False: 0]
  ------------------
22665|      1|                p->error_indicator = 1;
22666|      1|                p->level--;
22667|      1|                return NULL;
22668|      1|            }
22669|      0|            goto done;
22670|      1|        }
22671|  9.21k|        p->mark = _mark;
22672|  9.21k|        D(fprintf(stderr, "%*c%s invalid_lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22673|  9.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param '='"));
22674|  9.21k|    }
22675|      0|    { // '**' lambda_param ',' lambda_param
22676|  9.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (22676:13): [True: 2, False: 9.21k]
  ------------------
22677|      2|            p->level--;
22678|      2|            return NULL;
22679|      2|        }
22680|  9.21k|        D(fprintf(stderr, "%*c> invalid_lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' lambda_param"));
22681|  9.21k|        Token * _literal;
22682|  9.21k|        Token * _literal_1;
22683|  9.21k|        arg_ty a;
22684|  9.21k|        arg_ty lambda_param_var;
22685|  9.21k|        if (
22686|  9.21k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (22686:13): [True: 438, False: 8.77k]
  ------------------
22687|    438|            &&
22688|    438|            (lambda_param_var = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (22688:13): [True: 432, False: 6]
  ------------------
22689|    432|            &&
22690|    432|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (22690:13): [True: 15, False: 417]
  ------------------
22691|     15|            &&
22692|     15|            (a = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (22692:13): [True: 2, False: 13]
  ------------------
22693|  9.21k|        )
22694|      2|        {
22695|      2|            D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' lambda_param"));
22696|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22697|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22697:18): [True: 2, False: 0]
  |  Branch (22697:34): [True: 0, False: 0]
  |  Branch (22697:57): [True: 2, False: 0]
  ------------------
22698|      2|                p->error_indicator = 1;
22699|      2|                p->level--;
22700|      2|                return NULL;
22701|      2|            }
22702|      0|            goto done;
22703|      2|        }
22704|  9.20k|        p->mark = _mark;
22705|  9.20k|        D(fprintf(stderr, "%*c%s invalid_lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22706|  9.20k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param ',' lambda_param"));
22707|  9.20k|    }
22708|      0|    { // '**' lambda_param ',' ('*' | '**' | '/')
22709|  9.20k|        if (p->error_indicator) {
  ------------------
  |  Branch (22709:13): [True: 1, False: 9.20k]
  ------------------
22710|      1|            p->level--;
22711|      1|            return NULL;
22712|      1|        }
22713|  9.20k|        D(fprintf(stderr, "%*c> invalid_lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
22714|  9.20k|        Token * _literal;
22715|  9.20k|        Token * _literal_1;
22716|  9.20k|        Token* a;
22717|  9.20k|        arg_ty lambda_param_var;
22718|  9.20k|        if (
22719|  9.20k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (22719:13): [True: 435, False: 8.77k]
  ------------------
22720|    435|            &&
22721|    435|            (lambda_param_var = lambda_param_rule(p))  // lambda_param
  ------------------
  |  Branch (22721:13): [True: 429, False: 6]
  ------------------
22722|    429|            &&
22723|    429|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (22723:13): [True: 12, False: 417]
  ------------------
22724|     12|            &&
22725|     12|            (a = (Token*)_tmp_127_rule(p))  // '*' | '**' | '/'
  ------------------
  |  Branch (22725:13): [True: 3, False: 9]
  ------------------
22726|  9.20k|        )
22727|      3|        {
22728|      3|            D(fprintf(stderr, "%*c+ invalid_lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
22729|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22730|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22730:18): [True: 3, False: 0]
  |  Branch (22730:34): [True: 0, False: 0]
  |  Branch (22730:57): [True: 3, False: 0]
  ------------------
22731|      3|                p->error_indicator = 1;
22732|      3|                p->level--;
22733|      3|                return NULL;
22734|      3|            }
22735|      0|            goto done;
22736|      3|        }
22737|  9.20k|        p->mark = _mark;
22738|  9.20k|        D(fprintf(stderr, "%*c%s invalid_lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22739|  9.20k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param ',' ('*' | '**' | '/')"));
22740|  9.20k|    }
22741|  9.20k|    _res = NULL;
22742|  9.20k|  done:
22743|  9.20k|    p->level--;
22744|  9.20k|    return _res;
22745|  9.20k|}
parser.c:_tmp_127_rule:
35216|    233|{
35217|    233|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    466|#  define MAXSTACK 6000
  ------------------
  |  Branch (35217:9): [True: 0, False: 233]
  |  Branch (35217:35): [True: 0, False: 233]
  ------------------
35218|      0|        _Pypegen_stack_overflow(p);
35219|      0|    }
35220|    233|    if (p->error_indicator) {
  ------------------
  |  Branch (35220:9): [True: 0, False: 233]
  ------------------
35221|      0|        p->level--;
35222|      0|        return NULL;
35223|      0|    }
35224|    233|    void * _res = NULL;
35225|    233|    int _mark = p->mark;
35226|    233|    { // '*'
35227|    233|        if (p->error_indicator) {
  ------------------
  |  Branch (35227:13): [True: 0, False: 233]
  ------------------
35228|      0|            p->level--;
35229|      0|            return NULL;
35230|      0|        }
35231|    233|        D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*'"));
35232|    233|        Token * _literal;
35233|    233|        if (
35234|    233|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (35234:13): [True: 3, False: 230]
  ------------------
35235|    233|        )
35236|      3|        {
35237|      3|            D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*'"));
35238|      3|            _res = _literal;
35239|      3|            goto done;
35240|      3|        }
35241|    230|        p->mark = _mark;
35242|    230|        D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ',
35243|    230|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*'"));
35244|    230|    }
35245|      0|    { // '**'
35246|    230|        if (p->error_indicator) {
  ------------------
  |  Branch (35246:13): [True: 0, False: 230]
  ------------------
35247|      0|            p->level--;
35248|      0|            return NULL;
35249|      0|        }
35250|    230|        D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
35251|    230|        Token * _literal;
35252|    230|        if (
35253|    230|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (35253:13): [True: 1, False: 229]
  ------------------
35254|    230|        )
35255|      1|        {
35256|      1|            D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
35257|      1|            _res = _literal;
35258|      1|            goto done;
35259|      1|        }
35260|    229|        p->mark = _mark;
35261|    229|        D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ',
35262|    229|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
35263|    229|    }
35264|      0|    { // '/'
35265|    229|        if (p->error_indicator) {
  ------------------
  |  Branch (35265:13): [True: 0, False: 229]
  ------------------
35266|      0|            p->level--;
35267|      0|            return NULL;
35268|      0|        }
35269|    229|        D(fprintf(stderr, "%*c> _tmp_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'/'"));
35270|    229|        Token * _literal;
35271|    229|        if (
35272|    229|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (35272:13): [True: 1, False: 228]
  ------------------
35273|    229|        )
35274|      1|        {
35275|      1|            D(fprintf(stderr, "%*c+ _tmp_127[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'/'"));
35276|      1|            _res = _literal;
35277|      1|            goto done;
35278|      1|        }
35279|    228|        p->mark = _mark;
35280|    228|        D(fprintf(stderr, "%*c%s _tmp_127[%d-%d]: %s failed!\n", p->level, ' ',
35281|    228|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'/'"));
35282|    228|    }
35283|    228|    _res = NULL;
35284|    233|  done:
35285|    233|    p->level--;
35286|    233|    return _res;
35287|    228|}
parser.c:invalid_legacy_expression_rule:
20242|   289k|{
20243|   289k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   578k|#  define MAXSTACK 6000
  ------------------
  |  Branch (20243:9): [True: 0, False: 289k]
  |  Branch (20243:35): [True: 0, False: 289k]
  ------------------
20244|      0|        _Pypegen_stack_overflow(p);
20245|      0|    }
20246|   289k|    if (p->error_indicator) {
  ------------------
  |  Branch (20246:9): [True: 0, False: 289k]
  ------------------
20247|      0|        p->level--;
20248|      0|        return NULL;
20249|      0|    }
20250|   289k|    void * _res = NULL;
20251|   289k|    int _mark = p->mark;
20252|   289k|    { // NAME !'(' star_expressions
20253|   289k|        if (p->error_indicator) {
  ------------------
  |  Branch (20253:13): [True: 0, False: 289k]
  ------------------
20254|      0|            p->level--;
20255|      0|            return NULL;
20256|      0|        }
20257|   289k|        D(fprintf(stderr, "%*c> invalid_legacy_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME !'(' star_expressions"));
20258|   289k|        expr_ty a;
20259|   289k|        expr_ty b;
20260|   289k|        if (
20261|   289k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (20261:13): [True: 108k, False: 180k]
  ------------------
20262|   108k|            &&
20263|   108k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 7)  // token='('
  ------------------
  |  Branch (20263:13): [True: 103k, False: 4.99k]
  ------------------
20264|   103k|            &&
20265|   103k|            (b = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (20265:13): [True: 8.64k, False: 95.1k]
  ------------------
20266|   289k|        )
20267|  8.64k|        {
20268|  8.64k|            D(fprintf(stderr, "%*c+ invalid_legacy_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME !'(' star_expressions"));
20269|  8.64k|            _res = _PyPegen_check_legacy_stmt ( p , a ) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Missing parentheses in call to '%U'. Did you mean %U(...)?" , a -> v . Name . id , a -> v . Name . id ) : NULL;
  ------------------
  |  |  237|     21|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  |  Branch (20269:20): [True: 21, False: 8.62k]
  ------------------
20270|  8.64k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (20270:18): [True: 8.64k, False: 0]
  |  Branch (20270:34): [True: 0, False: 0]
  |  Branch (20270:57): [True: 21, False: 8.62k]
  ------------------
20271|     21|                p->error_indicator = 1;
20272|     21|                p->level--;
20273|     21|                return NULL;
20274|     21|            }
20275|  8.62k|            goto done;
20276|  8.64k|        }
20277|   280k|        p->mark = _mark;
20278|   280k|        D(fprintf(stderr, "%*c%s invalid_legacy_expression[%d-%d]: %s failed!\n", p->level, ' ',
20279|   280k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME !'(' star_expressions"));
20280|   280k|    }
20281|   280k|    _res = NULL;
20282|   289k|  done:
20283|   289k|    p->level--;
20284|   289k|    return _res;
20285|   280k|}
parser.c:lambdef_rule:
15239|   423k|{
15240|   423k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   847k|#  define MAXSTACK 6000
  ------------------
  |  Branch (15240:9): [True: 0, False: 423k]
  |  Branch (15240:35): [True: 0, False: 423k]
  ------------------
15241|      0|        _Pypegen_stack_overflow(p);
15242|      0|    }
15243|   423k|    if (p->error_indicator) {
  ------------------
  |  Branch (15243:9): [True: 0, False: 423k]
  ------------------
15244|      0|        p->level--;
15245|      0|        return NULL;
15246|      0|    }
15247|   423k|    expr_ty _res = NULL;
15248|   423k|    int _mark = p->mark;
15249|   423k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (15249:9): [True: 0, False: 423k]
  |  Branch (15249:31): [True: 0, False: 0]
  ------------------
15250|      0|        p->error_indicator = 1;
15251|      0|        p->level--;
15252|      0|        return NULL;
15253|      0|    }
15254|   423k|    int _start_lineno = p->tokens[_mark]->lineno;
15255|   423k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   423k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 423k]
  |  |  ------------------
  ------------------
15256|   423k|    int _start_col_offset = p->tokens[_mark]->col_offset;
15257|   423k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   423k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 423k]
  |  |  ------------------
  ------------------
15258|   423k|    { // 'lambda' lambda_params? ':' expression
15259|   423k|        if (p->error_indicator) {
  ------------------
  |  Branch (15259:13): [True: 0, False: 423k]
  ------------------
15260|      0|            p->level--;
15261|      0|            return NULL;
15262|      0|        }
15263|   423k|        D(fprintf(stderr, "%*c> lambdef[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
15264|   423k|        Token * _keyword;
15265|   423k|        Token * _literal;
15266|   423k|        void *a;
15267|   423k|        expr_ty b;
15268|   423k|        if (
15269|   423k|            (_keyword = _PyPegen_expect_token(p, 622))  // token='lambda'
  ------------------
  |  Branch (15269:13): [True: 12.4k, False: 411k]
  ------------------
15270|  12.4k|            &&
15271|  12.4k|            (a = lambda_params_rule(p), !p->error_indicator)  // lambda_params?
  ------------------
  |  Branch (15271:13): [True: 11.5k, False: 837]
  ------------------
15272|  11.5k|            &&
15273|  11.5k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (15273:13): [True: 9.48k, False: 2.10k]
  ------------------
15274|  9.48k|            &&
15275|  9.48k|            (b = expression_rule(p))  // expression
  ------------------
  |  Branch (15275:13): [True: 7.99k, False: 1.49k]
  ------------------
15276|   423k|        )
15277|  7.99k|        {
15278|  7.99k|            D(fprintf(stderr, "%*c+ lambdef[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression"));
15279|  7.99k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
15280|  7.99k|            if (_token == NULL) {
  ------------------
  |  Branch (15280:17): [True: 0, False: 7.99k]
  ------------------
15281|      0|                p->level--;
15282|      0|                return NULL;
15283|      0|            }
15284|  7.99k|            int _end_lineno = _token->end_lineno;
15285|  7.99k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.99k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.99k]
  |  |  ------------------
  ------------------
15286|  7.99k|            int _end_col_offset = _token->end_col_offset;
15287|  7.99k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.99k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.99k]
  |  |  ------------------
  ------------------
15288|  7.99k|            _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA );
  ------------------
  |  |  271|  9.51k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA );
  ------------------
  |  |  307|  7.99k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (15288:36): [True: 6.47k, False: 1.52k]
  ------------------
15289|  7.99k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (15289:18): [True: 0, False: 7.99k]
  |  Branch (15289:34): [True: 0, False: 7.99k]
  |  Branch (15289:57): [True: 0, False: 0]
  ------------------
15290|      0|                p->error_indicator = 1;
15291|      0|                p->level--;
15292|      0|                return NULL;
15293|      0|            }
15294|  7.99k|            goto done;
15295|  7.99k|        }
15296|   415k|        p->mark = _mark;
15297|   415k|        D(fprintf(stderr, "%*c%s lambdef[%d-%d]: %s failed!\n", p->level, ' ',
15298|   415k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' expression"));
15299|   415k|    }
15300|   415k|    _res = NULL;
15301|   423k|  done:
15302|   423k|    p->level--;
15303|   423k|    return _res;
15304|   415k|}
parser.c:function_def_raw_rule:
 4636|  20.9k|{
 4637|  20.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  41.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4637:9): [True: 0, False: 20.9k]
  |  Branch (4637:35): [True: 0, False: 20.9k]
  ------------------
 4638|      0|        _Pypegen_stack_overflow(p);
 4639|      0|    }
 4640|  20.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (4640:9): [True: 0, False: 20.9k]
  ------------------
 4641|      0|        p->level--;
 4642|      0|        return NULL;
 4643|      0|    }
 4644|  20.9k|    stmt_ty _res = NULL;
 4645|  20.9k|    int _mark = p->mark;
 4646|  20.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (4646:9): [True: 0, False: 20.9k]
  |  Branch (4646:31): [True: 0, False: 0]
  ------------------
 4647|      0|        p->error_indicator = 1;
 4648|      0|        p->level--;
 4649|      0|        return NULL;
 4650|      0|    }
 4651|  20.9k|    int _start_lineno = p->tokens[_mark]->lineno;
 4652|  20.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  20.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20.9k]
  |  |  ------------------
  ------------------
 4653|  20.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 4654|  20.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  20.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20.9k]
  |  |  ------------------
  ------------------
 4655|  20.9k|    if (p->call_invalid_rules) { // invalid_def_raw
  ------------------
  |  Branch (4655:9): [True: 3.89k, False: 17.0k]
  ------------------
 4656|  3.89k|        if (p->error_indicator) {
  ------------------
  |  Branch (4656:13): [True: 0, False: 3.89k]
  ------------------
 4657|      0|            p->level--;
 4658|      0|            return NULL;
 4659|      0|        }
 4660|  3.89k|        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_def_raw"));
 4661|  3.89k|        void *invalid_def_raw_var;
 4662|  3.89k|        if (
 4663|  3.89k|            (invalid_def_raw_var = invalid_def_raw_rule(p))  // invalid_def_raw
  ------------------
  |  Branch (4663:13): [True: 2.26k, False: 1.62k]
  ------------------
 4664|  3.89k|        )
 4665|  2.26k|        {
 4666|  2.26k|            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_def_raw"));
 4667|  2.26k|            _res = invalid_def_raw_var;
 4668|  2.26k|            goto done;
 4669|  2.26k|        }
 4670|  1.62k|        p->mark = _mark;
 4671|  1.62k|        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
 4672|  1.62k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_def_raw"));
 4673|  1.62k|    }
 4674|  18.7k|    { // 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block
 4675|  18.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (4675:13): [True: 171, False: 18.5k]
  ------------------
 4676|    171|            p->level--;
 4677|    171|            return NULL;
 4678|    171|        }
 4679|  18.5k|        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
 4680|  18.5k|        Token * _keyword;
 4681|  18.5k|        Token * _literal;
 4682|  18.5k|        Token * _literal_1;
 4683|  18.5k|        Token * _literal_2;
 4684|  18.5k|        void *a;
 4685|  18.5k|        asdl_stmt_seq* b;
 4686|  18.5k|        expr_ty n;
 4687|  18.5k|        void *params;
 4688|  18.5k|        void *t;
 4689|  18.5k|        void *tc;
 4690|  18.5k|        if (
 4691|  18.5k|            (_keyword = _PyPegen_expect_token(p, 717))  // token='def'
  ------------------
  |  Branch (4691:13): [True: 7.90k, False: 10.6k]
  ------------------
 4692|  7.90k|            &&
 4693|  7.90k|            (n = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (4693:13): [True: 7.89k, False: 11]
  ------------------
 4694|  7.89k|            &&
 4695|  7.89k|            (t = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (4695:13): [True: 7.89k, False: 3]
  ------------------
 4696|  7.89k|            &&
 4697|  7.89k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (4697:13): [True: 7.86k, False: 29]
  ------------------
 4698|  7.86k|            &&
 4699|  7.86k|            (params = params_rule(p), !p->error_indicator)  // params?
  ------------------
  |  Branch (4699:13): [True: 7.83k, False: 29]
  ------------------
 4700|  7.83k|            &&
 4701|  7.83k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (4701:13): [True: 7.70k, False: 131]
  ------------------
 4702|  7.70k|            &&
 4703|  7.70k|            (a = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
  ------------------
  |  Branch (4703:13): [True: 7.69k, False: 3]
  ------------------
 4704|  7.69k|            &&
 4705|  7.69k|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (4705:13): [True: 7.67k, False: 26]
  ------------------
 4706|  7.67k|            &&
 4707|  7.67k|            (tc = func_type_comment_rule(p), !p->error_indicator)  // func_type_comment?
  ------------------
  |  Branch (4707:13): [True: 7.67k, False: 1]
  ------------------
 4708|  7.67k|            &&
 4709|  7.67k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (4709:13): [True: 7.60k, False: 68]
  ------------------
 4710|  18.5k|        )
 4711|  7.60k|        {
 4712|  7.60k|            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
 4713|  7.60k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 4714|  7.60k|            if (_token == NULL) {
  ------------------
  |  Branch (4714:17): [True: 0, False: 7.60k]
  ------------------
 4715|      0|                p->level--;
 4716|      0|                return NULL;
 4717|      0|            }
 4718|  7.60k|            int _end_lineno = _token->end_lineno;
 4719|  7.60k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.60k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.60k]
  |  |  ------------------
  ------------------
 4720|  7.60k|            int _end_col_offset = _token->end_col_offset;
 4721|  7.60k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.60k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.60k]
  |  |  ------------------
  ------------------
 4722|  7.60k|            _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , t , EXTRA );
  ------------------
  |  |  271|  13.0k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , t , EXTRA );
  ------------------
  |  |  307|  7.60k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (4722:62): [True: 2.11k, False: 5.49k]
  ------------------
 4723|  7.60k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4723:18): [True: 0, False: 7.60k]
  |  Branch (4723:34): [True: 0, False: 7.60k]
  |  Branch (4723:57): [True: 0, False: 0]
  ------------------
 4724|      0|                p->error_indicator = 1;
 4725|      0|                p->level--;
 4726|      0|                return NULL;
 4727|      0|            }
 4728|  7.60k|            goto done;
 4729|  7.60k|        }
 4730|  10.9k|        p->mark = _mark;
 4731|  10.9k|        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
 4732|  10.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
 4733|  10.9k|    }
 4734|      0|    { // 'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block
 4735|  10.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (4735:13): [True: 45, False: 10.8k]
  ------------------
 4736|     45|            p->level--;
 4737|     45|            return NULL;
 4738|     45|        }
 4739|  10.8k|        D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
 4740|  10.8k|        Token * _keyword;
 4741|  10.8k|        Token * _keyword_1;
 4742|  10.8k|        Token * _literal;
 4743|  10.8k|        Token * _literal_1;
 4744|  10.8k|        Token * _literal_2;
 4745|  10.8k|        void *a;
 4746|  10.8k|        asdl_stmt_seq* b;
 4747|  10.8k|        expr_ty n;
 4748|  10.8k|        void *params;
 4749|  10.8k|        void *t;
 4750|  10.8k|        void *tc;
 4751|  10.8k|        if (
 4752|  10.8k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (4752:13): [True: 9.00k, False: 1.87k]
  ------------------
 4753|  9.00k|            &&
 4754|  9.00k|            (_keyword_1 = _PyPegen_expect_token(p, 717))  // token='def'
  ------------------
  |  Branch (4754:13): [True: 4.66k, False: 4.34k]
  ------------------
 4755|  4.66k|            &&
 4756|  4.66k|            (n = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (4756:13): [True: 4.66k, False: 5]
  ------------------
 4757|  4.66k|            &&
 4758|  4.66k|            (t = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (4758:13): [True: 4.66k, False: 2]
  ------------------
 4759|  4.66k|            &&
 4760|  4.66k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (4760:13): [True: 4.65k, False: 9]
  ------------------
 4761|  4.65k|            &&
 4762|  4.65k|            (params = params_rule(p), !p->error_indicator)  // params?
  ------------------
  |  Branch (4762:13): [True: 4.64k, False: 8]
  ------------------
 4763|  4.64k|            &&
 4764|  4.64k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (4764:13): [True: 4.58k, False: 61]
  ------------------
 4765|  4.58k|            &&
 4766|  4.58k|            (a = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
  ------------------
  |  Branch (4766:13): [True: 4.57k, False: 3]
  ------------------
 4767|  4.57k|            &&
 4768|  4.57k|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (4768:13): [True: 4.56k, False: 11]
  ------------------
 4769|  4.56k|            &&
 4770|  4.56k|            (tc = func_type_comment_rule(p), !p->error_indicator)  // func_type_comment?
  ------------------
  |  Branch (4770:13): [True: 4.56k, False: 1]
  ------------------
 4771|  4.56k|            &&
 4772|  4.56k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (4772:13): [True: 4.43k, False: 133]
  ------------------
 4773|  10.8k|        )
 4774|  4.43k|        {
 4775|  4.43k|            D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
 4776|  4.43k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 4777|  4.43k|            if (_token == NULL) {
  ------------------
  |  Branch (4777:17): [True: 0, False: 4.43k]
  ------------------
 4778|      0|                p->level--;
 4779|      0|                return NULL;
 4780|      0|            }
 4781|  4.43k|            int _end_lineno = _token->end_lineno;
 4782|  4.43k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.43k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.43k]
  |  |  ------------------
  ------------------
 4783|  4.43k|            int _end_col_offset = _token->end_col_offset;
 4784|  4.43k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.43k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.43k]
  |  |  ------------------
  ------------------
 4785|  4.43k|            _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _PyAST_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , t , EXTRA ) );
  ------------------
  |  |  345|  8.86k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  |  |  ------------------
  |  |  |  Branch (345:96): [True: 4.40k, False: 28]
  |  |  ------------------
  ------------------
 4786|  4.43k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4786:18): [True: 0, False: 4.43k]
  |  Branch (4786:34): [True: 1, False: 4.43k]
  |  Branch (4786:57): [True: 1, False: 0]
  ------------------
 4787|      1|                p->error_indicator = 1;
 4788|      1|                p->level--;
 4789|      1|                return NULL;
 4790|      1|            }
 4791|  4.43k|            goto done;
 4792|  4.43k|        }
 4793|  6.45k|        p->mark = _mark;
 4794|  6.45k|        D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
 4795|  6.45k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'def' NAME type_params? '(' params? ')' ['->' expression] ':' func_type_comment? block"));
 4796|  6.45k|    }
 4797|  6.45k|    _res = NULL;
 4798|  20.7k|  done:
 4799|  20.7k|    p->level--;
 4800|  20.7k|    return _res;
 4801|  6.45k|}
parser.c:invalid_def_raw_rule:
25239|  3.89k|{
25240|  3.89k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.78k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25240:9): [True: 0, False: 3.89k]
  |  Branch (25240:35): [True: 0, False: 3.89k]
  ------------------
25241|      0|        _Pypegen_stack_overflow(p);
25242|      0|    }
25243|  3.89k|    if (p->error_indicator) {
  ------------------
  |  Branch (25243:9): [True: 0, False: 3.89k]
  ------------------
25244|      0|        p->level--;
25245|      0|        return NULL;
25246|      0|    }
25247|  3.89k|    void * _res = NULL;
25248|  3.89k|    int _mark = p->mark;
25249|  3.89k|    { // 'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT
25250|  3.89k|        if (p->error_indicator) {
  ------------------
  |  Branch (25250:13): [True: 0, False: 3.89k]
  ------------------
25251|      0|            p->level--;
25252|      0|            return NULL;
25253|      0|        }
25254|  3.89k|        D(fprintf(stderr, "%*c> invalid_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
25255|  3.89k|        Token * _literal;
25256|  3.89k|        Token * _literal_1;
25257|  3.89k|        Token * _literal_2;
25258|  3.89k|        void *_opt_var;
25259|  3.89k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
25260|  3.89k|        void *_opt_var_1;
25261|  3.89k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
25262|  3.89k|        void *_opt_var_2;
25263|  3.89k|        UNUSED(_opt_var_2); // Silence compiler warnings
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
25264|  3.89k|        void *_opt_var_3;
25265|  3.89k|        UNUSED(_opt_var_3); // Silence compiler warnings
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
25266|  3.89k|        Token * a;
25267|  3.89k|        expr_ty name_var;
25268|  3.89k|        Token * newline_var;
25269|  3.89k|        if (
25270|  3.89k|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (25270:13): [True: 3.89k, False: 0]
  ------------------
25271|  3.89k|            &&
25272|  3.89k|            (a = _PyPegen_expect_token(p, 717))  // token='def'
  ------------------
  |  Branch (25272:13): [True: 2.58k, False: 1.30k]
  ------------------
25273|  2.58k|            &&
25274|  2.58k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (25274:13): [True: 2.58k, False: 5]
  ------------------
25275|  2.58k|            &&
25276|  2.58k|            (_opt_var_1 = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (25276:13): [True: 2.57k, False: 8]
  ------------------
25277|  2.57k|            &&
25278|  2.57k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (25278:13): [True: 2.54k, False: 31]
  ------------------
25279|  2.54k|            &&
25280|  2.54k|            (_opt_var_2 = params_rule(p), !p->error_indicator)  // params?
  ------------------
  |  Branch (25280:13): [True: 2.49k, False: 48]
  ------------------
25281|  2.49k|            &&
25282|  2.49k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (25282:13): [True: 2.41k, False: 76]
  ------------------
25283|  2.41k|            &&
25284|  2.41k|            (_opt_var_3 = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
  ------------------
  |  Branch (25284:13): [True: 2.41k, False: 3]
  ------------------
25285|  2.41k|            &&
25286|  2.41k|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25286:13): [True: 2.37k, False: 36]
  ------------------
25287|  2.37k|            &&
25288|  2.37k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  2.37k|#define NEWLINE         4
  ------------------
  |  Branch (25288:13): [True: 603, False: 1.77k]
  ------------------
25289|    603|            &&
25290|    603|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    603|#define INDENT          5
  ------------------
  |  Branch (25290:13): [True: 14, False: 589]
  ------------------
25291|  3.89k|        )
25292|     14|        {
25293|     14|            D(fprintf(stderr, "%*c+ invalid_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
25294|     14|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after function definition on line %d" , a -> lineno );
  ------------------
  |  |  234|     14|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
25295|     14|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25295:18): [True: 14, False: 0]
  |  Branch (25295:34): [True: 0, False: 0]
  |  Branch (25295:57): [True: 14, False: 0]
  ------------------
25296|     14|                p->error_indicator = 1;
25297|     14|                p->level--;
25298|     14|                return NULL;
25299|     14|            }
25300|      0|            goto done;
25301|     14|        }
25302|  3.87k|        p->mark = _mark;
25303|  3.87k|        D(fprintf(stderr, "%*c%s invalid_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25304|  3.87k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'def' NAME type_params? '(' params? ')' ['->' expression] ':' NEWLINE !INDENT"));
25305|  3.87k|    }
25306|      0|    { // 'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block
25307|  3.87k|        if (p->error_indicator) {
  ------------------
  |  Branch (25307:13): [True: 59, False: 3.81k]
  ------------------
25308|     59|            p->level--;
25309|     59|            return NULL;
25310|     59|        }
25311|  3.81k|        D(fprintf(stderr, "%*c> invalid_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
25312|  3.81k|        Token * _keyword;
25313|  3.81k|        Token * _literal;
25314|  3.81k|        Token * _literal_1;
25315|  3.81k|        Token * _literal_2;
25316|  3.81k|        void *_opt_var;
25317|  3.81k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  3.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.81k]
  |  |  ------------------
  ------------------
25318|  3.81k|        void *_opt_var_1;
25319|  3.81k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  3.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.81k]
  |  |  ------------------
  ------------------
25320|  3.81k|        void *_opt_var_2;
25321|  3.81k|        UNUSED(_opt_var_2); // Silence compiler warnings
  ------------------
  |  |  305|  3.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.81k]
  |  |  ------------------
  ------------------
25322|  3.81k|        void *_opt_var_3;
25323|  3.81k|        UNUSED(_opt_var_3); // Silence compiler warnings
  ------------------
  |  |  305|  3.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.81k]
  |  |  ------------------
  ------------------
25324|  3.81k|        void *_opt_var_4;
25325|  3.81k|        UNUSED(_opt_var_4); // Silence compiler warnings
  ------------------
  |  |  305|  3.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.81k]
  |  |  ------------------
  ------------------
25326|  3.81k|        asdl_stmt_seq* block_var;
25327|  3.81k|        expr_ty name_var;
25328|  3.81k|        if (
25329|  3.81k|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (25329:13): [True: 3.81k, False: 0]
  ------------------
25330|  3.81k|            &&
25331|  3.81k|            (_keyword = _PyPegen_expect_token(p, 717))  // token='def'
  ------------------
  |  Branch (25331:13): [True: 2.51k, False: 1.30k]
  ------------------
25332|  2.51k|            &&
25333|  2.51k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (25333:13): [True: 2.50k, False: 5]
  ------------------
25334|  2.50k|            &&
25335|  2.50k|            (_opt_var_1 = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (25335:13): [True: 2.50k, False: 0]
  ------------------
25336|  2.50k|            &&
25337|  2.50k|            (_literal = _PyPegen_expect_forced_token(p, 7, "("))  // forced_token='('
  ------------------
  |  Branch (25337:13): [True: 2.47k, False: 31]
  ------------------
25338|  2.47k|            &&
25339|  2.47k|            (_opt_var_2 = params_rule(p), !p->error_indicator)  // params?
  ------------------
  |  Branch (25339:13): [True: 2.47k, False: 0]
  ------------------
25340|  2.47k|            &&
25341|  2.47k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (25341:13): [True: 2.40k, False: 76]
  ------------------
25342|  2.40k|            &&
25343|  2.40k|            (_opt_var_3 = _tmp_26_rule(p), !p->error_indicator)  // ['->' expression]
  ------------------
  |  Branch (25343:13): [True: 2.40k, False: 0]
  ------------------
25344|  2.40k|            &&
25345|  2.40k|            (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
  ------------------
  |  Branch (25345:13): [True: 2.36k, False: 36]
  ------------------
25346|  2.36k|            &&
25347|  2.36k|            (_opt_var_4 = func_type_comment_rule(p), !p->error_indicator)  // func_type_comment?
  ------------------
  |  Branch (25347:13): [True: 2.36k, False: 2]
  ------------------
25348|  2.36k|            &&
25349|  2.36k|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (25349:13): [True: 2.26k, False: 100]
  ------------------
25350|  3.81k|        )
25351|  2.26k|        {
25352|  2.26k|            D(fprintf(stderr, "%*c+ invalid_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
25353|  2.26k|            _res = _PyPegen_dummy_name(p, _opt_var, _keyword, name_var, _opt_var_1, _literal, _opt_var_2, _literal_1, _opt_var_3, _literal_2, _opt_var_4, block_var);
25354|  2.26k|            goto done;
25355|  2.26k|        }
25356|  1.55k|        p->mark = _mark;
25357|  1.55k|        D(fprintf(stderr, "%*c%s invalid_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25358|  1.55k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'def' NAME type_params? &&'(' params? ')' ['->' expression] &&':' func_type_comment? block"));
25359|  1.55k|    }
25360|  1.55k|    _res = NULL;
25361|  3.81k|  done:
25362|  3.81k|    p->level--;
25363|  3.81k|    return _res;
25364|  1.55k|}
parser.c:params_rule:
 4806|  17.5k|{
 4807|  17.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  35.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4807:9): [True: 0, False: 17.5k]
  |  Branch (4807:35): [True: 0, False: 17.5k]
  ------------------
 4808|      0|        _Pypegen_stack_overflow(p);
 4809|      0|    }
 4810|  17.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (4810:9): [True: 0, False: 17.5k]
  ------------------
 4811|      0|        p->level--;
 4812|      0|        return NULL;
 4813|      0|    }
 4814|  17.5k|    arguments_ty _res = NULL;
 4815|  17.5k|    int _mark = p->mark;
 4816|  17.5k|    if (p->call_invalid_rules) { // invalid_parameters
  ------------------
  |  Branch (4816:9): [True: 5.16k, False: 12.3k]
  ------------------
 4817|  5.16k|        if (p->error_indicator) {
  ------------------
  |  Branch (4817:13): [True: 0, False: 5.16k]
  ------------------
 4818|      0|            p->level--;
 4819|      0|            return NULL;
 4820|      0|        }
 4821|  5.16k|        D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
 4822|  5.16k|        void *invalid_parameters_var;
 4823|  5.16k|        if (
 4824|  5.16k|            (invalid_parameters_var = invalid_parameters_rule(p))  // invalid_parameters
  ------------------
  |  Branch (4824:13): [True: 0, False: 5.16k]
  ------------------
 4825|  5.16k|        )
 4826|      0|        {
 4827|      0|            D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_parameters"));
 4828|      0|            _res = invalid_parameters_var;
 4829|      0|            goto done;
 4830|      0|        }
 4831|  5.16k|        p->mark = _mark;
 4832|  5.16k|        D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ',
 4833|  5.16k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_parameters"));
 4834|  5.16k|    }
 4835|  17.5k|    { // parameters
 4836|  17.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (4836:13): [True: 28, False: 17.5k]
  ------------------
 4837|     28|            p->level--;
 4838|     28|            return NULL;
 4839|     28|        }
 4840|  17.5k|        D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "parameters"));
 4841|  17.5k|        arguments_ty parameters_var;
 4842|  17.5k|        if (
 4843|  17.5k|            (parameters_var = parameters_rule(p))  // parameters
  ------------------
  |  Branch (4843:13): [True: 10.8k, False: 6.65k]
  ------------------
 4844|  17.5k|        )
 4845|  10.8k|        {
 4846|  10.8k|            D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "parameters"));
 4847|  10.8k|            _res = parameters_var;
 4848|  10.8k|            goto done;
 4849|  10.8k|        }
 4850|  6.65k|        p->mark = _mark;
 4851|  6.65k|        D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ',
 4852|  6.65k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "parameters"));
 4853|  6.65k|    }
 4854|  6.65k|    _res = NULL;
 4855|  17.5k|  done:
 4856|  17.5k|    p->level--;
 4857|  17.5k|    return _res;
 4858|  6.65k|}
parser.c:invalid_parameters_rule:
21645|  5.16k|{
21646|  5.16k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21646:9): [True: 0, False: 5.16k]
  |  Branch (21646:35): [True: 0, False: 5.16k]
  ------------------
21647|      0|        _Pypegen_stack_overflow(p);
21648|      0|    }
21649|  5.16k|    if (p->error_indicator) {
  ------------------
  |  Branch (21649:9): [True: 0, False: 5.16k]
  ------------------
21650|      0|        p->level--;
21651|      0|        return NULL;
21652|      0|    }
21653|  5.16k|    void * _res = NULL;
21654|  5.16k|    int _mark = p->mark;
21655|  5.16k|    { // "/" ','
21656|  5.16k|        if (p->error_indicator) {
  ------------------
  |  Branch (21656:13): [True: 0, False: 5.16k]
  ------------------
21657|      0|            p->level--;
21658|      0|            return NULL;
21659|      0|        }
21660|  5.16k|        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
21661|  5.16k|        Token * _literal;
21662|  5.16k|        Token * a;
21663|  5.16k|        if (
21664|  5.16k|            (a = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (21664:13): [True: 7, False: 5.15k]
  ------------------
21665|      7|            &&
21666|      7|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (21666:13): [True: 2, False: 5]
  ------------------
21667|  5.16k|        )
21668|      2|        {
21669|      2|            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"/\" ','"));
21670|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "at least one parameter must precede /" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21671|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21671:18): [True: 2, False: 0]
  |  Branch (21671:34): [True: 0, False: 0]
  |  Branch (21671:57): [True: 2, False: 0]
  ------------------
21672|      2|                p->error_indicator = 1;
21673|      2|                p->level--;
21674|      2|                return NULL;
21675|      2|            }
21676|      0|            goto done;
21677|      2|        }
21678|  5.16k|        p->mark = _mark;
21679|  5.16k|        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
21680|  5.16k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"/\" ','"));
21681|  5.16k|    }
21682|      0|    { // (slash_no_default | slash_with_default) param_maybe_default* '/'
21683|  5.16k|        if (p->error_indicator) {
  ------------------
  |  Branch (21683:13): [True: 2, False: 5.16k]
  ------------------
21684|      2|            p->level--;
21685|      2|            return NULL;
21686|      2|        }
21687|  5.16k|        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'"));
21688|  5.16k|        asdl_seq * _loop0_31_var;
21689|  5.16k|        void *_tmp_122_var;
21690|  5.16k|        Token * a;
21691|  5.16k|        if (
21692|  5.16k|            (_tmp_122_var = _tmp_122_rule(p))  // slash_no_default | slash_with_default
  ------------------
  |  Branch (21692:13): [True: 528, False: 4.63k]
  ------------------
21693|    528|            &&
21694|    528|            (_loop0_31_var = _loop0_31_rule(p))  // param_maybe_default*
  ------------------
  |  Branch (21694:13): [True: 528, False: 0]
  ------------------
21695|    528|            &&
21696|    528|            (a = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (21696:13): [True: 1, False: 527]
  ------------------
21697|  5.16k|        )
21698|      1|        {
21699|      1|            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'"));
21700|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ may appear only once" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21701|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21701:18): [True: 1, False: 0]
  |  Branch (21701:34): [True: 0, False: 0]
  |  Branch (21701:57): [True: 1, False: 0]
  ------------------
21702|      1|                p->error_indicator = 1;
21703|      1|                p->level--;
21704|      1|                return NULL;
21705|      1|            }
21706|      0|            goto done;
21707|      1|        }
21708|  5.15k|        p->mark = _mark;
21709|  5.15k|        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
21710|  5.15k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(slash_no_default | slash_with_default) param_maybe_default* '/'"));
21711|  5.15k|    }
21712|      0|    { // slash_no_default? param_no_default* invalid_parameters_helper param_no_default
21713|  5.15k|        if (p->error_indicator) {
  ------------------
  |  Branch (21713:13): [True: 9, False: 5.15k]
  ------------------
21714|      9|            p->level--;
21715|      9|            return NULL;
21716|      9|        }
21717|  5.15k|        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default"));
21718|  5.15k|        asdl_seq * _loop0_27_var;
21719|  5.15k|        void *_opt_var;
21720|  5.15k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  5.15k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.15k]
  |  |  ------------------
  ------------------
21721|  5.15k|        arg_ty a;
21722|  5.15k|        void *invalid_parameters_helper_var;
21723|  5.15k|        if (
21724|  5.15k|            (_opt_var = slash_no_default_rule(p), !p->error_indicator)  // slash_no_default?
  ------------------
  |  Branch (21724:13): [True: 5.15k, False: 0]
  ------------------
21725|  5.15k|            &&
21726|  5.15k|            (_loop0_27_var = _loop0_27_rule(p))  // param_no_default*
  ------------------
  |  Branch (21726:13): [True: 5.15k, False: 0]
  ------------------
21727|  5.15k|            &&
21728|  5.15k|            (invalid_parameters_helper_var = invalid_parameters_helper_rule(p))  // invalid_parameters_helper
  ------------------
  |  Branch (21728:13): [True: 361, False: 4.78k]
  ------------------
21729|    361|            &&
21730|    361|            (a = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (21730:13): [True: 4, False: 357]
  ------------------
21731|  5.15k|        )
21732|      4|        {
21733|      4|            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default"));
21734|      4|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameter without a default follows parameter with a default" );
  ------------------
  |  |  239|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21735|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21735:18): [True: 4, False: 0]
  |  Branch (21735:34): [True: 0, False: 0]
  |  Branch (21735:57): [True: 4, False: 0]
  ------------------
21736|      4|                p->error_indicator = 1;
21737|      4|                p->level--;
21738|      4|                return NULL;
21739|      4|            }
21740|      0|            goto done;
21741|      4|        }
21742|  5.14k|        p->mark = _mark;
21743|  5.14k|        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
21744|  5.14k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default? param_no_default* invalid_parameters_helper param_no_default"));
21745|  5.14k|    }
21746|      0|    { // param_no_default* '(' param_no_default+ ','? ')'
21747|  5.14k|        if (p->error_indicator) {
  ------------------
  |  Branch (21747:13): [True: 1, False: 5.14k]
  ------------------
21748|      1|            p->level--;
21749|      1|            return NULL;
21750|      1|        }
21751|  5.14k|        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'"));
21752|  5.14k|        asdl_seq * _loop0_27_var;
21753|  5.14k|        asdl_seq * _loop1_29_var;
21754|  5.14k|        void *_opt_var;
21755|  5.14k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  5.14k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.14k]
  |  |  ------------------
  ------------------
21756|  5.14k|        Token * a;
21757|  5.14k|        Token * b;
21758|  5.14k|        if (
21759|  5.14k|            (_loop0_27_var = _loop0_27_rule(p))  // param_no_default*
  ------------------
  |  Branch (21759:13): [True: 5.14k, False: 0]
  ------------------
21760|  5.14k|            &&
21761|  5.14k|            (a = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (21761:13): [True: 15, False: 5.13k]
  ------------------
21762|     15|            &&
21763|     15|            (_loop1_29_var = _loop1_29_rule(p))  // param_no_default+
  ------------------
  |  Branch (21763:13): [True: 4, False: 11]
  ------------------
21764|      4|            &&
21765|      4|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (21765:13): [True: 4, False: 0]
  ------------------
21766|      4|            &&
21767|      4|            (b = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (21767:13): [True: 1, False: 3]
  ------------------
21768|  5.14k|        )
21769|      1|        {
21770|      1|            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'"));
21771|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "Function parameters cannot be parenthesized" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21772|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21772:18): [True: 1, False: 0]
  |  Branch (21772:34): [True: 0, False: 0]
  |  Branch (21772:57): [True: 1, False: 0]
  ------------------
21773|      1|                p->error_indicator = 1;
21774|      1|                p->level--;
21775|      1|                return NULL;
21776|      1|            }
21777|      0|            goto done;
21778|      1|        }
21779|  5.14k|        p->mark = _mark;
21780|  5.14k|        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
21781|  5.14k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* '(' param_no_default+ ','? ')'"));
21782|  5.14k|    }
21783|      0|    { // [(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'
21784|  5.14k|        if (p->error_indicator) {
  ------------------
  |  Branch (21784:13): [True: 2, False: 5.14k]
  ------------------
21785|      2|            p->level--;
21786|      2|            return NULL;
21787|      2|        }
21788|  5.14k|        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'"));
21789|  5.14k|        Token * _literal;
21790|  5.14k|        asdl_seq * _loop0_31_var;
21791|  5.14k|        asdl_seq * _loop0_31_var_1;
21792|  5.14k|        void *_opt_var;
21793|  5.14k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  5.14k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.14k]
  |  |  ------------------
  ------------------
21794|  5.14k|        void *_tmp_123_var;
21795|  5.14k|        Token * a;
21796|  5.14k|        if (
21797|  5.14k|            (_opt_var = _tmp_122_rule(p), !p->error_indicator)  // [(slash_no_default | slash_with_default)]
  ------------------
  |  Branch (21797:13): [True: 5.14k, False: 0]
  ------------------
21798|  5.14k|            &&
21799|  5.14k|            (_loop0_31_var = _loop0_31_rule(p))  // param_maybe_default*
  ------------------
  |  Branch (21799:13): [True: 5.14k, False: 0]
  ------------------
21800|  5.14k|            &&
21801|  5.14k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (21801:13): [True: 715, False: 4.42k]
  ------------------
21802|    715|            &&
21803|    715|            (_tmp_123_var = _tmp_123_rule(p))  // ',' | param_no_default
  ------------------
  |  Branch (21803:13): [True: 498, False: 217]
  ------------------
21804|    498|            &&
21805|    498|            (_loop0_31_var_1 = _loop0_31_rule(p))  // param_maybe_default*
  ------------------
  |  Branch (21805:13): [True: 498, False: 0]
  ------------------
21806|    498|            &&
21807|    498|            (a = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (21807:13): [True: 1, False: 497]
  ------------------
21808|  5.14k|        )
21809|      1|        {
21810|      1|            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'"));
21811|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "/ must be ahead of *" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21812|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21812:18): [True: 1, False: 0]
  |  Branch (21812:34): [True: 0, False: 0]
  |  Branch (21812:57): [True: 1, False: 0]
  ------------------
21813|      1|                p->error_indicator = 1;
21814|      1|                p->level--;
21815|      1|                return NULL;
21816|      1|            }
21817|      0|            goto done;
21818|      1|        }
21819|  5.14k|        p->mark = _mark;
21820|  5.14k|        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
21821|  5.14k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[(slash_no_default | slash_with_default)] param_maybe_default* '*' (',' | param_no_default) param_maybe_default* '/'"));
21822|  5.14k|    }
21823|      0|    { // param_maybe_default+ '/' '*'
21824|  5.14k|        if (p->error_indicator) {
  ------------------
  |  Branch (21824:13): [True: 3, False: 5.13k]
  ------------------
21825|      3|            p->level--;
21826|      3|            return NULL;
21827|      3|        }
21828|  5.13k|        D(fprintf(stderr, "%*c> invalid_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'"));
21829|  5.13k|        Token * _literal;
21830|  5.13k|        asdl_seq * _loop1_32_var;
21831|  5.13k|        Token * a;
21832|  5.13k|        if (
21833|  5.13k|            (_loop1_32_var = _loop1_32_rule(p))  // param_maybe_default+
  ------------------
  |  Branch (21833:13): [True: 2.40k, False: 2.73k]
  ------------------
21834|  2.40k|            &&
21835|  2.40k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (21835:13): [True: 532, False: 1.87k]
  ------------------
21836|    532|            &&
21837|    532|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (21837:13): [True: 2, False: 530]
  ------------------
21838|  5.13k|        )
21839|      2|        {
21840|      2|            D(fprintf(stderr, "%*c+ invalid_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_maybe_default+ '/' '*'"));
21841|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "expected comma between / and *" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21842|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21842:18): [True: 2, False: 0]
  |  Branch (21842:34): [True: 0, False: 0]
  |  Branch (21842:57): [True: 2, False: 0]
  ------------------
21843|      2|                p->error_indicator = 1;
21844|      2|                p->level--;
21845|      2|                return NULL;
21846|      2|            }
21847|      0|            goto done;
21848|      2|        }
21849|  5.13k|        p->mark = _mark;
21850|  5.13k|        D(fprintf(stderr, "%*c%s invalid_parameters[%d-%d]: %s failed!\n", p->level, ' ',
21851|  5.13k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default+ '/' '*'"));
21852|  5.13k|    }
21853|  5.13k|    _res = NULL;
21854|  5.13k|  done:
21855|  5.13k|    p->level--;
21856|  5.13k|    return _res;
21857|  5.13k|}
parser.c:_tmp_122_rule:
34928|  10.3k|{
34929|  10.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  20.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34929:9): [True: 0, False: 10.3k]
  |  Branch (34929:35): [True: 0, False: 10.3k]
  ------------------
34930|      0|        _Pypegen_stack_overflow(p);
34931|      0|    }
34932|  10.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (34932:9): [True: 0, False: 10.3k]
  ------------------
34933|      0|        p->level--;
34934|      0|        return NULL;
34935|      0|    }
34936|  10.3k|    void * _res = NULL;
34937|  10.3k|    int _mark = p->mark;
34938|  10.3k|    { // slash_no_default
34939|  10.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (34939:13): [True: 0, False: 10.3k]
  ------------------
34940|      0|            p->level--;
34941|      0|            return NULL;
34942|      0|        }
34943|  10.3k|        D(fprintf(stderr, "%*c> _tmp_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default"));
34944|  10.3k|        asdl_arg_seq* slash_no_default_var;
34945|  10.3k|        if (
34946|  10.3k|            (slash_no_default_var = slash_no_default_rule(p))  // slash_no_default
  ------------------
  |  Branch (34946:13): [True: 693, False: 9.60k]
  ------------------
34947|  10.3k|        )
34948|    693|        {
34949|    693|            D(fprintf(stderr, "%*c+ _tmp_122[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default"));
34950|    693|            _res = slash_no_default_var;
34951|    693|            goto done;
34952|    693|        }
34953|  9.60k|        p->mark = _mark;
34954|  9.60k|        D(fprintf(stderr, "%*c%s _tmp_122[%d-%d]: %s failed!\n", p->level, ' ',
34955|  9.60k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default"));
34956|  9.60k|    }
34957|      0|    { // slash_with_default
34958|  9.60k|        if (p->error_indicator) {
  ------------------
  |  Branch (34958:13): [True: 1, False: 9.60k]
  ------------------
34959|      1|            p->level--;
34960|      1|            return NULL;
34961|      1|        }
34962|  9.60k|        D(fprintf(stderr, "%*c> _tmp_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
34963|  9.60k|        SlashWithDefault* slash_with_default_var;
34964|  9.60k|        if (
34965|  9.60k|            (slash_with_default_var = slash_with_default_rule(p))  // slash_with_default
  ------------------
  |  Branch (34965:13): [True: 359, False: 9.24k]
  ------------------
34966|  9.60k|        )
34967|    359|        {
34968|    359|            D(fprintf(stderr, "%*c+ _tmp_122[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
34969|    359|            _res = slash_with_default_var;
34970|    359|            goto done;
34971|    359|        }
34972|  9.24k|        p->mark = _mark;
34973|  9.24k|        D(fprintf(stderr, "%*c%s _tmp_122[%d-%d]: %s failed!\n", p->level, ' ',
34974|  9.24k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default"));
34975|  9.24k|    }
34976|  9.24k|    _res = NULL;
34977|  10.3k|  done:
34978|  10.3k|    p->level--;
34979|  10.3k|    return _res;
34980|  9.24k|}
parser.c:slash_with_default_rule:
 5111|  31.6k|{
 5112|  31.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  63.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5112:9): [True: 0, False: 31.6k]
  |  Branch (5112:35): [True: 0, False: 31.6k]
  ------------------
 5113|      0|        _Pypegen_stack_overflow(p);
 5114|      0|    }
 5115|  31.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (5115:9): [True: 0, False: 31.6k]
  ------------------
 5116|      0|        p->level--;
 5117|      0|        return NULL;
 5118|      0|    }
 5119|  31.6k|    SlashWithDefault* _res = NULL;
 5120|  31.6k|    int _mark = p->mark;
 5121|  31.6k|    { // param_no_default* param_with_default+ '/' ','
 5122|  31.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (5122:13): [True: 0, False: 31.6k]
  ------------------
 5123|      0|            p->level--;
 5124|      0|            return NULL;
 5125|      0|        }
 5126|  31.6k|        D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
 5127|  31.6k|        Token * _literal;
 5128|  31.6k|        Token * _literal_1;
 5129|  31.6k|        asdl_seq * a;
 5130|  31.6k|        asdl_seq * b;
 5131|  31.6k|        if (
 5132|  31.6k|            (a = _loop0_27_rule(p))  // param_no_default*
  ------------------
  |  Branch (5132:13): [True: 31.6k, False: 0]
  ------------------
 5133|  31.6k|            &&
 5134|  31.6k|            (b = _loop1_30_rule(p))  // param_with_default+
  ------------------
  |  Branch (5134:13): [True: 1.88k, False: 29.7k]
  ------------------
 5135|  1.88k|            &&
 5136|  1.88k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (5136:13): [True: 1.06k, False: 814]
  ------------------
 5137|  1.06k|            &&
 5138|  1.06k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5138:13): [True: 48, False: 1.01k]
  ------------------
 5139|  31.6k|        )
 5140|     48|        {
 5141|     48|            D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
 5142|     48|            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
 5143|     48|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5143:18): [True: 0, False: 48]
  |  Branch (5143:34): [True: 0, False: 48]
  |  Branch (5143:57): [True: 0, False: 0]
  ------------------
 5144|      0|                p->error_indicator = 1;
 5145|      0|                p->level--;
 5146|      0|                return NULL;
 5147|      0|            }
 5148|     48|            goto done;
 5149|     48|        }
 5150|  31.6k|        p->mark = _mark;
 5151|  31.6k|        D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
 5152|  31.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' ','"));
 5153|  31.6k|    }
 5154|      0|    { // param_no_default* param_with_default+ '/' &')'
 5155|  31.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (5155:13): [True: 15, False: 31.5k]
  ------------------
 5156|     15|            p->level--;
 5157|     15|            return NULL;
 5158|     15|        }
 5159|  31.5k|        D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
 5160|  31.5k|        Token * _literal;
 5161|  31.5k|        asdl_seq * a;
 5162|  31.5k|        asdl_seq * b;
 5163|  31.5k|        if (
 5164|  31.5k|            (a = _loop0_27_rule(p))  // param_no_default*
  ------------------
  |  Branch (5164:13): [True: 31.5k, False: 0]
  ------------------
 5165|  31.5k|            &&
 5166|  31.5k|            (b = _loop1_30_rule(p))  // param_with_default+
  ------------------
  |  Branch (5166:13): [True: 1.83k, False: 29.7k]
  ------------------
 5167|  1.83k|            &&
 5168|  1.83k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (5168:13): [True: 1.01k, False: 814]
  ------------------
 5169|  1.01k|            &&
 5170|  1.01k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (5170:13): [True: 1.00k, False: 17]
  ------------------
 5171|  31.5k|        )
 5172|  1.00k|        {
 5173|  1.00k|            D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
 5174|  1.00k|            _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq* ) a , b );
 5175|  1.00k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5175:18): [True: 0, False: 1.00k]
  |  Branch (5175:34): [True: 0, False: 1.00k]
  |  Branch (5175:57): [True: 0, False: 0]
  ------------------
 5176|      0|                p->error_indicator = 1;
 5177|      0|                p->level--;
 5178|      0|                return NULL;
 5179|      0|            }
 5180|  1.00k|            goto done;
 5181|  1.00k|        }
 5182|  30.5k|        p->mark = _mark;
 5183|  30.5k|        D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ',
 5184|  30.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' &')'"));
 5185|  30.5k|    }
 5186|  30.5k|    _res = NULL;
 5187|  31.6k|  done:
 5188|  31.6k|    p->level--;
 5189|  31.6k|    return _res;
 5190|  30.5k|}
parser.c:_loop1_30_rule:
29120|  79.3k|{
29121|  79.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   158k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29121:9): [True: 0, False: 79.3k]
  |  Branch (29121:35): [True: 0, False: 79.3k]
  ------------------
29122|      0|        _Pypegen_stack_overflow(p);
29123|      0|    }
29124|  79.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (29124:9): [True: 0, False: 79.3k]
  ------------------
29125|      0|        p->level--;
29126|      0|        return NULL;
29127|      0|    }
29128|  79.3k|    void *_res = NULL;
29129|  79.3k|    int _mark = p->mark;
29130|  79.3k|    void **_children = PyMem_Malloc(sizeof(void *));
29131|  79.3k|    if (!_children) {
  ------------------
  |  Branch (29131:9): [True: 0, False: 79.3k]
  ------------------
29132|      0|        p->error_indicator = 1;
29133|      0|        PyErr_NoMemory();
29134|      0|        p->level--;
29135|      0|        return NULL;
29136|      0|    }
29137|  79.3k|    Py_ssize_t _children_capacity = 1;
29138|  79.3k|    Py_ssize_t _n = 0;
29139|  79.3k|    { // param_with_default
29140|  79.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (29140:13): [True: 0, False: 79.3k]
  ------------------
29141|      0|            p->level--;
29142|      0|            return NULL;
29143|      0|        }
29144|  79.3k|        D(fprintf(stderr, "%*c> _loop1_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
29145|  79.3k|        NameDefaultPair* param_with_default_var;
29146|  79.3k|        while (
29147|  84.9k|            (param_with_default_var = param_with_default_rule(p))  // param_with_default
  ------------------
  |  Branch (29147:13): [True: 5.64k, False: 79.3k]
  ------------------
29148|  79.3k|        )
29149|  5.64k|        {
29150|  5.64k|            _res = param_with_default_var;
29151|  5.64k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29151:17): [True: 1.06k, False: 4.58k]
  ------------------
29152|  1.06k|                _children_capacity *= 2;
29153|  1.06k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29154|  1.06k|                if (!_new_children) {
  ------------------
  |  Branch (29154:21): [True: 0, False: 1.06k]
  ------------------
29155|      0|                    PyMem_Free(_children);
29156|      0|                    p->error_indicator = 1;
29157|      0|                    PyErr_NoMemory();
29158|      0|                    p->level--;
29159|      0|                    return NULL;
29160|      0|                }
29161|  1.06k|                _children = _new_children;
29162|  1.06k|            }
29163|  5.64k|            _children[_n++] = _res;
29164|  5.64k|            _mark = p->mark;
29165|  5.64k|        }
29166|  79.3k|        p->mark = _mark;
29167|  79.3k|        D(fprintf(stderr, "%*c%s _loop1_30[%d-%d]: %s failed!\n", p->level, ' ',
29168|  79.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
29169|  79.3k|    }
29170|  79.3k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (29170:9): [True: 75.1k, False: 4.15k]
  |  Branch (29170:20): [True: 4, False: 4.14k]
  ------------------
29171|  75.1k|        PyMem_Free(_children);
29172|  75.1k|        p->level--;
29173|  75.1k|        return NULL;
29174|  75.1k|    }
29175|  4.14k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29176|  4.14k|    if (!_seq) {
  ------------------
  |  Branch (29176:9): [True: 0, False: 4.14k]
  ------------------
29177|      0|        PyMem_Free(_children);
29178|      0|        p->error_indicator = 1;
29179|      0|        PyErr_NoMemory();
29180|      0|        p->level--;
29181|      0|        return NULL;
29182|      0|    }
29183|  9.78k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  5.63k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.78k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29183:28): [True: 5.63k, False: 4.14k]
  ------------------
29184|  4.14k|    PyMem_Free(_children);
29185|  4.14k|    p->level--;
29186|  4.14k|    return _seq;
29187|  4.14k|}
parser.c:param_with_default_rule:
 5584|  91.4k|{
 5585|  91.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   182k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5585:9): [True: 0, False: 91.4k]
  |  Branch (5585:35): [True: 0, False: 91.4k]
  ------------------
 5586|      0|        _Pypegen_stack_overflow(p);
 5587|      0|    }
 5588|  91.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (5588:9): [True: 0, False: 91.4k]
  ------------------
 5589|      0|        p->level--;
 5590|      0|        return NULL;
 5591|      0|    }
 5592|  91.4k|    NameDefaultPair* _res = NULL;
 5593|  91.4k|    int _mark = p->mark;
 5594|  91.4k|    { // param default ',' TYPE_COMMENT?
 5595|  91.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (5595:13): [True: 0, False: 91.4k]
  ------------------
 5596|      0|            p->level--;
 5597|      0|            return NULL;
 5598|      0|        }
 5599|  91.4k|        D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
 5600|  91.4k|        Token * _literal;
 5601|  91.4k|        arg_ty a;
 5602|  91.4k|        expr_ty c;
 5603|  91.4k|        void *tc;
 5604|  91.4k|        if (
 5605|  91.4k|            (a = param_rule(p))  // param
  ------------------
  |  Branch (5605:13): [True: 6.59k, False: 84.8k]
  ------------------
 5606|  6.59k|            &&
 5607|  6.59k|            (c = default_rule(p))  // default
  ------------------
  |  Branch (5607:13): [True: 5.90k, False: 695]
  ------------------
 5608|  5.90k|            &&
 5609|  5.90k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5609:13): [True: 4.06k, False: 1.83k]
  ------------------
 5610|  4.06k|            &&
 5611|  4.06k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  4.06k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5611:13): [True: 4.06k, False: 2]
  ------------------
 5612|  91.4k|        )
 5613|  4.06k|        {
 5614|  4.06k|            D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?"));
 5615|  4.06k|            _res = _PyPegen_name_default_pair ( p , a , c , tc );
 5616|  4.06k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5616:18): [True: 1, False: 4.06k]
  |  Branch (5616:34): [True: 0, False: 4.06k]
  |  Branch (5616:57): [True: 1, False: 0]
  ------------------
 5617|      1|                p->error_indicator = 1;
 5618|      1|                p->level--;
 5619|      1|                return NULL;
 5620|      1|            }
 5621|  4.06k|            goto done;
 5622|  4.06k|        }
 5623|  87.3k|        p->mark = _mark;
 5624|  87.3k|        D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
 5625|  87.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default ',' TYPE_COMMENT?"));
 5626|  87.3k|    }
 5627|      0|    { // param default TYPE_COMMENT? &')'
 5628|  87.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (5628:13): [True: 12, False: 87.3k]
  ------------------
 5629|     12|            p->level--;
 5630|     12|            return NULL;
 5631|     12|        }
 5632|  87.3k|        D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
 5633|  87.3k|        arg_ty a;
 5634|  87.3k|        expr_ty c;
 5635|  87.3k|        void *tc;
 5636|  87.3k|        if (
 5637|  87.3k|            (a = param_rule(p))  // param
  ------------------
  |  Branch (5637:13): [True: 2.52k, False: 84.8k]
  ------------------
 5638|  2.52k|            &&
 5639|  2.52k|            (c = default_rule(p))  // default
  ------------------
  |  Branch (5639:13): [True: 1.83k, False: 687]
  ------------------
 5640|  1.83k|            &&
 5641|  1.83k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  1.83k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5641:13): [True: 1.83k, False: 0]
  ------------------
 5642|  1.83k|            &&
 5643|  1.83k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (5643:13): [True: 1.70k, False: 126]
  ------------------
 5644|  87.3k|        )
 5645|  1.70k|        {
 5646|  1.70k|            D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'"));
 5647|  1.70k|            _res = _PyPegen_name_default_pair ( p , a , c , tc );
 5648|  1.70k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5648:18): [True: 2, False: 1.70k]
  |  Branch (5648:34): [True: 0, False: 1.70k]
  |  Branch (5648:57): [True: 2, False: 0]
  ------------------
 5649|      2|                p->error_indicator = 1;
 5650|      2|                p->level--;
 5651|      2|                return NULL;
 5652|      2|            }
 5653|  1.70k|            goto done;
 5654|  1.70k|        }
 5655|  85.6k|        p->mark = _mark;
 5656|  85.6k|        D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ',
 5657|  85.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default TYPE_COMMENT? &')'"));
 5658|  85.6k|    }
 5659|  85.6k|    _res = NULL;
 5660|  91.4k|  done:
 5661|  91.4k|    p->level--;
 5662|  91.4k|    return _res;
 5663|  85.6k|}
parser.c:param_rule:
 5754|   651k|{
 5755|   651k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.30M|#  define MAXSTACK 6000
  ------------------
  |  Branch (5755:9): [True: 0, False: 651k]
  |  Branch (5755:35): [True: 0, False: 651k]
  ------------------
 5756|      0|        _Pypegen_stack_overflow(p);
 5757|      0|    }
 5758|   651k|    if (p->error_indicator) {
  ------------------
  |  Branch (5758:9): [True: 0, False: 651k]
  ------------------
 5759|      0|        p->level--;
 5760|      0|        return NULL;
 5761|      0|    }
 5762|   651k|    arg_ty _res = NULL;
 5763|   651k|    int _mark = p->mark;
 5764|   651k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (5764:9): [True: 15.2k, False: 635k]
  |  Branch (5764:31): [True: 9, False: 15.2k]
  ------------------
 5765|      9|        p->error_indicator = 1;
 5766|      9|        p->level--;
 5767|      9|        return NULL;
 5768|      9|    }
 5769|   651k|    int _start_lineno = p->tokens[_mark]->lineno;
 5770|   651k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   651k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 651k]
  |  |  ------------------
  ------------------
 5771|   651k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 5772|   651k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   651k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 651k]
  |  |  ------------------
  ------------------
 5773|   651k|    { // NAME annotation?
 5774|   651k|        if (p->error_indicator) {
  ------------------
  |  Branch (5774:13): [True: 0, False: 651k]
  ------------------
 5775|      0|            p->level--;
 5776|      0|            return NULL;
 5777|      0|        }
 5778|   651k|        D(fprintf(stderr, "%*c> param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
 5779|   651k|        expr_ty a;
 5780|   651k|        void *b;
 5781|   651k|        if (
 5782|   651k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (5782:13): [True: 159k, False: 491k]
  ------------------
 5783|   159k|            &&
 5784|   159k|            (b = annotation_rule(p), !p->error_indicator)  // annotation?
  ------------------
  |  Branch (5784:13): [True: 159k, False: 21]
  ------------------
 5785|   651k|        )
 5786|   159k|        {
 5787|   159k|            D(fprintf(stderr, "%*c+ param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME annotation?"));
 5788|   159k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 5789|   159k|            if (_token == NULL) {
  ------------------
  |  Branch (5789:17): [True: 0, False: 159k]
  ------------------
 5790|      0|                p->level--;
 5791|      0|                return NULL;
 5792|      0|            }
 5793|   159k|            int _end_lineno = _token->end_lineno;
 5794|   159k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   159k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 159k]
  |  |  ------------------
  ------------------
 5795|   159k|            int _end_col_offset = _token->end_col_offset;
 5796|   159k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   159k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 159k]
  |  |  ------------------
  ------------------
 5797|   159k|            _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA );
  ------------------
  |  |  307|   159k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 5798|   159k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5798:18): [True: 0, False: 159k]
  |  Branch (5798:34): [True: 0, False: 159k]
  |  Branch (5798:57): [True: 0, False: 0]
  ------------------
 5799|      0|                p->error_indicator = 1;
 5800|      0|                p->level--;
 5801|      0|                return NULL;
 5802|      0|            }
 5803|   159k|            goto done;
 5804|   159k|        }
 5805|   491k|        p->mark = _mark;
 5806|   491k|        D(fprintf(stderr, "%*c%s param[%d-%d]: %s failed!\n", p->level, ' ',
 5807|   491k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME annotation?"));
 5808|   491k|    }
 5809|   491k|    _res = NULL;
 5810|   651k|  done:
 5811|   651k|    p->level--;
 5812|   651k|    return _res;
 5813|   491k|}
parser.c:annotation_rule:
 5882|   159k|{
 5883|   159k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   319k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5883:9): [True: 0, False: 159k]
  |  Branch (5883:35): [True: 0, False: 159k]
  ------------------
 5884|      0|        _Pypegen_stack_overflow(p);
 5885|      0|    }
 5886|   159k|    if (p->error_indicator) {
  ------------------
  |  Branch (5886:9): [True: 0, False: 159k]
  ------------------
 5887|      0|        p->level--;
 5888|      0|        return NULL;
 5889|      0|    }
 5890|   159k|    expr_ty _res = NULL;
 5891|   159k|    int _mark = p->mark;
 5892|   159k|    { // ':' expression
 5893|   159k|        if (p->error_indicator) {
  ------------------
  |  Branch (5893:13): [True: 0, False: 159k]
  ------------------
 5894|      0|            p->level--;
 5895|      0|            return NULL;
 5896|      0|        }
 5897|   159k|        D(fprintf(stderr, "%*c> annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression"));
 5898|   159k|        Token * _literal;
 5899|   159k|        expr_ty a;
 5900|   159k|        if (
 5901|   159k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (5901:13): [True: 25.2k, False: 134k]
  ------------------
 5902|  25.2k|            &&
 5903|  25.2k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (5903:13): [True: 22.6k, False: 2.59k]
  ------------------
 5904|   159k|        )
 5905|  22.6k|        {
 5906|  22.6k|            D(fprintf(stderr, "%*c+ annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression"));
 5907|  22.6k|            _res = a;
 5908|  22.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5908:18): [True: 0, False: 22.6k]
  |  Branch (5908:34): [True: 0, False: 22.6k]
  |  Branch (5908:57): [True: 0, False: 0]
  ------------------
 5909|      0|                p->error_indicator = 1;
 5910|      0|                p->level--;
 5911|      0|                return NULL;
 5912|      0|            }
 5913|  22.6k|            goto done;
 5914|  22.6k|        }
 5915|   137k|        p->mark = _mark;
 5916|   137k|        D(fprintf(stderr, "%*c%s annotation[%d-%d]: %s failed!\n", p->level, ' ',
 5917|   137k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression"));
 5918|   137k|    }
 5919|   137k|    _res = NULL;
 5920|   159k|  done:
 5921|   159k|    p->level--;
 5922|   159k|    return _res;
 5923|   137k|}
parser.c:_loop0_31_rule:
29192|  7.95k|{
29193|  7.95k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29193:9): [True: 0, False: 7.95k]
  |  Branch (29193:35): [True: 0, False: 7.95k]
  ------------------
29194|      0|        _Pypegen_stack_overflow(p);
29195|      0|    }
29196|  7.95k|    if (p->error_indicator) {
  ------------------
  |  Branch (29196:9): [True: 0, False: 7.95k]
  ------------------
29197|      0|        p->level--;
29198|      0|        return NULL;
29199|      0|    }
29200|  7.95k|    void *_res = NULL;
29201|  7.95k|    int _mark = p->mark;
29202|  7.95k|    void **_children = PyMem_Malloc(sizeof(void *));
29203|  7.95k|    if (!_children) {
  ------------------
  |  Branch (29203:9): [True: 0, False: 7.95k]
  ------------------
29204|      0|        p->error_indicator = 1;
29205|      0|        PyErr_NoMemory();
29206|      0|        p->level--;
29207|      0|        return NULL;
29208|      0|    }
29209|  7.95k|    Py_ssize_t _children_capacity = 1;
29210|  7.95k|    Py_ssize_t _n = 0;
29211|  7.95k|    { // param_maybe_default
29212|  7.95k|        if (p->error_indicator) {
  ------------------
  |  Branch (29212:13): [True: 0, False: 7.95k]
  ------------------
29213|      0|            p->level--;
29214|      0|            return NULL;
29215|      0|        }
29216|  7.95k|        D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
29217|  7.95k|        NameDefaultPair* param_maybe_default_var;
29218|  7.95k|        while (
29219|  13.7k|            (param_maybe_default_var = param_maybe_default_rule(p))  // param_maybe_default
  ------------------
  |  Branch (29219:13): [True: 5.79k, False: 7.95k]
  ------------------
29220|  7.95k|        )
29221|  5.79k|        {
29222|  5.79k|            _res = param_maybe_default_var;
29223|  5.79k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29223:17): [True: 789, False: 5.00k]
  ------------------
29224|    789|                _children_capacity *= 2;
29225|    789|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29226|    789|                if (!_new_children) {
  ------------------
  |  Branch (29226:21): [True: 0, False: 789]
  ------------------
29227|      0|                    PyMem_Free(_children);
29228|      0|                    p->error_indicator = 1;
29229|      0|                    PyErr_NoMemory();
29230|      0|                    p->level--;
29231|      0|                    return NULL;
29232|      0|                }
29233|    789|                _children = _new_children;
29234|    789|            }
29235|  5.79k|            _children[_n++] = _res;
29236|  5.79k|            _mark = p->mark;
29237|  5.79k|        }
29238|  7.95k|        p->mark = _mark;
29239|  7.95k|        D(fprintf(stderr, "%*c%s _loop0_31[%d-%d]: %s failed!\n", p->level, ' ',
29240|  7.95k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default"));
29241|  7.95k|    }
29242|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29243|  7.95k|    if (!_seq) {
  ------------------
  |  Branch (29243:9): [True: 0, False: 7.95k]
  ------------------
29244|      0|        PyMem_Free(_children);
29245|      0|        p->error_indicator = 1;
29246|      0|        PyErr_NoMemory();
29247|      0|        p->level--;
29248|      0|        return NULL;
29249|      0|    }
29250|  13.7k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  5.79k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  13.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29250:28): [True: 5.79k, False: 7.95k]
  ------------------
29251|  7.95k|    PyMem_Free(_children);
29252|  7.95k|    p->level--;
29253|  7.95k|    return _seq;
29254|  7.95k|}
parser.c:param_maybe_default_rule:
 5670|  22.4k|{
 5671|  22.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  44.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5671:9): [True: 0, False: 22.4k]
  |  Branch (5671:35): [True: 0, False: 22.4k]
  ------------------
 5672|      0|        _Pypegen_stack_overflow(p);
 5673|      0|    }
 5674|  22.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (5674:9): [True: 0, False: 22.4k]
  ------------------
 5675|      0|        p->level--;
 5676|      0|        return NULL;
 5677|      0|    }
 5678|  22.4k|    NameDefaultPair* _res = NULL;
 5679|  22.4k|    int _mark = p->mark;
 5680|  22.4k|    { // param default? ',' TYPE_COMMENT?
 5681|  22.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (5681:13): [True: 0, False: 22.4k]
  ------------------
 5682|      0|            p->level--;
 5683|      0|            return NULL;
 5684|      0|        }
 5685|  22.4k|        D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
 5686|  22.4k|        Token * _literal;
 5687|  22.4k|        arg_ty a;
 5688|  22.4k|        void *c;
 5689|  22.4k|        void *tc;
 5690|  22.4k|        if (
 5691|  22.4k|            (a = param_rule(p))  // param
  ------------------
  |  Branch (5691:13): [True: 9.36k, False: 13.1k]
  ------------------
 5692|  9.36k|            &&
 5693|  9.36k|            (c = default_rule(p), !p->error_indicator)  // default?
  ------------------
  |  Branch (5693:13): [True: 9.36k, False: 3]
  ------------------
 5694|  9.36k|            &&
 5695|  9.36k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5695:13): [True: 4.61k, False: 4.74k]
  ------------------
 5696|  4.61k|            &&
 5697|  4.61k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  4.61k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5697:13): [True: 4.61k, False: 2]
  ------------------
 5698|  22.4k|        )
 5699|  4.61k|        {
 5700|  4.61k|            D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
 5701|  4.61k|            _res = _PyPegen_name_default_pair ( p , a , c , tc );
 5702|  4.61k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5702:18): [True: 0, False: 4.61k]
  |  Branch (5702:34): [True: 0, False: 4.61k]
  |  Branch (5702:57): [True: 0, False: 0]
  ------------------
 5703|      0|                p->error_indicator = 1;
 5704|      0|                p->level--;
 5705|      0|                return NULL;
 5706|      0|            }
 5707|  4.61k|            goto done;
 5708|  4.61k|        }
 5709|  17.8k|        p->mark = _mark;
 5710|  17.8k|        D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
 5711|  17.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? ',' TYPE_COMMENT?"));
 5712|  17.8k|    }
 5713|      0|    { // param default? TYPE_COMMENT? &')'
 5714|  17.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (5714:13): [True: 8, False: 17.8k]
  ------------------
 5715|      8|            p->level--;
 5716|      8|            return NULL;
 5717|      8|        }
 5718|  17.8k|        D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
 5719|  17.8k|        arg_ty a;
 5720|  17.8k|        void *c;
 5721|  17.8k|        void *tc;
 5722|  17.8k|        if (
 5723|  17.8k|            (a = param_rule(p))  // param
  ------------------
  |  Branch (5723:13): [True: 4.74k, False: 13.1k]
  ------------------
 5724|  4.74k|            &&
 5725|  4.74k|            (c = default_rule(p), !p->error_indicator)  // default?
  ------------------
  |  Branch (5725:13): [True: 4.74k, False: 0]
  ------------------
 5726|  4.74k|            &&
 5727|  4.74k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  4.74k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5727:13): [True: 4.74k, False: 0]
  ------------------
 5728|  4.74k|            &&
 5729|  4.74k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (5729:13): [True: 4.55k, False: 188]
  ------------------
 5730|  17.8k|        )
 5731|  4.55k|        {
 5732|  4.55k|            D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
 5733|  4.55k|            _res = _PyPegen_name_default_pair ( p , a , c , tc );
 5734|  4.55k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5734:18): [True: 0, False: 4.55k]
  |  Branch (5734:34): [True: 0, False: 4.55k]
  |  Branch (5734:57): [True: 0, False: 0]
  ------------------
 5735|      0|                p->error_indicator = 1;
 5736|      0|                p->level--;
 5737|      0|                return NULL;
 5738|      0|            }
 5739|  4.55k|            goto done;
 5740|  4.55k|        }
 5741|  13.3k|        p->mark = _mark;
 5742|  13.3k|        D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ',
 5743|  13.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? TYPE_COMMENT? &')'"));
 5744|  13.3k|    }
 5745|  13.3k|    _res = NULL;
 5746|  22.4k|  done:
 5747|  22.4k|    p->level--;
 5748|  22.4k|    return _res;
 5749|  13.3k|}
parser.c:slash_no_default_rule:
 5031|  32.9k|{
 5032|  32.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  65.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5032:9): [True: 0, False: 32.9k]
  |  Branch (5032:35): [True: 0, False: 32.9k]
  ------------------
 5033|      0|        _Pypegen_stack_overflow(p);
 5034|      0|    }
 5035|  32.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (5035:9): [True: 0, False: 32.9k]
  ------------------
 5036|      0|        p->level--;
 5037|      0|        return NULL;
 5038|      0|    }
 5039|  32.9k|    asdl_arg_seq* _res = NULL;
 5040|  32.9k|    int _mark = p->mark;
 5041|  32.9k|    { // param_no_default+ '/' ','
 5042|  32.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (5042:13): [True: 0, False: 32.9k]
  ------------------
 5043|      0|            p->level--;
 5044|      0|            return NULL;
 5045|      0|        }
 5046|  32.9k|        D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
 5047|  32.9k|        Token * _literal;
 5048|  32.9k|        Token * _literal_1;
 5049|  32.9k|        asdl_arg_seq* a;
 5050|  32.9k|        if (
 5051|  32.9k|            (a = (asdl_arg_seq*)_loop1_29_rule(p))  // param_no_default+
  ------------------
  |  Branch (5051:13): [True: 12.6k, False: 20.3k]
  ------------------
 5052|  12.6k|            &&
 5053|  12.6k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (5053:13): [True: 1.65k, False: 10.9k]
  ------------------
 5054|  1.65k|            &&
 5055|  1.65k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5055:13): [True: 45, False: 1.60k]
  ------------------
 5056|  32.9k|        )
 5057|     45|        {
 5058|     45|            D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','"));
 5059|     45|            _res = a;
 5060|     45|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5060:18): [True: 0, False: 45]
  |  Branch (5060:34): [True: 0, False: 45]
  |  Branch (5060:57): [True: 0, False: 0]
  ------------------
 5061|      0|                p->error_indicator = 1;
 5062|      0|                p->level--;
 5063|      0|                return NULL;
 5064|      0|            }
 5065|     45|            goto done;
 5066|     45|        }
 5067|  32.9k|        p->mark = _mark;
 5068|  32.9k|        D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
 5069|  32.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' ','"));
 5070|  32.9k|    }
 5071|      0|    { // param_no_default+ '/' &')'
 5072|  32.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (5072:13): [True: 12, False: 32.8k]
  ------------------
 5073|     12|            p->level--;
 5074|     12|            return NULL;
 5075|     12|        }
 5076|  32.8k|        D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
 5077|  32.8k|        Token * _literal;
 5078|  32.8k|        asdl_arg_seq* a;
 5079|  32.8k|        if (
 5080|  32.8k|            (a = (asdl_arg_seq*)_loop1_29_rule(p))  // param_no_default+
  ------------------
  |  Branch (5080:13): [True: 12.5k, False: 20.3k]
  ------------------
 5081|  12.5k|            &&
 5082|  12.5k|            (_literal = _PyPegen_expect_token(p, 17))  // token='/'
  ------------------
  |  Branch (5082:13): [True: 1.60k, False: 10.9k]
  ------------------
 5083|  1.60k|            &&
 5084|  1.60k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (5084:13): [True: 1.59k, False: 17]
  ------------------
 5085|  32.8k|        )
 5086|  1.59k|        {
 5087|  1.59k|            D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'"));
 5088|  1.59k|            _res = a;
 5089|  1.59k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5089:18): [True: 0, False: 1.59k]
  |  Branch (5089:34): [True: 0, False: 1.59k]
  |  Branch (5089:57): [True: 0, False: 0]
  ------------------
 5090|      0|                p->error_indicator = 1;
 5091|      0|                p->level--;
 5092|      0|                return NULL;
 5093|      0|            }
 5094|  1.59k|            goto done;
 5095|  1.59k|        }
 5096|  31.3k|        p->mark = _mark;
 5097|  31.3k|        D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ',
 5098|  31.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' &')'"));
 5099|  31.3k|    }
 5100|  31.3k|    _res = NULL;
 5101|  32.9k|  done:
 5102|  32.9k|    p->level--;
 5103|  32.9k|    return _res;
 5104|  31.3k|}
parser.c:_loop0_27_rule:
28914|  74.1k|{
28915|  74.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   148k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28915:9): [True: 0, False: 74.1k]
  |  Branch (28915:35): [True: 0, False: 74.1k]
  ------------------
28916|      0|        _Pypegen_stack_overflow(p);
28917|      0|    }
28918|  74.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (28918:9): [True: 0, False: 74.1k]
  ------------------
28919|      0|        p->level--;
28920|      0|        return NULL;
28921|      0|    }
28922|  74.1k|    void *_res = NULL;
28923|  74.1k|    int _mark = p->mark;
28924|  74.1k|    void **_children = PyMem_Malloc(sizeof(void *));
28925|  74.1k|    if (!_children) {
  ------------------
  |  Branch (28925:9): [True: 0, False: 74.1k]
  ------------------
28926|      0|        p->error_indicator = 1;
28927|      0|        PyErr_NoMemory();
28928|      0|        p->level--;
28929|      0|        return NULL;
28930|      0|    }
28931|  74.1k|    Py_ssize_t _children_capacity = 1;
28932|  74.1k|    Py_ssize_t _n = 0;
28933|  74.1k|    { // param_no_default
28934|  74.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (28934:13): [True: 0, False: 74.1k]
  ------------------
28935|      0|            p->level--;
28936|      0|            return NULL;
28937|      0|        }
28938|  74.1k|        D(fprintf(stderr, "%*c> _loop0_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
28939|  74.1k|        arg_ty param_no_default_var;
28940|  74.1k|        while (
28941|   101k|            (param_no_default_var = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (28941:13): [True: 27.1k, False: 74.1k]
  ------------------
28942|  74.1k|        )
28943|  27.1k|        {
28944|  27.1k|            _res = param_no_default_var;
28945|  27.1k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (28945:17): [True: 4.18k, False: 22.9k]
  ------------------
28946|  4.18k|                _children_capacity *= 2;
28947|  4.18k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
28948|  4.18k|                if (!_new_children) {
  ------------------
  |  Branch (28948:21): [True: 0, False: 4.18k]
  ------------------
28949|      0|                    PyMem_Free(_children);
28950|      0|                    p->error_indicator = 1;
28951|      0|                    PyErr_NoMemory();
28952|      0|                    p->level--;
28953|      0|                    return NULL;
28954|      0|                }
28955|  4.18k|                _children = _new_children;
28956|  4.18k|            }
28957|  27.1k|            _children[_n++] = _res;
28958|  27.1k|            _mark = p->mark;
28959|  27.1k|        }
28960|  74.1k|        p->mark = _mark;
28961|  74.1k|        D(fprintf(stderr, "%*c%s _loop0_27[%d-%d]: %s failed!\n", p->level, ' ',
28962|  74.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
28963|  74.1k|    }
28964|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
28965|  74.1k|    if (!_seq) {
  ------------------
  |  Branch (28965:9): [True: 0, False: 74.1k]
  ------------------
28966|      0|        PyMem_Free(_children);
28967|      0|        p->error_indicator = 1;
28968|      0|        PyErr_NoMemory();
28969|      0|        p->level--;
28970|      0|        return NULL;
28971|      0|    }
28972|   101k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  27.1k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   101k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (28972:28): [True: 27.1k, False: 74.1k]
  ------------------
28973|  74.1k|    PyMem_Free(_children);
28974|  74.1k|    p->level--;
28975|  74.1k|    return _seq;
28976|  74.1k|}
parser.c:invalid_parameters_helper_rule:
22168|  5.15k|{
22169|  5.15k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22169:9): [True: 0, False: 5.15k]
  |  Branch (22169:35): [True: 0, False: 5.15k]
  ------------------
22170|      0|        _Pypegen_stack_overflow(p);
22171|      0|    }
22172|  5.15k|    if (p->error_indicator) {
  ------------------
  |  Branch (22172:9): [True: 0, False: 5.15k]
  ------------------
22173|      0|        p->level--;
22174|      0|        return NULL;
22175|      0|    }
22176|  5.15k|    void * _res = NULL;
22177|  5.15k|    int _mark = p->mark;
22178|  5.15k|    { // slash_with_default
22179|  5.15k|        if (p->error_indicator) {
  ------------------
  |  Branch (22179:13): [True: 0, False: 5.15k]
  ------------------
22180|      0|            p->level--;
22181|      0|            return NULL;
22182|      0|        }
22183|  5.15k|        D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
22184|  5.15k|        SlashWithDefault* a;
22185|  5.15k|        if (
22186|  5.15k|            (a = slash_with_default_rule(p))  // slash_with_default
  ------------------
  |  Branch (22186:13): [True: 179, False: 4.97k]
  ------------------
22187|  5.15k|        )
22188|    179|        {
22189|    179|            D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default"));
22190|    179|            _res = _PyPegen_singleton_seq ( p , a );
22191|    179|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22191:18): [True: 0, False: 179]
  |  Branch (22191:34): [True: 0, False: 179]
  |  Branch (22191:57): [True: 0, False: 0]
  ------------------
22192|      0|                p->error_indicator = 1;
22193|      0|                p->level--;
22194|      0|                return NULL;
22195|      0|            }
22196|    179|            goto done;
22197|    179|        }
22198|  4.97k|        p->mark = _mark;
22199|  4.97k|        D(fprintf(stderr, "%*c%s invalid_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
22200|  4.97k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default"));
22201|  4.97k|    }
22202|      0|    { // param_with_default+
22203|  4.97k|        if (p->error_indicator) {
  ------------------
  |  Branch (22203:13): [True: 0, False: 4.97k]
  ------------------
22204|      0|            p->level--;
22205|      0|            return NULL;
22206|      0|        }
22207|  4.97k|        D(fprintf(stderr, "%*c> invalid_parameters_helper[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
22208|  4.97k|        asdl_seq * _loop1_30_var;
22209|  4.97k|        if (
22210|  4.97k|            (_loop1_30_var = _loop1_30_rule(p))  // param_with_default+
  ------------------
  |  Branch (22210:13): [True: 182, False: 4.78k]
  ------------------
22211|  4.97k|        )
22212|    182|        {
22213|    182|            D(fprintf(stderr, "%*c+ invalid_parameters_helper[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+"));
22214|    182|            _res = _loop1_30_var;
22215|    182|            goto done;
22216|    182|        }
22217|  4.78k|        p->mark = _mark;
22218|  4.78k|        D(fprintf(stderr, "%*c%s invalid_parameters_helper[%d-%d]: %s failed!\n", p->level, ' ',
22219|  4.78k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+"));
22220|  4.78k|    }
22221|  4.78k|    _res = NULL;
22222|  5.15k|  done:
22223|  5.15k|    p->level--;
22224|  5.15k|    return _res;
22225|  4.78k|}
parser.c:param_no_default_rule:
 5426|   225k|{
 5427|   225k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   451k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5427:9): [True: 0, False: 225k]
  |  Branch (5427:35): [True: 0, False: 225k]
  ------------------
 5428|      0|        _Pypegen_stack_overflow(p);
 5429|      0|    }
 5430|   225k|    if (p->error_indicator) {
  ------------------
  |  Branch (5430:9): [True: 0, False: 225k]
  ------------------
 5431|      0|        p->level--;
 5432|      0|        return NULL;
 5433|      0|    }
 5434|   225k|    arg_ty _res = NULL;
 5435|   225k|    int _mark = p->mark;
 5436|   225k|    { // param ',' TYPE_COMMENT?
 5437|   225k|        if (p->error_indicator) {
  ------------------
  |  Branch (5437:13): [True: 0, False: 225k]
  ------------------
 5438|      0|            p->level--;
 5439|      0|            return NULL;
 5440|      0|        }
 5441|   225k|        D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
 5442|   225k|        Token * _literal;
 5443|   225k|        arg_ty a;
 5444|   225k|        void *tc;
 5445|   225k|        if (
 5446|   225k|            (a = param_rule(p))  // param
  ------------------
  |  Branch (5446:13): [True: 78.1k, False: 147k]
  ------------------
 5447|  78.1k|            &&
 5448|  78.1k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5448:13): [True: 24.6k, False: 53.5k]
  ------------------
 5449|  24.6k|            &&
 5450|  24.6k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  24.6k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5450:13): [True: 24.6k, False: 3]
  ------------------
 5451|   225k|        )
 5452|  24.6k|        {
 5453|  24.6k|            D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?"));
 5454|  24.6k|            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
 5455|  24.6k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5455:18): [True: 1, False: 24.6k]
  |  Branch (5455:34): [True: 0, False: 24.6k]
  |  Branch (5455:57): [True: 1, False: 0]
  ------------------
 5456|      1|                p->error_indicator = 1;
 5457|      1|                p->level--;
 5458|      1|                return NULL;
 5459|      1|            }
 5460|  24.6k|            goto done;
 5461|  24.6k|        }
 5462|   201k|        p->mark = _mark;
 5463|   201k|        D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
 5464|   201k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param ',' TYPE_COMMENT?"));
 5465|   201k|    }
 5466|      0|    { // param TYPE_COMMENT? &')'
 5467|   201k|        if (p->error_indicator) {
  ------------------
  |  Branch (5467:13): [True: 25, False: 201k]
  ------------------
 5468|     25|            p->level--;
 5469|     25|            return NULL;
 5470|     25|        }
 5471|   201k|        D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
 5472|   201k|        arg_ty a;
 5473|   201k|        void *tc;
 5474|   201k|        if (
 5475|   201k|            (a = param_rule(p))  // param
  ------------------
  |  Branch (5475:13): [True: 53.5k, False: 147k]
  ------------------
 5476|  53.5k|            &&
 5477|  53.5k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  53.5k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5477:13): [True: 53.5k, False: 0]
  ------------------
 5478|  53.5k|            &&
 5479|  53.5k|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (5479:13): [True: 42.9k, False: 10.6k]
  ------------------
 5480|   201k|        )
 5481|  42.9k|        {
 5482|  42.9k|            D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'"));
 5483|  42.9k|            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
 5484|  42.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5484:18): [True: 0, False: 42.9k]
  |  Branch (5484:34): [True: 0, False: 42.9k]
  |  Branch (5484:57): [True: 0, False: 0]
  ------------------
 5485|      0|                p->error_indicator = 1;
 5486|      0|                p->level--;
 5487|      0|                return NULL;
 5488|      0|            }
 5489|  42.9k|            goto done;
 5490|  42.9k|        }
 5491|   158k|        p->mark = _mark;
 5492|   158k|        D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ',
 5493|   158k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param TYPE_COMMENT? &')'"));
 5494|   158k|    }
 5495|   158k|    _res = NULL;
 5496|   225k|  done:
 5497|   225k|    p->level--;
 5498|   225k|    return _res;
 5499|   158k|}
parser.c:_loop1_29_rule:
29048|  82.2k|{
29049|  82.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   164k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29049:9): [True: 0, False: 82.2k]
  |  Branch (29049:35): [True: 0, False: 82.2k]
  ------------------
29050|      0|        _Pypegen_stack_overflow(p);
29051|      0|    }
29052|  82.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (29052:9): [True: 0, False: 82.2k]
  ------------------
29053|      0|        p->level--;
29054|      0|        return NULL;
29055|      0|    }
29056|  82.2k|    void *_res = NULL;
29057|  82.2k|    int _mark = p->mark;
29058|  82.2k|    void **_children = PyMem_Malloc(sizeof(void *));
29059|  82.2k|    if (!_children) {
  ------------------
  |  Branch (29059:9): [True: 0, False: 82.2k]
  ------------------
29060|      0|        p->error_indicator = 1;
29061|      0|        PyErr_NoMemory();
29062|      0|        p->level--;
29063|      0|        return NULL;
29064|      0|    }
29065|  82.2k|    Py_ssize_t _children_capacity = 1;
29066|  82.2k|    Py_ssize_t _n = 0;
29067|  82.2k|    { // param_no_default
29068|  82.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (29068:13): [True: 0, False: 82.2k]
  ------------------
29069|      0|            p->level--;
29070|      0|            return NULL;
29071|      0|        }
29072|  82.2k|        D(fprintf(stderr, "%*c> _loop1_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
29073|  82.2k|        arg_ty param_no_default_var;
29074|  82.2k|        while (
29075|   118k|            (param_no_default_var = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (29075:13): [True: 35.7k, False: 82.2k]
  ------------------
29076|  82.2k|        )
29077|  35.7k|        {
29078|  35.7k|            _res = param_no_default_var;
29079|  35.7k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29079:17): [True: 4.61k, False: 31.1k]
  ------------------
29080|  4.61k|                _children_capacity *= 2;
29081|  4.61k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29082|  4.61k|                if (!_new_children) {
  ------------------
  |  Branch (29082:21): [True: 0, False: 4.61k]
  ------------------
29083|      0|                    PyMem_Free(_children);
29084|      0|                    p->error_indicator = 1;
29085|      0|                    PyErr_NoMemory();
29086|      0|                    p->level--;
29087|      0|                    return NULL;
29088|      0|                }
29089|  4.61k|                _children = _new_children;
29090|  4.61k|            }
29091|  35.7k|            _children[_n++] = _res;
29092|  35.7k|            _mark = p->mark;
29093|  35.7k|        }
29094|  82.2k|        p->mark = _mark;
29095|  82.2k|        D(fprintf(stderr, "%*c%s _loop1_29[%d-%d]: %s failed!\n", p->level, ' ',
29096|  82.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
29097|  82.2k|    }
29098|  82.2k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (29098:9): [True: 51.7k, False: 30.4k]
  |  Branch (29098:20): [True: 5, False: 30.4k]
  ------------------
29099|  51.7k|        PyMem_Free(_children);
29100|  51.7k|        p->level--;
29101|  51.7k|        return NULL;
29102|  51.7k|    }
29103|  30.4k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29104|  30.4k|    if (!_seq) {
  ------------------
  |  Branch (29104:9): [True: 0, False: 30.4k]
  ------------------
29105|      0|        PyMem_Free(_children);
29106|      0|        p->error_indicator = 1;
29107|      0|        PyErr_NoMemory();
29108|      0|        p->level--;
29109|      0|        return NULL;
29110|      0|    }
29111|  66.2k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  35.7k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  66.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29111:28): [True: 35.7k, False: 30.4k]
  ------------------
29112|  30.4k|    PyMem_Free(_children);
29113|  30.4k|    p->level--;
29114|  30.4k|    return _seq;
29115|  30.4k|}
parser.c:_tmp_123_rule:
34985|    715|{
34986|    715|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.43k|#  define MAXSTACK 6000
  ------------------
  |  Branch (34986:9): [True: 0, False: 715]
  |  Branch (34986:35): [True: 0, False: 715]
  ------------------
34987|      0|        _Pypegen_stack_overflow(p);
34988|      0|    }
34989|    715|    if (p->error_indicator) {
  ------------------
  |  Branch (34989:9): [True: 0, False: 715]
  ------------------
34990|      0|        p->level--;
34991|      0|        return NULL;
34992|      0|    }
34993|    715|    void * _res = NULL;
34994|    715|    int _mark = p->mark;
34995|    715|    { // ','
34996|    715|        if (p->error_indicator) {
  ------------------
  |  Branch (34996:13): [True: 0, False: 715]
  ------------------
34997|      0|            p->level--;
34998|      0|            return NULL;
34999|      0|        }
35000|    715|        D(fprintf(stderr, "%*c> _tmp_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35001|    715|        Token * _literal;
35002|    715|        if (
35003|    715|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35003:13): [True: 142, False: 573]
  ------------------
35004|    715|        )
35005|    142|        {
35006|    142|            D(fprintf(stderr, "%*c+ _tmp_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35007|    142|            _res = _literal;
35008|    142|            goto done;
35009|    142|        }
35010|    573|        p->mark = _mark;
35011|    573|        D(fprintf(stderr, "%*c%s _tmp_123[%d-%d]: %s failed!\n", p->level, ' ',
35012|    573|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35013|    573|    }
35014|      0|    { // param_no_default
35015|    573|        if (p->error_indicator) {
  ------------------
  |  Branch (35015:13): [True: 1, False: 572]
  ------------------
35016|      1|            p->level--;
35017|      1|            return NULL;
35018|      1|        }
35019|    572|        D(fprintf(stderr, "%*c> _tmp_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
35020|    572|        arg_ty param_no_default_var;
35021|    572|        if (
35022|    572|            (param_no_default_var = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (35022:13): [True: 356, False: 216]
  ------------------
35023|    572|        )
35024|    356|        {
35025|    356|            D(fprintf(stderr, "%*c+ _tmp_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default"));
35026|    356|            _res = param_no_default_var;
35027|    356|            goto done;
35028|    356|        }
35029|    216|        p->mark = _mark;
35030|    216|        D(fprintf(stderr, "%*c%s _tmp_123[%d-%d]: %s failed!\n", p->level, ' ',
35031|    216|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
35032|    216|    }
35033|    216|    _res = NULL;
35034|    714|  done:
35035|    714|    p->level--;
35036|    714|    return _res;
35037|    216|}
parser.c:_loop1_32_rule:
29259|  5.36k|{
29260|  5.36k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29260:9): [True: 0, False: 5.36k]
  |  Branch (29260:35): [True: 0, False: 5.36k]
  ------------------
29261|      0|        _Pypegen_stack_overflow(p);
29262|      0|    }
29263|  5.36k|    if (p->error_indicator) {
  ------------------
  |  Branch (29263:9): [True: 0, False: 5.36k]
  ------------------
29264|      0|        p->level--;
29265|      0|        return NULL;
29266|      0|    }
29267|  5.36k|    void *_res = NULL;
29268|  5.36k|    int _mark = p->mark;
29269|  5.36k|    void **_children = PyMem_Malloc(sizeof(void *));
29270|  5.36k|    if (!_children) {
  ------------------
  |  Branch (29270:9): [True: 0, False: 5.36k]
  ------------------
29271|      0|        p->error_indicator = 1;
29272|      0|        PyErr_NoMemory();
29273|      0|        p->level--;
29274|      0|        return NULL;
29275|      0|    }
29276|  5.36k|    Py_ssize_t _children_capacity = 1;
29277|  5.36k|    Py_ssize_t _n = 0;
29278|  5.36k|    { // param_maybe_default
29279|  5.36k|        if (p->error_indicator) {
  ------------------
  |  Branch (29279:13): [True: 0, False: 5.36k]
  ------------------
29280|      0|            p->level--;
29281|      0|            return NULL;
29282|      0|        }
29283|  5.36k|        D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default"));
29284|  5.36k|        NameDefaultPair* param_maybe_default_var;
29285|  5.36k|        while (
29286|  8.74k|            (param_maybe_default_var = param_maybe_default_rule(p))  // param_maybe_default
  ------------------
  |  Branch (29286:13): [True: 3.37k, False: 5.36k]
  ------------------
29287|  5.36k|        )
29288|  3.37k|        {
29289|  3.37k|            _res = param_maybe_default_var;
29290|  3.37k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29290:17): [True: 519, False: 2.85k]
  ------------------
29291|    519|                _children_capacity *= 2;
29292|    519|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29293|    519|                if (!_new_children) {
  ------------------
  |  Branch (29293:21): [True: 0, False: 519]
  ------------------
29294|      0|                    PyMem_Free(_children);
29295|      0|                    p->error_indicator = 1;
29296|      0|                    PyErr_NoMemory();
29297|      0|                    p->level--;
29298|      0|                    return NULL;
29299|      0|                }
29300|    519|                _children = _new_children;
29301|    519|            }
29302|  3.37k|            _children[_n++] = _res;
29303|  3.37k|            _mark = p->mark;
29304|  3.37k|        }
29305|  5.36k|        p->mark = _mark;
29306|  5.36k|        D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ',
29307|  5.36k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default"));
29308|  5.36k|    }
29309|  5.36k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (29309:9): [True: 2.74k, False: 2.62k]
  |  Branch (29309:20): [True: 1, False: 2.62k]
  ------------------
29310|  2.74k|        PyMem_Free(_children);
29311|  2.74k|        p->level--;
29312|  2.74k|        return NULL;
29313|  2.74k|    }
29314|  2.62k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29315|  2.62k|    if (!_seq) {
  ------------------
  |  Branch (29315:9): [True: 0, False: 2.62k]
  ------------------
29316|      0|        PyMem_Free(_children);
29317|      0|        p->error_indicator = 1;
29318|      0|        PyErr_NoMemory();
29319|      0|        p->level--;
29320|      0|        return NULL;
29321|      0|    }
29322|  5.99k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  3.37k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  5.99k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29322:28): [True: 3.37k, False: 2.62k]
  ------------------
29323|  2.62k|    PyMem_Free(_children);
29324|  2.62k|    p->level--;
29325|  2.62k|    return _seq;
29326|  2.62k|}
parser.c:parameters_rule:
 4868|  17.5k|{
 4869|  17.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  35.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4869:9): [True: 0, False: 17.5k]
  |  Branch (4869:35): [True: 0, False: 17.5k]
  ------------------
 4870|      0|        _Pypegen_stack_overflow(p);
 4871|      0|    }
 4872|  17.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (4872:9): [True: 0, False: 17.5k]
  ------------------
 4873|      0|        p->level--;
 4874|      0|        return NULL;
 4875|      0|    }
 4876|  17.5k|    arguments_ty _res = NULL;
 4877|  17.5k|    int _mark = p->mark;
 4878|  17.5k|    { // slash_no_default param_no_default* param_with_default* star_etc?
 4879|  17.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (4879:13): [True: 0, False: 17.5k]
  ------------------
 4880|      0|            p->level--;
 4881|      0|            return NULL;
 4882|      0|        }
 4883|  17.5k|        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
 4884|  17.5k|        asdl_arg_seq* a;
 4885|  17.5k|        asdl_arg_seq* b;
 4886|  17.5k|        asdl_seq * c;
 4887|  17.5k|        void *d;
 4888|  17.5k|        if (
 4889|  17.5k|            (a = slash_no_default_rule(p))  // slash_no_default
  ------------------
  |  Branch (4889:13): [True: 596, False: 16.9k]
  ------------------
 4890|    596|            &&
 4891|    596|            (b = (asdl_arg_seq*)_loop0_27_rule(p))  // param_no_default*
  ------------------
  |  Branch (4891:13): [True: 596, False: 0]
  ------------------
 4892|    596|            &&
 4893|    596|            (c = _loop0_28_rule(p))  // param_with_default*
  ------------------
  |  Branch (4893:13): [True: 594, False: 2]
  ------------------
 4894|    594|            &&
 4895|    594|            (d = star_etc_rule(p), !p->error_indicator)  // star_etc?
  ------------------
  |  Branch (4895:13): [True: 592, False: 2]
  ------------------
 4896|  17.5k|        )
 4897|    592|        {
 4898|    592|            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
 4899|    592|            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , a , NULL , b , c , d ) );
  ------------------
  |  |  345|    592|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 4900|    592|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4900:18): [True: 0, False: 592]
  |  Branch (4900:34): [True: 0, False: 592]
  |  Branch (4900:57): [True: 0, False: 0]
  ------------------
 4901|      0|                p->error_indicator = 1;
 4902|      0|                p->level--;
 4903|      0|                return NULL;
 4904|      0|            }
 4905|    592|            goto done;
 4906|    592|        }
 4907|  16.9k|        p->mark = _mark;
 4908|  16.9k|        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
 4909|  16.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?"));
 4910|  16.9k|    }
 4911|      0|    { // slash_with_default param_with_default* star_etc?
 4912|  16.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (4912:13): [True: 15, False: 16.8k]
  ------------------
 4913|     15|            p->level--;
 4914|     15|            return NULL;
 4915|     15|        }
 4916|  16.8k|        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
 4917|  16.8k|        SlashWithDefault* a;
 4918|  16.8k|        asdl_seq * b;
 4919|  16.8k|        void *c;
 4920|  16.8k|        if (
 4921|  16.8k|            (a = slash_with_default_rule(p))  // slash_with_default
  ------------------
  |  Branch (4921:13): [True: 510, False: 16.3k]
  ------------------
 4922|    510|            &&
 4923|    510|            (b = _loop0_28_rule(p))  // param_with_default*
  ------------------
  |  Branch (4923:13): [True: 510, False: 0]
  ------------------
 4924|    510|            &&
 4925|    510|            (c = star_etc_rule(p), !p->error_indicator)  // star_etc?
  ------------------
  |  Branch (4925:13): [True: 508, False: 2]
  ------------------
 4926|  16.8k|        )
 4927|    508|        {
 4928|    508|            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
 4929|    508|            _res = CHECK_VERSION ( arguments_ty , 8 , "Positional-only parameters are" , _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ) );
  ------------------
  |  |  345|    508|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 4930|    508|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4930:18): [True: 0, False: 508]
  |  Branch (4930:34): [True: 0, False: 508]
  |  Branch (4930:57): [True: 0, False: 0]
  ------------------
 4931|      0|                p->error_indicator = 1;
 4932|      0|                p->level--;
 4933|      0|                return NULL;
 4934|      0|            }
 4935|    508|            goto done;
 4936|    508|        }
 4937|  16.3k|        p->mark = _mark;
 4938|  16.3k|        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
 4939|  16.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default param_with_default* star_etc?"));
 4940|  16.3k|    }
 4941|      0|    { // param_no_default+ param_with_default* star_etc?
 4942|  16.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (4942:13): [True: 11, False: 16.3k]
  ------------------
 4943|     11|            p->level--;
 4944|     11|            return NULL;
 4945|     11|        }
 4946|  16.3k|        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
 4947|  16.3k|        asdl_arg_seq* a;
 4948|  16.3k|        asdl_seq * b;
 4949|  16.3k|        void *c;
 4950|  16.3k|        if (
 4951|  16.3k|            (a = (asdl_arg_seq*)_loop1_29_rule(p))  // param_no_default+
  ------------------
  |  Branch (4951:13): [True: 5.25k, False: 11.1k]
  ------------------
 4952|  5.25k|            &&
 4953|  5.25k|            (b = _loop0_28_rule(p))  // param_with_default*
  ------------------
  |  Branch (4953:13): [True: 5.25k, False: 0]
  ------------------
 4954|  5.25k|            &&
 4955|  5.25k|            (c = star_etc_rule(p), !p->error_indicator)  // star_etc?
  ------------------
  |  Branch (4955:13): [True: 5.24k, False: 6]
  ------------------
 4956|  16.3k|        )
 4957|  5.24k|        {
 4958|  5.24k|            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
 4959|  5.24k|            _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c );
 4960|  5.24k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4960:18): [True: 0, False: 5.24k]
  |  Branch (4960:34): [True: 0, False: 5.24k]
  |  Branch (4960:57): [True: 0, False: 0]
  ------------------
 4961|      0|                p->error_indicator = 1;
 4962|      0|                p->level--;
 4963|      0|                return NULL;
 4964|      0|            }
 4965|  5.24k|            goto done;
 4966|  5.24k|        }
 4967|  11.1k|        p->mark = _mark;
 4968|  11.1k|        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
 4969|  11.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ param_with_default* star_etc?"));
 4970|  11.1k|    }
 4971|      0|    { // param_with_default+ star_etc?
 4972|  11.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (4972:13): [True: 6, False: 11.1k]
  ------------------
 4973|      6|            p->level--;
 4974|      6|            return NULL;
 4975|      6|        }
 4976|  11.1k|        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
 4977|  11.1k|        asdl_seq * a;
 4978|  11.1k|        void *b;
 4979|  11.1k|        if (
 4980|  11.1k|            (a = _loop1_30_rule(p))  // param_with_default+
  ------------------
  |  Branch (4980:13): [True: 254, False: 10.8k]
  ------------------
 4981|    254|            &&
 4982|    254|            (b = star_etc_rule(p), !p->error_indicator)  // star_etc?
  ------------------
  |  Branch (4982:13): [True: 253, False: 1]
  ------------------
 4983|  11.1k|        )
 4984|    253|        {
 4985|    253|            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?"));
 4986|    253|            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b );
 4987|    253|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4987:18): [True: 0, False: 253]
  |  Branch (4987:34): [True: 0, False: 253]
  |  Branch (4987:57): [True: 0, False: 0]
  ------------------
 4988|      0|                p->error_indicator = 1;
 4989|      0|                p->level--;
 4990|      0|                return NULL;
 4991|      0|            }
 4992|    253|            goto done;
 4993|    253|        }
 4994|  10.8k|        p->mark = _mark;
 4995|  10.8k|        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
 4996|  10.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+ star_etc?"));
 4997|  10.8k|    }
 4998|      0|    { // star_etc
 4999|  10.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (4999:13): [True: 1, False: 10.8k]
  ------------------
 5000|      1|            p->level--;
 5001|      1|            return NULL;
 5002|      1|        }
 5003|  10.8k|        D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_etc"));
 5004|  10.8k|        StarEtc* a;
 5005|  10.8k|        if (
 5006|  10.8k|            (a = star_etc_rule(p))  // star_etc
  ------------------
  |  Branch (5006:13): [True: 4.25k, False: 6.61k]
  ------------------
 5007|  10.8k|        )
 5008|  4.25k|        {
 5009|  4.25k|            D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_etc"));
 5010|  4.25k|            _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a );
 5011|  4.25k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5011:18): [True: 0, False: 4.25k]
  |  Branch (5011:34): [True: 0, False: 4.25k]
  |  Branch (5011:57): [True: 0, False: 0]
  ------------------
 5012|      0|                p->error_indicator = 1;
 5013|      0|                p->level--;
 5014|      0|                return NULL;
 5015|      0|            }
 5016|  4.25k|            goto done;
 5017|  4.25k|        }
 5018|  6.61k|        p->mark = _mark;
 5019|  6.61k|        D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ',
 5020|  6.61k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_etc"));
 5021|  6.61k|    }
 5022|  6.61k|    _res = NULL;
 5023|  17.4k|  done:
 5024|  17.4k|    p->level--;
 5025|  17.4k|    return _res;
 5026|  6.61k|}
parser.c:_loop0_28_rule:
28981|  6.35k|{
28982|  6.35k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  12.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28982:9): [True: 0, False: 6.35k]
  |  Branch (28982:35): [True: 0, False: 6.35k]
  ------------------
28983|      0|        _Pypegen_stack_overflow(p);
28984|      0|    }
28985|  6.35k|    if (p->error_indicator) {
  ------------------
  |  Branch (28985:9): [True: 2, False: 6.35k]
  ------------------
28986|      2|        p->level--;
28987|      2|        return NULL;
28988|      2|    }
28989|  6.35k|    void *_res = NULL;
28990|  6.35k|    int _mark = p->mark;
28991|  6.35k|    void **_children = PyMem_Malloc(sizeof(void *));
28992|  6.35k|    if (!_children) {
  ------------------
  |  Branch (28992:9): [True: 0, False: 6.35k]
  ------------------
28993|      0|        p->error_indicator = 1;
28994|      0|        PyErr_NoMemory();
28995|      0|        p->level--;
28996|      0|        return NULL;
28997|      0|    }
28998|  6.35k|    Py_ssize_t _children_capacity = 1;
28999|  6.35k|    Py_ssize_t _n = 0;
29000|  6.35k|    { // param_with_default
29001|  6.35k|        if (p->error_indicator) {
  ------------------
  |  Branch (29001:13): [True: 0, False: 6.35k]
  ------------------
29002|      0|            p->level--;
29003|      0|            return NULL;
29004|      0|        }
29005|  6.35k|        D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default"));
29006|  6.35k|        NameDefaultPair* param_with_default_var;
29007|  6.35k|        while (
29008|  6.48k|            (param_with_default_var = param_with_default_rule(p))  // param_with_default
  ------------------
  |  Branch (29008:13): [True: 128, False: 6.35k]
  ------------------
29009|  6.35k|        )
29010|    128|        {
29011|    128|            _res = param_with_default_var;
29012|    128|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29012:17): [True: 54, False: 74]
  ------------------
29013|     54|                _children_capacity *= 2;
29014|     54|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29015|     54|                if (!_new_children) {
  ------------------
  |  Branch (29015:21): [True: 0, False: 54]
  ------------------
29016|      0|                    PyMem_Free(_children);
29017|      0|                    p->error_indicator = 1;
29018|      0|                    PyErr_NoMemory();
29019|      0|                    p->level--;
29020|      0|                    return NULL;
29021|      0|                }
29022|     54|                _children = _new_children;
29023|     54|            }
29024|    128|            _children[_n++] = _res;
29025|    128|            _mark = p->mark;
29026|    128|        }
29027|  6.35k|        p->mark = _mark;
29028|  6.35k|        D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ',
29029|  6.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default"));
29030|  6.35k|    }
29031|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29032|  6.35k|    if (!_seq) {
  ------------------
  |  Branch (29032:9): [True: 0, False: 6.35k]
  ------------------
29033|      0|        PyMem_Free(_children);
29034|      0|        p->error_indicator = 1;
29035|      0|        PyErr_NoMemory();
29036|      0|        p->level--;
29037|      0|        return NULL;
29038|      0|    }
29039|  6.48k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|    128|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  6.48k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29039:28): [True: 128, False: 6.35k]
  ------------------
29040|  6.35k|    PyMem_Free(_children);
29041|  6.35k|    p->level--;
29042|  6.35k|    return _seq;
29043|  6.35k|}
parser.c:star_etc_rule:
 5200|  17.4k|{
 5201|  17.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5201:9): [True: 0, False: 17.4k]
  |  Branch (5201:35): [True: 0, False: 17.4k]
  ------------------
 5202|      0|        _Pypegen_stack_overflow(p);
 5203|      0|    }
 5204|  17.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (5204:9): [True: 1, False: 17.4k]
  ------------------
 5205|      1|        p->level--;
 5206|      1|        return NULL;
 5207|      1|    }
 5208|  17.4k|    StarEtc* _res = NULL;
 5209|  17.4k|    int _mark = p->mark;
 5210|  17.4k|    if (p->call_invalid_rules) { // invalid_star_etc
  ------------------
  |  Branch (5210:9): [True: 5.13k, False: 12.3k]
  ------------------
 5211|  5.13k|        if (p->error_indicator) {
  ------------------
  |  Branch (5211:13): [True: 0, False: 5.13k]
  ------------------
 5212|      0|            p->level--;
 5213|      0|            return NULL;
 5214|      0|        }
 5215|  5.13k|        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
 5216|  5.13k|        void *invalid_star_etc_var;
 5217|  5.13k|        if (
 5218|  5.13k|            (invalid_star_etc_var = invalid_star_etc_rule(p))  // invalid_star_etc
  ------------------
  |  Branch (5218:13): [True: 0, False: 5.13k]
  ------------------
 5219|  5.13k|        )
 5220|      0|        {
 5221|      0|            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_star_etc"));
 5222|      0|            _res = invalid_star_etc_var;
 5223|      0|            goto done;
 5224|      0|        }
 5225|  5.13k|        p->mark = _mark;
 5226|  5.13k|        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
 5227|  5.13k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_star_etc"));
 5228|  5.13k|    }
 5229|  17.4k|    { // '*' param_no_default param_maybe_default* kwds?
 5230|  17.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (5230:13): [True: 9, False: 17.4k]
  ------------------
 5231|      9|            p->level--;
 5232|      9|            return NULL;
 5233|      9|        }
 5234|  17.4k|        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
 5235|  17.4k|        Token * _literal;
 5236|  17.4k|        arg_ty a;
 5237|  17.4k|        asdl_seq * b;
 5238|  17.4k|        void *c;
 5239|  17.4k|        if (
 5240|  17.4k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (5240:13): [True: 1.59k, False: 15.8k]
  ------------------
 5241|  1.59k|            &&
 5242|  1.59k|            (a = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (5242:13): [True: 759, False: 831]
  ------------------
 5243|    759|            &&
 5244|    759|            (b = _loop0_31_rule(p))  // param_maybe_default*
  ------------------
  |  Branch (5244:13): [True: 759, False: 0]
  ------------------
 5245|    759|            &&
 5246|    759|            (c = kwds_rule(p), !p->error_indicator)  // kwds?
  ------------------
  |  Branch (5246:13): [True: 757, False: 2]
  ------------------
 5247|  17.4k|        )
 5248|    757|        {
 5249|    757|            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
 5250|    757|            _res = _PyPegen_star_etc ( p , a , b , c );
 5251|    757|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5251:18): [True: 0, False: 757]
  |  Branch (5251:34): [True: 0, False: 757]
  |  Branch (5251:57): [True: 0, False: 0]
  ------------------
 5252|      0|                p->error_indicator = 1;
 5253|      0|                p->level--;
 5254|      0|                return NULL;
 5255|      0|            }
 5256|    757|            goto done;
 5257|    757|        }
 5258|  16.7k|        p->mark = _mark;
 5259|  16.7k|        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
 5260|  16.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?"));
 5261|  16.7k|    }
 5262|      0|    { // '*' param_no_default_star_annotation param_maybe_default* kwds?
 5263|  16.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (5263:13): [True: 5, False: 16.7k]
  ------------------
 5264|      5|            p->level--;
 5265|      5|            return NULL;
 5266|      5|        }
 5267|  16.7k|        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default_star_annotation param_maybe_default* kwds?"));
 5268|  16.7k|        Token * _literal;
 5269|  16.7k|        arg_ty a;
 5270|  16.7k|        asdl_seq * b;
 5271|  16.7k|        void *c;
 5272|  16.7k|        if (
 5273|  16.7k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (5273:13): [True: 828, False: 15.8k]
  ------------------
 5274|    828|            &&
 5275|    828|            (a = param_no_default_star_annotation_rule(p))  // param_no_default_star_annotation
  ------------------
  |  Branch (5275:13): [True: 536, False: 292]
  ------------------
 5276|    536|            &&
 5277|    536|            (b = _loop0_31_rule(p))  // param_maybe_default*
  ------------------
  |  Branch (5277:13): [True: 536, False: 0]
  ------------------
 5278|    536|            &&
 5279|    536|            (c = kwds_rule(p), !p->error_indicator)  // kwds?
  ------------------
  |  Branch (5279:13): [True: 533, False: 3]
  ------------------
 5280|  16.7k|        )
 5281|    533|        {
 5282|    533|            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default_star_annotation param_maybe_default* kwds?"));
 5283|    533|            _res = _PyPegen_star_etc ( p , a , b , c );
 5284|    533|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5284:18): [True: 0, False: 533]
  |  Branch (5284:34): [True: 0, False: 533]
  |  Branch (5284:57): [True: 0, False: 0]
  ------------------
 5285|      0|                p->error_indicator = 1;
 5286|      0|                p->level--;
 5287|      0|                return NULL;
 5288|      0|            }
 5289|    533|            goto done;
 5290|    533|        }
 5291|  16.1k|        p->mark = _mark;
 5292|  16.1k|        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
 5293|  16.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default_star_annotation param_maybe_default* kwds?"));
 5294|  16.1k|    }
 5295|      0|    { // '*' ',' param_maybe_default+ kwds?
 5296|  16.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (5296:13): [True: 7, False: 16.1k]
  ------------------
 5297|      7|            p->level--;
 5298|      7|            return NULL;
 5299|      7|        }
 5300|  16.1k|        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
 5301|  16.1k|        Token * _literal;
 5302|  16.1k|        Token * _literal_1;
 5303|  16.1k|        asdl_seq * b;
 5304|  16.1k|        void *c;
 5305|  16.1k|        if (
 5306|  16.1k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (5306:13): [True: 288, False: 15.8k]
  ------------------
 5307|    288|            &&
 5308|    288|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5308:13): [True: 231, False: 57]
  ------------------
 5309|    231|            &&
 5310|    231|            (b = _loop1_32_rule(p))  // param_maybe_default+
  ------------------
  |  Branch (5310:13): [True: 212, False: 19]
  ------------------
 5311|    212|            &&
 5312|    212|            (c = kwds_rule(p), !p->error_indicator)  // kwds?
  ------------------
  |  Branch (5312:13): [True: 211, False: 1]
  ------------------
 5313|  16.1k|        )
 5314|    211|        {
 5315|    211|            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
 5316|    211|            _res = _PyPegen_star_etc ( p , NULL , b , c );
 5317|    211|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5317:18): [True: 0, False: 211]
  |  Branch (5317:34): [True: 0, False: 211]
  |  Branch (5317:57): [True: 0, False: 0]
  ------------------
 5318|      0|                p->error_indicator = 1;
 5319|      0|                p->level--;
 5320|      0|                return NULL;
 5321|      0|            }
 5322|    211|            goto done;
 5323|    211|        }
 5324|  15.9k|        p->mark = _mark;
 5325|  15.9k|        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
 5326|  15.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' param_maybe_default+ kwds?"));
 5327|  15.9k|    }
 5328|      0|    { // kwds
 5329|  15.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (5329:13): [True: 3, False: 15.9k]
  ------------------
 5330|      3|            p->level--;
 5331|      3|            return NULL;
 5332|      3|        }
 5333|  15.9k|        D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwds"));
 5334|  15.9k|        arg_ty a;
 5335|  15.9k|        if (
 5336|  15.9k|            (a = kwds_rule(p))  // kwds
  ------------------
  |  Branch (5336:13): [True: 3.19k, False: 12.7k]
  ------------------
 5337|  15.9k|        )
 5338|  3.19k|        {
 5339|  3.19k|            D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwds"));
 5340|  3.19k|            _res = _PyPegen_star_etc ( p , NULL , NULL , a );
 5341|  3.19k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5341:18): [True: 0, False: 3.19k]
  |  Branch (5341:34): [True: 0, False: 3.19k]
  |  Branch (5341:57): [True: 0, False: 0]
  ------------------
 5342|      0|                p->error_indicator = 1;
 5343|      0|                p->level--;
 5344|      0|                return NULL;
 5345|      0|            }
 5346|  3.19k|            goto done;
 5347|  3.19k|        }
 5348|  12.7k|        p->mark = _mark;
 5349|  12.7k|        D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ',
 5350|  12.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwds"));
 5351|  12.7k|    }
 5352|  12.7k|    _res = NULL;
 5353|  17.4k|  done:
 5354|  17.4k|    p->level--;
 5355|  17.4k|    return _res;
 5356|  12.7k|}
parser.c:invalid_star_etc_rule:
21911|  5.13k|{
21912|  5.13k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21912:9): [True: 0, False: 5.13k]
  |  Branch (21912:35): [True: 0, False: 5.13k]
  ------------------
21913|      0|        _Pypegen_stack_overflow(p);
21914|      0|    }
21915|  5.13k|    if (p->error_indicator) {
  ------------------
  |  Branch (21915:9): [True: 0, False: 5.13k]
  ------------------
21916|      0|        p->level--;
21917|      0|        return NULL;
21918|      0|    }
21919|  5.13k|    void * _res = NULL;
21920|  5.13k|    int _mark = p->mark;
21921|  5.13k|    { // '*' (')' | ',' (')' | '**'))
21922|  5.13k|        if (p->error_indicator) {
  ------------------
  |  Branch (21922:13): [True: 0, False: 5.13k]
  ------------------
21923|      0|            p->level--;
21924|      0|            return NULL;
21925|      0|        }
21926|  5.13k|        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
21927|  5.13k|        void *_tmp_125_var;
21928|  5.13k|        Token * a;
21929|  5.13k|        if (
21930|  5.13k|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (21930:13): [True: 711, False: 4.42k]
  ------------------
21931|    711|            &&
21932|    711|            (_tmp_125_var = _tmp_125_rule(p))  // ')' | ',' (')' | '**')
  ------------------
  |  Branch (21932:13): [True: 4, False: 707]
  ------------------
21933|  5.13k|        )
21934|      4|        {
21935|      4|            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
21936|      4|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "named parameters must follow bare *" );
  ------------------
  |  |  239|      4|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21937|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21937:18): [True: 4, False: 0]
  |  Branch (21937:34): [True: 0, False: 0]
  |  Branch (21937:57): [True: 4, False: 0]
  ------------------
21938|      4|                p->error_indicator = 1;
21939|      4|                p->level--;
21940|      4|                return NULL;
21941|      4|            }
21942|      0|            goto done;
21943|      4|        }
21944|  5.13k|        p->mark = _mark;
21945|  5.13k|        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
21946|  5.13k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (')' | ',' (')' | '**'))"));
21947|  5.13k|    }
21948|      0|    { // '*' ',' TYPE_COMMENT
21949|  5.13k|        if (p->error_indicator) {
  ------------------
  |  Branch (21949:13): [True: 0, False: 5.13k]
  ------------------
21950|      0|            p->level--;
21951|      0|            return NULL;
21952|      0|        }
21953|  5.13k|        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
21954|  5.13k|        Token * _literal;
21955|  5.13k|        Token * _literal_1;
21956|  5.13k|        Token * type_comment_var;
21957|  5.13k|        if (
21958|  5.13k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (21958:13): [True: 707, False: 4.42k]
  ------------------
21959|    707|            &&
21960|    707|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (21960:13): [True: 139, False: 568]
  ------------------
21961|    139|            &&
21962|    139|            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
  ------------------
  |  |   73|    139|#define TYPE_COMMENT    57
  ------------------
  |  Branch (21962:13): [True: 1, False: 138]
  ------------------
21963|  5.13k|        )
21964|      1|        {
21965|      1|            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' TYPE_COMMENT"));
21966|      1|            _res = RAISE_SYNTAX_ERROR ( "bare * has associated type comment" );
  ------------------
  |  |  233|      1|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
21967|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21967:18): [True: 1, False: 0]
  |  Branch (21967:34): [True: 0, False: 0]
  |  Branch (21967:57): [True: 1, False: 0]
  ------------------
21968|      1|                p->error_indicator = 1;
21969|      1|                p->level--;
21970|      1|                return NULL;
21971|      1|            }
21972|      0|            goto done;
21973|      1|        }
21974|  5.13k|        p->mark = _mark;
21975|  5.13k|        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
21976|  5.13k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' TYPE_COMMENT"));
21977|  5.13k|    }
21978|      0|    { // '*' param '='
21979|  5.13k|        if (p->error_indicator) {
  ------------------
  |  Branch (21979:13): [True: 0, False: 5.13k]
  ------------------
21980|      0|            p->level--;
21981|      0|            return NULL;
21982|      0|        }
21983|  5.13k|        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param '='"));
21984|  5.13k|        Token * _literal;
21985|  5.13k|        Token * a;
21986|  5.13k|        arg_ty param_var;
21987|  5.13k|        if (
21988|  5.13k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (21988:13): [True: 706, False: 4.42k]
  ------------------
21989|    706|            &&
21990|    706|            (param_var = param_rule(p))  // param
  ------------------
  |  Branch (21990:13): [True: 559, False: 147]
  ------------------
21991|    559|            &&
21992|    559|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (21992:13): [True: 1, False: 558]
  ------------------
21993|  5.13k|        )
21994|      1|        {
21995|      1|            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param '='"));
21996|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-positional parameter cannot have default value" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
21997|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21997:18): [True: 1, False: 0]
  |  Branch (21997:34): [True: 0, False: 0]
  |  Branch (21997:57): [True: 1, False: 0]
  ------------------
21998|      1|                p->error_indicator = 1;
21999|      1|                p->level--;
22000|      1|                return NULL;
22001|      1|            }
22002|      0|            goto done;
22003|      1|        }
22004|  5.13k|        p->mark = _mark;
22005|  5.13k|        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22006|  5.13k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param '='"));
22007|  5.13k|    }
22008|      0|    { // '*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')
22009|  5.13k|        if (p->error_indicator) {
  ------------------
  |  Branch (22009:13): [True: 0, False: 5.13k]
  ------------------
22010|      0|            p->level--;
22011|      0|            return NULL;
22012|      0|        }
22013|  5.13k|        D(fprintf(stderr, "%*c> invalid_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')"));
22014|  5.13k|        Token * _literal;
22015|  5.13k|        asdl_seq * _loop0_31_var;
22016|  5.13k|        void *_tmp_126_var;
22017|  5.13k|        void *_tmp_126_var_1;
22018|  5.13k|        Token * a;
22019|  5.13k|        if (
22020|  5.13k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22020:13): [True: 705, False: 4.42k]
  ------------------
22021|    705|            &&
22022|    705|            (_tmp_126_var = _tmp_126_rule(p))  // param_no_default | ','
  ------------------
  |  Branch (22022:13): [True: 492, False: 213]
  ------------------
22023|    492|            &&
22024|    492|            (_loop0_31_var = _loop0_31_rule(p))  // param_maybe_default*
  ------------------
  |  Branch (22024:13): [True: 492, False: 0]
  ------------------
22025|    492|            &&
22026|    492|            (a = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (22026:13): [True: 9, False: 483]
  ------------------
22027|      9|            &&
22028|      9|            (_tmp_126_var_1 = _tmp_126_rule(p))  // param_no_default | ','
  ------------------
  |  Branch (22028:13): [True: 1, False: 8]
  ------------------
22029|  5.13k|        )
22030|      1|        {
22031|      1|            D(fprintf(stderr, "%*c+ invalid_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')"));
22032|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "* may appear only once" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22033|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22033:18): [True: 1, False: 0]
  |  Branch (22033:34): [True: 0, False: 0]
  |  Branch (22033:57): [True: 1, False: 0]
  ------------------
22034|      1|                p->error_indicator = 1;
22035|      1|                p->level--;
22036|      1|                return NULL;
22037|      1|            }
22038|      0|            goto done;
22039|      1|        }
22040|  5.12k|        p->mark = _mark;
22041|  5.12k|        D(fprintf(stderr, "%*c%s invalid_star_etc[%d-%d]: %s failed!\n", p->level, ' ',
22042|  5.12k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (param_no_default | ',') param_maybe_default* '*' (param_no_default | ',')"));
22043|  5.12k|    }
22044|  5.12k|    _res = NULL;
22045|  5.12k|  done:
22046|  5.12k|    p->level--;
22047|  5.12k|    return _res;
22048|  5.12k|}
parser.c:_tmp_125_rule:
35099|    711|{
35100|    711|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.42k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35100:9): [True: 0, False: 711]
  |  Branch (35100:35): [True: 0, False: 711]
  ------------------
35101|      0|        _Pypegen_stack_overflow(p);
35102|      0|    }
35103|    711|    if (p->error_indicator) {
  ------------------
  |  Branch (35103:9): [True: 0, False: 711]
  ------------------
35104|      0|        p->level--;
35105|      0|        return NULL;
35106|      0|    }
35107|    711|    void * _res = NULL;
35108|    711|    int _mark = p->mark;
35109|    711|    { // ')'
35110|    711|        if (p->error_indicator) {
  ------------------
  |  Branch (35110:13): [True: 0, False: 711]
  ------------------
35111|      0|            p->level--;
35112|      0|            return NULL;
35113|      0|        }
35114|    711|        D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
35115|    711|        Token * _literal;
35116|    711|        if (
35117|    711|            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (35117:13): [True: 1, False: 710]
  ------------------
35118|    711|        )
35119|      1|        {
35120|      1|            D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
35121|      1|            _res = _literal;
35122|      1|            goto done;
35123|      1|        }
35124|    710|        p->mark = _mark;
35125|    710|        D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ',
35126|    710|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
35127|    710|    }
35128|      0|    { // ',' (')' | '**')
35129|    710|        if (p->error_indicator) {
  ------------------
  |  Branch (35129:13): [True: 0, False: 710]
  ------------------
35130|      0|            p->level--;
35131|      0|            return NULL;
35132|      0|        }
35133|    710|        D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
35134|    710|        Token * _literal;
35135|    710|        void *_tmp_170_var;
35136|    710|        if (
35137|    710|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35137:13): [True: 142, False: 568]
  ------------------
35138|    142|            &&
35139|    142|            (_tmp_170_var = _tmp_170_rule(p))  // ')' | '**'
  ------------------
  |  Branch (35139:13): [True: 3, False: 139]
  ------------------
35140|    710|        )
35141|      3|        {
35142|      3|            D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' (')' | '**')"));
35143|      3|            _res = _PyPegen_dummy_name(p, _literal, _tmp_170_var);
35144|      3|            goto done;
35145|      3|        }
35146|    707|        p->mark = _mark;
35147|    707|        D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ',
35148|    707|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (')' | '**')"));
35149|    707|    }
35150|    707|    _res = NULL;
35151|    711|  done:
35152|    711|    p->level--;
35153|    711|    return _res;
35154|    707|}
parser.c:_tmp_170_rule:
37673|    142|{
37674|    142|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    284|#  define MAXSTACK 6000
  ------------------
  |  Branch (37674:9): [True: 0, False: 142]
  |  Branch (37674:35): [True: 0, False: 142]
  ------------------
37675|      0|        _Pypegen_stack_overflow(p);
37676|      0|    }
37677|    142|    if (p->error_indicator) {
  ------------------
  |  Branch (37677:9): [True: 0, False: 142]
  ------------------
37678|      0|        p->level--;
37679|      0|        return NULL;
37680|      0|    }
37681|    142|    void * _res = NULL;
37682|    142|    int _mark = p->mark;
37683|    142|    { // ')'
37684|    142|        if (p->error_indicator) {
  ------------------
  |  Branch (37684:13): [True: 0, False: 142]
  ------------------
37685|      0|            p->level--;
37686|      0|            return NULL;
37687|      0|        }
37688|    142|        D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
37689|    142|        Token * _literal;
37690|    142|        if (
37691|    142|            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (37691:13): [True: 1, False: 141]
  ------------------
37692|    142|        )
37693|      1|        {
37694|      1|            D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
37695|      1|            _res = _literal;
37696|      1|            goto done;
37697|      1|        }
37698|    141|        p->mark = _mark;
37699|    141|        D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ',
37700|    141|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
37701|    141|    }
37702|      0|    { // '**'
37703|    141|        if (p->error_indicator) {
  ------------------
  |  Branch (37703:13): [True: 0, False: 141]
  ------------------
37704|      0|            p->level--;
37705|      0|            return NULL;
37706|      0|        }
37707|    141|        D(fprintf(stderr, "%*c> _tmp_170[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**'"));
37708|    141|        Token * _literal;
37709|    141|        if (
37710|    141|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (37710:13): [True: 2, False: 139]
  ------------------
37711|    141|        )
37712|      2|        {
37713|      2|            D(fprintf(stderr, "%*c+ _tmp_170[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**'"));
37714|      2|            _res = _literal;
37715|      2|            goto done;
37716|      2|        }
37717|    139|        p->mark = _mark;
37718|    139|        D(fprintf(stderr, "%*c%s _tmp_170[%d-%d]: %s failed!\n", p->level, ' ',
37719|    139|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**'"));
37720|    139|    }
37721|    139|    _res = NULL;
37722|    142|  done:
37723|    142|    p->level--;
37724|    142|    return _res;
37725|    139|}
parser.c:_tmp_126_rule:
35159|    714|{
35160|    714|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.42k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35160:9): [True: 0, False: 714]
  |  Branch (35160:35): [True: 0, False: 714]
  ------------------
35161|      0|        _Pypegen_stack_overflow(p);
35162|      0|    }
35163|    714|    if (p->error_indicator) {
  ------------------
  |  Branch (35163:9): [True: 0, False: 714]
  ------------------
35164|      0|        p->level--;
35165|      0|        return NULL;
35166|      0|    }
35167|    714|    void * _res = NULL;
35168|    714|    int _mark = p->mark;
35169|    714|    { // param_no_default
35170|    714|        if (p->error_indicator) {
  ------------------
  |  Branch (35170:13): [True: 0, False: 714]
  ------------------
35171|      0|            p->level--;
35172|      0|            return NULL;
35173|      0|        }
35174|    714|        D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default"));
35175|    714|        arg_ty param_no_default_var;
35176|    714|        if (
35177|    714|            (param_no_default_var = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (35177:13): [True: 355, False: 359]
  ------------------
35178|    714|        )
35179|    355|        {
35180|    355|            D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default"));
35181|    355|            _res = param_no_default_var;
35182|    355|            goto done;
35183|    355|        }
35184|    359|        p->mark = _mark;
35185|    359|        D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ',
35186|    359|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default"));
35187|    359|    }
35188|      0|    { // ','
35189|    359|        if (p->error_indicator) {
  ------------------
  |  Branch (35189:13): [True: 2, False: 357]
  ------------------
35190|      2|            p->level--;
35191|      2|            return NULL;
35192|      2|        }
35193|    357|        D(fprintf(stderr, "%*c> _tmp_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
35194|    357|        Token * _literal;
35195|    357|        if (
35196|    357|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35196:13): [True: 138, False: 219]
  ------------------
35197|    357|        )
35198|    138|        {
35199|    138|            D(fprintf(stderr, "%*c+ _tmp_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
35200|    138|            _res = _literal;
35201|    138|            goto done;
35202|    138|        }
35203|    219|        p->mark = _mark;
35204|    219|        D(fprintf(stderr, "%*c%s _tmp_126[%d-%d]: %s failed!\n", p->level, ' ',
35205|    219|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
35206|    219|    }
35207|    219|    _res = NULL;
35208|    712|  done:
35209|    712|    p->level--;
35210|    712|    return _res;
35211|    219|}
parser.c:kwds_rule:
 5361|  17.4k|{
 5362|  17.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5362:9): [True: 0, False: 17.4k]
  |  Branch (5362:35): [True: 0, False: 17.4k]
  ------------------
 5363|      0|        _Pypegen_stack_overflow(p);
 5364|      0|    }
 5365|  17.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (5365:9): [True: 3, False: 17.4k]
  ------------------
 5366|      3|        p->level--;
 5367|      3|        return NULL;
 5368|      3|    }
 5369|  17.4k|    arg_ty _res = NULL;
 5370|  17.4k|    int _mark = p->mark;
 5371|  17.4k|    if (p->call_invalid_rules) { // invalid_kwds
  ------------------
  |  Branch (5371:9): [True: 5.12k, False: 12.3k]
  ------------------
 5372|  5.12k|        if (p->error_indicator) {
  ------------------
  |  Branch (5372:13): [True: 0, False: 5.12k]
  ------------------
 5373|      0|            p->level--;
 5374|      0|            return NULL;
 5375|      0|        }
 5376|  5.12k|        D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwds"));
 5377|  5.12k|        void *invalid_kwds_var;
 5378|  5.12k|        if (
 5379|  5.12k|            (invalid_kwds_var = invalid_kwds_rule(p))  // invalid_kwds
  ------------------
  |  Branch (5379:13): [True: 0, False: 5.12k]
  ------------------
 5380|  5.12k|        )
 5381|      0|        {
 5382|      0|            D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwds"));
 5383|      0|            _res = invalid_kwds_var;
 5384|      0|            goto done;
 5385|      0|        }
 5386|  5.12k|        p->mark = _mark;
 5387|  5.12k|        D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ',
 5388|  5.12k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwds"));
 5389|  5.12k|    }
 5390|  17.4k|    { // '**' param_no_default
 5391|  17.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (5391:13): [True: 9, False: 17.4k]
  ------------------
 5392|      9|            p->level--;
 5393|      9|            return NULL;
 5394|      9|        }
 5395|  17.4k|        D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
 5396|  17.4k|        Token * _literal;
 5397|  17.4k|        arg_ty a;
 5398|  17.4k|        if (
 5399|  17.4k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (5399:13): [True: 3.24k, False: 14.2k]
  ------------------
 5400|  3.24k|            &&
 5401|  3.24k|            (a = param_no_default_rule(p))  // param_no_default
  ------------------
  |  Branch (5401:13): [True: 3.20k, False: 42]
  ------------------
 5402|  17.4k|        )
 5403|  3.20k|        {
 5404|  3.20k|            D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param_no_default"));
 5405|  3.20k|            _res = a;
 5406|  3.20k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5406:18): [True: 0, False: 3.20k]
  |  Branch (5406:34): [True: 0, False: 3.20k]
  |  Branch (5406:57): [True: 0, False: 0]
  ------------------
 5407|      0|                p->error_indicator = 1;
 5408|      0|                p->level--;
 5409|      0|                return NULL;
 5410|      0|            }
 5411|  3.20k|            goto done;
 5412|  3.20k|        }
 5413|  14.2k|        p->mark = _mark;
 5414|  14.2k|        D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ',
 5415|  14.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param_no_default"));
 5416|  14.2k|    }
 5417|  14.2k|    _res = NULL;
 5418|  17.4k|  done:
 5419|  17.4k|    p->level--;
 5420|  17.4k|    return _res;
 5421|  14.2k|}
parser.c:invalid_kwds_rule:
22053|  5.12k|{
22054|  5.12k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  10.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22054:9): [True: 0, False: 5.12k]
  |  Branch (22054:35): [True: 0, False: 5.12k]
  ------------------
22055|      0|        _Pypegen_stack_overflow(p);
22056|      0|    }
22057|  5.12k|    if (p->error_indicator) {
  ------------------
  |  Branch (22057:9): [True: 0, False: 5.12k]
  ------------------
22058|      0|        p->level--;
22059|      0|        return NULL;
22060|      0|    }
22061|  5.12k|    void * _res = NULL;
22062|  5.12k|    int _mark = p->mark;
22063|  5.12k|    { // '**' param '='
22064|  5.12k|        if (p->error_indicator) {
  ------------------
  |  Branch (22064:13): [True: 0, False: 5.12k]
  ------------------
22065|      0|            p->level--;
22066|      0|            return NULL;
22067|      0|        }
22068|  5.12k|        D(fprintf(stderr, "%*c> invalid_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param '='"));
22069|  5.12k|        Token * _literal;
22070|  5.12k|        Token * a;
22071|  5.12k|        arg_ty param_var;
22072|  5.12k|        if (
22073|  5.12k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (22073:13): [True: 1.38k, False: 3.73k]
  ------------------
22074|  1.38k|            &&
22075|  1.38k|            (param_var = param_rule(p))  // param
  ------------------
  |  Branch (22075:13): [True: 1.37k, False: 17]
  ------------------
22076|  1.37k|            &&
22077|  1.37k|            (a = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (22077:13): [True: 1, False: 1.37k]
  ------------------
22078|  5.12k|        )
22079|      1|        {
22080|      1|            D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param '='"));
22081|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "var-keyword parameter cannot have default value" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22082|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22082:18): [True: 1, False: 0]
  |  Branch (22082:34): [True: 0, False: 0]
  |  Branch (22082:57): [True: 1, False: 0]
  ------------------
22083|      1|                p->error_indicator = 1;
22084|      1|                p->level--;
22085|      1|                return NULL;
22086|      1|            }
22087|      0|            goto done;
22088|      1|        }
22089|  5.12k|        p->mark = _mark;
22090|  5.12k|        D(fprintf(stderr, "%*c%s invalid_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22091|  5.12k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param '='"));
22092|  5.12k|    }
22093|      0|    { // '**' param ',' param
22094|  5.12k|        if (p->error_indicator) {
  ------------------
  |  Branch (22094:13): [True: 2, False: 5.12k]
  ------------------
22095|      2|            p->level--;
22096|      2|            return NULL;
22097|      2|        }
22098|  5.12k|        D(fprintf(stderr, "%*c> invalid_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param ',' param"));
22099|  5.12k|        Token * _literal;
22100|  5.12k|        Token * _literal_1;
22101|  5.12k|        arg_ty a;
22102|  5.12k|        arg_ty param_var;
22103|  5.12k|        if (
22104|  5.12k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (22104:13): [True: 1.38k, False: 3.73k]
  ------------------
22105|  1.38k|            &&
22106|  1.38k|            (param_var = param_rule(p))  // param
  ------------------
  |  Branch (22106:13): [True: 1.37k, False: 15]
  ------------------
22107|  1.37k|            &&
22108|  1.37k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (22108:13): [True: 225, False: 1.14k]
  ------------------
22109|    225|            &&
22110|    225|            (a = param_rule(p))  // param
  ------------------
  |  Branch (22110:13): [True: 3, False: 222]
  ------------------
22111|  5.12k|        )
22112|      3|        {
22113|      3|            D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' param"));
22114|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
  ------------------
  |  |  239|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22115|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22115:18): [True: 3, False: 0]
  |  Branch (22115:34): [True: 0, False: 0]
  |  Branch (22115:57): [True: 3, False: 0]
  ------------------
22116|      3|                p->error_indicator = 1;
22117|      3|                p->level--;
22118|      3|                return NULL;
22119|      3|            }
22120|      0|            goto done;
22121|      3|        }
22122|  5.11k|        p->mark = _mark;
22123|  5.11k|        D(fprintf(stderr, "%*c%s invalid_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22124|  5.11k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param ',' param"));
22125|  5.11k|    }
22126|      0|    { // '**' param ',' ('*' | '**' | '/')
22127|  5.11k|        if (p->error_indicator) {
  ------------------
  |  Branch (22127:13): [True: 1, False: 5.11k]
  ------------------
22128|      1|            p->level--;
22129|      1|            return NULL;
22130|      1|        }
22131|  5.11k|        D(fprintf(stderr, "%*c> invalid_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
22132|  5.11k|        Token * _literal;
22133|  5.11k|        Token * _literal_1;
22134|  5.11k|        Token* a;
22135|  5.11k|        arg_ty param_var;
22136|  5.11k|        if (
22137|  5.11k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (22137:13): [True: 1.38k, False: 3.73k]
  ------------------
22138|  1.38k|            &&
22139|  1.38k|            (param_var = param_rule(p))  // param
  ------------------
  |  Branch (22139:13): [True: 1.36k, False: 15]
  ------------------
22140|  1.36k|            &&
22141|  1.36k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (22141:13): [True: 221, False: 1.14k]
  ------------------
22142|    221|            &&
22143|    221|            (a = (Token*)_tmp_127_rule(p))  // '*' | '**' | '/'
  ------------------
  |  Branch (22143:13): [True: 2, False: 219]
  ------------------
22144|  5.11k|        )
22145|      2|        {
22146|      2|            D(fprintf(stderr, "%*c+ invalid_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
22147|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "parameters cannot follow var-keyword parameter" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
22148|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22148:18): [True: 2, False: 0]
  |  Branch (22148:34): [True: 0, False: 0]
  |  Branch (22148:57): [True: 2, False: 0]
  ------------------
22149|      2|                p->error_indicator = 1;
22150|      2|                p->level--;
22151|      2|                return NULL;
22152|      2|            }
22153|      0|            goto done;
22154|      2|        }
22155|  5.11k|        p->mark = _mark;
22156|  5.11k|        D(fprintf(stderr, "%*c%s invalid_kwds[%d-%d]: %s failed!\n", p->level, ' ',
22157|  5.11k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param ',' ('*' | '**' | '/')"));
22158|  5.11k|    }
22159|  5.11k|    _res = NULL;
22160|  5.11k|  done:
22161|  5.11k|    p->level--;
22162|  5.11k|    return _res;
22163|  5.11k|}
parser.c:param_no_default_star_annotation_rule:
 5506|    828|{
 5507|    828|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.65k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5507:9): [True: 0, False: 828]
  |  Branch (5507:35): [True: 0, False: 828]
  ------------------
 5508|      0|        _Pypegen_stack_overflow(p);
 5509|      0|    }
 5510|    828|    if (p->error_indicator) {
  ------------------
  |  Branch (5510:9): [True: 0, False: 828]
  ------------------
 5511|      0|        p->level--;
 5512|      0|        return NULL;
 5513|      0|    }
 5514|    828|    arg_ty _res = NULL;
 5515|    828|    int _mark = p->mark;
 5516|    828|    { // param_star_annotation ',' TYPE_COMMENT?
 5517|    828|        if (p->error_indicator) {
  ------------------
  |  Branch (5517:13): [True: 0, False: 828]
  ------------------
 5518|      0|            p->level--;
 5519|      0|            return NULL;
 5520|      0|        }
 5521|    828|        D(fprintf(stderr, "%*c> param_no_default_star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_star_annotation ',' TYPE_COMMENT?"));
 5522|    828|        Token * _literal;
 5523|    828|        arg_ty a;
 5524|    828|        void *tc;
 5525|    828|        if (
 5526|    828|            (a = param_star_annotation_rule(p))  // param_star_annotation
  ------------------
  |  Branch (5526:13): [True: 558, False: 270]
  ------------------
 5527|    558|            &&
 5528|    558|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (5528:13): [True: 20, False: 538]
  ------------------
 5529|     20|            &&
 5530|     20|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|     20|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5530:13): [True: 19, False: 1]
  ------------------
 5531|    828|        )
 5532|     19|        {
 5533|     19|            D(fprintf(stderr, "%*c+ param_no_default_star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_star_annotation ',' TYPE_COMMENT?"));
 5534|     19|            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
 5535|     19|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5535:18): [True: 1, False: 18]
  |  Branch (5535:34): [True: 0, False: 18]
  |  Branch (5535:57): [True: 1, False: 0]
  ------------------
 5536|      1|                p->error_indicator = 1;
 5537|      1|                p->level--;
 5538|      1|                return NULL;
 5539|      1|            }
 5540|     18|            goto done;
 5541|     19|        }
 5542|    809|        p->mark = _mark;
 5543|    809|        D(fprintf(stderr, "%*c%s param_no_default_star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
 5544|    809|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_star_annotation ',' TYPE_COMMENT?"));
 5545|    809|    }
 5546|      0|    { // param_star_annotation TYPE_COMMENT? &')'
 5547|    809|        if (p->error_indicator) {
  ------------------
  |  Branch (5547:13): [True: 3, False: 806]
  ------------------
 5548|      3|            p->level--;
 5549|      3|            return NULL;
 5550|      3|        }
 5551|    806|        D(fprintf(stderr, "%*c> param_no_default_star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_star_annotation TYPE_COMMENT? &')'"));
 5552|    806|        arg_ty a;
 5553|    806|        void *tc;
 5554|    806|        if (
 5555|    806|            (a = param_star_annotation_rule(p))  // param_star_annotation
  ------------------
  |  Branch (5555:13): [True: 538, False: 268]
  ------------------
 5556|    538|            &&
 5557|    538|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|    538|#define TYPE_COMMENT    57
  ------------------
  |  Branch (5557:13): [True: 538, False: 0]
  ------------------
 5558|    538|            &&
 5559|    538|            _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8)  // token=')'
  ------------------
  |  Branch (5559:13): [True: 518, False: 20]
  ------------------
 5560|    806|        )
 5561|    518|        {
 5562|    518|            D(fprintf(stderr, "%*c+ param_no_default_star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_star_annotation TYPE_COMMENT? &')'"));
 5563|    518|            _res = _PyPegen_add_type_comment_to_arg ( p , a , tc );
 5564|    518|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5564:18): [True: 0, False: 518]
  |  Branch (5564:34): [True: 0, False: 518]
  |  Branch (5564:57): [True: 0, False: 0]
  ------------------
 5565|      0|                p->error_indicator = 1;
 5566|      0|                p->level--;
 5567|      0|                return NULL;
 5568|      0|            }
 5569|    518|            goto done;
 5570|    518|        }
 5571|    288|        p->mark = _mark;
 5572|    288|        D(fprintf(stderr, "%*c%s param_no_default_star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
 5573|    288|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_star_annotation TYPE_COMMENT? &')'"));
 5574|    288|    }
 5575|    288|    _res = NULL;
 5576|    824|  done:
 5577|    824|    p->level--;
 5578|    824|    return _res;
 5579|    288|}
parser.c:param_star_annotation_rule:
 5818|  1.63k|{
 5819|  1.63k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.26k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5819:9): [True: 0, False: 1.63k]
  |  Branch (5819:35): [True: 0, False: 1.63k]
  ------------------
 5820|      0|        _Pypegen_stack_overflow(p);
 5821|      0|    }
 5822|  1.63k|    if (p->error_indicator) {
  ------------------
  |  Branch (5822:9): [True: 0, False: 1.63k]
  ------------------
 5823|      0|        p->level--;
 5824|      0|        return NULL;
 5825|      0|    }
 5826|  1.63k|    arg_ty _res = NULL;
 5827|  1.63k|    int _mark = p->mark;
 5828|  1.63k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (5828:9): [True: 0, False: 1.63k]
  |  Branch (5828:31): [True: 0, False: 0]
  ------------------
 5829|      0|        p->error_indicator = 1;
 5830|      0|        p->level--;
 5831|      0|        return NULL;
 5832|      0|    }
 5833|  1.63k|    int _start_lineno = p->tokens[_mark]->lineno;
 5834|  1.63k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.63k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.63k]
  |  |  ------------------
  ------------------
 5835|  1.63k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 5836|  1.63k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.63k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.63k]
  |  |  ------------------
  ------------------
 5837|  1.63k|    { // NAME star_annotation
 5838|  1.63k|        if (p->error_indicator) {
  ------------------
  |  Branch (5838:13): [True: 0, False: 1.63k]
  ------------------
 5839|      0|            p->level--;
 5840|      0|            return NULL;
 5841|      0|        }
 5842|  1.63k|        D(fprintf(stderr, "%*c> param_star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME star_annotation"));
 5843|  1.63k|        expr_ty a;
 5844|  1.63k|        expr_ty b;
 5845|  1.63k|        if (
 5846|  1.63k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (5846:13): [True: 1.14k, False: 488]
  ------------------
 5847|  1.14k|            &&
 5848|  1.14k|            (b = star_annotation_rule(p))  // star_annotation
  ------------------
  |  Branch (5848:13): [True: 1.09k, False: 50]
  ------------------
 5849|  1.63k|        )
 5850|  1.09k|        {
 5851|  1.09k|            D(fprintf(stderr, "%*c+ param_star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME star_annotation"));
 5852|  1.09k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 5853|  1.09k|            if (_token == NULL) {
  ------------------
  |  Branch (5853:17): [True: 0, False: 1.09k]
  ------------------
 5854|      0|                p->level--;
 5855|      0|                return NULL;
 5856|      0|            }
 5857|  1.09k|            int _end_lineno = _token->end_lineno;
 5858|  1.09k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.09k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.09k]
  |  |  ------------------
  ------------------
 5859|  1.09k|            int _end_col_offset = _token->end_col_offset;
 5860|  1.09k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.09k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.09k]
  |  |  ------------------
  ------------------
 5861|  1.09k|            _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA );
  ------------------
  |  |  307|  1.09k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 5862|  1.09k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5862:18): [True: 0, False: 1.09k]
  |  Branch (5862:34): [True: 0, False: 1.09k]
  |  Branch (5862:57): [True: 0, False: 0]
  ------------------
 5863|      0|                p->error_indicator = 1;
 5864|      0|                p->level--;
 5865|      0|                return NULL;
 5866|      0|            }
 5867|  1.09k|            goto done;
 5868|  1.09k|        }
 5869|    538|        p->mark = _mark;
 5870|    538|        D(fprintf(stderr, "%*c%s param_star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
 5871|    538|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME star_annotation"));
 5872|    538|    }
 5873|    538|    _res = NULL;
 5874|  1.63k|  done:
 5875|  1.63k|    p->level--;
 5876|  1.63k|    return _res;
 5877|    538|}
parser.c:star_annotation_rule:
 5928|  1.14k|{
 5929|  1.14k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.29k|#  define MAXSTACK 6000
  ------------------
  |  Branch (5929:9): [True: 0, False: 1.14k]
  |  Branch (5929:35): [True: 0, False: 1.14k]
  ------------------
 5930|      0|        _Pypegen_stack_overflow(p);
 5931|      0|    }
 5932|  1.14k|    if (p->error_indicator) {
  ------------------
  |  Branch (5932:9): [True: 0, False: 1.14k]
  ------------------
 5933|      0|        p->level--;
 5934|      0|        return NULL;
 5935|      0|    }
 5936|  1.14k|    expr_ty _res = NULL;
 5937|  1.14k|    int _mark = p->mark;
 5938|  1.14k|    { // ':' star_expression
 5939|  1.14k|        if (p->error_indicator) {
  ------------------
  |  Branch (5939:13): [True: 0, False: 1.14k]
  ------------------
 5940|      0|            p->level--;
 5941|      0|            return NULL;
 5942|      0|        }
 5943|  1.14k|        D(fprintf(stderr, "%*c> star_annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' star_expression"));
 5944|  1.14k|        Token * _literal;
 5945|  1.14k|        expr_ty a;
 5946|  1.14k|        if (
 5947|  1.14k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (5947:13): [True: 1.12k, False: 24]
  ------------------
 5948|  1.12k|            &&
 5949|  1.12k|            (a = star_expression_rule(p))  // star_expression
  ------------------
  |  Branch (5949:13): [True: 1.09k, False: 26]
  ------------------
 5950|  1.14k|        )
 5951|  1.09k|        {
 5952|  1.09k|            D(fprintf(stderr, "%*c+ star_annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' star_expression"));
 5953|  1.09k|            _res = a;
 5954|  1.09k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (5954:18): [True: 0, False: 1.09k]
  |  Branch (5954:34): [True: 0, False: 1.09k]
  |  Branch (5954:57): [True: 0, False: 0]
  ------------------
 5955|      0|                p->error_indicator = 1;
 5956|      0|                p->level--;
 5957|      0|                return NULL;
 5958|      0|            }
 5959|  1.09k|            goto done;
 5960|  1.09k|        }
 5961|     50|        p->mark = _mark;
 5962|     50|        D(fprintf(stderr, "%*c%s star_annotation[%d-%d]: %s failed!\n", p->level, ' ',
 5963|     50|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' star_expression"));
 5964|     50|    }
 5965|     50|    _res = NULL;
 5966|  1.14k|  done:
 5967|  1.14k|    p->level--;
 5968|  1.14k|    return _res;
 5969|     50|}
parser.c:_tmp_26_rule:
28868|  17.1k|{
28869|  17.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28869:9): [True: 0, False: 17.1k]
  |  Branch (28869:35): [True: 0, False: 17.1k]
  ------------------
28870|      0|        _Pypegen_stack_overflow(p);
28871|      0|    }
28872|  17.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (28872:9): [True: 0, False: 17.1k]
  ------------------
28873|      0|        p->level--;
28874|      0|        return NULL;
28875|      0|    }
28876|  17.1k|    void * _res = NULL;
28877|  17.1k|    int _mark = p->mark;
28878|  17.1k|    { // '->' expression
28879|  17.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (28879:13): [True: 0, False: 17.1k]
  ------------------
28880|      0|            p->level--;
28881|      0|            return NULL;
28882|      0|        }
28883|  17.1k|        D(fprintf(stderr, "%*c> _tmp_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression"));
28884|  17.1k|        Token * _literal;
28885|  17.1k|        expr_ty z;
28886|  17.1k|        if (
28887|  17.1k|            (_literal = _PyPegen_expect_token(p, 51))  // token='->'
  ------------------
  |  Branch (28887:13): [True: 5.20k, False: 11.9k]
  ------------------
28888|  5.20k|            &&
28889|  5.20k|            (z = expression_rule(p))  // expression
  ------------------
  |  Branch (28889:13): [True: 5.17k, False: 21]
  ------------------
28890|  17.1k|        )
28891|  5.17k|        {
28892|  5.17k|            D(fprintf(stderr, "%*c+ _tmp_26[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression"));
28893|  5.17k|            _res = z;
28894|  5.17k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28894:18): [True: 0, False: 5.17k]
  |  Branch (28894:34): [True: 0, False: 5.17k]
  |  Branch (28894:57): [True: 0, False: 0]
  ------------------
28895|      0|                p->error_indicator = 1;
28896|      0|                p->level--;
28897|      0|                return NULL;
28898|      0|            }
28899|  5.17k|            goto done;
28900|  5.17k|        }
28901|  11.9k|        p->mark = _mark;
28902|  11.9k|        D(fprintf(stderr, "%*c%s _tmp_26[%d-%d]: %s failed!\n", p->level, ' ',
28903|  11.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression"));
28904|  11.9k|    }
28905|  11.9k|    _res = NULL;
28906|  17.1k|  done:
28907|  17.1k|    p->level--;
28908|  17.1k|    return _res;
28909|  11.9k|}
parser.c:func_type_comment_rule:
19583|  14.6k|{
19584|  14.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  29.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (19584:9): [True: 0, False: 14.6k]
  |  Branch (19584:35): [True: 0, False: 14.6k]
  ------------------
19585|      0|        _Pypegen_stack_overflow(p);
19586|      0|    }
19587|  14.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (19587:9): [True: 0, False: 14.6k]
  ------------------
19588|      0|        p->level--;
19589|      0|        return NULL;
19590|      0|    }
19591|  14.6k|    Token* _res = NULL;
19592|  14.6k|    int _mark = p->mark;
19593|  14.6k|    { // NEWLINE TYPE_COMMENT &(NEWLINE INDENT)
19594|  14.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (19594:13): [True: 0, False: 14.6k]
  ------------------
19595|      0|            p->level--;
19596|      0|            return NULL;
19597|      0|        }
19598|  14.6k|        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
19599|  14.6k|        Token * newline_var;
19600|  14.6k|        Token * t;
19601|  14.6k|        if (
19602|  14.6k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  14.6k|#define NEWLINE         4
  ------------------
  |  Branch (19602:13): [True: 5.36k, False: 9.23k]
  ------------------
19603|  5.36k|            &&
19604|  5.36k|            (t = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
  ------------------
  |  |   73|  5.36k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (19604:13): [True: 53, False: 5.31k]
  ------------------
19605|     53|            &&
19606|     53|            _PyPegen_lookahead(1, _tmp_105_rule, p)
  ------------------
  |  Branch (19606:13): [True: 50, False: 3]
  ------------------
19607|  14.6k|        )
19608|     50|        {
19609|     50|            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
19610|     50|            _res = t;
19611|     50|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (19611:18): [True: 0, False: 50]
  |  Branch (19611:34): [True: 0, False: 50]
  |  Branch (19611:57): [True: 0, False: 0]
  ------------------
19612|      0|                p->error_indicator = 1;
19613|      0|                p->level--;
19614|      0|                return NULL;
19615|      0|            }
19616|     50|            goto done;
19617|     50|        }
19618|  14.5k|        p->mark = _mark;
19619|  14.5k|        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
19620|  14.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)"));
19621|  14.5k|    }
19622|  14.5k|    if (p->call_invalid_rules) { // invalid_double_type_comments
  ------------------
  |  Branch (19622:9): [True: 2.43k, False: 12.1k]
  ------------------
19623|  2.43k|        if (p->error_indicator) {
  ------------------
  |  Branch (19623:13): [True: 0, False: 2.43k]
  ------------------
19624|      0|            p->level--;
19625|      0|            return NULL;
19626|      0|        }
19627|  2.43k|        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
19628|  2.43k|        void *invalid_double_type_comments_var;
19629|  2.43k|        if (
19630|  2.43k|            (invalid_double_type_comments_var = invalid_double_type_comments_rule(p))  // invalid_double_type_comments
  ------------------
  |  Branch (19630:13): [True: 0, False: 2.43k]
  ------------------
19631|  2.43k|        )
19632|      0|        {
19633|      0|            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments"));
19634|      0|            _res = invalid_double_type_comments_var;
19635|      0|            goto done;
19636|      0|        }
19637|  2.43k|        p->mark = _mark;
19638|  2.43k|        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
19639|  2.43k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_double_type_comments"));
19640|  2.43k|    }
19641|  14.5k|    { // TYPE_COMMENT
19642|  14.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (19642:13): [True: 4, False: 14.5k]
  ------------------
19643|      4|            p->level--;
19644|      4|            return NULL;
19645|      4|        }
19646|  14.5k|        D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
19647|  14.5k|        Token * type_comment_var;
19648|  14.5k|        if (
19649|  14.5k|            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
  ------------------
  |  |   73|  14.5k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (19649:13): [True: 362, False: 14.1k]
  ------------------
19650|  14.5k|        )
19651|    362|        {
19652|    362|            D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT"));
19653|    362|            _res = type_comment_var;
19654|    362|            goto done;
19655|    362|        }
19656|  14.1k|        p->mark = _mark;
19657|  14.1k|        D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ',
19658|  14.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT"));
19659|  14.1k|    }
19660|  14.1k|    _res = NULL;
19661|  14.6k|  done:
19662|  14.6k|    p->level--;
19663|  14.6k|    return _res;
19664|  14.1k|}
parser.c:_tmp_105_rule:
33866|     53|{
33867|     53|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    106|#  define MAXSTACK 6000
  ------------------
  |  Branch (33867:9): [True: 0, False: 53]
  |  Branch (33867:35): [True: 0, False: 53]
  ------------------
33868|      0|        _Pypegen_stack_overflow(p);
33869|      0|    }
33870|     53|    if (p->error_indicator) {
  ------------------
  |  Branch (33870:9): [True: 0, False: 53]
  ------------------
33871|      0|        p->level--;
33872|      0|        return NULL;
33873|      0|    }
33874|     53|    void * _res = NULL;
33875|     53|    int _mark = p->mark;
33876|     53|    { // NEWLINE INDENT
33877|     53|        if (p->error_indicator) {
  ------------------
  |  Branch (33877:13): [True: 0, False: 53]
  ------------------
33878|      0|            p->level--;
33879|      0|            return NULL;
33880|      0|        }
33881|     53|        D(fprintf(stderr, "%*c> _tmp_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
33882|     53|        Token * indent_var;
33883|     53|        Token * newline_var;
33884|     53|        if (
33885|     53|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     53|#define NEWLINE         4
  ------------------
  |  Branch (33885:13): [True: 53, False: 0]
  ------------------
33886|     53|            &&
33887|     53|            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
  ------------------
  |  |   21|     53|#define INDENT          5
  ------------------
  |  Branch (33887:13): [True: 50, False: 3]
  ------------------
33888|     53|        )
33889|     50|        {
33890|     50|            D(fprintf(stderr, "%*c+ _tmp_105[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT"));
33891|     50|            _res = _PyPegen_dummy_name(p, newline_var, indent_var);
33892|     50|            goto done;
33893|     50|        }
33894|      3|        p->mark = _mark;
33895|      3|        D(fprintf(stderr, "%*c%s _tmp_105[%d-%d]: %s failed!\n", p->level, ' ',
33896|      3|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT"));
33897|      3|    }
33898|      3|    _res = NULL;
33899|     53|  done:
33900|     53|    p->level--;
33901|     53|    return _res;
33902|      3|}
parser.c:invalid_double_type_comments_rule:
22750|  2.43k|{
22751|  2.43k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.87k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22751:9): [True: 0, False: 2.43k]
  |  Branch (22751:35): [True: 0, False: 2.43k]
  ------------------
22752|      0|        _Pypegen_stack_overflow(p);
22753|      0|    }
22754|  2.43k|    if (p->error_indicator) {
  ------------------
  |  Branch (22754:9): [True: 0, False: 2.43k]
  ------------------
22755|      0|        p->level--;
22756|      0|        return NULL;
22757|      0|    }
22758|  2.43k|    void * _res = NULL;
22759|  2.43k|    int _mark = p->mark;
22760|  2.43k|    { // TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT
22761|  2.43k|        if (p->error_indicator) {
  ------------------
  |  Branch (22761:13): [True: 0, False: 2.43k]
  ------------------
22762|      0|            p->level--;
22763|      0|            return NULL;
22764|      0|        }
22765|  2.43k|        D(fprintf(stderr, "%*c> invalid_double_type_comments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
22766|  2.43k|        Token * indent_var;
22767|  2.43k|        Token * newline_var;
22768|  2.43k|        Token * newline_var_1;
22769|  2.43k|        Token * type_comment_var;
22770|  2.43k|        Token * type_comment_var_1;
22771|  2.43k|        if (
22772|  2.43k|            (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
  ------------------
  |  |   73|  2.43k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (22772:13): [True: 119, False: 2.31k]
  ------------------
22773|    119|            &&
22774|    119|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    119|#define NEWLINE         4
  ------------------
  |  Branch (22774:13): [True: 119, False: 0]
  ------------------
22775|    119|            &&
22776|    119|            (type_comment_var_1 = _PyPegen_expect_token(p, TYPE_COMMENT))  // token='TYPE_COMMENT'
  ------------------
  |  |   73|    119|#define TYPE_COMMENT    57
  ------------------
  |  Branch (22776:13): [True: 2, False: 117]
  ------------------
22777|      2|            &&
22778|      2|            (newline_var_1 = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|      2|#define NEWLINE         4
  ------------------
  |  Branch (22778:13): [True: 2, False: 0]
  ------------------
22779|      2|            &&
22780|      2|            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
  ------------------
  |  |   21|      2|#define INDENT          5
  ------------------
  |  Branch (22780:13): [True: 1, False: 1]
  ------------------
22781|  2.43k|        )
22782|      1|        {
22783|      1|            D(fprintf(stderr, "%*c+ invalid_double_type_comments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
22784|      1|            _res = RAISE_SYNTAX_ERROR ( "Cannot have two type comments on def" );
  ------------------
  |  |  233|      1|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
22785|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22785:18): [True: 1, False: 0]
  |  Branch (22785:34): [True: 0, False: 0]
  |  Branch (22785:57): [True: 1, False: 0]
  ------------------
22786|      1|                p->error_indicator = 1;
22787|      1|                p->level--;
22788|      1|                return NULL;
22789|      1|            }
22790|      0|            goto done;
22791|      1|        }
22792|  2.43k|        p->mark = _mark;
22793|  2.43k|        D(fprintf(stderr, "%*c%s invalid_double_type_comments[%d-%d]: %s failed!\n", p->level, ' ',
22794|  2.43k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT"));
22795|  2.43k|    }
22796|  2.43k|    _res = NULL;
22797|  2.43k|  done:
22798|  2.43k|    p->level--;
22799|  2.43k|    return _res;
22800|  2.43k|}
parser.c:block_rule:
 4268|   100k|{
 4269|   100k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   201k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4269:9): [True: 0, False: 100k]
  |  Branch (4269:35): [True: 0, False: 100k]
  ------------------
 4270|      0|        _Pypegen_stack_overflow(p);
 4271|      0|    }
 4272|   100k|    if (p->error_indicator) {
  ------------------
  |  Branch (4272:9): [True: 0, False: 100k]
  ------------------
 4273|      0|        p->level--;
 4274|      0|        return NULL;
 4275|      0|    }
 4276|   100k|    asdl_stmt_seq* _res = NULL;
 4277|   100k|    if (_PyPegen_is_memoized(p, block_type, &_res)) {
  ------------------
  |  |  122|   100k|#define block_type 1033
  ------------------
  |  Branch (4277:9): [True: 25.1k, False: 75.7k]
  ------------------
 4278|  25.1k|        p->level--;
 4279|  25.1k|        return _res;
 4280|  25.1k|    }
 4281|  75.7k|    int _mark = p->mark;
 4282|  75.7k|    { // NEWLINE INDENT statements DEDENT
 4283|  75.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (4283:13): [True: 0, False: 75.7k]
  ------------------
 4284|      0|            p->level--;
 4285|      0|            return NULL;
 4286|      0|        }
 4287|  75.7k|        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
 4288|  75.7k|        asdl_stmt_seq* a;
 4289|  75.7k|        Token * dedent_var;
 4290|  75.7k|        Token * indent_var;
 4291|  75.7k|        Token * newline_var;
 4292|  75.7k|        if (
 4293|  75.7k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  75.7k|#define NEWLINE         4
  ------------------
  |  Branch (4293:13): [True: 19.6k, False: 56.0k]
  ------------------
 4294|  19.6k|            &&
 4295|  19.6k|            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
  ------------------
  |  |   21|  19.6k|#define INDENT          5
  ------------------
  |  Branch (4295:13): [True: 19.6k, False: 66]
  ------------------
 4296|  19.6k|            &&
 4297|  19.6k|            (a = statements_rule(p))  // statements
  ------------------
  |  Branch (4297:13): [True: 19.2k, False: 417]
  ------------------
 4298|  19.2k|            &&
 4299|  19.2k|            (dedent_var = _PyPegen_expect_token(p, DEDENT))  // token='DEDENT'
  ------------------
  |  |   22|  19.2k|#define DEDENT          6
  ------------------
  |  Branch (4299:13): [True: 19.0k, False: 128]
  ------------------
 4300|  75.7k|        )
 4301|  19.0k|        {
 4302|  19.0k|            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
 4303|  19.0k|            _res = a;
 4304|  19.0k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4304:18): [True: 0, False: 19.0k]
  |  Branch (4304:34): [True: 0, False: 19.0k]
  |  Branch (4304:57): [True: 0, False: 0]
  ------------------
 4305|      0|                p->error_indicator = 1;
 4306|      0|                p->level--;
 4307|      0|                return NULL;
 4308|      0|            }
 4309|  19.0k|            goto done;
 4310|  19.0k|        }
 4311|  56.6k|        p->mark = _mark;
 4312|  56.6k|        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
 4313|  56.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT"));
 4314|  56.6k|    }
 4315|      0|    { // simple_stmts
 4316|  56.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (4316:13): [True: 145, False: 56.4k]
  ------------------
 4317|    145|            p->level--;
 4318|    145|            return NULL;
 4319|    145|        }
 4320|  56.4k|        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
 4321|  56.4k|        asdl_stmt_seq* simple_stmts_var;
 4322|  56.4k|        if (
 4323|  56.4k|            (simple_stmts_var = simple_stmts_rule(p))  // simple_stmts
  ------------------
  |  Branch (4323:13): [True: 53.4k, False: 2.99k]
  ------------------
 4324|  56.4k|        )
 4325|  53.4k|        {
 4326|  53.4k|            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
 4327|  53.4k|            _res = simple_stmts_var;
 4328|  53.4k|            goto done;
 4329|  53.4k|        }
 4330|  2.99k|        p->mark = _mark;
 4331|  2.99k|        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
 4332|  2.99k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
 4333|  2.99k|    }
 4334|  2.99k|    if (p->call_invalid_rules) { // invalid_block
  ------------------
  |  Branch (4334:9): [True: 2.47k, False: 527]
  ------------------
 4335|  2.47k|        if (p->error_indicator) {
  ------------------
  |  Branch (4335:13): [True: 58, False: 2.41k]
  ------------------
 4336|     58|            p->level--;
 4337|     58|            return NULL;
 4338|     58|        }
 4339|  2.41k|        D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_block"));
 4340|  2.41k|        void *invalid_block_var;
 4341|  2.41k|        if (
 4342|  2.41k|            (invalid_block_var = invalid_block_rule(p))  // invalid_block
  ------------------
  |  Branch (4342:13): [True: 0, False: 2.41k]
  ------------------
 4343|  2.41k|        )
 4344|      0|        {
 4345|      0|            D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_block"));
 4346|      0|            _res = invalid_block_var;
 4347|      0|            goto done;
 4348|      0|        }
 4349|  2.41k|        p->mark = _mark;
 4350|  2.41k|        D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ',
 4351|  2.41k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_block"));
 4352|  2.41k|    }
 4353|  2.94k|    _res = NULL;
 4354|  75.5k|  done:
 4355|  75.5k|    _PyPegen_insert_memo(p, _mark, block_type, _res);
  ------------------
  |  |  122|  75.5k|#define block_type 1033
  ------------------
 4356|  75.5k|    p->level--;
 4357|  75.5k|    return _res;
 4358|  2.94k|}
parser.c:invalid_block_rule:
21436|  2.41k|{
21437|  2.41k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.82k|#  define MAXSTACK 6000
  ------------------
  |  Branch (21437:9): [True: 0, False: 2.41k]
  |  Branch (21437:35): [True: 0, False: 2.41k]
  ------------------
21438|      0|        _Pypegen_stack_overflow(p);
21439|      0|    }
21440|  2.41k|    if (p->error_indicator) {
  ------------------
  |  Branch (21440:9): [True: 0, False: 2.41k]
  ------------------
21441|      0|        p->level--;
21442|      0|        return NULL;
21443|      0|    }
21444|  2.41k|    void * _res = NULL;
21445|  2.41k|    int _mark = p->mark;
21446|  2.41k|    { // NEWLINE !INDENT
21447|  2.41k|        if (p->error_indicator) {
  ------------------
  |  Branch (21447:13): [True: 0, False: 2.41k]
  ------------------
21448|      0|            p->level--;
21449|      0|            return NULL;
21450|      0|        }
21451|  2.41k|        D(fprintf(stderr, "%*c> invalid_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
21452|  2.41k|        Token * newline_var;
21453|  2.41k|        if (
21454|  2.41k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  2.41k|#define NEWLINE         4
  ------------------
  |  Branch (21454:13): [True: 164, False: 2.25k]
  ------------------
21455|    164|            &&
21456|    164|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    164|#define INDENT          5
  ------------------
  |  Branch (21456:13): [True: 5, False: 159]
  ------------------
21457|  2.41k|        )
21458|      5|        {
21459|      5|            D(fprintf(stderr, "%*c+ invalid_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE !INDENT"));
21460|      5|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block" );
  ------------------
  |  |  234|      5|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
21461|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (21461:18): [True: 5, False: 0]
  |  Branch (21461:34): [True: 0, False: 0]
  |  Branch (21461:57): [True: 5, False: 0]
  ------------------
21462|      5|                p->error_indicator = 1;
21463|      5|                p->level--;
21464|      5|                return NULL;
21465|      5|            }
21466|      0|            goto done;
21467|      5|        }
21468|  2.40k|        p->mark = _mark;
21469|  2.40k|        D(fprintf(stderr, "%*c%s invalid_block[%d-%d]: %s failed!\n", p->level, ' ',
21470|  2.40k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE !INDENT"));
21471|  2.40k|    }
21472|  2.40k|    _res = NULL;
21473|  2.40k|  done:
21474|  2.40k|    p->level--;
21475|  2.40k|    return _res;
21476|  2.40k|}
parser.c:if_stmt_rule:
 6042|  2.82k|{
 6043|  2.82k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.64k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6043:9): [True: 0, False: 2.82k]
  |  Branch (6043:35): [True: 0, False: 2.82k]
  ------------------
 6044|      0|        _Pypegen_stack_overflow(p);
 6045|      0|    }
 6046|  2.82k|    if (p->error_indicator) {
  ------------------
  |  Branch (6046:9): [True: 0, False: 2.82k]
  ------------------
 6047|      0|        p->level--;
 6048|      0|        return NULL;
 6049|      0|    }
 6050|  2.82k|    stmt_ty _res = NULL;
 6051|  2.82k|    int _mark = p->mark;
 6052|  2.82k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (6052:9): [True: 0, False: 2.82k]
  |  Branch (6052:31): [True: 0, False: 0]
  ------------------
 6053|      0|        p->error_indicator = 1;
 6054|      0|        p->level--;
 6055|      0|        return NULL;
 6056|      0|    }
 6057|  2.82k|    int _start_lineno = p->tokens[_mark]->lineno;
 6058|  2.82k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.82k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.82k]
  |  |  ------------------
  ------------------
 6059|  2.82k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 6060|  2.82k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.82k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.82k]
  |  |  ------------------
  ------------------
 6061|  2.82k|    if (p->call_invalid_rules) { // invalid_if_stmt
  ------------------
  |  Branch (6061:9): [True: 756, False: 2.06k]
  ------------------
 6062|    756|        if (p->error_indicator) {
  ------------------
  |  Branch (6062:13): [True: 0, False: 756]
  ------------------
 6063|      0|            p->level--;
 6064|      0|            return NULL;
 6065|      0|        }
 6066|    756|        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt"));
 6067|    756|        void *invalid_if_stmt_var;
 6068|    756|        if (
 6069|    756|            (invalid_if_stmt_var = invalid_if_stmt_rule(p))  // invalid_if_stmt
  ------------------
  |  Branch (6069:13): [True: 0, False: 756]
  ------------------
 6070|    756|        )
 6071|      0|        {
 6072|      0|            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt"));
 6073|      0|            _res = invalid_if_stmt_var;
 6074|      0|            goto done;
 6075|      0|        }
 6076|    756|        p->mark = _mark;
 6077|    756|        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6078|    756|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt"));
 6079|    756|    }
 6080|  2.82k|    { // 'if' named_expression ':' block elif_stmt
 6081|  2.82k|        if (p->error_indicator) {
  ------------------
  |  Branch (6081:13): [True: 14, False: 2.81k]
  ------------------
 6082|     14|            p->level--;
 6083|     14|            return NULL;
 6084|     14|        }
 6085|  2.81k|        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
 6086|  2.81k|        Token * _keyword;
 6087|  2.81k|        Token * _literal;
 6088|  2.81k|        expr_ty a;
 6089|  2.81k|        asdl_stmt_seq* b;
 6090|  2.81k|        stmt_ty c;
 6091|  2.81k|        if (
 6092|  2.81k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (6092:13): [True: 2.81k, False: 0]
  ------------------
 6093|  2.81k|            &&
 6094|  2.81k|            (a = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (6094:13): [True: 2.79k, False: 13]
  ------------------
 6095|  2.79k|            &&
 6096|  2.79k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6096:13): [True: 2.78k, False: 14]
  ------------------
 6097|  2.78k|            &&
 6098|  2.78k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6098:13): [True: 2.74k, False: 42]
  ------------------
 6099|  2.74k|            &&
 6100|  2.74k|            (c = elif_stmt_rule(p))  // elif_stmt
  ------------------
  |  Branch (6100:13): [True: 428, False: 2.31k]
  ------------------
 6101|  2.81k|        )
 6102|    428|        {
 6103|    428|            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
 6104|    428|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6105|    428|            if (_token == NULL) {
  ------------------
  |  Branch (6105:17): [True: 0, False: 428]
  ------------------
 6106|      0|                p->level--;
 6107|      0|                return NULL;
 6108|      0|            }
 6109|    428|            int _end_lineno = _token->end_lineno;
 6110|    428|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    428|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 428]
  |  |  ------------------
  ------------------
 6111|    428|            int _end_col_offset = _token->end_col_offset;
 6112|    428|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    428|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 428]
  |  |  ------------------
  ------------------
 6113|    428|            _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq* , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
  ------------------
  |  |  271|    428|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq* , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
  ------------------
  |  |  307|    428|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6114|    428|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6114:18): [True: 0, False: 428]
  |  Branch (6114:34): [True: 0, False: 428]
  |  Branch (6114:57): [True: 0, False: 0]
  ------------------
 6115|      0|                p->error_indicator = 1;
 6116|      0|                p->level--;
 6117|      0|                return NULL;
 6118|      0|            }
 6119|    428|            goto done;
 6120|    428|        }
 6121|  2.38k|        p->mark = _mark;
 6122|  2.38k|        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6123|  2.38k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block elif_stmt"));
 6124|  2.38k|    }
 6125|      0|    { // 'if' named_expression ':' block else_block?
 6126|  2.38k|        if (p->error_indicator) {
  ------------------
  |  Branch (6126:13): [True: 32, False: 2.35k]
  ------------------
 6127|     32|            p->level--;
 6128|     32|            return NULL;
 6129|     32|        }
 6130|  2.35k|        D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
 6131|  2.35k|        Token * _keyword;
 6132|  2.35k|        Token * _literal;
 6133|  2.35k|        expr_ty a;
 6134|  2.35k|        asdl_stmt_seq* b;
 6135|  2.35k|        void *c;
 6136|  2.35k|        if (
 6137|  2.35k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (6137:13): [True: 2.35k, False: 0]
  ------------------
 6138|  2.35k|            &&
 6139|  2.35k|            (a = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (6139:13): [True: 2.34k, False: 10]
  ------------------
 6140|  2.34k|            &&
 6141|  2.34k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6141:13): [True: 2.32k, False: 14]
  ------------------
 6142|  2.32k|            &&
 6143|  2.32k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6143:13): [True: 2.29k, False: 32]
  ------------------
 6144|  2.29k|            &&
 6145|  2.29k|            (c = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (6145:13): [True: 2.28k, False: 8]
  ------------------
 6146|  2.35k|        )
 6147|  2.28k|        {
 6148|  2.28k|            D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?"));
 6149|  2.28k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6150|  2.28k|            if (_token == NULL) {
  ------------------
  |  Branch (6150:17): [True: 0, False: 2.28k]
  ------------------
 6151|      0|                p->level--;
 6152|      0|                return NULL;
 6153|      0|            }
 6154|  2.28k|            int _end_lineno = _token->end_lineno;
 6155|  2.28k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.28k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 6156|  2.28k|            int _end_col_offset = _token->end_col_offset;
 6157|  2.28k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.28k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 6158|  2.28k|            _res = _PyAST_If ( a , b , c , EXTRA );
  ------------------
  |  |  307|  2.28k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6159|  2.28k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6159:18): [True: 0, False: 2.28k]
  |  Branch (6159:34): [True: 0, False: 2.28k]
  |  Branch (6159:57): [True: 0, False: 0]
  ------------------
 6160|      0|                p->error_indicator = 1;
 6161|      0|                p->level--;
 6162|      0|                return NULL;
 6163|      0|            }
 6164|  2.28k|            goto done;
 6165|  2.28k|        }
 6166|     64|        p->mark = _mark;
 6167|     64|        D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6168|     64|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?"));
 6169|     64|    }
 6170|     64|    _res = NULL;
 6171|  2.77k|  done:
 6172|  2.77k|    p->level--;
 6173|  2.77k|    return _res;
 6174|     64|}
parser.c:invalid_if_stmt_rule:
24791|    756|{
24792|    756|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.51k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24792:9): [True: 0, False: 756]
  |  Branch (24792:35): [True: 0, False: 756]
  ------------------
24793|      0|        _Pypegen_stack_overflow(p);
24794|      0|    }
24795|    756|    if (p->error_indicator) {
  ------------------
  |  Branch (24795:9): [True: 0, False: 756]
  ------------------
24796|      0|        p->level--;
24797|      0|        return NULL;
24798|      0|    }
24799|    756|    void * _res = NULL;
24800|    756|    int _mark = p->mark;
24801|    756|    { // 'if' named_expression NEWLINE
24802|    756|        if (p->error_indicator) {
  ------------------
  |  Branch (24802:13): [True: 0, False: 756]
  ------------------
24803|      0|            p->level--;
24804|      0|            return NULL;
24805|      0|        }
24806|    756|        D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE"));
24807|    756|        Token * _keyword;
24808|    756|        expr_ty named_expression_var;
24809|    756|        Token * newline_var;
24810|    756|        if (
24811|    756|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (24811:13): [True: 756, False: 0]
  ------------------
24812|    756|            &&
24813|    756|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (24813:13): [True: 748, False: 8]
  ------------------
24814|    748|            &&
24815|    748|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    748|#define NEWLINE         4
  ------------------
  |  Branch (24815:13): [True: 5, False: 743]
  ------------------
24816|    756|        )
24817|      5|        {
24818|      5|            D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression NEWLINE"));
24819|      5|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      5|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
24820|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24820:18): [True: 5, False: 0]
  |  Branch (24820:34): [True: 0, False: 0]
  |  Branch (24820:57): [True: 5, False: 0]
  ------------------
24821|      5|                p->error_indicator = 1;
24822|      5|                p->level--;
24823|      5|                return NULL;
24824|      5|            }
24825|      0|            goto done;
24826|      5|        }
24827|    751|        p->mark = _mark;
24828|    751|        D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24829|    751|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression NEWLINE"));
24830|    751|    }
24831|      0|    { // 'if' named_expression ':' NEWLINE !INDENT
24832|    751|        if (p->error_indicator) {
  ------------------
  |  Branch (24832:13): [True: 4, False: 747]
  ------------------
24833|      4|            p->level--;
24834|      4|            return NULL;
24835|      4|        }
24836|    747|        D(fprintf(stderr, "%*c> invalid_if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
24837|    747|        Token * _literal;
24838|    747|        Token * a;
24839|    747|        expr_ty a_1;
24840|    747|        Token * newline_var;
24841|    747|        if (
24842|    747|            (a = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (24842:13): [True: 747, False: 0]
  ------------------
24843|    747|            &&
24844|    747|            (a_1 = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (24844:13): [True: 743, False: 4]
  ------------------
24845|    743|            &&
24846|    743|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24846:13): [True: 740, False: 3]
  ------------------
24847|    740|            &&
24848|    740|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    740|#define NEWLINE         4
  ------------------
  |  Branch (24848:13): [True: 17, False: 723]
  ------------------
24849|     17|            &&
24850|     17|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|     17|#define INDENT          5
  ------------------
  |  Branch (24850:13): [True: 5, False: 12]
  ------------------
24851|    747|        )
24852|      5|        {
24853|      5|            D(fprintf(stderr, "%*c+ invalid_if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
24854|      5|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'if' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      5|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24855|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24855:18): [True: 5, False: 0]
  |  Branch (24855:34): [True: 0, False: 0]
  |  Branch (24855:57): [True: 5, False: 0]
  ------------------
24856|      5|                p->error_indicator = 1;
24857|      5|                p->level--;
24858|      5|                return NULL;
24859|      5|            }
24860|      0|            goto done;
24861|      5|        }
24862|    742|        p->mark = _mark;
24863|    742|        D(fprintf(stderr, "%*c%s invalid_if_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24864|    742|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' NEWLINE !INDENT"));
24865|    742|    }
24866|    742|    _res = NULL;
24867|    742|  done:
24868|    742|    p->level--;
24869|    742|    return _res;
24870|    742|}
parser.c:elif_stmt_rule:
 6182|  4.14k|{
 6183|  4.14k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.29k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6183:9): [True: 0, False: 4.14k]
  |  Branch (6183:35): [True: 0, False: 4.14k]
  ------------------
 6184|      0|        _Pypegen_stack_overflow(p);
 6185|      0|    }
 6186|  4.14k|    if (p->error_indicator) {
  ------------------
  |  Branch (6186:9): [True: 0, False: 4.14k]
  ------------------
 6187|      0|        p->level--;
 6188|      0|        return NULL;
 6189|      0|    }
 6190|  4.14k|    stmt_ty _res = NULL;
 6191|  4.14k|    int _mark = p->mark;
 6192|  4.14k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (6192:9): [True: 2.93k, False: 1.21k]
  |  Branch (6192:31): [True: 1, False: 2.93k]
  ------------------
 6193|      1|        p->error_indicator = 1;
 6194|      1|        p->level--;
 6195|      1|        return NULL;
 6196|      1|    }
 6197|  4.14k|    int _start_lineno = p->tokens[_mark]->lineno;
 6198|  4.14k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.14k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.14k]
  |  |  ------------------
  ------------------
 6199|  4.14k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 6200|  4.14k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.14k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.14k]
  |  |  ------------------
  ------------------
 6201|  4.14k|    if (p->call_invalid_rules) { // invalid_elif_stmt
  ------------------
  |  Branch (6201:9): [True: 1.21k, False: 2.93k]
  ------------------
 6202|  1.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (6202:13): [True: 0, False: 1.21k]
  ------------------
 6203|      0|            p->level--;
 6204|      0|            return NULL;
 6205|      0|        }
 6206|  1.21k|        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt"));
 6207|  1.21k|        void *invalid_elif_stmt_var;
 6208|  1.21k|        if (
 6209|  1.21k|            (invalid_elif_stmt_var = invalid_elif_stmt_rule(p))  // invalid_elif_stmt
  ------------------
  |  Branch (6209:13): [True: 0, False: 1.21k]
  ------------------
 6210|  1.21k|        )
 6211|      0|        {
 6212|      0|            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt"));
 6213|      0|            _res = invalid_elif_stmt_var;
 6214|      0|            goto done;
 6215|      0|        }
 6216|  1.21k|        p->mark = _mark;
 6217|  1.21k|        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6218|  1.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt"));
 6219|  1.21k|    }
 6220|  4.14k|    { // 'elif' named_expression ':' block elif_stmt
 6221|  4.14k|        if (p->error_indicator) {
  ------------------
  |  Branch (6221:13): [True: 7, False: 4.13k]
  ------------------
 6222|      7|            p->level--;
 6223|      7|            return NULL;
 6224|      7|        }
 6225|  4.13k|        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
 6226|  4.13k|        Token * _keyword;
 6227|  4.13k|        Token * _literal;
 6228|  4.13k|        expr_ty a;
 6229|  4.13k|        asdl_stmt_seq* b;
 6230|  4.13k|        stmt_ty c;
 6231|  4.13k|        if (
 6232|  4.13k|            (_keyword = _PyPegen_expect_token(p, 705))  // token='elif'
  ------------------
  |  Branch (6232:13): [True: 1.44k, False: 2.69k]
  ------------------
 6233|  1.44k|            &&
 6234|  1.44k|            (a = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (6234:13): [True: 1.43k, False: 6]
  ------------------
 6235|  1.43k|            &&
 6236|  1.43k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6236:13): [True: 1.42k, False: 7]
  ------------------
 6237|  1.42k|            &&
 6238|  1.42k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6238:13): [True: 1.40k, False: 23]
  ------------------
 6239|  1.40k|            &&
 6240|  1.40k|            (c = elif_stmt_rule(p))  // elif_stmt
  ------------------
  |  Branch (6240:13): [True: 735, False: 669]
  ------------------
 6241|  4.13k|        )
 6242|    735|        {
 6243|    735|            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
 6244|    735|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6245|    735|            if (_token == NULL) {
  ------------------
  |  Branch (6245:17): [True: 0, False: 735]
  ------------------
 6246|      0|                p->level--;
 6247|      0|                return NULL;
 6248|      0|            }
 6249|    735|            int _end_lineno = _token->end_lineno;
 6250|    735|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    735|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 735]
  |  |  ------------------
  ------------------
 6251|    735|            int _end_col_offset = _token->end_col_offset;
 6252|    735|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    735|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 735]
  |  |  ------------------
  ------------------
 6253|    735|            _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq* , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
  ------------------
  |  |  271|    735|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq* , _PyPegen_singleton_seq ( p , c ) ) , EXTRA );
  ------------------
  |  |  307|    735|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6254|    735|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6254:18): [True: 0, False: 735]
  |  Branch (6254:34): [True: 0, False: 735]
  |  Branch (6254:57): [True: 0, False: 0]
  ------------------
 6255|      0|                p->error_indicator = 1;
 6256|      0|                p->level--;
 6257|      0|                return NULL;
 6258|      0|            }
 6259|    735|            goto done;
 6260|    735|        }
 6261|  3.40k|        p->mark = _mark;
 6262|  3.40k|        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6263|  3.40k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block elif_stmt"));
 6264|  3.40k|    }
 6265|      0|    { // 'elif' named_expression ':' block else_block?
 6266|  3.40k|        if (p->error_indicator) {
  ------------------
  |  Branch (6266:13): [True: 244, False: 3.15k]
  ------------------
 6267|    244|            p->level--;
 6268|    244|            return NULL;
 6269|    244|        }
 6270|  3.15k|        D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
 6271|  3.15k|        Token * _keyword;
 6272|  3.15k|        Token * _literal;
 6273|  3.15k|        expr_ty a;
 6274|  3.15k|        asdl_stmt_seq* b;
 6275|  3.15k|        void *c;
 6276|  3.15k|        if (
 6277|  3.15k|            (_keyword = _PyPegen_expect_token(p, 705))  // token='elif'
  ------------------
  |  Branch (6277:13): [True: 461, False: 2.69k]
  ------------------
 6278|    461|            &&
 6279|    461|            (a = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (6279:13): [True: 456, False: 5]
  ------------------
 6280|    456|            &&
 6281|    456|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6281:13): [True: 449, False: 7]
  ------------------
 6282|    449|            &&
 6283|    449|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6283:13): [True: 432, False: 17]
  ------------------
 6284|    432|            &&
 6285|    432|            (c = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (6285:13): [True: 428, False: 4]
  ------------------
 6286|  3.15k|        )
 6287|    428|        {
 6288|    428|            D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?"));
 6289|    428|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6290|    428|            if (_token == NULL) {
  ------------------
  |  Branch (6290:17): [True: 0, False: 428]
  ------------------
 6291|      0|                p->level--;
 6292|      0|                return NULL;
 6293|      0|            }
 6294|    428|            int _end_lineno = _token->end_lineno;
 6295|    428|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    428|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 428]
  |  |  ------------------
  ------------------
 6296|    428|            int _end_col_offset = _token->end_col_offset;
 6297|    428|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    428|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 428]
  |  |  ------------------
  ------------------
 6298|    428|            _res = _PyAST_If ( a , b , c , EXTRA );
  ------------------
  |  |  307|    428|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6299|    428|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6299:18): [True: 0, False: 428]
  |  Branch (6299:34): [True: 0, False: 428]
  |  Branch (6299:57): [True: 0, False: 0]
  ------------------
 6300|      0|                p->error_indicator = 1;
 6301|      0|                p->level--;
 6302|      0|                return NULL;
 6303|      0|            }
 6304|    428|            goto done;
 6305|    428|        }
 6306|  2.73k|        p->mark = _mark;
 6307|  2.73k|        D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6308|  2.73k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?"));
 6309|  2.73k|    }
 6310|  2.73k|    _res = NULL;
 6311|  3.89k|  done:
 6312|  3.89k|    p->level--;
 6313|  3.89k|    return _res;
 6314|  2.73k|}
parser.c:invalid_elif_stmt_rule:
24877|  1.21k|{
24878|  1.21k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.42k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24878:9): [True: 0, False: 1.21k]
  |  Branch (24878:35): [True: 0, False: 1.21k]
  ------------------
24879|      0|        _Pypegen_stack_overflow(p);
24880|      0|    }
24881|  1.21k|    if (p->error_indicator) {
  ------------------
  |  Branch (24881:9): [True: 0, False: 1.21k]
  ------------------
24882|      0|        p->level--;
24883|      0|        return NULL;
24884|      0|    }
24885|  1.21k|    void * _res = NULL;
24886|  1.21k|    int _mark = p->mark;
24887|  1.21k|    { // 'elif' named_expression NEWLINE
24888|  1.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (24888:13): [True: 0, False: 1.21k]
  ------------------
24889|      0|            p->level--;
24890|      0|            return NULL;
24891|      0|        }
24892|  1.21k|        D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE"));
24893|  1.21k|        Token * _keyword;
24894|  1.21k|        expr_ty named_expression_var;
24895|  1.21k|        Token * newline_var;
24896|  1.21k|        if (
24897|  1.21k|            (_keyword = _PyPegen_expect_token(p, 705))  // token='elif'
  ------------------
  |  Branch (24897:13): [True: 511, False: 699]
  ------------------
24898|    511|            &&
24899|    511|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (24899:13): [True: 507, False: 4]
  ------------------
24900|    507|            &&
24901|    507|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    507|#define NEWLINE         4
  ------------------
  |  Branch (24901:13): [True: 4, False: 503]
  ------------------
24902|  1.21k|        )
24903|      4|        {
24904|      4|            D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression NEWLINE"));
24905|      4|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      4|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
24906|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24906:18): [True: 4, False: 0]
  |  Branch (24906:34): [True: 0, False: 0]
  |  Branch (24906:57): [True: 4, False: 0]
  ------------------
24907|      4|                p->error_indicator = 1;
24908|      4|                p->level--;
24909|      4|                return NULL;
24910|      4|            }
24911|      0|            goto done;
24912|      4|        }
24913|  1.20k|        p->mark = _mark;
24914|  1.20k|        D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24915|  1.20k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression NEWLINE"));
24916|  1.20k|    }
24917|      0|    { // 'elif' named_expression ':' NEWLINE !INDENT
24918|  1.20k|        if (p->error_indicator) {
  ------------------
  |  Branch (24918:13): [True: 2, False: 1.20k]
  ------------------
24919|      2|            p->level--;
24920|      2|            return NULL;
24921|      2|        }
24922|  1.20k|        D(fprintf(stderr, "%*c> invalid_elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
24923|  1.20k|        Token * _literal;
24924|  1.20k|        Token * a;
24925|  1.20k|        expr_ty named_expression_var;
24926|  1.20k|        Token * newline_var;
24927|  1.20k|        if (
24928|  1.20k|            (a = _PyPegen_expect_token(p, 705))  // token='elif'
  ------------------
  |  Branch (24928:13): [True: 505, False: 699]
  ------------------
24929|    505|            &&
24930|    505|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (24930:13): [True: 503, False: 2]
  ------------------
24931|    503|            &&
24932|    503|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24932:13): [True: 502, False: 1]
  ------------------
24933|    502|            &&
24934|    502|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    502|#define NEWLINE         4
  ------------------
  |  Branch (24934:13): [True: 37, False: 465]
  ------------------
24935|     37|            &&
24936|     37|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|     37|#define INDENT          5
  ------------------
  |  Branch (24936:13): [True: 1, False: 36]
  ------------------
24937|  1.20k|        )
24938|      1|        {
24939|      1|            D(fprintf(stderr, "%*c+ invalid_elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
24940|      1|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'elif' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      1|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24941|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24941:18): [True: 1, False: 0]
  |  Branch (24941:34): [True: 0, False: 0]
  |  Branch (24941:57): [True: 1, False: 0]
  ------------------
24942|      1|                p->error_indicator = 1;
24943|      1|                p->level--;
24944|      1|                return NULL;
24945|      1|            }
24946|      0|            goto done;
24947|      1|        }
24948|  1.20k|        p->mark = _mark;
24949|  1.20k|        D(fprintf(stderr, "%*c%s invalid_elif_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24950|  1.20k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' NEWLINE !INDENT"));
24951|  1.20k|    }
24952|  1.20k|    _res = NULL;
24953|  1.20k|  done:
24954|  1.20k|    p->level--;
24955|  1.20k|    return _res;
24956|  1.20k|}
parser.c:else_block_rule:
 6319|  15.2k|{
 6320|  15.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  30.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6320:9): [True: 0, False: 15.2k]
  |  Branch (6320:35): [True: 0, False: 15.2k]
  ------------------
 6321|      0|        _Pypegen_stack_overflow(p);
 6322|      0|    }
 6323|  15.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (6323:9): [True: 0, False: 15.2k]
  ------------------
 6324|      0|        p->level--;
 6325|      0|        return NULL;
 6326|      0|    }
 6327|  15.2k|    asdl_stmt_seq* _res = NULL;
 6328|  15.2k|    int _mark = p->mark;
 6329|  15.2k|    if (p->call_invalid_rules) { // invalid_else_stmt
  ------------------
  |  Branch (6329:9): [True: 3.35k, False: 11.9k]
  ------------------
 6330|  3.35k|        if (p->error_indicator) {
  ------------------
  |  Branch (6330:13): [True: 0, False: 3.35k]
  ------------------
 6331|      0|            p->level--;
 6332|      0|            return NULL;
 6333|      0|        }
 6334|  3.35k|        D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt"));
 6335|  3.35k|        void *invalid_else_stmt_var;
 6336|  3.35k|        if (
 6337|  3.35k|            (invalid_else_stmt_var = invalid_else_stmt_rule(p))  // invalid_else_stmt
  ------------------
  |  Branch (6337:13): [True: 0, False: 3.35k]
  ------------------
 6338|  3.35k|        )
 6339|      0|        {
 6340|      0|            D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt"));
 6341|      0|            _res = invalid_else_stmt_var;
 6342|      0|            goto done;
 6343|      0|        }
 6344|  3.35k|        p->mark = _mark;
 6345|  3.35k|        D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ',
 6346|  3.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_else_stmt"));
 6347|  3.35k|    }
 6348|  15.2k|    { // 'else' &&':' block
 6349|  15.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (6349:13): [True: 8, False: 15.2k]
  ------------------
 6350|      8|            p->level--;
 6351|      8|            return NULL;
 6352|      8|        }
 6353|  15.2k|        D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' &&':' block"));
 6354|  15.2k|        Token * _keyword;
 6355|  15.2k|        Token * _literal;
 6356|  15.2k|        asdl_stmt_seq* b;
 6357|  15.2k|        if (
 6358|  15.2k|            (_keyword = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (6358:13): [True: 1.01k, False: 14.2k]
  ------------------
 6359|  1.01k|            &&
 6360|  1.01k|            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
  ------------------
  |  Branch (6360:13): [True: 1.00k, False: 7]
  ------------------
 6361|  1.00k|            &&
 6362|  1.00k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6362:13): [True: 985, False: 23]
  ------------------
 6363|  15.2k|        )
 6364|    985|        {
 6365|    985|            D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' &&':' block"));
 6366|    985|            _res = b;
 6367|    985|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6367:18): [True: 0, False: 985]
  |  Branch (6367:34): [True: 0, False: 985]
  |  Branch (6367:57): [True: 0, False: 0]
  ------------------
 6368|      0|                p->error_indicator = 1;
 6369|      0|                p->level--;
 6370|      0|                return NULL;
 6371|      0|            }
 6372|    985|            goto done;
 6373|    985|        }
 6374|  14.2k|        p->mark = _mark;
 6375|  14.2k|        D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ',
 6376|  14.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' &&':' block"));
 6377|  14.2k|    }
 6378|  14.2k|    _res = NULL;
 6379|  15.2k|  done:
 6380|  15.2k|    p->level--;
 6381|  15.2k|    return _res;
 6382|  14.2k|}
parser.c:invalid_else_stmt_rule:
24961|  3.35k|{
24962|  3.35k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  6.71k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24962:9): [True: 0, False: 3.35k]
  |  Branch (24962:35): [True: 0, False: 3.35k]
  ------------------
24963|      0|        _Pypegen_stack_overflow(p);
24964|      0|    }
24965|  3.35k|    if (p->error_indicator) {
  ------------------
  |  Branch (24965:9): [True: 0, False: 3.35k]
  ------------------
24966|      0|        p->level--;
24967|      0|        return NULL;
24968|      0|    }
24969|  3.35k|    void * _res = NULL;
24970|  3.35k|    int _mark = p->mark;
24971|  3.35k|    { // 'else' ':' NEWLINE !INDENT
24972|  3.35k|        if (p->error_indicator) {
  ------------------
  |  Branch (24972:13): [True: 0, False: 3.35k]
  ------------------
24973|      0|            p->level--;
24974|      0|            return NULL;
24975|      0|        }
24976|  3.35k|        D(fprintf(stderr, "%*c> invalid_else_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
24977|  3.35k|        Token * _literal;
24978|  3.35k|        Token * a;
24979|  3.35k|        Token * newline_var;
24980|  3.35k|        if (
24981|  3.35k|            (a = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (24981:13): [True: 238, False: 3.12k]
  ------------------
24982|    238|            &&
24983|    238|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24983:13): [True: 238, False: 0]
  ------------------
24984|    238|            &&
24985|    238|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    238|#define NEWLINE         4
  ------------------
  |  Branch (24985:13): [True: 72, False: 166]
  ------------------
24986|     72|            &&
24987|     72|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|     72|#define INDENT          5
  ------------------
  |  Branch (24987:13): [True: 1, False: 71]
  ------------------
24988|  3.35k|        )
24989|      1|        {
24990|      1|            D(fprintf(stderr, "%*c+ invalid_else_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
24991|      1|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'else' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      1|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24992|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24992:18): [True: 1, False: 0]
  |  Branch (24992:34): [True: 0, False: 0]
  |  Branch (24992:57): [True: 1, False: 0]
  ------------------
24993|      1|                p->error_indicator = 1;
24994|      1|                p->level--;
24995|      1|                return NULL;
24996|      1|            }
24997|      0|            goto done;
24998|      1|        }
24999|  3.35k|        p->mark = _mark;
25000|  3.35k|        D(fprintf(stderr, "%*c%s invalid_else_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25001|  3.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' ':' NEWLINE !INDENT"));
25002|  3.35k|    }
25003|      0|    { // 'else' ':' block 'elif'
25004|  3.35k|        if (p->error_indicator) {
  ------------------
  |  Branch (25004:13): [True: 0, False: 3.35k]
  ------------------
25005|      0|            p->level--;
25006|      0|            return NULL;
25007|      0|        }
25008|  3.35k|        D(fprintf(stderr, "%*c> invalid_else_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' ':' block 'elif'"));
25009|  3.35k|        Token * _keyword;
25010|  3.35k|        Token * _keyword_1;
25011|  3.35k|        Token * _literal;
25012|  3.35k|        asdl_stmt_seq* block_var;
25013|  3.35k|        if (
25014|  3.35k|            (_keyword = _PyPegen_expect_token(p, 704))  // token='else'
  ------------------
  |  Branch (25014:13): [True: 237, False: 3.12k]
  ------------------
25015|    237|            &&
25016|    237|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25016:13): [True: 237, False: 0]
  ------------------
25017|    237|            &&
25018|    237|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (25018:13): [True: 227, False: 10]
  ------------------
25019|    227|            &&
25020|    227|            (_keyword_1 = _PyPegen_expect_token(p, 705))  // token='elif'
  ------------------
  |  Branch (25020:13): [True: 3, False: 224]
  ------------------
25021|  3.35k|        )
25022|      3|        {
25023|      3|            D(fprintf(stderr, "%*c+ invalid_else_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' ':' block 'elif'"));
25024|      3|            _res = RAISE_SYNTAX_ERROR ( "'elif' block follows an 'else' block" );
  ------------------
  |  |  233|      3|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
25025|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25025:18): [True: 3, False: 0]
  |  Branch (25025:34): [True: 0, False: 0]
  |  Branch (25025:57): [True: 3, False: 0]
  ------------------
25026|      3|                p->error_indicator = 1;
25027|      3|                p->level--;
25028|      3|                return NULL;
25029|      3|            }
25030|      0|            goto done;
25031|      3|        }
25032|  3.35k|        p->mark = _mark;
25033|  3.35k|        D(fprintf(stderr, "%*c%s invalid_else_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25034|  3.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' ':' block 'elif'"));
25035|  3.35k|    }
25036|  3.35k|    _res = NULL;
25037|  3.35k|  done:
25038|  3.35k|    p->level--;
25039|  3.35k|    return _res;
25040|  3.35k|}
parser.c:_tmp_7_rule:
27751|   197k|{
27752|   197k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   394k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27752:9): [True: 0, False: 197k]
  |  Branch (27752:35): [True: 0, False: 197k]
  ------------------
27753|      0|        _Pypegen_stack_overflow(p);
27754|      0|    }
27755|   197k|    if (p->error_indicator) {
  ------------------
  |  Branch (27755:9): [True: 0, False: 197k]
  ------------------
27756|      0|        p->level--;
27757|      0|        return NULL;
27758|      0|    }
27759|   197k|    void * _res = NULL;
27760|   197k|    int _mark = p->mark;
27761|   197k|    { // 'class'
27762|   197k|        if (p->error_indicator) {
  ------------------
  |  Branch (27762:13): [True: 0, False: 197k]
  ------------------
27763|      0|            p->level--;
27764|      0|            return NULL;
27765|      0|        }
27766|   197k|        D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'"));
27767|   197k|        Token * _keyword;
27768|   197k|        if (
27769|   197k|            (_keyword = _PyPegen_expect_token(p, 719))  // token='class'
  ------------------
  |  Branch (27769:13): [True: 16.6k, False: 180k]
  ------------------
27770|   197k|        )
27771|  16.6k|        {
27772|  16.6k|            D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'"));
27773|  16.6k|            _res = _keyword;
27774|  16.6k|            goto done;
27775|  16.6k|        }
27776|   180k|        p->mark = _mark;
27777|   180k|        D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ',
27778|   180k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'"));
27779|   180k|    }
27780|      0|    { // '@'
27781|   180k|        if (p->error_indicator) {
  ------------------
  |  Branch (27781:13): [True: 0, False: 180k]
  ------------------
27782|      0|            p->level--;
27783|      0|            return NULL;
27784|      0|        }
27785|   180k|        D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'"));
27786|   180k|        Token * _literal;
27787|   180k|        if (
27788|   180k|            (_literal = _PyPegen_expect_token(p, 49))  // token='@'
  ------------------
  |  Branch (27788:13): [True: 841, False: 179k]
  ------------------
27789|   180k|        )
27790|    841|        {
27791|    841|            D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'"));
27792|    841|            _res = _literal;
27793|    841|            goto done;
27794|    841|        }
27795|   179k|        p->mark = _mark;
27796|   179k|        D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ',
27797|   179k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'"));
27798|   179k|    }
27799|   179k|    _res = NULL;
27800|   197k|  done:
27801|   197k|    p->level--;
27802|   197k|    return _res;
27803|   179k|}
parser.c:class_def_rule:
 4406|  17.4k|{
 4407|  17.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4407:9): [True: 0, False: 17.4k]
  |  Branch (4407:35): [True: 0, False: 17.4k]
  ------------------
 4408|      0|        _Pypegen_stack_overflow(p);
 4409|      0|    }
 4410|  17.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (4410:9): [True: 0, False: 17.4k]
  ------------------
 4411|      0|        p->level--;
 4412|      0|        return NULL;
 4413|      0|    }
 4414|  17.4k|    stmt_ty _res = NULL;
 4415|  17.4k|    int _mark = p->mark;
 4416|  17.4k|    { // decorators class_def_raw
 4417|  17.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (4417:13): [True: 0, False: 17.4k]
  ------------------
 4418|      0|            p->level--;
 4419|      0|            return NULL;
 4420|      0|        }
 4421|  17.4k|        D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
 4422|  17.4k|        asdl_expr_seq* a;
 4423|  17.4k|        stmt_ty b;
 4424|  17.4k|        if (
 4425|  17.4k|            (a = decorators_rule(p))  // decorators
  ------------------
  |  Branch (4425:13): [True: 791, False: 16.6k]
  ------------------
 4426|    791|            &&
 4427|    791|            (b = class_def_raw_rule(p))  // class_def_raw
  ------------------
  |  Branch (4427:13): [True: 709, False: 82]
  ------------------
 4428|  17.4k|        )
 4429|    709|        {
 4430|    709|            D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw"));
 4431|    709|            _res = _PyPegen_class_def_decorators ( p , a , b );
 4432|    709|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4432:18): [True: 0, False: 709]
  |  Branch (4432:34): [True: 0, False: 709]
  |  Branch (4432:57): [True: 0, False: 0]
  ------------------
 4433|      0|                p->error_indicator = 1;
 4434|      0|                p->level--;
 4435|      0|                return NULL;
 4436|      0|            }
 4437|    709|            goto done;
 4438|    709|        }
 4439|  16.7k|        p->mark = _mark;
 4440|  16.7k|        D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ',
 4441|  16.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators class_def_raw"));
 4442|  16.7k|    }
 4443|      0|    { // class_def_raw
 4444|  16.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (4444:13): [True: 4, False: 16.7k]
  ------------------
 4445|      4|            p->level--;
 4446|      4|            return NULL;
 4447|      4|        }
 4448|  16.7k|        D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
 4449|  16.7k|        stmt_ty class_def_raw_var;
 4450|  16.7k|        if (
 4451|  16.7k|            (class_def_raw_var = class_def_raw_rule(p))  // class_def_raw
  ------------------
  |  Branch (4451:13): [True: 16.4k, False: 347]
  ------------------
 4452|  16.7k|        )
 4453|  16.4k|        {
 4454|  16.4k|            D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_def_raw"));
 4455|  16.4k|            _res = class_def_raw_var;
 4456|  16.4k|            goto done;
 4457|  16.4k|        }
 4458|    347|        p->mark = _mark;
 4459|    347|        D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ',
 4460|    347|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_def_raw"));
 4461|    347|    }
 4462|    347|    _res = NULL;
 4463|  17.4k|  done:
 4464|  17.4k|    p->level--;
 4465|  17.4k|    return _res;
 4466|    347|}
parser.c:class_def_raw_rule:
 4473|  17.5k|{
 4474|  17.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  35.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (4474:9): [True: 0, False: 17.5k]
  |  Branch (4474:35): [True: 0, False: 17.5k]
  ------------------
 4475|      0|        _Pypegen_stack_overflow(p);
 4476|      0|    }
 4477|  17.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (4477:9): [True: 0, False: 17.5k]
  ------------------
 4478|      0|        p->level--;
 4479|      0|        return NULL;
 4480|      0|    }
 4481|  17.5k|    stmt_ty _res = NULL;
 4482|  17.5k|    int _mark = p->mark;
 4483|  17.5k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (4483:9): [True: 0, False: 17.5k]
  |  Branch (4483:31): [True: 0, False: 0]
  ------------------
 4484|      0|        p->error_indicator = 1;
 4485|      0|        p->level--;
 4486|      0|        return NULL;
 4487|      0|    }
 4488|  17.5k|    int _start_lineno = p->tokens[_mark]->lineno;
 4489|  17.5k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.5k]
  |  |  ------------------
  ------------------
 4490|  17.5k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 4491|  17.5k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.5k]
  |  |  ------------------
  ------------------
 4492|  17.5k|    if (p->call_invalid_rules) { // invalid_class_def_raw
  ------------------
  |  Branch (4492:9): [True: 2.07k, False: 15.4k]
  ------------------
 4493|  2.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (4493:13): [True: 0, False: 2.07k]
  ------------------
 4494|      0|            p->level--;
 4495|      0|            return NULL;
 4496|      0|        }
 4497|  2.07k|        D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw"));
 4498|  2.07k|        void *invalid_class_def_raw_var;
 4499|  2.07k|        if (
 4500|  2.07k|            (invalid_class_def_raw_var = invalid_class_def_raw_rule(p))  // invalid_class_def_raw
  ------------------
  |  Branch (4500:13): [True: 0, False: 2.07k]
  ------------------
 4501|  2.07k|        )
 4502|      0|        {
 4503|      0|            D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw"));
 4504|      0|            _res = invalid_class_def_raw_var;
 4505|      0|            goto done;
 4506|      0|        }
 4507|  2.07k|        p->mark = _mark;
 4508|  2.07k|        D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
 4509|  2.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_def_raw"));
 4510|  2.07k|    }
 4511|  17.5k|    { // 'class' NAME type_params? ['(' arguments? ')'] ':' block
 4512|  17.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (4512:13): [True: 13, False: 17.5k]
  ------------------
 4513|     13|            p->level--;
 4514|     13|            return NULL;
 4515|     13|        }
 4516|  17.5k|        D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' block"));
 4517|  17.5k|        Token * _keyword;
 4518|  17.5k|        Token * _literal;
 4519|  17.5k|        expr_ty a;
 4520|  17.5k|        void *b;
 4521|  17.5k|        asdl_stmt_seq* c;
 4522|  17.5k|        void *t;
 4523|  17.5k|        if (
 4524|  17.5k|            (_keyword = _PyPegen_expect_token(p, 719))  // token='class'
  ------------------
  |  Branch (4524:13): [True: 17.3k, False: 197]
  ------------------
 4525|  17.3k|            &&
 4526|  17.3k|            (a = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (4526:13): [True: 17.3k, False: 16]
  ------------------
 4527|  17.3k|            &&
 4528|  17.3k|            (t = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (4528:13): [True: 17.3k, False: 7]
  ------------------
 4529|  17.3k|            &&
 4530|  17.3k|            (b = _tmp_25_rule(p), !p->error_indicator)  // ['(' arguments? ')']
  ------------------
  |  Branch (4530:13): [True: 17.3k, False: 1]
  ------------------
 4531|  17.3k|            &&
 4532|  17.3k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (4532:13): [True: 17.2k, False: 87]
  ------------------
 4533|  17.2k|            &&
 4534|  17.2k|            (c = block_rule(p))  // block
  ------------------
  |  Branch (4534:13): [True: 17.1k, False: 108]
  ------------------
 4535|  17.5k|        )
 4536|  17.1k|        {
 4537|  17.1k|            D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' block"));
 4538|  17.1k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 4539|  17.1k|            if (_token == NULL) {
  ------------------
  |  Branch (4539:17): [True: 0, False: 17.1k]
  ------------------
 4540|      0|                p->level--;
 4541|      0|                return NULL;
 4542|      0|            }
 4543|  17.1k|            int _end_lineno = _token->end_lineno;
 4544|  17.1k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.1k]
  |  |  ------------------
  ------------------
 4545|  17.1k|            int _end_col_offset = _token->end_col_offset;
 4546|  17.1k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.1k]
  |  |  ------------------
  ------------------
 4547|  17.1k|            _res = _PyAST_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , t , EXTRA );
  ------------------
  |  |  307|  17.1k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (4547:59): [True: 717, False: 16.4k]
  |  Branch (4547:113): [True: 717, False: 16.4k]
  ------------------
 4548|  17.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (4548:18): [True: 0, False: 17.1k]
  |  Branch (4548:34): [True: 0, False: 17.1k]
  |  Branch (4548:57): [True: 0, False: 0]
  ------------------
 4549|      0|                p->error_indicator = 1;
 4550|      0|                p->level--;
 4551|      0|                return NULL;
 4552|      0|            }
 4553|  17.1k|            goto done;
 4554|  17.1k|        }
 4555|    416|        p->mark = _mark;
 4556|    416|        D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
 4557|    416|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' block"));
 4558|    416|    }
 4559|    416|    _res = NULL;
 4560|  17.5k|  done:
 4561|  17.5k|    p->level--;
 4562|  17.5k|    return _res;
 4563|    416|}
parser.c:invalid_class_def_raw_rule:
25371|  2.07k|{
25372|  2.07k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.15k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25372:9): [True: 0, False: 2.07k]
  |  Branch (25372:35): [True: 0, False: 2.07k]
  ------------------
25373|      0|        _Pypegen_stack_overflow(p);
25374|      0|    }
25375|  2.07k|    if (p->error_indicator) {
  ------------------
  |  Branch (25375:9): [True: 0, False: 2.07k]
  ------------------
25376|      0|        p->level--;
25377|      0|        return NULL;
25378|      0|    }
25379|  2.07k|    void * _res = NULL;
25380|  2.07k|    int _mark = p->mark;
25381|  2.07k|    { // 'class' NAME type_params? ['(' arguments? ')'] NEWLINE
25382|  2.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (25382:13): [True: 0, False: 2.07k]
  ------------------
25383|      0|            p->level--;
25384|      0|            return NULL;
25385|      0|        }
25386|  2.07k|        D(fprintf(stderr, "%*c> invalid_class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] NEWLINE"));
25387|  2.07k|        Token * _keyword;
25388|  2.07k|        void *_opt_var;
25389|  2.07k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  2.07k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.07k]
  |  |  ------------------
  ------------------
25390|  2.07k|        void *_opt_var_1;
25391|  2.07k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  2.07k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.07k]
  |  |  ------------------
  ------------------
25392|  2.07k|        expr_ty name_var;
25393|  2.07k|        Token * newline_var;
25394|  2.07k|        if (
25395|  2.07k|            (_keyword = _PyPegen_expect_token(p, 719))  // token='class'
  ------------------
  |  Branch (25395:13): [True: 1.99k, False: 81]
  ------------------
25396|  1.99k|            &&
25397|  1.99k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (25397:13): [True: 1.99k, False: 7]
  ------------------
25398|  1.99k|            &&
25399|  1.99k|            (_opt_var = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (25399:13): [True: 1.98k, False: 5]
  ------------------
25400|  1.98k|            &&
25401|  1.98k|            (_opt_var_1 = _tmp_25_rule(p), !p->error_indicator)  // ['(' arguments? ')']
  ------------------
  |  Branch (25401:13): [True: 1.98k, False: 1]
  ------------------
25402|  1.98k|            &&
25403|  1.98k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.98k|#define NEWLINE         4
  ------------------
  |  Branch (25403:13): [True: 5, False: 1.97k]
  ------------------
25404|  2.07k|        )
25405|      5|        {
25406|      5|            D(fprintf(stderr, "%*c+ invalid_class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] NEWLINE"));
25407|      5|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      5|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
25408|      5|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25408:18): [True: 5, False: 0]
  |  Branch (25408:34): [True: 0, False: 0]
  |  Branch (25408:57): [True: 5, False: 0]
  ------------------
25409|      5|                p->error_indicator = 1;
25410|      5|                p->level--;
25411|      5|                return NULL;
25412|      5|            }
25413|      0|            goto done;
25414|      5|        }
25415|  2.07k|        p->mark = _mark;
25416|  2.07k|        D(fprintf(stderr, "%*c%s invalid_class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25417|  2.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] NEWLINE"));
25418|  2.07k|    }
25419|      0|    { // 'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT
25420|  2.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (25420:13): [True: 6, False: 2.06k]
  ------------------
25421|      6|            p->level--;
25422|      6|            return NULL;
25423|      6|        }
25424|  2.06k|        D(fprintf(stderr, "%*c> invalid_class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT"));
25425|  2.06k|        Token * _literal;
25426|  2.06k|        void *_opt_var;
25427|  2.06k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  2.06k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.06k]
  |  |  ------------------
  ------------------
25428|  2.06k|        void *_opt_var_1;
25429|  2.06k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  2.06k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.06k]
  |  |  ------------------
  ------------------
25430|  2.06k|        Token * a;
25431|  2.06k|        expr_ty name_var;
25432|  2.06k|        Token * newline_var;
25433|  2.06k|        if (
25434|  2.06k|            (a = _PyPegen_expect_token(p, 719))  // token='class'
  ------------------
  |  Branch (25434:13): [True: 1.98k, False: 81]
  ------------------
25435|  1.98k|            &&
25436|  1.98k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (25436:13): [True: 1.97k, False: 7]
  ------------------
25437|  1.97k|            &&
25438|  1.97k|            (_opt_var = type_params_rule(p), !p->error_indicator)  // type_params?
  ------------------
  |  Branch (25438:13): [True: 1.97k, False: 0]
  ------------------
25439|  1.97k|            &&
25440|  1.97k|            (_opt_var_1 = _tmp_25_rule(p), !p->error_indicator)  // ['(' arguments? ')']
  ------------------
  |  Branch (25440:13): [True: 1.97k, False: 0]
  ------------------
25441|  1.97k|            &&
25442|  1.97k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25442:13): [True: 1.94k, False: 37]
  ------------------
25443|  1.94k|            &&
25444|  1.94k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.94k|#define NEWLINE         4
  ------------------
  |  Branch (25444:13): [True: 504, False: 1.43k]
  ------------------
25445|    504|            &&
25446|    504|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    504|#define INDENT          5
  ------------------
  |  Branch (25446:13): [True: 2, False: 502]
  ------------------
25447|  2.06k|        )
25448|      2|        {
25449|      2|            D(fprintf(stderr, "%*c+ invalid_class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT"));
25450|      2|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after class definition on line %d" , a -> lineno );
  ------------------
  |  |  234|      2|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
25451|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25451:18): [True: 2, False: 0]
  |  Branch (25451:34): [True: 0, False: 0]
  |  Branch (25451:57): [True: 2, False: 0]
  ------------------
25452|      2|                p->error_indicator = 1;
25453|      2|                p->level--;
25454|      2|                return NULL;
25455|      2|            }
25456|      0|            goto done;
25457|      2|        }
25458|  2.06k|        p->mark = _mark;
25459|  2.06k|        D(fprintf(stderr, "%*c%s invalid_class_def_raw[%d-%d]: %s failed!\n", p->level, ' ',
25460|  2.06k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME type_params? ['(' arguments? ')'] ':' NEWLINE !INDENT"));
25461|  2.06k|    }
25462|  2.06k|    _res = NULL;
25463|  2.06k|  done:
25464|  2.06k|    p->level--;
25465|  2.06k|    return _res;
25466|  2.06k|}
parser.c:_tmp_25_rule:
28819|  21.2k|{
28820|  21.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  42.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (28820:9): [True: 0, False: 21.2k]
  |  Branch (28820:35): [True: 0, False: 21.2k]
  ------------------
28821|      0|        _Pypegen_stack_overflow(p);
28822|      0|    }
28823|  21.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (28823:9): [True: 0, False: 21.2k]
  ------------------
28824|      0|        p->level--;
28825|      0|        return NULL;
28826|      0|    }
28827|  21.2k|    void * _res = NULL;
28828|  21.2k|    int _mark = p->mark;
28829|  21.2k|    { // '(' arguments? ')'
28830|  21.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (28830:13): [True: 0, False: 21.2k]
  ------------------
28831|      0|            p->level--;
28832|      0|            return NULL;
28833|      0|        }
28834|  21.2k|        D(fprintf(stderr, "%*c> _tmp_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
28835|  21.2k|        Token * _literal;
28836|  21.2k|        Token * _literal_1;
28837|  21.2k|        void *z;
28838|  21.2k|        if (
28839|  21.2k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (28839:13): [True: 3.70k, False: 17.5k]
  ------------------
28840|  3.70k|            &&
28841|  3.70k|            (z = arguments_rule(p), !p->error_indicator)  // arguments?
  ------------------
  |  Branch (28841:13): [True: 3.70k, False: 2]
  ------------------
28842|  3.70k|            &&
28843|  3.70k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (28843:13): [True: 3.69k, False: 13]
  ------------------
28844|  21.2k|        )
28845|  3.69k|        {
28846|  3.69k|            D(fprintf(stderr, "%*c+ _tmp_25[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'"));
28847|  3.69k|            _res = z;
28848|  3.69k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (28848:18): [True: 2.66k, False: 1.02k]
  |  Branch (28848:34): [True: 0, False: 1.02k]
  |  Branch (28848:57): [True: 0, False: 2.66k]
  ------------------
28849|      0|                p->error_indicator = 1;
28850|      0|                p->level--;
28851|      0|                return NULL;
28852|      0|            }
28853|  3.69k|            goto done;
28854|  3.69k|        }
28855|  17.5k|        p->mark = _mark;
28856|  17.5k|        D(fprintf(stderr, "%*c%s _tmp_25[%d-%d]: %s failed!\n", p->level, ' ',
28857|  17.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'"));
28858|  17.5k|    }
28859|  17.5k|    _res = NULL;
28860|  21.2k|  done:
28861|  21.2k|    p->level--;
28862|  21.2k|    return _res;
28863|  17.5k|}
parser.c:_tmp_8_rule:
27808|   179k|{
27809|   179k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   359k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27809:9): [True: 0, False: 179k]
  |  Branch (27809:35): [True: 0, False: 179k]
  ------------------
27810|      0|        _Pypegen_stack_overflow(p);
27811|      0|    }
27812|   179k|    if (p->error_indicator) {
  ------------------
  |  Branch (27812:9): [True: 0, False: 179k]
  ------------------
27813|      0|        p->level--;
27814|      0|        return NULL;
27815|      0|    }
27816|   179k|    void * _res = NULL;
27817|   179k|    int _mark = p->mark;
27818|   179k|    { // 'with'
27819|   179k|        if (p->error_indicator) {
  ------------------
  |  Branch (27819:13): [True: 0, False: 179k]
  ------------------
27820|      0|            p->level--;
27821|      0|            return NULL;
27822|      0|        }
27823|   179k|        D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'"));
27824|   179k|        Token * _keyword;
27825|   179k|        if (
27826|   179k|            (_keyword = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (27826:13): [True: 2.37k, False: 177k]
  ------------------
27827|   179k|        )
27828|  2.37k|        {
27829|  2.37k|            D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'"));
27830|  2.37k|            _res = _keyword;
27831|  2.37k|            goto done;
27832|  2.37k|        }
27833|   177k|        p->mark = _mark;
27834|   177k|        D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ',
27835|   177k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'"));
27836|   177k|    }
27837|      0|    { // 'async'
27838|   177k|        if (p->error_indicator) {
  ------------------
  |  Branch (27838:13): [True: 0, False: 177k]
  ------------------
27839|      0|            p->level--;
27840|      0|            return NULL;
27841|      0|        }
27842|   177k|        D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'"));
27843|   177k|        Token * _keyword;
27844|   177k|        if (
27845|   177k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (27845:13): [True: 4.54k, False: 172k]
  ------------------
27846|   177k|        )
27847|  4.54k|        {
27848|  4.54k|            D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'"));
27849|  4.54k|            _res = _keyword;
27850|  4.54k|            goto done;
27851|  4.54k|        }
27852|   172k|        p->mark = _mark;
27853|   172k|        D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ',
27854|   172k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'"));
27855|   172k|    }
27856|   172k|    _res = NULL;
27857|   179k|  done:
27858|   179k|    p->level--;
27859|   179k|    return _res;
27860|   172k|}
parser.c:with_stmt_rule:
 6680|  6.92k|{
 6681|  6.92k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  13.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6681:9): [True: 0, False: 6.92k]
  |  Branch (6681:35): [True: 0, False: 6.92k]
  ------------------
 6682|      0|        _Pypegen_stack_overflow(p);
 6683|      0|    }
 6684|  6.92k|    if (p->error_indicator) {
  ------------------
  |  Branch (6684:9): [True: 0, False: 6.92k]
  ------------------
 6685|      0|        p->level--;
 6686|      0|        return NULL;
 6687|      0|    }
 6688|  6.92k|    stmt_ty _res = NULL;
 6689|  6.92k|    int _mark = p->mark;
 6690|  6.92k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (6690:9): [True: 0, False: 6.92k]
  |  Branch (6690:31): [True: 0, False: 0]
  ------------------
 6691|      0|        p->error_indicator = 1;
 6692|      0|        p->level--;
 6693|      0|        return NULL;
 6694|      0|    }
 6695|  6.92k|    int _start_lineno = p->tokens[_mark]->lineno;
 6696|  6.92k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.92k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.92k]
  |  |  ------------------
  ------------------
 6697|  6.92k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 6698|  6.92k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  6.92k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.92k]
  |  |  ------------------
  ------------------
 6699|  6.92k|    if (p->call_invalid_rules) { // invalid_with_stmt_indent
  ------------------
  |  Branch (6699:9): [True: 1.72k, False: 5.20k]
  ------------------
 6700|  1.72k|        if (p->error_indicator) {
  ------------------
  |  Branch (6700:13): [True: 0, False: 1.72k]
  ------------------
 6701|      0|            p->level--;
 6702|      0|            return NULL;
 6703|      0|        }
 6704|  1.72k|        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent"));
 6705|  1.72k|        void *invalid_with_stmt_indent_var;
 6706|  1.72k|        if (
 6707|  1.72k|            (invalid_with_stmt_indent_var = invalid_with_stmt_indent_rule(p))  // invalid_with_stmt_indent
  ------------------
  |  Branch (6707:13): [True: 0, False: 1.72k]
  ------------------
 6708|  1.72k|        )
 6709|      0|        {
 6710|      0|            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent"));
 6711|      0|            _res = invalid_with_stmt_indent_var;
 6712|      0|            goto done;
 6713|      0|        }
 6714|  1.72k|        p->mark = _mark;
 6715|  1.72k|        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6716|  1.72k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt_indent"));
 6717|  1.72k|    }
 6718|  6.92k|    { // 'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block
 6719|  6.92k|        if (p->error_indicator) {
  ------------------
  |  Branch (6719:13): [True: 30, False: 6.89k]
  ------------------
 6720|     30|            p->level--;
 6721|     30|            return NULL;
 6722|     30|        }
 6723|  6.89k|        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block"));
 6724|  6.89k|        Token * _keyword;
 6725|  6.89k|        Token * _literal;
 6726|  6.89k|        Token * _literal_1;
 6727|  6.89k|        Token * _literal_2;
 6728|  6.89k|        void *_opt_var;
 6729|  6.89k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  6.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.89k]
  |  |  ------------------
  ------------------
 6730|  6.89k|        asdl_withitem_seq* a;
 6731|  6.89k|        asdl_stmt_seq* b;
 6732|  6.89k|        void *tc;
 6733|  6.89k|        if (
 6734|  6.89k|            (_keyword = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (6734:13): [True: 2.35k, False: 4.54k]
  ------------------
 6735|  2.35k|            &&
 6736|  2.35k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (6736:13): [True: 1.78k, False: 571]
  ------------------
 6737|  1.78k|            &&
 6738|  1.78k|            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
  ------------------
  |  Branch (6738:13): [True: 1.73k, False: 43]
  ------------------
 6739|  1.73k|            &&
 6740|  1.73k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (6740:13): [True: 1.73k, False: 1]
  ------------------
 6741|  1.73k|            &&
 6742|  1.73k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (6742:13): [True: 1.68k, False: 57]
  ------------------
 6743|  1.68k|            &&
 6744|  1.68k|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6744:13): [True: 1.65k, False: 25]
  ------------------
 6745|  1.65k|            &&
 6746|  1.65k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  1.65k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (6746:13): [True: 1.65k, False: 1]
  ------------------
 6747|  1.65k|            &&
 6748|  1.65k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6748:13): [True: 1.63k, False: 22]
  ------------------
 6749|  6.89k|        )
 6750|  1.63k|        {
 6751|  1.63k|            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block"));
 6752|  1.63k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6753|  1.63k|            if (_token == NULL) {
  ------------------
  |  Branch (6753:17): [True: 0, False: 1.63k]
  ------------------
 6754|      0|                p->level--;
 6755|      0|                return NULL;
 6756|      0|            }
 6757|  1.63k|            int _end_lineno = _token->end_lineno;
 6758|  1.63k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.63k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.63k]
  |  |  ------------------
  ------------------
 6759|  1.63k|            int _end_col_offset = _token->end_col_offset;
 6760|  1.63k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.63k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.63k]
  |  |  ------------------
  ------------------
 6761|  1.63k|            _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
  ------------------
  |  |  307|  1.63k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6762|  1.63k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6762:18): [True: 0, False: 1.63k]
  |  Branch (6762:34): [True: 0, False: 1.63k]
  |  Branch (6762:57): [True: 0, False: 0]
  ------------------
 6763|      0|                p->error_indicator = 1;
 6764|      0|                p->level--;
 6765|      0|                return NULL;
 6766|      0|            }
 6767|  1.63k|            goto done;
 6768|  1.63k|        }
 6769|  5.26k|        p->mark = _mark;
 6770|  5.26k|        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6771|  5.26k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' TYPE_COMMENT? block"));
 6772|  5.26k|    }
 6773|      0|    { // 'with' ','.with_item+ ':' TYPE_COMMENT? block
 6774|  5.26k|        if (p->error_indicator) {
  ------------------
  |  Branch (6774:13): [True: 10, False: 5.25k]
  ------------------
 6775|     10|            p->level--;
 6776|     10|            return NULL;
 6777|     10|        }
 6778|  5.25k|        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
 6779|  5.25k|        Token * _keyword;
 6780|  5.25k|        Token * _literal;
 6781|  5.25k|        asdl_withitem_seq* a;
 6782|  5.25k|        asdl_stmt_seq* b;
 6783|  5.25k|        void *tc;
 6784|  5.25k|        if (
 6785|  5.25k|            (_keyword = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (6785:13): [True: 710, False: 4.54k]
  ------------------
 6786|    710|            &&
 6787|    710|            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
  ------------------
  |  Branch (6787:13): [True: 632, False: 78]
  ------------------
 6788|    632|            &&
 6789|    632|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6789:13): [True: 555, False: 77]
  ------------------
 6790|    555|            &&
 6791|    555|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|    555|#define TYPE_COMMENT    57
  ------------------
  |  Branch (6791:13): [True: 554, False: 1]
  ------------------
 6792|    554|            &&
 6793|    554|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6793:13): [True: 501, False: 53]
  ------------------
 6794|  5.25k|        )
 6795|    501|        {
 6796|    501|            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
 6797|    501|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6798|    501|            if (_token == NULL) {
  ------------------
  |  Branch (6798:17): [True: 0, False: 501]
  ------------------
 6799|      0|                p->level--;
 6800|      0|                return NULL;
 6801|      0|            }
 6802|    501|            int _end_lineno = _token->end_lineno;
 6803|    501|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    501|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 501]
  |  |  ------------------
  ------------------
 6804|    501|            int _end_col_offset = _token->end_col_offset;
 6805|    501|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    501|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 501]
  |  |  ------------------
  ------------------
 6806|    501|            _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
  ------------------
  |  |  307|    501|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6807|    501|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6807:18): [True: 0, False: 501]
  |  Branch (6807:34): [True: 0, False: 501]
  |  Branch (6807:57): [True: 0, False: 0]
  ------------------
 6808|      0|                p->error_indicator = 1;
 6809|      0|                p->level--;
 6810|      0|                return NULL;
 6811|      0|            }
 6812|    501|            goto done;
 6813|    501|        }
 6814|  4.75k|        p->mark = _mark;
 6815|  4.75k|        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6816|  4.75k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block"));
 6817|  4.75k|    }
 6818|      0|    { // 'async' 'with' '(' ','.with_item+ ','? ')' ':' block
 6819|  4.75k|        if (p->error_indicator) {
  ------------------
  |  Branch (6819:13): [True: 17, False: 4.73k]
  ------------------
 6820|     17|            p->level--;
 6821|     17|            return NULL;
 6822|     17|        }
 6823|  4.73k|        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'with' '(' ','.with_item+ ','? ')' ':' block"));
 6824|  4.73k|        Token * _keyword;
 6825|  4.73k|        Token * _keyword_1;
 6826|  4.73k|        Token * _literal;
 6827|  4.73k|        Token * _literal_1;
 6828|  4.73k|        Token * _literal_2;
 6829|  4.73k|        void *_opt_var;
 6830|  4.73k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  4.73k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.73k]
  |  |  ------------------
  ------------------
 6831|  4.73k|        asdl_withitem_seq* a;
 6832|  4.73k|        asdl_stmt_seq* b;
 6833|  4.73k|        if (
 6834|  4.73k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (6834:13): [True: 4.54k, False: 192]
  ------------------
 6835|  4.54k|            &&
 6836|  4.54k|            (_keyword_1 = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (6836:13): [True: 3.70k, False: 842]
  ------------------
 6837|  3.70k|            &&
 6838|  3.70k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (6838:13): [True: 36, False: 3.66k]
  ------------------
 6839|     36|            &&
 6840|     36|            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
  ------------------
  |  Branch (6840:13): [True: 33, False: 3]
  ------------------
 6841|     33|            &&
 6842|     33|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (6842:13): [True: 31, False: 2]
  ------------------
 6843|     31|            &&
 6844|     31|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (6844:13): [True: 25, False: 6]
  ------------------
 6845|     25|            &&
 6846|     25|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6846:13): [True: 22, False: 3]
  ------------------
 6847|     22|            &&
 6848|     22|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6848:13): [True: 19, False: 3]
  ------------------
 6849|  4.73k|        )
 6850|     19|        {
 6851|     19|            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'with' '(' ','.with_item+ ','? ')' ':' block"));
 6852|     19|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6853|     19|            if (_token == NULL) {
  ------------------
  |  Branch (6853:17): [True: 0, False: 19]
  ------------------
 6854|      0|                p->level--;
 6855|      0|                return NULL;
 6856|      0|            }
 6857|     19|            int _end_lineno = _token->end_lineno;
 6858|     19|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     19|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19]
  |  |  ------------------
  ------------------
 6859|     19|            int _end_col_offset = _token->end_col_offset;
 6860|     19|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     19|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19]
  |  |  ------------------
  ------------------
 6861|     19|            _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NULL , EXTRA ) );
  ------------------
  |  |  345|     19|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 6862|     19|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6862:18): [True: 0, False: 19]
  |  Branch (6862:34): [True: 0, False: 19]
  |  Branch (6862:57): [True: 0, False: 0]
  ------------------
 6863|      0|                p->error_indicator = 1;
 6864|      0|                p->level--;
 6865|      0|                return NULL;
 6866|      0|            }
 6867|     19|            goto done;
 6868|     19|        }
 6869|  4.71k|        p->mark = _mark;
 6870|  4.71k|        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6871|  4.71k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'with' '(' ','.with_item+ ','? ')' ':' block"));
 6872|  4.71k|    }
 6873|      0|    { // 'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block
 6874|  4.71k|        if (p->error_indicator) {
  ------------------
  |  Branch (6874:13): [True: 6, False: 4.71k]
  ------------------
 6875|      6|            p->level--;
 6876|      6|            return NULL;
 6877|      6|        }
 6878|  4.71k|        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
 6879|  4.71k|        Token * _keyword;
 6880|  4.71k|        Token * _keyword_1;
 6881|  4.71k|        Token * _literal;
 6882|  4.71k|        asdl_withitem_seq* a;
 6883|  4.71k|        asdl_stmt_seq* b;
 6884|  4.71k|        void *tc;
 6885|  4.71k|        if (
 6886|  4.71k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (6886:13): [True: 4.51k, False: 192]
  ------------------
 6887|  4.51k|            &&
 6888|  4.51k|            (_keyword_1 = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (6888:13): [True: 3.67k, False: 842]
  ------------------
 6889|  3.67k|            &&
 6890|  3.67k|            (a = (asdl_withitem_seq*)_gather_34_rule(p))  // ','.with_item+
  ------------------
  |  Branch (6890:13): [True: 3.66k, False: 10]
  ------------------
 6891|  3.66k|            &&
 6892|  3.66k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6892:13): [True: 3.62k, False: 40]
  ------------------
 6893|  3.62k|            &&
 6894|  3.62k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  3.62k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (6894:13): [True: 3.62k, False: 2]
  ------------------
 6895|  3.62k|            &&
 6896|  3.62k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6896:13): [True: 3.59k, False: 26]
  ------------------
 6897|  4.71k|        )
 6898|  3.59k|        {
 6899|  3.59k|            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
 6900|  3.59k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6901|  3.59k|            if (_token == NULL) {
  ------------------
  |  Branch (6901:17): [True: 0, False: 3.59k]
  ------------------
 6902|      0|                p->level--;
 6903|      0|                return NULL;
 6904|      0|            }
 6905|  3.59k|            int _end_lineno = _token->end_lineno;
 6906|  3.59k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.59k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.59k]
  |  |  ------------------
  ------------------
 6907|  3.59k|            int _end_col_offset = _token->end_col_offset;
 6908|  3.59k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.59k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.59k]
  |  |  ------------------
  ------------------
 6909|  3.59k|            _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
  ------------------
  |  |  345|  3.59k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 6910|  3.59k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6910:18): [True: 0, False: 3.59k]
  |  Branch (6910:34): [True: 0, False: 3.59k]
  |  Branch (6910:57): [True: 0, False: 0]
  ------------------
 6911|      0|                p->error_indicator = 1;
 6912|      0|                p->level--;
 6913|      0|                return NULL;
 6914|      0|            }
 6915|  3.59k|            goto done;
 6916|  3.59k|        }
 6917|  1.11k|        p->mark = _mark;
 6918|  1.11k|        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6919|  1.11k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'with' ','.with_item+ ':' TYPE_COMMENT? block"));
 6920|  1.11k|    }
 6921|  1.11k|    if (p->call_invalid_rules) { // invalid_with_stmt
  ------------------
  |  Branch (6921:9): [True: 381, False: 731]
  ------------------
 6922|    381|        if (p->error_indicator) {
  ------------------
  |  Branch (6922:13): [True: 7, False: 374]
  ------------------
 6923|      7|            p->level--;
 6924|      7|            return NULL;
 6925|      7|        }
 6926|    374|        D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt"));
 6927|    374|        void *invalid_with_stmt_var;
 6928|    374|        if (
 6929|    374|            (invalid_with_stmt_var = invalid_with_stmt_rule(p))  // invalid_with_stmt
  ------------------
  |  Branch (6929:13): [True: 0, False: 374]
  ------------------
 6930|    374|        )
 6931|      0|        {
 6932|      0|            D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt"));
 6933|      0|            _res = invalid_with_stmt_var;
 6934|      0|            goto done;
 6935|      0|        }
 6936|    374|        p->mark = _mark;
 6937|    374|        D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6938|    374|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt"));
 6939|    374|    }
 6940|  1.10k|    _res = NULL;
 6941|  6.85k|  done:
 6942|  6.85k|    p->level--;
 6943|  6.85k|    return _res;
 6944|  1.10k|}
parser.c:invalid_with_stmt_indent_rule:
23492|  1.72k|{
23493|  1.72k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.44k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23493:9): [True: 0, False: 1.72k]
  |  Branch (23493:35): [True: 0, False: 1.72k]
  ------------------
23494|      0|        _Pypegen_stack_overflow(p);
23495|      0|    }
23496|  1.72k|    if (p->error_indicator) {
  ------------------
  |  Branch (23496:9): [True: 0, False: 1.72k]
  ------------------
23497|      0|        p->level--;
23498|      0|        return NULL;
23499|      0|    }
23500|  1.72k|    void * _res = NULL;
23501|  1.72k|    int _mark = p->mark;
23502|  1.72k|    { // 'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT
23503|  1.72k|        if (p->error_indicator) {
  ------------------
  |  Branch (23503:13): [True: 0, False: 1.72k]
  ------------------
23504|      0|            p->level--;
23505|      0|            return NULL;
23506|      0|        }
23507|  1.72k|        D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT"));
23508|  1.72k|        asdl_seq * _gather_139_var;
23509|  1.72k|        Token * _literal;
23510|  1.72k|        void *_opt_var;
23511|  1.72k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  1.72k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.72k]
  |  |  ------------------
  ------------------
23512|  1.72k|        Token * a;
23513|  1.72k|        Token * newline_var;
23514|  1.72k|        if (
23515|  1.72k|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (23515:13): [True: 1.72k, False: 0]
  ------------------
23516|  1.72k|            &&
23517|  1.72k|            (a = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (23517:13): [True: 1.45k, False: 271]
  ------------------
23518|  1.45k|            &&
23519|  1.45k|            (_gather_139_var = _gather_139_rule(p))  // ','.(expression ['as' star_target])+
  ------------------
  |  Branch (23519:13): [True: 1.39k, False: 52]
  ------------------
23520|  1.39k|            &&
23521|  1.39k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23521:13): [True: 1.34k, False: 56]
  ------------------
23522|  1.34k|            &&
23523|  1.34k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.34k|#define NEWLINE         4
  ------------------
  |  Branch (23523:13): [True: 48, False: 1.29k]
  ------------------
23524|     48|            &&
23525|     48|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|     48|#define INDENT          5
  ------------------
  |  Branch (23525:13): [True: 6, False: 42]
  ------------------
23526|  1.72k|        )
23527|      6|        {
23528|      6|            D(fprintf(stderr, "%*c+ invalid_with_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT"));
23529|      6|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      6|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
23530|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23530:18): [True: 6, False: 0]
  |  Branch (23530:34): [True: 0, False: 0]
  |  Branch (23530:57): [True: 6, False: 0]
  ------------------
23531|      6|                p->error_indicator = 1;
23532|      6|                p->level--;
23533|      6|                return NULL;
23534|      6|            }
23535|      0|            goto done;
23536|      6|        }
23537|  1.71k|        p->mark = _mark;
23538|  1.71k|        D(fprintf(stderr, "%*c%s invalid_with_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
23539|  1.71k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT"));
23540|  1.71k|    }
23541|      0|    { // 'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT
23542|  1.71k|        if (p->error_indicator) {
  ------------------
  |  Branch (23542:13): [True: 8, False: 1.70k]
  ------------------
23543|      8|            p->level--;
23544|      8|            return NULL;
23545|      8|        }
23546|  1.70k|        D(fprintf(stderr, "%*c> invalid_with_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT"));
23547|  1.70k|        asdl_seq * _gather_141_var;
23548|  1.70k|        Token * _literal;
23549|  1.70k|        Token * _literal_1;
23550|  1.70k|        Token * _literal_2;
23551|  1.70k|        void *_opt_var;
23552|  1.70k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  1.70k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.70k]
  |  |  ------------------
  ------------------
23553|  1.70k|        void *_opt_var_1;
23554|  1.70k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  1.70k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.70k]
  |  |  ------------------
  ------------------
23555|  1.70k|        Token * a;
23556|  1.70k|        Token * newline_var;
23557|  1.70k|        if (
23558|  1.70k|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (23558:13): [True: 1.70k, False: 0]
  ------------------
23559|  1.70k|            &&
23560|  1.70k|            (a = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (23560:13): [True: 1.43k, False: 271]
  ------------------
23561|  1.43k|            &&
23562|  1.43k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (23562:13): [True: 711, False: 726]
  ------------------
23563|    711|            &&
23564|    711|            (_gather_141_var = _gather_141_rule(p))  // ','.(expressions ['as' star_target])+
  ------------------
  |  Branch (23564:13): [True: 692, False: 19]
  ------------------
23565|    692|            &&
23566|    692|            (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (23566:13): [True: 678, False: 14]
  ------------------
23567|    678|            &&
23568|    678|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (23568:13): [True: 661, False: 17]
  ------------------
23569|    661|            &&
23570|    661|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23570:13): [True: 646, False: 15]
  ------------------
23571|    646|            &&
23572|    646|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    646|#define NEWLINE         4
  ------------------
  |  Branch (23572:13): [True: 23, False: 623]
  ------------------
23573|     23|            &&
23574|     23|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|     23|#define INDENT          5
  ------------------
  |  Branch (23574:13): [True: 2, False: 21]
  ------------------
23575|  1.70k|        )
23576|      2|        {
23577|      2|            D(fprintf(stderr, "%*c+ invalid_with_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT"));
23578|      2|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'with' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      2|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
23579|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23579:18): [True: 2, False: 0]
  |  Branch (23579:34): [True: 0, False: 0]
  |  Branch (23579:57): [True: 2, False: 0]
  ------------------
23580|      2|                p->error_indicator = 1;
23581|      2|                p->level--;
23582|      2|                return NULL;
23583|      2|            }
23584|      0|            goto done;
23585|      2|        }
23586|  1.70k|        p->mark = _mark;
23587|  1.70k|        D(fprintf(stderr, "%*c%s invalid_with_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
23588|  1.70k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT"));
23589|  1.70k|    }
23590|  1.70k|    _res = NULL;
23591|  1.70k|  done:
23592|  1.70k|    p->level--;
23593|  1.70k|    return _res;
23594|  1.70k|}
parser.c:_gather_139_rule:
35919|  1.65k|{
35920|  1.65k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.31k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35920:9): [True: 0, False: 1.65k]
  |  Branch (35920:35): [True: 0, False: 1.65k]
  ------------------
35921|      0|        _Pypegen_stack_overflow(p);
35922|      0|    }
35923|  1.65k|    if (p->error_indicator) {
  ------------------
  |  Branch (35923:9): [True: 0, False: 1.65k]
  ------------------
35924|      0|        p->level--;
35925|      0|        return NULL;
35926|      0|    }
35927|  1.65k|    asdl_seq * _res = NULL;
35928|  1.65k|    int _mark = p->mark;
35929|  1.65k|    { // (expression ['as' star_target]) _loop0_138
35930|  1.65k|        if (p->error_indicator) {
  ------------------
  |  Branch (35930:13): [True: 0, False: 1.65k]
  ------------------
35931|      0|            p->level--;
35932|      0|            return NULL;
35933|      0|        }
35934|  1.65k|        D(fprintf(stderr, "%*c> _gather_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_138"));
35935|  1.65k|        void *elem;
35936|  1.65k|        asdl_seq * seq;
35937|  1.65k|        if (
35938|  1.65k|            (elem = _tmp_174_rule(p))  // expression ['as' star_target]
  ------------------
  |  Branch (35938:13): [True: 1.54k, False: 114]
  ------------------
35939|  1.54k|            &&
35940|  1.54k|            (seq = _loop0_138_rule(p))  // _loop0_138
  ------------------
  |  Branch (35940:13): [True: 1.54k, False: 0]
  ------------------
35941|  1.65k|        )
35942|  1.54k|        {
35943|  1.54k|            D(fprintf(stderr, "%*c+ _gather_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expression ['as' star_target]) _loop0_138"));
35944|  1.54k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
35945|  1.54k|            goto done;
35946|  1.54k|        }
35947|    114|        p->mark = _mark;
35948|    114|        D(fprintf(stderr, "%*c%s _gather_139[%d-%d]: %s failed!\n", p->level, ' ',
35949|    114|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expression ['as' star_target]) _loop0_138"));
35950|    114|    }
35951|    114|    _res = NULL;
35952|  1.65k|  done:
35953|  1.65k|    p->level--;
35954|  1.65k|    return _res;
35955|    114|}
parser.c:_tmp_174_rule:
37949|  4.01k|{
37950|  4.01k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.02k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37950:9): [True: 0, False: 4.01k]
  |  Branch (37950:35): [True: 0, False: 4.01k]
  ------------------
37951|      0|        _Pypegen_stack_overflow(p);
37952|      0|    }
37953|  4.01k|    if (p->error_indicator) {
  ------------------
  |  Branch (37953:9): [True: 0, False: 4.01k]
  ------------------
37954|      0|        p->level--;
37955|      0|        return NULL;
37956|      0|    }
37957|  4.01k|    void * _res = NULL;
37958|  4.01k|    int _mark = p->mark;
37959|  4.01k|    { // expression ['as' star_target]
37960|  4.01k|        if (p->error_indicator) {
  ------------------
  |  Branch (37960:13): [True: 0, False: 4.01k]
  ------------------
37961|      0|            p->level--;
37962|      0|            return NULL;
37963|      0|        }
37964|  4.01k|        D(fprintf(stderr, "%*c> _tmp_174[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]"));
37965|  4.01k|        void *_opt_var;
37966|  4.01k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  4.01k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.01k]
  |  |  ------------------
  ------------------
37967|  4.01k|        expr_ty expression_var;
37968|  4.01k|        if (
37969|  4.01k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (37969:13): [True: 3.87k, False: 140]
  ------------------
37970|  3.87k|            &&
37971|  3.87k|            (_opt_var = _tmp_178_rule(p), !p->error_indicator)  // ['as' star_target]
  ------------------
  |  Branch (37971:13): [True: 3.86k, False: 2]
  ------------------
37972|  4.01k|        )
37973|  3.86k|        {
37974|  3.86k|            D(fprintf(stderr, "%*c+ _tmp_174[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' star_target]"));
37975|  3.86k|            _res = _PyPegen_dummy_name(p, expression_var, _opt_var);
37976|  3.86k|            goto done;
37977|  3.86k|        }
37978|    142|        p->mark = _mark;
37979|    142|        D(fprintf(stderr, "%*c%s _tmp_174[%d-%d]: %s failed!\n", p->level, ' ',
37980|    142|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' star_target]"));
37981|    142|    }
37982|    142|    _res = NULL;
37983|  4.01k|  done:
37984|  4.01k|    p->level--;
37985|  4.01k|    return _res;
37986|    142|}
parser.c:_tmp_178_rule:
38133|  4.85k|{
38134|  4.85k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.71k|#  define MAXSTACK 6000
  ------------------
  |  Branch (38134:9): [True: 0, False: 4.85k]
  |  Branch (38134:35): [True: 0, False: 4.85k]
  ------------------
38135|      0|        _Pypegen_stack_overflow(p);
38136|      0|    }
38137|  4.85k|    if (p->error_indicator) {
  ------------------
  |  Branch (38137:9): [True: 0, False: 4.85k]
  ------------------
38138|      0|        p->level--;
38139|      0|        return NULL;
38140|      0|    }
38141|  4.85k|    void * _res = NULL;
38142|  4.85k|    int _mark = p->mark;
38143|  4.85k|    { // 'as' star_target
38144|  4.85k|        if (p->error_indicator) {
  ------------------
  |  Branch (38144:13): [True: 0, False: 4.85k]
  ------------------
38145|      0|            p->level--;
38146|      0|            return NULL;
38147|      0|        }
38148|  4.85k|        D(fprintf(stderr, "%*c> _tmp_178[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
38149|  4.85k|        Token * _keyword;
38150|  4.85k|        expr_ty star_target_var;
38151|  4.85k|        if (
38152|  4.85k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (38152:13): [True: 310, False: 4.54k]
  ------------------
38153|    310|            &&
38154|    310|            (star_target_var = star_target_rule(p))  // star_target
  ------------------
  |  Branch (38154:13): [True: 301, False: 9]
  ------------------
38155|  4.85k|        )
38156|    301|        {
38157|    301|            D(fprintf(stderr, "%*c+ _tmp_178[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' star_target"));
38158|    301|            _res = _PyPegen_dummy_name(p, _keyword, star_target_var);
38159|    301|            goto done;
38160|    301|        }
38161|  4.55k|        p->mark = _mark;
38162|  4.55k|        D(fprintf(stderr, "%*c%s _tmp_178[%d-%d]: %s failed!\n", p->level, ' ',
38163|  4.55k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' star_target"));
38164|  4.55k|    }
38165|  4.55k|    _res = NULL;
38166|  4.85k|  done:
38167|  4.85k|    p->level--;
38168|  4.85k|    return _res;
38169|  4.55k|}
parser.c:_loop0_138_rule:
35843|  1.54k|{
35844|  1.54k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.08k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35844:9): [True: 0, False: 1.54k]
  |  Branch (35844:35): [True: 0, False: 1.54k]
  ------------------
35845|      0|        _Pypegen_stack_overflow(p);
35846|      0|    }
35847|  1.54k|    if (p->error_indicator) {
  ------------------
  |  Branch (35847:9): [True: 0, False: 1.54k]
  ------------------
35848|      0|        p->level--;
35849|      0|        return NULL;
35850|      0|    }
35851|  1.54k|    void *_res = NULL;
35852|  1.54k|    int _mark = p->mark;
35853|  1.54k|    void **_children = PyMem_Malloc(sizeof(void *));
35854|  1.54k|    if (!_children) {
  ------------------
  |  Branch (35854:9): [True: 0, False: 1.54k]
  ------------------
35855|      0|        p->error_indicator = 1;
35856|      0|        PyErr_NoMemory();
35857|      0|        p->level--;
35858|      0|        return NULL;
35859|      0|    }
35860|  1.54k|    Py_ssize_t _children_capacity = 1;
35861|  1.54k|    Py_ssize_t _n = 0;
35862|  1.54k|    { // ',' (expression ['as' star_target])
35863|  1.54k|        if (p->error_indicator) {
  ------------------
  |  Branch (35863:13): [True: 0, False: 1.54k]
  ------------------
35864|      0|            p->level--;
35865|      0|            return NULL;
35866|      0|        }
35867|  1.54k|        D(fprintf(stderr, "%*c> _loop0_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expression ['as' star_target])"));
35868|  1.54k|        Token * _literal;
35869|  1.54k|        void *elem;
35870|  1.54k|        while (
35871|  3.86k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35871:13): [True: 2.35k, False: 1.51k]
  ------------------
35872|  2.35k|            &&
35873|  2.35k|            (elem = _tmp_174_rule(p))  // expression ['as' star_target]
  ------------------
  |  Branch (35873:13): [True: 2.32k, False: 28]
  ------------------
35874|  1.54k|        )
35875|  2.32k|        {
35876|  2.32k|            _res = elem;
35877|  2.32k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (35877:18): [True: 0, False: 2.32k]
  |  Branch (35877:34): [True: 0, False: 2.32k]
  |  Branch (35877:57): [True: 0, False: 0]
  ------------------
35878|      0|                p->error_indicator = 1;
35879|      0|                PyMem_Free(_children);
35880|      0|                p->level--;
35881|      0|                return NULL;
35882|      0|            }
35883|  2.32k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (35883:17): [True: 1.11k, False: 1.20k]
  ------------------
35884|  1.11k|                _children_capacity *= 2;
35885|  1.11k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
35886|  1.11k|                if (!_new_children) {
  ------------------
  |  Branch (35886:21): [True: 0, False: 1.11k]
  ------------------
35887|      0|                    PyMem_Free(_children);
35888|      0|                    p->error_indicator = 1;
35889|      0|                    PyErr_NoMemory();
35890|      0|                    p->level--;
35891|      0|                    return NULL;
35892|      0|                }
35893|  1.11k|                _children = _new_children;
35894|  1.11k|            }
35895|  2.32k|            _children[_n++] = _res;
35896|  2.32k|            _mark = p->mark;
35897|  2.32k|        }
35898|  1.54k|        p->mark = _mark;
35899|  1.54k|        D(fprintf(stderr, "%*c%s _loop0_138[%d-%d]: %s failed!\n", p->level, ' ',
35900|  1.54k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expression ['as' star_target])"));
35901|  1.54k|    }
35902|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
35903|  1.54k|    if (!_seq) {
  ------------------
  |  Branch (35903:9): [True: 0, False: 1.54k]
  ------------------
35904|      0|        PyMem_Free(_children);
35905|      0|        p->error_indicator = 1;
35906|      0|        PyErr_NoMemory();
35907|      0|        p->level--;
35908|      0|        return NULL;
35909|      0|    }
35910|  3.86k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  2.32k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.86k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (35910:28): [True: 2.32k, False: 1.54k]
  ------------------
35911|  1.54k|    PyMem_Free(_children);
35912|  1.54k|    p->level--;
35913|  1.54k|    return _seq;
35914|  1.54k|}
parser.c:_gather_141_rule:
36036|    749|{
36037|    749|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.49k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36037:9): [True: 0, False: 749]
  |  Branch (36037:35): [True: 0, False: 749]
  ------------------
36038|      0|        _Pypegen_stack_overflow(p);
36039|      0|    }
36040|    749|    if (p->error_indicator) {
  ------------------
  |  Branch (36040:9): [True: 0, False: 749]
  ------------------
36041|      0|        p->level--;
36042|      0|        return NULL;
36043|      0|    }
36044|    749|    asdl_seq * _res = NULL;
36045|    749|    int _mark = p->mark;
36046|    749|    { // (expressions ['as' star_target]) _loop0_140
36047|    749|        if (p->error_indicator) {
  ------------------
  |  Branch (36047:13): [True: 0, False: 749]
  ------------------
36048|      0|            p->level--;
36049|      0|            return NULL;
36050|      0|        }
36051|    749|        D(fprintf(stderr, "%*c> _gather_141[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_140"));
36052|    749|        void *elem;
36053|    749|        asdl_seq * seq;
36054|    749|        if (
36055|    749|            (elem = _tmp_175_rule(p))  // expressions ['as' star_target]
  ------------------
  |  Branch (36055:13): [True: 723, False: 26]
  ------------------
36056|    723|            &&
36057|    723|            (seq = _loop0_140_rule(p))  // _loop0_140
  ------------------
  |  Branch (36057:13): [True: 723, False: 0]
  ------------------
36058|    749|        )
36059|    723|        {
36060|    723|            D(fprintf(stderr, "%*c+ _gather_141[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(expressions ['as' star_target]) _loop0_140"));
36061|    723|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
36062|    723|            goto done;
36063|    723|        }
36064|     26|        p->mark = _mark;
36065|     26|        D(fprintf(stderr, "%*c%s _gather_141[%d-%d]: %s failed!\n", p->level, ' ',
36066|     26|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(expressions ['as' star_target]) _loop0_140"));
36067|     26|    }
36068|     26|    _res = NULL;
36069|    749|  done:
36070|    749|    p->level--;
36071|    749|    return _res;
36072|     26|}
parser.c:_tmp_175_rule:
37991|  1.03k|{
37992|  1.03k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.07k|#  define MAXSTACK 6000
  ------------------
  |  Branch (37992:9): [True: 0, False: 1.03k]
  |  Branch (37992:35): [True: 0, False: 1.03k]
  ------------------
37993|      0|        _Pypegen_stack_overflow(p);
37994|      0|    }
37995|  1.03k|    if (p->error_indicator) {
  ------------------
  |  Branch (37995:9): [True: 0, False: 1.03k]
  ------------------
37996|      0|        p->level--;
37997|      0|        return NULL;
37998|      0|    }
37999|  1.03k|    void * _res = NULL;
38000|  1.03k|    int _mark = p->mark;
38001|  1.03k|    { // expressions ['as' star_target]
38002|  1.03k|        if (p->error_indicator) {
  ------------------
  |  Branch (38002:13): [True: 0, False: 1.03k]
  ------------------
38003|      0|            p->level--;
38004|      0|            return NULL;
38005|      0|        }
38006|  1.03k|        D(fprintf(stderr, "%*c> _tmp_175[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]"));
38007|  1.03k|        void *_opt_var;
38008|  1.03k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  1.03k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.03k]
  |  |  ------------------
  ------------------
38009|  1.03k|        expr_ty expressions_var;
38010|  1.03k|        if (
38011|  1.03k|            (expressions_var = expressions_rule(p))  // expressions
  ------------------
  |  Branch (38011:13): [True: 987, False: 49]
  ------------------
38012|    987|            &&
38013|    987|            (_opt_var = _tmp_178_rule(p), !p->error_indicator)  // ['as' star_target]
  ------------------
  |  Branch (38013:13): [True: 986, False: 1]
  ------------------
38014|  1.03k|        )
38015|    986|        {
38016|    986|            D(fprintf(stderr, "%*c+ _tmp_175[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions ['as' star_target]"));
38017|    986|            _res = _PyPegen_dummy_name(p, expressions_var, _opt_var);
38018|    986|            goto done;
38019|    986|        }
38020|     50|        p->mark = _mark;
38021|     50|        D(fprintf(stderr, "%*c%s _tmp_175[%d-%d]: %s failed!\n", p->level, ' ',
38022|     50|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions ['as' star_target]"));
38023|     50|    }
38024|     50|    _res = NULL;
38025|  1.03k|  done:
38026|  1.03k|    p->level--;
38027|  1.03k|    return _res;
38028|     50|}
parser.c:expressions_rule:
11420|  14.0k|{
11421|  14.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  28.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (11421:9): [True: 0, False: 14.0k]
  |  Branch (11421:35): [True: 0, False: 14.0k]
  ------------------
11422|      0|        _Pypegen_stack_overflow(p);
11423|      0|    }
11424|  14.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (11424:9): [True: 0, False: 14.0k]
  ------------------
11425|      0|        p->level--;
11426|      0|        return NULL;
11427|      0|    }
11428|  14.0k|    expr_ty _res = NULL;
11429|  14.0k|    int _mark = p->mark;
11430|  14.0k|    expr_ty _prefix_0_result = NULL;
11431|  14.0k|    int _prefix_0_end = 0, _prefix_0_valid = 0;
11432|  14.0k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (11432:9): [True: 3.44k, False: 10.6k]
  |  Branch (11432:31): [True: 169, False: 3.27k]
  ------------------
11433|    169|        p->error_indicator = 1;
11434|    169|        p->level--;
11435|    169|        return NULL;
11436|    169|    }
11437|  13.8k|    int _start_lineno = p->tokens[_mark]->lineno;
11438|  13.8k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  13.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.8k]
  |  |  ------------------
  ------------------
11439|  13.8k|    int _start_col_offset = p->tokens[_mark]->col_offset;
11440|  13.8k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  13.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.8k]
  |  |  ------------------
  ------------------
11441|  13.8k|    { // expression ((',' expression))+ ','?
11442|  13.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (11442:13): [True: 0, False: 13.8k]
  ------------------
11443|      0|            p->level--;
11444|      0|            return NULL;
11445|      0|        }
11446|  13.8k|        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
11447|  13.8k|        void *_opt_var;
11448|  13.8k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  13.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.8k]
  |  |  ------------------
  ------------------
11449|  13.8k|        expr_ty a;
11450|  13.8k|        asdl_seq * b;
11451|  13.8k|        if (
11452|  13.8k|            (a = ((!p->call_invalid_rules && _prefix_0_valid) ? (p->mark = _prefix_0_end, _prefix_0_result) : (_prefix_0_result = expression_rule(p), _prefix_0_end = p->mark, _prefix_0_valid = 1, _prefix_0_result)))  // expression
  ------------------
  |  Branch (11452:13): [True: 4.68k, False: 9.21k]
  |  Branch (11452:20): [True: 8.40k, False: 5.49k]
  |  Branch (11452:46): [True: 0, False: 8.40k]
  ------------------
11453|  4.68k|            &&
11454|  4.68k|            (b = _loop1_55_rule(p))  // ((',' expression))+
  ------------------
  |  Branch (11454:13): [True: 1.48k, False: 3.19k]
  ------------------
11455|  1.48k|            &&
11456|  1.48k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (11456:13): [True: 1.48k, False: 0]
  ------------------
11457|  13.8k|        )
11458|  1.48k|        {
11459|  1.48k|            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?"));
11460|  1.48k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11461|  1.48k|            if (_token == NULL) {
  ------------------
  |  Branch (11461:17): [True: 0, False: 1.48k]
  ------------------
11462|      0|                p->level--;
11463|      0|                return NULL;
11464|      0|            }
11465|  1.48k|            int _end_lineno = _token->end_lineno;
11466|  1.48k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.48k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.48k]
  |  |  ------------------
  ------------------
11467|  1.48k|            int _end_col_offset = _token->end_col_offset;
11468|  1.48k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.48k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.48k]
  |  |  ------------------
  ------------------
11469|  1.48k|            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
  ------------------
  |  |  271|  1.48k|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA );
  ------------------
  |  |  307|  1.48k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11470|  1.48k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11470:18): [True: 0, False: 1.48k]
  |  Branch (11470:34): [True: 0, False: 1.48k]
  |  Branch (11470:57): [True: 0, False: 0]
  ------------------
11471|      0|                p->error_indicator = 1;
11472|      0|                p->level--;
11473|      0|                return NULL;
11474|      0|            }
11475|  1.48k|            goto done;
11476|  1.48k|        }
11477|  12.4k|        p->mark = _mark;
11478|  12.4k|        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
11479|  12.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ((',' expression))+ ','?"));
11480|  12.4k|    }
11481|      0|    { // expression ','
11482|  12.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (11482:13): [True: 827, False: 11.5k]
  ------------------
11483|    827|            p->level--;
11484|    827|            return NULL;
11485|    827|        }
11486|  11.5k|        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ','"));
11487|  11.5k|        Token * _literal;
11488|  11.5k|        expr_ty a;
11489|  11.5k|        if (
11490|  11.5k|            (a = ((!p->call_invalid_rules && _prefix_0_valid) ? (p->mark = _prefix_0_end, _prefix_0_result) : (_prefix_0_result = expression_rule(p), _prefix_0_end = p->mark, _prefix_0_valid = 1, _prefix_0_result)))  // expression
  ------------------
  |  Branch (11490:13): [True: 3.16k, False: 8.41k]
  |  Branch (11490:20): [True: 7.31k, False: 4.25k]
  |  Branch (11490:46): [True: 7.31k, False: 0]
  ------------------
11491|  3.16k|            &&
11492|  3.16k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (11492:13): [True: 677, False: 2.49k]
  ------------------
11493|  11.5k|        )
11494|    677|        {
11495|    677|            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ','"));
11496|    677|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
11497|    677|            if (_token == NULL) {
  ------------------
  |  Branch (11497:17): [True: 0, False: 677]
  ------------------
11498|      0|                p->level--;
11499|      0|                return NULL;
11500|      0|            }
11501|    677|            int _end_lineno = _token->end_lineno;
11502|    677|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    677|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 677]
  |  |  ------------------
  ------------------
11503|    677|            int _end_col_offset = _token->end_col_offset;
11504|    677|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    677|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 677]
  |  |  ------------------
  ------------------
11505|    677|            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
  ------------------
  |  |  271|    677|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA );
  ------------------
  |  |  307|    677|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
11506|    677|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (11506:18): [True: 0, False: 677]
  |  Branch (11506:34): [True: 0, False: 677]
  |  Branch (11506:57): [True: 0, False: 0]
  ------------------
11507|      0|                p->error_indicator = 1;
11508|      0|                p->level--;
11509|      0|                return NULL;
11510|      0|            }
11511|    677|            goto done;
11512|    677|        }
11513|  10.9k|        p->mark = _mark;
11514|  10.9k|        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
11515|  10.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ','"));
11516|  10.9k|    }
11517|      0|    { // expression
11518|  10.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (11518:13): [True: 0, False: 10.9k]
  ------------------
11519|      0|            p->level--;
11520|      0|            return NULL;
11521|      0|        }
11522|  10.9k|        D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
11523|  10.9k|        expr_ty expression_var;
11524|  10.9k|        if (
11525|  10.9k|            (expression_var = ((!p->call_invalid_rules && _prefix_0_valid) ? (p->mark = _prefix_0_end, _prefix_0_result) : (_prefix_0_result = expression_rule(p), _prefix_0_end = p->mark, _prefix_0_valid = 1, _prefix_0_result)))  // expression
  ------------------
  |  Branch (11525:13): [True: 2.49k, False: 8.41k]
  |  Branch (11525:33): [True: 7.26k, False: 3.63k]
  |  Branch (11525:59): [True: 7.26k, False: 0]
  ------------------
11526|  10.9k|        )
11527|  2.49k|        {
11528|  2.49k|            D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
11529|  2.49k|            _res = expression_var;
11530|  2.49k|            goto done;
11531|  2.49k|        }
11532|  8.41k|        p->mark = _mark;
11533|  8.41k|        D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ',
11534|  8.41k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
11535|  8.41k|    }
11536|  8.41k|    _res = NULL;
11537|  13.0k|  done:
11538|  13.0k|    p->level--;
11539|  13.0k|    return _res;
11540|  8.41k|}
parser.c:_loop1_55_rule:
30708|  4.68k|{
30709|  4.68k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.36k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30709:9): [True: 0, False: 4.68k]
  |  Branch (30709:35): [True: 0, False: 4.68k]
  ------------------
30710|      0|        _Pypegen_stack_overflow(p);
30711|      0|    }
30712|  4.68k|    if (p->error_indicator) {
  ------------------
  |  Branch (30712:9): [True: 0, False: 4.68k]
  ------------------
30713|      0|        p->level--;
30714|      0|        return NULL;
30715|      0|    }
30716|  4.68k|    void *_res = NULL;
30717|  4.68k|    int _mark = p->mark;
30718|  4.68k|    void **_children = PyMem_Malloc(sizeof(void *));
30719|  4.68k|    if (!_children) {
  ------------------
  |  Branch (30719:9): [True: 0, False: 4.68k]
  ------------------
30720|      0|        p->error_indicator = 1;
30721|      0|        PyErr_NoMemory();
30722|      0|        p->level--;
30723|      0|        return NULL;
30724|      0|    }
30725|  4.68k|    Py_ssize_t _children_capacity = 1;
30726|  4.68k|    Py_ssize_t _n = 0;
30727|  4.68k|    { // (',' expression)
30728|  4.68k|        if (p->error_indicator) {
  ------------------
  |  Branch (30728:13): [True: 0, False: 4.68k]
  ------------------
30729|      0|            p->level--;
30730|      0|            return NULL;
30731|      0|        }
30732|  4.68k|        D(fprintf(stderr, "%*c> _loop1_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)"));
30733|  4.68k|        void *_tmp_16_var;
30734|  4.68k|        while (
30735|  13.8k|            (_tmp_16_var = _tmp_16_rule(p))  // ',' expression
  ------------------
  |  Branch (30735:13): [True: 9.17k, False: 4.68k]
  ------------------
30736|  4.68k|        )
30737|  9.17k|        {
30738|  9.17k|            _res = _tmp_16_var;
30739|  9.17k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30739:17): [True: 1.45k, False: 7.72k]
  ------------------
30740|  1.45k|                _children_capacity *= 2;
30741|  1.45k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30742|  1.45k|                if (!_new_children) {
  ------------------
  |  Branch (30742:21): [True: 0, False: 1.45k]
  ------------------
30743|      0|                    PyMem_Free(_children);
30744|      0|                    p->error_indicator = 1;
30745|      0|                    PyErr_NoMemory();
30746|      0|                    p->level--;
30747|      0|                    return NULL;
30748|      0|                }
30749|  1.45k|                _children = _new_children;
30750|  1.45k|            }
30751|  9.17k|            _children[_n++] = _res;
30752|  9.17k|            _mark = p->mark;
30753|  9.17k|        }
30754|  4.68k|        p->mark = _mark;
30755|  4.68k|        D(fprintf(stderr, "%*c%s _loop1_55[%d-%d]: %s failed!\n", p->level, ' ',
30756|  4.68k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)"));
30757|  4.68k|    }
30758|  4.68k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (30758:9): [True: 3.18k, False: 1.49k]
  |  Branch (30758:20): [True: 8, False: 1.48k]
  ------------------
30759|  3.19k|        PyMem_Free(_children);
30760|  3.19k|        p->level--;
30761|  3.19k|        return NULL;
30762|  3.19k|    }
30763|  1.48k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30764|  1.48k|    if (!_seq) {
  ------------------
  |  Branch (30764:9): [True: 0, False: 1.48k]
  ------------------
30765|      0|        PyMem_Free(_children);
30766|      0|        p->error_indicator = 1;
30767|      0|        PyErr_NoMemory();
30768|      0|        p->level--;
30769|      0|        return NULL;
30770|      0|    }
30771|  10.6k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  9.14k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  10.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30771:28): [True: 9.14k, False: 1.48k]
  ------------------
30772|  1.48k|    PyMem_Free(_children);
30773|  1.48k|    p->level--;
30774|  1.48k|    return _seq;
30775|  1.48k|}
parser.c:_loop0_140_rule:
35960|    723|{
35961|    723|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.44k|#  define MAXSTACK 6000
  ------------------
  |  Branch (35961:9): [True: 0, False: 723]
  |  Branch (35961:35): [True: 0, False: 723]
  ------------------
35962|      0|        _Pypegen_stack_overflow(p);
35963|      0|    }
35964|    723|    if (p->error_indicator) {
  ------------------
  |  Branch (35964:9): [True: 0, False: 723]
  ------------------
35965|      0|        p->level--;
35966|      0|        return NULL;
35967|      0|    }
35968|    723|    void *_res = NULL;
35969|    723|    int _mark = p->mark;
35970|    723|    void **_children = PyMem_Malloc(sizeof(void *));
35971|    723|    if (!_children) {
  ------------------
  |  Branch (35971:9): [True: 0, False: 723]
  ------------------
35972|      0|        p->error_indicator = 1;
35973|      0|        PyErr_NoMemory();
35974|      0|        p->level--;
35975|      0|        return NULL;
35976|      0|    }
35977|    723|    Py_ssize_t _children_capacity = 1;
35978|    723|    Py_ssize_t _n = 0;
35979|    723|    { // ',' (expressions ['as' star_target])
35980|    723|        if (p->error_indicator) {
  ------------------
  |  Branch (35980:13): [True: 0, False: 723]
  ------------------
35981|      0|            p->level--;
35982|      0|            return NULL;
35983|      0|        }
35984|    723|        D(fprintf(stderr, "%*c> _loop0_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (expressions ['as' star_target])"));
35985|    723|        Token * _literal;
35986|    723|        void *elem;
35987|    723|        while (
35988|    986|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (35988:13): [True: 287, False: 699]
  ------------------
35989|    287|            &&
35990|    287|            (elem = _tmp_175_rule(p))  // expressions ['as' star_target]
  ------------------
  |  Branch (35990:13): [True: 263, False: 24]
  ------------------
35991|    723|        )
35992|    263|        {
35993|    263|            _res = elem;
35994|    263|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (35994:18): [True: 0, False: 263]
  |  Branch (35994:34): [True: 0, False: 263]
  |  Branch (35994:57): [True: 0, False: 0]
  ------------------
35995|      0|                p->error_indicator = 1;
35996|      0|                PyMem_Free(_children);
35997|      0|                p->level--;
35998|      0|                return NULL;
35999|      0|            }
36000|    263|            if (_n == _children_capacity) {
  ------------------
  |  Branch (36000:17): [True: 82, False: 181]
  ------------------
36001|     82|                _children_capacity *= 2;
36002|     82|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
36003|     82|                if (!_new_children) {
  ------------------
  |  Branch (36003:21): [True: 0, False: 82]
  ------------------
36004|      0|                    PyMem_Free(_children);
36005|      0|                    p->error_indicator = 1;
36006|      0|                    PyErr_NoMemory();
36007|      0|                    p->level--;
36008|      0|                    return NULL;
36009|      0|                }
36010|     82|                _children = _new_children;
36011|     82|            }
36012|    263|            _children[_n++] = _res;
36013|    263|            _mark = p->mark;
36014|    263|        }
36015|    723|        p->mark = _mark;
36016|    723|        D(fprintf(stderr, "%*c%s _loop0_140[%d-%d]: %s failed!\n", p->level, ' ',
36017|    723|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (expressions ['as' star_target])"));
36018|    723|    }
36019|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
36020|    723|    if (!_seq) {
  ------------------
  |  Branch (36020:9): [True: 0, False: 723]
  ------------------
36021|      0|        PyMem_Free(_children);
36022|      0|        p->error_indicator = 1;
36023|      0|        PyErr_NoMemory();
36024|      0|        p->level--;
36025|      0|        return NULL;
36026|      0|    }
36027|    986|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|    263|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    986|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (36027:28): [True: 263, False: 723]
  ------------------
36028|    723|    PyMem_Free(_children);
36029|    723|    p->level--;
36030|    723|    return _seq;
36031|    723|}
parser.c:_gather_34_rule:
29407|  6.20k|{
29408|  6.20k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  12.4k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29408:9): [True: 0, False: 6.20k]
  |  Branch (29408:35): [True: 0, False: 6.20k]
  ------------------
29409|      0|        _Pypegen_stack_overflow(p);
29410|      0|    }
29411|  6.20k|    if (p->error_indicator) {
  ------------------
  |  Branch (29411:9): [True: 0, False: 6.20k]
  ------------------
29412|      0|        p->level--;
29413|      0|        return NULL;
29414|      0|    }
29415|  6.20k|    asdl_seq * _res = NULL;
29416|  6.20k|    int _mark = p->mark;
29417|  6.20k|    { // with_item _loop0_33
29418|  6.20k|        if (p->error_indicator) {
  ------------------
  |  Branch (29418:13): [True: 0, False: 6.20k]
  ------------------
29419|      0|            p->level--;
29420|      0|            return NULL;
29421|      0|        }
29422|  6.20k|        D(fprintf(stderr, "%*c> _gather_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_33"));
29423|  6.20k|        withitem_ty elem;
29424|  6.20k|        asdl_seq * seq;
29425|  6.20k|        if (
29426|  6.20k|            (elem = with_item_rule(p))  // with_item
  ------------------
  |  Branch (29426:13): [True: 6.07k, False: 134]
  ------------------
29427|  6.07k|            &&
29428|  6.07k|            (seq = _loop0_33_rule(p))  // _loop0_33
  ------------------
  |  Branch (29428:13): [True: 6.07k, False: 0]
  ------------------
29429|  6.20k|        )
29430|  6.07k|        {
29431|  6.07k|            D(fprintf(stderr, "%*c+ _gather_34[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_33"));
29432|  6.07k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
29433|  6.07k|            goto done;
29434|  6.07k|        }
29435|    134|        p->mark = _mark;
29436|    134|        D(fprintf(stderr, "%*c%s _gather_34[%d-%d]: %s failed!\n", p->level, ' ',
29437|    134|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_33"));
29438|    134|    }
29439|    134|    _res = NULL;
29440|  6.20k|  done:
29441|  6.20k|    p->level--;
29442|  6.20k|    return _res;
29443|    134|}
parser.c:with_item_rule:
 6952|  22.3k|{
 6953|  22.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  44.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6953:9): [True: 0, False: 22.3k]
  |  Branch (6953:35): [True: 0, False: 22.3k]
  ------------------
 6954|      0|        _Pypegen_stack_overflow(p);
 6955|      0|    }
 6956|  22.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (6956:9): [True: 0, False: 22.3k]
  ------------------
 6957|      0|        p->level--;
 6958|      0|        return NULL;
 6959|      0|    }
 6960|  22.3k|    withitem_ty _res = NULL;
 6961|  22.3k|    int _mark = p->mark;
 6962|  22.3k|    { // expression 'as' star_target &(',' | ')' | ':')
 6963|  22.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (6963:13): [True: 0, False: 22.3k]
  ------------------
 6964|      0|            p->level--;
 6965|      0|            return NULL;
 6966|      0|        }
 6967|  22.3k|        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
 6968|  22.3k|        Token * _keyword;
 6969|  22.3k|        expr_ty e;
 6970|  22.3k|        expr_ty t;
 6971|  22.3k|        if (
 6972|  22.3k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (6972:13): [True: 20.5k, False: 1.81k]
  ------------------
 6973|  20.5k|            &&
 6974|  20.5k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (6974:13): [True: 1.67k, False: 18.9k]
  ------------------
 6975|  1.67k|            &&
 6976|  1.67k|            (t = star_target_rule(p))  // star_target
  ------------------
  |  Branch (6976:13): [True: 1.66k, False: 8]
  ------------------
 6977|  1.66k|            &&
 6978|  1.66k|            _PyPegen_lookahead(1, _tmp_35_rule, p)
  ------------------
  |  Branch (6978:13): [True: 1.65k, False: 12]
  ------------------
 6979|  22.3k|        )
 6980|  1.65k|        {
 6981|  1.65k|            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
 6982|  1.65k|            _res = _PyAST_withitem ( e , t , p -> arena );
 6983|  1.65k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6983:18): [True: 0, False: 1.65k]
  |  Branch (6983:34): [True: 0, False: 1.65k]
  |  Branch (6983:57): [True: 0, False: 0]
  ------------------
 6984|      0|                p->error_indicator = 1;
 6985|      0|                p->level--;
 6986|      0|                return NULL;
 6987|      0|            }
 6988|  1.65k|            goto done;
 6989|  1.65k|        }
 6990|  20.7k|        p->mark = _mark;
 6991|  20.7k|        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
 6992|  20.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')"));
 6993|  20.7k|    }
 6994|  20.7k|    if (p->call_invalid_rules) { // invalid_with_item
  ------------------
  |  Branch (6994:9): [True: 3.86k, False: 16.8k]
  ------------------
 6995|  3.86k|        if (p->error_indicator) {
  ------------------
  |  Branch (6995:13): [True: 0, False: 3.86k]
  ------------------
 6996|      0|            p->level--;
 6997|      0|            return NULL;
 6998|      0|        }
 6999|  3.86k|        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
 7000|  3.86k|        void *invalid_with_item_var;
 7001|  3.86k|        if (
 7002|  3.86k|            (invalid_with_item_var = invalid_with_item_rule(p))  // invalid_with_item
  ------------------
  |  Branch (7002:13): [True: 0, False: 3.86k]
  ------------------
 7003|  3.86k|        )
 7004|      0|        {
 7005|      0|            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_item"));
 7006|      0|            _res = invalid_with_item_var;
 7007|      0|            goto done;
 7008|      0|        }
 7009|  3.86k|        p->mark = _mark;
 7010|  3.86k|        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
 7011|  3.86k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_item"));
 7012|  3.86k|    }
 7013|  20.7k|    { // expression
 7014|  20.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (7014:13): [True: 17, False: 20.7k]
  ------------------
 7015|     17|            p->level--;
 7016|     17|            return NULL;
 7017|     17|        }
 7018|  20.7k|        D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression"));
 7019|  20.7k|        expr_ty e;
 7020|  20.7k|        if (
 7021|  20.7k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (7021:13): [True: 18.9k, False: 1.79k]
  ------------------
 7022|  20.7k|        )
 7023|  18.9k|        {
 7024|  18.9k|            D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression"));
 7025|  18.9k|            _res = _PyAST_withitem ( e , NULL , p -> arena );
 7026|  18.9k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7026:18): [True: 0, False: 18.9k]
  |  Branch (7026:34): [True: 0, False: 18.9k]
  |  Branch (7026:57): [True: 0, False: 0]
  ------------------
 7027|      0|                p->error_indicator = 1;
 7028|      0|                p->level--;
 7029|      0|                return NULL;
 7030|      0|            }
 7031|  18.9k|            goto done;
 7032|  18.9k|        }
 7033|  1.79k|        p->mark = _mark;
 7034|  1.79k|        D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ',
 7035|  1.79k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression"));
 7036|  1.79k|    }
 7037|  1.79k|    _res = NULL;
 7038|  22.3k|  done:
 7039|  22.3k|    p->level--;
 7040|  22.3k|    return _res;
 7041|  1.79k|}
parser.c:_tmp_35_rule:
29448|  1.67k|{
29449|  1.67k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  3.34k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29449:9): [True: 0, False: 1.67k]
  |  Branch (29449:35): [True: 0, False: 1.67k]
  ------------------
29450|      0|        _Pypegen_stack_overflow(p);
29451|      0|    }
29452|  1.67k|    if (p->error_indicator) {
  ------------------
  |  Branch (29452:9): [True: 0, False: 1.67k]
  ------------------
29453|      0|        p->level--;
29454|      0|        return NULL;
29455|      0|    }
29456|  1.67k|    void * _res = NULL;
29457|  1.67k|    int _mark = p->mark;
29458|  1.67k|    { // ','
29459|  1.67k|        if (p->error_indicator) {
  ------------------
  |  Branch (29459:13): [True: 0, False: 1.67k]
  ------------------
29460|      0|            p->level--;
29461|      0|            return NULL;
29462|      0|        }
29463|  1.67k|        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','"));
29464|  1.67k|        Token * _literal;
29465|  1.67k|        if (
29466|  1.67k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (29466:13): [True: 1.56k, False: 103]
  ------------------
29467|  1.67k|        )
29468|  1.56k|        {
29469|  1.56k|            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','"));
29470|  1.56k|            _res = _literal;
29471|  1.56k|            goto done;
29472|  1.56k|        }
29473|    103|        p->mark = _mark;
29474|    103|        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
29475|    103|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','"));
29476|    103|    }
29477|      0|    { // ')'
29478|    103|        if (p->error_indicator) {
  ------------------
  |  Branch (29478:13): [True: 0, False: 103]
  ------------------
29479|      0|            p->level--;
29480|      0|            return NULL;
29481|      0|        }
29482|    103|        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'"));
29483|    103|        Token * _literal;
29484|    103|        if (
29485|    103|            (_literal = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (29485:13): [True: 1, False: 102]
  ------------------
29486|    103|        )
29487|      1|        {
29488|      1|            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'"));
29489|      1|            _res = _literal;
29490|      1|            goto done;
29491|      1|        }
29492|    102|        p->mark = _mark;
29493|    102|        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
29494|    102|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'"));
29495|    102|    }
29496|      0|    { // ':'
29497|    102|        if (p->error_indicator) {
  ------------------
  |  Branch (29497:13): [True: 0, False: 102]
  ------------------
29498|      0|            p->level--;
29499|      0|            return NULL;
29500|      0|        }
29501|    102|        D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
29502|    102|        Token * _literal;
29503|    102|        if (
29504|    102|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (29504:13): [True: 85, False: 17]
  ------------------
29505|    102|        )
29506|     85|        {
29507|     85|            D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
29508|     85|            _res = _literal;
29509|     85|            goto done;
29510|     85|        }
29511|     17|        p->mark = _mark;
29512|     17|        D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ',
29513|     17|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
29514|     17|    }
29515|     17|    _res = NULL;
29516|  1.67k|  done:
29517|  1.67k|    p->level--;
29518|  1.67k|    return _res;
29519|     17|}
parser.c:invalid_with_item_rule:
22805|  3.86k|{
22806|  3.86k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.73k|#  define MAXSTACK 6000
  ------------------
  |  Branch (22806:9): [True: 0, False: 3.86k]
  |  Branch (22806:35): [True: 0, False: 3.86k]
  ------------------
22807|      0|        _Pypegen_stack_overflow(p);
22808|      0|    }
22809|  3.86k|    if (p->error_indicator) {
  ------------------
  |  Branch (22809:9): [True: 0, False: 3.86k]
  ------------------
22810|      0|        p->level--;
22811|      0|        return NULL;
22812|      0|    }
22813|  3.86k|    void * _res = NULL;
22814|  3.86k|    int _mark = p->mark;
22815|  3.86k|    { // expression 'as' expression &(',' | ')' | ':')
22816|  3.86k|        if (p->error_indicator) {
  ------------------
  |  Branch (22816:13): [True: 0, False: 3.86k]
  ------------------
22817|      0|            p->level--;
22818|      0|            return NULL;
22819|      0|        }
22820|  3.86k|        D(fprintf(stderr, "%*c> invalid_with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
22821|  3.86k|        Token * _keyword;
22822|  3.86k|        expr_ty a;
22823|  3.86k|        expr_ty expression_var;
22824|  3.86k|        if (
22825|  3.86k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (22825:13): [True: 3.16k, False: 700]
  ------------------
22826|  3.16k|            &&
22827|  3.16k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (22827:13): [True: 8, False: 3.15k]
  ------------------
22828|      8|            &&
22829|      8|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (22829:13): [True: 7, False: 1]
  ------------------
22830|      7|            &&
22831|      7|            _PyPegen_lookahead(1, _tmp_35_rule, p)
  ------------------
  |  Branch (22831:13): [True: 2, False: 5]
  ------------------
22832|  3.86k|        )
22833|      2|        {
22834|      2|            D(fprintf(stderr, "%*c+ invalid_with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
22835|      2|            _res = RAISE_SYNTAX_ERROR_INVALID_TARGET ( STAR_TARGETS , a );
  ------------------
  |  |  242|      2|#define RAISE_SYNTAX_ERROR_INVALID_TARGET(type, e) _RAISE_SYNTAX_ERROR_INVALID_TARGET(p, type, e)
  ------------------
22836|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (22836:18): [True: 2, False: 0]
  |  Branch (22836:34): [True: 0, False: 0]
  |  Branch (22836:57): [True: 2, False: 0]
  ------------------
22837|      2|                p->error_indicator = 1;
22838|      2|                p->level--;
22839|      2|                return NULL;
22840|      2|            }
22841|      0|            goto done;
22842|      2|        }
22843|  3.86k|        p->mark = _mark;
22844|  3.86k|        D(fprintf(stderr, "%*c%s invalid_with_item[%d-%d]: %s failed!\n", p->level, ' ',
22845|  3.86k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' expression &(',' | ')' | ':')"));
22846|  3.86k|    }
22847|  3.86k|    _res = NULL;
22848|  3.86k|  done:
22849|  3.86k|    p->level--;
22850|  3.86k|    return _res;
22851|  3.86k|}
parser.c:_loop0_33_rule:
29331|  6.07k|{
29332|  6.07k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  12.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29332:9): [True: 0, False: 6.07k]
  |  Branch (29332:35): [True: 0, False: 6.07k]
  ------------------
29333|      0|        _Pypegen_stack_overflow(p);
29334|      0|    }
29335|  6.07k|    if (p->error_indicator) {
  ------------------
  |  Branch (29335:9): [True: 0, False: 6.07k]
  ------------------
29336|      0|        p->level--;
29337|      0|        return NULL;
29338|      0|    }
29339|  6.07k|    void *_res = NULL;
29340|  6.07k|    int _mark = p->mark;
29341|  6.07k|    void **_children = PyMem_Malloc(sizeof(void *));
29342|  6.07k|    if (!_children) {
  ------------------
  |  Branch (29342:9): [True: 0, False: 6.07k]
  ------------------
29343|      0|        p->error_indicator = 1;
29344|      0|        PyErr_NoMemory();
29345|      0|        p->level--;
29346|      0|        return NULL;
29347|      0|    }
29348|  6.07k|    Py_ssize_t _children_capacity = 1;
29349|  6.07k|    Py_ssize_t _n = 0;
29350|  6.07k|    { // ',' with_item
29351|  6.07k|        if (p->error_indicator) {
  ------------------
  |  Branch (29351:13): [True: 0, False: 6.07k]
  ------------------
29352|      0|            p->level--;
29353|      0|            return NULL;
29354|      0|        }
29355|  6.07k|        D(fprintf(stderr, "%*c> _loop0_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item"));
29356|  6.07k|        Token * _literal;
29357|  6.07k|        withitem_ty elem;
29358|  6.07k|        while (
29359|  20.5k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (29359:13): [True: 16.1k, False: 4.38k]
  ------------------
29360|  16.1k|            &&
29361|  16.1k|            (elem = with_item_rule(p))  // with_item
  ------------------
  |  Branch (29361:13): [True: 14.5k, False: 1.68k]
  ------------------
29362|  6.07k|        )
29363|  14.5k|        {
29364|  14.5k|            _res = elem;
29365|  14.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (29365:18): [True: 0, False: 14.5k]
  |  Branch (29365:34): [True: 0, False: 14.5k]
  |  Branch (29365:57): [True: 0, False: 0]
  ------------------
29366|      0|                p->error_indicator = 1;
29367|      0|                PyMem_Free(_children);
29368|      0|                p->level--;
29369|      0|                return NULL;
29370|      0|            }
29371|  14.5k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29371:17): [True: 7.28k, False: 7.22k]
  ------------------
29372|  7.28k|                _children_capacity *= 2;
29373|  7.28k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29374|  7.28k|                if (!_new_children) {
  ------------------
  |  Branch (29374:21): [True: 0, False: 7.28k]
  ------------------
29375|      0|                    PyMem_Free(_children);
29376|      0|                    p->error_indicator = 1;
29377|      0|                    PyErr_NoMemory();
29378|      0|                    p->level--;
29379|      0|                    return NULL;
29380|      0|                }
29381|  7.28k|                _children = _new_children;
29382|  7.28k|            }
29383|  14.5k|            _children[_n++] = _res;
29384|  14.5k|            _mark = p->mark;
29385|  14.5k|        }
29386|  6.07k|        p->mark = _mark;
29387|  6.07k|        D(fprintf(stderr, "%*c%s _loop0_33[%d-%d]: %s failed!\n", p->level, ' ',
29388|  6.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item"));
29389|  6.07k|    }
29390|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29391|  6.07k|    if (!_seq) {
  ------------------
  |  Branch (29391:9): [True: 0, False: 6.07k]
  ------------------
29392|      0|        PyMem_Free(_children);
29393|      0|        p->error_indicator = 1;
29394|      0|        PyErr_NoMemory();
29395|      0|        p->level--;
29396|      0|        return NULL;
29397|      0|    }
29398|  20.5k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  14.5k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  20.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29398:28): [True: 14.5k, False: 6.07k]
  ------------------
29399|  6.07k|    PyMem_Free(_children);
29400|  6.07k|    p->level--;
29401|  6.07k|    return _seq;
29402|  6.07k|}
parser.c:invalid_with_stmt_rule:
23356|    374|{
23357|    374|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    748|#  define MAXSTACK 6000
  ------------------
  |  Branch (23357:9): [True: 0, False: 374]
  |  Branch (23357:35): [True: 0, False: 374]
  ------------------
23358|      0|        _Pypegen_stack_overflow(p);
23359|      0|    }
23360|    374|    if (p->error_indicator) {
  ------------------
  |  Branch (23360:9): [True: 0, False: 374]
  ------------------
23361|      0|        p->level--;
23362|      0|        return NULL;
23363|      0|    }
23364|    374|    void * _res = NULL;
23365|    374|    int _mark = p->mark;
23366|    374|    { // 'async'? 'with' ','.(expression ['as' star_target])+ ',' ':'
23367|    374|        if (p->error_indicator) {
  ------------------
  |  Branch (23367:13): [True: 0, False: 374]
  ------------------
23368|      0|            p->level--;
23369|      0|            return NULL;
23370|      0|        }
23371|    374|        D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ',' ':'"));
23372|    374|        asdl_seq * _gather_139_var;
23373|    374|        Token * _keyword;
23374|    374|        Token * _literal;
23375|    374|        void *_opt_var;
23376|    374|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    374|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 374]
  |  |  ------------------
  ------------------
23377|    374|        Token * trailing;
23378|    374|        if (
23379|    374|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (23379:13): [True: 374, False: 0]
  ------------------
23380|    374|            &&
23381|    374|            (_keyword = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (23381:13): [True: 103, False: 271]
  ------------------
23382|    103|            &&
23383|    103|            (_gather_139_var = _gather_139_rule(p))  // ','.(expression ['as' star_target])+
  ------------------
  |  Branch (23383:13): [True: 72, False: 31]
  ------------------
23384|     72|            &&
23385|     72|            (trailing = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (23385:13): [True: 9, False: 63]
  ------------------
23386|      9|            &&
23387|      9|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23387:13): [True: 2, False: 7]
  ------------------
23388|    374|        )
23389|      2|        {
23390|      2|            D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ',' ':'"));
23391|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( trailing , "the last 'with' item has a trailing comma" );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23392|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23392:18): [True: 2, False: 0]
  |  Branch (23392:34): [True: 0, False: 0]
  |  Branch (23392:57): [True: 2, False: 0]
  ------------------
23393|      2|                p->error_indicator = 1;
23394|      2|                p->level--;
23395|      2|                return NULL;
23396|      2|            }
23397|      0|            goto done;
23398|      2|        }
23399|    372|        p->mark = _mark;
23400|    372|        D(fprintf(stderr, "%*c%s invalid_with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23401|    372|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ ',' ':'"));
23402|    372|    }
23403|      0|    { // 'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE
23404|    372|        if (p->error_indicator) {
  ------------------
  |  Branch (23404:13): [True: 0, False: 372]
  ------------------
23405|      0|            p->level--;
23406|      0|            return NULL;
23407|      0|        }
23408|    372|        D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE"));
23409|    372|        asdl_seq * _gather_139_var;
23410|    372|        Token * _keyword;
23411|    372|        void *_opt_var;
23412|    372|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    372|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 372]
  |  |  ------------------
  ------------------
23413|    372|        Token * newline_var;
23414|    372|        if (
23415|    372|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (23415:13): [True: 372, False: 0]
  ------------------
23416|    372|            &&
23417|    372|            (_keyword = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (23417:13): [True: 101, False: 271]
  ------------------
23418|    101|            &&
23419|    101|            (_gather_139_var = _gather_139_rule(p))  // ','.(expression ['as' star_target])+
  ------------------
  |  Branch (23419:13): [True: 70, False: 31]
  ------------------
23420|     70|            &&
23421|     70|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     70|#define NEWLINE         4
  ------------------
  |  Branch (23421:13): [True: 22, False: 48]
  ------------------
23422|    372|        )
23423|     22|        {
23424|     22|            D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE"));
23425|     22|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|     22|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
23426|     22|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23426:18): [True: 22, False: 0]
  |  Branch (23426:34): [True: 0, False: 0]
  |  Branch (23426:57): [True: 22, False: 0]
  ------------------
23427|     22|                p->error_indicator = 1;
23428|     22|                p->level--;
23429|     22|                return NULL;
23430|     22|            }
23431|      0|            goto done;
23432|     22|        }
23433|    350|        p->mark = _mark;
23434|    350|        D(fprintf(stderr, "%*c%s invalid_with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23435|    350|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' ','.(expression ['as' star_target])+ NEWLINE"));
23436|    350|    }
23437|      0|    { // 'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE
23438|    350|        if (p->error_indicator) {
  ------------------
  |  Branch (23438:13): [True: 0, False: 350]
  ------------------
23439|      0|            p->level--;
23440|      0|            return NULL;
23441|      0|        }
23442|    350|        D(fprintf(stderr, "%*c> invalid_with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE"));
23443|    350|        asdl_seq * _gather_141_var;
23444|    350|        Token * _keyword;
23445|    350|        Token * _literal;
23446|    350|        Token * _literal_1;
23447|    350|        void *_opt_var;
23448|    350|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    350|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 350]
  |  |  ------------------
  ------------------
23449|    350|        void *_opt_var_1;
23450|    350|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|    350|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 350]
  |  |  ------------------
  ------------------
23451|    350|        Token * newline_var;
23452|    350|        if (
23453|    350|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (23453:13): [True: 350, False: 0]
  ------------------
23454|    350|            &&
23455|    350|            (_keyword = _PyPegen_expect_token(p, 665))  // token='with'
  ------------------
  |  Branch (23455:13): [True: 79, False: 271]
  ------------------
23456|     79|            &&
23457|     79|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (23457:13): [True: 38, False: 41]
  ------------------
23458|     38|            &&
23459|     38|            (_gather_141_var = _gather_141_rule(p))  // ','.(expressions ['as' star_target])+
  ------------------
  |  Branch (23459:13): [True: 31, False: 7]
  ------------------
23460|     31|            &&
23461|     31|            (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (23461:13): [True: 31, False: 0]
  ------------------
23462|     31|            &&
23463|     31|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (23463:13): [True: 15, False: 16]
  ------------------
23464|     15|            &&
23465|     15|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     15|#define NEWLINE         4
  ------------------
  |  Branch (23465:13): [True: 2, False: 13]
  ------------------
23466|    350|        )
23467|      2|        {
23468|      2|            D(fprintf(stderr, "%*c+ invalid_with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE"));
23469|      2|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      2|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
23470|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23470:18): [True: 2, False: 0]
  |  Branch (23470:34): [True: 0, False: 0]
  |  Branch (23470:57): [True: 2, False: 0]
  ------------------
23471|      2|                p->error_indicator = 1;
23472|      2|                p->level--;
23473|      2|                return NULL;
23474|      2|            }
23475|      0|            goto done;
23476|      2|        }
23477|    348|        p->mark = _mark;
23478|    348|        D(fprintf(stderr, "%*c%s invalid_with_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23479|    348|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE"));
23480|    348|    }
23481|    348|    _res = NULL;
23482|    348|  done:
23483|    348|    p->level--;
23484|    348|    return _res;
23485|    348|}
parser.c:_tmp_9_rule:
27865|   173k|{
27866|   173k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   347k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27866:9): [True: 0, False: 173k]
  |  Branch (27866:35): [True: 0, False: 173k]
  ------------------
27867|      0|        _Pypegen_stack_overflow(p);
27868|      0|    }
27869|   173k|    if (p->error_indicator) {
  ------------------
  |  Branch (27869:9): [True: 0, False: 173k]
  ------------------
27870|      0|        p->level--;
27871|      0|        return NULL;
27872|      0|    }
27873|   173k|    void * _res = NULL;
27874|   173k|    int _mark = p->mark;
27875|   173k|    { // 'for'
27876|   173k|        if (p->error_indicator) {
  ------------------
  |  Branch (27876:13): [True: 0, False: 173k]
  ------------------
27877|      0|            p->level--;
27878|      0|            return NULL;
27879|      0|        }
27880|   173k|        D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'"));
27881|   173k|        Token * _keyword;
27882|   173k|        if (
27883|   173k|            (_keyword = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (27883:13): [True: 1.91k, False: 172k]
  ------------------
27884|   173k|        )
27885|  1.91k|        {
27886|  1.91k|            D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'"));
27887|  1.91k|            _res = _keyword;
27888|  1.91k|            goto done;
27889|  1.91k|        }
27890|   172k|        p->mark = _mark;
27891|   172k|        D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ',
27892|   172k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'"));
27893|   172k|    }
27894|      0|    { // 'async'
27895|   172k|        if (p->error_indicator) {
  ------------------
  |  Branch (27895:13): [True: 0, False: 172k]
  ------------------
27896|      0|            p->level--;
27897|      0|            return NULL;
27898|      0|        }
27899|   172k|        D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'"));
27900|   172k|        Token * _keyword;
27901|   172k|        if (
27902|   172k|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (27902:13): [True: 901, False: 171k]
  ------------------
27903|   172k|        )
27904|    901|        {
27905|    901|            D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'"));
27906|    901|            _res = _keyword;
27907|    901|            goto done;
27908|    901|        }
27909|   171k|        p->mark = _mark;
27910|   171k|        D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ',
27911|   171k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'"));
27912|   171k|    }
27913|   171k|    _res = NULL;
27914|   173k|  done:
27915|   173k|    p->level--;
27916|   173k|    return _res;
27917|   171k|}
parser.c:for_stmt_rule:
 6483|  2.81k|{
 6484|  2.81k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.63k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6484:9): [True: 0, False: 2.81k]
  |  Branch (6484:35): [True: 0, False: 2.81k]
  ------------------
 6485|      0|        _Pypegen_stack_overflow(p);
 6486|      0|    }
 6487|  2.81k|    if (p->error_indicator) {
  ------------------
  |  Branch (6487:9): [True: 0, False: 2.81k]
  ------------------
 6488|      0|        p->level--;
 6489|      0|        return NULL;
 6490|      0|    }
 6491|  2.81k|    stmt_ty _res = NULL;
 6492|  2.81k|    int _mark = p->mark;
 6493|  2.81k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (6493:9): [True: 0, False: 2.81k]
  |  Branch (6493:31): [True: 0, False: 0]
  ------------------
 6494|      0|        p->error_indicator = 1;
 6495|      0|        p->level--;
 6496|      0|        return NULL;
 6497|      0|    }
 6498|  2.81k|    int _start_lineno = p->tokens[_mark]->lineno;
 6499|  2.81k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.81k]
  |  |  ------------------
  ------------------
 6500|  2.81k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 6501|  2.81k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.81k]
  |  |  ------------------
  ------------------
 6502|  2.81k|    if (p->call_invalid_rules) { // invalid_for_stmt
  ------------------
  |  Branch (6502:9): [True: 715, False: 2.10k]
  ------------------
 6503|    715|        if (p->error_indicator) {
  ------------------
  |  Branch (6503:13): [True: 0, False: 715]
  ------------------
 6504|      0|            p->level--;
 6505|      0|            return NULL;
 6506|      0|        }
 6507|    715|        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt"));
 6508|    715|        void *invalid_for_stmt_var;
 6509|    715|        if (
 6510|    715|            (invalid_for_stmt_var = invalid_for_stmt_rule(p))  // invalid_for_stmt
  ------------------
  |  Branch (6510:13): [True: 0, False: 715]
  ------------------
 6511|    715|        )
 6512|      0|        {
 6513|      0|            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt"));
 6514|      0|            _res = invalid_for_stmt_var;
 6515|      0|            goto done;
 6516|      0|        }
 6517|    715|        p->mark = _mark;
 6518|    715|        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6519|    715|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_stmt"));
 6520|    715|    }
 6521|  2.81k|    { // 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
 6522|  2.81k|        if (p->error_indicator) {
  ------------------
  |  Branch (6522:13): [True: 17, False: 2.80k]
  ------------------
 6523|     17|            p->level--;
 6524|     17|            return NULL;
 6525|     17|        }
 6526|  2.80k|        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
 6527|  2.80k|        int _cut_var = 0;
 6528|  2.80k|        Token * _keyword;
 6529|  2.80k|        Token * _keyword_1;
 6530|  2.80k|        Token * _literal;
 6531|  2.80k|        asdl_stmt_seq* b;
 6532|  2.80k|        void *el;
 6533|  2.80k|        expr_ty ex;
 6534|  2.80k|        expr_ty t;
 6535|  2.80k|        void *tc;
 6536|  2.80k|        if (
 6537|  2.80k|            (_keyword = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (6537:13): [True: 1.90k, False: 896]
  ------------------
 6538|  1.90k|            &&
 6539|  1.90k|            (t = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (6539:13): [True: 1.87k, False: 29]
  ------------------
 6540|  1.87k|            &&
 6541|  1.87k|            (_keyword_1 = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (6541:13): [True: 1.85k, False: 23]
  ------------------
 6542|  1.85k|            &&
 6543|  1.85k|            (_cut_var = 1)
  ------------------
  |  Branch (6543:13): [True: 1.85k, False: 0]
  ------------------
 6544|  1.85k|            &&
 6545|  1.85k|            (ex = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (6545:13): [True: 1.84k, False: 9]
  ------------------
 6546|  1.84k|            &&
 6547|  1.84k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6547:13): [True: 1.84k, False: 4]
  ------------------
 6548|  1.84k|            &&
 6549|  1.84k|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|  1.84k|#define TYPE_COMMENT    57
  ------------------
  |  Branch (6549:13): [True: 1.84k, False: 1]
  ------------------
 6550|  1.84k|            &&
 6551|  1.84k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6551:13): [True: 1.81k, False: 27]
  ------------------
 6552|  1.81k|            &&
 6553|  1.81k|            (el = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (6553:13): [True: 1.81k, False: 2]
  ------------------
 6554|  2.80k|        )
 6555|  1.81k|        {
 6556|  1.81k|            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
 6557|  1.81k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6558|  1.81k|            if (_token == NULL) {
  ------------------
  |  Branch (6558:17): [True: 0, False: 1.81k]
  ------------------
 6559|      0|                p->level--;
 6560|      0|                return NULL;
 6561|      0|            }
 6562|  1.81k|            int _end_lineno = _token->end_lineno;
 6563|  1.81k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.81k]
  |  |  ------------------
  ------------------
 6564|  1.81k|            int _end_col_offset = _token->end_col_offset;
 6565|  1.81k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.81k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.81k]
  |  |  ------------------
  ------------------
 6566|  1.81k|            _res = _PyAST_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA );
  ------------------
  |  |  307|  1.81k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6567|  1.81k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6567:18): [True: 0, False: 1.81k]
  |  Branch (6567:34): [True: 0, False: 1.81k]
  |  Branch (6567:57): [True: 0, False: 0]
  ------------------
 6568|      0|                p->error_indicator = 1;
 6569|      0|                p->level--;
 6570|      0|                return NULL;
 6571|      0|            }
 6572|  1.81k|            goto done;
 6573|  1.81k|        }
 6574|    991|        p->mark = _mark;
 6575|    991|        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6576|    991|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
 6577|    991|        if (_cut_var) {
  ------------------
  |  Branch (6577:13): [True: 43, False: 948]
  ------------------
 6578|     43|            p->level--;
 6579|     43|            return NULL;
 6580|     43|        }
 6581|    991|    }
 6582|    948|    { // 'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?
 6583|    948|        if (p->error_indicator) {
  ------------------
  |  Branch (6583:13): [True: 3, False: 945]
  ------------------
 6584|      3|            p->level--;
 6585|      3|            return NULL;
 6586|      3|        }
 6587|    945|        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
 6588|    945|        int _cut_var = 0;
 6589|    945|        Token * _keyword;
 6590|    945|        Token * _keyword_1;
 6591|    945|        Token * _keyword_2;
 6592|    945|        Token * _literal;
 6593|    945|        asdl_stmt_seq* b;
 6594|    945|        void *el;
 6595|    945|        expr_ty ex;
 6596|    945|        expr_ty t;
 6597|    945|        void *tc;
 6598|    945|        if (
 6599|    945|            (_keyword = _PyPegen_expect_token(p, 716))  // token='async'
  ------------------
  |  Branch (6599:13): [True: 896, False: 49]
  ------------------
 6600|    896|            &&
 6601|    896|            (_keyword_1 = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (6601:13): [True: 586, False: 310]
  ------------------
 6602|    586|            &&
 6603|    586|            (t = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (6603:13): [True: 574, False: 12]
  ------------------
 6604|    574|            &&
 6605|    574|            (_keyword_2 = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (6605:13): [True: 568, False: 6]
  ------------------
 6606|    568|            &&
 6607|    568|            (_cut_var = 1)
  ------------------
  |  Branch (6607:13): [True: 568, False: 0]
  ------------------
 6608|    568|            &&
 6609|    568|            (ex = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (6609:13): [True: 565, False: 3]
  ------------------
 6610|    565|            &&
 6611|    565|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6611:13): [True: 557, False: 8]
  ------------------
 6612|    557|            &&
 6613|    557|            (tc = _PyPegen_expect_token(p, TYPE_COMMENT), !p->error_indicator)  // TYPE_COMMENT?
  ------------------
  |  |   73|    557|#define TYPE_COMMENT    57
  ------------------
  |  Branch (6613:13): [True: 556, False: 1]
  ------------------
 6614|    556|            &&
 6615|    556|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6615:13): [True: 551, False: 5]
  ------------------
 6616|    551|            &&
 6617|    551|            (el = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (6617:13): [True: 549, False: 2]
  ------------------
 6618|    945|        )
 6619|    549|        {
 6620|    549|            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
 6621|    549|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6622|    549|            if (_token == NULL) {
  ------------------
  |  Branch (6622:17): [True: 0, False: 549]
  ------------------
 6623|      0|                p->level--;
 6624|      0|                return NULL;
 6625|      0|            }
 6626|    549|            int _end_lineno = _token->end_lineno;
 6627|    549|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    549|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 549]
  |  |  ------------------
  ------------------
 6628|    549|            int _end_col_offset = _token->end_col_offset;
 6629|    549|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    549|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 549]
  |  |  ------------------
  ------------------
 6630|    549|            _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _PyAST_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) );
  ------------------
  |  |  345|    549|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 6631|    549|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6631:18): [True: 0, False: 549]
  |  Branch (6631:34): [True: 0, False: 549]
  |  Branch (6631:57): [True: 0, False: 0]
  ------------------
 6632|      0|                p->error_indicator = 1;
 6633|      0|                p->level--;
 6634|      0|                return NULL;
 6635|      0|            }
 6636|    549|            goto done;
 6637|    549|        }
 6638|    396|        p->mark = _mark;
 6639|    396|        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6640|    396|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async' 'for' star_targets 'in' ~ star_expressions ':' TYPE_COMMENT? block else_block?"));
 6641|    396|        if (_cut_var) {
  ------------------
  |  Branch (6641:13): [True: 19, False: 377]
  ------------------
 6642|     19|            p->level--;
 6643|     19|            return NULL;
 6644|     19|        }
 6645|    396|    }
 6646|    377|    if (p->call_invalid_rules) { // invalid_for_target
  ------------------
  |  Branch (6646:9): [True: 140, False: 237]
  ------------------
 6647|    140|        if (p->error_indicator) {
  ------------------
  |  Branch (6647:13): [True: 0, False: 140]
  ------------------
 6648|      0|            p->level--;
 6649|      0|            return NULL;
 6650|      0|        }
 6651|    140|        D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
 6652|    140|        void *invalid_for_target_var;
 6653|    140|        if (
 6654|    140|            (invalid_for_target_var = invalid_for_target_rule(p))  // invalid_for_target
  ------------------
  |  Branch (6654:13): [True: 0, False: 140]
  ------------------
 6655|    140|        )
 6656|      0|        {
 6657|      0|            D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target"));
 6658|      0|            _res = invalid_for_target_var;
 6659|      0|            goto done;
 6660|      0|        }
 6661|    140|        p->mark = _mark;
 6662|    140|        D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6663|    140|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target"));
 6664|    140|    }
 6665|    377|    _res = NULL;
 6666|  2.73k|  done:
 6667|  2.73k|    p->level--;
 6668|  2.73k|    return _res;
 6669|    377|}
parser.c:invalid_for_stmt_rule:
25133|    715|{
25134|    715|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.43k|#  define MAXSTACK 6000
  ------------------
  |  Branch (25134:9): [True: 0, False: 715]
  |  Branch (25134:35): [True: 0, False: 715]
  ------------------
25135|      0|        _Pypegen_stack_overflow(p);
25136|      0|    }
25137|    715|    if (p->error_indicator) {
  ------------------
  |  Branch (25137:9): [True: 0, False: 715]
  ------------------
25138|      0|        p->level--;
25139|      0|        return NULL;
25140|      0|    }
25141|    715|    void * _res = NULL;
25142|    715|    int _mark = p->mark;
25143|    715|    { // 'async'? 'for' star_targets 'in' star_expressions NEWLINE
25144|    715|        if (p->error_indicator) {
  ------------------
  |  Branch (25144:13): [True: 0, False: 715]
  ------------------
25145|      0|            p->level--;
25146|      0|            return NULL;
25147|      0|        }
25148|    715|        D(fprintf(stderr, "%*c> invalid_for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions NEWLINE"));
25149|    715|        Token * _keyword;
25150|    715|        Token * _keyword_1;
25151|    715|        void *_opt_var;
25152|    715|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    715|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 715]
  |  |  ------------------
  ------------------
25153|    715|        Token * newline_var;
25154|    715|        expr_ty star_expressions_var;
25155|    715|        expr_ty star_targets_var;
25156|    715|        if (
25157|    715|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (25157:13): [True: 715, False: 0]
  ------------------
25158|    715|            &&
25159|    715|            (_keyword = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (25159:13): [True: 604, False: 111]
  ------------------
25160|    604|            &&
25161|    604|            (star_targets_var = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (25161:13): [True: 581, False: 23]
  ------------------
25162|    581|            &&
25163|    581|            (_keyword_1 = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (25163:13): [True: 568, False: 13]
  ------------------
25164|    568|            &&
25165|    568|            (star_expressions_var = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (25165:13): [True: 563, False: 5]
  ------------------
25166|    563|            &&
25167|    563|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    563|#define NEWLINE         4
  ------------------
  |  Branch (25167:13): [True: 4, False: 559]
  ------------------
25168|    715|        )
25169|      4|        {
25170|      4|            D(fprintf(stderr, "%*c+ invalid_for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions NEWLINE"));
25171|      4|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      4|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
25172|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25172:18): [True: 4, False: 0]
  |  Branch (25172:34): [True: 0, False: 0]
  |  Branch (25172:57): [True: 4, False: 0]
  ------------------
25173|      4|                p->error_indicator = 1;
25174|      4|                p->level--;
25175|      4|                return NULL;
25176|      4|            }
25177|      0|            goto done;
25178|      4|        }
25179|    711|        p->mark = _mark;
25180|    711|        D(fprintf(stderr, "%*c%s invalid_for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25181|    711|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions NEWLINE"));
25182|    711|    }
25183|      0|    { // 'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT
25184|    711|        if (p->error_indicator) {
  ------------------
  |  Branch (25184:13): [True: 7, False: 704]
  ------------------
25185|      7|            p->level--;
25186|      7|            return NULL;
25187|      7|        }
25188|    704|        D(fprintf(stderr, "%*c> invalid_for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
25189|    704|        Token * _keyword;
25190|    704|        Token * _literal;
25191|    704|        void *_opt_var;
25192|    704|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    704|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 704]
  |  |  ------------------
  ------------------
25193|    704|        Token * a;
25194|    704|        Token * newline_var;
25195|    704|        expr_ty star_expressions_var;
25196|    704|        expr_ty star_targets_var;
25197|    704|        if (
25198|    704|            (_opt_var = _PyPegen_expect_token(p, 716), !p->error_indicator)  // 'async'?
  ------------------
  |  Branch (25198:13): [True: 704, False: 0]
  ------------------
25199|    704|            &&
25200|    704|            (a = _PyPegen_expect_token(p, 712))  // token='for'
  ------------------
  |  Branch (25200:13): [True: 593, False: 111]
  ------------------
25201|    593|            &&
25202|    593|            (star_targets_var = star_targets_rule(p))  // star_targets
  ------------------
  |  Branch (25202:13): [True: 577, False: 16]
  ------------------
25203|    577|            &&
25204|    577|            (_keyword = _PyPegen_expect_token(p, 713))  // token='in'
  ------------------
  |  Branch (25204:13): [True: 564, False: 13]
  ------------------
25205|    564|            &&
25206|    564|            (star_expressions_var = star_expressions_rule(p))  // star_expressions
  ------------------
  |  Branch (25206:13): [True: 559, False: 5]
  ------------------
25207|    559|            &&
25208|    559|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25208:13): [True: 555, False: 4]
  ------------------
25209|    555|            &&
25210|    555|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    555|#define NEWLINE         4
  ------------------
  |  Branch (25210:13): [True: 341, False: 214]
  ------------------
25211|    341|            &&
25212|    341|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    341|#define INDENT          5
  ------------------
  |  Branch (25212:13): [True: 6, False: 335]
  ------------------
25213|    704|        )
25214|      6|        {
25215|      6|            D(fprintf(stderr, "%*c+ invalid_for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
25216|      6|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'for' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      6|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
25217|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25217:18): [True: 6, False: 0]
  |  Branch (25217:34): [True: 0, False: 0]
  |  Branch (25217:57): [True: 6, False: 0]
  ------------------
25218|      6|                p->error_indicator = 1;
25219|      6|                p->level--;
25220|      6|                return NULL;
25221|      6|            }
25222|      0|            goto done;
25223|      6|        }
25224|    698|        p->mark = _mark;
25225|    698|        D(fprintf(stderr, "%*c%s invalid_for_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25226|    698|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'async'? 'for' star_targets 'in' star_expressions ':' NEWLINE !INDENT"));
25227|    698|    }
25228|    698|    _res = NULL;
25229|    698|  done:
25230|    698|    p->level--;
25231|    698|    return _res;
25232|    698|}
parser.c:try_stmt_rule:
 7050|  9.52k|{
 7051|  9.52k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  19.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7051:9): [True: 0, False: 9.52k]
  |  Branch (7051:35): [True: 0, False: 9.52k]
  ------------------
 7052|      0|        _Pypegen_stack_overflow(p);
 7053|      0|    }
 7054|  9.52k|    if (p->error_indicator) {
  ------------------
  |  Branch (7054:9): [True: 0, False: 9.52k]
  ------------------
 7055|      0|        p->level--;
 7056|      0|        return NULL;
 7057|      0|    }
 7058|  9.52k|    stmt_ty _res = NULL;
 7059|  9.52k|    int _mark = p->mark;
 7060|  9.52k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (7060:9): [True: 0, False: 9.52k]
  |  Branch (7060:31): [True: 0, False: 0]
  ------------------
 7061|      0|        p->error_indicator = 1;
 7062|      0|        p->level--;
 7063|      0|        return NULL;
 7064|      0|    }
 7065|  9.52k|    int _start_lineno = p->tokens[_mark]->lineno;
 7066|  9.52k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  9.52k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.52k]
  |  |  ------------------
  ------------------
 7067|  9.52k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 7068|  9.52k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  9.52k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9.52k]
  |  |  ------------------
  ------------------
 7069|  9.52k|    if (p->call_invalid_rules) { // invalid_try_stmt
  ------------------
  |  Branch (7069:9): [True: 2.21k, False: 7.31k]
  ------------------
 7070|  2.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (7070:13): [True: 0, False: 2.21k]
  ------------------
 7071|      0|            p->level--;
 7072|      0|            return NULL;
 7073|      0|        }
 7074|  2.21k|        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt"));
 7075|  2.21k|        void *invalid_try_stmt_var;
 7076|  2.21k|        if (
 7077|  2.21k|            (invalid_try_stmt_var = invalid_try_stmt_rule(p))  // invalid_try_stmt
  ------------------
  |  Branch (7077:13): [True: 0, False: 2.21k]
  ------------------
 7078|  2.21k|        )
 7079|      0|        {
 7080|      0|            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt"));
 7081|      0|            _res = invalid_try_stmt_var;
 7082|      0|            goto done;
 7083|      0|        }
 7084|  2.21k|        p->mark = _mark;
 7085|  2.21k|        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 7086|  2.21k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_try_stmt"));
 7087|  2.21k|    }
 7088|  9.52k|    { // 'try' &&':' block finally_block
 7089|  9.52k|        if (p->error_indicator) {
  ------------------
  |  Branch (7089:13): [True: 134, False: 9.39k]
  ------------------
 7090|    134|            p->level--;
 7091|    134|            return NULL;
 7092|    134|        }
 7093|  9.39k|        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block"));
 7094|  9.39k|        Token * _keyword;
 7095|  9.39k|        Token * _literal;
 7096|  9.39k|        asdl_stmt_seq* b;
 7097|  9.39k|        asdl_stmt_seq* f;
 7098|  9.39k|        if (
 7099|  9.39k|            (_keyword = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (7099:13): [True: 9.39k, False: 0]
  ------------------
 7100|  9.39k|            &&
 7101|  9.39k|            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
  ------------------
  |  Branch (7101:13): [True: 9.39k, False: 5]
  ------------------
 7102|  9.39k|            &&
 7103|  9.39k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7103:13): [True: 9.25k, False: 140]
  ------------------
 7104|  9.25k|            &&
 7105|  9.25k|            (f = finally_block_rule(p))  // finally_block
  ------------------
  |  Branch (7105:13): [True: 1.93k, False: 7.31k]
  ------------------
 7106|  9.39k|        )
 7107|  1.93k|        {
 7108|  1.93k|            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block"));
 7109|  1.93k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7110|  1.93k|            if (_token == NULL) {
  ------------------
  |  Branch (7110:17): [True: 0, False: 1.93k]
  ------------------
 7111|      0|                p->level--;
 7112|      0|                return NULL;
 7113|      0|            }
 7114|  1.93k|            int _end_lineno = _token->end_lineno;
 7115|  1.93k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.93k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 7116|  1.93k|            int _end_col_offset = _token->end_col_offset;
 7117|  1.93k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.93k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.93k]
  |  |  ------------------
  ------------------
 7118|  1.93k|            _res = _PyAST_Try ( b , NULL , NULL , f , EXTRA );
  ------------------
  |  |  307|  1.93k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7119|  1.93k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7119:18): [True: 0, False: 1.93k]
  |  Branch (7119:34): [True: 0, False: 1.93k]
  |  Branch (7119:57): [True: 0, False: 0]
  ------------------
 7120|      0|                p->error_indicator = 1;
 7121|      0|                p->level--;
 7122|      0|                return NULL;
 7123|      0|            }
 7124|  1.93k|            goto done;
 7125|  1.93k|        }
 7126|  7.46k|        p->mark = _mark;
 7127|  7.46k|        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 7128|  7.46k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block finally_block"));
 7129|  7.46k|    }
 7130|      0|    { // 'try' &&':' block except_block+ else_block? finally_block?
 7131|  7.46k|        if (p->error_indicator) {
  ------------------
  |  Branch (7131:13): [True: 40, False: 7.42k]
  ------------------
 7132|     40|            p->level--;
 7133|     40|            return NULL;
 7134|     40|        }
 7135|  7.42k|        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
 7136|  7.42k|        Token * _keyword;
 7137|  7.42k|        Token * _literal;
 7138|  7.42k|        asdl_stmt_seq* b;
 7139|  7.42k|        void *el;
 7140|  7.42k|        asdl_excepthandler_seq* ex;
 7141|  7.42k|        void *f;
 7142|  7.42k|        if (
 7143|  7.42k|            (_keyword = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (7143:13): [True: 7.42k, False: 0]
  ------------------
 7144|  7.42k|            &&
 7145|  7.42k|            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
  ------------------
  |  Branch (7145:13): [True: 7.42k, False: 0]
  ------------------
 7146|  7.42k|            &&
 7147|  7.42k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7147:13): [True: 7.30k, False: 122]
  ------------------
 7148|  7.30k|            &&
 7149|  7.30k|            (ex = (asdl_excepthandler_seq*)_loop1_36_rule(p))  // except_block+
  ------------------
  |  Branch (7149:13): [True: 3.48k, False: 3.81k]
  ------------------
 7150|  3.48k|            &&
 7151|  3.48k|            (el = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (7151:13): [True: 3.48k, False: 2]
  ------------------
 7152|  3.48k|            &&
 7153|  3.48k|            (f = finally_block_rule(p), !p->error_indicator)  // finally_block?
  ------------------
  |  Branch (7153:13): [True: 3.47k, False: 8]
  ------------------
 7154|  7.42k|        )
 7155|  3.47k|        {
 7156|  3.47k|            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
 7157|  3.47k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7158|  3.47k|            if (_token == NULL) {
  ------------------
  |  Branch (7158:17): [True: 0, False: 3.47k]
  ------------------
 7159|      0|                p->level--;
 7160|      0|                return NULL;
 7161|      0|            }
 7162|  3.47k|            int _end_lineno = _token->end_lineno;
 7163|  3.47k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.47k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.47k]
  |  |  ------------------
  ------------------
 7164|  3.47k|            int _end_col_offset = _token->end_col_offset;
 7165|  3.47k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.47k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.47k]
  |  |  ------------------
  ------------------
 7166|  3.47k|            _res = _PyAST_Try ( b , ex , el , f , EXTRA );
  ------------------
  |  |  307|  3.47k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7167|  3.47k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7167:18): [True: 0, False: 3.47k]
  |  Branch (7167:34): [True: 0, False: 3.47k]
  |  Branch (7167:57): [True: 0, False: 0]
  ------------------
 7168|      0|                p->error_indicator = 1;
 7169|      0|                p->level--;
 7170|      0|                return NULL;
 7171|      0|            }
 7172|  3.47k|            goto done;
 7173|  3.47k|        }
 7174|  3.95k|        p->mark = _mark;
 7175|  3.95k|        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 7176|  3.95k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?"));
 7177|  3.95k|    }
 7178|      0|    { // 'try' &&':' block except_star_block+ else_block? finally_block?
 7179|  3.95k|        if (p->error_indicator) {
  ------------------
  |  Branch (7179:13): [True: 14, False: 3.93k]
  ------------------
 7180|     14|            p->level--;
 7181|     14|            return NULL;
 7182|     14|        }
 7183|  3.93k|        D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_star_block+ else_block? finally_block?"));
 7184|  3.93k|        Token * _keyword;
 7185|  3.93k|        Token * _literal;
 7186|  3.93k|        asdl_stmt_seq* b;
 7187|  3.93k|        void *el;
 7188|  3.93k|        asdl_excepthandler_seq* ex;
 7189|  3.93k|        void *f;
 7190|  3.93k|        if (
 7191|  3.93k|            (_keyword = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (7191:13): [True: 3.93k, False: 0]
  ------------------
 7192|  3.93k|            &&
 7193|  3.93k|            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
  ------------------
  |  Branch (7193:13): [True: 3.93k, False: 0]
  ------------------
 7194|  3.93k|            &&
 7195|  3.93k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7195:13): [True: 3.81k, False: 122]
  ------------------
 7196|  3.81k|            &&
 7197|  3.81k|            (ex = (asdl_excepthandler_seq*)_loop1_37_rule(p))  // except_star_block+
  ------------------
  |  Branch (7197:13): [True: 3.56k, False: 246]
  ------------------
 7198|  3.56k|            &&
 7199|  3.56k|            (el = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (7199:13): [True: 3.56k, False: 1]
  ------------------
 7200|  3.56k|            &&
 7201|  3.56k|            (f = finally_block_rule(p), !p->error_indicator)  // finally_block?
  ------------------
  |  Branch (7201:13): [True: 3.56k, False: 1]
  ------------------
 7202|  3.93k|        )
 7203|  3.56k|        {
 7204|  3.56k|            D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_star_block+ else_block? finally_block?"));
 7205|  3.56k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7206|  3.56k|            if (_token == NULL) {
  ------------------
  |  Branch (7206:17): [True: 0, False: 3.56k]
  ------------------
 7207|      0|                p->level--;
 7208|      0|                return NULL;
 7209|      0|            }
 7210|  3.56k|            int _end_lineno = _token->end_lineno;
 7211|  3.56k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.56k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.56k]
  |  |  ------------------
  ------------------
 7212|  3.56k|            int _end_col_offset = _token->end_col_offset;
 7213|  3.56k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.56k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.56k]
  |  |  ------------------
  ------------------
 7214|  3.56k|            _res = CHECK_VERSION ( stmt_ty , 11 , "Exception groups are" , _PyAST_TryStar ( b , ex , el , f , EXTRA ) );
  ------------------
  |  |  345|  3.56k|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 7215|  3.56k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7215:18): [True: 0, False: 3.56k]
  |  Branch (7215:34): [True: 0, False: 3.56k]
  |  Branch (7215:57): [True: 0, False: 0]
  ------------------
 7216|      0|                p->error_indicator = 1;
 7217|      0|                p->level--;
 7218|      0|                return NULL;
 7219|      0|            }
 7220|  3.56k|            goto done;
 7221|  3.56k|        }
 7222|    370|        p->mark = _mark;
 7223|    370|        D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 7224|    370|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block except_star_block+ else_block? finally_block?"));
 7225|    370|    }
 7226|    370|    _res = NULL;
 7227|  9.34k|  done:
 7228|  9.34k|    p->level--;
 7229|  9.34k|    return _res;
 7230|    370|}
parser.c:invalid_try_stmt_rule:
23603|  2.21k|{
23604|  2.21k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.42k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23604:9): [True: 0, False: 2.21k]
  |  Branch (23604:35): [True: 0, False: 2.21k]
  ------------------
23605|      0|        _Pypegen_stack_overflow(p);
23606|      0|    }
23607|  2.21k|    if (p->error_indicator) {
  ------------------
  |  Branch (23607:9): [True: 0, False: 2.21k]
  ------------------
23608|      0|        p->level--;
23609|      0|        return NULL;
23610|      0|    }
23611|  2.21k|    void * _res = NULL;
23612|  2.21k|    int _mark = p->mark;
23613|  2.21k|    { // 'try' ':' NEWLINE !INDENT
23614|  2.21k|        if (p->error_indicator) {
  ------------------
  |  Branch (23614:13): [True: 0, False: 2.21k]
  ------------------
23615|      0|            p->level--;
23616|      0|            return NULL;
23617|      0|        }
23618|  2.21k|        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
23619|  2.21k|        Token * _literal;
23620|  2.21k|        Token * a;
23621|  2.21k|        Token * newline_var;
23622|  2.21k|        if (
23623|  2.21k|            (a = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (23623:13): [True: 2.21k, False: 0]
  ------------------
23624|  2.21k|            &&
23625|  2.21k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23625:13): [True: 2.21k, False: 1]
  ------------------
23626|  2.21k|            &&
23627|  2.21k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  2.21k|#define NEWLINE         4
  ------------------
  |  Branch (23627:13): [True: 708, False: 1.50k]
  ------------------
23628|    708|            &&
23629|    708|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    708|#define INDENT          5
  ------------------
  |  Branch (23629:13): [True: 2, False: 706]
  ------------------
23630|  2.21k|        )
23631|      2|        {
23632|      2|            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
23633|      2|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'try' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      2|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
23634|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23634:18): [True: 2, False: 0]
  |  Branch (23634:34): [True: 0, False: 0]
  |  Branch (23634:57): [True: 2, False: 0]
  ------------------
23635|      2|                p->error_indicator = 1;
23636|      2|                p->level--;
23637|      2|                return NULL;
23638|      2|            }
23639|      0|            goto done;
23640|      2|        }
23641|  2.20k|        p->mark = _mark;
23642|  2.20k|        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23643|  2.20k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' NEWLINE !INDENT"));
23644|  2.20k|    }
23645|      0|    { // 'try' ':' block !('except' | 'finally')
23646|  2.20k|        if (p->error_indicator) {
  ------------------
  |  Branch (23646:13): [True: 1, False: 2.20k]
  ------------------
23647|      1|            p->level--;
23648|      1|            return NULL;
23649|      1|        }
23650|  2.20k|        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
23651|  2.20k|        Token * _keyword;
23652|  2.20k|        Token * _literal;
23653|  2.20k|        asdl_stmt_seq* block_var;
23654|  2.20k|        if (
23655|  2.20k|            (_keyword = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (23655:13): [True: 2.20k, False: 0]
  ------------------
23656|  2.20k|            &&
23657|  2.20k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23657:13): [True: 2.20k, False: 1]
  ------------------
23658|  2.20k|            &&
23659|  2.20k|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (23659:13): [True: 2.12k, False: 79]
  ------------------
23660|  2.12k|            &&
23661|  2.12k|            _PyPegen_lookahead(0, _tmp_142_rule, p)
  ------------------
  |  Branch (23661:13): [True: 27, False: 2.10k]
  ------------------
23662|  2.20k|        )
23663|     27|        {
23664|     27|            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
23665|     27|            _res = RAISE_SYNTAX_ERROR ( "expected 'except' or 'finally' block" );
  ------------------
  |  |  233|     27|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
23666|     27|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23666:18): [True: 27, False: 0]
  |  Branch (23666:34): [True: 0, False: 0]
  |  Branch (23666:57): [True: 27, False: 0]
  ------------------
23667|     27|                p->error_indicator = 1;
23668|     27|                p->level--;
23669|     27|                return NULL;
23670|     27|            }
23671|      0|            goto done;
23672|     27|        }
23673|  2.18k|        p->mark = _mark;
23674|  2.18k|        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23675|  2.18k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block !('except' | 'finally')"));
23676|  2.18k|    }
23677|      0|    { // 'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'
23678|  2.18k|        if (p->error_indicator) {
  ------------------
  |  Branch (23678:13): [True: 24, False: 2.15k]
  ------------------
23679|     24|            p->level--;
23680|     24|            return NULL;
23681|     24|        }
23682|  2.15k|        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'"));
23683|  2.15k|        Token * _keyword;
23684|  2.15k|        Token * _literal;
23685|  2.15k|        Token * _literal_1;
23686|  2.15k|        asdl_seq * _loop0_143_var;
23687|  2.15k|        asdl_seq * _loop1_36_var;
23688|  2.15k|        void *_opt_var;
23689|  2.15k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  2.15k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.15k]
  |  |  ------------------
  ------------------
23690|  2.15k|        Token * a;
23691|  2.15k|        Token * b;
23692|  2.15k|        expr_ty expression_var;
23693|  2.15k|        if (
23694|  2.15k|            (_keyword = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (23694:13): [True: 2.15k, False: 0]
  ------------------
23695|  2.15k|            &&
23696|  2.15k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23696:13): [True: 2.15k, False: 1]
  ------------------
23697|  2.15k|            &&
23698|  2.15k|            (_loop0_143_var = _loop0_143_rule(p))  // block*
  ------------------
  |  Branch (23698:13): [True: 2.15k, False: 0]
  ------------------
23699|  2.15k|            &&
23700|  2.15k|            (_loop1_36_var = _loop1_36_rule(p))  // except_block+
  ------------------
  |  Branch (23700:13): [True: 828, False: 1.32k]
  ------------------
23701|    828|            &&
23702|    828|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23702:13): [True: 12, False: 816]
  ------------------
23703|     12|            &&
23704|     12|            (b = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (23704:13): [True: 5, False: 7]
  ------------------
23705|      5|            &&
23706|      5|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (23706:13): [True: 3, False: 2]
  ------------------
23707|      3|            &&
23708|      3|            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (23708:13): [True: 2, False: 1]
  ------------------
23709|      2|            &&
23710|      2|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23710:13): [True: 1, False: 1]
  ------------------
23711|  2.15k|        )
23712|      1|        {
23713|      1|            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'"));
23714|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "cannot have both 'except' and 'except*' on the same 'try'" );
  ------------------
  |  |  237|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23715|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23715:18): [True: 1, False: 0]
  |  Branch (23715:34): [True: 0, False: 0]
  |  Branch (23715:57): [True: 1, False: 0]
  ------------------
23716|      1|                p->error_indicator = 1;
23717|      1|                p->level--;
23718|      1|                return NULL;
23719|      1|            }
23720|      0|            goto done;
23721|      1|        }
23722|  2.15k|        p->mark = _mark;
23723|  2.15k|        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23724|  2.15k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block* except_block+ 'except' '*' expression ['as' NAME] ':'"));
23725|  2.15k|    }
23726|      0|    { // 'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'
23727|  2.15k|        if (p->error_indicator) {
  ------------------
  |  Branch (23727:13): [True: 36, False: 2.12k]
  ------------------
23728|     36|            p->level--;
23729|     36|            return NULL;
23730|     36|        }
23731|  2.12k|        D(fprintf(stderr, "%*c> invalid_try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'"));
23732|  2.12k|        Token * _keyword;
23733|  2.12k|        Token * _literal;
23734|  2.12k|        Token * _literal_1;
23735|  2.12k|        asdl_seq * _loop0_143_var;
23736|  2.12k|        asdl_seq * _loop1_37_var;
23737|  2.12k|        void *_opt_var;
23738|  2.12k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  2.12k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.12k]
  |  |  ------------------
  ------------------
23739|  2.12k|        Token * a;
23740|  2.12k|        if (
23741|  2.12k|            (_keyword = _PyPegen_expect_token(p, 674))  // token='try'
  ------------------
  |  Branch (23741:13): [True: 2.12k, False: 0]
  ------------------
23742|  2.12k|            &&
23743|  2.12k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23743:13): [True: 2.11k, False: 1]
  ------------------
23744|  2.11k|            &&
23745|  2.11k|            (_loop0_143_var = _loop0_143_rule(p))  // block*
  ------------------
  |  Branch (23745:13): [True: 2.11k, False: 0]
  ------------------
23746|  2.11k|            &&
23747|  2.11k|            (_loop1_37_var = _loop1_37_rule(p))  // except_star_block+
  ------------------
  |  Branch (23747:13): [True: 862, False: 1.25k]
  ------------------
23748|    862|            &&
23749|    862|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23749:13): [True: 11, False: 851]
  ------------------
23750|     11|            &&
23751|     11|            (_opt_var = _tmp_144_rule(p), !p->error_indicator)  // [expression ['as' NAME]]
  ------------------
  |  Branch (23751:13): [True: 9, False: 2]
  ------------------
23752|      9|            &&
23753|      9|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23753:13): [True: 1, False: 8]
  ------------------
23754|  2.12k|        )
23755|      1|        {
23756|      1|            D(fprintf(stderr, "%*c+ invalid_try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'"));
23757|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot have both 'except' and 'except*' on the same 'try'" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23758|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23758:18): [True: 1, False: 0]
  |  Branch (23758:34): [True: 0, False: 0]
  |  Branch (23758:57): [True: 1, False: 0]
  ------------------
23759|      1|                p->error_indicator = 1;
23760|      1|                p->level--;
23761|      1|                return NULL;
23762|      1|            }
23763|      0|            goto done;
23764|      1|        }
23765|  2.11k|        p->mark = _mark;
23766|  2.11k|        D(fprintf(stderr, "%*c%s invalid_try_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23767|  2.11k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' ':' block* except_star_block+ 'except' [expression ['as' NAME]] ':'"));
23768|  2.11k|    }
23769|  2.11k|    _res = NULL;
23770|  2.11k|  done:
23771|  2.11k|    p->level--;
23772|  2.11k|    return _res;
23773|  2.11k|}
parser.c:_tmp_142_rule:
36077|  2.12k|{
36078|  2.12k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.25k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36078:9): [True: 0, False: 2.12k]
  |  Branch (36078:35): [True: 0, False: 2.12k]
  ------------------
36079|      0|        _Pypegen_stack_overflow(p);
36080|      0|    }
36081|  2.12k|    if (p->error_indicator) {
  ------------------
  |  Branch (36081:9): [True: 0, False: 2.12k]
  ------------------
36082|      0|        p->level--;
36083|      0|        return NULL;
36084|      0|    }
36085|  2.12k|    void * _res = NULL;
36086|  2.12k|    int _mark = p->mark;
36087|  2.12k|    { // 'except'
36088|  2.12k|        if (p->error_indicator) {
  ------------------
  |  Branch (36088:13): [True: 0, False: 2.12k]
  ------------------
36089|      0|            p->level--;
36090|      0|            return NULL;
36091|      0|        }
36092|  2.12k|        D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'"));
36093|  2.12k|        Token * _keyword;
36094|  2.12k|        if (
36095|  2.12k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (36095:13): [True: 1.79k, False: 330]
  ------------------
36096|  2.12k|        )
36097|  1.79k|        {
36098|  1.79k|            D(fprintf(stderr, "%*c+ _tmp_142[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'"));
36099|  1.79k|            _res = _keyword;
36100|  1.79k|            goto done;
36101|  1.79k|        }
36102|    330|        p->mark = _mark;
36103|    330|        D(fprintf(stderr, "%*c%s _tmp_142[%d-%d]: %s failed!\n", p->level, ' ',
36104|    330|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except'"));
36105|    330|    }
36106|      0|    { // 'finally'
36107|    330|        if (p->error_indicator) {
  ------------------
  |  Branch (36107:13): [True: 0, False: 330]
  ------------------
36108|      0|            p->level--;
36109|      0|            return NULL;
36110|      0|        }
36111|    330|        D(fprintf(stderr, "%*c> _tmp_142[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'"));
36112|    330|        Token * _keyword;
36113|    330|        if (
36114|    330|            (_keyword = _PyPegen_expect_token(p, 691))  // token='finally'
  ------------------
  |  Branch (36114:13): [True: 303, False: 27]
  ------------------
36115|    330|        )
36116|    303|        {
36117|    303|            D(fprintf(stderr, "%*c+ _tmp_142[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'"));
36118|    303|            _res = _keyword;
36119|    303|            goto done;
36120|    303|        }
36121|     27|        p->mark = _mark;
36122|     27|        D(fprintf(stderr, "%*c%s _tmp_142[%d-%d]: %s failed!\n", p->level, ' ',
36123|     27|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally'"));
36124|     27|    }
36125|     27|    _res = NULL;
36126|  2.12k|  done:
36127|  2.12k|    p->level--;
36128|  2.12k|    return _res;
36129|     27|}
parser.c:_loop0_143_rule:
36134|  4.27k|{
36135|  4.27k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.55k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36135:9): [True: 0, False: 4.27k]
  |  Branch (36135:35): [True: 0, False: 4.27k]
  ------------------
36136|      0|        _Pypegen_stack_overflow(p);
36137|      0|    }
36138|  4.27k|    if (p->error_indicator) {
  ------------------
  |  Branch (36138:9): [True: 0, False: 4.27k]
  ------------------
36139|      0|        p->level--;
36140|      0|        return NULL;
36141|      0|    }
36142|  4.27k|    void *_res = NULL;
36143|  4.27k|    int _mark = p->mark;
36144|  4.27k|    void **_children = PyMem_Malloc(sizeof(void *));
36145|  4.27k|    if (!_children) {
  ------------------
  |  Branch (36145:9): [True: 0, False: 4.27k]
  ------------------
36146|      0|        p->error_indicator = 1;
36147|      0|        PyErr_NoMemory();
36148|      0|        p->level--;
36149|      0|        return NULL;
36150|      0|    }
36151|  4.27k|    Py_ssize_t _children_capacity = 1;
36152|  4.27k|    Py_ssize_t _n = 0;
36153|  4.27k|    { // block
36154|  4.27k|        if (p->error_indicator) {
  ------------------
  |  Branch (36154:13): [True: 0, False: 4.27k]
  ------------------
36155|      0|            p->level--;
36156|      0|            return NULL;
36157|      0|        }
36158|  4.27k|        D(fprintf(stderr, "%*c> _loop0_143[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "block"));
36159|  4.27k|        asdl_stmt_seq* block_var;
36160|  4.27k|        while (
36161|  8.44k|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (36161:13): [True: 4.17k, False: 4.27k]
  ------------------
36162|  4.27k|        )
36163|  4.17k|        {
36164|  4.17k|            _res = block_var;
36165|  4.17k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (36165:17): [True: 0, False: 4.17k]
  ------------------
36166|      0|                _children_capacity *= 2;
36167|      0|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
36168|      0|                if (!_new_children) {
  ------------------
  |  Branch (36168:21): [True: 0, False: 0]
  ------------------
36169|      0|                    PyMem_Free(_children);
36170|      0|                    p->error_indicator = 1;
36171|      0|                    PyErr_NoMemory();
36172|      0|                    p->level--;
36173|      0|                    return NULL;
36174|      0|                }
36175|      0|                _children = _new_children;
36176|      0|            }
36177|  4.17k|            _children[_n++] = _res;
36178|  4.17k|            _mark = p->mark;
36179|  4.17k|        }
36180|  4.27k|        p->mark = _mark;
36181|  4.27k|        D(fprintf(stderr, "%*c%s _loop0_143[%d-%d]: %s failed!\n", p->level, ' ',
36182|  4.27k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "block"));
36183|  4.27k|    }
36184|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
36185|  4.27k|    if (!_seq) {
  ------------------
  |  Branch (36185:9): [True: 0, False: 4.27k]
  ------------------
36186|      0|        PyMem_Free(_children);
36187|      0|        p->error_indicator = 1;
36188|      0|        PyErr_NoMemory();
36189|      0|        p->level--;
36190|      0|        return NULL;
36191|      0|    }
36192|  8.44k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  4.17k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  8.44k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (36192:28): [True: 4.17k, False: 4.27k]
  ------------------
36193|  4.27k|    PyMem_Free(_children);
36194|  4.27k|    p->level--;
36195|  4.27k|    return _seq;
36196|  4.27k|}
parser.c:_tmp_144_rule:
36201|     11|{
36202|     11|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|     22|#  define MAXSTACK 6000
  ------------------
  |  Branch (36202:9): [True: 0, False: 11]
  |  Branch (36202:35): [True: 0, False: 11]
  ------------------
36203|      0|        _Pypegen_stack_overflow(p);
36204|      0|    }
36205|     11|    if (p->error_indicator) {
  ------------------
  |  Branch (36205:9): [True: 0, False: 11]
  ------------------
36206|      0|        p->level--;
36207|      0|        return NULL;
36208|      0|    }
36209|     11|    void * _res = NULL;
36210|     11|    int _mark = p->mark;
36211|     11|    { // expression ['as' NAME]
36212|     11|        if (p->error_indicator) {
  ------------------
  |  Branch (36212:13): [True: 0, False: 11]
  ------------------
36213|      0|            p->level--;
36214|      0|            return NULL;
36215|      0|        }
36216|     11|        D(fprintf(stderr, "%*c> _tmp_144[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]"));
36217|     11|        void *_opt_var;
36218|     11|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|     11|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 11]
  |  |  ------------------
  ------------------
36219|     11|        expr_ty expression_var;
36220|     11|        if (
36221|     11|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (36221:13): [True: 2, False: 9]
  ------------------
36222|      2|            &&
36223|      2|            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (36223:13): [True: 1, False: 1]
  ------------------
36224|     11|        )
36225|      1|        {
36226|      1|            D(fprintf(stderr, "%*c+ _tmp_144[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ['as' NAME]"));
36227|      1|            _res = _PyPegen_dummy_name(p, expression_var, _opt_var);
36228|      1|            goto done;
36229|      1|        }
36230|     10|        p->mark = _mark;
36231|     10|        D(fprintf(stderr, "%*c%s _tmp_144[%d-%d]: %s failed!\n", p->level, ' ',
36232|     10|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ['as' NAME]"));
36233|     10|    }
36234|     10|    _res = NULL;
36235|     11|  done:
36236|     11|    p->level--;
36237|     11|    return _res;
36238|     10|}
parser.c:finally_block_rule:
 7690|  16.2k|{
 7691|  16.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  32.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7691:9): [True: 0, False: 16.2k]
  |  Branch (7691:35): [True: 0, False: 16.2k]
  ------------------
 7692|      0|        _Pypegen_stack_overflow(p);
 7693|      0|    }
 7694|  16.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (7694:9): [True: 0, False: 16.2k]
  ------------------
 7695|      0|        p->level--;
 7696|      0|        return NULL;
 7697|      0|    }
 7698|  16.2k|    asdl_stmt_seq* _res = NULL;
 7699|  16.2k|    int _mark = p->mark;
 7700|  16.2k|    if (p->call_invalid_rules) { // invalid_finally_stmt
  ------------------
  |  Branch (7700:9): [True: 3.71k, False: 12.5k]
  ------------------
 7701|  3.71k|        if (p->error_indicator) {
  ------------------
  |  Branch (7701:13): [True: 0, False: 3.71k]
  ------------------
 7702|      0|            p->level--;
 7703|      0|            return NULL;
 7704|      0|        }
 7705|  3.71k|        D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt"));
 7706|  3.71k|        void *invalid_finally_stmt_var;
 7707|  3.71k|        if (
 7708|  3.71k|            (invalid_finally_stmt_var = invalid_finally_stmt_rule(p))  // invalid_finally_stmt
  ------------------
  |  Branch (7708:13): [True: 0, False: 3.71k]
  ------------------
 7709|  3.71k|        )
 7710|      0|        {
 7711|      0|            D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt"));
 7712|      0|            _res = invalid_finally_stmt_var;
 7713|      0|            goto done;
 7714|      0|        }
 7715|  3.71k|        p->mark = _mark;
 7716|  3.71k|        D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ',
 7717|  3.71k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_finally_stmt"));
 7718|  3.71k|    }
 7719|  16.2k|    { // 'finally' &&':' block
 7720|  16.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (7720:13): [True: 2, False: 16.2k]
  ------------------
 7721|      2|            p->level--;
 7722|      2|            return NULL;
 7723|      2|        }
 7724|  16.2k|        D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block"));
 7725|  16.2k|        Token * _keyword;
 7726|  16.2k|        Token * _literal;
 7727|  16.2k|        asdl_stmt_seq* a;
 7728|  16.2k|        if (
 7729|  16.2k|            (_keyword = _PyPegen_expect_token(p, 691))  // token='finally'
  ------------------
  |  Branch (7729:13): [True: 3.51k, False: 12.7k]
  ------------------
 7730|  3.51k|            &&
 7731|  3.51k|            (_literal = _PyPegen_expect_forced_token(p, 11, ":"))  // forced_token=':'
  ------------------
  |  Branch (7731:13): [True: 3.51k, False: 3]
  ------------------
 7732|  3.51k|            &&
 7733|  3.51k|            (a = block_rule(p))  // block
  ------------------
  |  Branch (7733:13): [True: 3.40k, False: 112]
  ------------------
 7734|  16.2k|        )
 7735|  3.40k|        {
 7736|  3.40k|            D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block"));
 7737|  3.40k|            _res = a;
 7738|  3.40k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7738:18): [True: 0, False: 3.40k]
  |  Branch (7738:34): [True: 0, False: 3.40k]
  |  Branch (7738:57): [True: 0, False: 0]
  ------------------
 7739|      0|                p->error_indicator = 1;
 7740|      0|                p->level--;
 7741|      0|                return NULL;
 7742|      0|            }
 7743|  3.40k|            goto done;
 7744|  3.40k|        }
 7745|  12.8k|        p->mark = _mark;
 7746|  12.8k|        D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ',
 7747|  12.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' &&':' block"));
 7748|  12.8k|    }
 7749|  12.8k|    _res = NULL;
 7750|  16.2k|  done:
 7751|  16.2k|    p->level--;
 7752|  16.2k|    return _res;
 7753|  12.8k|}
parser.c:invalid_finally_stmt_rule:
24120|  3.71k|{
24121|  3.71k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.43k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24121:9): [True: 0, False: 3.71k]
  |  Branch (24121:35): [True: 0, False: 3.71k]
  ------------------
24122|      0|        _Pypegen_stack_overflow(p);
24123|      0|    }
24124|  3.71k|    if (p->error_indicator) {
  ------------------
  |  Branch (24124:9): [True: 0, False: 3.71k]
  ------------------
24125|      0|        p->level--;
24126|      0|        return NULL;
24127|      0|    }
24128|  3.71k|    void * _res = NULL;
24129|  3.71k|    int _mark = p->mark;
24130|  3.71k|    { // 'finally' ':' NEWLINE !INDENT
24131|  3.71k|        if (p->error_indicator) {
  ------------------
  |  Branch (24131:13): [True: 0, False: 3.71k]
  ------------------
24132|      0|            p->level--;
24133|      0|            return NULL;
24134|      0|        }
24135|  3.71k|        D(fprintf(stderr, "%*c> invalid_finally_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
24136|  3.71k|        Token * _literal;
24137|  3.71k|        Token * a;
24138|  3.71k|        Token * newline_var;
24139|  3.71k|        if (
24140|  3.71k|            (a = _PyPegen_expect_token(p, 691))  // token='finally'
  ------------------
  |  Branch (24140:13): [True: 560, False: 3.15k]
  ------------------
24141|    560|            &&
24142|    560|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24142:13): [True: 560, False: 0]
  ------------------
24143|    560|            &&
24144|    560|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    560|#define NEWLINE         4
  ------------------
  |  Branch (24144:13): [True: 294, False: 266]
  ------------------
24145|    294|            &&
24146|    294|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    294|#define INDENT          5
  ------------------
  |  Branch (24146:13): [True: 2, False: 292]
  ------------------
24147|  3.71k|        )
24148|      2|        {
24149|      2|            D(fprintf(stderr, "%*c+ invalid_finally_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
24150|      2|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'finally' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      2|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24151|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24151:18): [True: 2, False: 0]
  |  Branch (24151:34): [True: 0, False: 0]
  |  Branch (24151:57): [True: 2, False: 0]
  ------------------
24152|      2|                p->error_indicator = 1;
24153|      2|                p->level--;
24154|      2|                return NULL;
24155|      2|            }
24156|      0|            goto done;
24157|      2|        }
24158|  3.71k|        p->mark = _mark;
24159|  3.71k|        D(fprintf(stderr, "%*c%s invalid_finally_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24160|  3.71k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' ':' NEWLINE !INDENT"));
24161|  3.71k|    }
24162|  3.71k|    _res = NULL;
24163|  3.71k|  done:
24164|  3.71k|    p->level--;
24165|  3.71k|    return _res;
24166|  3.71k|}
parser.c:_loop1_36_rule:
29524|  9.45k|{
29525|  9.45k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29525:9): [True: 0, False: 9.45k]
  |  Branch (29525:35): [True: 0, False: 9.45k]
  ------------------
29526|      0|        _Pypegen_stack_overflow(p);
29527|      0|    }
29528|  9.45k|    if (p->error_indicator) {
  ------------------
  |  Branch (29528:9): [True: 0, False: 9.45k]
  ------------------
29529|      0|        p->level--;
29530|      0|        return NULL;
29531|      0|    }
29532|  9.45k|    void *_res = NULL;
29533|  9.45k|    int _mark = p->mark;
29534|  9.45k|    void **_children = PyMem_Malloc(sizeof(void *));
29535|  9.45k|    if (!_children) {
  ------------------
  |  Branch (29535:9): [True: 0, False: 9.45k]
  ------------------
29536|      0|        p->error_indicator = 1;
29537|      0|        PyErr_NoMemory();
29538|      0|        p->level--;
29539|      0|        return NULL;
29540|      0|    }
29541|  9.45k|    Py_ssize_t _children_capacity = 1;
29542|  9.45k|    Py_ssize_t _n = 0;
29543|  9.45k|    { // except_block
29544|  9.45k|        if (p->error_indicator) {
  ------------------
  |  Branch (29544:13): [True: 0, False: 9.45k]
  ------------------
29545|      0|            p->level--;
29546|      0|            return NULL;
29547|      0|        }
29548|  9.45k|        D(fprintf(stderr, "%*c> _loop1_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block"));
29549|  9.45k|        excepthandler_ty except_block_var;
29550|  9.45k|        while (
29551|  15.0k|            (except_block_var = except_block_rule(p))  // except_block
  ------------------
  |  Branch (29551:13): [True: 5.64k, False: 9.45k]
  ------------------
29552|  9.45k|        )
29553|  5.64k|        {
29554|  5.64k|            _res = except_block_var;
29555|  5.64k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29555:17): [True: 771, False: 4.86k]
  ------------------
29556|    771|                _children_capacity *= 2;
29557|    771|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29558|    771|                if (!_new_children) {
  ------------------
  |  Branch (29558:21): [True: 0, False: 771]
  ------------------
29559|      0|                    PyMem_Free(_children);
29560|      0|                    p->error_indicator = 1;
29561|      0|                    PyErr_NoMemory();
29562|      0|                    p->level--;
29563|      0|                    return NULL;
29564|      0|                }
29565|    771|                _children = _new_children;
29566|    771|            }
29567|  5.64k|            _children[_n++] = _res;
29568|  5.64k|            _mark = p->mark;
29569|  5.64k|        }
29570|  9.45k|        p->mark = _mark;
29571|  9.45k|        D(fprintf(stderr, "%*c%s _loop1_36[%d-%d]: %s failed!\n", p->level, ' ',
29572|  9.45k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block"));
29573|  9.45k|    }
29574|  9.45k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (29574:9): [True: 5.13k, False: 4.31k]
  |  Branch (29574:20): [True: 8, False: 4.31k]
  ------------------
29575|  5.14k|        PyMem_Free(_children);
29576|  5.14k|        p->level--;
29577|  5.14k|        return NULL;
29578|  5.14k|    }
29579|  4.31k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29580|  4.31k|    if (!_seq) {
  ------------------
  |  Branch (29580:9): [True: 0, False: 4.31k]
  ------------------
29581|      0|        PyMem_Free(_children);
29582|      0|        p->error_indicator = 1;
29583|      0|        PyErr_NoMemory();
29584|      0|        p->level--;
29585|      0|        return NULL;
29586|      0|    }
29587|  9.93k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  5.62k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  9.93k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29587:28): [True: 5.62k, False: 4.31k]
  ------------------
29588|  4.31k|    PyMem_Free(_children);
29589|  4.31k|    p->level--;
29590|  4.31k|    return _seq;
29591|  4.31k|}
parser.c:except_block_rule:
 7241|  15.0k|{
 7242|  15.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  30.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7242:9): [True: 0, False: 15.0k]
  |  Branch (7242:35): [True: 0, False: 15.0k]
  ------------------
 7243|      0|        _Pypegen_stack_overflow(p);
 7244|      0|    }
 7245|  15.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (7245:9): [True: 0, False: 15.0k]
  ------------------
 7246|      0|        p->level--;
 7247|      0|        return NULL;
 7248|      0|    }
 7249|  15.0k|    excepthandler_ty _res = NULL;
 7250|  15.0k|    int _mark = p->mark;
 7251|  15.0k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (7251:9): [True: 3.49k, False: 11.6k]
  |  Branch (7251:31): [True: 1, False: 3.49k]
  ------------------
 7252|      1|        p->error_indicator = 1;
 7253|      1|        p->level--;
 7254|      1|        return NULL;
 7255|      1|    }
 7256|  15.0k|    int _start_lineno = p->tokens[_mark]->lineno;
 7257|  15.0k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.0k]
  |  |  ------------------
  ------------------
 7258|  15.0k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 7259|  15.0k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.0k]
  |  |  ------------------
  ------------------
 7260|  15.0k|    if (p->call_invalid_rules) { // invalid_except_stmt_indent
  ------------------
  |  Branch (7260:9): [True: 6.06k, False: 9.03k]
  ------------------
 7261|  6.06k|        if (p->error_indicator) {
  ------------------
  |  Branch (7261:13): [True: 0, False: 6.06k]
  ------------------
 7262|      0|            p->level--;
 7263|      0|            return NULL;
 7264|      0|        }
 7265|  6.06k|        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent"));
 7266|  6.06k|        void *invalid_except_stmt_indent_var;
 7267|  6.06k|        if (
 7268|  6.06k|            (invalid_except_stmt_indent_var = invalid_except_stmt_indent_rule(p))  // invalid_except_stmt_indent
  ------------------
  |  Branch (7268:13): [True: 0, False: 6.06k]
  ------------------
 7269|  6.06k|        )
 7270|      0|        {
 7271|      0|            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent"));
 7272|      0|            _res = invalid_except_stmt_indent_var;
 7273|      0|            goto done;
 7274|      0|        }
 7275|  6.06k|        p->mark = _mark;
 7276|  6.06k|        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
 7277|  6.06k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt_indent"));
 7278|  6.06k|    }
 7279|  15.0k|    { // 'except' expression ':' block
 7280|  15.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (7280:13): [True: 7, False: 15.0k]
  ------------------
 7281|      7|            p->level--;
 7282|      7|            return NULL;
 7283|      7|        }
 7284|  15.0k|        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ':' block"));
 7285|  15.0k|        Token * _keyword;
 7286|  15.0k|        Token * _literal;
 7287|  15.0k|        asdl_stmt_seq* b;
 7288|  15.0k|        expr_ty e;
 7289|  15.0k|        if (
 7290|  15.0k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7290:13): [True: 10.3k, False: 4.70k]
  ------------------
 7291|  10.3k|            &&
 7292|  10.3k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (7292:13): [True: 2.51k, False: 7.87k]
  ------------------
 7293|  2.51k|            &&
 7294|  2.51k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7294:13): [True: 2.19k, False: 318]
  ------------------
 7295|  2.19k|            &&
 7296|  2.19k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7296:13): [True: 2.16k, False: 31]
  ------------------
 7297|  15.0k|        )
 7298|  2.16k|        {
 7299|  2.16k|            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ':' block"));
 7300|  2.16k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7301|  2.16k|            if (_token == NULL) {
  ------------------
  |  Branch (7301:17): [True: 0, False: 2.16k]
  ------------------
 7302|      0|                p->level--;
 7303|      0|                return NULL;
 7304|      0|            }
 7305|  2.16k|            int _end_lineno = _token->end_lineno;
 7306|  2.16k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.16k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.16k]
  |  |  ------------------
  ------------------
 7307|  2.16k|            int _end_col_offset = _token->end_col_offset;
 7308|  2.16k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.16k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.16k]
  |  |  ------------------
  ------------------
 7309|  2.16k|            _res = _PyAST_ExceptHandler ( e , NULL , b , EXTRA );
  ------------------
  |  |  307|  2.16k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7310|  2.16k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7310:18): [True: 0, False: 2.16k]
  |  Branch (7310:34): [True: 0, False: 2.16k]
  |  Branch (7310:57): [True: 0, False: 0]
  ------------------
 7311|      0|                p->error_indicator = 1;
 7312|      0|                p->level--;
 7313|      0|                return NULL;
 7314|      0|            }
 7315|  2.16k|            goto done;
 7316|  2.16k|        }
 7317|  12.9k|        p->mark = _mark;
 7318|  12.9k|        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
 7319|  12.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ':' block"));
 7320|  12.9k|    }
 7321|      0|    { // 'except' expression 'as' NAME ':' block
 7322|  12.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (7322:13): [True: 3, False: 12.9k]
  ------------------
 7323|      3|            p->level--;
 7324|      3|            return NULL;
 7325|      3|        }
 7326|  12.9k|        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' NAME ':' block"));
 7327|  12.9k|        Token * _keyword;
 7328|  12.9k|        Token * _keyword_1;
 7329|  12.9k|        Token * _literal;
 7330|  12.9k|        asdl_stmt_seq* b;
 7331|  12.9k|        expr_ty e;
 7332|  12.9k|        expr_ty t;
 7333|  12.9k|        if (
 7334|  12.9k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7334:13): [True: 8.21k, False: 4.70k]
  ------------------
 7335|  8.21k|            &&
 7336|  8.21k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (7336:13): [True: 347, False: 7.86k]
  ------------------
 7337|    347|            &&
 7338|    347|            (_keyword_1 = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (7338:13): [True: 232, False: 115]
  ------------------
 7339|    232|            &&
 7340|    232|            (t = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (7340:13): [True: 226, False: 6]
  ------------------
 7341|    226|            &&
 7342|    226|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7342:13): [True: 211, False: 15]
  ------------------
 7343|    211|            &&
 7344|    211|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7344:13): [True: 203, False: 8]
  ------------------
 7345|  12.9k|        )
 7346|    203|        {
 7347|    203|            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' NAME ':' block"));
 7348|    203|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7349|    203|            if (_token == NULL) {
  ------------------
  |  Branch (7349:17): [True: 0, False: 203]
  ------------------
 7350|      0|                p->level--;
 7351|      0|                return NULL;
 7352|      0|            }
 7353|    203|            int _end_lineno = _token->end_lineno;
 7354|    203|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    203|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 203]
  |  |  ------------------
  ------------------
 7355|    203|            int _end_col_offset = _token->end_col_offset;
 7356|    203|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    203|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 203]
  |  |  ------------------
  ------------------
 7357|    203|            _res = _PyAST_ExceptHandler ( e , ( ( expr_ty ) t ) -> v . Name . id , b , EXTRA );
  ------------------
  |  |  307|    203|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7358|    203|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7358:18): [True: 0, False: 203]
  |  Branch (7358:34): [True: 0, False: 203]
  |  Branch (7358:57): [True: 0, False: 0]
  ------------------
 7359|      0|                p->error_indicator = 1;
 7360|      0|                p->level--;
 7361|      0|                return NULL;
 7362|      0|            }
 7363|    203|            goto done;
 7364|    203|        }
 7365|  12.7k|        p->mark = _mark;
 7366|  12.7k|        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
 7367|  12.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression 'as' NAME ':' block"));
 7368|  12.7k|    }
 7369|      0|    { // 'except' expressions ':' block
 7370|  12.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (7370:13): [True: 3, False: 12.7k]
  ------------------
 7371|      3|            p->level--;
 7372|      3|            return NULL;
 7373|      3|        }
 7374|  12.7k|        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expressions ':' block"));
 7375|  12.7k|        Token * _keyword;
 7376|  12.7k|        Token * _literal;
 7377|  12.7k|        asdl_stmt_seq* b;
 7378|  12.7k|        expr_ty e;
 7379|  12.7k|        if (
 7380|  12.7k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7380:13): [True: 8.01k, False: 4.70k]
  ------------------
 7381|  8.01k|            &&
 7382|  8.01k|            (e = expressions_rule(p))  // expressions
  ------------------
  |  Branch (7382:13): [True: 140, False: 7.87k]
  ------------------
 7383|    140|            &&
 7384|    140|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7384:13): [True: 80, False: 60]
  ------------------
 7385|     80|            &&
 7386|     80|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7386:13): [True: 47, False: 33]
  ------------------
 7387|  12.7k|        )
 7388|     47|        {
 7389|     47|            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expressions ':' block"));
 7390|     47|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7391|     47|            if (_token == NULL) {
  ------------------
  |  Branch (7391:17): [True: 0, False: 47]
  ------------------
 7392|      0|                p->level--;
 7393|      0|                return NULL;
 7394|      0|            }
 7395|     47|            int _end_lineno = _token->end_lineno;
 7396|     47|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     47|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 47]
  |  |  ------------------
  ------------------
 7397|     47|            int _end_col_offset = _token->end_col_offset;
 7398|     47|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     47|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 47]
  |  |  ------------------
  ------------------
 7399|     47|            _res = CHECK_VERSION ( excepthandler_ty , 14 , "except expressions without parentheses are" , _PyAST_ExceptHandler ( e , NULL , b , EXTRA ) );
  ------------------
  |  |  345|     47|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 7400|     47|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7400:18): [True: 0, False: 47]
  |  Branch (7400:34): [True: 0, False: 47]
  |  Branch (7400:57): [True: 0, False: 0]
  ------------------
 7401|      0|                p->error_indicator = 1;
 7402|      0|                p->level--;
 7403|      0|                return NULL;
 7404|      0|            }
 7405|     47|            goto done;
 7406|     47|        }
 7407|  12.6k|        p->mark = _mark;
 7408|  12.6k|        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
 7409|  12.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expressions ':' block"));
 7410|  12.6k|    }
 7411|      0|    { // 'except' ':' block
 7412|  12.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (7412:13): [True: 3, False: 12.6k]
  ------------------
 7413|      3|            p->level--;
 7414|      3|            return NULL;
 7415|      3|        }
 7416|  12.6k|        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
 7417|  12.6k|        Token * _keyword;
 7418|  12.6k|        Token * _literal;
 7419|  12.6k|        asdl_stmt_seq* b;
 7420|  12.6k|        if (
 7421|  12.6k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7421:13): [True: 7.96k, False: 4.70k]
  ------------------
 7422|  7.96k|            &&
 7423|  7.96k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7423:13): [True: 3.25k, False: 4.70k]
  ------------------
 7424|  3.25k|            &&
 7425|  3.25k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7425:13): [True: 3.22k, False: 35]
  ------------------
 7426|  12.6k|        )
 7427|  3.22k|        {
 7428|  3.22k|            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' block"));
 7429|  3.22k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7430|  3.22k|            if (_token == NULL) {
  ------------------
  |  Branch (7430:17): [True: 0, False: 3.22k]
  ------------------
 7431|      0|                p->level--;
 7432|      0|                return NULL;
 7433|      0|            }
 7434|  3.22k|            int _end_lineno = _token->end_lineno;
 7435|  3.22k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.22k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.22k]
  |  |  ------------------
  ------------------
 7436|  3.22k|            int _end_col_offset = _token->end_col_offset;
 7437|  3.22k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.22k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.22k]
  |  |  ------------------
  ------------------
 7438|  3.22k|            _res = _PyAST_ExceptHandler ( NULL , NULL , b , EXTRA );
  ------------------
  |  |  307|  3.22k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7439|  3.22k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7439:18): [True: 0, False: 3.22k]
  |  Branch (7439:34): [True: 0, False: 3.22k]
  |  Branch (7439:57): [True: 0, False: 0]
  ------------------
 7440|      0|                p->error_indicator = 1;
 7441|      0|                p->level--;
 7442|      0|                return NULL;
 7443|      0|            }
 7444|  3.22k|            goto done;
 7445|  3.22k|        }
 7446|  9.43k|        p->mark = _mark;
 7447|  9.43k|        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
 7448|  9.43k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' block"));
 7449|  9.43k|    }
 7450|  9.43k|    if (p->call_invalid_rules) { // invalid_except_stmt
  ------------------
  |  Branch (7450:9): [True: 3.90k, False: 5.53k]
  ------------------
 7451|  3.90k|        if (p->error_indicator) {
  ------------------
  |  Branch (7451:13): [True: 6, False: 3.90k]
  ------------------
 7452|      6|            p->level--;
 7453|      6|            return NULL;
 7454|      6|        }
 7455|  3.90k|        D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt"));
 7456|  3.90k|        void *invalid_except_stmt_var;
 7457|  3.90k|        if (
 7458|  3.90k|            (invalid_except_stmt_var = invalid_except_stmt_rule(p))  // invalid_except_stmt
  ------------------
  |  Branch (7458:13): [True: 0, False: 3.90k]
  ------------------
 7459|  3.90k|        )
 7460|      0|        {
 7461|      0|            D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt"));
 7462|      0|            _res = invalid_except_stmt_var;
 7463|      0|            goto done;
 7464|      0|        }
 7465|  3.90k|        p->mark = _mark;
 7466|  3.90k|        D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ',
 7467|  3.90k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt"));
 7468|  3.90k|    }
 7469|  9.43k|    _res = NULL;
 7470|  15.0k|  done:
 7471|  15.0k|    p->level--;
 7472|  15.0k|    return _res;
 7473|  9.43k|}
parser.c:invalid_except_stmt_indent_rule:
24173|  6.06k|{
24174|  6.06k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  12.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24174:9): [True: 0, False: 6.06k]
  |  Branch (24174:35): [True: 0, False: 6.06k]
  ------------------
24175|      0|        _Pypegen_stack_overflow(p);
24176|      0|    }
24177|  6.06k|    if (p->error_indicator) {
  ------------------
  |  Branch (24177:9): [True: 0, False: 6.06k]
  ------------------
24178|      0|        p->level--;
24179|      0|        return NULL;
24180|      0|    }
24181|  6.06k|    void * _res = NULL;
24182|  6.06k|    int _mark = p->mark;
24183|  6.06k|    { // 'except' expression ['as' NAME] ':' NEWLINE !INDENT
24184|  6.06k|        if (p->error_indicator) {
  ------------------
  |  Branch (24184:13): [True: 0, False: 6.06k]
  ------------------
24185|      0|            p->level--;
24186|      0|            return NULL;
24187|      0|        }
24188|  6.06k|        D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
24189|  6.06k|        Token * _literal;
24190|  6.06k|        void *_opt_var;
24191|  6.06k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  6.06k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 6.06k]
  |  |  ------------------
  ------------------
24192|  6.06k|        Token * a;
24193|  6.06k|        expr_ty expression_var;
24194|  6.06k|        Token * newline_var;
24195|  6.06k|        if (
24196|  6.06k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (24196:13): [True: 4.07k, False: 1.99k]
  ------------------
24197|  4.07k|            &&
24198|  4.07k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (24198:13): [True: 1.10k, False: 2.96k]
  ------------------
24199|  1.10k|            &&
24200|  1.10k|            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (24200:13): [True: 1.10k, False: 1]
  ------------------
24201|  1.10k|            &&
24202|  1.10k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24202:13): [True: 1.03k, False: 68]
  ------------------
24203|  1.03k|            &&
24204|  1.03k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.03k|#define NEWLINE         4
  ------------------
  |  Branch (24204:13): [True: 510, False: 523]
  ------------------
24205|    510|            &&
24206|    510|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    510|#define INDENT          5
  ------------------
  |  Branch (24206:13): [True: 3, False: 507]
  ------------------
24207|  6.06k|        )
24208|      3|        {
24209|      3|            D(fprintf(stderr, "%*c+ invalid_except_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
24210|      3|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      3|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24211|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24211:18): [True: 3, False: 0]
  |  Branch (24211:34): [True: 0, False: 0]
  |  Branch (24211:57): [True: 3, False: 0]
  ------------------
24212|      3|                p->error_indicator = 1;
24213|      3|                p->level--;
24214|      3|                return NULL;
24215|      3|            }
24216|      0|            goto done;
24217|      3|        }
24218|  6.06k|        p->mark = _mark;
24219|  6.06k|        D(fprintf(stderr, "%*c%s invalid_except_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24220|  6.06k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] ':' NEWLINE !INDENT"));
24221|  6.06k|    }
24222|      0|    { // 'except' ':' NEWLINE !INDENT
24223|  6.06k|        if (p->error_indicator) {
  ------------------
  |  Branch (24223:13): [True: 2, False: 6.05k]
  ------------------
24224|      2|            p->level--;
24225|      2|            return NULL;
24226|      2|        }
24227|  6.05k|        D(fprintf(stderr, "%*c> invalid_except_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
24228|  6.05k|        Token * _literal;
24229|  6.05k|        Token * a;
24230|  6.05k|        Token * newline_var;
24231|  6.05k|        if (
24232|  6.05k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (24232:13): [True: 4.06k, False: 1.99k]
  ------------------
24233|  4.06k|            &&
24234|  4.06k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24234:13): [True: 1.13k, False: 2.93k]
  ------------------
24235|  1.13k|            &&
24236|  1.13k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.13k|#define NEWLINE         4
  ------------------
  |  Branch (24236:13): [True: 694, False: 440]
  ------------------
24237|    694|            &&
24238|    694|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    694|#define INDENT          5
  ------------------
  |  Branch (24238:13): [True: 2, False: 692]
  ------------------
24239|  6.05k|        )
24240|      2|        {
24241|      2|            D(fprintf(stderr, "%*c+ invalid_except_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
24242|      2|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      2|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24243|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24243:18): [True: 2, False: 0]
  |  Branch (24243:34): [True: 0, False: 0]
  |  Branch (24243:57): [True: 2, False: 0]
  ------------------
24244|      2|                p->error_indicator = 1;
24245|      2|                p->level--;
24246|      2|                return NULL;
24247|      2|            }
24248|      0|            goto done;
24249|      2|        }
24250|  6.05k|        p->mark = _mark;
24251|  6.05k|        D(fprintf(stderr, "%*c%s invalid_except_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24252|  6.05k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' NEWLINE !INDENT"));
24253|  6.05k|    }
24254|  6.05k|    _res = NULL;
24255|  6.05k|  done:
24256|  6.05k|    p->level--;
24257|  6.05k|    return _res;
24258|  6.05k|}
parser.c:invalid_except_stmt_rule:
23782|  3.90k|{
23783|  3.90k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.80k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23783:9): [True: 0, False: 3.90k]
  |  Branch (23783:35): [True: 0, False: 3.90k]
  ------------------
23784|      0|        _Pypegen_stack_overflow(p);
23785|      0|    }
23786|  3.90k|    if (p->error_indicator) {
  ------------------
  |  Branch (23786:9): [True: 0, False: 3.90k]
  ------------------
23787|      0|        p->level--;
23788|      0|        return NULL;
23789|      0|    }
23790|  3.90k|    void * _res = NULL;
23791|  3.90k|    int _mark = p->mark;
23792|  3.90k|    { // 'except' expression ',' expressions 'as' NAME ':'
23793|  3.90k|        if (p->error_indicator) {
  ------------------
  |  Branch (23793:13): [True: 0, False: 3.90k]
  ------------------
23794|      0|            p->level--;
23795|      0|            return NULL;
23796|      0|        }
23797|  3.90k|        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions 'as' NAME ':'"));
23798|  3.90k|        Token * _keyword;
23799|  3.90k|        Token * _keyword_1;
23800|  3.90k|        Token * _literal;
23801|  3.90k|        Token * _literal_1;
23802|  3.90k|        expr_ty a;
23803|  3.90k|        expr_ty expressions_var;
23804|  3.90k|        expr_ty name_var;
23805|  3.90k|        if (
23806|  3.90k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23806:13): [True: 1.90k, False: 1.99k]
  ------------------
23807|  1.90k|            &&
23808|  1.90k|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (23808:13): [True: 54, False: 1.85k]
  ------------------
23809|     54|            &&
23810|     54|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (23810:13): [True: 16, False: 38]
  ------------------
23811|     16|            &&
23812|     16|            (expressions_var = expressions_rule(p))  // expressions
  ------------------
  |  Branch (23812:13): [True: 11, False: 5]
  ------------------
23813|     11|            &&
23814|     11|            (_keyword_1 = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (23814:13): [True: 8, False: 3]
  ------------------
23815|      8|            &&
23816|      8|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (23816:13): [True: 5, False: 3]
  ------------------
23817|      5|            &&
23818|      5|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23818:13): [True: 1, False: 4]
  ------------------
23819|  3.90k|        )
23820|      1|        {
23821|      1|            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ',' expressions 'as' NAME ':'"));
23822|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized when using 'as'" );
  ------------------
  |  |  241|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
23823|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23823:18): [True: 1, False: 0]
  |  Branch (23823:34): [True: 0, False: 0]
  |  Branch (23823:57): [True: 1, False: 0]
  ------------------
23824|      1|                p->error_indicator = 1;
23825|      1|                p->level--;
23826|      1|                return NULL;
23827|      1|            }
23828|      0|            goto done;
23829|      1|        }
23830|  3.89k|        p->mark = _mark;
23831|  3.89k|        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23832|  3.89k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ',' expressions 'as' NAME ':'"));
23833|  3.89k|    }
23834|      0|    { // 'except' expression ['as' NAME] NEWLINE
23835|  3.89k|        if (p->error_indicator) {
  ------------------
  |  Branch (23835:13): [True: 2, False: 3.89k]
  ------------------
23836|      2|            p->level--;
23837|      2|            return NULL;
23838|      2|        }
23839|  3.89k|        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
23840|  3.89k|        void *_opt_var;
23841|  3.89k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
23842|  3.89k|        Token * a;
23843|  3.89k|        expr_ty expression_var;
23844|  3.89k|        Token * newline_var;
23845|  3.89k|        if (
23846|  3.89k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23846:13): [True: 1.90k, False: 1.99k]
  ------------------
23847|  1.90k|            &&
23848|  1.90k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (23848:13): [True: 51, False: 1.85k]
  ------------------
23849|     51|            &&
23850|     51|            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (23850:13): [True: 51, False: 0]
  ------------------
23851|     51|            &&
23852|     51|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     51|#define NEWLINE         4
  ------------------
  |  Branch (23852:13): [True: 4, False: 47]
  ------------------
23853|  3.89k|        )
23854|      4|        {
23855|      4|            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
23856|      4|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      4|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
23857|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23857:18): [True: 4, False: 0]
  |  Branch (23857:34): [True: 0, False: 0]
  |  Branch (23857:57): [True: 4, False: 0]
  ------------------
23858|      4|                p->error_indicator = 1;
23859|      4|                p->level--;
23860|      4|                return NULL;
23861|      4|            }
23862|      0|            goto done;
23863|      4|        }
23864|  3.89k|        p->mark = _mark;
23865|  3.89k|        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23866|  3.89k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] NEWLINE"));
23867|  3.89k|    }
23868|      0|    { // 'except' NEWLINE
23869|  3.89k|        if (p->error_indicator) {
  ------------------
  |  Branch (23869:13): [True: 0, False: 3.89k]
  ------------------
23870|      0|            p->level--;
23871|      0|            return NULL;
23872|      0|        }
23873|  3.89k|        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE"));
23874|  3.89k|        Token * a;
23875|  3.89k|        Token * newline_var;
23876|  3.89k|        if (
23877|  3.89k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23877:13): [True: 1.89k, False: 1.99k]
  ------------------
23878|  1.89k|            &&
23879|  1.89k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  1.89k|#define NEWLINE         4
  ------------------
  |  Branch (23879:13): [True: 4, False: 1.89k]
  ------------------
23880|  3.89k|        )
23881|      4|        {
23882|      4|            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' NEWLINE"));
23883|      4|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      4|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
23884|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23884:18): [True: 4, False: 0]
  |  Branch (23884:34): [True: 0, False: 0]
  |  Branch (23884:57): [True: 4, False: 0]
  ------------------
23885|      4|                p->error_indicator = 1;
23886|      4|                p->level--;
23887|      4|                return NULL;
23888|      4|            }
23889|      0|            goto done;
23890|      4|        }
23891|  3.88k|        p->mark = _mark;
23892|  3.88k|        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23893|  3.88k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' NEWLINE"));
23894|  3.88k|    }
23895|      0|    { // 'except' expression 'as' expression ':' block
23896|  3.88k|        if (p->error_indicator) {
  ------------------
  |  Branch (23896:13): [True: 0, False: 3.88k]
  ------------------
23897|      0|            p->level--;
23898|      0|            return NULL;
23899|      0|        }
23900|  3.88k|        D(fprintf(stderr, "%*c> invalid_except_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' expression ':' block"));
23901|  3.88k|        Token * _keyword;
23902|  3.88k|        Token * _keyword_1;
23903|  3.88k|        Token * _literal;
23904|  3.88k|        expr_ty a;
23905|  3.88k|        asdl_stmt_seq* block_var;
23906|  3.88k|        expr_ty expression_var;
23907|  3.88k|        if (
23908|  3.88k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23908:13): [True: 1.89k, False: 1.99k]
  ------------------
23909|  1.89k|            &&
23910|  1.89k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (23910:13): [True: 47, False: 1.84k]
  ------------------
23911|     47|            &&
23912|     47|            (_keyword_1 = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (23912:13): [True: 16, False: 31]
  ------------------
23913|     16|            &&
23914|     16|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (23914:13): [True: 11, False: 5]
  ------------------
23915|     11|            &&
23916|     11|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23916:13): [True: 6, False: 5]
  ------------------
23917|      6|            &&
23918|      6|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (23918:13): [True: 1, False: 5]
  ------------------
23919|  3.88k|        )
23920|      1|        {
23921|      1|            D(fprintf(stderr, "%*c+ invalid_except_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression 'as' expression ':' block"));
23922|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use except statement with %s" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
23923|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23923:18): [True: 1, False: 0]
  |  Branch (23923:34): [True: 0, False: 0]
  |  Branch (23923:57): [True: 1, False: 0]
  ------------------
23924|      1|                p->error_indicator = 1;
23925|      1|                p->level--;
23926|      1|                return NULL;
23927|      1|            }
23928|      0|            goto done;
23929|      1|        }
23930|  3.88k|        p->mark = _mark;
23931|  3.88k|        D(fprintf(stderr, "%*c%s invalid_except_stmt[%d-%d]: %s failed!\n", p->level, ' ',
23932|  3.88k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression 'as' expression ':' block"));
23933|  3.88k|    }
23934|  3.88k|    _res = NULL;
23935|  3.88k|  done:
23936|  3.88k|    p->level--;
23937|  3.88k|    return _res;
23938|  3.88k|}
parser.c:_loop1_37_rule:
29596|  5.93k|{
29597|  5.93k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29597:9): [True: 0, False: 5.93k]
  |  Branch (29597:35): [True: 0, False: 5.93k]
  ------------------
29598|      0|        _Pypegen_stack_overflow(p);
29599|      0|    }
29600|  5.93k|    if (p->error_indicator) {
  ------------------
  |  Branch (29600:9): [True: 0, False: 5.93k]
  ------------------
29601|      0|        p->level--;
29602|      0|        return NULL;
29603|      0|    }
29604|  5.93k|    void *_res = NULL;
29605|  5.93k|    int _mark = p->mark;
29606|  5.93k|    void **_children = PyMem_Malloc(sizeof(void *));
29607|  5.93k|    if (!_children) {
  ------------------
  |  Branch (29607:9): [True: 0, False: 5.93k]
  ------------------
29608|      0|        p->error_indicator = 1;
29609|      0|        PyErr_NoMemory();
29610|      0|        p->level--;
29611|      0|        return NULL;
29612|      0|    }
29613|  5.93k|    Py_ssize_t _children_capacity = 1;
29614|  5.93k|    Py_ssize_t _n = 0;
29615|  5.93k|    { // except_star_block
29616|  5.93k|        if (p->error_indicator) {
  ------------------
  |  Branch (29616:13): [True: 0, False: 5.93k]
  ------------------
29617|      0|            p->level--;
29618|      0|            return NULL;
29619|      0|        }
29620|  5.93k|        D(fprintf(stderr, "%*c> _loop1_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_star_block"));
29621|  5.93k|        excepthandler_ty except_star_block_var;
29622|  5.93k|        while (
29623|  12.0k|            (except_star_block_var = except_star_block_rule(p))  // except_star_block
  ------------------
  |  Branch (29623:13): [True: 6.16k, False: 5.93k]
  ------------------
29624|  5.93k|        )
29625|  6.16k|        {
29626|  6.16k|            _res = except_star_block_var;
29627|  6.16k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29627:17): [True: 995, False: 5.16k]
  ------------------
29628|    995|                _children_capacity *= 2;
29629|    995|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29630|    995|                if (!_new_children) {
  ------------------
  |  Branch (29630:21): [True: 0, False: 995]
  ------------------
29631|      0|                    PyMem_Free(_children);
29632|      0|                    p->error_indicator = 1;
29633|      0|                    PyErr_NoMemory();
29634|      0|                    p->level--;
29635|      0|                    return NULL;
29636|      0|                }
29637|    995|                _children = _new_children;
29638|    995|            }
29639|  6.16k|            _children[_n++] = _res;
29640|  6.16k|            _mark = p->mark;
29641|  6.16k|        }
29642|  5.93k|        p->mark = _mark;
29643|  5.93k|        D(fprintf(stderr, "%*c%s _loop1_37[%d-%d]: %s failed!\n", p->level, ' ',
29644|  5.93k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_star_block"));
29645|  5.93k|    }
29646|  5.93k|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (29646:9): [True: 1.49k, False: 4.44k]
  |  Branch (29646:20): [True: 13, False: 4.43k]
  ------------------
29647|  1.50k|        PyMem_Free(_children);
29648|  1.50k|        p->level--;
29649|  1.50k|        return NULL;
29650|  1.50k|    }
29651|  4.43k|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29652|  4.43k|    if (!_seq) {
  ------------------
  |  Branch (29652:9): [True: 0, False: 4.43k]
  ------------------
29653|      0|        PyMem_Free(_children);
29654|      0|        p->error_indicator = 1;
29655|      0|        PyErr_NoMemory();
29656|      0|        p->level--;
29657|      0|        return NULL;
29658|      0|    }
29659|  10.2k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  5.83k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  10.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29659:28): [True: 5.83k, False: 4.43k]
  ------------------
29660|  4.43k|    PyMem_Free(_children);
29661|  4.43k|    p->level--;
29662|  4.43k|    return _seq;
29663|  4.43k|}
parser.c:except_star_block_rule:
 7483|  12.0k|{
 7484|  12.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  24.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7484:9): [True: 0, False: 12.0k]
  |  Branch (7484:35): [True: 0, False: 12.0k]
  ------------------
 7485|      0|        _Pypegen_stack_overflow(p);
 7486|      0|    }
 7487|  12.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (7487:9): [True: 0, False: 12.0k]
  ------------------
 7488|      0|        p->level--;
 7489|      0|        return NULL;
 7490|      0|    }
 7491|  12.0k|    excepthandler_ty _res = NULL;
 7492|  12.0k|    int _mark = p->mark;
 7493|  12.0k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (7493:9): [True: 3.68k, False: 8.41k]
  |  Branch (7493:31): [True: 1, False: 3.68k]
  ------------------
 7494|      1|        p->error_indicator = 1;
 7495|      1|        p->level--;
 7496|      1|        return NULL;
 7497|      1|    }
 7498|  12.0k|    int _start_lineno = p->tokens[_mark]->lineno;
 7499|  12.0k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  12.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 12.0k]
  |  |  ------------------
  ------------------
 7500|  12.0k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 7501|  12.0k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  12.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 12.0k]
  |  |  ------------------
  ------------------
 7502|  12.0k|    if (p->call_invalid_rules) { // invalid_except_star_stmt_indent
  ------------------
  |  Branch (7502:9): [True: 5.53k, False: 6.55k]
  ------------------
 7503|  5.53k|        if (p->error_indicator) {
  ------------------
  |  Branch (7503:13): [True: 0, False: 5.53k]
  ------------------
 7504|      0|            p->level--;
 7505|      0|            return NULL;
 7506|      0|        }
 7507|  5.53k|        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt_indent"));
 7508|  5.53k|        void *invalid_except_star_stmt_indent_var;
 7509|  5.53k|        if (
 7510|  5.53k|            (invalid_except_star_stmt_indent_var = invalid_except_star_stmt_indent_rule(p))  // invalid_except_star_stmt_indent
  ------------------
  |  Branch (7510:13): [True: 0, False: 5.53k]
  ------------------
 7511|  5.53k|        )
 7512|      0|        {
 7513|      0|            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt_indent"));
 7514|      0|            _res = invalid_except_star_stmt_indent_var;
 7515|      0|            goto done;
 7516|      0|        }
 7517|  5.53k|        p->mark = _mark;
 7518|  5.53k|        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
 7519|  5.53k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_star_stmt_indent"));
 7520|  5.53k|    }
 7521|  12.0k|    { // 'except' '*' expression ':' block
 7522|  12.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (7522:13): [True: 6, False: 12.0k]
  ------------------
 7523|      6|            p->level--;
 7524|      6|            return NULL;
 7525|      6|        }
 7526|  12.0k|        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ':' block"));
 7527|  12.0k|        Token * _keyword;
 7528|  12.0k|        Token * _literal;
 7529|  12.0k|        Token * _literal_1;
 7530|  12.0k|        asdl_stmt_seq* b;
 7531|  12.0k|        expr_ty e;
 7532|  12.0k|        if (
 7533|  12.0k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7533:13): [True: 7.26k, False: 4.81k]
  ------------------
 7534|  7.26k|            &&
 7535|  7.26k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (7535:13): [True: 6.33k, False: 935]
  ------------------
 7536|  6.33k|            &&
 7537|  6.33k|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (7537:13): [True: 6.32k, False: 10]
  ------------------
 7538|  6.32k|            &&
 7539|  6.32k|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7539:13): [True: 5.49k, False: 825]
  ------------------
 7540|  5.49k|            &&
 7541|  5.49k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7541:13): [True: 5.42k, False: 71]
  ------------------
 7542|  12.0k|        )
 7543|  5.42k|        {
 7544|  5.42k|            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ':' block"));
 7545|  5.42k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7546|  5.42k|            if (_token == NULL) {
  ------------------
  |  Branch (7546:17): [True: 0, False: 5.42k]
  ------------------
 7547|      0|                p->level--;
 7548|      0|                return NULL;
 7549|      0|            }
 7550|  5.42k|            int _end_lineno = _token->end_lineno;
 7551|  5.42k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  5.42k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.42k]
  |  |  ------------------
  ------------------
 7552|  5.42k|            int _end_col_offset = _token->end_col_offset;
 7553|  5.42k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  5.42k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.42k]
  |  |  ------------------
  ------------------
 7554|  5.42k|            _res = _PyAST_ExceptHandler ( e , NULL , b , EXTRA );
  ------------------
  |  |  307|  5.42k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7555|  5.42k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7555:18): [True: 0, False: 5.42k]
  |  Branch (7555:34): [True: 0, False: 5.42k]
  |  Branch (7555:57): [True: 0, False: 0]
  ------------------
 7556|      0|                p->error_indicator = 1;
 7557|      0|                p->level--;
 7558|      0|                return NULL;
 7559|      0|            }
 7560|  5.42k|            goto done;
 7561|  5.42k|        }
 7562|  6.66k|        p->mark = _mark;
 7563|  6.66k|        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
 7564|  6.66k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ':' block"));
 7565|  6.66k|    }
 7566|      0|    { // 'except' '*' expression 'as' NAME ':' block
 7567|  6.66k|        if (p->error_indicator) {
  ------------------
  |  Branch (7567:13): [True: 18, False: 6.64k]
  ------------------
 7568|     18|            p->level--;
 7569|     18|            return NULL;
 7570|     18|        }
 7571|  6.64k|        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' NAME ':' block"));
 7572|  6.64k|        Token * _keyword;
 7573|  6.64k|        Token * _keyword_1;
 7574|  6.64k|        Token * _literal;
 7575|  6.64k|        Token * _literal_1;
 7576|  6.64k|        asdl_stmt_seq* b;
 7577|  6.64k|        expr_ty e;
 7578|  6.64k|        expr_ty t;
 7579|  6.64k|        if (
 7580|  6.64k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7580:13): [True: 1.82k, False: 4.81k]
  ------------------
 7581|  1.82k|            &&
 7582|  1.82k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (7582:13): [True: 888, False: 935]
  ------------------
 7583|    888|            &&
 7584|    888|            (e = expression_rule(p))  // expression
  ------------------
  |  Branch (7584:13): [True: 878, False: 10]
  ------------------
 7585|    878|            &&
 7586|    878|            (_keyword_1 = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (7586:13): [True: 162, False: 716]
  ------------------
 7587|    162|            &&
 7588|    162|            (t = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (7588:13): [True: 151, False: 11]
  ------------------
 7589|    151|            &&
 7590|    151|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7590:13): [True: 141, False: 10]
  ------------------
 7591|    141|            &&
 7592|    141|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7592:13): [True: 133, False: 8]
  ------------------
 7593|  6.64k|        )
 7594|    133|        {
 7595|    133|            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' NAME ':' block"));
 7596|    133|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7597|    133|            if (_token == NULL) {
  ------------------
  |  Branch (7597:17): [True: 0, False: 133]
  ------------------
 7598|      0|                p->level--;
 7599|      0|                return NULL;
 7600|      0|            }
 7601|    133|            int _end_lineno = _token->end_lineno;
 7602|    133|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    133|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 133]
  |  |  ------------------
  ------------------
 7603|    133|            int _end_col_offset = _token->end_col_offset;
 7604|    133|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    133|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 133]
  |  |  ------------------
  ------------------
 7605|    133|            _res = _PyAST_ExceptHandler ( e , ( ( expr_ty ) t ) -> v . Name . id , b , EXTRA );
  ------------------
  |  |  307|    133|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7606|    133|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7606:18): [True: 0, False: 133]
  |  Branch (7606:34): [True: 0, False: 133]
  |  Branch (7606:57): [True: 0, False: 0]
  ------------------
 7607|      0|                p->error_indicator = 1;
 7608|      0|                p->level--;
 7609|      0|                return NULL;
 7610|      0|            }
 7611|    133|            goto done;
 7612|    133|        }
 7613|  6.50k|        p->mark = _mark;
 7614|  6.50k|        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
 7615|  6.50k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression 'as' NAME ':' block"));
 7616|  6.50k|    }
 7617|      0|    { // 'except' '*' expressions ':' block
 7618|  6.50k|        if (p->error_indicator) {
  ------------------
  |  Branch (7618:13): [True: 4, False: 6.50k]
  ------------------
 7619|      4|            p->level--;
 7620|      4|            return NULL;
 7621|      4|        }
 7622|  6.50k|        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expressions ':' block"));
 7623|  6.50k|        Token * _keyword;
 7624|  6.50k|        Token * _literal;
 7625|  6.50k|        Token * _literal_1;
 7626|  6.50k|        asdl_stmt_seq* b;
 7627|  6.50k|        expr_ty e;
 7628|  6.50k|        if (
 7629|  6.50k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (7629:13): [True: 1.68k, False: 4.81k]
  ------------------
 7630|  1.68k|            &&
 7631|  1.68k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (7631:13): [True: 751, False: 935]
  ------------------
 7632|    751|            &&
 7633|    751|            (e = expressions_rule(p))  // expressions
  ------------------
  |  Branch (7633:13): [True: 741, False: 10]
  ------------------
 7634|    741|            &&
 7635|    741|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7635:13): [True: 669, False: 72]
  ------------------
 7636|    669|            &&
 7637|    669|            (b = block_rule(p))  // block
  ------------------
  |  Branch (7637:13): [True: 601, False: 68]
  ------------------
 7638|  6.50k|        )
 7639|    601|        {
 7640|    601|            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expressions ':' block"));
 7641|    601|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7642|    601|            if (_token == NULL) {
  ------------------
  |  Branch (7642:17): [True: 0, False: 601]
  ------------------
 7643|      0|                p->level--;
 7644|      0|                return NULL;
 7645|      0|            }
 7646|    601|            int _end_lineno = _token->end_lineno;
 7647|    601|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    601|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 601]
  |  |  ------------------
  ------------------
 7648|    601|            int _end_col_offset = _token->end_col_offset;
 7649|    601|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    601|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 601]
  |  |  ------------------
  ------------------
 7650|    601|            _res = CHECK_VERSION ( excepthandler_ty , 14 , "except expressions without parentheses are" , _PyAST_ExceptHandler ( e , NULL , b , EXTRA ) );
  ------------------
  |  |  345|    601|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 7651|    601|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7651:18): [True: 0, False: 601]
  |  Branch (7651:34): [True: 0, False: 601]
  |  Branch (7651:57): [True: 0, False: 0]
  ------------------
 7652|      0|                p->error_indicator = 1;
 7653|      0|                p->level--;
 7654|      0|                return NULL;
 7655|      0|            }
 7656|    601|            goto done;
 7657|    601|        }
 7658|  5.90k|        p->mark = _mark;
 7659|  5.90k|        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
 7660|  5.90k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expressions ':' block"));
 7661|  5.90k|    }
 7662|  5.90k|    if (p->call_invalid_rules) { // invalid_except_star_stmt
  ------------------
  |  Branch (7662:9): [True: 3.03k, False: 2.86k]
  ------------------
 7663|  3.03k|        if (p->error_indicator) {
  ------------------
  |  Branch (7663:13): [True: 3, False: 3.03k]
  ------------------
 7664|      3|            p->level--;
 7665|      3|            return NULL;
 7666|      3|        }
 7667|  3.03k|        D(fprintf(stderr, "%*c> except_star_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt"));
 7668|  3.03k|        void *invalid_except_star_stmt_var;
 7669|  3.03k|        if (
 7670|  3.03k|            (invalid_except_star_stmt_var = invalid_except_star_stmt_rule(p))  // invalid_except_star_stmt
  ------------------
  |  Branch (7670:13): [True: 0, False: 3.03k]
  ------------------
 7671|  3.03k|        )
 7672|      0|        {
 7673|      0|            D(fprintf(stderr, "%*c+ except_star_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_star_stmt"));
 7674|      0|            _res = invalid_except_star_stmt_var;
 7675|      0|            goto done;
 7676|      0|        }
 7677|  3.03k|        p->mark = _mark;
 7678|  3.03k|        D(fprintf(stderr, "%*c%s except_star_block[%d-%d]: %s failed!\n", p->level, ' ',
 7679|  3.03k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_star_stmt"));
 7680|  3.03k|    }
 7681|  5.90k|    _res = NULL;
 7682|  12.0k|  done:
 7683|  12.0k|    p->level--;
 7684|  12.0k|    return _res;
 7685|  5.90k|}
parser.c:invalid_except_star_stmt_indent_rule:
24264|  5.53k|{
24265|  5.53k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24265:9): [True: 0, False: 5.53k]
  |  Branch (24265:35): [True: 0, False: 5.53k]
  ------------------
24266|      0|        _Pypegen_stack_overflow(p);
24267|      0|    }
24268|  5.53k|    if (p->error_indicator) {
  ------------------
  |  Branch (24268:9): [True: 0, False: 5.53k]
  ------------------
24269|      0|        p->level--;
24270|      0|        return NULL;
24271|      0|    }
24272|  5.53k|    void * _res = NULL;
24273|  5.53k|    int _mark = p->mark;
24274|  5.53k|    { // 'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT
24275|  5.53k|        if (p->error_indicator) {
  ------------------
  |  Branch (24275:13): [True: 0, False: 5.53k]
  ------------------
24276|      0|            p->level--;
24277|      0|            return NULL;
24278|      0|        }
24279|  5.53k|        D(fprintf(stderr, "%*c> invalid_except_star_stmt_indent[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT"));
24280|  5.53k|        Token * _literal;
24281|  5.53k|        Token * _literal_1;
24282|  5.53k|        void *_opt_var;
24283|  5.53k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  5.53k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.53k]
  |  |  ------------------
  ------------------
24284|  5.53k|        Token * a;
24285|  5.53k|        expr_ty expression_var;
24286|  5.53k|        Token * newline_var;
24287|  5.53k|        if (
24288|  5.53k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (24288:13): [True: 3.47k, False: 2.06k]
  ------------------
24289|  3.47k|            &&
24290|  3.47k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (24290:13): [True: 2.58k, False: 888]
  ------------------
24291|  2.58k|            &&
24292|  2.58k|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (24292:13): [True: 2.57k, False: 10]
  ------------------
24293|  2.57k|            &&
24294|  2.57k|            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (24294:13): [True: 2.57k, False: 1]
  ------------------
24295|  2.57k|            &&
24296|  2.57k|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24296:13): [True: 2.21k, False: 363]
  ------------------
24297|  2.21k|            &&
24298|  2.21k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  2.21k|#define NEWLINE         4
  ------------------
  |  Branch (24298:13): [True: 111, False: 2.10k]
  ------------------
24299|    111|            &&
24300|    111|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    111|#define INDENT          5
  ------------------
  |  Branch (24300:13): [True: 1, False: 110]
  ------------------
24301|  5.53k|        )
24302|      1|        {
24303|      1|            D(fprintf(stderr, "%*c+ invalid_except_star_stmt_indent[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT"));
24304|      1|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'except*' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      1|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24305|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24305:18): [True: 1, False: 0]
  |  Branch (24305:34): [True: 0, False: 0]
  |  Branch (24305:57): [True: 1, False: 0]
  ------------------
24306|      1|                p->error_indicator = 1;
24307|      1|                p->level--;
24308|      1|                return NULL;
24309|      1|            }
24310|      0|            goto done;
24311|      1|        }
24312|  5.53k|        p->mark = _mark;
24313|  5.53k|        D(fprintf(stderr, "%*c%s invalid_except_star_stmt_indent[%d-%d]: %s failed!\n", p->level, ' ',
24314|  5.53k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ['as' NAME] ':' NEWLINE !INDENT"));
24315|  5.53k|    }
24316|  5.53k|    _res = NULL;
24317|  5.53k|  done:
24318|  5.53k|    p->level--;
24319|  5.53k|    return _res;
24320|  5.53k|}
parser.c:invalid_except_star_stmt_rule:
23947|  3.03k|{
23948|  3.03k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  6.06k|#  define MAXSTACK 6000
  ------------------
  |  Branch (23948:9): [True: 0, False: 3.03k]
  |  Branch (23948:35): [True: 0, False: 3.03k]
  ------------------
23949|      0|        _Pypegen_stack_overflow(p);
23950|      0|    }
23951|  3.03k|    if (p->error_indicator) {
  ------------------
  |  Branch (23951:9): [True: 0, False: 3.03k]
  ------------------
23952|      0|        p->level--;
23953|      0|        return NULL;
23954|      0|    }
23955|  3.03k|    void * _res = NULL;
23956|  3.03k|    int _mark = p->mark;
23957|  3.03k|    { // 'except' '*' expression ',' expressions 'as' NAME ':'
23958|  3.03k|        if (p->error_indicator) {
  ------------------
  |  Branch (23958:13): [True: 0, False: 3.03k]
  ------------------
23959|      0|            p->level--;
23960|      0|            return NULL;
23961|      0|        }
23962|  3.03k|        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ',' expressions 'as' NAME ':'"));
23963|  3.03k|        Token * _keyword;
23964|  3.03k|        Token * _keyword_1;
23965|  3.03k|        Token * _literal;
23966|  3.03k|        Token * _literal_1;
23967|  3.03k|        Token * _literal_2;
23968|  3.03k|        expr_ty a;
23969|  3.03k|        expr_ty expressions_var;
23970|  3.03k|        expr_ty name_var;
23971|  3.03k|        if (
23972|  3.03k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (23972:13): [True: 969, False: 2.06k]
  ------------------
23973|    969|            &&
23974|    969|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (23974:13): [True: 81, False: 888]
  ------------------
23975|     81|            &&
23976|     81|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (23976:13): [True: 75, False: 6]
  ------------------
23977|     75|            &&
23978|     75|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (23978:13): [True: 19, False: 56]
  ------------------
23979|     19|            &&
23980|     19|            (expressions_var = expressions_rule(p))  // expressions
  ------------------
  |  Branch (23980:13): [True: 12, False: 7]
  ------------------
23981|     12|            &&
23982|     12|            (_keyword_1 = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (23982:13): [True: 7, False: 5]
  ------------------
23983|      7|            &&
23984|      7|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (23984:13): [True: 4, False: 3]
  ------------------
23985|      4|            &&
23986|      4|            (_literal_2 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (23986:13): [True: 1, False: 3]
  ------------------
23987|  3.03k|        )
23988|      1|        {
23989|      1|            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ',' expressions 'as' NAME ':'"));
23990|      1|            _res = RAISE_SYNTAX_ERROR_STARTING_FROM ( a , "multiple exception types must be parenthesized when using 'as'" );
  ------------------
  |  |  241|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  |  |                   RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  |   30|      1|#define CURRENT_POS (-5)
  |  |  ------------------
  ------------------
23991|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (23991:18): [True: 1, False: 0]
  |  Branch (23991:34): [True: 0, False: 0]
  |  Branch (23991:57): [True: 1, False: 0]
  ------------------
23992|      1|                p->error_indicator = 1;
23993|      1|                p->level--;
23994|      1|                return NULL;
23995|      1|            }
23996|      0|            goto done;
23997|      1|        }
23998|  3.03k|        p->mark = _mark;
23999|  3.03k|        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24000|  3.03k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ',' expressions 'as' NAME ':'"));
24001|  3.03k|    }
24002|      0|    { // 'except' '*' expression ['as' NAME] NEWLINE
24003|  3.03k|        if (p->error_indicator) {
  ------------------
  |  Branch (24003:13): [True: 1, False: 3.03k]
  ------------------
24004|      1|            p->level--;
24005|      1|            return NULL;
24006|      1|        }
24007|  3.03k|        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] NEWLINE"));
24008|  3.03k|        Token * _literal;
24009|  3.03k|        void *_opt_var;
24010|  3.03k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  3.03k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.03k]
  |  |  ------------------
  ------------------
24011|  3.03k|        Token * a;
24012|  3.03k|        expr_ty expression_var;
24013|  3.03k|        Token * newline_var;
24014|  3.03k|        if (
24015|  3.03k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (24015:13): [True: 967, False: 2.06k]
  ------------------
24016|    967|            &&
24017|    967|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (24017:13): [True: 79, False: 888]
  ------------------
24018|     79|            &&
24019|     79|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (24019:13): [True: 73, False: 6]
  ------------------
24020|     73|            &&
24021|     73|            (_opt_var = _tmp_21_rule(p), !p->error_indicator)  // ['as' NAME]
  ------------------
  |  Branch (24021:13): [True: 73, False: 0]
  ------------------
24022|     73|            &&
24023|     73|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     73|#define NEWLINE         4
  ------------------
  |  Branch (24023:13): [True: 8, False: 65]
  ------------------
24024|  3.03k|        )
24025|      8|        {
24026|      8|            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression ['as' NAME] NEWLINE"));
24027|      8|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      8|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
24028|      8|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24028:18): [True: 8, False: 0]
  |  Branch (24028:34): [True: 0, False: 0]
  |  Branch (24028:57): [True: 8, False: 0]
  ------------------
24029|      8|                p->error_indicator = 1;
24030|      8|                p->level--;
24031|      8|                return NULL;
24032|      8|            }
24033|      0|            goto done;
24034|      8|        }
24035|  3.02k|        p->mark = _mark;
24036|  3.02k|        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24037|  3.02k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression ['as' NAME] NEWLINE"));
24038|  3.02k|    }
24039|      0|    { // 'except' '*' (NEWLINE | ':')
24040|  3.02k|        if (p->error_indicator) {
  ------------------
  |  Branch (24040:13): [True: 0, False: 3.02k]
  ------------------
24041|      0|            p->level--;
24042|      0|            return NULL;
24043|      0|        }
24044|  3.02k|        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')"));
24045|  3.02k|        Token * _literal;
24046|  3.02k|        void *_tmp_145_var;
24047|  3.02k|        Token * a;
24048|  3.02k|        if (
24049|  3.02k|            (a = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (24049:13): [True: 959, False: 2.06k]
  ------------------
24050|    959|            &&
24051|    959|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (24051:13): [True: 71, False: 888]
  ------------------
24052|     71|            &&
24053|     71|            (_tmp_145_var = _tmp_145_rule(p))  // NEWLINE | ':'
  ------------------
  |  Branch (24053:13): [True: 3, False: 68]
  ------------------
24054|  3.02k|        )
24055|      3|        {
24056|      3|            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' (NEWLINE | ':')"));
24057|      3|            _res = RAISE_SYNTAX_ERROR ( "expected one or more exception types" );
  ------------------
  |  |  233|      3|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
24058|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24058:18): [True: 3, False: 0]
  |  Branch (24058:34): [True: 0, False: 0]
  |  Branch (24058:57): [True: 3, False: 0]
  ------------------
24059|      3|                p->error_indicator = 1;
24060|      3|                p->level--;
24061|      3|                return NULL;
24062|      3|            }
24063|      0|            goto done;
24064|      3|        }
24065|  3.02k|        p->mark = _mark;
24066|  3.02k|        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24067|  3.02k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' (NEWLINE | ':')"));
24068|  3.02k|    }
24069|      0|    { // 'except' '*' expression 'as' expression ':' block
24070|  3.02k|        if (p->error_indicator) {
  ------------------
  |  Branch (24070:13): [True: 0, False: 3.02k]
  ------------------
24071|      0|            p->level--;
24072|      0|            return NULL;
24073|      0|        }
24074|  3.02k|        D(fprintf(stderr, "%*c> invalid_except_star_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' expression ':' block"));
24075|  3.02k|        Token * _keyword;
24076|  3.02k|        Token * _keyword_1;
24077|  3.02k|        Token * _literal;
24078|  3.02k|        Token * _literal_1;
24079|  3.02k|        expr_ty a;
24080|  3.02k|        asdl_stmt_seq* block_var;
24081|  3.02k|        expr_ty expression_var;
24082|  3.02k|        if (
24083|  3.02k|            (_keyword = _PyPegen_expect_token(p, 695))  // token='except'
  ------------------
  |  Branch (24083:13): [True: 956, False: 2.06k]
  ------------------
24084|    956|            &&
24085|    956|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (24085:13): [True: 68, False: 888]
  ------------------
24086|     68|            &&
24087|     68|            (expression_var = expression_rule(p))  // expression
  ------------------
  |  Branch (24087:13): [True: 65, False: 3]
  ------------------
24088|     65|            &&
24089|     65|            (_keyword_1 = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (24089:13): [True: 14, False: 51]
  ------------------
24090|     14|            &&
24091|     14|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (24091:13): [True: 10, False: 4]
  ------------------
24092|     10|            &&
24093|     10|            (_literal_1 = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24093:13): [True: 6, False: 4]
  ------------------
24094|      6|            &&
24095|      6|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (24095:13): [True: 1, False: 5]
  ------------------
24096|  3.02k|        )
24097|      1|        {
24098|      1|            D(fprintf(stderr, "%*c+ invalid_except_star_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' '*' expression 'as' expression ':' block"));
24099|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use except* statement with %s" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
24100|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24100:18): [True: 1, False: 0]
  |  Branch (24100:34): [True: 0, False: 0]
  |  Branch (24100:57): [True: 1, False: 0]
  ------------------
24101|      1|                p->error_indicator = 1;
24102|      1|                p->level--;
24103|      1|                return NULL;
24104|      1|            }
24105|      0|            goto done;
24106|      1|        }
24107|  3.02k|        p->mark = _mark;
24108|  3.02k|        D(fprintf(stderr, "%*c%s invalid_except_star_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24109|  3.02k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' '*' expression 'as' expression ':' block"));
24110|  3.02k|    }
24111|  3.02k|    _res = NULL;
24112|  3.02k|  done:
24113|  3.02k|    p->level--;
24114|  3.02k|    return _res;
24115|  3.02k|}
parser.c:_tmp_145_rule:
36243|     71|{
36244|     71|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    142|#  define MAXSTACK 6000
  ------------------
  |  Branch (36244:9): [True: 0, False: 71]
  |  Branch (36244:35): [True: 0, False: 71]
  ------------------
36245|      0|        _Pypegen_stack_overflow(p);
36246|      0|    }
36247|     71|    if (p->error_indicator) {
  ------------------
  |  Branch (36247:9): [True: 0, False: 71]
  ------------------
36248|      0|        p->level--;
36249|      0|        return NULL;
36250|      0|    }
36251|     71|    void * _res = NULL;
36252|     71|    int _mark = p->mark;
36253|     71|    { // NEWLINE
36254|     71|        if (p->error_indicator) {
  ------------------
  |  Branch (36254:13): [True: 0, False: 71]
  ------------------
36255|      0|            p->level--;
36256|      0|            return NULL;
36257|      0|        }
36258|     71|        D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
36259|     71|        Token * newline_var;
36260|     71|        if (
36261|     71|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|     71|#define NEWLINE         4
  ------------------
  |  Branch (36261:13): [True: 2, False: 69]
  ------------------
36262|     71|        )
36263|      2|        {
36264|      2|            D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
36265|      2|            _res = newline_var;
36266|      2|            goto done;
36267|      2|        }
36268|     69|        p->mark = _mark;
36269|     69|        D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ',
36270|     69|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
36271|     69|    }
36272|      0|    { // ':'
36273|     69|        if (p->error_indicator) {
  ------------------
  |  Branch (36273:13): [True: 0, False: 69]
  ------------------
36274|      0|            p->level--;
36275|      0|            return NULL;
36276|      0|        }
36277|     69|        D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'"));
36278|     69|        Token * _literal;
36279|     69|        if (
36280|     69|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (36280:13): [True: 1, False: 68]
  ------------------
36281|     69|        )
36282|      1|        {
36283|      1|            D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'"));
36284|      1|            _res = _literal;
36285|      1|            goto done;
36286|      1|        }
36287|     68|        p->mark = _mark;
36288|     68|        D(fprintf(stderr, "%*c%s _tmp_145[%d-%d]: %s failed!\n", p->level, ' ',
36289|     68|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'"));
36290|     68|    }
36291|     68|    _res = NULL;
36292|     71|  done:
36293|     71|    p->level--;
36294|     71|    return _res;
36295|     68|}
parser.c:while_stmt_rule:
 6387|  3.18k|{
 6388|  3.18k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  6.36k|#  define MAXSTACK 6000
  ------------------
  |  Branch (6388:9): [True: 0, False: 3.18k]
  |  Branch (6388:35): [True: 0, False: 3.18k]
  ------------------
 6389|      0|        _Pypegen_stack_overflow(p);
 6390|      0|    }
 6391|  3.18k|    if (p->error_indicator) {
  ------------------
  |  Branch (6391:9): [True: 0, False: 3.18k]
  ------------------
 6392|      0|        p->level--;
 6393|      0|        return NULL;
 6394|      0|    }
 6395|  3.18k|    stmt_ty _res = NULL;
 6396|  3.18k|    int _mark = p->mark;
 6397|  3.18k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (6397:9): [True: 0, False: 3.18k]
  |  Branch (6397:31): [True: 0, False: 0]
  ------------------
 6398|      0|        p->error_indicator = 1;
 6399|      0|        p->level--;
 6400|      0|        return NULL;
 6401|      0|    }
 6402|  3.18k|    int _start_lineno = p->tokens[_mark]->lineno;
 6403|  3.18k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.18k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.18k]
  |  |  ------------------
  ------------------
 6404|  3.18k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 6405|  3.18k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.18k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.18k]
  |  |  ------------------
  ------------------
 6406|  3.18k|    if (p->call_invalid_rules) { // invalid_while_stmt
  ------------------
  |  Branch (6406:9): [True: 457, False: 2.72k]
  ------------------
 6407|    457|        if (p->error_indicator) {
  ------------------
  |  Branch (6407:13): [True: 0, False: 457]
  ------------------
 6408|      0|            p->level--;
 6409|      0|            return NULL;
 6410|      0|        }
 6411|    457|        D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt"));
 6412|    457|        void *invalid_while_stmt_var;
 6413|    457|        if (
 6414|    457|            (invalid_while_stmt_var = invalid_while_stmt_rule(p))  // invalid_while_stmt
  ------------------
  |  Branch (6414:13): [True: 0, False: 457]
  ------------------
 6415|    457|        )
 6416|      0|        {
 6417|      0|            D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt"));
 6418|      0|            _res = invalid_while_stmt_var;
 6419|      0|            goto done;
 6420|      0|        }
 6421|    457|        p->mark = _mark;
 6422|    457|        D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6423|    457|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt"));
 6424|    457|    }
 6425|  3.18k|    { // 'while' named_expression ':' block else_block?
 6426|  3.18k|        if (p->error_indicator) {
  ------------------
  |  Branch (6426:13): [True: 8, False: 3.17k]
  ------------------
 6427|      8|            p->level--;
 6428|      8|            return NULL;
 6429|      8|        }
 6430|  3.17k|        D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
 6431|  3.17k|        Token * _keyword;
 6432|  3.17k|        Token * _literal;
 6433|  3.17k|        expr_ty a;
 6434|  3.17k|        asdl_stmt_seq* b;
 6435|  3.17k|        void *c;
 6436|  3.17k|        if (
 6437|  3.17k|            (_keyword = _PyPegen_expect_token(p, 707))  // token='while'
  ------------------
  |  Branch (6437:13): [True: 3.17k, False: 0]
  ------------------
 6438|  3.17k|            &&
 6439|  3.17k|            (a = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (6439:13): [True: 3.17k, False: 6]
  ------------------
 6440|  3.17k|            &&
 6441|  3.17k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (6441:13): [True: 3.15k, False: 11]
  ------------------
 6442|  3.15k|            &&
 6443|  3.15k|            (b = block_rule(p))  // block
  ------------------
  |  Branch (6443:13): [True: 3.12k, False: 30]
  ------------------
 6444|  3.12k|            &&
 6445|  3.12k|            (c = else_block_rule(p), !p->error_indicator)  // else_block?
  ------------------
  |  Branch (6445:13): [True: 3.12k, False: 2]
  ------------------
 6446|  3.17k|        )
 6447|  3.12k|        {
 6448|  3.12k|            D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?"));
 6449|  3.12k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 6450|  3.12k|            if (_token == NULL) {
  ------------------
  |  Branch (6450:17): [True: 0, False: 3.12k]
  ------------------
 6451|      0|                p->level--;
 6452|      0|                return NULL;
 6453|      0|            }
 6454|  3.12k|            int _end_lineno = _token->end_lineno;
 6455|  3.12k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.12k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.12k]
  |  |  ------------------
  ------------------
 6456|  3.12k|            int _end_col_offset = _token->end_col_offset;
 6457|  3.12k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.12k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.12k]
  |  |  ------------------
  ------------------
 6458|  3.12k|            _res = _PyAST_While ( a , b , c , EXTRA );
  ------------------
  |  |  307|  3.12k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 6459|  3.12k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (6459:18): [True: 0, False: 3.12k]
  |  Branch (6459:34): [True: 0, False: 3.12k]
  |  Branch (6459:57): [True: 0, False: 0]
  ------------------
 6460|      0|                p->error_indicator = 1;
 6461|      0|                p->level--;
 6462|      0|                return NULL;
 6463|      0|            }
 6464|  3.12k|            goto done;
 6465|  3.12k|        }
 6466|     49|        p->mark = _mark;
 6467|     49|        D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 6468|     49|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?"));
 6469|     49|    }
 6470|     49|    _res = NULL;
 6471|  3.17k|  done:
 6472|  3.17k|    p->level--;
 6473|  3.17k|    return _res;
 6474|     49|}
parser.c:invalid_while_stmt_rule:
25047|    457|{
25048|    457|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    914|#  define MAXSTACK 6000
  ------------------
  |  Branch (25048:9): [True: 0, False: 457]
  |  Branch (25048:35): [True: 0, False: 457]
  ------------------
25049|      0|        _Pypegen_stack_overflow(p);
25050|      0|    }
25051|    457|    if (p->error_indicator) {
  ------------------
  |  Branch (25051:9): [True: 0, False: 457]
  ------------------
25052|      0|        p->level--;
25053|      0|        return NULL;
25054|      0|    }
25055|    457|    void * _res = NULL;
25056|    457|    int _mark = p->mark;
25057|    457|    { // 'while' named_expression NEWLINE
25058|    457|        if (p->error_indicator) {
  ------------------
  |  Branch (25058:13): [True: 0, False: 457]
  ------------------
25059|      0|            p->level--;
25060|      0|            return NULL;
25061|      0|        }
25062|    457|        D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE"));
25063|    457|        Token * _keyword;
25064|    457|        expr_ty named_expression_var;
25065|    457|        Token * newline_var;
25066|    457|        if (
25067|    457|            (_keyword = _PyPegen_expect_token(p, 707))  // token='while'
  ------------------
  |  Branch (25067:13): [True: 457, False: 0]
  ------------------
25068|    457|            &&
25069|    457|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (25069:13): [True: 452, False: 5]
  ------------------
25070|    452|            &&
25071|    452|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    452|#define NEWLINE         4
  ------------------
  |  Branch (25071:13): [True: 4, False: 448]
  ------------------
25072|    457|        )
25073|      4|        {
25074|      4|            D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression NEWLINE"));
25075|      4|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|      4|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
25076|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25076:18): [True: 4, False: 0]
  |  Branch (25076:34): [True: 0, False: 0]
  |  Branch (25076:57): [True: 4, False: 0]
  ------------------
25077|      4|                p->error_indicator = 1;
25078|      4|                p->level--;
25079|      4|                return NULL;
25080|      4|            }
25081|      0|            goto done;
25082|      4|        }
25083|    453|        p->mark = _mark;
25084|    453|        D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25085|    453|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression NEWLINE"));
25086|    453|    }
25087|      0|    { // 'while' named_expression ':' NEWLINE !INDENT
25088|    453|        if (p->error_indicator) {
  ------------------
  |  Branch (25088:13): [True: 3, False: 450]
  ------------------
25089|      3|            p->level--;
25090|      3|            return NULL;
25091|      3|        }
25092|    450|        D(fprintf(stderr, "%*c> invalid_while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
25093|    450|        Token * _literal;
25094|    450|        Token * a;
25095|    450|        expr_ty named_expression_var;
25096|    450|        Token * newline_var;
25097|    450|        if (
25098|    450|            (a = _PyPegen_expect_token(p, 707))  // token='while'
  ------------------
  |  Branch (25098:13): [True: 450, False: 0]
  ------------------
25099|    450|            &&
25100|    450|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (25100:13): [True: 448, False: 2]
  ------------------
25101|    448|            &&
25102|    448|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (25102:13): [True: 446, False: 2]
  ------------------
25103|    446|            &&
25104|    446|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    446|#define NEWLINE         4
  ------------------
  |  Branch (25104:13): [True: 22, False: 424]
  ------------------
25105|     22|            &&
25106|     22|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|     22|#define INDENT          5
  ------------------
  |  Branch (25106:13): [True: 1, False: 21]
  ------------------
25107|    450|        )
25108|      1|        {
25109|      1|            D(fprintf(stderr, "%*c+ invalid_while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
25110|      1|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'while' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      1|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
25111|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (25111:18): [True: 1, False: 0]
  |  Branch (25111:34): [True: 0, False: 0]
  |  Branch (25111:57): [True: 1, False: 0]
  ------------------
25112|      1|                p->error_indicator = 1;
25113|      1|                p->level--;
25114|      1|                return NULL;
25115|      1|            }
25116|      0|            goto done;
25117|      1|        }
25118|    449|        p->mark = _mark;
25119|    449|        D(fprintf(stderr, "%*c%s invalid_while_stmt[%d-%d]: %s failed!\n", p->level, ' ',
25120|    449|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' NEWLINE !INDENT"));
25121|    449|    }
25122|    449|    _res = NULL;
25123|    449|  done:
25124|    449|    p->level--;
25125|    449|    return _res;
25126|    449|}
parser.c:match_stmt_rule:
 7760|   159k|{
 7761|   159k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   318k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7761:9): [True: 0, False: 159k]
  |  Branch (7761:35): [True: 0, False: 159k]
  ------------------
 7762|      0|        _Pypegen_stack_overflow(p);
 7763|      0|    }
 7764|   159k|    if (p->error_indicator) {
  ------------------
  |  Branch (7764:9): [True: 0, False: 159k]
  ------------------
 7765|      0|        p->level--;
 7766|      0|        return NULL;
 7767|      0|    }
 7768|   159k|    stmt_ty _res = NULL;
 7769|   159k|    int _mark = p->mark;
 7770|   159k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (7770:9): [True: 0, False: 159k]
  |  Branch (7770:31): [True: 0, False: 0]
  ------------------
 7771|      0|        p->error_indicator = 1;
 7772|      0|        p->level--;
 7773|      0|        return NULL;
 7774|      0|    }
 7775|   159k|    int _start_lineno = p->tokens[_mark]->lineno;
 7776|   159k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   159k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 159k]
  |  |  ------------------
  ------------------
 7777|   159k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 7778|   159k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   159k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 159k]
  |  |  ------------------
  ------------------
 7779|   159k|    { // "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT
 7780|   159k|        if (p->error_indicator) {
  ------------------
  |  Branch (7780:13): [True: 0, False: 159k]
  ------------------
 7781|      0|            p->level--;
 7782|      0|            return NULL;
 7783|      0|        }
 7784|   159k|        D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
 7785|   159k|        expr_ty _keyword;
 7786|   159k|        Token * _literal;
 7787|   159k|        asdl_match_case_seq* cases;
 7788|   159k|        Token * dedent_var;
 7789|   159k|        Token * indent_var;
 7790|   159k|        Token * newline_var;
 7791|   159k|        expr_ty subject;
 7792|   159k|        if (
 7793|   159k|            (_keyword = _PyPegen_expect_soft_keyword(p, "match"))  // soft_keyword='"match"'
  ------------------
  |  Branch (7793:13): [True: 2.20k, False: 157k]
  ------------------
 7794|  2.20k|            &&
 7795|  2.20k|            (subject = subject_expr_rule(p))  // subject_expr
  ------------------
  |  Branch (7795:13): [True: 1.58k, False: 619]
  ------------------
 7796|  1.58k|            &&
 7797|  1.58k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7797:13): [True: 810, False: 779]
  ------------------
 7798|    810|            &&
 7799|    810|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    810|#define NEWLINE         4
  ------------------
  |  Branch (7799:13): [True: 807, False: 3]
  ------------------
 7800|    807|            &&
 7801|    807|            (indent_var = _PyPegen_expect_token(p, INDENT))  // token='INDENT'
  ------------------
  |  |   21|    807|#define INDENT          5
  ------------------
  |  Branch (7801:13): [True: 799, False: 8]
  ------------------
 7802|    799|            &&
 7803|    799|            (cases = (asdl_match_case_seq*)_loop1_38_rule(p))  // case_block+
  ------------------
  |  Branch (7803:13): [True: 335, False: 464]
  ------------------
 7804|    335|            &&
 7805|    335|            (dedent_var = _PyPegen_expect_token(p, DEDENT))  // token='DEDENT'
  ------------------
  |  |   22|    335|#define DEDENT          6
  ------------------
  |  Branch (7805:13): [True: 287, False: 48]
  ------------------
 7806|   159k|        )
 7807|    287|        {
 7808|    287|            D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
 7809|    287|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7810|    287|            if (_token == NULL) {
  ------------------
  |  Branch (7810:17): [True: 0, False: 287]
  ------------------
 7811|      0|                p->level--;
 7812|      0|                return NULL;
 7813|      0|            }
 7814|    287|            int _end_lineno = _token->end_lineno;
 7815|    287|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    287|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 287]
  |  |  ------------------
  ------------------
 7816|    287|            int _end_col_offset = _token->end_col_offset;
 7817|    287|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    287|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 287]
  |  |  ------------------
  ------------------
 7818|    287|            _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _PyAST_Match ( subject , cases , EXTRA ) );
  ------------------
  |  |  345|    287|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
 7819|    287|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7819:18): [True: 0, False: 287]
  |  Branch (7819:34): [True: 0, False: 287]
  |  Branch (7819:57): [True: 0, False: 0]
  ------------------
 7820|      0|                p->error_indicator = 1;
 7821|      0|                p->level--;
 7822|      0|                return NULL;
 7823|      0|            }
 7824|    287|            goto done;
 7825|    287|        }
 7826|   158k|        p->mark = _mark;
 7827|   158k|        D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 7828|   158k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT"));
 7829|   158k|    }
 7830|   158k|    if (p->call_invalid_rules) { // invalid_match_stmt
  ------------------
  |  Branch (7830:9): [True: 26.4k, False: 132k]
  ------------------
 7831|  26.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (7831:13): [True: 53, False: 26.3k]
  ------------------
 7832|     53|            p->level--;
 7833|     53|            return NULL;
 7834|     53|        }
 7835|  26.3k|        D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt"));
 7836|  26.3k|        void *invalid_match_stmt_var;
 7837|  26.3k|        if (
 7838|  26.3k|            (invalid_match_stmt_var = invalid_match_stmt_rule(p))  // invalid_match_stmt
  ------------------
  |  Branch (7838:13): [True: 0, False: 26.3k]
  ------------------
 7839|  26.3k|        )
 7840|      0|        {
 7841|      0|            D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt"));
 7842|      0|            _res = invalid_match_stmt_var;
 7843|      0|            goto done;
 7844|      0|        }
 7845|  26.3k|        p->mark = _mark;
 7846|  26.3k|        D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 7847|  26.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_match_stmt"));
 7848|  26.3k|    }
 7849|   158k|    _res = NULL;
 7850|   159k|  done:
 7851|   159k|    p->level--;
 7852|   159k|    return _res;
 7853|   158k|}
parser.c:subject_expr_rule:
 7858|  3.89k|{
 7859|  3.89k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.78k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7859:9): [True: 0, False: 3.89k]
  |  Branch (7859:35): [True: 0, False: 3.89k]
  ------------------
 7860|      0|        _Pypegen_stack_overflow(p);
 7861|      0|    }
 7862|  3.89k|    if (p->error_indicator) {
  ------------------
  |  Branch (7862:9): [True: 0, False: 3.89k]
  ------------------
 7863|      0|        p->level--;
 7864|      0|        return NULL;
 7865|      0|    }
 7866|  3.89k|    expr_ty _res = NULL;
 7867|  3.89k|    int _mark = p->mark;
 7868|  3.89k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (7868:9): [True: 1.29k, False: 2.59k]
  |  Branch (7868:31): [True: 1, False: 1.29k]
  ------------------
 7869|      1|        p->error_indicator = 1;
 7870|      1|        p->level--;
 7871|      1|        return NULL;
 7872|      1|    }
 7873|  3.89k|    int _start_lineno = p->tokens[_mark]->lineno;
 7874|  3.89k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
 7875|  3.89k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 7876|  3.89k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.89k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.89k]
  |  |  ------------------
  ------------------
 7877|  3.89k|    { // star_named_expression ',' star_named_expressions?
 7878|  3.89k|        if (p->error_indicator) {
  ------------------
  |  Branch (7878:13): [True: 0, False: 3.89k]
  ------------------
 7879|      0|            p->level--;
 7880|      0|            return NULL;
 7881|      0|        }
 7882|  3.89k|        D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
 7883|  3.89k|        Token * _literal;
 7884|  3.89k|        expr_ty value;
 7885|  3.89k|        void *values;
 7886|  3.89k|        if (
 7887|  3.89k|            (value = star_named_expression_rule(p))  // star_named_expression
  ------------------
  |  Branch (7887:13): [True: 2.72k, False: 1.16k]
  ------------------
 7888|  2.72k|            &&
 7889|  2.72k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (7889:13): [True: 242, False: 2.48k]
  ------------------
 7890|    242|            &&
 7891|    242|            (values = star_named_expressions_rule(p), !p->error_indicator)  // star_named_expressions?
  ------------------
  |  Branch (7891:13): [True: 240, False: 2]
  ------------------
 7892|  3.89k|        )
 7893|    240|        {
 7894|    240|            D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
 7895|    240|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 7896|    240|            if (_token == NULL) {
  ------------------
  |  Branch (7896:17): [True: 0, False: 240]
  ------------------
 7897|      0|                p->level--;
 7898|      0|                return NULL;
 7899|      0|            }
 7900|    240|            int _end_lineno = _token->end_lineno;
 7901|    240|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    240|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 240]
  |  |  ------------------
  ------------------
 7902|    240|            int _end_col_offset = _token->end_col_offset;
 7903|    240|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    240|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 240]
  |  |  ------------------
  ------------------
 7904|    240|            _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA );
  ------------------
  |  |  271|    240|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq* , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA );
  ------------------
  |  |  307|    240|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 7905|    240|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7905:18): [True: 0, False: 240]
  |  Branch (7905:34): [True: 0, False: 240]
  |  Branch (7905:57): [True: 0, False: 0]
  ------------------
 7906|      0|                p->error_indicator = 1;
 7907|      0|                p->level--;
 7908|      0|                return NULL;
 7909|      0|            }
 7910|    240|            goto done;
 7911|    240|        }
 7912|  3.65k|        p->mark = _mark;
 7913|  3.65k|        D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ',
 7914|  3.65k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?"));
 7915|  3.65k|    }
 7916|      0|    { // named_expression
 7917|  3.65k|        if (p->error_indicator) {
  ------------------
  |  Branch (7917:13): [True: 5, False: 3.64k]
  ------------------
 7918|      5|            p->level--;
 7919|      5|            return NULL;
 7920|      5|        }
 7921|  3.64k|        D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression"));
 7922|  3.64k|        expr_ty named_expression_var;
 7923|  3.64k|        if (
 7924|  3.64k|            (named_expression_var = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (7924:13): [True: 2.48k, False: 1.16k]
  ------------------
 7925|  3.64k|        )
 7926|  2.48k|        {
 7927|  2.48k|            D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression"));
 7928|  2.48k|            _res = named_expression_var;
 7929|  2.48k|            goto done;
 7930|  2.48k|        }
 7931|  1.16k|        p->mark = _mark;
 7932|  1.16k|        D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ',
 7933|  1.16k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression"));
 7934|  1.16k|    }
 7935|  1.16k|    _res = NULL;
 7936|  3.88k|  done:
 7937|  3.88k|    p->level--;
 7938|  3.88k|    return _res;
 7939|  1.16k|}
parser.c:_loop1_38_rule:
29668|    799|{
29669|    799|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.59k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29669:9): [True: 0, False: 799]
  |  Branch (29669:35): [True: 0, False: 799]
  ------------------
29670|      0|        _Pypegen_stack_overflow(p);
29671|      0|    }
29672|    799|    if (p->error_indicator) {
  ------------------
  |  Branch (29672:9): [True: 0, False: 799]
  ------------------
29673|      0|        p->level--;
29674|      0|        return NULL;
29675|      0|    }
29676|    799|    void *_res = NULL;
29677|    799|    int _mark = p->mark;
29678|    799|    void **_children = PyMem_Malloc(sizeof(void *));
29679|    799|    if (!_children) {
  ------------------
  |  Branch (29679:9): [True: 0, False: 799]
  ------------------
29680|      0|        p->error_indicator = 1;
29681|      0|        PyErr_NoMemory();
29682|      0|        p->level--;
29683|      0|        return NULL;
29684|      0|    }
29685|    799|    Py_ssize_t _children_capacity = 1;
29686|    799|    Py_ssize_t _n = 0;
29687|    799|    { // case_block
29688|    799|        if (p->error_indicator) {
  ------------------
  |  Branch (29688:13): [True: 0, False: 799]
  ------------------
29689|      0|            p->level--;
29690|      0|            return NULL;
29691|      0|        }
29692|    799|        D(fprintf(stderr, "%*c> _loop1_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block"));
29693|    799|        match_case_ty case_block_var;
29694|    799|        while (
29695|  3.14k|            (case_block_var = case_block_rule(p))  // case_block
  ------------------
  |  Branch (29695:13): [True: 2.35k, False: 799]
  ------------------
29696|    799|        )
29697|  2.35k|        {
29698|  2.35k|            _res = case_block_var;
29699|  2.35k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29699:17): [True: 391, False: 1.95k]
  ------------------
29700|    391|                _children_capacity *= 2;
29701|    391|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29702|    391|                if (!_new_children) {
  ------------------
  |  Branch (29702:21): [True: 0, False: 391]
  ------------------
29703|      0|                    PyMem_Free(_children);
29704|      0|                    p->error_indicator = 1;
29705|      0|                    PyErr_NoMemory();
29706|      0|                    p->level--;
29707|      0|                    return NULL;
29708|      0|                }
29709|    391|                _children = _new_children;
29710|    391|            }
29711|  2.35k|            _children[_n++] = _res;
29712|  2.35k|            _mark = p->mark;
29713|  2.35k|        }
29714|    799|        p->mark = _mark;
29715|    799|        D(fprintf(stderr, "%*c%s _loop1_38[%d-%d]: %s failed!\n", p->level, ' ',
29716|    799|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "case_block"));
29717|    799|    }
29718|    799|    if (_n == 0 || p->error_indicator) {
  ------------------
  |  Branch (29718:9): [True: 452, False: 347]
  |  Branch (29718:20): [True: 12, False: 335]
  ------------------
29719|    464|        PyMem_Free(_children);
29720|    464|        p->level--;
29721|    464|        return NULL;
29722|    464|    }
29723|    335|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29724|    335|    if (!_seq) {
  ------------------
  |  Branch (29724:9): [True: 0, False: 335]
  ------------------
29725|      0|        PyMem_Free(_children);
29726|      0|        p->error_indicator = 1;
29727|      0|        PyErr_NoMemory();
29728|      0|        p->level--;
29729|      0|        return NULL;
29730|      0|    }
29731|  2.56k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  2.22k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  2.56k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29731:28): [True: 2.22k, False: 335]
  ------------------
29732|    335|    PyMem_Free(_children);
29733|    335|    p->level--;
29734|    335|    return _seq;
29735|    335|}
parser.c:case_block_rule:
 7944|  3.14k|{
 7945|  3.14k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  6.29k|#  define MAXSTACK 6000
  ------------------
  |  Branch (7945:9): [True: 0, False: 3.14k]
  |  Branch (7945:35): [True: 0, False: 3.14k]
  ------------------
 7946|      0|        _Pypegen_stack_overflow(p);
 7947|      0|    }
 7948|  3.14k|    if (p->error_indicator) {
  ------------------
  |  Branch (7948:9): [True: 0, False: 3.14k]
  ------------------
 7949|      0|        p->level--;
 7950|      0|        return NULL;
 7951|      0|    }
 7952|  3.14k|    match_case_ty _res = NULL;
 7953|  3.14k|    int _mark = p->mark;
 7954|  3.14k|    if (p->call_invalid_rules) { // invalid_case_block
  ------------------
  |  Branch (7954:9): [True: 720, False: 2.42k]
  ------------------
 7955|    720|        if (p->error_indicator) {
  ------------------
  |  Branch (7955:13): [True: 0, False: 720]
  ------------------
 7956|      0|            p->level--;
 7957|      0|            return NULL;
 7958|      0|        }
 7959|    720|        D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block"));
 7960|    720|        void *invalid_case_block_var;
 7961|    720|        if (
 7962|    720|            (invalid_case_block_var = invalid_case_block_rule(p))  // invalid_case_block
  ------------------
  |  Branch (7962:13): [True: 0, False: 720]
  ------------------
 7963|    720|        )
 7964|      0|        {
 7965|      0|            D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_case_block"));
 7966|      0|            _res = invalid_case_block_var;
 7967|      0|            goto done;
 7968|      0|        }
 7969|    720|        p->mark = _mark;
 7970|    720|        D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ',
 7971|    720|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_case_block"));
 7972|    720|    }
 7973|  3.14k|    { // "case" patterns guard? ':' block
 7974|  3.14k|        if (p->error_indicator) {
  ------------------
  |  Branch (7974:13): [True: 48, False: 3.10k]
  ------------------
 7975|     48|            p->level--;
 7976|     48|            return NULL;
 7977|     48|        }
 7978|  3.10k|        D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
 7979|  3.10k|        expr_ty _keyword;
 7980|  3.10k|        Token * _literal;
 7981|  3.10k|        asdl_stmt_seq* body;
 7982|  3.10k|        void *guard;
 7983|  3.10k|        pattern_ty pattern;
 7984|  3.10k|        if (
 7985|  3.10k|            (_keyword = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
  ------------------
  |  Branch (7985:13): [True: 2.79k, False: 308]
  ------------------
 7986|  2.79k|            &&
 7987|  2.79k|            (pattern = patterns_rule(p))  // patterns
  ------------------
  |  Branch (7987:13): [True: 2.60k, False: 186]
  ------------------
 7988|  2.60k|            &&
 7989|  2.60k|            (guard = guard_rule(p), !p->error_indicator)  // guard?
  ------------------
  |  Branch (7989:13): [True: 2.60k, False: 2]
  ------------------
 7990|  2.60k|            &&
 7991|  2.60k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (7991:13): [True: 2.37k, False: 230]
  ------------------
 7992|  2.37k|            &&
 7993|  2.37k|            (body = block_rule(p))  // block
  ------------------
  |  Branch (7993:13): [True: 2.35k, False: 25]
  ------------------
 7994|  3.10k|        )
 7995|  2.35k|        {
 7996|  2.35k|            D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
 7997|  2.35k|            _res = _PyAST_match_case ( pattern , guard , body , p -> arena );
 7998|  2.35k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (7998:18): [True: 0, False: 2.35k]
  |  Branch (7998:34): [True: 0, False: 2.35k]
  |  Branch (7998:57): [True: 0, False: 0]
  ------------------
 7999|      0|                p->error_indicator = 1;
 8000|      0|                p->level--;
 8001|      0|                return NULL;
 8002|      0|            }
 8003|  2.35k|            goto done;
 8004|  2.35k|        }
 8005|    751|        p->mark = _mark;
 8006|    751|        D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ',
 8007|    751|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' block"));
 8008|    751|    }
 8009|    751|    _res = NULL;
 8010|  3.10k|  done:
 8011|  3.10k|    p->level--;
 8012|  3.10k|    return _res;
 8013|    751|}
parser.c:invalid_case_block_rule:
24451|    720|{
24452|    720|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  1.44k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24452:9): [True: 0, False: 720]
  |  Branch (24452:35): [True: 0, False: 720]
  ------------------
24453|      0|        _Pypegen_stack_overflow(p);
24454|      0|    }
24455|    720|    if (p->error_indicator) {
  ------------------
  |  Branch (24455:9): [True: 0, False: 720]
  ------------------
24456|      0|        p->level--;
24457|      0|        return NULL;
24458|      0|    }
24459|    720|    void * _res = NULL;
24460|    720|    int _mark = p->mark;
24461|    720|    { // "case" patterns guard? NEWLINE
24462|    720|        if (p->error_indicator) {
  ------------------
  |  Branch (24462:13): [True: 0, False: 720]
  ------------------
24463|      0|            p->level--;
24464|      0|            return NULL;
24465|      0|        }
24466|    720|        D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? NEWLINE"));
24467|    720|        expr_ty _keyword;
24468|    720|        void *_opt_var;
24469|    720|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    720|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 720]
  |  |  ------------------
  ------------------
24470|    720|        Token * newline_var;
24471|    720|        pattern_ty patterns_var;
24472|    720|        if (
24473|    720|            (_keyword = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
  ------------------
  |  Branch (24473:13): [True: 700, False: 20]
  ------------------
24474|    700|            &&
24475|    700|            (patterns_var = patterns_rule(p))  // patterns
  ------------------
  |  Branch (24475:13): [True: 610, False: 90]
  ------------------
24476|    610|            &&
24477|    610|            (_opt_var = guard_rule(p), !p->error_indicator)  // guard?
  ------------------
  |  Branch (24477:13): [True: 609, False: 1]
  ------------------
24478|    609|            &&
24479|    609|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    609|#define NEWLINE         4
  ------------------
  |  Branch (24479:13): [True: 23, False: 586]
  ------------------
24480|    720|        )
24481|     23|        {
24482|     23|            D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? NEWLINE"));
24483|     23|            _res = RAISE_SYNTAX_ERROR ( "expected ':'" );
  ------------------
  |  |  233|     23|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
24484|     23|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24484:18): [True: 23, False: 0]
  |  Branch (24484:34): [True: 0, False: 0]
  |  Branch (24484:57): [True: 23, False: 0]
  ------------------
24485|     23|                p->error_indicator = 1;
24486|     23|                p->level--;
24487|     23|                return NULL;
24488|     23|            }
24489|      0|            goto done;
24490|     23|        }
24491|    697|        p->mark = _mark;
24492|    697|        D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ',
24493|    697|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? NEWLINE"));
24494|    697|    }
24495|      0|    { // "case" patterns guard? ':' NEWLINE !INDENT
24496|    697|        if (p->error_indicator) {
  ------------------
  |  Branch (24496:13): [True: 21, False: 676]
  ------------------
24497|     21|            p->level--;
24498|     21|            return NULL;
24499|     21|        }
24500|    676|        D(fprintf(stderr, "%*c> invalid_case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
24501|    676|        Token * _literal;
24502|    676|        void *_opt_var;
24503|    676|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|    676|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 676]
  |  |  ------------------
  ------------------
24504|    676|        expr_ty a;
24505|    676|        Token * newline_var;
24506|    676|        pattern_ty patterns_var;
24507|    676|        if (
24508|    676|            (a = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
  ------------------
  |  Branch (24508:13): [True: 656, False: 20]
  ------------------
24509|    656|            &&
24510|    656|            (patterns_var = patterns_rule(p))  // patterns
  ------------------
  |  Branch (24510:13): [True: 586, False: 70]
  ------------------
24511|    586|            &&
24512|    586|            (_opt_var = guard_rule(p), !p->error_indicator)  // guard?
  ------------------
  |  Branch (24512:13): [True: 586, False: 0]
  ------------------
24513|    586|            &&
24514|    586|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24514:13): [True: 492, False: 94]
  ------------------
24515|    492|            &&
24516|    492|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    492|#define NEWLINE         4
  ------------------
  |  Branch (24516:13): [True: 152, False: 340]
  ------------------
24517|    152|            &&
24518|    152|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    152|#define INDENT          5
  ------------------
  |  Branch (24518:13): [True: 4, False: 148]
  ------------------
24519|    676|        )
24520|      4|        {
24521|      4|            D(fprintf(stderr, "%*c+ invalid_case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
24522|      4|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'case' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      4|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24523|      4|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24523:18): [True: 4, False: 0]
  |  Branch (24523:34): [True: 0, False: 0]
  |  Branch (24523:57): [True: 4, False: 0]
  ------------------
24524|      4|                p->error_indicator = 1;
24525|      4|                p->level--;
24526|      4|                return NULL;
24527|      4|            }
24528|      0|            goto done;
24529|      4|        }
24530|    672|        p->mark = _mark;
24531|    672|        D(fprintf(stderr, "%*c%s invalid_case_block[%d-%d]: %s failed!\n", p->level, ' ',
24532|    672|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' NEWLINE !INDENT"));
24533|    672|    }
24534|    672|    _res = NULL;
24535|    672|  done:
24536|    672|    p->level--;
24537|    672|    return _res;
24538|    672|}
parser.c:patterns_rule:
 8064|  4.58k|{
 8065|  4.58k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.16k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8065:9): [True: 0, False: 4.58k]
  |  Branch (8065:35): [True: 0, False: 4.58k]
  ------------------
 8066|      0|        _Pypegen_stack_overflow(p);
 8067|      0|    }
 8068|  4.58k|    if (p->error_indicator) {
  ------------------
  |  Branch (8068:9): [True: 0, False: 4.58k]
  ------------------
 8069|      0|        p->level--;
 8070|      0|        return NULL;
 8071|      0|    }
 8072|  4.58k|    pattern_ty _res = NULL;
 8073|  4.58k|    int _mark = p->mark;
 8074|  4.58k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (8074:9): [True: 2.14k, False: 2.43k]
  |  Branch (8074:31): [True: 1, False: 2.14k]
  ------------------
 8075|      1|        p->error_indicator = 1;
 8076|      1|        p->level--;
 8077|      1|        return NULL;
 8078|      1|    }
 8079|  4.57k|    int _start_lineno = p->tokens[_mark]->lineno;
 8080|  4.57k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.57k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.57k]
  |  |  ------------------
  ------------------
 8081|  4.57k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 8082|  4.57k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.57k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.57k]
  |  |  ------------------
  ------------------
 8083|  4.57k|    { // open_sequence_pattern
 8084|  4.57k|        if (p->error_indicator) {
  ------------------
  |  Branch (8084:13): [True: 0, False: 4.57k]
  ------------------
 8085|      0|            p->level--;
 8086|      0|            return NULL;
 8087|      0|        }
 8088|  4.57k|        D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern"));
 8089|  4.57k|        asdl_pattern_seq* patterns;
 8090|  4.57k|        if (
 8091|  4.57k|            (patterns = (asdl_pattern_seq*)open_sequence_pattern_rule(p))  // open_sequence_pattern
  ------------------
  |  Branch (8091:13): [True: 2.78k, False: 1.79k]
  ------------------
 8092|  4.57k|        )
 8093|  2.78k|        {
 8094|  2.78k|            D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern"));
 8095|  2.78k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8096|  2.78k|            if (_token == NULL) {
  ------------------
  |  Branch (8096:17): [True: 0, False: 2.78k]
  ------------------
 8097|      0|                p->level--;
 8098|      0|                return NULL;
 8099|      0|            }
 8100|  2.78k|            int _end_lineno = _token->end_lineno;
 8101|  2.78k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.78k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.78k]
  |  |  ------------------
  ------------------
 8102|  2.78k|            int _end_col_offset = _token->end_col_offset;
 8103|  2.78k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.78k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.78k]
  |  |  ------------------
  ------------------
 8104|  2.78k|            _res = _PyAST_MatchSequence ( patterns , EXTRA );
  ------------------
  |  |  307|  2.78k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8105|  2.78k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8105:18): [True: 0, False: 2.78k]
  |  Branch (8105:34): [True: 0, False: 2.78k]
  |  Branch (8105:57): [True: 0, False: 0]
  ------------------
 8106|      0|                p->error_indicator = 1;
 8107|      0|                p->level--;
 8108|      0|                return NULL;
 8109|      0|            }
 8110|  2.78k|            goto done;
 8111|  2.78k|        }
 8112|  1.79k|        p->mark = _mark;
 8113|  1.79k|        D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ',
 8114|  1.79k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "open_sequence_pattern"));
 8115|  1.79k|    }
 8116|      0|    { // pattern
 8117|  1.79k|        if (p->error_indicator) {
  ------------------
  |  Branch (8117:13): [True: 182, False: 1.61k]
  ------------------
 8118|    182|            p->level--;
 8119|    182|            return NULL;
 8120|    182|        }
 8121|  1.61k|        D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern"));
 8122|  1.61k|        pattern_ty pattern_var;
 8123|  1.61k|        if (
 8124|  1.61k|            (pattern_var = pattern_rule(p))  // pattern
  ------------------
  |  Branch (8124:13): [True: 1.13k, False: 479]
  ------------------
 8125|  1.61k|        )
 8126|  1.13k|        {
 8127|  1.13k|            D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern"));
 8128|  1.13k|            _res = pattern_var;
 8129|  1.13k|            goto done;
 8130|  1.13k|        }
 8131|    479|        p->mark = _mark;
 8132|    479|        D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ',
 8133|    479|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern"));
 8134|    479|    }
 8135|    479|    _res = NULL;
 8136|  4.39k|  done:
 8137|  4.39k|    p->level--;
 8138|  4.39k|    return _res;
 8139|    479|}
parser.c:open_sequence_pattern_rule:
 9942|  7.62k|{
 9943|  7.62k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  15.2k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9943:9): [True: 0, False: 7.62k]
  |  Branch (9943:35): [True: 0, False: 7.62k]
  ------------------
 9944|      0|        _Pypegen_stack_overflow(p);
 9945|      0|    }
 9946|  7.62k|    if (p->error_indicator) {
  ------------------
  |  Branch (9946:9): [True: 0, False: 7.62k]
  ------------------
 9947|      0|        p->level--;
 9948|      0|        return NULL;
 9949|      0|    }
 9950|  7.62k|    asdl_seq* _res = NULL;
 9951|  7.62k|    int _mark = p->mark;
 9952|  7.62k|    { // maybe_star_pattern ',' maybe_sequence_pattern?
 9953|  7.62k|        if (p->error_indicator) {
  ------------------
  |  Branch (9953:13): [True: 0, False: 7.62k]
  ------------------
 9954|      0|            p->level--;
 9955|      0|            return NULL;
 9956|      0|        }
 9957|  7.62k|        D(fprintf(stderr, "%*c> open_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
 9958|  7.62k|        Token * _literal;
 9959|  7.62k|        pattern_ty pattern;
 9960|  7.62k|        void *patterns;
 9961|  7.62k|        if (
 9962|  7.62k|            (pattern = maybe_star_pattern_rule(p))  // maybe_star_pattern
  ------------------
  |  Branch (9962:13): [True: 5.61k, False: 2.00k]
  ------------------
 9963|  5.61k|            &&
 9964|  5.61k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (9964:13): [True: 3.68k, False: 1.92k]
  ------------------
 9965|  3.68k|            &&
 9966|  3.68k|            (patterns = maybe_sequence_pattern_rule(p), !p->error_indicator)  // maybe_sequence_pattern?
  ------------------
  |  Branch (9966:13): [True: 3.24k, False: 443]
  ------------------
 9967|  7.62k|        )
 9968|  3.24k|        {
 9969|  3.24k|            D(fprintf(stderr, "%*c+ open_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
 9970|  3.24k|            _res = _PyPegen_seq_insert_in_front ( p , pattern , patterns );
 9971|  3.24k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9971:18): [True: 0, False: 3.24k]
  |  Branch (9971:34): [True: 0, False: 3.24k]
  |  Branch (9971:57): [True: 0, False: 0]
  ------------------
 9972|      0|                p->error_indicator = 1;
 9973|      0|                p->level--;
 9974|      0|                return NULL;
 9975|      0|            }
 9976|  3.24k|            goto done;
 9977|  3.24k|        }
 9978|  4.37k|        p->mark = _mark;
 9979|  4.37k|        D(fprintf(stderr, "%*c%s open_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9980|  4.37k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?"));
 9981|  4.37k|    }
 9982|  4.37k|    _res = NULL;
 9983|  7.62k|  done:
 9984|  7.62k|    p->level--;
 9985|  7.62k|    return _res;
 9986|  4.37k|}
parser.c:maybe_star_pattern_rule:
10038|  32.8k|{
10039|  32.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  65.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10039:9): [True: 0, False: 32.8k]
  |  Branch (10039:35): [True: 0, False: 32.8k]
  ------------------
10040|      0|        _Pypegen_stack_overflow(p);
10041|      0|    }
10042|  32.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (10042:9): [True: 0, False: 32.8k]
  ------------------
10043|      0|        p->level--;
10044|      0|        return NULL;
10045|      0|    }
10046|  32.8k|    pattern_ty _res = NULL;
10047|  32.8k|    int _mark = p->mark;
10048|  32.8k|    { // star_pattern
10049|  32.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (10049:13): [True: 0, False: 32.8k]
  ------------------
10050|      0|            p->level--;
10051|      0|            return NULL;
10052|      0|        }
10053|  32.8k|        D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_pattern"));
10054|  32.8k|        pattern_ty star_pattern_var;
10055|  32.8k|        if (
10056|  32.8k|            (star_pattern_var = star_pattern_rule(p))  // star_pattern
  ------------------
  |  Branch (10056:13): [True: 2.73k, False: 30.1k]
  ------------------
10057|  32.8k|        )
10058|  2.73k|        {
10059|  2.73k|            D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_pattern"));
10060|  2.73k|            _res = star_pattern_var;
10061|  2.73k|            goto done;
10062|  2.73k|        }
10063|  30.1k|        p->mark = _mark;
10064|  30.1k|        D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10065|  30.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_pattern"));
10066|  30.1k|    }
10067|      0|    { // pattern
10068|  30.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (10068:13): [True: 13, False: 30.1k]
  ------------------
10069|     13|            p->level--;
10070|     13|            return NULL;
10071|     13|        }
10072|  30.1k|        D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern"));
10073|  30.1k|        pattern_ty pattern_var;
10074|  30.1k|        if (
10075|  30.1k|            (pattern_var = pattern_rule(p))  // pattern
  ------------------
  |  Branch (10075:13): [True: 24.8k, False: 5.30k]
  ------------------
10076|  30.1k|        )
10077|  24.8k|        {
10078|  24.8k|            D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern"));
10079|  24.8k|            _res = pattern_var;
10080|  24.8k|            goto done;
10081|  24.8k|        }
10082|  5.30k|        p->mark = _mark;
10083|  5.30k|        D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10084|  5.30k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern"));
10085|  5.30k|    }
10086|  5.30k|    _res = NULL;
10087|  32.8k|  done:
10088|  32.8k|    p->level--;
10089|  32.8k|    return _res;
10090|  5.30k|}
parser.c:star_pattern_rule:
10095|  32.8k|{
10096|  32.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  65.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10096:9): [True: 0, False: 32.8k]
  |  Branch (10096:35): [True: 0, False: 32.8k]
  ------------------
10097|      0|        _Pypegen_stack_overflow(p);
10098|      0|    }
10099|  32.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (10099:9): [True: 0, False: 32.8k]
  ------------------
10100|      0|        p->level--;
10101|      0|        return NULL;
10102|      0|    }
10103|  32.8k|    pattern_ty _res = NULL;
10104|  32.8k|    if (_PyPegen_is_memoized(p, star_pattern_type, &_res)) {
  ------------------
  |  |  181|  32.8k|#define star_pattern_type 1092
  ------------------
  |  Branch (10104:9): [True: 3.74k, False: 29.1k]
  ------------------
10105|  3.74k|        p->level--;
10106|  3.74k|        return _res;
10107|  3.74k|    }
10108|  29.1k|    int _mark = p->mark;
10109|  29.1k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (10109:9): [True: 0, False: 29.1k]
  |  Branch (10109:31): [True: 0, False: 0]
  ------------------
10110|      0|        p->error_indicator = 1;
10111|      0|        p->level--;
10112|      0|        return NULL;
10113|      0|    }
10114|  29.1k|    int _start_lineno = p->tokens[_mark]->lineno;
10115|  29.1k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  29.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.1k]
  |  |  ------------------
  ------------------
10116|  29.1k|    int _start_col_offset = p->tokens[_mark]->col_offset;
10117|  29.1k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  29.1k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 29.1k]
  |  |  ------------------
  ------------------
10118|  29.1k|    { // '*' pattern_capture_target
10119|  29.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (10119:13): [True: 0, False: 29.1k]
  ------------------
10120|      0|            p->level--;
10121|      0|            return NULL;
10122|      0|        }
10123|  29.1k|        D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target"));
10124|  29.1k|        Token * _literal;
10125|  29.1k|        expr_ty target;
10126|  29.1k|        if (
10127|  29.1k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (10127:13): [True: 2.40k, False: 26.7k]
  ------------------
10128|  2.40k|            &&
10129|  2.40k|            (target = pattern_capture_target_rule(p))  // pattern_capture_target
  ------------------
  |  Branch (10129:13): [True: 1.99k, False: 417]
  ------------------
10130|  29.1k|        )
10131|  1.99k|        {
10132|  1.99k|            D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target"));
10133|  1.99k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10134|  1.99k|            if (_token == NULL) {
  ------------------
  |  Branch (10134:17): [True: 0, False: 1.99k]
  ------------------
10135|      0|                p->level--;
10136|      0|                return NULL;
10137|      0|            }
10138|  1.99k|            int _end_lineno = _token->end_lineno;
10139|  1.99k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.99k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.99k]
  |  |  ------------------
  ------------------
10140|  1.99k|            int _end_col_offset = _token->end_col_offset;
10141|  1.99k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.99k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.99k]
  |  |  ------------------
  ------------------
10142|  1.99k|            _res = _PyAST_MatchStar ( target -> v . Name . id , EXTRA );
  ------------------
  |  |  307|  1.99k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10143|  1.99k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10143:18): [True: 0, False: 1.99k]
  |  Branch (10143:34): [True: 0, False: 1.99k]
  |  Branch (10143:57): [True: 0, False: 0]
  ------------------
10144|      0|                p->error_indicator = 1;
10145|      0|                p->level--;
10146|      0|                return NULL;
10147|      0|            }
10148|  1.99k|            goto done;
10149|  1.99k|        }
10150|  27.1k|        p->mark = _mark;
10151|  27.1k|        D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10152|  27.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' pattern_capture_target"));
10153|  27.1k|    }
10154|      0|    { // '*' wildcard_pattern
10155|  27.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (10155:13): [True: 1, False: 27.1k]
  ------------------
10156|      1|            p->level--;
10157|      1|            return NULL;
10158|      1|        }
10159|  27.1k|        D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern"));
10160|  27.1k|        Token * _literal;
10161|  27.1k|        pattern_ty wildcard_pattern_var;
10162|  27.1k|        if (
10163|  27.1k|            (_literal = _PyPegen_expect_token(p, 16))  // token='*'
  ------------------
  |  Branch (10163:13): [True: 416, False: 26.7k]
  ------------------
10164|    416|            &&
10165|    416|            (wildcard_pattern_var = wildcard_pattern_rule(p))  // wildcard_pattern
  ------------------
  |  Branch (10165:13): [True: 402, False: 14]
  ------------------
10166|  27.1k|        )
10167|    402|        {
10168|    402|            D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern"));
10169|    402|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10170|    402|            if (_token == NULL) {
  ------------------
  |  Branch (10170:17): [True: 0, False: 402]
  ------------------
10171|      0|                p->level--;
10172|      0|                return NULL;
10173|      0|            }
10174|    402|            int _end_lineno = _token->end_lineno;
10175|    402|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    402|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 402]
  |  |  ------------------
  ------------------
10176|    402|            int _end_col_offset = _token->end_col_offset;
10177|    402|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    402|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 402]
  |  |  ------------------
  ------------------
10178|    402|            _res = _PyAST_MatchStar ( NULL , EXTRA );
  ------------------
  |  |  307|    402|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10179|    402|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10179:18): [True: 0, False: 402]
  |  Branch (10179:34): [True: 0, False: 402]
  |  Branch (10179:57): [True: 0, False: 0]
  ------------------
10180|      0|                p->error_indicator = 1;
10181|      0|                p->level--;
10182|      0|                return NULL;
10183|      0|            }
10184|    402|            goto done;
10185|    402|        }
10186|  26.7k|        p->mark = _mark;
10187|  26.7k|        D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10188|  26.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' wildcard_pattern"));
10189|  26.7k|    }
10190|  26.7k|    _res = NULL;
10191|  29.1k|  done:
10192|  29.1k|    _PyPegen_insert_memo(p, _mark, star_pattern_type, _res);
  ------------------
  |  |  181|  29.1k|#define star_pattern_type 1092
  ------------------
10193|  29.1k|    p->level--;
10194|  29.1k|    return _res;
10195|  26.7k|}
parser.c:pattern_capture_target_rule:
 9453|  45.1k|{
 9454|  45.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  90.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9454:9): [True: 0, False: 45.1k]
  |  Branch (9454:35): [True: 0, False: 45.1k]
  ------------------
 9455|      0|        _Pypegen_stack_overflow(p);
 9456|      0|    }
 9457|  45.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (9457:9): [True: 0, False: 45.1k]
  ------------------
 9458|      0|        p->level--;
 9459|      0|        return NULL;
 9460|      0|    }
 9461|  45.1k|    expr_ty _res = NULL;
 9462|  45.1k|    int _mark = p->mark;
 9463|  45.1k|    { // !"_" NAME !('.' | '(' | '=')
 9464|  45.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (9464:13): [True: 0, False: 45.1k]
  ------------------
 9465|      0|            p->level--;
 9466|      0|            return NULL;
 9467|      0|        }
 9468|  45.1k|        D(fprintf(stderr, "%*c> pattern_capture_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
 9469|  45.1k|        expr_ty name;
 9470|  45.1k|        if (
 9471|  45.1k|            _PyPegen_lookahead_with_string(0, _PyPegen_expect_soft_keyword, p, "_")
  ------------------
  |  Branch (9471:13): [True: 42.6k, False: 2.51k]
  ------------------
 9472|  42.6k|            &&
 9473|  42.6k|            (name = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (9473:13): [True: 34.9k, False: 7.75k]
  ------------------
 9474|  34.9k|            &&
 9475|  34.9k|            _PyPegen_lookahead(0, _tmp_43_rule, p)
  ------------------
  |  Branch (9475:13): [True: 25.1k, False: 9.74k]
  ------------------
 9476|  45.1k|        )
 9477|  25.1k|        {
 9478|  25.1k|            D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
 9479|  25.1k|            _res = _PyPegen_set_expr_context ( p , name , Store );
 9480|  25.1k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9480:18): [True: 0, False: 25.1k]
  |  Branch (9480:34): [True: 46, False: 25.1k]
  |  Branch (9480:57): [True: 46, False: 0]
  ------------------
 9481|     46|                p->error_indicator = 1;
 9482|     46|                p->level--;
 9483|     46|                return NULL;
 9484|     46|            }
 9485|  25.1k|            goto done;
 9486|  25.1k|        }
 9487|  20.0k|        p->mark = _mark;
 9488|  20.0k|        D(fprintf(stderr, "%*c%s pattern_capture_target[%d-%d]: %s failed!\n", p->level, ' ',
 9489|  20.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')"));
 9490|  20.0k|    }
 9491|  20.0k|    _res = NULL;
 9492|  45.1k|  done:
 9493|  45.1k|    p->level--;
 9494|  45.1k|    return _res;
 9495|  20.0k|}
parser.c:_tmp_43_rule:
29990|  36.0k|{
29991|  36.0k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  72.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29991:9): [True: 0, False: 36.0k]
  |  Branch (29991:35): [True: 0, False: 36.0k]
  ------------------
29992|      0|        _Pypegen_stack_overflow(p);
29993|      0|    }
29994|  36.0k|    if (p->error_indicator) {
  ------------------
  |  Branch (29994:9): [True: 0, False: 36.0k]
  ------------------
29995|      0|        p->level--;
29996|      0|        return NULL;
29997|      0|    }
29998|  36.0k|    void * _res = NULL;
29999|  36.0k|    int _mark = p->mark;
30000|  36.0k|    { // '.'
30001|  36.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (30001:13): [True: 0, False: 36.0k]
  ------------------
30002|      0|            p->level--;
30003|      0|            return NULL;
30004|      0|        }
30005|  36.0k|        D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'"));
30006|  36.0k|        Token * _literal;
30007|  36.0k|        if (
30008|  36.0k|            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
  ------------------
  |  Branch (30008:13): [True: 1.18k, False: 34.8k]
  ------------------
30009|  36.0k|        )
30010|  1.18k|        {
30011|  1.18k|            D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'"));
30012|  1.18k|            _res = _literal;
30013|  1.18k|            goto done;
30014|  1.18k|        }
30015|  34.8k|        p->mark = _mark;
30016|  34.8k|        D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ',
30017|  34.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'"));
30018|  34.8k|    }
30019|      0|    { // '('
30020|  34.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (30020:13): [True: 46, False: 34.8k]
  ------------------
30021|     46|            p->level--;
30022|     46|            return NULL;
30023|     46|        }
30024|  34.8k|        D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('"));
30025|  34.8k|        Token * _literal;
30026|  34.8k|        if (
30027|  34.8k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (30027:13): [True: 5.88k, False: 28.9k]
  ------------------
30028|  34.8k|        )
30029|  5.88k|        {
30030|  5.88k|            D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('"));
30031|  5.88k|            _res = _literal;
30032|  5.88k|            goto done;
30033|  5.88k|        }
30034|  28.9k|        p->mark = _mark;
30035|  28.9k|        D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ',
30036|  28.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('"));
30037|  28.9k|    }
30038|      0|    { // '='
30039|  28.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (30039:13): [True: 0, False: 28.9k]
  ------------------
30040|      0|            p->level--;
30041|      0|            return NULL;
30042|      0|        }
30043|  28.9k|        D(fprintf(stderr, "%*c> _tmp_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='"));
30044|  28.9k|        Token * _literal;
30045|  28.9k|        if (
30046|  28.9k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (30046:13): [True: 2.69k, False: 26.2k]
  ------------------
30047|  28.9k|        )
30048|  2.69k|        {
30049|  2.69k|            D(fprintf(stderr, "%*c+ _tmp_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='"));
30050|  2.69k|            _res = _literal;
30051|  2.69k|            goto done;
30052|  2.69k|        }
30053|  26.2k|        p->mark = _mark;
30054|  26.2k|        D(fprintf(stderr, "%*c%s _tmp_43[%d-%d]: %s failed!\n", p->level, ' ',
30055|  26.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='"));
30056|  26.2k|    }
30057|  26.2k|    _res = NULL;
30058|  36.0k|  done:
30059|  36.0k|    p->level--;
30060|  36.0k|    return _res;
30061|  26.2k|}
parser.c:wildcard_pattern_rule:
 9500|  19.9k|{
 9501|  19.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  39.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9501:9): [True: 0, False: 19.9k]
  |  Branch (9501:35): [True: 0, False: 19.9k]
  ------------------
 9502|      0|        _Pypegen_stack_overflow(p);
 9503|      0|    }
 9504|  19.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (9504:9): [True: 0, False: 19.9k]
  ------------------
 9505|      0|        p->level--;
 9506|      0|        return NULL;
 9507|      0|    }
 9508|  19.9k|    pattern_ty _res = NULL;
 9509|  19.9k|    int _mark = p->mark;
 9510|  19.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9510:9): [True: 0, False: 19.9k]
  |  Branch (9510:31): [True: 0, False: 0]
  ------------------
 9511|      0|        p->error_indicator = 1;
 9512|      0|        p->level--;
 9513|      0|        return NULL;
 9514|      0|    }
 9515|  19.9k|    int _start_lineno = p->tokens[_mark]->lineno;
 9516|  19.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  19.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
 9517|  19.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9518|  19.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  19.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
 9519|  19.9k|    { // "_"
 9520|  19.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (9520:13): [True: 0, False: 19.9k]
  ------------------
 9521|      0|            p->level--;
 9522|      0|            return NULL;
 9523|      0|        }
 9524|  19.9k|        D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\""));
 9525|  19.9k|        expr_ty _keyword;
 9526|  19.9k|        if (
 9527|  19.9k|            (_keyword = _PyPegen_expect_soft_keyword(p, "_"))  // soft_keyword='"_"'
  ------------------
  |  Branch (9527:13): [True: 2.51k, False: 17.4k]
  ------------------
 9528|  19.9k|        )
 9529|  2.51k|        {
 9530|  2.51k|            D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\""));
 9531|  2.51k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9532|  2.51k|            if (_token == NULL) {
  ------------------
  |  Branch (9532:17): [True: 0, False: 2.51k]
  ------------------
 9533|      0|                p->level--;
 9534|      0|                return NULL;
 9535|      0|            }
 9536|  2.51k|            int _end_lineno = _token->end_lineno;
 9537|  2.51k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.51k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.51k]
  |  |  ------------------
  ------------------
 9538|  2.51k|            int _end_col_offset = _token->end_col_offset;
 9539|  2.51k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  2.51k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.51k]
  |  |  ------------------
  ------------------
 9540|  2.51k|            _res = _PyAST_MatchAs ( NULL , NULL , EXTRA );
  ------------------
  |  |  307|  2.51k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9541|  2.51k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9541:18): [True: 0, False: 2.51k]
  |  Branch (9541:34): [True: 0, False: 2.51k]
  |  Branch (9541:57): [True: 0, False: 0]
  ------------------
 9542|      0|                p->error_indicator = 1;
 9543|      0|                p->level--;
 9544|      0|                return NULL;
 9545|      0|            }
 9546|  2.51k|            goto done;
 9547|  2.51k|        }
 9548|  17.4k|        p->mark = _mark;
 9549|  17.4k|        D(fprintf(stderr, "%*c%s wildcard_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9550|  17.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"_\""));
 9551|  17.4k|    }
 9552|  17.4k|    _res = NULL;
 9553|  19.9k|  done:
 9554|  19.9k|    p->level--;
 9555|  19.9k|    return _res;
 9556|  17.4k|}
parser.c:maybe_sequence_pattern_rule:
 9991|  5.94k|{
 9992|  5.94k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9992:9): [True: 0, False: 5.94k]
  |  Branch (9992:35): [True: 0, False: 5.94k]
  ------------------
 9993|      0|        _Pypegen_stack_overflow(p);
 9994|      0|    }
 9995|  5.94k|    if (p->error_indicator) {
  ------------------
  |  Branch (9995:9): [True: 0, False: 5.94k]
  ------------------
 9996|      0|        p->level--;
 9997|      0|        return NULL;
 9998|      0|    }
 9999|  5.94k|    asdl_seq* _res = NULL;
10000|  5.94k|    int _mark = p->mark;
10001|  5.94k|    { // ','.maybe_star_pattern+ ','?
10002|  5.94k|        if (p->error_indicator) {
  ------------------
  |  Branch (10002:13): [True: 0, False: 5.94k]
  ------------------
10003|      0|            p->level--;
10004|      0|            return NULL;
10005|      0|        }
10006|  5.94k|        D(fprintf(stderr, "%*c> maybe_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?"));
10007|  5.94k|        void *_opt_var;
10008|  5.94k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  5.94k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 5.94k]
  |  |  ------------------
  ------------------
10009|  5.94k|        asdl_seq * patterns;
10010|  5.94k|        if (
10011|  5.94k|            (patterns = _gather_45_rule(p))  // ','.maybe_star_pattern+
  ------------------
  |  Branch (10011:13): [True: 4.22k, False: 1.72k]
  ------------------
10012|  4.22k|            &&
10013|  4.22k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10013:13): [True: 3.71k, False: 515]
  ------------------
10014|  5.94k|        )
10015|  3.71k|        {
10016|  3.71k|            D(fprintf(stderr, "%*c+ maybe_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?"));
10017|  3.71k|            _res = patterns;
10018|  3.71k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10018:18): [True: 0, False: 3.71k]
  |  Branch (10018:34): [True: 0, False: 3.71k]
  |  Branch (10018:57): [True: 0, False: 0]
  ------------------
10019|      0|                p->error_indicator = 1;
10020|      0|                p->level--;
10021|      0|                return NULL;
10022|      0|            }
10023|  3.71k|            goto done;
10024|  3.71k|        }
10025|  2.23k|        p->mark = _mark;
10026|  2.23k|        D(fprintf(stderr, "%*c%s maybe_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10027|  2.23k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.maybe_star_pattern+ ','?"));
10028|  2.23k|    }
10029|  2.23k|    _res = NULL;
10030|  5.94k|  done:
10031|  5.94k|    p->level--;
10032|  5.94k|    return _res;
10033|  2.23k|}
parser.c:_gather_45_rule:
30142|  5.94k|{
30143|  5.94k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  11.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30143:9): [True: 0, False: 5.94k]
  |  Branch (30143:35): [True: 0, False: 5.94k]
  ------------------
30144|      0|        _Pypegen_stack_overflow(p);
30145|      0|    }
30146|  5.94k|    if (p->error_indicator) {
  ------------------
  |  Branch (30146:9): [True: 0, False: 5.94k]
  ------------------
30147|      0|        p->level--;
30148|      0|        return NULL;
30149|      0|    }
30150|  5.94k|    asdl_seq * _res = NULL;
30151|  5.94k|    int _mark = p->mark;
30152|  5.94k|    { // maybe_star_pattern _loop0_44
30153|  5.94k|        if (p->error_indicator) {
  ------------------
  |  Branch (30153:13): [True: 0, False: 5.94k]
  ------------------
30154|      0|            p->level--;
30155|      0|            return NULL;
30156|      0|        }
30157|  5.94k|        D(fprintf(stderr, "%*c> _gather_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_44"));
30158|  5.94k|        pattern_ty elem;
30159|  5.94k|        asdl_seq * seq;
30160|  5.94k|        if (
30161|  5.94k|            (elem = maybe_star_pattern_rule(p))  // maybe_star_pattern
  ------------------
  |  Branch (30161:13): [True: 4.22k, False: 1.72k]
  ------------------
30162|  4.22k|            &&
30163|  4.22k|            (seq = _loop0_44_rule(p))  // _loop0_44
  ------------------
  |  Branch (30163:13): [True: 4.22k, False: 0]
  ------------------
30164|  5.94k|        )
30165|  4.22k|        {
30166|  4.22k|            D(fprintf(stderr, "%*c+ _gather_45[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_44"));
30167|  4.22k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30168|  4.22k|            goto done;
30169|  4.22k|        }
30170|  1.72k|        p->mark = _mark;
30171|  1.72k|        D(fprintf(stderr, "%*c%s _gather_45[%d-%d]: %s failed!\n", p->level, ' ',
30172|  1.72k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_44"));
30173|  1.72k|    }
30174|  1.72k|    _res = NULL;
30175|  5.94k|  done:
30176|  5.94k|    p->level--;
30177|  5.94k|    return _res;
30178|  1.72k|}
parser.c:_loop0_44_rule:
30066|  4.22k|{
30067|  4.22k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  8.45k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30067:9): [True: 0, False: 4.22k]
  |  Branch (30067:35): [True: 0, False: 4.22k]
  ------------------
30068|      0|        _Pypegen_stack_overflow(p);
30069|      0|    }
30070|  4.22k|    if (p->error_indicator) {
  ------------------
  |  Branch (30070:9): [True: 0, False: 4.22k]
  ------------------
30071|      0|        p->level--;
30072|      0|        return NULL;
30073|      0|    }
30074|  4.22k|    void *_res = NULL;
30075|  4.22k|    int _mark = p->mark;
30076|  4.22k|    void **_children = PyMem_Malloc(sizeof(void *));
30077|  4.22k|    if (!_children) {
  ------------------
  |  Branch (30077:9): [True: 0, False: 4.22k]
  ------------------
30078|      0|        p->error_indicator = 1;
30079|      0|        PyErr_NoMemory();
30080|      0|        p->level--;
30081|      0|        return NULL;
30082|      0|    }
30083|  4.22k|    Py_ssize_t _children_capacity = 1;
30084|  4.22k|    Py_ssize_t _n = 0;
30085|  4.22k|    { // ',' maybe_star_pattern
30086|  4.22k|        if (p->error_indicator) {
  ------------------
  |  Branch (30086:13): [True: 0, False: 4.22k]
  ------------------
30087|      0|            p->level--;
30088|      0|            return NULL;
30089|      0|        }
30090|  4.22k|        D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern"));
30091|  4.22k|        Token * _literal;
30092|  4.22k|        pattern_ty elem;
30093|  4.22k|        while (
30094|  21.9k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (30094:13): [True: 19.2k, False: 2.63k]
  ------------------
30095|  19.2k|            &&
30096|  19.2k|            (elem = maybe_star_pattern_rule(p))  // maybe_star_pattern
  ------------------
  |  Branch (30096:13): [True: 17.7k, False: 1.58k]
  ------------------
30097|  4.22k|        )
30098|  17.7k|        {
30099|  17.7k|            _res = elem;
30100|  17.7k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (30100:18): [True: 0, False: 17.7k]
  |  Branch (30100:34): [True: 0, False: 17.7k]
  |  Branch (30100:57): [True: 0, False: 0]
  ------------------
30101|      0|                p->error_indicator = 1;
30102|      0|                PyMem_Free(_children);
30103|      0|                p->level--;
30104|      0|                return NULL;
30105|      0|            }
30106|  17.7k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30106:17): [True: 1.78k, False: 15.9k]
  ------------------
30107|  1.78k|                _children_capacity *= 2;
30108|  1.78k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30109|  1.78k|                if (!_new_children) {
  ------------------
  |  Branch (30109:21): [True: 0, False: 1.78k]
  ------------------
30110|      0|                    PyMem_Free(_children);
30111|      0|                    p->error_indicator = 1;
30112|      0|                    PyErr_NoMemory();
30113|      0|                    p->level--;
30114|      0|                    return NULL;
30115|      0|                }
30116|  1.78k|                _children = _new_children;
30117|  1.78k|            }
30118|  17.7k|            _children[_n++] = _res;
30119|  17.7k|            _mark = p->mark;
30120|  17.7k|        }
30121|  4.22k|        p->mark = _mark;
30122|  4.22k|        D(fprintf(stderr, "%*c%s _loop0_44[%d-%d]: %s failed!\n", p->level, ' ',
30123|  4.22k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern"));
30124|  4.22k|    }
30125|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30126|  4.22k|    if (!_seq) {
  ------------------
  |  Branch (30126:9): [True: 0, False: 4.22k]
  ------------------
30127|      0|        PyMem_Free(_children);
30128|      0|        p->error_indicator = 1;
30129|      0|        PyErr_NoMemory();
30130|      0|        p->level--;
30131|      0|        return NULL;
30132|      0|    }
30133|  21.9k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  17.7k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  21.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30133:28): [True: 17.7k, False: 4.22k]
  ------------------
30134|  4.22k|    PyMem_Free(_children);
30135|  4.22k|    p->level--;
30136|  4.22k|    return _seq;
30137|  4.22k|}
parser.c:pattern_rule:
 8144|  70.6k|{
 8145|  70.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   141k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8145:9): [True: 0, False: 70.6k]
  |  Branch (8145:35): [True: 0, False: 70.6k]
  ------------------
 8146|      0|        _Pypegen_stack_overflow(p);
 8147|      0|    }
 8148|  70.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (8148:9): [True: 0, False: 70.6k]
  ------------------
 8149|      0|        p->level--;
 8150|      0|        return NULL;
 8151|      0|    }
 8152|  70.6k|    pattern_ty _res = NULL;
 8153|  70.6k|    int _mark = p->mark;
 8154|  70.6k|    { // as_pattern
 8155|  70.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (8155:13): [True: 0, False: 70.6k]
  ------------------
 8156|      0|            p->level--;
 8157|      0|            return NULL;
 8158|      0|        }
 8159|  70.6k|        D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "as_pattern"));
 8160|  70.6k|        pattern_ty as_pattern_var;
 8161|  70.6k|        if (
 8162|  70.6k|            (as_pattern_var = as_pattern_rule(p))  // as_pattern
  ------------------
  |  Branch (8162:13): [True: 737, False: 69.8k]
  ------------------
 8163|  70.6k|        )
 8164|    737|        {
 8165|    737|            D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "as_pattern"));
 8166|    737|            _res = as_pattern_var;
 8167|    737|            goto done;
 8168|    737|        }
 8169|  69.8k|        p->mark = _mark;
 8170|  69.8k|        D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8171|  69.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "as_pattern"));
 8172|  69.8k|    }
 8173|      0|    { // or_pattern
 8174|  69.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (8174:13): [True: 3.44k, False: 66.4k]
  ------------------
 8175|  3.44k|            p->level--;
 8176|  3.44k|            return NULL;
 8177|  3.44k|        }
 8178|  66.4k|        D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern"));
 8179|  66.4k|        pattern_ty or_pattern_var;
 8180|  66.4k|        if (
 8181|  66.4k|            (or_pattern_var = or_pattern_rule(p))  // or_pattern
  ------------------
  |  Branch (8181:13): [True: 46.8k, False: 19.5k]
  ------------------
 8182|  66.4k|        )
 8183|  46.8k|        {
 8184|  46.8k|            D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern"));
 8185|  46.8k|            _res = or_pattern_var;
 8186|  46.8k|            goto done;
 8187|  46.8k|        }
 8188|  19.5k|        p->mark = _mark;
 8189|  19.5k|        D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8190|  19.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern"));
 8191|  19.5k|    }
 8192|  19.5k|    _res = NULL;
 8193|  67.1k|  done:
 8194|  67.1k|    p->level--;
 8195|  67.1k|    return _res;
 8196|  19.5k|}
parser.c:as_pattern_rule:
 8201|  70.6k|{
 8202|  70.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   141k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8202:9): [True: 0, False: 70.6k]
  |  Branch (8202:35): [True: 0, False: 70.6k]
  ------------------
 8203|      0|        _Pypegen_stack_overflow(p);
 8204|      0|    }
 8205|  70.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (8205:9): [True: 0, False: 70.6k]
  ------------------
 8206|      0|        p->level--;
 8207|      0|        return NULL;
 8208|      0|    }
 8209|  70.6k|    pattern_ty _res = NULL;
 8210|  70.6k|    int _mark = p->mark;
 8211|  70.6k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (8211:9): [True: 11.2k, False: 59.3k]
  |  Branch (8211:31): [True: 27, False: 11.2k]
  ------------------
 8212|     27|        p->error_indicator = 1;
 8213|     27|        p->level--;
 8214|     27|        return NULL;
 8215|     27|    }
 8216|  70.5k|    int _start_lineno = p->tokens[_mark]->lineno;
 8217|  70.5k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  70.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 70.5k]
  |  |  ------------------
  ------------------
 8218|  70.5k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 8219|  70.5k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  70.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 70.5k]
  |  |  ------------------
  ------------------
 8220|  70.5k|    { // or_pattern 'as' pattern_capture_target
 8221|  70.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (8221:13): [True: 0, False: 70.5k]
  ------------------
 8222|      0|            p->level--;
 8223|      0|            return NULL;
 8224|      0|        }
 8225|  70.5k|        D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
 8226|  70.5k|        Token * _keyword;
 8227|  70.5k|        pattern_ty pattern;
 8228|  70.5k|        expr_ty target;
 8229|  70.5k|        if (
 8230|  70.5k|            (pattern = or_pattern_rule(p))  // or_pattern
  ------------------
  |  Branch (8230:13): [True: 47.6k, False: 22.9k]
  ------------------
 8231|  47.6k|            &&
 8232|  47.6k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (8232:13): [True: 783, False: 46.8k]
  ------------------
 8233|    783|            &&
 8234|    783|            (target = pattern_capture_target_rule(p))  // pattern_capture_target
  ------------------
  |  Branch (8234:13): [True: 737, False: 46]
  ------------------
 8235|  70.5k|        )
 8236|    737|        {
 8237|    737|            D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
 8238|    737|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8239|    737|            if (_token == NULL) {
  ------------------
  |  Branch (8239:17): [True: 0, False: 737]
  ------------------
 8240|      0|                p->level--;
 8241|      0|                return NULL;
 8242|      0|            }
 8243|    737|            int _end_lineno = _token->end_lineno;
 8244|    737|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    737|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 737]
  |  |  ------------------
  ------------------
 8245|    737|            int _end_col_offset = _token->end_col_offset;
 8246|    737|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    737|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 737]
  |  |  ------------------
  ------------------
 8247|    737|            _res = _PyAST_MatchAs ( pattern , target -> v . Name . id , EXTRA );
  ------------------
  |  |  307|    737|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8248|    737|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8248:18): [True: 0, False: 737]
  |  Branch (8248:34): [True: 0, False: 737]
  |  Branch (8248:57): [True: 0, False: 0]
  ------------------
 8249|      0|                p->error_indicator = 1;
 8250|      0|                p->level--;
 8251|      0|                return NULL;
 8252|      0|            }
 8253|    737|            goto done;
 8254|    737|        }
 8255|  69.8k|        p->mark = _mark;
 8256|  69.8k|        D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8257|  69.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' pattern_capture_target"));
 8258|  69.8k|    }
 8259|  69.8k|    if (p->call_invalid_rules) { // invalid_as_pattern
  ------------------
  |  Branch (8259:9): [True: 44.9k, False: 24.9k]
  ------------------
 8260|  44.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (8260:13): [True: 2.94k, False: 41.9k]
  ------------------
 8261|  2.94k|            p->level--;
 8262|  2.94k|            return NULL;
 8263|  2.94k|        }
 8264|  41.9k|        D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern"));
 8265|  41.9k|        void *invalid_as_pattern_var;
 8266|  41.9k|        if (
 8267|  41.9k|            (invalid_as_pattern_var = invalid_as_pattern_rule(p))  // invalid_as_pattern
  ------------------
  |  Branch (8267:13): [True: 0, False: 41.9k]
  ------------------
 8268|  41.9k|        )
 8269|      0|        {
 8270|      0|            D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern"));
 8271|      0|            _res = invalid_as_pattern_var;
 8272|      0|            goto done;
 8273|      0|        }
 8274|  41.9k|        p->mark = _mark;
 8275|  41.9k|        D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8276|  41.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_as_pattern"));
 8277|  41.9k|    }
 8278|  66.9k|    _res = NULL;
 8279|  67.6k|  done:
 8280|  67.6k|    p->level--;
 8281|  67.6k|    return _res;
 8282|  66.9k|}
parser.c:invalid_as_pattern_rule:
24543|  41.9k|{
24544|  41.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  83.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24544:9): [True: 0, False: 41.9k]
  |  Branch (24544:35): [True: 0, False: 41.9k]
  ------------------
24545|      0|        _Pypegen_stack_overflow(p);
24546|      0|    }
24547|  41.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (24547:9): [True: 0, False: 41.9k]
  ------------------
24548|      0|        p->level--;
24549|      0|        return NULL;
24550|      0|    }
24551|  41.9k|    void * _res = NULL;
24552|  41.9k|    int _mark = p->mark;
24553|  41.9k|    { // or_pattern 'as' "_"
24554|  41.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (24554:13): [True: 0, False: 41.9k]
  ------------------
24555|      0|            p->level--;
24556|      0|            return NULL;
24557|      0|        }
24558|  41.9k|        D(fprintf(stderr, "%*c> invalid_as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' \"_\""));
24559|  41.9k|        Token * _keyword;
24560|  41.9k|        expr_ty a;
24561|  41.9k|        pattern_ty or_pattern_var;
24562|  41.9k|        if (
24563|  41.9k|            (or_pattern_var = or_pattern_rule(p))  // or_pattern
  ------------------
  |  Branch (24563:13): [True: 25.6k, False: 16.3k]
  ------------------
24564|  25.6k|            &&
24565|  25.6k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (24565:13): [True: 30, False: 25.5k]
  ------------------
24566|     30|            &&
24567|     30|            (a = _PyPegen_expect_soft_keyword(p, "_"))  // soft_keyword='"_"'
  ------------------
  |  Branch (24567:13): [True: 1, False: 29]
  ------------------
24568|  41.9k|        )
24569|      1|        {
24570|      1|            D(fprintf(stderr, "%*c+ invalid_as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' \"_\""));
24571|      1|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use '_' as a target" );
  ------------------
  |  |  239|      1|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
24572|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24572:18): [True: 1, False: 0]
  |  Branch (24572:34): [True: 0, False: 0]
  |  Branch (24572:57): [True: 1, False: 0]
  ------------------
24573|      1|                p->error_indicator = 1;
24574|      1|                p->level--;
24575|      1|                return NULL;
24576|      1|            }
24577|      0|            goto done;
24578|      1|        }
24579|  41.9k|        p->mark = _mark;
24580|  41.9k|        D(fprintf(stderr, "%*c%s invalid_as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
24581|  41.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' \"_\""));
24582|  41.9k|    }
24583|      0|    { // or_pattern 'as' expression
24584|  41.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (24584:13): [True: 0, False: 41.9k]
  ------------------
24585|      0|            p->level--;
24586|      0|            return NULL;
24587|      0|        }
24588|  41.9k|        D(fprintf(stderr, "%*c> invalid_as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' expression"));
24589|  41.9k|        Token * _keyword;
24590|  41.9k|        expr_ty a;
24591|  41.9k|        pattern_ty or_pattern_var;
24592|  41.9k|        if (
24593|  41.9k|            (or_pattern_var = or_pattern_rule(p))  // or_pattern
  ------------------
  |  Branch (24593:13): [True: 25.6k, False: 16.3k]
  ------------------
24594|  25.6k|            &&
24595|  25.6k|            (_keyword = _PyPegen_expect_token(p, 698))  // token='as'
  ------------------
  |  Branch (24595:13): [True: 29, False: 25.5k]
  ------------------
24596|     29|            &&
24597|     29|            (a = expression_rule(p))  // expression
  ------------------
  |  Branch (24597:13): [True: 2, False: 27]
  ------------------
24598|  41.9k|        )
24599|      2|        {
24600|      2|            D(fprintf(stderr, "%*c+ invalid_as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' expression"));
24601|      2|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( a , "cannot use %s as pattern target" , _PyPegen_get_expr_name ( a ) );
  ------------------
  |  |  239|      2|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
24602|      2|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24602:18): [True: 2, False: 0]
  |  Branch (24602:34): [True: 0, False: 0]
  |  Branch (24602:57): [True: 2, False: 0]
  ------------------
24603|      2|                p->error_indicator = 1;
24604|      2|                p->level--;
24605|      2|                return NULL;
24606|      2|            }
24607|      0|            goto done;
24608|      2|        }
24609|  41.9k|        p->mark = _mark;
24610|  41.9k|        D(fprintf(stderr, "%*c%s invalid_as_pattern[%d-%d]: %s failed!\n", p->level, ' ',
24611|  41.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' expression"));
24612|  41.9k|    }
24613|  41.9k|    _res = NULL;
24614|  41.9k|  done:
24615|  41.9k|    p->level--;
24616|  41.9k|    return _res;
24617|  41.9k|}
parser.c:or_pattern_rule:
 8287|   221k|{
 8288|   221k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   442k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8288:9): [True: 0, False: 221k]
  |  Branch (8288:35): [True: 0, False: 221k]
  ------------------
 8289|      0|        _Pypegen_stack_overflow(p);
 8290|      0|    }
 8291|   221k|    if (p->error_indicator) {
  ------------------
  |  Branch (8291:9): [True: 0, False: 221k]
  ------------------
 8292|      0|        p->level--;
 8293|      0|        return NULL;
 8294|      0|    }
 8295|   221k|    pattern_ty _res = NULL;
 8296|   221k|    int _mark = p->mark;
 8297|   221k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (8297:9): [True: 0, False: 221k]
  |  Branch (8297:31): [True: 0, False: 0]
  ------------------
 8298|      0|        p->error_indicator = 1;
 8299|      0|        p->level--;
 8300|      0|        return NULL;
 8301|      0|    }
 8302|   221k|    int _start_lineno = p->tokens[_mark]->lineno;
 8303|   221k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   221k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 221k]
  |  |  ------------------
  ------------------
 8304|   221k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 8305|   221k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   221k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 221k]
  |  |  ------------------
  ------------------
 8306|   221k|    { // '|'.closed_pattern+
 8307|   221k|        if (p->error_indicator) {
  ------------------
  |  Branch (8307:13): [True: 0, False: 221k]
  ------------------
 8308|      0|            p->level--;
 8309|      0|            return NULL;
 8310|      0|        }
 8311|   221k|        D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+"));
 8312|   221k|        asdl_pattern_seq* patterns;
 8313|   221k|        if (
 8314|   221k|            (patterns = (asdl_pattern_seq*)_gather_40_rule(p))  // '|'.closed_pattern+
  ------------------
  |  Branch (8314:13): [True: 145k, False: 75.0k]
  ------------------
 8315|   221k|        )
 8316|   145k|        {
 8317|   145k|            D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+"));
 8318|   145k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8319|   145k|            if (_token == NULL) {
  ------------------
  |  Branch (8319:17): [True: 0, False: 145k]
  ------------------
 8320|      0|                p->level--;
 8321|      0|                return NULL;
 8322|      0|            }
 8323|   145k|            int _end_lineno = _token->end_lineno;
 8324|   145k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|   145k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 145k]
  |  |  ------------------
  ------------------
 8325|   145k|            int _end_col_offset = _token->end_col_offset;
 8326|   145k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|   145k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 145k]
  |  |  ------------------
  ------------------
 8327|   145k|            _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA );
  ------------------
  |  |   83|   145k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   291k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 145k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA );
  ------------------
  |  |   82|   136k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   136k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
                          _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA );
  ------------------
  |  |  307|  9.49k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
  |  Branch (8327:20): [True: 136k, False: 9.49k]
  ------------------
 8328|   145k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8328:18): [True: 0, False: 145k]
  |  Branch (8328:34): [True: 246, False: 145k]
  |  Branch (8328:57): [True: 246, False: 0]
  ------------------
 8329|    246|                p->error_indicator = 1;
 8330|    246|                p->level--;
 8331|    246|                return NULL;
 8332|    246|            }
 8333|   145k|            goto done;
 8334|   145k|        }
 8335|  75.0k|        p->mark = _mark;
 8336|  75.0k|        D(fprintf(stderr, "%*c%s or_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8337|  75.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|'.closed_pattern+"));
 8338|  75.0k|    }
 8339|  75.0k|    _res = NULL;
 8340|   220k|  done:
 8341|   220k|    p->level--;
 8342|   220k|    return _res;
 8343|  75.0k|}
parser.c:_gather_40_rule:
29816|   221k|{
29817|   221k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   442k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29817:9): [True: 0, False: 221k]
  |  Branch (29817:35): [True: 0, False: 221k]
  ------------------
29818|      0|        _Pypegen_stack_overflow(p);
29819|      0|    }
29820|   221k|    if (p->error_indicator) {
  ------------------
  |  Branch (29820:9): [True: 0, False: 221k]
  ------------------
29821|      0|        p->level--;
29822|      0|        return NULL;
29823|      0|    }
29824|   221k|    asdl_seq * _res = NULL;
29825|   221k|    int _mark = p->mark;
29826|   221k|    { // closed_pattern _loop0_39
29827|   221k|        if (p->error_indicator) {
  ------------------
  |  Branch (29827:13): [True: 0, False: 221k]
  ------------------
29828|      0|            p->level--;
29829|      0|            return NULL;
29830|      0|        }
29831|   221k|        D(fprintf(stderr, "%*c> _gather_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_39"));
29832|   221k|        pattern_ty elem;
29833|   221k|        asdl_seq * seq;
29834|   221k|        if (
29835|   221k|            (elem = closed_pattern_rule(p))  // closed_pattern
  ------------------
  |  Branch (29835:13): [True: 145k, False: 75.0k]
  ------------------
29836|   145k|            &&
29837|   145k|            (seq = _loop0_39_rule(p))  // _loop0_39
  ------------------
  |  Branch (29837:13): [True: 145k, False: 0]
  ------------------
29838|   221k|        )
29839|   145k|        {
29840|   145k|            D(fprintf(stderr, "%*c+ _gather_40[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_39"));
29841|   145k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
29842|   145k|            goto done;
29843|   145k|        }
29844|  75.0k|        p->mark = _mark;
29845|  75.0k|        D(fprintf(stderr, "%*c%s _gather_40[%d-%d]: %s failed!\n", p->level, ' ',
29846|  75.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_39"));
29847|  75.0k|    }
29848|  75.0k|    _res = NULL;
29849|   221k|  done:
29850|   221k|    p->level--;
29851|   221k|    return _res;
29852|  75.0k|}
parser.c:closed_pattern_rule:
 8356|   241k|{
 8357|   241k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   482k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8357:9): [True: 0, False: 241k]
  |  Branch (8357:35): [True: 0, False: 241k]
  ------------------
 8358|      0|        _Pypegen_stack_overflow(p);
 8359|      0|    }
 8360|   241k|    if (p->error_indicator) {
  ------------------
  |  Branch (8360:9): [True: 0, False: 241k]
  ------------------
 8361|      0|        p->level--;
 8362|      0|        return NULL;
 8363|      0|    }
 8364|   241k|    pattern_ty _res = NULL;
 8365|   241k|    if (_PyPegen_is_memoized(p, closed_pattern_type, &_res)) {
  ------------------
  |  |  162|   241k|#define closed_pattern_type 1073
  ------------------
  |  Branch (8365:9): [True: 192k, False: 48.4k]
  ------------------
 8366|   192k|        p->level--;
 8367|   192k|        return _res;
 8368|   192k|    }
 8369|  48.4k|    int _mark = p->mark;
 8370|  48.4k|    { // literal_pattern
 8371|  48.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (8371:13): [True: 0, False: 48.4k]
  ------------------
 8372|      0|            p->level--;
 8373|      0|            return NULL;
 8374|      0|        }
 8375|  48.4k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern"));
 8376|  48.4k|        pattern_ty literal_pattern_var;
 8377|  48.4k|        if (
 8378|  48.4k|            (literal_pattern_var = literal_pattern_rule(p))  // literal_pattern
  ------------------
  |  Branch (8378:13): [True: 6.48k, False: 41.9k]
  ------------------
 8379|  48.4k|        )
 8380|  6.48k|        {
 8381|  6.48k|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_pattern"));
 8382|  6.48k|            _res = literal_pattern_var;
 8383|  6.48k|            goto done;
 8384|  6.48k|        }
 8385|  41.9k|        p->mark = _mark;
 8386|  41.9k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8387|  41.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_pattern"));
 8388|  41.9k|    }
 8389|      0|    { // capture_pattern
 8390|  41.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (8390:13): [True: 29, False: 41.9k]
  ------------------
 8391|     29|            p->level--;
 8392|     29|            return NULL;
 8393|     29|        }
 8394|  41.9k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern"));
 8395|  41.9k|        pattern_ty capture_pattern_var;
 8396|  41.9k|        if (
 8397|  41.9k|            (capture_pattern_var = capture_pattern_rule(p))  // capture_pattern
  ------------------
  |  Branch (8397:13): [True: 22.3k, False: 19.5k]
  ------------------
 8398|  41.9k|        )
 8399|  22.3k|        {
 8400|  22.3k|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "capture_pattern"));
 8401|  22.3k|            _res = capture_pattern_var;
 8402|  22.3k|            goto done;
 8403|  22.3k|        }
 8404|  19.5k|        p->mark = _mark;
 8405|  19.5k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8406|  19.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "capture_pattern"));
 8407|  19.5k|    }
 8408|      0|    { // wildcard_pattern
 8409|  19.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (8409:13): [True: 45, False: 19.5k]
  ------------------
 8410|     45|            p->level--;
 8411|     45|            return NULL;
 8412|     45|        }
 8413|  19.5k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern"));
 8414|  19.5k|        pattern_ty wildcard_pattern_var;
 8415|  19.5k|        if (
 8416|  19.5k|            (wildcard_pattern_var = wildcard_pattern_rule(p))  // wildcard_pattern
  ------------------
  |  Branch (8416:13): [True: 2.10k, False: 17.4k]
  ------------------
 8417|  19.5k|        )
 8418|  2.10k|        {
 8419|  2.10k|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "wildcard_pattern"));
 8420|  2.10k|            _res = wildcard_pattern_var;
 8421|  2.10k|            goto done;
 8422|  2.10k|        }
 8423|  17.4k|        p->mark = _mark;
 8424|  17.4k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8425|  17.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "wildcard_pattern"));
 8426|  17.4k|    }
 8427|      0|    { // value_pattern
 8428|  17.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (8428:13): [True: 0, False: 17.4k]
  ------------------
 8429|      0|            p->level--;
 8430|      0|            return NULL;
 8431|      0|        }
 8432|  17.4k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern"));
 8433|  17.4k|        pattern_ty value_pattern_var;
 8434|  17.4k|        if (
 8435|  17.4k|            (value_pattern_var = value_pattern_rule(p))  // value_pattern
  ------------------
  |  Branch (8435:13): [True: 1.15k, False: 16.2k]
  ------------------
 8436|  17.4k|        )
 8437|  1.15k|        {
 8438|  1.15k|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "value_pattern"));
 8439|  1.15k|            _res = value_pattern_var;
 8440|  1.15k|            goto done;
 8441|  1.15k|        }
 8442|  16.2k|        p->mark = _mark;
 8443|  16.2k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8444|  16.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "value_pattern"));
 8445|  16.2k|    }
 8446|      0|    { // group_pattern
 8447|  16.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (8447:13): [True: 4, False: 16.2k]
  ------------------
 8448|      4|            p->level--;
 8449|      4|            return NULL;
 8450|      4|        }
 8451|  16.2k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group_pattern"));
 8452|  16.2k|        pattern_ty group_pattern_var;
 8453|  16.2k|        if (
 8454|  16.2k|            (group_pattern_var = group_pattern_rule(p))  // group_pattern
  ------------------
  |  Branch (8454:13): [True: 43, False: 16.2k]
  ------------------
 8455|  16.2k|        )
 8456|     43|        {
 8457|     43|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group_pattern"));
 8458|     43|            _res = group_pattern_var;
 8459|     43|            goto done;
 8460|     43|        }
 8461|  16.2k|        p->mark = _mark;
 8462|  16.2k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8463|  16.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group_pattern"));
 8464|  16.2k|    }
 8465|      0|    { // sequence_pattern
 8466|  16.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (8466:13): [True: 638, False: 15.5k]
  ------------------
 8467|    638|            p->level--;
 8468|    638|            return NULL;
 8469|    638|        }
 8470|  15.5k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sequence_pattern"));
 8471|  15.5k|        pattern_ty sequence_pattern_var;
 8472|  15.5k|        if (
 8473|  15.5k|            (sequence_pattern_var = sequence_pattern_rule(p))  // sequence_pattern
  ------------------
  |  Branch (8473:13): [True: 623, False: 14.9k]
  ------------------
 8474|  15.5k|        )
 8475|    623|        {
 8476|    623|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sequence_pattern"));
 8477|    623|            _res = sequence_pattern_var;
 8478|    623|            goto done;
 8479|    623|        }
 8480|  14.9k|        p->mark = _mark;
 8481|  14.9k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8482|  14.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sequence_pattern"));
 8483|  14.9k|    }
 8484|      0|    { // mapping_pattern
 8485|  14.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (8485:13): [True: 978, False: 13.9k]
  ------------------
 8486|    978|            p->level--;
 8487|    978|            return NULL;
 8488|    978|        }
 8489|  13.9k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "mapping_pattern"));
 8490|  13.9k|        pattern_ty mapping_pattern_var;
 8491|  13.9k|        if (
 8492|  13.9k|            (mapping_pattern_var = mapping_pattern_rule(p))  // mapping_pattern
  ------------------
  |  Branch (8492:13): [True: 82, False: 13.9k]
  ------------------
 8493|  13.9k|        )
 8494|     82|        {
 8495|     82|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "mapping_pattern"));
 8496|     82|            _res = mapping_pattern_var;
 8497|     82|            goto done;
 8498|     82|        }
 8499|  13.9k|        p->mark = _mark;
 8500|  13.9k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8501|  13.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "mapping_pattern"));
 8502|  13.9k|    }
 8503|      0|    { // class_pattern
 8504|  13.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (8504:13): [True: 151, False: 13.7k]
  ------------------
 8505|    151|            p->level--;
 8506|    151|            return NULL;
 8507|    151|        }
 8508|  13.7k|        D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_pattern"));
 8509|  13.7k|        pattern_ty class_pattern_var;
 8510|  13.7k|        if (
 8511|  13.7k|            (class_pattern_var = class_pattern_rule(p))  // class_pattern
  ------------------
  |  Branch (8511:13): [True: 1.51k, False: 12.2k]
  ------------------
 8512|  13.7k|        )
 8513|  1.51k|        {
 8514|  1.51k|            D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_pattern"));
 8515|  1.51k|            _res = class_pattern_var;
 8516|  1.51k|            goto done;
 8517|  1.51k|        }
 8518|  12.2k|        p->mark = _mark;
 8519|  12.2k|        D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8520|  12.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_pattern"));
 8521|  12.2k|    }
 8522|  12.2k|    _res = NULL;
 8523|  46.5k|  done:
 8524|  46.5k|    _PyPegen_insert_memo(p, _mark, closed_pattern_type, _res);
  ------------------
  |  |  162|  46.5k|#define closed_pattern_type 1073
  ------------------
 8525|  46.5k|    p->level--;
 8526|  46.5k|    return _res;
 8527|  12.2k|}
parser.c:literal_pattern_rule:
 8538|  48.4k|{
 8539|  48.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  96.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8539:9): [True: 0, False: 48.4k]
  |  Branch (8539:35): [True: 0, False: 48.4k]
  ------------------
 8540|      0|        _Pypegen_stack_overflow(p);
 8541|      0|    }
 8542|  48.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (8542:9): [True: 0, False: 48.4k]
  ------------------
 8543|      0|        p->level--;
 8544|      0|        return NULL;
 8545|      0|    }
 8546|  48.4k|    pattern_ty _res = NULL;
 8547|  48.4k|    int _mark = p->mark;
 8548|  48.4k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (8548:9): [True: 0, False: 48.4k]
  |  Branch (8548:31): [True: 0, False: 0]
  ------------------
 8549|      0|        p->error_indicator = 1;
 8550|      0|        p->level--;
 8551|      0|        return NULL;
 8552|      0|    }
 8553|  48.4k|    int _start_lineno = p->tokens[_mark]->lineno;
 8554|  48.4k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  48.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
 8555|  48.4k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 8556|  48.4k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  48.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
 8557|  48.4k|    { // signed_number !('+' | '-')
 8558|  48.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (8558:13): [True: 0, False: 48.4k]
  ------------------
 8559|      0|            p->level--;
 8560|      0|            return NULL;
 8561|      0|        }
 8562|  48.4k|        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
 8563|  48.4k|        expr_ty value;
 8564|  48.4k|        if (
 8565|  48.4k|            (value = signed_number_rule(p))  // signed_number
  ------------------
  |  Branch (8565:13): [True: 4.43k, False: 44.0k]
  ------------------
 8566|  4.43k|            &&
 8567|  4.43k|            _PyPegen_lookahead(0, _tmp_41_rule, p)
  ------------------
  |  Branch (8567:13): [True: 4.34k, False: 93]
  ------------------
 8568|  48.4k|        )
 8569|  4.34k|        {
 8570|  4.34k|            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
 8571|  4.34k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8572|  4.34k|            if (_token == NULL) {
  ------------------
  |  Branch (8572:17): [True: 0, False: 4.34k]
  ------------------
 8573|      0|                p->level--;
 8574|      0|                return NULL;
 8575|      0|            }
 8576|  4.34k|            int _end_lineno = _token->end_lineno;
 8577|  4.34k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.34k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.34k]
  |  |  ------------------
  ------------------
 8578|  4.34k|            int _end_col_offset = _token->end_col_offset;
 8579|  4.34k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  4.34k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 4.34k]
  |  |  ------------------
  ------------------
 8580|  4.34k|            _res = _PyAST_MatchValue ( value , EXTRA );
  ------------------
  |  |  307|  4.34k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8581|  4.34k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8581:18): [True: 0, False: 4.34k]
  |  Branch (8581:34): [True: 10, False: 4.33k]
  |  Branch (8581:57): [True: 10, False: 0]
  ------------------
 8582|     10|                p->error_indicator = 1;
 8583|     10|                p->level--;
 8584|     10|                return NULL;
 8585|     10|            }
 8586|  4.33k|            goto done;
 8587|  4.34k|        }
 8588|  44.0k|        p->mark = _mark;
 8589|  44.0k|        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8590|  44.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')"));
 8591|  44.0k|    }
 8592|      0|    { // complex_number
 8593|  44.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (8593:13): [True: 4, False: 44.0k]
  ------------------
 8594|      4|            p->level--;
 8595|      4|            return NULL;
 8596|      4|        }
 8597|  44.0k|        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number"));
 8598|  44.0k|        expr_ty value;
 8599|  44.0k|        if (
 8600|  44.0k|            (value = complex_number_rule(p))  // complex_number
  ------------------
  |  Branch (8600:13): [True: 65, False: 44.0k]
  ------------------
 8601|  44.0k|        )
 8602|     65|        {
 8603|     65|            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number"));
 8604|     65|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8605|     65|            if (_token == NULL) {
  ------------------
  |  Branch (8605:17): [True: 0, False: 65]
  ------------------
 8606|      0|                p->level--;
 8607|      0|                return NULL;
 8608|      0|            }
 8609|     65|            int _end_lineno = _token->end_lineno;
 8610|     65|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     65|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 65]
  |  |  ------------------
  ------------------
 8611|     65|            int _end_col_offset = _token->end_col_offset;
 8612|     65|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     65|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 65]
  |  |  ------------------
  ------------------
 8613|     65|            _res = _PyAST_MatchValue ( value , EXTRA );
  ------------------
  |  |  307|     65|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8614|     65|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8614:18): [True: 0, False: 65]
  |  Branch (8614:34): [True: 0, False: 65]
  |  Branch (8614:57): [True: 0, False: 0]
  ------------------
 8615|      0|                p->error_indicator = 1;
 8616|      0|                p->level--;
 8617|      0|                return NULL;
 8618|      0|            }
 8619|     65|            goto done;
 8620|     65|        }
 8621|  44.0k|        p->mark = _mark;
 8622|  44.0k|        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8623|  44.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number"));
 8624|  44.0k|    }
 8625|      0|    { // strings
 8626|  44.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (8626:13): [True: 13, False: 44.0k]
  ------------------
 8627|     13|            p->level--;
 8628|     13|            return NULL;
 8629|     13|        }
 8630|  44.0k|        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings"));
 8631|  44.0k|        expr_ty value;
 8632|  44.0k|        if (
 8633|  44.0k|            (value = strings_rule(p))  // strings
  ------------------
  |  Branch (8633:13): [True: 533, False: 43.4k]
  ------------------
 8634|  44.0k|        )
 8635|    533|        {
 8636|    533|            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings"));
 8637|    533|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8638|    533|            if (_token == NULL) {
  ------------------
  |  Branch (8638:17): [True: 0, False: 533]
  ------------------
 8639|      0|                p->level--;
 8640|      0|                return NULL;
 8641|      0|            }
 8642|    533|            int _end_lineno = _token->end_lineno;
 8643|    533|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    533|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 533]
  |  |  ------------------
  ------------------
 8644|    533|            int _end_col_offset = _token->end_col_offset;
 8645|    533|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    533|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 533]
  |  |  ------------------
  ------------------
 8646|    533|            _res = _PyAST_MatchValue ( value , EXTRA );
  ------------------
  |  |  307|    533|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8647|    533|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8647:18): [True: 0, False: 533]
  |  Branch (8647:34): [True: 0, False: 533]
  |  Branch (8647:57): [True: 0, False: 0]
  ------------------
 8648|      0|                p->error_indicator = 1;
 8649|      0|                p->level--;
 8650|      0|                return NULL;
 8651|      0|            }
 8652|    533|            goto done;
 8653|    533|        }
 8654|  43.4k|        p->mark = _mark;
 8655|  43.4k|        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8656|  43.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings"));
 8657|  43.4k|    }
 8658|      0|    { // 'None'
 8659|  43.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (8659:13): [True: 2, False: 43.4k]
  ------------------
 8660|      2|            p->level--;
 8661|      2|            return NULL;
 8662|      2|        }
 8663|  43.4k|        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
 8664|  43.4k|        Token * _keyword;
 8665|  43.4k|        if (
 8666|  43.4k|            (_keyword = _PyPegen_expect_token(p, 628))  // token='None'
  ------------------
  |  Branch (8666:13): [True: 23, False: 43.4k]
  ------------------
 8667|  43.4k|        )
 8668|     23|        {
 8669|     23|            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
 8670|     23|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8671|     23|            if (_token == NULL) {
  ------------------
  |  Branch (8671:17): [True: 0, False: 23]
  ------------------
 8672|      0|                p->level--;
 8673|      0|                return NULL;
 8674|      0|            }
 8675|     23|            int _end_lineno = _token->end_lineno;
 8676|     23|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     23|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 23]
  |  |  ------------------
  ------------------
 8677|     23|            int _end_col_offset = _token->end_col_offset;
 8678|     23|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     23|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 23]
  |  |  ------------------
  ------------------
 8679|     23|            _res = _PyAST_MatchSingleton ( Py_None , EXTRA );
  ------------------
  |  |  616|     23|#  define Py_None (&_Py_NoneStruct)
  ------------------
                          _res = _PyAST_MatchSingleton ( Py_None , EXTRA );
  ------------------
  |  |  307|     23|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8680|     23|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8680:18): [True: 0, False: 23]
  |  Branch (8680:34): [True: 0, False: 23]
  |  Branch (8680:57): [True: 0, False: 0]
  ------------------
 8681|      0|                p->error_indicator = 1;
 8682|      0|                p->level--;
 8683|      0|                return NULL;
 8684|      0|            }
 8685|     23|            goto done;
 8686|     23|        }
 8687|  43.4k|        p->mark = _mark;
 8688|  43.4k|        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8689|  43.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
 8690|  43.4k|    }
 8691|      0|    { // 'True'
 8692|  43.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (8692:13): [True: 0, False: 43.4k]
  ------------------
 8693|      0|            p->level--;
 8694|      0|            return NULL;
 8695|      0|        }
 8696|  43.4k|        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
 8697|  43.4k|        Token * _keyword;
 8698|  43.4k|        if (
 8699|  43.4k|            (_keyword = _PyPegen_expect_token(p, 627))  // token='True'
  ------------------
  |  Branch (8699:13): [True: 449, False: 43.0k]
  ------------------
 8700|  43.4k|        )
 8701|    449|        {
 8702|    449|            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
 8703|    449|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8704|    449|            if (_token == NULL) {
  ------------------
  |  Branch (8704:17): [True: 0, False: 449]
  ------------------
 8705|      0|                p->level--;
 8706|      0|                return NULL;
 8707|      0|            }
 8708|    449|            int _end_lineno = _token->end_lineno;
 8709|    449|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    449|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 449]
  |  |  ------------------
  ------------------
 8710|    449|            int _end_col_offset = _token->end_col_offset;
 8711|    449|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    449|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 449]
  |  |  ------------------
  ------------------
 8712|    449|            _res = _PyAST_MatchSingleton ( Py_True , EXTRA );
  ------------------
  |  |   26|    449|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|    449|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    449|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = _PyAST_MatchSingleton ( Py_True , EXTRA );
  ------------------
  |  |  307|    449|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8713|    449|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8713:18): [True: 0, False: 449]
  |  Branch (8713:34): [True: 0, False: 449]
  |  Branch (8713:57): [True: 0, False: 0]
  ------------------
 8714|      0|                p->error_indicator = 1;
 8715|      0|                p->level--;
 8716|      0|                return NULL;
 8717|      0|            }
 8718|    449|            goto done;
 8719|    449|        }
 8720|  43.0k|        p->mark = _mark;
 8721|  43.0k|        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8722|  43.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
 8723|  43.0k|    }
 8724|      0|    { // 'False'
 8725|  43.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (8725:13): [True: 0, False: 43.0k]
  ------------------
 8726|      0|            p->level--;
 8727|      0|            return NULL;
 8728|      0|        }
 8729|  43.0k|        D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
 8730|  43.0k|        Token * _keyword;
 8731|  43.0k|        if (
 8732|  43.0k|            (_keyword = _PyPegen_expect_token(p, 629))  // token='False'
  ------------------
  |  Branch (8732:13): [True: 1.08k, False: 41.9k]
  ------------------
 8733|  43.0k|        )
 8734|  1.08k|        {
 8735|  1.08k|            D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
 8736|  1.08k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8737|  1.08k|            if (_token == NULL) {
  ------------------
  |  Branch (8737:17): [True: 0, False: 1.08k]
  ------------------
 8738|      0|                p->level--;
 8739|      0|                return NULL;
 8740|      0|            }
 8741|  1.08k|            int _end_lineno = _token->end_lineno;
 8742|  1.08k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.08k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.08k]
  |  |  ------------------
  ------------------
 8743|  1.08k|            int _end_col_offset = _token->end_col_offset;
 8744|  1.08k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.08k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.08k]
  |  |  ------------------
  ------------------
 8745|  1.08k|            _res = _PyAST_MatchSingleton ( Py_False , EXTRA );
  ------------------
  |  |   25|  1.08k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = _PyAST_MatchSingleton ( Py_False , EXTRA );
  ------------------
  |  |  307|  1.08k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8746|  1.08k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8746:18): [True: 0, False: 1.08k]
  |  Branch (8746:34): [True: 0, False: 1.08k]
  |  Branch (8746:57): [True: 0, False: 0]
  ------------------
 8747|      0|                p->error_indicator = 1;
 8748|      0|                p->level--;
 8749|      0|                return NULL;
 8750|      0|            }
 8751|  1.08k|            goto done;
 8752|  1.08k|        }
 8753|  41.9k|        p->mark = _mark;
 8754|  41.9k|        D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 8755|  41.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
 8756|  41.9k|    }
 8757|  41.9k|    _res = NULL;
 8758|  48.4k|  done:
 8759|  48.4k|    p->level--;
 8760|  48.4k|    return _res;
 8761|  41.9k|}
parser.c:signed_number_rule:
 9068|  51.9k|{
 9069|  51.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   103k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9069:9): [True: 0, False: 51.9k]
  |  Branch (9069:35): [True: 0, False: 51.9k]
  ------------------
 9070|      0|        _Pypegen_stack_overflow(p);
 9071|      0|    }
 9072|  51.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (9072:9): [True: 0, False: 51.9k]
  ------------------
 9073|      0|        p->level--;
 9074|      0|        return NULL;
 9075|      0|    }
 9076|  51.9k|    expr_ty _res = NULL;
 9077|  51.9k|    int _mark = p->mark;
 9078|  51.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9078:9): [True: 0, False: 51.9k]
  |  Branch (9078:31): [True: 0, False: 0]
  ------------------
 9079|      0|        p->error_indicator = 1;
 9080|      0|        p->level--;
 9081|      0|        return NULL;
 9082|      0|    }
 9083|  51.9k|    int _start_lineno = p->tokens[_mark]->lineno;
 9084|  51.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  51.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 51.9k]
  |  |  ------------------
  ------------------
 9085|  51.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9086|  51.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  51.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 51.9k]
  |  |  ------------------
  ------------------
 9087|  51.9k|    { // NUMBER
 9088|  51.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (9088:13): [True: 0, False: 51.9k]
  ------------------
 9089|      0|            p->level--;
 9090|      0|            return NULL;
 9091|      0|        }
 9092|  51.9k|        D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
 9093|  51.9k|        expr_ty number_var;
 9094|  51.9k|        if (
 9095|  51.9k|            (number_var = _PyPegen_number_token(p))  // NUMBER
  ------------------
  |  Branch (9095:13): [True: 7.04k, False: 44.9k]
  ------------------
 9096|  51.9k|        )
 9097|  7.04k|        {
 9098|  7.04k|            D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
 9099|  7.04k|            _res = number_var;
 9100|  7.04k|            goto done;
 9101|  7.04k|        }
 9102|  44.9k|        p->mark = _mark;
 9103|  44.9k|        D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ',
 9104|  44.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
 9105|  44.9k|    }
 9106|      0|    { // '+' NUMBER
 9107|  44.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (9107:13): [True: 0, False: 44.9k]
  ------------------
 9108|      0|            p->level--;
 9109|      0|            return NULL;
 9110|      0|        }
 9111|  44.9k|        D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' NUMBER"));
 9112|  44.9k|        Token * _literal;
 9113|  44.9k|        expr_ty number;
 9114|  44.9k|        if (
 9115|  44.9k|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (9115:13): [True: 36, False: 44.8k]
  ------------------
 9116|     36|            &&
 9117|     36|            (number = _PyPegen_number_token(p))  // NUMBER
  ------------------
  |  Branch (9117:13): [True: 21, False: 15]
  ------------------
 9118|  44.9k|        )
 9119|     21|        {
 9120|     21|            D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' NUMBER"));
 9121|     21|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9122|     21|            if (_token == NULL) {
  ------------------
  |  Branch (9122:17): [True: 0, False: 21]
  ------------------
 9123|      0|                p->level--;
 9124|      0|                return NULL;
 9125|      0|            }
 9126|     21|            int _end_lineno = _token->end_lineno;
 9127|     21|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     21|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 21]
  |  |  ------------------
  ------------------
 9128|     21|            int _end_col_offset = _token->end_col_offset;
 9129|     21|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     21|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 21]
  |  |  ------------------
  ------------------
 9130|     21|            _res = _PyAST_UnaryOp ( UAdd , number , EXTRA );
  ------------------
  |  |  307|     21|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9131|     21|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9131:18): [True: 0, False: 21]
  |  Branch (9131:34): [True: 0, False: 21]
  |  Branch (9131:57): [True: 0, False: 0]
  ------------------
 9132|      0|                p->error_indicator = 1;
 9133|      0|                p->level--;
 9134|      0|                return NULL;
 9135|      0|            }
 9136|     21|            goto done;
 9137|     21|        }
 9138|  44.9k|        p->mark = _mark;
 9139|  44.9k|        D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ',
 9140|  44.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' NUMBER"));
 9141|  44.9k|    }
 9142|      0|    { // '-' NUMBER
 9143|  44.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (9143:13): [True: 1, False: 44.9k]
  ------------------
 9144|      1|            p->level--;
 9145|      1|            return NULL;
 9146|      1|        }
 9147|  44.9k|        D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER"));
 9148|  44.9k|        Token * _literal;
 9149|  44.9k|        expr_ty number;
 9150|  44.9k|        if (
 9151|  44.9k|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (9151:13): [True: 384, False: 44.5k]
  ------------------
 9152|    384|            &&
 9153|    384|            (number = _PyPegen_number_token(p))  // NUMBER
  ------------------
  |  Branch (9153:13): [True: 366, False: 18]
  ------------------
 9154|  44.9k|        )
 9155|    366|        {
 9156|    366|            D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER"));
 9157|    366|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9158|    366|            if (_token == NULL) {
  ------------------
  |  Branch (9158:17): [True: 0, False: 366]
  ------------------
 9159|      0|                p->level--;
 9160|      0|                return NULL;
 9161|      0|            }
 9162|    366|            int _end_lineno = _token->end_lineno;
 9163|    366|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    366|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 366]
  |  |  ------------------
  ------------------
 9164|    366|            int _end_col_offset = _token->end_col_offset;
 9165|    366|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    366|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 366]
  |  |  ------------------
  ------------------
 9166|    366|            _res = _PyAST_UnaryOp ( USub , number , EXTRA );
  ------------------
  |  |  307|    366|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9167|    366|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9167:18): [True: 0, False: 366]
  |  Branch (9167:34): [True: 0, False: 366]
  |  Branch (9167:57): [True: 0, False: 0]
  ------------------
 9168|      0|                p->error_indicator = 1;
 9169|      0|                p->level--;
 9170|      0|                return NULL;
 9171|      0|            }
 9172|    366|            goto done;
 9173|    366|        }
 9174|  44.5k|        p->mark = _mark;
 9175|  44.5k|        D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ',
 9176|  44.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' NUMBER"));
 9177|  44.5k|    }
 9178|  44.5k|    _res = NULL;
 9179|  51.9k|  done:
 9180|  51.9k|    p->level--;
 9181|  51.9k|    return _res;
 9182|  44.5k|}
parser.c:_tmp_41_rule:
29857|  7.42k|{
29858|  7.42k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  14.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29858:9): [True: 0, False: 7.42k]
  |  Branch (29858:35): [True: 0, False: 7.42k]
  ------------------
29859|      0|        _Pypegen_stack_overflow(p);
29860|      0|    }
29861|  7.42k|    if (p->error_indicator) {
  ------------------
  |  Branch (29861:9): [True: 0, False: 7.42k]
  ------------------
29862|      0|        p->level--;
29863|      0|        return NULL;
29864|      0|    }
29865|  7.42k|    void * _res = NULL;
29866|  7.42k|    int _mark = p->mark;
29867|  7.42k|    { // '+'
29868|  7.42k|        if (p->error_indicator) {
  ------------------
  |  Branch (29868:13): [True: 0, False: 7.42k]
  ------------------
29869|      0|            p->level--;
29870|      0|            return NULL;
29871|      0|        }
29872|  7.42k|        D(fprintf(stderr, "%*c> _tmp_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'"));
29873|  7.42k|        Token * _literal;
29874|  7.42k|        if (
29875|  7.42k|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (29875:13): [True: 74, False: 7.35k]
  ------------------
29876|  7.42k|        )
29877|     74|        {
29878|     74|            D(fprintf(stderr, "%*c+ _tmp_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'"));
29879|     74|            _res = _literal;
29880|     74|            goto done;
29881|     74|        }
29882|  7.35k|        p->mark = _mark;
29883|  7.35k|        D(fprintf(stderr, "%*c%s _tmp_41[%d-%d]: %s failed!\n", p->level, ' ',
29884|  7.35k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'"));
29885|  7.35k|    }
29886|      0|    { // '-'
29887|  7.35k|        if (p->error_indicator) {
  ------------------
  |  Branch (29887:13): [True: 14, False: 7.33k]
  ------------------
29888|     14|            p->level--;
29889|     14|            return NULL;
29890|     14|        }
29891|  7.33k|        D(fprintf(stderr, "%*c> _tmp_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'"));
29892|  7.33k|        Token * _literal;
29893|  7.33k|        if (
29894|  7.33k|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (29894:13): [True: 64, False: 7.27k]
  ------------------
29895|  7.33k|        )
29896|     64|        {
29897|     64|            D(fprintf(stderr, "%*c+ _tmp_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'"));
29898|     64|            _res = _literal;
29899|     64|            goto done;
29900|     64|        }
29901|  7.27k|        p->mark = _mark;
29902|  7.27k|        D(fprintf(stderr, "%*c%s _tmp_41[%d-%d]: %s failed!\n", p->level, ' ',
29903|  7.27k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'"));
29904|  7.27k|    }
29905|  7.27k|    _res = NULL;
29906|  7.41k|  done:
29907|  7.41k|    p->level--;
29908|  7.41k|    return _res;
29909|  7.27k|}
parser.c:complex_number_rule:
 8962|  44.6k|{
 8963|  44.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  89.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8963:9): [True: 0, False: 44.6k]
  |  Branch (8963:35): [True: 0, False: 44.6k]
  ------------------
 8964|      0|        _Pypegen_stack_overflow(p);
 8965|      0|    }
 8966|  44.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (8966:9): [True: 0, False: 44.6k]
  ------------------
 8967|      0|        p->level--;
 8968|      0|        return NULL;
 8969|      0|    }
 8970|  44.6k|    expr_ty _res = NULL;
 8971|  44.6k|    int _mark = p->mark;
 8972|  44.6k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (8972:9): [True: 0, False: 44.6k]
  |  Branch (8972:31): [True: 0, False: 0]
  ------------------
 8973|      0|        p->error_indicator = 1;
 8974|      0|        p->level--;
 8975|      0|        return NULL;
 8976|      0|    }
 8977|  44.6k|    int _start_lineno = p->tokens[_mark]->lineno;
 8978|  44.6k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  44.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 44.6k]
  |  |  ------------------
  ------------------
 8979|  44.6k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 8980|  44.6k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  44.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 44.6k]
  |  |  ------------------
  ------------------
 8981|  44.6k|    { // signed_real_number '+' imaginary_number
 8982|  44.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (8982:13): [True: 0, False: 44.6k]
  ------------------
 8983|      0|            p->level--;
 8984|      0|            return NULL;
 8985|      0|        }
 8986|  44.6k|        D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number"));
 8987|  44.6k|        Token * _literal;
 8988|  44.6k|        expr_ty imag;
 8989|  44.6k|        expr_ty real;
 8990|  44.6k|        if (
 8991|  44.6k|            (real = signed_real_number_rule(p))  // signed_real_number
  ------------------
  |  Branch (8991:13): [True: 136, False: 44.5k]
  ------------------
 8992|    136|            &&
 8993|    136|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (8993:13): [True: 74, False: 62]
  ------------------
 8994|     74|            &&
 8995|     74|            (imag = imaginary_number_rule(p))  // imaginary_number
  ------------------
  |  Branch (8995:13): [True: 49, False: 25]
  ------------------
 8996|  44.6k|        )
 8997|     49|        {
 8998|     49|            D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number"));
 8999|     49|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9000|     49|            if (_token == NULL) {
  ------------------
  |  Branch (9000:17): [True: 0, False: 49]
  ------------------
 9001|      0|                p->level--;
 9002|      0|                return NULL;
 9003|      0|            }
 9004|     49|            int _end_lineno = _token->end_lineno;
 9005|     49|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     49|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 49]
  |  |  ------------------
  ------------------
 9006|     49|            int _end_col_offset = _token->end_col_offset;
 9007|     49|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     49|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 49]
  |  |  ------------------
  ------------------
 9008|     49|            _res = _PyAST_BinOp ( real , Add , imag , EXTRA );
  ------------------
  |  |  307|     49|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9009|     49|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9009:18): [True: 0, False: 49]
  |  Branch (9009:34): [True: 0, False: 49]
  |  Branch (9009:57): [True: 0, False: 0]
  ------------------
 9010|      0|                p->error_indicator = 1;
 9011|      0|                p->level--;
 9012|      0|                return NULL;
 9013|      0|            }
 9014|     49|            goto done;
 9015|     49|        }
 9016|  44.6k|        p->mark = _mark;
 9017|  44.6k|        D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ',
 9018|  44.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '+' imaginary_number"));
 9019|  44.6k|    }
 9020|      0|    { // signed_real_number '-' imaginary_number
 9021|  44.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (9021:13): [True: 10, False: 44.6k]
  ------------------
 9022|     10|            p->level--;
 9023|     10|            return NULL;
 9024|     10|        }
 9025|  44.6k|        D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number"));
 9026|  44.6k|        Token * _literal;
 9027|  44.6k|        expr_ty imag;
 9028|  44.6k|        expr_ty real;
 9029|  44.6k|        if (
 9030|  44.6k|            (real = signed_real_number_rule(p))  // signed_real_number
  ------------------
  |  Branch (9030:13): [True: 79, False: 44.5k]
  ------------------
 9031|     79|            &&
 9032|     79|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (9032:13): [True: 62, False: 17]
  ------------------
 9033|     62|            &&
 9034|     62|            (imag = imaginary_number_rule(p))  // imaginary_number
  ------------------
  |  Branch (9034:13): [True: 25, False: 37]
  ------------------
 9035|  44.6k|        )
 9036|     25|        {
 9037|     25|            D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number"));
 9038|     25|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9039|     25|            if (_token == NULL) {
  ------------------
  |  Branch (9039:17): [True: 0, False: 25]
  ------------------
 9040|      0|                p->level--;
 9041|      0|                return NULL;
 9042|      0|            }
 9043|     25|            int _end_lineno = _token->end_lineno;
 9044|     25|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     25|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 25]
  |  |  ------------------
  ------------------
 9045|     25|            int _end_col_offset = _token->end_col_offset;
 9046|     25|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     25|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 25]
  |  |  ------------------
  ------------------
 9047|     25|            _res = _PyAST_BinOp ( real , Sub , imag , EXTRA );
  ------------------
  |  |  307|     25|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9048|     25|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9048:18): [True: 0, False: 25]
  |  Branch (9048:34): [True: 0, False: 25]
  |  Branch (9048:57): [True: 0, False: 0]
  ------------------
 9049|      0|                p->error_indicator = 1;
 9050|      0|                p->level--;
 9051|      0|                return NULL;
 9052|      0|            }
 9053|     25|            goto done;
 9054|     25|        }
 9055|  44.5k|        p->mark = _mark;
 9056|  44.5k|        D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ',
 9057|  44.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '-' imaginary_number"));
 9058|  44.5k|    }
 9059|  44.5k|    _res = NULL;
 9060|  44.6k|  done:
 9061|  44.6k|    p->level--;
 9062|  44.6k|    return _res;
 9063|  44.5k|}
parser.c:signed_real_number_rule:
 9187|  89.2k|{
 9188|  89.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   178k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9188:9): [True: 0, False: 89.2k]
  |  Branch (9188:35): [True: 0, False: 89.2k]
  ------------------
 9189|      0|        _Pypegen_stack_overflow(p);
 9190|      0|    }
 9191|  89.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (9191:9): [True: 0, False: 89.2k]
  ------------------
 9192|      0|        p->level--;
 9193|      0|        return NULL;
 9194|      0|    }
 9195|  89.2k|    expr_ty _res = NULL;
 9196|  89.2k|    int _mark = p->mark;
 9197|  89.2k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9197:9): [True: 0, False: 89.2k]
  |  Branch (9197:31): [True: 0, False: 0]
  ------------------
 9198|      0|        p->error_indicator = 1;
 9199|      0|        p->level--;
 9200|      0|        return NULL;
 9201|      0|    }
 9202|  89.2k|    int _start_lineno = p->tokens[_mark]->lineno;
 9203|  89.2k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  89.2k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 89.2k]
  |  |  ------------------
  ------------------
 9204|  89.2k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9205|  89.2k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  89.2k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 89.2k]
  |  |  ------------------
  ------------------
 9206|  89.2k|    { // real_number
 9207|  89.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (9207:13): [True: 0, False: 89.2k]
  ------------------
 9208|      0|            p->level--;
 9209|      0|            return NULL;
 9210|      0|        }
 9211|  89.2k|        D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "real_number"));
 9212|  89.2k|        expr_ty real_number_var;
 9213|  89.2k|        if (
 9214|  89.2k|            (real_number_var = real_number_rule(p))  // real_number
  ------------------
  |  Branch (9214:13): [True: 162, False: 89.1k]
  ------------------
 9215|  89.2k|        )
 9216|    162|        {
 9217|    162|            D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "real_number"));
 9218|    162|            _res = real_number_var;
 9219|    162|            goto done;
 9220|    162|        }
 9221|  89.1k|        p->mark = _mark;
 9222|  89.1k|        D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ',
 9223|  89.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "real_number"));
 9224|  89.1k|    }
 9225|      0|    { // '+' real_number
 9226|  89.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (9226:13): [True: 1, False: 89.1k]
  ------------------
 9227|      1|            p->level--;
 9228|      1|            return NULL;
 9229|      1|        }
 9230|  89.1k|        D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' real_number"));
 9231|  89.1k|        Token * _literal;
 9232|  89.1k|        expr_ty real;
 9233|  89.1k|        if (
 9234|  89.1k|            (_literal = _PyPegen_expect_token(p, 14))  // token='+'
  ------------------
  |  Branch (9234:13): [True: 45, False: 89.0k]
  ------------------
 9235|     45|            &&
 9236|     45|            (real = real_number_rule(p))  // real_number
  ------------------
  |  Branch (9236:13): [True: 17, False: 28]
  ------------------
 9237|  89.1k|        )
 9238|     17|        {
 9239|     17|            D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' real_number"));
 9240|     17|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9241|     17|            if (_token == NULL) {
  ------------------
  |  Branch (9241:17): [True: 0, False: 17]
  ------------------
 9242|      0|                p->level--;
 9243|      0|                return NULL;
 9244|      0|            }
 9245|     17|            int _end_lineno = _token->end_lineno;
 9246|     17|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     17|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17]
  |  |  ------------------
  ------------------
 9247|     17|            int _end_col_offset = _token->end_col_offset;
 9248|     17|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     17|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17]
  |  |  ------------------
  ------------------
 9249|     17|            _res = _PyAST_UnaryOp ( UAdd , real , EXTRA );
  ------------------
  |  |  307|     17|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9250|     17|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9250:18): [True: 0, False: 17]
  |  Branch (9250:34): [True: 0, False: 17]
  |  Branch (9250:57): [True: 0, False: 0]
  ------------------
 9251|      0|                p->error_indicator = 1;
 9252|      0|                p->level--;
 9253|      0|                return NULL;
 9254|      0|            }
 9255|     17|            goto done;
 9256|     17|        }
 9257|  89.0k|        p->mark = _mark;
 9258|  89.0k|        D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ',
 9259|  89.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' real_number"));
 9260|  89.0k|    }
 9261|      0|    { // '-' real_number
 9262|  89.0k|        if (p->error_indicator) {
  ------------------
  |  Branch (9262:13): [True: 0, False: 89.0k]
  ------------------
 9263|      0|            p->level--;
 9264|      0|            return NULL;
 9265|      0|        }
 9266|  89.0k|        D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' real_number"));
 9267|  89.0k|        Token * _literal;
 9268|  89.0k|        expr_ty real;
 9269|  89.0k|        if (
 9270|  89.0k|            (_literal = _PyPegen_expect_token(p, 15))  // token='-'
  ------------------
  |  Branch (9270:13): [True: 65, False: 89.0k]
  ------------------
 9271|     65|            &&
 9272|     65|            (real = real_number_rule(p))  // real_number
  ------------------
  |  Branch (9272:13): [True: 36, False: 29]
  ------------------
 9273|  89.0k|        )
 9274|     36|        {
 9275|     36|            D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' real_number"));
 9276|     36|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9277|     36|            if (_token == NULL) {
  ------------------
  |  Branch (9277:17): [True: 0, False: 36]
  ------------------
 9278|      0|                p->level--;
 9279|      0|                return NULL;
 9280|      0|            }
 9281|     36|            int _end_lineno = _token->end_lineno;
 9282|     36|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     36|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 36]
  |  |  ------------------
  ------------------
 9283|     36|            int _end_col_offset = _token->end_col_offset;
 9284|     36|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     36|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 36]
  |  |  ------------------
  ------------------
 9285|     36|            _res = _PyAST_UnaryOp ( USub , real , EXTRA );
  ------------------
  |  |  307|     36|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9286|     36|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9286:18): [True: 0, False: 36]
  |  Branch (9286:34): [True: 0, False: 36]
  |  Branch (9286:57): [True: 0, False: 0]
  ------------------
 9287|      0|                p->error_indicator = 1;
 9288|      0|                p->level--;
 9289|      0|                return NULL;
 9290|      0|            }
 9291|     36|            goto done;
 9292|     36|        }
 9293|  89.0k|        p->mark = _mark;
 9294|  89.0k|        D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ',
 9295|  89.0k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' real_number"));
 9296|  89.0k|    }
 9297|  89.0k|    _res = NULL;
 9298|  89.2k|  done:
 9299|  89.2k|    p->level--;
 9300|  89.2k|    return _res;
 9301|  89.0k|}
parser.c:real_number_rule:
 9306|  89.3k|{
 9307|  89.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   178k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9307:9): [True: 0, False: 89.3k]
  |  Branch (9307:35): [True: 0, False: 89.3k]
  ------------------
 9308|      0|        _Pypegen_stack_overflow(p);
 9309|      0|    }
 9310|  89.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (9310:9): [True: 0, False: 89.3k]
  ------------------
 9311|      0|        p->level--;
 9312|      0|        return NULL;
 9313|      0|    }
 9314|  89.3k|    expr_ty _res = NULL;
 9315|  89.3k|    int _mark = p->mark;
 9316|  89.3k|    { // NUMBER
 9317|  89.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (9317:13): [True: 0, False: 89.3k]
  ------------------
 9318|      0|            p->level--;
 9319|      0|            return NULL;
 9320|      0|        }
 9321|  89.3k|        D(fprintf(stderr, "%*c> real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
 9322|  89.3k|        expr_ty real;
 9323|  89.3k|        if (
 9324|  89.3k|            (real = _PyPegen_number_token(p))  // NUMBER
  ------------------
  |  Branch (9324:13): [True: 217, False: 89.1k]
  ------------------
 9325|  89.3k|        )
 9326|    217|        {
 9327|    217|            D(fprintf(stderr, "%*c+ real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
 9328|    217|            _res = _PyPegen_ensure_real ( p , real );
 9329|    217|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9329:18): [True: 2, False: 215]
  |  Branch (9329:34): [True: 0, False: 215]
  |  Branch (9329:57): [True: 2, False: 0]
  ------------------
 9330|      2|                p->error_indicator = 1;
 9331|      2|                p->level--;
 9332|      2|                return NULL;
 9333|      2|            }
 9334|    215|            goto done;
 9335|    217|        }
 9336|  89.1k|        p->mark = _mark;
 9337|  89.1k|        D(fprintf(stderr, "%*c%s real_number[%d-%d]: %s failed!\n", p->level, ' ',
 9338|  89.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
 9339|  89.1k|    }
 9340|  89.1k|    _res = NULL;
 9341|  89.3k|  done:
 9342|  89.3k|    p->level--;
 9343|  89.3k|    return _res;
 9344|  89.1k|}
parser.c:imaginary_number_rule:
 9349|    136|{
 9350|    136|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    272|#  define MAXSTACK 6000
  ------------------
  |  Branch (9350:9): [True: 0, False: 136]
  |  Branch (9350:35): [True: 0, False: 136]
  ------------------
 9351|      0|        _Pypegen_stack_overflow(p);
 9352|      0|    }
 9353|    136|    if (p->error_indicator) {
  ------------------
  |  Branch (9353:9): [True: 0, False: 136]
  ------------------
 9354|      0|        p->level--;
 9355|      0|        return NULL;
 9356|      0|    }
 9357|    136|    expr_ty _res = NULL;
 9358|    136|    int _mark = p->mark;
 9359|    136|    { // NUMBER
 9360|    136|        if (p->error_indicator) {
  ------------------
  |  Branch (9360:13): [True: 0, False: 136]
  ------------------
 9361|      0|            p->level--;
 9362|      0|            return NULL;
 9363|      0|        }
 9364|    136|        D(fprintf(stderr, "%*c> imaginary_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER"));
 9365|    136|        expr_ty imag;
 9366|    136|        if (
 9367|    136|            (imag = _PyPegen_number_token(p))  // NUMBER
  ------------------
  |  Branch (9367:13): [True: 84, False: 52]
  ------------------
 9368|    136|        )
 9369|     84|        {
 9370|     84|            D(fprintf(stderr, "%*c+ imaginary_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER"));
 9371|     84|            _res = _PyPegen_ensure_imaginary ( p , imag );
 9372|     84|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9372:18): [True: 10, False: 74]
  |  Branch (9372:34): [True: 0, False: 74]
  |  Branch (9372:57): [True: 10, False: 0]
  ------------------
 9373|     10|                p->error_indicator = 1;
 9374|     10|                p->level--;
 9375|     10|                return NULL;
 9376|     10|            }
 9377|     74|            goto done;
 9378|     84|        }
 9379|     52|        p->mark = _mark;
 9380|     52|        D(fprintf(stderr, "%*c%s imaginary_number[%d-%d]: %s failed!\n", p->level, ' ',
 9381|     52|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER"));
 9382|     52|    }
 9383|     52|    _res = NULL;
 9384|    126|  done:
 9385|    126|    p->level--;
 9386|    126|    return _res;
 9387|     52|}
parser.c:capture_pattern_rule:
 9392|  41.9k|{
 9393|  41.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  83.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9393:9): [True: 0, False: 41.9k]
  |  Branch (9393:35): [True: 0, False: 41.9k]
  ------------------
 9394|      0|        _Pypegen_stack_overflow(p);
 9395|      0|    }
 9396|  41.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (9396:9): [True: 0, False: 41.9k]
  ------------------
 9397|      0|        p->level--;
 9398|      0|        return NULL;
 9399|      0|    }
 9400|  41.9k|    pattern_ty _res = NULL;
 9401|  41.9k|    int _mark = p->mark;
 9402|  41.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9402:9): [True: 0, False: 41.9k]
  |  Branch (9402:31): [True: 0, False: 0]
  ------------------
 9403|      0|        p->error_indicator = 1;
 9404|      0|        p->level--;
 9405|      0|        return NULL;
 9406|      0|    }
 9407|  41.9k|    int _start_lineno = p->tokens[_mark]->lineno;
 9408|  41.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  41.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 41.9k]
  |  |  ------------------
  ------------------
 9409|  41.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9410|  41.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  41.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 41.9k]
  |  |  ------------------
  ------------------
 9411|  41.9k|    { // pattern_capture_target
 9412|  41.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (9412:13): [True: 0, False: 41.9k]
  ------------------
 9413|      0|            p->level--;
 9414|      0|            return NULL;
 9415|      0|        }
 9416|  41.9k|        D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern_capture_target"));
 9417|  41.9k|        expr_ty target;
 9418|  41.9k|        if (
 9419|  41.9k|            (target = pattern_capture_target_rule(p))  // pattern_capture_target
  ------------------
  |  Branch (9419:13): [True: 22.3k, False: 19.5k]
  ------------------
 9420|  41.9k|        )
 9421|  22.3k|        {
 9422|  22.3k|            D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern_capture_target"));
 9423|  22.3k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9424|  22.3k|            if (_token == NULL) {
  ------------------
  |  Branch (9424:17): [True: 0, False: 22.3k]
  ------------------
 9425|      0|                p->level--;
 9426|      0|                return NULL;
 9427|      0|            }
 9428|  22.3k|            int _end_lineno = _token->end_lineno;
 9429|  22.3k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  22.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 22.3k]
  |  |  ------------------
  ------------------
 9430|  22.3k|            int _end_col_offset = _token->end_col_offset;
 9431|  22.3k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  22.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 22.3k]
  |  |  ------------------
  ------------------
 9432|  22.3k|            _res = _PyAST_MatchAs ( NULL , target -> v . Name . id , EXTRA );
  ------------------
  |  |  307|  22.3k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9433|  22.3k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9433:18): [True: 0, False: 22.3k]
  |  Branch (9433:34): [True: 0, False: 22.3k]
  |  Branch (9433:57): [True: 0, False: 0]
  ------------------
 9434|      0|                p->error_indicator = 1;
 9435|      0|                p->level--;
 9436|      0|                return NULL;
 9437|      0|            }
 9438|  22.3k|            goto done;
 9439|  22.3k|        }
 9440|  19.5k|        p->mark = _mark;
 9441|  19.5k|        D(fprintf(stderr, "%*c%s capture_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9442|  19.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern_capture_target"));
 9443|  19.5k|    }
 9444|  19.5k|    _res = NULL;
 9445|  41.9k|  done:
 9446|  41.9k|    p->level--;
 9447|  41.9k|    return _res;
 9448|  19.5k|}
parser.c:value_pattern_rule:
 9561|  17.4k|{
 9562|  17.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  34.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9562:9): [True: 0, False: 17.4k]
  |  Branch (9562:35): [True: 0, False: 17.4k]
  ------------------
 9563|      0|        _Pypegen_stack_overflow(p);
 9564|      0|    }
 9565|  17.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (9565:9): [True: 0, False: 17.4k]
  ------------------
 9566|      0|        p->level--;
 9567|      0|        return NULL;
 9568|      0|    }
 9569|  17.4k|    pattern_ty _res = NULL;
 9570|  17.4k|    int _mark = p->mark;
 9571|  17.4k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9571:9): [True: 0, False: 17.4k]
  |  Branch (9571:31): [True: 0, False: 0]
  ------------------
 9572|      0|        p->error_indicator = 1;
 9573|      0|        p->level--;
 9574|      0|        return NULL;
 9575|      0|    }
 9576|  17.4k|    int _start_lineno = p->tokens[_mark]->lineno;
 9577|  17.4k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
 9578|  17.4k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9579|  17.4k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  17.4k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 17.4k]
  |  |  ------------------
  ------------------
 9580|  17.4k|    { // attr !('.' | '(' | '=')
 9581|  17.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (9581:13): [True: 0, False: 17.4k]
  ------------------
 9582|      0|            p->level--;
 9583|      0|            return NULL;
 9584|      0|        }
 9585|  17.4k|        D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')"));
 9586|  17.4k|        expr_ty attr;
 9587|  17.4k|        if (
 9588|  17.4k|            (attr = attr_rule(p))  // attr
  ------------------
  |  Branch (9588:13): [True: 1.17k, False: 16.2k]
  ------------------
 9589|  1.17k|            &&
 9590|  1.17k|            _PyPegen_lookahead(0, _tmp_43_rule, p)
  ------------------
  |  Branch (9590:13): [True: 1.15k, False: 21]
  ------------------
 9591|  17.4k|        )
 9592|  1.15k|        {
 9593|  1.15k|            D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')"));
 9594|  1.15k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9595|  1.15k|            if (_token == NULL) {
  ------------------
  |  Branch (9595:17): [True: 0, False: 1.15k]
  ------------------
 9596|      0|                p->level--;
 9597|      0|                return NULL;
 9598|      0|            }
 9599|  1.15k|            int _end_lineno = _token->end_lineno;
 9600|  1.15k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.15k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.15k]
  |  |  ------------------
  ------------------
 9601|  1.15k|            int _end_col_offset = _token->end_col_offset;
 9602|  1.15k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.15k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.15k]
  |  |  ------------------
  ------------------
 9603|  1.15k|            _res = _PyAST_MatchValue ( attr , EXTRA );
  ------------------
  |  |  307|  1.15k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9604|  1.15k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9604:18): [True: 0, False: 1.15k]
  |  Branch (9604:34): [True: 0, False: 1.15k]
  |  Branch (9604:57): [True: 0, False: 0]
  ------------------
 9605|      0|                p->error_indicator = 1;
 9606|      0|                p->level--;
 9607|      0|                return NULL;
 9608|      0|            }
 9609|  1.15k|            goto done;
 9610|  1.15k|        }
 9611|  16.2k|        p->mark = _mark;
 9612|  16.2k|        D(fprintf(stderr, "%*c%s value_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9613|  16.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr !('.' | '(' | '=')"));
 9614|  16.2k|    }
 9615|  16.2k|    _res = NULL;
 9616|  17.4k|  done:
 9617|  17.4k|    p->level--;
 9618|  17.4k|    return _res;
 9619|  16.2k|}
parser.c:attr_rule:
 9626|  96.8k|{
 9627|  96.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   193k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9627:9): [True: 0, False: 96.8k]
  |  Branch (9627:35): [True: 0, False: 96.8k]
  ------------------
 9628|      0|        _Pypegen_stack_overflow(p);
 9629|      0|    }
 9630|  96.8k|    expr_ty _res = NULL;
 9631|  96.8k|    if (_PyPegen_is_memoized(p, attr_type, &_res)) {
  ------------------
  |  |  174|  96.8k|#define attr_type 1085  // Left-recursive
  ------------------
  |  Branch (9631:9): [True: 79.3k, False: 17.5k]
  ------------------
 9632|  79.3k|        p->level--;
 9633|  79.3k|        return _res;
 9634|  79.3k|    }
 9635|  17.5k|    int _mark = p->mark;
 9636|  17.5k|    int _resmark = p->mark;
 9637|  17.5k|    Memo *_memo = _PyPegen_insert_memo_direct(p, _mark, attr_type);
  ------------------
  |  |  174|  17.5k|#define attr_type 1085  // Left-recursive
  ------------------
 9638|  17.5k|    if (_memo == NULL) {
  ------------------
  |  Branch (9638:9): [True: 0, False: 17.5k]
  ------------------
 9639|      0|        p->level--;
 9640|      0|        return NULL;
 9641|      0|    }
 9642|  18.8k|    while (1) {
  ------------------
  |  Branch (9642:12): [True: 18.8k, Folded]
  ------------------
 9643|  18.8k|        _memo->node = _res;
 9644|  18.8k|        _memo->mark = p->mark;
 9645|  18.8k|        p->mark = _mark;
 9646|  18.8k|        void *_raw = attr_raw(p);
 9647|  18.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (9647:13): [True: 7, False: 18.7k]
  ------------------
 9648|      7|            p->level--;
 9649|      7|            return NULL;
 9650|      7|        }
 9651|  18.7k|        if (_raw == NULL || p->mark <= _resmark)
  ------------------
  |  Branch (9651:13): [True: 17.5k, False: 1.26k]
  |  Branch (9651:29): [True: 0, False: 1.26k]
  ------------------
 9652|  17.5k|            break;
 9653|  1.26k|        _resmark = p->mark;
 9654|  1.26k|        _res = _raw;
 9655|  1.26k|    }
 9656|  17.5k|    p->mark = _resmark;
 9657|  17.5k|    p->level--;
 9658|  17.5k|    return _res;
 9659|  17.5k|}
parser.c:attr_raw:
 9662|  18.8k|{
 9663|  18.8k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  37.6k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9663:9): [True: 0, False: 18.8k]
  |  Branch (9663:35): [True: 0, False: 18.8k]
  ------------------
 9664|      0|        _Pypegen_stack_overflow(p);
 9665|      0|    }
 9666|  18.8k|    if (p->error_indicator) {
  ------------------
  |  Branch (9666:9): [True: 0, False: 18.8k]
  ------------------
 9667|      0|        p->level--;
 9668|      0|        return NULL;
 9669|      0|    }
 9670|  18.8k|    expr_ty _res = NULL;
 9671|  18.8k|    int _mark = p->mark;
 9672|  18.8k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9672:9): [True: 0, False: 18.8k]
  |  Branch (9672:31): [True: 0, False: 0]
  ------------------
 9673|      0|        p->error_indicator = 1;
 9674|      0|        p->level--;
 9675|      0|        return NULL;
 9676|      0|    }
 9677|  18.8k|    int _start_lineno = p->tokens[_mark]->lineno;
 9678|  18.8k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.8k]
  |  |  ------------------
  ------------------
 9679|  18.8k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9680|  18.8k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  18.8k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18.8k]
  |  |  ------------------
  ------------------
 9681|  18.8k|    { // name_or_attr '.' NAME
 9682|  18.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (9682:13): [True: 0, False: 18.8k]
  ------------------
 9683|      0|            p->level--;
 9684|      0|            return NULL;
 9685|      0|        }
 9686|  18.8k|        D(fprintf(stderr, "%*c> attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME"));
 9687|  18.8k|        Token * _literal;
 9688|  18.8k|        expr_ty attr;
 9689|  18.8k|        expr_ty value;
 9690|  18.8k|        if (
 9691|  18.8k|            (value = name_or_attr_rule(p))  // name_or_attr
  ------------------
  |  Branch (9691:13): [True: 11.0k, False: 7.77k]
  ------------------
 9692|  11.0k|            &&
 9693|  11.0k|            (_literal = _PyPegen_expect_token(p, 23))  // token='.'
  ------------------
  |  Branch (9693:13): [True: 1.27k, False: 9.75k]
  ------------------
 9694|  1.27k|            &&
 9695|  1.27k|            (attr = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (9695:13): [True: 1.26k, False: 10]
  ------------------
 9696|  18.8k|        )
 9697|  1.26k|        {
 9698|  1.26k|            D(fprintf(stderr, "%*c+ attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME"));
 9699|  1.26k|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9700|  1.26k|            if (_token == NULL) {
  ------------------
  |  Branch (9700:17): [True: 0, False: 1.26k]
  ------------------
 9701|      0|                p->level--;
 9702|      0|                return NULL;
 9703|      0|            }
 9704|  1.26k|            int _end_lineno = _token->end_lineno;
 9705|  1.26k|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.26k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.26k]
  |  |  ------------------
  ------------------
 9706|  1.26k|            int _end_col_offset = _token->end_col_offset;
 9707|  1.26k|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  1.26k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1.26k]
  |  |  ------------------
  ------------------
 9708|  1.26k|            _res = _PyAST_Attribute ( value , attr -> v . Name . id , Load , EXTRA );
  ------------------
  |  |  307|  1.26k|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9709|  1.26k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9709:18): [True: 0, False: 1.26k]
  |  Branch (9709:34): [True: 0, False: 1.26k]
  |  Branch (9709:57): [True: 0, False: 0]
  ------------------
 9710|      0|                p->error_indicator = 1;
 9711|      0|                p->level--;
 9712|      0|                return NULL;
 9713|      0|            }
 9714|  1.26k|            goto done;
 9715|  1.26k|        }
 9716|  17.5k|        p->mark = _mark;
 9717|  17.5k|        D(fprintf(stderr, "%*c%s attr[%d-%d]: %s failed!\n", p->level, ' ',
 9718|  17.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '.' NAME"));
 9719|  17.5k|    }
 9720|  17.5k|    _res = NULL;
 9721|  18.8k|  done:
 9722|  18.8k|    p->level--;
 9723|  18.8k|    return _res;
 9724|  17.5k|}
parser.c:name_or_attr_rule:
 9730|  79.1k|{
 9731|  79.1k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   158k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9731:9): [True: 0, False: 79.1k]
  |  Branch (9731:35): [True: 0, False: 79.1k]
  ------------------
 9732|      0|        _Pypegen_stack_overflow(p);
 9733|      0|    }
 9734|  79.1k|    if (p->error_indicator) {
  ------------------
  |  Branch (9734:9): [True: 0, False: 79.1k]
  ------------------
 9735|      0|        p->level--;
 9736|      0|        return NULL;
 9737|      0|    }
 9738|  79.1k|    expr_ty _res = NULL;
 9739|  79.1k|    int _mark = p->mark;
 9740|  79.1k|    { // attr
 9741|  79.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (9741:13): [True: 0, False: 79.1k]
  ------------------
 9742|      0|            p->level--;
 9743|      0|            return NULL;
 9744|      0|        }
 9745|  79.1k|        D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr"));
 9746|  79.1k|        expr_ty attr_var;
 9747|  79.1k|        if (
 9748|  79.1k|            (attr_var = attr_rule(p))  // attr
  ------------------
  |  Branch (9748:13): [True: 1.33k, False: 77.8k]
  ------------------
 9749|  79.1k|        )
 9750|  1.33k|        {
 9751|  1.33k|            D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr"));
 9752|  1.33k|            _res = attr_var;
 9753|  1.33k|            goto done;
 9754|  1.33k|        }
 9755|  77.8k|        p->mark = _mark;
 9756|  77.8k|        D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ',
 9757|  77.8k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr"));
 9758|  77.8k|    }
 9759|      0|    { // NAME
 9760|  77.8k|        if (p->error_indicator) {
  ------------------
  |  Branch (9760:13): [True: 0, False: 77.8k]
  ------------------
 9761|      0|            p->level--;
 9762|      0|            return NULL;
 9763|      0|        }
 9764|  77.8k|        D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME"));
 9765|  77.8k|        expr_ty name_var;
 9766|  77.8k|        if (
 9767|  77.8k|            (name_var = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (9767:13): [True: 45.5k, False: 32.2k]
  ------------------
 9768|  77.8k|        )
 9769|  45.5k|        {
 9770|  45.5k|            D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME"));
 9771|  45.5k|            _res = name_var;
 9772|  45.5k|            goto done;
 9773|  45.5k|        }
 9774|  32.2k|        p->mark = _mark;
 9775|  32.2k|        D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ',
 9776|  32.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME"));
 9777|  32.2k|    }
 9778|  32.2k|    _res = NULL;
 9779|  79.1k|  done:
 9780|  79.1k|    p->level--;
 9781|  79.1k|    return _res;
 9782|  32.2k|}
parser.c:group_pattern_rule:
 9787|  16.2k|{
 9788|  16.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  32.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9788:9): [True: 0, False: 16.2k]
  |  Branch (9788:35): [True: 0, False: 16.2k]
  ------------------
 9789|      0|        _Pypegen_stack_overflow(p);
 9790|      0|    }
 9791|  16.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (9791:9): [True: 0, False: 16.2k]
  ------------------
 9792|      0|        p->level--;
 9793|      0|        return NULL;
 9794|      0|    }
 9795|  16.2k|    pattern_ty _res = NULL;
 9796|  16.2k|    int _mark = p->mark;
 9797|  16.2k|    { // '(' pattern ')'
 9798|  16.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (9798:13): [True: 0, False: 16.2k]
  ------------------
 9799|      0|            p->level--;
 9800|      0|            return NULL;
 9801|      0|        }
 9802|  16.2k|        D(fprintf(stderr, "%*c> group_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'"));
 9803|  16.2k|        Token * _literal;
 9804|  16.2k|        Token * _literal_1;
 9805|  16.2k|        pattern_ty pattern;
 9806|  16.2k|        if (
 9807|  16.2k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (9807:13): [True: 3.72k, False: 12.5k]
  ------------------
 9808|  3.72k|            &&
 9809|  3.72k|            (pattern = pattern_rule(p))  // pattern
  ------------------
  |  Branch (9809:13): [True: 1.64k, False: 2.08k]
  ------------------
 9810|  1.64k|            &&
 9811|  1.64k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (9811:13): [True: 43, False: 1.59k]
  ------------------
 9812|  16.2k|        )
 9813|     43|        {
 9814|     43|            D(fprintf(stderr, "%*c+ group_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'"));
 9815|     43|            _res = pattern;
 9816|     43|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9816:18): [True: 0, False: 43]
  |  Branch (9816:34): [True: 0, False: 43]
  |  Branch (9816:57): [True: 0, False: 0]
  ------------------
 9817|      0|                p->error_indicator = 1;
 9818|      0|                p->level--;
 9819|      0|                return NULL;
 9820|      0|            }
 9821|     43|            goto done;
 9822|     43|        }
 9823|  16.2k|        p->mark = _mark;
 9824|  16.2k|        D(fprintf(stderr, "%*c%s group_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9825|  16.2k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' pattern ')'"));
 9826|  16.2k|    }
 9827|  16.2k|    _res = NULL;
 9828|  16.2k|  done:
 9829|  16.2k|    p->level--;
 9830|  16.2k|    return _res;
 9831|  16.2k|}
parser.c:sequence_pattern_rule:
 9836|  15.5k|{
 9837|  15.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  31.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (9837:9): [True: 0, False: 15.5k]
  |  Branch (9837:35): [True: 0, False: 15.5k]
  ------------------
 9838|      0|        _Pypegen_stack_overflow(p);
 9839|      0|    }
 9840|  15.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (9840:9): [True: 0, False: 15.5k]
  ------------------
 9841|      0|        p->level--;
 9842|      0|        return NULL;
 9843|      0|    }
 9844|  15.5k|    pattern_ty _res = NULL;
 9845|  15.5k|    int _mark = p->mark;
 9846|  15.5k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (9846:9): [True: 0, False: 15.5k]
  |  Branch (9846:31): [True: 0, False: 0]
  ------------------
 9847|      0|        p->error_indicator = 1;
 9848|      0|        p->level--;
 9849|      0|        return NULL;
 9850|      0|    }
 9851|  15.5k|    int _start_lineno = p->tokens[_mark]->lineno;
 9852|  15.5k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
 9853|  15.5k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 9854|  15.5k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  15.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
 9855|  15.5k|    { // '[' maybe_sequence_pattern? ']'
 9856|  15.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (9856:13): [True: 0, False: 15.5k]
  ------------------
 9857|      0|            p->level--;
 9858|      0|            return NULL;
 9859|      0|        }
 9860|  15.5k|        D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
 9861|  15.5k|        Token * _literal;
 9862|  15.5k|        Token * _literal_1;
 9863|  15.5k|        void *patterns;
 9864|  15.5k|        if (
 9865|  15.5k|            (_literal = _PyPegen_expect_token(p, 9))  // token='['
  ------------------
  |  Branch (9865:13): [True: 2.25k, False: 13.3k]
  ------------------
 9866|  2.25k|            &&
 9867|  2.25k|            (patterns = maybe_sequence_pattern_rule(p), !p->error_indicator)  // maybe_sequence_pattern?
  ------------------
  |  Branch (9867:13): [True: 1.62k, False: 631]
  ------------------
 9868|  1.62k|            &&
 9869|  1.62k|            (_literal_1 = _PyPegen_expect_token(p, 10))  // token=']'
  ------------------
  |  Branch (9869:13): [True: 188, False: 1.43k]
  ------------------
 9870|  15.5k|        )
 9871|    188|        {
 9872|    188|            D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
 9873|    188|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9874|    188|            if (_token == NULL) {
  ------------------
  |  Branch (9874:17): [True: 0, False: 188]
  ------------------
 9875|      0|                p->level--;
 9876|      0|                return NULL;
 9877|      0|            }
 9878|    188|            int _end_lineno = _token->end_lineno;
 9879|    188|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    188|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 188]
  |  |  ------------------
  ------------------
 9880|    188|            int _end_col_offset = _token->end_col_offset;
 9881|    188|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    188|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 188]
  |  |  ------------------
  ------------------
 9882|    188|            _res = _PyAST_MatchSequence ( patterns , EXTRA );
  ------------------
  |  |  307|    188|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9883|    188|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9883:18): [True: 0, False: 188]
  |  Branch (9883:34): [True: 0, False: 188]
  |  Branch (9883:57): [True: 0, False: 0]
  ------------------
 9884|      0|                p->error_indicator = 1;
 9885|      0|                p->level--;
 9886|      0|                return NULL;
 9887|      0|            }
 9888|    188|            goto done;
 9889|    188|        }
 9890|  15.4k|        p->mark = _mark;
 9891|  15.4k|        D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9892|  15.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' maybe_sequence_pattern? ']'"));
 9893|  15.4k|    }
 9894|      0|    { // '(' open_sequence_pattern? ')'
 9895|  15.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (9895:13): [True: 631, False: 14.7k]
  ------------------
 9896|    631|            p->level--;
 9897|    631|            return NULL;
 9898|    631|        }
 9899|  14.7k|        D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'"));
 9900|  14.7k|        Token * _literal;
 9901|  14.7k|        Token * _literal_1;
 9902|  14.7k|        void *patterns;
 9903|  14.7k|        if (
 9904|  14.7k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (9904:13): [True: 3.04k, False: 11.7k]
  ------------------
 9905|  3.04k|            &&
 9906|  3.04k|            (patterns = open_sequence_pattern_rule(p), !p->error_indicator)  // open_sequence_pattern?
  ------------------
  |  Branch (9906:13): [True: 2.69k, False: 347]
  ------------------
 9907|  2.69k|            &&
 9908|  2.69k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (9908:13): [True: 435, False: 2.26k]
  ------------------
 9909|  14.7k|        )
 9910|    435|        {
 9911|    435|            D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'"));
 9912|    435|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 9913|    435|            if (_token == NULL) {
  ------------------
  |  Branch (9913:17): [True: 0, False: 435]
  ------------------
 9914|      0|                p->level--;
 9915|      0|                return NULL;
 9916|      0|            }
 9917|    435|            int _end_lineno = _token->end_lineno;
 9918|    435|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    435|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 435]
  |  |  ------------------
  ------------------
 9919|    435|            int _end_col_offset = _token->end_col_offset;
 9920|    435|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    435|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 435]
  |  |  ------------------
  ------------------
 9921|    435|            _res = _PyAST_MatchSequence ( patterns , EXTRA );
  ------------------
  |  |  307|    435|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 9922|    435|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (9922:18): [True: 0, False: 435]
  |  Branch (9922:34): [True: 0, False: 435]
  |  Branch (9922:57): [True: 0, False: 0]
  ------------------
 9923|      0|                p->error_indicator = 1;
 9924|      0|                p->level--;
 9925|      0|                return NULL;
 9926|      0|            }
 9927|    435|            goto done;
 9928|    435|        }
 9929|  14.3k|        p->mark = _mark;
 9930|  14.3k|        D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ',
 9931|  14.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' open_sequence_pattern? ')'"));
 9932|  14.3k|    }
 9933|  14.3k|    _res = NULL;
 9934|  14.9k|  done:
 9935|  14.9k|    p->level--;
 9936|  14.9k|    return _res;
 9937|  14.3k|}
parser.c:mapping_pattern_rule:
10205|  13.9k|{
10206|  13.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  27.9k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10206:9): [True: 0, False: 13.9k]
  |  Branch (10206:35): [True: 0, False: 13.9k]
  ------------------
10207|      0|        _Pypegen_stack_overflow(p);
10208|      0|    }
10209|  13.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (10209:9): [True: 0, False: 13.9k]
  ------------------
10210|      0|        p->level--;
10211|      0|        return NULL;
10212|      0|    }
10213|  13.9k|    pattern_ty _res = NULL;
10214|  13.9k|    int _mark = p->mark;
10215|  13.9k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (10215:9): [True: 0, False: 13.9k]
  |  Branch (10215:31): [True: 0, False: 0]
  ------------------
10216|      0|        p->error_indicator = 1;
10217|      0|        p->level--;
10218|      0|        return NULL;
10219|      0|    }
10220|  13.9k|    int _start_lineno = p->tokens[_mark]->lineno;
10221|  13.9k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  13.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
10222|  13.9k|    int _start_col_offset = p->tokens[_mark]->col_offset;
10223|  13.9k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  13.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
10224|  13.9k|    { // '{' '}'
10225|  13.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (10225:13): [True: 0, False: 13.9k]
  ------------------
10226|      0|            p->level--;
10227|      0|            return NULL;
10228|      0|        }
10229|  13.9k|        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
10230|  13.9k|        Token * _literal;
10231|  13.9k|        Token * _literal_1;
10232|  13.9k|        if (
10233|  13.9k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (10233:13): [True: 943, False: 13.0k]
  ------------------
10234|    943|            &&
10235|    943|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (10235:13): [True: 58, False: 885]
  ------------------
10236|  13.9k|        )
10237|     58|        {
10238|     58|            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'"));
10239|     58|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10240|     58|            if (_token == NULL) {
  ------------------
  |  Branch (10240:17): [True: 0, False: 58]
  ------------------
10241|      0|                p->level--;
10242|      0|                return NULL;
10243|      0|            }
10244|     58|            int _end_lineno = _token->end_lineno;
10245|     58|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     58|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 58]
  |  |  ------------------
  ------------------
10246|     58|            int _end_col_offset = _token->end_col_offset;
10247|     58|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     58|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 58]
  |  |  ------------------
  ------------------
10248|     58|            _res = _PyAST_MatchMapping ( NULL , NULL , NULL , EXTRA );
  ------------------
  |  |  307|     58|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10249|     58|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10249:18): [True: 0, False: 58]
  |  Branch (10249:34): [True: 0, False: 58]
  |  Branch (10249:57): [True: 0, False: 0]
  ------------------
10250|      0|                p->error_indicator = 1;
10251|      0|                p->level--;
10252|      0|                return NULL;
10253|      0|            }
10254|     58|            goto done;
10255|     58|        }
10256|  13.9k|        p->mark = _mark;
10257|  13.9k|        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10258|  13.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'"));
10259|  13.9k|    }
10260|      0|    { // '{' double_star_pattern ','? '}'
10261|  13.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (10261:13): [True: 4, False: 13.9k]
  ------------------
10262|      4|            p->level--;
10263|      4|            return NULL;
10264|      4|        }
10265|  13.9k|        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'"));
10266|  13.9k|        Token * _literal;
10267|  13.9k|        Token * _literal_1;
10268|  13.9k|        void *_opt_var;
10269|  13.9k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  13.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
10270|  13.9k|        expr_ty rest;
10271|  13.9k|        if (
10272|  13.9k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (10272:13): [True: 881, False: 13.0k]
  ------------------
10273|    881|            &&
10274|    881|            (rest = double_star_pattern_rule(p))  // double_star_pattern
  ------------------
  |  Branch (10274:13): [True: 8, False: 873]
  ------------------
10275|      8|            &&
10276|      8|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10276:13): [True: 8, False: 0]
  ------------------
10277|      8|            &&
10278|      8|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (10278:13): [True: 1, False: 7]
  ------------------
10279|  13.9k|        )
10280|      1|        {
10281|      1|            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'"));
10282|      1|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10283|      1|            if (_token == NULL) {
  ------------------
  |  Branch (10283:17): [True: 0, False: 1]
  ------------------
10284|      0|                p->level--;
10285|      0|                return NULL;
10286|      0|            }
10287|      1|            int _end_lineno = _token->end_lineno;
10288|      1|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|      1|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1]
  |  |  ------------------
  ------------------
10289|      1|            int _end_col_offset = _token->end_col_offset;
10290|      1|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|      1|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 1]
  |  |  ------------------
  ------------------
10291|      1|            _res = _PyAST_MatchMapping ( NULL , NULL , rest -> v . Name . id , EXTRA );
  ------------------
  |  |  307|      1|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10292|      1|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10292:18): [True: 0, False: 1]
  |  Branch (10292:34): [True: 0, False: 1]
  |  Branch (10292:57): [True: 0, False: 0]
  ------------------
10293|      0|                p->error_indicator = 1;
10294|      0|                p->level--;
10295|      0|                return NULL;
10296|      0|            }
10297|      1|            goto done;
10298|      1|        }
10299|  13.9k|        p->mark = _mark;
10300|  13.9k|        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10301|  13.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_star_pattern ','? '}'"));
10302|  13.9k|    }
10303|      0|    { // '{' items_pattern ',' double_star_pattern ','? '}'
10304|  13.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (10304:13): [True: 2, False: 13.9k]
  ------------------
10305|      2|            p->level--;
10306|      2|            return NULL;
10307|      2|        }
10308|  13.9k|        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
10309|  13.9k|        Token * _literal;
10310|  13.9k|        Token * _literal_1;
10311|  13.9k|        Token * _literal_2;
10312|  13.9k|        void *_opt_var;
10313|  13.9k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  13.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.9k]
  |  |  ------------------
  ------------------
10314|  13.9k|        asdl_seq* items;
10315|  13.9k|        expr_ty rest;
10316|  13.9k|        if (
10317|  13.9k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (10317:13): [True: 878, False: 13.0k]
  ------------------
10318|    878|            &&
10319|    878|            (items = items_pattern_rule(p))  // items_pattern
  ------------------
  |  Branch (10319:13): [True: 204, False: 674]
  ------------------
10320|    204|            &&
10321|    204|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (10321:13): [True: 137, False: 67]
  ------------------
10322|    137|            &&
10323|    137|            (rest = double_star_pattern_rule(p))  // double_star_pattern
  ------------------
  |  Branch (10323:13): [True: 20, False: 117]
  ------------------
10324|     20|            &&
10325|     20|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10325:13): [True: 20, False: 0]
  ------------------
10326|     20|            &&
10327|     20|            (_literal_2 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (10327:13): [True: 3, False: 17]
  ------------------
10328|  13.9k|        )
10329|      3|        {
10330|      3|            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
10331|      3|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10332|      3|            if (_token == NULL) {
  ------------------
  |  Branch (10332:17): [True: 0, False: 3]
  ------------------
10333|      0|                p->level--;
10334|      0|                return NULL;
10335|      0|            }
10336|      3|            int _end_lineno = _token->end_lineno;
10337|      3|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|      3|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3]
  |  |  ------------------
  ------------------
10338|      3|            int _end_col_offset = _token->end_col_offset;
10339|      3|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|      3|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3]
  |  |  ------------------
  ------------------
10340|      3|            _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA );
  ------------------
  |  |  271|      3|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA );
  ------------------
  |  |  271|      3|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA );
  ------------------
  |  |  307|      3|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10341|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10341:18): [True: 0, False: 3]
  |  Branch (10341:34): [True: 0, False: 3]
  |  Branch (10341:57): [True: 0, False: 0]
  ------------------
10342|      0|                p->error_indicator = 1;
10343|      0|                p->level--;
10344|      0|                return NULL;
10345|      0|            }
10346|      3|            goto done;
10347|      3|        }
10348|  13.9k|        p->mark = _mark;
10349|  13.9k|        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10350|  13.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'"));
10351|  13.9k|    }
10352|      0|    { // '{' items_pattern ','? '}'
10353|  13.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (10353:13): [True: 142, False: 13.7k]
  ------------------
10354|    142|            p->level--;
10355|    142|            return NULL;
10356|    142|        }
10357|  13.7k|        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'"));
10358|  13.7k|        Token * _literal;
10359|  13.7k|        Token * _literal_1;
10360|  13.7k|        void *_opt_var;
10361|  13.7k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  13.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.7k]
  |  |  ------------------
  ------------------
10362|  13.7k|        asdl_seq* items;
10363|  13.7k|        if (
10364|  13.7k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (10364:13): [True: 733, False: 13.0k]
  ------------------
10365|    733|            &&
10366|    733|            (items = items_pattern_rule(p))  // items_pattern
  ------------------
  |  Branch (10366:13): [True: 175, False: 558]
  ------------------
10367|    175|            &&
10368|    175|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10368:13): [True: 175, False: 0]
  ------------------
10369|    175|            &&
10370|    175|            (_literal_1 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (10370:13): [True: 20, False: 155]
  ------------------
10371|  13.7k|        )
10372|     20|        {
10373|     20|            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'"));
10374|     20|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10375|     20|            if (_token == NULL) {
  ------------------
  |  Branch (10375:17): [True: 0, False: 20]
  ------------------
10376|      0|                p->level--;
10377|      0|                return NULL;
10378|      0|            }
10379|     20|            int _end_lineno = _token->end_lineno;
10380|     20|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     20|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20]
  |  |  ------------------
  ------------------
10381|     20|            int _end_col_offset = _token->end_col_offset;
10382|     20|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     20|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 20]
  |  |  ------------------
  ------------------
10383|     20|            _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA );
  ------------------
  |  |  271|     20|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA );
  ------------------
  |  |  271|     20|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA );
  ------------------
  |  |  307|     20|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10384|     20|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10384:18): [True: 0, False: 20]
  |  Branch (10384:34): [True: 0, False: 20]
  |  Branch (10384:57): [True: 0, False: 0]
  ------------------
10385|      0|                p->error_indicator = 1;
10386|      0|                p->level--;
10387|      0|                return NULL;
10388|      0|            }
10389|     20|            goto done;
10390|     20|        }
10391|  13.7k|        p->mark = _mark;
10392|  13.7k|        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10393|  13.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ','? '}'"));
10394|  13.7k|    }
10395|  13.7k|    if (p->call_invalid_rules) { // invalid_mapping_pattern
  ------------------
  |  Branch (10395:9): [True: 10.6k, False: 3.07k]
  ------------------
10396|  10.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (10396:13): [True: 0, False: 10.6k]
  ------------------
10397|      0|            p->level--;
10398|      0|            return NULL;
10399|      0|        }
10400|  10.6k|        D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_mapping_pattern"));
10401|  10.6k|        void *invalid_mapping_pattern_var;
10402|  10.6k|        if (
10403|  10.6k|            (invalid_mapping_pattern_var = invalid_mapping_pattern_rule(p))  // invalid_mapping_pattern
  ------------------
  |  Branch (10403:13): [True: 0, False: 10.6k]
  ------------------
10404|  10.6k|        )
10405|      0|        {
10406|      0|            D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_mapping_pattern"));
10407|      0|            _res = invalid_mapping_pattern_var;
10408|      0|            goto done;
10409|      0|        }
10410|  10.6k|        p->mark = _mark;
10411|  10.6k|        D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10412|  10.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_mapping_pattern"));
10413|  10.6k|    }
10414|  13.7k|    _res = NULL;
10415|  13.8k|  done:
10416|  13.8k|    p->level--;
10417|  13.8k|    return _res;
10418|  13.7k|}
parser.c:double_star_pattern_rule:
10510|  1.41k|{
10511|  1.41k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  2.82k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10511:9): [True: 0, False: 1.41k]
  |  Branch (10511:35): [True: 0, False: 1.41k]
  ------------------
10512|      0|        _Pypegen_stack_overflow(p);
10513|      0|    }
10514|  1.41k|    if (p->error_indicator) {
  ------------------
  |  Branch (10514:9): [True: 25, False: 1.38k]
  ------------------
10515|     25|        p->level--;
10516|     25|        return NULL;
10517|     25|    }
10518|  1.38k|    expr_ty _res = NULL;
10519|  1.38k|    int _mark = p->mark;
10520|  1.38k|    { // '**' pattern_capture_target
10521|  1.38k|        if (p->error_indicator) {
  ------------------
  |  Branch (10521:13): [True: 0, False: 1.38k]
  ------------------
10522|      0|            p->level--;
10523|      0|            return NULL;
10524|      0|        }
10525|  1.38k|        D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target"));
10526|  1.38k|        Token * _literal;
10527|  1.38k|        expr_ty target;
10528|  1.38k|        if (
10529|  1.38k|            (_literal = _PyPegen_expect_token(p, 35))  // token='**'
  ------------------
  |  Branch (10529:13): [True: 51, False: 1.33k]
  ------------------
10530|     51|            &&
10531|     51|            (target = pattern_capture_target_rule(p))  // pattern_capture_target
  ------------------
  |  Branch (10531:13): [True: 42, False: 9]
  ------------------
10532|  1.38k|        )
10533|     42|        {
10534|     42|            D(fprintf(stderr, "%*c+ double_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target"));
10535|     42|            _res = target;
10536|     42|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10536:18): [True: 0, False: 42]
  |  Branch (10536:34): [True: 0, False: 42]
  |  Branch (10536:57): [True: 0, False: 0]
  ------------------
10537|      0|                p->error_indicator = 1;
10538|      0|                p->level--;
10539|      0|                return NULL;
10540|      0|            }
10541|     42|            goto done;
10542|     42|        }
10543|  1.34k|        p->mark = _mark;
10544|  1.34k|        D(fprintf(stderr, "%*c%s double_star_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10545|  1.34k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' pattern_capture_target"));
10546|  1.34k|    }
10547|  1.34k|    _res = NULL;
10548|  1.38k|  done:
10549|  1.38k|    p->level--;
10550|  1.38k|    return _res;
10551|  1.34k|}
parser.c:items_pattern_rule:
10423|  2.01k|{
10424|  2.01k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.03k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10424:9): [True: 0, False: 2.01k]
  |  Branch (10424:35): [True: 0, False: 2.01k]
  ------------------
10425|      0|        _Pypegen_stack_overflow(p);
10426|      0|    }
10427|  2.01k|    if (p->error_indicator) {
  ------------------
  |  Branch (10427:9): [True: 0, False: 2.01k]
  ------------------
10428|      0|        p->level--;
10429|      0|        return NULL;
10430|      0|    }
10431|  2.01k|    asdl_seq* _res = NULL;
10432|  2.01k|    int _mark = p->mark;
10433|  2.01k|    { // ','.key_value_pattern+
10434|  2.01k|        if (p->error_indicator) {
  ------------------
  |  Branch (10434:13): [True: 0, False: 2.01k]
  ------------------
10435|      0|            p->level--;
10436|      0|            return NULL;
10437|      0|        }
10438|  2.01k|        D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+"));
10439|  2.01k|        asdl_seq * _gather_47_var;
10440|  2.01k|        if (
10441|  2.01k|            (_gather_47_var = _gather_47_rule(p))  // ','.key_value_pattern+
  ------------------
  |  Branch (10441:13): [True: 474, False: 1.54k]
  ------------------
10442|  2.01k|        )
10443|    474|        {
10444|    474|            D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+"));
10445|    474|            _res = _gather_47_var;
10446|    474|            goto done;
10447|    474|        }
10448|  1.54k|        p->mark = _mark;
10449|  1.54k|        D(fprintf(stderr, "%*c%s items_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10450|  1.54k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.key_value_pattern+"));
10451|  1.54k|    }
10452|  1.54k|    _res = NULL;
10453|  2.01k|  done:
10454|  2.01k|    p->level--;
10455|  2.01k|    return _res;
10456|  1.54k|}
parser.c:_gather_47_rule:
30259|  2.01k|{
30260|  2.01k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  4.03k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30260:9): [True: 0, False: 2.01k]
  |  Branch (30260:35): [True: 0, False: 2.01k]
  ------------------
30261|      0|        _Pypegen_stack_overflow(p);
30262|      0|    }
30263|  2.01k|    if (p->error_indicator) {
  ------------------
  |  Branch (30263:9): [True: 0, False: 2.01k]
  ------------------
30264|      0|        p->level--;
30265|      0|        return NULL;
30266|      0|    }
30267|  2.01k|    asdl_seq * _res = NULL;
30268|  2.01k|    int _mark = p->mark;
30269|  2.01k|    { // key_value_pattern _loop0_46
30270|  2.01k|        if (p->error_indicator) {
  ------------------
  |  Branch (30270:13): [True: 0, False: 2.01k]
  ------------------
30271|      0|            p->level--;
30272|      0|            return NULL;
30273|      0|        }
30274|  2.01k|        D(fprintf(stderr, "%*c> _gather_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_46"));
30275|  2.01k|        KeyPatternPair* elem;
30276|  2.01k|        asdl_seq * seq;
30277|  2.01k|        if (
30278|  2.01k|            (elem = key_value_pattern_rule(p))  // key_value_pattern
  ------------------
  |  Branch (30278:13): [True: 474, False: 1.54k]
  ------------------
30279|    474|            &&
30280|    474|            (seq = _loop0_46_rule(p))  // _loop0_46
  ------------------
  |  Branch (30280:13): [True: 474, False: 0]
  ------------------
30281|  2.01k|        )
30282|    474|        {
30283|    474|            D(fprintf(stderr, "%*c+ _gather_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_46"));
30284|    474|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30285|    474|            goto done;
30286|    474|        }
30287|  1.54k|        p->mark = _mark;
30288|  1.54k|        D(fprintf(stderr, "%*c%s _gather_47[%d-%d]: %s failed!\n", p->level, ' ',
30289|  1.54k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_46"));
30290|  1.54k|    }
30291|  1.54k|    _res = NULL;
30292|  2.01k|  done:
30293|  2.01k|    p->level--;
30294|  2.01k|    return _res;
30295|  1.54k|}
parser.c:key_value_pattern_rule:
10461|  3.52k|{
10462|  3.52k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.05k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10462:9): [True: 0, False: 3.52k]
  |  Branch (10462:35): [True: 0, False: 3.52k]
  ------------------
10463|      0|        _Pypegen_stack_overflow(p);
10464|      0|    }
10465|  3.52k|    if (p->error_indicator) {
  ------------------
  |  Branch (10465:9): [True: 0, False: 3.52k]
  ------------------
10466|      0|        p->level--;
10467|      0|        return NULL;
10468|      0|    }
10469|  3.52k|    KeyPatternPair* _res = NULL;
10470|  3.52k|    int _mark = p->mark;
10471|  3.52k|    { // (literal_expr | attr) ':' pattern
10472|  3.52k|        if (p->error_indicator) {
  ------------------
  |  Branch (10472:13): [True: 0, False: 3.52k]
  ------------------
10473|      0|            p->level--;
10474|      0|            return NULL;
10475|      0|        }
10476|  3.52k|        D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern"));
10477|  3.52k|        Token * _literal;
10478|  3.52k|        void *key;
10479|  3.52k|        pattern_ty pattern;
10480|  3.52k|        if (
10481|  3.52k|            (key = _tmp_48_rule(p))  // literal_expr | attr
  ------------------
  |  Branch (10481:13): [True: 3.28k, False: 236]
  ------------------
10482|  3.28k|            &&
10483|  3.28k|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (10483:13): [True: 3.19k, False: 97]
  ------------------
10484|  3.19k|            &&
10485|  3.19k|            (pattern = pattern_rule(p))  // pattern
  ------------------
  |  Branch (10485:13): [True: 1.67k, False: 1.51k]
  ------------------
10486|  3.52k|        )
10487|  1.67k|        {
10488|  1.67k|            D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern"));
10489|  1.67k|            _res = _PyPegen_key_pattern_pair ( p , key , pattern );
10490|  1.67k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10490:18): [True: 0, False: 1.67k]
  |  Branch (10490:34): [True: 0, False: 1.67k]
  |  Branch (10490:57): [True: 0, False: 0]
  ------------------
10491|      0|                p->error_indicator = 1;
10492|      0|                p->level--;
10493|      0|                return NULL;
10494|      0|            }
10495|  1.67k|            goto done;
10496|  1.67k|        }
10497|  1.84k|        p->mark = _mark;
10498|  1.84k|        D(fprintf(stderr, "%*c%s key_value_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10499|  1.84k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(literal_expr | attr) ':' pattern"));
10500|  1.84k|    }
10501|  1.84k|    _res = NULL;
10502|  3.52k|  done:
10503|  3.52k|    p->level--;
10504|  3.52k|    return _res;
10505|  1.84k|}
parser.c:_tmp_48_rule:
30300|  3.52k|{
30301|  3.52k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.05k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30301:9): [True: 0, False: 3.52k]
  |  Branch (30301:35): [True: 0, False: 3.52k]
  ------------------
30302|      0|        _Pypegen_stack_overflow(p);
30303|      0|    }
30304|  3.52k|    if (p->error_indicator) {
  ------------------
  |  Branch (30304:9): [True: 0, False: 3.52k]
  ------------------
30305|      0|        p->level--;
30306|      0|        return NULL;
30307|      0|    }
30308|  3.52k|    void * _res = NULL;
30309|  3.52k|    int _mark = p->mark;
30310|  3.52k|    { // literal_expr
30311|  3.52k|        if (p->error_indicator) {
  ------------------
  |  Branch (30311:13): [True: 0, False: 3.52k]
  ------------------
30312|      0|            p->level--;
30313|      0|            return NULL;
30314|      0|        }
30315|  3.52k|        D(fprintf(stderr, "%*c> _tmp_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr"));
30316|  3.52k|        expr_ty literal_expr_var;
30317|  3.52k|        if (
30318|  3.52k|            (literal_expr_var = literal_expr_rule(p))  // literal_expr
  ------------------
  |  Branch (30318:13): [True: 3.25k, False: 266]
  ------------------
30319|  3.52k|        )
30320|  3.25k|        {
30321|  3.25k|            D(fprintf(stderr, "%*c+ _tmp_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr"));
30322|  3.25k|            _res = literal_expr_var;
30323|  3.25k|            goto done;
30324|  3.25k|        }
30325|    266|        p->mark = _mark;
30326|    266|        D(fprintf(stderr, "%*c%s _tmp_48[%d-%d]: %s failed!\n", p->level, ' ',
30327|    266|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr"));
30328|    266|    }
30329|      0|    { // attr
30330|    266|        if (p->error_indicator) {
  ------------------
  |  Branch (30330:13): [True: 10, False: 256]
  ------------------
30331|     10|            p->level--;
30332|     10|            return NULL;
30333|     10|        }
30334|    256|        D(fprintf(stderr, "%*c> _tmp_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr"));
30335|    256|        expr_ty attr_var;
30336|    256|        if (
30337|    256|            (attr_var = attr_rule(p))  // attr
  ------------------
  |  Branch (30337:13): [True: 30, False: 226]
  ------------------
30338|    256|        )
30339|     30|        {
30340|     30|            D(fprintf(stderr, "%*c+ _tmp_48[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr"));
30341|     30|            _res = attr_var;
30342|     30|            goto done;
30343|     30|        }
30344|    226|        p->mark = _mark;
30345|    226|        D(fprintf(stderr, "%*c%s _tmp_48[%d-%d]: %s failed!\n", p->level, ' ',
30346|    226|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr"));
30347|    226|    }
30348|    226|    _res = NULL;
30349|  3.51k|  done:
30350|  3.51k|    p->level--;
30351|  3.51k|    return _res;
30352|    226|}
parser.c:literal_expr_rule:
 8772|  3.52k|{
 8773|  3.52k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.05k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8773:9): [True: 0, False: 3.52k]
  |  Branch (8773:35): [True: 0, False: 3.52k]
  ------------------
 8774|      0|        _Pypegen_stack_overflow(p);
 8775|      0|    }
 8776|  3.52k|    if (p->error_indicator) {
  ------------------
  |  Branch (8776:9): [True: 0, False: 3.52k]
  ------------------
 8777|      0|        p->level--;
 8778|      0|        return NULL;
 8779|      0|    }
 8780|  3.52k|    expr_ty _res = NULL;
 8781|  3.52k|    int _mark = p->mark;
 8782|  3.52k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (8782:9): [True: 411, False: 3.11k]
  |  Branch (8782:31): [True: 3, False: 408]
  ------------------
 8783|      3|        p->error_indicator = 1;
 8784|      3|        p->level--;
 8785|      3|        return NULL;
 8786|      3|    }
 8787|  3.52k|    int _start_lineno = p->tokens[_mark]->lineno;
 8788|  3.52k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.52k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.52k]
  |  |  ------------------
  ------------------
 8789|  3.52k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 8790|  3.52k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  3.52k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 3.52k]
  |  |  ------------------
  ------------------
 8791|  3.52k|    { // signed_number !('+' | '-')
 8792|  3.52k|        if (p->error_indicator) {
  ------------------
  |  Branch (8792:13): [True: 0, False: 3.52k]
  ------------------
 8793|      0|            p->level--;
 8794|      0|            return NULL;
 8795|      0|        }
 8796|  3.52k|        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
 8797|  3.52k|        expr_ty signed_number_var;
 8798|  3.52k|        if (
 8799|  3.52k|            (signed_number_var = signed_number_rule(p))  // signed_number
  ------------------
  |  Branch (8799:13): [True: 2.99k, False: 529]
  ------------------
 8800|  2.99k|            &&
 8801|  2.99k|            _PyPegen_lookahead(0, _tmp_41_rule, p)
  ------------------
  |  Branch (8801:13): [True: 2.94k, False: 45]
  ------------------
 8802|  3.52k|        )
 8803|  2.94k|        {
 8804|  2.94k|            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')"));
 8805|  2.94k|            _res = signed_number_var;
 8806|  2.94k|            goto done;
 8807|  2.94k|        }
 8808|    574|        p->mark = _mark;
 8809|    574|        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
 8810|    574|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')"));
 8811|    574|    }
 8812|      0|    { // complex_number
 8813|    574|        if (p->error_indicator) {
  ------------------
  |  Branch (8813:13): [True: 1, False: 573]
  ------------------
 8814|      1|            p->level--;
 8815|      1|            return NULL;
 8816|      1|        }
 8817|    573|        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number"));
 8818|    573|        expr_ty complex_number_var;
 8819|    573|        if (
 8820|    573|            (complex_number_var = complex_number_rule(p))  // complex_number
  ------------------
  |  Branch (8820:13): [True: 9, False: 564]
  ------------------
 8821|    573|        )
 8822|      9|        {
 8823|      9|            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number"));
 8824|      9|            _res = complex_number_var;
 8825|      9|            goto done;
 8826|      9|        }
 8827|    564|        p->mark = _mark;
 8828|    564|        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
 8829|    564|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number"));
 8830|    564|    }
 8831|      0|    { // &(STRING | FSTRING_START | TSTRING_START) strings
 8832|    564|        if (p->error_indicator) {
  ------------------
  |  Branch (8832:13): [True: 4, False: 560]
  ------------------
 8833|      4|            p->level--;
 8834|      4|            return NULL;
 8835|      4|        }
 8836|    560|        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
 8837|    560|        expr_ty strings_var;
 8838|    560|        if (
 8839|    560|            _PyPegen_lookahead(1, _tmp_42_rule, p)
  ------------------
  |  Branch (8839:13): [True: 16, False: 544]
  ------------------
 8840|     16|            &&
 8841|     16|            (strings_var = strings_rule(p))  // strings
  ------------------
  |  Branch (8841:13): [True: 12, False: 4]
  ------------------
 8842|    560|        )
 8843|     12|        {
 8844|     12|            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
 8845|     12|            _res = strings_var;
 8846|     12|            goto done;
 8847|     12|        }
 8848|    548|        p->mark = _mark;
 8849|    548|        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
 8850|    548|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&(STRING | FSTRING_START | TSTRING_START) strings"));
 8851|    548|    }
 8852|      0|    { // 'None'
 8853|    548|        if (p->error_indicator) {
  ------------------
  |  Branch (8853:13): [True: 2, False: 546]
  ------------------
 8854|      2|            p->level--;
 8855|      2|            return NULL;
 8856|      2|        }
 8857|    546|        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'"));
 8858|    546|        Token * _keyword;
 8859|    546|        if (
 8860|    546|            (_keyword = _PyPegen_expect_token(p, 628))  // token='None'
  ------------------
  |  Branch (8860:13): [True: 263, False: 283]
  ------------------
 8861|    546|        )
 8862|    263|        {
 8863|    263|            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'"));
 8864|    263|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8865|    263|            if (_token == NULL) {
  ------------------
  |  Branch (8865:17): [True: 0, False: 263]
  ------------------
 8866|      0|                p->level--;
 8867|      0|                return NULL;
 8868|      0|            }
 8869|    263|            int _end_lineno = _token->end_lineno;
 8870|    263|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    263|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 263]
  |  |  ------------------
  ------------------
 8871|    263|            int _end_col_offset = _token->end_col_offset;
 8872|    263|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    263|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 263]
  |  |  ------------------
  ------------------
 8873|    263|            _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
  ------------------
  |  |  616|    263|#  define Py_None (&_Py_NoneStruct)
  ------------------
                          _res = _PyAST_Constant ( Py_None , NULL , EXTRA );
  ------------------
  |  |  307|    263|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8874|    263|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8874:18): [True: 0, False: 263]
  |  Branch (8874:34): [True: 0, False: 263]
  |  Branch (8874:57): [True: 0, False: 0]
  ------------------
 8875|      0|                p->error_indicator = 1;
 8876|      0|                p->level--;
 8877|      0|                return NULL;
 8878|      0|            }
 8879|    263|            goto done;
 8880|    263|        }
 8881|    283|        p->mark = _mark;
 8882|    283|        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
 8883|    283|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'"));
 8884|    283|    }
 8885|      0|    { // 'True'
 8886|    283|        if (p->error_indicator) {
  ------------------
  |  Branch (8886:13): [True: 0, False: 283]
  ------------------
 8887|      0|            p->level--;
 8888|      0|            return NULL;
 8889|      0|        }
 8890|    283|        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'"));
 8891|    283|        Token * _keyword;
 8892|    283|        if (
 8893|    283|            (_keyword = _PyPegen_expect_token(p, 627))  // token='True'
  ------------------
  |  Branch (8893:13): [True: 9, False: 274]
  ------------------
 8894|    283|        )
 8895|      9|        {
 8896|      9|            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'"));
 8897|      9|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8898|      9|            if (_token == NULL) {
  ------------------
  |  Branch (8898:17): [True: 0, False: 9]
  ------------------
 8899|      0|                p->level--;
 8900|      0|                return NULL;
 8901|      0|            }
 8902|      9|            int _end_lineno = _token->end_lineno;
 8903|      9|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|      9|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9]
  |  |  ------------------
  ------------------
 8904|      9|            int _end_col_offset = _token->end_col_offset;
 8905|      9|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|      9|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 9]
  |  |  ------------------
  ------------------
 8906|      9|            _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
  ------------------
  |  |   26|      9|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = _PyAST_Constant ( Py_True , NULL , EXTRA );
  ------------------
  |  |  307|      9|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8907|      9|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8907:18): [True: 0, False: 9]
  |  Branch (8907:34): [True: 0, False: 9]
  |  Branch (8907:57): [True: 0, False: 0]
  ------------------
 8908|      0|                p->error_indicator = 1;
 8909|      0|                p->level--;
 8910|      0|                return NULL;
 8911|      0|            }
 8912|      9|            goto done;
 8913|      9|        }
 8914|    274|        p->mark = _mark;
 8915|    274|        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
 8916|    274|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'"));
 8917|    274|    }
 8918|      0|    { // 'False'
 8919|    274|        if (p->error_indicator) {
  ------------------
  |  Branch (8919:13): [True: 0, False: 274]
  ------------------
 8920|      0|            p->level--;
 8921|      0|            return NULL;
 8922|      0|        }
 8923|    274|        D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'"));
 8924|    274|        Token * _keyword;
 8925|    274|        if (
 8926|    274|            (_keyword = _PyPegen_expect_token(p, 629))  // token='False'
  ------------------
  |  Branch (8926:13): [True: 18, False: 256]
  ------------------
 8927|    274|        )
 8928|     18|        {
 8929|     18|            D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'"));
 8930|     18|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 8931|     18|            if (_token == NULL) {
  ------------------
  |  Branch (8931:17): [True: 0, False: 18]
  ------------------
 8932|      0|                p->level--;
 8933|      0|                return NULL;
 8934|      0|            }
 8935|     18|            int _end_lineno = _token->end_lineno;
 8936|     18|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     18|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18]
  |  |  ------------------
  ------------------
 8937|     18|            int _end_col_offset = _token->end_col_offset;
 8938|     18|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     18|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 18]
  |  |  ------------------
  ------------------
 8939|     18|            _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
  ------------------
  |  |   25|     18|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          _res = _PyAST_Constant ( Py_False , NULL , EXTRA );
  ------------------
  |  |  307|     18|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
 8940|     18|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8940:18): [True: 0, False: 18]
  |  Branch (8940:34): [True: 0, False: 18]
  |  Branch (8940:57): [True: 0, False: 0]
  ------------------
 8941|      0|                p->error_indicator = 1;
 8942|      0|                p->level--;
 8943|      0|                return NULL;
 8944|      0|            }
 8945|     18|            goto done;
 8946|     18|        }
 8947|    256|        p->mark = _mark;
 8948|    256|        D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ',
 8949|    256|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'"));
 8950|    256|    }
 8951|    256|    _res = NULL;
 8952|  3.51k|  done:
 8953|  3.51k|    p->level--;
 8954|  3.51k|    return _res;
 8955|    256|}
parser.c:_loop0_46_rule:
30183|    474|{
30184|    474|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    948|#  define MAXSTACK 6000
  ------------------
  |  Branch (30184:9): [True: 0, False: 474]
  |  Branch (30184:35): [True: 0, False: 474]
  ------------------
30185|      0|        _Pypegen_stack_overflow(p);
30186|      0|    }
30187|    474|    if (p->error_indicator) {
  ------------------
  |  Branch (30187:9): [True: 0, False: 474]
  ------------------
30188|      0|        p->level--;
30189|      0|        return NULL;
30190|      0|    }
30191|    474|    void *_res = NULL;
30192|    474|    int _mark = p->mark;
30193|    474|    void **_children = PyMem_Malloc(sizeof(void *));
30194|    474|    if (!_children) {
  ------------------
  |  Branch (30194:9): [True: 0, False: 474]
  ------------------
30195|      0|        p->error_indicator = 1;
30196|      0|        PyErr_NoMemory();
30197|      0|        p->level--;
30198|      0|        return NULL;
30199|      0|    }
30200|    474|    Py_ssize_t _children_capacity = 1;
30201|    474|    Py_ssize_t _n = 0;
30202|    474|    { // ',' key_value_pattern
30203|    474|        if (p->error_indicator) {
  ------------------
  |  Branch (30203:13): [True: 0, False: 474]
  ------------------
30204|      0|            p->level--;
30205|      0|            return NULL;
30206|      0|        }
30207|    474|        D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern"));
30208|    474|        Token * _literal;
30209|    474|        KeyPatternPair* elem;
30210|    474|        while (
30211|  1.67k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (30211:13): [True: 1.50k, False: 172]
  ------------------
30212|  1.50k|            &&
30213|  1.50k|            (elem = key_value_pattern_rule(p))  // key_value_pattern
  ------------------
  |  Branch (30213:13): [True: 1.20k, False: 302]
  ------------------
30214|    474|        )
30215|  1.20k|        {
30216|  1.20k|            _res = elem;
30217|  1.20k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (30217:18): [True: 0, False: 1.20k]
  |  Branch (30217:34): [True: 0, False: 1.20k]
  |  Branch (30217:57): [True: 0, False: 0]
  ------------------
30218|      0|                p->error_indicator = 1;
30219|      0|                PyMem_Free(_children);
30220|      0|                p->level--;
30221|      0|                return NULL;
30222|      0|            }
30223|  1.20k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30223:17): [True: 450, False: 755]
  ------------------
30224|    450|                _children_capacity *= 2;
30225|    450|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30226|    450|                if (!_new_children) {
  ------------------
  |  Branch (30226:21): [True: 0, False: 450]
  ------------------
30227|      0|                    PyMem_Free(_children);
30228|      0|                    p->error_indicator = 1;
30229|      0|                    PyErr_NoMemory();
30230|      0|                    p->level--;
30231|      0|                    return NULL;
30232|      0|                }
30233|    450|                _children = _new_children;
30234|    450|            }
30235|  1.20k|            _children[_n++] = _res;
30236|  1.20k|            _mark = p->mark;
30237|  1.20k|        }
30238|    474|        p->mark = _mark;
30239|    474|        D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ',
30240|    474|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' key_value_pattern"));
30241|    474|    }
30242|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30243|    474|    if (!_seq) {
  ------------------
  |  Branch (30243:9): [True: 0, False: 474]
  ------------------
30244|      0|        PyMem_Free(_children);
30245|      0|        p->error_indicator = 1;
30246|      0|        PyErr_NoMemory();
30247|      0|        p->level--;
30248|      0|        return NULL;
30249|      0|    }
30250|  1.67k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  1.20k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.67k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30250:28): [True: 1.20k, False: 474]
  ------------------
30251|    474|    PyMem_Free(_children);
30252|    474|    p->level--;
30253|    474|    return _seq;
30254|    474|}
parser.c:invalid_mapping_pattern_rule:
24672|  10.6k|{
24673|  10.6k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  21.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24673:9): [True: 0, False: 10.6k]
  |  Branch (24673:35): [True: 0, False: 10.6k]
  ------------------
24674|      0|        _Pypegen_stack_overflow(p);
24675|      0|    }
24676|  10.6k|    if (p->error_indicator) {
  ------------------
  |  Branch (24676:9): [True: 0, False: 10.6k]
  ------------------
24677|      0|        p->level--;
24678|      0|        return NULL;
24679|      0|    }
24680|  10.6k|    void * _res = NULL;
24681|  10.6k|    int _mark = p->mark;
24682|  10.6k|    { // '{' [(items_pattern ',')] double_star_pattern ',' items_pattern ','? '}'
24683|  10.6k|        if (p->error_indicator) {
  ------------------
  |  Branch (24683:13): [True: 0, False: 10.6k]
  ------------------
24684|      0|            p->level--;
24685|      0|            return NULL;
24686|      0|        }
24687|  10.6k|        D(fprintf(stderr, "%*c> invalid_mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' [(items_pattern ',')] double_star_pattern ',' items_pattern ','? '}'"));
24688|  10.6k|        Token * _literal;
24689|  10.6k|        Token * _literal_1;
24690|  10.6k|        Token * _literal_2;
24691|  10.6k|        void *_opt_var;
24692|  10.6k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  10.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.6k]
  |  |  ------------------
  ------------------
24693|  10.6k|        void *_opt_var_1;
24694|  10.6k|        UNUSED(_opt_var_1); // Silence compiler warnings
  ------------------
  |  |  305|  10.6k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 10.6k]
  |  |  ------------------
  ------------------
24695|  10.6k|        asdl_seq* items_pattern_var;
24696|  10.6k|        expr_ty rest;
24697|  10.6k|        if (
24698|  10.6k|            (_literal = _PyPegen_expect_token(p, 25))  // token='{'
  ------------------
  |  Branch (24698:13): [True: 396, False: 10.2k]
  ------------------
24699|    396|            &&
24700|    396|            (_opt_var = _tmp_146_rule(p), !p->error_indicator)  // [(items_pattern ',')]
  ------------------
  |  Branch (24700:13): [True: 396, False: 0]
  ------------------
24701|    396|            &&
24702|    396|            (rest = double_star_pattern_rule(p))  // double_star_pattern
  ------------------
  |  Branch (24702:13): [True: 14, False: 382]
  ------------------
24703|     14|            &&
24704|     14|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (24704:13): [True: 11, False: 3]
  ------------------
24705|     11|            &&
24706|     11|            (items_pattern_var = items_pattern_rule(p))  // items_pattern
  ------------------
  |  Branch (24706:13): [True: 5, False: 6]
  ------------------
24707|      5|            &&
24708|      5|            (_opt_var_1 = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (24708:13): [True: 4, False: 1]
  ------------------
24709|      4|            &&
24710|      4|            (_literal_2 = _PyPegen_expect_token(p, 26))  // token='}'
  ------------------
  |  Branch (24710:13): [True: 0, False: 4]
  ------------------
24711|  10.6k|        )
24712|      0|        {
24713|      0|            D(fprintf(stderr, "%*c+ invalid_mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' [(items_pattern ',')] double_star_pattern ',' items_pattern ','? '}'"));
24714|      0|            _res = RAISE_SYNTAX_ERROR_KNOWN_LOCATION ( rest , "double star pattern must be the last (right-most) subpattern in the mapping pattern" );
  ------------------
  |  |  239|      0|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
24715|      0|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24715:18): [True: 0, False: 0]
  |  Branch (24715:34): [True: 0, False: 0]
  |  Branch (24715:57): [True: 0, False: 0]
  ------------------
24716|      0|                p->error_indicator = 1;
24717|      0|                p->level--;
24718|      0|                return NULL;
24719|      0|            }
24720|      0|            goto done;
24721|      0|        }
24722|  10.6k|        p->mark = _mark;
24723|  10.6k|        D(fprintf(stderr, "%*c%s invalid_mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ',
24724|  10.6k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' [(items_pattern ',')] double_star_pattern ',' items_pattern ','? '}'"));
24725|  10.6k|    }
24726|  10.6k|    _res = NULL;
24727|  10.6k|  done:
24728|  10.6k|    p->level--;
24729|  10.6k|    return _res;
24730|  10.6k|}
parser.c:_tmp_146_rule:
36300|    396|{
36301|    396|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|    792|#  define MAXSTACK 6000
  ------------------
  |  Branch (36301:9): [True: 0, False: 396]
  |  Branch (36301:35): [True: 0, False: 396]
  ------------------
36302|      0|        _Pypegen_stack_overflow(p);
36303|      0|    }
36304|    396|    if (p->error_indicator) {
  ------------------
  |  Branch (36304:9): [True: 0, False: 396]
  ------------------
36305|      0|        p->level--;
36306|      0|        return NULL;
36307|      0|    }
36308|    396|    void * _res = NULL;
36309|    396|    int _mark = p->mark;
36310|    396|    { // items_pattern ','
36311|    396|        if (p->error_indicator) {
  ------------------
  |  Branch (36311:13): [True: 0, False: 396]
  ------------------
36312|      0|            p->level--;
36313|      0|            return NULL;
36314|      0|        }
36315|    396|        D(fprintf(stderr, "%*c> _tmp_146[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "items_pattern ','"));
36316|    396|        Token * _literal;
36317|    396|        asdl_seq* items_pattern_var;
36318|    396|        if (
36319|    396|            (items_pattern_var = items_pattern_rule(p))  // items_pattern
  ------------------
  |  Branch (36319:13): [True: 90, False: 306]
  ------------------
36320|     90|            &&
36321|     90|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (36321:13): [True: 53, False: 37]
  ------------------
36322|    396|        )
36323|     53|        {
36324|     53|            D(fprintf(stderr, "%*c+ _tmp_146[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "items_pattern ','"));
36325|     53|            _res = _PyPegen_dummy_name(p, items_pattern_var, _literal);
36326|     53|            goto done;
36327|     53|        }
36328|    343|        p->mark = _mark;
36329|    343|        D(fprintf(stderr, "%*c%s _tmp_146[%d-%d]: %s failed!\n", p->level, ' ',
36330|    343|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "items_pattern ','"));
36331|    343|    }
36332|    343|    _res = NULL;
36333|    396|  done:
36334|    396|    p->level--;
36335|    396|    return _res;
36336|    343|}
parser.c:class_pattern_rule:
10561|  13.7k|{
10562|  13.7k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  27.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10562:9): [True: 0, False: 13.7k]
  |  Branch (10562:35): [True: 0, False: 13.7k]
  ------------------
10563|      0|        _Pypegen_stack_overflow(p);
10564|      0|    }
10565|  13.7k|    if (p->error_indicator) {
  ------------------
  |  Branch (10565:9): [True: 0, False: 13.7k]
  ------------------
10566|      0|        p->level--;
10567|      0|        return NULL;
10568|      0|    }
10569|  13.7k|    pattern_ty _res = NULL;
10570|  13.7k|    int _mark = p->mark;
10571|  13.7k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (10571:9): [True: 0, False: 13.7k]
  |  Branch (10571:31): [True: 0, False: 0]
  ------------------
10572|      0|        p->error_indicator = 1;
10573|      0|        p->level--;
10574|      0|        return NULL;
10575|      0|    }
10576|  13.7k|    int _start_lineno = p->tokens[_mark]->lineno;
10577|  13.7k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  13.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.7k]
  |  |  ------------------
  ------------------
10578|  13.7k|    int _start_col_offset = p->tokens[_mark]->col_offset;
10579|  13.7k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  13.7k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.7k]
  |  |  ------------------
  ------------------
10580|  13.7k|    { // name_or_attr '(' ')'
10581|  13.7k|        if (p->error_indicator) {
  ------------------
  |  Branch (10581:13): [True: 0, False: 13.7k]
  ------------------
10582|      0|            p->level--;
10583|      0|            return NULL;
10584|      0|        }
10585|  13.7k|        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'"));
10586|  13.7k|        Token * _literal;
10587|  13.7k|        Token * _literal_1;
10588|  13.7k|        expr_ty cls;
10589|  13.7k|        if (
10590|  13.7k|            (cls = name_or_attr_rule(p))  // name_or_attr
  ------------------
  |  Branch (10590:13): [True: 8.58k, False: 5.17k]
  ------------------
10591|  8.58k|            &&
10592|  8.58k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (10592:13): [True: 5.88k, False: 2.69k]
  ------------------
10593|  5.88k|            &&
10594|  5.88k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (10594:13): [True: 243, False: 5.64k]
  ------------------
10595|  13.7k|        )
10596|    243|        {
10597|    243|            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'"));
10598|    243|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10599|    243|            if (_token == NULL) {
  ------------------
  |  Branch (10599:17): [True: 0, False: 243]
  ------------------
10600|      0|                p->level--;
10601|      0|                return NULL;
10602|      0|            }
10603|    243|            int _end_lineno = _token->end_lineno;
10604|    243|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    243|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 243]
  |  |  ------------------
  ------------------
10605|    243|            int _end_col_offset = _token->end_col_offset;
10606|    243|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    243|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 243]
  |  |  ------------------
  ------------------
10607|    243|            _res = _PyAST_MatchClass ( cls , NULL , NULL , NULL , EXTRA );
  ------------------
  |  |  307|    243|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10608|    243|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10608:18): [True: 0, False: 243]
  |  Branch (10608:34): [True: 0, False: 243]
  |  Branch (10608:57): [True: 0, False: 0]
  ------------------
10609|      0|                p->error_indicator = 1;
10610|      0|                p->level--;
10611|      0|                return NULL;
10612|      0|            }
10613|    243|            goto done;
10614|    243|        }
10615|  13.5k|        p->mark = _mark;
10616|  13.5k|        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10617|  13.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' ')'"));
10618|  13.5k|    }
10619|      0|    { // name_or_attr '(' positional_patterns ','? ')'
10620|  13.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (10620:13): [True: 5, False: 13.5k]
  ------------------
10621|      5|            p->level--;
10622|      5|            return NULL;
10623|      5|        }
10624|  13.5k|        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
10625|  13.5k|        Token * _literal;
10626|  13.5k|        Token * _literal_1;
10627|  13.5k|        void *_opt_var;
10628|  13.5k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  13.5k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 13.5k]
  |  |  ------------------
  ------------------
10629|  13.5k|        expr_ty cls;
10630|  13.5k|        asdl_pattern_seq* patterns;
10631|  13.5k|        if (
10632|  13.5k|            (cls = name_or_attr_rule(p))  // name_or_attr
  ------------------
  |  Branch (10632:13): [True: 8.33k, False: 5.17k]
  ------------------
10633|  8.33k|            &&
10634|  8.33k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (10634:13): [True: 5.63k, False: 2.69k]
  ------------------
10635|  5.63k|            &&
10636|  5.63k|            (patterns = positional_patterns_rule(p))  // positional_patterns
  ------------------
  |  Branch (10636:13): [True: 3.59k, False: 2.04k]
  ------------------
10637|  3.59k|            &&
10638|  3.59k|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10638:13): [True: 3.59k, False: 0]
  ------------------
10639|  3.59k|            &&
10640|  3.59k|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (10640:13): [True: 991, False: 2.60k]
  ------------------
10641|  13.5k|        )
10642|    991|        {
10643|    991|            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
10644|    991|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10645|    991|            if (_token == NULL) {
  ------------------
  |  Branch (10645:17): [True: 0, False: 991]
  ------------------
10646|      0|                p->level--;
10647|      0|                return NULL;
10648|      0|            }
10649|    991|            int _end_lineno = _token->end_lineno;
10650|    991|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    991|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 991]
  |  |  ------------------
  ------------------
10651|    991|            int _end_col_offset = _token->end_col_offset;
10652|    991|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    991|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 991]
  |  |  ------------------
  ------------------
10653|    991|            _res = _PyAST_MatchClass ( cls , patterns , NULL , NULL , EXTRA );
  ------------------
  |  |  307|    991|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10654|    991|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10654:18): [True: 0, False: 991]
  |  Branch (10654:34): [True: 0, False: 991]
  |  Branch (10654:57): [True: 0, False: 0]
  ------------------
10655|      0|                p->error_indicator = 1;
10656|      0|                p->level--;
10657|      0|                return NULL;
10658|      0|            }
10659|    991|            goto done;
10660|    991|        }
10661|  12.5k|        p->mark = _mark;
10662|  12.5k|        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10663|  12.5k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'"));
10664|  12.5k|    }
10665|      0|    { // name_or_attr '(' keyword_patterns ','? ')'
10666|  12.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (10666:13): [True: 470, False: 12.0k]
  ------------------
10667|    470|            p->level--;
10668|    470|            return NULL;
10669|    470|        }
10670|  12.0k|        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
10671|  12.0k|        Token * _literal;
10672|  12.0k|        Token * _literal_1;
10673|  12.0k|        void *_opt_var;
10674|  12.0k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  12.0k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 12.0k]
  |  |  ------------------
  ------------------
10675|  12.0k|        expr_ty cls;
10676|  12.0k|        asdl_seq* keywords;
10677|  12.0k|        if (
10678|  12.0k|            (cls = name_or_attr_rule(p))  // name_or_attr
  ------------------
  |  Branch (10678:13): [True: 6.87k, False: 5.17k]
  ------------------
10679|  6.87k|            &&
10680|  6.87k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (10680:13): [True: 4.17k, False: 2.69k]
  ------------------
10681|  4.17k|            &&
10682|  4.17k|            (keywords = keyword_patterns_rule(p))  // keyword_patterns
  ------------------
  |  Branch (10682:13): [True: 711, False: 3.46k]
  ------------------
10683|    711|            &&
10684|    711|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10684:13): [True: 690, False: 21]
  ------------------
10685|    690|            &&
10686|    690|            (_literal_1 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (10686:13): [True: 54, False: 636]
  ------------------
10687|  12.0k|        )
10688|     54|        {
10689|     54|            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
10690|     54|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10691|     54|            if (_token == NULL) {
  ------------------
  |  Branch (10691:17): [True: 0, False: 54]
  ------------------
10692|      0|                p->level--;
10693|      0|                return NULL;
10694|      0|            }
10695|     54|            int _end_lineno = _token->end_lineno;
10696|     54|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|     54|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 54]
  |  |  ------------------
  ------------------
10697|     54|            int _end_col_offset = _token->end_col_offset;
10698|     54|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|     54|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 54]
  |  |  ------------------
  ------------------
10699|     54|            _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
  ------------------
  |  |  271|     54|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
  ------------------
  |  |  271|     54|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
  ------------------
  |  |  307|     54|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10700|     54|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10700:18): [True: 0, False: 54]
  |  Branch (10700:34): [True: 0, False: 54]
  |  Branch (10700:57): [True: 0, False: 0]
  ------------------
10701|      0|                p->error_indicator = 1;
10702|      0|                p->level--;
10703|      0|                return NULL;
10704|      0|            }
10705|     54|            goto done;
10706|     54|        }
10707|  11.9k|        p->mark = _mark;
10708|  11.9k|        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10709|  11.9k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'"));
10710|  11.9k|    }
10711|      0|    { // name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'
10712|  11.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (10712:13): [True: 47, False: 11.9k]
  ------------------
10713|     47|            p->level--;
10714|     47|            return NULL;
10715|     47|        }
10716|  11.9k|        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
10717|  11.9k|        Token * _literal;
10718|  11.9k|        Token * _literal_1;
10719|  11.9k|        Token * _literal_2;
10720|  11.9k|        void *_opt_var;
10721|  11.9k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  11.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 11.9k]
  |  |  ------------------
  ------------------
10722|  11.9k|        expr_ty cls;
10723|  11.9k|        asdl_seq* keywords;
10724|  11.9k|        asdl_pattern_seq* patterns;
10725|  11.9k|        if (
10726|  11.9k|            (cls = name_or_attr_rule(p))  // name_or_attr
  ------------------
  |  Branch (10726:13): [True: 6.77k, False: 5.17k]
  ------------------
10727|  6.77k|            &&
10728|  6.77k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (10728:13): [True: 4.07k, False: 2.69k]
  ------------------
10729|  4.07k|            &&
10730|  4.07k|            (patterns = positional_patterns_rule(p))  // positional_patterns
  ------------------
  |  Branch (10730:13): [True: 2.60k, False: 1.46k]
  ------------------
10731|  2.60k|            &&
10732|  2.60k|            (_literal_1 = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (10732:13): [True: 2.29k, False: 309]
  ------------------
10733|  2.29k|            &&
10734|  2.29k|            (keywords = keyword_patterns_rule(p))  // keyword_patterns
  ------------------
  |  Branch (10734:13): [True: 954, False: 1.34k]
  ------------------
10735|    954|            &&
10736|    954|            (_opt_var = _PyPegen_expect_token(p, 12), !p->error_indicator)  // ','?
  ------------------
  |  Branch (10736:13): [True: 686, False: 268]
  ------------------
10737|    686|            &&
10738|    686|            (_literal_2 = _PyPegen_expect_token(p, 8))  // token=')'
  ------------------
  |  Branch (10738:13): [True: 230, False: 456]
  ------------------
10739|  11.9k|        )
10740|    230|        {
10741|    230|            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
10742|    230|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
10743|    230|            if (_token == NULL) {
  ------------------
  |  Branch (10743:17): [True: 0, False: 230]
  ------------------
10744|      0|                p->level--;
10745|      0|                return NULL;
10746|      0|            }
10747|    230|            int _end_lineno = _token->end_lineno;
10748|    230|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|    230|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 230]
  |  |  ------------------
  ------------------
10749|    230|            int _end_col_offset = _token->end_col_offset;
10750|    230|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|    230|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 230]
  |  |  ------------------
  ------------------
10751|    230|            _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
  ------------------
  |  |  271|    230|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
  ------------------
  |  |  271|    230|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
                          _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq* , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq* , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq* , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA );
  ------------------
  |  |  307|    230|#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena
  ------------------
10752|    230|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10752:18): [True: 0, False: 230]
  |  Branch (10752:34): [True: 0, False: 230]
  |  Branch (10752:57): [True: 0, False: 0]
  ------------------
10753|      0|                p->error_indicator = 1;
10754|      0|                p->level--;
10755|      0|                return NULL;
10756|      0|            }
10757|    230|            goto done;
10758|    230|        }
10759|  11.7k|        p->mark = _mark;
10760|  11.7k|        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10761|  11.7k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'"));
10762|  11.7k|    }
10763|  11.7k|    if (p->call_invalid_rules) { // invalid_class_pattern
  ------------------
  |  Branch (10763:9): [True: 9.63k, False: 2.08k]
  ------------------
10764|  9.63k|        if (p->error_indicator) {
  ------------------
  |  Branch (10764:13): [True: 551, False: 9.08k]
  ------------------
10765|    551|            p->level--;
10766|    551|            return NULL;
10767|    551|        }
10768|  9.08k|        D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern"));
10769|  9.08k|        void *invalid_class_pattern_var;
10770|  9.08k|        if (
10771|  9.08k|            (invalid_class_pattern_var = invalid_class_pattern_rule(p))  // invalid_class_pattern
  ------------------
  |  Branch (10771:13): [True: 0, False: 9.08k]
  ------------------
10772|  9.08k|        )
10773|      0|        {
10774|      0|            D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern"));
10775|      0|            _res = invalid_class_pattern_var;
10776|      0|            goto done;
10777|      0|        }
10778|  9.08k|        p->mark = _mark;
10779|  9.08k|        D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10780|  9.08k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_pattern"));
10781|  9.08k|    }
10782|  11.1k|    _res = NULL;
10783|  12.6k|  done:
10784|  12.6k|    p->level--;
10785|  12.6k|    return _res;
10786|  11.1k|}
parser.c:positional_patterns_rule:
10791|  13.5k|{
10792|  13.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  27.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10792:9): [True: 0, False: 13.5k]
  |  Branch (10792:35): [True: 0, False: 13.5k]
  ------------------
10793|      0|        _Pypegen_stack_overflow(p);
10794|      0|    }
10795|  13.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (10795:9): [True: 0, False: 13.5k]
  ------------------
10796|      0|        p->level--;
10797|      0|        return NULL;
10798|      0|    }
10799|  13.5k|    asdl_pattern_seq* _res = NULL;
10800|  13.5k|    int _mark = p->mark;
10801|  13.5k|    { // ','.pattern+
10802|  13.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (10802:13): [True: 0, False: 13.5k]
  ------------------
10803|      0|            p->level--;
10804|      0|            return NULL;
10805|      0|        }
10806|  13.5k|        D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+"));
10807|  13.5k|        asdl_pattern_seq* args;
10808|  13.5k|        if (
10809|  13.5k|            (args = (asdl_pattern_seq*)_gather_50_rule(p))  // ','.pattern+
  ------------------
  |  Branch (10809:13): [True: 8.02k, False: 5.51k]
  ------------------
10810|  13.5k|        )
10811|  8.02k|        {
10812|  8.02k|            D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+"));
10813|  8.02k|            _res = args;
10814|  8.02k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10814:18): [True: 0, False: 8.02k]
  |  Branch (10814:34): [True: 268, False: 7.75k]
  |  Branch (10814:57): [True: 268, False: 0]
  ------------------
10815|    268|                p->error_indicator = 1;
10816|    268|                p->level--;
10817|    268|                return NULL;
10818|    268|            }
10819|  7.75k|            goto done;
10820|  8.02k|        }
10821|  5.51k|        p->mark = _mark;
10822|  5.51k|        D(fprintf(stderr, "%*c%s positional_patterns[%d-%d]: %s failed!\n", p->level, ' ',
10823|  5.51k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.pattern+"));
10824|  5.51k|    }
10825|  5.51k|    _res = NULL;
10826|  13.2k|  done:
10827|  13.2k|    p->level--;
10828|  13.2k|    return _res;
10829|  5.51k|}
parser.c:_gather_50_rule:
30433|  13.5k|{
30434|  13.5k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  27.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30434:9): [True: 0, False: 13.5k]
  |  Branch (30434:35): [True: 0, False: 13.5k]
  ------------------
30435|      0|        _Pypegen_stack_overflow(p);
30436|      0|    }
30437|  13.5k|    if (p->error_indicator) {
  ------------------
  |  Branch (30437:9): [True: 0, False: 13.5k]
  ------------------
30438|      0|        p->level--;
30439|      0|        return NULL;
30440|      0|    }
30441|  13.5k|    asdl_seq * _res = NULL;
30442|  13.5k|    int _mark = p->mark;
30443|  13.5k|    { // pattern _loop0_49
30444|  13.5k|        if (p->error_indicator) {
  ------------------
  |  Branch (30444:13): [True: 0, False: 13.5k]
  ------------------
30445|      0|            p->level--;
30446|      0|            return NULL;
30447|      0|        }
30448|  13.5k|        D(fprintf(stderr, "%*c> _gather_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_49"));
30449|  13.5k|        pattern_ty elem;
30450|  13.5k|        asdl_seq * seq;
30451|  13.5k|        if (
30452|  13.5k|            (elem = pattern_rule(p))  // pattern
  ------------------
  |  Branch (30452:13): [True: 8.02k, False: 5.51k]
  ------------------
30453|  8.02k|            &&
30454|  8.02k|            (seq = _loop0_49_rule(p))  // _loop0_49
  ------------------
  |  Branch (30454:13): [True: 8.02k, False: 0]
  ------------------
30455|  13.5k|        )
30456|  8.02k|        {
30457|  8.02k|            D(fprintf(stderr, "%*c+ _gather_50[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_49"));
30458|  8.02k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30459|  8.02k|            goto done;
30460|  8.02k|        }
30461|  5.51k|        p->mark = _mark;
30462|  5.51k|        D(fprintf(stderr, "%*c%s _gather_50[%d-%d]: %s failed!\n", p->level, ' ',
30463|  5.51k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_49"));
30464|  5.51k|    }
30465|  5.51k|    _res = NULL;
30466|  13.5k|  done:
30467|  13.5k|    p->level--;
30468|  13.5k|    return _res;
30469|  5.51k|}
parser.c:_loop0_49_rule:
30357|  8.02k|{
30358|  8.02k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  16.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30358:9): [True: 0, False: 8.02k]
  |  Branch (30358:35): [True: 0, False: 8.02k]
  ------------------
30359|      0|        _Pypegen_stack_overflow(p);
30360|      0|    }
30361|  8.02k|    if (p->error_indicator) {
  ------------------
  |  Branch (30361:9): [True: 0, False: 8.02k]
  ------------------
30362|      0|        p->level--;
30363|      0|        return NULL;
30364|      0|    }
30365|  8.02k|    void *_res = NULL;
30366|  8.02k|    int _mark = p->mark;
30367|  8.02k|    void **_children = PyMem_Malloc(sizeof(void *));
30368|  8.02k|    if (!_children) {
  ------------------
  |  Branch (30368:9): [True: 0, False: 8.02k]
  ------------------
30369|      0|        p->error_indicator = 1;
30370|      0|        PyErr_NoMemory();
30371|      0|        p->level--;
30372|      0|        return NULL;
30373|      0|    }
30374|  8.02k|    Py_ssize_t _children_capacity = 1;
30375|  8.02k|    Py_ssize_t _n = 0;
30376|  8.02k|    { // ',' pattern
30377|  8.02k|        if (p->error_indicator) {
  ------------------
  |  Branch (30377:13): [True: 0, False: 8.02k]
  ------------------
30378|      0|            p->level--;
30379|      0|            return NULL;
30380|      0|        }
30381|  8.02k|        D(fprintf(stderr, "%*c> _loop0_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern"));
30382|  8.02k|        Token * _literal;
30383|  8.02k|        pattern_ty elem;
30384|  8.02k|        while (
30385|  14.9k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (30385:13): [True: 13.1k, False: 1.88k]
  ------------------
30386|  13.1k|            &&
30387|  13.1k|            (elem = pattern_rule(p))  // pattern
  ------------------
  |  Branch (30387:13): [True: 6.96k, False: 6.13k]
  ------------------
30388|  8.02k|        )
30389|  6.96k|        {
30390|  6.96k|            _res = elem;
30391|  6.96k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (30391:18): [True: 0, False: 6.96k]
  |  Branch (30391:34): [True: 0, False: 6.96k]
  |  Branch (30391:57): [True: 0, False: 0]
  ------------------
30392|      0|                p->error_indicator = 1;
30393|      0|                PyMem_Free(_children);
30394|      0|                p->level--;
30395|      0|                return NULL;
30396|      0|            }
30397|  6.96k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30397:17): [True: 1.89k, False: 5.06k]
  ------------------
30398|  1.89k|                _children_capacity *= 2;
30399|  1.89k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30400|  1.89k|                if (!_new_children) {
  ------------------
  |  Branch (30400:21): [True: 0, False: 1.89k]
  ------------------
30401|      0|                    PyMem_Free(_children);
30402|      0|                    p->error_indicator = 1;
30403|      0|                    PyErr_NoMemory();
30404|      0|                    p->level--;
30405|      0|                    return NULL;
30406|      0|                }
30407|  1.89k|                _children = _new_children;
30408|  1.89k|            }
30409|  6.96k|            _children[_n++] = _res;
30410|  6.96k|            _mark = p->mark;
30411|  6.96k|        }
30412|  8.02k|        p->mark = _mark;
30413|  8.02k|        D(fprintf(stderr, "%*c%s _loop0_49[%d-%d]: %s failed!\n", p->level, ' ',
30414|  8.02k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' pattern"));
30415|  8.02k|    }
30416|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30417|  8.02k|    if (!_seq) {
  ------------------
  |  Branch (30417:9): [True: 0, False: 8.02k]
  ------------------
30418|      0|        PyMem_Free(_children);
30419|      0|        p->error_indicator = 1;
30420|      0|        PyErr_NoMemory();
30421|      0|        p->level--;
30422|      0|        return NULL;
30423|      0|    }
30424|  14.9k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  6.96k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  14.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30424:28): [True: 6.96k, False: 8.02k]
  ------------------
30425|  8.02k|    PyMem_Free(_children);
30426|  8.02k|    p->level--;
30427|  8.02k|    return _seq;
30428|  8.02k|}
parser.c:keyword_patterns_rule:
10834|  9.25k|{
10835|  9.25k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10835:9): [True: 0, False: 9.25k]
  |  Branch (10835:35): [True: 0, False: 9.25k]
  ------------------
10836|      0|        _Pypegen_stack_overflow(p);
10837|      0|    }
10838|  9.25k|    if (p->error_indicator) {
  ------------------
  |  Branch (10838:9): [True: 0, False: 9.25k]
  ------------------
10839|      0|        p->level--;
10840|      0|        return NULL;
10841|      0|    }
10842|  9.25k|    asdl_seq* _res = NULL;
10843|  9.25k|    int _mark = p->mark;
10844|  9.25k|    { // ','.keyword_pattern+
10845|  9.25k|        if (p->error_indicator) {
  ------------------
  |  Branch (10845:13): [True: 0, False: 9.25k]
  ------------------
10846|      0|            p->level--;
10847|      0|            return NULL;
10848|      0|        }
10849|  9.25k|        D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+"));
10850|  9.25k|        asdl_seq * _gather_52_var;
10851|  9.25k|        if (
10852|  9.25k|            (_gather_52_var = _gather_52_rule(p))  // ','.keyword_pattern+
  ------------------
  |  Branch (10852:13): [True: 2.72k, False: 6.53k]
  ------------------
10853|  9.25k|        )
10854|  2.72k|        {
10855|  2.72k|            D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+"));
10856|  2.72k|            _res = _gather_52_var;
10857|  2.72k|            goto done;
10858|  2.72k|        }
10859|  6.53k|        p->mark = _mark;
10860|  6.53k|        D(fprintf(stderr, "%*c%s keyword_patterns[%d-%d]: %s failed!\n", p->level, ' ',
10861|  6.53k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.keyword_pattern+"));
10862|  6.53k|    }
10863|  6.53k|    _res = NULL;
10864|  9.25k|  done:
10865|  9.25k|    p->level--;
10866|  9.25k|    return _res;
10867|  6.53k|}
parser.c:_gather_52_rule:
30550|  9.25k|{
30551|  9.25k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30551:9): [True: 0, False: 9.25k]
  |  Branch (30551:35): [True: 0, False: 9.25k]
  ------------------
30552|      0|        _Pypegen_stack_overflow(p);
30553|      0|    }
30554|  9.25k|    if (p->error_indicator) {
  ------------------
  |  Branch (30554:9): [True: 0, False: 9.25k]
  ------------------
30555|      0|        p->level--;
30556|      0|        return NULL;
30557|      0|    }
30558|  9.25k|    asdl_seq * _res = NULL;
30559|  9.25k|    int _mark = p->mark;
30560|  9.25k|    { // keyword_pattern _loop0_51
30561|  9.25k|        if (p->error_indicator) {
  ------------------
  |  Branch (30561:13): [True: 0, False: 9.25k]
  ------------------
30562|      0|            p->level--;
30563|      0|            return NULL;
30564|      0|        }
30565|  9.25k|        D(fprintf(stderr, "%*c> _gather_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_51"));
30566|  9.25k|        KeyPatternPair* elem;
30567|  9.25k|        asdl_seq * seq;
30568|  9.25k|        if (
30569|  9.25k|            (elem = keyword_pattern_rule(p))  // keyword_pattern
  ------------------
  |  Branch (30569:13): [True: 2.72k, False: 6.53k]
  ------------------
30570|  2.72k|            &&
30571|  2.72k|            (seq = _loop0_51_rule(p))  // _loop0_51
  ------------------
  |  Branch (30571:13): [True: 2.72k, False: 0]
  ------------------
30572|  9.25k|        )
30573|  2.72k|        {
30574|  2.72k|            D(fprintf(stderr, "%*c+ _gather_52[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_51"));
30575|  2.72k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
30576|  2.72k|            goto done;
30577|  2.72k|        }
30578|  6.53k|        p->mark = _mark;
30579|  6.53k|        D(fprintf(stderr, "%*c%s _gather_52[%d-%d]: %s failed!\n", p->level, ' ',
30580|  6.53k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_51"));
30581|  6.53k|    }
30582|  6.53k|    _res = NULL;
30583|  9.25k|  done:
30584|  9.25k|    p->level--;
30585|  9.25k|    return _res;
30586|  6.53k|}
parser.c:keyword_pattern_rule:
10872|  12.2k|{
10873|  12.2k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  24.5k|#  define MAXSTACK 6000
  ------------------
  |  Branch (10873:9): [True: 0, False: 12.2k]
  |  Branch (10873:35): [True: 0, False: 12.2k]
  ------------------
10874|      0|        _Pypegen_stack_overflow(p);
10875|      0|    }
10876|  12.2k|    if (p->error_indicator) {
  ------------------
  |  Branch (10876:9): [True: 0, False: 12.2k]
  ------------------
10877|      0|        p->level--;
10878|      0|        return NULL;
10879|      0|    }
10880|  12.2k|    KeyPatternPair* _res = NULL;
10881|  12.2k|    int _mark = p->mark;
10882|  12.2k|    { // NAME '=' pattern
10883|  12.2k|        if (p->error_indicator) {
  ------------------
  |  Branch (10883:13): [True: 0, False: 12.2k]
  ------------------
10884|      0|            p->level--;
10885|      0|            return NULL;
10886|      0|        }
10887|  12.2k|        D(fprintf(stderr, "%*c> keyword_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern"));
10888|  12.2k|        Token * _literal;
10889|  12.2k|        expr_ty arg;
10890|  12.2k|        pattern_ty value;
10891|  12.2k|        if (
10892|  12.2k|            (arg = _PyPegen_name_token(p))  // NAME
  ------------------
  |  Branch (10892:13): [True: 9.43k, False: 2.84k]
  ------------------
10893|  9.43k|            &&
10894|  9.43k|            (_literal = _PyPegen_expect_token(p, 22))  // token='='
  ------------------
  |  Branch (10894:13): [True: 5.35k, False: 4.08k]
  ------------------
10895|  5.35k|            &&
10896|  5.35k|            (value = pattern_rule(p))  // pattern
  ------------------
  |  Branch (10896:13): [True: 3.36k, False: 1.99k]
  ------------------
10897|  12.2k|        )
10898|  3.36k|        {
10899|  3.36k|            D(fprintf(stderr, "%*c+ keyword_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern"));
10900|  3.36k|            _res = _PyPegen_key_pattern_pair ( p , arg , value );
10901|  3.36k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (10901:18): [True: 0, False: 3.36k]
  |  Branch (10901:34): [True: 0, False: 3.36k]
  |  Branch (10901:57): [True: 0, False: 0]
  ------------------
10902|      0|                p->error_indicator = 1;
10903|      0|                p->level--;
10904|      0|                return NULL;
10905|      0|            }
10906|  3.36k|            goto done;
10907|  3.36k|        }
10908|  8.92k|        p->mark = _mark;
10909|  8.92k|        D(fprintf(stderr, "%*c%s keyword_pattern[%d-%d]: %s failed!\n", p->level, ' ',
10910|  8.92k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' pattern"));
10911|  8.92k|    }
10912|  8.92k|    _res = NULL;
10913|  12.2k|  done:
10914|  12.2k|    p->level--;
10915|  12.2k|    return _res;
10916|  8.92k|}
parser.c:_loop0_51_rule:
30474|  2.72k|{
30475|  2.72k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.45k|#  define MAXSTACK 6000
  ------------------
  |  Branch (30475:9): [True: 0, False: 2.72k]
  |  Branch (30475:35): [True: 0, False: 2.72k]
  ------------------
30476|      0|        _Pypegen_stack_overflow(p);
30477|      0|    }
30478|  2.72k|    if (p->error_indicator) {
  ------------------
  |  Branch (30478:9): [True: 0, False: 2.72k]
  ------------------
30479|      0|        p->level--;
30480|      0|        return NULL;
30481|      0|    }
30482|  2.72k|    void *_res = NULL;
30483|  2.72k|    int _mark = p->mark;
30484|  2.72k|    void **_children = PyMem_Malloc(sizeof(void *));
30485|  2.72k|    if (!_children) {
  ------------------
  |  Branch (30485:9): [True: 0, False: 2.72k]
  ------------------
30486|      0|        p->error_indicator = 1;
30487|      0|        PyErr_NoMemory();
30488|      0|        p->level--;
30489|      0|        return NULL;
30490|      0|    }
30491|  2.72k|    Py_ssize_t _children_capacity = 1;
30492|  2.72k|    Py_ssize_t _n = 0;
30493|  2.72k|    { // ',' keyword_pattern
30494|  2.72k|        if (p->error_indicator) {
  ------------------
  |  Branch (30494:13): [True: 0, False: 2.72k]
  ------------------
30495|      0|            p->level--;
30496|      0|            return NULL;
30497|      0|        }
30498|  2.72k|        D(fprintf(stderr, "%*c> _loop0_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern"));
30499|  2.72k|        Token * _literal;
30500|  2.72k|        KeyPatternPair* elem;
30501|  2.72k|        while (
30502|  3.36k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (30502:13): [True: 3.02k, False: 339]
  ------------------
30503|  3.02k|            &&
30504|  3.02k|            (elem = keyword_pattern_rule(p))  // keyword_pattern
  ------------------
  |  Branch (30504:13): [True: 632, False: 2.38k]
  ------------------
30505|  2.72k|        )
30506|    632|        {
30507|    632|            _res = elem;
30508|    632|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (30508:18): [True: 0, False: 632]
  |  Branch (30508:34): [True: 0, False: 632]
  |  Branch (30508:57): [True: 0, False: 0]
  ------------------
30509|      0|                p->error_indicator = 1;
30510|      0|                PyMem_Free(_children);
30511|      0|                p->level--;
30512|      0|                return NULL;
30513|      0|            }
30514|    632|            if (_n == _children_capacity) {
  ------------------
  |  Branch (30514:17): [True: 148, False: 484]
  ------------------
30515|    148|                _children_capacity *= 2;
30516|    148|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
30517|    148|                if (!_new_children) {
  ------------------
  |  Branch (30517:21): [True: 0, False: 148]
  ------------------
30518|      0|                    PyMem_Free(_children);
30519|      0|                    p->error_indicator = 1;
30520|      0|                    PyErr_NoMemory();
30521|      0|                    p->level--;
30522|      0|                    return NULL;
30523|      0|                }
30524|    148|                _children = _new_children;
30525|    148|            }
30526|    632|            _children[_n++] = _res;
30527|    632|            _mark = p->mark;
30528|    632|        }
30529|  2.72k|        p->mark = _mark;
30530|  2.72k|        D(fprintf(stderr, "%*c%s _loop0_51[%d-%d]: %s failed!\n", p->level, ' ',
30531|  2.72k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' keyword_pattern"));
30532|  2.72k|    }
30533|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
30534|  2.72k|    if (!_seq) {
  ------------------
  |  Branch (30534:9): [True: 0, False: 2.72k]
  ------------------
30535|      0|        PyMem_Free(_children);
30536|      0|        p->error_indicator = 1;
30537|      0|        PyErr_NoMemory();
30538|      0|        p->level--;
30539|      0|        return NULL;
30540|      0|    }
30541|  3.36k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|    632|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  3.36k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (30541:28): [True: 632, False: 2.72k]
  ------------------
30542|  2.72k|    PyMem_Free(_children);
30543|  2.72k|    p->level--;
30544|  2.72k|    return _seq;
30545|  2.72k|}
parser.c:invalid_class_pattern_rule:
24622|  9.08k|{
24623|  9.08k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  18.1k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24623:9): [True: 0, False: 9.08k]
  |  Branch (24623:35): [True: 0, False: 9.08k]
  ------------------
24624|      0|        _Pypegen_stack_overflow(p);
24625|      0|    }
24626|  9.08k|    if (p->error_indicator) {
  ------------------
  |  Branch (24626:9): [True: 0, False: 9.08k]
  ------------------
24627|      0|        p->level--;
24628|      0|        return NULL;
24629|      0|    }
24630|  9.08k|    void * _res = NULL;
24631|  9.08k|    int _mark = p->mark;
24632|  9.08k|    { // name_or_attr '(' invalid_class_argument_pattern
24633|  9.08k|        if (p->error_indicator) {
  ------------------
  |  Branch (24633:13): [True: 0, False: 9.08k]
  ------------------
24634|      0|            p->level--;
24635|      0|            return NULL;
24636|      0|        }
24637|  9.08k|        D(fprintf(stderr, "%*c> invalid_class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
24638|  9.08k|        Token * _literal;
24639|  9.08k|        asdl_pattern_seq* a;
24640|  9.08k|        expr_ty name_or_attr_var;
24641|  9.08k|        if (
24642|  9.08k|            (name_or_attr_var = name_or_attr_rule(p))  // name_or_attr
  ------------------
  |  Branch (24642:13): [True: 5.29k, False: 3.78k]
  ------------------
24643|  5.29k|            &&
24644|  5.29k|            (_literal = _PyPegen_expect_token(p, 7))  // token='('
  ------------------
  |  Branch (24644:13): [True: 2.78k, False: 2.51k]
  ------------------
24645|  2.78k|            &&
24646|  2.78k|            (a = invalid_class_argument_pattern_rule(p))  // invalid_class_argument_pattern
  ------------------
  |  Branch (24646:13): [True: 6, False: 2.77k]
  ------------------
24647|  9.08k|        )
24648|      6|        {
24649|      6|            D(fprintf(stderr, "%*c+ invalid_class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
24650|      6|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( PyPegen_first_item ( a , pattern_ty ) , PyPegen_last_item ( a , pattern_ty ) , "positional patterns follow keyword patterns" );
  ------------------
  |  |  237|      6|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
24651|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24651:18): [True: 6, False: 0]
  |  Branch (24651:34): [True: 0, False: 0]
  |  Branch (24651:57): [True: 6, False: 0]
  ------------------
24652|      6|                p->error_indicator = 1;
24653|      6|                p->level--;
24654|      6|                return NULL;
24655|      6|            }
24656|      0|            goto done;
24657|      6|        }
24658|  9.07k|        p->mark = _mark;
24659|  9.07k|        D(fprintf(stderr, "%*c%s invalid_class_pattern[%d-%d]: %s failed!\n", p->level, ' ',
24660|  9.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' invalid_class_argument_pattern"));
24661|  9.07k|    }
24662|  9.07k|    _res = NULL;
24663|  9.07k|  done:
24664|  9.07k|    p->level--;
24665|  9.07k|    return _res;
24666|  9.07k|}
parser.c:invalid_class_argument_pattern_rule:
24736|  2.78k|{
24737|  2.78k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.56k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24737:9): [True: 0, False: 2.78k]
  |  Branch (24737:35): [True: 0, False: 2.78k]
  ------------------
24738|      0|        _Pypegen_stack_overflow(p);
24739|      0|    }
24740|  2.78k|    if (p->error_indicator) {
  ------------------
  |  Branch (24740:9): [True: 0, False: 2.78k]
  ------------------
24741|      0|        p->level--;
24742|      0|        return NULL;
24743|      0|    }
24744|  2.78k|    asdl_pattern_seq* _res = NULL;
24745|  2.78k|    int _mark = p->mark;
24746|  2.78k|    { // [positional_patterns ','] keyword_patterns ',' positional_patterns
24747|  2.78k|        if (p->error_indicator) {
  ------------------
  |  Branch (24747:13): [True: 0, False: 2.78k]
  ------------------
24748|      0|            p->level--;
24749|      0|            return NULL;
24750|      0|        }
24751|  2.78k|        D(fprintf(stderr, "%*c> invalid_class_argument_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
24752|  2.78k|        Token * _literal;
24753|  2.78k|        void *_opt_var;
24754|  2.78k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  2.78k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 2.78k]
  |  |  ------------------
  ------------------
24755|  2.78k|        asdl_pattern_seq* a;
24756|  2.78k|        asdl_seq* keyword_patterns_var;
24757|  2.78k|        if (
24758|  2.78k|            (_opt_var = _tmp_147_rule(p), !p->error_indicator)  // [positional_patterns ',']
  ------------------
  |  Branch (24758:13): [True: 2.78k, False: 0]
  ------------------
24759|  2.78k|            &&
24760|  2.78k|            (keyword_patterns_var = keyword_patterns_rule(p))  // keyword_patterns
  ------------------
  |  Branch (24760:13): [True: 1.06k, False: 1.72k]
  ------------------
24761|  1.06k|            &&
24762|  1.06k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (24762:13): [True: 1.04k, False: 22]
  ------------------
24763|  1.04k|            &&
24764|  1.04k|            (a = positional_patterns_rule(p))  // positional_patterns
  ------------------
  |  Branch (24764:13): [True: 6, False: 1.03k]
  ------------------
24765|  2.78k|        )
24766|      6|        {
24767|      6|            D(fprintf(stderr, "%*c+ invalid_class_argument_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
24768|      6|            _res = a;
24769|      6|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24769:18): [True: 0, False: 6]
  |  Branch (24769:34): [True: 0, False: 6]
  |  Branch (24769:57): [True: 0, False: 0]
  ------------------
24770|      0|                p->error_indicator = 1;
24771|      0|                p->level--;
24772|      0|                return NULL;
24773|      0|            }
24774|      6|            goto done;
24775|      6|        }
24776|  2.77k|        p->mark = _mark;
24777|  2.77k|        D(fprintf(stderr, "%*c%s invalid_class_argument_pattern[%d-%d]: %s failed!\n", p->level, ' ',
24778|  2.77k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "[positional_patterns ','] keyword_patterns ',' positional_patterns"));
24779|  2.77k|    }
24780|  2.77k|    _res = NULL;
24781|  2.78k|  done:
24782|  2.78k|    p->level--;
24783|  2.78k|    return _res;
24784|  2.77k|}
parser.c:_tmp_147_rule:
36341|  2.78k|{
36342|  2.78k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.56k|#  define MAXSTACK 6000
  ------------------
  |  Branch (36342:9): [True: 0, False: 2.78k]
  |  Branch (36342:35): [True: 0, False: 2.78k]
  ------------------
36343|      0|        _Pypegen_stack_overflow(p);
36344|      0|    }
36345|  2.78k|    if (p->error_indicator) {
  ------------------
  |  Branch (36345:9): [True: 0, False: 2.78k]
  ------------------
36346|      0|        p->level--;
36347|      0|        return NULL;
36348|      0|    }
36349|  2.78k|    void * _res = NULL;
36350|  2.78k|    int _mark = p->mark;
36351|  2.78k|    { // positional_patterns ','
36352|  2.78k|        if (p->error_indicator) {
  ------------------
  |  Branch (36352:13): [True: 0, False: 2.78k]
  ------------------
36353|      0|            p->level--;
36354|      0|            return NULL;
36355|      0|        }
36356|  2.78k|        D(fprintf(stderr, "%*c> _tmp_147[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "positional_patterns ','"));
36357|  2.78k|        Token * _literal;
36358|  2.78k|        asdl_pattern_seq* positional_patterns_var;
36359|  2.78k|        if (
36360|  2.78k|            (positional_patterns_var = positional_patterns_rule(p))  // positional_patterns
  ------------------
  |  Branch (36360:13): [True: 1.54k, False: 1.23k]
  ------------------
36361|  1.54k|            &&
36362|  1.54k|            (_literal = _PyPegen_expect_token(p, 12))  // token=','
  ------------------
  |  Branch (36362:13): [True: 1.27k, False: 278]
  ------------------
36363|  2.78k|        )
36364|  1.27k|        {
36365|  1.27k|            D(fprintf(stderr, "%*c+ _tmp_147[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "positional_patterns ','"));
36366|  1.27k|            _res = _PyPegen_dummy_name(p, positional_patterns_var, _literal);
36367|  1.27k|            goto done;
36368|  1.27k|        }
36369|  1.51k|        p->mark = _mark;
36370|  1.51k|        D(fprintf(stderr, "%*c%s _tmp_147[%d-%d]: %s failed!\n", p->level, ' ',
36371|  1.51k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "positional_patterns ','"));
36372|  1.51k|    }
36373|  1.51k|    _res = NULL;
36374|  2.78k|  done:
36375|  2.78k|    p->level--;
36376|  2.78k|    return _res;
36377|  1.51k|}
parser.c:_loop0_39_rule:
29740|   145k|{
29741|   145k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   291k|#  define MAXSTACK 6000
  ------------------
  |  Branch (29741:9): [True: 0, False: 145k]
  |  Branch (29741:35): [True: 0, False: 145k]
  ------------------
29742|      0|        _Pypegen_stack_overflow(p);
29743|      0|    }
29744|   145k|    if (p->error_indicator) {
  ------------------
  |  Branch (29744:9): [True: 0, False: 145k]
  ------------------
29745|      0|        p->level--;
29746|      0|        return NULL;
29747|      0|    }
29748|   145k|    void *_res = NULL;
29749|   145k|    int _mark = p->mark;
29750|   145k|    void **_children = PyMem_Malloc(sizeof(void *));
29751|   145k|    if (!_children) {
  ------------------
  |  Branch (29751:9): [True: 0, False: 145k]
  ------------------
29752|      0|        p->error_indicator = 1;
29753|      0|        PyErr_NoMemory();
29754|      0|        p->level--;
29755|      0|        return NULL;
29756|      0|    }
29757|   145k|    Py_ssize_t _children_capacity = 1;
29758|   145k|    Py_ssize_t _n = 0;
29759|   145k|    { // '|' closed_pattern
29760|   145k|        if (p->error_indicator) {
  ------------------
  |  Branch (29760:13): [True: 0, False: 145k]
  ------------------
29761|      0|            p->level--;
29762|      0|            return NULL;
29763|      0|        }
29764|   145k|        D(fprintf(stderr, "%*c> _loop0_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern"));
29765|   145k|        Token * _literal;
29766|   145k|        pattern_ty elem;
29767|   145k|        while (
29768|   156k|            (_literal = _PyPegen_expect_token(p, 18))  // token='|'
  ------------------
  |  Branch (29768:13): [True: 20.3k, False: 136k]
  ------------------
29769|  20.3k|            &&
29770|  20.3k|            (elem = closed_pattern_rule(p))  // closed_pattern
  ------------------
  |  Branch (29770:13): [True: 10.5k, False: 9.83k]
  ------------------
29771|   145k|        )
29772|  10.5k|        {
29773|  10.5k|            _res = elem;
29774|  10.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (29774:18): [True: 0, False: 10.5k]
  |  Branch (29774:34): [True: 0, False: 10.5k]
  |  Branch (29774:57): [True: 0, False: 0]
  ------------------
29775|      0|                p->error_indicator = 1;
29776|      0|                PyMem_Free(_children);
29777|      0|                p->level--;
29778|      0|                return NULL;
29779|      0|            }
29780|  10.5k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (29780:17): [True: 949, False: 9.55k]
  ------------------
29781|    949|                _children_capacity *= 2;
29782|    949|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
29783|    949|                if (!_new_children) {
  ------------------
  |  Branch (29783:21): [True: 0, False: 949]
  ------------------
29784|      0|                    PyMem_Free(_children);
29785|      0|                    p->error_indicator = 1;
29786|      0|                    PyErr_NoMemory();
29787|      0|                    p->level--;
29788|      0|                    return NULL;
29789|      0|                }
29790|    949|                _children = _new_children;
29791|    949|            }
29792|  10.5k|            _children[_n++] = _res;
29793|  10.5k|            _mark = p->mark;
29794|  10.5k|        }
29795|   145k|        p->mark = _mark;
29796|   145k|        D(fprintf(stderr, "%*c%s _loop0_39[%d-%d]: %s failed!\n", p->level, ' ',
29797|   145k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|' closed_pattern"));
29798|   145k|    }
29799|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
29800|   145k|    if (!_seq) {
  ------------------
  |  Branch (29800:9): [True: 0, False: 145k]
  ------------------
29801|      0|        PyMem_Free(_children);
29802|      0|        p->error_indicator = 1;
29803|      0|        PyErr_NoMemory();
29804|      0|        p->level--;
29805|      0|        return NULL;
29806|      0|    }
29807|   156k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  10.5k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   156k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (29807:28): [True: 10.5k, False: 145k]
  ------------------
29808|   145k|    PyMem_Free(_children);
29809|   145k|    p->level--;
29810|   145k|    return _seq;
29811|   145k|}
parser.c:guard_rule:
 8018|  3.91k|{
 8019|  3.91k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  7.83k|#  define MAXSTACK 6000
  ------------------
  |  Branch (8019:9): [True: 0, False: 3.91k]
  |  Branch (8019:35): [True: 0, False: 3.91k]
  ------------------
 8020|      0|        _Pypegen_stack_overflow(p);
 8021|      0|    }
 8022|  3.91k|    if (p->error_indicator) {
  ------------------
  |  Branch (8022:9): [True: 0, False: 3.91k]
  ------------------
 8023|      0|        p->level--;
 8024|      0|        return NULL;
 8025|      0|    }
 8026|  3.91k|    expr_ty _res = NULL;
 8027|  3.91k|    int _mark = p->mark;
 8028|  3.91k|    { // 'if' named_expression
 8029|  3.91k|        if (p->error_indicator) {
  ------------------
  |  Branch (8029:13): [True: 0, False: 3.91k]
  ------------------
 8030|      0|            p->level--;
 8031|      0|            return NULL;
 8032|      0|        }
 8033|  3.91k|        D(fprintf(stderr, "%*c> guard[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression"));
 8034|  3.91k|        Token * _keyword;
 8035|  3.91k|        expr_ty guard;
 8036|  3.91k|        if (
 8037|  3.91k|            (_keyword = _PyPegen_expect_token(p, 700))  // token='if'
  ------------------
  |  Branch (8037:13): [True: 32, False: 3.88k]
  ------------------
 8038|     32|            &&
 8039|     32|            (guard = named_expression_rule(p))  // named_expression
  ------------------
  |  Branch (8039:13): [True: 23, False: 9]
  ------------------
 8040|  3.91k|        )
 8041|     23|        {
 8042|     23|            D(fprintf(stderr, "%*c+ guard[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression"));
 8043|     23|            _res = guard;
 8044|     23|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (8044:18): [True: 0, False: 23]
  |  Branch (8044:34): [True: 0, False: 23]
  |  Branch (8044:57): [True: 0, False: 0]
  ------------------
 8045|      0|                p->error_indicator = 1;
 8046|      0|                p->level--;
 8047|      0|                return NULL;
 8048|      0|            }
 8049|     23|            goto done;
 8050|     23|        }
 8051|  3.89k|        p->mark = _mark;
 8052|  3.89k|        D(fprintf(stderr, "%*c%s guard[%d-%d]: %s failed!\n", p->level, ' ',
 8053|  3.89k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression"));
 8054|  3.89k|    }
 8055|  3.89k|    _res = NULL;
 8056|  3.91k|  done:
 8057|  3.91k|    p->level--;
 8058|  3.91k|    return _res;
 8059|  3.89k|}
parser.c:invalid_match_stmt_rule:
24328|  26.3k|{
24329|  26.3k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  52.7k|#  define MAXSTACK 6000
  ------------------
  |  Branch (24329:9): [True: 0, False: 26.3k]
  |  Branch (24329:35): [True: 0, False: 26.3k]
  ------------------
24330|      0|        _Pypegen_stack_overflow(p);
24331|      0|    }
24332|  26.3k|    if (p->error_indicator) {
  ------------------
  |  Branch (24332:9): [True: 0, False: 26.3k]
  ------------------
24333|      0|        p->level--;
24334|      0|        return NULL;
24335|      0|    }
24336|  26.3k|    void * _res = NULL;
24337|  26.3k|    int _mark = p->mark;
24338|  26.3k|    { // "match" subject_expr NEWLINE
24339|  26.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (24339:13): [True: 0, False: 26.3k]
  ------------------
24340|      0|            p->level--;
24341|      0|            return NULL;
24342|      0|        }
24343|  26.3k|        D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr NEWLINE"));
24344|  26.3k|        expr_ty _keyword;
24345|  26.3k|        Token * newline_var;
24346|  26.3k|        expr_ty subject_expr_var;
24347|  26.3k|        if (
24348|  26.3k|            (_keyword = _PyPegen_expect_soft_keyword(p, "match"))  // soft_keyword='"match"'
  ------------------
  |  Branch (24348:13): [True: 846, False: 25.5k]
  ------------------
24349|    846|            &&
24350|    846|            (subject_expr_var = subject_expr_rule(p))  // subject_expr
  ------------------
  |  Branch (24350:13): [True: 571, False: 275]
  ------------------
24351|    571|            &&
24352|    571|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    571|#define NEWLINE         4
  ------------------
  |  Branch (24352:13): [True: 8, False: 563]
  ------------------
24353|  26.3k|        )
24354|      8|        {
24355|      8|            D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr NEWLINE"));
24356|      8|            _res = CHECK_VERSION ( void* , 10 , "Pattern matching is" , RAISE_SYNTAX_ERROR ( "expected ':'" ) );
  ------------------
  |  |  345|      8|#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node))
  ------------------
24357|      8|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24357:18): [True: 8, False: 0]
  |  Branch (24357:34): [True: 0, False: 0]
  |  Branch (24357:57): [True: 8, False: 0]
  ------------------
24358|      8|                p->error_indicator = 1;
24359|      8|                p->level--;
24360|      8|                return NULL;
24361|      8|            }
24362|      0|            goto done;
24363|      8|        }
24364|  26.3k|        p->mark = _mark;
24365|  26.3k|        D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24366|  26.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr NEWLINE"));
24367|  26.3k|    }
24368|      0|    { // "match" subject_expr ':' NEWLINE !INDENT
24369|  26.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (24369:13): [True: 0, False: 26.3k]
  ------------------
24370|      0|            p->level--;
24371|      0|            return NULL;
24372|      0|        }
24373|  26.3k|        D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
24374|  26.3k|        Token * _literal;
24375|  26.3k|        expr_ty a;
24376|  26.3k|        Token * newline_var;
24377|  26.3k|        expr_ty subject;
24378|  26.3k|        if (
24379|  26.3k|            (a = _PyPegen_expect_soft_keyword(p, "match"))  // soft_keyword='"match"'
  ------------------
  |  Branch (24379:13): [True: 838, False: 25.5k]
  ------------------
24380|    838|            &&
24381|    838|            (subject = subject_expr_rule(p))  // subject_expr
  ------------------
  |  Branch (24381:13): [True: 563, False: 275]
  ------------------
24382|    563|            &&
24383|    563|            (_literal = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24383:13): [True: 186, False: 377]
  ------------------
24384|    186|            &&
24385|    186|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    186|#define NEWLINE         4
  ------------------
  |  Branch (24385:13): [True: 185, False: 1]
  ------------------
24386|    185|            &&
24387|    185|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, INDENT)  // token=INDENT
  ------------------
  |  |   21|    185|#define INDENT          5
  ------------------
  |  Branch (24387:13): [True: 3, False: 182]
  ------------------
24388|  26.3k|        )
24389|      3|        {
24390|      3|            D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
24391|      3|            _res = RAISE_INDENTATION_ERROR ( "expected an indented block after 'match' statement on line %d" , a -> lineno );
  ------------------
  |  |  234|      3|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
24392|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24392:18): [True: 3, False: 0]
  |  Branch (24392:34): [True: 0, False: 0]
  |  Branch (24392:57): [True: 3, False: 0]
  ------------------
24393|      3|                p->error_indicator = 1;
24394|      3|                p->level--;
24395|      3|                return NULL;
24396|      3|            }
24397|      0|            goto done;
24398|      3|        }
24399|  26.3k|        p->mark = _mark;
24400|  26.3k|        D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24401|  26.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE !INDENT"));
24402|  26.3k|    }
24403|      0|    { // "case" patterns guard? ':' block
24404|  26.3k|        if (p->error_indicator) {
  ------------------
  |  Branch (24404:13): [True: 0, False: 26.3k]
  ------------------
24405|      0|            p->level--;
24406|      0|            return NULL;
24407|      0|        }
24408|  26.3k|        D(fprintf(stderr, "%*c> invalid_match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
24409|  26.3k|        void *_opt_var;
24410|  26.3k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  26.3k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 26.3k]
  |  |  ------------------
  ------------------
24411|  26.3k|        expr_ty a;
24412|  26.3k|        Token * b;
24413|  26.3k|        asdl_stmt_seq* block_var;
24414|  26.3k|        pattern_ty patterns_var;
24415|  26.3k|        if (
24416|  26.3k|            (a = _PyPegen_expect_soft_keyword(p, "case"))  // soft_keyword='"case"'
  ------------------
  |  Branch (24416:13): [True: 431, False: 25.9k]
  ------------------
24417|    431|            &&
24418|    431|            (patterns_var = patterns_rule(p))  // patterns
  ------------------
  |  Branch (24418:13): [True: 115, False: 316]
  ------------------
24419|    115|            &&
24420|    115|            (_opt_var = guard_rule(p), !p->error_indicator)  // guard?
  ------------------
  |  Branch (24420:13): [True: 113, False: 2]
  ------------------
24421|    113|            &&
24422|    113|            (b = _PyPegen_expect_token(p, 11))  // token=':'
  ------------------
  |  Branch (24422:13): [True: 24, False: 89]
  ------------------
24423|     24|            &&
24424|     24|            (block_var = block_rule(p))  // block
  ------------------
  |  Branch (24424:13): [True: 3, False: 21]
  ------------------
24425|  26.3k|        )
24426|      3|        {
24427|      3|            D(fprintf(stderr, "%*c+ invalid_match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block"));
24428|      3|            _res = RAISE_SYNTAX_ERROR_KNOWN_RANGE ( a , b , "case statement must be inside match statement" );
  ------------------
  |  |  237|      3|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
24429|      3|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (24429:18): [True: 3, False: 0]
  |  Branch (24429:34): [True: 0, False: 0]
  |  Branch (24429:57): [True: 3, False: 0]
  ------------------
24430|      3|                p->error_indicator = 1;
24431|      3|                p->level--;
24432|      3|                return NULL;
24433|      3|            }
24434|      0|            goto done;
24435|      3|        }
24436|  26.3k|        p->mark = _mark;
24437|  26.3k|        D(fprintf(stderr, "%*c%s invalid_match_stmt[%d-%d]: %s failed!\n", p->level, ' ',
24438|  26.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' block"));
24439|  26.3k|    }
24440|  26.3k|    _res = NULL;
24441|  26.3k|  done:
24442|  26.3k|    p->level--;
24443|  26.3k|    return _res;
24444|  26.3k|}
parser.c:simple_stmts_rule:
 1464|   215k|{
 1465|   215k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   430k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1465:9): [True: 0, False: 215k]
  |  Branch (1465:35): [True: 0, False: 215k]
  ------------------
 1466|      0|        _Pypegen_stack_overflow(p);
 1467|      0|    }
 1468|   215k|    if (p->error_indicator) {
  ------------------
  |  Branch (1468:9): [True: 0, False: 215k]
  ------------------
 1469|      0|        p->level--;
 1470|      0|        return NULL;
 1471|      0|    }
 1472|   215k|    asdl_stmt_seq* _res = NULL;
 1473|   215k|    int _mark = p->mark;
 1474|   215k|    { // simple_stmt !';' NEWLINE
 1475|   215k|        if (p->error_indicator) {
  ------------------
  |  Branch (1475:13): [True: 0, False: 215k]
  ------------------
 1476|      0|            p->level--;
 1477|      0|            return NULL;
 1478|      0|        }
 1479|   215k|        D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
 1480|   215k|        stmt_ty a;
 1481|   215k|        Token * newline_var;
 1482|   215k|        if (
 1483|   215k|            (a = simple_stmt_rule(p))  // simple_stmt
  ------------------
  |  Branch (1483:13): [True: 177k, False: 37.7k]
  ------------------
 1484|   177k|            &&
 1485|   177k|            _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 13)  // token=';'
  ------------------
  |  Branch (1485:13): [True: 150k, False: 27.1k]
  ------------------
 1486|   150k|            &&
 1487|   150k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|   150k|#define NEWLINE         4
  ------------------
  |  Branch (1487:13): [True: 144k, False: 6.30k]
  ------------------
 1488|   215k|        )
 1489|   144k|        {
 1490|   144k|            D(fprintf(stderr, "%*c+ simple_stmts[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt !';' NEWLINE"));
 1491|   144k|            _res = ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , a );
 1492|   144k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1492:18): [True: 0, False: 144k]
  |  Branch (1492:34): [True: 0, False: 144k]
  |  Branch (1492:57): [True: 0, False: 0]
  ------------------
 1493|      0|                p->error_indicator = 1;
 1494|      0|                p->level--;
 1495|      0|                return NULL;
 1496|      0|            }
 1497|   144k|            goto done;
 1498|   144k|        }
 1499|  71.1k|        p->mark = _mark;
 1500|  71.1k|        D(fprintf(stderr, "%*c%s simple_stmts[%d-%d]: %s failed!\n", p->level, ' ',
 1501|  71.1k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt !';' NEWLINE"));
 1502|  71.1k|    }
 1503|      0|    { // ';'.simple_stmt+ ';'? NEWLINE
 1504|  71.1k|        if (p->error_indicator) {
  ------------------
  |  Branch (1504:13): [True: 3.23k, False: 67.9k]
  ------------------
 1505|  3.23k|            p->level--;
 1506|  3.23k|            return NULL;
 1507|  3.23k|        }
 1508|  67.9k|        D(fprintf(stderr, "%*c> simple_stmts[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
 1509|  67.9k|        void *_opt_var;
 1510|  67.9k|        UNUSED(_opt_var); // Silence compiler warnings
  ------------------
  |  |  305|  67.9k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 67.9k]
  |  |  ------------------
  ------------------
 1511|  67.9k|        asdl_stmt_seq* a;
 1512|  67.9k|        Token * newline_var;
 1513|  67.9k|        if (
 1514|  67.9k|            (a = (asdl_stmt_seq*)_gather_4_rule(p))  // ';'.simple_stmt+
  ------------------
  |  Branch (1514:13): [True: 33.4k, False: 34.4k]
  ------------------
 1515|  33.4k|            &&
 1516|  33.4k|            (_opt_var = _PyPegen_expect_token(p, 13), !p->error_indicator)  // ';'?
  ------------------
  |  Branch (1516:13): [True: 33.3k, False: 96]
  ------------------
 1517|  33.3k|            &&
 1518|  33.3k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  33.3k|#define NEWLINE         4
  ------------------
  |  Branch (1518:13): [True: 26.5k, False: 6.76k]
  ------------------
 1519|  67.9k|        )
 1520|  26.5k|        {
 1521|  26.5k|            D(fprintf(stderr, "%*c+ simple_stmts[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
 1522|  26.5k|            _res = a;
 1523|  26.5k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1523:18): [True: 0, False: 26.5k]
  |  Branch (1523:34): [True: 0, False: 26.5k]
  |  Branch (1523:57): [True: 0, False: 0]
  ------------------
 1524|      0|                p->error_indicator = 1;
 1525|      0|                p->level--;
 1526|      0|                return NULL;
 1527|      0|            }
 1528|  26.5k|            goto done;
 1529|  26.5k|        }
 1530|  41.3k|        p->mark = _mark;
 1531|  41.3k|        D(fprintf(stderr, "%*c%s simple_stmts[%d-%d]: %s failed!\n", p->level, ' ',
 1532|  41.3k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'.simple_stmt+ ';'? NEWLINE"));
 1533|  41.3k|    }
 1534|  41.3k|    _res = NULL;
 1535|   212k|  done:
 1536|   212k|    p->level--;
 1537|   212k|    return _res;
 1538|  41.3k|}
parser.c:_gather_4_rule:
27558|  67.9k|{
27559|  67.9k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|   135k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27559:9): [True: 0, False: 67.9k]
  |  Branch (27559:35): [True: 0, False: 67.9k]
  ------------------
27560|      0|        _Pypegen_stack_overflow(p);
27561|      0|    }
27562|  67.9k|    if (p->error_indicator) {
  ------------------
  |  Branch (27562:9): [True: 0, False: 67.9k]
  ------------------
27563|      0|        p->level--;
27564|      0|        return NULL;
27565|      0|    }
27566|  67.9k|    asdl_seq * _res = NULL;
27567|  67.9k|    int _mark = p->mark;
27568|  67.9k|    { // simple_stmt _loop0_3
27569|  67.9k|        if (p->error_indicator) {
  ------------------
  |  Branch (27569:13): [True: 0, False: 67.9k]
  ------------------
27570|      0|            p->level--;
27571|      0|            return NULL;
27572|      0|        }
27573|  67.9k|        D(fprintf(stderr, "%*c> _gather_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_3"));
27574|  67.9k|        stmt_ty elem;
27575|  67.9k|        asdl_seq * seq;
27576|  67.9k|        if (
27577|  67.9k|            (elem = simple_stmt_rule(p))  // simple_stmt
  ------------------
  |  Branch (27577:13): [True: 33.4k, False: 34.4k]
  ------------------
27578|  33.4k|            &&
27579|  33.4k|            (seq = _loop0_3_rule(p))  // _loop0_3
  ------------------
  |  Branch (27579:13): [True: 33.4k, False: 0]
  ------------------
27580|  67.9k|        )
27581|  33.4k|        {
27582|  33.4k|            D(fprintf(stderr, "%*c+ _gather_4[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_3"));
27583|  33.4k|            _res = _PyPegen_seq_insert_in_front(p, elem, seq);
27584|  33.4k|            goto done;
27585|  33.4k|        }
27586|  34.4k|        p->mark = _mark;
27587|  34.4k|        D(fprintf(stderr, "%*c%s _gather_4[%d-%d]: %s failed!\n", p->level, ' ',
27588|  34.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_3"));
27589|  34.4k|    }
27590|  34.4k|    _res = NULL;
27591|  67.9k|  done:
27592|  67.9k|    p->level--;
27593|  67.9k|    return _res;
27594|  34.4k|}
parser.c:_loop0_3_rule:
27482|  33.4k|{
27483|  33.4k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  66.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27483:9): [True: 0, False: 33.4k]
  |  Branch (27483:35): [True: 0, False: 33.4k]
  ------------------
27484|      0|        _Pypegen_stack_overflow(p);
27485|      0|    }
27486|  33.4k|    if (p->error_indicator) {
  ------------------
  |  Branch (27486:9): [True: 0, False: 33.4k]
  ------------------
27487|      0|        p->level--;
27488|      0|        return NULL;
27489|      0|    }
27490|  33.4k|    void *_res = NULL;
27491|  33.4k|    int _mark = p->mark;
27492|  33.4k|    void **_children = PyMem_Malloc(sizeof(void *));
27493|  33.4k|    if (!_children) {
  ------------------
  |  Branch (27493:9): [True: 0, False: 33.4k]
  ------------------
27494|      0|        p->error_indicator = 1;
27495|      0|        PyErr_NoMemory();
27496|      0|        p->level--;
27497|      0|        return NULL;
27498|      0|    }
27499|  33.4k|    Py_ssize_t _children_capacity = 1;
27500|  33.4k|    Py_ssize_t _n = 0;
27501|  33.4k|    { // ';' simple_stmt
27502|  33.4k|        if (p->error_indicator) {
  ------------------
  |  Branch (27502:13): [True: 0, False: 33.4k]
  ------------------
27503|      0|            p->level--;
27504|      0|            return NULL;
27505|      0|        }
27506|  33.4k|        D(fprintf(stderr, "%*c> _loop0_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt"));
27507|  33.4k|        Token * _literal;
27508|  33.4k|        stmt_ty elem;
27509|  33.4k|        while (
27510|   131k|            (_literal = _PyPegen_expect_token(p, 13))  // token=';'
  ------------------
  |  Branch (27510:13): [True: 104k, False: 27.2k]
  ------------------
27511|   104k|            &&
27512|   104k|            (elem = simple_stmt_rule(p))  // simple_stmt
  ------------------
  |  Branch (27512:13): [True: 97.8k, False: 6.17k]
  ------------------
27513|  33.4k|        )
27514|  97.8k|        {
27515|  97.8k|            _res = elem;
27516|  97.8k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (27516:18): [True: 0, False: 97.8k]
  |  Branch (27516:34): [True: 0, False: 97.8k]
  |  Branch (27516:57): [True: 0, False: 0]
  ------------------
27517|      0|                p->error_indicator = 1;
27518|      0|                PyMem_Free(_children);
27519|      0|                p->level--;
27520|      0|                return NULL;
27521|      0|            }
27522|  97.8k|            if (_n == _children_capacity) {
  ------------------
  |  Branch (27522:17): [True: 30.3k, False: 67.4k]
  ------------------
27523|  30.3k|                _children_capacity *= 2;
27524|  30.3k|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27525|  30.3k|                if (!_new_children) {
  ------------------
  |  Branch (27525:21): [True: 0, False: 30.3k]
  ------------------
27526|      0|                    PyMem_Free(_children);
27527|      0|                    p->error_indicator = 1;
27528|      0|                    PyErr_NoMemory();
27529|      0|                    p->level--;
27530|      0|                    return NULL;
27531|      0|                }
27532|  30.3k|                _children = _new_children;
27533|  30.3k|            }
27534|  97.8k|            _children[_n++] = _res;
27535|  97.8k|            _mark = p->mark;
27536|  97.8k|        }
27537|  33.4k|        p->mark = _mark;
27538|  33.4k|        D(fprintf(stderr, "%*c%s _loop0_3[%d-%d]: %s failed!\n", p->level, ' ',
27539|  33.4k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' simple_stmt"));
27540|  33.4k|    }
27541|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
27542|  33.4k|    if (!_seq) {
  ------------------
  |  Branch (27542:9): [True: 0, False: 33.4k]
  ------------------
27543|      0|        PyMem_Free(_children);
27544|      0|        p->error_indicator = 1;
27545|      0|        PyErr_NoMemory();
27546|      0|        p->level--;
27547|      0|        return NULL;
27548|      0|    }
27549|   131k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|  97.8k|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|   131k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (27549:28): [True: 97.8k, False: 33.4k]
  ------------------
27550|  33.4k|    PyMem_Free(_children);
27551|  33.4k|    p->level--;
27552|  33.4k|    return _seq;
27553|  33.4k|}
parser.c:interactive_rule:
 1027|  8.01k|{
 1028|  8.01k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  16.0k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1028:9): [True: 0, False: 8.01k]
  |  Branch (1028:35): [True: 0, False: 8.01k]
  ------------------
 1029|      0|        _Pypegen_stack_overflow(p);
 1030|      0|    }
 1031|  8.01k|    if (p->error_indicator) {
  ------------------
  |  Branch (1031:9): [True: 606, False: 7.40k]
  ------------------
 1032|    606|        p->level--;
 1033|    606|        return NULL;
 1034|    606|    }
 1035|  7.40k|    mod_ty _res = NULL;
 1036|  7.40k|    int _mark = p->mark;
 1037|  7.40k|    { // statement_newline
 1038|  7.40k|        if (p->error_indicator) {
  ------------------
  |  Branch (1038:13): [True: 0, False: 7.40k]
  ------------------
 1039|      0|            p->level--;
 1040|      0|            return NULL;
 1041|      0|        }
 1042|  7.40k|        D(fprintf(stderr, "%*c> interactive[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement_newline"));
 1043|  7.40k|        asdl_stmt_seq* a;
 1044|  7.40k|        if (
 1045|  7.40k|            (a = statement_newline_rule(p))  // statement_newline
  ------------------
  |  Branch (1045:13): [True: 2.25k, False: 5.15k]
  ------------------
 1046|  7.40k|        )
 1047|  2.25k|        {
 1048|  2.25k|            D(fprintf(stderr, "%*c+ interactive[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement_newline"));
 1049|  2.25k|            _res = _PyAST_Interactive ( a , p -> arena );
 1050|  2.25k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1050:18): [True: 0, False: 2.25k]
  |  Branch (1050:34): [True: 0, False: 2.25k]
  |  Branch (1050:57): [True: 0, False: 0]
  ------------------
 1051|      0|                p->error_indicator = 1;
 1052|      0|                p->level--;
 1053|      0|                return NULL;
 1054|      0|            }
 1055|  2.25k|            goto done;
 1056|  2.25k|        }
 1057|  5.15k|        p->mark = _mark;
 1058|  5.15k|        D(fprintf(stderr, "%*c%s interactive[%d-%d]: %s failed!\n", p->level, ' ',
 1059|  5.15k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement_newline"));
 1060|  5.15k|    }
 1061|  5.15k|    _res = NULL;
 1062|  7.40k|  done:
 1063|  7.40k|    p->level--;
 1064|  7.40k|    return _res;
 1065|  5.15k|}
parser.c:statement_newline_rule:
 1333|  7.40k|{
 1334|  7.40k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  14.8k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1334:9): [True: 0, False: 7.40k]
  |  Branch (1334:35): [True: 0, False: 7.40k]
  ------------------
 1335|      0|        _Pypegen_stack_overflow(p);
 1336|      0|    }
 1337|  7.40k|    if (p->error_indicator) {
  ------------------
  |  Branch (1337:9): [True: 0, False: 7.40k]
  ------------------
 1338|      0|        p->level--;
 1339|      0|        return NULL;
 1340|      0|    }
 1341|  7.40k|    asdl_stmt_seq* _res = NULL;
 1342|  7.40k|    int _mark = p->mark;
 1343|  7.40k|    if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (1343:9): [True: 5.32k, False: 2.08k]
  |  Branch (1343:31): [True: 219, False: 5.10k]
  ------------------
 1344|    219|        p->error_indicator = 1;
 1345|    219|        p->level--;
 1346|    219|        return NULL;
 1347|    219|    }
 1348|  7.18k|    int _start_lineno = p->tokens[_mark]->lineno;
 1349|  7.18k|    UNUSED(_start_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.18k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.18k]
  |  |  ------------------
  ------------------
 1350|  7.18k|    int _start_col_offset = p->tokens[_mark]->col_offset;
 1351|  7.18k|    UNUSED(_start_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|  7.18k|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 7.18k]
  |  |  ------------------
  ------------------
 1352|  7.18k|    { // single_compound_stmt NEWLINE
 1353|  7.18k|        if (p->error_indicator) {
  ------------------
  |  Branch (1353:13): [True: 0, False: 7.18k]
  ------------------
 1354|      0|            p->level--;
 1355|      0|            return NULL;
 1356|      0|        }
 1357|  7.18k|        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_compound_stmt NEWLINE"));
 1358|  7.18k|        asdl_stmt_seq* a;
 1359|  7.18k|        Token * newline_var;
 1360|  7.18k|        if (
 1361|  7.18k|            (a = single_compound_stmt_rule(p))  // single_compound_stmt
  ------------------
  |  Branch (1361:13): [True: 112, False: 7.07k]
  ------------------
 1362|    112|            &&
 1363|    112|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|    112|#define NEWLINE         4
  ------------------
  |  Branch (1363:13): [True: 92, False: 20]
  ------------------
 1364|  7.18k|        )
 1365|     92|        {
 1366|     92|            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_compound_stmt NEWLINE"));
 1367|     92|            _res = a;
 1368|     92|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1368:18): [True: 0, False: 92]
  |  Branch (1368:34): [True: 0, False: 92]
  |  Branch (1368:57): [True: 0, False: 0]
  ------------------
 1369|      0|                p->error_indicator = 1;
 1370|      0|                p->level--;
 1371|      0|                return NULL;
 1372|      0|            }
 1373|     92|            goto done;
 1374|     92|        }
 1375|  7.09k|        p->mark = _mark;
 1376|  7.09k|        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
 1377|  7.09k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_compound_stmt NEWLINE"));
 1378|  7.09k|    }
 1379|      0|    { // simple_stmts
 1380|  7.09k|        if (p->error_indicator) {
  ------------------
  |  Branch (1380:13): [True: 172, False: 6.92k]
  ------------------
 1381|    172|            p->level--;
 1382|    172|            return NULL;
 1383|    172|        }
 1384|  6.92k|        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
 1385|  6.92k|        asdl_stmt_seq* simple_stmts_var;
 1386|  6.92k|        if (
 1387|  6.92k|            (simple_stmts_var = simple_stmts_rule(p))  // simple_stmts
  ------------------
  |  Branch (1387:13): [True: 2.16k, False: 4.76k]
  ------------------
 1388|  6.92k|        )
 1389|  2.16k|        {
 1390|  2.16k|            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts"));
 1391|  2.16k|            _res = simple_stmts_var;
 1392|  2.16k|            goto done;
 1393|  2.16k|        }
 1394|  4.76k|        p->mark = _mark;
 1395|  4.76k|        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
 1396|  4.76k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts"));
 1397|  4.76k|    }
 1398|      0|    { // NEWLINE
 1399|  4.76k|        if (p->error_indicator) {
  ------------------
  |  Branch (1399:13): [True: 1.46k, False: 3.29k]
  ------------------
 1400|  1.46k|            p->level--;
 1401|  1.46k|            return NULL;
 1402|  1.46k|        }
 1403|  3.29k|        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
 1404|  3.29k|        Token * newline_var;
 1405|  3.29k|        if (
 1406|  3.29k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  3.29k|#define NEWLINE         4
  ------------------
  |  Branch (1406:13): [True: 0, False: 3.29k]
  ------------------
 1407|  3.29k|        )
 1408|      0|        {
 1409|      0|            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
 1410|      0|            Token *_token = _PyPegen_get_last_nonnwhitespace_token(p);
 1411|      0|            if (_token == NULL) {
  ------------------
  |  Branch (1411:17): [True: 0, False: 0]
  ------------------
 1412|      0|                p->level--;
 1413|      0|                return NULL;
 1414|      0|            }
 1415|      0|            int _end_lineno = _token->end_lineno;
 1416|      0|            UNUSED(_end_lineno); // Only used by EXTRA macro
  ------------------
  |  |  305|      0|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1417|      0|            int _end_col_offset = _token->end_col_offset;
 1418|      0|            UNUSED(_end_col_offset); // Only used by EXTRA macro
  ------------------
  |  |  305|      0|#define UNUSED(expr) do { (void)(expr); } while (0)
  |  |  ------------------
  |  |  |  Branch (305:50): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1419|      0|            _res = ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , CHECK ( stmt_ty , _PyAST_Pass ( EXTRA ) ) );
  ------------------
  |  |  271|      0|#define CHECK(type, result) ((type) CHECK_CALL(p, result))
  ------------------
 1420|      0|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1420:18): [True: 0, False: 0]
  |  Branch (1420:34): [True: 0, False: 0]
  |  Branch (1420:57): [True: 0, False: 0]
  ------------------
 1421|      0|                p->error_indicator = 1;
 1422|      0|                p->level--;
 1423|      0|                return NULL;
 1424|      0|            }
 1425|      0|            goto done;
 1426|      0|        }
 1427|  3.29k|        p->mark = _mark;
 1428|  3.29k|        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
 1429|  3.29k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
 1430|  3.29k|    }
 1431|      0|    { // $
 1432|  3.29k|        if (p->error_indicator) {
  ------------------
  |  Branch (1432:13): [True: 0, False: 3.29k]
  ------------------
 1433|      0|            p->level--;
 1434|      0|            return NULL;
 1435|      0|        }
 1436|  3.29k|        D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "$"));
 1437|  3.29k|        Token * endmarker_var;
 1438|  3.29k|        if (
 1439|  3.29k|            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
  ------------------
  |  |   16|  3.29k|#define ENDMARKER       0
  ------------------
  |  Branch (1439:13): [True: 25, False: 3.27k]
  ------------------
 1440|  3.29k|        )
 1441|     25|        {
 1442|     25|            D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "$"));
 1443|     25|            _res = _PyPegen_interactive_exit ( p );
 1444|     25|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1444:18): [True: 25, False: 0]
  |  Branch (1444:34): [True: 0, False: 0]
  |  Branch (1444:57): [True: 0, False: 25]
  ------------------
 1445|      0|                p->error_indicator = 1;
 1446|      0|                p->level--;
 1447|      0|                return NULL;
 1448|      0|            }
 1449|     25|            goto done;
 1450|     25|        }
 1451|  3.27k|        p->mark = _mark;
 1452|  3.27k|        D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ',
 1453|  3.27k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "$"));
 1454|  3.27k|    }
 1455|  3.27k|    _res = NULL;
 1456|  5.55k|  done:
 1457|  5.55k|    p->level--;
 1458|  5.55k|    return _res;
 1459|  3.27k|}
parser.c:single_compound_stmt_rule:
 1290|  7.18k|{
 1291|  7.18k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  14.3k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1291:9): [True: 0, False: 7.18k]
  |  Branch (1291:35): [True: 0, False: 7.18k]
  ------------------
 1292|      0|        _Pypegen_stack_overflow(p);
 1293|      0|    }
 1294|  7.18k|    if (p->error_indicator) {
  ------------------
  |  Branch (1294:9): [True: 0, False: 7.18k]
  ------------------
 1295|      0|        p->level--;
 1296|      0|        return NULL;
 1297|      0|    }
 1298|  7.18k|    asdl_stmt_seq* _res = NULL;
 1299|  7.18k|    int _mark = p->mark;
 1300|  7.18k|    { // compound_stmt
 1301|  7.18k|        if (p->error_indicator) {
  ------------------
  |  Branch (1301:13): [True: 0, False: 7.18k]
  ------------------
 1302|      0|            p->level--;
 1303|      0|            return NULL;
 1304|      0|        }
 1305|  7.18k|        D(fprintf(stderr, "%*c> single_compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
 1306|  7.18k|        stmt_ty a;
 1307|  7.18k|        if (
 1308|  7.18k|            (a = compound_stmt_rule(p))  // compound_stmt
  ------------------
  |  Branch (1308:13): [True: 112, False: 7.07k]
  ------------------
 1309|  7.18k|        )
 1310|    112|        {
 1311|    112|            D(fprintf(stderr, "%*c+ single_compound_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt"));
 1312|    112|            _res = _PyPegen_register_stmts ( p , ( asdl_stmt_seq* ) _PyPegen_singleton_seq ( p , a ) );
 1313|    112|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1313:18): [True: 0, False: 112]
  |  Branch (1313:34): [True: 0, False: 112]
  |  Branch (1313:57): [True: 0, False: 0]
  ------------------
 1314|      0|                p->error_indicator = 1;
 1315|      0|                p->level--;
 1316|      0|                return NULL;
 1317|      0|            }
 1318|    112|            goto done;
 1319|    112|        }
 1320|  7.07k|        p->mark = _mark;
 1321|  7.07k|        D(fprintf(stderr, "%*c%s single_compound_stmt[%d-%d]: %s failed!\n", p->level, ' ',
 1322|  7.07k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt"));
 1323|  7.07k|    }
 1324|  7.07k|    _res = NULL;
 1325|  7.18k|  done:
 1326|  7.18k|    p->level--;
 1327|  7.18k|    return _res;
 1328|  7.07k|}
parser.c:eval_rule:
 1070|  4.58k|{
 1071|  4.58k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  9.17k|#  define MAXSTACK 6000
  ------------------
  |  Branch (1071:9): [True: 0, False: 4.58k]
  |  Branch (1071:35): [True: 0, False: 4.58k]
  ------------------
 1072|      0|        _Pypegen_stack_overflow(p);
 1073|      0|    }
 1074|  4.58k|    if (p->error_indicator) {
  ------------------
  |  Branch (1074:9): [True: 360, False: 4.22k]
  ------------------
 1075|    360|        p->level--;
 1076|    360|        return NULL;
 1077|    360|    }
 1078|  4.22k|    mod_ty _res = NULL;
 1079|  4.22k|    int _mark = p->mark;
 1080|  4.22k|    { // expressions NEWLINE* $
 1081|  4.22k|        if (p->error_indicator) {
  ------------------
  |  Branch (1081:13): [True: 0, False: 4.22k]
  ------------------
 1082|      0|            p->level--;
 1083|      0|            return NULL;
 1084|      0|        }
 1085|  4.22k|        D(fprintf(stderr, "%*c> eval[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
 1086|  4.22k|        asdl_seq * _loop0_1_var;
 1087|  4.22k|        expr_ty a;
 1088|  4.22k|        Token * endmarker_var;
 1089|  4.22k|        if (
 1090|  4.22k|            (a = expressions_rule(p))  // expressions
  ------------------
  |  Branch (1090:13): [True: 2.76k, False: 1.46k]
  ------------------
 1091|  2.76k|            &&
 1092|  2.76k|            (_loop0_1_var = _loop0_1_rule(p))  // NEWLINE*
  ------------------
  |  Branch (1092:13): [True: 2.76k, False: 0]
  ------------------
 1093|  2.76k|            &&
 1094|  2.76k|            (endmarker_var = _PyPegen_expect_token(p, ENDMARKER))  // token='ENDMARKER'
  ------------------
  |  |   16|  2.76k|#define ENDMARKER       0
  ------------------
  |  Branch (1094:13): [True: 1.72k, False: 1.04k]
  ------------------
 1095|  4.22k|        )
 1096|  1.72k|        {
 1097|  1.72k|            D(fprintf(stderr, "%*c+ eval[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expressions NEWLINE* $"));
 1098|  1.72k|            _res = _PyAST_Expression ( a , p -> arena );
 1099|  1.72k|            if ((_res == NULL || p->error_indicator) && PyErr_Occurred()) {
  ------------------
  |  Branch (1099:18): [True: 0, False: 1.72k]
  |  Branch (1099:34): [True: 0, False: 1.72k]
  |  Branch (1099:57): [True: 0, False: 0]
  ------------------
 1100|      0|                p->error_indicator = 1;
 1101|      0|                p->level--;
 1102|      0|                return NULL;
 1103|      0|            }
 1104|  1.72k|            goto done;
 1105|  1.72k|        }
 1106|  2.50k|        p->mark = _mark;
 1107|  2.50k|        D(fprintf(stderr, "%*c%s eval[%d-%d]: %s failed!\n", p->level, ' ',
 1108|  2.50k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expressions NEWLINE* $"));
 1109|  2.50k|    }
 1110|  2.50k|    _res = NULL;
 1111|  4.22k|  done:
 1112|  4.22k|    p->level--;
 1113|  4.22k|    return _res;
 1114|  2.50k|}
parser.c:_loop0_1_rule:
27343|  2.76k|{
27344|  2.76k|    if (p->level++ == MAXSTACK || _PyPegen_stack_exhausted(p)) {
  ------------------
  |  |   18|  5.52k|#  define MAXSTACK 6000
  ------------------
  |  Branch (27344:9): [True: 0, False: 2.76k]
  |  Branch (27344:35): [True: 0, False: 2.76k]
  ------------------
27345|      0|        _Pypegen_stack_overflow(p);
27346|      0|    }
27347|  2.76k|    if (p->error_indicator) {
  ------------------
  |  Branch (27347:9): [True: 0, False: 2.76k]
  ------------------
27348|      0|        p->level--;
27349|      0|        return NULL;
27350|      0|    }
27351|  2.76k|    void *_res = NULL;
27352|  2.76k|    int _mark = p->mark;
27353|  2.76k|    void **_children = PyMem_Malloc(sizeof(void *));
27354|  2.76k|    if (!_children) {
  ------------------
  |  Branch (27354:9): [True: 0, False: 2.76k]
  ------------------
27355|      0|        p->error_indicator = 1;
27356|      0|        PyErr_NoMemory();
27357|      0|        p->level--;
27358|      0|        return NULL;
27359|      0|    }
27360|  2.76k|    Py_ssize_t _children_capacity = 1;
27361|  2.76k|    Py_ssize_t _n = 0;
27362|  2.76k|    { // NEWLINE
27363|  2.76k|        if (p->error_indicator) {
  ------------------
  |  Branch (27363:13): [True: 0, False: 2.76k]
  ------------------
27364|      0|            p->level--;
27365|      0|            return NULL;
27366|      0|        }
27367|  2.76k|        D(fprintf(stderr, "%*c> _loop0_1[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE"));
27368|  2.76k|        Token * newline_var;
27369|  2.76k|        while (
27370|  2.79k|            (newline_var = _PyPegen_expect_token(p, NEWLINE))  // token='NEWLINE'
  ------------------
  |  |   20|  2.79k|#define NEWLINE         4
  ------------------
  |  Branch (27370:13): [True: 30, False: 2.76k]
  ------------------
27371|  2.76k|        )
27372|     30|        {
27373|     30|            _res = newline_var;
27374|     30|            if (_n == _children_capacity) {
  ------------------
  |  Branch (27374:17): [True: 0, False: 30]
  ------------------
27375|      0|                _children_capacity *= 2;
27376|      0|                void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *));
27377|      0|                if (!_new_children) {
  ------------------
  |  Branch (27377:21): [True: 0, False: 0]
  ------------------
27378|      0|                    PyMem_Free(_children);
27379|      0|                    p->error_indicator = 1;
27380|      0|                    PyErr_NoMemory();
27381|      0|                    p->level--;
27382|      0|                    return NULL;
27383|      0|                }
27384|      0|                _children = _new_children;
27385|      0|            }
27386|     30|            _children[_n++] = _res;
27387|     30|            _mark = p->mark;
27388|     30|        }
27389|  2.76k|        p->mark = _mark;
27390|  2.76k|        D(fprintf(stderr, "%*c%s _loop0_1[%d-%d]: %s failed!\n", p->level, ' ',
27391|  2.76k|                  p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE"));
27392|  2.76k|    }
27393|      0|    asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena);
27394|  2.76k|    if (!_seq) {
  ------------------
  |  Branch (27394:9): [True: 0, False: 2.76k]
  ------------------
27395|      0|        PyMem_Free(_children);
27396|      0|        p->error_indicator = 1;
27397|      0|        PyErr_NoMemory();
27398|      0|        p->level--;
27399|      0|        return NULL;
27400|      0|    }
27401|  2.79k|    for (Py_ssize_t i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]);
  ------------------
  |  |  106|     30|#  define asdl_seq_SET_UNTYPED(S, I, V) _Py_RVALUE((S)->elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  2.79k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (27401:28): [True: 30, False: 2.76k]
  ------------------
27402|  2.76k|    PyMem_Free(_children);
27403|  2.76k|    p->level--;
27404|  2.76k|    return _seq;
27405|  2.76k|}

_PyParser_ASTFromString:
    9|  24.5k|{
   10|  24.5k|    if (PySys_Audit("compile", "yO", str, filename) < 0) {
  ------------------
  |  Branch (10:9): [True: 0, False: 24.5k]
  ------------------
   11|      0|        return NULL;
   12|      0|    }
   13|       |
   14|  24.5k|    mod_ty result = _PyPegen_run_parser_from_string(str, mode, filename, flags,
   15|  24.5k|                                                    arena, module);
   16|  24.5k|    return result;
   17|  24.5k|}

_PyPegen_interactive_exit:
   28|     25|{
   29|     25|    if (p->errcode) {
  ------------------
  |  Branch (29:9): [True: 0, False: 25]
  ------------------
   30|      0|        *(p->errcode) = E_EOF;
  ------------------
  |  |   23|      0|#define E_EOF            11      /* End Of File */
  ------------------
   31|      0|    }
   32|       |    return NULL;
   33|     25|}
_PyPegen_byte_offset_to_character_offset_raw:
   62|  14.6k|{
   63|  14.6k|    Py_ssize_t len = (Py_ssize_t)strlen(str);
   64|  14.6k|    if (col_offset > len + 1) {
  ------------------
  |  Branch (64:9): [True: 14, False: 14.6k]
  ------------------
   65|     14|        col_offset = len + 1;
   66|     14|    }
   67|  14.6k|    assert(col_offset >= 0);
  ------------------
  |  Branch (67:5): [True: 14.6k, False: 0]
  ------------------
   68|  14.6k|    PyObject *text = PyUnicode_DecodeUTF8(str, col_offset, "replace");
   69|  14.6k|    if (!text) {
  ------------------
  |  Branch (69:9): [True: 0, False: 14.6k]
  ------------------
   70|      0|        return -1;
   71|      0|    }
   72|  14.6k|    Py_ssize_t size = PyUnicode_GET_LENGTH(text);
  ------------------
  |  |  299|  14.6k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|  14.6k|    Py_DECREF(text);
  ------------------
  |  |  430|  14.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|  14.6k|    return size;
   75|  14.6k|}
_PyPegen_byte_offset_to_character_offset:
   79|  14.6k|{
   80|  14.6k|    const char *str = PyUnicode_AsUTF8(line);
   81|  14.6k|    if (!str) {
  ------------------
  |  Branch (81:9): [True: 0, False: 14.6k]
  ------------------
   82|      0|        return -1;
   83|      0|    }
   84|  14.6k|    return _PyPegen_byte_offset_to_character_offset_raw(str, col_offset);
   85|  14.6k|}
_PyPegen_insert_memo:
   91|  24.8M|{
   92|       |    // Insert in front
   93|  24.8M|    Memo *m = _PyArena_Malloc(p->arena, sizeof(Memo));
   94|  24.8M|    if (m == NULL) {
  ------------------
  |  Branch (94:9): [True: 0, False: 24.8M]
  ------------------
   95|      0|        return -1;
   96|      0|    }
   97|  24.8M|    m->type = type;
   98|  24.8M|    m->node = node;
   99|  24.8M|    m->mark = p->mark;
  100|  24.8M|    m->next = p->tokens[mark]->memo;
  101|  24.8M|    p->tokens[mark]->memo = m;
  102|  24.8M|    p->tokens[mark]->memo_mask |= 1ULL << (type & 63);
  103|  24.8M|    return 0;
  104|  24.8M|}
_PyPegen_insert_memo_direct:
  110|  11.0M|{
  111|  11.0M|    if (_PyPegen_insert_memo(p, mark, type, NULL) < 0) {
  ------------------
  |  Branch (111:9): [True: 0, False: 11.0M]
  ------------------
  112|      0|        return NULL;
  113|      0|    }
  114|  11.0M|    return p->tokens[mark]->memo;
  115|  11.0M|}
_PyPegen_fill_token:
  306|  5.04M|{
  307|  5.04M|    struct token new_token;
  308|  5.04M|    _PyToken_Init(&new_token);
  309|  5.04M|    _PyTokenizer_Get(p->tok, &new_token);
  310|       |
  311|       |    // Record and skip '# type: ignore' comments
  312|  5.04M|    while (new_token.type == TYPE_IGNORE) {
  ------------------
  |  |   72|  5.04M|#define TYPE_IGNORE     56
  ------------------
  |  Branch (312:12): [True: 1.06k, False: 5.04M]
  ------------------
  313|  1.06k|        Py_ssize_t len;
  314|  1.06k|        const char *text = _PyToken_TextView(p->tok, &new_token, &len);
  315|  1.06k|        char *tag = PyMem_Malloc((size_t)len + 1);
  316|  1.06k|        if (tag == NULL) {
  ------------------
  |  Branch (316:13): [True: 0, False: 1.06k]
  ------------------
  317|      0|            PyErr_NoMemory();
  318|      0|            goto error;
  319|      0|        }
  320|  1.06k|        memcpy(tag, text, (size_t)len);
  321|  1.06k|        tag[len] = '\0';
  322|       |        // Ownership of tag passes to the growable array
  323|  1.06k|        if (!growable_comment_array_add(&p->type_ignore_comments, new_token.end_loc.lineno, tag)) {
  ------------------
  |  Branch (323:13): [True: 0, False: 1.06k]
  ------------------
  324|      0|            PyErr_NoMemory();
  325|      0|            goto error;
  326|      0|        }
  327|  1.06k|        _PyTokenizer_Get(p->tok, &new_token);
  328|  1.06k|    }
  329|       |
  330|  5.04M|    int type = new_token.type;
  331|       |
  332|       |    // If we have reached the end and we are in single input mode we need to insert a newline and reset the parsing
  333|  5.04M|    if (p->start_rule == Py_single_input && type == ENDMARKER && p->parsing_started) {
  ------------------
  |  |    8|  10.0M|#define Py_single_input 256
  ------------------
                  if (p->start_rule == Py_single_input && type == ENDMARKER && p->parsing_started) {
  ------------------
  |  |   16|  5.83M|#define ENDMARKER       0
  ------------------
  |  Branch (333:9): [True: 799k, False: 4.24M]
  |  Branch (333:45): [True: 2.61k, False: 796k]
  |  Branch (333:66): [True: 2.58k, False: 39]
  ------------------
  334|  2.58k|        type = NEWLINE; /* Add an extra newline */
  ------------------
  |  |   20|  2.58k|#define NEWLINE         4
  ------------------
  335|  2.58k|        p->parsing_started = 0;
  336|       |
  337|  2.58k|        if (!(p->flags & PyPARSE_DONT_IMPLY_DEDENT)) {
  ------------------
  |  |   17|  2.58k|#define PyPARSE_DONT_IMPLY_DEDENT       0x0002
  ------------------
  |  Branch (337:13): [True: 1.59k, False: 984]
  ------------------
  338|  1.59k|            _PyTokenizer_ImplyDedents(p->tok);
  339|  1.59k|        }
  340|  2.58k|    }
  341|  5.03M|    else {
  342|  5.03M|        p->parsing_started = 1;
  343|  5.03M|    }
  344|       |
  345|       |    // Check if we are at the limit of the token array capacity and resize if needed
  346|  5.04M|    if ((p->fill == p->size) && (_resize_tokens_array(p) != 0)) {
  ------------------
  |  Branch (346:9): [True: 119k, False: 4.92M]
  |  Branch (346:33): [True: 0, False: 119k]
  ------------------
  347|      0|        goto error;
  348|      0|    }
  349|       |
  350|  5.04M|    Token *t = p->tokens[p->fill];
  351|  5.04M|    int result = initialize_token(p, t, &new_token, type);
  352|  5.04M|    _PyToken_Free(&new_token);
  353|  5.04M|    return result;
  354|      0|error:
  355|      0|    _PyToken_Free(&new_token);
  356|      0|    return -1;
  357|  5.04M|}
_PyPegen_is_memoized:
  407|  67.9M|{
  408|  67.9M|    if (p->mark == p->fill) {
  ------------------
  |  Branch (408:9): [True: 1.90M, False: 66.0M]
  ------------------
  409|  1.90M|        if (_PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (409:13): [True: 689, False: 1.89M]
  ------------------
  410|    689|            p->error_indicator = 1;
  411|    689|            return -1;
  412|    689|        }
  413|  1.90M|    }
  414|       |
  415|  67.9M|    Token *t = p->tokens[p->mark];
  416|       |
  417|  67.9M|    if (!(t->memo_mask & (1ULL << (type & 63)))) {
  ------------------
  |  Branch (417:9): [True: 24.8M, False: 43.1M]
  ------------------
  418|  24.8M|        return 0;
  419|  24.8M|    }
  420|       |
  421|   131M|    for (Memo *m = t->memo; m != NULL; m = m->next) {
  ------------------
  |  Branch (421:29): [True: 131M, False: 301k]
  ------------------
  422|   131M|        if (m->type == type) {
  ------------------
  |  Branch (422:13): [True: 42.8M, False: 88.2M]
  ------------------
  423|       |#if defined(Py_DEBUG)
  424|       |            if (0 <= type && type < NSTATISTICS) {
  425|       |                long count = m->mark - p->mark;
  426|       |                // A memoized negative result counts for one.
  427|       |                if (count <= 0) {
  428|       |                    count = 1;
  429|       |                }
  430|       |                PyMutex_Lock(&_PyRuntime.parser.mutex);
  431|       |                memo_statistics[type] += count;
  432|       |                PyMutex_Unlock(&_PyRuntime.parser.mutex);
  433|       |            }
  434|       |#endif
  435|  42.8M|            p->mark = m->mark;
  436|  42.8M|            *(void **)(pres) = m->node;
  437|  42.8M|            return 1;
  438|  42.8M|        }
  439|   131M|    }
  440|   301k|    return 0;
  441|  43.1M|}
_PyPegen_expect_token:
  474|   109M|{
  475|   109M|    if (p->mark == p->fill) {
  ------------------
  |  Branch (475:9): [True: 2.53M, False: 107M]
  ------------------
  476|  2.53M|        if (_PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (476:13): [True: 1.93k, False: 2.53M]
  ------------------
  477|  1.93k|            p->error_indicator = 1;
  478|  1.93k|            return NULL;
  479|  1.93k|        }
  480|  2.53M|    }
  481|   109M|    Token *t = p->tokens[p->mark];
  482|   109M|    if (t->type != type) {
  ------------------
  |  Branch (482:9): [True: 98.2M, False: 11.6M]
  ------------------
  483|  98.2M|       return NULL;
  484|  98.2M|    }
  485|  11.6M|    p->mark += 1;
  486|  11.6M|    return t;
  487|   109M|}
_PyPegen_expect_forced_token:
  503|  30.1k|_PyPegen_expect_forced_token(Parser *p, int type, const char* expected) {
  504|       |
  505|  30.1k|    if (p->error_indicator == 1) {
  ------------------
  |  Branch (505:9): [True: 0, False: 30.1k]
  ------------------
  506|      0|        return NULL;
  507|      0|    }
  508|       |
  509|  30.1k|    if (p->mark == p->fill) {
  ------------------
  |  Branch (509:9): [True: 11.0k, False: 19.1k]
  ------------------
  510|  11.0k|        if (_PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (510:13): [True: 5, False: 11.0k]
  ------------------
  511|      5|            p->error_indicator = 1;
  512|      5|            return NULL;
  513|      5|        }
  514|  11.0k|    }
  515|  30.1k|    Token *t = p->tokens[p->mark];
  516|  30.1k|    if (t->type != type) {
  ------------------
  |  Branch (516:9): [True: 77, False: 30.1k]
  ------------------
  517|     77|        RAISE_SYNTAX_ERROR_KNOWN_LOCATION(t, "expected '%s'", expected);
  ------------------
  |  |  239|     77|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  518|     77|        return NULL;
  519|     77|    }
  520|  30.1k|    p->mark += 1;
  521|  30.1k|    return t;
  522|  30.1k|}
_PyPegen_expect_soft_keyword:
  526|   833k|{
  527|   833k|    if (p->mark == p->fill) {
  ------------------
  |  Branch (527:9): [True: 4.96k, False: 828k]
  ------------------
  528|  4.96k|        if (_PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (528:13): [True: 2, False: 4.96k]
  ------------------
  529|      2|            p->error_indicator = 1;
  530|      2|            return NULL;
  531|      2|        }
  532|  4.96k|    }
  533|   833k|    Token *t = p->tokens[p->mark];
  534|   833k|    if (t->type != NAME) {
  ------------------
  |  |   17|   833k|#define NAME            1
  ------------------
  |  Branch (534:9): [True: 345k, False: 487k]
  ------------------
  535|   345k|        return NULL;
  536|   345k|    }
  537|   487k|    const char *s = PyBytes_AsString(t->bytes);
  538|   487k|    if (!s) {
  ------------------
  |  Branch (538:9): [True: 0, False: 487k]
  ------------------
  539|      0|        p->error_indicator = 1;
  540|      0|        return NULL;
  541|      0|    }
  542|   487k|    if (strcmp(s, keyword) != 0) {
  ------------------
  |  Branch (542:9): [True: 471k, False: 15.9k]
  ------------------
  543|   471k|        return NULL;
  544|   471k|    }
  545|  15.9k|    return _PyPegen_name_token(p);
  546|   487k|}
_PyPegen_get_last_nonnwhitespace_token:
  550|  3.02M|{
  551|  3.02M|    assert(p->mark >= 0);
  ------------------
  |  Branch (551:5): [True: 3.02M, False: 0]
  ------------------
  552|  3.02M|    Token *token = NULL;
  553|  3.10M|    for (int m = p->mark - 1; m >= 0; m--) {
  ------------------
  |  Branch (553:31): [True: 3.10M, False: 0]
  ------------------
  554|  3.10M|        token = p->tokens[m];
  555|  3.10M|        if (token->type != ENDMARKER && (token->type < NEWLINE || token->type > DEDENT)) {
  ------------------
  |  |   16|  6.21M|#define ENDMARKER       0
  ------------------
                      if (token->type != ENDMARKER && (token->type < NEWLINE || token->type > DEDENT)) {
  ------------------
  |  |   20|  6.21M|#define NEWLINE         4
  ------------------
                      if (token->type != ENDMARKER && (token->type < NEWLINE || token->type > DEDENT)) {
  ------------------
  |  |   22|   549k|#define DEDENT          6
  ------------------
  |  Branch (555:13): [True: 3.10M, False: 0]
  |  Branch (555:42): [True: 2.55M, False: 549k]
  |  Branch (555:67): [True: 467k, False: 82.3k]
  ------------------
  556|  3.02M|            break;
  557|  3.02M|        }
  558|  3.10M|    }
  559|  3.02M|    return token;
  560|  3.02M|}
_PyPegen_new_identifier:
  564|   123k|{
  565|   123k|    PyObject *id = PyUnicode_DecodeUTF8(n, (Py_ssize_t)strlen(n), NULL);
  566|   123k|    if (!id) {
  ------------------
  |  Branch (566:9): [True: 0, False: 123k]
  ------------------
  567|      0|        goto error;
  568|      0|    }
  569|       |    /* Check whether there are non-ASCII characters in the
  570|       |       identifier; if so, normalize to NFKC. */
  571|   123k|    if (!PyUnicode_IS_ASCII(id))
  ------------------
  |  |  227|   123k|#define PyUnicode_IS_ASCII(op) PyUnicode_IS_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   123k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   123k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (571:9): [True: 14.4k, False: 109k]
  ------------------
  572|  14.4k|    {
  573|  14.4k|        if (!init_normalization(p))
  ------------------
  |  Branch (573:13): [True: 0, False: 14.4k]
  ------------------
  574|      0|        {
  575|      0|            Py_DECREF(id);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  576|      0|            goto error;
  577|      0|        }
  578|  14.4k|        PyObject *form = PyUnicode_InternFromString("NFKC");
  579|  14.4k|        if (form == NULL)
  ------------------
  |  Branch (579:13): [True: 0, False: 14.4k]
  ------------------
  580|      0|        {
  581|      0|            Py_DECREF(id);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  582|      0|            goto error;
  583|      0|        }
  584|  14.4k|        PyObject *args[2] = {form, id};
  585|  14.4k|        PyObject *id2 = PyObject_Vectorcall(p->normalize, args, 2, NULL);
  586|  14.4k|        Py_DECREF(id);
  ------------------
  |  |  430|  14.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|  14.4k|        Py_DECREF(form);
  ------------------
  |  |  430|  14.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  588|  14.4k|        if (!id2) {
  ------------------
  |  Branch (588:13): [True: 0, False: 14.4k]
  ------------------
  589|      0|            goto error;
  590|      0|        }
  591|       |
  592|  14.4k|        if (!PyUnicode_Check(id2))
  ------------------
  |  |  103|  14.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  14.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (592:13): [True: 0, False: 14.4k]
  ------------------
  593|      0|        {
  594|      0|            PyErr_Format(PyExc_TypeError,
  595|      0|                         "unicodedata.normalize() must return a string, not "
  596|      0|                         "%.200s",
  597|      0|                         _PyType_Name(Py_TYPE(id2)));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|      0|            Py_DECREF(id2);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  599|      0|            goto error;
  600|      0|        }
  601|  14.4k|        id = id2;
  602|  14.4k|    }
  603|   123k|    static const char * const forbidden[] = {
  604|   123k|        "None",
  605|   123k|        "True",
  606|   123k|        "False",
  607|   123k|        NULL
  608|   123k|    };
  609|   494k|    for (int i = 0; forbidden[i] != NULL; i++) {
  ------------------
  |  Branch (609:21): [True: 371k, False: 123k]
  ------------------
  610|   371k|        if (_PyUnicode_EqualToASCIIString(id, forbidden[i])) {
  ------------------
  |  Branch (610:13): [True: 0, False: 371k]
  ------------------
  611|      0|            PyErr_Format(PyExc_ValueError,
  612|      0|                         "identifier field can't represent '%s' constant",
  613|      0|                         forbidden[i]);
  614|      0|            Py_DECREF(id);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  615|      0|            goto error;
  616|      0|        }
  617|   371k|    }
  618|   123k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  619|   123k|    _PyUnicode_InternImmortal(interp, &id);
  620|   123k|    if (_PyArena_AddPyObject(p->arena, id) < 0)
  ------------------
  |  Branch (620:9): [True: 0, False: 123k]
  ------------------
  621|      0|    {
  622|      0|        Py_DECREF(id);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|      0|        goto error;
  624|      0|    }
  625|   123k|    return id;
  626|       |
  627|      0|error:
  628|      0|    p->error_indicator = 1;
  629|       |    return NULL;
  630|   123k|}
_PyPegen_name_token:
  721|  8.74M|{
  722|  8.74M|    Token *t = _PyPegen_expect_token(p, NAME);
  ------------------
  |  |   17|  8.74M|#define NAME            1
  ------------------
  723|  8.74M|    return _PyPegen_name_from_token(p, t);
  724|  8.74M|}
_PyPegen_string_token:
  728|  3.60M|{
  729|  3.60M|    return _PyPegen_expect_token(p, STRING);
  ------------------
  |  |   19|  3.60M|#define STRING          3
  ------------------
  730|  3.60M|}
_PyPegen_soft_keyword_token:
  732|   290k|expr_ty _PyPegen_soft_keyword_token(Parser *p) {
  733|   290k|    Token *t = _PyPegen_expect_token(p, NAME);
  ------------------
  |  |   17|   290k|#define NAME            1
  ------------------
  734|   290k|    if (t == NULL) {
  ------------------
  |  Branch (734:9): [True: 182k, False: 108k]
  ------------------
  735|   182k|        return NULL;
  736|   182k|    }
  737|   108k|    char *the_token;
  738|   108k|    Py_ssize_t size;
  739|   108k|    PyBytes_AsStringAndSize(t->bytes, &the_token, &size);
  740|   635k|    for (char **keyword = p->soft_keywords; *keyword != NULL; keyword++) {
  ------------------
  |  Branch (740:45): [True: 530k, False: 104k]
  ------------------
  741|   530k|        if (strlen(*keyword) == (size_t)size &&
  ------------------
  |  Branch (741:13): [True: 91.1k, False: 439k]
  ------------------
  742|  91.1k|            strncmp(*keyword, the_token, (size_t)size) == 0) {
  ------------------
  |  Branch (742:13): [True: 3.37k, False: 87.8k]
  ------------------
  743|  3.37k|            return _PyPegen_name_from_token(p, t);
  744|  3.37k|        }
  745|   530k|    }
  746|   104k|    return NULL;
  747|   108k|}
_PyPegen_number_token:
  824|  2.97M|{
  825|  2.97M|    int mark = p->mark;
  826|  2.97M|    Token *t = _PyPegen_expect_token(p, NUMBER);
  ------------------
  |  |   18|  2.97M|#define NUMBER          2
  ------------------
  827|  2.97M|    if (t == NULL) {
  ------------------
  |  Branch (827:9): [True: 741k, False: 2.23M]
  ------------------
  828|   741k|        return NULL;
  829|   741k|    }
  830|       |
  831|       |    // Look up the node at the token's start, as for NAME tokens. A memo hit
  832|       |    // advances the mark; on a miss, restore the position after the token.
  833|  2.23M|    p->mark = mark;
  834|  2.23M|    expr_ty cached = NULL;
  835|  2.23M|    if (_PyPegen_is_memoized(p, NUMBER, &cached)) {
  ------------------
  |  |   18|  2.23M|#define NUMBER          2
  ------------------
  |  Branch (835:9): [True: 1.11M, False: 1.12M]
  ------------------
  836|  1.11M|        return cached;
  837|  1.11M|    }
  838|  1.12M|    p->mark = mark + 1;
  839|       |
  840|  1.12M|    const char *num_raw = PyBytes_AsString(t->bytes);
  841|  1.12M|    if (num_raw == NULL) {
  ------------------
  |  Branch (841:9): [True: 0, False: 1.12M]
  ------------------
  842|      0|        p->error_indicator = 1;
  843|      0|        return NULL;
  844|      0|    }
  845|       |
  846|  1.12M|    if (p->feature_version < 6 && strchr(num_raw, '_') != NULL) {
  ------------------
  |  Branch (846:9): [True: 0, False: 1.12M]
  |  Branch (846:35): [True: 0, False: 0]
  ------------------
  847|      0|        p->error_indicator = 1;
  848|      0|        return RAISE_SYNTAX_ERROR("Underscores in numeric literals are only supported "
  ------------------
  |  |  233|      0|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  849|      0|                                  "in Python 3.6 and greater");
  850|      0|    }
  851|       |
  852|  1.12M|    PyObject *c = parsenumber(num_raw);
  853|       |
  854|  1.12M|    if (c == NULL) {
  ------------------
  |  Branch (854:9): [True: 2, False: 1.12M]
  ------------------
  855|      2|        p->error_indicator = 1;
  856|      2|        PyThreadState *tstate = _PyThreadState_GET();
  857|       |        // The only way a ValueError should happen in _this_ code is via
  858|       |        // PyLong_FromString hitting a length limit.
  859|      2|        if (tstate->current_exception != NULL &&
  ------------------
  |  Branch (859:13): [True: 2, False: 0]
  ------------------
  860|      2|            Py_TYPE(tstate->current_exception) == (PyTypeObject *)PyExc_ValueError
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (860:13): [True: 2, False: 0]
  ------------------
  861|      2|        ) {
  862|      2|            PyObject *exc = PyErr_GetRaisedException();
  863|       |            /* Intentionally omitting columns to avoid a wall of 1000s of '^'s
  864|       |             * on the error message. Nobody is going to overlook their huge
  865|       |             * numeric literal once given the line. */
  866|      2|            RAISE_ERROR_KNOWN_LOCATION(
  867|      2|                p, PyExc_SyntaxError,
  868|      2|                t->lineno, -1 /* col_offset */,
  869|      2|                t->end_lineno, -1 /* end_col_offset */,
  870|      2|                "%S - Consider hexadecimal for huge integer literals "
  871|      2|                "to avoid decimal conversion limits.",
  872|      2|                exc);
  873|      2|            Py_DECREF(exc);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  874|      2|        }
  875|      2|        return NULL;
  876|      2|    }
  877|       |
  878|  1.12M|    if (_PyArena_AddPyObject(p->arena, c) < 0) {
  ------------------
  |  Branch (878:9): [True: 0, False: 1.12M]
  ------------------
  879|      0|        Py_DECREF(c);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|      0|        p->error_indicator = 1;
  881|      0|        return NULL;
  882|      0|    }
  883|       |
  884|  1.12M|    expr_ty result = _PyAST_Constant(c, NULL, t->lineno, t->col_offset,
  885|  1.12M|                                    t->end_lineno, t->end_col_offset, p->arena);
  886|  1.12M|    if (result != NULL && _PyPegen_insert_memo(p, mark, NUMBER, result) < 0) {
  ------------------
  |  |   18|  1.12M|#define NUMBER          2
  ------------------
  |  Branch (886:9): [True: 1.12M, False: 0]
  |  Branch (886:27): [True: 0, False: 1.12M]
  ------------------
  887|      0|        p->error_indicator = 1;
  888|      0|        return NULL;
  889|      0|    }
  890|  1.12M|    return result;
  891|  1.12M|}
_PyPegen_Parser_New:
  925|  22.6k|{
  926|  22.6k|    Parser *p = PyMem_Malloc(sizeof(Parser));
  927|  22.6k|    if (p == NULL) {
  ------------------
  |  Branch (927:9): [True: 0, False: 22.6k]
  ------------------
  928|      0|        return (Parser *) PyErr_NoMemory();
  929|      0|    }
  930|  22.6k|    assert(tok != NULL);
  ------------------
  |  Branch (930:5): [True: 22.6k, False: 0]
  ------------------
  931|  22.6k|    _PyTokenizer_SetOptions(tok, 0, (flags & PyPARSE_TYPE_COMMENTS) > 0);
  ------------------
  |  |   27|  22.6k|#define PyPARSE_TYPE_COMMENTS 0x0040
  ------------------
  932|  22.6k|    p->tok = tok;
  933|  22.6k|    p->keywords = NULL;
  934|  22.6k|    p->n_keyword_lists = -1;
  935|  22.6k|    p->soft_keywords = NULL;
  936|  22.6k|    p->tokens = PyMem_Malloc(sizeof(Token *));
  937|  22.6k|    if (!p->tokens) {
  ------------------
  |  Branch (937:9): [True: 0, False: 22.6k]
  ------------------
  938|      0|        PyMem_Free(p);
  939|      0|        return (Parser *) PyErr_NoMemory();
  940|      0|    }
  941|  22.6k|    p->tokens[0] = PyMem_Calloc(1, sizeof(Token));
  942|  22.6k|    if (!p->tokens[0]) {
  ------------------
  |  Branch (942:9): [True: 0, False: 22.6k]
  ------------------
  943|      0|        PyMem_Free(p->tokens);
  944|      0|        PyMem_Free(p);
  945|      0|        return (Parser *) PyErr_NoMemory();
  946|      0|    }
  947|  22.6k|    if (!growable_comment_array_init(&p->type_ignore_comments, 10)) {
  ------------------
  |  Branch (947:9): [True: 0, False: 22.6k]
  ------------------
  948|      0|        PyMem_Free(p->tokens[0]);
  949|      0|        PyMem_Free(p->tokens);
  950|      0|        PyMem_Free(p);
  951|      0|        return (Parser *) PyErr_NoMemory();
  952|      0|    }
  953|       |
  954|  22.6k|    p->mark = 0;
  955|  22.6k|    p->fill = 0;
  956|  22.6k|    p->size = 1;
  957|       |
  958|  22.6k|    p->errcode = errcode;
  959|  22.6k|    p->arena = arena;
  960|  22.6k|    p->start_rule = start_rule;
  961|  22.6k|    p->parsing_started = 0;
  962|  22.6k|    p->normalize = NULL;
  963|  22.6k|    p->error_indicator = 0;
  964|       |
  965|  22.6k|    p->starting_lineno = 0;
  966|  22.6k|    p->starting_col_offset = 0;
  967|  22.6k|    p->flags = flags;
  968|  22.6k|    p->feature_version = feature_version;
  969|  22.6k|    p->known_err_token = NULL;
  970|  22.6k|    p->identifier_cache = NULL;
  971|  22.6k|    p->tstate = PyThreadState_Get();
  972|       |    // Stack limits are initialized when the thread state is attached.
  973|  22.6k|    assert(((_PyThreadStateImpl *)p->tstate)->c_stack_hard_limit != 0);
  ------------------
  |  Branch (973:5): [True: 22.6k, False: 0]
  ------------------
  974|  22.6k|    p->stack_soft_limit = ((_PyThreadStateImpl *)p->tstate)->c_stack_soft_limit;
  975|  22.6k|#if _Py_STACK_GROWS_DOWN
  976|  22.6k|    p->stack_soft_limit += _PyOS_STACK_MARGIN_BYTES;
  ------------------
  |  |   57|  22.6k|#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *))
  |  |  ------------------
  |  |  |  |   56|  22.6k|#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  22.6k|#  define _PyOS_LOG2_STACK_MARGIN 11
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  977|       |#else
  978|       |    p->stack_soft_limit -= _PyOS_STACK_MARGIN_BYTES;
  979|       |#endif
  980|  22.6k|    p->level = 0;
  981|  22.6k|    p->call_invalid_rules = 0;
  982|  22.6k|    p->last_stmt_location.lineno = 0;
  983|  22.6k|    p->last_stmt_location.col_offset = 0;
  984|  22.6k|    p->last_stmt_location.end_lineno = 0;
  985|  22.6k|    p->last_stmt_location.end_col_offset = 0;
  986|       |#ifdef Py_DEBUG
  987|       |    p->debug = _Py_GetConfig()->parser_debug;
  988|       |#endif
  989|  22.6k|    return p;
  990|  22.6k|}
_PyPegen_Parser_Free:
  994|  22.6k|{
  995|  22.6k|    PyMem_Free(p->identifier_cache);
  996|  22.6k|    Py_XDECREF(p->normalize);
  ------------------
  |  |  524|  22.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|       |    // Resizes allocate blocks starting at indices 1, 2, 4, and so on.
  998|  22.6k|    PyMem_Free(p->tokens[0]);
  999|   142k|    for (int i = 1; i < p->size; i *= 2) {
  ------------------
  |  Branch (999:21): [True: 119k, False: 22.6k]
  ------------------
 1000|   119k|        PyMem_Free(p->tokens[i]);
 1001|   119k|    }
 1002|  22.6k|    PyMem_Free(p->tokens);
 1003|  22.6k|    growable_comment_array_deallocate(&p->type_ignore_comments);
 1004|  22.6k|    PyMem_Free(p);
 1005|  22.6k|}
_PyPegen_run_parser:
 1070|  22.6k|{
 1071|  22.6k|    void *res = _PyPegen_parse(p);
 1072|  22.6k|    assert(p->level == 0);
  ------------------
  |  Branch (1072:5): [True: 22.6k, False: 0]
  ------------------
 1073|  22.6k|    if (res != NULL && PyErr_Occurred()) {
  ------------------
  |  Branch (1073:9): [True: 12.7k, False: 9.88k]
  |  Branch (1073:24): [True: 0, False: 12.7k]
  ------------------
 1074|       |        // Discard a result returned with an exception still pending
 1075|       |        // (e.g. a MemoryError from a recovered-from allocation failure).
 1076|      0|        return NULL;
 1077|      0|    }
 1078|  22.6k|    if (res == NULL) {
  ------------------
  |  Branch (1078:9): [True: 9.88k, False: 12.7k]
  ------------------
 1079|  9.88k|        if ((p->flags & PyPARSE_ALLOW_INCOMPLETE_INPUT) &&  _is_end_of_source(p)) {
  ------------------
  |  |   28|  9.88k|#define PyPARSE_ALLOW_INCOMPLETE_INPUT 0x0100
  ------------------
  |  Branch (1079:13): [True: 7.48k, False: 2.40k]
  |  Branch (1079:61): [True: 802, False: 6.67k]
  ------------------
 1080|    802|            PyErr_Clear();
 1081|    802|            return _PyPegen_raise_error(p, PyExc_IncompleteInputError, 0, "incomplete input");
  ------------------
  |  |  205|    802|#define PyExc_IncompleteInputError ((PyObject *)(&_PyExc_IncompleteInputError))
  ------------------
 1082|    802|        }
 1083|  9.08k|        if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_SyntaxError)) {
  ------------------
  |  Branch (1083:13): [True: 1.84k, False: 7.24k]
  |  Branch (1083:33): [True: 25, False: 1.81k]
  ------------------
 1084|     25|            return NULL;
 1085|     25|        }
 1086|       |       // Make a second parser pass. In this pass we activate heavier and slower checks
 1087|       |        // to produce better error messages and more complete diagnostics. Extra "invalid_*"
 1088|       |        // rules will be active during parsing.
 1089|  9.05k|        Token *last_token = p->tokens[p->fill - 1];
 1090|  9.05k|        reset_parser_state_for_error_pass(p);
 1091|  9.05k|        _PyPegen_parse(p);
 1092|       |
 1093|       |        // Set SyntaxErrors accordingly depending on the parser/tokenizer status at the failure
 1094|       |        // point.
 1095|  9.05k|        _Pypegen_set_syntax_error(p, last_token);
 1096|       |
 1097|       |        // Set the metadata in the exception from p->last_stmt_location
 1098|  9.05k|        if (PyErr_ExceptionMatches(PyExc_SyntaxError)) {
  ------------------
  |  Branch (1098:13): [True: 8.74k, False: 312]
  ------------------
 1099|  8.74k|            _PyPegen_set_syntax_error_metadata(p);
 1100|  8.74k|        }
 1101|  9.05k|       return NULL;
 1102|  9.08k|    }
 1103|       |
 1104|  12.7k|    if (p->start_rule == Py_single_input && _PyTokenizer_HasTrailingStatement(p->tok)) {
  ------------------
  |  |    8|  25.5k|#define Py_single_input 256
  ------------------
  |  Branch (1104:9): [True: 2.25k, False: 10.5k]
  |  Branch (1104:45): [True: 18, False: 2.23k]
  ------------------
 1105|     18|        return RAISE_SYNTAX_ERROR("multiple statements found while compiling a single statement");
  ------------------
  |  |  233|     18|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
 1106|     18|    }
 1107|       |
 1108|       |    // test_peg_generator defines _Py_TEST_PEGEN to not call PyAST_Validate()
 1109|       |#if defined(Py_DEBUG) && !defined(_Py_TEST_PEGEN)
 1110|       |    if (p->start_rule == Py_single_input ||
 1111|       |        p->start_rule == Py_file_input ||
 1112|       |        p->start_rule == Py_eval_input)
 1113|       |    {
 1114|       |        if (!_PyAST_Validate(res)) {
 1115|       |            return NULL;
 1116|       |        }
 1117|       |    }
 1118|       |#endif
 1119|  12.7k|    return res;
 1120|  12.7k|}
_PyPegen_run_parser_from_string:
 1179|  24.5k|{
 1180|  24.5k|    int exec_input = start_rule == Py_file_input;
  ------------------
  |  |    9|  24.5k|#define Py_file_input 257
  ------------------
 1181|  24.5k|    int parser_flags = compute_parser_flags(flags);
 1182|       |
 1183|  24.5k|    struct tok_state *tok;
 1184|  24.5k|    if (flags != NULL && flags->cf_flags & PyCF_IGNORE_COOKIE) {
  ------------------
  |  |   18|  24.5k|#define PyCF_IGNORE_COOKIE 0x0800
  ------------------
  |  Branch (1184:9): [True: 24.5k, False: 0]
  |  Branch (1184:26): [True: 11.0k, False: 13.5k]
  ------------------
 1185|  11.0k|        tok = _PyTokenizer_FromUTF8(str, exec_input, 0);
 1186|  13.5k|    } else {
 1187|  13.5k|        tok = _PyTokenizer_FromString(str, exec_input, 0);
 1188|  13.5k|    }
 1189|  24.5k|    if (tok == NULL) {
  ------------------
  |  Branch (1189:9): [True: 1.90k, False: 22.6k]
  ------------------
 1190|  1.90k|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1190:13): [True: 1.90k, False: 0]
  ------------------
 1191|  1.90k|            _PyTokenizer_raise_init_error(filename_ob);
 1192|  1.90k|        }
 1193|      0|        else {
 1194|       |            // The only silent tokenizer init failure is a failed allocation.
 1195|      0|            PyErr_NoMemory();
 1196|      0|        }
 1197|  1.90k|        return NULL;
 1198|  1.90k|    }
 1199|  22.6k|    tok->barry_as_bdfl = parser_flags & PyPARSE_BARRY_AS_BDFL;
  ------------------
  |  |   26|  22.6k|#define PyPARSE_BARRY_AS_BDFL 0x0020
  ------------------
 1200|       |
 1201|  22.6k|    _PyTokenizer_SetContext(tok, filename_ob, module);
 1202|       |
 1203|       |    // We need to clear up from here on
 1204|  22.6k|    mod_ty result = NULL;
 1205|       |
 1206|  22.6k|    int feature_version = flags && (flags->cf_flags & PyCF_ONLY_AST) ?
  ------------------
  |  |   17|  22.6k|#define PyCF_ONLY_AST 0x0400
  ------------------
  |  Branch (1206:27): [True: 22.6k, False: 0]
  |  Branch (1206:36): [True: 7.87k, False: 14.7k]
  ------------------
 1207|  14.7k|        flags->cf_feature_version : PY_MINOR_VERSION;
  ------------------
  |  |   24|  14.7k|#define PY_MINOR_VERSION        16
  ------------------
 1208|  22.6k|    Parser *p = _PyPegen_Parser_New(tok, start_rule, parser_flags, feature_version,
 1209|  22.6k|                                    NULL, str, arena);
 1210|  22.6k|    if (p == NULL) {
  ------------------
  |  Branch (1210:9): [True: 0, False: 22.6k]
  ------------------
 1211|      0|        goto error;
 1212|      0|    }
 1213|       |
 1214|  22.6k|    result = _PyPegen_run_parser(p);
 1215|  22.6k|    _PyPegen_Parser_Free(p);
 1216|       |
 1217|  22.6k|error:
 1218|  22.6k|    _PyTokenizer_Free(tok);
 1219|  22.6k|    return result;
 1220|  22.6k|}
pegen.c:growable_comment_array_add:
  158|  1.06k|growable_comment_array_add(growable_comment_array *arr, int lineno, char *comment) {
  159|  1.06k|    if (arr->num_items >= arr->size) {
  ------------------
  |  Branch (159:9): [True: 50, False: 1.01k]
  ------------------
  160|     50|        size_t new_size = arr->size * 2;
  161|     50|        void *new_items_array = PyMem_Realloc(arr->items, new_size * sizeof(*arr->items));
  162|     50|        if (!new_items_array) {
  ------------------
  |  Branch (162:13): [True: 0, False: 50]
  ------------------
  163|      0|            return 0;
  164|      0|        }
  165|     50|        arr->items = new_items_array;
  166|     50|        arr->size = new_size;
  167|     50|    }
  168|       |
  169|  1.06k|    arr->items[arr->num_items].lineno = lineno;
  170|  1.06k|    arr->items[arr->num_items].comment = comment;  // Take ownership
  171|  1.06k|    arr->num_items++;
  172|  1.06k|    return 1;
  173|  1.06k|}
pegen.c:_resize_tokens_array:
  276|   119k|_resize_tokens_array(Parser *p) {
  277|   119k|    if (p->size > INT_MAX / 2 ||
  ------------------
  |  Branch (277:9): [True: 0, False: 119k]
  ------------------
  278|   119k|        (size_t)p->size > PY_SSIZE_T_MAX / (2 * sizeof(*p->tokens))) {
  ------------------
  |  |  137|   119k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (278:9): [True: 0, False: 119k]
  ------------------
  279|      0|        PyErr_NoMemory();
  280|      0|        return -1;
  281|      0|    }
  282|   119k|    int newsize = p->size * 2;
  283|   119k|    Token **new_tokens = PyMem_Realloc(p->tokens, (size_t)newsize * sizeof(Token *));
  284|   119k|    if (new_tokens == NULL) {
  ------------------
  |  Branch (284:9): [True: 0, False: 119k]
  ------------------
  285|      0|        PyErr_NoMemory();
  286|      0|        return -1;
  287|      0|    }
  288|   119k|    p->tokens = new_tokens;
  289|       |
  290|       |    // Allocate new tokens together without moving existing ones: parser rules
  291|       |    // may still hold pointers into earlier blocks. Parser_Free frees each block.
  292|   119k|    Token *chunk = PyMem_Calloc((size_t)(newsize - p->size), sizeof(Token));
  293|   119k|    if (chunk == NULL) {
  ------------------
  |  Branch (293:9): [True: 0, False: 119k]
  ------------------
  294|      0|        PyErr_NoMemory();
  295|      0|        return -1;
  296|      0|    }
  297|  7.35M|    for (int i = p->size; i < newsize; i++) {
  ------------------
  |  Branch (297:27): [True: 7.23M, False: 119k]
  ------------------
  298|  7.23M|        p->tokens[i] = &chunk[i - p->size];
  299|  7.23M|    }
  300|   119k|    p->size = newsize;
  301|   119k|    return 0;
  302|   119k|}
pegen.c:initialize_token:
  225|  5.04M|initialize_token(Parser *p, Token *parser_token, struct token *new_token, int token_type) {
  226|  5.04M|    assert(parser_token != NULL);
  ------------------
  |  Branch (226:5): [True: 5.04M, False: 0]
  ------------------
  227|       |
  228|  5.04M|    Py_ssize_t length;
  229|  5.04M|    const char *text = _PyToken_TextView(p->tok, new_token, &length);
  230|  5.04M|    parser_token->type = token_type == NAME
  ------------------
  |  |   17|  5.04M|#define NAME            1
  ------------------
  |  Branch (230:26): [True: 1.07M, False: 3.96M]
  ------------------
  231|  5.04M|        ? _get_keyword_or_name_type(p, text, length) : token_type;
  232|  5.04M|    if (token_needs_text(parser_token->type)) {
  ------------------
  |  Branch (232:9): [True: 2.08M, False: 2.95M]
  ------------------
  233|  2.08M|        parser_token->bytes = PyBytes_FromStringAndSize(text, length);
  234|  2.08M|        if (parser_token->bytes == NULL) {
  ------------------
  |  Branch (234:13): [True: 0, False: 2.08M]
  ------------------
  235|      0|            return -1;
  236|      0|        }
  237|  2.08M|        if (_PyArena_AddPyObject(p->arena, parser_token->bytes) < 0) {
  ------------------
  |  Branch (237:13): [True: 0, False: 2.08M]
  ------------------
  238|      0|            Py_DECREF(parser_token->bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      0|            return -1;
  240|      0|        }
  241|  2.08M|    }
  242|  2.95M|    else {
  243|  2.95M|        parser_token->bytes = NULL;
  244|  2.95M|    }
  245|       |
  246|  5.04M|    parser_token->metadata = NULL;
  247|  5.04M|    if (new_token->metadata != NULL) {
  ------------------
  |  Branch (247:9): [True: 7.12k, False: 5.03M]
  ------------------
  248|  7.12k|        if (_PyArena_AddPyObject(p->arena, new_token->metadata) < 0) {
  ------------------
  |  Branch (248:13): [True: 0, False: 7.12k]
  ------------------
  249|      0|            return -1;
  250|      0|        }
  251|  7.12k|        parser_token->metadata = new_token->metadata;
  252|  7.12k|        new_token->metadata = NULL;
  253|  7.12k|    }
  254|       |
  255|  5.04M|    parser_token->level = new_token->level;
  256|  5.04M|    parser_token->is_raw = new_token->is_raw;
  257|  5.04M|    parser_token->lineno = new_token->start_loc.lineno;
  258|  5.04M|    parser_token->col_offset = new_token->end_loc.lineno == p->starting_lineno
  ------------------
  |  Branch (258:32): [True: 16, False: 5.04M]
  ------------------
  259|  5.04M|        ? p->starting_col_offset + new_token->start_loc.byte_col
  260|  5.04M|        : new_token->start_loc.byte_col;
  261|  5.04M|    parser_token->end_lineno = new_token->end_loc.lineno;
  262|  5.04M|    parser_token->end_col_offset = new_token->end_loc.lineno == p->starting_lineno
  ------------------
  |  Branch (262:36): [True: 16, False: 5.04M]
  ------------------
  263|  5.04M|        ? p->starting_col_offset + new_token->end_loc.byte_col
  264|  5.04M|        : new_token->end_loc.byte_col;
  265|       |
  266|  5.04M|    p->fill += 1;
  267|       |
  268|  5.04M|    if (token_type == ERRORTOKEN && _PyTokenizer_GetInfo(p->tok).status == E_DECODE) {
  ------------------
  |  |   83|  10.0M|#define ERRORTOKEN      67
  ------------------
                  if (token_type == ERRORTOKEN && _PyTokenizer_GetInfo(p->tok).status == E_DECODE) {
  ------------------
  |  |   34|  3.65k|#define E_DECODE         22      /* Error in decoding into Unicode */
  ------------------
  |  Branch (268:9): [True: 3.65k, False: 5.03M]
  |  Branch (268:9): [True: 673, False: 5.03M]
  |  Branch (268:37): [True: 673, False: 2.98k]
  ------------------
  269|    673|        return _Pypegen_raise_decode_error(p);
  270|    673|    }
  271|       |
  272|  5.03M|    return (token_type == ERRORTOKEN ? _Pypegen_tokenizer_error(p) : 0);
  ------------------
  |  |   83|  5.03M|#define ERRORTOKEN      67
  ------------------
  |  Branch (272:13): [True: 2.98k, False: 5.03M]
  ------------------
  273|  5.04M|}
pegen.c:_get_keyword_or_name_type:
  185|  1.07M|{
  186|  1.07M|    assert(length > 0);
  ------------------
  |  Branch (186:5): [True: 1.07M, False: 0]
  ------------------
  187|       |
  188|  1.07M|    if (length >= p->n_keyword_lists ||
  ------------------
  |  Branch (188:9): [True: 101k, False: 970k]
  ------------------
  189|   970k|        p->keywords[length] == NULL ||
  ------------------
  |  Branch (189:9): [True: 0, False: 970k]
  ------------------
  190|   970k|        p->keywords[length]->type == -1) {
  ------------------
  |  Branch (190:9): [True: 319k, False: 651k]
  ------------------
  191|   420k|        return NAME;
  ------------------
  |  |   17|   420k|#define NAME            1
  ------------------
  192|   420k|    }
  193|  3.73M|    for (KeywordToken *k = p->keywords[length]; k != NULL && k->type != -1; k++) {
  ------------------
  |  Branch (193:49): [True: 3.73M, False: 0]
  |  Branch (193:62): [True: 3.28M, False: 456k]
  ------------------
  194|  3.28M|        if (memcmp(k->str, text, (size_t)length) == 0) {
  ------------------
  |  Branch (194:13): [True: 194k, False: 3.08M]
  ------------------
  195|   194k|            return k->type;
  196|   194k|        }
  197|  3.28M|    }
  198|   456k|    return NAME;
  ------------------
  |  |   17|   456k|#define NAME            1
  ------------------
  199|   651k|}
pegen.c:token_needs_text:
  205|  5.04M|{
  206|  5.04M|    switch (type) {
  207|   876k|        case NAME:
  ------------------
  |  |   17|   876k|#define NAME            1
  ------------------
  |  Branch (207:9): [True: 876k, False: 4.16M]
  ------------------
  208|  1.92M|        case NUMBER:
  ------------------
  |  |   18|  1.92M|#define NUMBER          2
  ------------------
  |  Branch (208:9): [True: 1.05M, False: 3.98M]
  ------------------
  209|  1.98M|        case STRING:
  ------------------
  |  |   19|  1.98M|#define STRING          3
  ------------------
  |  Branch (209:9): [True: 58.0k, False: 4.98M]
  ------------------
  210|  2.00M|        case FSTRING_START:
  ------------------
  |  |   75|  2.00M|#define FSTRING_START   59
  ------------------
  |  Branch (210:9): [True: 13.3k, False: 5.02M]
  ------------------
  211|  2.04M|        case FSTRING_MIDDLE:
  ------------------
  |  |   76|  2.04M|#define FSTRING_MIDDLE  60
  ------------------
  |  Branch (211:9): [True: 44.8k, False: 4.99M]
  ------------------
  212|  2.05M|        case FSTRING_END:
  ------------------
  |  |   77|  2.05M|#define FSTRING_END     61
  ------------------
  |  Branch (212:9): [True: 11.4k, False: 5.02M]
  ------------------
  213|  2.06M|        case TSTRING_START:
  ------------------
  |  |   78|  2.06M|#define TSTRING_START   62
  ------------------
  |  Branch (213:9): [True: 8.51k, False: 5.03M]
  ------------------
  214|  2.08M|        case TSTRING_MIDDLE:
  ------------------
  |  |   79|  2.08M|#define TSTRING_MIDDLE  63
  ------------------
  |  Branch (214:9): [True: 16.4k, False: 5.02M]
  ------------------
  215|  2.08M|        case TSTRING_END:
  ------------------
  |  |   80|  2.08M|#define TSTRING_END     64
  ------------------
  |  Branch (215:9): [True: 3.29k, False: 5.03M]
  ------------------
  216|  2.08M|        case TYPE_COMMENT:
  ------------------
  |  |   73|  2.08M|#define TYPE_COMMENT    57
  ------------------
  |  Branch (216:9): [True: 853, False: 5.03M]
  ------------------
  217|  2.08M|        case NOTEQUAL:  // _PyPegen_check_barry_as_flufl() distinguishes != and <>.
  ------------------
  |  |   44|  2.08M|#define NOTEQUAL        28
  ------------------
  |  Branch (217:9): [True: 687, False: 5.03M]
  ------------------
  218|  2.08M|            return 1;
  219|  2.95M|        default:
  ------------------
  |  Branch (219:9): [True: 2.95M, False: 2.08M]
  ------------------
  220|  2.95M|            return 0;
  221|  5.04M|    }
  222|  5.04M|}
pegen.c:init_normalization:
  135|  14.4k|{
  136|  14.4k|    if (p->normalize) {
  ------------------
  |  Branch (136:9): [True: 11.4k, False: 3.00k]
  ------------------
  137|  11.4k|        return 1;
  138|  11.4k|    }
  139|  3.00k|    p->normalize = PyImport_ImportModuleAttrString("unicodedata", "normalize");
  140|  3.00k|    if (!p->normalize)
  ------------------
  |  Branch (140:9): [True: 0, False: 3.00k]
  ------------------
  141|      0|    {
  142|      0|        return 0;
  143|      0|    }
  144|  3.00k|    return 1;
  145|  3.00k|}
pegen.c:_PyPegen_name_from_token:
  692|  8.74M|{
  693|  8.74M|    if (t == NULL) {
  ------------------
  |  Branch (693:9): [True: 5.56M, False: 3.18M]
  ------------------
  694|  5.56M|        return NULL;
  695|  5.56M|    }
  696|       |    // Reuse the AST node when backtracking revisits this token. Memo lookup
  697|       |    // starts before the token and restores the position after it on a hit.
  698|       |    // Token kinds can be memo keys: generated grammar rule IDs start at 1000.
  699|  3.18M|    int mark = p->mark - 1;
  700|  3.18M|    p->mark = mark;
  701|  3.18M|    expr_ty cached = NULL;
  702|  3.18M|    if (_PyPegen_is_memoized(p, NAME, &cached)) {
  ------------------
  |  |   17|  3.18M|#define NAME            1
  ------------------
  |  Branch (702:9): [True: 2.15M, False: 1.02M]
  ------------------
  703|  2.15M|        return cached;
  704|  2.15M|    }
  705|  1.02M|    p->mark = mark + 1;
  706|  1.02M|    PyObject *id = get_cached_identifier(p, t->bytes);
  707|  1.02M|    if (id == NULL) {
  ------------------
  |  Branch (707:9): [True: 0, False: 1.02M]
  ------------------
  708|      0|        return NULL;
  709|      0|    }
  710|  1.02M|    expr_ty result = _PyAST_Name(id, Load, t->lineno, t->col_offset,
  711|  1.02M|                                t->end_lineno, t->end_col_offset, p->arena);
  712|  1.02M|    if (result != NULL && _PyPegen_insert_memo(p, mark, NAME, result) < 0) {
  ------------------
  |  |   17|  1.02M|#define NAME            1
  ------------------
  |  Branch (712:9): [True: 1.02M, False: 0]
  |  Branch (712:27): [True: 0, False: 1.02M]
  ------------------
  713|      0|        p->error_indicator = 1;
  714|      0|        return NULL;
  715|      0|    }
  716|  1.02M|    return result;
  717|  1.02M|}
pegen.c:get_cached_identifier:
  635|  1.02M|{
  636|  1.02M|    const char *s = PyBytes_AsString(bytes);
  637|  1.02M|    if (!s) {
  ------------------
  |  Branch (637:9): [True: 0, False: 1.02M]
  ------------------
  638|      0|        p->error_indicator = 1;
  639|      0|        return NULL;
  640|      0|    }
  641|       |    // Identifiers repeat constantly; a small span-keyed cache skips the
  642|       |    // UTF-8 decode + intern for repeated occurrences. Keys point into
  643|       |    // arena-owned token bytes and values are arena-owned interned strings,
  644|       |    // so borrowed references are valid for the lifetime of the parse
  645|       |    // (including the second error pass, which reuses parser and arena).
  646|  1.02M|    Py_ssize_t len = PyBytes_GET_SIZE(bytes);
  ------------------
  |  |   33|  1.02M|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  1.02M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|  1.02M|    Py_hash_t hash = PyObject_Hash(bytes);
  648|  1.02M|    if (hash == -1) {
  ------------------
  |  Branch (648:9): [True: 0, False: 1.02M]
  ------------------
  649|      0|        p->error_indicator = 1;
  650|      0|        return NULL;
  651|      0|    }
  652|       |    // Parses without identifiers do not need this cache.
  653|  1.02M|    if (p->identifier_cache == NULL) {
  ------------------
  |  Branch (653:9): [True: 15.8k, False: 1.00M]
  ------------------
  654|  15.8k|        p->identifier_cache = PyMem_Calloc(
  655|  15.8k|            IDENTIFIER_CACHE_SIZE, sizeof(*p->identifier_cache));
  ------------------
  |  |   14|  15.8k|#define IDENTIFIER_CACHE_SIZE 2048  // Must be a power of two.
  ------------------
  656|  15.8k|        if (p->identifier_cache == NULL) {
  ------------------
  |  Branch (656:13): [True: 0, False: 15.8k]
  ------------------
  657|      0|            p->error_indicator = 1;
  658|      0|            return PyErr_NoMemory();
  659|      0|        }
  660|  15.8k|    }
  661|  1.02M|    IdentifierCacheEntry *free_slot = NULL;
  662|  1.02M|    size_t idx = (size_t)hash & (IDENTIFIER_CACHE_SIZE - 1);
  ------------------
  |  |   14|  1.02M|#define IDENTIFIER_CACHE_SIZE 2048  // Must be a power of two.
  ------------------
  663|  1.02M|    for (int probe = 0; probe < IDENTIFIER_CACHE_MAX_PROBES; probe++) {
  ------------------
  |  |   15|  1.02M|#define IDENTIFIER_CACHE_MAX_PROBES 8
  ------------------
  |  Branch (663:25): [True: 1.02M, False: 0]
  ------------------
  664|  1.02M|        IdentifierCacheEntry *entry = &p->identifier_cache[
  665|  1.02M|            (idx + probe) & (IDENTIFIER_CACHE_SIZE - 1)];
  ------------------
  |  |   14|  1.02M|#define IDENTIFIER_CACHE_SIZE 2048  // Must be a power of two.
  ------------------
  666|  1.02M|        if (entry->key == NULL) {
  ------------------
  |  Branch (666:13): [True: 118k, False: 910k]
  ------------------
  667|   118k|            free_slot = entry;
  668|   118k|            break;
  669|   118k|        }
  670|   910k|        if (entry->hash == hash && entry->len == len &&
  ------------------
  |  Branch (670:13): [True: 906k, False: 3.39k]
  |  Branch (670:36): [True: 906k, False: 0]
  ------------------
  671|   906k|            memcmp(entry->key, s, len) == 0)
  ------------------
  |  Branch (671:13): [True: 906k, False: 0]
  ------------------
  672|   906k|        {
  673|   906k|            return entry->value;
  674|   906k|        }
  675|   910k|    }
  676|   118k|    PyObject *id = _PyPegen_new_identifier(p, s);
  677|   118k|    if (id == NULL) {
  ------------------
  |  Branch (677:9): [True: 0, False: 118k]
  ------------------
  678|      0|        p->error_indicator = 1;
  679|      0|        return NULL;
  680|      0|    }
  681|   118k|    if (free_slot != NULL) {
  ------------------
  |  Branch (681:9): [True: 118k, False: 0]
  ------------------
  682|   118k|        free_slot->key = s;
  683|   118k|        free_slot->len = len;
  684|   118k|        free_slot->hash = hash;
  685|   118k|        free_slot->value = id;
  686|   118k|    }
  687|   118k|    return id;
  688|   118k|}
pegen.c:parsenumber:
  795|  1.12M|{
  796|  1.12M|    char *dup;
  797|  1.12M|    char *end;
  798|  1.12M|    PyObject *res = NULL;
  799|       |
  800|  1.12M|    assert(s != NULL);
  ------------------
  |  Branch (800:5): [True: 1.12M, False: 0]
  ------------------
  801|       |
  802|  1.12M|    if (strchr(s, '_') == NULL) {
  ------------------
  |  Branch (802:9): [True: 1.10M, False: 15.4k]
  ------------------
  803|  1.10M|        return parsenumber_raw(s);
  804|  1.10M|    }
  805|       |    /* Create a duplicate without underscores. */
  806|  15.4k|    dup = PyMem_Malloc(strlen(s) + 1);
  807|  15.4k|    if (dup == NULL) {
  ------------------
  |  Branch (807:9): [True: 0, False: 15.4k]
  ------------------
  808|      0|        return PyErr_NoMemory();
  809|      0|    }
  810|  15.4k|    end = dup;
  811|   793k|    for (; *s; s++) {
  ------------------
  |  Branch (811:12): [True: 778k, False: 15.4k]
  ------------------
  812|   778k|        if (*s != '_') {
  ------------------
  |  Branch (812:13): [True: 758k, False: 19.3k]
  ------------------
  813|   758k|            *end++ = *s;
  814|   758k|        }
  815|   778k|    }
  816|  15.4k|    *end = '\0';
  817|  15.4k|    res = parsenumber_raw(dup);
  818|  15.4k|    PyMem_Free(dup);
  819|  15.4k|    return res;
  820|  15.4k|}
pegen.c:parsenumber_raw:
  751|  1.12M|{
  752|  1.12M|    const char *end;
  753|  1.12M|    long x;
  754|  1.12M|    double dx;
  755|  1.12M|    Py_complex compl;
  756|  1.12M|    int imflag;
  757|       |
  758|  1.12M|    assert(s != NULL);
  ------------------
  |  Branch (758:5): [True: 1.12M, False: 0]
  ------------------
  759|  1.12M|    errno = 0;
  760|  1.12M|    end = s + strlen(s) - 1;
  761|  1.12M|    imflag = *end == 'j' || *end == 'J';
  ------------------
  |  Branch (761:14): [True: 80.5k, False: 1.04M]
  |  Branch (761:29): [True: 16.8k, False: 1.02M]
  ------------------
  762|  1.12M|    if (s[0] == '0') {
  ------------------
  |  Branch (762:9): [True: 74.9k, False: 1.04M]
  ------------------
  763|  74.9k|        x = (long)PyOS_strtoul(s, (char **)&end, 0);
  764|  74.9k|        if (x < 0 && errno == 0) {
  ------------------
  |  Branch (764:13): [True: 2.69k, False: 72.2k]
  |  Branch (764:22): [True: 275, False: 2.41k]
  ------------------
  765|    275|            return PyLong_FromString(s, (char **)0, 0);
  766|    275|        }
  767|  74.9k|    }
  768|  1.04M|    else {
  769|  1.04M|        x = PyOS_strtol(s, (char **)&end, 0);
  770|  1.04M|    }
  771|  1.12M|    if (*end == '\0') {
  ------------------
  |  Branch (771:9): [True: 898k, False: 223k]
  ------------------
  772|   898k|        if (errno != 0) {
  ------------------
  |  Branch (772:13): [True: 37.4k, False: 860k]
  ------------------
  773|  37.4k|            return PyLong_FromString(s, (char **)0, 0);
  774|  37.4k|        }
  775|   860k|        return PyLong_FromLong(x);
  776|   898k|    }
  777|       |    /* XXX Huge floats may silently fail */
  778|   223k|    if (imflag) {
  ------------------
  |  Branch (778:9): [True: 97.3k, False: 126k]
  ------------------
  779|  97.3k|        compl.real = 0.;
  780|  97.3k|        compl.imag = PyOS_string_to_double(s, (char **)&end, NULL);
  781|  97.3k|        if (compl.imag == -1.0 && PyErr_Occurred()) {
  ------------------
  |  Branch (781:13): [True: 0, False: 97.3k]
  |  Branch (781:35): [True: 0, False: 0]
  ------------------
  782|      0|            return NULL;
  783|      0|        }
  784|  97.3k|        return PyComplex_FromCComplex(compl);
  785|  97.3k|    }
  786|   126k|    dx = PyOS_string_to_double(s, NULL, NULL);
  787|   126k|    if (dx == -1.0 && PyErr_Occurred()) {
  ------------------
  |  Branch (787:9): [True: 0, False: 126k]
  |  Branch (787:23): [True: 0, False: 0]
  ------------------
  788|      0|        return NULL;
  789|      0|    }
  790|   126k|    return PyFloat_FromDouble(dx);
  791|   126k|}
pegen.c:growable_comment_array_init:
  148|  22.6k|growable_comment_array_init(growable_comment_array *arr, size_t initial_size) {
  149|  22.6k|    assert(initial_size > 0);
  ------------------
  |  Branch (149:5): [True: 22.6k, False: 0]
  ------------------
  150|  22.6k|    arr->items = PyMem_Malloc(initial_size * sizeof(*arr->items));
  151|  22.6k|    arr->size = initial_size;
  152|  22.6k|    arr->num_items = 0;
  153|       |
  154|       |    return arr->items != NULL;
  155|  22.6k|}
pegen.c:growable_comment_array_deallocate:
  176|  22.6k|growable_comment_array_deallocate(growable_comment_array *arr) {
  177|  23.7k|    for (unsigned i = 0; i < arr->num_items; i++) {
  ------------------
  |  Branch (177:26): [True: 1.06k, False: 22.6k]
  ------------------
  178|  1.06k|        PyMem_Free(arr->items[i].comment);
  179|  1.06k|    }
  180|  22.6k|    PyMem_Free(arr->items);
  181|  22.6k|}
pegen.c:_is_end_of_source:
 1024|  7.48k|_is_end_of_source(Parser *p) {
 1025|  7.48k|    int err = _PyTokenizer_GetInfo(p->tok).status;
 1026|  7.48k|    return err == E_EOF || err == E_EOFS || err == E_EOLS;
  ------------------
  |  |   23|  14.9k|#define E_EOF            11      /* End Of File */
  ------------------
                  return err == E_EOF || err == E_EOFS || err == E_EOLS;
  ------------------
  |  |   35|  14.2k|#define E_EOFS           23      /* EOF in triple-quoted string */
  ------------------
                  return err == E_EOF || err == E_EOFS || err == E_EOLS;
  ------------------
  |  |   36|  6.77k|#define E_EOLS           24      /* EOL in single-quoted string */
  ------------------
  |  Branch (1026:12): [True: 663, False: 6.81k]
  |  Branch (1026:28): [True: 38, False: 6.77k]
  |  Branch (1026:45): [True: 101, False: 6.67k]
  ------------------
 1027|  7.48k|}
pegen.c:reset_parser_state_for_error_pass:
 1009|  9.05k|{
 1010|  9.05k|    p->last_stmt_location.lineno = 0;
 1011|  9.05k|    p->last_stmt_location.col_offset = 0;
 1012|  9.05k|    p->last_stmt_location.end_lineno = 0;
 1013|  9.05k|    p->last_stmt_location.end_col_offset = 0;
 1014|   735k|    for (int i = 0; i < p->fill; i++) {
  ------------------
  |  Branch (1014:21): [True: 725k, False: 9.05k]
  ------------------
 1015|       |        p->tokens[i]->memo = NULL;
 1016|   725k|        p->tokens[i]->memo_mask = 0;
 1017|   725k|    }
 1018|  9.05k|    p->mark = 0;
 1019|  9.05k|    p->call_invalid_rules = 1;
 1020|  9.05k|    _PyTokenizer_StopInteractive(p->tok);
 1021|  9.05k|}
pegen.c:_PyPegen_set_syntax_error_metadata:
 1030|  8.74k|_PyPegen_set_syntax_error_metadata(Parser *p) {
 1031|  8.74k|    PyObject *exc = PyErr_GetRaisedException();
 1032|  8.74k|    if (!exc || !PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_SyntaxError)) {
  ------------------
  |  |  378|  8.74k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  8.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1032:9): [True: 0, False: 8.74k]
  |  Branch (1032:17): [True: 0, False: 8.74k]
  ------------------
 1033|      0|        PyErr_SetRaisedException(exc);
 1034|      0|        return;
 1035|      0|    }
 1036|  8.74k|    const char *source = _PyTokenizer_RetainedSource(p->tok);
 1037|  8.74k|    const char *encoding = _PyTokenizer_GetInfo(p->tok).encoding;
 1038|  8.74k|    PyObject* the_source = NULL;
 1039|  8.74k|    if (source) {
  ------------------
  |  Branch (1039:9): [True: 8.74k, False: 0]
  ------------------
 1040|  8.74k|        if (encoding == NULL) {
  ------------------
  |  Branch (1040:13): [True: 3.82k, False: 4.92k]
  ------------------
 1041|  3.82k|            the_source = PyUnicode_FromString(source);
 1042|  4.92k|        } else {
 1043|  4.92k|            the_source = PyUnicode_Decode(source, strlen(source), encoding, NULL);
 1044|  4.92k|        }
 1045|  8.74k|    }
 1046|  8.74k|    if (!the_source) {
  ------------------
  |  Branch (1046:9): [True: 1.53k, False: 7.20k]
  ------------------
 1047|  1.53k|        PyErr_Clear();
 1048|  1.53k|        the_source = Py_None;
  ------------------
  |  |  616|  1.53k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1049|  1.53k|        Py_INCREF(the_source);
  ------------------
  |  |  310|  1.53k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1050|  1.53k|    }
 1051|  8.74k|    PyObject* metadata = Py_BuildValue(
 1052|  8.74k|        "(iiN)",
 1053|  8.74k|        p->last_stmt_location.lineno,
 1054|  8.74k|        p->last_stmt_location.col_offset,
 1055|  8.74k|        the_source // N gives ownership to metadata
 1056|  8.74k|    );
 1057|  8.74k|    if (!metadata) {
  ------------------
  |  Branch (1057:9): [True: 0, False: 8.74k]
  ------------------
 1058|      0|        PyErr_Clear();
 1059|      0|        return;
 1060|      0|    }
 1061|  8.74k|    PySyntaxErrorObject *syntax_error = (PySyntaxErrorObject *)exc;
 1062|       |
 1063|  8.74k|    Py_XDECREF(syntax_error->metadata);
  ------------------
  |  |  524|  8.74k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1064|  8.74k|    syntax_error->metadata = metadata;
 1065|  8.74k|    PyErr_SetRaisedException(exc);
 1066|  8.74k|}
pegen.c:compute_parser_flags:
  897|  24.5k|{
  898|  24.5k|    int parser_flags = 0;
  899|  24.5k|    if (!flags) {
  ------------------
  |  Branch (899:9): [True: 0, False: 24.5k]
  ------------------
  900|      0|        return 0;
  901|      0|    }
  902|  24.5k|    if (flags->cf_flags & PyCF_DONT_IMPLY_DEDENT) {
  ------------------
  |  |   16|  24.5k|#define PyCF_DONT_IMPLY_DEDENT 0x0200
  ------------------
  |  Branch (902:9): [True: 11.7k, False: 12.7k]
  ------------------
  903|  11.7k|        parser_flags |= PyPARSE_DONT_IMPLY_DEDENT;
  ------------------
  |  |   17|  11.7k|#define PyPARSE_DONT_IMPLY_DEDENT       0x0002
  ------------------
  904|  11.7k|    }
  905|  24.5k|    if (flags->cf_flags & PyCF_IGNORE_COOKIE) {
  ------------------
  |  |   18|  24.5k|#define PyCF_IGNORE_COOKIE 0x0800
  ------------------
  |  Branch (905:9): [True: 11.0k, False: 13.5k]
  ------------------
  906|  11.0k|        parser_flags |= PyPARSE_IGNORE_COOKIE;
  ------------------
  |  |   25|  11.0k|#define PyPARSE_IGNORE_COOKIE 0x0010
  ------------------
  907|  11.0k|    }
  908|  24.5k|    if (flags->cf_flags & CO_FUTURE_BARRY_AS_BDFL) {
  ------------------
  |  |  145|  24.5k|#define CO_FUTURE_BARRY_AS_BDFL  0x400000
  ------------------
  |  Branch (908:9): [True: 0, False: 24.5k]
  ------------------
  909|      0|        parser_flags |= PyPARSE_BARRY_AS_BDFL;
  ------------------
  |  |   26|      0|#define PyPARSE_BARRY_AS_BDFL 0x0020
  ------------------
  910|      0|    }
  911|  24.5k|    if (flags->cf_flags & PyCF_TYPE_COMMENTS) {
  ------------------
  |  |   19|  24.5k|#define PyCF_TYPE_COMMENTS 0x1000
  ------------------
  |  Branch (911:9): [True: 10.4k, False: 14.1k]
  ------------------
  912|  10.4k|        parser_flags |= PyPARSE_TYPE_COMMENTS;
  ------------------
  |  |   27|  10.4k|#define PyPARSE_TYPE_COMMENTS 0x0040
  ------------------
  913|  10.4k|    }
  914|  24.5k|    if (flags->cf_flags & PyCF_ALLOW_INCOMPLETE_INPUT) {
  ------------------
  |  |   21|  24.5k|#define PyCF_ALLOW_INCOMPLETE_INPUT 0x4000
  ------------------
  |  Branch (914:9): [True: 18.5k, False: 5.95k]
  ------------------
  915|  18.5k|        parser_flags |= PyPARSE_ALLOW_INCOMPLETE_INPUT;
  ------------------
  |  |   28|  18.5k|#define PyPARSE_ALLOW_INCOMPLETE_INPUT 0x0100
  ------------------
  916|  18.5k|    }
  917|  24.5k|    return parser_flags;
  918|  24.5k|}

pegen.c:RAISE_ERROR_KNOWN_LOCATION:
  224|     79|{
  225|     79|    va_list va;
  226|     79|    va_start(va, errmsg);
  227|     79|    Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|     79|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (227:31): [True: 0, False: 79]
  ------------------
  228|     79|    Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|     79|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (228:35): [True: 0, False: 79]
  ------------------
  229|     79|    _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va);
  230|     79|    va_end(va);
  231|       |    return NULL;
  232|     79|}
pegen_errors.c:RAISE_ERROR_KNOWN_LOCATION:
  224|  5.41k|{
  225|  5.41k|    va_list va;
  226|  5.41k|    va_start(va, errmsg);
  227|  5.41k|    Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|  5.41k|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (227:31): [True: 0, False: 5.41k]
  ------------------
  228|  5.41k|    Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|  5.41k|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (228:35): [True: 0, False: 5.41k]
  ------------------
  229|  5.41k|    _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va);
  230|  5.41k|    va_end(va);
  231|       |    return NULL;
  232|  5.41k|}
parser.c:_PyPegen_stack_exhausted:
  114|   132M|{
  115|   132M|#if _Py_STACK_GROWS_DOWN
  116|   132M|    if (_Py_get_machine_stack_pointer() > p->stack_soft_limit) {
  ------------------
  |  Branch (116:9): [True: 132M, False: 0]
  ------------------
  117|       |#else
  118|       |    if (_Py_get_machine_stack_pointer() <= p->stack_soft_limit) {
  119|       |#endif
  120|   132M|        assert(!_Py_ReachedRecursionLimitWithMargin(p->tstate, 1));
  ------------------
  |  Branch (120:9): [True: 132M, False: 0]
  ------------------
  121|   132M|        return 0;
  122|   132M|    }
  123|      0|    return _Py_ReachedRecursionLimitWithMargin(p->tstate, 1);
  124|   132M|}
parser.c:INVALID_VERSION_CHECK:
  332|  89.1k|{
  333|  89.1k|    if (node == NULL) {
  ------------------
  |  Branch (333:9): [True: 13, False: 89.1k]
  ------------------
  334|     13|        p->error_indicator = 1;  // Inline CHECK_CALL
  335|     13|        return NULL;
  336|     13|    }
  337|  89.1k|    if (p->feature_version < version) {
  ------------------
  |  Branch (337:9): [True: 0, False: 89.1k]
  ------------------
  338|      0|        p->error_indicator = 1;
  339|      0|        return RAISE_SYNTAX_ERROR("%s only supported in Python 3.%i and greater",
  ------------------
  |  |  233|      0|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  340|      0|                                  msg, version);
  341|      0|    }
  342|  89.1k|    return node;
  343|  89.1k|}
parser.c:CHECK_CALL:
  252|   228k|{
  253|   228k|    if (result == NULL) {
  ------------------
  |  Branch (253:9): [True: 0, False: 228k]
  ------------------
  254|      0|        assert(PyErr_Occurred());
  ------------------
  |  Branch (254:9): [True: 0, False: 0]
  ------------------
  255|      0|        p->error_indicator = 1;
  256|      0|    }
  257|   228k|    return result;
  258|   228k|}
parser.c:RAISE_ERROR_KNOWN_LOCATION:
  224|  1.72k|{
  225|  1.72k|    va_list va;
  226|  1.72k|    va_start(va, errmsg);
  227|  1.72k|    Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|  1.72k|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (227:31): [True: 0, False: 1.72k]
  ------------------
  228|  1.72k|    Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|  1.72k|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|  1.05k|#define CURRENT_POS (-5)
  ------------------
  |  Branch (228:35): [True: 1.05k, False: 674]
  ------------------
  229|  1.72k|    _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va);
  230|  1.72k|    va_end(va);
  231|       |    return NULL;
  232|  1.72k|}
parser.c:_PyPegen_tokens_are_adjacent:
  246|     28|{
  247|     28|    return (a->end_lineno == b->lineno) && (a->end_col_offset == b->col_offset);
  ------------------
  |  Branch (247:12): [True: 25, False: 3]
  |  Branch (247:44): [True: 15, False: 10]
  ------------------
  248|     28|}
parser.c:_RAISE_SYNTAX_ERROR_INVALID_TARGET:
  278|    810|{
  279|    810|    expr_ty invalid_target = CHECK_NULL_ALLOWED(expr_ty, _PyPegen_get_invalid_target(e, type));
  ------------------
  |  |  272|    810|#define CHECK_NULL_ALLOWED(type, result) ((type) CHECK_CALL_NULL_ALLOWED(p, result))
  ------------------
  280|    810|    if (invalid_target != NULL) {
  ------------------
  |  Branch (280:9): [True: 112, False: 698]
  ------------------
  281|    112|        const char *msg;
  282|    112|        if (type == STAR_TARGETS || type == FOR_TARGETS) {
  ------------------
  |  Branch (282:13): [True: 79, False: 33]
  |  Branch (282:37): [True: 11, False: 22]
  ------------------
  283|     90|            msg = "cannot assign to %s";
  284|     90|        }
  285|     22|        else {
  286|     22|            msg = "cannot delete %s";
  287|     22|        }
  288|    112|        return RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
  ------------------
  |  |  239|    112|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  289|    112|            invalid_target,
  290|    112|            msg,
  291|    112|            _PyPegen_get_expr_name(invalid_target)
  292|    112|        );
  293|      0|        return RAISE_SYNTAX_ERROR_KNOWN_LOCATION(invalid_target, "invalid syntax");
  ------------------
  |  |  239|      0|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  294|    112|    }
  295|    698|    return NULL;
  296|    810|}
parser.c:CHECK_CALL_NULL_ALLOWED:
  264|  18.7k|{
  265|  18.7k|    if (result == NULL && PyErr_Occurred()) {
  ------------------
  |  Branch (265:9): [True: 9.33k, False: 9.44k]
  |  Branch (265:27): [True: 493, False: 8.83k]
  ------------------
  266|    493|        p->error_indicator = 1;
  267|    493|    }
  268|  18.7k|    return result;
  269|  18.7k|}
parser.c:NEW_TYPE_COMMENT:
  312|  32.1k|{
  313|  32.1k|    if (tc == NULL) {
  ------------------
  |  Branch (313:9): [True: 31.1k, False: 1.00k]
  ------------------
  314|  31.1k|        return NULL;
  315|  31.1k|    }
  316|  1.00k|    const char *bytes = PyBytes_AsString(tc->bytes);
  317|  1.00k|    if (bytes == NULL) {
  ------------------
  |  Branch (317:9): [True: 0, False: 1.00k]
  ------------------
  318|      0|        goto error;
  319|      0|    }
  320|  1.00k|    PyObject *tco = _PyPegen_new_type_comment(p, bytes);
  321|  1.00k|    if (tco == NULL) {
  ------------------
  |  Branch (321:9): [True: 4, False: 999]
  ------------------
  322|      4|        goto error;
  323|      4|    }
  324|    999|    return tco;
  325|      4| error:
  326|      4|    p->error_indicator = 1;  // Inline CHECK_CALL
  327|       |    return NULL;
  328|  1.00k|}
action_helpers.c:RAISE_ERROR_KNOWN_LOCATION:
  224|    286|{
  225|    286|    va_list va;
  226|    286|    va_start(va, errmsg);
  227|    286|    Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|    286|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (227:31): [True: 0, False: 286]
  ------------------
  228|    286|    Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|    286|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (228:35): [True: 0, False: 286]
  ------------------
  229|    286|    _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va);
  230|    286|    va_end(va);
  231|       |    return NULL;
  232|    286|}
string_parser.c:RAISE_ERROR_KNOWN_LOCATION:
  224|     12|{
  225|     12|    va_list va;
  226|     12|    va_start(va, errmsg);
  227|     12|    Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|     12|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (227:31): [True: 0, False: 12]
  ------------------
  228|     12|    Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|     12|#define CURRENT_POS (-5)
  ------------------
                  Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1);
  ------------------
  |  |   30|      0|#define CURRENT_POS (-5)
  ------------------
  |  Branch (228:35): [True: 0, False: 12]
  ------------------
  229|     12|    _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va);
  230|     12|    va_end(va);
  231|       |    return NULL;
  232|     12|}

_Pypegen_tokenizer_error:
   25|  2.98k|{
   26|  2.98k|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (26:9): [True: 1.70k, False: 1.28k]
  ------------------
   27|  1.70k|        return -1;
   28|  1.70k|    }
   29|       |
   30|  1.28k|    const char *msg = NULL;
   31|  1.28k|    PyObject* errtype = PyExc_SyntaxError;
   32|  1.28k|    Py_ssize_t col_offset = -1;
   33|  1.28k|    p->error_indicator = 1;
   34|  1.28k|    _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
   35|  1.28k|    switch (info.status) {
   36|      0|        case E_TOKEN:
  ------------------
  |  |   25|      0|#define E_TOKEN          13      /* Bad token */
  ------------------
  |  Branch (36:9): [True: 0, False: 1.28k]
  ------------------
   37|      0|            msg = "invalid token";
   38|      0|            break;
   39|  1.16k|        case E_EOF:
  ------------------
  |  |   23|  1.16k|#define E_EOF            11      /* End Of File */
  ------------------
  |  Branch (39:9): [True: 1.16k, False: 122]
  ------------------
   40|  1.16k|            if (info.level) {
  ------------------
  |  Branch (40:17): [True: 1.15k, False: 12]
  ------------------
   41|  1.15k|                raise_unclosed_parentheses_error(p);
   42|  1.15k|            } else {
   43|     12|                RAISE_SYNTAX_ERROR("unexpected EOF while parsing");
  ------------------
  |  |  233|     12|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
   44|     12|            }
   45|  1.16k|            return -1;
   46|      1|        case E_DEDENT:
  ------------------
  |  |   33|      1|#define E_DEDENT         21      /* No matching outer block for dedent */
  ------------------
  |  Branch (46:9): [True: 1, False: 1.28k]
  ------------------
   47|      1|            RAISE_INDENTATION_ERROR("unindent does not match any outer indentation level");
  ------------------
  |  |  234|      1|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  ------------------
   48|      1|            return -1;
   49|      0|        case E_INTR:
  ------------------
  |  |   24|      0|#define E_INTR           12      /* Interrupted */
  ------------------
  |  Branch (49:9): [True: 0, False: 1.28k]
  ------------------
   50|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (50:17): [True: 0, False: 0]
  ------------------
   51|      0|                PyErr_SetNone(PyExc_KeyboardInterrupt);
   52|      0|            }
   53|      0|            return -1;
   54|      0|        case E_NOMEM:
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
  |  Branch (54:9): [True: 0, False: 1.28k]
  ------------------
   55|      0|            PyErr_NoMemory();
   56|      0|            return -1;
   57|      2|        case E_TABSPACE:
  ------------------
  |  |   30|      2|#define E_TABSPACE       18      /* Inconsistent mixing of tabs and spaces */
  ------------------
  |  Branch (57:9): [True: 2, False: 1.28k]
  ------------------
   58|      2|            errtype = PyExc_TabError;
   59|      2|            msg = "inconsistent use of tabs and spaces in indentation";
   60|      2|            break;
   61|      0|        case E_TOODEEP:
  ------------------
  |  |   32|      0|#define E_TOODEEP        20      /* Too many indentation levels */
  ------------------
  |  Branch (61:9): [True: 0, False: 1.28k]
  ------------------
   62|      0|            errtype = PyExc_IndentationError;
   63|      0|            msg = "too many levels of indentation";
   64|      0|            break;
   65|    119|        case E_LINECONT: {
  ------------------
  |  |   37|    119|#define E_LINECONT       25      /* Unexpected characters after a line continuation */
  ------------------
  |  Branch (65:9): [True: 119, False: 1.16k]
  ------------------
   66|    119|            col_offset = info.cursor - info.line_span.start - 1;
   67|    119|            msg = "unexpected character after line continuation character";
   68|    119|            break;
   69|      0|        }
   70|      0|        case E_COLUMNOVERFLOW:
  ------------------
  |  |   40|      0|#define E_COLUMNOVERFLOW 29      /* Column offset overflow */
  ------------------
  |  Branch (70:9): [True: 0, False: 1.28k]
  ------------------
   71|      0|            PyErr_SetString(PyExc_OverflowError,
   72|      0|                    "Parser column offset overflow - source line is too big");
   73|      0|            return -1;
   74|      0|        default:
  ------------------
  |  Branch (74:9): [True: 0, False: 1.28k]
  ------------------
   75|      0|            msg = "unknown parsing error";
   76|  1.28k|    }
   77|       |
   78|    121|    RAISE_ERROR_KNOWN_LOCATION(p, errtype, info.location.lineno,
   79|    121|                               col_offset >= 0 ? col_offset : 0,
  ------------------
  |  Branch (79:32): [True: 119, False: 2]
  ------------------
   80|    121|                               info.location.lineno, -1, msg);
   81|    121|    return -1;
   82|  1.28k|}
_Pypegen_raise_decode_error:
   86|    876|{
   87|    876|    assert(PyErr_Occurred());
  ------------------
  |  Branch (87:5): [True: 876, False: 0]
  ------------------
   88|    876|    const char *errtype = NULL;
   89|    876|    if (PyErr_ExceptionMatches(PyExc_UnicodeError)) {
  ------------------
  |  Branch (89:9): [True: 856, False: 20]
  ------------------
   90|    856|        errtype = "unicode error";
   91|    856|    }
   92|     20|    else if (PyErr_ExceptionMatches(PyExc_ValueError)) {
  ------------------
  |  Branch (92:14): [True: 8, False: 12]
  ------------------
   93|      8|        errtype = "value error";
   94|      8|    }
   95|    876|    if (errtype) {
  ------------------
  |  Branch (95:9): [True: 864, False: 12]
  ------------------
   96|    864|        PyObject *type;
   97|    864|        PyObject *value;
   98|    864|        PyObject *tback;
   99|    864|        PyObject *errstr;
  100|    864|        PyErr_Fetch(&type, &value, &tback);
  101|    864|        errstr = PyObject_Str(value);
  102|    864|        if (errstr) {
  ------------------
  |  Branch (102:13): [True: 864, False: 0]
  ------------------
  103|    864|            RAISE_SYNTAX_ERROR("(%s) %U", errtype, errstr);
  ------------------
  |  |  233|    864|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  104|    864|            Py_DECREF(errstr);
  ------------------
  |  |  430|    864|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    864|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    864|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  105|    864|        }
  106|      0|        else {
  107|      0|            PyErr_Clear();
  108|      0|            RAISE_SYNTAX_ERROR("(%s) unknown error", errtype);
  ------------------
  |  |  233|      0|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  109|      0|        }
  110|    864|        Py_XDECREF(type);
  ------------------
  |  |  524|    864|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    864|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    864|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|    864|        Py_XDECREF(value);
  ------------------
  |  |  524|    864|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    864|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    864|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|    864|        Py_XDECREF(tback);
  ------------------
  |  |  524|    864|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    864|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    864|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|    864|    }
  114|       |
  115|    876|    return -1;
  116|    876|}
_PyPegen_raise_error:
  186|  2.45k|{
  187|       |    // Bail out if we already have an error set.
  188|  2.45k|    if (p->error_indicator && PyErr_Occurred()) {
  ------------------
  |  Branch (188:9): [True: 742, False: 1.71k]
  |  Branch (188:31): [True: 161, False: 581]
  ------------------
  189|    161|        return NULL;
  190|    161|    }
  191|  2.29k|    if (p->fill == 0) {
  ------------------
  |  Branch (191:9): [True: 0, False: 2.29k]
  ------------------
  192|      0|        va_list va;
  193|      0|        va_start(va, errmsg);
  194|      0|        _PyPegen_raise_error_known_location(p, errtype, 0, 0, 0, -1, errmsg, va);
  195|      0|        va_end(va);
  196|      0|        return NULL;
  197|      0|    }
  198|  2.29k|    if (use_mark && p->mark == p->fill && _PyPegen_fill_token(p) < 0) {
  ------------------
  |  Branch (198:9): [True: 201, False: 2.09k]
  |  Branch (198:21): [True: 0, False: 201]
  |  Branch (198:43): [True: 0, False: 0]
  ------------------
  199|      0|        p->error_indicator = 1;
  200|      0|        return NULL;
  201|      0|    }
  202|  2.29k|    Token *t = p->known_err_token != NULL
  ------------------
  |  Branch (202:16): [True: 0, False: 2.29k]
  ------------------
  203|  2.29k|                   ? p->known_err_token
  204|  2.29k|                   : p->tokens[use_mark ? p->mark : p->fill - 1];
  ------------------
  |  Branch (204:32): [True: 201, False: 2.09k]
  ------------------
  205|  2.29k|    Py_ssize_t col_offset;
  206|  2.29k|    Py_ssize_t end_col_offset = -1;
  207|  2.29k|    if (t->col_offset == -1) {
  ------------------
  |  Branch (207:9): [True: 1.32k, False: 974]
  ------------------
  208|  1.32k|        _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
  209|  1.32k|        if (info.diagnostic.location.lineno != 0) {
  ------------------
  |  Branch (209:13): [True: 0, False: 1.32k]
  ------------------
  210|      0|            col_offset = info.diagnostic.location.byte_col;
  211|  1.32k|        } else if (info.cursor == info.input_span.start) {
  ------------------
  |  Branch (211:20): [True: 8, False: 1.31k]
  ------------------
  212|      8|            col_offset = 0;
  213|  1.31k|        } else {
  214|  1.31k|            col_offset = Py_SAFE_DOWNCAST(
  ------------------
  |  |  247|  1.31k|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  1.31k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  215|  1.31k|                info.cursor - info.line_span.start, intptr_t, int);
  216|  1.31k|        }
  217|  1.32k|    } else {
  218|    974|        col_offset = t->col_offset + 1;
  219|    974|    }
  220|       |
  221|  2.29k|    if (t->end_col_offset != -1) {
  ------------------
  |  Branch (221:9): [True: 835, False: 1.45k]
  ------------------
  222|    835|        end_col_offset = t->end_col_offset + 1;
  223|    835|    }
  224|       |
  225|  2.29k|    va_list va;
  226|  2.29k|    va_start(va, errmsg);
  227|  2.29k|    _PyPegen_raise_error_known_location(p, errtype, t->lineno, col_offset, t->end_lineno, end_col_offset, errmsg, va);
  228|  2.29k|    va_end(va);
  229|       |
  230|       |    return NULL;
  231|  2.29k|}
_PyPegen_raise_error_known_location:
  250|  9.81k|{
  251|       |    // Bail out if we already have an error set.
  252|  9.81k|    if (p->error_indicator && PyErr_Occurred()) {
  ------------------
  |  Branch (252:9): [True: 2.97k, False: 6.83k]
  |  Branch (252:31): [True: 1.02k, False: 1.95k]
  ------------------
  253|  1.02k|        return NULL;
  254|  1.02k|    }
  255|  8.79k|    PyObject *value = NULL;
  256|  8.79k|    PyObject *errstr = NULL;
  257|  8.79k|    PyObject *error_line = NULL;
  258|  8.79k|    PyObject *tmp = NULL;
  259|  8.79k|    p->error_indicator = 1;
  260|  8.79k|    _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
  261|  8.79k|    _PyTok_Loc location = info.diagnostic.location.lineno != 0
  ------------------
  |  Branch (261:27): [True: 139, False: 8.65k]
  ------------------
  262|  8.79k|        ? info.diagnostic.location : info.location;
  263|  8.79k|    _PyTok_Span text_span = info.diagnostic.location.lineno != 0
  ------------------
  |  Branch (263:29): [True: 139, False: 8.65k]
  ------------------
  264|  8.79k|        ? info.diagnostic.text_span : info.line_span;
  265|       |
  266|  8.79k|    if (end_lineno == CURRENT_POS) {
  ------------------
  |  |   30|  8.79k|#define CURRENT_POS (-5)
  ------------------
  |  Branch (266:9): [True: 29, False: 8.76k]
  ------------------
  267|     29|        end_lineno = location.lineno;
  268|     29|    }
  269|  8.79k|    if (end_col_offset == CURRENT_POS) {
  ------------------
  |  |   30|  8.79k|#define CURRENT_POS (-5)
  ------------------
  |  Branch (269:9): [True: 29, False: 8.76k]
  ------------------
  270|     29|        end_col_offset = location.byte_col;
  271|     29|    }
  272|       |
  273|  8.79k|    errstr = PyUnicode_FromFormatV(errmsg, va);
  274|  8.79k|    if (!errstr) {
  ------------------
  |  Branch (274:9): [True: 0, False: 8.79k]
  ------------------
  275|      0|        goto error;
  276|      0|    }
  277|       |
  278|  8.79k|    if (info.is_interactive && _PyTokenizer_RetainedSource(p->tok) != NULL) {
  ------------------
  |  Branch (278:9): [True: 0, False: 8.79k]
  |  Branch (278:32): [True: 0, False: 0]
  ------------------
  279|      0|        error_line = get_error_line_from_source(p, lineno);
  280|      0|    }
  281|  8.79k|    else if (p->start_rule == Py_file_input) {
  ------------------
  |  |    9|  8.79k|#define Py_file_input 257
  ------------------
  |  Branch (281:14): [True: 4.72k, False: 4.06k]
  ------------------
  282|  4.72k|        error_line = _PyErr_ProgramDecodedTextObject(info.filename,
  283|  4.72k|                                                     (int) lineno, info.encoding);
  284|  4.72k|    }
  285|       |
  286|  8.79k|    if (!error_line) {
  ------------------
  |  Branch (286:9): [True: 8.79k, False: 0]
  ------------------
  287|       |        /* PyErr_ProgramTextObject was not called or returned NULL. If it was not called,
  288|       |           then we need to find the error line from some other source, because
  289|       |           p->start_rule != Py_file_input. If it returned NULL, then it either unexpectedly
  290|       |           failed or we're parsing from a string or the REPL. There's a third edge case where
  291|       |           we're actually parsing from a file, which has an E_EOF SyntaxError and in that case
  292|       |           `PyErr_ProgramTextObject` fails because lineno points to last_file_line + 1, which
  293|       |           does not physically exist */
  294|  8.79k|        assert(!info.is_file || info.status == E_EOF);
  ------------------
  |  Branch (294:9): [True: 8.79k, False: 0]
  |  Branch (294:9): [True: 0, False: 0]
  ------------------
  295|       |
  296|  8.79k|        if (location.lineno <= lineno &&
  ------------------
  |  Branch (296:13): [True: 8.50k, False: 289]
  ------------------
  297|  8.50k|                info.input_span.end > info.input_span.start) {
  ------------------
  |  Branch (297:17): [True: 8.49k, False: 6]
  ------------------
  298|  8.49k|            Py_ssize_t size;
  299|  8.49k|            const char *line = _PyTokenizer_SpanView(
  300|  8.49k|                p->tok, text_span, &size);
  301|  8.49k|            error_line = PyUnicode_DecodeUTF8(line, size, "replace");
  302|  8.49k|        }
  303|    295|        else if (!info.is_file) {
  ------------------
  |  Branch (303:18): [True: 295, False: 0]
  ------------------
  304|    295|            error_line = get_error_line_from_source(p, lineno);
  305|    295|        }
  306|      0|        else {
  307|      0|            error_line = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  308|      0|        }
  309|  8.79k|        if (!error_line) {
  ------------------
  |  Branch (309:13): [True: 0, False: 8.79k]
  ------------------
  310|      0|            goto error;
  311|      0|        }
  312|  8.79k|    }
  313|       |
  314|  8.79k|    Py_ssize_t col_number = col_offset;
  315|  8.79k|    Py_ssize_t end_col_number = end_col_offset;
  316|       |
  317|  8.79k|    col_number = _PyPegen_byte_offset_to_character_offset(error_line, col_offset);
  318|  8.79k|    if (col_number < 0) {
  ------------------
  |  Branch (318:9): [True: 0, False: 8.79k]
  ------------------
  319|      0|        goto error;
  320|      0|    }
  321|       |
  322|  8.79k|    if (end_col_offset > 0) {
  ------------------
  |  Branch (322:9): [True: 5.88k, False: 2.90k]
  ------------------
  323|  5.88k|        end_col_number = _PyPegen_byte_offset_to_character_offset(error_line, end_col_offset);
  324|  5.88k|        if (end_col_number < 0) {
  ------------------
  |  Branch (324:13): [True: 0, False: 5.88k]
  ------------------
  325|      0|            goto error;
  326|      0|        }
  327|  5.88k|    }
  328|       |
  329|  8.79k|    tmp = Py_BuildValue("(OnnNnn)", info.filename, lineno, col_number, error_line, end_lineno, end_col_number);
  330|  8.79k|    if (!tmp) {
  ------------------
  |  Branch (330:9): [True: 0, False: 8.79k]
  ------------------
  331|      0|        goto error;
  332|      0|    }
  333|  8.79k|    value = _PyTuple_FromPair(errstr, tmp);
  334|  8.79k|    Py_DECREF(tmp);
  ------------------
  |  |  430|  8.79k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|  8.79k|    if (!value) {
  ------------------
  |  Branch (335:9): [True: 0, False: 8.79k]
  ------------------
  336|      0|        goto error;
  337|      0|    }
  338|  8.79k|    PyErr_SetObject(errtype, value);
  339|       |
  340|  8.79k|    Py_DECREF(errstr);
  ------------------
  |  |  430|  8.79k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|  8.79k|    Py_DECREF(value);
  ------------------
  |  |  430|  8.79k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.79k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.79k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|  8.79k|    return NULL;
  343|       |
  344|      0|error:
  345|      0|    Py_XDECREF(errstr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|      0|    Py_XDECREF(error_line);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|       |    return NULL;
  348|  8.79k|}
_Pypegen_set_syntax_error:
  351|  9.05k|_Pypegen_set_syntax_error(Parser* p, Token* last_token) {
  352|  9.05k|    _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
  353|       |    // Existing syntax error
  354|  9.05k|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (354:9): [True: 4.94k, False: 4.11k]
  ------------------
  355|       |        // Prioritize tokenizer errors to custom syntax errors raised
  356|       |        // on the second phase only if the errors come from the parser.
  357|  4.94k|        int is_tok_ok = (info.status == E_DONE || info.status == E_OK);
  ------------------
  |  |   28|  9.89k|#define E_DONE           16      /* Parsing complete */
  ------------------
                      int is_tok_ok = (info.status == E_DONE || info.status == E_OK);
  ------------------
  |  |   22|  4.94k|#define E_OK             10      /* No error */
  ------------------
  |  Branch (357:26): [True: 0, False: 4.94k]
  |  Branch (357:51): [True: 1.71k, False: 3.22k]
  ------------------
  358|  4.94k|        if (is_tok_ok && PyErr_ExceptionMatches(PyExc_SyntaxError)) {
  ------------------
  |  Branch (358:13): [True: 1.71k, False: 3.22k]
  |  Branch (358:26): [True: 1.66k, False: 50]
  ------------------
  359|  1.66k|            _PyPegen_tokenize_full_source_to_check_for_errors(p);
  360|  1.66k|        }
  361|       |        // Propagate the existing syntax error.
  362|  4.94k|        return;
  363|  4.94k|    }
  364|       |    // Initialization error
  365|  4.11k|    if (p->fill == 0) {
  ------------------
  |  Branch (365:9): [True: 0, False: 4.11k]
  ------------------
  366|      0|        RAISE_SYNTAX_ERROR("error at start before reading any input");
  ------------------
  |  |  233|      0|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  367|      0|    }
  368|       |    // Parser encountered EOF (End of File) unexpectedtly
  369|  4.11k|    if (last_token->type == ERRORTOKEN && info.status == E_EOF) {
  ------------------
  |  |   83|  8.22k|#define ERRORTOKEN      67
  ------------------
                  if (last_token->type == ERRORTOKEN && info.status == E_EOF) {
  ------------------
  |  |   23|      0|#define E_EOF            11      /* End Of File */
  ------------------
  |  Branch (369:9): [True: 0, False: 4.11k]
  |  Branch (369:43): [True: 0, False: 0]
  ------------------
  370|      0|        if (info.level) {
  ------------------
  |  Branch (370:13): [True: 0, False: 0]
  ------------------
  371|      0|            raise_unclosed_parentheses_error(p);
  372|      0|        } else {
  373|      0|            RAISE_SYNTAX_ERROR("unexpected EOF while parsing");
  ------------------
  |  |  233|      0|#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, 0, msg, ##__VA_ARGS__)
  ------------------
  374|      0|        }
  375|      0|        return;
  376|      0|    }
  377|       |    // Indentation error in the tokenizer
  378|  4.11k|    if (last_token->type == INDENT || last_token->type == DEDENT) {
  ------------------
  |  |   21|  8.22k|#define INDENT          5
  ------------------
                  if (last_token->type == INDENT || last_token->type == DEDENT) {
  ------------------
  |  |   22|  4.04k|#define DEDENT          6
  ------------------
  |  Branch (378:9): [True: 63, False: 4.04k]
  |  Branch (378:39): [True: 2, False: 4.04k]
  ------------------
  379|     65|        RAISE_INDENTATION_ERROR(last_token->type == INDENT ? "unexpected indent" : "unexpected unindent");
  ------------------
  |  |  234|    130|#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, 0, msg, ##__VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (234:94): [True: 63, False: 2]
  |  |  ------------------
  ------------------
  380|     65|        return;
  381|     65|    }
  382|       |    // Unknown error (generic case)
  383|       |
  384|       |    // Use the last token we found on the first pass to avoid reporting
  385|       |    // incorrect locations for generic syntax errors just because we reached
  386|       |    // further away when trying to find specific syntax errors in the second
  387|       |    // pass.
  388|  4.04k|    RAISE_SYNTAX_ERROR_KNOWN_LOCATION(last_token, "invalid syntax");
  ------------------
  |  |  239|  4.04k|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  389|       |    // _PyPegen_tokenize_full_source_to_check_for_errors will override the existing
  390|       |    // generic SyntaxError we just raised if errors are found.
  391|  4.04k|    _PyPegen_tokenize_full_source_to_check_for_errors(p);
  392|  4.04k|}
_Pypegen_stack_overflow:
  396|     54|{
  397|     54|    p->error_indicator = 1;
  398|     54|    PyErr_SetString(PyExc_MemoryError,
  399|     54|        "Parser stack overflowed - Python source too complex to parse");
  400|     54|}
pegen_errors.c:raise_unclosed_parentheses_error:
   13|  1.24k|raise_unclosed_parentheses_error(Parser *p) {
   14|  1.24k|       _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
   15|  1.24k|       int error_lineno = info.delimiter_loc.lineno;
   16|  1.24k|       int error_col = info.delimiter_loc.byte_col;
   17|  1.24k|       RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError,
   18|  1.24k|                                  error_lineno, error_col, error_lineno, -1,
   19|  1.24k|                                  "'%c' was never closed",
   20|  1.24k|                                  info.delimiter);
   21|  1.24k|}
pegen_errors.c:get_error_line_from_source:
  235|    295|{
  236|    295|    if (_PyTokenizer_RetainedSource(p->tok) == NULL) {
  ------------------
  |  Branch (236:9): [True: 0, False: 295]
  ------------------
  237|      0|        return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  238|      0|    }
  239|    295|    Py_ssize_t relative_lineno = p->starting_lineno ? lineno - p->starting_lineno + 1 : lineno;
  ------------------
  |  Branch (239:34): [True: 0, False: 295]
  ------------------
  240|    295|    Py_ssize_t len;
  241|    295|    const char *line = _PyTokenizer_LineView(p->tok, relative_lineno, &len);
  242|    295|    return PyUnicode_DecodeUTF8(line, len, "replace");
  243|    295|}
pegen_errors.c:_PyPegen_tokenize_full_source_to_check_for_errors:
  119|  5.71k|_PyPegen_tokenize_full_source_to_check_for_errors(Parser *p) {
  120|       |    // Tokenize the whole input to see if there are any tokenization
  121|       |    // errors such as mismatching parentheses. These will get priority
  122|       |    // over generic syntax errors only if the line number of the error is
  123|       |    // before the one that we had for the generic error.
  124|       |
  125|       |    // We don't want to tokenize to the end for interactive input
  126|  5.71k|    if (_PyTokenizer_IsInteractive(p->tok)) {
  ------------------
  |  Branch (126:9): [True: 0, False: 5.71k]
  ------------------
  127|      0|        return 0;
  128|      0|    }
  129|       |
  130|  5.71k|    PyObject *type, *value, *traceback;
  131|  5.71k|    PyErr_Fetch(&type, &value, &traceback);
  132|       |
  133|  5.71k|    Token *current_token = p->known_err_token != NULL ? p->known_err_token : p->tokens[p->fill - 1];
  ------------------
  |  Branch (133:28): [True: 0, False: 5.71k]
  ------------------
  134|  5.71k|    Py_ssize_t current_err_line = current_token->lineno;
  135|       |
  136|  5.71k|    int ret = 0;
  137|  5.71k|    struct token new_token;
  138|  5.71k|    _PyToken_Init(&new_token);
  139|       |
  140|   178k|    for (;;) {
  141|   178k|        _PyTokenizer_Get(p->tok, &new_token);
  142|   178k|        switch (new_token.type) {
  143|  3.25k|            case ERRORTOKEN: {
  ------------------
  |  |   83|  3.25k|#define ERRORTOKEN      67
  ------------------
  |  Branch (143:13): [True: 3.25k, False: 174k]
  ------------------
  144|  3.25k|                if (PyErr_Occurred()) {
  ------------------
  |  Branch (144:21): [True: 1.61k, False: 1.64k]
  ------------------
  145|  1.61k|                    ret = -1;
  146|  1.61k|                    goto exit;
  147|  1.61k|                }
  148|  1.64k|                _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
  149|  1.64k|                if (info.level != 0) {
  ------------------
  |  Branch (149:21): [True: 1.57k, False: 65]
  ------------------
  150|  1.57k|                    int error_lineno = info.delimiter_loc.lineno;
  151|  1.57k|                    if (current_err_line > error_lineno) {
  ------------------
  |  Branch (151:25): [True: 98, False: 1.47k]
  ------------------
  152|     98|                        raise_unclosed_parentheses_error(p);
  153|     98|                        ret = -1;
  154|     98|                        goto exit;
  155|     98|                    }
  156|  1.57k|                }
  157|  1.54k|                break;
  158|  1.64k|            }
  159|  2.45k|            case ENDMARKER:
  ------------------
  |  |   16|  2.45k|#define ENDMARKER       0
  ------------------
  |  Branch (159:13): [True: 2.45k, False: 175k]
  ------------------
  160|  2.45k|                break;
  161|   172k|            default:
  ------------------
  |  Branch (161:13): [True: 172k, False: 5.71k]
  ------------------
  162|   172k|                continue;
  163|   178k|        }
  164|  4.00k|        break;
  165|   178k|    }
  166|       |
  167|       |
  168|  5.71k|exit:
  169|  5.71k|    _PyToken_Free(&new_token);
  170|  5.71k|    _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
  171|       |    // Preserve expression errors over later formatted-string errors.
  172|  5.71k|    if (PyErr_Occurred() && !info.in_formatted_string) {
  ------------------
  |  Branch (172:9): [True: 1.71k, False: 4.00k]
  |  Branch (172:29): [True: 1.47k, False: 239]
  ------------------
  173|  1.47k|        Py_XDECREF(value);
  ------------------
  |  |  524|  1.47k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  1.47k|        Py_XDECREF(type);
  ------------------
  |  |  524|  1.47k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  1.47k|        Py_XDECREF(traceback);
  ------------------
  |  |  524|  1.47k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.47k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.47k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|  4.24k|    } else {
  177|  4.24k|        PyErr_Restore(type, value, traceback);
  178|  4.24k|    }
  179|  5.71k|    return ret;
  180|  5.71k|}

_PyPegen_decode_string:
  239|   138k|{
  240|   138k|    if (raw) {
  ------------------
  |  Branch (240:9): [True: 105k, False: 32.8k]
  ------------------
  241|   105k|        return PyUnicode_DecodeUTF8Stateful(s, (Py_ssize_t)len, NULL, NULL);
  242|   105k|    }
  243|  32.8k|    return decode_unicode_with_escapes(p, s, len, t);
  244|   138k|}
_PyPegen_parse_string:
  251|  79.9k|{
  252|  79.9k|    const char *s = PyBytes_AsString(t->bytes);
  253|  79.9k|    if (s == NULL) {
  ------------------
  |  Branch (253:9): [True: 0, False: 79.9k]
  ------------------
  254|      0|        return NULL;
  255|      0|    }
  256|       |
  257|  79.9k|    size_t len;
  258|  79.9k|    int quote = Py_CHARMASK(*s);
  ------------------
  |  |  163|  79.9k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  259|  79.9k|    int bytesmode = 0;
  260|  79.9k|    int rawmode = 0;
  261|       |
  262|  79.9k|    if (Py_ISALPHA(quote)) {
  ------------------
  |  |   23|  79.9k|#define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |  163|  79.9k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |   10|  79.9k|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|  79.9k|#define PY_CTF_LOWER  0x01
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    9|  79.9k|#define PY_CTF_UPPER  0x02
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (23:24): [True: 30.6k, False: 49.3k]
  |  |  ------------------
  ------------------
  263|  67.5k|        while (!bytesmode || !rawmode) {
  ------------------
  |  Branch (263:16): [True: 44.1k, False: 23.4k]
  |  Branch (263:30): [True: 17.2k, False: 6.20k]
  ------------------
  264|  61.3k|            if (quote == 'b' || quote == 'B') {
  ------------------
  |  Branch (264:17): [True: 16.9k, False: 44.3k]
  |  Branch (264:33): [True: 5.34k, False: 38.9k]
  ------------------
  265|  22.3k|                quote =(unsigned char)*++s;
  266|  22.3k|                bytesmode = 1;
  267|  22.3k|            }
  268|  38.9k|            else if (quote == 'u' || quote == 'U') {
  ------------------
  |  Branch (268:22): [True: 4.96k, False: 34.0k]
  |  Branch (268:38): [True: 589, False: 33.4k]
  ------------------
  269|  5.54k|                quote = (unsigned char)*++s;
  270|  5.54k|            }
  271|  33.4k|            else if (quote == 'r' || quote == 'R') {
  ------------------
  |  Branch (271:22): [True: 8.88k, False: 24.5k]
  |  Branch (271:38): [True: 73, False: 24.4k]
  ------------------
  272|  8.96k|                quote = (unsigned char)*++s;
  273|  8.96k|                rawmode = 1;
  274|  8.96k|            }
  275|  24.4k|            else {
  276|  24.4k|                break;
  277|  24.4k|            }
  278|  61.3k|        }
  279|  30.6k|    }
  280|       |
  281|  79.9k|    if (quote != '\'' && quote != '\"') {
  ------------------
  |  Branch (281:9): [True: 56.4k, False: 23.5k]
  |  Branch (281:26): [True: 0, False: 56.4k]
  ------------------
  282|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  283|      0|        return NULL;
  284|      0|    }
  285|       |
  286|       |    /* Skip the leading quote char. */
  287|  79.9k|    s++;
  288|  79.9k|    len = strlen(s);
  289|       |    // gh-120155: 's' contains at least the trailing quote,
  290|       |    // so the code '--len' below is safe.
  291|  79.9k|    assert(len >= 1);
  ------------------
  |  Branch (291:5): [True: 79.9k, False: 0]
  ------------------
  292|       |
  293|  79.9k|    if (len > INT_MAX) {
  ------------------
  |  Branch (293:9): [True: 0, False: 79.9k]
  ------------------
  294|      0|        PyErr_SetString(PyExc_OverflowError, "string to parse is too long");
  295|      0|        return NULL;
  296|      0|    }
  297|  79.9k|    if (s[--len] != quote) {
  ------------------
  |  Branch (297:9): [True: 0, False: 79.9k]
  ------------------
  298|       |        /* Last quote char must match the first. */
  299|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  300|      0|        return NULL;
  301|      0|    }
  302|  79.9k|    if (len >= 4 && s[0] == quote && s[1] == quote) {
  ------------------
  |  Branch (302:9): [True: 35.3k, False: 44.6k]
  |  Branch (302:21): [True: 13.5k, False: 21.8k]
  |  Branch (302:38): [True: 13.5k, False: 0]
  ------------------
  303|       |        /* A triple quoted string. We've already skipped one quote at
  304|       |           the start and one at the end of the string. Now skip the
  305|       |           two at the start. */
  306|  13.5k|        s += 2;
  307|  13.5k|        len -= 2;
  308|       |        /* And check that the last two match. */
  309|  13.5k|        if (s[--len] != quote || s[--len] != quote) {
  ------------------
  |  Branch (309:13): [True: 0, False: 13.5k]
  |  Branch (309:34): [True: 0, False: 13.5k]
  ------------------
  310|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
  311|      0|            return NULL;
  312|      0|        }
  313|  13.5k|    }
  314|       |
  315|       |    /* Avoid invoking escape decoding routines if possible. */
  316|  79.9k|    rawmode = rawmode || strchr(s, '\\') == NULL;
  ------------------
  |  Branch (316:15): [True: 8.96k, False: 71.0k]
  |  Branch (316:26): [True: 57.4k, False: 13.5k]
  ------------------
  317|  79.9k|    if (bytesmode) {
  ------------------
  |  Branch (317:9): [True: 22.3k, False: 57.6k]
  ------------------
  318|       |        /* Disallow non-ASCII characters. */
  319|  22.3k|        const char *ch;
  320|   546k|        for (ch = s; *ch; ch++) {
  ------------------
  |  Branch (320:22): [True: 523k, False: 22.3k]
  ------------------
  321|   523k|            if (Py_CHARMASK(*ch) >= 0x80) {
  ------------------
  |  |  163|   523k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (321:17): [True: 12, False: 523k]
  ------------------
  322|     12|                RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
  ------------------
  |  |  239|     12|    RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__)
  ------------------
  323|     12|                                   t,
  324|     12|                                   "bytes can only contain ASCII "
  325|     12|                                   "literal characters");
  326|     12|                return NULL;
  327|     12|            }
  328|   523k|        }
  329|  22.3k|        if (rawmode) {
  ------------------
  |  Branch (329:13): [True: 16.1k, False: 6.14k]
  ------------------
  330|  16.1k|            return PyBytes_FromStringAndSize(s, (Py_ssize_t)len);
  331|  16.1k|        }
  332|  6.14k|        return decode_bytes_with_escapes(p, s, (Py_ssize_t)len, t);
  333|  22.3k|    }
  334|  57.6k|    return _PyPegen_decode_string(p, rawmode, s, len, t);
  335|  79.9k|}
string_parser.c:decode_unicode_with_escapes:
  136|  32.8k|{
  137|  32.8k|    PyObject *v;
  138|  32.8k|    char *p;
  139|  32.8k|    const char *end;
  140|       |
  141|       |    /* check for integer overflow */
  142|  32.8k|    if (len > (size_t)PY_SSIZE_T_MAX / 6) {
  ------------------
  |  |  137|  32.8k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (142:9): [True: 0, False: 32.8k]
  ------------------
  143|      0|        return NULL;
  144|      0|    }
  145|       |    /* "ä" (2 bytes) may become "\U000000E4" (10 bytes), or 1:5.
  146|       |     * "\ä" (3 bytes) may become "\u005c\U000000E4" (16 bytes), or ~1:6. */
  147|  32.8k|    Py_ssize_t alloc = (Py_ssize_t)len * 6;
  148|  32.8k|    char *buf = PyMem_Malloc(alloc);
  149|  32.8k|    if (buf == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 32.8k]
  ------------------
  150|      0|        return NULL;
  151|      0|    }
  152|  32.8k|    p = buf;
  153|  32.8k|    end = s + len;
  154|  1.87M|    while (s < end) {
  ------------------
  |  Branch (154:12): [True: 1.84M, False: 30.6k]
  ------------------
  155|  1.84M|        if (*s == '\\') {
  ------------------
  |  Branch (155:13): [True: 143k, False: 1.69M]
  ------------------
  156|   143k|            *p++ = *s++;
  157|   143k|            if (s >= end || *s & 0x80) {
  ------------------
  |  Branch (157:17): [True: 2.14k, False: 141k]
  |  Branch (157:29): [True: 2.75k, False: 138k]
  ------------------
  158|  4.89k|                memcpy(p, "u005c", 5);
  159|  4.89k|                p += 5;
  160|  4.89k|                if (s >= end) {
  ------------------
  |  Branch (160:21): [True: 2.14k, False: 2.75k]
  ------------------
  161|  2.14k|                    break;
  162|  2.14k|                }
  163|  4.89k|            }
  164|   143k|        }
  165|  1.83M|        if (*s & 0x80) {
  ------------------
  |  Branch (165:13): [True: 35.3k, False: 1.80M]
  ------------------
  166|  35.3k|            PyObject *w;
  167|  35.3k|            int kind;
  168|  35.3k|            const void *data;
  169|  35.3k|            Py_ssize_t w_len;
  170|  35.3k|            Py_ssize_t i;
  171|  35.3k|            w = decode_utf8(&s, end);
  172|  35.3k|            if (w == NULL) {
  ------------------
  |  Branch (172:17): [True: 15, False: 35.3k]
  ------------------
  173|     15|                PyMem_Free(buf);
  174|     15|                return NULL;
  175|     15|            }
  176|  35.3k|            kind = PyUnicode_KIND(w);
  ------------------
  |  |  258|  35.3k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  70.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 35.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  177|  35.3k|            data = PyUnicode_DATA(w);
  ------------------
  |  |  284|  35.3k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|  35.3k|            w_len = PyUnicode_GET_LENGTH(w);
  ------------------
  |  |  299|  35.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|   245k|            for (i = 0; i < w_len; i++) {
  ------------------
  |  Branch (179:25): [True: 210k, False: 35.3k]
  ------------------
  180|       |                // sprintf() writes a null byte: the buffer is large enough
  181|       |                // for that thanks to the overallocation.
  182|   210k|                assert((p + 11 - buf) <= alloc);
  ------------------
  |  Branch (182:17): [True: 210k, False: 0]
  ------------------
  183|   210k|                Py_UCS4 chr = PyUnicode_READ(kind, data, i);
  ------------------
  |  |  354|   210k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   210k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   210k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   210k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   210k|                   (index))
  ------------------
  184|   210k|                sprintf(p, "\\U%08x", chr);
  185|   210k|                p += 10;
  186|   210k|            }
  187|  35.3k|            Py_DECREF(w);
  ------------------
  |  |  430|  35.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  35.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|  35.3k|        }
  189|  1.80M|        else {
  190|  1.80M|            *p++ = *s++;
  191|  1.80M|        }
  192|  1.83M|    }
  193|  32.8k|    len = (size_t)(p - buf);
  194|       |
  195|  32.8k|    int first_invalid_escape_char;
  196|  32.8k|    const char *first_invalid_escape_ptr;
  197|  32.8k|    v = _PyUnicode_DecodeUnicodeEscapeInternal2(buf, (Py_ssize_t)len, NULL, NULL,
  198|  32.8k|                                                &first_invalid_escape_char,
  199|  32.8k|                                                &first_invalid_escape_ptr);
  200|       |
  201|       |    // HACK: later we can simply pass the line no, since we don't preserve the tokens
  202|       |    // when we are decoding the string but we preserve the line numbers.
  203|  32.8k|    if (v != NULL && first_invalid_escape_ptr != NULL && t != NULL) {
  ------------------
  |  Branch (203:9): [True: 32.7k, False: 86]
  |  Branch (203:22): [True: 10.2k, False: 22.4k]
  |  Branch (203:58): [True: 10.2k, False: 0]
  ------------------
  204|  10.2k|        if (warn_invalid_escape_sequence(parser, buf, first_invalid_escape_ptr, t) < 0) {
  ------------------
  |  Branch (204:13): [True: 0, False: 10.2k]
  ------------------
  205|       |            /* We have not deallocated the buffer before because
  206|       |             * first_invalid_escape_ptr points inside buf. */
  207|      0|            PyMem_Free(buf);
  208|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|      0|            return NULL;
  210|      0|        }
  211|  10.2k|    }
  212|  32.8k|    PyMem_Free(buf);
  213|  32.8k|    return v;
  214|  32.8k|}
string_parser.c:decode_utf8:
  123|  35.3k|{
  124|  35.3k|    const char *s;
  125|  35.3k|    const char *t;
  126|  35.3k|    t = s = *sPtr;
  127|   462k|    while (s < end && (*s & 0x80)) {
  ------------------
  |  Branch (127:12): [True: 462k, False: 606]
  |  Branch (127:23): [True: 427k, False: 34.7k]
  ------------------
  128|   427k|        s++;
  129|   427k|    }
  130|  35.3k|    *sPtr = s;
  131|       |    return PyUnicode_DecodeUTF8(t, s - t, NULL);
  132|  35.3k|}
string_parser.c:warn_invalid_escape_sequence:
   14|  14.9k|{
   15|  14.9k|    if (p->call_invalid_rules) {
  ------------------
  |  Branch (15:9): [True: 6.11k, False: 8.79k]
  ------------------
   16|       |        // Do not report warnings if we are in the second pass of the parser
   17|       |        // to avoid showing the warning twice.
   18|  6.11k|        return 0;
   19|  6.11k|    }
   20|  8.79k|    unsigned char c = (unsigned char)*first_invalid_escape;
   21|  8.79k|    if ((t->type == FSTRING_MIDDLE || t->type == FSTRING_END || t->type == TSTRING_MIDDLE || t->type == TSTRING_END)
  ------------------
  |  |   76|  17.5k|#define FSTRING_MIDDLE  60
  ------------------
                  if ((t->type == FSTRING_MIDDLE || t->type == FSTRING_END || t->type == TSTRING_MIDDLE || t->type == TSTRING_END)
  ------------------
  |  |   77|  17.1k|#define FSTRING_END     61
  ------------------
                  if ((t->type == FSTRING_MIDDLE || t->type == FSTRING_END || t->type == TSTRING_MIDDLE || t->type == TSTRING_END)
  ------------------
  |  |   79|  14.8k|#define TSTRING_MIDDLE  63
  ------------------
                  if ((t->type == FSTRING_MIDDLE || t->type == FSTRING_END || t->type == TSTRING_MIDDLE || t->type == TSTRING_END)
  ------------------
  |  |   80|  5.90k|#define TSTRING_END     64
  ------------------
  |  Branch (21:10): [True: 410, False: 8.38k]
  |  Branch (21:39): [True: 2.36k, False: 6.02k]
  |  Branch (21:65): [True: 121, False: 5.90k]
  |  Branch (21:94): [True: 1.41k, False: 4.49k]
  ------------------
   22|  4.30k|            && (c == '{' || c == '}')) {
  ------------------
  |  Branch (22:17): [True: 897, False: 3.41k]
  |  Branch (22:29): [True: 1.14k, False: 2.26k]
  ------------------
   23|       |        // in this case the tokenizer has already emitted a warning,
   24|       |        // see Parser/tokenizer/helpers.c:warn_invalid_escape_sequence
   25|  2.03k|        return 0;
   26|  2.03k|    }
   27|       |
   28|  6.76k|    int octal = ('4' <= c && c <= '7');
  ------------------
  |  Branch (28:18): [True: 5.04k, False: 1.71k]
  |  Branch (28:30): [True: 1.80k, False: 3.24k]
  ------------------
   29|  6.76k|    PyObject *msg =
   30|  6.76k|        octal
  ------------------
  |  Branch (30:9): [True: 1.80k, False: 4.95k]
  ------------------
   31|  6.76k|        ? PyUnicode_FromFormat(
   32|  1.80k|              "\"\\%.3s\" is an invalid octal escape sequence. "
   33|  1.80k|              "Such sequences will not work in the future. "
   34|  1.80k|              "Did you mean \"\\\\%.3s\"? A raw string is also an option.",
   35|  1.80k|              first_invalid_escape, first_invalid_escape)
   36|  6.76k|        : PyUnicode_FromFormat(
   37|  4.95k|              "\"\\%c\" is an invalid escape sequence. "
   38|  4.95k|              "Such sequences will not work in the future. "
   39|  4.95k|              "Did you mean \"\\\\%c\"? A raw string is also an option.",
   40|  4.95k|              c, c);
   41|  6.76k|    if (msg == NULL) {
  ------------------
  |  Branch (41:9): [True: 0, False: 6.76k]
  ------------------
   42|      0|        return -1;
   43|      0|    }
   44|  6.76k|    PyObject *category;
   45|  6.76k|    if (p->feature_version >= 12) {
  ------------------
  |  Branch (45:9): [True: 6.76k, False: 0]
  ------------------
   46|  6.76k|        category = PyExc_SyntaxWarning;
   47|  6.76k|    }
   48|      0|    else {
   49|      0|        category = PyExc_DeprecationWarning;
   50|      0|    }
   51|       |
   52|       |    // Calculate the lineno and the col_offset of the invalid escape sequence
   53|  6.76k|    const char *start = buffer;
   54|  6.76k|    const char *end = first_invalid_escape;
   55|  6.76k|    int lineno = t->lineno;
   56|  6.76k|    int col_offset = t->col_offset;
   57|   619k|    while (start < end) {
  ------------------
  |  Branch (57:12): [True: 612k, False: 6.76k]
  ------------------
   58|   612k|        if (*start == '\n') {
  ------------------
  |  Branch (58:13): [True: 15.5k, False: 596k]
  ------------------
   59|  15.5k|            lineno++;
   60|  15.5k|            col_offset = 0;
   61|  15.5k|        }
   62|   596k|        else {
   63|   596k|            col_offset++;
   64|   596k|        }
   65|   612k|        start++;
   66|   612k|    }
   67|       |
   68|       |    // Count the number of quotes in the token
   69|  6.76k|    char first_quote = 0;
   70|  6.76k|    if (lineno == t->lineno) {
  ------------------
  |  Branch (70:9): [True: 6.22k, False: 539]
  ------------------
   71|  6.22k|        int quote_count = 0;
   72|  6.22k|        const char* tok = PyBytes_AsString(t->bytes);
   73|  12.3k|        for (int i = 0; i < PyBytes_Size(t->bytes); i++) {
  ------------------
  |  Branch (73:25): [True: 10.7k, False: 1.64k]
  ------------------
   74|  10.7k|            if (tok[i] == '\'' || tok[i] == '\"') {
  ------------------
  |  Branch (74:17): [True: 681, False: 10.0k]
  |  Branch (74:35): [True: 5.49k, False: 4.57k]
  ------------------
   75|  6.17k|                if (quote_count == 0) {
  ------------------
  |  Branch (75:21): [True: 3.18k, False: 2.99k]
  ------------------
   76|  3.18k|                    first_quote = tok[i];
   77|  3.18k|                }
   78|  6.17k|                if (tok[i] == first_quote) {
  ------------------
  |  Branch (78:21): [True: 6.08k, False: 86]
  ------------------
   79|  6.08k|                    quote_count++;
   80|  6.08k|                }
   81|  6.17k|            } else {
   82|  4.57k|                break;
   83|  4.57k|            }
   84|  10.7k|        }
   85|       |
   86|  6.22k|        col_offset += quote_count;
   87|  6.22k|    }
   88|       |
   89|  6.76k|    _PyTokenizer_Info info = _PyTokenizer_GetInfo(p->tok);
   90|  6.76k|    if (PyErr_WarnExplicitObject(category, msg, info.filename,
  ------------------
  |  Branch (90:9): [True: 0, False: 6.76k]
  ------------------
   91|  6.76k|                                 lineno, info.module, NULL) < 0) {
   92|      0|        if (PyErr_ExceptionMatches(category)) {
  ------------------
  |  Branch (92:13): [True: 0, False: 0]
  ------------------
   93|       |            /* Replace the Syntax/DeprecationWarning exception with a SyntaxError
   94|       |               to get a more accurate error report */
   95|      0|            PyErr_Clear();
   96|       |
   97|       |            /* This is needed, in order for the SyntaxError to point to the token t,
   98|       |               since _PyPegen_raise_error uses p->tokens[p->fill - 1] for the
   99|       |               error location, if p->known_err_token is not set. */
  100|      0|            p->known_err_token = t;
  101|      0|            if (octal) {
  ------------------
  |  Branch (101:17): [True: 0, False: 0]
  ------------------
  102|      0|                RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, lineno, col_offset-1, lineno, col_offset+1,
  103|      0|                    "\"\\%.3s\" is an invalid octal escape sequence. "
  104|      0|                    "Did you mean \"\\\\%.3s\"? A raw string is also an option.",
  105|      0|                    first_invalid_escape, first_invalid_escape);
  106|      0|            }
  107|      0|            else {
  108|      0|                RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, lineno, col_offset-1, lineno, col_offset+1,
  109|      0|                    "\"\\%c\" is an invalid escape sequence. "
  110|      0|                    "Did you mean \"\\\\%c\"? A raw string is also an option.",
  111|      0|                    c, c);
  112|      0|            }
  113|      0|        }
  114|      0|        Py_DECREF(msg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      0|        return -1;
  116|      0|    }
  117|  6.76k|    Py_DECREF(msg);
  ------------------
  |  |  430|  6.76k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.76k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.76k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|  6.76k|    return 0;
  119|  6.76k|}
string_parser.c:decode_bytes_with_escapes:
  218|  6.14k|{
  219|  6.14k|    int first_invalid_escape_char;
  220|  6.14k|    const char *first_invalid_escape_ptr;
  221|  6.14k|    PyObject *result = _PyBytes_DecodeEscape2(s, len, NULL,
  222|  6.14k|                                              &first_invalid_escape_char,
  223|  6.14k|                                              &first_invalid_escape_ptr);
  224|  6.14k|    if (result == NULL) {
  ------------------
  |  Branch (224:9): [True: 8, False: 6.13k]
  ------------------
  225|      8|        return NULL;
  226|      8|    }
  227|       |
  228|  6.13k|    if (first_invalid_escape_ptr != NULL) {
  ------------------
  |  Branch (228:9): [True: 4.64k, False: 1.49k]
  ------------------
  229|  4.64k|        if (warn_invalid_escape_sequence(p, s, first_invalid_escape_ptr, t) < 0) {
  ------------------
  |  Branch (229:13): [True: 0, False: 4.64k]
  ------------------
  230|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|      0|            return NULL;
  232|      0|        }
  233|  4.64k|    }
  234|  6.13k|    return result;
  235|  6.13k|}

_PyToken_OneChar:
   85|  2.35M|{
   86|  2.35M|    switch (c1) {
  ------------------
  |  Branch (86:13): [True: 2.35M, False: 745]
  ------------------
   87|  5.88k|    case '!': return EXCLAMATION;
  ------------------
  |  |   70|  5.88k|#define EXCLAMATION     54
  ------------------
  |  Branch (87:5): [True: 5.88k, False: 2.35M]
  ------------------
   88|  62.2k|    case '%': return PERCENT;
  ------------------
  |  |   40|  62.2k|#define PERCENT         24
  ------------------
  |  Branch (88:5): [True: 62.2k, False: 2.29M]
  ------------------
   89|  20.3k|    case '&': return AMPER;
  ------------------
  |  |   35|  20.3k|#define AMPER           19
  ------------------
  |  Branch (89:5): [True: 20.3k, False: 2.33M]
  ------------------
   90|   142k|    case '(': return LPAR;
  ------------------
  |  |   23|   142k|#define LPAR            7
  ------------------
  |  Branch (90:5): [True: 142k, False: 2.21M]
  ------------------
   91|   100k|    case ')': return RPAR;
  ------------------
  |  |   24|   100k|#define RPAR            8
  ------------------
  |  Branch (91:5): [True: 100k, False: 2.25M]
  ------------------
   92|   223k|    case '*': return STAR;
  ------------------
  |  |   32|   223k|#define STAR            16
  ------------------
  |  Branch (92:5): [True: 223k, False: 2.13M]
  ------------------
   93|   292k|    case '+': return PLUS;
  ------------------
  |  |   30|   292k|#define PLUS            14
  ------------------
  |  Branch (93:5): [True: 292k, False: 2.06M]
  ------------------
   94|   390k|    case ',': return COMMA;
  ------------------
  |  |   28|   390k|#define COMMA           12
  ------------------
  |  Branch (94:5): [True: 390k, False: 1.96M]
  ------------------
   95|   373k|    case '-': return MINUS;
  ------------------
  |  |   31|   373k|#define MINUS           15
  ------------------
  |  Branch (95:5): [True: 373k, False: 1.98M]
  ------------------
   96|      0|    case '.': return DOT;
  ------------------
  |  |   39|      0|#define DOT             23
  ------------------
  |  Branch (96:5): [True: 0, False: 2.35M]
  ------------------
   97|  91.8k|    case '/': return SLASH;
  ------------------
  |  |   33|  91.8k|#define SLASH           17
  ------------------
  |  Branch (97:5): [True: 91.8k, False: 2.26M]
  ------------------
   98|   137k|    case ':': return COLON;
  ------------------
  |  |   27|   137k|#define COLON           11
  ------------------
  |  Branch (98:5): [True: 137k, False: 2.21M]
  ------------------
   99|  95.9k|    case ';': return SEMI;
  ------------------
  |  |   29|  95.9k|#define SEMI            13
  ------------------
  |  Branch (99:5): [True: 95.9k, False: 2.26M]
  ------------------
  100|  38.1k|    case '<': return LESS;
  ------------------
  |  |   36|  38.1k|#define LESS            20
  ------------------
  |  Branch (100:5): [True: 38.1k, False: 2.31M]
  ------------------
  101|  85.9k|    case '=': return EQUAL;
  ------------------
  |  |   38|  85.9k|#define EQUAL           22
  ------------------
  |  Branch (101:5): [True: 85.9k, False: 2.27M]
  ------------------
  102|  36.2k|    case '>': return GREATER;
  ------------------
  |  |   37|  36.2k|#define GREATER         21
  ------------------
  |  Branch (102:5): [True: 36.2k, False: 2.31M]
  ------------------
  103|  16.1k|    case '@': return AT;
  ------------------
  |  |   65|  16.1k|#define AT              49
  ------------------
  |  Branch (103:5): [True: 16.1k, False: 2.33M]
  ------------------
  104|  52.4k|    case '[': return LSQB;
  ------------------
  |  |   25|  52.4k|#define LSQB            9
  ------------------
  |  Branch (104:5): [True: 52.4k, False: 2.30M]
  ------------------
  105|  27.8k|    case ']': return RSQB;
  ------------------
  |  |   26|  27.8k|#define RSQB            10
  ------------------
  |  Branch (105:5): [True: 27.8k, False: 2.32M]
  ------------------
  106|  30.9k|    case '^': return CIRCUMFLEX;
  ------------------
  |  |   48|  30.9k|#define CIRCUMFLEX      32
  ------------------
  |  Branch (106:5): [True: 30.9k, False: 2.32M]
  ------------------
  107|  59.2k|    case '{': return LBRACE;
  ------------------
  |  |   41|  59.2k|#define LBRACE          25
  ------------------
  |  Branch (107:5): [True: 59.2k, False: 2.29M]
  ------------------
  108|  17.9k|    case '|': return VBAR;
  ------------------
  |  |   34|  17.9k|#define VBAR            18
  ------------------
  |  Branch (108:5): [True: 17.9k, False: 2.33M]
  ------------------
  109|  34.6k|    case '}': return RBRACE;
  ------------------
  |  |   42|  34.6k|#define RBRACE          26
  ------------------
  |  Branch (109:5): [True: 34.6k, False: 2.32M]
  ------------------
  110|  19.4k|    case '~': return TILDE;
  ------------------
  |  |   47|  19.4k|#define TILDE           31
  ------------------
  |  Branch (110:5): [True: 19.4k, False: 2.33M]
  ------------------
  111|  2.35M|    }
  112|    745|    return OP;
  ------------------
  |  |   71|    745|#define OP              55
  ------------------
  113|  2.35M|}
_PyToken_TwoChars:
  117|  2.57M|{
  118|  2.57M|    switch (c1) {
  ------------------
  |  Branch (118:13): [True: 1.64M, False: 924k]
  ------------------
  119|  6.67k|    case '!':
  ------------------
  |  Branch (119:5): [True: 6.67k, False: 2.56M]
  ------------------
  120|  6.67k|        switch (c2) {
  ------------------
  |  Branch (120:17): [True: 785, False: 5.88k]
  ------------------
  121|    785|        case '=': return NOTEQUAL;
  ------------------
  |  |   44|    785|#define NOTEQUAL        28
  ------------------
  |  Branch (121:9): [True: 785, False: 5.88k]
  ------------------
  122|  6.67k|        }
  123|  5.88k|        break;
  124|  63.9k|    case '%':
  ------------------
  |  Branch (124:5): [True: 63.9k, False: 2.50M]
  ------------------
  125|  63.9k|        switch (c2) {
  ------------------
  |  Branch (125:17): [True: 1.65k, False: 62.2k]
  ------------------
  126|  1.65k|        case '=': return PERCENTEQUAL;
  ------------------
  |  |   56|  1.65k|#define PERCENTEQUAL    40
  ------------------
  |  Branch (126:9): [True: 1.65k, False: 62.2k]
  ------------------
  127|  63.9k|        }
  128|  62.2k|        break;
  129|  62.2k|    case '&':
  ------------------
  |  Branch (129:5): [True: 21.4k, False: 2.54M]
  ------------------
  130|  21.4k|        switch (c2) {
  ------------------
  |  Branch (130:17): [True: 1.10k, False: 20.3k]
  ------------------
  131|  1.10k|        case '=': return AMPEREQUAL;
  ------------------
  |  |   57|  1.10k|#define AMPEREQUAL      41
  ------------------
  |  Branch (131:9): [True: 1.10k, False: 20.3k]
  ------------------
  132|  21.4k|        }
  133|  20.3k|        break;
  134|   353k|    case '*':
  ------------------
  |  Branch (134:5): [True: 353k, False: 2.21M]
  ------------------
  135|   353k|        switch (c2) {
  ------------------
  |  Branch (135:17): [True: 130k, False: 223k]
  ------------------
  136|   127k|        case '*': return DOUBLESTAR;
  ------------------
  |  |   51|   127k|#define DOUBLESTAR      35
  ------------------
  |  Branch (136:9): [True: 127k, False: 226k]
  ------------------
  137|  3.59k|        case '=': return STAREQUAL;
  ------------------
  |  |   54|  3.59k|#define STAREQUAL       38
  ------------------
  |  Branch (137:9): [True: 3.59k, False: 350k]
  ------------------
  138|   353k|        }
  139|   223k|        break;
  140|   294k|    case '+':
  ------------------
  |  Branch (140:5): [True: 294k, False: 2.27M]
  ------------------
  141|   294k|        switch (c2) {
  ------------------
  |  Branch (141:17): [True: 2.20k, False: 292k]
  ------------------
  142|  2.20k|        case '=': return PLUSEQUAL;
  ------------------
  |  |   52|  2.20k|#define PLUSEQUAL       36
  ------------------
  |  Branch (142:9): [True: 2.20k, False: 292k]
  ------------------
  143|   294k|        }
  144|   292k|        break;
  145|   377k|    case '-':
  ------------------
  |  Branch (145:5): [True: 377k, False: 2.19M]
  ------------------
  146|   377k|        switch (c2) {
  ------------------
  |  Branch (146:17): [True: 4.37k, False: 373k]
  ------------------
  147|    494|        case '=': return MINEQUAL;
  ------------------
  |  |   53|    494|#define MINEQUAL        37
  ------------------
  |  Branch (147:9): [True: 494, False: 377k]
  ------------------
  148|  3.88k|        case '>': return RARROW;
  ------------------
  |  |   67|  3.88k|#define RARROW          51
  ------------------
  |  Branch (148:9): [True: 3.88k, False: 373k]
  ------------------
  149|   377k|        }
  150|   373k|        break;
  151|   373k|    case '/':
  ------------------
  |  Branch (151:5): [True: 116k, False: 2.45M]
  ------------------
  152|   116k|        switch (c2) {
  ------------------
  |  Branch (152:17): [True: 24.2k, False: 91.8k]
  ------------------
  153|  22.3k|        case '/': return DOUBLESLASH;
  ------------------
  |  |   63|  22.3k|#define DOUBLESLASH     47
  ------------------
  |  Branch (153:9): [True: 22.3k, False: 93.7k]
  ------------------
  154|  1.89k|        case '=': return SLASHEQUAL;
  ------------------
  |  |   55|  1.89k|#define SLASHEQUAL      39
  ------------------
  |  Branch (154:9): [True: 1.89k, False: 114k]
  ------------------
  155|   116k|        }
  156|  91.8k|        break;
  157|   140k|    case ':':
  ------------------
  |  Branch (157:5): [True: 140k, False: 2.42M]
  ------------------
  158|   140k|        switch (c2) {
  ------------------
  |  Branch (158:17): [True: 3.27k, False: 137k]
  ------------------
  159|  3.27k|        case '=': return COLONEQUAL;
  ------------------
  |  |   69|  3.27k|#define COLONEQUAL      53
  ------------------
  |  Branch (159:9): [True: 3.27k, False: 137k]
  ------------------
  160|   140k|        }
  161|   137k|        break;
  162|   137k|    case '<':
  ------------------
  |  Branch (162:5): [True: 57.8k, False: 2.51M]
  ------------------
  163|  57.8k|        switch (c2) {
  ------------------
  |  Branch (163:17): [True: 19.7k, False: 38.1k]
  ------------------
  164|  15.5k|        case '<': return LEFTSHIFT;
  ------------------
  |  |   49|  15.5k|#define LEFTSHIFT       33
  ------------------
  |  Branch (164:9): [True: 15.5k, False: 42.3k]
  ------------------
  165|  4.11k|        case '=': return LESSEQUAL;
  ------------------
  |  |   45|  4.11k|#define LESSEQUAL       29
  ------------------
  |  Branch (165:9): [True: 4.11k, False: 53.7k]
  ------------------
  166|     16|        case '>': return BARRY_AS_BDFL ? NOTEQUAL : OP;
  ------------------
  |  |   44|      0|#define NOTEQUAL        28
  ------------------
                      case '>': return BARRY_AS_BDFL ? NOTEQUAL : OP;
  ------------------
  |  |   71|     16|#define OP              55
  ------------------
  |  Branch (166:9): [True: 16, False: 57.8k]
  |  Branch (166:26): [True: 0, False: 16]
  ------------------
  167|  57.8k|        }
  168|  38.1k|        break;
  169|  88.9k|    case '=':
  ------------------
  |  Branch (169:5): [True: 88.9k, False: 2.48M]
  ------------------
  170|  88.9k|        switch (c2) {
  ------------------
  |  Branch (170:17): [True: 3.05k, False: 85.9k]
  ------------------
  171|  3.05k|        case '=': return EQEQUAL;
  ------------------
  |  |   43|  3.05k|#define EQEQUAL         27
  ------------------
  |  Branch (171:9): [True: 3.05k, False: 85.9k]
  ------------------
  172|  88.9k|        }
  173|  85.9k|        break;
  174|  85.9k|    case '>':
  ------------------
  |  Branch (174:5): [True: 56.9k, False: 2.51M]
  ------------------
  175|  56.9k|        switch (c2) {
  ------------------
  |  Branch (175:17): [True: 20.7k, False: 36.2k]
  ------------------
  176|  4.94k|        case '=': return GREATEREQUAL;
  ------------------
  |  |   46|  4.94k|#define GREATEREQUAL    30
  ------------------
  |  Branch (176:9): [True: 4.94k, False: 52.0k]
  ------------------
  177|  15.7k|        case '>': return RIGHTSHIFT;
  ------------------
  |  |   50|  15.7k|#define RIGHTSHIFT      34
  ------------------
  |  Branch (177:9): [True: 15.7k, False: 41.1k]
  ------------------
  178|  56.9k|        }
  179|  36.2k|        break;
  180|  36.2k|    case '@':
  ------------------
  |  Branch (180:5): [True: 16.5k, False: 2.55M]
  ------------------
  181|  16.5k|        switch (c2) {
  ------------------
  |  Branch (181:17): [True: 368, False: 16.1k]
  ------------------
  182|    368|        case '=': return ATEQUAL;
  ------------------
  |  |   66|    368|#define ATEQUAL         50
  ------------------
  |  Branch (182:9): [True: 368, False: 16.1k]
  ------------------
  183|  16.5k|        }
  184|  16.1k|        break;
  185|  31.4k|    case '^':
  ------------------
  |  Branch (185:5): [True: 31.4k, False: 2.53M]
  ------------------
  186|  31.4k|        switch (c2) {
  ------------------
  |  Branch (186:17): [True: 524, False: 30.9k]
  ------------------
  187|    524|        case '=': return CIRCUMFLEXEQUAL;
  ------------------
  |  |   59|    524|#define CIRCUMFLEXEQUAL 43
  ------------------
  |  Branch (187:9): [True: 524, False: 30.9k]
  ------------------
  188|  31.4k|        }
  189|  30.9k|        break;
  190|  30.9k|    case '|':
  ------------------
  |  Branch (190:5): [True: 18.4k, False: 2.55M]
  ------------------
  191|  18.4k|        switch (c2) {
  ------------------
  |  Branch (191:17): [True: 523, False: 17.9k]
  ------------------
  192|    523|        case '=': return VBAREQUAL;
  ------------------
  |  |   58|    523|#define VBAREQUAL       42
  ------------------
  |  Branch (192:9): [True: 523, False: 17.9k]
  ------------------
  193|  18.4k|        }
  194|  17.9k|        break;
  195|  2.57M|    }
  196|  2.35M|    return OP;
  ------------------
  |  |   71|  2.35M|#define OP              55
  ------------------
  197|  2.57M|}
_PyToken_ThreeChars:
  201|   213k|{
  202|   213k|    switch (c1) {
  ------------------
  |  Branch (202:13): [True: 195k, False: 17.8k]
  ------------------
  203|   130k|    case '*':
  ------------------
  |  Branch (203:5): [True: 130k, False: 82.5k]
  ------------------
  204|   130k|        switch (c2) {
  ------------------
  |  Branch (204:17): [True: 127k, False: 3.59k]
  ------------------
  205|   127k|        case '*':
  ------------------
  |  Branch (205:9): [True: 127k, False: 3.59k]
  ------------------
  206|   127k|            switch (c3) {
  ------------------
  |  Branch (206:21): [True: 367, False: 126k]
  ------------------
  207|    367|            case '=': return DOUBLESTAREQUAL;
  ------------------
  |  |   62|    367|#define DOUBLESTAREQUAL 46
  ------------------
  |  Branch (207:13): [True: 367, False: 126k]
  ------------------
  208|   127k|            }
  209|   126k|            break;
  210|   130k|        }
  211|   130k|        break;
  212|   130k|    case '.':
  ------------------
  |  Branch (212:5): [True: 0, False: 213k]
  ------------------
  213|      0|        switch (c2) {
  ------------------
  |  Branch (213:17): [True: 0, False: 0]
  ------------------
  214|      0|        case '.':
  ------------------
  |  Branch (214:9): [True: 0, False: 0]
  ------------------
  215|      0|            switch (c3) {
  ------------------
  |  Branch (215:21): [True: 0, False: 0]
  ------------------
  216|      0|            case '.': return ELLIPSIS;
  ------------------
  |  |   68|      0|#define ELLIPSIS        52
  ------------------
  |  Branch (216:13): [True: 0, False: 0]
  ------------------
  217|      0|            }
  218|      0|            break;
  219|      0|        }
  220|      0|        break;
  221|  24.2k|    case '/':
  ------------------
  |  Branch (221:5): [True: 24.2k, False: 188k]
  ------------------
  222|  24.2k|        switch (c2) {
  ------------------
  |  Branch (222:17): [True: 22.3k, False: 1.89k]
  ------------------
  223|  22.3k|        case '/':
  ------------------
  |  Branch (223:9): [True: 22.3k, False: 1.89k]
  ------------------
  224|  22.3k|            switch (c3) {
  ------------------
  |  Branch (224:21): [True: 475, False: 21.8k]
  ------------------
  225|    475|            case '=': return DOUBLESLASHEQUAL;
  ------------------
  |  |   64|    475|#define DOUBLESLASHEQUAL 48
  ------------------
  |  Branch (225:13): [True: 475, False: 21.8k]
  ------------------
  226|  22.3k|            }
  227|  21.8k|            break;
  228|  24.2k|        }
  229|  23.7k|        break;
  230|  23.7k|    case '<':
  ------------------
  |  Branch (230:5): [True: 19.6k, False: 193k]
  ------------------
  231|  19.6k|        switch (c2) {
  ------------------
  |  Branch (231:17): [True: 15.5k, False: 4.11k]
  ------------------
  232|  15.5k|        case '<':
  ------------------
  |  Branch (232:9): [True: 15.5k, False: 4.11k]
  ------------------
  233|  15.5k|            switch (c3) {
  ------------------
  |  Branch (233:21): [True: 148, False: 15.4k]
  ------------------
  234|    148|            case '=': return LEFTSHIFTEQUAL;
  ------------------
  |  |   60|    148|#define LEFTSHIFTEQUAL  44
  ------------------
  |  Branch (234:13): [True: 148, False: 15.4k]
  ------------------
  235|  15.5k|            }
  236|  15.4k|            break;
  237|  19.6k|        }
  238|  19.5k|        break;
  239|  20.7k|    case '>':
  ------------------
  |  Branch (239:5): [True: 20.7k, False: 192k]
  ------------------
  240|  20.7k|        switch (c2) {
  ------------------
  |  Branch (240:17): [True: 15.7k, False: 4.94k]
  ------------------
  241|  15.7k|        case '>':
  ------------------
  |  Branch (241:9): [True: 15.7k, False: 4.94k]
  ------------------
  242|  15.7k|            switch (c3) {
  ------------------
  |  Branch (242:21): [True: 293, False: 15.4k]
  ------------------
  243|    293|            case '=': return RIGHTSHIFTEQUAL;
  ------------------
  |  |   61|    293|#define RIGHTSHIFTEQUAL 45
  ------------------
  |  Branch (243:13): [True: 293, False: 15.4k]
  ------------------
  244|  15.7k|            }
  245|  15.4k|            break;
  246|  20.7k|        }
  247|  20.4k|        break;
  248|   213k|    }
  249|   211k|    return OP;
  ------------------
  |  |   71|   211k|#define OP              55
  ------------------
  250|   213k|}

_PyTokenizer_GetInfo:
   11|  55.7k|{
   12|  55.7k|    _PyTokenizer_Info info = {
   13|  55.7k|        .status = tok->done,
   14|  55.7k|        .diagnostic = tok->diagnostic,
   15|  55.7k|        .location = {tok->lineno, tok->line_start < 0
  ------------------
  |  Branch (15:35): [True: 0, False: 55.7k]
  ------------------
   16|  55.7k|            ? -1 : (int)(tok->cur - tok->line_start)},
   17|  55.7k|        .cursor = tok->cur,
   18|  55.7k|        .input_span = {tok->buf_offset, tok->inp},
   19|  55.7k|        .line_span = {tok->line_start, tok->inp},
   20|  55.7k|        .level = tok->level,
   21|  55.7k|        .delimiter_loc = {-1, -1},
   22|  55.7k|        .in_formatted_string = tok->ftstring_depth != 0,
   23|  55.7k|        .is_interactive = _PyTok_ReaderIsInteractive(tok),
   24|  55.7k|        .is_file = tok->fp != NULL && tok->fp != stdin,
  ------------------
  |  Branch (24:20): [True: 0, False: 55.7k]
  |  Branch (24:39): [True: 0, False: 0]
  ------------------
   25|  55.7k|        .filename = tok->filename,
   26|  55.7k|        .module = tok->module,
   27|  55.7k|        .encoding = tok->encoding,
   28|  55.7k|    };
   29|  55.7k|    if (tok->level > 0) {
  ------------------
  |  Branch (29:9): [True: 24.5k, False: 31.1k]
  ------------------
   30|  24.5k|        int level = tok->level - 1;
   31|  24.5k|        info.delimiter = tok->parenstack[level];
   32|  24.5k|        info.delimiter_loc = (_PyTok_Loc){
   33|  24.5k|            tok->parenlinenostack[level], tok->parencolstack[level]};
   34|  24.5k|    }
   35|  55.7k|    return info;
   36|  55.7k|}
_PyToken_TextView:
   41|  5.04M|{
   42|  5.04M|    assert(length != NULL);
  ------------------
  |  Branch (42:5): [True: 5.04M, False: 0]
  ------------------
   43|  5.04M|    if (token->span.start < 0) {
  ------------------
  |  Branch (43:9): [True: 49.6k, False: 4.99M]
  ------------------
   44|  49.6k|        assert(token->span.start == -1 && token->span.end == -1);
  ------------------
  |  Branch (44:9): [True: 49.6k, False: 0]
  |  Branch (44:9): [True: 49.6k, False: 0]
  ------------------
   45|  49.6k|        *length = 0;
   46|  49.6k|        return "";
   47|  49.6k|    }
   48|  4.99M|    return _PyLexer_BufferSpanView(tok, token->span, length);
   49|  5.04M|}
_PyTokenizer_SpanView:
   54|  8.49k|{
   55|  8.49k|    return _PyLexer_BufferSpanView(tok, span, length);
   56|  8.49k|}
_PyTokenizer_LineView:
   83|    295|{
   84|    295|    return _PyTok_SourceLineView(&tok->source, lineno, length);
   85|    295|}
_PyTokenizer_SetContext:
   90|  22.6k|{
   91|  22.6k|    Py_XINCREF(filename);
  ------------------
  |  |  514|  22.6k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|  22.6k|    Py_XINCREF(module);
  ------------------
  |  |  514|  22.6k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|  22.6k|    Py_XSETREF(tok->filename, filename);
  ------------------
  |  |  376|  22.6k|    do { \
  |  |  377|  22.6k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  22.6k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  22.6k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  22.6k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  22.6k|        *_tmp_dst_ptr = (src); \
  |  |  380|  22.6k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  22.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  22.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 22.6k]
  |  |  ------------------
  ------------------
   94|  22.6k|    Py_XSETREF(tok->module, module);
  ------------------
  |  |  376|  22.6k|    do { \
  |  |  377|  22.6k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  22.6k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  22.6k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  22.6k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  22.6k|        *_tmp_dst_ptr = (src); \
  |  |  380|  22.6k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  22.6k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  22.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  22.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  22.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 22.6k]
  |  |  ------------------
  ------------------
   95|  22.6k|}
_PyTokenizer_SetOptions:
  100|  22.6k|{
  101|  22.6k|    tok->tok_extra_tokens = extra_tokens;
  102|  22.6k|    tok->type_comments = type_comments;
  103|  22.6k|}
_PyTokenizer_ImplyDedents:
  107|  1.59k|{
  108|  1.59k|    _PyLexer_ImplyDedents(tok);
  109|  1.59k|}
_PyTokenizer_HasTrailingStatement:
  113|  2.25k|{
  114|  2.25k|    const char *cur = _PyLexer_BufferPointer(tok, tok->cur);
  115|  2.25k|    char c = *cur;
  116|  2.46k|    for (;;) {
  117|  3.11k|        while (c == ' ' || c == '\t' || c == '\n' || c == '\014') {
  ------------------
  |  Branch (117:16): [True: 96, False: 3.01k]
  |  Branch (117:28): [True: 81, False: 2.93k]
  |  Branch (117:41): [True: 408, False: 2.52k]
  |  Branch (117:54): [True: 61, False: 2.46k]
  ------------------
  118|    646|            c = *++cur;
  119|    646|        }
  120|  2.46k|        if (!c) {
  ------------------
  |  Branch (120:13): [True: 2.23k, False: 231]
  ------------------
  121|  2.23k|            return 0;
  122|  2.23k|        }
  123|    231|        if (c != '#') {
  ------------------
  |  Branch (123:13): [True: 18, False: 213]
  ------------------
  124|     18|            return 1;
  125|     18|        }
  126|  6.93k|        while (c && c != '\n') {
  ------------------
  |  Branch (126:16): [True: 6.92k, False: 17]
  |  Branch (126:21): [True: 6.72k, False: 196]
  ------------------
  127|  6.72k|            c = *++cur;
  128|  6.72k|        }
  129|    213|    }
  130|  2.25k|}
_PyTokenizer_IsInteractive:
  134|  5.71k|{
  135|  5.71k|    return _PyTok_ReaderIsInteractive(tok);
  136|  5.71k|}
_PyTokenizer_StopInteractive:
  140|  9.05k|{
  141|  9.05k|    _PyTok_ReaderStopInteractive(tok);
  142|  9.05k|}

_PyTok_CopyBytes:
   13|  20.7k|{
   14|  20.7k|    if (len < 0 || len == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  20.7k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (14:9): [True: 0, False: 20.7k]
  |  Branch (14:20): [True: 0, False: 20.7k]
  ------------------
   15|      0|        PyErr_NoMemory();
   16|      0|        return NULL;
   17|      0|    }
   18|  20.7k|    char *copy = PyMem_Malloc((size_t)len + 1);
   19|  20.7k|    if (copy == NULL) {
  ------------------
  |  Branch (19:9): [True: 0, False: 20.7k]
  ------------------
   20|      0|        PyErr_NoMemory();
   21|      0|        return NULL;
   22|      0|    }
   23|  20.7k|    memcpy(copy, data, (size_t)len);
   24|  20.7k|    copy[len] = '\0';
   25|  20.7k|    return copy;
   26|  20.7k|}
_PyTok_ChunkClear:
   45|   493k|{
   46|   493k|    chunk_release_data(chunk);
   47|   493k|    *chunk = (_PyTok_Chunk){0};
   48|   493k|}
_PyTok_SetEncoding:
  132|  15.8k|{
  133|  15.8k|    char *copy = _PyTok_CopyBytes(encoding, strlen(encoding));
  134|  15.8k|    if (copy == NULL) {
  ------------------
  |  Branch (134:9): [True: 0, False: 15.8k]
  ------------------
  135|      0|        tok->done = E_NOMEM;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
  136|      0|        return -1;
  137|      0|    }
  138|  15.8k|    PyMem_Free(tok->encoding);
  139|  15.8k|    tok->encoding = copy;
  140|  15.8k|    return 0;
  141|  15.8k|}
_PyTok_DetectEncoding:
  223|  13.5k|{
  224|  13.5k|    int bom = first->len >= 3 &&
  ------------------
  |  Branch (224:15): [True: 12.7k, False: 794]
  ------------------
  225|  12.7k|        (unsigned char)first->data[0] == 0xEF &&
  ------------------
  |  Branch (225:9): [True: 12, False: 12.7k]
  ------------------
  226|     12|        (unsigned char)first->data[1] == 0xBB &&
  ------------------
  |  Branch (226:9): [True: 5, False: 7]
  ------------------
  227|      5|        (unsigned char)first->data[2] == 0xBF;
  ------------------
  |  Branch (227:9): [True: 4, False: 1]
  ------------------
  228|  13.5k|    *bom_len = bom ? 3 : 0;
  ------------------
  |  Branch (228:16): [True: 4, False: 13.5k]
  ------------------
  229|       |
  230|  13.5k|    char *cookie = NULL;
  231|  13.5k|    int scan_next = 0;
  232|  13.5k|    int cookie_line = 1;
  233|  13.5k|    const char *first_data = first->data + (bom ? 3 : 0);
  ------------------
  |  Branch (233:45): [True: 4, False: 13.5k]
  ------------------
  234|  13.5k|    Py_ssize_t first_len = first->len - (bom ? 3 : 0);
  ------------------
  |  Branch (234:42): [True: 4, False: 13.5k]
  ------------------
  235|  13.5k|    if (find_cookie(first_data, first_len, &cookie, &scan_next) < 0) {
  ------------------
  |  Branch (235:9): [True: 0, False: 13.5k]
  ------------------
  236|      0|        return _PYTOK_ENCODING_ERROR;
  237|      0|    }
  238|  13.5k|    if (cookie == NULL && scan_next && second != NULL) {
  ------------------
  |  Branch (238:9): [True: 8.72k, False: 4.81k]
  |  Branch (238:27): [True: 769, False: 7.96k]
  |  Branch (238:40): [True: 695, False: 74]
  ------------------
  239|    695|        if (find_cookie(second->data, second->len, &cookie, &scan_next) < 0) {
  ------------------
  |  Branch (239:13): [True: 0, False: 695]
  ------------------
  240|      0|            return _PYTOK_ENCODING_ERROR;
  241|      0|        }
  242|    695|        cookie_line = 2;
  243|    695|    }
  244|  12.8k|    else if (cookie == NULL && scan_next && !final) {
  ------------------
  |  Branch (244:14): [True: 8.03k, False: 4.81k]
  |  Branch (244:32): [True: 74, False: 7.96k]
  |  Branch (244:45): [True: 0, False: 74]
  ------------------
  245|      0|        return _PYTOK_ENCODING_NEED_SECOND_LINE;
  246|      0|    }
  247|       |
  248|  13.5k|    if (bom) {
  ------------------
  |  Branch (248:9): [True: 4, False: 13.5k]
  ------------------
  249|      4|        if (_PyTok_SetEncoding(tok, "utf-8") < 0) {
  ------------------
  |  Branch (249:13): [True: 0, False: 4]
  ------------------
  250|      0|            PyMem_Free(cookie);
  251|      0|            return _PYTOK_ENCODING_ERROR;
  252|      0|        }
  253|      4|    }
  254|  13.5k|    if (cookie == NULL) {
  ------------------
  |  Branch (254:9): [True: 8.70k, False: 4.84k]
  ------------------
  255|  8.70k|        return _PYTOK_ENCODING_DONE;
  256|  8.70k|    }
  257|  4.84k|    if (bom && strcmp(cookie, "utf-8") != 0) {
  ------------------
  |  Branch (257:9): [True: 3, False: 4.83k]
  |  Branch (257:16): [True: 2, False: 1]
  ------------------
  258|      2|        const _PyTok_Chunk *line = cookie_line == 2 ? second : first;
  ------------------
  |  Branch (258:36): [True: 1, False: 1]
  ------------------
  259|      2|        const char *line_data = line->data + (cookie_line == 1 ? 3 : 0);
  ------------------
  |  Branch (259:47): [True: 1, False: 1]
  ------------------
  260|      2|        Py_ssize_t line_len = line->len - (cookie_line == 1 ? 3 : 0);
  ------------------
  |  Branch (260:44): [True: 1, False: 1]
  ------------------
  261|      2|        int end_col = (int)Py_MIN(line_len, INT_MAX);
  ------------------
  |  |  120|      2|       __extension__ \
  |  |  121|      2|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      2|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      2|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  262|      2|        if (end_col > 0 && (line_data[end_col - 1] == '\n' ||
  ------------------
  |  Branch (262:13): [True: 2, False: 0]
  |  Branch (262:29): [True: 0, False: 2]
  ------------------
  263|      2|                            line_data[end_col - 1] == '\r')) {
  ------------------
  |  Branch (263:29): [True: 0, False: 2]
  ------------------
  264|      0|            end_col--;
  265|      0|        }
  266|      2|        _PyTokenizer_syntaxerror_at(
  267|      2|            tok, line_data, 0, cookie_line, 0, end_col,
  268|      2|            "encoding problem: %s with BOM", cookie);
  269|      2|        PyMem_Free(cookie);
  270|      2|        return _PYTOK_ENCODING_ERROR;
  271|      2|    }
  272|  4.83k|    if (!bom && _PyTok_SetEncoding(tok, cookie) < 0) {
  ------------------
  |  Branch (272:9): [True: 4.83k, False: 1]
  |  Branch (272:17): [True: 0, False: 4.83k]
  ------------------
  273|      0|        PyMem_Free(cookie);
  274|      0|        return _PYTOK_ENCODING_ERROR;
  275|      0|    }
  276|  4.83k|    PyMem_Free(cookie);
  277|  4.83k|    return _PYTOK_ENCODING_DONE;
  278|  4.83k|}
_PyTok_DecodeOnce:
  283|  4.83k|{
  284|  4.83k|    PyObject *unicode = PyUnicode_Decode(
  285|  4.83k|        chunk->data, chunk->len, encoding, errors);
  286|  4.83k|    if (unicode == NULL) {
  ------------------
  |  Branch (286:9): [True: 1.63k, False: 3.20k]
  ------------------
  287|  1.63k|        tok->done = PyErr_ExceptionMatches(PyExc_MemoryError)
  ------------------
  |  Branch (287:21): [True: 0, False: 1.63k]
  ------------------
  288|  1.63k|            ? E_NOMEM : E_DECODE;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
                          ? E_NOMEM : E_DECODE;
  ------------------
  |  |   34|  3.26k|#define E_DECODE         22      /* Error in decoding into Unicode */
  ------------------
  289|  1.63k|        return -1;
  290|  1.63k|    }
  291|  3.20k|    return chunk_set_unicode(tok, chunk, unicode, 0);
  292|  4.83k|}
_PyTok_PrepareString:
  375|  24.5k|{
  376|  24.5k|    Py_ssize_t raw_len = strlen(input);
  377|  24.5k|    char *raw = (char *)input;
  378|       |
  379|  24.5k|    if (utf8_only) {
  ------------------
  |  Branch (379:9): [True: 11.0k, False: 13.5k]
  ------------------
  380|  11.0k|        if (_PyTok_SetEncoding(tok, "utf-8") < 0) {
  ------------------
  |  Branch (380:13): [True: 0, False: 11.0k]
  ------------------
  381|      0|            return -1;
  382|      0|        }
  383|  11.0k|    }
  384|  13.5k|    else {
  385|  13.5k|        Py_ssize_t first_original_len = raw_line_length(raw, raw_len);
  386|  13.5k|        _PyTok_Chunk first = {
  387|  13.5k|            .data = raw,
  388|  13.5k|            .len = first_original_len,
  389|  13.5k|            .ownership = _PYTOK_CHUNK_BORROWED,
  390|  13.5k|        };
  391|  13.5k|        _PyTok_Chunk second = {0};
  392|  13.5k|        int have_second = first_original_len < raw_len;
  393|  13.5k|        if (have_second) {
  ------------------
  |  Branch (393:13): [True: 5.32k, False: 8.21k]
  ------------------
  394|  5.32k|            second.data = raw + first_original_len;
  395|  5.32k|            second.len = raw_line_length(second.data,
  396|  5.32k|                                         raw_len - first_original_len);
  397|  5.32k|        }
  398|  13.5k|        Py_ssize_t bom_len;
  399|  13.5k|        _PyTok_EncodingResult detection = _PyTok_DetectEncoding(
  400|  13.5k|            tok, &first, have_second ? &second : NULL, 1, &bom_len);
  ------------------
  |  Branch (400:26): [True: 5.32k, False: 8.21k]
  ------------------
  401|  13.5k|        if (detection == _PYTOK_ENCODING_ERROR) {
  ------------------
  |  Branch (401:13): [True: 2, False: 13.5k]
  ------------------
  402|      2|            return -1;
  403|      2|        }
  404|  13.5k|        raw += bom_len;
  405|  13.5k|        raw_len -= bom_len;
  406|  13.5k|    }
  407|       |
  408|  24.5k|    _PyTok_Chunk decoded = {
  409|  24.5k|        .data = raw,
  410|  24.5k|        .len = raw_len,
  411|  24.5k|        .ownership = _PYTOK_CHUNK_BORROWED,
  412|  24.5k|    };
  413|  24.5k|    if (tok->encoding != NULL && strcmp(tok->encoding, "utf-8") != 0) {
  ------------------
  |  Branch (413:9): [True: 15.8k, False: 8.70k]
  |  Branch (413:34): [True: 4.83k, False: 11.0k]
  ------------------
  414|  4.83k|        if (_PyTok_DecodeOnce(
  ------------------
  |  Branch (414:13): [True: 1.66k, False: 3.17k]
  ------------------
  415|  4.83k|                tok, &decoded, tok->encoding, NULL) < 0) {
  416|  1.66k|            return -1;
  417|  1.66k|        }
  418|  4.83k|    }
  419|       |
  420|  22.8k|    int stored = store_prepared_source(
  421|  22.8k|        tok, decoded.data, decoded.len, preserve_crlf, exec_input);
  422|  22.8k|    _PyTok_ChunkClear(&decoded);
  423|  22.8k|    if (stored < 0) {
  ------------------
  |  Branch (423:9): [True: 0, False: 22.8k]
  ------------------
  424|      0|        return -1;
  425|      0|    }
  426|  22.8k|    if (!utf8_only &&
  ------------------
  |  Branch (426:9): [True: 11.8k, False: 11.0k]
  ------------------
  427|  11.8k|            (tok->encoding == NULL || strcmp(tok->encoding, "utf-8") == 0) &&
  ------------------
  |  Branch (427:14): [True: 8.70k, False: 3.17k]
  |  Branch (427:39): [True: 4, False: 3.17k]
  ------------------
  428|  8.70k|            !_PyTokenizer_ensure_utf8(_PyTok_SourceData(&tok->source), tok, 1)) {
  ------------------
  |  Branch (428:13): [True: 238, False: 8.46k]
  ------------------
  429|    238|        return -1;
  430|    238|    }
  431|  22.6k|    return 0;
  432|  22.8k|}
decoder.c:chunk_release_data:
   30|   496k|{
   31|   496k|    switch (chunk->ownership) {
  ------------------
  |  Branch (31:13): [True: 496k, False: 0]
  ------------------
   32|   493k|        case _PYTOK_CHUNK_BORROWED:
  ------------------
  |  Branch (32:9): [True: 493k, False: 3.17k]
  ------------------
   33|   493k|            break;
   34|      0|        case _PYTOK_CHUNK_PYMEM:
  ------------------
  |  Branch (34:9): [True: 0, False: 496k]
  ------------------
   35|      0|            PyMem_Free(chunk->data);
   36|      0|            break;
   37|  3.17k|        case _PYTOK_CHUNK_PYOBJECT:
  ------------------
  |  Branch (37:9): [True: 3.17k, False: 493k]
  ------------------
   38|  3.17k|            Py_DECREF(chunk->owner);
  ------------------
  |  |  430|  3.17k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.17k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.17k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   39|  3.17k|            break;
   40|   496k|    }
   41|   496k|}
decoder.c:normalize_newlines_into:
   81|   153k|{
   82|   153k|    Py_ssize_t write = 0;
   83|   153k|    if (preserve_crlf || memchr(data, '\r', len) == NULL) {
  ------------------
  |  Branch (83:9): [True: 0, False: 153k]
  |  Branch (83:26): [True: 13.8k, False: 139k]
  ------------------
   84|       |        // No translation needed: copy verbatim.
   85|  13.8k|        memcpy(result, data, len);
   86|  13.8k|        write = len;
   87|  13.8k|    }
   88|   139k|    else {
   89|  3.70M|        for (Py_ssize_t read = 0; read < len; read++) {
  ------------------
  |  Branch (89:35): [True: 3.56M, False: 139k]
  ------------------
   90|  3.56M|            char c = data[read];
   91|  3.56M|            if (c == '\r') {
  ------------------
  |  Branch (91:17): [True: 139k, False: 3.42M]
  ------------------
   92|   139k|                if (read + 1 < len && data[read + 1] == '\n') {
  ------------------
  |  Branch (92:21): [True: 908, False: 138k]
  |  Branch (92:39): [True: 908, False: 0]
  ------------------
   93|    908|                    read++;
   94|    908|                }
   95|   139k|                c = '\n';
   96|   139k|            }
   97|  3.56M|            result[write++] = c;
   98|  3.56M|        }
   99|   139k|    }
  100|   153k|    int implicit = add_final_newline && write > 0 && result[write - 1] != '\n';
  ------------------
  |  Branch (100:20): [True: 13.8k, False: 139k]
  |  Branch (100:41): [True: 13.8k, False: 0]
  |  Branch (100:54): [True: 13.8k, False: 0]
  ------------------
  101|   153k|    if (implicit) {
  ------------------
  |  Branch (101:9): [True: 13.8k, False: 139k]
  ------------------
  102|  13.8k|        result[write++] = '\n';
  103|  13.8k|    }
  104|   153k|    result[write] = '\0';
  105|   153k|    *out_len = write;
  106|   153k|    if (implicit_newline != NULL) {
  ------------------
  |  Branch (106:9): [True: 153k, False: 0]
  ------------------
  107|   153k|        *implicit_newline = implicit;
  108|   153k|    }
  109|   153k|}
decoder.c:find_cookie:
  145|  14.2k|{
  146|  14.2k|    Py_ssize_t i = 0;
  147|  14.2k|    *encoding = NULL;
  148|  14.2k|    *scan_next = 1;
  149|  16.1k|    for (; i < len; i++) {
  ------------------
  |  Branch (149:12): [True: 16.0k, False: 35]
  ------------------
  150|  16.0k|        if (line[i] == '#') {
  ------------------
  |  Branch (150:13): [True: 5.07k, False: 11.0k]
  ------------------
  151|  5.07k|            break;
  152|  5.07k|        }
  153|  11.0k|        if (line[i] == '\n' || line[i] == '\r') {
  ------------------
  |  Branch (153:13): [True: 685, False: 10.3k]
  |  Branch (153:32): [True: 158, False: 10.1k]
  ------------------
  154|    843|            return 0;
  155|    843|        }
  156|  10.1k|        if (line[i] != ' ' && line[i] != '\t' && line[i] != '\f') {
  ------------------
  |  Branch (156:13): [True: 9.06k, False: 1.09k]
  |  Branch (156:31): [True: 8.64k, False: 420]
  |  Branch (156:50): [True: 8.28k, False: 364]
  ------------------
  157|  8.28k|            *scan_next = 0;
  158|  8.28k|            return 0;
  159|  8.28k|        }
  160|  10.1k|    }
  161|   218k|    for (; i + 6 < len; i++) {
  ------------------
  |  Branch (161:12): [True: 217k, False: 269]
  ------------------
  162|   217k|        if (memcmp(line + i, "coding", 6) != 0) {
  ------------------
  |  Branch (162:13): [True: 212k, False: 5.88k]
  ------------------
  163|   212k|            continue;
  164|   212k|        }
  165|  5.88k|        const char *cursor = line + i + 6;
  166|  5.88k|        if (*cursor != ':' && *cursor != '=') {
  ------------------
  |  Branch (166:13): [True: 1.47k, False: 4.40k]
  |  Branch (166:31): [True: 428, False: 1.05k]
  ------------------
  167|    428|            continue;
  168|    428|        }
  169|  10.5k|        do {
  170|  10.5k|            cursor++;
  171|  10.5k|        } while (cursor < line + len &&
  ------------------
  |  Branch (171:18): [True: 10.5k, False: 2]
  ------------------
  172|  10.5k|                 (*cursor == ' ' || *cursor == '\t'));
  ------------------
  |  Branch (172:19): [True: 4.27k, False: 6.25k]
  |  Branch (172:37): [True: 801, False: 5.45k]
  ------------------
  173|  5.45k|        const char *start = cursor;
  174|  50.3k|        while (cursor < line + len &&
  ------------------
  |  Branch (174:16): [True: 50.1k, False: 127]
  ------------------
  175|  50.1k|                (Py_ISALNUM(*cursor) || *cursor == '-' ||
  ------------------
  |  |   26|   100k|#define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |  163|  50.1k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALNUM(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
  |  |  ------------------
  |  |  |  |   12|  50.1k|#define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   10|  50.1k|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    8|  50.1k|#define PY_CTF_LOWER  0x01
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |    9|  50.1k|#define PY_CTF_UPPER  0x02
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALNUM  (PY_CTF_ALPHA|PY_CTF_DIGIT)
  |  |  |  |  ------------------
  |  |  |  |  |  |   11|  50.1k|#define PY_CTF_DIGIT  0x04
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (26:24): [True: 40.9k, False: 9.26k]
  |  |  ------------------
  ------------------
  |  Branch (175:41): [True: 1.77k, False: 7.49k]
  ------------------
  176|  44.8k|                 *cursor == '_' || *cursor == '.')) {
  ------------------
  |  Branch (176:18): [True: 960, False: 6.53k]
  |  Branch (176:36): [True: 1.20k, False: 5.32k]
  ------------------
  177|  44.8k|            cursor++;
  178|  44.8k|        }
  179|  5.45k|        if (cursor == start) {
  ------------------
  |  Branch (179:13): [True: 613, False: 4.84k]
  ------------------
  180|    613|            continue;
  181|    613|        }
  182|  4.84k|        char *found = _PyTok_CopyBytes(start, cursor - start);
  183|  4.84k|        if (found == NULL) {
  ------------------
  |  Branch (183:13): [True: 0, False: 4.84k]
  ------------------
  184|      0|            return -1;
  185|      0|        }
  186|  4.84k|        char normalized[13];
  187|  4.84k|        int n;
  188|  30.0k|        for (n = 0; n < 12 && found[n] != '\0'; n++) {
  ------------------
  |  Branch (188:21): [True: 29.9k, False: 90]
  |  Branch (188:31): [True: 25.2k, False: 4.75k]
  ------------------
  189|  25.2k|            normalized[n] = found[n] == '_' ? '-' : Py_TOLOWER(found[n]);
  ------------------
  |  |   32|  50.0k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  24.8k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  |  Branch (189:29): [True: 388, False: 24.8k]
  ------------------
  190|  25.2k|        }
  191|  4.84k|        normalized[n] = '\0';
  192|  4.84k|        const char *canonical = found;
  193|  4.84k|        if (strcmp(normalized, "utf-8") == 0 ||
  ------------------
  |  Branch (193:13): [True: 2, False: 4.83k]
  ------------------
  194|  4.83k|                strncmp(normalized, "utf-8-", 6) == 0) {
  ------------------
  |  Branch (194:17): [True: 1, False: 4.83k]
  ------------------
  195|      3|            canonical = "utf-8";
  196|      3|        }
  197|  4.83k|        else if (strcmp(normalized, "latin-1") == 0 ||
  ------------------
  |  Branch (197:18): [True: 14, False: 4.82k]
  ------------------
  198|  4.82k|                 strcmp(normalized, "iso-8859-1") == 0 ||
  ------------------
  |  Branch (198:18): [True: 2, False: 4.82k]
  ------------------
  199|  4.82k|                 strcmp(normalized, "iso-latin-1") == 0 ||
  ------------------
  |  Branch (199:18): [True: 1, False: 4.82k]
  ------------------
  200|  4.82k|                 strncmp(normalized, "latin-1-", 8) == 0 ||
  ------------------
  |  Branch (200:18): [True: 1, False: 4.81k]
  ------------------
  201|  4.81k|                 strncmp(normalized, "iso-8859-1-", 11) == 0 ||
  ------------------
  |  Branch (201:18): [True: 1, False: 4.81k]
  ------------------
  202|  4.81k|                 strncmp(normalized, "iso-latin-1-", 12) == 0) {
  ------------------
  |  Branch (202:18): [True: 2, False: 4.81k]
  ------------------
  203|     21|            canonical = "iso-8859-1";
  204|     21|        }
  205|  4.84k|        if (canonical != found) {
  ------------------
  |  Branch (205:13): [True: 24, False: 4.81k]
  ------------------
  206|     24|            PyMem_Free(found);
  207|     24|            found = _PyTok_CopyBytes(canonical, strlen(canonical));
  208|     24|            if (found == NULL) {
  ------------------
  |  Branch (208:17): [True: 0, False: 24]
  ------------------
  209|      0|                return -1;
  210|      0|            }
  211|     24|        }
  212|  4.84k|        *encoding = found;
  213|  4.84k|        *scan_next = 0;
  214|  4.84k|        return 0;
  215|  4.84k|    }
  216|    269|    return 0;
  217|  5.10k|}
decoder.c:chunk_set_unicode:
   53|  3.20k|{
   54|  3.20k|    Py_ssize_t utf8_len;
   55|  3.20k|    const char *utf8 = PyUnicode_AsUTF8AndSize(unicode, &utf8_len);
   56|  3.20k|    if (utf8 == NULL) {
  ------------------
  |  Branch (56:9): [True: 34, False: 3.17k]
  ------------------
   57|     34|        Py_DECREF(unicode);
  ------------------
  |  |  430|     34|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     34|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     34|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   58|     34|        tok->done = PyErr_ExceptionMatches(PyExc_MemoryError)
  ------------------
  |  Branch (58:21): [True: 0, False: 34]
  ------------------
   59|     34|            ? E_NOMEM : E_DECODE;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
                          ? E_NOMEM : E_DECODE;
  ------------------
  |  |   34|     68|#define E_DECODE         22      /* Error in decoding into Unicode */
  ------------------
   60|     34|        return -1;
   61|     34|    }
   62|  3.17k|    if (strip_bom && PyUnicode_GET_LENGTH(unicode) > 0 &&
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (62:9): [True: 0, False: 3.17k]
  |  Branch (62:22): [True: 0, False: 0]
  ------------------
   63|      0|            PyUnicode_ReadChar(unicode, 0) == 0xFEFF) {
  ------------------
  |  Branch (63:13): [True: 0, False: 0]
  ------------------
   64|      0|        utf8 += 3;
   65|      0|        utf8_len -= 3;
   66|      0|    }
   67|  3.17k|    chunk_release_data(chunk);
   68|  3.17k|    chunk->owner = unicode;
   69|  3.17k|    chunk->data = (char *)utf8;
   70|  3.17k|    chunk->len = utf8_len;
   71|  3.17k|    chunk->ownership = _PYTOK_CHUNK_PYOBJECT;
   72|  3.17k|    return 0;
   73|  3.20k|}
decoder.c:raw_line_length:
  296|   449k|{
  297|  27.9M|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (297:28): [True: 27.9M, False: 31.5k]
  ------------------
  298|  27.9M|        if (data[i] == '\n') {
  ------------------
  |  Branch (298:13): [True: 275k, False: 27.6M]
  ------------------
  299|   275k|            return i + 1;
  300|   275k|        }
  301|  27.6M|        if (data[i] == '\r') {
  ------------------
  |  Branch (301:13): [True: 142k, False: 27.5M]
  ------------------
  302|   142k|            return i + 1 < len && data[i + 1] == '\n' ? i + 2 : i + 1;
  ------------------
  |  Branch (302:20): [True: 141k, False: 230]
  |  Branch (302:35): [True: 938, False: 140k]
  ------------------
  303|   142k|        }
  304|  27.6M|    }
  305|  31.5k|    return len;
  306|   449k|}
decoder.c:store_prepared_source:
  311|  22.8k|{
  312|  22.8k|    Py_ssize_t pos = 0;
  313|       |    // SourceAppendLine copies the bytes, so reuse this buffer for each line.
  314|  22.8k|    char *normalized = NULL;
  315|  22.8k|    Py_ssize_t capacity = 0;
  316|   453k|    while (pos < len) {
  ------------------
  |  Branch (316:12): [True: 430k, False: 22.8k]
  ------------------
  317|   430k|        Py_ssize_t raw_line_len;
  318|   430k|        if (preserve_crlf) {
  ------------------
  |  Branch (318:13): [True: 0, False: 430k]
  ------------------
  319|      0|            const char *newline = memchr(data + pos, '\n', len - pos);
  320|      0|            raw_line_len = newline == NULL
  ------------------
  |  Branch (320:28): [True: 0, False: 0]
  ------------------
  321|      0|                ? len - pos : newline - data - pos + 1;
  322|      0|        }
  323|   430k|        else {
  324|   430k|            raw_line_len = raw_line_length(data + pos, len - pos);
  325|   430k|        }
  326|   430k|        int terminated = preserve_crlf
  ------------------
  |  Branch (326:26): [True: 0, False: 430k]
  ------------------
  327|   430k|            ? data[pos + raw_line_len - 1] == '\n'
  328|   430k|            : data[pos + raw_line_len - 1] == '\n' ||
  ------------------
  |  Branch (328:15): [True: 269k, False: 160k]
  ------------------
  329|   160k|              data[pos + raw_line_len - 1] == '\r';
  ------------------
  |  Branch (329:15): [True: 138k, False: 22.4k]
  ------------------
  330|   430k|        int add_newline = add_final_newline &&
  ------------------
  |  Branch (330:27): [True: 406k, False: 23.6k]
  ------------------
  331|   406k|            pos + raw_line_len == len && !terminated;
  ------------------
  |  Branch (331:13): [True: 14.1k, False: 392k]
  |  Branch (331:42): [True: 13.8k, False: 334]
  ------------------
  332|   430k|        int normalize = add_newline ||
  ------------------
  |  Branch (332:25): [True: 13.8k, False: 416k]
  ------------------
  333|   416k|            (!preserve_crlf &&
  ------------------
  |  Branch (333:14): [True: 416k, False: 0]
  ------------------
  334|   416k|             memchr(data + pos, '\r', raw_line_len) != NULL);
  ------------------
  |  Branch (334:14): [True: 139k, False: 277k]
  ------------------
  335|       |
  336|   430k|        const char *line = data + pos;
  337|   430k|        Py_ssize_t line_len = raw_line_len;
  338|   430k|        int implicit = 0;
  339|   430k|        if (normalize) {
  ------------------
  |  Branch (339:13): [True: 153k, False: 277k]
  ------------------
  340|   153k|            if (line_len > PY_SSIZE_T_MAX - 2) {
  ------------------
  |  |  137|   153k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (340:17): [True: 0, False: 153k]
  ------------------
  341|      0|                PyErr_NoMemory();
  342|      0|                tok->done = E_NOMEM;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
  343|      0|                goto error;
  344|      0|            }
  345|       |            // Reserve space for an optional final '\n' and the NUL terminator.
  346|   153k|            Py_ssize_t needed = line_len + 2;
  347|   153k|            if (_PyTok_ReserveBuffer(&normalized, &capacity, needed, 256) < 0) {
  ------------------
  |  Branch (347:17): [True: 0, False: 153k]
  ------------------
  348|      0|                tok->done = E_NOMEM;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
  349|      0|                goto error;
  350|      0|            }
  351|   153k|            normalize_newlines_into(normalized, line, line_len,
  352|   153k|                                    preserve_crlf, add_newline,
  353|   153k|                                    &line_len, &implicit);
  354|   153k|            line = normalized;
  355|   153k|        }
  356|   430k|        _PyTok_Off appended = _PyTok_SourceAppendLine(
  357|   430k|            &tok->source, line, line_len, implicit);
  358|   430k|        if (appended < 0) {
  ------------------
  |  Branch (358:13): [True: 0, False: 430k]
  ------------------
  359|      0|            tok->done = PyErr_ExceptionMatches(PyExc_MemoryError)
  ------------------
  |  Branch (359:25): [True: 0, False: 0]
  ------------------
  360|      0|                ? E_NOMEM : E_ERROR;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
                              ? E_NOMEM : E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
  361|      0|            goto error;
  362|      0|        }
  363|   430k|        pos += raw_line_len;
  364|   430k|    }
  365|  22.8k|    PyMem_Free(normalized);
  366|  22.8k|    return 0;
  367|      0|error:
  368|      0|    PyMem_Free(normalized);
  369|      0|    return -1;
  370|  22.8k|}

_PyTokenizer_syntaxerror:
   90|  1.73k|{
   91|       |    // These errors are cleaned on startup. Todo: Fix it.
   92|  1.73k|    va_list vargs;
   93|  1.73k|    va_start(vargs, format);
   94|  1.73k|    int ret = _syntaxerror_range(tok, _PyLexer_BufferPointer(tok, tok->line_start),
   95|  1.73k|                                 tok->cur - tok->line_start, tok->lineno,
   96|  1.73k|                                 format, -1, -1, vargs);
   97|       |    va_end(vargs);
   98|  1.73k|    return ret;
   99|  1.73k|}
_PyTokenizer_syntaxerror_known_range:
  105|     98|{
  106|     98|    va_list vargs;
  107|     98|    va_start(vargs, format);
  108|     98|    int ret = _syntaxerror_range(tok, _PyLexer_BufferPointer(tok, tok->line_start),
  109|     98|                                 tok->cur - tok->line_start, tok->lineno,
  110|     98|                                 format, col_offset, end_col_offset, vargs);
  111|       |    va_end(vargs);
  112|     98|    return ret;
  113|     98|}
_PyTokenizer_syntaxerror_at:
  120|  1.42k|{
  121|  1.42k|    va_list vargs;
  122|  1.42k|    va_start(vargs, format);
  123|  1.42k|    int ret = _syntaxerror_range(tok, line, cursor, lineno, format,
  124|  1.42k|                                col_offset, end_col_offset, vargs);
  125|       |    va_end(vargs);
  126|  1.42k|    return ret;
  127|  1.42k|}
_PyTokenizer_indenterror:
  131|      5|{
  132|      5|    tok->done = E_TABSPACE;
  ------------------
  |  |   30|      5|#define E_TABSPACE       18      /* Inconsistent mixing of tabs and spaces */
  ------------------
  133|      5|    tok->cur = tok->inp;
  134|      5|    return ERRORTOKEN;
  ------------------
  |  |   83|      5|#define ERRORTOKEN      67
  ------------------
  135|      5|}
_PyTokenizer_warn_invalid_escape_sequence:
  139|  3.95k|{
  140|  3.95k|    PyObject *msg = PyUnicode_FromFormat(
  141|  3.95k|        "\"\\%c\" is an invalid escape sequence. "
  142|  3.95k|        "Such sequences will not work in the future. "
  143|  3.95k|        "Did you mean \"\\\\%c\"? A raw string is also an option.",
  144|  3.95k|        (char) first_invalid_escape_char,
  145|  3.95k|        (char) first_invalid_escape_char
  146|  3.95k|    );
  147|       |
  148|  3.95k|    if (msg == NULL) {
  ------------------
  |  Branch (148:9): [True: 0, False: 3.95k]
  ------------------
  149|      0|        return -1;
  150|      0|    }
  151|       |
  152|  3.95k|    if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, tok->filename,
  ------------------
  |  Branch (152:9): [True: 0, False: 3.95k]
  ------------------
  153|  3.95k|                                 tok->lineno, tok->module, NULL) < 0) {
  154|      0|        Py_DECREF(msg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|       |
  156|      0|        if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
  ------------------
  |  Branch (156:13): [True: 0, False: 0]
  ------------------
  157|       |            /* Replace the SyntaxWarning exception with a SyntaxError
  158|       |               to get a more accurate error report */
  159|      0|            PyErr_Clear();
  160|       |
  161|      0|            return _PyTokenizer_syntaxerror(tok,
  162|      0|                "\"\\%c\" is an invalid escape sequence. "
  163|      0|                "Did you mean \"\\\\%c\"? A raw string is also an option.",
  164|      0|                (char) first_invalid_escape_char,
  165|      0|                (char) first_invalid_escape_char);
  166|      0|        }
  167|       |
  168|      0|        return -1;
  169|      0|    }
  170|       |
  171|  3.95k|    Py_DECREF(msg);
  ------------------
  |  |  430|  3.95k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|  3.95k|    return 0;
  173|  3.95k|}
_PyTokenizer_raise_init_error:
  177|  1.90k|{
  178|  1.90k|    if (!(PyErr_ExceptionMatches(PyExc_LookupError)
  ------------------
  |  Branch (178:11): [True: 230, False: 1.67k]
  ------------------
  179|  1.67k|          || PyErr_ExceptionMatches(PyExc_SyntaxError)
  ------------------
  |  Branch (179:14): [True: 240, False: 1.43k]
  ------------------
  180|  1.43k|          || PyErr_ExceptionMatches(PyExc_ValueError)
  ------------------
  |  Branch (180:14): [True: 1.39k, False: 44]
  ------------------
  181|     44|          || PyErr_ExceptionMatches(PyExc_UnicodeDecodeError))) {
  ------------------
  |  Branch (181:14): [True: 0, False: 44]
  ------------------
  182|     44|        return;
  183|     44|    }
  184|  1.86k|    PyObject *errstr = NULL;
  185|  1.86k|    PyObject *tuple = NULL;
  186|  1.86k|    PyObject *type;
  187|  1.86k|    PyObject *value;
  188|  1.86k|    PyObject *tback;
  189|  1.86k|    PyErr_Fetch(&type, &value, &tback);
  190|  1.86k|    if (PyErr_GivenExceptionMatches(value, PyExc_SyntaxError)) {
  ------------------
  |  Branch (190:9): [True: 240, False: 1.62k]
  ------------------
  191|    240|        if (PyObject_SetAttr(value, &_Py_ID(filename), filename)) {
  ------------------
  |  |  936|    240|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    240|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    240|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (191:13): [True: 0, False: 240]
  ------------------
  192|      0|            goto error;
  193|      0|        }
  194|    240|        PyErr_Restore(type, value, tback);
  195|    240|        return;
  196|    240|    }
  197|  1.62k|    errstr = PyObject_Str(value);
  198|  1.62k|    if (!errstr) {
  ------------------
  |  Branch (198:9): [True: 0, False: 1.62k]
  ------------------
  199|      0|        goto error;
  200|      0|    }
  201|       |
  202|  1.62k|    PyObject *tmp = Py_BuildValue("(OiiO)", filename, 0, -1, Py_None);
  ------------------
  |  |  616|  1.62k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  203|  1.62k|    if (!tmp) {
  ------------------
  |  Branch (203:9): [True: 0, False: 1.62k]
  ------------------
  204|      0|        goto error;
  205|      0|    }
  206|       |
  207|  1.62k|    tuple = _PyTuple_FromPair(errstr, tmp);
  208|  1.62k|    Py_DECREF(tmp);
  ------------------
  |  |  430|  1.62k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|  1.62k|    if (!tuple) {
  ------------------
  |  Branch (209:9): [True: 0, False: 1.62k]
  ------------------
  210|      0|        goto error;
  211|      0|    }
  212|  1.62k|    PyErr_SetObject(PyExc_SyntaxError, tuple);
  213|       |
  214|  1.62k|error:
  215|  1.62k|    Py_XDECREF(type);
  ------------------
  |  |  524|  1.62k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|  1.62k|    Py_XDECREF(value);
  ------------------
  |  |  524|  1.62k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|  1.62k|    Py_XDECREF(tback);
  ------------------
  |  |  524|  1.62k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|  1.62k|    Py_XDECREF(errstr);
  ------------------
  |  |  524|  1.62k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|  1.62k|    Py_XDECREF(tuple);
  ------------------
  |  |  524|  1.62k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|  1.62k|}
_PyTokenizer_parser_warn:
  224|  31.7k|{
  225|  31.7k|    PyObject *errmsg;
  226|  31.7k|    va_list vargs;
  227|  31.7k|    va_start(vargs, format);
  228|  31.7k|    errmsg = PyUnicode_FromFormatV(format, vargs);
  229|  31.7k|    va_end(vargs);
  230|  31.7k|    if (!errmsg) {
  ------------------
  |  Branch (230:9): [True: 0, False: 31.7k]
  ------------------
  231|      0|        goto error;
  232|      0|    }
  233|       |
  234|  31.7k|    if (PyErr_WarnExplicitObject(category, errmsg, tok->filename,
  ------------------
  |  Branch (234:9): [True: 0, False: 31.7k]
  ------------------
  235|  31.7k|                                 tok->lineno, tok->module, NULL) < 0) {
  236|      0|        if (PyErr_ExceptionMatches(category)) {
  ------------------
  |  Branch (236:13): [True: 0, False: 0]
  ------------------
  237|       |            /* Replace the DeprecationWarning exception with a SyntaxError
  238|       |               to get a more accurate error report */
  239|      0|            PyErr_Clear();
  240|      0|            _PyTokenizer_syntaxerror(tok, "%U", errmsg);
  241|      0|        }
  242|      0|        goto error;
  243|      0|    }
  244|  31.7k|    Py_DECREF(errmsg);
  ------------------
  |  |  430|  31.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  31.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  31.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|  31.7k|    return 0;
  246|       |
  247|      0|error:
  248|      0|    Py_XDECREF(errmsg);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|      0|    tok->done = E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
  250|      0|    return -1;
  251|  31.7k|}
_PyTokenizer_ensure_utf8:
  320|  8.70k|{
  321|  8.70k|    const char *badchar = NULL;
  322|  8.70k|    const char *c;
  323|  8.70k|    int length;
  324|  8.70k|    const char *line_start = line;
  325|  5.49M|    for (c = line; *c; c += length) {
  ------------------
  |  Branch (325:20): [True: 5.48M, False: 8.46k]
  ------------------
  326|  5.48M|        if (!(length = valid_utf8((const unsigned char *)c))) {
  ------------------
  |  Branch (326:13): [True: 238, False: 5.48M]
  ------------------
  327|    238|            badchar = c;
  328|    238|            break;
  329|    238|        }
  330|  5.48M|        if (*c == '\n') {
  ------------------
  |  Branch (330:13): [True: 158k, False: 5.32M]
  ------------------
  331|   158k|            lineno++;
  332|   158k|            line_start = c + 1;
  333|   158k|        }
  334|  5.48M|    }
  335|  8.70k|    if (badchar) {
  ------------------
  |  Branch (335:9): [True: 238, False: 8.46k]
  ------------------
  336|    238|        _PyTokenizer_syntaxerror_at(
  337|    238|                tok, line_start, badchar - line_start + 1, lineno,
  338|    238|                -1, -1,
  339|    238|                "Non-UTF-8 code starting with '\\x%.2x'"
  340|    238|                "%s%V on line %i, "
  341|    238|                "but no encoding declared; "
  342|    238|                "see https://peps.python.org/pep-0263/ for details",
  343|    238|                (unsigned char)*badchar,
  344|    238|                tok->filename ? " in file " : "", tok->filename, "",
  ------------------
  |  Branch (344:17): [True: 0, False: 238]
  ------------------
  345|    238|                lineno);
  346|    238|        return 0;
  347|    238|    }
  348|  8.46k|    return 1;
  349|  8.70k|}
helpers.c:_syntaxerror_range:
   31|  3.25k|{
   32|       |    // In release builds, we don't want to overwrite a previous error, but in debug builds we
   33|       |    // want to fail if we are not doing it so we can fix it.
   34|  3.25k|    assert(tok->done != E_ERROR);
  ------------------
  |  Branch (34:5): [True: 3.25k, False: 0]
  ------------------
   35|  3.25k|    if (tok->done == E_ERROR) {
  ------------------
  |  |   29|  3.25k|#define E_ERROR          17      /* Execution error */
  ------------------
  |  Branch (35:9): [True: 0, False: 3.25k]
  ------------------
   36|      0|        return ERRORTOKEN;
  ------------------
  |  |   83|      0|#define ERRORTOKEN      67
  ------------------
   37|      0|    }
   38|  3.25k|    PyObject *errmsg, *errtext, *args;
   39|  3.25k|    errmsg = PyUnicode_FromFormatV(format, vargs);
   40|  3.25k|    if (!errmsg) {
  ------------------
  |  Branch (40:9): [True: 0, False: 3.25k]
  ------------------
   41|      0|        goto error;
   42|      0|    }
   43|       |
   44|  3.25k|    errtext = PyUnicode_DecodeUTF8(line, cursor,
   45|  3.25k|                                   "replace");
   46|  3.25k|    if (!errtext) {
  ------------------
  |  Branch (46:9): [True: 0, False: 3.25k]
  ------------------
   47|      0|        goto error;
   48|      0|    }
   49|       |
   50|  3.25k|    if (col_offset == -1) {
  ------------------
  |  Branch (50:9): [True: 3.15k, False: 100]
  ------------------
   51|  3.15k|        col_offset = (int)PyUnicode_GET_LENGTH(errtext);
  ------------------
  |  |  299|  3.15k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.15k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.15k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   52|  3.15k|    }
   53|    100|    else if (col_offset > 0) {
  ------------------
  |  Branch (53:14): [True: 98, False: 2]
  ------------------
   54|     98|        col_offset = byte_col_to_char_col(line, col_offset);
   55|     98|    }
   56|  3.25k|    if (end_col_offset == -1) {
  ------------------
  |  Branch (56:9): [True: 3.15k, False: 100]
  ------------------
   57|  3.15k|        end_col_offset = col_offset;
   58|  3.15k|    }
   59|    100|    else if (end_col_offset > 0) {
  ------------------
  |  Branch (59:14): [True: 100, False: 0]
  ------------------
   60|    100|        end_col_offset = byte_col_to_char_col(line, end_col_offset);
   61|    100|    }
   62|       |
   63|  3.25k|    Py_ssize_t line_len = strcspn(line, "\n");
   64|  3.25k|    if (line_len != cursor) {
  ------------------
  |  Branch (64:9): [True: 2.66k, False: 592]
  ------------------
   65|  2.66k|        Py_DECREF(errtext);
  ------------------
  |  |  430|  2.66k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.66k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|  2.66k|        errtext = PyUnicode_DecodeUTF8(line, line_len,
   67|  2.66k|                                       "replace");
   68|  2.66k|    }
   69|  3.25k|    if (!errtext) {
  ------------------
  |  Branch (69:9): [True: 0, False: 3.25k]
  ------------------
   70|      0|        goto error;
   71|      0|    }
   72|       |
   73|  3.25k|    args = Py_BuildValue("(O(OiiNii))", errmsg,
   74|  3.25k|                         tok->filename ? tok->filename : Py_None,
  ------------------
  |  |  616|    240|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (74:26): [True: 3.01k, False: 240]
  ------------------
   75|  3.25k|                         lineno, col_offset, errtext,
   76|  3.25k|                         lineno, end_col_offset);
   77|  3.25k|    if (args) {
  ------------------
  |  Branch (77:9): [True: 3.25k, False: 0]
  ------------------
   78|  3.25k|        PyErr_SetObject(PyExc_SyntaxError, args);
   79|  3.25k|        Py_DECREF(args);
  ------------------
  |  |  430|  3.25k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|  3.25k|    }
   81|       |
   82|  3.25k|error:
   83|  3.25k|    Py_XDECREF(errmsg);
  ------------------
  |  |  524|  3.25k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.25k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.25k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|  3.25k|    tok->done = E_ERROR;
  ------------------
  |  |   29|  3.25k|#define E_ERROR          17      /* Execution error */
  ------------------
   85|  3.25k|    return ERRORTOKEN;
  ------------------
  |  |   83|  3.25k|#define ERRORTOKEN      67
  ------------------
   86|  3.25k|}
helpers.c:byte_col_to_char_col:
   16|    198|{
   17|    198|    int char_col = 1;
   18|   109k|    for (int i = 0; i < byte_col - 1; i++) {
  ------------------
  |  Branch (18:21): [True: 109k, False: 198]
  ------------------
   19|   109k|        if ((line[i] & 0xC0) != 0x80) {
  ------------------
  |  Branch (19:13): [True: 107k, False: 1.48k]
  ------------------
   20|   107k|            char_col++;
   21|   107k|        }
   22|   109k|    }
   23|    198|    return char_col;
   24|    198|}
helpers.c:valid_utf8:
  261|  5.48M|{
  262|  5.48M|    int expected = 0;
  263|  5.48M|    int length;
  264|  5.48M|    if (*s < 0x80) {
  ------------------
  |  Branch (264:9): [True: 5.46M, False: 12.7k]
  ------------------
  265|       |        /* single-byte code */
  266|  5.46M|        return 1;
  267|  5.46M|    }
  268|  12.7k|    else if (*s < 0xE0) {
  ------------------
  |  Branch (268:14): [True: 8.90k, False: 3.81k]
  ------------------
  269|       |        /* \xC2\x80-\xDF\xBF -- 0080-07FF */
  270|  8.90k|        if (*s < 0xC2) {
  ------------------
  |  Branch (270:13): [True: 95, False: 8.81k]
  ------------------
  271|       |            /* invalid sequence
  272|       |               \x80-\xBF -- continuation byte
  273|       |               \xC0-\xC1 -- fake 0000-007F */
  274|     95|            return 0;
  275|     95|        }
  276|  8.81k|        expected = 1;
  277|  8.81k|    }
  278|  3.81k|    else if (*s < 0xF0) {
  ------------------
  |  Branch (278:14): [True: 1.98k, False: 1.83k]
  ------------------
  279|       |        /* \xE0\xA0\x80-\xEF\xBF\xBF -- 0800-FFFF */
  280|  1.98k|        if (*s == 0xE0 && *(s + 1) < 0xA0) {
  ------------------
  |  Branch (280:13): [True: 290, False: 1.69k]
  |  Branch (280:27): [True: 9, False: 281]
  ------------------
  281|       |            /* invalid sequence
  282|       |               \xE0\x80\x80-\xE0\x9F\xBF -- fake 0000-0800 */
  283|      9|            return 0;
  284|      9|        }
  285|  1.97k|        else if (*s == 0xED && *(s + 1) >= 0xA0) {
  ------------------
  |  Branch (285:18): [True: 321, False: 1.65k]
  |  Branch (285:32): [True: 8, False: 313]
  ------------------
  286|       |            /* Decoding UTF-8 sequences in range \xED\xA0\x80-\xED\xBF\xBF
  287|       |               will result in surrogates in range D800-DFFF. Surrogates are
  288|       |               not valid UTF-8 so they are rejected.
  289|       |               See https://www.unicode.org/versions/Unicode5.2.0/ch03.pdf
  290|       |               (table 3-7) and http://www.rfc-editor.org/rfc/rfc3629.txt */
  291|      8|            return 0;
  292|      8|        }
  293|  1.96k|        expected = 2;
  294|  1.96k|    }
  295|  1.83k|    else if (*s < 0xF5) {
  ------------------
  |  Branch (295:14): [True: 1.82k, False: 13]
  ------------------
  296|       |        /* \xF0\x90\x80\x80-\xF4\x8F\xBF\xBF -- 10000-10FFFF */
  297|  1.82k|        if (*(s + 1) < 0x90 ? *s == 0xF0 : *s == 0xF4) {
  ------------------
  |  Branch (297:13): [True: 211, False: 1.61k]
  |  Branch (297:13): [True: 13, False: 1.81k]
  ------------------
  298|       |            /* invalid sequence -- one of:
  299|       |               \xF0\x80\x80\x80-\xF0\x8F\xBF\xBF -- fake 0000-FFFF
  300|       |               \xF4\x90\x80\x80- -- 110000- overflow */
  301|     13|            return 0;
  302|     13|        }
  303|  1.81k|        expected = 3;
  304|  1.81k|    }
  305|     13|    else {
  306|       |        /* invalid start byte */
  307|     13|        return 0;
  308|     13|    }
  309|  12.5k|    length = expected + 1;
  310|  30.5k|    for (int i = 1; i <= expected; i++) {
  ------------------
  |  Branch (310:21): [True: 18.0k, False: 12.4k]
  ------------------
  311|  18.0k|        if (s[i] < 0x80 || s[i] >= 0xC0) {
  ------------------
  |  Branch (311:13): [True: 62, False: 18.0k]
  |  Branch (311:28): [True: 38, False: 17.9k]
  ------------------
  312|    100|            return 0;
  313|    100|        }
  314|  18.0k|    }
  315|  12.4k|    return length;
  316|  12.5k|}

_PyTok_ReaderFree:
   23|  24.5k|{
   24|  24.5k|    _PyTok_Reader *reader = tok->reader;
   25|  24.5k|    if (reader == NULL) {
  ------------------
  |  Branch (25:9): [True: 0, False: 24.5k]
  ------------------
   26|      0|        return;
   27|      0|    }
   28|  24.5k|    Py_XDECREF(reader->readline);
  ------------------
  |  |  524|  24.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   29|  24.5k|    Py_XDECREF(reader->decoder);
  ------------------
  |  |  524|  24.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   30|  24.5k|    for (int i = 0;
   31|  73.6k|         i < (int)Py_ARRAY_LENGTH(reader->prefetched_lines); i++) {
  ------------------
  |  |  221|  73.6k|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (31:10): [True: 49.0k, False: 24.5k]
  ------------------
   32|  49.0k|        _PyTok_ChunkClear(&reader->prefetched_lines[i]);
   33|  49.0k|    }
   34|  24.5k|    PyMem_Free(reader->file_buffer);
   35|  24.5k|    PyMem_Free(reader->decoded);
   36|  24.5k|    PyMem_Free(reader);
   37|       |    tok->reader = NULL;
   38|  24.5k|}
_PyTok_ReserveBuffer:
   43|   153k|{
   44|   153k|    assert(initial_capacity > 0);
  ------------------
  |  Branch (44:5): [True: 153k, False: 0]
  ------------------
   45|   153k|    if (needed <= *capacity) {
  ------------------
  |  Branch (45:9): [True: 137k, False: 15.3k]
  ------------------
   46|   137k|        return 0;
   47|   137k|    }
   48|       |    // Grow geometrically to avoid reallocating for every longer line.
   49|  15.3k|    Py_ssize_t cap = *capacity > 0 ? *capacity : initial_capacity;
  ------------------
  |  Branch (49:22): [True: 898, False: 14.4k]
  ------------------
   50|  23.8k|    while (cap < needed) {
  ------------------
  |  Branch (50:12): [True: 8.50k, False: 15.3k]
  ------------------
   51|  8.50k|        if (cap > PY_SSIZE_T_MAX / 2) {
  ------------------
  |  |  137|  8.50k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (51:13): [True: 0, False: 8.50k]
  ------------------
   52|      0|            cap = needed;
   53|      0|            break;
   54|      0|        }
   55|  8.50k|        cap *= 2;
   56|  8.50k|    }
   57|  15.3k|    char *resized = PyMem_Realloc(*buffer, cap);
   58|  15.3k|    if (resized == NULL) {
  ------------------
  |  Branch (58:9): [True: 0, False: 15.3k]
  ------------------
   59|      0|        PyErr_NoMemory();
   60|      0|        return -1;
   61|      0|    }
   62|  15.3k|    *buffer = resized;
   63|  15.3k|    *capacity = cap;
   64|  15.3k|    return 0;
   65|  15.3k|}
_PyTok_ReaderIsInteractive:
  521|   227k|{
  522|   227k|    return tok->reader->kind == _PYTOK_READER_INTERACTIVE;
  523|   227k|}
_PyTokenizer_RetainedSource:
  527|  9.04k|{
  528|  9.04k|    if (tok->reader->kind == _PYTOK_READER_PREPARED) {
  ------------------
  |  Branch (528:9): [True: 9.04k, False: 0]
  ------------------
  529|  9.04k|        return _PyTok_SourceData(&tok->source);
  530|  9.04k|    }
  531|      0|    if (tok->reader->kind == _PYTOK_READER_INTERACTIVE) {
  ------------------
  |  Branch (531:9): [True: 0, False: 0]
  ------------------
  532|      0|        return tok->source.bytes;
  533|      0|    }
  534|      0|    return NULL;
  535|      0|}
_PyTok_ReaderStopInteractive:
  539|  9.05k|{
  540|  9.05k|    if (_PyTok_ReaderIsInteractive(tok)) {
  ------------------
  |  Branch (540:9): [True: 0, False: 9.05k]
  ------------------
  541|      0|        tok->reader->stop_interactive = 1;
  542|      0|    }
  543|  9.05k|}
_PyTok_ReaderUnderflow:
  574|   440k|{
  575|   440k|    assert(tok->cur >= tok->buf_offset && tok->cur <= tok->inp);
  ------------------
  |  Branch (575:5): [True: 440k, False: 0]
  |  Branch (575:5): [True: 440k, False: 0]
  ------------------
  576|   440k|    _PyTok_ReaderKind kind = tok->reader->kind;
  577|   440k|    int prepared = kind == _PYTOK_READER_PREPARED;
  578|   440k|    int streaming = reader_is_streaming(kind);
  579|   440k|    int reset_buffer = !prepared && tok->start < 0 &&
  ------------------
  |  Branch (579:24): [True: 0, False: 440k]
  |  Branch (579:37): [True: 0, False: 0]
  ------------------
  580|      0|        _PyLexer_CurrentFTString(tok) == NULL;
  ------------------
  |  Branch (580:9): [True: 0, False: 0]
  ------------------
  581|       |
  582|   440k|    _PyTok_Chunk chunk;
  583|   440k|    _PyTok_ReadResult result = reader_next(tok, &chunk);
  584|   440k|    if (result != _PYTOK_READ_LINE) {
  ------------------
  |  Branch (584:9): [True: 19.4k, False: 421k]
  ------------------
  585|  19.4k|        if (reset_buffer && streaming) {
  ------------------
  |  Branch (585:13): [True: 0, False: 19.4k]
  |  Branch (585:29): [True: 0, False: 0]
  ------------------
  586|      0|            reset_streaming_buffer(tok);
  587|      0|        }
  588|  19.4k|        if (result == _PYTOK_READ_EOF) {
  ------------------
  |  Branch (588:13): [True: 19.4k, False: 0]
  ------------------
  589|  19.4k|            tok->done = E_EOF;
  ------------------
  |  |   23|  19.4k|#define E_EOF            11      /* End Of File */
  ------------------
  590|  19.4k|        }
  591|      0|        else if (result == _PYTOK_READ_STOPPED) {
  ------------------
  |  Branch (591:18): [True: 0, False: 0]
  ------------------
  592|      0|            tok->done = E_INTERACT_STOP;
  ------------------
  |  |   39|      0|#define E_INTERACT_STOP  28      /* Interactive mode stopped tokenization */
  ------------------
  593|      0|        }
  594|      0|        else if (result == _PYTOK_READ_INTERRUPT) {
  ------------------
  |  Branch (594:18): [True: 0, False: 0]
  ------------------
  595|      0|            tok->done = E_INTR;
  ------------------
  |  |   24|      0|#define E_INTR           12      /* Interrupted */
  ------------------
  596|      0|        }
  597|      0|        else {
  598|      0|            if (tok->done == E_OK) {
  ------------------
  |  |   22|      0|#define E_OK             10      /* No error */
  ------------------
  |  Branch (598:17): [True: 0, False: 0]
  ------------------
  599|      0|                tok->done = PyErr_ExceptionMatches(PyExc_MemoryError)
  ------------------
  |  Branch (599:29): [True: 0, False: 0]
  ------------------
  600|      0|                    ? E_NOMEM : E_ERROR;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
                                  ? E_NOMEM : E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
  601|      0|            }
  602|      0|        }
  603|  19.4k|        if (kind == _PYTOK_READER_INTERACTIVE &&
  ------------------
  |  Branch (603:13): [True: 0, False: 19.4k]
  ------------------
  604|      0|                result != _PYTOK_READ_STOPPED) {
  ------------------
  |  Branch (604:17): [True: 0, False: 0]
  ------------------
  605|      0|            PySys_WriteStderr("\n");
  606|      0|        }
  607|  19.4k|        return 0;
  608|  19.4k|    }
  609|   421k|    if (tok->lineno == INT_MAX) {
  ------------------
  |  Branch (609:9): [True: 0, False: 421k]
  ------------------
  610|      0|        PyErr_SetString(PyExc_OverflowError, "too many tokenizer source lines");
  611|      0|        tok->done = E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
  612|      0|        _PyTok_ChunkClear(&chunk);
  613|      0|        return 0;
  614|      0|    }
  615|       |
  616|   421k|    if (!prepared) {
  ------------------
  |  Branch (616:9): [True: 0, False: 421k]
  ------------------
  617|      0|        if (streaming && reset_buffer) {
  ------------------
  |  Branch (617:13): [True: 0, False: 0]
  |  Branch (617:26): [True: 0, False: 0]
  ------------------
  618|      0|            reset_streaming_buffer(tok);
  619|      0|        }
  620|      0|        _PyTok_Off source_start = _PyTok_SourceAppendLine(
  621|      0|            &tok->source, chunk.data, chunk.len,
  622|      0|            chunk.implicit_newline);
  623|      0|        if (source_start < 0) {
  ------------------
  |  Branch (623:13): [True: 0, False: 0]
  ------------------
  624|      0|            _PyTok_ChunkClear(&chunk);
  625|      0|            tok->done = PyErr_ExceptionMatches(PyExc_MemoryError)
  ------------------
  |  Branch (625:25): [True: 0, False: 0]
  ------------------
  626|      0|                ? E_NOMEM : E_ERROR;
  ------------------
  |  |   27|      0|#define E_NOMEM          15      /* Ran out of memory */
  ------------------
                              ? E_NOMEM : E_ERROR;
  ------------------
  |  |   29|      0|#define E_ERROR          17      /* Execution error */
  ------------------
  627|      0|            return 0;
  628|      0|        }
  629|      0|        if (reset_buffer) {
  ------------------
  |  Branch (629:13): [True: 0, False: 0]
  ------------------
  630|      0|            tok->cur = source_start;
  631|      0|            tok->buf_offset = source_start;
  632|      0|            tok->line_start = tok->buf_offset;
  633|      0|            tok->start = -1;
  634|      0|        }
  635|      0|        tok->inp = source_start + chunk.len;
  636|      0|    }
  637|   421k|    if (prepared) {
  ------------------
  |  Branch (637:9): [True: 421k, False: 0]
  ------------------
  638|   421k|        if (tok->start < 0 && _PyLexer_CurrentFTString(tok) == NULL) {
  ------------------
  |  Branch (638:13): [True: 355k, False: 65.5k]
  |  Branch (638:31): [True: 354k, False: 808]
  ------------------
  639|   354k|            tok->buf_offset = tok->source.base_offset +
  640|   354k|                (chunk.data - tok->source.bytes);
  641|   354k|        }
  642|   421k|        tok->inp = _PyLexer_BufferOffset(tok, chunk.data) + chunk.len;
  643|   421k|    }
  644|   421k|    tok->implicit_newline = chunk.implicit_newline;
  645|       |
  646|   421k|    tok->lineno++;
  647|   421k|    if (kind == _PYTOK_READER_FILE &&
  ------------------
  |  Branch (647:9): [True: 0, False: 421k]
  ------------------
  648|      0|            (tok->encoding == NULL || strcmp(tok->encoding, "utf-8") == 0) &&
  ------------------
  |  Branch (648:14): [True: 0, False: 0]
  |  Branch (648:39): [True: 0, False: 0]
  ------------------
  649|      0|            !_PyTokenizer_ensure_utf8(_PyLexer_BufferPointer(tok, tok->cur), tok, tok->lineno)) {
  ------------------
  |  Branch (649:13): [True: 0, False: 0]
  ------------------
  650|      0|        _PyTok_ChunkClear(&chunk);
  651|      0|        return 0;
  652|      0|    }
  653|   421k|    _PyTok_ChunkClear(&chunk);
  654|   421k|    return 1;
  655|   421k|}
_PyTokenizer_FromString:
  712|  13.5k|{
  713|  13.5k|    return tokenizer_from_string(input, 0, exec_input, preserve_crlf);
  714|  13.5k|}
_PyTokenizer_FromUTF8:
  718|  11.0k|{
  719|  11.0k|    return tokenizer_from_string(input, 1, exec_input, preserve_crlf);
  720|  11.0k|}
reader.c:reader_is_streaming:
   17|   440k|{
   18|   440k|    return kind == _PYTOK_READER_FILE || kind == _PYTOK_READER_READLINE;
  ------------------
  |  Branch (18:12): [True: 0, False: 440k]
  |  Branch (18:42): [True: 0, False: 440k]
  ------------------
   19|   440k|}
reader.c:reader_next:
  547|   440k|{
  548|   440k|    *chunk = (_PyTok_Chunk){0};
  549|   440k|    switch (tok->reader->kind) {
  ------------------
  |  Branch (549:13): [True: 440k, False: 0]
  ------------------
  550|   440k|        case _PYTOK_READER_PREPARED:
  ------------------
  |  Branch (550:9): [True: 440k, False: 0]
  ------------------
  551|   440k|            return next_prepared(tok, chunk);
  552|      0|        case _PYTOK_READER_FILE:
  ------------------
  |  Branch (552:9): [True: 0, False: 440k]
  ------------------
  553|      0|            return next_file(tok, chunk);
  554|      0|        case _PYTOK_READER_READLINE:
  ------------------
  |  Branch (554:9): [True: 0, False: 440k]
  ------------------
  555|      0|            return next_readline(tok, chunk);
  556|      0|        case _PYTOK_READER_INTERACTIVE:
  ------------------
  |  Branch (556:9): [True: 0, False: 440k]
  ------------------
  557|      0|            return next_interactive(tok, chunk);
  558|   440k|    }
  559|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  560|   440k|}
reader.c:next_prepared:
  141|   440k|{
  142|   440k|    if (tok->lineno >= tok->source.nlines) {
  ------------------
  |  Branch (142:9): [True: 19.4k, False: 421k]
  ------------------
  143|  19.4k|        return _PYTOK_READ_EOF;
  144|  19.4k|    }
  145|   421k|    int lineno = tok->lineno + 1;
  146|   421k|    const char *start = _PyLexer_BufferPointer(tok, tok->inp);
  147|   421k|    const char *newline = memchr(
  148|   421k|        start, '\n', tok->source.bytes + tok->source.len - start);
  149|   421k|    _PyTok_Off end = newline != NULL
  ------------------
  |  Branch (149:22): [True: 413k, False: 8.29k]
  ------------------
  150|   421k|        ? newline - tok->source.bytes + 1 : tok->source.len;
  151|   421k|    chunk->data = (char *)start;
  152|   421k|    chunk->len = tok->source.bytes + end - start;
  153|   421k|    chunk->ownership = _PYTOK_CHUNK_BORROWED;
  154|   421k|    chunk->implicit_newline = _PyTok_SourceLineIsImplicit(
  155|   421k|        &tok->source, lineno);
  156|   421k|    return _PYTOK_READ_LINE;
  157|   440k|}
reader.c:tokenizer_from_string:
  695|  24.5k|{
  696|  24.5k|    struct tok_state *tok = tokenizer_new_with_reader(_PYTOK_READER_PREPARED);
  697|  24.5k|    if (tok == NULL) {
  ------------------
  |  Branch (697:9): [True: 0, False: 24.5k]
  ------------------
  698|      0|        return NULL;
  699|      0|    }
  700|  24.5k|    if (_PyTok_PrepareString(
  ------------------
  |  Branch (700:9): [True: 1.90k, False: 22.6k]
  ------------------
  701|  24.5k|            tok, input, utf8_only, exec_input, preserve_crlf) < 0) {
  702|  1.90k|        _PyTokenizer_Free(tok);
  703|  1.90k|        return NULL;
  704|  1.90k|    }
  705|  22.6k|    tok->cur = tok->inp = tok->source.base_offset;
  706|  22.6k|    tok->line_start = tok->source.base_offset;
  707|  22.6k|    return tok;
  708|  24.5k|}
reader.c:tokenizer_new_with_reader:
  659|  24.5k|{
  660|  24.5k|    struct tok_state *tok = PyMem_Calloc(1, sizeof(*tok));
  661|  24.5k|    if (tok == NULL) {
  ------------------
  |  Branch (661:9): [True: 0, False: 24.5k]
  ------------------
  662|      0|        PyErr_NoMemory();
  663|      0|        return NULL;
  664|      0|    }
  665|  24.5k|    tok->start = tok->line_start = -1;
  666|  24.5k|    _PyTok_SourceInit(&tok->source);
  667|  24.5k|    tok->done = E_OK;
  ------------------
  |  |   22|  24.5k|#define E_OK             10      /* No error */
  ------------------
  668|  24.5k|    tok->layout.at_bol = 1;
  669|  24.5k|    tok->start_loc = (_PyTok_Loc){-1, -1};
  670|  24.5k|    tok->ftstring_stack = tok->ftstring_stack_inline;
  671|  24.5k|    tok->ftstring_capacity = FTSTRING_STACK_INLINE_CAPACITY;
  ------------------
  |  |   11|  24.5k|#define FTSTRING_STACK_INLINE_CAPACITY 1
  ------------------
  672|       |#ifdef Py_DEBUG
  673|       |    tok->debug = _Py_GetConfig()->parser_debug;
  674|       |#endif
  675|  24.5k|    tok->reader = PyMem_Calloc(1, sizeof(*tok->reader));
  676|  24.5k|    if (tok->reader == NULL) {
  ------------------
  |  Branch (676:9): [True: 0, False: 24.5k]
  ------------------
  677|      0|        PyErr_NoMemory();
  678|      0|        _PyTokenizer_Free(tok);
  679|      0|        return NULL;
  680|      0|    }
  681|  24.5k|    tok->reader->kind = kind;
  682|  24.5k|    if (kind == _PYTOK_READER_PREPARED) {
  ------------------
  |  Branch (682:9): [True: 24.5k, False: 0]
  ------------------
  683|  24.5k|        return tok;
  684|  24.5k|    }
  685|      0|    if (reader_is_streaming(kind)) {
  ------------------
  |  Branch (685:9): [True: 0, False: 0]
  ------------------
  686|      0|        tok->cur = tok->inp = tok->source.base_offset;
  687|      0|        tok->line_start = tok->buf_offset;
  688|      0|    }
  689|      0|    return tok;
  690|  24.5k|}

_PyTok_SourceInit:
    7|  49.0k|{
    8|  49.0k|    *source = (_PyTok_SourceText){0};
    9|  49.0k|}
_PyTok_SourceClear:
   13|  24.5k|{
   14|  24.5k|    PyMem_Free(source->bytes);
   15|  24.5k|    PyMem_Free(source->implicit_lines);
   16|  24.5k|    _PyTok_SourceInit(source);
   17|  24.5k|}
_PyTok_SourceAppendLine:
  127|   430k|{
  128|   430k|    if (validate_line(source, bytes, len, implicit_newline) < 0) {
  ------------------
  |  Branch (128:9): [True: 0, False: 430k]
  ------------------
  129|      0|        return -1;
  130|      0|    }
  131|   430k|    if (source->len > PY_SSIZE_T_MAX - len - 1 ||
  ------------------
  |  |  137|   430k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (131:9): [True: 0, False: 430k]
  ------------------
  132|   430k|            source->base_offset > PY_SSIZE_T_MAX - source->len - len) {
  ------------------
  |  |  137|   430k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (132:13): [True: 0, False: 430k]
  ------------------
  133|      0|        PyErr_NoMemory();
  134|      0|        return -1;
  135|      0|    }
  136|   430k|    int nlines = source->nlines + 1;
  137|   430k|    if ((implicit_newline && reserve_implicit_lines(source, nlines) < 0) ||
  ------------------
  |  Branch (137:10): [True: 13.8k, False: 416k]
  |  Branch (137:30): [True: 0, False: 13.8k]
  ------------------
  138|   430k|            reserve_bytes(source, source->len + len + 1) < 0) {
  ------------------
  |  Branch (138:13): [True: 0, False: 430k]
  ------------------
  139|      0|        return -1;
  140|      0|    }
  141|       |
  142|   430k|    _PyTok_Off start = source->len;
  143|   430k|    memcpy(source->bytes + start, bytes, len);
  144|   430k|    source->len += len;
  145|   430k|    source->bytes[source->len] = '\0';
  146|   430k|    if (implicit_newline) {
  ------------------
  |  Branch (146:9): [True: 13.8k, False: 416k]
  ------------------
  147|  13.8k|        source->implicit_lines[(nlines - 1) / 8] |=
  148|  13.8k|            (unsigned char)(1U << ((nlines - 1) & 7));
  149|  13.8k|    }
  150|   430k|    source->nlines = nlines;
  151|   430k|    return source->base_offset + start;
  152|   430k|}
_PyTok_SourceLineView:
  157|    295|{
  158|    295|    assert(len != NULL);
  ------------------
  |  Branch (158:5): [True: 295, False: 0]
  ------------------
  159|    295|    const char *line = _PyTok_SourceData(source);
  160|    295|    const char *end = line + source->len;
  161|  7.88k|    while (lineno > 1) {
  ------------------
  |  Branch (161:12): [True: 7.58k, False: 295]
  ------------------
  162|  7.58k|        const char *newline = memchr(line, '\n', end - line);
  163|  7.58k|        if (newline == NULL) {
  ------------------
  |  Branch (163:13): [True: 0, False: 7.58k]
  ------------------
  164|      0|            break;
  165|      0|        }
  166|  7.58k|        line = newline + 1;
  167|  7.58k|        lineno--;
  168|  7.58k|    }
  169|    295|    const char *newline = memchr(line, '\n', end - line);
  170|    295|    *len = (newline != NULL ? newline : end) - line;
  ------------------
  |  Branch (170:13): [True: 289, False: 6]
  ------------------
  171|    295|    return line;
  172|    295|}
_PyTok_SourceLineIsImplicit:
  176|   421k|{
  177|   421k|    if (lineno < 1 || lineno > source->nlines ||
  ------------------
  |  Branch (177:9): [True: 0, False: 421k]
  |  Branch (177:23): [True: 0, False: 421k]
  ------------------
  178|   421k|            (lineno - 1) / 8 >= source->implicit_cap) {
  ------------------
  |  Branch (178:13): [True: 92.3k, False: 329k]
  ------------------
  179|  92.3k|        return 0;
  180|  92.3k|    }
  181|   329k|    return (source->implicit_lines[(lineno - 1) / 8] >>
  182|   329k|            ((lineno - 1) & 7)) & 1;
  183|   421k|}
source.c:validate_line:
  103|   430k|{
  104|   430k|    if (len <= 0 || bytes == NULL ||
  ------------------
  |  Branch (104:9): [True: 0, False: 430k]
  |  Branch (104:21): [True: 0, False: 430k]
  ------------------
  105|   430k|            (source->nlines > 0 &&
  ------------------
  |  Branch (105:14): [True: 407k, False: 22.8k]
  ------------------
  106|   407k|             (source->len == 0 || source->bytes[source->len - 1] != '\n'))) {
  ------------------
  |  Branch (106:15): [True: 0, False: 407k]
  |  Branch (106:35): [True: 0, False: 407k]
  ------------------
  107|      0|        PyErr_SetString(PyExc_SystemError, "invalid tokenizer source line");
  108|      0|        return -1;
  109|      0|    }
  110|   430k|    const char *newline = memchr(bytes, '\n', len);
  111|   430k|    if ((newline != NULL && newline != bytes + len - 1) ||
  ------------------
  |  Branch (111:10): [True: 421k, False: 8.60k]
  |  Branch (111:29): [True: 0, False: 421k]
  ------------------
  112|   430k|            (implicit_newline && newline == NULL)) {
  ------------------
  |  Branch (112:14): [True: 13.8k, False: 416k]
  |  Branch (112:34): [True: 0, False: 13.8k]
  ------------------
  113|      0|        PyErr_SetString(PyExc_SystemError, "invalid tokenizer source line");
  114|      0|        return -1;
  115|      0|    }
  116|   430k|    if (source->nlines == INT_MAX ||
  ------------------
  |  Branch (116:9): [True: 0, False: 430k]
  ------------------
  117|   430k|            (source->nlines == INT_MAX - 1 && newline != NULL)) {
  ------------------
  |  Branch (117:14): [True: 0, False: 430k]
  |  Branch (117:47): [True: 0, False: 0]
  ------------------
  118|      0|        PyErr_SetString(PyExc_OverflowError, "too many tokenizer source lines");
  119|      0|        return -1;
  120|      0|    }
  121|   430k|    return 0;
  122|   430k|}
source.c:reserve_implicit_lines:
   76|  13.8k|{
   77|  13.8k|    Py_ssize_t needed = nlines / 8 + (nlines % 8 != 0);
   78|  13.8k|    if (needed <= source->implicit_cap) {
  ------------------
  |  Branch (78:9): [True: 0, False: 13.8k]
  ------------------
   79|      0|        return 0;
   80|      0|    }
   81|  13.8k|    Py_ssize_t cap = source->implicit_cap > 0 ? source->implicit_cap : 16;
  ------------------
  |  Branch (81:22): [True: 0, False: 13.8k]
  ------------------
   82|  14.6k|    while (cap < needed) {
  ------------------
  |  Branch (82:12): [True: 816, False: 13.8k]
  ------------------
   83|    816|        if (cap > PY_SSIZE_T_MAX / 2) {
  ------------------
  |  |  137|    816|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (83:13): [True: 0, False: 816]
  ------------------
   84|      0|            cap = needed;
   85|      0|            break;
   86|      0|        }
   87|    816|        cap *= 2;
   88|    816|    }
   89|  13.8k|    unsigned char *lines = PyMem_Realloc(source->implicit_lines, cap);
   90|  13.8k|    if (lines == NULL) {
  ------------------
  |  Branch (90:9): [True: 0, False: 13.8k]
  ------------------
   91|      0|        PyErr_NoMemory();
   92|      0|        return -1;
   93|      0|    }
   94|  13.8k|    memset(lines + source->implicit_cap, 0, cap - source->implicit_cap);
   95|  13.8k|    source->implicit_lines = lines;
   96|  13.8k|    source->implicit_cap = cap;
   97|  13.8k|    return 0;
   98|  13.8k|}
source.c:reserve_bytes:
   37|   430k|{
   38|   430k|    if (needed <= source->cap) {
  ------------------
  |  Branch (38:9): [True: 406k, False: 23.4k]
  ------------------
   39|   406k|        return 0;
   40|   406k|    }
   41|  23.4k|    Py_ssize_t cap = source->cap > 0 ? source->cap : BUFSIZ;
  ------------------
  |  Branch (41:22): [True: 547, False: 22.8k]
  ------------------
   42|  24.1k|    while (cap < needed) {
  ------------------
  |  Branch (42:12): [True: 785, False: 23.4k]
  ------------------
   43|    785|        if (cap > PY_SSIZE_T_MAX / 2) {
  ------------------
  |  |  137|    785|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (43:13): [True: 0, False: 785]
  ------------------
   44|      0|            cap = needed;
   45|      0|            break;
   46|      0|        }
   47|    785|        cap *= 2;
   48|    785|    }
   49|  23.4k|    char *bytes;
   50|       |#ifdef Py_DEBUG
   51|       |    /* Moving on growth makes stale interior pointers fail in debug builds. */
   52|       |    bytes = PyMem_Malloc(cap);
   53|       |    if (bytes != NULL && source->len > 0) {
   54|       |        memcpy(bytes, source->bytes, source->len);
   55|       |    }
   56|       |#else
   57|  23.4k|    bytes = PyMem_Realloc(source->bytes, cap);
   58|  23.4k|#endif
   59|  23.4k|    if (bytes == NULL) {
  ------------------
  |  Branch (59:9): [True: 0, False: 23.4k]
  ------------------
   60|      0|        PyErr_NoMemory();
   61|      0|        return -1;
   62|      0|    }
   63|       |#ifdef Py_DEBUG
   64|       |    if (source->bytes != NULL) {
   65|       |        memset(source->bytes, 0xDD, source->cap);
   66|       |        PyMem_Free(source->bytes);
   67|       |    }
   68|       |#endif
   69|  23.4k|    source->bytes = bytes;
   70|  23.4k|    source->cap = cap;
   71|  23.4k|    return 0;
   72|  23.4k|}

reader.c:_PyTok_SourceData:
   20|   851k|{
   21|   851k|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 851k, False: 10]
  ------------------
   22|   851k|}
source.c:_PyTok_SourceData:
   20|    295|{
   21|    295|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 289, False: 6]
  ------------------
   22|    295|}
helpers.c:_PyTok_SourceData:
   20|  1.83k|{
   21|  1.83k|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 1.83k, False: 0]
  ------------------
   22|  1.83k|}
lexer.c:_PyTok_SourceData:
   20|  11.3M|{
   21|  11.3M|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 11.3M, False: 0]
  ------------------
   22|  11.3M|}
string.c:_PyTok_SourceData:
   20|  63.3k|{
   21|  63.3k|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 63.3k, False: 0]
  ------------------
   22|  63.3k|}
decoder.c:_PyTok_SourceData:
   20|  8.70k|{
   21|  8.70k|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 8.69k, False: 13]
  ------------------
   22|  8.70k|}
api.c:_PyTok_SourceData:
   20|  10.0M|{
   21|  10.0M|    return source->bytes != NULL ? source->bytes : "";
  ------------------
  |  Branch (21:12): [True: 10.0M, False: 0]
  ------------------
   22|  10.0M|}

pegen.c:_PyToken_Free:
   65|  5.04M|{
   66|       |    Py_CLEAR(token->metadata);
  ------------------
  |  |  484|  5.04M|    do { \
  |  |  485|  5.04M|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.04M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.04M|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.04M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.04M|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.04M|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 5.04M]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  5.04M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.04M]
  |  |  ------------------
  ------------------
   67|  5.04M|}
pegen_errors.c:_PyToken_Free:
   65|  5.71k|{
   66|       |    Py_CLEAR(token->metadata);
  ------------------
  |  |  484|  5.71k|    do { \
  |  |  485|  5.71k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.71k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.71k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.71k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.71k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.71k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 5.71k]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|  5.71k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.71k]
  |  |  ------------------
  ------------------
   67|  5.71k|}
lexer.c:_PyToken_Free:
   65|  5.21M|{
   66|       |    Py_CLEAR(token->metadata);
  ------------------
  |  |  484|  5.21M|    do { \
  |  |  485|  5.21M|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  5.21M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  5.21M|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  5.21M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  5.21M|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  5.21M|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 156, False: 5.21M]
  |  |  ------------------
  |  |  488|    156|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    156|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    156|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    156|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    156|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    156|        } \
  |  |  491|  5.21M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 5.21M]
  |  |  ------------------
  ------------------
   67|  5.21M|}

string.c:_PyTok_SpanIsValid:
   29|  7.40k|{
   30|  7.40k|    return span.start >= 0 && span.end >= span.start;
  ------------------
  |  Branch (30:12): [True: 7.40k, False: 0]
  |  Branch (30:31): [True: 7.40k, False: 0]
  ------------------
   31|  7.40k|}
string.c:_PyTok_SpanFromBounds:
   23|    856|{
   24|    856|    return (_PyTok_Span){start, end};
   25|    856|}
api.c:_PyTok_SpanIsValid:
   29|  5.00M|{
   30|  5.00M|    return span.start >= 0 && span.end >= span.start;
  ------------------
  |  Branch (30:12): [True: 5.00M, False: 0]
  |  Branch (30:31): [True: 5.00M, False: 0]
  ------------------
   31|  5.00M|}

_PyAST_Module:
 3259|  8.78k|{
 3260|  8.78k|    mod_ty p;
 3261|  8.78k|    p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
 3262|  8.78k|    if (!p)
  ------------------
  |  Branch (3262:9): [True: 0, False: 8.78k]
  ------------------
 3263|      0|        return NULL;
 3264|  8.78k|    p->kind = Module_kind;
 3265|  8.78k|    p->v.Module.body = body;
 3266|  8.78k|    p->v.Module.type_ignores = type_ignores;
 3267|  8.78k|    return p;
 3268|  8.78k|}
_PyAST_Interactive:
 3272|  2.25k|{
 3273|  2.25k|    mod_ty p;
 3274|  2.25k|    p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
 3275|  2.25k|    if (!p)
  ------------------
  |  Branch (3275:9): [True: 0, False: 2.25k]
  ------------------
 3276|      0|        return NULL;
 3277|  2.25k|    p->kind = Interactive_kind;
 3278|  2.25k|    p->v.Interactive.body = body;
 3279|  2.25k|    return p;
 3280|  2.25k|}
_PyAST_Expression:
 3284|  1.72k|{
 3285|  1.72k|    mod_ty p;
 3286|  1.72k|    if (!body) {
  ------------------
  |  Branch (3286:9): [True: 0, False: 1.72k]
  ------------------
 3287|      0|        PyErr_SetString(PyExc_ValueError,
 3288|      0|                        "field 'body' is required for Expression");
 3289|      0|        return NULL;
 3290|      0|    }
 3291|  1.72k|    p = (mod_ty)_PyArena_Malloc(arena, sizeof(*p));
 3292|  1.72k|    if (!p)
  ------------------
  |  Branch (3292:9): [True: 0, False: 1.72k]
  ------------------
 3293|      0|        return NULL;
 3294|  1.72k|    p->kind = Expression_kind;
 3295|  1.72k|    p->v.Expression.body = body;
 3296|  1.72k|    return p;
 3297|  1.72k|}
_PyAST_FunctionDef:
 3323|  8.36k|{
 3324|  8.36k|    stmt_ty p;
 3325|  8.36k|    if (!name) {
  ------------------
  |  Branch (3325:9): [True: 0, False: 8.36k]
  ------------------
 3326|      0|        PyErr_SetString(PyExc_ValueError,
 3327|      0|                        "field 'name' is required for FunctionDef");
 3328|      0|        return NULL;
 3329|      0|    }
 3330|  8.36k|    if (!args) {
  ------------------
  |  Branch (3330:9): [True: 0, False: 8.36k]
  ------------------
 3331|      0|        PyErr_SetString(PyExc_ValueError,
 3332|      0|                        "field 'args' is required for FunctionDef");
 3333|      0|        return NULL;
 3334|      0|    }
 3335|  8.36k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3336|  8.36k|    if (!p)
  ------------------
  |  Branch (3336:9): [True: 0, False: 8.36k]
  ------------------
 3337|      0|        return NULL;
 3338|  8.36k|    p->kind = FunctionDef_kind;
 3339|  8.36k|    p->v.FunctionDef.name = name;
 3340|  8.36k|    p->v.FunctionDef.args = args;
 3341|  8.36k|    p->v.FunctionDef.body = body;
 3342|  8.36k|    p->v.FunctionDef.decorator_list = decorator_list;
 3343|  8.36k|    p->v.FunctionDef.returns = returns;
 3344|  8.36k|    p->v.FunctionDef.type_comment = type_comment;
 3345|  8.36k|    p->v.FunctionDef.type_params = type_params;
 3346|  8.36k|    p->lineno = lineno;
 3347|  8.36k|    p->col_offset = col_offset;
 3348|  8.36k|    p->end_lineno = end_lineno;
 3349|  8.36k|    p->end_col_offset = end_col_offset;
 3350|  8.36k|    return p;
 3351|  8.36k|}
_PyAST_AsyncFunctionDef:
 3359|  4.61k|{
 3360|  4.61k|    stmt_ty p;
 3361|  4.61k|    if (!name) {
  ------------------
  |  Branch (3361:9): [True: 0, False: 4.61k]
  ------------------
 3362|      0|        PyErr_SetString(PyExc_ValueError,
 3363|      0|                        "field 'name' is required for AsyncFunctionDef");
 3364|      0|        return NULL;
 3365|      0|    }
 3366|  4.61k|    if (!args) {
  ------------------
  |  Branch (3366:9): [True: 0, False: 4.61k]
  ------------------
 3367|      0|        PyErr_SetString(PyExc_ValueError,
 3368|      0|                        "field 'args' is required for AsyncFunctionDef");
 3369|      0|        return NULL;
 3370|      0|    }
 3371|  4.61k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3372|  4.61k|    if (!p)
  ------------------
  |  Branch (3372:9): [True: 0, False: 4.61k]
  ------------------
 3373|      0|        return NULL;
 3374|  4.61k|    p->kind = AsyncFunctionDef_kind;
 3375|  4.61k|    p->v.AsyncFunctionDef.name = name;
 3376|  4.61k|    p->v.AsyncFunctionDef.args = args;
 3377|  4.61k|    p->v.AsyncFunctionDef.body = body;
 3378|  4.61k|    p->v.AsyncFunctionDef.decorator_list = decorator_list;
 3379|  4.61k|    p->v.AsyncFunctionDef.returns = returns;
 3380|  4.61k|    p->v.AsyncFunctionDef.type_comment = type_comment;
 3381|  4.61k|    p->v.AsyncFunctionDef.type_params = type_params;
 3382|  4.61k|    p->lineno = lineno;
 3383|  4.61k|    p->col_offset = col_offset;
 3384|  4.61k|    p->end_lineno = end_lineno;
 3385|  4.61k|    p->end_col_offset = end_col_offset;
 3386|  4.61k|    return p;
 3387|  4.61k|}
_PyAST_ClassDef:
 3394|  17.8k|{
 3395|  17.8k|    stmt_ty p;
 3396|  17.8k|    if (!name) {
  ------------------
  |  Branch (3396:9): [True: 0, False: 17.8k]
  ------------------
 3397|      0|        PyErr_SetString(PyExc_ValueError,
 3398|      0|                        "field 'name' is required for ClassDef");
 3399|      0|        return NULL;
 3400|      0|    }
 3401|  17.8k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3402|  17.8k|    if (!p)
  ------------------
  |  Branch (3402:9): [True: 0, False: 17.8k]
  ------------------
 3403|      0|        return NULL;
 3404|  17.8k|    p->kind = ClassDef_kind;
 3405|  17.8k|    p->v.ClassDef.name = name;
 3406|  17.8k|    p->v.ClassDef.bases = bases;
 3407|  17.8k|    p->v.ClassDef.keywords = keywords;
 3408|  17.8k|    p->v.ClassDef.body = body;
 3409|  17.8k|    p->v.ClassDef.decorator_list = decorator_list;
 3410|  17.8k|    p->v.ClassDef.type_params = type_params;
 3411|  17.8k|    p->lineno = lineno;
 3412|  17.8k|    p->col_offset = col_offset;
 3413|  17.8k|    p->end_lineno = end_lineno;
 3414|  17.8k|    p->end_col_offset = end_col_offset;
 3415|  17.8k|    return p;
 3416|  17.8k|}
_PyAST_Return:
 3421|  1.93k|{
 3422|  1.93k|    stmt_ty p;
 3423|  1.93k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3424|  1.93k|    if (!p)
  ------------------
  |  Branch (3424:9): [True: 0, False: 1.93k]
  ------------------
 3425|      0|        return NULL;
 3426|  1.93k|    p->kind = Return_kind;
 3427|  1.93k|    p->v.Return.value = value;
 3428|  1.93k|    p->lineno = lineno;
 3429|  1.93k|    p->col_offset = col_offset;
 3430|  1.93k|    p->end_lineno = end_lineno;
 3431|  1.93k|    p->end_col_offset = end_col_offset;
 3432|  1.93k|    return p;
 3433|  1.93k|}
_PyAST_Delete:
 3438|  1.74k|{
 3439|  1.74k|    stmt_ty p;
 3440|  1.74k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3441|  1.74k|    if (!p)
  ------------------
  |  Branch (3441:9): [True: 0, False: 1.74k]
  ------------------
 3442|      0|        return NULL;
 3443|  1.74k|    p->kind = Delete_kind;
 3444|  1.74k|    p->v.Delete.targets = targets;
 3445|  1.74k|    p->lineno = lineno;
 3446|  1.74k|    p->col_offset = col_offset;
 3447|  1.74k|    p->end_lineno = end_lineno;
 3448|  1.74k|    p->end_col_offset = end_col_offset;
 3449|  1.74k|    return p;
 3450|  1.74k|}
_PyAST_Assign:
 3456|  12.0k|{
 3457|  12.0k|    stmt_ty p;
 3458|  12.0k|    if (!value) {
  ------------------
  |  Branch (3458:9): [True: 0, False: 12.0k]
  ------------------
 3459|      0|        PyErr_SetString(PyExc_ValueError,
 3460|      0|                        "field 'value' is required for Assign");
 3461|      0|        return NULL;
 3462|      0|    }
 3463|  12.0k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3464|  12.0k|    if (!p)
  ------------------
  |  Branch (3464:9): [True: 0, False: 12.0k]
  ------------------
 3465|      0|        return NULL;
 3466|  12.0k|    p->kind = Assign_kind;
 3467|  12.0k|    p->v.Assign.targets = targets;
 3468|  12.0k|    p->v.Assign.value = value;
 3469|  12.0k|    p->v.Assign.type_comment = type_comment;
 3470|  12.0k|    p->lineno = lineno;
 3471|  12.0k|    p->col_offset = col_offset;
 3472|  12.0k|    p->end_lineno = end_lineno;
 3473|  12.0k|    p->end_col_offset = end_col_offset;
 3474|  12.0k|    return p;
 3475|  12.0k|}
_PyAST_TypeAlias:
 3481|    826|{
 3482|    826|    stmt_ty p;
 3483|    826|    if (!name) {
  ------------------
  |  Branch (3483:9): [True: 0, False: 826]
  ------------------
 3484|      0|        PyErr_SetString(PyExc_ValueError,
 3485|      0|                        "field 'name' is required for TypeAlias");
 3486|      0|        return NULL;
 3487|      0|    }
 3488|    826|    if (!value) {
  ------------------
  |  Branch (3488:9): [True: 0, False: 826]
  ------------------
 3489|      0|        PyErr_SetString(PyExc_ValueError,
 3490|      0|                        "field 'value' is required for TypeAlias");
 3491|      0|        return NULL;
 3492|      0|    }
 3493|    826|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3494|    826|    if (!p)
  ------------------
  |  Branch (3494:9): [True: 0, False: 826]
  ------------------
 3495|      0|        return NULL;
 3496|    826|    p->kind = TypeAlias_kind;
 3497|    826|    p->v.TypeAlias.name = name;
 3498|    826|    p->v.TypeAlias.type_params = type_params;
 3499|    826|    p->v.TypeAlias.value = value;
 3500|    826|    p->lineno = lineno;
 3501|    826|    p->col_offset = col_offset;
 3502|    826|    p->end_lineno = end_lineno;
 3503|    826|    p->end_col_offset = end_col_offset;
 3504|    826|    return p;
 3505|    826|}
_PyAST_AugAssign:
 3510|  14.1k|{
 3511|  14.1k|    stmt_ty p;
 3512|  14.1k|    if (!target) {
  ------------------
  |  Branch (3512:9): [True: 0, False: 14.1k]
  ------------------
 3513|      0|        PyErr_SetString(PyExc_ValueError,
 3514|      0|                        "field 'target' is required for AugAssign");
 3515|      0|        return NULL;
 3516|      0|    }
 3517|  14.1k|    if (!op) {
  ------------------
  |  Branch (3517:9): [True: 0, False: 14.1k]
  ------------------
 3518|      0|        PyErr_SetString(PyExc_ValueError,
 3519|      0|                        "field 'op' is required for AugAssign");
 3520|      0|        return NULL;
 3521|      0|    }
 3522|  14.1k|    if (!value) {
  ------------------
  |  Branch (3522:9): [True: 0, False: 14.1k]
  ------------------
 3523|      0|        PyErr_SetString(PyExc_ValueError,
 3524|      0|                        "field 'value' is required for AugAssign");
 3525|      0|        return NULL;
 3526|      0|    }
 3527|  14.1k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3528|  14.1k|    if (!p)
  ------------------
  |  Branch (3528:9): [True: 0, False: 14.1k]
  ------------------
 3529|      0|        return NULL;
 3530|  14.1k|    p->kind = AugAssign_kind;
 3531|  14.1k|    p->v.AugAssign.target = target;
 3532|  14.1k|    p->v.AugAssign.op = op;
 3533|  14.1k|    p->v.AugAssign.value = value;
 3534|  14.1k|    p->lineno = lineno;
 3535|  14.1k|    p->col_offset = col_offset;
 3536|  14.1k|    p->end_lineno = end_lineno;
 3537|  14.1k|    p->end_col_offset = end_col_offset;
 3538|  14.1k|    return p;
 3539|  14.1k|}
_PyAST_AnnAssign:
 3545|  31.9k|{
 3546|  31.9k|    stmt_ty p;
 3547|  31.9k|    if (!target) {
  ------------------
  |  Branch (3547:9): [True: 0, False: 31.9k]
  ------------------
 3548|      0|        PyErr_SetString(PyExc_ValueError,
 3549|      0|                        "field 'target' is required for AnnAssign");
 3550|      0|        return NULL;
 3551|      0|    }
 3552|  31.9k|    if (!annotation) {
  ------------------
  |  Branch (3552:9): [True: 0, False: 31.9k]
  ------------------
 3553|      0|        PyErr_SetString(PyExc_ValueError,
 3554|      0|                        "field 'annotation' is required for AnnAssign");
 3555|      0|        return NULL;
 3556|      0|    }
 3557|  31.9k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3558|  31.9k|    if (!p)
  ------------------
  |  Branch (3558:9): [True: 0, False: 31.9k]
  ------------------
 3559|      0|        return NULL;
 3560|  31.9k|    p->kind = AnnAssign_kind;
 3561|  31.9k|    p->v.AnnAssign.target = target;
 3562|  31.9k|    p->v.AnnAssign.annotation = annotation;
 3563|  31.9k|    p->v.AnnAssign.value = value;
 3564|  31.9k|    p->v.AnnAssign.simple = simple;
 3565|  31.9k|    p->lineno = lineno;
 3566|  31.9k|    p->col_offset = col_offset;
 3567|  31.9k|    p->end_lineno = end_lineno;
 3568|  31.9k|    p->end_col_offset = end_col_offset;
 3569|  31.9k|    return p;
 3570|  31.9k|}
_PyAST_For:
 3576|  1.81k|{
 3577|  1.81k|    stmt_ty p;
 3578|  1.81k|    if (!target) {
  ------------------
  |  Branch (3578:9): [True: 0, False: 1.81k]
  ------------------
 3579|      0|        PyErr_SetString(PyExc_ValueError,
 3580|      0|                        "field 'target' is required for For");
 3581|      0|        return NULL;
 3582|      0|    }
 3583|  1.81k|    if (!iter) {
  ------------------
  |  Branch (3583:9): [True: 0, False: 1.81k]
  ------------------
 3584|      0|        PyErr_SetString(PyExc_ValueError,
 3585|      0|                        "field 'iter' is required for For");
 3586|      0|        return NULL;
 3587|      0|    }
 3588|  1.81k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3589|  1.81k|    if (!p)
  ------------------
  |  Branch (3589:9): [True: 0, False: 1.81k]
  ------------------
 3590|      0|        return NULL;
 3591|  1.81k|    p->kind = For_kind;
 3592|  1.81k|    p->v.For.target = target;
 3593|  1.81k|    p->v.For.iter = iter;
 3594|  1.81k|    p->v.For.body = body;
 3595|  1.81k|    p->v.For.orelse = orelse;
 3596|  1.81k|    p->v.For.type_comment = type_comment;
 3597|  1.81k|    p->lineno = lineno;
 3598|  1.81k|    p->col_offset = col_offset;
 3599|  1.81k|    p->end_lineno = end_lineno;
 3600|  1.81k|    p->end_col_offset = end_col_offset;
 3601|  1.81k|    return p;
 3602|  1.81k|}
_PyAST_AsyncFor:
 3608|    549|{
 3609|    549|    stmt_ty p;
 3610|    549|    if (!target) {
  ------------------
  |  Branch (3610:9): [True: 0, False: 549]
  ------------------
 3611|      0|        PyErr_SetString(PyExc_ValueError,
 3612|      0|                        "field 'target' is required for AsyncFor");
 3613|      0|        return NULL;
 3614|      0|    }
 3615|    549|    if (!iter) {
  ------------------
  |  Branch (3615:9): [True: 0, False: 549]
  ------------------
 3616|      0|        PyErr_SetString(PyExc_ValueError,
 3617|      0|                        "field 'iter' is required for AsyncFor");
 3618|      0|        return NULL;
 3619|      0|    }
 3620|    549|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3621|    549|    if (!p)
  ------------------
  |  Branch (3621:9): [True: 0, False: 549]
  ------------------
 3622|      0|        return NULL;
 3623|    549|    p->kind = AsyncFor_kind;
 3624|    549|    p->v.AsyncFor.target = target;
 3625|    549|    p->v.AsyncFor.iter = iter;
 3626|    549|    p->v.AsyncFor.body = body;
 3627|    549|    p->v.AsyncFor.orelse = orelse;
 3628|    549|    p->v.AsyncFor.type_comment = type_comment;
 3629|    549|    p->lineno = lineno;
 3630|    549|    p->col_offset = col_offset;
 3631|    549|    p->end_lineno = end_lineno;
 3632|    549|    p->end_col_offset = end_col_offset;
 3633|    549|    return p;
 3634|    549|}
_PyAST_While:
 3640|  3.12k|{
 3641|  3.12k|    stmt_ty p;
 3642|  3.12k|    if (!test) {
  ------------------
  |  Branch (3642:9): [True: 0, False: 3.12k]
  ------------------
 3643|      0|        PyErr_SetString(PyExc_ValueError,
 3644|      0|                        "field 'test' is required for While");
 3645|      0|        return NULL;
 3646|      0|    }
 3647|  3.12k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3648|  3.12k|    if (!p)
  ------------------
  |  Branch (3648:9): [True: 0, False: 3.12k]
  ------------------
 3649|      0|        return NULL;
 3650|  3.12k|    p->kind = While_kind;
 3651|  3.12k|    p->v.While.test = test;
 3652|  3.12k|    p->v.While.body = body;
 3653|  3.12k|    p->v.While.orelse = orelse;
 3654|  3.12k|    p->lineno = lineno;
 3655|  3.12k|    p->col_offset = col_offset;
 3656|  3.12k|    p->end_lineno = end_lineno;
 3657|  3.12k|    p->end_col_offset = end_col_offset;
 3658|  3.12k|    return p;
 3659|  3.12k|}
_PyAST_If:
 3665|  3.87k|{
 3666|  3.87k|    stmt_ty p;
 3667|  3.87k|    if (!test) {
  ------------------
  |  Branch (3667:9): [True: 0, False: 3.87k]
  ------------------
 3668|      0|        PyErr_SetString(PyExc_ValueError,
 3669|      0|                        "field 'test' is required for If");
 3670|      0|        return NULL;
 3671|      0|    }
 3672|  3.87k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3673|  3.87k|    if (!p)
  ------------------
  |  Branch (3673:9): [True: 0, False: 3.87k]
  ------------------
 3674|      0|        return NULL;
 3675|  3.87k|    p->kind = If_kind;
 3676|  3.87k|    p->v.If.test = test;
 3677|  3.87k|    p->v.If.body = body;
 3678|  3.87k|    p->v.If.orelse = orelse;
 3679|  3.87k|    p->lineno = lineno;
 3680|  3.87k|    p->col_offset = col_offset;
 3681|  3.87k|    p->end_lineno = end_lineno;
 3682|  3.87k|    p->end_col_offset = end_col_offset;
 3683|  3.87k|    return p;
 3684|  3.87k|}
_PyAST_With:
 3690|  2.13k|{
 3691|  2.13k|    stmt_ty p;
 3692|  2.13k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3693|  2.13k|    if (!p)
  ------------------
  |  Branch (3693:9): [True: 0, False: 2.13k]
  ------------------
 3694|      0|        return NULL;
 3695|  2.13k|    p->kind = With_kind;
 3696|  2.13k|    p->v.With.items = items;
 3697|  2.13k|    p->v.With.body = body;
 3698|  2.13k|    p->v.With.type_comment = type_comment;
 3699|  2.13k|    p->lineno = lineno;
 3700|  2.13k|    p->col_offset = col_offset;
 3701|  2.13k|    p->end_lineno = end_lineno;
 3702|  2.13k|    p->end_col_offset = end_col_offset;
 3703|  2.13k|    return p;
 3704|  2.13k|}
_PyAST_AsyncWith:
 3710|  3.61k|{
 3711|  3.61k|    stmt_ty p;
 3712|  3.61k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3713|  3.61k|    if (!p)
  ------------------
  |  Branch (3713:9): [True: 0, False: 3.61k]
  ------------------
 3714|      0|        return NULL;
 3715|  3.61k|    p->kind = AsyncWith_kind;
 3716|  3.61k|    p->v.AsyncWith.items = items;
 3717|  3.61k|    p->v.AsyncWith.body = body;
 3718|  3.61k|    p->v.AsyncWith.type_comment = type_comment;
 3719|  3.61k|    p->lineno = lineno;
 3720|  3.61k|    p->col_offset = col_offset;
 3721|  3.61k|    p->end_lineno = end_lineno;
 3722|  3.61k|    p->end_col_offset = end_col_offset;
 3723|  3.61k|    return p;
 3724|  3.61k|}
_PyAST_Match:
 3729|    287|{
 3730|    287|    stmt_ty p;
 3731|    287|    if (!subject) {
  ------------------
  |  Branch (3731:9): [True: 0, False: 287]
  ------------------
 3732|      0|        PyErr_SetString(PyExc_ValueError,
 3733|      0|                        "field 'subject' is required for Match");
 3734|      0|        return NULL;
 3735|      0|    }
 3736|    287|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3737|    287|    if (!p)
  ------------------
  |  Branch (3737:9): [True: 0, False: 287]
  ------------------
 3738|      0|        return NULL;
 3739|    287|    p->kind = Match_kind;
 3740|    287|    p->v.Match.subject = subject;
 3741|    287|    p->v.Match.cases = cases;
 3742|    287|    p->lineno = lineno;
 3743|    287|    p->col_offset = col_offset;
 3744|    287|    p->end_lineno = end_lineno;
 3745|    287|    p->end_col_offset = end_col_offset;
 3746|    287|    return p;
 3747|    287|}
_PyAST_Raise:
 3752|  2.16k|{
 3753|  2.16k|    stmt_ty p;
 3754|  2.16k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3755|  2.16k|    if (!p)
  ------------------
  |  Branch (3755:9): [True: 0, False: 2.16k]
  ------------------
 3756|      0|        return NULL;
 3757|  2.16k|    p->kind = Raise_kind;
 3758|  2.16k|    p->v.Raise.exc = exc;
 3759|  2.16k|    p->v.Raise.cause = cause;
 3760|  2.16k|    p->lineno = lineno;
 3761|  2.16k|    p->col_offset = col_offset;
 3762|  2.16k|    p->end_lineno = end_lineno;
 3763|  2.16k|    p->end_col_offset = end_col_offset;
 3764|  2.16k|    return p;
 3765|  2.16k|}
_PyAST_Try:
 3771|  5.40k|{
 3772|  5.40k|    stmt_ty p;
 3773|  5.40k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3774|  5.40k|    if (!p)
  ------------------
  |  Branch (3774:9): [True: 0, False: 5.40k]
  ------------------
 3775|      0|        return NULL;
 3776|  5.40k|    p->kind = Try_kind;
 3777|  5.40k|    p->v.Try.body = body;
 3778|  5.40k|    p->v.Try.handlers = handlers;
 3779|  5.40k|    p->v.Try.orelse = orelse;
 3780|  5.40k|    p->v.Try.finalbody = finalbody;
 3781|  5.40k|    p->lineno = lineno;
 3782|  5.40k|    p->col_offset = col_offset;
 3783|  5.40k|    p->end_lineno = end_lineno;
 3784|  5.40k|    p->end_col_offset = end_col_offset;
 3785|  5.40k|    return p;
 3786|  5.40k|}
_PyAST_TryStar:
 3793|  3.56k|{
 3794|  3.56k|    stmt_ty p;
 3795|  3.56k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3796|  3.56k|    if (!p)
  ------------------
  |  Branch (3796:9): [True: 0, False: 3.56k]
  ------------------
 3797|      0|        return NULL;
 3798|  3.56k|    p->kind = TryStar_kind;
 3799|  3.56k|    p->v.TryStar.body = body;
 3800|  3.56k|    p->v.TryStar.handlers = handlers;
 3801|  3.56k|    p->v.TryStar.orelse = orelse;
 3802|  3.56k|    p->v.TryStar.finalbody = finalbody;
 3803|  3.56k|    p->lineno = lineno;
 3804|  3.56k|    p->col_offset = col_offset;
 3805|  3.56k|    p->end_lineno = end_lineno;
 3806|  3.56k|    p->end_col_offset = end_col_offset;
 3807|  3.56k|    return p;
 3808|  3.56k|}
_PyAST_Assert:
 3813|  4.31k|{
 3814|  4.31k|    stmt_ty p;
 3815|  4.31k|    if (!test) {
  ------------------
  |  Branch (3815:9): [True: 0, False: 4.31k]
  ------------------
 3816|      0|        PyErr_SetString(PyExc_ValueError,
 3817|      0|                        "field 'test' is required for Assert");
 3818|      0|        return NULL;
 3819|      0|    }
 3820|  4.31k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3821|  4.31k|    if (!p)
  ------------------
  |  Branch (3821:9): [True: 0, False: 4.31k]
  ------------------
 3822|      0|        return NULL;
 3823|  4.31k|    p->kind = Assert_kind;
 3824|  4.31k|    p->v.Assert.test = test;
 3825|  4.31k|    p->v.Assert.msg = msg;
 3826|  4.31k|    p->lineno = lineno;
 3827|  4.31k|    p->col_offset = col_offset;
 3828|  4.31k|    p->end_lineno = end_lineno;
 3829|  4.31k|    p->end_col_offset = end_col_offset;
 3830|  4.31k|    return p;
 3831|  4.31k|}
_PyAST_Import:
 3836|  4.80k|{
 3837|  4.80k|    stmt_ty p;
 3838|  4.80k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3839|  4.80k|    if (!p)
  ------------------
  |  Branch (3839:9): [True: 0, False: 4.80k]
  ------------------
 3840|      0|        return NULL;
 3841|  4.80k|    p->kind = Import_kind;
 3842|  4.80k|    p->v.Import.names = names;
 3843|  4.80k|    p->v.Import.is_lazy = is_lazy;
 3844|  4.80k|    p->lineno = lineno;
 3845|  4.80k|    p->col_offset = col_offset;
 3846|  4.80k|    p->end_lineno = end_lineno;
 3847|  4.80k|    p->end_col_offset = end_col_offset;
 3848|  4.80k|    return p;
 3849|  4.80k|}
_PyAST_ImportFrom:
 3855|  5.44k|{
 3856|  5.44k|    stmt_ty p;
 3857|  5.44k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3858|  5.44k|    if (!p)
  ------------------
  |  Branch (3858:9): [True: 0, False: 5.44k]
  ------------------
 3859|      0|        return NULL;
 3860|  5.44k|    p->kind = ImportFrom_kind;
 3861|  5.44k|    p->v.ImportFrom.module = module;
 3862|  5.44k|    p->v.ImportFrom.names = names;
 3863|  5.44k|    p->v.ImportFrom.level = level;
 3864|  5.44k|    p->v.ImportFrom.is_lazy = is_lazy;
 3865|  5.44k|    p->lineno = lineno;
 3866|  5.44k|    p->col_offset = col_offset;
 3867|  5.44k|    p->end_lineno = end_lineno;
 3868|  5.44k|    p->end_col_offset = end_col_offset;
 3869|  5.44k|    return p;
 3870|  5.44k|}
_PyAST_Global:
 3875|  1.25k|{
 3876|  1.25k|    stmt_ty p;
 3877|  1.25k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3878|  1.25k|    if (!p)
  ------------------
  |  Branch (3878:9): [True: 0, False: 1.25k]
  ------------------
 3879|      0|        return NULL;
 3880|  1.25k|    p->kind = Global_kind;
 3881|  1.25k|    p->v.Global.names = names;
 3882|  1.25k|    p->lineno = lineno;
 3883|  1.25k|    p->col_offset = col_offset;
 3884|  1.25k|    p->end_lineno = end_lineno;
 3885|  1.25k|    p->end_col_offset = end_col_offset;
 3886|  1.25k|    return p;
 3887|  1.25k|}
_PyAST_Nonlocal:
 3892|    388|{
 3893|    388|    stmt_ty p;
 3894|    388|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3895|    388|    if (!p)
  ------------------
  |  Branch (3895:9): [True: 0, False: 388]
  ------------------
 3896|      0|        return NULL;
 3897|    388|    p->kind = Nonlocal_kind;
 3898|    388|    p->v.Nonlocal.names = names;
 3899|    388|    p->lineno = lineno;
 3900|    388|    p->col_offset = col_offset;
 3901|    388|    p->end_lineno = end_lineno;
 3902|    388|    p->end_col_offset = end_col_offset;
 3903|    388|    return p;
 3904|    388|}
_PyAST_Expr:
 3909|   189k|{
 3910|   189k|    stmt_ty p;
 3911|   189k|    if (!value) {
  ------------------
  |  Branch (3911:9): [True: 0, False: 189k]
  ------------------
 3912|      0|        PyErr_SetString(PyExc_ValueError,
 3913|      0|                        "field 'value' is required for Expr");
 3914|      0|        return NULL;
 3915|      0|    }
 3916|   189k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3917|   189k|    if (!p)
  ------------------
  |  Branch (3917:9): [True: 0, False: 189k]
  ------------------
 3918|      0|        return NULL;
 3919|   189k|    p->kind = Expr_kind;
 3920|   189k|    p->v.Expr.value = value;
 3921|   189k|    p->lineno = lineno;
 3922|   189k|    p->col_offset = col_offset;
 3923|   189k|    p->end_lineno = end_lineno;
 3924|   189k|    p->end_col_offset = end_col_offset;
 3925|   189k|    return p;
 3926|   189k|}
_PyAST_Pass:
 3931|  4.62k|{
 3932|  4.62k|    stmt_ty p;
 3933|  4.62k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3934|  4.62k|    if (!p)
  ------------------
  |  Branch (3934:9): [True: 0, False: 4.62k]
  ------------------
 3935|      0|        return NULL;
 3936|  4.62k|    p->kind = Pass_kind;
 3937|  4.62k|    p->lineno = lineno;
 3938|  4.62k|    p->col_offset = col_offset;
 3939|  4.62k|    p->end_lineno = end_lineno;
 3940|  4.62k|    p->end_col_offset = end_col_offset;
 3941|  4.62k|    return p;
 3942|  4.62k|}
_PyAST_Break:
 3947|  1.79k|{
 3948|  1.79k|    stmt_ty p;
 3949|  1.79k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3950|  1.79k|    if (!p)
  ------------------
  |  Branch (3950:9): [True: 0, False: 1.79k]
  ------------------
 3951|      0|        return NULL;
 3952|  1.79k|    p->kind = Break_kind;
 3953|  1.79k|    p->lineno = lineno;
 3954|  1.79k|    p->col_offset = col_offset;
 3955|  1.79k|    p->end_lineno = end_lineno;
 3956|  1.79k|    p->end_col_offset = end_col_offset;
 3957|  1.79k|    return p;
 3958|  1.79k|}
_PyAST_Continue:
 3963|  1.83k|{
 3964|  1.83k|    stmt_ty p;
 3965|  1.83k|    p = (stmt_ty)_PyArena_Malloc(arena, sizeof(*p));
 3966|  1.83k|    if (!p)
  ------------------
  |  Branch (3966:9): [True: 0, False: 1.83k]
  ------------------
 3967|      0|        return NULL;
 3968|  1.83k|    p->kind = Continue_kind;
 3969|  1.83k|    p->lineno = lineno;
 3970|  1.83k|    p->col_offset = col_offset;
 3971|  1.83k|    p->end_lineno = end_lineno;
 3972|  1.83k|    p->end_col_offset = end_col_offset;
 3973|  1.83k|    return p;
 3974|  1.83k|}
_PyAST_BoolOp:
 3979|  6.01k|{
 3980|  6.01k|    expr_ty p;
 3981|  6.01k|    if (!op) {
  ------------------
  |  Branch (3981:9): [True: 0, False: 6.01k]
  ------------------
 3982|      0|        PyErr_SetString(PyExc_ValueError,
 3983|      0|                        "field 'op' is required for BoolOp");
 3984|      0|        return NULL;
 3985|      0|    }
 3986|  6.01k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 3987|  6.01k|    if (!p)
  ------------------
  |  Branch (3987:9): [True: 0, False: 6.01k]
  ------------------
 3988|      0|        return NULL;
 3989|  6.01k|    p->kind = BoolOp_kind;
 3990|  6.01k|    p->v.BoolOp.op = op;
 3991|  6.01k|    p->v.BoolOp.values = values;
 3992|  6.01k|    p->lineno = lineno;
 3993|  6.01k|    p->col_offset = col_offset;
 3994|  6.01k|    p->end_lineno = end_lineno;
 3995|  6.01k|    p->end_col_offset = end_col_offset;
 3996|  6.01k|    return p;
 3997|  6.01k|}
_PyAST_NamedExpr:
 4002|  7.62k|{
 4003|  7.62k|    expr_ty p;
 4004|  7.62k|    if (!target) {
  ------------------
  |  Branch (4004:9): [True: 0, False: 7.62k]
  ------------------
 4005|      0|        PyErr_SetString(PyExc_ValueError,
 4006|      0|                        "field 'target' is required for NamedExpr");
 4007|      0|        return NULL;
 4008|      0|    }
 4009|  7.62k|    if (!value) {
  ------------------
  |  Branch (4009:9): [True: 0, False: 7.62k]
  ------------------
 4010|      0|        PyErr_SetString(PyExc_ValueError,
 4011|      0|                        "field 'value' is required for NamedExpr");
 4012|      0|        return NULL;
 4013|      0|    }
 4014|  7.62k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4015|  7.62k|    if (!p)
  ------------------
  |  Branch (4015:9): [True: 0, False: 7.62k]
  ------------------
 4016|      0|        return NULL;
 4017|  7.62k|    p->kind = NamedExpr_kind;
 4018|  7.62k|    p->v.NamedExpr.target = target;
 4019|  7.62k|    p->v.NamedExpr.value = value;
 4020|  7.62k|    p->lineno = lineno;
 4021|  7.62k|    p->col_offset = col_offset;
 4022|  7.62k|    p->end_lineno = end_lineno;
 4023|  7.62k|    p->end_col_offset = end_col_offset;
 4024|  7.62k|    return p;
 4025|  7.62k|}
_PyAST_BinOp:
 4030|   981k|{
 4031|   981k|    expr_ty p;
 4032|   981k|    if (!left) {
  ------------------
  |  Branch (4032:9): [True: 0, False: 981k]
  ------------------
 4033|      0|        PyErr_SetString(PyExc_ValueError,
 4034|      0|                        "field 'left' is required for BinOp");
 4035|      0|        return NULL;
 4036|      0|    }
 4037|   981k|    if (!op) {
  ------------------
  |  Branch (4037:9): [True: 0, False: 981k]
  ------------------
 4038|      0|        PyErr_SetString(PyExc_ValueError,
 4039|      0|                        "field 'op' is required for BinOp");
 4040|      0|        return NULL;
 4041|      0|    }
 4042|   981k|    if (!right) {
  ------------------
  |  Branch (4042:9): [True: 0, False: 981k]
  ------------------
 4043|      0|        PyErr_SetString(PyExc_ValueError,
 4044|      0|                        "field 'right' is required for BinOp");
 4045|      0|        return NULL;
 4046|      0|    }
 4047|   981k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4048|   981k|    if (!p)
  ------------------
  |  Branch (4048:9): [True: 0, False: 981k]
  ------------------
 4049|      0|        return NULL;
 4050|   981k|    p->kind = BinOp_kind;
 4051|   981k|    p->v.BinOp.left = left;
 4052|   981k|    p->v.BinOp.op = op;
 4053|   981k|    p->v.BinOp.right = right;
 4054|   981k|    p->lineno = lineno;
 4055|   981k|    p->col_offset = col_offset;
 4056|   981k|    p->end_lineno = end_lineno;
 4057|   981k|    p->end_col_offset = end_col_offset;
 4058|   981k|    return p;
 4059|   981k|}
_PyAST_UnaryOp:
 4064|   316k|{
 4065|   316k|    expr_ty p;
 4066|   316k|    if (!op) {
  ------------------
  |  Branch (4066:9): [True: 0, False: 316k]
  ------------------
 4067|      0|        PyErr_SetString(PyExc_ValueError,
 4068|      0|                        "field 'op' is required for UnaryOp");
 4069|      0|        return NULL;
 4070|      0|    }
 4071|   316k|    if (!operand) {
  ------------------
  |  Branch (4071:9): [True: 0, False: 316k]
  ------------------
 4072|      0|        PyErr_SetString(PyExc_ValueError,
 4073|      0|                        "field 'operand' is required for UnaryOp");
 4074|      0|        return NULL;
 4075|      0|    }
 4076|   316k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4077|   316k|    if (!p)
  ------------------
  |  Branch (4077:9): [True: 0, False: 316k]
  ------------------
 4078|      0|        return NULL;
 4079|   316k|    p->kind = UnaryOp_kind;
 4080|   316k|    p->v.UnaryOp.op = op;
 4081|   316k|    p->v.UnaryOp.operand = operand;
 4082|   316k|    p->lineno = lineno;
 4083|   316k|    p->col_offset = col_offset;
 4084|   316k|    p->end_lineno = end_lineno;
 4085|   316k|    p->end_col_offset = end_col_offset;
 4086|   316k|    return p;
 4087|   316k|}
_PyAST_Lambda:
 4092|  7.99k|{
 4093|  7.99k|    expr_ty p;
 4094|  7.99k|    if (!args) {
  ------------------
  |  Branch (4094:9): [True: 0, False: 7.99k]
  ------------------
 4095|      0|        PyErr_SetString(PyExc_ValueError,
 4096|      0|                        "field 'args' is required for Lambda");
 4097|      0|        return NULL;
 4098|      0|    }
 4099|  7.99k|    if (!body) {
  ------------------
  |  Branch (4099:9): [True: 0, False: 7.99k]
  ------------------
 4100|      0|        PyErr_SetString(PyExc_ValueError,
 4101|      0|                        "field 'body' is required for Lambda");
 4102|      0|        return NULL;
 4103|      0|    }
 4104|  7.99k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4105|  7.99k|    if (!p)
  ------------------
  |  Branch (4105:9): [True: 0, False: 7.99k]
  ------------------
 4106|      0|        return NULL;
 4107|  7.99k|    p->kind = Lambda_kind;
 4108|  7.99k|    p->v.Lambda.args = args;
 4109|  7.99k|    p->v.Lambda.body = body;
 4110|  7.99k|    p->lineno = lineno;
 4111|  7.99k|    p->col_offset = col_offset;
 4112|  7.99k|    p->end_lineno = end_lineno;
 4113|  7.99k|    p->end_col_offset = end_col_offset;
 4114|  7.99k|    return p;
 4115|  7.99k|}
_PyAST_IfExp:
 4120|  3.37k|{
 4121|  3.37k|    expr_ty p;
 4122|  3.37k|    if (!test) {
  ------------------
  |  Branch (4122:9): [True: 0, False: 3.37k]
  ------------------
 4123|      0|        PyErr_SetString(PyExc_ValueError,
 4124|      0|                        "field 'test' is required for IfExp");
 4125|      0|        return NULL;
 4126|      0|    }
 4127|  3.37k|    if (!body) {
  ------------------
  |  Branch (4127:9): [True: 0, False: 3.37k]
  ------------------
 4128|      0|        PyErr_SetString(PyExc_ValueError,
 4129|      0|                        "field 'body' is required for IfExp");
 4130|      0|        return NULL;
 4131|      0|    }
 4132|  3.37k|    if (!orelse) {
  ------------------
  |  Branch (4132:9): [True: 0, False: 3.37k]
  ------------------
 4133|      0|        PyErr_SetString(PyExc_ValueError,
 4134|      0|                        "field 'orelse' is required for IfExp");
 4135|      0|        return NULL;
 4136|      0|    }
 4137|  3.37k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4138|  3.37k|    if (!p)
  ------------------
  |  Branch (4138:9): [True: 0, False: 3.37k]
  ------------------
 4139|      0|        return NULL;
 4140|  3.37k|    p->kind = IfExp_kind;
 4141|  3.37k|    p->v.IfExp.test = test;
 4142|  3.37k|    p->v.IfExp.body = body;
 4143|  3.37k|    p->v.IfExp.orelse = orelse;
 4144|  3.37k|    p->lineno = lineno;
 4145|  3.37k|    p->col_offset = col_offset;
 4146|  3.37k|    p->end_lineno = end_lineno;
 4147|  3.37k|    p->end_col_offset = end_col_offset;
 4148|  3.37k|    return p;
 4149|  3.37k|}
_PyAST_Dict:
 4154|  2.28k|{
 4155|  2.28k|    expr_ty p;
 4156|  2.28k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4157|  2.28k|    if (!p)
  ------------------
  |  Branch (4157:9): [True: 0, False: 2.28k]
  ------------------
 4158|      0|        return NULL;
 4159|  2.28k|    p->kind = Dict_kind;
 4160|  2.28k|    p->v.Dict.keys = keys;
 4161|  2.28k|    p->v.Dict.values = values;
 4162|  2.28k|    p->lineno = lineno;
 4163|  2.28k|    p->col_offset = col_offset;
 4164|  2.28k|    p->end_lineno = end_lineno;
 4165|  2.28k|    p->end_col_offset = end_col_offset;
 4166|  2.28k|    return p;
 4167|  2.28k|}
_PyAST_Set:
 4172|  18.3k|{
 4173|  18.3k|    expr_ty p;
 4174|  18.3k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4175|  18.3k|    if (!p)
  ------------------
  |  Branch (4175:9): [True: 0, False: 18.3k]
  ------------------
 4176|      0|        return NULL;
 4177|  18.3k|    p->kind = Set_kind;
 4178|  18.3k|    p->v.Set.elts = elts;
 4179|  18.3k|    p->lineno = lineno;
 4180|  18.3k|    p->col_offset = col_offset;
 4181|  18.3k|    p->end_lineno = end_lineno;
 4182|  18.3k|    p->end_col_offset = end_col_offset;
 4183|  18.3k|    return p;
 4184|  18.3k|}
_PyAST_ListComp:
 4190|  3.88k|{
 4191|  3.88k|    expr_ty p;
 4192|  3.88k|    if (!elt) {
  ------------------
  |  Branch (4192:9): [True: 0, False: 3.88k]
  ------------------
 4193|      0|        PyErr_SetString(PyExc_ValueError,
 4194|      0|                        "field 'elt' is required for ListComp");
 4195|      0|        return NULL;
 4196|      0|    }
 4197|  3.88k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4198|  3.88k|    if (!p)
  ------------------
  |  Branch (4198:9): [True: 0, False: 3.88k]
  ------------------
 4199|      0|        return NULL;
 4200|  3.88k|    p->kind = ListComp_kind;
 4201|  3.88k|    p->v.ListComp.elt = elt;
 4202|  3.88k|    p->v.ListComp.generators = generators;
 4203|  3.88k|    p->lineno = lineno;
 4204|  3.88k|    p->col_offset = col_offset;
 4205|  3.88k|    p->end_lineno = end_lineno;
 4206|  3.88k|    p->end_col_offset = end_col_offset;
 4207|  3.88k|    return p;
 4208|  3.88k|}
_PyAST_SetComp:
 4214|  7.21k|{
 4215|  7.21k|    expr_ty p;
 4216|  7.21k|    if (!elt) {
  ------------------
  |  Branch (4216:9): [True: 0, False: 7.21k]
  ------------------
 4217|      0|        PyErr_SetString(PyExc_ValueError,
 4218|      0|                        "field 'elt' is required for SetComp");
 4219|      0|        return NULL;
 4220|      0|    }
 4221|  7.21k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4222|  7.21k|    if (!p)
  ------------------
  |  Branch (4222:9): [True: 0, False: 7.21k]
  ------------------
 4223|      0|        return NULL;
 4224|  7.21k|    p->kind = SetComp_kind;
 4225|  7.21k|    p->v.SetComp.elt = elt;
 4226|  7.21k|    p->v.SetComp.generators = generators;
 4227|  7.21k|    p->lineno = lineno;
 4228|  7.21k|    p->col_offset = col_offset;
 4229|  7.21k|    p->end_lineno = end_lineno;
 4230|  7.21k|    p->end_col_offset = end_col_offset;
 4231|  7.21k|    return p;
 4232|  7.21k|}
_PyAST_DictComp:
 4238|  2.20k|{
 4239|  2.20k|    expr_ty p;
 4240|  2.20k|    if (!key) {
  ------------------
  |  Branch (4240:9): [True: 0, False: 2.20k]
  ------------------
 4241|      0|        PyErr_SetString(PyExc_ValueError,
 4242|      0|                        "field 'key' is required for DictComp");
 4243|      0|        return NULL;
 4244|      0|    }
 4245|  2.20k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4246|  2.20k|    if (!p)
  ------------------
  |  Branch (4246:9): [True: 0, False: 2.20k]
  ------------------
 4247|      0|        return NULL;
 4248|  2.20k|    p->kind = DictComp_kind;
 4249|  2.20k|    p->v.DictComp.key = key;
 4250|  2.20k|    p->v.DictComp.value = value;
 4251|  2.20k|    p->v.DictComp.generators = generators;
 4252|  2.20k|    p->lineno = lineno;
 4253|  2.20k|    p->col_offset = col_offset;
 4254|  2.20k|    p->end_lineno = end_lineno;
 4255|  2.20k|    p->end_col_offset = end_col_offset;
 4256|  2.20k|    return p;
 4257|  2.20k|}
_PyAST_GeneratorExp:
 4263|  4.47k|{
 4264|  4.47k|    expr_ty p;
 4265|  4.47k|    if (!elt) {
  ------------------
  |  Branch (4265:9): [True: 0, False: 4.47k]
  ------------------
 4266|      0|        PyErr_SetString(PyExc_ValueError,
 4267|      0|                        "field 'elt' is required for GeneratorExp");
 4268|      0|        return NULL;
 4269|      0|    }
 4270|  4.47k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4271|  4.47k|    if (!p)
  ------------------
  |  Branch (4271:9): [True: 0, False: 4.47k]
  ------------------
 4272|      0|        return NULL;
 4273|  4.47k|    p->kind = GeneratorExp_kind;
 4274|  4.47k|    p->v.GeneratorExp.elt = elt;
 4275|  4.47k|    p->v.GeneratorExp.generators = generators;
 4276|  4.47k|    p->lineno = lineno;
 4277|  4.47k|    p->col_offset = col_offset;
 4278|  4.47k|    p->end_lineno = end_lineno;
 4279|  4.47k|    p->end_col_offset = end_col_offset;
 4280|  4.47k|    return p;
 4281|  4.47k|}
_PyAST_Await:
 4286|  1.68k|{
 4287|  1.68k|    expr_ty p;
 4288|  1.68k|    if (!value) {
  ------------------
  |  Branch (4288:9): [True: 0, False: 1.68k]
  ------------------
 4289|      0|        PyErr_SetString(PyExc_ValueError,
 4290|      0|                        "field 'value' is required for Await");
 4291|      0|        return NULL;
 4292|      0|    }
 4293|  1.68k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4294|  1.68k|    if (!p)
  ------------------
  |  Branch (4294:9): [True: 0, False: 1.68k]
  ------------------
 4295|      0|        return NULL;
 4296|  1.68k|    p->kind = Await_kind;
 4297|  1.68k|    p->v.Await.value = value;
 4298|  1.68k|    p->lineno = lineno;
 4299|  1.68k|    p->col_offset = col_offset;
 4300|  1.68k|    p->end_lineno = end_lineno;
 4301|  1.68k|    p->end_col_offset = end_col_offset;
 4302|  1.68k|    return p;
 4303|  1.68k|}
_PyAST_Yield:
 4308|  4.33k|{
 4309|  4.33k|    expr_ty p;
 4310|  4.33k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4311|  4.33k|    if (!p)
  ------------------
  |  Branch (4311:9): [True: 0, False: 4.33k]
  ------------------
 4312|      0|        return NULL;
 4313|  4.33k|    p->kind = Yield_kind;
 4314|  4.33k|    p->v.Yield.value = value;
 4315|  4.33k|    p->lineno = lineno;
 4316|  4.33k|    p->col_offset = col_offset;
 4317|  4.33k|    p->end_lineno = end_lineno;
 4318|  4.33k|    p->end_col_offset = end_col_offset;
 4319|  4.33k|    return p;
 4320|  4.33k|}
_PyAST_YieldFrom:
 4325|    404|{
 4326|    404|    expr_ty p;
 4327|    404|    if (!value) {
  ------------------
  |  Branch (4327:9): [True: 0, False: 404]
  ------------------
 4328|      0|        PyErr_SetString(PyExc_ValueError,
 4329|      0|                        "field 'value' is required for YieldFrom");
 4330|      0|        return NULL;
 4331|      0|    }
 4332|    404|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4333|    404|    if (!p)
  ------------------
  |  Branch (4333:9): [True: 0, False: 404]
  ------------------
 4334|      0|        return NULL;
 4335|    404|    p->kind = YieldFrom_kind;
 4336|    404|    p->v.YieldFrom.value = value;
 4337|    404|    p->lineno = lineno;
 4338|    404|    p->col_offset = col_offset;
 4339|    404|    p->end_lineno = end_lineno;
 4340|    404|    p->end_col_offset = end_col_offset;
 4341|    404|    return p;
 4342|    404|}
_PyAST_Compare:
 4348|  32.6k|{
 4349|  32.6k|    expr_ty p;
 4350|  32.6k|    if (!left) {
  ------------------
  |  Branch (4350:9): [True: 0, False: 32.6k]
  ------------------
 4351|      0|        PyErr_SetString(PyExc_ValueError,
 4352|      0|                        "field 'left' is required for Compare");
 4353|      0|        return NULL;
 4354|      0|    }
 4355|  32.6k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4356|  32.6k|    if (!p)
  ------------------
  |  Branch (4356:9): [True: 0, False: 32.6k]
  ------------------
 4357|      0|        return NULL;
 4358|  32.6k|    p->kind = Compare_kind;
 4359|  32.6k|    p->v.Compare.left = left;
 4360|  32.6k|    p->v.Compare.ops = ops;
 4361|  32.6k|    p->v.Compare.comparators = comparators;
 4362|  32.6k|    p->lineno = lineno;
 4363|  32.6k|    p->col_offset = col_offset;
 4364|  32.6k|    p->end_lineno = end_lineno;
 4365|  32.6k|    p->end_col_offset = end_col_offset;
 4366|  32.6k|    return p;
 4367|  32.6k|}
_PyAST_Call:
 4373|  68.9k|{
 4374|  68.9k|    expr_ty p;
 4375|  68.9k|    if (!func) {
  ------------------
  |  Branch (4375:9): [True: 0, False: 68.9k]
  ------------------
 4376|      0|        PyErr_SetString(PyExc_ValueError,
 4377|      0|                        "field 'func' is required for Call");
 4378|      0|        return NULL;
 4379|      0|    }
 4380|  68.9k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4381|  68.9k|    if (!p)
  ------------------
  |  Branch (4381:9): [True: 0, False: 68.9k]
  ------------------
 4382|      0|        return NULL;
 4383|  68.9k|    p->kind = Call_kind;
 4384|  68.9k|    p->v.Call.func = func;
 4385|  68.9k|    p->v.Call.args = args;
 4386|  68.9k|    p->v.Call.keywords = keywords;
 4387|  68.9k|    p->lineno = lineno;
 4388|  68.9k|    p->col_offset = col_offset;
 4389|  68.9k|    p->end_lineno = end_lineno;
 4390|  68.9k|    p->end_col_offset = end_col_offset;
 4391|  68.9k|    return p;
 4392|  68.9k|}
_PyAST_FormattedValue:
 4398|  20.5k|{
 4399|  20.5k|    expr_ty p;
 4400|  20.5k|    if (!value) {
  ------------------
  |  Branch (4400:9): [True: 0, False: 20.5k]
  ------------------
 4401|      0|        PyErr_SetString(PyExc_ValueError,
 4402|      0|                        "field 'value' is required for FormattedValue");
 4403|      0|        return NULL;
 4404|      0|    }
 4405|  20.5k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4406|  20.5k|    if (!p)
  ------------------
  |  Branch (4406:9): [True: 0, False: 20.5k]
  ------------------
 4407|      0|        return NULL;
 4408|  20.5k|    p->kind = FormattedValue_kind;
 4409|  20.5k|    p->v.FormattedValue.value = value;
 4410|  20.5k|    p->v.FormattedValue.conversion = conversion;
 4411|  20.5k|    p->v.FormattedValue.format_spec = format_spec;
 4412|  20.5k|    p->lineno = lineno;
 4413|  20.5k|    p->col_offset = col_offset;
 4414|  20.5k|    p->end_lineno = end_lineno;
 4415|  20.5k|    p->end_col_offset = end_col_offset;
 4416|  20.5k|    return p;
 4417|  20.5k|}
_PyAST_Interpolation:
 4423|  7.33k|{
 4424|  7.33k|    expr_ty p;
 4425|  7.33k|    if (!value) {
  ------------------
  |  Branch (4425:9): [True: 0, False: 7.33k]
  ------------------
 4426|      0|        PyErr_SetString(PyExc_ValueError,
 4427|      0|                        "field 'value' is required for Interpolation");
 4428|      0|        return NULL;
 4429|      0|    }
 4430|  7.33k|    if (!str) {
  ------------------
  |  Branch (4430:9): [True: 0, False: 7.33k]
  ------------------
 4431|      0|        PyErr_SetString(PyExc_ValueError,
 4432|      0|                        "field 'str' is required for Interpolation");
 4433|      0|        return NULL;
 4434|      0|    }
 4435|  7.33k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4436|  7.33k|    if (!p)
  ------------------
  |  Branch (4436:9): [True: 0, False: 7.33k]
  ------------------
 4437|      0|        return NULL;
 4438|  7.33k|    p->kind = Interpolation_kind;
 4439|  7.33k|    p->v.Interpolation.value = value;
 4440|  7.33k|    p->v.Interpolation.str = str;
 4441|  7.33k|    p->v.Interpolation.conversion = conversion;
 4442|  7.33k|    p->v.Interpolation.format_spec = format_spec;
 4443|  7.33k|    p->lineno = lineno;
 4444|  7.33k|    p->col_offset = col_offset;
 4445|  7.33k|    p->end_lineno = end_lineno;
 4446|  7.33k|    p->end_col_offset = end_col_offset;
 4447|  7.33k|    return p;
 4448|  7.33k|}
_PyAST_JoinedStr:
 4453|  53.3k|{
 4454|  53.3k|    expr_ty p;
 4455|  53.3k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4456|  53.3k|    if (!p)
  ------------------
  |  Branch (4456:9): [True: 0, False: 53.3k]
  ------------------
 4457|      0|        return NULL;
 4458|  53.3k|    p->kind = JoinedStr_kind;
 4459|  53.3k|    p->v.JoinedStr.values = values;
 4460|  53.3k|    p->lineno = lineno;
 4461|  53.3k|    p->col_offset = col_offset;
 4462|  53.3k|    p->end_lineno = end_lineno;
 4463|  53.3k|    p->end_col_offset = end_col_offset;
 4464|  53.3k|    return p;
 4465|  53.3k|}
_PyAST_TemplateStr:
 4470|  7.27k|{
 4471|  7.27k|    expr_ty p;
 4472|  7.27k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4473|  7.27k|    if (!p)
  ------------------
  |  Branch (4473:9): [True: 0, False: 7.27k]
  ------------------
 4474|      0|        return NULL;
 4475|  7.27k|    p->kind = TemplateStr_kind;
 4476|  7.27k|    p->v.TemplateStr.values = values;
 4477|  7.27k|    p->lineno = lineno;
 4478|  7.27k|    p->col_offset = col_offset;
 4479|  7.27k|    p->end_lineno = end_lineno;
 4480|  7.27k|    p->end_col_offset = end_col_offset;
 4481|  7.27k|    return p;
 4482|  7.27k|}
_PyAST_Constant:
 4487|  1.41M|{
 4488|  1.41M|    expr_ty p;
 4489|  1.41M|    if (!value) {
  ------------------
  |  Branch (4489:9): [True: 0, False: 1.41M]
  ------------------
 4490|      0|        PyErr_SetString(PyExc_ValueError,
 4491|      0|                        "field 'value' is required for Constant");
 4492|      0|        return NULL;
 4493|      0|    }
 4494|  1.41M|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4495|  1.41M|    if (!p)
  ------------------
  |  Branch (4495:9): [True: 0, False: 1.41M]
  ------------------
 4496|      0|        return NULL;
 4497|  1.41M|    p->kind = Constant_kind;
 4498|  1.41M|    p->v.Constant.value = value;
 4499|  1.41M|    p->v.Constant.kind = kind;
 4500|  1.41M|    p->lineno = lineno;
 4501|  1.41M|    p->col_offset = col_offset;
 4502|  1.41M|    p->end_lineno = end_lineno;
 4503|  1.41M|    p->end_col_offset = end_col_offset;
 4504|  1.41M|    return p;
 4505|  1.41M|}
_PyAST_Attribute:
 4511|  62.2k|{
 4512|  62.2k|    expr_ty p;
 4513|  62.2k|    if (!value) {
  ------------------
  |  Branch (4513:9): [True: 0, False: 62.2k]
  ------------------
 4514|      0|        PyErr_SetString(PyExc_ValueError,
 4515|      0|                        "field 'value' is required for Attribute");
 4516|      0|        return NULL;
 4517|      0|    }
 4518|  62.2k|    if (!attr) {
  ------------------
  |  Branch (4518:9): [True: 0, False: 62.2k]
  ------------------
 4519|      0|        PyErr_SetString(PyExc_ValueError,
 4520|      0|                        "field 'attr' is required for Attribute");
 4521|      0|        return NULL;
 4522|      0|    }
 4523|  62.2k|    if (!ctx) {
  ------------------
  |  Branch (4523:9): [True: 0, False: 62.2k]
  ------------------
 4524|      0|        PyErr_SetString(PyExc_ValueError,
 4525|      0|                        "field 'ctx' is required for Attribute");
 4526|      0|        return NULL;
 4527|      0|    }
 4528|  62.2k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4529|  62.2k|    if (!p)
  ------------------
  |  Branch (4529:9): [True: 0, False: 62.2k]
  ------------------
 4530|      0|        return NULL;
 4531|  62.2k|    p->kind = Attribute_kind;
 4532|  62.2k|    p->v.Attribute.value = value;
 4533|  62.2k|    p->v.Attribute.attr = attr;
 4534|  62.2k|    p->v.Attribute.ctx = ctx;
 4535|  62.2k|    p->lineno = lineno;
 4536|  62.2k|    p->col_offset = col_offset;
 4537|  62.2k|    p->end_lineno = end_lineno;
 4538|  62.2k|    p->end_col_offset = end_col_offset;
 4539|  62.2k|    return p;
 4540|  62.2k|}
_PyAST_Subscript:
 4546|  24.6k|{
 4547|  24.6k|    expr_ty p;
 4548|  24.6k|    if (!value) {
  ------------------
  |  Branch (4548:9): [True: 0, False: 24.6k]
  ------------------
 4549|      0|        PyErr_SetString(PyExc_ValueError,
 4550|      0|                        "field 'value' is required for Subscript");
 4551|      0|        return NULL;
 4552|      0|    }
 4553|  24.6k|    if (!slice) {
  ------------------
  |  Branch (4553:9): [True: 0, False: 24.6k]
  ------------------
 4554|      0|        PyErr_SetString(PyExc_ValueError,
 4555|      0|                        "field 'slice' is required for Subscript");
 4556|      0|        return NULL;
 4557|      0|    }
 4558|  24.6k|    if (!ctx) {
  ------------------
  |  Branch (4558:9): [True: 0, False: 24.6k]
  ------------------
 4559|      0|        PyErr_SetString(PyExc_ValueError,
 4560|      0|                        "field 'ctx' is required for Subscript");
 4561|      0|        return NULL;
 4562|      0|    }
 4563|  24.6k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4564|  24.6k|    if (!p)
  ------------------
  |  Branch (4564:9): [True: 0, False: 24.6k]
  ------------------
 4565|      0|        return NULL;
 4566|  24.6k|    p->kind = Subscript_kind;
 4567|  24.6k|    p->v.Subscript.value = value;
 4568|  24.6k|    p->v.Subscript.slice = slice;
 4569|  24.6k|    p->v.Subscript.ctx = ctx;
 4570|  24.6k|    p->lineno = lineno;
 4571|  24.6k|    p->col_offset = col_offset;
 4572|  24.6k|    p->end_lineno = end_lineno;
 4573|  24.6k|    p->end_col_offset = end_col_offset;
 4574|  24.6k|    return p;
 4575|  24.6k|}
_PyAST_Starred:
 4580|  49.6k|{
 4581|  49.6k|    expr_ty p;
 4582|  49.6k|    if (!value) {
  ------------------
  |  Branch (4582:9): [True: 0, False: 49.6k]
  ------------------
 4583|      0|        PyErr_SetString(PyExc_ValueError,
 4584|      0|                        "field 'value' is required for Starred");
 4585|      0|        return NULL;
 4586|      0|    }
 4587|  49.6k|    if (!ctx) {
  ------------------
  |  Branch (4587:9): [True: 0, False: 49.6k]
  ------------------
 4588|      0|        PyErr_SetString(PyExc_ValueError,
 4589|      0|                        "field 'ctx' is required for Starred");
 4590|      0|        return NULL;
 4591|      0|    }
 4592|  49.6k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4593|  49.6k|    if (!p)
  ------------------
  |  Branch (4593:9): [True: 0, False: 49.6k]
  ------------------
 4594|      0|        return NULL;
 4595|  49.6k|    p->kind = Starred_kind;
 4596|  49.6k|    p->v.Starred.value = value;
 4597|  49.6k|    p->v.Starred.ctx = ctx;
 4598|  49.6k|    p->lineno = lineno;
 4599|  49.6k|    p->col_offset = col_offset;
 4600|  49.6k|    p->end_lineno = end_lineno;
 4601|  49.6k|    p->end_col_offset = end_col_offset;
 4602|  49.6k|    return p;
 4603|  49.6k|}
_PyAST_Name:
 4608|  1.59M|{
 4609|  1.59M|    expr_ty p;
 4610|  1.59M|    if (!id) {
  ------------------
  |  Branch (4610:9): [True: 0, False: 1.59M]
  ------------------
 4611|      0|        PyErr_SetString(PyExc_ValueError,
 4612|      0|                        "field 'id' is required for Name");
 4613|      0|        return NULL;
 4614|      0|    }
 4615|  1.59M|    if (!ctx) {
  ------------------
  |  Branch (4615:9): [True: 0, False: 1.59M]
  ------------------
 4616|      0|        PyErr_SetString(PyExc_ValueError,
 4617|      0|                        "field 'ctx' is required for Name");
 4618|      0|        return NULL;
 4619|      0|    }
 4620|  1.59M|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4621|  1.59M|    if (!p)
  ------------------
  |  Branch (4621:9): [True: 0, False: 1.59M]
  ------------------
 4622|      0|        return NULL;
 4623|  1.59M|    p->kind = Name_kind;
 4624|  1.59M|    p->v.Name.id = id;
 4625|  1.59M|    p->v.Name.ctx = ctx;
 4626|  1.59M|    p->lineno = lineno;
 4627|  1.59M|    p->col_offset = col_offset;
 4628|  1.59M|    p->end_lineno = end_lineno;
 4629|  1.59M|    p->end_col_offset = end_col_offset;
 4630|  1.59M|    return p;
 4631|  1.59M|}
_PyAST_List:
 4636|  18.4k|{
 4637|  18.4k|    expr_ty p;
 4638|  18.4k|    if (!ctx) {
  ------------------
  |  Branch (4638:9): [True: 0, False: 18.4k]
  ------------------
 4639|      0|        PyErr_SetString(PyExc_ValueError,
 4640|      0|                        "field 'ctx' is required for List");
 4641|      0|        return NULL;
 4642|      0|    }
 4643|  18.4k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4644|  18.4k|    if (!p)
  ------------------
  |  Branch (4644:9): [True: 0, False: 18.4k]
  ------------------
 4645|      0|        return NULL;
 4646|  18.4k|    p->kind = List_kind;
 4647|  18.4k|    p->v.List.elts = elts;
 4648|  18.4k|    p->v.List.ctx = ctx;
 4649|  18.4k|    p->lineno = lineno;
 4650|  18.4k|    p->col_offset = col_offset;
 4651|  18.4k|    p->end_lineno = end_lineno;
 4652|  18.4k|    p->end_col_offset = end_col_offset;
 4653|  18.4k|    return p;
 4654|  18.4k|}
_PyAST_Tuple:
 4659|   197k|{
 4660|   197k|    expr_ty p;
 4661|   197k|    if (!ctx) {
  ------------------
  |  Branch (4661:9): [True: 0, False: 197k]
  ------------------
 4662|      0|        PyErr_SetString(PyExc_ValueError,
 4663|      0|                        "field 'ctx' is required for Tuple");
 4664|      0|        return NULL;
 4665|      0|    }
 4666|   197k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4667|   197k|    if (!p)
  ------------------
  |  Branch (4667:9): [True: 0, False: 197k]
  ------------------
 4668|      0|        return NULL;
 4669|   197k|    p->kind = Tuple_kind;
 4670|   197k|    p->v.Tuple.elts = elts;
 4671|   197k|    p->v.Tuple.ctx = ctx;
 4672|   197k|    p->lineno = lineno;
 4673|   197k|    p->col_offset = col_offset;
 4674|   197k|    p->end_lineno = end_lineno;
 4675|   197k|    p->end_col_offset = end_col_offset;
 4676|   197k|    return p;
 4677|   197k|}
_PyAST_Slice:
 4682|  16.8k|{
 4683|  16.8k|    expr_ty p;
 4684|  16.8k|    p = (expr_ty)_PyArena_Malloc(arena, sizeof(*p));
 4685|  16.8k|    if (!p)
  ------------------
  |  Branch (4685:9): [True: 0, False: 16.8k]
  ------------------
 4686|      0|        return NULL;
 4687|  16.8k|    p->kind = Slice_kind;
 4688|  16.8k|    p->v.Slice.lower = lower;
 4689|  16.8k|    p->v.Slice.upper = upper;
 4690|  16.8k|    p->v.Slice.step = step;
 4691|  16.8k|    p->lineno = lineno;
 4692|  16.8k|    p->col_offset = col_offset;
 4693|  16.8k|    p->end_lineno = end_lineno;
 4694|  16.8k|    p->end_col_offset = end_col_offset;
 4695|  16.8k|    return p;
 4696|  16.8k|}
_PyAST_comprehension:
 4701|  23.1k|{
 4702|  23.1k|    comprehension_ty p;
 4703|  23.1k|    if (!target) {
  ------------------
  |  Branch (4703:9): [True: 0, False: 23.1k]
  ------------------
 4704|      0|        PyErr_SetString(PyExc_ValueError,
 4705|      0|                        "field 'target' is required for comprehension");
 4706|      0|        return NULL;
 4707|      0|    }
 4708|  23.1k|    if (!iter) {
  ------------------
  |  Branch (4708:9): [True: 0, False: 23.1k]
  ------------------
 4709|      0|        PyErr_SetString(PyExc_ValueError,
 4710|      0|                        "field 'iter' is required for comprehension");
 4711|      0|        return NULL;
 4712|      0|    }
 4713|  23.1k|    p = (comprehension_ty)_PyArena_Malloc(arena, sizeof(*p));
 4714|  23.1k|    if (!p)
  ------------------
  |  Branch (4714:9): [True: 0, False: 23.1k]
  ------------------
 4715|      0|        return NULL;
 4716|  23.1k|    p->target = target;
 4717|  23.1k|    p->iter = iter;
 4718|  23.1k|    p->ifs = ifs;
 4719|  23.1k|    p->is_async = is_async;
 4720|  23.1k|    return p;
 4721|  23.1k|}
_PyAST_ExceptHandler:
 4727|  11.8k|{
 4728|  11.8k|    excepthandler_ty p;
 4729|  11.8k|    p = (excepthandler_ty)_PyArena_Malloc(arena, sizeof(*p));
 4730|  11.8k|    if (!p)
  ------------------
  |  Branch (4730:9): [True: 0, False: 11.8k]
  ------------------
 4731|      0|        return NULL;
 4732|  11.8k|    p->kind = ExceptHandler_kind;
 4733|  11.8k|    p->v.ExceptHandler.type = type;
 4734|  11.8k|    p->v.ExceptHandler.name = name;
 4735|  11.8k|    p->v.ExceptHandler.body = body;
 4736|  11.8k|    p->lineno = lineno;
 4737|  11.8k|    p->col_offset = col_offset;
 4738|  11.8k|    p->end_lineno = end_lineno;
 4739|  11.8k|    p->end_col_offset = end_col_offset;
 4740|  11.8k|    return p;
 4741|  11.8k|}
_PyAST_arguments:
 4748|  32.7k|{
 4749|  32.7k|    arguments_ty p;
 4750|  32.7k|    p = (arguments_ty)_PyArena_Malloc(arena, sizeof(*p));
 4751|  32.7k|    if (!p)
  ------------------
  |  Branch (4751:9): [True: 0, False: 32.7k]
  ------------------
 4752|      0|        return NULL;
 4753|  32.7k|    p->posonlyargs = posonlyargs;
 4754|  32.7k|    p->args = args;
 4755|  32.7k|    p->vararg = vararg;
 4756|  32.7k|    p->kwonlyargs = kwonlyargs;
 4757|  32.7k|    p->kw_defaults = kw_defaults;
 4758|  32.7k|    p->kwarg = kwarg;
 4759|  32.7k|    p->defaults = defaults;
 4760|  32.7k|    return p;
 4761|  32.7k|}
_PyAST_arg:
 4766|   475k|{
 4767|   475k|    arg_ty p;
 4768|   475k|    if (!arg) {
  ------------------
  |  Branch (4768:9): [True: 0, False: 475k]
  ------------------
 4769|      0|        PyErr_SetString(PyExc_ValueError,
 4770|      0|                        "field 'arg' is required for arg");
 4771|      0|        return NULL;
 4772|      0|    }
 4773|   475k|    p = (arg_ty)_PyArena_Malloc(arena, sizeof(*p));
 4774|   475k|    if (!p)
  ------------------
  |  Branch (4774:9): [True: 0, False: 475k]
  ------------------
 4775|      0|        return NULL;
 4776|   475k|    p->arg = arg;
 4777|   475k|    p->annotation = annotation;
 4778|   475k|    p->type_comment = type_comment;
 4779|   475k|    p->lineno = lineno;
 4780|   475k|    p->col_offset = col_offset;
 4781|   475k|    p->end_lineno = end_lineno;
 4782|   475k|    p->end_col_offset = end_col_offset;
 4783|   475k|    return p;
 4784|   475k|}
_PyAST_keyword:
 4789|  29.7k|{
 4790|  29.7k|    keyword_ty p;
 4791|  29.7k|    if (!value) {
  ------------------
  |  Branch (4791:9): [True: 0, False: 29.7k]
  ------------------
 4792|      0|        PyErr_SetString(PyExc_ValueError,
 4793|      0|                        "field 'value' is required for keyword");
 4794|      0|        return NULL;
 4795|      0|    }
 4796|  29.7k|    p = (keyword_ty)_PyArena_Malloc(arena, sizeof(*p));
 4797|  29.7k|    if (!p)
  ------------------
  |  Branch (4797:9): [True: 0, False: 29.7k]
  ------------------
 4798|      0|        return NULL;
 4799|  29.7k|    p->arg = arg;
 4800|  29.7k|    p->value = value;
 4801|  29.7k|    p->lineno = lineno;
 4802|  29.7k|    p->col_offset = col_offset;
 4803|  29.7k|    p->end_lineno = end_lineno;
 4804|  29.7k|    p->end_col_offset = end_col_offset;
 4805|  29.7k|    return p;
 4806|  29.7k|}
_PyAST_alias:
 4811|  34.8k|{
 4812|  34.8k|    alias_ty p;
 4813|  34.8k|    if (!name) {
  ------------------
  |  Branch (4813:9): [True: 0, False: 34.8k]
  ------------------
 4814|      0|        PyErr_SetString(PyExc_ValueError,
 4815|      0|                        "field 'name' is required for alias");
 4816|      0|        return NULL;
 4817|      0|    }
 4818|  34.8k|    p = (alias_ty)_PyArena_Malloc(arena, sizeof(*p));
 4819|  34.8k|    if (!p)
  ------------------
  |  Branch (4819:9): [True: 0, False: 34.8k]
  ------------------
 4820|      0|        return NULL;
 4821|  34.8k|    p->name = name;
 4822|  34.8k|    p->asname = asname;
 4823|  34.8k|    p->lineno = lineno;
 4824|  34.8k|    p->col_offset = col_offset;
 4825|  34.8k|    p->end_lineno = end_lineno;
 4826|  34.8k|    p->end_col_offset = end_col_offset;
 4827|  34.8k|    return p;
 4828|  34.8k|}
_PyAST_withitem:
 4832|  20.5k|{
 4833|  20.5k|    withitem_ty p;
 4834|  20.5k|    if (!context_expr) {
  ------------------
  |  Branch (4834:9): [True: 0, False: 20.5k]
  ------------------
 4835|      0|        PyErr_SetString(PyExc_ValueError,
 4836|      0|                        "field 'context_expr' is required for withitem");
 4837|      0|        return NULL;
 4838|      0|    }
 4839|  20.5k|    p = (withitem_ty)_PyArena_Malloc(arena, sizeof(*p));
 4840|  20.5k|    if (!p)
  ------------------
  |  Branch (4840:9): [True: 0, False: 20.5k]
  ------------------
 4841|      0|        return NULL;
 4842|  20.5k|    p->context_expr = context_expr;
 4843|  20.5k|    p->optional_vars = optional_vars;
 4844|  20.5k|    return p;
 4845|  20.5k|}
_PyAST_match_case:
 4850|  2.35k|{
 4851|  2.35k|    match_case_ty p;
 4852|  2.35k|    if (!pattern) {
  ------------------
  |  Branch (4852:9): [True: 0, False: 2.35k]
  ------------------
 4853|      0|        PyErr_SetString(PyExc_ValueError,
 4854|      0|                        "field 'pattern' is required for match_case");
 4855|      0|        return NULL;
 4856|      0|    }
 4857|  2.35k|    p = (match_case_ty)_PyArena_Malloc(arena, sizeof(*p));
 4858|  2.35k|    if (!p)
  ------------------
  |  Branch (4858:9): [True: 0, False: 2.35k]
  ------------------
 4859|      0|        return NULL;
 4860|  2.35k|    p->pattern = pattern;
 4861|  2.35k|    p->guard = guard;
 4862|  2.35k|    p->body = body;
 4863|  2.35k|    return p;
 4864|  2.35k|}
_PyAST_MatchValue:
 4869|  6.09k|{
 4870|  6.09k|    pattern_ty p;
 4871|  6.09k|    if (!value) {
  ------------------
  |  Branch (4871:9): [True: 0, False: 6.09k]
  ------------------
 4872|      0|        PyErr_SetString(PyExc_ValueError,
 4873|      0|                        "field 'value' is required for MatchValue");
 4874|      0|        return NULL;
 4875|      0|    }
 4876|  6.09k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4877|  6.09k|    if (!p)
  ------------------
  |  Branch (4877:9): [True: 0, False: 6.09k]
  ------------------
 4878|      0|        return NULL;
 4879|  6.09k|    p->kind = MatchValue_kind;
 4880|  6.09k|    p->v.MatchValue.value = value;
 4881|  6.09k|    p->lineno = lineno;
 4882|  6.09k|    p->col_offset = col_offset;
 4883|  6.09k|    p->end_lineno = end_lineno;
 4884|  6.09k|    p->end_col_offset = end_col_offset;
 4885|  6.09k|    return p;
 4886|  6.09k|}
_PyAST_MatchSingleton:
 4891|  1.55k|{
 4892|  1.55k|    pattern_ty p;
 4893|  1.55k|    if (!value) {
  ------------------
  |  Branch (4893:9): [True: 0, False: 1.55k]
  ------------------
 4894|      0|        PyErr_SetString(PyExc_ValueError,
 4895|      0|                        "field 'value' is required for MatchSingleton");
 4896|      0|        return NULL;
 4897|      0|    }
 4898|  1.55k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4899|  1.55k|    if (!p)
  ------------------
  |  Branch (4899:9): [True: 0, False: 1.55k]
  ------------------
 4900|      0|        return NULL;
 4901|  1.55k|    p->kind = MatchSingleton_kind;
 4902|  1.55k|    p->v.MatchSingleton.value = value;
 4903|  1.55k|    p->lineno = lineno;
 4904|  1.55k|    p->col_offset = col_offset;
 4905|  1.55k|    p->end_lineno = end_lineno;
 4906|  1.55k|    p->end_col_offset = end_col_offset;
 4907|  1.55k|    return p;
 4908|  1.55k|}
_PyAST_MatchSequence:
 4913|  3.40k|{
 4914|  3.40k|    pattern_ty p;
 4915|  3.40k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4916|  3.40k|    if (!p)
  ------------------
  |  Branch (4916:9): [True: 0, False: 3.40k]
  ------------------
 4917|      0|        return NULL;
 4918|  3.40k|    p->kind = MatchSequence_kind;
 4919|  3.40k|    p->v.MatchSequence.patterns = patterns;
 4920|  3.40k|    p->lineno = lineno;
 4921|  3.40k|    p->col_offset = col_offset;
 4922|  3.40k|    p->end_lineno = end_lineno;
 4923|  3.40k|    p->end_col_offset = end_col_offset;
 4924|  3.40k|    return p;
 4925|  3.40k|}
_PyAST_MatchMapping:
 4931|     82|{
 4932|     82|    pattern_ty p;
 4933|     82|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4934|     82|    if (!p)
  ------------------
  |  Branch (4934:9): [True: 0, False: 82]
  ------------------
 4935|      0|        return NULL;
 4936|     82|    p->kind = MatchMapping_kind;
 4937|     82|    p->v.MatchMapping.keys = keys;
 4938|     82|    p->v.MatchMapping.patterns = patterns;
 4939|     82|    p->v.MatchMapping.rest = rest;
 4940|     82|    p->lineno = lineno;
 4941|     82|    p->col_offset = col_offset;
 4942|     82|    p->end_lineno = end_lineno;
 4943|     82|    p->end_col_offset = end_col_offset;
 4944|     82|    return p;
 4945|     82|}
_PyAST_MatchClass:
 4952|  1.51k|{
 4953|  1.51k|    pattern_ty p;
 4954|  1.51k|    if (!cls) {
  ------------------
  |  Branch (4954:9): [True: 0, False: 1.51k]
  ------------------
 4955|      0|        PyErr_SetString(PyExc_ValueError,
 4956|      0|                        "field 'cls' is required for MatchClass");
 4957|      0|        return NULL;
 4958|      0|    }
 4959|  1.51k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4960|  1.51k|    if (!p)
  ------------------
  |  Branch (4960:9): [True: 0, False: 1.51k]
  ------------------
 4961|      0|        return NULL;
 4962|  1.51k|    p->kind = MatchClass_kind;
 4963|  1.51k|    p->v.MatchClass.cls = cls;
 4964|  1.51k|    p->v.MatchClass.patterns = patterns;
 4965|  1.51k|    p->v.MatchClass.kwd_attrs = kwd_attrs;
 4966|  1.51k|    p->v.MatchClass.kwd_patterns = kwd_patterns;
 4967|  1.51k|    p->lineno = lineno;
 4968|  1.51k|    p->col_offset = col_offset;
 4969|  1.51k|    p->end_lineno = end_lineno;
 4970|  1.51k|    p->end_col_offset = end_col_offset;
 4971|  1.51k|    return p;
 4972|  1.51k|}
_PyAST_MatchStar:
 4977|  2.39k|{
 4978|  2.39k|    pattern_ty p;
 4979|  2.39k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4980|  2.39k|    if (!p)
  ------------------
  |  Branch (4980:9): [True: 0, False: 2.39k]
  ------------------
 4981|      0|        return NULL;
 4982|  2.39k|    p->kind = MatchStar_kind;
 4983|  2.39k|    p->v.MatchStar.name = name;
 4984|  2.39k|    p->lineno = lineno;
 4985|  2.39k|    p->col_offset = col_offset;
 4986|  2.39k|    p->end_lineno = end_lineno;
 4987|  2.39k|    p->end_col_offset = end_col_offset;
 4988|  2.39k|    return p;
 4989|  2.39k|}
_PyAST_MatchAs:
 4994|  25.5k|{
 4995|  25.5k|    pattern_ty p;
 4996|  25.5k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 4997|  25.5k|    if (!p)
  ------------------
  |  Branch (4997:9): [True: 0, False: 25.5k]
  ------------------
 4998|      0|        return NULL;
 4999|  25.5k|    p->kind = MatchAs_kind;
 5000|  25.5k|    p->v.MatchAs.pattern = pattern;
 5001|  25.5k|    p->v.MatchAs.name = name;
 5002|  25.5k|    p->lineno = lineno;
 5003|  25.5k|    p->col_offset = col_offset;
 5004|  25.5k|    p->end_lineno = end_lineno;
 5005|  25.5k|    p->end_col_offset = end_col_offset;
 5006|  25.5k|    return p;
 5007|  25.5k|}
_PyAST_MatchOr:
 5012|  9.49k|{
 5013|  9.49k|    pattern_ty p;
 5014|  9.49k|    p = (pattern_ty)_PyArena_Malloc(arena, sizeof(*p));
 5015|  9.49k|    if (!p)
  ------------------
  |  Branch (5015:9): [True: 0, False: 9.49k]
  ------------------
 5016|      0|        return NULL;
 5017|  9.49k|    p->kind = MatchOr_kind;
 5018|  9.49k|    p->v.MatchOr.patterns = patterns;
 5019|  9.49k|    p->lineno = lineno;
 5020|  9.49k|    p->col_offset = col_offset;
 5021|  9.49k|    p->end_lineno = end_lineno;
 5022|  9.49k|    p->end_col_offset = end_col_offset;
 5023|  9.49k|    return p;
 5024|  9.49k|}
_PyAST_TypeIgnore:
 5028|    789|{
 5029|    789|    type_ignore_ty p;
 5030|    789|    if (!tag) {
  ------------------
  |  Branch (5030:9): [True: 0, False: 789]
  ------------------
 5031|      0|        PyErr_SetString(PyExc_ValueError,
 5032|      0|                        "field 'tag' is required for TypeIgnore");
 5033|      0|        return NULL;
 5034|      0|    }
 5035|    789|    p = (type_ignore_ty)_PyArena_Malloc(arena, sizeof(*p));
 5036|    789|    if (!p)
  ------------------
  |  Branch (5036:9): [True: 0, False: 789]
  ------------------
 5037|      0|        return NULL;
 5038|    789|    p->kind = TypeIgnore_kind;
 5039|    789|    p->v.TypeIgnore.lineno = lineno;
 5040|    789|    p->v.TypeIgnore.tag = tag;
 5041|    789|    return p;
 5042|    789|}
_PyAST_TypeVar:
 5048|  17.3k|{
 5049|  17.3k|    type_param_ty p;
 5050|  17.3k|    if (!name) {
  ------------------
  |  Branch (5050:9): [True: 0, False: 17.3k]
  ------------------
 5051|      0|        PyErr_SetString(PyExc_ValueError,
 5052|      0|                        "field 'name' is required for TypeVar");
 5053|      0|        return NULL;
 5054|      0|    }
 5055|  17.3k|    p = (type_param_ty)_PyArena_Malloc(arena, sizeof(*p));
 5056|  17.3k|    if (!p)
  ------------------
  |  Branch (5056:9): [True: 0, False: 17.3k]
  ------------------
 5057|      0|        return NULL;
 5058|  17.3k|    p->kind = TypeVar_kind;
 5059|  17.3k|    p->v.TypeVar.name = name;
 5060|  17.3k|    p->v.TypeVar.bound = bound;
 5061|  17.3k|    p->v.TypeVar.default_value = default_value;
 5062|  17.3k|    p->lineno = lineno;
 5063|  17.3k|    p->col_offset = col_offset;
 5064|  17.3k|    p->end_lineno = end_lineno;
 5065|  17.3k|    p->end_col_offset = end_col_offset;
 5066|  17.3k|    return p;
 5067|  17.3k|}
_PyAST_ParamSpec:
 5072|    401|{
 5073|    401|    type_param_ty p;
 5074|    401|    if (!name) {
  ------------------
  |  Branch (5074:9): [True: 0, False: 401]
  ------------------
 5075|      0|        PyErr_SetString(PyExc_ValueError,
 5076|      0|                        "field 'name' is required for ParamSpec");
 5077|      0|        return NULL;
 5078|      0|    }
 5079|    401|    p = (type_param_ty)_PyArena_Malloc(arena, sizeof(*p));
 5080|    401|    if (!p)
  ------------------
  |  Branch (5080:9): [True: 0, False: 401]
  ------------------
 5081|      0|        return NULL;
 5082|    401|    p->kind = ParamSpec_kind;
 5083|    401|    p->v.ParamSpec.name = name;
 5084|    401|    p->v.ParamSpec.default_value = default_value;
 5085|    401|    p->lineno = lineno;
 5086|    401|    p->col_offset = col_offset;
 5087|    401|    p->end_lineno = end_lineno;
 5088|    401|    p->end_col_offset = end_col_offset;
 5089|    401|    return p;
 5090|    401|}
_PyAST_TypeVarTuple:
 5096|    933|{
 5097|    933|    type_param_ty p;
 5098|    933|    if (!name) {
  ------------------
  |  Branch (5098:9): [True: 0, False: 933]
  ------------------
 5099|      0|        PyErr_SetString(PyExc_ValueError,
 5100|      0|                        "field 'name' is required for TypeVarTuple");
 5101|      0|        return NULL;
 5102|      0|    }
 5103|    933|    p = (type_param_ty)_PyArena_Malloc(arena, sizeof(*p));
 5104|    933|    if (!p)
  ------------------
  |  Branch (5104:9): [True: 0, False: 933]
  ------------------
 5105|      0|        return NULL;
 5106|    933|    p->kind = TypeVarTuple_kind;
 5107|    933|    p->v.TypeVarTuple.name = name;
 5108|    933|    p->v.TypeVarTuple.default_value = default_value;
 5109|    933|    p->lineno = lineno;
 5110|    933|    p->col_offset = col_offset;
 5111|    933|    p->end_lineno = end_lineno;
 5112|    933|    p->end_col_offset = end_col_offset;
 5113|    933|    return p;
 5114|    933|}
PyAST_mod2obj:
14791|  1.89k|{
14792|  1.89k|    struct ast_state *state = get_ast_state();
14793|  1.89k|    if (state == NULL) {
  ------------------
  |  Branch (14793:9): [True: 0, False: 1.89k]
  ------------------
14794|      0|        return NULL;
14795|      0|    }
14796|  1.89k|    PyObject *result = ast2obj_mod(state, t);
14797|       |
14798|  1.89k|    return result;
14799|  1.89k|}
Python-ast.c:get_ast_state:
   22|  1.89k|{
   23|  1.89k|    PyInterpreterState *interp = _PyInterpreterState_GET();
   24|  1.89k|    struct ast_state *state = &interp->ast;
   25|  1.89k|    assert(!state->finalized);
  ------------------
  |  Branch (25:5): [True: 1.89k, False: 0]
  ------------------
   26|  1.89k|    if (_PyOnceFlag_CallOnce(&state->once, (_Py_once_fn_t *)&init_types, state) < 0) {
  ------------------
  |  Branch (26:9): [True: 0, False: 1.89k]
  ------------------
   27|      0|        return NULL;
   28|      0|    }
   29|  1.89k|    return state;
   30|  1.89k|}
Python-ast.c:init_types:
 2360|      1|{
 2361|      1|    struct ast_state *state = arg;
 2362|      1|    if (init_identifiers(state) < 0) {
  ------------------
  |  Branch (2362:9): [True: 0, False: 1]
  ------------------
 2363|      0|        return -1;
 2364|      0|    }
 2365|      1|    state->AST_type = PyType_FromSpec(&AST_type_spec);
 2366|      1|    if (!state->AST_type) {
  ------------------
  |  Branch (2366:9): [True: 0, False: 1]
  ------------------
 2367|      0|        return -1;
 2368|      0|    }
 2369|      1|    state->abstract_types = PySet_New(NULL);
 2370|      1|    if (!state->abstract_types) {
  ------------------
  |  Branch (2370:9): [True: 0, False: 1]
  ------------------
 2371|      0|        return -1;
 2372|      0|    }
 2373|      1|    if (PySet_Add(state->abstract_types, state->AST_type) < 0) {
  ------------------
  |  Branch (2373:9): [True: 0, False: 1]
  ------------------
 2374|      0|        return -1;
 2375|      0|    }
 2376|      1|    if (add_ast_fields(state) < 0) {
  ------------------
  |  Branch (2376:9): [True: 0, False: 1]
  ------------------
 2377|      0|        return -1;
 2378|      0|    }
 2379|      1|    state->mod_type = make_type(state, "mod", state->AST_type, NULL, 0,
 2380|      1|        "mod = Module(stmt* body, type_ignore* type_ignores)\n"
 2381|      1|        "    | Interactive(stmt* body)\n"
 2382|      1|        "    | Expression(expr body)\n"
 2383|      1|        "    | FunctionType(expr* argtypes, expr returns)");
 2384|      1|    if (!state->mod_type) return -1;
  ------------------
  |  Branch (2384:9): [True: 0, False: 1]
  ------------------
 2385|      1|    if (add_attributes(state, state->mod_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (2385:9): [True: 0, False: 1]
  ------------------
 2386|      1|    if (PySet_Add(state->abstract_types, state->mod_type) < 0) return -1;
  ------------------
  |  Branch (2386:9): [True: 0, False: 1]
  ------------------
 2387|      1|    state->Module_type = make_type(state, "Module", state->mod_type,
 2388|      1|                                   Module_fields, 2,
 2389|      1|        "Module(stmt* body, type_ignore* type_ignores)");
 2390|      1|    if (!state->Module_type) return -1;
  ------------------
  |  Branch (2390:9): [True: 0, False: 1]
  ------------------
 2391|      1|    state->Interactive_type = make_type(state, "Interactive", state->mod_type,
 2392|      1|                                        Interactive_fields, 1,
 2393|      1|        "Interactive(stmt* body)");
 2394|      1|    if (!state->Interactive_type) return -1;
  ------------------
  |  Branch (2394:9): [True: 0, False: 1]
  ------------------
 2395|      1|    state->Expression_type = make_type(state, "Expression", state->mod_type,
 2396|      1|                                       Expression_fields, 1,
 2397|      1|        "Expression(expr body)");
 2398|      1|    if (!state->Expression_type) return -1;
  ------------------
  |  Branch (2398:9): [True: 0, False: 1]
  ------------------
 2399|      1|    state->FunctionType_type = make_type(state, "FunctionType",
 2400|      1|                                         state->mod_type, FunctionType_fields,
 2401|      1|                                         2,
 2402|      1|        "FunctionType(expr* argtypes, expr returns)");
 2403|      1|    if (!state->FunctionType_type) return -1;
  ------------------
  |  Branch (2403:9): [True: 0, False: 1]
  ------------------
 2404|      1|    state->stmt_type = make_type(state, "stmt", state->AST_type, NULL, 0,
 2405|      1|        "stmt = FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)\n"
 2406|      1|        "     | AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)\n"
 2407|      1|        "     | ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list, type_param* type_params)\n"
 2408|      1|        "     | Return(expr? value)\n"
 2409|      1|        "     | Delete(expr* targets)\n"
 2410|      1|        "     | Assign(expr* targets, expr value, string? type_comment)\n"
 2411|      1|        "     | TypeAlias(expr name, type_param* type_params, expr value)\n"
 2412|      1|        "     | AugAssign(expr target, operator op, expr value)\n"
 2413|      1|        "     | AnnAssign(expr target, expr annotation, expr? value, int simple)\n"
 2414|      1|        "     | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
 2415|      1|        "     | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)\n"
 2416|      1|        "     | While(expr test, stmt* body, stmt* orelse)\n"
 2417|      1|        "     | If(expr test, stmt* body, stmt* orelse)\n"
 2418|      1|        "     | With(withitem* items, stmt* body, string? type_comment)\n"
 2419|      1|        "     | AsyncWith(withitem* items, stmt* body, string? type_comment)\n"
 2420|      1|        "     | Match(expr subject, match_case* cases)\n"
 2421|      1|        "     | Raise(expr? exc, expr? cause)\n"
 2422|      1|        "     | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
 2423|      1|        "     | TryStar(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)\n"
 2424|      1|        "     | Assert(expr test, expr? msg)\n"
 2425|      1|        "     | Import(alias* names, int? is_lazy)\n"
 2426|      1|        "     | ImportFrom(identifier? module, alias* names, int? level, int? is_lazy)\n"
 2427|      1|        "     | Global(identifier* names)\n"
 2428|      1|        "     | Nonlocal(identifier* names)\n"
 2429|      1|        "     | Expr(expr value)\n"
 2430|      1|        "     | Pass\n"
 2431|      1|        "     | Break\n"
 2432|      1|        "     | Continue");
 2433|      1|    if (!state->stmt_type) return -1;
  ------------------
  |  Branch (2433:9): [True: 0, False: 1]
  ------------------
 2434|      1|    if (add_attributes(state, state->stmt_type, stmt_attributes, 4) < 0) return
  ------------------
  |  Branch (2434:9): [True: 0, False: 1]
  ------------------
 2435|      0|        -1;
 2436|      1|    if (PySet_Add(state->abstract_types, state->stmt_type) < 0) return -1;
  ------------------
  |  Branch (2436:9): [True: 0, False: 1]
  ------------------
 2437|      1|    if (PyObject_SetAttr(state->stmt_type, state->end_lineno, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2437:9): [True: 0, False: 1]
  ------------------
 2438|      0|        return -1;
 2439|      1|    if (PyObject_SetAttr(state->stmt_type, state->end_col_offset, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2439:9): [True: 0, False: 1]
  ------------------
 2440|      1|        -1)
 2441|      0|        return -1;
 2442|      1|    state->FunctionDef_type = make_type(state, "FunctionDef", state->stmt_type,
 2443|      1|                                        FunctionDef_fields, 7,
 2444|      1|        "FunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)");
 2445|      1|    if (!state->FunctionDef_type) return -1;
  ------------------
  |  Branch (2445:9): [True: 0, False: 1]
  ------------------
 2446|      1|    if (PyObject_SetAttr(state->FunctionDef_type, state->returns, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2446:9): [True: 0, False: 1]
  ------------------
 2447|      1|        -1)
 2448|      0|        return -1;
 2449|      1|    if (PyObject_SetAttr(state->FunctionDef_type, state->type_comment, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2449:9): [True: 0, False: 1]
  ------------------
 2450|      1|        == -1)
 2451|      0|        return -1;
 2452|      1|    state->AsyncFunctionDef_type = make_type(state, "AsyncFunctionDef",
 2453|      1|                                             state->stmt_type,
 2454|      1|                                             AsyncFunctionDef_fields, 7,
 2455|      1|        "AsyncFunctionDef(identifier name, arguments args, stmt* body, expr* decorator_list, expr? returns, string? type_comment, type_param* type_params)");
 2456|      1|    if (!state->AsyncFunctionDef_type) return -1;
  ------------------
  |  Branch (2456:9): [True: 0, False: 1]
  ------------------
 2457|      1|    if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->returns, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2457:9): [True: 0, False: 1]
  ------------------
 2458|      1|        == -1)
 2459|      0|        return -1;
 2460|      1|    if (PyObject_SetAttr(state->AsyncFunctionDef_type, state->type_comment,
  ------------------
  |  Branch (2460:9): [True: 0, False: 1]
  ------------------
 2461|      1|        Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2462|      0|        return -1;
 2463|      1|    state->ClassDef_type = make_type(state, "ClassDef", state->stmt_type,
 2464|      1|                                     ClassDef_fields, 6,
 2465|      1|        "ClassDef(identifier name, expr* bases, keyword* keywords, stmt* body, expr* decorator_list, type_param* type_params)");
 2466|      1|    if (!state->ClassDef_type) return -1;
  ------------------
  |  Branch (2466:9): [True: 0, False: 1]
  ------------------
 2467|      1|    state->Return_type = make_type(state, "Return", state->stmt_type,
 2468|      1|                                   Return_fields, 1,
 2469|      1|        "Return(expr? value)");
 2470|      1|    if (!state->Return_type) return -1;
  ------------------
  |  Branch (2470:9): [True: 0, False: 1]
  ------------------
 2471|      1|    if (PyObject_SetAttr(state->Return_type, state->value, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2471:9): [True: 0, False: 1]
  ------------------
 2472|      0|        return -1;
 2473|      1|    state->Delete_type = make_type(state, "Delete", state->stmt_type,
 2474|      1|                                   Delete_fields, 1,
 2475|      1|        "Delete(expr* targets)");
 2476|      1|    if (!state->Delete_type) return -1;
  ------------------
  |  Branch (2476:9): [True: 0, False: 1]
  ------------------
 2477|      1|    state->Assign_type = make_type(state, "Assign", state->stmt_type,
 2478|      1|                                   Assign_fields, 3,
 2479|      1|        "Assign(expr* targets, expr value, string? type_comment)");
 2480|      1|    if (!state->Assign_type) return -1;
  ------------------
  |  Branch (2480:9): [True: 0, False: 1]
  ------------------
 2481|      1|    if (PyObject_SetAttr(state->Assign_type, state->type_comment, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2481:9): [True: 0, False: 1]
  ------------------
 2482|      1|        -1)
 2483|      0|        return -1;
 2484|      1|    state->TypeAlias_type = make_type(state, "TypeAlias", state->stmt_type,
 2485|      1|                                      TypeAlias_fields, 3,
 2486|      1|        "TypeAlias(expr name, type_param* type_params, expr value)");
 2487|      1|    if (!state->TypeAlias_type) return -1;
  ------------------
  |  Branch (2487:9): [True: 0, False: 1]
  ------------------
 2488|      1|    state->AugAssign_type = make_type(state, "AugAssign", state->stmt_type,
 2489|      1|                                      AugAssign_fields, 3,
 2490|      1|        "AugAssign(expr target, operator op, expr value)");
 2491|      1|    if (!state->AugAssign_type) return -1;
  ------------------
  |  Branch (2491:9): [True: 0, False: 1]
  ------------------
 2492|      1|    state->AnnAssign_type = make_type(state, "AnnAssign", state->stmt_type,
 2493|      1|                                      AnnAssign_fields, 4,
 2494|      1|        "AnnAssign(expr target, expr annotation, expr? value, int simple)");
 2495|      1|    if (!state->AnnAssign_type) return -1;
  ------------------
  |  Branch (2495:9): [True: 0, False: 1]
  ------------------
 2496|      1|    if (PyObject_SetAttr(state->AnnAssign_type, state->value, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2496:9): [True: 0, False: 1]
  ------------------
 2497|      0|        return -1;
 2498|      1|    state->For_type = make_type(state, "For", state->stmt_type, For_fields, 5,
 2499|      1|        "For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
 2500|      1|    if (!state->For_type) return -1;
  ------------------
  |  Branch (2500:9): [True: 0, False: 1]
  ------------------
 2501|      1|    if (PyObject_SetAttr(state->For_type, state->type_comment, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2501:9): [True: 0, False: 1]
  ------------------
 2502|      0|        return -1;
 2503|      1|    state->AsyncFor_type = make_type(state, "AsyncFor", state->stmt_type,
 2504|      1|                                     AsyncFor_fields, 5,
 2505|      1|        "AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)");
 2506|      1|    if (!state->AsyncFor_type) return -1;
  ------------------
  |  Branch (2506:9): [True: 0, False: 1]
  ------------------
 2507|      1|    if (PyObject_SetAttr(state->AsyncFor_type, state->type_comment, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2507:9): [True: 0, False: 1]
  ------------------
 2508|      1|        -1)
 2509|      0|        return -1;
 2510|      1|    state->While_type = make_type(state, "While", state->stmt_type,
 2511|      1|                                  While_fields, 3,
 2512|      1|        "While(expr test, stmt* body, stmt* orelse)");
 2513|      1|    if (!state->While_type) return -1;
  ------------------
  |  Branch (2513:9): [True: 0, False: 1]
  ------------------
 2514|      1|    state->If_type = make_type(state, "If", state->stmt_type, If_fields, 3,
 2515|      1|        "If(expr test, stmt* body, stmt* orelse)");
 2516|      1|    if (!state->If_type) return -1;
  ------------------
  |  Branch (2516:9): [True: 0, False: 1]
  ------------------
 2517|      1|    state->With_type = make_type(state, "With", state->stmt_type, With_fields,
 2518|      1|                                 3,
 2519|      1|        "With(withitem* items, stmt* body, string? type_comment)");
 2520|      1|    if (!state->With_type) return -1;
  ------------------
  |  Branch (2520:9): [True: 0, False: 1]
  ------------------
 2521|      1|    if (PyObject_SetAttr(state->With_type, state->type_comment, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2521:9): [True: 0, False: 1]
  ------------------
 2522|      0|        return -1;
 2523|      1|    state->AsyncWith_type = make_type(state, "AsyncWith", state->stmt_type,
 2524|      1|                                      AsyncWith_fields, 3,
 2525|      1|        "AsyncWith(withitem* items, stmt* body, string? type_comment)");
 2526|      1|    if (!state->AsyncWith_type) return -1;
  ------------------
  |  Branch (2526:9): [True: 0, False: 1]
  ------------------
 2527|      1|    if (PyObject_SetAttr(state->AsyncWith_type, state->type_comment, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2527:9): [True: 0, False: 1]
  ------------------
 2528|      1|        == -1)
 2529|      0|        return -1;
 2530|      1|    state->Match_type = make_type(state, "Match", state->stmt_type,
 2531|      1|                                  Match_fields, 2,
 2532|      1|        "Match(expr subject, match_case* cases)");
 2533|      1|    if (!state->Match_type) return -1;
  ------------------
  |  Branch (2533:9): [True: 0, False: 1]
  ------------------
 2534|      1|    state->Raise_type = make_type(state, "Raise", state->stmt_type,
 2535|      1|                                  Raise_fields, 2,
 2536|      1|        "Raise(expr? exc, expr? cause)");
 2537|      1|    if (!state->Raise_type) return -1;
  ------------------
  |  Branch (2537:9): [True: 0, False: 1]
  ------------------
 2538|      1|    if (PyObject_SetAttr(state->Raise_type, state->exc, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2538:9): [True: 0, False: 1]
  ------------------
 2539|      0|        return -1;
 2540|      1|    if (PyObject_SetAttr(state->Raise_type, state->cause, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2540:9): [True: 0, False: 1]
  ------------------
 2541|      0|        return -1;
 2542|      1|    state->Try_type = make_type(state, "Try", state->stmt_type, Try_fields, 4,
 2543|      1|        "Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
 2544|      1|    if (!state->Try_type) return -1;
  ------------------
  |  Branch (2544:9): [True: 0, False: 1]
  ------------------
 2545|      1|    state->TryStar_type = make_type(state, "TryStar", state->stmt_type,
 2546|      1|                                    TryStar_fields, 4,
 2547|      1|        "TryStar(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)");
 2548|      1|    if (!state->TryStar_type) return -1;
  ------------------
  |  Branch (2548:9): [True: 0, False: 1]
  ------------------
 2549|      1|    state->Assert_type = make_type(state, "Assert", state->stmt_type,
 2550|      1|                                   Assert_fields, 2,
 2551|      1|        "Assert(expr test, expr? msg)");
 2552|      1|    if (!state->Assert_type) return -1;
  ------------------
  |  Branch (2552:9): [True: 0, False: 1]
  ------------------
 2553|      1|    if (PyObject_SetAttr(state->Assert_type, state->msg, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2553:9): [True: 0, False: 1]
  ------------------
 2554|      0|        return -1;
 2555|      1|    state->Import_type = make_type(state, "Import", state->stmt_type,
 2556|      1|                                   Import_fields, 2,
 2557|      1|        "Import(alias* names, int? is_lazy)");
 2558|      1|    if (!state->Import_type) return -1;
  ------------------
  |  Branch (2558:9): [True: 0, False: 1]
  ------------------
 2559|      1|    if (PyObject_SetAttr(state->Import_type, state->is_lazy, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2559:9): [True: 0, False: 1]
  ------------------
 2560|      0|        return -1;
 2561|      1|    state->ImportFrom_type = make_type(state, "ImportFrom", state->stmt_type,
 2562|      1|                                       ImportFrom_fields, 4,
 2563|      1|        "ImportFrom(identifier? module, alias* names, int? level, int? is_lazy)");
 2564|      1|    if (!state->ImportFrom_type) return -1;
  ------------------
  |  Branch (2564:9): [True: 0, False: 1]
  ------------------
 2565|      1|    if (PyObject_SetAttr(state->ImportFrom_type, state->module, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2565:9): [True: 0, False: 1]
  ------------------
 2566|      0|        return -1;
 2567|      1|    if (PyObject_SetAttr(state->ImportFrom_type, state->level, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2567:9): [True: 0, False: 1]
  ------------------
 2568|      0|        return -1;
 2569|      1|    if (PyObject_SetAttr(state->ImportFrom_type, state->is_lazy, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2569:9): [True: 0, False: 1]
  ------------------
 2570|      0|        return -1;
 2571|      1|    state->Global_type = make_type(state, "Global", state->stmt_type,
 2572|      1|                                   Global_fields, 1,
 2573|      1|        "Global(identifier* names)");
 2574|      1|    if (!state->Global_type) return -1;
  ------------------
  |  Branch (2574:9): [True: 0, False: 1]
  ------------------
 2575|      1|    state->Nonlocal_type = make_type(state, "Nonlocal", state->stmt_type,
 2576|      1|                                     Nonlocal_fields, 1,
 2577|      1|        "Nonlocal(identifier* names)");
 2578|      1|    if (!state->Nonlocal_type) return -1;
  ------------------
  |  Branch (2578:9): [True: 0, False: 1]
  ------------------
 2579|      1|    state->Expr_type = make_type(state, "Expr", state->stmt_type, Expr_fields,
 2580|      1|                                 1,
 2581|      1|        "Expr(expr value)");
 2582|      1|    if (!state->Expr_type) return -1;
  ------------------
  |  Branch (2582:9): [True: 0, False: 1]
  ------------------
 2583|      1|    state->Pass_type = make_type(state, "Pass", state->stmt_type, NULL, 0,
 2584|      1|        "Pass");
 2585|      1|    if (!state->Pass_type) return -1;
  ------------------
  |  Branch (2585:9): [True: 0, False: 1]
  ------------------
 2586|      1|    state->Break_type = make_type(state, "Break", state->stmt_type, NULL, 0,
 2587|      1|        "Break");
 2588|      1|    if (!state->Break_type) return -1;
  ------------------
  |  Branch (2588:9): [True: 0, False: 1]
  ------------------
 2589|      1|    state->Continue_type = make_type(state, "Continue", state->stmt_type, NULL,
 2590|      1|                                     0,
 2591|      1|        "Continue");
 2592|      1|    if (!state->Continue_type) return -1;
  ------------------
  |  Branch (2592:9): [True: 0, False: 1]
  ------------------
 2593|      1|    state->expr_type = make_type(state, "expr", state->AST_type, NULL, 0,
 2594|      1|        "expr = BoolOp(boolop op, expr* values)\n"
 2595|      1|        "     | NamedExpr(expr target, expr value)\n"
 2596|      1|        "     | BinOp(expr left, operator op, expr right)\n"
 2597|      1|        "     | UnaryOp(unaryop op, expr operand)\n"
 2598|      1|        "     | Lambda(arguments args, expr body)\n"
 2599|      1|        "     | IfExp(expr test, expr body, expr orelse)\n"
 2600|      1|        "     | Dict(expr?* keys, expr* values)\n"
 2601|      1|        "     | Set(expr* elts)\n"
 2602|      1|        "     | ListComp(expr elt, comprehension* generators)\n"
 2603|      1|        "     | SetComp(expr elt, comprehension* generators)\n"
 2604|      1|        "     | DictComp(expr key, expr? value, comprehension* generators)\n"
 2605|      1|        "     | GeneratorExp(expr elt, comprehension* generators)\n"
 2606|      1|        "     | Await(expr value)\n"
 2607|      1|        "     | Yield(expr? value)\n"
 2608|      1|        "     | YieldFrom(expr value)\n"
 2609|      1|        "     | Compare(expr left, cmpop* ops, expr* comparators)\n"
 2610|      1|        "     | Call(expr func, expr* args, keyword* keywords)\n"
 2611|      1|        "     | FormattedValue(expr value, int conversion, expr? format_spec)\n"
 2612|      1|        "     | Interpolation(expr value, constant str, int conversion, expr? format_spec)\n"
 2613|      1|        "     | JoinedStr(expr* values)\n"
 2614|      1|        "     | TemplateStr(expr* values)\n"
 2615|      1|        "     | Constant(constant value, string? kind)\n"
 2616|      1|        "     | Attribute(expr value, identifier attr, expr_context ctx)\n"
 2617|      1|        "     | Subscript(expr value, expr slice, expr_context ctx)\n"
 2618|      1|        "     | Starred(expr value, expr_context ctx)\n"
 2619|      1|        "     | Name(identifier id, expr_context ctx)\n"
 2620|      1|        "     | List(expr* elts, expr_context ctx)\n"
 2621|      1|        "     | Tuple(expr* elts, expr_context ctx)\n"
 2622|      1|        "     | Slice(expr? lower, expr? upper, expr? step)");
 2623|      1|    if (!state->expr_type) return -1;
  ------------------
  |  Branch (2623:9): [True: 0, False: 1]
  ------------------
 2624|      1|    if (add_attributes(state, state->expr_type, expr_attributes, 4) < 0) return
  ------------------
  |  Branch (2624:9): [True: 0, False: 1]
  ------------------
 2625|      0|        -1;
 2626|      1|    if (PySet_Add(state->abstract_types, state->expr_type) < 0) return -1;
  ------------------
  |  Branch (2626:9): [True: 0, False: 1]
  ------------------
 2627|      1|    if (PyObject_SetAttr(state->expr_type, state->end_lineno, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2627:9): [True: 0, False: 1]
  ------------------
 2628|      0|        return -1;
 2629|      1|    if (PyObject_SetAttr(state->expr_type, state->end_col_offset, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2629:9): [True: 0, False: 1]
  ------------------
 2630|      1|        -1)
 2631|      0|        return -1;
 2632|      1|    state->BoolOp_type = make_type(state, "BoolOp", state->expr_type,
 2633|      1|                                   BoolOp_fields, 2,
 2634|      1|        "BoolOp(boolop op, expr* values)");
 2635|      1|    if (!state->BoolOp_type) return -1;
  ------------------
  |  Branch (2635:9): [True: 0, False: 1]
  ------------------
 2636|      1|    state->NamedExpr_type = make_type(state, "NamedExpr", state->expr_type,
 2637|      1|                                      NamedExpr_fields, 2,
 2638|      1|        "NamedExpr(expr target, expr value)");
 2639|      1|    if (!state->NamedExpr_type) return -1;
  ------------------
  |  Branch (2639:9): [True: 0, False: 1]
  ------------------
 2640|      1|    state->BinOp_type = make_type(state, "BinOp", state->expr_type,
 2641|      1|                                  BinOp_fields, 3,
 2642|      1|        "BinOp(expr left, operator op, expr right)");
 2643|      1|    if (!state->BinOp_type) return -1;
  ------------------
  |  Branch (2643:9): [True: 0, False: 1]
  ------------------
 2644|      1|    state->UnaryOp_type = make_type(state, "UnaryOp", state->expr_type,
 2645|      1|                                    UnaryOp_fields, 2,
 2646|      1|        "UnaryOp(unaryop op, expr operand)");
 2647|      1|    if (!state->UnaryOp_type) return -1;
  ------------------
  |  Branch (2647:9): [True: 0, False: 1]
  ------------------
 2648|      1|    state->Lambda_type = make_type(state, "Lambda", state->expr_type,
 2649|      1|                                   Lambda_fields, 2,
 2650|      1|        "Lambda(arguments args, expr body)");
 2651|      1|    if (!state->Lambda_type) return -1;
  ------------------
  |  Branch (2651:9): [True: 0, False: 1]
  ------------------
 2652|      1|    state->IfExp_type = make_type(state, "IfExp", state->expr_type,
 2653|      1|                                  IfExp_fields, 3,
 2654|      1|        "IfExp(expr test, expr body, expr orelse)");
 2655|      1|    if (!state->IfExp_type) return -1;
  ------------------
  |  Branch (2655:9): [True: 0, False: 1]
  ------------------
 2656|      1|    state->Dict_type = make_type(state, "Dict", state->expr_type, Dict_fields,
 2657|      1|                                 2,
 2658|      1|        "Dict(expr?* keys, expr* values)");
 2659|      1|    if (!state->Dict_type) return -1;
  ------------------
  |  Branch (2659:9): [True: 0, False: 1]
  ------------------
 2660|      1|    state->Set_type = make_type(state, "Set", state->expr_type, Set_fields, 1,
 2661|      1|        "Set(expr* elts)");
 2662|      1|    if (!state->Set_type) return -1;
  ------------------
  |  Branch (2662:9): [True: 0, False: 1]
  ------------------
 2663|      1|    state->ListComp_type = make_type(state, "ListComp", state->expr_type,
 2664|      1|                                     ListComp_fields, 2,
 2665|      1|        "ListComp(expr elt, comprehension* generators)");
 2666|      1|    if (!state->ListComp_type) return -1;
  ------------------
  |  Branch (2666:9): [True: 0, False: 1]
  ------------------
 2667|      1|    state->SetComp_type = make_type(state, "SetComp", state->expr_type,
 2668|      1|                                    SetComp_fields, 2,
 2669|      1|        "SetComp(expr elt, comprehension* generators)");
 2670|      1|    if (!state->SetComp_type) return -1;
  ------------------
  |  Branch (2670:9): [True: 0, False: 1]
  ------------------
 2671|      1|    state->DictComp_type = make_type(state, "DictComp", state->expr_type,
 2672|      1|                                     DictComp_fields, 3,
 2673|      1|        "DictComp(expr key, expr? value, comprehension* generators)");
 2674|      1|    if (!state->DictComp_type) return -1;
  ------------------
  |  Branch (2674:9): [True: 0, False: 1]
  ------------------
 2675|      1|    if (PyObject_SetAttr(state->DictComp_type, state->value, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2675:9): [True: 0, False: 1]
  ------------------
 2676|      0|        return -1;
 2677|      1|    state->GeneratorExp_type = make_type(state, "GeneratorExp",
 2678|      1|                                         state->expr_type, GeneratorExp_fields,
 2679|      1|                                         2,
 2680|      1|        "GeneratorExp(expr elt, comprehension* generators)");
 2681|      1|    if (!state->GeneratorExp_type) return -1;
  ------------------
  |  Branch (2681:9): [True: 0, False: 1]
  ------------------
 2682|      1|    state->Await_type = make_type(state, "Await", state->expr_type,
 2683|      1|                                  Await_fields, 1,
 2684|      1|        "Await(expr value)");
 2685|      1|    if (!state->Await_type) return -1;
  ------------------
  |  Branch (2685:9): [True: 0, False: 1]
  ------------------
 2686|      1|    state->Yield_type = make_type(state, "Yield", state->expr_type,
 2687|      1|                                  Yield_fields, 1,
 2688|      1|        "Yield(expr? value)");
 2689|      1|    if (!state->Yield_type) return -1;
  ------------------
  |  Branch (2689:9): [True: 0, False: 1]
  ------------------
 2690|      1|    if (PyObject_SetAttr(state->Yield_type, state->value, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2690:9): [True: 0, False: 1]
  ------------------
 2691|      0|        return -1;
 2692|      1|    state->YieldFrom_type = make_type(state, "YieldFrom", state->expr_type,
 2693|      1|                                      YieldFrom_fields, 1,
 2694|      1|        "YieldFrom(expr value)");
 2695|      1|    if (!state->YieldFrom_type) return -1;
  ------------------
  |  Branch (2695:9): [True: 0, False: 1]
  ------------------
 2696|      1|    state->Compare_type = make_type(state, "Compare", state->expr_type,
 2697|      1|                                    Compare_fields, 3,
 2698|      1|        "Compare(expr left, cmpop* ops, expr* comparators)");
 2699|      1|    if (!state->Compare_type) return -1;
  ------------------
  |  Branch (2699:9): [True: 0, False: 1]
  ------------------
 2700|      1|    state->Call_type = make_type(state, "Call", state->expr_type, Call_fields,
 2701|      1|                                 3,
 2702|      1|        "Call(expr func, expr* args, keyword* keywords)");
 2703|      1|    if (!state->Call_type) return -1;
  ------------------
  |  Branch (2703:9): [True: 0, False: 1]
  ------------------
 2704|      1|    state->FormattedValue_type = make_type(state, "FormattedValue",
 2705|      1|                                           state->expr_type,
 2706|      1|                                           FormattedValue_fields, 3,
 2707|      1|        "FormattedValue(expr value, int conversion, expr? format_spec)");
 2708|      1|    if (!state->FormattedValue_type) return -1;
  ------------------
  |  Branch (2708:9): [True: 0, False: 1]
  ------------------
 2709|      1|    if (PyObject_SetAttr(state->FormattedValue_type, state->format_spec,
  ------------------
  |  Branch (2709:9): [True: 0, False: 1]
  ------------------
 2710|      1|        Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2711|      0|        return -1;
 2712|      1|    state->Interpolation_type = make_type(state, "Interpolation",
 2713|      1|                                          state->expr_type,
 2714|      1|                                          Interpolation_fields, 4,
 2715|      1|        "Interpolation(expr value, constant str, int conversion, expr? format_spec)");
 2716|      1|    if (!state->Interpolation_type) return -1;
  ------------------
  |  Branch (2716:9): [True: 0, False: 1]
  ------------------
 2717|      1|    if (PyObject_SetAttr(state->Interpolation_type, state->format_spec,
  ------------------
  |  Branch (2717:9): [True: 0, False: 1]
  ------------------
 2718|      1|        Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2719|      0|        return -1;
 2720|      1|    state->JoinedStr_type = make_type(state, "JoinedStr", state->expr_type,
 2721|      1|                                      JoinedStr_fields, 1,
 2722|      1|        "JoinedStr(expr* values)");
 2723|      1|    if (!state->JoinedStr_type) return -1;
  ------------------
  |  Branch (2723:9): [True: 0, False: 1]
  ------------------
 2724|      1|    state->TemplateStr_type = make_type(state, "TemplateStr", state->expr_type,
 2725|      1|                                        TemplateStr_fields, 1,
 2726|      1|        "TemplateStr(expr* values)");
 2727|      1|    if (!state->TemplateStr_type) return -1;
  ------------------
  |  Branch (2727:9): [True: 0, False: 1]
  ------------------
 2728|      1|    state->Constant_type = make_type(state, "Constant", state->expr_type,
 2729|      1|                                     Constant_fields, 2,
 2730|      1|        "Constant(constant value, string? kind)");
 2731|      1|    if (!state->Constant_type) return -1;
  ------------------
  |  Branch (2731:9): [True: 0, False: 1]
  ------------------
 2732|      1|    if (PyObject_SetAttr(state->Constant_type, state->kind, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2732:9): [True: 0, False: 1]
  ------------------
 2733|      0|        return -1;
 2734|      1|    state->Attribute_type = make_type(state, "Attribute", state->expr_type,
 2735|      1|                                      Attribute_fields, 3,
 2736|      1|        "Attribute(expr value, identifier attr, expr_context ctx)");
 2737|      1|    if (!state->Attribute_type) return -1;
  ------------------
  |  Branch (2737:9): [True: 0, False: 1]
  ------------------
 2738|      1|    state->Subscript_type = make_type(state, "Subscript", state->expr_type,
 2739|      1|                                      Subscript_fields, 3,
 2740|      1|        "Subscript(expr value, expr slice, expr_context ctx)");
 2741|      1|    if (!state->Subscript_type) return -1;
  ------------------
  |  Branch (2741:9): [True: 0, False: 1]
  ------------------
 2742|      1|    state->Starred_type = make_type(state, "Starred", state->expr_type,
 2743|      1|                                    Starred_fields, 2,
 2744|      1|        "Starred(expr value, expr_context ctx)");
 2745|      1|    if (!state->Starred_type) return -1;
  ------------------
  |  Branch (2745:9): [True: 0, False: 1]
  ------------------
 2746|      1|    state->Name_type = make_type(state, "Name", state->expr_type, Name_fields,
 2747|      1|                                 2,
 2748|      1|        "Name(identifier id, expr_context ctx)");
 2749|      1|    if (!state->Name_type) return -1;
  ------------------
  |  Branch (2749:9): [True: 0, False: 1]
  ------------------
 2750|      1|    state->List_type = make_type(state, "List", state->expr_type, List_fields,
 2751|      1|                                 2,
 2752|      1|        "List(expr* elts, expr_context ctx)");
 2753|      1|    if (!state->List_type) return -1;
  ------------------
  |  Branch (2753:9): [True: 0, False: 1]
  ------------------
 2754|      1|    state->Tuple_type = make_type(state, "Tuple", state->expr_type,
 2755|      1|                                  Tuple_fields, 2,
 2756|      1|        "Tuple(expr* elts, expr_context ctx)");
 2757|      1|    if (!state->Tuple_type) return -1;
  ------------------
  |  Branch (2757:9): [True: 0, False: 1]
  ------------------
 2758|      1|    state->Slice_type = make_type(state, "Slice", state->expr_type,
 2759|      1|                                  Slice_fields, 3,
 2760|      1|        "Slice(expr? lower, expr? upper, expr? step)");
 2761|      1|    if (!state->Slice_type) return -1;
  ------------------
  |  Branch (2761:9): [True: 0, False: 1]
  ------------------
 2762|      1|    if (PyObject_SetAttr(state->Slice_type, state->lower, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2762:9): [True: 0, False: 1]
  ------------------
 2763|      0|        return -1;
 2764|      1|    if (PyObject_SetAttr(state->Slice_type, state->upper, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2764:9): [True: 0, False: 1]
  ------------------
 2765|      0|        return -1;
 2766|      1|    if (PyObject_SetAttr(state->Slice_type, state->step, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2766:9): [True: 0, False: 1]
  ------------------
 2767|      0|        return -1;
 2768|      1|    state->expr_context_type = make_type(state, "expr_context",
 2769|      1|                                         state->AST_type, NULL, 0,
 2770|      1|        "expr_context = Load | Store | Del");
 2771|      1|    if (!state->expr_context_type) return -1;
  ------------------
  |  Branch (2771:9): [True: 0, False: 1]
  ------------------
 2772|      1|    if (add_attributes(state, state->expr_context_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (2772:9): [True: 0, False: 1]
  ------------------
 2773|      1|    if (PySet_Add(state->abstract_types, state->expr_context_type) < 0) return
  ------------------
  |  Branch (2773:9): [True: 0, False: 1]
  ------------------
 2774|      0|        -1;
 2775|      1|    state->Load_type = make_type(state, "Load", state->expr_context_type, NULL,
 2776|      1|                                 0,
 2777|      1|        "Load");
 2778|      1|    if (!state->Load_type) return -1;
  ------------------
  |  Branch (2778:9): [True: 0, False: 1]
  ------------------
 2779|      1|    state->Load_singleton = PyType_GenericNew((PyTypeObject *)state->Load_type,
 2780|      1|                                              NULL, NULL);
 2781|      1|    if (!state->Load_singleton) return -1;
  ------------------
  |  Branch (2781:9): [True: 0, False: 1]
  ------------------
 2782|      1|    state->Store_type = make_type(state, "Store", state->expr_context_type,
 2783|      1|                                  NULL, 0,
 2784|      1|        "Store");
 2785|      1|    if (!state->Store_type) return -1;
  ------------------
  |  Branch (2785:9): [True: 0, False: 1]
  ------------------
 2786|      1|    state->Store_singleton = PyType_GenericNew((PyTypeObject
 2787|      1|                                               *)state->Store_type, NULL, NULL);
 2788|      1|    if (!state->Store_singleton) return -1;
  ------------------
  |  Branch (2788:9): [True: 0, False: 1]
  ------------------
 2789|      1|    state->Del_type = make_type(state, "Del", state->expr_context_type, NULL, 0,
 2790|      1|        "Del");
 2791|      1|    if (!state->Del_type) return -1;
  ------------------
  |  Branch (2791:9): [True: 0, False: 1]
  ------------------
 2792|      1|    state->Del_singleton = PyType_GenericNew((PyTypeObject *)state->Del_type,
 2793|      1|                                             NULL, NULL);
 2794|      1|    if (!state->Del_singleton) return -1;
  ------------------
  |  Branch (2794:9): [True: 0, False: 1]
  ------------------
 2795|      1|    state->boolop_type = make_type(state, "boolop", state->AST_type, NULL, 0,
 2796|      1|        "boolop = And | Or");
 2797|      1|    if (!state->boolop_type) return -1;
  ------------------
  |  Branch (2797:9): [True: 0, False: 1]
  ------------------
 2798|      1|    if (add_attributes(state, state->boolop_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (2798:9): [True: 0, False: 1]
  ------------------
 2799|      1|    if (PySet_Add(state->abstract_types, state->boolop_type) < 0) return -1;
  ------------------
  |  Branch (2799:9): [True: 0, False: 1]
  ------------------
 2800|      1|    state->And_type = make_type(state, "And", state->boolop_type, NULL, 0,
 2801|      1|        "And");
 2802|      1|    if (!state->And_type) return -1;
  ------------------
  |  Branch (2802:9): [True: 0, False: 1]
  ------------------
 2803|      1|    state->And_singleton = PyType_GenericNew((PyTypeObject *)state->And_type,
 2804|      1|                                             NULL, NULL);
 2805|      1|    if (!state->And_singleton) return -1;
  ------------------
  |  Branch (2805:9): [True: 0, False: 1]
  ------------------
 2806|      1|    state->Or_type = make_type(state, "Or", state->boolop_type, NULL, 0,
 2807|      1|        "Or");
 2808|      1|    if (!state->Or_type) return -1;
  ------------------
  |  Branch (2808:9): [True: 0, False: 1]
  ------------------
 2809|      1|    state->Or_singleton = PyType_GenericNew((PyTypeObject *)state->Or_type,
 2810|      1|                                            NULL, NULL);
 2811|      1|    if (!state->Or_singleton) return -1;
  ------------------
  |  Branch (2811:9): [True: 0, False: 1]
  ------------------
 2812|      1|    state->operator_type = make_type(state, "operator", state->AST_type, NULL,
 2813|      1|                                     0,
 2814|      1|        "operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift | RShift | BitOr | BitXor | BitAnd | FloorDiv");
 2815|      1|    if (!state->operator_type) return -1;
  ------------------
  |  Branch (2815:9): [True: 0, False: 1]
  ------------------
 2816|      1|    if (add_attributes(state, state->operator_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (2816:9): [True: 0, False: 1]
  ------------------
 2817|      1|    if (PySet_Add(state->abstract_types, state->operator_type) < 0) return -1;
  ------------------
  |  Branch (2817:9): [True: 0, False: 1]
  ------------------
 2818|      1|    state->Add_type = make_type(state, "Add", state->operator_type, NULL, 0,
 2819|      1|        "Add");
 2820|      1|    if (!state->Add_type) return -1;
  ------------------
  |  Branch (2820:9): [True: 0, False: 1]
  ------------------
 2821|      1|    state->Add_singleton = PyType_GenericNew((PyTypeObject *)state->Add_type,
 2822|      1|                                             NULL, NULL);
 2823|      1|    if (!state->Add_singleton) return -1;
  ------------------
  |  Branch (2823:9): [True: 0, False: 1]
  ------------------
 2824|      1|    state->Sub_type = make_type(state, "Sub", state->operator_type, NULL, 0,
 2825|      1|        "Sub");
 2826|      1|    if (!state->Sub_type) return -1;
  ------------------
  |  Branch (2826:9): [True: 0, False: 1]
  ------------------
 2827|      1|    state->Sub_singleton = PyType_GenericNew((PyTypeObject *)state->Sub_type,
 2828|      1|                                             NULL, NULL);
 2829|      1|    if (!state->Sub_singleton) return -1;
  ------------------
  |  Branch (2829:9): [True: 0, False: 1]
  ------------------
 2830|      1|    state->Mult_type = make_type(state, "Mult", state->operator_type, NULL, 0,
 2831|      1|        "Mult");
 2832|      1|    if (!state->Mult_type) return -1;
  ------------------
  |  Branch (2832:9): [True: 0, False: 1]
  ------------------
 2833|      1|    state->Mult_singleton = PyType_GenericNew((PyTypeObject *)state->Mult_type,
 2834|      1|                                              NULL, NULL);
 2835|      1|    if (!state->Mult_singleton) return -1;
  ------------------
  |  Branch (2835:9): [True: 0, False: 1]
  ------------------
 2836|      1|    state->MatMult_type = make_type(state, "MatMult", state->operator_type,
 2837|      1|                                    NULL, 0,
 2838|      1|        "MatMult");
 2839|      1|    if (!state->MatMult_type) return -1;
  ------------------
  |  Branch (2839:9): [True: 0, False: 1]
  ------------------
 2840|      1|    state->MatMult_singleton = PyType_GenericNew((PyTypeObject
 2841|      1|                                                 *)state->MatMult_type, NULL,
 2842|      1|                                                 NULL);
 2843|      1|    if (!state->MatMult_singleton) return -1;
  ------------------
  |  Branch (2843:9): [True: 0, False: 1]
  ------------------
 2844|      1|    state->Div_type = make_type(state, "Div", state->operator_type, NULL, 0,
 2845|      1|        "Div");
 2846|      1|    if (!state->Div_type) return -1;
  ------------------
  |  Branch (2846:9): [True: 0, False: 1]
  ------------------
 2847|      1|    state->Div_singleton = PyType_GenericNew((PyTypeObject *)state->Div_type,
 2848|      1|                                             NULL, NULL);
 2849|      1|    if (!state->Div_singleton) return -1;
  ------------------
  |  Branch (2849:9): [True: 0, False: 1]
  ------------------
 2850|      1|    state->Mod_type = make_type(state, "Mod", state->operator_type, NULL, 0,
 2851|      1|        "Mod");
 2852|      1|    if (!state->Mod_type) return -1;
  ------------------
  |  Branch (2852:9): [True: 0, False: 1]
  ------------------
 2853|      1|    state->Mod_singleton = PyType_GenericNew((PyTypeObject *)state->Mod_type,
 2854|      1|                                             NULL, NULL);
 2855|      1|    if (!state->Mod_singleton) return -1;
  ------------------
  |  Branch (2855:9): [True: 0, False: 1]
  ------------------
 2856|      1|    state->Pow_type = make_type(state, "Pow", state->operator_type, NULL, 0,
 2857|      1|        "Pow");
 2858|      1|    if (!state->Pow_type) return -1;
  ------------------
  |  Branch (2858:9): [True: 0, False: 1]
  ------------------
 2859|      1|    state->Pow_singleton = PyType_GenericNew((PyTypeObject *)state->Pow_type,
 2860|      1|                                             NULL, NULL);
 2861|      1|    if (!state->Pow_singleton) return -1;
  ------------------
  |  Branch (2861:9): [True: 0, False: 1]
  ------------------
 2862|      1|    state->LShift_type = make_type(state, "LShift", state->operator_type, NULL,
 2863|      1|                                   0,
 2864|      1|        "LShift");
 2865|      1|    if (!state->LShift_type) return -1;
  ------------------
  |  Branch (2865:9): [True: 0, False: 1]
  ------------------
 2866|      1|    state->LShift_singleton = PyType_GenericNew((PyTypeObject
 2867|      1|                                                *)state->LShift_type, NULL,
 2868|      1|                                                NULL);
 2869|      1|    if (!state->LShift_singleton) return -1;
  ------------------
  |  Branch (2869:9): [True: 0, False: 1]
  ------------------
 2870|      1|    state->RShift_type = make_type(state, "RShift", state->operator_type, NULL,
 2871|      1|                                   0,
 2872|      1|        "RShift");
 2873|      1|    if (!state->RShift_type) return -1;
  ------------------
  |  Branch (2873:9): [True: 0, False: 1]
  ------------------
 2874|      1|    state->RShift_singleton = PyType_GenericNew((PyTypeObject
 2875|      1|                                                *)state->RShift_type, NULL,
 2876|      1|                                                NULL);
 2877|      1|    if (!state->RShift_singleton) return -1;
  ------------------
  |  Branch (2877:9): [True: 0, False: 1]
  ------------------
 2878|      1|    state->BitOr_type = make_type(state, "BitOr", state->operator_type, NULL, 0,
 2879|      1|        "BitOr");
 2880|      1|    if (!state->BitOr_type) return -1;
  ------------------
  |  Branch (2880:9): [True: 0, False: 1]
  ------------------
 2881|      1|    state->BitOr_singleton = PyType_GenericNew((PyTypeObject
 2882|      1|                                               *)state->BitOr_type, NULL, NULL);
 2883|      1|    if (!state->BitOr_singleton) return -1;
  ------------------
  |  Branch (2883:9): [True: 0, False: 1]
  ------------------
 2884|      1|    state->BitXor_type = make_type(state, "BitXor", state->operator_type, NULL,
 2885|      1|                                   0,
 2886|      1|        "BitXor");
 2887|      1|    if (!state->BitXor_type) return -1;
  ------------------
  |  Branch (2887:9): [True: 0, False: 1]
  ------------------
 2888|      1|    state->BitXor_singleton = PyType_GenericNew((PyTypeObject
 2889|      1|                                                *)state->BitXor_type, NULL,
 2890|      1|                                                NULL);
 2891|      1|    if (!state->BitXor_singleton) return -1;
  ------------------
  |  Branch (2891:9): [True: 0, False: 1]
  ------------------
 2892|      1|    state->BitAnd_type = make_type(state, "BitAnd", state->operator_type, NULL,
 2893|      1|                                   0,
 2894|      1|        "BitAnd");
 2895|      1|    if (!state->BitAnd_type) return -1;
  ------------------
  |  Branch (2895:9): [True: 0, False: 1]
  ------------------
 2896|      1|    state->BitAnd_singleton = PyType_GenericNew((PyTypeObject
 2897|      1|                                                *)state->BitAnd_type, NULL,
 2898|      1|                                                NULL);
 2899|      1|    if (!state->BitAnd_singleton) return -1;
  ------------------
  |  Branch (2899:9): [True: 0, False: 1]
  ------------------
 2900|      1|    state->FloorDiv_type = make_type(state, "FloorDiv", state->operator_type,
 2901|      1|                                     NULL, 0,
 2902|      1|        "FloorDiv");
 2903|      1|    if (!state->FloorDiv_type) return -1;
  ------------------
  |  Branch (2903:9): [True: 0, False: 1]
  ------------------
 2904|      1|    state->FloorDiv_singleton = PyType_GenericNew((PyTypeObject
 2905|      1|                                                  *)state->FloorDiv_type, NULL,
 2906|      1|                                                  NULL);
 2907|      1|    if (!state->FloorDiv_singleton) return -1;
  ------------------
  |  Branch (2907:9): [True: 0, False: 1]
  ------------------
 2908|      1|    state->unaryop_type = make_type(state, "unaryop", state->AST_type, NULL, 0,
 2909|      1|        "unaryop = Invert | Not | UAdd | USub");
 2910|      1|    if (!state->unaryop_type) return -1;
  ------------------
  |  Branch (2910:9): [True: 0, False: 1]
  ------------------
 2911|      1|    if (add_attributes(state, state->unaryop_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (2911:9): [True: 0, False: 1]
  ------------------
 2912|      1|    if (PySet_Add(state->abstract_types, state->unaryop_type) < 0) return -1;
  ------------------
  |  Branch (2912:9): [True: 0, False: 1]
  ------------------
 2913|      1|    state->Invert_type = make_type(state, "Invert", state->unaryop_type, NULL,
 2914|      1|                                   0,
 2915|      1|        "Invert");
 2916|      1|    if (!state->Invert_type) return -1;
  ------------------
  |  Branch (2916:9): [True: 0, False: 1]
  ------------------
 2917|      1|    state->Invert_singleton = PyType_GenericNew((PyTypeObject
 2918|      1|                                                *)state->Invert_type, NULL,
 2919|      1|                                                NULL);
 2920|      1|    if (!state->Invert_singleton) return -1;
  ------------------
  |  Branch (2920:9): [True: 0, False: 1]
  ------------------
 2921|      1|    state->Not_type = make_type(state, "Not", state->unaryop_type, NULL, 0,
 2922|      1|        "Not");
 2923|      1|    if (!state->Not_type) return -1;
  ------------------
  |  Branch (2923:9): [True: 0, False: 1]
  ------------------
 2924|      1|    state->Not_singleton = PyType_GenericNew((PyTypeObject *)state->Not_type,
 2925|      1|                                             NULL, NULL);
 2926|      1|    if (!state->Not_singleton) return -1;
  ------------------
  |  Branch (2926:9): [True: 0, False: 1]
  ------------------
 2927|      1|    state->UAdd_type = make_type(state, "UAdd", state->unaryop_type, NULL, 0,
 2928|      1|        "UAdd");
 2929|      1|    if (!state->UAdd_type) return -1;
  ------------------
  |  Branch (2929:9): [True: 0, False: 1]
  ------------------
 2930|      1|    state->UAdd_singleton = PyType_GenericNew((PyTypeObject *)state->UAdd_type,
 2931|      1|                                              NULL, NULL);
 2932|      1|    if (!state->UAdd_singleton) return -1;
  ------------------
  |  Branch (2932:9): [True: 0, False: 1]
  ------------------
 2933|      1|    state->USub_type = make_type(state, "USub", state->unaryop_type, NULL, 0,
 2934|      1|        "USub");
 2935|      1|    if (!state->USub_type) return -1;
  ------------------
  |  Branch (2935:9): [True: 0, False: 1]
  ------------------
 2936|      1|    state->USub_singleton = PyType_GenericNew((PyTypeObject *)state->USub_type,
 2937|      1|                                              NULL, NULL);
 2938|      1|    if (!state->USub_singleton) return -1;
  ------------------
  |  Branch (2938:9): [True: 0, False: 1]
  ------------------
 2939|      1|    state->cmpop_type = make_type(state, "cmpop", state->AST_type, NULL, 0,
 2940|      1|        "cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn");
 2941|      1|    if (!state->cmpop_type) return -1;
  ------------------
  |  Branch (2941:9): [True: 0, False: 1]
  ------------------
 2942|      1|    if (add_attributes(state, state->cmpop_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (2942:9): [True: 0, False: 1]
  ------------------
 2943|      1|    if (PySet_Add(state->abstract_types, state->cmpop_type) < 0) return -1;
  ------------------
  |  Branch (2943:9): [True: 0, False: 1]
  ------------------
 2944|      1|    state->Eq_type = make_type(state, "Eq", state->cmpop_type, NULL, 0,
 2945|      1|        "Eq");
 2946|      1|    if (!state->Eq_type) return -1;
  ------------------
  |  Branch (2946:9): [True: 0, False: 1]
  ------------------
 2947|      1|    state->Eq_singleton = PyType_GenericNew((PyTypeObject *)state->Eq_type,
 2948|      1|                                            NULL, NULL);
 2949|      1|    if (!state->Eq_singleton) return -1;
  ------------------
  |  Branch (2949:9): [True: 0, False: 1]
  ------------------
 2950|      1|    state->NotEq_type = make_type(state, "NotEq", state->cmpop_type, NULL, 0,
 2951|      1|        "NotEq");
 2952|      1|    if (!state->NotEq_type) return -1;
  ------------------
  |  Branch (2952:9): [True: 0, False: 1]
  ------------------
 2953|      1|    state->NotEq_singleton = PyType_GenericNew((PyTypeObject
 2954|      1|                                               *)state->NotEq_type, NULL, NULL);
 2955|      1|    if (!state->NotEq_singleton) return -1;
  ------------------
  |  Branch (2955:9): [True: 0, False: 1]
  ------------------
 2956|      1|    state->Lt_type = make_type(state, "Lt", state->cmpop_type, NULL, 0,
 2957|      1|        "Lt");
 2958|      1|    if (!state->Lt_type) return -1;
  ------------------
  |  Branch (2958:9): [True: 0, False: 1]
  ------------------
 2959|      1|    state->Lt_singleton = PyType_GenericNew((PyTypeObject *)state->Lt_type,
 2960|      1|                                            NULL, NULL);
 2961|      1|    if (!state->Lt_singleton) return -1;
  ------------------
  |  Branch (2961:9): [True: 0, False: 1]
  ------------------
 2962|      1|    state->LtE_type = make_type(state, "LtE", state->cmpop_type, NULL, 0,
 2963|      1|        "LtE");
 2964|      1|    if (!state->LtE_type) return -1;
  ------------------
  |  Branch (2964:9): [True: 0, False: 1]
  ------------------
 2965|      1|    state->LtE_singleton = PyType_GenericNew((PyTypeObject *)state->LtE_type,
 2966|      1|                                             NULL, NULL);
 2967|      1|    if (!state->LtE_singleton) return -1;
  ------------------
  |  Branch (2967:9): [True: 0, False: 1]
  ------------------
 2968|      1|    state->Gt_type = make_type(state, "Gt", state->cmpop_type, NULL, 0,
 2969|      1|        "Gt");
 2970|      1|    if (!state->Gt_type) return -1;
  ------------------
  |  Branch (2970:9): [True: 0, False: 1]
  ------------------
 2971|      1|    state->Gt_singleton = PyType_GenericNew((PyTypeObject *)state->Gt_type,
 2972|      1|                                            NULL, NULL);
 2973|      1|    if (!state->Gt_singleton) return -1;
  ------------------
  |  Branch (2973:9): [True: 0, False: 1]
  ------------------
 2974|      1|    state->GtE_type = make_type(state, "GtE", state->cmpop_type, NULL, 0,
 2975|      1|        "GtE");
 2976|      1|    if (!state->GtE_type) return -1;
  ------------------
  |  Branch (2976:9): [True: 0, False: 1]
  ------------------
 2977|      1|    state->GtE_singleton = PyType_GenericNew((PyTypeObject *)state->GtE_type,
 2978|      1|                                             NULL, NULL);
 2979|      1|    if (!state->GtE_singleton) return -1;
  ------------------
  |  Branch (2979:9): [True: 0, False: 1]
  ------------------
 2980|      1|    state->Is_type = make_type(state, "Is", state->cmpop_type, NULL, 0,
 2981|      1|        "Is");
 2982|      1|    if (!state->Is_type) return -1;
  ------------------
  |  Branch (2982:9): [True: 0, False: 1]
  ------------------
 2983|      1|    state->Is_singleton = PyType_GenericNew((PyTypeObject *)state->Is_type,
 2984|      1|                                            NULL, NULL);
 2985|      1|    if (!state->Is_singleton) return -1;
  ------------------
  |  Branch (2985:9): [True: 0, False: 1]
  ------------------
 2986|      1|    state->IsNot_type = make_type(state, "IsNot", state->cmpop_type, NULL, 0,
 2987|      1|        "IsNot");
 2988|      1|    if (!state->IsNot_type) return -1;
  ------------------
  |  Branch (2988:9): [True: 0, False: 1]
  ------------------
 2989|      1|    state->IsNot_singleton = PyType_GenericNew((PyTypeObject
 2990|      1|                                               *)state->IsNot_type, NULL, NULL);
 2991|      1|    if (!state->IsNot_singleton) return -1;
  ------------------
  |  Branch (2991:9): [True: 0, False: 1]
  ------------------
 2992|      1|    state->In_type = make_type(state, "In", state->cmpop_type, NULL, 0,
 2993|      1|        "In");
 2994|      1|    if (!state->In_type) return -1;
  ------------------
  |  Branch (2994:9): [True: 0, False: 1]
  ------------------
 2995|      1|    state->In_singleton = PyType_GenericNew((PyTypeObject *)state->In_type,
 2996|      1|                                            NULL, NULL);
 2997|      1|    if (!state->In_singleton) return -1;
  ------------------
  |  Branch (2997:9): [True: 0, False: 1]
  ------------------
 2998|      1|    state->NotIn_type = make_type(state, "NotIn", state->cmpop_type, NULL, 0,
 2999|      1|        "NotIn");
 3000|      1|    if (!state->NotIn_type) return -1;
  ------------------
  |  Branch (3000:9): [True: 0, False: 1]
  ------------------
 3001|      1|    state->NotIn_singleton = PyType_GenericNew((PyTypeObject
 3002|      1|                                               *)state->NotIn_type, NULL, NULL);
 3003|      1|    if (!state->NotIn_singleton) return -1;
  ------------------
  |  Branch (3003:9): [True: 0, False: 1]
  ------------------
 3004|      1|    state->comprehension_type = make_type(state, "comprehension",
 3005|      1|                                          state->AST_type,
 3006|      1|                                          comprehension_fields, 4,
 3007|      1|        "comprehension(expr target, expr iter, expr* ifs, int is_async)");
 3008|      1|    if (!state->comprehension_type) return -1;
  ------------------
  |  Branch (3008:9): [True: 0, False: 1]
  ------------------
 3009|      1|    if (add_attributes(state, state->comprehension_type, NULL, 0) < 0) return
  ------------------
  |  Branch (3009:9): [True: 0, False: 1]
  ------------------
 3010|      0|        -1;
 3011|      1|    state->excepthandler_type = make_type(state, "excepthandler",
 3012|      1|                                          state->AST_type, NULL, 0,
 3013|      1|        "excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)");
 3014|      1|    if (!state->excepthandler_type) return -1;
  ------------------
  |  Branch (3014:9): [True: 0, False: 1]
  ------------------
 3015|      1|    if (add_attributes(state, state->excepthandler_type,
  ------------------
  |  Branch (3015:9): [True: 0, False: 1]
  ------------------
 3016|      1|        excepthandler_attributes, 4) < 0) return -1;
 3017|      1|    if (PySet_Add(state->abstract_types, state->excepthandler_type) < 0) return
  ------------------
  |  Branch (3017:9): [True: 0, False: 1]
  ------------------
 3018|      0|        -1;
 3019|      1|    if (PyObject_SetAttr(state->excepthandler_type, state->end_lineno, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3019:9): [True: 0, False: 1]
  ------------------
 3020|      1|        == -1)
 3021|      0|        return -1;
 3022|      1|    if (PyObject_SetAttr(state->excepthandler_type, state->end_col_offset,
  ------------------
  |  Branch (3022:9): [True: 0, False: 1]
  ------------------
 3023|      1|        Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3024|      0|        return -1;
 3025|      1|    state->ExceptHandler_type = make_type(state, "ExceptHandler",
 3026|      1|                                          state->excepthandler_type,
 3027|      1|                                          ExceptHandler_fields, 3,
 3028|      1|        "ExceptHandler(expr? type, identifier? name, stmt* body)");
 3029|      1|    if (!state->ExceptHandler_type) return -1;
  ------------------
  |  Branch (3029:9): [True: 0, False: 1]
  ------------------
 3030|      1|    if (PyObject_SetAttr(state->ExceptHandler_type, state->type, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3030:9): [True: 0, False: 1]
  ------------------
 3031|      0|        return -1;
 3032|      1|    if (PyObject_SetAttr(state->ExceptHandler_type, state->name, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3032:9): [True: 0, False: 1]
  ------------------
 3033|      0|        return -1;
 3034|      1|    state->arguments_type = make_type(state, "arguments", state->AST_type,
 3035|      1|                                      arguments_fields, 7,
 3036|      1|        "arguments(arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs, expr?* kw_defaults, arg? kwarg, expr* defaults)");
 3037|      1|    if (!state->arguments_type) return -1;
  ------------------
  |  Branch (3037:9): [True: 0, False: 1]
  ------------------
 3038|      1|    if (add_attributes(state, state->arguments_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (3038:9): [True: 0, False: 1]
  ------------------
 3039|      1|    if (PyObject_SetAttr(state->arguments_type, state->vararg, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3039:9): [True: 0, False: 1]
  ------------------
 3040|      0|        return -1;
 3041|      1|    if (PyObject_SetAttr(state->arguments_type, state->kwarg, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3041:9): [True: 0, False: 1]
  ------------------
 3042|      0|        return -1;
 3043|      1|    state->arg_type = make_type(state, "arg", state->AST_type, arg_fields, 3,
 3044|      1|        "arg(identifier arg, expr? annotation, string? type_comment)");
 3045|      1|    if (!state->arg_type) return -1;
  ------------------
  |  Branch (3045:9): [True: 0, False: 1]
  ------------------
 3046|      1|    if (add_attributes(state, state->arg_type, arg_attributes, 4) < 0) return
  ------------------
  |  Branch (3046:9): [True: 0, False: 1]
  ------------------
 3047|      0|        -1;
 3048|      1|    if (PyObject_SetAttr(state->arg_type, state->annotation, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3048:9): [True: 0, False: 1]
  ------------------
 3049|      0|        return -1;
 3050|      1|    if (PyObject_SetAttr(state->arg_type, state->type_comment, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3050:9): [True: 0, False: 1]
  ------------------
 3051|      0|        return -1;
 3052|      1|    if (PyObject_SetAttr(state->arg_type, state->end_lineno, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3052:9): [True: 0, False: 1]
  ------------------
 3053|      0|        return -1;
 3054|      1|    if (PyObject_SetAttr(state->arg_type, state->end_col_offset, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3054:9): [True: 0, False: 1]
  ------------------
 3055|      0|        return -1;
 3056|      1|    state->keyword_type = make_type(state, "keyword", state->AST_type,
 3057|      1|                                    keyword_fields, 2,
 3058|      1|        "keyword(identifier? arg, expr value)");
 3059|      1|    if (!state->keyword_type) return -1;
  ------------------
  |  Branch (3059:9): [True: 0, False: 1]
  ------------------
 3060|      1|    if (add_attributes(state, state->keyword_type, keyword_attributes, 4) < 0)
  ------------------
  |  Branch (3060:9): [True: 0, False: 1]
  ------------------
 3061|      0|        return -1;
 3062|      1|    if (PyObject_SetAttr(state->keyword_type, state->arg, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3062:9): [True: 0, False: 1]
  ------------------
 3063|      0|        return -1;
 3064|      1|    if (PyObject_SetAttr(state->keyword_type, state->end_lineno, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3064:9): [True: 0, False: 1]
  ------------------
 3065|      0|        return -1;
 3066|      1|    if (PyObject_SetAttr(state->keyword_type, state->end_col_offset, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3066:9): [True: 0, False: 1]
  ------------------
 3067|      1|        == -1)
 3068|      0|        return -1;
 3069|      1|    state->alias_type = make_type(state, "alias", state->AST_type,
 3070|      1|                                  alias_fields, 2,
 3071|      1|        "alias(identifier name, identifier? asname)");
 3072|      1|    if (!state->alias_type) return -1;
  ------------------
  |  Branch (3072:9): [True: 0, False: 1]
  ------------------
 3073|      1|    if (add_attributes(state, state->alias_type, alias_attributes, 4) < 0)
  ------------------
  |  Branch (3073:9): [True: 0, False: 1]
  ------------------
 3074|      0|        return -1;
 3075|      1|    if (PyObject_SetAttr(state->alias_type, state->asname, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3075:9): [True: 0, False: 1]
  ------------------
 3076|      0|        return -1;
 3077|      1|    if (PyObject_SetAttr(state->alias_type, state->end_lineno, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3077:9): [True: 0, False: 1]
  ------------------
 3078|      0|        return -1;
 3079|      1|    if (PyObject_SetAttr(state->alias_type, state->end_col_offset, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3079:9): [True: 0, False: 1]
  ------------------
 3080|      1|        -1)
 3081|      0|        return -1;
 3082|      1|    state->withitem_type = make_type(state, "withitem", state->AST_type,
 3083|      1|                                     withitem_fields, 2,
 3084|      1|        "withitem(expr context_expr, expr? optional_vars)");
 3085|      1|    if (!state->withitem_type) return -1;
  ------------------
  |  Branch (3085:9): [True: 0, False: 1]
  ------------------
 3086|      1|    if (add_attributes(state, state->withitem_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (3086:9): [True: 0, False: 1]
  ------------------
 3087|      1|    if (PyObject_SetAttr(state->withitem_type, state->optional_vars, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3087:9): [True: 0, False: 1]
  ------------------
 3088|      1|        == -1)
 3089|      0|        return -1;
 3090|      1|    state->match_case_type = make_type(state, "match_case", state->AST_type,
 3091|      1|                                       match_case_fields, 3,
 3092|      1|        "match_case(pattern pattern, expr? guard, stmt* body)");
 3093|      1|    if (!state->match_case_type) return -1;
  ------------------
  |  Branch (3093:9): [True: 0, False: 1]
  ------------------
 3094|      1|    if (add_attributes(state, state->match_case_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (3094:9): [True: 0, False: 1]
  ------------------
 3095|      1|    if (PyObject_SetAttr(state->match_case_type, state->guard, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3095:9): [True: 0, False: 1]
  ------------------
 3096|      0|        return -1;
 3097|      1|    state->pattern_type = make_type(state, "pattern", state->AST_type, NULL, 0,
 3098|      1|        "pattern = MatchValue(expr value)\n"
 3099|      1|        "        | MatchSingleton(constant value)\n"
 3100|      1|        "        | MatchSequence(pattern* patterns)\n"
 3101|      1|        "        | MatchMapping(expr* keys, pattern* patterns, identifier? rest)\n"
 3102|      1|        "        | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)\n"
 3103|      1|        "        | MatchStar(identifier? name)\n"
 3104|      1|        "        | MatchAs(pattern? pattern, identifier? name)\n"
 3105|      1|        "        | MatchOr(pattern* patterns)");
 3106|      1|    if (!state->pattern_type) return -1;
  ------------------
  |  Branch (3106:9): [True: 0, False: 1]
  ------------------
 3107|      1|    if (add_attributes(state, state->pattern_type, pattern_attributes, 4) < 0)
  ------------------
  |  Branch (3107:9): [True: 0, False: 1]
  ------------------
 3108|      0|        return -1;
 3109|      1|    if (PySet_Add(state->abstract_types, state->pattern_type) < 0) return -1;
  ------------------
  |  Branch (3109:9): [True: 0, False: 1]
  ------------------
 3110|      1|    state->MatchValue_type = make_type(state, "MatchValue",
 3111|      1|                                       state->pattern_type, MatchValue_fields,
 3112|      1|                                       1,
 3113|      1|        "MatchValue(expr value)");
 3114|      1|    if (!state->MatchValue_type) return -1;
  ------------------
  |  Branch (3114:9): [True: 0, False: 1]
  ------------------
 3115|      1|    state->MatchSingleton_type = make_type(state, "MatchSingleton",
 3116|      1|                                           state->pattern_type,
 3117|      1|                                           MatchSingleton_fields, 1,
 3118|      1|        "MatchSingleton(constant value)");
 3119|      1|    if (!state->MatchSingleton_type) return -1;
  ------------------
  |  Branch (3119:9): [True: 0, False: 1]
  ------------------
 3120|      1|    state->MatchSequence_type = make_type(state, "MatchSequence",
 3121|      1|                                          state->pattern_type,
 3122|      1|                                          MatchSequence_fields, 1,
 3123|      1|        "MatchSequence(pattern* patterns)");
 3124|      1|    if (!state->MatchSequence_type) return -1;
  ------------------
  |  Branch (3124:9): [True: 0, False: 1]
  ------------------
 3125|      1|    state->MatchMapping_type = make_type(state, "MatchMapping",
 3126|      1|                                         state->pattern_type,
 3127|      1|                                         MatchMapping_fields, 3,
 3128|      1|        "MatchMapping(expr* keys, pattern* patterns, identifier? rest)");
 3129|      1|    if (!state->MatchMapping_type) return -1;
  ------------------
  |  Branch (3129:9): [True: 0, False: 1]
  ------------------
 3130|      1|    if (PyObject_SetAttr(state->MatchMapping_type, state->rest, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3130:9): [True: 0, False: 1]
  ------------------
 3131|      0|        return -1;
 3132|      1|    state->MatchClass_type = make_type(state, "MatchClass",
 3133|      1|                                       state->pattern_type, MatchClass_fields,
 3134|      1|                                       4,
 3135|      1|        "MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)");
 3136|      1|    if (!state->MatchClass_type) return -1;
  ------------------
  |  Branch (3136:9): [True: 0, False: 1]
  ------------------
 3137|      1|    state->MatchStar_type = make_type(state, "MatchStar", state->pattern_type,
 3138|      1|                                      MatchStar_fields, 1,
 3139|      1|        "MatchStar(identifier? name)");
 3140|      1|    if (!state->MatchStar_type) return -1;
  ------------------
  |  Branch (3140:9): [True: 0, False: 1]
  ------------------
 3141|      1|    if (PyObject_SetAttr(state->MatchStar_type, state->name, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3141:9): [True: 0, False: 1]
  ------------------
 3142|      0|        return -1;
 3143|      1|    state->MatchAs_type = make_type(state, "MatchAs", state->pattern_type,
 3144|      1|                                    MatchAs_fields, 2,
 3145|      1|        "MatchAs(pattern? pattern, identifier? name)");
 3146|      1|    if (!state->MatchAs_type) return -1;
  ------------------
  |  Branch (3146:9): [True: 0, False: 1]
  ------------------
 3147|      1|    if (PyObject_SetAttr(state->MatchAs_type, state->pattern, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3147:9): [True: 0, False: 1]
  ------------------
 3148|      0|        return -1;
 3149|      1|    if (PyObject_SetAttr(state->MatchAs_type, state->name, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3149:9): [True: 0, False: 1]
  ------------------
 3150|      0|        return -1;
 3151|      1|    state->MatchOr_type = make_type(state, "MatchOr", state->pattern_type,
 3152|      1|                                    MatchOr_fields, 1,
 3153|      1|        "MatchOr(pattern* patterns)");
 3154|      1|    if (!state->MatchOr_type) return -1;
  ------------------
  |  Branch (3154:9): [True: 0, False: 1]
  ------------------
 3155|      1|    state->type_ignore_type = make_type(state, "type_ignore", state->AST_type,
 3156|      1|                                        NULL, 0,
 3157|      1|        "type_ignore = TypeIgnore(int lineno, string tag)");
 3158|      1|    if (!state->type_ignore_type) return -1;
  ------------------
  |  Branch (3158:9): [True: 0, False: 1]
  ------------------
 3159|      1|    if (add_attributes(state, state->type_ignore_type, NULL, 0) < 0) return -1;
  ------------------
  |  Branch (3159:9): [True: 0, False: 1]
  ------------------
 3160|      1|    if (PySet_Add(state->abstract_types, state->type_ignore_type) < 0) return
  ------------------
  |  Branch (3160:9): [True: 0, False: 1]
  ------------------
 3161|      0|        -1;
 3162|      1|    state->TypeIgnore_type = make_type(state, "TypeIgnore",
 3163|      1|                                       state->type_ignore_type,
 3164|      1|                                       TypeIgnore_fields, 2,
 3165|      1|        "TypeIgnore(int lineno, string tag)");
 3166|      1|    if (!state->TypeIgnore_type) return -1;
  ------------------
  |  Branch (3166:9): [True: 0, False: 1]
  ------------------
 3167|      1|    state->type_param_type = make_type(state, "type_param", state->AST_type,
 3168|      1|                                       NULL, 0,
 3169|      1|        "type_param = TypeVar(identifier name, expr? bound, expr? default_value)\n"
 3170|      1|        "           | ParamSpec(identifier name, expr? default_value)\n"
 3171|      1|        "           | TypeVarTuple(identifier name, expr? default_value)");
 3172|      1|    if (!state->type_param_type) return -1;
  ------------------
  |  Branch (3172:9): [True: 0, False: 1]
  ------------------
 3173|      1|    if (add_attributes(state, state->type_param_type, type_param_attributes, 4)
  ------------------
  |  Branch (3173:9): [True: 0, False: 1]
  ------------------
 3174|      1|        < 0) return -1;
 3175|      1|    if (PySet_Add(state->abstract_types, state->type_param_type) < 0) return -1;
  ------------------
  |  Branch (3175:9): [True: 0, False: 1]
  ------------------
 3176|      1|    state->TypeVar_type = make_type(state, "TypeVar", state->type_param_type,
 3177|      1|                                    TypeVar_fields, 3,
 3178|      1|        "TypeVar(identifier name, expr? bound, expr? default_value)");
 3179|      1|    if (!state->TypeVar_type) return -1;
  ------------------
  |  Branch (3179:9): [True: 0, False: 1]
  ------------------
 3180|      1|    if (PyObject_SetAttr(state->TypeVar_type, state->bound, Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3180:9): [True: 0, False: 1]
  ------------------
 3181|      0|        return -1;
 3182|      1|    if (PyObject_SetAttr(state->TypeVar_type, state->default_value, Py_None) ==
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3182:9): [True: 0, False: 1]
  ------------------
 3183|      1|        -1)
 3184|      0|        return -1;
 3185|      1|    state->ParamSpec_type = make_type(state, "ParamSpec",
 3186|      1|                                      state->type_param_type, ParamSpec_fields,
 3187|      1|                                      2,
 3188|      1|        "ParamSpec(identifier name, expr? default_value)");
 3189|      1|    if (!state->ParamSpec_type) return -1;
  ------------------
  |  Branch (3189:9): [True: 0, False: 1]
  ------------------
 3190|      1|    if (PyObject_SetAttr(state->ParamSpec_type, state->default_value, Py_None)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3190:9): [True: 0, False: 1]
  ------------------
 3191|      1|        == -1)
 3192|      0|        return -1;
 3193|      1|    state->TypeVarTuple_type = make_type(state, "TypeVarTuple",
 3194|      1|                                         state->type_param_type,
 3195|      1|                                         TypeVarTuple_fields, 2,
 3196|      1|        "TypeVarTuple(identifier name, expr? default_value)");
 3197|      1|    if (!state->TypeVarTuple_type) return -1;
  ------------------
  |  Branch (3197:9): [True: 0, False: 1]
  ------------------
 3198|      1|    if (PyObject_SetAttr(state->TypeVarTuple_type, state->default_value,
  ------------------
  |  Branch (3198:9): [True: 0, False: 1]
  ------------------
 3199|      1|        Py_None) == -1)
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3200|      0|        return -1;
 3201|       |
 3202|      1|    if (!add_ast_annotations(state)) {
  ------------------
  |  Branch (3202:9): [True: 0, False: 1]
  ------------------
 3203|      0|        return -1;
 3204|      0|    }
 3205|      1|    return 0;
 3206|      1|}
Python-ast.c:init_identifiers:
  296|      1|{
  297|      1|    if ((state->__dict__ = PyUnicode_InternFromString("__dict__")) == NULL) return -1;
  ------------------
  |  Branch (297:9): [True: 0, False: 1]
  ------------------
  298|      1|    if ((state->__doc__ = PyUnicode_InternFromString("__doc__")) == NULL) return -1;
  ------------------
  |  Branch (298:9): [True: 0, False: 1]
  ------------------
  299|      1|    if ((state->__match_args__ = PyUnicode_InternFromString("__match_args__")) == NULL) return -1;
  ------------------
  |  Branch (299:9): [True: 0, False: 1]
  ------------------
  300|      1|    if ((state->__module__ = PyUnicode_InternFromString("__module__")) == NULL) return -1;
  ------------------
  |  Branch (300:9): [True: 0, False: 1]
  ------------------
  301|      1|    if ((state->_attributes = PyUnicode_InternFromString("_attributes")) == NULL) return -1;
  ------------------
  |  Branch (301:9): [True: 0, False: 1]
  ------------------
  302|      1|    if ((state->_fields = PyUnicode_InternFromString("_fields")) == NULL) return -1;
  ------------------
  |  Branch (302:9): [True: 0, False: 1]
  ------------------
  303|      1|    if ((state->annotation = PyUnicode_InternFromString("annotation")) == NULL) return -1;
  ------------------
  |  Branch (303:9): [True: 0, False: 1]
  ------------------
  304|      1|    if ((state->arg = PyUnicode_InternFromString("arg")) == NULL) return -1;
  ------------------
  |  Branch (304:9): [True: 0, False: 1]
  ------------------
  305|      1|    if ((state->args = PyUnicode_InternFromString("args")) == NULL) return -1;
  ------------------
  |  Branch (305:9): [True: 0, False: 1]
  ------------------
  306|      1|    if ((state->argtypes = PyUnicode_InternFromString("argtypes")) == NULL) return -1;
  ------------------
  |  Branch (306:9): [True: 0, False: 1]
  ------------------
  307|      1|    if ((state->asname = PyUnicode_InternFromString("asname")) == NULL) return -1;
  ------------------
  |  Branch (307:9): [True: 0, False: 1]
  ------------------
  308|      1|    if ((state->ast = PyUnicode_InternFromString("ast")) == NULL) return -1;
  ------------------
  |  Branch (308:9): [True: 0, False: 1]
  ------------------
  309|      1|    if ((state->attr = PyUnicode_InternFromString("attr")) == NULL) return -1;
  ------------------
  |  Branch (309:9): [True: 0, False: 1]
  ------------------
  310|      1|    if ((state->bases = PyUnicode_InternFromString("bases")) == NULL) return -1;
  ------------------
  |  Branch (310:9): [True: 0, False: 1]
  ------------------
  311|      1|    if ((state->body = PyUnicode_InternFromString("body")) == NULL) return -1;
  ------------------
  |  Branch (311:9): [True: 0, False: 1]
  ------------------
  312|      1|    if ((state->bound = PyUnicode_InternFromString("bound")) == NULL) return -1;
  ------------------
  |  Branch (312:9): [True: 0, False: 1]
  ------------------
  313|      1|    if ((state->cases = PyUnicode_InternFromString("cases")) == NULL) return -1;
  ------------------
  |  Branch (313:9): [True: 0, False: 1]
  ------------------
  314|      1|    if ((state->cause = PyUnicode_InternFromString("cause")) == NULL) return -1;
  ------------------
  |  Branch (314:9): [True: 0, False: 1]
  ------------------
  315|      1|    if ((state->cls = PyUnicode_InternFromString("cls")) == NULL) return -1;
  ------------------
  |  Branch (315:9): [True: 0, False: 1]
  ------------------
  316|      1|    if ((state->col_offset = PyUnicode_InternFromString("col_offset")) == NULL) return -1;
  ------------------
  |  Branch (316:9): [True: 0, False: 1]
  ------------------
  317|      1|    if ((state->comparators = PyUnicode_InternFromString("comparators")) == NULL) return -1;
  ------------------
  |  Branch (317:9): [True: 0, False: 1]
  ------------------
  318|      1|    if ((state->context_expr = PyUnicode_InternFromString("context_expr")) == NULL) return -1;
  ------------------
  |  Branch (318:9): [True: 0, False: 1]
  ------------------
  319|      1|    if ((state->conversion = PyUnicode_InternFromString("conversion")) == NULL) return -1;
  ------------------
  |  Branch (319:9): [True: 0, False: 1]
  ------------------
  320|      1|    if ((state->ctx = PyUnicode_InternFromString("ctx")) == NULL) return -1;
  ------------------
  |  Branch (320:9): [True: 0, False: 1]
  ------------------
  321|      1|    if ((state->decorator_list = PyUnicode_InternFromString("decorator_list")) == NULL) return -1;
  ------------------
  |  Branch (321:9): [True: 0, False: 1]
  ------------------
  322|      1|    if ((state->default_value = PyUnicode_InternFromString("default_value")) == NULL) return -1;
  ------------------
  |  Branch (322:9): [True: 0, False: 1]
  ------------------
  323|      1|    if ((state->defaults = PyUnicode_InternFromString("defaults")) == NULL) return -1;
  ------------------
  |  Branch (323:9): [True: 0, False: 1]
  ------------------
  324|      1|    if ((state->elt = PyUnicode_InternFromString("elt")) == NULL) return -1;
  ------------------
  |  Branch (324:9): [True: 0, False: 1]
  ------------------
  325|      1|    if ((state->elts = PyUnicode_InternFromString("elts")) == NULL) return -1;
  ------------------
  |  Branch (325:9): [True: 0, False: 1]
  ------------------
  326|      1|    if ((state->end_col_offset = PyUnicode_InternFromString("end_col_offset")) == NULL) return -1;
  ------------------
  |  Branch (326:9): [True: 0, False: 1]
  ------------------
  327|      1|    if ((state->end_lineno = PyUnicode_InternFromString("end_lineno")) == NULL) return -1;
  ------------------
  |  Branch (327:9): [True: 0, False: 1]
  ------------------
  328|      1|    if ((state->exc = PyUnicode_InternFromString("exc")) == NULL) return -1;
  ------------------
  |  Branch (328:9): [True: 0, False: 1]
  ------------------
  329|      1|    if ((state->finalbody = PyUnicode_InternFromString("finalbody")) == NULL) return -1;
  ------------------
  |  Branch (329:9): [True: 0, False: 1]
  ------------------
  330|      1|    if ((state->format_spec = PyUnicode_InternFromString("format_spec")) == NULL) return -1;
  ------------------
  |  Branch (330:9): [True: 0, False: 1]
  ------------------
  331|      1|    if ((state->func = PyUnicode_InternFromString("func")) == NULL) return -1;
  ------------------
  |  Branch (331:9): [True: 0, False: 1]
  ------------------
  332|      1|    if ((state->generators = PyUnicode_InternFromString("generators")) == NULL) return -1;
  ------------------
  |  Branch (332:9): [True: 0, False: 1]
  ------------------
  333|      1|    if ((state->guard = PyUnicode_InternFromString("guard")) == NULL) return -1;
  ------------------
  |  Branch (333:9): [True: 0, False: 1]
  ------------------
  334|      1|    if ((state->handlers = PyUnicode_InternFromString("handlers")) == NULL) return -1;
  ------------------
  |  Branch (334:9): [True: 0, False: 1]
  ------------------
  335|      1|    if ((state->id = PyUnicode_InternFromString("id")) == NULL) return -1;
  ------------------
  |  Branch (335:9): [True: 0, False: 1]
  ------------------
  336|      1|    if ((state->ifs = PyUnicode_InternFromString("ifs")) == NULL) return -1;
  ------------------
  |  Branch (336:9): [True: 0, False: 1]
  ------------------
  337|      1|    if ((state->is_async = PyUnicode_InternFromString("is_async")) == NULL) return -1;
  ------------------
  |  Branch (337:9): [True: 0, False: 1]
  ------------------
  338|      1|    if ((state->is_lazy = PyUnicode_InternFromString("is_lazy")) == NULL) return -1;
  ------------------
  |  Branch (338:9): [True: 0, False: 1]
  ------------------
  339|      1|    if ((state->items = PyUnicode_InternFromString("items")) == NULL) return -1;
  ------------------
  |  Branch (339:9): [True: 0, False: 1]
  ------------------
  340|      1|    if ((state->iter = PyUnicode_InternFromString("iter")) == NULL) return -1;
  ------------------
  |  Branch (340:9): [True: 0, False: 1]
  ------------------
  341|      1|    if ((state->key = PyUnicode_InternFromString("key")) == NULL) return -1;
  ------------------
  |  Branch (341:9): [True: 0, False: 1]
  ------------------
  342|      1|    if ((state->keys = PyUnicode_InternFromString("keys")) == NULL) return -1;
  ------------------
  |  Branch (342:9): [True: 0, False: 1]
  ------------------
  343|      1|    if ((state->keywords = PyUnicode_InternFromString("keywords")) == NULL) return -1;
  ------------------
  |  Branch (343:9): [True: 0, False: 1]
  ------------------
  344|      1|    if ((state->kind = PyUnicode_InternFromString("kind")) == NULL) return -1;
  ------------------
  |  Branch (344:9): [True: 0, False: 1]
  ------------------
  345|      1|    if ((state->kw_defaults = PyUnicode_InternFromString("kw_defaults")) == NULL) return -1;
  ------------------
  |  Branch (345:9): [True: 0, False: 1]
  ------------------
  346|      1|    if ((state->kwarg = PyUnicode_InternFromString("kwarg")) == NULL) return -1;
  ------------------
  |  Branch (346:9): [True: 0, False: 1]
  ------------------
  347|      1|    if ((state->kwd_attrs = PyUnicode_InternFromString("kwd_attrs")) == NULL) return -1;
  ------------------
  |  Branch (347:9): [True: 0, False: 1]
  ------------------
  348|      1|    if ((state->kwd_patterns = PyUnicode_InternFromString("kwd_patterns")) == NULL) return -1;
  ------------------
  |  Branch (348:9): [True: 0, False: 1]
  ------------------
  349|      1|    if ((state->kwonlyargs = PyUnicode_InternFromString("kwonlyargs")) == NULL) return -1;
  ------------------
  |  Branch (349:9): [True: 0, False: 1]
  ------------------
  350|      1|    if ((state->left = PyUnicode_InternFromString("left")) == NULL) return -1;
  ------------------
  |  Branch (350:9): [True: 0, False: 1]
  ------------------
  351|      1|    if ((state->level = PyUnicode_InternFromString("level")) == NULL) return -1;
  ------------------
  |  Branch (351:9): [True: 0, False: 1]
  ------------------
  352|      1|    if ((state->lineno = PyUnicode_InternFromString("lineno")) == NULL) return -1;
  ------------------
  |  Branch (352:9): [True: 0, False: 1]
  ------------------
  353|      1|    if ((state->lower = PyUnicode_InternFromString("lower")) == NULL) return -1;
  ------------------
  |  Branch (353:9): [True: 0, False: 1]
  ------------------
  354|      1|    if ((state->module = PyUnicode_InternFromString("module")) == NULL) return -1;
  ------------------
  |  Branch (354:9): [True: 0, False: 1]
  ------------------
  355|      1|    if ((state->msg = PyUnicode_InternFromString("msg")) == NULL) return -1;
  ------------------
  |  Branch (355:9): [True: 0, False: 1]
  ------------------
  356|      1|    if ((state->name = PyUnicode_InternFromString("name")) == NULL) return -1;
  ------------------
  |  Branch (356:9): [True: 0, False: 1]
  ------------------
  357|      1|    if ((state->names = PyUnicode_InternFromString("names")) == NULL) return -1;
  ------------------
  |  Branch (357:9): [True: 0, False: 1]
  ------------------
  358|      1|    if ((state->op = PyUnicode_InternFromString("op")) == NULL) return -1;
  ------------------
  |  Branch (358:9): [True: 0, False: 1]
  ------------------
  359|      1|    if ((state->operand = PyUnicode_InternFromString("operand")) == NULL) return -1;
  ------------------
  |  Branch (359:9): [True: 0, False: 1]
  ------------------
  360|      1|    if ((state->ops = PyUnicode_InternFromString("ops")) == NULL) return -1;
  ------------------
  |  Branch (360:9): [True: 0, False: 1]
  ------------------
  361|      1|    if ((state->optional_vars = PyUnicode_InternFromString("optional_vars")) == NULL) return -1;
  ------------------
  |  Branch (361:9): [True: 0, False: 1]
  ------------------
  362|      1|    if ((state->orelse = PyUnicode_InternFromString("orelse")) == NULL) return -1;
  ------------------
  |  Branch (362:9): [True: 0, False: 1]
  ------------------
  363|      1|    if ((state->pattern = PyUnicode_InternFromString("pattern")) == NULL) return -1;
  ------------------
  |  Branch (363:9): [True: 0, False: 1]
  ------------------
  364|      1|    if ((state->patterns = PyUnicode_InternFromString("patterns")) == NULL) return -1;
  ------------------
  |  Branch (364:9): [True: 0, False: 1]
  ------------------
  365|      1|    if ((state->posonlyargs = PyUnicode_InternFromString("posonlyargs")) == NULL) return -1;
  ------------------
  |  Branch (365:9): [True: 0, False: 1]
  ------------------
  366|      1|    if ((state->rest = PyUnicode_InternFromString("rest")) == NULL) return -1;
  ------------------
  |  Branch (366:9): [True: 0, False: 1]
  ------------------
  367|      1|    if ((state->returns = PyUnicode_InternFromString("returns")) == NULL) return -1;
  ------------------
  |  Branch (367:9): [True: 0, False: 1]
  ------------------
  368|      1|    if ((state->right = PyUnicode_InternFromString("right")) == NULL) return -1;
  ------------------
  |  Branch (368:9): [True: 0, False: 1]
  ------------------
  369|      1|    if ((state->simple = PyUnicode_InternFromString("simple")) == NULL) return -1;
  ------------------
  |  Branch (369:9): [True: 0, False: 1]
  ------------------
  370|      1|    if ((state->slice = PyUnicode_InternFromString("slice")) == NULL) return -1;
  ------------------
  |  Branch (370:9): [True: 0, False: 1]
  ------------------
  371|      1|    if ((state->step = PyUnicode_InternFromString("step")) == NULL) return -1;
  ------------------
  |  Branch (371:9): [True: 0, False: 1]
  ------------------
  372|      1|    if ((state->str = PyUnicode_InternFromString("str")) == NULL) return -1;
  ------------------
  |  Branch (372:9): [True: 0, False: 1]
  ------------------
  373|      1|    if ((state->subject = PyUnicode_InternFromString("subject")) == NULL) return -1;
  ------------------
  |  Branch (373:9): [True: 0, False: 1]
  ------------------
  374|      1|    if ((state->tag = PyUnicode_InternFromString("tag")) == NULL) return -1;
  ------------------
  |  Branch (374:9): [True: 0, False: 1]
  ------------------
  375|      1|    if ((state->target = PyUnicode_InternFromString("target")) == NULL) return -1;
  ------------------
  |  Branch (375:9): [True: 0, False: 1]
  ------------------
  376|      1|    if ((state->targets = PyUnicode_InternFromString("targets")) == NULL) return -1;
  ------------------
  |  Branch (376:9): [True: 0, False: 1]
  ------------------
  377|      1|    if ((state->test = PyUnicode_InternFromString("test")) == NULL) return -1;
  ------------------
  |  Branch (377:9): [True: 0, False: 1]
  ------------------
  378|      1|    if ((state->type = PyUnicode_InternFromString("type")) == NULL) return -1;
  ------------------
  |  Branch (378:9): [True: 0, False: 1]
  ------------------
  379|      1|    if ((state->type_comment = PyUnicode_InternFromString("type_comment")) == NULL) return -1;
  ------------------
  |  Branch (379:9): [True: 0, False: 1]
  ------------------
  380|      1|    if ((state->type_ignores = PyUnicode_InternFromString("type_ignores")) == NULL) return -1;
  ------------------
  |  Branch (380:9): [True: 0, False: 1]
  ------------------
  381|      1|    if ((state->type_params = PyUnicode_InternFromString("type_params")) == NULL) return -1;
  ------------------
  |  Branch (381:9): [True: 0, False: 1]
  ------------------
  382|      1|    if ((state->upper = PyUnicode_InternFromString("upper")) == NULL) return -1;
  ------------------
  |  Branch (382:9): [True: 0, False: 1]
  ------------------
  383|      1|    if ((state->value = PyUnicode_InternFromString("value")) == NULL) return -1;
  ------------------
  |  Branch (383:9): [True: 0, False: 1]
  ------------------
  384|      1|    if ((state->values = PyUnicode_InternFromString("values")) == NULL) return -1;
  ------------------
  |  Branch (384:9): [True: 0, False: 1]
  ------------------
  385|      1|    if ((state->vararg = PyUnicode_InternFromString("vararg")) == NULL) return -1;
  ------------------
  |  Branch (385:9): [True: 0, False: 1]
  ------------------
  386|      1|    return 0;
  387|      1|};
Python-ast.c:ast_dealloc:
 1422|   414k|{
 1423|   414k|    AST_object *self = (AST_object*)op;
 1424|       |    /* bpo-31095: UnTrack is needed before calling any callbacks */
 1425|   414k|    PyTypeObject *tp = Py_TYPE(self);
  ------------------
  |  |  213|   414k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   414k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   414k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1426|   414k|    PyObject_GC_UnTrack(self);
 1427|   414k|    Py_CLEAR(self->dict);
  ------------------
  |  |  484|   414k|    do { \
  |  |  485|   414k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|   414k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|   414k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|   414k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|   414k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|   414k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 414k, False: 0]
  |  |  ------------------
  |  |  488|   414k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|   414k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|   414k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|   414k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   414k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   414k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|   414k|        } \
  |  |  491|   414k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 414k]
  |  |  ------------------
  ------------------
 1428|   414k|    freefunc free_func = PyType_GetSlot(tp, Py_tp_free);
  ------------------
  |  |   82|   414k|#define Py_tp_free 74
  ------------------
 1429|   414k|    assert(free_func != NULL);
  ------------------
  |  Branch (1429:5): [True: 414k, False: 0]
  ------------------
 1430|   414k|    free_func(self);
 1431|   414k|    Py_DECREF(tp);
  ------------------
  |  |  430|   414k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   414k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   414k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1432|   414k|}
Python-ast.c:ast_traverse:
 1436|    576|{
 1437|    576|    AST_object *self = (AST_object*)op;
 1438|    576|    Py_VISIT(Py_TYPE(self));
  ------------------
  |  |  194|    576|    do {                                                                \
  |  |  195|    576|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 576, False: 0]
  |  |  ------------------
  |  |  196|    576|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|    576|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    576|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|    576|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 576]
  |  |  ------------------
  |  |  198|    576|                return vret;                                            \
  |  |  199|    576|        }                                                               \
  |  |  200|    576|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 576]
  |  |  ------------------
  ------------------
 1439|    576|    Py_VISIT(self->dict);
  ------------------
  |  |  194|    576|    do {                                                                \
  |  |  195|    576|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 576]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|    576|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 576]
  |  |  ------------------
  ------------------
 1440|    576|    return 0;
 1441|    576|}
Python-ast.c:add_ast_fields:
 2342|      1|{
 2343|      1|    PyObject *empty_tuple;
 2344|      1|    empty_tuple = PyTuple_New(0);
 2345|      1|    if (!empty_tuple ||
  ------------------
  |  Branch (2345:9): [True: 0, False: 1]
  ------------------
 2346|      1|        PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
  ------------------
  |  Branch (2346:9): [True: 0, False: 1]
  ------------------
 2347|      1|        PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 ||
  ------------------
  |  Branch (2347:9): [True: 0, False: 1]
  ------------------
 2348|      1|        PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
  ------------------
  |  Branch (2348:9): [True: 0, False: 1]
  ------------------
 2349|      0|        Py_XDECREF(empty_tuple);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2350|      0|        return -1;
 2351|      0|    }
 2352|      1|    Py_DECREF(empty_tuple);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2353|      1|    return 0;
 2354|      1|}
Python-ast.c:make_type:
 2193|    125|{
 2194|    125|    PyObject *fnames, *result;
 2195|    125|    int i;
 2196|    125|    fnames = PyTuple_New(num_fields);
 2197|    125|    if (!fnames) return NULL;
  ------------------
  |  Branch (2197:9): [True: 0, False: 125]
  ------------------
 2198|    323|    for (i = 0; i < num_fields; i++) {
  ------------------
  |  Branch (2198:17): [True: 198, False: 125]
  ------------------
 2199|    198|        PyObject *field = PyUnicode_InternFromString(fields[i]);
 2200|    198|        if (!field) {
  ------------------
  |  Branch (2200:13): [True: 0, False: 198]
  ------------------
 2201|      0|            Py_DECREF(fnames);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2202|      0|            return NULL;
 2203|      0|        }
 2204|    198|        PyTuple_SET_ITEM(fnames, i, field);
  ------------------
  |  |   40|    198|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2205|    198|    }
 2206|    125|    result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){OOOOOOOs}",
 2207|    125|                    type, base,
 2208|    125|                    state->_fields, fnames,
 2209|    125|                    state->__match_args__, fnames,
 2210|    125|                    state->__module__,
 2211|    125|                    state->ast,
 2212|    125|                    state->__doc__, doc);
 2213|    125|    Py_DECREF(fnames);
  ------------------
  |  |  430|    125|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    125|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    125|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2214|    125|    return result;
 2215|    125|}
Python-ast.c:add_attributes:
 2219|     19|{
 2220|     19|    int i, result;
 2221|     19|    PyObject *s, *l = PyTuple_New(num_fields);
 2222|     19|    if (!l)
  ------------------
  |  Branch (2222:9): [True: 0, False: 19]
  ------------------
 2223|      0|        return -1;
 2224|     51|    for (i = 0; i < num_fields; i++) {
  ------------------
  |  Branch (2224:17): [True: 32, False: 19]
  ------------------
 2225|     32|        s = PyUnicode_InternFromString(attrs[i]);
 2226|     32|        if (!s) {
  ------------------
  |  Branch (2226:13): [True: 0, False: 32]
  ------------------
 2227|      0|            Py_DECREF(l);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2228|      0|            return -1;
 2229|      0|        }
 2230|     32|        PyTuple_SET_ITEM(l, i, s);
  ------------------
  |  |   40|     32|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2231|     32|    }
 2232|     19|    result = PyObject_SetAttr(type, state->_attributes, l);
 2233|     19|    Py_DECREF(l);
  ------------------
  |  |  430|     19|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2234|     19|    return result;
 2235|     19|}
Python-ast.c:add_ast_annotations:
  829|      1|{
  830|      1|    enum {
  831|      1|        FIELD_OPTIONAL = 1,
  832|      1|        FIELD_SEQUENCE = 2,
  833|      1|        FIELD_BUILTIN = 4,
  834|      1|    };
  835|      1|    PyTypeObject *const builtin_types[] = {
  836|      1|        &PyUnicode_Type,
  837|      1|        &PyLong_Type,
  838|      1|        &PyBaseObject_Type,
  839|      1|    };
  840|       |    // Offsets refer to this interpreter's AST state, not global types.
  841|      1|    static_assert(sizeof(struct ast_state) <= UINT16_MAX,
  842|      1|                  "ast_state offsets must fit in uint16_t");
  843|      1|    static const struct {
  844|      1|        uint16_t name_offset;
  845|      1|        uint16_t type_offset;  // An index into builtin_types for builtins.
  846|      1|        uint8_t flags;
  847|      1|    } fields[] = {
  848|      1|        {offsetof(struct ast_state, body),
  849|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  850|      1|        {offsetof(struct ast_state, type_ignores),
  851|      1|         offsetof(struct ast_state, type_ignore_type), FIELD_SEQUENCE},
  852|      1|        {offsetof(struct ast_state, body),
  853|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  854|      1|        {offsetof(struct ast_state, body),
  855|      1|         offsetof(struct ast_state, expr_type), 0},
  856|      1|        {offsetof(struct ast_state, argtypes),
  857|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  858|      1|        {offsetof(struct ast_state, returns),
  859|      1|         offsetof(struct ast_state, expr_type), 0},
  860|      1|        {offsetof(struct ast_state, name),
  861|      1|         0, FIELD_BUILTIN},
  862|      1|        {offsetof(struct ast_state, args),
  863|      1|         offsetof(struct ast_state, arguments_type), 0},
  864|      1|        {offsetof(struct ast_state, body),
  865|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  866|      1|        {offsetof(struct ast_state, decorator_list),
  867|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  868|      1|        {offsetof(struct ast_state, returns),
  869|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
  870|      1|        {offsetof(struct ast_state, type_comment),
  871|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  872|      1|        {offsetof(struct ast_state, type_params),
  873|      1|         offsetof(struct ast_state, type_param_type), FIELD_SEQUENCE},
  874|      1|        {offsetof(struct ast_state, name),
  875|      1|         0, FIELD_BUILTIN},
  876|      1|        {offsetof(struct ast_state, args),
  877|      1|         offsetof(struct ast_state, arguments_type), 0},
  878|      1|        {offsetof(struct ast_state, body),
  879|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  880|      1|        {offsetof(struct ast_state, decorator_list),
  881|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  882|      1|        {offsetof(struct ast_state, returns),
  883|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
  884|      1|        {offsetof(struct ast_state, type_comment),
  885|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  886|      1|        {offsetof(struct ast_state, type_params),
  887|      1|         offsetof(struct ast_state, type_param_type), FIELD_SEQUENCE},
  888|      1|        {offsetof(struct ast_state, name),
  889|      1|         0, FIELD_BUILTIN},
  890|      1|        {offsetof(struct ast_state, bases),
  891|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  892|      1|        {offsetof(struct ast_state, keywords),
  893|      1|         offsetof(struct ast_state, keyword_type), FIELD_SEQUENCE},
  894|      1|        {offsetof(struct ast_state, body),
  895|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  896|      1|        {offsetof(struct ast_state, decorator_list),
  897|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  898|      1|        {offsetof(struct ast_state, type_params),
  899|      1|         offsetof(struct ast_state, type_param_type), FIELD_SEQUENCE},
  900|      1|        {offsetof(struct ast_state, value),
  901|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
  902|      1|        {offsetof(struct ast_state, targets),
  903|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  904|      1|        {offsetof(struct ast_state, targets),
  905|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
  906|      1|        {offsetof(struct ast_state, value),
  907|      1|         offsetof(struct ast_state, expr_type), 0},
  908|      1|        {offsetof(struct ast_state, type_comment),
  909|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  910|      1|        {offsetof(struct ast_state, name),
  911|      1|         offsetof(struct ast_state, expr_type), 0},
  912|      1|        {offsetof(struct ast_state, type_params),
  913|      1|         offsetof(struct ast_state, type_param_type), FIELD_SEQUENCE},
  914|      1|        {offsetof(struct ast_state, value),
  915|      1|         offsetof(struct ast_state, expr_type), 0},
  916|      1|        {offsetof(struct ast_state, target),
  917|      1|         offsetof(struct ast_state, expr_type), 0},
  918|      1|        {offsetof(struct ast_state, op),
  919|      1|         offsetof(struct ast_state, operator_type), 0},
  920|      1|        {offsetof(struct ast_state, value),
  921|      1|         offsetof(struct ast_state, expr_type), 0},
  922|      1|        {offsetof(struct ast_state, target),
  923|      1|         offsetof(struct ast_state, expr_type), 0},
  924|      1|        {offsetof(struct ast_state, annotation),
  925|      1|         offsetof(struct ast_state, expr_type), 0},
  926|      1|        {offsetof(struct ast_state, value),
  927|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
  928|      1|        {offsetof(struct ast_state, simple),
  929|      1|         1, FIELD_BUILTIN},
  930|      1|        {offsetof(struct ast_state, target),
  931|      1|         offsetof(struct ast_state, expr_type), 0},
  932|      1|        {offsetof(struct ast_state, iter),
  933|      1|         offsetof(struct ast_state, expr_type), 0},
  934|      1|        {offsetof(struct ast_state, body),
  935|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  936|      1|        {offsetof(struct ast_state, orelse),
  937|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  938|      1|        {offsetof(struct ast_state, type_comment),
  939|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  940|      1|        {offsetof(struct ast_state, target),
  941|      1|         offsetof(struct ast_state, expr_type), 0},
  942|      1|        {offsetof(struct ast_state, iter),
  943|      1|         offsetof(struct ast_state, expr_type), 0},
  944|      1|        {offsetof(struct ast_state, body),
  945|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  946|      1|        {offsetof(struct ast_state, orelse),
  947|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  948|      1|        {offsetof(struct ast_state, type_comment),
  949|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  950|      1|        {offsetof(struct ast_state, test),
  951|      1|         offsetof(struct ast_state, expr_type), 0},
  952|      1|        {offsetof(struct ast_state, body),
  953|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  954|      1|        {offsetof(struct ast_state, orelse),
  955|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  956|      1|        {offsetof(struct ast_state, test),
  957|      1|         offsetof(struct ast_state, expr_type), 0},
  958|      1|        {offsetof(struct ast_state, body),
  959|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  960|      1|        {offsetof(struct ast_state, orelse),
  961|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  962|      1|        {offsetof(struct ast_state, items),
  963|      1|         offsetof(struct ast_state, withitem_type), FIELD_SEQUENCE},
  964|      1|        {offsetof(struct ast_state, body),
  965|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  966|      1|        {offsetof(struct ast_state, type_comment),
  967|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  968|      1|        {offsetof(struct ast_state, items),
  969|      1|         offsetof(struct ast_state, withitem_type), FIELD_SEQUENCE},
  970|      1|        {offsetof(struct ast_state, body),
  971|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  972|      1|        {offsetof(struct ast_state, type_comment),
  973|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
  974|      1|        {offsetof(struct ast_state, subject),
  975|      1|         offsetof(struct ast_state, expr_type), 0},
  976|      1|        {offsetof(struct ast_state, cases),
  977|      1|         offsetof(struct ast_state, match_case_type), FIELD_SEQUENCE},
  978|      1|        {offsetof(struct ast_state, exc),
  979|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
  980|      1|        {offsetof(struct ast_state, cause),
  981|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
  982|      1|        {offsetof(struct ast_state, body),
  983|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  984|      1|        {offsetof(struct ast_state, handlers),
  985|      1|         offsetof(struct ast_state, excepthandler_type), FIELD_SEQUENCE},
  986|      1|        {offsetof(struct ast_state, orelse),
  987|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  988|      1|        {offsetof(struct ast_state, finalbody),
  989|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  990|      1|        {offsetof(struct ast_state, body),
  991|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  992|      1|        {offsetof(struct ast_state, handlers),
  993|      1|         offsetof(struct ast_state, excepthandler_type), FIELD_SEQUENCE},
  994|      1|        {offsetof(struct ast_state, orelse),
  995|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  996|      1|        {offsetof(struct ast_state, finalbody),
  997|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
  998|      1|        {offsetof(struct ast_state, test),
  999|      1|         offsetof(struct ast_state, expr_type), 0},
 1000|      1|        {offsetof(struct ast_state, msg),
 1001|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1002|      1|        {offsetof(struct ast_state, names),
 1003|      1|         offsetof(struct ast_state, alias_type), FIELD_SEQUENCE},
 1004|      1|        {offsetof(struct ast_state, is_lazy),
 1005|      1|         1, FIELD_OPTIONAL | FIELD_BUILTIN},
 1006|      1|        {offsetof(struct ast_state, module),
 1007|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1008|      1|        {offsetof(struct ast_state, names),
 1009|      1|         offsetof(struct ast_state, alias_type), FIELD_SEQUENCE},
 1010|      1|        {offsetof(struct ast_state, level),
 1011|      1|         1, FIELD_OPTIONAL | FIELD_BUILTIN},
 1012|      1|        {offsetof(struct ast_state, is_lazy),
 1013|      1|         1, FIELD_OPTIONAL | FIELD_BUILTIN},
 1014|      1|        {offsetof(struct ast_state, names),
 1015|      1|         0, FIELD_SEQUENCE | FIELD_BUILTIN},
 1016|      1|        {offsetof(struct ast_state, names),
 1017|      1|         0, FIELD_SEQUENCE | FIELD_BUILTIN},
 1018|      1|        {offsetof(struct ast_state, value),
 1019|      1|         offsetof(struct ast_state, expr_type), 0},
 1020|      1|        {offsetof(struct ast_state, op),
 1021|      1|         offsetof(struct ast_state, boolop_type), 0},
 1022|      1|        {offsetof(struct ast_state, values),
 1023|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1024|      1|        {offsetof(struct ast_state, target),
 1025|      1|         offsetof(struct ast_state, expr_type), 0},
 1026|      1|        {offsetof(struct ast_state, value),
 1027|      1|         offsetof(struct ast_state, expr_type), 0},
 1028|      1|        {offsetof(struct ast_state, left),
 1029|      1|         offsetof(struct ast_state, expr_type), 0},
 1030|      1|        {offsetof(struct ast_state, op),
 1031|      1|         offsetof(struct ast_state, operator_type), 0},
 1032|      1|        {offsetof(struct ast_state, right),
 1033|      1|         offsetof(struct ast_state, expr_type), 0},
 1034|      1|        {offsetof(struct ast_state, op),
 1035|      1|         offsetof(struct ast_state, unaryop_type), 0},
 1036|      1|        {offsetof(struct ast_state, operand),
 1037|      1|         offsetof(struct ast_state, expr_type), 0},
 1038|      1|        {offsetof(struct ast_state, args),
 1039|      1|         offsetof(struct ast_state, arguments_type), 0},
 1040|      1|        {offsetof(struct ast_state, body),
 1041|      1|         offsetof(struct ast_state, expr_type), 0},
 1042|      1|        {offsetof(struct ast_state, test),
 1043|      1|         offsetof(struct ast_state, expr_type), 0},
 1044|      1|        {offsetof(struct ast_state, body),
 1045|      1|         offsetof(struct ast_state, expr_type), 0},
 1046|      1|        {offsetof(struct ast_state, orelse),
 1047|      1|         offsetof(struct ast_state, expr_type), 0},
 1048|      1|        {offsetof(struct ast_state, keys),
 1049|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1050|      1|        {offsetof(struct ast_state, values),
 1051|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1052|      1|        {offsetof(struct ast_state, elts),
 1053|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1054|      1|        {offsetof(struct ast_state, elt),
 1055|      1|         offsetof(struct ast_state, expr_type), 0},
 1056|      1|        {offsetof(struct ast_state, generators),
 1057|      1|         offsetof(struct ast_state, comprehension_type), FIELD_SEQUENCE},
 1058|      1|        {offsetof(struct ast_state, elt),
 1059|      1|         offsetof(struct ast_state, expr_type), 0},
 1060|      1|        {offsetof(struct ast_state, generators),
 1061|      1|         offsetof(struct ast_state, comprehension_type), FIELD_SEQUENCE},
 1062|      1|        {offsetof(struct ast_state, key),
 1063|      1|         offsetof(struct ast_state, expr_type), 0},
 1064|      1|        {offsetof(struct ast_state, value),
 1065|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1066|      1|        {offsetof(struct ast_state, generators),
 1067|      1|         offsetof(struct ast_state, comprehension_type), FIELD_SEQUENCE},
 1068|      1|        {offsetof(struct ast_state, elt),
 1069|      1|         offsetof(struct ast_state, expr_type), 0},
 1070|      1|        {offsetof(struct ast_state, generators),
 1071|      1|         offsetof(struct ast_state, comprehension_type), FIELD_SEQUENCE},
 1072|      1|        {offsetof(struct ast_state, value),
 1073|      1|         offsetof(struct ast_state, expr_type), 0},
 1074|      1|        {offsetof(struct ast_state, value),
 1075|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1076|      1|        {offsetof(struct ast_state, value),
 1077|      1|         offsetof(struct ast_state, expr_type), 0},
 1078|      1|        {offsetof(struct ast_state, left),
 1079|      1|         offsetof(struct ast_state, expr_type), 0},
 1080|      1|        {offsetof(struct ast_state, ops),
 1081|      1|         offsetof(struct ast_state, cmpop_type), FIELD_SEQUENCE},
 1082|      1|        {offsetof(struct ast_state, comparators),
 1083|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1084|      1|        {offsetof(struct ast_state, func),
 1085|      1|         offsetof(struct ast_state, expr_type), 0},
 1086|      1|        {offsetof(struct ast_state, args),
 1087|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1088|      1|        {offsetof(struct ast_state, keywords),
 1089|      1|         offsetof(struct ast_state, keyword_type), FIELD_SEQUENCE},
 1090|      1|        {offsetof(struct ast_state, value),
 1091|      1|         offsetof(struct ast_state, expr_type), 0},
 1092|      1|        {offsetof(struct ast_state, conversion),
 1093|      1|         1, FIELD_BUILTIN},
 1094|      1|        {offsetof(struct ast_state, format_spec),
 1095|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1096|      1|        {offsetof(struct ast_state, value),
 1097|      1|         offsetof(struct ast_state, expr_type), 0},
 1098|      1|        {offsetof(struct ast_state, str),
 1099|      1|         2, FIELD_BUILTIN},
 1100|      1|        {offsetof(struct ast_state, conversion),
 1101|      1|         1, FIELD_BUILTIN},
 1102|      1|        {offsetof(struct ast_state, format_spec),
 1103|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1104|      1|        {offsetof(struct ast_state, values),
 1105|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1106|      1|        {offsetof(struct ast_state, values),
 1107|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1108|      1|        {offsetof(struct ast_state, value),
 1109|      1|         2, FIELD_BUILTIN},
 1110|      1|        {offsetof(struct ast_state, kind),
 1111|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1112|      1|        {offsetof(struct ast_state, value),
 1113|      1|         offsetof(struct ast_state, expr_type), 0},
 1114|      1|        {offsetof(struct ast_state, attr),
 1115|      1|         0, FIELD_BUILTIN},
 1116|      1|        {offsetof(struct ast_state, ctx),
 1117|      1|         offsetof(struct ast_state, expr_context_type), 0},
 1118|      1|        {offsetof(struct ast_state, value),
 1119|      1|         offsetof(struct ast_state, expr_type), 0},
 1120|      1|        {offsetof(struct ast_state, slice),
 1121|      1|         offsetof(struct ast_state, expr_type), 0},
 1122|      1|        {offsetof(struct ast_state, ctx),
 1123|      1|         offsetof(struct ast_state, expr_context_type), 0},
 1124|      1|        {offsetof(struct ast_state, value),
 1125|      1|         offsetof(struct ast_state, expr_type), 0},
 1126|      1|        {offsetof(struct ast_state, ctx),
 1127|      1|         offsetof(struct ast_state, expr_context_type), 0},
 1128|      1|        {offsetof(struct ast_state, id),
 1129|      1|         0, FIELD_BUILTIN},
 1130|      1|        {offsetof(struct ast_state, ctx),
 1131|      1|         offsetof(struct ast_state, expr_context_type), 0},
 1132|      1|        {offsetof(struct ast_state, elts),
 1133|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1134|      1|        {offsetof(struct ast_state, ctx),
 1135|      1|         offsetof(struct ast_state, expr_context_type), 0},
 1136|      1|        {offsetof(struct ast_state, elts),
 1137|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1138|      1|        {offsetof(struct ast_state, ctx),
 1139|      1|         offsetof(struct ast_state, expr_context_type), 0},
 1140|      1|        {offsetof(struct ast_state, lower),
 1141|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1142|      1|        {offsetof(struct ast_state, upper),
 1143|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1144|      1|        {offsetof(struct ast_state, step),
 1145|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1146|      1|        {offsetof(struct ast_state, target),
 1147|      1|         offsetof(struct ast_state, expr_type), 0},
 1148|      1|        {offsetof(struct ast_state, iter),
 1149|      1|         offsetof(struct ast_state, expr_type), 0},
 1150|      1|        {offsetof(struct ast_state, ifs),
 1151|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1152|      1|        {offsetof(struct ast_state, is_async),
 1153|      1|         1, FIELD_BUILTIN},
 1154|      1|        {offsetof(struct ast_state, type),
 1155|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1156|      1|        {offsetof(struct ast_state, name),
 1157|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1158|      1|        {offsetof(struct ast_state, body),
 1159|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
 1160|      1|        {offsetof(struct ast_state, posonlyargs),
 1161|      1|         offsetof(struct ast_state, arg_type), FIELD_SEQUENCE},
 1162|      1|        {offsetof(struct ast_state, args),
 1163|      1|         offsetof(struct ast_state, arg_type), FIELD_SEQUENCE},
 1164|      1|        {offsetof(struct ast_state, vararg),
 1165|      1|         offsetof(struct ast_state, arg_type), FIELD_OPTIONAL},
 1166|      1|        {offsetof(struct ast_state, kwonlyargs),
 1167|      1|         offsetof(struct ast_state, arg_type), FIELD_SEQUENCE},
 1168|      1|        {offsetof(struct ast_state, kw_defaults),
 1169|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1170|      1|        {offsetof(struct ast_state, kwarg),
 1171|      1|         offsetof(struct ast_state, arg_type), FIELD_OPTIONAL},
 1172|      1|        {offsetof(struct ast_state, defaults),
 1173|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1174|      1|        {offsetof(struct ast_state, arg),
 1175|      1|         0, FIELD_BUILTIN},
 1176|      1|        {offsetof(struct ast_state, annotation),
 1177|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1178|      1|        {offsetof(struct ast_state, type_comment),
 1179|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1180|      1|        {offsetof(struct ast_state, arg),
 1181|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1182|      1|        {offsetof(struct ast_state, value),
 1183|      1|         offsetof(struct ast_state, expr_type), 0},
 1184|      1|        {offsetof(struct ast_state, name),
 1185|      1|         0, FIELD_BUILTIN},
 1186|      1|        {offsetof(struct ast_state, asname),
 1187|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1188|      1|        {offsetof(struct ast_state, context_expr),
 1189|      1|         offsetof(struct ast_state, expr_type), 0},
 1190|      1|        {offsetof(struct ast_state, optional_vars),
 1191|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1192|      1|        {offsetof(struct ast_state, pattern),
 1193|      1|         offsetof(struct ast_state, pattern_type), 0},
 1194|      1|        {offsetof(struct ast_state, guard),
 1195|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1196|      1|        {offsetof(struct ast_state, body),
 1197|      1|         offsetof(struct ast_state, stmt_type), FIELD_SEQUENCE},
 1198|      1|        {offsetof(struct ast_state, value),
 1199|      1|         offsetof(struct ast_state, expr_type), 0},
 1200|      1|        {offsetof(struct ast_state, value),
 1201|      1|         2, FIELD_BUILTIN},
 1202|      1|        {offsetof(struct ast_state, patterns),
 1203|      1|         offsetof(struct ast_state, pattern_type), FIELD_SEQUENCE},
 1204|      1|        {offsetof(struct ast_state, keys),
 1205|      1|         offsetof(struct ast_state, expr_type), FIELD_SEQUENCE},
 1206|      1|        {offsetof(struct ast_state, patterns),
 1207|      1|         offsetof(struct ast_state, pattern_type), FIELD_SEQUENCE},
 1208|      1|        {offsetof(struct ast_state, rest),
 1209|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1210|      1|        {offsetof(struct ast_state, cls),
 1211|      1|         offsetof(struct ast_state, expr_type), 0},
 1212|      1|        {offsetof(struct ast_state, patterns),
 1213|      1|         offsetof(struct ast_state, pattern_type), FIELD_SEQUENCE},
 1214|      1|        {offsetof(struct ast_state, kwd_attrs),
 1215|      1|         0, FIELD_SEQUENCE | FIELD_BUILTIN},
 1216|      1|        {offsetof(struct ast_state, kwd_patterns),
 1217|      1|         offsetof(struct ast_state, pattern_type), FIELD_SEQUENCE},
 1218|      1|        {offsetof(struct ast_state, name),
 1219|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1220|      1|        {offsetof(struct ast_state, pattern),
 1221|      1|         offsetof(struct ast_state, pattern_type), FIELD_OPTIONAL},
 1222|      1|        {offsetof(struct ast_state, name),
 1223|      1|         0, FIELD_OPTIONAL | FIELD_BUILTIN},
 1224|      1|        {offsetof(struct ast_state, patterns),
 1225|      1|         offsetof(struct ast_state, pattern_type), FIELD_SEQUENCE},
 1226|      1|        {offsetof(struct ast_state, lineno),
 1227|      1|         1, FIELD_BUILTIN},
 1228|      1|        {offsetof(struct ast_state, tag),
 1229|      1|         0, FIELD_BUILTIN},
 1230|      1|        {offsetof(struct ast_state, name),
 1231|      1|         0, FIELD_BUILTIN},
 1232|      1|        {offsetof(struct ast_state, bound),
 1233|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1234|      1|        {offsetof(struct ast_state, default_value),
 1235|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1236|      1|        {offsetof(struct ast_state, name),
 1237|      1|         0, FIELD_BUILTIN},
 1238|      1|        {offsetof(struct ast_state, default_value),
 1239|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1240|      1|        {offsetof(struct ast_state, name),
 1241|      1|         0, FIELD_BUILTIN},
 1242|      1|        {offsetof(struct ast_state, default_value),
 1243|      1|         offsetof(struct ast_state, expr_type), FIELD_OPTIONAL},
 1244|      1|    };
 1245|      1|    static const struct {
 1246|      1|        uint16_t type_offset;
 1247|      1|        uint16_t first_field;
 1248|      1|        uint16_t nfields;
 1249|      1|    } nodes[] = {
 1250|      1|        {offsetof(struct ast_state, Module_type), 0, 2},
 1251|      1|        {offsetof(struct ast_state, Interactive_type), 2, 1},
 1252|      1|        {offsetof(struct ast_state, Expression_type), 3, 1},
 1253|      1|        {offsetof(struct ast_state, FunctionType_type), 4, 2},
 1254|      1|        {offsetof(struct ast_state, FunctionDef_type), 6, 7},
 1255|      1|        {offsetof(struct ast_state, AsyncFunctionDef_type), 13, 7},
 1256|      1|        {offsetof(struct ast_state, ClassDef_type), 20, 6},
 1257|      1|        {offsetof(struct ast_state, Return_type), 26, 1},
 1258|      1|        {offsetof(struct ast_state, Delete_type), 27, 1},
 1259|      1|        {offsetof(struct ast_state, Assign_type), 28, 3},
 1260|      1|        {offsetof(struct ast_state, TypeAlias_type), 31, 3},
 1261|      1|        {offsetof(struct ast_state, AugAssign_type), 34, 3},
 1262|      1|        {offsetof(struct ast_state, AnnAssign_type), 37, 4},
 1263|      1|        {offsetof(struct ast_state, For_type), 41, 5},
 1264|      1|        {offsetof(struct ast_state, AsyncFor_type), 46, 5},
 1265|      1|        {offsetof(struct ast_state, While_type), 51, 3},
 1266|      1|        {offsetof(struct ast_state, If_type), 54, 3},
 1267|      1|        {offsetof(struct ast_state, With_type), 57, 3},
 1268|      1|        {offsetof(struct ast_state, AsyncWith_type), 60, 3},
 1269|      1|        {offsetof(struct ast_state, Match_type), 63, 2},
 1270|      1|        {offsetof(struct ast_state, Raise_type), 65, 2},
 1271|      1|        {offsetof(struct ast_state, Try_type), 67, 4},
 1272|      1|        {offsetof(struct ast_state, TryStar_type), 71, 4},
 1273|      1|        {offsetof(struct ast_state, Assert_type), 75, 2},
 1274|      1|        {offsetof(struct ast_state, Import_type), 77, 2},
 1275|      1|        {offsetof(struct ast_state, ImportFrom_type), 79, 4},
 1276|      1|        {offsetof(struct ast_state, Global_type), 83, 1},
 1277|      1|        {offsetof(struct ast_state, Nonlocal_type), 84, 1},
 1278|      1|        {offsetof(struct ast_state, Expr_type), 85, 1},
 1279|      1|        {offsetof(struct ast_state, Pass_type), 86, 0},
 1280|      1|        {offsetof(struct ast_state, Break_type), 86, 0},
 1281|      1|        {offsetof(struct ast_state, Continue_type), 86, 0},
 1282|      1|        {offsetof(struct ast_state, BoolOp_type), 86, 2},
 1283|      1|        {offsetof(struct ast_state, NamedExpr_type), 88, 2},
 1284|      1|        {offsetof(struct ast_state, BinOp_type), 90, 3},
 1285|      1|        {offsetof(struct ast_state, UnaryOp_type), 93, 2},
 1286|      1|        {offsetof(struct ast_state, Lambda_type), 95, 2},
 1287|      1|        {offsetof(struct ast_state, IfExp_type), 97, 3},
 1288|      1|        {offsetof(struct ast_state, Dict_type), 100, 2},
 1289|      1|        {offsetof(struct ast_state, Set_type), 102, 1},
 1290|      1|        {offsetof(struct ast_state, ListComp_type), 103, 2},
 1291|      1|        {offsetof(struct ast_state, SetComp_type), 105, 2},
 1292|      1|        {offsetof(struct ast_state, DictComp_type), 107, 3},
 1293|      1|        {offsetof(struct ast_state, GeneratorExp_type), 110, 2},
 1294|      1|        {offsetof(struct ast_state, Await_type), 112, 1},
 1295|      1|        {offsetof(struct ast_state, Yield_type), 113, 1},
 1296|      1|        {offsetof(struct ast_state, YieldFrom_type), 114, 1},
 1297|      1|        {offsetof(struct ast_state, Compare_type), 115, 3},
 1298|      1|        {offsetof(struct ast_state, Call_type), 118, 3},
 1299|      1|        {offsetof(struct ast_state, FormattedValue_type), 121, 3},
 1300|      1|        {offsetof(struct ast_state, Interpolation_type), 124, 4},
 1301|      1|        {offsetof(struct ast_state, JoinedStr_type), 128, 1},
 1302|      1|        {offsetof(struct ast_state, TemplateStr_type), 129, 1},
 1303|      1|        {offsetof(struct ast_state, Constant_type), 130, 2},
 1304|      1|        {offsetof(struct ast_state, Attribute_type), 132, 3},
 1305|      1|        {offsetof(struct ast_state, Subscript_type), 135, 3},
 1306|      1|        {offsetof(struct ast_state, Starred_type), 138, 2},
 1307|      1|        {offsetof(struct ast_state, Name_type), 140, 2},
 1308|      1|        {offsetof(struct ast_state, List_type), 142, 2},
 1309|      1|        {offsetof(struct ast_state, Tuple_type), 144, 2},
 1310|      1|        {offsetof(struct ast_state, Slice_type), 146, 3},
 1311|      1|        {offsetof(struct ast_state, Load_type), 149, 0},
 1312|      1|        {offsetof(struct ast_state, Store_type), 149, 0},
 1313|      1|        {offsetof(struct ast_state, Del_type), 149, 0},
 1314|      1|        {offsetof(struct ast_state, And_type), 149, 0},
 1315|      1|        {offsetof(struct ast_state, Or_type), 149, 0},
 1316|      1|        {offsetof(struct ast_state, Add_type), 149, 0},
 1317|      1|        {offsetof(struct ast_state, Sub_type), 149, 0},
 1318|      1|        {offsetof(struct ast_state, Mult_type), 149, 0},
 1319|      1|        {offsetof(struct ast_state, MatMult_type), 149, 0},
 1320|      1|        {offsetof(struct ast_state, Div_type), 149, 0},
 1321|      1|        {offsetof(struct ast_state, Mod_type), 149, 0},
 1322|      1|        {offsetof(struct ast_state, Pow_type), 149, 0},
 1323|      1|        {offsetof(struct ast_state, LShift_type), 149, 0},
 1324|      1|        {offsetof(struct ast_state, RShift_type), 149, 0},
 1325|      1|        {offsetof(struct ast_state, BitOr_type), 149, 0},
 1326|      1|        {offsetof(struct ast_state, BitXor_type), 149, 0},
 1327|      1|        {offsetof(struct ast_state, BitAnd_type), 149, 0},
 1328|      1|        {offsetof(struct ast_state, FloorDiv_type), 149, 0},
 1329|      1|        {offsetof(struct ast_state, Invert_type), 149, 0},
 1330|      1|        {offsetof(struct ast_state, Not_type), 149, 0},
 1331|      1|        {offsetof(struct ast_state, UAdd_type), 149, 0},
 1332|      1|        {offsetof(struct ast_state, USub_type), 149, 0},
 1333|      1|        {offsetof(struct ast_state, Eq_type), 149, 0},
 1334|      1|        {offsetof(struct ast_state, NotEq_type), 149, 0},
 1335|      1|        {offsetof(struct ast_state, Lt_type), 149, 0},
 1336|      1|        {offsetof(struct ast_state, LtE_type), 149, 0},
 1337|      1|        {offsetof(struct ast_state, Gt_type), 149, 0},
 1338|      1|        {offsetof(struct ast_state, GtE_type), 149, 0},
 1339|      1|        {offsetof(struct ast_state, Is_type), 149, 0},
 1340|      1|        {offsetof(struct ast_state, IsNot_type), 149, 0},
 1341|      1|        {offsetof(struct ast_state, In_type), 149, 0},
 1342|      1|        {offsetof(struct ast_state, NotIn_type), 149, 0},
 1343|      1|        {offsetof(struct ast_state, comprehension_type), 149, 4},
 1344|      1|        {offsetof(struct ast_state, ExceptHandler_type), 153, 3},
 1345|      1|        {offsetof(struct ast_state, arguments_type), 156, 7},
 1346|      1|        {offsetof(struct ast_state, arg_type), 163, 3},
 1347|      1|        {offsetof(struct ast_state, keyword_type), 166, 2},
 1348|      1|        {offsetof(struct ast_state, alias_type), 168, 2},
 1349|      1|        {offsetof(struct ast_state, withitem_type), 170, 2},
 1350|      1|        {offsetof(struct ast_state, match_case_type), 172, 3},
 1351|      1|        {offsetof(struct ast_state, MatchValue_type), 175, 1},
 1352|      1|        {offsetof(struct ast_state, MatchSingleton_type), 176, 1},
 1353|      1|        {offsetof(struct ast_state, MatchSequence_type), 177, 1},
 1354|      1|        {offsetof(struct ast_state, MatchMapping_type), 178, 3},
 1355|      1|        {offsetof(struct ast_state, MatchClass_type), 181, 4},
 1356|      1|        {offsetof(struct ast_state, MatchStar_type), 185, 1},
 1357|      1|        {offsetof(struct ast_state, MatchAs_type), 186, 2},
 1358|      1|        {offsetof(struct ast_state, MatchOr_type), 188, 1},
 1359|      1|        {offsetof(struct ast_state, TypeIgnore_type), 189, 2},
 1360|      1|        {offsetof(struct ast_state, TypeVar_type), 191, 3},
 1361|      1|        {offsetof(struct ast_state, ParamSpec_type), 194, 2},
 1362|      1|        {offsetof(struct ast_state, TypeVarTuple_type), 196, 2},
 1363|      1|    };
 1364|      1|    char *base = (char *)state;
 1365|      1|    PyObject *annotations = NULL;
 1366|    114|    for (size_t i = 0; i < Py_ARRAY_LENGTH(nodes); i++) {
  ------------------
  |  |  221|    114|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (1366:24): [True: 113, False: 1]
  ------------------
 1367|    113|        annotations = PyDict_New();
 1368|    113|        if (annotations == NULL) {
  ------------------
  |  Branch (1368:13): [True: 0, False: 113]
  ------------------
 1369|      0|            goto error;
 1370|      0|        }
 1371|    113|        size_t end = nodes[i].first_field + nodes[i].nfields;
 1372|    311|        for (size_t j = nodes[i].first_field; j < end; j++) {
  ------------------
  |  Branch (1372:47): [True: 198, False: 113]
  ------------------
 1373|    198|            PyObject *name = *(PyObject **)(base + fields[j].name_offset);
 1374|    198|            PyObject *type;
 1375|    198|            if (fields[j].flags & FIELD_BUILTIN) {
  ------------------
  |  Branch (1375:17): [True: 41, False: 157]
  ------------------
 1376|     41|                type = (PyObject *)builtin_types[fields[j].type_offset];
 1377|     41|            }
 1378|    157|            else {
 1379|    157|                type = *(PyObject **)(base + fields[j].type_offset);
 1380|    157|            }
 1381|    198|            if (fields[j].flags & FIELD_OPTIONAL) {
  ------------------
  |  Branch (1381:17): [True: 44, False: 154]
  ------------------
 1382|     44|                type = _Py_union_type_or(type, Py_None);
  ------------------
  |  |  616|     44|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1383|     44|            }
 1384|    154|            else if (fields[j].flags & FIELD_SEQUENCE) {
  ------------------
  |  Branch (1384:22): [True: 74, False: 80]
  ------------------
 1385|     74|                type = Py_GenericAlias((PyObject *)&PyList_Type, type);
 1386|     74|            }
 1387|     80|            else {
 1388|     80|                Py_INCREF(type);
  ------------------
  |  |  310|     80|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     80|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     80|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1389|     80|            }
 1390|    198|            if (type == NULL) {
  ------------------
  |  Branch (1390:17): [True: 0, False: 198]
  ------------------
 1391|      0|                goto error;
 1392|      0|            }
 1393|    198|            int res = PyDict_SetItem(annotations, name, type);
 1394|    198|            Py_DECREF(type);
  ------------------
  |  |  430|    198|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1395|    198|            if (res < 0) {
  ------------------
  |  Branch (1395:17): [True: 0, False: 198]
  ------------------
 1396|      0|                goto error;
 1397|      0|            }
 1398|    198|        }
 1399|    113|        PyObject *node = *(PyObject **)(base + nodes[i].type_offset);
 1400|    113|        if (PyObject_SetAttrString(node, "_field_types", annotations) < 0 ||
  ------------------
  |  Branch (1400:13): [True: 0, False: 113]
  ------------------
 1401|    113|            PyObject_SetAttrString(node, "__annotations__", annotations) < 0)
  ------------------
  |  Branch (1401:13): [True: 0, False: 113]
  ------------------
 1402|      0|        {
 1403|      0|            goto error;
 1404|      0|        }
 1405|    113|        Py_CLEAR(annotations);
  ------------------
  |  |  484|    113|    do { \
  |  |  485|    113|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    113|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    113|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    113|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    113|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    113|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 113, False: 0]
  |  |  ------------------
  |  |  488|    113|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    113|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    113|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    113|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    113|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    113|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    113|        } \
  |  |  491|    113|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 113]
  |  |  ------------------
  ------------------
 1406|    113|    }
 1407|      1|    return 1;
 1408|      0|error:
 1409|      0|    Py_XDECREF(annotations);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1410|      0|    return 0;
 1411|      1|}
Python-ast.c:ast2obj_mod:
 5119|  1.89k|{
 5120|  1.89k|    mod_ty o = (mod_ty)_o;
 5121|  1.89k|    PyObject *result = NULL, *value = NULL;
 5122|  1.89k|    PyTypeObject *tp;
 5123|  1.89k|    if (!o) {
  ------------------
  |  Branch (5123:9): [True: 0, False: 1.89k]
  ------------------
 5124|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5125|      0|    }
 5126|  1.89k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (5126:9): [True: 0, False: 1.89k]
  ------------------
 5127|      0|        return NULL;
 5128|      0|    }
 5129|  1.89k|    switch (o->kind) {
  ------------------
  |  Branch (5129:13): [True: 1.89k, False: 0]
  ------------------
 5130|  1.31k|    case Module_kind:
  ------------------
  |  Branch (5130:5): [True: 1.31k, False: 580]
  ------------------
 5131|  1.31k|        tp = (PyTypeObject *)state->Module_type;
 5132|  1.31k|        result = PyType_GenericNew(tp, NULL, NULL);
 5133|  1.31k|        if (!result) goto failed;
  ------------------
  |  Branch (5133:13): [True: 0, False: 1.31k]
  ------------------
 5134|  1.31k|        value = ast2obj_list(state, (asdl_seq*)o->v.Module.body, ast2obj_stmt);
 5135|  1.31k|        if (!value) goto failed;
  ------------------
  |  Branch (5135:13): [True: 0, False: 1.31k]
  ------------------
 5136|  1.31k|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5136:13): [True: 0, False: 1.31k]
  ------------------
 5137|      0|            goto failed;
 5138|  1.31k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.31k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5139|  1.31k|        value = ast2obj_list(state, (asdl_seq*)o->v.Module.type_ignores,
 5140|  1.31k|                             ast2obj_type_ignore);
 5141|  1.31k|        if (!value) goto failed;
  ------------------
  |  Branch (5141:13): [True: 0, False: 1.31k]
  ------------------
 5142|  1.31k|        if (PyObject_SetAttr(result, state->type_ignores, value) == -1)
  ------------------
  |  Branch (5142:13): [True: 0, False: 1.31k]
  ------------------
 5143|      0|            goto failed;
 5144|  1.31k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.31k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5145|  1.31k|        break;
 5146|    382|    case Interactive_kind:
  ------------------
  |  Branch (5146:5): [True: 382, False: 1.50k]
  ------------------
 5147|    382|        tp = (PyTypeObject *)state->Interactive_type;
 5148|    382|        result = PyType_GenericNew(tp, NULL, NULL);
 5149|    382|        if (!result) goto failed;
  ------------------
  |  Branch (5149:13): [True: 0, False: 382]
  ------------------
 5150|    382|        value = ast2obj_list(state, (asdl_seq*)o->v.Interactive.body,
 5151|    382|                             ast2obj_stmt);
 5152|    382|        if (!value) goto failed;
  ------------------
  |  Branch (5152:13): [True: 0, False: 382]
  ------------------
 5153|    382|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5153:13): [True: 0, False: 382]
  ------------------
 5154|      0|            goto failed;
 5155|    382|        Py_DECREF(value);
  ------------------
  |  |  430|    382|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    382|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    382|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5156|    382|        break;
 5157|    198|    case Expression_kind:
  ------------------
  |  Branch (5157:5): [True: 198, False: 1.69k]
  ------------------
 5158|    198|        tp = (PyTypeObject *)state->Expression_type;
 5159|    198|        result = PyType_GenericNew(tp, NULL, NULL);
 5160|    198|        if (!result) goto failed;
  ------------------
  |  Branch (5160:13): [True: 0, False: 198]
  ------------------
 5161|    198|        value = ast2obj_expr(state, o->v.Expression.body);
 5162|    198|        if (!value) goto failed;
  ------------------
  |  Branch (5162:13): [True: 0, False: 198]
  ------------------
 5163|    198|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5163:13): [True: 0, False: 198]
  ------------------
 5164|      0|            goto failed;
 5165|    198|        Py_DECREF(value);
  ------------------
  |  |  430|    198|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5166|    198|        break;
 5167|      0|    case FunctionType_kind:
  ------------------
  |  Branch (5167:5): [True: 0, False: 1.89k]
  ------------------
 5168|      0|        tp = (PyTypeObject *)state->FunctionType_type;
 5169|      0|        result = PyType_GenericNew(tp, NULL, NULL);
 5170|      0|        if (!result) goto failed;
  ------------------
  |  Branch (5170:13): [True: 0, False: 0]
  ------------------
 5171|      0|        value = ast2obj_list(state, (asdl_seq*)o->v.FunctionType.argtypes,
 5172|      0|                             ast2obj_expr);
 5173|      0|        if (!value) goto failed;
  ------------------
  |  Branch (5173:13): [True: 0, False: 0]
  ------------------
 5174|      0|        if (PyObject_SetAttr(result, state->argtypes, value) == -1)
  ------------------
  |  Branch (5174:13): [True: 0, False: 0]
  ------------------
 5175|      0|            goto failed;
 5176|      0|        Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5177|      0|        value = ast2obj_expr(state, o->v.FunctionType.returns);
 5178|      0|        if (!value) goto failed;
  ------------------
  |  Branch (5178:13): [True: 0, False: 0]
  ------------------
 5179|      0|        if (PyObject_SetAttr(result, state->returns, value) == -1)
  ------------------
  |  Branch (5179:13): [True: 0, False: 0]
  ------------------
 5180|      0|            goto failed;
 5181|      0|        Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5182|      0|        break;
 5183|  1.89k|    }
 5184|  1.89k|    Py_LeaveRecursiveCall();
 5185|  1.89k|    return result;
 5186|      0|failed:
 5187|      0|    Py_LeaveRecursiveCall();
 5188|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5189|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5190|       |    return NULL;
 5191|  1.89k|}
Python-ast.c:ast2obj_list:
 2241|  63.5k|{
 2242|  63.5k|    Py_ssize_t i, n = asdl_seq_LEN(seq);
  ------------------
  |  |   83|  63.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   127k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 17.9k, False: 45.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2243|  63.5k|    PyObject *result = PyList_New(n);
 2244|  63.5k|    PyObject *value;
 2245|  63.5k|    if (!result)
  ------------------
  |  Branch (2245:9): [True: 0, False: 63.5k]
  ------------------
 2246|      0|        return NULL;
 2247|   186k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (2247:17): [True: 123k, False: 63.5k]
  ------------------
 2248|   123k|        value = func(state, asdl_seq_GET_UNTYPED(seq, i));
  ------------------
  |  |   81|   123k|#define asdl_seq_GET_UNTYPED(S, I) _Py_RVALUE((S)->elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   123k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2249|   123k|        if (!value) {
  ------------------
  |  Branch (2249:13): [True: 0, False: 123k]
  ------------------
 2250|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2251|      0|            return NULL;
 2252|      0|        }
 2253|   123k|        PyList_SET_ITEM(result, i, value);
  ------------------
  |  |   50|   123k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   123k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   123k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   123k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   123k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2254|   123k|    }
 2255|  63.5k|    return result;
 2256|  63.5k|}
Python-ast.c:ast2obj_stmt:
 5195|  51.0k|{
 5196|  51.0k|    stmt_ty o = (stmt_ty)_o;
 5197|  51.0k|    PyObject *result = NULL, *value = NULL;
 5198|  51.0k|    PyTypeObject *tp;
 5199|  51.0k|    if (!o) {
  ------------------
  |  Branch (5199:9): [True: 0, False: 51.0k]
  ------------------
 5200|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5201|      0|    }
 5202|  51.0k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (5202:9): [True: 0, False: 51.0k]
  ------------------
 5203|      0|        return NULL;
 5204|      0|    }
 5205|  51.0k|    switch (o->kind) {
  ------------------
  |  Branch (5205:13): [True: 51.0k, False: 0]
  ------------------
 5206|  1.13k|    case FunctionDef_kind:
  ------------------
  |  Branch (5206:5): [True: 1.13k, False: 49.9k]
  ------------------
 5207|  1.13k|        tp = (PyTypeObject *)state->FunctionDef_type;
 5208|  1.13k|        result = PyType_GenericNew(tp, NULL, NULL);
 5209|  1.13k|        if (!result) goto failed;
  ------------------
  |  Branch (5209:13): [True: 0, False: 1.13k]
  ------------------
 5210|  1.13k|        value = ast2obj_identifier(state, o->v.FunctionDef.name);
  ------------------
  |  | 2267|  1.13k|#define ast2obj_identifier ast2obj_object
  ------------------
 5211|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5211:13): [True: 0, False: 1.13k]
  ------------------
 5212|  1.13k|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (5212:13): [True: 0, False: 1.13k]
  ------------------
 5213|      0|            goto failed;
 5214|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5215|  1.13k|        value = ast2obj_arguments(state, o->v.FunctionDef.args);
 5216|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5216:13): [True: 0, False: 1.13k]
  ------------------
 5217|  1.13k|        if (PyObject_SetAttr(result, state->args, value) == -1)
  ------------------
  |  Branch (5217:13): [True: 0, False: 1.13k]
  ------------------
 5218|      0|            goto failed;
 5219|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5220|  1.13k|        value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.body,
 5221|  1.13k|                             ast2obj_stmt);
 5222|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5222:13): [True: 0, False: 1.13k]
  ------------------
 5223|  1.13k|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5223:13): [True: 0, False: 1.13k]
  ------------------
 5224|      0|            goto failed;
 5225|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5226|  1.13k|        value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.decorator_list,
 5227|  1.13k|                             ast2obj_expr);
 5228|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5228:13): [True: 0, False: 1.13k]
  ------------------
 5229|  1.13k|        if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
  ------------------
  |  Branch (5229:13): [True: 0, False: 1.13k]
  ------------------
 5230|      0|            goto failed;
 5231|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5232|  1.13k|        value = ast2obj_expr(state, o->v.FunctionDef.returns);
 5233|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5233:13): [True: 0, False: 1.13k]
  ------------------
 5234|  1.13k|        if (PyObject_SetAttr(result, state->returns, value) == -1)
  ------------------
  |  Branch (5234:13): [True: 0, False: 1.13k]
  ------------------
 5235|      0|            goto failed;
 5236|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5237|  1.13k|        value = ast2obj_string(state, o->v.FunctionDef.type_comment);
  ------------------
  |  | 2268|  1.13k|#define ast2obj_string ast2obj_object
  ------------------
 5238|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5238:13): [True: 0, False: 1.13k]
  ------------------
 5239|  1.13k|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5239:13): [True: 0, False: 1.13k]
  ------------------
 5240|      0|            goto failed;
 5241|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5242|  1.13k|        value = ast2obj_list(state, (asdl_seq*)o->v.FunctionDef.type_params,
 5243|  1.13k|                             ast2obj_type_param);
 5244|  1.13k|        if (!value) goto failed;
  ------------------
  |  Branch (5244:13): [True: 0, False: 1.13k]
  ------------------
 5245|  1.13k|        if (PyObject_SetAttr(result, state->type_params, value) == -1)
  ------------------
  |  Branch (5245:13): [True: 0, False: 1.13k]
  ------------------
 5246|      0|            goto failed;
 5247|  1.13k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.13k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5248|  1.13k|        break;
 5249|    711|    case AsyncFunctionDef_kind:
  ------------------
  |  Branch (5249:5): [True: 711, False: 50.3k]
  ------------------
 5250|    711|        tp = (PyTypeObject *)state->AsyncFunctionDef_type;
 5251|    711|        result = PyType_GenericNew(tp, NULL, NULL);
 5252|    711|        if (!result) goto failed;
  ------------------
  |  Branch (5252:13): [True: 0, False: 711]
  ------------------
 5253|    711|        value = ast2obj_identifier(state, o->v.AsyncFunctionDef.name);
  ------------------
  |  | 2267|    711|#define ast2obj_identifier ast2obj_object
  ------------------
 5254|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5254:13): [True: 0, False: 711]
  ------------------
 5255|    711|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (5255:13): [True: 0, False: 711]
  ------------------
 5256|      0|            goto failed;
 5257|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5258|    711|        value = ast2obj_arguments(state, o->v.AsyncFunctionDef.args);
 5259|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5259:13): [True: 0, False: 711]
  ------------------
 5260|    711|        if (PyObject_SetAttr(result, state->args, value) == -1)
  ------------------
  |  Branch (5260:13): [True: 0, False: 711]
  ------------------
 5261|      0|            goto failed;
 5262|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5263|    711|        value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFunctionDef.body,
 5264|    711|                             ast2obj_stmt);
 5265|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5265:13): [True: 0, False: 711]
  ------------------
 5266|    711|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5266:13): [True: 0, False: 711]
  ------------------
 5267|      0|            goto failed;
 5268|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5269|    711|        value = ast2obj_list(state,
 5270|    711|                             (asdl_seq*)o->v.AsyncFunctionDef.decorator_list,
 5271|    711|                             ast2obj_expr);
 5272|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5272:13): [True: 0, False: 711]
  ------------------
 5273|    711|        if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
  ------------------
  |  Branch (5273:13): [True: 0, False: 711]
  ------------------
 5274|      0|            goto failed;
 5275|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5276|    711|        value = ast2obj_expr(state, o->v.AsyncFunctionDef.returns);
 5277|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5277:13): [True: 0, False: 711]
  ------------------
 5278|    711|        if (PyObject_SetAttr(result, state->returns, value) == -1)
  ------------------
  |  Branch (5278:13): [True: 0, False: 711]
  ------------------
 5279|      0|            goto failed;
 5280|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5281|    711|        value = ast2obj_string(state, o->v.AsyncFunctionDef.type_comment);
  ------------------
  |  | 2268|    711|#define ast2obj_string ast2obj_object
  ------------------
 5282|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5282:13): [True: 0, False: 711]
  ------------------
 5283|    711|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5283:13): [True: 0, False: 711]
  ------------------
 5284|      0|            goto failed;
 5285|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5286|    711|        value = ast2obj_list(state,
 5287|    711|                             (asdl_seq*)o->v.AsyncFunctionDef.type_params,
 5288|    711|                             ast2obj_type_param);
 5289|    711|        if (!value) goto failed;
  ------------------
  |  Branch (5289:13): [True: 0, False: 711]
  ------------------
 5290|    711|        if (PyObject_SetAttr(result, state->type_params, value) == -1)
  ------------------
  |  Branch (5290:13): [True: 0, False: 711]
  ------------------
 5291|      0|            goto failed;
 5292|    711|        Py_DECREF(value);
  ------------------
  |  |  430|    711|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    711|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    711|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5293|    711|        break;
 5294|    807|    case ClassDef_kind:
  ------------------
  |  Branch (5294:5): [True: 807, False: 50.2k]
  ------------------
 5295|    807|        tp = (PyTypeObject *)state->ClassDef_type;
 5296|    807|        result = PyType_GenericNew(tp, NULL, NULL);
 5297|    807|        if (!result) goto failed;
  ------------------
  |  Branch (5297:13): [True: 0, False: 807]
  ------------------
 5298|    807|        value = ast2obj_identifier(state, o->v.ClassDef.name);
  ------------------
  |  | 2267|    807|#define ast2obj_identifier ast2obj_object
  ------------------
 5299|    807|        if (!value) goto failed;
  ------------------
  |  Branch (5299:13): [True: 0, False: 807]
  ------------------
 5300|    807|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (5300:13): [True: 0, False: 807]
  ------------------
 5301|      0|            goto failed;
 5302|    807|        Py_DECREF(value);
  ------------------
  |  |  430|    807|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    807|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    807|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5303|    807|        value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.bases,
 5304|    807|                             ast2obj_expr);
 5305|    807|        if (!value) goto failed;
  ------------------
  |  Branch (5305:13): [True: 0, False: 807]
  ------------------
 5306|    807|        if (PyObject_SetAttr(result, state->bases, value) == -1)
  ------------------
  |  Branch (5306:13): [True: 0, False: 807]
  ------------------
 5307|      0|            goto failed;
 5308|    807|        Py_DECREF(value);
  ------------------
  |  |  430|    807|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    807|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    807|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5309|    807|        value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.keywords,
 5310|    807|                             ast2obj_keyword);
 5311|    807|        if (!value) goto failed;
  ------------------
  |  Branch (5311:13): [True: 0, False: 807]
  ------------------
 5312|    807|        if (PyObject_SetAttr(result, state->keywords, value) == -1)
  ------------------
  |  Branch (5312:13): [True: 0, False: 807]
  ------------------
 5313|      0|            goto failed;
 5314|    807|        Py_DECREF(value);
  ------------------
  |  |  430|    807|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    807|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    807|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5315|    807|        value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.body,
 5316|    807|                             ast2obj_stmt);
 5317|    807|        if (!value) goto failed;
  ------------------
  |  Branch (5317:13): [True: 0, False: 807]
  ------------------
 5318|    807|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5318:13): [True: 0, False: 807]
  ------------------
 5319|      0|            goto failed;
 5320|    807|        Py_DECREF(value);
  ------------------
  |  |  430|    807|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    807|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    807|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5321|    807|        value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.decorator_list,
 5322|    807|                             ast2obj_expr);
 5323|    807|        if (!value) goto failed;
  ------------------
  |  Branch (5323:13): [True: 0, False: 807]
  ------------------
 5324|    807|        if (PyObject_SetAttr(result, state->decorator_list, value) == -1)
  ------------------
  |  Branch (5324:13): [True: 0, False: 807]
  ------------------
 5325|      0|            goto failed;
 5326|    807|        Py_DECREF(value);
  ------------------
  |  |  430|    807|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    807|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    807|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5327|    807|        value = ast2obj_list(state, (asdl_seq*)o->v.ClassDef.type_params,
 5328|    807|                             ast2obj_type_param);
 5329|    807|        if (!value) goto failed;
  ------------------
  |  Branch (5329:13): [True: 0, False: 807]
  ------------------
 5330|    807|        if (PyObject_SetAttr(result, state->type_params, value) == -1)
  ------------------
  |  Branch (5330:13): [True: 0, False: 807]
  ------------------
 5331|      0|            goto failed;
 5332|    807|        Py_DECREF(value);
  ------------------
  |  |  430|    807|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    807|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    807|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5333|    807|        break;
 5334|    687|    case Return_kind:
  ------------------
  |  Branch (5334:5): [True: 687, False: 50.3k]
  ------------------
 5335|    687|        tp = (PyTypeObject *)state->Return_type;
 5336|    687|        result = PyType_GenericNew(tp, NULL, NULL);
 5337|    687|        if (!result) goto failed;
  ------------------
  |  Branch (5337:13): [True: 0, False: 687]
  ------------------
 5338|    687|        value = ast2obj_expr(state, o->v.Return.value);
 5339|    687|        if (!value) goto failed;
  ------------------
  |  Branch (5339:13): [True: 0, False: 687]
  ------------------
 5340|    687|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5340:13): [True: 0, False: 687]
  ------------------
 5341|      0|            goto failed;
 5342|    687|        Py_DECREF(value);
  ------------------
  |  |  430|    687|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    687|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    687|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5343|    687|        break;
 5344|    139|    case Delete_kind:
  ------------------
  |  Branch (5344:5): [True: 139, False: 50.9k]
  ------------------
 5345|    139|        tp = (PyTypeObject *)state->Delete_type;
 5346|    139|        result = PyType_GenericNew(tp, NULL, NULL);
 5347|    139|        if (!result) goto failed;
  ------------------
  |  Branch (5347:13): [True: 0, False: 139]
  ------------------
 5348|    139|        value = ast2obj_list(state, (asdl_seq*)o->v.Delete.targets,
 5349|    139|                             ast2obj_expr);
 5350|    139|        if (!value) goto failed;
  ------------------
  |  Branch (5350:13): [True: 0, False: 139]
  ------------------
 5351|    139|        if (PyObject_SetAttr(result, state->targets, value) == -1)
  ------------------
  |  Branch (5351:13): [True: 0, False: 139]
  ------------------
 5352|      0|            goto failed;
 5353|    139|        Py_DECREF(value);
  ------------------
  |  |  430|    139|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    139|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    139|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5354|    139|        break;
 5355|  1.37k|    case Assign_kind:
  ------------------
  |  Branch (5355:5): [True: 1.37k, False: 49.6k]
  ------------------
 5356|  1.37k|        tp = (PyTypeObject *)state->Assign_type;
 5357|  1.37k|        result = PyType_GenericNew(tp, NULL, NULL);
 5358|  1.37k|        if (!result) goto failed;
  ------------------
  |  Branch (5358:13): [True: 0, False: 1.37k]
  ------------------
 5359|  1.37k|        value = ast2obj_list(state, (asdl_seq*)o->v.Assign.targets,
 5360|  1.37k|                             ast2obj_expr);
 5361|  1.37k|        if (!value) goto failed;
  ------------------
  |  Branch (5361:13): [True: 0, False: 1.37k]
  ------------------
 5362|  1.37k|        if (PyObject_SetAttr(result, state->targets, value) == -1)
  ------------------
  |  Branch (5362:13): [True: 0, False: 1.37k]
  ------------------
 5363|      0|            goto failed;
 5364|  1.37k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5365|  1.37k|        value = ast2obj_expr(state, o->v.Assign.value);
 5366|  1.37k|        if (!value) goto failed;
  ------------------
  |  Branch (5366:13): [True: 0, False: 1.37k]
  ------------------
 5367|  1.37k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5367:13): [True: 0, False: 1.37k]
  ------------------
 5368|      0|            goto failed;
 5369|  1.37k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5370|  1.37k|        value = ast2obj_string(state, o->v.Assign.type_comment);
  ------------------
  |  | 2268|  1.37k|#define ast2obj_string ast2obj_object
  ------------------
 5371|  1.37k|        if (!value) goto failed;
  ------------------
  |  Branch (5371:13): [True: 0, False: 1.37k]
  ------------------
 5372|  1.37k|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5372:13): [True: 0, False: 1.37k]
  ------------------
 5373|      0|            goto failed;
 5374|  1.37k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5375|  1.37k|        break;
 5376|    244|    case TypeAlias_kind:
  ------------------
  |  Branch (5376:5): [True: 244, False: 50.8k]
  ------------------
 5377|    244|        tp = (PyTypeObject *)state->TypeAlias_type;
 5378|    244|        result = PyType_GenericNew(tp, NULL, NULL);
 5379|    244|        if (!result) goto failed;
  ------------------
  |  Branch (5379:13): [True: 0, False: 244]
  ------------------
 5380|    244|        value = ast2obj_expr(state, o->v.TypeAlias.name);
 5381|    244|        if (!value) goto failed;
  ------------------
  |  Branch (5381:13): [True: 0, False: 244]
  ------------------
 5382|    244|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (5382:13): [True: 0, False: 244]
  ------------------
 5383|      0|            goto failed;
 5384|    244|        Py_DECREF(value);
  ------------------
  |  |  430|    244|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    244|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    244|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5385|    244|        value = ast2obj_list(state, (asdl_seq*)o->v.TypeAlias.type_params,
 5386|    244|                             ast2obj_type_param);
 5387|    244|        if (!value) goto failed;
  ------------------
  |  Branch (5387:13): [True: 0, False: 244]
  ------------------
 5388|    244|        if (PyObject_SetAttr(result, state->type_params, value) == -1)
  ------------------
  |  Branch (5388:13): [True: 0, False: 244]
  ------------------
 5389|      0|            goto failed;
 5390|    244|        Py_DECREF(value);
  ------------------
  |  |  430|    244|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    244|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    244|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5391|    244|        value = ast2obj_expr(state, o->v.TypeAlias.value);
 5392|    244|        if (!value) goto failed;
  ------------------
  |  Branch (5392:13): [True: 0, False: 244]
  ------------------
 5393|    244|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5393:13): [True: 0, False: 244]
  ------------------
 5394|      0|            goto failed;
 5395|    244|        Py_DECREF(value);
  ------------------
  |  |  430|    244|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    244|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    244|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5396|    244|        break;
 5397|  1.03k|    case AugAssign_kind:
  ------------------
  |  Branch (5397:5): [True: 1.03k, False: 50.0k]
  ------------------
 5398|  1.03k|        tp = (PyTypeObject *)state->AugAssign_type;
 5399|  1.03k|        result = PyType_GenericNew(tp, NULL, NULL);
 5400|  1.03k|        if (!result) goto failed;
  ------------------
  |  Branch (5400:13): [True: 0, False: 1.03k]
  ------------------
 5401|  1.03k|        value = ast2obj_expr(state, o->v.AugAssign.target);
 5402|  1.03k|        if (!value) goto failed;
  ------------------
  |  Branch (5402:13): [True: 0, False: 1.03k]
  ------------------
 5403|  1.03k|        if (PyObject_SetAttr(result, state->target, value) == -1)
  ------------------
  |  Branch (5403:13): [True: 0, False: 1.03k]
  ------------------
 5404|      0|            goto failed;
 5405|  1.03k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.03k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5406|  1.03k|        value = ast2obj_operator(state, o->v.AugAssign.op);
 5407|  1.03k|        if (!value) goto failed;
  ------------------
  |  Branch (5407:13): [True: 0, False: 1.03k]
  ------------------
 5408|  1.03k|        if (PyObject_SetAttr(result, state->op, value) == -1)
  ------------------
  |  Branch (5408:13): [True: 0, False: 1.03k]
  ------------------
 5409|      0|            goto failed;
 5410|  1.03k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.03k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5411|  1.03k|        value = ast2obj_expr(state, o->v.AugAssign.value);
 5412|  1.03k|        if (!value) goto failed;
  ------------------
  |  Branch (5412:13): [True: 0, False: 1.03k]
  ------------------
 5413|  1.03k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5413:13): [True: 0, False: 1.03k]
  ------------------
 5414|      0|            goto failed;
 5415|  1.03k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.03k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5416|  1.03k|        break;
 5417|  1.22k|    case AnnAssign_kind:
  ------------------
  |  Branch (5417:5): [True: 1.22k, False: 49.8k]
  ------------------
 5418|  1.22k|        tp = (PyTypeObject *)state->AnnAssign_type;
 5419|  1.22k|        result = PyType_GenericNew(tp, NULL, NULL);
 5420|  1.22k|        if (!result) goto failed;
  ------------------
  |  Branch (5420:13): [True: 0, False: 1.22k]
  ------------------
 5421|  1.22k|        value = ast2obj_expr(state, o->v.AnnAssign.target);
 5422|  1.22k|        if (!value) goto failed;
  ------------------
  |  Branch (5422:13): [True: 0, False: 1.22k]
  ------------------
 5423|  1.22k|        if (PyObject_SetAttr(result, state->target, value) == -1)
  ------------------
  |  Branch (5423:13): [True: 0, False: 1.22k]
  ------------------
 5424|      0|            goto failed;
 5425|  1.22k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5426|  1.22k|        value = ast2obj_expr(state, o->v.AnnAssign.annotation);
 5427|  1.22k|        if (!value) goto failed;
  ------------------
  |  Branch (5427:13): [True: 0, False: 1.22k]
  ------------------
 5428|  1.22k|        if (PyObject_SetAttr(result, state->annotation, value) == -1)
  ------------------
  |  Branch (5428:13): [True: 0, False: 1.22k]
  ------------------
 5429|      0|            goto failed;
 5430|  1.22k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5431|  1.22k|        value = ast2obj_expr(state, o->v.AnnAssign.value);
 5432|  1.22k|        if (!value) goto failed;
  ------------------
  |  Branch (5432:13): [True: 0, False: 1.22k]
  ------------------
 5433|  1.22k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5433:13): [True: 0, False: 1.22k]
  ------------------
 5434|      0|            goto failed;
 5435|  1.22k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5436|  1.22k|        value = ast2obj_int(state, o->v.AnnAssign.simple);
 5437|  1.22k|        if (!value) goto failed;
  ------------------
  |  Branch (5437:13): [True: 0, False: 1.22k]
  ------------------
 5438|  1.22k|        if (PyObject_SetAttr(result, state->simple, value) == -1)
  ------------------
  |  Branch (5438:13): [True: 0, False: 1.22k]
  ------------------
 5439|      0|            goto failed;
 5440|  1.22k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5441|  1.22k|        break;
 5442|    328|    case For_kind:
  ------------------
  |  Branch (5442:5): [True: 328, False: 50.7k]
  ------------------
 5443|    328|        tp = (PyTypeObject *)state->For_type;
 5444|    328|        result = PyType_GenericNew(tp, NULL, NULL);
 5445|    328|        if (!result) goto failed;
  ------------------
  |  Branch (5445:13): [True: 0, False: 328]
  ------------------
 5446|    328|        value = ast2obj_expr(state, o->v.For.target);
 5447|    328|        if (!value) goto failed;
  ------------------
  |  Branch (5447:13): [True: 0, False: 328]
  ------------------
 5448|    328|        if (PyObject_SetAttr(result, state->target, value) == -1)
  ------------------
  |  Branch (5448:13): [True: 0, False: 328]
  ------------------
 5449|      0|            goto failed;
 5450|    328|        Py_DECREF(value);
  ------------------
  |  |  430|    328|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    328|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    328|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5451|    328|        value = ast2obj_expr(state, o->v.For.iter);
 5452|    328|        if (!value) goto failed;
  ------------------
  |  Branch (5452:13): [True: 0, False: 328]
  ------------------
 5453|    328|        if (PyObject_SetAttr(result, state->iter, value) == -1)
  ------------------
  |  Branch (5453:13): [True: 0, False: 328]
  ------------------
 5454|      0|            goto failed;
 5455|    328|        Py_DECREF(value);
  ------------------
  |  |  430|    328|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    328|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    328|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5456|    328|        value = ast2obj_list(state, (asdl_seq*)o->v.For.body, ast2obj_stmt);
 5457|    328|        if (!value) goto failed;
  ------------------
  |  Branch (5457:13): [True: 0, False: 328]
  ------------------
 5458|    328|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5458:13): [True: 0, False: 328]
  ------------------
 5459|      0|            goto failed;
 5460|    328|        Py_DECREF(value);
  ------------------
  |  |  430|    328|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    328|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    328|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5461|    328|        value = ast2obj_list(state, (asdl_seq*)o->v.For.orelse, ast2obj_stmt);
 5462|    328|        if (!value) goto failed;
  ------------------
  |  Branch (5462:13): [True: 0, False: 328]
  ------------------
 5463|    328|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5463:13): [True: 0, False: 328]
  ------------------
 5464|      0|            goto failed;
 5465|    328|        Py_DECREF(value);
  ------------------
  |  |  430|    328|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    328|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    328|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5466|    328|        value = ast2obj_string(state, o->v.For.type_comment);
  ------------------
  |  | 2268|    328|#define ast2obj_string ast2obj_object
  ------------------
 5467|    328|        if (!value) goto failed;
  ------------------
  |  Branch (5467:13): [True: 0, False: 328]
  ------------------
 5468|    328|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5468:13): [True: 0, False: 328]
  ------------------
 5469|      0|            goto failed;
 5470|    328|        Py_DECREF(value);
  ------------------
  |  |  430|    328|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    328|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    328|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5471|    328|        break;
 5472|    134|    case AsyncFor_kind:
  ------------------
  |  Branch (5472:5): [True: 134, False: 50.9k]
  ------------------
 5473|    134|        tp = (PyTypeObject *)state->AsyncFor_type;
 5474|    134|        result = PyType_GenericNew(tp, NULL, NULL);
 5475|    134|        if (!result) goto failed;
  ------------------
  |  Branch (5475:13): [True: 0, False: 134]
  ------------------
 5476|    134|        value = ast2obj_expr(state, o->v.AsyncFor.target);
 5477|    134|        if (!value) goto failed;
  ------------------
  |  Branch (5477:13): [True: 0, False: 134]
  ------------------
 5478|    134|        if (PyObject_SetAttr(result, state->target, value) == -1)
  ------------------
  |  Branch (5478:13): [True: 0, False: 134]
  ------------------
 5479|      0|            goto failed;
 5480|    134|        Py_DECREF(value);
  ------------------
  |  |  430|    134|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    134|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    134|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5481|    134|        value = ast2obj_expr(state, o->v.AsyncFor.iter);
 5482|    134|        if (!value) goto failed;
  ------------------
  |  Branch (5482:13): [True: 0, False: 134]
  ------------------
 5483|    134|        if (PyObject_SetAttr(result, state->iter, value) == -1)
  ------------------
  |  Branch (5483:13): [True: 0, False: 134]
  ------------------
 5484|      0|            goto failed;
 5485|    134|        Py_DECREF(value);
  ------------------
  |  |  430|    134|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    134|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    134|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5486|    134|        value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.body,
 5487|    134|                             ast2obj_stmt);
 5488|    134|        if (!value) goto failed;
  ------------------
  |  Branch (5488:13): [True: 0, False: 134]
  ------------------
 5489|    134|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5489:13): [True: 0, False: 134]
  ------------------
 5490|      0|            goto failed;
 5491|    134|        Py_DECREF(value);
  ------------------
  |  |  430|    134|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    134|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    134|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5492|    134|        value = ast2obj_list(state, (asdl_seq*)o->v.AsyncFor.orelse,
 5493|    134|                             ast2obj_stmt);
 5494|    134|        if (!value) goto failed;
  ------------------
  |  Branch (5494:13): [True: 0, False: 134]
  ------------------
 5495|    134|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5495:13): [True: 0, False: 134]
  ------------------
 5496|      0|            goto failed;
 5497|    134|        Py_DECREF(value);
  ------------------
  |  |  430|    134|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    134|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    134|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5498|    134|        value = ast2obj_string(state, o->v.AsyncFor.type_comment);
  ------------------
  |  | 2268|    134|#define ast2obj_string ast2obj_object
  ------------------
 5499|    134|        if (!value) goto failed;
  ------------------
  |  Branch (5499:13): [True: 0, False: 134]
  ------------------
 5500|    134|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5500:13): [True: 0, False: 134]
  ------------------
 5501|      0|            goto failed;
 5502|    134|        Py_DECREF(value);
  ------------------
  |  |  430|    134|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    134|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    134|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5503|    134|        break;
 5504|    112|    case While_kind:
  ------------------
  |  Branch (5504:5): [True: 112, False: 50.9k]
  ------------------
 5505|    112|        tp = (PyTypeObject *)state->While_type;
 5506|    112|        result = PyType_GenericNew(tp, NULL, NULL);
 5507|    112|        if (!result) goto failed;
  ------------------
  |  Branch (5507:13): [True: 0, False: 112]
  ------------------
 5508|    112|        value = ast2obj_expr(state, o->v.While.test);
 5509|    112|        if (!value) goto failed;
  ------------------
  |  Branch (5509:13): [True: 0, False: 112]
  ------------------
 5510|    112|        if (PyObject_SetAttr(result, state->test, value) == -1)
  ------------------
  |  Branch (5510:13): [True: 0, False: 112]
  ------------------
 5511|      0|            goto failed;
 5512|    112|        Py_DECREF(value);
  ------------------
  |  |  430|    112|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    112|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    112|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5513|    112|        value = ast2obj_list(state, (asdl_seq*)o->v.While.body, ast2obj_stmt);
 5514|    112|        if (!value) goto failed;
  ------------------
  |  Branch (5514:13): [True: 0, False: 112]
  ------------------
 5515|    112|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5515:13): [True: 0, False: 112]
  ------------------
 5516|      0|            goto failed;
 5517|    112|        Py_DECREF(value);
  ------------------
  |  |  430|    112|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    112|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    112|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5518|    112|        value = ast2obj_list(state, (asdl_seq*)o->v.While.orelse, ast2obj_stmt);
 5519|    112|        if (!value) goto failed;
  ------------------
  |  Branch (5519:13): [True: 0, False: 112]
  ------------------
 5520|    112|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5520:13): [True: 0, False: 112]
  ------------------
 5521|      0|            goto failed;
 5522|    112|        Py_DECREF(value);
  ------------------
  |  |  430|    112|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    112|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    112|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5523|    112|        break;
 5524|    354|    case If_kind:
  ------------------
  |  Branch (5524:5): [True: 354, False: 50.7k]
  ------------------
 5525|    354|        tp = (PyTypeObject *)state->If_type;
 5526|    354|        result = PyType_GenericNew(tp, NULL, NULL);
 5527|    354|        if (!result) goto failed;
  ------------------
  |  Branch (5527:13): [True: 0, False: 354]
  ------------------
 5528|    354|        value = ast2obj_expr(state, o->v.If.test);
 5529|    354|        if (!value) goto failed;
  ------------------
  |  Branch (5529:13): [True: 0, False: 354]
  ------------------
 5530|    354|        if (PyObject_SetAttr(result, state->test, value) == -1)
  ------------------
  |  Branch (5530:13): [True: 0, False: 354]
  ------------------
 5531|      0|            goto failed;
 5532|    354|        Py_DECREF(value);
  ------------------
  |  |  430|    354|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    354|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    354|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5533|    354|        value = ast2obj_list(state, (asdl_seq*)o->v.If.body, ast2obj_stmt);
 5534|    354|        if (!value) goto failed;
  ------------------
  |  Branch (5534:13): [True: 0, False: 354]
  ------------------
 5535|    354|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5535:13): [True: 0, False: 354]
  ------------------
 5536|      0|            goto failed;
 5537|    354|        Py_DECREF(value);
  ------------------
  |  |  430|    354|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    354|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    354|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5538|    354|        value = ast2obj_list(state, (asdl_seq*)o->v.If.orelse, ast2obj_stmt);
 5539|    354|        if (!value) goto failed;
  ------------------
  |  Branch (5539:13): [True: 0, False: 354]
  ------------------
 5540|    354|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5540:13): [True: 0, False: 354]
  ------------------
 5541|      0|            goto failed;
 5542|    354|        Py_DECREF(value);
  ------------------
  |  |  430|    354|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    354|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    354|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|    354|        break;
 5544|    162|    case With_kind:
  ------------------
  |  Branch (5544:5): [True: 162, False: 50.9k]
  ------------------
 5545|    162|        tp = (PyTypeObject *)state->With_type;
 5546|    162|        result = PyType_GenericNew(tp, NULL, NULL);
 5547|    162|        if (!result) goto failed;
  ------------------
  |  Branch (5547:13): [True: 0, False: 162]
  ------------------
 5548|    162|        value = ast2obj_list(state, (asdl_seq*)o->v.With.items,
 5549|    162|                             ast2obj_withitem);
 5550|    162|        if (!value) goto failed;
  ------------------
  |  Branch (5550:13): [True: 0, False: 162]
  ------------------
 5551|    162|        if (PyObject_SetAttr(result, state->items, value) == -1)
  ------------------
  |  Branch (5551:13): [True: 0, False: 162]
  ------------------
 5552|      0|            goto failed;
 5553|    162|        Py_DECREF(value);
  ------------------
  |  |  430|    162|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5554|    162|        value = ast2obj_list(state, (asdl_seq*)o->v.With.body, ast2obj_stmt);
 5555|    162|        if (!value) goto failed;
  ------------------
  |  Branch (5555:13): [True: 0, False: 162]
  ------------------
 5556|    162|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5556:13): [True: 0, False: 162]
  ------------------
 5557|      0|            goto failed;
 5558|    162|        Py_DECREF(value);
  ------------------
  |  |  430|    162|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5559|    162|        value = ast2obj_string(state, o->v.With.type_comment);
  ------------------
  |  | 2268|    162|#define ast2obj_string ast2obj_object
  ------------------
 5560|    162|        if (!value) goto failed;
  ------------------
  |  Branch (5560:13): [True: 0, False: 162]
  ------------------
 5561|    162|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5561:13): [True: 0, False: 162]
  ------------------
 5562|      0|            goto failed;
 5563|    162|        Py_DECREF(value);
  ------------------
  |  |  430|    162|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5564|    162|        break;
 5565|    327|    case AsyncWith_kind:
  ------------------
  |  Branch (5565:5): [True: 327, False: 50.7k]
  ------------------
 5566|    327|        tp = (PyTypeObject *)state->AsyncWith_type;
 5567|    327|        result = PyType_GenericNew(tp, NULL, NULL);
 5568|    327|        if (!result) goto failed;
  ------------------
  |  Branch (5568:13): [True: 0, False: 327]
  ------------------
 5569|    327|        value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.items,
 5570|    327|                             ast2obj_withitem);
 5571|    327|        if (!value) goto failed;
  ------------------
  |  Branch (5571:13): [True: 0, False: 327]
  ------------------
 5572|    327|        if (PyObject_SetAttr(result, state->items, value) == -1)
  ------------------
  |  Branch (5572:13): [True: 0, False: 327]
  ------------------
 5573|      0|            goto failed;
 5574|    327|        Py_DECREF(value);
  ------------------
  |  |  430|    327|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    327|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    327|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5575|    327|        value = ast2obj_list(state, (asdl_seq*)o->v.AsyncWith.body,
 5576|    327|                             ast2obj_stmt);
 5577|    327|        if (!value) goto failed;
  ------------------
  |  Branch (5577:13): [True: 0, False: 327]
  ------------------
 5578|    327|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5578:13): [True: 0, False: 327]
  ------------------
 5579|      0|            goto failed;
 5580|    327|        Py_DECREF(value);
  ------------------
  |  |  430|    327|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    327|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    327|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5581|    327|        value = ast2obj_string(state, o->v.AsyncWith.type_comment);
  ------------------
  |  | 2268|    327|#define ast2obj_string ast2obj_object
  ------------------
 5582|    327|        if (!value) goto failed;
  ------------------
  |  Branch (5582:13): [True: 0, False: 327]
  ------------------
 5583|    327|        if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (5583:13): [True: 0, False: 327]
  ------------------
 5584|      0|            goto failed;
 5585|    327|        Py_DECREF(value);
  ------------------
  |  |  430|    327|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    327|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    327|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5586|    327|        break;
 5587|     66|    case Match_kind:
  ------------------
  |  Branch (5587:5): [True: 66, False: 51.0k]
  ------------------
 5588|     66|        tp = (PyTypeObject *)state->Match_type;
 5589|     66|        result = PyType_GenericNew(tp, NULL, NULL);
 5590|     66|        if (!result) goto failed;
  ------------------
  |  Branch (5590:13): [True: 0, False: 66]
  ------------------
 5591|     66|        value = ast2obj_expr(state, o->v.Match.subject);
 5592|     66|        if (!value) goto failed;
  ------------------
  |  Branch (5592:13): [True: 0, False: 66]
  ------------------
 5593|     66|        if (PyObject_SetAttr(result, state->subject, value) == -1)
  ------------------
  |  Branch (5593:13): [True: 0, False: 66]
  ------------------
 5594|      0|            goto failed;
 5595|     66|        Py_DECREF(value);
  ------------------
  |  |  430|     66|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     66|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5596|     66|        value = ast2obj_list(state, (asdl_seq*)o->v.Match.cases,
 5597|     66|                             ast2obj_match_case);
 5598|     66|        if (!value) goto failed;
  ------------------
  |  Branch (5598:13): [True: 0, False: 66]
  ------------------
 5599|     66|        if (PyObject_SetAttr(result, state->cases, value) == -1)
  ------------------
  |  Branch (5599:13): [True: 0, False: 66]
  ------------------
 5600|      0|            goto failed;
 5601|     66|        Py_DECREF(value);
  ------------------
  |  |  430|     66|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     66|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5602|     66|        break;
 5603|    529|    case Raise_kind:
  ------------------
  |  Branch (5603:5): [True: 529, False: 50.5k]
  ------------------
 5604|    529|        tp = (PyTypeObject *)state->Raise_type;
 5605|    529|        result = PyType_GenericNew(tp, NULL, NULL);
 5606|    529|        if (!result) goto failed;
  ------------------
  |  Branch (5606:13): [True: 0, False: 529]
  ------------------
 5607|    529|        value = ast2obj_expr(state, o->v.Raise.exc);
 5608|    529|        if (!value) goto failed;
  ------------------
  |  Branch (5608:13): [True: 0, False: 529]
  ------------------
 5609|    529|        if (PyObject_SetAttr(result, state->exc, value) == -1)
  ------------------
  |  Branch (5609:13): [True: 0, False: 529]
  ------------------
 5610|      0|            goto failed;
 5611|    529|        Py_DECREF(value);
  ------------------
  |  |  430|    529|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    529|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    529|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5612|    529|        value = ast2obj_expr(state, o->v.Raise.cause);
 5613|    529|        if (!value) goto failed;
  ------------------
  |  Branch (5613:13): [True: 0, False: 529]
  ------------------
 5614|    529|        if (PyObject_SetAttr(result, state->cause, value) == -1)
  ------------------
  |  Branch (5614:13): [True: 0, False: 529]
  ------------------
 5615|      0|            goto failed;
 5616|    529|        Py_DECREF(value);
  ------------------
  |  |  430|    529|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    529|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    529|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5617|    529|        break;
 5618|    618|    case Try_kind:
  ------------------
  |  Branch (5618:5): [True: 618, False: 50.4k]
  ------------------
 5619|    618|        tp = (PyTypeObject *)state->Try_type;
 5620|    618|        result = PyType_GenericNew(tp, NULL, NULL);
 5621|    618|        if (!result) goto failed;
  ------------------
  |  Branch (5621:13): [True: 0, False: 618]
  ------------------
 5622|    618|        value = ast2obj_list(state, (asdl_seq*)o->v.Try.body, ast2obj_stmt);
 5623|    618|        if (!value) goto failed;
  ------------------
  |  Branch (5623:13): [True: 0, False: 618]
  ------------------
 5624|    618|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5624:13): [True: 0, False: 618]
  ------------------
 5625|      0|            goto failed;
 5626|    618|        Py_DECREF(value);
  ------------------
  |  |  430|    618|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    618|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    618|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5627|    618|        value = ast2obj_list(state, (asdl_seq*)o->v.Try.handlers,
 5628|    618|                             ast2obj_excepthandler);
 5629|    618|        if (!value) goto failed;
  ------------------
  |  Branch (5629:13): [True: 0, False: 618]
  ------------------
 5630|    618|        if (PyObject_SetAttr(result, state->handlers, value) == -1)
  ------------------
  |  Branch (5630:13): [True: 0, False: 618]
  ------------------
 5631|      0|            goto failed;
 5632|    618|        Py_DECREF(value);
  ------------------
  |  |  430|    618|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    618|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    618|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5633|    618|        value = ast2obj_list(state, (asdl_seq*)o->v.Try.orelse, ast2obj_stmt);
 5634|    618|        if (!value) goto failed;
  ------------------
  |  Branch (5634:13): [True: 0, False: 618]
  ------------------
 5635|    618|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5635:13): [True: 0, False: 618]
  ------------------
 5636|      0|            goto failed;
 5637|    618|        Py_DECREF(value);
  ------------------
  |  |  430|    618|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    618|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    618|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5638|    618|        value = ast2obj_list(state, (asdl_seq*)o->v.Try.finalbody,
 5639|    618|                             ast2obj_stmt);
 5640|    618|        if (!value) goto failed;
  ------------------
  |  Branch (5640:13): [True: 0, False: 618]
  ------------------
 5641|    618|        if (PyObject_SetAttr(result, state->finalbody, value) == -1)
  ------------------
  |  Branch (5641:13): [True: 0, False: 618]
  ------------------
 5642|      0|            goto failed;
 5643|    618|        Py_DECREF(value);
  ------------------
  |  |  430|    618|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    618|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    618|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5644|    618|        break;
 5645|    426|    case TryStar_kind:
  ------------------
  |  Branch (5645:5): [True: 426, False: 50.6k]
  ------------------
 5646|    426|        tp = (PyTypeObject *)state->TryStar_type;
 5647|    426|        result = PyType_GenericNew(tp, NULL, NULL);
 5648|    426|        if (!result) goto failed;
  ------------------
  |  Branch (5648:13): [True: 0, False: 426]
  ------------------
 5649|    426|        value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.body, ast2obj_stmt);
 5650|    426|        if (!value) goto failed;
  ------------------
  |  Branch (5650:13): [True: 0, False: 426]
  ------------------
 5651|    426|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5651:13): [True: 0, False: 426]
  ------------------
 5652|      0|            goto failed;
 5653|    426|        Py_DECREF(value);
  ------------------
  |  |  430|    426|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    426|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    426|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5654|    426|        value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.handlers,
 5655|    426|                             ast2obj_excepthandler);
 5656|    426|        if (!value) goto failed;
  ------------------
  |  Branch (5656:13): [True: 0, False: 426]
  ------------------
 5657|    426|        if (PyObject_SetAttr(result, state->handlers, value) == -1)
  ------------------
  |  Branch (5657:13): [True: 0, False: 426]
  ------------------
 5658|      0|            goto failed;
 5659|    426|        Py_DECREF(value);
  ------------------
  |  |  430|    426|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    426|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    426|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5660|    426|        value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.orelse,
 5661|    426|                             ast2obj_stmt);
 5662|    426|        if (!value) goto failed;
  ------------------
  |  Branch (5662:13): [True: 0, False: 426]
  ------------------
 5663|    426|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5663:13): [True: 0, False: 426]
  ------------------
 5664|      0|            goto failed;
 5665|    426|        Py_DECREF(value);
  ------------------
  |  |  430|    426|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    426|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    426|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5666|    426|        value = ast2obj_list(state, (asdl_seq*)o->v.TryStar.finalbody,
 5667|    426|                             ast2obj_stmt);
 5668|    426|        if (!value) goto failed;
  ------------------
  |  Branch (5668:13): [True: 0, False: 426]
  ------------------
 5669|    426|        if (PyObject_SetAttr(result, state->finalbody, value) == -1)
  ------------------
  |  Branch (5669:13): [True: 0, False: 426]
  ------------------
 5670|      0|            goto failed;
 5671|    426|        Py_DECREF(value);
  ------------------
  |  |  430|    426|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    426|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    426|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5672|    426|        break;
 5673|    900|    case Assert_kind:
  ------------------
  |  Branch (5673:5): [True: 900, False: 50.1k]
  ------------------
 5674|    900|        tp = (PyTypeObject *)state->Assert_type;
 5675|    900|        result = PyType_GenericNew(tp, NULL, NULL);
 5676|    900|        if (!result) goto failed;
  ------------------
  |  Branch (5676:13): [True: 0, False: 900]
  ------------------
 5677|    900|        value = ast2obj_expr(state, o->v.Assert.test);
 5678|    900|        if (!value) goto failed;
  ------------------
  |  Branch (5678:13): [True: 0, False: 900]
  ------------------
 5679|    900|        if (PyObject_SetAttr(result, state->test, value) == -1)
  ------------------
  |  Branch (5679:13): [True: 0, False: 900]
  ------------------
 5680|      0|            goto failed;
 5681|    900|        Py_DECREF(value);
  ------------------
  |  |  430|    900|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    900|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    900|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5682|    900|        value = ast2obj_expr(state, o->v.Assert.msg);
 5683|    900|        if (!value) goto failed;
  ------------------
  |  Branch (5683:13): [True: 0, False: 900]
  ------------------
 5684|    900|        if (PyObject_SetAttr(result, state->msg, value) == -1)
  ------------------
  |  Branch (5684:13): [True: 0, False: 900]
  ------------------
 5685|      0|            goto failed;
 5686|    900|        Py_DECREF(value);
  ------------------
  |  |  430|    900|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    900|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    900|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5687|    900|        break;
 5688|    364|    case Import_kind:
  ------------------
  |  Branch (5688:5): [True: 364, False: 50.7k]
  ------------------
 5689|    364|        tp = (PyTypeObject *)state->Import_type;
 5690|    364|        result = PyType_GenericNew(tp, NULL, NULL);
 5691|    364|        if (!result) goto failed;
  ------------------
  |  Branch (5691:13): [True: 0, False: 364]
  ------------------
 5692|    364|        value = ast2obj_list(state, (asdl_seq*)o->v.Import.names,
 5693|    364|                             ast2obj_alias);
 5694|    364|        if (!value) goto failed;
  ------------------
  |  Branch (5694:13): [True: 0, False: 364]
  ------------------
 5695|    364|        if (PyObject_SetAttr(result, state->names, value) == -1)
  ------------------
  |  Branch (5695:13): [True: 0, False: 364]
  ------------------
 5696|      0|            goto failed;
 5697|    364|        Py_DECREF(value);
  ------------------
  |  |  430|    364|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    364|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    364|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5698|    364|        value = ast2obj_int(state, o->v.Import.is_lazy);
 5699|    364|        if (!value) goto failed;
  ------------------
  |  Branch (5699:13): [True: 0, False: 364]
  ------------------
 5700|    364|        if (PyObject_SetAttr(result, state->is_lazy, value) == -1)
  ------------------
  |  Branch (5700:13): [True: 0, False: 364]
  ------------------
 5701|      0|            goto failed;
 5702|    364|        Py_DECREF(value);
  ------------------
  |  |  430|    364|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    364|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    364|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5703|    364|        break;
 5704|    367|    case ImportFrom_kind:
  ------------------
  |  Branch (5704:5): [True: 367, False: 50.7k]
  ------------------
 5705|    367|        tp = (PyTypeObject *)state->ImportFrom_type;
 5706|    367|        result = PyType_GenericNew(tp, NULL, NULL);
 5707|    367|        if (!result) goto failed;
  ------------------
  |  Branch (5707:13): [True: 0, False: 367]
  ------------------
 5708|    367|        value = ast2obj_identifier(state, o->v.ImportFrom.module);
  ------------------
  |  | 2267|    367|#define ast2obj_identifier ast2obj_object
  ------------------
 5709|    367|        if (!value) goto failed;
  ------------------
  |  Branch (5709:13): [True: 0, False: 367]
  ------------------
 5710|    367|        if (PyObject_SetAttr(result, state->module, value) == -1)
  ------------------
  |  Branch (5710:13): [True: 0, False: 367]
  ------------------
 5711|      0|            goto failed;
 5712|    367|        Py_DECREF(value);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5713|    367|        value = ast2obj_list(state, (asdl_seq*)o->v.ImportFrom.names,
 5714|    367|                             ast2obj_alias);
 5715|    367|        if (!value) goto failed;
  ------------------
  |  Branch (5715:13): [True: 0, False: 367]
  ------------------
 5716|    367|        if (PyObject_SetAttr(result, state->names, value) == -1)
  ------------------
  |  Branch (5716:13): [True: 0, False: 367]
  ------------------
 5717|      0|            goto failed;
 5718|    367|        Py_DECREF(value);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5719|    367|        value = ast2obj_int(state, o->v.ImportFrom.level);
 5720|    367|        if (!value) goto failed;
  ------------------
  |  Branch (5720:13): [True: 0, False: 367]
  ------------------
 5721|    367|        if (PyObject_SetAttr(result, state->level, value) == -1)
  ------------------
  |  Branch (5721:13): [True: 0, False: 367]
  ------------------
 5722|      0|            goto failed;
 5723|    367|        Py_DECREF(value);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5724|    367|        value = ast2obj_int(state, o->v.ImportFrom.is_lazy);
 5725|    367|        if (!value) goto failed;
  ------------------
  |  Branch (5725:13): [True: 0, False: 367]
  ------------------
 5726|    367|        if (PyObject_SetAttr(result, state->is_lazy, value) == -1)
  ------------------
  |  Branch (5726:13): [True: 0, False: 367]
  ------------------
 5727|      0|            goto failed;
 5728|    367|        Py_DECREF(value);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5729|    367|        break;
 5730|    171|    case Global_kind:
  ------------------
  |  Branch (5730:5): [True: 171, False: 50.8k]
  ------------------
 5731|    171|        tp = (PyTypeObject *)state->Global_type;
 5732|    171|        result = PyType_GenericNew(tp, NULL, NULL);
 5733|    171|        if (!result) goto failed;
  ------------------
  |  Branch (5733:13): [True: 0, False: 171]
  ------------------
 5734|    171|        value = ast2obj_list(state, (asdl_seq*)o->v.Global.names,
 5735|    171|                             ast2obj_identifier);
  ------------------
  |  | 2267|    171|#define ast2obj_identifier ast2obj_object
  ------------------
 5736|    171|        if (!value) goto failed;
  ------------------
  |  Branch (5736:13): [True: 0, False: 171]
  ------------------
 5737|    171|        if (PyObject_SetAttr(result, state->names, value) == -1)
  ------------------
  |  Branch (5737:13): [True: 0, False: 171]
  ------------------
 5738|      0|            goto failed;
 5739|    171|        Py_DECREF(value);
  ------------------
  |  |  430|    171|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    171|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    171|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5740|    171|        break;
 5741|    102|    case Nonlocal_kind:
  ------------------
  |  Branch (5741:5): [True: 102, False: 50.9k]
  ------------------
 5742|    102|        tp = (PyTypeObject *)state->Nonlocal_type;
 5743|    102|        result = PyType_GenericNew(tp, NULL, NULL);
 5744|    102|        if (!result) goto failed;
  ------------------
  |  Branch (5744:13): [True: 0, False: 102]
  ------------------
 5745|    102|        value = ast2obj_list(state, (asdl_seq*)o->v.Nonlocal.names,
 5746|    102|                             ast2obj_identifier);
  ------------------
  |  | 2267|    102|#define ast2obj_identifier ast2obj_object
  ------------------
 5747|    102|        if (!value) goto failed;
  ------------------
  |  Branch (5747:13): [True: 0, False: 102]
  ------------------
 5748|    102|        if (PyObject_SetAttr(result, state->names, value) == -1)
  ------------------
  |  Branch (5748:13): [True: 0, False: 102]
  ------------------
 5749|      0|            goto failed;
 5750|    102|        Py_DECREF(value);
  ------------------
  |  |  430|    102|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5751|    102|        break;
 5752|  37.7k|    case Expr_kind:
  ------------------
  |  Branch (5752:5): [True: 37.7k, False: 13.2k]
  ------------------
 5753|  37.7k|        tp = (PyTypeObject *)state->Expr_type;
 5754|  37.7k|        result = PyType_GenericNew(tp, NULL, NULL);
 5755|  37.7k|        if (!result) goto failed;
  ------------------
  |  Branch (5755:13): [True: 0, False: 37.7k]
  ------------------
 5756|  37.7k|        value = ast2obj_expr(state, o->v.Expr.value);
 5757|  37.7k|        if (!value) goto failed;
  ------------------
  |  Branch (5757:13): [True: 0, False: 37.7k]
  ------------------
 5758|  37.7k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5758:13): [True: 0, False: 37.7k]
  ------------------
 5759|      0|            goto failed;
 5760|  37.7k|        Py_DECREF(value);
  ------------------
  |  |  430|  37.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  37.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  37.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5761|  37.7k|        break;
 5762|    437|    case Pass_kind:
  ------------------
  |  Branch (5762:5): [True: 437, False: 50.6k]
  ------------------
 5763|    437|        tp = (PyTypeObject *)state->Pass_type;
 5764|    437|        result = PyType_GenericNew(tp, NULL, NULL);
 5765|    437|        if (!result) goto failed;
  ------------------
  |  Branch (5765:13): [True: 0, False: 437]
  ------------------
 5766|    437|        break;
 5767|    437|    case Break_kind:
  ------------------
  |  Branch (5767:5): [True: 314, False: 50.7k]
  ------------------
 5768|    314|        tp = (PyTypeObject *)state->Break_type;
 5769|    314|        result = PyType_GenericNew(tp, NULL, NULL);
 5770|    314|        if (!result) goto failed;
  ------------------
  |  Branch (5770:13): [True: 0, False: 314]
  ------------------
 5771|    314|        break;
 5772|    314|    case Continue_kind:
  ------------------
  |  Branch (5772:5): [True: 209, False: 50.8k]
  ------------------
 5773|    209|        tp = (PyTypeObject *)state->Continue_type;
 5774|    209|        result = PyType_GenericNew(tp, NULL, NULL);
 5775|    209|        if (!result) goto failed;
  ------------------
  |  Branch (5775:13): [True: 0, False: 209]
  ------------------
 5776|    209|        break;
 5777|  51.0k|    }
 5778|  51.0k|    value = ast2obj_int(state, o->lineno);
 5779|  51.0k|    if (!value) goto failed;
  ------------------
  |  Branch (5779:9): [True: 0, False: 51.0k]
  ------------------
 5780|  51.0k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (5780:9): [True: 0, False: 51.0k]
  ------------------
 5781|      0|        goto failed;
 5782|  51.0k|    Py_DECREF(value);
  ------------------
  |  |  430|  51.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5783|  51.0k|    value = ast2obj_int(state, o->col_offset);
 5784|  51.0k|    if (!value) goto failed;
  ------------------
  |  Branch (5784:9): [True: 0, False: 51.0k]
  ------------------
 5785|  51.0k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (5785:9): [True: 0, False: 51.0k]
  ------------------
 5786|      0|        goto failed;
 5787|  51.0k|    Py_DECREF(value);
  ------------------
  |  |  430|  51.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5788|  51.0k|    value = ast2obj_int(state, o->end_lineno);
 5789|  51.0k|    if (!value) goto failed;
  ------------------
  |  Branch (5789:9): [True: 0, False: 51.0k]
  ------------------
 5790|  51.0k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (5790:9): [True: 0, False: 51.0k]
  ------------------
 5791|      0|        goto failed;
 5792|  51.0k|    Py_DECREF(value);
  ------------------
  |  |  430|  51.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5793|  51.0k|    value = ast2obj_int(state, o->end_col_offset);
 5794|  51.0k|    if (!value) goto failed;
  ------------------
  |  Branch (5794:9): [True: 0, False: 51.0k]
  ------------------
 5795|  51.0k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (5795:9): [True: 0, False: 51.0k]
  ------------------
 5796|      0|        goto failed;
 5797|  51.0k|    Py_DECREF(value);
  ------------------
  |  |  430|  51.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5798|  51.0k|    Py_LeaveRecursiveCall();
 5799|  51.0k|    return result;
 5800|      0|failed:
 5801|      0|    Py_LeaveRecursiveCall();
 5802|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5803|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5804|       |    return NULL;
 5805|  51.0k|}
Python-ast.c:ast2obj_object:
 2259|   315k|{
 2260|   315k|    PyObject *op = (PyObject*)o;
 2261|   315k|    if (!op) {
  ------------------
  |  Branch (2261:9): [True: 106k, False: 208k]
  ------------------
 2262|   106k|        op = Py_None;
  ------------------
  |  |  616|   106k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2263|   106k|    }
 2264|   315k|    return Py_NewRef(op);
  ------------------
  |  |  550|   315k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   315k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   315k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2265|   315k|}
Python-ast.c:ast2obj_arguments:
 6529|  2.42k|{
 6530|  2.42k|    arguments_ty o = (arguments_ty)_o;
 6531|  2.42k|    PyObject *result = NULL, *value = NULL;
 6532|  2.42k|    PyTypeObject *tp;
 6533|  2.42k|    if (!o) {
  ------------------
  |  Branch (6533:9): [True: 0, False: 2.42k]
  ------------------
 6534|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6535|      0|    }
 6536|  2.42k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6536:9): [True: 0, False: 2.42k]
  ------------------
 6537|      0|        return NULL;
 6538|      0|    }
 6539|  2.42k|    tp = (PyTypeObject *)state->arguments_type;
 6540|  2.42k|    result = PyType_GenericNew(tp, NULL, NULL);
 6541|  2.42k|    if (!result) return NULL;
  ------------------
  |  Branch (6541:9): [True: 0, False: 2.42k]
  ------------------
 6542|  2.42k|    value = ast2obj_list(state, (asdl_seq*)o->posonlyargs, ast2obj_arg);
 6543|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6543:9): [True: 0, False: 2.42k]
  ------------------
 6544|  2.42k|    if (PyObject_SetAttr(result, state->posonlyargs, value) == -1)
  ------------------
  |  Branch (6544:9): [True: 0, False: 2.42k]
  ------------------
 6545|      0|        goto failed;
 6546|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6547|  2.42k|    value = ast2obj_list(state, (asdl_seq*)o->args, ast2obj_arg);
 6548|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6548:9): [True: 0, False: 2.42k]
  ------------------
 6549|  2.42k|    if (PyObject_SetAttr(result, state->args, value) == -1)
  ------------------
  |  Branch (6549:9): [True: 0, False: 2.42k]
  ------------------
 6550|      0|        goto failed;
 6551|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6552|  2.42k|    value = ast2obj_arg(state, o->vararg);
 6553|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6553:9): [True: 0, False: 2.42k]
  ------------------
 6554|  2.42k|    if (PyObject_SetAttr(result, state->vararg, value) == -1)
  ------------------
  |  Branch (6554:9): [True: 0, False: 2.42k]
  ------------------
 6555|      0|        goto failed;
 6556|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6557|  2.42k|    value = ast2obj_list(state, (asdl_seq*)o->kwonlyargs, ast2obj_arg);
 6558|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6558:9): [True: 0, False: 2.42k]
  ------------------
 6559|  2.42k|    if (PyObject_SetAttr(result, state->kwonlyargs, value) == -1)
  ------------------
  |  Branch (6559:9): [True: 0, False: 2.42k]
  ------------------
 6560|      0|        goto failed;
 6561|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6562|  2.42k|    value = ast2obj_list(state, (asdl_seq*)o->kw_defaults, ast2obj_expr);
 6563|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6563:9): [True: 0, False: 2.42k]
  ------------------
 6564|  2.42k|    if (PyObject_SetAttr(result, state->kw_defaults, value) == -1)
  ------------------
  |  Branch (6564:9): [True: 0, False: 2.42k]
  ------------------
 6565|      0|        goto failed;
 6566|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6567|  2.42k|    value = ast2obj_arg(state, o->kwarg);
 6568|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6568:9): [True: 0, False: 2.42k]
  ------------------
 6569|  2.42k|    if (PyObject_SetAttr(result, state->kwarg, value) == -1)
  ------------------
  |  Branch (6569:9): [True: 0, False: 2.42k]
  ------------------
 6570|      0|        goto failed;
 6571|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6572|  2.42k|    value = ast2obj_list(state, (asdl_seq*)o->defaults, ast2obj_expr);
 6573|  2.42k|    if (!value) goto failed;
  ------------------
  |  Branch (6573:9): [True: 0, False: 2.42k]
  ------------------
 6574|  2.42k|    if (PyObject_SetAttr(result, state->defaults, value) == -1)
  ------------------
  |  Branch (6574:9): [True: 0, False: 2.42k]
  ------------------
 6575|      0|        goto failed;
 6576|  2.42k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6577|  2.42k|    Py_LeaveRecursiveCall();
 6578|  2.42k|    return result;
 6579|      0|failed:
 6580|      0|    Py_LeaveRecursiveCall();
 6581|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6582|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6583|       |    return NULL;
 6584|  2.42k|}
Python-ast.c:ast2obj_arg:
 6588|  6.95k|{
 6589|  6.95k|    arg_ty o = (arg_ty)_o;
 6590|  6.95k|    PyObject *result = NULL, *value = NULL;
 6591|  6.95k|    PyTypeObject *tp;
 6592|  6.95k|    if (!o) {
  ------------------
  |  Branch (6592:9): [True: 4.14k, False: 2.81k]
  ------------------
 6593|  4.14k|        Py_RETURN_NONE;
  ------------------
  |  |  628|  4.14k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  4.14k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6594|  4.14k|    }
 6595|  2.81k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6595:9): [True: 0, False: 2.81k]
  ------------------
 6596|      0|        return NULL;
 6597|      0|    }
 6598|  2.81k|    tp = (PyTypeObject *)state->arg_type;
 6599|  2.81k|    result = PyType_GenericNew(tp, NULL, NULL);
 6600|  2.81k|    if (!result) return NULL;
  ------------------
  |  Branch (6600:9): [True: 0, False: 2.81k]
  ------------------
 6601|  2.81k|    value = ast2obj_identifier(state, o->arg);
  ------------------
  |  | 2267|  2.81k|#define ast2obj_identifier ast2obj_object
  ------------------
 6602|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6602:9): [True: 0, False: 2.81k]
  ------------------
 6603|  2.81k|    if (PyObject_SetAttr(result, state->arg, value) == -1)
  ------------------
  |  Branch (6603:9): [True: 0, False: 2.81k]
  ------------------
 6604|      0|        goto failed;
 6605|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6606|  2.81k|    value = ast2obj_expr(state, o->annotation);
 6607|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6607:9): [True: 0, False: 2.81k]
  ------------------
 6608|  2.81k|    if (PyObject_SetAttr(result, state->annotation, value) == -1)
  ------------------
  |  Branch (6608:9): [True: 0, False: 2.81k]
  ------------------
 6609|      0|        goto failed;
 6610|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6611|  2.81k|    value = ast2obj_string(state, o->type_comment);
  ------------------
  |  | 2268|  2.81k|#define ast2obj_string ast2obj_object
  ------------------
 6612|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6612:9): [True: 0, False: 2.81k]
  ------------------
 6613|  2.81k|    if (PyObject_SetAttr(result, state->type_comment, value) == -1)
  ------------------
  |  Branch (6613:9): [True: 0, False: 2.81k]
  ------------------
 6614|      0|        goto failed;
 6615|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6616|  2.81k|    value = ast2obj_int(state, o->lineno);
 6617|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6617:9): [True: 0, False: 2.81k]
  ------------------
 6618|  2.81k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (6618:9): [True: 0, False: 2.81k]
  ------------------
 6619|      0|        goto failed;
 6620|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6621|  2.81k|    value = ast2obj_int(state, o->col_offset);
 6622|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6622:9): [True: 0, False: 2.81k]
  ------------------
 6623|  2.81k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (6623:9): [True: 0, False: 2.81k]
  ------------------
 6624|      0|        goto failed;
 6625|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6626|  2.81k|    value = ast2obj_int(state, o->end_lineno);
 6627|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6627:9): [True: 0, False: 2.81k]
  ------------------
 6628|  2.81k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (6628:9): [True: 0, False: 2.81k]
  ------------------
 6629|      0|        goto failed;
 6630|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6631|  2.81k|    value = ast2obj_int(state, o->end_col_offset);
 6632|  2.81k|    if (!value) goto failed;
  ------------------
  |  Branch (6632:9): [True: 0, False: 2.81k]
  ------------------
 6633|  2.81k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (6633:9): [True: 0, False: 2.81k]
  ------------------
 6634|      0|        goto failed;
 6635|  2.81k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.81k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6636|  2.81k|    Py_LeaveRecursiveCall();
 6637|  2.81k|    return result;
 6638|      0|failed:
 6639|      0|    Py_LeaveRecursiveCall();
 6640|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6641|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6642|       |    return NULL;
 6643|  2.81k|}
Python-ast.c:ast2obj_type_param:
 7026|  5.22k|{
 7027|  5.22k|    type_param_ty o = (type_param_ty)_o;
 7028|  5.22k|    PyObject *result = NULL, *value = NULL;
 7029|  5.22k|    PyTypeObject *tp;
 7030|  5.22k|    if (!o) {
  ------------------
  |  Branch (7030:9): [True: 0, False: 5.22k]
  ------------------
 7031|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 7032|      0|    }
 7033|  5.22k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (7033:9): [True: 0, False: 5.22k]
  ------------------
 7034|      0|        return NULL;
 7035|      0|    }
 7036|  5.22k|    switch (o->kind) {
  ------------------
  |  Branch (7036:13): [True: 5.22k, False: 0]
  ------------------
 7037|  4.98k|    case TypeVar_kind:
  ------------------
  |  Branch (7037:5): [True: 4.98k, False: 243]
  ------------------
 7038|  4.98k|        tp = (PyTypeObject *)state->TypeVar_type;
 7039|  4.98k|        result = PyType_GenericNew(tp, NULL, NULL);
 7040|  4.98k|        if (!result) goto failed;
  ------------------
  |  Branch (7040:13): [True: 0, False: 4.98k]
  ------------------
 7041|  4.98k|        value = ast2obj_identifier(state, o->v.TypeVar.name);
  ------------------
  |  | 2267|  4.98k|#define ast2obj_identifier ast2obj_object
  ------------------
 7042|  4.98k|        if (!value) goto failed;
  ------------------
  |  Branch (7042:13): [True: 0, False: 4.98k]
  ------------------
 7043|  4.98k|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (7043:13): [True: 0, False: 4.98k]
  ------------------
 7044|      0|            goto failed;
 7045|  4.98k|        Py_DECREF(value);
  ------------------
  |  |  430|  4.98k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7046|  4.98k|        value = ast2obj_expr(state, o->v.TypeVar.bound);
 7047|  4.98k|        if (!value) goto failed;
  ------------------
  |  Branch (7047:13): [True: 0, False: 4.98k]
  ------------------
 7048|  4.98k|        if (PyObject_SetAttr(result, state->bound, value) == -1)
  ------------------
  |  Branch (7048:13): [True: 0, False: 4.98k]
  ------------------
 7049|      0|            goto failed;
 7050|  4.98k|        Py_DECREF(value);
  ------------------
  |  |  430|  4.98k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7051|  4.98k|        value = ast2obj_expr(state, o->v.TypeVar.default_value);
 7052|  4.98k|        if (!value) goto failed;
  ------------------
  |  Branch (7052:13): [True: 0, False: 4.98k]
  ------------------
 7053|  4.98k|        if (PyObject_SetAttr(result, state->default_value, value) == -1)
  ------------------
  |  Branch (7053:13): [True: 0, False: 4.98k]
  ------------------
 7054|      0|            goto failed;
 7055|  4.98k|        Py_DECREF(value);
  ------------------
  |  |  430|  4.98k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.98k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.98k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7056|  4.98k|        break;
 7057|    164|    case ParamSpec_kind:
  ------------------
  |  Branch (7057:5): [True: 164, False: 5.06k]
  ------------------
 7058|    164|        tp = (PyTypeObject *)state->ParamSpec_type;
 7059|    164|        result = PyType_GenericNew(tp, NULL, NULL);
 7060|    164|        if (!result) goto failed;
  ------------------
  |  Branch (7060:13): [True: 0, False: 164]
  ------------------
 7061|    164|        value = ast2obj_identifier(state, o->v.ParamSpec.name);
  ------------------
  |  | 2267|    164|#define ast2obj_identifier ast2obj_object
  ------------------
 7062|    164|        if (!value) goto failed;
  ------------------
  |  Branch (7062:13): [True: 0, False: 164]
  ------------------
 7063|    164|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (7063:13): [True: 0, False: 164]
  ------------------
 7064|      0|            goto failed;
 7065|    164|        Py_DECREF(value);
  ------------------
  |  |  430|    164|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    164|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    164|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7066|    164|        value = ast2obj_expr(state, o->v.ParamSpec.default_value);
 7067|    164|        if (!value) goto failed;
  ------------------
  |  Branch (7067:13): [True: 0, False: 164]
  ------------------
 7068|    164|        if (PyObject_SetAttr(result, state->default_value, value) == -1)
  ------------------
  |  Branch (7068:13): [True: 0, False: 164]
  ------------------
 7069|      0|            goto failed;
 7070|    164|        Py_DECREF(value);
  ------------------
  |  |  430|    164|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    164|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    164|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7071|    164|        break;
 7072|     79|    case TypeVarTuple_kind:
  ------------------
  |  Branch (7072:5): [True: 79, False: 5.14k]
  ------------------
 7073|     79|        tp = (PyTypeObject *)state->TypeVarTuple_type;
 7074|     79|        result = PyType_GenericNew(tp, NULL, NULL);
 7075|     79|        if (!result) goto failed;
  ------------------
  |  Branch (7075:13): [True: 0, False: 79]
  ------------------
 7076|     79|        value = ast2obj_identifier(state, o->v.TypeVarTuple.name);
  ------------------
  |  | 2267|     79|#define ast2obj_identifier ast2obj_object
  ------------------
 7077|     79|        if (!value) goto failed;
  ------------------
  |  Branch (7077:13): [True: 0, False: 79]
  ------------------
 7078|     79|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (7078:13): [True: 0, False: 79]
  ------------------
 7079|      0|            goto failed;
 7080|     79|        Py_DECREF(value);
  ------------------
  |  |  430|     79|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7081|     79|        value = ast2obj_expr(state, o->v.TypeVarTuple.default_value);
 7082|     79|        if (!value) goto failed;
  ------------------
  |  Branch (7082:13): [True: 0, False: 79]
  ------------------
 7083|     79|        if (PyObject_SetAttr(result, state->default_value, value) == -1)
  ------------------
  |  Branch (7083:13): [True: 0, False: 79]
  ------------------
 7084|      0|            goto failed;
 7085|     79|        Py_DECREF(value);
  ------------------
  |  |  430|     79|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7086|     79|        break;
 7087|  5.22k|    }
 7088|  5.22k|    value = ast2obj_int(state, o->lineno);
 7089|  5.22k|    if (!value) goto failed;
  ------------------
  |  Branch (7089:9): [True: 0, False: 5.22k]
  ------------------
 7090|  5.22k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (7090:9): [True: 0, False: 5.22k]
  ------------------
 7091|      0|        goto failed;
 7092|  5.22k|    Py_DECREF(value);
  ------------------
  |  |  430|  5.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7093|  5.22k|    value = ast2obj_int(state, o->col_offset);
 7094|  5.22k|    if (!value) goto failed;
  ------------------
  |  Branch (7094:9): [True: 0, False: 5.22k]
  ------------------
 7095|  5.22k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (7095:9): [True: 0, False: 5.22k]
  ------------------
 7096|      0|        goto failed;
 7097|  5.22k|    Py_DECREF(value);
  ------------------
  |  |  430|  5.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7098|  5.22k|    value = ast2obj_int(state, o->end_lineno);
 7099|  5.22k|    if (!value) goto failed;
  ------------------
  |  Branch (7099:9): [True: 0, False: 5.22k]
  ------------------
 7100|  5.22k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (7100:9): [True: 0, False: 5.22k]
  ------------------
 7101|      0|        goto failed;
 7102|  5.22k|    Py_DECREF(value);
  ------------------
  |  |  430|  5.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7103|  5.22k|    value = ast2obj_int(state, o->end_col_offset);
 7104|  5.22k|    if (!value) goto failed;
  ------------------
  |  Branch (7104:9): [True: 0, False: 5.22k]
  ------------------
 7105|  5.22k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (7105:9): [True: 0, False: 5.22k]
  ------------------
 7106|      0|        goto failed;
 7107|  5.22k|    Py_DECREF(value);
  ------------------
  |  |  430|  5.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7108|  5.22k|    Py_LeaveRecursiveCall();
 7109|  5.22k|    return result;
 7110|      0|failed:
 7111|      0|    Py_LeaveRecursiveCall();
 7112|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7113|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7114|       |    return NULL;
 7115|  5.22k|}
Python-ast.c:ast2obj_keyword:
 6647|    883|{
 6648|    883|    keyword_ty o = (keyword_ty)_o;
 6649|    883|    PyObject *result = NULL, *value = NULL;
 6650|    883|    PyTypeObject *tp;
 6651|    883|    if (!o) {
  ------------------
  |  Branch (6651:9): [True: 0, False: 883]
  ------------------
 6652|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6653|      0|    }
 6654|    883|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6654:9): [True: 0, False: 883]
  ------------------
 6655|      0|        return NULL;
 6656|      0|    }
 6657|    883|    tp = (PyTypeObject *)state->keyword_type;
 6658|    883|    result = PyType_GenericNew(tp, NULL, NULL);
 6659|    883|    if (!result) return NULL;
  ------------------
  |  Branch (6659:9): [True: 0, False: 883]
  ------------------
 6660|    883|    value = ast2obj_identifier(state, o->arg);
  ------------------
  |  | 2267|    883|#define ast2obj_identifier ast2obj_object
  ------------------
 6661|    883|    if (!value) goto failed;
  ------------------
  |  Branch (6661:9): [True: 0, False: 883]
  ------------------
 6662|    883|    if (PyObject_SetAttr(result, state->arg, value) == -1)
  ------------------
  |  Branch (6662:9): [True: 0, False: 883]
  ------------------
 6663|      0|        goto failed;
 6664|    883|    Py_DECREF(value);
  ------------------
  |  |  430|    883|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    883|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    883|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6665|    883|    value = ast2obj_expr(state, o->value);
 6666|    883|    if (!value) goto failed;
  ------------------
  |  Branch (6666:9): [True: 0, False: 883]
  ------------------
 6667|    883|    if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6667:9): [True: 0, False: 883]
  ------------------
 6668|      0|        goto failed;
 6669|    883|    Py_DECREF(value);
  ------------------
  |  |  430|    883|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    883|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    883|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6670|    883|    value = ast2obj_int(state, o->lineno);
 6671|    883|    if (!value) goto failed;
  ------------------
  |  Branch (6671:9): [True: 0, False: 883]
  ------------------
 6672|    883|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (6672:9): [True: 0, False: 883]
  ------------------
 6673|      0|        goto failed;
 6674|    883|    Py_DECREF(value);
  ------------------
  |  |  430|    883|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    883|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    883|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6675|    883|    value = ast2obj_int(state, o->col_offset);
 6676|    883|    if (!value) goto failed;
  ------------------
  |  Branch (6676:9): [True: 0, False: 883]
  ------------------
 6677|    883|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (6677:9): [True: 0, False: 883]
  ------------------
 6678|      0|        goto failed;
 6679|    883|    Py_DECREF(value);
  ------------------
  |  |  430|    883|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    883|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    883|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6680|    883|    value = ast2obj_int(state, o->end_lineno);
 6681|    883|    if (!value) goto failed;
  ------------------
  |  Branch (6681:9): [True: 0, False: 883]
  ------------------
 6682|    883|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (6682:9): [True: 0, False: 883]
  ------------------
 6683|      0|        goto failed;
 6684|    883|    Py_DECREF(value);
  ------------------
  |  |  430|    883|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    883|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    883|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6685|    883|    value = ast2obj_int(state, o->end_col_offset);
 6686|    883|    if (!value) goto failed;
  ------------------
  |  Branch (6686:9): [True: 0, False: 883]
  ------------------
 6687|    883|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (6687:9): [True: 0, False: 883]
  ------------------
 6688|      0|        goto failed;
 6689|    883|    Py_DECREF(value);
  ------------------
  |  |  430|    883|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    883|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    883|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6690|    883|    Py_LeaveRecursiveCall();
 6691|    883|    return result;
 6692|      0|failed:
 6693|      0|    Py_LeaveRecursiveCall();
 6694|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6695|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6696|       |    return NULL;
 6697|    883|}
Python-ast.c:ast2obj_operator:
 6348|  87.4k|{
 6349|  87.4k|    switch(o) {
  ------------------
  |  Branch (6349:12): [True: 87.4k, False: 0]
  ------------------
 6350|  42.4k|        case Add:
  ------------------
  |  Branch (6350:9): [True: 42.4k, False: 45.0k]
  ------------------
 6351|  42.4k|            return Py_NewRef(state->Add_singleton);
  ------------------
  |  |  550|  42.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  42.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6352|  26.1k|        case Sub:
  ------------------
  |  Branch (6352:9): [True: 26.1k, False: 61.3k]
  ------------------
 6353|  26.1k|            return Py_NewRef(state->Sub_singleton);
  ------------------
  |  |  550|  26.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  26.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  26.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6354|  4.09k|        case Mult:
  ------------------
  |  Branch (6354:9): [True: 4.09k, False: 83.3k]
  ------------------
 6355|  4.09k|            return Py_NewRef(state->Mult_singleton);
  ------------------
  |  |  550|  4.09k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6356|    380|        case MatMult:
  ------------------
  |  Branch (6356:9): [True: 380, False: 87.1k]
  ------------------
 6357|    380|            return Py_NewRef(state->MatMult_singleton);
  ------------------
  |  |  550|    380|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    380|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    380|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6358|  2.32k|        case Div:
  ------------------
  |  Branch (6358:9): [True: 2.32k, False: 85.1k]
  ------------------
 6359|  2.32k|            return Py_NewRef(state->Div_singleton);
  ------------------
  |  |  550|  2.32k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.32k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.32k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6360|  4.62k|        case Mod:
  ------------------
  |  Branch (6360:9): [True: 4.62k, False: 82.8k]
  ------------------
 6361|  4.62k|            return Py_NewRef(state->Mod_singleton);
  ------------------
  |  |  550|  4.62k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.62k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.62k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6362|  2.19k|        case Pow:
  ------------------
  |  Branch (6362:9): [True: 2.19k, False: 85.2k]
  ------------------
 6363|  2.19k|            return Py_NewRef(state->Pow_singleton);
  ------------------
  |  |  550|  2.19k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6364|    379|        case LShift:
  ------------------
  |  Branch (6364:9): [True: 379, False: 87.1k]
  ------------------
 6365|    379|            return Py_NewRef(state->LShift_singleton);
  ------------------
  |  |  550|    379|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    379|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    379|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6366|    693|        case RShift:
  ------------------
  |  Branch (6366:9): [True: 693, False: 86.7k]
  ------------------
 6367|    693|            return Py_NewRef(state->RShift_singleton);
  ------------------
  |  |  550|    693|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    693|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    693|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6368|  2.68k|        case BitOr:
  ------------------
  |  Branch (6368:9): [True: 2.68k, False: 84.8k]
  ------------------
 6369|  2.68k|            return Py_NewRef(state->BitOr_singleton);
  ------------------
  |  |  550|  2.68k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6370|    609|        case BitXor:
  ------------------
  |  Branch (6370:9): [True: 609, False: 86.8k]
  ------------------
 6371|    609|            return Py_NewRef(state->BitXor_singleton);
  ------------------
  |  |  550|    609|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    609|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    609|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6372|    446|        case BitAnd:
  ------------------
  |  Branch (6372:9): [True: 446, False: 87.0k]
  ------------------
 6373|    446|            return Py_NewRef(state->BitAnd_singleton);
  ------------------
  |  |  550|    446|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    446|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    446|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6374|    515|        case FloorDiv:
  ------------------
  |  Branch (6374:9): [True: 515, False: 86.9k]
  ------------------
 6375|    515|            return Py_NewRef(state->FloorDiv_singleton);
  ------------------
  |  |  550|    515|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    515|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    515|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6376|  87.4k|    }
 6377|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 6378|  87.4k|}
Python-ast.c:ast2obj_int:
 2271|  1.62M|{
 2272|  1.62M|    return PyLong_FromLong(b);
 2273|  1.62M|}
Python-ast.c:ast2obj_withitem:
 6755|  1.77k|{
 6756|  1.77k|    withitem_ty o = (withitem_ty)_o;
 6757|  1.77k|    PyObject *result = NULL, *value = NULL;
 6758|  1.77k|    PyTypeObject *tp;
 6759|  1.77k|    if (!o) {
  ------------------
  |  Branch (6759:9): [True: 0, False: 1.77k]
  ------------------
 6760|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6761|      0|    }
 6762|  1.77k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6762:9): [True: 0, False: 1.77k]
  ------------------
 6763|      0|        return NULL;
 6764|      0|    }
 6765|  1.77k|    tp = (PyTypeObject *)state->withitem_type;
 6766|  1.77k|    result = PyType_GenericNew(tp, NULL, NULL);
 6767|  1.77k|    if (!result) return NULL;
  ------------------
  |  Branch (6767:9): [True: 0, False: 1.77k]
  ------------------
 6768|  1.77k|    value = ast2obj_expr(state, o->context_expr);
 6769|  1.77k|    if (!value) goto failed;
  ------------------
  |  Branch (6769:9): [True: 0, False: 1.77k]
  ------------------
 6770|  1.77k|    if (PyObject_SetAttr(result, state->context_expr, value) == -1)
  ------------------
  |  Branch (6770:9): [True: 0, False: 1.77k]
  ------------------
 6771|      0|        goto failed;
 6772|  1.77k|    Py_DECREF(value);
  ------------------
  |  |  430|  1.77k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.77k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.77k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6773|  1.77k|    value = ast2obj_expr(state, o->optional_vars);
 6774|  1.77k|    if (!value) goto failed;
  ------------------
  |  Branch (6774:9): [True: 0, False: 1.77k]
  ------------------
 6775|  1.77k|    if (PyObject_SetAttr(result, state->optional_vars, value) == -1)
  ------------------
  |  Branch (6775:9): [True: 0, False: 1.77k]
  ------------------
 6776|      0|        goto failed;
 6777|  1.77k|    Py_DECREF(value);
  ------------------
  |  |  430|  1.77k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.77k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.77k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6778|  1.77k|    Py_LeaveRecursiveCall();
 6779|  1.77k|    return result;
 6780|      0|failed:
 6781|      0|    Py_LeaveRecursiveCall();
 6782|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6783|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6784|       |    return NULL;
 6785|  1.77k|}
Python-ast.c:ast2obj_match_case:
 6789|    443|{
 6790|    443|    match_case_ty o = (match_case_ty)_o;
 6791|    443|    PyObject *result = NULL, *value = NULL;
 6792|    443|    PyTypeObject *tp;
 6793|    443|    if (!o) {
  ------------------
  |  Branch (6793:9): [True: 0, False: 443]
  ------------------
 6794|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6795|      0|    }
 6796|    443|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6796:9): [True: 0, False: 443]
  ------------------
 6797|      0|        return NULL;
 6798|      0|    }
 6799|    443|    tp = (PyTypeObject *)state->match_case_type;
 6800|    443|    result = PyType_GenericNew(tp, NULL, NULL);
 6801|    443|    if (!result) return NULL;
  ------------------
  |  Branch (6801:9): [True: 0, False: 443]
  ------------------
 6802|    443|    value = ast2obj_pattern(state, o->pattern);
 6803|    443|    if (!value) goto failed;
  ------------------
  |  Branch (6803:9): [True: 0, False: 443]
  ------------------
 6804|    443|    if (PyObject_SetAttr(result, state->pattern, value) == -1)
  ------------------
  |  Branch (6804:9): [True: 0, False: 443]
  ------------------
 6805|      0|        goto failed;
 6806|    443|    Py_DECREF(value);
  ------------------
  |  |  430|    443|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    443|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    443|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6807|    443|    value = ast2obj_expr(state, o->guard);
 6808|    443|    if (!value) goto failed;
  ------------------
  |  Branch (6808:9): [True: 0, False: 443]
  ------------------
 6809|    443|    if (PyObject_SetAttr(result, state->guard, value) == -1)
  ------------------
  |  Branch (6809:9): [True: 0, False: 443]
  ------------------
 6810|      0|        goto failed;
 6811|    443|    Py_DECREF(value);
  ------------------
  |  |  430|    443|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    443|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    443|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6812|    443|    value = ast2obj_list(state, (asdl_seq*)o->body, ast2obj_stmt);
 6813|    443|    if (!value) goto failed;
  ------------------
  |  Branch (6813:9): [True: 0, False: 443]
  ------------------
 6814|    443|    if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (6814:9): [True: 0, False: 443]
  ------------------
 6815|      0|        goto failed;
 6816|    443|    Py_DECREF(value);
  ------------------
  |  |  430|    443|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    443|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    443|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6817|    443|    Py_LeaveRecursiveCall();
 6818|    443|    return result;
 6819|      0|failed:
 6820|      0|    Py_LeaveRecursiveCall();
 6821|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6822|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6823|       |    return NULL;
 6824|    443|}
Python-ast.c:ast2obj_pattern:
 6828|  15.4k|{
 6829|  15.4k|    pattern_ty o = (pattern_ty)_o;
 6830|  15.4k|    PyObject *result = NULL, *value = NULL;
 6831|  15.4k|    PyTypeObject *tp;
 6832|  15.4k|    if (!o) {
  ------------------
  |  Branch (6832:9): [True: 5.95k, False: 9.46k]
  ------------------
 6833|  5.95k|        Py_RETURN_NONE;
  ------------------
  |  |  628|  5.95k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  5.95k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6834|  5.95k|    }
 6835|  9.46k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6835:9): [True: 0, False: 9.46k]
  ------------------
 6836|      0|        return NULL;
 6837|      0|    }
 6838|  9.46k|    switch (o->kind) {
  ------------------
  |  Branch (6838:13): [True: 9.46k, False: 0]
  ------------------
 6839|    910|    case MatchValue_kind:
  ------------------
  |  Branch (6839:5): [True: 910, False: 8.55k]
  ------------------
 6840|    910|        tp = (PyTypeObject *)state->MatchValue_type;
 6841|    910|        result = PyType_GenericNew(tp, NULL, NULL);
 6842|    910|        if (!result) goto failed;
  ------------------
  |  Branch (6842:13): [True: 0, False: 910]
  ------------------
 6843|    910|        value = ast2obj_expr(state, o->v.MatchValue.value);
 6844|    910|        if (!value) goto failed;
  ------------------
  |  Branch (6844:13): [True: 0, False: 910]
  ------------------
 6845|    910|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6845:13): [True: 0, False: 910]
  ------------------
 6846|      0|            goto failed;
 6847|    910|        Py_DECREF(value);
  ------------------
  |  |  430|    910|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    910|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    910|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6848|    910|        break;
 6849|    232|    case MatchSingleton_kind:
  ------------------
  |  Branch (6849:5): [True: 232, False: 9.23k]
  ------------------
 6850|    232|        tp = (PyTypeObject *)state->MatchSingleton_type;
 6851|    232|        result = PyType_GenericNew(tp, NULL, NULL);
 6852|    232|        if (!result) goto failed;
  ------------------
  |  Branch (6852:13): [True: 0, False: 232]
  ------------------
 6853|    232|        value = ast2obj_constant(state, o->v.MatchSingleton.value);
  ------------------
  |  | 2266|    232|#define ast2obj_constant ast2obj_object
  ------------------
 6854|    232|        if (!value) goto failed;
  ------------------
  |  Branch (6854:13): [True: 0, False: 232]
  ------------------
 6855|    232|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6855:13): [True: 0, False: 232]
  ------------------
 6856|      0|            goto failed;
 6857|    232|        Py_DECREF(value);
  ------------------
  |  |  430|    232|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    232|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    232|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6858|    232|        break;
 6859|    342|    case MatchSequence_kind:
  ------------------
  |  Branch (6859:5): [True: 342, False: 9.12k]
  ------------------
 6860|    342|        tp = (PyTypeObject *)state->MatchSequence_type;
 6861|    342|        result = PyType_GenericNew(tp, NULL, NULL);
 6862|    342|        if (!result) goto failed;
  ------------------
  |  Branch (6862:13): [True: 0, False: 342]
  ------------------
 6863|    342|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchSequence.patterns,
 6864|    342|                             ast2obj_pattern);
 6865|    342|        if (!value) goto failed;
  ------------------
  |  Branch (6865:13): [True: 0, False: 342]
  ------------------
 6866|    342|        if (PyObject_SetAttr(result, state->patterns, value) == -1)
  ------------------
  |  Branch (6866:13): [True: 0, False: 342]
  ------------------
 6867|      0|            goto failed;
 6868|    342|        Py_DECREF(value);
  ------------------
  |  |  430|    342|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    342|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    342|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6869|    342|        break;
 6870|      1|    case MatchMapping_kind:
  ------------------
  |  Branch (6870:5): [True: 1, False: 9.46k]
  ------------------
 6871|      1|        tp = (PyTypeObject *)state->MatchMapping_type;
 6872|      1|        result = PyType_GenericNew(tp, NULL, NULL);
 6873|      1|        if (!result) goto failed;
  ------------------
  |  Branch (6873:13): [True: 0, False: 1]
  ------------------
 6874|      1|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.keys,
 6875|      1|                             ast2obj_expr);
 6876|      1|        if (!value) goto failed;
  ------------------
  |  Branch (6876:13): [True: 0, False: 1]
  ------------------
 6877|      1|        if (PyObject_SetAttr(result, state->keys, value) == -1)
  ------------------
  |  Branch (6877:13): [True: 0, False: 1]
  ------------------
 6878|      0|            goto failed;
 6879|      1|        Py_DECREF(value);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6880|      1|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchMapping.patterns,
 6881|      1|                             ast2obj_pattern);
 6882|      1|        if (!value) goto failed;
  ------------------
  |  Branch (6882:13): [True: 0, False: 1]
  ------------------
 6883|      1|        if (PyObject_SetAttr(result, state->patterns, value) == -1)
  ------------------
  |  Branch (6883:13): [True: 0, False: 1]
  ------------------
 6884|      0|            goto failed;
 6885|      1|        Py_DECREF(value);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6886|      1|        value = ast2obj_identifier(state, o->v.MatchMapping.rest);
  ------------------
  |  | 2267|      1|#define ast2obj_identifier ast2obj_object
  ------------------
 6887|      1|        if (!value) goto failed;
  ------------------
  |  Branch (6887:13): [True: 0, False: 1]
  ------------------
 6888|      1|        if (PyObject_SetAttr(result, state->rest, value) == -1)
  ------------------
  |  Branch (6888:13): [True: 0, False: 1]
  ------------------
 6889|      0|            goto failed;
 6890|      1|        Py_DECREF(value);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6891|      1|        break;
 6892|    300|    case MatchClass_kind:
  ------------------
  |  Branch (6892:5): [True: 300, False: 9.16k]
  ------------------
 6893|    300|        tp = (PyTypeObject *)state->MatchClass_type;
 6894|    300|        result = PyType_GenericNew(tp, NULL, NULL);
 6895|    300|        if (!result) goto failed;
  ------------------
  |  Branch (6895:13): [True: 0, False: 300]
  ------------------
 6896|    300|        value = ast2obj_expr(state, o->v.MatchClass.cls);
 6897|    300|        if (!value) goto failed;
  ------------------
  |  Branch (6897:13): [True: 0, False: 300]
  ------------------
 6898|    300|        if (PyObject_SetAttr(result, state->cls, value) == -1)
  ------------------
  |  Branch (6898:13): [True: 0, False: 300]
  ------------------
 6899|      0|            goto failed;
 6900|    300|        Py_DECREF(value);
  ------------------
  |  |  430|    300|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    300|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    300|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6901|    300|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.patterns,
 6902|    300|                             ast2obj_pattern);
 6903|    300|        if (!value) goto failed;
  ------------------
  |  Branch (6903:13): [True: 0, False: 300]
  ------------------
 6904|    300|        if (PyObject_SetAttr(result, state->patterns, value) == -1)
  ------------------
  |  Branch (6904:13): [True: 0, False: 300]
  ------------------
 6905|      0|            goto failed;
 6906|    300|        Py_DECREF(value);
  ------------------
  |  |  430|    300|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    300|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    300|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6907|    300|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_attrs,
 6908|    300|                             ast2obj_identifier);
  ------------------
  |  | 2267|    300|#define ast2obj_identifier ast2obj_object
  ------------------
 6909|    300|        if (!value) goto failed;
  ------------------
  |  Branch (6909:13): [True: 0, False: 300]
  ------------------
 6910|    300|        if (PyObject_SetAttr(result, state->kwd_attrs, value) == -1)
  ------------------
  |  Branch (6910:13): [True: 0, False: 300]
  ------------------
 6911|      0|            goto failed;
 6912|    300|        Py_DECREF(value);
  ------------------
  |  |  430|    300|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    300|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    300|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6913|    300|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchClass.kwd_patterns,
 6914|    300|                             ast2obj_pattern);
 6915|    300|        if (!value) goto failed;
  ------------------
  |  Branch (6915:13): [True: 0, False: 300]
  ------------------
 6916|    300|        if (PyObject_SetAttr(result, state->kwd_patterns, value) == -1)
  ------------------
  |  Branch (6916:13): [True: 0, False: 300]
  ------------------
 6917|      0|            goto failed;
 6918|    300|        Py_DECREF(value);
  ------------------
  |  |  430|    300|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    300|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    300|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6919|    300|        break;
 6920|  1.33k|    case MatchStar_kind:
  ------------------
  |  Branch (6920:5): [True: 1.33k, False: 8.13k]
  ------------------
 6921|  1.33k|        tp = (PyTypeObject *)state->MatchStar_type;
 6922|  1.33k|        result = PyType_GenericNew(tp, NULL, NULL);
 6923|  1.33k|        if (!result) goto failed;
  ------------------
  |  Branch (6923:13): [True: 0, False: 1.33k]
  ------------------
 6924|  1.33k|        value = ast2obj_identifier(state, o->v.MatchStar.name);
  ------------------
  |  | 2267|  1.33k|#define ast2obj_identifier ast2obj_object
  ------------------
 6925|  1.33k|        if (!value) goto failed;
  ------------------
  |  Branch (6925:13): [True: 0, False: 1.33k]
  ------------------
 6926|  1.33k|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (6926:13): [True: 0, False: 1.33k]
  ------------------
 6927|      0|            goto failed;
 6928|  1.33k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.33k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.33k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.33k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6929|  1.33k|        break;
 6930|  6.02k|    case MatchAs_kind:
  ------------------
  |  Branch (6930:5): [True: 6.02k, False: 3.43k]
  ------------------
 6931|  6.02k|        tp = (PyTypeObject *)state->MatchAs_type;
 6932|  6.02k|        result = PyType_GenericNew(tp, NULL, NULL);
 6933|  6.02k|        if (!result) goto failed;
  ------------------
  |  Branch (6933:13): [True: 0, False: 6.02k]
  ------------------
 6934|  6.02k|        value = ast2obj_pattern(state, o->v.MatchAs.pattern);
 6935|  6.02k|        if (!value) goto failed;
  ------------------
  |  Branch (6935:13): [True: 0, False: 6.02k]
  ------------------
 6936|  6.02k|        if (PyObject_SetAttr(result, state->pattern, value) == -1)
  ------------------
  |  Branch (6936:13): [True: 0, False: 6.02k]
  ------------------
 6937|      0|            goto failed;
 6938|  6.02k|        Py_DECREF(value);
  ------------------
  |  |  430|  6.02k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6939|  6.02k|        value = ast2obj_identifier(state, o->v.MatchAs.name);
  ------------------
  |  | 2267|  6.02k|#define ast2obj_identifier ast2obj_object
  ------------------
 6940|  6.02k|        if (!value) goto failed;
  ------------------
  |  Branch (6940:13): [True: 0, False: 6.02k]
  ------------------
 6941|  6.02k|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (6941:13): [True: 0, False: 6.02k]
  ------------------
 6942|      0|            goto failed;
 6943|  6.02k|        Py_DECREF(value);
  ------------------
  |  |  430|  6.02k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6944|  6.02k|        break;
 6945|    319|    case MatchOr_kind:
  ------------------
  |  Branch (6945:5): [True: 319, False: 9.14k]
  ------------------
 6946|    319|        tp = (PyTypeObject *)state->MatchOr_type;
 6947|    319|        result = PyType_GenericNew(tp, NULL, NULL);
 6948|    319|        if (!result) goto failed;
  ------------------
  |  Branch (6948:13): [True: 0, False: 319]
  ------------------
 6949|    319|        value = ast2obj_list(state, (asdl_seq*)o->v.MatchOr.patterns,
 6950|    319|                             ast2obj_pattern);
 6951|    319|        if (!value) goto failed;
  ------------------
  |  Branch (6951:13): [True: 0, False: 319]
  ------------------
 6952|    319|        if (PyObject_SetAttr(result, state->patterns, value) == -1)
  ------------------
  |  Branch (6952:13): [True: 0, False: 319]
  ------------------
 6953|      0|            goto failed;
 6954|    319|        Py_DECREF(value);
  ------------------
  |  |  430|    319|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    319|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    319|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6955|    319|        break;
 6956|  9.46k|    }
 6957|  9.46k|    value = ast2obj_int(state, o->lineno);
 6958|  9.46k|    if (!value) goto failed;
  ------------------
  |  Branch (6958:9): [True: 0, False: 9.46k]
  ------------------
 6959|  9.46k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (6959:9): [True: 0, False: 9.46k]
  ------------------
 6960|      0|        goto failed;
 6961|  9.46k|    Py_DECREF(value);
  ------------------
  |  |  430|  9.46k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6962|  9.46k|    value = ast2obj_int(state, o->col_offset);
 6963|  9.46k|    if (!value) goto failed;
  ------------------
  |  Branch (6963:9): [True: 0, False: 9.46k]
  ------------------
 6964|  9.46k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (6964:9): [True: 0, False: 9.46k]
  ------------------
 6965|      0|        goto failed;
 6966|  9.46k|    Py_DECREF(value);
  ------------------
  |  |  430|  9.46k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6967|  9.46k|    value = ast2obj_int(state, o->end_lineno);
 6968|  9.46k|    if (!value) goto failed;
  ------------------
  |  Branch (6968:9): [True: 0, False: 9.46k]
  ------------------
 6969|  9.46k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (6969:9): [True: 0, False: 9.46k]
  ------------------
 6970|      0|        goto failed;
 6971|  9.46k|    Py_DECREF(value);
  ------------------
  |  |  430|  9.46k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6972|  9.46k|    value = ast2obj_int(state, o->end_col_offset);
 6973|  9.46k|    if (!value) goto failed;
  ------------------
  |  Branch (6973:9): [True: 0, False: 9.46k]
  ------------------
 6974|  9.46k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (6974:9): [True: 0, False: 9.46k]
  ------------------
 6975|      0|        goto failed;
 6976|  9.46k|    Py_DECREF(value);
  ------------------
  |  |  430|  9.46k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6977|  9.46k|    Py_LeaveRecursiveCall();
 6978|  9.46k|    return result;
 6979|      0|failed:
 6980|      0|    Py_LeaveRecursiveCall();
 6981|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6982|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6983|       |    return NULL;
 6984|  9.46k|}
Python-ast.c:ast2obj_excepthandler:
 6465|  1.37k|{
 6466|  1.37k|    excepthandler_ty o = (excepthandler_ty)_o;
 6467|  1.37k|    PyObject *result = NULL, *value = NULL;
 6468|  1.37k|    PyTypeObject *tp;
 6469|  1.37k|    if (!o) {
  ------------------
  |  Branch (6469:9): [True: 0, False: 1.37k]
  ------------------
 6470|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6471|      0|    }
 6472|  1.37k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6472:9): [True: 0, False: 1.37k]
  ------------------
 6473|      0|        return NULL;
 6474|      0|    }
 6475|  1.37k|    switch (o->kind) {
  ------------------
  |  Branch (6475:13): [True: 1.37k, False: 0]
  ------------------
 6476|  1.37k|    case ExceptHandler_kind:
  ------------------
  |  Branch (6476:5): [True: 1.37k, False: 0]
  ------------------
 6477|  1.37k|        tp = (PyTypeObject *)state->ExceptHandler_type;
 6478|  1.37k|        result = PyType_GenericNew(tp, NULL, NULL);
 6479|  1.37k|        if (!result) goto failed;
  ------------------
  |  Branch (6479:13): [True: 0, False: 1.37k]
  ------------------
 6480|  1.37k|        value = ast2obj_expr(state, o->v.ExceptHandler.type);
 6481|  1.37k|        if (!value) goto failed;
  ------------------
  |  Branch (6481:13): [True: 0, False: 1.37k]
  ------------------
 6482|  1.37k|        if (PyObject_SetAttr(result, state->type, value) == -1)
  ------------------
  |  Branch (6482:13): [True: 0, False: 1.37k]
  ------------------
 6483|      0|            goto failed;
 6484|  1.37k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6485|  1.37k|        value = ast2obj_identifier(state, o->v.ExceptHandler.name);
  ------------------
  |  | 2267|  1.37k|#define ast2obj_identifier ast2obj_object
  ------------------
 6486|  1.37k|        if (!value) goto failed;
  ------------------
  |  Branch (6486:13): [True: 0, False: 1.37k]
  ------------------
 6487|  1.37k|        if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (6487:13): [True: 0, False: 1.37k]
  ------------------
 6488|      0|            goto failed;
 6489|  1.37k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6490|  1.37k|        value = ast2obj_list(state, (asdl_seq*)o->v.ExceptHandler.body,
 6491|  1.37k|                             ast2obj_stmt);
 6492|  1.37k|        if (!value) goto failed;
  ------------------
  |  Branch (6492:13): [True: 0, False: 1.37k]
  ------------------
 6493|  1.37k|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (6493:13): [True: 0, False: 1.37k]
  ------------------
 6494|      0|            goto failed;
 6495|  1.37k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6496|  1.37k|        break;
 6497|  1.37k|    }
 6498|  1.37k|    value = ast2obj_int(state, o->lineno);
 6499|  1.37k|    if (!value) goto failed;
  ------------------
  |  Branch (6499:9): [True: 0, False: 1.37k]
  ------------------
 6500|  1.37k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (6500:9): [True: 0, False: 1.37k]
  ------------------
 6501|      0|        goto failed;
 6502|  1.37k|    Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6503|  1.37k|    value = ast2obj_int(state, o->col_offset);
 6504|  1.37k|    if (!value) goto failed;
  ------------------
  |  Branch (6504:9): [True: 0, False: 1.37k]
  ------------------
 6505|  1.37k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (6505:9): [True: 0, False: 1.37k]
  ------------------
 6506|      0|        goto failed;
 6507|  1.37k|    Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6508|  1.37k|    value = ast2obj_int(state, o->end_lineno);
 6509|  1.37k|    if (!value) goto failed;
  ------------------
  |  Branch (6509:9): [True: 0, False: 1.37k]
  ------------------
 6510|  1.37k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (6510:9): [True: 0, False: 1.37k]
  ------------------
 6511|      0|        goto failed;
 6512|  1.37k|    Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6513|  1.37k|    value = ast2obj_int(state, o->end_col_offset);
 6514|  1.37k|    if (!value) goto failed;
  ------------------
  |  Branch (6514:9): [True: 0, False: 1.37k]
  ------------------
 6515|  1.37k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (6515:9): [True: 0, False: 1.37k]
  ------------------
 6516|      0|        goto failed;
 6517|  1.37k|    Py_DECREF(value);
  ------------------
  |  |  430|  1.37k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.37k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.37k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6518|  1.37k|    Py_LeaveRecursiveCall();
 6519|  1.37k|    return result;
 6520|      0|failed:
 6521|      0|    Py_LeaveRecursiveCall();
 6522|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6523|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6524|       |    return NULL;
 6525|  1.37k|}
Python-ast.c:ast2obj_alias:
 6701|  2.57k|{
 6702|  2.57k|    alias_ty o = (alias_ty)_o;
 6703|  2.57k|    PyObject *result = NULL, *value = NULL;
 6704|  2.57k|    PyTypeObject *tp;
 6705|  2.57k|    if (!o) {
  ------------------
  |  Branch (6705:9): [True: 0, False: 2.57k]
  ------------------
 6706|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6707|      0|    }
 6708|  2.57k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6708:9): [True: 0, False: 2.57k]
  ------------------
 6709|      0|        return NULL;
 6710|      0|    }
 6711|  2.57k|    tp = (PyTypeObject *)state->alias_type;
 6712|  2.57k|    result = PyType_GenericNew(tp, NULL, NULL);
 6713|  2.57k|    if (!result) return NULL;
  ------------------
  |  Branch (6713:9): [True: 0, False: 2.57k]
  ------------------
 6714|  2.57k|    value = ast2obj_identifier(state, o->name);
  ------------------
  |  | 2267|  2.57k|#define ast2obj_identifier ast2obj_object
  ------------------
 6715|  2.57k|    if (!value) goto failed;
  ------------------
  |  Branch (6715:9): [True: 0, False: 2.57k]
  ------------------
 6716|  2.57k|    if (PyObject_SetAttr(result, state->name, value) == -1)
  ------------------
  |  Branch (6716:9): [True: 0, False: 2.57k]
  ------------------
 6717|      0|        goto failed;
 6718|  2.57k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6719|  2.57k|    value = ast2obj_identifier(state, o->asname);
  ------------------
  |  | 2267|  2.57k|#define ast2obj_identifier ast2obj_object
  ------------------
 6720|  2.57k|    if (!value) goto failed;
  ------------------
  |  Branch (6720:9): [True: 0, False: 2.57k]
  ------------------
 6721|  2.57k|    if (PyObject_SetAttr(result, state->asname, value) == -1)
  ------------------
  |  Branch (6721:9): [True: 0, False: 2.57k]
  ------------------
 6722|      0|        goto failed;
 6723|  2.57k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6724|  2.57k|    value = ast2obj_int(state, o->lineno);
 6725|  2.57k|    if (!value) goto failed;
  ------------------
  |  Branch (6725:9): [True: 0, False: 2.57k]
  ------------------
 6726|  2.57k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (6726:9): [True: 0, False: 2.57k]
  ------------------
 6727|      0|        goto failed;
 6728|  2.57k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6729|  2.57k|    value = ast2obj_int(state, o->col_offset);
 6730|  2.57k|    if (!value) goto failed;
  ------------------
  |  Branch (6730:9): [True: 0, False: 2.57k]
  ------------------
 6731|  2.57k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (6731:9): [True: 0, False: 2.57k]
  ------------------
 6732|      0|        goto failed;
 6733|  2.57k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6734|  2.57k|    value = ast2obj_int(state, o->end_lineno);
 6735|  2.57k|    if (!value) goto failed;
  ------------------
  |  Branch (6735:9): [True: 0, False: 2.57k]
  ------------------
 6736|  2.57k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (6736:9): [True: 0, False: 2.57k]
  ------------------
 6737|      0|        goto failed;
 6738|  2.57k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6739|  2.57k|    value = ast2obj_int(state, o->end_col_offset);
 6740|  2.57k|    if (!value) goto failed;
  ------------------
  |  Branch (6740:9): [True: 0, False: 2.57k]
  ------------------
 6741|  2.57k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (6741:9): [True: 0, False: 2.57k]
  ------------------
 6742|      0|        goto failed;
 6743|  2.57k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6744|  2.57k|    Py_LeaveRecursiveCall();
 6745|  2.57k|    return result;
 6746|      0|failed:
 6747|      0|    Py_LeaveRecursiveCall();
 6748|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6749|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6750|       |    return NULL;
 6751|  2.57k|}
Python-ast.c:ast2obj_type_ignore:
 6988|    789|{
 6989|    789|    type_ignore_ty o = (type_ignore_ty)_o;
 6990|    789|    PyObject *result = NULL, *value = NULL;
 6991|    789|    PyTypeObject *tp;
 6992|    789|    if (!o) {
  ------------------
  |  Branch (6992:9): [True: 0, False: 789]
  ------------------
 6993|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6994|      0|    }
 6995|    789|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6995:9): [True: 0, False: 789]
  ------------------
 6996|      0|        return NULL;
 6997|      0|    }
 6998|    789|    switch (o->kind) {
  ------------------
  |  Branch (6998:13): [True: 789, False: 0]
  ------------------
 6999|    789|    case TypeIgnore_kind:
  ------------------
  |  Branch (6999:5): [True: 789, False: 0]
  ------------------
 7000|    789|        tp = (PyTypeObject *)state->TypeIgnore_type;
 7001|    789|        result = PyType_GenericNew(tp, NULL, NULL);
 7002|    789|        if (!result) goto failed;
  ------------------
  |  Branch (7002:13): [True: 0, False: 789]
  ------------------
 7003|    789|        value = ast2obj_int(state, o->v.TypeIgnore.lineno);
 7004|    789|        if (!value) goto failed;
  ------------------
  |  Branch (7004:13): [True: 0, False: 789]
  ------------------
 7005|    789|        if (PyObject_SetAttr(result, state->lineno, value) == -1)
  ------------------
  |  Branch (7005:13): [True: 0, False: 789]
  ------------------
 7006|      0|            goto failed;
 7007|    789|        Py_DECREF(value);
  ------------------
  |  |  430|    789|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    789|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    789|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7008|    789|        value = ast2obj_string(state, o->v.TypeIgnore.tag);
  ------------------
  |  | 2268|    789|#define ast2obj_string ast2obj_object
  ------------------
 7009|    789|        if (!value) goto failed;
  ------------------
  |  Branch (7009:13): [True: 0, False: 789]
  ------------------
 7010|    789|        if (PyObject_SetAttr(result, state->tag, value) == -1)
  ------------------
  |  Branch (7010:13): [True: 0, False: 789]
  ------------------
 7011|      0|            goto failed;
 7012|    789|        Py_DECREF(value);
  ------------------
  |  |  430|    789|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    789|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    789|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7013|    789|        break;
 7014|    789|    }
 7015|    789|    Py_LeaveRecursiveCall();
 7016|    789|    return result;
 7017|      0|failed:
 7018|      0|    Py_LeaveRecursiveCall();
 7019|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7020|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7021|       |    return NULL;
 7022|    789|}
Python-ast.c:ast2obj_expr:
 5809|   353k|{
 5810|   353k|    expr_ty o = (expr_ty)_o;
 5811|   353k|    PyObject *result = NULL, *value = NULL;
 5812|   353k|    PyTypeObject *tp;
 5813|   353k|    if (!o) {
  ------------------
  |  Branch (5813:9): [True: 22.1k, False: 331k]
  ------------------
 5814|  22.1k|        Py_RETURN_NONE;
  ------------------
  |  |  628|  22.1k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  22.1k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5815|  22.1k|    }
 5816|   331k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (5816:9): [True: 0, False: 331k]
  ------------------
 5817|      0|        return NULL;
 5818|      0|    }
 5819|   331k|    switch (o->kind) {
  ------------------
  |  Branch (5819:13): [True: 331k, False: 0]
  ------------------
 5820|    702|    case BoolOp_kind:
  ------------------
  |  Branch (5820:5): [True: 702, False: 330k]
  ------------------
 5821|    702|        tp = (PyTypeObject *)state->BoolOp_type;
 5822|    702|        result = PyType_GenericNew(tp, NULL, NULL);
 5823|    702|        if (!result) goto failed;
  ------------------
  |  Branch (5823:13): [True: 0, False: 702]
  ------------------
 5824|    702|        value = ast2obj_boolop(state, o->v.BoolOp.op);
 5825|    702|        if (!value) goto failed;
  ------------------
  |  Branch (5825:13): [True: 0, False: 702]
  ------------------
 5826|    702|        if (PyObject_SetAttr(result, state->op, value) == -1)
  ------------------
  |  Branch (5826:13): [True: 0, False: 702]
  ------------------
 5827|      0|            goto failed;
 5828|    702|        Py_DECREF(value);
  ------------------
  |  |  430|    702|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    702|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    702|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5829|    702|        value = ast2obj_list(state, (asdl_seq*)o->v.BoolOp.values,
 5830|    702|                             ast2obj_expr);
 5831|    702|        if (!value) goto failed;
  ------------------
  |  Branch (5831:13): [True: 0, False: 702]
  ------------------
 5832|    702|        if (PyObject_SetAttr(result, state->values, value) == -1)
  ------------------
  |  Branch (5832:13): [True: 0, False: 702]
  ------------------
 5833|      0|            goto failed;
 5834|    702|        Py_DECREF(value);
  ------------------
  |  |  430|    702|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    702|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    702|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5835|    702|        break;
 5836|    228|    case NamedExpr_kind:
  ------------------
  |  Branch (5836:5): [True: 228, False: 330k]
  ------------------
 5837|    228|        tp = (PyTypeObject *)state->NamedExpr_type;
 5838|    228|        result = PyType_GenericNew(tp, NULL, NULL);
 5839|    228|        if (!result) goto failed;
  ------------------
  |  Branch (5839:13): [True: 0, False: 228]
  ------------------
 5840|    228|        value = ast2obj_expr(state, o->v.NamedExpr.target);
 5841|    228|        if (!value) goto failed;
  ------------------
  |  Branch (5841:13): [True: 0, False: 228]
  ------------------
 5842|    228|        if (PyObject_SetAttr(result, state->target, value) == -1)
  ------------------
  |  Branch (5842:13): [True: 0, False: 228]
  ------------------
 5843|      0|            goto failed;
 5844|    228|        Py_DECREF(value);
  ------------------
  |  |  430|    228|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    228|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    228|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5845|    228|        value = ast2obj_expr(state, o->v.NamedExpr.value);
 5846|    228|        if (!value) goto failed;
  ------------------
  |  Branch (5846:13): [True: 0, False: 228]
  ------------------
 5847|    228|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5847:13): [True: 0, False: 228]
  ------------------
 5848|      0|            goto failed;
 5849|    228|        Py_DECREF(value);
  ------------------
  |  |  430|    228|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    228|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    228|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5850|    228|        break;
 5851|  86.4k|    case BinOp_kind:
  ------------------
  |  Branch (5851:5): [True: 86.4k, False: 244k]
  ------------------
 5852|  86.4k|        tp = (PyTypeObject *)state->BinOp_type;
 5853|  86.4k|        result = PyType_GenericNew(tp, NULL, NULL);
 5854|  86.4k|        if (!result) goto failed;
  ------------------
  |  Branch (5854:13): [True: 0, False: 86.4k]
  ------------------
 5855|  86.4k|        value = ast2obj_expr(state, o->v.BinOp.left);
 5856|  86.4k|        if (!value) goto failed;
  ------------------
  |  Branch (5856:13): [True: 0, False: 86.4k]
  ------------------
 5857|  86.4k|        if (PyObject_SetAttr(result, state->left, value) == -1)
  ------------------
  |  Branch (5857:13): [True: 0, False: 86.4k]
  ------------------
 5858|      0|            goto failed;
 5859|  86.4k|        Py_DECREF(value);
  ------------------
  |  |  430|  86.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  86.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  86.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5860|  86.4k|        value = ast2obj_operator(state, o->v.BinOp.op);
 5861|  86.4k|        if (!value) goto failed;
  ------------------
  |  Branch (5861:13): [True: 0, False: 86.4k]
  ------------------
 5862|  86.4k|        if (PyObject_SetAttr(result, state->op, value) == -1)
  ------------------
  |  Branch (5862:13): [True: 0, False: 86.4k]
  ------------------
 5863|      0|            goto failed;
 5864|  86.4k|        Py_DECREF(value);
  ------------------
  |  |  430|  86.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  86.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  86.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5865|  86.4k|        value = ast2obj_expr(state, o->v.BinOp.right);
 5866|  86.4k|        if (!value) goto failed;
  ------------------
  |  Branch (5866:13): [True: 0, False: 86.4k]
  ------------------
 5867|  86.4k|        if (PyObject_SetAttr(result, state->right, value) == -1)
  ------------------
  |  Branch (5867:13): [True: 0, False: 86.4k]
  ------------------
 5868|      0|            goto failed;
 5869|  86.4k|        Py_DECREF(value);
  ------------------
  |  |  430|  86.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  86.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  86.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5870|  86.4k|        break;
 5871|  32.5k|    case UnaryOp_kind:
  ------------------
  |  Branch (5871:5): [True: 32.5k, False: 298k]
  ------------------
 5872|  32.5k|        tp = (PyTypeObject *)state->UnaryOp_type;
 5873|  32.5k|        result = PyType_GenericNew(tp, NULL, NULL);
 5874|  32.5k|        if (!result) goto failed;
  ------------------
  |  Branch (5874:13): [True: 0, False: 32.5k]
  ------------------
 5875|  32.5k|        value = ast2obj_unaryop(state, o->v.UnaryOp.op);
 5876|  32.5k|        if (!value) goto failed;
  ------------------
  |  Branch (5876:13): [True: 0, False: 32.5k]
  ------------------
 5877|  32.5k|        if (PyObject_SetAttr(result, state->op, value) == -1)
  ------------------
  |  Branch (5877:13): [True: 0, False: 32.5k]
  ------------------
 5878|      0|            goto failed;
 5879|  32.5k|        Py_DECREF(value);
  ------------------
  |  |  430|  32.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5880|  32.5k|        value = ast2obj_expr(state, o->v.UnaryOp.operand);
 5881|  32.5k|        if (!value) goto failed;
  ------------------
  |  Branch (5881:13): [True: 0, False: 32.5k]
  ------------------
 5882|  32.5k|        if (PyObject_SetAttr(result, state->operand, value) == -1)
  ------------------
  |  Branch (5882:13): [True: 0, False: 32.5k]
  ------------------
 5883|      0|            goto failed;
 5884|  32.5k|        Py_DECREF(value);
  ------------------
  |  |  430|  32.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5885|  32.5k|        break;
 5886|    583|    case Lambda_kind:
  ------------------
  |  Branch (5886:5): [True: 583, False: 330k]
  ------------------
 5887|    583|        tp = (PyTypeObject *)state->Lambda_type;
 5888|    583|        result = PyType_GenericNew(tp, NULL, NULL);
 5889|    583|        if (!result) goto failed;
  ------------------
  |  Branch (5889:13): [True: 0, False: 583]
  ------------------
 5890|    583|        value = ast2obj_arguments(state, o->v.Lambda.args);
 5891|    583|        if (!value) goto failed;
  ------------------
  |  Branch (5891:13): [True: 0, False: 583]
  ------------------
 5892|    583|        if (PyObject_SetAttr(result, state->args, value) == -1)
  ------------------
  |  Branch (5892:13): [True: 0, False: 583]
  ------------------
 5893|      0|            goto failed;
 5894|    583|        Py_DECREF(value);
  ------------------
  |  |  430|    583|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    583|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    583|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5895|    583|        value = ast2obj_expr(state, o->v.Lambda.body);
 5896|    583|        if (!value) goto failed;
  ------------------
  |  Branch (5896:13): [True: 0, False: 583]
  ------------------
 5897|    583|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5897:13): [True: 0, False: 583]
  ------------------
 5898|      0|            goto failed;
 5899|    583|        Py_DECREF(value);
  ------------------
  |  |  430|    583|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    583|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    583|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5900|    583|        break;
 5901|    314|    case IfExp_kind:
  ------------------
  |  Branch (5901:5): [True: 314, False: 330k]
  ------------------
 5902|    314|        tp = (PyTypeObject *)state->IfExp_type;
 5903|    314|        result = PyType_GenericNew(tp, NULL, NULL);
 5904|    314|        if (!result) goto failed;
  ------------------
  |  Branch (5904:13): [True: 0, False: 314]
  ------------------
 5905|    314|        value = ast2obj_expr(state, o->v.IfExp.test);
 5906|    314|        if (!value) goto failed;
  ------------------
  |  Branch (5906:13): [True: 0, False: 314]
  ------------------
 5907|    314|        if (PyObject_SetAttr(result, state->test, value) == -1)
  ------------------
  |  Branch (5907:13): [True: 0, False: 314]
  ------------------
 5908|      0|            goto failed;
 5909|    314|        Py_DECREF(value);
  ------------------
  |  |  430|    314|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    314|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    314|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5910|    314|        value = ast2obj_expr(state, o->v.IfExp.body);
 5911|    314|        if (!value) goto failed;
  ------------------
  |  Branch (5911:13): [True: 0, False: 314]
  ------------------
 5912|    314|        if (PyObject_SetAttr(result, state->body, value) == -1)
  ------------------
  |  Branch (5912:13): [True: 0, False: 314]
  ------------------
 5913|      0|            goto failed;
 5914|    314|        Py_DECREF(value);
  ------------------
  |  |  430|    314|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    314|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    314|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5915|    314|        value = ast2obj_expr(state, o->v.IfExp.orelse);
 5916|    314|        if (!value) goto failed;
  ------------------
  |  Branch (5916:13): [True: 0, False: 314]
  ------------------
 5917|    314|        if (PyObject_SetAttr(result, state->orelse, value) == -1)
  ------------------
  |  Branch (5917:13): [True: 0, False: 314]
  ------------------
 5918|      0|            goto failed;
 5919|    314|        Py_DECREF(value);
  ------------------
  |  |  430|    314|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    314|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    314|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5920|    314|        break;
 5921|    104|    case Dict_kind:
  ------------------
  |  Branch (5921:5): [True: 104, False: 331k]
  ------------------
 5922|    104|        tp = (PyTypeObject *)state->Dict_type;
 5923|    104|        result = PyType_GenericNew(tp, NULL, NULL);
 5924|    104|        if (!result) goto failed;
  ------------------
  |  Branch (5924:13): [True: 0, False: 104]
  ------------------
 5925|    104|        value = ast2obj_list(state, (asdl_seq*)o->v.Dict.keys, ast2obj_expr);
 5926|    104|        if (!value) goto failed;
  ------------------
  |  Branch (5926:13): [True: 0, False: 104]
  ------------------
 5927|    104|        if (PyObject_SetAttr(result, state->keys, value) == -1)
  ------------------
  |  Branch (5927:13): [True: 0, False: 104]
  ------------------
 5928|      0|            goto failed;
 5929|    104|        Py_DECREF(value);
  ------------------
  |  |  430|    104|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5930|    104|        value = ast2obj_list(state, (asdl_seq*)o->v.Dict.values, ast2obj_expr);
 5931|    104|        if (!value) goto failed;
  ------------------
  |  Branch (5931:13): [True: 0, False: 104]
  ------------------
 5932|    104|        if (PyObject_SetAttr(result, state->values, value) == -1)
  ------------------
  |  Branch (5932:13): [True: 0, False: 104]
  ------------------
 5933|      0|            goto failed;
 5934|    104|        Py_DECREF(value);
  ------------------
  |  |  430|    104|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5935|    104|        break;
 5936|    431|    case Set_kind:
  ------------------
  |  Branch (5936:5): [True: 431, False: 330k]
  ------------------
 5937|    431|        tp = (PyTypeObject *)state->Set_type;
 5938|    431|        result = PyType_GenericNew(tp, NULL, NULL);
 5939|    431|        if (!result) goto failed;
  ------------------
  |  Branch (5939:13): [True: 0, False: 431]
  ------------------
 5940|    431|        value = ast2obj_list(state, (asdl_seq*)o->v.Set.elts, ast2obj_expr);
 5941|    431|        if (!value) goto failed;
  ------------------
  |  Branch (5941:13): [True: 0, False: 431]
  ------------------
 5942|    431|        if (PyObject_SetAttr(result, state->elts, value) == -1)
  ------------------
  |  Branch (5942:13): [True: 0, False: 431]
  ------------------
 5943|      0|            goto failed;
 5944|    431|        Py_DECREF(value);
  ------------------
  |  |  430|    431|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    431|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    431|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5945|    431|        break;
 5946|  1.42k|    case ListComp_kind:
  ------------------
  |  Branch (5946:5): [True: 1.42k, False: 329k]
  ------------------
 5947|  1.42k|        tp = (PyTypeObject *)state->ListComp_type;
 5948|  1.42k|        result = PyType_GenericNew(tp, NULL, NULL);
 5949|  1.42k|        if (!result) goto failed;
  ------------------
  |  Branch (5949:13): [True: 0, False: 1.42k]
  ------------------
 5950|  1.42k|        value = ast2obj_expr(state, o->v.ListComp.elt);
 5951|  1.42k|        if (!value) goto failed;
  ------------------
  |  Branch (5951:13): [True: 0, False: 1.42k]
  ------------------
 5952|  1.42k|        if (PyObject_SetAttr(result, state->elt, value) == -1)
  ------------------
  |  Branch (5952:13): [True: 0, False: 1.42k]
  ------------------
 5953|      0|            goto failed;
 5954|  1.42k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5955|  1.42k|        value = ast2obj_list(state, (asdl_seq*)o->v.ListComp.generators,
 5956|  1.42k|                             ast2obj_comprehension);
 5957|  1.42k|        if (!value) goto failed;
  ------------------
  |  Branch (5957:13): [True: 0, False: 1.42k]
  ------------------
 5958|  1.42k|        if (PyObject_SetAttr(result, state->generators, value) == -1)
  ------------------
  |  Branch (5958:13): [True: 0, False: 1.42k]
  ------------------
 5959|      0|            goto failed;
 5960|  1.42k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5961|  1.42k|        break;
 5962|    353|    case SetComp_kind:
  ------------------
  |  Branch (5962:5): [True: 353, False: 330k]
  ------------------
 5963|    353|        tp = (PyTypeObject *)state->SetComp_type;
 5964|    353|        result = PyType_GenericNew(tp, NULL, NULL);
 5965|    353|        if (!result) goto failed;
  ------------------
  |  Branch (5965:13): [True: 0, False: 353]
  ------------------
 5966|    353|        value = ast2obj_expr(state, o->v.SetComp.elt);
 5967|    353|        if (!value) goto failed;
  ------------------
  |  Branch (5967:13): [True: 0, False: 353]
  ------------------
 5968|    353|        if (PyObject_SetAttr(result, state->elt, value) == -1)
  ------------------
  |  Branch (5968:13): [True: 0, False: 353]
  ------------------
 5969|      0|            goto failed;
 5970|    353|        Py_DECREF(value);
  ------------------
  |  |  430|    353|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    353|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    353|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5971|    353|        value = ast2obj_list(state, (asdl_seq*)o->v.SetComp.generators,
 5972|    353|                             ast2obj_comprehension);
 5973|    353|        if (!value) goto failed;
  ------------------
  |  Branch (5973:13): [True: 0, False: 353]
  ------------------
 5974|    353|        if (PyObject_SetAttr(result, state->generators, value) == -1)
  ------------------
  |  Branch (5974:13): [True: 0, False: 353]
  ------------------
 5975|      0|            goto failed;
 5976|    353|        Py_DECREF(value);
  ------------------
  |  |  430|    353|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    353|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    353|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5977|    353|        break;
 5978|    202|    case DictComp_kind:
  ------------------
  |  Branch (5978:5): [True: 202, False: 330k]
  ------------------
 5979|    202|        tp = (PyTypeObject *)state->DictComp_type;
 5980|    202|        result = PyType_GenericNew(tp, NULL, NULL);
 5981|    202|        if (!result) goto failed;
  ------------------
  |  Branch (5981:13): [True: 0, False: 202]
  ------------------
 5982|    202|        value = ast2obj_expr(state, o->v.DictComp.key);
 5983|    202|        if (!value) goto failed;
  ------------------
  |  Branch (5983:13): [True: 0, False: 202]
  ------------------
 5984|    202|        if (PyObject_SetAttr(result, state->key, value) == -1)
  ------------------
  |  Branch (5984:13): [True: 0, False: 202]
  ------------------
 5985|      0|            goto failed;
 5986|    202|        Py_DECREF(value);
  ------------------
  |  |  430|    202|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    202|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    202|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5987|    202|        value = ast2obj_expr(state, o->v.DictComp.value);
 5988|    202|        if (!value) goto failed;
  ------------------
  |  Branch (5988:13): [True: 0, False: 202]
  ------------------
 5989|    202|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (5989:13): [True: 0, False: 202]
  ------------------
 5990|      0|            goto failed;
 5991|    202|        Py_DECREF(value);
  ------------------
  |  |  430|    202|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    202|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    202|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5992|    202|        value = ast2obj_list(state, (asdl_seq*)o->v.DictComp.generators,
 5993|    202|                             ast2obj_comprehension);
 5994|    202|        if (!value) goto failed;
  ------------------
  |  Branch (5994:13): [True: 0, False: 202]
  ------------------
 5995|    202|        if (PyObject_SetAttr(result, state->generators, value) == -1)
  ------------------
  |  Branch (5995:13): [True: 0, False: 202]
  ------------------
 5996|      0|            goto failed;
 5997|    202|        Py_DECREF(value);
  ------------------
  |  |  430|    202|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    202|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    202|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5998|    202|        break;
 5999|    213|    case GeneratorExp_kind:
  ------------------
  |  Branch (5999:5): [True: 213, False: 330k]
  ------------------
 6000|    213|        tp = (PyTypeObject *)state->GeneratorExp_type;
 6001|    213|        result = PyType_GenericNew(tp, NULL, NULL);
 6002|    213|        if (!result) goto failed;
  ------------------
  |  Branch (6002:13): [True: 0, False: 213]
  ------------------
 6003|    213|        value = ast2obj_expr(state, o->v.GeneratorExp.elt);
 6004|    213|        if (!value) goto failed;
  ------------------
  |  Branch (6004:13): [True: 0, False: 213]
  ------------------
 6005|    213|        if (PyObject_SetAttr(result, state->elt, value) == -1)
  ------------------
  |  Branch (6005:13): [True: 0, False: 213]
  ------------------
 6006|      0|            goto failed;
 6007|    213|        Py_DECREF(value);
  ------------------
  |  |  430|    213|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6008|    213|        value = ast2obj_list(state, (asdl_seq*)o->v.GeneratorExp.generators,
 6009|    213|                             ast2obj_comprehension);
 6010|    213|        if (!value) goto failed;
  ------------------
  |  Branch (6010:13): [True: 0, False: 213]
  ------------------
 6011|    213|        if (PyObject_SetAttr(result, state->generators, value) == -1)
  ------------------
  |  Branch (6011:13): [True: 0, False: 213]
  ------------------
 6012|      0|            goto failed;
 6013|    213|        Py_DECREF(value);
  ------------------
  |  |  430|    213|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    213|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    213|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6014|    213|        break;
 6015|    183|    case Await_kind:
  ------------------
  |  Branch (6015:5): [True: 183, False: 331k]
  ------------------
 6016|    183|        tp = (PyTypeObject *)state->Await_type;
 6017|    183|        result = PyType_GenericNew(tp, NULL, NULL);
 6018|    183|        if (!result) goto failed;
  ------------------
  |  Branch (6018:13): [True: 0, False: 183]
  ------------------
 6019|    183|        value = ast2obj_expr(state, o->v.Await.value);
 6020|    183|        if (!value) goto failed;
  ------------------
  |  Branch (6020:13): [True: 0, False: 183]
  ------------------
 6021|    183|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6021:13): [True: 0, False: 183]
  ------------------
 6022|      0|            goto failed;
 6023|    183|        Py_DECREF(value);
  ------------------
  |  |  430|    183|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    183|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    183|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6024|    183|        break;
 6025|    367|    case Yield_kind:
  ------------------
  |  Branch (6025:5): [True: 367, False: 330k]
  ------------------
 6026|    367|        tp = (PyTypeObject *)state->Yield_type;
 6027|    367|        result = PyType_GenericNew(tp, NULL, NULL);
 6028|    367|        if (!result) goto failed;
  ------------------
  |  Branch (6028:13): [True: 0, False: 367]
  ------------------
 6029|    367|        value = ast2obj_expr(state, o->v.Yield.value);
 6030|    367|        if (!value) goto failed;
  ------------------
  |  Branch (6030:13): [True: 0, False: 367]
  ------------------
 6031|    367|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6031:13): [True: 0, False: 367]
  ------------------
 6032|      0|            goto failed;
 6033|    367|        Py_DECREF(value);
  ------------------
  |  |  430|    367|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    367|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    367|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6034|    367|        break;
 6035|     20|    case YieldFrom_kind:
  ------------------
  |  Branch (6035:5): [True: 20, False: 331k]
  ------------------
 6036|     20|        tp = (PyTypeObject *)state->YieldFrom_type;
 6037|     20|        result = PyType_GenericNew(tp, NULL, NULL);
 6038|     20|        if (!result) goto failed;
  ------------------
  |  Branch (6038:13): [True: 0, False: 20]
  ------------------
 6039|     20|        value = ast2obj_expr(state, o->v.YieldFrom.value);
 6040|     20|        if (!value) goto failed;
  ------------------
  |  Branch (6040:13): [True: 0, False: 20]
  ------------------
 6041|     20|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6041:13): [True: 0, False: 20]
  ------------------
 6042|      0|            goto failed;
 6043|     20|        Py_DECREF(value);
  ------------------
  |  |  430|     20|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6044|     20|        break;
 6045|  1.99k|    case Compare_kind:
  ------------------
  |  Branch (6045:5): [True: 1.99k, False: 329k]
  ------------------
 6046|  1.99k|        tp = (PyTypeObject *)state->Compare_type;
 6047|  1.99k|        result = PyType_GenericNew(tp, NULL, NULL);
 6048|  1.99k|        if (!result) goto failed;
  ------------------
  |  Branch (6048:13): [True: 0, False: 1.99k]
  ------------------
 6049|  1.99k|        value = ast2obj_expr(state, o->v.Compare.left);
 6050|  1.99k|        if (!value) goto failed;
  ------------------
  |  Branch (6050:13): [True: 0, False: 1.99k]
  ------------------
 6051|  1.99k|        if (PyObject_SetAttr(result, state->left, value) == -1)
  ------------------
  |  Branch (6051:13): [True: 0, False: 1.99k]
  ------------------
 6052|      0|            goto failed;
 6053|  1.99k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.99k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.99k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.99k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6054|  1.99k|        {
 6055|  1.99k|            Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
  ------------------
  |  |   83|  1.99k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.99k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.99k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6056|  1.99k|            value = PyList_New(n);
 6057|  1.99k|            if (!value) goto failed;
  ------------------
  |  Branch (6057:17): [True: 0, False: 1.99k]
  ------------------
 6058|  11.0k|            for(i = 0; i < n; i++)
  ------------------
  |  Branch (6058:24): [True: 9.01k, False: 1.99k]
  ------------------
 6059|  9.01k|                PyList_SET_ITEM(value, i, ast2obj_cmpop(state, (cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
  ------------------
  |  |   50|  11.0k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  9.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  9.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6060|  1.99k|        }
 6061|  1.99k|        if (!value) goto failed;
  ------------------
  |  Branch (6061:13): [True: 0, False: 1.99k]
  ------------------
 6062|  1.99k|        if (PyObject_SetAttr(result, state->ops, value) == -1)
  ------------------
  |  Branch (6062:13): [True: 0, False: 1.99k]
  ------------------
 6063|      0|            goto failed;
 6064|  1.99k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.99k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.99k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.99k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6065|  1.99k|        value = ast2obj_list(state, (asdl_seq*)o->v.Compare.comparators,
 6066|  1.99k|                             ast2obj_expr);
 6067|  1.99k|        if (!value) goto failed;
  ------------------
  |  Branch (6067:13): [True: 0, False: 1.99k]
  ------------------
 6068|  1.99k|        if (PyObject_SetAttr(result, state->comparators, value) == -1)
  ------------------
  |  Branch (6068:13): [True: 0, False: 1.99k]
  ------------------
 6069|      0|            goto failed;
 6070|  1.99k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.99k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.99k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.99k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6071|  1.99k|        break;
 6072|  3.00k|    case Call_kind:
  ------------------
  |  Branch (6072:5): [True: 3.00k, False: 328k]
  ------------------
 6073|  3.00k|        tp = (PyTypeObject *)state->Call_type;
 6074|  3.00k|        result = PyType_GenericNew(tp, NULL, NULL);
 6075|  3.00k|        if (!result) goto failed;
  ------------------
  |  Branch (6075:13): [True: 0, False: 3.00k]
  ------------------
 6076|  3.00k|        value = ast2obj_expr(state, o->v.Call.func);
 6077|  3.00k|        if (!value) goto failed;
  ------------------
  |  Branch (6077:13): [True: 0, False: 3.00k]
  ------------------
 6078|  3.00k|        if (PyObject_SetAttr(result, state->func, value) == -1)
  ------------------
  |  Branch (6078:13): [True: 0, False: 3.00k]
  ------------------
 6079|      0|            goto failed;
 6080|  3.00k|        Py_DECREF(value);
  ------------------
  |  |  430|  3.00k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6081|  3.00k|        value = ast2obj_list(state, (asdl_seq*)o->v.Call.args, ast2obj_expr);
 6082|  3.00k|        if (!value) goto failed;
  ------------------
  |  Branch (6082:13): [True: 0, False: 3.00k]
  ------------------
 6083|  3.00k|        if (PyObject_SetAttr(result, state->args, value) == -1)
  ------------------
  |  Branch (6083:13): [True: 0, False: 3.00k]
  ------------------
 6084|      0|            goto failed;
 6085|  3.00k|        Py_DECREF(value);
  ------------------
  |  |  430|  3.00k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6086|  3.00k|        value = ast2obj_list(state, (asdl_seq*)o->v.Call.keywords,
 6087|  3.00k|                             ast2obj_keyword);
 6088|  3.00k|        if (!value) goto failed;
  ------------------
  |  Branch (6088:13): [True: 0, False: 3.00k]
  ------------------
 6089|  3.00k|        if (PyObject_SetAttr(result, state->keywords, value) == -1)
  ------------------
  |  Branch (6089:13): [True: 0, False: 3.00k]
  ------------------
 6090|      0|            goto failed;
 6091|  3.00k|        Py_DECREF(value);
  ------------------
  |  |  430|  3.00k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6092|  3.00k|        break;
 6093|  1.08k|    case FormattedValue_kind:
  ------------------
  |  Branch (6093:5): [True: 1.08k, False: 330k]
  ------------------
 6094|  1.08k|        tp = (PyTypeObject *)state->FormattedValue_type;
 6095|  1.08k|        result = PyType_GenericNew(tp, NULL, NULL);
 6096|  1.08k|        if (!result) goto failed;
  ------------------
  |  Branch (6096:13): [True: 0, False: 1.08k]
  ------------------
 6097|  1.08k|        value = ast2obj_expr(state, o->v.FormattedValue.value);
 6098|  1.08k|        if (!value) goto failed;
  ------------------
  |  Branch (6098:13): [True: 0, False: 1.08k]
  ------------------
 6099|  1.08k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6099:13): [True: 0, False: 1.08k]
  ------------------
 6100|      0|            goto failed;
 6101|  1.08k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6102|  1.08k|        value = ast2obj_int(state, o->v.FormattedValue.conversion);
 6103|  1.08k|        if (!value) goto failed;
  ------------------
  |  Branch (6103:13): [True: 0, False: 1.08k]
  ------------------
 6104|  1.08k|        if (PyObject_SetAttr(result, state->conversion, value) == -1)
  ------------------
  |  Branch (6104:13): [True: 0, False: 1.08k]
  ------------------
 6105|      0|            goto failed;
 6106|  1.08k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6107|  1.08k|        value = ast2obj_expr(state, o->v.FormattedValue.format_spec);
 6108|  1.08k|        if (!value) goto failed;
  ------------------
  |  Branch (6108:13): [True: 0, False: 1.08k]
  ------------------
 6109|  1.08k|        if (PyObject_SetAttr(result, state->format_spec, value) == -1)
  ------------------
  |  Branch (6109:13): [True: 0, False: 1.08k]
  ------------------
 6110|      0|            goto failed;
 6111|  1.08k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6112|  1.08k|        break;
 6113|    576|    case Interpolation_kind:
  ------------------
  |  Branch (6113:5): [True: 576, False: 330k]
  ------------------
 6114|    576|        tp = (PyTypeObject *)state->Interpolation_type;
 6115|    576|        result = PyType_GenericNew(tp, NULL, NULL);
 6116|    576|        if (!result) goto failed;
  ------------------
  |  Branch (6116:13): [True: 0, False: 576]
  ------------------
 6117|    576|        value = ast2obj_expr(state, o->v.Interpolation.value);
 6118|    576|        if (!value) goto failed;
  ------------------
  |  Branch (6118:13): [True: 0, False: 576]
  ------------------
 6119|    576|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6119:13): [True: 0, False: 576]
  ------------------
 6120|      0|            goto failed;
 6121|    576|        Py_DECREF(value);
  ------------------
  |  |  430|    576|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    576|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    576|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6122|    576|        value = ast2obj_constant(state, o->v.Interpolation.str);
  ------------------
  |  | 2266|    576|#define ast2obj_constant ast2obj_object
  ------------------
 6123|    576|        if (!value) goto failed;
  ------------------
  |  Branch (6123:13): [True: 0, False: 576]
  ------------------
 6124|    576|        if (PyObject_SetAttr(result, state->str, value) == -1)
  ------------------
  |  Branch (6124:13): [True: 0, False: 576]
  ------------------
 6125|      0|            goto failed;
 6126|    576|        Py_DECREF(value);
  ------------------
  |  |  430|    576|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    576|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    576|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6127|    576|        value = ast2obj_int(state, o->v.Interpolation.conversion);
 6128|    576|        if (!value) goto failed;
  ------------------
  |  Branch (6128:13): [True: 0, False: 576]
  ------------------
 6129|    576|        if (PyObject_SetAttr(result, state->conversion, value) == -1)
  ------------------
  |  Branch (6129:13): [True: 0, False: 576]
  ------------------
 6130|      0|            goto failed;
 6131|    576|        Py_DECREF(value);
  ------------------
  |  |  430|    576|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    576|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    576|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6132|    576|        value = ast2obj_expr(state, o->v.Interpolation.format_spec);
 6133|    576|        if (!value) goto failed;
  ------------------
  |  Branch (6133:13): [True: 0, False: 576]
  ------------------
 6134|    576|        if (PyObject_SetAttr(result, state->format_spec, value) == -1)
  ------------------
  |  Branch (6134:13): [True: 0, False: 576]
  ------------------
 6135|      0|            goto failed;
 6136|    576|        Py_DECREF(value);
  ------------------
  |  |  430|    576|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    576|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    576|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6137|    576|        break;
 6138|  1.57k|    case JoinedStr_kind:
  ------------------
  |  Branch (6138:5): [True: 1.57k, False: 329k]
  ------------------
 6139|  1.57k|        tp = (PyTypeObject *)state->JoinedStr_type;
 6140|  1.57k|        result = PyType_GenericNew(tp, NULL, NULL);
 6141|  1.57k|        if (!result) goto failed;
  ------------------
  |  Branch (6141:13): [True: 0, False: 1.57k]
  ------------------
 6142|  1.57k|        value = ast2obj_list(state, (asdl_seq*)o->v.JoinedStr.values,
 6143|  1.57k|                             ast2obj_expr);
 6144|  1.57k|        if (!value) goto failed;
  ------------------
  |  Branch (6144:13): [True: 0, False: 1.57k]
  ------------------
 6145|  1.57k|        if (PyObject_SetAttr(result, state->values, value) == -1)
  ------------------
  |  Branch (6145:13): [True: 0, False: 1.57k]
  ------------------
 6146|      0|            goto failed;
 6147|  1.57k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.57k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6148|  1.57k|        break;
 6149|    370|    case TemplateStr_kind:
  ------------------
  |  Branch (6149:5): [True: 370, False: 330k]
  ------------------
 6150|    370|        tp = (PyTypeObject *)state->TemplateStr_type;
 6151|    370|        result = PyType_GenericNew(tp, NULL, NULL);
 6152|    370|        if (!result) goto failed;
  ------------------
  |  Branch (6152:13): [True: 0, False: 370]
  ------------------
 6153|    370|        value = ast2obj_list(state, (asdl_seq*)o->v.TemplateStr.values,
 6154|    370|                             ast2obj_expr);
 6155|    370|        if (!value) goto failed;
  ------------------
  |  Branch (6155:13): [True: 0, False: 370]
  ------------------
 6156|    370|        if (PyObject_SetAttr(result, state->values, value) == -1)
  ------------------
  |  Branch (6156:13): [True: 0, False: 370]
  ------------------
 6157|      0|            goto failed;
 6158|    370|        Py_DECREF(value);
  ------------------
  |  |  430|    370|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    370|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    370|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6159|    370|        break;
 6160|  95.3k|    case Constant_kind:
  ------------------
  |  Branch (6160:5): [True: 95.3k, False: 235k]
  ------------------
 6161|  95.3k|        tp = (PyTypeObject *)state->Constant_type;
 6162|  95.3k|        result = PyType_GenericNew(tp, NULL, NULL);
 6163|  95.3k|        if (!result) goto failed;
  ------------------
  |  Branch (6163:13): [True: 0, False: 95.3k]
  ------------------
 6164|  95.3k|        value = ast2obj_constant(state, o->v.Constant.value);
  ------------------
  |  | 2266|  95.3k|#define ast2obj_constant ast2obj_object
  ------------------
 6165|  95.3k|        if (!value) goto failed;
  ------------------
  |  Branch (6165:13): [True: 0, False: 95.3k]
  ------------------
 6166|  95.3k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6166:13): [True: 0, False: 95.3k]
  ------------------
 6167|      0|            goto failed;
 6168|  95.3k|        Py_DECREF(value);
  ------------------
  |  |  430|  95.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  95.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  95.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6169|  95.3k|        value = ast2obj_string(state, o->v.Constant.kind);
  ------------------
  |  | 2268|  95.3k|#define ast2obj_string ast2obj_object
  ------------------
 6170|  95.3k|        if (!value) goto failed;
  ------------------
  |  Branch (6170:13): [True: 0, False: 95.3k]
  ------------------
 6171|  95.3k|        if (PyObject_SetAttr(result, state->kind, value) == -1)
  ------------------
  |  Branch (6171:13): [True: 0, False: 95.3k]
  ------------------
 6172|      0|            goto failed;
 6173|  95.3k|        Py_DECREF(value);
  ------------------
  |  |  430|  95.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  95.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  95.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6174|  95.3k|        break;
 6175|  2.73k|    case Attribute_kind:
  ------------------
  |  Branch (6175:5): [True: 2.73k, False: 328k]
  ------------------
 6176|  2.73k|        tp = (PyTypeObject *)state->Attribute_type;
 6177|  2.73k|        result = PyType_GenericNew(tp, NULL, NULL);
 6178|  2.73k|        if (!result) goto failed;
  ------------------
  |  Branch (6178:13): [True: 0, False: 2.73k]
  ------------------
 6179|  2.73k|        value = ast2obj_expr(state, o->v.Attribute.value);
 6180|  2.73k|        if (!value) goto failed;
  ------------------
  |  Branch (6180:13): [True: 0, False: 2.73k]
  ------------------
 6181|  2.73k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6181:13): [True: 0, False: 2.73k]
  ------------------
 6182|      0|            goto failed;
 6183|  2.73k|        Py_DECREF(value);
  ------------------
  |  |  430|  2.73k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6184|  2.73k|        value = ast2obj_identifier(state, o->v.Attribute.attr);
  ------------------
  |  | 2267|  2.73k|#define ast2obj_identifier ast2obj_object
  ------------------
 6185|  2.73k|        if (!value) goto failed;
  ------------------
  |  Branch (6185:13): [True: 0, False: 2.73k]
  ------------------
 6186|  2.73k|        if (PyObject_SetAttr(result, state->attr, value) == -1)
  ------------------
  |  Branch (6186:13): [True: 0, False: 2.73k]
  ------------------
 6187|      0|            goto failed;
 6188|  2.73k|        Py_DECREF(value);
  ------------------
  |  |  430|  2.73k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6189|  2.73k|        value = ast2obj_expr_context(state, o->v.Attribute.ctx);
 6190|  2.73k|        if (!value) goto failed;
  ------------------
  |  Branch (6190:13): [True: 0, False: 2.73k]
  ------------------
 6191|  2.73k|        if (PyObject_SetAttr(result, state->ctx, value) == -1)
  ------------------
  |  Branch (6191:13): [True: 0, False: 2.73k]
  ------------------
 6192|      0|            goto failed;
 6193|  2.73k|        Py_DECREF(value);
  ------------------
  |  |  430|  2.73k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6194|  2.73k|        break;
 6195|  1.08k|    case Subscript_kind:
  ------------------
  |  Branch (6195:5): [True: 1.08k, False: 330k]
  ------------------
 6196|  1.08k|        tp = (PyTypeObject *)state->Subscript_type;
 6197|  1.08k|        result = PyType_GenericNew(tp, NULL, NULL);
 6198|  1.08k|        if (!result) goto failed;
  ------------------
  |  Branch (6198:13): [True: 0, False: 1.08k]
  ------------------
 6199|  1.08k|        value = ast2obj_expr(state, o->v.Subscript.value);
 6200|  1.08k|        if (!value) goto failed;
  ------------------
  |  Branch (6200:13): [True: 0, False: 1.08k]
  ------------------
 6201|  1.08k|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6201:13): [True: 0, False: 1.08k]
  ------------------
 6202|      0|            goto failed;
 6203|  1.08k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6204|  1.08k|        value = ast2obj_expr(state, o->v.Subscript.slice);
 6205|  1.08k|        if (!value) goto failed;
  ------------------
  |  Branch (6205:13): [True: 0, False: 1.08k]
  ------------------
 6206|  1.08k|        if (PyObject_SetAttr(result, state->slice, value) == -1)
  ------------------
  |  Branch (6206:13): [True: 0, False: 1.08k]
  ------------------
 6207|      0|            goto failed;
 6208|  1.08k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6209|  1.08k|        value = ast2obj_expr_context(state, o->v.Subscript.ctx);
 6210|  1.08k|        if (!value) goto failed;
  ------------------
  |  Branch (6210:13): [True: 0, False: 1.08k]
  ------------------
 6211|  1.08k|        if (PyObject_SetAttr(result, state->ctx, value) == -1)
  ------------------
  |  Branch (6211:13): [True: 0, False: 1.08k]
  ------------------
 6212|      0|            goto failed;
 6213|  1.08k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6214|  1.08k|        break;
 6215|    941|    case Starred_kind:
  ------------------
  |  Branch (6215:5): [True: 941, False: 330k]
  ------------------
 6216|    941|        tp = (PyTypeObject *)state->Starred_type;
 6217|    941|        result = PyType_GenericNew(tp, NULL, NULL);
 6218|    941|        if (!result) goto failed;
  ------------------
  |  Branch (6218:13): [True: 0, False: 941]
  ------------------
 6219|    941|        value = ast2obj_expr(state, o->v.Starred.value);
 6220|    941|        if (!value) goto failed;
  ------------------
  |  Branch (6220:13): [True: 0, False: 941]
  ------------------
 6221|    941|        if (PyObject_SetAttr(result, state->value, value) == -1)
  ------------------
  |  Branch (6221:13): [True: 0, False: 941]
  ------------------
 6222|      0|            goto failed;
 6223|    941|        Py_DECREF(value);
  ------------------
  |  |  430|    941|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    941|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    941|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6224|    941|        value = ast2obj_expr_context(state, o->v.Starred.ctx);
 6225|    941|        if (!value) goto failed;
  ------------------
  |  Branch (6225:13): [True: 0, False: 941]
  ------------------
 6226|    941|        if (PyObject_SetAttr(result, state->ctx, value) == -1)
  ------------------
  |  Branch (6226:13): [True: 0, False: 941]
  ------------------
 6227|      0|            goto failed;
 6228|    941|        Py_DECREF(value);
  ------------------
  |  |  430|    941|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    941|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    941|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6229|    941|        break;
 6230|  86.8k|    case Name_kind:
  ------------------
  |  Branch (6230:5): [True: 86.8k, False: 244k]
  ------------------
 6231|  86.8k|        tp = (PyTypeObject *)state->Name_type;
 6232|  86.8k|        result = PyType_GenericNew(tp, NULL, NULL);
 6233|  86.8k|        if (!result) goto failed;
  ------------------
  |  Branch (6233:13): [True: 0, False: 86.8k]
  ------------------
 6234|  86.8k|        value = ast2obj_identifier(state, o->v.Name.id);
  ------------------
  |  | 2267|  86.8k|#define ast2obj_identifier ast2obj_object
  ------------------
 6235|  86.8k|        if (!value) goto failed;
  ------------------
  |  Branch (6235:13): [True: 0, False: 86.8k]
  ------------------
 6236|  86.8k|        if (PyObject_SetAttr(result, state->id, value) == -1)
  ------------------
  |  Branch (6236:13): [True: 0, False: 86.8k]
  ------------------
 6237|      0|            goto failed;
 6238|  86.8k|        Py_DECREF(value);
  ------------------
  |  |  430|  86.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  86.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  86.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6239|  86.8k|        value = ast2obj_expr_context(state, o->v.Name.ctx);
 6240|  86.8k|        if (!value) goto failed;
  ------------------
  |  Branch (6240:13): [True: 0, False: 86.8k]
  ------------------
 6241|  86.8k|        if (PyObject_SetAttr(result, state->ctx, value) == -1)
  ------------------
  |  Branch (6241:13): [True: 0, False: 86.8k]
  ------------------
 6242|      0|            goto failed;
 6243|  86.8k|        Py_DECREF(value);
  ------------------
  |  |  430|  86.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  86.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  86.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6244|  86.8k|        break;
 6245|    892|    case List_kind:
  ------------------
  |  Branch (6245:5): [True: 892, False: 330k]
  ------------------
 6246|    892|        tp = (PyTypeObject *)state->List_type;
 6247|    892|        result = PyType_GenericNew(tp, NULL, NULL);
 6248|    892|        if (!result) goto failed;
  ------------------
  |  Branch (6248:13): [True: 0, False: 892]
  ------------------
 6249|    892|        value = ast2obj_list(state, (asdl_seq*)o->v.List.elts, ast2obj_expr);
 6250|    892|        if (!value) goto failed;
  ------------------
  |  Branch (6250:13): [True: 0, False: 892]
  ------------------
 6251|    892|        if (PyObject_SetAttr(result, state->elts, value) == -1)
  ------------------
  |  Branch (6251:13): [True: 0, False: 892]
  ------------------
 6252|      0|            goto failed;
 6253|    892|        Py_DECREF(value);
  ------------------
  |  |  430|    892|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    892|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    892|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6254|    892|        value = ast2obj_expr_context(state, o->v.List.ctx);
 6255|    892|        if (!value) goto failed;
  ------------------
  |  Branch (6255:13): [True: 0, False: 892]
  ------------------
 6256|    892|        if (PyObject_SetAttr(result, state->ctx, value) == -1)
  ------------------
  |  Branch (6256:13): [True: 0, False: 892]
  ------------------
 6257|      0|            goto failed;
 6258|    892|        Py_DECREF(value);
  ------------------
  |  |  430|    892|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    892|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    892|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6259|    892|        break;
 6260|  8.69k|    case Tuple_kind:
  ------------------
  |  Branch (6260:5): [True: 8.69k, False: 322k]
  ------------------
 6261|  8.69k|        tp = (PyTypeObject *)state->Tuple_type;
 6262|  8.69k|        result = PyType_GenericNew(tp, NULL, NULL);
 6263|  8.69k|        if (!result) goto failed;
  ------------------
  |  Branch (6263:13): [True: 0, False: 8.69k]
  ------------------
 6264|  8.69k|        value = ast2obj_list(state, (asdl_seq*)o->v.Tuple.elts, ast2obj_expr);
 6265|  8.69k|        if (!value) goto failed;
  ------------------
  |  Branch (6265:13): [True: 0, False: 8.69k]
  ------------------
 6266|  8.69k|        if (PyObject_SetAttr(result, state->elts, value) == -1)
  ------------------
  |  Branch (6266:13): [True: 0, False: 8.69k]
  ------------------
 6267|      0|            goto failed;
 6268|  8.69k|        Py_DECREF(value);
  ------------------
  |  |  430|  8.69k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.69k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.69k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6269|  8.69k|        value = ast2obj_expr_context(state, o->v.Tuple.ctx);
 6270|  8.69k|        if (!value) goto failed;
  ------------------
  |  Branch (6270:13): [True: 0, False: 8.69k]
  ------------------
 6271|  8.69k|        if (PyObject_SetAttr(result, state->ctx, value) == -1)
  ------------------
  |  Branch (6271:13): [True: 0, False: 8.69k]
  ------------------
 6272|      0|            goto failed;
 6273|  8.69k|        Py_DECREF(value);
  ------------------
  |  |  430|  8.69k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.69k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.69k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6274|  8.69k|        break;
 6275|  1.96k|    case Slice_kind:
  ------------------
  |  Branch (6275:5): [True: 1.96k, False: 329k]
  ------------------
 6276|  1.96k|        tp = (PyTypeObject *)state->Slice_type;
 6277|  1.96k|        result = PyType_GenericNew(tp, NULL, NULL);
 6278|  1.96k|        if (!result) goto failed;
  ------------------
  |  Branch (6278:13): [True: 0, False: 1.96k]
  ------------------
 6279|  1.96k|        value = ast2obj_expr(state, o->v.Slice.lower);
 6280|  1.96k|        if (!value) goto failed;
  ------------------
  |  Branch (6280:13): [True: 0, False: 1.96k]
  ------------------
 6281|  1.96k|        if (PyObject_SetAttr(result, state->lower, value) == -1)
  ------------------
  |  Branch (6281:13): [True: 0, False: 1.96k]
  ------------------
 6282|      0|            goto failed;
 6283|  1.96k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.96k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6284|  1.96k|        value = ast2obj_expr(state, o->v.Slice.upper);
 6285|  1.96k|        if (!value) goto failed;
  ------------------
  |  Branch (6285:13): [True: 0, False: 1.96k]
  ------------------
 6286|  1.96k|        if (PyObject_SetAttr(result, state->upper, value) == -1)
  ------------------
  |  Branch (6286:13): [True: 0, False: 1.96k]
  ------------------
 6287|      0|            goto failed;
 6288|  1.96k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.96k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6289|  1.96k|        value = ast2obj_expr(state, o->v.Slice.step);
 6290|  1.96k|        if (!value) goto failed;
  ------------------
  |  Branch (6290:13): [True: 0, False: 1.96k]
  ------------------
 6291|  1.96k|        if (PyObject_SetAttr(result, state->step, value) == -1)
  ------------------
  |  Branch (6291:13): [True: 0, False: 1.96k]
  ------------------
 6292|      0|            goto failed;
 6293|  1.96k|        Py_DECREF(value);
  ------------------
  |  |  430|  1.96k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.96k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.96k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6294|  1.96k|        break;
 6295|   331k|    }
 6296|   331k|    value = ast2obj_int(state, o->lineno);
 6297|   331k|    if (!value) goto failed;
  ------------------
  |  Branch (6297:9): [True: 0, False: 331k]
  ------------------
 6298|   331k|    if (PyObject_SetAttr(result, state->lineno, value) < 0)
  ------------------
  |  Branch (6298:9): [True: 0, False: 331k]
  ------------------
 6299|      0|        goto failed;
 6300|   331k|    Py_DECREF(value);
  ------------------
  |  |  430|   331k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   331k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   331k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6301|   331k|    value = ast2obj_int(state, o->col_offset);
 6302|   331k|    if (!value) goto failed;
  ------------------
  |  Branch (6302:9): [True: 0, False: 331k]
  ------------------
 6303|   331k|    if (PyObject_SetAttr(result, state->col_offset, value) < 0)
  ------------------
  |  Branch (6303:9): [True: 0, False: 331k]
  ------------------
 6304|      0|        goto failed;
 6305|   331k|    Py_DECREF(value);
  ------------------
  |  |  430|   331k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   331k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   331k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6306|   331k|    value = ast2obj_int(state, o->end_lineno);
 6307|   331k|    if (!value) goto failed;
  ------------------
  |  Branch (6307:9): [True: 0, False: 331k]
  ------------------
 6308|   331k|    if (PyObject_SetAttr(result, state->end_lineno, value) < 0)
  ------------------
  |  Branch (6308:9): [True: 0, False: 331k]
  ------------------
 6309|      0|        goto failed;
 6310|   331k|    Py_DECREF(value);
  ------------------
  |  |  430|   331k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   331k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   331k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6311|   331k|    value = ast2obj_int(state, o->end_col_offset);
 6312|   331k|    if (!value) goto failed;
  ------------------
  |  Branch (6312:9): [True: 0, False: 331k]
  ------------------
 6313|   331k|    if (PyObject_SetAttr(result, state->end_col_offset, value) < 0)
  ------------------
  |  Branch (6313:9): [True: 0, False: 331k]
  ------------------
 6314|      0|        goto failed;
 6315|   331k|    Py_DECREF(value);
  ------------------
  |  |  430|   331k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   331k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   331k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6316|   331k|    Py_LeaveRecursiveCall();
 6317|   331k|    return result;
 6318|      0|failed:
 6319|      0|    Py_LeaveRecursiveCall();
 6320|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6321|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6322|       |    return NULL;
 6323|   331k|}
Python-ast.c:ast2obj_boolop:
 6338|    702|{
 6339|    702|    switch(o) {
  ------------------
  |  Branch (6339:12): [True: 702, False: 0]
  ------------------
 6340|    448|        case And:
  ------------------
  |  Branch (6340:9): [True: 448, False: 254]
  ------------------
 6341|    448|            return Py_NewRef(state->And_singleton);
  ------------------
  |  |  550|    448|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    448|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    448|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6342|    254|        case Or:
  ------------------
  |  Branch (6342:9): [True: 254, False: 448]
  ------------------
 6343|    254|            return Py_NewRef(state->Or_singleton);
  ------------------
  |  |  550|    254|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    254|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    254|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6344|    702|    }
 6345|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 6346|    702|}
Python-ast.c:ast2obj_unaryop:
 6380|  32.5k|{
 6381|  32.5k|    switch(o) {
  ------------------
  |  Branch (6381:12): [True: 32.5k, False: 0]
  ------------------
 6382|  2.59k|        case Invert:
  ------------------
  |  Branch (6382:9): [True: 2.59k, False: 29.9k]
  ------------------
 6383|  2.59k|            return Py_NewRef(state->Invert_singleton);
  ------------------
  |  |  550|  2.59k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.59k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.59k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6384|    136|        case Not:
  ------------------
  |  Branch (6384:9): [True: 136, False: 32.3k]
  ------------------
 6385|    136|            return Py_NewRef(state->Not_singleton);
  ------------------
  |  |  550|    136|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    136|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6386|  14.9k|        case UAdd:
  ------------------
  |  Branch (6386:9): [True: 14.9k, False: 17.5k]
  ------------------
 6387|  14.9k|            return Py_NewRef(state->UAdd_singleton);
  ------------------
  |  |  550|  14.9k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  14.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6388|  14.8k|        case USub:
  ------------------
  |  Branch (6388:9): [True: 14.8k, False: 17.6k]
  ------------------
 6389|  14.8k|            return Py_NewRef(state->USub_singleton);
  ------------------
  |  |  550|  14.8k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  14.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6390|  32.5k|    }
 6391|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 6392|  32.5k|}
Python-ast.c:ast2obj_comprehension:
 6421|  2.53k|{
 6422|  2.53k|    comprehension_ty o = (comprehension_ty)_o;
 6423|  2.53k|    PyObject *result = NULL, *value = NULL;
 6424|  2.53k|    PyTypeObject *tp;
 6425|  2.53k|    if (!o) {
  ------------------
  |  Branch (6425:9): [True: 0, False: 2.53k]
  ------------------
 6426|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 6427|      0|    }
 6428|  2.53k|    if (Py_EnterRecursiveCall("during  ast construction")) {
  ------------------
  |  Branch (6428:9): [True: 0, False: 2.53k]
  ------------------
 6429|      0|        return NULL;
 6430|      0|    }
 6431|  2.53k|    tp = (PyTypeObject *)state->comprehension_type;
 6432|  2.53k|    result = PyType_GenericNew(tp, NULL, NULL);
 6433|  2.53k|    if (!result) return NULL;
  ------------------
  |  Branch (6433:9): [True: 0, False: 2.53k]
  ------------------
 6434|  2.53k|    value = ast2obj_expr(state, o->target);
 6435|  2.53k|    if (!value) goto failed;
  ------------------
  |  Branch (6435:9): [True: 0, False: 2.53k]
  ------------------
 6436|  2.53k|    if (PyObject_SetAttr(result, state->target, value) == -1)
  ------------------
  |  Branch (6436:9): [True: 0, False: 2.53k]
  ------------------
 6437|      0|        goto failed;
 6438|  2.53k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.53k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6439|  2.53k|    value = ast2obj_expr(state, o->iter);
 6440|  2.53k|    if (!value) goto failed;
  ------------------
  |  Branch (6440:9): [True: 0, False: 2.53k]
  ------------------
 6441|  2.53k|    if (PyObject_SetAttr(result, state->iter, value) == -1)
  ------------------
  |  Branch (6441:9): [True: 0, False: 2.53k]
  ------------------
 6442|      0|        goto failed;
 6443|  2.53k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.53k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6444|  2.53k|    value = ast2obj_list(state, (asdl_seq*)o->ifs, ast2obj_expr);
 6445|  2.53k|    if (!value) goto failed;
  ------------------
  |  Branch (6445:9): [True: 0, False: 2.53k]
  ------------------
 6446|  2.53k|    if (PyObject_SetAttr(result, state->ifs, value) == -1)
  ------------------
  |  Branch (6446:9): [True: 0, False: 2.53k]
  ------------------
 6447|      0|        goto failed;
 6448|  2.53k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.53k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6449|  2.53k|    value = ast2obj_int(state, o->is_async);
 6450|  2.53k|    if (!value) goto failed;
  ------------------
  |  Branch (6450:9): [True: 0, False: 2.53k]
  ------------------
 6451|  2.53k|    if (PyObject_SetAttr(result, state->is_async, value) == -1)
  ------------------
  |  Branch (6451:9): [True: 0, False: 2.53k]
  ------------------
 6452|      0|        goto failed;
 6453|  2.53k|    Py_DECREF(value);
  ------------------
  |  |  430|  2.53k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6454|  2.53k|    Py_LeaveRecursiveCall();
 6455|  2.53k|    return result;
 6456|      0|failed:
 6457|      0|    Py_LeaveRecursiveCall();
 6458|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6459|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6460|       |    return NULL;
 6461|  2.53k|}
Python-ast.c:ast2obj_cmpop:
 6394|  9.01k|{
 6395|  9.01k|    switch(o) {
  ------------------
  |  Branch (6395:12): [True: 9.01k, False: 0]
  ------------------
 6396|    130|        case Eq:
  ------------------
  |  Branch (6396:9): [True: 130, False: 8.88k]
  ------------------
 6397|    130|            return Py_NewRef(state->Eq_singleton);
  ------------------
  |  |  550|    130|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    130|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    130|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6398|     47|        case NotEq:
  ------------------
  |  Branch (6398:9): [True: 47, False: 8.96k]
  ------------------
 6399|     47|            return Py_NewRef(state->NotEq_singleton);
  ------------------
  |  |  550|     47|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     47|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     47|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6400|  2.94k|        case Lt:
  ------------------
  |  Branch (6400:9): [True: 2.94k, False: 6.06k]
  ------------------
 6401|  2.94k|            return Py_NewRef(state->Lt_singleton);
  ------------------
  |  |  550|  2.94k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.94k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6402|    458|        case LtE:
  ------------------
  |  Branch (6402:9): [True: 458, False: 8.55k]
  ------------------
 6403|    458|            return Py_NewRef(state->LtE_singleton);
  ------------------
  |  |  550|    458|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    458|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    458|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6404|  3.02k|        case Gt:
  ------------------
  |  Branch (6404:9): [True: 3.02k, False: 5.99k]
  ------------------
 6405|  3.02k|            return Py_NewRef(state->Gt_singleton);
  ------------------
  |  |  550|  3.02k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  3.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6406|    450|        case GtE:
  ------------------
  |  Branch (6406:9): [True: 450, False: 8.56k]
  ------------------
 6407|    450|            return Py_NewRef(state->GtE_singleton);
  ------------------
  |  |  550|    450|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    450|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    450|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6408|    353|        case Is:
  ------------------
  |  Branch (6408:9): [True: 353, False: 8.65k]
  ------------------
 6409|    353|            return Py_NewRef(state->Is_singleton);
  ------------------
  |  |  550|    353|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    353|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    353|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6410|     12|        case IsNot:
  ------------------
  |  Branch (6410:9): [True: 12, False: 8.99k]
  ------------------
 6411|     12|            return Py_NewRef(state->IsNot_singleton);
  ------------------
  |  |  550|     12|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6412|  1.57k|        case In:
  ------------------
  |  Branch (6412:9): [True: 1.57k, False: 7.43k]
  ------------------
 6413|  1.57k|            return Py_NewRef(state->In_singleton);
  ------------------
  |  |  550|  1.57k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6414|     19|        case NotIn:
  ------------------
  |  Branch (6414:9): [True: 19, False: 8.99k]
  ------------------
 6415|     19|            return Py_NewRef(state->NotIn_singleton);
  ------------------
  |  |  550|     19|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6416|  9.01k|    }
 6417|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 6418|  9.01k|}
Python-ast.c:ast2obj_expr_context:
 6326|   101k|{
 6327|   101k|    switch(o) {
  ------------------
  |  Branch (6327:12): [True: 101k, False: 0]
  ------------------
 6328|  85.7k|        case Load:
  ------------------
  |  Branch (6328:9): [True: 85.7k, False: 15.4k]
  ------------------
 6329|  85.7k|            return Py_NewRef(state->Load_singleton);
  ------------------
  |  |  550|  85.7k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  85.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  85.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6330|  14.8k|        case Store:
  ------------------
  |  Branch (6330:9): [True: 14.8k, False: 86.3k]
  ------------------
 6331|  14.8k|            return Py_NewRef(state->Store_singleton);
  ------------------
  |  |  550|  14.8k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  14.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6332|    639|        case Del:
  ------------------
  |  Branch (6332:9): [True: 639, False: 100k]
  ------------------
 6333|    639|            return Py_NewRef(state->Del_singleton);
  ------------------
  |  |  550|    639|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    639|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    639|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6334|   101k|    }
 6335|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 6336|   101k|}

PyInit__tokenize:
  458|      1|{
  459|      1|    return PyModuleDef_Init(&_tokenizemodule);
  460|      1|}
Python-tokenize.c:tokenizemodule_exec:
  394|      1|{
  395|      1|    tokenize_state *state = get_tokenize_state(m);
  396|      1|    if (state == NULL) {
  ------------------
  |  Branch (396:9): [True: 0, False: 1]
  ------------------
  397|      0|        return -1;
  398|      0|    }
  399|       |
  400|      1|    state->TokenizerIter = (PyTypeObject *)PyType_FromModuleAndSpec(m, &tokenizeriter_spec, NULL);
  401|      1|    if (state->TokenizerIter == NULL) {
  ------------------
  |  Branch (401:9): [True: 0, False: 1]
  ------------------
  402|      0|        return -1;
  403|      0|    }
  404|      1|    if (PyModule_AddType(m, state->TokenizerIter) < 0) {
  ------------------
  |  Branch (404:9): [True: 0, False: 1]
  ------------------
  405|      0|        return -1;
  406|      0|    }
  407|       |
  408|      1|    return 0;
  409|      1|}
Python-tokenize.c:get_tokenize_state:
   15|     19|get_tokenize_state(PyObject *module) {
   16|     19|    return (tokenize_state *)PyModule_GetState(module);
   17|     19|}
Python-tokenize.c:tokenizemodule_traverse:
  425|     18|{
  426|     18|    tokenize_state *state = get_tokenize_state(m);
  427|     18|    Py_VISIT(state->TokenizerIter);
  ------------------
  |  |  194|     18|    do {                                                                \
  |  |  195|     18|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 18, False: 0]
  |  |  ------------------
  |  |  196|     18|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     18|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 18]
  |  |  ------------------
  |  |  198|     18|                return vret;                                            \
  |  |  199|     18|        }                                                               \
  |  |  200|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
  428|     18|    return 0;
  429|     18|}

PyInit__contextvars:
   67|      1|{
   68|      1|    return PyModuleDef_Init(&_contextvarsmodule);
   69|      1|}
_contextvars.c:_contextvars_exec:
   32|      1|{
   33|      1|    if (PyModule_AddType(m, &PyContext_Type) < 0) {
  ------------------
  |  Branch (33:9): [True: 0, False: 1]
  ------------------
   34|      0|        return -1;
   35|      0|    }
   36|      1|    if (PyModule_AddType(m, &PyContextVar_Type) < 0) {
  ------------------
  |  Branch (36:9): [True: 0, False: 1]
  ------------------
   37|      0|        return -1;
   38|      0|    }
   39|      1|    if (PyModule_AddType(m, &PyContextToken_Type) < 0) {
  ------------------
  |  Branch (39:9): [True: 0, False: 1]
  ------------------
   40|      0|        return -1;
   41|      0|    }
   42|      1|    return 0;
   43|      1|}

_PyWarnings_InitState:
  136|      2|{
  137|      2|    WarningsState *st = &interp->warnings;
  138|       |
  139|      2|    if (st->filters == NULL) {
  ------------------
  |  Branch (139:9): [True: 2, False: 0]
  ------------------
  140|      2|        st->filters = init_filters(interp);
  141|      2|        if (st->filters == NULL) {
  ------------------
  |  Branch (141:13): [True: 0, False: 2]
  ------------------
  142|      0|            return -1;
  143|      0|        }
  144|      2|    }
  145|       |
  146|      2|    if (st->once_registry == NULL) {
  ------------------
  |  Branch (146:9): [True: 2, False: 0]
  ------------------
  147|      2|        st->once_registry = PyDict_New();
  148|      2|        if (st->once_registry == NULL) {
  ------------------
  |  Branch (148:13): [True: 0, False: 2]
  ------------------
  149|      0|            return -1;
  150|      0|        }
  151|      2|    }
  152|       |
  153|      2|    if (st->default_action == NULL) {
  ------------------
  |  Branch (153:9): [True: 2, False: 0]
  ------------------
  154|      2|        st->default_action = PyUnicode_FromString("default");
  155|      2|        if (st->default_action == NULL) {
  ------------------
  |  Branch (155:13): [True: 0, False: 2]
  ------------------
  156|      0|            return -1;
  157|      0|        }
  158|      2|    }
  159|       |
  160|      2|    if (st->context == NULL) {
  ------------------
  |  Branch (160:9): [True: 2, False: 0]
  ------------------
  161|      2|        st->context = PyContextVar_New("_warnings_context", NULL);
  162|      2|        if (st->context == NULL) {
  ------------------
  |  Branch (162:13): [True: 0, False: 2]
  ------------------
  163|      0|            return -1;
  164|      0|        }
  165|      2|    }
  166|       |
  167|      2|    st->filters_version = 0;
  168|      2|    return 0;
  169|      2|}
PyErr_WarnExplicitObject:
 1459|  48.4k|{
 1460|  48.4k|    PyObject *res;
 1461|  48.4k|    if (category == NULL)
  ------------------
  |  Branch (1461:9): [True: 0, False: 48.4k]
  ------------------
 1462|      0|        category = PyExc_RuntimeWarning;
 1463|  48.4k|    PyThreadState *tstate = get_current_tstate();
 1464|  48.4k|    if (tstate == NULL) {
  ------------------
  |  Branch (1464:9): [True: 0, False: 48.4k]
  ------------------
 1465|      0|        return -1;
 1466|      0|    }
 1467|       |
 1468|  48.4k|    warnings_lock(tstate->interp);
 1469|  48.4k|    res = warn_explicit(tstate, category, message, filename, lineno,
 1470|  48.4k|                        module, registry, NULL, NULL);
 1471|  48.4k|    warnings_unlock(tstate->interp);
 1472|  48.4k|    if (res == NULL)
  ------------------
  |  Branch (1472:9): [True: 0, False: 48.4k]
  ------------------
 1473|      0|        return -1;
 1474|  48.4k|    Py_DECREF(res);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1475|  48.4k|    return 0;
 1476|  48.4k|}
_PyWarnings_Init:
 1679|      2|{
 1680|      2|    return PyModuleDef_Init(&warnings_module);
 1681|      2|}
_warnings.c:init_filters:
  101|      2|{
  102|       |#ifdef Py_DEBUG
  103|       |    /* Py_DEBUG builds show all warnings by default */
  104|       |    return PyList_New(0);
  105|       |#else
  106|       |    /* Other builds ignore a number of warning categories by default */
  107|      2|    PyObject *filters = PyList_New(5);
  108|      2|    if (filters == NULL) {
  ------------------
  |  Branch (108:9): [True: 0, False: 2]
  ------------------
  109|      0|        return NULL;
  110|      0|    }
  111|       |
  112|      2|    size_t pos = 0;  /* Post-incremented in each use. */
  113|      2|#define ADD(TYPE, ACTION, MODNAME) \
  114|      2|    PyList_SET_ITEM(filters, pos++, \
  115|      2|                    create_filter(TYPE, &_Py_ID(ACTION), MODNAME));
  116|      2|    ADD(PyExc_DeprecationWarning, default, "__main__");
  ------------------
  |  |  114|      2|    PyList_SET_ITEM(filters, pos++, \
  |  |  ------------------
  |  |  |  |   50|      2|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|                    create_filter(TYPE, &_Py_ID(ACTION), MODNAME));
  ------------------
  117|      2|    ADD(PyExc_DeprecationWarning, ignore, NULL);
  ------------------
  |  |  114|      2|    PyList_SET_ITEM(filters, pos++, \
  |  |  ------------------
  |  |  |  |   50|      2|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|                    create_filter(TYPE, &_Py_ID(ACTION), MODNAME));
  ------------------
  118|      2|    ADD(PyExc_PendingDeprecationWarning, ignore, NULL);
  ------------------
  |  |  114|      2|    PyList_SET_ITEM(filters, pos++, \
  |  |  ------------------
  |  |  |  |   50|      2|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|                    create_filter(TYPE, &_Py_ID(ACTION), MODNAME));
  ------------------
  119|      2|    ADD(PyExc_ImportWarning, ignore, NULL);
  ------------------
  |  |  114|      2|    PyList_SET_ITEM(filters, pos++, \
  |  |  ------------------
  |  |  |  |   50|      2|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|                    create_filter(TYPE, &_Py_ID(ACTION), MODNAME));
  ------------------
  120|      2|    ADD(PyExc_ResourceWarning, ignore, NULL);
  ------------------
  |  |  114|      2|    PyList_SET_ITEM(filters, pos++, \
  |  |  ------------------
  |  |  |  |   50|      2|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  115|      2|                    create_filter(TYPE, &_Py_ID(ACTION), MODNAME));
  ------------------
  121|      2|#undef ADD
  122|       |
  123|     12|    for (size_t x = 0; x < pos; x++) {
  ------------------
  |  Branch (123:24): [True: 10, False: 2]
  ------------------
  124|     20|        if (PyList_GET_ITEM(filters, x) == NULL) {
  ------------------
  |  |   40|     10|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|     10|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (124:13): [True: 10, False: 0]
  |  Branch (124:13): [True: 0, False: 10]
  ------------------
  125|      0|            Py_DECREF(filters);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|      0|            return NULL;
  127|      0|        }
  128|     10|    }
  129|      2|    return filters;
  130|      2|#endif
  131|      2|}
_warnings.c:create_filter:
   78|     10|{
   79|     10|    PyObject *modname_obj = NULL;
   80|       |
   81|       |    /* Default to "no module name" for initial filter set */
   82|     10|    if (modname != NULL) {
  ------------------
  |  Branch (82:9): [True: 2, False: 8]
  ------------------
   83|      2|        modname_obj = PyUnicode_InternFromString(modname);
   84|      2|        if (modname_obj == NULL) {
  ------------------
  |  Branch (84:13): [True: 0, False: 2]
  ------------------
   85|      0|            return NULL;
   86|      0|        }
   87|      8|    } else {
   88|      8|        modname_obj = Py_NewRef(Py_None);
  ------------------
  |  |  550|      8|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      8|    }
   90|       |
   91|       |    /* This assumes the line number is zero for now. */
   92|     10|    PyObject *filter = PyTuple_Pack(5, action_str, Py_None,
  ------------------
  |  |  616|     10|#  define Py_None (&_Py_NoneStruct)
  ------------------
   93|     10|                                    category, modname_obj, _PyLong_GetZero());
   94|     10|    Py_DECREF(modname_obj);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|     10|    return filter;
   96|     10|}
_warnings.c:get_current_tstate:
   49|  48.4k|{
   50|  48.4k|    PyThreadState *tstate = _PyThreadState_GET();
   51|  48.4k|    if (tstate == NULL) {
  ------------------
  |  Branch (51:9): [True: 0, False: 48.4k]
  ------------------
   52|      0|        (void)check_interp(NULL);
   53|      0|        return NULL;
   54|      0|    }
   55|  48.4k|    return check_interp(tstate->interp) ? tstate : NULL;
  ------------------
  |  Branch (55:12): [True: 48.4k, False: 0]
  ------------------
   56|  48.4k|}
_warnings.c:check_interp:
   30|  48.4k|{
   31|  48.4k|    if (interp == NULL) {
  ------------------
  |  Branch (31:9): [True: 0, False: 48.4k]
  ------------------
   32|      0|        PyErr_SetString(PyExc_RuntimeError,
   33|      0|                        "warnings_get_state: could not identify "
   34|      0|                        "current interpreter");
   35|      0|        return 0;
   36|      0|    }
   37|  48.4k|    return 1;
   38|  48.4k|}
_warnings.c:warnings_lock:
  259|  48.4k|{
  260|  48.4k|    WarningsState *st = warnings_get_state(interp);
  261|  48.4k|    assert(st != NULL);
  ------------------
  |  Branch (261:5): [True: 48.4k, False: 0]
  ------------------
  262|  48.4k|    _PyRecursiveMutex_Lock(&st->lock);
  263|  48.4k|}
_warnings.c:warnings_get_state:
   61|   242k|{
   62|   242k|    return &interp->warnings;
   63|   242k|}
_warnings.c:warn_explicit:
  778|  48.4k|{
  779|  48.4k|    PyObject *key = NULL, *text = NULL, *result = NULL, *lineno_obj = NULL;
  780|  48.4k|    PyObject *item = NULL;
  781|  48.4k|    PyObject *action;
  782|  48.4k|    int rc;
  783|  48.4k|    PyInterpreterState *interp = tstate->interp;
  784|       |
  785|       |    /* module can be None if a warning is emitted late during Python shutdown.
  786|       |       In this case, the Python warnings module was probably unloaded, filters
  787|       |       are no more available to choose as action. It is safer to ignore the
  788|       |       warning and do nothing. */
  789|  48.4k|    if (module == Py_None)
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (789:9): [True: 0, False: 48.4k]
  ------------------
  790|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  791|       |
  792|  48.4k|    if (registry && !PyDict_Check(registry) && (registry != Py_None)) {
  ------------------
  |  |   18|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                  if (registry && !PyDict_Check(registry) && (registry != Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (792:9): [True: 0, False: 48.4k]
  |  Branch (792:21): [True: 0, False: 0]
  |  Branch (792:48): [True: 0, False: 0]
  ------------------
  793|      0|        PyErr_SetString(PyExc_TypeError, "'registry' must be a dict or None");
  794|      0|        return NULL;
  795|      0|    }
  796|       |
  797|       |    /* Normalize message. */
  798|  48.4k|    Py_INCREF(message);  /* DECREF'ed in cleanup. */
  ------------------
  |  |  310|  48.4k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|  48.4k|    if (PyObject_TypeCheck(message, (PyTypeObject *)PyExc_Warning)) {
  ------------------
  |  |  378|  48.4k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (378:40): [True: 0, False: 48.4k]
  |  |  ------------------
  ------------------
  800|      0|        text = PyObject_Str(message);
  801|      0|        if (text == NULL)
  ------------------
  |  Branch (801:13): [True: 0, False: 0]
  ------------------
  802|      0|            goto cleanup;
  803|      0|        category = (PyObject*)Py_TYPE(message);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  804|      0|    }
  805|  48.4k|    else {
  806|  48.4k|        text = message;
  807|  48.4k|        message = PyObject_CallOneArg(category, message);
  808|  48.4k|        if (message == NULL)
  ------------------
  |  Branch (808:13): [True: 0, False: 48.4k]
  ------------------
  809|      0|            goto cleanup;
  810|  48.4k|    }
  811|       |
  812|  48.4k|    lineno_obj = PyLong_FromLong(lineno);
  813|  48.4k|    if (lineno_obj == NULL)
  ------------------
  |  Branch (813:9): [True: 0, False: 48.4k]
  ------------------
  814|      0|        goto cleanup;
  815|       |
  816|  48.4k|    if (source == Py_None) {
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (816:9): [True: 0, False: 48.4k]
  ------------------
  817|      0|        source = NULL;
  818|      0|    }
  819|       |
  820|       |    /* Create key. */
  821|  48.4k|    key = PyTuple_Pack(3, text, category, lineno_obj);
  822|  48.4k|    if (key == NULL)
  ------------------
  |  Branch (822:9): [True: 0, False: 48.4k]
  ------------------
  823|      0|        goto cleanup;
  824|       |
  825|  48.4k|    if ((registry != NULL) && (registry != Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (825:9): [True: 0, False: 48.4k]
  |  Branch (825:31): [True: 0, False: 0]
  ------------------
  826|      0|        rc = already_warned(interp, registry, key, 0);
  827|      0|        if (rc == -1)
  ------------------
  |  Branch (827:13): [True: 0, False: 0]
  ------------------
  828|      0|            goto cleanup;
  829|      0|        else if (rc == 1)
  ------------------
  |  Branch (829:18): [True: 0, False: 0]
  ------------------
  830|      0|            goto return_none;
  831|       |        /* Else this warning hasn't been generated before. */
  832|      0|    }
  833|       |
  834|  48.4k|    action = get_filter(interp, category, text, lineno, module, filename, &item);
  835|  48.4k|    if (action == NULL)
  ------------------
  |  Branch (835:9): [True: 0, False: 48.4k]
  ------------------
  836|      0|        goto cleanup;
  837|       |
  838|  48.4k|    if (_PyUnicode_EqualToASCIIString(action, "error")) {
  ------------------
  |  Branch (838:9): [True: 0, False: 48.4k]
  ------------------
  839|      0|        PyErr_SetObject(category, message);
  840|      0|        goto cleanup;
  841|      0|    }
  842|       |
  843|  48.4k|    if (_PyUnicode_EqualToASCIIString(action, "ignore")) {
  ------------------
  |  Branch (843:9): [True: 0, False: 48.4k]
  ------------------
  844|      0|        goto return_none;
  845|      0|    }
  846|       |
  847|       |    /* Store in the registry that we've been here, *except* when the action
  848|       |       is "always" or "all". */
  849|  48.4k|    rc = 0;
  850|  48.4k|    if (!_PyUnicode_EqualToASCIIString(action, "always") && !_PyUnicode_EqualToASCIIString(action, "all")) {
  ------------------
  |  Branch (850:9): [True: 48.4k, False: 0]
  |  Branch (850:61): [True: 48.4k, False: 0]
  ------------------
  851|  48.4k|        if (registry != NULL && registry != Py_None &&
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (851:13): [True: 0, False: 48.4k]
  |  Branch (851:33): [True: 0, False: 0]
  ------------------
  852|      0|            PyDict_SetItem(registry, key, Py_True) < 0)
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (852:13): [True: 0, False: 0]
  ------------------
  853|      0|        {
  854|      0|            goto cleanup;
  855|      0|        }
  856|       |
  857|  48.4k|        if (_PyUnicode_EqualToASCIIString(action, "once")) {
  ------------------
  |  Branch (857:13): [True: 0, False: 48.4k]
  ------------------
  858|      0|            if (registry == NULL || registry == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (858:17): [True: 0, False: 0]
  |  Branch (858:37): [True: 0, False: 0]
  ------------------
  859|      0|                registry = get_once_registry(interp);
  860|      0|                if (registry == NULL)
  ------------------
  |  Branch (860:21): [True: 0, False: 0]
  ------------------
  861|      0|                    goto cleanup;
  862|      0|            }
  863|       |            /* WarningsState.once_registry[(text, category)] = 1 */
  864|      0|            rc = update_registry(interp, registry, text, category, 0);
  865|      0|        }
  866|  48.4k|        else if (_PyUnicode_EqualToASCIIString(action, "module")) {
  ------------------
  |  Branch (866:18): [True: 0, False: 48.4k]
  ------------------
  867|       |            /* registry[(text, category, 0)] = 1 */
  868|      0|            if (registry != NULL && registry != Py_None)
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (868:17): [True: 0, False: 0]
  |  Branch (868:37): [True: 0, False: 0]
  ------------------
  869|      0|                rc = update_registry(interp, registry, text, category, 0);
  870|      0|        }
  871|  48.4k|        else if (!_PyUnicode_EqualToASCIIString(action, "default")) {
  ------------------
  |  Branch (871:18): [True: 0, False: 48.4k]
  ------------------
  872|      0|            PyErr_Format(PyExc_RuntimeError,
  873|      0|                        "Unrecognized action (%R) in warnings.filters:\n %R",
  874|      0|                        action, item);
  875|      0|            goto cleanup;
  876|      0|        }
  877|  48.4k|    }
  878|       |
  879|  48.4k|    if (rc == 1)  /* Already warned for this module. */
  ------------------
  |  Branch (879:9): [True: 0, False: 48.4k]
  ------------------
  880|      0|        goto return_none;
  881|  48.4k|    if (rc == 0) {
  ------------------
  |  Branch (881:9): [True: 48.4k, False: 0]
  ------------------
  882|  48.4k|        if (call_show_warning(tstate, category, text, message, filename,
  ------------------
  |  Branch (882:13): [True: 0, False: 48.4k]
  ------------------
  883|  48.4k|                              lineno, lineno_obj, sourceline, source, module) < 0)
  884|      0|            goto cleanup;
  885|  48.4k|    }
  886|      0|    else /* if (rc == -1) */
  887|      0|        goto cleanup;
  888|       |
  889|  48.4k| return_none:
  890|  48.4k|    result = Py_NewRef(Py_None);
  ------------------
  |  |  550|  48.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|       |
  892|  48.4k| cleanup:
  893|  48.4k|    Py_XDECREF(item);
  ------------------
  |  |  524|  48.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  894|  48.4k|    Py_XDECREF(key);
  ------------------
  |  |  524|  48.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  895|  48.4k|    Py_XDECREF(text);
  ------------------
  |  |  524|  48.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  896|  48.4k|    Py_XDECREF(lineno_obj);
  ------------------
  |  |  524|  48.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|  48.4k|    Py_XDECREF(message);
  ------------------
  |  |  524|  48.4k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  898|  48.4k|    return result;  /* Py_None or NULL. */
  899|  48.4k|}
_warnings.c:warnings_lock_held:
  275|  48.4k|{
  276|  48.4k|    return PyMutex_IsLocked(&st->lock.mutex);
  ------------------
  |  |   78|  48.4k|#define PyMutex_IsLocked _PyMutex_IsLocked
  ------------------
  277|  48.4k|}
_warnings.c:get_filter:
  521|  48.4k|{
  522|       |#ifdef Py_DEBUG
  523|       |    WarningsState *st = warnings_get_state(interp);
  524|       |    assert(st != NULL);
  525|       |    assert(warnings_lock_held(st));
  526|       |#endif
  527|       |
  528|       |    /* check _warning_context _filters list */
  529|  48.4k|    PyObject *context_filters = get_warnings_context_filters(interp);
  530|  48.4k|    if (context_filters == NULL) {
  ------------------
  |  Branch (530:9): [True: 0, False: 48.4k]
  ------------------
  531|      0|        return NULL;
  532|      0|    }
  533|  48.4k|    bool use_global_filters = false;
  534|  48.4k|    if (context_filters == Py_None) {
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (534:9): [True: 48.4k, False: 0]
  ------------------
  535|  48.4k|        use_global_filters = true;
  536|  48.4k|    } else {
  537|      0|        PyObject *context_action = NULL;
  538|      0|        if (!filter_search(interp, category, text, lineno, module, filename, "_warnings_context _filters",
  ------------------
  |  Branch (538:13): [True: 0, False: 0]
  ------------------
  539|      0|                           context_filters, item, &context_action)) {
  540|      0|            Py_DECREF(context_filters);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  541|      0|            return NULL;
  542|      0|        }
  543|      0|        Py_DECREF(context_filters);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|      0|        if (context_action != NULL) {
  ------------------
  |  Branch (544:13): [True: 0, False: 0]
  ------------------
  545|      0|            return context_action;
  546|      0|        }
  547|      0|    }
  548|       |
  549|  48.4k|    PyObject *action;
  550|       |
  551|  48.4k|    if (use_global_filters) {
  ------------------
  |  Branch (551:9): [True: 48.4k, False: 0]
  ------------------
  552|       |        /* check warnings.filters list */
  553|  48.4k|        PyObject *filters = get_warnings_filters(interp);
  554|  48.4k|        if (filters == NULL) {
  ------------------
  |  Branch (554:13): [True: 0, False: 48.4k]
  ------------------
  555|      0|            return NULL;
  556|      0|        }
  557|  48.4k|        if (!filter_search(interp, category, text, lineno, module, filename, "filters",
  ------------------
  |  Branch (557:13): [True: 0, False: 48.4k]
  ------------------
  558|  48.4k|                           filters, item, &action)) {
  559|      0|            return NULL;
  560|      0|        }
  561|  48.4k|        if (action != NULL) {
  ------------------
  |  Branch (561:13): [True: 0, False: 48.4k]
  ------------------
  562|      0|            return action;
  563|      0|        }
  564|  48.4k|    }
  565|       |
  566|  48.4k|    action = get_default_action(interp);
  567|  48.4k|    if (action != NULL) {
  ------------------
  |  Branch (567:9): [True: 48.4k, False: 0]
  ------------------
  568|  48.4k|        *item = Py_NewRef(Py_None);
  ------------------
  |  |  550|  48.4k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|  48.4k|        return action;
  570|  48.4k|    }
  571|       |
  572|      0|    return NULL;
  573|  48.4k|}
_warnings.c:get_warnings_context_filters:
  296|  48.4k|{
  297|  48.4k|    PyObject *ctx = get_warnings_context(interp);
  298|  48.4k|    if (ctx == NULL) {
  ------------------
  |  Branch (298:9): [True: 0, False: 48.4k]
  ------------------
  299|      0|        return NULL;
  300|      0|    }
  301|  48.4k|    if (ctx == Py_None) {
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (301:9): [True: 48.4k, False: 0]
  ------------------
  302|  48.4k|        Py_RETURN_NONE;
  ------------------
  |  |  628|  48.4k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  303|  48.4k|    }
  304|      0|    PyObject *context_filters = PyObject_GetAttr(ctx, &_Py_ID(_filters));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      0|    Py_DECREF(ctx);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  306|      0|    if (context_filters == NULL) {
  ------------------
  |  Branch (306:9): [True: 0, False: 0]
  ------------------
  307|      0|        return NULL;
  308|      0|    }
  309|      0|    if (!PyList_Check(context_filters)) {
  ------------------
  |  |   25|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (309:9): [True: 0, False: 0]
  ------------------
  310|      0|        PyErr_SetString(PyExc_ValueError,
  311|      0|                        "_filters of warnings._warnings_context must be a list");
  312|      0|        Py_DECREF(context_filters);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|      0|        return NULL;
  314|      0|    }
  315|      0|    return context_filters;
  316|      0|}
_warnings.c:get_warnings_context:
  281|  48.4k|{
  282|  48.4k|    WarningsState *st = warnings_get_state(interp);
  283|  48.4k|    assert(PyContextVar_CheckExact(st->context));
  ------------------
  |  Branch (283:5): [True: 48.4k, False: 0]
  ------------------
  284|  48.4k|    PyObject *ctx;
  285|  48.4k|    if (PyContextVar_Get(st->context, NULL, &ctx) < 0) {
  ------------------
  |  Branch (285:9): [True: 0, False: 48.4k]
  ------------------
  286|      0|        return NULL;
  287|      0|    }
  288|  48.4k|    if (ctx == NULL) {
  ------------------
  |  Branch (288:9): [True: 48.4k, False: 0]
  ------------------
  289|  48.4k|        Py_RETURN_NONE;
  ------------------
  |  |  628|  48.4k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  290|  48.4k|    }
  291|      0|    return ctx;
  292|  48.4k|}
_warnings.c:filter_search:
  440|  48.4k|              PyObject **item, PyObject **matched_action) {
  441|  48.4k|    bool result = true;
  442|  48.4k|    *matched_action = NULL;
  443|       |    /* Avoid the filters list changing while we iterate over it. */
  444|  48.4k|    Py_BEGIN_CRITICAL_SECTION(filters);
  ------------------
  |  |   51|  48.4k|    {
  ------------------
  445|   290k|    for (Py_ssize_t i = 0; i < PyList_GET_SIZE(filters); i++) {
  ------------------
  |  |   38|   290k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   290k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   290k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (445:28): [True: 242k, False: 48.4k]
  ------------------
  446|   242k|        PyObject *tmp_item, *action, *msg, *cat, *mod, *ln_obj;
  447|   242k|        Py_ssize_t ln;
  448|   242k|        int is_subclass, good_msg, good_mod;
  449|       |
  450|   242k|        tmp_item = PyList_GET_ITEM(filters, i);
  ------------------
  |  |   40|   242k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|   242k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (450:20): [True: 242k, False: 0]
  ------------------
  451|   242k|        if (!PyTuple_Check(tmp_item) || PyTuple_GET_SIZE(tmp_item) != 5) {
  ------------------
  |  |   27|   242k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   484k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                      if (!PyTuple_Check(tmp_item) || PyTuple_GET_SIZE(tmp_item) != 5) {
  ------------------
  |  |   27|   242k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   242k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (451:13): [True: 0, False: 242k]
  |  Branch (451:41): [True: 0, False: 242k]
  ------------------
  452|      0|            PyErr_Format(PyExc_ValueError,
  453|      0|                         "warnings.%s item %zd isn't a 5-tuple", list_name, i);
  454|      0|            result = false;
  455|      0|            break;
  456|      0|        }
  457|       |
  458|       |        /* Python code: action, msg, cat, mod, ln = item */
  459|   242k|        Py_INCREF(tmp_item);
  ------------------
  |  |  310|   242k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   242k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|   242k|        action = PyTuple_GET_ITEM(tmp_item, 0);
  ------------------
  |  |   29|   242k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   242k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (460:18): [True: 242k, False: 0]
  ------------------
  461|   242k|        msg = PyTuple_GET_ITEM(tmp_item, 1);
  ------------------
  |  |   29|   242k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   242k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (461:15): [True: 242k, False: 0]
  ------------------
  462|   242k|        cat = PyTuple_GET_ITEM(tmp_item, 2);
  ------------------
  |  |   29|   242k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   242k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (462:15): [True: 242k, False: 0]
  ------------------
  463|   242k|        mod = PyTuple_GET_ITEM(tmp_item, 3);
  ------------------
  |  |   29|   242k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   242k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (463:15): [True: 242k, False: 0]
  ------------------
  464|   242k|        ln_obj = PyTuple_GET_ITEM(tmp_item, 4);
  ------------------
  |  |   29|   242k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   242k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (464:18): [True: 242k, False: 0]
  ------------------
  465|       |
  466|   242k|        if (!PyUnicode_Check(action)) {
  ------------------
  |  |  103|   242k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   242k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (466:13): [True: 0, False: 242k]
  ------------------
  467|      0|            PyErr_Format(PyExc_TypeError,
  468|      0|                         "action must be a string, not '%.200s'",
  469|      0|                         Py_TYPE(action)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      0|            Py_DECREF(tmp_item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|      0|            result = false;
  472|      0|            break;
  473|      0|        }
  474|       |
  475|   242k|        good_msg = check_matched(interp, msg, text, NULL);
  476|   242k|        if (good_msg == -1) {
  ------------------
  |  Branch (476:13): [True: 0, False: 242k]
  ------------------
  477|      0|            Py_DECREF(tmp_item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|      0|            result = false;
  479|      0|            break;
  480|      0|        }
  481|       |
  482|   242k|        good_mod = check_matched(interp, mod, module, filename);
  483|   242k|        if (good_mod == -1) {
  ------------------
  |  Branch (483:13): [True: 0, False: 242k]
  ------------------
  484|      0|            Py_DECREF(tmp_item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|      0|            result = false;
  486|      0|            break;
  487|      0|        }
  488|       |
  489|   242k|        is_subclass = PyObject_IsSubclass(category, cat);
  490|   242k|        if (is_subclass == -1) {
  ------------------
  |  Branch (490:13): [True: 0, False: 242k]
  ------------------
  491|      0|            Py_DECREF(tmp_item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|      0|            result = false;
  493|      0|            break;
  494|      0|        }
  495|       |
  496|   242k|        ln = PyLong_AsSsize_t(ln_obj);
  497|   242k|        if (ln == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (497:13): [True: 0, False: 242k]
  |  Branch (497:25): [True: 0, False: 0]
  ------------------
  498|      0|            Py_DECREF(tmp_item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|      0|            result = false;
  500|      0|            break;
  501|      0|        }
  502|       |
  503|   242k|        if (good_msg && is_subclass && good_mod && (ln == 0 || lineno == ln)) {
  ------------------
  |  Branch (503:13): [True: 242k, False: 0]
  |  Branch (503:25): [True: 0, False: 242k]
  |  Branch (503:40): [True: 0, False: 0]
  |  Branch (503:53): [True: 0, False: 0]
  |  Branch (503:64): [True: 0, False: 0]
  ------------------
  504|      0|            *item = tmp_item;
  505|      0|            *matched_action = action;
  506|      0|            result = true;
  507|      0|            break;
  508|      0|        }
  509|       |
  510|   242k|        Py_DECREF(tmp_item);
  ------------------
  |  |  430|   242k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   242k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   242k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|   242k|    }
  512|  48.4k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  48.4k|    }
  ------------------
  513|  48.4k|    return result;
  514|  48.4k|}
_warnings.c:check_matched:
  176|   484k|{
  177|   484k|    PyObject *result;
  178|   484k|    int rc;
  179|       |
  180|       |    /* A 'None' filter always matches */
  181|   484k|    if (obj == Py_None)
  ------------------
  |  |  616|   484k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (181:9): [True: 436k, False: 48.4k]
  ------------------
  182|   436k|        return 1;
  183|       |
  184|       |    /* An internal plain text default filter must match exactly */
  185|  48.4k|    if (PyUnicode_CheckExact(obj)) {
  ------------------
  |  |  104|  48.4k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  48.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 48.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|  48.4k|        if (arg == NULL) {
  ------------------
  |  Branch (186:13): [True: 48.4k, False: 0]
  ------------------
  187|  48.4k|            return 0;
  188|  48.4k|        }
  189|      0|        int cmp_result = PyUnicode_Compare(obj, arg);
  190|      0|        if (cmp_result == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (190:13): [True: 0, False: 0]
  |  Branch (190:33): [True: 0, False: 0]
  ------------------
  191|      0|            return -1;
  192|      0|        }
  193|      0|        return !cmp_result;
  194|      0|    }
  195|       |
  196|       |    /* Otherwise assume a regex filter and call its match() method */
  197|      0|    if (arg != NULL) {
  ------------------
  |  Branch (197:9): [True: 0, False: 0]
  ------------------
  198|      0|        result = PyObject_CallMethodOneArg(obj, &_Py_ID(match), arg);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|      0|    }
  200|      0|    else {
  201|      0|        PyObject *match = PyImport_ImportModuleAttrString("_py_warnings", "_match_filename");
  202|      0|        if (match == NULL) {
  ------------------
  |  Branch (202:13): [True: 0, False: 0]
  ------------------
  203|      0|            return -1;
  204|      0|        }
  205|      0|        result = PyObject_CallFunctionObjArgs(match, obj, arg2, NULL);
  206|      0|        Py_DECREF(match);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|      0|    }
  208|      0|    if (result == NULL)
  ------------------
  |  Branch (208:9): [True: 0, False: 0]
  ------------------
  209|      0|        return -1;
  210|      0|    rc = PyObject_IsTrue(result);
  211|      0|    Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      0|    return rc;
  213|      0|}
_warnings.c:get_warnings_filters:
  321|  48.4k|{
  322|  48.4k|    WarningsState *st = warnings_get_state(interp);
  323|  48.4k|    PyObject *warnings_filters = GET_WARNINGS_ATTR(interp, filters, 0);
  ------------------
  |  |  216|  48.4k|    get_warnings_attr(interp, &_Py_ID(ATTR), try_import)
  |  |  ------------------
  |  |  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  324|  48.4k|    if (warnings_filters == NULL) {
  ------------------
  |  Branch (324:9): [True: 1, False: 48.4k]
  ------------------
  325|      1|        if (PyErr_Occurred())
  ------------------
  |  Branch (325:13): [True: 0, False: 1]
  ------------------
  326|      0|            return NULL;
  327|      1|    }
  328|  48.4k|    else {
  329|  48.4k|        Py_SETREF(st->filters, warnings_filters);
  ------------------
  |  |  354|  48.4k|    do { \
  |  |  355|  48.4k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  48.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  48.4k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  48.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  48.4k|        *_tmp_dst_ptr = (src); \
  |  |  358|  48.4k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  48.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
  330|  48.4k|    }
  331|       |
  332|  48.4k|    PyObject *filters = st->filters;
  333|  48.4k|    if (filters == NULL || !PyList_Check(filters)) {
  ------------------
  |  |   25|  48.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (333:9): [True: 0, False: 48.4k]
  |  Branch (333:28): [True: 0, False: 48.4k]
  ------------------
  334|      0|        PyErr_SetString(PyExc_ValueError,
  335|      0|                        MODULE_NAME ".filters must be a list");
  ------------------
  |  |   17|      0|#define MODULE_NAME "_warnings"
  ------------------
  336|      0|        return NULL;
  337|      0|    }
  338|  48.4k|    return filters;
  339|  48.4k|}
_warnings.c:get_default_action:
  408|  48.4k|{
  409|  48.4k|    WarningsState *st = warnings_get_state(interp);
  410|  48.4k|    assert(st != NULL);
  ------------------
  |  Branch (410:5): [True: 48.4k, False: 0]
  ------------------
  411|       |
  412|  48.4k|    assert(warnings_lock_held(st));
  ------------------
  |  Branch (412:5): [True: 48.4k, False: 0]
  ------------------
  413|       |
  414|  48.4k|    PyObject *default_action = GET_WARNINGS_ATTR(interp, defaultaction, 0);
  ------------------
  |  |  216|  48.4k|    get_warnings_attr(interp, &_Py_ID(ATTR), try_import)
  |  |  ------------------
  |  |  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|  48.4k|    if (default_action == NULL) {
  ------------------
  |  Branch (415:9): [True: 1, False: 48.4k]
  ------------------
  416|      1|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (416:13): [True: 0, False: 1]
  ------------------
  417|      0|            return NULL;
  418|      0|        }
  419|      1|        assert(st->default_action);
  ------------------
  |  Branch (419:9): [True: 1, False: 0]
  ------------------
  420|      1|        return st->default_action;
  421|      1|    }
  422|  48.4k|    if (!PyUnicode_Check(default_action)) {
  ------------------
  |  |  103|  48.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  48.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (422:9): [True: 0, False: 48.4k]
  ------------------
  423|      0|        PyErr_Format(PyExc_TypeError,
  424|      0|                     MODULE_NAME ".defaultaction must be a string, "
  ------------------
  |  |   17|      0|#define MODULE_NAME "_warnings"
  ------------------
  425|      0|                     "not '%.200s'",
  426|      0|                     Py_TYPE(default_action)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|      0|        Py_DECREF(default_action);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|      0|        return NULL;
  429|      0|    }
  430|  48.4k|    Py_SETREF(st->default_action, default_action);
  ------------------
  |  |  354|  48.4k|    do { \
  |  |  355|  48.4k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  48.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  48.4k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  48.4k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  48.4k|        *_tmp_dst_ptr = (src); \
  |  |  358|  48.4k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  48.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 48.4k]
  |  |  ------------------
  ------------------
  431|  48.4k|    return default_action;
  432|  48.4k|}
_warnings.c:call_show_warning:
  720|  48.4k|{
  721|  48.4k|    PyObject *show_fn, *msg, *res, *warnmsg_cls = NULL;
  722|  48.4k|    PyInterpreterState *interp = tstate->interp;
  723|       |
  724|       |    /* The Python implementation is able to log the traceback where the source
  725|       |       was allocated, whereas the C implementation doesn't. */
  726|  48.4k|    show_fn = GET_WARNINGS_ATTR(interp, _showwarnmsg, 1);
  ------------------
  |  |  216|  48.4k|    get_warnings_attr(interp, &_Py_ID(ATTR), try_import)
  |  |  ------------------
  |  |  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|  48.4k|    if (show_fn == NULL) {
  ------------------
  |  Branch (727:9): [True: 0, False: 48.4k]
  ------------------
  728|      0|        if (PyErr_Occurred())
  ------------------
  |  Branch (728:13): [True: 0, False: 0]
  ------------------
  729|      0|            return -1;
  730|      0|        show_warning(tstate, filename, lineno, text, category, sourceline);
  731|      0|        return 0;
  732|      0|    }
  733|       |
  734|  48.4k|    if (!PyCallable_Check(show_fn)) {
  ------------------
  |  Branch (734:9): [True: 0, False: 48.4k]
  ------------------
  735|      0|        PyErr_SetString(PyExc_TypeError,
  736|      0|                "warnings._showwarnmsg() must be set to a callable");
  737|      0|        goto error;
  738|      0|    }
  739|       |
  740|  48.4k|    warnmsg_cls = GET_WARNINGS_ATTR(interp, WarningMessage, 0);
  ------------------
  |  |  216|  48.4k|    get_warnings_attr(interp, &_Py_ID(ATTR), try_import)
  |  |  ------------------
  |  |  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|  48.4k|    if (warnmsg_cls == NULL) {
  ------------------
  |  Branch (741:9): [True: 0, False: 48.4k]
  ------------------
  742|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (742:13): [True: 0, False: 0]
  ------------------
  743|      0|            PyErr_SetString(PyExc_RuntimeError,
  744|      0|                    "unable to get warnings.WarningMessage");
  745|      0|        }
  746|      0|        goto error;
  747|      0|    }
  748|       |
  749|  48.4k|    msg = PyObject_CallFunctionObjArgs(warnmsg_cls, message, category,
  750|  48.4k|            filename, lineno_obj, Py_None,
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  751|  48.4k|            sourceline ? sourceline : Py_None,
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (751:13): [True: 0, False: 48.4k]
  ------------------
  752|  48.4k|            source ? source : Py_None, module,
  ------------------
  |  |  616|  48.4k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (752:13): [True: 0, False: 48.4k]
  ------------------
  753|  48.4k|            NULL);
  754|  48.4k|    Py_DECREF(warnmsg_cls);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|  48.4k|    if (msg == NULL)
  ------------------
  |  Branch (755:9): [True: 0, False: 48.4k]
  ------------------
  756|      0|        goto error;
  757|       |
  758|  48.4k|    res = PyObject_CallOneArg(show_fn, msg);
  759|  48.4k|    Py_DECREF(show_fn);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|  48.4k|    Py_DECREF(msg);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  761|       |
  762|  48.4k|    if (res == NULL)
  ------------------
  |  Branch (762:9): [True: 0, False: 48.4k]
  ------------------
  763|      0|        return -1;
  764|       |
  765|  48.4k|    Py_DECREF(res);
  ------------------
  |  |  430|  48.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  766|  48.4k|    return 0;
  767|       |
  768|      0|error:
  769|      0|    Py_XDECREF(show_fn);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|      0|    return -1;
  771|  48.4k|}
_warnings.c:warnings_unlock:
  267|  48.4k|{
  268|  48.4k|    WarningsState *st = warnings_get_state(interp);
  269|  48.4k|    assert(st != NULL);
  ------------------
  |  Branch (269:5): [True: 48.4k, False: 0]
  ------------------
  270|  48.4k|    return _PyRecursiveMutex_TryUnlock(&st->lock);
  271|  48.4k|}
_warnings.c:get_warnings_attr:
  224|   193k|{
  225|   193k|    PyObject *warnings_module, *obj;
  226|       |
  227|       |    /* don't try to import after the start of the Python finallization */
  228|   193k|    if (try_import && !_Py_IsInterpreterFinalizing(interp)) {
  ------------------
  |  Branch (228:9): [True: 48.4k, False: 145k]
  |  Branch (228:23): [True: 48.4k, False: 0]
  ------------------
  229|  48.4k|        warnings_module = PyImport_Import(&_Py_ID(warnings));
  ------------------
  |  |  936|  48.4k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  48.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  48.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|  48.4k|        if (warnings_module == NULL) {
  ------------------
  |  Branch (230:13): [True: 0, False: 48.4k]
  ------------------
  231|       |            /* Fallback to the C implementation if we cannot get
  232|       |               the Python implementation */
  233|      0|            if (PyErr_ExceptionMatches(PyExc_ImportError)) {
  ------------------
  |  Branch (233:17): [True: 0, False: 0]
  ------------------
  234|      0|                PyErr_Clear();
  235|      0|            }
  236|      0|            return NULL;
  237|      0|        }
  238|  48.4k|    }
  239|   145k|    else {
  240|       |        /* if we're so late into Python finalization that the module dict is
  241|       |           gone, then we can't even use PyImport_GetModule without triggering
  242|       |           an interpreter abort.
  243|       |        */
  244|   145k|        if (!_PyImport_GetModules(interp)) {
  ------------------
  |  Branch (244:13): [True: 0, False: 145k]
  ------------------
  245|      0|            return NULL;
  246|      0|        }
  247|   145k|        warnings_module = PyImport_GetModule(&_Py_ID(warnings));
  ------------------
  |  |  936|   145k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   145k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   145k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|   145k|        if (warnings_module == NULL)
  ------------------
  |  Branch (248:13): [True: 2, False: 145k]
  ------------------
  249|      2|            return NULL;
  250|   145k|    }
  251|       |
  252|   193k|    (void)PyObject_GetOptionalAttr(warnings_module, attr, &obj);
  253|   193k|    Py_DECREF(warnings_module);
  ------------------
  |  |  430|   193k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   193k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   193k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|   193k|    return obj;
  255|   193k|}
_warnings.c:get_current_interp:
   42|      2|{
   43|      2|    PyInterpreterState *interp = _PyInterpreterState_GET();
   44|      2|    return check_interp(interp) ? interp : NULL;
  ------------------
  |  Branch (44:12): [True: 2, False: 0]
  ------------------
   45|      2|}
_warnings.c:warnings_module_exec:
 1634|      2|{
 1635|      2|    PyInterpreterState *interp = get_current_interp();
 1636|      2|    if (interp == NULL) {
  ------------------
  |  Branch (1636:9): [True: 0, False: 2]
  ------------------
 1637|      0|        return -1;
 1638|      0|    }
 1639|      2|    WarningsState *st = warnings_get_state(interp);
 1640|      2|    if (st == NULL) {
  ------------------
  |  Branch (1640:9): [True: 0, False: 2]
  ------------------
 1641|      0|        return -1;
 1642|      0|    }
 1643|      2|    if (PyModule_AddObjectRef(module, "filters", st->filters) < 0) {
  ------------------
  |  Branch (1643:9): [True: 0, False: 2]
  ------------------
 1644|      0|        return -1;
 1645|      0|    }
 1646|      2|    if (PyModule_AddObjectRef(module, "_onceregistry", st->once_registry) < 0) {
  ------------------
  |  Branch (1646:9): [True: 0, False: 2]
  ------------------
 1647|      0|        return -1;
 1648|      0|    }
 1649|      2|    if (PyModule_AddObjectRef(module, "_defaultaction", st->default_action) < 0) {
  ------------------
  |  Branch (1649:9): [True: 0, False: 2]
  ------------------
 1650|      0|        return -1;
 1651|      0|    }
 1652|      2|    if (PyModule_AddObjectRef(module, "_warnings_context", st->context) < 0) {
  ------------------
  |  Branch (1652:9): [True: 0, False: 2]
  ------------------
 1653|      0|        return -1;
 1654|      0|    }
 1655|      2|    return 0;
 1656|      2|}

_PyAssemble_MakeCodeObject:
  804|  52.7k|{
  805|  52.7k|    if (_PyInstructionSequence_ApplyLabelMap(instrs) < 0) {
  ------------------
  |  Branch (805:9): [True: 0, False: 52.7k]
  ------------------
  806|      0|        return NULL;
  807|      0|    }
  808|  52.7k|    if (resolve_unconditional_jumps(instrs) < 0) {
  ------------------
  |  Branch (808:9): [True: 0, False: 52.7k]
  ------------------
  809|      0|        return NULL;
  810|      0|    }
  811|  52.7k|    if (resolve_jump_offsets(instrs) < 0) {
  ------------------
  |  Branch (811:9): [True: 0, False: 52.7k]
  ------------------
  812|      0|        return NULL;
  813|      0|    }
  814|  52.7k|    PyCodeObject *co = NULL;
  815|       |
  816|  52.7k|    struct assembler a;
  817|  52.7k|    int res = assemble_emit(&a, instrs, umd->u_firstlineno, const_cache);
  818|  52.7k|    if (res == SUCCESS) {
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  |  Branch (818:9): [True: 52.7k, False: 0]
  ------------------
  819|  52.7k|        co = makecode(umd, &a, const_cache, consts, maxdepth, nlocalsplus,
  820|  52.7k|                      code_flags, filename);
  821|  52.7k|    }
  822|  52.7k|    assemble_free(&a);
  823|  52.7k|    return co;
  824|  52.7k|}
assemble.c:resolve_unconditional_jumps:
  772|  52.7k|{
  773|       |    /* Resolve directions of unconditional jumps */
  774|       |
  775|  3.43M|    for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (775:21): [True: 3.37M, False: 52.7k]
  ------------------
  776|  3.37M|        instruction *instr = &instrs->s_instrs[i];
  777|  3.37M|        bool is_forward = (instr->i_oparg > i);
  778|  3.37M|        switch(instr->i_opcode) {
  779|  7.97k|            case JUMP:
  ------------------
  |  |  245|  7.97k|#define JUMP                                   257
  ------------------
  |  Branch (779:13): [True: 7.97k, False: 3.37M]
  ------------------
  780|  7.97k|                assert(is_pseudo_target(JUMP, JUMP_FORWARD));
  ------------------
  |  Branch (780:17): [True: 7.97k, False: 0]
  ------------------
  781|  7.97k|                assert(is_pseudo_target(JUMP, JUMP_BACKWARD));
  ------------------
  |  Branch (781:17): [True: 7.97k, False: 0]
  ------------------
  782|  7.97k|                instr->i_opcode = is_forward ? JUMP_FORWARD : JUMP_BACKWARD;
  ------------------
  |  |   86|  2.14k|#define JUMP_FORWARD                            73
  ------------------
                              instr->i_opcode = is_forward ? JUMP_FORWARD : JUMP_BACKWARD;
  ------------------
  |  |   84|  13.7k|#define JUMP_BACKWARD                           71
  ------------------
  |  Branch (782:35): [True: 2.14k, False: 5.82k]
  ------------------
  783|  7.97k|                break;
  784|  78.1k|            case JUMP_NO_INTERRUPT:
  ------------------
  |  |  248|  78.1k|#define JUMP_NO_INTERRUPT                      260
  ------------------
  |  Branch (784:13): [True: 78.1k, False: 3.30M]
  ------------------
  785|  78.1k|                assert(is_pseudo_target(JUMP_NO_INTERRUPT, JUMP_FORWARD));
  ------------------
  |  Branch (785:17): [True: 78.1k, False: 0]
  ------------------
  786|  78.1k|                assert(is_pseudo_target(JUMP_NO_INTERRUPT, JUMP_BACKWARD_NO_INTERRUPT));
  ------------------
  |  Branch (786:17): [True: 78.1k, False: 0]
  ------------------
  787|  78.1k|                instr->i_opcode = is_forward ?
  ------------------
  |  Branch (787:35): [True: 11.6k, False: 66.4k]
  ------------------
  788|  66.4k|                    JUMP_FORWARD : JUMP_BACKWARD_NO_INTERRUPT;
  ------------------
  |  |   86|  11.6k|#define JUMP_FORWARD                            73
  ------------------
                                  JUMP_FORWARD : JUMP_BACKWARD_NO_INTERRUPT;
  ------------------
  |  |   85|   144k|#define JUMP_BACKWARD_NO_INTERRUPT              72
  ------------------
  789|  78.1k|                break;
  790|  3.29M|            default:
  ------------------
  |  Branch (790:13): [True: 3.29M, False: 86.0k]
  ------------------
  791|  3.29M|                if (OPCODE_HAS_JUMP(instr->i_opcode) &&
  ------------------
  |  | 1065|  6.58M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  ------------------
  |  |  |  | 1046|  3.29M|#define HAS_JUMP_FLAG (8)
  |  |  ------------------
  |  |  |  Branch (1065:29): [True: 128k, False: 3.16M]
  |  |  ------------------
  ------------------
  792|   128k|                    IS_PSEUDO_INSTR(instr->i_opcode)) {
  ------------------
  |  |   20|   128k|#define IS_PSEUDO_INSTR(OP)  ( \
  |  |   21|   128k|    ((OP) == LOAD_CLOSURE) || \
  |  |  ------------------
  |  |  |  |  249|   128k|#define LOAD_CLOSURE                           261
  |  |  ------------------
  |  |  |  Branch (21:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   22|   128k|    ((OP) == STORE_FAST_MAYBE_NULL) || \
  |  |  ------------------
  |  |  |  |  254|   128k|#define STORE_FAST_MAYBE_NULL                  266
  |  |  ------------------
  |  |  |  Branch (22:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   23|   128k|    ((OP) == ANNOTATIONS_PLACEHOLDER) || \
  |  |  ------------------
  |  |  |  |  244|   128k|#define ANNOTATIONS_PLACEHOLDER                256
  |  |  ------------------
  |  |  |  Branch (23:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   24|   128k|    ((OP) == JUMP) || \
  |  |  ------------------
  |  |  |  |  245|   128k|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (24:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   25|   128k|    ((OP) == JUMP_NO_INTERRUPT) || \
  |  |  ------------------
  |  |  |  |  248|   128k|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (25:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   26|   128k|    ((OP) == JUMP_IF_FALSE) || \
  |  |  ------------------
  |  |  |  |  246|   128k|#define JUMP_IF_FALSE                          258
  |  |  ------------------
  |  |  |  Branch (26:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   27|   128k|    ((OP) == JUMP_IF_TRUE) || \
  |  |  ------------------
  |  |  |  |  247|   128k|#define JUMP_IF_TRUE                           259
  |  |  ------------------
  |  |  |  Branch (27:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   28|   128k|    ((OP) == SETUP_FINALLY) || \
  |  |  ------------------
  |  |  |  |  252|   128k|#define SETUP_FINALLY                          264
  |  |  ------------------
  |  |  |  Branch (28:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   29|   128k|    ((OP) == SETUP_CLEANUP) || \
  |  |  ------------------
  |  |  |  |  251|   128k|#define SETUP_CLEANUP                          263
  |  |  ------------------
  |  |  |  Branch (29:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   30|   128k|    ((OP) == SETUP_WITH) || \
  |  |  ------------------
  |  |  |  |  253|   128k|#define SETUP_WITH                             265
  |  |  ------------------
  |  |  |  Branch (30:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   31|   128k|    ((OP) == POP_BLOCK) || \
  |  |  ------------------
  |  |  |  |  250|   128k|#define POP_BLOCK                              262
  |  |  ------------------
  |  |  |  Branch (31:5): [True: 0, False: 128k]
  |  |  ------------------
  |  |   32|   128k|    0)
  |  |  ------------------
  |  |  |  Branch (32:5): [Folded, False: 0]
  |  |  ------------------
  ------------------
  793|      0|                    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  794|      0|                }
  795|  3.37M|        }
  796|  3.37M|    }
  797|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  798|  52.7k|}
assemble.c:resolve_jump_offsets:
  698|  52.7k|{
  699|       |    /* Compute the size of each instruction and fixup jump args.
  700|       |     * Replace instruction index with position in bytecode.
  701|       |     */
  702|       |
  703|  3.43M|    for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (703:21): [True: 3.37M, False: 52.7k]
  ------------------
  704|  3.37M|        instruction *instr = &instrs->s_instrs[i];
  705|  3.37M|        if (OPCODE_HAS_JUMP(instr->i_opcode)) {
  ------------------
  |  | 1065|  3.37M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  ------------------
  |  |  |  | 1046|  3.37M|#define HAS_JUMP_FLAG (8)
  |  |  ------------------
  |  |  |  Branch (1065:29): [True: 214k, False: 3.16M]
  |  |  ------------------
  ------------------
  706|   214k|            instr->i_target = instr->i_oparg;
  707|   214k|        }
  708|  3.37M|    }
  709|       |
  710|  52.7k|    int extended_arg_recompile;
  711|       |
  712|  54.3k|    do {
  713|  54.3k|        int totsize = 0;
  714|  5.50M|        for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (714:25): [True: 5.44M, False: 54.3k]
  ------------------
  715|  5.44M|            instruction *instr = &instrs->s_instrs[i];
  716|  5.44M|            instr->i_offset = totsize;
  717|  5.44M|            int isize = instr_size(instr);
  718|  5.44M|            totsize += isize;
  719|  5.44M|        }
  720|  54.3k|        extended_arg_recompile = 0;
  721|       |
  722|  54.3k|        int offset = 0;
  723|  5.50M|        for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (723:25): [True: 5.44M, False: 54.3k]
  ------------------
  724|  5.44M|            instruction *instr = &instrs->s_instrs[i];
  725|  5.44M|            int isize = instr_size(instr);
  726|       |            /* jump offsets are computed relative to
  727|       |             * the instruction pointer after fetching
  728|       |             * the jump instruction.
  729|       |             */
  730|  5.44M|            offset += isize;
  731|  5.44M|            if (OPCODE_HAS_JUMP(instr->i_opcode)) {
  ------------------
  |  | 1065|  5.44M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  ------------------
  |  |  |  | 1046|  5.44M|#define HAS_JUMP_FLAG (8)
  |  |  ------------------
  |  |  |  Branch (1065:29): [True: 440k, False: 5.00M]
  |  |  ------------------
  ------------------
  732|   440k|                instruction *target = &instrs->s_instrs[instr->i_target];
  733|   440k|                instr->i_oparg = target->i_offset;
  734|   440k|                if (instr->i_opcode == END_ASYNC_FOR) {
  ------------------
  |  |   76|   440k|#define END_ASYNC_FOR                           63
  ------------------
  |  Branch (734:21): [True: 1.72k, False: 438k]
  ------------------
  735|       |                    // sys.monitoring needs to be able to find the matching END_SEND
  736|       |                    // but the target is the SEND, so we adjust it here.
  737|  1.72k|                    instr->i_oparg = offset - instr->i_oparg - END_SEND_OFFSET;
  ------------------
  |  |  694|  1.72k|#define END_SEND_OFFSET 6
  ------------------
  738|  1.72k|                }
  739|   438k|                else if (instr->i_oparg < offset) {
  ------------------
  |  Branch (739:26): [True: 144k, False: 294k]
  ------------------
  740|   144k|                    assert(IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
  ------------------
  |  Branch (740:21): [True: 8.20k, False: 135k]
  |  Branch (740:21): [True: 135k, False: 0]
  ------------------
  741|   144k|                    instr->i_oparg = offset - instr->i_oparg;
  742|   144k|                }
  743|   294k|                else {
  744|   294k|                    assert(!IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
  ------------------
  |  Branch (744:21): [True: 0, False: 294k]
  |  Branch (744:21): [True: 0, False: 294k]
  ------------------
  745|   294k|                    instr->i_oparg = instr->i_oparg - offset;
  746|   294k|                }
  747|   440k|                if (instr_size(instr) != isize) {
  ------------------
  |  Branch (747:21): [True: 117k, False: 323k]
  ------------------
  748|   117k|                    extended_arg_recompile = 1;
  749|   117k|                }
  750|   440k|            }
  751|  5.44M|        }
  752|       |    /* XXX: This is an awful hack that could hurt performance, but
  753|       |        on the bright side it should work until we come up
  754|       |        with a better solution.
  755|       |
  756|       |        The issue is that in the first loop instr_size() is
  757|       |        called, and it requires i_oparg be set appropriately.
  758|       |        There is a bootstrap problem because i_oparg is
  759|       |        calculated in the second loop above.
  760|       |
  761|       |        So we loop until we stop seeing new EXTENDED_ARGs.
  762|       |        The only EXTENDED_ARGs that could be popping up are
  763|       |        ones in jump instructions.  So this should converge
  764|       |        fairly quickly.
  765|       |    */
  766|  54.3k|    } while (extended_arg_recompile);
  ------------------
  |  Branch (766:14): [True: 1.61k, False: 52.7k]
  ------------------
  767|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  768|  52.7k|}
assemble.c:instr_size:
   40|  21.4M|{
   41|  21.4M|    int opcode = instr->i_opcode;
   42|  21.4M|    int oparg = instr->i_oparg;
   43|  21.4M|    assert(!IS_PSEUDO_INSTR(opcode));
  ------------------
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [True: 0, False: 21.4M]
  |  Branch (43:5): [Folded, False: 0]
  ------------------
   44|  21.4M|    assert(OPCODE_HAS_ARG(opcode) || oparg == 0);
  ------------------
  |  Branch (44:5): [True: 16.5M, False: 4.96M]
  |  Branch (44:5): [True: 4.96M, False: 0]
  ------------------
   45|  21.4M|    int extended_args = (0xFFFFFF < oparg) + (0xFFFF < oparg) + (0xFF < oparg);
   46|  21.4M|    int caches = _PyOpcode_Caches[opcode];
   47|  21.4M|    return extended_args + 1 + caches;
   48|  21.4M|}
assemble.c:assemble_emit:
  439|  52.7k|{
  440|  52.7k|    RETURN_IF_ERROR(assemble_init(a, first_lineno));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  441|       |
  442|  3.43M|    for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (442:21): [True: 3.37M, False: 52.7k]
  ------------------
  443|  3.37M|        instruction *instr = &instrs->s_instrs[i];
  444|  3.37M|        RETURN_IF_ERROR(assemble_emit_instr(a, instr));
  ------------------
  |  |   21|  3.37M|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 3.37M]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  445|  3.37M|    }
  446|       |
  447|  52.7k|    RETURN_IF_ERROR(assemble_location_info(a, instrs, a->a_lineno));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  448|       |
  449|  52.7k|    RETURN_IF_ERROR(assemble_exception_table(a, instrs));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  450|       |
  451|  52.7k|    a->a_except_table = PyBytesWriter_FinishWithSize(a->a_except_table_writer,
  452|  52.7k|                                                     a->a_except_table_off);
  453|  52.7k|    a->a_except_table_writer = NULL;
  454|  52.7k|    if (a->a_except_table == NULL) {
  ------------------
  |  Branch (454:9): [True: 0, False: 52.7k]
  ------------------
  455|      0|        return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  456|      0|    }
  457|  52.7k|    RETURN_IF_ERROR(_PyCompile_ConstCacheMergeOne(const_cache, &a->a_except_table));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  458|       |
  459|  52.7k|    a->a_linetable = PyBytesWriter_FinishWithSize(a->a_linetable_writer,
  460|  52.7k|                                                  a->a_location_off);
  461|  52.7k|    a->a_linetable_writer = NULL;
  462|  52.7k|    if (a->a_linetable == NULL) {
  ------------------
  |  Branch (462:9): [True: 0, False: 52.7k]
  ------------------
  463|      0|        return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  464|      0|    }
  465|  52.7k|    RETURN_IF_ERROR(_PyCompile_ConstCacheMergeOne(const_cache, &a->a_linetable));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  466|       |
  467|  52.7k|    a->a_bytecode = PyBytesWriter_FinishWithSize(a->a_bytecode_writer,
  468|  52.7k|                                                 a->a_offset * sizeof(_Py_CODEUNIT));
  469|  52.7k|    a->a_bytecode_writer = NULL;
  470|  52.7k|    if (a->a_bytecode == NULL) {
  ------------------
  |  Branch (470:9): [True: 0, False: 52.7k]
  ------------------
  471|      0|        return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  472|      0|    }
  473|  52.7k|    RETURN_IF_ERROR(_PyCompile_ConstCacheMergeOne(const_cache, &a->a_bytecode));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  474|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  475|  52.7k|}
assemble.c:assemble_init:
   66|  52.7k|{
   67|  52.7k|    memset(a, 0, sizeof(struct assembler));
   68|  52.7k|    a->a_lineno = firstlineno;
   69|  52.7k|    a->a_bytecode_writer = PyBytesWriter_Create(DEFAULT_CODE_SIZE);
  ------------------
  |  |   11|  52.7k|#define DEFAULT_CODE_SIZE 128
  ------------------
   70|  52.7k|    if (a->a_bytecode_writer == NULL) {
  ------------------
  |  Branch (70:9): [True: 0, False: 52.7k]
  ------------------
   71|      0|        goto error;
   72|      0|    }
   73|  52.7k|    a->a_linetable_writer = PyBytesWriter_Create(DEFAULT_CNOTAB_SIZE);
  ------------------
  |  |   13|  52.7k|#define DEFAULT_CNOTAB_SIZE 32
  ------------------
   74|  52.7k|    if (a->a_linetable_writer == NULL) {
  ------------------
  |  Branch (74:9): [True: 0, False: 52.7k]
  ------------------
   75|      0|        goto error;
   76|      0|    }
   77|  52.7k|    a->a_except_table_writer = PyBytesWriter_Create(DEFAULT_LNOTAB_SIZE);
  ------------------
  |  |   12|  52.7k|#define DEFAULT_LNOTAB_SIZE 16
  ------------------
   78|  52.7k|    if (a->a_except_table_writer == NULL) {
  ------------------
  |  Branch (78:9): [True: 0, False: 52.7k]
  ------------------
   79|      0|        goto error;
   80|      0|    }
   81|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
   82|      0|error:
   83|      0|    PyBytesWriter_Discard(a->a_bytecode_writer);
   84|      0|    PyBytesWriter_Discard(a->a_linetable_writer);
   85|      0|    PyBytesWriter_Discard(a->a_except_table_writer);
   86|      0|    return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
   87|  52.7k|}
assemble.c:assemble_emit_instr:
  418|  3.37M|{
  419|  3.37M|    Py_ssize_t len = PyBytesWriter_GetSize(a->a_bytecode_writer);
  420|  3.37M|    _Py_CODEUNIT *code;
  421|       |
  422|  3.37M|    int size = instr_size(instr);
  423|  3.37M|    if (a->a_offset + size >= len / (int)sizeof(_Py_CODEUNIT)) {
  ------------------
  |  Branch (423:9): [True: 17.7k, False: 3.36M]
  ------------------
  424|  17.7k|        if (len > PY_SSIZE_T_MAX / 2) {
  ------------------
  |  |  137|  17.7k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (424:13): [True: 0, False: 17.7k]
  ------------------
  425|      0|            PyErr_NoMemory();
  426|      0|            return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  427|      0|        }
  428|  17.7k|        RETURN_IF_ERROR(PyBytesWriter_Resize(a->a_bytecode_writer, len * 2));
  ------------------
  |  |   21|  17.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 17.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  429|  17.7k|    }
  430|  3.37M|    code = (_Py_CODEUNIT *)PyBytesWriter_GetData(a->a_bytecode_writer) + a->a_offset;
  431|  3.37M|    a->a_offset += size;
  432|  3.37M|    write_instr(code, instr, size);
  433|  3.37M|    return SUCCESS;
  ------------------
  |  |   17|  3.37M|#define SUCCESS 0
  ------------------
  434|  3.37M|}
assemble.c:write_instr:
  374|  3.37M|{
  375|  3.37M|    int opcode = instr->i_opcode;
  376|  3.37M|    assert(!IS_PSEUDO_INSTR(opcode));
  ------------------
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [True: 0, False: 3.37M]
  |  Branch (376:5): [Folded, False: 0]
  ------------------
  377|  3.37M|    int oparg = instr->i_oparg;
  378|  3.37M|    assert(OPCODE_HAS_ARG(opcode) || oparg == 0);
  ------------------
  |  Branch (378:5): [True: 2.61M, False: 760k]
  |  Branch (378:5): [True: 760k, False: 0]
  ------------------
  379|  3.37M|    int caches = _PyOpcode_Caches[opcode];
  380|  3.37M|    switch (ilen - caches) {
  381|      0|        case 4:
  ------------------
  |  Branch (381:9): [True: 0, False: 3.37M]
  ------------------
  382|      0|            codestr->op.code = EXTENDED_ARG;
  ------------------
  |  |   77|      0|#define EXTENDED_ARG                            64
  ------------------
  383|      0|            codestr->op.arg = (oparg >> 24) & 0xFF;
  384|      0|            codestr++;
  385|      0|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  386|     15|        case 3:
  ------------------
  |  Branch (386:9): [True: 15, False: 3.37M]
  ------------------
  387|     15|            codestr->op.code = EXTENDED_ARG;
  ------------------
  |  |   77|     15|#define EXTENDED_ARG                            64
  ------------------
  388|     15|            codestr->op.arg = (oparg >> 16) & 0xFF;
  389|     15|            codestr++;
  390|     15|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|     15|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  391|  53.7k|        case 2:
  ------------------
  |  Branch (391:9): [True: 53.6k, False: 3.32M]
  ------------------
  392|  53.7k|            codestr->op.code = EXTENDED_ARG;
  ------------------
  |  |   77|  53.7k|#define EXTENDED_ARG                            64
  ------------------
  393|  53.7k|            codestr->op.arg = (oparg >> 8) & 0xFF;
  394|  53.7k|            codestr++;
  395|  53.7k|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|  53.7k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  396|  3.37M|        case 1:
  ------------------
  |  Branch (396:9): [True: 3.32M, False: 53.7k]
  ------------------
  397|  3.37M|            codestr->op.code = opcode;
  398|  3.37M|            codestr->op.arg = oparg & 0xFF;
  399|  3.37M|            codestr++;
  400|  3.37M|            break;
  401|      0|        default:
  ------------------
  |  Branch (401:9): [True: 0, False: 3.37M]
  ------------------
  402|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  403|  3.37M|    }
  404|  5.82M|    while (caches--) {
  ------------------
  |  Branch (404:12): [True: 2.44M, False: 3.37M]
  ------------------
  405|  2.44M|        codestr->op.code = CACHE;
  ------------------
  |  |   13|  2.44M|#define CACHE                                    0
  ------------------
  406|  2.44M|        codestr->op.arg = 0;
  407|  2.44M|        codestr++;
  408|  2.44M|    }
  409|  3.37M|}
assemble.c:assemble_location_info:
  343|  52.7k|{
  344|  52.7k|    a->a_lineno = firstlineno;
  345|  52.7k|    location loc = NO_LOCATION;
  346|  3.43M|    for (int i = instrs->s_used-1; i >= 0; i--) {
  ------------------
  |  Branch (346:36): [True: 3.37M, False: 52.7k]
  ------------------
  347|  3.37M|        instruction *instr = &instrs->s_instrs[i];
  348|  3.37M|        if (same_location(instr->i_loc, NEXT_LOCATION)) {
  ------------------
  |  Branch (348:13): [True: 693, False: 3.37M]
  ------------------
  349|    693|            if (IS_TERMINATOR_OPCODE(instr->i_opcode)) {
  ------------------
  |  |   27|    693|        (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  1.38k|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|    693|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 0, False: 693]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   53|    693|        ((opcode) == RETURN_VALUE || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  1.38k|#define RETURN_VALUE                            33
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:10): [True: 0, False: 693]
  |  |  |  |  ------------------
  |  |  |  |   54|    693|         (opcode) == RAISE_VARARGS || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  113|  1.38k|#define RAISE_VARARGS                          100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:10): [True: 0, False: 693]
  |  |  |  |  ------------------
  |  |  |  |   55|    693|         (opcode) == RERAISE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  114|    693|#define RERAISE                                101
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:10): [True: 0, False: 693]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|      0|                instr->i_loc = NO_LOCATION;
  351|      0|            }
  352|    693|            else {
  353|    693|                assert(i < instrs->s_used-1);
  ------------------
  |  Branch (353:17): [True: 693, False: 0]
  ------------------
  354|    693|                instr->i_loc = instr[1].i_loc;
  355|    693|            }
  356|    693|        }
  357|  3.37M|    }
  358|  52.7k|    int size = 0;
  359|  3.43M|    for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (359:21): [True: 3.37M, False: 52.7k]
  ------------------
  360|  3.37M|        instruction *instr = &instrs->s_instrs[i];
  361|  3.37M|        if (!same_location(loc, instr->i_loc)) {
  ------------------
  |  Branch (361:13): [True: 1.47M, False: 1.90M]
  ------------------
  362|  1.47M|                RETURN_IF_ERROR(assemble_emit_location(a, loc, size));
  ------------------
  |  |   21|  1.47M|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 1.47M]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  363|  1.47M|                loc = instr->i_loc;
  364|  1.47M|                size = 0;
  365|  1.47M|        }
  366|  3.37M|        size += instr_size(instr);
  367|  3.37M|    }
  368|  52.7k|    RETURN_IF_ERROR(assemble_emit_location(a, loc, size));
  ------------------
  |  |   21|  52.7k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  369|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  370|  52.7k|}
assemble.c:same_location:
   31|  6.75M|{
   32|  6.75M|    return a.lineno == b.lineno &&
  ------------------
  |  Branch (32:12): [True: 3.17M, False: 3.58M]
  ------------------
   33|  3.17M|           a.end_lineno == b.end_lineno &&
  ------------------
  |  Branch (33:12): [True: 3.16M, False: 9.90k]
  ------------------
   34|  3.16M|           a.col_offset == b.col_offset &&
  ------------------
  |  Branch (34:12): [True: 1.96M, False: 1.19M]
  ------------------
   35|  1.96M|           a.end_col_offset == b.end_col_offset;
  ------------------
  |  Branch (35:12): [True: 1.90M, False: 63.3k]
  ------------------
   36|  6.75M|}
assemble.c:assemble_emit_location:
  329|  1.53M|{
  330|  1.53M|    if (isize == 0) {
  ------------------
  |  Branch (330:9): [True: 32.4k, False: 1.49M]
  ------------------
  331|  32.4k|        return SUCCESS;
  ------------------
  |  |   17|  32.4k|#define SUCCESS 0
  ------------------
  332|  32.4k|    }
  333|  1.71M|    while (isize > 8) {
  ------------------
  |  Branch (333:12): [True: 216k, False: 1.49M]
  ------------------
  334|   216k|        RETURN_IF_ERROR(write_location_info_entry(a, loc, 8));
  ------------------
  |  |   21|   216k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 216k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  335|   216k|        isize -= 8;
  336|   216k|    }
  337|  1.49M|    return write_location_info_entry(a, loc, isize);
  338|  1.49M|}
assemble.c:write_location_info_entry:
  291|  1.71M|{
  292|  1.71M|    Py_ssize_t len = PyBytesWriter_GetSize(a->a_linetable_writer);
  293|  1.71M|    if (a->a_location_off + THEORETICAL_MAX_ENTRY_SIZE >= len) {
  ------------------
  |  |  286|  1.71M|#define THEORETICAL_MAX_ENTRY_SIZE 25 /* 1 + 6 + 6 + 6 + 6 */
  ------------------
  |  Branch (293:9): [True: 61.9k, False: 1.65M]
  ------------------
  294|  61.9k|        assert(len > THEORETICAL_MAX_ENTRY_SIZE);
  ------------------
  |  Branch (294:9): [True: 61.9k, False: 0]
  ------------------
  295|  61.9k|        RETURN_IF_ERROR(PyBytesWriter_Resize(a->a_linetable_writer, len * 2));
  ------------------
  |  |   21|  61.9k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 61.9k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  296|  61.9k|    }
  297|  1.71M|    if (loc.lineno == NO_LOCATION.lineno) {
  ------------------
  |  Branch (297:9): [True: 46.8k, False: 1.66M]
  ------------------
  298|  46.8k|        write_location_info_none(a, isize);
  299|  46.8k|        return SUCCESS;
  ------------------
  |  |   17|  46.8k|#define SUCCESS 0
  ------------------
  300|  46.8k|    }
  301|  1.66M|    int line_delta = loc.lineno - a->a_lineno;
  302|  1.66M|    int column = loc.col_offset;
  303|  1.66M|    int end_column = loc.end_col_offset;
  304|  1.66M|    if (column < 0 || end_column < 0) {
  ------------------
  |  Branch (304:9): [True: 2.96k, False: 1.66M]
  |  Branch (304:23): [True: 0, False: 1.66M]
  ------------------
  305|  2.96k|        if (loc.end_lineno == loc.lineno || loc.end_lineno < 0) {
  ------------------
  |  Branch (305:13): [True: 2.96k, False: 0]
  |  Branch (305:45): [True: 0, False: 0]
  ------------------
  306|  2.96k|            write_location_info_no_column(a, isize, line_delta);
  307|  2.96k|            a->a_lineno = loc.lineno;
  308|  2.96k|            return SUCCESS;
  ------------------
  |  |   17|  2.96k|#define SUCCESS 0
  ------------------
  309|  2.96k|        }
  310|  2.96k|    }
  311|  1.66M|    else if (loc.end_lineno == loc.lineno) {
  ------------------
  |  Branch (311:14): [True: 1.62M, False: 40.2k]
  ------------------
  312|  1.62M|        if (line_delta == 0 && column < 80 && end_column - column < 16 && end_column >= column) {
  ------------------
  |  Branch (312:13): [True: 1.52M, False: 97.3k]
  |  Branch (312:32): [True: 731k, False: 795k]
  |  Branch (312:47): [True: 452k, False: 278k]
  |  Branch (312:75): [True: 452k, False: 0]
  ------------------
  313|   452k|            write_location_info_short_form(a, isize, column, end_column);
  314|   452k|            return SUCCESS;
  ------------------
  |  |   17|   452k|#define SUCCESS 0
  ------------------
  315|   452k|        }
  316|  1.17M|        if (line_delta >= 0 && line_delta < 3 && column < 128 && end_column < 128) {
  ------------------
  |  Branch (316:13): [True: 1.16M, False: 8.66k]
  |  Branch (316:32): [True: 1.14M, False: 19.6k]
  |  Branch (316:50): [True: 418k, False: 724k]
  |  Branch (316:66): [True: 247k, False: 171k]
  ------------------
  317|   247k|            write_location_info_oneline_form(a, isize, line_delta, column, end_column);
  318|   247k|            a->a_lineno = loc.lineno;
  319|   247k|            return SUCCESS;
  ------------------
  |  |   17|   247k|#define SUCCESS 0
  ------------------
  320|   247k|        }
  321|  1.17M|    }
  322|   964k|    write_location_info_long_form(a, loc, isize);
  323|   964k|    a->a_lineno = loc.lineno;
  324|   964k|    return SUCCESS;
  ------------------
  |  |   17|   964k|#define SUCCESS 0
  ------------------
  325|  1.66M|}
assemble.c:write_location_info_none:
  275|  46.8k|{
  276|  46.8k|    write_location_first_byte(a, PY_CODE_LOCATION_INFO_NONE, length);
  277|  46.8k|}
assemble.c:write_location_first_byte:
  216|  1.71M|{
  217|  1.71M|    a->a_location_off += write_location_entry_start(
  218|  1.71M|        location_pointer(a), code, length);
  219|  1.71M|}
assemble.c:location_pointer:
  209|  5.57M|{
  210|  5.57M|    uint8_t *linetable = PyBytesWriter_GetData(a->a_linetable_writer);
  211|  5.57M|    return linetable + a->a_location_off;
  212|  5.57M|}
assemble.c:write_location_info_no_column:
  281|  2.96k|{
  282|  2.96k|    write_location_first_byte(a, PY_CODE_LOCATION_INFO_NO_COLUMNS, length);
  283|  2.96k|    write_location_signed_varint(a, line_delta);
  284|  2.96k|}
assemble.c:write_location_signed_varint:
  231|   967k|{
  232|   967k|    uint8_t *ptr = location_pointer(a);
  233|   967k|    a->a_location_off += write_signed_varint(ptr, val);
  234|   967k|}
assemble.c:write_location_info_short_form:
  238|   452k|{
  239|   452k|    assert(length > 0 &&  length <= 8);
  ------------------
  |  Branch (239:5): [True: 452k, False: 0]
  |  Branch (239:5): [True: 452k, False: 0]
  ------------------
  240|   452k|    int column_low_bits = column & 7;
  241|   452k|    int column_group = column >> 3;
  242|   452k|    assert(column < 80);
  ------------------
  |  Branch (242:5): [True: 452k, False: 0]
  ------------------
  243|   452k|    assert(end_column >= column);
  ------------------
  |  Branch (243:5): [True: 452k, False: 0]
  ------------------
  244|   452k|    assert(end_column - column < 16);
  ------------------
  |  Branch (244:5): [True: 452k, False: 0]
  ------------------
  245|   452k|    write_location_first_byte(a, PY_CODE_LOCATION_INFO_SHORT0 + column_group, length);
  246|   452k|    write_location_byte(a, (column_low_bits << 4) | (end_column - column));
  247|   452k|}
assemble.c:write_location_byte:
  200|   947k|{
  201|   947k|    uint8_t *linetable = PyBytesWriter_GetData(a->a_linetable_writer);
  202|   947k|    linetable[a->a_location_off] = val & 255;
  203|   947k|    a->a_location_off++;
  204|   947k|}
assemble.c:write_location_info_oneline_form:
  251|   247k|{
  252|   247k|    assert(length > 0 &&  length <= 8);
  ------------------
  |  Branch (252:5): [True: 247k, False: 0]
  |  Branch (252:5): [True: 247k, False: 0]
  ------------------
  253|   247k|    assert(line_delta >= 0 && line_delta < 3);
  ------------------
  |  Branch (253:5): [True: 247k, False: 0]
  |  Branch (253:5): [True: 247k, False: 0]
  ------------------
  254|   247k|    assert(column < 128);
  ------------------
  |  Branch (254:5): [True: 247k, False: 0]
  ------------------
  255|   247k|    assert(end_column < 128);
  ------------------
  |  Branch (255:5): [True: 247k, False: 0]
  ------------------
  256|   247k|    write_location_first_byte(a, PY_CODE_LOCATION_INFO_ONE_LINE0 + line_delta, length);
  257|   247k|    write_location_byte(a, column);
  258|   247k|    write_location_byte(a, end_column);
  259|   247k|}
assemble.c:write_location_info_long_form:
  263|   964k|{
  264|   964k|    assert(length > 0 &&  length <= 8);
  ------------------
  |  Branch (264:5): [True: 964k, False: 0]
  |  Branch (264:5): [True: 964k, False: 0]
  ------------------
  265|   964k|    write_location_first_byte(a, PY_CODE_LOCATION_INFO_LONG, length);
  266|   964k|    write_location_signed_varint(a, loc.lineno - a->a_lineno);
  267|   964k|    assert(loc.end_lineno >= loc.lineno);
  ------------------
  |  Branch (267:5): [True: 964k, False: 0]
  ------------------
  268|   964k|    write_location_varint(a, loc.end_lineno - loc.lineno);
  269|   964k|    write_location_varint(a, loc.col_offset + 1);
  270|   964k|    write_location_varint(a, loc.end_col_offset + 1);
  271|   964k|}
assemble.c:write_location_varint:
  223|  2.89M|{
  224|  2.89M|    uint8_t *ptr = location_pointer(a);
  225|  2.89M|    a->a_location_off += write_varint(ptr, val);
  226|  2.89M|}
assemble.c:assemble_exception_table:
  162|  52.7k|{
  163|  52.7k|    int ioffset = 0;
  164|  52.7k|    _PyExceptHandlerInfo handler;
  165|  52.7k|    handler.h_label = -1;
  166|  52.7k|    handler.h_startdepth = -1;
  167|  52.7k|    handler.h_preserve_lasti = -1;
  168|  52.7k|    int start = -1;
  169|  3.43M|    for (int i = 0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (169:21): [True: 3.37M, False: 52.7k]
  ------------------
  170|  3.37M|        instruction *instr = &instrs->s_instrs[i];
  171|  3.37M|        if (instr->i_except_handler_info.h_label != handler.h_label) {
  ------------------
  |  Branch (171:13): [True: 235k, False: 3.14M]
  ------------------
  172|   235k|            if (handler.h_label >= 0) {
  ------------------
  |  Branch (172:17): [True: 179k, False: 55.1k]
  ------------------
  173|   179k|                int handler_offset = instrs->s_instrs[handler.h_label].i_offset;
  174|   179k|                RETURN_IF_ERROR(
  ------------------
  |  |   21|   179k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 179k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  175|   179k|                    assemble_emit_exception_table_entry(a, start, ioffset,
  176|   179k|                                                        handler_offset,
  177|   179k|                                                        &handler));
  178|   179k|            }
  179|   235k|            start = ioffset;
  180|   235k|            handler = instr->i_except_handler_info;
  181|   235k|        }
  182|  3.37M|        ioffset += instr_size(instr);
  183|  3.37M|    }
  184|  52.7k|    if (handler.h_label >= 0) {
  ------------------
  |  Branch (184:9): [True: 0, False: 52.7k]
  ------------------
  185|      0|        int handler_offset = instrs->s_instrs[handler.h_label].i_offset;
  186|      0|        RETURN_IF_ERROR(assemble_emit_exception_table_entry(a, start, ioffset,
  ------------------
  |  |   21|      0|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  187|      0|                                                            handler_offset,
  188|      0|                                                            &handler));
  189|      0|    }
  190|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  191|  52.7k|}
assemble.c:assemble_emit_exception_table_entry:
  139|   179k|{
  140|   179k|    Py_ssize_t len = PyBytesWriter_GetSize(a->a_except_table_writer);
  141|   179k|    if (a->a_except_table_off + MAX_SIZE_OF_ENTRY >= len) {
  ------------------
  |  |  133|   179k|#define MAX_SIZE_OF_ENTRY 20
  ------------------
  |  Branch (141:9): [True: 8.06k, False: 171k]
  ------------------
  142|  8.06k|        RETURN_IF_ERROR(PyBytesWriter_Resize(a->a_except_table_writer, len * 2));
  ------------------
  |  |   21|  8.06k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 8.06k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  143|  8.06k|    }
  144|   179k|    int size = end-start;
  145|   179k|    assert(end > start);
  ------------------
  |  Branch (145:5): [True: 179k, False: 0]
  ------------------
  146|   179k|    int target = handler_offset;
  147|   179k|    int depth = handler->h_startdepth - 1;
  148|   179k|    if (handler->h_preserve_lasti > 0) {
  ------------------
  |  Branch (148:9): [True: 133k, False: 46.5k]
  ------------------
  149|   133k|        depth -= 1;
  150|   133k|    }
  151|   179k|    assert(depth >= 0);
  ------------------
  |  Branch (151:5): [True: 179k, False: 0]
  ------------------
  152|   179k|    int depth_lasti = (depth<<1) | handler->h_preserve_lasti;
  153|   179k|    assemble_emit_exception_table_item(a, start, (1<<7));
  154|   179k|    assemble_emit_exception_table_item(a, size, 0);
  155|   179k|    assemble_emit_exception_table_item(a, target, 0);
  156|   179k|    assemble_emit_exception_table_item(a, depth_lasti, 0);
  157|   179k|    return SUCCESS;
  ------------------
  |  |   17|   179k|#define SUCCESS 0
  ------------------
  158|   179k|}
assemble.c:assemble_emit_exception_table_item:
  110|   719k|{
  111|   719k|    assert ((msb | 128) == 128);
  ------------------
  |  Branch (111:5): [True: 719k, False: 0]
  ------------------
  112|   719k|    assert(value >= 0 && value < (1 << 30));
  ------------------
  |  Branch (112:5): [True: 719k, False: 0]
  |  Branch (112:5): [True: 719k, False: 0]
  ------------------
  113|   719k|    if (value >= 1 << 24) {
  ------------------
  |  Branch (113:9): [True: 0, False: 719k]
  ------------------
  114|      0|        write_except_byte(a, (value >> 24) | CONTINUATION_BIT | msb);
  ------------------
  |  |  106|      0|#define CONTINUATION_BIT 64
  ------------------
  115|      0|        msb = 0;
  116|      0|    }
  117|   719k|    if (value >= 1 << 18) {
  ------------------
  |  Branch (117:9): [True: 0, False: 719k]
  ------------------
  118|      0|        write_except_byte(a, ((value >> 18)&0x3f) | CONTINUATION_BIT | msb);
  ------------------
  |  |  106|      0|#define CONTINUATION_BIT 64
  ------------------
  119|      0|        msb = 0;
  120|      0|    }
  121|   719k|    if (value >= 1 << 12) {
  ------------------
  |  Branch (121:9): [True: 183k, False: 536k]
  ------------------
  122|   183k|        write_except_byte(a, ((value >> 12)&0x3f) | CONTINUATION_BIT | msb);
  ------------------
  |  |  106|   183k|#define CONTINUATION_BIT 64
  ------------------
  123|   183k|        msb = 0;
  124|   183k|    }
  125|   719k|    if (value >= 1 << 6) {
  ------------------
  |  Branch (125:9): [True: 347k, False: 372k]
  ------------------
  126|   347k|        write_except_byte(a, ((value >> 6)&0x3f) | CONTINUATION_BIT | msb);
  ------------------
  |  |  106|   347k|#define CONTINUATION_BIT 64
  ------------------
  127|   347k|        msb = 0;
  128|   347k|    }
  129|   719k|    write_except_byte(a, (value&0x3f) | msb);
  130|   719k|}
assemble.c:write_except_byte:
  101|  1.25M|write_except_byte(struct assembler *a, int byte) {
  102|  1.25M|    unsigned char *p = (unsigned char *) PyBytesWriter_GetData(a->a_except_table_writer);
  103|  1.25M|    p[a->a_except_table_off++] = byte;
  104|  1.25M|}
assemble.c:makecode:
  600|  52.7k|{
  601|  52.7k|    PyCodeObject *co = NULL;
  602|  52.7k|    PyObject *names = NULL;
  603|  52.7k|    PyObject *consts = NULL;
  604|  52.7k|    PyObject *localsplusnames = NULL;
  605|  52.7k|    PyObject *localspluskinds = NULL;
  606|  52.7k|    names = dict_keys_inorder(umd->u_names, 0);
  607|  52.7k|    if (!names) {
  ------------------
  |  Branch (607:9): [True: 0, False: 52.7k]
  ------------------
  608|      0|        goto error;
  609|      0|    }
  610|  52.7k|    if (_PyCompile_ConstCacheMergeOne(const_cache, &names) < 0) {
  ------------------
  |  Branch (610:9): [True: 0, False: 52.7k]
  ------------------
  611|      0|        goto error;
  612|      0|    }
  613|       |
  614|  52.7k|    consts = PyList_AsTuple(constslist); /* PyCode_New requires a tuple */
  615|  52.7k|    if (consts == NULL) {
  ------------------
  |  Branch (615:9): [True: 0, False: 52.7k]
  ------------------
  616|      0|        goto error;
  617|      0|    }
  618|  52.7k|    if (_PyCompile_ConstCacheMergeOne(const_cache, &consts) < 0) {
  ------------------
  |  Branch (618:9): [True: 0, False: 52.7k]
  ------------------
  619|      0|        goto error;
  620|      0|    }
  621|       |
  622|  52.7k|    assert(umd->u_posonlyargcount < INT_MAX);
  ------------------
  |  Branch (622:5): [True: 52.7k, False: 0]
  ------------------
  623|  52.7k|    assert(umd->u_argcount < INT_MAX);
  ------------------
  |  Branch (623:5): [True: 52.7k, False: 0]
  ------------------
  624|  52.7k|    assert(umd->u_kwonlyargcount < INT_MAX);
  ------------------
  |  Branch (624:5): [True: 52.7k, False: 0]
  ------------------
  625|  52.7k|    int posonlyargcount = (int)umd->u_posonlyargcount;
  626|  52.7k|    int posorkwargcount = (int)umd->u_argcount;
  627|  52.7k|    assert(INT_MAX - posonlyargcount - posorkwargcount > 0);
  ------------------
  |  Branch (627:5): [True: 52.7k, False: 0]
  ------------------
  628|  52.7k|    int kwonlyargcount = (int)umd->u_kwonlyargcount;
  629|       |
  630|  52.7k|    localsplusnames = PyTuple_New(nlocalsplus);
  631|  52.7k|    if (localsplusnames == NULL) {
  ------------------
  |  Branch (631:9): [True: 0, False: 52.7k]
  ------------------
  632|      0|        goto error;
  633|      0|    }
  634|  52.7k|    localspluskinds = PyBytes_FromStringAndSize(NULL, nlocalsplus);
  635|  52.7k|    if (localspluskinds == NULL) {
  ------------------
  |  Branch (635:9): [True: 0, False: 52.7k]
  ------------------
  636|      0|        goto error;
  637|      0|    }
  638|  52.7k|    if (compute_localsplus_info(
  ------------------
  |  Branch (638:9): [True: 0, False: 52.7k]
  ------------------
  639|  52.7k|            umd, nlocalsplus, code_flags,
  640|  52.7k|            localsplusnames, localspluskinds) == ERROR)
  ------------------
  |  |   18|  52.7k|#define ERROR -1
  ------------------
  641|      0|    {
  642|      0|        goto error;
  643|      0|    }
  644|       |
  645|  52.7k|    struct _PyCodeConstructor con = {
  646|  52.7k|        .filename = filename,
  647|  52.7k|        .name = umd->u_name,
  648|  52.7k|        .qualname = umd->u_qualname ? umd->u_qualname : umd->u_name,
  ------------------
  |  Branch (648:21): [True: 42.6k, False: 10.0k]
  ------------------
  649|  52.7k|        .flags = code_flags,
  650|       |
  651|  52.7k|        .code = a->a_bytecode,
  652|  52.7k|        .firstlineno = umd->u_firstlineno,
  653|  52.7k|        .linetable = a->a_linetable,
  654|       |
  655|  52.7k|        .consts = consts,
  656|  52.7k|        .names = names,
  657|       |
  658|  52.7k|        .localsplusnames = localsplusnames,
  659|  52.7k|        .localspluskinds = localspluskinds,
  660|       |
  661|  52.7k|        .argcount = posonlyargcount + posorkwargcount,
  662|  52.7k|        .posonlyargcount = posonlyargcount,
  663|  52.7k|        .kwonlyargcount = kwonlyargcount,
  664|       |
  665|  52.7k|        .stacksize = maxdepth,
  666|       |
  667|  52.7k|        .exceptiontable = a->a_except_table,
  668|  52.7k|    };
  669|       |
  670|  52.7k|   if (_PyCode_Validate(&con) < 0) {
  ------------------
  |  Branch (670:8): [True: 0, False: 52.7k]
  ------------------
  671|      0|        goto error;
  672|      0|    }
  673|       |
  674|  52.7k|    if (_PyCompile_ConstCacheMergeOne(const_cache, &localsplusnames) < 0) {
  ------------------
  |  Branch (674:9): [True: 0, False: 52.7k]
  ------------------
  675|      0|        goto error;
  676|      0|    }
  677|  52.7k|    con.localsplusnames = localsplusnames;
  678|       |
  679|  52.7k|    co = _PyCode_New(&con);
  680|  52.7k|    if (co == NULL) {
  ------------------
  |  Branch (680:9): [True: 0, False: 52.7k]
  ------------------
  681|      0|        goto error;
  682|      0|    }
  683|       |
  684|  52.7k|error:
  685|  52.7k|    Py_XDECREF(names);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  686|  52.7k|    Py_XDECREF(consts);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|  52.7k|    Py_XDECREF(localsplusnames);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  688|  52.7k|    Py_XDECREF(localspluskinds);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|  52.7k|    return co;
  690|  52.7k|}
assemble.c:dict_keys_inorder:
  479|  52.7k|{
  480|  52.7k|    PyObject *tuple, *k, *v;
  481|  52.7k|    Py_ssize_t pos = 0, size = PyDict_GET_SIZE(dict);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  482|       |
  483|  52.7k|    tuple = PyTuple_New(size);
  484|  52.7k|    if (tuple == NULL)
  ------------------
  |  Branch (484:9): [True: 0, False: 52.7k]
  ------------------
  485|      0|        return NULL;
  486|   252k|    while (PyDict_Next(dict, &pos, &k, &v)) {
  ------------------
  |  Branch (486:12): [True: 200k, False: 52.7k]
  ------------------
  487|   200k|        Py_ssize_t i = PyLong_AsSsize_t(v);
  488|   200k|        if (i == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (488:13): [True: 0, False: 200k]
  |  Branch (488:24): [True: 0, False: 0]
  ------------------
  489|      0|            Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|      0|            return NULL;
  491|      0|        }
  492|   200k|        assert((i - offset) < size);
  ------------------
  |  Branch (492:9): [True: 200k, False: 0]
  ------------------
  493|   200k|        assert((i - offset) >= 0);
  ------------------
  |  Branch (493:9): [True: 200k, False: 0]
  ------------------
  494|   200k|        PyTuple_SET_ITEM(tuple, i - offset, Py_NewRef(k));
  ------------------
  |  |   40|   200k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   200k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   200k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   200k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   200k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|   200k|    }
  496|  52.7k|    return tuple;
  497|  52.7k|}
assemble.c:compute_localsplus_info:
  506|  52.7k|{
  507|  52.7k|    PyObject *k, *v;
  508|  52.7k|    Py_ssize_t pos = 0;
  509|       |
  510|       |    // Set the locals kinds.  Arg vars fill the first portion of the list.
  511|  52.7k|    struct {
  512|  52.7k|        int count;
  513|  52.7k|        _PyLocals_Kind kind;
  514|  52.7k|    }  argvarkinds[6] = {
  515|  52.7k|        {(int)umd->u_posonlyargcount, CO_FAST_ARG_POS},
  ------------------
  |  |  192|  52.7k|#define CO_FAST_ARG_POS (0x02)  // pos-only, pos-or-kw, varargs
  ------------------
  516|  52.7k|        {(int)umd->u_argcount, CO_FAST_ARG_POS | CO_FAST_ARG_KW},
  ------------------
  |  |  192|  52.7k|#define CO_FAST_ARG_POS (0x02)  // pos-only, pos-or-kw, varargs
  ------------------
                      {(int)umd->u_argcount, CO_FAST_ARG_POS | CO_FAST_ARG_KW},
  ------------------
  |  |  193|  52.7k|#define CO_FAST_ARG_KW  (0x04)  // kw-only, pos-or-kw, varkwargs
  ------------------
  517|  52.7k|        {(int)umd->u_kwonlyargcount, CO_FAST_ARG_KW},
  ------------------
  |  |  193|  52.7k|#define CO_FAST_ARG_KW  (0x04)  // kw-only, pos-or-kw, varkwargs
  ------------------
  518|  52.7k|        {!!(flags & CO_VARARGS), CO_FAST_ARG_VAR | CO_FAST_ARG_POS},
  ------------------
  |  |  124|  52.7k|#define CO_VARARGS      0x0004
  ------------------
                      {!!(flags & CO_VARARGS), CO_FAST_ARG_VAR | CO_FAST_ARG_POS},
  ------------------
  |  |  194|  52.7k|#define CO_FAST_ARG_VAR (0x08)  // varargs, varkwargs
  ------------------
                      {!!(flags & CO_VARARGS), CO_FAST_ARG_VAR | CO_FAST_ARG_POS},
  ------------------
  |  |  192|  52.7k|#define CO_FAST_ARG_POS (0x02)  // pos-only, pos-or-kw, varargs
  ------------------
  519|  52.7k|        {!!(flags & CO_VARKEYWORDS), CO_FAST_ARG_VAR | CO_FAST_ARG_KW},
  ------------------
  |  |  125|  52.7k|#define CO_VARKEYWORDS  0x0008
  ------------------
                      {!!(flags & CO_VARKEYWORDS), CO_FAST_ARG_VAR | CO_FAST_ARG_KW},
  ------------------
  |  |  194|  52.7k|#define CO_FAST_ARG_VAR (0x08)  // varargs, varkwargs
  ------------------
                      {!!(flags & CO_VARKEYWORDS), CO_FAST_ARG_VAR | CO_FAST_ARG_KW},
  ------------------
  |  |  193|  52.7k|#define CO_FAST_ARG_KW  (0x04)  // kw-only, pos-or-kw, varkwargs
  ------------------
  520|  52.7k|        {-1, 0},  // the remaining local vars
  521|  52.7k|    };
  522|  52.7k|    int max = 0;
  523|   369k|    for (int i = 0; i < 6; i++) {
  ------------------
  |  Branch (523:21): [True: 316k, False: 52.7k]
  ------------------
  524|   316k|        max = argvarkinds[i].count < 0
  ------------------
  |  Branch (524:15): [True: 52.7k, False: 263k]
  ------------------
  525|   316k|            ? INT_MAX
  526|   316k|            : max + argvarkinds[i].count;
  527|   403k|        while (pos < max && PyDict_Next(umd->u_varnames, &pos, &k, &v)) {
  ------------------
  |  Branch (527:16): [True: 139k, False: 263k]
  |  Branch (527:29): [True: 86.6k, False: 52.7k]
  ------------------
  528|  86.6k|            int offset = PyLong_AsInt(v);
  529|  86.6k|            if (offset == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (529:17): [True: 0, False: 86.6k]
  |  Branch (529:33): [True: 0, False: 0]
  ------------------
  530|      0|                return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  531|      0|            }
  532|  86.6k|            assert(offset >= 0);
  ------------------
  |  Branch (532:13): [True: 86.6k, False: 0]
  ------------------
  533|  86.6k|            assert(offset < nlocalsplus);
  ------------------
  |  Branch (533:13): [True: 86.6k, False: 0]
  ------------------
  534|       |
  535|  86.6k|            _PyLocals_Kind kind = CO_FAST_LOCAL | argvarkinds[i].kind;
  ------------------
  |  |  197|  86.6k|#define CO_FAST_LOCAL   (0x20)
  ------------------
  536|       |
  537|  86.6k|            if (umd->u_fasthidden != NULL) {
  ------------------
  |  Branch (537:17): [True: 3.82k, False: 82.7k]
  ------------------
  538|  3.82k|                int hidden = PySet_Contains(umd->u_fasthidden, k);
  539|  3.82k|                RETURN_IF_ERROR(hidden);
  ------------------
  |  |   21|  3.82k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 3.82k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  540|  3.82k|                if (hidden) {
  ------------------
  |  Branch (540:21): [True: 3.82k, False: 0]
  ------------------
  541|  3.82k|                    kind |= CO_FAST_HIDDEN;
  ------------------
  |  |  196|  3.82k|#define CO_FAST_HIDDEN  (0x10)
  ------------------
  542|  3.82k|                }
  543|  3.82k|            }
  544|       |
  545|  86.6k|            int has_key = PyDict_Contains(umd->u_cellvars, k);
  546|  86.6k|            RETURN_IF_ERROR(has_key);
  ------------------
  |  |   21|  86.6k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 86.6k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  547|  86.6k|            if (has_key) {
  ------------------
  |  Branch (547:17): [True: 104, False: 86.5k]
  ------------------
  548|    104|                kind |= CO_FAST_CELL;
  ------------------
  |  |  198|    104|#define CO_FAST_CELL    (0x40)
  ------------------
  549|    104|            }
  550|       |
  551|  86.6k|            _Py_set_localsplus_info(offset, k, kind, names, kinds);
  552|  86.6k|        }
  553|   316k|    }
  554|  52.7k|    int nlocals = (int)PyDict_GET_SIZE(umd->u_varnames);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  555|       |
  556|       |    // This counter mirrors the fix done in fix_cell_offsets().
  557|  52.7k|    int numdropped = 0, cellvar_offset = -1;
  558|  52.7k|    pos = 0;
  559|  64.7k|    while (PyDict_Next(umd->u_cellvars, &pos, &k, &v)) {
  ------------------
  |  Branch (559:12): [True: 11.9k, False: 52.7k]
  ------------------
  560|  11.9k|        int has_name = PyDict_Contains(umd->u_varnames, k);
  561|  11.9k|        RETURN_IF_ERROR(has_name);
  ------------------
  |  |   21|  11.9k|    if ((X) < 0) {          \
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 11.9k]
  |  |  ------------------
  |  |   22|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   18|      0|#define ERROR -1
  |  |  ------------------
  |  |   23|      0|    }
  ------------------
  562|  11.9k|        if (has_name) {
  ------------------
  |  Branch (562:13): [True: 104, False: 11.8k]
  ------------------
  563|       |            // Skip cells that are already covered by locals.
  564|    104|            numdropped += 1;
  565|    104|            continue;
  566|    104|        }
  567|       |
  568|  11.8k|        cellvar_offset = PyLong_AsInt(v);
  569|  11.8k|        if (cellvar_offset == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (569:13): [True: 0, False: 11.8k]
  |  Branch (569:37): [True: 0, False: 0]
  ------------------
  570|      0|            return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  571|      0|        }
  572|  11.8k|        assert(cellvar_offset >= 0);
  ------------------
  |  Branch (572:9): [True: 11.8k, False: 0]
  ------------------
  573|  11.8k|        cellvar_offset += nlocals - numdropped;
  574|  11.8k|        assert(cellvar_offset < nlocalsplus);
  ------------------
  |  Branch (574:9): [True: 11.8k, False: 0]
  ------------------
  575|  11.8k|        _Py_set_localsplus_info(cellvar_offset, k, CO_FAST_CELL, names, kinds);
  ------------------
  |  |  198|  11.8k|#define CO_FAST_CELL    (0x40)
  ------------------
  576|  11.8k|    }
  577|       |
  578|  52.7k|    pos = 0;
  579|  65.1k|    while (PyDict_Next(umd->u_freevars, &pos, &k, &v)) {
  ------------------
  |  Branch (579:12): [True: 12.3k, False: 52.7k]
  ------------------
  580|  12.3k|        int offset = PyLong_AsInt(v);
  581|  12.3k|        if (offset == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (581:13): [True: 0, False: 12.3k]
  |  Branch (581:29): [True: 0, False: 0]
  ------------------
  582|      0|            return ERROR;
  ------------------
  |  |   18|      0|#define ERROR -1
  ------------------
  583|      0|        }
  584|  12.3k|        assert(offset >= 0);
  ------------------
  |  Branch (584:9): [True: 12.3k, False: 0]
  ------------------
  585|  12.3k|        offset += nlocals - numdropped;
  586|  12.3k|        assert(offset < nlocalsplus);
  ------------------
  |  Branch (586:9): [True: 12.3k, False: 0]
  ------------------
  587|       |        /* XXX If the assertion below fails it is most likely because a freevar
  588|       |           was added to u_freevars with the wrong index due to not taking into
  589|       |           account cellvars already present, see gh-128632. */
  590|  12.3k|        assert(offset > cellvar_offset);
  ------------------
  |  Branch (590:9): [True: 12.3k, False: 0]
  ------------------
  591|  12.3k|        _Py_set_localsplus_info(offset, k, CO_FAST_FREE, names, kinds);
  ------------------
  |  |  199|  12.3k|#define CO_FAST_FREE    (0x80)
  ------------------
  592|  12.3k|    }
  593|  52.7k|    return SUCCESS;
  ------------------
  |  |   17|  52.7k|#define SUCCESS 0
  ------------------
  594|  52.7k|}
assemble.c:assemble_free:
   91|  52.7k|{
   92|  52.7k|    PyBytesWriter_Discard(a->a_bytecode_writer);
   93|  52.7k|    PyBytesWriter_Discard(a->a_linetable_writer);
   94|  52.7k|    PyBytesWriter_Discard(a->a_except_table_writer);
   95|  52.7k|    Py_XDECREF(a->a_bytecode);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|  52.7k|    Py_XDECREF(a->a_linetable);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|  52.7k|    Py_XDECREF(a->a_except_table);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  52.7k|}

_PyAST_GetDocString:
 1102|   101k|{
 1103|   101k|    if (!asdl_seq_LEN(body)) {
  ------------------
  |  |   83|   101k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   202k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 826, False: 100k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1103:9): [True: 826, False: 100k]
  ------------------
 1104|    826|        return NULL;
 1105|    826|    }
 1106|   100k|    stmt_ty st = asdl_seq_GET(body, 0);
  ------------------
  |  |   82|   100k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   100k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1107|   100k|    if (st->kind != Expr_kind) {
  ------------------
  |  Branch (1107:9): [True: 42.4k, False: 57.9k]
  ------------------
 1108|  42.4k|        return NULL;
 1109|  42.4k|    }
 1110|  57.9k|    expr_ty e = st->v.Expr.value;
 1111|  57.9k|    if (e->kind == Constant_kind && PyUnicode_CheckExact(e->v.Constant.value)) {
  ------------------
  |  |  104|  9.65k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  9.65k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  9.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  9.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 6.69k, False: 2.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1111:9): [True: 9.65k, False: 48.2k]
  ------------------
 1112|  6.69k|        return e->v.Constant.value;
 1113|  6.69k|    }
 1114|  51.2k|    return NULL;
 1115|  57.9k|}

_PyAST_Preprocess:
  978|  12.7k|{
  979|  12.7k|    _PyASTPreprocessState state;
  980|  12.7k|    memset(&state, 0, sizeof(_PyASTPreprocessState));
  981|  12.7k|    state.filename = filename;
  982|  12.7k|    state.module = module;
  983|  12.7k|    state.optimize = optimize;
  984|  12.7k|    state.ff_features = ff_features;
  985|  12.7k|    state.syntax_check_only = syntax_check_only;
  986|  12.7k|    state.enable_warnings = enable_warnings;
  987|  12.7k|    if (_Py_CArray_Init(&state.cf_finally, sizeof(ControlFlowInFinallyContext), 20) < 0) {
  ------------------
  |  Branch (987:9): [True: 0, False: 12.7k]
  ------------------
  988|      0|        return -1;
  989|      0|    }
  990|       |
  991|  12.7k|    int ret = astfold_mod(mod, arena, &state);
  992|  12.7k|    assert(ret || PyErr_Occurred());
  ------------------
  |  Branch (992:5): [True: 12.7k, False: 0]
  |  Branch (992:5): [True: 0, False: 0]
  ------------------
  993|       |
  994|  12.7k|    _Py_CArray_Fini(&state.cf_finally);
  995|  12.7k|    return ret;
  996|  12.7k|}
ast_preprocess.c:astfold_mod:
  498|  12.7k|{
  499|  12.7k|    switch (node_->kind) {
  ------------------
  |  Branch (499:13): [True: 12.7k, False: 0]
  ------------------
  500|  8.76k|    case Module_kind:
  ------------------
  |  Branch (500:5): [True: 8.76k, False: 3.95k]
  ------------------
  501|  8.76k|        CALL(astfold_body, asdl_seq, node_->v.Module.body);
  ------------------
  |  |  409|  8.76k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 8.76k]
  |  |  ------------------
  |  |  410|  8.76k|        return 0;
  ------------------
  502|  8.76k|        break;
  503|  2.23k|    case Interactive_kind:
  ------------------
  |  Branch (503:5): [True: 2.23k, False: 10.4k]
  ------------------
  504|  2.23k|        CALL_SEQ(astfold_stmt, stmt, node_->v.Interactive.body);
  ------------------
  |  |  416|  2.23k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  2.23k|    Py_ssize_t i; \
  |  |  418|  2.23k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  7.54k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  7.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  15.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.54k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 5.30k, False: 2.23k]
  |  |  ------------------
  |  |  420|  5.30k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  5.30k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.30k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  5.30k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 5.30k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 5.30k]
  |  |  ------------------
  |  |  422|  5.30k|            return 0; \
  |  |  423|  5.30k|    } \
  |  |  424|  2.23k|}
  ------------------
  505|  2.23k|        break;
  506|  1.72k|    case Expression_kind:
  ------------------
  |  Branch (506:5): [True: 1.72k, False: 11.0k]
  ------------------
  507|  1.72k|        CALL(astfold_expr, expr_ty, node_->v.Expression.body);
  ------------------
  |  |  409|  1.72k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.72k]
  |  |  ------------------
  |  |  410|  1.72k|        return 0;
  ------------------
  508|  1.72k|        break;
  509|       |    // The following top level nodes don't participate in constant folding
  510|      0|    case FunctionType_kind:
  ------------------
  |  Branch (510:5): [True: 0, False: 12.7k]
  ------------------
  511|      0|        break;
  512|       |    // No default case, so the compiler will emit a warning if new top level
  513|       |    // compilation nodes are added without being handled here
  514|  12.7k|    }
  515|  12.7k|    return 1;
  516|  12.7k|}
ast_preprocess.c:astfold_body:
  468|  31.4k|{
  469|  31.4k|    int docstring = _PyAST_GetDocString(stmts) != NULL;
  470|  31.4k|    if (docstring && (state->optimize >= 2)) {
  ------------------
  |  Branch (470:9): [True: 2.27k, False: 29.1k]
  |  Branch (470:22): [True: 306, False: 1.96k]
  ------------------
  471|       |        /* remove the docstring */
  472|    306|        if (!remove_docstring(stmts, 0, ctx_)) {
  ------------------
  |  Branch (472:13): [True: 0, False: 306]
  ------------------
  473|      0|            return 0;
  474|      0|        }
  475|    306|        docstring = 0;
  476|    306|    }
  477|  31.4k|    CALL_SEQ(astfold_stmt, stmt, stmts);
  ------------------
  |  |  416|  31.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  31.4k|    Py_ssize_t i; \
  |  |  418|  31.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|   205k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|   205k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   410k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 359, False: 204k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 173k, False: 31.4k]
  |  |  ------------------
  |  |  420|   173k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|   173k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   173k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|   173k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 173k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 173k]
  |  |  ------------------
  |  |  422|   173k|            return 0; \
  |  |  423|   173k|    } \
  |  |  424|  31.4k|}
  ------------------
  478|  31.4k|    if (!docstring && _PyAST_GetDocString(stmts) != NULL) {
  ------------------
  |  Branch (478:9): [True: 29.4k, False: 1.96k]
  |  Branch (478:23): [True: 24, False: 29.4k]
  ------------------
  479|     24|        stmt_ty st = (stmt_ty)asdl_seq_GET(stmts, 0);
  ------------------
  |  |   82|     24|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     24|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  480|     24|        asdl_expr_seq *values = _Py_asdl_expr_seq_new(1, ctx_);
  481|     24|        if (!values) {
  ------------------
  |  Branch (481:13): [True: 0, False: 24]
  ------------------
  482|      0|            return 0;
  483|      0|        }
  484|     24|        asdl_seq_SET(values, 0, st->v.Expr.value);
  ------------------
  |  |   94|     24|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|     24|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  485|     24|        expr_ty expr = _PyAST_JoinedStr(values, st->lineno, st->col_offset,
  486|     24|                                        st->end_lineno, st->end_col_offset,
  487|     24|                                        ctx_);
  488|     24|        if (!expr) {
  ------------------
  |  Branch (488:13): [True: 0, False: 24]
  ------------------
  489|      0|            return 0;
  490|      0|        }
  491|     24|        st->v.Expr.value = expr;
  492|     24|    }
  493|  31.4k|    return 1;
  494|  31.4k|}
ast_preprocess.c:remove_docstring:
  443|    306|{
  444|    306|    assert(_PyAST_GetDocString(stmts) != NULL);
  ------------------
  |  Branch (444:5): [True: 306, False: 0]
  ------------------
  445|       |    // In case there's just the docstring in the body, replace it with `pass`
  446|       |    // keyword, so body won't be empty.
  447|    306|    if (asdl_seq_LEN(stmts) == 1) {
  ------------------
  |  |   83|    306|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    612|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 306]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (447:9): [True: 278, False: 28]
  ------------------
  448|    278|        stmt_ty docstring = (stmt_ty)asdl_seq_GET(stmts, 0);
  ------------------
  |  |   82|    278|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    278|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  449|    278|        stmt_ty pass = _PyAST_Pass(
  450|    278|            docstring->lineno, docstring->col_offset,
  451|       |            // we know that `pass` always takes 4 chars and a single line,
  452|       |            // while docstring can span on multiple lines
  453|    278|            docstring->lineno, docstring->col_offset + 4,
  454|    278|            ctx_
  455|    278|        );
  456|    278|        if (pass == NULL) {
  ------------------
  |  Branch (456:13): [True: 0, False: 278]
  ------------------
  457|      0|            return 0;
  458|      0|        }
  459|    278|        asdl_seq_SET(stmts, 0, pass);
  ------------------
  |  |   94|    278|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|    278|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  460|    278|        return 1;
  461|    278|    }
  462|       |    // In case there are more than 1 body items, just remove the docstring.
  463|     28|    return stmt_seq_remove_item(stmts, idx);
  464|    306|}
ast_preprocess.c:stmt_seq_remove_item:
  429|     28|{
  430|     28|    if (idx >= asdl_seq_LEN(stmts)) {
  ------------------
  |  |   83|     28|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     56|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (430:9): [True: 0, False: 28]
  ------------------
  431|      0|        return 0;
  432|      0|    }
  433|    116|    for (Py_ssize_t i = idx; i < asdl_seq_LEN(stmts) - 1; i++) {
  ------------------
  |  |   83|    116|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    232|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 116]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (433:30): [True: 88, False: 28]
  ------------------
  434|     88|        stmt_ty st = (stmt_ty)asdl_seq_GET(stmts, i+1);
  ------------------
  |  |   82|     88|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     88|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  435|     88|        asdl_seq_SET(stmts, i, st);
  ------------------
  |  |   94|     88|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|     88|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  436|     88|    }
  437|     28|    stmts->size--;
  438|     28|    return 1;
  439|     28|}
ast_preprocess.c:astfold_stmt:
  685|   224k|{
  686|   224k|    ENTER_RECURSIVE();
  ------------------
  |  |   29|   224k|#define ENTER_RECURSIVE() \
  |  |   30|   224k|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (30:5): [True: 0, False: 224k]
  |  |  ------------------
  |  |   31|      0|    return 0; \
  |  |   32|      0|}
  ------------------
  687|   224k|    switch (node_->kind) {
  ------------------
  |  Branch (687:13): [True: 224k, False: 0]
  ------------------
  688|  6.38k|    case FunctionDef_kind: {
  ------------------
  |  Branch (688:5): [True: 6.38k, False: 218k]
  ------------------
  689|  6.38k|        CALL_SEQ(astfold_type_param, type_param, node_->v.FunctionDef.type_params);
  ------------------
  |  |  416|  6.38k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  6.38k|    Py_ssize_t i; \
  |  |  418|  6.38k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  12.0k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  12.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  24.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 3.55k, False: 8.51k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 5.67k, False: 6.38k]
  |  |  ------------------
  |  |  420|  5.67k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  5.67k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.67k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  5.67k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 5.67k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 5.67k]
  |  |  ------------------
  |  |  422|  5.67k|            return 0; \
  |  |  423|  5.67k|    } \
  |  |  424|  6.38k|}
  ------------------
  690|  6.38k|        CALL(astfold_arguments, arguments_ty, node_->v.FunctionDef.args);
  ------------------
  |  |  409|  6.38k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  410|  6.38k|        return 0;
  ------------------
  691|  6.38k|        BEFORE_FUNC_BODY(state, node_);
  ------------------
  |  |  118|  6.38k|#define BEFORE_FUNC_BODY(S, N)  PUSH_CONTEXT((S), (N), false, true, false)
  |  |  ------------------
  |  |  |  |  110|  6.38k|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 6.38k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  692|  6.38k|        CALL(astfold_body, asdl_seq, node_->v.FunctionDef.body);
  ------------------
  |  |  409|  6.38k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 6.38k]
  |  |  ------------------
  |  |  410|  6.38k|        return 0;
  ------------------
  693|  6.38k|        AFTER_FUNC_BODY(state);
  ------------------
  |  |  119|  6.38k|#define AFTER_FUNC_BODY(S)      POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|  6.38k|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  694|  6.38k|        CALL_SEQ(astfold_expr, expr, node_->v.FunctionDef.decorator_list);
  ------------------
  |  |  416|  6.38k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  6.38k|    Py_ssize_t i; \
  |  |  418|  6.38k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  9.96k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  9.96k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  19.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 5.88k, False: 4.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 3.57k, False: 6.38k]
  |  |  ------------------
  |  |  420|  3.57k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.57k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.57k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  3.57k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 3.57k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 3.57k]
  |  |  ------------------
  |  |  422|  3.57k|            return 0; \
  |  |  423|  3.57k|    } \
  |  |  424|  6.38k|}
  ------------------
  695|  6.38k|        if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
  ------------------
  |  |  147|  6.38k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (695:13): [True: 3.57k, False: 2.81k]
  ------------------
  696|  3.57k|            CALL_OPT(astfold_expr, expr_ty, node_->v.FunctionDef.returns);
  ------------------
  |  |  413|  3.57k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 930, False: 2.64k]
  |  |  |  Branch (413:26): [True: 0, False: 930]
  |  |  ------------------
  |  |  414|  3.57k|        return 0;
  ------------------
  697|  3.57k|        }
  698|  6.38k|        break;
  699|  6.38k|    }
  700|  6.38k|    case AsyncFunctionDef_kind: {
  ------------------
  |  Branch (700:5): [True: 3.25k, False: 221k]
  ------------------
  701|  3.25k|        CALL_SEQ(astfold_type_param, type_param, node_->v.AsyncFunctionDef.type_params);
  ------------------
  |  |  416|  3.25k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.25k|    Py_ssize_t i; \
  |  |  418|  3.25k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.30k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.30k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.60k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 3.24k, False: 59]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 48, False: 3.25k]
  |  |  ------------------
  |  |  420|     48|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     48|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     48|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|     48|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 48, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 48]
  |  |  ------------------
  |  |  422|     48|            return 0; \
  |  |  423|     48|    } \
  |  |  424|  3.25k|}
  ------------------
  702|  3.25k|        CALL(astfold_arguments, arguments_ty, node_->v.AsyncFunctionDef.args);
  ------------------
  |  |  409|  3.25k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 3.25k]
  |  |  ------------------
  |  |  410|  3.25k|        return 0;
  ------------------
  703|  3.25k|        BEFORE_FUNC_BODY(state, node_);
  ------------------
  |  |  118|  3.25k|#define BEFORE_FUNC_BODY(S, N)  PUSH_CONTEXT((S), (N), false, true, false)
  |  |  ------------------
  |  |  |  |  110|  3.25k|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 3.25k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  704|  3.25k|        CALL(astfold_body, asdl_seq, node_->v.AsyncFunctionDef.body);
  ------------------
  |  |  409|  3.25k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 3.25k]
  |  |  ------------------
  |  |  410|  3.25k|        return 0;
  ------------------
  705|  3.25k|        AFTER_FUNC_BODY(state);
  ------------------
  |  |  119|  3.25k|#define AFTER_FUNC_BODY(S)      POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|  3.25k|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  706|  3.25k|        CALL_SEQ(astfold_expr, expr, node_->v.AsyncFunctionDef.decorator_list);
  ------------------
  |  |  416|  3.25k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.25k|    Py_ssize_t i; \
  |  |  418|  3.25k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.75k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.75k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.50k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 3.12k, False: 622]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 497, False: 3.25k]
  |  |  ------------------
  |  |  420|    497|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    497|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    497|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    497|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 497, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 497]
  |  |  ------------------
  |  |  422|    497|            return 0; \
  |  |  423|    497|    } \
  |  |  424|  3.25k|}
  ------------------
  707|  3.25k|        if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
  ------------------
  |  |  147|  3.25k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (707:13): [True: 2.45k, False: 800]
  ------------------
  708|  2.45k|            CALL_OPT(astfold_expr, expr_ty, node_->v.AsyncFunctionDef.returns);
  ------------------
  |  |  413|  2.45k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 1.73k, False: 718]
  |  |  |  Branch (413:26): [True: 0, False: 1.73k]
  |  |  ------------------
  |  |  414|  2.45k|        return 0;
  ------------------
  709|  2.45k|        }
  710|  3.25k|        break;
  711|  3.25k|    }
  712|  13.0k|    case ClassDef_kind:
  ------------------
  |  Branch (712:5): [True: 13.0k, False: 211k]
  ------------------
  713|  13.0k|        CALL_SEQ(astfold_type_param, type_param, node_->v.ClassDef.type_params);
  ------------------
  |  |  416|  13.0k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  13.0k|    Py_ssize_t i; \
  |  |  418|  13.0k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  21.0k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  21.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  42.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 10.8k, False: 10.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 7.98k, False: 13.0k]
  |  |  ------------------
  |  |  420|  7.98k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  7.98k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.98k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  7.98k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 7.98k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 7.98k]
  |  |  ------------------
  |  |  422|  7.98k|            return 0; \
  |  |  423|  7.98k|    } \
  |  |  424|  13.0k|}
  ------------------
  714|  13.0k|        CALL_SEQ(astfold_expr, expr, node_->v.ClassDef.bases);
  ------------------
  |  |  416|  13.0k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  13.0k|    Py_ssize_t i; \
  |  |  418|  13.0k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  13.4k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  13.4k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  26.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 12.6k, False: 728]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 369, False: 13.0k]
  |  |  ------------------
  |  |  420|    369|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    369|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    369|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    369|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 369, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 369]
  |  |  ------------------
  |  |  422|    369|            return 0; \
  |  |  423|    369|    } \
  |  |  424|  13.0k|}
  ------------------
  715|  13.0k|        CALL_SEQ(astfold_keyword, keyword, node_->v.ClassDef.keywords);
  ------------------
  |  |  416|  13.0k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  13.0k|    Py_ssize_t i; \
  |  |  418|  13.0k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  13.1k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  13.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  26.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 12.9k, False: 129]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 65, False: 13.0k]
  |  |  ------------------
  |  |  420|     65|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     65|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     65|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|     65|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 65, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 65]
  |  |  ------------------
  |  |  422|     65|            return 0; \
  |  |  423|     65|    } \
  |  |  424|  13.0k|}
  ------------------
  716|  13.0k|        CALL(astfold_body, asdl_seq, node_->v.ClassDef.body);
  ------------------
  |  |  409|  13.0k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |  410|  13.0k|        return 0;
  ------------------
  717|  13.0k|        CALL_SEQ(astfold_expr, expr, node_->v.ClassDef.decorator_list);
  ------------------
  |  |  416|  13.0k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  13.0k|    Py_ssize_t i; \
  |  |  418|  13.0k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  13.7k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  13.7k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  27.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 12.7k, False: 1.04k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 726, False: 13.0k]
  |  |  ------------------
  |  |  420|    726|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    726|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    726|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    726|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 726, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 726]
  |  |  ------------------
  |  |  422|    726|            return 0; \
  |  |  423|    726|    } \
  |  |  424|  13.0k|}
  ------------------
  718|  13.0k|        break;
  719|  1.06k|    case Return_kind:
  ------------------
  |  Branch (719:5): [True: 1.06k, False: 223k]
  ------------------
  720|  1.06k|        BEFORE_RETURN(state, node_);
  ------------------
  |  |  124|  1.06k|    if (!before_return((S), (N))) { \
  |  |  ------------------
  |  |  |  Branch (124:9): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |  125|      0|        return 0; \
  |  |  126|      0|    }
  ------------------
  721|  1.06k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Return.value);
  ------------------
  |  |  413|  1.06k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 675, False: 387]
  |  |  |  Branch (413:26): [True: 0, False: 675]
  |  |  ------------------
  |  |  414|  1.06k|        return 0;
  ------------------
  722|  1.06k|        break;
  723|  1.39k|    case Delete_kind:
  ------------------
  |  Branch (723:5): [True: 1.39k, False: 223k]
  ------------------
  724|  1.39k|        CALL_SEQ(astfold_expr, expr, node_->v.Delete.targets);
  ------------------
  |  |  416|  1.39k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.39k|    Py_ssize_t i; \
  |  |  418|  1.39k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  6.48k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  6.48k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  12.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.48k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 5.09k, False: 1.39k]
  |  |  ------------------
  |  |  420|  5.09k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  5.09k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  5.09k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 5.09k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 5.09k]
  |  |  ------------------
  |  |  422|  5.09k|            return 0; \
  |  |  423|  5.09k|    } \
  |  |  424|  1.39k|}
  ------------------
  725|  1.39k|        break;
  726|  9.70k|    case Assign_kind:
  ------------------
  |  Branch (726:5): [True: 9.70k, False: 215k]
  ------------------
  727|  9.70k|        CALL_SEQ(astfold_expr, expr, node_->v.Assign.targets);
  ------------------
  |  |  416|  9.70k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  9.70k|    Py_ssize_t i; \
  |  |  418|  9.70k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  64.9k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  64.9k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   129k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 64.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 55.2k, False: 9.70k]
  |  |  ------------------
  |  |  420|  55.2k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  55.2k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  55.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  55.2k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 55.2k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 55.2k]
  |  |  ------------------
  |  |  422|  55.2k|            return 0; \
  |  |  423|  55.2k|    } \
  |  |  424|  9.70k|}
  ------------------
  728|  9.70k|        CALL(astfold_expr, expr_ty, node_->v.Assign.value);
  ------------------
  |  |  409|  9.70k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 9.70k]
  |  |  ------------------
  |  |  410|  9.70k|        return 0;
  ------------------
  729|  9.70k|        break;
  730|  7.60k|    case AugAssign_kind:
  ------------------
  |  Branch (730:5): [True: 7.60k, False: 217k]
  ------------------
  731|  7.60k|        CALL(astfold_expr, expr_ty, node_->v.AugAssign.target);
  ------------------
  |  |  409|  7.60k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 7.60k]
  |  |  ------------------
  |  |  410|  7.60k|        return 0;
  ------------------
  732|  7.60k|        CALL(astfold_expr, expr_ty, node_->v.AugAssign.value);
  ------------------
  |  |  409|  7.60k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 7.60k]
  |  |  ------------------
  |  |  410|  7.60k|        return 0;
  ------------------
  733|  7.60k|        break;
  734|  25.7k|    case AnnAssign_kind:
  ------------------
  |  Branch (734:5): [True: 25.7k, False: 198k]
  ------------------
  735|  25.7k|        CALL(astfold_expr, expr_ty, node_->v.AnnAssign.target);
  ------------------
  |  |  409|  25.7k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 25.7k]
  |  |  ------------------
  |  |  410|  25.7k|        return 0;
  ------------------
  736|  25.7k|        if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
  ------------------
  |  |  147|  25.7k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (736:13): [True: 19.1k, False: 6.60k]
  ------------------
  737|  19.1k|            CALL(astfold_expr, expr_ty, node_->v.AnnAssign.annotation);
  ------------------
  |  |  409|  19.1k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 19.1k]
  |  |  ------------------
  |  |  410|  19.1k|        return 0;
  ------------------
  738|  19.1k|        }
  739|  25.7k|        CALL_OPT(astfold_expr, expr_ty, node_->v.AnnAssign.value);
  ------------------
  |  |  413|  25.7k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 526, False: 25.2k]
  |  |  |  Branch (413:26): [True: 0, False: 526]
  |  |  ------------------
  |  |  414|  25.7k|        return 0;
  ------------------
  740|  25.7k|        break;
  741|    629|    case TypeAlias_kind:
  ------------------
  |  Branch (741:5): [True: 629, False: 224k]
  ------------------
  742|    629|        CALL(astfold_expr, expr_ty, node_->v.TypeAlias.name);
  ------------------
  |  |  409|    629|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 629]
  |  |  ------------------
  |  |  410|    629|        return 0;
  ------------------
  743|    629|        CALL_SEQ(astfold_type_param, type_param, node_->v.TypeAlias.type_params);
  ------------------
  |  |  416|    629|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    629|    Py_ssize_t i; \
  |  |  418|    629|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|    630|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    630|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.26k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 628, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1, False: 629]
  |  |  ------------------
  |  |  420|      1|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|      1|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1]
  |  |  ------------------
  |  |  422|      1|            return 0; \
  |  |  423|      1|    } \
  |  |  424|    629|}
  ------------------
  744|    629|        CALL(astfold_expr, expr_ty, node_->v.TypeAlias.value);
  ------------------
  |  |  409|    629|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 629]
  |  |  ------------------
  |  |  410|    629|        return 0;
  ------------------
  745|    629|        break;
  746|  1.06k|    case For_kind: {
  ------------------
  |  Branch (746:5): [True: 1.06k, False: 223k]
  ------------------
  747|  1.06k|        CALL(astfold_expr, expr_ty, node_->v.For.target);
  ------------------
  |  |  409|  1.06k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |  410|  1.06k|        return 0;
  ------------------
  748|  1.06k|        CALL(astfold_expr, expr_ty, node_->v.For.iter);
  ------------------
  |  |  409|  1.06k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |  410|  1.06k|        return 0;
  ------------------
  749|  1.06k|        BEFORE_LOOP_BODY(state, node_);
  ------------------
  |  |  120|  1.06k|#define BEFORE_LOOP_BODY(S, N)  PUSH_CONTEXT((S), (N), false, false, true)
  |  |  ------------------
  |  |  |  |  110|  1.06k|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 1.06k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  750|  1.06k|        CALL_SEQ(astfold_stmt, stmt, node_->v.For.body);
  ------------------
  |  |  416|  1.06k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.06k|    Py_ssize_t i; \
  |  |  418|  1.06k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  2.70k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.70k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.41k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.70k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.64k, False: 1.06k]
  |  |  ------------------
  |  |  420|  1.64k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.64k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.64k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.64k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.64k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.64k]
  |  |  ------------------
  |  |  422|  1.64k|            return 0; \
  |  |  423|  1.64k|    } \
  |  |  424|  1.06k|}
  ------------------
  751|  1.06k|        AFTER_LOOP_BODY(state);
  ------------------
  |  |  121|  1.06k|#define AFTER_LOOP_BODY(S)      POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|  1.06k|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  752|  1.06k|        CALL_SEQ(astfold_stmt, stmt, node_->v.For.orelse);
  ------------------
  |  |  416|  1.06k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.06k|    Py_ssize_t i; \
  |  |  418|  1.06k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.27k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.27k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.55k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 931, False: 347]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 218, False: 1.06k]
  |  |  ------------------
  |  |  420|    218|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    218|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    218|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    218|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 218, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 218]
  |  |  ------------------
  |  |  422|    218|            return 0; \
  |  |  423|    218|    } \
  |  |  424|  1.06k|}
  ------------------
  753|  1.06k|        break;
  754|  1.06k|    }
  755|    228|    case AsyncFor_kind: {
  ------------------
  |  Branch (755:5): [True: 228, False: 224k]
  ------------------
  756|    228|        CALL(astfold_expr, expr_ty, node_->v.AsyncFor.target);
  ------------------
  |  |  409|    228|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 228]
  |  |  ------------------
  |  |  410|    228|        return 0;
  ------------------
  757|    228|        CALL(astfold_expr, expr_ty, node_->v.AsyncFor.iter);
  ------------------
  |  |  409|    228|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 228]
  |  |  ------------------
  |  |  410|    228|        return 0;
  ------------------
  758|    228|        BEFORE_LOOP_BODY(state, node_);
  ------------------
  |  |  120|    228|#define BEFORE_LOOP_BODY(S, N)  PUSH_CONTEXT((S), (N), false, false, true)
  |  |  ------------------
  |  |  |  |  110|    228|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 228]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  759|    228|        CALL_SEQ(astfold_stmt, stmt, node_->v.AsyncFor.body);
  ------------------
  |  |  416|    228|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    228|    Py_ssize_t i; \
  |  |  418|    228|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|    474|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    474|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    948|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 474]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 246, False: 228]
  |  |  ------------------
  |  |  420|    246|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    246|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    246|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    246|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 246, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 246]
  |  |  ------------------
  |  |  422|    246|            return 0; \
  |  |  423|    246|    } \
  |  |  424|    228|}
  ------------------
  760|    228|        AFTER_LOOP_BODY(state);
  ------------------
  |  |  121|    228|#define AFTER_LOOP_BODY(S)      POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|    228|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  761|    228|        CALL_SEQ(astfold_stmt, stmt, node_->v.AsyncFor.orelse);
  ------------------
  |  |  416|    228|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    228|    Py_ssize_t i; \
  |  |  418|    228|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|    354|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    354|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    708|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 183, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 126, False: 228]
  |  |  ------------------
  |  |  420|    126|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    126|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    126|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    126|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 126, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 126]
  |  |  ------------------
  |  |  422|    126|            return 0; \
  |  |  423|    126|    } \
  |  |  424|    228|}
  ------------------
  762|    228|        break;
  763|    228|    }
  764|  2.25k|    case While_kind: {
  ------------------
  |  Branch (764:5): [True: 2.25k, False: 222k]
  ------------------
  765|  2.25k|        CALL(astfold_expr, expr_ty, node_->v.While.test);
  ------------------
  |  |  409|  2.25k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 2.25k]
  |  |  ------------------
  |  |  410|  2.25k|        return 0;
  ------------------
  766|  2.25k|        BEFORE_LOOP_BODY(state, node_);
  ------------------
  |  |  120|  2.25k|#define BEFORE_LOOP_BODY(S, N)  PUSH_CONTEXT((S), (N), false, false, true)
  |  |  ------------------
  |  |  |  |  110|  2.25k|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 2.25k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  767|  2.25k|        CALL_SEQ(astfold_stmt, stmt, node_->v.While.body);
  ------------------
  |  |  416|  2.25k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  2.25k|    Py_ssize_t i; \
  |  |  418|  2.25k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  14.7k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  14.7k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  29.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 14.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 12.4k, False: 2.25k]
  |  |  ------------------
  |  |  420|  12.4k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  12.4k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  12.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  12.4k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 12.4k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 12.4k]
  |  |  ------------------
  |  |  422|  12.4k|            return 0; \
  |  |  423|  12.4k|    } \
  |  |  424|  2.25k|}
  ------------------
  768|  2.25k|        AFTER_LOOP_BODY(state);
  ------------------
  |  |  121|  2.25k|#define AFTER_LOOP_BODY(S)      POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|  2.25k|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  769|  2.25k|        CALL_SEQ(astfold_stmt, stmt, node_->v.While.orelse);
  ------------------
  |  |  416|  2.25k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  2.25k|    Py_ssize_t i; \
  |  |  418|  2.25k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  2.63k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.63k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.26k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 2.08k, False: 545]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 375, False: 2.25k]
  |  |  ------------------
  |  |  420|    375|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    375|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    375|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    375|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 375, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 375]
  |  |  ------------------
  |  |  422|    375|            return 0; \
  |  |  423|    375|    } \
  |  |  424|  2.25k|}
  ------------------
  770|  2.25k|        break;
  771|  2.25k|    }
  772|  1.66k|    case If_kind:
  ------------------
  |  Branch (772:5): [True: 1.66k, False: 223k]
  ------------------
  773|  1.66k|        CALL(astfold_expr, expr_ty, node_->v.If.test);
  ------------------
  |  |  409|  1.66k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.66k]
  |  |  ------------------
  |  |  410|  1.66k|        return 0;
  ------------------
  774|  1.66k|        CALL_SEQ(astfold_stmt, stmt, node_->v.If.body);
  ------------------
  |  |  416|  1.66k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.66k|    Py_ssize_t i; \
  |  |  418|  1.66k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  4.63k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  4.63k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  9.26k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.63k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 2.97k, False: 1.66k]
  |  |  ------------------
  |  |  420|  2.97k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.97k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.97k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  2.97k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.97k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 2.97k]
  |  |  ------------------
  |  |  422|  2.97k|            return 0; \
  |  |  423|  2.97k|    } \
  |  |  424|  1.66k|}
  ------------------
  775|  1.66k|        CALL_SEQ(astfold_stmt, stmt, node_->v.If.orelse);
  ------------------
  |  |  416|  1.66k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.66k|    Py_ssize_t i; \
  |  |  418|  1.66k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.42k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.85k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.22k, False: 2.20k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.76k, False: 1.66k]
  |  |  ------------------
  |  |  420|  1.76k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.76k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.76k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.76k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.76k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.76k]
  |  |  ------------------
  |  |  422|  1.76k|            return 0; \
  |  |  423|  1.76k|    } \
  |  |  424|  1.66k|}
  ------------------
  776|  1.66k|        break;
  777|    712|    case With_kind:
  ------------------
  |  Branch (777:5): [True: 712, False: 224k]
  ------------------
  778|    712|        CALL_SEQ(astfold_withitem, withitem, node_->v.With.items);
  ------------------
  |  |  416|    712|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    712|    Py_ssize_t i; \
  |  |  418|    712|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.73k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.73k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.46k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.73k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.01k, False: 712]
  |  |  ------------------
  |  |  420|  1.01k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.01k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.01k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.01k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.01k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.01k]
  |  |  ------------------
  |  |  422|  1.01k|            return 0; \
  |  |  423|  1.01k|    } \
  |  |  424|    712|}
  ------------------
  779|    712|        CALL_SEQ(astfold_stmt, stmt, node_->v.With.body);
  ------------------
  |  |  416|    712|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    712|    Py_ssize_t i; \
  |  |  418|    712|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.99k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.99k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.99k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.28k, False: 712]
  |  |  ------------------
  |  |  420|  1.28k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.28k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.28k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.28k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.28k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  422|  1.28k|            return 0; \
  |  |  423|  1.28k|    } \
  |  |  424|    712|}
  ------------------
  780|    712|        break;
  781|  2.43k|    case AsyncWith_kind:
  ------------------
  |  Branch (781:5): [True: 2.43k, False: 222k]
  ------------------
  782|  2.43k|        CALL_SEQ(astfold_withitem, withitem, node_->v.AsyncWith.items);
  ------------------
  |  |  416|  2.43k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  2.43k|    Py_ssize_t i; \
  |  |  418|  2.43k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  15.1k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  15.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  30.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 15.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 12.6k, False: 2.43k]
  |  |  ------------------
  |  |  420|  12.6k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  12.6k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  12.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  12.6k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 12.6k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 12.6k]
  |  |  ------------------
  |  |  422|  12.6k|            return 0; \
  |  |  423|  12.6k|    } \
  |  |  424|  2.43k|}
  ------------------
  783|  2.43k|        CALL_SEQ(astfold_stmt, stmt, node_->v.AsyncWith.body);
  ------------------
  |  |  416|  2.43k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  2.43k|    Py_ssize_t i; \
  |  |  418|  2.43k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  6.93k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  6.93k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 4.49k, False: 2.43k]
  |  |  ------------------
  |  |  420|  4.49k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  4.49k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.49k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  4.49k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 4.49k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 4.49k]
  |  |  ------------------
  |  |  422|  4.49k|            return 0; \
  |  |  423|  4.49k|    } \
  |  |  424|  2.43k|}
  ------------------
  784|  2.43k|        break;
  785|  1.02k|    case Raise_kind:
  ------------------
  |  Branch (785:5): [True: 1.02k, False: 223k]
  ------------------
  786|  1.02k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Raise.exc);
  ------------------
  |  |  413|  1.02k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 547, False: 479]
  |  |  |  Branch (413:26): [True: 0, False: 547]
  |  |  ------------------
  |  |  414|  1.02k|        return 0;
  ------------------
  787|  1.02k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Raise.cause);
  ------------------
  |  |  413|  1.02k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 216, False: 810]
  |  |  |  Branch (413:26): [True: 0, False: 216]
  |  |  ------------------
  |  |  414|  1.02k|        return 0;
  ------------------
  788|  1.02k|        break;
  789|  3.22k|    case Try_kind: {
  ------------------
  |  Branch (789:5): [True: 3.22k, False: 221k]
  ------------------
  790|  3.22k|        CALL_SEQ(astfold_stmt, stmt, node_->v.Try.body);
  ------------------
  |  |  416|  3.22k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.22k|    Py_ssize_t i; \
  |  |  418|  3.22k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  6.54k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  6.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.54k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 3.32k, False: 3.22k]
  |  |  ------------------
  |  |  420|  3.32k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.32k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.32k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  3.32k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 3.32k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 3.32k]
  |  |  ------------------
  |  |  422|  3.32k|            return 0; \
  |  |  423|  3.32k|    } \
  |  |  424|  3.22k|}
  ------------------
  791|  3.22k|        CALL_SEQ(astfold_excepthandler, excepthandler, node_->v.Try.handlers);
  ------------------
  |  |  416|  3.22k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.22k|    Py_ssize_t i; \
  |  |  418|  3.22k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  5.62k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.62k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.40k, False: 4.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 2.40k, False: 3.22k]
  |  |  ------------------
  |  |  420|  2.40k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.40k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.40k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  2.40k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.40k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 2.40k]
  |  |  ------------------
  |  |  422|  2.40k|            return 0; \
  |  |  423|  2.40k|    } \
  |  |  424|  3.22k|}
  ------------------
  792|  3.22k|        CALL_SEQ(astfold_stmt, stmt, node_->v.Try.orelse);
  ------------------
  |  |  416|  3.22k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.22k|    Py_ssize_t i; \
  |  |  418|  3.22k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.54k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 3.11k, False: 432]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 327, False: 3.22k]
  |  |  ------------------
  |  |  420|    327|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    327|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    327|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    327|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 327, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 327]
  |  |  ------------------
  |  |  422|    327|            return 0; \
  |  |  423|    327|    } \
  |  |  424|  3.22k|}
  ------------------
  793|  3.22k|        BEFORE_FINALLY(state, node_);
  ------------------
  |  |  116|  3.22k|#define BEFORE_FINALLY(S, N)    PUSH_CONTEXT((S), (N), true, false, false)
  |  |  ------------------
  |  |  |  |  110|  3.22k|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 3.22k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  794|  3.22k|        CALL_SEQ(astfold_stmt, stmt, node_->v.Try.finalbody);
  ------------------
  |  |  416|  3.22k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.22k|    Py_ssize_t i; \
  |  |  418|  3.22k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  9.73k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  9.73k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  19.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 963, False: 8.77k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 6.51k, False: 3.22k]
  |  |  ------------------
  |  |  420|  6.51k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  6.51k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.51k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  6.51k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 6.51k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 6.51k]
  |  |  ------------------
  |  |  422|  6.51k|            return 0; \
  |  |  423|  6.51k|    } \
  |  |  424|  3.22k|}
  ------------------
  795|  3.22k|        AFTER_FINALLY(state);
  ------------------
  |  |  117|  3.22k|#define AFTER_FINALLY(S)        POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|  3.22k|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  796|  3.22k|        break;
  797|  3.22k|    }
  798|  1.62k|    case TryStar_kind: {
  ------------------
  |  Branch (798:5): [True: 1.62k, False: 223k]
  ------------------
  799|  1.62k|        CALL_SEQ(astfold_stmt, stmt, node_->v.TryStar.body);
  ------------------
  |  |  416|  1.62k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.62k|    Py_ssize_t i; \
  |  |  418|  1.62k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.25k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.25k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.50k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.62k, False: 1.62k]
  |  |  ------------------
  |  |  420|  1.62k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.62k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.62k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.62k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.62k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.62k]
  |  |  ------------------
  |  |  422|  1.62k|            return 0; \
  |  |  423|  1.62k|    } \
  |  |  424|  1.62k|}
  ------------------
  800|  1.62k|        CALL_SEQ(astfold_excepthandler, excepthandler, node_->v.TryStar.handlers);
  ------------------
  |  |  416|  1.62k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.62k|    Py_ssize_t i; \
  |  |  418|  1.62k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.65k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.65k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.30k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 2.02k, False: 1.62k]
  |  |  ------------------
  |  |  420|  2.02k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.02k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.02k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  2.02k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.02k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 2.02k]
  |  |  ------------------
  |  |  422|  2.02k|            return 0; \
  |  |  423|  2.02k|    } \
  |  |  424|  1.62k|}
  ------------------
  801|  1.62k|        CALL_SEQ(astfold_stmt, stmt, node_->v.TryStar.orelse);
  ------------------
  |  |  416|  1.62k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.62k|    Py_ssize_t i; \
  |  |  418|  1.62k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.73k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.73k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.47k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.60k, False: 135]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 117, False: 1.62k]
  |  |  ------------------
  |  |  420|    117|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    117|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    117|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    117|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 117, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 117]
  |  |  ------------------
  |  |  422|    117|            return 0; \
  |  |  423|    117|    } \
  |  |  424|  1.62k|}
  ------------------
  802|  1.62k|        BEFORE_FINALLY(state, node_);
  ------------------
  |  |  116|  1.62k|#define BEFORE_FINALLY(S, N)    PUSH_CONTEXT((S), (N), true, false, false)
  |  |  ------------------
  |  |  |  |  110|  1.62k|    if (!push_cf_context((S), (N), (FINALLY), (FUNCDEF), (LOOP))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:9): [True: 0, False: 1.62k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|        return 0; \
  |  |  |  |  112|      0|    }
  |  |  ------------------
  ------------------
  803|  1.62k|        CALL_SEQ(astfold_stmt, stmt, node_->v.TryStar.finalbody);
  ------------------
  |  |  416|  1.62k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.62k|    Py_ssize_t i; \
  |  |  418|  1.62k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.01k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.01k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.03k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.49k, False: 1.52k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.39k, False: 1.62k]
  |  |  ------------------
  |  |  420|  1.39k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.39k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.39k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.39k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.39k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.39k]
  |  |  ------------------
  |  |  422|  1.39k|            return 0; \
  |  |  423|  1.39k|    } \
  |  |  424|  1.62k|}
  ------------------
  804|  1.62k|        AFTER_FINALLY(state);
  ------------------
  |  |  117|  1.62k|#define AFTER_FINALLY(S)        POP_CONTEXT(S)
  |  |  ------------------
  |  |  |  |  114|  1.62k|#define POP_CONTEXT(S) pop_cf_context(S)
  |  |  ------------------
  ------------------
  805|  1.62k|        break;
  806|  1.62k|    }
  807|  2.75k|    case Assert_kind:
  ------------------
  |  Branch (807:5): [True: 2.75k, False: 222k]
  ------------------
  808|  2.75k|        CALL(astfold_expr, expr_ty, node_->v.Assert.test);
  ------------------
  |  |  409|  2.75k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 2.75k]
  |  |  ------------------
  |  |  410|  2.75k|        return 0;
  ------------------
  809|  2.75k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Assert.msg);
  ------------------
  |  |  413|  2.75k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 499, False: 2.25k]
  |  |  |  Branch (413:26): [True: 0, False: 499]
  |  |  ------------------
  |  |  414|  2.75k|        return 0;
  ------------------
  810|  2.75k|        break;
  811|   129k|    case Expr_kind:
  ------------------
  |  Branch (811:5): [True: 129k, False: 95.5k]
  ------------------
  812|   129k|        CALL(astfold_expr, expr_ty, node_->v.Expr.value);
  ------------------
  |  |  409|   129k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 129k]
  |  |  ------------------
  |  |  410|   129k|        return 0;
  ------------------
  813|   129k|        break;
  814|    267|    case Match_kind:
  ------------------
  |  Branch (814:5): [True: 267, False: 224k]
  ------------------
  815|    267|        CALL(astfold_expr, expr_ty, node_->v.Match.subject);
  ------------------
  |  |  409|    267|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 267]
  |  |  ------------------
  |  |  410|    267|        return 0;
  ------------------
  816|    267|        CALL_SEQ(astfold_match_case, match_case, node_->v.Match.cases);
  ------------------
  |  |  416|    267|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    267|    Py_ssize_t i; \
  |  |  418|    267|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.65k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.65k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.30k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.38k, False: 267]
  |  |  ------------------
  |  |  420|  1.38k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.38k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.38k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.38k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.38k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.38k]
  |  |  ------------------
  |  |  422|  1.38k|            return 0; \
  |  |  423|  1.38k|    } \
  |  |  424|    267|}
  ------------------
  817|    267|        break;
  818|    396|    case Break_kind:
  ------------------
  |  Branch (818:5): [True: 396, False: 224k]
  ------------------
  819|    396|        BEFORE_LOOP_EXIT(state, node_, "break");
  ------------------
  |  |  129|    396|    if (!before_loop_exit((S), (N), (KW))) { \
  |  |  ------------------
  |  |  |  Branch (129:9): [True: 0, False: 396]
  |  |  ------------------
  |  |  130|      0|        return 0; \
  |  |  131|      0|    }
  ------------------
  820|    396|        break;
  821|    700|    case Continue_kind:
  ------------------
  |  Branch (821:5): [True: 700, False: 224k]
  ------------------
  822|    700|        BEFORE_LOOP_EXIT(state, node_, "continue");
  ------------------
  |  |  129|    700|    if (!before_loop_exit((S), (N), (KW))) { \
  |  |  ------------------
  |  |  |  Branch (129:9): [True: 0, False: 700]
  |  |  ------------------
  |  |  130|      0|        return 0; \
  |  |  131|      0|    }
  ------------------
  823|    700|        break;
  824|       |    // The following statements don't contain any subexpressions to be folded
  825|  2.86k|    case Import_kind:
  ------------------
  |  Branch (825:5): [True: 2.86k, False: 221k]
  ------------------
  826|  5.43k|    case ImportFrom_kind:
  ------------------
  |  Branch (826:5): [True: 2.56k, False: 222k]
  ------------------
  827|  6.33k|    case Global_kind:
  ------------------
  |  Branch (827:5): [True: 904, False: 223k]
  ------------------
  828|  6.53k|    case Nonlocal_kind:
  ------------------
  |  Branch (828:5): [True: 201, False: 224k]
  ------------------
  829|  8.39k|    case Pass_kind:
  ------------------
  |  Branch (829:5): [True: 1.86k, False: 222k]
  ------------------
  830|  8.39k|        break;
  831|       |    // No default case, so the compiler will emit a warning if new statement
  832|       |    // kinds are added without being handled here
  833|   224k|    }
  834|   224k|    LEAVE_RECURSIVE();
  ------------------
  |  |   34|   224k|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
  835|   224k|    return 1;
  836|   224k|}
ast_preprocess.c:astfold_type_param:
  954|  13.7k|{
  955|  13.7k|    switch (node_->kind) {
  ------------------
  |  Branch (955:13): [True: 13.7k, False: 0]
  ------------------
  956|  13.0k|        case TypeVar_kind:
  ------------------
  |  Branch (956:9): [True: 13.0k, False: 643]
  ------------------
  957|  13.0k|            CALL_OPT(astfold_expr, expr_ty, node_->v.TypeVar.bound);
  ------------------
  |  |  413|  13.0k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 1.67k, False: 11.3k]
  |  |  |  Branch (413:26): [True: 0, False: 1.67k]
  |  |  ------------------
  |  |  414|  13.0k|        return 0;
  ------------------
  958|  13.0k|            CALL_OPT(astfold_expr, expr_ty, node_->v.TypeVar.default_value);
  ------------------
  |  |  413|  13.0k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 1.32k, False: 11.7k]
  |  |  |  Branch (413:26): [True: 0, False: 1.32k]
  |  |  ------------------
  |  |  414|  13.0k|        return 0;
  ------------------
  959|  13.0k|            break;
  960|    214|        case ParamSpec_kind:
  ------------------
  |  Branch (960:9): [True: 214, False: 13.5k]
  ------------------
  961|    214|            CALL_OPT(astfold_expr, expr_ty, node_->v.ParamSpec.default_value);
  ------------------
  |  |  413|    214|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 73, False: 141]
  |  |  |  Branch (413:26): [True: 0, False: 73]
  |  |  ------------------
  |  |  414|    214|        return 0;
  ------------------
  962|    214|            break;
  963|    429|        case TypeVarTuple_kind:
  ------------------
  |  Branch (963:9): [True: 429, False: 13.2k]
  ------------------
  964|    429|            CALL_OPT(astfold_expr, expr_ty, node_->v.TypeVarTuple.default_value);
  ------------------
  |  |  413|    429|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 34, False: 395]
  |  |  |  Branch (413:26): [True: 0, False: 34]
  |  |  ------------------
  |  |  414|    429|        return 0;
  ------------------
  965|    429|            break;
  966|  13.7k|    }
  967|  13.7k|    return 1;
  968|  13.7k|}
ast_preprocess.c:astfold_arguments:
  663|  14.4k|{
  664|  14.4k|    CALL_SEQ(astfold_arg, arg, node_->posonlyargs);
  ------------------
  |  |  416|  14.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  14.4k|    Py_ssize_t i; \
  |  |  418|  14.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  15.1k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  15.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  30.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 15.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 751, False: 14.4k]
  |  |  ------------------
  |  |  420|    751|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    751|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    751|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    751|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 751, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 751]
  |  |  ------------------
  |  |  422|    751|            return 0; \
  |  |  423|    751|    } \
  |  |  424|  14.4k|}
  ------------------
  665|  14.4k|    CALL_SEQ(astfold_arg, arg, node_->args);
  ------------------
  |  |  416|  14.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  14.4k|    Py_ssize_t i; \
  |  |  418|  14.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  18.4k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  18.4k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  36.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 18.4k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 4.04k, False: 14.4k]
  |  |  ------------------
  |  |  420|  4.04k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  4.04k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.04k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  4.04k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 4.04k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 4.04k]
  |  |  ------------------
  |  |  422|  4.04k|            return 0; \
  |  |  423|  4.04k|    } \
  |  |  424|  14.4k|}
  ------------------
  666|  14.4k|    CALL_OPT(astfold_arg, arg_ty, node_->vararg);
  ------------------
  |  |  413|  14.4k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 2.98k, False: 11.4k]
  |  |  |  Branch (413:26): [True: 0, False: 2.98k]
  |  |  ------------------
  |  |  414|  14.4k|        return 0;
  ------------------
  667|  14.4k|    CALL_SEQ(astfold_arg, arg, node_->kwonlyargs);
  ------------------
  |  |  416|  14.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  14.4k|    Py_ssize_t i; \
  |  |  418|  14.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  18.5k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  18.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  37.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 18.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 4.07k, False: 14.4k]
  |  |  ------------------
  |  |  420|  4.07k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  4.07k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.07k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  4.07k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 4.07k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 4.07k]
  |  |  ------------------
  |  |  422|  4.07k|            return 0; \
  |  |  423|  4.07k|    } \
  |  |  424|  14.4k|}
  ------------------
  668|  14.4k|    CALL_SEQ(astfold_expr, expr, node_->kw_defaults);
  ------------------
  |  |  416|  14.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  14.4k|    Py_ssize_t i; \
  |  |  418|  14.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  18.5k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  18.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  37.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 18.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 4.07k, False: 14.4k]
  |  |  ------------------
  |  |  420|  4.07k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  4.07k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.07k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  4.07k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.17k, False: 1.89k]
  |  |  |  Branch (421:28): [True: 0, False: 2.17k]
  |  |  ------------------
  |  |  422|  4.07k|            return 0; \
  |  |  423|  4.07k|    } \
  |  |  424|  14.4k|}
  ------------------
  669|  14.4k|    CALL_OPT(astfold_arg, arg_ty, node_->kwarg);
  ------------------
  |  |  413|  14.4k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 1.26k, False: 13.1k]
  |  |  |  Branch (413:26): [True: 0, False: 1.26k]
  |  |  ------------------
  |  |  414|  14.4k|        return 0;
  ------------------
  670|  14.4k|    CALL_SEQ(astfold_expr, expr, node_->defaults);
  ------------------
  |  |  416|  14.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  14.4k|    Py_ssize_t i; \
  |  |  418|  14.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  15.1k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  15.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  30.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 15.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 687, False: 14.4k]
  |  |  ------------------
  |  |  420|    687|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    687|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    687|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    687|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 687, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 687]
  |  |  ------------------
  |  |  422|    687|            return 0; \
  |  |  423|    687|    } \
  |  |  424|  14.4k|}
  ------------------
  671|  14.4k|    return 1;
  672|  14.4k|}
ast_preprocess.c:astfold_arg:
  676|  13.1k|{
  677|  13.1k|    if (!(state->ff_features & CO_FUTURE_ANNOTATIONS)) {
  ------------------
  |  |  147|  13.1k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (677:9): [True: 11.7k, False: 1.32k]
  ------------------
  678|  11.7k|        CALL_OPT(astfold_expr, expr_ty, node_->annotation);
  ------------------
  |  |  413|  11.7k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 871, False: 10.9k]
  |  |  |  Branch (413:26): [True: 0, False: 871]
  |  |  ------------------
  |  |  414|  11.7k|        return 0;
  ------------------
  679|  11.7k|    }
  680|  13.1k|    return 1;
  681|  13.1k|}
ast_preprocess.c:push_cf_context:
   45|  18.0k|{
   46|  18.0k|    if (_Py_CArray_EnsureCapacity(&state->cf_finally, state->cf_finally_used+1) < 0) {
  ------------------
  |  Branch (46:9): [True: 0, False: 18.0k]
  ------------------
   47|      0|        return 0;
   48|      0|    }
   49|       |
   50|  18.0k|    state->cf_finally_used++;
   51|  18.0k|    ControlFlowInFinallyContext *ctx = get_cf_finally_top(state);
   52|       |
   53|  18.0k|    ctx->in_finally = finally;
   54|  18.0k|    ctx->in_funcdef = funcdef;
   55|  18.0k|    ctx->in_loop = loop;
   56|  18.0k|    return 1;
   57|  18.0k|}
ast_preprocess.c:get_cf_finally_top:
   38|  18.5k|{
   39|  18.5k|    int idx = state->cf_finally_used;
   40|  18.5k|    return ((ControlFlowInFinallyContext*)state->cf_finally.array) + idx;
   41|  18.5k|}
ast_preprocess.c:pop_cf_context:
   61|  18.0k|{
   62|  18.0k|    assert(state->cf_finally_used > 0);
  ------------------
  |  Branch (62:5): [True: 18.0k, False: 0]
  ------------------
   63|  18.0k|    state->cf_finally_used--;
   64|  18.0k|}
ast_preprocess.c:astfold_keyword:
  647|  2.61k|{
  648|  2.61k|    CALL(astfold_expr, expr_ty, node_->value);
  ------------------
  |  |  409|  2.61k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 2.61k]
  |  |  ------------------
  |  |  410|  2.61k|        return 0;
  ------------------
  649|  2.61k|    return 1;
  650|  2.61k|}
ast_preprocess.c:before_return:
   83|  1.06k|{
   84|  1.06k|    if (state->enable_warnings && state->cf_finally_used > 0) {
  ------------------
  |  Branch (84:9): [True: 375, False: 687]
  |  Branch (84:35): [True: 246, False: 129]
  ------------------
   85|    246|        ControlFlowInFinallyContext *ctx = get_cf_finally_top(state);
   86|    246|        if (ctx->in_finally && ! ctx->in_funcdef) {
  ------------------
  |  Branch (86:13): [True: 23, False: 223]
  |  Branch (86:32): [True: 23, False: 0]
  ------------------
   87|     23|            if (!control_flow_in_finally_warning("return", node_, state)) {
  ------------------
  |  Branch (87:17): [True: 0, False: 23]
  ------------------
   88|      0|                return 0;
   89|      0|            }
   90|     23|        }
   91|    246|    }
   92|  1.06k|    return 1;
   93|  1.06k|}
ast_preprocess.c:control_flow_in_finally_warning:
   68|    231|{
   69|    231|    PyObject *msg = PyUnicode_FromFormat("'%s' in a 'finally' block", kw);
   70|    231|    if (msg == NULL) {
  ------------------
  |  Branch (70:9): [True: 0, False: 231]
  ------------------
   71|      0|        return 0;
   72|      0|    }
   73|    231|    int ret = _PyErr_EmitSyntaxWarning(msg, state->filename, n->lineno,
   74|    231|                                       n->col_offset + 1, n->end_lineno,
   75|    231|                                       n->end_col_offset + 1,
   76|    231|                                       state->module);
   77|    231|    Py_DECREF(msg);
  ------------------
  |  |  430|    231|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    231|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    231|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|    231|    return ret < 0 ? 0 : 1;
  ------------------
  |  Branch (78:12): [True: 0, False: 231]
  ------------------
   79|    231|}
ast_preprocess.c:astfold_withitem:
  854|  13.7k|{
  855|  13.7k|    CALL(astfold_expr, expr_ty, node_->context_expr);
  ------------------
  |  |  409|  13.7k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 13.7k]
  |  |  ------------------
  |  |  410|  13.7k|        return 0;
  ------------------
  856|  13.7k|    CALL_OPT(astfold_expr, expr_ty, node_->optional_vars);
  ------------------
  |  |  413|  13.7k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 1.21k, False: 12.5k]
  |  |  |  Branch (413:26): [True: 0, False: 1.21k]
  |  |  ------------------
  |  |  414|  13.7k|        return 0;
  ------------------
  857|  13.7k|    return 1;
  858|  13.7k|}
ast_preprocess.c:astfold_excepthandler:
  840|  4.43k|{
  841|  4.43k|    switch (node_->kind) {
  ------------------
  |  Branch (841:13): [True: 4.43k, False: 0]
  ------------------
  842|  4.43k|    case ExceptHandler_kind:
  ------------------
  |  Branch (842:5): [True: 4.43k, False: 0]
  ------------------
  843|  4.43k|        CALL_OPT(astfold_expr, expr_ty, node_->v.ExceptHandler.type);
  ------------------
  |  |  413|  4.43k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 2.88k, False: 1.54k]
  |  |  |  Branch (413:26): [True: 0, False: 2.88k]
  |  |  ------------------
  |  |  414|  4.43k|        return 0;
  ------------------
  844|  4.43k|        CALL_SEQ(astfold_stmt, stmt, node_->v.ExceptHandler.body);
  ------------------
  |  |  416|  4.43k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  4.43k|    Py_ssize_t i; \
  |  |  418|  4.43k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  9.84k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  9.84k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  19.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 9.84k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 5.41k, False: 4.43k]
  |  |  ------------------
  |  |  420|  5.41k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  5.41k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.41k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  5.41k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 5.41k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 5.41k]
  |  |  ------------------
  |  |  422|  5.41k|            return 0; \
  |  |  423|  5.41k|    } \
  |  |  424|  4.43k|}
  ------------------
  845|  4.43k|        break;
  846|       |    // No default case, so the compiler will emit a warning if new handler
  847|       |    // kinds are added without being handled here
  848|  4.43k|    }
  849|  4.43k|    return 1;
  850|  4.43k|}
ast_preprocess.c:astfold_match_case:
  945|  1.38k|{
  946|  1.38k|    CALL(astfold_pattern, expr_ty, node_->pattern);
  ------------------
  |  |  409|  1.38k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.38k]
  |  |  ------------------
  |  |  410|  1.38k|        return 0;
  ------------------
  947|  1.38k|    CALL_OPT(astfold_expr, expr_ty, node_->guard);
  ------------------
  |  |  413|  1.38k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 5, False: 1.38k]
  |  |  |  Branch (413:26): [True: 0, False: 5]
  |  |  ------------------
  |  |  414|  1.38k|        return 0;
  ------------------
  948|  1.38k|    CALL_SEQ(astfold_stmt, stmt, node_->body);
  ------------------
  |  |  416|  1.38k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.38k|    Py_ssize_t i; \
  |  |  418|  1.38k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  2.91k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.91k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.83k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.91k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.52k, False: 1.38k]
  |  |  ------------------
  |  |  420|  1.52k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.52k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.52k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.52k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.52k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  422|  1.52k|            return 0; \
  |  |  423|  1.52k|    } \
  |  |  424|  1.38k|}
  ------------------
  949|  1.38k|    return 1;
  950|  1.38k|}
ast_preprocess.c:astfold_pattern:
  903|  19.6k|{
  904|       |    // Currently, this is really only used to form complex/negative numeric
  905|       |    // constants in MatchValue and MatchMapping nodes
  906|       |    // We still recurse into all subexpressions and subpatterns anyway
  907|  19.6k|    ENTER_RECURSIVE();
  ------------------
  |  |   29|  19.6k|#define ENTER_RECURSIVE() \
  |  |   30|  19.6k|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (30:5): [True: 0, False: 19.6k]
  |  |  ------------------
  |  |   31|      0|    return 0; \
  |  |   32|      0|}
  ------------------
  908|  19.6k|    switch (node_->kind) {
  ------------------
  |  Branch (908:13): [True: 19.6k, False: 0]
  ------------------
  909|  2.08k|        case MatchValue_kind:
  ------------------
  |  Branch (909:9): [True: 2.08k, False: 17.6k]
  ------------------
  910|  2.08k|            CALL(fold_const_match_patterns, expr_ty, node_->v.MatchValue.value);
  ------------------
  |  |  409|  2.08k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 2.08k]
  |  |  ------------------
  |  |  410|  2.08k|        return 0;
  ------------------
  911|  2.08k|            break;
  912|    689|        case MatchSingleton_kind:
  ------------------
  |  Branch (912:9): [True: 689, False: 18.9k]
  ------------------
  913|    689|            break;
  914|  1.28k|        case MatchSequence_kind:
  ------------------
  |  Branch (914:9): [True: 1.28k, False: 18.4k]
  ------------------
  915|  1.28k|            CALL_SEQ(astfold_pattern, pattern, node_->v.MatchSequence.patterns);
  ------------------
  |  |  416|  1.28k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.28k|    Py_ssize_t i; \
  |  |  418|  1.28k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  15.8k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  15.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  31.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 18, False: 15.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 14.5k, False: 1.28k]
  |  |  ------------------
  |  |  420|  14.5k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  14.5k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  14.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  14.5k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 14.5k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 14.5k]
  |  |  ------------------
  |  |  422|  14.5k|            return 0; \
  |  |  423|  14.5k|    } \
  |  |  424|  1.28k|}
  ------------------
  916|  1.28k|            break;
  917|     30|        case MatchMapping_kind:
  ------------------
  |  Branch (917:9): [True: 30, False: 19.6k]
  ------------------
  918|     30|            CALL_SEQ(fold_const_match_patterns, expr, node_->v.MatchMapping.keys);
  ------------------
  |  |  416|     30|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|     30|    Py_ssize_t i; \
  |  |  418|     30|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|    114|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    114|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    228|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 16, False: 98]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 84, False: 30]
  |  |  ------------------
  |  |  420|     84|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     84|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     84|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|     84|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 84, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 84]
  |  |  ------------------
  |  |  422|     84|            return 0; \
  |  |  423|     84|    } \
  |  |  424|     30|}
  ------------------
  919|     30|            CALL_SEQ(astfold_pattern, pattern, node_->v.MatchMapping.patterns);
  ------------------
  |  |  416|     30|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|     30|    Py_ssize_t i; \
  |  |  418|     30|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|    114|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    114|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    228|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 16, False: 98]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 84, False: 30]
  |  |  ------------------
  |  |  420|     84|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     84|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     84|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|     84|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 84, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 84]
  |  |  ------------------
  |  |  422|     84|            return 0; \
  |  |  423|     84|    } \
  |  |  424|     30|}
  ------------------
  920|     30|            break;
  921|    511|        case MatchClass_kind:
  ------------------
  |  Branch (921:9): [True: 511, False: 19.1k]
  ------------------
  922|    511|            CALL(astfold_expr, expr_ty, node_->v.MatchClass.cls);
  ------------------
  |  |  409|    511|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 511]
  |  |  ------------------
  |  |  410|    511|        return 0;
  ------------------
  923|    511|            CALL_SEQ(astfold_pattern, pattern, node_->v.MatchClass.patterns);
  ------------------
  |  |  416|    511|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    511|    Py_ssize_t i; \
  |  |  418|    511|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.57k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.57k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.15k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 27, False: 1.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.06k, False: 511]
  |  |  ------------------
  |  |  420|  1.06k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.06k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.06k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.06k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.06k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.06k]
  |  |  ------------------
  |  |  422|  1.06k|            return 0; \
  |  |  423|  1.06k|    } \
  |  |  424|    511|}
  ------------------
  924|    511|            CALL_SEQ(astfold_pattern, pattern, node_->v.MatchClass.kwd_patterns);
  ------------------
  |  |  416|    511|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    511|    Py_ssize_t i; \
  |  |  418|    511|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|    628|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    628|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.25k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 484, False: 144]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 117, False: 511]
  |  |  ------------------
  |  |  420|    117|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    117|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    117|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    117|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 117, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 117]
  |  |  ------------------
  |  |  422|    117|            return 0; \
  |  |  423|    117|    } \
  |  |  424|    511|}
  ------------------
  925|    511|            break;
  926|  1.83k|        case MatchStar_kind:
  ------------------
  |  Branch (926:9): [True: 1.83k, False: 17.8k]
  ------------------
  927|  1.83k|            break;
  928|  12.1k|        case MatchAs_kind:
  ------------------
  |  Branch (928:9): [True: 12.1k, False: 7.51k]
  ------------------
  929|  12.1k|            if (node_->v.MatchAs.pattern) {
  ------------------
  |  Branch (929:17): [True: 243, False: 11.9k]
  ------------------
  930|    243|                CALL(astfold_pattern, pattern_ty, node_->v.MatchAs.pattern);
  ------------------
  |  |  409|    243|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 243]
  |  |  ------------------
  |  |  410|    243|        return 0;
  ------------------
  931|    243|            }
  932|  12.1k|            break;
  933|  12.1k|        case MatchOr_kind:
  ------------------
  |  Branch (933:9): [True: 1.08k, False: 18.5k]
  ------------------
  934|  1.08k|            CALL_SEQ(astfold_pattern, pattern, node_->v.MatchOr.patterns);
  ------------------
  |  |  416|  1.08k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.08k|    Py_ssize_t i; \
  |  |  418|  1.08k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.27k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.27k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.54k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 2.18k, False: 1.08k]
  |  |  ------------------
  |  |  420|  2.18k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.18k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.18k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  2.18k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.18k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 2.18k]
  |  |  ------------------
  |  |  422|  2.18k|            return 0; \
  |  |  423|  2.18k|    } \
  |  |  424|  1.08k|}
  ------------------
  935|  1.08k|            break;
  936|       |    // No default case, so the compiler will emit a warning if new pattern
  937|       |    // kinds are added without being handled here
  938|  19.6k|    }
  939|  19.6k|    LEAVE_RECURSIVE();
  ------------------
  |  |   34|  19.6k|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
  940|  19.6k|    return 1;
  941|  19.6k|}
ast_preprocess.c:fold_const_match_patterns:
  862|  2.17k|{
  863|  2.17k|    if (state->syntax_check_only) {
  ------------------
  |  Branch (863:9): [True: 748, False: 1.42k]
  ------------------
  864|    748|        return 1;
  865|    748|    }
  866|  1.42k|    switch (node->kind)
  867|  1.42k|    {
  868|     35|        case UnaryOp_kind:
  ------------------
  |  Branch (868:9): [True: 35, False: 1.38k]
  ------------------
  869|     35|        {
  870|     35|            if ((node->v.UnaryOp.op == USub || node->v.UnaryOp.op == UAdd) &&
  ------------------
  |  Branch (870:18): [True: 35, False: 0]
  |  Branch (870:48): [True: 0, False: 0]
  ------------------
  871|     35|                node->v.UnaryOp.operand->kind == Constant_kind)
  ------------------
  |  Branch (871:17): [True: 35, False: 0]
  ------------------
  872|     35|            {
  873|     35|                PyObject *operand = node->v.UnaryOp.operand->v.Constant.value;
  874|     35|                PyObject *folded = node->v.UnaryOp.op == USub ? PyNumber_Negative(operand) : PyNumber_Positive(operand);
  ------------------
  |  Branch (874:36): [True: 35, False: 0]
  ------------------
  875|     35|                return make_const(node, folded, ctx_);
  876|     35|            }
  877|      0|            break;
  878|     35|        }
  879|      5|        case BinOp_kind:
  ------------------
  |  Branch (879:9): [True: 5, False: 1.41k]
  ------------------
  880|      5|        {
  881|      5|            operator_ty op = node->v.BinOp.op;
  882|      5|            if ((op == Add || op == Sub) &&
  ------------------
  |  Branch (882:18): [True: 3, False: 2]
  |  Branch (882:31): [True: 2, False: 0]
  ------------------
  883|      5|                node->v.BinOp.right->kind == Constant_kind)
  ------------------
  |  Branch (883:17): [True: 5, False: 0]
  ------------------
  884|      5|            {
  885|      5|                CALL(fold_const_match_patterns, expr_ty, node->v.BinOp.left);
  ------------------
  |  |  409|      5|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 5]
  |  |  ------------------
  |  |  410|      5|        return 0;
  ------------------
  886|      5|                if (node->v.BinOp.left->kind == Constant_kind) {
  ------------------
  |  Branch (886:21): [True: 5, False: 0]
  ------------------
  887|      5|                    PyObject *left = node->v.BinOp.left->v.Constant.value;
  888|      5|                    PyObject *right = node->v.BinOp.right->v.Constant.value;
  889|      5|                    PyObject *folded = op == Add ? PyNumber_Add(left, right) : PyNumber_Subtract(left, right);
  ------------------
  |  Branch (889:40): [True: 3, False: 2]
  ------------------
  890|      5|                    return make_const(node, folded, ctx_);
  891|      5|                }
  892|      5|            }
  893|      0|            break;
  894|      5|        }
  895|  1.38k|        default:
  ------------------
  |  Branch (895:9): [True: 1.38k, False: 40]
  ------------------
  896|  1.38k|            break;
  897|  1.42k|    }
  898|  1.38k|    return 1;
  899|  1.42k|}
ast_preprocess.c:make_const:
  135|    294|{
  136|       |    // Even if no new value was calculated, make_const may still
  137|       |    // need to clear an error (e.g. for division by zero)
  138|    294|    if (val == NULL) {
  ------------------
  |  Branch (138:9): [True: 0, False: 294]
  ------------------
  139|      0|        if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) {
  ------------------
  |  Branch (139:13): [True: 0, False: 0]
  ------------------
  140|      0|            return 0;
  141|      0|        }
  142|      0|        PyErr_Clear();
  143|      0|        return 1;
  144|      0|    }
  145|    294|    if (_PyArena_AddPyObject(arena, val) < 0) {
  ------------------
  |  Branch (145:9): [True: 0, False: 294]
  ------------------
  146|      0|        Py_DECREF(val);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  147|      0|        return 0;
  148|      0|    }
  149|    294|    node->kind = Constant_kind;
  150|       |    node->v.Constant.kind = NULL;
  151|    294|    node->v.Constant.value = val;
  152|    294|    return 1;
  153|    294|}
ast_preprocess.c:before_loop_exit:
   97|  1.09k|{
   98|  1.09k|    if (state->enable_warnings && state->cf_finally_used > 0) {
  ------------------
  |  Branch (98:9): [True: 573, False: 523]
  |  Branch (98:35): [True: 323, False: 250]
  ------------------
   99|    323|        ControlFlowInFinallyContext *ctx = get_cf_finally_top(state);
  100|    323|        if (ctx->in_finally && ! ctx->in_loop) {
  ------------------
  |  Branch (100:13): [True: 208, False: 115]
  |  Branch (100:32): [True: 208, False: 0]
  ------------------
  101|    208|            if (!control_flow_in_finally_warning(kw, node_, state)) {
  ------------------
  |  Branch (101:17): [True: 0, False: 208]
  ------------------
  102|      0|                return 0;
  103|      0|            }
  104|    208|        }
  105|    323|    }
  106|  1.09k|    return 1;
  107|  1.09k|}
ast_preprocess.c:astfold_expr:
  520|  2.58M|{
  521|  2.58M|    ENTER_RECURSIVE();
  ------------------
  |  |   29|  2.58M|#define ENTER_RECURSIVE() \
  |  |   30|  2.58M|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (30:5): [True: 0, False: 2.58M]
  |  |  ------------------
  |  |   31|      0|    return 0; \
  |  |   32|      0|}
  ------------------
  522|  2.58M|    switch (node_->kind) {
  ------------------
  |  Branch (522:13): [True: 2.58M, False: 0]
  ------------------
  523|  3.64k|    case BoolOp_kind:
  ------------------
  |  Branch (523:5): [True: 3.64k, False: 2.57M]
  ------------------
  524|  3.64k|        CALL_SEQ(astfold_expr, expr, node_->v.BoolOp.values);
  ------------------
  |  |  416|  3.64k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.64k|    Py_ssize_t i; \
  |  |  418|  3.64k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  14.2k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  14.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  28.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 14.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 10.5k, False: 3.64k]
  |  |  ------------------
  |  |  420|  10.5k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  10.5k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  10.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  10.5k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 10.5k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 10.5k]
  |  |  ------------------
  |  |  422|  10.5k|            return 0; \
  |  |  423|  10.5k|    } \
  |  |  424|  3.64k|}
  ------------------
  525|  3.64k|        break;
  526|   742k|    case BinOp_kind:
  ------------------
  |  Branch (526:5): [True: 742k, False: 1.83M]
  ------------------
  527|   742k|        CALL(astfold_expr, expr_ty, node_->v.BinOp.left);
  ------------------
  |  |  409|   742k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 742k]
  |  |  ------------------
  |  |  410|   742k|        return 0;
  ------------------
  528|   742k|        CALL(astfold_expr, expr_ty, node_->v.BinOp.right);
  ------------------
  |  |  409|   742k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 742k]
  |  |  ------------------
  |  |  410|   742k|        return 0;
  ------------------
  529|   742k|        CALL(fold_binop, expr_ty, node_);
  ------------------
  |  |  409|   742k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 742k]
  |  |  ------------------
  |  |  410|   742k|        return 0;
  ------------------
  530|   742k|        break;
  531|   235k|    case UnaryOp_kind:
  ------------------
  |  Branch (531:5): [True: 235k, False: 2.34M]
  ------------------
  532|   235k|        CALL(astfold_expr, expr_ty, node_->v.UnaryOp.operand);
  ------------------
  |  |  409|   235k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 235k]
  |  |  ------------------
  |  |  410|   235k|        return 0;
  ------------------
  533|   235k|        break;
  534|  4.78k|    case Lambda_kind:
  ------------------
  |  Branch (534:5): [True: 4.78k, False: 2.57M]
  ------------------
  535|  4.78k|        CALL(astfold_arguments, arguments_ty, node_->v.Lambda.args);
  ------------------
  |  |  409|  4.78k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 4.78k]
  |  |  ------------------
  |  |  410|  4.78k|        return 0;
  ------------------
  536|  4.78k|        CALL(astfold_expr, expr_ty, node_->v.Lambda.body);
  ------------------
  |  |  409|  4.78k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 4.78k]
  |  |  ------------------
  |  |  410|  4.78k|        return 0;
  ------------------
  537|  4.78k|        break;
  538|  1.54k|    case IfExp_kind:
  ------------------
  |  Branch (538:5): [True: 1.54k, False: 2.57M]
  ------------------
  539|  1.54k|        CALL(astfold_expr, expr_ty, node_->v.IfExp.test);
  ------------------
  |  |  409|  1.54k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.54k]
  |  |  ------------------
  |  |  410|  1.54k|        return 0;
  ------------------
  540|  1.54k|        CALL(astfold_expr, expr_ty, node_->v.IfExp.body);
  ------------------
  |  |  409|  1.54k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.54k]
  |  |  ------------------
  |  |  410|  1.54k|        return 0;
  ------------------
  541|  1.54k|        CALL(astfold_expr, expr_ty, node_->v.IfExp.orelse);
  ------------------
  |  |  409|  1.54k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.54k]
  |  |  ------------------
  |  |  410|  1.54k|        return 0;
  ------------------
  542|  1.54k|        break;
  543|    614|    case Dict_kind:
  ------------------
  |  Branch (543:5): [True: 614, False: 2.58M]
  ------------------
  544|    614|        CALL_SEQ(astfold_expr, expr, node_->v.Dict.keys);
  ------------------
  |  |  416|    614|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    614|    Py_ssize_t i; \
  |  |  418|    614|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.23k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.23k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.47k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 625, False: 614]
  |  |  ------------------
  |  |  420|    625|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    625|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    625|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    625|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 489, False: 136]
  |  |  |  Branch (421:28): [True: 0, False: 489]
  |  |  ------------------
  |  |  422|    625|            return 0; \
  |  |  423|    625|    } \
  |  |  424|    614|}
  ------------------
  545|    614|        CALL_SEQ(astfold_expr, expr, node_->v.Dict.values);
  ------------------
  |  |  416|    614|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    614|    Py_ssize_t i; \
  |  |  418|    614|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.23k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.23k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.47k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 625, False: 614]
  |  |  ------------------
  |  |  420|    625|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    625|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    625|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    625|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 625, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 625]
  |  |  ------------------
  |  |  422|    625|            return 0; \
  |  |  423|    625|    } \
  |  |  424|    614|}
  ------------------
  546|    614|        break;
  547|  7.12k|    case Set_kind:
  ------------------
  |  Branch (547:5): [True: 7.12k, False: 2.57M]
  ------------------
  548|  7.12k|        CALL_SEQ(astfold_expr, expr, node_->v.Set.elts);
  ------------------
  |  |  416|  7.12k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  7.12k|    Py_ssize_t i; \
  |  |  418|  7.12k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  39.1k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  39.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  78.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 39.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 31.9k, False: 7.12k]
  |  |  ------------------
  |  |  420|  31.9k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  31.9k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  31.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  31.9k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 31.9k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 31.9k]
  |  |  ------------------
  |  |  422|  31.9k|            return 0; \
  |  |  423|  31.9k|    } \
  |  |  424|  7.12k|}
  ------------------
  549|  7.12k|        break;
  550|  1.51k|    case ListComp_kind:
  ------------------
  |  Branch (550:5): [True: 1.51k, False: 2.57M]
  ------------------
  551|  1.51k|        CALL(astfold_expr, expr_ty, node_->v.ListComp.elt);
  ------------------
  |  |  409|  1.51k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.51k]
  |  |  ------------------
  |  |  410|  1.51k|        return 0;
  ------------------
  552|  1.51k|        CALL_SEQ(astfold_comprehension, comprehension, node_->v.ListComp.generators);
  ------------------
  |  |  416|  1.51k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.51k|    Py_ssize_t i; \
  |  |  418|  1.51k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  3.37k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.37k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.75k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.85k, False: 1.51k]
  |  |  ------------------
  |  |  420|  1.85k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.85k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.85k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.85k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.85k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.85k]
  |  |  ------------------
  |  |  422|  1.85k|            return 0; \
  |  |  423|  1.85k|    } \
  |  |  424|  1.51k|}
  ------------------
  553|  1.51k|        break;
  554|  2.87k|    case SetComp_kind:
  ------------------
  |  Branch (554:5): [True: 2.87k, False: 2.57M]
  ------------------
  555|  2.87k|        CALL(astfold_expr, expr_ty, node_->v.SetComp.elt);
  ------------------
  |  |  409|  2.87k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 2.87k]
  |  |  ------------------
  |  |  410|  2.87k|        return 0;
  ------------------
  556|  2.87k|        CALL_SEQ(astfold_comprehension, comprehension, node_->v.SetComp.generators);
  ------------------
  |  |  416|  2.87k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  2.87k|    Py_ssize_t i; \
  |  |  418|  2.87k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  5.88k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.88k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.88k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 3.00k, False: 2.87k]
  |  |  ------------------
  |  |  420|  3.00k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.00k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.00k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  3.00k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 3.00k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 3.00k]
  |  |  ------------------
  |  |  422|  3.00k|            return 0; \
  |  |  423|  3.00k|    } \
  |  |  424|  2.87k|}
  ------------------
  557|  2.87k|        break;
  558|    904|    case DictComp_kind:
  ------------------
  |  Branch (558:5): [True: 904, False: 2.58M]
  ------------------
  559|    904|        CALL(astfold_expr, expr_ty, node_->v.DictComp.key);
  ------------------
  |  |  409|    904|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 904]
  |  |  ------------------
  |  |  410|    904|        return 0;
  ------------------
  560|    904|        if (node_->v.DictComp.value != NULL){
  ------------------
  |  Branch (560:13): [True: 490, False: 414]
  ------------------
  561|    490|            CALL(astfold_expr, expr_ty, node_->v.DictComp.value);
  ------------------
  |  |  409|    490|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 490]
  |  |  ------------------
  |  |  410|    490|        return 0;
  ------------------
  562|    490|        }
  563|    904|        CALL_SEQ(astfold_comprehension, comprehension, node_->v.DictComp.generators);
  ------------------
  |  |  416|    904|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    904|    Py_ssize_t i; \
  |  |  418|    904|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  2.00k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.00k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.01k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.00k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 1.10k, False: 904]
  |  |  ------------------
  |  |  420|  1.10k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.10k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.10k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  1.10k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 1.10k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 1.10k]
  |  |  ------------------
  |  |  422|  1.10k|            return 0; \
  |  |  423|  1.10k|    } \
  |  |  424|    904|}
  ------------------
  564|    904|        break;
  565|    605|    case GeneratorExp_kind:
  ------------------
  |  Branch (565:5): [True: 605, False: 2.58M]
  ------------------
  566|    605|        CALL(astfold_expr, expr_ty, node_->v.GeneratorExp.elt);
  ------------------
  |  |  409|    605|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 605]
  |  |  ------------------
  |  |  410|    605|        return 0;
  ------------------
  567|    605|        CALL_SEQ(astfold_comprehension, comprehension, node_->v.GeneratorExp.generators);
  ------------------
  |  |  416|    605|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|    605|    Py_ssize_t i; \
  |  |  418|    605|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  1.23k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.23k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.47k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.23k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 631, False: 605]
  |  |  ------------------
  |  |  420|    631|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    631|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    631|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    631|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 631, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 631]
  |  |  ------------------
  |  |  422|    631|            return 0; \
  |  |  423|    631|    } \
  |  |  424|    605|}
  ------------------
  568|    605|        break;
  569|  1.17k|    case Await_kind:
  ------------------
  |  Branch (569:5): [True: 1.17k, False: 2.58M]
  ------------------
  570|  1.17k|        CALL(astfold_expr, expr_ty, node_->v.Await.value);
  ------------------
  |  |  409|  1.17k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.17k]
  |  |  ------------------
  |  |  410|  1.17k|        return 0;
  ------------------
  571|  1.17k|        break;
  572|  1.50k|    case Yield_kind:
  ------------------
  |  Branch (572:5): [True: 1.50k, False: 2.57M]
  ------------------
  573|  1.50k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Yield.value);
  ------------------
  |  |  413|  1.50k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 526, False: 980]
  |  |  |  Branch (413:26): [True: 0, False: 526]
  |  |  ------------------
  |  |  414|  1.50k|        return 0;
  ------------------
  574|  1.50k|        break;
  575|    226|    case YieldFrom_kind:
  ------------------
  |  Branch (575:5): [True: 226, False: 2.58M]
  ------------------
  576|    226|        CALL(astfold_expr, expr_ty, node_->v.YieldFrom.value);
  ------------------
  |  |  409|    226|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 226]
  |  |  ------------------
  |  |  410|    226|        return 0;
  ------------------
  577|    226|        break;
  578|  20.4k|    case Compare_kind:
  ------------------
  |  Branch (578:5): [True: 20.4k, False: 2.56M]
  ------------------
  579|  20.4k|        CALL(astfold_expr, expr_ty, node_->v.Compare.left);
  ------------------
  |  |  409|  20.4k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 20.4k]
  |  |  ------------------
  |  |  410|  20.4k|        return 0;
  ------------------
  580|  20.4k|        CALL_SEQ(astfold_expr, expr, node_->v.Compare.comparators);
  ------------------
  |  |  416|  20.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  20.4k|    Py_ssize_t i; \
  |  |  418|  20.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  94.1k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  94.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   188k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 94.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 73.7k, False: 20.4k]
  |  |  ------------------
  |  |  420|  73.7k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  73.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  73.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  73.7k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 73.7k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 73.7k]
  |  |  ------------------
  |  |  422|  73.7k|            return 0; \
  |  |  423|  73.7k|    } \
  |  |  424|  20.4k|}
  ------------------
  581|  20.4k|        break;
  582|  13.6k|    case Call_kind:
  ------------------
  |  Branch (582:5): [True: 13.6k, False: 2.56M]
  ------------------
  583|  13.6k|        CALL(astfold_expr, expr_ty, node_->v.Call.func);
  ------------------
  |  |  409|  13.6k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 13.6k]
  |  |  ------------------
  |  |  410|  13.6k|        return 0;
  ------------------
  584|  13.6k|        CALL_SEQ(astfold_expr, expr, node_->v.Call.args);
  ------------------
  |  |  416|  13.6k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  13.6k|    Py_ssize_t i; \
  |  |  418|  13.6k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  30.8k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  30.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  61.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 3.25k, False: 27.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 17.1k, False: 13.6k]
  |  |  ------------------
  |  |  420|  17.1k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  17.1k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  17.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  17.1k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 17.1k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 17.1k]
  |  |  ------------------
  |  |  422|  17.1k|            return 0; \
  |  |  423|  17.1k|    } \
  |  |  424|  13.6k|}
  ------------------
  585|  13.6k|        CALL_SEQ(astfold_keyword, keyword, node_->v.Call.keywords);
  ------------------
  |  |  416|  13.6k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  13.6k|    Py_ssize_t i; \
  |  |  418|  13.6k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  16.2k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  16.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  32.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 11.8k, False: 4.32k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 2.55k, False: 13.6k]
  |  |  ------------------
  |  |  420|  2.55k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.55k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.55k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  2.55k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.55k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 2.55k]
  |  |  ------------------
  |  |  422|  2.55k|            return 0; \
  |  |  423|  2.55k|    } \
  |  |  424|  13.6k|}
  ------------------
  586|  13.6k|        break;
  587|  4.71k|    case FormattedValue_kind:
  ------------------
  |  Branch (587:5): [True: 4.71k, False: 2.57M]
  ------------------
  588|  4.71k|        CALL(astfold_expr, expr_ty, node_->v.FormattedValue.value);
  ------------------
  |  |  409|  4.71k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 4.71k]
  |  |  ------------------
  |  |  410|  4.71k|        return 0;
  ------------------
  589|  4.71k|        CALL_OPT(astfold_expr, expr_ty, node_->v.FormattedValue.format_spec);
  ------------------
  |  |  413|  4.71k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 1.86k, False: 2.84k]
  |  |  |  Branch (413:26): [True: 0, False: 1.86k]
  |  |  ------------------
  |  |  414|  4.71k|        return 0;
  ------------------
  590|  4.71k|        break;
  591|  1.93k|    case Interpolation_kind:
  ------------------
  |  Branch (591:5): [True: 1.93k, False: 2.57M]
  ------------------
  592|  1.93k|        CALL(astfold_expr, expr_ty, node_->v.Interpolation.value);
  ------------------
  |  |  409|  1.93k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 1.93k]
  |  |  ------------------
  |  |  410|  1.93k|        return 0;
  ------------------
  593|  1.93k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Interpolation.format_spec);
  ------------------
  |  |  413|  1.93k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 952, False: 978]
  |  |  |  Branch (413:26): [True: 0, False: 952]
  |  |  ------------------
  |  |  414|  1.93k|        return 0;
  ------------------
  594|  1.93k|        break;
  595|  4.07k|    case JoinedStr_kind:
  ------------------
  |  Branch (595:5): [True: 4.07k, False: 2.57M]
  ------------------
  596|  4.07k|        CALL_SEQ(astfold_expr, expr, node_->v.JoinedStr.values);
  ------------------
  |  |  416|  4.07k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  4.07k|    Py_ssize_t i; \
  |  |  418|  4.07k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  14.7k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  14.7k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  29.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 14.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 10.6k, False: 4.07k]
  |  |  ------------------
  |  |  420|  10.6k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  10.6k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  10.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  10.6k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 10.6k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 10.6k]
  |  |  ------------------
  |  |  422|  10.6k|            return 0; \
  |  |  423|  10.6k|    } \
  |  |  424|  4.07k|}
  ------------------
  597|  4.07k|        break;
  598|  1.19k|    case TemplateStr_kind:
  ------------------
  |  Branch (598:5): [True: 1.19k, False: 2.58M]
  ------------------
  599|  1.19k|        CALL_SEQ(astfold_expr, expr, node_->v.TemplateStr.values);
  ------------------
  |  |  416|  1.19k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  1.19k|    Py_ssize_t i; \
  |  |  418|  1.19k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  4.62k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  4.62k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  9.24k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.62k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 3.42k, False: 1.19k]
  |  |  ------------------
  |  |  420|  3.42k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.42k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.42k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  3.42k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 3.42k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 3.42k]
  |  |  ------------------
  |  |  422|  3.42k|            return 0; \
  |  |  423|  3.42k|    } \
  |  |  424|  1.19k|}
  ------------------
  600|  1.19k|        break;
  601|  21.1k|    case Attribute_kind:
  ------------------
  |  Branch (601:5): [True: 21.1k, False: 2.56M]
  ------------------
  602|  21.1k|        CALL(astfold_expr, expr_ty, node_->v.Attribute.value);
  ------------------
  |  |  409|  21.1k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 21.1k]
  |  |  ------------------
  |  |  410|  21.1k|        return 0;
  ------------------
  603|  21.1k|        break;
  604|  11.6k|    case Subscript_kind:
  ------------------
  |  Branch (604:5): [True: 11.6k, False: 2.56M]
  ------------------
  605|  11.6k|        CALL(astfold_expr, expr_ty, node_->v.Subscript.value);
  ------------------
  |  |  409|  11.6k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 11.6k]
  |  |  ------------------
  |  |  410|  11.6k|        return 0;
  ------------------
  606|  11.6k|        CALL(astfold_expr, expr_ty, node_->v.Subscript.slice);
  ------------------
  |  |  409|  11.6k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 11.6k]
  |  |  ------------------
  |  |  410|  11.6k|        return 0;
  ------------------
  607|  11.6k|        break;
  608|  10.8k|    case Starred_kind:
  ------------------
  |  Branch (608:5): [True: 10.8k, False: 2.57M]
  ------------------
  609|  10.8k|        CALL(astfold_expr, expr_ty, node_->v.Starred.value);
  ------------------
  |  |  409|  10.8k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 10.8k]
  |  |  ------------------
  |  |  410|  10.8k|        return 0;
  ------------------
  610|  10.8k|        break;
  611|  14.6k|    case Slice_kind:
  ------------------
  |  Branch (611:5): [True: 14.6k, False: 2.56M]
  ------------------
  612|  14.6k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.lower);
  ------------------
  |  |  413|  14.6k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 9.85k, False: 4.76k]
  |  |  |  Branch (413:26): [True: 0, False: 9.85k]
  |  |  ------------------
  |  |  414|  14.6k|        return 0;
  ------------------
  613|  14.6k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.upper);
  ------------------
  |  |  413|  14.6k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 5.79k, False: 8.82k]
  |  |  |  Branch (413:26): [True: 0, False: 5.79k]
  |  |  ------------------
  |  |  414|  14.6k|        return 0;
  ------------------
  614|  14.6k|        CALL_OPT(astfold_expr, expr_ty, node_->v.Slice.step);
  ------------------
  |  |  413|  14.6k|    if ((ARG) != NULL && !FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (413:9): [True: 4.29k, False: 10.3k]
  |  |  |  Branch (413:26): [True: 0, False: 4.29k]
  |  |  ------------------
  |  |  414|  14.6k|        return 0;
  ------------------
  615|  14.6k|        break;
  616|  3.10k|    case List_kind:
  ------------------
  |  Branch (616:5): [True: 3.10k, False: 2.57M]
  ------------------
  617|  3.10k|        CALL_SEQ(astfold_expr, expr, node_->v.List.elts);
  ------------------
  |  |  416|  3.10k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  3.10k|    Py_ssize_t i; \
  |  |  418|  3.10k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  5.94k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.94k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 380, False: 5.56k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 2.84k, False: 3.10k]
  |  |  ------------------
  |  |  420|  2.84k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.84k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|  2.84k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 2.84k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 2.84k]
  |  |  ------------------
  |  |  422|  2.84k|            return 0; \
  |  |  423|  2.84k|    } \
  |  |  424|  3.10k|}
  ------------------
  618|  3.10k|        break;
  619|  84.4k|    case Tuple_kind:
  ------------------
  |  Branch (619:5): [True: 84.4k, False: 2.49M]
  ------------------
  620|  84.4k|        CALL_SEQ(astfold_expr, expr, node_->v.Tuple.elts);
  ------------------
  |  |  416|  84.4k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  84.4k|    Py_ssize_t i; \
  |  |  418|  84.4k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|   331k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|   331k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   663k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 9.68k, False: 322k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 247k, False: 84.4k]
  |  |  ------------------
  |  |  420|   247k|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|   247k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   247k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|   247k|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 247k, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 247k]
  |  |  ------------------
  |  |  422|   247k|            return 0; \
  |  |  423|   247k|    } \
  |  |  424|  84.4k|}
  ------------------
  621|  84.4k|        break;
  622|   488k|    case Name_kind:
  ------------------
  |  Branch (622:5): [True: 488k, False: 2.09M]
  ------------------
  623|   488k|        if (state->syntax_check_only) {
  ------------------
  |  Branch (623:13): [True: 46.5k, False: 442k]
  ------------------
  624|  46.5k|            break;
  625|  46.5k|        }
  626|   442k|        if (node_->v.Name.ctx == Load &&
  ------------------
  |  Branch (626:13): [True: 294k, False: 147k]
  ------------------
  627|   294k|                _PyUnicode_EqualToASCIIString(node_->v.Name.id, "__debug__")) {
  ------------------
  |  Branch (627:17): [True: 254, False: 294k]
  ------------------
  628|    254|            LEAVE_RECURSIVE();
  ------------------
  |  |   34|    254|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
  629|    254|            return make_const(node_, PyBool_FromLong(!state->optimize), ctx_);
  630|    254|        }
  631|   442k|        break;
  632|   442k|    case NamedExpr_kind:
  ------------------
  |  Branch (632:5): [True: 2.11k, False: 2.57M]
  ------------------
  633|  2.11k|        CALL(astfold_expr, expr_ty, node_->v.NamedExpr.value);
  ------------------
  |  |  409|  2.11k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 2.11k]
  |  |  ------------------
  |  |  410|  2.11k|        return 0;
  ------------------
  634|  2.11k|        break;
  635|   893k|    case Constant_kind:
  ------------------
  |  Branch (635:5): [True: 893k, False: 1.68M]
  ------------------
  636|       |        // Already a constant, nothing further to do
  637|   893k|        break;
  638|       |    // No default case, so the compiler will emit a warning if new expression
  639|       |    // kinds are added without being handled here
  640|  2.58M|    }
  641|  2.58M|    LEAVE_RECURSIVE();
  ------------------
  |  |   34|  2.58M|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
  642|  2.58M|    return 1;
  643|  2.58M|}
ast_preprocess.c:fold_binop:
  372|   742k|{
  373|   742k|    if (state->syntax_check_only) {
  ------------------
  |  Branch (373:9): [True: 9.66k, False: 732k]
  ------------------
  374|  9.66k|        return 1;
  375|  9.66k|    }
  376|   732k|    expr_ty lhs, rhs;
  377|   732k|    lhs = node->v.BinOp.left;
  378|   732k|    rhs = node->v.BinOp.right;
  379|   732k|    if (lhs->kind != Constant_kind) {
  ------------------
  |  Branch (379:9): [True: 501k, False: 231k]
  ------------------
  380|   501k|        return 1;
  381|   501k|    }
  382|   231k|    PyObject *lv = lhs->v.Constant.value;
  383|       |
  384|   231k|    if (node->v.BinOp.op == Mod &&
  ------------------
  |  Branch (384:9): [True: 22.3k, False: 209k]
  ------------------
  385|  22.3k|        rhs->kind == Tuple_kind &&
  ------------------
  |  Branch (385:9): [True: 6.87k, False: 15.4k]
  ------------------
  386|   231k|        PyUnicode_Check(lv) &&
  ------------------
  |  |  103|  6.87k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   238k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 6.86k, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  387|  6.86k|        !has_starred(rhs->v.Tuple.elts))
  ------------------
  |  Branch (387:9): [True: 6.85k, False: 3]
  ------------------
  388|  6.85k|    {
  389|  6.85k|        return optimize_format(node, lv, rhs->v.Tuple.elts, arena);
  390|  6.85k|    }
  391|       |
  392|   224k|    return 1;
  393|   231k|}
ast_preprocess.c:has_starred:
  159|  6.86k|{
  160|  6.86k|    Py_ssize_t n = asdl_seq_LEN(elts);
  ------------------
  |  |   83|  6.86k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  13.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 127, False: 6.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  161|  14.0k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (161:28): [True: 7.23k, False: 6.85k]
  ------------------
  162|  7.23k|        expr_ty e = (expr_ty)asdl_seq_GET(elts, i);
  ------------------
  |  |   82|  7.23k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  7.23k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  163|  7.23k|        if (e->kind == Starred_kind) {
  ------------------
  |  Branch (163:13): [True: 3, False: 7.23k]
  ------------------
  164|      3|            return 1;
  165|      3|        }
  166|  7.23k|    }
  167|  6.85k|    return 0;
  168|  6.86k|}
ast_preprocess.c:optimize_format:
  320|  6.85k|{
  321|  6.85k|    Py_ssize_t pos = 0;
  322|  6.85k|    Py_ssize_t cnt = 0;
  323|  6.85k|    asdl_expr_seq *seq = _Py_asdl_expr_seq_new(asdl_seq_LEN(elts) * 2 + 1, arena);
  ------------------
  |  |   83|  6.85k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  13.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 127, False: 6.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  324|  6.85k|    if (!seq) {
  ------------------
  |  Branch (324:9): [True: 0, False: 6.85k]
  ------------------
  325|      0|        return 0;
  326|      0|    }
  327|  6.85k|    seq->size = 0;
  328|       |
  329|  7.95k|    while (1) {
  ------------------
  |  Branch (329:12): [True: 7.95k, Folded]
  ------------------
  330|  7.95k|        expr_ty lit = parse_literal(fmt, &pos, arena);
  331|  7.95k|        if (lit) {
  ------------------
  |  Branch (331:13): [True: 7.74k, False: 213]
  ------------------
  332|  7.74k|            asdl_seq_SET(seq, seq->size++, lit);
  ------------------
  |  |   94|  7.74k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  7.74k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  333|  7.74k|        }
  334|    213|        else if (PyErr_Occurred()) {
  ------------------
  |  Branch (334:18): [True: 0, False: 213]
  ------------------
  335|      0|            return 0;
  336|      0|        }
  337|       |
  338|  7.95k|        if (pos >= PyUnicode_GET_LENGTH(fmt)) {
  ------------------
  |  |  299|  7.95k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (338:13): [True: 2.41k, False: 5.54k]
  ------------------
  339|  2.41k|            break;
  340|  2.41k|        }
  341|  5.54k|        if (cnt >= asdl_seq_LEN(elts)) {
  ------------------
  |  |   83|  5.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  11.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 16, False: 5.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (341:13): [True: 402, False: 5.13k]
  ------------------
  342|       |            // More format units than items.
  343|    402|            return 1;
  344|    402|        }
  345|  5.54k|        assert(PyUnicode_READ_CHAR(fmt, pos) == '%');
  ------------------
  |  Branch (345:9): [True: 5.13k, False: 0]
  ------------------
  346|  5.13k|        pos++;
  347|  5.13k|        expr_ty expr = parse_format(fmt, &pos, asdl_seq_GET(elts, cnt), arena);
  ------------------
  |  |   82|  5.13k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  5.13k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  348|  5.13k|        cnt++;
  349|  5.13k|        if (!expr) {
  ------------------
  |  Branch (349:13): [True: 4.04k, False: 1.09k]
  ------------------
  350|  4.04k|            return !PyErr_Occurred();
  351|  4.04k|        }
  352|  1.09k|        asdl_seq_SET(seq, seq->size++, expr);
  ------------------
  |  |   94|  1.09k|#  define asdl_seq_SET(S, I, V) _Py_RVALUE((S)->typed_elements[(I)] = (V))
  |  |  ------------------
  |  |  |  |  302|  1.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  353|  1.09k|    }
  354|  2.41k|    if (cnt < asdl_seq_LEN(elts)) {
  ------------------
  |  |   83|  2.41k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.83k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 111, False: 2.30k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (354:9): [True: 1.60k, False: 806]
  ------------------
  355|       |        // More items than format units.
  356|  1.60k|        return 1;
  357|  1.60k|    }
  358|    806|    expr_ty res = _PyAST_JoinedStr(seq,
  359|    806|                                   node->lineno, node->col_offset,
  360|    806|                                   node->end_lineno, node->end_col_offset,
  361|    806|                                   arena);
  362|    806|    if (!res) {
  ------------------
  |  Branch (362:9): [True: 0, False: 806]
  ------------------
  363|      0|        return 0;
  364|      0|    }
  365|    806|    COPY_NODE(node, res);
  ------------------
  |  |  155|    806|#define COPY_NODE(TO, FROM) (memcpy((TO), (FROM), sizeof(struct _expr)))
  ------------------
  366|       |//     PySys_FormatStderr("format = %R\n", fmt);
  367|    806|    return 1;
  368|    806|}
ast_preprocess.c:parse_literal:
  172|  7.95k|{
  173|  7.95k|    const void *data = PyUnicode_DATA(fmt);
  ------------------
  |  |  284|  7.95k|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  7.95k|    int kind = PyUnicode_KIND(fmt);
  ------------------
  |  |  258|  7.95k|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|  15.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 7.95k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  7.95k|    Py_ssize_t size = PyUnicode_GET_LENGTH(fmt);
  ------------------
  |  |  299|  7.95k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|  7.95k|    Py_ssize_t start, pos;
  177|  7.95k|    int has_percents = 0;
  178|  7.95k|    start = pos = *ppos;
  179|   390k|    while (pos < size) {
  ------------------
  |  Branch (179:12): [True: 388k, False: 2.41k]
  ------------------
  180|   388k|        if (PyUnicode_READ(kind, data, pos) != '%') {
  ------------------
  |  |  354|   388k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|   388k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|   388k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|   388k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|   388k|                   (index))
  ------------------
  |  Branch (180:13): [True: 345k, False: 43.3k]
  ------------------
  181|   345k|            pos++;
  182|   345k|        }
  183|  43.3k|        else if (pos+1 < size && PyUnicode_READ(kind, data, pos+1) == '%') {
  ------------------
  |  |  354|  43.1k|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|  43.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|  43.1k|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|  43.1k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|  43.1k|                   (index))
  ------------------
  |  Branch (183:18): [True: 43.1k, False: 260]
  |  Branch (183:34): [True: 37.8k, False: 5.28k]
  ------------------
  184|  37.8k|            has_percents = 1;
  185|  37.8k|            pos += 2;
  186|  37.8k|        }
  187|  5.54k|        else {
  188|  5.54k|            break;
  189|  5.54k|        }
  190|   388k|    }
  191|  7.95k|    *ppos = pos;
  192|  7.95k|    if (pos == start) {
  ------------------
  |  Branch (192:9): [True: 213, False: 7.74k]
  ------------------
  193|    213|        return NULL;
  194|    213|    }
  195|  7.74k|    PyObject *str = PyUnicode_Substring(fmt, start, pos);
  196|       |    /* str = str.replace('%%', '%') */
  197|  7.74k|    if (str && has_percents) {
  ------------------
  |  Branch (197:9): [True: 7.74k, False: 0]
  |  Branch (197:16): [True: 3.82k, False: 3.91k]
  ------------------
  198|  3.82k|        _Py_DECLARE_STR(dbl_percent, "%%");
  199|  3.82k|        Py_SETREF(str, PyUnicode_Replace(str, &_Py_STR(dbl_percent),
  ------------------
  |  |  354|  3.82k|    do { \
  |  |  355|  3.82k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  3.82k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  3.82k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  3.82k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  7.65k|        *_tmp_dst_ptr = (src); \
  |  |  ------------------
  |  |  |  Branch (357:26): [True: 3.82k, Folded]
  |  |  ------------------
  |  |  358|  3.82k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  3.82k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.82k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.82k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  3.82k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 3.82k]
  |  |  ------------------
  ------------------
  200|  3.82k|                                         _Py_LATIN1_CHR('%'), -1));
  201|  3.82k|    }
  202|  7.74k|    if (!str) {
  ------------------
  |  Branch (202:9): [True: 0, False: 7.74k]
  ------------------
  203|      0|        return NULL;
  204|      0|    }
  205|       |
  206|  7.74k|    if (_PyArena_AddPyObject(arena, str) < 0) {
  ------------------
  |  Branch (206:9): [True: 0, False: 7.74k]
  ------------------
  207|      0|        Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      0|        return NULL;
  209|      0|    }
  210|  7.74k|    return _PyAST_Constant(str, NULL, -1, -1, -1, -1, arena);
  211|  7.74k|}
ast_preprocess.c:parse_format:
  277|  5.13k|{
  278|  5.13k|    int spec, flags, width = -1, prec = -1;
  279|  5.13k|    if (!simple_format_arg_parse(fmt, ppos, &spec, &flags, &width, &prec)) {
  ------------------
  |  Branch (279:9): [True: 1.85k, False: 3.28k]
  ------------------
  280|       |        // Unsupported format.
  281|  1.85k|        return NULL;
  282|  1.85k|    }
  283|  3.28k|    if (spec == 's' || spec == 'r' || spec == 'a') {
  ------------------
  |  Branch (283:9): [True: 273, False: 3.01k]
  |  Branch (283:24): [True: 601, False: 2.41k]
  |  Branch (283:39): [True: 224, False: 2.18k]
  ------------------
  284|  1.09k|        char buf[1 + MAXDIGITS + 1 + MAXDIGITS + 1], *p = buf;
  285|  1.09k|        if (!(flags & F_LJUST) && width > 0) {
  ------------------
  |  |   18|  1.09k|#define F_LJUST (1<<0)
  ------------------
  |  Branch (285:13): [True: 1.07k, False: 20]
  |  Branch (285:35): [True: 433, False: 645]
  ------------------
  286|    433|            *p++ = '>';
  287|    433|        }
  288|  1.09k|        if (width >= 0) {
  ------------------
  |  Branch (288:13): [True: 434, False: 664]
  ------------------
  289|    434|            p += snprintf(p, MAXDIGITS + 1, "%d", width);
  ------------------
  |  |  213|    434|#define MAXDIGITS 3
  ------------------
  290|    434|        }
  291|  1.09k|        if (prec >= 0) {
  ------------------
  |  Branch (291:13): [True: 50, False: 1.04k]
  ------------------
  292|     50|            p += snprintf(p, MAXDIGITS + 2, ".%d", prec);
  ------------------
  |  |  213|     50|#define MAXDIGITS 3
  ------------------
  293|     50|        }
  294|  1.09k|        expr_ty format_spec = NULL;
  295|  1.09k|        if (p != buf) {
  ------------------
  |  Branch (295:13): [True: 483, False: 615]
  ------------------
  296|    483|            PyObject *str = PyUnicode_FromString(buf);
  297|    483|            if (str == NULL) {
  ------------------
  |  Branch (297:17): [True: 0, False: 483]
  ------------------
  298|      0|                return NULL;
  299|      0|            }
  300|    483|            if (_PyArena_AddPyObject(arena, str) < 0) {
  ------------------
  |  Branch (300:17): [True: 0, False: 483]
  ------------------
  301|      0|                Py_DECREF(str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|      0|                return NULL;
  303|      0|            }
  304|    483|            format_spec = _PyAST_Constant(str, NULL, -1, -1, -1, -1, arena);
  305|    483|            if (format_spec == NULL) {
  ------------------
  |  Branch (305:17): [True: 0, False: 483]
  ------------------
  306|      0|                return NULL;
  307|      0|            }
  308|    483|        }
  309|  1.09k|        return _PyAST_FormattedValue(arg, spec, format_spec,
  310|  1.09k|                                     arg->lineno, arg->col_offset,
  311|  1.09k|                                     arg->end_lineno, arg->end_col_offset,
  312|  1.09k|                                     arena);
  313|  1.09k|    }
  314|       |    // Unsupported format.
  315|  2.18k|    return NULL;
  316|  3.28k|}
ast_preprocess.c:simple_format_arg_parse:
  218|  5.13k|{
  219|  5.13k|    Py_ssize_t pos = *ppos, len = PyUnicode_GET_LENGTH(fmt);
  ------------------
  |  |  299|  5.13k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|  5.13k|    Py_UCS4 ch;
  221|       |
  222|  5.13k|#define NEXTC do {                      \
  223|  5.13k|    if (pos >= len) {                   \
  224|  5.13k|        return 0;                       \
  225|  5.13k|    }                                   \
  226|  5.13k|    ch = PyUnicode_READ_CHAR(fmt, pos); \
  227|  5.13k|    pos++;                              \
  228|  5.13k|} while (0)
  229|       |
  230|  5.13k|    *flags = 0;
  231|  11.2k|    while (1) {
  ------------------
  |  Branch (231:12): [True: 11.2k, Folded]
  ------------------
  232|  11.2k|        NEXTC;
  ------------------
  |  |  222|  11.2k|#define NEXTC do {                      \
  |  |  223|  11.2k|    if (pos >= len) {                   \
  |  |  ------------------
  |  |  |  Branch (223:9): [True: 637, False: 10.5k]
  |  |  ------------------
  |  |  224|    637|        return 0;                       \
  |  |  225|    637|    }                                   \
  |  |  226|  11.2k|    ch = PyUnicode_READ_CHAR(fmt, pos); \
  |  |  ------------------
  |  |  |  |  381|  10.5k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  10.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  10.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  227|  10.5k|    pos++;                              \
  |  |  228|  10.5k|} while (0)
  |  |  ------------------
  |  |  |  Branch (228:10): [Folded, False: 10.5k]
  |  |  ------------------
  ------------------
  233|  10.5k|        switch (ch) {
  ------------------
  |  Branch (233:17): [True: 6.09k, False: 4.50k]
  ------------------
  234|    960|            case '-': *flags |= F_LJUST; continue;
  ------------------
  |  |   18|    960|#define F_LJUST (1<<0)
  ------------------
  |  Branch (234:13): [True: 960, False: 9.63k]
  ------------------
  235|    267|            case '+': *flags |= F_SIGN; continue;
  ------------------
  |  |   19|    267|#define F_SIGN  (1<<1)
  ------------------
  |  Branch (235:13): [True: 267, False: 10.3k]
  ------------------
  236|    730|            case ' ': *flags |= F_BLANK; continue;
  ------------------
  |  |   20|    730|#define F_BLANK (1<<2)
  ------------------
  |  Branch (236:13): [True: 730, False: 9.86k]
  ------------------
  237|    292|            case '#': *flags |= F_ALT; continue;
  ------------------
  |  |   21|    292|#define F_ALT   (1<<3)
  ------------------
  |  Branch (237:13): [True: 292, False: 10.3k]
  ------------------
  238|  3.84k|            case '0': *flags |= F_ZERO; continue;
  ------------------
  |  |   22|  3.84k|#define F_ZERO  (1<<4)
  ------------------
  |  Branch (238:13): [True: 3.84k, False: 6.75k]
  ------------------
  239|  10.5k|        }
  240|  4.50k|        break;
  241|  10.5k|    }
  242|  4.50k|    if ('0' <= ch && ch <= '9') {
  ------------------
  |  Branch (242:9): [True: 2.59k, False: 1.91k]
  |  Branch (242:22): [True: 1.57k, False: 1.01k]
  ------------------
  243|  1.57k|        *width = 0;
  244|  1.57k|        int digits = 0;
  245|  3.04k|        while ('0' <= ch && ch <= '9') {
  ------------------
  |  Branch (245:16): [True: 2.92k, False: 124]
  |  Branch (245:29): [True: 2.44k, False: 476]
  ------------------
  246|  2.44k|            *width = *width * 10 + (ch - '0');
  247|  2.44k|            NEXTC;
  ------------------
  |  |  222|  2.44k|#define NEXTC do {                      \
  |  |  223|  2.44k|    if (pos >= len) {                   \
  |  |  ------------------
  |  |  |  Branch (223:9): [True: 607, False: 1.83k]
  |  |  ------------------
  |  |  224|    607|        return 0;                       \
  |  |  225|    607|    }                                   \
  |  |  226|  2.44k|    ch = PyUnicode_READ_CHAR(fmt, pos); \
  |  |  ------------------
  |  |  |  |  381|  1.83k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.83k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.83k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  227|  1.83k|    pos++;                              \
  |  |  228|  1.83k|} while (0)
  |  |  ------------------
  |  |  |  Branch (228:10): [Folded, False: 1.83k]
  |  |  ------------------
  ------------------
  248|  1.83k|            if (++digits >= MAXDIGITS) {
  ------------------
  |  |  213|  1.83k|#define MAXDIGITS 3
  ------------------
  |  Branch (248:17): [True: 372, False: 1.46k]
  ------------------
  249|    372|                return 0;
  250|    372|            }
  251|  1.83k|        }
  252|  1.57k|    }
  253|       |
  254|  3.52k|    if (ch == '.') {
  ------------------
  |  Branch (254:9): [True: 1.00k, False: 2.52k]
  ------------------
  255|  1.00k|        NEXTC;
  ------------------
  |  |  222|  1.00k|#define NEXTC do {                      \
  |  |  223|  1.00k|    if (pos >= len) {                   \
  |  |  ------------------
  |  |  |  Branch (223:9): [True: 2, False: 1.00k]
  |  |  ------------------
  |  |  224|      2|        return 0;                       \
  |  |  225|      2|    }                                   \
  |  |  226|  1.00k|    ch = PyUnicode_READ_CHAR(fmt, pos); \
  |  |  ------------------
  |  |  |  |  381|  1.00k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  227|  1.00k|    pos++;                              \
  |  |  228|  1.00k|} while (0)
  |  |  ------------------
  |  |  |  Branch (228:10): [Folded, False: 1.00k]
  |  |  ------------------
  ------------------
  256|  1.00k|        *prec = 0;
  257|  1.00k|        if ('0' <= ch && ch <= '9') {
  ------------------
  |  Branch (257:13): [True: 799, False: 201]
  |  Branch (257:26): [True: 441, False: 358]
  ------------------
  258|    441|            int digits = 0;
  259|  1.22k|            while ('0' <= ch && ch <= '9') {
  ------------------
  |  Branch (259:20): [True: 1.20k, False: 17]
  |  Branch (259:33): [True: 1.01k, False: 190]
  ------------------
  260|  1.01k|                *prec = *prec * 10 + (ch - '0');
  261|  1.01k|                NEXTC;
  ------------------
  |  |  222|  1.01k|#define NEXTC do {                      \
  |  |  223|  1.01k|    if (pos >= len) {                   \
  |  |  ------------------
  |  |  |  Branch (223:9): [True: 0, False: 1.01k]
  |  |  ------------------
  |  |  224|      0|        return 0;                       \
  |  |  225|      0|    }                                   \
  |  |  226|  1.01k|    ch = PyUnicode_READ_CHAR(fmt, pos); \
  |  |  ------------------
  |  |  |  |  381|  1.01k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  227|  1.01k|    pos++;                              \
  |  |  228|  1.01k|} while (0)
  |  |  ------------------
  |  |  |  Branch (228:10): [Folded, False: 1.01k]
  |  |  ------------------
  ------------------
  262|  1.01k|                if (++digits >= MAXDIGITS) {
  ------------------
  |  |  213|  1.01k|#define MAXDIGITS 3
  ------------------
  |  Branch (262:21): [True: 234, False: 782]
  ------------------
  263|    234|                    return 0;
  264|    234|                }
  265|  1.01k|            }
  266|    441|        }
  267|  1.00k|    }
  268|  3.28k|    *spec = ch;
  269|  3.28k|    *ppos = pos;
  270|  3.28k|    return 1;
  271|       |
  272|  3.52k|#undef NEXTC
  273|  3.52k|}
ast_preprocess.c:astfold_comprehension:
  654|  6.59k|{
  655|  6.59k|    CALL(astfold_expr, expr_ty, node_->target);
  ------------------
  |  |  409|  6.59k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 6.59k]
  |  |  ------------------
  |  |  410|  6.59k|        return 0;
  ------------------
  656|  6.59k|    CALL(astfold_expr, expr_ty, node_->iter);
  ------------------
  |  |  409|  6.59k|    if (!FUNC((ARG), ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (409:9): [True: 0, False: 6.59k]
  |  |  ------------------
  |  |  410|  6.59k|        return 0;
  ------------------
  657|  6.59k|    CALL_SEQ(astfold_expr, expr, node_->ifs);
  ------------------
  |  |  416|  6.59k|#define CALL_SEQ(FUNC, TYPE, ARG) { \
  |  |  417|  6.59k|    Py_ssize_t i; \
  |  |  418|  6.59k|    asdl_ ## TYPE ## _seq *seq = (ARG); /* avoid variable capture */ \
  |  |  419|  6.84k|    for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  6.84k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.84k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (419:17): [True: 247, False: 6.59k]
  |  |  ------------------
  |  |  420|    247|        TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    247|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    247|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  421|    247|        if (elt != NULL && !FUNC(elt, ctx_, state)) \
  |  |  ------------------
  |  |  |  Branch (421:13): [True: 247, False: 0]
  |  |  |  Branch (421:28): [True: 0, False: 247]
  |  |  ------------------
  |  |  422|    247|            return 0; \
  |  |  423|    247|    } \
  |  |  424|  6.59k|}
  ------------------
  658|  6.59k|    return 1;
  659|  6.59k|}

_PyAST_ExprAsUnicode:
 1033|  5.21k|{
 1034|  5.21k|    return expr_as_unicode(e, PR_TEST);
 1035|  5.21k|}
ast_unparse.c:expr_as_unicode:
 1018|  9.41k|{
 1019|  9.41k|    PyUnicodeWriter *writer = PyUnicodeWriter_Create(256);
 1020|  9.41k|    if (writer == NULL) {
  ------------------
  |  Branch (1020:9): [True: 0, False: 9.41k]
  ------------------
 1021|      0|        return NULL;
 1022|      0|    }
 1023|       |
 1024|  9.41k|    if (-1 == append_ast_expr(writer, e, level)) {
  ------------------
  |  Branch (1024:9): [True: 0, False: 9.41k]
  ------------------
 1025|      0|        PyUnicodeWriter_Discard(writer);
 1026|      0|        return NULL;
 1027|      0|    }
 1028|  9.41k|    return PyUnicodeWriter_Finish(writer);
 1029|  9.41k|}
ast_unparse.c:append_ast_expr:
  941|   246k|{
  942|   246k|    switch (e->kind) {
  ------------------
  |  Branch (942:13): [True: 246k, False: 0]
  ------------------
  943|    346|    case BoolOp_kind:
  ------------------
  |  Branch (943:5): [True: 346, False: 245k]
  ------------------
  944|    346|        return append_ast_boolop(writer, e, level);
  945|   101k|    case BinOp_kind:
  ------------------
  |  Branch (945:5): [True: 101k, False: 144k]
  ------------------
  946|   101k|        return append_ast_binop(writer, e, level);
  947|  18.3k|    case UnaryOp_kind:
  ------------------
  |  Branch (947:5): [True: 18.3k, False: 227k]
  ------------------
  948|  18.3k|        return append_ast_unaryop(writer, e, level);
  949|    221|    case Lambda_kind:
  ------------------
  |  Branch (949:5): [True: 221, False: 245k]
  ------------------
  950|    221|        return append_ast_lambda(writer, e, level);
  951|    648|    case IfExp_kind:
  ------------------
  |  Branch (951:5): [True: 648, False: 245k]
  ------------------
  952|    648|        return append_ast_ifexp(writer, e, level);
  953|     44|    case Dict_kind:
  ------------------
  |  Branch (953:5): [True: 44, False: 246k]
  ------------------
  954|     44|        return append_ast_dict(writer, e);
  955|    307|    case Set_kind:
  ------------------
  |  Branch (955:5): [True: 307, False: 245k]
  ------------------
  956|    307|        return append_ast_set(writer, e);
  957|      0|    case GeneratorExp_kind:
  ------------------
  |  Branch (957:5): [True: 0, False: 246k]
  ------------------
  958|      0|        return append_ast_genexp(writer, e);
  959|      0|    case ListComp_kind:
  ------------------
  |  Branch (959:5): [True: 0, False: 246k]
  ------------------
  960|      0|        return append_ast_listcomp(writer, e);
  961|     25|    case SetComp_kind:
  ------------------
  |  Branch (961:5): [True: 25, False: 246k]
  ------------------
  962|     25|        return append_ast_setcomp(writer, e);
  963|      1|    case DictComp_kind:
  ------------------
  |  Branch (963:5): [True: 1, False: 246k]
  ------------------
  964|      1|        return append_ast_dictcomp(writer, e);
  965|      0|    case Yield_kind:
  ------------------
  |  Branch (965:5): [True: 0, False: 246k]
  ------------------
  966|      0|        return append_ast_yield(writer, e);
  967|      0|    case YieldFrom_kind:
  ------------------
  |  Branch (967:5): [True: 0, False: 246k]
  ------------------
  968|      0|        return append_ast_yield_from(writer, e);
  969|      0|    case Await_kind:
  ------------------
  |  Branch (969:5): [True: 0, False: 246k]
  ------------------
  970|      0|        return append_ast_await(writer, e, level);
  971|  1.81k|    case Compare_kind:
  ------------------
  |  Branch (971:5): [True: 1.81k, False: 244k]
  ------------------
  972|  1.81k|        return append_ast_compare(writer, e, level);
  973|    263|    case Call_kind:
  ------------------
  |  Branch (973:5): [True: 263, False: 245k]
  ------------------
  974|    263|        return append_ast_call(writer, e);
  975|   102k|    case Constant_kind:
  ------------------
  |  Branch (975:5): [True: 102k, False: 144k]
  ------------------
  976|   102k|        if (e->v.Constant.value == Py_Ellipsis) {
  ------------------
  |  |   14|   102k|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (976:13): [True: 455, False: 101k]
  ------------------
  977|    455|            APPEND_STR_FINISH("...");
  ------------------
  |  |   47|    455|#define APPEND_STR_FINISH(str)  do { \
  |  |   48|    455|        return append_charp(writer, (str)); \
  |  |   49|    455|    } while (0)
  |  |  ------------------
  |  |  |  Branch (49:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  978|    455|        }
  979|   101k|        if (e->v.Constant.kind != NULL
  ------------------
  |  Branch (979:13): [True: 637, False: 100k]
  ------------------
  980|    637|            && -1 == PyUnicodeWriter_WriteStr(writer, e->v.Constant.kind)) {
  ------------------
  |  Branch (980:16): [True: 0, False: 637]
  ------------------
  981|      0|            return -1;
  982|      0|        }
  983|   101k|        return append_ast_constant(writer, e->v.Constant.value);
  984|  3.83k|    case JoinedStr_kind:
  ------------------
  |  Branch (984:5): [True: 3.83k, False: 242k]
  ------------------
  985|  3.83k|        return append_joinedstr(writer, e, false);
  986|    425|    case TemplateStr_kind:
  ------------------
  |  Branch (986:5): [True: 425, False: 245k]
  ------------------
  987|    425|        return append_templatestr(writer, e);
  988|      0|    case FormattedValue_kind:
  ------------------
  |  Branch (988:5): [True: 0, False: 246k]
  ------------------
  989|      0|        return append_formattedvalue(writer, e);
  990|      0|    case Interpolation_kind:
  ------------------
  |  Branch (990:5): [True: 0, False: 246k]
  ------------------
  991|      0|        return append_interpolation(writer, e);
  992|       |    /* The following exprs can be assignment targets. */
  993|    179|    case Attribute_kind:
  ------------------
  |  Branch (993:5): [True: 179, False: 245k]
  ------------------
  994|    179|        return append_ast_attribute(writer, e);
  995|    302|    case Subscript_kind:
  ------------------
  |  Branch (995:5): [True: 302, False: 245k]
  ------------------
  996|    302|        return append_ast_subscript(writer, e);
  997|    264|    case Starred_kind:
  ------------------
  |  Branch (997:5): [True: 264, False: 245k]
  ------------------
  998|    264|        return append_ast_starred(writer, e);
  999|    338|    case Slice_kind:
  ------------------
  |  Branch (999:5): [True: 338, False: 245k]
  ------------------
 1000|    338|        return append_ast_slice(writer, e);
 1001|  14.0k|    case Name_kind:
  ------------------
  |  Branch (1001:5): [True: 14.0k, False: 232k]
  ------------------
 1002|  14.0k|        return PyUnicodeWriter_WriteStr(writer, e->v.Name.id);
 1003|     26|    case List_kind:
  ------------------
  |  Branch (1003:5): [True: 26, False: 246k]
  ------------------
 1004|     26|        return append_ast_list(writer, e);
 1005|    720|    case Tuple_kind:
  ------------------
  |  Branch (1005:5): [True: 720, False: 245k]
  ------------------
 1006|    720|        return append_ast_tuple(writer, e, level);
 1007|      0|    case NamedExpr_kind:
  ------------------
  |  Branch (1007:5): [True: 0, False: 246k]
  ------------------
 1008|      0|        return append_named_expr(writer, e, level);
 1009|       |    // No default so compiler emits a warning for unhandled cases
 1010|   246k|    }
 1011|      0|    PyErr_SetString(PyExc_SystemError,
 1012|      0|                    "unknown expression kind");
 1013|      0|    return -1;
 1014|   246k|}
ast_unparse.c:append_ast_boolop:
  141|    346|{
  142|    346|    Py_ssize_t i, value_count;
  143|    346|    asdl_expr_seq *values;
  144|    346|    const char *op = (e->v.BoolOp.op == And) ? " and " : " or ";
  ------------------
  |  Branch (144:22): [True: 106, False: 240]
  ------------------
  145|    346|    int pr = (e->v.BoolOp.op == And) ? PR_AND : PR_OR;
  ------------------
  |  Branch (145:14): [True: 106, False: 240]
  ------------------
  146|       |
  147|    346|    APPEND_STR_IF(level > pr, "(");
  ------------------
  |  |   63|    346|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    346|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 1, False: 345]
  |  |  |  Branch (64:23): [True: 0, False: 1]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    346|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 346]
  |  |  ------------------
  ------------------
  148|       |
  149|    346|    values = e->v.BoolOp.values;
  150|    346|    value_count = asdl_seq_LEN(values);
  ------------------
  |  |   83|    346|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    692|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 346]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  151|       |
  152|  1.35k|    for (i = 0; i < value_count; ++i) {
  ------------------
  |  Branch (152:17): [True: 1.01k, False: 346]
  ------------------
  153|  1.01k|        APPEND_STR_IF(i > 0, op);
  ------------------
  |  |   63|  1.01k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|  1.01k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 665, False: 346]
  |  |  |  Branch (64:23): [True: 0, False: 665]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|  1.01k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 1.01k]
  |  |  ------------------
  ------------------
  154|  1.01k|        APPEND_EXPR((expr_ty)asdl_seq_GET(values, i), pr + 1);
  ------------------
  |  |   74|  1.01k|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|  1.01k|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 1.01k]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|  1.01k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 1.01k]
  |  |  ------------------
  ------------------
  155|  1.01k|    }
  156|       |
  157|    346|    APPEND_STR_IF(level > pr, ")");
  ------------------
  |  |   63|    346|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    346|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 1, False: 345]
  |  |  |  Branch (64:23): [True: 0, False: 1]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    346|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 346]
  |  |  ------------------
  ------------------
  158|    346|    return 0;
  159|    346|}
ast_unparse.c:append_ast_binop:
  163|   101k|{
  164|   101k|    const char *op;
  165|   101k|    int pr;
  166|   101k|    bool rassoc = false;  /* is right-associative? */
  167|       |
  168|   101k|    switch (e->v.BinOp.op) {
  169|  12.7k|    case Add: op = " + "; pr = PR_ARITH; break;
  ------------------
  |  Branch (169:5): [True: 12.7k, False: 89.2k]
  ------------------
  170|  14.3k|    case Sub: op = " - "; pr = PR_ARITH; break;
  ------------------
  |  Branch (170:5): [True: 14.3k, False: 87.5k]
  ------------------
  171|  30.2k|    case Mult: op = " * "; pr = PR_TERM; break;
  ------------------
  |  Branch (171:5): [True: 30.2k, False: 71.6k]
  ------------------
  172|  3.73k|    case MatMult: op = " @ "; pr = PR_TERM; break;
  ------------------
  |  Branch (172:5): [True: 3.73k, False: 98.2k]
  ------------------
  173|  8.37k|    case Div: op = " / "; pr = PR_TERM; break;
  ------------------
  |  Branch (173:5): [True: 8.37k, False: 93.5k]
  ------------------
  174|  2.46k|    case Mod: op = " % "; pr = PR_TERM; break;
  ------------------
  |  Branch (174:5): [True: 2.46k, False: 99.5k]
  ------------------
  175|  1.96k|    case LShift: op = " << "; pr = PR_SHIFT; break;
  ------------------
  |  Branch (175:5): [True: 1.96k, False: 100k]
  ------------------
  176|    728|    case RShift: op = " >> "; pr = PR_SHIFT; break;
  ------------------
  |  Branch (176:5): [True: 728, False: 101k]
  ------------------
  177|    335|    case BitOr: op = " | "; pr = PR_BOR; break;
  ------------------
  |  Branch (177:5): [True: 335, False: 101k]
  ------------------
  178|  13.1k|    case BitXor: op = " ^ "; pr = PR_BXOR; break;
  ------------------
  |  Branch (178:5): [True: 13.1k, False: 88.7k]
  ------------------
  179|    461|    case BitAnd: op = " & "; pr = PR_BAND; break;
  ------------------
  |  Branch (179:5): [True: 461, False: 101k]
  ------------------
  180|    657|    case FloorDiv: op = " // "; pr = PR_TERM; break;
  ------------------
  |  Branch (180:5): [True: 657, False: 101k]
  ------------------
  181|  12.6k|    case Pow: op = " ** "; pr = PR_POWER; rassoc = true; break;
  ------------------
  |  Branch (181:5): [True: 12.6k, False: 89.3k]
  ------------------
  182|      0|    default:
  ------------------
  |  Branch (182:5): [True: 0, False: 101k]
  ------------------
  183|      0|        PyErr_SetString(PyExc_SystemError,
  184|      0|                        "unknown binary operator");
  185|      0|        return -1;
  186|   101k|    }
  187|       |
  188|   101k|    APPEND_STR_IF(level > pr, "(");
  ------------------
  |  |   63|   101k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|   101k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 13, False: 101k]
  |  |  |  Branch (64:23): [True: 0, False: 13]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|   101k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 101k]
  |  |  ------------------
  ------------------
  189|   101k|    APPEND_EXPR(e->v.BinOp.left, pr + rassoc);
  ------------------
  |  |   74|   101k|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|   101k|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 101k]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|   101k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 101k]
  |  |  ------------------
  ------------------
  190|   101k|    APPEND_STR(op);
  ------------------
  |  |   57|   101k|#define APPEND_STR(str)  do { \
  |  |   58|   101k|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 101k]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|   101k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 101k]
  |  |  ------------------
  ------------------
  191|   101k|    APPEND_EXPR(e->v.BinOp.right, pr + !rassoc);
  ------------------
  |  |   74|   101k|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|   101k|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 101k]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|   101k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 101k]
  |  |  ------------------
  ------------------
  192|   101k|    APPEND_STR_IF(level > pr, ")");
  ------------------
  |  |   63|   101k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|   101k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 13, False: 101k]
  |  |  |  Branch (64:23): [True: 0, False: 13]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|   101k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 101k]
  |  |  ------------------
  ------------------
  193|   101k|    return 0;
  194|   101k|}
ast_unparse.c:append_ast_unaryop:
  198|  18.3k|{
  199|  18.3k|    const char *op;
  200|  18.3k|    int pr;
  201|       |
  202|  18.3k|    switch (e->v.UnaryOp.op) {
  203|    181|    case Invert: op = "~"; pr = PR_FACTOR; break;
  ------------------
  |  Branch (203:5): [True: 181, False: 18.1k]
  ------------------
  204|      0|    case Not: op = "not "; pr = PR_NOT; break;
  ------------------
  |  Branch (204:5): [True: 0, False: 18.3k]
  ------------------
  205|  10.0k|    case UAdd: op = "+"; pr = PR_FACTOR; break;
  ------------------
  |  Branch (205:5): [True: 10.0k, False: 8.23k]
  ------------------
  206|  8.05k|    case USub: op = "-"; pr = PR_FACTOR; break;
  ------------------
  |  Branch (206:5): [True: 8.05k, False: 10.2k]
  ------------------
  207|      0|    default:
  ------------------
  |  Branch (207:5): [True: 0, False: 18.3k]
  ------------------
  208|      0|        PyErr_SetString(PyExc_SystemError,
  209|      0|                        "unknown unary operator");
  210|      0|        return -1;
  211|  18.3k|    }
  212|       |
  213|  18.3k|    APPEND_STR_IF(level > pr, "(");
  ------------------
  |  |   63|  18.3k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|  18.3k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 3.23k, False: 15.0k]
  |  |  |  Branch (64:23): [True: 0, False: 3.23k]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|  18.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
  214|  18.3k|    APPEND_STR(op);
  ------------------
  |  |   57|  18.3k|#define APPEND_STR(str)  do { \
  |  |   58|  18.3k|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 18.3k]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|  18.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
  215|  18.3k|    APPEND_EXPR(e->v.UnaryOp.operand, pr);
  ------------------
  |  |   74|  18.3k|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|  18.3k|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 18.3k]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|  18.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
  216|  18.3k|    APPEND_STR_IF(level > pr, ")");
  ------------------
  |  |   63|  18.3k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|  18.3k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 3.23k, False: 15.0k]
  |  |  |  Branch (64:23): [True: 0, False: 3.23k]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|  18.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 18.3k]
  |  |  ------------------
  ------------------
  217|  18.3k|    return 0;
  218|  18.3k|}
ast_unparse.c:append_ast_lambda:
  301|    221|{
  302|    221|    APPEND_STR_IF(level > PR_TEST, "(");
  ------------------
  |  |   63|    221|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    221|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 0, False: 221]
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    221|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 221]
  |  |  ------------------
  ------------------
  303|    221|    Py_ssize_t n_positional = (asdl_seq_LEN(e->v.Lambda.args->args) +
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  304|    221|                               asdl_seq_LEN(e->v.Lambda.args->posonlyargs));
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|    221|    APPEND_STR(n_positional ? "lambda " : "lambda");
  ------------------
  |  |   57|    221|#define APPEND_STR(str)  do { \
  |  |   58|    442|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 221]
  |  |  |  Branch (58:41): [True: 104, False: 117]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|    221|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 221]
  |  |  ------------------
  ------------------
  306|    221|    APPEND(args, e->v.Lambda.args);
  ------------------
  |  |   80|    221|#define APPEND(type, value)  do { \
  |  |   81|    221|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 221]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|    221|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 221]
  |  |  ------------------
  ------------------
  307|    221|    APPEND_STR(": ");
  ------------------
  |  |   57|    221|#define APPEND_STR(str)  do { \
  |  |   58|    221|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 221]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|    221|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 221]
  |  |  ------------------
  ------------------
  308|    221|    APPEND_EXPR(e->v.Lambda.body, PR_TEST);
  ------------------
  |  |   74|    221|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    221|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 221]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    221|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 221]
  |  |  ------------------
  ------------------
  309|    221|    APPEND_STR_IF(level > PR_TEST, ")");
  ------------------
  |  |   63|    221|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    221|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 0, False: 221]
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    221|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 221]
  |  |  ------------------
  ------------------
  310|    221|    return 0;
  311|    221|}
ast_unparse.c:append_ast_args:
  235|    221|{
  236|    221|    bool first;
  237|    221|    Py_ssize_t i, di, arg_count, posonlyarg_count, default_count;
  238|       |
  239|    221|    first = true;
  240|       |
  241|       |    /* positional-only and positional arguments with defaults */
  242|    221|    posonlyarg_count = asdl_seq_LEN(args->posonlyargs);
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|    221|    arg_count = asdl_seq_LEN(args->args);
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|    221|    default_count = asdl_seq_LEN(args->defaults);
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|    327|    for (i = 0; i < posonlyarg_count + arg_count; i++) {
  ------------------
  |  Branch (245:17): [True: 106, False: 221]
  ------------------
  246|    106|        APPEND_STR_IF_NOT_FIRST(", ");
  ------------------
  |  |   69|    106|#define APPEND_STR_IF_NOT_FIRST(str)  do { \
  |  |   70|    106|        APPEND_STR_IF(!first, (str)); \
  |  |  ------------------
  |  |  |  |   63|    106|#define APPEND_STR_IF(cond, str)  do { \
  |  |  |  |   64|    106|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:13): [True: 2, False: 104]
  |  |  |  |  |  Branch (64:23): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|            return -1; \
  |  |  |  |   66|      0|        } \
  |  |  |  |   67|    106|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:14): [Folded, False: 106]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|    106|        first = false; \
  |  |   72|    106|    } while (0)
  |  |  ------------------
  |  |  |  Branch (72:14): [Folded, False: 106]
  |  |  ------------------
  ------------------
  247|    106|        if (i < posonlyarg_count){
  ------------------
  |  Branch (247:13): [True: 4, False: 102]
  ------------------
  248|      4|            APPEND(arg, (arg_ty)asdl_seq_GET(args->posonlyargs, i));
  ------------------
  |  |   80|      4|#define APPEND(type, value)  do { \
  |  |   81|      4|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 4]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  249|    102|        } else {
  250|    102|            APPEND(arg, (arg_ty)asdl_seq_GET(args->args, i-posonlyarg_count));
  ------------------
  |  |   80|    102|#define APPEND(type, value)  do { \
  |  |   81|    102|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 102]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|    102|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 102]
  |  |  ------------------
  ------------------
  251|    102|        }
  252|       |
  253|    106|        di = i - posonlyarg_count - arg_count + default_count;
  254|    106|        if (di >= 0) {
  ------------------
  |  Branch (254:13): [True: 1, False: 105]
  ------------------
  255|      1|            APPEND_CHAR('=');
  ------------------
  |  |   51|      1|#define APPEND_CHAR(ch)  do { \
  |  |   52|      1|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  256|      1|            APPEND_EXPR((expr_ty)asdl_seq_GET(args->defaults, di), PR_TEST);
  ------------------
  |  |   74|      1|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|      1|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  257|      1|        }
  258|    106|        if (posonlyarg_count && i + 1 == posonlyarg_count) {
  ------------------
  |  Branch (258:13): [True: 4, False: 102]
  |  Branch (258:33): [True: 2, False: 2]
  ------------------
  259|      2|            APPEND_STR(", /");
  ------------------
  |  |   57|      2|#define APPEND_STR(str)  do { \
  |  |   58|      2|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  260|      2|        }
  261|    106|    }
  262|       |
  263|       |    /* vararg, or bare '*' if no varargs but keyword-only arguments present */
  264|    221|    if (args->vararg || asdl_seq_LEN(args->kwonlyargs)) {
  ------------------
  |  |   83|    151|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    302|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 0, False: 151]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 151]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (264:9): [True: 70, False: 151]
  ------------------
  265|     70|        APPEND_STR_IF_NOT_FIRST(", ");
  ------------------
  |  |   69|     70|#define APPEND_STR_IF_NOT_FIRST(str)  do { \
  |  |   70|     70|        APPEND_STR_IF(!first, (str)); \
  |  |  ------------------
  |  |  |  |   63|     70|#define APPEND_STR_IF(cond, str)  do { \
  |  |  |  |   64|     70|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:13): [True: 0, False: 70]
  |  |  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|            return -1; \
  |  |  |  |   66|      0|        } \
  |  |  |  |   67|     70|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:14): [Folded, False: 70]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|     70|        first = false; \
  |  |   72|     70|    } while (0)
  |  |  ------------------
  |  |  |  Branch (72:14): [Folded, False: 70]
  |  |  ------------------
  ------------------
  266|     70|        APPEND_STR("*");
  ------------------
  |  |   57|     70|#define APPEND_STR(str)  do { \
  |  |   58|     70|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 70]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|     70|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 70]
  |  |  ------------------
  ------------------
  267|     70|        if (args->vararg) {
  ------------------
  |  Branch (267:13): [True: 70, False: 0]
  ------------------
  268|     70|            APPEND(arg, args->vararg);
  ------------------
  |  |   80|     70|#define APPEND(type, value)  do { \
  |  |   81|     70|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 70]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|     70|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 70]
  |  |  ------------------
  ------------------
  269|     70|        }
  270|     70|    }
  271|       |
  272|       |    /* keyword-only arguments */
  273|    221|    arg_count = asdl_seq_LEN(args->kwonlyargs);
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|    221|    default_count = asdl_seq_LEN(args->kw_defaults);
  ------------------
  |  |   83|    221|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    442|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|    227|    for (i = 0; i < arg_count; i++) {
  ------------------
  |  Branch (275:17): [True: 6, False: 221]
  ------------------
  276|      6|        APPEND_STR_IF_NOT_FIRST(", ");
  ------------------
  |  |   69|      6|#define APPEND_STR_IF_NOT_FIRST(str)  do { \
  |  |   70|      6|        APPEND_STR_IF(!first, (str)); \
  |  |  ------------------
  |  |  |  |   63|      6|#define APPEND_STR_IF(cond, str)  do { \
  |  |  |  |   64|      6|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:13): [True: 6, False: 0]
  |  |  |  |  |  Branch (64:23): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|            return -1; \
  |  |  |  |   66|      0|        } \
  |  |  |  |   67|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      6|        first = false; \
  |  |   72|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (72:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
  277|      6|        APPEND(arg, (arg_ty)asdl_seq_GET(args->kwonlyargs, i));
  ------------------
  |  |   80|      6|#define APPEND(type, value)  do { \
  |  |   81|      6|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 6]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
  278|       |
  279|      6|        di = i - arg_count + default_count;
  280|      6|        if (di >= 0) {
  ------------------
  |  Branch (280:13): [True: 6, False: 0]
  ------------------
  281|      6|            expr_ty default_ = (expr_ty)asdl_seq_GET(args->kw_defaults, di);
  ------------------
  |  |   82|      6|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      6|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  282|      6|            if (default_) {
  ------------------
  |  Branch (282:17): [True: 3, False: 3]
  ------------------
  283|      3|                APPEND_CHAR('=');
  ------------------
  |  |   51|      3|#define APPEND_CHAR(ch)  do { \
  |  |   52|      3|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|      3|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3]
  |  |  ------------------
  ------------------
  284|      3|                APPEND_EXPR(default_, PR_TEST);
  ------------------
  |  |   74|      3|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|      3|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 3]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|      3|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 3]
  |  |  ------------------
  ------------------
  285|      3|            }
  286|      6|        }
  287|      6|    }
  288|       |
  289|       |    /* **kwargs */
  290|    221|    if (args->kwarg) {
  ------------------
  |  Branch (290:9): [True: 1, False: 220]
  ------------------
  291|      1|        APPEND_STR_IF_NOT_FIRST(", ");
  ------------------
  |  |   69|      1|#define APPEND_STR_IF_NOT_FIRST(str)  do { \
  |  |   70|      1|        APPEND_STR_IF(!first, (str)); \
  |  |  ------------------
  |  |  |  |   63|      1|#define APPEND_STR_IF(cond, str)  do { \
  |  |  |  |   64|      1|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:13): [True: 1, False: 0]
  |  |  |  |  |  Branch (64:23): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|            return -1; \
  |  |  |  |   66|      0|        } \
  |  |  |  |   67|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      1|        first = false; \
  |  |   72|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (72:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  292|      1|        APPEND_STR("**");
  ------------------
  |  |   57|      1|#define APPEND_STR(str)  do { \
  |  |   58|      1|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  293|      1|        APPEND(arg, args->kwarg);
  ------------------
  |  |   80|      1|#define APPEND(type, value)  do { \
  |  |   81|      1|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  294|      1|    }
  295|       |
  296|    221|    return 0;
  297|    221|}
ast_unparse.c:append_ast_arg:
  222|    183|{
  223|    183|    if (PyUnicodeWriter_WriteStr(writer, arg->arg) < 0) {
  ------------------
  |  Branch (223:9): [True: 0, False: 183]
  ------------------
  224|      0|        return -1;
  225|      0|    }
  226|    183|    if (arg->annotation) {
  ------------------
  |  Branch (226:9): [True: 0, False: 183]
  ------------------
  227|      0|        APPEND_STR(": ");
  ------------------
  |  |   57|      0|#define APPEND_STR(str)  do { \
  |  |   58|      0|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  228|      0|        APPEND_EXPR(arg->annotation, PR_TEST);
  ------------------
  |  |   74|      0|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|      0|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  229|      0|    }
  230|    183|    return 0;
  231|    183|}
ast_unparse.c:append_char:
   33|  6.82k|{
   34|  6.82k|    return PyUnicodeWriter_WriteChar(writer, ch);
   35|  6.82k|}
ast_unparse.c:append_ast_ifexp:
  315|    648|{
  316|    648|    APPEND_STR_IF(level > PR_TEST, "(");
  ------------------
  |  |   63|    648|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    648|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 0, False: 648]
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  317|    648|    APPEND_EXPR(e->v.IfExp.body, PR_TEST + 1);
  ------------------
  |  |   74|    648|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    648|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 648]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  318|    648|    APPEND_STR(" if ");
  ------------------
  |  |   57|    648|#define APPEND_STR(str)  do { \
  |  |   58|    648|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 648]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  319|    648|    APPEND_EXPR(e->v.IfExp.test, PR_TEST + 1);
  ------------------
  |  |   74|    648|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    648|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 648]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  320|    648|    APPEND_STR(" else ");
  ------------------
  |  |   57|    648|#define APPEND_STR(str)  do { \
  |  |   58|    648|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 648]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  321|    648|    APPEND_EXPR(e->v.IfExp.orelse, PR_TEST);
  ------------------
  |  |   74|    648|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    648|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 648]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  322|    648|    APPEND_STR_IF(level > PR_TEST, ")");
  ------------------
  |  |   63|    648|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    648|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 0, False: 648]
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    648|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 648]
  |  |  ------------------
  ------------------
  323|    648|    return 0;
  324|    648|}
ast_unparse.c:append_ast_dict:
  328|     44|{
  329|     44|    Py_ssize_t i, value_count;
  330|     44|    expr_ty key_node;
  331|       |
  332|     44|    APPEND_CHAR('{');
  ------------------
  |  |   51|     44|#define APPEND_CHAR(ch)  do { \
  |  |   52|     44|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 44]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|     44|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 44]
  |  |  ------------------
  ------------------
  333|     44|    value_count = asdl_seq_LEN(e->v.Dict.values);
  ------------------
  |  |   83|     44|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     88|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 44]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|       |
  335|     92|    for (i = 0; i < value_count; i++) {
  ------------------
  |  Branch (335:17): [True: 48, False: 44]
  ------------------
  336|     48|        APPEND_STR_IF(i > 0, ", ");
  ------------------
  |  |   63|     48|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|     48|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 24, False: 24]
  |  |  |  Branch (64:23): [True: 0, False: 24]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|     48|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 48]
  |  |  ------------------
  ------------------
  337|     48|        key_node = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i);
  ------------------
  |  |   82|     48|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     48|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  338|     48|        if (key_node != NULL) {
  ------------------
  |  Branch (338:13): [True: 24, False: 24]
  ------------------
  339|     24|            APPEND_EXPR(key_node, PR_TEST);
  ------------------
  |  |   74|     24|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     24|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 24]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     24|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 24]
  |  |  ------------------
  ------------------
  340|     24|            APPEND_STR(": ");
  ------------------
  |  |   57|     24|#define APPEND_STR(str)  do { \
  |  |   58|     24|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 24]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|     24|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 24]
  |  |  ------------------
  ------------------
  341|     24|            APPEND_EXPR((expr_ty)asdl_seq_GET(e->v.Dict.values, i), PR_TEST);
  ------------------
  |  |   74|     24|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     24|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 24]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     24|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 24]
  |  |  ------------------
  ------------------
  342|     24|        }
  343|     24|        else {
  344|     24|            APPEND_STR("**");
  ------------------
  |  |   57|     24|#define APPEND_STR(str)  do { \
  |  |   58|     24|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 24]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|     24|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 24]
  |  |  ------------------
  ------------------
  345|     24|            APPEND_EXPR((expr_ty)asdl_seq_GET(e->v.Dict.values, i), PR_EXPR);
  ------------------
  |  |   74|     24|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     24|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 24]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     24|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 24]
  |  |  ------------------
  ------------------
  346|     24|        }
  347|     48|    }
  348|       |
  349|     44|    APPEND_CHAR_FINISH('}');
  ------------------
  |  |   43|     44|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|     44|        return append_char(writer, (ch)); \
  |  |   45|     44|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  350|     44|}
ast_unparse.c:append_ast_set:
  354|    307|{
  355|    307|    Py_ssize_t i, elem_count;
  356|       |
  357|    307|    APPEND_CHAR('{');
  ------------------
  |  |   51|    307|#define APPEND_CHAR(ch)  do { \
  |  |   52|    307|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 307]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|    307|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 307]
  |  |  ------------------
  ------------------
  358|    307|    elem_count = asdl_seq_LEN(e->v.Set.elts);
  ------------------
  |  |   83|    307|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    614|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 307]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|    802|    for (i = 0; i < elem_count; i++) {
  ------------------
  |  Branch (359:17): [True: 495, False: 307]
  ------------------
  360|    495|        APPEND_STR_IF(i > 0, ", ");
  ------------------
  |  |   63|    495|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    495|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 188, False: 307]
  |  |  |  Branch (64:23): [True: 0, False: 188]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    495|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 495]
  |  |  ------------------
  ------------------
  361|    495|        APPEND_EXPR((expr_ty)asdl_seq_GET(e->v.Set.elts, i), PR_TEST);
  ------------------
  |  |   74|    495|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    495|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 495]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    495|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 495]
  |  |  ------------------
  ------------------
  362|    495|    }
  363|       |
  364|    307|    APPEND_CHAR_FINISH('}');
  ------------------
  |  |   43|    307|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|    307|        return append_char(writer, (ch)); \
  |  |   45|    307|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  365|    307|}
ast_unparse.c:append_ast_comprehensions:
  425|     26|{
  426|     26|    Py_ssize_t i, gen_count;
  427|     26|    gen_count = asdl_seq_LEN(comprehensions);
  ------------------
  |  |   83|     26|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     52|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|       |
  429|     73|    for (i = 0; i < gen_count; i++) {
  ------------------
  |  Branch (429:17): [True: 47, False: 26]
  ------------------
  430|     47|        APPEND(comprehension, (comprehension_ty)asdl_seq_GET(comprehensions, i));
  ------------------
  |  |   80|     47|#define APPEND(type, value)  do { \
  |  |   81|     47|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 47]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|     47|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 47]
  |  |  ------------------
  ------------------
  431|     47|    }
  432|       |
  433|     26|    return 0;
  434|     26|}
ast_unparse.c:append_ast_comprehension:
  407|     47|{
  408|     47|    Py_ssize_t i, if_count;
  409|       |
  410|     47|    APPEND_STR(gen->is_async ? " async for " : " for ");
  ------------------
  |  |   57|     47|#define APPEND_STR(str)  do { \
  |  |   58|     94|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 47]
  |  |  |  Branch (58:41): [True: 0, False: 47]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|     47|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 47]
  |  |  ------------------
  ------------------
  411|     47|    APPEND_EXPR(gen->target, PR_TUPLE);
  ------------------
  |  |   74|     47|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     47|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 47]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     47|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 47]
  |  |  ------------------
  ------------------
  412|     47|    APPEND_STR(" in ");
  ------------------
  |  |   57|     47|#define APPEND_STR(str)  do { \
  |  |   58|     47|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 47]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|     47|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 47]
  |  |  ------------------
  ------------------
  413|     47|    APPEND_EXPR(gen->iter, PR_TEST + 1);
  ------------------
  |  |   74|     47|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     47|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 47]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     47|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 47]
  |  |  ------------------
  ------------------
  414|       |
  415|     47|    if_count = asdl_seq_LEN(gen->ifs);
  ------------------
  |  |   83|     47|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     94|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|    184|    for (i = 0; i < if_count; i++) {
  ------------------
  |  Branch (416:17): [True: 137, False: 47]
  ------------------
  417|    137|        APPEND_STR(" if ");
  ------------------
  |  |   57|    137|#define APPEND_STR(str)  do { \
  |  |   58|    137|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 137]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|    137|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 137]
  |  |  ------------------
  ------------------
  418|    137|        APPEND_EXPR((expr_ty)asdl_seq_GET(gen->ifs, i), PR_TEST + 1);
  ------------------
  |  |   74|    137|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    137|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 137]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    137|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 137]
  |  |  ------------------
  ------------------
  419|    137|    }
  420|     47|    return 0;
  421|     47|}
ast_unparse.c:append_ast_setcomp:
  456|     25|{
  457|     25|    APPEND_CHAR('{');
  ------------------
  |  |   51|     25|#define APPEND_CHAR(ch)  do { \
  |  |   52|     25|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 25]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
  458|     25|    APPEND_EXPR(e->v.SetComp.elt, PR_TEST);
  ------------------
  |  |   74|     25|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     25|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 25]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
  459|     25|    APPEND(comprehensions, e->v.SetComp.generators);
  ------------------
  |  |   80|     25|#define APPEND(type, value)  do { \
  |  |   81|     25|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 25]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
  460|     25|    APPEND_CHAR_FINISH('}');
  ------------------
  |  |   43|     25|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|     25|        return append_char(writer, (ch)); \
  |  |   45|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  461|     25|}
ast_unparse.c:append_ast_dictcomp:
  465|      1|{
  466|      1|    APPEND_CHAR('{');
  ------------------
  |  |   51|      1|#define APPEND_CHAR(ch)  do { \
  |  |   52|      1|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  467|      1|    if (e->v.DictComp.value) {
  ------------------
  |  Branch (467:9): [True: 1, False: 0]
  ------------------
  468|      1|        APPEND_EXPR(e->v.DictComp.key, PR_TEST);
  ------------------
  |  |   74|      1|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|      1|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  469|      1|        APPEND_STR(": ");
  ------------------
  |  |   57|      1|#define APPEND_STR(str)  do { \
  |  |   58|      1|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  470|      1|        APPEND_EXPR(e->v.DictComp.value, PR_TEST);
  ------------------
  |  |   74|      1|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|      1|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  471|      1|    }
  472|      0|    else {
  473|      0|        APPEND_STR("**");
  ------------------
  |  |   57|      0|#define APPEND_STR(str)  do { \
  |  |   58|      0|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  474|      0|        APPEND_EXPR(e->v.DictComp.key, PR_TEST);
  ------------------
  |  |   74|      0|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|      0|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  475|      0|    }
  476|      1|    APPEND(comprehensions, e->v.DictComp.generators);
  ------------------
  |  |   80|      1|#define APPEND(type, value)  do { \
  |  |   81|      1|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
  477|      1|    APPEND_CHAR_FINISH('}');
  ------------------
  |  |   43|      1|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|      1|        return append_char(writer, (ch)); \
  |  |   45|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  478|      1|}
ast_unparse.c:append_ast_compare:
  482|  1.81k|{
  483|  1.81k|    const char *op;
  484|  1.81k|    Py_ssize_t i, comparator_count;
  485|  1.81k|    asdl_expr_seq *comparators;
  486|  1.81k|    asdl_int_seq *ops;
  487|       |
  488|  1.81k|    APPEND_STR_IF(level > PR_CMP, "(");
  ------------------
  |  |   63|  1.81k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|  1.81k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 8, False: 1.80k]
  |  |  |  Branch (64:23): [True: 0, False: 8]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|  1.81k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 1.81k]
  |  |  ------------------
  ------------------
  489|       |
  490|  1.81k|    comparators = e->v.Compare.comparators;
  491|  1.81k|    ops = e->v.Compare.ops;
  492|  1.81k|    comparator_count = asdl_seq_LEN(comparators);
  ------------------
  |  |   83|  1.81k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.62k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.81k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  1.81k|    assert(comparator_count > 0);
  ------------------
  |  Branch (493:5): [True: 1.81k, False: 0]
  ------------------
  494|  1.81k|    assert(comparator_count == asdl_seq_LEN(ops));
  ------------------
  |  Branch (494:5): [True: 0, False: 1.81k]
  |  Branch (494:5): [True: 1.81k, False: 0]
  ------------------
  495|       |
  496|  1.81k|    APPEND_EXPR(e->v.Compare.left, PR_CMP + 1);
  ------------------
  |  |   74|  1.81k|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|  1.81k|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 1.81k]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|  1.81k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 1.81k]
  |  |  ------------------
  ------------------
  497|       |
  498|  7.53k|    for (i = 0; i < comparator_count; i++) {
  ------------------
  |  Branch (498:17): [True: 5.72k, False: 1.81k]
  ------------------
  499|  5.72k|        switch ((cmpop_ty)asdl_seq_GET(ops, i)) {
  ------------------
  |  |   82|  5.72k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  5.72k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  500|     48|        case Eq:
  ------------------
  |  Branch (500:9): [True: 48, False: 5.67k]
  ------------------
  501|     48|            op = " == ";
  502|     48|            break;
  503|      8|        case NotEq:
  ------------------
  |  Branch (503:9): [True: 8, False: 5.71k]
  ------------------
  504|      8|            op = " != ";
  505|      8|            break;
  506|  3.31k|        case Lt:
  ------------------
  |  Branch (506:9): [True: 3.31k, False: 2.41k]
  ------------------
  507|  3.31k|            op = " < ";
  508|  3.31k|            break;
  509|    787|        case LtE:
  ------------------
  |  Branch (509:9): [True: 787, False: 4.93k]
  ------------------
  510|    787|            op = " <= ";
  511|    787|            break;
  512|  1.05k|        case Gt:
  ------------------
  |  Branch (512:9): [True: 1.05k, False: 4.67k]
  ------------------
  513|  1.05k|            op = " > ";
  514|  1.05k|            break;
  515|     64|        case GtE:
  ------------------
  |  Branch (515:9): [True: 64, False: 5.66k]
  ------------------
  516|     64|            op = " >= ";
  517|     64|            break;
  518|    224|        case Is:
  ------------------
  |  Branch (518:9): [True: 224, False: 5.50k]
  ------------------
  519|    224|            op = " is ";
  520|    224|            break;
  521|      0|        case IsNot:
  ------------------
  |  Branch (521:9): [True: 0, False: 5.72k]
  ------------------
  522|      0|            op = " is not ";
  523|      0|            break;
  524|    232|        case In:
  ------------------
  |  Branch (524:9): [True: 232, False: 5.49k]
  ------------------
  525|    232|            op = " in ";
  526|    232|            break;
  527|      0|        case NotIn:
  ------------------
  |  Branch (527:9): [True: 0, False: 5.72k]
  ------------------
  528|      0|            op = " not in ";
  529|      0|            break;
  530|      0|        default:
  ------------------
  |  Branch (530:9): [True: 0, False: 5.72k]
  ------------------
  531|      0|            PyErr_SetString(PyExc_SystemError,
  532|      0|                            "unexpected comparison kind");
  533|      0|            return -1;
  534|  5.72k|        }
  535|       |
  536|  5.72k|        APPEND_STR(op);
  ------------------
  |  |   57|  5.72k|#define APPEND_STR(str)  do { \
  |  |   58|  5.72k|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 5.72k]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|  5.72k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 5.72k]
  |  |  ------------------
  ------------------
  537|  5.72k|        APPEND_EXPR((expr_ty)asdl_seq_GET(comparators, i), PR_CMP + 1);
  ------------------
  |  |   74|  5.72k|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|  5.72k|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 5.72k]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|  5.72k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 5.72k]
  |  |  ------------------
  ------------------
  538|  5.72k|    }
  539|       |
  540|  1.81k|    APPEND_STR_IF(level > PR_CMP, ")");
  ------------------
  |  |   63|  1.81k|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|  1.81k|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 8, False: 1.80k]
  |  |  |  Branch (64:23): [True: 0, False: 8]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|  1.81k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 1.81k]
  |  |  ------------------
  ------------------
  541|  1.81k|    return 0;
  542|  1.81k|}
ast_unparse.c:append_ast_call:
  564|    263|{
  565|    263|    bool first;
  566|    263|    Py_ssize_t i, arg_count, kw_count;
  567|    263|    expr_ty expr;
  568|       |
  569|    263|    APPEND_EXPR(e->v.Call.func, PR_ATOM);
  ------------------
  |  |   74|    263|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    263|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 263]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    263|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 263]
  |  |  ------------------
  ------------------
  570|       |
  571|    263|    arg_count = asdl_seq_LEN(e->v.Call.args);
  ------------------
  |  |   83|    263|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    526|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 142, False: 121]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  572|    263|    kw_count = asdl_seq_LEN(e->v.Call.keywords);
  ------------------
  |  |   83|    263|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    526|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 254, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|    263|    if (arg_count == 1 && kw_count == 0) {
  ------------------
  |  Branch (573:9): [True: 83, False: 180]
  |  Branch (573:27): [True: 80, False: 3]
  ------------------
  574|     80|        expr = (expr_ty)asdl_seq_GET(e->v.Call.args, 0);
  ------------------
  |  |   82|     80|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     80|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  575|     80|        if (expr->kind == GeneratorExp_kind) {
  ------------------
  |  Branch (575:13): [True: 0, False: 80]
  ------------------
  576|       |            /* Special case: a single generator expression. */
  577|      0|            return append_ast_genexp(writer, expr);
  578|      0|        }
  579|     80|    }
  580|       |
  581|    263|    APPEND_CHAR('(');
  ------------------
  |  |   51|    263|#define APPEND_CHAR(ch)  do { \
  |  |   52|    263|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 263]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|    263|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 263]
  |  |  ------------------
  ------------------
  582|       |
  583|    263|    first = true;
  584|    434|    for (i = 0; i < arg_count; i++) {
  ------------------
  |  Branch (584:17): [True: 171, False: 263]
  ------------------
  585|    171|        APPEND_STR_IF_NOT_FIRST(", ");
  ------------------
  |  |   69|    171|#define APPEND_STR_IF_NOT_FIRST(str)  do { \
  |  |   70|    171|        APPEND_STR_IF(!first, (str)); \
  |  |  ------------------
  |  |  |  |   63|    171|#define APPEND_STR_IF(cond, str)  do { \
  |  |  |  |   64|    171|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:13): [True: 50, False: 121]
  |  |  |  |  |  Branch (64:23): [True: 0, False: 50]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|            return -1; \
  |  |  |  |   66|      0|        } \
  |  |  |  |   67|    171|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:14): [Folded, False: 171]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|    171|        first = false; \
  |  |   72|    171|    } while (0)
  |  |  ------------------
  |  |  |  Branch (72:14): [Folded, False: 171]
  |  |  ------------------
  ------------------
  586|    171|        APPEND_EXPR((expr_ty)asdl_seq_GET(e->v.Call.args, i), PR_TEST);
  ------------------
  |  |   74|    171|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    171|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 171]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    171|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 171]
  |  |  ------------------
  ------------------
  587|    171|    }
  588|       |
  589|    277|    for (i = 0; i < kw_count; i++) {
  ------------------
  |  Branch (589:17): [True: 14, False: 263]
  ------------------
  590|     14|        APPEND_STR_IF_NOT_FIRST(", ");
  ------------------
  |  |   69|     14|#define APPEND_STR_IF_NOT_FIRST(str)  do { \
  |  |   70|     14|        APPEND_STR_IF(!first, (str)); \
  |  |  ------------------
  |  |  |  |   63|     14|#define APPEND_STR_IF(cond, str)  do { \
  |  |  |  |   64|     14|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:13): [True: 9, False: 5]
  |  |  |  |  |  Branch (64:23): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|            return -1; \
  |  |  |  |   66|      0|        } \
  |  |  |  |   67|     14|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (67:14): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|     14|        first = false; \
  |  |   72|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (72:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
  591|     14|        APPEND(keyword, (keyword_ty)asdl_seq_GET(e->v.Call.keywords, i));
  ------------------
  |  |   80|     14|#define APPEND(type, value)  do { \
  |  |   81|     14|        if (-1 == append_ast_ ## type(writer, (value))) { \
  |  |  ------------------
  |  |  |  Branch (81:13): [True: 0, False: 14]
  |  |  ------------------
  |  |   82|      0|            return -1; \
  |  |   83|      0|        } \
  |  |   84|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (84:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
  592|     14|    }
  593|       |
  594|    263|    APPEND_CHAR_FINISH(')');
  ------------------
  |  |   43|    263|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|    263|        return append_char(writer, (ch)); \
  |  |   45|    263|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  595|    263|}
ast_unparse.c:append_ast_keyword:
  546|     14|{
  547|     14|    if (kw->arg == NULL) {
  ------------------
  |  Branch (547:9): [True: 6, False: 8]
  ------------------
  548|      6|        APPEND_STR("**");
  ------------------
  |  |   57|      6|#define APPEND_STR(str)  do { \
  |  |   58|      6|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 6]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
  549|      6|    }
  550|      8|    else {
  551|      8|        if (-1 == PyUnicodeWriter_WriteStr(writer, kw->arg)) {
  ------------------
  |  Branch (551:13): [True: 0, False: 8]
  ------------------
  552|      0|            return -1;
  553|      0|        }
  554|       |
  555|      8|        APPEND_CHAR('=');
  ------------------
  |  |   51|      8|#define APPEND_CHAR(ch)  do { \
  |  |   52|      8|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 8]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
  556|      8|    }
  557|       |
  558|     14|    APPEND_EXPR(kw->value, PR_TEST);
  ------------------
  |  |   74|     14|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     14|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 14]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
  559|     14|    return 0;
  560|     14|}
ast_unparse.c:append_charp:
   39|   151k|{
   40|   151k|    return PyUnicodeWriter_WriteUTF8(writer, charp, -1);
   41|   151k|}
ast_unparse.c:append_ast_constant:
  822|   101k|{
  823|   101k|    if (PyTuple_CheckExact(constant)) {
  ------------------
  |  |   28|   101k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|   101k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   101k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   101k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 101k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  824|      0|        Py_ssize_t i, elem_count;
  825|       |
  826|      0|        elem_count = PyTuple_GET_SIZE(constant);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  827|      0|        APPEND_CHAR('(');
  ------------------
  |  |   51|      0|#define APPEND_CHAR(ch)  do { \
  |  |   52|      0|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  828|      0|        for (i = 0; i < elem_count; i++) {
  ------------------
  |  Branch (828:21): [True: 0, False: 0]
  ------------------
  829|      0|            APPEND_STR_IF(i > 0, ", ");
  ------------------
  |  |   63|      0|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|      0|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 0, False: 0]
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  830|      0|            if (append_ast_constant(writer, PyTuple_GET_ITEM(constant, i)) < 0) {
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (830:17): [True: 0, False: 0]
  |  Branch (830:45): [True: 0, False: 0]
  ------------------
  831|      0|                return -1;
  832|      0|            }
  833|      0|        }
  834|       |
  835|      0|        APPEND_STR_IF(elem_count == 1, ",");
  ------------------
  |  |   63|      0|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|      0|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 0, False: 0]
  |  |  |  Branch (64:23): [True: 0, False: 0]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  836|      0|        APPEND_CHAR_FINISH(')');
  ------------------
  |  |   43|      0|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|      0|        return append_char(writer, (ch)); \
  |  |   45|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  837|      0|    }
  838|   101k|    return append_repr(writer, constant);
  839|   101k|}
ast_unparse.c:append_repr:
   88|   105k|{
   89|   105k|    PyObject *repr = PyObject_Repr(obj);
   90|   105k|    if (!repr) {
  ------------------
  |  Branch (90:9): [True: 0, False: 105k]
  ------------------
   91|      0|        return -1;
   92|      0|    }
   93|       |
   94|   105k|    if ((PyFloat_CheckExact(obj) && isinf(PyFloat_AS_DOUBLE(obj))) ||
  ------------------
  |  |   17|   105k|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|   211k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   105k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   105k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 23.2k, False: 82.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (94:37): [True: 1.53k, False: 21.7k]
  ------------------
   95|   104k|        PyComplex_CheckExact(obj))
  ------------------
  |  |   14|   104k|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|   104k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   104k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   104k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 19.6k, False: 84.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|  21.1k|    {
   97|  21.1k|        _Py_DECLARE_STR(str_replace_inf, "1e309");  // evaluates to inf
   98|  21.1k|        PyObject *new_repr = PyUnicode_Replace(
   99|  21.1k|            repr,
  100|  21.1k|            &_Py_ID(inf),
  ------------------
  |  |  936|  21.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  21.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  21.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|  21.1k|            &_Py_STR(str_replace_inf),
  ------------------
  |  |  938|  21.1k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  21.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  21.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|  21.1k|            -1
  103|  21.1k|        );
  104|  21.1k|        Py_DECREF(repr);
  ------------------
  |  |  430|  21.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  105|  21.1k|        if (!new_repr) {
  ------------------
  |  Branch (105:13): [True: 0, False: 21.1k]
  ------------------
  106|      0|            return -1;
  107|      0|        }
  108|  21.1k|        repr = new_repr;
  109|  21.1k|    }
  110|       |
  111|   105k|    int ret = PyUnicodeWriter_WriteStr(writer, repr);
  112|   105k|    Py_DECREF(repr);
  ------------------
  |  |  430|   105k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   105k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   105k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|   105k|    return ret;
  114|   105k|}
ast_unparse.c:append_joinedstr:
  691|  7.31k|{
  692|  7.31k|    int result = -1;
  693|  7.31k|    PyObject *body = build_ftstring_body(e->v.JoinedStr.values, is_format_spec);
  694|  7.31k|    if (!body) {
  ------------------
  |  Branch (694:9): [True: 0, False: 7.31k]
  ------------------
  695|      0|        return -1;
  696|      0|    }
  697|       |
  698|  7.31k|    if (!is_format_spec) {
  ------------------
  |  Branch (698:9): [True: 3.83k, False: 3.48k]
  ------------------
  699|  3.83k|        if (-1 != append_charp(writer, "f") &&
  ------------------
  |  Branch (699:13): [True: 3.83k, False: 0]
  ------------------
  700|  3.83k|            -1 != append_repr(writer, body))
  ------------------
  |  Branch (700:13): [True: 3.83k, False: 0]
  ------------------
  701|  3.83k|        {
  702|  3.83k|            result = 0;
  703|  3.83k|        }
  704|  3.83k|    }
  705|  3.48k|    else {
  706|  3.48k|        result = PyUnicodeWriter_WriteStr(writer, body);
  707|  3.48k|    }
  708|  7.31k|    Py_DECREF(body);
  ------------------
  |  |  430|  7.31k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  709|  7.31k|    return result;
  710|  7.31k|}
ast_unparse.c:build_ftstring_body:
  651|  7.74k|{
  652|  7.74k|    PyUnicodeWriter *body_writer = PyUnicodeWriter_Create(256);
  653|  7.74k|    if (body_writer == NULL) {
  ------------------
  |  Branch (653:9): [True: 0, False: 7.74k]
  ------------------
  654|      0|        return NULL;
  655|      0|    }
  656|       |
  657|  7.74k|    Py_ssize_t value_count = asdl_seq_LEN(values);
  ------------------
  |  |   83|  7.74k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  15.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.74k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  658|  24.0k|    for (Py_ssize_t i = 0; i < value_count; ++i) {
  ------------------
  |  Branch (658:28): [True: 16.3k, False: 7.74k]
  ------------------
  659|  16.3k|        if (-1 == append_fstring_element(body_writer,
  ------------------
  |  Branch (659:13): [True: 0, False: 16.3k]
  ------------------
  660|  16.3k|                                         (expr_ty)asdl_seq_GET(values, i),
  ------------------
  |  |   82|  16.3k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  16.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  661|  16.3k|                                         is_format_spec
  662|  16.3k|                                         )) {
  663|      0|            PyUnicodeWriter_Discard(body_writer);
  664|      0|            return NULL;
  665|      0|        }
  666|  16.3k|    }
  667|       |
  668|  7.74k|    return PyUnicodeWriter_Finish(body_writer);
  669|  7.74k|}
ast_unparse.c:append_fstring_element:
  628|  19.8k|{
  629|  19.8k|    switch (e->kind) {
  630|  10.4k|    case Constant_kind:
  ------------------
  |  Branch (630:5): [True: 10.4k, False: 9.31k]
  ------------------
  631|  10.4k|        return append_fstring_unicode(writer, e->v.Constant.value);
  632|  3.48k|    case JoinedStr_kind:
  ------------------
  |  Branch (632:5): [True: 3.48k, False: 16.3k]
  ------------------
  633|  3.48k|        return append_joinedstr(writer, e, is_format_spec);
  634|      0|    case TemplateStr_kind:
  ------------------
  |  Branch (634:5): [True: 0, False: 19.8k]
  ------------------
  635|      0|        return append_templatestr(writer, e);
  636|  4.20k|    case FormattedValue_kind:
  ------------------
  |  Branch (636:5): [True: 4.20k, False: 15.6k]
  ------------------
  637|  4.20k|        return append_formattedvalue(writer, e);
  638|  1.62k|    case Interpolation_kind:
  ------------------
  |  Branch (638:5): [True: 1.62k, False: 18.1k]
  ------------------
  639|  1.62k|        return append_interpolation(writer, e);
  640|      0|    default:
  ------------------
  |  Branch (640:5): [True: 0, False: 19.8k]
  ------------------
  641|      0|        PyErr_SetString(PyExc_SystemError,
  642|      0|                        "unknown expression kind inside f-string or t-string");
  643|      0|        return -1;
  644|  19.8k|    }
  645|  19.8k|}
ast_unparse.c:append_fstring_unicode:
  615|  10.4k|{
  616|  10.4k|    PyObject *escaped;
  617|  10.4k|    int result = -1;
  618|  10.4k|    escaped = escape_braces(unicode);
  619|  10.4k|    if (escaped) {
  ------------------
  |  Branch (619:9): [True: 10.4k, False: 0]
  ------------------
  620|  10.4k|        result = PyUnicodeWriter_WriteStr(writer, escaped);
  621|  10.4k|        Py_DECREF(escaped);
  ------------------
  |  |  430|  10.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|  10.4k|    }
  623|  10.4k|    return result;
  624|  10.4k|}
ast_unparse.c:escape_braces:
  599|  10.4k|{
  600|  10.4k|    PyObject *temp;
  601|  10.4k|    PyObject *result;
  602|  10.4k|    temp = PyUnicode_Replace(orig, _Py_LATIN1_CHR('{'),
  ------------------
  |  |  940|  10.4k|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 10.4k, Folded]
  |  |  ------------------
  |  |  941|  10.4k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|  10.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  10.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|  10.4k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|  10.4k|                             &_Py_STR(dbl_open_br), -1);
  ------------------
  |  |  938|  10.4k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  10.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  10.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|  10.4k|    if (!temp) {
  ------------------
  |  Branch (604:9): [True: 0, False: 10.4k]
  ------------------
  605|      0|        return NULL;
  606|      0|    }
  607|  10.4k|    result = PyUnicode_Replace(temp, _Py_LATIN1_CHR('}'),
  ------------------
  |  |  940|  10.4k|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 10.4k, Folded]
  |  |  ------------------
  |  |  941|  10.4k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|  10.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  10.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|  10.4k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|  10.4k|                               &_Py_STR(dbl_close_br), -1);
  ------------------
  |  |  938|  10.4k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  10.4k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  10.4k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|  10.4k|    Py_DECREF(temp);
  ------------------
  |  |  430|  10.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|  10.4k|    return result;
  611|  10.4k|}
ast_unparse.c:append_templatestr:
  673|    425|{
  674|    425|    int result = -1;
  675|    425|    PyObject *body = build_ftstring_body(e->v.TemplateStr.values, false);
  676|    425|    if (!body) {
  ------------------
  |  Branch (676:9): [True: 0, False: 425]
  ------------------
  677|      0|        return -1;
  678|      0|    }
  679|       |
  680|    425|    if (-1 != append_charp(writer, "t") &&
  ------------------
  |  Branch (680:9): [True: 425, False: 0]
  ------------------
  681|    425|        -1 != append_repr(writer, body))
  ------------------
  |  Branch (681:9): [True: 425, False: 0]
  ------------------
  682|    425|    {
  683|    425|        result = 0;
  684|    425|    }
  685|    425|    Py_DECREF(body);
  ------------------
  |  |  430|    425|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    425|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    425|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  686|    425|    return result;
  687|    425|}
ast_unparse.c:append_formattedvalue:
  804|  4.20k|{
  805|  4.20k|    if (-1 == append_interpolation_value(writer, e->v.FormattedValue.value)) {
  ------------------
  |  Branch (805:9): [True: 0, False: 4.20k]
  ------------------
  806|      0|        return -1;
  807|      0|    }
  808|       |
  809|  4.20k|    if (-1 == append_interpolation_conversion(writer, e->v.FormattedValue.conversion)) {
  ------------------
  |  Branch (809:9): [True: 0, False: 4.20k]
  ------------------
  810|      0|        return -1;
  811|      0|    }
  812|       |
  813|  4.20k|    if (-1 == append_interpolation_format_spec(writer, e->v.FormattedValue.format_spec)) {
  ------------------
  |  Branch (813:9): [True: 0, False: 4.20k]
  ------------------
  814|      0|        return -1;
  815|      0|    }
  816|       |
  817|  4.20k|    APPEND_CHAR_FINISH('}');
  ------------------
  |  |   43|  4.20k|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|  4.20k|        return append_char(writer, (ch)); \
  |  |   45|  4.20k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  818|  4.20k|}
ast_unparse.c:append_interpolation_value:
  732|  4.20k|{
  733|       |    /* Grammar allows PR_TUPLE, but use >PR_TEST for adding parenthesis
  734|       |       around a lambda with ':' */
  735|  4.20k|    PyObject *temp_fv_str = expr_as_unicode(e, PR_TEST + 1);
  736|  4.20k|    if (!temp_fv_str) {
  ------------------
  |  Branch (736:9): [True: 0, False: 4.20k]
  ------------------
  737|      0|        return -1;
  738|      0|    }
  739|  4.20k|    int result = append_interpolation_str(writer, temp_fv_str);
  740|  4.20k|    Py_DECREF(temp_fv_str);
  ------------------
  |  |  430|  4.20k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|  4.20k|    return result;
  742|  4.20k|}
ast_unparse.c:append_interpolation_str:
  714|  5.82k|{
  715|  5.82k|    const char *outer_brace = "{";
  716|  5.82k|    if (PyUnicode_Find(str, _Py_LATIN1_CHR('{'), 0, 1, 1) == 0) {
  ------------------
  |  |  940|  5.82k|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 5.82k, Folded]
  |  |  ------------------
  |  |  941|  5.82k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|  5.82k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  5.82k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|  5.82k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (716:9): [True: 131, False: 5.69k]
  ------------------
  717|       |        /* Expression starts with a brace, split it with a space from the outer
  718|       |           one. */
  719|    131|        outer_brace = "{ ";
  720|    131|    }
  721|  5.82k|    if (-1 == append_charp(writer, outer_brace)) {
  ------------------
  |  Branch (721:9): [True: 0, False: 5.82k]
  ------------------
  722|      0|        return -1;
  723|      0|    }
  724|  5.82k|    if (-1 == PyUnicodeWriter_WriteStr(writer, str)) {
  ------------------
  |  Branch (724:9): [True: 0, False: 5.82k]
  ------------------
  725|      0|        return -1;
  726|      0|    }
  727|  5.82k|    return 0;
  728|  5.82k|}
ast_unparse.c:append_interpolation_conversion:
  746|  5.82k|{
  747|  5.82k|    if (conversion < 0) {
  ------------------
  |  Branch (747:9): [True: 4.05k, False: 1.77k]
  ------------------
  748|  4.05k|        return 0;
  749|  4.05k|    }
  750|       |
  751|  1.77k|    const char *conversion_str;
  752|  1.77k|    switch (conversion) {
  753|    904|    case 'a':
  ------------------
  |  Branch (753:5): [True: 904, False: 869]
  ------------------
  754|    904|        conversion_str = "!a";
  755|    904|        break;
  756|    610|    case 'r':
  ------------------
  |  Branch (756:5): [True: 610, False: 1.16k]
  ------------------
  757|    610|        conversion_str = "!r";
  758|    610|        break;
  759|    259|    case 's':
  ------------------
  |  Branch (759:5): [True: 259, False: 1.51k]
  ------------------
  760|    259|        conversion_str = "!s";
  761|    259|        break;
  762|      0|    default:
  ------------------
  |  Branch (762:5): [True: 0, False: 1.77k]
  ------------------
  763|      0|        PyErr_SetString(PyExc_SystemError,
  764|      0|                        "unknown f-value conversion kind");
  765|      0|        return -1;
  766|  1.77k|    }
  767|  1.77k|    APPEND_STR(conversion_str);
  ------------------
  |  |   57|  1.77k|#define APPEND_STR(str)  do { \
  |  |   58|  1.77k|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 1.77k]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|  1.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 1.77k]
  |  |  ------------------
  ------------------
  768|  1.77k|    return 0;
  769|  1.77k|}
ast_unparse.c:append_interpolation_format_spec:
  773|  5.82k|{
  774|  5.82k|    if (e) {
  ------------------
  |  Branch (774:9): [True: 3.48k, False: 2.34k]
  ------------------
  775|  3.48k|        if (-1 == PyUnicodeWriter_WriteChar(writer, ':') ||
  ------------------
  |  Branch (775:13): [True: 0, False: 3.48k]
  ------------------
  776|  3.48k|            -1 == append_fstring_element(writer, e, true))
  ------------------
  |  Branch (776:13): [True: 0, False: 3.48k]
  ------------------
  777|      0|        {
  778|      0|            return -1;
  779|      0|        }
  780|  3.48k|    }
  781|  5.82k|    return 0;
  782|  5.82k|}
ast_unparse.c:append_interpolation:
  786|  1.62k|{
  787|  1.62k|    if (-1 == append_interpolation_str(writer, e->v.Interpolation.str)) {
  ------------------
  |  Branch (787:9): [True: 0, False: 1.62k]
  ------------------
  788|      0|        return -1;
  789|      0|    }
  790|       |
  791|  1.62k|    if (-1 == append_interpolation_conversion(writer, e->v.Interpolation.conversion)) {
  ------------------
  |  Branch (791:9): [True: 0, False: 1.62k]
  ------------------
  792|      0|        return -1;
  793|      0|    }
  794|       |
  795|  1.62k|    if (-1 == append_interpolation_format_spec(writer, e->v.Interpolation.format_spec)) {
  ------------------
  |  Branch (795:9): [True: 0, False: 1.62k]
  ------------------
  796|      0|        return -1;
  797|      0|    }
  798|       |
  799|  1.62k|    APPEND_STR_FINISH("}");
  ------------------
  |  |   47|  1.62k|#define APPEND_STR_FINISH(str)  do { \
  |  |   48|  1.62k|        return append_charp(writer, (str)); \
  |  |   49|  1.62k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (49:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  800|  1.62k|}
ast_unparse.c:append_ast_attribute:
  843|    179|{
  844|    179|    const char *period;
  845|    179|    expr_ty v = e->v.Attribute.value;
  846|    179|    APPEND_EXPR(v, PR_ATOM);
  ------------------
  |  |   74|    179|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    179|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 179]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    179|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 179]
  |  |  ------------------
  ------------------
  847|       |
  848|       |    /* Special case: integers require a space for attribute access to be
  849|       |       unambiguous. */
  850|    179|    if (v->kind == Constant_kind && PyLong_CheckExact(v->v.Constant.value)) {
  ------------------
  |  |   14|     32|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|     32|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 11, False: 21]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (850:9): [True: 32, False: 147]
  ------------------
  851|     11|        period = " .";
  852|     11|    }
  853|    168|    else {
  854|    168|        period = ".";
  855|    168|    }
  856|    179|    APPEND_STR(period);
  ------------------
  |  |   57|    179|#define APPEND_STR(str)  do { \
  |  |   58|    179|        if (-1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (58:13): [True: 0, False: 179]
  |  |  ------------------
  |  |   59|      0|            return -1; \
  |  |   60|      0|        } \
  |  |   61|    179|    } while (0)
  |  |  ------------------
  |  |  |  Branch (61:14): [Folded, False: 179]
  |  |  ------------------
  ------------------
  857|       |
  858|    179|    return PyUnicodeWriter_WriteStr(writer, e->v.Attribute.attr);
  859|    179|}
ast_unparse.c:append_ast_subscript:
  883|    302|{
  884|    302|    APPEND_EXPR(e->v.Subscript.value, PR_ATOM);
  ------------------
  |  |   74|    302|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    302|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 302]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    302|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 302]
  |  |  ------------------
  ------------------
  885|    302|    APPEND_CHAR('[');
  ------------------
  |  |   51|    302|#define APPEND_CHAR(ch)  do { \
  |  |   52|    302|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 302]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|    302|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 302]
  |  |  ------------------
  ------------------
  886|    302|    APPEND_EXPR(e->v.Subscript.slice, PR_TUPLE);
  ------------------
  |  |   74|    302|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    302|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 302]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    302|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 302]
  |  |  ------------------
  ------------------
  887|    302|    APPEND_CHAR_FINISH(']');
  ------------------
  |  |   43|    302|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|    302|        return append_char(writer, (ch)); \
  |  |   45|    302|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  888|    302|}
ast_unparse.c:append_ast_starred:
  892|    264|{
  893|    264|    APPEND_CHAR('*');
  ------------------
  |  |   51|    264|#define APPEND_CHAR(ch)  do { \
  |  |   52|    264|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 264]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|    264|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 264]
  |  |  ------------------
  ------------------
  894|    264|    APPEND_EXPR(e->v.Starred.value, PR_EXPR);
  ------------------
  |  |   74|    264|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    264|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 264]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    264|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 264]
  |  |  ------------------
  ------------------
  895|    264|    return 0;
  896|    264|}
ast_unparse.c:append_ast_slice:
  863|    338|{
  864|    338|    if (e->v.Slice.lower) {
  ------------------
  |  Branch (864:9): [True: 57, False: 281]
  ------------------
  865|     57|        APPEND_EXPR(e->v.Slice.lower, PR_TEST);
  ------------------
  |  |   74|     57|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     57|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 57]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     57|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 57]
  |  |  ------------------
  ------------------
  866|     57|    }
  867|       |
  868|    338|    APPEND_CHAR(':');
  ------------------
  |  |   51|    338|#define APPEND_CHAR(ch)  do { \
  |  |   52|    338|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 338]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|    338|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 338]
  |  |  ------------------
  ------------------
  869|       |
  870|    338|    if (e->v.Slice.upper) {
  ------------------
  |  Branch (870:9): [True: 260, False: 78]
  ------------------
  871|    260|        APPEND_EXPR(e->v.Slice.upper, PR_TEST);
  ------------------
  |  |   74|    260|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    260|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 260]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    260|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 260]
  |  |  ------------------
  ------------------
  872|    260|    }
  873|       |
  874|    338|    if (e->v.Slice.step) {
  ------------------
  |  Branch (874:9): [True: 72, False: 266]
  ------------------
  875|     72|        APPEND_CHAR(':');
  ------------------
  |  |   51|     72|#define APPEND_CHAR(ch)  do { \
  |  |   52|     72|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 72]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|     72|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 72]
  |  |  ------------------
  ------------------
  876|     72|        APPEND_EXPR(e->v.Slice.step, PR_TEST);
  ------------------
  |  |   74|     72|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     72|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 72]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     72|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 72]
  |  |  ------------------
  ------------------
  877|     72|    }
  878|    338|    return 0;
  879|    338|}
ast_unparse.c:append_ast_list:
  369|     26|{
  370|     26|    Py_ssize_t i, elem_count;
  371|       |
  372|     26|    APPEND_CHAR('[');
  ------------------
  |  |   51|     26|#define APPEND_CHAR(ch)  do { \
  |  |   52|     26|        if (-1 == append_char(writer, (ch))) { \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 26]
  |  |  ------------------
  |  |   53|      0|            return -1; \
  |  |   54|      0|        } \
  |  |   55|     26|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 26]
  |  |  ------------------
  ------------------
  373|     26|    elem_count = asdl_seq_LEN(e->v.List.elts);
  ------------------
  |  |   83|     26|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     52|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|    122|    for (i = 0; i < elem_count; i++) {
  ------------------
  |  Branch (374:17): [True: 96, False: 26]
  ------------------
  375|     96|        APPEND_STR_IF(i > 0, ", ");
  ------------------
  |  |   63|     96|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|     96|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 70, False: 26]
  |  |  |  Branch (64:23): [True: 0, False: 70]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|     96|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 96]
  |  |  ------------------
  ------------------
  376|     96|        APPEND_EXPR((expr_ty)asdl_seq_GET(e->v.List.elts, i), PR_TEST);
  ------------------
  |  |   74|     96|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|     96|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 96]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|     96|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 96]
  |  |  ------------------
  ------------------
  377|     96|    }
  378|       |
  379|     26|    APPEND_CHAR_FINISH(']');
  ------------------
  |  |   43|     26|#define APPEND_CHAR_FINISH(ch)  do { \
  |  |   44|     26|        return append_char(writer, (ch)); \
  |  |   45|     26|    } while (0)
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  380|     26|}
ast_unparse.c:append_ast_tuple:
  384|    720|{
  385|    720|    Py_ssize_t i, elem_count;
  386|       |
  387|    720|    elem_count = asdl_seq_LEN(e->v.Tuple.elts);
  ------------------
  |  |   83|    720|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.44k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 239, False: 481]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|       |
  389|    720|    if (elem_count == 0) {
  ------------------
  |  Branch (389:9): [True: 239, False: 481]
  ------------------
  390|    239|        APPEND_STR_FINISH("()");
  ------------------
  |  |   47|    239|#define APPEND_STR_FINISH(str)  do { \
  |  |   48|    239|        return append_charp(writer, (str)); \
  |  |   49|    239|    } while (0)
  |  |  ------------------
  |  |  |  Branch (49:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  391|    239|    }
  392|       |
  393|    481|    APPEND_STR_IF(level > PR_TUPLE, "(");
  ------------------
  |  |   63|    481|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    481|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 424, False: 57]
  |  |  |  Branch (64:23): [True: 0, False: 424]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    481|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 481]
  |  |  ------------------
  ------------------
  394|       |
  395|  1.36k|    for (i = 0; i < elem_count; i++) {
  ------------------
  |  Branch (395:17): [True: 883, False: 481]
  ------------------
  396|    883|        APPEND_STR_IF(i > 0, ", ");
  ------------------
  |  |   63|    883|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    883|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 402, False: 481]
  |  |  |  Branch (64:23): [True: 0, False: 402]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    883|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 883]
  |  |  ------------------
  ------------------
  397|    883|        APPEND_EXPR((expr_ty)asdl_seq_GET(e->v.Tuple.elts, i), PR_TEST);
  ------------------
  |  |   74|    883|#define APPEND_EXPR(expr, pr)  do { \
  |  |   75|    883|        if (-1 == append_ast_expr(writer, (expr), (pr))) { \
  |  |  ------------------
  |  |  |  Branch (75:13): [True: 0, False: 883]
  |  |  ------------------
  |  |   76|      0|            return -1; \
  |  |   77|      0|        } \
  |  |   78|    883|    } while (0)
  |  |  ------------------
  |  |  |  Branch (78:14): [Folded, False: 883]
  |  |  ------------------
  ------------------
  398|    883|    }
  399|       |
  400|    481|    APPEND_STR_IF(elem_count == 1, ",");
  ------------------
  |  |   63|    481|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    481|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 269, False: 212]
  |  |  |  Branch (64:23): [True: 0, False: 269]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    481|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 481]
  |  |  ------------------
  ------------------
  401|    481|    APPEND_STR_IF(level > PR_TUPLE, ")");
  ------------------
  |  |   63|    481|#define APPEND_STR_IF(cond, str)  do { \
  |  |   64|    481|        if ((cond) && -1 == append_charp(writer, (str))) { \
  |  |  ------------------
  |  |  |  Branch (64:13): [True: 424, False: 57]
  |  |  |  Branch (64:23): [True: 0, False: 424]
  |  |  ------------------
  |  |   65|      0|            return -1; \
  |  |   66|      0|        } \
  |  |   67|    481|    } while (0)
  |  |  ------------------
  |  |  |  Branch (67:14): [Folded, False: 481]
  |  |  ------------------
  ------------------
  402|    481|    return 0;
  403|    481|}

_PyBuiltin_InitPythonFunctions:
 3504|      2|{
 3505|      2|    if (PyImport_ImportFrozenModule("_pybuiltins") <= 0) {
  ------------------
  |  Branch (3505:9): [True: 0, False: 2]
  ------------------
 3506|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (3506:13): [True: 0, False: 0]
  ------------------
 3507|      0|            PyErr_SetString(PyExc_ImportError,
 3508|      0|                            "frozen module _pybuiltins not found");
 3509|      0|        }
 3510|      0|        return -1;
 3511|      0|    }
 3512|      2|    PyObject *mod = PyImport_AddModuleRef("_pybuiltins");
 3513|      2|    if (mod == NULL) {
  ------------------
  |  Branch (3513:9): [True: 0, False: 2]
  ------------------
 3514|      0|        return -1;
 3515|      0|    }
 3516|       |
 3517|      2|    int rc = -1;
 3518|      2|    PyObject *all = PyObject_GetAttr(mod, &_Py_ID(__all__));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3519|      2|    if (all == NULL) {
  ------------------
  |  Branch (3519:9): [True: 0, False: 2]
  ------------------
 3520|      0|        goto done;
 3521|      0|    }
 3522|      2|    Py_ssize_t n = PyList_Size(all);
 3523|      2|    if (n < 0) {
  ------------------
  |  Branch (3523:9): [True: 0, False: 2]
  ------------------
 3524|      0|        goto done;
 3525|      0|    }
 3526|      4|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3526:28): [True: 2, False: 2]
  ------------------
 3527|      2|        PyObject *name = PyList_GET_ITEM(all, i);
  ------------------
  |  |   40|      2|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      2|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3527:26): [True: 2, False: 0]
  ------------------
 3528|      0|        PyObject *func = PyObject_GetAttr(mod, name);
 3529|      2|        if (func == NULL) {
  ------------------
  |  Branch (3529:13): [True: 0, False: 2]
  ------------------
 3530|      0|            goto done;
 3531|      0|        }
 3532|      2|        int r = PyDict_SetItem(dict, name, func);
 3533|      2|        Py_DECREF(func);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3534|      2|        if (r < 0) {
  ------------------
  |  Branch (3534:13): [True: 0, False: 2]
  ------------------
 3535|      0|            goto done;
 3536|      0|        }
 3537|      2|    }
 3538|      2|    rc = 0;
 3539|       |
 3540|      2|done:
 3541|      2|    Py_XDECREF(all);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3542|      2|    Py_DECREF(mod);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3543|      2|    return rc;
 3544|      2|}
_PyBuiltin_Init:
 3548|      2|{
 3549|      2|    PyObject *mod, *dict, *debug;
 3550|       |
 3551|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 3552|       |
 3553|      2|    mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
  ------------------
  |  |   59|      2|#define PYTHON_API_VERSION 1013
  ------------------
 3554|      2|    if (mod == NULL)
  ------------------
  |  Branch (3554:9): [True: 0, False: 2]
  ------------------
 3555|      0|        return NULL;
 3556|       |#ifdef Py_GIL_DISABLED
 3557|       |    PyUnstable_Module_SetGIL(mod, Py_MOD_GIL_NOT_USED);
 3558|       |#endif
 3559|      2|    dict = PyModule_GetDict(mod);
 3560|       |
 3561|       |#ifdef Py_TRACE_REFS
 3562|       |    /* "builtins" exposes a number of statically allocated objects
 3563|       |     * that, before this code was added in 2.3, never showed up in
 3564|       |     * the list of "all objects" maintained by Py_TRACE_REFS.  As a
 3565|       |     * result, programs leaking references to None and False (etc)
 3566|       |     * couldn't be diagnosed by examining sys.getobjects(0).
 3567|       |     */
 3568|       |#define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT))
 3569|       |#else
 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
 3571|      2|#endif
 3572|       |
 3573|      2|#define SETBUILTIN(NAME, OBJECT) \
 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
 3575|      2|        return NULL;                                                    \
 3576|      2|    ADD_TO_ALL(OBJECT)
 3577|       |
 3578|      2|    SETBUILTIN("None",                  Py_None);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3579|      2|    SETBUILTIN("Ellipsis",              Py_Ellipsis);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3580|      2|    SETBUILTIN("NotImplemented",        Py_NotImplemented);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3581|      2|    SETBUILTIN("False",                 Py_False);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3582|      2|    SETBUILTIN("True",                  Py_True);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3583|      2|    SETBUILTIN("bool",                  &PyBool_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3584|      2|    SETBUILTIN("memoryview",            &PyMemoryView_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3585|      2|    SETBUILTIN("bytearray",             &PyByteArray_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3586|      2|    SETBUILTIN("bytes",                 &PyBytes_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3587|      2|    SETBUILTIN("classmethod",           &PyClassMethod_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3588|      2|    SETBUILTIN("complex",               &PyComplex_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3589|      2|    SETBUILTIN("dict",                  &PyDict_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3590|      2|    SETBUILTIN("enumerate",             &PyEnum_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3591|      2|    SETBUILTIN("filter",                &PyFilter_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3592|      2|    SETBUILTIN("float",                 &PyFloat_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3593|      2|    SETBUILTIN("frozendict",            &PyFrozenDict_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3594|      2|    SETBUILTIN("frozenset",             &PyFrozenSet_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3595|      2|    SETBUILTIN("property",              &PyProperty_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3596|      2|    SETBUILTIN("int",                   &PyLong_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3597|      2|    SETBUILTIN("list",                  &PyList_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3598|      2|    SETBUILTIN("map",                   &PyMap_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3599|      2|    SETBUILTIN("object",                &PyBaseObject_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3600|      2|    SETBUILTIN("range",                 &PyRange_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3601|      2|    SETBUILTIN("reversed",              &PyReversed_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3602|      2|    SETBUILTIN("sentinel",              &PySentinel_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3603|      2|    SETBUILTIN("set",                   &PySet_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3604|      2|    SETBUILTIN("slice",                 &PySlice_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3605|      2|    SETBUILTIN("staticmethod",          &PyStaticMethod_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3606|      2|    SETBUILTIN("str",                   &PyUnicode_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3607|      2|    SETBUILTIN("super",                 &PySuper_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3608|      2|    SETBUILTIN("tuple",                 &PyTuple_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3609|      2|    SETBUILTIN("type",                  &PyType_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3610|      2|    SETBUILTIN("zip",                   &PyZip_Type);
  ------------------
  |  | 3574|      2|    if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
  |  |  ------------------
  |  |  |  Branch (3574:9): [True: 0, False: 2]
  |  |  ------------------
  |  | 3575|      2|        return NULL;                                                    \
  |  | 3576|      2|    ADD_TO_ALL(OBJECT)
  |  |  ------------------
  |  |  |  | 3570|      2|#define ADD_TO_ALL(OBJECT) (void)0
  |  |  ------------------
  ------------------
 3611|      2|    debug = PyBool_FromLong(config->optimization_level == 0);
 3612|      2|    if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
  ------------------
  |  Branch (3612:9): [True: 0, False: 2]
  ------------------
 3613|      0|        Py_DECREF(debug);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3614|      0|        return NULL;
 3615|      0|    }
 3616|      2|    Py_DECREF(debug);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3617|       |
 3618|      2|    return mod;
 3619|      2|#undef ADD_TO_ALL
 3620|      2|#undef SETBUILTIN
 3621|      2|}
bltinmodule.c:map_dealloc:
 1554|      7|{
 1555|      7|    mapobject *lz = _mapobject_CAST(self);
  ------------------
  |  | 1448|      7|#define _mapobject_CAST(op)     ((mapobject *)(op))
  ------------------
 1556|      7|    PyObject_GC_UnTrack(lz);
 1557|      7|    Py_XDECREF(lz->iters);
  ------------------
  |  |  524|      7|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1558|      7|    Py_XDECREF(lz->func);
  ------------------
  |  |  524|      7|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1559|      7|    Py_TYPE(lz)->tp_free(lz);
  ------------------
  |  |  213|      7|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1560|      7|}
bltinmodule.c:map_next:
 1573|     79|{
 1574|     79|    mapobject *lz = _mapobject_CAST(self);
  ------------------
  |  | 1448|     79|#define _mapobject_CAST(op)     ((mapobject *)(op))
  ------------------
 1575|     79|    Py_ssize_t i;
 1576|     79|    PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
 1577|     79|    PyObject **stack;
 1578|     79|    PyObject *result = NULL;
 1579|     79|    PyThreadState *tstate = _PyThreadState_GET();
 1580|       |
 1581|     79|    const Py_ssize_t niters = PyTuple_GET_SIZE(lz->iters);
  ------------------
  |  |   27|     79|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1582|     79|    if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
  ------------------
  |  |  221|     79|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (1582:9): [True: 79, False: 0]
  ------------------
 1583|     79|        stack = small_stack;
 1584|     79|    }
 1585|      0|    else {
 1586|      0|        stack = PyMem_Malloc(niters * sizeof(stack[0]));
 1587|      0|        if (stack == NULL) {
  ------------------
  |  Branch (1587:13): [True: 0, False: 0]
  ------------------
 1588|      0|            _PyErr_NoMemory(tstate);
 1589|      0|            return NULL;
 1590|      0|        }
 1591|      0|    }
 1592|       |
 1593|     79|    Py_ssize_t nargs = 0;
 1594|    151|    for (i = 0; i < niters; i++) {
  ------------------
  |  Branch (1594:17): [True: 79, False: 72]
  ------------------
 1595|     79|        PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
  ------------------
  |  |   29|     79|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     79|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1595:24): [True: 79, False: 0]
  ------------------
 1596|     79|        PyObject *val = Py_TYPE(it)->tp_iternext(it);
  ------------------
  |  |  213|     79|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     79|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     79|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1597|     79|        if (val == NULL) {
  ------------------
  |  Branch (1597:13): [True: 7, False: 72]
  ------------------
 1598|      7|            if (lz->strict) {
  ------------------
  |  Branch (1598:17): [True: 0, False: 7]
  ------------------
 1599|      0|                goto check;
 1600|      0|            }
 1601|      7|            goto exit_no_result;
 1602|      7|        }
 1603|     72|        stack[i] = val;
 1604|     72|        nargs++;
 1605|     72|    }
 1606|       |
 1607|     72|    result = _PyObject_VectorcallTstate(tstate, lz->func, stack, nargs, NULL);
 1608|     72|    goto exit;
 1609|       |
 1610|      0|check:
 1611|      0|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1611:9): [True: 0, False: 0]
  ------------------
 1612|      0|        if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
  ------------------
  |  Branch (1612:13): [True: 0, False: 0]
  ------------------
 1613|       |            // next() on argument i raised an exception (not StopIteration)
 1614|      0|            goto exit_no_result;
 1615|      0|        }
 1616|      0|        PyErr_Clear();
 1617|      0|    }
 1618|      0|    if (i) {
  ------------------
  |  Branch (1618:9): [True: 0, False: 0]
  ------------------
 1619|       |        // ValueError: map() argument 2 is shorter than argument 1
 1620|       |        // ValueError: map() argument 3 is shorter than arguments 1-2
 1621|      0|        const char* plural = i == 1 ? " " : "s 1-";
  ------------------
  |  Branch (1621:30): [True: 0, False: 0]
  ------------------
 1622|      0|        PyErr_Format(PyExc_ValueError,
 1623|      0|                     "map() argument %zd is shorter than argument%s%zd",
 1624|      0|                     i + 1, plural, i);
 1625|      0|        goto exit_no_result;
 1626|      0|    }
 1627|      0|    for (i = 1; i < niters; i++) {
  ------------------
  |  Branch (1627:17): [True: 0, False: 0]
  ------------------
 1628|      0|        PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1628:24): [True: 0, False: 0]
  ------------------
 1629|      0|        PyObject *val = (*Py_TYPE(it)->tp_iternext)(it);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1630|      0|        if (val) {
  ------------------
  |  Branch (1630:13): [True: 0, False: 0]
  ------------------
 1631|      0|            Py_DECREF(val);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1632|      0|            const char* plural = i == 1 ? " " : "s 1-";
  ------------------
  |  Branch (1632:34): [True: 0, False: 0]
  ------------------
 1633|      0|            PyErr_Format(PyExc_ValueError,
 1634|      0|                         "map() argument %zd is longer than argument%s%zd",
 1635|      0|                         i + 1, plural, i);
 1636|      0|            goto exit_no_result;
 1637|      0|        }
 1638|      0|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1638:13): [True: 0, False: 0]
  ------------------
 1639|      0|            if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
  ------------------
  |  Branch (1639:17): [True: 0, False: 0]
  ------------------
 1640|       |                // next() on argument i raised an exception (not StopIteration)
 1641|      0|                goto exit_no_result;
 1642|      0|            }
 1643|      0|            PyErr_Clear();
 1644|      0|        }
 1645|       |        // Argument i is exhausted. So far so good...
 1646|      0|    }
 1647|       |    // All arguments are exhausted. Success!
 1648|       |
 1649|      7|exit_no_result:
 1650|      7|    assert(result == NULL);
  ------------------
  |  Branch (1650:5): [True: 7, False: 0]
  ------------------
 1651|       |
 1652|     79|exit:
 1653|    151|    for (i = 0; i < nargs; i++) {
  ------------------
  |  Branch (1653:17): [True: 72, False: 79]
  ------------------
 1654|     72|        Py_DECREF(stack[i]);
  ------------------
  |  |  430|     72|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1655|     72|    }
 1656|     79|    if (stack != small_stack) {
  ------------------
  |  Branch (1656:9): [True: 0, False: 79]
  ------------------
 1657|      0|        PyMem_Free(stack);
 1658|      0|    }
 1659|     79|    return result;
 1660|      7|}
bltinmodule.c:map_vectorcall:
 1510|      7|{
 1511|      7|    PyTypeObject *tp = _PyType_CAST(type);
  ------------------
  |  |  770|      7|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1511:24): [True: 7, False: 0]
  ------------------
 1512|       |
 1513|      7|    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
  ------------------
  |  |   37|      7|#define PyVectorcall_NARGS(n) _PyVectorcall_NARGS(n)
  ------------------
 1514|      7|    if (kwnames != NULL && PyTuple_GET_SIZE(kwnames) != 0) {
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1514:9): [True: 0, False: 7]
  |  Branch (1514:28): [True: 0, False: 0]
  ------------------
 1515|       |        // Fallback to map_new()
 1516|      0|        PyThreadState *tstate = _PyThreadState_GET();
 1517|      0|        return _PyObject_MakeTpCall(tstate, type, args, nargs, kwnames);
 1518|      0|    }
 1519|       |
 1520|      7|    if (nargs < 2) {
  ------------------
  |  Branch (1520:9): [True: 0, False: 7]
  ------------------
 1521|      0|        PyErr_SetString(PyExc_TypeError,
 1522|      0|           "map() must have at least two arguments.");
 1523|      0|        return NULL;
 1524|      0|    }
 1525|       |
 1526|      7|    PyObject *iters = PyTuple_New(nargs-1);
 1527|      7|    if (iters == NULL) {
  ------------------
  |  Branch (1527:9): [True: 0, False: 7]
  ------------------
 1528|      0|        return NULL;
 1529|      0|    }
 1530|       |
 1531|     14|    for (int i=1; i<nargs; i++) {
  ------------------
  |  Branch (1531:19): [True: 7, False: 7]
  ------------------
 1532|      7|        PyObject *it = PyObject_GetIter(args[i]);
 1533|      7|        if (it == NULL) {
  ------------------
  |  Branch (1533:13): [True: 0, False: 7]
  ------------------
 1534|      0|            Py_DECREF(iters);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1535|      0|            return NULL;
 1536|      0|        }
 1537|      7|        PyTuple_SET_ITEM(iters, i-1, it);
  ------------------
  |  |   40|      7|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1538|      7|    }
 1539|       |
 1540|      7|    mapobject *lz = (mapobject *)tp->tp_alloc(tp, 0);
 1541|      7|    if (lz == NULL) {
  ------------------
  |  Branch (1541:9): [True: 0, False: 7]
  ------------------
 1542|      0|        Py_DECREF(iters);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1543|      0|        return NULL;
 1544|      0|    }
 1545|      7|    lz->iters = iters;
 1546|      7|    lz->func = Py_NewRef(args[0]);
  ------------------
  |  |  550|      7|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1547|      7|    lz->strict = 0;
 1548|       |
 1549|      7|    return (PyObject *)lz;
 1550|      7|}
bltinmodule.c:zip_dealloc:
 3224|      3|{
 3225|      3|    zipobject *lz = _zipobject_CAST(self);
  ------------------
  |  | 3153|      3|#define _zipobject_CAST(op)     ((zipobject *)(op))
  ------------------
 3226|      3|    PyObject_GC_UnTrack(lz);
 3227|      3|    Py_XDECREF(lz->ittuple);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3228|      3|    Py_XDECREF(lz->result);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3229|      3|    Py_TYPE(lz)->tp_free(lz);
  ------------------
  |  |  213|      3|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3230|      3|}
bltinmodule.c:zip_next:
 3243|     69|{
 3244|     69|    zipobject *lz = _zipobject_CAST(self);
  ------------------
  |  | 3153|     69|#define _zipobject_CAST(op)     ((zipobject *)(op))
  ------------------
 3245|       |
 3246|     69|    Py_ssize_t i;
 3247|     69|    Py_ssize_t tuplesize = lz->tuplesize;
 3248|     69|    PyObject *result = lz->result;
 3249|     69|    PyObject *it;
 3250|     69|    PyObject *item;
 3251|     69|    PyObject *olditem;
 3252|       |
 3253|     69|    if (tuplesize == 0)
  ------------------
  |  Branch (3253:9): [True: 0, False: 69]
  ------------------
 3254|      0|        return NULL;
 3255|       |
 3256|     69|    if (_PyObject_IsUniquelyReferenced(result)) {
  ------------------
  |  Branch (3256:9): [True: 69, False: 0]
  ------------------
 3257|     69|        Py_INCREF(result);
  ------------------
  |  |  310|     69|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     69|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     69|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3258|    205|        for (i=0 ; i < tuplesize ; i++) {
  ------------------
  |  Branch (3258:20): [True: 137, False: 68]
  ------------------
 3259|    137|            it = PyTuple_GET_ITEM(lz->ittuple, i);
  ------------------
  |  |   29|    137|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    137|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    137|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3259:18): [True: 137, False: 0]
  ------------------
 3260|    137|            item = (*Py_TYPE(it)->tp_iternext)(it);
  ------------------
  |  |  213|    137|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    137|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    137|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3261|    137|            if (item == NULL) {
  ------------------
  |  Branch (3261:17): [True: 1, False: 136]
  ------------------
 3262|      1|                Py_DECREF(result);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3263|      1|                if (lz->strict) {
  ------------------
  |  Branch (3263:21): [True: 0, False: 1]
  ------------------
 3264|      0|                    goto check;
 3265|      0|                }
 3266|      1|                return NULL;
 3267|      1|            }
 3268|    136|            olditem = PyTuple_GET_ITEM(result, i);
  ------------------
  |  |   29|    136|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    136|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3268:23): [True: 136, False: 0]
  ------------------
 3269|    136|            PyTuple_SET_ITEM(result, i, item);
  ------------------
  |  |   40|    136|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    136|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    136|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3270|    136|            Py_DECREF(olditem);
  ------------------
  |  |  430|    136|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    136|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    136|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3271|    136|        }
 3272|       |        // bpo-42536: The GC may have untracked this result tuple. Since we're
 3273|       |        // recycling it, make sure it's tracked again:
 3274|     68|        _PyTuple_Recycle(result);
 3275|     68|    } else {
 3276|      0|        result = PyTuple_New(tuplesize);
 3277|      0|        if (result == NULL)
  ------------------
  |  Branch (3277:13): [True: 0, False: 0]
  ------------------
 3278|      0|            return NULL;
 3279|      0|        for (i=0 ; i < tuplesize ; i++) {
  ------------------
  |  Branch (3279:20): [True: 0, False: 0]
  ------------------
 3280|      0|            it = PyTuple_GET_ITEM(lz->ittuple, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3280:18): [True: 0, False: 0]
  ------------------
 3281|      0|            item = (*Py_TYPE(it)->tp_iternext)(it);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3282|      0|            if (item == NULL) {
  ------------------
  |  Branch (3282:17): [True: 0, False: 0]
  ------------------
 3283|      0|                Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3284|      0|                if (lz->strict) {
  ------------------
  |  Branch (3284:21): [True: 0, False: 0]
  ------------------
 3285|      0|                    goto check;
 3286|      0|                }
 3287|      0|                return NULL;
 3288|      0|            }
 3289|      0|            PyTuple_SET_ITEM(result, i, item);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3290|      0|        }
 3291|      0|    }
 3292|     68|    return result;
 3293|      0|check:
 3294|      0|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (3294:9): [True: 0, False: 0]
  ------------------
 3295|      0|        if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
  ------------------
  |  Branch (3295:13): [True: 0, False: 0]
  ------------------
 3296|       |            // next() on argument i raised an exception (not StopIteration)
 3297|      0|            return NULL;
 3298|      0|        }
 3299|      0|        PyErr_Clear();
 3300|      0|    }
 3301|      0|    if (i) {
  ------------------
  |  Branch (3301:9): [True: 0, False: 0]
  ------------------
 3302|       |        // ValueError: zip() argument 2 is shorter than argument 1
 3303|       |        // ValueError: zip() argument 3 is shorter than arguments 1-2
 3304|      0|        const char* plural = i == 1 ? " " : "s 1-";
  ------------------
  |  Branch (3304:30): [True: 0, False: 0]
  ------------------
 3305|      0|        return PyErr_Format(PyExc_ValueError,
 3306|      0|                            "zip() argument %zd is shorter than argument%s%zd",
 3307|      0|                            i + 1, plural, i);
 3308|      0|    }
 3309|      0|    for (i = 1; i < tuplesize; i++) {
  ------------------
  |  Branch (3309:17): [True: 0, False: 0]
  ------------------
 3310|      0|        it = PyTuple_GET_ITEM(lz->ittuple, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3310:14): [True: 0, False: 0]
  ------------------
 3311|      0|        item = (*Py_TYPE(it)->tp_iternext)(it);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3312|      0|        if (item) {
  ------------------
  |  Branch (3312:13): [True: 0, False: 0]
  ------------------
 3313|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3314|      0|            const char* plural = i == 1 ? " " : "s 1-";
  ------------------
  |  Branch (3314:34): [True: 0, False: 0]
  ------------------
 3315|      0|            return PyErr_Format(PyExc_ValueError,
 3316|      0|                                "zip() argument %zd is longer than argument%s%zd",
 3317|      0|                                i + 1, plural, i);
 3318|      0|        }
 3319|      0|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (3319:13): [True: 0, False: 0]
  ------------------
 3320|      0|            if (!PyErr_ExceptionMatches(PyExc_StopIteration)) {
  ------------------
  |  Branch (3320:17): [True: 0, False: 0]
  ------------------
 3321|       |                // next() on argument i raised an exception (not StopIteration)
 3322|      0|                return NULL;
 3323|      0|            }
 3324|      0|            PyErr_Clear();
 3325|      0|        }
 3326|       |        // Argument i is exhausted. So far so good...
 3327|      0|    }
 3328|       |    // All arguments are exhausted. Success!
 3329|      0|    return NULL;
 3330|      0|}
bltinmodule.c:zip_new:
 3157|      3|{
 3158|      3|    zipobject *lz;
 3159|      3|    Py_ssize_t i;
 3160|      3|    PyObject *ittuple;  /* tuple of iterators */
 3161|      3|    PyObject *result;
 3162|      3|    Py_ssize_t tuplesize;
 3163|      3|    int strict = 0;
 3164|       |
 3165|      3|    if (kwds) {
  ------------------
  |  Branch (3165:9): [True: 0, False: 3]
  ------------------
 3166|      0|        PyObject *empty = PyTuple_New(0);
 3167|      0|        if (empty == NULL) {
  ------------------
  |  Branch (3167:13): [True: 0, False: 0]
  ------------------
 3168|      0|            return NULL;
 3169|      0|        }
 3170|      0|        static char *kwlist[] = {"strict", NULL};
 3171|      0|        int parsed = PyArg_ParseTupleAndKeywords(
 3172|      0|                empty, kwds, "|$p:zip", kwlist, &strict);
 3173|      0|        Py_DECREF(empty);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3174|      0|        if (!parsed) {
  ------------------
  |  Branch (3174:13): [True: 0, False: 0]
  ------------------
 3175|      0|            return NULL;
 3176|      0|        }
 3177|      0|    }
 3178|       |
 3179|       |    /* args must be a tuple */
 3180|      3|    assert(PyTuple_Check(args));
  ------------------
  |  Branch (3180:5): [True: 3, False: 0]
  ------------------
 3181|      3|    tuplesize = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|      3|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3182|       |
 3183|       |    /* obtain iterators */
 3184|      3|    ittuple = PyTuple_New(tuplesize);
 3185|      3|    if (ittuple == NULL)
  ------------------
  |  Branch (3185:9): [True: 0, False: 3]
  ------------------
 3186|      0|        return NULL;
 3187|      5|    for (i=0; i < tuplesize; ++i) {
  ------------------
  |  Branch (3187:15): [True: 2, False: 3]
  ------------------
 3188|      2|        PyObject *item = PyTuple_GET_ITEM(args, i);
  ------------------
  |  |   29|      2|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      2|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3188:26): [True: 2, False: 0]
  ------------------
 3189|      0|        PyObject *it = PyObject_GetIter(item);
 3190|      2|        if (it == NULL) {
  ------------------
  |  Branch (3190:13): [True: 0, False: 2]
  ------------------
 3191|      0|            Py_DECREF(ittuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3192|      0|            return NULL;
 3193|      0|        }
 3194|      2|        PyTuple_SET_ITEM(ittuple, i, it);
  ------------------
  |  |   40|      2|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3195|      2|    }
 3196|       |
 3197|       |    /* create a result holder */
 3198|      3|    result = PyTuple_New(tuplesize);
 3199|      3|    if (result == NULL) {
  ------------------
  |  Branch (3199:9): [True: 0, False: 3]
  ------------------
 3200|      0|        Py_DECREF(ittuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3201|      0|        return NULL;
 3202|      0|    }
 3203|      5|    for (i=0 ; i < tuplesize ; i++) {
  ------------------
  |  Branch (3203:16): [True: 2, False: 3]
  ------------------
 3204|      2|        PyTuple_SET_ITEM(result, i, Py_NewRef(Py_None));
  ------------------
  |  |   40|      2|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3205|      2|    }
 3206|       |
 3207|       |    /* create zipobject structure */
 3208|      3|    lz = (zipobject *)type->tp_alloc(type, 0);
 3209|      3|    if (lz == NULL) {
  ------------------
  |  Branch (3209:9): [True: 0, False: 3]
  ------------------
 3210|      0|        Py_DECREF(ittuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3211|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3212|      0|        return NULL;
 3213|      0|    }
 3214|      3|    lz->ittuple = ittuple;
 3215|      3|    lz->tuplesize = tuplesize;
 3216|      3|    lz->result = result;
 3217|      3|    lz->strict = strict;
 3218|       |
 3219|      3|    return (PyObject *)lz;
 3220|      3|}
bltinmodule.c:builtin___build_class__:
  105|    631|{
  106|    631|    PyObject *func, *name, *winner, *prep;
  107|    631|    PyObject *cls = NULL, *cell = NULL, *ns = NULL, *meta = NULL, *orig_bases = NULL;
  108|    631|    PyObject *mkw = NULL, *bases = NULL;
  109|    631|    int isclass = 0;   /* initialize to prevent gcc warning */
  110|       |
  111|    631|    if (nargs < 2) {
  ------------------
  |  Branch (111:9): [True: 0, False: 631]
  ------------------
  112|      0|        PyErr_SetString(PyExc_TypeError,
  113|      0|                        "__build_class__: not enough arguments");
  114|      0|        return NULL;
  115|      0|    }
  116|    631|    func = args[0];   /* Better be callable */
  117|    631|    if (!PyFunction_Check(func)) {
  ------------------
  |  |   68|    631|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|    631|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (117:9): [True: 0, False: 631]
  ------------------
  118|      0|        PyErr_SetString(PyExc_TypeError,
  119|      0|                        "__build_class__: func must be a function");
  120|      0|        return NULL;
  121|      0|    }
  122|    631|    name = args[1];
  123|    631|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|    631|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    631|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (123:9): [True: 0, False: 631]
  ------------------
  124|      0|        PyErr_SetString(PyExc_TypeError,
  125|      0|                        "__build_class__: name is not a string");
  126|      0|        return NULL;
  127|      0|    }
  128|    631|    orig_bases = PyTuple_FromArray(args + 2, nargs - 2);
  129|    631|    if (orig_bases == NULL)
  ------------------
  |  Branch (129:9): [True: 0, False: 631]
  ------------------
  130|      0|        return NULL;
  131|       |
  132|    631|    bases = update_bases(orig_bases, args + 2, nargs - 2);
  133|    631|    if (bases == NULL) {
  ------------------
  |  Branch (133:9): [True: 0, False: 631]
  ------------------
  134|      0|        Py_DECREF(orig_bases);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|      0|        return NULL;
  136|      0|    }
  137|       |
  138|    631|    if (kwnames == NULL) {
  ------------------
  |  Branch (138:9): [True: 604, False: 27]
  ------------------
  139|    604|        meta = NULL;
  140|    604|        mkw = NULL;
  141|    604|    }
  142|     27|    else {
  143|     27|        mkw = _PyStack_AsDict(args + nargs, kwnames);
  144|     27|        if (mkw == NULL) {
  ------------------
  |  Branch (144:13): [True: 0, False: 27]
  ------------------
  145|      0|            goto error;
  146|      0|        }
  147|       |
  148|     27|        if (PyDict_Pop(mkw, &_Py_ID(metaclass), &meta) < 0) {
  ------------------
  |  |  936|     27|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     27|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     27|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (148:13): [True: 0, False: 27]
  ------------------
  149|      0|            goto error;
  150|      0|        }
  151|     27|        if (meta != NULL) {
  ------------------
  |  Branch (151:13): [True: 25, False: 2]
  ------------------
  152|       |            /* metaclass is explicitly given, check if it's indeed a class */
  153|     25|            isclass = PyType_Check(meta);
  ------------------
  |  |  766|     25|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     25|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     25|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|     25|        }
  155|     27|    }
  156|    631|    if (meta == NULL) {
  ------------------
  |  Branch (156:9): [True: 606, False: 25]
  ------------------
  157|       |        /* if there are no bases, use type: */
  158|    606|        if (PyTuple_GET_SIZE(bases) == 0) {
  ------------------
  |  |   27|    606|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    606|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    606|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (158:13): [True: 75, False: 531]
  ------------------
  159|     75|            meta = (PyObject *) (&PyType_Type);
  160|     75|        }
  161|       |        /* else get the type of the first base */
  162|    531|        else {
  163|    531|            PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
  ------------------
  |  |   29|    531|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    531|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    531|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (163:31): [True: 531, False: 0]
  ------------------
  164|    531|            meta = (PyObject *)Py_TYPE(base0);
  ------------------
  |  |  213|    531|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    531|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    531|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|    531|        }
  166|    606|        Py_INCREF(meta);
  ------------------
  |  |  310|    606|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    606|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    606|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|    606|        isclass = 1;  /* meta is really a class */
  168|    606|    }
  169|       |
  170|    631|    if (isclass) {
  ------------------
  |  Branch (170:9): [True: 631, False: 0]
  ------------------
  171|       |        /* meta is really a class, so check for a more derived
  172|       |           metaclass, or possible metaclass conflicts: */
  173|    631|        winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
  174|    631|                                                        bases);
  175|    631|        if (winner == NULL) {
  ------------------
  |  Branch (175:13): [True: 0, False: 631]
  ------------------
  176|      0|            goto error;
  177|      0|        }
  178|    631|        if (winner != meta) {
  ------------------
  |  Branch (178:13): [True: 6, False: 625]
  ------------------
  179|      6|            Py_SETREF(meta, Py_NewRef(winner));
  ------------------
  |  |  354|      6|    do { \
  |  |  355|      6|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      6|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      6|        *_tmp_dst_ptr = (src); \
  |  |  358|      6|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
  180|      6|        }
  181|    631|    }
  182|       |    /* else: meta is not a class, so we cannot do the metaclass
  183|       |       calculation, so we will use the explicitly given object as it is */
  184|    631|    if (PyObject_GetOptionalAttr(meta, &_Py_ID(__prepare__), &prep) < 0) {
  ------------------
  |  |  936|    631|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    631|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    631|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (184:9): [True: 0, False: 631]
  ------------------
  185|      0|        ns = NULL;
  186|      0|    }
  187|    631|    else if (prep == NULL) {
  ------------------
  |  Branch (187:14): [True: 0, False: 631]
  ------------------
  188|      0|        ns = PyDict_New();
  189|      0|    }
  190|    631|    else {
  191|    631|        PyObject *pargs[2] = {name, bases};
  192|    631|        ns = PyObject_VectorcallDict(prep, pargs, 2, mkw);
  193|    631|        Py_DECREF(prep);
  ------------------
  |  |  430|    631|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|    631|    }
  195|    631|    if (ns == NULL) {
  ------------------
  |  Branch (195:9): [True: 0, False: 631]
  ------------------
  196|      0|        goto error;
  197|      0|    }
  198|    631|    if (!PyMapping_Check(ns)) {
  ------------------
  |  Branch (198:9): [True: 0, False: 631]
  ------------------
  199|      0|        PyErr_Format(PyExc_TypeError,
  200|      0|                     "%.200s.__prepare__() must return a mapping, not %.200s",
  201|      0|                     isclass ? ((PyTypeObject *)meta)->tp_name : "<metaclass>",
  ------------------
  |  Branch (201:22): [True: 0, False: 0]
  ------------------
  202|      0|                     Py_TYPE(ns)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|      0|        goto error;
  204|      0|    }
  205|    631|    PyThreadState *tstate = _PyThreadState_GET();
  206|    631|    EVAL_CALL_STAT_INC(EVAL_CALL_BUILD_CLASS);
  ------------------
  |  |   79|    631|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
  207|    631|    cell = _PyEval_Vector(tstate, (PyFunctionObject *)func, ns, NULL, 0, NULL);
  208|    631|    if (cell != NULL) {
  ------------------
  |  Branch (208:9): [True: 631, False: 0]
  ------------------
  209|    631|        if (bases != orig_bases) {
  ------------------
  |  Branch (209:13): [True: 0, False: 631]
  ------------------
  210|      0|            if (PyMapping_SetItemString(ns, "__orig_bases__", orig_bases) < 0) {
  ------------------
  |  Branch (210:17): [True: 0, False: 0]
  ------------------
  211|      0|                goto error;
  212|      0|            }
  213|      0|        }
  214|    631|        PyObject *margs[3] = {name, bases, ns};
  215|    631|        cls = PyObject_VectorcallDict(meta, margs, 3, mkw);
  216|    631|        if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
  ------------------
  |  |  766|  1.26k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 631, False: 0]
  |  |  ------------------
  ------------------
                      if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
  ------------------
  |  |   18|    631|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|    631|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 20, False: 611]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (216:13): [True: 631, False: 0]
  ------------------
  217|     20|            PyObject *cell_cls = PyCell_GetRef((PyCellObject *)cell);
  218|     20|            if (cell_cls != cls) {
  ------------------
  |  Branch (218:17): [True: 0, False: 20]
  ------------------
  219|      0|                if (cell_cls == NULL) {
  ------------------
  |  Branch (219:21): [True: 0, False: 0]
  ------------------
  220|      0|                    const char *msg =
  221|      0|                        "__class__ not set defining %.200R as %.200R. "
  222|      0|                        "Was __classcell__ propagated to type.__new__?";
  223|      0|                    PyErr_Format(PyExc_RuntimeError, msg, name, cls);
  224|      0|                } else {
  225|      0|                    const char *msg =
  226|      0|                        "__class__ set to %.200R defining %.200R as %.200R";
  227|      0|                    PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
  228|      0|                }
  229|      0|                Py_XDECREF(cell_cls);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|      0|                Py_SETREF(cls, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  231|      0|                goto error;
  232|      0|            }
  233|     20|            else {
  234|     20|                Py_DECREF(cell_cls);
  ------------------
  |  |  430|     20|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|     20|            }
  236|     20|        }
  237|    631|    }
  238|    631|error:
  239|    631|    Py_XDECREF(cell);
  ------------------
  |  |  524|    631|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|    631|    Py_XDECREF(ns);
  ------------------
  |  |  524|    631|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  241|    631|    Py_XDECREF(meta);
  ------------------
  |  |  524|    631|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|    631|    Py_XDECREF(mkw);
  ------------------
  |  |  524|    631|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|    631|    if (bases != orig_bases) {
  ------------------
  |  Branch (243:9): [True: 0, False: 631]
  ------------------
  244|      0|        Py_DECREF(orig_bases);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|      0|    }
  246|    631|    Py_DECREF(bases);
  ------------------
  |  |  430|    631|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    631|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    631|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|    631|    return cls;
  248|    631|}
bltinmodule.c:update_bases:
   31|    631|{
   32|    631|    Py_ssize_t i, j;
   33|    631|    PyObject *base, *meth, *new_base, *result, *new_bases = NULL;
   34|    631|    assert(PyTuple_Check(bases));
  ------------------
  |  Branch (34:5): [True: 631, False: 0]
  ------------------
   35|       |
   36|  1.35k|    for (i = 0; i < nargs; i++) {
  ------------------
  |  Branch (36:17): [True: 723, False: 631]
  ------------------
   37|    723|        base  = args[i];
   38|    723|        if (PyType_Check(base)) {
  ------------------
  |  |  766|    723|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    723|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    723|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 723, False: 0]
  |  |  ------------------
  ------------------
   39|    723|            if (new_bases) {
  ------------------
  |  Branch (39:17): [True: 0, False: 723]
  ------------------
   40|       |                /* If we already have made a replacement, then we append every normal base,
   41|       |                   otherwise just skip it. */
   42|      0|                if (PyList_Append(new_bases, base) < 0) {
  ------------------
  |  Branch (42:21): [True: 0, False: 0]
  ------------------
   43|      0|                    goto error;
   44|      0|                }
   45|      0|            }
   46|    723|            continue;
   47|    723|        }
   48|      0|        if (PyObject_GetOptionalAttr(base, &_Py_ID(__mro_entries__), &meth) < 0) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (48:13): [True: 0, False: 0]
  ------------------
   49|      0|            goto error;
   50|      0|        }
   51|      0|        if (!meth) {
  ------------------
  |  Branch (51:13): [True: 0, False: 0]
  ------------------
   52|      0|            if (new_bases) {
  ------------------
  |  Branch (52:17): [True: 0, False: 0]
  ------------------
   53|      0|                if (PyList_Append(new_bases, base) < 0) {
  ------------------
  |  Branch (53:21): [True: 0, False: 0]
  ------------------
   54|      0|                    goto error;
   55|      0|                }
   56|      0|            }
   57|      0|            continue;
   58|      0|        }
   59|      0|        new_base = PyObject_CallOneArg(meth, bases);
   60|      0|        Py_DECREF(meth);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|      0|        if (!new_base) {
  ------------------
  |  Branch (61:13): [True: 0, False: 0]
  ------------------
   62|      0|            goto error;
   63|      0|        }
   64|      0|        if (!PyTuple_Check(new_base)) {
  ------------------
  |  |   27|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (64:13): [True: 0, False: 0]
  ------------------
   65|      0|            PyErr_SetString(PyExc_TypeError,
   66|      0|                            "__mro_entries__ must return a tuple");
   67|      0|            Py_DECREF(new_base);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   68|      0|            goto error;
   69|      0|        }
   70|      0|        if (!new_bases) {
  ------------------
  |  Branch (70:13): [True: 0, False: 0]
  ------------------
   71|       |            /* If this is a first successful replacement, create new_bases list and
   72|       |               copy previously encountered bases. */
   73|      0|            if (!(new_bases = PyList_New(i))) {
  ------------------
  |  Branch (73:17): [True: 0, False: 0]
  ------------------
   74|      0|                Py_DECREF(new_base);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      0|                goto error;
   76|      0|            }
   77|      0|            for (j = 0; j < i; j++) {
  ------------------
  |  Branch (77:25): [True: 0, False: 0]
  ------------------
   78|      0|                base = args[j];
   79|      0|                PyList_SET_ITEM(new_bases, j, Py_NewRef(base));
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      0|            }
   81|      0|        }
   82|      0|        j = PyList_GET_SIZE(new_bases);
  ------------------
  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|      0|        if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
  ------------------
  |  Branch (83:13): [True: 0, False: 0]
  ------------------
   84|      0|            Py_DECREF(new_base);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|      0|            goto error;
   86|      0|        }
   87|      0|        Py_DECREF(new_base);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      0|    }
   89|    631|    if (!new_bases) {
  ------------------
  |  Branch (89:9): [True: 631, False: 0]
  ------------------
   90|    631|        return bases;
   91|    631|    }
   92|      0|    result = PyList_AsTuple(new_bases);
   93|      0|    Py_DECREF(new_bases);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      0|    return result;
   95|       |
   96|      0|error:
   97|      0|    Py_XDECREF(new_bases);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|       |    return NULL;
   99|    631|}
bltinmodule.c:builtin___import___impl:
  286|  52.1k|{
  287|  52.1k|    return PyImport_ImportModuleLevelObject(name, globals, locals,
  288|  52.1k|                                            fromlist, level);
  289|  52.1k|}
bltinmodule.c:builtin_abs:
  371|      3|{
  372|      3|    return PyNumber_Absolute(number);
  373|      3|}
bltinmodule.c:builtin_any:
  438|  17.7k|{
  439|  17.7k|    PyObject *it, *item;
  440|  17.7k|    PyObject *(*iternext)(PyObject *);
  441|  17.7k|    int cmp;
  442|       |
  443|  17.7k|    it = PyObject_GetIter(iterable);
  444|  17.7k|    if (it == NULL)
  ------------------
  |  Branch (444:9): [True: 0, False: 17.7k]
  ------------------
  445|      0|        return NULL;
  446|  17.7k|    iternext = *Py_TYPE(it)->tp_iternext;
  ------------------
  |  |  213|  17.7k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|       |
  448|   292k|    for (;;) {
  449|   292k|        item = iternext(it);
  450|   292k|        if (item == NULL)
  ------------------
  |  Branch (450:13): [True: 17.1k, False: 275k]
  ------------------
  451|  17.1k|            break;
  452|   275k|        cmp = PyObject_IsTrue(item);
  453|   275k|        Py_DECREF(item);
  ------------------
  |  |  430|   275k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   275k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   275k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|   275k|        if (cmp < 0) {
  ------------------
  |  Branch (454:13): [True: 0, False: 275k]
  ------------------
  455|      0|            Py_DECREF(it);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  456|      0|            return NULL;
  457|      0|        }
  458|   275k|        if (cmp > 0) {
  ------------------
  |  Branch (458:13): [True: 573, False: 275k]
  ------------------
  459|    573|            Py_DECREF(it);
  ------------------
  |  |  430|    573|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    573|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    573|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|    573|            Py_RETURN_TRUE;
  ------------------
  |  |   44|    573|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|    573|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    573|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    573|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|    573|        }
  462|   275k|    }
  463|  17.1k|    Py_DECREF(it);
  ------------------
  |  |  430|  17.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|  17.1k|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (464:9): [True: 0, False: 17.1k]
  ------------------
  465|      0|        if (PyErr_ExceptionMatches(PyExc_StopIteration))
  ------------------
  |  Branch (465:13): [True: 0, False: 0]
  ------------------
  466|      0|            PyErr_Clear();
  467|      0|        else
  468|      0|            return NULL;
  469|      0|    }
  470|  17.1k|    Py_RETURN_FALSE;
  ------------------
  |  |   45|  17.1k|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|  17.1k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  17.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  17.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|  17.1k|}
bltinmodule.c:builtin_callable:
  530|      7|{
  531|      7|    return PyBool_FromLong((long)PyCallable_Check(obj));
  532|      7|}
bltinmodule.c:builtin_chr:
  793|   211k|{
  794|   211k|    int overflow;
  795|   211k|    long v = PyLong_AsLongAndOverflow(i, &overflow);
  796|   211k|    if (v == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (796:9): [True: 0, False: 211k]
  |  Branch (796:20): [True: 0, False: 0]
  ------------------
  797|      0|        return NULL;
  798|      0|    }
  799|   211k|    if (overflow) {
  ------------------
  |  Branch (799:9): [True: 0, False: 211k]
  ------------------
  800|      0|        v = overflow < 0 ? INT_MIN : INT_MAX;
  ------------------
  |  Branch (800:13): [True: 0, False: 0]
  ------------------
  801|       |        /* Allow PyUnicode_FromOrdinal() to raise an exception */
  802|      0|    }
  803|   211k|#if SIZEOF_INT < SIZEOF_LONG
  804|   211k|    else if (v < INT_MIN) {
  ------------------
  |  Branch (804:14): [True: 0, False: 211k]
  ------------------
  805|      0|        v = INT_MIN;
  806|      0|    }
  807|   211k|    else if (v > INT_MAX) {
  ------------------
  |  Branch (807:14): [True: 0, False: 211k]
  ------------------
  808|       |        v = INT_MAX;
  809|      0|    }
  810|   211k|#endif
  811|   211k|    return PyUnicode_FromOrdinal(v);
  812|   211k|}
bltinmodule.c:builtin_delattr_impl:
 1842|     36|{
 1843|     36|    if (PyObject_DelAttr(obj, name) < 0) {
  ------------------
  |  Branch (1843:9): [True: 0, False: 36]
  ------------------
 1844|      0|        return NULL;
 1845|      0|    }
 1846|     36|    Py_RETURN_NONE;
  ------------------
  |  |  628|     36|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     36|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1847|     36|}
bltinmodule.c:builtin_dir:
  984|      2|{
  985|      2|    PyObject *arg = NULL;
  986|       |
  987|      2|    if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
  ------------------
  |  Branch (987:9): [True: 0, False: 2]
  ------------------
  988|      0|        return NULL;
  989|      2|    return PyObject_Dir(arg);
  990|      2|}
bltinmodule.c:builtin_divmod_impl:
 1019|    106|{
 1020|    106|    return PyNumber_Divmod(x, y);
 1021|    106|}
bltinmodule.c:builtin_eval_impl:
 1045|      3|{
 1046|      3|    PyThreadState *tstate = _PyThreadState_GET();
 1047|      3|    PyObject *result = NULL, *source_copy;
 1048|      3|    const char *str;
 1049|       |
 1050|      3|    if (locals != Py_None && !PyMapping_Check(locals)) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1050:9): [True: 0, False: 3]
  |  Branch (1050:30): [True: 0, False: 0]
  ------------------
 1051|      0|        PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
 1052|      0|        return NULL;
 1053|      0|    }
 1054|      3|    if (globals != Py_None && !PyAnyDict_Check(globals)) {
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
                  if (globals != Py_None && !PyAnyDict_Check(globals)) {
  ------------------
  |  |   43|      3|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|      3|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 3, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1054:9): [True: 3, False: 0]
  ------------------
 1055|      0|        PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
  ------------------
  |  Branch (1055:42): [True: 0, False: 0]
  ------------------
 1056|      0|            "globals must be a real dict or a frozendict; "
 1057|      0|            "try eval(expr, {}, mapping)"
 1058|      0|            : "globals must be a dict or a frozendict");
 1059|      0|        return NULL;
 1060|      0|    }
 1061|       |
 1062|      3|    int fromframe = 0;
 1063|      3|    if (globals != Py_None) {
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1063:9): [True: 3, False: 0]
  ------------------
 1064|      3|        Py_INCREF(globals);
  ------------------
  |  |  310|      3|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|      3|    }
 1066|      0|    else if (_PyEval_GetFrame() != NULL) {
  ------------------
  |  Branch (1066:14): [True: 0, False: 0]
  ------------------
 1067|      0|        fromframe = 1;
 1068|      0|        globals = PyEval_GetGlobals();
 1069|      0|        assert(globals != NULL);
  ------------------
  |  Branch (1069:9): [True: 0, False: 0]
  ------------------
 1070|      0|        Py_INCREF(globals);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1071|      0|    }
 1072|      0|    else {
 1073|      0|        globals = _PyEval_GetGlobalsFromRunningMain(tstate);
 1074|      0|        if (globals == NULL) {
  ------------------
  |  Branch (1074:13): [True: 0, False: 0]
  ------------------
 1075|      0|            if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1075:17): [True: 0, False: 0]
  ------------------
 1076|      0|                PyErr_SetString(PyExc_TypeError,
 1077|      0|                    "eval must be given globals and locals "
 1078|      0|                    "when called without a frame");
 1079|      0|            }
 1080|      0|            return NULL;
 1081|      0|        }
 1082|      0|        Py_INCREF(globals);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1083|      0|    }
 1084|       |
 1085|      3|    if (locals != Py_None) {
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1085:9): [True: 0, False: 3]
  ------------------
 1086|      0|        Py_INCREF(locals);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|      0|    }
 1088|      3|    else if (fromframe) {
  ------------------
  |  Branch (1088:14): [True: 0, False: 3]
  ------------------
 1089|      0|        locals = _PyEval_GetFrameLocals();
 1090|      0|        if (locals == NULL) {
  ------------------
  |  Branch (1090:13): [True: 0, False: 0]
  ------------------
 1091|      0|            assert(PyErr_Occurred());
  ------------------
  |  Branch (1091:13): [True: 0, False: 0]
  ------------------
 1092|      0|            Py_DECREF(globals);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1093|      0|            return NULL;
 1094|      0|        }
 1095|      0|    }
 1096|      3|    else {
 1097|      3|        locals = Py_NewRef(globals);
  ------------------
  |  |  550|      3|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|      3|    }
 1099|       |
 1100|      3|    if (_PyEval_EnsureBuiltins(tstate, globals, NULL) < 0) {
  ------------------
  |  Branch (1100:9): [True: 0, False: 3]
  ------------------
 1101|      0|        goto error;
 1102|      0|    }
 1103|       |
 1104|      3|    if (PyCode_Check(source)) {
  ------------------
  |  |  168|      3|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|      3|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|      0|        if (PySys_Audit("exec", "O", source) < 0) {
  ------------------
  |  Branch (1105:13): [True: 0, False: 0]
  ------------------
 1106|      0|            goto error;
 1107|      0|        }
 1108|       |
 1109|      0|        if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
  ------------------
  |  Branch (1109:13): [True: 0, False: 0]
  ------------------
 1110|      0|            PyErr_SetString(PyExc_TypeError,
 1111|      0|                "code object passed to eval() may not contain free variables");
 1112|      0|            goto error;
 1113|      0|        }
 1114|      0|        result = PyEval_EvalCode(source, globals, locals);
 1115|      0|    }
 1116|      3|    else {
 1117|      3|        PyCompilerFlags cf = _PyCompilerFlags_INIT;
  ------------------
  |  |   33|      3|    (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
  |  |  ------------------
  |  |  |  |   24|      3|#define PY_MINOR_VERSION        16
  |  |  ------------------
  ------------------
 1118|      3|        cf.cf_flags = PyCF_SOURCE_IS_UTF8;
  ------------------
  |  |   15|      3|#define PyCF_SOURCE_IS_UTF8  0x0100
  ------------------
 1119|      3|        str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
 1120|      3|        if (str == NULL)
  ------------------
  |  Branch (1120:13): [True: 0, False: 3]
  ------------------
 1121|      0|            goto error;
 1122|       |
 1123|      3|        while (*str == ' ' || *str == '\t')
  ------------------
  |  Branch (1123:16): [True: 0, False: 3]
  |  Branch (1123:31): [True: 0, False: 3]
  ------------------
 1124|      0|            str++;
 1125|       |
 1126|      3|        (void)PyEval_MergeCompilerFlags(&cf);
 1127|       |#ifdef Py_GIL_DISABLED
 1128|       |        // Don't immortalize code constants for explicit eval() calls
 1129|       |        // to avoid memory leaks.
 1130|       |        _PyThreadStateImpl *tstate = (_PyThreadStateImpl *)_PyThreadState_GET();
 1131|       |        tstate->suppress_co_const_immortalization++;
 1132|       |#endif
 1133|      3|        result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
  ------------------
  |  |   10|      3|#define Py_eval_input 258
  ------------------
 1134|       |#ifdef Py_GIL_DISABLED
 1135|       |        tstate->suppress_co_const_immortalization--;
 1136|       |#endif
 1137|      3|        Py_XDECREF(source_copy);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1138|      3|    }
 1139|       |
 1140|      3|  error:
 1141|      3|    Py_XDECREF(globals);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1142|      3|    Py_XDECREF(locals);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|      3|    return result;
 1144|      3|}
bltinmodule.c:builtin_exec_impl:
 1171|    117|{
 1172|    117|    PyThreadState *tstate = _PyThreadState_GET();
 1173|    117|    PyObject *v;
 1174|       |
 1175|    117|    int fromframe = 0;
 1176|    117|    if (globals != Py_None) {
  ------------------
  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1176:9): [True: 117, False: 0]
  ------------------
 1177|    117|        Py_INCREF(globals);
  ------------------
  |  |  310|    117|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1178|    117|    }
 1179|      0|    else if (_PyEval_GetFrame() != NULL) {
  ------------------
  |  Branch (1179:14): [True: 0, False: 0]
  ------------------
 1180|      0|        fromframe = 1;
 1181|      0|        globals = PyEval_GetGlobals();
 1182|      0|        assert(globals != NULL);
  ------------------
  |  Branch (1182:9): [True: 0, False: 0]
  ------------------
 1183|      0|        Py_INCREF(globals);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|      0|    }
 1185|      0|    else {
 1186|      0|        globals = _PyEval_GetGlobalsFromRunningMain(tstate);
 1187|      0|        if (globals == NULL) {
  ------------------
  |  Branch (1187:13): [True: 0, False: 0]
  ------------------
 1188|      0|            if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1188:17): [True: 0, False: 0]
  ------------------
 1189|      0|                PyErr_SetString(PyExc_SystemError,
 1190|      0|                                "globals and locals cannot be NULL");
 1191|      0|            }
 1192|      0|            goto error;
 1193|      0|        }
 1194|      0|        Py_INCREF(globals);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1195|      0|    }
 1196|       |
 1197|    117|    if (locals != Py_None) {
  ------------------
  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1197:9): [True: 0, False: 117]
  ------------------
 1198|      0|        Py_INCREF(locals);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1199|      0|    }
 1200|    117|    else if (fromframe) {
  ------------------
  |  Branch (1200:14): [True: 0, False: 117]
  ------------------
 1201|      0|        locals = _PyEval_GetFrameLocals();
 1202|      0|        if (locals == NULL) {
  ------------------
  |  Branch (1202:13): [True: 0, False: 0]
  ------------------
 1203|      0|            assert(PyErr_Occurred());
  ------------------
  |  Branch (1203:13): [True: 0, False: 0]
  ------------------
 1204|      0|            Py_DECREF(globals);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1205|      0|            return NULL;
 1206|      0|        }
 1207|      0|    }
 1208|    117|    else {
 1209|    117|        locals = Py_NewRef(globals);
  ------------------
  |  |  550|    117|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|    117|    }
 1211|       |
 1212|    117|    if (!PyAnyDict_Check(globals)) {
  ------------------
  |  |   43|    117|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|    117|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|    234|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 117, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1213|      0|        PyErr_Format(PyExc_TypeError,
 1214|      0|                     "exec() globals must be a dict or a frozendict, not %T",
 1215|      0|                     globals);
 1216|      0|        goto error;
 1217|      0|    }
 1218|    117|    if (!PyMapping_Check(locals)) {
  ------------------
  |  Branch (1218:9): [True: 0, False: 117]
  ------------------
 1219|      0|        PyErr_Format(PyExc_TypeError,
 1220|      0|            "locals must be a mapping or None, not %.100s",
 1221|      0|            Py_TYPE(locals)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1222|      0|        goto error;
 1223|      0|    }
 1224|       |
 1225|    117|    if (_PyEval_EnsureBuiltins(tstate, globals, NULL) < 0) {
  ------------------
  |  Branch (1225:9): [True: 0, False: 117]
  ------------------
 1226|      0|        goto error;
 1227|      0|    }
 1228|       |
 1229|    117|    if (closure == Py_None) {
  ------------------
  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1229:9): [True: 0, False: 117]
  ------------------
 1230|      0|        closure = NULL;
 1231|      0|    }
 1232|       |
 1233|    117|    if (PyCode_Check(source)) {
  ------------------
  |  |  168|    117|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|    117|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 117, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1234|    117|        Py_ssize_t num_free = PyCode_GetNumFree((PyCodeObject *)source);
 1235|    117|        if (num_free == 0) {
  ------------------
  |  Branch (1235:13): [True: 117, False: 0]
  ------------------
 1236|    117|            if (closure) {
  ------------------
  |  Branch (1236:17): [True: 0, False: 117]
  ------------------
 1237|      0|                PyErr_SetString(PyExc_TypeError,
 1238|      0|                    "cannot use a closure with this code object");
 1239|      0|                goto error;
 1240|      0|            }
 1241|    117|        } else {
 1242|      0|            int closure_is_ok =
 1243|      0|                closure
  ------------------
  |  Branch (1243:17): [True: 0, False: 0]
  ------------------
 1244|      0|                && PyTuple_CheckExact(closure)
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1245|      0|                && (PyTuple_GET_SIZE(closure) == num_free);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1245:20): [True: 0, False: 0]
  ------------------
 1246|      0|            if (closure_is_ok) {
  ------------------
  |  Branch (1246:17): [True: 0, False: 0]
  ------------------
 1247|      0|                for (Py_ssize_t i = 0; i < num_free; i++) {
  ------------------
  |  Branch (1247:40): [True: 0, False: 0]
  ------------------
 1248|      0|                    PyObject *cell = PyTuple_GET_ITEM(closure, i);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1248:38): [True: 0, False: 0]
  ------------------
 1249|      0|                    if (!PyCell_Check(cell)) {
  ------------------
  |  |   18|      0|#define PyCell_Check(op) Py_IS_TYPE((op), &PyCell_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1249:25): [True: 0, False: 0]
  ------------------
 1250|      0|                        closure_is_ok = 0;
 1251|      0|                        break;
 1252|      0|                    }
 1253|      0|                }
 1254|      0|            }
 1255|      0|            if (!closure_is_ok) {
  ------------------
  |  Branch (1255:17): [True: 0, False: 0]
  ------------------
 1256|      0|                PyErr_Format(PyExc_TypeError,
 1257|      0|                    "code object requires a closure of exactly length %zd",
 1258|      0|                    num_free);
 1259|      0|                goto error;
 1260|      0|            }
 1261|      0|        }
 1262|       |
 1263|    117|        if (PySys_Audit("exec", "O", source) < 0) {
  ------------------
  |  Branch (1263:13): [True: 0, False: 117]
  ------------------
 1264|      0|            goto error;
 1265|      0|        }
 1266|       |
 1267|    117|        if (!closure) {
  ------------------
  |  Branch (1267:13): [True: 117, False: 0]
  ------------------
 1268|    117|            v = PyEval_EvalCode(source, globals, locals);
 1269|    117|        } else {
 1270|      0|            v = PyEval_EvalCodeEx(source, globals, locals,
 1271|      0|                NULL, 0,
 1272|      0|                NULL, 0,
 1273|      0|                NULL, 0,
 1274|      0|                NULL,
 1275|      0|                closure);
 1276|      0|        }
 1277|    117|    }
 1278|      0|    else {
 1279|      0|        if (closure != NULL) {
  ------------------
  |  Branch (1279:13): [True: 0, False: 0]
  ------------------
 1280|      0|            PyErr_SetString(PyExc_TypeError,
 1281|      0|                "closure can only be used when source is a code object");
 1282|      0|            goto error;
 1283|      0|        }
 1284|      0|        PyObject *source_copy;
 1285|      0|        const char *str;
 1286|      0|        PyCompilerFlags cf = _PyCompilerFlags_INIT;
  ------------------
  |  |   33|      0|    (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
  |  |  ------------------
  |  |  |  |   24|      0|#define PY_MINOR_VERSION        16
  |  |  ------------------
  ------------------
 1287|      0|        cf.cf_flags = PyCF_SOURCE_IS_UTF8;
  ------------------
  |  |   15|      0|#define PyCF_SOURCE_IS_UTF8  0x0100
  ------------------
 1288|      0|        str = _Py_SourceAsString(source, "exec",
 1289|      0|                                       "string, bytes or code", &cf,
 1290|      0|                                       &source_copy);
 1291|      0|        if (str == NULL)
  ------------------
  |  Branch (1291:13): [True: 0, False: 0]
  ------------------
 1292|      0|            goto error;
 1293|      0|        if (PyEval_MergeCompilerFlags(&cf))
  ------------------
  |  Branch (1293:13): [True: 0, False: 0]
  ------------------
 1294|      0|            v = PyRun_StringFlags(str, Py_file_input, globals,
  ------------------
  |  |    9|      0|#define Py_file_input 257
  ------------------
 1295|      0|                                  locals, &cf);
 1296|      0|        else
 1297|      0|            v = PyRun_String(str, Py_file_input, globals, locals);
  ------------------
  |  |   81|      0|#define PyRun_String(str, s, g, l) PyRun_StringFlags((str), (s), (g), (l), NULL)
  ------------------
 1298|      0|        Py_XDECREF(source_copy);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1299|      0|    }
 1300|    117|    if (v == NULL)
  ------------------
  |  Branch (1300:9): [True: 0, False: 117]
  ------------------
 1301|      0|        goto error;
 1302|    117|    Py_DECREF(globals);
  ------------------
  |  |  430|    117|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1303|    117|    Py_DECREF(locals);
  ------------------
  |  |  430|    117|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|    117|    Py_DECREF(v);
  ------------------
  |  |  430|    117|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1305|    117|    Py_RETURN_NONE;
  ------------------
  |  |  628|    117|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1306|       |
 1307|      0|  error:
 1308|      0|    Py_XDECREF(globals);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1309|      0|    Py_XDECREF(locals);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1310|       |    return NULL;
 1311|    117|}
bltinmodule.c:builtin_getattr:
 1317|  2.82k|{
 1318|  2.82k|    PyObject *v, *name, *result;
 1319|       |
 1320|  2.82k|    if (!_PyArg_CheckPositional("getattr", nargs, 2, 3))
  ------------------
  |  |   31|  2.82k|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 2.82k, False: 0]
  |  |  |  Branch (31:27): [True: 2.82k, False: 0]
  |  |  ------------------
  |  |   32|  2.82k|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1321|      0|        return NULL;
 1322|       |
 1323|  2.82k|    v = args[0];
 1324|  2.82k|    name = args[1];
 1325|  2.82k|    if (nargs > 2) {
  ------------------
  |  Branch (1325:9): [True: 2.61k, False: 211]
  ------------------
 1326|  2.61k|        if (PyObject_GetOptionalAttr(v, name, &result) == 0) {
  ------------------
  |  Branch (1326:13): [True: 294, False: 2.32k]
  ------------------
 1327|    294|            PyObject *dflt = args[2];
 1328|    294|            return Py_NewRef(dflt);
  ------------------
  |  |  550|    294|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    294|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    294|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1329|    294|        }
 1330|  2.61k|    }
 1331|    211|    else {
 1332|    211|        result = PyObject_GetAttr(v, name);
 1333|    211|    }
 1334|  2.53k|    return result;
 1335|  2.82k|}
bltinmodule.c:builtin_globals_impl:
 1359|     45|{
 1360|     45|    PyObject *globals;
 1361|     45|    if (_PyEval_GetFrame() != NULL) {
  ------------------
  |  Branch (1361:9): [True: 45, False: 0]
  ------------------
 1362|     45|        globals = PyEval_GetGlobals();
 1363|     45|        assert(globals != NULL);
  ------------------
  |  Branch (1363:9): [True: 45, False: 0]
  ------------------
 1364|     45|        return Py_NewRef(globals);
  ------------------
  |  |  550|     45|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     45|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1365|     45|    }
 1366|      0|    PyThreadState *tstate = _PyThreadState_GET();
 1367|      0|    globals = _PyEval_GetGlobalsFromRunningMain(tstate);
 1368|      0|    if (globals == NULL) {
  ------------------
  |  Branch (1368:9): [True: 0, False: 0]
  ------------------
 1369|      0|        if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1369:13): [True: 0, False: 0]
  ------------------
 1370|      0|            return NULL;
 1371|      0|        }
 1372|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1373|      0|    }
 1374|      0|    return Py_NewRef(globals);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1375|      0|}
bltinmodule.c:builtin_hasattr_impl:
 1393|    370|{
 1394|    370|    PyObject *v;
 1395|       |
 1396|    370|    if (PyObject_GetOptionalAttr(obj, name, &v) < 0) {
  ------------------
  |  Branch (1396:9): [True: 0, False: 370]
  ------------------
 1397|      0|        return NULL;
 1398|      0|    }
 1399|    370|    if (v == NULL) {
  ------------------
  |  Branch (1399:9): [True: 83, False: 287]
  ------------------
 1400|     83|        Py_RETURN_FALSE;
  ------------------
  |  |   45|     83|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|     83|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|     83|    }
 1402|    287|    Py_DECREF(v);
  ------------------
  |  |  430|    287|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    287|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    287|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|    287|    Py_RETURN_TRUE;
  ------------------
  |  |   44|    287|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|    287|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    287|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    287|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1404|    370|}
bltinmodule.c:builtin_isinstance_impl:
 3108|     72|{
 3109|     72|    int retval;
 3110|       |
 3111|     72|    retval = PyObject_IsInstance(obj, class_or_tuple);
 3112|     72|    if (retval < 0)
  ------------------
  |  Branch (3112:9): [True: 0, False: 72]
  ------------------
 3113|      0|        return NULL;
 3114|     72|    return PyBool_FromLong(retval);
 3115|     72|}
bltinmodule.c:builtin_issubclass_impl:
 3136|     10|{
 3137|     10|    int retval;
 3138|       |
 3139|     10|    retval = PyObject_IsSubclass(cls, class_or_tuple);
 3140|     10|    if (retval < 0)
  ------------------
  |  Branch (3140:9): [True: 0, False: 10]
  ------------------
 3141|      0|        return NULL;
 3142|     10|    return PyBool_FromLong(retval);
 3143|     10|}
bltinmodule.c:builtin_iter_impl:
 1918|     26|{
 1919|     26|    if (stop_value == NULL && stop_exception == NULL) {
  ------------------
  |  Branch (1919:9): [True: 26, False: 0]
  |  Branch (1919:31): [True: 26, False: 0]
  ------------------
 1920|     26|        return PyObject_GetIter(object);
 1921|     26|    }
 1922|      0|    if (!PyCallable_Check(object)) {
  ------------------
  |  Branch (1922:9): [True: 0, False: 0]
  ------------------
 1923|      0|        PyErr_SetString(PyExc_TypeError,
 1924|      0|                        "iter(): the first argument must be callable");
 1925|      0|        return NULL;
 1926|      0|    }
 1927|      0|    return _PyCallIter_NewEx(object, stop_value, stop_exception);
 1928|      0|}
bltinmodule.c:builtin_len:
 1975|    109|{
 1976|    109|    Py_ssize_t res;
 1977|       |
 1978|    109|    res = PyObject_Size(obj);
 1979|    109|    if (res < 0) {
  ------------------
  |  Branch (1979:9): [True: 0, False: 109]
  ------------------
 1980|      0|        assert(PyErr_Occurred());
  ------------------
  |  Branch (1980:9): [True: 0, False: 0]
  ------------------
 1981|      0|        return NULL;
 1982|      0|    }
 1983|    109|    return PyLong_FromSsize_t(res);
 1984|    109|}
bltinmodule.c:builtin_max:
 2158|    474|{
 2159|    474|    return min_max(args, nargs, kwnames, Py_GT);
  ------------------
  |  |  656|    474|#define Py_GT 4
  ------------------
 2160|    474|}
bltinmodule.c:min_max:
 2022|    613|{
 2023|    613|    PyObject *it = NULL, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
 2024|    613|    PyObject *defaultval = NULL;
 2025|    613|    static const char * const keywords[] = {"key", "default", NULL};
 2026|    613|    static _PyArg_Parser _parser_min = {"|$OO:min", keywords, 0};
 2027|    613|    static _PyArg_Parser _parser_max = {"|$OO:max", keywords, 0};
 2028|    613|    const char *name = (op == Py_LT) ? "min" : "max";
  ------------------
  |  |  652|    613|#define Py_LT 0
  ------------------
  |  Branch (2028:24): [True: 139, False: 474]
  ------------------
 2029|    613|    _PyArg_Parser *_parser = (op == Py_LT) ? &_parser_min : &_parser_max;
  ------------------
  |  |  652|    613|#define Py_LT 0
  ------------------
  |  Branch (2029:30): [True: 139, False: 474]
  ------------------
 2030|       |
 2031|    613|    if (nargs == 0) {
  ------------------
  |  Branch (2031:9): [True: 0, False: 613]
  ------------------
 2032|      0|        PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
 2033|      0|        return NULL;
 2034|      0|    }
 2035|       |
 2036|    613|    if (kwnames != NULL && !_PyArg_ParseStackAndKeywords(args + nargs, 0, kwnames, _parser,
  ------------------
  |  Branch (2036:9): [True: 0, False: 613]
  |  Branch (2036:28): [True: 0, False: 0]
  ------------------
 2037|      0|                                                         &keyfunc, &defaultval)) {
 2038|      0|        return NULL;
 2039|      0|    }
 2040|       |
 2041|    613|    const int positional = nargs > 1; // False iff nargs == 1
 2042|    613|    if (positional && defaultval != NULL) {
  ------------------
  |  Branch (2042:9): [True: 144, False: 469]
  |  Branch (2042:23): [True: 0, False: 144]
  ------------------
 2043|      0|        PyErr_Format(PyExc_TypeError,
 2044|      0|                        "Cannot specify a default for %s() with multiple "
 2045|      0|                        "positional arguments", name);
 2046|      0|        return NULL;
 2047|      0|    }
 2048|       |
 2049|    613|    if (!positional) {
  ------------------
  |  Branch (2049:9): [True: 469, False: 144]
  ------------------
 2050|    469|        it = PyObject_GetIter(args[0]);
 2051|    469|        if (it == NULL) {
  ------------------
  |  Branch (2051:13): [True: 0, False: 469]
  ------------------
 2052|      0|            return NULL;
 2053|      0|        }
 2054|    469|    }
 2055|       |
 2056|    613|    if (keyfunc == Py_None) {
  ------------------
  |  |  616|    613|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2056:9): [True: 0, False: 613]
  ------------------
 2057|      0|        keyfunc = NULL;
 2058|      0|    }
 2059|       |
 2060|    613|    maxitem = NULL; /* the result */
 2061|    613|    maxval = NULL;  /* the value associated with the result */
 2062|  1.66k|    while (1) {
  ------------------
  |  Branch (2062:12): [True: 1.66k, Folded]
  ------------------
 2063|  1.66k|        if (it == NULL) {
  ------------------
  |  Branch (2063:13): [True: 432, False: 1.23k]
  ------------------
 2064|    432|            if (nargs-- <= 0) {
  ------------------
  |  Branch (2064:17): [True: 144, False: 288]
  ------------------
 2065|    144|                break;
 2066|    144|            }
 2067|    288|            item = *args++;
 2068|    288|            Py_INCREF(item);
  ------------------
  |  |  310|    288|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    288|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    288|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2069|    288|        }
 2070|  1.23k|        else {
 2071|  1.23k|            item = PyIter_Next(it);
 2072|  1.23k|            if (item == NULL) {
  ------------------
  |  Branch (2072:17): [True: 469, False: 761]
  ------------------
 2073|    469|                if (PyErr_Occurred()) {
  ------------------
  |  Branch (2073:21): [True: 0, False: 469]
  ------------------
 2074|      0|                    goto Fail_it;
 2075|      0|                }
 2076|    469|                break;
 2077|    469|            }
 2078|  1.23k|        }
 2079|       |
 2080|       |        /* get the value from the key function */
 2081|  1.04k|        if (keyfunc != NULL) {
  ------------------
  |  Branch (2081:13): [True: 0, False: 1.04k]
  ------------------
 2082|      0|            val = PyObject_CallOneArg(keyfunc, item);
 2083|      0|            if (val == NULL)
  ------------------
  |  Branch (2083:17): [True: 0, False: 0]
  ------------------
 2084|      0|                goto Fail_it_item;
 2085|      0|        }
 2086|       |        /* no key function; the value is the item */
 2087|  1.04k|        else {
 2088|  1.04k|            val = Py_NewRef(item);
  ------------------
  |  |  550|  1.04k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.04k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.04k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2089|  1.04k|        }
 2090|       |
 2091|       |        /* maximum value and item are unset; set them */
 2092|  1.04k|        if (maxval == NULL) {
  ------------------
  |  Branch (2092:13): [True: 613, False: 436]
  ------------------
 2093|    613|            maxitem = item;
 2094|    613|            maxval = val;
 2095|    613|        }
 2096|       |        /* maximum value and item are set; update them as necessary */
 2097|    436|        else {
 2098|    436|            int cmp = PyObject_RichCompareBool(val, maxval, op);
 2099|    436|            if (cmp < 0)
  ------------------
  |  Branch (2099:17): [True: 0, False: 436]
  ------------------
 2100|      0|                goto Fail_it_item_and_val;
 2101|    436|            else if (cmp > 0) {
  ------------------
  |  Branch (2101:22): [True: 139, False: 297]
  ------------------
 2102|    139|                Py_DECREF(maxval);
  ------------------
  |  |  430|    139|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    139|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    139|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2103|    139|                Py_DECREF(maxitem);
  ------------------
  |  |  430|    139|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    139|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    139|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2104|    139|                maxval = val;
 2105|    139|                maxitem = item;
 2106|    139|            }
 2107|    297|            else {
 2108|    297|                Py_DECREF(item);
  ------------------
  |  |  430|    297|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    297|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    297|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2109|    297|                Py_DECREF(val);
  ------------------
  |  |  430|    297|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    297|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    297|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2110|    297|            }
 2111|    436|        }
 2112|  1.04k|    }
 2113|    613|    if (maxval == NULL) {
  ------------------
  |  Branch (2113:9): [True: 0, False: 613]
  ------------------
 2114|      0|        assert(maxitem == NULL);
  ------------------
  |  Branch (2114:9): [True: 0, False: 0]
  ------------------
 2115|      0|        if (defaultval != NULL) {
  ------------------
  |  Branch (2115:13): [True: 0, False: 0]
  ------------------
 2116|      0|            maxitem = Py_NewRef(defaultval);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2117|      0|        } else {
 2118|      0|            PyErr_Format(PyExc_ValueError,
 2119|      0|                         "%s() iterable argument is empty", name);
 2120|      0|        }
 2121|      0|    }
 2122|    613|    else
 2123|    613|        Py_DECREF(maxval);
  ------------------
  |  |  430|    613|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    613|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    613|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2124|    613|    Py_XDECREF(it);
  ------------------
  |  |  524|    613|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    613|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    613|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2125|    613|    return maxitem;
 2126|       |
 2127|      0|Fail_it_item_and_val:
 2128|      0|    Py_DECREF(val);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2129|      0|Fail_it_item:
 2130|      0|    Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2131|      0|Fail_it:
 2132|      0|    Py_XDECREF(maxval);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2133|      0|    Py_XDECREF(maxitem);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2134|      0|    Py_XDECREF(it);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2135|       |    return NULL;
 2136|      0|}
bltinmodule.c:builtin_min:
 2141|    139|{
 2142|    139|    return min_max(args, nargs, kwnames, Py_LT);
  ------------------
  |  |  652|    139|#define Py_LT 0
  ------------------
 2143|    139|}
bltinmodule.c:builtin_next:
 1763|      2|{
 1764|      2|    PyObject *it, *res;
 1765|       |
 1766|      2|    if (!_PyArg_CheckPositional("next", nargs, 1, 2))
  ------------------
  |  |   31|      2|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 2, False: 0]
  |  |  |  Branch (31:27): [True: 2, False: 0]
  |  |  ------------------
  |  |   32|      2|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1767|      0|        return NULL;
 1768|       |
 1769|      2|    it = args[0];
 1770|      2|    if (!PyIter_Check(it)) {
  ------------------
  |  Branch (1770:9): [True: 0, False: 2]
  ------------------
 1771|      0|        PyErr_Format(PyExc_TypeError,
 1772|      0|            "'%.200s' object is not an iterator",
 1773|      0|            Py_TYPE(it)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1774|      0|        return NULL;
 1775|      0|    }
 1776|       |
 1777|      2|    res = (*Py_TYPE(it)->tp_iternext)(it);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1778|      2|    if (res != NULL) {
  ------------------
  |  Branch (1778:9): [True: 0, False: 2]
  ------------------
 1779|      0|        return res;
 1780|      2|    } else if (nargs > 1) {
  ------------------
  |  Branch (1780:16): [True: 2, False: 0]
  ------------------
 1781|      2|        PyObject *def = args[1];
 1782|      2|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1782:13): [True: 0, False: 2]
  ------------------
 1783|      0|            if(!PyErr_ExceptionMatches(PyExc_StopIteration))
  ------------------
  |  Branch (1783:16): [True: 0, False: 0]
  ------------------
 1784|      0|                return NULL;
 1785|      0|            PyErr_Clear();
 1786|      0|        }
 1787|      2|        return Py_NewRef(def);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1788|      2|    } else if (PyErr_Occurred()) {
  ------------------
  |  Branch (1788:16): [True: 0, False: 0]
  ------------------
 1789|      0|        return NULL;
 1790|      0|    } else {
 1791|      0|        PyErr_SetNone(PyExc_StopIteration);
 1792|       |        return NULL;
 1793|      0|    }
 1794|      2|}
bltinmodule.c:builtin_ord:
 2210|  15.1M|{
 2211|  15.1M|    long ord;
 2212|  15.1M|    Py_ssize_t size;
 2213|       |
 2214|  15.1M|    if (PyBytes_Check(c)) {
  ------------------
  |  |   28|  15.1M|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  15.1M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 15.1M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2215|      0|        size = PyBytes_GET_SIZE(c);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2216|      0|        if (size == 1) {
  ------------------
  |  Branch (2216:13): [True: 0, False: 0]
  ------------------
 2217|      0|            ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2218|      0|            return PyLong_FromLong(ord);
 2219|      0|        }
 2220|      0|    }
 2221|  15.1M|    else if (PyUnicode_Check(c)) {
  ------------------
  |  |  103|  15.1M|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  15.1M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 15.1M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2222|  15.1M|        size = PyUnicode_GET_LENGTH(c);
  ------------------
  |  |  299|  15.1M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.1M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2223|  15.1M|        if (size == 1) {
  ------------------
  |  Branch (2223:13): [True: 15.1M, False: 0]
  ------------------
 2224|  15.1M|            ord = (long)PyUnicode_READ_CHAR(c, 0);
  ------------------
  |  |  381|  15.1M|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  15.1M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.1M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2225|  15.1M|            return PyLong_FromLong(ord);
 2226|  15.1M|        }
 2227|  15.1M|    }
 2228|      0|    else if (PyByteArray_Check(c)) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2229|       |        /* XXX Hopefully this is temporary */
 2230|      0|        size = PyByteArray_GET_SIZE(c);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2231|      0|        if (size == 1) {
  ------------------
  |  Branch (2231:13): [True: 0, False: 0]
  ------------------
 2232|      0|            ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2233|      0|            return PyLong_FromLong(ord);
 2234|      0|        }
 2235|      0|    }
 2236|      0|    else {
 2237|      0|        PyErr_Format(PyExc_TypeError,
 2238|      0|                     "ord() expected string of length 1, but " \
 2239|      0|                     "%.200s found", Py_TYPE(c)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2240|      0|        return NULL;
 2241|      0|    }
 2242|       |
 2243|      0|    PyErr_Format(PyExc_TypeError,
 2244|      0|                 "ord() expected a character, "
 2245|      0|                 "but string of length %zd found",
 2246|      0|                 size);
 2247|       |    return NULL;
 2248|  15.1M|}
bltinmodule.c:builtin_pow_impl:
 2269|      1|{
 2270|      1|    return PyNumber_Power(base, exp, mod);
 2271|      1|}
bltinmodule.c:builtin_setattr_impl:
 1820|    212|{
 1821|    212|    if (PyObject_SetAttr(obj, name, value) != 0)
  ------------------
  |  Branch (1821:9): [True: 0, False: 212]
  ------------------
 1822|      0|        return NULL;
 1823|    212|    Py_RETURN_NONE;
  ------------------
  |  |  628|    212|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    212|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 1824|    212|}
bltinmodule.c:builtin_sorted:
 2721|  17.8k|{
 2722|  17.8k|    PyObject *newlist, *v, *seq, *callable;
 2723|       |
 2724|       |    /* Keyword arguments are passed through list.sort() which will check
 2725|       |       them. */
 2726|  17.8k|    if (!_PyArg_UnpackStack(args, nargs, "sorted", 1, 1, &seq))
  ------------------
  |  Branch (2726:9): [True: 0, False: 17.8k]
  ------------------
 2727|      0|        return NULL;
 2728|       |
 2729|  17.8k|    newlist = PySequence_List(seq);
 2730|  17.8k|    if (newlist == NULL)
  ------------------
  |  Branch (2730:9): [True: 0, False: 17.8k]
  ------------------
 2731|      0|        return NULL;
 2732|       |
 2733|  17.8k|    callable = PyObject_GetAttr(newlist, &_Py_ID(sort));
  ------------------
  |  |  936|  17.8k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  17.8k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  17.8k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2734|  17.8k|    if (callable == NULL) {
  ------------------
  |  Branch (2734:9): [True: 0, False: 17.8k]
  ------------------
 2735|      0|        Py_DECREF(newlist);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2736|      0|        return NULL;
 2737|      0|    }
 2738|       |
 2739|  17.8k|    assert(nargs >= 1);
  ------------------
  |  Branch (2739:5): [True: 17.8k, False: 0]
  ------------------
 2740|  17.8k|    v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
 2741|  17.8k|    Py_DECREF(callable);
  ------------------
  |  |  430|  17.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2742|  17.8k|    if (v == NULL) {
  ------------------
  |  Branch (2742:9): [True: 0, False: 17.8k]
  ------------------
 2743|      0|        Py_DECREF(newlist);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2744|      0|        return NULL;
 2745|      0|    }
 2746|  17.8k|    Py_DECREF(v);
  ------------------
  |  |  430|  17.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2747|  17.8k|    return newlist;
 2748|  17.8k|}
bltinmodule.c:builtin_sum_impl:
 2855|    958|{
 2856|    958|    PyObject *result = start;
 2857|    958|    PyObject *temp, *item, *iter;
 2858|       |
 2859|    958|    iter = PyObject_GetIter(iterable);
 2860|    958|    if (iter == NULL)
  ------------------
  |  Branch (2860:9): [True: 0, False: 958]
  ------------------
 2861|      0|        return NULL;
 2862|       |
 2863|    958|    if (result == NULL) {
  ------------------
  |  Branch (2863:9): [True: 958, False: 0]
  ------------------
 2864|    958|        result = PyLong_FromLong(0);
 2865|    958|        if (result == NULL) {
  ------------------
  |  Branch (2865:13): [True: 0, False: 958]
  ------------------
 2866|      0|            Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2867|      0|            return NULL;
 2868|      0|        }
 2869|    958|    } else {
 2870|       |        /* reject string values for 'start' parameter */
 2871|      0|        if (PyUnicode_Check(result)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2872|      0|            PyErr_SetString(PyExc_TypeError,
 2873|      0|                "sum() can't sum strings [use ''.join(seq) instead]");
 2874|      0|            Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2875|      0|            return NULL;
 2876|      0|        }
 2877|      0|        if (PyBytes_Check(result)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2878|      0|            PyErr_SetString(PyExc_TypeError,
 2879|      0|                "sum() can't sum bytes [use b''.join(seq) instead]");
 2880|      0|            Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2881|      0|            return NULL;
 2882|      0|        }
 2883|      0|        if (PyByteArray_Check(result)) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2884|      0|            PyErr_SetString(PyExc_TypeError,
 2885|      0|                "sum() can't sum bytearray [use b''.join(seq) instead]");
 2886|      0|            Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2887|      0|            return NULL;
 2888|      0|        }
 2889|      0|        Py_INCREF(result);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2890|      0|    }
 2891|       |
 2892|    958|#ifndef SLOW_SUM
 2893|       |    /* Fast addition by keeping temporary sums in C instead of new Python objects.
 2894|       |       Assumes all inputs are the same type.  If the assumption fails, default
 2895|       |       to the more general routine.
 2896|       |    */
 2897|    958|    if (PyLong_CheckExact(result)) {
  ------------------
  |  |   14|    958|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    958|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    958|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    958|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 958, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2898|    958|        int overflow;
 2899|    958|        Py_ssize_t i_result = PyLong_AsLongAndOverflow(result, &overflow);
 2900|       |        /* If this already overflowed, don't even enter the loop. */
 2901|    958|        if (overflow == 0) {
  ------------------
  |  Branch (2901:13): [True: 958, False: 0]
  ------------------
 2902|    958|            Py_SETREF(result, NULL);
  ------------------
  |  |  354|    958|    do { \
  |  |  355|    958|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    958|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|    958|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    958|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|    958|        *_tmp_dst_ptr = (src); \
  |  |  358|    958|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|    958|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    958|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    958|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    958|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 958]
  |  |  ------------------
  ------------------
 2903|    958|        }
 2904|  50.3k|        while(result == NULL) {
  ------------------
  |  Branch (2904:15): [True: 50.3k, False: 0]
  ------------------
 2905|  50.3k|            item = PyIter_Next(iter);
 2906|  50.3k|            if (item == NULL) {
  ------------------
  |  Branch (2906:17): [True: 958, False: 49.3k]
  ------------------
 2907|    958|                Py_DECREF(iter);
  ------------------
  |  |  430|    958|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    958|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    958|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2908|    958|                if (PyErr_Occurred())
  ------------------
  |  Branch (2908:21): [True: 0, False: 958]
  ------------------
 2909|      0|                    return NULL;
 2910|    958|                return PyLong_FromSsize_t(i_result);
 2911|    958|            }
 2912|  49.3k|            if (PyLong_CheckExact(item) || PyBool_Check(item)) {
  ------------------
  |  |   14|  49.3k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  98.7k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  49.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  49.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 49.3k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PyLong_CheckExact(item) || PyBool_Check(item)) {
  ------------------
  |  |   12|      0|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2913|  49.3k|                Py_ssize_t b;
 2914|  49.3k|                overflow = 0;
 2915|       |                /* Single digits are common, fast, and cannot overflow on unpacking. */
 2916|  49.3k|                if (_PyLong_IsCompact((PyLongObject *)item)) {
  ------------------
  |  Branch (2916:21): [True: 49.3k, False: 0]
  ------------------
 2917|  49.3k|                    b = _PyLong_CompactValue((PyLongObject *)item);
 2918|  49.3k|                }
 2919|      0|                else {
 2920|      0|                    b = PyLong_AsLongAndOverflow(item, &overflow);
 2921|      0|                }
 2922|  49.3k|                if (overflow == 0 &&
  ------------------
  |  Branch (2922:21): [True: 49.3k, False: 0]
  ------------------
 2923|  49.3k|                    (i_result >= 0 ? (b <= PY_SSIZE_T_MAX - i_result)
  ------------------
  |  |  137|  49.3k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2923:21): [True: 49.3k, False: 0]
  |  Branch (2923:22): [True: 49.3k, False: 0]
  ------------------
 2924|  49.3k|                                   : (b >= PY_SSIZE_T_MIN - i_result)))
  ------------------
  |  |  146|      0|#define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1)
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
 2925|  49.3k|                {
 2926|  49.3k|                    i_result += b;
 2927|  49.3k|                    Py_DECREF(item);
  ------------------
  |  |  430|  49.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  49.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2928|  49.3k|                    continue;
 2929|  49.3k|                }
 2930|  49.3k|            }
 2931|       |            /* Either overflowed or is not an int. Restore real objects and process normally */
 2932|      0|            result = PyLong_FromSsize_t(i_result);
 2933|      0|            if (result == NULL) {
  ------------------
  |  Branch (2933:17): [True: 0, False: 0]
  ------------------
 2934|      0|                Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2935|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2936|      0|                return NULL;
 2937|      0|            }
 2938|      0|            temp = PyNumber_Add(result, item);
 2939|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2940|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2941|      0|            result = temp;
 2942|      0|            if (result == NULL) {
  ------------------
  |  Branch (2942:17): [True: 0, False: 0]
  ------------------
 2943|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2944|      0|                return NULL;
 2945|      0|            }
 2946|      0|        }
 2947|    958|    }
 2948|       |
 2949|      0|    if (PyFloat_CheckExact(result)) {
  ------------------
  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2950|      0|        CompensatedSum re_sum = cs_from_double(PyFloat_AS_DOUBLE(result));
  ------------------
  |  |   18|      0|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2951|      0|        Py_SETREF(result, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2952|      0|        while(result == NULL) {
  ------------------
  |  Branch (2952:15): [True: 0, False: 0]
  ------------------
 2953|      0|            item = PyIter_Next(iter);
 2954|      0|            if (item == NULL) {
  ------------------
  |  Branch (2954:17): [True: 0, False: 0]
  ------------------
 2955|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2956|      0|                if (PyErr_Occurred())
  ------------------
  |  Branch (2956:21): [True: 0, False: 0]
  ------------------
 2957|      0|                    return NULL;
 2958|      0|                return PyFloat_FromDouble(cs_to_double(re_sum));
 2959|      0|            }
 2960|      0|            if (PyFloat_CheckExact(item)) {
  ------------------
  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2961|      0|                re_sum = cs_add(re_sum, PyFloat_AS_DOUBLE(item));
  ------------------
  |  |   18|      0|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2962|      0|                _Py_DECREF_SPECIALIZED(item, _PyFloat_ExactDealloc);
 2963|      0|                continue;
 2964|      0|            }
 2965|      0|            if (PyLong_Check(item)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2966|      0|                double value = PyLong_AsDouble(item);
 2967|      0|                if (value != -1.0 || !PyErr_Occurred()) {
  ------------------
  |  Branch (2967:21): [True: 0, False: 0]
  |  Branch (2967:38): [True: 0, False: 0]
  ------------------
 2968|      0|                    re_sum = cs_add(re_sum, value);
 2969|      0|                    Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2970|      0|                    continue;
 2971|      0|                }
 2972|      0|                else {
 2973|      0|                    Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2974|      0|                    Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2975|      0|                    return NULL;
 2976|      0|                }
 2977|      0|            }
 2978|      0|            result = PyFloat_FromDouble(cs_to_double(re_sum));
 2979|      0|            if (result == NULL) {
  ------------------
  |  Branch (2979:17): [True: 0, False: 0]
  ------------------
 2980|      0|                Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2981|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2982|      0|                return NULL;
 2983|      0|            }
 2984|      0|            temp = PyNumber_Add(result, item);
 2985|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2986|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2987|      0|            result = temp;
 2988|      0|            if (result == NULL) {
  ------------------
  |  Branch (2988:17): [True: 0, False: 0]
  ------------------
 2989|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2990|      0|                return NULL;
 2991|      0|            }
 2992|      0|        }
 2993|      0|    }
 2994|       |
 2995|      0|    if (PyComplex_CheckExact(result)) {
  ------------------
  |  |   14|      0|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2996|      0|        Py_complex z = PyComplex_AsCComplex(result);
 2997|      0|        CompensatedSum re_sum = cs_from_double(z.real);
 2998|      0|        CompensatedSum im_sum = cs_from_double(z.imag);
 2999|      0|        Py_SETREF(result, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3000|      0|        while (result == NULL) {
  ------------------
  |  Branch (3000:16): [True: 0, False: 0]
  ------------------
 3001|      0|            item = PyIter_Next(iter);
 3002|      0|            if (item == NULL) {
  ------------------
  |  Branch (3002:17): [True: 0, False: 0]
  ------------------
 3003|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3004|      0|                if (PyErr_Occurred()) {
  ------------------
  |  Branch (3004:21): [True: 0, False: 0]
  ------------------
 3005|      0|                    return NULL;
 3006|      0|                }
 3007|      0|                return PyComplex_FromDoubles(cs_to_double(re_sum),
 3008|      0|                                             cs_to_double(im_sum));
 3009|      0|            }
 3010|      0|            if (PyComplex_CheckExact(item)) {
  ------------------
  |  |   14|      0|#define PyComplex_CheckExact(op) Py_IS_TYPE((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3011|      0|                z = PyComplex_AsCComplex(item);
 3012|      0|                re_sum = cs_add(re_sum, z.real);
 3013|      0|                im_sum = cs_add(im_sum, z.imag);
 3014|      0|                Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3015|      0|                continue;
 3016|      0|            }
 3017|      0|            if (PyLong_Check(item)) {
  ------------------
  |  |   13|      0|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3018|      0|                double value = PyLong_AsDouble(item);
 3019|      0|                if (value != -1.0 || !PyErr_Occurred()) {
  ------------------
  |  Branch (3019:21): [True: 0, False: 0]
  |  Branch (3019:38): [True: 0, False: 0]
  ------------------
 3020|      0|                    re_sum = cs_add(re_sum, value);
 3021|      0|                    Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3022|      0|                    continue;
 3023|      0|                }
 3024|      0|                else {
 3025|      0|                    Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3026|      0|                    Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3027|      0|                    return NULL;
 3028|      0|                }
 3029|      0|            }
 3030|      0|            if (PyFloat_Check(item)) {
  ------------------
  |  |   16|      0|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3031|      0|                double value = PyFloat_AS_DOUBLE(item);
  ------------------
  |  |   18|      0|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3032|      0|                re_sum = cs_add(re_sum, value);
 3033|      0|                _Py_DECREF_SPECIALIZED(item, _PyFloat_ExactDealloc);
 3034|      0|                continue;
 3035|      0|            }
 3036|      0|            result = PyComplex_FromDoubles(cs_to_double(re_sum),
 3037|      0|                                           cs_to_double(im_sum));
 3038|      0|            if (result == NULL) {
  ------------------
  |  Branch (3038:17): [True: 0, False: 0]
  ------------------
 3039|      0|                Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3040|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3041|      0|                return NULL;
 3042|      0|            }
 3043|      0|            temp = PyNumber_Add(result, item);
 3044|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3045|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3046|      0|            result = temp;
 3047|      0|            if (result == NULL) {
  ------------------
  |  Branch (3047:17): [True: 0, False: 0]
  ------------------
 3048|      0|                Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3049|      0|                return NULL;
 3050|      0|            }
 3051|      0|        }
 3052|      0|    }
 3053|      0|#endif
 3054|       |
 3055|      0|    for(;;) {
 3056|      0|        item = PyIter_Next(iter);
 3057|      0|        if (item == NULL) {
  ------------------
  |  Branch (3057:13): [True: 0, False: 0]
  ------------------
 3058|       |            /* error, or end-of-sequence */
 3059|      0|            if (PyErr_Occurred()) {
  ------------------
  |  Branch (3059:17): [True: 0, False: 0]
  ------------------
 3060|      0|                Py_SETREF(result, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3061|      0|            }
 3062|      0|            break;
 3063|      0|        }
 3064|       |        /* It's tempting to use PyNumber_InPlaceAdd instead of
 3065|       |           PyNumber_Add here, to avoid quadratic running time
 3066|       |           when doing 'sum(list_of_lists, [])'.  However, this
 3067|       |           would produce a change in behaviour: a snippet like
 3068|       |
 3069|       |             empty = []
 3070|       |             sum([[x] for x in range(10)], empty)
 3071|       |
 3072|       |           would change the value of empty. In fact, using
 3073|       |           in-place addition rather that binary addition for
 3074|       |           any of the steps introduces subtle behavior changes:
 3075|       |
 3076|       |           https://bugs.python.org/issue18305 */
 3077|      0|        temp = PyNumber_Add(result, item);
 3078|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3079|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3080|      0|        result = temp;
 3081|      0|        if (result == NULL)
  ------------------
  |  Branch (3081:13): [True: 0, False: 0]
  ------------------
 3082|      0|            break;
 3083|      0|    }
 3084|      0|    Py_DECREF(iter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3085|      0|    return result;
 3086|      0|}
bltinmodule.c:builtin_vars:
 2754|      5|{
 2755|      5|    PyObject *v = NULL;
 2756|      5|    PyObject *d;
 2757|       |
 2758|      5|    if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
  ------------------
  |  Branch (2758:9): [True: 0, False: 5]
  ------------------
 2759|      0|        return NULL;
 2760|      5|    if (v == NULL) {
  ------------------
  |  Branch (2760:9): [True: 1, False: 4]
  ------------------
 2761|      1|        if (_PyEval_GetFrame() != NULL) {
  ------------------
  |  Branch (2761:13): [True: 1, False: 0]
  ------------------
 2762|      1|            d = _PyEval_GetFrameLocals();
 2763|      1|        }
 2764|      0|        else {
 2765|      0|            PyThreadState *tstate = _PyThreadState_GET();
 2766|      0|            d = _PyEval_GetGlobalsFromRunningMain(tstate);
 2767|      0|            if (d == NULL) {
  ------------------
  |  Branch (2767:17): [True: 0, False: 0]
  ------------------
 2768|      0|                if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2768:21): [True: 0, False: 0]
  ------------------
 2769|      0|                    d = _PyEval_GetFrameLocals();
 2770|      0|                    assert(_PyErr_Occurred(tstate));
  ------------------
  |  Branch (2770:21): [True: 0, False: 0]
  ------------------
 2771|      0|                }
 2772|      0|            }
 2773|      0|            else {
 2774|      0|                Py_INCREF(d);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2775|      0|            }
 2776|      0|        }
 2777|      1|    }
 2778|      4|    else {
 2779|      4|        if (PyObject_GetOptionalAttr(v, &_Py_ID(__dict__), &d) == 0) {
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2779:13): [True: 0, False: 4]
  ------------------
 2780|      0|            PyErr_SetString(PyExc_TypeError,
 2781|      0|                "vars() argument must have __dict__ attribute");
 2782|      0|        }
 2783|      4|    }
 2784|      5|    return d;
 2785|      5|}

_Py_HashRandomization_Init:
  554|      2|{
  555|      2|    void *secret = &_Py_HashSecret;
  556|      2|    Py_ssize_t secret_size = sizeof(_Py_HashSecret_t);
  557|       |
  558|      2|    if (_Py_HashSecret_Initialized) {
  ------------------
  |  Branch (558:9): [True: 0, False: 2]
  ------------------
  559|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  560|      0|    }
  561|      2|    _Py_HashSecret_Initialized = 1;
  562|       |
  563|      2|    if (config->use_hash_seed) {
  ------------------
  |  Branch (563:9): [True: 0, False: 2]
  ------------------
  564|      0|        if (config->hash_seed == 0) {
  ------------------
  |  Branch (564:13): [True: 0, False: 0]
  ------------------
  565|       |            /* disable the randomized hash */
  566|      0|            memset(secret, 0, secret_size);
  567|      0|        }
  568|      0|        else {
  569|       |            /* use the specified hash seed */
  570|      0|            lcg_urandom(config->hash_seed, secret, secret_size);
  571|      0|        }
  572|      0|    }
  573|      2|    else {
  574|       |        /* use a random hash seed */
  575|      2|        int res;
  576|       |
  577|       |        /* _PyRandom_Init() is called very early in the Python initialization
  578|       |           and so exceptions cannot be used (use raise=0).
  579|       |
  580|       |           _PyRandom_Init() must not block Python initialization: call
  581|       |           pyurandom() is non-blocking mode (blocking=0): see the PEP 524. */
  582|      2|        res = pyurandom(secret, secret_size, 0, 0);
  583|      2|        if (res < 0) {
  ------------------
  |  Branch (583:13): [True: 0, False: 2]
  ------------------
  584|      0|            return _PyStatus_ERR("failed to get random numbers "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  585|      0|                                 "to initialize Python");
  586|      0|        }
  587|      2|    }
  588|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  589|      2|}
bootstrap_hash.c:pyurandom:
  479|      2|{
  480|      2|#if defined(PY_GETRANDOM) || defined(PY_GETENTROPY)
  481|      2|    int res;
  482|      2|#endif
  483|       |
  484|      2|    if (size < 0) {
  ------------------
  |  Branch (484:9): [True: 0, False: 2]
  ------------------
  485|      0|        if (raise) {
  ------------------
  |  Branch (485:13): [True: 0, False: 0]
  ------------------
  486|      0|            PyErr_Format(PyExc_ValueError,
  487|      0|                         "negative argument not allowed");
  488|      0|        }
  489|      0|        return -1;
  490|      0|    }
  491|       |
  492|      2|    if (size == 0) {
  ------------------
  |  Branch (492:9): [True: 0, False: 2]
  ------------------
  493|      0|        return 0;
  494|      0|    }
  495|       |
  496|       |#ifdef MS_WINDOWS
  497|       |    return win32_urandom((unsigned char *)buffer, size, raise);
  498|       |#else
  499|       |
  500|      2|#if defined(PY_GETRANDOM) || defined(PY_GETENTROPY)
  501|      2|    if (HAVE_GETENTRYPY_GETRANDOM_RUNTIME) {
  ------------------
  |  |   43|      2|#  define HAVE_GETENTRYPY_GETRANDOM_RUNTIME 1
  |  |  ------------------
  |  |  |  Branch (43:45): [True: 2, Folded]
  |  |  ------------------
  ------------------
  502|      2|#ifdef PY_GETRANDOM
  503|      2|        res = py_getrandom(buffer, size, blocking, raise);
  504|       |#else
  505|       |        res = py_getentropy(buffer, size, raise);
  506|       |#endif
  507|      2|        if (res < 0) {
  ------------------
  |  Branch (507:13): [True: 0, False: 2]
  ------------------
  508|      0|            return -1;
  509|      0|        }
  510|      2|        if (res == 1) {
  ------------------
  |  Branch (510:13): [True: 2, False: 0]
  ------------------
  511|      2|            return 0;
  512|      2|        }
  513|       |        /* getrandom() or getentropy() function is not available: failed with
  514|       |           ENOSYS or EPERM. Fall back on reading from /dev/urandom. */
  515|      2|        } /* end of availability block */
  516|      0|#endif
  517|       |
  518|      0|    return dev_urandom(buffer, size, raise);
  519|      2|#endif
  520|      2|}
bootstrap_hash.c:py_getrandom:
   96|      2|{
   97|       |    /* Is getrandom() supported by the running kernel? Set to 0 if getrandom()
   98|       |       failed with ENOSYS or EPERM. Need Linux kernel 3.17 or newer, or Solaris
   99|       |       11.3 or newer */
  100|      2|    static int getrandom_works = 1;
  101|      2|    int flags;
  102|      2|    char *dest;
  103|      2|    long n;
  104|       |
  105|      2|    if (!getrandom_works) {
  ------------------
  |  Branch (105:9): [True: 0, False: 2]
  ------------------
  106|      0|        return 0;
  107|      0|    }
  108|       |
  109|      2|    flags = blocking ? 0 : GRND_NONBLOCK;
  ------------------
  |  Branch (109:13): [True: 0, False: 2]
  ------------------
  110|      2|    dest = buffer;
  111|      4|    while (0 < size) {
  ------------------
  |  Branch (111:12): [True: 2, False: 2]
  ------------------
  112|       |#if defined(__sun) && defined(__SVR4)
  113|       |        /* Issue #26735: On Solaris, getrandom() is limited to returning up
  114|       |           to 1024 bytes. Call it multiple times if more bytes are
  115|       |           requested. */
  116|       |        n = Py_MIN(size, 1024);
  117|       |#else
  118|      2|        n = Py_MIN(size, LONG_MAX);
  ------------------
  |  |  120|      2|       __extension__ \
  |  |  121|      2|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      2|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      2|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  119|      2|#endif
  120|       |
  121|      2|        errno = 0;
  122|      2|#ifdef HAVE_GETRANDOM
  123|      2|        if (raise) {
  ------------------
  |  Branch (123:13): [True: 0, False: 2]
  ------------------
  124|      0|            Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|      0|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|      0|                        PyThreadState *_save; \
  |  |  119|      0|                        _save = PyEval_SaveThread();
  ------------------
  125|      0|            n = getrandom(dest, n, flags);
  126|      0|            Py_END_ALLOW_THREADS
  ------------------
  |  |  122|      0|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|      0|                 }
  ------------------
  127|      0|        }
  128|      2|        else {
  129|      2|            n = getrandom(dest, n, flags);
  130|      2|        }
  131|       |#else
  132|       |        if (raise) {
  133|       |            Py_BEGIN_ALLOW_THREADS
  134|       |            n = syscall(SYS_getrandom, dest, n, flags);
  135|       |            Py_END_ALLOW_THREADS
  136|       |        }
  137|       |        else {
  138|       |            n = syscall(SYS_getrandom, dest, n, flags);
  139|       |        }
  140|       |#  ifdef _Py_MEMORY_SANITIZER
  141|       |        if (n > 0) {
  142|       |             __msan_unpoison(dest, n);
  143|       |        }
  144|       |#  endif
  145|       |#endif
  146|       |
  147|      2|        if (n < 0) {
  ------------------
  |  Branch (147:13): [True: 0, False: 2]
  ------------------
  148|       |            /* ENOSYS: the syscall is not supported by the kernel.
  149|       |               EPERM: the syscall is blocked by a security policy (ex: SECCOMP)
  150|       |               or something else. */
  151|      0|            if (errno == ENOSYS || errno == EPERM) {
  ------------------
  |  Branch (151:17): [True: 0, False: 0]
  |  Branch (151:36): [True: 0, False: 0]
  ------------------
  152|      0|                getrandom_works = 0;
  153|      0|                return 0;
  154|      0|            }
  155|       |
  156|       |            /* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system urandom
  157|       |               is not initialized yet. For _PyRandom_Init(), we ignore the
  158|       |               error and fall back on reading /dev/urandom which never blocks,
  159|       |               even if the system urandom is not initialized yet:
  160|       |               see the PEP 524. */
  161|      0|            if (errno == EAGAIN && !raise && !blocking) {
  ------------------
  |  Branch (161:17): [True: 0, False: 0]
  |  Branch (161:36): [True: 0, False: 0]
  |  Branch (161:46): [True: 0, False: 0]
  ------------------
  162|      0|                return 0;
  163|      0|            }
  164|       |
  165|      0|            if (errno == EINTR) {
  ------------------
  |  Branch (165:17): [True: 0, False: 0]
  ------------------
  166|      0|                if (raise) {
  ------------------
  |  Branch (166:21): [True: 0, False: 0]
  ------------------
  167|      0|                    if (PyErr_CheckSignals()) {
  ------------------
  |  Branch (167:25): [True: 0, False: 0]
  ------------------
  168|      0|                        return -1;
  169|      0|                    }
  170|      0|                }
  171|       |
  172|       |                /* retry getrandom() if it was interrupted by a signal */
  173|      0|                continue;
  174|      0|            }
  175|       |
  176|      0|            if (raise) {
  ------------------
  |  Branch (176:17): [True: 0, False: 0]
  ------------------
  177|      0|                PyErr_SetFromErrno(PyExc_OSError);
  178|      0|            }
  179|      0|            return -1;
  180|      0|        }
  181|       |
  182|      2|        dest += n;
  183|      2|        size -= n;
  184|      2|    }
  185|      2|    return 1;
  186|      2|}

_Py_ReachedRecursionLimitWithMargin:
   30|   132M|{
   31|   132M|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
   32|   132M|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
   33|   132M|#if _Py_STACK_GROWS_DOWN
   34|   132M|    if (here_addr > _tstate->c_stack_soft_limit + margin_count * _PyOS_STACK_MARGIN_BYTES) {
  ------------------
  |  |   57|   132M|#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *))
  |  |  ------------------
  |  |  |  |   56|   132M|#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   132M|#  define _PyOS_LOG2_STACK_MARGIN 11
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (34:9): [True: 132M, False: 0]
  ------------------
   35|       |#else
   36|       |    if (here_addr <= _tstate->c_stack_soft_limit - margin_count * _PyOS_STACK_MARGIN_BYTES) {
   37|       |#endif
   38|   132M|        return 0;
   39|   132M|    }
   40|      0|    if (_tstate->c_stack_hard_limit == 0) {
  ------------------
  |  Branch (40:9): [True: 0, False: 0]
  ------------------
   41|      0|        _Py_InitializeRecursionLimits(tstate);
   42|      0|    }
   43|      0|#if _Py_STACK_GROWS_DOWN
   44|      0|    return here_addr <= _tstate->c_stack_soft_limit + margin_count * _PyOS_STACK_MARGIN_BYTES &&
  ------------------
  |  |   57|      0|#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *))
  |  |  ------------------
  |  |  |  |   56|      0|#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      0|#  define _PyOS_LOG2_STACK_MARGIN 11
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (44:12): [True: 0, False: 0]
  ------------------
   45|      0|        here_addr >= _tstate->c_stack_soft_limit - 2 * _PyOS_STACK_MARGIN_BYTES;
  ------------------
  |  |   57|      0|#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *))
  |  |  ------------------
  |  |  |  |   56|      0|#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      0|#  define _PyOS_LOG2_STACK_MARGIN 11
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (45:9): [True: 0, False: 0]
  ------------------
   46|       |#else
   47|       |    return here_addr > _tstate->c_stack_soft_limit - margin_count * _PyOS_STACK_MARGIN_BYTES &&
   48|       |        here_addr <= _tstate->c_stack_soft_limit + 2 * _PyOS_STACK_MARGIN_BYTES;
   49|       |#endif
   50|   132M|}
_Py_InitializeRecursionLimits:
  224|      2|{
  225|      2|    uintptr_t base, top;
  226|      2|    uintptr_t here_addr = _Py_get_machine_stack_pointer();
  227|      2|    hardware_stack_limits(&base, &top, here_addr);
  228|      2|    assert(top != 0);
  ------------------
  |  Branch (228:5): [True: 2, False: 0]
  ------------------
  229|       |
  230|      2|    tstate_set_stack(tstate, base, top);
  231|      2|    _PyThreadStateImpl *ts = (_PyThreadStateImpl *)tstate;
  232|      2|    ts->c_stack_init_base = base;
  233|      2|    ts->c_stack_init_top = top;
  234|      2|}
PyEval_EvalCode:
  656|    126|{
  657|    126|    PyThreadState *tstate = _PyThreadState_GET();
  658|    126|    if (locals == NULL) {
  ------------------
  |  Branch (658:9): [True: 0, False: 126]
  ------------------
  659|      0|        locals = globals;
  660|      0|    }
  661|    126|    PyObject *builtins = _PyDict_LoadBuiltinsFromGlobals(globals);
  662|    126|    if (builtins == NULL) {
  ------------------
  |  Branch (662:9): [True: 0, False: 126]
  ------------------
  663|      0|        return NULL;
  664|      0|    }
  665|    126|    PyFrameConstructor desc = {
  666|    126|        .fc_globals = globals,
  667|    126|        .fc_builtins = builtins,
  668|    126|        .fc_name = ((PyCodeObject *)co)->co_name,
  669|    126|        .fc_qualname = ((PyCodeObject *)co)->co_name,
  670|    126|        .fc_code = co,
  671|    126|        .fc_defaults = NULL,
  672|    126|        .fc_kwdefaults = NULL,
  673|    126|        .fc_closure = NULL
  674|    126|    };
  675|    126|    PyFunctionObject *func = _PyFunction_FromConstructor(&desc);
  676|    126|    _Py_DECREF_BUILTINS(builtins);
  ------------------
  |  |  399|    126|#  define _Py_DECREF_BUILTINS Py_DECREF
  |  |  ------------------
  |  |  |  |   80|    126|    do { \
  |  |  |  |   81|    126|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|    126|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|    126|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 126]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|    126|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|    126|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|    126|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|    126|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|    126|    if (func == NULL) {
  ------------------
  |  Branch (677:9): [True: 0, False: 126]
  ------------------
  678|      0|        return NULL;
  679|      0|    }
  680|    126|    EVAL_CALL_STAT_INC(EVAL_CALL_LEGACY);
  ------------------
  |  |   79|    126|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
  681|    126|    PyObject *res = _PyEval_Vector(tstate, func, locals, NULL, 0, NULL);
  682|       |    Py_DECREF(func);
  ------------------
  |  |   80|    126|    do { \
  |  |   81|    126|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|    126|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|    126|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|    126|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|    126|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|    126|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 126, False: 0]
  |  |  ------------------
  |  |   88|    126|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|    126|    do { \
  |  |  |  |  113|    126|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|    126|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|    126|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|    126|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|    126|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|    126|            (*dealloc)(op); \
  |  |   91|    126|        } \
  |  |   92|    126|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 126]
  |  |  ------------------
  ------------------
  683|    126|    return res;
  684|    126|}
_Py_VectorCall_StackRefSteal:
  715|   270k|{
  716|   270k|    PyObject *res;
  717|   270k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|   270k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|   270k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  718|   270k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|   270k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 270k]
  |  |  ------------------
  ------------------
  719|      0|        res = NULL;
  720|      0|        goto cleanup;
  721|      0|    }
  722|   270k|    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  723|   270k|    PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
  724|   270k|    int positional_args = total_args;
  725|   270k|    if (kwnames_o != NULL) {
  ------------------
  |  Branch (725:9): [True: 778, False: 269k]
  ------------------
  726|    778|        positional_args -= (int)PyTuple_GET_SIZE(kwnames_o);
  ------------------
  |  |   27|    778|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    778|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    778|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  727|    778|    }
  728|   270k|    res = PyObject_Vectorcall(
  729|   270k|        callable_o, args_o,
  730|   270k|        positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET,
  ------------------
  |  |  287|   270k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   270k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  731|   270k|        kwnames_o);
  732|   270k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|   270k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  733|   270k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (733:5): [True: 270k, False: 0]
  ------------------
  734|   270k|cleanup:
  735|   270k|    PyStackRef_XCLOSE(kwnames);
  736|       |    // arguments is a pointer into the GC visible stack,
  737|       |    // so we must NULL out values as we clear them.
  738|   307k|    for (int i = total_args-1; i >= 0; i--) {
  ------------------
  |  Branch (738:32): [True: 37.1k, False: 270k]
  ------------------
  739|  37.1k|        _PyStackRef tmp = arguments[i];
  740|  37.1k|        arguments[i] = PyStackRef_NULL;
  741|  37.1k|        PyStackRef_CLOSE(tmp);
  742|  37.1k|    }
  743|   270k|    PyStackRef_CLOSE(callable);
  744|   270k|    return res;
  745|   270k|}
_Py_VectorCallInstrumentation_StackRefSteal:
  757|  3.73k|{
  758|  3.73k|    PyObject* res;
  759|  3.73k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|  3.73k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|  3.73k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  760|  3.73k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|  3.73k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 3.73k]
  |  |  ------------------
  ------------------
  761|      0|        res = NULL;
  762|      0|        goto cleanup;
  763|      0|    }
  764|  3.73k|    PyObject* callable_o = PyStackRef_AsPyObjectBorrow(callable);
  765|  3.73k|    PyObject* kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
  766|  3.73k|    int positional_args = total_args;
  767|  3.73k|    if (kwnames_o != NULL) {
  ------------------
  |  Branch (767:9): [True: 116, False: 3.61k]
  ------------------
  768|    116|        positional_args -= (int)PyTuple_GET_SIZE(kwnames_o);
  ------------------
  |  |   27|    116|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    116|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    116|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  769|    116|    }
  770|  3.73k|    res = PyObject_Vectorcall(
  771|  3.73k|        callable_o, args_o,
  772|  3.73k|        positional_args | PY_VECTORCALL_ARGUMENTS_OFFSET,
  ------------------
  |  |  287|  3.73k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|  3.73k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  773|  3.73k|        kwnames_o);
  774|  3.73k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|  3.73k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  775|  3.73k|    if (call_instrumentation) {
  ------------------
  |  Branch (775:9): [True: 0, False: 3.73k]
  ------------------
  776|      0|        PyObject* arg = total_args == 0 ?
  ------------------
  |  Branch (776:25): [True: 0, False: 0]
  ------------------
  777|      0|            &_PyInstrumentation_MISSING : PyStackRef_AsPyObjectBorrow(arguments[0]);
  778|      0|        if (res == NULL) {
  ------------------
  |  Branch (778:13): [True: 0, False: 0]
  ------------------
  779|      0|            _Py_call_instrumentation_exc2(
  780|      0|                tstate, PY_MONITORING_EVENT_C_RAISE,
  ------------------
  |  |   45|      0|#define PY_MONITORING_EVENT_C_RAISE 17
  ------------------
  781|      0|                frame, this_instr, callable_o, arg);
  782|      0|        }
  783|      0|        else {
  784|      0|            int err = _Py_call_instrumentation_2args(
  785|      0|                tstate, PY_MONITORING_EVENT_C_RETURN,
  ------------------
  |  |   44|      0|#define PY_MONITORING_EVENT_C_RETURN 16
  ------------------
  786|      0|                frame, this_instr, callable_o, arg);
  787|      0|            if (err < 0) {
  ------------------
  |  Branch (787:17): [True: 0, False: 0]
  ------------------
  788|      0|                Py_CLEAR(res);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  789|      0|            }
  790|      0|        }
  791|      0|    }
  792|  3.73k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (792:5): [True: 3.73k, False: 0]
  ------------------
  793|  3.73k|cleanup:
  794|  3.73k|    PyStackRef_XCLOSE(kwnames);
  795|       |    // arguments is a pointer into the GC visible stack,
  796|       |    // so we must NULL out values as we clear them.
  797|  11.2k|    for (int i = total_args - 1; i >= 0; i--) {
  ------------------
  |  Branch (797:34): [True: 7.50k, False: 3.73k]
  ------------------
  798|  7.50k|        _PyStackRef tmp = arguments[i];
  799|  7.50k|        arguments[i] = PyStackRef_NULL;
  800|  7.50k|        PyStackRef_CLOSE(tmp);
  801|  7.50k|    }
  802|  3.73k|    PyStackRef_CLOSE(callable);
  803|  3.73k|    return res;
  804|  3.73k|}
_Py_BuiltinCallFast_StackRef:
  811|   532k|{
  812|   532k|    PyObject *res;
  813|   532k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|   532k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|   532k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  814|   532k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|   532k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 532k]
  |  |  ------------------
  ------------------
  815|      0|        return NULL;
  816|      0|    }
  817|   532k|    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  818|   532k|    PyCFunction cfunc = PyCFunction_GET_FUNCTION(callable_o);
  ------------------
  |  |   43|   532k|#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|   532k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   532k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  819|   532k|    res = _PyCFunctionFast_CAST(cfunc)(
  ------------------
  |  |   58|   532k|    _Py_FUNC_CAST(PyCFunctionFast, func)
  |  |  ------------------
  |  |  |  |   47|   532k|#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   532k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  820|   532k|        PyCFunction_GET_SELF(callable_o),
  ------------------
  |  |   52|   532k|#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|   532k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   532k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  821|   532k|        args_o,
  822|   532k|        total_args
  823|   532k|    );
  824|   532k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|   532k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  825|   532k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (825:5): [True: 532k, False: 0]
  ------------------
  826|   532k|    return res;
  827|   532k|}
_Py_BuiltinCallFastWithKeywords_StackRef:
  834|  21.5k|{
  835|  21.5k|    PyObject *res;
  836|  21.5k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|  21.5k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|  21.5k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  837|  21.5k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|  21.5k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 21.5k]
  |  |  ------------------
  ------------------
  838|      0|        return NULL;
  839|      0|    }
  840|  21.5k|    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  841|  21.5k|    PyCFunctionFastWithKeywords cfunc =
  842|  21.5k|        _PyCFunctionFastWithKeywords_CAST(PyCFunction_GET_FUNCTION(callable_o));
  ------------------
  |  |   62|  21.5k|    _Py_FUNC_CAST(PyCFunctionFastWithKeywords, func)
  |  |  ------------------
  |  |  |  |   47|  21.5k|#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  843|  21.5k|    res = cfunc(PyCFunction_GET_SELF(callable_o), args_o, total_args, NULL);
  ------------------
  |  |   52|  21.5k|#define PyCFunction_GET_SELF(func) PyCFunction_GET_SELF(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  844|  21.5k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|  21.5k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  845|  21.5k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (845:5): [True: 21.5k, False: 0]
  ------------------
  846|  21.5k|    return res;
  847|  21.5k|}
_PyCallMethodDescriptorFast_StackRef:
  856|  1.20M|{
  857|  1.20M|    PyObject *res;
  858|  1.20M|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|  1.20M|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|  1.20M|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  859|  1.20M|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|  1.20M|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 1.20M]
  |  |  ------------------
  ------------------
  860|      0|        return NULL;
  861|      0|    }
  862|  1.20M|    assert(self == PyStackRef_AsPyObjectBorrow(arguments[0]));
  ------------------
  |  Branch (862:5): [True: 1.20M, False: 0]
  ------------------
  863|       |
  864|  1.20M|    res = cfunc(self, (args_o + 1), total_args - 1);
  865|  1.20M|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|  1.20M|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  866|  1.20M|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (866:5): [True: 1.20M, False: 0]
  ------------------
  867|  1.20M|    return res;
  868|  1.20M|}
_PyCallMethodDescriptorFastWithKeywords_StackRef:
  877|  73.6k|{
  878|  73.6k|    PyObject *res;
  879|  73.6k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|  73.6k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|  73.6k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  880|  73.6k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|  73.6k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 73.6k]
  |  |  ------------------
  ------------------
  881|      0|        return NULL;
  882|      0|    }
  883|  73.6k|    assert(self == PyStackRef_AsPyObjectBorrow(arguments[0]));
  ------------------
  |  Branch (883:5): [True: 73.6k, False: 0]
  ------------------
  884|       |
  885|  73.6k|    res = cfunc(self, (args_o + 1), total_args-1, NULL);
  886|  73.6k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|  73.6k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  887|  73.6k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (887:5): [True: 73.6k, False: 0]
  ------------------
  888|  73.6k|    return res;
  889|  73.6k|}
_Py_CallBuiltinClass_StackRef:
  896|   207k|{
  897|   207k|    PyObject *res;
  898|   207k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|   207k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|   207k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  899|   207k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|   207k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 207k]
  |  |  ------------------
  ------------------
  900|      0|        return NULL;
  901|      0|    }
  902|   207k|    PyTypeObject *tp = (PyTypeObject *)PyStackRef_AsPyObjectBorrow(callable);
  903|   207k|    res = tp->tp_vectorcall((PyObject *)tp, args_o, total_args | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
  ------------------
  |  |  287|   207k|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  ------------------
  |  |  |  |   34|   207k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  904|   207k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|   207k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  905|   207k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (905:5): [True: 207k, False: 0]
  ------------------
  906|   207k|    return res;
  907|   207k|}
_Py_BuildString_StackRefSteal:
  913|  49.3k|{
  914|  49.3k|    PyObject *res;
  915|  49.3k|    STACKREFS_TO_PYOBJECTS(arguments, total_args, args_o);
  ------------------
  |  |  522|  49.3k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|  49.3k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  916|  49.3k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|  49.3k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 49.3k]
  |  |  ------------------
  ------------------
  917|      0|        res = NULL;
  918|      0|        goto cleanup;
  919|      0|    }
  920|  49.3k|    res = _PyUnicode_JoinArray(&_Py_STR(empty), args_o, total_args);
  ------------------
  |  |  938|  49.3k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  49.3k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  49.3k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|  49.3k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|  49.3k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  922|  49.3k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (922:5): [True: 49.3k, False: 0]
  ------------------
  923|  49.3k|cleanup:
  924|       |    // arguments is a pointer into the GC visible stack,
  925|       |    // so we must NULL out values as we clear them.
  926|   439k|    for (int i = total_args-1; i >= 0; i--) {
  ------------------
  |  Branch (926:32): [True: 390k, False: 49.3k]
  ------------------
  927|   390k|        _PyStackRef tmp = arguments[i];
  928|   390k|        arguments[i] = PyStackRef_NULL;
  929|   390k|        PyStackRef_CLOSE(tmp);
  930|   390k|    }
  931|  49.3k|    return res;
  932|  49.3k|}
_Py_BuildMap_StackRefSteal:
  938|  1.80k|{
  939|  1.80k|    PyObject *res;
  940|  1.80k|    STACKREFS_TO_PYOBJECTS(arguments, half_args*2, args_o);
  ------------------
  |  |  522|  1.80k|    PyObject *NAME##_temp[MAX_STACKREF_SCRATCH+1]; \
  |  |  523|  1.80k|    PyObject **NAME = _PyObjectArray_FromStackRefArray(ARGS, ARG_COUNT, NAME##_temp);
  ------------------
  941|  1.80k|    if (CONVERSION_FAILED(args_o)) {
  ------------------
  |  |  529|  1.80k|#define CONVERSION_FAILED(NAME) ((NAME) == NULL)
  |  |  ------------------
  |  |  |  Branch (529:33): [True: 0, False: 1.80k]
  |  |  ------------------
  ------------------
  942|      0|        res = NULL;
  943|      0|        goto cleanup;
  944|      0|    }
  945|  1.80k|    res = _PyDict_FromItems(
  946|  1.80k|        args_o, 2,
  947|  1.80k|        args_o+1, 2,
  948|  1.80k|        half_args
  949|  1.80k|    );
  950|  1.80k|    STACKREFS_TO_PYOBJECTS_CLEANUP(args_o);
  ------------------
  |  |  527|  1.80k|    _PyObjectArray_Free(NAME - 1, NAME##_temp);
  ------------------
  951|  1.80k|    assert((res != NULL) ^ (PyErr_Occurred() != NULL));
  ------------------
  |  Branch (951:5): [True: 1.80k, False: 0]
  ------------------
  952|  1.80k|cleanup:
  953|       |    // arguments is a pointer into the GC visible stack,
  954|       |    // so we must NULL out values as we clear them.
  955|  3.47k|    for (int i = half_args*2-1; i >= 0; i--) {
  ------------------
  |  Branch (955:33): [True: 1.67k, False: 1.80k]
  ------------------
  956|  1.67k|        _PyStackRef tmp = arguments[i];
  957|  1.67k|        arguments[i] = PyStackRef_NULL;
  958|  1.67k|        PyStackRef_CLOSE(tmp);
  959|  1.67k|    }
  960|  1.80k|    return res;
  961|  1.80k|}
_Py_LoadAttr_StackRefSteal:
  967|  50.6k|{
  968|       |    // Use _PyCStackRefs to ensure that both method and self are visible to
  969|       |    // the GC. Even though self_or_null is on the evaluation stack, it may be
  970|       |    // after the stackpointer and therefore not visible to the GC.
  971|  50.6k|    _PyCStackRef method, self;
  972|  50.6k|    _PyThreadState_PushCStackRef(tstate, &method);
  973|  50.6k|    _PyThreadState_PushCStackRef(tstate, &self);
  974|  50.6k|    self.ref = owner;  // steal reference to owner
  975|       |    // NOTE: method.ref is initialized to PyStackRef_NULL and remains null on
  976|       |    // error, so we don't need to explicitly use the return code from the call.
  977|  50.6k|    _PyObject_GetMethodStackRef(tstate, &self.ref, name, &method.ref);
  978|  50.6k|    *self_or_null = _PyThreadState_PopCStackRefSteal(tstate, &self);
  979|  50.6k|    return _PyThreadState_PopCStackRefSteal(tstate, &method);
  980|  50.6k|}
_PyObjectArray_FromStackRefArray:
 1055|  2.36M|{
 1056|  2.36M|    PyObject **result;
 1057|  2.36M|    if (nargs > MAX_STACKREF_SCRATCH) {
  ------------------
  |  |  518|  2.36M|#define MAX_STACKREF_SCRATCH 10
  ------------------
  |  Branch (1057:9): [True: 34, False: 2.36M]
  ------------------
 1058|       |        // +1 in case PY_VECTORCALL_ARGUMENTS_OFFSET is set.
 1059|     34|        result = PyMem_Malloc((nargs + 1) * sizeof(PyObject *));
 1060|     34|        if (result == NULL) {
  ------------------
  |  Branch (1060:13): [True: 0, False: 34]
  ------------------
 1061|      0|            PyErr_NoMemory();
 1062|      0|            return NULL;
 1063|      0|        }
 1064|     34|    }
 1065|  2.36M|    else {
 1066|  2.36M|        result = scratch;
 1067|  2.36M|    }
 1068|  2.36M|    result++;
 1069|  2.36M|    result[0] = NULL; /* Keep GCC happy */
 1070|  6.64M|    for (int i = 0; i < nargs; i++) {
  ------------------
  |  Branch (1070:21): [True: 4.28M, False: 2.36M]
  ------------------
 1071|  4.28M|        result[i] = PyStackRef_AsPyObjectBorrow(input[i]);
 1072|  4.28M|    }
 1073|  2.36M|    return result;
 1074|  2.36M|}
_PyObjectArray_Free:
 1078|  2.36M|{
 1079|  2.36M|    if (array != scratch) {
  ------------------
  |  Branch (1079:9): [True: 34, False: 2.36M]
  ------------------
 1080|     34|        PyMem_Free(array);
 1081|     34|    }
 1082|  2.36M|}
_PyEval_GetIter:
 1120|    580|{
 1121|    580|    PyTypeObject *tp = PyStackRef_TYPE(iterable);
 1122|    580|    if (tp->_tp_iteritem != NULL) {
  ------------------
  |  Branch (1122:9): [True: 138, False: 442]
  ------------------
 1123|       |        /* Leave iterable on stack and pushed tagged 0 */
 1124|    138|        *index_or_null = PyStackRef_TagInt(0);
 1125|    138|        return iterable;
 1126|    138|    }
 1127|    442|    *index_or_null = PyStackRef_NULL;
 1128|    442|    if (tp->tp_iter == PyObject_SelfIter) {
  ------------------
  |  Branch (1128:9): [True: 16, False: 426]
  ------------------
 1129|     16|        return iterable;
 1130|     16|    }
 1131|    426|    if (yield_from && tp == &PyCoro_Type) {
  ------------------
  |  Branch (1131:9): [True: 0, False: 426]
  |  Branch (1131:23): [True: 0, False: 0]
  ------------------
 1132|      0|        assert(yield_from != GET_ITER_YIELD_FROM);
  ------------------
  |  Branch (1132:9): [True: 0, False: 0]
  ------------------
 1133|      0|        if (yield_from == GET_ITER_YIELD_FROM_CORO_CHECK) {
  ------------------
  |  |   99|      0|#define GET_ITER_YIELD_FROM_CORO_CHECK 3
  ------------------
  |  Branch (1133:13): [True: 0, False: 0]
  ------------------
 1134|       |            /* `iterable` is a coroutine and it is used in a 'yield from'
 1135|       |            * expression of a regular generator. */
 1136|      0|            PyErr_SetString(PyExc_TypeError,
 1137|      0|                            "cannot 'yield from' a coroutine object "
 1138|      0|                            "in a non-coroutine generator");
 1139|      0|            PyStackRef_CLOSE(iterable);
 1140|      0|            return PyStackRef_ERROR;
 1141|      0|        }
 1142|      0|        return iterable;
 1143|      0|    }
 1144|       |    /* Pop iterable, and push iterator then NULL */
 1145|    426|    PyObject *iter_o = PyObject_GetIter(PyStackRef_AsPyObjectBorrow(iterable));
 1146|    426|    PyStackRef_CLOSE(iterable);
 1147|    426|    if (iter_o == NULL) {
  ------------------
  |  Branch (1147:9): [True: 0, False: 426]
  ------------------
 1148|      0|        return PyStackRef_ERROR;
 1149|      0|    }
 1150|    426|    return PyStackRef_FromPyObjectSteal(iter_o);
 1151|    426|}
_PyEval_StoreName:
 1154|  8.57k|{
 1155|  8.57k|    int deletion = PyStackRef_IsNull(v);
  ------------------
  |  |  482|  8.57k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  8.57k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  8.57k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1156|       |
 1157|  8.57k|    if (ns == NULL) {
  ------------------
  |  Branch (1157:9): [True: 0, False: 8.57k]
  ------------------
 1158|      0|        const char *msg = deletion
  ------------------
  |  Branch (1158:27): [True: 0, False: 0]
  ------------------
 1159|      0|            ? "no locals found when deleting %R"
 1160|      0|            : "no locals found when storing %R";
 1161|      0|        _PyErr_Format(tstate, PyExc_SystemError, msg, name);
 1162|      0|        return 1;
 1163|      0|    }
 1164|       |
 1165|  8.57k|    if (deletion) {
  ------------------
  |  Branch (1165:9): [True: 42, False: 8.53k]
  ------------------
 1166|     42|        int error = PyObject_DelItem(ns, name);
 1167|     42|        if (error) {
  ------------------
  |  Branch (1167:13): [True: 0, False: 42]
  ------------------
 1168|      0|            _PyEval_FormatExcCheckArg(tstate, PyExc_NameError,
 1169|      0|                                    NAME_ERROR_MSG,
  ------------------
  |  |  405|      0|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  ------------------
 1170|      0|                                    name);
 1171|      0|        }
 1172|     42|        return error;
 1173|     42|    }
 1174|       |
 1175|  8.53k|    PyObject *v_o = PyStackRef_AsPyObjectBorrow(v);
 1176|  8.53k|    if (PyDict_CheckExact(ns)) {
  ------------------
  |  |   19|  8.53k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |   65|  8.53k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 8.45k, False: 79]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1177|  8.45k|        return PyDict_SetItem(ns, name, v_o);
 1178|  8.45k|    }
 1179|       |
 1180|     79|    return PyObject_SetItem(ns, name, v_o);
 1181|  8.53k|}
_PyEval_EvalFrameDefault:
 1232|   192k|{
 1233|   192k|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|   192k|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
 1234|   192k|    check_invalid_reentrancy();
 1235|   192k|    CALL_STAT_INC(pyeval_calls);
  ------------------
  |  |   76|   192k|#define CALL_STAT_INC(name) ((void)0)
  ------------------
 1236|       |
 1237|   192k|#if USE_COMPUTED_GOTOS && !_Py_TAIL_CALL_INTERP
 1238|       |/* Import the static jump table */
 1239|   192k|#include "opcode_targets.h"
  ------------------
  |  |    1|   192k|#if !_Py_TAIL_CALL_INTERP
  |  |    2|   192k|static void *opcode_targets_table[256] = {
  |  |    3|   192k|    &&TARGET_CACHE,
  |  |    4|   192k|    &&TARGET_BINARY_SLICE,
  |  |    5|   192k|    &&TARGET_BUILD_TEMPLATE,
  |  |    6|   192k|    &&TARGET_BINARY_OP_INPLACE_ADD_UNICODE,
  |  |    7|   192k|    &&TARGET_CALL_FUNCTION_EX,
  |  |    8|   192k|    &&TARGET_CHECK_EG_MATCH,
  |  |    9|   192k|    &&TARGET_CHECK_EXC_MATCH,
  |  |   10|   192k|    &&TARGET_CLEANUP_THROW,
  |  |   11|   192k|    &&TARGET_DELETE_SUBSCR,
  |  |   12|   192k|    &&TARGET_END_FOR,
  |  |   13|   192k|    &&TARGET_END_SEND,
  |  |   14|   192k|    &&TARGET_EXIT_INIT_CHECK,
  |  |   15|   192k|    &&TARGET_FORMAT_SIMPLE,
  |  |   16|   192k|    &&TARGET_FORMAT_WITH_SPEC,
  |  |   17|   192k|    &&TARGET_GET_AITER,
  |  |   18|   192k|    &&TARGET_GET_ANEXT,
  |  |   19|   192k|    &&TARGET_GET_LEN,
  |  |   20|   192k|    &&TARGET_RESERVED,
  |  |   21|   192k|    &&TARGET_INTERPRETER_EXIT,
  |  |   22|   192k|    &&TARGET_LOAD_BUILD_CLASS,
  |  |   23|   192k|    &&TARGET_LOAD_LOCALS,
  |  |   24|   192k|    &&TARGET_MAKE_FUNCTION,
  |  |   25|   192k|    &&TARGET_MATCH_KEYS,
  |  |   26|   192k|    &&TARGET_MATCH_MAPPING,
  |  |   27|   192k|    &&TARGET_MATCH_SEQUENCE,
  |  |   28|   192k|    &&TARGET_NOP,
  |  |   29|   192k|    &&TARGET_NOT_TAKEN,
  |  |   30|   192k|    &&TARGET_POP_EXCEPT,
  |  |   31|   192k|    &&TARGET_POP_ITER,
  |  |   32|   192k|    &&TARGET_POP_TOP,
  |  |   33|   192k|    &&TARGET_PUSH_EXC_INFO,
  |  |   34|   192k|    &&TARGET_PUSH_NULL,
  |  |   35|   192k|    &&TARGET_RETURN_GENERATOR,
  |  |   36|   192k|    &&TARGET_RETURN_VALUE,
  |  |   37|   192k|    &&TARGET_SETUP_ANNOTATIONS,
  |  |   38|   192k|    &&TARGET_STORE_SLICE,
  |  |   39|   192k|    &&TARGET_STORE_SUBSCR,
  |  |   40|   192k|    &&TARGET_TO_BOOL,
  |  |   41|   192k|    &&TARGET_UNARY_INVERT,
  |  |   42|   192k|    &&TARGET_UNARY_NEGATIVE,
  |  |   43|   192k|    &&TARGET_UNARY_NOT,
  |  |   44|   192k|    &&TARGET_WITH_EXCEPT_START,
  |  |   45|   192k|    &&TARGET_BINARY_OP,
  |  |   46|   192k|    &&TARGET_BUILD_INTERPOLATION,
  |  |   47|   192k|    &&TARGET_BUILD_LIST,
  |  |   48|   192k|    &&TARGET_BUILD_MAP,
  |  |   49|   192k|    &&TARGET_BUILD_SET,
  |  |   50|   192k|    &&TARGET_BUILD_SLICE,
  |  |   51|   192k|    &&TARGET_BUILD_STRING,
  |  |   52|   192k|    &&TARGET_BUILD_TUPLE,
  |  |   53|   192k|    &&TARGET_CALL,
  |  |   54|   192k|    &&TARGET_CALL_INTRINSIC_1,
  |  |   55|   192k|    &&TARGET_CALL_INTRINSIC_2,
  |  |   56|   192k|    &&TARGET_CALL_KW,
  |  |   57|   192k|    &&TARGET_COMPARE_OP,
  |  |   58|   192k|    &&TARGET_CONTAINS_OP,
  |  |   59|   192k|    &&TARGET_CONVERT_VALUE,
  |  |   60|   192k|    &&TARGET_COPY,
  |  |   61|   192k|    &&TARGET_COPY_FREE_VARS,
  |  |   62|   192k|    &&TARGET_DELETE_DEREF,
  |  |   63|   192k|    &&TARGET_DELETE_FAST,
  |  |   64|   192k|    &&TARGET_DICT_MERGE,
  |  |   65|   192k|    &&TARGET_DICT_UPDATE,
  |  |   66|   192k|    &&TARGET_END_ASYNC_FOR,
  |  |   67|   192k|    &&TARGET_EXTENDED_ARG,
  |  |   68|   192k|    &&TARGET_FOR_ITER,
  |  |   69|   192k|    &&TARGET_GET_AWAITABLE,
  |  |   70|   192k|    &&TARGET_GET_ITER,
  |  |   71|   192k|    &&TARGET_IMPORT_FROM,
  |  |   72|   192k|    &&TARGET_IMPORT_NAME,
  |  |   73|   192k|    &&TARGET_IS_OP,
  |  |   74|   192k|    &&TARGET_JUMP_BACKWARD,
  |  |   75|   192k|    &&TARGET_JUMP_BACKWARD_NO_INTERRUPT,
  |  |   76|   192k|    &&TARGET_JUMP_FORWARD,
  |  |   77|   192k|    &&TARGET_LIST_APPEND,
  |  |   78|   192k|    &&TARGET_LIST_EXTEND,
  |  |   79|   192k|    &&TARGET_LOAD_ATTR,
  |  |   80|   192k|    &&TARGET_LOAD_COMMON_CONSTANT,
  |  |   81|   192k|    &&TARGET_LOAD_CONST,
  |  |   82|   192k|    &&TARGET_LOAD_DEREF,
  |  |   83|   192k|    &&TARGET_LOAD_FAST,
  |  |   84|   192k|    &&TARGET_LOAD_FAST_AND_CLEAR,
  |  |   85|   192k|    &&TARGET_LOAD_FAST_BORROW,
  |  |   86|   192k|    &&TARGET_LOAD_FAST_BORROW_LOAD_FAST_BORROW,
  |  |   87|   192k|    &&TARGET_LOAD_FAST_CHECK,
  |  |   88|   192k|    &&TARGET_LOAD_FAST_LOAD_FAST,
  |  |   89|   192k|    &&TARGET_LOAD_FROM_DICT_OR_DEREF,
  |  |   90|   192k|    &&TARGET_LOAD_FROM_DICT_OR_GLOBALS,
  |  |   91|   192k|    &&TARGET_LOAD_GLOBAL,
  |  |   92|   192k|    &&TARGET_LOAD_NAME,
  |  |   93|   192k|    &&TARGET_LOAD_SMALL_INT,
  |  |   94|   192k|    &&TARGET_LOAD_SPECIAL,
  |  |   95|   192k|    &&TARGET_LOAD_SUPER_ATTR,
  |  |   96|   192k|    &&TARGET_MAKE_CELL,
  |  |   97|   192k|    &&TARGET_MAP_ADD,
  |  |   98|   192k|    &&TARGET_MATCH_CLASS,
  |  |   99|   192k|    &&TARGET_POP_JUMP_IF_FALSE,
  |  |  100|   192k|    &&TARGET_POP_JUMP_IF_NONE,
  |  |  101|   192k|    &&TARGET_POP_JUMP_IF_NOT_NONE,
  |  |  102|   192k|    &&TARGET_POP_JUMP_IF_TRUE,
  |  |  103|   192k|    &&TARGET_RAISE_VARARGS,
  |  |  104|   192k|    &&TARGET_RERAISE,
  |  |  105|   192k|    &&TARGET_SEND,
  |  |  106|   192k|    &&TARGET_SET_ADD,
  |  |  107|   192k|    &&TARGET_SET_FUNCTION_ATTRIBUTE,
  |  |  108|   192k|    &&TARGET_SET_UPDATE,
  |  |  109|   192k|    &&TARGET_STORE_ATTR,
  |  |  110|   192k|    &&TARGET_STORE_DEREF,
  |  |  111|   192k|    &&TARGET_STORE_FAST,
  |  |  112|   192k|    &&TARGET_STORE_FAST_LOAD_FAST,
  |  |  113|   192k|    &&TARGET_STORE_FAST_STORE_FAST,
  |  |  114|   192k|    &&TARGET_STORE_GLOBAL,
  |  |  115|   192k|    &&TARGET_STORE_NAME,
  |  |  116|   192k|    &&TARGET_SWAP,
  |  |  117|   192k|    &&TARGET_UNPACK_EX,
  |  |  118|   192k|    &&TARGET_UNPACK_SEQUENCE,
  |  |  119|   192k|    &&TARGET_YIELD_VALUE,
  |  |  120|   192k|    &&_unknown_opcode,
  |  |  121|   192k|    &&_unknown_opcode,
  |  |  122|   192k|    &&_unknown_opcode,
  |  |  123|   192k|    &&_unknown_opcode,
  |  |  124|   192k|    &&_unknown_opcode,
  |  |  125|   192k|    &&_unknown_opcode,
  |  |  126|   192k|    &&_unknown_opcode,
  |  |  127|   192k|    &&_unknown_opcode,
  |  |  128|   192k|    &&_unknown_opcode,
  |  |  129|   192k|    &&_unknown_opcode,
  |  |  130|   192k|    &&_unknown_opcode,
  |  |  131|   192k|    &&TARGET_RESUME,
  |  |  132|   192k|    &&TARGET_BINARY_OP_ADD_FLOAT,
  |  |  133|   192k|    &&TARGET_BINARY_OP_ADD_INT,
  |  |  134|   192k|    &&TARGET_BINARY_OP_ADD_UNICODE,
  |  |  135|   192k|    &&TARGET_BINARY_OP_EXTEND,
  |  |  136|   192k|    &&TARGET_BINARY_OP_MULTIPLY_FLOAT,
  |  |  137|   192k|    &&TARGET_BINARY_OP_MULTIPLY_INT,
  |  |  138|   192k|    &&TARGET_BINARY_OP_SUBSCR_DICT,
  |  |  139|   192k|    &&TARGET_BINARY_OP_SUBSCR_GETITEM,
  |  |  140|   192k|    &&TARGET_BINARY_OP_SUBSCR_LIST_INT,
  |  |  141|   192k|    &&TARGET_BINARY_OP_SUBSCR_LIST_SLICE,
  |  |  142|   192k|    &&TARGET_BINARY_OP_SUBSCR_STR_INT,
  |  |  143|   192k|    &&TARGET_BINARY_OP_SUBSCR_TUPLE_INT,
  |  |  144|   192k|    &&TARGET_BINARY_OP_SUBSCR_USTR_INT,
  |  |  145|   192k|    &&TARGET_BINARY_OP_SUBTRACT_FLOAT,
  |  |  146|   192k|    &&TARGET_BINARY_OP_SUBTRACT_INT,
  |  |  147|   192k|    &&TARGET_CALL_ALLOC_AND_ENTER_INIT,
  |  |  148|   192k|    &&TARGET_CALL_BOUND_METHOD_EXACT_ARGS,
  |  |  149|   192k|    &&TARGET_CALL_BOUND_METHOD_GENERAL,
  |  |  150|   192k|    &&TARGET_CALL_BUILTIN_CLASS,
  |  |  151|   192k|    &&TARGET_CALL_BUILTIN_FAST,
  |  |  152|   192k|    &&TARGET_CALL_BUILTIN_FAST_WITH_KEYWORDS,
  |  |  153|   192k|    &&TARGET_CALL_BUILTIN_O,
  |  |  154|   192k|    &&TARGET_CALL_EX_NON_PY_GENERAL,
  |  |  155|   192k|    &&TARGET_CALL_EX_PY,
  |  |  156|   192k|    &&TARGET_CALL_ISINSTANCE,
  |  |  157|   192k|    &&TARGET_CALL_KW_BOUND_METHOD,
  |  |  158|   192k|    &&TARGET_CALL_KW_NON_PY,
  |  |  159|   192k|    &&TARGET_CALL_KW_PY,
  |  |  160|   192k|    &&TARGET_CALL_LEN,
  |  |  161|   192k|    &&TARGET_CALL_LIST_APPEND,
  |  |  162|   192k|    &&TARGET_CALL_METHOD_DESCRIPTOR_FAST,
  |  |  163|   192k|    &&TARGET_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS,
  |  |  164|   192k|    &&TARGET_CALL_METHOD_DESCRIPTOR_NOARGS,
  |  |  165|   192k|    &&TARGET_CALL_METHOD_DESCRIPTOR_O,
  |  |  166|   192k|    &&TARGET_CALL_NON_PY_GENERAL,
  |  |  167|   192k|    &&TARGET_CALL_PY_EXACT_ARGS,
  |  |  168|   192k|    &&TARGET_CALL_PY_GENERAL,
  |  |  169|   192k|    &&TARGET_CALL_STR_1,
  |  |  170|   192k|    &&TARGET_CALL_TUPLE_1,
  |  |  171|   192k|    &&TARGET_CALL_TYPE_1,
  |  |  172|   192k|    &&TARGET_COMPARE_OP_FLOAT,
  |  |  173|   192k|    &&TARGET_COMPARE_OP_INT,
  |  |  174|   192k|    &&TARGET_COMPARE_OP_STR,
  |  |  175|   192k|    &&TARGET_CONTAINS_OP_DICT,
  |  |  176|   192k|    &&TARGET_CONTAINS_OP_SET,
  |  |  177|   192k|    &&TARGET_FOR_ITER_GEN,
  |  |  178|   192k|    &&TARGET_FOR_ITER_LIST,
  |  |  179|   192k|    &&TARGET_FOR_ITER_RANGE,
  |  |  180|   192k|    &&TARGET_FOR_ITER_TUPLE,
  |  |  181|   192k|    &&TARGET_FOR_ITER_VIRTUAL,
  |  |  182|   192k|    &&TARGET_GET_ITER_SELF,
  |  |  183|   192k|    &&TARGET_GET_ITER_VIRTUAL,
  |  |  184|   192k|    &&TARGET_JUMP_BACKWARD_JIT,
  |  |  185|   192k|    &&TARGET_JUMP_BACKWARD_NO_JIT,
  |  |  186|   192k|    &&TARGET_LOAD_ATTR_CLASS,
  |  |  187|   192k|    &&TARGET_LOAD_ATTR_CLASS_WITH_METACLASS_CHECK,
  |  |  188|   192k|    &&TARGET_LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN,
  |  |  189|   192k|    &&TARGET_LOAD_ATTR_INSTANCE_VALUE,
  |  |  190|   192k|    &&TARGET_LOAD_ATTR_METHOD_LAZY_DICT,
  |  |  191|   192k|    &&TARGET_LOAD_ATTR_METHOD_NO_DICT,
  |  |  192|   192k|    &&TARGET_LOAD_ATTR_METHOD_WITH_VALUES,
  |  |  193|   192k|    &&TARGET_LOAD_ATTR_MODULE,
  |  |  194|   192k|    &&TARGET_LOAD_ATTR_NONDESCRIPTOR_NO_DICT,
  |  |  195|   192k|    &&TARGET_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES,
  |  |  196|   192k|    &&TARGET_LOAD_ATTR_PROPERTY,
  |  |  197|   192k|    &&TARGET_LOAD_ATTR_SLOT,
  |  |  198|   192k|    &&TARGET_LOAD_ATTR_WITH_HINT,
  |  |  199|   192k|    &&TARGET_LOAD_GLOBAL_BUILTIN,
  |  |  200|   192k|    &&TARGET_LOAD_GLOBAL_MODULE,
  |  |  201|   192k|    &&TARGET_LOAD_SUPER_ATTR_ATTR,
  |  |  202|   192k|    &&TARGET_LOAD_SUPER_ATTR_METHOD,
  |  |  203|   192k|    &&TARGET_RESUME_CHECK,
  |  |  204|   192k|    &&TARGET_RESUME_CHECK_JIT,
  |  |  205|   192k|    &&TARGET_SEND_ASYNC_GEN,
  |  |  206|   192k|    &&TARGET_SEND_GEN,
  |  |  207|   192k|    &&TARGET_SEND_VIRTUAL,
  |  |  208|   192k|    &&TARGET_STORE_ATTR_INSTANCE_VALUE,
  |  |  209|   192k|    &&TARGET_STORE_ATTR_SLOT,
  |  |  210|   192k|    &&TARGET_STORE_ATTR_WITH_HINT,
  |  |  211|   192k|    &&TARGET_STORE_SUBSCR_DICT,
  |  |  212|   192k|    &&TARGET_STORE_SUBSCR_LIST_INT,
  |  |  213|   192k|    &&TARGET_TO_BOOL_ALWAYS_TRUE,
  |  |  214|   192k|    &&TARGET_TO_BOOL_BOOL,
  |  |  215|   192k|    &&TARGET_TO_BOOL_INT,
  |  |  216|   192k|    &&TARGET_TO_BOOL_LIST,
  |  |  217|   192k|    &&TARGET_TO_BOOL_NONE,
  |  |  218|   192k|    &&TARGET_TO_BOOL_STR,
  |  |  219|   192k|    &&TARGET_UNPACK_SEQUENCE_LIST,
  |  |  220|   192k|    &&TARGET_UNPACK_SEQUENCE_TUPLE,
  |  |  221|   192k|    &&TARGET_UNPACK_SEQUENCE_TWO_TUPLE,
  |  |  222|   192k|    &&_unknown_opcode,
  |  |  223|   192k|    &&_unknown_opcode,
  |  |  224|   192k|    &&_unknown_opcode,
  |  |  225|   192k|    &&_unknown_opcode,
  |  |  226|   192k|    &&_unknown_opcode,
  |  |  227|   192k|    &&_unknown_opcode,
  |  |  228|   192k|    &&_unknown_opcode,
  |  |  229|   192k|    &&_unknown_opcode,
  |  |  230|   192k|    &&_unknown_opcode,
  |  |  231|   192k|    &&_unknown_opcode,
  |  |  232|   192k|    &&_unknown_opcode,
  |  |  233|   192k|    &&_unknown_opcode,
  |  |  234|   192k|    &&_unknown_opcode,
  |  |  235|   192k|    &&_unknown_opcode,
  |  |  236|   192k|    &&TARGET_INSTRUMENTED_END_FOR,
  |  |  237|   192k|    &&TARGET_INSTRUMENTED_POP_ITER,
  |  |  238|   192k|    &&TARGET_INSTRUMENTED_END_SEND,
  |  |  239|   192k|    &&TARGET_INSTRUMENTED_FOR_ITER,
  |  |  240|   192k|    &&TARGET_INSTRUMENTED_INSTRUCTION,
  |  |  241|   192k|    &&TARGET_INSTRUMENTED_JUMP_FORWARD,
  |  |  242|   192k|    &&TARGET_INSTRUMENTED_NOT_TAKEN,
  |  |  243|   192k|    &&TARGET_INSTRUMENTED_POP_JUMP_IF_TRUE,
  |  |  244|   192k|    &&TARGET_INSTRUMENTED_POP_JUMP_IF_FALSE,
  |  |  245|   192k|    &&TARGET_INSTRUMENTED_POP_JUMP_IF_NONE,
  |  |  246|   192k|    &&TARGET_INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
  |  |  247|   192k|    &&TARGET_INSTRUMENTED_RESUME,
  |  |  248|   192k|    &&TARGET_INSTRUMENTED_RETURN_VALUE,
  |  |  249|   192k|    &&TARGET_INSTRUMENTED_YIELD_VALUE,
  |  |  250|   192k|    &&TARGET_INSTRUMENTED_END_ASYNC_FOR,
  |  |  251|   192k|    &&TARGET_INSTRUMENTED_LOAD_SUPER_ATTR,
  |  |  252|   192k|    &&TARGET_INSTRUMENTED_CALL,
  |  |  253|   192k|    &&TARGET_INSTRUMENTED_CALL_KW,
  |  |  254|   192k|    &&TARGET_INSTRUMENTED_CALL_FUNCTION_EX,
  |  |  255|   192k|    &&TARGET_INSTRUMENTED_JUMP_BACKWARD,
  |  |  256|   192k|    &&TARGET_INSTRUMENTED_LINE,
  |  |  257|   192k|    &&TARGET_ENTER_EXECUTOR,
  |  |  258|   192k|    &&TARGET_TRACE_RECORD,
  |  |  259|   192k|};
  |  |  260|       |#if _Py_TIER2
  |  |  261|       |static void *opcode_tracing_targets_table[256] = {
  |  |  262|       |    &&TARGET_TRACE_RECORD,
  |  |  263|       |    &&TARGET_TRACE_RECORD,
  |  |  264|       |    &&TARGET_TRACE_RECORD,
  |  |  265|       |    &&TARGET_TRACE_RECORD,
  |  |  266|       |    &&TARGET_TRACE_RECORD,
  |  |  267|       |    &&TARGET_TRACE_RECORD,
  |  |  268|       |    &&TARGET_TRACE_RECORD,
  |  |  269|       |    &&TARGET_TRACE_RECORD,
  |  |  270|       |    &&TARGET_TRACE_RECORD,
  |  |  271|       |    &&TARGET_TRACE_RECORD,
  |  |  272|       |    &&TARGET_TRACE_RECORD,
  |  |  273|       |    &&TARGET_TRACE_RECORD,
  |  |  274|       |    &&TARGET_TRACE_RECORD,
  |  |  275|       |    &&TARGET_TRACE_RECORD,
  |  |  276|       |    &&TARGET_TRACE_RECORD,
  |  |  277|       |    &&TARGET_TRACE_RECORD,
  |  |  278|       |    &&TARGET_TRACE_RECORD,
  |  |  279|       |    &&TARGET_TRACE_RECORD,
  |  |  280|       |    &&TARGET_TRACE_RECORD,
  |  |  281|       |    &&TARGET_TRACE_RECORD,
  |  |  282|       |    &&TARGET_TRACE_RECORD,
  |  |  283|       |    &&TARGET_TRACE_RECORD,
  |  |  284|       |    &&TARGET_TRACE_RECORD,
  |  |  285|       |    &&TARGET_TRACE_RECORD,
  |  |  286|       |    &&TARGET_TRACE_RECORD,
  |  |  287|       |    &&TARGET_TRACE_RECORD,
  |  |  288|       |    &&TARGET_TRACE_RECORD,
  |  |  289|       |    &&TARGET_TRACE_RECORD,
  |  |  290|       |    &&TARGET_TRACE_RECORD,
  |  |  291|       |    &&TARGET_TRACE_RECORD,
  |  |  292|       |    &&TARGET_TRACE_RECORD,
  |  |  293|       |    &&TARGET_TRACE_RECORD,
  |  |  294|       |    &&TARGET_TRACE_RECORD,
  |  |  295|       |    &&TARGET_TRACE_RECORD,
  |  |  296|       |    &&TARGET_TRACE_RECORD,
  |  |  297|       |    &&TARGET_TRACE_RECORD,
  |  |  298|       |    &&TARGET_TRACE_RECORD,
  |  |  299|       |    &&TARGET_TRACE_RECORD,
  |  |  300|       |    &&TARGET_TRACE_RECORD,
  |  |  301|       |    &&TARGET_TRACE_RECORD,
  |  |  302|       |    &&TARGET_TRACE_RECORD,
  |  |  303|       |    &&TARGET_TRACE_RECORD,
  |  |  304|       |    &&TARGET_TRACE_RECORD,
  |  |  305|       |    &&TARGET_TRACE_RECORD,
  |  |  306|       |    &&TARGET_TRACE_RECORD,
  |  |  307|       |    &&TARGET_TRACE_RECORD,
  |  |  308|       |    &&TARGET_TRACE_RECORD,
  |  |  309|       |    &&TARGET_TRACE_RECORD,
  |  |  310|       |    &&TARGET_TRACE_RECORD,
  |  |  311|       |    &&TARGET_TRACE_RECORD,
  |  |  312|       |    &&TARGET_TRACE_RECORD,
  |  |  313|       |    &&TARGET_TRACE_RECORD,
  |  |  314|       |    &&TARGET_TRACE_RECORD,
  |  |  315|       |    &&TARGET_TRACE_RECORD,
  |  |  316|       |    &&TARGET_TRACE_RECORD,
  |  |  317|       |    &&TARGET_TRACE_RECORD,
  |  |  318|       |    &&TARGET_TRACE_RECORD,
  |  |  319|       |    &&TARGET_TRACE_RECORD,
  |  |  320|       |    &&TARGET_TRACE_RECORD,
  |  |  321|       |    &&TARGET_TRACE_RECORD,
  |  |  322|       |    &&TARGET_TRACE_RECORD,
  |  |  323|       |    &&TARGET_TRACE_RECORD,
  |  |  324|       |    &&TARGET_TRACE_RECORD,
  |  |  325|       |    &&TARGET_TRACE_RECORD,
  |  |  326|       |    &&TARGET_TRACE_RECORD,
  |  |  327|       |    &&TARGET_TRACE_RECORD,
  |  |  328|       |    &&TARGET_TRACE_RECORD,
  |  |  329|       |    &&TARGET_TRACE_RECORD,
  |  |  330|       |    &&TARGET_TRACE_RECORD,
  |  |  331|       |    &&TARGET_TRACE_RECORD,
  |  |  332|       |    &&TARGET_TRACE_RECORD,
  |  |  333|       |    &&TARGET_TRACE_RECORD,
  |  |  334|       |    &&TARGET_TRACE_RECORD,
  |  |  335|       |    &&TARGET_TRACE_RECORD,
  |  |  336|       |    &&TARGET_TRACE_RECORD,
  |  |  337|       |    &&TARGET_TRACE_RECORD,
  |  |  338|       |    &&TARGET_TRACE_RECORD,
  |  |  339|       |    &&TARGET_TRACE_RECORD,
  |  |  340|       |    &&TARGET_TRACE_RECORD,
  |  |  341|       |    &&TARGET_TRACE_RECORD,
  |  |  342|       |    &&TARGET_TRACE_RECORD,
  |  |  343|       |    &&TARGET_TRACE_RECORD,
  |  |  344|       |    &&TARGET_TRACE_RECORD,
  |  |  345|       |    &&TARGET_TRACE_RECORD,
  |  |  346|       |    &&TARGET_TRACE_RECORD,
  |  |  347|       |    &&TARGET_TRACE_RECORD,
  |  |  348|       |    &&TARGET_TRACE_RECORD,
  |  |  349|       |    &&TARGET_TRACE_RECORD,
  |  |  350|       |    &&TARGET_TRACE_RECORD,
  |  |  351|       |    &&TARGET_TRACE_RECORD,
  |  |  352|       |    &&TARGET_TRACE_RECORD,
  |  |  353|       |    &&TARGET_TRACE_RECORD,
  |  |  354|       |    &&TARGET_TRACE_RECORD,
  |  |  355|       |    &&TARGET_TRACE_RECORD,
  |  |  356|       |    &&TARGET_TRACE_RECORD,
  |  |  357|       |    &&TARGET_TRACE_RECORD,
  |  |  358|       |    &&TARGET_TRACE_RECORD,
  |  |  359|       |    &&TARGET_TRACE_RECORD,
  |  |  360|       |    &&TARGET_TRACE_RECORD,
  |  |  361|       |    &&TARGET_TRACE_RECORD,
  |  |  362|       |    &&TARGET_TRACE_RECORD,
  |  |  363|       |    &&TARGET_TRACE_RECORD,
  |  |  364|       |    &&TARGET_TRACE_RECORD,
  |  |  365|       |    &&TARGET_TRACE_RECORD,
  |  |  366|       |    &&TARGET_TRACE_RECORD,
  |  |  367|       |    &&TARGET_TRACE_RECORD,
  |  |  368|       |    &&TARGET_TRACE_RECORD,
  |  |  369|       |    &&TARGET_TRACE_RECORD,
  |  |  370|       |    &&TARGET_TRACE_RECORD,
  |  |  371|       |    &&TARGET_TRACE_RECORD,
  |  |  372|       |    &&TARGET_TRACE_RECORD,
  |  |  373|       |    &&TARGET_TRACE_RECORD,
  |  |  374|       |    &&TARGET_TRACE_RECORD,
  |  |  375|       |    &&TARGET_TRACE_RECORD,
  |  |  376|       |    &&TARGET_TRACE_RECORD,
  |  |  377|       |    &&TARGET_TRACE_RECORD,
  |  |  378|       |    &&TARGET_TRACE_RECORD,
  |  |  379|       |    &&_unknown_opcode,
  |  |  380|       |    &&_unknown_opcode,
  |  |  381|       |    &&_unknown_opcode,
  |  |  382|       |    &&_unknown_opcode,
  |  |  383|       |    &&_unknown_opcode,
  |  |  384|       |    &&_unknown_opcode,
  |  |  385|       |    &&_unknown_opcode,
  |  |  386|       |    &&_unknown_opcode,
  |  |  387|       |    &&_unknown_opcode,
  |  |  388|       |    &&_unknown_opcode,
  |  |  389|       |    &&_unknown_opcode,
  |  |  390|       |    &&TARGET_TRACE_RECORD,
  |  |  391|       |    &&TARGET_TRACE_RECORD,
  |  |  392|       |    &&TARGET_TRACE_RECORD,
  |  |  393|       |    &&TARGET_TRACE_RECORD,
  |  |  394|       |    &&TARGET_TRACE_RECORD,
  |  |  395|       |    &&TARGET_TRACE_RECORD,
  |  |  396|       |    &&TARGET_TRACE_RECORD,
  |  |  397|       |    &&TARGET_TRACE_RECORD,
  |  |  398|       |    &&TARGET_TRACE_RECORD,
  |  |  399|       |    &&TARGET_TRACE_RECORD,
  |  |  400|       |    &&TARGET_TRACE_RECORD,
  |  |  401|       |    &&TARGET_TRACE_RECORD,
  |  |  402|       |    &&TARGET_TRACE_RECORD,
  |  |  403|       |    &&TARGET_TRACE_RECORD,
  |  |  404|       |    &&TARGET_TRACE_RECORD,
  |  |  405|       |    &&TARGET_TRACE_RECORD,
  |  |  406|       |    &&TARGET_TRACE_RECORD,
  |  |  407|       |    &&TARGET_TRACE_RECORD,
  |  |  408|       |    &&TARGET_TRACE_RECORD,
  |  |  409|       |    &&TARGET_TRACE_RECORD,
  |  |  410|       |    &&TARGET_TRACE_RECORD,
  |  |  411|       |    &&TARGET_TRACE_RECORD,
  |  |  412|       |    &&TARGET_TRACE_RECORD,
  |  |  413|       |    &&TARGET_TRACE_RECORD,
  |  |  414|       |    &&TARGET_TRACE_RECORD,
  |  |  415|       |    &&TARGET_TRACE_RECORD,
  |  |  416|       |    &&TARGET_TRACE_RECORD,
  |  |  417|       |    &&TARGET_TRACE_RECORD,
  |  |  418|       |    &&TARGET_TRACE_RECORD,
  |  |  419|       |    &&TARGET_TRACE_RECORD,
  |  |  420|       |    &&TARGET_TRACE_RECORD,
  |  |  421|       |    &&TARGET_TRACE_RECORD,
  |  |  422|       |    &&TARGET_TRACE_RECORD,
  |  |  423|       |    &&TARGET_TRACE_RECORD,
  |  |  424|       |    &&TARGET_TRACE_RECORD,
  |  |  425|       |    &&TARGET_TRACE_RECORD,
  |  |  426|       |    &&TARGET_TRACE_RECORD,
  |  |  427|       |    &&TARGET_TRACE_RECORD,
  |  |  428|       |    &&TARGET_TRACE_RECORD,
  |  |  429|       |    &&TARGET_TRACE_RECORD,
  |  |  430|       |    &&TARGET_TRACE_RECORD,
  |  |  431|       |    &&TARGET_TRACE_RECORD,
  |  |  432|       |    &&TARGET_TRACE_RECORD,
  |  |  433|       |    &&TARGET_TRACE_RECORD,
  |  |  434|       |    &&TARGET_TRACE_RECORD,
  |  |  435|       |    &&TARGET_TRACE_RECORD,
  |  |  436|       |    &&TARGET_TRACE_RECORD,
  |  |  437|       |    &&TARGET_TRACE_RECORD,
  |  |  438|       |    &&TARGET_TRACE_RECORD,
  |  |  439|       |    &&TARGET_TRACE_RECORD,
  |  |  440|       |    &&TARGET_TRACE_RECORD,
  |  |  441|       |    &&TARGET_TRACE_RECORD,
  |  |  442|       |    &&TARGET_TRACE_RECORD,
  |  |  443|       |    &&TARGET_TRACE_RECORD,
  |  |  444|       |    &&TARGET_TRACE_RECORD,
  |  |  445|       |    &&TARGET_TRACE_RECORD,
  |  |  446|       |    &&TARGET_TRACE_RECORD,
  |  |  447|       |    &&TARGET_TRACE_RECORD,
  |  |  448|       |    &&TARGET_TRACE_RECORD,
  |  |  449|       |    &&TARGET_TRACE_RECORD,
  |  |  450|       |    &&TARGET_TRACE_RECORD,
  |  |  451|       |    &&TARGET_TRACE_RECORD,
  |  |  452|       |    &&TARGET_TRACE_RECORD,
  |  |  453|       |    &&TARGET_TRACE_RECORD,
  |  |  454|       |    &&TARGET_TRACE_RECORD,
  |  |  455|       |    &&TARGET_TRACE_RECORD,
  |  |  456|       |    &&TARGET_TRACE_RECORD,
  |  |  457|       |    &&TARGET_TRACE_RECORD,
  |  |  458|       |    &&TARGET_TRACE_RECORD,
  |  |  459|       |    &&TARGET_TRACE_RECORD,
  |  |  460|       |    &&TARGET_TRACE_RECORD,
  |  |  461|       |    &&TARGET_TRACE_RECORD,
  |  |  462|       |    &&TARGET_TRACE_RECORD,
  |  |  463|       |    &&TARGET_TRACE_RECORD,
  |  |  464|       |    &&TARGET_TRACE_RECORD,
  |  |  465|       |    &&TARGET_TRACE_RECORD,
  |  |  466|       |    &&TARGET_TRACE_RECORD,
  |  |  467|       |    &&TARGET_TRACE_RECORD,
  |  |  468|       |    &&TARGET_TRACE_RECORD,
  |  |  469|       |    &&TARGET_TRACE_RECORD,
  |  |  470|       |    &&TARGET_TRACE_RECORD,
  |  |  471|       |    &&TARGET_TRACE_RECORD,
  |  |  472|       |    &&TARGET_TRACE_RECORD,
  |  |  473|       |    &&TARGET_TRACE_RECORD,
  |  |  474|       |    &&TARGET_TRACE_RECORD,
  |  |  475|       |    &&TARGET_TRACE_RECORD,
  |  |  476|       |    &&TARGET_TRACE_RECORD,
  |  |  477|       |    &&TARGET_TRACE_RECORD,
  |  |  478|       |    &&TARGET_TRACE_RECORD,
  |  |  479|       |    &&TARGET_TRACE_RECORD,
  |  |  480|       |    &&TARGET_TRACE_RECORD,
  |  |  481|       |    &&_unknown_opcode,
  |  |  482|       |    &&_unknown_opcode,
  |  |  483|       |    &&_unknown_opcode,
  |  |  484|       |    &&_unknown_opcode,
  |  |  485|       |    &&_unknown_opcode,
  |  |  486|       |    &&_unknown_opcode,
  |  |  487|       |    &&_unknown_opcode,
  |  |  488|       |    &&_unknown_opcode,
  |  |  489|       |    &&_unknown_opcode,
  |  |  490|       |    &&_unknown_opcode,
  |  |  491|       |    &&_unknown_opcode,
  |  |  492|       |    &&_unknown_opcode,
  |  |  493|       |    &&_unknown_opcode,
  |  |  494|       |    &&_unknown_opcode,
  |  |  495|       |    &&TARGET_TRACE_RECORD,
  |  |  496|       |    &&TARGET_TRACE_RECORD,
  |  |  497|       |    &&TARGET_TRACE_RECORD,
  |  |  498|       |    &&TARGET_TRACE_RECORD,
  |  |  499|       |    &&TARGET_TRACE_RECORD,
  |  |  500|       |    &&TARGET_TRACE_RECORD,
  |  |  501|       |    &&TARGET_TRACE_RECORD,
  |  |  502|       |    &&TARGET_TRACE_RECORD,
  |  |  503|       |    &&TARGET_TRACE_RECORD,
  |  |  504|       |    &&TARGET_TRACE_RECORD,
  |  |  505|       |    &&TARGET_TRACE_RECORD,
  |  |  506|       |    &&TARGET_TRACE_RECORD,
  |  |  507|       |    &&TARGET_TRACE_RECORD,
  |  |  508|       |    &&TARGET_TRACE_RECORD,
  |  |  509|       |    &&TARGET_TRACE_RECORD,
  |  |  510|       |    &&TARGET_TRACE_RECORD,
  |  |  511|       |    &&TARGET_TRACE_RECORD,
  |  |  512|       |    &&TARGET_TRACE_RECORD,
  |  |  513|       |    &&TARGET_TRACE_RECORD,
  |  |  514|       |    &&TARGET_TRACE_RECORD,
  |  |  515|       |    &&TARGET_TRACE_RECORD,
  |  |  516|       |    &&TARGET_TRACE_RECORD,
  |  |  517|       |    &&TARGET_TRACE_RECORD,
  |  |  518|       |};
  |  |  519|       |#endif
  |  |  520|       |#else /* _Py_TAIL_CALL_INTERP */
  |  |  521|       |static py_tail_call_funcptr instruction_funcptr_handler_table[256];
  |  |  522|       |
  |  |  523|       |static py_tail_call_funcptr instruction_funcptr_tracing_table[256];
  |  |  524|       |
  |  |  525|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_pop_2_error(TAIL_CALL_PARAMS);
  |  |  526|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_pop_1_error(TAIL_CALL_PARAMS);
  |  |  527|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_error(TAIL_CALL_PARAMS);
  |  |  528|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_exception_unwind(TAIL_CALL_PARAMS);
  |  |  529|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_exit_unwind(TAIL_CALL_PARAMS);
  |  |  530|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_exit_unwind_notrace(TAIL_CALL_PARAMS);
  |  |  531|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_start_frame(TAIL_CALL_PARAMS);
  |  |  532|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_stop_tracing(TAIL_CALL_PARAMS);
  |  |  533|       |
  |  |  534|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP(TAIL_CALL_PARAMS);
  |  |  535|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_ADD_FLOAT(TAIL_CALL_PARAMS);
  |  |  536|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_ADD_INT(TAIL_CALL_PARAMS);
  |  |  537|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_ADD_UNICODE(TAIL_CALL_PARAMS);
  |  |  538|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_EXTEND(TAIL_CALL_PARAMS);
  |  |  539|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_INPLACE_ADD_UNICODE(TAIL_CALL_PARAMS);
  |  |  540|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_MULTIPLY_FLOAT(TAIL_CALL_PARAMS);
  |  |  541|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_MULTIPLY_INT(TAIL_CALL_PARAMS);
  |  |  542|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_DICT(TAIL_CALL_PARAMS);
  |  |  543|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_GETITEM(TAIL_CALL_PARAMS);
  |  |  544|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_LIST_INT(TAIL_CALL_PARAMS);
  |  |  545|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_LIST_SLICE(TAIL_CALL_PARAMS);
  |  |  546|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_STR_INT(TAIL_CALL_PARAMS);
  |  |  547|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_TUPLE_INT(TAIL_CALL_PARAMS);
  |  |  548|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBSCR_USTR_INT(TAIL_CALL_PARAMS);
  |  |  549|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBTRACT_FLOAT(TAIL_CALL_PARAMS);
  |  |  550|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_OP_SUBTRACT_INT(TAIL_CALL_PARAMS);
  |  |  551|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BINARY_SLICE(TAIL_CALL_PARAMS);
  |  |  552|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_INTERPOLATION(TAIL_CALL_PARAMS);
  |  |  553|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_LIST(TAIL_CALL_PARAMS);
  |  |  554|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_MAP(TAIL_CALL_PARAMS);
  |  |  555|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_SET(TAIL_CALL_PARAMS);
  |  |  556|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_SLICE(TAIL_CALL_PARAMS);
  |  |  557|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_STRING(TAIL_CALL_PARAMS);
  |  |  558|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_TEMPLATE(TAIL_CALL_PARAMS);
  |  |  559|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_BUILD_TUPLE(TAIL_CALL_PARAMS);
  |  |  560|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CACHE(TAIL_CALL_PARAMS);
  |  |  561|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL(TAIL_CALL_PARAMS);
  |  |  562|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_ALLOC_AND_ENTER_INIT(TAIL_CALL_PARAMS);
  |  |  563|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BOUND_METHOD_EXACT_ARGS(TAIL_CALL_PARAMS);
  |  |  564|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BOUND_METHOD_GENERAL(TAIL_CALL_PARAMS);
  |  |  565|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_CLASS(TAIL_CALL_PARAMS);
  |  |  566|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_FAST(TAIL_CALL_PARAMS);
  |  |  567|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_FAST_WITH_KEYWORDS(TAIL_CALL_PARAMS);
  |  |  568|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_BUILTIN_O(TAIL_CALL_PARAMS);
  |  |  569|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_EX_NON_PY_GENERAL(TAIL_CALL_PARAMS);
  |  |  570|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_EX_PY(TAIL_CALL_PARAMS);
  |  |  571|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_FUNCTION_EX(TAIL_CALL_PARAMS);
  |  |  572|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_INTRINSIC_1(TAIL_CALL_PARAMS);
  |  |  573|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_INTRINSIC_2(TAIL_CALL_PARAMS);
  |  |  574|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_ISINSTANCE(TAIL_CALL_PARAMS);
  |  |  575|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_KW(TAIL_CALL_PARAMS);
  |  |  576|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_KW_BOUND_METHOD(TAIL_CALL_PARAMS);
  |  |  577|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_KW_NON_PY(TAIL_CALL_PARAMS);
  |  |  578|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_KW_PY(TAIL_CALL_PARAMS);
  |  |  579|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_LEN(TAIL_CALL_PARAMS);
  |  |  580|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_LIST_APPEND(TAIL_CALL_PARAMS);
  |  |  581|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_METHOD_DESCRIPTOR_FAST(TAIL_CALL_PARAMS);
  |  |  582|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS(TAIL_CALL_PARAMS);
  |  |  583|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_METHOD_DESCRIPTOR_NOARGS(TAIL_CALL_PARAMS);
  |  |  584|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_METHOD_DESCRIPTOR_O(TAIL_CALL_PARAMS);
  |  |  585|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_NON_PY_GENERAL(TAIL_CALL_PARAMS);
  |  |  586|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_PY_EXACT_ARGS(TAIL_CALL_PARAMS);
  |  |  587|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_PY_GENERAL(TAIL_CALL_PARAMS);
  |  |  588|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_STR_1(TAIL_CALL_PARAMS);
  |  |  589|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_TUPLE_1(TAIL_CALL_PARAMS);
  |  |  590|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CALL_TYPE_1(TAIL_CALL_PARAMS);
  |  |  591|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CHECK_EG_MATCH(TAIL_CALL_PARAMS);
  |  |  592|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CHECK_EXC_MATCH(TAIL_CALL_PARAMS);
  |  |  593|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CLEANUP_THROW(TAIL_CALL_PARAMS);
  |  |  594|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP(TAIL_CALL_PARAMS);
  |  |  595|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP_FLOAT(TAIL_CALL_PARAMS);
  |  |  596|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP_INT(TAIL_CALL_PARAMS);
  |  |  597|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COMPARE_OP_STR(TAIL_CALL_PARAMS);
  |  |  598|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CONTAINS_OP(TAIL_CALL_PARAMS);
  |  |  599|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CONTAINS_OP_DICT(TAIL_CALL_PARAMS);
  |  |  600|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CONTAINS_OP_SET(TAIL_CALL_PARAMS);
  |  |  601|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_CONVERT_VALUE(TAIL_CALL_PARAMS);
  |  |  602|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COPY(TAIL_CALL_PARAMS);
  |  |  603|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_COPY_FREE_VARS(TAIL_CALL_PARAMS);
  |  |  604|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_DELETE_DEREF(TAIL_CALL_PARAMS);
  |  |  605|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_DELETE_FAST(TAIL_CALL_PARAMS);
  |  |  606|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_DELETE_SUBSCR(TAIL_CALL_PARAMS);
  |  |  607|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_DICT_MERGE(TAIL_CALL_PARAMS);
  |  |  608|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_DICT_UPDATE(TAIL_CALL_PARAMS);
  |  |  609|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_END_ASYNC_FOR(TAIL_CALL_PARAMS);
  |  |  610|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_END_FOR(TAIL_CALL_PARAMS);
  |  |  611|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_END_SEND(TAIL_CALL_PARAMS);
  |  |  612|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_ENTER_EXECUTOR(TAIL_CALL_PARAMS);
  |  |  613|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_EXIT_INIT_CHECK(TAIL_CALL_PARAMS);
  |  |  614|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_EXTENDED_ARG(TAIL_CALL_PARAMS);
  |  |  615|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FORMAT_SIMPLE(TAIL_CALL_PARAMS);
  |  |  616|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FORMAT_WITH_SPEC(TAIL_CALL_PARAMS);
  |  |  617|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER(TAIL_CALL_PARAMS);
  |  |  618|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_GEN(TAIL_CALL_PARAMS);
  |  |  619|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_LIST(TAIL_CALL_PARAMS);
  |  |  620|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_RANGE(TAIL_CALL_PARAMS);
  |  |  621|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_TUPLE(TAIL_CALL_PARAMS);
  |  |  622|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_FOR_ITER_VIRTUAL(TAIL_CALL_PARAMS);
  |  |  623|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AITER(TAIL_CALL_PARAMS);
  |  |  624|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ANEXT(TAIL_CALL_PARAMS);
  |  |  625|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_AWAITABLE(TAIL_CALL_PARAMS);
  |  |  626|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER(TAIL_CALL_PARAMS);
  |  |  627|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_SELF(TAIL_CALL_PARAMS);
  |  |  628|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_ITER_VIRTUAL(TAIL_CALL_PARAMS);
  |  |  629|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_GET_LEN(TAIL_CALL_PARAMS);
  |  |  630|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_FROM(TAIL_CALL_PARAMS);
  |  |  631|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IMPORT_NAME(TAIL_CALL_PARAMS);
  |  |  632|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_CALL(TAIL_CALL_PARAMS);
  |  |  633|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_CALL_FUNCTION_EX(TAIL_CALL_PARAMS);
  |  |  634|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_CALL_KW(TAIL_CALL_PARAMS);
  |  |  635|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_END_ASYNC_FOR(TAIL_CALL_PARAMS);
  |  |  636|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_END_FOR(TAIL_CALL_PARAMS);
  |  |  637|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_END_SEND(TAIL_CALL_PARAMS);
  |  |  638|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_FOR_ITER(TAIL_CALL_PARAMS);
  |  |  639|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_INSTRUCTION(TAIL_CALL_PARAMS);
  |  |  640|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_JUMP_BACKWARD(TAIL_CALL_PARAMS);
  |  |  641|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_JUMP_FORWARD(TAIL_CALL_PARAMS);
  |  |  642|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_LINE(TAIL_CALL_PARAMS);
  |  |  643|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_LOAD_SUPER_ATTR(TAIL_CALL_PARAMS);
  |  |  644|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_NOT_TAKEN(TAIL_CALL_PARAMS);
  |  |  645|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_POP_ITER(TAIL_CALL_PARAMS);
  |  |  646|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_FALSE(TAIL_CALL_PARAMS);
  |  |  647|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_NONE(TAIL_CALL_PARAMS);
  |  |  648|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_NOT_NONE(TAIL_CALL_PARAMS);
  |  |  649|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_TRUE(TAIL_CALL_PARAMS);
  |  |  650|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_RESUME(TAIL_CALL_PARAMS);
  |  |  651|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_RETURN_VALUE(TAIL_CALL_PARAMS);
  |  |  652|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INSTRUMENTED_YIELD_VALUE(TAIL_CALL_PARAMS);
  |  |  653|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_INTERPRETER_EXIT(TAIL_CALL_PARAMS);
  |  |  654|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_IS_OP(TAIL_CALL_PARAMS);
  |  |  655|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_JUMP_BACKWARD(TAIL_CALL_PARAMS);
  |  |  656|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_JUMP_BACKWARD_JIT(TAIL_CALL_PARAMS);
  |  |  657|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_JUMP_BACKWARD_NO_INTERRUPT(TAIL_CALL_PARAMS);
  |  |  658|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_JUMP_BACKWARD_NO_JIT(TAIL_CALL_PARAMS);
  |  |  659|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_JUMP_FORWARD(TAIL_CALL_PARAMS);
  |  |  660|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LIST_APPEND(TAIL_CALL_PARAMS);
  |  |  661|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LIST_EXTEND(TAIL_CALL_PARAMS);
  |  |  662|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR(TAIL_CALL_PARAMS);
  |  |  663|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_CLASS(TAIL_CALL_PARAMS);
  |  |  664|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_CLASS_WITH_METACLASS_CHECK(TAIL_CALL_PARAMS);
  |  |  665|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN(TAIL_CALL_PARAMS);
  |  |  666|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_INSTANCE_VALUE(TAIL_CALL_PARAMS);
  |  |  667|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_METHOD_LAZY_DICT(TAIL_CALL_PARAMS);
  |  |  668|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_METHOD_NO_DICT(TAIL_CALL_PARAMS);
  |  |  669|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_METHOD_WITH_VALUES(TAIL_CALL_PARAMS);
  |  |  670|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_MODULE(TAIL_CALL_PARAMS);
  |  |  671|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_NONDESCRIPTOR_NO_DICT(TAIL_CALL_PARAMS);
  |  |  672|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES(TAIL_CALL_PARAMS);
  |  |  673|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_PROPERTY(TAIL_CALL_PARAMS);
  |  |  674|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_SLOT(TAIL_CALL_PARAMS);
  |  |  675|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_ATTR_WITH_HINT(TAIL_CALL_PARAMS);
  |  |  676|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_BUILD_CLASS(TAIL_CALL_PARAMS);
  |  |  677|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_COMMON_CONSTANT(TAIL_CALL_PARAMS);
  |  |  678|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_CONST(TAIL_CALL_PARAMS);
  |  |  679|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_DEREF(TAIL_CALL_PARAMS);
  |  |  680|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FAST(TAIL_CALL_PARAMS);
  |  |  681|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FAST_AND_CLEAR(TAIL_CALL_PARAMS);
  |  |  682|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FAST_BORROW(TAIL_CALL_PARAMS);
  |  |  683|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FAST_BORROW_LOAD_FAST_BORROW(TAIL_CALL_PARAMS);
  |  |  684|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FAST_CHECK(TAIL_CALL_PARAMS);
  |  |  685|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FAST_LOAD_FAST(TAIL_CALL_PARAMS);
  |  |  686|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FROM_DICT_OR_DEREF(TAIL_CALL_PARAMS);
  |  |  687|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_FROM_DICT_OR_GLOBALS(TAIL_CALL_PARAMS);
  |  |  688|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_GLOBAL(TAIL_CALL_PARAMS);
  |  |  689|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_GLOBAL_BUILTIN(TAIL_CALL_PARAMS);
  |  |  690|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_GLOBAL_MODULE(TAIL_CALL_PARAMS);
  |  |  691|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_LOCALS(TAIL_CALL_PARAMS);
  |  |  692|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_NAME(TAIL_CALL_PARAMS);
  |  |  693|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_SMALL_INT(TAIL_CALL_PARAMS);
  |  |  694|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_SPECIAL(TAIL_CALL_PARAMS);
  |  |  695|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_SUPER_ATTR(TAIL_CALL_PARAMS);
  |  |  696|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_SUPER_ATTR_ATTR(TAIL_CALL_PARAMS);
  |  |  697|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_LOAD_SUPER_ATTR_METHOD(TAIL_CALL_PARAMS);
  |  |  698|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MAKE_CELL(TAIL_CALL_PARAMS);
  |  |  699|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MAKE_FUNCTION(TAIL_CALL_PARAMS);
  |  |  700|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MAP_ADD(TAIL_CALL_PARAMS);
  |  |  701|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MATCH_CLASS(TAIL_CALL_PARAMS);
  |  |  702|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MATCH_KEYS(TAIL_CALL_PARAMS);
  |  |  703|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MATCH_MAPPING(TAIL_CALL_PARAMS);
  |  |  704|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_MATCH_SEQUENCE(TAIL_CALL_PARAMS);
  |  |  705|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_NOP(TAIL_CALL_PARAMS);
  |  |  706|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_NOT_TAKEN(TAIL_CALL_PARAMS);
  |  |  707|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_EXCEPT(TAIL_CALL_PARAMS);
  |  |  708|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_ITER(TAIL_CALL_PARAMS);
  |  |  709|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_JUMP_IF_FALSE(TAIL_CALL_PARAMS);
  |  |  710|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_JUMP_IF_NONE(TAIL_CALL_PARAMS);
  |  |  711|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_JUMP_IF_NOT_NONE(TAIL_CALL_PARAMS);
  |  |  712|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_JUMP_IF_TRUE(TAIL_CALL_PARAMS);
  |  |  713|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_POP_TOP(TAIL_CALL_PARAMS);
  |  |  714|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_PUSH_EXC_INFO(TAIL_CALL_PARAMS);
  |  |  715|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_PUSH_NULL(TAIL_CALL_PARAMS);
  |  |  716|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RAISE_VARARGS(TAIL_CALL_PARAMS);
  |  |  717|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RERAISE(TAIL_CALL_PARAMS);
  |  |  718|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RESERVED(TAIL_CALL_PARAMS);
  |  |  719|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RESUME(TAIL_CALL_PARAMS);
  |  |  720|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RESUME_CHECK(TAIL_CALL_PARAMS);
  |  |  721|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RESUME_CHECK_JIT(TAIL_CALL_PARAMS);
  |  |  722|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RETURN_GENERATOR(TAIL_CALL_PARAMS);
  |  |  723|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_RETURN_VALUE(TAIL_CALL_PARAMS);
  |  |  724|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SEND(TAIL_CALL_PARAMS);
  |  |  725|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SEND_ASYNC_GEN(TAIL_CALL_PARAMS);
  |  |  726|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SEND_GEN(TAIL_CALL_PARAMS);
  |  |  727|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SEND_VIRTUAL(TAIL_CALL_PARAMS);
  |  |  728|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SETUP_ANNOTATIONS(TAIL_CALL_PARAMS);
  |  |  729|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SET_ADD(TAIL_CALL_PARAMS);
  |  |  730|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SET_FUNCTION_ATTRIBUTE(TAIL_CALL_PARAMS);
  |  |  731|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SET_UPDATE(TAIL_CALL_PARAMS);
  |  |  732|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_ATTR(TAIL_CALL_PARAMS);
  |  |  733|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_ATTR_INSTANCE_VALUE(TAIL_CALL_PARAMS);
  |  |  734|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_ATTR_SLOT(TAIL_CALL_PARAMS);
  |  |  735|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_ATTR_WITH_HINT(TAIL_CALL_PARAMS);
  |  |  736|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_DEREF(TAIL_CALL_PARAMS);
  |  |  737|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_FAST(TAIL_CALL_PARAMS);
  |  |  738|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_FAST_LOAD_FAST(TAIL_CALL_PARAMS);
  |  |  739|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_FAST_STORE_FAST(TAIL_CALL_PARAMS);
  |  |  740|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_GLOBAL(TAIL_CALL_PARAMS);
  |  |  741|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_NAME(TAIL_CALL_PARAMS);
  |  |  742|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_SLICE(TAIL_CALL_PARAMS);
  |  |  743|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_SUBSCR(TAIL_CALL_PARAMS);
  |  |  744|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_SUBSCR_DICT(TAIL_CALL_PARAMS);
  |  |  745|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_STORE_SUBSCR_LIST_INT(TAIL_CALL_PARAMS);
  |  |  746|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_SWAP(TAIL_CALL_PARAMS);
  |  |  747|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL(TAIL_CALL_PARAMS);
  |  |  748|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL_ALWAYS_TRUE(TAIL_CALL_PARAMS);
  |  |  749|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL_BOOL(TAIL_CALL_PARAMS);
  |  |  750|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL_INT(TAIL_CALL_PARAMS);
  |  |  751|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL_LIST(TAIL_CALL_PARAMS);
  |  |  752|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL_NONE(TAIL_CALL_PARAMS);
  |  |  753|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TO_BOOL_STR(TAIL_CALL_PARAMS);
  |  |  754|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_TRACE_RECORD(TAIL_CALL_PARAMS);
  |  |  755|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNARY_INVERT(TAIL_CALL_PARAMS);
  |  |  756|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNARY_NEGATIVE(TAIL_CALL_PARAMS);
  |  |  757|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNARY_NOT(TAIL_CALL_PARAMS);
  |  |  758|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNPACK_EX(TAIL_CALL_PARAMS);
  |  |  759|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNPACK_SEQUENCE(TAIL_CALL_PARAMS);
  |  |  760|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNPACK_SEQUENCE_LIST(TAIL_CALL_PARAMS);
  |  |  761|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNPACK_SEQUENCE_TUPLE(TAIL_CALL_PARAMS);
  |  |  762|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE(TAIL_CALL_PARAMS);
  |  |  763|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_WITH_EXCEPT_START(TAIL_CALL_PARAMS);
  |  |  764|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_YIELD_VALUE(TAIL_CALL_PARAMS);
  |  |  765|       |
  |  |  766|       |static PyObject *Py_PRESERVE_NONE_CC _TAIL_CALL_UNKNOWN_OPCODE(TAIL_CALL_PARAMS) {
  |  |  767|       |    int opcode = next_instr->op.code;
  |  |  768|       |    _PyErr_Format(tstate, PyExc_SystemError,
  |  |  769|       |              "%U:%d: unknown opcode %d",
  |  |  770|       |              _PyFrame_GetCode(frame)->co_filename,
  |  |  771|       |              PyUnstable_InterpreterFrame_GetLine(frame),
  |  |  772|       |              opcode);
  |  |  773|       |JUMP_TO_LABEL(error);
  |  |  774|       |}
  |  |  775|       |
  |  |  776|       |static py_tail_call_funcptr instruction_funcptr_handler_table[256] = {
  |  |  777|       |    [BINARY_OP] = _TAIL_CALL_BINARY_OP,
  |  |  778|       |    [BINARY_OP_ADD_FLOAT] = _TAIL_CALL_BINARY_OP_ADD_FLOAT,
  |  |  779|       |    [BINARY_OP_ADD_INT] = _TAIL_CALL_BINARY_OP_ADD_INT,
  |  |  780|       |    [BINARY_OP_ADD_UNICODE] = _TAIL_CALL_BINARY_OP_ADD_UNICODE,
  |  |  781|       |    [BINARY_OP_EXTEND] = _TAIL_CALL_BINARY_OP_EXTEND,
  |  |  782|       |    [BINARY_OP_INPLACE_ADD_UNICODE] = _TAIL_CALL_BINARY_OP_INPLACE_ADD_UNICODE,
  |  |  783|       |    [BINARY_OP_MULTIPLY_FLOAT] = _TAIL_CALL_BINARY_OP_MULTIPLY_FLOAT,
  |  |  784|       |    [BINARY_OP_MULTIPLY_INT] = _TAIL_CALL_BINARY_OP_MULTIPLY_INT,
  |  |  785|       |    [BINARY_OP_SUBSCR_DICT] = _TAIL_CALL_BINARY_OP_SUBSCR_DICT,
  |  |  786|       |    [BINARY_OP_SUBSCR_GETITEM] = _TAIL_CALL_BINARY_OP_SUBSCR_GETITEM,
  |  |  787|       |    [BINARY_OP_SUBSCR_LIST_INT] = _TAIL_CALL_BINARY_OP_SUBSCR_LIST_INT,
  |  |  788|       |    [BINARY_OP_SUBSCR_LIST_SLICE] = _TAIL_CALL_BINARY_OP_SUBSCR_LIST_SLICE,
  |  |  789|       |    [BINARY_OP_SUBSCR_STR_INT] = _TAIL_CALL_BINARY_OP_SUBSCR_STR_INT,
  |  |  790|       |    [BINARY_OP_SUBSCR_TUPLE_INT] = _TAIL_CALL_BINARY_OP_SUBSCR_TUPLE_INT,
  |  |  791|       |    [BINARY_OP_SUBSCR_USTR_INT] = _TAIL_CALL_BINARY_OP_SUBSCR_USTR_INT,
  |  |  792|       |    [BINARY_OP_SUBTRACT_FLOAT] = _TAIL_CALL_BINARY_OP_SUBTRACT_FLOAT,
  |  |  793|       |    [BINARY_OP_SUBTRACT_INT] = _TAIL_CALL_BINARY_OP_SUBTRACT_INT,
  |  |  794|       |    [BINARY_SLICE] = _TAIL_CALL_BINARY_SLICE,
  |  |  795|       |    [BUILD_INTERPOLATION] = _TAIL_CALL_BUILD_INTERPOLATION,
  |  |  796|       |    [BUILD_LIST] = _TAIL_CALL_BUILD_LIST,
  |  |  797|       |    [BUILD_MAP] = _TAIL_CALL_BUILD_MAP,
  |  |  798|       |    [BUILD_SET] = _TAIL_CALL_BUILD_SET,
  |  |  799|       |    [BUILD_SLICE] = _TAIL_CALL_BUILD_SLICE,
  |  |  800|       |    [BUILD_STRING] = _TAIL_CALL_BUILD_STRING,
  |  |  801|       |    [BUILD_TEMPLATE] = _TAIL_CALL_BUILD_TEMPLATE,
  |  |  802|       |    [BUILD_TUPLE] = _TAIL_CALL_BUILD_TUPLE,
  |  |  803|       |    [CACHE] = _TAIL_CALL_CACHE,
  |  |  804|       |    [CALL] = _TAIL_CALL_CALL,
  |  |  805|       |    [CALL_ALLOC_AND_ENTER_INIT] = _TAIL_CALL_CALL_ALLOC_AND_ENTER_INIT,
  |  |  806|       |    [CALL_BOUND_METHOD_EXACT_ARGS] = _TAIL_CALL_CALL_BOUND_METHOD_EXACT_ARGS,
  |  |  807|       |    [CALL_BOUND_METHOD_GENERAL] = _TAIL_CALL_CALL_BOUND_METHOD_GENERAL,
  |  |  808|       |    [CALL_BUILTIN_CLASS] = _TAIL_CALL_CALL_BUILTIN_CLASS,
  |  |  809|       |    [CALL_BUILTIN_FAST] = _TAIL_CALL_CALL_BUILTIN_FAST,
  |  |  810|       |    [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _TAIL_CALL_CALL_BUILTIN_FAST_WITH_KEYWORDS,
  |  |  811|       |    [CALL_BUILTIN_O] = _TAIL_CALL_CALL_BUILTIN_O,
  |  |  812|       |    [CALL_EX_NON_PY_GENERAL] = _TAIL_CALL_CALL_EX_NON_PY_GENERAL,
  |  |  813|       |    [CALL_EX_PY] = _TAIL_CALL_CALL_EX_PY,
  |  |  814|       |    [CALL_FUNCTION_EX] = _TAIL_CALL_CALL_FUNCTION_EX,
  |  |  815|       |    [CALL_INTRINSIC_1] = _TAIL_CALL_CALL_INTRINSIC_1,
  |  |  816|       |    [CALL_INTRINSIC_2] = _TAIL_CALL_CALL_INTRINSIC_2,
  |  |  817|       |    [CALL_ISINSTANCE] = _TAIL_CALL_CALL_ISINSTANCE,
  |  |  818|       |    [CALL_KW] = _TAIL_CALL_CALL_KW,
  |  |  819|       |    [CALL_KW_BOUND_METHOD] = _TAIL_CALL_CALL_KW_BOUND_METHOD,
  |  |  820|       |    [CALL_KW_NON_PY] = _TAIL_CALL_CALL_KW_NON_PY,
  |  |  821|       |    [CALL_KW_PY] = _TAIL_CALL_CALL_KW_PY,
  |  |  822|       |    [CALL_LEN] = _TAIL_CALL_CALL_LEN,
  |  |  823|       |    [CALL_LIST_APPEND] = _TAIL_CALL_CALL_LIST_APPEND,
  |  |  824|       |    [CALL_METHOD_DESCRIPTOR_FAST] = _TAIL_CALL_CALL_METHOD_DESCRIPTOR_FAST,
  |  |  825|       |    [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = _TAIL_CALL_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS,
  |  |  826|       |    [CALL_METHOD_DESCRIPTOR_NOARGS] = _TAIL_CALL_CALL_METHOD_DESCRIPTOR_NOARGS,
  |  |  827|       |    [CALL_METHOD_DESCRIPTOR_O] = _TAIL_CALL_CALL_METHOD_DESCRIPTOR_O,
  |  |  828|       |    [CALL_NON_PY_GENERAL] = _TAIL_CALL_CALL_NON_PY_GENERAL,
  |  |  829|       |    [CALL_PY_EXACT_ARGS] = _TAIL_CALL_CALL_PY_EXACT_ARGS,
  |  |  830|       |    [CALL_PY_GENERAL] = _TAIL_CALL_CALL_PY_GENERAL,
  |  |  831|       |    [CALL_STR_1] = _TAIL_CALL_CALL_STR_1,
  |  |  832|       |    [CALL_TUPLE_1] = _TAIL_CALL_CALL_TUPLE_1,
  |  |  833|       |    [CALL_TYPE_1] = _TAIL_CALL_CALL_TYPE_1,
  |  |  834|       |    [CHECK_EG_MATCH] = _TAIL_CALL_CHECK_EG_MATCH,
  |  |  835|       |    [CHECK_EXC_MATCH] = _TAIL_CALL_CHECK_EXC_MATCH,
  |  |  836|       |    [CLEANUP_THROW] = _TAIL_CALL_CLEANUP_THROW,
  |  |  837|       |    [COMPARE_OP] = _TAIL_CALL_COMPARE_OP,
  |  |  838|       |    [COMPARE_OP_FLOAT] = _TAIL_CALL_COMPARE_OP_FLOAT,
  |  |  839|       |    [COMPARE_OP_INT] = _TAIL_CALL_COMPARE_OP_INT,
  |  |  840|       |    [COMPARE_OP_STR] = _TAIL_CALL_COMPARE_OP_STR,
  |  |  841|       |    [CONTAINS_OP] = _TAIL_CALL_CONTAINS_OP,
  |  |  842|       |    [CONTAINS_OP_DICT] = _TAIL_CALL_CONTAINS_OP_DICT,
  |  |  843|       |    [CONTAINS_OP_SET] = _TAIL_CALL_CONTAINS_OP_SET,
  |  |  844|       |    [CONVERT_VALUE] = _TAIL_CALL_CONVERT_VALUE,
  |  |  845|       |    [COPY] = _TAIL_CALL_COPY,
  |  |  846|       |    [COPY_FREE_VARS] = _TAIL_CALL_COPY_FREE_VARS,
  |  |  847|       |    [DELETE_DEREF] = _TAIL_CALL_DELETE_DEREF,
  |  |  848|       |    [DELETE_FAST] = _TAIL_CALL_DELETE_FAST,
  |  |  849|       |    [DELETE_SUBSCR] = _TAIL_CALL_DELETE_SUBSCR,
  |  |  850|       |    [DICT_MERGE] = _TAIL_CALL_DICT_MERGE,
  |  |  851|       |    [DICT_UPDATE] = _TAIL_CALL_DICT_UPDATE,
  |  |  852|       |    [END_ASYNC_FOR] = _TAIL_CALL_END_ASYNC_FOR,
  |  |  853|       |    [END_FOR] = _TAIL_CALL_END_FOR,
  |  |  854|       |    [END_SEND] = _TAIL_CALL_END_SEND,
  |  |  855|       |    [ENTER_EXECUTOR] = _TAIL_CALL_ENTER_EXECUTOR,
  |  |  856|       |    [EXIT_INIT_CHECK] = _TAIL_CALL_EXIT_INIT_CHECK,
  |  |  857|       |    [EXTENDED_ARG] = _TAIL_CALL_EXTENDED_ARG,
  |  |  858|       |    [FORMAT_SIMPLE] = _TAIL_CALL_FORMAT_SIMPLE,
  |  |  859|       |    [FORMAT_WITH_SPEC] = _TAIL_CALL_FORMAT_WITH_SPEC,
  |  |  860|       |    [FOR_ITER] = _TAIL_CALL_FOR_ITER,
  |  |  861|       |    [FOR_ITER_GEN] = _TAIL_CALL_FOR_ITER_GEN,
  |  |  862|       |    [FOR_ITER_LIST] = _TAIL_CALL_FOR_ITER_LIST,
  |  |  863|       |    [FOR_ITER_RANGE] = _TAIL_CALL_FOR_ITER_RANGE,
  |  |  864|       |    [FOR_ITER_TUPLE] = _TAIL_CALL_FOR_ITER_TUPLE,
  |  |  865|       |    [FOR_ITER_VIRTUAL] = _TAIL_CALL_FOR_ITER_VIRTUAL,
  |  |  866|       |    [GET_AITER] = _TAIL_CALL_GET_AITER,
  |  |  867|       |    [GET_ANEXT] = _TAIL_CALL_GET_ANEXT,
  |  |  868|       |    [GET_AWAITABLE] = _TAIL_CALL_GET_AWAITABLE,
  |  |  869|       |    [GET_ITER] = _TAIL_CALL_GET_ITER,
  |  |  870|       |    [GET_ITER_SELF] = _TAIL_CALL_GET_ITER_SELF,
  |  |  871|       |    [GET_ITER_VIRTUAL] = _TAIL_CALL_GET_ITER_VIRTUAL,
  |  |  872|       |    [GET_LEN] = _TAIL_CALL_GET_LEN,
  |  |  873|       |    [IMPORT_FROM] = _TAIL_CALL_IMPORT_FROM,
  |  |  874|       |    [IMPORT_NAME] = _TAIL_CALL_IMPORT_NAME,
  |  |  875|       |    [INSTRUMENTED_CALL] = _TAIL_CALL_INSTRUMENTED_CALL,
  |  |  876|       |    [INSTRUMENTED_CALL_FUNCTION_EX] = _TAIL_CALL_INSTRUMENTED_CALL_FUNCTION_EX,
  |  |  877|       |    [INSTRUMENTED_CALL_KW] = _TAIL_CALL_INSTRUMENTED_CALL_KW,
  |  |  878|       |    [INSTRUMENTED_END_ASYNC_FOR] = _TAIL_CALL_INSTRUMENTED_END_ASYNC_FOR,
  |  |  879|       |    [INSTRUMENTED_END_FOR] = _TAIL_CALL_INSTRUMENTED_END_FOR,
  |  |  880|       |    [INSTRUMENTED_END_SEND] = _TAIL_CALL_INSTRUMENTED_END_SEND,
  |  |  881|       |    [INSTRUMENTED_FOR_ITER] = _TAIL_CALL_INSTRUMENTED_FOR_ITER,
  |  |  882|       |    [INSTRUMENTED_INSTRUCTION] = _TAIL_CALL_INSTRUMENTED_INSTRUCTION,
  |  |  883|       |    [INSTRUMENTED_JUMP_BACKWARD] = _TAIL_CALL_INSTRUMENTED_JUMP_BACKWARD,
  |  |  884|       |    [INSTRUMENTED_JUMP_FORWARD] = _TAIL_CALL_INSTRUMENTED_JUMP_FORWARD,
  |  |  885|       |    [INSTRUMENTED_LINE] = _TAIL_CALL_INSTRUMENTED_LINE,
  |  |  886|       |    [INSTRUMENTED_LOAD_SUPER_ATTR] = _TAIL_CALL_INSTRUMENTED_LOAD_SUPER_ATTR,
  |  |  887|       |    [INSTRUMENTED_NOT_TAKEN] = _TAIL_CALL_INSTRUMENTED_NOT_TAKEN,
  |  |  888|       |    [INSTRUMENTED_POP_ITER] = _TAIL_CALL_INSTRUMENTED_POP_ITER,
  |  |  889|       |    [INSTRUMENTED_POP_JUMP_IF_FALSE] = _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_FALSE,
  |  |  890|       |    [INSTRUMENTED_POP_JUMP_IF_NONE] = _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_NONE,
  |  |  891|       |    [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_NOT_NONE,
  |  |  892|       |    [INSTRUMENTED_POP_JUMP_IF_TRUE] = _TAIL_CALL_INSTRUMENTED_POP_JUMP_IF_TRUE,
  |  |  893|       |    [INSTRUMENTED_RESUME] = _TAIL_CALL_INSTRUMENTED_RESUME,
  |  |  894|       |    [INSTRUMENTED_RETURN_VALUE] = _TAIL_CALL_INSTRUMENTED_RETURN_VALUE,
  |  |  895|       |    [INSTRUMENTED_YIELD_VALUE] = _TAIL_CALL_INSTRUMENTED_YIELD_VALUE,
  |  |  896|       |    [INTERPRETER_EXIT] = _TAIL_CALL_INTERPRETER_EXIT,
  |  |  897|       |    [IS_OP] = _TAIL_CALL_IS_OP,
  |  |  898|       |    [JUMP_BACKWARD] = _TAIL_CALL_JUMP_BACKWARD,
  |  |  899|       |    [JUMP_BACKWARD_JIT] = _TAIL_CALL_JUMP_BACKWARD_JIT,
  |  |  900|       |    [JUMP_BACKWARD_NO_INTERRUPT] = _TAIL_CALL_JUMP_BACKWARD_NO_INTERRUPT,
  |  |  901|       |    [JUMP_BACKWARD_NO_JIT] = _TAIL_CALL_JUMP_BACKWARD_NO_JIT,
  |  |  902|       |    [JUMP_FORWARD] = _TAIL_CALL_JUMP_FORWARD,
  |  |  903|       |    [LIST_APPEND] = _TAIL_CALL_LIST_APPEND,
  |  |  904|       |    [LIST_EXTEND] = _TAIL_CALL_LIST_EXTEND,
  |  |  905|       |    [LOAD_ATTR] = _TAIL_CALL_LOAD_ATTR,
  |  |  906|       |    [LOAD_ATTR_CLASS] = _TAIL_CALL_LOAD_ATTR_CLASS,
  |  |  907|       |    [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = _TAIL_CALL_LOAD_ATTR_CLASS_WITH_METACLASS_CHECK,
  |  |  908|       |    [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = _TAIL_CALL_LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN,
  |  |  909|       |    [LOAD_ATTR_INSTANCE_VALUE] = _TAIL_CALL_LOAD_ATTR_INSTANCE_VALUE,
  |  |  910|       |    [LOAD_ATTR_METHOD_LAZY_DICT] = _TAIL_CALL_LOAD_ATTR_METHOD_LAZY_DICT,
  |  |  911|       |    [LOAD_ATTR_METHOD_NO_DICT] = _TAIL_CALL_LOAD_ATTR_METHOD_NO_DICT,
  |  |  912|       |    [LOAD_ATTR_METHOD_WITH_VALUES] = _TAIL_CALL_LOAD_ATTR_METHOD_WITH_VALUES,
  |  |  913|       |    [LOAD_ATTR_MODULE] = _TAIL_CALL_LOAD_ATTR_MODULE,
  |  |  914|       |    [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = _TAIL_CALL_LOAD_ATTR_NONDESCRIPTOR_NO_DICT,
  |  |  915|       |    [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = _TAIL_CALL_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES,
  |  |  916|       |    [LOAD_ATTR_PROPERTY] = _TAIL_CALL_LOAD_ATTR_PROPERTY,
  |  |  917|       |    [LOAD_ATTR_SLOT] = _TAIL_CALL_LOAD_ATTR_SLOT,
  |  |  918|       |    [LOAD_ATTR_WITH_HINT] = _TAIL_CALL_LOAD_ATTR_WITH_HINT,
  |  |  919|       |    [LOAD_BUILD_CLASS] = _TAIL_CALL_LOAD_BUILD_CLASS,
  |  |  920|       |    [LOAD_COMMON_CONSTANT] = _TAIL_CALL_LOAD_COMMON_CONSTANT,
  |  |  921|       |    [LOAD_CONST] = _TAIL_CALL_LOAD_CONST,
  |  |  922|       |    [LOAD_DEREF] = _TAIL_CALL_LOAD_DEREF,
  |  |  923|       |    [LOAD_FAST] = _TAIL_CALL_LOAD_FAST,
  |  |  924|       |    [LOAD_FAST_AND_CLEAR] = _TAIL_CALL_LOAD_FAST_AND_CLEAR,
  |  |  925|       |    [LOAD_FAST_BORROW] = _TAIL_CALL_LOAD_FAST_BORROW,
  |  |  926|       |    [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = _TAIL_CALL_LOAD_FAST_BORROW_LOAD_FAST_BORROW,
  |  |  927|       |    [LOAD_FAST_CHECK] = _TAIL_CALL_LOAD_FAST_CHECK,
  |  |  928|       |    [LOAD_FAST_LOAD_FAST] = _TAIL_CALL_LOAD_FAST_LOAD_FAST,
  |  |  929|       |    [LOAD_FROM_DICT_OR_DEREF] = _TAIL_CALL_LOAD_FROM_DICT_OR_DEREF,
  |  |  930|       |    [LOAD_FROM_DICT_OR_GLOBALS] = _TAIL_CALL_LOAD_FROM_DICT_OR_GLOBALS,
  |  |  931|       |    [LOAD_GLOBAL] = _TAIL_CALL_LOAD_GLOBAL,
  |  |  932|       |    [LOAD_GLOBAL_BUILTIN] = _TAIL_CALL_LOAD_GLOBAL_BUILTIN,
  |  |  933|       |    [LOAD_GLOBAL_MODULE] = _TAIL_CALL_LOAD_GLOBAL_MODULE,
  |  |  934|       |    [LOAD_LOCALS] = _TAIL_CALL_LOAD_LOCALS,
  |  |  935|       |    [LOAD_NAME] = _TAIL_CALL_LOAD_NAME,
  |  |  936|       |    [LOAD_SMALL_INT] = _TAIL_CALL_LOAD_SMALL_INT,
  |  |  937|       |    [LOAD_SPECIAL] = _TAIL_CALL_LOAD_SPECIAL,
  |  |  938|       |    [LOAD_SUPER_ATTR] = _TAIL_CALL_LOAD_SUPER_ATTR,
  |  |  939|       |    [LOAD_SUPER_ATTR_ATTR] = _TAIL_CALL_LOAD_SUPER_ATTR_ATTR,
  |  |  940|       |    [LOAD_SUPER_ATTR_METHOD] = _TAIL_CALL_LOAD_SUPER_ATTR_METHOD,
  |  |  941|       |    [MAKE_CELL] = _TAIL_CALL_MAKE_CELL,
  |  |  942|       |    [MAKE_FUNCTION] = _TAIL_CALL_MAKE_FUNCTION,
  |  |  943|       |    [MAP_ADD] = _TAIL_CALL_MAP_ADD,
  |  |  944|       |    [MATCH_CLASS] = _TAIL_CALL_MATCH_CLASS,
  |  |  945|       |    [MATCH_KEYS] = _TAIL_CALL_MATCH_KEYS,
  |  |  946|       |    [MATCH_MAPPING] = _TAIL_CALL_MATCH_MAPPING,
  |  |  947|       |    [MATCH_SEQUENCE] = _TAIL_CALL_MATCH_SEQUENCE,
  |  |  948|       |    [NOP] = _TAIL_CALL_NOP,
  |  |  949|       |    [NOT_TAKEN] = _TAIL_CALL_NOT_TAKEN,
  |  |  950|       |    [POP_EXCEPT] = _TAIL_CALL_POP_EXCEPT,
  |  |  951|       |    [POP_ITER] = _TAIL_CALL_POP_ITER,
  |  |  952|       |    [POP_JUMP_IF_FALSE] = _TAIL_CALL_POP_JUMP_IF_FALSE,
  |  |  953|       |    [POP_JUMP_IF_NONE] = _TAIL_CALL_POP_JUMP_IF_NONE,
  |  |  954|       |    [POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_POP_JUMP_IF_NOT_NONE,
  |  |  955|       |    [POP_JUMP_IF_TRUE] = _TAIL_CALL_POP_JUMP_IF_TRUE,
  |  |  956|       |    [POP_TOP] = _TAIL_CALL_POP_TOP,
  |  |  957|       |    [PUSH_EXC_INFO] = _TAIL_CALL_PUSH_EXC_INFO,
  |  |  958|       |    [PUSH_NULL] = _TAIL_CALL_PUSH_NULL,
  |  |  959|       |    [RAISE_VARARGS] = _TAIL_CALL_RAISE_VARARGS,
  |  |  960|       |    [RERAISE] = _TAIL_CALL_RERAISE,
  |  |  961|       |    [RESERVED] = _TAIL_CALL_RESERVED,
  |  |  962|       |    [RESUME] = _TAIL_CALL_RESUME,
  |  |  963|       |    [RESUME_CHECK] = _TAIL_CALL_RESUME_CHECK,
  |  |  964|       |    [RESUME_CHECK_JIT] = _TAIL_CALL_RESUME_CHECK_JIT,
  |  |  965|       |    [RETURN_GENERATOR] = _TAIL_CALL_RETURN_GENERATOR,
  |  |  966|       |    [RETURN_VALUE] = _TAIL_CALL_RETURN_VALUE,
  |  |  967|       |    [SEND] = _TAIL_CALL_SEND,
  |  |  968|       |    [SEND_ASYNC_GEN] = _TAIL_CALL_SEND_ASYNC_GEN,
  |  |  969|       |    [SEND_GEN] = _TAIL_CALL_SEND_GEN,
  |  |  970|       |    [SEND_VIRTUAL] = _TAIL_CALL_SEND_VIRTUAL,
  |  |  971|       |    [SETUP_ANNOTATIONS] = _TAIL_CALL_SETUP_ANNOTATIONS,
  |  |  972|       |    [SET_ADD] = _TAIL_CALL_SET_ADD,
  |  |  973|       |    [SET_FUNCTION_ATTRIBUTE] = _TAIL_CALL_SET_FUNCTION_ATTRIBUTE,
  |  |  974|       |    [SET_UPDATE] = _TAIL_CALL_SET_UPDATE,
  |  |  975|       |    [STORE_ATTR] = _TAIL_CALL_STORE_ATTR,
  |  |  976|       |    [STORE_ATTR_INSTANCE_VALUE] = _TAIL_CALL_STORE_ATTR_INSTANCE_VALUE,
  |  |  977|       |    [STORE_ATTR_SLOT] = _TAIL_CALL_STORE_ATTR_SLOT,
  |  |  978|       |    [STORE_ATTR_WITH_HINT] = _TAIL_CALL_STORE_ATTR_WITH_HINT,
  |  |  979|       |    [STORE_DEREF] = _TAIL_CALL_STORE_DEREF,
  |  |  980|       |    [STORE_FAST] = _TAIL_CALL_STORE_FAST,
  |  |  981|       |    [STORE_FAST_LOAD_FAST] = _TAIL_CALL_STORE_FAST_LOAD_FAST,
  |  |  982|       |    [STORE_FAST_STORE_FAST] = _TAIL_CALL_STORE_FAST_STORE_FAST,
  |  |  983|       |    [STORE_GLOBAL] = _TAIL_CALL_STORE_GLOBAL,
  |  |  984|       |    [STORE_NAME] = _TAIL_CALL_STORE_NAME,
  |  |  985|       |    [STORE_SLICE] = _TAIL_CALL_STORE_SLICE,
  |  |  986|       |    [STORE_SUBSCR] = _TAIL_CALL_STORE_SUBSCR,
  |  |  987|       |    [STORE_SUBSCR_DICT] = _TAIL_CALL_STORE_SUBSCR_DICT,
  |  |  988|       |    [STORE_SUBSCR_LIST_INT] = _TAIL_CALL_STORE_SUBSCR_LIST_INT,
  |  |  989|       |    [SWAP] = _TAIL_CALL_SWAP,
  |  |  990|       |    [TO_BOOL] = _TAIL_CALL_TO_BOOL,
  |  |  991|       |    [TO_BOOL_ALWAYS_TRUE] = _TAIL_CALL_TO_BOOL_ALWAYS_TRUE,
  |  |  992|       |    [TO_BOOL_BOOL] = _TAIL_CALL_TO_BOOL_BOOL,
  |  |  993|       |    [TO_BOOL_INT] = _TAIL_CALL_TO_BOOL_INT,
  |  |  994|       |    [TO_BOOL_LIST] = _TAIL_CALL_TO_BOOL_LIST,
  |  |  995|       |    [TO_BOOL_NONE] = _TAIL_CALL_TO_BOOL_NONE,
  |  |  996|       |    [TO_BOOL_STR] = _TAIL_CALL_TO_BOOL_STR,
  |  |  997|       |    [TRACE_RECORD] = _TAIL_CALL_TRACE_RECORD,
  |  |  998|       |    [UNARY_INVERT] = _TAIL_CALL_UNARY_INVERT,
  |  |  999|       |    [UNARY_NEGATIVE] = _TAIL_CALL_UNARY_NEGATIVE,
  |  | 1000|       |    [UNARY_NOT] = _TAIL_CALL_UNARY_NOT,
  |  | 1001|       |    [UNPACK_EX] = _TAIL_CALL_UNPACK_EX,
  |  | 1002|       |    [UNPACK_SEQUENCE] = _TAIL_CALL_UNPACK_SEQUENCE,
  |  | 1003|       |    [UNPACK_SEQUENCE_LIST] = _TAIL_CALL_UNPACK_SEQUENCE_LIST,
  |  | 1004|       |    [UNPACK_SEQUENCE_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TUPLE,
  |  | 1005|       |    [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_UNPACK_SEQUENCE_TWO_TUPLE,
  |  | 1006|       |    [WITH_EXCEPT_START] = _TAIL_CALL_WITH_EXCEPT_START,
  |  | 1007|       |    [YIELD_VALUE] = _TAIL_CALL_YIELD_VALUE,
  |  | 1008|       |    [117] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1009|       |    [118] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1010|       |    [119] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1011|       |    [120] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1012|       |    [121] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1013|       |    [122] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1014|       |    [123] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1015|       |    [124] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1016|       |    [125] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1017|       |    [126] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1018|       |    [127] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1019|       |    [219] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1020|       |    [220] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1021|       |    [221] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1022|       |    [222] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1023|       |    [223] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1024|       |    [224] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1025|       |    [225] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1026|       |    [226] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1027|       |    [227] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1028|       |    [228] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1029|       |    [229] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1030|       |    [230] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1031|       |    [231] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1032|       |    [232] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1033|       |};
  |  | 1034|       |static py_tail_call_funcptr instruction_funcptr_tracing_table[256] = {
  |  | 1035|       |    [BINARY_OP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1036|       |    [BINARY_OP_ADD_FLOAT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1037|       |    [BINARY_OP_ADD_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1038|       |    [BINARY_OP_ADD_UNICODE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1039|       |    [BINARY_OP_EXTEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1040|       |    [BINARY_OP_INPLACE_ADD_UNICODE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1041|       |    [BINARY_OP_MULTIPLY_FLOAT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1042|       |    [BINARY_OP_MULTIPLY_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1043|       |    [BINARY_OP_SUBSCR_DICT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1044|       |    [BINARY_OP_SUBSCR_GETITEM] = _TAIL_CALL_TRACE_RECORD,
  |  | 1045|       |    [BINARY_OP_SUBSCR_LIST_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1046|       |    [BINARY_OP_SUBSCR_LIST_SLICE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1047|       |    [BINARY_OP_SUBSCR_STR_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1048|       |    [BINARY_OP_SUBSCR_TUPLE_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1049|       |    [BINARY_OP_SUBSCR_USTR_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1050|       |    [BINARY_OP_SUBTRACT_FLOAT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1051|       |    [BINARY_OP_SUBTRACT_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1052|       |    [BINARY_SLICE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1053|       |    [BUILD_INTERPOLATION] = _TAIL_CALL_TRACE_RECORD,
  |  | 1054|       |    [BUILD_LIST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1055|       |    [BUILD_MAP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1056|       |    [BUILD_SET] = _TAIL_CALL_TRACE_RECORD,
  |  | 1057|       |    [BUILD_SLICE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1058|       |    [BUILD_STRING] = _TAIL_CALL_TRACE_RECORD,
  |  | 1059|       |    [BUILD_TEMPLATE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1060|       |    [BUILD_TUPLE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1061|       |    [CACHE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1062|       |    [CALL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1063|       |    [CALL_ALLOC_AND_ENTER_INIT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1064|       |    [CALL_BOUND_METHOD_EXACT_ARGS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1065|       |    [CALL_BOUND_METHOD_GENERAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1066|       |    [CALL_BUILTIN_CLASS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1067|       |    [CALL_BUILTIN_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1068|       |    [CALL_BUILTIN_FAST_WITH_KEYWORDS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1069|       |    [CALL_BUILTIN_O] = _TAIL_CALL_TRACE_RECORD,
  |  | 1070|       |    [CALL_EX_NON_PY_GENERAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1071|       |    [CALL_EX_PY] = _TAIL_CALL_TRACE_RECORD,
  |  | 1072|       |    [CALL_FUNCTION_EX] = _TAIL_CALL_TRACE_RECORD,
  |  | 1073|       |    [CALL_INTRINSIC_1] = _TAIL_CALL_TRACE_RECORD,
  |  | 1074|       |    [CALL_INTRINSIC_2] = _TAIL_CALL_TRACE_RECORD,
  |  | 1075|       |    [CALL_ISINSTANCE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1076|       |    [CALL_KW] = _TAIL_CALL_TRACE_RECORD,
  |  | 1077|       |    [CALL_KW_BOUND_METHOD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1078|       |    [CALL_KW_NON_PY] = _TAIL_CALL_TRACE_RECORD,
  |  | 1079|       |    [CALL_KW_PY] = _TAIL_CALL_TRACE_RECORD,
  |  | 1080|       |    [CALL_LEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1081|       |    [CALL_LIST_APPEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1082|       |    [CALL_METHOD_DESCRIPTOR_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1083|       |    [CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1084|       |    [CALL_METHOD_DESCRIPTOR_NOARGS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1085|       |    [CALL_METHOD_DESCRIPTOR_O] = _TAIL_CALL_TRACE_RECORD,
  |  | 1086|       |    [CALL_NON_PY_GENERAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1087|       |    [CALL_PY_EXACT_ARGS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1088|       |    [CALL_PY_GENERAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1089|       |    [CALL_STR_1] = _TAIL_CALL_TRACE_RECORD,
  |  | 1090|       |    [CALL_TUPLE_1] = _TAIL_CALL_TRACE_RECORD,
  |  | 1091|       |    [CALL_TYPE_1] = _TAIL_CALL_TRACE_RECORD,
  |  | 1092|       |    [CHECK_EG_MATCH] = _TAIL_CALL_TRACE_RECORD,
  |  | 1093|       |    [CHECK_EXC_MATCH] = _TAIL_CALL_TRACE_RECORD,
  |  | 1094|       |    [CLEANUP_THROW] = _TAIL_CALL_TRACE_RECORD,
  |  | 1095|       |    [COMPARE_OP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1096|       |    [COMPARE_OP_FLOAT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1097|       |    [COMPARE_OP_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1098|       |    [COMPARE_OP_STR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1099|       |    [CONTAINS_OP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1100|       |    [CONTAINS_OP_DICT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1101|       |    [CONTAINS_OP_SET] = _TAIL_CALL_TRACE_RECORD,
  |  | 1102|       |    [CONVERT_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1103|       |    [COPY] = _TAIL_CALL_TRACE_RECORD,
  |  | 1104|       |    [COPY_FREE_VARS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1105|       |    [DELETE_DEREF] = _TAIL_CALL_TRACE_RECORD,
  |  | 1106|       |    [DELETE_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1107|       |    [DELETE_SUBSCR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1108|       |    [DICT_MERGE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1109|       |    [DICT_UPDATE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1110|       |    [END_ASYNC_FOR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1111|       |    [END_FOR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1112|       |    [END_SEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1113|       |    [ENTER_EXECUTOR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1114|       |    [EXIT_INIT_CHECK] = _TAIL_CALL_TRACE_RECORD,
  |  | 1115|       |    [EXTENDED_ARG] = _TAIL_CALL_TRACE_RECORD,
  |  | 1116|       |    [FORMAT_SIMPLE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1117|       |    [FORMAT_WITH_SPEC] = _TAIL_CALL_TRACE_RECORD,
  |  | 1118|       |    [FOR_ITER] = _TAIL_CALL_TRACE_RECORD,
  |  | 1119|       |    [FOR_ITER_GEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1120|       |    [FOR_ITER_LIST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1121|       |    [FOR_ITER_RANGE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1122|       |    [FOR_ITER_TUPLE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1123|       |    [FOR_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1124|       |    [GET_AITER] = _TAIL_CALL_TRACE_RECORD,
  |  | 1125|       |    [GET_ANEXT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1126|       |    [GET_AWAITABLE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1127|       |    [GET_ITER] = _TAIL_CALL_TRACE_RECORD,
  |  | 1128|       |    [GET_ITER_SELF] = _TAIL_CALL_TRACE_RECORD,
  |  | 1129|       |    [GET_ITER_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1130|       |    [GET_LEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1131|       |    [IMPORT_FROM] = _TAIL_CALL_TRACE_RECORD,
  |  | 1132|       |    [IMPORT_NAME] = _TAIL_CALL_TRACE_RECORD,
  |  | 1133|       |    [INSTRUMENTED_CALL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1134|       |    [INSTRUMENTED_CALL_FUNCTION_EX] = _TAIL_CALL_TRACE_RECORD,
  |  | 1135|       |    [INSTRUMENTED_CALL_KW] = _TAIL_CALL_TRACE_RECORD,
  |  | 1136|       |    [INSTRUMENTED_END_ASYNC_FOR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1137|       |    [INSTRUMENTED_END_FOR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1138|       |    [INSTRUMENTED_END_SEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1139|       |    [INSTRUMENTED_FOR_ITER] = _TAIL_CALL_TRACE_RECORD,
  |  | 1140|       |    [INSTRUMENTED_INSTRUCTION] = _TAIL_CALL_TRACE_RECORD,
  |  | 1141|       |    [INSTRUMENTED_JUMP_BACKWARD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1142|       |    [INSTRUMENTED_JUMP_FORWARD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1143|       |    [INSTRUMENTED_LINE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1144|       |    [INSTRUMENTED_LOAD_SUPER_ATTR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1145|       |    [INSTRUMENTED_NOT_TAKEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1146|       |    [INSTRUMENTED_POP_ITER] = _TAIL_CALL_TRACE_RECORD,
  |  | 1147|       |    [INSTRUMENTED_POP_JUMP_IF_FALSE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1148|       |    [INSTRUMENTED_POP_JUMP_IF_NONE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1149|       |    [INSTRUMENTED_POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1150|       |    [INSTRUMENTED_POP_JUMP_IF_TRUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1151|       |    [INSTRUMENTED_RESUME] = _TAIL_CALL_TRACE_RECORD,
  |  | 1152|       |    [INSTRUMENTED_RETURN_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1153|       |    [INSTRUMENTED_YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1154|       |    [INTERPRETER_EXIT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1155|       |    [IS_OP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1156|       |    [JUMP_BACKWARD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1157|       |    [JUMP_BACKWARD_JIT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1158|       |    [JUMP_BACKWARD_NO_INTERRUPT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1159|       |    [JUMP_BACKWARD_NO_JIT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1160|       |    [JUMP_FORWARD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1161|       |    [LIST_APPEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1162|       |    [LIST_EXTEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1163|       |    [LOAD_ATTR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1164|       |    [LOAD_ATTR_CLASS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1165|       |    [LOAD_ATTR_CLASS_WITH_METACLASS_CHECK] = _TAIL_CALL_TRACE_RECORD,
  |  | 1166|       |    [LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1167|       |    [LOAD_ATTR_INSTANCE_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1168|       |    [LOAD_ATTR_METHOD_LAZY_DICT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1169|       |    [LOAD_ATTR_METHOD_NO_DICT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1170|       |    [LOAD_ATTR_METHOD_WITH_VALUES] = _TAIL_CALL_TRACE_RECORD,
  |  | 1171|       |    [LOAD_ATTR_MODULE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1172|       |    [LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1173|       |    [LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = _TAIL_CALL_TRACE_RECORD,
  |  | 1174|       |    [LOAD_ATTR_PROPERTY] = _TAIL_CALL_TRACE_RECORD,
  |  | 1175|       |    [LOAD_ATTR_SLOT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1176|       |    [LOAD_ATTR_WITH_HINT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1177|       |    [LOAD_BUILD_CLASS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1178|       |    [LOAD_COMMON_CONSTANT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1179|       |    [LOAD_CONST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1180|       |    [LOAD_DEREF] = _TAIL_CALL_TRACE_RECORD,
  |  | 1181|       |    [LOAD_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1182|       |    [LOAD_FAST_AND_CLEAR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1183|       |    [LOAD_FAST_BORROW] = _TAIL_CALL_TRACE_RECORD,
  |  | 1184|       |    [LOAD_FAST_BORROW_LOAD_FAST_BORROW] = _TAIL_CALL_TRACE_RECORD,
  |  | 1185|       |    [LOAD_FAST_CHECK] = _TAIL_CALL_TRACE_RECORD,
  |  | 1186|       |    [LOAD_FAST_LOAD_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1187|       |    [LOAD_FROM_DICT_OR_DEREF] = _TAIL_CALL_TRACE_RECORD,
  |  | 1188|       |    [LOAD_FROM_DICT_OR_GLOBALS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1189|       |    [LOAD_GLOBAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1190|       |    [LOAD_GLOBAL_BUILTIN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1191|       |    [LOAD_GLOBAL_MODULE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1192|       |    [LOAD_LOCALS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1193|       |    [LOAD_NAME] = _TAIL_CALL_TRACE_RECORD,
  |  | 1194|       |    [LOAD_SMALL_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1195|       |    [LOAD_SPECIAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1196|       |    [LOAD_SUPER_ATTR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1197|       |    [LOAD_SUPER_ATTR_ATTR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1198|       |    [LOAD_SUPER_ATTR_METHOD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1199|       |    [MAKE_CELL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1200|       |    [MAKE_FUNCTION] = _TAIL_CALL_TRACE_RECORD,
  |  | 1201|       |    [MAP_ADD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1202|       |    [MATCH_CLASS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1203|       |    [MATCH_KEYS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1204|       |    [MATCH_MAPPING] = _TAIL_CALL_TRACE_RECORD,
  |  | 1205|       |    [MATCH_SEQUENCE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1206|       |    [NOP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1207|       |    [NOT_TAKEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1208|       |    [POP_EXCEPT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1209|       |    [POP_ITER] = _TAIL_CALL_TRACE_RECORD,
  |  | 1210|       |    [POP_JUMP_IF_FALSE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1211|       |    [POP_JUMP_IF_NONE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1212|       |    [POP_JUMP_IF_NOT_NONE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1213|       |    [POP_JUMP_IF_TRUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1214|       |    [POP_TOP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1215|       |    [PUSH_EXC_INFO] = _TAIL_CALL_TRACE_RECORD,
  |  | 1216|       |    [PUSH_NULL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1217|       |    [RAISE_VARARGS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1218|       |    [RERAISE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1219|       |    [RESERVED] = _TAIL_CALL_TRACE_RECORD,
  |  | 1220|       |    [RESUME] = _TAIL_CALL_TRACE_RECORD,
  |  | 1221|       |    [RESUME_CHECK] = _TAIL_CALL_TRACE_RECORD,
  |  | 1222|       |    [RESUME_CHECK_JIT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1223|       |    [RETURN_GENERATOR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1224|       |    [RETURN_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1225|       |    [SEND] = _TAIL_CALL_TRACE_RECORD,
  |  | 1226|       |    [SEND_ASYNC_GEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1227|       |    [SEND_GEN] = _TAIL_CALL_TRACE_RECORD,
  |  | 1228|       |    [SEND_VIRTUAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1229|       |    [SETUP_ANNOTATIONS] = _TAIL_CALL_TRACE_RECORD,
  |  | 1230|       |    [SET_ADD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1231|       |    [SET_FUNCTION_ATTRIBUTE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1232|       |    [SET_UPDATE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1233|       |    [STORE_ATTR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1234|       |    [STORE_ATTR_INSTANCE_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1235|       |    [STORE_ATTR_SLOT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1236|       |    [STORE_ATTR_WITH_HINT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1237|       |    [STORE_DEREF] = _TAIL_CALL_TRACE_RECORD,
  |  | 1238|       |    [STORE_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1239|       |    [STORE_FAST_LOAD_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1240|       |    [STORE_FAST_STORE_FAST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1241|       |    [STORE_GLOBAL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1242|       |    [STORE_NAME] = _TAIL_CALL_TRACE_RECORD,
  |  | 1243|       |    [STORE_SLICE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1244|       |    [STORE_SUBSCR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1245|       |    [STORE_SUBSCR_DICT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1246|       |    [STORE_SUBSCR_LIST_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1247|       |    [SWAP] = _TAIL_CALL_TRACE_RECORD,
  |  | 1248|       |    [TO_BOOL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1249|       |    [TO_BOOL_ALWAYS_TRUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1250|       |    [TO_BOOL_BOOL] = _TAIL_CALL_TRACE_RECORD,
  |  | 1251|       |    [TO_BOOL_INT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1252|       |    [TO_BOOL_LIST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1253|       |    [TO_BOOL_NONE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1254|       |    [TO_BOOL_STR] = _TAIL_CALL_TRACE_RECORD,
  |  | 1255|       |    [TRACE_RECORD] = _TAIL_CALL_TRACE_RECORD,
  |  | 1256|       |    [UNARY_INVERT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1257|       |    [UNARY_NEGATIVE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1258|       |    [UNARY_NOT] = _TAIL_CALL_TRACE_RECORD,
  |  | 1259|       |    [UNPACK_EX] = _TAIL_CALL_TRACE_RECORD,
  |  | 1260|       |    [UNPACK_SEQUENCE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1261|       |    [UNPACK_SEQUENCE_LIST] = _TAIL_CALL_TRACE_RECORD,
  |  | 1262|       |    [UNPACK_SEQUENCE_TUPLE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1263|       |    [UNPACK_SEQUENCE_TWO_TUPLE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1264|       |    [WITH_EXCEPT_START] = _TAIL_CALL_TRACE_RECORD,
  |  | 1265|       |    [YIELD_VALUE] = _TAIL_CALL_TRACE_RECORD,
  |  | 1266|       |    [117] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1267|       |    [118] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1268|       |    [119] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1269|       |    [120] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1270|       |    [121] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1271|       |    [122] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1272|       |    [123] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1273|       |    [124] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1274|       |    [125] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1275|       |    [126] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1276|       |    [127] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1277|       |    [219] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1278|       |    [220] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1279|       |    [221] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1280|       |    [222] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1281|       |    [223] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1282|       |    [224] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1283|       |    [225] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1284|       |    [226] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1285|       |    [227] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1286|       |    [228] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1287|       |    [229] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1288|       |    [230] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1289|       |    [231] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1290|       |    [232] = _TAIL_CALL_UNKNOWN_OPCODE,
  |  | 1291|       |};
  |  | 1292|       |#endif /* _Py_TAIL_CALL_INTERP */
  ------------------
 1240|   192k|    void **opcode_targets = opcode_targets_table;
 1241|   192k|#endif
 1242|       |
 1243|       |#ifdef Py_STATS
 1244|       |    int lastopcode = 0;
 1245|       |#endif
 1246|   192k|#if !_Py_TAIL_CALL_INTERP
 1247|   192k|    uint8_t opcode;    /* Current opcode */
 1248|   192k|    int oparg;         /* Current opcode argument, if any */
 1249|   192k|    assert(tstate->current_frame == NULL || tstate->current_frame->stackpointer != NULL);
  ------------------
  |  Branch (1249:5): [True: 0, False: 192k]
  |  Branch (1249:5): [True: 192k, False: 0]
  ------------------
 1250|       |#if !USE_COMPUTED_GOTOS
 1251|       |    uint8_t tracing_mode = 0;
 1252|       |    uint8_t dispatch_code;
 1253|       |#endif
 1254|   192k|#endif
 1255|   192k|    _PyEntryFrame entry;
 1256|       |
 1257|   192k|    if (_Py_EnterRecursiveCallTstate(tstate, "")) {
  ------------------
  |  Branch (1257:9): [True: 0, False: 192k]
  ------------------
 1258|      0|        assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  ------------------
  |  Branch (1258:9): [True: 0, False: 0]
  ------------------
 1259|      0|        _PyEval_FrameClearAndPop(tstate, frame);
 1260|      0|        return NULL;
 1261|      0|    }
 1262|       |
 1263|       |    /* Local "register" variables.
 1264|       |     * These are cached values from the frame and code object.  */
 1265|   192k|    _Py_CODEUNIT *next_instr;
 1266|   192k|    _PyStackRef *stack_pointer;
 1267|   192k|    entry.stack[0] = PyStackRef_NULL;
 1268|       |#ifdef Py_STACKREF_DEBUG
 1269|       |    entry.frame.f_funcobj = PyStackRef_None;
 1270|       |#elif defined(Py_DEBUG)
 1271|       |    /* Set these to invalid but identifiable values for debugging. */
 1272|       |    entry.frame.f_funcobj = (_PyStackRef){.bits = 0xaaa0};
 1273|       |    entry.frame.f_locals = (PyObject*)0xaaa1;
 1274|       |    entry.frame.frame_obj = (PyFrameObject*)0xaaa2;
 1275|       |    entry.frame.f_globals = (PyObject*)0xaaa3;
 1276|       |    entry.frame.f_builtins = (PyObject*)0xaaa4;
 1277|       |#endif
 1278|   192k|    entry.frame.f_executable = PyStackRef_None;
  ------------------
  |  |  485|   192k|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  ------------------
  |  |  |  |   55|   192k|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
 1279|   192k|    entry.frame.instr_ptr = (_Py_CODEUNIT *)_Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS + 1;
 1280|   192k|    entry.frame.stackpointer = entry.stack;
 1281|   192k|    entry.frame.owner = FRAME_OWNED_BY_INTERPRETER;
 1282|   192k|    entry.frame.visited = 0;
 1283|   192k|    entry.frame.return_offset = 0;
 1284|       |#ifdef Py_DEBUG
 1285|       |    entry.frame.lltrace = 0;
 1286|       |    entry.frame.stackpointer_valid = 1;
 1287|       |#endif
 1288|       |    /* Push frame */
 1289|   192k|    entry.frame.previous = tstate->current_frame;
 1290|   192k|    frame->previous = &entry.frame;
 1291|   192k|    tstate->current_frame = frame;
 1292|   192k|    entry.frame.localsplus[0] = PyStackRef_NULL;
 1293|       |#ifdef _Py_TIER2
 1294|       |    if (tstate->current_executor != NULL) {
 1295|       |        assert(Py_TYPE(tstate->current_executor) == &_PyUOpExecutor_Type);
 1296|       |        entry.frame.localsplus[0] = PyStackRef_FromPyObjectNew(tstate->current_executor);
 1297|       |        tstate->current_executor = NULL;
 1298|       |    }
 1299|       |#endif
 1300|       |
 1301|       |    /* support for generator.throw() */
 1302|   192k|    if (throwflag) {
  ------------------
  |  Branch (1302:9): [True: 0, False: 192k]
  ------------------
 1303|      0|        if (_Py_EnterRecursivePy(tstate)) {
  ------------------
  |  Branch (1303:13): [True: 0, False: 0]
  ------------------
 1304|      0|            goto early_exit;
 1305|      0|        }
 1306|       |#ifdef Py_GIL_DISABLED
 1307|       |        /* Load thread-local bytecode */
 1308|       |        if (frame->tlbc_index != ((_PyThreadStateImpl *)tstate)->tlbc_index) {
 1309|       |            _Py_CODEUNIT *bytecode =
 1310|       |                _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame));
 1311|       |            if (bytecode == NULL) {
 1312|       |                goto early_exit;
 1313|       |            }
 1314|       |            ptrdiff_t off = frame->instr_ptr - _PyFrame_GetBytecode(frame);
 1315|       |            frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index;
 1316|       |            frame->instr_ptr = bytecode + off;
 1317|       |        }
 1318|       |#endif
 1319|       |        /* Because this avoids the RESUME, we need to update instrumentation */
 1320|      0|        _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp);
 1321|      0|        next_instr = frame->instr_ptr;
 1322|      0|        monitor_throw(tstate, frame, next_instr);
 1323|      0|        stack_pointer = _PyFrame_GetStackPointer(frame);
 1324|      0|        _PyFrame_StackPointerInvalidate(frame);
 1325|       |#if _Py_TAIL_CALL_INTERP
 1326|       |#   if Py_STATS
 1327|       |        return _TAIL_CALL_error(frame, stack_pointer, tstate, next_instr, instruction_funcptr_handler_table, 0, lastopcode);
 1328|       |#   else
 1329|       |        return _TAIL_CALL_error(frame, stack_pointer, tstate, next_instr, instruction_funcptr_handler_table, 0);
 1330|       |#   endif
 1331|       |#else
 1332|      0|        goto error;
 1333|      0|#endif
 1334|      0|    }
 1335|       |
 1336|       |#if _Py_TAIL_CALL_INTERP
 1337|       |#   if Py_STATS
 1338|       |        return _TAIL_CALL_start_frame(frame, NULL, tstate, NULL, instruction_funcptr_handler_table, 0, lastopcode);
 1339|       |#   else
 1340|       |        return _TAIL_CALL_start_frame(frame, NULL, tstate, NULL, instruction_funcptr_handler_table, 0);
 1341|       |#   endif
 1342|       |#else
 1343|   192k|    goto start_frame;
 1344|   192k|#   include "generated_cases.c.h"
  ------------------
  |  |    1|       |// This file is generated by Tools/cases_generator/tier1_generator.py
  |  |    2|       |// from:
  |  |    3|       |//   Python/bytecodes.c
  |  |    4|       |// Do not edit!
  |  |    5|       |
  |  |    6|       |#ifdef TIER_TWO
  |  |    7|       |    #error "This file is for Tier 1 only"
  |  |    8|       |#endif
  |  |    9|      0|#define TIER_ONE 1
  |  |   10|       |
  |  |   11|      0|#if !_Py_TAIL_CALL_INTERP
  |  |   12|       |#if !USE_COMPUTED_GOTOS
  |  |   13|       |    dispatch_opcode:
  |  |   14|       |        switch (dispatch_code)
  |  |   15|       |#endif
  |  |   16|      0|        {
  |  |   17|      0|#endif /* _Py_TAIL_CALL_INTERP */
  |  |   18|       |            /* BEGIN INSTRUCTIONS */
  |  |   19|       |
  |  |   20|       |
  |  |   21|  2.63M|        TARGET(BINARY_OP) {
  |  |  ------------------
  |  |  |  |  132|  2.63M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |   22|       |            #if _Py_TAIL_CALL_INTERP
  |  |   23|       |            int opcode = BINARY_OP;
  |  |   24|       |            (void)(opcode);
  |  |   25|       |            #endif
  |  |   26|  2.63M|            frame->instr_ptr = next_instr;
  |  |   27|  2.63M|            next_instr += 6;
  |  |   28|  2.63M|            INSTRUCTION_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |   71|  2.63M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |   29|  11.9M|            PREDICTED_BINARY_OP:;
  |  |   30|  11.9M|            _Py_CODEUNIT* const this_instr = next_instr - 6;
  |  |   31|  11.9M|            (void)this_instr;
  |  |   32|  11.9M|            _PyStackRef lhs;
  |  |   33|  11.9M|            _PyStackRef rhs;
  |  |   34|  11.9M|            _PyStackRef res;
  |  |   35|  11.9M|            _PyStackRef l;
  |  |   36|  11.9M|            _PyStackRef r;
  |  |   37|  11.9M|            _PyStackRef value;
  |  |   38|       |            // _SPECIALIZE_BINARY_OP
  |  |   39|  11.9M|            {
  |  |   40|  11.9M|                rhs = stack_pointer[-1];
  |  |   41|  11.9M|                lhs = stack_pointer[-2];
  |  |   42|  11.9M|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |   43|  11.9M|                (void)counter;
  |  |   44|  11.9M|                #if ENABLE_SPECIALIZATION
  |  |   45|  11.9M|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  11.9M|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 177k, False: 11.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|   177k|                    next_instr = this_instr;
  |  |   47|   177k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |   48|   177k|                    _PyFrame_StackPointerValidate(frame);
  |  |   49|   177k|                    _Py_Specialize_BinaryOp(lhs, rhs, next_instr, oparg, LOCALS_ARRAY);
  |  |  ------------------
  |  |  |  |  284|   177k|#define LOCALS_ARRAY    (frame->localsplus)
  |  |  ------------------
  |  |   50|   177k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |   51|   177k|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|   177k|    { \
  |  |  |  |  217|   177k|        opcode = next_instr->op.code; \
  |  |  |  |  218|   177k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   177k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|   177k|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|   177k|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|   177k|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|   177k|    }
  |  |  ------------------
  |  |   52|   177k|                }
  |  |   53|  11.9M|                OPCODE_DEFERRED_INC(BINARY_OP);
  |  |  ------------------
  |  |  |  |   90|  11.9M|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |   54|  11.9M|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  11.9M|    do { \
  |  |  |  |  378|  11.9M|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  11.9M|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 11.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   55|  11.9M|                #endif  /* ENABLE_SPECIALIZATION */
  |  |   56|  11.9M|                assert(NB_ADD <= oparg);
  |  |  ------------------
  |  |  |  Branch (56:17): [True: 11.7M, False: 177k]
  |  |  ------------------
  |  |   57|  11.9M|                assert(oparg <= NB_OPARG_LAST);
  |  |  ------------------
  |  |  |  Branch (57:17): [True: 11.7M, False: 0]
  |  |  ------------------
  |  |   58|  11.7M|            }
  |  |   59|       |            /* Skip 4 cache entries */
  |  |   60|       |            // _BINARY_OP
  |  |   61|  11.7M|            {
  |  |   62|  11.7M|                PyObject *lhs_o = PyStackRef_AsPyObjectBorrow(lhs);
  |  |   63|  11.7M|                PyObject *rhs_o = PyStackRef_AsPyObjectBorrow(rhs);
  |  |   64|  11.7M|                assert(_PyEval_BinaryOps[oparg]);
  |  |  ------------------
  |  |  |  Branch (64:17): [True: 11.7M, False: 0]
  |  |  ------------------
  |  |   65|  11.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |   66|  11.7M|                _PyFrame_StackPointerValidate(frame);
  |  |   67|  11.7M|                PyObject *res_o = _PyEval_BinaryOps[oparg](lhs_o, rhs_o);
  |  |   68|  11.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  |   69|  11.7M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (69:21): [True: 122, False: 11.7M]
  |  |  ------------------
  |  |   70|    122|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    122|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |   71|      0|                }
  |  |   72|  11.7M|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |   73|  11.7M|                l = lhs;
  |  |   74|  11.7M|                r = rhs;
  |  |   75|  11.7M|            }
  |  |   76|       |            // _POP_TOP
  |  |   77|      0|            {
  |  |   78|  11.7M|                value = r;
  |  |   79|  11.7M|                stack_pointer[-2] = res;
  |  |   80|  11.7M|                stack_pointer[-1] = l;
  |  |   81|  11.7M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (81:17): [True: 11.7M, False: 0]
  |  |  ------------------
  |  |   82|  11.7M|                _PyFrame_StackPointerValidate(frame);
  |  |   83|  11.7M|                PyStackRef_XCLOSE(value);
  |  |   84|  11.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  |   85|  11.7M|            }
  |  |   86|       |            // _POP_TOP
  |  |   87|      0|            {
  |  |   88|  11.7M|                value = l;
  |  |   89|  11.7M|                stack_pointer += -1;
  |  |   90|  11.7M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  11.7M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |   91|  11.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |   92|  11.7M|                _PyFrame_StackPointerValidate(frame);
  |  |   93|  11.7M|                PyStackRef_XCLOSE(value);
  |  |   94|  11.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  |   95|  11.7M|            }
  |  |   96|  11.7M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  11.7M|    { \
  |  |  |  |  201|  11.7M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  11.7M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  11.7M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  11.7M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  11.7M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  11.7M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  11.7M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  11.7M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 11.7M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  11.7M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  11.7M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  11.7M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  11.7M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  11.7M|    }
  |  |  ------------------
  |  |   97|  11.7M|        }
  |  |   98|       |
  |  |   99|      0|        TARGET(BINARY_OP_ADD_FLOAT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  100|       |            #if _Py_TAIL_CALL_INTERP
  |  |  101|       |            int opcode = BINARY_OP_ADD_FLOAT;
  |  |  102|       |            (void)(opcode);
  |  |  103|       |            #endif
  |  |  104|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  105|      0|            (void)this_instr;
  |  |  106|      0|            frame->instr_ptr = next_instr;
  |  |  107|      0|            next_instr += 6;
  |  |  108|      0|            INSTRUCTION_STATS(BINARY_OP_ADD_FLOAT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  109|      0|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  110|      0|            _PyStackRef value;
  |  |  111|      0|            _PyStackRef left;
  |  |  112|      0|            _PyStackRef right;
  |  |  113|      0|            _PyStackRef res;
  |  |  114|      0|            _PyStackRef l;
  |  |  115|      0|            _PyStackRef r;
  |  |  116|       |            // _GUARD_TOS_FLOAT
  |  |  117|      0|            {
  |  |  118|      0|                value = stack_pointer[-1];
  |  |  119|      0|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  120|      0|                if (!PyFloat_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (120:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  121|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  122|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (122:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  123|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  124|      0|                }
  |  |  125|      0|            }
  |  |  126|       |            // _GUARD_NOS_FLOAT
  |  |  127|      0|            {
  |  |  128|      0|                left = stack_pointer[-2];
  |  |  129|      0|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  130|      0|                if (!PyFloat_CheckExact(left_o)) {
  |  |  ------------------
  |  |  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (130:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  131|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  132|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (132:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  133|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  134|      0|                }
  |  |  135|      0|            }
  |  |  136|       |            /* Skip 5 cache entries */
  |  |  137|       |            // _BINARY_OP_ADD_FLOAT
  |  |  138|      0|            {
  |  |  139|      0|                right = value;
  |  |  140|      0|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  141|      0|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  142|      0|                assert(PyFloat_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (142:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  143|      0|                assert(PyFloat_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (143:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  144|      0|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  145|      0|                double dres =
  |  |  146|      0|                ((PyFloatObject *)left_o)->ob_fval +
  |  |  147|      0|                ((PyFloatObject *)right_o)->ob_fval;
  |  |  148|      0|                PyObject *d = PyFloat_FromDouble(dres);
  |  |  149|      0|                if (d == NULL) {
  |  |  ------------------
  |  |  |  Branch (149:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  150|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  151|      0|                }
  |  |  152|      0|                res = PyStackRef_FromPyObjectSteal(d);
  |  |  153|      0|                l = left;
  |  |  154|      0|                r = right;
  |  |  155|      0|            }
  |  |  156|       |            // _POP_TOP_FLOAT
  |  |  157|      0|            {
  |  |  158|      0|                value = r;
  |  |  159|      0|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (159:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  160|      0|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  |  161|      0|            }
  |  |  162|       |            // _POP_TOP_FLOAT
  |  |  163|      0|            {
  |  |  164|      0|                value = l;
  |  |  165|      0|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (165:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  166|      0|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  |  167|      0|            }
  |  |  168|      0|            stack_pointer[-2] = res;
  |  |  169|      0|            stack_pointer += -1;
  |  |  170|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  171|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |  172|      0|        }
  |  |  173|       |
  |  |  174|  31.1M|        TARGET(BINARY_OP_ADD_INT) {
  |  |  ------------------
  |  |  |  |  132|  31.1M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  175|       |            #if _Py_TAIL_CALL_INTERP
  |  |  176|       |            int opcode = BINARY_OP_ADD_INT;
  |  |  177|       |            (void)(opcode);
  |  |  178|       |            #endif
  |  |  179|  31.1M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  180|  31.1M|            (void)this_instr;
  |  |  181|  31.1M|            frame->instr_ptr = next_instr;
  |  |  182|  31.1M|            next_instr += 6;
  |  |  183|  31.1M|            INSTRUCTION_STATS(BINARY_OP_ADD_INT);
  |  |  ------------------
  |  |  |  |   71|  31.1M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  184|  31.1M|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  185|  31.1M|            _PyStackRef value;
  |  |  186|  31.1M|            _PyStackRef left;
  |  |  187|  31.1M|            _PyStackRef right;
  |  |  188|  31.1M|            _PyStackRef res;
  |  |  189|  31.1M|            _PyStackRef l;
  |  |  190|  31.1M|            _PyStackRef r;
  |  |  191|       |            // _GUARD_TOS_INT
  |  |  192|  31.1M|            {
  |  |  193|  31.1M|                value = stack_pointer[-1];
  |  |  194|  31.1M|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  195|  31.1M|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (195:21): [True: 2.56k, False: 31.1M]
  |  |  ------------------
  |  |  196|  2.56k|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|  2.56k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  197|  2.56k|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (197:21): [True: 2.56k, False: 0]
  |  |  ------------------
  |  |  198|  2.56k|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|  2.56k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  199|      0|                }
  |  |  200|  31.1M|            }
  |  |  201|       |            // _GUARD_NOS_INT
  |  |  202|  31.1M|            {
  |  |  203|  31.1M|                left = stack_pointer[-2];
  |  |  204|  31.1M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  205|  31.1M|                if (!_PyLong_CheckExactAndCompact(left_o)) {
  |  |  ------------------
  |  |  |  Branch (205:21): [True: 134, False: 31.1M]
  |  |  ------------------
  |  |  206|    134|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|    134|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  207|    134|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (207:21): [True: 134, False: 0]
  |  |  ------------------
  |  |  208|    134|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|    134|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  209|      0|                }
  |  |  210|  31.1M|            }
  |  |  211|       |            /* Skip 5 cache entries */
  |  |  212|       |            // _BINARY_OP_ADD_INT
  |  |  213|  31.1M|            {
  |  |  214|  31.1M|                right = value;
  |  |  215|  31.1M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  216|  31.1M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  217|  31.1M|                assert(PyLong_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (217:17): [True: 31.1M, False: 0]
  |  |  ------------------
  |  |  218|  31.1M|                assert(PyLong_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (218:17): [True: 31.1M, False: 0]
  |  |  ------------------
  |  |  219|  31.1M|                assert(_PyLong_BothAreCompact((PyLongObject *)left_o, (PyLongObject *)right_o));
  |  |  ------------------
  |  |  |  Branch (219:17): [True: 31.1M, False: 0]
  |  |  ------------------
  |  |  220|  31.1M|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  31.1M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  221|  31.1M|                res = _PyCompactLong_Add((PyLongObject *)left_o, (PyLongObject *)right_o);
  |  |  222|  31.1M|                if (PyStackRef_IsNull(res)) {
  |  |  ------------------
  |  |  |  |  482|  31.1M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  31.1M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  31.1M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 10, False: 31.1M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  223|     10|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|     10|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  224|     10|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (224:21): [True: 10, False: 0]
  |  |  ------------------
  |  |  225|     10|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|     10|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  226|      0|                }
  |  |  227|  31.1M|                l = left;
  |  |  228|  31.1M|                r = right;
  |  |  229|  31.1M|            }
  |  |  230|       |            // _POP_TOP_INT
  |  |  231|      0|            {
  |  |  232|  31.1M|                value = r;
  |  |  233|  31.1M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (233:17): [True: 31.1M, False: 0]
  |  |  ------------------
  |  |  234|  31.1M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |  235|  31.1M|            }
  |  |  236|       |            // _POP_TOP_INT
  |  |  237|      0|            {
  |  |  238|  31.1M|                value = l;
  |  |  239|  31.1M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (239:17): [True: 31.1M, False: 0]
  |  |  ------------------
  |  |  240|  31.1M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |  241|  31.1M|            }
  |  |  242|      0|            stack_pointer[-2] = res;
  |  |  243|  31.1M|            stack_pointer += -1;
  |  |  244|  31.1M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  31.1M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  245|  31.1M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  31.1M|    { \
  |  |  |  |  201|  31.1M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  31.1M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  31.1M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  31.1M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  31.1M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  31.1M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  31.1M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  31.1M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 31.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  31.1M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  31.1M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  31.1M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  31.1M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  31.1M|    }
  |  |  ------------------
  |  |  246|  31.1M|        }
  |  |  247|       |
  |  |  248|   428k|        TARGET(BINARY_OP_ADD_UNICODE) {
  |  |  ------------------
  |  |  |  |  132|   428k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  249|       |            #if _Py_TAIL_CALL_INTERP
  |  |  250|       |            int opcode = BINARY_OP_ADD_UNICODE;
  |  |  251|       |            (void)(opcode);
  |  |  252|       |            #endif
  |  |  253|   428k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  254|   428k|            (void)this_instr;
  |  |  255|   428k|            frame->instr_ptr = next_instr;
  |  |  256|   428k|            next_instr += 6;
  |  |  257|   428k|            INSTRUCTION_STATS(BINARY_OP_ADD_UNICODE);
  |  |  ------------------
  |  |  |  |   71|   428k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  258|   428k|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  259|   428k|            _PyStackRef value;
  |  |  260|   428k|            _PyStackRef nos;
  |  |  261|   428k|            _PyStackRef left;
  |  |  262|   428k|            _PyStackRef right;
  |  |  263|   428k|            _PyStackRef res;
  |  |  264|   428k|            _PyStackRef l;
  |  |  265|   428k|            _PyStackRef r;
  |  |  266|       |            // _GUARD_TOS_UNICODE
  |  |  267|   428k|            {
  |  |  268|   428k|                value = stack_pointer[-1];
  |  |  269|   428k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  270|   428k|                if (!PyUnicode_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |  104|   428k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   428k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   428k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   428k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (270:21): [True: 0, False: 428k]
  |  |  ------------------
  |  |  271|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  272|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (272:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  273|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  274|      0|                }
  |  |  275|   428k|            }
  |  |  276|       |            // _GUARD_NOS_UNICODE
  |  |  277|   428k|            {
  |  |  278|   428k|                nos = stack_pointer[-2];
  |  |  279|   428k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |  280|   428k|                if (!PyUnicode_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |  104|   428k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   428k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   428k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   428k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (280:21): [True: 0, False: 428k]
  |  |  ------------------
  |  |  281|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  282|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (282:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  283|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  284|      0|                }
  |  |  285|   428k|            }
  |  |  286|       |            /* Skip 5 cache entries */
  |  |  287|       |            // _BINARY_OP_ADD_UNICODE
  |  |  288|   428k|            {
  |  |  289|   428k|                right = value;
  |  |  290|   428k|                left = nos;
  |  |  291|   428k|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  292|   428k|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  293|   428k|                assert(PyUnicode_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (293:17): [True: 428k, False: 0]
  |  |  ------------------
  |  |  294|   428k|                assert(PyUnicode_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (294:17): [True: 428k, False: 0]
  |  |  ------------------
  |  |  295|   428k|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|   428k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  296|   428k|                PyObject *res_o = PyUnicode_Concat(left_o, right_o);
  |  |  297|   428k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (297:21): [True: 0, False: 428k]
  |  |  ------------------
  |  |  298|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  299|      0|                }
  |  |  300|   428k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |  301|   428k|                l = left;
  |  |  302|   428k|                r = right;
  |  |  303|   428k|            }
  |  |  304|       |            // _POP_TOP_UNICODE
  |  |  305|      0|            {
  |  |  306|   428k|                value = r;
  |  |  307|   428k|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (307:17): [True: 428k, False: 0]
  |  |  ------------------
  |  |  308|   428k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  |  309|   428k|            }
  |  |  310|       |            // _POP_TOP_UNICODE
  |  |  311|      0|            {
  |  |  312|   428k|                value = l;
  |  |  313|   428k|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (313:17): [True: 428k, False: 0]
  |  |  ------------------
  |  |  314|   428k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  |  315|   428k|            }
  |  |  316|      0|            stack_pointer[-2] = res;
  |  |  317|   428k|            stack_pointer += -1;
  |  |  318|   428k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   428k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  319|   428k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   428k|    { \
  |  |  |  |  201|   428k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   428k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   428k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   428k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   428k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   428k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   428k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   428k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 428k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   428k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   428k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   428k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   428k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   428k|    }
  |  |  ------------------
  |  |  320|   428k|        }
  |  |  321|       |
  |  |  322|  47.2k|        TARGET(BINARY_OP_EXTEND) {
  |  |  ------------------
  |  |  |  |  132|  47.2k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  323|       |            #if _Py_TAIL_CALL_INTERP
  |  |  324|       |            int opcode = BINARY_OP_EXTEND;
  |  |  325|       |            (void)(opcode);
  |  |  326|       |            #endif
  |  |  327|  47.2k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  328|  47.2k|            (void)this_instr;
  |  |  329|  47.2k|            frame->instr_ptr = next_instr;
  |  |  330|  47.2k|            next_instr += 6;
  |  |  331|  47.2k|            INSTRUCTION_STATS(BINARY_OP_EXTEND);
  |  |  ------------------
  |  |  |  |   71|  47.2k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  332|  47.2k|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  333|  47.2k|            _PyStackRef left;
  |  |  334|  47.2k|            _PyStackRef right;
  |  |  335|  47.2k|            _PyStackRef res;
  |  |  336|  47.2k|            _PyStackRef l;
  |  |  337|  47.2k|            _PyStackRef r;
  |  |  338|  47.2k|            _PyStackRef value;
  |  |  339|       |            /* Skip 1 cache entry */
  |  |  340|       |            // _GUARD_BINARY_OP_EXTEND
  |  |  341|  47.2k|            {
  |  |  342|  47.2k|                right = stack_pointer[-1];
  |  |  343|  47.2k|                left = stack_pointer[-2];
  |  |  344|  47.2k|                PyObject *descr = read_obj(&this_instr[2].cache);
  |  |  345|  47.2k|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  346|  47.2k|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  347|  47.2k|                _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr;
  |  |  348|  47.2k|                assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5);
  |  |  ------------------
  |  |  |  Branch (348:17): [True: 47.2k, Folded]
  |  |  ------------------
  |  |  349|  47.2k|                assert(d != NULL);
  |  |  ------------------
  |  |  |  Branch (349:17): [True: 47.2k, False: 0]
  |  |  ------------------
  |  |  350|  47.2k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  351|  47.2k|                _PyFrame_StackPointerValidate(frame);
  |  |  352|  47.2k|                int match = (d->guard != NULL)
  |  |  ------------------
  |  |  |  Branch (352:29): [True: 21.3k, False: 25.9k]
  |  |  ------------------
  |  |  353|  47.2k|                ? d->guard(left_o, right_o)
  |  |  354|  47.2k|            : (Py_TYPE(left_o) == d->lhs_type && Py_TYPE(right_o) == d->rhs_type);
  |  |  ------------------
  |  |  |  |  213|  25.9k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  25.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  25.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           : (Py_TYPE(left_o) == d->lhs_type && Py_TYPE(right_o) == d->rhs_type);
  |  |  ------------------
  |  |  |  |  213|  25.9k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  25.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  25.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (354:16): [True: 25.9k, False: 0]
  |  |  |  Branch (354:50): [True: 25.9k, False: 0]
  |  |  ------------------
  |  |  355|  47.2k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  356|  47.2k|                if (!match) {
  |  |  ------------------
  |  |  |  Branch (356:21): [True: 0, False: 47.2k]
  |  |  ------------------
  |  |  357|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  358|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (358:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  359|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  360|      0|                }
  |  |  361|  47.2k|            }
  |  |  362|       |            /* Skip -4 cache entry */
  |  |  363|       |            // _BINARY_OP_EXTEND
  |  |  364|  47.2k|            {
  |  |  365|  47.2k|                PyObject *descr = read_obj(&this_instr[2].cache);
  |  |  366|  47.2k|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  367|  47.2k|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  368|  47.2k|                assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5);
  |  |  ------------------
  |  |  |  Branch (368:17): [True: 47.2k, Folded]
  |  |  ------------------
  |  |  369|  47.2k|                _PyBinaryOpSpecializationDescr *d = (_PyBinaryOpSpecializationDescr*)descr;
  |  |  370|  47.2k|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  47.2k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  371|  47.2k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (371:17): [True: 47.2k, False: 0]
  |  |  ------------------
  |  |  372|  47.2k|                _PyFrame_StackPointerValidate(frame);
  |  |  373|  47.2k|                PyObject *res_o = d->action(left_o, right_o);
  |  |  374|  47.2k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  375|  47.2k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (375:21): [True: 0, False: 47.2k]
  |  |  ------------------
  |  |  376|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  377|      0|                }
  |  |  378|  47.2k|                assert(d->result_type == NULL || Py_TYPE(res_o) == d->result_type);
  |  |  ------------------
  |  |  |  Branch (378:17): [True: 0, False: 47.2k]
  |  |  |  Branch (378:17): [True: 47.2k, False: 0]
  |  |  ------------------
  |  |  379|  47.2k|                assert(!d->result_unique || Py_REFCNT(res_o) == 1 || _Py_IsImmortal(res_o));
  |  |  ------------------
  |  |  |  Branch (379:17): [True: 25.9k, False: 21.3k]
  |  |  |  Branch (379:17): [True: 20.4k, False: 846]
  |  |  |  Branch (379:17): [True: 846, False: 0]
  |  |  ------------------
  |  |  380|  47.2k|                assert(!PyFloat_CheckExact(res_o) || Py_REFCNT(res_o) == 1);
  |  |  ------------------
  |  |  |  Branch (380:17): [True: 47.2k, False: 0]
  |  |  |  Branch (380:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  381|  47.2k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |  382|  47.2k|                l = left;
  |  |  383|  47.2k|                r = right;
  |  |  384|  47.2k|            }
  |  |  385|       |            // _POP_TOP
  |  |  386|      0|            {
  |  |  387|  47.2k|                value = r;
  |  |  388|  47.2k|                stack_pointer[-2] = res;
  |  |  389|  47.2k|                stack_pointer[-1] = l;
  |  |  390|  47.2k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (390:17): [True: 47.2k, False: 0]
  |  |  ------------------
  |  |  391|  47.2k|                _PyFrame_StackPointerValidate(frame);
  |  |  392|  47.2k|                PyStackRef_XCLOSE(value);
  |  |  393|  47.2k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  394|  47.2k|            }
  |  |  395|       |            // _POP_TOP
  |  |  396|      0|            {
  |  |  397|  47.2k|                value = l;
  |  |  398|  47.2k|                stack_pointer += -1;
  |  |  399|  47.2k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  47.2k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  400|  47.2k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  401|  47.2k|                _PyFrame_StackPointerValidate(frame);
  |  |  402|  47.2k|                PyStackRef_XCLOSE(value);
  |  |  403|  47.2k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  404|  47.2k|            }
  |  |  405|  47.2k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  47.2k|    { \
  |  |  |  |  201|  47.2k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  47.2k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  47.2k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  47.2k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  47.2k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  47.2k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  47.2k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  47.2k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 47.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  47.2k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  47.2k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  47.2k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  47.2k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  47.2k|    }
  |  |  ------------------
  |  |  406|  47.2k|        }
  |  |  407|       |
  |  |  408|    156|        TARGET(BINARY_OP_INPLACE_ADD_UNICODE) {
  |  |  ------------------
  |  |  |  |  132|    156|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  409|       |            #if _Py_TAIL_CALL_INTERP
  |  |  410|       |            int opcode = BINARY_OP_INPLACE_ADD_UNICODE;
  |  |  411|       |            (void)(opcode);
  |  |  412|       |            #endif
  |  |  413|    156|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  414|    156|            (void)this_instr;
  |  |  415|    156|            frame->instr_ptr = next_instr;
  |  |  416|    156|            next_instr += 6;
  |  |  417|    156|            INSTRUCTION_STATS(BINARY_OP_INPLACE_ADD_UNICODE);
  |  |  ------------------
  |  |  |  |   71|    156|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  418|    156|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  419|    156|            _PyStackRef value;
  |  |  420|    156|            _PyStackRef nos;
  |  |  421|    156|            _PyStackRef left;
  |  |  422|    156|            _PyStackRef right;
  |  |  423|    156|            _PyStackRef res;
  |  |  424|       |            // _GUARD_TOS_UNICODE
  |  |  425|    156|            {
  |  |  426|    156|                value = stack_pointer[-1];
  |  |  427|    156|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  428|    156|                if (!PyUnicode_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |  104|    156|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    156|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    156|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (428:21): [True: 0, False: 156]
  |  |  ------------------
  |  |  429|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  430|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (430:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  431|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  432|      0|                }
  |  |  433|    156|            }
  |  |  434|       |            // _GUARD_NOS_UNICODE
  |  |  435|    156|            {
  |  |  436|    156|                nos = stack_pointer[-2];
  |  |  437|    156|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |  438|    156|                if (!PyUnicode_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |  104|    156|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    156|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    156|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (438:21): [True: 0, False: 156]
  |  |  ------------------
  |  |  439|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  440|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (440:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  441|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  442|      0|                }
  |  |  443|    156|            }
  |  |  444|       |            /* Skip 5 cache entries */
  |  |  445|       |            // _BINARY_OP_INPLACE_ADD_UNICODE
  |  |  446|    156|            {
  |  |  447|    156|                right = value;
  |  |  448|    156|                left = nos;
  |  |  449|    156|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  450|    156|                assert(PyUnicode_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (450:17): [True: 156, False: 0]
  |  |  ------------------
  |  |  451|    156|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(right)));
  |  |  ------------------
  |  |  |  Branch (451:17): [True: 156, False: 0]
  |  |  ------------------
  |  |  452|    156|                int next_oparg;
  |  |  453|    156|                #if TIER_ONE
  |  |  454|    156|                assert(next_instr->op.code == STORE_FAST);
  |  |  ------------------
  |  |  |  Branch (454:17): [True: 156, False: 0]
  |  |  ------------------
  |  |  455|    156|                next_oparg = next_instr->op.arg;
  |  |  456|       |                #else
  |  |  457|       |                next_oparg = (int)CURRENT_OPERAND0_16();
  |  |  458|       |                #endif
  |  |  459|    156|                _PyStackRef *target_local = &GETLOCAL(next_oparg);
  |  |  ------------------
  |  |  |  |  285|    156|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |  460|    156|                assert(PyUnicode_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (460:17): [True: 156, False: 0]
  |  |  ------------------
  |  |  461|    156|                if (PyStackRef_AsPyObjectBorrow(*target_local) != left_o) {
  |  |  ------------------
  |  |  |  Branch (461:21): [True: 0, False: 156]
  |  |  ------------------
  |  |  462|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  463|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (463:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  464|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  465|      0|                }
  |  |  466|    156|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|    156|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  467|    156|                assert(Py_REFCNT(left_o) >= 2 || !PyStackRef_IsHeapSafe(left));
  |  |  ------------------
  |  |  |  Branch (467:17): [True: 78, False: 78]
  |  |  |  Branch (467:17): [True: 78, False: 0]
  |  |  ------------------
  |  |  468|    156|                PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local);
  |  |  469|    156|                PyObject *right_o = PyStackRef_AsPyObjectSteal(right);
  |  |  470|    156|                PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc);
  |  |  471|    156|                stack_pointer += -2;
  |  |  472|    156|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    156|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  473|    156|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  474|    156|                _PyFrame_StackPointerValidate(frame);
  |  |  475|    156|                PyUnicode_Append(&temp, right_o);
  |  |  476|    156|                _PyFrame_StackPointerInvalidate(frame);
  |  |  477|    156|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (477:17): [True: 156, False: 0]
  |  |  ------------------
  |  |  478|    156|                _PyFrame_StackPointerValidate(frame);
  |  |  479|    156|                _Py_DECREF_SPECIALIZED(right_o, _PyUnicode_ExactDealloc);
  |  |  ------------------
  |  |  |  |   96|    156|    do { \
  |  |  |  |   97|    156|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    156|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   98|    156|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|    156|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    156|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    156|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 132, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   99|    132|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|    132|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  100|    132|            break; \
  |  |  |  |  101|    132|        } \
  |  |  |  |  102|    156|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|     24|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  103|     24|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (103:13): [True: 24, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  104|     24|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|     24|    do { \
  |  |  |  |  |  |  113|     24|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|     24|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|     24|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 24]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  105|     24|            destructor d = (destructor)(dealloc); \
  |  |  |  |  106|     24|            d(op); \
  |  |  |  |  107|     24|        } \
  |  |  |  |  108|     24|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (108:14): [Folded, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  480|    156|                _PyFrame_StackPointerInvalidate(frame);
  |  |  481|    156|                *target_local = PyStackRef_NULL;
  |  |  482|    156|                if (temp == NULL) {
  |  |  ------------------
  |  |  |  Branch (482:21): [True: 0, False: 156]
  |  |  ------------------
  |  |  483|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  484|      0|                }
  |  |  485|    156|                res = PyStackRef_FromPyObjectSteal(temp);
  |  |  486|    156|            }
  |  |  487|      0|            stack_pointer[0] = res;
  |  |  488|    156|            stack_pointer += 1;
  |  |  489|    156|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    156|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  490|    156|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    156|    { \
  |  |  |  |  201|    156|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    156|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    156|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    156|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    156|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    156|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    156|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    156|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 156]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    156|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    156|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    156|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    156|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    156|    }
  |  |  ------------------
  |  |  491|    156|        }
  |  |  492|       |
  |  |  493|      0|        TARGET(BINARY_OP_MULTIPLY_FLOAT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  494|       |            #if _Py_TAIL_CALL_INTERP
  |  |  495|       |            int opcode = BINARY_OP_MULTIPLY_FLOAT;
  |  |  496|       |            (void)(opcode);
  |  |  497|       |            #endif
  |  |  498|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  499|      0|            (void)this_instr;
  |  |  500|      0|            frame->instr_ptr = next_instr;
  |  |  501|      0|            next_instr += 6;
  |  |  502|      0|            INSTRUCTION_STATS(BINARY_OP_MULTIPLY_FLOAT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  503|      0|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  504|      0|            _PyStackRef value;
  |  |  505|      0|            _PyStackRef left;
  |  |  506|      0|            _PyStackRef right;
  |  |  507|      0|            _PyStackRef res;
  |  |  508|      0|            _PyStackRef l;
  |  |  509|      0|            _PyStackRef r;
  |  |  510|       |            // _GUARD_TOS_FLOAT
  |  |  511|      0|            {
  |  |  512|      0|                value = stack_pointer[-1];
  |  |  513|      0|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  514|      0|                if (!PyFloat_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (514:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  515|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  516|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (516:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  517|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  518|      0|                }
  |  |  519|      0|            }
  |  |  520|       |            // _GUARD_NOS_FLOAT
  |  |  521|      0|            {
  |  |  522|      0|                left = stack_pointer[-2];
  |  |  523|      0|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  524|      0|                if (!PyFloat_CheckExact(left_o)) {
  |  |  ------------------
  |  |  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (524:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  525|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  526|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (526:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  527|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  528|      0|                }
  |  |  529|      0|            }
  |  |  530|       |            /* Skip 5 cache entries */
  |  |  531|       |            // _BINARY_OP_MULTIPLY_FLOAT
  |  |  532|      0|            {
  |  |  533|      0|                right = value;
  |  |  534|      0|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  535|      0|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  536|      0|                assert(PyFloat_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (536:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  537|      0|                assert(PyFloat_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (537:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  538|      0|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  539|      0|                double dres =
  |  |  540|      0|                ((PyFloatObject *)left_o)->ob_fval *
  |  |  541|      0|                ((PyFloatObject *)right_o)->ob_fval;
  |  |  542|      0|                PyObject *d = PyFloat_FromDouble(dres);
  |  |  543|      0|                if (d == NULL) {
  |  |  ------------------
  |  |  |  Branch (543:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  544|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  545|      0|                }
  |  |  546|      0|                res = PyStackRef_FromPyObjectSteal(d);
  |  |  547|      0|                l = left;
  |  |  548|      0|                r = right;
  |  |  549|      0|            }
  |  |  550|       |            // _POP_TOP_FLOAT
  |  |  551|      0|            {
  |  |  552|      0|                value = r;
  |  |  553|      0|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (553:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  554|      0|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  |  555|      0|            }
  |  |  556|       |            // _POP_TOP_FLOAT
  |  |  557|      0|            {
  |  |  558|      0|                value = l;
  |  |  559|      0|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (559:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  560|      0|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  |  561|      0|            }
  |  |  562|      0|            stack_pointer[-2] = res;
  |  |  563|      0|            stack_pointer += -1;
  |  |  564|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  565|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |  566|      0|        }
  |  |  567|       |
  |  |  568|  1.53M|        TARGET(BINARY_OP_MULTIPLY_INT) {
  |  |  ------------------
  |  |  |  |  132|  1.53M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  569|       |            #if _Py_TAIL_CALL_INTERP
  |  |  570|       |            int opcode = BINARY_OP_MULTIPLY_INT;
  |  |  571|       |            (void)(opcode);
  |  |  572|       |            #endif
  |  |  573|  1.53M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  574|  1.53M|            (void)this_instr;
  |  |  575|  1.53M|            frame->instr_ptr = next_instr;
  |  |  576|  1.53M|            next_instr += 6;
  |  |  577|  1.53M|            INSTRUCTION_STATS(BINARY_OP_MULTIPLY_INT);
  |  |  ------------------
  |  |  |  |   71|  1.53M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  578|  1.53M|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  579|  1.53M|            _PyStackRef value;
  |  |  580|  1.53M|            _PyStackRef left;
  |  |  581|  1.53M|            _PyStackRef right;
  |  |  582|  1.53M|            _PyStackRef res;
  |  |  583|  1.53M|            _PyStackRef l;
  |  |  584|  1.53M|            _PyStackRef r;
  |  |  585|       |            // _GUARD_TOS_INT
  |  |  586|  1.53M|            {
  |  |  587|  1.53M|                value = stack_pointer[-1];
  |  |  588|  1.53M|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  589|  1.53M|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (589:21): [True: 1.79k, False: 1.53M]
  |  |  ------------------
  |  |  590|  1.79k|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|  1.79k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  591|  1.79k|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (591:21): [True: 1.79k, False: 0]
  |  |  ------------------
  |  |  592|  1.79k|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|  1.79k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  593|      0|                }
  |  |  594|  1.53M|            }
  |  |  595|       |            // _GUARD_NOS_INT
  |  |  596|  1.53M|            {
  |  |  597|  1.53M|                left = stack_pointer[-2];
  |  |  598|  1.53M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  599|  1.53M|                if (!_PyLong_CheckExactAndCompact(left_o)) {
  |  |  ------------------
  |  |  |  Branch (599:21): [True: 1.59k, False: 1.53M]
  |  |  ------------------
  |  |  600|  1.59k|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|  1.59k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  601|  1.59k|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (601:21): [True: 1.59k, False: 0]
  |  |  ------------------
  |  |  602|  1.59k|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|  1.59k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  603|      0|                }
  |  |  604|  1.53M|            }
  |  |  605|       |            /* Skip 5 cache entries */
  |  |  606|       |            // _BINARY_OP_MULTIPLY_INT
  |  |  607|  1.53M|            {
  |  |  608|  1.53M|                right = value;
  |  |  609|  1.53M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  |  610|  1.53M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  |  611|  1.53M|                assert(PyLong_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (611:17): [True: 1.53M, False: 0]
  |  |  ------------------
  |  |  612|  1.53M|                assert(PyLong_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (612:17): [True: 1.53M, False: 0]
  |  |  ------------------
  |  |  613|  1.53M|                assert(_PyLong_BothAreCompact((PyLongObject *)left_o, (PyLongObject *)right_o));
  |  |  ------------------
  |  |  |  Branch (613:17): [True: 1.53M, False: 0]
  |  |  ------------------
  |  |  614|  1.53M|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  1.53M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  615|  1.53M|                res = _PyCompactLong_Multiply((PyLongObject *)left_o, (PyLongObject *)right_o);
  |  |  616|  1.53M|                if (PyStackRef_IsNull(res)) {
  |  |  ------------------
  |  |  |  |  482|  1.53M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.53M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.53M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 268, False: 1.53M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  617|    268|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|    268|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  618|    268|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (618:21): [True: 268, False: 0]
  |  |  ------------------
  |  |  619|    268|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|    268|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  620|      0|                }
  |  |  621|  1.53M|                l = left;
  |  |  622|  1.53M|                r = right;
  |  |  623|  1.53M|            }
  |  |  624|       |            // _POP_TOP_INT
  |  |  625|      0|            {
  |  |  626|  1.53M|                value = r;
  |  |  627|  1.53M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (627:17): [True: 1.53M, False: 0]
  |  |  ------------------
  |  |  628|  1.53M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |  629|  1.53M|            }
  |  |  630|       |            // _POP_TOP_INT
  |  |  631|      0|            {
  |  |  632|  1.53M|                value = l;
  |  |  633|  1.53M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (633:17): [True: 1.53M, False: 0]
  |  |  ------------------
  |  |  634|  1.53M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |  635|  1.53M|            }
  |  |  636|      0|            stack_pointer[-2] = res;
  |  |  637|  1.53M|            stack_pointer += -1;
  |  |  638|  1.53M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.53M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  639|  1.53M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.53M|    { \
  |  |  |  |  201|  1.53M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.53M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.53M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.53M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.53M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.53M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.53M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.53M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.53M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.53M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.53M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.53M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.53M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.53M|    }
  |  |  ------------------
  |  |  640|  1.53M|        }
  |  |  641|       |
  |  |  642|  3.08k|        TARGET(BINARY_OP_SUBSCR_DICT) {
  |  |  ------------------
  |  |  |  |  132|  3.08k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  643|       |            #if _Py_TAIL_CALL_INTERP
  |  |  644|       |            int opcode = BINARY_OP_SUBSCR_DICT;
  |  |  645|       |            (void)(opcode);
  |  |  646|       |            #endif
  |  |  647|  3.08k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  648|  3.08k|            (void)this_instr;
  |  |  649|  3.08k|            frame->instr_ptr = next_instr;
  |  |  650|  3.08k|            next_instr += 6;
  |  |  651|  3.08k|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_DICT);
  |  |  ------------------
  |  |  |  |   71|  3.08k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  652|  3.08k|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  653|  3.08k|            _PyStackRef nos;
  |  |  654|  3.08k|            _PyStackRef dict_st;
  |  |  655|  3.08k|            _PyStackRef sub_st;
  |  |  656|  3.08k|            _PyStackRef res;
  |  |  657|  3.08k|            _PyStackRef ds;
  |  |  658|  3.08k|            _PyStackRef ss;
  |  |  659|  3.08k|            _PyStackRef value;
  |  |  660|       |            // _GUARD_NOS_DICT_SUBSCRIPT
  |  |  661|  3.08k|            {
  |  |  662|  3.08k|                nos = stack_pointer[-2];
  |  |  663|  3.08k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |  664|  3.08k|                if (!Py_TYPE(o)->tp_as_mapping) {
  |  |  ------------------
  |  |  |  |  213|  3.08k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (664:21): [True: 0, False: 3.08k]
  |  |  ------------------
  |  |  665|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  666|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (666:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  667|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  668|      0|                }
  |  |  669|  3.08k|                if (Py_TYPE(o)->tp_as_mapping->mp_subscript != _PyDict_Subscript) {
  |  |  ------------------
  |  |  |  |  213|  3.08k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (669:21): [True: 0, False: 3.08k]
  |  |  ------------------
  |  |  670|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  671|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (671:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  672|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  673|      0|                }
  |  |  674|  3.08k|            }
  |  |  675|       |            /* Skip 5 cache entries */
  |  |  676|       |            // _BINARY_OP_SUBSCR_DICT
  |  |  677|  3.08k|            {
  |  |  678|  3.08k|                sub_st = stack_pointer[-1];
  |  |  679|  3.08k|                dict_st = nos;
  |  |  680|  3.08k|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  |  681|  3.08k|                PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
  |  |  682|  3.08k|                assert(Py_TYPE(dict)->tp_as_mapping->mp_subscript == _PyDict_Subscript);
  |  |  ------------------
  |  |  |  Branch (682:17): [True: 3.08k, False: 0]
  |  |  ------------------
  |  |  683|  3.08k|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  3.08k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  684|  3.08k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  685|  3.08k|                _PyFrame_StackPointerValidate(frame);
  |  |  686|  3.08k|                PyObject *res_o = _PyDict_Subscript(dict, sub);
  |  |  687|  3.08k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  688|  3.08k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (688:21): [True: 719, False: 2.36k]
  |  |  ------------------
  |  |  689|    719|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    719|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  690|      0|                }
  |  |  691|  2.36k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |  692|  2.36k|                ds = dict_st;
  |  |  693|  2.36k|                ss = sub_st;
  |  |  694|  2.36k|            }
  |  |  695|       |            // _POP_TOP
  |  |  696|      0|            {
  |  |  697|  2.36k|                value = ss;
  |  |  698|  2.36k|                stack_pointer[-2] = res;
  |  |  699|  2.36k|                stack_pointer[-1] = ds;
  |  |  700|  2.36k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (700:17): [True: 2.36k, False: 0]
  |  |  ------------------
  |  |  701|  2.36k|                _PyFrame_StackPointerValidate(frame);
  |  |  702|  2.36k|                PyStackRef_XCLOSE(value);
  |  |  703|  2.36k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  704|  2.36k|            }
  |  |  705|       |            // _POP_TOP
  |  |  706|      0|            {
  |  |  707|  2.36k|                value = ds;
  |  |  708|  2.36k|                stack_pointer += -1;
  |  |  709|  2.36k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.36k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  710|  2.36k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  711|  2.36k|                _PyFrame_StackPointerValidate(frame);
  |  |  712|  2.36k|                PyStackRef_XCLOSE(value);
  |  |  713|  2.36k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  714|  2.36k|            }
  |  |  715|  2.36k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.36k|    { \
  |  |  |  |  201|  2.36k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.36k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.36k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.36k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.36k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.36k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.36k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.36k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.36k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.36k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.36k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.36k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.36k|    }
  |  |  ------------------
  |  |  716|  2.36k|        }
  |  |  717|       |
  |  |  718|    228|        TARGET(BINARY_OP_SUBSCR_GETITEM) {
  |  |  ------------------
  |  |  |  |  132|    228|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  719|       |            #if _Py_TAIL_CALL_INTERP
  |  |  720|       |            int opcode = BINARY_OP_SUBSCR_GETITEM;
  |  |  721|       |            (void)(opcode);
  |  |  722|       |            #endif
  |  |  723|    228|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  724|    228|            (void)this_instr;
  |  |  725|    228|            frame->instr_ptr = next_instr;
  |  |  726|    228|            next_instr += 6;
  |  |  727|    228|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_GETITEM);
  |  |  ------------------
  |  |  |  |   71|    228|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  728|    228|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  729|    228|            _PyStackRef container;
  |  |  730|    228|            _PyStackRef getitem;
  |  |  731|    228|            _PyStackRef sub;
  |  |  732|    228|            _PyStackRef new_frame;
  |  |  733|       |            /* Skip 5 cache entries */
  |  |  734|       |            // _CHECK_PEP_523
  |  |  735|    228|            {
  |  |  736|    228|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|    228|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 228]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  737|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  738|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (738:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  739|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  740|      0|                }
  |  |  741|    228|            }
  |  |  742|       |            // _BINARY_OP_SUBSCR_CHECK_FUNC
  |  |  743|    228|            {
  |  |  744|    228|                container = stack_pointer[-2];
  |  |  745|    228|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(container));
  |  |  ------------------
  |  |  |  |  213|    228|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    228|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    228|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  746|    228|                if (!PyType_HasFeature(tp, Py_TPFLAGS_HEAPTYPE)) {
  |  |  ------------------
  |  |  |  |  503|    228|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  |  |  ------------------
  |  |  |  Branch (746:21): [True: 0, False: 228]
  |  |  ------------------
  |  |  747|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  748|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (748:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  749|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  750|      0|                }
  |  |  751|    228|                PyHeapTypeObject *ht = (PyHeapTypeObject *)tp;
  |  |  752|    228|                PyObject *getitem_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(ht->_spec_cache.getitem);
  |  |  ------------------
  |  |  |  |  150|    228|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  |  753|    228|                if (getitem_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (753:21): [True: 0, False: 228]
  |  |  ------------------
  |  |  754|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  755|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (755:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  756|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  757|      0|                }
  |  |  758|    228|                assert(PyFunction_Check(getitem_o));
  |  |  ------------------
  |  |  |  Branch (758:17): [True: 228, False: 0]
  |  |  ------------------
  |  |  759|    228|                uint32_t cached_version = FT_ATOMIC_LOAD_UINT32_RELAXED(ht->_spec_cache.getitem_version);
  |  |  ------------------
  |  |  |  |  159|    228|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  |  |  ------------------
  |  |  760|    228|                if (((PyFunctionObject *)getitem_o)->func_version != cached_version) {
  |  |  ------------------
  |  |  |  Branch (760:21): [True: 0, False: 228]
  |  |  ------------------
  |  |  761|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  762|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (762:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  763|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  764|      0|                }
  |  |  765|    228|                PyCodeObject *code = (PyCodeObject *)PyFunction_GET_CODE(getitem_o);
  |  |  ------------------
  |  |  |  |   93|    228|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    228|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    228|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  766|    228|                assert(code->co_argcount == 2);
  |  |  ------------------
  |  |  |  Branch (766:17): [True: 228, False: 0]
  |  |  ------------------
  |  |  767|    228|                if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) {
  |  |  ------------------
  |  |  |  Branch (767:21): [True: 0, False: 228]
  |  |  ------------------
  |  |  768|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  769|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (769:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  770|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  771|      0|                }
  |  |  772|    228|                getitem = PyStackRef_FromPyObjectNew(getitem_o);
  |  |  ------------------
  |  |  |  |  611|    228|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    228|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    228|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  773|    228|            }
  |  |  774|       |            // _BINARY_OP_SUBSCR_INIT_CALL
  |  |  775|      0|            {
  |  |  776|    228|                sub = stack_pointer[-1];
  |  |  777|    228|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|    228|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  778|    228|                _PyInterpreterFrame* pushed_frame = _PyFrame_PushUnchecked(tstate, getitem, 2, frame);
  |  |  779|    228|                pushed_frame->localsplus[0] = container;
  |  |  780|    228|                pushed_frame->localsplus[1] = sub;
  |  |  781|    228|                frame->return_offset = 6u ;
  |  |  782|    228|                new_frame = PyStackRef_Wrap(pushed_frame);
  |  |  783|    228|            }
  |  |  784|       |            // _PUSH_FRAME
  |  |  785|    228|            {
  |  |  786|    228|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (786:17): [True: 228, False: 0]
  |  |  ------------------
  |  |  787|    228|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  |  788|    228|                stack_pointer += -2;
  |  |  789|    228|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    228|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  790|    228|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  791|    228|                _PyFrame_StackPointerValidate(frame);
  |  |  792|    228|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (792:17): [True: 228, False: 0]
  |  |  |  Branch (792:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  793|    228|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|    228|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  |  794|    228|                frame = tstate->current_frame = temp;
  |  |  795|    228|                tstate->py_recursion_remaining--;
  |  |  796|    228|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |  797|    228|                _PyFrame_StackPointerInvalidate(frame);
  |  |  798|    228|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|    228|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|    228|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|    228|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 228]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  799|       |                #ifdef Py_DEBUG
  |  |  800|       |                assert(frame->previous->stackpointer_valid == 1);
  |  |  801|       |                #endif
  |  |  802|    228|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|    228|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  |  803|    228|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|    228|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  |  804|    228|            }
  |  |  805|    228|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    228|    { \
  |  |  |  |  201|    228|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    228|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    228|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    228|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    228|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    228|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    228|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    228|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 228]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    228|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    228|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    228|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    228|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    228|    }
  |  |  ------------------
  |  |  806|    228|        }
  |  |  807|       |
  |  |  808|  1.13k|        TARGET(BINARY_OP_SUBSCR_LIST_INT) {
  |  |  ------------------
  |  |  |  |  132|  1.13k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  809|       |            #if _Py_TAIL_CALL_INTERP
  |  |  810|       |            int opcode = BINARY_OP_SUBSCR_LIST_INT;
  |  |  811|       |            (void)(opcode);
  |  |  812|       |            #endif
  |  |  813|  1.13k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  814|  1.13k|            (void)this_instr;
  |  |  815|  1.13k|            frame->instr_ptr = next_instr;
  |  |  816|  1.13k|            next_instr += 6;
  |  |  817|  1.13k|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_LIST_INT);
  |  |  ------------------
  |  |  |  |   71|  1.13k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  818|  1.13k|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  819|  1.13k|            _PyStackRef value;
  |  |  820|  1.13k|            _PyStackRef nos;
  |  |  821|  1.13k|            _PyStackRef list_st;
  |  |  822|  1.13k|            _PyStackRef sub_st;
  |  |  823|  1.13k|            _PyStackRef res;
  |  |  824|  1.13k|            _PyStackRef ls;
  |  |  825|  1.13k|            _PyStackRef ss;
  |  |  826|       |            // _GUARD_TOS_INT
  |  |  827|  1.13k|            {
  |  |  828|  1.13k|                value = stack_pointer[-1];
  |  |  829|  1.13k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |  830|  1.13k|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (830:21): [True: 0, False: 1.13k]
  |  |  ------------------
  |  |  831|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  832|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (832:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  833|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  834|      0|                }
  |  |  835|  1.13k|            }
  |  |  836|       |            // _GUARD_NOS_LIST
  |  |  837|  1.13k|            {
  |  |  838|  1.13k|                nos = stack_pointer[-2];
  |  |  839|  1.13k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |  840|  1.13k|                if (!PyList_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   26|  1.13k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  1.13k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (840:21): [True: 0, False: 1.13k]
  |  |  ------------------
  |  |  841|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  842|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (842:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  843|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  844|      0|                }
  |  |  845|  1.13k|            }
  |  |  846|       |            /* Skip 5 cache entries */
  |  |  847|       |            // _BINARY_OP_SUBSCR_LIST_INT
  |  |  848|  1.13k|            {
  |  |  849|  1.13k|                sub_st = value;
  |  |  850|  1.13k|                list_st = nos;
  |  |  851|  1.13k|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  |  852|  1.13k|                PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
  |  |  853|  1.13k|                assert(PyLong_CheckExact(sub));
  |  |  ------------------
  |  |  |  Branch (853:17): [True: 1.13k, False: 0]
  |  |  ------------------
  |  |  854|  1.13k|                assert(PyList_CheckExact(list));
  |  |  ------------------
  |  |  |  Branch (854:17): [True: 1.13k, False: 0]
  |  |  ------------------
  |  |  855|  1.13k|                Py_ssize_t index = _PyLong_CompactValue((PyLongObject *)sub);
  |  |  856|  1.13k|                if (index < 0) {
  |  |  ------------------
  |  |  |  Branch (856:21): [True: 0, False: 1.13k]
  |  |  ------------------
  |  |  857|      0|                    index += PyList_GET_SIZE(list);
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  858|      0|                }
  |  |  859|       |                #ifdef Py_GIL_DISABLED
  |  |  860|       |                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  861|       |                _PyFrame_StackPointerValidate(frame);
  |  |  862|       |                PyObject *res_o = _PyList_GetItemRef((PyListObject*)list, index);
  |  |  863|       |                _PyFrame_StackPointerInvalidate(frame);
  |  |  864|       |                if (res_o == NULL) {
  |  |  865|       |                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  866|       |                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  867|       |                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  868|       |                }
  |  |  869|       |                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |  870|       |                #else
  |  |  871|  1.13k|                if (index < 0 || index >= PyList_GET_SIZE(list)) {
  |  |  ------------------
  |  |  |  |   38|  1.13k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.13k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.13k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (871:21): [True: 0, False: 1.13k]
  |  |  |  Branch (871:34): [True: 64, False: 1.06k]
  |  |  ------------------
  |  |  872|     64|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|     64|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  873|     64|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (873:21): [True: 64, False: 0]
  |  |  ------------------
  |  |  874|     64|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|     64|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  875|      0|                }
  |  |  876|  1.06k|                PyObject *res_o = PyList_GET_ITEM(list, index);
  |  |  ------------------
  |  |  |  |   40|  1.06k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.06k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:35): [True: 1.06k, False: 0]
  |  |  ------------------
  |  |  877|  1.06k|                assert(res_o != NULL);
  |  |  ------------------
  |  |  |  Branch (877:17): [True: 1.06k, False: 0]
  |  |  ------------------
  |  |  878|  1.06k|                res = PyStackRef_FromPyObjectNew(res_o);
  |  |  ------------------
  |  |  |  |  611|  1.06k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  879|  1.06k|                #endif
  |  |  880|  1.06k|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  1.06k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  881|  1.06k|                ls = list_st;
  |  |  882|  1.06k|                ss = sub_st;
  |  |  883|  1.06k|            }
  |  |  884|       |            // _POP_TOP_INT
  |  |  885|      0|            {
  |  |  886|  1.06k|                value = ss;
  |  |  887|  1.06k|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (887:17): [True: 1.06k, False: 0]
  |  |  ------------------
  |  |  888|  1.06k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |  889|  1.06k|            }
  |  |  890|       |            // _POP_TOP
  |  |  891|      0|            {
  |  |  892|  1.06k|                value = ls;
  |  |  893|  1.06k|                stack_pointer[-2] = res;
  |  |  894|  1.06k|                stack_pointer += -1;
  |  |  895|  1.06k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.06k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  896|  1.06k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  897|  1.06k|                _PyFrame_StackPointerValidate(frame);
  |  |  898|  1.06k|                PyStackRef_XCLOSE(value);
  |  |  899|  1.06k|                _PyFrame_StackPointerInvalidate(frame);
  |  |  900|  1.06k|            }
  |  |  901|  1.06k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.06k|    { \
  |  |  |  |  201|  1.06k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.06k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.06k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.06k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.06k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.06k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.06k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.06k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.06k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.06k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.06k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.06k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.06k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.06k|    }
  |  |  ------------------
  |  |  902|  1.06k|        }
  |  |  903|       |
  |  |  904|     33|        TARGET(BINARY_OP_SUBSCR_LIST_SLICE) {
  |  |  ------------------
  |  |  |  |  132|     33|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  905|       |            #if _Py_TAIL_CALL_INTERP
  |  |  906|       |            int opcode = BINARY_OP_SUBSCR_LIST_SLICE;
  |  |  907|       |            (void)(opcode);
  |  |  908|       |            #endif
  |  |  909|     33|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  910|     33|            (void)this_instr;
  |  |  911|     33|            frame->instr_ptr = next_instr;
  |  |  912|     33|            next_instr += 6;
  |  |  913|     33|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_LIST_SLICE);
  |  |  ------------------
  |  |  |  |   71|     33|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  914|     33|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  915|     33|            _PyStackRef tos;
  |  |  916|     33|            _PyStackRef nos;
  |  |  917|     33|            _PyStackRef list_st;
  |  |  918|     33|            _PyStackRef sub_st;
  |  |  919|     33|            _PyStackRef res;
  |  |  920|     33|            _PyStackRef ls;
  |  |  921|     33|            _PyStackRef ss;
  |  |  922|     33|            _PyStackRef value;
  |  |  923|       |            // _GUARD_TOS_SLICE
  |  |  924|     33|            {
  |  |  925|     33|                tos = stack_pointer[-1];
  |  |  926|     33|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  |  927|     33|                if (!PySlice_Check(o)) {
  |  |  ------------------
  |  |  |  |   22|     33|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|     33|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (927:21): [True: 0, False: 33]
  |  |  ------------------
  |  |  928|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  929|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (929:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  930|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  931|      0|                }
  |  |  932|     33|            }
  |  |  933|       |            // _GUARD_NOS_LIST
  |  |  934|     33|            {
  |  |  935|     33|                nos = stack_pointer[-2];
  |  |  936|     33|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |  937|     33|                if (!PyList_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   26|     33|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|     33|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (937:21): [True: 0, False: 33]
  |  |  ------------------
  |  |  938|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |  939|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (939:21): [True: 0, False: 0]
  |  |  ------------------
  |  |  940|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |  941|      0|                }
  |  |  942|     33|            }
  |  |  943|       |            /* Skip 5 cache entries */
  |  |  944|       |            // _BINARY_OP_SUBSCR_LIST_SLICE
  |  |  945|     33|            {
  |  |  946|     33|                sub_st = tos;
  |  |  947|     33|                list_st = nos;
  |  |  948|     33|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  |  949|     33|                PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
  |  |  950|     33|                assert(PySlice_Check(sub));
  |  |  ------------------
  |  |  |  Branch (950:17): [True: 33, False: 0]
  |  |  ------------------
  |  |  951|     33|                assert(PyList_CheckExact(list));
  |  |  ------------------
  |  |  |  Branch (951:17): [True: 33, False: 0]
  |  |  ------------------
  |  |  952|     33|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  953|     33|                _PyFrame_StackPointerValidate(frame);
  |  |  954|     33|                PyObject *res_o = _PyList_SliceSubscript(list, sub);
  |  |  955|     33|                _PyFrame_StackPointerInvalidate(frame);
  |  |  956|     33|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|     33|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |  957|     33|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (957:21): [True: 0, False: 33]
  |  |  ------------------
  |  |  958|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |  959|      0|                }
  |  |  960|     33|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |  961|     33|                ls = list_st;
  |  |  962|     33|                ss = sub_st;
  |  |  963|     33|            }
  |  |  964|       |            // _POP_TOP
  |  |  965|      0|            {
  |  |  966|     33|                value = ss;
  |  |  967|     33|                stack_pointer[-2] = res;
  |  |  968|     33|                stack_pointer[-1] = ls;
  |  |  969|     33|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (969:17): [True: 33, False: 0]
  |  |  ------------------
  |  |  970|     33|                _PyFrame_StackPointerValidate(frame);
  |  |  971|     33|                PyStackRef_XCLOSE(value);
  |  |  972|     33|                _PyFrame_StackPointerInvalidate(frame);
  |  |  973|     33|            }
  |  |  974|       |            // _POP_TOP
  |  |  975|      0|            {
  |  |  976|     33|                value = ls;
  |  |  977|     33|                stack_pointer += -1;
  |  |  978|     33|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     33|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |  979|     33|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |  980|     33|                _PyFrame_StackPointerValidate(frame);
  |  |  981|     33|                PyStackRef_XCLOSE(value);
  |  |  982|     33|                _PyFrame_StackPointerInvalidate(frame);
  |  |  983|     33|            }
  |  |  984|     33|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     33|    { \
  |  |  |  |  201|     33|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     33|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     33|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     33|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     33|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     33|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     33|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     33|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 33]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     33|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     33|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     33|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     33|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     33|    }
  |  |  ------------------
  |  |  985|     33|        }
  |  |  986|       |
  |  |  987|  2.23k|        TARGET(BINARY_OP_SUBSCR_STR_INT) {
  |  |  ------------------
  |  |  |  |  132|  2.23k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |  988|       |            #if _Py_TAIL_CALL_INTERP
  |  |  989|       |            int opcode = BINARY_OP_SUBSCR_STR_INT;
  |  |  990|       |            (void)(opcode);
  |  |  991|       |            #endif
  |  |  992|  2.23k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |  993|  2.23k|            (void)this_instr;
  |  |  994|  2.23k|            frame->instr_ptr = next_instr;
  |  |  995|  2.23k|            next_instr += 6;
  |  |  996|  2.23k|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_STR_INT);
  |  |  ------------------
  |  |  |  |   71|  2.23k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |  997|  2.23k|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  |  998|  2.23k|            _PyStackRef value;
  |  |  999|  2.23k|            _PyStackRef nos;
  |  | 1000|  2.23k|            _PyStackRef str_st;
  |  | 1001|  2.23k|            _PyStackRef sub_st;
  |  | 1002|  2.23k|            _PyStackRef res;
  |  | 1003|  2.23k|            _PyStackRef s;
  |  | 1004|  2.23k|            _PyStackRef i;
  |  | 1005|       |            // _GUARD_TOS_INT
  |  | 1006|  2.23k|            {
  |  | 1007|  2.23k|                value = stack_pointer[-1];
  |  | 1008|  2.23k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 1009|  2.23k|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (1009:21): [True: 0, False: 2.23k]
  |  |  ------------------
  |  | 1010|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1011|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1011:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1012|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1013|      0|                }
  |  | 1014|  2.23k|            }
  |  | 1015|       |            // _GUARD_NOS_COMPACT_ASCII
  |  | 1016|  2.23k|            {
  |  | 1017|  2.23k|                nos = stack_pointer[-2];
  |  | 1018|  2.23k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  | 1019|  2.23k|                if (!PyUnicode_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |  104|  2.23k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  2.23k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  2.23k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  2.23k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1019:21): [True: 0, False: 2.23k]
  |  |  ------------------
  |  | 1020|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1021|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1021:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1022|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1023|      0|                }
  |  | 1024|  2.23k|                if (!PyUnicode_IS_COMPACT_ASCII(o)) {
  |  |  ------------------
  |  |  |  |  241|  2.23k|#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.23k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.23k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1024:21): [True: 10, False: 2.22k]
  |  |  ------------------
  |  | 1025|     10|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|     10|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1026|     10|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1026:21): [True: 10, False: 0]
  |  |  ------------------
  |  | 1027|     10|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|     10|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1028|      0|                }
  |  | 1029|  2.23k|            }
  |  | 1030|       |            /* Skip 5 cache entries */
  |  | 1031|       |            // _BINARY_OP_SUBSCR_STR_INT
  |  | 1032|  2.22k|            {
  |  | 1033|  2.22k|                sub_st = value;
  |  | 1034|  2.22k|                str_st = nos;
  |  | 1035|  2.22k|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  | 1036|  2.22k|                PyObject *str = PyStackRef_AsPyObjectBorrow(str_st);
  |  | 1037|  2.22k|                assert(PyLong_CheckExact(sub));
  |  |  ------------------
  |  |  |  Branch (1037:17): [True: 2.22k, False: 0]
  |  |  ------------------
  |  | 1038|  2.22k|                assert(PyUnicode_CheckExact(str));
  |  |  ------------------
  |  |  |  Branch (1038:17): [True: 2.22k, False: 0]
  |  |  ------------------
  |  | 1039|  2.22k|                if (!_PyLong_IsNonNegativeCompact((PyLongObject*)sub)) {
  |  |  ------------------
  |  |  |  Branch (1039:21): [True: 0, False: 2.22k]
  |  |  ------------------
  |  | 1040|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1041|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1041:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1042|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1043|      0|                }
  |  | 1044|  2.22k|                Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0];
  |  | 1045|  2.22k|                if (PyUnicode_GET_LENGTH(str) <= index) {
  |  |  ------------------
  |  |  |  |  299|  2.22k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1045:21): [True: 7, False: 2.21k]
  |  |  ------------------
  |  | 1046|      7|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      7|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1047|      7|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1047:21): [True: 7, False: 0]
  |  |  ------------------
  |  | 1048|      7|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      7|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1049|      0|                }
  |  | 1050|  2.21k|                uint8_t c = PyUnicode_1BYTE_DATA(str)[index];
  |  |  ------------------
  |  |  |  |  291|  2.21k|#define PyUnicode_1BYTE_DATA(op) _Py_STATIC_CAST(Py_UCS1*, PyUnicode_DATA(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|  2.21k|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1051|  2.21k|                assert(c < 128);
  |  |  ------------------
  |  |  |  Branch (1051:17): [True: 2.21k, False: 0]
  |  |  ------------------
  |  | 1052|  2.21k|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  2.21k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 1053|  2.21k|                PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c];
  |  |  ------------------
  |  |  |  |   18|  2.21k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.21k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1054|  2.21k|                s = str_st;
  |  | 1055|  2.21k|                i = sub_st;
  |  | 1056|  2.21k|                res = PyStackRef_FromPyObjectBorrow(res_o);
  |  | 1057|  2.21k|            }
  |  | 1058|       |            // _POP_TOP_INT
  |  | 1059|      0|            {
  |  | 1060|  2.21k|                value = i;
  |  | 1061|  2.21k|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1061:17): [True: 2.21k, False: 0]
  |  |  ------------------
  |  | 1062|  2.21k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 1063|  2.21k|            }
  |  | 1064|       |            // _POP_TOP_UNICODE
  |  | 1065|      0|            {
  |  | 1066|  2.21k|                value = s;
  |  | 1067|  2.21k|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1067:17): [True: 2.21k, False: 0]
  |  |  ------------------
  |  | 1068|  2.21k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  | 1069|  2.21k|            }
  |  | 1070|      0|            stack_pointer[-2] = res;
  |  | 1071|  2.21k|            stack_pointer += -1;
  |  | 1072|  2.21k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.21k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1073|  2.21k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.21k|    { \
  |  |  |  |  201|  2.21k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.21k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.21k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.21k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.21k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.21k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.21k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.21k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.21k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.21k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.21k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.21k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.21k|    }
  |  |  ------------------
  |  | 1074|  2.21k|        }
  |  | 1075|       |
  |  | 1076|  1.57k|        TARGET(BINARY_OP_SUBSCR_TUPLE_INT) {
  |  |  ------------------
  |  |  |  |  132|  1.57k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1077|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1078|       |            int opcode = BINARY_OP_SUBSCR_TUPLE_INT;
  |  | 1079|       |            (void)(opcode);
  |  | 1080|       |            #endif
  |  | 1081|  1.57k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 1082|  1.57k|            (void)this_instr;
  |  | 1083|  1.57k|            frame->instr_ptr = next_instr;
  |  | 1084|  1.57k|            next_instr += 6;
  |  | 1085|  1.57k|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_TUPLE_INT);
  |  |  ------------------
  |  |  |  |   71|  1.57k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1086|  1.57k|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  | 1087|  1.57k|            _PyStackRef value;
  |  | 1088|  1.57k|            _PyStackRef nos;
  |  | 1089|  1.57k|            _PyStackRef tuple_st;
  |  | 1090|  1.57k|            _PyStackRef sub_st;
  |  | 1091|  1.57k|            _PyStackRef res;
  |  | 1092|  1.57k|            _PyStackRef ts;
  |  | 1093|  1.57k|            _PyStackRef ss;
  |  | 1094|       |            // _GUARD_TOS_INT
  |  | 1095|  1.57k|            {
  |  | 1096|  1.57k|                value = stack_pointer[-1];
  |  | 1097|  1.57k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 1098|  1.57k|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (1098:21): [True: 0, False: 1.57k]
  |  |  ------------------
  |  | 1099|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1100|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1100:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1101|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1102|      0|                }
  |  | 1103|  1.57k|            }
  |  | 1104|       |            // _GUARD_NOS_TUPLE
  |  | 1105|  1.57k|            {
  |  | 1106|  1.57k|                nos = stack_pointer[-2];
  |  | 1107|  1.57k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  | 1108|  1.57k|                if (!PyTuple_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   28|  1.57k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  1.57k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1108:21): [True: 0, False: 1.57k]
  |  |  ------------------
  |  | 1109|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1110|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1110:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1111|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1112|      0|                }
  |  | 1113|  1.57k|            }
  |  | 1114|       |            // _GUARD_BINARY_OP_SUBSCR_TUPLE_INT_BOUNDS
  |  | 1115|  1.57k|            {
  |  | 1116|  1.57k|                sub_st = value;
  |  | 1117|  1.57k|                tuple_st = nos;
  |  | 1118|  1.57k|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  | 1119|  1.57k|                PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st);
  |  | 1120|  1.57k|                assert(PyLong_CheckExact(sub));
  |  |  ------------------
  |  |  |  Branch (1120:17): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1121|  1.57k|                assert(PyTuple_CheckExact(tuple));
  |  |  ------------------
  |  |  |  Branch (1121:17): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1122|  1.57k|                if (!_PyLong_IsNonNegativeCompact((PyLongObject *)sub)) {
  |  |  ------------------
  |  |  |  Branch (1122:21): [True: 0, False: 1.57k]
  |  |  ------------------
  |  | 1123|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1124|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1124:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1125|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1126|      0|                }
  |  | 1127|  1.57k|                Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0];
  |  | 1128|  1.57k|                if (index >= PyTuple_GET_SIZE(tuple)) {
  |  |  ------------------
  |  |  |  |   27|  1.57k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1128:21): [True: 0, False: 1.57k]
  |  |  ------------------
  |  | 1129|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1130|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1130:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1131|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1132|      0|                }
  |  | 1133|  1.57k|            }
  |  | 1134|       |            /* Skip 5 cache entries */
  |  | 1135|       |            // _BINARY_OP_SUBSCR_TUPLE_INT
  |  | 1136|  1.57k|            {
  |  | 1137|  1.57k|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  | 1138|  1.57k|                PyObject *tuple = PyStackRef_AsPyObjectBorrow(tuple_st);
  |  | 1139|  1.57k|                assert(PyLong_CheckExact(sub));
  |  |  ------------------
  |  |  |  Branch (1139:17): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1140|  1.57k|                assert(PyTuple_CheckExact(tuple));
  |  |  ------------------
  |  |  |  Branch (1140:17): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1141|  1.57k|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  1.57k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 1142|  1.57k|                Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0];
  |  | 1143|  1.57k|                PyObject *res_o = PyTuple_GET_ITEM(tuple, index);
  |  |  ------------------
  |  |  |  |   29|  1.57k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|  1.57k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1143:35): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1144|  1.57k|                assert(res_o != NULL);
  |  |  ------------------
  |  |  |  Branch (1144:17): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1145|  1.57k|                res = PyStackRef_FromPyObjectNew(res_o);
  |  |  ------------------
  |  |  |  |  611|  1.57k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.57k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1146|  1.57k|                ts = tuple_st;
  |  | 1147|  1.57k|                ss = sub_st;
  |  | 1148|  1.57k|            }
  |  | 1149|       |            // _POP_TOP_INT
  |  | 1150|      0|            {
  |  | 1151|  1.57k|                value = ss;
  |  | 1152|  1.57k|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1152:17): [True: 1.57k, False: 0]
  |  |  ------------------
  |  | 1153|  1.57k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 1154|  1.57k|            }
  |  | 1155|       |            // _POP_TOP
  |  | 1156|      0|            {
  |  | 1157|  1.57k|                value = ts;
  |  | 1158|  1.57k|                stack_pointer[-2] = res;
  |  | 1159|  1.57k|                stack_pointer += -1;
  |  | 1160|  1.57k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.57k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1161|  1.57k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1162|  1.57k|                _PyFrame_StackPointerValidate(frame);
  |  | 1163|  1.57k|                PyStackRef_XCLOSE(value);
  |  | 1164|  1.57k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1165|  1.57k|            }
  |  | 1166|  1.57k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.57k|    { \
  |  |  |  |  201|  1.57k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.57k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.57k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.57k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.57k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.57k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.57k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.57k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.57k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.57k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.57k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.57k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.57k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.57k|    }
  |  |  ------------------
  |  | 1167|  1.57k|        }
  |  | 1168|       |
  |  | 1169|  12.3M|        TARGET(BINARY_OP_SUBSCR_USTR_INT) {
  |  |  ------------------
  |  |  |  |  132|  12.3M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1170|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1171|       |            int opcode = BINARY_OP_SUBSCR_USTR_INT;
  |  | 1172|       |            (void)(opcode);
  |  | 1173|       |            #endif
  |  | 1174|  12.3M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 1175|  12.3M|            (void)this_instr;
  |  | 1176|  12.3M|            frame->instr_ptr = next_instr;
  |  | 1177|  12.3M|            next_instr += 6;
  |  | 1178|  12.3M|            INSTRUCTION_STATS(BINARY_OP_SUBSCR_USTR_INT);
  |  |  ------------------
  |  |  |  |   71|  12.3M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1179|  12.3M|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  | 1180|  12.3M|            _PyStackRef value;
  |  | 1181|  12.3M|            _PyStackRef nos;
  |  | 1182|  12.3M|            _PyStackRef str_st;
  |  | 1183|  12.3M|            _PyStackRef sub_st;
  |  | 1184|  12.3M|            _PyStackRef res;
  |  | 1185|  12.3M|            _PyStackRef s;
  |  | 1186|  12.3M|            _PyStackRef i;
  |  | 1187|       |            // _GUARD_TOS_INT
  |  | 1188|  12.3M|            {
  |  | 1189|  12.3M|                value = stack_pointer[-1];
  |  | 1190|  12.3M|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 1191|  12.3M|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (1191:21): [True: 0, False: 12.3M]
  |  |  ------------------
  |  | 1192|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1193|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1193:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1194|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1195|      0|                }
  |  | 1196|  12.3M|            }
  |  | 1197|       |            // _GUARD_NOS_UNICODE
  |  | 1198|  12.3M|            {
  |  | 1199|  12.3M|                nos = stack_pointer[-2];
  |  | 1200|  12.3M|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  | 1201|  12.3M|                if (!PyUnicode_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |  104|  12.3M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  12.3M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  12.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1201:21): [True: 0, False: 12.3M]
  |  |  ------------------
  |  | 1202|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1203|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1203:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1204|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1205|      0|                }
  |  | 1206|  12.3M|            }
  |  | 1207|       |            /* Skip 5 cache entries */
  |  | 1208|       |            // _BINARY_OP_SUBSCR_USTR_INT
  |  | 1209|  12.3M|            {
  |  | 1210|  12.3M|                sub_st = value;
  |  | 1211|  12.3M|                str_st = nos;
  |  | 1212|  12.3M|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  | 1213|  12.3M|                PyObject *str = PyStackRef_AsPyObjectBorrow(str_st);
  |  | 1214|  12.3M|                assert(PyLong_CheckExact(sub));
  |  |  ------------------
  |  |  |  Branch (1214:17): [True: 12.3M, False: 0]
  |  |  ------------------
  |  | 1215|  12.3M|                assert(PyUnicode_CheckExact(str));
  |  |  ------------------
  |  |  |  Branch (1215:17): [True: 12.3M, False: 0]
  |  |  ------------------
  |  | 1216|  12.3M|                if (!_PyLong_IsNonNegativeCompact((PyLongObject*)sub)) {
  |  |  ------------------
  |  |  |  Branch (1216:21): [True: 0, False: 12.3M]
  |  |  ------------------
  |  | 1217|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1218|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1218:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1219|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1220|      0|                }
  |  | 1221|  12.3M|                Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0];
  |  | 1222|  12.3M|                if (PyUnicode_GET_LENGTH(str) <= index) {
  |  |  ------------------
  |  |  |  |  299|  12.3M|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1222:21): [True: 0, False: 12.3M]
  |  |  ------------------
  |  | 1223|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1224|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1224:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1225|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1226|      0|                }
  |  | 1227|  12.3M|                Py_UCS4 c = PyUnicode_READ_CHAR(str, index);
  |  |  ------------------
  |  |  |  |  381|  12.3M|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.3M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.3M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1228|  12.3M|                if (Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c) {
  |  |  ------------------
  |  |  |  |  221|  12.3M|    (sizeof(array) / sizeof((array)[0]))
  |  |  ------------------
  |  |  |  Branch (1228:21): [True: 9.32M, False: 3.01M]
  |  |  ------------------
  |  | 1229|  9.32M|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|  9.32M|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1230|  9.32M|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1230:21): [True: 9.32M, False: 0]
  |  |  ------------------
  |  | 1231|  9.32M|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|  9.32M|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1232|      0|                }
  |  | 1233|  3.01M|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  3.01M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 1234|  3.01M|                PyObject *res_o = (PyObject*)&_Py_SINGLETON(strings).ascii[c];
  |  |  ------------------
  |  |  |  |   18|  3.01M|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  3.01M|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1235|  3.01M|                s = str_st;
  |  | 1236|  3.01M|                i = sub_st;
  |  | 1237|  3.01M|                res = PyStackRef_FromPyObjectBorrow(res_o);
  |  | 1238|  3.01M|            }
  |  | 1239|       |            // _POP_TOP_INT
  |  | 1240|      0|            {
  |  | 1241|  3.01M|                value = i;
  |  | 1242|  3.01M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1242:17): [True: 3.01M, False: 0]
  |  |  ------------------
  |  | 1243|  3.01M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 1244|  3.01M|            }
  |  | 1245|       |            // _POP_TOP_UNICODE
  |  | 1246|      0|            {
  |  | 1247|  3.01M|                value = s;
  |  | 1248|  3.01M|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1248:17): [True: 3.01M, False: 0]
  |  |  ------------------
  |  | 1249|  3.01M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  | 1250|  3.01M|            }
  |  | 1251|      0|            stack_pointer[-2] = res;
  |  | 1252|  3.01M|            stack_pointer += -1;
  |  | 1253|  3.01M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.01M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1254|  3.01M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.01M|    { \
  |  |  |  |  201|  3.01M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.01M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.01M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.01M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.01M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.01M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.01M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.01M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.01M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.01M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.01M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.01M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.01M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.01M|    }
  |  |  ------------------
  |  | 1255|  3.01M|        }
  |  | 1256|       |
  |  | 1257|      0|        TARGET(BINARY_OP_SUBTRACT_FLOAT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1258|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1259|       |            int opcode = BINARY_OP_SUBTRACT_FLOAT;
  |  | 1260|       |            (void)(opcode);
  |  | 1261|       |            #endif
  |  | 1262|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 1263|      0|            (void)this_instr;
  |  | 1264|      0|            frame->instr_ptr = next_instr;
  |  | 1265|      0|            next_instr += 6;
  |  | 1266|      0|            INSTRUCTION_STATS(BINARY_OP_SUBTRACT_FLOAT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1267|      0|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  | 1268|      0|            _PyStackRef value;
  |  | 1269|      0|            _PyStackRef left;
  |  | 1270|      0|            _PyStackRef right;
  |  | 1271|      0|            _PyStackRef res;
  |  | 1272|      0|            _PyStackRef l;
  |  | 1273|      0|            _PyStackRef r;
  |  | 1274|       |            // _GUARD_TOS_FLOAT
  |  | 1275|      0|            {
  |  | 1276|      0|                value = stack_pointer[-1];
  |  | 1277|      0|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 1278|      0|                if (!PyFloat_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1278:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1279|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1280|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1280:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1281|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1282|      0|                }
  |  | 1283|      0|            }
  |  | 1284|       |            // _GUARD_NOS_FLOAT
  |  | 1285|      0|            {
  |  | 1286|      0|                left = stack_pointer[-2];
  |  | 1287|      0|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 1288|      0|                if (!PyFloat_CheckExact(left_o)) {
  |  |  ------------------
  |  |  |  |   17|      0|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1288:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1289|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1290|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1290:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1291|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1292|      0|                }
  |  | 1293|      0|            }
  |  | 1294|       |            /* Skip 5 cache entries */
  |  | 1295|       |            // _BINARY_OP_SUBTRACT_FLOAT
  |  | 1296|      0|            {
  |  | 1297|      0|                right = value;
  |  | 1298|      0|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 1299|      0|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 1300|      0|                assert(PyFloat_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (1300:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1301|      0|                assert(PyFloat_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (1301:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1302|      0|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 1303|      0|                double dres =
  |  | 1304|      0|                ((PyFloatObject *)left_o)->ob_fval -
  |  | 1305|      0|                ((PyFloatObject *)right_o)->ob_fval;
  |  | 1306|      0|                PyObject *d = PyFloat_FromDouble(dres);
  |  | 1307|      0|                if (d == NULL) {
  |  |  ------------------
  |  |  |  Branch (1307:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1308|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1309|      0|                }
  |  | 1310|      0|                res = PyStackRef_FromPyObjectSteal(d);
  |  | 1311|      0|                l = left;
  |  | 1312|      0|                r = right;
  |  | 1313|      0|            }
  |  | 1314|       |            // _POP_TOP_FLOAT
  |  | 1315|      0|            {
  |  | 1316|      0|                value = r;
  |  | 1317|      0|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1317:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1318|      0|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  | 1319|      0|            }
  |  | 1320|       |            // _POP_TOP_FLOAT
  |  | 1321|      0|            {
  |  | 1322|      0|                value = l;
  |  | 1323|      0|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1323:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1324|      0|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  | 1325|      0|            }
  |  | 1326|      0|            stack_pointer[-2] = res;
  |  | 1327|      0|            stack_pointer += -1;
  |  | 1328|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1329|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 1330|      0|        }
  |  | 1331|       |
  |  | 1332|  2.02M|        TARGET(BINARY_OP_SUBTRACT_INT) {
  |  |  ------------------
  |  |  |  |  132|  2.02M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1333|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1334|       |            int opcode = BINARY_OP_SUBTRACT_INT;
  |  | 1335|       |            (void)(opcode);
  |  | 1336|       |            #endif
  |  | 1337|  2.02M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 1338|  2.02M|            (void)this_instr;
  |  | 1339|  2.02M|            frame->instr_ptr = next_instr;
  |  | 1340|  2.02M|            next_instr += 6;
  |  | 1341|  2.02M|            INSTRUCTION_STATS(BINARY_OP_SUBTRACT_INT);
  |  |  ------------------
  |  |  |  |   71|  2.02M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1342|  2.02M|            static_assert(INLINE_CACHE_ENTRIES_BINARY_OP == 5, "incorrect cache size");
  |  | 1343|  2.02M|            _PyStackRef value;
  |  | 1344|  2.02M|            _PyStackRef left;
  |  | 1345|  2.02M|            _PyStackRef right;
  |  | 1346|  2.02M|            _PyStackRef res;
  |  | 1347|  2.02M|            _PyStackRef l;
  |  | 1348|  2.02M|            _PyStackRef r;
  |  | 1349|       |            // _GUARD_TOS_INT
  |  | 1350|  2.02M|            {
  |  | 1351|  2.02M|                value = stack_pointer[-1];
  |  | 1352|  2.02M|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 1353|  2.02M|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (1353:21): [True: 0, False: 2.02M]
  |  |  ------------------
  |  | 1354|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1355|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1355:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1356|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1357|      0|                }
  |  | 1358|  2.02M|            }
  |  | 1359|       |            // _GUARD_NOS_INT
  |  | 1360|  2.02M|            {
  |  | 1361|  2.02M|                left = stack_pointer[-2];
  |  | 1362|  2.02M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 1363|  2.02M|                if (!_PyLong_CheckExactAndCompact(left_o)) {
  |  |  ------------------
  |  |  |  Branch (1363:21): [True: 109, False: 2.02M]
  |  |  ------------------
  |  | 1364|    109|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|    109|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1365|    109|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1365:21): [True: 109, False: 0]
  |  |  ------------------
  |  | 1366|    109|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|    109|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1367|      0|                }
  |  | 1368|  2.02M|            }
  |  | 1369|       |            /* Skip 5 cache entries */
  |  | 1370|       |            // _BINARY_OP_SUBTRACT_INT
  |  | 1371|  2.02M|            {
  |  | 1372|  2.02M|                right = value;
  |  | 1373|  2.02M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 1374|  2.02M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 1375|  2.02M|                assert(PyLong_CheckExact(left_o));
  |  |  ------------------
  |  |  |  Branch (1375:17): [True: 2.02M, False: 0]
  |  |  ------------------
  |  | 1376|  2.02M|                assert(PyLong_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (1376:17): [True: 2.02M, False: 0]
  |  |  ------------------
  |  | 1377|  2.02M|                assert(_PyLong_BothAreCompact((PyLongObject *)left_o, (PyLongObject *)right_o));
  |  |  ------------------
  |  |  |  Branch (1377:17): [True: 2.02M, False: 0]
  |  |  ------------------
  |  | 1378|  2.02M|                STAT_INC(BINARY_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  2.02M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 1379|  2.02M|                res = _PyCompactLong_Subtract((PyLongObject *)left_o, (PyLongObject *)right_o);
  |  | 1380|  2.02M|                if (PyStackRef_IsNull(res)) {
  |  |  ------------------
  |  |  |  |  482|  2.02M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  2.02M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  2.02M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 2.02M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1381|      0|                    UPDATE_MISS_STATS(BINARY_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1382|      0|                    assert(_PyOpcode_Deopt[opcode] == (BINARY_OP));
  |  |  ------------------
  |  |  |  Branch (1382:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1383|      0|                    JUMP_TO_PREDICTED(BINARY_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1384|      0|                }
  |  | 1385|  2.02M|                l = left;
  |  | 1386|  2.02M|                r = right;
  |  | 1387|  2.02M|            }
  |  | 1388|       |            // _POP_TOP_INT
  |  | 1389|      0|            {
  |  | 1390|  2.02M|                value = r;
  |  | 1391|  2.02M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1391:17): [True: 2.02M, False: 0]
  |  |  ------------------
  |  | 1392|  2.02M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 1393|  2.02M|            }
  |  | 1394|       |            // _POP_TOP_INT
  |  | 1395|      0|            {
  |  | 1396|  2.02M|                value = l;
  |  | 1397|  2.02M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (1397:17): [True: 2.02M, False: 0]
  |  |  ------------------
  |  | 1398|  2.02M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 1399|  2.02M|            }
  |  | 1400|      0|            stack_pointer[-2] = res;
  |  | 1401|  2.02M|            stack_pointer += -1;
  |  | 1402|  2.02M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.02M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1403|  2.02M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.02M|    { \
  |  |  |  |  201|  2.02M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.02M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.02M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.02M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.02M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.02M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.02M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.02M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.02M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.02M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.02M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.02M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.02M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.02M|    }
  |  |  ------------------
  |  | 1404|  2.02M|        }
  |  | 1405|       |
  |  | 1406|   453k|        TARGET(BINARY_SLICE) {
  |  |  ------------------
  |  |  |  |  132|   453k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1407|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1408|       |            int opcode = BINARY_SLICE;
  |  | 1409|       |            (void)(opcode);
  |  | 1410|       |            #endif
  |  | 1411|   453k|            frame->instr_ptr = next_instr;
  |  | 1412|   453k|            next_instr += 1;
  |  | 1413|   453k|            INSTRUCTION_STATS(BINARY_SLICE);
  |  |  ------------------
  |  |  |  |   71|   453k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1414|   453k|            _PyStackRef container;
  |  | 1415|   453k|            _PyStackRef start;
  |  | 1416|   453k|            _PyStackRef stop;
  |  | 1417|   453k|            _PyStackRef res;
  |  | 1418|       |            // _SPECIALIZE_BINARY_SLICE
  |  | 1419|   453k|            {
  |  | 1420|   453k|                #if ENABLE_SPECIALIZATION
  |  | 1421|   453k|                OPCODE_DEFERRED_INC(BINARY_SLICE);
  |  |  ------------------
  |  |  |  |   90|   453k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 1422|   453k|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 1423|   453k|            }
  |  | 1424|       |            // _BINARY_SLICE
  |  | 1425|   453k|            {
  |  | 1426|   453k|                stop = stack_pointer[-1];
  |  | 1427|   453k|                start = stack_pointer[-2];
  |  | 1428|   453k|                container = stack_pointer[-3];
  |  | 1429|   453k|                PyObject *container_o = PyStackRef_AsPyObjectBorrow(container);
  |  | 1430|   453k|                PyObject *start_o = PyStackRef_AsPyObjectBorrow(start);
  |  | 1431|   453k|                PyObject *stop_o = PyStackRef_AsPyObjectBorrow(stop);
  |  | 1432|   453k|                PyObject *res_o;
  |  | 1433|   453k|                if (PyList_CheckExact(container_o)) {
  |  |  ------------------
  |  |  |  |   26|   453k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   453k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   453k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   453k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 2.41k, False: 450k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1434|  2.41k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1435|  2.41k|                    _PyFrame_StackPointerValidate(frame);
  |  | 1436|  2.41k|                    res_o = _PyList_BinarySlice(container_o, start_o, stop_o);
  |  | 1437|  2.41k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1438|  2.41k|                }
  |  | 1439|   450k|                else if (PyTuple_CheckExact(container_o)) {
  |  |  ------------------
  |  |  |  |   28|   450k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   450k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   450k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   450k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 450k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1440|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1441|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 1442|      0|                    res_o = _PyTuple_BinarySlice(container_o, start_o, stop_o);
  |  | 1443|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1444|      0|                }
  |  | 1445|   450k|                else if (PyUnicode_CheckExact(container_o)) {
  |  |  ------------------
  |  |  |  |  104|   450k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   450k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   450k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   450k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 423k, False: 27.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1446|   423k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1447|   423k|                    _PyFrame_StackPointerValidate(frame);
  |  | 1448|   423k|                    res_o = _PyUnicode_BinarySlice(container_o, start_o, stop_o);
  |  | 1449|   423k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1450|   423k|                }
  |  | 1451|  27.0k|                else {
  |  | 1452|  27.0k|                    PyObject *slice = PySlice_New(start_o, stop_o, NULL);
  |  | 1453|  27.0k|                    if (slice == NULL) {
  |  |  ------------------
  |  |  |  Branch (1453:25): [True: 0, False: 27.0k]
  |  |  ------------------
  |  | 1454|      0|                        res_o = NULL;
  |  | 1455|      0|                    }
  |  | 1456|  27.0k|                    else {
  |  | 1457|  27.0k|                        _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1458|  27.0k|                        _PyFrame_StackPointerValidate(frame);
  |  | 1459|  27.0k|                        res_o = PyObject_GetItem(container_o, slice);
  |  | 1460|  27.0k|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 1461|  27.0k|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (1461:25): [True: 27.0k, False: 0]
  |  |  ------------------
  |  | 1462|  27.0k|                        _PyFrame_StackPointerValidate(frame);
  |  | 1463|  27.0k|                        Py_DECREF(slice);
  |  |  ------------------
  |  |  |  |   80|  27.0k|    do { \
  |  |  |  |   81|  27.0k|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  27.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  27.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|  27.0k|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|  27.0k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  27.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  27.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 27.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|  27.0k|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|  27.0k|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|  27.0k|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 27.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|  27.0k|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|  27.0k|    do { \
  |  |  |  |  |  |  113|  27.0k|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|  27.0k|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 27.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|  27.0k|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 27.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|  27.0k|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  27.0k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  27.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  27.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|  27.0k|            (*dealloc)(op); \
  |  |  |  |   91|  27.0k|        } \
  |  |  |  |   92|  27.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 27.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1464|  27.0k|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 1465|  27.0k|                    }
  |  | 1466|  27.0k|                }
  |  | 1467|   453k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1468|   453k|                _PyFrame_StackPointerValidate(frame);
  |  | 1469|   453k|                _PyStackRef tmp = stop;
  |  | 1470|   453k|                stop = PyStackRef_NULL;
  |  | 1471|   453k|                stack_pointer[-1] = stop;
  |  | 1472|   453k|                PyStackRef_CLOSE(tmp);
  |  | 1473|   453k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1474|   453k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (1474:17): [True: 453k, False: 0]
  |  |  ------------------
  |  | 1475|   453k|                _PyFrame_StackPointerValidate(frame);
  |  | 1476|   453k|                tmp = start;
  |  | 1477|   453k|                start = PyStackRef_NULL;
  |  | 1478|   453k|                stack_pointer[-2] = start;
  |  | 1479|   453k|                PyStackRef_CLOSE(tmp);
  |  | 1480|   453k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1481|   453k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (1481:17): [True: 453k, False: 0]
  |  |  ------------------
  |  | 1482|   453k|                _PyFrame_StackPointerValidate(frame);
  |  | 1483|   453k|                tmp = container;
  |  | 1484|   453k|                container = PyStackRef_NULL;
  |  | 1485|   453k|                stack_pointer[-3] = container;
  |  | 1486|   453k|                PyStackRef_CLOSE(tmp);
  |  | 1487|   453k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1488|   453k|                stack_pointer += -3;
  |  | 1489|   453k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   453k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1490|   453k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1490:21): [True: 0, False: 453k]
  |  |  ------------------
  |  | 1491|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1492|      0|                }
  |  | 1493|   453k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 1494|   453k|            }
  |  | 1495|      0|            stack_pointer[0] = res;
  |  | 1496|   453k|            stack_pointer += 1;
  |  | 1497|   453k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   453k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1498|   453k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   453k|    { \
  |  |  |  |  201|   453k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   453k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   453k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   453k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   453k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   453k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   453k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   453k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 453k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   453k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   453k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   453k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   453k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   453k|    }
  |  |  ------------------
  |  | 1499|   453k|        }
  |  | 1500|       |
  |  | 1501|      0|        TARGET(BUILD_INTERPOLATION) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1502|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1503|       |            int opcode = BUILD_INTERPOLATION;
  |  | 1504|       |            (void)(opcode);
  |  | 1505|       |            #endif
  |  | 1506|      0|            frame->instr_ptr = next_instr;
  |  | 1507|      0|            next_instr += 1;
  |  | 1508|      0|            INSTRUCTION_STATS(BUILD_INTERPOLATION);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1509|      0|            _PyStackRef value;
  |  | 1510|      0|            _PyStackRef str;
  |  | 1511|      0|            _PyStackRef *format;
  |  | 1512|      0|            _PyStackRef interpolation;
  |  | 1513|      0|            format = &stack_pointer[-(oparg & 1)];
  |  | 1514|      0|            str = stack_pointer[-1 - (oparg & 1)];
  |  | 1515|      0|            value = stack_pointer[-2 - (oparg & 1)];
  |  | 1516|      0|            PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 1517|      0|            PyObject *str_o = PyStackRef_AsPyObjectBorrow(str);
  |  | 1518|      0|            int conversion = oparg >> 2;
  |  | 1519|      0|            PyObject *format_o;
  |  | 1520|      0|            if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (1520:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1521|      0|                format_o = PyStackRef_AsPyObjectBorrow(format[0]);
  |  | 1522|      0|            }
  |  | 1523|      0|            else {
  |  | 1524|      0|                format_o = &_Py_STR(empty);
  |  |  ------------------
  |  |  |  |  938|      0|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1525|      0|            }
  |  | 1526|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1527|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 1528|      0|            PyObject *interpolation_o = _PyInterpolation_Build(value_o, str_o, conversion, format_o);
  |  | 1529|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1530|      0|            if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (1530:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1531|      0|                stack_pointer += -(oparg & 1);
  |  | 1532|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1533|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1534|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 1535|      0|                PyStackRef_CLOSE(format[0]);
  |  | 1536|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1537|      0|            }
  |  | 1538|      0|            else {
  |  | 1539|      0|                stack_pointer += -(oparg & 1);
  |  | 1540|      0|            }
  |  | 1541|      0|            stack_pointer += -1;
  |  | 1542|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1543|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1544|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 1545|      0|            PyStackRef_CLOSE(str);
  |  | 1546|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1547|      0|            stack_pointer += -1;
  |  | 1548|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1549|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1550|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 1551|      0|            PyStackRef_CLOSE(value);
  |  | 1552|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1553|      0|            if (interpolation_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1553:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1554|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1555|      0|            }
  |  | 1556|      0|            interpolation = PyStackRef_FromPyObjectSteal(interpolation_o);
  |  | 1557|      0|            stack_pointer[0] = interpolation;
  |  | 1558|      0|            stack_pointer += 1;
  |  | 1559|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1560|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 1561|      0|        }
  |  | 1562|       |
  |  | 1563|   363k|        TARGET(BUILD_LIST) {
  |  |  ------------------
  |  |  |  |  132|   363k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1564|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1565|       |            int opcode = BUILD_LIST;
  |  | 1566|       |            (void)(opcode);
  |  | 1567|       |            #endif
  |  | 1568|   363k|            frame->instr_ptr = next_instr;
  |  | 1569|   363k|            next_instr += 1;
  |  | 1570|   363k|            INSTRUCTION_STATS(BUILD_LIST);
  |  |  ------------------
  |  |  |  |   71|   363k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1571|   363k|            _PyStackRef *values;
  |  | 1572|   363k|            _PyStackRef list;
  |  | 1573|   363k|            values = &stack_pointer[-oparg];
  |  | 1574|   363k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1575|   363k|            _PyFrame_StackPointerValidate(frame);
  |  | 1576|   363k|            PyObject *list_o = _PyList_FromStackRefStealOnSuccess(values, oparg);
  |  | 1577|   363k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1578|   363k|            if (list_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1578:17): [True: 0, False: 363k]
  |  |  ------------------
  |  | 1579|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1580|      0|            }
  |  | 1581|   363k|            list = PyStackRef_FromPyObjectStealMortal(list_o);
  |  | 1582|   363k|            stack_pointer[-oparg] = list;
  |  | 1583|   363k|            stack_pointer += 1 - oparg;
  |  | 1584|   363k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   363k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1585|   363k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   363k|    { \
  |  |  |  |  201|   363k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   363k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   363k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   363k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   363k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   363k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   363k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   363k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 363k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   363k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   363k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   363k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   363k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   363k|    }
  |  |  ------------------
  |  | 1586|   363k|        }
  |  | 1587|       |
  |  | 1588|  1.80k|        TARGET(BUILD_MAP) {
  |  |  ------------------
  |  |  |  |  132|  1.80k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1589|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1590|       |            int opcode = BUILD_MAP;
  |  | 1591|       |            (void)(opcode);
  |  | 1592|       |            #endif
  |  | 1593|  1.80k|            frame->instr_ptr = next_instr;
  |  | 1594|  1.80k|            next_instr += 1;
  |  | 1595|  1.80k|            INSTRUCTION_STATS(BUILD_MAP);
  |  |  ------------------
  |  |  |  |   71|  1.80k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1596|  1.80k|            _PyStackRef *values;
  |  | 1597|  1.80k|            _PyStackRef map;
  |  | 1598|  1.80k|            values = &stack_pointer[-oparg*2];
  |  | 1599|  1.80k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1600|  1.80k|            _PyFrame_StackPointerValidate(frame);
  |  | 1601|  1.80k|            PyObject *map_o = _Py_BuildMap_StackRefSteal(values, oparg);
  |  | 1602|  1.80k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1603|  1.80k|            if (map_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1603:17): [True: 0, False: 1.80k]
  |  |  ------------------
  |  | 1604|      0|                stack_pointer += -oparg*2;
  |  | 1605|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1606|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1607|      0|            }
  |  | 1608|  1.80k|            map = PyStackRef_FromPyObjectStealMortal(map_o);
  |  | 1609|  1.80k|            stack_pointer[-oparg*2] = map;
  |  | 1610|  1.80k|            stack_pointer += 1 - oparg*2;
  |  | 1611|  1.80k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.80k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1612|  1.80k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.80k|    { \
  |  |  |  |  201|  1.80k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.80k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.80k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.80k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.80k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.80k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.80k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.80k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.80k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.80k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.80k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.80k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.80k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.80k|    }
  |  |  ------------------
  |  | 1613|  1.80k|        }
  |  | 1614|       |
  |  | 1615|    192|        TARGET(BUILD_SET) {
  |  |  ------------------
  |  |  |  |  132|    192|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1616|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1617|       |            int opcode = BUILD_SET;
  |  | 1618|       |            (void)(opcode);
  |  | 1619|       |            #endif
  |  | 1620|    192|            frame->instr_ptr = next_instr;
  |  | 1621|    192|            next_instr += 1;
  |  | 1622|    192|            INSTRUCTION_STATS(BUILD_SET);
  |  |  ------------------
  |  |  |  |   71|    192|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1623|    192|            _PyStackRef *values;
  |  | 1624|    192|            _PyStackRef set;
  |  | 1625|    192|            values = &stack_pointer[-oparg];
  |  | 1626|    192|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1627|    192|            _PyFrame_StackPointerValidate(frame);
  |  | 1628|    192|            PyObject *set_o = PySet_New(NULL);
  |  | 1629|    192|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1630|    192|            if (set_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1630:17): [True: 0, False: 192]
  |  |  ------------------
  |  | 1631|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (1631:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1632|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 1633|      0|                _PyStackRef tmp;
  |  | 1634|      0|                for (int _i = oparg; --_i >= 0;) {
  |  |  ------------------
  |  |  |  Branch (1634:38): [True: 0, False: 0]
  |  |  ------------------
  |  | 1635|      0|                    tmp = values[_i];
  |  | 1636|      0|                    values[_i] = PyStackRef_NULL;
  |  | 1637|      0|                    PyStackRef_CLOSE(tmp);
  |  | 1638|      0|                }
  |  | 1639|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1640|      0|                stack_pointer += -oparg;
  |  | 1641|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1642|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1643|      0|            }
  |  | 1644|    192|            int err = 0;
  |  | 1645|    457|            for (Py_ssize_t i = 0; i < oparg; i++) {
  |  |  ------------------
  |  |  |  Branch (1645:36): [True: 265, False: 192]
  |  |  ------------------
  |  | 1646|    265|                _PyStackRef value = values[i];
  |  | 1647|    265|                values[i] = PyStackRef_NULL;
  |  | 1648|    265|                if (err == 0) {
  |  |  ------------------
  |  |  |  Branch (1648:21): [True: 265, False: 0]
  |  |  ------------------
  |  | 1649|    265|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (1649:21): [True: 265, False: 0]
  |  |  ------------------
  |  | 1650|    265|                    _PyFrame_StackPointerValidate(frame);
  |  | 1651|    265|                    err = _PySet_AddTakeRef((PySetObject *)set_o, PyStackRef_AsPyObjectSteal(value));
  |  | 1652|    265|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1653|    265|                }
  |  | 1654|      0|                else {
  |  | 1655|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (1655:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1656|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 1657|      0|                    PyStackRef_CLOSE(value);
  |  | 1658|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1659|      0|                }
  |  | 1660|    265|            }
  |  | 1661|    192|            if (err) {
  |  |  ------------------
  |  |  |  Branch (1661:17): [True: 0, False: 192]
  |  |  ------------------
  |  | 1662|      0|                stack_pointer += -oparg;
  |  | 1663|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1664|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1665|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 1666|      0|                Py_DECREF(set_o);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1667|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1668|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1669|      0|            }
  |  | 1670|    192|            set = PyStackRef_FromPyObjectStealMortal(set_o);
  |  | 1671|    192|            stack_pointer[-oparg] = set;
  |  | 1672|    192|            stack_pointer += 1 - oparg;
  |  | 1673|    192|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    192|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1674|    192|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    192|    { \
  |  |  |  |  201|    192|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    192|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    192|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    192|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    192|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    192|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    192|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    192|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 192]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    192|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    192|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    192|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    192|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    192|    }
  |  |  ------------------
  |  | 1675|    192|        }
  |  | 1676|       |
  |  | 1677|     48|        TARGET(BUILD_SLICE) {
  |  |  ------------------
  |  |  |  |  132|     48|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1678|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1679|       |            int opcode = BUILD_SLICE;
  |  | 1680|       |            (void)(opcode);
  |  | 1681|       |            #endif
  |  | 1682|     48|            frame->instr_ptr = next_instr;
  |  | 1683|     48|            next_instr += 1;
  |  | 1684|     48|            INSTRUCTION_STATS(BUILD_SLICE);
  |  |  ------------------
  |  |  |  |   71|     48|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1685|     48|            _PyStackRef *args;
  |  | 1686|     48|            _PyStackRef slice;
  |  | 1687|     48|            args = &stack_pointer[-oparg];
  |  | 1688|     48|            PyObject *start_o = PyStackRef_AsPyObjectBorrow(args[0]);
  |  | 1689|     48|            PyObject *stop_o = PyStackRef_AsPyObjectBorrow(args[1]);
  |  | 1690|     48|            PyObject *step_o = oparg == 3 ? PyStackRef_AsPyObjectBorrow(args[2]) : NULL;
  |  |  ------------------
  |  |  |  Branch (1690:32): [True: 47, False: 1]
  |  |  ------------------
  |  | 1691|     48|            PyObject *slice_o = PySlice_New(start_o, stop_o, step_o);
  |  | 1692|     48|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1693|     48|            _PyFrame_StackPointerValidate(frame);
  |  | 1694|     48|            _PyStackRef tmp;
  |  | 1695|    191|            for (int _i = oparg; --_i >= 0;) {
  |  |  ------------------
  |  |  |  Branch (1695:34): [True: 143, False: 48]
  |  |  ------------------
  |  | 1696|    143|                tmp = args[_i];
  |  | 1697|    143|                args[_i] = PyStackRef_NULL;
  |  | 1698|    143|                PyStackRef_CLOSE(tmp);
  |  | 1699|    143|            }
  |  | 1700|     48|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1701|     48|            stack_pointer += -oparg;
  |  | 1702|     48|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     48|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1703|     48|            if (slice_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1703:17): [True: 0, False: 48]
  |  |  ------------------
  |  | 1704|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1705|      0|            }
  |  | 1706|     48|            slice = PyStackRef_FromPyObjectStealMortal(slice_o);
  |  | 1707|     48|            stack_pointer[0] = slice;
  |  | 1708|     48|            stack_pointer += 1;
  |  | 1709|     48|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     48|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1710|     48|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     48|    { \
  |  |  |  |  201|     48|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     48|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     48|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     48|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     48|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     48|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     48|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     48|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 48]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     48|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     48|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     48|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     48|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     48|    }
  |  |  ------------------
  |  | 1711|     48|        }
  |  | 1712|       |
  |  | 1713|  49.3k|        TARGET(BUILD_STRING) {
  |  |  ------------------
  |  |  |  |  132|  49.3k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1714|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1715|       |            int opcode = BUILD_STRING;
  |  | 1716|       |            (void)(opcode);
  |  | 1717|       |            #endif
  |  | 1718|  49.3k|            frame->instr_ptr = next_instr;
  |  | 1719|  49.3k|            next_instr += 1;
  |  | 1720|  49.3k|            INSTRUCTION_STATS(BUILD_STRING);
  |  |  ------------------
  |  |  |  |   71|  49.3k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1721|  49.3k|            _PyStackRef *pieces;
  |  | 1722|  49.3k|            _PyStackRef str;
  |  | 1723|  49.3k|            pieces = &stack_pointer[-oparg];
  |  | 1724|  49.3k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1725|  49.3k|            _PyFrame_StackPointerValidate(frame);
  |  | 1726|  49.3k|            PyObject *str_o = _Py_BuildString_StackRefSteal(pieces, oparg);
  |  | 1727|  49.3k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1728|  49.3k|            if (str_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1728:17): [True: 0, False: 49.3k]
  |  |  ------------------
  |  | 1729|      0|                stack_pointer += -oparg;
  |  | 1730|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1731|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1732|      0|            }
  |  | 1733|  49.3k|            str = PyStackRef_FromPyObjectSteal(str_o);
  |  | 1734|  49.3k|            stack_pointer[-oparg] = str;
  |  | 1735|  49.3k|            stack_pointer += 1 - oparg;
  |  | 1736|  49.3k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  49.3k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1737|  49.3k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  49.3k|    { \
  |  |  |  |  201|  49.3k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  49.3k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  49.3k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  49.3k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  49.3k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  49.3k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  49.3k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  49.3k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 49.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  49.3k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  49.3k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  49.3k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  49.3k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  49.3k|    }
  |  |  ------------------
  |  | 1738|  49.3k|        }
  |  | 1739|       |
  |  | 1740|      0|        TARGET(BUILD_TEMPLATE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1741|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1742|       |            int opcode = BUILD_TEMPLATE;
  |  | 1743|       |            (void)(opcode);
  |  | 1744|       |            #endif
  |  | 1745|      0|            frame->instr_ptr = next_instr;
  |  | 1746|      0|            next_instr += 1;
  |  | 1747|      0|            INSTRUCTION_STATS(BUILD_TEMPLATE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1748|      0|            _PyStackRef strings;
  |  | 1749|      0|            _PyStackRef interpolations;
  |  | 1750|      0|            _PyStackRef template;
  |  | 1751|      0|            interpolations = stack_pointer[-1];
  |  | 1752|      0|            strings = stack_pointer[-2];
  |  | 1753|      0|            PyObject *strings_o = PyStackRef_AsPyObjectBorrow(strings);
  |  | 1754|      0|            PyObject *interpolations_o = PyStackRef_AsPyObjectBorrow(interpolations);
  |  | 1755|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1756|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 1757|      0|            PyObject *template_o = _PyTemplate_Build(strings_o, interpolations_o);
  |  | 1758|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1759|      0|            stack_pointer += -1;
  |  | 1760|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1761|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1762|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 1763|      0|            PyStackRef_CLOSE(interpolations);
  |  | 1764|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1765|      0|            stack_pointer += -1;
  |  | 1766|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1767|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1768|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 1769|      0|            PyStackRef_CLOSE(strings);
  |  | 1770|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 1771|      0|            if (template_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1771:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 1772|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1773|      0|            }
  |  | 1774|      0|            template = PyStackRef_FromPyObjectSteal(template_o);
  |  | 1775|      0|            stack_pointer[0] = template;
  |  | 1776|      0|            stack_pointer += 1;
  |  | 1777|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1778|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 1779|      0|        }
  |  | 1780|       |
  |  | 1781|   473k|        TARGET(BUILD_TUPLE) {
  |  |  ------------------
  |  |  |  |  132|   473k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1782|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1783|       |            int opcode = BUILD_TUPLE;
  |  | 1784|       |            (void)(opcode);
  |  | 1785|       |            #endif
  |  | 1786|   473k|            frame->instr_ptr = next_instr;
  |  | 1787|   473k|            next_instr += 1;
  |  | 1788|   473k|            INSTRUCTION_STATS(BUILD_TUPLE);
  |  |  ------------------
  |  |  |  |   71|   473k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1789|   473k|            _PyStackRef *values;
  |  | 1790|   473k|            _PyStackRef tup;
  |  | 1791|   473k|            values = &stack_pointer[-oparg];
  |  | 1792|   473k|            PyObject *tup_o = _PyTuple_FromStackRefStealOnSuccess(values, oparg);
  |  | 1793|   473k|            if (tup_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1793:17): [True: 0, False: 473k]
  |  |  ------------------
  |  | 1794|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1795|      0|            }
  |  | 1796|   473k|            tup = PyStackRef_FromPyObjectStealMortal(tup_o);
  |  | 1797|   473k|            stack_pointer[-oparg] = tup;
  |  | 1798|   473k|            stack_pointer += 1 - oparg;
  |  | 1799|   473k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   473k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1800|   473k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   473k|    { \
  |  |  |  |  201|   473k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   473k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   473k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   473k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   473k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   473k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   473k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   473k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 473k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   473k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   473k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   473k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   473k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   473k|    }
  |  |  ------------------
  |  | 1801|   473k|        }
  |  | 1802|       |
  |  | 1803|      0|        TARGET(CACHE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1804|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1805|       |            int opcode = CACHE;
  |  | 1806|       |            (void)(opcode);
  |  | 1807|       |            #endif
  |  | 1808|      0|            frame->instr_ptr = next_instr;
  |  | 1809|      0|            next_instr += 1;
  |  | 1810|      0|            INSTRUCTION_STATS(CACHE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1811|      0|            assert(0 && "Executing a cache.");
  |  |  ------------------
  |  |  |  Branch (1811:13): [Folded, False: 0]
  |  |  |  Branch (1811:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|            Py_FatalError("Executing a cache.");
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  |  | 1813|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 1814|      0|        }
  |  | 1815|       |
  |  | 1816|  4.59k|        TARGET(CALL) {
  |  |  ------------------
  |  |  |  |  132|  4.59k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1817|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1818|       |            int opcode = CALL;
  |  | 1819|       |            (void)(opcode);
  |  | 1820|       |            #endif
  |  | 1821|  4.59k|            frame->instr_ptr = next_instr;
  |  | 1822|  4.59k|            next_instr += 4;
  |  | 1823|  4.59k|            INSTRUCTION_STATS(CALL);
  |  |  ------------------
  |  |  |  |   71|  4.59k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1824|  7.02k|            PREDICTED_CALL:;
  |  | 1825|  7.02k|            _Py_CODEUNIT* const this_instr = next_instr - 4;
  |  | 1826|  7.02k|            (void)this_instr;
  |  | 1827|  7.02k|            opcode = CALL;
  |  |  ------------------
  |  |  |  |   63|  7.02k|#define CALL                                    50
  |  |  ------------------
  |  | 1828|  7.02k|            _PyStackRef callable;
  |  | 1829|  7.02k|            _PyStackRef self_or_null;
  |  | 1830|  7.02k|            _PyStackRef *args;
  |  | 1831|  7.02k|            _PyStackRef res;
  |  | 1832|       |            // _SPECIALIZE_CALL
  |  | 1833|  7.02k|            {
  |  | 1834|  7.02k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 1835|  7.02k|                callable = stack_pointer[-2 - oparg];
  |  | 1836|  7.02k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 1837|  7.02k|                (void)counter;
  |  | 1838|  7.02k|                #if ENABLE_SPECIALIZATION
  |  | 1839|  7.02k|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  7.02k|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 1.38k, False: 5.63k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1840|  1.38k|                    next_instr = this_instr;
  |  | 1841|  1.38k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1842|  1.38k|                    _PyFrame_StackPointerValidate(frame);
  |  | 1843|  1.38k|                    _Py_Specialize_Call(callable, self_or_null, next_instr, oparg + !PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  |  482|  1.38k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.38k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.38k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1844|  1.38k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1845|  1.38k|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|  1.38k|    { \
  |  |  |  |  217|  1.38k|        opcode = next_instr->op.code; \
  |  |  |  |  218|  1.38k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.38k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|  1.38k|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.38k|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|  1.38k|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|  1.38k|    }
  |  |  ------------------
  |  | 1846|  1.38k|                }
  |  | 1847|  7.02k|                OPCODE_DEFERRED_INC(CALL);
  |  |  ------------------
  |  |  |  |   90|  7.02k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 1848|  7.02k|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  7.02k|    do { \
  |  |  |  |  378|  7.02k|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  7.02k|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 7.02k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1849|  7.02k|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 1850|  7.02k|            }
  |  | 1851|       |            /* Skip 2 cache entries */
  |  | 1852|       |            // _MAYBE_EXPAND_METHOD
  |  | 1853|  7.02k|            {
  |  | 1854|  7.02k|                if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|    448|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    448|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    448|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 448, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1854:21): [True: 448, False: 6.57k]
  |  |  ------------------
  |  | 1855|    448|                    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 1856|    448|                    PyObject *self = ((PyMethodObject *)callable_o)->im_self;
  |  | 1857|    448|                    self_or_null = PyStackRef_FromPyObjectNew(self);
  |  |  ------------------
  |  |  |  |  611|    448|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    448|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    448|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1858|    448|                    PyObject *method = ((PyMethodObject *)callable_o)->im_func;
  |  | 1859|    448|                    _PyStackRef temp = callable;
  |  | 1860|    448|                    callable = PyStackRef_FromPyObjectNew(method);
  |  |  ------------------
  |  |  |  |  611|    448|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    448|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    448|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1861|    448|                    stack_pointer[-2 - oparg] = callable;
  |  | 1862|    448|                    stack_pointer[-1 - oparg] = self_or_null;
  |  | 1863|    448|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1864|    448|                    _PyFrame_StackPointerValidate(frame);
  |  | 1865|    448|                    PyStackRef_CLOSE(temp);
  |  | 1866|    448|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1867|    448|                }
  |  | 1868|  7.02k|            }
  |  | 1869|       |            // _DO_CALL
  |  | 1870|  7.02k|            {
  |  | 1871|  7.02k|                args = &stack_pointer[-oparg];
  |  | 1872|  7.02k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 1873|  7.02k|                int total_args = oparg;
  |  | 1874|  7.02k|                _PyStackRef *arguments = args;
  |  | 1875|  7.02k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  7.02k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  7.02k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  7.02k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1875:21): [True: 2.84k, False: 4.17k]
  |  |  ------------------
  |  | 1876|  2.84k|                    arguments--;
  |  | 1877|  2.84k|                    total_args++;
  |  | 1878|  2.84k|                }
  |  | 1879|  7.02k|                if (Py_TYPE(callable_o) == &PyFunction_Type &&
  |  |  ------------------
  |  |  |  |  213|  7.02k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  7.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  7.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1879:21): [True: 2.02k, False: 4.99k]
  |  |  ------------------
  |  | 1880|  2.02k|                    !IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|  9.04k|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (1880:21): [True: 2.02k, False: 0]
  |  |  ------------------
  |  | 1881|  2.02k|                    ((PyFunctionObject *)callable_o)->vectorcall == _PyFunction_Vectorcall)
  |  |  ------------------
  |  |  |  Branch (1881:21): [True: 2.02k, False: 0]
  |  |  ------------------
  |  | 1882|  2.02k|                {
  |  | 1883|  2.02k|                    int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|  2.02k|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1884|  2.02k|                    PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|  2.02k|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                                   PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1884:40): [True: 2.02k, False: 0]
  |  |  ------------------
  |  | 1885|  2.02k|                    stack_pointer[-2 - oparg] = callable;
  |  | 1886|  2.02k|                    stack_pointer[-1 - oparg] = self_or_null;
  |  | 1887|  2.02k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1888|  2.02k|                    _PyFrame_StackPointerValidate(frame);
  |  | 1889|  2.02k|                    _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit(
  |  | 1890|  2.02k|                        tstate, callable, locals,
  |  | 1891|  2.02k|                        arguments, total_args, NULL, frame
  |  | 1892|  2.02k|                    );
  |  | 1893|  2.02k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 1894|  2.02k|                    stack_pointer += -2 - oparg;
  |  | 1895|  2.02k|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.02k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1896|  2.02k|                    if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (1896:25): [True: 0, False: 2.02k]
  |  |  ------------------
  |  | 1897|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1898|      0|                    }
  |  | 1899|  2.02k|                    frame->return_offset = 4u ;
  |  | 1900|  2.02k|                    DISPATCH_INLINED(new_frame);
  |  |  ------------------
  |  |  |  |  223|  2.02k|    do {                                                         \
  |  |  |  |  224|  2.02k|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|  2.02k|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|  2.02k|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|  2.02k|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|  2.02k|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|  2.02k|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|  2.02k|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|  2.02k|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  2.02k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1900:21): [True: 2.02k, False: 0]
  |  |  |  Branch (1900:21): [True: 2.02k, False: 0]
  |  |  ------------------
  |  | 1901|  2.02k|                }
  |  | 1902|  4.99k|                stack_pointer[-2 - oparg] = callable;
  |  | 1903|  4.99k|                stack_pointer[-1 - oparg] = self_or_null;
  |  | 1904|  4.99k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1905|  4.99k|                _PyFrame_StackPointerValidate(frame);
  |  | 1906|  4.99k|                PyObject* res_o = _Py_VectorCallInstrumentation_StackRefSteal(
  |  | 1907|  4.99k|                    callable,
  |  | 1908|  4.99k|                    arguments,
  |  | 1909|  4.99k|                    total_args,
  |  | 1910|  4.99k|                    PyStackRef_NULL,
  |  | 1911|  4.99k|                    opcode == INSTRUMENTED_CALL,
  |  |  ------------------
  |  |  |  |  237|  4.99k|#define INSTRUMENTED_CALL                      249
  |  |  ------------------
  |  | 1912|  4.99k|                    frame,
  |  | 1913|  4.99k|                    this_instr,
  |  | 1914|  4.99k|                    tstate);
  |  | 1915|  4.99k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1916|  4.99k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (1916:21): [True: 40, False: 4.95k]
  |  |  ------------------
  |  | 1917|     40|                    stack_pointer += -2 - oparg;
  |  | 1918|     40|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     40|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1919|     40|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|     40|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1920|      0|                }
  |  | 1921|  4.95k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 1922|  4.95k|            }
  |  | 1923|       |            // _CHECK_PERIODIC_AT_END
  |  | 1924|      0|            {
  |  | 1925|  4.95k|                stack_pointer[-2 - oparg] = res;
  |  | 1926|  4.95k|                stack_pointer += -1 - oparg;
  |  | 1927|  4.95k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  4.95k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 1928|  4.95k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 1929|  4.95k|                _PyFrame_StackPointerValidate(frame);
  |  | 1930|  4.95k|                int err = check_periodics_at_end(tstate, frame);
  |  | 1931|  4.95k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 1932|  4.95k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (1932:21): [True: 0, False: 4.95k]
  |  |  ------------------
  |  | 1933|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 1934|      0|                }
  |  | 1935|  4.95k|            }
  |  | 1936|  4.95k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  4.95k|    { \
  |  |  |  |  201|  4.95k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  4.95k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.95k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  4.95k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  4.95k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.95k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  4.95k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  4.95k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4.95k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  4.95k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  4.95k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  4.95k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  4.95k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  4.95k|    }
  |  |  ------------------
  |  | 1937|  4.95k|        }
  |  | 1938|       |
  |  | 1939|  1.22k|        TARGET(CALL_ALLOC_AND_ENTER_INIT) {
  |  |  ------------------
  |  |  |  |  132|  1.22k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 1940|       |            #if _Py_TAIL_CALL_INTERP
  |  | 1941|       |            int opcode = CALL_ALLOC_AND_ENTER_INIT;
  |  | 1942|       |            (void)(opcode);
  |  | 1943|       |            #endif
  |  | 1944|  1.22k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 1945|  1.22k|            (void)this_instr;
  |  | 1946|  1.22k|            frame->instr_ptr = next_instr;
  |  | 1947|  1.22k|            next_instr += 4;
  |  | 1948|  1.22k|            INSTRUCTION_STATS(CALL_ALLOC_AND_ENTER_INIT);
  |  |  ------------------
  |  |  |  |   71|  1.22k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 1949|  1.22k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 1950|  1.22k|            _PyStackRef callable;
  |  | 1951|  1.22k|            _PyStackRef self_or_null;
  |  | 1952|  1.22k|            _PyStackRef init;
  |  | 1953|  1.22k|            _PyStackRef self;
  |  | 1954|  1.22k|            _PyStackRef *args;
  |  | 1955|  1.22k|            _PyStackRef init_frame;
  |  | 1956|  1.22k|            _PyStackRef new_frame;
  |  | 1957|       |            /* Skip 1 cache entry */
  |  | 1958|       |            // _CHECK_PEP_523
  |  | 1959|  1.22k|            {
  |  | 1960|  1.22k|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|  1.22k|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 1.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1961|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1962|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (1962:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1963|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1964|      0|                }
  |  | 1965|  1.22k|            }
  |  | 1966|       |            // _CHECK_OBJECT
  |  | 1967|  1.22k|            {
  |  | 1968|  1.22k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 1969|  1.22k|                callable = stack_pointer[-2 - oparg];
  |  | 1970|  1.22k|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 1971|  1.22k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 1972|  1.22k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  1.22k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.22k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.22k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1972:21): [True: 0, False: 1.22k]
  |  |  ------------------
  |  | 1973|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1974|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (1974:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1975|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1976|      0|                }
  |  | 1977|  1.22k|                if (!PyType_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |  766|  1.22k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1977:21): [True: 0, False: 1.22k]
  |  |  ------------------
  |  | 1978|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1979|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (1979:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1980|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1981|      0|                }
  |  | 1982|  1.22k|                PyTypeObject *tp = (PyTypeObject *)callable_o;
  |  | 1983|  1.22k|                if (FT_ATOMIC_LOAD_UINT32_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  159|  1.22k|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (1983:21): [True: 10, False: 1.21k]
  |  |  ------------------
  |  | 1984|     10|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|     10|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1985|     10|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (1985:21): [True: 10, False: 0]
  |  |  ------------------
  |  | 1986|     10|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|     10|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1987|      0|                }
  |  | 1988|  1.22k|            }
  |  | 1989|       |            // _CHECK_RECURSION_REMAINING
  |  | 1990|  1.21k|            {
  |  | 1991|  1.21k|                if (tstate->py_recursion_remaining <= 1) {
  |  |  ------------------
  |  |  |  Branch (1991:21): [True: 0, False: 1.21k]
  |  |  ------------------
  |  | 1992|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 1993|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (1993:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1994|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 1995|      0|                }
  |  | 1996|  1.21k|            }
  |  | 1997|       |            // _ALLOCATE_OBJECT
  |  | 1998|  1.21k|            {
  |  | 1999|  1.21k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2000|  1.21k|                assert(PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  Branch (2000:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2001|  1.21k|                assert(PyType_Check(callable_o));
  |  |  ------------------
  |  |  |  Branch (2001:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2002|  1.21k|                PyTypeObject *tp = (PyTypeObject *)callable_o;
  |  | 2003|  1.21k|                assert(tp->tp_new == PyBaseObject_Type.tp_new);
  |  |  ------------------
  |  |  |  Branch (2003:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2004|  1.21k|                assert(tp->tp_flags & Py_TPFLAGS_HEAPTYPE);
  |  |  ------------------
  |  |  |  Branch (2004:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2005|  1.21k|                assert(tp->tp_alloc == PyType_GenericAlloc);
  |  |  ------------------
  |  |  |  Branch (2005:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2006|  1.21k|                PyHeapTypeObject *cls = (PyHeapTypeObject *)callable_o;
  |  | 2007|  1.21k|                PyFunctionObject *init_func = (PyFunctionObject *)FT_ATOMIC_LOAD_PTR_ACQUIRE(cls->_spec_cache.init);
  |  |  ------------------
  |  |  |  |  150|  1.21k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  | 2008|  1.21k|                PyCodeObject *code = (PyCodeObject *)init_func->func_code;
  |  | 2009|  1.21k|                if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize + _Py_InitCleanup.co_framesize)) {
  |  |  ------------------
  |  |  |  Branch (2009:21): [True: 0, False: 1.21k]
  |  |  ------------------
  |  | 2010|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2011|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2011:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2012|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2013|      0|                }
  |  | 2014|  1.21k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  1.21k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2015|  1.21k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2016|  1.21k|                _PyFrame_StackPointerValidate(frame);
  |  | 2017|  1.21k|                PyObject *self_o = PyType_GenericAlloc(tp, 0);
  |  | 2018|  1.21k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2019|  1.21k|                if (self_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2019:21): [True: 0, False: 1.21k]
  |  |  ------------------
  |  | 2020|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2021|      0|                }
  |  | 2022|  1.21k|                self_or_null = PyStackRef_FromPyObjectSteal(self_o);
  |  | 2023|  1.21k|                _PyStackRef temp = callable;
  |  | 2024|  1.21k|                callable = PyStackRef_FromPyObjectNew(init_func);
  |  |  ------------------
  |  |  |  |  611|  1.21k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2025|  1.21k|                stack_pointer[-2 - oparg] = callable;
  |  | 2026|  1.21k|                stack_pointer[-1 - oparg] = self_or_null;
  |  | 2027|  1.21k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2027:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2028|  1.21k|                _PyFrame_StackPointerValidate(frame);
  |  | 2029|  1.21k|                PyStackRef_CLOSE(temp);
  |  | 2030|  1.21k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2031|  1.21k|            }
  |  | 2032|       |            // _CREATE_INIT_FRAME
  |  | 2033|      0|            {
  |  | 2034|  1.21k|                args = &stack_pointer[-oparg];
  |  | 2035|  1.21k|                self = self_or_null;
  |  | 2036|  1.21k|                init = callable;
  |  | 2037|  1.21k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2037:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2038|  1.21k|                _PyFrame_StackPointerValidate(frame);
  |  | 2039|  1.21k|                _PyInterpreterFrame *shim = _PyFrame_PushTrampolineUnchecked(
  |  | 2040|  1.21k|                    tstate, (PyCodeObject *)&_Py_InitCleanup, 1, frame);
  |  | 2041|  1.21k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2042|  1.21k|                assert(_PyFrame_GetBytecode(shim)[0].op.code == EXIT_INIT_CHECK);
  |  |  ------------------
  |  |  |  Branch (2042:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2043|  1.21k|                assert(_PyFrame_GetBytecode(shim)[1].op.code == RETURN_VALUE);
  |  |  ------------------
  |  |  |  Branch (2043:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2044|  1.21k|                shim->localsplus[0] = PyStackRef_DUP(self);
  |  | 2045|  1.21k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2045:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2046|  1.21k|                _PyFrame_StackPointerValidate(frame);
  |  | 2047|  1.21k|                _PyInterpreterFrame *temp = _PyEvalFramePushAndInit(
  |  | 2048|  1.21k|                    tstate, init, NULL, args-1, oparg+1, NULL, shim);
  |  | 2049|  1.21k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2050|  1.21k|                stack_pointer += -2 - oparg;
  |  | 2051|  1.21k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.21k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2052|  1.21k|                if (temp == NULL) {
  |  |  ------------------
  |  |  |  Branch (2052:21): [True: 0, False: 1.21k]
  |  |  ------------------
  |  | 2053|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2054|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 2055|      0|                    _PyEval_FrameClearAndPop(tstate, shim);
  |  | 2056|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2057|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2058|      0|                }
  |  | 2059|  1.21k|                frame->return_offset = 1 + INLINE_CACHE_ENTRIES_CALL;
  |  |  ------------------
  |  |  |  |  129|  1.21k|#define INLINE_CACHE_ENTRIES_CALL CACHE_ENTRIES(_PyCallCache)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  1.21k|#define CACHE_ENTRIES(cache) (sizeof(cache)/sizeof(_Py_CODEUNIT))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2060|  1.21k|                tstate->py_recursion_remaining--;
  |  | 2061|  1.21k|                init_frame = PyStackRef_Wrap(temp);
  |  | 2062|  1.21k|            }
  |  | 2063|       |            // _PUSH_FRAME
  |  | 2064|      0|            {
  |  | 2065|  1.21k|                new_frame = init_frame;
  |  | 2066|  1.21k|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (2066:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2067|  1.21k|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 2068|  1.21k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2069|  1.21k|                _PyFrame_StackPointerValidate(frame);
  |  | 2070|  1.21k|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (2070:17): [True: 0, False: 1.21k]
  |  |  |  Branch (2070:17): [True: 1.21k, False: 0]
  |  |  ------------------
  |  | 2071|  1.21k|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|  1.21k|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 2072|  1.21k|                frame = tstate->current_frame = temp;
  |  | 2073|  1.21k|                tstate->py_recursion_remaining--;
  |  | 2074|  1.21k|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 2075|  1.21k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2076|  1.21k|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|  1.21k|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  1.21k|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  1.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 1.21k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2077|       |                #ifdef Py_DEBUG
  |  | 2078|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 2079|       |                #endif
  |  | 2080|  1.21k|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|  1.21k|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 2081|  1.21k|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  1.21k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 2082|  1.21k|            }
  |  | 2083|  1.21k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.21k|    { \
  |  |  |  |  201|  1.21k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.21k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.21k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.21k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.21k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.21k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.21k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.21k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.21k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.21k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.21k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.21k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.21k|    }
  |  |  ------------------
  |  | 2084|  1.21k|        }
  |  | 2085|       |
  |  | 2086|  2.45k|        TARGET(CALL_BOUND_METHOD_EXACT_ARGS) {
  |  |  ------------------
  |  |  |  |  132|  2.45k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2087|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2088|       |            int opcode = CALL_BOUND_METHOD_EXACT_ARGS;
  |  | 2089|       |            (void)(opcode);
  |  | 2090|       |            #endif
  |  | 2091|  2.45k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2092|  2.45k|            (void)this_instr;
  |  | 2093|  2.45k|            frame->instr_ptr = next_instr;
  |  | 2094|  2.45k|            next_instr += 4;
  |  | 2095|  2.45k|            INSTRUCTION_STATS(CALL_BOUND_METHOD_EXACT_ARGS);
  |  |  ------------------
  |  |  |  |   71|  2.45k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2096|  2.45k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 2097|  2.45k|            _PyStackRef callable;
  |  | 2098|  2.45k|            _PyStackRef null;
  |  | 2099|  2.45k|            _PyStackRef self_or_null;
  |  | 2100|  2.45k|            _PyStackRef *args;
  |  | 2101|  2.45k|            _PyStackRef new_frame;
  |  | 2102|       |            /* Skip 1 cache entry */
  |  | 2103|       |            // _CHECK_PEP_523
  |  | 2104|  2.45k|            {
  |  | 2105|  2.45k|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|  2.45k|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 2.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2106|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2107|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2107:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2108|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2109|      0|                }
  |  | 2110|  2.45k|            }
  |  | 2111|       |            // _CHECK_CALL_BOUND_METHOD_EXACT_ARGS
  |  | 2112|  2.45k|            {
  |  | 2113|  2.45k|                null = stack_pointer[-1 - oparg];
  |  | 2114|  2.45k|                callable = stack_pointer[-2 - oparg];
  |  | 2115|  2.45k|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|  2.45k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  2.45k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  2.45k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2115:21): [True: 0, False: 2.45k]
  |  |  ------------------
  |  | 2116|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2117|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2117:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2118|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2119|      0|                }
  |  | 2120|  2.45k|                if (Py_TYPE(PyStackRef_AsPyObjectBorrow(callable)) != &PyMethod_Type) {
  |  |  ------------------
  |  |  |  |  213|  2.45k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2120:21): [True: 0, False: 2.45k]
  |  |  ------------------
  |  | 2121|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2122|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2122:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2123|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2124|      0|                }
  |  | 2125|  2.45k|            }
  |  | 2126|       |            // _INIT_CALL_BOUND_METHOD_EXACT_ARGS
  |  | 2127|  2.45k|            {
  |  | 2128|  2.45k|                self_or_null = null;
  |  | 2129|  2.45k|                assert(PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  Branch (2129:17): [True: 2.45k, False: 0]
  |  |  ------------------
  |  | 2130|  2.45k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2131|  2.45k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  2.45k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2132|  2.45k|                self_or_null = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
  |  |  ------------------
  |  |  |  |  611|  2.45k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2133|  2.45k|                _PyStackRef temp = callable;
  |  | 2134|  2.45k|                callable = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
  |  |  ------------------
  |  |  |  |  611|  2.45k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2135|  2.45k|                stack_pointer[-2 - oparg] = callable;
  |  | 2136|  2.45k|                stack_pointer[-1 - oparg] = self_or_null;
  |  | 2137|  2.45k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2138|  2.45k|                _PyFrame_StackPointerValidate(frame);
  |  | 2139|  2.45k|                PyStackRef_CLOSE(temp);
  |  | 2140|  2.45k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2141|  2.45k|            }
  |  | 2142|       |            // flush
  |  | 2143|       |            // _CHECK_FUNCTION_VERSION
  |  | 2144|      0|            {
  |  | 2145|  2.45k|                uint32_t func_version = read_u32(&this_instr[2].cache);
  |  | 2146|  2.45k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2147|  2.45k|                if (!PyFunction_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |   68|  2.45k|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  2.45k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  2.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  2.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2147:21): [True: 0, False: 2.45k]
  |  |  ------------------
  |  | 2148|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2149|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2149:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2150|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2151|      0|                }
  |  | 2152|  2.45k|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 2153|  2.45k|                if (func->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (2153:21): [True: 401, False: 2.05k]
  |  |  ------------------
  |  | 2154|    401|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|    401|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2155|    401|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2155:21): [True: 401, False: 0]
  |  |  ------------------
  |  | 2156|    401|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|    401|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2157|      0|                }
  |  | 2158|  2.45k|            }
  |  | 2159|       |            // _CHECK_FUNCTION_EXACT_ARGS
  |  | 2160|  2.05k|            {
  |  | 2161|  2.05k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2162|  2.05k|                assert(PyFunction_Check(callable_o));
  |  |  ------------------
  |  |  |  Branch (2162:17): [True: 2.05k, False: 0]
  |  |  ------------------
  |  | 2163|  2.05k|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 2164|  2.05k|                PyCodeObject *code = (PyCodeObject *)func->func_code;
  |  | 2165|  2.05k|                if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) {
  |  |  ------------------
  |  |  |  |  482|  2.05k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  2.05k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  2.05k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2165:21): [True: 0, False: 2.05k]
  |  |  ------------------
  |  | 2166|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2167|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2167:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2168|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2169|      0|                }
  |  | 2170|  2.05k|            }
  |  | 2171|       |            // _CHECK_STACK_SPACE
  |  | 2172|  2.05k|            {
  |  | 2173|  2.05k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2174|  2.05k|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 2175|  2.05k|                PyCodeObject *code = (PyCodeObject *)func->func_code;
  |  | 2176|  2.05k|                if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) {
  |  |  ------------------
  |  |  |  Branch (2176:21): [True: 0, False: 2.05k]
  |  |  ------------------
  |  | 2177|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2178|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2178:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2179|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2180|      0|                }
  |  | 2181|  2.05k|            }
  |  | 2182|       |            // _CHECK_RECURSION_REMAINING
  |  | 2183|  2.05k|            {
  |  | 2184|  2.05k|                if (tstate->py_recursion_remaining <= 1) {
  |  |  ------------------
  |  |  |  Branch (2184:21): [True: 0, False: 2.05k]
  |  |  ------------------
  |  | 2185|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2186|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2186:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2187|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2188|      0|                }
  |  | 2189|  2.05k|            }
  |  | 2190|       |            // _INIT_CALL_PY_EXACT_ARGS
  |  | 2191|  2.05k|            {
  |  | 2192|  2.05k|                args = &stack_pointer[-oparg];
  |  | 2193|  2.05k|                int has_self = !PyStackRef_IsNull(self_or_null);
  |  |  ------------------
  |  |  |  |  482|  2.05k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  2.05k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  2.05k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2194|  2.05k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  2.05k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2195|  2.05k|                _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, callable, oparg + has_self, frame);
  |  | 2196|  2.05k|                _PyStackRef *first_non_self_local = pushed_frame->localsplus + has_self;
  |  | 2197|  2.05k|                pushed_frame->localsplus[0] = self_or_null;
  |  | 2198|  4.35k|                for (int i = 0; i < oparg; i++) {
  |  |  ------------------
  |  |  |  Branch (2198:33): [True: 2.30k, False: 2.05k]
  |  |  ------------------
  |  | 2199|  2.30k|                    first_non_self_local[i] = args[i];
  |  | 2200|  2.30k|                }
  |  | 2201|  2.05k|                new_frame = PyStackRef_Wrap(pushed_frame);
  |  | 2202|  2.05k|            }
  |  | 2203|       |            // _SAVE_RETURN_OFFSET
  |  | 2204|  2.05k|            {
  |  | 2205|  2.05k|                #if TIER_ONE
  |  | 2206|  2.05k|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 2207|  2.05k|                #endif
  |  | 2208|       |                #if TIER_TWO
  |  | 2209|       |                frame->return_offset = oparg;
  |  | 2210|       |                #endif
  |  | 2211|  2.05k|            }
  |  | 2212|       |            // _PUSH_FRAME
  |  | 2213|  2.05k|            {
  |  | 2214|  2.05k|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (2214:17): [True: 2.05k, False: 0]
  |  |  ------------------
  |  | 2215|  2.05k|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 2216|  2.05k|                stack_pointer += -2 - oparg;
  |  | 2217|  2.05k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.05k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2218|  2.05k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2219|  2.05k|                _PyFrame_StackPointerValidate(frame);
  |  | 2220|  2.05k|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (2220:17): [True: 2.05k, False: 0]
  |  |  |  Branch (2220:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2221|  2.05k|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|  2.05k|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 2222|  2.05k|                frame = tstate->current_frame = temp;
  |  | 2223|  2.05k|                tstate->py_recursion_remaining--;
  |  | 2224|  2.05k|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 2225|  2.05k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2226|  2.05k|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|  2.05k|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  2.05k|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  2.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2227|       |                #ifdef Py_DEBUG
  |  | 2228|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 2229|       |                #endif
  |  | 2230|  2.05k|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|  2.05k|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 2231|  2.05k|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  2.05k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 2232|  2.05k|            }
  |  | 2233|  2.05k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.05k|    { \
  |  |  |  |  201|  2.05k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.05k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.05k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.05k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.05k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.05k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.05k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.05k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.05k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.05k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.05k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.05k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.05k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.05k|    }
  |  |  ------------------
  |  | 2234|  2.05k|        }
  |  | 2235|       |
  |  | 2236|      4|        TARGET(CALL_BOUND_METHOD_GENERAL) {
  |  |  ------------------
  |  |  |  |  132|      4|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2237|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2238|       |            int opcode = CALL_BOUND_METHOD_GENERAL;
  |  | 2239|       |            (void)(opcode);
  |  | 2240|       |            #endif
  |  | 2241|      4|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2242|      4|            (void)this_instr;
  |  | 2243|      4|            frame->instr_ptr = next_instr;
  |  | 2244|      4|            next_instr += 4;
  |  | 2245|      4|            INSTRUCTION_STATS(CALL_BOUND_METHOD_GENERAL);
  |  |  ------------------
  |  |  |  |   71|      4|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2246|      4|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 2247|      4|            _PyStackRef callable;
  |  | 2248|      4|            _PyStackRef null;
  |  | 2249|      4|            _PyStackRef self_or_null;
  |  | 2250|      4|            _PyStackRef *args;
  |  | 2251|      4|            _PyStackRef new_frame;
  |  | 2252|       |            /* Skip 1 cache entry */
  |  | 2253|       |            // _CHECK_PEP_523
  |  | 2254|      4|            {
  |  | 2255|      4|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|      4|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2256|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2257|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2257:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2258|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2259|      0|                }
  |  | 2260|      4|            }
  |  | 2261|       |            // _CHECK_METHOD_VERSION
  |  | 2262|      4|            {
  |  | 2263|      4|                null = stack_pointer[-1 - oparg];
  |  | 2264|      4|                callable = stack_pointer[-2 - oparg];
  |  | 2265|      4|                uint32_t func_version = read_u32(&this_instr[2].cache);
  |  | 2266|      4|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2267|      4|                if (Py_TYPE(callable_o) != &PyMethod_Type) {
  |  |  ------------------
  |  |  |  |  213|      4|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2267:21): [True: 0, False: 4]
  |  |  ------------------
  |  | 2268|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2269|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2269:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2270|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2271|      0|                }
  |  | 2272|      4|                PyObject *func = ((PyMethodObject *)callable_o)->im_func;
  |  | 2273|      4|                if (!PyFunction_Check(func)) {
  |  |  ------------------
  |  |  |  |   68|      4|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      4|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2273:21): [True: 0, False: 4]
  |  |  ------------------
  |  | 2274|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2275|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2275:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2276|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2277|      0|                }
  |  | 2278|      4|                if (((PyFunctionObject *)func)->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (2278:21): [True: 0, False: 4]
  |  |  ------------------
  |  | 2279|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2280|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2280:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2281|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2282|      0|                }
  |  | 2283|      4|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|      4|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      4|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      4|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2283:21): [True: 0, False: 4]
  |  |  ------------------
  |  | 2284|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2285|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2285:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2286|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2287|      0|                }
  |  | 2288|      4|            }
  |  | 2289|       |            // _EXPAND_METHOD
  |  | 2290|      4|            {
  |  | 2291|      4|                self_or_null = null;
  |  | 2292|      4|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2293|      4|                assert(PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  Branch (2293:17): [True: 4, False: 0]
  |  |  ------------------
  |  | 2294|      4|                assert(Py_TYPE(callable_o) == &PyMethod_Type);
  |  |  ------------------
  |  |  |  Branch (2294:17): [True: 4, False: 0]
  |  |  ------------------
  |  | 2295|      4|                self_or_null = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
  |  |  ------------------
  |  |  |  |  611|      4|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2296|      4|                _PyStackRef temp = callable;
  |  | 2297|      4|                callable = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
  |  |  ------------------
  |  |  |  |  611|      4|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2298|      4|                assert(PyStackRef_FunctionCheck(callable));
  |  |  ------------------
  |  |  |  Branch (2298:17): [True: 4, False: 0]
  |  |  ------------------
  |  | 2299|      4|                stack_pointer[-2 - oparg] = callable;
  |  | 2300|      4|                stack_pointer[-1 - oparg] = self_or_null;
  |  | 2301|      4|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2302|      4|                _PyFrame_StackPointerValidate(frame);
  |  | 2303|      4|                PyStackRef_CLOSE(temp);
  |  | 2304|      4|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2305|      4|            }
  |  | 2306|       |            // flush
  |  | 2307|       |            // _CHECK_RECURSION_REMAINING
  |  | 2308|      0|            {
  |  | 2309|      4|                if (tstate->py_recursion_remaining <= 1) {
  |  |  ------------------
  |  |  |  Branch (2309:21): [True: 0, False: 4]
  |  |  ------------------
  |  | 2310|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2311|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2311:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2312|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2313|      0|                }
  |  | 2314|      4|            }
  |  | 2315|       |            // _PY_FRAME_GENERAL
  |  | 2316|      4|            {
  |  | 2317|      4|                args = &stack_pointer[-oparg];
  |  | 2318|      4|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2319|      4|                int total_args = oparg;
  |  | 2320|      4|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      4|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      4|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      4|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2320:21): [True: 4, False: 0]
  |  |  ------------------
  |  | 2321|      4|                    args--;
  |  | 2322|      4|                    total_args++;
  |  | 2323|      4|                }
  |  | 2324|      4|                assert(Py_TYPE(callable_o) == &PyFunction_Type);
  |  |  ------------------
  |  |  |  Branch (2324:17): [True: 4, False: 0]
  |  |  ------------------
  |  | 2325|      4|                int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|      4|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2326|      4|                PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|      4|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                               PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2326:36): [True: 4, False: 0]
  |  |  ------------------
  |  | 2327|      4|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2327:17): [True: 4, False: 0]
  |  |  ------------------
  |  | 2328|      4|                _PyFrame_StackPointerValidate(frame);
  |  | 2329|      4|                _PyInterpreterFrame *temp = _PyEvalFramePushAndInit(
  |  | 2330|      4|                    tstate, callable, locals,
  |  | 2331|      4|                    args, total_args, NULL, frame
  |  | 2332|      4|                );
  |  | 2333|      4|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2334|      4|                stack_pointer += -2 - oparg;
  |  | 2335|      4|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      4|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2336|      4|                if (temp == NULL) {
  |  |  ------------------
  |  |  |  Branch (2336:21): [True: 0, False: 4]
  |  |  ------------------
  |  | 2337|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2338|      0|                }
  |  | 2339|      4|                new_frame = PyStackRef_Wrap(temp);
  |  | 2340|      4|            }
  |  | 2341|       |            // _SAVE_RETURN_OFFSET
  |  | 2342|      0|            {
  |  | 2343|      4|                #if TIER_ONE
  |  | 2344|      4|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 2345|      4|                #endif
  |  | 2346|       |                #if TIER_TWO
  |  | 2347|       |                frame->return_offset = oparg;
  |  | 2348|       |                #endif
  |  | 2349|      4|            }
  |  | 2350|       |            // _PUSH_FRAME
  |  | 2351|      4|            {
  |  | 2352|      4|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (2352:17): [True: 4, False: 0]
  |  |  ------------------
  |  | 2353|      4|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 2354|      4|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2355|      4|                _PyFrame_StackPointerValidate(frame);
  |  | 2356|      4|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (2356:17): [True: 4, False: 0]
  |  |  |  Branch (2356:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2357|      4|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|      4|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 2358|      4|                frame = tstate->current_frame = temp;
  |  | 2359|      4|                tstate->py_recursion_remaining--;
  |  | 2360|      4|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 2361|      4|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2362|      4|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|      4|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|      4|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2363|       |                #ifdef Py_DEBUG
  |  | 2364|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 2365|       |                #endif
  |  | 2366|      4|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|      4|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 2367|      4|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|      4|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 2368|      4|            }
  |  | 2369|      4|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      4|    { \
  |  |  |  |  201|      4|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      4|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      4|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      4|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      4|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      4|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      4|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      4|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      4|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      4|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      4|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      4|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      4|    }
  |  |  ------------------
  |  | 2370|      4|        }
  |  | 2371|       |
  |  | 2372|   207k|        TARGET(CALL_BUILTIN_CLASS) {
  |  |  ------------------
  |  |  |  |  132|   207k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2373|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2374|       |            int opcode = CALL_BUILTIN_CLASS;
  |  | 2375|       |            (void)(opcode);
  |  | 2376|       |            #endif
  |  | 2377|   207k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2378|   207k|            (void)this_instr;
  |  | 2379|   207k|            frame->instr_ptr = next_instr;
  |  | 2380|   207k|            next_instr += 4;
  |  | 2381|   207k|            INSTRUCTION_STATS(CALL_BUILTIN_CLASS);
  |  |  ------------------
  |  |  |  |   71|   207k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2382|   207k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 2383|   207k|            _PyStackRef callable;
  |  | 2384|   207k|            _PyStackRef self_or_null;
  |  | 2385|   207k|            _PyStackRef *args;
  |  | 2386|   207k|            _PyStackRef value;
  |  | 2387|       |            /* Skip 1 cache entry */
  |  | 2388|       |            /* Skip 2 cache entries */
  |  | 2389|       |            // _GUARD_CALLABLE_BUILTIN_CLASS
  |  | 2390|   207k|            {
  |  | 2391|   207k|                callable = stack_pointer[-2 - oparg];
  |  | 2392|   207k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2393|   207k|                if (!PyType_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |  766|   207k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   207k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   207k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2393:21): [True: 0, False: 207k]
  |  |  ------------------
  |  | 2394|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2395|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2395:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2396|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2397|      0|                }
  |  | 2398|   207k|                PyTypeObject *tp = (PyTypeObject *)callable_o;
  |  | 2399|   207k|                if (tp->tp_vectorcall == NULL) {
  |  |  ------------------
  |  |  |  Branch (2399:21): [True: 0, False: 207k]
  |  |  ------------------
  |  | 2400|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2401|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2401:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2402|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2403|      0|                }
  |  | 2404|   207k|            }
  |  | 2405|       |            // _CALL_BUILTIN_CLASS
  |  | 2406|   207k|            {
  |  | 2407|   207k|                args = &stack_pointer[-oparg];
  |  | 2408|   207k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 2409|   207k|                int total_args = oparg;
  |  | 2410|   207k|                _PyStackRef *arguments = args;
  |  | 2411|   207k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|   207k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   207k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   207k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2411:21): [True: 0, False: 207k]
  |  |  ------------------
  |  | 2412|      0|                    arguments--;
  |  | 2413|      0|                    total_args++;
  |  | 2414|      0|                }
  |  | 2415|   207k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|   207k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2416|   207k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2417|   207k|                _PyFrame_StackPointerValidate(frame);
  |  | 2418|   207k|                PyObject *res_o = _Py_CallBuiltinClass_StackRef(
  |  | 2419|   207k|                    callable,
  |  | 2420|   207k|                    arguments,
  |  | 2421|   207k|                    total_args);
  |  | 2422|   207k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2423|   207k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2423:21): [True: 181, False: 207k]
  |  |  ------------------
  |  | 2424|    181|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    181|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2425|      0|                }
  |  | 2426|   207k|                _PyStackRef temp = callable;
  |  | 2427|   207k|                callable = PyStackRef_FromPyObjectSteal(res_o);
  |  | 2428|   207k|                stack_pointer[-2 - oparg] = callable;
  |  | 2429|   207k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2429:17): [True: 207k, False: 0]
  |  |  ------------------
  |  | 2430|   207k|                _PyFrame_StackPointerValidate(frame);
  |  | 2431|   207k|                PyStackRef_CLOSE(temp);
  |  | 2432|   207k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2433|   207k|            }
  |  | 2434|       |            // _POP_TOP_OPARG
  |  | 2435|      0|            {
  |  | 2436|   207k|                args = &stack_pointer[-oparg];
  |  | 2437|   207k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2437:17): [True: 207k, False: 0]
  |  |  ------------------
  |  | 2438|   207k|                _PyFrame_StackPointerValidate(frame);
  |  | 2439|   207k|                _PyStackRef_CloseStack(args, oparg);
  |  | 2440|   207k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2441|   207k|            }
  |  | 2442|       |            // _POP_TOP
  |  | 2443|      0|            {
  |  | 2444|   207k|                value = self_or_null;
  |  | 2445|   207k|                stack_pointer += -1 - oparg;
  |  | 2446|   207k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   207k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2447|   207k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2448|   207k|                _PyFrame_StackPointerValidate(frame);
  |  | 2449|   207k|                PyStackRef_XCLOSE(value);
  |  | 2450|   207k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2451|   207k|            }
  |  | 2452|       |            // _CHECK_PERIODIC_AT_END
  |  | 2453|   207k|            {
  |  | 2454|   207k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2454:17): [True: 207k, False: 0]
  |  |  ------------------
  |  | 2455|   207k|                _PyFrame_StackPointerValidate(frame);
  |  | 2456|   207k|                int err = check_periodics_at_end(tstate, frame);
  |  | 2457|   207k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2458|   207k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (2458:21): [True: 0, False: 207k]
  |  |  ------------------
  |  | 2459|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2460|      0|                }
  |  | 2461|   207k|            }
  |  | 2462|   207k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   207k|    { \
  |  |  |  |  201|   207k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   207k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   207k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   207k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   207k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   207k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   207k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   207k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 207k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   207k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   207k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   207k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   207k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   207k|    }
  |  |  ------------------
  |  | 2463|   207k|        }
  |  | 2464|       |
  |  | 2465|   532k|        TARGET(CALL_BUILTIN_FAST) {
  |  |  ------------------
  |  |  |  |  132|   532k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2466|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2467|       |            int opcode = CALL_BUILTIN_FAST;
  |  | 2468|       |            (void)(opcode);
  |  | 2469|       |            #endif
  |  | 2470|   532k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2471|   532k|            (void)this_instr;
  |  | 2472|   532k|            frame->instr_ptr = next_instr;
  |  | 2473|   532k|            next_instr += 4;
  |  | 2474|   532k|            INSTRUCTION_STATS(CALL_BUILTIN_FAST);
  |  |  ------------------
  |  |  |  |   71|   532k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2475|   532k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 2476|   532k|            _PyStackRef callable;
  |  | 2477|   532k|            _PyStackRef self_or_null;
  |  | 2478|   532k|            _PyStackRef *args;
  |  | 2479|   532k|            _PyStackRef value;
  |  | 2480|       |            /* Skip 1 cache entry */
  |  | 2481|       |            /* Skip 2 cache entries */
  |  | 2482|       |            // _GUARD_CALLABLE_BUILTIN_FAST
  |  | 2483|   532k|            {
  |  | 2484|   532k|                callable = stack_pointer[-2 - oparg];
  |  | 2485|   532k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2486|   532k|                if (!PyCFunction_CheckExact(callable_o)) {
  |  |  ------------------
  |  |  |  |   16|   532k|#define PyCFunction_CheckExact(op) Py_IS_TYPE((op), &PyCFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   532k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   532k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   532k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2486:21): [True: 0, False: 532k]
  |  |  ------------------
  |  | 2487|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2488|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2488:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2489|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2490|      0|                }
  |  | 2491|   532k|                if (PyCFunction_GET_FLAGS(callable_o) != METH_FASTCALL) {
  |  |  ------------------
  |  |  |  |   57|   532k|#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   532k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   532k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               if (PyCFunction_GET_FLAGS(callable_o) != METH_FASTCALL) {
  |  |  ------------------
  |  |  |  |  115|   532k|#  define METH_FASTCALL  0x0080
  |  |  ------------------
  |  |  |  Branch (2491:21): [True: 14, False: 532k]
  |  |  ------------------
  |  | 2492|     14|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|     14|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2493|     14|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2493:21): [True: 14, False: 0]
  |  |  ------------------
  |  | 2494|     14|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|     14|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2495|      0|                }
  |  | 2496|   532k|            }
  |  | 2497|       |            // _CALL_BUILTIN_FAST
  |  | 2498|   532k|            {
  |  | 2499|   532k|                args = &stack_pointer[-oparg];
  |  | 2500|   532k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 2501|   532k|                int total_args = oparg;
  |  | 2502|   532k|                _PyStackRef *arguments = args;
  |  | 2503|   532k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|   532k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   532k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   532k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2503:21): [True: 0, False: 532k]
  |  |  ------------------
  |  | 2504|      0|                    arguments--;
  |  | 2505|      0|                    total_args++;
  |  | 2506|      0|                }
  |  | 2507|   532k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|   532k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2508|   532k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2509|   532k|                _PyFrame_StackPointerValidate(frame);
  |  | 2510|   532k|                PyObject *res_o = _Py_BuiltinCallFast_StackRef(
  |  | 2511|   532k|                    callable,
  |  | 2512|   532k|                    arguments,
  |  | 2513|   532k|                    total_args
  |  | 2514|   532k|                );
  |  | 2515|   532k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2516|   532k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2516:21): [True: 451, False: 532k]
  |  |  ------------------
  |  | 2517|    451|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    451|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2518|      0|                }
  |  | 2519|   532k|                _PyStackRef temp = callable;
  |  | 2520|   532k|                callable = PyStackRef_FromPyObjectSteal(res_o);
  |  | 2521|   532k|                stack_pointer[-2 - oparg] = callable;
  |  | 2522|   532k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2522:17): [True: 532k, False: 0]
  |  |  ------------------
  |  | 2523|   532k|                _PyFrame_StackPointerValidate(frame);
  |  | 2524|   532k|                PyStackRef_CLOSE(temp);
  |  | 2525|   532k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2526|   532k|            }
  |  | 2527|       |            // _POP_TOP_OPARG
  |  | 2528|      0|            {
  |  | 2529|   532k|                args = &stack_pointer[-oparg];
  |  | 2530|   532k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2530:17): [True: 532k, False: 0]
  |  |  ------------------
  |  | 2531|   532k|                _PyFrame_StackPointerValidate(frame);
  |  | 2532|   532k|                _PyStackRef_CloseStack(args, oparg);
  |  | 2533|   532k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2534|   532k|            }
  |  | 2535|       |            // _POP_TOP
  |  | 2536|      0|            {
  |  | 2537|   532k|                value = self_or_null;
  |  | 2538|   532k|                stack_pointer += -1 - oparg;
  |  | 2539|   532k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   532k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2540|   532k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2541|   532k|                _PyFrame_StackPointerValidate(frame);
  |  | 2542|   532k|                PyStackRef_XCLOSE(value);
  |  | 2543|   532k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2544|   532k|            }
  |  | 2545|       |            // _CHECK_PERIODIC_AT_END
  |  | 2546|   532k|            {
  |  | 2547|   532k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2547:17): [True: 532k, False: 0]
  |  |  ------------------
  |  | 2548|   532k|                _PyFrame_StackPointerValidate(frame);
  |  | 2549|   532k|                int err = check_periodics_at_end(tstate, frame);
  |  | 2550|   532k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2551|   532k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (2551:21): [True: 0, False: 532k]
  |  |  ------------------
  |  | 2552|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2553|      0|                }
  |  | 2554|   532k|            }
  |  | 2555|   532k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   532k|    { \
  |  |  |  |  201|   532k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   532k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   532k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   532k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   532k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   532k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   532k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   532k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 532k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   532k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   532k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   532k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   532k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   532k|    }
  |  |  ------------------
  |  | 2556|   532k|        }
  |  | 2557|       |
  |  | 2558|  21.8k|        TARGET(CALL_BUILTIN_FAST_WITH_KEYWORDS) {
  |  |  ------------------
  |  |  |  |  132|  21.8k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2559|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2560|       |            int opcode = CALL_BUILTIN_FAST_WITH_KEYWORDS;
  |  | 2561|       |            (void)(opcode);
  |  | 2562|       |            #endif
  |  | 2563|  21.8k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2564|  21.8k|            (void)this_instr;
  |  | 2565|  21.8k|            frame->instr_ptr = next_instr;
  |  | 2566|  21.8k|            next_instr += 4;
  |  | 2567|  21.8k|            INSTRUCTION_STATS(CALL_BUILTIN_FAST_WITH_KEYWORDS);
  |  |  ------------------
  |  |  |  |   71|  21.8k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2568|  21.8k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 2569|  21.8k|            _PyStackRef callable;
  |  | 2570|  21.8k|            _PyStackRef self_or_null;
  |  | 2571|  21.8k|            _PyStackRef *args;
  |  | 2572|  21.8k|            _PyStackRef value;
  |  | 2573|       |            /* Skip 1 cache entry */
  |  | 2574|       |            /* Skip 2 cache entries */
  |  | 2575|       |            // _GUARD_CALLABLE_BUILTIN_FAST_WITH_KEYWORDS
  |  | 2576|  21.8k|            {
  |  | 2577|  21.8k|                callable = stack_pointer[-2 - oparg];
  |  | 2578|  21.8k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2579|  21.8k|                if (!PyCFunction_CheckExact(callable_o)) {
  |  |  ------------------
  |  |  |  |   16|  21.8k|#define PyCFunction_CheckExact(op) Py_IS_TYPE((op), &PyCFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  21.8k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  21.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  21.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2579:21): [True: 0, False: 21.8k]
  |  |  ------------------
  |  | 2580|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2581|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2581:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2582|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2583|      0|                }
  |  | 2584|  21.8k|                if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) {
  |  |  ------------------
  |  |  |  |   57|  21.8k|#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  21.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  21.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) {
  |  |  ------------------
  |  |  |  |  115|  21.8k|#  define METH_FASTCALL  0x0080
  |  |  ------------------
  |  |                               if (PyCFunction_GET_FLAGS(callable_o) != (METH_FASTCALL | METH_KEYWORDS)) {
  |  |  ------------------
  |  |  |  |   96|  21.8k|#define METH_KEYWORDS 0x0002
  |  |  ------------------
  |  |  |  Branch (2584:21): [True: 282, False: 21.5k]
  |  |  ------------------
  |  | 2585|    282|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|    282|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2586|    282|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2586:21): [True: 282, False: 0]
  |  |  ------------------
  |  | 2587|    282|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|    282|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2588|      0|                }
  |  | 2589|  21.8k|            }
  |  | 2590|       |            // _CALL_BUILTIN_FAST_WITH_KEYWORDS
  |  | 2591|  21.5k|            {
  |  | 2592|  21.5k|                args = &stack_pointer[-oparg];
  |  | 2593|  21.5k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 2594|  21.5k|                int total_args = oparg;
  |  | 2595|  21.5k|                _PyStackRef *arguments = args;
  |  | 2596|  21.5k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  21.5k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  21.5k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  21.5k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2596:21): [True: 0, False: 21.5k]
  |  |  ------------------
  |  | 2597|      0|                    arguments--;
  |  | 2598|      0|                    total_args++;
  |  | 2599|      0|                }
  |  | 2600|  21.5k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  21.5k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2601|  21.5k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2602|  21.5k|                _PyFrame_StackPointerValidate(frame);
  |  | 2603|  21.5k|                PyObject *res_o = _Py_BuiltinCallFastWithKeywords_StackRef(callable, arguments, total_args);
  |  | 2604|  21.5k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2605|  21.5k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2605:21): [True: 28, False: 21.5k]
  |  |  ------------------
  |  | 2606|     28|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|     28|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2607|      0|                }
  |  | 2608|  21.5k|                _PyStackRef temp = callable;
  |  | 2609|  21.5k|                callable = PyStackRef_FromPyObjectSteal(res_o);
  |  | 2610|  21.5k|                stack_pointer[-2 - oparg] = callable;
  |  | 2611|  21.5k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2611:17): [True: 21.5k, False: 0]
  |  |  ------------------
  |  | 2612|  21.5k|                _PyFrame_StackPointerValidate(frame);
  |  | 2613|  21.5k|                PyStackRef_CLOSE(temp);
  |  | 2614|  21.5k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2615|  21.5k|            }
  |  | 2616|       |            // _POP_TOP_OPARG
  |  | 2617|      0|            {
  |  | 2618|  21.5k|                args = &stack_pointer[-oparg];
  |  | 2619|  21.5k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2619:17): [True: 21.5k, False: 0]
  |  |  ------------------
  |  | 2620|  21.5k|                _PyFrame_StackPointerValidate(frame);
  |  | 2621|  21.5k|                _PyStackRef_CloseStack(args, oparg);
  |  | 2622|  21.5k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2623|  21.5k|            }
  |  | 2624|       |            // _POP_TOP
  |  | 2625|      0|            {
  |  | 2626|  21.5k|                value = self_or_null;
  |  | 2627|  21.5k|                stack_pointer += -1 - oparg;
  |  | 2628|  21.5k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  21.5k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2629|  21.5k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2630|  21.5k|                _PyFrame_StackPointerValidate(frame);
  |  | 2631|  21.5k|                PyStackRef_XCLOSE(value);
  |  | 2632|  21.5k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2633|  21.5k|            }
  |  | 2634|       |            // _CHECK_PERIODIC_AT_END
  |  | 2635|  21.5k|            {
  |  | 2636|  21.5k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2636:17): [True: 21.5k, False: 0]
  |  |  ------------------
  |  | 2637|  21.5k|                _PyFrame_StackPointerValidate(frame);
  |  | 2638|  21.5k|                int err = check_periodics_at_end(tstate, frame);
  |  | 2639|  21.5k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2640|  21.5k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (2640:21): [True: 0, False: 21.5k]
  |  |  ------------------
  |  | 2641|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2642|      0|                }
  |  | 2643|  21.5k|            }
  |  | 2644|  21.5k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  21.5k|    { \
  |  |  |  |  201|  21.5k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  21.5k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  21.5k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  21.5k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  21.5k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  21.5k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  21.5k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  21.5k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 21.5k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  21.5k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  21.5k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  21.5k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  21.5k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  21.5k|    }
  |  |  ------------------
  |  | 2645|  21.5k|        }
  |  | 2646|       |
  |  | 2647|  16.7M|        TARGET(CALL_BUILTIN_O) {
  |  |  ------------------
  |  |  |  |  132|  16.7M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2648|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2649|       |            int opcode = CALL_BUILTIN_O;
  |  | 2650|       |            (void)(opcode);
  |  | 2651|       |            #endif
  |  | 2652|  16.7M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2653|  16.7M|            (void)this_instr;
  |  | 2654|  16.7M|            frame->instr_ptr = next_instr;
  |  | 2655|  16.7M|            next_instr += 4;
  |  | 2656|  16.7M|            INSTRUCTION_STATS(CALL_BUILTIN_O);
  |  |  ------------------
  |  |  |  |   71|  16.7M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2657|  16.7M|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 2658|  16.7M|            _PyStackRef callable;
  |  | 2659|  16.7M|            _PyStackRef self_or_null;
  |  | 2660|  16.7M|            _PyStackRef *args;
  |  | 2661|  16.7M|            _PyStackRef res;
  |  | 2662|  16.7M|            _PyStackRef c;
  |  | 2663|  16.7M|            _PyStackRef s;
  |  | 2664|  16.7M|            _PyStackRef value;
  |  | 2665|       |            /* Skip 1 cache entry */
  |  | 2666|       |            /* Skip 2 cache entries */
  |  | 2667|       |            // _GUARD_CALLABLE_BUILTIN_O
  |  | 2668|  16.7M|            {
  |  | 2669|  16.7M|                self_or_null = stack_pointer[-1 - oparg];
  |  | 2670|  16.7M|                callable = stack_pointer[-2 - oparg];
  |  | 2671|  16.7M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2672|  16.7M|                if (!PyCFunction_CheckExact(callable_o)) {
  |  |  ------------------
  |  |  |  |   16|  16.7M|#define PyCFunction_CheckExact(op) Py_IS_TYPE((op), &PyCFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  16.7M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  16.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  16.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2672:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2673|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2674|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2674:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2675|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2676|      0|                }
  |  | 2677|  16.7M|                if (PyCFunction_GET_FLAGS(callable_o) != METH_O) {
  |  |  ------------------
  |  |  |  |   57|  16.7M|#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  16.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  16.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               if (PyCFunction_GET_FLAGS(callable_o) != METH_O) {
  |  |  ------------------
  |  |  |  |   99|  16.7M|#define METH_O        0x0008
  |  |  ------------------
  |  |  |  Branch (2677:21): [True: 14, False: 16.7M]
  |  |  ------------------
  |  | 2678|     14|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|     14|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2679|     14|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2679:21): [True: 14, False: 0]
  |  |  ------------------
  |  | 2680|     14|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|     14|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2681|      0|                }
  |  | 2682|  16.7M|                int total_args = oparg;
  |  | 2683|  16.7M|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  16.7M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  16.7M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  16.7M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2683:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2684|      0|                    total_args++;
  |  | 2685|      0|                }
  |  | 2686|  16.7M|                if (total_args != 1) {
  |  |  ------------------
  |  |  |  Branch (2686:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2687|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2688|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2688:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2689|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2690|      0|                }
  |  | 2691|  16.7M|            }
  |  | 2692|       |            // _CHECK_RECURSION_LIMIT
  |  | 2693|  16.7M|            {
  |  | 2694|  16.7M|                if (_Py_ReachedRecursionLimit(tstate)) {
  |  |  ------------------
  |  |  |  Branch (2694:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2695|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2696|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (2696:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2697|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2698|      0|                }
  |  | 2699|  16.7M|            }
  |  | 2700|       |            // _CALL_BUILTIN_O
  |  | 2701|  16.7M|            {
  |  | 2702|  16.7M|                args = &stack_pointer[-oparg];
  |  | 2703|  16.7M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 2704|  16.7M|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  16.7M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  16.7M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  16.7M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2704:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2705|      0|                    args--;
  |  | 2706|      0|                }
  |  | 2707|  16.7M|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  16.7M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 2708|  16.7M|                PyCFunction cfunc = PyCFunction_GET_FUNCTION(callable_o);
  |  |  ------------------
  |  |  |  |   43|  16.7M|#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  16.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  16.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2709|  16.7M|                _PyStackRef arg = args[0];
  |  | 2710|  16.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2711|  16.7M|                _PyFrame_StackPointerValidate(frame);
  |  | 2712|  16.7M|                PyObject *res_o = _PyCFunction_TrampolineCall(cfunc, PyCFunction_GET_SELF(callable_o), PyStackRef_AsPyObjectBorrow(arg));
  |  |  ------------------
  |  |  |  |  996|  16.7M|    (meth)((self), (args))
  |  |  ------------------
  |  | 2713|  16.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2714|  16.7M|                _Py_LeaveRecursiveCallTstate(tstate);
  |  | 2715|  16.7M|                assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
  |  |  ------------------
  |  |  |  Branch (2715:17): [True: 16.7M, False: 0]
  |  |  ------------------
  |  | 2716|  16.7M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2716:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2717|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2718|      0|                }
  |  | 2719|  16.7M|                c = callable;
  |  | 2720|  16.7M|                s = args[0];
  |  | 2721|  16.7M|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 2722|  16.7M|            }
  |  | 2723|       |            // _POP_TOP
  |  | 2724|      0|            {
  |  | 2725|  16.7M|                value = s;
  |  | 2726|  16.7M|                stack_pointer[-2 - oparg] = res;
  |  | 2727|  16.7M|                stack_pointer[-1 - oparg] = c;
  |  | 2728|  16.7M|                stack_pointer += -oparg;
  |  | 2729|  16.7M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  16.7M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2730|  16.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2731|  16.7M|                _PyFrame_StackPointerValidate(frame);
  |  | 2732|  16.7M|                PyStackRef_XCLOSE(value);
  |  | 2733|  16.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2734|  16.7M|            }
  |  | 2735|       |            // _POP_TOP
  |  | 2736|  16.7M|            {
  |  | 2737|  16.7M|                value = c;
  |  | 2738|  16.7M|                stack_pointer += -1;
  |  | 2739|  16.7M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  16.7M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2740|  16.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2741|  16.7M|                _PyFrame_StackPointerValidate(frame);
  |  | 2742|  16.7M|                PyStackRef_XCLOSE(value);
  |  | 2743|  16.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2744|  16.7M|            }
  |  | 2745|       |            // _CHECK_PERIODIC_AT_END
  |  | 2746|  16.7M|            {
  |  | 2747|  16.7M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2747:17): [True: 16.7M, False: 0]
  |  |  ------------------
  |  | 2748|  16.7M|                _PyFrame_StackPointerValidate(frame);
  |  | 2749|  16.7M|                int err = check_periodics_at_end(tstate, frame);
  |  | 2750|  16.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2751|  16.7M|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (2751:21): [True: 0, False: 16.7M]
  |  |  ------------------
  |  | 2752|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2753|      0|                }
  |  | 2754|  16.7M|            }
  |  | 2755|  16.7M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  16.7M|    { \
  |  |  |  |  201|  16.7M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  16.7M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  16.7M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  16.7M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  16.7M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  16.7M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  16.7M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  16.7M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 16.7M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  16.7M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  16.7M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  16.7M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  16.7M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  16.7M|    }
  |  |  ------------------
  |  | 2756|  16.7M|        }
  |  | 2757|       |
  |  | 2758|    664|        TARGET(CALL_EX_NON_PY_GENERAL) {
  |  |  ------------------
  |  |  |  |  132|    664|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2759|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2760|       |            int opcode = CALL_EX_NON_PY_GENERAL;
  |  | 2761|       |            (void)(opcode);
  |  | 2762|       |            #endif
  |  | 2763|    664|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2764|    664|            (void)this_instr;
  |  | 2765|    664|            frame->instr_ptr = next_instr;
  |  | 2766|    664|            next_instr += 2;
  |  | 2767|    664|            INSTRUCTION_STATS(CALL_EX_NON_PY_GENERAL);
  |  |  ------------------
  |  |  |  |   71|    664|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2768|    664|            static_assert(INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX == 1, "incorrect cache size");
  |  | 2769|    664|            _PyStackRef func_st;
  |  | 2770|    664|            _PyStackRef func;
  |  | 2771|    664|            _PyStackRef callargs;
  |  | 2772|    664|            _PyStackRef null;
  |  | 2773|    664|            _PyStackRef callargs_st;
  |  | 2774|    664|            _PyStackRef kwargs_st;
  |  | 2775|    664|            _PyStackRef result;
  |  | 2776|       |            /* Skip 1 cache entry */
  |  | 2777|       |            // _CHECK_IS_NOT_PY_CALLABLE_EX
  |  | 2778|    664|            {
  |  | 2779|    664|                func_st = stack_pointer[-4];
  |  | 2780|    664|                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
  |  | 2781|    664|                if (Py_TYPE(func) == &PyFunction_Type && ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
  |  |  ------------------
  |  |  |  |  213|    664|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    664|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    664|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2781:21): [True: 0, False: 664]
  |  |  |  Branch (2781:58): [True: 0, False: 0]
  |  |  ------------------
  |  | 2782|      0|                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2783|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
  |  |  ------------------
  |  |  |  Branch (2783:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2784|      0|                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2785|      0|                }
  |  | 2786|    664|            }
  |  | 2787|       |            // _MAKE_CALLARGS_A_TUPLE
  |  | 2788|    664|            {
  |  | 2789|    664|                callargs = stack_pointer[-2];
  |  | 2790|    664|                func = func_st;
  |  | 2791|    664|                PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
  |  | 2792|    664|                if (!PyTuple_CheckExact(callargs_o)) {
  |  |  ------------------
  |  |  |  |   28|    664|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    664|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    664|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    664|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2792:21): [True: 32, False: 632]
  |  |  ------------------
  |  | 2793|     32|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2794|     32|                    _PyFrame_StackPointerValidate(frame);
  |  | 2795|     32|                    int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o);
  |  | 2796|     32|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2797|     32|                    if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (2797:25): [True: 0, False: 32]
  |  |  ------------------
  |  | 2798|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2799|      0|                    }
  |  | 2800|     32|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2800:21): [True: 32, False: 0]
  |  |  ------------------
  |  | 2801|     32|                    _PyFrame_StackPointerValidate(frame);
  |  | 2802|     32|                    PyObject *tuple_o = PySequence_Tuple(callargs_o);
  |  | 2803|     32|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2804|     32|                    if (tuple_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2804:25): [True: 0, False: 32]
  |  |  ------------------
  |  | 2805|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2806|      0|                    }
  |  | 2807|     32|                    _PyStackRef temp = callargs;
  |  | 2808|     32|                    callargs = PyStackRef_FromPyObjectSteal(tuple_o);
  |  | 2809|     32|                    stack_pointer[-2] = callargs;
  |  | 2810|     32|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2810:21): [True: 32, False: 0]
  |  |  ------------------
  |  | 2811|     32|                    _PyFrame_StackPointerValidate(frame);
  |  | 2812|     32|                    PyStackRef_CLOSE(temp);
  |  | 2813|     32|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2814|     32|                }
  |  | 2815|    664|            }
  |  | 2816|       |            // _CALL_FUNCTION_EX_NON_PY_GENERAL
  |  | 2817|    664|            {
  |  | 2818|    664|                kwargs_st = stack_pointer[-1];
  |  | 2819|    664|                callargs_st = callargs;
  |  | 2820|    664|                null = stack_pointer[-3];
  |  | 2821|    664|                func_st = func;
  |  | 2822|    664|                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
  |  | 2823|    664|                PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
  |  | 2824|    664|                (void)null;
  |  | 2825|    664|                assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (2825:17): [True: 664, False: 0]
  |  |  ------------------
  |  | 2826|    664|                PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
  |  | 2827|    664|                assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (2827:17): [True: 62, False: 602]
  |  |  |  Branch (2827:17): [True: 602, False: 0]
  |  |  ------------------
  |  | 2828|    664|                stack_pointer[-2] = callargs_st;
  |  | 2829|    664|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2830|    664|                _PyFrame_StackPointerValidate(frame);
  |  | 2831|    664|                PyObject *result_o = PyObject_Call(func, callargs, kwargs);
  |  | 2832|    664|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2833|    664|                stack_pointer += -1;
  |  | 2834|    664|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    664|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2835|    664|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2836|    664|                _PyFrame_StackPointerValidate(frame);
  |  | 2837|    664|                PyStackRef_XCLOSE(kwargs_st);
  |  | 2838|    664|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2839|    664|                stack_pointer += -1;
  |  | 2840|    664|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    664|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2841|    664|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2842|    664|                _PyFrame_StackPointerValidate(frame);
  |  | 2843|    664|                PyStackRef_CLOSE(callargs_st);
  |  | 2844|    664|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2845|    664|                stack_pointer += -2;
  |  | 2846|    664|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    664|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2847|    664|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2848|    664|                _PyFrame_StackPointerValidate(frame);
  |  | 2849|    664|                PyStackRef_CLOSE(func_st);
  |  | 2850|    664|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2851|    664|                if (result_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2851:21): [True: 0, False: 664]
  |  |  ------------------
  |  | 2852|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2853|      0|                }
  |  | 2854|    664|                result = PyStackRef_FromPyObjectSteal(result_o);
  |  | 2855|    664|            }
  |  | 2856|       |            // _CHECK_PERIODIC_AT_END
  |  | 2857|      0|            {
  |  | 2858|    664|                stack_pointer[0] = result;
  |  | 2859|    664|                stack_pointer += 1;
  |  | 2860|    664|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    664|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2861|    664|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2862|    664|                _PyFrame_StackPointerValidate(frame);
  |  | 2863|    664|                int err = check_periodics_at_end(tstate, frame);
  |  | 2864|    664|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2865|    664|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (2865:21): [True: 0, False: 664]
  |  |  ------------------
  |  | 2866|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2867|      0|                }
  |  | 2868|    664|            }
  |  | 2869|    664|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    664|    { \
  |  |  |  |  201|    664|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    664|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    664|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    664|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    664|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    664|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    664|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    664|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 664]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    664|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    664|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    664|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    664|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    664|    }
  |  |  ------------------
  |  | 2870|    664|        }
  |  | 2871|       |
  |  | 2872|    101|        TARGET(CALL_EX_PY) {
  |  |  ------------------
  |  |  |  |  132|    101|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 2873|       |            #if _Py_TAIL_CALL_INTERP
  |  | 2874|       |            int opcode = CALL_EX_PY;
  |  | 2875|       |            (void)(opcode);
  |  | 2876|       |            #endif
  |  | 2877|    101|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 2878|    101|            (void)this_instr;
  |  | 2879|    101|            frame->instr_ptr = next_instr;
  |  | 2880|    101|            next_instr += 2;
  |  | 2881|    101|            INSTRUCTION_STATS(CALL_EX_PY);
  |  |  ------------------
  |  |  |  |   71|    101|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 2882|    101|            static_assert(INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX == 1, "incorrect cache size");
  |  | 2883|    101|            _PyStackRef func;
  |  | 2884|    101|            _PyStackRef callargs;
  |  | 2885|    101|            _PyStackRef func_st;
  |  | 2886|    101|            _PyStackRef callargs_st;
  |  | 2887|    101|            _PyStackRef kwargs_st;
  |  | 2888|    101|            _PyStackRef ex_frame;
  |  | 2889|    101|            _PyStackRef new_frame;
  |  | 2890|       |            /* Skip 1 cache entry */
  |  | 2891|       |            // _CHECK_PEP_523
  |  | 2892|    101|            {
  |  | 2893|    101|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|    101|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 101]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2894|      0|                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2895|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
  |  |  ------------------
  |  |  |  Branch (2895:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2896|      0|                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2897|      0|                }
  |  | 2898|    101|            }
  |  | 2899|       |            // _MAKE_CALLARGS_A_TUPLE
  |  | 2900|    101|            {
  |  | 2901|    101|                callargs = stack_pointer[-2];
  |  | 2902|    101|                func = stack_pointer[-4];
  |  | 2903|    101|                PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
  |  | 2904|    101|                if (!PyTuple_CheckExact(callargs_o)) {
  |  |  ------------------
  |  |  |  |   28|    101|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    101|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    101|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    101|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2904:21): [True: 0, False: 101]
  |  |  ------------------
  |  | 2905|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2906|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 2907|      0|                    int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o);
  |  | 2908|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2909|      0|                    if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (2909:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 2910|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2911|      0|                    }
  |  | 2912|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2912:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2913|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 2914|      0|                    PyObject *tuple_o = PySequence_Tuple(callargs_o);
  |  | 2915|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2916|      0|                    if (tuple_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (2916:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 2917|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2918|      0|                    }
  |  | 2919|      0|                    _PyStackRef temp = callargs;
  |  | 2920|      0|                    callargs = PyStackRef_FromPyObjectSteal(tuple_o);
  |  | 2921|      0|                    stack_pointer[-2] = callargs;
  |  | 2922|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (2922:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2923|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 2924|      0|                    PyStackRef_CLOSE(temp);
  |  | 2925|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 2926|      0|                }
  |  | 2927|    101|            }
  |  | 2928|       |            // _CHECK_IS_PY_CALLABLE_EX
  |  | 2929|    101|            {
  |  | 2930|    101|                func_st = func;
  |  | 2931|    101|                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
  |  | 2932|    101|                if (Py_TYPE(func) != &PyFunction_Type) {
  |  |  ------------------
  |  |  |  |  213|    101|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    101|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    101|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2932:21): [True: 0, False: 101]
  |  |  ------------------
  |  | 2933|      0|                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2934|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
  |  |  ------------------
  |  |  |  Branch (2934:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2935|      0|                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2936|      0|                }
  |  | 2937|    101|                if (((PyFunctionObject *)func)->vectorcall != _PyFunction_Vectorcall) {
  |  |  ------------------
  |  |  |  Branch (2937:21): [True: 0, False: 101]
  |  |  ------------------
  |  | 2938|      0|                    UPDATE_MISS_STATS(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 2939|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_FUNCTION_EX));
  |  |  ------------------
  |  |  |  Branch (2939:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 2940|      0|                    JUMP_TO_PREDICTED(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 2941|      0|                }
  |  | 2942|    101|            }
  |  | 2943|       |            // _PY_FRAME_EX
  |  | 2944|    101|            {
  |  | 2945|    101|                kwargs_st = stack_pointer[-1];
  |  | 2946|    101|                callargs_st = callargs;
  |  | 2947|    101|                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
  |  | 2948|    101|                PyObject *callargs = PyStackRef_AsPyObjectSteal(callargs_st);
  |  | 2949|    101|                assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (2949:17): [True: 101, False: 0]
  |  |  ------------------
  |  | 2950|    101|                assert(Py_TYPE(func) == &PyFunction_Type);
  |  |  ------------------
  |  |  |  Branch (2950:17): [True: 101, False: 0]
  |  |  ------------------
  |  | 2951|    101|                assert(((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall);
  |  |  ------------------
  |  |  |  Branch (2951:17): [True: 101, False: 0]
  |  |  ------------------
  |  | 2952|    101|                PyObject *kwargs = PyStackRef_IsNull(kwargs_st) ? NULL : PyStackRef_AsPyObjectSteal(kwargs_st);
  |  |  ------------------
  |  |  |  |  482|    101|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    101|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    101|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 10, False: 91]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2953|    101|                assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (2953:17): [True: 10, False: 91]
  |  |  |  Branch (2953:17): [True: 91, False: 0]
  |  |  ------------------
  |  | 2954|    101|                Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
  |  |  ------------------
  |  |  |  |   27|    101|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    101|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    101|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2955|    101|                int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
  |  |  ------------------
  |  |  |  |   93|    101|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    101|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    101|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2956|    101|                PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
  |  |  ------------------
  |  |  |  |  122|    101|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                               PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (2956:36): [True: 101, False: 0]
  |  |  ------------------
  |  | 2957|    101|                stack_pointer += -3;
  |  | 2958|    101|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    101|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2959|    101|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2960|    101|                _PyFrame_StackPointerValidate(frame);
  |  | 2961|    101|                _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
  |  | 2962|    101|                    tstate, func_st, locals,
  |  | 2963|    101|                    nargs, callargs, kwargs, frame);
  |  | 2964|    101|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2965|    101|                stack_pointer += -1;
  |  | 2966|    101|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    101|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 2967|    101|                if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (2967:21): [True: 0, False: 101]
  |  |  ------------------
  |  | 2968|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 2969|      0|                }
  |  | 2970|    101|                ex_frame = PyStackRef_Wrap(new_frame);
  |  | 2971|    101|            }
  |  | 2972|       |            // _SAVE_RETURN_OFFSET
  |  | 2973|      0|            {
  |  | 2974|    101|                #if TIER_ONE
  |  | 2975|    101|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 2976|    101|                #endif
  |  | 2977|       |                #if TIER_TWO
  |  | 2978|       |                frame->return_offset = oparg;
  |  | 2979|       |                #endif
  |  | 2980|    101|            }
  |  | 2981|       |            // _PUSH_FRAME
  |  | 2982|    101|            {
  |  | 2983|    101|                new_frame = ex_frame;
  |  | 2984|    101|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (2984:17): [True: 101, False: 0]
  |  |  ------------------
  |  | 2985|    101|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 2986|    101|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 2987|    101|                _PyFrame_StackPointerValidate(frame);
  |  | 2988|    101|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (2988:17): [True: 101, False: 0]
  |  |  |  Branch (2988:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2989|    101|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|    101|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 2990|    101|                frame = tstate->current_frame = temp;
  |  | 2991|    101|                tstate->py_recursion_remaining--;
  |  | 2992|    101|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 2993|    101|                _PyFrame_StackPointerInvalidate(frame);
  |  | 2994|    101|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|    101|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|    101|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|    101|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 101]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 2995|       |                #ifdef Py_DEBUG
  |  | 2996|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 2997|       |                #endif
  |  | 2998|    101|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|    101|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 2999|    101|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|    101|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 3000|    101|            }
  |  | 3001|    101|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    101|    { \
  |  |  |  |  201|    101|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    101|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    101|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    101|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    101|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    101|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    101|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    101|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 101]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    101|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    101|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    101|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    101|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    101|    }
  |  |  ------------------
  |  | 3002|    101|        }
  |  | 3003|       |
  |  | 3004|     51|        TARGET(CALL_FUNCTION_EX) {
  |  |  ------------------
  |  |  |  |  132|     51|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3005|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3006|       |            int opcode = CALL_FUNCTION_EX;
  |  | 3007|       |            (void)(opcode);
  |  | 3008|       |            #endif
  |  | 3009|     51|            frame->instr_ptr = next_instr;
  |  | 3010|     51|            next_instr += 2;
  |  | 3011|     51|            INSTRUCTION_STATS(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |   71|     51|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3012|     51|            PREDICTED_CALL_FUNCTION_EX:;
  |  | 3013|     51|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  | 3014|     51|            (void)this_instr;
  |  | 3015|     51|            opcode = CALL_FUNCTION_EX;
  |  |  ------------------
  |  |  |  |   17|     51|#define CALL_FUNCTION_EX                         4
  |  |  ------------------
  |  | 3016|     51|            _PyStackRef func;
  |  | 3017|     51|            _PyStackRef callargs;
  |  | 3018|     51|            _PyStackRef func_st;
  |  | 3019|     51|            _PyStackRef null;
  |  | 3020|     51|            _PyStackRef callargs_st;
  |  | 3021|     51|            _PyStackRef kwargs_st;
  |  | 3022|     51|            _PyStackRef result;
  |  | 3023|       |            // _SPECIALIZE_CALL_FUNCTION_EX
  |  | 3024|     51|            {
  |  | 3025|     51|                func = stack_pointer[-4];
  |  | 3026|     51|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 3027|     51|                (void)counter;
  |  | 3028|     51|                #if ENABLE_SPECIALIZATION
  |  | 3029|     51|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|     51|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 19, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3030|     19|                    next_instr = this_instr;
  |  | 3031|     19|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3032|     19|                    _PyFrame_StackPointerValidate(frame);
  |  | 3033|     19|                    _Py_Specialize_CallFunctionEx(func, next_instr);
  |  | 3034|     19|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3035|     19|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|     19|    { \
  |  |  |  |  217|     19|        opcode = next_instr->op.code; \
  |  |  |  |  218|     19|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     19|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|     19|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|     19|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|     19|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|     19|    }
  |  |  ------------------
  |  | 3036|     19|                }
  |  | 3037|     51|                OPCODE_DEFERRED_INC(CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |   90|     51|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 3038|     51|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|     51|    do { \
  |  |  |  |  378|     51|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|     51|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 51]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3039|     51|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 3040|     51|            }
  |  | 3041|       |            // _MAKE_CALLARGS_A_TUPLE
  |  | 3042|     51|            {
  |  | 3043|     51|                callargs = stack_pointer[-2];
  |  | 3044|     51|                PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
  |  | 3045|     51|                if (!PyTuple_CheckExact(callargs_o)) {
  |  |  ------------------
  |  |  |  |   28|     51|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|     51|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3045:21): [True: 5, False: 46]
  |  |  ------------------
  |  | 3046|      5|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3047|      5|                    _PyFrame_StackPointerValidate(frame);
  |  | 3048|      5|                    int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o);
  |  | 3049|      5|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3050|      5|                    if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (3050:25): [True: 0, False: 5]
  |  |  ------------------
  |  | 3051|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3052|      0|                    }
  |  | 3053|      5|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3053:21): [True: 5, False: 0]
  |  |  ------------------
  |  | 3054|      5|                    _PyFrame_StackPointerValidate(frame);
  |  | 3055|      5|                    PyObject *tuple_o = PySequence_Tuple(callargs_o);
  |  | 3056|      5|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3057|      5|                    if (tuple_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3057:25): [True: 0, False: 5]
  |  |  ------------------
  |  | 3058|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3059|      0|                    }
  |  | 3060|      5|                    _PyStackRef temp = callargs;
  |  | 3061|      5|                    callargs = PyStackRef_FromPyObjectSteal(tuple_o);
  |  | 3062|      5|                    stack_pointer[-2] = callargs;
  |  | 3063|      5|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3063:21): [True: 5, False: 0]
  |  |  ------------------
  |  | 3064|      5|                    _PyFrame_StackPointerValidate(frame);
  |  | 3065|      5|                    PyStackRef_CLOSE(temp);
  |  | 3066|      5|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3067|      5|                }
  |  | 3068|     51|            }
  |  | 3069|       |            // _DO_CALL_FUNCTION_EX
  |  | 3070|     51|            {
  |  | 3071|     51|                kwargs_st = stack_pointer[-1];
  |  | 3072|     51|                callargs_st = callargs;
  |  | 3073|     51|                null = stack_pointer[-3];
  |  | 3074|     51|                func_st = func;
  |  | 3075|     51|                (void)null;
  |  | 3076|     51|                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
  |  | 3077|     51|                EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_FUNCTION_EX, func);
  |  |  ------------------
  |  |  |  |   80|     51|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  |  |  ------------------
  |  | 3078|     51|                PyObject *result_o;
  |  | 3079|     51|                assert(!_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (3079:17): [True: 32, False: 19]
  |  |  ------------------
  |  | 3080|     32|                if (opcode == INSTRUMENTED_CALL_FUNCTION_EX) {
  |  |  ------------------
  |  |  |  |  239|     32|#define INSTRUMENTED_CALL_FUNCTION_EX          251
  |  |  ------------------
  |  |  |  Branch (3080:21): [True: 0, False: 32]
  |  |  ------------------
  |  | 3081|      0|                    PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
  |  | 3082|      0|                    PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
  |  | 3083|      0|                    assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (3083:21): [True: 0, False: 0]
  |  |  |  Branch (3083:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3084|      0|                    assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (3084:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3085|      0|                    PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ?
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3085:37): [True: 0, False: 0]
  |  |  ------------------
  |  | 3086|      0|                    PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING;
  |  |  ------------------
  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3086:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3087|      0|                    stack_pointer[-2] = callargs_st;
  |  | 3088|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3089|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 3090|      0|                    int err = _Py_call_instrumentation_2args(
  |  | 3091|      0|                        tstate, PY_MONITORING_EVENT_CALL,
  |  |  ------------------
  |  |  |  |   18|      0|#define PY_MONITORING_EVENT_CALL 4
  |  |  ------------------
  |  | 3092|      0|                        frame, this_instr, func, arg);
  |  | 3093|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3094|      0|                    if (err) {
  |  |  ------------------
  |  |  |  Branch (3094:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 3095|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3096|      0|                    }
  |  | 3097|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3097:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 3099|      0|                    result_o = PyObject_Call(func, callargs, kwargs);
  |  | 3100|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3101|      0|                    if (!PyFunction_Check(func) && !PyMethod_Check(func)) {
  |  |  ------------------
  |  |  |  |   68|      0|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                   if (!PyFunction_Check(func) && !PyMethod_Check(func)) {
  |  |  ------------------
  |  |  |  |   22|      0|#define PyMethod_Check(op) Py_IS_TYPE((op), &PyMethod_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3101:25): [True: 0, False: 0]
  |  |  |  Branch (3101:52): [True: 0, False: 0]
  |  |  ------------------
  |  | 3102|      0|                        if (result_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3102:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 3103|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3103:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 3104|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 3105|      0|                            _Py_call_instrumentation_exc2(
  |  | 3106|      0|                                tstate, PY_MONITORING_EVENT_C_RAISE,
  |  |  ------------------
  |  |  |  |   45|      0|#define PY_MONITORING_EVENT_C_RAISE 17
  |  |  ------------------
  |  | 3107|      0|                                frame, this_instr, func, arg);
  |  | 3108|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 3109|      0|                        }
  |  | 3110|      0|                        else {
  |  | 3111|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3111:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 3112|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 3113|      0|                            int err = _Py_call_instrumentation_2args(
  |  | 3114|      0|                                tstate, PY_MONITORING_EVENT_C_RETURN,
  |  |  ------------------
  |  |  |  |   44|      0|#define PY_MONITORING_EVENT_C_RETURN 16
  |  |  ------------------
  |  | 3115|      0|                                frame, this_instr, func, arg);
  |  | 3116|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 3117|      0|                            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (3117:33): [True: 0, False: 0]
  |  |  ------------------
  |  | 3118|      0|                                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3118:33): [True: 0, False: 0]
  |  |  ------------------
  |  | 3119|      0|                                _PyFrame_StackPointerValidate(frame);
  |  | 3120|      0|                                Py_CLEAR(result_o);
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3121|      0|                                _PyFrame_StackPointerInvalidate(frame);
  |  | 3122|      0|                            }
  |  | 3123|      0|                        }
  |  | 3124|      0|                    }
  |  | 3125|      0|                }
  |  | 3126|     32|                else {
  |  | 3127|     32|                    if (Py_TYPE(func) == &PyFunction_Type &&
  |  |  ------------------
  |  |  |  |  213|     32|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3127:25): [True: 17, False: 15]
  |  |  ------------------
  |  | 3128|     17|                        !IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|     49|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (3128:25): [True: 17, False: 0]
  |  |  ------------------
  |  | 3129|     17|                        ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
  |  |  ------------------
  |  |  |  Branch (3129:25): [True: 17, False: 0]
  |  |  ------------------
  |  | 3130|     17|                        PyObject *callargs = PyStackRef_AsPyObjectSteal(callargs_st);
  |  | 3131|     17|                        assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (3131:25): [True: 17, False: 0]
  |  |  ------------------
  |  | 3132|     17|                        PyObject *kwargs = PyStackRef_IsNull(kwargs_st) ? NULL : PyStackRef_AsPyObjectSteal(kwargs_st);
  |  |  ------------------
  |  |  |  |  482|     17|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|     17|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|     17|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 13, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3133|     17|                        assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (3133:25): [True: 13, False: 4]
  |  |  |  Branch (3133:25): [True: 4, False: 0]
  |  |  ------------------
  |  | 3134|     17|                        Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
  |  |  ------------------
  |  |  |  |   27|     17|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3135|     17|                        int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
  |  |  ------------------
  |  |  |  |   93|     17|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3136|     17|                        PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
  |  |  ------------------
  |  |  |  |  122|     17|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                                       PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3136:44): [True: 17, False: 0]
  |  |  ------------------
  |  | 3137|     17|                        stack_pointer += -2;
  |  | 3138|     17|                        ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     17|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3139|     17|                        _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3140|     17|                        _PyFrame_StackPointerValidate(frame);
  |  | 3141|     17|                        _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
  |  | 3142|     17|                            tstate, func_st, locals,
  |  | 3143|     17|                            nargs, callargs, kwargs, frame);
  |  | 3144|     17|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 3145|     17|                        stack_pointer += -2;
  |  | 3146|     17|                        ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     17|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3147|     17|                        if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (3147:29): [True: 0, False: 17]
  |  |  ------------------
  |  | 3148|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3149|      0|                        }
  |  | 3150|     17|                        assert( 2u == 1 + INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  Branch (3150:25): [True: 17, Folded]
  |  |  ------------------
  |  | 3151|     17|                        frame->return_offset = 2u ;
  |  | 3152|     17|                        DISPATCH_INLINED(new_frame);
  |  |  ------------------
  |  |  |  |  223|     17|    do {                                                         \
  |  |  |  |  224|     17|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|     17|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|     17|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|     17|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|     17|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|     17|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|     17|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|     17|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|     17|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3152:25): [True: 17, False: 0]
  |  |  |  Branch (3152:25): [True: 17, False: 0]
  |  |  ------------------
  |  | 3153|     17|                    }
  |  | 3154|     15|                    PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
  |  | 3155|     15|                    assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (3155:21): [True: 15, False: 0]
  |  |  ------------------
  |  | 3156|     15|                    PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
  |  | 3157|     15|                    assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (3157:21): [True: 9, False: 6]
  |  |  |  Branch (3157:21): [True: 6, False: 0]
  |  |  ------------------
  |  | 3158|     15|                    stack_pointer[-2] = callargs_st;
  |  | 3159|     15|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3160|     15|                    _PyFrame_StackPointerValidate(frame);
  |  | 3161|     15|                    result_o = PyObject_Call(func, callargs, kwargs);
  |  | 3162|     15|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3163|     15|                }
  |  | 3164|     15|                stack_pointer += -1;
  |  | 3165|     15|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3166|     15|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3167|     15|                _PyFrame_StackPointerValidate(frame);
  |  | 3168|     15|                PyStackRef_XCLOSE(kwargs_st);
  |  | 3169|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3170|     15|                stack_pointer += -1;
  |  | 3171|     15|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3172|     15|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3173|     15|                _PyFrame_StackPointerValidate(frame);
  |  | 3174|     15|                PyStackRef_CLOSE(callargs_st);
  |  | 3175|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3176|     15|                stack_pointer += -2;
  |  | 3177|     15|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3178|     15|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3179|     15|                _PyFrame_StackPointerValidate(frame);
  |  | 3180|     15|                PyStackRef_CLOSE(func_st);
  |  | 3181|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3182|     15|                if (result_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3182:21): [True: 0, False: 15]
  |  |  ------------------
  |  | 3183|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3184|      0|                }
  |  | 3185|     15|                result = PyStackRef_FromPyObjectSteal(result_o);
  |  | 3186|     15|            }
  |  | 3187|       |            // _CHECK_PERIODIC_AT_END
  |  | 3188|      0|            {
  |  | 3189|     15|                stack_pointer[0] = result;
  |  | 3190|     15|                stack_pointer += 1;
  |  | 3191|     15|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3192|     15|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3193|     15|                _PyFrame_StackPointerValidate(frame);
  |  | 3194|     15|                int err = check_periodics_at_end(tstate, frame);
  |  | 3195|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3196|     15|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (3196:21): [True: 0, False: 15]
  |  |  ------------------
  |  | 3197|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3198|      0|                }
  |  | 3199|     15|            }
  |  | 3200|     15|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     15|    { \
  |  |  |  |  201|     15|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     15|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     15|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     15|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     15|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     15|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     15|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     15|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     15|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     15|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     15|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     15|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     15|    }
  |  |  ------------------
  |  | 3201|     15|        }
  |  | 3202|       |
  |  | 3203|    180|        TARGET(CALL_INTRINSIC_1) {
  |  |  ------------------
  |  |  |  |  132|    180|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3204|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3205|       |            int opcode = CALL_INTRINSIC_1;
  |  | 3206|       |            (void)(opcode);
  |  | 3207|       |            #endif
  |  | 3208|    180|            frame->instr_ptr = next_instr;
  |  | 3209|    180|            next_instr += 1;
  |  | 3210|    180|            INSTRUCTION_STATS(CALL_INTRINSIC_1);
  |  |  ------------------
  |  |  |  |   71|    180|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3211|    180|            _PyStackRef value;
  |  | 3212|    180|            _PyStackRef res;
  |  | 3213|    180|            _PyStackRef v;
  |  | 3214|       |            // _CALL_INTRINSIC_1
  |  | 3215|    180|            {
  |  | 3216|    180|                value = stack_pointer[-1];
  |  | 3217|    180|                assert(oparg <= MAX_INTRINSIC_1);
  |  |  ------------------
  |  |  |  Branch (3217:17): [True: 180, False: 0]
  |  |  ------------------
  |  | 3218|    180|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3219|    180|                _PyFrame_StackPointerValidate(frame);
  |  | 3220|    180|                PyObject *res_o = _PyIntrinsics_UnaryFunctions[oparg].func(tstate, PyStackRef_AsPyObjectBorrow(value));
  |  | 3221|    180|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3222|    180|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3222:21): [True: 0, False: 180]
  |  |  ------------------
  |  | 3223|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3224|      0|                }
  |  | 3225|    180|                v = value;
  |  | 3226|    180|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 3227|    180|            }
  |  | 3228|       |            // _POP_TOP
  |  | 3229|      0|            {
  |  | 3230|    180|                value = v;
  |  | 3231|    180|                stack_pointer[-1] = res;
  |  | 3232|    180|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3232:17): [True: 180, False: 0]
  |  |  ------------------
  |  | 3233|    180|                _PyFrame_StackPointerValidate(frame);
  |  | 3234|    180|                PyStackRef_XCLOSE(value);
  |  | 3235|    180|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3236|    180|            }
  |  | 3237|    180|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    180|    { \
  |  |  |  |  201|    180|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    180|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    180|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    180|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    180|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    180|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    180|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    180|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 180]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    180|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    180|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    180|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    180|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    180|    }
  |  |  ------------------
  |  | 3238|    180|        }
  |  | 3239|       |
  |  | 3240|      0|        TARGET(CALL_INTRINSIC_2) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3241|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3242|       |            int opcode = CALL_INTRINSIC_2;
  |  | 3243|       |            (void)(opcode);
  |  | 3244|       |            #endif
  |  | 3245|      0|            frame->instr_ptr = next_instr;
  |  | 3246|      0|            next_instr += 1;
  |  | 3247|      0|            INSTRUCTION_STATS(CALL_INTRINSIC_2);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3248|      0|            _PyStackRef value2_st;
  |  | 3249|      0|            _PyStackRef value1_st;
  |  | 3250|      0|            _PyStackRef res;
  |  | 3251|      0|            _PyStackRef vs1;
  |  | 3252|      0|            _PyStackRef vs2;
  |  | 3253|      0|            _PyStackRef value;
  |  | 3254|       |            // _CALL_INTRINSIC_2
  |  | 3255|      0|            {
  |  | 3256|      0|                value1_st = stack_pointer[-1];
  |  | 3257|      0|                value2_st = stack_pointer[-2];
  |  | 3258|      0|                assert(oparg <= MAX_INTRINSIC_2);
  |  |  ------------------
  |  |  |  Branch (3258:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3259|      0|                PyObject *value1 = PyStackRef_AsPyObjectBorrow(value1_st);
  |  | 3260|      0|                PyObject *value2 = PyStackRef_AsPyObjectBorrow(value2_st);
  |  | 3261|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3262|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3263|      0|                PyObject *res_o = _PyIntrinsics_BinaryFunctions[oparg].func(tstate, value2, value1);
  |  | 3264|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3265|      0|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3265:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3266|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3267|      0|                }
  |  | 3268|      0|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 3269|      0|                vs1 = value1_st;
  |  | 3270|      0|                vs2 = value2_st;
  |  | 3271|      0|            }
  |  | 3272|       |            // _POP_TOP
  |  | 3273|      0|            {
  |  | 3274|      0|                value = vs2;
  |  | 3275|      0|                stack_pointer[-2] = res;
  |  | 3276|      0|                stack_pointer[-1] = vs1;
  |  | 3277|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3277:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3278|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3279|      0|                PyStackRef_XCLOSE(value);
  |  | 3280|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3281|      0|            }
  |  | 3282|       |            // _POP_TOP
  |  | 3283|      0|            {
  |  | 3284|      0|                value = vs1;
  |  | 3285|      0|                stack_pointer += -1;
  |  | 3286|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3287|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3288|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3289|      0|                PyStackRef_XCLOSE(value);
  |  | 3290|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3291|      0|            }
  |  | 3292|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 3293|      0|        }
  |  | 3294|       |
  |  | 3295|   297k|        TARGET(CALL_ISINSTANCE) {
  |  |  ------------------
  |  |  |  |  132|   297k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3296|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3297|       |            int opcode = CALL_ISINSTANCE;
  |  | 3298|       |            (void)(opcode);
  |  | 3299|       |            #endif
  |  | 3300|   297k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 3301|   297k|            (void)this_instr;
  |  | 3302|   297k|            frame->instr_ptr = next_instr;
  |  | 3303|   297k|            next_instr += 4;
  |  | 3304|   297k|            INSTRUCTION_STATS(CALL_ISINSTANCE);
  |  |  ------------------
  |  |  |  |   71|   297k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3305|   297k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 3306|   297k|            _PyStackRef null;
  |  | 3307|   297k|            _PyStackRef callable;
  |  | 3308|   297k|            _PyStackRef instance;
  |  | 3309|   297k|            _PyStackRef cls;
  |  | 3310|   297k|            _PyStackRef res;
  |  | 3311|       |            /* Skip 1 cache entry */
  |  | 3312|       |            /* Skip 2 cache entries */
  |  | 3313|       |            // _GUARD_THIRD_NULL
  |  | 3314|   297k|            {
  |  | 3315|   297k|                null = stack_pointer[-3];
  |  | 3316|   297k|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|   297k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   297k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   297k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3316:21): [True: 0, False: 297k]
  |  |  ------------------
  |  | 3317|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3318|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3318:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3319|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3320|      0|                }
  |  | 3321|   297k|            }
  |  | 3322|       |            // _GUARD_CALLABLE_ISINSTANCE
  |  | 3323|   297k|            {
  |  | 3324|   297k|                callable = stack_pointer[-4];
  |  | 3325|   297k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3326|   297k|                PyInterpreterState *interp = tstate->interp;
  |  | 3327|   297k|                if (callable_o != interp->callable_cache.isinstance) {
  |  |  ------------------
  |  |  |  Branch (3327:21): [True: 0, False: 297k]
  |  |  ------------------
  |  | 3328|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3329|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3329:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3330|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3331|      0|                }
  |  | 3332|   297k|            }
  |  | 3333|       |            // _CALL_ISINSTANCE
  |  | 3334|   297k|            {
  |  | 3335|   297k|                cls = stack_pointer[-1];
  |  | 3336|   297k|                instance = stack_pointer[-2];
  |  | 3337|   297k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|   297k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 3338|   297k|                PyObject *inst_o = PyStackRef_AsPyObjectBorrow(instance);
  |  | 3339|   297k|                PyObject *cls_o = PyStackRef_AsPyObjectBorrow(cls);
  |  | 3340|   297k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3341|   297k|                _PyFrame_StackPointerValidate(frame);
  |  | 3342|   297k|                int retval = PyObject_IsInstance(inst_o, cls_o);
  |  | 3343|   297k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3344|   297k|                if (retval < 0) {
  |  |  ------------------
  |  |  |  Branch (3344:21): [True: 0, False: 297k]
  |  |  ------------------
  |  | 3345|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3346|      0|                }
  |  | 3347|   297k|                (void)null;
  |  | 3348|   297k|                stack_pointer += -1;
  |  | 3349|   297k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   297k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3350|   297k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3351|   297k|                _PyFrame_StackPointerValidate(frame);
  |  | 3352|   297k|                PyStackRef_CLOSE(cls);
  |  | 3353|   297k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3354|   297k|                stack_pointer += -1;
  |  | 3355|   297k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   297k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3356|   297k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3357|   297k|                _PyFrame_StackPointerValidate(frame);
  |  | 3358|   297k|                PyStackRef_CLOSE(instance);
  |  | 3359|   297k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3360|   297k|                stack_pointer += -2;
  |  | 3361|   297k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   297k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3362|   297k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3363|   297k|                _PyFrame_StackPointerValidate(frame);
  |  | 3364|   297k|                PyStackRef_CLOSE(callable);
  |  | 3365|   297k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3366|   297k|                res = retval ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|   277k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   277k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = retval ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|   318k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  20.3k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3366:23): [True: 277k, False: 20.3k]
  |  |  ------------------
  |  | 3367|   297k|                assert((!PyStackRef_IsNull(res)) ^ (_PyErr_Occurred(tstate) != NULL));
  |  |  ------------------
  |  |  |  Branch (3367:17): [True: 297k, False: 0]
  |  |  ------------------
  |  | 3368|   297k|            }
  |  | 3369|   297k|            stack_pointer[0] = res;
  |  | 3370|   297k|            stack_pointer += 1;
  |  | 3371|   297k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   297k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3372|   297k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   297k|    { \
  |  |  |  |  201|   297k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   297k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   297k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   297k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   297k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   297k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   297k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   297k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 297k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   297k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   297k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   297k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   297k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   297k|    }
  |  |  ------------------
  |  | 3373|   297k|        }
  |  | 3374|       |
  |  | 3375|    192|        TARGET(CALL_KW) {
  |  |  ------------------
  |  |  |  |  132|    192|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3376|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3377|       |            int opcode = CALL_KW;
  |  | 3378|       |            (void)(opcode);
  |  | 3379|       |            #endif
  |  | 3380|    192|            frame->instr_ptr = next_instr;
  |  | 3381|    192|            next_instr += 4;
  |  | 3382|    192|            INSTRUCTION_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |   71|    192|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3383|    192|            PREDICTED_CALL_KW:;
  |  | 3384|    192|            _Py_CODEUNIT* const this_instr = next_instr - 4;
  |  | 3385|    192|            (void)this_instr;
  |  | 3386|    192|            opcode = CALL_KW;
  |  |  ------------------
  |  |  |  |   66|    192|#define CALL_KW                                 53
  |  |  ------------------
  |  | 3387|    192|            _PyStackRef callable;
  |  | 3388|    192|            _PyStackRef self_or_null;
  |  | 3389|    192|            _PyStackRef *args;
  |  | 3390|    192|            _PyStackRef kwnames;
  |  | 3391|    192|            _PyStackRef res;
  |  | 3392|       |            // _SPECIALIZE_CALL_KW
  |  | 3393|    192|            {
  |  | 3394|    192|                self_or_null = stack_pointer[-2 - oparg];
  |  | 3395|    192|                callable = stack_pointer[-3 - oparg];
  |  | 3396|    192|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 3397|    192|                (void)counter;
  |  | 3398|    192|                #if ENABLE_SPECIALIZATION
  |  | 3399|    192|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|    192|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 58, False: 134]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3400|     58|                    next_instr = this_instr;
  |  | 3401|     58|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3402|     58|                    _PyFrame_StackPointerValidate(frame);
  |  | 3403|     58|                    _Py_Specialize_CallKw(callable, next_instr, oparg + !PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  |  482|     58|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|     58|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|     58|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3404|     58|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3405|     58|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|     58|    { \
  |  |  |  |  217|     58|        opcode = next_instr->op.code; \
  |  |  |  |  218|     58|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     58|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|     58|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|     58|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|     58|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|     58|    }
  |  |  ------------------
  |  | 3406|     58|                }
  |  | 3407|    192|                OPCODE_DEFERRED_INC(CALL_KW);
  |  |  ------------------
  |  |  |  |   90|    192|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 3408|    192|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|    192|    do { \
  |  |  |  |  378|    192|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|    192|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 192]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3409|    192|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 3410|    192|            }
  |  | 3411|       |            /* Skip 2 cache entries */
  |  | 3412|       |            // _MAYBE_EXPAND_METHOD_KW
  |  | 3413|    192|            {
  |  | 3414|    192|                if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3414:21): [True: 0, False: 192]
  |  |  ------------------
  |  | 3415|      0|                    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3416|      0|                    PyObject *self = ((PyMethodObject *)callable_o)->im_self;
  |  | 3417|      0|                    self_or_null = PyStackRef_FromPyObjectNew(self);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3418|      0|                    PyObject *method = ((PyMethodObject *)callable_o)->im_func;
  |  | 3419|      0|                    _PyStackRef temp = callable;
  |  | 3420|      0|                    callable = PyStackRef_FromPyObjectNew(method);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3421|      0|                    stack_pointer[-3 - oparg] = callable;
  |  | 3422|      0|                    stack_pointer[-2 - oparg] = self_or_null;
  |  | 3423|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3424|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 3425|      0|                    PyStackRef_CLOSE(temp);
  |  | 3426|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3427|      0|                }
  |  | 3428|    192|            }
  |  | 3429|       |            // _DO_CALL_KW
  |  | 3430|    192|            {
  |  | 3431|    192|                kwnames = stack_pointer[-1];
  |  | 3432|    192|                args = &stack_pointer[-1 - oparg];
  |  | 3433|    192|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3434|    192|                PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
  |  | 3435|    192|                int total_args = oparg;
  |  | 3436|    192|                _PyStackRef *arguments = args;
  |  | 3437|    192|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|    192|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    192|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    192|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3437:21): [True: 4, False: 188]
  |  |  ------------------
  |  | 3438|      4|                    arguments--;
  |  | 3439|      4|                    total_args++;
  |  | 3440|      4|                }
  |  | 3441|    192|                int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o);
  |  |  ------------------
  |  |  |  |   27|    192|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    192|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    192|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3442|    192|                if (Py_TYPE(callable_o) == &PyFunction_Type &&
  |  |  ------------------
  |  |  |  |  213|    192|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    192|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    192|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3442:21): [True: 18, False: 174]
  |  |  ------------------
  |  | 3443|     18|                    !IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|    210|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (3443:21): [True: 18, False: 0]
  |  |  ------------------
  |  | 3444|     18|                    ((PyFunctionObject *)callable_o)->vectorcall == _PyFunction_Vectorcall)
  |  |  ------------------
  |  |  |  Branch (3444:21): [True: 18, False: 0]
  |  |  ------------------
  |  | 3445|     18|                {
  |  | 3446|     18|                    int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|     18|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3447|     18|                    PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|     18|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                                   PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3447:40): [True: 18, False: 0]
  |  |  ------------------
  |  | 3448|     18|                    stack_pointer[-3 - oparg] = callable;
  |  | 3449|     18|                    stack_pointer[-2 - oparg] = self_or_null;
  |  | 3450|     18|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3451|     18|                    _PyFrame_StackPointerValidate(frame);
  |  | 3452|     18|                    _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit(
  |  | 3453|     18|                        tstate, callable, locals,
  |  | 3454|     18|                        arguments, positional_args, kwnames_o, frame
  |  | 3455|     18|                    );
  |  | 3456|     18|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3457|     18|                    stack_pointer += -3 - oparg;
  |  | 3458|     18|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     18|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3459|     18|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3460|     18|                    _PyFrame_StackPointerValidate(frame);
  |  | 3461|     18|                    PyStackRef_CLOSE(kwnames);
  |  | 3462|     18|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 3463|     18|                    if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (3463:25): [True: 0, False: 18]
  |  |  ------------------
  |  | 3464|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3465|      0|                    }
  |  | 3466|     18|                    assert( 4u == 1 + INLINE_CACHE_ENTRIES_CALL_KW);
  |  |  ------------------
  |  |  |  Branch (3466:21): [True: 18, Folded]
  |  |  ------------------
  |  | 3467|     18|                    frame->return_offset = 4u ;
  |  | 3468|     18|                    DISPATCH_INLINED(new_frame);
  |  |  ------------------
  |  |  |  |  223|     18|    do {                                                         \
  |  |  |  |  224|     18|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|     18|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|     18|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|     18|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|     18|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|     18|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|     18|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|     18|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|     18|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3468:21): [True: 18, False: 0]
  |  |  |  Branch (3468:21): [True: 18, False: 0]
  |  |  ------------------
  |  | 3469|     18|                }
  |  | 3470|    174|                stack_pointer[-3 - oparg] = callable;
  |  | 3471|    174|                stack_pointer[-2 - oparg] = self_or_null;
  |  | 3472|    174|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3473|    174|                _PyFrame_StackPointerValidate(frame);
  |  | 3474|    174|                PyObject* res_o = _Py_VectorCallInstrumentation_StackRefSteal(
  |  | 3475|    174|                    callable,
  |  | 3476|    174|                    arguments,
  |  | 3477|    174|                    total_args,
  |  | 3478|    174|                    kwnames,
  |  | 3479|    174|                    opcode == INSTRUMENTED_CALL_KW,
  |  |  ------------------
  |  |  |  |  238|    174|#define INSTRUMENTED_CALL_KW                   250
  |  |  ------------------
  |  | 3480|    174|                    frame,
  |  | 3481|    174|                    this_instr,
  |  | 3482|    174|                    tstate);
  |  | 3483|    174|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3484|    174|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3484:21): [True: 0, False: 174]
  |  |  ------------------
  |  | 3485|      0|                    stack_pointer += -3 - oparg;
  |  | 3486|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3487|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3488|      0|                }
  |  | 3489|    174|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 3490|    174|            }
  |  | 3491|      0|            stack_pointer[-3 - oparg] = res;
  |  | 3492|    174|            stack_pointer += -2 - oparg;
  |  | 3493|    174|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    174|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3494|    174|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    174|    { \
  |  |  |  |  201|    174|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    174|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    174|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    174|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    174|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    174|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    174|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    174|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 174]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    174|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    174|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    174|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    174|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    174|    }
  |  |  ------------------
  |  | 3495|    174|        }
  |  | 3496|       |
  |  | 3497|      0|        TARGET(CALL_KW_BOUND_METHOD) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3498|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3499|       |            int opcode = CALL_KW_BOUND_METHOD;
  |  | 3500|       |            (void)(opcode);
  |  | 3501|       |            #endif
  |  | 3502|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 3503|      0|            (void)this_instr;
  |  | 3504|      0|            frame->instr_ptr = next_instr;
  |  | 3505|      0|            next_instr += 4;
  |  | 3506|      0|            INSTRUCTION_STATS(CALL_KW_BOUND_METHOD);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3507|      0|            static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size");
  |  | 3508|      0|            _PyStackRef callable;
  |  | 3509|      0|            _PyStackRef null;
  |  | 3510|      0|            _PyStackRef self_or_null;
  |  | 3511|      0|            _PyStackRef *args;
  |  | 3512|      0|            _PyStackRef kwnames;
  |  | 3513|      0|            _PyStackRef new_frame;
  |  | 3514|       |            /* Skip 1 cache entry */
  |  | 3515|       |            // _CHECK_PEP_523
  |  | 3516|      0|            {
  |  | 3517|      0|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|      0|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3518|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3519|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3519:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3520|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3521|      0|                }
  |  | 3522|      0|            }
  |  | 3523|       |            // _CHECK_METHOD_VERSION_KW
  |  | 3524|      0|            {
  |  | 3525|      0|                null = stack_pointer[-2 - oparg];
  |  | 3526|      0|                callable = stack_pointer[-3 - oparg];
  |  | 3527|      0|                uint32_t func_version = read_u32(&this_instr[2].cache);
  |  | 3528|      0|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3529|      0|                if (Py_TYPE(callable_o) != &PyMethod_Type) {
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3529:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3530|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3531|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3531:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3532|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3533|      0|                }
  |  | 3534|      0|                PyObject *func = ((PyMethodObject *)callable_o)->im_func;
  |  | 3535|      0|                if (!PyFunction_Check(func)) {
  |  |  ------------------
  |  |  |  |   68|      0|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3535:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3536|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3537|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3537:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3538|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3539|      0|                }
  |  | 3540|      0|                if (((PyFunctionObject *)func)->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (3540:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3541|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3542|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3542:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3543|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3544|      0|                }
  |  | 3545|      0|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3545:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3546|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3547|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3547:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3548|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3549|      0|                }
  |  | 3550|      0|            }
  |  | 3551|       |            // _EXPAND_METHOD_KW
  |  | 3552|      0|            {
  |  | 3553|      0|                self_or_null = null;
  |  | 3554|      0|                assert(PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  Branch (3554:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3555|      0|                _PyStackRef callable_s = callable;
  |  | 3556|      0|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3557|      0|                assert(Py_TYPE(callable_o) == &PyMethod_Type);
  |  |  ------------------
  |  |  |  Branch (3557:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3558|      0|                self_or_null = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_self);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3559|      0|                callable = PyStackRef_FromPyObjectNew(((PyMethodObject *)callable_o)->im_func);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3560|      0|                assert(PyStackRef_FunctionCheck(callable));
  |  |  ------------------
  |  |  |  Branch (3560:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3561|      0|                stack_pointer[-3 - oparg] = callable;
  |  | 3562|      0|                stack_pointer[-2 - oparg] = self_or_null;
  |  | 3563|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3564|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3565|      0|                PyStackRef_CLOSE(callable_s);
  |  | 3566|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3567|      0|            }
  |  | 3568|       |            // flush
  |  | 3569|       |            // _PY_FRAME_KW
  |  | 3570|      0|            {
  |  | 3571|      0|                kwnames = stack_pointer[-1];
  |  | 3572|      0|                args = &stack_pointer[-1 - oparg];
  |  | 3573|      0|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3574|      0|                int total_args = oparg;
  |  | 3575|      0|                _PyStackRef *arguments = args;
  |  | 3576|      0|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3576:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3577|      0|                    arguments--;
  |  | 3578|      0|                    total_args++;
  |  | 3579|      0|                }
  |  | 3580|      0|                PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
  |  | 3581|      0|                int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o);
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3582|      0|                assert(Py_TYPE(callable_o) == &PyFunction_Type);
  |  |  ------------------
  |  |  |  Branch (3582:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3583|      0|                int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|      0|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3584|      0|                PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|      0|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                               PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3584:36): [True: 0, False: 0]
  |  |  ------------------
  |  | 3585|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (3585:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3586|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3587|      0|                _PyInterpreterFrame *temp = _PyEvalFramePushAndInit(
  |  | 3588|      0|                    tstate, callable, locals,
  |  | 3589|      0|                    arguments, positional_args, kwnames_o, frame
  |  | 3590|      0|                );
  |  | 3591|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3592|      0|                stack_pointer += -1;
  |  | 3593|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3594|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3595|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3596|      0|                PyStackRef_CLOSE(kwnames);
  |  | 3597|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3598|      0|                stack_pointer += -2 - oparg;
  |  | 3599|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3600|      0|                if (temp == NULL) {
  |  |  ------------------
  |  |  |  Branch (3600:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3601|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3602|      0|                }
  |  | 3603|      0|                new_frame = PyStackRef_Wrap(temp);
  |  | 3604|      0|            }
  |  | 3605|       |            // _SAVE_RETURN_OFFSET
  |  | 3606|      0|            {
  |  | 3607|      0|                #if TIER_ONE
  |  | 3608|      0|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 3609|      0|                #endif
  |  | 3610|       |                #if TIER_TWO
  |  | 3611|       |                frame->return_offset = oparg;
  |  | 3612|       |                #endif
  |  | 3613|      0|            }
  |  | 3614|       |            // _PUSH_FRAME
  |  | 3615|      0|            {
  |  | 3616|      0|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (3616:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3617|      0|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 3618|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3619|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 3620|      0|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (3620:17): [True: 0, False: 0]
  |  |  |  Branch (3620:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3621|      0|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 3622|      0|                frame = tstate->current_frame = temp;
  |  | 3623|      0|                tstate->py_recursion_remaining--;
  |  | 3624|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 3625|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3626|      0|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|      0|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|      0|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3627|       |                #ifdef Py_DEBUG
  |  | 3628|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 3629|       |                #endif
  |  | 3630|      0|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|      0|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 3631|      0|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|      0|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 3632|      0|            }
  |  | 3633|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 3634|      0|        }
  |  | 3635|       |
  |  | 3636|    778|        TARGET(CALL_KW_NON_PY) {
  |  |  ------------------
  |  |  |  |  132|    778|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3637|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3638|       |            int opcode = CALL_KW_NON_PY;
  |  | 3639|       |            (void)(opcode);
  |  | 3640|       |            #endif
  |  | 3641|    778|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 3642|    778|            (void)this_instr;
  |  | 3643|    778|            frame->instr_ptr = next_instr;
  |  | 3644|    778|            next_instr += 4;
  |  | 3645|    778|            INSTRUCTION_STATS(CALL_KW_NON_PY);
  |  |  ------------------
  |  |  |  |   71|    778|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3646|    778|            opcode = CALL_KW_NON_PY;
  |  |  ------------------
  |  |  |  |  157|    778|#define CALL_KW_NON_PY                         155
  |  |  ------------------
  |  | 3647|    778|            static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size");
  |  | 3648|    778|            _PyStackRef callable;
  |  | 3649|    778|            _PyStackRef self_or_null;
  |  | 3650|    778|            _PyStackRef *args;
  |  | 3651|    778|            _PyStackRef kwnames;
  |  | 3652|    778|            _PyStackRef res;
  |  | 3653|       |            /* Skip 1 cache entry */
  |  | 3654|       |            /* Skip 2 cache entries */
  |  | 3655|       |            // _CHECK_IS_NOT_PY_CALLABLE_KW
  |  | 3656|    778|            {
  |  | 3657|    778|                callable = stack_pointer[-3 - oparg];
  |  | 3658|    778|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3659|    778|                if (PyFunction_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |   68|    778|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    778|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    778|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    778|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 778]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3660|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3661|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3661:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3662|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3663|      0|                }
  |  | 3664|    778|                if (Py_TYPE(callable_o) == &PyMethod_Type) {
  |  |  ------------------
  |  |  |  |  213|    778|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    778|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    778|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3664:21): [True: 0, False: 778]
  |  |  ------------------
  |  | 3665|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3666|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3666:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3667|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3668|      0|                }
  |  | 3669|    778|            }
  |  | 3670|       |            // _CALL_KW_NON_PY
  |  | 3671|    778|            {
  |  | 3672|    778|                kwnames = stack_pointer[-1];
  |  | 3673|    778|                args = &stack_pointer[-1 - oparg];
  |  | 3674|    778|                self_or_null = stack_pointer[-2 - oparg];
  |  | 3675|    778|                #if TIER_ONE
  |  | 3676|    778|                assert(opcode != INSTRUMENTED_CALL);
  |  |  ------------------
  |  |  |  Branch (3676:17): [True: 778, False: 0]
  |  |  ------------------
  |  | 3677|    778|                #endif
  |  | 3678|    778|                int total_args = oparg;
  |  | 3679|    778|                _PyStackRef *arguments = args;
  |  | 3680|    778|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|    778|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    778|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    778|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3680:21): [True: 0, False: 778]
  |  |  ------------------
  |  | 3681|      0|                    arguments--;
  |  | 3682|      0|                    total_args++;
  |  | 3683|      0|                }
  |  | 3684|    778|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3685|    778|                _PyFrame_StackPointerValidate(frame);
  |  | 3686|    778|                PyObject *res_o = _Py_VectorCall_StackRefSteal(
  |  | 3687|    778|                    callable,
  |  | 3688|    778|                    arguments,
  |  | 3689|    778|                    total_args,
  |  | 3690|    778|                    kwnames);
  |  | 3691|    778|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3692|    778|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3692:21): [True: 178, False: 600]
  |  |  ------------------
  |  | 3693|    178|                    stack_pointer += -3 - oparg;
  |  | 3694|    178|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    178|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3695|    178|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    178|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3696|      0|                }
  |  | 3697|    600|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 3698|    600|            }
  |  | 3699|       |            // _CHECK_PERIODIC_AT_END
  |  | 3700|      0|            {
  |  | 3701|    600|                stack_pointer[-3 - oparg] = res;
  |  | 3702|    600|                stack_pointer += -2 - oparg;
  |  | 3703|    600|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    600|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3704|    600|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3705|    600|                _PyFrame_StackPointerValidate(frame);
  |  | 3706|    600|                int err = check_periodics_at_end(tstate, frame);
  |  | 3707|    600|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3708|    600|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (3708:21): [True: 0, False: 600]
  |  |  ------------------
  |  | 3709|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3710|      0|                }
  |  | 3711|    600|            }
  |  | 3712|    600|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    600|    { \
  |  |  |  |  201|    600|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    600|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    600|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    600|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    600|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    600|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    600|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    600|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 600]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    600|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    600|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    600|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    600|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    600|    }
  |  |  ------------------
  |  | 3713|    600|        }
  |  | 3714|       |
  |  | 3715|  2.85k|        TARGET(CALL_KW_PY) {
  |  |  ------------------
  |  |  |  |  132|  2.85k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3716|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3717|       |            int opcode = CALL_KW_PY;
  |  | 3718|       |            (void)(opcode);
  |  | 3719|       |            #endif
  |  | 3720|  2.85k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 3721|  2.85k|            (void)this_instr;
  |  | 3722|  2.85k|            frame->instr_ptr = next_instr;
  |  | 3723|  2.85k|            next_instr += 4;
  |  | 3724|  2.85k|            INSTRUCTION_STATS(CALL_KW_PY);
  |  |  ------------------
  |  |  |  |   71|  2.85k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3725|  2.85k|            static_assert(INLINE_CACHE_ENTRIES_CALL_KW == 3, "incorrect cache size");
  |  | 3726|  2.85k|            _PyStackRef callable;
  |  | 3727|  2.85k|            _PyStackRef self_or_null;
  |  | 3728|  2.85k|            _PyStackRef *args;
  |  | 3729|  2.85k|            _PyStackRef kwnames;
  |  | 3730|  2.85k|            _PyStackRef new_frame;
  |  | 3731|       |            /* Skip 1 cache entry */
  |  | 3732|       |            // _CHECK_PEP_523
  |  | 3733|  2.85k|            {
  |  | 3734|  2.85k|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|  2.85k|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 2.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3735|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3736|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3736:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3737|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3738|      0|                }
  |  | 3739|  2.85k|            }
  |  | 3740|       |            // _CHECK_FUNCTION_VERSION_KW
  |  | 3741|  2.85k|            {
  |  | 3742|  2.85k|                callable = stack_pointer[-3 - oparg];
  |  | 3743|  2.85k|                uint32_t func_version = read_u32(&this_instr[2].cache);
  |  | 3744|  2.85k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3745|  2.85k|                if (!PyFunction_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |   68|  2.85k|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  2.85k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  2.85k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  2.85k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3745:21): [True: 0, False: 2.85k]
  |  |  ------------------
  |  | 3746|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3747|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3747:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3748|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3749|      0|                }
  |  | 3750|  2.85k|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 3751|  2.85k|                if (func->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (3751:21): [True: 0, False: 2.85k]
  |  |  ------------------
  |  | 3752|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3753|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3753:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3754|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3755|      0|                }
  |  | 3756|  2.85k|            }
  |  | 3757|       |            // _CHECK_RECURSION_REMAINING
  |  | 3758|  2.85k|            {
  |  | 3759|  2.85k|                if (tstate->py_recursion_remaining <= 1) {
  |  |  ------------------
  |  |  |  Branch (3759:21): [True: 0, False: 2.85k]
  |  |  ------------------
  |  | 3760|      0|                    UPDATE_MISS_STATS(CALL_KW);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3761|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL_KW));
  |  |  ------------------
  |  |  |  Branch (3761:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3762|      0|                    JUMP_TO_PREDICTED(CALL_KW);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3763|      0|                }
  |  | 3764|  2.85k|            }
  |  | 3765|       |            // _PY_FRAME_KW
  |  | 3766|  2.85k|            {
  |  | 3767|  2.85k|                kwnames = stack_pointer[-1];
  |  | 3768|  2.85k|                args = &stack_pointer[-1 - oparg];
  |  | 3769|  2.85k|                self_or_null = stack_pointer[-2 - oparg];
  |  | 3770|  2.85k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3771|  2.85k|                int total_args = oparg;
  |  | 3772|  2.85k|                _PyStackRef *arguments = args;
  |  | 3773|  2.85k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  2.85k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  2.85k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  2.85k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3773:21): [True: 0, False: 2.85k]
  |  |  ------------------
  |  | 3774|      0|                    arguments--;
  |  | 3775|      0|                    total_args++;
  |  | 3776|      0|                }
  |  | 3777|  2.85k|                PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
  |  | 3778|  2.85k|                int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o);
  |  |  ------------------
  |  |  |  |   27|  2.85k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.85k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.85k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3779|  2.85k|                assert(Py_TYPE(callable_o) == &PyFunction_Type);
  |  |  ------------------
  |  |  |  Branch (3779:17): [True: 2.85k, False: 0]
  |  |  ------------------
  |  | 3780|  2.85k|                int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|  2.85k|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.85k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.85k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3781|  2.85k|                PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|  2.85k|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                               PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3781:36): [True: 2.85k, False: 0]
  |  |  ------------------
  |  | 3782|  2.85k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3783|  2.85k|                _PyFrame_StackPointerValidate(frame);
  |  | 3784|  2.85k|                _PyInterpreterFrame *temp = _PyEvalFramePushAndInit(
  |  | 3785|  2.85k|                    tstate, callable, locals,
  |  | 3786|  2.85k|                    arguments, positional_args, kwnames_o, frame
  |  | 3787|  2.85k|                );
  |  | 3788|  2.85k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3789|  2.85k|                stack_pointer += -1;
  |  | 3790|  2.85k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.85k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3791|  2.85k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3792|  2.85k|                _PyFrame_StackPointerValidate(frame);
  |  | 3793|  2.85k|                PyStackRef_CLOSE(kwnames);
  |  | 3794|  2.85k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3795|  2.85k|                stack_pointer += -2 - oparg;
  |  | 3796|  2.85k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.85k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3797|  2.85k|                if (temp == NULL) {
  |  |  ------------------
  |  |  |  Branch (3797:21): [True: 0, False: 2.85k]
  |  |  ------------------
  |  | 3798|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3799|      0|                }
  |  | 3800|  2.85k|                new_frame = PyStackRef_Wrap(temp);
  |  | 3801|  2.85k|            }
  |  | 3802|       |            // _SAVE_RETURN_OFFSET
  |  | 3803|      0|            {
  |  | 3804|  2.85k|                #if TIER_ONE
  |  | 3805|  2.85k|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 3806|  2.85k|                #endif
  |  | 3807|       |                #if TIER_TWO
  |  | 3808|       |                frame->return_offset = oparg;
  |  | 3809|       |                #endif
  |  | 3810|  2.85k|            }
  |  | 3811|       |            // _PUSH_FRAME
  |  | 3812|  2.85k|            {
  |  | 3813|  2.85k|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (3813:17): [True: 2.85k, False: 0]
  |  |  ------------------
  |  | 3814|  2.85k|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 3815|  2.85k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3816|  2.85k|                _PyFrame_StackPointerValidate(frame);
  |  | 3817|  2.85k|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (3817:17): [True: 2.85k, False: 0]
  |  |  |  Branch (3817:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3818|  2.85k|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|  2.85k|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 3819|  2.85k|                frame = tstate->current_frame = temp;
  |  | 3820|  2.85k|                tstate->py_recursion_remaining--;
  |  | 3821|  2.85k|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 3822|  2.85k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3823|  2.85k|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|  2.85k|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  2.85k|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  2.85k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 2.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3824|       |                #ifdef Py_DEBUG
  |  | 3825|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 3826|       |                #endif
  |  | 3827|  2.85k|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|  2.85k|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 3828|  2.85k|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  2.85k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 3829|  2.85k|            }
  |  | 3830|  2.85k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.85k|    { \
  |  |  |  |  201|  2.85k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.85k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.85k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.85k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.85k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.85k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.85k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.85k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.85k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.85k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.85k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.85k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.85k|    }
  |  |  ------------------
  |  | 3831|  2.85k|        }
  |  | 3832|       |
  |  | 3833|  1.53M|        TARGET(CALL_LEN) {
  |  |  ------------------
  |  |  |  |  132|  1.53M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3834|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3835|       |            int opcode = CALL_LEN;
  |  | 3836|       |            (void)(opcode);
  |  | 3837|       |            #endif
  |  | 3838|  1.53M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 3839|  1.53M|            (void)this_instr;
  |  | 3840|  1.53M|            frame->instr_ptr = next_instr;
  |  | 3841|  1.53M|            next_instr += 4;
  |  | 3842|  1.53M|            INSTRUCTION_STATS(CALL_LEN);
  |  |  ------------------
  |  |  |  |   71|  1.53M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3843|  1.53M|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 3844|  1.53M|            _PyStackRef null;
  |  | 3845|  1.53M|            _PyStackRef callable;
  |  | 3846|  1.53M|            _PyStackRef arg;
  |  | 3847|  1.53M|            _PyStackRef res;
  |  | 3848|  1.53M|            _PyStackRef a;
  |  | 3849|  1.53M|            _PyStackRef c;
  |  | 3850|  1.53M|            _PyStackRef value;
  |  | 3851|       |            /* Skip 1 cache entry */
  |  | 3852|       |            /* Skip 2 cache entries */
  |  | 3853|       |            // _GUARD_NOS_NULL
  |  | 3854|  1.53M|            {
  |  | 3855|  1.53M|                null = stack_pointer[-2];
  |  | 3856|  1.53M|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|  1.53M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.53M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.53M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3856:21): [True: 0, False: 1.53M]
  |  |  ------------------
  |  | 3857|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3858|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3858:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3859|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3860|      0|                }
  |  | 3861|  1.53M|            }
  |  | 3862|       |            // _GUARD_CALLABLE_LEN
  |  | 3863|  1.53M|            {
  |  | 3864|  1.53M|                callable = stack_pointer[-3];
  |  | 3865|  1.53M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3866|  1.53M|                PyInterpreterState *interp = tstate->interp;
  |  | 3867|  1.53M|                if (callable_o != interp->callable_cache.len) {
  |  |  ------------------
  |  |  |  Branch (3867:21): [True: 0, False: 1.53M]
  |  |  ------------------
  |  | 3868|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3869|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3869:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3870|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3871|      0|                }
  |  | 3872|  1.53M|            }
  |  | 3873|       |            // _CALL_LEN
  |  | 3874|  1.53M|            {
  |  | 3875|  1.53M|                arg = stack_pointer[-1];
  |  | 3876|  1.53M|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  1.53M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 3877|  1.53M|                PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg);
  |  | 3878|  1.53M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3879|  1.53M|                _PyFrame_StackPointerValidate(frame);
  |  | 3880|  1.53M|                Py_ssize_t len_i = PyObject_Length(arg_o);
  |  |  ------------------
  |  |  |  |  353|  1.53M|#define PyObject_Length PyObject_Size
  |  |  ------------------
  |  | 3881|  1.53M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3882|  1.53M|                if (len_i < 0) {
  |  |  ------------------
  |  |  |  Branch (3882:21): [True: 0, False: 1.53M]
  |  |  ------------------
  |  | 3883|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3884|      0|                }
  |  | 3885|  1.53M|                PyObject *res_o = PyLong_FromSsize_t(len_i);
  |  | 3886|  1.53M|                assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
  |  |  ------------------
  |  |  |  Branch (3886:17): [True: 1.53M, False: 0]
  |  |  ------------------
  |  | 3887|  1.53M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (3887:21): [True: 0, False: 1.53M]
  |  |  ------------------
  |  | 3888|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3889|      0|                }
  |  | 3890|  1.53M|                a = arg;
  |  | 3891|  1.53M|                c = callable;
  |  | 3892|  1.53M|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 3893|  1.53M|            }
  |  | 3894|       |            // _POP_TOP
  |  | 3895|      0|            {
  |  | 3896|  1.53M|                value = c;
  |  | 3897|  1.53M|                stack_pointer[-3] = res;
  |  | 3898|  1.53M|                stack_pointer[-2] = a;
  |  | 3899|  1.53M|                stack_pointer += -1;
  |  | 3900|  1.53M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.53M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3901|  1.53M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3902|  1.53M|                _PyFrame_StackPointerValidate(frame);
  |  | 3903|  1.53M|                PyStackRef_XCLOSE(value);
  |  | 3904|  1.53M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3905|  1.53M|            }
  |  | 3906|       |            // _POP_TOP
  |  | 3907|  1.53M|            {
  |  | 3908|  1.53M|                value = a;
  |  | 3909|  1.53M|                stack_pointer += -1;
  |  | 3910|  1.53M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.53M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3911|  1.53M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3912|  1.53M|                _PyFrame_StackPointerValidate(frame);
  |  | 3913|  1.53M|                PyStackRef_XCLOSE(value);
  |  | 3914|  1.53M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 3915|  1.53M|            }
  |  | 3916|  1.53M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.53M|    { \
  |  |  |  |  201|  1.53M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.53M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.53M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.53M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.53M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.53M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.53M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.53M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.53M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.53M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.53M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.53M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.53M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.53M|    }
  |  |  ------------------
  |  | 3917|  1.53M|        }
  |  | 3918|       |
  |  | 3919|   587k|        TARGET(CALL_LIST_APPEND) {
  |  |  ------------------
  |  |  |  |  132|   587k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 3920|       |            #if _Py_TAIL_CALL_INTERP
  |  | 3921|       |            int opcode = CALL_LIST_APPEND;
  |  | 3922|       |            (void)(opcode);
  |  | 3923|       |            #endif
  |  | 3924|   587k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 3925|   587k|            (void)this_instr;
  |  | 3926|   587k|            frame->instr_ptr = next_instr;
  |  | 3927|   587k|            next_instr += 4;
  |  | 3928|   587k|            INSTRUCTION_STATS(CALL_LIST_APPEND);
  |  |  ------------------
  |  |  |  |   71|   587k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 3929|   587k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 3930|   587k|            _PyStackRef callable;
  |  | 3931|   587k|            _PyStackRef nos;
  |  | 3932|   587k|            _PyStackRef self;
  |  | 3933|   587k|            _PyStackRef arg;
  |  | 3934|   587k|            _PyStackRef none;
  |  | 3935|   587k|            _PyStackRef c;
  |  | 3936|   587k|            _PyStackRef s;
  |  | 3937|   587k|            _PyStackRef value;
  |  | 3938|       |            /* Skip 1 cache entry */
  |  | 3939|       |            /* Skip 2 cache entries */
  |  | 3940|       |            // _GUARD_CALLABLE_LIST_APPEND
  |  | 3941|   587k|            {
  |  | 3942|   587k|                callable = stack_pointer[-3];
  |  | 3943|   587k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 3944|   587k|                PyInterpreterState *interp = tstate->interp;
  |  | 3945|   587k|                if (callable_o != interp->callable_cache.list_append) {
  |  |  ------------------
  |  |  |  Branch (3945:21): [True: 0, False: 587k]
  |  |  ------------------
  |  | 3946|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3947|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3947:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3948|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3949|      0|                }
  |  | 3950|   587k|            }
  |  | 3951|       |            // _GUARD_NOS_NOT_NULL
  |  | 3952|   587k|            {
  |  | 3953|   587k|                nos = stack_pointer[-2];
  |  | 3954|   587k|                if (PyStackRef_IsNull(nos)) {
  |  |  ------------------
  |  |  |  |  482|   587k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   587k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   587k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 587k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3955|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3956|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3956:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3957|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3958|      0|                }
  |  | 3959|   587k|            }
  |  | 3960|       |            // _GUARD_NOS_LIST
  |  | 3961|   587k|            {
  |  | 3962|   587k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  | 3963|   587k|                if (!PyList_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   26|   587k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   587k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   587k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   587k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (3963:21): [True: 0, False: 587k]
  |  |  ------------------
  |  | 3964|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3965|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3965:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3966|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3967|      0|                }
  |  | 3968|   587k|            }
  |  | 3969|       |            // _CALL_LIST_APPEND
  |  | 3970|   587k|            {
  |  | 3971|   587k|                arg = stack_pointer[-1];
  |  | 3972|   587k|                self = nos;
  |  | 3973|   587k|                assert(oparg == 1);
  |  |  ------------------
  |  |  |  Branch (3973:17): [True: 587k, False: 0]
  |  |  ------------------
  |  | 3974|   587k|                PyObject *self_o = PyStackRef_AsPyObjectBorrow(self);
  |  | 3975|   587k|                if (!LOCK_OBJECT(self_o)) {
  |  |  ------------------
  |  |  |  |  322|   587k|#  define LOCK_OBJECT(op) (1)
  |  |  ------------------
  |  |  |  Branch (3975:21): [Folded, False: 587k]
  |  |  ------------------
  |  | 3976|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 3977|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (3977:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 3978|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 3979|      0|                }
  |  | 3980|   587k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|   587k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 3981|   587k|                int err = _PyList_AppendTakeRef((PyListObject *)self_o, PyStackRef_AsPyObjectSteal(arg));
  |  | 3982|   587k|                UNLOCK_OBJECT(self_o);
  |  |  ------------------
  |  |  |  |  323|   587k|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  | 3983|   587k|                if (err) {
  |  |  ------------------
  |  |  |  Branch (3983:21): [True: 0, False: 587k]
  |  |  ------------------
  |  | 3984|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 3985|      0|                }
  |  | 3986|   587k|                c = callable;
  |  | 3987|   587k|                s = self;
  |  | 3988|   587k|                none = PyStackRef_None;
  |  |  ------------------
  |  |  |  |  485|   587k|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   587k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3989|   587k|            }
  |  | 3990|       |            // _POP_TOP
  |  | 3991|      0|            {
  |  | 3992|   587k|                value = s;
  |  | 3993|   587k|                stack_pointer[-3] = none;
  |  | 3994|   587k|                stack_pointer[-2] = c;
  |  | 3995|   587k|                stack_pointer += -1;
  |  | 3996|   587k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   587k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 3997|   587k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 3998|   587k|                _PyFrame_StackPointerValidate(frame);
  |  | 3999|   587k|                PyStackRef_XCLOSE(value);
  |  | 4000|   587k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4001|   587k|            }
  |  | 4002|       |            // _POP_TOP
  |  | 4003|   587k|            {
  |  | 4004|   587k|                value = c;
  |  | 4005|   587k|                stack_pointer += -1;
  |  | 4006|   587k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   587k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4007|   587k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4008|   587k|                _PyFrame_StackPointerValidate(frame);
  |  | 4009|   587k|                PyStackRef_XCLOSE(value);
  |  | 4010|   587k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4011|   587k|            }
  |  | 4012|   587k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   587k|    { \
  |  |  |  |  201|   587k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   587k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   587k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   587k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   587k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   587k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   587k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   587k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 587k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   587k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   587k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   587k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   587k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   587k|    }
  |  |  ------------------
  |  | 4013|   587k|        }
  |  | 4014|       |
  |  | 4015|  1.20M|        TARGET(CALL_METHOD_DESCRIPTOR_FAST) {
  |  |  ------------------
  |  |  |  |  132|  1.20M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4016|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4017|       |            int opcode = CALL_METHOD_DESCRIPTOR_FAST;
  |  | 4018|       |            (void)(opcode);
  |  | 4019|       |            #endif
  |  | 4020|  1.20M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4021|  1.20M|            (void)this_instr;
  |  | 4022|  1.20M|            frame->instr_ptr = next_instr;
  |  | 4023|  1.20M|            next_instr += 4;
  |  | 4024|  1.20M|            INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_FAST);
  |  |  ------------------
  |  |  |  |   71|  1.20M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4025|  1.20M|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4026|  1.20M|            _PyStackRef callable;
  |  | 4027|  1.20M|            _PyStackRef self_or_null;
  |  | 4028|  1.20M|            _PyStackRef *args;
  |  | 4029|  1.20M|            _PyStackRef value;
  |  | 4030|       |            /* Skip 1 cache entry */
  |  | 4031|       |            /* Skip 2 cache entries */
  |  | 4032|       |            // _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST
  |  | 4033|  1.20M|            {
  |  | 4034|  1.20M|                args = &stack_pointer[-oparg];
  |  | 4035|  1.20M|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4036|  1.20M|                callable = stack_pointer[-2 - oparg];
  |  | 4037|  1.20M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4038|  1.20M|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4039|  1.20M|                if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) {
  |  |  ------------------
  |  |  |  |   65|  1.20M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.20M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.20M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4039:21): [True: 0, False: 1.20M]
  |  |  ------------------
  |  | 4040|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4041|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4041:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4042|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4043|      0|                }
  |  | 4044|  1.20M|                if (method->d_method->ml_flags != METH_FASTCALL) {
  |  |  ------------------
  |  |  |  |  115|  1.20M|#  define METH_FASTCALL  0x0080
  |  |  ------------------
  |  |  |  Branch (4044:21): [True: 0, False: 1.20M]
  |  |  ------------------
  |  | 4045|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4046|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4046:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4047|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4048|      0|                }
  |  | 4049|  1.20M|                int total_args = oparg;
  |  | 4050|  1.20M|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  1.20M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.20M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.20M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4050:21): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4051|  1.20M|                    total_args++;
  |  | 4052|  1.20M|                }
  |  | 4053|  1.20M|                if (total_args == 0) {
  |  |  ------------------
  |  |  |  Branch (4053:21): [True: 0, False: 1.20M]
  |  |  ------------------
  |  | 4054|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4055|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4055:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4056|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4057|      0|                }
  |  | 4058|  1.20M|                PyObject *self = PyStackRef_AsPyObjectBorrow(
  |  | 4059|  1.20M|                    PyStackRef_IsNull(self_or_null) ? args[0] : self_or_null);
  |  |  ------------------
  |  |  |  |  482|  1.20M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.20M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.20M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 1.20M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4060|  1.20M|                if (!Py_IS_TYPE(self, method->d_common.d_type)) {
  |  |  ------------------
  |  |  |  |   65|  1.20M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.20M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.20M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4060:21): [True: 116, False: 1.20M]
  |  |  ------------------
  |  | 4061|    116|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|    116|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4062|    116|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4062:21): [True: 116, False: 0]
  |  |  ------------------
  |  | 4063|    116|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|    116|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4064|      0|                }
  |  | 4065|  1.20M|            }
  |  | 4066|       |            // _CALL_METHOD_DESCRIPTOR_FAST
  |  | 4067|  1.20M|            {
  |  | 4068|  1.20M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4069|  1.20M|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4070|  1.20M|                int total_args = oparg;
  |  | 4071|  1.20M|                _PyStackRef *arguments = args;
  |  | 4072|  1.20M|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  1.20M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.20M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.20M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4072:21): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4073|  1.20M|                    arguments--;
  |  | 4074|  1.20M|                    total_args++;
  |  | 4075|  1.20M|                }
  |  | 4076|  1.20M|                PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]);
  |  | 4077|  1.20M|                assert(self != NULL);
  |  |  ------------------
  |  |  |  Branch (4077:17): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4078|  1.20M|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  1.20M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4079|  1.20M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4080|  1.20M|                _PyFrame_StackPointerValidate(frame);
  |  | 4081|  1.20M|                PyCFunctionFast cfunc = _PyCFunctionFast_CAST(method->d_method->ml_meth);
  |  |  ------------------
  |  |  |  |   58|  1.20M|    _Py_FUNC_CAST(PyCFunctionFast, func)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  1.20M|#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.20M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4082|  1.20M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4083|  1.20M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4083:17): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4084|  1.20M|                _PyFrame_StackPointerValidate(frame);
  |  | 4085|  1.20M|                PyObject *res_o = _PyCallMethodDescriptorFast_StackRef(
  |  | 4086|  1.20M|                    callable,
  |  | 4087|  1.20M|                    cfunc,
  |  | 4088|  1.20M|                    self,
  |  | 4089|  1.20M|                    arguments,
  |  | 4090|  1.20M|                    total_args
  |  | 4091|  1.20M|                );
  |  | 4092|  1.20M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4093|  1.20M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4093:21): [True: 0, False: 1.20M]
  |  |  ------------------
  |  | 4094|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4095|      0|                }
  |  | 4096|  1.20M|                _PyStackRef temp = callable;
  |  | 4097|  1.20M|                callable = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4098|  1.20M|                stack_pointer[-2 - oparg] = callable;
  |  | 4099|  1.20M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4099:17): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4100|  1.20M|                _PyFrame_StackPointerValidate(frame);
  |  | 4101|  1.20M|                PyStackRef_CLOSE(temp);
  |  | 4102|  1.20M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4103|  1.20M|            }
  |  | 4104|       |            // _POP_TOP_OPARG
  |  | 4105|      0|            {
  |  | 4106|  1.20M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4106:17): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4107|  1.20M|                _PyFrame_StackPointerValidate(frame);
  |  | 4108|  1.20M|                _PyStackRef_CloseStack(args, oparg);
  |  | 4109|  1.20M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4110|  1.20M|            }
  |  | 4111|       |            // _POP_TOP
  |  | 4112|      0|            {
  |  | 4113|  1.20M|                value = self_or_null;
  |  | 4114|  1.20M|                stack_pointer += -1 - oparg;
  |  | 4115|  1.20M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.20M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4116|  1.20M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4117|  1.20M|                _PyFrame_StackPointerValidate(frame);
  |  | 4118|  1.20M|                PyStackRef_XCLOSE(value);
  |  | 4119|  1.20M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4120|  1.20M|            }
  |  | 4121|       |            // _CHECK_PERIODIC_AT_END
  |  | 4122|  1.20M|            {
  |  | 4123|  1.20M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4123:17): [True: 1.20M, False: 0]
  |  |  ------------------
  |  | 4124|  1.20M|                _PyFrame_StackPointerValidate(frame);
  |  | 4125|  1.20M|                int err = check_periodics_at_end(tstate, frame);
  |  | 4126|  1.20M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4127|  1.20M|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4127:21): [True: 0, False: 1.20M]
  |  |  ------------------
  |  | 4128|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4129|      0|                }
  |  | 4130|  1.20M|            }
  |  | 4131|  1.20M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.20M|    { \
  |  |  |  |  201|  1.20M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.20M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.20M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.20M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.20M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.20M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.20M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.20M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.20M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.20M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.20M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.20M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.20M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.20M|    }
  |  |  ------------------
  |  | 4132|  1.20M|        }
  |  | 4133|       |
  |  | 4134|  73.6k|        TARGET(CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS) {
  |  |  ------------------
  |  |  |  |  132|  73.6k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4135|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4136|       |            int opcode = CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS;
  |  | 4137|       |            (void)(opcode);
  |  | 4138|       |            #endif
  |  | 4139|  73.6k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4140|  73.6k|            (void)this_instr;
  |  | 4141|  73.6k|            frame->instr_ptr = next_instr;
  |  | 4142|  73.6k|            next_instr += 4;
  |  | 4143|  73.6k|            INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS);
  |  |  ------------------
  |  |  |  |   71|  73.6k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4144|  73.6k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4145|  73.6k|            _PyStackRef callable;
  |  | 4146|  73.6k|            _PyStackRef self_or_null;
  |  | 4147|  73.6k|            _PyStackRef *args;
  |  | 4148|  73.6k|            _PyStackRef value;
  |  | 4149|       |            /* Skip 1 cache entry */
  |  | 4150|       |            /* Skip 2 cache entries */
  |  | 4151|       |            // _GUARD_CALLABLE_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS
  |  | 4152|  73.6k|            {
  |  | 4153|  73.6k|                args = &stack_pointer[-oparg];
  |  | 4154|  73.6k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4155|  73.6k|                callable = stack_pointer[-2 - oparg];
  |  | 4156|  73.6k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4157|  73.6k|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4158|  73.6k|                if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) {
  |  |  ------------------
  |  |  |  |   65|  73.6k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  73.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  73.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4158:21): [True: 0, False: 73.6k]
  |  |  ------------------
  |  | 4159|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4160|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4160:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4161|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4162|      0|                }
  |  | 4163|  73.6k|                if (method->d_method->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) {
  |  |  ------------------
  |  |  |  |  115|  73.6k|#  define METH_FASTCALL  0x0080
  |  |  ------------------
  |  |                               if (method->d_method->ml_flags != (METH_FASTCALL|METH_KEYWORDS)) {
  |  |  ------------------
  |  |  |  |   96|  73.6k|#define METH_KEYWORDS 0x0002
  |  |  ------------------
  |  |  |  Branch (4163:21): [True: 0, False: 73.6k]
  |  |  ------------------
  |  | 4164|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4165|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4165:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4166|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4167|      0|                }
  |  | 4168|  73.6k|                int total_args = oparg;
  |  | 4169|  73.6k|                _PyStackRef *arguments = args;
  |  | 4170|  73.6k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  73.6k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  73.6k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  73.6k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4170:21): [True: 73.6k, False: 0]
  |  |  ------------------
  |  | 4171|  73.6k|                    arguments--;
  |  | 4172|  73.6k|                    total_args++;
  |  | 4173|  73.6k|                }
  |  | 4174|  73.6k|                if (total_args == 0) {
  |  |  ------------------
  |  |  |  Branch (4174:21): [True: 0, False: 73.6k]
  |  |  ------------------
  |  | 4175|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4176|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4176:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4177|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4178|      0|                }
  |  | 4179|  73.6k|                PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]);
  |  | 4180|  73.6k|                if (!Py_IS_TYPE(self, method->d_common.d_type)) {
  |  |  ------------------
  |  |  |  |   65|  73.6k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  73.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  73.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4180:21): [True: 0, False: 73.6k]
  |  |  ------------------
  |  | 4181|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4182|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4182:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4183|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4184|      0|                }
  |  | 4185|  73.6k|            }
  |  | 4186|       |            // _CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS
  |  | 4187|  73.6k|            {
  |  | 4188|  73.6k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4189|  73.6k|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4190|  73.6k|                int total_args = oparg;
  |  | 4191|  73.6k|                _PyStackRef *arguments = args;
  |  | 4192|  73.6k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  73.6k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  73.6k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  73.6k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4192:21): [True: 73.6k, False: 0]
  |  |  ------------------
  |  | 4193|  73.6k|                    arguments--;
  |  | 4194|  73.6k|                    total_args++;
  |  | 4195|  73.6k|                }
  |  | 4196|  73.6k|                PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]);
  |  | 4197|  73.6k|                assert(self != NULL);
  |  |  ------------------
  |  |  |  Branch (4197:17): [True: 73.6k, False: 0]
  |  |  ------------------
  |  | 4198|  73.6k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  73.6k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4199|  73.6k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4200|  73.6k|                _PyFrame_StackPointerValidate(frame);
  |  | 4201|  73.6k|                PyCFunctionFastWithKeywords cfunc = _PyCFunctionFastWithKeywords_CAST(method->d_method->ml_meth);
  |  |  ------------------
  |  |  |  |   62|  73.6k|    _Py_FUNC_CAST(PyCFunctionFastWithKeywords, func)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  73.6k|#define _Py_FUNC_CAST(T, func) _Py_CAST(T, _Py_CAST(void(*)(void), (func)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  73.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4202|  73.6k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4203|  73.6k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4203:17): [True: 73.6k, False: 0]
  |  |  ------------------
  |  | 4204|  73.6k|                _PyFrame_StackPointerValidate(frame);
  |  | 4205|  73.6k|                PyObject *res_o = _PyCallMethodDescriptorFastWithKeywords_StackRef(
  |  | 4206|  73.6k|                    callable,
  |  | 4207|  73.6k|                    cfunc,
  |  | 4208|  73.6k|                    self,
  |  | 4209|  73.6k|                    arguments,
  |  | 4210|  73.6k|                    total_args
  |  | 4211|  73.6k|                );
  |  | 4212|  73.6k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4213|  73.6k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4213:21): [True: 35.9k, False: 37.7k]
  |  |  ------------------
  |  | 4214|  35.9k|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|  35.9k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4215|      0|                }
  |  | 4216|  37.7k|                _PyStackRef temp = callable;
  |  | 4217|  37.7k|                callable = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4218|  37.7k|                stack_pointer[-2 - oparg] = callable;
  |  | 4219|  37.7k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4219:17): [True: 37.7k, False: 0]
  |  |  ------------------
  |  | 4220|  37.7k|                _PyFrame_StackPointerValidate(frame);
  |  | 4221|  37.7k|                PyStackRef_CLOSE(temp);
  |  | 4222|  37.7k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4223|  37.7k|            }
  |  | 4224|       |            // _POP_TOP_OPARG
  |  | 4225|      0|            {
  |  | 4226|  37.7k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4226:17): [True: 37.7k, False: 0]
  |  |  ------------------
  |  | 4227|  37.7k|                _PyFrame_StackPointerValidate(frame);
  |  | 4228|  37.7k|                _PyStackRef_CloseStack(args, oparg);
  |  | 4229|  37.7k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4230|  37.7k|            }
  |  | 4231|       |            // _POP_TOP
  |  | 4232|      0|            {
  |  | 4233|  37.7k|                value = self_or_null;
  |  | 4234|  37.7k|                stack_pointer += -1 - oparg;
  |  | 4235|  37.7k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  37.7k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4236|  37.7k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4237|  37.7k|                _PyFrame_StackPointerValidate(frame);
  |  | 4238|  37.7k|                PyStackRef_XCLOSE(value);
  |  | 4239|  37.7k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4240|  37.7k|            }
  |  | 4241|       |            // _CHECK_PERIODIC_AT_END
  |  | 4242|  37.7k|            {
  |  | 4243|  37.7k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4243:17): [True: 37.7k, False: 0]
  |  |  ------------------
  |  | 4244|  37.7k|                _PyFrame_StackPointerValidate(frame);
  |  | 4245|  37.7k|                int err = check_periodics_at_end(tstate, frame);
  |  | 4246|  37.7k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4247|  37.7k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4247:21): [True: 0, False: 37.7k]
  |  |  ------------------
  |  | 4248|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4249|      0|                }
  |  | 4250|  37.7k|            }
  |  | 4251|  37.7k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  37.7k|    { \
  |  |  |  |  201|  37.7k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  37.7k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  37.7k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  37.7k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  37.7k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  37.7k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  37.7k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  37.7k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 37.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  37.7k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  37.7k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  37.7k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  37.7k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  37.7k|    }
  |  |  ------------------
  |  | 4252|  37.7k|        }
  |  | 4253|       |
  |  | 4254|   727k|        TARGET(CALL_METHOD_DESCRIPTOR_NOARGS) {
  |  |  ------------------
  |  |  |  |  132|   727k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4255|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4256|       |            int opcode = CALL_METHOD_DESCRIPTOR_NOARGS;
  |  | 4257|       |            (void)(opcode);
  |  | 4258|       |            #endif
  |  | 4259|   727k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4260|   727k|            (void)this_instr;
  |  | 4261|   727k|            frame->instr_ptr = next_instr;
  |  | 4262|   727k|            next_instr += 4;
  |  | 4263|   727k|            INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_NOARGS);
  |  |  ------------------
  |  |  |  |   71|   727k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4264|   727k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4265|   727k|            _PyStackRef callable;
  |  | 4266|   727k|            _PyStackRef self_or_null;
  |  | 4267|   727k|            _PyStackRef *args;
  |  | 4268|   727k|            _PyStackRef res;
  |  | 4269|   727k|            _PyStackRef c;
  |  | 4270|   727k|            _PyStackRef s;
  |  | 4271|   727k|            _PyStackRef value;
  |  | 4272|       |            /* Skip 1 cache entry */
  |  | 4273|       |            /* Skip 2 cache entries */
  |  | 4274|       |            // _GUARD_CALLABLE_METHOD_DESCRIPTOR_NOARGS
  |  | 4275|   727k|            {
  |  | 4276|   727k|                args = &stack_pointer[-oparg];
  |  | 4277|   727k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4278|   727k|                callable = stack_pointer[-2 - oparg];
  |  | 4279|   727k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4280|   727k|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4281|   727k|                if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) {
  |  |  ------------------
  |  |  |  |   65|   727k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   727k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   727k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4281:21): [True: 0, False: 727k]
  |  |  ------------------
  |  | 4282|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4283|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4283:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4284|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4285|      0|                }
  |  | 4286|   727k|                if (method->d_method->ml_flags != METH_NOARGS) {
  |  |  ------------------
  |  |  |  |   98|   727k|#define METH_NOARGS   0x0004
  |  |  ------------------
  |  |  |  Branch (4286:21): [True: 0, False: 727k]
  |  |  ------------------
  |  | 4287|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4288|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4288:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4289|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4290|      0|                }
  |  | 4291|   727k|                int total_args = oparg;
  |  | 4292|   727k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|   727k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   727k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   727k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4292:21): [True: 727k, False: 0]
  |  |  ------------------
  |  | 4293|   727k|                    total_args++;
  |  | 4294|   727k|                }
  |  | 4295|   727k|                if (total_args != 1) {
  |  |  ------------------
  |  |  |  Branch (4295:21): [True: 0, False: 727k]
  |  |  ------------------
  |  | 4296|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4297|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4297:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4298|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4299|      0|                }
  |  | 4300|   727k|                PyObject *self = PyStackRef_AsPyObjectBorrow(
  |  | 4301|   727k|                    PyStackRef_IsNull(self_or_null) ? args[0] : self_or_null);
  |  |  ------------------
  |  |  |  |  482|   727k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   727k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   727k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 727k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4302|   727k|                if (!Py_IS_TYPE(self, method->d_common.d_type)) {
  |  |  ------------------
  |  |  |  |   65|   727k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   727k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   727k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4302:21): [True: 98, False: 727k]
  |  |  ------------------
  |  | 4303|     98|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|     98|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4304|     98|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4304:21): [True: 98, False: 0]
  |  |  ------------------
  |  | 4305|     98|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|     98|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4306|      0|                }
  |  | 4307|   727k|            }
  |  | 4308|       |            // _CHECK_RECURSION_LIMIT
  |  | 4309|   727k|            {
  |  | 4310|   727k|                if (_Py_ReachedRecursionLimit(tstate)) {
  |  |  ------------------
  |  |  |  Branch (4310:21): [True: 0, False: 727k]
  |  |  ------------------
  |  | 4311|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4312|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4312:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4313|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4314|      0|                }
  |  | 4315|   727k|            }
  |  | 4316|       |            // _CALL_METHOD_DESCRIPTOR_NOARGS
  |  | 4317|   727k|            {
  |  | 4318|   727k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4319|   727k|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4320|   727k|                assert(oparg == 1 || !PyStackRef_IsNull(self_or_null));
  |  |  ------------------
  |  |  |  Branch (4320:17): [True: 0, False: 727k]
  |  |  |  Branch (4320:17): [True: 727k, False: 0]
  |  |  ------------------
  |  | 4321|   727k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|   727k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   727k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   727k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4321:21): [True: 727k, False: 0]
  |  |  ------------------
  |  | 4322|   727k|                    args--;
  |  | 4323|   727k|                }
  |  | 4324|   727k|                _PyStackRef self_stackref = args[0];
  |  | 4325|   727k|                PyObject *self = PyStackRef_AsPyObjectBorrow(self_stackref);
  |  | 4326|   727k|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|   727k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4327|   727k|                PyCFunction cfunc = method->d_method->ml_meth;
  |  | 4328|   727k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4329|   727k|                _PyFrame_StackPointerValidate(frame);
  |  | 4330|   727k|                PyObject *res_o = _PyCFunction_TrampolineCall(cfunc, self, NULL);
  |  |  ------------------
  |  |  |  |  996|   727k|    (meth)((self), (args))
  |  |  ------------------
  |  | 4331|   727k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4332|   727k|                _Py_LeaveRecursiveCallTstate(tstate);
  |  | 4333|   727k|                assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
  |  |  ------------------
  |  |  |  Branch (4333:17): [True: 727k, False: 0]
  |  |  ------------------
  |  | 4334|   727k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4334:21): [True: 0, False: 727k]
  |  |  ------------------
  |  | 4335|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4336|      0|                }
  |  | 4337|   727k|                c = callable;
  |  | 4338|   727k|                s = args[0];
  |  | 4339|   727k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4340|   727k|            }
  |  | 4341|       |            // _POP_TOP
  |  | 4342|      0|            {
  |  | 4343|   727k|                value = s;
  |  | 4344|   727k|                stack_pointer[-2 - oparg] = res;
  |  | 4345|   727k|                stack_pointer[-1 - oparg] = c;
  |  | 4346|   727k|                stack_pointer += -oparg;
  |  | 4347|   727k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   727k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4348|   727k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4349|   727k|                _PyFrame_StackPointerValidate(frame);
  |  | 4350|   727k|                PyStackRef_XCLOSE(value);
  |  | 4351|   727k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4352|   727k|            }
  |  | 4353|       |            // _POP_TOP
  |  | 4354|   727k|            {
  |  | 4355|   727k|                value = c;
  |  | 4356|   727k|                stack_pointer += -1;
  |  | 4357|   727k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   727k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4358|   727k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4359|   727k|                _PyFrame_StackPointerValidate(frame);
  |  | 4360|   727k|                PyStackRef_XCLOSE(value);
  |  | 4361|   727k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4362|   727k|            }
  |  | 4363|       |            // _CHECK_PERIODIC_AT_END
  |  | 4364|   727k|            {
  |  | 4365|   727k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4365:17): [True: 727k, False: 0]
  |  |  ------------------
  |  | 4366|   727k|                _PyFrame_StackPointerValidate(frame);
  |  | 4367|   727k|                int err = check_periodics_at_end(tstate, frame);
  |  | 4368|   727k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4369|   727k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4369:21): [True: 0, False: 727k]
  |  |  ------------------
  |  | 4370|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4371|      0|                }
  |  | 4372|   727k|            }
  |  | 4373|   727k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   727k|    { \
  |  |  |  |  201|   727k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   727k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   727k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   727k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   727k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   727k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   727k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   727k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 727k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   727k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   727k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   727k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   727k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   727k|    }
  |  |  ------------------
  |  | 4374|   727k|        }
  |  | 4375|       |
  |  | 4376|  1.12M|        TARGET(CALL_METHOD_DESCRIPTOR_O) {
  |  |  ------------------
  |  |  |  |  132|  1.12M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4377|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4378|       |            int opcode = CALL_METHOD_DESCRIPTOR_O;
  |  | 4379|       |            (void)(opcode);
  |  | 4380|       |            #endif
  |  | 4381|  1.12M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4382|  1.12M|            (void)this_instr;
  |  | 4383|  1.12M|            frame->instr_ptr = next_instr;
  |  | 4384|  1.12M|            next_instr += 4;
  |  | 4385|  1.12M|            INSTRUCTION_STATS(CALL_METHOD_DESCRIPTOR_O);
  |  |  ------------------
  |  |  |  |   71|  1.12M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4386|  1.12M|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4387|  1.12M|            _PyStackRef callable;
  |  | 4388|  1.12M|            _PyStackRef self_or_null;
  |  | 4389|  1.12M|            _PyStackRef *args;
  |  | 4390|  1.12M|            _PyStackRef res;
  |  | 4391|  1.12M|            _PyStackRef c;
  |  | 4392|  1.12M|            _PyStackRef s;
  |  | 4393|  1.12M|            _PyStackRef a;
  |  | 4394|  1.12M|            _PyStackRef value;
  |  | 4395|       |            /* Skip 1 cache entry */
  |  | 4396|       |            /* Skip 2 cache entries */
  |  | 4397|       |            // _GUARD_CALLABLE_METHOD_DESCRIPTOR_O
  |  | 4398|  1.12M|            {
  |  | 4399|  1.12M|                args = &stack_pointer[-oparg];
  |  | 4400|  1.12M|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4401|  1.12M|                callable = stack_pointer[-2 - oparg];
  |  | 4402|  1.12M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4403|  1.12M|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4404|  1.12M|                if (!Py_IS_TYPE(method, &PyMethodDescr_Type)) {
  |  |  ------------------
  |  |  |  |   65|  1.12M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.12M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.12M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4404:21): [True: 0, False: 1.12M]
  |  |  ------------------
  |  | 4405|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4406|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4406:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4407|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4408|      0|                }
  |  | 4409|  1.12M|                if (method->d_method->ml_flags != METH_O) {
  |  |  ------------------
  |  |  |  |   99|  1.12M|#define METH_O        0x0008
  |  |  ------------------
  |  |  |  Branch (4409:21): [True: 0, False: 1.12M]
  |  |  ------------------
  |  | 4410|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4411|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4411:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4412|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4413|      0|                }
  |  | 4414|  1.12M|                int total_args = oparg;
  |  | 4415|  1.12M|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  1.12M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.12M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.12M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4415:21): [True: 1.12M, False: 0]
  |  |  ------------------
  |  | 4416|  1.12M|                    total_args++;
  |  | 4417|  1.12M|                }
  |  | 4418|  1.12M|                if (total_args != 2) {
  |  |  ------------------
  |  |  |  Branch (4418:21): [True: 0, False: 1.12M]
  |  |  ------------------
  |  | 4419|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4420|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4420:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4421|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4422|      0|                }
  |  | 4423|  1.12M|                PyObject *self = PyStackRef_AsPyObjectBorrow(
  |  | 4424|  1.12M|                    PyStackRef_IsNull(self_or_null) ? args[0] : self_or_null);
  |  |  ------------------
  |  |  |  |  482|  1.12M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.12M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.12M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 1.12M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4425|  1.12M|                if (!Py_IS_TYPE(self, method->d_common.d_type)) {
  |  |  ------------------
  |  |  |  |   65|  1.12M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.12M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.12M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4425:21): [True: 742, False: 1.12M]
  |  |  ------------------
  |  | 4426|    742|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|    742|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4427|    742|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4427:21): [True: 742, False: 0]
  |  |  ------------------
  |  | 4428|    742|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|    742|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4429|      0|                }
  |  | 4430|  1.12M|            }
  |  | 4431|       |            // _CHECK_RECURSION_LIMIT
  |  | 4432|  1.12M|            {
  |  | 4433|  1.12M|                if (_Py_ReachedRecursionLimit(tstate)) {
  |  |  ------------------
  |  |  |  Branch (4433:21): [True: 0, False: 1.12M]
  |  |  ------------------
  |  | 4434|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4435|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4435:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4436|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4437|      0|                }
  |  | 4438|  1.12M|            }
  |  | 4439|       |            // _CALL_METHOD_DESCRIPTOR_O
  |  | 4440|  1.12M|            {
  |  | 4441|  1.12M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4442|  1.12M|                PyMethodDescrObject *method = (PyMethodDescrObject *)callable_o;
  |  | 4443|  1.12M|                _PyStackRef *arguments = args;
  |  | 4444|  1.12M|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  1.12M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.12M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.12M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4444:21): [True: 1.12M, False: 0]
  |  |  ------------------
  |  | 4445|  1.12M|                    arguments--;
  |  | 4446|  1.12M|                }
  |  | 4447|  1.12M|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  1.12M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4448|  1.12M|                PyCFunction cfunc = method->d_method->ml_meth;
  |  | 4449|  1.12M|                PyObject *self = PyStackRef_AsPyObjectBorrow(arguments[0]);
  |  | 4450|  1.12M|                PyObject *arg = PyStackRef_AsPyObjectBorrow(arguments[1]);
  |  | 4451|  1.12M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4452|  1.12M|                _PyFrame_StackPointerValidate(frame);
  |  | 4453|  1.12M|                PyObject *res_o = _PyCFunction_TrampolineCall(cfunc, self, arg);
  |  |  ------------------
  |  |  |  |  996|  1.12M|    (meth)((self), (args))
  |  |  ------------------
  |  | 4454|  1.12M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4455|  1.12M|                _Py_LeaveRecursiveCallTstate(tstate);
  |  | 4456|  1.12M|                assert((res_o != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
  |  |  ------------------
  |  |  |  Branch (4456:17): [True: 1.12M, False: 0]
  |  |  ------------------
  |  | 4457|  1.12M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4457:21): [True: 0, False: 1.12M]
  |  |  ------------------
  |  | 4458|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4459|      0|                }
  |  | 4460|  1.12M|                c = callable;
  |  | 4461|  1.12M|                s = arguments[0];
  |  | 4462|  1.12M|                a = arguments[1];
  |  | 4463|  1.12M|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4464|  1.12M|            }
  |  | 4465|       |            // _POP_TOP
  |  | 4466|      0|            {
  |  | 4467|  1.12M|                value = a;
  |  | 4468|  1.12M|                stack_pointer[-2 - oparg] = res;
  |  | 4469|  1.12M|                stack_pointer[-1 - oparg] = c;
  |  | 4470|  1.12M|                stack_pointer[-oparg] = s;
  |  | 4471|  1.12M|                stack_pointer += 1 - oparg;
  |  | 4472|  1.12M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.12M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4473|  1.12M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4474|  1.12M|                _PyFrame_StackPointerValidate(frame);
  |  | 4475|  1.12M|                PyStackRef_XCLOSE(value);
  |  | 4476|  1.12M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4477|  1.12M|            }
  |  | 4478|       |            // _POP_TOP
  |  | 4479|  1.12M|            {
  |  | 4480|  1.12M|                value = s;
  |  | 4481|  1.12M|                stack_pointer += -1;
  |  | 4482|  1.12M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.12M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4483|  1.12M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4484|  1.12M|                _PyFrame_StackPointerValidate(frame);
  |  | 4485|  1.12M|                PyStackRef_XCLOSE(value);
  |  | 4486|  1.12M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4487|  1.12M|            }
  |  | 4488|       |            // _POP_TOP
  |  | 4489|  1.12M|            {
  |  | 4490|  1.12M|                value = c;
  |  | 4491|  1.12M|                stack_pointer += -1;
  |  | 4492|  1.12M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.12M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4493|  1.12M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4494|  1.12M|                _PyFrame_StackPointerValidate(frame);
  |  | 4495|  1.12M|                PyStackRef_XCLOSE(value);
  |  | 4496|  1.12M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4497|  1.12M|            }
  |  | 4498|       |            // _CHECK_PERIODIC_AT_END
  |  | 4499|  1.12M|            {
  |  | 4500|  1.12M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4500:17): [True: 1.12M, False: 0]
  |  |  ------------------
  |  | 4501|  1.12M|                _PyFrame_StackPointerValidate(frame);
  |  | 4502|  1.12M|                int err = check_periodics_at_end(tstate, frame);
  |  | 4503|  1.12M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4504|  1.12M|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4504:21): [True: 0, False: 1.12M]
  |  |  ------------------
  |  | 4505|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4506|      0|                }
  |  | 4507|  1.12M|            }
  |  | 4508|  1.12M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.12M|    { \
  |  |  |  |  201|  1.12M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.12M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.12M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.12M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.12M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.12M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.12M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.12M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.12M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.12M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.12M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.12M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.12M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.12M|    }
  |  |  ------------------
  |  | 4509|  1.12M|        }
  |  | 4510|       |
  |  | 4511|   269k|        TARGET(CALL_NON_PY_GENERAL) {
  |  |  ------------------
  |  |  |  |  132|   269k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4512|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4513|       |            int opcode = CALL_NON_PY_GENERAL;
  |  | 4514|       |            (void)(opcode);
  |  | 4515|       |            #endif
  |  | 4516|   269k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4517|   269k|            (void)this_instr;
  |  | 4518|   269k|            frame->instr_ptr = next_instr;
  |  | 4519|   269k|            next_instr += 4;
  |  | 4520|   269k|            INSTRUCTION_STATS(CALL_NON_PY_GENERAL);
  |  |  ------------------
  |  |  |  |   71|   269k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4521|   269k|            opcode = CALL_NON_PY_GENERAL;
  |  |  ------------------
  |  |  |  |  165|   269k|#define CALL_NON_PY_GENERAL                    163
  |  |  ------------------
  |  | 4522|   269k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4523|   269k|            _PyStackRef callable;
  |  | 4524|   269k|            _PyStackRef self_or_null;
  |  | 4525|   269k|            _PyStackRef *args;
  |  | 4526|   269k|            _PyStackRef res;
  |  | 4527|       |            /* Skip 1 cache entry */
  |  | 4528|       |            /* Skip 2 cache entries */
  |  | 4529|       |            // _CHECK_IS_NOT_PY_CALLABLE
  |  | 4530|   269k|            {
  |  | 4531|   269k|                callable = stack_pointer[-2 - oparg];
  |  | 4532|   269k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4533|   269k|                if (PyFunction_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |   68|   269k|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   269k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   269k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   269k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 269k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4534|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4535|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4535:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4536|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4537|      0|                }
  |  | 4538|   269k|                if (Py_TYPE(callable_o) == &PyMethod_Type) {
  |  |  ------------------
  |  |  |  |  213|   269k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   269k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   269k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4538:21): [True: 0, False: 269k]
  |  |  ------------------
  |  | 4539|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4540|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4540:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4541|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4542|      0|                }
  |  | 4543|   269k|            }
  |  | 4544|       |            // _CALL_NON_PY_GENERAL
  |  | 4545|   269k|            {
  |  | 4546|   269k|                args = &stack_pointer[-oparg];
  |  | 4547|   269k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4548|   269k|                #if TIER_ONE
  |  | 4549|   269k|                assert(opcode != INSTRUMENTED_CALL);
  |  |  ------------------
  |  |  |  Branch (4549:17): [True: 269k, False: 0]
  |  |  ------------------
  |  | 4550|   269k|                #endif
  |  | 4551|   269k|                int total_args = oparg;
  |  | 4552|   269k|                _PyStackRef *arguments = args;
  |  | 4553|   269k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|   269k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|   269k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|   269k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4553:21): [True: 497, False: 269k]
  |  |  ------------------
  |  | 4554|    497|                    arguments--;
  |  | 4555|    497|                    total_args++;
  |  | 4556|    497|                }
  |  | 4557|   269k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4558|   269k|                _PyFrame_StackPointerValidate(frame);
  |  | 4559|   269k|                PyObject *res_o = _Py_VectorCall_StackRefSteal(
  |  | 4560|   269k|                    callable,
  |  | 4561|   269k|                    arguments,
  |  | 4562|   269k|                    total_args,
  |  | 4563|   269k|                    PyStackRef_NULL);
  |  | 4564|   269k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4565|   269k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4565:21): [True: 46, False: 269k]
  |  |  ------------------
  |  | 4566|     46|                    stack_pointer += -2 - oparg;
  |  | 4567|     46|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     46|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4568|     46|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|     46|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4569|      0|                }
  |  | 4570|   269k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4571|   269k|            }
  |  | 4572|       |            // _CHECK_PERIODIC_AT_END
  |  | 4573|      0|            {
  |  | 4574|   269k|                stack_pointer[-2 - oparg] = res;
  |  | 4575|   269k|                stack_pointer += -1 - oparg;
  |  | 4576|   269k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   269k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4577|   269k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4578|   269k|                _PyFrame_StackPointerValidate(frame);
  |  | 4579|   269k|                int err = check_periodics_at_end(tstate, frame);
  |  | 4580|   269k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4581|   269k|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4581:21): [True: 0, False: 269k]
  |  |  ------------------
  |  | 4582|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4583|      0|                }
  |  | 4584|   269k|            }
  |  | 4585|   269k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   269k|    { \
  |  |  |  |  201|   269k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   269k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   269k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   269k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   269k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   269k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   269k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   269k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 269k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   269k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   269k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   269k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   269k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   269k|    }
  |  |  ------------------
  |  | 4586|   269k|        }
  |  | 4587|       |
  |  | 4588|  6.45M|        TARGET(CALL_PY_EXACT_ARGS) {
  |  |  ------------------
  |  |  |  |  132|  6.45M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4589|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4590|       |            int opcode = CALL_PY_EXACT_ARGS;
  |  | 4591|       |            (void)(opcode);
  |  | 4592|       |            #endif
  |  | 4593|  6.45M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4594|  6.45M|            (void)this_instr;
  |  | 4595|  6.45M|            frame->instr_ptr = next_instr;
  |  | 4596|  6.45M|            next_instr += 4;
  |  | 4597|  6.45M|            INSTRUCTION_STATS(CALL_PY_EXACT_ARGS);
  |  |  ------------------
  |  |  |  |   71|  6.45M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4598|  6.45M|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4599|  6.45M|            _PyStackRef callable;
  |  | 4600|  6.45M|            _PyStackRef self_or_null;
  |  | 4601|  6.45M|            _PyStackRef *args;
  |  | 4602|  6.45M|            _PyStackRef new_frame;
  |  | 4603|       |            /* Skip 1 cache entry */
  |  | 4604|       |            // _CHECK_PEP_523
  |  | 4605|  6.45M|            {
  |  | 4606|  6.45M|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|  6.45M|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 6.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4607|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4608|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4608:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4609|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4610|      0|                }
  |  | 4611|  6.45M|            }
  |  | 4612|       |            // _CHECK_FUNCTION_VERSION
  |  | 4613|  6.45M|            {
  |  | 4614|  6.45M|                callable = stack_pointer[-2 - oparg];
  |  | 4615|  6.45M|                uint32_t func_version = read_u32(&this_instr[2].cache);
  |  | 4616|  6.45M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4617|  6.45M|                if (!PyFunction_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |   68|  6.45M|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  6.45M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  6.45M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  6.45M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4617:21): [True: 340, False: 6.45M]
  |  |  ------------------
  |  | 4618|    340|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|    340|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4619|    340|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4619:21): [True: 340, False: 0]
  |  |  ------------------
  |  | 4620|    340|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|    340|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4621|      0|                }
  |  | 4622|  6.45M|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 4623|  6.45M|                if (func->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (4623:21): [True: 348, False: 6.45M]
  |  |  ------------------
  |  | 4624|    348|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|    348|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4625|    348|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4625:21): [True: 348, False: 0]
  |  |  ------------------
  |  | 4626|    348|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|    348|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4627|      0|                }
  |  | 4628|  6.45M|            }
  |  | 4629|       |            // _CHECK_FUNCTION_EXACT_ARGS
  |  | 4630|  6.45M|            {
  |  | 4631|  6.45M|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4632|  6.45M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4633|  6.45M|                assert(PyFunction_Check(callable_o));
  |  |  ------------------
  |  |  |  Branch (4633:17): [True: 6.45M, False: 0]
  |  |  ------------------
  |  | 4634|  6.45M|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 4635|  6.45M|                PyCodeObject *code = (PyCodeObject *)func->func_code;
  |  | 4636|  6.45M|                if (code->co_argcount != oparg + (!PyStackRef_IsNull(self_or_null))) {
  |  |  ------------------
  |  |  |  |  482|  6.45M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  6.45M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  6.45M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4636:21): [True: 0, False: 6.45M]
  |  |  ------------------
  |  | 4637|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4638|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4638:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4639|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4640|      0|                }
  |  | 4641|  6.45M|            }
  |  | 4642|       |            // _CHECK_STACK_SPACE
  |  | 4643|  6.45M|            {
  |  | 4644|  6.45M|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4645|  6.45M|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 4646|  6.45M|                PyCodeObject *code = (PyCodeObject *)func->func_code;
  |  | 4647|  6.45M|                if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) {
  |  |  ------------------
  |  |  |  Branch (4647:21): [True: 0, False: 6.45M]
  |  |  ------------------
  |  | 4648|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4649|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4649:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4650|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4651|      0|                }
  |  | 4652|  6.45M|            }
  |  | 4653|       |            // _CHECK_RECURSION_REMAINING
  |  | 4654|  6.45M|            {
  |  | 4655|  6.45M|                if (tstate->py_recursion_remaining <= 1) {
  |  |  ------------------
  |  |  |  Branch (4655:21): [True: 0, False: 6.45M]
  |  |  ------------------
  |  | 4656|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4657|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4657:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4658|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4659|      0|                }
  |  | 4660|  6.45M|            }
  |  | 4661|       |            // _INIT_CALL_PY_EXACT_ARGS
  |  | 4662|  6.45M|            {
  |  | 4663|  6.45M|                args = &stack_pointer[-oparg];
  |  | 4664|  6.45M|                int has_self = !PyStackRef_IsNull(self_or_null);
  |  |  ------------------
  |  |  |  |  482|  6.45M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  6.45M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  6.45M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4665|  6.45M|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|  6.45M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4666|  6.45M|                _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, callable, oparg + has_self, frame);
  |  | 4667|  6.45M|                _PyStackRef *first_non_self_local = pushed_frame->localsplus + has_self;
  |  | 4668|  6.45M|                pushed_frame->localsplus[0] = self_or_null;
  |  | 4669|  16.5M|                for (int i = 0; i < oparg; i++) {
  |  |  ------------------
  |  |  |  Branch (4669:33): [True: 10.0M, False: 6.45M]
  |  |  ------------------
  |  | 4670|  10.0M|                    first_non_self_local[i] = args[i];
  |  | 4671|  10.0M|                }
  |  | 4672|  6.45M|                new_frame = PyStackRef_Wrap(pushed_frame);
  |  | 4673|  6.45M|            }
  |  | 4674|       |            // _SAVE_RETURN_OFFSET
  |  | 4675|  6.45M|            {
  |  | 4676|  6.45M|                #if TIER_ONE
  |  | 4677|  6.45M|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 4678|  6.45M|                #endif
  |  | 4679|       |                #if TIER_TWO
  |  | 4680|       |                frame->return_offset = oparg;
  |  | 4681|       |                #endif
  |  | 4682|  6.45M|            }
  |  | 4683|       |            // _PUSH_FRAME
  |  | 4684|  6.45M|            {
  |  | 4685|  6.45M|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (4685:17): [True: 6.45M, False: 0]
  |  |  ------------------
  |  | 4686|  6.45M|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 4687|  6.45M|                stack_pointer += -2 - oparg;
  |  | 4688|  6.45M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  6.45M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4689|  6.45M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4690|  6.45M|                _PyFrame_StackPointerValidate(frame);
  |  | 4691|  6.45M|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (4691:17): [True: 6.45M, False: 0]
  |  |  |  Branch (4691:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 4692|  6.45M|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|  6.45M|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 4693|  6.45M|                frame = tstate->current_frame = temp;
  |  | 4694|  6.45M|                tstate->py_recursion_remaining--;
  |  | 4695|  6.45M|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 4696|  6.45M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4697|  6.45M|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|  6.45M|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  6.45M|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  6.45M|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 6.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4698|       |                #ifdef Py_DEBUG
  |  | 4699|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 4700|       |                #endif
  |  | 4701|  6.45M|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|  6.45M|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 4702|  6.45M|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  6.45M|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 4703|  6.45M|            }
  |  | 4704|  6.45M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  6.45M|    { \
  |  |  |  |  201|  6.45M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  6.45M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  6.45M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  6.45M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  6.45M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  6.45M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  6.45M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  6.45M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 6.45M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  6.45M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  6.45M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  6.45M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  6.45M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  6.45M|    }
  |  |  ------------------
  |  | 4705|  6.45M|        }
  |  | 4706|       |
  |  | 4707|  53.1k|        TARGET(CALL_PY_GENERAL) {
  |  |  ------------------
  |  |  |  |  132|  53.1k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4708|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4709|       |            int opcode = CALL_PY_GENERAL;
  |  | 4710|       |            (void)(opcode);
  |  | 4711|       |            #endif
  |  | 4712|  53.1k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4713|  53.1k|            (void)this_instr;
  |  | 4714|  53.1k|            frame->instr_ptr = next_instr;
  |  | 4715|  53.1k|            next_instr += 4;
  |  | 4716|  53.1k|            INSTRUCTION_STATS(CALL_PY_GENERAL);
  |  |  ------------------
  |  |  |  |   71|  53.1k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4717|  53.1k|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4718|  53.1k|            _PyStackRef callable;
  |  | 4719|  53.1k|            _PyStackRef self_or_null;
  |  | 4720|  53.1k|            _PyStackRef *args;
  |  | 4721|  53.1k|            _PyStackRef new_frame;
  |  | 4722|       |            /* Skip 1 cache entry */
  |  | 4723|       |            // _CHECK_PEP_523
  |  | 4724|  53.1k|            {
  |  | 4725|  53.1k|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|  53.1k|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 53.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4726|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4727|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4727:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4728|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4729|      0|                }
  |  | 4730|  53.1k|            }
  |  | 4731|       |            // _CHECK_FUNCTION_VERSION
  |  | 4732|  53.1k|            {
  |  | 4733|  53.1k|                callable = stack_pointer[-2 - oparg];
  |  | 4734|  53.1k|                uint32_t func_version = read_u32(&this_instr[2].cache);
  |  | 4735|  53.1k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4736|  53.1k|                if (!PyFunction_Check(callable_o)) {
  |  |  ------------------
  |  |  |  |   68|  53.1k|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  53.1k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  53.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  53.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4736:21): [True: 0, False: 53.1k]
  |  |  ------------------
  |  | 4737|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4738|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4738:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4739|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4740|      0|                }
  |  | 4741|  53.1k|                PyFunctionObject *func = (PyFunctionObject *)callable_o;
  |  | 4742|  53.1k|                if (func->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (4742:21): [True: 66, False: 53.1k]
  |  |  ------------------
  |  | 4743|     66|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|     66|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4744|     66|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4744:21): [True: 66, False: 0]
  |  |  ------------------
  |  | 4745|     66|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|     66|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4746|      0|                }
  |  | 4747|  53.1k|            }
  |  | 4748|       |            // _CHECK_RECURSION_REMAINING
  |  | 4749|  53.1k|            {
  |  | 4750|  53.1k|                if (tstate->py_recursion_remaining <= 1) {
  |  |  ------------------
  |  |  |  Branch (4750:21): [True: 0, False: 53.1k]
  |  |  ------------------
  |  | 4751|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4752|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4752:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4753|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4754|      0|                }
  |  | 4755|  53.1k|            }
  |  | 4756|       |            // _PY_FRAME_GENERAL
  |  | 4757|  53.1k|            {
  |  | 4758|  53.1k|                args = &stack_pointer[-oparg];
  |  | 4759|  53.1k|                self_or_null = stack_pointer[-1 - oparg];
  |  | 4760|  53.1k|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4761|  53.1k|                int total_args = oparg;
  |  | 4762|  53.1k|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|  53.1k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  53.1k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  53.1k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4762:21): [True: 541, False: 52.5k]
  |  |  ------------------
  |  | 4763|    541|                    args--;
  |  | 4764|    541|                    total_args++;
  |  | 4765|    541|                }
  |  | 4766|  53.1k|                assert(Py_TYPE(callable_o) == &PyFunction_Type);
  |  |  ------------------
  |  |  |  Branch (4766:17): [True: 53.1k, False: 0]
  |  |  ------------------
  |  | 4767|  53.1k|                int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|  53.1k|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4768|  53.1k|                PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|  53.1k|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                               PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4768:36): [True: 53.1k, False: 0]
  |  |  ------------------
  |  | 4769|  53.1k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4770|  53.1k|                _PyFrame_StackPointerValidate(frame);
  |  | 4771|  53.1k|                _PyInterpreterFrame *temp = _PyEvalFramePushAndInit(
  |  | 4772|  53.1k|                    tstate, callable, locals,
  |  | 4773|  53.1k|                    args, total_args, NULL, frame
  |  | 4774|  53.1k|                );
  |  | 4775|  53.1k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4776|  53.1k|                stack_pointer += -2 - oparg;
  |  | 4777|  53.1k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  53.1k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4778|  53.1k|                if (temp == NULL) {
  |  |  ------------------
  |  |  |  Branch (4778:21): [True: 0, False: 53.1k]
  |  |  ------------------
  |  | 4779|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4780|      0|                }
  |  | 4781|  53.1k|                new_frame = PyStackRef_Wrap(temp);
  |  | 4782|  53.1k|            }
  |  | 4783|       |            // _SAVE_RETURN_OFFSET
  |  | 4784|      0|            {
  |  | 4785|  53.1k|                #if TIER_ONE
  |  | 4786|  53.1k|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 4787|  53.1k|                #endif
  |  | 4788|       |                #if TIER_TWO
  |  | 4789|       |                frame->return_offset = oparg;
  |  | 4790|       |                #endif
  |  | 4791|  53.1k|            }
  |  | 4792|       |            // _PUSH_FRAME
  |  | 4793|  53.1k|            {
  |  | 4794|  53.1k|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (4794:17): [True: 53.1k, False: 0]
  |  |  ------------------
  |  | 4795|  53.1k|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 4796|  53.1k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4797|  53.1k|                _PyFrame_StackPointerValidate(frame);
  |  | 4798|  53.1k|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (4798:17): [True: 53.1k, False: 0]
  |  |  |  Branch (4798:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 4799|  53.1k|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|  53.1k|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 4800|  53.1k|                frame = tstate->current_frame = temp;
  |  | 4801|  53.1k|                tstate->py_recursion_remaining--;
  |  | 4802|  53.1k|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 4803|  53.1k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4804|  53.1k|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|  53.1k|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  53.1k|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  53.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 53.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4805|       |                #ifdef Py_DEBUG
  |  | 4806|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 4807|       |                #endif
  |  | 4808|  53.1k|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|  53.1k|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 4809|  53.1k|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  53.1k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 4810|  53.1k|            }
  |  | 4811|  53.1k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  53.1k|    { \
  |  |  |  |  201|  53.1k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  53.1k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  53.1k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  53.1k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  53.1k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  53.1k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  53.1k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  53.1k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 53.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  53.1k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  53.1k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  53.1k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  53.1k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  53.1k|    }
  |  |  ------------------
  |  | 4812|  53.1k|        }
  |  | 4813|       |
  |  | 4814|    186|        TARGET(CALL_STR_1) {
  |  |  ------------------
  |  |  |  |  132|    186|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4815|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4816|       |            int opcode = CALL_STR_1;
  |  | 4817|       |            (void)(opcode);
  |  | 4818|       |            #endif
  |  | 4819|    186|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4820|    186|            (void)this_instr;
  |  | 4821|    186|            frame->instr_ptr = next_instr;
  |  | 4822|    186|            next_instr += 4;
  |  | 4823|    186|            INSTRUCTION_STATS(CALL_STR_1);
  |  |  ------------------
  |  |  |  |   71|    186|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4824|    186|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4825|    186|            _PyStackRef null;
  |  | 4826|    186|            _PyStackRef callable;
  |  | 4827|    186|            _PyStackRef arg;
  |  | 4828|    186|            _PyStackRef res;
  |  | 4829|    186|            _PyStackRef a;
  |  | 4830|    186|            _PyStackRef value;
  |  | 4831|       |            /* Skip 1 cache entry */
  |  | 4832|       |            /* Skip 2 cache entries */
  |  | 4833|       |            // _GUARD_NOS_NULL
  |  | 4834|    186|            {
  |  | 4835|    186|                null = stack_pointer[-2];
  |  | 4836|    186|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|    186|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    186|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    186|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4836:21): [True: 0, False: 186]
  |  |  ------------------
  |  | 4837|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4838|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4838:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4839|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4840|      0|                }
  |  | 4841|    186|            }
  |  | 4842|       |            // _GUARD_CALLABLE_STR_1
  |  | 4843|    186|            {
  |  | 4844|    186|                callable = stack_pointer[-3];
  |  | 4845|    186|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4846|    186|                if (callable_o != (PyObject *)&PyUnicode_Type) {
  |  |  ------------------
  |  |  |  Branch (4846:21): [True: 0, False: 186]
  |  |  ------------------
  |  | 4847|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4848|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4848:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4849|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4850|      0|                }
  |  | 4851|    186|            }
  |  | 4852|       |            // _CALL_STR_1
  |  | 4853|    186|            {
  |  | 4854|    186|                arg = stack_pointer[-1];
  |  | 4855|    186|                PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg);
  |  | 4856|    186|                assert(oparg == 1);
  |  |  ------------------
  |  |  |  Branch (4856:17): [True: 186, False: 0]
  |  |  ------------------
  |  | 4857|    186|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|    186|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4858|    186|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4859|    186|                _PyFrame_StackPointerValidate(frame);
  |  | 4860|    186|                PyObject *res_o = PyObject_Str(arg_o);
  |  | 4861|    186|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4862|    186|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4862:21): [True: 0, False: 186]
  |  |  ------------------
  |  | 4863|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4864|      0|                }
  |  | 4865|    186|                a = arg;
  |  | 4866|    186|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4867|    186|            }
  |  | 4868|       |            // _POP_TOP
  |  | 4869|      0|            {
  |  | 4870|    186|                value = a;
  |  | 4871|    186|                stack_pointer[-3] = res;
  |  | 4872|    186|                stack_pointer += -2;
  |  | 4873|    186|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    186|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4874|    186|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4875|    186|                _PyFrame_StackPointerValidate(frame);
  |  | 4876|    186|                PyStackRef_XCLOSE(value);
  |  | 4877|    186|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4878|    186|            }
  |  | 4879|       |            // _CHECK_PERIODIC_AT_END
  |  | 4880|    186|            {
  |  | 4881|    186|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4881:17): [True: 186, False: 0]
  |  |  ------------------
  |  | 4882|    186|                _PyFrame_StackPointerValidate(frame);
  |  | 4883|    186|                int err = check_periodics_at_end(tstate, frame);
  |  | 4884|    186|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4885|    186|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4885:21): [True: 0, False: 186]
  |  |  ------------------
  |  | 4886|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4887|      0|                }
  |  | 4888|    186|            }
  |  | 4889|    186|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    186|    { \
  |  |  |  |  201|    186|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    186|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    186|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    186|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    186|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    186|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    186|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    186|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 186]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    186|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    186|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    186|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    186|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    186|    }
  |  |  ------------------
  |  | 4890|    186|        }
  |  | 4891|       |
  |  | 4892|     10|        TARGET(CALL_TUPLE_1) {
  |  |  ------------------
  |  |  |  |  132|     10|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4893|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4894|       |            int opcode = CALL_TUPLE_1;
  |  | 4895|       |            (void)(opcode);
  |  | 4896|       |            #endif
  |  | 4897|     10|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4898|     10|            (void)this_instr;
  |  | 4899|     10|            frame->instr_ptr = next_instr;
  |  | 4900|     10|            next_instr += 4;
  |  | 4901|     10|            INSTRUCTION_STATS(CALL_TUPLE_1);
  |  |  ------------------
  |  |  |  |   71|     10|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4902|     10|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4903|     10|            _PyStackRef null;
  |  | 4904|     10|            _PyStackRef callable;
  |  | 4905|     10|            _PyStackRef arg;
  |  | 4906|     10|            _PyStackRef res;
  |  | 4907|     10|            _PyStackRef a;
  |  | 4908|     10|            _PyStackRef value;
  |  | 4909|       |            /* Skip 1 cache entry */
  |  | 4910|       |            /* Skip 2 cache entries */
  |  | 4911|       |            // _GUARD_NOS_NULL
  |  | 4912|     10|            {
  |  | 4913|     10|                null = stack_pointer[-2];
  |  | 4914|     10|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|     10|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|     10|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|     10|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4914:21): [True: 0, False: 10]
  |  |  ------------------
  |  | 4915|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4916|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4916:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4917|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4918|      0|                }
  |  | 4919|     10|            }
  |  | 4920|       |            // _GUARD_CALLABLE_TUPLE_1
  |  | 4921|     10|            {
  |  | 4922|     10|                callable = stack_pointer[-3];
  |  | 4923|     10|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 4924|     10|                if (callable_o != (PyObject *)&PyTuple_Type) {
  |  |  ------------------
  |  |  |  Branch (4924:21): [True: 0, False: 10]
  |  |  ------------------
  |  | 4925|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4926|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4926:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4927|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4928|      0|                }
  |  | 4929|     10|            }
  |  | 4930|       |            // _CALL_TUPLE_1
  |  | 4931|     10|            {
  |  | 4932|     10|                arg = stack_pointer[-1];
  |  | 4933|     10|                PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg);
  |  | 4934|     10|                assert(oparg == 1);
  |  |  ------------------
  |  |  |  Branch (4934:17): [True: 10, False: 0]
  |  |  ------------------
  |  | 4935|     10|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|     10|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 4936|     10|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4937|     10|                _PyFrame_StackPointerValidate(frame);
  |  | 4938|     10|                PyObject *res_o = PySequence_Tuple(arg_o);
  |  | 4939|     10|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4940|     10|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (4940:21): [True: 0, False: 10]
  |  |  ------------------
  |  | 4941|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4942|      0|                }
  |  | 4943|     10|                a = arg;
  |  | 4944|     10|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 4945|     10|            }
  |  | 4946|       |            // _POP_TOP
  |  | 4947|      0|            {
  |  | 4948|     10|                value = a;
  |  | 4949|     10|                stack_pointer[-3] = res;
  |  | 4950|     10|                stack_pointer += -2;
  |  | 4951|     10|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     10|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 4952|     10|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 4953|     10|                _PyFrame_StackPointerValidate(frame);
  |  | 4954|     10|                PyStackRef_XCLOSE(value);
  |  | 4955|     10|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4956|     10|            }
  |  | 4957|       |            // _CHECK_PERIODIC_AT_END
  |  | 4958|     10|            {
  |  | 4959|     10|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (4959:17): [True: 10, False: 0]
  |  |  ------------------
  |  | 4960|     10|                _PyFrame_StackPointerValidate(frame);
  |  | 4961|     10|                int err = check_periodics_at_end(tstate, frame);
  |  | 4962|     10|                _PyFrame_StackPointerInvalidate(frame);
  |  | 4963|     10|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (4963:21): [True: 0, False: 10]
  |  |  ------------------
  |  | 4964|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 4965|      0|                }
  |  | 4966|     10|            }
  |  | 4967|     10|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     10|    { \
  |  |  |  |  201|     10|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     10|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     10|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     10|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     10|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     10|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     10|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     10|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     10|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     10|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     10|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     10|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     10|    }
  |  |  ------------------
  |  | 4968|     10|        }
  |  | 4969|       |
  |  | 4970|    182|        TARGET(CALL_TYPE_1) {
  |  |  ------------------
  |  |  |  |  132|    182|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 4971|       |            #if _Py_TAIL_CALL_INTERP
  |  | 4972|       |            int opcode = CALL_TYPE_1;
  |  | 4973|       |            (void)(opcode);
  |  | 4974|       |            #endif
  |  | 4975|    182|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 4976|    182|            (void)this_instr;
  |  | 4977|    182|            frame->instr_ptr = next_instr;
  |  | 4978|    182|            next_instr += 4;
  |  | 4979|    182|            INSTRUCTION_STATS(CALL_TYPE_1);
  |  |  ------------------
  |  |  |  |   71|    182|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 4980|    182|            static_assert(INLINE_CACHE_ENTRIES_CALL == 3, "incorrect cache size");
  |  | 4981|    182|            _PyStackRef null;
  |  | 4982|    182|            _PyStackRef callable;
  |  | 4983|    182|            _PyStackRef arg;
  |  | 4984|    182|            _PyStackRef res;
  |  | 4985|    182|            _PyStackRef a;
  |  | 4986|    182|            _PyStackRef value;
  |  | 4987|       |            /* Skip 1 cache entry */
  |  | 4988|       |            /* Skip 2 cache entries */
  |  | 4989|       |            // _GUARD_NOS_NULL
  |  | 4990|    182|            {
  |  | 4991|    182|                null = stack_pointer[-2];
  |  | 4992|    182|                if (!PyStackRef_IsNull(null)) {
  |  |  ------------------
  |  |  |  |  482|    182|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    182|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    182|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (4992:21): [True: 0, False: 182]
  |  |  ------------------
  |  | 4993|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 4994|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (4994:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 4995|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 4996|      0|                }
  |  | 4997|    182|            }
  |  | 4998|       |            // _GUARD_CALLABLE_TYPE_1
  |  | 4999|    182|            {
  |  | 5000|    182|                callable = stack_pointer[-3];
  |  | 5001|    182|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 5002|    182|                if (callable_o != (PyObject *)&PyType_Type) {
  |  |  ------------------
  |  |  |  Branch (5002:21): [True: 0, False: 182]
  |  |  ------------------
  |  | 5003|      0|                    UPDATE_MISS_STATS(CALL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5004|      0|                    assert(_PyOpcode_Deopt[opcode] == (CALL));
  |  |  ------------------
  |  |  |  Branch (5004:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5005|      0|                    JUMP_TO_PREDICTED(CALL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5006|      0|                }
  |  | 5007|    182|            }
  |  | 5008|       |            // _CALL_TYPE_1
  |  | 5009|    182|            {
  |  | 5010|    182|                arg = stack_pointer[-1];
  |  | 5011|    182|                PyObject *arg_o = PyStackRef_AsPyObjectBorrow(arg);
  |  | 5012|    182|                assert(oparg == 1);
  |  |  ------------------
  |  |  |  Branch (5012:17): [True: 182, False: 0]
  |  |  ------------------
  |  | 5013|    182|                STAT_INC(CALL, hit);
  |  |  ------------------
  |  |  |  |   73|    182|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 5014|    182|                a = arg;
  |  | 5015|    182|                res = PyStackRef_FromPyObjectNew(Py_TYPE(arg_o));
  |  |  ------------------
  |  |  |  |  611|    182|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    182|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    182|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5016|    182|            }
  |  | 5017|       |            // _POP_TOP
  |  | 5018|      0|            {
  |  | 5019|    182|                value = a;
  |  | 5020|    182|                stack_pointer[-3] = res;
  |  | 5021|    182|                stack_pointer += -2;
  |  | 5022|    182|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    182|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5023|    182|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5024|    182|                _PyFrame_StackPointerValidate(frame);
  |  | 5025|    182|                PyStackRef_XCLOSE(value);
  |  | 5026|    182|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5027|    182|            }
  |  | 5028|    182|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    182|    { \
  |  |  |  |  201|    182|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    182|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    182|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    182|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    182|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    182|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    182|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    182|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    182|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    182|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    182|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    182|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    182|    }
  |  |  ------------------
  |  | 5029|    182|        }
  |  | 5030|       |
  |  | 5031|      0|        TARGET(CHECK_EG_MATCH) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5032|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5033|       |            int opcode = CHECK_EG_MATCH;
  |  | 5034|       |            (void)(opcode);
  |  | 5035|       |            #endif
  |  | 5036|      0|            frame->instr_ptr = next_instr;
  |  | 5037|      0|            next_instr += 1;
  |  | 5038|      0|            INSTRUCTION_STATS(CHECK_EG_MATCH);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5039|      0|            _PyStackRef exc_value_st;
  |  | 5040|      0|            _PyStackRef match_type_st;
  |  | 5041|      0|            _PyStackRef rest;
  |  | 5042|      0|            _PyStackRef match;
  |  | 5043|      0|            match_type_st = stack_pointer[-1];
  |  | 5044|      0|            exc_value_st = stack_pointer[-2];
  |  | 5045|      0|            PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st);
  |  | 5046|      0|            PyObject *match_type = PyStackRef_AsPyObjectBorrow(match_type_st);
  |  | 5047|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5048|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 5049|      0|            int err = _PyEval_CheckExceptStarTypeValid(tstate, match_type);
  |  | 5050|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5051|      0|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (5051:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5052|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5052:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5053|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5054|      0|                _PyStackRef tmp = match_type_st;
  |  | 5055|      0|                match_type_st = PyStackRef_NULL;
  |  | 5056|      0|                stack_pointer[-1] = match_type_st;
  |  | 5057|      0|                PyStackRef_CLOSE(tmp);
  |  | 5058|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5059|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5059:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5060|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5061|      0|                tmp = exc_value_st;
  |  | 5062|      0|                exc_value_st = PyStackRef_NULL;
  |  | 5063|      0|                stack_pointer[-2] = exc_value_st;
  |  | 5064|      0|                PyStackRef_CLOSE(tmp);
  |  | 5065|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5066|      0|                stack_pointer += -2;
  |  | 5067|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5068|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5069|      0|            }
  |  | 5070|      0|            PyObject *match_o = NULL;
  |  | 5071|      0|            PyObject *rest_o = NULL;
  |  | 5072|      0|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5072:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5073|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 5074|      0|            int res = _PyEval_ExceptionGroupMatch(frame, exc_value, match_type,
  |  | 5075|      0|                &match_o, &rest_o);
  |  | 5076|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5077|      0|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5077:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5078|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 5079|      0|            _PyStackRef tmp = match_type_st;
  |  | 5080|      0|            match_type_st = PyStackRef_NULL;
  |  | 5081|      0|            stack_pointer[-1] = match_type_st;
  |  | 5082|      0|            PyStackRef_CLOSE(tmp);
  |  | 5083|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5084|      0|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5084:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5085|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 5086|      0|            tmp = exc_value_st;
  |  | 5087|      0|            exc_value_st = PyStackRef_NULL;
  |  | 5088|      0|            stack_pointer[-2] = exc_value_st;
  |  | 5089|      0|            PyStackRef_CLOSE(tmp);
  |  | 5090|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5091|      0|            stack_pointer += -2;
  |  | 5092|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5093|      0|            if (res < 0) {
  |  |  ------------------
  |  |  |  Branch (5093:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5094|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5095|      0|            }
  |  | 5096|      0|            assert((match_o == NULL) == (rest_o == NULL));
  |  |  ------------------
  |  |  |  Branch (5096:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5097|      0|            if (match_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (5097:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5098|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5099|      0|            }
  |  | 5100|      0|            if (!Py_IsNone(match_o)) {
  |  |  ------------------
  |  |  |  |  621|      0|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5100:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5101|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5102|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5103|      0|                PyErr_SetHandledException(match_o);
  |  | 5104|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5105|      0|            }
  |  | 5106|      0|            rest = PyStackRef_FromPyObjectSteal(rest_o);
  |  | 5107|      0|            match = PyStackRef_FromPyObjectSteal(match_o);
  |  | 5108|      0|            stack_pointer[0] = rest;
  |  | 5109|      0|            stack_pointer[1] = match;
  |  | 5110|      0|            stack_pointer += 2;
  |  | 5111|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5112|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 5113|      0|        }
  |  | 5114|       |
  |  | 5115|  38.8k|        TARGET(CHECK_EXC_MATCH) {
  |  |  ------------------
  |  |  |  |  132|  38.8k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5116|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5117|       |            int opcode = CHECK_EXC_MATCH;
  |  | 5118|       |            (void)(opcode);
  |  | 5119|       |            #endif
  |  | 5120|  38.8k|            frame->instr_ptr = next_instr;
  |  | 5121|  38.8k|            next_instr += 1;
  |  | 5122|  38.8k|            INSTRUCTION_STATS(CHECK_EXC_MATCH);
  |  |  ------------------
  |  |  |  |   71|  38.8k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5123|  38.8k|            _PyStackRef left;
  |  | 5124|  38.8k|            _PyStackRef right;
  |  | 5125|  38.8k|            _PyStackRef b;
  |  | 5126|  38.8k|            right = stack_pointer[-1];
  |  | 5127|  38.8k|            left = stack_pointer[-2];
  |  | 5128|  38.8k|            PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5129|  38.8k|            PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5130|  38.8k|            assert(PyExceptionInstance_Check(left_o));
  |  |  ------------------
  |  |  |  Branch (5130:13): [True: 38.8k, False: 0]
  |  |  ------------------
  |  | 5131|  38.8k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5132|  38.8k|            _PyFrame_StackPointerValidate(frame);
  |  | 5133|  38.8k|            int err = _PyEval_CheckExceptTypeValid(tstate, right_o);
  |  | 5134|  38.8k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5135|  38.8k|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (5135:17): [True: 0, False: 38.8k]
  |  |  ------------------
  |  | 5136|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5137|      0|            }
  |  | 5138|  38.8k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5138:13): [True: 38.8k, False: 0]
  |  |  ------------------
  |  | 5139|  38.8k|            _PyFrame_StackPointerValidate(frame);
  |  | 5140|  38.8k|            int res = PyErr_GivenExceptionMatches(left_o, right_o);
  |  | 5141|  38.8k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5142|  38.8k|            stack_pointer += -1;
  |  | 5143|  38.8k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  38.8k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5144|  38.8k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5145|  38.8k|            _PyFrame_StackPointerValidate(frame);
  |  | 5146|  38.8k|            PyStackRef_CLOSE(right);
  |  | 5147|  38.8k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5148|  38.8k|            b = res ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  38.7k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  38.7k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           b = res ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  38.9k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    122|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5148:17): [True: 38.7k, False: 122]
  |  |  ------------------
  |  | 5149|  38.8k|            stack_pointer[0] = b;
  |  | 5150|  38.8k|            stack_pointer += 1;
  |  | 5151|  38.8k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  38.8k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5152|  38.8k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  38.8k|    { \
  |  |  |  |  201|  38.8k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  38.8k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  38.8k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  38.8k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  38.8k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  38.8k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  38.8k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  38.8k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 38.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  38.8k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  38.8k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  38.8k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  38.8k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  38.8k|    }
  |  |  ------------------
  |  | 5153|  38.8k|        }
  |  | 5154|       |
  |  | 5155|      0|        TARGET(CLEANUP_THROW) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5156|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5157|       |            int opcode = CLEANUP_THROW;
  |  | 5158|       |            (void)(opcode);
  |  | 5159|       |            #endif
  |  | 5160|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 5161|      0|            (void)this_instr;
  |  | 5162|      0|            frame->instr_ptr = next_instr;
  |  | 5163|      0|            next_instr += 1;
  |  | 5164|      0|            INSTRUCTION_STATS(CLEANUP_THROW);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5165|      0|            _PyStackRef sub_iter;
  |  | 5166|      0|            _PyStackRef null_in;
  |  | 5167|      0|            _PyStackRef last_sent_val;
  |  | 5168|      0|            _PyStackRef exc_value_st;
  |  | 5169|      0|            _PyStackRef none;
  |  | 5170|      0|            _PyStackRef null_out;
  |  | 5171|      0|            _PyStackRef value;
  |  | 5172|      0|            exc_value_st = stack_pointer[-1];
  |  | 5173|      0|            last_sent_val = stack_pointer[-2];
  |  | 5174|      0|            null_in = stack_pointer[-3];
  |  | 5175|      0|            sub_iter = stack_pointer[-4];
  |  | 5176|      0|            PyObject *exc_value = PyStackRef_AsPyObjectBorrow(exc_value_st);
  |  | 5177|      0|            #if !_Py_TAIL_CALL_INTERP
  |  | 5178|      0|            assert(throwflag);
  |  |  ------------------
  |  |  |  Branch (5178:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5179|      0|            #endif
  |  | 5180|      0|            assert(exc_value && PyExceptionInstance_Check(exc_value));
  |  |  ------------------
  |  |  |  Branch (5180:13): [True: 0, False: 0]
  |  |  |  Branch (5180:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 5181|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5182|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 5183|      0|            int matches = PyErr_GivenExceptionMatches(exc_value, PyExc_StopIteration);
  |  | 5184|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5185|      0|            if (matches) {
  |  |  ------------------
  |  |  |  Branch (5185:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5186|      0|                value = PyStackRef_FromPyObjectNew(((PyStopIterationObject *)exc_value)->value);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5187|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5187:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5188|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5189|      0|                _PyStackRef tmp = sub_iter;
  |  | 5190|      0|                sub_iter = value;
  |  | 5191|      0|                stack_pointer[-4] = sub_iter;
  |  | 5192|      0|                PyStackRef_CLOSE(tmp);
  |  | 5193|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5194|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5194:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5195|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5196|      0|                tmp = exc_value_st;
  |  | 5197|      0|                exc_value_st = PyStackRef_NULL;
  |  | 5198|      0|                stack_pointer[-1] = exc_value_st;
  |  | 5199|      0|                PyStackRef_CLOSE(tmp);
  |  | 5200|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5201|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5201:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5202|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5203|      0|                tmp = last_sent_val;
  |  | 5204|      0|                last_sent_val = PyStackRef_NULL;
  |  | 5205|      0|                stack_pointer[-2] = last_sent_val;
  |  | 5206|      0|                PyStackRef_CLOSE(tmp);
  |  | 5207|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5208|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5208:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5209|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5210|      0|                tmp = null_in;
  |  | 5211|      0|                null_in = PyStackRef_NULL;
  |  | 5212|      0|                stack_pointer[-3] = null_in;
  |  | 5213|      0|                PyStackRef_XCLOSE(tmp);
  |  | 5214|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5215|      0|                stack_pointer += -4;
  |  | 5216|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5217|      0|                null_out = null_in;
  |  | 5218|      0|                none = PyStackRef_None;
  |  |  ------------------
  |  |  |  |  485|      0|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5219|      0|            }
  |  | 5220|      0|            else {
  |  | 5221|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5221:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5222|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5223|      0|                _PyErr_SetRaisedException(tstate, Py_NewRef(exc_value));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5224|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5225|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5225:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5226|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5227|      0|                monitor_reraise(tstate, frame, this_instr);
  |  | 5228|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5229|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5229:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5230|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5231|      0|                JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5232|      0|            }
  |  | 5233|      0|            stack_pointer[0] = none;
  |  | 5234|      0|            stack_pointer[1] = null_out;
  |  | 5235|      0|            stack_pointer[2] = value;
  |  | 5236|      0|            stack_pointer += 3;
  |  | 5237|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5238|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 5239|      0|        }
  |  | 5240|       |
  |  | 5241|  11.9M|        TARGET(COMPARE_OP) {
  |  |  ------------------
  |  |  |  |  132|  11.9M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5242|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5243|       |            int opcode = COMPARE_OP;
  |  | 5244|       |            (void)(opcode);
  |  | 5245|       |            #endif
  |  | 5246|  11.9M|            frame->instr_ptr = next_instr;
  |  | 5247|  11.9M|            next_instr += 2;
  |  | 5248|  11.9M|            INSTRUCTION_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |   71|  11.9M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5249|  11.9M|            PREDICTED_COMPARE_OP:;
  |  | 5250|  11.9M|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  | 5251|  11.9M|            (void)this_instr;
  |  | 5252|  11.9M|            _PyStackRef left;
  |  | 5253|  11.9M|            _PyStackRef right;
  |  | 5254|  11.9M|            _PyStackRef res;
  |  | 5255|       |            // _SPECIALIZE_COMPARE_OP
  |  | 5256|  11.9M|            {
  |  | 5257|  11.9M|                right = stack_pointer[-1];
  |  | 5258|  11.9M|                left = stack_pointer[-2];
  |  | 5259|  11.9M|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 5260|  11.9M|                (void)counter;
  |  | 5261|  11.9M|                #if ENABLE_SPECIALIZATION
  |  | 5262|  11.9M|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  11.9M|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 1.71k, False: 11.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5263|  1.71k|                    next_instr = this_instr;
  |  | 5264|  1.71k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5265|  1.71k|                    _PyFrame_StackPointerValidate(frame);
  |  | 5266|  1.71k|                    _Py_Specialize_CompareOp(left, right, next_instr, oparg);
  |  | 5267|  1.71k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 5268|  1.71k|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|  1.71k|    { \
  |  |  |  |  217|  1.71k|        opcode = next_instr->op.code; \
  |  |  |  |  218|  1.71k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.71k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|  1.71k|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.71k|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|  1.71k|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|  1.71k|    }
  |  |  ------------------
  |  | 5269|  1.71k|                }
  |  | 5270|  11.9M|                OPCODE_DEFERRED_INC(COMPARE_OP);
  |  |  ------------------
  |  |  |  |   90|  11.9M|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 5271|  11.9M|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  11.9M|    do { \
  |  |  |  |  378|  11.9M|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  11.9M|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 11.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5272|  11.9M|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 5273|  11.9M|            }
  |  | 5274|       |            // _COMPARE_OP
  |  | 5275|  11.9M|            {
  |  | 5276|  11.9M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5277|  11.9M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5278|  11.9M|                assert((oparg >> 5) <= Py_GE);
  |  |  ------------------
  |  |  |  Branch (5278:17): [True: 11.9M, False: 1.71k]
  |  |  ------------------
  |  | 5279|  11.9M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5280|  11.9M|                _PyFrame_StackPointerValidate(frame);
  |  | 5281|  11.9M|                PyObject *res_o = PyObject_RichCompare(left_o, right_o, oparg >> 5);
  |  | 5282|  11.9M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5283|  11.9M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5283:17): [True: 11.9M, False: 0]
  |  |  ------------------
  |  | 5284|  11.9M|                _PyFrame_StackPointerValidate(frame);
  |  | 5285|  11.9M|                _PyStackRef tmp = right;
  |  | 5286|  11.9M|                right = PyStackRef_NULL;
  |  | 5287|  11.9M|                stack_pointer[-1] = right;
  |  | 5288|  11.9M|                PyStackRef_CLOSE(tmp);
  |  | 5289|  11.9M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5290|  11.9M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5290:17): [True: 11.9M, False: 0]
  |  |  ------------------
  |  | 5291|  11.9M|                _PyFrame_StackPointerValidate(frame);
  |  | 5292|  11.9M|                tmp = left;
  |  | 5293|  11.9M|                left = PyStackRef_NULL;
  |  | 5294|  11.9M|                stack_pointer[-2] = left;
  |  | 5295|  11.9M|                PyStackRef_CLOSE(tmp);
  |  | 5296|  11.9M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5297|  11.9M|                stack_pointer += -2;
  |  | 5298|  11.9M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  11.9M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5299|  11.9M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (5299:21): [True: 0, False: 11.9M]
  |  |  ------------------
  |  | 5300|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5301|      0|                }
  |  | 5302|  11.9M|                if (oparg & 16) {
  |  |  ------------------
  |  |  |  Branch (5302:21): [True: 11.9M, False: 31]
  |  |  ------------------
  |  | 5303|  11.9M|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5304|  11.9M|                    _PyFrame_StackPointerValidate(frame);
  |  | 5305|  11.9M|                    int res_bool = PyObject_IsTrue(res_o);
  |  | 5306|  11.9M|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 5307|  11.9M|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5307:21): [True: 11.9M, False: 0]
  |  |  ------------------
  |  | 5308|  11.9M|                    _PyFrame_StackPointerValidate(frame);
  |  | 5309|  11.9M|                    Py_DECREF(res_o);
  |  |  ------------------
  |  |  |  |   80|  11.9M|    do { \
  |  |  |  |   81|  11.9M|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  11.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|  11.9M|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|  11.9M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  11.9M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  11.9M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 11.9M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|  11.9M|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|  11.9M|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|  11.9M|            break; \
  |  |  |  |   85|  11.9M|        } \
  |  |  |  |   86|  11.9M|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5310|  11.9M|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 5311|  11.9M|                    if (res_bool < 0) {
  |  |  ------------------
  |  |  |  Branch (5311:25): [True: 0, False: 11.9M]
  |  |  ------------------
  |  | 5312|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5313|      0|                    }
  |  | 5314|  11.9M|                    res = res_bool ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  7.01M|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  7.01M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                   res = res_bool ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  16.9M|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  4.94M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5314:27): [True: 7.01M, False: 4.94M]
  |  |  ------------------
  |  | 5315|  11.9M|                }
  |  | 5316|     31|                else {
  |  | 5317|     31|                    res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 5318|     31|                }
  |  | 5319|  11.9M|            }
  |  | 5320|  11.9M|            stack_pointer[0] = res;
  |  | 5321|  11.9M|            stack_pointer += 1;
  |  | 5322|  11.9M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  11.9M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5323|  11.9M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  11.9M|    { \
  |  |  |  |  201|  11.9M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  11.9M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  11.9M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  11.9M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  11.9M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  11.9M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  11.9M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  11.9M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 11.9M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  11.9M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  11.9M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  11.9M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  11.9M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  11.9M|    }
  |  |  ------------------
  |  | 5324|  11.9M|        }
  |  | 5325|       |
  |  | 5326|    295|        TARGET(COMPARE_OP_FLOAT) {
  |  |  ------------------
  |  |  |  |  132|    295|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5327|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5328|       |            int opcode = COMPARE_OP_FLOAT;
  |  | 5329|       |            (void)(opcode);
  |  | 5330|       |            #endif
  |  | 5331|    295|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 5332|    295|            (void)this_instr;
  |  | 5333|    295|            frame->instr_ptr = next_instr;
  |  | 5334|    295|            next_instr += 2;
  |  | 5335|    295|            INSTRUCTION_STATS(COMPARE_OP_FLOAT);
  |  |  ------------------
  |  |  |  |   71|    295|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5336|    295|            static_assert(INLINE_CACHE_ENTRIES_COMPARE_OP == 1, "incorrect cache size");
  |  | 5337|    295|            _PyStackRef value;
  |  | 5338|    295|            _PyStackRef left;
  |  | 5339|    295|            _PyStackRef right;
  |  | 5340|    295|            _PyStackRef res;
  |  | 5341|    295|            _PyStackRef l;
  |  | 5342|    295|            _PyStackRef r;
  |  | 5343|       |            // _GUARD_TOS_FLOAT
  |  | 5344|    295|            {
  |  | 5345|    295|                value = stack_pointer[-1];
  |  | 5346|    295|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 5347|    295|                if (!PyFloat_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |   17|    295|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    295|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    295|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    295|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5347:21): [True: 1, False: 294]
  |  |  ------------------
  |  | 5348|      1|                    UPDATE_MISS_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  299|      1|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5349|      1|                    assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP));
  |  |  ------------------
  |  |  |  Branch (5349:21): [True: 1, False: 0]
  |  |  ------------------
  |  | 5350|      1|                    JUMP_TO_PREDICTED(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  136|      1|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5351|      0|                }
  |  | 5352|    295|            }
  |  | 5353|       |            // _GUARD_NOS_FLOAT
  |  | 5354|    294|            {
  |  | 5355|    294|                left = stack_pointer[-2];
  |  | 5356|    294|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5357|    294|                if (!PyFloat_CheckExact(left_o)) {
  |  |  ------------------
  |  |  |  |   17|    294|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    294|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    294|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    294|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5357:21): [True: 0, False: 294]
  |  |  ------------------
  |  | 5358|      0|                    UPDATE_MISS_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5359|      0|                    assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP));
  |  |  ------------------
  |  |  |  Branch (5359:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5360|      0|                    JUMP_TO_PREDICTED(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5361|      0|                }
  |  | 5362|    294|            }
  |  | 5363|       |            /* Skip 1 cache entry */
  |  | 5364|       |            // _COMPARE_OP_FLOAT
  |  | 5365|    294|            {
  |  | 5366|    294|                right = value;
  |  | 5367|    294|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5368|    294|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5369|    294|                STAT_INC(COMPARE_OP, hit);
  |  |  ------------------
  |  |  |  |   73|    294|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 5370|    294|                double dleft = PyFloat_AS_DOUBLE(left_o);
  |  |  ------------------
  |  |  |  |   18|    294|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    294|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    294|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5371|    294|                double dright = PyFloat_AS_DOUBLE(right_o);
  |  |  ------------------
  |  |  |  |   18|    294|#define PyFloat_AS_DOUBLE(op) PyFloat_AS_DOUBLE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    294|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    294|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5372|    294|                int sign_ish = COMPARISON_BIT(dleft, dright);
  |  |  ------------------
  |  |  |  |  523|    294|#define COMPARISON_BIT(x, y) (1 << (2 * ((x) >= (y)) + ((x) <= (y))))
  |  |  ------------------
  |  | 5373|    294|                l = left;
  |  | 5374|    294|                r = right;
  |  | 5375|    294|                res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|      0|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|    588|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    294|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5375:23): [True: 0, False: 294]
  |  |  ------------------
  |  | 5376|    294|            }
  |  | 5377|       |            // _POP_TOP_FLOAT
  |  | 5378|    294|            {
  |  | 5379|    294|                value = r;
  |  | 5380|    294|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (5380:17): [True: 294, False: 0]
  |  |  ------------------
  |  | 5381|    294|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  | 5382|    294|            }
  |  | 5383|       |            // _POP_TOP_FLOAT
  |  | 5384|      0|            {
  |  | 5385|    294|                value = l;
  |  | 5386|    294|                assert(PyFloat_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (5386:17): [True: 294, False: 0]
  |  |  ------------------
  |  | 5387|    294|                PyStackRef_CLOSE_SPECIALIZED(value, _PyFloat_ExactDealloc);
  |  | 5388|    294|            }
  |  | 5389|      0|            stack_pointer[-2] = res;
  |  | 5390|    294|            stack_pointer += -1;
  |  | 5391|    294|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    294|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5392|    294|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    294|    { \
  |  |  |  |  201|    294|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    294|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    294|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    294|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    294|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    294|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    294|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    294|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 294]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    294|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    294|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    294|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    294|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    294|    }
  |  |  ------------------
  |  | 5393|    294|        }
  |  | 5394|       |
  |  | 5395|  29.6M|        TARGET(COMPARE_OP_INT) {
  |  |  ------------------
  |  |  |  |  132|  29.6M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5396|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5397|       |            int opcode = COMPARE_OP_INT;
  |  | 5398|       |            (void)(opcode);
  |  | 5399|       |            #endif
  |  | 5400|  29.6M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 5401|  29.6M|            (void)this_instr;
  |  | 5402|  29.6M|            frame->instr_ptr = next_instr;
  |  | 5403|  29.6M|            next_instr += 2;
  |  | 5404|  29.6M|            INSTRUCTION_STATS(COMPARE_OP_INT);
  |  |  ------------------
  |  |  |  |   71|  29.6M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5405|  29.6M|            static_assert(INLINE_CACHE_ENTRIES_COMPARE_OP == 1, "incorrect cache size");
  |  | 5406|  29.6M|            _PyStackRef value;
  |  | 5407|  29.6M|            _PyStackRef left;
  |  | 5408|  29.6M|            _PyStackRef right;
  |  | 5409|  29.6M|            _PyStackRef res;
  |  | 5410|  29.6M|            _PyStackRef l;
  |  | 5411|  29.6M|            _PyStackRef r;
  |  | 5412|       |            // _GUARD_TOS_INT
  |  | 5413|  29.6M|            {
  |  | 5414|  29.6M|                value = stack_pointer[-1];
  |  | 5415|  29.6M|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 5416|  29.6M|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (5416:21): [True: 0, False: 29.6M]
  |  |  ------------------
  |  | 5417|      0|                    UPDATE_MISS_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5418|      0|                    assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP));
  |  |  ------------------
  |  |  |  Branch (5418:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5419|      0|                    JUMP_TO_PREDICTED(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5420|      0|                }
  |  | 5421|  29.6M|            }
  |  | 5422|       |            // _GUARD_NOS_INT
  |  | 5423|  29.6M|            {
  |  | 5424|  29.6M|                left = stack_pointer[-2];
  |  | 5425|  29.6M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5426|  29.6M|                if (!_PyLong_CheckExactAndCompact(left_o)) {
  |  |  ------------------
  |  |  |  Branch (5426:21): [True: 107, False: 29.6M]
  |  |  ------------------
  |  | 5427|    107|                    UPDATE_MISS_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  299|    107|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5428|    107|                    assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP));
  |  |  ------------------
  |  |  |  Branch (5428:21): [True: 107, False: 0]
  |  |  ------------------
  |  | 5429|    107|                    JUMP_TO_PREDICTED(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  136|    107|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5430|      0|                }
  |  | 5431|  29.6M|            }
  |  | 5432|       |            /* Skip 1 cache entry */
  |  | 5433|       |            // _COMPARE_OP_INT
  |  | 5434|  29.6M|            {
  |  | 5435|  29.6M|                right = value;
  |  | 5436|  29.6M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5437|  29.6M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5438|  29.6M|                assert(_PyLong_IsCompact((PyLongObject *)left_o));
  |  |  ------------------
  |  |  |  Branch (5438:17): [True: 29.6M, False: 0]
  |  |  ------------------
  |  | 5439|  29.6M|                assert(_PyLong_IsCompact((PyLongObject *)right_o));
  |  |  ------------------
  |  |  |  Branch (5439:17): [True: 29.6M, False: 0]
  |  |  ------------------
  |  | 5440|  29.6M|                STAT_INC(COMPARE_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  29.6M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 5441|  29.6M|                assert(_PyLong_DigitCount((PyLongObject *)left_o) <= 1 &&
  |  |  ------------------
  |  |  |  Branch (5441:17): [True: 29.6M, False: 0]
  |  |  |  Branch (5441:17): [True: 29.6M, False: 0]
  |  |  ------------------
  |  | 5442|  29.6M|                   _PyLong_DigitCount((PyLongObject *)right_o) <= 1);
  |  | 5443|  29.6M|                Py_ssize_t ileft = _PyLong_CompactValue((PyLongObject *)left_o);
  |  | 5444|  29.6M|                Py_ssize_t iright = _PyLong_CompactValue((PyLongObject *)right_o);
  |  | 5445|  29.6M|                int sign_ish = COMPARISON_BIT(ileft, iright);
  |  |  ------------------
  |  |  |  |  523|  29.6M|#define COMPARISON_BIT(x, y) (1 << (2 * ((x) >= (y)) + ((x) <= (y))))
  |  |  ------------------
  |  | 5446|  29.6M|                l = left;
  |  | 5447|  29.6M|                r = right;
  |  | 5448|  29.6M|                res =  (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  9.64M|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  9.64M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res =  (sign_ish & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  49.6M|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  20.0M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5448:24): [True: 9.64M, False: 20.0M]
  |  |  ------------------
  |  | 5449|  29.6M|            }
  |  | 5450|       |            // _POP_TOP_INT
  |  | 5451|      0|            {
  |  | 5452|  29.6M|                value = r;
  |  | 5453|  29.6M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (5453:17): [True: 29.6M, False: 0]
  |  |  ------------------
  |  | 5454|  29.6M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 5455|  29.6M|            }
  |  | 5456|       |            // _POP_TOP_INT
  |  | 5457|      0|            {
  |  | 5458|  29.6M|                value = l;
  |  | 5459|  29.6M|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (5459:17): [True: 29.6M, False: 0]
  |  |  ------------------
  |  | 5460|  29.6M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  | 5461|  29.6M|            }
  |  | 5462|      0|            stack_pointer[-2] = res;
  |  | 5463|  29.6M|            stack_pointer += -1;
  |  | 5464|  29.6M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  29.6M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5465|  29.6M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  29.6M|    { \
  |  |  |  |  201|  29.6M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  29.6M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  29.6M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  29.6M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  29.6M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  29.6M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  29.6M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  29.6M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 29.6M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  29.6M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  29.6M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  29.6M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  29.6M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  29.6M|    }
  |  |  ------------------
  |  | 5466|  29.6M|        }
  |  | 5467|       |
  |  | 5468|  13.5M|        TARGET(COMPARE_OP_STR) {
  |  |  ------------------
  |  |  |  |  132|  13.5M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5469|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5470|       |            int opcode = COMPARE_OP_STR;
  |  | 5471|       |            (void)(opcode);
  |  | 5472|       |            #endif
  |  | 5473|  13.5M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 5474|  13.5M|            (void)this_instr;
  |  | 5475|  13.5M|            frame->instr_ptr = next_instr;
  |  | 5476|  13.5M|            next_instr += 2;
  |  | 5477|  13.5M|            INSTRUCTION_STATS(COMPARE_OP_STR);
  |  |  ------------------
  |  |  |  |   71|  13.5M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5478|  13.5M|            static_assert(INLINE_CACHE_ENTRIES_COMPARE_OP == 1, "incorrect cache size");
  |  | 5479|  13.5M|            _PyStackRef value;
  |  | 5480|  13.5M|            _PyStackRef nos;
  |  | 5481|  13.5M|            _PyStackRef left;
  |  | 5482|  13.5M|            _PyStackRef right;
  |  | 5483|  13.5M|            _PyStackRef res;
  |  | 5484|  13.5M|            _PyStackRef l;
  |  | 5485|  13.5M|            _PyStackRef r;
  |  | 5486|       |            // _GUARD_TOS_UNICODE
  |  | 5487|  13.5M|            {
  |  | 5488|  13.5M|                value = stack_pointer[-1];
  |  | 5489|  13.5M|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 5490|  13.5M|                if (!PyUnicode_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |  104|  13.5M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  13.5M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  13.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  13.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5490:21): [True: 7, False: 13.5M]
  |  |  ------------------
  |  | 5491|      7|                    UPDATE_MISS_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  299|      7|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5492|      7|                    assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP));
  |  |  ------------------
  |  |  |  Branch (5492:21): [True: 7, False: 0]
  |  |  ------------------
  |  | 5493|      7|                    JUMP_TO_PREDICTED(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  136|      7|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5494|      0|                }
  |  | 5495|  13.5M|            }
  |  | 5496|       |            // _GUARD_NOS_UNICODE
  |  | 5497|  13.5M|            {
  |  | 5498|  13.5M|                nos = stack_pointer[-2];
  |  | 5499|  13.5M|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  | 5500|  13.5M|                if (!PyUnicode_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |  104|  13.5M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  13.5M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  13.5M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  13.5M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5500:21): [True: 32, False: 13.5M]
  |  |  ------------------
  |  | 5501|     32|                    UPDATE_MISS_STATS(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  299|     32|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5502|     32|                    assert(_PyOpcode_Deopt[opcode] == (COMPARE_OP));
  |  |  ------------------
  |  |  |  Branch (5502:21): [True: 32, False: 0]
  |  |  ------------------
  |  | 5503|     32|                    JUMP_TO_PREDICTED(COMPARE_OP);
  |  |  ------------------
  |  |  |  |  136|     32|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5504|      0|                }
  |  | 5505|  13.5M|            }
  |  | 5506|       |            /* Skip 1 cache entry */
  |  | 5507|       |            // _COMPARE_OP_STR
  |  | 5508|  13.5M|            {
  |  | 5509|  13.5M|                right = value;
  |  | 5510|  13.5M|                left = nos;
  |  | 5511|  13.5M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5512|  13.5M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5513|  13.5M|                STAT_INC(COMPARE_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  13.5M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 5514|  13.5M|                int eq = _PyUnicode_Equal(left_o, right_o);
  |  | 5515|  13.5M|                assert((oparg >> 5) == Py_EQ || (oparg >> 5) == Py_NE);
  |  |  ------------------
  |  |  |  Branch (5515:17): [True: 13.2M, False: 275k]
  |  |  |  Branch (5515:17): [True: 275k, False: 0]
  |  |  ------------------
  |  | 5516|  13.5M|                l = left;
  |  | 5517|  13.5M|                r = right;
  |  | 5518|  13.5M|                assert(eq == 0 || eq == 1);
  |  |  ------------------
  |  |  |  Branch (5518:17): [True: 13.0M, False: 481k]
  |  |  |  Branch (5518:17): [True: 481k, False: 0]
  |  |  ------------------
  |  | 5519|  13.5M|                assert((oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS);
  |  |  ------------------
  |  |  |  Branch (5519:17): [True: 275k, False: 13.2M]
  |  |  |  Branch (5519:17): [True: 13.2M, False: 0]
  |  |  ------------------
  |  | 5520|  13.5M|                assert(COMPARISON_NOT_EQUALS + 1 == COMPARISON_EQUALS);
  |  |  ------------------
  |  |  |  Branch (5520:17): [True: 13.5M, Folded]
  |  |  ------------------
  |  | 5521|  13.5M|                res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  538|  13.5M|#define COMPARISON_NOT_EQUALS (COMPARISON_UNORDERED | COMPARISON_LESS_THAN | COMPARISON_GREATER_THAN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  532|  13.5M|#define COMPARISON_UNORDERED 1
  |  |  |  |  ------------------
  |  |  |  |               #define COMPARISON_NOT_EQUALS (COMPARISON_UNORDERED | COMPARISON_LESS_THAN | COMPARISON_GREATER_THAN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  534|  13.5M|#define COMPARISON_LESS_THAN 2
  |  |  |  |  ------------------
  |  |  |  |               #define COMPARISON_NOT_EQUALS (COMPARISON_UNORDERED | COMPARISON_LESS_THAN | COMPARISON_GREATER_THAN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  535|  13.5M|#define COMPARISON_GREATER_THAN 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|   207k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   207k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = ((COMPARISON_NOT_EQUALS + eq) & oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  26.8M|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  13.2M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5521:23): [True: 207k, False: 13.2M]
  |  |  ------------------
  |  | 5522|  13.5M|            }
  |  | 5523|       |            // _POP_TOP_UNICODE
  |  | 5524|      0|            {
  |  | 5525|  13.5M|                value = r;
  |  | 5526|  13.5M|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (5526:17): [True: 13.5M, False: 0]
  |  |  ------------------
  |  | 5527|  13.5M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  | 5528|  13.5M|            }
  |  | 5529|       |            // _POP_TOP_UNICODE
  |  | 5530|      0|            {
  |  | 5531|  13.5M|                value = l;
  |  | 5532|  13.5M|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (5532:17): [True: 13.5M, False: 0]
  |  |  ------------------
  |  | 5533|  13.5M|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  | 5534|  13.5M|            }
  |  | 5535|      0|            stack_pointer[-2] = res;
  |  | 5536|  13.5M|            stack_pointer += -1;
  |  | 5537|  13.5M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  13.5M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5538|  13.5M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  13.5M|    { \
  |  |  |  |  201|  13.5M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  13.5M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  13.5M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  13.5M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  13.5M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  13.5M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  13.5M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  13.5M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 13.5M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  13.5M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  13.5M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  13.5M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  13.5M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  13.5M|    }
  |  |  ------------------
  |  | 5539|  13.5M|        }
  |  | 5540|       |
  |  | 5541|   322k|        TARGET(CONTAINS_OP) {
  |  |  ------------------
  |  |  |  |  132|   322k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5542|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5543|       |            int opcode = CONTAINS_OP;
  |  | 5544|       |            (void)(opcode);
  |  | 5545|       |            #endif
  |  | 5546|   322k|            frame->instr_ptr = next_instr;
  |  | 5547|   322k|            next_instr += 2;
  |  | 5548|   322k|            INSTRUCTION_STATS(CONTAINS_OP);
  |  |  ------------------
  |  |  |  |   71|   322k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5549|   322k|            PREDICTED_CONTAINS_OP:;
  |  | 5550|   322k|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  | 5551|   322k|            (void)this_instr;
  |  | 5552|   322k|            _PyStackRef right;
  |  | 5553|   322k|            _PyStackRef left;
  |  | 5554|   322k|            _PyStackRef b;
  |  | 5555|   322k|            _PyStackRef l;
  |  | 5556|   322k|            _PyStackRef r;
  |  | 5557|   322k|            _PyStackRef value;
  |  | 5558|       |            // _SPECIALIZE_CONTAINS_OP
  |  | 5559|   322k|            {
  |  | 5560|   322k|                right = stack_pointer[-1];
  |  | 5561|   322k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 5562|   322k|                (void)counter;
  |  | 5563|   322k|                #if ENABLE_SPECIALIZATION
  |  | 5564|   322k|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|   322k|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 197, False: 322k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5565|    197|                    next_instr = this_instr;
  |  | 5566|    197|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5567|    197|                    _PyFrame_StackPointerValidate(frame);
  |  | 5568|    197|                    _Py_Specialize_ContainsOp(right, next_instr);
  |  | 5569|    197|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 5570|    197|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|    197|    { \
  |  |  |  |  217|    197|        opcode = next_instr->op.code; \
  |  |  |  |  218|    197|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    197|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|    197|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    197|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|    197|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|    197|    }
  |  |  ------------------
  |  | 5571|    197|                }
  |  | 5572|   322k|                OPCODE_DEFERRED_INC(CONTAINS_OP);
  |  |  ------------------
  |  |  |  |   90|   322k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 5573|   322k|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|   322k|    do { \
  |  |  |  |  378|   322k|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|   322k|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 322k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5574|   322k|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 5575|   322k|            }
  |  | 5576|       |            // _CONTAINS_OP
  |  | 5577|   322k|            {
  |  | 5578|   322k|                left = stack_pointer[-2];
  |  | 5579|   322k|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5580|   322k|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5581|   322k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5582|   322k|                _PyFrame_StackPointerValidate(frame);
  |  | 5583|   322k|                int res = PySequence_Contains(right_o, left_o);
  |  | 5584|   322k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5585|   322k|                if (res < 0) {
  |  |  ------------------
  |  |  |  Branch (5585:21): [True: 0, False: 322k]
  |  |  ------------------
  |  | 5586|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5587|      0|                }
  |  | 5588|   322k|                b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  4.43k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  4.43k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|   641k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   318k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5588:21): [True: 4.43k, False: 318k]
  |  |  ------------------
  |  | 5589|   322k|                l = left;
  |  | 5590|   322k|                r = right;
  |  | 5591|   322k|            }
  |  | 5592|       |            // _POP_TOP
  |  | 5593|      0|            {
  |  | 5594|   322k|                value = r;
  |  | 5595|   322k|                stack_pointer[-2] = b;
  |  | 5596|   322k|                stack_pointer[-1] = l;
  |  | 5597|   322k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5597:17): [True: 322k, False: 197]
  |  |  ------------------
  |  | 5598|   322k|                _PyFrame_StackPointerValidate(frame);
  |  | 5599|   322k|                PyStackRef_XCLOSE(value);
  |  | 5600|   322k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5601|   322k|            }
  |  | 5602|       |            // _POP_TOP
  |  | 5603|      0|            {
  |  | 5604|   322k|                value = l;
  |  | 5605|   322k|                stack_pointer += -1;
  |  | 5606|   322k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   322k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5607|   322k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5608|   322k|                _PyFrame_StackPointerValidate(frame);
  |  | 5609|   322k|                PyStackRef_XCLOSE(value);
  |  | 5610|   322k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5611|   322k|            }
  |  | 5612|   322k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   322k|    { \
  |  |  |  |  201|   322k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   322k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   322k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   322k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   322k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   322k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   322k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   322k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 322k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   322k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   322k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   322k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   322k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   322k|    }
  |  |  ------------------
  |  | 5613|   322k|        }
  |  | 5614|       |
  |  | 5615|  2.36k|        TARGET(CONTAINS_OP_DICT) {
  |  |  ------------------
  |  |  |  |  132|  2.36k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5616|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5617|       |            int opcode = CONTAINS_OP_DICT;
  |  | 5618|       |            (void)(opcode);
  |  | 5619|       |            #endif
  |  | 5620|  2.36k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 5621|  2.36k|            (void)this_instr;
  |  | 5622|  2.36k|            frame->instr_ptr = next_instr;
  |  | 5623|  2.36k|            next_instr += 2;
  |  | 5624|  2.36k|            INSTRUCTION_STATS(CONTAINS_OP_DICT);
  |  |  ------------------
  |  |  |  |   71|  2.36k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5625|  2.36k|            static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
  |  | 5626|  2.36k|            _PyStackRef tos;
  |  | 5627|  2.36k|            _PyStackRef left;
  |  | 5628|  2.36k|            _PyStackRef right;
  |  | 5629|  2.36k|            _PyStackRef b;
  |  | 5630|  2.36k|            _PyStackRef l;
  |  | 5631|  2.36k|            _PyStackRef r;
  |  | 5632|  2.36k|            _PyStackRef value;
  |  | 5633|       |            // _GUARD_TOS_ANY_DICT
  |  | 5634|  2.36k|            {
  |  | 5635|  2.36k|                tos = stack_pointer[-1];
  |  | 5636|  2.36k|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  | 5637|  2.36k|                if (!PyAnyDict_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   41|  2.36k|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|  2.36k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|  4.73k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|  2.36k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|  2.36k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (65:5): [True: 2.36k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5638|      0|                    UPDATE_MISS_STATS(CONTAINS_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5639|      0|                    assert(_PyOpcode_Deopt[opcode] == (CONTAINS_OP));
  |  |  ------------------
  |  |  |  Branch (5639:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5640|      0|                    JUMP_TO_PREDICTED(CONTAINS_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5641|      0|                }
  |  | 5642|  2.36k|            }
  |  | 5643|       |            /* Skip 1 cache entry */
  |  | 5644|       |            // _CONTAINS_OP_DICT
  |  | 5645|  2.36k|            {
  |  | 5646|  2.36k|                right = tos;
  |  | 5647|  2.36k|                left = stack_pointer[-2];
  |  | 5648|  2.36k|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5649|  2.36k|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5650|  2.36k|                assert(PyAnyDict_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (5650:17): [True: 2.36k, False: 0]
  |  |  |  Branch (5650:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5651|  2.36k|                STAT_INC(CONTAINS_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  2.36k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 5652|  2.36k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5653|  2.36k|                _PyFrame_StackPointerValidate(frame);
  |  | 5654|  2.36k|                int res = PyDict_Contains(right_o, left_o);
  |  | 5655|  2.36k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5656|  2.36k|                if (res < 0) {
  |  |  ------------------
  |  |  |  Branch (5656:21): [True: 0, False: 2.36k]
  |  |  ------------------
  |  | 5657|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5658|      0|                }
  |  | 5659|  2.36k|                b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  1.00k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.00k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  3.73k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.36k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5659:21): [True: 1.00k, False: 1.36k]
  |  |  ------------------
  |  | 5660|  2.36k|                l = left;
  |  | 5661|  2.36k|                r = right;
  |  | 5662|  2.36k|            }
  |  | 5663|       |            // _POP_TOP
  |  | 5664|      0|            {
  |  | 5665|  2.36k|                value = r;
  |  | 5666|  2.36k|                stack_pointer[-2] = b;
  |  | 5667|  2.36k|                stack_pointer[-1] = l;
  |  | 5668|  2.36k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5668:17): [True: 2.36k, False: 0]
  |  |  ------------------
  |  | 5669|  2.36k|                _PyFrame_StackPointerValidate(frame);
  |  | 5670|  2.36k|                PyStackRef_XCLOSE(value);
  |  | 5671|  2.36k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5672|  2.36k|            }
  |  | 5673|       |            // _POP_TOP
  |  | 5674|      0|            {
  |  | 5675|  2.36k|                value = l;
  |  | 5676|  2.36k|                stack_pointer += -1;
  |  | 5677|  2.36k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.36k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5678|  2.36k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5679|  2.36k|                _PyFrame_StackPointerValidate(frame);
  |  | 5680|  2.36k|                PyStackRef_XCLOSE(value);
  |  | 5681|  2.36k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5682|  2.36k|            }
  |  | 5683|  2.36k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.36k|    { \
  |  |  |  |  201|  2.36k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.36k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.36k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.36k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.36k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.36k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.36k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.36k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.36k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.36k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.36k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.36k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.36k|    }
  |  |  ------------------
  |  | 5684|  2.36k|        }
  |  | 5685|       |
  |  | 5686|  1.60M|        TARGET(CONTAINS_OP_SET) {
  |  |  ------------------
  |  |  |  |  132|  1.60M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5687|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5688|       |            int opcode = CONTAINS_OP_SET;
  |  | 5689|       |            (void)(opcode);
  |  | 5690|       |            #endif
  |  | 5691|  1.60M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 5692|  1.60M|            (void)this_instr;
  |  | 5693|  1.60M|            frame->instr_ptr = next_instr;
  |  | 5694|  1.60M|            next_instr += 2;
  |  | 5695|  1.60M|            INSTRUCTION_STATS(CONTAINS_OP_SET);
  |  |  ------------------
  |  |  |  |   71|  1.60M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5696|  1.60M|            static_assert(INLINE_CACHE_ENTRIES_CONTAINS_OP == 1, "incorrect cache size");
  |  | 5697|  1.60M|            _PyStackRef tos;
  |  | 5698|  1.60M|            _PyStackRef left;
  |  | 5699|  1.60M|            _PyStackRef right;
  |  | 5700|  1.60M|            _PyStackRef b;
  |  | 5701|  1.60M|            _PyStackRef l;
  |  | 5702|  1.60M|            _PyStackRef r;
  |  | 5703|  1.60M|            _PyStackRef value;
  |  | 5704|       |            // _GUARD_TOS_ANY_SET
  |  | 5705|  1.60M|            {
  |  | 5706|  1.60M|                tos = stack_pointer[-1];
  |  | 5707|  1.60M|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  | 5708|  1.60M|                if (!PyAnySet_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   29|  1.60M|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  3.20M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.60M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.60M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 1.60M, False: 538]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    538|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    538|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    538|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 538, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5709|      0|                    UPDATE_MISS_STATS(CONTAINS_OP);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 5710|      0|                    assert(_PyOpcode_Deopt[opcode] == (CONTAINS_OP));
  |  |  ------------------
  |  |  |  Branch (5710:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5711|      0|                    JUMP_TO_PREDICTED(CONTAINS_OP);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 5712|      0|                }
  |  | 5713|  1.60M|            }
  |  | 5714|       |            /* Skip 1 cache entry */
  |  | 5715|       |            // _CONTAINS_OP_SET
  |  | 5716|  1.60M|            {
  |  | 5717|  1.60M|                right = tos;
  |  | 5718|  1.60M|                left = stack_pointer[-2];
  |  | 5719|  1.60M|                PyObject *left_o = PyStackRef_AsPyObjectBorrow(left);
  |  | 5720|  1.60M|                PyObject *right_o = PyStackRef_AsPyObjectBorrow(right);
  |  | 5721|  1.60M|                assert(PyAnySet_CheckExact(right_o));
  |  |  ------------------
  |  |  |  Branch (5721:17): [True: 1.60M, False: 538]
  |  |  |  Branch (5721:17): [True: 538, False: 0]
  |  |  ------------------
  |  | 5722|  1.60M|                STAT_INC(CONTAINS_OP, hit);
  |  |  ------------------
  |  |  |  |   73|  1.60M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 5723|  1.60M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5724|  1.60M|                _PyFrame_StackPointerValidate(frame);
  |  | 5725|  1.60M|                int res = _PySet_Contains((PySetObject *)right_o, left_o);
  |  | 5726|  1.60M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5727|  1.60M|                if (res < 0) {
  |  |  ------------------
  |  |  |  Branch (5727:21): [True: 0, False: 1.60M]
  |  |  ------------------
  |  | 5728|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5729|      0|                }
  |  | 5730|  1.60M|                b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|    637|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    637|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               b = (res ^ oparg) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  3.20M|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.60M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5730:21): [True: 637, False: 1.60M]
  |  |  ------------------
  |  | 5731|  1.60M|                l = left;
  |  | 5732|  1.60M|                r = right;
  |  | 5733|  1.60M|            }
  |  | 5734|       |            // _POP_TOP
  |  | 5735|      0|            {
  |  | 5736|  1.60M|                value = r;
  |  | 5737|  1.60M|                stack_pointer[-2] = b;
  |  | 5738|  1.60M|                stack_pointer[-1] = l;
  |  | 5739|  1.60M|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5739:17): [True: 1.60M, False: 0]
  |  |  ------------------
  |  | 5740|  1.60M|                _PyFrame_StackPointerValidate(frame);
  |  | 5741|  1.60M|                PyStackRef_XCLOSE(value);
  |  | 5742|  1.60M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5743|  1.60M|            }
  |  | 5744|       |            // _POP_TOP
  |  | 5745|      0|            {
  |  | 5746|  1.60M|                value = l;
  |  | 5747|  1.60M|                stack_pointer += -1;
  |  | 5748|  1.60M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.60M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5749|  1.60M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5750|  1.60M|                _PyFrame_StackPointerValidate(frame);
  |  | 5751|  1.60M|                PyStackRef_XCLOSE(value);
  |  | 5752|  1.60M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5753|  1.60M|            }
  |  | 5754|  1.60M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.60M|    { \
  |  |  |  |  201|  1.60M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.60M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.60M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.60M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.60M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.60M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.60M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.60M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.60M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.60M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.60M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.60M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.60M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.60M|    }
  |  |  ------------------
  |  | 5755|  1.60M|        }
  |  | 5756|       |
  |  | 5757|    643|        TARGET(CONVERT_VALUE) {
  |  |  ------------------
  |  |  |  |  132|    643|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5758|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5759|       |            int opcode = CONVERT_VALUE;
  |  | 5760|       |            (void)(opcode);
  |  | 5761|       |            #endif
  |  | 5762|    643|            frame->instr_ptr = next_instr;
  |  | 5763|    643|            next_instr += 1;
  |  | 5764|    643|            INSTRUCTION_STATS(CONVERT_VALUE);
  |  |  ------------------
  |  |  |  |   71|    643|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5765|    643|            _PyStackRef value;
  |  | 5766|    643|            _PyStackRef result;
  |  | 5767|    643|            value = stack_pointer[-1];
  |  | 5768|    643|            conversion_func conv_fn;
  |  | 5769|    643|            assert(oparg >= FVC_STR && oparg <= FVC_ASCII);
  |  |  ------------------
  |  |  |  Branch (5769:13): [True: 643, False: 0]
  |  |  |  Branch (5769:13): [True: 643, False: 0]
  |  |  ------------------
  |  | 5770|    643|            conv_fn = _PyEval_ConversionFuncs[oparg];
  |  | 5771|    643|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5772|    643|            _PyFrame_StackPointerValidate(frame);
  |  | 5773|    643|            PyObject *result_o = conv_fn(PyStackRef_AsPyObjectBorrow(value));
  |  | 5774|    643|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5775|    643|            stack_pointer += -1;
  |  | 5776|    643|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    643|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5777|    643|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5778|    643|            _PyFrame_StackPointerValidate(frame);
  |  | 5779|    643|            PyStackRef_CLOSE(value);
  |  | 5780|    643|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5781|    643|            if (result_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (5781:17): [True: 0, False: 643]
  |  |  ------------------
  |  | 5782|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5783|      0|            }
  |  | 5784|    643|            result = PyStackRef_FromPyObjectSteal(result_o);
  |  | 5785|    643|            stack_pointer[0] = result;
  |  | 5786|    643|            stack_pointer += 1;
  |  | 5787|    643|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    643|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5788|    643|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    643|    { \
  |  |  |  |  201|    643|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    643|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    643|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    643|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    643|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    643|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    643|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    643|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 643]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    643|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    643|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    643|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    643|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    643|    }
  |  |  ------------------
  |  | 5789|    643|        }
  |  | 5790|       |
  |  | 5791|   960k|        TARGET(COPY) {
  |  |  ------------------
  |  |  |  |  132|   960k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5792|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5793|       |            int opcode = COPY;
  |  | 5794|       |            (void)(opcode);
  |  | 5795|       |            #endif
  |  | 5796|   960k|            frame->instr_ptr = next_instr;
  |  | 5797|   960k|            next_instr += 1;
  |  | 5798|   960k|            INSTRUCTION_STATS(COPY);
  |  |  ------------------
  |  |  |  |   71|   960k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5799|   960k|            _PyStackRef bottom;
  |  | 5800|   960k|            _PyStackRef top;
  |  | 5801|   960k|            bottom = stack_pointer[-1 - (oparg-1)];
  |  | 5802|   960k|            top = PyStackRef_DUP(bottom);
  |  | 5803|   960k|            stack_pointer[0] = top;
  |  | 5804|   960k|            stack_pointer += 1;
  |  | 5805|   960k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   960k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5806|   960k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   960k|    { \
  |  |  |  |  201|   960k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   960k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   960k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   960k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   960k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   960k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   960k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   960k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 960k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   960k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   960k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   960k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   960k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   960k|    }
  |  |  ------------------
  |  | 5807|   960k|        }
  |  | 5808|       |
  |  | 5809|   960k|        TARGET(COPY_FREE_VARS) {
  |  |  ------------------
  |  |  |  |  132|  3.27k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5810|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5811|       |            int opcode = COPY_FREE_VARS;
  |  | 5812|       |            (void)(opcode);
  |  | 5813|       |            #endif
  |  | 5814|  3.27k|            frame->instr_ptr = next_instr;
  |  | 5815|  3.27k|            next_instr += 1;
  |  | 5816|  3.27k|            INSTRUCTION_STATS(COPY_FREE_VARS);
  |  |  ------------------
  |  |  |  |   71|  3.27k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5817|  3.27k|            PyCodeObject *co = _PyFrame_GetCode(frame);
  |  | 5818|  3.27k|            assert(PyStackRef_FunctionCheck(frame->f_funcobj));
  |  |  ------------------
  |  |  |  Branch (5818:13): [True: 3.27k, False: 0]
  |  |  ------------------
  |  | 5819|  3.27k|            PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj);
  |  | 5820|  3.27k|            PyObject *closure = func->func_closure;
  |  | 5821|  3.27k|            assert(oparg == co->co_nfreevars);
  |  |  ------------------
  |  |  |  Branch (5821:13): [True: 3.27k, False: 0]
  |  |  ------------------
  |  | 5822|  3.27k|            int offset = co->co_nlocalsplus - oparg;
  |  | 5823|  10.3k|            for (int i = 0; i < oparg; ++i) {
  |  |  ------------------
  |  |  |  Branch (5823:29): [True: 7.11k, False: 3.27k]
  |  |  ------------------
  |  | 5824|  7.11k|                PyObject *o = PyTuple_GET_ITEM(closure, i);
  |  |  ------------------
  |  |  |  |   29|  7.11k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|  7.11k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  7.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (5824:31): [True: 7.11k, False: 0]
  |  |  ------------------
  |  | 5825|  7.11k|                frame->localsplus[offset + i] = PyStackRef_FromPyObjectNew(o);
  |  |  ------------------
  |  |  |  |  611|  7.11k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  7.11k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  7.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5826|  7.11k|            }
  |  | 5827|  3.27k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.27k|    { \
  |  |  |  |  201|  3.27k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.27k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.27k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.27k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.27k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.27k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.27k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.27k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.27k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.27k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.27k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.27k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.27k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.27k|    }
  |  |  ------------------
  |  | 5828|  3.27k|        }
  |  | 5829|       |
  |  | 5830|      0|        TARGET(DELETE_DEREF) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5831|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5832|       |            int opcode = DELETE_DEREF;
  |  | 5833|       |            (void)(opcode);
  |  | 5834|       |            #endif
  |  | 5835|      0|            frame->instr_ptr = next_instr;
  |  | 5836|      0|            next_instr += 1;
  |  | 5837|      0|            INSTRUCTION_STATS(DELETE_DEREF);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5838|      0|            PyObject *cell = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|      0|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 5839|      0|            PyObject *oldobj = PyCell_SwapTakeRef((PyCellObject *)cell, NULL);
  |  | 5840|      0|            if (oldobj == NULL) {
  |  |  ------------------
  |  |  |  Branch (5840:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 5841|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5842|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5843|      0|                _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg);
  |  | 5844|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5845|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5846|      0|            }
  |  | 5847|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5848|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 5849|      0|            Py_DECREF(oldobj);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5850|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5851|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 5852|      0|        }
  |  | 5853|       |
  |  | 5854|  1.38k|        TARGET(DELETE_FAST) {
  |  |  ------------------
  |  |  |  |  132|  1.38k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5855|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5856|       |            int opcode = DELETE_FAST;
  |  | 5857|       |            (void)(opcode);
  |  | 5858|       |            #endif
  |  | 5859|  1.38k|            frame->instr_ptr = next_instr;
  |  | 5860|  1.38k|            next_instr += 1;
  |  | 5861|  1.38k|            INSTRUCTION_STATS(DELETE_FAST);
  |  |  ------------------
  |  |  |  |   71|  1.38k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5862|  1.38k|            _PyStackRef v = GETLOCAL(oparg);
  |  |  ------------------
  |  |  |  |  285|  1.38k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 5863|  1.38k|            if (PyStackRef_IsNull(v)) {
  |  |  ------------------
  |  |  |  |  482|  1.38k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.38k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.38k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 1.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5864|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5865|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 5866|      0|                _PyEval_FormatExcCheckArg(tstate, PyExc_UnboundLocalError,
  |  | 5867|      0|                    UNBOUNDLOCAL_ERROR_MSG,
  |  |  ------------------
  |  |  |  |  401|      0|    "cannot access local variable '%s' where it is not associated with a value"
  |  |  ------------------
  |  | 5868|      0|                    PyTuple_GetItem(_PyFrame_GetCode(frame)->co_localsplusnames, oparg)
  |  | 5869|      0|                );
  |  | 5870|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5871|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5872|      0|            }
  |  | 5873|  1.38k|            _PyStackRef tmp = GETLOCAL(oparg);
  |  |  ------------------
  |  |  |  |  285|  1.38k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 5874|  1.38k|            GETLOCAL(oparg) = PyStackRef_NULL;
  |  |  ------------------
  |  |  |  |  285|  1.38k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 5875|  1.38k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5876|  1.38k|            _PyFrame_StackPointerValidate(frame);
  |  | 5877|  1.38k|            PyStackRef_XCLOSE(tmp);
  |  | 5878|  1.38k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5879|  1.38k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.38k|    { \
  |  |  |  |  201|  1.38k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.38k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.38k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.38k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.38k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.38k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.38k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.38k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.38k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.38k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.38k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.38k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.38k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.38k|    }
  |  |  ------------------
  |  | 5880|  1.38k|        }
  |  | 5881|       |
  |  | 5882|    977|        TARGET(DELETE_SUBSCR) {
  |  |  ------------------
  |  |  |  |  132|    977|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5883|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5884|       |            int opcode = DELETE_SUBSCR;
  |  | 5885|       |            (void)(opcode);
  |  | 5886|       |            #endif
  |  | 5887|    977|            frame->instr_ptr = next_instr;
  |  | 5888|    977|            next_instr += 1;
  |  | 5889|    977|            INSTRUCTION_STATS(DELETE_SUBSCR);
  |  |  ------------------
  |  |  |  |   71|    977|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5890|    977|            _PyStackRef container;
  |  | 5891|    977|            _PyStackRef sub;
  |  | 5892|    977|            sub = stack_pointer[-1];
  |  | 5893|    977|            container = stack_pointer[-2];
  |  | 5894|    977|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5895|    977|            _PyFrame_StackPointerValidate(frame);
  |  | 5896|    977|            int err = PyObject_DelItem(PyStackRef_AsPyObjectBorrow(container),
  |  | 5897|    977|                                       PyStackRef_AsPyObjectBorrow(sub));
  |  | 5898|    977|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5899|    977|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5899:13): [True: 977, False: 0]
  |  |  ------------------
  |  | 5900|    977|            _PyFrame_StackPointerValidate(frame);
  |  | 5901|    977|            _PyStackRef tmp = sub;
  |  | 5902|    977|            sub = PyStackRef_NULL;
  |  | 5903|    977|            stack_pointer[-1] = sub;
  |  | 5904|    977|            PyStackRef_CLOSE(tmp);
  |  | 5905|    977|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5906|    977|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5906:13): [True: 977, False: 0]
  |  |  ------------------
  |  | 5907|    977|            _PyFrame_StackPointerValidate(frame);
  |  | 5908|    977|            tmp = container;
  |  | 5909|    977|            container = PyStackRef_NULL;
  |  | 5910|    977|            stack_pointer[-2] = container;
  |  | 5911|    977|            PyStackRef_CLOSE(tmp);
  |  | 5912|    977|            _PyFrame_StackPointerInvalidate(frame);
  |  | 5913|    977|            stack_pointer += -2;
  |  | 5914|    977|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    977|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5915|    977|            if (err) {
  |  |  ------------------
  |  |  |  Branch (5915:17): [True: 0, False: 977]
  |  |  ------------------
  |  | 5916|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5917|      0|            }
  |  | 5918|    977|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    977|    { \
  |  |  |  |  201|    977|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    977|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    977|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    977|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    977|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    977|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    977|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    977|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 977]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    977|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    977|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    977|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    977|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    977|    }
  |  |  ------------------
  |  | 5919|    977|        }
  |  | 5920|       |
  |  | 5921|    703|        TARGET(DICT_MERGE) {
  |  |  ------------------
  |  |  |  |  132|    703|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5922|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5923|       |            int opcode = DICT_MERGE;
  |  | 5924|       |            (void)(opcode);
  |  | 5925|       |            #endif
  |  | 5926|    703|            frame->instr_ptr = next_instr;
  |  | 5927|    703|            next_instr += 1;
  |  | 5928|    703|            INSTRUCTION_STATS(DICT_MERGE);
  |  |  ------------------
  |  |  |  |   71|    703|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5929|    703|            _PyStackRef callable;
  |  | 5930|    703|            _PyStackRef dict;
  |  | 5931|    703|            _PyStackRef update;
  |  | 5932|    703|            _PyStackRef u;
  |  | 5933|    703|            _PyStackRef value;
  |  | 5934|       |            // _DICT_MERGE
  |  | 5935|    703|            {
  |  | 5936|    703|                update = stack_pointer[-1];
  |  | 5937|    703|                dict = stack_pointer[-2 - (oparg - 1)];
  |  | 5938|    703|                callable = stack_pointer[-5 - (oparg - 1)];
  |  | 5939|    703|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 5940|    703|                PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict);
  |  | 5941|    703|                PyObject *update_o = PyStackRef_AsPyObjectBorrow(update);
  |  | 5942|    703|                PyObject *dupkey = NULL;
  |  | 5943|    703|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5944|    703|                _PyFrame_StackPointerValidate(frame);
  |  | 5945|    703|                int err = _PyDict_MergeUniq(dict_o, update_o, &dupkey);
  |  | 5946|    703|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5947|    703|                if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (5947:21): [True: 0, False: 703]
  |  |  ------------------
  |  | 5948|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5948:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5949|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 5950|      0|                    _PyEval_FormatKwargsError(tstate, callable_o, update_o, dupkey);
  |  | 5951|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 5952|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5952:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 5953|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 5954|      0|                    Py_XDECREF(dupkey);
  |  |  ------------------
  |  |  |  |   69|      0|    do { \
  |  |  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   71|      0|        if (xop != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|            Py_DECREF(xop); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   73|      0|        } \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 5955|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 5956|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 5957|      0|                }
  |  | 5958|    703|                u = update;
  |  | 5959|    703|            }
  |  | 5960|       |            // _POP_TOP
  |  | 5961|      0|            {
  |  | 5962|    703|                value = u;
  |  | 5963|    703|                stack_pointer += -1;
  |  | 5964|    703|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    703|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 5965|    703|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5966|    703|                _PyFrame_StackPointerValidate(frame);
  |  | 5967|    703|                PyStackRef_XCLOSE(value);
  |  | 5968|    703|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5969|    703|            }
  |  | 5970|    703|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    703|    { \
  |  |  |  |  201|    703|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    703|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    703|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    703|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    703|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    703|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    703|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    703|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 703]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    703|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    703|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    703|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    703|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    703|    }
  |  |  ------------------
  |  | 5971|    703|        }
  |  | 5972|       |
  |  | 5973|    476|        TARGET(DICT_UPDATE) {
  |  |  ------------------
  |  |  |  |  132|    476|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 5974|       |            #if _Py_TAIL_CALL_INTERP
  |  | 5975|       |            int opcode = DICT_UPDATE;
  |  | 5976|       |            (void)(opcode);
  |  | 5977|       |            #endif
  |  | 5978|    476|            frame->instr_ptr = next_instr;
  |  | 5979|    476|            next_instr += 1;
  |  | 5980|    476|            INSTRUCTION_STATS(DICT_UPDATE);
  |  |  ------------------
  |  |  |  |   71|    476|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 5981|    476|            _PyStackRef dict;
  |  | 5982|    476|            _PyStackRef update;
  |  | 5983|    476|            _PyStackRef upd;
  |  | 5984|    476|            _PyStackRef value;
  |  | 5985|       |            // _DICT_UPDATE
  |  | 5986|    476|            {
  |  | 5987|    476|                update = stack_pointer[-1];
  |  | 5988|    476|                dict = stack_pointer[-2 - (oparg - 1)];
  |  | 5989|    476|                PyObject *dict_o = PyStackRef_AsPyObjectBorrow(dict);
  |  | 5990|    476|                PyObject *update_o = PyStackRef_AsPyObjectBorrow(update);
  |  | 5991|    476|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 5992|    476|                _PyFrame_StackPointerValidate(frame);
  |  | 5993|    476|                int err = PyDict_Update(dict_o, update_o);
  |  | 5994|    476|                _PyFrame_StackPointerInvalidate(frame);
  |  | 5995|    476|                if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (5995:21): [True: 0, False: 476]
  |  |  ------------------
  |  | 5996|      0|                    int matches = _PyErr_ExceptionMatches(tstate, PyExc_AttributeError);
  |  | 5997|      0|                    if (matches) {
  |  |  ------------------
  |  |  |  Branch (5997:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 5998|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (5998:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 5999|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 6000|      0|                        PyObject *exc = _PyErr_GetRaisedException(tstate);
  |  | 6001|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 6002|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6002:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 6003|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 6004|      0|                        int has_keys = PyObject_HasAttrWithError(update_o, &_Py_ID(keys));
  |  |  ------------------
  |  |  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6005|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 6006|      0|                        if (has_keys == 0) {
  |  |  ------------------
  |  |  |  Branch (6006:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 6007|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6007:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 6008|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 6009|      0|                            _PyErr_Format(tstate, PyExc_TypeError,
  |  | 6010|      0|                                      "'%T' object is not a mapping",
  |  | 6011|      0|                                      update_o);
  |  | 6012|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 6013|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6013:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 6014|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 6015|      0|                            Py_DECREF(exc);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6016|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 6017|      0|                        }
  |  | 6018|      0|                        else {
  |  | 6019|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6019:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 6020|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 6021|      0|                            _PyErr_ChainExceptions1(exc);
  |  | 6022|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 6023|      0|                        }
  |  | 6024|      0|                    }
  |  | 6025|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6026|      0|                }
  |  | 6027|    476|                upd = update;
  |  | 6028|    476|            }
  |  | 6029|       |            // _POP_TOP
  |  | 6030|      0|            {
  |  | 6031|    476|                value = upd;
  |  | 6032|    476|                stack_pointer += -1;
  |  | 6033|    476|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    476|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6034|    476|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6035|    476|                _PyFrame_StackPointerValidate(frame);
  |  | 6036|    476|                PyStackRef_XCLOSE(value);
  |  | 6037|    476|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6038|    476|            }
  |  | 6039|    476|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    476|    { \
  |  |  |  |  201|    476|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    476|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    476|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    476|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    476|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    476|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    476|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    476|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 476]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    476|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    476|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    476|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    476|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    476|    }
  |  |  ------------------
  |  | 6040|    476|        }
  |  | 6041|       |
  |  | 6042|      0|        TARGET(END_ASYNC_FOR) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6043|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6044|       |            int opcode = END_ASYNC_FOR;
  |  | 6045|       |            (void)(opcode);
  |  | 6046|       |            #endif
  |  | 6047|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6048|      0|            (void)this_instr;
  |  | 6049|      0|            frame->instr_ptr = next_instr;
  |  | 6050|      0|            next_instr += 1;
  |  | 6051|      0|            INSTRUCTION_STATS(END_ASYNC_FOR);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6052|      0|            _PyStackRef awaitable_st;
  |  | 6053|      0|            _PyStackRef exc_st;
  |  | 6054|      0|            exc_st = stack_pointer[-1];
  |  | 6055|      0|            awaitable_st = stack_pointer[-2];
  |  | 6056|      0|            JUMPBY(0);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 6057|      0|            (void)oparg;
  |  | 6058|      0|            PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st);
  |  | 6059|      0|            assert(exc && PyExceptionInstance_Check(exc));
  |  |  ------------------
  |  |  |  Branch (6059:13): [True: 0, False: 0]
  |  |  |  Branch (6059:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 6060|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6061|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6062|      0|            int matches = PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration);
  |  | 6063|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6064|      0|            if (matches) {
  |  |  ------------------
  |  |  |  Branch (6064:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6065|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6065:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6066|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6067|      0|                _PyStackRef tmp = exc_st;
  |  | 6068|      0|                exc_st = PyStackRef_NULL;
  |  | 6069|      0|                stack_pointer[-1] = exc_st;
  |  | 6070|      0|                PyStackRef_CLOSE(tmp);
  |  | 6071|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6072|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6072:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6073|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6074|      0|                tmp = awaitable_st;
  |  | 6075|      0|                awaitable_st = PyStackRef_NULL;
  |  | 6076|      0|                stack_pointer[-2] = awaitable_st;
  |  | 6077|      0|                PyStackRef_CLOSE(tmp);
  |  | 6078|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6079|      0|                stack_pointer += -2;
  |  | 6080|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6081|      0|            }
  |  | 6082|      0|            else {
  |  | 6083|      0|                Py_INCREF(exc);
  |  |  ------------------
  |  |  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6084|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6084:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6085|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6086|      0|                _PyErr_SetRaisedException(tstate, exc);
  |  | 6087|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6088|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6088:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6089|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6090|      0|                monitor_reraise(tstate, frame, this_instr);
  |  | 6091|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6092|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6092:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6093|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6094|      0|                JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6095|      0|            }
  |  | 6096|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 6097|      0|        }
  |  | 6098|       |
  |  | 6099|    134|        TARGET(END_FOR) {
  |  |  ------------------
  |  |  |  |  132|    134|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6100|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6101|       |            int opcode = END_FOR;
  |  | 6102|       |            (void)(opcode);
  |  | 6103|       |            #endif
  |  | 6104|    134|            next_instr += 1;
  |  | 6105|    134|            INSTRUCTION_STATS(END_FOR);
  |  |  ------------------
  |  |  |  |   71|    134|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6106|    134|            _PyStackRef value;
  |  | 6107|    134|            value = stack_pointer[-1];
  |  | 6108|    134|            stack_pointer += -1;
  |  | 6109|    134|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    134|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6110|    134|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6111|    134|            _PyFrame_StackPointerValidate(frame);
  |  | 6112|    134|            PyStackRef_CLOSE(value);
  |  | 6113|    134|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6114|    134|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    134|    { \
  |  |  |  |  201|    134|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    134|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    134|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    134|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    134|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    134|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    134|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    134|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 134]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    134|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    134|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    134|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    134|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    134|    }
  |  |  ------------------
  |  | 6115|    134|        }
  |  | 6116|       |
  |  | 6117|    134|        TARGET(END_SEND) {
  |  |  ------------------
  |  |  |  |  132|      5|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6118|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6119|       |            int opcode = END_SEND;
  |  | 6120|       |            (void)(opcode);
  |  | 6121|       |            #endif
  |  | 6122|      5|            frame->instr_ptr = next_instr;
  |  | 6123|      5|            next_instr += 1;
  |  | 6124|      5|            INSTRUCTION_STATS(END_SEND);
  |  |  ------------------
  |  |  |  |   71|      5|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6125|      5|            _PyStackRef receiver;
  |  | 6126|      5|            _PyStackRef index_or_null;
  |  | 6127|      5|            _PyStackRef value;
  |  | 6128|      5|            _PyStackRef val;
  |  | 6129|      5|            value = stack_pointer[-1];
  |  | 6130|      5|            index_or_null = stack_pointer[-2];
  |  | 6131|      5|            receiver = stack_pointer[-3];
  |  | 6132|      5|            val = value;
  |  | 6133|      5|            (void)index_or_null;
  |  | 6134|      5|            stack_pointer[-3] = val;
  |  | 6135|      5|            stack_pointer += -2;
  |  | 6136|      5|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      5|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6137|      5|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6138|      5|            _PyFrame_StackPointerValidate(frame);
  |  | 6139|      5|            PyStackRef_CLOSE(receiver);
  |  | 6140|      5|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6141|      5|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      5|    { \
  |  |  |  |  201|      5|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      5|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      5|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      5|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      5|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      5|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      5|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      5|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      5|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      5|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      5|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      5|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      5|    }
  |  |  ------------------
  |  | 6142|      5|        }
  |  | 6143|       |
  |  | 6144|      5|        TARGET(ENTER_EXECUTOR) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6145|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6146|       |            int opcode = ENTER_EXECUTOR;
  |  | 6147|       |            (void)(opcode);
  |  | 6148|       |            #endif
  |  | 6149|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6150|      0|            (void)this_instr;
  |  | 6151|      0|            frame->instr_ptr = next_instr;
  |  | 6152|      0|            next_instr += 1;
  |  | 6153|      0|            INSTRUCTION_STATS(ENTER_EXECUTOR);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6154|      0|            opcode = ENTER_EXECUTOR;
  |  |  ------------------
  |  |  |  |  242|      0|#define ENTER_EXECUTOR                         254
  |  |  ------------------
  |  | 6155|       |            #ifdef _Py_TIER2
  |  | 6156|       |            PyCodeObject *code = _PyFrame_GetCode(frame);
  |  | 6157|       |            _PyExecutorObject *executor = code->co_executors->executors[oparg & 255];
  |  | 6158|       |            if (IS_JIT_TRACING()) {
  |  | 6159|       |                int og_opcode = executor->vm_data.opcode;
  |  | 6160|       |                int og_oparg = (oparg & ~255) | executor->vm_data.oparg;
  |  | 6161|       |                next_instr = this_instr;
  |  | 6162|       |                if (_PyJit_EnterExecutorShouldStopTracing(og_opcode)) {
  |  | 6163|       |                    if (_PyOpcode_Caches[_PyOpcode_Deopt[og_opcode]]) {
  |  | 6164|       |                        PAUSE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  | 6165|       |                    }
  |  | 6166|       |                    opcode = og_opcode;
  |  | 6167|       |                    oparg = og_oparg;
  |  | 6168|       |                    DISPATCH_GOTO_NON_TRACING();
  |  | 6169|       |                }
  |  | 6170|       |                JUMP_TO_LABEL(stop_tracing);
  |  | 6171|       |            }
  |  | 6172|       |            assert(executor->vm_data.index == INSTR_OFFSET() - 1);
  |  | 6173|       |            assert(executor->vm_data.code == code);
  |  | 6174|       |            assert(executor->vm_data.valid);
  |  | 6175|       |            assert(tstate->current_executor == NULL);
  |  | 6176|       |            uintptr_t iversion = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(code->_co_instrumentation_version);
  |  | 6177|       |            if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) != iversion) {
  |  | 6178|       |                opcode = executor->vm_data.opcode;
  |  | 6179|       |                oparg = (oparg & ~255) | executor->vm_data.oparg;
  |  | 6180|       |                next_instr = this_instr;
  |  | 6181|       |                if (_PyOpcode_Caches[_PyOpcode_Deopt[opcode]]) {
  |  | 6182|       |                    PAUSE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  | 6183|       |                }
  |  | 6184|       |                DISPATCH_GOTO();
  |  | 6185|       |            }
  |  | 6186|       |            assert(executor != tstate->interp->cold_executor);
  |  | 6187|       |            tstate->jit_exit = NULL;
  |  | 6188|       |            TIER1_TO_TIER2(executor);
  |  | 6189|       |            #else
  |  | 6190|      0|            Py_FatalError("ENTER_EXECUTOR is not supported in this build");
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  |  | 6191|      0|            #endif /* _Py_TIER2 */
  |  | 6192|      0|        }
  |  | 6193|       |
  |  | 6194|  1.21k|        TARGET(EXIT_INIT_CHECK) {
  |  |  ------------------
  |  |  |  |  132|  1.21k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6195|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6196|       |            int opcode = EXIT_INIT_CHECK;
  |  | 6197|       |            (void)(opcode);
  |  | 6198|       |            #endif
  |  | 6199|  1.21k|            frame->instr_ptr = next_instr;
  |  | 6200|  1.21k|            next_instr += 1;
  |  | 6201|  1.21k|            INSTRUCTION_STATS(EXIT_INIT_CHECK);
  |  |  ------------------
  |  |  |  |   71|  1.21k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6202|  1.21k|            _PyStackRef should_be_none;
  |  | 6203|  1.21k|            should_be_none = stack_pointer[-1];
  |  | 6204|  1.21k|            if (!PyStackRef_IsNone(should_be_none)) {
  |  |  ------------------
  |  |  |  |  495|  1.21k|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.21k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6204:17): [True: 0, False: 1.21k]
  |  |  ------------------
  |  | 6205|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6206|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6207|      0|                PyErr_Format(PyExc_TypeError,
  |  | 6208|      0|                             "__init__() should return None, not '%.200s'",
  |  | 6209|      0|                             Py_TYPE(PyStackRef_AsPyObjectBorrow(should_be_none))->tp_name);
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6210|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6211|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6212|      0|            }
  |  | 6213|  1.21k|            stack_pointer += -1;
  |  | 6214|  1.21k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.21k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6215|  1.21k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.21k|    { \
  |  |  |  |  201|  1.21k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.21k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.21k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.21k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.21k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.21k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.21k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.21k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.21k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.21k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.21k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.21k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.21k|    }
  |  |  ------------------
  |  | 6216|  1.21k|        }
  |  | 6217|       |
  |  | 6218|   593k|        TARGET(EXTENDED_ARG) {
  |  |  ------------------
  |  |  |  |  132|   593k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6219|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6220|       |            int opcode = EXTENDED_ARG;
  |  | 6221|       |            (void)(opcode);
  |  | 6222|       |            #endif
  |  | 6223|   593k|            frame->instr_ptr = next_instr;
  |  | 6224|   593k|            next_instr += 1;
  |  | 6225|   593k|            INSTRUCTION_STATS(EXTENDED_ARG);
  |  |  ------------------
  |  |  |  |   71|   593k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6226|   593k|            opcode = EXTENDED_ARG;
  |  |  ------------------
  |  |  |  |   77|   593k|#define EXTENDED_ARG                            64
  |  |  ------------------
  |  | 6227|   593k|            assert(oparg);
  |  |  ------------------
  |  |  |  Branch (6227:13): [True: 593k, False: 0]
  |  |  ------------------
  |  | 6228|   593k|            opcode = next_instr->op.code;
  |  | 6229|   593k|            oparg = oparg << 8 | next_instr->op.arg;
  |  | 6230|   593k|            PRE_DISPATCH_GOTO();
  |  |  ------------------
  |  |  |  |  176|   593k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  ------------------
  |  | 6231|   593k|            DISPATCH_GOTO();
  |  |  ------------------
  |  |  |  |  133|   593k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  ------------------
  |  | 6232|   593k|        }
  |  | 6233|       |
  |  | 6234|   195k|        TARGET(FORMAT_SIMPLE) {
  |  |  ------------------
  |  |  |  |  132|   195k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6235|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6236|       |            int opcode = FORMAT_SIMPLE;
  |  | 6237|       |            (void)(opcode);
  |  | 6238|       |            #endif
  |  | 6239|   195k|            frame->instr_ptr = next_instr;
  |  | 6240|   195k|            next_instr += 1;
  |  | 6241|   195k|            INSTRUCTION_STATS(FORMAT_SIMPLE);
  |  |  ------------------
  |  |  |  |   71|   195k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6242|   195k|            _PyStackRef value;
  |  | 6243|   195k|            _PyStackRef res;
  |  | 6244|   195k|            value = stack_pointer[-1];
  |  | 6245|   195k|            PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  | 6246|   195k|            if (!PyUnicode_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |  104|   195k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   195k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   195k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   195k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6246:17): [True: 97.0k, False: 97.9k]
  |  |  ------------------
  |  | 6247|  97.0k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6248|  97.0k|                _PyFrame_StackPointerValidate(frame);
  |  | 6249|  97.0k|                PyObject *res_o = PyObject_Format(value_o, NULL);
  |  | 6250|  97.0k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6251|  97.0k|                stack_pointer += -1;
  |  | 6252|  97.0k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  97.0k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6253|  97.0k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6254|  97.0k|                _PyFrame_StackPointerValidate(frame);
  |  | 6255|  97.0k|                PyStackRef_CLOSE(value);
  |  | 6256|  97.0k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6257|  97.0k|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6257:21): [True: 0, False: 97.0k]
  |  |  ------------------
  |  | 6258|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6259|      0|                }
  |  | 6260|  97.0k|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 6261|  97.0k|            }
  |  | 6262|  97.9k|            else {
  |  | 6263|  97.9k|                res = value;
  |  | 6264|  97.9k|                stack_pointer += -1;
  |  | 6265|  97.9k|            }
  |  | 6266|   195k|            stack_pointer[0] = res;
  |  | 6267|   195k|            stack_pointer += 1;
  |  | 6268|   195k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   195k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6269|   195k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   195k|    { \
  |  |  |  |  201|   195k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   195k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   195k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   195k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   195k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   195k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   195k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   195k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 195k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   195k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   195k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   195k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   195k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   195k|    }
  |  |  ------------------
  |  | 6270|   195k|        }
  |  | 6271|       |
  |  | 6272|    132|        TARGET(FORMAT_WITH_SPEC) {
  |  |  ------------------
  |  |  |  |  132|    132|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6273|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6274|       |            int opcode = FORMAT_WITH_SPEC;
  |  | 6275|       |            (void)(opcode);
  |  | 6276|       |            #endif
  |  | 6277|    132|            frame->instr_ptr = next_instr;
  |  | 6278|    132|            next_instr += 1;
  |  | 6279|    132|            INSTRUCTION_STATS(FORMAT_WITH_SPEC);
  |  |  ------------------
  |  |  |  |   71|    132|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6280|    132|            _PyStackRef value;
  |  | 6281|    132|            _PyStackRef fmt_spec;
  |  | 6282|    132|            _PyStackRef res;
  |  | 6283|    132|            fmt_spec = stack_pointer[-1];
  |  | 6284|    132|            value = stack_pointer[-2];
  |  | 6285|    132|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6286|    132|            _PyFrame_StackPointerValidate(frame);
  |  | 6287|    132|            PyObject *res_o = PyObject_Format(PyStackRef_AsPyObjectBorrow(value), PyStackRef_AsPyObjectBorrow(fmt_spec));
  |  | 6288|    132|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6289|    132|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6289:13): [True: 132, False: 0]
  |  |  ------------------
  |  | 6290|    132|            _PyFrame_StackPointerValidate(frame);
  |  | 6291|    132|            _PyStackRef tmp = fmt_spec;
  |  | 6292|    132|            fmt_spec = PyStackRef_NULL;
  |  | 6293|    132|            stack_pointer[-1] = fmt_spec;
  |  | 6294|    132|            PyStackRef_CLOSE(tmp);
  |  | 6295|    132|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6296|    132|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6296:13): [True: 132, False: 0]
  |  |  ------------------
  |  | 6297|    132|            _PyFrame_StackPointerValidate(frame);
  |  | 6298|    132|            tmp = value;
  |  | 6299|    132|            value = PyStackRef_NULL;
  |  | 6300|    132|            stack_pointer[-2] = value;
  |  | 6301|    132|            PyStackRef_CLOSE(tmp);
  |  | 6302|    132|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6303|    132|            stack_pointer += -2;
  |  | 6304|    132|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    132|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6305|    132|            if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6305:17): [True: 0, False: 132]
  |  |  ------------------
  |  | 6306|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6307|      0|            }
  |  | 6308|    132|            res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 6309|    132|            stack_pointer[0] = res;
  |  | 6310|    132|            stack_pointer += 1;
  |  | 6311|    132|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    132|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6312|    132|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    132|    { \
  |  |  |  |  201|    132|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    132|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    132|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    132|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    132|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    132|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    132|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    132|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 132]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    132|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    132|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    132|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    132|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    132|    }
  |  |  ------------------
  |  | 6313|    132|        }
  |  | 6314|       |
  |  | 6315|   660k|        TARGET(FOR_ITER) {
  |  |  ------------------
  |  |  |  |  132|   660k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6316|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6317|       |            int opcode = FOR_ITER;
  |  | 6318|       |            (void)(opcode);
  |  | 6319|       |            #endif
  |  | 6320|   660k|            frame->instr_ptr = next_instr;
  |  | 6321|   660k|            next_instr += 2;
  |  | 6322|   660k|            INSTRUCTION_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |   71|   660k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6323|   660k|            PREDICTED_FOR_ITER:;
  |  | 6324|   660k|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  | 6325|   660k|            (void)this_instr;
  |  | 6326|   660k|            _PyStackRef iter;
  |  | 6327|   660k|            _PyStackRef null_or_index;
  |  | 6328|   660k|            _PyStackRef next;
  |  | 6329|       |            // _SPECIALIZE_FOR_ITER
  |  | 6330|   660k|            {
  |  | 6331|   660k|                null_or_index = stack_pointer[-1];
  |  | 6332|   660k|                iter = stack_pointer[-2];
  |  | 6333|   660k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 6334|   660k|                (void)counter;
  |  | 6335|   660k|                #if ENABLE_SPECIALIZATION
  |  | 6336|   660k|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|   660k|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 301, False: 660k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6337|    301|                    next_instr = this_instr;
  |  | 6338|    301|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6339|    301|                    _PyFrame_StackPointerValidate(frame);
  |  | 6340|    301|                    _Py_Specialize_ForIter(iter, null_or_index, next_instr, oparg);
  |  | 6341|    301|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 6342|    301|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|    301|    { \
  |  |  |  |  217|    301|        opcode = next_instr->op.code; \
  |  |  |  |  218|    301|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    301|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|    301|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    301|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|    301|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|    301|    }
  |  |  ------------------
  |  | 6343|    301|                }
  |  | 6344|   660k|                OPCODE_DEFERRED_INC(FOR_ITER);
  |  |  ------------------
  |  |  |  |   90|   660k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 6345|   660k|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|   660k|    do { \
  |  |  |  |  378|   660k|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|   660k|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 660k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6346|   660k|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 6347|   660k|            }
  |  | 6348|       |            // _FOR_ITER
  |  | 6349|   660k|            {
  |  | 6350|   660k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6351|   660k|                _PyFrame_StackPointerValidate(frame);
  |  | 6352|   660k|                _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, iter, &null_or_index);
  |  | 6353|   660k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6354|   660k|                if (!PyStackRef_IsValid(item)) {
  |  |  ------------------
  |  |  |  Branch (6354:21): [True: 36.8k, False: 623k]
  |  |  ------------------
  |  | 6355|  36.8k|                    if (PyStackRef_IsError(item)) {
  |  |  ------------------
  |  |  |  Branch (6355:25): [True: 0, False: 36.8k]
  |  |  ------------------
  |  | 6356|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6357|      0|                    }
  |  | 6358|  36.8k|                    JUMPBY(oparg + 1);
  |  |  ------------------
  |  |  |  |  261|  36.8k|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 6359|  36.8k|                    stack_pointer[-1] = null_or_index;
  |  | 6360|  36.8k|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  36.8k|    { \
  |  |  |  |  201|  36.8k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  36.8k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  36.8k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  36.8k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  36.8k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  36.8k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  36.8k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  36.8k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 36.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  36.8k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  36.8k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  36.8k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  36.8k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  36.8k|    }
  |  |  ------------------
  |  | 6361|  36.8k|                }
  |  | 6362|   660k|                next = item;
  |  | 6363|   660k|            }
  |  | 6364|      0|            stack_pointer[-1] = null_or_index;
  |  | 6365|   660k|            stack_pointer[0] = next;
  |  | 6366|   660k|            stack_pointer += 1;
  |  | 6367|   660k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   660k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6368|   660k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   660k|    { \
  |  |  |  |  201|   660k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   660k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   660k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   660k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   660k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   660k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   660k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   660k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 660k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   660k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   660k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   660k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   660k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   660k|    }
  |  |  ------------------
  |  | 6369|   660k|        }
  |  | 6370|       |
  |  | 6371|    221|        TARGET(FOR_ITER_GEN) {
  |  |  ------------------
  |  |  |  |  132|    221|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6372|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6373|       |            int opcode = FOR_ITER_GEN;
  |  | 6374|       |            (void)(opcode);
  |  | 6375|       |            #endif
  |  | 6376|    221|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6377|    221|            (void)this_instr;
  |  | 6378|    221|            frame->instr_ptr = next_instr;
  |  | 6379|    221|            next_instr += 2;
  |  | 6380|    221|            INSTRUCTION_STATS(FOR_ITER_GEN);
  |  |  ------------------
  |  |  |  |   71|    221|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6381|    221|            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
  |  | 6382|    221|            _PyStackRef iter;
  |  | 6383|    221|            _PyStackRef gen_frame;
  |  | 6384|    221|            _PyStackRef new_frame;
  |  | 6385|       |            /* Skip 1 cache entry */
  |  | 6386|       |            // _CHECK_PEP_523
  |  | 6387|    221|            {
  |  | 6388|    221|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|    221|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6389|      0|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6390|      0|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6390:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 6391|      0|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6392|      0|                }
  |  | 6393|    221|            }
  |  | 6394|       |            // _FOR_ITER_GEN_FRAME
  |  | 6395|    221|            {
  |  | 6396|    221|                iter = stack_pointer[-2];
  |  | 6397|    221|                PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(iter);
  |  | 6398|    221|                if (Py_TYPE(gen) != &PyGen_Type) {
  |  |  ------------------
  |  |  |  |  213|    221|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    221|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    221|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6398:21): [True: 0, False: 221]
  |  |  ------------------
  |  | 6399|      0|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6400|      0|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6400:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 6401|      0|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6402|      0|                }
  |  | 6403|    221|                if (!gen_try_set_executing((PyGenObject *)gen)) {
  |  |  ------------------
  |  |  |  Branch (6403:21): [True: 0, False: 221]
  |  |  ------------------
  |  | 6404|      0|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6405|      0|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6405:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 6406|      0|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6407|      0|                }
  |  | 6408|    221|                STAT_INC(FOR_ITER, hit);
  |  |  ------------------
  |  |  |  |   73|    221|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 6409|    221|                _PyInterpreterFrame *pushed_frame = &gen->gi_iframe;
  |  | 6410|    221|                _PyFrame_StackPush(pushed_frame, PyStackRef_None);
  |  |  ------------------
  |  |  |  |  485|    221|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    221|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6411|    221|                gen->gi_exc_state.previous_item = tstate->exc_info;
  |  | 6412|    221|                tstate->exc_info = &gen->gi_exc_state;
  |  | 6413|    221|                pushed_frame->previous = frame;
  |  | 6414|    221|                frame->return_offset = (uint16_t)( 2u + oparg);
  |  | 6415|    221|                gen_frame = PyStackRef_Wrap(pushed_frame);
  |  | 6416|    221|            }
  |  | 6417|       |            // _PUSH_FRAME
  |  | 6418|      0|            {
  |  | 6419|    221|                new_frame = gen_frame;
  |  | 6420|    221|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (6420:17): [True: 221, False: 0]
  |  |  ------------------
  |  | 6421|    221|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 6422|    221|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6423|    221|                _PyFrame_StackPointerValidate(frame);
  |  | 6424|    221|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (6424:17): [True: 221, False: 0]
  |  |  |  Branch (6424:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6425|    221|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|    221|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 6426|    221|                frame = tstate->current_frame = temp;
  |  | 6427|    221|                tstate->py_recursion_remaining--;
  |  | 6428|    221|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 6429|    221|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6430|    221|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|    221|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|    221|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|    221|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6431|       |                #ifdef Py_DEBUG
  |  | 6432|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 6433|       |                #endif
  |  | 6434|    221|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|    221|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 6435|    221|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|    221|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 6436|    221|            }
  |  | 6437|    221|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    221|    { \
  |  |  |  |  201|    221|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    221|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    221|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    221|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    221|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    221|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    221|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    221|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 221]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    221|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    221|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    221|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    221|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    221|    }
  |  |  ------------------
  |  | 6438|    221|        }
  |  | 6439|       |
  |  | 6440|   216k|        TARGET(FOR_ITER_LIST) {
  |  |  ------------------
  |  |  |  |  132|   216k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6441|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6442|       |            int opcode = FOR_ITER_LIST;
  |  | 6443|       |            (void)(opcode);
  |  | 6444|       |            #endif
  |  | 6445|   216k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6446|   216k|            (void)this_instr;
  |  | 6447|   216k|            frame->instr_ptr = next_instr;
  |  | 6448|   216k|            next_instr += 2;
  |  | 6449|   216k|            INSTRUCTION_STATS(FOR_ITER_LIST);
  |  |  ------------------
  |  |  |  |   71|   216k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6450|   216k|            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
  |  | 6451|   216k|            _PyStackRef iter;
  |  | 6452|   216k|            _PyStackRef null_or_index;
  |  | 6453|   216k|            _PyStackRef next;
  |  | 6454|       |            /* Skip 1 cache entry */
  |  | 6455|       |            // _ITER_CHECK_LIST
  |  | 6456|   216k|            {
  |  | 6457|   216k|                null_or_index = stack_pointer[-1];
  |  | 6458|   216k|                iter = stack_pointer[-2];
  |  | 6459|   216k|                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6460|   216k|                if (Py_TYPE(iter_o) != &PyList_Type) {
  |  |  ------------------
  |  |  |  |  213|   216k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   216k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   216k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6460:21): [True: 53, False: 216k]
  |  |  ------------------
  |  | 6461|     53|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|     53|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6462|     53|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6462:21): [True: 53, False: 0]
  |  |  ------------------
  |  | 6463|     53|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|     53|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6464|      0|                }
  |  | 6465|   216k|                assert(PyStackRef_IsTaggedInt(null_or_index));
  |  |  ------------------
  |  |  |  Branch (6465:17): [True: 216k, False: 0]
  |  |  ------------------
  |  | 6466|       |                #ifdef Py_GIL_DISABLED
  |  | 6467|       |                if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) {
  |  | 6468|       |                    UPDATE_MISS_STATS(FOR_ITER);
  |  | 6469|       |                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  | 6470|       |                    JUMP_TO_PREDICTED(FOR_ITER);
  |  | 6471|       |                }
  |  | 6472|       |                #endif
  |  | 6473|   216k|            }
  |  | 6474|       |            // _ITER_JUMP_LIST
  |  | 6475|   216k|            {
  |  | 6476|       |                #ifdef Py_GIL_DISABLED
  |  | 6477|       |
  |  | 6478|       |                #else
  |  | 6479|   216k|                PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6480|   216k|                assert(Py_TYPE(list_o) == &PyList_Type);
  |  |  ------------------
  |  |  |  Branch (6480:17): [True: 216k, False: 0]
  |  |  ------------------
  |  | 6481|   216k|                STAT_INC(FOR_ITER, hit);
  |  |  ------------------
  |  |  |  |   73|   216k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 6482|   216k|                if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyList_GET_SIZE(list_o)) {
  |  |  ------------------
  |  |  |  |   38|   216k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   216k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   216k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6482:21): [True: 20.1k, False: 196k]
  |  |  ------------------
  |  | 6483|  20.1k|                    null_or_index = PyStackRef_TagInt(-1);
  |  | 6484|  20.1k|                    JUMPBY(oparg + 1);
  |  |  ------------------
  |  |  |  |  261|  20.1k|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 6485|  20.1k|                    stack_pointer[-1] = null_or_index;
  |  | 6486|  20.1k|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  20.1k|    { \
  |  |  |  |  201|  20.1k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  20.1k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  20.1k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  20.1k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  20.1k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  20.1k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  20.1k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  20.1k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 20.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  20.1k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  20.1k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  20.1k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  20.1k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  20.1k|    }
  |  |  ------------------
  |  | 6487|  20.1k|                }
  |  | 6488|   216k|                #endif
  |  | 6489|   216k|            }
  |  | 6490|       |            // _ITER_NEXT_LIST
  |  | 6491|      0|            {
  |  | 6492|   216k|                PyObject *list_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6493|   216k|                assert(PyList_CheckExact(list_o));
  |  |  ------------------
  |  |  |  Branch (6493:17): [True: 196k, False: 20.1k]
  |  |  ------------------
  |  | 6494|       |                #ifdef Py_GIL_DISABLED
  |  | 6495|       |                assert(_Py_IsOwnedByCurrentThread(list_o) ||
  |  | 6496|       |                  _PyObject_GC_IS_SHARED(list_o));
  |  | 6497|       |                STAT_INC(FOR_ITER, hit);
  |  | 6498|       |                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6499|       |                _PyFrame_StackPointerValidate(frame);
  |  | 6500|       |                int result = _PyList_GetItemRefNoLock((PyListObject *)list_o, PyStackRef_UntagInt(null_or_index), &next);
  |  | 6501|       |                _PyFrame_StackPointerInvalidate(frame);
  |  | 6502|       |                if (result < 0) {
  |  | 6503|       |                    UPDATE_MISS_STATS(FOR_ITER);
  |  | 6504|       |                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  | 6505|       |                    JUMP_TO_PREDICTED(FOR_ITER);
  |  | 6506|       |                }
  |  | 6507|       |                if (result == 0) {
  |  | 6508|       |                    null_or_index = PyStackRef_TagInt(-1);
  |  | 6509|       |                    JUMPBY(oparg + 1);
  |  | 6510|       |                    stack_pointer[-1] = null_or_index;
  |  | 6511|       |                    DISPATCH();
  |  | 6512|       |                }
  |  | 6513|       |                #else
  |  | 6514|   196k|                next = PyStackRef_FromPyObjectNew(PyList_GET_ITEM(list_o, PyStackRef_UntagInt(null_or_index)));
  |  |  ------------------
  |  |  |  |  611|   196k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   196k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   392k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (37:38): [True: 196k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6515|      0|                #endif
  |  | 6516|      0|                null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index);
  |  | 6517|   196k|            }
  |  | 6518|      0|            stack_pointer[-1] = null_or_index;
  |  | 6519|   196k|            stack_pointer[0] = next;
  |  | 6520|   196k|            stack_pointer += 1;
  |  | 6521|   196k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   196k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6522|   196k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   196k|    { \
  |  |  |  |  201|   196k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   196k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   196k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   196k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   196k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   196k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   196k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   196k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 196k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   196k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   196k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   196k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   196k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   196k|    }
  |  |  ------------------
  |  | 6523|   196k|        }
  |  | 6524|       |
  |  | 6525|  4.83k|        TARGET(FOR_ITER_RANGE) {
  |  |  ------------------
  |  |  |  |  132|  4.83k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6526|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6527|       |            int opcode = FOR_ITER_RANGE;
  |  | 6528|       |            (void)(opcode);
  |  | 6529|       |            #endif
  |  | 6530|  4.83k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6531|  4.83k|            (void)this_instr;
  |  | 6532|  4.83k|            frame->instr_ptr = next_instr;
  |  | 6533|  4.83k|            next_instr += 2;
  |  | 6534|  4.83k|            INSTRUCTION_STATS(FOR_ITER_RANGE);
  |  |  ------------------
  |  |  |  |   71|  4.83k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6535|  4.83k|            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
  |  | 6536|  4.83k|            _PyStackRef iter;
  |  | 6537|  4.83k|            _PyStackRef next;
  |  | 6538|       |            /* Skip 1 cache entry */
  |  | 6539|       |            // _ITER_CHECK_RANGE
  |  | 6540|  4.83k|            {
  |  | 6541|  4.83k|                iter = stack_pointer[-2];
  |  | 6542|  4.83k|                _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter);
  |  | 6543|  4.83k|                if (Py_TYPE(r) != &PyRangeIter_Type) {
  |  |  ------------------
  |  |  |  |  213|  4.83k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.83k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.83k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6543:21): [True: 0, False: 4.83k]
  |  |  ------------------
  |  | 6544|      0|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6545|      0|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6545:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 6546|      0|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6547|      0|                }
  |  | 6548|       |                #ifdef Py_GIL_DISABLED
  |  | 6549|       |                if (!_PyObject_IsUniquelyReferenced((PyObject *)r)) {
  |  | 6550|       |                    UPDATE_MISS_STATS(FOR_ITER);
  |  | 6551|       |                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  | 6552|       |                    JUMP_TO_PREDICTED(FOR_ITER);
  |  | 6553|       |                }
  |  | 6554|       |                #endif
  |  | 6555|  4.83k|            }
  |  | 6556|       |            // _ITER_JUMP_RANGE
  |  | 6557|  4.83k|            {
  |  | 6558|  4.83k|                _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter);
  |  | 6559|  4.83k|                assert(Py_TYPE(r) == &PyRangeIter_Type);
  |  |  ------------------
  |  |  |  Branch (6559:17): [True: 4.83k, False: 0]
  |  |  ------------------
  |  | 6560|       |                #ifdef Py_GIL_DISABLED
  |  | 6561|       |                assert(_PyObject_IsUniquelyReferenced((PyObject *)r));
  |  | 6562|       |                #endif
  |  | 6563|  4.83k|                STAT_INC(FOR_ITER, hit);
  |  |  ------------------
  |  |  |  |   73|  4.83k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 6564|  4.83k|                if (r->len <= 0) {
  |  |  ------------------
  |  |  |  Branch (6564:21): [True: 310, False: 4.52k]
  |  |  ------------------
  |  | 6565|    310|                    JUMPBY(oparg + 1);
  |  |  ------------------
  |  |  |  |  261|    310|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 6566|    310|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    310|    { \
  |  |  |  |  201|    310|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    310|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    310|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    310|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    310|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    310|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    310|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    310|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 310]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    310|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    310|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    310|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    310|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    310|    }
  |  |  ------------------
  |  | 6567|    310|                }
  |  | 6568|  4.83k|            }
  |  | 6569|       |            // _ITER_NEXT_RANGE
  |  | 6570|      0|            {
  |  | 6571|  4.83k|                _PyRangeIterObject *r = (_PyRangeIterObject *)PyStackRef_AsPyObjectBorrow(iter);
  |  | 6572|  4.83k|                assert(Py_TYPE(r) == &PyRangeIter_Type);
  |  |  ------------------
  |  |  |  Branch (6572:17): [True: 4.52k, False: 310]
  |  |  ------------------
  |  | 6573|       |                #ifdef Py_GIL_DISABLED
  |  | 6574|       |                assert(_PyObject_IsUniquelyReferenced((PyObject *)r));
  |  | 6575|       |                #endif
  |  | 6576|  4.83k|                assert(r->len > 0);
  |  |  ------------------
  |  |  |  Branch (6576:17): [True: 4.52k, False: 0]
  |  |  ------------------
  |  | 6577|  4.52k|                long value = r->start;
  |  | 6578|  4.52k|                r->start = value + r->step;
  |  | 6579|  4.52k|                r->len--;
  |  | 6580|  4.52k|                PyObject *res = PyLong_FromLong(value);
  |  | 6581|  4.52k|                if (res == NULL) {
  |  |  ------------------
  |  |  |  Branch (6581:21): [True: 0, False: 4.52k]
  |  |  ------------------
  |  | 6582|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6583|      0|                }
  |  | 6584|  4.52k|                next = PyStackRef_FromPyObjectSteal(res);
  |  | 6585|  4.52k|            }
  |  | 6586|      0|            stack_pointer[0] = next;
  |  | 6587|  4.52k|            stack_pointer += 1;
  |  | 6588|  4.52k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  4.52k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6589|  4.52k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  4.52k|    { \
  |  |  |  |  201|  4.52k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  4.52k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.52k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  4.52k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  4.52k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.52k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  4.52k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  4.52k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4.52k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  4.52k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  4.52k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  4.52k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  4.52k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  4.52k|    }
  |  |  ------------------
  |  | 6590|  4.52k|        }
  |  | 6591|       |
  |  | 6592|  8.45k|        TARGET(FOR_ITER_TUPLE) {
  |  |  ------------------
  |  |  |  |  132|  8.45k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6593|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6594|       |            int opcode = FOR_ITER_TUPLE;
  |  | 6595|       |            (void)(opcode);
  |  | 6596|       |            #endif
  |  | 6597|  8.45k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6598|  8.45k|            (void)this_instr;
  |  | 6599|  8.45k|            frame->instr_ptr = next_instr;
  |  | 6600|  8.45k|            next_instr += 2;
  |  | 6601|  8.45k|            INSTRUCTION_STATS(FOR_ITER_TUPLE);
  |  |  ------------------
  |  |  |  |   71|  8.45k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6602|  8.45k|            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
  |  | 6603|  8.45k|            _PyStackRef iter;
  |  | 6604|  8.45k|            _PyStackRef null_or_index;
  |  | 6605|  8.45k|            _PyStackRef next;
  |  | 6606|       |            /* Skip 1 cache entry */
  |  | 6607|       |            // _ITER_CHECK_TUPLE
  |  | 6608|  8.45k|            {
  |  | 6609|  8.45k|                null_or_index = stack_pointer[-1];
  |  | 6610|  8.45k|                iter = stack_pointer[-2];
  |  | 6611|  8.45k|                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6612|  8.45k|                if (Py_TYPE(iter_o) != &PyTuple_Type) {
  |  |  ------------------
  |  |  |  |  213|  8.45k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6612:21): [True: 8, False: 8.44k]
  |  |  ------------------
  |  | 6613|      8|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|      8|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6614|      8|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6614:21): [True: 8, False: 0]
  |  |  ------------------
  |  | 6615|      8|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|      8|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6616|      0|                }
  |  | 6617|  8.45k|                assert(PyStackRef_IsTaggedInt(null_or_index));
  |  |  ------------------
  |  |  |  Branch (6617:17): [True: 8.44k, False: 0]
  |  |  ------------------
  |  | 6618|  8.44k|            }
  |  | 6619|       |            // _ITER_JUMP_TUPLE
  |  | 6620|  8.44k|            {
  |  | 6621|  8.44k|                PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6622|  8.44k|                (void)tuple_o;
  |  | 6623|  8.44k|                assert(Py_TYPE(tuple_o) == &PyTuple_Type);
  |  |  ------------------
  |  |  |  Branch (6623:17): [True: 8.44k, False: 0]
  |  |  ------------------
  |  | 6624|  8.44k|                STAT_INC(FOR_ITER, hit);
  |  |  ------------------
  |  |  |  |   73|  8.44k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 6625|  8.44k|                if ((size_t)PyStackRef_UntagInt(null_or_index) >= (size_t)PyTuple_GET_SIZE(tuple_o)) {
  |  |  ------------------
  |  |  |  |   27|  8.44k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.44k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.44k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6625:21): [True: 2.71k, False: 5.73k]
  |  |  ------------------
  |  | 6626|  2.71k|                    null_or_index = PyStackRef_TagInt(-1);
  |  | 6627|  2.71k|                    JUMPBY(oparg + 1);
  |  |  ------------------
  |  |  |  |  261|  2.71k|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 6628|  2.71k|                    stack_pointer[-1] = null_or_index;
  |  | 6629|  2.71k|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.71k|    { \
  |  |  |  |  201|  2.71k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.71k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.71k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.71k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.71k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.71k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.71k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.71k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.71k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.71k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.71k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.71k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.71k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.71k|    }
  |  |  ------------------
  |  | 6630|  2.71k|                }
  |  | 6631|  8.44k|            }
  |  | 6632|       |            // _ITER_NEXT_TUPLE
  |  | 6633|      0|            {
  |  | 6634|  8.44k|                PyObject *tuple_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6635|  8.44k|                assert(Py_TYPE(tuple_o) == &PyTuple_Type);
  |  |  ------------------
  |  |  |  Branch (6635:17): [True: 5.73k, False: 2.71k]
  |  |  ------------------
  |  | 6636|  5.73k|                uintptr_t i = PyStackRef_UntagInt(null_or_index);
  |  | 6637|  5.73k|                assert((size_t)i < (size_t)PyTuple_GET_SIZE(tuple_o));
  |  |  ------------------
  |  |  |  Branch (6637:17): [True: 5.73k, False: 0]
  |  |  ------------------
  |  | 6638|  5.73k|                next = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(tuple_o, i));
  |  |  ------------------
  |  |  |  |  611|  5.73k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (37:38): [True: 5.73k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6639|      0|                null_or_index = PyStackRef_IncrementTaggedIntNoOverflow(null_or_index);
  |  | 6640|  5.73k|            }
  |  | 6641|      0|            stack_pointer[-1] = null_or_index;
  |  | 6642|  5.73k|            stack_pointer[0] = next;
  |  | 6643|  5.73k|            stack_pointer += 1;
  |  | 6644|  5.73k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  5.73k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6645|  5.73k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  5.73k|    { \
  |  |  |  |  201|  5.73k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  5.73k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  5.73k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  5.73k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  5.73k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  5.73k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  5.73k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  5.73k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 5.73k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  5.73k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  5.73k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  5.73k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  5.73k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  5.73k|    }
  |  |  ------------------
  |  | 6646|  5.73k|        }
  |  | 6647|       |
  |  | 6648|  13.7M|        TARGET(FOR_ITER_VIRTUAL) {
  |  |  ------------------
  |  |  |  |  132|  13.7M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6649|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6650|       |            int opcode = FOR_ITER_VIRTUAL;
  |  | 6651|       |            (void)(opcode);
  |  | 6652|       |            #endif
  |  | 6653|  13.7M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6654|  13.7M|            (void)this_instr;
  |  | 6655|  13.7M|            frame->instr_ptr = next_instr;
  |  | 6656|  13.7M|            next_instr += 2;
  |  | 6657|  13.7M|            INSTRUCTION_STATS(FOR_ITER_VIRTUAL);
  |  |  ------------------
  |  |  |  |   71|  13.7M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6658|  13.7M|            static_assert(INLINE_CACHE_ENTRIES_FOR_ITER == 1, "incorrect cache size");
  |  | 6659|  13.7M|            _PyStackRef null_or_index;
  |  | 6660|  13.7M|            _PyStackRef iter;
  |  | 6661|  13.7M|            _PyStackRef next;
  |  | 6662|       |            /* Skip 1 cache entry */
  |  | 6663|       |            // _GUARD_TOS_NOT_NULL
  |  | 6664|  13.7M|            {
  |  | 6665|  13.7M|                null_or_index = stack_pointer[-1];
  |  | 6666|  13.7M|                if (PyStackRef_IsNull(null_or_index)) {
  |  |  ------------------
  |  |  |  |  482|  13.7M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  13.7M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  13.7M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 13.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6667|      0|                    UPDATE_MISS_STATS(FOR_ITER);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6668|      0|                    assert(_PyOpcode_Deopt[opcode] == (FOR_ITER));
  |  |  ------------------
  |  |  |  Branch (6668:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 6669|      0|                    JUMP_TO_PREDICTED(FOR_ITER);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6670|      0|                }
  |  | 6671|  13.7M|            }
  |  | 6672|       |            // _FOR_ITER_VIRTUAL
  |  | 6673|  13.7M|            {
  |  | 6674|  13.7M|                iter = stack_pointer[-2];
  |  | 6675|  13.7M|                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
  |  | 6676|  13.7M|                Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
  |  | 6677|  13.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6678|  13.7M|                _PyFrame_StackPointerValidate(frame);
  |  | 6679|  13.7M|                _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
  |  |  ------------------
  |  |  |  |  213|  13.7M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  13.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  13.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6680|  13.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6681|  13.7M|                PyObject *next_o = next_index.object;
  |  | 6682|  13.7M|                index = next_index.index;
  |  | 6683|  13.7M|                if (next_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6683:21): [True: 447k, False: 13.2M]
  |  |  ------------------
  |  | 6684|   447k|                    if (index < 0) {
  |  |  ------------------
  |  |  |  Branch (6684:25): [True: 0, False: 447k]
  |  |  ------------------
  |  | 6685|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6686|      0|                    }
  |  | 6687|   447k|                    JUMPBY(oparg + 1);
  |  |  ------------------
  |  |  |  |  261|   447k|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 6688|   447k|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   447k|    { \
  |  |  |  |  201|   447k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   447k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   447k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   447k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   447k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   447k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   447k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   447k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 447k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   447k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   447k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   447k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   447k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   447k|    }
  |  |  ------------------
  |  | 6689|   447k|                }
  |  | 6690|  13.7M|                null_or_index = PyStackRef_TagInt(index);
  |  | 6691|  13.7M|                next = PyStackRef_FromPyObjectSteal(next_o);
  |  | 6692|  13.7M|            }
  |  | 6693|      0|            stack_pointer[-1] = null_or_index;
  |  | 6694|  13.7M|            stack_pointer[0] = next;
  |  | 6695|  13.7M|            stack_pointer += 1;
  |  | 6696|  13.7M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  13.7M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6697|  13.7M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  13.7M|    { \
  |  |  |  |  201|  13.7M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  13.7M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  13.7M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  13.7M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  13.7M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  13.7M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  13.7M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  13.7M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 13.7M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  13.7M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  13.7M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  13.7M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  13.7M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  13.7M|    }
  |  |  ------------------
  |  | 6698|  13.7M|        }
  |  | 6699|       |
  |  | 6700|      0|        TARGET(GET_AITER) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6701|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6702|       |            int opcode = GET_AITER;
  |  | 6703|       |            (void)(opcode);
  |  | 6704|       |            #endif
  |  | 6705|      0|            frame->instr_ptr = next_instr;
  |  | 6706|      0|            next_instr += 1;
  |  | 6707|      0|            INSTRUCTION_STATS(GET_AITER);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6708|      0|            _PyStackRef obj;
  |  | 6709|      0|            _PyStackRef iter;
  |  | 6710|      0|            obj = stack_pointer[-1];
  |  | 6711|      0|            unaryfunc getter = NULL;
  |  | 6712|      0|            PyObject *obj_o = PyStackRef_AsPyObjectBorrow(obj);
  |  | 6713|      0|            PyObject *iter_o;
  |  | 6714|      0|            PyTypeObject *type = Py_TYPE(obj_o);
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6715|      0|            if (type->tp_as_async != NULL) {
  |  |  ------------------
  |  |  |  Branch (6715:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6716|      0|                getter = type->tp_as_async->am_aiter;
  |  | 6717|      0|            }
  |  | 6718|      0|            if (getter == NULL) {
  |  |  ------------------
  |  |  |  Branch (6718:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6719|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6720|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6721|      0|                _PyErr_Format(tstate, PyExc_TypeError,
  |  | 6722|      0|                              "'async for' requires an object with "
  |  | 6723|      0|                              "__aiter__ method, got %.100s",
  |  | 6724|      0|                              type->tp_name);
  |  | 6725|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6726|      0|                stack_pointer += -1;
  |  | 6727|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6728|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6729|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6730|      0|                PyStackRef_CLOSE(obj);
  |  | 6731|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6732|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6733|      0|            }
  |  | 6734|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6735|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6736|      0|            iter_o = (*getter)(obj_o);
  |  | 6737|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6738|      0|            stack_pointer += -1;
  |  | 6739|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6740|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6741|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6742|      0|            PyStackRef_CLOSE(obj);
  |  | 6743|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6744|      0|            if (iter_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6744:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6745|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6746|      0|            }
  |  | 6747|      0|            if (Py_TYPE(iter_o)->tp_as_async == NULL ||
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6747:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6748|      0|                Py_TYPE(iter_o)->tp_as_async->am_anext == NULL) {
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6748:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6749|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6749:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6750|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6751|      0|                _PyErr_Format(tstate, PyExc_TypeError,
  |  | 6752|      0|                              "'async for' received an object from __aiter__ "
  |  | 6753|      0|                              "that does not implement __anext__: %.100s",
  |  | 6754|      0|                              Py_TYPE(iter_o)->tp_name);
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6755|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6756|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (6756:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6757|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 6758|      0|                Py_DECREF(iter_o);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6759|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6760|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6761|      0|            }
  |  | 6762|      0|            iter = PyStackRef_FromPyObjectSteal(iter_o);
  |  | 6763|      0|            stack_pointer[0] = iter;
  |  | 6764|      0|            stack_pointer += 1;
  |  | 6765|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6766|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 6767|      0|        }
  |  | 6768|       |
  |  | 6769|      0|        TARGET(GET_ANEXT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6770|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6771|       |            int opcode = GET_ANEXT;
  |  | 6772|       |            (void)(opcode);
  |  | 6773|       |            #endif
  |  | 6774|      0|            frame->instr_ptr = next_instr;
  |  | 6775|      0|            next_instr += 1;
  |  | 6776|      0|            INSTRUCTION_STATS(GET_ANEXT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6777|      0|            _PyStackRef aiter;
  |  | 6778|      0|            _PyStackRef awaitable;
  |  | 6779|      0|            aiter = stack_pointer[-1];
  |  | 6780|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6781|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6782|      0|            PyObject *awaitable_o = _PyEval_GetANext(PyStackRef_AsPyObjectBorrow(aiter));
  |  | 6783|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6784|      0|            if (awaitable_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6784:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6785|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6786|      0|            }
  |  | 6787|      0|            awaitable = PyStackRef_FromPyObjectSteal(awaitable_o);
  |  | 6788|      0|            stack_pointer[0] = awaitable;
  |  | 6789|      0|            stack_pointer += 1;
  |  | 6790|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6791|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 6792|      0|        }
  |  | 6793|       |
  |  | 6794|      0|        TARGET(GET_AWAITABLE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6795|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6796|       |            int opcode = GET_AWAITABLE;
  |  | 6797|       |            (void)(opcode);
  |  | 6798|       |            #endif
  |  | 6799|      0|            frame->instr_ptr = next_instr;
  |  | 6800|      0|            next_instr += 1;
  |  | 6801|      0|            INSTRUCTION_STATS(GET_AWAITABLE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6802|      0|            _PyStackRef iterable;
  |  | 6803|      0|            _PyStackRef iter;
  |  | 6804|      0|            iterable = stack_pointer[-1];
  |  | 6805|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6806|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6807|      0|            PyObject *iter_o = _PyEval_GetAwaitable(PyStackRef_AsPyObjectBorrow(iterable), oparg);
  |  | 6808|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6809|      0|            stack_pointer += -1;
  |  | 6810|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6811|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6812|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6813|      0|            PyStackRef_CLOSE(iterable);
  |  | 6814|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6815|      0|            if (iter_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6815:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6816|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6817|      0|            }
  |  | 6818|      0|            iter = PyStackRef_FromPyObjectSteal(iter_o);
  |  | 6819|      0|            stack_pointer[0] = iter;
  |  | 6820|      0|            stack_pointer += 1;
  |  | 6821|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6822|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 6823|      0|        }
  |  | 6824|       |
  |  | 6825|    659|        TARGET(GET_ITER) {
  |  |  ------------------
  |  |  |  |  132|    659|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6826|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6827|       |            int opcode = GET_ITER;
  |  | 6828|       |            (void)(opcode);
  |  | 6829|       |            #endif
  |  | 6830|    659|            frame->instr_ptr = next_instr;
  |  | 6831|    659|            next_instr += 2;
  |  | 6832|    659|            INSTRUCTION_STATS(GET_ITER);
  |  |  ------------------
  |  |  |  |   71|    659|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6833|    712|            PREDICTED_GET_ITER:;
  |  | 6834|    712|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  | 6835|    712|            (void)this_instr;
  |  | 6836|    712|            _PyStackRef iterable;
  |  | 6837|    712|            _PyStackRef iter;
  |  | 6838|    712|            _PyStackRef index_or_null;
  |  | 6839|       |            // _SPECIALIZE_GET_ITER
  |  | 6840|    712|            {
  |  | 6841|    712|                iterable = stack_pointer[-1];
  |  | 6842|    712|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 6843|    712|                (void)counter;
  |  | 6844|    712|                #if ENABLE_SPECIALIZATION
  |  | 6845|    712|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|    712|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 132, False: 580]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6846|    132|                    next_instr = this_instr;
  |  | 6847|    132|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6848|    132|                    _PyFrame_StackPointerValidate(frame);
  |  | 6849|    132|                    _Py_Specialize_GetIter(iterable, next_instr);
  |  | 6850|    132|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 6851|    132|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|    132|    { \
  |  |  |  |  217|    132|        opcode = next_instr->op.code; \
  |  |  |  |  218|    132|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    132|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|    132|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    132|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|    132|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|    132|    }
  |  |  ------------------
  |  | 6852|    132|                }
  |  | 6853|    712|                OPCODE_DEFERRED_INC(GET_ITER);
  |  |  ------------------
  |  |  |  |   90|    712|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 6854|    712|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|    712|    do { \
  |  |  |  |  378|    712|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|    712|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 712]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6855|    712|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 6856|    712|            }
  |  | 6857|       |            // _GET_ITER
  |  | 6858|    712|            {
  |  | 6859|    712|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6860|    712|                _PyFrame_StackPointerValidate(frame);
  |  | 6861|    712|                _PyStackRef result = _PyEval_GetIter(iterable, &index_or_null, oparg);
  |  | 6862|    712|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6863|    712|                if (PyStackRef_IsError(result)) {
  |  |  ------------------
  |  |  |  Branch (6863:21): [True: 0, False: 712]
  |  |  ------------------
  |  | 6864|      0|                    JUMP_TO_LABEL(pop_1_error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6865|      0|                }
  |  | 6866|    712|                iter = result;
  |  | 6867|    712|            }
  |  | 6868|      0|            stack_pointer[-1] = iter;
  |  | 6869|    712|            stack_pointer[0] = index_or_null;
  |  | 6870|    712|            stack_pointer += 1;
  |  | 6871|    712|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    712|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6872|    712|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    712|    { \
  |  |  |  |  201|    712|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    712|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    712|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    712|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    712|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    712|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    712|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    712|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 712]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    712|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    712|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    712|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    712|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    712|    }
  |  |  ------------------
  |  | 6873|    712|        }
  |  | 6874|       |
  |  | 6875|  37.9k|        TARGET(GET_ITER_SELF) {
  |  |  ------------------
  |  |  |  |  132|  37.9k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6876|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6877|       |            int opcode = GET_ITER_SELF;
  |  | 6878|       |            (void)(opcode);
  |  | 6879|       |            #endif
  |  | 6880|  37.9k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6881|  37.9k|            (void)this_instr;
  |  | 6882|  37.9k|            frame->instr_ptr = next_instr;
  |  | 6883|  37.9k|            next_instr += 2;
  |  | 6884|  37.9k|            INSTRUCTION_STATS(GET_ITER_SELF);
  |  |  ------------------
  |  |  |  |   71|  37.9k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6885|  37.9k|            static_assert(INLINE_CACHE_ENTRIES_GET_ITER == 1, "incorrect cache size");
  |  | 6886|  37.9k|            _PyStackRef iterable;
  |  | 6887|  37.9k|            _PyStackRef res;
  |  | 6888|       |            /* Skip 1 cache entry */
  |  | 6889|       |            // _GUARD_ITERATOR
  |  | 6890|  37.9k|            {
  |  | 6891|  37.9k|                iterable = stack_pointer[-1];
  |  | 6892|  37.9k|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
  |  |  ------------------
  |  |  |  |  213|  37.9k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  37.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  37.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6893|  37.9k|                if (tp->tp_iter != PyObject_SelfIter) {
  |  |  ------------------
  |  |  |  Branch (6893:21): [True: 0, False: 37.9k]
  |  |  ------------------
  |  | 6894|      0|                    UPDATE_MISS_STATS(GET_ITER);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6895|      0|                    assert(_PyOpcode_Deopt[opcode] == (GET_ITER));
  |  |  ------------------
  |  |  |  Branch (6895:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 6896|      0|                    JUMP_TO_PREDICTED(GET_ITER);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6897|      0|                }
  |  | 6898|  37.9k|                STAT_INC(GET_ITER, hit);
  |  |  ------------------
  |  |  |  |   73|  37.9k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 6899|  37.9k|            }
  |  | 6900|       |            // _PUSH_NULL
  |  | 6901|      0|            {
  |  | 6902|  37.9k|                res = PyStackRef_NULL;
  |  | 6903|  37.9k|            }
  |  | 6904|  37.9k|            stack_pointer[0] = res;
  |  | 6905|  37.9k|            stack_pointer += 1;
  |  | 6906|  37.9k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  37.9k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6907|  37.9k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  37.9k|    { \
  |  |  |  |  201|  37.9k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  37.9k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  37.9k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  37.9k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  37.9k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  37.9k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  37.9k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  37.9k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 37.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  37.9k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  37.9k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  37.9k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  37.9k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  37.9k|    }
  |  |  ------------------
  |  | 6908|  37.9k|        }
  |  | 6909|       |
  |  | 6910|   471k|        TARGET(GET_ITER_VIRTUAL) {
  |  |  ------------------
  |  |  |  |  132|   471k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6911|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6912|       |            int opcode = GET_ITER_VIRTUAL;
  |  | 6913|       |            (void)(opcode);
  |  | 6914|       |            #endif
  |  | 6915|   471k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 6916|   471k|            (void)this_instr;
  |  | 6917|   471k|            frame->instr_ptr = next_instr;
  |  | 6918|   471k|            next_instr += 2;
  |  | 6919|   471k|            INSTRUCTION_STATS(GET_ITER_VIRTUAL);
  |  |  ------------------
  |  |  |  |   71|   471k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6920|   471k|            static_assert(INLINE_CACHE_ENTRIES_GET_ITER == 1, "incorrect cache size");
  |  | 6921|   471k|            _PyStackRef iterable;
  |  | 6922|   471k|            _PyStackRef zero;
  |  | 6923|       |            /* Skip 1 cache entry */
  |  | 6924|       |            // _GUARD_ITER_VIRTUAL
  |  | 6925|   471k|            {
  |  | 6926|   471k|                iterable = stack_pointer[-1];
  |  | 6927|   471k|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(iterable));
  |  |  ------------------
  |  |  |  |  213|   471k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   471k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   471k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6928|   471k|                if (tp->_tp_iteritem == NULL) {
  |  |  ------------------
  |  |  |  Branch (6928:21): [True: 53, False: 471k]
  |  |  ------------------
  |  | 6929|     53|                    UPDATE_MISS_STATS(GET_ITER);
  |  |  ------------------
  |  |  |  |  299|     53|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 6930|     53|                    assert(_PyOpcode_Deopt[opcode] == (GET_ITER));
  |  |  ------------------
  |  |  |  Branch (6930:21): [True: 53, False: 0]
  |  |  ------------------
  |  | 6931|     53|                    JUMP_TO_PREDICTED(GET_ITER);
  |  |  ------------------
  |  |  |  |  136|     53|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 6932|      0|                }
  |  | 6933|   471k|                STAT_INC(GET_ITER, hit);
  |  |  ------------------
  |  |  |  |   73|   471k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 6934|   471k|            }
  |  | 6935|       |            // _PUSH_TAGGED_ZERO
  |  | 6936|      0|            {
  |  | 6937|   471k|                zero = PyStackRef_TagInt(0);
  |  | 6938|   471k|            }
  |  | 6939|   471k|            stack_pointer[0] = zero;
  |  | 6940|   471k|            stack_pointer += 1;
  |  | 6941|   471k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   471k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6942|   471k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   471k|    { \
  |  |  |  |  201|   471k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   471k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   471k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   471k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   471k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   471k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   471k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   471k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 471k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   471k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   471k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   471k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   471k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   471k|    }
  |  |  ------------------
  |  | 6943|   471k|        }
  |  | 6944|       |
  |  | 6945|      0|        TARGET(GET_LEN) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6946|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6947|       |            int opcode = GET_LEN;
  |  | 6948|       |            (void)(opcode);
  |  | 6949|       |            #endif
  |  | 6950|      0|            frame->instr_ptr = next_instr;
  |  | 6951|      0|            next_instr += 1;
  |  | 6952|      0|            INSTRUCTION_STATS(GET_LEN);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6953|      0|            _PyStackRef obj;
  |  | 6954|      0|            _PyStackRef len;
  |  | 6955|      0|            obj = stack_pointer[-1];
  |  | 6956|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6957|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 6958|      0|            Py_ssize_t len_i = PyObject_Length(PyStackRef_AsPyObjectBorrow(obj));
  |  |  ------------------
  |  |  |  |  353|      0|#define PyObject_Length PyObject_Size
  |  |  ------------------
  |  | 6959|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 6960|      0|            if (len_i < 0) {
  |  |  ------------------
  |  |  |  Branch (6960:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6961|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6962|      0|            }
  |  | 6963|      0|            PyObject *len_o = PyLong_FromSsize_t(len_i);
  |  | 6964|      0|            if (len_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (6964:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 6965|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 6966|      0|            }
  |  | 6967|      0|            len = PyStackRef_FromPyObjectSteal(len_o);
  |  | 6968|      0|            stack_pointer[0] = len;
  |  | 6969|      0|            stack_pointer += 1;
  |  | 6970|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 6971|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 6972|      0|        }
  |  | 6973|       |
  |  | 6974|    250|        TARGET(IMPORT_FROM) {
  |  |  ------------------
  |  |  |  |  132|    250|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 6975|       |            #if _Py_TAIL_CALL_INTERP
  |  | 6976|       |            int opcode = IMPORT_FROM;
  |  | 6977|       |            (void)(opcode);
  |  | 6978|       |            #endif
  |  | 6979|    250|            frame->instr_ptr = next_instr;
  |  | 6980|    250|            next_instr += 1;
  |  | 6981|    250|            INSTRUCTION_STATS(IMPORT_FROM);
  |  |  ------------------
  |  |  |  |   71|    250|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 6982|    250|            _PyStackRef from;
  |  | 6983|    250|            _PyStackRef res;
  |  | 6984|    250|            from = stack_pointer[-1];
  |  | 6985|    250|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|    250|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|    250|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|    250|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    250|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (6985:30): [True: 250, False: 0]
  |  |  ------------------
  |  | 6986|      0|            PyObject *res_o;
  |  | 6987|    250|            if (PyLazyImport_CheckExact(PyStackRef_AsPyObjectBorrow(from))) {
  |  |  ------------------
  |  |  |  |   15|    250|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    250|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    250|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    250|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 2, False: 248]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 6988|      2|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6989|      2|                _PyFrame_StackPointerValidate(frame);
  |  | 6990|      2|                res_o = _PyEval_LazyImportFrom(
  |  | 6991|      2|                    tstate, frame, PyStackRef_AsPyObjectBorrow(from), name);
  |  | 6992|      2|                _PyFrame_StackPointerInvalidate(frame);
  |  | 6993|      2|            }
  |  | 6994|    248|            else {
  |  | 6995|    248|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 6996|    248|                _PyFrame_StackPointerValidate(frame);
  |  | 6997|    248|                res_o = _PyEval_ImportFrom(
  |  | 6998|    248|                    tstate, PyStackRef_AsPyObjectBorrow(from), name);
  |  | 6999|    248|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7000|    248|            }
  |  | 7001|    250|            if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7001:17): [True: 1, False: 249]
  |  |  ------------------
  |  | 7002|      1|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      1|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7003|      0|            }
  |  | 7004|    249|            res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 7005|    249|            stack_pointer[0] = res;
  |  | 7006|    249|            stack_pointer += 1;
  |  | 7007|    249|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    249|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7008|    249|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    249|    { \
  |  |  |  |  201|    249|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    249|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    249|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    249|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    249|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    249|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    249|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    249|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 249]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    249|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    249|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    249|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    249|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    249|    }
  |  |  ------------------
  |  | 7009|    249|        }
  |  | 7010|       |
  |  | 7011|   194k|        TARGET(IMPORT_NAME) {
  |  |  ------------------
  |  |  |  |  132|   194k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7012|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7013|       |            int opcode = IMPORT_NAME;
  |  | 7014|       |            (void)(opcode);
  |  | 7015|       |            #endif
  |  | 7016|   194k|            frame->instr_ptr = next_instr;
  |  | 7017|   194k|            next_instr += 1;
  |  | 7018|   194k|            INSTRUCTION_STATS(IMPORT_NAME);
  |  |  ------------------
  |  |  |  |   71|   194k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7019|   194k|            _PyStackRef level;
  |  | 7020|   194k|            _PyStackRef fromlist;
  |  | 7021|   194k|            _PyStackRef res;
  |  | 7022|   194k|            fromlist = stack_pointer[-1];
  |  | 7023|   194k|            level = stack_pointer[-2];
  |  | 7024|   194k|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
  |  |  ------------------
  |  |  |  |  236|   194k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|   194k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|   194k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   194k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7024:30): [True: 194k, False: 0]
  |  |  ------------------
  |  | 7025|      0|            PyObject *res_o;
  |  | 7026|   194k|            if (!(oparg & 0x02)) {
  |  |  ------------------
  |  |  |  Branch (7026:17): [True: 273, False: 194k]
  |  |  ------------------
  |  | 7027|    273|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7028|    273|                _PyFrame_StackPointerValidate(frame);
  |  | 7029|    273|                res_o = _PyEval_LazyImportName(tstate, BUILTINS(), GLOBALS(),
  |  |  ------------------
  |  |  |  |  327|    273|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  |                               res_o = _PyEval_LazyImportName(tstate, BUILTINS(), GLOBALS(),
  |  |  ------------------
  |  |  |  |  326|    273|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  | 7030|    273|                    LOCALS(), name,
  |  |  ------------------
  |  |  |  |  328|    273|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  | 7031|    273|                    PyStackRef_AsPyObjectBorrow(fromlist),
  |  | 7032|    273|                    PyStackRef_AsPyObjectBorrow(level),
  |  | 7033|    273|                    oparg & 0x01);
  |  | 7034|    273|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7035|    273|            }
  |  | 7036|   194k|            else {
  |  | 7037|   194k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7038|   194k|                _PyFrame_StackPointerValidate(frame);
  |  | 7039|   194k|                res_o = _PyEval_ImportName(tstate, BUILTINS(), GLOBALS(),
  |  |  ------------------
  |  |  |  |  327|   194k|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  |                               res_o = _PyEval_ImportName(tstate, BUILTINS(), GLOBALS(),
  |  |  ------------------
  |  |  |  |  326|   194k|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  | 7040|   194k|                    LOCALS(), name,
  |  |  ------------------
  |  |  |  |  328|   194k|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  | 7041|   194k|                    PyStackRef_AsPyObjectBorrow(fromlist),
  |  | 7042|   194k|                    PyStackRef_AsPyObjectBorrow(level));
  |  | 7043|   194k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7044|   194k|            }
  |  | 7045|   194k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7045:13): [True: 194k, False: 0]
  |  |  ------------------
  |  | 7046|   194k|            _PyFrame_StackPointerValidate(frame);
  |  | 7047|   194k|            _PyStackRef tmp = fromlist;
  |  | 7048|   194k|            fromlist = PyStackRef_NULL;
  |  | 7049|   194k|            stack_pointer[-1] = fromlist;
  |  | 7050|   194k|            PyStackRef_CLOSE(tmp);
  |  | 7051|   194k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7052|   194k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7052:13): [True: 194k, False: 0]
  |  |  ------------------
  |  | 7053|   194k|            _PyFrame_StackPointerValidate(frame);
  |  | 7054|   194k|            tmp = level;
  |  | 7055|   194k|            level = PyStackRef_NULL;
  |  | 7056|   194k|            stack_pointer[-2] = level;
  |  | 7057|   194k|            PyStackRef_CLOSE(tmp);
  |  | 7058|   194k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7059|   194k|            stack_pointer += -2;
  |  | 7060|   194k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   194k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7061|   194k|            if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7061:17): [True: 6, False: 194k]
  |  |  ------------------
  |  | 7062|      6|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      6|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7063|      0|            }
  |  | 7064|   194k|            res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 7065|   194k|            stack_pointer[0] = res;
  |  | 7066|   194k|            stack_pointer += 1;
  |  | 7067|   194k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   194k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7068|   194k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   194k|    { \
  |  |  |  |  201|   194k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   194k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   194k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   194k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   194k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   194k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   194k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   194k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 194k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   194k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   194k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   194k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   194k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   194k|    }
  |  |  ------------------
  |  | 7069|   194k|        }
  |  | 7070|       |
  |  | 7071|      0|        TARGET(INSTRUMENTED_CALL) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7072|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7073|       |            int opcode = INSTRUMENTED_CALL;
  |  | 7074|       |            (void)(opcode);
  |  | 7075|       |            #endif
  |  | 7076|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7077|      0|            (void)this_instr;
  |  | 7078|      0|            frame->instr_ptr = next_instr;
  |  | 7079|      0|            next_instr += 4;
  |  | 7080|      0|            INSTRUCTION_STATS(INSTRUMENTED_CALL);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7081|      0|            opcode = INSTRUMENTED_CALL;
  |  |  ------------------
  |  |  |  |  237|      0|#define INSTRUMENTED_CALL                      249
  |  |  ------------------
  |  | 7082|      0|            _PyStackRef callable;
  |  | 7083|      0|            _PyStackRef self_or_null;
  |  | 7084|      0|            _PyStackRef func;
  |  | 7085|      0|            _PyStackRef maybe_self;
  |  | 7086|      0|            _PyStackRef *args;
  |  | 7087|      0|            _PyStackRef res;
  |  | 7088|       |            /* Skip 3 cache entries */
  |  | 7089|       |            // _MAYBE_EXPAND_METHOD
  |  | 7090|      0|            {
  |  | 7091|      0|                self_or_null = stack_pointer[-1 - oparg];
  |  | 7092|      0|                callable = stack_pointer[-2 - oparg];
  |  | 7093|      0|                if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7093:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7094|      0|                    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 7095|      0|                    PyObject *self = ((PyMethodObject *)callable_o)->im_self;
  |  | 7096|      0|                    self_or_null = PyStackRef_FromPyObjectNew(self);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7097|      0|                    PyObject *method = ((PyMethodObject *)callable_o)->im_func;
  |  | 7098|      0|                    _PyStackRef temp = callable;
  |  | 7099|      0|                    callable = PyStackRef_FromPyObjectNew(method);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7100|      0|                    stack_pointer[-2 - oparg] = callable;
  |  | 7101|      0|                    stack_pointer[-1 - oparg] = self_or_null;
  |  | 7102|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7103|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7104|      0|                    PyStackRef_CLOSE(temp);
  |  | 7105|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7106|      0|                }
  |  | 7107|      0|            }
  |  | 7108|       |            // _MONITOR_CALL
  |  | 7109|      0|            {
  |  | 7110|      0|                args = &stack_pointer[-oparg];
  |  | 7111|      0|                maybe_self = self_or_null;
  |  | 7112|      0|                func = callable;
  |  | 7113|      0|                int is_meth = !PyStackRef_IsNull(maybe_self);
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7114|      0|                PyObject *function = PyStackRef_AsPyObjectBorrow(func);
  |  | 7115|      0|                PyObject *arg0;
  |  | 7116|      0|                if (is_meth) {
  |  |  ------------------
  |  |  |  Branch (7116:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7117|      0|                    arg0 = PyStackRef_AsPyObjectBorrow(maybe_self);
  |  | 7118|      0|                }
  |  | 7119|      0|                else if (oparg) {
  |  |  ------------------
  |  |  |  Branch (7119:26): [True: 0, False: 0]
  |  |  ------------------
  |  | 7120|      0|                    arg0 = PyStackRef_AsPyObjectBorrow(args[0]);
  |  | 7121|      0|                }
  |  | 7122|      0|                else {
  |  | 7123|      0|                    arg0 = &_PyInstrumentation_MISSING;
  |  | 7124|      0|                }
  |  | 7125|      0|                stack_pointer[-2 - oparg] = func;
  |  | 7126|      0|                stack_pointer[-1 - oparg] = maybe_self;
  |  | 7127|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7128|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7129|      0|                int err = _Py_call_instrumentation_2args(
  |  | 7130|      0|                    tstate, PY_MONITORING_EVENT_CALL,
  |  |  ------------------
  |  |  |  |   18|      0|#define PY_MONITORING_EVENT_CALL 4
  |  |  ------------------
  |  | 7131|      0|                    frame, this_instr, function, arg0
  |  | 7132|      0|                );
  |  | 7133|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7134|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (7134:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7135|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7136|      0|                }
  |  | 7137|      0|            }
  |  | 7138|       |            // _DO_CALL
  |  | 7139|      0|            {
  |  | 7140|      0|                args = &stack_pointer[-oparg];
  |  | 7141|      0|                self_or_null = stack_pointer[-1 - oparg];
  |  | 7142|      0|                callable = stack_pointer[-2 - oparg];
  |  | 7143|      0|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 7144|      0|                int total_args = oparg;
  |  | 7145|      0|                _PyStackRef *arguments = args;
  |  | 7146|      0|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7146:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7147|      0|                    arguments--;
  |  | 7148|      0|                    total_args++;
  |  | 7149|      0|                }
  |  | 7150|      0|                if (Py_TYPE(callable_o) == &PyFunction_Type &&
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7150:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7151|      0|                    !IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|      0|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (7151:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7152|      0|                    ((PyFunctionObject *)callable_o)->vectorcall == _PyFunction_Vectorcall)
  |  |  ------------------
  |  |  |  Branch (7152:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7153|      0|                {
  |  | 7154|      0|                    int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|      0|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7155|      0|                    PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|      0|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                                   PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7155:40): [True: 0, False: 0]
  |  |  ------------------
  |  | 7156|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7156:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7157|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7158|      0|                    _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit(
  |  | 7159|      0|                        tstate, callable, locals,
  |  | 7160|      0|                        arguments, total_args, NULL, frame
  |  | 7161|      0|                    );
  |  | 7162|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7163|      0|                    stack_pointer += -2 - oparg;
  |  | 7164|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7165|      0|                    if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (7165:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7166|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7167|      0|                    }
  |  | 7168|      0|                    frame->return_offset = 4u ;
  |  | 7169|      0|                    DISPATCH_INLINED(new_frame);
  |  |  ------------------
  |  |  |  |  223|      0|    do {                                                         \
  |  |  |  |  224|      0|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|      0|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|      0|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|      0|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|      0|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|      0|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|      0|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7169:21): [True: 0, False: 0]
  |  |  |  Branch (7169:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7170|      0|                }
  |  | 7171|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7171:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7172|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7173|      0|                PyObject* res_o = _Py_VectorCallInstrumentation_StackRefSteal(
  |  | 7174|      0|                    callable,
  |  | 7175|      0|                    arguments,
  |  | 7176|      0|                    total_args,
  |  | 7177|      0|                    PyStackRef_NULL,
  |  | 7178|      0|                    opcode == INSTRUMENTED_CALL,
  |  |  ------------------
  |  |  |  |  237|      0|#define INSTRUMENTED_CALL                      249
  |  |  ------------------
  |  | 7179|      0|                    frame,
  |  | 7180|      0|                    this_instr,
  |  | 7181|      0|                    tstate);
  |  | 7182|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7183|      0|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7183:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7184|      0|                    stack_pointer += -2 - oparg;
  |  | 7185|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7186|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7187|      0|                }
  |  | 7188|      0|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 7189|      0|            }
  |  | 7190|       |            // _CHECK_PERIODIC_AT_END
  |  | 7191|      0|            {
  |  | 7192|      0|                stack_pointer[-2 - oparg] = res;
  |  | 7193|      0|                stack_pointer += -1 - oparg;
  |  | 7194|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7195|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7196|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7197|      0|                int err = check_periodics_at_end(tstate, frame);
  |  | 7198|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7199|      0|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (7199:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7200|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7201|      0|                }
  |  | 7202|      0|            }
  |  | 7203|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7204|      0|        }
  |  | 7205|       |
  |  | 7206|      0|        TARGET(INSTRUMENTED_CALL_FUNCTION_EX) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7207|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7208|       |            int opcode = INSTRUMENTED_CALL_FUNCTION_EX;
  |  | 7209|       |            (void)(opcode);
  |  | 7210|       |            #endif
  |  | 7211|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7212|      0|            (void)this_instr;
  |  | 7213|      0|            frame->instr_ptr = next_instr;
  |  | 7214|      0|            next_instr += 2;
  |  | 7215|      0|            INSTRUCTION_STATS(INSTRUMENTED_CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7216|      0|            opcode = INSTRUMENTED_CALL_FUNCTION_EX;
  |  |  ------------------
  |  |  |  |  239|      0|#define INSTRUMENTED_CALL_FUNCTION_EX          251
  |  |  ------------------
  |  | 7217|      0|            _PyStackRef func;
  |  | 7218|      0|            _PyStackRef callargs;
  |  | 7219|      0|            _PyStackRef func_st;
  |  | 7220|      0|            _PyStackRef null;
  |  | 7221|      0|            _PyStackRef callargs_st;
  |  | 7222|      0|            _PyStackRef kwargs_st;
  |  | 7223|      0|            _PyStackRef result;
  |  | 7224|       |            /* Skip 1 cache entry */
  |  | 7225|       |            // _MAKE_CALLARGS_A_TUPLE
  |  | 7226|      0|            {
  |  | 7227|      0|                callargs = stack_pointer[-2];
  |  | 7228|      0|                func = stack_pointer[-4];
  |  | 7229|      0|                PyObject *callargs_o = PyStackRef_AsPyObjectBorrow(callargs);
  |  | 7230|      0|                if (!PyTuple_CheckExact(callargs_o)) {
  |  |  ------------------
  |  |  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7230:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7231|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7232|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7233|      0|                    int err = _Py_Check_ArgsIterable(tstate, PyStackRef_AsPyObjectBorrow(func), callargs_o);
  |  | 7234|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7235|      0|                    if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (7235:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7236|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7237|      0|                    }
  |  | 7238|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7238:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7239|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7240|      0|                    PyObject *tuple_o = PySequence_Tuple(callargs_o);
  |  | 7241|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7242|      0|                    if (tuple_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7242:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7243|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7244|      0|                    }
  |  | 7245|      0|                    _PyStackRef temp = callargs;
  |  | 7246|      0|                    callargs = PyStackRef_FromPyObjectSteal(tuple_o);
  |  | 7247|      0|                    stack_pointer[-2] = callargs;
  |  | 7248|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7248:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7249|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7250|      0|                    PyStackRef_CLOSE(temp);
  |  | 7251|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7252|      0|                }
  |  | 7253|      0|            }
  |  | 7254|       |            // _DO_CALL_FUNCTION_EX
  |  | 7255|      0|            {
  |  | 7256|      0|                kwargs_st = stack_pointer[-1];
  |  | 7257|      0|                callargs_st = callargs;
  |  | 7258|      0|                null = stack_pointer[-3];
  |  | 7259|      0|                func_st = func;
  |  | 7260|      0|                (void)null;
  |  | 7261|      0|                PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
  |  | 7262|      0|                EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_FUNCTION_EX, func);
  |  |  ------------------
  |  |  |  |   80|      0|#define EVAL_CALL_STAT_INC_IF_FUNCTION(name, callable) ((void)0)
  |  |  ------------------
  |  | 7263|      0|                PyObject *result_o;
  |  | 7264|      0|                assert(!_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (7264:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7265|      0|                if (opcode == INSTRUMENTED_CALL_FUNCTION_EX) {
  |  |  ------------------
  |  |  |  |  239|      0|#define INSTRUMENTED_CALL_FUNCTION_EX          251
  |  |  ------------------
  |  |  |  Branch (7265:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7266|      0|                    PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
  |  | 7267|      0|                    PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
  |  | 7268|      0|                    assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (7268:21): [True: 0, False: 0]
  |  |  |  Branch (7268:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7269|      0|                    assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (7269:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7270|      0|                    PyObject *arg = PyTuple_GET_SIZE(callargs) > 0 ?
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7270:37): [True: 0, False: 0]
  |  |  ------------------
  |  | 7271|      0|                    PyTuple_GET_ITEM(callargs, 0) : &_PyInstrumentation_MISSING;
  |  |  ------------------
  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7271:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7272|      0|                    stack_pointer[-2] = callargs_st;
  |  | 7273|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7274|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7275|      0|                    int err = _Py_call_instrumentation_2args(
  |  | 7276|      0|                        tstate, PY_MONITORING_EVENT_CALL,
  |  |  ------------------
  |  |  |  |   18|      0|#define PY_MONITORING_EVENT_CALL 4
  |  |  ------------------
  |  | 7277|      0|                        frame, this_instr, func, arg);
  |  | 7278|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7279|      0|                    if (err) {
  |  |  ------------------
  |  |  |  Branch (7279:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7280|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7281|      0|                    }
  |  | 7282|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7282:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7283|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7284|      0|                    result_o = PyObject_Call(func, callargs, kwargs);
  |  | 7285|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7286|      0|                    if (!PyFunction_Check(func) && !PyMethod_Check(func)) {
  |  |  ------------------
  |  |  |  |   68|      0|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                   if (!PyFunction_Check(func) && !PyMethod_Check(func)) {
  |  |  ------------------
  |  |  |  |   22|      0|#define PyMethod_Check(op) Py_IS_TYPE((op), &PyMethod_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7286:25): [True: 0, False: 0]
  |  |  |  Branch (7286:52): [True: 0, False: 0]
  |  |  ------------------
  |  | 7287|      0|                        if (result_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7287:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 7288|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7288:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 7289|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 7290|      0|                            _Py_call_instrumentation_exc2(
  |  | 7291|      0|                                tstate, PY_MONITORING_EVENT_C_RAISE,
  |  |  ------------------
  |  |  |  |   45|      0|#define PY_MONITORING_EVENT_C_RAISE 17
  |  |  ------------------
  |  | 7292|      0|                                frame, this_instr, func, arg);
  |  | 7293|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 7294|      0|                        }
  |  | 7295|      0|                        else {
  |  | 7296|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7296:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 7297|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 7298|      0|                            int err = _Py_call_instrumentation_2args(
  |  | 7299|      0|                                tstate, PY_MONITORING_EVENT_C_RETURN,
  |  |  ------------------
  |  |  |  |   44|      0|#define PY_MONITORING_EVENT_C_RETURN 16
  |  |  ------------------
  |  | 7300|      0|                                frame, this_instr, func, arg);
  |  | 7301|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 7302|      0|                            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (7302:33): [True: 0, False: 0]
  |  |  ------------------
  |  | 7303|      0|                                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7303:33): [True: 0, False: 0]
  |  |  ------------------
  |  | 7304|      0|                                _PyFrame_StackPointerValidate(frame);
  |  | 7305|      0|                                Py_CLEAR(result_o);
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7306|      0|                                _PyFrame_StackPointerInvalidate(frame);
  |  | 7307|      0|                            }
  |  | 7308|      0|                        }
  |  | 7309|      0|                    }
  |  | 7310|      0|                }
  |  | 7311|      0|                else {
  |  | 7312|      0|                    if (Py_TYPE(func) == &PyFunction_Type &&
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7312:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7313|      0|                        !IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|      0|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (7313:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7314|      0|                        ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
  |  |  ------------------
  |  |  |  Branch (7314:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7315|      0|                        PyObject *callargs = PyStackRef_AsPyObjectSteal(callargs_st);
  |  | 7316|      0|                        assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (7316:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7317|      0|                        PyObject *kwargs = PyStackRef_IsNull(kwargs_st) ? NULL : PyStackRef_AsPyObjectSteal(kwargs_st);
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7318|      0|                        assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (7318:25): [True: 0, False: 0]
  |  |  |  Branch (7318:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7319|      0|                        Py_ssize_t nargs = PyTuple_GET_SIZE(callargs);
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7320|      0|                        int code_flags = ((PyCodeObject *)PyFunction_GET_CODE(func))->co_flags;
  |  |  ------------------
  |  |  |  |   93|      0|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7321|      0|                        PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
  |  |  ------------------
  |  |  |  |  122|      0|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                                       PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(func));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7321:44): [True: 0, False: 0]
  |  |  ------------------
  |  | 7322|      0|                        stack_pointer += -2;
  |  | 7323|      0|                        ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7324|      0|                        _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7325|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 7326|      0|                        _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit_Ex(
  |  | 7327|      0|                            tstate, func_st, locals,
  |  | 7328|      0|                            nargs, callargs, kwargs, frame);
  |  | 7329|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 7330|      0|                        stack_pointer += -2;
  |  | 7331|      0|                        ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7332|      0|                        if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (7332:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 7333|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7334|      0|                        }
  |  | 7335|      0|                        assert( 2u == 1 + INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
  |  |  ------------------
  |  |  |  Branch (7335:25): [True: 0, Folded]
  |  |  ------------------
  |  | 7336|      0|                        frame->return_offset = 2u ;
  |  | 7337|      0|                        DISPATCH_INLINED(new_frame);
  |  |  ------------------
  |  |  |  |  223|      0|    do {                                                         \
  |  |  |  |  224|      0|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|      0|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|      0|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|      0|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|      0|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|      0|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|      0|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7337:25): [True: 0, False: 0]
  |  |  |  Branch (7337:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7338|      0|                    }
  |  | 7339|      0|                    PyObject *callargs = PyStackRef_AsPyObjectBorrow(callargs_st);
  |  | 7340|      0|                    assert(PyTuple_CheckExact(callargs));
  |  |  ------------------
  |  |  |  Branch (7340:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7341|      0|                    PyObject *kwargs = PyStackRef_AsPyObjectBorrow(kwargs_st);
  |  | 7342|      0|                    assert(kwargs == NULL || PyDict_CheckExact(kwargs));
  |  |  ------------------
  |  |  |  Branch (7342:21): [True: 0, False: 0]
  |  |  |  Branch (7342:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7343|      0|                    stack_pointer[-2] = callargs_st;
  |  | 7344|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7345|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7346|      0|                    result_o = PyObject_Call(func, callargs, kwargs);
  |  | 7347|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7348|      0|                }
  |  | 7349|      0|                stack_pointer += -1;
  |  | 7350|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7351|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7352|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7353|      0|                PyStackRef_XCLOSE(kwargs_st);
  |  | 7354|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7355|      0|                stack_pointer += -1;
  |  | 7356|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7357|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7358|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7359|      0|                PyStackRef_CLOSE(callargs_st);
  |  | 7360|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7361|      0|                stack_pointer += -2;
  |  | 7362|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7363|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7364|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7365|      0|                PyStackRef_CLOSE(func_st);
  |  | 7366|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7367|      0|                if (result_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7367:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7368|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7369|      0|                }
  |  | 7370|      0|                result = PyStackRef_FromPyObjectSteal(result_o);
  |  | 7371|      0|            }
  |  | 7372|       |            // _CHECK_PERIODIC_AT_END
  |  | 7373|      0|            {
  |  | 7374|      0|                stack_pointer[0] = result;
  |  | 7375|      0|                stack_pointer += 1;
  |  | 7376|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7377|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7378|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7379|      0|                int err = check_periodics_at_end(tstate, frame);
  |  | 7380|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7381|      0|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (7381:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7382|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7383|      0|                }
  |  | 7384|      0|            }
  |  | 7385|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7386|      0|        }
  |  | 7387|       |
  |  | 7388|      0|        TARGET(INSTRUMENTED_CALL_KW) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7389|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7390|       |            int opcode = INSTRUMENTED_CALL_KW;
  |  | 7391|       |            (void)(opcode);
  |  | 7392|       |            #endif
  |  | 7393|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7394|      0|            (void)this_instr;
  |  | 7395|      0|            frame->instr_ptr = next_instr;
  |  | 7396|      0|            next_instr += 4;
  |  | 7397|      0|            INSTRUCTION_STATS(INSTRUMENTED_CALL_KW);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7398|      0|            opcode = INSTRUMENTED_CALL_KW;
  |  |  ------------------
  |  |  |  |  238|      0|#define INSTRUMENTED_CALL_KW                   250
  |  |  ------------------
  |  | 7399|      0|            _PyStackRef callable;
  |  | 7400|      0|            _PyStackRef self_or_null;
  |  | 7401|      0|            _PyStackRef *args;
  |  | 7402|      0|            _PyStackRef kwnames;
  |  | 7403|      0|            _PyStackRef res;
  |  | 7404|       |            /* Skip 1 cache entry */
  |  | 7405|       |            /* Skip 2 cache entries */
  |  | 7406|       |            // _MAYBE_EXPAND_METHOD_KW
  |  | 7407|      0|            {
  |  | 7408|      0|                self_or_null = stack_pointer[-2 - oparg];
  |  | 7409|      0|                callable = stack_pointer[-3 - oparg];
  |  | 7410|      0|                if (PyStackRef_TYPE(callable) == &PyMethod_Type && PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7410:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7411|      0|                    PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 7412|      0|                    PyObject *self = ((PyMethodObject *)callable_o)->im_self;
  |  | 7413|      0|                    self_or_null = PyStackRef_FromPyObjectNew(self);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7414|      0|                    PyObject *method = ((PyMethodObject *)callable_o)->im_func;
  |  | 7415|      0|                    _PyStackRef temp = callable;
  |  | 7416|      0|                    callable = PyStackRef_FromPyObjectNew(method);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7417|      0|                    stack_pointer[-3 - oparg] = callable;
  |  | 7418|      0|                    stack_pointer[-2 - oparg] = self_or_null;
  |  | 7419|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7420|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7421|      0|                    PyStackRef_CLOSE(temp);
  |  | 7422|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7423|      0|                }
  |  | 7424|      0|            }
  |  | 7425|       |            // _MONITOR_CALL_KW
  |  | 7426|      0|            {
  |  | 7427|      0|                args = &stack_pointer[-1 - oparg];
  |  | 7428|      0|                int is_meth = !PyStackRef_IsNull(self_or_null);
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7429|      0|                PyObject *arg;
  |  | 7430|      0|                if (is_meth) {
  |  |  ------------------
  |  |  |  Branch (7430:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7431|      0|                    arg = PyStackRef_AsPyObjectBorrow(self_or_null);
  |  | 7432|      0|                }
  |  | 7433|      0|                else if (args) {
  |  |  ------------------
  |  |  |  Branch (7433:26): [True: 0, False: 0]
  |  |  ------------------
  |  | 7434|      0|                    arg = PyStackRef_AsPyObjectBorrow(args[0]);
  |  | 7435|      0|                }
  |  | 7436|      0|                else {
  |  | 7437|      0|                    arg = &_PyInstrumentation_MISSING;
  |  | 7438|      0|                }
  |  | 7439|      0|                PyObject *function = PyStackRef_AsPyObjectBorrow(callable);
  |  | 7440|      0|                stack_pointer[-3 - oparg] = callable;
  |  | 7441|      0|                stack_pointer[-2 - oparg] = self_or_null;
  |  | 7442|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7443|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7444|      0|                int err = _Py_call_instrumentation_2args(
  |  | 7445|      0|                    tstate, PY_MONITORING_EVENT_CALL,
  |  |  ------------------
  |  |  |  |   18|      0|#define PY_MONITORING_EVENT_CALL 4
  |  |  ------------------
  |  | 7446|      0|                    frame, this_instr, function, arg);
  |  | 7447|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7448|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (7448:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7449|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7450|      0|                }
  |  | 7451|      0|            }
  |  | 7452|       |            // _DO_CALL_KW
  |  | 7453|      0|            {
  |  | 7454|      0|                kwnames = stack_pointer[-1];
  |  | 7455|      0|                args = &stack_pointer[-1 - oparg];
  |  | 7456|      0|                PyObject *callable_o = PyStackRef_AsPyObjectBorrow(callable);
  |  | 7457|      0|                PyObject *kwnames_o = PyStackRef_AsPyObjectBorrow(kwnames);
  |  | 7458|      0|                int total_args = oparg;
  |  | 7459|      0|                _PyStackRef *arguments = args;
  |  | 7460|      0|                if (!PyStackRef_IsNull(self_or_null)) {
  |  |  ------------------
  |  |  |  |  482|      0|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      0|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7460:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7461|      0|                    arguments--;
  |  | 7462|      0|                    total_args++;
  |  | 7463|      0|                }
  |  | 7464|      0|                int positional_args = total_args - (int)PyTuple_GET_SIZE(kwnames_o);
  |  |  ------------------
  |  |  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7465|      0|                if (Py_TYPE(callable_o) == &PyFunction_Type &&
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7465:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7466|      0|                    !IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|      0|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (7466:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7467|      0|                    ((PyFunctionObject *)callable_o)->vectorcall == _PyFunction_Vectorcall)
  |  |  ------------------
  |  |  |  Branch (7467:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7468|      0|                {
  |  | 7469|      0|                    int code_flags = ((PyCodeObject*)PyFunction_GET_CODE(callable_o))->co_flags;
  |  |  ------------------
  |  |  |  |   93|      0|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7470|      0|                    PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  122|      0|#define CO_OPTIMIZED    0x0001
  |  |  ------------------
  |  |                                   PyObject *locals = code_flags & CO_OPTIMIZED ? NULL : Py_NewRef(PyFunction_GET_GLOBALS(callable_o));
  |  |  ------------------
  |  |  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7470:40): [True: 0, False: 0]
  |  |  ------------------
  |  | 7471|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7471:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7472|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7473|      0|                    _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit(
  |  | 7474|      0|                        tstate, callable, locals,
  |  | 7475|      0|                        arguments, positional_args, kwnames_o, frame
  |  | 7476|      0|                    );
  |  | 7477|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7478|      0|                    stack_pointer += -3 - oparg;
  |  | 7479|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7480|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7481|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7482|      0|                    PyStackRef_CLOSE(kwnames);
  |  | 7483|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7484|      0|                    if (new_frame == NULL) {
  |  |  ------------------
  |  |  |  Branch (7484:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7485|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7486|      0|                    }
  |  | 7487|      0|                    assert( 4u == 1 + INLINE_CACHE_ENTRIES_CALL_KW);
  |  |  ------------------
  |  |  |  Branch (7487:21): [True: 0, Folded]
  |  |  ------------------
  |  | 7488|      0|                    frame->return_offset = 4u ;
  |  | 7489|      0|                    DISPATCH_INLINED(new_frame);
  |  |  ------------------
  |  |  |  |  223|      0|    do {                                                         \
  |  |  |  |  224|      0|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|      0|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|      0|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|      0|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|      0|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|      0|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|      0|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7489:21): [True: 0, False: 0]
  |  |  |  Branch (7489:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7490|      0|                }
  |  | 7491|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7491:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7492|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7493|      0|                PyObject* res_o = _Py_VectorCallInstrumentation_StackRefSteal(
  |  | 7494|      0|                    callable,
  |  | 7495|      0|                    arguments,
  |  | 7496|      0|                    total_args,
  |  | 7497|      0|                    kwnames,
  |  | 7498|      0|                    opcode == INSTRUMENTED_CALL_KW,
  |  |  ------------------
  |  |  |  |  238|      0|#define INSTRUMENTED_CALL_KW                   250
  |  |  ------------------
  |  | 7499|      0|                    frame,
  |  | 7500|      0|                    this_instr,
  |  | 7501|      0|                    tstate);
  |  | 7502|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7503|      0|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7503:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7504|      0|                    stack_pointer += -3 - oparg;
  |  | 7505|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7506|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7507|      0|                }
  |  | 7508|      0|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  | 7509|      0|            }
  |  | 7510|      0|            stack_pointer[-3 - oparg] = res;
  |  | 7511|      0|            stack_pointer += -2 - oparg;
  |  | 7512|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7513|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7514|      0|        }
  |  | 7515|       |
  |  | 7516|      0|        TARGET(INSTRUMENTED_END_ASYNC_FOR) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7517|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7518|       |            int opcode = INSTRUMENTED_END_ASYNC_FOR;
  |  | 7519|       |            (void)(opcode);
  |  | 7520|       |            #endif
  |  | 7521|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7522|      0|            (void)this_instr;
  |  | 7523|      0|            frame->instr_ptr = next_instr;
  |  | 7524|      0|            next_instr += 1;
  |  | 7525|      0|            INSTRUCTION_STATS(INSTRUMENTED_END_ASYNC_FOR);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7526|      0|            _PyStackRef awaitable_st;
  |  | 7527|      0|            _PyStackRef exc_st;
  |  | 7528|       |            // _MONITOR_END_ASYNC_FOR
  |  | 7529|      0|            {
  |  | 7530|      0|                assert((next_instr-oparg)->op.code == END_SEND || (next_instr-oparg)->op.code >= MIN_INSTRUMENTED_OPCODE);
  |  |  ------------------
  |  |  |  Branch (7530:17): [True: 0, False: 0]
  |  |  |  Branch (7530:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7531|      0|                INSTRUMENTED_JUMP(next_instr-oparg, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7532|      0|            }
  |  | 7533|       |            // _END_ASYNC_FOR
  |  | 7534|      0|            {
  |  | 7535|      0|                exc_st = stack_pointer[-1];
  |  | 7536|      0|                awaitable_st = stack_pointer[-2];
  |  | 7537|      0|                JUMPBY(0);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 7538|      0|                (void)oparg;
  |  | 7539|      0|                PyObject *exc = PyStackRef_AsPyObjectBorrow(exc_st);
  |  | 7540|      0|                assert(exc && PyExceptionInstance_Check(exc));
  |  |  ------------------
  |  |  |  Branch (7540:17): [True: 0, False: 0]
  |  |  |  Branch (7540:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7541|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7542|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7543|      0|                int matches = PyErr_GivenExceptionMatches(exc, PyExc_StopAsyncIteration);
  |  | 7544|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7545|      0|                if (matches) {
  |  |  ------------------
  |  |  |  Branch (7545:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7546|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7546:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7547|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7548|      0|                    _PyStackRef tmp = exc_st;
  |  | 7549|      0|                    exc_st = PyStackRef_NULL;
  |  | 7550|      0|                    stack_pointer[-1] = exc_st;
  |  | 7551|      0|                    PyStackRef_CLOSE(tmp);
  |  | 7552|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7553|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7553:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7554|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7555|      0|                    tmp = awaitable_st;
  |  | 7556|      0|                    awaitable_st = PyStackRef_NULL;
  |  | 7557|      0|                    stack_pointer[-2] = awaitable_st;
  |  | 7558|      0|                    PyStackRef_CLOSE(tmp);
  |  | 7559|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7560|      0|                    stack_pointer += -2;
  |  | 7561|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7562|      0|                }
  |  | 7563|      0|                else {
  |  | 7564|      0|                    Py_INCREF(exc);
  |  |  ------------------
  |  |  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7565|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7565:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7566|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7567|      0|                    _PyErr_SetRaisedException(tstate, exc);
  |  | 7568|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7569|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7569:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7570|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7571|      0|                    monitor_reraise(tstate, frame, this_instr);
  |  | 7572|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7573|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7573:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7574|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7575|      0|                    JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7576|      0|                }
  |  | 7577|      0|            }
  |  | 7578|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7579|      0|        }
  |  | 7580|       |
  |  | 7581|      0|        TARGET(INSTRUMENTED_END_FOR) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7582|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7583|       |            int opcode = INSTRUMENTED_END_FOR;
  |  | 7584|       |            (void)(opcode);
  |  | 7585|       |            #endif
  |  | 7586|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7587|      0|            (void)this_instr;
  |  | 7588|      0|            next_instr += 1;
  |  | 7589|      0|            INSTRUCTION_STATS(INSTRUMENTED_END_FOR);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7590|      0|            _PyStackRef receiver;
  |  | 7591|      0|            _PyStackRef value;
  |  | 7592|      0|            value = stack_pointer[-1];
  |  | 7593|      0|            receiver = stack_pointer[-3];
  |  | 7594|      0|            if (PyStackRef_GenCheck(receiver)) {
  |  |  ------------------
  |  |  |  Branch (7594:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7595|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7596|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7597|      0|                int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value));
  |  | 7598|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7599|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (7599:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7600|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7601|      0|                }
  |  | 7602|      0|            }
  |  | 7603|      0|            stack_pointer += -1;
  |  | 7604|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7605|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7606|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 7607|      0|            PyStackRef_CLOSE(value);
  |  | 7608|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7609|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7610|      0|        }
  |  | 7611|       |
  |  | 7612|      0|        TARGET(INSTRUMENTED_END_SEND) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7613|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7614|       |            int opcode = INSTRUMENTED_END_SEND;
  |  | 7615|       |            (void)(opcode);
  |  | 7616|       |            #endif
  |  | 7617|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7618|      0|            (void)this_instr;
  |  | 7619|      0|            frame->instr_ptr = next_instr;
  |  | 7620|      0|            next_instr += 1;
  |  | 7621|      0|            INSTRUCTION_STATS(INSTRUMENTED_END_SEND);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7622|      0|            _PyStackRef receiver;
  |  | 7623|      0|            _PyStackRef index_or_null;
  |  | 7624|      0|            _PyStackRef value;
  |  | 7625|      0|            _PyStackRef val;
  |  | 7626|      0|            value = stack_pointer[-1];
  |  | 7627|      0|            index_or_null = stack_pointer[-2];
  |  | 7628|      0|            receiver = stack_pointer[-3];
  |  | 7629|      0|            PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver);
  |  | 7630|      0|            if (PyGen_Check(receiver_o) || PyCoro_CheckExact(receiver_o)) {
  |  |  ------------------
  |  |  |  |   16|      0|#define PyGen_Check(op) PyObject_TypeCheck((op), &PyGen_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           if (PyGen_Check(receiver_o) || PyCoro_CheckExact(receiver_o)) {
  |  |  ------------------
  |  |  |  |   31|      0|#define PyCoro_CheckExact(op) Py_IS_TYPE((op), &PyCoro_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7631|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7632|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7633|      0|                int err = monitor_stop_iteration(tstate, frame, this_instr, PyStackRef_AsPyObjectBorrow(value));
  |  | 7634|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7635|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (7635:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7636|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7637|      0|                }
  |  | 7638|      0|            }
  |  | 7639|      0|            val = value;
  |  | 7640|      0|            (void)index_or_null;
  |  | 7641|      0|            stack_pointer[-3] = val;
  |  | 7642|      0|            stack_pointer += -2;
  |  | 7643|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7644|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7645|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 7646|      0|            PyStackRef_CLOSE(receiver);
  |  | 7647|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7648|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7649|      0|        }
  |  | 7650|       |
  |  | 7651|      0|        TARGET(INSTRUMENTED_FOR_ITER) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7652|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7653|       |            int opcode = INSTRUMENTED_FOR_ITER;
  |  | 7654|       |            (void)(opcode);
  |  | 7655|       |            #endif
  |  | 7656|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7657|      0|            (void)this_instr;
  |  | 7658|      0|            frame->instr_ptr = next_instr;
  |  | 7659|      0|            next_instr += 2;
  |  | 7660|      0|            INSTRUCTION_STATS(INSTRUMENTED_FOR_ITER);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7661|      0|            _PyStackRef iter;
  |  | 7662|      0|            _PyStackRef null_or_index;
  |  | 7663|      0|            _PyStackRef next;
  |  | 7664|       |            /* Skip 1 cache entry */
  |  | 7665|      0|            null_or_index = stack_pointer[-1];
  |  | 7666|      0|            iter = stack_pointer[-2];
  |  | 7667|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7668|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 7669|      0|            _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, iter, &null_or_index);
  |  | 7670|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7671|      0|            if (!PyStackRef_IsValid(item)) {
  |  |  ------------------
  |  |  |  Branch (7671:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7672|      0|                if (PyStackRef_IsError(item)) {
  |  |  ------------------
  |  |  |  Branch (7672:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7673|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7674|      0|                }
  |  | 7675|      0|                JUMPBY(oparg + 1);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 7676|      0|                stack_pointer[-1] = null_or_index;
  |  | 7677|      0|                DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7678|      0|            }
  |  | 7679|      0|            next = item;
  |  | 7680|      0|            INSTRUMENTED_JUMP(this_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7681|      0|            stack_pointer[-1] = null_or_index;
  |  | 7682|      0|            stack_pointer[0] = next;
  |  | 7683|      0|            stack_pointer += 1;
  |  | 7684|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7685|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7686|      0|        }
  |  | 7687|       |
  |  | 7688|      0|        TARGET(INSTRUMENTED_INSTRUCTION) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7689|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7690|       |            int opcode = INSTRUMENTED_INSTRUCTION;
  |  | 7691|       |            (void)(opcode);
  |  | 7692|       |            #endif
  |  | 7693|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7694|      0|            (void)this_instr;
  |  | 7695|      0|            frame->instr_ptr = next_instr;
  |  | 7696|      0|            next_instr += 1;
  |  | 7697|      0|            INSTRUCTION_STATS(INSTRUMENTED_INSTRUCTION);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7698|      0|            opcode = INSTRUMENTED_INSTRUCTION;
  |  |  ------------------
  |  |  |  |  225|      0|#define INSTRUMENTED_INSTRUCTION               237
  |  |  ------------------
  |  | 7699|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7700|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 7701|      0|            int next_opcode = _Py_call_instrumentation_instruction(
  |  | 7702|      0|                tstate, frame, this_instr);
  |  | 7703|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7704|      0|            if (next_opcode < 0) {
  |  |  ------------------
  |  |  |  Branch (7704:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7705|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7706|      0|            }
  |  | 7707|      0|            next_instr = this_instr;
  |  | 7708|      0|            if (_PyOpcode_Caches[next_opcode]) {
  |  |  ------------------
  |  |  |  Branch (7708:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7709|      0|                PAUSE_ADAPTIVE_COUNTER(next_instr[1].counter);
  |  |  ------------------
  |  |  |  |  382|      0|    do { \
  |  |  |  |  383|      0|        (COUNTER) = pause_backoff_counter((COUNTER)); \
  |  |  |  |  384|      0|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7710|      0|            }
  |  | 7711|      0|            assert(next_opcode > 0 && next_opcode < 256);
  |  |  ------------------
  |  |  |  Branch (7711:13): [True: 0, False: 0]
  |  |  |  Branch (7711:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 7712|      0|            opcode = next_opcode;
  |  | 7713|      0|            DISPATCH_GOTO();
  |  |  ------------------
  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  ------------------
  |  | 7714|      0|        }
  |  | 7715|       |
  |  | 7716|      0|        TARGET(INSTRUMENTED_JUMP_BACKWARD) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7717|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7718|       |            int opcode = INSTRUMENTED_JUMP_BACKWARD;
  |  | 7719|       |            (void)(opcode);
  |  | 7720|       |            #endif
  |  | 7721|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7722|      0|            (void)this_instr;
  |  | 7723|      0|            frame->instr_ptr = next_instr;
  |  | 7724|      0|            next_instr += 2;
  |  | 7725|      0|            INSTRUCTION_STATS(INSTRUMENTED_JUMP_BACKWARD);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7726|       |            /* Skip 1 cache entry */
  |  | 7727|       |            // _CHECK_PERIODIC
  |  | 7728|      0|            {
  |  | 7729|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7730|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7731|      0|                int err = check_periodics(tstate);
  |  | 7732|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7733|      0|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (7733:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7734|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7735|      0|                }
  |  | 7736|      0|            }
  |  | 7737|       |            // _MONITOR_JUMP_BACKWARD
  |  | 7738|      0|            {
  |  | 7739|      0|                INSTRUMENTED_JUMP(this_instr, next_instr - oparg, PY_MONITORING_EVENT_JUMP);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7740|      0|            }
  |  | 7741|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7742|      0|        }
  |  | 7743|       |
  |  | 7744|      0|        TARGET(INSTRUMENTED_JUMP_FORWARD) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7745|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7746|       |            int opcode = INSTRUMENTED_JUMP_FORWARD;
  |  | 7747|       |            (void)(opcode);
  |  | 7748|       |            #endif
  |  | 7749|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7750|      0|            (void)this_instr;
  |  | 7751|      0|            frame->instr_ptr = next_instr;
  |  | 7752|      0|            next_instr += 1;
  |  | 7753|      0|            INSTRUCTION_STATS(INSTRUMENTED_JUMP_FORWARD);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7754|      0|            INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_JUMP);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7755|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7756|      0|        }
  |  | 7757|       |
  |  | 7758|      0|        TARGET(INSTRUMENTED_LINE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7759|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7760|       |            int opcode = INSTRUMENTED_LINE;
  |  | 7761|       |            (void)(opcode);
  |  | 7762|       |            #endif
  |  | 7763|      0|            _Py_CODEUNIT* const prev_instr = frame->instr_ptr;
  |  | 7764|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7765|      0|            (void)this_instr;
  |  | 7766|      0|            frame->instr_ptr = next_instr;
  |  | 7767|      0|            next_instr += 1;
  |  | 7768|      0|            INSTRUCTION_STATS(INSTRUMENTED_LINE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7769|      0|            opcode = INSTRUMENTED_LINE;
  |  |  ------------------
  |  |  |  |  241|      0|#define INSTRUMENTED_LINE                      253
  |  |  ------------------
  |  | 7770|      0|            int original_opcode = 0;
  |  | 7771|      0|            if (tstate->tracing) {
  |  |  ------------------
  |  |  |  Branch (7771:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7772|      0|                PyCodeObject *code = _PyFrame_GetCode(frame);
  |  | 7773|      0|                int index = (int)(this_instr - _PyFrame_GetBytecode(frame));
  |  | 7774|      0|                original_opcode = code->_co_monitoring->lines->data[index*code->_co_monitoring->lines->bytes_per_entry];
  |  | 7775|      0|                next_instr = this_instr;
  |  | 7776|      0|            } else {
  |  | 7777|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7778|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7779|      0|                original_opcode = _Py_call_instrumentation_line(
  |  | 7780|      0|                    tstate, frame, this_instr, prev_instr);
  |  | 7781|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7782|       |                // Explicit stack reload
  |  | 7783|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 7784|      0|                _PyFrame_StackAssertInvalid(frame);
  |  | 7785|      0|                if (original_opcode < 0) {
  |  |  ------------------
  |  |  |  Branch (7785:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7786|      0|                    next_instr = this_instr+1;
  |  | 7787|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7788|      0|                }
  |  | 7789|      0|                next_instr = frame->instr_ptr;
  |  | 7790|      0|                if (next_instr != this_instr) {
  |  |  ------------------
  |  |  |  Branch (7790:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7791|      0|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7792|      0|                }
  |  | 7793|      0|            }
  |  | 7794|      0|            if (_PyOpcode_Caches[original_opcode]) {
  |  |  ------------------
  |  |  |  Branch (7794:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7795|      0|                _PyBinaryOpCache *cache = (_PyBinaryOpCache *)(next_instr+1);
  |  | 7796|      0|                PAUSE_ADAPTIVE_COUNTER(cache->counter);
  |  |  ------------------
  |  |  |  |  382|      0|    do { \
  |  |  |  |  383|      0|        (COUNTER) = pause_backoff_counter((COUNTER)); \
  |  |  |  |  384|      0|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (384:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7797|      0|            }
  |  | 7798|      0|            opcode = original_opcode;
  |  | 7799|      0|            PRE_DISPATCH_GOTO();
  |  |  ------------------
  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  ------------------
  |  | 7800|      0|            DISPATCH_GOTO();
  |  |  ------------------
  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  ------------------
  |  | 7801|      0|        }
  |  | 7802|       |
  |  | 7803|      0|        TARGET(INSTRUMENTED_LOAD_SUPER_ATTR) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7804|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7805|       |            int opcode = INSTRUMENTED_LOAD_SUPER_ATTR;
  |  | 7806|       |            (void)(opcode);
  |  | 7807|       |            #endif
  |  | 7808|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7809|      0|            (void)this_instr;
  |  | 7810|      0|            frame->instr_ptr = next_instr;
  |  | 7811|      0|            next_instr += 2;
  |  | 7812|      0|            INSTRUCTION_STATS(INSTRUMENTED_LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7813|      0|            opcode = INSTRUMENTED_LOAD_SUPER_ATTR;
  |  |  ------------------
  |  |  |  |  236|      0|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  |  |  ------------------
  |  | 7814|      0|            _PyStackRef global_super_st;
  |  | 7815|      0|            _PyStackRef class_st;
  |  | 7816|      0|            _PyStackRef self_st;
  |  | 7817|      0|            _PyStackRef attr;
  |  | 7818|      0|            _PyStackRef *null;
  |  | 7819|       |            /* Skip 1 cache entry */
  |  | 7820|       |            // _LOAD_SUPER_ATTR
  |  | 7821|      0|            {
  |  | 7822|      0|                self_st = stack_pointer[-1];
  |  | 7823|      0|                class_st = stack_pointer[-2];
  |  | 7824|      0|                global_super_st = stack_pointer[-3];
  |  | 7825|      0|                PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st);
  |  | 7826|      0|                PyObject *class = PyStackRef_AsPyObjectBorrow(class_st);
  |  | 7827|      0|                PyObject *self = PyStackRef_AsPyObjectBorrow(self_st);
  |  | 7828|      0|                if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) {
  |  |  ------------------
  |  |  |  |  236|      0|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  |  |  ------------------
  |  |  |  Branch (7828:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7829|      0|                    PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING;
  |  |  ------------------
  |  |  |  Branch (7829:37): [True: 0, False: 0]
  |  |  ------------------
  |  | 7830|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7831|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7832|      0|                    int err = _Py_call_instrumentation_2args(
  |  | 7833|      0|                        tstate, PY_MONITORING_EVENT_CALL,
  |  |  ------------------
  |  |  |  |   18|      0|#define PY_MONITORING_EVENT_CALL 4
  |  |  ------------------
  |  | 7834|      0|                        frame, this_instr, global_super, arg);
  |  | 7835|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7836|      0|                    if (err) {
  |  |  ------------------
  |  |  |  Branch (7836:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7837|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7837:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7838|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 7839|      0|                        _PyStackRef tmp = self_st;
  |  | 7840|      0|                        self_st = PyStackRef_NULL;
  |  | 7841|      0|                        stack_pointer[-1] = self_st;
  |  | 7842|      0|                        PyStackRef_CLOSE(tmp);
  |  | 7843|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 7844|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7844:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7845|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 7846|      0|                        tmp = class_st;
  |  | 7847|      0|                        class_st = PyStackRef_NULL;
  |  | 7848|      0|                        stack_pointer[-2] = class_st;
  |  | 7849|      0|                        PyStackRef_CLOSE(tmp);
  |  | 7850|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 7851|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7851:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7852|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 7853|      0|                        tmp = global_super_st;
  |  | 7854|      0|                        global_super_st = PyStackRef_NULL;
  |  | 7855|      0|                        stack_pointer[-3] = global_super_st;
  |  | 7856|      0|                        PyStackRef_CLOSE(tmp);
  |  | 7857|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 7858|      0|                        stack_pointer += -3;
  |  | 7859|      0|                        ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7860|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7861|      0|                    }
  |  | 7862|      0|                }
  |  | 7863|      0|                PyObject *super;
  |  | 7864|      0|                {
  |  | 7865|      0|                    PyObject *stack[] = {class, self};
  |  | 7866|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7867|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 7868|      0|                    super = PyObject_Vectorcall(global_super, stack, oparg & 2, NULL);
  |  | 7869|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 7870|      0|                }
  |  | 7871|      0|                if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) {
  |  |  ------------------
  |  |  |  |  236|      0|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  |  |  ------------------
  |  |  |  Branch (7871:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7872|      0|                    PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING;
  |  |  ------------------
  |  |  |  Branch (7872:37): [True: 0, False: 0]
  |  |  ------------------
  |  | 7873|      0|                    if (super == NULL) {
  |  |  ------------------
  |  |  |  Branch (7873:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7874|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7874:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7875|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 7876|      0|                        _Py_call_instrumentation_exc2(
  |  | 7877|      0|                            tstate, PY_MONITORING_EVENT_C_RAISE,
  |  |  ------------------
  |  |  |  |   45|      0|#define PY_MONITORING_EVENT_C_RAISE 17
  |  |  ------------------
  |  | 7878|      0|                            frame, this_instr, global_super, arg);
  |  | 7879|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 7880|      0|                    }
  |  | 7881|      0|                    else {
  |  | 7882|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7882:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 7883|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 7884|      0|                        int err = _Py_call_instrumentation_2args(
  |  | 7885|      0|                            tstate, PY_MONITORING_EVENT_C_RETURN,
  |  |  ------------------
  |  |  |  |   44|      0|#define PY_MONITORING_EVENT_C_RETURN 16
  |  |  ------------------
  |  | 7886|      0|                            frame, this_instr, global_super, arg);
  |  | 7887|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 7888|      0|                        if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (7888:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 7889|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7889:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 7890|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 7891|      0|                            Py_CLEAR(super);
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7892|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 7893|      0|                        }
  |  | 7894|      0|                    }
  |  | 7895|      0|                }
  |  | 7896|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7896:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7897|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7898|      0|                _PyStackRef tmp = self_st;
  |  | 7899|      0|                self_st = PyStackRef_NULL;
  |  | 7900|      0|                stack_pointer[-1] = self_st;
  |  | 7901|      0|                PyStackRef_CLOSE(tmp);
  |  | 7902|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7903|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7903:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7904|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7905|      0|                tmp = class_st;
  |  | 7906|      0|                class_st = PyStackRef_NULL;
  |  | 7907|      0|                stack_pointer[-2] = class_st;
  |  | 7908|      0|                PyStackRef_CLOSE(tmp);
  |  | 7909|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7910|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7910:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7911|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7912|      0|                tmp = global_super_st;
  |  | 7913|      0|                global_super_st = PyStackRef_NULL;
  |  | 7914|      0|                stack_pointer[-3] = global_super_st;
  |  | 7915|      0|                PyStackRef_CLOSE(tmp);
  |  | 7916|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7917|      0|                stack_pointer += -3;
  |  | 7918|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7919|      0|                if (super == NULL) {
  |  |  ------------------
  |  |  |  Branch (7919:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7920|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7921|      0|                }
  |  | 7922|      0|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
  |  |  ------------------
  |  |  |  |  236|      0|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (7922:34): [True: 0, False: 0]
  |  |  ------------------
  |  | 7923|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7924|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7925|      0|                PyObject *attr_o = PyObject_GetAttr(super, name);
  |  | 7926|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7927|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (7927:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 7928|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 7929|      0|                Py_DECREF(super);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7930|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 7931|      0|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (7931:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7932|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 7933|      0|                }
  |  | 7934|      0|                attr = PyStackRef_FromPyObjectSteal(attr_o);
  |  | 7935|      0|            }
  |  | 7936|       |            // _PUSH_NULL_CONDITIONAL
  |  | 7937|      0|            {
  |  | 7938|      0|                null = &stack_pointer[1];
  |  | 7939|      0|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (7939:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 7940|      0|                    null[0] = PyStackRef_NULL;
  |  | 7941|      0|                }
  |  | 7942|      0|            }
  |  | 7943|      0|            stack_pointer[0] = attr;
  |  | 7944|      0|            stack_pointer += 1 + (oparg & 1);
  |  | 7945|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7946|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7947|      0|        }
  |  | 7948|       |
  |  | 7949|      0|        TARGET(INSTRUMENTED_NOT_TAKEN) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7950|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7951|       |            int opcode = INSTRUMENTED_NOT_TAKEN;
  |  | 7952|       |            (void)(opcode);
  |  | 7953|       |            #endif
  |  | 7954|      0|            _Py_CODEUNIT* const prev_instr = frame->instr_ptr;
  |  | 7955|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7956|      0|            (void)this_instr;
  |  | 7957|      0|            frame->instr_ptr = next_instr;
  |  | 7958|      0|            next_instr += 1;
  |  | 7959|      0|            INSTRUCTION_STATS(INSTRUMENTED_NOT_TAKEN);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7960|      0|            (void)this_instr;
  |  | 7961|      0|            INSTRUMENTED_JUMP(prev_instr, next_instr, PY_MONITORING_EVENT_BRANCH_LEFT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7962|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7963|      0|        }
  |  | 7964|       |
  |  | 7965|      0|        TARGET(INSTRUMENTED_POP_ITER) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7966|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7967|       |            int opcode = INSTRUMENTED_POP_ITER;
  |  | 7968|       |            (void)(opcode);
  |  | 7969|       |            #endif
  |  | 7970|      0|            _Py_CODEUNIT* const prev_instr = frame->instr_ptr;
  |  | 7971|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7972|      0|            (void)this_instr;
  |  | 7973|      0|            frame->instr_ptr = next_instr;
  |  | 7974|      0|            next_instr += 1;
  |  | 7975|      0|            INSTRUCTION_STATS(INSTRUMENTED_POP_ITER);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 7976|      0|            _PyStackRef iter;
  |  | 7977|      0|            _PyStackRef index_or_null;
  |  | 7978|      0|            index_or_null = stack_pointer[-1];
  |  | 7979|      0|            iter = stack_pointer[-2];
  |  | 7980|      0|            (void)index_or_null;
  |  | 7981|      0|            INSTRUMENTED_JUMP(prev_instr, this_instr+1, PY_MONITORING_EVENT_BRANCH_RIGHT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7982|      0|            stack_pointer += -2;
  |  | 7983|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 7984|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 7985|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 7986|      0|            PyStackRef_CLOSE(iter);
  |  | 7987|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 7988|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 7989|      0|        }
  |  | 7990|       |
  |  | 7991|      0|        TARGET(INSTRUMENTED_POP_JUMP_IF_FALSE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 7992|       |            #if _Py_TAIL_CALL_INTERP
  |  | 7993|       |            int opcode = INSTRUMENTED_POP_JUMP_IF_FALSE;
  |  | 7994|       |            (void)(opcode);
  |  | 7995|       |            #endif
  |  | 7996|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 7997|      0|            (void)this_instr;
  |  | 7998|      0|            frame->instr_ptr = next_instr;
  |  | 7999|      0|            next_instr += 2;
  |  | 8000|      0|            INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_FALSE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8001|      0|            _PyStackRef cond;
  |  | 8002|       |            /* Skip 1 cache entry */
  |  | 8003|      0|            cond = stack_pointer[-1];
  |  | 8004|      0|            assert(PyStackRef_BoolCheck(cond));
  |  |  ------------------
  |  |  |  Branch (8004:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 8005|      0|            int jump = PyStackRef_IsFalse(cond);
  |  |  ------------------
  |  |  |  |  494|      0|#define PyStackRef_IsFalse(REF) ((REF).bits == (((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8006|      0|            RECORD_BRANCH_TAKEN(this_instr[1].cache, jump);
  |  |  ------------------
  |  |  |  |  394|      0|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|      0|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  | 8007|      0|            if (jump) {
  |  |  ------------------
  |  |  |  Branch (8007:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8008|      0|                INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8009|      0|            }
  |  | 8010|      0|            stack_pointer += -1;
  |  | 8011|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8012|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8013|      0|        }
  |  | 8014|       |
  |  | 8015|      0|        TARGET(INSTRUMENTED_POP_JUMP_IF_NONE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8016|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8017|       |            int opcode = INSTRUMENTED_POP_JUMP_IF_NONE;
  |  | 8018|       |            (void)(opcode);
  |  | 8019|       |            #endif
  |  | 8020|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8021|      0|            (void)this_instr;
  |  | 8022|      0|            frame->instr_ptr = next_instr;
  |  | 8023|      0|            next_instr += 2;
  |  | 8024|      0|            INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NONE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8025|      0|            _PyStackRef value;
  |  | 8026|       |            /* Skip 1 cache entry */
  |  | 8027|      0|            value = stack_pointer[-1];
  |  | 8028|      0|            int jump = PyStackRef_IsNone(value);
  |  |  ------------------
  |  |  |  |  495|      0|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8029|      0|            RECORD_BRANCH_TAKEN(this_instr[1].cache, jump);
  |  |  ------------------
  |  |  |  |  394|      0|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|      0|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  | 8030|      0|            if (jump) {
  |  |  ------------------
  |  |  |  Branch (8030:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8031|      0|                INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8032|      0|            }
  |  | 8033|      0|            else {
  |  | 8034|      0|                stack_pointer += -1;
  |  | 8035|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8036|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8037|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8038|      0|                PyStackRef_CLOSE(value);
  |  | 8039|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8040|      0|                stack_pointer += 1;
  |  | 8041|      0|            }
  |  | 8042|      0|            stack_pointer += -1;
  |  | 8043|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8044|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8045|      0|        }
  |  | 8046|       |
  |  | 8047|      0|        TARGET(INSTRUMENTED_POP_JUMP_IF_NOT_NONE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8048|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8049|       |            int opcode = INSTRUMENTED_POP_JUMP_IF_NOT_NONE;
  |  | 8050|       |            (void)(opcode);
  |  | 8051|       |            #endif
  |  | 8052|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8053|      0|            (void)this_instr;
  |  | 8054|      0|            frame->instr_ptr = next_instr;
  |  | 8055|      0|            next_instr += 2;
  |  | 8056|      0|            INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_NOT_NONE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8057|      0|            _PyStackRef value;
  |  | 8058|       |            /* Skip 1 cache entry */
  |  | 8059|      0|            value = stack_pointer[-1];
  |  | 8060|      0|            int jump = !PyStackRef_IsNone(value);
  |  |  ------------------
  |  |  |  |  495|      0|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8061|      0|            RECORD_BRANCH_TAKEN(this_instr[1].cache, jump);
  |  |  ------------------
  |  |  |  |  394|      0|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|      0|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  | 8062|      0|            if (jump) {
  |  |  ------------------
  |  |  |  Branch (8062:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8063|      0|                stack_pointer += -1;
  |  | 8064|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8065|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8066|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8067|      0|                PyStackRef_CLOSE(value);
  |  | 8068|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8069|      0|                INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8070|      0|            }
  |  | 8071|      0|            else {
  |  | 8072|      0|                stack_pointer += -1;
  |  | 8073|      0|            }
  |  | 8074|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8075|      0|        }
  |  | 8076|       |
  |  | 8077|      0|        TARGET(INSTRUMENTED_POP_JUMP_IF_TRUE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8078|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8079|       |            int opcode = INSTRUMENTED_POP_JUMP_IF_TRUE;
  |  | 8080|       |            (void)(opcode);
  |  | 8081|       |            #endif
  |  | 8082|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8083|      0|            (void)this_instr;
  |  | 8084|      0|            frame->instr_ptr = next_instr;
  |  | 8085|      0|            next_instr += 2;
  |  | 8086|      0|            INSTRUCTION_STATS(INSTRUMENTED_POP_JUMP_IF_TRUE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8087|      0|            _PyStackRef cond;
  |  | 8088|       |            /* Skip 1 cache entry */
  |  | 8089|      0|            cond = stack_pointer[-1];
  |  | 8090|      0|            assert(PyStackRef_BoolCheck(cond));
  |  |  ------------------
  |  |  |  Branch (8090:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 8091|      0|            int jump = PyStackRef_IsTrue(cond);
  |  |  ------------------
  |  |  |  |  493|      0|#define PyStackRef_IsTrue(REF) ((REF).bits == (((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8092|      0|            RECORD_BRANCH_TAKEN(this_instr[1].cache, jump);
  |  |  ------------------
  |  |  |  |  394|      0|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|      0|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  | 8093|      0|            if (jump) {
  |  |  ------------------
  |  |  |  Branch (8093:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8094|      0|                INSTRUMENTED_JUMP(this_instr, next_instr + oparg, PY_MONITORING_EVENT_BRANCH_RIGHT);
  |  |  ------------------
  |  |  |  |  410|      0|#define INSTRUMENTED_JUMP(src, dest, event) \
  |  |  |  |  411|      0|do { \
  |  |  |  |  412|      0|    _Py_CODEUNIT *_dest = (dest); \
  |  |  |  |  413|      0|    if (tstate->tracing) {\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (413:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  414|      0|        next_instr = _dest; \
  |  |  |  |  415|      0|    } else { \
  |  |  |  |  416|      0|        _PyFrame_SetStackPointer(frame, stack_pointer); \
  |  |  |  |  417|      0|        next_instr = _Py_call_instrumentation_jump(this_instr, tstate, event, frame, src, _dest); \
  |  |  |  |  418|      0|        stack_pointer = _PyFrame_GetStackPointer(frame); \
  |  |  |  |  419|      0|        if (next_instr == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (419:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  420|      0|            next_instr = _dest + 1; \
  |  |  |  |  421|      0|            JUMP_TO_LABEL(error); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  422|      0|        } \
  |  |  |  |  423|      0|    } \
  |  |  |  |  424|      0|} while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (424:10): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8095|      0|            }
  |  | 8096|      0|            stack_pointer += -1;
  |  | 8097|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8098|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8099|      0|        }
  |  | 8100|       |
  |  | 8101|      0|        TARGET(INSTRUMENTED_RESUME) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8102|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8103|       |            int opcode = INSTRUMENTED_RESUME;
  |  | 8104|       |            (void)(opcode);
  |  | 8105|       |            #endif
  |  | 8106|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8107|      0|            (void)this_instr;
  |  | 8108|      0|            frame->instr_ptr = next_instr;
  |  | 8109|      0|            next_instr += 2;
  |  | 8110|      0|            INSTRUCTION_STATS(INSTRUMENTED_RESUME);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8111|       |            /* Skip 1 cache entry */
  |  | 8112|       |            // _LOAD_BYTECODE
  |  | 8113|      0|            {
  |  | 8114|       |                #ifdef Py_GIL_DISABLED
  |  | 8115|       |                if (frame->tlbc_index !=
  |  | 8116|       |                    ((_PyThreadStateImpl *)tstate)->tlbc_index) {
  |  | 8117|       |                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8118|       |                    _PyFrame_StackPointerValidate(frame);
  |  | 8119|       |                    _Py_CODEUNIT *bytecode =
  |  | 8120|       |                    _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame));
  |  | 8121|       |                    _PyFrame_StackPointerInvalidate(frame);
  |  | 8122|       |                    if (bytecode == NULL) {
  |  | 8123|       |                        JUMP_TO_LABEL(error);
  |  | 8124|       |                    }
  |  | 8125|       |                    ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame);
  |  | 8126|       |                    frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index;
  |  | 8127|       |                    frame->instr_ptr = bytecode + off;
  |  | 8128|       |                    next_instr = frame->instr_ptr;
  |  | 8129|       |                    DISPATCH();
  |  | 8130|       |                }
  |  | 8131|       |                #endif
  |  | 8132|      0|            }
  |  | 8133|       |            // _MAYBE_INSTRUMENT
  |  | 8134|      0|            {
  |  | 8135|       |                #ifdef Py_GIL_DISABLED
  |  | 8136|       |
  |  | 8137|       |                int check_instrumentation = 1;
  |  | 8138|       |                #else
  |  | 8139|      0|                int check_instrumentation = (tstate->tracing == 0);
  |  | 8140|      0|                #endif
  |  | 8141|      0|                if (check_instrumentation) {
  |  |  ------------------
  |  |  |  Branch (8141:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8142|      0|                    uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK;
  |  |  ------------------
  |  |  |  |  356|      0|#define _PY_EVAL_EVENTS_MASK ((1 << _PY_EVAL_EVENTS_BITS)-1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  355|      0|#define _PY_EVAL_EVENTS_BITS 8
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8143|      0|                    uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version);
  |  |  ------------------
  |  |  |  |  152|      0|#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value
  |  |  ------------------
  |  | 8144|      0|                    if (code_version != global_version) {
  |  |  ------------------
  |  |  |  Branch (8144:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 8145|      0|                        _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8146|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 8147|      0|                        int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp);
  |  | 8148|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 8149|      0|                        if (err) {
  |  |  ------------------
  |  |  |  Branch (8149:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 8150|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8151|      0|                        }
  |  | 8152|      0|                        next_instr = this_instr;
  |  | 8153|      0|                        DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8154|      0|                    }
  |  | 8155|      0|                }
  |  | 8156|      0|            }
  |  | 8157|       |            // _CHECK_PERIODIC_IF_NOT_YIELD_FROM
  |  | 8158|      0|            {
  |  | 8159|      0|                if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) {
  |  |  ------------------
  |  |  |  |   94|      0|#define RESUME_OPARG_LOCATION_MASK 0x7
  |  |  ------------------
  |  |                               if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) {
  |  |  ------------------
  |  |  |  |   90|      0|#define RESUME_AFTER_YIELD_FROM 2
  |  |  ------------------
  |  |  |  Branch (8159:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8160|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8161|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 8162|      0|                    int err = check_periodics(tstate);
  |  | 8163|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 8164|      0|                    if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (8164:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 8165|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8166|      0|                    }
  |  | 8167|      0|                }
  |  | 8168|      0|            }
  |  | 8169|       |            // _MONITOR_RESUME
  |  | 8170|      0|            {
  |  | 8171|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8172|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8173|      0|                int err = _Py_call_instrumentation(
  |  | 8174|      0|                    tstate, oparg == 0 ? PY_MONITORING_EVENT_PY_START : PY_MONITORING_EVENT_PY_RESUME, frame, this_instr);
  |  |  ------------------
  |  |  |  |   14|      0|#define PY_MONITORING_EVENT_PY_START 0
  |  |  ------------------
  |  |                                   tstate, oparg == 0 ? PY_MONITORING_EVENT_PY_START : PY_MONITORING_EVENT_PY_RESUME, frame, this_instr);
  |  |  ------------------
  |  |  |  |   15|      0|#define PY_MONITORING_EVENT_PY_RESUME 1
  |  |  ------------------
  |  |  |  Branch (8174:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 8175|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8176|       |                // Explicit stack reload
  |  | 8177|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 8178|      0|                _PyFrame_StackAssertInvalid(frame);
  |  | 8179|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (8179:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8180|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8181|      0|                }
  |  | 8182|      0|                if (frame->instr_ptr != this_instr) {
  |  |  ------------------
  |  |  |  Branch (8182:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8183|      0|                    next_instr = frame->instr_ptr;
  |  | 8184|      0|                }
  |  | 8185|      0|            }
  |  | 8186|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8187|      0|        }
  |  | 8188|       |
  |  | 8189|      0|        TARGET(INSTRUMENTED_RETURN_VALUE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8190|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8191|       |            int opcode = INSTRUMENTED_RETURN_VALUE;
  |  | 8192|       |            (void)(opcode);
  |  | 8193|       |            #endif
  |  | 8194|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8195|      0|            (void)this_instr;
  |  | 8196|      0|            frame->instr_ptr = next_instr;
  |  | 8197|      0|            next_instr += 1;
  |  | 8198|      0|            INSTRUCTION_STATS(INSTRUMENTED_RETURN_VALUE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8199|      0|            _PyStackRef val;
  |  | 8200|      0|            _PyStackRef value;
  |  | 8201|      0|            _PyStackRef retval;
  |  | 8202|      0|            _PyStackRef res;
  |  | 8203|       |            // _RETURN_VALUE_EVENT
  |  | 8204|      0|            {
  |  | 8205|      0|                val = stack_pointer[-1];
  |  | 8206|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8207|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8208|      0|                int err = _Py_call_instrumentation_arg(
  |  | 8209|      0|                    tstate, PY_MONITORING_EVENT_PY_RETURN,
  |  |  ------------------
  |  |  |  |   16|      0|#define PY_MONITORING_EVENT_PY_RETURN 2
  |  |  ------------------
  |  | 8210|      0|                    frame, this_instr, PyStackRef_AsPyObjectBorrow(val));
  |  | 8211|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8212|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (8212:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8213|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8214|      0|                }
  |  | 8215|      0|            }
  |  | 8216|       |            // _MAKE_HEAP_SAFE
  |  | 8217|      0|            {
  |  | 8218|      0|                value = val;
  |  | 8219|      0|                value = PyStackRef_MakeHeapSafe(value);
  |  | 8220|      0|            }
  |  | 8221|       |            // _RETURN_VALUE
  |  | 8222|      0|            {
  |  | 8223|      0|                retval = value;
  |  | 8224|      0|                assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (8224:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8225|      0|                _PyStackRef temp = retval;
  |  | 8226|      0|                stack_pointer += -1;
  |  | 8227|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8228|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8229|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8230|      0|                assert(STACK_LEVEL() == 0);
  |  |  ------------------
  |  |  |  Branch (8230:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8231|      0|                DTRACE_FUNCTION_RETURN();
  |  |  ------------------
  |  |  |  |  347|      0|#define DTRACE_FUNCTION_RETURN() ((void)0)
  |  |  ------------------
  |  | 8232|      0|                _Py_LeaveRecursiveCallPy(tstate);
  |  | 8233|      0|                _PyInterpreterFrame *dying = frame;
  |  | 8234|      0|                frame = tstate->current_frame = dying->previous;
  |  | 8235|      0|                _PyEval_FrameClearAndPop(tstate, dying);
  |  | 8236|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 8237|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8238|      0|                LOAD_IP(frame->return_offset);
  |  |  ------------------
  |  |  |  |  441|      0|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|      0|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8239|      0|                res = temp;
  |  | 8240|      0|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|      0|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 8241|      0|            }
  |  | 8242|      0|            stack_pointer[0] = res;
  |  | 8243|      0|            stack_pointer += 1;
  |  | 8244|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8245|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8246|      0|        }
  |  | 8247|       |
  |  | 8248|      0|        TARGET(INSTRUMENTED_YIELD_VALUE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8249|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8250|       |            int opcode = INSTRUMENTED_YIELD_VALUE;
  |  | 8251|       |            (void)(opcode);
  |  | 8252|       |            #endif
  |  | 8253|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8254|      0|            (void)this_instr;
  |  | 8255|      0|            frame->instr_ptr = next_instr;
  |  | 8256|      0|            next_instr += 1;
  |  | 8257|      0|            INSTRUCTION_STATS(INSTRUMENTED_YIELD_VALUE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8258|      0|            opcode = INSTRUMENTED_YIELD_VALUE;
  |  |  ------------------
  |  |  |  |  234|      0|#define INSTRUMENTED_YIELD_VALUE               246
  |  |  ------------------
  |  | 8259|      0|            _PyStackRef val;
  |  | 8260|      0|            _PyStackRef value;
  |  | 8261|      0|            _PyStackRef retval;
  |  | 8262|       |            // _YIELD_VALUE_EVENT
  |  | 8263|      0|            {
  |  | 8264|      0|                val = stack_pointer[-1];
  |  | 8265|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8266|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8267|      0|                int err = _Py_call_instrumentation_arg(
  |  | 8268|      0|                    tstate, PY_MONITORING_EVENT_PY_YIELD,
  |  |  ------------------
  |  |  |  |   17|      0|#define PY_MONITORING_EVENT_PY_YIELD 3
  |  |  ------------------
  |  | 8269|      0|                    frame, this_instr, PyStackRef_AsPyObjectBorrow(val));
  |  | 8270|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8271|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (8271:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8272|       |                    // Explicit stack reload
  |  | 8273|      0|                    stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 8274|      0|                    _PyFrame_StackAssertInvalid(frame);
  |  | 8275|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8276|      0|                }
  |  | 8277|      0|                if (frame->instr_ptr != this_instr) {
  |  |  ------------------
  |  |  |  Branch (8277:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8278|       |                    // Explicit stack reload
  |  | 8279|      0|                    stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 8280|      0|                    _PyFrame_StackAssertInvalid(frame);
  |  | 8281|      0|                    next_instr = frame->instr_ptr;
  |  | 8282|      0|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8283|      0|                }
  |  | 8284|      0|            }
  |  | 8285|       |            // _MAKE_HEAP_SAFE
  |  | 8286|      0|            {
  |  | 8287|      0|                value = val;
  |  | 8288|      0|                value = PyStackRef_MakeHeapSafe(value);
  |  | 8289|      0|            }
  |  | 8290|       |            // _YIELD_VALUE
  |  | 8291|      0|            {
  |  | 8292|      0|                retval = value;
  |  | 8293|      0|                assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (8293:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8294|      0|                frame->instr_ptr++;
  |  | 8295|      0|                PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame);
  |  | 8296|      0|                assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1);
  |  |  ------------------
  |  |  |  Branch (8296:17): [True: 0, Folded]
  |  |  ------------------
  |  | 8297|      0|                assert(oparg == 0 || oparg == 1);
  |  |  ------------------
  |  |  |  Branch (8297:17): [True: 0, False: 0]
  |  |  |  Branch (8297:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8298|      0|                _PyStackRef temp = retval;
  |  | 8299|      0|                stack_pointer += -1;
  |  | 8300|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8301|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8302|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8303|      0|                DTRACE_FUNCTION_RETURN();
  |  |  ------------------
  |  |  |  |  347|      0|#define DTRACE_FUNCTION_RETURN() ((void)0)
  |  |  ------------------
  |  | 8304|      0|                tstate->exc_info = gen->gi_exc_state.previous_item;
  |  | 8305|      0|                gen->gi_exc_state.previous_item = NULL;
  |  | 8306|      0|                _Py_LeaveRecursiveCallPy(tstate);
  |  | 8307|      0|                _PyInterpreterFrame *gen_frame = frame;
  |  | 8308|      0|                _PyThreadState_UpdateLastProfiledFrame(tstate, gen_frame, gen_frame->previous);
  |  |  ------------------
  |  |  |  |  326|      0|    do { \
  |  |  |  |  327|      0|        PyThreadState *tstate_ = (tstate); \
  |  |  |  |  328|      0|        _PyInterpreterFrame *frame_ = (frame); \
  |  |  |  |  329|      0|        if (tstate_->last_profiled_frame == frame_) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (329:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  330|      0|            tstate_->last_profiled_frame = (previous); \
  |  |  |  |  331|      0|            tstate_->last_profiled_frame_seq++; \
  |  |  |  |  332|      0|        } \
  |  |  |  |  333|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (333:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8309|      0|                frame = tstate->current_frame = frame->previous;
  |  | 8310|      0|                gen_frame->previous = NULL;
  |  | 8311|      0|                ((_PyThreadStateImpl *)tstate)->generator_return_kind = GENERATOR_YIELD;
  |  | 8312|      0|                FT_ATOMIC_STORE_INT8_RELEASE(gen->gi_frame_state, FRAME_SUSPENDED + oparg);
  |  |  ------------------
  |  |  |  |  167|      0|#define FT_ATOMIC_STORE_INT8_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  |  | 8313|      0|                assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER);
  |  |  ------------------
  |  |  |  Branch (8313:17): [True: 0, Folded]
  |  |  ------------------
  |  | 8314|       |                #if TIER_ONE && defined(Py_DEBUG)
  |  | 8315|       |                if (!PyStackRef_IsNone(frame->f_executable)) {
  |  | 8316|       |                    Py_ssize_t i = frame->instr_ptr - _PyFrame_GetBytecode(frame);
  |  | 8317|       |                    assert(i >= 0 && i <= INT_MAX);
  |  | 8318|       |                    int opcode = _Py_GetBaseCodeUnit(_PyFrame_GetCode(frame), (int)i).op.code;
  |  | 8319|       |                    assert(opcode == SEND || opcode == FOR_ITER);
  |  | 8320|       |                }
  |  | 8321|       |                #endif
  |  | 8322|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 8323|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8324|      0|                LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND);
  |  |  ------------------
  |  |  |  |  441|      0|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|      0|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8325|      0|                value = temp;
  |  | 8326|      0|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|      0|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 8327|      0|            }
  |  | 8328|      0|            stack_pointer[0] = value;
  |  | 8329|      0|            stack_pointer += 1;
  |  | 8330|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8331|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8332|      0|        }
  |  | 8333|       |
  |  | 8334|   190k|        TARGET(INTERPRETER_EXIT) {
  |  |  ------------------
  |  |  |  |  132|   190k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8335|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8336|       |            int opcode = INTERPRETER_EXIT;
  |  | 8337|       |            (void)(opcode);
  |  | 8338|       |            #endif
  |  | 8339|   190k|            frame->instr_ptr = next_instr;
  |  | 8340|   190k|            next_instr += 1;
  |  | 8341|   190k|            INSTRUCTION_STATS(INTERPRETER_EXIT);
  |  |  ------------------
  |  |  |  |   71|   190k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8342|   190k|            _PyStackRef retval;
  |  | 8343|   190k|            retval = stack_pointer[-1];
  |  | 8344|   190k|            assert(frame->owner == FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (8344:13): [True: 190k, False: 0]
  |  |  ------------------
  |  | 8345|   190k|            assert(_PyFrame_IsIncomplete(frame));
  |  |  ------------------
  |  |  |  Branch (8345:13): [True: 190k, False: 0]
  |  |  ------------------
  |  | 8346|   190k|            tstate->current_frame = frame->previous;
  |  | 8347|   190k|            assert(!_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (8347:13): [True: 190k, False: 0]
  |  |  ------------------
  |  | 8348|   190k|            PyObject *result = PyStackRef_AsPyObjectSteal(retval);
  |  | 8349|   190k|            #if !_Py_TAIL_CALL_INTERP
  |  | 8350|   190k|            assert(frame == &entry.frame);
  |  |  ------------------
  |  |  |  Branch (8350:13): [True: 190k, False: 0]
  |  |  ------------------
  |  | 8351|   190k|            #endif
  |  | 8352|       |            #ifdef _Py_TIER2
  |  | 8353|       |            _PyStackRef executor = frame->localsplus[0];
  |  | 8354|       |            assert(tstate->current_executor == NULL);
  |  | 8355|       |            if (!PyStackRef_IsNull(executor)) {
  |  | 8356|       |                assert(PyStackRef_TYPE(executor) == &_PyUOpExecutor_Type);
  |  | 8357|       |                tstate->current_executor = PyStackRef_AsPyObjectBorrow(executor);
  |  | 8358|       |                stack_pointer += -1;
  |  | 8359|       |                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  | 8360|       |                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8361|       |                _PyFrame_StackPointerValidate(frame);
  |  | 8362|       |                PyStackRef_CLOSE(executor);
  |  | 8363|       |                _PyFrame_StackPointerInvalidate(frame);
  |  | 8364|       |                stack_pointer += 1;
  |  | 8365|       |            }
  |  | 8366|       |            #endif
  |  | 8367|   190k|            LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|   190k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 8368|   190k|            return result;
  |  | 8369|   190k|        }
  |  | 8370|       |
  |  | 8371|   100k|        TARGET(IS_OP) {
  |  |  ------------------
  |  |  |  |  132|   100k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8372|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8373|       |            int opcode = IS_OP;
  |  | 8374|       |            (void)(opcode);
  |  | 8375|       |            #endif
  |  | 8376|   100k|            frame->instr_ptr = next_instr;
  |  | 8377|   100k|            next_instr += 1;
  |  | 8378|   100k|            INSTRUCTION_STATS(IS_OP);
  |  |  ------------------
  |  |  |  |   71|   100k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8379|   100k|            _PyStackRef left;
  |  | 8380|   100k|            _PyStackRef right;
  |  | 8381|   100k|            _PyStackRef b;
  |  | 8382|   100k|            _PyStackRef l;
  |  | 8383|   100k|            _PyStackRef r;
  |  | 8384|   100k|            _PyStackRef value;
  |  | 8385|       |            // _IS_OP
  |  | 8386|   100k|            {
  |  | 8387|   100k|                right = stack_pointer[-1];
  |  | 8388|   100k|                left = stack_pointer[-2];
  |  | 8389|   100k|                int res = Py_Is(PyStackRef_AsPyObjectBorrow(left), PyStackRef_AsPyObjectBorrow(right)) ^ oparg;
  |  |  ------------------
  |  |  |  |  187|   100k|#define Py_Is(x, y) ((x) == (y))
  |  |  ------------------
  |  | 8390|   100k|                b = res ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  1.34k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.34k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               b = res ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|   199k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  99.0k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8390:21): [True: 1.34k, False: 99.0k]
  |  |  ------------------
  |  | 8391|   100k|                l = left;
  |  | 8392|   100k|                r = right;
  |  | 8393|   100k|            }
  |  | 8394|       |            // _POP_TOP
  |  | 8395|   100k|            {
  |  | 8396|   100k|                value = r;
  |  | 8397|   100k|                stack_pointer[-2] = b;
  |  | 8398|   100k|                stack_pointer[-1] = l;
  |  | 8399|   100k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8400|   100k|                _PyFrame_StackPointerValidate(frame);
  |  | 8401|   100k|                PyStackRef_XCLOSE(value);
  |  | 8402|   100k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8403|   100k|            }
  |  | 8404|       |            // _POP_TOP
  |  | 8405|   100k|            {
  |  | 8406|   100k|                value = l;
  |  | 8407|   100k|                stack_pointer += -1;
  |  | 8408|   100k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   100k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8409|   100k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8410|   100k|                _PyFrame_StackPointerValidate(frame);
  |  | 8411|   100k|                PyStackRef_XCLOSE(value);
  |  | 8412|   100k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8413|   100k|            }
  |  | 8414|   100k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   100k|    { \
  |  |  |  |  201|   100k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   100k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   100k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   100k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   100k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   100k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   100k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   100k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 100k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   100k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   100k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   100k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   100k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   100k|    }
  |  |  ------------------
  |  | 8415|   100k|        }
  |  | 8416|       |
  |  | 8417|   100k|        TARGET(JUMP_BACKWARD) {
  |  |  ------------------
  |  |  |  |  132|    256|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8418|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8419|       |            int opcode = JUMP_BACKWARD;
  |  | 8420|       |            (void)(opcode);
  |  | 8421|       |            #endif
  |  | 8422|    256|            frame->instr_ptr = next_instr;
  |  | 8423|    256|            next_instr += 2;
  |  | 8424|    256|            INSTRUCTION_STATS(JUMP_BACKWARD);
  |  |  ------------------
  |  |  |  |   71|    256|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8425|    256|            PREDICTED_JUMP_BACKWARD:;
  |  | 8426|    256|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  | 8427|    256|            (void)this_instr;
  |  | 8428|       |            /* Skip 1 cache entry */
  |  | 8429|       |            // _SPECIALIZE_JUMP_BACKWARD
  |  | 8430|    256|            {
  |  | 8431|    256|                #if ENABLE_SPECIALIZATION
  |  | 8432|    256|                if (this_instr->op.code == JUMP_BACKWARD) {
  |  |  ------------------
  |  |  |  |   84|    256|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (8432:21): [True: 256, False: 0]
  |  |  ------------------
  |  | 8433|    256|                    uint8_t desired = tstate->interp->jit ? JUMP_BACKWARD_JIT : JUMP_BACKWARD_NO_JIT;
  |  |  ------------------
  |  |  |  |  183|      0|#define JUMP_BACKWARD_JIT                      181
  |  |  ------------------
  |  |                                   uint8_t desired = tstate->interp->jit ? JUMP_BACKWARD_JIT : JUMP_BACKWARD_NO_JIT;
  |  |  ------------------
  |  |  |  |  184|    512|#define JUMP_BACKWARD_NO_JIT                   182
  |  |  ------------------
  |  |  |  Branch (8433:39): [True: 0, False: 256]
  |  |  ------------------
  |  | 8434|    256|                    FT_ATOMIC_STORE_UINT8_RELAXED(this_instr->op.code, desired);
  |  |  ------------------
  |  |  |  |  170|    256|#define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) value = new_value
  |  |  ------------------
  |  | 8435|    256|                    next_instr = this_instr;
  |  | 8436|    256|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|    256|    { \
  |  |  |  |  217|    256|        opcode = next_instr->op.code; \
  |  |  |  |  218|    256|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    256|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|    256|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    256|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|    256|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|    256|    }
  |  |  ------------------
  |  | 8437|    256|                }
  |  | 8438|    256|                #endif
  |  | 8439|    256|            }
  |  | 8440|       |            // _CHECK_PERIODIC
  |  | 8441|    256|            {
  |  | 8442|    256|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8443|    256|                _PyFrame_StackPointerValidate(frame);
  |  | 8444|    256|                int err = check_periodics(tstate);
  |  | 8445|    256|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8446|    256|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (8446:21): [True: 0, False: 256]
  |  |  ------------------
  |  | 8447|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8448|      0|                }
  |  | 8449|    256|            }
  |  | 8450|       |            // _JUMP_BACKWARD_NO_INTERRUPT
  |  | 8451|    256|            {
  |  | 8452|    256|                assert(oparg <= INSTR_OFFSET());
  |  |  ------------------
  |  |  |  Branch (8452:17): [True: 0, False: 256]
  |  |  ------------------
  |  | 8453|      0|                JUMPBY(-oparg);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 8454|      0|            }
  |  | 8455|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8456|      0|        }
  |  | 8457|       |
  |  | 8458|      0|        TARGET(JUMP_BACKWARD_JIT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8459|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8460|       |            int opcode = JUMP_BACKWARD_JIT;
  |  | 8461|       |            (void)(opcode);
  |  | 8462|       |            #endif
  |  | 8463|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8464|      0|            (void)this_instr;
  |  | 8465|      0|            frame->instr_ptr = next_instr;
  |  | 8466|      0|            next_instr += 2;
  |  | 8467|      0|            INSTRUCTION_STATS(JUMP_BACKWARD_JIT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8468|      0|            static_assert(1 == 1, "incorrect cache size");
  |  | 8469|       |            /* Skip 1 cache entry */
  |  | 8470|       |            // _CHECK_PERIODIC
  |  | 8471|      0|            {
  |  | 8472|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8473|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8474|      0|                int err = check_periodics(tstate);
  |  | 8475|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8476|      0|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (8476:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8477|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8478|      0|                }
  |  | 8479|      0|            }
  |  | 8480|       |            // _JUMP_BACKWARD_NO_INTERRUPT
  |  | 8481|      0|            {
  |  | 8482|      0|                assert(oparg <= INSTR_OFFSET());
  |  |  ------------------
  |  |  |  Branch (8482:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8483|      0|                JUMPBY(-oparg);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 8484|      0|            }
  |  | 8485|       |            // _JIT
  |  | 8486|      0|            {
  |  | 8487|       |                #ifdef _Py_TIER2
  |  | 8488|       |                bool is_resume = this_instr->op.code == RESUME_CHECK_JIT;
  |  | 8489|       |                _Py_BackoffCounter counter = this_instr[1].counter;
  |  | 8490|       |                if ((backoff_counter_triggers(counter) &&
  |  | 8491|       |                        !IS_JIT_TRACING() &&
  |  | 8492|       |                        (this_instr->op.code == JUMP_BACKWARD_JIT || is_resume)) &&
  |  | 8493|       |                    next_instr->op.code != ENTER_EXECUTOR) {
  |  | 8494|       |                    _Py_CODEUNIT *insert_exec_at = this_instr;
  |  | 8495|       |                    for (int tmp = oparg; tmp > 255; tmp >>= 8) {
  |  | 8496|       |                        insert_exec_at--;
  |  | 8497|       |                    }
  |  | 8498|       |                    int succ = _PyJit_TryInitializeTracing(tstate, frame, this_instr, insert_exec_at,
  |  | 8499|       |                        is_resume ? insert_exec_at : next_instr, stack_pointer, 0, NULL, oparg, NULL);
  |  | 8500|       |                    if (succ) {
  |  | 8501|       |                        ENTER_TRACING();
  |  | 8502|       |                    }
  |  | 8503|       |                    else {
  |  | 8504|       |                        this_instr[1].counter = restart_backoff_counter(counter);
  |  | 8505|       |                    }
  |  | 8506|       |                }
  |  | 8507|       |                else {
  |  | 8508|       |                    ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  | 8509|       |                }
  |  | 8510|       |                #endif
  |  | 8511|      0|            }
  |  | 8512|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8513|      0|        }
  |  | 8514|       |
  |  | 8515|  1.07k|        TARGET(JUMP_BACKWARD_NO_INTERRUPT) {
  |  |  ------------------
  |  |  |  |  132|  1.07k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8516|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8517|       |            int opcode = JUMP_BACKWARD_NO_INTERRUPT;
  |  | 8518|       |            (void)(opcode);
  |  | 8519|       |            #endif
  |  | 8520|  1.07k|            frame->instr_ptr = next_instr;
  |  | 8521|  1.07k|            next_instr += 1;
  |  | 8522|  1.07k|            INSTRUCTION_STATS(JUMP_BACKWARD_NO_INTERRUPT);
  |  |  ------------------
  |  |  |  |   71|  1.07k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8523|  1.07k|            assert(oparg <= INSTR_OFFSET());
  |  |  ------------------
  |  |  |  Branch (8523:13): [True: 1.07k, False: 0]
  |  |  ------------------
  |  | 8524|  1.07k|            JUMPBY(-oparg);
  |  |  ------------------
  |  |  |  |  261|  1.07k|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 8525|  1.07k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.07k|    { \
  |  |  |  |  201|  1.07k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.07k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.07k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.07k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.07k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.07k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.07k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.07k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.07k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.07k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.07k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.07k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.07k|    }
  |  |  ------------------
  |  | 8526|  1.07k|        }
  |  | 8527|       |
  |  | 8528|  26.7M|        TARGET(JUMP_BACKWARD_NO_JIT) {
  |  |  ------------------
  |  |  |  |  132|  26.7M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8529|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8530|       |            int opcode = JUMP_BACKWARD_NO_JIT;
  |  | 8531|       |            (void)(opcode);
  |  | 8532|       |            #endif
  |  | 8533|  26.7M|            frame->instr_ptr = next_instr;
  |  | 8534|  26.7M|            next_instr += 2;
  |  | 8535|  26.7M|            INSTRUCTION_STATS(JUMP_BACKWARD_NO_JIT);
  |  |  ------------------
  |  |  |  |   71|  26.7M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8536|  26.7M|            static_assert(1 == 1, "incorrect cache size");
  |  | 8537|       |            /* Skip 1 cache entry */
  |  | 8538|       |            // _CHECK_PERIODIC
  |  | 8539|  26.7M|            {
  |  | 8540|  26.7M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8541|  26.7M|                _PyFrame_StackPointerValidate(frame);
  |  | 8542|  26.7M|                int err = check_periodics(tstate);
  |  | 8543|  26.7M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8544|  26.7M|                if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (8544:21): [True: 0, False: 26.7M]
  |  |  ------------------
  |  | 8545|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8546|      0|                }
  |  | 8547|  26.7M|            }
  |  | 8548|       |            // _JUMP_BACKWARD_NO_INTERRUPT
  |  | 8549|  26.7M|            {
  |  | 8550|  26.7M|                assert(oparg <= INSTR_OFFSET());
  |  |  ------------------
  |  |  |  Branch (8550:17): [True: 26.7M, False: 0]
  |  |  ------------------
  |  | 8551|  26.7M|                JUMPBY(-oparg);
  |  |  ------------------
  |  |  |  |  261|  26.7M|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 8552|  26.7M|            }
  |  | 8553|  26.7M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  26.7M|    { \
  |  |  |  |  201|  26.7M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  26.7M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  26.7M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  26.7M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  26.7M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  26.7M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  26.7M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  26.7M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 26.7M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  26.7M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  26.7M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  26.7M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  26.7M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  26.7M|    }
  |  |  ------------------
  |  | 8554|  26.7M|        }
  |  | 8555|       |
  |  | 8556|  1.04M|        TARGET(JUMP_FORWARD) {
  |  |  ------------------
  |  |  |  |  132|  1.04M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8557|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8558|       |            int opcode = JUMP_FORWARD;
  |  | 8559|       |            (void)(opcode);
  |  | 8560|       |            #endif
  |  | 8561|  1.04M|            frame->instr_ptr = next_instr;
  |  | 8562|  1.04M|            next_instr += 1;
  |  | 8563|  1.04M|            INSTRUCTION_STATS(JUMP_FORWARD);
  |  |  ------------------
  |  |  |  |   71|  1.04M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8564|  1.04M|            JUMPBY(oparg);
  |  |  ------------------
  |  |  |  |  261|  1.04M|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  | 8565|  1.04M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.04M|    { \
  |  |  |  |  201|  1.04M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.04M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.04M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.04M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.04M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.04M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.04M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.04M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.04M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.04M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.04M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.04M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.04M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.04M|    }
  |  |  ------------------
  |  | 8566|  1.04M|        }
  |  | 8567|       |
  |  | 8568|  1.04M|        TARGET(LIST_APPEND) {
  |  |  ------------------
  |  |  |  |  132|   582k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8569|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8570|       |            int opcode = LIST_APPEND;
  |  | 8571|       |            (void)(opcode);
  |  | 8572|       |            #endif
  |  | 8573|   582k|            frame->instr_ptr = next_instr;
  |  | 8574|   582k|            next_instr += 1;
  |  | 8575|   582k|            INSTRUCTION_STATS(LIST_APPEND);
  |  |  ------------------
  |  |  |  |   71|   582k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8576|   582k|            _PyStackRef list;
  |  | 8577|   582k|            _PyStackRef v;
  |  | 8578|   582k|            v = stack_pointer[-1];
  |  | 8579|   582k|            list = stack_pointer[-2 - (oparg-1)];
  |  | 8580|   582k|            int err = _PyList_AppendTakeRef((PyListObject *)PyStackRef_AsPyObjectBorrow(list),
  |  | 8581|   582k|                PyStackRef_AsPyObjectSteal(v));
  |  | 8582|   582k|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (8582:17): [True: 0, False: 582k]
  |  |  ------------------
  |  | 8583|      0|                JUMP_TO_LABEL(pop_1_error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8584|      0|            }
  |  | 8585|   582k|            stack_pointer += -1;
  |  | 8586|   582k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   582k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8587|   582k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   582k|    { \
  |  |  |  |  201|   582k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   582k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   582k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   582k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   582k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   582k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   582k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   582k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 582k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   582k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   582k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   582k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   582k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   582k|    }
  |  |  ------------------
  |  | 8588|   582k|        }
  |  | 8589|       |
  |  | 8590|    196|        TARGET(LIST_EXTEND) {
  |  |  ------------------
  |  |  |  |  132|    196|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8591|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8592|       |            int opcode = LIST_EXTEND;
  |  | 8593|       |            (void)(opcode);
  |  | 8594|       |            #endif
  |  | 8595|    196|            frame->instr_ptr = next_instr;
  |  | 8596|    196|            next_instr += 1;
  |  | 8597|    196|            INSTRUCTION_STATS(LIST_EXTEND);
  |  |  ------------------
  |  |  |  |   71|    196|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8598|    196|            _PyStackRef list_st;
  |  | 8599|    196|            _PyStackRef iterable_st;
  |  | 8600|    196|            _PyStackRef i;
  |  | 8601|    196|            _PyStackRef value;
  |  | 8602|       |            // _LIST_EXTEND
  |  | 8603|    196|            {
  |  | 8604|    196|                iterable_st = stack_pointer[-1];
  |  | 8605|    196|                list_st = stack_pointer[-2 - (oparg-1)];
  |  | 8606|    196|                PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
  |  | 8607|    196|                PyObject *iterable = PyStackRef_AsPyObjectBorrow(iterable_st);
  |  | 8608|    196|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8609|    196|                _PyFrame_StackPointerValidate(frame);
  |  | 8610|    196|                PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable);
  |  | 8611|    196|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8612|    196|                if (none_val == NULL) {
  |  |  ------------------
  |  |  |  Branch (8612:21): [True: 0, False: 196]
  |  |  ------------------
  |  | 8613|      0|                    int matches = _PyErr_ExceptionMatches(tstate, PyExc_TypeError);
  |  | 8614|      0|                    if (matches &&
  |  |  ------------------
  |  |  |  Branch (8614:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 8615|      0|                        (Py_TYPE(iterable)->tp_iter == NULL && !PySequence_Check(iterable)))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8615:26): [True: 0, False: 0]
  |  |  |  Branch (8615:64): [True: 0, False: 0]
  |  |  ------------------
  |  | 8616|      0|                    {
  |  | 8617|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (8617:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 8618|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 8619|      0|                        _PyErr_Clear(tstate);
  |  | 8620|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 8621|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (8621:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 8622|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 8623|      0|                        _PyErr_Format(tstate, PyExc_TypeError,
  |  | 8624|      0|                                  "Value after * must be an iterable, not %.200s",
  |  | 8625|      0|                                  Py_TYPE(iterable)->tp_name);
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8626|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 8627|      0|                    }
  |  | 8628|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8629|      0|                }
  |  | 8630|    196|                assert(Py_IsNone(none_val));
  |  |  ------------------
  |  |  |  Branch (8630:17): [True: 196, False: 0]
  |  |  ------------------
  |  | 8631|    196|                i = iterable_st;
  |  | 8632|    196|            }
  |  | 8633|       |            // _POP_TOP
  |  | 8634|      0|            {
  |  | 8635|    196|                value = i;
  |  | 8636|    196|                stack_pointer += -1;
  |  | 8637|    196|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    196|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8638|    196|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8639|    196|                _PyFrame_StackPointerValidate(frame);
  |  | 8640|    196|                PyStackRef_XCLOSE(value);
  |  | 8641|    196|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8642|    196|            }
  |  | 8643|    196|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    196|    { \
  |  |  |  |  201|    196|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    196|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    196|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    196|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    196|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    196|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    196|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    196|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 196]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    196|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    196|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    196|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    196|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    196|    }
  |  |  ------------------
  |  | 8644|    196|        }
  |  | 8645|       |
  |  | 8646|  2.02M|        TARGET(LOAD_ATTR) {
  |  |  ------------------
  |  |  |  |  132|  2.02M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8647|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8648|       |            int opcode = LOAD_ATTR;
  |  | 8649|       |            (void)(opcode);
  |  | 8650|       |            #endif
  |  | 8651|  2.02M|            frame->instr_ptr = next_instr;
  |  | 8652|  2.02M|            next_instr += 10;
  |  | 8653|  2.02M|            INSTRUCTION_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |   71|  2.02M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8654|  2.03M|            PREDICTED_LOAD_ATTR:;
  |  | 8655|  2.03M|            _Py_CODEUNIT* const this_instr = next_instr - 10;
  |  | 8656|  2.03M|            (void)this_instr;
  |  | 8657|  2.03M|            _PyStackRef owner;
  |  | 8658|  2.03M|            _PyStackRef attr;
  |  | 8659|  2.03M|            _PyStackRef *self_or_null;
  |  | 8660|       |            // _SPECIALIZE_LOAD_ATTR
  |  | 8661|  2.03M|            {
  |  | 8662|  2.03M|                owner = stack_pointer[-1];
  |  | 8663|  2.03M|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  | 8664|  2.03M|                (void)counter;
  |  | 8665|  2.03M|                #if ENABLE_SPECIALIZATION
  |  | 8666|  2.03M|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  2.03M|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 1.56k, False: 2.02M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8667|  1.56k|                    PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
  |  |  ------------------
  |  |  |  |  236|  1.56k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  1.56k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  1.56k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8667:38): [True: 1.56k, False: 0]
  |  |  ------------------
  |  | 8668|      0|                    next_instr = this_instr;
  |  | 8669|  1.56k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8670|  1.56k|                    _PyFrame_StackPointerValidate(frame);
  |  | 8671|  1.56k|                    _Py_Specialize_LoadAttr(owner, next_instr, name);
  |  | 8672|  1.56k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 8673|  1.56k|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|  1.56k|    { \
  |  |  |  |  217|  1.56k|        opcode = next_instr->op.code; \
  |  |  |  |  218|  1.56k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.56k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|  1.56k|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.56k|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|  1.56k|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|  1.56k|    }
  |  |  ------------------
  |  | 8674|  1.56k|                }
  |  | 8675|  2.03M|                OPCODE_DEFERRED_INC(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |   90|  2.03M|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  | 8676|  2.03M|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  2.03M|    do { \
  |  |  |  |  378|  2.03M|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  2.03M|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 2.03M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8677|  2.03M|                #endif  /* ENABLE_SPECIALIZATION */
  |  | 8678|  2.03M|            }
  |  | 8679|       |            /* Skip 8 cache entries */
  |  | 8680|       |            // _LOAD_ATTR
  |  | 8681|      0|            {
  |  | 8682|  2.03M|                self_or_null = &stack_pointer[0];
  |  | 8683|  2.03M|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1);
  |  |  ------------------
  |  |  |  |  236|  2.03M|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  2.03M|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  2.03M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  2.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8683:34): [True: 2.02M, False: 1.56k]
  |  |  ------------------
  |  | 8684|  2.02M|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (8684:21): [True: 50.6k, False: 1.97M]
  |  |  ------------------
  |  | 8685|  50.6k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8686|  50.6k|                    _PyFrame_StackPointerValidate(frame);
  |  | 8687|  50.6k|                    attr = _Py_LoadAttr_StackRefSteal(tstate, owner, name, self_or_null);
  |  | 8688|  50.6k|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 8689|  50.6k|                    if (PyStackRef_IsNull(attr)) {
  |  |  ------------------
  |  |  |  |  482|  50.6k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  50.6k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  50.6k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 133, False: 50.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8690|    133|                        JUMP_TO_LABEL(pop_1_error);
  |  |  ------------------
  |  |  |  |  135|    133|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8691|      0|                    }
  |  | 8692|  50.6k|                }
  |  | 8693|  1.97M|                else {
  |  | 8694|  1.97M|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8695|  1.97M|                    _PyFrame_StackPointerValidate(frame);
  |  | 8696|  1.97M|                    attr = _PyObject_GetAttrStackRef(PyStackRef_AsPyObjectBorrow(owner), name);
  |  | 8697|  1.97M|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 8698|  1.97M|                    stack_pointer[-1] = attr;
  |  | 8699|  1.97M|                    stack_pointer += (oparg&1);
  |  | 8700|  1.97M|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.97M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8701|  1.97M|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8702|  1.97M|                    _PyFrame_StackPointerValidate(frame);
  |  | 8703|  1.97M|                    PyStackRef_CLOSE(owner);
  |  | 8704|  1.97M|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 8705|  1.97M|                    if (PyStackRef_IsNull(attr)) {
  |  |  ------------------
  |  |  |  |  482|  1.97M|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.97M|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.97M|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 257, False: 1.97M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8706|    257|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    257|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 8707|      0|                    }
  |  | 8708|  1.97M|                    stack_pointer += -(oparg&1);
  |  | 8709|  1.97M|                }
  |  | 8710|  2.02M|            }
  |  | 8711|  2.02M|            stack_pointer[-1] = attr;
  |  | 8712|  2.02M|            stack_pointer += (oparg&1);
  |  | 8713|  2.02M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.02M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8714|  2.02M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.02M|    { \
  |  |  |  |  201|  2.02M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.02M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.02M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.02M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.02M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.02M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.02M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.02M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.02M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.02M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.02M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.02M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.02M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.02M|    }
  |  |  ------------------
  |  | 8715|  2.02M|        }
  |  | 8716|       |
  |  | 8717|    326|        TARGET(LOAD_ATTR_CLASS) {
  |  |  ------------------
  |  |  |  |  132|    326|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8718|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8719|       |            int opcode = LOAD_ATTR_CLASS;
  |  | 8720|       |            (void)(opcode);
  |  | 8721|       |            #endif
  |  | 8722|    326|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8723|    326|            (void)this_instr;
  |  | 8724|    326|            frame->instr_ptr = next_instr;
  |  | 8725|    326|            next_instr += 10;
  |  | 8726|    326|            INSTRUCTION_STATS(LOAD_ATTR_CLASS);
  |  |  ------------------
  |  |  |  |   71|    326|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8727|    326|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 8728|    326|            _PyStackRef owner;
  |  | 8729|    326|            _PyStackRef attr;
  |  | 8730|    326|            _PyStackRef *null;
  |  | 8731|       |            /* Skip 1 cache entry */
  |  | 8732|       |            // _CHECK_ATTR_CLASS
  |  | 8733|    326|            {
  |  | 8734|    326|                owner = stack_pointer[-1];
  |  | 8735|    326|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 8736|    326|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 8737|    326|                if (!PyType_Check(owner_o)) {
  |  |  ------------------
  |  |  |  |  766|    326|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    326|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    326|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8737:21): [True: 0, False: 326]
  |  |  ------------------
  |  | 8738|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8739|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8739:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8740|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8741|      0|                }
  |  | 8742|    326|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (8742:17): [True: 326, False: 0]
  |  |  ------------------
  |  | 8743|    326|                if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|    326|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (8743:21): [True: 2, False: 324]
  |  |  ------------------
  |  | 8744|      2|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      2|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8745|      2|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8745:21): [True: 2, False: 0]
  |  |  ------------------
  |  | 8746|      2|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      2|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8747|      0|                }
  |  | 8748|    326|            }
  |  | 8749|       |            /* Skip 2 cache entries */
  |  | 8750|       |            // _LOAD_ATTR_CLASS
  |  | 8751|    324|            {
  |  | 8752|    324|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 8753|    324|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|    324|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 8754|    324|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (8754:17): [True: 324, False: 0]
  |  |  ------------------
  |  | 8755|    324|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|    324|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    324|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    324|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8756|    324|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8757|    324|                _PyFrame_StackPointerValidate(frame);
  |  | 8758|    324|                _PyStackRef tmp = owner;
  |  | 8759|    324|                owner = attr;
  |  | 8760|    324|                stack_pointer[-1] = owner;
  |  | 8761|    324|                PyStackRef_CLOSE(tmp);
  |  | 8762|    324|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8763|    324|            }
  |  | 8764|       |            // _PUSH_NULL_CONDITIONAL
  |  | 8765|      0|            {
  |  | 8766|    324|                null = &stack_pointer[0];
  |  | 8767|    324|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (8767:21): [True: 204, False: 120]
  |  |  ------------------
  |  | 8768|    204|                    null[0] = PyStackRef_NULL;
  |  | 8769|    204|                }
  |  | 8770|    324|            }
  |  | 8771|    324|            stack_pointer += (oparg & 1);
  |  | 8772|    324|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    324|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8773|    324|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    324|    { \
  |  |  |  |  201|    324|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    324|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    324|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    324|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    324|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    324|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    324|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    324|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 324]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    324|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    324|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    324|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    324|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    324|    }
  |  |  ------------------
  |  | 8774|    324|        }
  |  | 8775|       |
  |  | 8776|    180|        TARGET(LOAD_ATTR_CLASS_WITH_METACLASS_CHECK) {
  |  |  ------------------
  |  |  |  |  132|    180|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8777|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8778|       |            int opcode = LOAD_ATTR_CLASS_WITH_METACLASS_CHECK;
  |  | 8779|       |            (void)(opcode);
  |  | 8780|       |            #endif
  |  | 8781|    180|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8782|    180|            (void)this_instr;
  |  | 8783|    180|            frame->instr_ptr = next_instr;
  |  | 8784|    180|            next_instr += 10;
  |  | 8785|    180|            INSTRUCTION_STATS(LOAD_ATTR_CLASS_WITH_METACLASS_CHECK);
  |  |  ------------------
  |  |  |  |   71|    180|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8786|    180|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 8787|    180|            _PyStackRef owner;
  |  | 8788|    180|            _PyStackRef attr;
  |  | 8789|    180|            _PyStackRef *null;
  |  | 8790|       |            /* Skip 1 cache entry */
  |  | 8791|       |            // _GUARD_TYPE_VERSION
  |  | 8792|    180|            {
  |  | 8793|    180|                owner = stack_pointer[-1];
  |  | 8794|    180|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 8795|    180|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|    180|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    180|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    180|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8796|    180|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (8796:17): [True: 180, False: 0]
  |  |  ------------------
  |  | 8797|    180|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|    180|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (8797:21): [True: 0, False: 180]
  |  |  ------------------
  |  | 8798|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8799|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8799:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8800|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8801|      0|                }
  |  | 8802|    180|            }
  |  | 8803|       |            // _CHECK_ATTR_CLASS
  |  | 8804|    180|            {
  |  | 8805|    180|                uint32_t type_version = read_u32(&this_instr[4].cache);
  |  | 8806|    180|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 8807|    180|                if (!PyType_Check(owner_o)) {
  |  |  ------------------
  |  |  |  |  766|    180|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    180|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    180|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8807:21): [True: 0, False: 180]
  |  |  ------------------
  |  | 8808|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8809|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8809:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8810|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8811|      0|                }
  |  | 8812|    180|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (8812:17): [True: 180, False: 0]
  |  |  ------------------
  |  | 8813|    180|                if (FT_ATOMIC_LOAD_UINT_RELAXED(((PyTypeObject *)owner_o)->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|    180|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (8813:21): [True: 105, False: 75]
  |  |  ------------------
  |  | 8814|    105|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|    105|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8815|    105|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8815:21): [True: 105, False: 0]
  |  |  ------------------
  |  | 8816|    105|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|    105|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8817|      0|                }
  |  | 8818|    180|            }
  |  | 8819|       |            // _LOAD_ATTR_CLASS
  |  | 8820|     75|            {
  |  | 8821|     75|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 8822|     75|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|     75|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 8823|     75|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (8823:17): [True: 75, False: 0]
  |  |  ------------------
  |  | 8824|     75|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|     75|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     75|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     75|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8825|     75|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8826|     75|                _PyFrame_StackPointerValidate(frame);
  |  | 8827|     75|                _PyStackRef tmp = owner;
  |  | 8828|     75|                owner = attr;
  |  | 8829|     75|                stack_pointer[-1] = owner;
  |  | 8830|     75|                PyStackRef_CLOSE(tmp);
  |  | 8831|     75|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8832|     75|            }
  |  | 8833|       |            // _PUSH_NULL_CONDITIONAL
  |  | 8834|      0|            {
  |  | 8835|     75|                null = &stack_pointer[0];
  |  | 8836|     75|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (8836:21): [True: 8, False: 67]
  |  |  ------------------
  |  | 8837|      8|                    null[0] = PyStackRef_NULL;
  |  | 8838|      8|                }
  |  | 8839|     75|            }
  |  | 8840|     75|            stack_pointer += (oparg & 1);
  |  | 8841|     75|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     75|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8842|     75|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     75|    { \
  |  |  |  |  201|     75|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     75|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     75|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     75|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     75|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     75|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     75|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     75|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 75]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     75|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     75|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     75|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     75|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     75|    }
  |  |  ------------------
  |  | 8843|     75|        }
  |  | 8844|       |
  |  | 8845|      0|        TARGET(LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8846|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8847|       |            int opcode = LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN;
  |  | 8848|       |            (void)(opcode);
  |  | 8849|       |            #endif
  |  | 8850|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8851|      0|            (void)this_instr;
  |  | 8852|      0|            frame->instr_ptr = next_instr;
  |  | 8853|      0|            next_instr += 10;
  |  | 8854|      0|            INSTRUCTION_STATS(LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8855|      0|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 8856|      0|            _PyStackRef owner;
  |  | 8857|      0|            _PyStackRef new_frame;
  |  | 8858|       |            /* Skip 1 cache entry */
  |  | 8859|       |            // _GUARD_TYPE_VERSION
  |  | 8860|      0|            {
  |  | 8861|      0|                owner = stack_pointer[-1];
  |  | 8862|      0|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 8863|      0|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8864|      0|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (8864:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8865|      0|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|      0|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (8865:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8866|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8867|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8867:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8868|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8869|      0|                }
  |  | 8870|      0|            }
  |  | 8871|       |            // _CHECK_PEP_523
  |  | 8872|      0|            {
  |  | 8873|      0|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|      0|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8874|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8875|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8875:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8876|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8877|      0|                }
  |  | 8878|      0|            }
  |  | 8879|       |            // _LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN_FRAME
  |  | 8880|      0|            {
  |  | 8881|      0|                uint32_t func_version = read_u32(&this_instr[4].cache);
  |  | 8882|      0|                PyObject *getattribute = read_obj(&this_instr[6].cache);
  |  | 8883|      0|                assert((oparg & 1) == 0);
  |  |  ------------------
  |  |  |  Branch (8883:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8884|      0|                assert(Py_IS_TYPE(getattribute, &PyFunction_Type));
  |  |  ------------------
  |  |  |  Branch (8884:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8885|      0|                PyFunctionObject *f = (PyFunctionObject *)getattribute;
  |  | 8886|      0|                assert(func_version != 0);
  |  |  ------------------
  |  |  |  Branch (8886:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8887|      0|                if (f->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (8887:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8888|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8889|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8889:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8890|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8891|      0|                }
  |  | 8892|      0|                PyCodeObject *code = (PyCodeObject *)f->func_code;
  |  | 8893|      0|                assert(code->co_argcount == 2);
  |  |  ------------------
  |  |  |  Branch (8893:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8894|      0|                if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) {
  |  |  ------------------
  |  |  |  Branch (8894:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8895|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8896|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8896:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8897|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8898|      0|                }
  |  | 8899|      0|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 8900|      0|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 1);
  |  |  ------------------
  |  |  |  |  236|      0|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (8900:34): [True: 0, False: 0]
  |  |  ------------------
  |  | 8901|      0|                _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(
  |  | 8902|      0|                    tstate, PyStackRef_FromPyObjectNew(f), 2, frame);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8903|      0|                pushed_frame->localsplus[0] = owner;
  |  | 8904|      0|                pushed_frame->localsplus[1] = PyStackRef_FromPyObjectNew(name);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8905|      0|                new_frame = PyStackRef_Wrap(pushed_frame);
  |  | 8906|      0|            }
  |  | 8907|       |            // _SAVE_RETURN_OFFSET
  |  | 8908|      0|            {
  |  | 8909|      0|                #if TIER_ONE
  |  | 8910|      0|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 8911|      0|                #endif
  |  | 8912|       |                #if TIER_TWO
  |  | 8913|       |                frame->return_offset = oparg;
  |  | 8914|       |                #endif
  |  | 8915|      0|            }
  |  | 8916|       |            // _PUSH_FRAME
  |  | 8917|      0|            {
  |  | 8918|      0|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (8918:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8919|      0|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 8920|      0|                stack_pointer += -1;
  |  | 8921|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 8922|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 8923|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 8924|      0|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (8924:17): [True: 0, False: 0]
  |  |  |  Branch (8924:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 8925|      0|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 8926|      0|                frame = tstate->current_frame = temp;
  |  | 8927|      0|                tstate->py_recursion_remaining--;
  |  | 8928|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 8929|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 8930|      0|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|      0|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|      0|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8931|       |                #ifdef Py_DEBUG
  |  | 8932|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 8933|       |                #endif
  |  | 8934|      0|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|      0|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 8935|      0|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|      0|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 8936|      0|            }
  |  | 8937|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 8938|      0|        }
  |  | 8939|       |
  |  | 8940|   506k|        TARGET(LOAD_ATTR_INSTANCE_VALUE) {
  |  |  ------------------
  |  |  |  |  132|   506k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 8941|       |            #if _Py_TAIL_CALL_INTERP
  |  | 8942|       |            int opcode = LOAD_ATTR_INSTANCE_VALUE;
  |  | 8943|       |            (void)(opcode);
  |  | 8944|       |            #endif
  |  | 8945|   506k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 8946|   506k|            (void)this_instr;
  |  | 8947|   506k|            frame->instr_ptr = next_instr;
  |  | 8948|   506k|            next_instr += 10;
  |  | 8949|   506k|            INSTRUCTION_STATS(LOAD_ATTR_INSTANCE_VALUE);
  |  |  ------------------
  |  |  |  |   71|   506k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 8950|   506k|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 8951|   506k|            _PyStackRef owner;
  |  | 8952|   506k|            _PyStackRef attr;
  |  | 8953|   506k|            _PyStackRef o;
  |  | 8954|   506k|            _PyStackRef value;
  |  | 8955|   506k|            _PyStackRef *null;
  |  | 8956|       |            /* Skip 1 cache entry */
  |  | 8957|       |            // _GUARD_TYPE_VERSION
  |  | 8958|   506k|            {
  |  | 8959|   506k|                owner = stack_pointer[-1];
  |  | 8960|   506k|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 8961|   506k|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|   506k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   506k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   506k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8962|   506k|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (8962:17): [True: 506k, False: 0]
  |  |  ------------------
  |  | 8963|   506k|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|   506k|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (8963:21): [True: 502, False: 505k]
  |  |  ------------------
  |  | 8964|    502|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|    502|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8965|    502|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8965:21): [True: 502, False: 0]
  |  |  ------------------
  |  | 8966|    502|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|    502|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8967|      0|                }
  |  | 8968|   506k|            }
  |  | 8969|       |            // _CHECK_MANAGED_OBJECT_HAS_VALUES
  |  | 8970|   505k|            {
  |  | 8971|   505k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 8972|   505k|                assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
  |  |  ------------------
  |  |  |  Branch (8972:17): [True: 505k, False: 0]
  |  |  ------------------
  |  | 8973|   505k|                assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  |  |  ------------------
  |  |  |  Branch (8973:17): [True: 505k, False: 0]
  |  |  ------------------
  |  | 8974|   505k|                if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) {
  |  |  ------------------
  |  |  |  |  154|   505k|#define FT_ATOMIC_LOAD_UINT8(value) value
  |  |  ------------------
  |  |  |  Branch (8974:21): [True: 0, False: 505k]
  |  |  ------------------
  |  | 8975|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8976|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8976:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8977|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8978|      0|                }
  |  | 8979|   505k|            }
  |  | 8980|       |            // _LOAD_ATTR_INSTANCE_VALUE
  |  | 8981|   505k|            {
  |  | 8982|   505k|                uint16_t offset = read_u16(&this_instr[4].cache);
  |  | 8983|   505k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 8984|   505k|                PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
  |  | 8985|   505k|                PyObject *attr_o = FT_ATOMIC_LOAD_PTR_ACQUIRE(*value_ptr);
  |  |  ------------------
  |  |  |  |  150|   505k|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  | 8986|   505k|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (8986:21): [True: 0, False: 505k]
  |  |  ------------------
  |  | 8987|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 8988|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (8988:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 8989|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 8990|      0|                }
  |  | 8991|       |                #ifdef Py_GIL_DISABLED
  |  | 8992|       |                int increfed = _Py_TryIncrefCompareStackRef(value_ptr, attr_o, &attr);
  |  | 8993|       |                if (!increfed) {
  |  | 8994|       |                    if (true) {
  |  | 8995|       |                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  | 8996|       |                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  | 8997|       |                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  | 8998|       |                    }
  |  | 8999|       |                }
  |  | 9000|       |                #else
  |  | 9001|   505k|                attr = PyStackRef_FromPyObjectNew(attr_o);
  |  |  ------------------
  |  |  |  |  611|   505k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   505k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   505k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9002|   505k|                #endif
  |  | 9003|   505k|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|   505k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9004|   505k|                o = owner;
  |  | 9005|   505k|            }
  |  | 9006|       |            // _POP_TOP
  |  | 9007|      0|            {
  |  | 9008|   505k|                value = o;
  |  | 9009|   505k|                stack_pointer[-1] = attr;
  |  | 9010|   505k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9011|   505k|                _PyFrame_StackPointerValidate(frame);
  |  | 9012|   505k|                PyStackRef_XCLOSE(value);
  |  | 9013|   505k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9014|   505k|            }
  |  | 9015|       |            /* Skip 5 cache entries */
  |  | 9016|       |            // _PUSH_NULL_CONDITIONAL
  |  | 9017|   505k|            {
  |  | 9018|   505k|                null = &stack_pointer[0];
  |  | 9019|   505k|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (9019:21): [True: 377, False: 505k]
  |  |  ------------------
  |  | 9020|    377|                    null[0] = PyStackRef_NULL;
  |  | 9021|    377|                }
  |  | 9022|   505k|            }
  |  | 9023|   505k|            stack_pointer += (oparg & 1);
  |  | 9024|   505k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   505k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9025|   505k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   505k|    { \
  |  |  |  |  201|   505k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   505k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   505k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   505k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   505k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   505k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   505k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   505k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 505k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   505k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   505k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   505k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   505k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   505k|    }
  |  |  ------------------
  |  | 9026|   505k|        }
  |  | 9027|       |
  |  | 9028|     91|        TARGET(LOAD_ATTR_METHOD_LAZY_DICT) {
  |  |  ------------------
  |  |  |  |  132|     91|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9029|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9030|       |            int opcode = LOAD_ATTR_METHOD_LAZY_DICT;
  |  | 9031|       |            (void)(opcode);
  |  | 9032|       |            #endif
  |  | 9033|     91|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9034|     91|            (void)this_instr;
  |  | 9035|     91|            frame->instr_ptr = next_instr;
  |  | 9036|     91|            next_instr += 10;
  |  | 9037|     91|            INSTRUCTION_STATS(LOAD_ATTR_METHOD_LAZY_DICT);
  |  |  ------------------
  |  |  |  |   71|     91|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9038|     91|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9039|     91|            _PyStackRef owner;
  |  | 9040|     91|            _PyStackRef attr;
  |  | 9041|     91|            _PyStackRef self;
  |  | 9042|       |            /* Skip 1 cache entry */
  |  | 9043|       |            // _GUARD_TYPE_VERSION
  |  | 9044|     91|            {
  |  | 9045|     91|                owner = stack_pointer[-1];
  |  | 9046|     91|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9047|     91|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|     91|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     91|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     91|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9048|     91|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9048:17): [True: 91, False: 0]
  |  |  ------------------
  |  | 9049|     91|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|     91|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9049:21): [True: 0, False: 91]
  |  |  ------------------
  |  | 9050|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9051|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9051:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9052|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9053|      0|                }
  |  | 9054|     91|            }
  |  | 9055|       |            // _CHECK_ATTR_METHOD_LAZY_DICT
  |  | 9056|     91|            {
  |  | 9057|     91|                uint16_t dictoffset = read_u16(&this_instr[4].cache);
  |  | 9058|     91|                char *ptr = ((char *)PyStackRef_AsPyObjectBorrow(owner)) + MANAGED_DICT_OFFSET + dictoffset;
  |  |  ------------------
  |  |  |  |  923|     91|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  |  |  ------------------
  |  | 9059|     91|                PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*(PyObject **)ptr);
  |  |  ------------------
  |  |  |  |  150|     91|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  | 9060|     91|                if (dict != NULL) {
  |  |  ------------------
  |  |  |  Branch (9060:21): [True: 0, False: 91]
  |  |  ------------------
  |  | 9061|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9062|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9062:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9063|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9064|      0|                }
  |  | 9065|     91|            }
  |  | 9066|       |            /* Skip 1 cache entry */
  |  | 9067|       |            // _LOAD_ATTR_METHOD_LAZY_DICT
  |  | 9068|     91|            {
  |  | 9069|     91|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 9070|     91|                assert(oparg & 1);
  |  |  ------------------
  |  |  |  Branch (9070:17): [True: 91, False: 0]
  |  |  ------------------
  |  | 9071|     91|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|     91|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9072|     91|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (9072:17): [True: 91, False: 0]
  |  |  ------------------
  |  | 9073|     91|                assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR));
  |  |  ------------------
  |  |  |  Branch (9073:17): [True: 91, False: 0]
  |  |  ------------------
  |  | 9074|     91|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|     91|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     91|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     91|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9075|     91|                self = owner;
  |  | 9076|     91|            }
  |  | 9077|      0|            stack_pointer[-1] = attr;
  |  | 9078|     91|            stack_pointer[0] = self;
  |  | 9079|     91|            stack_pointer += 1;
  |  | 9080|     91|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     91|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9081|     91|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     91|    { \
  |  |  |  |  201|     91|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     91|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     91|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     91|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     91|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     91|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     91|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     91|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 91]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     91|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     91|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     91|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     91|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     91|    }
  |  |  ------------------
  |  | 9082|     91|        }
  |  | 9083|       |
  |  | 9084|  3.66M|        TARGET(LOAD_ATTR_METHOD_NO_DICT) {
  |  |  ------------------
  |  |  |  |  132|  3.66M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9085|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9086|       |            int opcode = LOAD_ATTR_METHOD_NO_DICT;
  |  | 9087|       |            (void)(opcode);
  |  | 9088|       |            #endif
  |  | 9089|  3.66M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9090|  3.66M|            (void)this_instr;
  |  | 9091|  3.66M|            frame->instr_ptr = next_instr;
  |  | 9092|  3.66M|            next_instr += 10;
  |  | 9093|  3.66M|            INSTRUCTION_STATS(LOAD_ATTR_METHOD_NO_DICT);
  |  |  ------------------
  |  |  |  |   71|  3.66M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9094|  3.66M|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9095|  3.66M|            _PyStackRef owner;
  |  | 9096|  3.66M|            _PyStackRef attr;
  |  | 9097|  3.66M|            _PyStackRef self;
  |  | 9098|       |            /* Skip 1 cache entry */
  |  | 9099|       |            // _GUARD_TYPE_VERSION
  |  | 9100|  3.66M|            {
  |  | 9101|  3.66M|                owner = stack_pointer[-1];
  |  | 9102|  3.66M|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9103|  3.66M|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|  3.66M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.66M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.66M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9104|  3.66M|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9104:17): [True: 3.66M, False: 0]
  |  |  ------------------
  |  | 9105|  3.66M|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|  3.66M|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9105:21): [True: 0, False: 3.66M]
  |  |  ------------------
  |  | 9106|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9107|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9107:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9108|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9109|      0|                }
  |  | 9110|  3.66M|            }
  |  | 9111|       |            /* Skip 2 cache entries */
  |  | 9112|       |            // _LOAD_ATTR_METHOD_NO_DICT
  |  | 9113|  3.66M|            {
  |  | 9114|  3.66M|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 9115|  3.66M|                assert(oparg & 1);
  |  |  ------------------
  |  |  |  Branch (9115:17): [True: 3.66M, False: 0]
  |  |  ------------------
  |  | 9116|  3.66M|                assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0);
  |  |  ------------------
  |  |  |  Branch (9116:17): [True: 3.66M, False: 0]
  |  |  ------------------
  |  | 9117|  3.66M|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|  3.66M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9118|  3.66M|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (9118:17): [True: 3.66M, False: 0]
  |  |  ------------------
  |  | 9119|  3.66M|                assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR));
  |  |  ------------------
  |  |  |  Branch (9119:17): [True: 3.66M, False: 0]
  |  |  ------------------
  |  | 9120|  3.66M|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|  3.66M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.66M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.66M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9121|  3.66M|                self = owner;
  |  | 9122|  3.66M|            }
  |  | 9123|      0|            stack_pointer[-1] = attr;
  |  | 9124|  3.66M|            stack_pointer[0] = self;
  |  | 9125|  3.66M|            stack_pointer += 1;
  |  | 9126|  3.66M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.66M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9127|  3.66M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.66M|    { \
  |  |  |  |  201|  3.66M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.66M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.66M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.66M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.66M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.66M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.66M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.66M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.66M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.66M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.66M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.66M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.66M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.66M|    }
  |  |  ------------------
  |  | 9128|  3.66M|        }
  |  | 9129|       |
  |  | 9130|  3.43k|        TARGET(LOAD_ATTR_METHOD_WITH_VALUES) {
  |  |  ------------------
  |  |  |  |  132|  3.43k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9131|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9132|       |            int opcode = LOAD_ATTR_METHOD_WITH_VALUES;
  |  | 9133|       |            (void)(opcode);
  |  | 9134|       |            #endif
  |  | 9135|  3.43k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9136|  3.43k|            (void)this_instr;
  |  | 9137|  3.43k|            frame->instr_ptr = next_instr;
  |  | 9138|  3.43k|            next_instr += 10;
  |  | 9139|  3.43k|            INSTRUCTION_STATS(LOAD_ATTR_METHOD_WITH_VALUES);
  |  |  ------------------
  |  |  |  |   71|  3.43k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9140|  3.43k|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9141|  3.43k|            _PyStackRef owner;
  |  | 9142|  3.43k|            _PyStackRef attr;
  |  | 9143|  3.43k|            _PyStackRef self;
  |  | 9144|       |            /* Skip 1 cache entry */
  |  | 9145|       |            // _GUARD_TYPE_VERSION
  |  | 9146|  3.43k|            {
  |  | 9147|  3.43k|                owner = stack_pointer[-1];
  |  | 9148|  3.43k|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9149|  3.43k|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|  3.43k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9150|  3.43k|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9150:17): [True: 3.43k, False: 0]
  |  |  ------------------
  |  | 9151|  3.43k|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|  3.43k|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9151:21): [True: 33, False: 3.39k]
  |  |  ------------------
  |  | 9152|     33|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|     33|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9153|     33|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9153:21): [True: 33, False: 0]
  |  |  ------------------
  |  | 9154|     33|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|     33|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9155|      0|                }
  |  | 9156|  3.43k|            }
  |  | 9157|       |            // _CHECK_MANAGED_OBJECT_HAS_VALUES
  |  | 9158|  3.39k|            {
  |  | 9159|  3.39k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 9160|  3.39k|                assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
  |  |  ------------------
  |  |  |  Branch (9160:17): [True: 3.39k, False: 0]
  |  |  ------------------
  |  | 9161|  3.39k|                assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  |  |  ------------------
  |  |  |  Branch (9161:17): [True: 3.39k, False: 0]
  |  |  ------------------
  |  | 9162|  3.39k|                if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) {
  |  |  ------------------
  |  |  |  |  154|  3.39k|#define FT_ATOMIC_LOAD_UINT8(value) value
  |  |  ------------------
  |  |  |  Branch (9162:21): [True: 0, False: 3.39k]
  |  |  ------------------
  |  | 9163|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9164|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9164:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9165|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9166|      0|                }
  |  | 9167|  3.39k|            }
  |  | 9168|       |            /* Skip 2 cache entries */
  |  | 9169|       |            // _LOAD_ATTR_METHOD_WITH_VALUES
  |  | 9170|  3.39k|            {
  |  | 9171|  3.39k|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 9172|  3.39k|                assert(oparg & 1);
  |  |  ------------------
  |  |  |  Branch (9172:17): [True: 3.39k, False: 0]
  |  |  ------------------
  |  | 9173|  3.39k|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|  3.39k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9174|  3.39k|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (9174:17): [True: 3.39k, False: 0]
  |  |  ------------------
  |  | 9175|  3.39k|                assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR));
  |  |  ------------------
  |  |  |  Branch (9175:17): [True: 3.39k, False: 0]
  |  |  ------------------
  |  | 9176|  3.39k|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|  3.39k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.39k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.39k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9177|  3.39k|                self = owner;
  |  | 9178|  3.39k|            }
  |  | 9179|      0|            stack_pointer[-1] = attr;
  |  | 9180|  3.39k|            stack_pointer[0] = self;
  |  | 9181|  3.39k|            stack_pointer += 1;
  |  | 9182|  3.39k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.39k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9183|  3.39k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.39k|    { \
  |  |  |  |  201|  3.39k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.39k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.39k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.39k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.39k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.39k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.39k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.39k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.39k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.39k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.39k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.39k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.39k|    }
  |  |  ------------------
  |  | 9184|  3.39k|        }
  |  | 9185|       |
  |  | 9186|  3.76M|        TARGET(LOAD_ATTR_MODULE) {
  |  |  ------------------
  |  |  |  |  132|  3.76M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9187|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9188|       |            int opcode = LOAD_ATTR_MODULE;
  |  | 9189|       |            (void)(opcode);
  |  | 9190|       |            #endif
  |  | 9191|  3.76M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9192|  3.76M|            (void)this_instr;
  |  | 9193|  3.76M|            frame->instr_ptr = next_instr;
  |  | 9194|  3.76M|            next_instr += 10;
  |  | 9195|  3.76M|            INSTRUCTION_STATS(LOAD_ATTR_MODULE);
  |  |  ------------------
  |  |  |  |   71|  3.76M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9196|  3.76M|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9197|  3.76M|            _PyStackRef owner;
  |  | 9198|  3.76M|            _PyStackRef attr;
  |  | 9199|  3.76M|            _PyStackRef o;
  |  | 9200|  3.76M|            _PyStackRef value;
  |  | 9201|  3.76M|            _PyStackRef *null;
  |  | 9202|       |            /* Skip 1 cache entry */
  |  | 9203|       |            // _LOAD_ATTR_MODULE
  |  | 9204|  3.76M|            {
  |  | 9205|  3.76M|                owner = stack_pointer[-1];
  |  | 9206|  3.76M|                uint32_t dict_version = read_u32(&this_instr[2].cache);
  |  | 9207|  3.76M|                uint16_t index = read_u16(&this_instr[4].cache);
  |  | 9208|  3.76M|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 9209|  3.76M|                if (Py_TYPE(owner_o)->tp_getattro != PyModule_Type.tp_getattro) {
  |  |  ------------------
  |  |  |  |  213|  3.76M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.76M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.76M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (9209:21): [True: 236, False: 3.76M]
  |  |  ------------------
  |  | 9210|    236|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|    236|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9211|    236|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9211:21): [True: 236, False: 0]
  |  |  ------------------
  |  | 9212|    236|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|    236|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9213|      0|                }
  |  | 9214|  3.76M|                PyDictObject *dict = (PyDictObject *)((PyModuleObject *)owner_o)->md_dict;
  |  | 9215|  3.76M|                assert(dict != NULL);
  |  |  ------------------
  |  |  |  Branch (9215:17): [True: 3.76M, False: 0]
  |  |  ------------------
  |  | 9216|  3.76M|                PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
  |  |  ------------------
  |  |  |  |  150|  3.76M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  | 9217|  3.76M|                if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != dict_version) {
  |  |  ------------------
  |  |  |  |  159|  3.76M|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9217:21): [True: 2.09k, False: 3.75M]
  |  |  ------------------
  |  | 9218|  2.09k|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|  2.09k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9219|  2.09k|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9219:21): [True: 2.09k, False: 0]
  |  |  ------------------
  |  | 9220|  2.09k|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|  2.09k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9221|      0|                }
  |  | 9222|  3.76M|                assert(keys->dk_kind == DICT_KEYS_UNICODE);
  |  |  ------------------
  |  |  |  Branch (9222:17): [True: 3.75M, False: 0]
  |  |  ------------------
  |  | 9223|  3.75M|                assert(index < FT_ATOMIC_LOAD_SSIZE_RELAXED(keys->dk_nentries));
  |  |  ------------------
  |  |  |  Branch (9223:17): [True: 3.75M, False: 0]
  |  |  ------------------
  |  | 9224|  3.75M|                PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(keys) + index;
  |  | 9225|  3.75M|                PyObject *attr_o = FT_ATOMIC_LOAD_PTR_CONSUME(ep->me_value);
  |  |  ------------------
  |  |  |  |  151|  3.75M|#define FT_ATOMIC_LOAD_PTR_CONSUME(value) value
  |  |  ------------------
  |  | 9226|  3.75M|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9226:21): [True: 0, False: 3.75M]
  |  |  ------------------
  |  | 9227|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9228|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9228:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9229|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9230|      0|                }
  |  | 9231|       |                #ifdef Py_GIL_DISABLED
  |  | 9232|       |                int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr);
  |  | 9233|       |                if (!increfed) {
  |  | 9234|       |                    if (true) {
  |  | 9235|       |                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  | 9236|       |                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  | 9237|       |                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  | 9238|       |                    }
  |  | 9239|       |                }
  |  | 9240|       |                #else
  |  | 9241|  3.75M|                attr = PyStackRef_FromPyObjectNew(attr_o);
  |  |  ------------------
  |  |  |  |  611|  3.75M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  3.75M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  3.75M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9242|  3.75M|                #endif
  |  | 9243|  3.75M|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|  3.75M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9244|  3.75M|                o = owner;
  |  | 9245|  3.75M|            }
  |  | 9246|       |            // _POP_TOP
  |  | 9247|      0|            {
  |  | 9248|  3.75M|                value = o;
  |  | 9249|  3.75M|                stack_pointer[-1] = attr;
  |  | 9250|  3.75M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9251|  3.75M|                _PyFrame_StackPointerValidate(frame);
  |  | 9252|  3.75M|                PyStackRef_XCLOSE(value);
  |  | 9253|  3.75M|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9254|  3.75M|            }
  |  | 9255|       |            /* Skip 5 cache entries */
  |  | 9256|       |            // _PUSH_NULL_CONDITIONAL
  |  | 9257|  3.75M|            {
  |  | 9258|  3.75M|                null = &stack_pointer[0];
  |  | 9259|  3.75M|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (9259:21): [True: 251k, False: 3.50M]
  |  |  ------------------
  |  | 9260|   251k|                    null[0] = PyStackRef_NULL;
  |  | 9261|   251k|                }
  |  | 9262|  3.75M|            }
  |  | 9263|  3.75M|            stack_pointer += (oparg & 1);
  |  | 9264|  3.75M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.75M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9265|  3.75M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.75M|    { \
  |  |  |  |  201|  3.75M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.75M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.75M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.75M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.75M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.75M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.75M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.75M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.75M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.75M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.75M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.75M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.75M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.75M|    }
  |  |  ------------------
  |  | 9266|  3.75M|        }
  |  | 9267|       |
  |  | 9268|     15|        TARGET(LOAD_ATTR_NONDESCRIPTOR_NO_DICT) {
  |  |  ------------------
  |  |  |  |  132|     15|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9269|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9270|       |            int opcode = LOAD_ATTR_NONDESCRIPTOR_NO_DICT;
  |  | 9271|       |            (void)(opcode);
  |  | 9272|       |            #endif
  |  | 9273|     15|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9274|     15|            (void)this_instr;
  |  | 9275|     15|            frame->instr_ptr = next_instr;
  |  | 9276|     15|            next_instr += 10;
  |  | 9277|     15|            INSTRUCTION_STATS(LOAD_ATTR_NONDESCRIPTOR_NO_DICT);
  |  |  ------------------
  |  |  |  |   71|     15|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9278|     15|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9279|     15|            _PyStackRef owner;
  |  | 9280|     15|            _PyStackRef attr;
  |  | 9281|       |            /* Skip 1 cache entry */
  |  | 9282|       |            // _GUARD_TYPE_VERSION
  |  | 9283|     15|            {
  |  | 9284|     15|                owner = stack_pointer[-1];
  |  | 9285|     15|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9286|     15|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|     15|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9287|     15|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9287:17): [True: 15, False: 0]
  |  |  ------------------
  |  | 9288|     15|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|     15|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9288:21): [True: 0, False: 15]
  |  |  ------------------
  |  | 9289|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9290|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9290:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9291|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9292|      0|                }
  |  | 9293|     15|            }
  |  | 9294|       |            /* Skip 2 cache entries */
  |  | 9295|       |            // _LOAD_ATTR_NONDESCRIPTOR_NO_DICT
  |  | 9296|     15|            {
  |  | 9297|     15|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 9298|     15|                assert((oparg & 1) == 0);
  |  |  ------------------
  |  |  |  Branch (9298:17): [True: 15, False: 0]
  |  |  ------------------
  |  | 9299|     15|                assert(Py_TYPE(PyStackRef_AsPyObjectBorrow(owner))->tp_dictoffset == 0);
  |  |  ------------------
  |  |  |  Branch (9299:17): [True: 15, False: 0]
  |  |  ------------------
  |  | 9300|     15|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|     15|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9301|     15|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (9301:17): [True: 15, False: 0]
  |  |  ------------------
  |  | 9302|     15|                stack_pointer += -1;
  |  | 9303|     15|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9304|     15|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9305|     15|                _PyFrame_StackPointerValidate(frame);
  |  | 9306|     15|                PyStackRef_CLOSE(owner);
  |  | 9307|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9308|     15|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|     15|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9309|     15|            }
  |  | 9310|      0|            stack_pointer[0] = attr;
  |  | 9311|     15|            stack_pointer += 1;
  |  | 9312|     15|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9313|     15|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     15|    { \
  |  |  |  |  201|     15|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     15|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     15|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     15|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     15|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     15|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     15|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     15|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     15|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     15|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     15|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     15|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     15|    }
  |  |  ------------------
  |  | 9314|     15|        }
  |  | 9315|       |
  |  | 9316|     40|        TARGET(LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES) {
  |  |  ------------------
  |  |  |  |  132|     40|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9317|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9318|       |            int opcode = LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES;
  |  | 9319|       |            (void)(opcode);
  |  | 9320|       |            #endif
  |  | 9321|     40|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9322|     40|            (void)this_instr;
  |  | 9323|     40|            frame->instr_ptr = next_instr;
  |  | 9324|     40|            next_instr += 10;
  |  | 9325|     40|            INSTRUCTION_STATS(LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES);
  |  |  ------------------
  |  |  |  |   71|     40|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9326|     40|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9327|     40|            _PyStackRef owner;
  |  | 9328|     40|            _PyStackRef attr;
  |  | 9329|       |            /* Skip 1 cache entry */
  |  | 9330|       |            // _GUARD_TYPE_VERSION
  |  | 9331|     40|            {
  |  | 9332|     40|                owner = stack_pointer[-1];
  |  | 9333|     40|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9334|     40|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|     40|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9335|     40|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9335:17): [True: 40, False: 0]
  |  |  ------------------
  |  | 9336|     40|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|     40|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9336:21): [True: 0, False: 40]
  |  |  ------------------
  |  | 9337|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9338|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9338:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9339|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9340|      0|                }
  |  | 9341|     40|            }
  |  | 9342|       |            // _CHECK_MANAGED_OBJECT_HAS_VALUES
  |  | 9343|     40|            {
  |  | 9344|     40|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 9345|     40|                assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
  |  |  ------------------
  |  |  |  Branch (9345:17): [True: 40, False: 0]
  |  |  ------------------
  |  | 9346|     40|                assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  |  |  ------------------
  |  |  |  Branch (9346:17): [True: 40, False: 0]
  |  |  ------------------
  |  | 9347|     40|                if (!FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) {
  |  |  ------------------
  |  |  |  |  154|     40|#define FT_ATOMIC_LOAD_UINT8(value) value
  |  |  ------------------
  |  |  |  Branch (9347:21): [True: 0, False: 40]
  |  |  ------------------
  |  | 9348|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9349|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9349:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9350|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9351|      0|                }
  |  | 9352|     40|            }
  |  | 9353|       |            /* Skip 2 cache entries */
  |  | 9354|       |            // _LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES
  |  | 9355|     40|            {
  |  | 9356|     40|                PyObject *descr = read_obj(&this_instr[6].cache);
  |  | 9357|     40|                assert((oparg & 1) == 0);
  |  |  ------------------
  |  |  |  Branch (9357:17): [True: 40, False: 0]
  |  |  ------------------
  |  | 9358|     40|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|     40|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9359|     40|                assert(descr != NULL);
  |  |  ------------------
  |  |  |  Branch (9359:17): [True: 40, False: 0]
  |  |  ------------------
  |  | 9360|     40|                stack_pointer += -1;
  |  | 9361|     40|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     40|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9362|     40|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9363|     40|                _PyFrame_StackPointerValidate(frame);
  |  | 9364|     40|                PyStackRef_CLOSE(owner);
  |  | 9365|     40|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9366|     40|                attr = PyStackRef_FromPyObjectNew(descr);
  |  |  ------------------
  |  |  |  |  611|     40|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     40|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     40|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9367|     40|            }
  |  | 9368|      0|            stack_pointer[0] = attr;
  |  | 9369|     40|            stack_pointer += 1;
  |  | 9370|     40|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     40|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9371|     40|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     40|    { \
  |  |  |  |  201|     40|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     40|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     40|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     40|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     40|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     40|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     40|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     40|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     40|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     40|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     40|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     40|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     40|    }
  |  |  ------------------
  |  | 9372|     40|        }
  |  | 9373|       |
  |  | 9374|    394|        TARGET(LOAD_ATTR_PROPERTY) {
  |  |  ------------------
  |  |  |  |  132|    394|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9375|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9376|       |            int opcode = LOAD_ATTR_PROPERTY;
  |  | 9377|       |            (void)(opcode);
  |  | 9378|       |            #endif
  |  | 9379|    394|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9380|    394|            (void)this_instr;
  |  | 9381|    394|            frame->instr_ptr = next_instr;
  |  | 9382|    394|            next_instr += 10;
  |  | 9383|    394|            INSTRUCTION_STATS(LOAD_ATTR_PROPERTY);
  |  |  ------------------
  |  |  |  |   71|    394|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9384|    394|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9385|    394|            _PyStackRef owner;
  |  | 9386|    394|            _PyStackRef new_frame;
  |  | 9387|       |            /* Skip 1 cache entry */
  |  | 9388|       |            // _GUARD_TYPE_VERSION
  |  | 9389|    394|            {
  |  | 9390|    394|                owner = stack_pointer[-1];
  |  | 9391|    394|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9392|    394|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|    394|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    394|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    394|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9393|    394|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9393:17): [True: 394, False: 0]
  |  |  ------------------
  |  | 9394|    394|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|    394|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9394:21): [True: 156, False: 238]
  |  |  ------------------
  |  | 9395|    156|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|    156|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9396|    156|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9396:21): [True: 156, False: 0]
  |  |  ------------------
  |  | 9397|    156|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|    156|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9398|      0|                }
  |  | 9399|    394|            }
  |  | 9400|       |            // _CHECK_PEP_523
  |  | 9401|    238|            {
  |  | 9402|    238|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|    238|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 238]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9403|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9404|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9404:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9405|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9406|      0|                }
  |  | 9407|    238|            }
  |  | 9408|       |            // _LOAD_ATTR_PROPERTY_FRAME
  |  | 9409|    238|            {
  |  | 9410|    238|                uint32_t func_version = read_u32(&this_instr[4].cache);
  |  | 9411|    238|                PyObject *fget = read_obj(&this_instr[6].cache);
  |  | 9412|    238|                assert((oparg & 1) == 0);
  |  |  ------------------
  |  |  |  Branch (9412:17): [True: 238, False: 0]
  |  |  ------------------
  |  | 9413|    238|                assert(Py_IS_TYPE(fget, &PyFunction_Type));
  |  |  ------------------
  |  |  |  Branch (9413:17): [True: 238, False: 0]
  |  |  ------------------
  |  | 9414|    238|                PyFunctionObject *f = (PyFunctionObject *)fget;
  |  | 9415|    238|                if (f->func_version != func_version) {
  |  |  ------------------
  |  |  |  Branch (9415:21): [True: 0, False: 238]
  |  |  ------------------
  |  | 9416|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9417|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9417:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9418|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9419|      0|                }
  |  | 9420|    238|                PyCodeObject *code = (PyCodeObject *)f->func_code;
  |  | 9421|    238|                if (!_PyThreadState_HasStackSpace(tstate, code->co_framesize)) {
  |  |  ------------------
  |  |  |  Branch (9421:21): [True: 0, False: 238]
  |  |  ------------------
  |  | 9422|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9423|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9423:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9424|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9425|      0|                }
  |  | 9426|    238|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|    238|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9427|    238|                _PyInterpreterFrame *pushed_frame = _PyFrame_PushUnchecked(tstate, PyStackRef_FromPyObjectNew(fget), 1, frame);
  |  |  ------------------
  |  |  |  |  611|    238|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    238|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    238|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9428|    238|                pushed_frame->localsplus[0] = owner;
  |  | 9429|    238|                new_frame = PyStackRef_Wrap(pushed_frame);
  |  | 9430|    238|            }
  |  | 9431|       |            // _SAVE_RETURN_OFFSET
  |  | 9432|      0|            {
  |  | 9433|    238|                #if TIER_ONE
  |  | 9434|    238|                frame->return_offset = (uint16_t)(next_instr - this_instr);
  |  | 9435|    238|                #endif
  |  | 9436|       |                #if TIER_TWO
  |  | 9437|       |                frame->return_offset = oparg;
  |  | 9438|       |                #endif
  |  | 9439|    238|            }
  |  | 9440|       |            // _PUSH_FRAME
  |  | 9441|    238|            {
  |  | 9442|    238|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (9442:17): [True: 238, False: 0]
  |  |  ------------------
  |  | 9443|    238|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  | 9444|    238|                stack_pointer += -1;
  |  | 9445|    238|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    238|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9446|    238|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9447|    238|                _PyFrame_StackPointerValidate(frame);
  |  | 9448|    238|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (9448:17): [True: 238, False: 0]
  |  |  |  Branch (9448:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9449|    238|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|    238|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  | 9450|    238|                frame = tstate->current_frame = temp;
  |  | 9451|    238|                tstate->py_recursion_remaining--;
  |  | 9452|    238|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  | 9453|    238|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9454|    238|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|    238|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|    238|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|    238|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 238]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9455|       |                #ifdef Py_DEBUG
  |  | 9456|       |                assert(frame->previous->stackpointer_valid == 1);
  |  | 9457|       |                #endif
  |  | 9458|    238|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|    238|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  | 9459|    238|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|    238|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  | 9460|    238|            }
  |  | 9461|    238|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    238|    { \
  |  |  |  |  201|    238|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    238|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    238|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    238|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    238|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    238|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    238|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    238|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 238]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    238|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    238|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    238|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    238|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    238|    }
  |  |  ------------------
  |  | 9462|    238|        }
  |  | 9463|       |
  |  | 9464|  5.12k|        TARGET(LOAD_ATTR_SLOT) {
  |  |  ------------------
  |  |  |  |  132|  5.12k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9465|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9466|       |            int opcode = LOAD_ATTR_SLOT;
  |  | 9467|       |            (void)(opcode);
  |  | 9468|       |            #endif
  |  | 9469|  5.12k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9470|  5.12k|            (void)this_instr;
  |  | 9471|  5.12k|            frame->instr_ptr = next_instr;
  |  | 9472|  5.12k|            next_instr += 10;
  |  | 9473|  5.12k|            INSTRUCTION_STATS(LOAD_ATTR_SLOT);
  |  |  ------------------
  |  |  |  |   71|  5.12k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9474|  5.12k|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9475|  5.12k|            _PyStackRef owner;
  |  | 9476|  5.12k|            _PyStackRef attr;
  |  | 9477|  5.12k|            _PyStackRef o;
  |  | 9478|  5.12k|            _PyStackRef value;
  |  | 9479|  5.12k|            _PyStackRef *null;
  |  | 9480|       |            /* Skip 1 cache entry */
  |  | 9481|       |            // _GUARD_TYPE_VERSION
  |  | 9482|  5.12k|            {
  |  | 9483|  5.12k|                owner = stack_pointer[-1];
  |  | 9484|  5.12k|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9485|  5.12k|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|  5.12k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  5.12k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  5.12k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9486|  5.12k|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9486:17): [True: 5.12k, False: 0]
  |  |  ------------------
  |  | 9487|  5.12k|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|  5.12k|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9487:21): [True: 335, False: 4.78k]
  |  |  ------------------
  |  | 9488|    335|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|    335|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9489|    335|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9489:21): [True: 335, False: 0]
  |  |  ------------------
  |  | 9490|    335|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|    335|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9491|      0|                }
  |  | 9492|  5.12k|            }
  |  | 9493|       |            // _LOAD_ATTR_SLOT
  |  | 9494|  4.78k|            {
  |  | 9495|  4.78k|                uint16_t index = read_u16(&this_instr[4].cache);
  |  | 9496|  4.78k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 9497|  4.78k|                PyObject **addr = (PyObject **)((char *)owner_o + index);
  |  | 9498|  4.78k|                PyObject *attr_o = FT_ATOMIC_LOAD_PTR(*addr);
  |  |  ------------------
  |  |  |  |  145|  4.78k|#define FT_ATOMIC_LOAD_PTR(value) value
  |  |  ------------------
  |  | 9499|  4.78k|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9499:21): [True: 0, False: 4.78k]
  |  |  ------------------
  |  | 9500|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9501|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9501:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9502|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9503|      0|                }
  |  | 9504|       |                #ifdef Py_GIL_DISABLED
  |  | 9505|       |                int increfed = _Py_TryIncrefCompareStackRef(addr, attr_o, &attr);
  |  | 9506|       |                if (!increfed) {
  |  | 9507|       |                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  | 9508|       |                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  | 9509|       |                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  | 9510|       |                }
  |  | 9511|       |                #else
  |  | 9512|  4.78k|                attr = PyStackRef_FromPyObjectNew(attr_o);
  |  |  ------------------
  |  |  |  |  611|  4.78k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.78k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.78k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9513|  4.78k|                #endif
  |  | 9514|  4.78k|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|  4.78k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9515|  4.78k|                o = owner;
  |  | 9516|  4.78k|            }
  |  | 9517|       |            // _POP_TOP
  |  | 9518|      0|            {
  |  | 9519|  4.78k|                value = o;
  |  | 9520|  4.78k|                stack_pointer[-1] = attr;
  |  | 9521|  4.78k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9522|  4.78k|                _PyFrame_StackPointerValidate(frame);
  |  | 9523|  4.78k|                PyStackRef_XCLOSE(value);
  |  | 9524|  4.78k|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9525|  4.78k|            }
  |  | 9526|       |            /* Skip 5 cache entries */
  |  | 9527|       |            // _PUSH_NULL_CONDITIONAL
  |  | 9528|  4.78k|            {
  |  | 9529|  4.78k|                null = &stack_pointer[0];
  |  | 9530|  4.78k|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (9530:21): [True: 7, False: 4.78k]
  |  |  ------------------
  |  | 9531|      7|                    null[0] = PyStackRef_NULL;
  |  | 9532|      7|                }
  |  | 9533|  4.78k|            }
  |  | 9534|  4.78k|            stack_pointer += (oparg & 1);
  |  | 9535|  4.78k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  4.78k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9536|  4.78k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  4.78k|    { \
  |  |  |  |  201|  4.78k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  4.78k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.78k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  4.78k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  4.78k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.78k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  4.78k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  4.78k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4.78k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  4.78k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  4.78k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  4.78k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  4.78k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  4.78k|    }
  |  |  ------------------
  |  | 9537|  4.78k|        }
  |  | 9538|       |
  |  | 9539|      0|        TARGET(LOAD_ATTR_WITH_HINT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9540|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9541|       |            int opcode = LOAD_ATTR_WITH_HINT;
  |  | 9542|       |            (void)(opcode);
  |  | 9543|       |            #endif
  |  | 9544|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  | 9545|      0|            (void)this_instr;
  |  | 9546|      0|            frame->instr_ptr = next_instr;
  |  | 9547|      0|            next_instr += 10;
  |  | 9548|      0|            INSTRUCTION_STATS(LOAD_ATTR_WITH_HINT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9549|      0|            static_assert(INLINE_CACHE_ENTRIES_LOAD_ATTR == 9, "incorrect cache size");
  |  | 9550|      0|            _PyStackRef owner;
  |  | 9551|      0|            _PyStackRef attr;
  |  | 9552|      0|            _PyStackRef o;
  |  | 9553|      0|            _PyStackRef value;
  |  | 9554|      0|            _PyStackRef *null;
  |  | 9555|       |            /* Skip 1 cache entry */
  |  | 9556|       |            // _GUARD_TYPE_VERSION
  |  | 9557|      0|            {
  |  | 9558|      0|                owner = stack_pointer[-1];
  |  | 9559|      0|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  | 9560|      0|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9561|      0|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (9561:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9562|      0|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|      0|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9562:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9563|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9564|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9564:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9565|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9566|      0|                }
  |  | 9567|      0|            }
  |  | 9568|       |            // _LOAD_ATTR_WITH_HINT
  |  | 9569|      0|            {
  |  | 9570|      0|                uint16_t hint = read_u16(&this_instr[4].cache);
  |  | 9571|      0|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  | 9572|      0|                assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  |  |  ------------------
  |  |  |  Branch (9572:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9573|      0|                PyDictObject *dict = _PyObject_GetManagedDict(owner_o);
  |  | 9574|      0|                if (dict == NULL) {
  |  |  ------------------
  |  |  |  Branch (9574:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9575|      0|                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9576|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9576:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9577|      0|                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9578|      0|                }
  |  | 9579|      0|                PyDictKeysObject *dk = FT_ATOMIC_LOAD_PTR(dict->ma_keys);
  |  |  ------------------
  |  |  |  |  145|      0|#define FT_ATOMIC_LOAD_PTR(value) value
  |  |  ------------------
  |  | 9580|      0|                assert(PyDict_CheckExact((PyObject *)dict));
  |  |  ------------------
  |  |  |  Branch (9580:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9581|       |                #ifdef Py_GIL_DISABLED
  |  | 9582|       |                if (!_Py_IsOwnedByCurrentThread((PyObject *)dict) && !_PyObject_GC_IS_SHARED(dict)) {
  |  | 9583|       |                    UPDATE_MISS_STATS(LOAD_ATTR);
  |  | 9584|       |                    assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  | 9585|       |                    JUMP_TO_PREDICTED(LOAD_ATTR);
  |  | 9586|       |                }
  |  | 9587|       |                #endif
  |  | 9588|      0|                PyObject *attr_o;
  |  | 9589|      0|                if (hint >= (size_t)FT_ATOMIC_LOAD_SSIZE_RELAXED(dk->dk_nentries)) {
  |  |  ------------------
  |  |  |  |  149|      0|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9589:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9590|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (9590:25): [True: 0, Folded]
  |  |  ------------------
  |  | 9591|      0|                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9592|      0|                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9592:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9593|      0|                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9594|      0|                    }
  |  | 9595|      0|                }
  |  | 9596|      0|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
  |  |  ------------------
  |  |  |  |  236|      0|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (9596:34): [True: 0, False: 0]
  |  |  ------------------
  |  | 9597|      0|                if (dk->dk_kind != DICT_KEYS_UNICODE) {
  |  |  ------------------
  |  |  |  Branch (9597:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9598|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (9598:25): [True: 0, Folded]
  |  |  ------------------
  |  | 9599|      0|                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9600|      0|                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9600:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9601|      0|                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9602|      0|                    }
  |  | 9603|      0|                }
  |  | 9604|      0|                PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dk) + hint;
  |  | 9605|      0|                if (FT_ATOMIC_LOAD_PTR_RELAXED(ep->me_key) != name) {
  |  |  ------------------
  |  |  |  |  153|      0|#define FT_ATOMIC_LOAD_PTR_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (9605:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9606|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (9606:25): [True: 0, Folded]
  |  |  ------------------
  |  | 9607|      0|                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9608|      0|                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9608:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9609|      0|                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9610|      0|                    }
  |  | 9611|      0|                }
  |  | 9612|      0|                attr_o = FT_ATOMIC_LOAD_PTR(ep->me_value);
  |  |  ------------------
  |  |  |  |  145|      0|#define FT_ATOMIC_LOAD_PTR(value) value
  |  |  ------------------
  |  | 9613|      0|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9613:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9614|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (9614:25): [True: 0, Folded]
  |  |  ------------------
  |  | 9615|      0|                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  | 9616|      0|                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  |  ------------------
  |  |  |  Branch (9616:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9617|      0|                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  | 9618|      0|                    }
  |  | 9619|      0|                }
  |  | 9620|      0|                STAT_INC(LOAD_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  | 9621|       |                #ifdef Py_GIL_DISABLED
  |  | 9622|       |                int increfed = _Py_TryIncrefCompareStackRef(&ep->me_value, attr_o, &attr);
  |  | 9623|       |                if (!increfed) {
  |  | 9624|       |                    if (true) {
  |  | 9625|       |                        UPDATE_MISS_STATS(LOAD_ATTR);
  |  | 9626|       |                        assert(_PyOpcode_Deopt[opcode] == (LOAD_ATTR));
  |  | 9627|       |                        JUMP_TO_PREDICTED(LOAD_ATTR);
  |  | 9628|       |                    }
  |  | 9629|       |                }
  |  | 9630|       |                #else
  |  | 9631|      0|                attr = PyStackRef_FromPyObjectNew(attr_o);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9632|      0|                #endif
  |  | 9633|      0|                o = owner;
  |  | 9634|      0|            }
  |  | 9635|       |            // _POP_TOP
  |  | 9636|      0|            {
  |  | 9637|      0|                value = o;
  |  | 9638|      0|                stack_pointer[-1] = attr;
  |  | 9639|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9640|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 9641|      0|                PyStackRef_XCLOSE(value);
  |  | 9642|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9643|      0|            }
  |  | 9644|       |            /* Skip 5 cache entries */
  |  | 9645|       |            // _PUSH_NULL_CONDITIONAL
  |  | 9646|      0|            {
  |  | 9647|      0|                null = &stack_pointer[0];
  |  | 9648|      0|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (9648:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9649|      0|                    null[0] = PyStackRef_NULL;
  |  | 9650|      0|                }
  |  | 9651|      0|            }
  |  | 9652|      0|            stack_pointer += (oparg & 1);
  |  | 9653|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9654|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 9655|      0|        }
  |  | 9656|       |
  |  | 9657|    631|        TARGET(LOAD_BUILD_CLASS) {
  |  |  ------------------
  |  |  |  |  132|    631|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9658|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9659|       |            int opcode = LOAD_BUILD_CLASS;
  |  | 9660|       |            (void)(opcode);
  |  | 9661|       |            #endif
  |  | 9662|    631|            frame->instr_ptr = next_instr;
  |  | 9663|    631|            next_instr += 1;
  |  | 9664|    631|            INSTRUCTION_STATS(LOAD_BUILD_CLASS);
  |  |  ------------------
  |  |  |  |   71|    631|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9665|    631|            _PyStackRef bc;
  |  | 9666|    631|            int err;
  |  | 9667|    631|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9668|    631|            _PyFrame_StackPointerValidate(frame);
  |  | 9669|    631|            PyObject *bc_o = _PyMapping_GetOptionalItem2(BUILTINS(), &_Py_ID(__build_class__), &err);
  |  |  ------------------
  |  |  |  |  327|    631|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  |                           PyObject *bc_o = _PyMapping_GetOptionalItem2(BUILTINS(), &_Py_ID(__build_class__), &err);
  |  |  ------------------
  |  |  |  |  936|    631|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|    631|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|    631|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9670|    631|            _PyFrame_StackPointerInvalidate(frame);
  |  | 9671|    631|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (9671:17): [True: 0, False: 631]
  |  |  ------------------
  |  | 9672|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9673|      0|            }
  |  | 9674|    631|            if (bc_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9674:17): [True: 0, False: 631]
  |  |  ------------------
  |  | 9675|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9675:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9676|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 9677|      0|                _PyErr_SetString(tstate, PyExc_NameError,
  |  | 9678|      0|                                 "__build_class__ not found");
  |  | 9679|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9680|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9681|      0|            }
  |  | 9682|    631|            bc = PyStackRef_FromPyObjectSteal(bc_o);
  |  | 9683|    631|            stack_pointer[0] = bc;
  |  | 9684|    631|            stack_pointer += 1;
  |  | 9685|    631|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    631|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9686|    631|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    631|    { \
  |  |  |  |  201|    631|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    631|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    631|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    631|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    631|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    631|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    631|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    631|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 631]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    631|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    631|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    631|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    631|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    631|    }
  |  |  ------------------
  |  | 9687|    631|        }
  |  | 9688|       |
  |  | 9689|  2.27M|        TARGET(LOAD_COMMON_CONSTANT) {
  |  |  ------------------
  |  |  |  |  132|  2.27M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9690|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9691|       |            int opcode = LOAD_COMMON_CONSTANT;
  |  | 9692|       |            (void)(opcode);
  |  | 9693|       |            #endif
  |  | 9694|  2.27M|            frame->instr_ptr = next_instr;
  |  | 9695|  2.27M|            next_instr += 1;
  |  | 9696|  2.27M|            INSTRUCTION_STATS(LOAD_COMMON_CONSTANT);
  |  |  ------------------
  |  |  |  |   71|  2.27M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9697|  2.27M|            _PyStackRef value;
  |  | 9698|  2.27M|            assert(oparg < NUM_COMMON_CONSTANTS);
  |  |  ------------------
  |  |  |  Branch (9698:13): [True: 2.27M, False: 0]
  |  |  ------------------
  |  | 9699|  2.27M|            value = PyStackRef_DupImmortal(tstate->interp->common_consts[oparg]);
  |  | 9700|  2.27M|            stack_pointer[0] = value;
  |  | 9701|  2.27M|            stack_pointer += 1;
  |  | 9702|  2.27M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.27M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9703|  2.27M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.27M|    { \
  |  |  |  |  201|  2.27M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.27M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.27M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.27M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.27M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.27M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.27M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.27M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.27M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.27M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.27M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.27M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.27M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.27M|    }
  |  |  ------------------
  |  | 9704|  2.27M|        }
  |  | 9705|       |
  |  | 9706|  3.84M|        TARGET(LOAD_CONST) {
  |  |  ------------------
  |  |  |  |  132|  3.84M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9707|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9708|       |            int opcode = LOAD_CONST;
  |  | 9709|       |            (void)(opcode);
  |  | 9710|       |            #endif
  |  | 9711|  3.84M|            frame->instr_ptr = next_instr;
  |  | 9712|  3.84M|            next_instr += 1;
  |  | 9713|  3.84M|            INSTRUCTION_STATS(LOAD_CONST);
  |  |  ------------------
  |  |  |  |   71|  3.84M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9714|  3.84M|            _PyStackRef value;
  |  | 9715|  3.84M|            PyObject *obj = GETITEM(FRAME_CO_CONSTS, oparg);
  |  |  ------------------
  |  |  |  |  236|  3.84M|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  3.84M|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  3.84M|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  3.84M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (9715:29): [True: 3.84M, False: 0]
  |  |  ------------------
  |  | 9716|      0|            value = PyStackRef_FromPyObjectBorrow(obj);
  |  | 9717|  3.84M|            stack_pointer[0] = value;
  |  | 9718|  3.84M|            stack_pointer += 1;
  |  | 9719|  3.84M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.84M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9720|  3.84M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.84M|    { \
  |  |  |  |  201|  3.84M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.84M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.84M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.84M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.84M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.84M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.84M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.84M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.84M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.84M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.84M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.84M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.84M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.84M|    }
  |  |  ------------------
  |  | 9721|  3.84M|        }
  |  | 9722|       |
  |  | 9723|  6.69k|        TARGET(LOAD_DEREF) {
  |  |  ------------------
  |  |  |  |  132|  6.69k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9724|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9725|       |            int opcode = LOAD_DEREF;
  |  | 9726|       |            (void)(opcode);
  |  | 9727|       |            #endif
  |  | 9728|  6.69k|            frame->instr_ptr = next_instr;
  |  | 9729|  6.69k|            next_instr += 1;
  |  | 9730|  6.69k|            INSTRUCTION_STATS(LOAD_DEREF);
  |  |  ------------------
  |  |  |  |   71|  6.69k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9731|  6.69k|            _PyStackRef value;
  |  | 9732|  6.69k|            PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|  6.69k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9733|  6.69k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9734|  6.69k|            _PyFrame_StackPointerValidate(frame);
  |  | 9735|  6.69k|            value = _PyCell_GetStackRef(cell);
  |  | 9736|  6.69k|            _PyFrame_StackPointerInvalidate(frame);
  |  | 9737|  6.69k|            if (PyStackRef_IsNull(value)) {
  |  |  ------------------
  |  |  |  |  482|  6.69k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  6.69k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  6.69k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 6.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9738|      0|                stack_pointer[0] = value;
  |  | 9739|      0|                stack_pointer += 1;
  |  | 9740|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9741|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9742|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 9743|      0|                _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg);
  |  | 9744|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9745|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9746|      0|            }
  |  | 9747|  6.69k|            stack_pointer[0] = value;
  |  | 9748|  6.69k|            stack_pointer += 1;
  |  | 9749|  6.69k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  6.69k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9750|  6.69k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  6.69k|    { \
  |  |  |  |  201|  6.69k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  6.69k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  6.69k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  6.69k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  6.69k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  6.69k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  6.69k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  6.69k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 6.69k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  6.69k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  6.69k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  6.69k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  6.69k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  6.69k|    }
  |  |  ------------------
  |  | 9751|  6.69k|        }
  |  | 9752|       |
  |  | 9753|  1.54M|        TARGET(LOAD_FAST) {
  |  |  ------------------
  |  |  |  |  132|  1.54M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9754|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9755|       |            int opcode = LOAD_FAST;
  |  | 9756|       |            (void)(opcode);
  |  | 9757|       |            #endif
  |  | 9758|  1.54M|            frame->instr_ptr = next_instr;
  |  | 9759|  1.54M|            next_instr += 1;
  |  | 9760|  1.54M|            INSTRUCTION_STATS(LOAD_FAST);
  |  |  ------------------
  |  |  |  |   71|  1.54M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9761|  1.54M|            _PyStackRef value;
  |  | 9762|  1.54M|            assert(!PyStackRef_IsNull(GETLOCAL(oparg)));
  |  |  ------------------
  |  |  |  Branch (9762:13): [True: 1.54M, False: 0]
  |  |  ------------------
  |  | 9763|  1.54M|            value = PyStackRef_DUP(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|  1.54M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9764|  1.54M|            stack_pointer[0] = value;
  |  | 9765|  1.54M|            stack_pointer += 1;
  |  | 9766|  1.54M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.54M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9767|  1.54M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.54M|    { \
  |  |  |  |  201|  1.54M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.54M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.54M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.54M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.54M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.54M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.54M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.54M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.54M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.54M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.54M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.54M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.54M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.54M|    }
  |  |  ------------------
  |  | 9768|  1.54M|        }
  |  | 9769|       |
  |  | 9770|   274k|        TARGET(LOAD_FAST_AND_CLEAR) {
  |  |  ------------------
  |  |  |  |  132|   274k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9771|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9772|       |            int opcode = LOAD_FAST_AND_CLEAR;
  |  | 9773|       |            (void)(opcode);
  |  | 9774|       |            #endif
  |  | 9775|   274k|            frame->instr_ptr = next_instr;
  |  | 9776|   274k|            next_instr += 1;
  |  | 9777|   274k|            INSTRUCTION_STATS(LOAD_FAST_AND_CLEAR);
  |  |  ------------------
  |  |  |  |   71|   274k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9778|   274k|            _PyStackRef value;
  |  | 9779|   274k|            value = GETLOCAL(oparg);
  |  |  ------------------
  |  |  |  |  285|   274k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9780|   274k|            GETLOCAL(oparg) = PyStackRef_NULL;
  |  |  ------------------
  |  |  |  |  285|   274k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9781|   274k|            stack_pointer[0] = value;
  |  | 9782|   274k|            stack_pointer += 1;
  |  | 9783|   274k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   274k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9784|   274k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   274k|    { \
  |  |  |  |  201|   274k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   274k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   274k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   274k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   274k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   274k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   274k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   274k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 274k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   274k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   274k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   274k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   274k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   274k|    }
  |  |  ------------------
  |  | 9785|   274k|        }
  |  | 9786|       |
  |  | 9787|  79.0M|        TARGET(LOAD_FAST_BORROW) {
  |  |  ------------------
  |  |  |  |  132|  79.0M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9788|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9789|       |            int opcode = LOAD_FAST_BORROW;
  |  | 9790|       |            (void)(opcode);
  |  | 9791|       |            #endif
  |  | 9792|  79.0M|            frame->instr_ptr = next_instr;
  |  | 9793|  79.0M|            next_instr += 1;
  |  | 9794|  79.0M|            INSTRUCTION_STATS(LOAD_FAST_BORROW);
  |  |  ------------------
  |  |  |  |   71|  79.0M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9795|  79.0M|            _PyStackRef value;
  |  | 9796|  79.0M|            assert(!PyStackRef_IsNull(GETLOCAL(oparg)));
  |  |  ------------------
  |  |  |  Branch (9796:13): [True: 79.0M, False: 0]
  |  |  ------------------
  |  | 9797|  79.0M|            value = PyStackRef_Borrow(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|  79.0M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9798|  79.0M|            stack_pointer[0] = value;
  |  | 9799|  79.0M|            stack_pointer += 1;
  |  | 9800|  79.0M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  79.0M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9801|  79.0M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  79.0M|    { \
  |  |  |  |  201|  79.0M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  79.0M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  79.0M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  79.0M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  79.0M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  79.0M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  79.0M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  79.0M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 79.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  79.0M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  79.0M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  79.0M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  79.0M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  79.0M|    }
  |  |  ------------------
  |  | 9802|  79.0M|        }
  |  | 9803|       |
  |  | 9804|  55.1M|        TARGET(LOAD_FAST_BORROW_LOAD_FAST_BORROW) {
  |  |  ------------------
  |  |  |  |  132|  55.1M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9805|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9806|       |            int opcode = LOAD_FAST_BORROW_LOAD_FAST_BORROW;
  |  | 9807|       |            (void)(opcode);
  |  | 9808|       |            #endif
  |  | 9809|  55.1M|            frame->instr_ptr = next_instr;
  |  | 9810|  55.1M|            next_instr += 1;
  |  | 9811|  55.1M|            INSTRUCTION_STATS(LOAD_FAST_BORROW_LOAD_FAST_BORROW);
  |  |  ------------------
  |  |  |  |   71|  55.1M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9812|  55.1M|            _PyStackRef value1;
  |  | 9813|  55.1M|            _PyStackRef value2;
  |  | 9814|  55.1M|            uint32_t oparg1 = oparg >> 4;
  |  | 9815|  55.1M|            uint32_t oparg2 = oparg & 15;
  |  | 9816|  55.1M|            value1 = PyStackRef_Borrow(GETLOCAL(oparg1));
  |  |  ------------------
  |  |  |  |  285|  55.1M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9817|  55.1M|            value2 = PyStackRef_Borrow(GETLOCAL(oparg2));
  |  |  ------------------
  |  |  |  |  285|  55.1M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9818|  55.1M|            stack_pointer[0] = value1;
  |  | 9819|  55.1M|            stack_pointer[1] = value2;
  |  | 9820|  55.1M|            stack_pointer += 2;
  |  | 9821|  55.1M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  55.1M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9822|  55.1M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  55.1M|    { \
  |  |  |  |  201|  55.1M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  55.1M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  55.1M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  55.1M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  55.1M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  55.1M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  55.1M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  55.1M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 55.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  55.1M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  55.1M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  55.1M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  55.1M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  55.1M|    }
  |  |  ------------------
  |  | 9823|  55.1M|        }
  |  | 9824|       |
  |  | 9825|  55.1M|        TARGET(LOAD_FAST_CHECK) {
  |  |  ------------------
  |  |  |  |  132|  1.22k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9826|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9827|       |            int opcode = LOAD_FAST_CHECK;
  |  | 9828|       |            (void)(opcode);
  |  | 9829|       |            #endif
  |  | 9830|  1.22k|            frame->instr_ptr = next_instr;
  |  | 9831|  1.22k|            next_instr += 1;
  |  | 9832|  1.22k|            INSTRUCTION_STATS(LOAD_FAST_CHECK);
  |  |  ------------------
  |  |  |  |   71|  1.22k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9833|  1.22k|            _PyStackRef value;
  |  | 9834|  1.22k|            _PyStackRef value_s = GETLOCAL(oparg);
  |  |  ------------------
  |  |  |  |  285|  1.22k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9835|  1.22k|            if (PyStackRef_IsNull(value_s)) {
  |  |  ------------------
  |  |  |  |  482|  1.22k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  1.22k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  1.22k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 1.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9836|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9837|      0|                _PyFrame_StackPointerValidate(frame);
  |  | 9838|      0|                _PyEval_FormatExcCheckArg(tstate, PyExc_UnboundLocalError,
  |  | 9839|      0|                    UNBOUNDLOCAL_ERROR_MSG,
  |  |  ------------------
  |  |  |  |  401|      0|    "cannot access local variable '%s' where it is not associated with a value"
  |  |  ------------------
  |  | 9840|      0|                    PyTuple_GetItem(_PyFrame_GetCode(frame)->co_localsplusnames, oparg)
  |  | 9841|      0|                );
  |  | 9842|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  | 9843|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9844|      0|            }
  |  | 9845|  1.22k|            value = PyStackRef_DUP(value_s);
  |  | 9846|  1.22k|            stack_pointer[0] = value;
  |  | 9847|  1.22k|            stack_pointer += 1;
  |  | 9848|  1.22k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.22k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9849|  1.22k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.22k|    { \
  |  |  |  |  201|  1.22k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.22k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.22k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.22k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.22k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.22k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.22k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.22k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.22k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.22k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.22k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.22k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.22k|    }
  |  |  ------------------
  |  | 9850|  1.22k|        }
  |  | 9851|       |
  |  | 9852|  2.89k|        TARGET(LOAD_FAST_LOAD_FAST) {
  |  |  ------------------
  |  |  |  |  132|  2.89k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9853|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9854|       |            int opcode = LOAD_FAST_LOAD_FAST;
  |  | 9855|       |            (void)(opcode);
  |  | 9856|       |            #endif
  |  | 9857|  2.89k|            frame->instr_ptr = next_instr;
  |  | 9858|  2.89k|            next_instr += 1;
  |  | 9859|  2.89k|            INSTRUCTION_STATS(LOAD_FAST_LOAD_FAST);
  |  |  ------------------
  |  |  |  |   71|  2.89k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9860|  2.89k|            _PyStackRef value1;
  |  | 9861|  2.89k|            _PyStackRef value2;
  |  | 9862|  2.89k|            uint32_t oparg1 = oparg >> 4;
  |  | 9863|  2.89k|            uint32_t oparg2 = oparg & 15;
  |  | 9864|  2.89k|            value1 = PyStackRef_DUP(GETLOCAL(oparg1));
  |  |  ------------------
  |  |  |  |  285|  2.89k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9865|  2.89k|            value2 = PyStackRef_DUP(GETLOCAL(oparg2));
  |  |  ------------------
  |  |  |  |  285|  2.89k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9866|  2.89k|            stack_pointer[0] = value1;
  |  | 9867|  2.89k|            stack_pointer[1] = value2;
  |  | 9868|  2.89k|            stack_pointer += 2;
  |  | 9869|  2.89k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.89k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9870|  2.89k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.89k|    { \
  |  |  |  |  201|  2.89k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.89k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.89k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.89k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.89k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.89k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.89k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.89k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.89k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.89k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.89k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.89k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.89k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.89k|    }
  |  |  ------------------
  |  | 9871|  2.89k|        }
  |  | 9872|       |
  |  | 9873|  2.89k|        TARGET(LOAD_FROM_DICT_OR_DEREF) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9874|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9875|       |            int opcode = LOAD_FROM_DICT_OR_DEREF;
  |  | 9876|       |            (void)(opcode);
  |  | 9877|       |            #endif
  |  | 9878|      0|            frame->instr_ptr = next_instr;
  |  | 9879|      0|            next_instr += 1;
  |  | 9880|      0|            INSTRUCTION_STATS(LOAD_FROM_DICT_OR_DEREF);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9881|      0|            _PyStackRef class_dict_st;
  |  | 9882|      0|            _PyStackRef value;
  |  | 9883|      0|            class_dict_st = stack_pointer[-1];
  |  | 9884|      0|            PyObject *name;
  |  | 9885|      0|            PyObject *class_dict = PyStackRef_AsPyObjectBorrow(class_dict_st);
  |  | 9886|      0|            assert(class_dict);
  |  |  ------------------
  |  |  |  Branch (9886:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 9887|      0|            assert(oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus);
  |  |  ------------------
  |  |  |  Branch (9887:13): [True: 0, False: 0]
  |  |  |  Branch (9887:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 9888|      0|            name = PyTuple_GET_ITEM(_PyFrame_GetCode(frame)->co_localsplusnames, oparg);
  |  |  ------------------
  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (9888:20): [True: 0, False: 0]
  |  |  ------------------
  |  | 9889|      0|            int err;
  |  | 9890|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9891|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 9892|      0|            PyObject* value_o = _PyMapping_GetOptionalItem2(class_dict, name, &err);
  |  | 9893|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 9894|      0|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (9894:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9895|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9896|      0|            }
  |  | 9897|      0|            if (!value_o) {
  |  |  ------------------
  |  |  |  Branch (9897:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9898|      0|                PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|      0|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  | 9899|      0|                value_o = PyCell_GetRef(cell);
  |  | 9900|      0|                if (value_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9900:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9901|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9901:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9902|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 9903|      0|                    _PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg);
  |  | 9904|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 9905|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9906|      0|                }
  |  | 9907|      0|            }
  |  | 9908|      0|            stack_pointer += -1;
  |  | 9909|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9910|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9911|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 9912|      0|            PyStackRef_CLOSE(class_dict_st);
  |  | 9913|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 9914|      0|            value = PyStackRef_FromPyObjectSteal(value_o);
  |  | 9915|      0|            stack_pointer[0] = value;
  |  | 9916|      0|            stack_pointer += 1;
  |  | 9917|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9918|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  | 9919|      0|        }
  |  | 9920|       |
  |  | 9921|      0|        TARGET(LOAD_FROM_DICT_OR_GLOBALS) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  | 9922|       |            #if _Py_TAIL_CALL_INTERP
  |  | 9923|       |            int opcode = LOAD_FROM_DICT_OR_GLOBALS;
  |  | 9924|       |            (void)(opcode);
  |  | 9925|       |            #endif
  |  | 9926|      0|            frame->instr_ptr = next_instr;
  |  | 9927|      0|            next_instr += 1;
  |  | 9928|      0|            INSTRUCTION_STATS(LOAD_FROM_DICT_OR_GLOBALS);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  | 9929|      0|            _PyStackRef mod_or_class_dict;
  |  | 9930|      0|            _PyStackRef v;
  |  | 9931|      0|            mod_or_class_dict = stack_pointer[-1];
  |  | 9932|      0|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|      0|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (9932:30): [True: 0, False: 0]
  |  |  ------------------
  |  | 9933|      0|            int err;
  |  | 9934|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9935|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 9936|      0|            PyObject *v_o = _PyMapping_GetOptionalItem2(PyStackRef_AsPyObjectBorrow(mod_or_class_dict), name, &err);
  |  | 9937|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 9938|      0|            stack_pointer += -1;
  |  | 9939|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  | 9940|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  | 9941|      0|            _PyFrame_StackPointerValidate(frame);
  |  | 9942|      0|            PyStackRef_CLOSE(mod_or_class_dict);
  |  | 9943|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  | 9944|      0|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (9944:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9945|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9946|      0|            }
  |  | 9947|      0|            if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9947:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 9948|      0|                if (PyDict_CheckExact(GLOBALS())
  |  |  ------------------
  |  |  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9949|      0|                    && PyDict_CheckExact(BUILTINS()))
  |  |  ------------------
  |  |  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9950|      0|                {
  |  | 9951|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9951:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9952|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 9953|      0|                    v_o = _PyDict_LoadGlobal((PyDictObject *)GLOBALS(),
  |  |  ------------------
  |  |  |  |  326|      0|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  | 9954|      0|                        (PyDictObject *)BUILTINS(),
  |  |  ------------------
  |  |  |  |  327|      0|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  | 9955|      0|                        name);
  |  | 9956|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 9957|      0|                    if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9957:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9958|      0|                        if (!_PyErr_Occurred(tstate)) {
  |  |  ------------------
  |  |  |  Branch (9958:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 9959|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9959:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 9960|      0|                            _PyFrame_StackPointerValidate(frame);
  |  | 9961|      0|                            _PyEval_FormatExcCheckArg(tstate, PyExc_NameError,
  |  | 9962|      0|                                NAME_ERROR_MSG, name);
  |  |  ------------------
  |  |  |  |  405|      0|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  |  |  ------------------
  |  | 9963|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  | 9964|      0|                        }
  |  | 9965|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9966|      0|                    }
  |  | 9967|      0|                    if (PyLazyImport_CheckExact(v_o)) {
  |  |  ------------------
  |  |  |  |   15|      0|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9968|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9968:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9969|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 9970|      0|                        PyObject *l_v = _PyImport_LoadLazyImportTstate(tstate, v_o);
  |  | 9971|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 9972|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9972:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9973|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 9974|      0|                        Py_SETREF(v_o, l_v);
  |  |  ------------------
  |  |  |  |  354|      0|    do { \
  |  |  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  359|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 9975|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 9976|      0|                        if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9976:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 9977|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9978|      0|                        }
  |  | 9979|      0|                    }
  |  | 9980|      0|                }
  |  | 9981|      0|                else {
  |  | 9982|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9982:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 9983|      0|                    _PyFrame_StackPointerValidate(frame);
  |  | 9984|      0|                    v_o = _PyMapping_GetOptionalItem2(GLOBALS(), name, &err);
  |  |  ------------------
  |  |  |  |  326|      0|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  | 9985|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  | 9986|      0|                    if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (9986:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9987|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9988|      0|                    }
  |  | 9989|      0|                    if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9989:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9990|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9990:25): [True: 0, False: 0]
  |  |  ------------------
  |  | 9991|      0|                        _PyFrame_StackPointerValidate(frame);
  |  | 9992|      0|                        v_o = _PyMapping_GetOptionalItem2(BUILTINS(), name, &err);
  |  |  ------------------
  |  |  |  |  327|      0|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  | 9993|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  | 9994|      0|                        if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (9994:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 9995|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  | 9996|      0|                        }
  |  | 9997|      0|                        if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (9997:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 9998|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (9998:29): [True: 0, False: 0]
  |  |  ------------------
  |  | 9999|      0|                            _PyFrame_StackPointerValidate(frame);
  |  |10000|      0|                            _PyEval_FormatExcCheckArg(
  |  |10001|      0|                                tstate, PyExc_NameError,
  |  |10002|      0|                                NAME_ERROR_MSG, name);
  |  |  ------------------
  |  |  |  |  405|      0|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  |  |  ------------------
  |  |10003|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  |10004|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10005|      0|                        }
  |  |10006|      0|                    }
  |  |10007|      0|                    if (PyLazyImport_CheckExact(v_o)) {
  |  |  ------------------
  |  |  |  |   15|      0|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10008|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10008:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10009|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10010|      0|                        PyObject *l_v = _PyImport_LoadLazyImportTstate(tstate, v_o);
  |  |10011|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10012|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10012:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10013|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10014|      0|                        Py_SETREF(v_o, l_v);
  |  |  ------------------
  |  |  |  |  354|      0|    do { \
  |  |  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  359|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10015|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10016|      0|                        if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10016:29): [True: 0, False: 0]
  |  |  ------------------
  |  |10017|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10018|      0|                        }
  |  |10019|      0|                    }
  |  |10020|      0|                }
  |  |10021|      0|            }
  |  |10022|      0|            v = PyStackRef_FromPyObjectSteal(v_o);
  |  |10023|      0|            stack_pointer[0] = v;
  |  |10024|      0|            stack_pointer += 1;
  |  |10025|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10026|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |10027|      0|        }
  |  |10028|       |
  |  |10029|  3.85k|        TARGET(LOAD_GLOBAL) {
  |  |  ------------------
  |  |  |  |  132|  3.85k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10030|       |            #if _Py_TAIL_CALL_INTERP
  |  |10031|       |            int opcode = LOAD_GLOBAL;
  |  |10032|       |            (void)(opcode);
  |  |10033|       |            #endif
  |  |10034|  3.85k|            frame->instr_ptr = next_instr;
  |  |10035|  3.85k|            next_instr += 5;
  |  |10036|  3.85k|            INSTRUCTION_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |   71|  3.85k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10037|  14.6k|            PREDICTED_LOAD_GLOBAL:;
  |  |10038|  14.6k|            _Py_CODEUNIT* const this_instr = next_instr - 5;
  |  |10039|  14.6k|            (void)this_instr;
  |  |10040|  14.6k|            _PyStackRef *res;
  |  |10041|  14.6k|            _PyStackRef *null;
  |  |10042|       |            // _SPECIALIZE_LOAD_GLOBAL
  |  |10043|  14.6k|            {
  |  |10044|  14.6k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |10045|  14.6k|                (void)counter;
  |  |10046|  14.6k|                #if ENABLE_SPECIALIZATION
  |  |10047|  14.6k|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  14.6k|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 1.73k, False: 12.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10048|  1.73k|                    PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
  |  |  ------------------
  |  |  |  |  236|  1.73k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  1.73k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  1.73k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10048:38): [True: 1.73k, False: 0]
  |  |  ------------------
  |  |10049|      0|                    next_instr = this_instr;
  |  |10050|  1.73k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10051|  1.73k|                    _PyFrame_StackPointerValidate(frame);
  |  |10052|  1.73k|                    _Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name);
  |  |  ------------------
  |  |  |  |  326|  1.73k|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |                                   _Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name);
  |  |  ------------------
  |  |  |  |  327|  1.73k|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  |10053|  1.73k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10054|  1.73k|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|  1.73k|    { \
  |  |  |  |  217|  1.73k|        opcode = next_instr->op.code; \
  |  |  |  |  218|  1.73k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.73k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|  1.73k|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.73k|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|  1.73k|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|  1.73k|    }
  |  |  ------------------
  |  |10055|  1.73k|                }
  |  |10056|  14.6k|                OPCODE_DEFERRED_INC(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |   90|  14.6k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |10057|  14.6k|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  14.6k|    do { \
  |  |  |  |  378|  14.6k|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  14.6k|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 14.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10058|  14.6k|                #endif  /* ENABLE_SPECIALIZATION */
  |  |10059|  14.6k|            }
  |  |10060|       |            /* Skip 1 cache entry */
  |  |10061|       |            /* Skip 1 cache entry */
  |  |10062|       |            /* Skip 1 cache entry */
  |  |10063|       |            // _LOAD_GLOBAL
  |  |10064|      0|            {
  |  |10065|  14.6k|                res = &stack_pointer[0];
  |  |10066|  14.6k|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg>>1);
  |  |  ------------------
  |  |  |  |  236|  14.6k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  14.6k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  14.6k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  12.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10066:34): [True: 12.9k, False: 1.73k]
  |  |  ------------------
  |  |10067|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10068|  12.9k|                _PyFrame_StackPointerValidate(frame);
  |  |10069|  12.9k|                _PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res);
  |  |  ------------------
  |  |  |  |  326|  12.9k|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |                               _PyEval_LoadGlobalStackRef(GLOBALS(), BUILTINS(), name, res);
  |  |  ------------------
  |  |  |  |  327|  12.9k|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  |10070|  12.9k|                _PyFrame_StackPointerInvalidate(frame);
  |  |10071|  12.9k|                if (PyStackRef_IsNull(*res)) {
  |  |  ------------------
  |  |  |  |  482|  12.9k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  12.9k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  12.9k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 1, False: 12.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10072|      1|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      1|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10073|      0|                }
  |  |10074|  12.9k|            }
  |  |10075|       |            // _PUSH_NULL_CONDITIONAL
  |  |10076|  12.9k|            {
  |  |10077|  12.9k|                null = &stack_pointer[1];
  |  |10078|  12.9k|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (10078:21): [True: 5.87k, False: 7.07k]
  |  |  ------------------
  |  |10079|  5.87k|                    null[0] = PyStackRef_NULL;
  |  |10080|  5.87k|                }
  |  |10081|  12.9k|            }
  |  |10082|  12.9k|            stack_pointer += 1 + (oparg & 1);
  |  |10083|  12.9k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  12.9k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10084|  12.9k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  12.9k|    { \
  |  |  |  |  201|  12.9k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  12.9k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  12.9k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  12.9k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  12.9k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  12.9k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  12.9k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  12.9k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 12.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  12.9k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  12.9k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  12.9k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  12.9k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  12.9k|    }
  |  |  ------------------
  |  |10085|  12.9k|        }
  |  |10086|       |
  |  |10087|  18.0M|        TARGET(LOAD_GLOBAL_BUILTIN) {
  |  |  ------------------
  |  |  |  |  132|  18.0M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10088|       |            #if _Py_TAIL_CALL_INTERP
  |  |10089|       |            int opcode = LOAD_GLOBAL_BUILTIN;
  |  |10090|       |            (void)(opcode);
  |  |10091|       |            #endif
  |  |10092|  18.0M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |10093|  18.0M|            (void)this_instr;
  |  |10094|  18.0M|            frame->instr_ptr = next_instr;
  |  |10095|  18.0M|            next_instr += 5;
  |  |10096|  18.0M|            INSTRUCTION_STATS(LOAD_GLOBAL_BUILTIN);
  |  |  ------------------
  |  |  |  |   71|  18.0M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10097|  18.0M|            static_assert(INLINE_CACHE_ENTRIES_LOAD_GLOBAL == 4, "incorrect cache size");
  |  |10098|  18.0M|            _PyStackRef res;
  |  |10099|  18.0M|            _PyStackRef *null;
  |  |10100|       |            /* Skip 1 cache entry */
  |  |10101|       |            // _GUARD_GLOBALS_VERSION
  |  |10102|  18.0M|            {
  |  |10103|  18.0M|                uint16_t version = read_u16(&this_instr[2].cache);
  |  |10104|  18.0M|                PyDictObject *dict = (PyDictObject *)GLOBALS();
  |  |  ------------------
  |  |  |  |  326|  18.0M|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |10105|  18.0M|                if (!PyDict_CheckExact(dict)) {
  |  |  ------------------
  |  |  |  |   19|  18.0M|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  18.0M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  18.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  18.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10105:21): [True: 0, False: 18.0M]
  |  |  ------------------
  |  |10106|      0|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10107|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10107:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10108|      0|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10109|      0|                }
  |  |10110|  18.0M|                PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
  |  |  ------------------
  |  |  |  |  150|  18.0M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  |10111|  18.0M|                if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) {
  |  |  ------------------
  |  |  |  |  159|  18.0M|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (10111:21): [True: 3.84k, False: 18.0M]
  |  |  ------------------
  |  |10112|  3.84k|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|  3.84k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10113|  3.84k|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10113:21): [True: 3.84k, False: 0]
  |  |  ------------------
  |  |10114|  3.84k|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|  3.84k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10115|      0|                }
  |  |10116|  18.0M|                assert(keys->dk_kind == DICT_KEYS_UNICODE);
  |  |  ------------------
  |  |  |  Branch (10116:17): [True: 18.0M, False: 0]
  |  |  ------------------
  |  |10117|  18.0M|            }
  |  |10118|       |            // _LOAD_GLOBAL_BUILTINS
  |  |10119|  18.0M|            {
  |  |10120|  18.0M|                uint16_t version = read_u16(&this_instr[3].cache);
  |  |10121|  18.0M|                uint16_t index = read_u16(&this_instr[4].cache);
  |  |10122|  18.0M|                PyDictObject *dict = (PyDictObject *)BUILTINS();
  |  |  ------------------
  |  |  |  |  327|  18.0M|#define BUILTINS() frame->f_builtins
  |  |  ------------------
  |  |10123|  18.0M|                if (!PyDict_CheckExact(dict)) {
  |  |  ------------------
  |  |  |  |   19|  18.0M|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  18.0M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  18.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  18.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10123:21): [True: 0, False: 18.0M]
  |  |  ------------------
  |  |10124|      0|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10125|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10125:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10126|      0|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10127|      0|                }
  |  |10128|  18.0M|                PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
  |  |  ------------------
  |  |  |  |  150|  18.0M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  |10129|  18.0M|                if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) {
  |  |  ------------------
  |  |  |  |  159|  18.0M|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (10129:21): [True: 2.15k, False: 18.0M]
  |  |  ------------------
  |  |10130|  2.15k|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|  2.15k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10131|  2.15k|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10131:21): [True: 2.15k, False: 0]
  |  |  ------------------
  |  |10132|  2.15k|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|  2.15k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10133|      0|                }
  |  |10134|  18.0M|                assert(keys->dk_kind == DICT_KEYS_UNICODE);
  |  |  ------------------
  |  |  |  Branch (10134:17): [True: 18.0M, False: 0]
  |  |  ------------------
  |  |10135|  18.0M|                PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
  |  |10136|  18.0M|                PyObject *res_o = FT_ATOMIC_LOAD_PTR_CONSUME(entries[index].me_value);
  |  |  ------------------
  |  |  |  |  151|  18.0M|#define FT_ATOMIC_LOAD_PTR_CONSUME(value) value
  |  |  ------------------
  |  |10137|  18.0M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10137:21): [True: 0, False: 18.0M]
  |  |  ------------------
  |  |10138|      0|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10139|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10139:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10140|      0|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10141|      0|                }
  |  |10142|       |                #if Py_GIL_DISABLED
  |  |10143|       |                int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res);
  |  |10144|       |                if (!increfed) {
  |  |10145|       |                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |10146|       |                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |10147|       |                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |10148|       |                }
  |  |10149|       |                #else
  |  |10150|  18.0M|                res = PyStackRef_FromPyObjectNew(res_o);
  |  |  ------------------
  |  |  |  |  611|  18.0M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  18.0M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  18.0M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10151|  18.0M|                #endif
  |  |10152|  18.0M|                STAT_INC(LOAD_GLOBAL, hit);
  |  |  ------------------
  |  |  |  |   73|  18.0M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |10153|  18.0M|            }
  |  |10154|       |            // _PUSH_NULL_CONDITIONAL
  |  |10155|      0|            {
  |  |10156|  18.0M|                null = &stack_pointer[1];
  |  |10157|  18.0M|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (10157:21): [True: 17.7M, False: 337k]
  |  |  ------------------
  |  |10158|  17.7M|                    null[0] = PyStackRef_NULL;
  |  |10159|  17.7M|                }
  |  |10160|  18.0M|            }
  |  |10161|  18.0M|            stack_pointer[0] = res;
  |  |10162|  18.0M|            stack_pointer += 1 + (oparg & 1);
  |  |10163|  18.0M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  18.0M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10164|  18.0M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  18.0M|    { \
  |  |  |  |  201|  18.0M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  18.0M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  18.0M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  18.0M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  18.0M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  18.0M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  18.0M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  18.0M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 18.0M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  18.0M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  18.0M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  18.0M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  18.0M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  18.0M|    }
  |  |  ------------------
  |  |10165|  18.0M|        }
  |  |10166|       |
  |  |10167|  11.4M|        TARGET(LOAD_GLOBAL_MODULE) {
  |  |  ------------------
  |  |  |  |  132|  11.4M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10168|       |            #if _Py_TAIL_CALL_INTERP
  |  |10169|       |            int opcode = LOAD_GLOBAL_MODULE;
  |  |10170|       |            (void)(opcode);
  |  |10171|       |            #endif
  |  |10172|  11.4M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |10173|  11.4M|            (void)this_instr;
  |  |10174|  11.4M|            frame->instr_ptr = next_instr;
  |  |10175|  11.4M|            next_instr += 5;
  |  |10176|  11.4M|            INSTRUCTION_STATS(LOAD_GLOBAL_MODULE);
  |  |  ------------------
  |  |  |  |   71|  11.4M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10177|  11.4M|            static_assert(INLINE_CACHE_ENTRIES_LOAD_GLOBAL == 4, "incorrect cache size");
  |  |10178|  11.4M|            _PyStackRef res;
  |  |10179|  11.4M|            _PyStackRef *null;
  |  |10180|       |            /* Skip 1 cache entry */
  |  |10181|       |            // _NOP
  |  |10182|  11.4M|            {
  |  |10183|  11.4M|            }
  |  |10184|       |            // _LOAD_GLOBAL_MODULE
  |  |10185|  11.4M|            {
  |  |10186|  11.4M|                uint16_t version = read_u16(&this_instr[2].cache);
  |  |10187|  11.4M|                uint16_t index = read_u16(&this_instr[4].cache);
  |  |10188|  11.4M|                PyDictObject *dict = (PyDictObject *)GLOBALS();
  |  |  ------------------
  |  |  |  |  326|  11.4M|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |10189|  11.4M|                if (!PyDict_CheckExact(dict)) {
  |  |  ------------------
  |  |  |  |   19|  11.4M|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  11.4M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  11.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  11.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10189:21): [True: 0, False: 11.4M]
  |  |  ------------------
  |  |10190|      0|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10191|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10191:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10192|      0|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10193|      0|                }
  |  |10194|  11.4M|                PyDictKeysObject *keys = FT_ATOMIC_LOAD_PTR_ACQUIRE(dict->ma_keys);
  |  |  ------------------
  |  |  |  |  150|  11.4M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  |  |  ------------------
  |  |10195|  11.4M|                if (FT_ATOMIC_LOAD_UINT32_RELAXED(keys->dk_version) != version) {
  |  |  ------------------
  |  |  |  |  159|  11.4M|#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (10195:21): [True: 4.82k, False: 11.4M]
  |  |  ------------------
  |  |10196|  4.82k|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|  4.82k|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10197|  4.82k|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10197:21): [True: 4.82k, False: 0]
  |  |  ------------------
  |  |10198|  4.82k|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|  4.82k|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10199|      0|                }
  |  |10200|  11.4M|                assert(keys->dk_kind == DICT_KEYS_UNICODE);
  |  |  ------------------
  |  |  |  Branch (10200:17): [True: 11.4M, False: 0]
  |  |  ------------------
  |  |10201|  11.4M|                PyDictUnicodeEntry *entries = DK_UNICODE_ENTRIES(keys);
  |  |10202|  11.4M|                assert(index < DK_SIZE(keys));
  |  |  ------------------
  |  |  |  Branch (10202:17): [True: 11.4M, False: 0]
  |  |  ------------------
  |  |10203|  11.4M|                PyObject *res_o = FT_ATOMIC_LOAD_PTR_CONSUME(entries[index].me_value);
  |  |  ------------------
  |  |  |  |  151|  11.4M|#define FT_ATOMIC_LOAD_PTR_CONSUME(value) value
  |  |  ------------------
  |  |10204|  11.4M|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10204:21): [True: 0, False: 11.4M]
  |  |  ------------------
  |  |10205|      0|                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10206|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |  ------------------
  |  |  |  Branch (10206:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10207|      0|                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10208|      0|                }
  |  |10209|       |                #if Py_GIL_DISABLED
  |  |10210|       |                int increfed = _Py_TryIncrefCompareStackRef(&entries[index].me_value, res_o, &res);
  |  |10211|       |                if (!increfed) {
  |  |10212|       |                    UPDATE_MISS_STATS(LOAD_GLOBAL);
  |  |10213|       |                    assert(_PyOpcode_Deopt[opcode] == (LOAD_GLOBAL));
  |  |10214|       |                    JUMP_TO_PREDICTED(LOAD_GLOBAL);
  |  |10215|       |                }
  |  |10216|       |                #else
  |  |10217|  11.4M|                res = PyStackRef_FromPyObjectNew(res_o);
  |  |  ------------------
  |  |  |  |  611|  11.4M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  11.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10218|  11.4M|                #endif
  |  |10219|  11.4M|                STAT_INC(LOAD_GLOBAL, hit);
  |  |  ------------------
  |  |  |  |   73|  11.4M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |10220|  11.4M|            }
  |  |10221|       |            // _PUSH_NULL_CONDITIONAL
  |  |10222|      0|            {
  |  |10223|  11.4M|                null = &stack_pointer[1];
  |  |10224|  11.4M|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (10224:21): [True: 2.91M, False: 8.53M]
  |  |  ------------------
  |  |10225|  2.91M|                    null[0] = PyStackRef_NULL;
  |  |10226|  2.91M|                }
  |  |10227|  11.4M|            }
  |  |10228|  11.4M|            stack_pointer[0] = res;
  |  |10229|  11.4M|            stack_pointer += 1 + (oparg & 1);
  |  |10230|  11.4M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  11.4M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10231|  11.4M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  11.4M|    { \
  |  |  |  |  201|  11.4M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  11.4M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  11.4M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  11.4M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  11.4M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  11.4M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  11.4M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  11.4M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 11.4M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  11.4M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  11.4M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  11.4M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  11.4M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  11.4M|    }
  |  |  ------------------
  |  |10232|  11.4M|        }
  |  |10233|       |
  |  |10234|    431|        TARGET(LOAD_LOCALS) {
  |  |  ------------------
  |  |  |  |  132|    431|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10235|       |            #if _Py_TAIL_CALL_INTERP
  |  |10236|       |            int opcode = LOAD_LOCALS;
  |  |10237|       |            (void)(opcode);
  |  |10238|       |            #endif
  |  |10239|    431|            frame->instr_ptr = next_instr;
  |  |10240|    431|            next_instr += 1;
  |  |10241|    431|            INSTRUCTION_STATS(LOAD_LOCALS);
  |  |  ------------------
  |  |  |  |   71|    431|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10242|    431|            _PyStackRef locals;
  |  |10243|    431|            PyObject *l = LOCALS();
  |  |  ------------------
  |  |  |  |  328|    431|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  |10244|    431|            if (l == NULL) {
  |  |  ------------------
  |  |  |  Branch (10244:17): [True: 0, False: 431]
  |  |  ------------------
  |  |10245|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10246|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10247|      0|                _PyErr_SetString(tstate, PyExc_SystemError,
  |  |10248|      0|                                 "no locals found");
  |  |10249|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10250|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10251|      0|            }
  |  |10252|    431|            locals = PyStackRef_FromPyObjectNew(l);
  |  |  ------------------
  |  |  |  |  611|    431|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    431|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    431|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10253|    431|            stack_pointer[0] = locals;
  |  |10254|    431|            stack_pointer += 1;
  |  |10255|    431|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    431|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10256|    431|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    431|    { \
  |  |  |  |  201|    431|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    431|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    431|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    431|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    431|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    431|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    431|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    431|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 431]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    431|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    431|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    431|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    431|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    431|    }
  |  |  ------------------
  |  |10257|    431|        }
  |  |10258|       |
  |  |10259|  5.21k|        TARGET(LOAD_NAME) {
  |  |  ------------------
  |  |  |  |  132|  5.21k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10260|       |            #if _Py_TAIL_CALL_INTERP
  |  |10261|       |            int opcode = LOAD_NAME;
  |  |10262|       |            (void)(opcode);
  |  |10263|       |            #endif
  |  |10264|  5.21k|            frame->instr_ptr = next_instr;
  |  |10265|  5.21k|            next_instr += 1;
  |  |10266|  5.21k|            INSTRUCTION_STATS(LOAD_NAME);
  |  |  ------------------
  |  |  |  |   71|  5.21k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10267|  5.21k|            _PyStackRef v;
  |  |10268|  5.21k|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|  5.21k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  5.21k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  5.21k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  5.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10268:30): [True: 5.21k, False: 0]
  |  |  ------------------
  |  |10269|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10270|  5.21k|            _PyFrame_StackPointerValidate(frame);
  |  |10271|  5.21k|            PyObject *v_o = _PyEval_LoadName(tstate, frame, name);
  |  |10272|  5.21k|            _PyFrame_StackPointerInvalidate(frame);
  |  |10273|  5.21k|            if (v_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10273:17): [True: 0, False: 5.21k]
  |  |  ------------------
  |  |10274|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10275|      0|            }
  |  |10276|  5.21k|            if (PyLazyImport_CheckExact(v_o)) {
  |  |  ------------------
  |  |  |  |   15|  5.21k|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  5.21k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  5.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  5.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 5.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10277|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10277:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10278|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10279|      0|                PyObject *l_v = _PyImport_LoadLazyImportTstate(tstate, v_o);
  |  |10280|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10281|      0|                if (l_v == NULL) {
  |  |  ------------------
  |  |  |  Branch (10281:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10282|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10282:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10283|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |10284|      0|                    Py_DECREF(v_o);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10285|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10286|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10287|      0|                }
  |  |10288|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10288:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10289|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10290|      0|                int err = PyDict_SetItem(GLOBALS(), name, l_v);
  |  |  ------------------
  |  |  |  |  326|      0|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |10291|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10292|      0|                if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (10292:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10293|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10293:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10294|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |10295|      0|                    Py_DECREF(v_o);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10296|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10297|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10297:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10298|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |10299|      0|                    Py_DECREF(l_v);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10300|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10301|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10302|      0|                }
  |  |10303|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10303:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10304|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10305|      0|                Py_SETREF(v_o, l_v);
  |  |  ------------------
  |  |  |  |  354|      0|    do { \
  |  |  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  359|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10306|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10307|      0|            }
  |  |10308|  5.21k|            v = PyStackRef_FromPyObjectSteal(v_o);
  |  |10309|  5.21k|            stack_pointer[0] = v;
  |  |10310|  5.21k|            stack_pointer += 1;
  |  |10311|  5.21k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  5.21k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10312|  5.21k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  5.21k|    { \
  |  |  |  |  201|  5.21k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  5.21k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  5.21k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  5.21k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  5.21k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  5.21k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  5.21k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  5.21k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 5.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  5.21k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  5.21k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  5.21k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  5.21k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  5.21k|    }
  |  |  ------------------
  |  |10313|  5.21k|        }
  |  |10314|       |
  |  |10315|  36.6M|        TARGET(LOAD_SMALL_INT) {
  |  |  ------------------
  |  |  |  |  132|  36.6M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10316|       |            #if _Py_TAIL_CALL_INTERP
  |  |10317|       |            int opcode = LOAD_SMALL_INT;
  |  |10318|       |            (void)(opcode);
  |  |10319|       |            #endif
  |  |10320|  36.6M|            frame->instr_ptr = next_instr;
  |  |10321|  36.6M|            next_instr += 1;
  |  |10322|  36.6M|            INSTRUCTION_STATS(LOAD_SMALL_INT);
  |  |  ------------------
  |  |  |  |   71|  36.6M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10323|  36.6M|            _PyStackRef value;
  |  |10324|  36.6M|            assert(oparg < _PY_NSMALLPOSINTS);
  |  |  ------------------
  |  |  |  Branch (10324:13): [True: 36.6M, False: 0]
  |  |  ------------------
  |  |10325|  36.6M|            PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg];
  |  |  ------------------
  |  |  |  |   59|  36.6M|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|  36.6M|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|  36.6M|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           PyObject *obj = (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS + oparg];
  |  |  ------------------
  |  |  |  |   98|  36.6M|#define _PY_NSMALLNEGINTS           5
  |  |  ------------------
  |  |10326|  36.6M|            value = PyStackRef_FromPyObjectBorrow(obj);
  |  |10327|  36.6M|            stack_pointer[0] = value;
  |  |10328|  36.6M|            stack_pointer += 1;
  |  |10329|  36.6M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  36.6M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10330|  36.6M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  36.6M|    { \
  |  |  |  |  201|  36.6M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  36.6M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  36.6M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  36.6M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  36.6M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  36.6M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  36.6M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  36.6M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 36.6M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  36.6M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  36.6M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  36.6M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  36.6M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  36.6M|    }
  |  |  ------------------
  |  |10331|  36.6M|        }
  |  |10332|       |
  |  |10333|  4.92k|        TARGET(LOAD_SPECIAL) {
  |  |  ------------------
  |  |  |  |  132|  4.92k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10334|       |            #if _Py_TAIL_CALL_INTERP
  |  |10335|       |            int opcode = LOAD_SPECIAL;
  |  |10336|       |            (void)(opcode);
  |  |10337|       |            #endif
  |  |10338|  4.92k|            frame->instr_ptr = next_instr;
  |  |10339|  4.92k|            next_instr += 1;
  |  |10340|  4.92k|            INSTRUCTION_STATS(LOAD_SPECIAL);
  |  |  ------------------
  |  |  |  |   71|  4.92k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10341|  4.92k|            _PyStackRef self;
  |  |10342|  4.92k|            _PyStackRef *method_and_self;
  |  |10343|       |            // _INSERT_NULL
  |  |10344|  4.92k|            {
  |  |10345|  4.92k|                self = stack_pointer[-1];
  |  |10346|  4.92k|                method_and_self = &stack_pointer[-1];
  |  |10347|  4.92k|                method_and_self[1] = self;
  |  |10348|  4.92k|                method_and_self[0] = PyStackRef_NULL;
  |  |10349|  4.92k|            }
  |  |10350|       |            // _LOAD_SPECIAL
  |  |10351|  4.92k|            {
  |  |10352|  4.92k|                method_and_self = &stack_pointer[-1];
  |  |10353|  4.92k|                PyObject *name = _Py_SpecialMethods[oparg].name;
  |  |10354|  4.92k|                stack_pointer += 1;
  |  |10355|  4.92k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  4.92k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10356|  4.92k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10357|  4.92k|                _PyFrame_StackPointerValidate(frame);
  |  |10358|  4.92k|                int err = _PyObject_LookupSpecialMethod(name, &method_and_self[0],
  |  |10359|  4.92k|                    &method_and_self[1]);
  |  |10360|  4.92k|                _PyFrame_StackPointerInvalidate(frame);
  |  |10361|  4.92k|                if (err <= 0) {
  |  |  ------------------
  |  |  |  Branch (10361:21): [True: 0, False: 4.92k]
  |  |  ------------------
  |  |10362|      0|                    if (err == 0) {
  |  |  ------------------
  |  |  |  Branch (10362:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10363|      0|                        PyObject *owner = PyStackRef_AsPyObjectBorrow(method_and_self[1]);
  |  |10364|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10364:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10365|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10366|      0|                        const char *errfmt = _PyEval_SpecialMethodCanSuggest(owner, oparg)
  |  |  ------------------
  |  |  |  Branch (10366:46): [True: 0, False: 0]
  |  |  ------------------
  |  |10367|      0|                        ? _Py_SpecialMethods[oparg].error_suggestion
  |  |10368|      0|                    : _Py_SpecialMethods[oparg].error;
  |  |10369|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10370|      0|                        assert(!_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (10370:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10371|      0|                        assert(errfmt != NULL);
  |  |  ------------------
  |  |  |  Branch (10371:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10372|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10372:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10373|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10374|      0|                        _PyErr_Format(tstate, PyExc_TypeError, errfmt, owner);
  |  |10375|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10376|      0|                    }
  |  |10377|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10378|      0|                }
  |  |10379|  4.92k|            }
  |  |10380|  4.92k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  4.92k|    { \
  |  |  |  |  201|  4.92k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  4.92k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.92k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  4.92k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  4.92k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.92k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  4.92k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  4.92k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4.92k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  4.92k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  4.92k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  4.92k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  4.92k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  4.92k|    }
  |  |  ------------------
  |  |10381|  4.92k|        }
  |  |10382|       |
  |  |10383|     28|        TARGET(LOAD_SUPER_ATTR) {
  |  |  ------------------
  |  |  |  |  132|     28|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10384|       |            #if _Py_TAIL_CALL_INTERP
  |  |10385|       |            int opcode = LOAD_SUPER_ATTR;
  |  |10386|       |            (void)(opcode);
  |  |10387|       |            #endif
  |  |10388|     28|            frame->instr_ptr = next_instr;
  |  |10389|     28|            next_instr += 2;
  |  |10390|     28|            INSTRUCTION_STATS(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |   71|     28|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10391|     28|            PREDICTED_LOAD_SUPER_ATTR:;
  |  |10392|     28|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  |10393|     28|            (void)this_instr;
  |  |10394|     28|            opcode = LOAD_SUPER_ATTR;
  |  |  ------------------
  |  |  |  |  105|     28|#define LOAD_SUPER_ATTR                         92
  |  |  ------------------
  |  |10395|     28|            _PyStackRef global_super_st;
  |  |10396|     28|            _PyStackRef class_st;
  |  |10397|     28|            _PyStackRef self_st;
  |  |10398|     28|            _PyStackRef attr;
  |  |10399|     28|            _PyStackRef *null;
  |  |10400|       |            // _SPECIALIZE_LOAD_SUPER_ATTR
  |  |10401|     28|            {
  |  |10402|     28|                class_st = stack_pointer[-2];
  |  |10403|     28|                global_super_st = stack_pointer[-3];
  |  |10404|     28|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |10405|     28|                (void)counter;
  |  |10406|     28|                #if ENABLE_SPECIALIZATION
  |  |10407|     28|                int load_method = oparg & 1;
  |  |10408|     28|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|     28|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 13, False: 15]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10409|     13|                    next_instr = this_instr;
  |  |10410|     13|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10411|     13|                    _PyFrame_StackPointerValidate(frame);
  |  |10412|     13|                    _Py_Specialize_LoadSuperAttr(global_super_st, class_st, next_instr, load_method);
  |  |10413|     13|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10414|     13|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|     13|    { \
  |  |  |  |  217|     13|        opcode = next_instr->op.code; \
  |  |  |  |  218|     13|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     13|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|     13|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|     13|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|     13|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|     13|    }
  |  |  ------------------
  |  |10415|     13|                }
  |  |10416|     28|                OPCODE_DEFERRED_INC(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |   90|     28|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |10417|     28|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|     28|    do { \
  |  |  |  |  378|     28|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|     28|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10418|     28|                #endif  /* ENABLE_SPECIALIZATION */
  |  |10419|     28|            }
  |  |10420|       |            // _LOAD_SUPER_ATTR
  |  |10421|     28|            {
  |  |10422|     28|                self_st = stack_pointer[-1];
  |  |10423|     28|                PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st);
  |  |10424|     28|                PyObject *class = PyStackRef_AsPyObjectBorrow(class_st);
  |  |10425|     28|                PyObject *self = PyStackRef_AsPyObjectBorrow(self_st);
  |  |10426|     28|                if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) {
  |  |  ------------------
  |  |  |  |  236|     28|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  |  |  ------------------
  |  |  |  Branch (10426:21): [True: 0, False: 28]
  |  |  ------------------
  |  |10427|      0|                    PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING;
  |  |  ------------------
  |  |  |  Branch (10427:37): [True: 0, False: 0]
  |  |  ------------------
  |  |10428|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10429|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |10430|      0|                    int err = _Py_call_instrumentation_2args(
  |  |10431|      0|                        tstate, PY_MONITORING_EVENT_CALL,
  |  |  ------------------
  |  |  |  |   18|      0|#define PY_MONITORING_EVENT_CALL 4
  |  |  ------------------
  |  |10432|      0|                        frame, this_instr, global_super, arg);
  |  |10433|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10434|      0|                    if (err) {
  |  |  ------------------
  |  |  |  Branch (10434:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10435|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10435:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10436|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10437|      0|                        _PyStackRef tmp = self_st;
  |  |10438|      0|                        self_st = PyStackRef_NULL;
  |  |10439|      0|                        stack_pointer[-1] = self_st;
  |  |10440|      0|                        PyStackRef_CLOSE(tmp);
  |  |10441|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10442|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10442:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10443|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10444|      0|                        tmp = class_st;
  |  |10445|      0|                        class_st = PyStackRef_NULL;
  |  |10446|      0|                        stack_pointer[-2] = class_st;
  |  |10447|      0|                        PyStackRef_CLOSE(tmp);
  |  |10448|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10449|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10449:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10450|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10451|      0|                        tmp = global_super_st;
  |  |10452|      0|                        global_super_st = PyStackRef_NULL;
  |  |10453|      0|                        stack_pointer[-3] = global_super_st;
  |  |10454|      0|                        PyStackRef_CLOSE(tmp);
  |  |10455|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10456|      0|                        stack_pointer += -3;
  |  |10457|      0|                        ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10458|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10459|      0|                    }
  |  |10460|      0|                }
  |  |10461|     28|                PyObject *super;
  |  |10462|     28|                {
  |  |10463|     28|                    PyObject *stack[] = {class, self};
  |  |10464|     28|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10465|     28|                    _PyFrame_StackPointerValidate(frame);
  |  |10466|     28|                    super = PyObject_Vectorcall(global_super, stack, oparg & 2, NULL);
  |  |10467|     28|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10468|     28|                }
  |  |10469|     28|                if (opcode == INSTRUMENTED_LOAD_SUPER_ATTR) {
  |  |  ------------------
  |  |  |  |  236|     28|#define INSTRUMENTED_LOAD_SUPER_ATTR           248
  |  |  ------------------
  |  |  |  Branch (10469:21): [True: 0, False: 28]
  |  |  ------------------
  |  |10470|      0|                    PyObject *arg = oparg & 2 ? class : &_PyInstrumentation_MISSING;
  |  |  ------------------
  |  |  |  Branch (10470:37): [True: 0, False: 0]
  |  |  ------------------
  |  |10471|      0|                    if (super == NULL) {
  |  |  ------------------
  |  |  |  Branch (10471:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10472|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10472:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10473|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10474|      0|                        _Py_call_instrumentation_exc2(
  |  |10475|      0|                            tstate, PY_MONITORING_EVENT_C_RAISE,
  |  |  ------------------
  |  |  |  |   45|      0|#define PY_MONITORING_EVENT_C_RAISE 17
  |  |  ------------------
  |  |10476|      0|                            frame, this_instr, global_super, arg);
  |  |10477|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10478|      0|                    }
  |  |10479|      0|                    else {
  |  |10480|      0|                        assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10480:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10481|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |10482|      0|                        int err = _Py_call_instrumentation_2args(
  |  |10483|      0|                            tstate, PY_MONITORING_EVENT_C_RETURN,
  |  |  ------------------
  |  |  |  |   44|      0|#define PY_MONITORING_EVENT_C_RETURN 16
  |  |  ------------------
  |  |10484|      0|                            frame, this_instr, global_super, arg);
  |  |10485|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |10486|      0|                        if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (10486:29): [True: 0, False: 0]
  |  |  ------------------
  |  |10487|      0|                            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10487:29): [True: 0, False: 0]
  |  |  ------------------
  |  |10488|      0|                            _PyFrame_StackPointerValidate(frame);
  |  |10489|      0|                            Py_CLEAR(super);
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10490|      0|                            _PyFrame_StackPointerInvalidate(frame);
  |  |10491|      0|                        }
  |  |10492|      0|                    }
  |  |10493|      0|                }
  |  |10494|     28|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10494:17): [True: 15, False: 13]
  |  |  ------------------
  |  |10495|     15|                _PyFrame_StackPointerValidate(frame);
  |  |10496|     15|                _PyStackRef tmp = self_st;
  |  |10497|     15|                self_st = PyStackRef_NULL;
  |  |10498|     15|                stack_pointer[-1] = self_st;
  |  |10499|     15|                PyStackRef_CLOSE(tmp);
  |  |10500|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  |10501|     15|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10501:17): [True: 15, False: 0]
  |  |  ------------------
  |  |10502|     15|                _PyFrame_StackPointerValidate(frame);
  |  |10503|     15|                tmp = class_st;
  |  |10504|     15|                class_st = PyStackRef_NULL;
  |  |10505|     15|                stack_pointer[-2] = class_st;
  |  |10506|     15|                PyStackRef_CLOSE(tmp);
  |  |10507|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  |10508|     15|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10508:17): [True: 15, False: 0]
  |  |  ------------------
  |  |10509|     15|                _PyFrame_StackPointerValidate(frame);
  |  |10510|     15|                tmp = global_super_st;
  |  |10511|     15|                global_super_st = PyStackRef_NULL;
  |  |10512|     15|                stack_pointer[-3] = global_super_st;
  |  |10513|     15|                PyStackRef_CLOSE(tmp);
  |  |10514|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  |10515|     15|                stack_pointer += -3;
  |  |10516|     15|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10517|     15|                if (super == NULL) {
  |  |  ------------------
  |  |  |  Branch (10517:21): [True: 0, False: 15]
  |  |  ------------------
  |  |10518|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10519|      0|                }
  |  |10520|     15|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
  |  |  ------------------
  |  |  |  |  236|     15|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|     15|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|     15|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10520:34): [True: 15, False: 0]
  |  |  ------------------
  |  |10521|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10522|     15|                _PyFrame_StackPointerValidate(frame);
  |  |10523|     15|                PyObject *attr_o = PyObject_GetAttr(super, name);
  |  |10524|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  |10525|     15|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10525:17): [True: 15, False: 0]
  |  |  ------------------
  |  |10526|     15|                _PyFrame_StackPointerValidate(frame);
  |  |10527|     15|                Py_DECREF(super);
  |  |  ------------------
  |  |  |  |   80|     15|    do { \
  |  |  |  |   81|     15|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|     15|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|     15|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|     15|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|     15|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|     15|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 15, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|     15|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|     15|    do { \
  |  |  |  |  |  |  113|     15|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|     15|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|     15|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|     15|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|     15|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|     15|            (*dealloc)(op); \
  |  |  |  |   91|     15|        } \
  |  |  |  |   92|     15|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 15]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10528|     15|                _PyFrame_StackPointerInvalidate(frame);
  |  |10529|     15|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10529:21): [True: 0, False: 15]
  |  |  ------------------
  |  |10530|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10531|      0|                }
  |  |10532|     15|                attr = PyStackRef_FromPyObjectSteal(attr_o);
  |  |10533|     15|            }
  |  |10534|       |            // _PUSH_NULL_CONDITIONAL
  |  |10535|      0|            {
  |  |10536|     15|                null = &stack_pointer[1];
  |  |10537|     15|                if (oparg & 1) {
  |  |  ------------------
  |  |  |  Branch (10537:21): [True: 9, False: 6]
  |  |  ------------------
  |  |10538|      9|                    null[0] = PyStackRef_NULL;
  |  |10539|      9|                }
  |  |10540|     15|            }
  |  |10541|     15|            stack_pointer[0] = attr;
  |  |10542|     15|            stack_pointer += 1 + (oparg & 1);
  |  |10543|     15|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     15|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10544|     15|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     15|    { \
  |  |  |  |  201|     15|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     15|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     15|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     15|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     15|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     15|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     15|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     15|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 15]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     15|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     15|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     15|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     15|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     15|    }
  |  |  ------------------
  |  |10545|     15|        }
  |  |10546|       |
  |  |10547|     81|        TARGET(LOAD_SUPER_ATTR_ATTR) {
  |  |  ------------------
  |  |  |  |  132|     81|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10548|       |            #if _Py_TAIL_CALL_INTERP
  |  |10549|       |            int opcode = LOAD_SUPER_ATTR_ATTR;
  |  |10550|       |            (void)(opcode);
  |  |10551|       |            #endif
  |  |10552|     81|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |10553|     81|            (void)this_instr;
  |  |10554|     81|            frame->instr_ptr = next_instr;
  |  |10555|     81|            next_instr += 2;
  |  |10556|     81|            INSTRUCTION_STATS(LOAD_SUPER_ATTR_ATTR);
  |  |  ------------------
  |  |  |  |   71|     81|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10557|     81|            static_assert(INLINE_CACHE_ENTRIES_LOAD_SUPER_ATTR == 1, "incorrect cache size");
  |  |10558|     81|            _PyStackRef global_super_st;
  |  |10559|     81|            _PyStackRef class_st;
  |  |10560|     81|            _PyStackRef self_st;
  |  |10561|     81|            _PyStackRef attr_st;
  |  |10562|       |            /* Skip 1 cache entry */
  |  |10563|     81|            self_st = stack_pointer[-1];
  |  |10564|     81|            class_st = stack_pointer[-2];
  |  |10565|     81|            global_super_st = stack_pointer[-3];
  |  |10566|     81|            PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st);
  |  |10567|     81|            PyObject *class = PyStackRef_AsPyObjectBorrow(class_st);
  |  |10568|     81|            PyObject *self = PyStackRef_AsPyObjectBorrow(self_st);
  |  |10569|     81|            assert(!(oparg & 1));
  |  |  ------------------
  |  |  |  Branch (10569:13): [True: 81, False: 0]
  |  |  ------------------
  |  |10570|     81|            if (global_super != (PyObject *)&PySuper_Type) {
  |  |  ------------------
  |  |  |  Branch (10570:17): [True: 0, False: 81]
  |  |  ------------------
  |  |10571|      0|                UPDATE_MISS_STATS(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10572|      0|                assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR));
  |  |  ------------------
  |  |  |  Branch (10572:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10573|      0|                JUMP_TO_PREDICTED(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10574|      0|            }
  |  |10575|     81|            if (!PyType_Check(class)) {
  |  |  ------------------
  |  |  |  |  766|     81|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     81|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     81|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10575:17): [True: 0, False: 81]
  |  |  ------------------
  |  |10576|      0|                UPDATE_MISS_STATS(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10577|      0|                assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR));
  |  |  ------------------
  |  |  |  Branch (10577:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10578|      0|                JUMP_TO_PREDICTED(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10579|      0|            }
  |  |10580|     81|            STAT_INC(LOAD_SUPER_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|     81|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |10581|     81|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
  |  |  ------------------
  |  |  |  |  236|     81|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|     81|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|     81|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     81|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10581:30): [True: 81, False: 0]
  |  |  ------------------
  |  |10582|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10583|     81|            _PyFrame_StackPointerValidate(frame);
  |  |10584|     81|            PyObject *attr = _PySuper_Lookup((PyTypeObject *)class, self, name, NULL);
  |  |10585|     81|            _PyFrame_StackPointerInvalidate(frame);
  |  |10586|     81|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10586:13): [True: 81, False: 0]
  |  |  ------------------
  |  |10587|     81|            _PyFrame_StackPointerValidate(frame);
  |  |10588|     81|            _PyStackRef tmp = self_st;
  |  |10589|     81|            self_st = PyStackRef_NULL;
  |  |10590|     81|            stack_pointer[-1] = self_st;
  |  |10591|     81|            PyStackRef_CLOSE(tmp);
  |  |10592|     81|            _PyFrame_StackPointerInvalidate(frame);
  |  |10593|     81|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10593:13): [True: 81, False: 0]
  |  |  ------------------
  |  |10594|     81|            _PyFrame_StackPointerValidate(frame);
  |  |10595|     81|            tmp = class_st;
  |  |10596|     81|            class_st = PyStackRef_NULL;
  |  |10597|     81|            stack_pointer[-2] = class_st;
  |  |10598|     81|            PyStackRef_CLOSE(tmp);
  |  |10599|     81|            _PyFrame_StackPointerInvalidate(frame);
  |  |10600|     81|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10600:13): [True: 81, False: 0]
  |  |  ------------------
  |  |10601|     81|            _PyFrame_StackPointerValidate(frame);
  |  |10602|     81|            tmp = global_super_st;
  |  |10603|     81|            global_super_st = PyStackRef_NULL;
  |  |10604|     81|            stack_pointer[-3] = global_super_st;
  |  |10605|     81|            PyStackRef_CLOSE(tmp);
  |  |10606|     81|            _PyFrame_StackPointerInvalidate(frame);
  |  |10607|     81|            stack_pointer += -3;
  |  |10608|     81|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     81|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10609|     81|            if (attr == NULL) {
  |  |  ------------------
  |  |  |  Branch (10609:17): [True: 0, False: 81]
  |  |  ------------------
  |  |10610|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10611|      0|            }
  |  |10612|     81|            attr_st = PyStackRef_FromPyObjectSteal(attr);
  |  |10613|     81|            stack_pointer[0] = attr_st;
  |  |10614|     81|            stack_pointer += 1;
  |  |10615|     81|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     81|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10616|     81|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     81|    { \
  |  |  |  |  201|     81|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     81|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     81|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     81|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     81|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     81|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     81|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     81|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 81]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     81|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     81|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     81|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     81|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     81|    }
  |  |  ------------------
  |  |10617|     81|        }
  |  |10618|       |
  |  |10619|  1.03k|        TARGET(LOAD_SUPER_ATTR_METHOD) {
  |  |  ------------------
  |  |  |  |  132|  1.03k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10620|       |            #if _Py_TAIL_CALL_INTERP
  |  |10621|       |            int opcode = LOAD_SUPER_ATTR_METHOD;
  |  |10622|       |            (void)(opcode);
  |  |10623|       |            #endif
  |  |10624|  1.03k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |10625|  1.03k|            (void)this_instr;
  |  |10626|  1.03k|            frame->instr_ptr = next_instr;
  |  |10627|  1.03k|            next_instr += 2;
  |  |10628|  1.03k|            INSTRUCTION_STATS(LOAD_SUPER_ATTR_METHOD);
  |  |  ------------------
  |  |  |  |   71|  1.03k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10629|  1.03k|            static_assert(INLINE_CACHE_ENTRIES_LOAD_SUPER_ATTR == 1, "incorrect cache size");
  |  |10630|  1.03k|            _PyStackRef global_super_st;
  |  |10631|  1.03k|            _PyStackRef class_st;
  |  |10632|  1.03k|            _PyStackRef self_st;
  |  |10633|  1.03k|            _PyStackRef attr;
  |  |10634|  1.03k|            _PyStackRef self_or_null;
  |  |10635|       |            /* Skip 1 cache entry */
  |  |10636|       |            // _GUARD_LOAD_SUPER_ATTR_METHOD
  |  |10637|  1.03k|            {
  |  |10638|  1.03k|                class_st = stack_pointer[-2];
  |  |10639|  1.03k|                global_super_st = stack_pointer[-3];
  |  |10640|  1.03k|                PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st);
  |  |10641|  1.03k|                PyObject *class = PyStackRef_AsPyObjectBorrow(class_st);
  |  |10642|  1.03k|                assert(oparg & 1);
  |  |  ------------------
  |  |  |  Branch (10642:17): [True: 1.03k, False: 0]
  |  |  ------------------
  |  |10643|  1.03k|                if (global_super != (PyObject *)&PySuper_Type) {
  |  |  ------------------
  |  |  |  Branch (10643:21): [True: 0, False: 1.03k]
  |  |  ------------------
  |  |10644|      0|                    UPDATE_MISS_STATS(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10645|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR));
  |  |  ------------------
  |  |  |  Branch (10645:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10646|      0|                    JUMP_TO_PREDICTED(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10647|      0|                }
  |  |10648|  1.03k|                if (!PyType_Check(class)) {
  |  |  ------------------
  |  |  |  |  766|  1.03k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10648:21): [True: 0, False: 1.03k]
  |  |  ------------------
  |  |10649|      0|                    UPDATE_MISS_STATS(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |10650|      0|                    assert(_PyOpcode_Deopt[opcode] == (LOAD_SUPER_ATTR));
  |  |  ------------------
  |  |  |  Branch (10650:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10651|      0|                    JUMP_TO_PREDICTED(LOAD_SUPER_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |10652|      0|                }
  |  |10653|  1.03k|            }
  |  |10654|       |            // _LOAD_SUPER_ATTR_METHOD
  |  |10655|  1.03k|            {
  |  |10656|  1.03k|                self_st = stack_pointer[-1];
  |  |10657|  1.03k|                PyObject *class = PyStackRef_AsPyObjectBorrow(class_st);
  |  |10658|  1.03k|                PyObject *self = PyStackRef_AsPyObjectBorrow(self_st);
  |  |10659|  1.03k|                STAT_INC(LOAD_SUPER_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|  1.03k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |10660|  1.03k|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg >> 2);
  |  |  ------------------
  |  |  |  |  236|  1.03k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  1.03k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  1.03k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10660:34): [True: 1.03k, False: 0]
  |  |  ------------------
  |  |10661|      0|                PyTypeObject *cls = (PyTypeObject *)class;
  |  |10662|  1.03k|                int method_found = 0;
  |  |10663|  1.03k|                PyObject *attr_o;
  |  |10664|  1.03k|                {
  |  |10665|  1.03k|                    int *method_found_ptr = &method_found;
  |  |10666|  1.03k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10667|  1.03k|                    _PyFrame_StackPointerValidate(frame);
  |  |10668|  1.03k|                    attr_o = _PySuper_Lookup(cls, self, name,
  |  |10669|  1.03k|                        Py_TYPE(self)->tp_getattro == PyObject_GenericGetAttr ? method_found_ptr : NULL);
  |  |  ------------------
  |  |  |  |  213|  1.03k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10669:25): [True: 455, False: 582]
  |  |  ------------------
  |  |10670|  1.03k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10671|  1.03k|                }
  |  |10672|  1.03k|                if (attr_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10672:21): [True: 0, False: 1.03k]
  |  |  ------------------
  |  |10673|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10674|      0|                }
  |  |10675|  1.03k|                if (method_found) {
  |  |  ------------------
  |  |  |  Branch (10675:21): [True: 455, False: 582]
  |  |  ------------------
  |  |10676|    455|                    self_or_null = self_st;
  |  |10677|    582|                } else {
  |  |10678|    582|                    stack_pointer += -1;
  |  |10679|    582|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    582|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10680|    582|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10681|    582|                    _PyFrame_StackPointerValidate(frame);
  |  |10682|    582|                    PyStackRef_CLOSE(self_st);
  |  |10683|    582|                    _PyFrame_StackPointerInvalidate(frame);
  |  |10684|    582|                    self_or_null = PyStackRef_NULL;
  |  |10685|    582|                    stack_pointer += 1;
  |  |10686|    582|                }
  |  |10687|  1.03k|                stack_pointer += -1;
  |  |10688|  1.03k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.03k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10689|  1.03k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10690|  1.03k|                _PyFrame_StackPointerValidate(frame);
  |  |10691|  1.03k|                _PyStackRef tmp = global_super_st;
  |  |10692|  1.03k|                global_super_st = self_or_null;
  |  |10693|  1.03k|                stack_pointer[-2] = global_super_st;
  |  |10694|  1.03k|                PyStackRef_CLOSE(tmp);
  |  |10695|  1.03k|                _PyFrame_StackPointerInvalidate(frame);
  |  |10696|  1.03k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10696:17): [True: 1.03k, False: 0]
  |  |  ------------------
  |  |10697|  1.03k|                _PyFrame_StackPointerValidate(frame);
  |  |10698|  1.03k|                tmp = class_st;
  |  |10699|  1.03k|                class_st = PyStackRef_NULL;
  |  |10700|  1.03k|                stack_pointer[-1] = class_st;
  |  |10701|  1.03k|                PyStackRef_CLOSE(tmp);
  |  |10702|  1.03k|                _PyFrame_StackPointerInvalidate(frame);
  |  |10703|  1.03k|                stack_pointer += -2;
  |  |10704|  1.03k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.03k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10705|  1.03k|                attr = PyStackRef_FromPyObjectSteal(attr_o);
  |  |10706|  1.03k|            }
  |  |10707|      0|            stack_pointer[0] = attr;
  |  |10708|  1.03k|            stack_pointer[1] = self_or_null;
  |  |10709|  1.03k|            stack_pointer += 2;
  |  |10710|  1.03k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.03k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10711|  1.03k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.03k|    { \
  |  |  |  |  201|  1.03k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.03k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.03k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.03k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.03k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.03k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.03k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.03k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.03k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.03k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.03k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.03k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.03k|    }
  |  |  ------------------
  |  |10712|  1.03k|        }
  |  |10713|       |
  |  |10714|  1.50k|        TARGET(MAKE_CELL) {
  |  |  ------------------
  |  |  |  |  132|  1.50k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10715|       |            #if _Py_TAIL_CALL_INTERP
  |  |10716|       |            int opcode = MAKE_CELL;
  |  |10717|       |            (void)(opcode);
  |  |10718|       |            #endif
  |  |10719|  1.50k|            frame->instr_ptr = next_instr;
  |  |10720|  1.50k|            next_instr += 1;
  |  |10721|  1.50k|            INSTRUCTION_STATS(MAKE_CELL);
  |  |  ------------------
  |  |  |  |   71|  1.50k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10722|  1.50k|            PyObject *initial = PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|  1.50k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |10723|  1.50k|            PyObject *cell = PyCell_New(initial);
  |  |10724|  1.50k|            if (cell == NULL) {
  |  |  ------------------
  |  |  |  Branch (10724:17): [True: 0, False: 1.50k]
  |  |  ------------------
  |  |10725|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10726|      0|            }
  |  |10727|  1.50k|            _PyStackRef tmp = GETLOCAL(oparg);
  |  |  ------------------
  |  |  |  |  285|  1.50k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |10728|  1.50k|            GETLOCAL(oparg) = PyStackRef_FromPyObjectSteal(cell);
  |  |  ------------------
  |  |  |  |  285|  1.50k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |10729|  1.50k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10730|  1.50k|            _PyFrame_StackPointerValidate(frame);
  |  |10731|  1.50k|            PyStackRef_XCLOSE(tmp);
  |  |10732|  1.50k|            _PyFrame_StackPointerInvalidate(frame);
  |  |10733|  1.50k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.50k|    { \
  |  |  |  |  201|  1.50k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.50k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.50k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.50k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.50k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.50k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.50k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.50k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.50k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.50k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.50k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.50k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.50k|    }
  |  |  ------------------
  |  |10734|  1.50k|        }
  |  |10735|       |
  |  |10736|  4.98k|        TARGET(MAKE_FUNCTION) {
  |  |  ------------------
  |  |  |  |  132|  4.98k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10737|       |            #if _Py_TAIL_CALL_INTERP
  |  |10738|       |            int opcode = MAKE_FUNCTION;
  |  |10739|       |            (void)(opcode);
  |  |10740|       |            #endif
  |  |10741|  4.98k|            frame->instr_ptr = next_instr;
  |  |10742|  4.98k|            next_instr += 1;
  |  |10743|  4.98k|            INSTRUCTION_STATS(MAKE_FUNCTION);
  |  |  ------------------
  |  |  |  |   71|  4.98k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10744|  4.98k|            _PyStackRef codeobj_st;
  |  |10745|  4.98k|            _PyStackRef func;
  |  |10746|  4.98k|            _PyStackRef co;
  |  |10747|  4.98k|            _PyStackRef value;
  |  |10748|       |            // _MAKE_FUNCTION
  |  |10749|  4.98k|            {
  |  |10750|  4.98k|                codeobj_st = stack_pointer[-1];
  |  |10751|  4.98k|                PyObject *codeobj = PyStackRef_AsPyObjectBorrow(codeobj_st);
  |  |10752|  4.98k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10753|  4.98k|                _PyFrame_StackPointerValidate(frame);
  |  |10754|  4.98k|                PyFunctionObject *func_obj = (PyFunctionObject *)
  |  |10755|  4.98k|                PyFunction_New(codeobj, GLOBALS());
  |  |  ------------------
  |  |  |  |  326|  4.98k|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |10756|  4.98k|                _PyFrame_StackPointerInvalidate(frame);
  |  |10757|  4.98k|                if (func_obj == NULL) {
  |  |  ------------------
  |  |  |  Branch (10757:21): [True: 0, False: 4.98k]
  |  |  ------------------
  |  |10758|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10759|      0|                }
  |  |10760|  4.98k|                co = codeobj_st;
  |  |10761|  4.98k|                _PyFunction_SetVersion(
  |  |10762|  4.98k|                                   func_obj, ((PyCodeObject *)codeobj)->co_version);
  |  |10763|  4.98k|                func = PyStackRef_FromPyObjectSteal((PyObject *)func_obj);
  |  |10764|  4.98k|            }
  |  |10765|       |            // _POP_TOP
  |  |10766|      0|            {
  |  |10767|  4.98k|                value = co;
  |  |10768|  4.98k|                stack_pointer[-1] = func;
  |  |10769|  4.98k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10769:17): [True: 4.98k, False: 0]
  |  |  ------------------
  |  |10770|  4.98k|                _PyFrame_StackPointerValidate(frame);
  |  |10771|  4.98k|                PyStackRef_XCLOSE(value);
  |  |10772|  4.98k|                _PyFrame_StackPointerInvalidate(frame);
  |  |10773|  4.98k|            }
  |  |10774|  4.98k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  4.98k|    { \
  |  |  |  |  201|  4.98k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  4.98k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.98k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  4.98k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  4.98k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.98k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  4.98k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  4.98k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  4.98k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  4.98k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  4.98k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  4.98k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  4.98k|    }
  |  |  ------------------
  |  |10775|  4.98k|        }
  |  |10776|       |
  |  |10777|  11.6k|        TARGET(MAP_ADD) {
  |  |  ------------------
  |  |  |  |  132|  11.6k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10778|       |            #if _Py_TAIL_CALL_INTERP
  |  |10779|       |            int opcode = MAP_ADD;
  |  |10780|       |            (void)(opcode);
  |  |10781|       |            #endif
  |  |10782|  11.6k|            frame->instr_ptr = next_instr;
  |  |10783|  11.6k|            next_instr += 1;
  |  |10784|  11.6k|            INSTRUCTION_STATS(MAP_ADD);
  |  |  ------------------
  |  |  |  |   71|  11.6k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10785|  11.6k|            _PyStackRef dict_st;
  |  |10786|  11.6k|            _PyStackRef key;
  |  |10787|  11.6k|            _PyStackRef value;
  |  |10788|  11.6k|            value = stack_pointer[-1];
  |  |10789|  11.6k|            key = stack_pointer[-2];
  |  |10790|  11.6k|            dict_st = stack_pointer[-3 - (oparg - 1)];
  |  |10791|  11.6k|            PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
  |  |10792|  11.6k|            assert(PyDict_CheckExact(dict));
  |  |  ------------------
  |  |  |  Branch (10792:13): [True: 11.6k, False: 0]
  |  |  ------------------
  |  |10793|  11.6k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10794|  11.6k|            _PyFrame_StackPointerValidate(frame);
  |  |10795|  11.6k|            int err = _PyDict_SetItem_Take2(
  |  |10796|  11.6k|                (PyDictObject *)dict,
  |  |10797|  11.6k|                PyStackRef_AsPyObjectSteal(key),
  |  |10798|  11.6k|                PyStackRef_AsPyObjectSteal(value)
  |  |10799|  11.6k|            );
  |  |10800|  11.6k|            _PyFrame_StackPointerInvalidate(frame);
  |  |10801|  11.6k|            if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (10801:17): [True: 0, False: 11.6k]
  |  |  ------------------
  |  |10802|      0|                JUMP_TO_LABEL(pop_2_error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10803|      0|            }
  |  |10804|  11.6k|            stack_pointer += -2;
  |  |10805|  11.6k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  11.6k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10806|  11.6k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  11.6k|    { \
  |  |  |  |  201|  11.6k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  11.6k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  11.6k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  11.6k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  11.6k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  11.6k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  11.6k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  11.6k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 11.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  11.6k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  11.6k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  11.6k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  11.6k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  11.6k|    }
  |  |  ------------------
  |  |10807|  11.6k|        }
  |  |10808|       |
  |  |10809|      0|        TARGET(MATCH_CLASS) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10810|       |            #if _Py_TAIL_CALL_INTERP
  |  |10811|       |            int opcode = MATCH_CLASS;
  |  |10812|       |            (void)(opcode);
  |  |10813|       |            #endif
  |  |10814|      0|            frame->instr_ptr = next_instr;
  |  |10815|      0|            next_instr += 1;
  |  |10816|      0|            INSTRUCTION_STATS(MATCH_CLASS);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10817|      0|            _PyStackRef subject;
  |  |10818|      0|            _PyStackRef type;
  |  |10819|      0|            _PyStackRef names;
  |  |10820|      0|            _PyStackRef attrs;
  |  |10821|      0|            _PyStackRef s;
  |  |10822|      0|            _PyStackRef tp;
  |  |10823|      0|            _PyStackRef n;
  |  |10824|      0|            _PyStackRef value;
  |  |10825|       |            // _MATCH_CLASS
  |  |10826|      0|            {
  |  |10827|      0|                names = stack_pointer[-1];
  |  |10828|      0|                type = stack_pointer[-2];
  |  |10829|      0|                subject = stack_pointer[-3];
  |  |10830|      0|                assert(PyTuple_CheckExact(PyStackRef_AsPyObjectBorrow(names)));
  |  |  ------------------
  |  |  |  Branch (10830:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10831|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10832|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10833|      0|                PyObject *attrs_o = _PyEval_MatchClass(tstate,
  |  |10834|      0|                    PyStackRef_AsPyObjectBorrow(subject),
  |  |10835|      0|                    PyStackRef_AsPyObjectBorrow(type), oparg,
  |  |10836|      0|                    PyStackRef_AsPyObjectBorrow(names));
  |  |10837|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10838|      0|                if (attrs_o) {
  |  |  ------------------
  |  |  |  Branch (10838:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10839|      0|                    assert(PyTuple_CheckExact(attrs_o));
  |  |  ------------------
  |  |  |  Branch (10839:21): [True: 0, False: 0]
  |  |  ------------------
  |  |10840|      0|                    attrs = PyStackRef_FromPyObjectSteal(attrs_o);
  |  |10841|      0|                }
  |  |10842|      0|                else {
  |  |10843|      0|                    if (_PyErr_Occurred(tstate)) {
  |  |  ------------------
  |  |  |  Branch (10843:25): [True: 0, False: 0]
  |  |  ------------------
  |  |10844|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10845|      0|                    }
  |  |10846|      0|                    attrs = PyStackRef_None;
  |  |  ------------------
  |  |  |  |  485|      0|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10847|      0|                }
  |  |10848|      0|                s = subject;
  |  |10849|      0|                tp = type;
  |  |10850|      0|                n = names;
  |  |10851|      0|            }
  |  |10852|       |            // _POP_TOP
  |  |10853|      0|            {
  |  |10854|      0|                value = n;
  |  |10855|      0|                stack_pointer[-3] = attrs;
  |  |10856|      0|                stack_pointer[-2] = s;
  |  |10857|      0|                stack_pointer[-1] = tp;
  |  |10858|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (10858:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10859|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10860|      0|                PyStackRef_XCLOSE(value);
  |  |10861|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10862|      0|            }
  |  |10863|       |            // _POP_TOP
  |  |10864|      0|            {
  |  |10865|      0|                value = tp;
  |  |10866|      0|                stack_pointer += -1;
  |  |10867|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10868|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10869|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10870|      0|                PyStackRef_XCLOSE(value);
  |  |10871|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10872|      0|            }
  |  |10873|       |            // _POP_TOP
  |  |10874|      0|            {
  |  |10875|      0|                value = s;
  |  |10876|      0|                stack_pointer += -1;
  |  |10877|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10878|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10879|      0|                _PyFrame_StackPointerValidate(frame);
  |  |10880|      0|                PyStackRef_XCLOSE(value);
  |  |10881|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |10882|      0|            }
  |  |10883|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |10884|      0|        }
  |  |10885|       |
  |  |10886|      0|        TARGET(MATCH_KEYS) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10887|       |            #if _Py_TAIL_CALL_INTERP
  |  |10888|       |            int opcode = MATCH_KEYS;
  |  |10889|       |            (void)(opcode);
  |  |10890|       |            #endif
  |  |10891|      0|            frame->instr_ptr = next_instr;
  |  |10892|      0|            next_instr += 1;
  |  |10893|      0|            INSTRUCTION_STATS(MATCH_KEYS);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10894|      0|            _PyStackRef subject;
  |  |10895|      0|            _PyStackRef keys;
  |  |10896|      0|            _PyStackRef values_or_none;
  |  |10897|      0|            keys = stack_pointer[-1];
  |  |10898|      0|            subject = stack_pointer[-2];
  |  |10899|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10900|      0|            _PyFrame_StackPointerValidate(frame);
  |  |10901|      0|            PyObject *values_or_none_o = _PyEval_MatchKeys(tstate,
  |  |10902|      0|                PyStackRef_AsPyObjectBorrow(subject), PyStackRef_AsPyObjectBorrow(keys));
  |  |10903|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  |10904|      0|            if (values_or_none_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (10904:17): [True: 0, False: 0]
  |  |  ------------------
  |  |10905|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |10906|      0|            }
  |  |10907|      0|            values_or_none = PyStackRef_FromPyObjectSteal(values_or_none_o);
  |  |10908|      0|            stack_pointer[0] = values_or_none;
  |  |10909|      0|            stack_pointer += 1;
  |  |10910|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10911|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |10912|      0|        }
  |  |10913|       |
  |  |10914|      0|        TARGET(MATCH_MAPPING) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10915|       |            #if _Py_TAIL_CALL_INTERP
  |  |10916|       |            int opcode = MATCH_MAPPING;
  |  |10917|       |            (void)(opcode);
  |  |10918|       |            #endif
  |  |10919|      0|            frame->instr_ptr = next_instr;
  |  |10920|      0|            next_instr += 1;
  |  |10921|      0|            INSTRUCTION_STATS(MATCH_MAPPING);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10922|      0|            _PyStackRef subject;
  |  |10923|      0|            _PyStackRef res;
  |  |10924|      0|            subject = stack_pointer[-1];
  |  |10925|      0|            int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_MAPPING;
  |  |  ------------------
  |  |  |  |  492|      0|#define Py_TPFLAGS_MAPPING (1 << 6)
  |  |  ------------------
  |  |10926|      0|            res = match ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|      0|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           res = match ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|      0|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10926:19): [True: 0, False: 0]
  |  |  ------------------
  |  |10927|      0|            stack_pointer[0] = res;
  |  |10928|      0|            stack_pointer += 1;
  |  |10929|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10930|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |10931|      0|        }
  |  |10932|       |
  |  |10933|      0|        TARGET(MATCH_SEQUENCE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10934|       |            #if _Py_TAIL_CALL_INTERP
  |  |10935|       |            int opcode = MATCH_SEQUENCE;
  |  |10936|       |            (void)(opcode);
  |  |10937|       |            #endif
  |  |10938|      0|            frame->instr_ptr = next_instr;
  |  |10939|      0|            next_instr += 1;
  |  |10940|      0|            INSTRUCTION_STATS(MATCH_SEQUENCE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10941|      0|            _PyStackRef subject;
  |  |10942|      0|            _PyStackRef res;
  |  |10943|      0|            subject = stack_pointer[-1];
  |  |10944|      0|            int match = PyStackRef_TYPE(subject)->tp_flags & Py_TPFLAGS_SEQUENCE;
  |  |  ------------------
  |  |  |  |  490|      0|#define Py_TPFLAGS_SEQUENCE (1 << 5)
  |  |  ------------------
  |  |10945|      0|            res = match ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|      0|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           res = match ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|      0|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (10945:19): [True: 0, False: 0]
  |  |  ------------------
  |  |10946|      0|            stack_pointer[0] = res;
  |  |10947|      0|            stack_pointer += 1;
  |  |10948|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10949|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |10950|      0|        }
  |  |10951|       |
  |  |10952|  14.1M|        TARGET(NOP) {
  |  |  ------------------
  |  |  |  |  132|  14.1M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10953|       |            #if _Py_TAIL_CALL_INTERP
  |  |10954|       |            int opcode = NOP;
  |  |10955|       |            (void)(opcode);
  |  |10956|       |            #endif
  |  |10957|  14.1M|            frame->instr_ptr = next_instr;
  |  |10958|  14.1M|            next_instr += 1;
  |  |10959|  14.1M|            INSTRUCTION_STATS(NOP);
  |  |  ------------------
  |  |  |  |   71|  14.1M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10960|  14.1M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  14.1M|    { \
  |  |  |  |  201|  14.1M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  14.1M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  14.1M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  14.1M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  14.1M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  14.1M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  14.1M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  14.1M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 14.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  14.1M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  14.1M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  14.1M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  14.1M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  14.1M|    }
  |  |  ------------------
  |  |10961|  14.1M|        }
  |  |10962|       |
  |  |10963|  14.1M|        TARGET(NOT_TAKEN) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10964|       |            #if _Py_TAIL_CALL_INTERP
  |  |10965|       |            int opcode = NOT_TAKEN;
  |  |10966|       |            (void)(opcode);
  |  |10967|       |            #endif
  |  |10968|      0|            frame->instr_ptr = next_instr;
  |  |10969|      0|            next_instr += 1;
  |  |10970|      0|            INSTRUCTION_STATS(NOT_TAKEN);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10971|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |10972|      0|        }
  |  |10973|       |
  |  |10974|  39.0k|        TARGET(POP_EXCEPT) {
  |  |  ------------------
  |  |  |  |  132|  39.0k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10975|       |            #if _Py_TAIL_CALL_INTERP
  |  |10976|       |            int opcode = POP_EXCEPT;
  |  |10977|       |            (void)(opcode);
  |  |10978|       |            #endif
  |  |10979|  39.0k|            frame->instr_ptr = next_instr;
  |  |10980|  39.0k|            next_instr += 1;
  |  |10981|  39.0k|            INSTRUCTION_STATS(POP_EXCEPT);
  |  |  ------------------
  |  |  |  |   71|  39.0k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |10982|  39.0k|            _PyStackRef exc_value;
  |  |10983|  39.0k|            exc_value = stack_pointer[-1];
  |  |10984|  39.0k|            _PyErr_StackItem *exc_info = tstate->exc_info;
  |  |10985|  39.0k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |10986|  39.0k|            _PyFrame_StackPointerValidate(frame);
  |  |10987|  39.0k|            Py_XSETREF(exc_info->exc_value,
  |  |  ------------------
  |  |  |  |  376|  39.0k|    do { \
  |  |  |  |  377|  39.0k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|  39.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  378|  39.0k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|  39.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  379|  78.0k|        *_tmp_dst_ptr = (src); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:26): [True: 38.9k, False: 44]
  |  |  |  |  ------------------
  |  |  |  |  380|  39.0k|        Py_XDECREF(_tmp_old_dst); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   69|  39.0k|    do { \
  |  |  |  |  |  |   70|  39.0k|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  39.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  39.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   71|  39.0k|        if (xop != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (71:13): [True: 39.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|  39.0k|            Py_DECREF(xop); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   80|  39.0k|    do { \
  |  |  |  |  |  |  |  |   81|  39.0k|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|  39.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|  39.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   82|  39.0k|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  137|  39.0k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  171|  39.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   37|  39.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 39.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |  |  |   86|  39.0k|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   20|  39.0k|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  39.0k|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (87:13): [True: 37.2k, False: 1.73k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   88|  37.2k|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  112|  37.2k|    do { \
  |  |  |  |  |  |  |  |  |  |  113|  37.2k|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  |  |  114|  37.2k|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 37.2k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  |  |  118|  37.2k|    } while(0)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 37.2k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   89|  37.2k|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  213|  37.2k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  171|  37.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   37|  37.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   90|  37.2k|            (*dealloc)(op); \
  |  |  |  |  |  |  |  |   91|  37.2k|        } \
  |  |  |  |  |  |  |  |   92|  39.0k|    } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 39.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   73|  39.0k|        } \
  |  |  |  |  |  |   74|  39.0k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 39.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  381|  39.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (381:14): [Folded, False: 39.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |10988|  39.0k|                       PyStackRef_IsNone(exc_value)
  |  |10989|  39.0k|                       ? NULL : PyStackRef_AsPyObjectSteal(exc_value));
  |  |10990|  39.0k|            _PyFrame_StackPointerInvalidate(frame);
  |  |10991|  39.0k|            stack_pointer += -1;
  |  |10992|  39.0k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  39.0k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |10993|  39.0k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  39.0k|    { \
  |  |  |  |  201|  39.0k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  39.0k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  39.0k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  39.0k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  39.0k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  39.0k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  39.0k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  39.0k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 39.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  39.0k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  39.0k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  39.0k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  39.0k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  39.0k|    }
  |  |  ------------------
  |  |10994|  39.0k|        }
  |  |10995|       |
  |  |10996|   507k|        TARGET(POP_ITER) {
  |  |  ------------------
  |  |  |  |  132|   507k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |10997|       |            #if _Py_TAIL_CALL_INTERP
  |  |10998|       |            int opcode = POP_ITER;
  |  |10999|       |            (void)(opcode);
  |  |11000|       |            #endif
  |  |11001|   507k|            frame->instr_ptr = next_instr;
  |  |11002|   507k|            next_instr += 1;
  |  |11003|   507k|            INSTRUCTION_STATS(POP_ITER);
  |  |  ------------------
  |  |  |  |   71|   507k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11004|   507k|            _PyStackRef iter;
  |  |11005|   507k|            _PyStackRef index_or_null;
  |  |11006|   507k|            index_or_null = stack_pointer[-1];
  |  |11007|   507k|            iter = stack_pointer[-2];
  |  |11008|   507k|            (void)index_or_null;
  |  |11009|   507k|            stack_pointer += -2;
  |  |11010|   507k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   507k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11011|   507k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11012|   507k|            _PyFrame_StackPointerValidate(frame);
  |  |11013|   507k|            PyStackRef_CLOSE(iter);
  |  |11014|   507k|            _PyFrame_StackPointerInvalidate(frame);
  |  |11015|   507k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   507k|    { \
  |  |  |  |  201|   507k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   507k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   507k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   507k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   507k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   507k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   507k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   507k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 507k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   507k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   507k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   507k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   507k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   507k|    }
  |  |  ------------------
  |  |11016|   507k|        }
  |  |11017|       |
  |  |11018|  31.3M|        TARGET(POP_JUMP_IF_FALSE) {
  |  |  ------------------
  |  |  |  |  132|  31.3M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11019|       |            #if _Py_TAIL_CALL_INTERP
  |  |11020|       |            int opcode = POP_JUMP_IF_FALSE;
  |  |11021|       |            (void)(opcode);
  |  |11022|       |            #endif
  |  |11023|  31.3M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11024|  31.3M|            (void)this_instr;
  |  |11025|  31.3M|            frame->instr_ptr = next_instr;
  |  |11026|  31.3M|            next_instr += 2;
  |  |11027|  31.3M|            INSTRUCTION_STATS(POP_JUMP_IF_FALSE);
  |  |  ------------------
  |  |  |  |   71|  31.3M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11028|  31.3M|            _PyStackRef cond;
  |  |11029|       |            /* Skip 1 cache entry */
  |  |11030|  31.3M|            cond = stack_pointer[-1];
  |  |11031|  31.3M|            assert(PyStackRef_BoolCheck(cond));
  |  |  ------------------
  |  |  |  Branch (11031:13): [True: 31.3M, False: 0]
  |  |  ------------------
  |  |11032|  31.3M|            int flag = PyStackRef_IsFalse(cond);
  |  |  ------------------
  |  |  |  |  494|  31.3M|#define PyStackRef_IsFalse(REF) ((REF).bits == (((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  31.3M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11033|  31.3M|            RECORD_BRANCH_TAKEN(this_instr[1].cache, flag);
  |  |  ------------------
  |  |  |  |  394|  31.3M|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  31.3M|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|  31.3M|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  |11034|  31.3M|            JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN);
  |  |  ------------------
  |  |  |  |  261|  62.6M|#define JUMPBY(x)       (next_instr += (x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (261:41): [True: 28.0M, False: 3.23M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11035|  31.3M|            stack_pointer += -1;
  |  |11036|  31.3M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  31.3M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11037|  31.3M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  31.3M|    { \
  |  |  |  |  201|  31.3M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  31.3M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  31.3M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  31.3M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  31.3M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  31.3M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  31.3M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  31.3M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 31.3M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  31.3M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  31.3M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  31.3M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  31.3M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  31.3M|    }
  |  |  ------------------
  |  |11038|  31.3M|        }
  |  |11039|       |
  |  |11040|   693k|        TARGET(POP_JUMP_IF_NONE) {
  |  |  ------------------
  |  |  |  |  132|   693k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11041|       |            #if _Py_TAIL_CALL_INTERP
  |  |11042|       |            int opcode = POP_JUMP_IF_NONE;
  |  |11043|       |            (void)(opcode);
  |  |11044|       |            #endif
  |  |11045|   693k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11046|   693k|            (void)this_instr;
  |  |11047|   693k|            frame->instr_ptr = next_instr;
  |  |11048|   693k|            next_instr += 2;
  |  |11049|   693k|            INSTRUCTION_STATS(POP_JUMP_IF_NONE);
  |  |  ------------------
  |  |  |  |   71|   693k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11050|   693k|            _PyStackRef value;
  |  |11051|   693k|            _PyStackRef b;
  |  |11052|   693k|            _PyStackRef cond;
  |  |11053|       |            /* Skip 1 cache entry */
  |  |11054|       |            // _IS_NONE
  |  |11055|   693k|            {
  |  |11056|   693k|                value = stack_pointer[-1];
  |  |11057|   693k|                if (PyStackRef_IsNone(value)) {
  |  |  ------------------
  |  |  |  |  495|   693k|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   693k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:32): [True: 688k, False: 4.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11058|   688k|                    b = PyStackRef_True;
  |  |  ------------------
  |  |  |  |  483|   688k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   688k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11059|   688k|                }
  |  |11060|  4.75k|                else {
  |  |11061|  4.75k|                    b = PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  4.75k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  4.75k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11062|  4.75k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11063|  4.75k|                    _PyFrame_StackPointerValidate(frame);
  |  |11064|  4.75k|                    _PyStackRef tmp = value;
  |  |11065|  4.75k|                    value = b;
  |  |11066|  4.75k|                    stack_pointer[-1] = value;
  |  |11067|  4.75k|                    PyStackRef_CLOSE(tmp);
  |  |11068|  4.75k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11069|  4.75k|                }
  |  |11070|   693k|            }
  |  |11071|       |            // _POP_JUMP_IF_TRUE
  |  |11072|   693k|            {
  |  |11073|   693k|                cond = b;
  |  |11074|   693k|                assert(PyStackRef_BoolCheck(cond));
  |  |  ------------------
  |  |  |  Branch (11074:17): [True: 693k, False: 0]
  |  |  ------------------
  |  |11075|   693k|                int flag = PyStackRef_IsTrue(cond);
  |  |  ------------------
  |  |  |  |  493|   693k|#define PyStackRef_IsTrue(REF) ((REF).bits == (((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   693k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11076|   693k|                RECORD_BRANCH_TAKEN(this_instr[1].cache, flag);
  |  |  ------------------
  |  |  |  |  394|   693k|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   693k|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|   693k|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  |11077|   693k|                JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN);
  |  |  ------------------
  |  |  |  |  261|  1.38M|#define JUMPBY(x)       (next_instr += (x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (261:41): [True: 688k, False: 4.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11078|   693k|            }
  |  |11079|      0|            stack_pointer += -1;
  |  |11080|   693k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   693k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11081|   693k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   693k|    { \
  |  |  |  |  201|   693k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   693k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   693k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   693k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   693k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   693k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   693k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   693k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 693k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   693k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   693k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   693k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   693k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   693k|    }
  |  |  ------------------
  |  |11082|   693k|        }
  |  |11083|       |
  |  |11084|   365k|        TARGET(POP_JUMP_IF_NOT_NONE) {
  |  |  ------------------
  |  |  |  |  132|   365k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11085|       |            #if _Py_TAIL_CALL_INTERP
  |  |11086|       |            int opcode = POP_JUMP_IF_NOT_NONE;
  |  |11087|       |            (void)(opcode);
  |  |11088|       |            #endif
  |  |11089|   365k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11090|   365k|            (void)this_instr;
  |  |11091|   365k|            frame->instr_ptr = next_instr;
  |  |11092|   365k|            next_instr += 2;
  |  |11093|   365k|            INSTRUCTION_STATS(POP_JUMP_IF_NOT_NONE);
  |  |  ------------------
  |  |  |  |   71|   365k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11094|   365k|            _PyStackRef value;
  |  |11095|   365k|            _PyStackRef b;
  |  |11096|   365k|            _PyStackRef cond;
  |  |11097|       |            /* Skip 1 cache entry */
  |  |11098|       |            // _IS_NONE
  |  |11099|   365k|            {
  |  |11100|   365k|                value = stack_pointer[-1];
  |  |11101|   365k|                if (PyStackRef_IsNone(value)) {
  |  |  ------------------
  |  |  |  |  495|   365k|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   365k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:32): [True: 100k, False: 264k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11102|   100k|                    b = PyStackRef_True;
  |  |  ------------------
  |  |  |  |  483|   100k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   100k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11103|   100k|                }
  |  |11104|   264k|                else {
  |  |11105|   264k|                    b = PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|   264k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   264k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11106|   264k|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11107|   264k|                    _PyFrame_StackPointerValidate(frame);
  |  |11108|   264k|                    _PyStackRef tmp = value;
  |  |11109|   264k|                    value = b;
  |  |11110|   264k|                    stack_pointer[-1] = value;
  |  |11111|   264k|                    PyStackRef_CLOSE(tmp);
  |  |11112|   264k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11113|   264k|                }
  |  |11114|   365k|            }
  |  |11115|       |            // _POP_JUMP_IF_FALSE
  |  |11116|   365k|            {
  |  |11117|   365k|                cond = b;
  |  |11118|   365k|                assert(PyStackRef_BoolCheck(cond));
  |  |  ------------------
  |  |  |  Branch (11118:17): [True: 365k, False: 0]
  |  |  ------------------
  |  |11119|   365k|                int flag = PyStackRef_IsFalse(cond);
  |  |  ------------------
  |  |  |  |  494|   365k|#define PyStackRef_IsFalse(REF) ((REF).bits == (((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|   365k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11120|   365k|                RECORD_BRANCH_TAKEN(this_instr[1].cache, flag);
  |  |  ------------------
  |  |  |  |  394|   365k|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   365k|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|   365k|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  |11121|   365k|                JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN);
  |  |  ------------------
  |  |  |  |  261|   730k|#define JUMPBY(x)       (next_instr += (x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (261:41): [True: 264k, False: 100k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11122|   365k|            }
  |  |11123|      0|            stack_pointer += -1;
  |  |11124|   365k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   365k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11125|   365k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   365k|    { \
  |  |  |  |  201|   365k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   365k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   365k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   365k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   365k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   365k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   365k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   365k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 365k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   365k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   365k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   365k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   365k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   365k|    }
  |  |  ------------------
  |  |11126|   365k|        }
  |  |11127|       |
  |  |11128|  27.1M|        TARGET(POP_JUMP_IF_TRUE) {
  |  |  ------------------
  |  |  |  |  132|  27.1M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11129|       |            #if _Py_TAIL_CALL_INTERP
  |  |11130|       |            int opcode = POP_JUMP_IF_TRUE;
  |  |11131|       |            (void)(opcode);
  |  |11132|       |            #endif
  |  |11133|  27.1M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11134|  27.1M|            (void)this_instr;
  |  |11135|  27.1M|            frame->instr_ptr = next_instr;
  |  |11136|  27.1M|            next_instr += 2;
  |  |11137|  27.1M|            INSTRUCTION_STATS(POP_JUMP_IF_TRUE);
  |  |  ------------------
  |  |  |  |   71|  27.1M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11138|  27.1M|            _PyStackRef cond;
  |  |11139|       |            /* Skip 1 cache entry */
  |  |11140|  27.1M|            cond = stack_pointer[-1];
  |  |11141|  27.1M|            assert(PyStackRef_BoolCheck(cond));
  |  |  ------------------
  |  |  |  Branch (11141:13): [True: 27.1M, False: 0]
  |  |  ------------------
  |  |11142|  27.1M|            int flag = PyStackRef_IsTrue(cond);
  |  |  ------------------
  |  |  |  |  493|  27.1M|#define PyStackRef_IsTrue(REF) ((REF).bits == (((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  27.1M|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11143|  27.1M|            RECORD_BRANCH_TAKEN(this_instr[1].cache, flag);
  |  |  ------------------
  |  |  |  |  394|  27.1M|    FT_ATOMIC_STORE_UINT16_RELAXED(       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  27.1M|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  395|  27.1M|        bitset, (FT_ATOMIC_LOAD_UINT16_RELAXED(bitset) << 1) | (flag))
  |  |  ------------------
  |  |11144|  27.1M|            JUMPBY(flag ? oparg : next_instr->op.code == NOT_TAKEN);
  |  |  ------------------
  |  |  |  |  261|  54.3M|#define JUMPBY(x)       (next_instr += (x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (261:41): [True: 14.3M, False: 12.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11145|  27.1M|            stack_pointer += -1;
  |  |11146|  27.1M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  27.1M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11147|  27.1M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  27.1M|    { \
  |  |  |  |  201|  27.1M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  27.1M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  27.1M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  27.1M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  27.1M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  27.1M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  27.1M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  27.1M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 27.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  27.1M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  27.1M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  27.1M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  27.1M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  27.1M|    }
  |  |  ------------------
  |  |11148|  27.1M|        }
  |  |11149|       |
  |  |11150|  1.76M|        TARGET(POP_TOP) {
  |  |  ------------------
  |  |  |  |  132|  1.76M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11151|       |            #if _Py_TAIL_CALL_INTERP
  |  |11152|       |            int opcode = POP_TOP;
  |  |11153|       |            (void)(opcode);
  |  |11154|       |            #endif
  |  |11155|  1.76M|            frame->instr_ptr = next_instr;
  |  |11156|  1.76M|            next_instr += 1;
  |  |11157|  1.76M|            INSTRUCTION_STATS(POP_TOP);
  |  |  ------------------
  |  |  |  |   71|  1.76M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11158|  1.76M|            _PyStackRef value;
  |  |11159|  1.76M|            value = stack_pointer[-1];
  |  |11160|  1.76M|            stack_pointer += -1;
  |  |11161|  1.76M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.76M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11162|  1.76M|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11163|  1.76M|            _PyFrame_StackPointerValidate(frame);
  |  |11164|  1.76M|            PyStackRef_XCLOSE(value);
  |  |11165|  1.76M|            _PyFrame_StackPointerInvalidate(frame);
  |  |11166|  1.76M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.76M|    { \
  |  |  |  |  201|  1.76M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.76M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.76M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.76M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.76M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.76M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.76M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.76M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.76M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.76M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.76M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.76M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.76M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.76M|    }
  |  |  ------------------
  |  |11167|  1.76M|        }
  |  |11168|       |
  |  |11169|  1.76M|        TARGET(PUSH_EXC_INFO) {
  |  |  ------------------
  |  |  |  |  132|  39.0k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11170|       |            #if _Py_TAIL_CALL_INTERP
  |  |11171|       |            int opcode = PUSH_EXC_INFO;
  |  |11172|       |            (void)(opcode);
  |  |11173|       |            #endif
  |  |11174|  39.0k|            frame->instr_ptr = next_instr;
  |  |11175|  39.0k|            next_instr += 1;
  |  |11176|  39.0k|            INSTRUCTION_STATS(PUSH_EXC_INFO);
  |  |  ------------------
  |  |  |  |   71|  39.0k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11177|  39.0k|            _PyStackRef exc;
  |  |11178|  39.0k|            _PyStackRef prev_exc;
  |  |11179|  39.0k|            _PyStackRef new_exc;
  |  |11180|  39.0k|            exc = stack_pointer[-1];
  |  |11181|  39.0k|            _PyErr_StackItem *exc_info = tstate->exc_info;
  |  |11182|  39.0k|            if (exc_info->exc_value != NULL) {
  |  |  ------------------
  |  |  |  Branch (11182:17): [True: 44, False: 38.9k]
  |  |  ------------------
  |  |11183|     44|                prev_exc = PyStackRef_FromPyObjectSteal(exc_info->exc_value);
  |  |11184|     44|            }
  |  |11185|  38.9k|            else {
  |  |11186|  38.9k|                prev_exc = PyStackRef_None;
  |  |  ------------------
  |  |  |  |  485|  38.9k|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  38.9k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11187|  38.9k|            }
  |  |11188|  39.0k|            assert(PyStackRef_ExceptionInstanceCheck(exc));
  |  |  ------------------
  |  |  |  Branch (11188:13): [True: 39.0k, False: 0]
  |  |  ------------------
  |  |11189|  39.0k|            exc_info->exc_value = PyStackRef_AsPyObjectNew(exc);
  |  |  ------------------
  |  |  |  |  757|  39.0k|#define PyStackRef_AsPyObjectNew(stackref) Py_NewRef(PyStackRef_AsPyObjectBorrow(stackref))
  |  |  |  |  ------------------
  |  |  |  |  |  |  550|  39.0k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  39.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  39.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11190|  39.0k|            new_exc = exc;
  |  |11191|  39.0k|            stack_pointer[-1] = prev_exc;
  |  |11192|  39.0k|            stack_pointer[0] = new_exc;
  |  |11193|  39.0k|            stack_pointer += 1;
  |  |11194|  39.0k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  39.0k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11195|  39.0k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  39.0k|    { \
  |  |  |  |  201|  39.0k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  39.0k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  39.0k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  39.0k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  39.0k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  39.0k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  39.0k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  39.0k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 39.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  39.0k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  39.0k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  39.0k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  39.0k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  39.0k|    }
  |  |  ------------------
  |  |11196|  39.0k|        }
  |  |11197|       |
  |  |11198|  5.23M|        TARGET(PUSH_NULL) {
  |  |  ------------------
  |  |  |  |  132|  5.23M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11199|       |            #if _Py_TAIL_CALL_INTERP
  |  |11200|       |            int opcode = PUSH_NULL;
  |  |11201|       |            (void)(opcode);
  |  |11202|       |            #endif
  |  |11203|  5.23M|            frame->instr_ptr = next_instr;
  |  |11204|  5.23M|            next_instr += 1;
  |  |11205|  5.23M|            INSTRUCTION_STATS(PUSH_NULL);
  |  |  ------------------
  |  |  |  |   71|  5.23M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11206|  5.23M|            _PyStackRef res;
  |  |11207|  5.23M|            res = PyStackRef_NULL;
  |  |11208|  5.23M|            stack_pointer[0] = res;
  |  |11209|  5.23M|            stack_pointer += 1;
  |  |11210|  5.23M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  5.23M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11211|  5.23M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  5.23M|    { \
  |  |  |  |  201|  5.23M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  5.23M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  5.23M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  5.23M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  5.23M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  5.23M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  5.23M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  5.23M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 5.23M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  5.23M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  5.23M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  5.23M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  5.23M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  5.23M|    }
  |  |  ------------------
  |  |11212|  5.23M|        }
  |  |11213|       |
  |  |11214|  5.23M|        TARGET(RAISE_VARARGS) {
  |  |  ------------------
  |  |  |  |  132|  2.38k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11215|       |            #if _Py_TAIL_CALL_INTERP
  |  |11216|       |            int opcode = RAISE_VARARGS;
  |  |11217|       |            (void)(opcode);
  |  |11218|       |            #endif
  |  |11219|  2.38k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11220|  2.38k|            (void)this_instr;
  |  |11221|  2.38k|            frame->instr_ptr = next_instr;
  |  |11222|  2.38k|            next_instr += 1;
  |  |11223|  2.38k|            INSTRUCTION_STATS(RAISE_VARARGS);
  |  |  ------------------
  |  |  |  |   71|  2.38k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11224|  2.38k|            _PyStackRef *args;
  |  |11225|  2.38k|            args = &stack_pointer[-oparg];
  |  |11226|  2.38k|            assert(oparg < 3);
  |  |  ------------------
  |  |  |  Branch (11226:13): [True: 2.38k, False: 0]
  |  |  ------------------
  |  |11227|  2.38k|            PyObject *cause = oparg == 2 ? PyStackRef_AsPyObjectSteal(args[1]) : NULL;
  |  |  ------------------
  |  |  |  Branch (11227:31): [True: 227, False: 2.16k]
  |  |  ------------------
  |  |11228|  2.38k|            PyObject *exc = oparg > 0 ? PyStackRef_AsPyObjectSteal(args[0]) : NULL;
  |  |  ------------------
  |  |  |  Branch (11228:29): [True: 2.38k, False: 0]
  |  |  ------------------
  |  |11229|  2.38k|            stack_pointer += -oparg;
  |  |11230|  2.38k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.38k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11231|  2.38k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11232|  2.38k|            _PyFrame_StackPointerValidate(frame);
  |  |11233|  2.38k|            int err = do_raise(tstate, exc, cause);
  |  |11234|  2.38k|            _PyFrame_StackPointerInvalidate(frame);
  |  |11235|  2.38k|            if (err) {
  |  |  ------------------
  |  |  |  Branch (11235:17): [True: 0, False: 2.38k]
  |  |  ------------------
  |  |11236|      0|                assert(oparg == 0);
  |  |  ------------------
  |  |  |  Branch (11236:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11237|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11237:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11238|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11239|      0|                monitor_reraise(tstate, frame, this_instr);
  |  |11240|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11241|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11241:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11242|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11243|      0|                JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11244|      0|            }
  |  |11245|  2.38k|            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|  2.38k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11246|      0|        }
  |  |11247|       |
  |  |11248|  3.42k|        TARGET(RERAISE) {
  |  |  ------------------
  |  |  |  |  132|  3.42k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11249|       |            #if _Py_TAIL_CALL_INTERP
  |  |11250|       |            int opcode = RERAISE;
  |  |11251|       |            (void)(opcode);
  |  |11252|       |            #endif
  |  |11253|  3.42k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11254|  3.42k|            (void)this_instr;
  |  |11255|  3.42k|            frame->instr_ptr = next_instr;
  |  |11256|  3.42k|            next_instr += 1;
  |  |11257|  3.42k|            INSTRUCTION_STATS(RERAISE);
  |  |  ------------------
  |  |  |  |   71|  3.42k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11258|  3.42k|            _PyStackRef *values;
  |  |11259|  3.42k|            _PyStackRef exc_st;
  |  |11260|  3.42k|            exc_st = stack_pointer[-1];
  |  |11261|  3.42k|            values = &stack_pointer[-1 - oparg];
  |  |11262|  3.42k|            PyObject *exc = PyStackRef_AsPyObjectSteal(exc_st);
  |  |11263|  3.42k|            assert(oparg >= 0 && oparg <= 2);
  |  |  ------------------
  |  |  |  Branch (11263:13): [True: 3.42k, False: 0]
  |  |  |  Branch (11263:13): [True: 3.42k, False: 0]
  |  |  ------------------
  |  |11264|  3.42k|            if (oparg) {
  |  |  ------------------
  |  |  |  Branch (11264:17): [True: 3.30k, False: 120]
  |  |  ------------------
  |  |11265|  3.30k|                frame->instr_ptr = _PyFrame_GetBytecode(frame) + PyStackRef_UntagInt(values[0]);
  |  |11266|  3.30k|            }
  |  |11267|  3.42k|            assert(exc && PyExceptionInstance_Check(exc));
  |  |  ------------------
  |  |  |  Branch (11267:13): [True: 3.42k, False: 0]
  |  |  |  Branch (11267:13): [True: 3.42k, False: 0]
  |  |  ------------------
  |  |11268|  3.42k|            stack_pointer += -1;
  |  |11269|  3.42k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.42k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11270|  3.42k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11271|  3.42k|            _PyFrame_StackPointerValidate(frame);
  |  |11272|  3.42k|            _PyErr_SetRaisedException(tstate, exc);
  |  |11273|  3.42k|            _PyFrame_StackPointerInvalidate(frame);
  |  |11274|  3.42k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11274:13): [True: 3.42k, False: 0]
  |  |  ------------------
  |  |11275|  3.42k|            _PyFrame_StackPointerValidate(frame);
  |  |11276|  3.42k|            monitor_reraise(tstate, frame, this_instr);
  |  |11277|  3.42k|            _PyFrame_StackPointerInvalidate(frame);
  |  |11278|  3.42k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11278:13): [True: 3.42k, False: 0]
  |  |  ------------------
  |  |11279|  3.42k|            _PyFrame_StackPointerValidate(frame);
  |  |11280|  3.42k|            JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|  3.42k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11281|      0|        }
  |  |11282|       |
  |  |11283|      0|        TARGET(RESERVED) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11284|       |            #if _Py_TAIL_CALL_INTERP
  |  |11285|       |            int opcode = RESERVED;
  |  |11286|       |            (void)(opcode);
  |  |11287|       |            #endif
  |  |11288|      0|            frame->instr_ptr = next_instr;
  |  |11289|      0|            next_instr += 1;
  |  |11290|      0|            INSTRUCTION_STATS(RESERVED);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11291|      0|            assert(0 && "Executing RESERVED instruction.");
  |  |  ------------------
  |  |  |  Branch (11291:13): [Folded, False: 0]
  |  |  |  Branch (11291:13): [True: 0, False: 0]
  |  |  ------------------
  |  |11292|      0|            Py_FatalError("Executing RESERVED instruction.");
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  |  |11293|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11294|      0|        }
  |  |11295|       |
  |  |11296|  1.54k|        TARGET(RESUME) {
  |  |  ------------------
  |  |  |  |  132|  1.54k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11297|       |            #if _Py_TAIL_CALL_INTERP
  |  |11298|       |            int opcode = RESUME;
  |  |11299|       |            (void)(opcode);
  |  |11300|       |            #endif
  |  |11301|  1.54k|            frame->instr_ptr = next_instr;
  |  |11302|  1.54k|            next_instr += 2;
  |  |11303|  1.54k|            INSTRUCTION_STATS(RESUME);
  |  |  ------------------
  |  |  |  |   71|  1.54k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11304|  1.71k|            PREDICTED_RESUME:;
  |  |11305|  1.71k|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  |11306|  1.71k|            (void)this_instr;
  |  |11307|       |            // _LOAD_BYTECODE
  |  |11308|  1.71k|            {
  |  |11309|       |                #ifdef Py_GIL_DISABLED
  |  |11310|       |                if (frame->tlbc_index !=
  |  |11311|       |                    ((_PyThreadStateImpl *)tstate)->tlbc_index) {
  |  |11312|       |                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11313|       |                    _PyFrame_StackPointerValidate(frame);
  |  |11314|       |                    _Py_CODEUNIT *bytecode =
  |  |11315|       |                    _PyEval_GetExecutableCode(tstate, _PyFrame_GetCode(frame));
  |  |11316|       |                    _PyFrame_StackPointerInvalidate(frame);
  |  |11317|       |                    if (bytecode == NULL) {
  |  |11318|       |                        JUMP_TO_LABEL(error);
  |  |11319|       |                    }
  |  |11320|       |                    ptrdiff_t off = this_instr - _PyFrame_GetBytecode(frame);
  |  |11321|       |                    frame->tlbc_index = ((_PyThreadStateImpl *)tstate)->tlbc_index;
  |  |11322|       |                    frame->instr_ptr = bytecode + off;
  |  |11323|       |                    next_instr = frame->instr_ptr;
  |  |11324|       |                    DISPATCH();
  |  |11325|       |                }
  |  |11326|       |                #endif
  |  |11327|  1.71k|            }
  |  |11328|       |            // _MAYBE_INSTRUMENT
  |  |11329|  1.71k|            {
  |  |11330|       |                #ifdef Py_GIL_DISABLED
  |  |11331|       |
  |  |11332|       |                int check_instrumentation = 1;
  |  |11333|       |                #else
  |  |11334|  1.71k|                int check_instrumentation = (tstate->tracing == 0);
  |  |11335|  1.71k|                #endif
  |  |11336|  1.71k|                if (check_instrumentation) {
  |  |  ------------------
  |  |  |  Branch (11336:21): [True: 1.71k, False: 0]
  |  |  ------------------
  |  |11337|  1.71k|                    uintptr_t global_version = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & ~_PY_EVAL_EVENTS_MASK;
  |  |  ------------------
  |  |  |  |  356|  1.71k|#define _PY_EVAL_EVENTS_MASK ((1 << _PY_EVAL_EVENTS_BITS)-1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  355|  1.71k|#define _PY_EVAL_EVENTS_BITS 8
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11338|  1.71k|                    uintptr_t code_version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version);
  |  |  ------------------
  |  |  |  |  152|  1.71k|#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value
  |  |  ------------------
  |  |11339|  1.71k|                    if (code_version != global_version) {
  |  |  ------------------
  |  |  |  Branch (11339:25): [True: 0, False: 1.71k]
  |  |  ------------------
  |  |11340|      0|                        _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11341|      0|                        _PyFrame_StackPointerValidate(frame);
  |  |11342|      0|                        int err = _Py_Instrument(_PyFrame_GetCode(frame), tstate->interp);
  |  |11343|      0|                        _PyFrame_StackPointerInvalidate(frame);
  |  |11344|      0|                        if (err) {
  |  |  ------------------
  |  |  |  Branch (11344:29): [True: 0, False: 0]
  |  |  ------------------
  |  |11345|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11346|      0|                        }
  |  |11347|      0|                        next_instr = this_instr;
  |  |11348|      0|                        DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11349|      0|                    }
  |  |11350|  1.71k|                }
  |  |11351|  1.71k|            }
  |  |11352|       |            // _QUICKEN_RESUME
  |  |11353|  1.71k|            {
  |  |11354|  1.71k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |11355|  1.71k|                (void)counter;
  |  |11356|  1.71k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11357|  1.71k|                _PyFrame_StackPointerValidate(frame);
  |  |11358|  1.71k|                _Py_Specialize_Resume(this_instr, tstate, frame);
  |  |11359|  1.71k|                _PyFrame_StackPointerInvalidate(frame);
  |  |11360|  1.71k|            }
  |  |11361|       |            // _CHECK_PERIODIC_IF_NOT_YIELD_FROM
  |  |11362|  1.71k|            {
  |  |11363|  1.71k|                if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) {
  |  |  ------------------
  |  |  |  |   94|  1.71k|#define RESUME_OPARG_LOCATION_MASK 0x7
  |  |  ------------------
  |  |                               if ((oparg & RESUME_OPARG_LOCATION_MASK) < RESUME_AFTER_YIELD_FROM) {
  |  |  ------------------
  |  |  |  |   90|  1.71k|#define RESUME_AFTER_YIELD_FROM 2
  |  |  ------------------
  |  |  |  Branch (11363:21): [True: 1.68k, False: 23]
  |  |  ------------------
  |  |11364|  1.68k|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11364:21): [True: 1.68k, False: 0]
  |  |  ------------------
  |  |11365|  1.68k|                    _PyFrame_StackPointerValidate(frame);
  |  |11366|  1.68k|                    int err = check_periodics(tstate);
  |  |11367|  1.68k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11368|  1.68k|                    if (err != 0) {
  |  |  ------------------
  |  |  |  Branch (11368:25): [True: 0, False: 1.68k]
  |  |  ------------------
  |  |11369|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11370|      0|                    }
  |  |11371|  1.68k|                }
  |  |11372|  1.71k|            }
  |  |11373|  1.71k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.71k|    { \
  |  |  |  |  201|  1.71k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.71k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.71k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.71k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.71k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.71k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.71k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.71k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.71k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.71k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.71k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.71k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.71k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.71k|    }
  |  |  ------------------
  |  |11374|  1.71k|        }
  |  |11375|       |
  |  |11376|  6.71M|        TARGET(RESUME_CHECK) {
  |  |  ------------------
  |  |  |  |  132|  6.71M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11377|       |            #if _Py_TAIL_CALL_INTERP
  |  |11378|       |            int opcode = RESUME_CHECK;
  |  |11379|       |            (void)(opcode);
  |  |11380|       |            #endif
  |  |11381|  6.71M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11382|  6.71M|            (void)this_instr;
  |  |11383|  6.71M|            frame->instr_ptr = next_instr;
  |  |11384|  6.71M|            next_instr += 2;
  |  |11385|  6.71M|            INSTRUCTION_STATS(RESUME_CHECK);
  |  |  ------------------
  |  |  |  |   71|  6.71M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11386|  6.71M|            static_assert(1 == 1, "incorrect cache size");
  |  |11387|       |            /* Skip 1 cache entry */
  |  |11388|       |            #if defined(__EMSCRIPTEN__)
  |  |11389|       |            if (_Py_emscripten_signal_clock == 0) {
  |  |11390|       |                UPDATE_MISS_STATS(RESUME);
  |  |11391|       |                assert(_PyOpcode_Deopt[opcode] == (RESUME));
  |  |11392|       |                JUMP_TO_PREDICTED(RESUME);
  |  |11393|       |            }
  |  |11394|       |            _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING;
  |  |11395|       |            #endif
  |  |11396|  6.71M|            uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker);
  |  |11397|  6.71M|            uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version);
  |  |  ------------------
  |  |  |  |  152|  6.71M|#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value
  |  |  ------------------
  |  |11398|  6.71M|            assert((version & _PY_EVAL_EVENTS_MASK) == 0);
  |  |  ------------------
  |  |  |  Branch (11398:13): [True: 6.71M, False: 0]
  |  |  ------------------
  |  |11399|  6.71M|            if (eval_breaker != version) {
  |  |  ------------------
  |  |  |  Branch (11399:17): [True: 171, False: 6.71M]
  |  |  ------------------
  |  |11400|    171|                UPDATE_MISS_STATS(RESUME);
  |  |  ------------------
  |  |  |  |  299|    171|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11401|    171|                assert(_PyOpcode_Deopt[opcode] == (RESUME));
  |  |  ------------------
  |  |  |  Branch (11401:17): [True: 171, False: 0]
  |  |  ------------------
  |  |11402|    171|                JUMP_TO_PREDICTED(RESUME);
  |  |  ------------------
  |  |  |  |  136|    171|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11403|      0|            }
  |  |11404|       |            #ifdef Py_GIL_DISABLED
  |  |11405|       |            if (frame->tlbc_index !=
  |  |11406|       |                ((_PyThreadStateImpl *)tstate)->tlbc_index) {
  |  |11407|       |                UPDATE_MISS_STATS(RESUME);
  |  |11408|       |                assert(_PyOpcode_Deopt[opcode] == (RESUME));
  |  |11409|       |                JUMP_TO_PREDICTED(RESUME);
  |  |11410|       |            }
  |  |11411|       |            #endif
  |  |11412|  6.71M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  6.71M|    { \
  |  |  |  |  201|  6.71M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  6.71M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  6.71M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  6.71M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  6.71M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  6.71M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  6.71M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  6.71M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 6.71M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  6.71M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  6.71M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  6.71M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  6.71M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  6.71M|    }
  |  |  ------------------
  |  |11413|  6.71M|        }
  |  |11414|       |
  |  |11415|      0|        TARGET(RESUME_CHECK_JIT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11416|       |            #if _Py_TAIL_CALL_INTERP
  |  |11417|       |            int opcode = RESUME_CHECK_JIT;
  |  |11418|       |            (void)(opcode);
  |  |11419|       |            #endif
  |  |11420|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11421|      0|            (void)this_instr;
  |  |11422|      0|            frame->instr_ptr = next_instr;
  |  |11423|      0|            next_instr += 2;
  |  |11424|      0|            INSTRUCTION_STATS(RESUME_CHECK_JIT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11425|      0|            static_assert(1 == 1, "incorrect cache size");
  |  |11426|       |            /* Skip 1 cache entry */
  |  |11427|       |            // _RESUME_CHECK
  |  |11428|      0|            {
  |  |11429|       |                #if defined(__EMSCRIPTEN__)
  |  |11430|       |                if (_Py_emscripten_signal_clock == 0) {
  |  |11431|       |                    UPDATE_MISS_STATS(RESUME);
  |  |11432|       |                    assert(_PyOpcode_Deopt[opcode] == (RESUME));
  |  |11433|       |                    JUMP_TO_PREDICTED(RESUME);
  |  |11434|       |                }
  |  |11435|       |                _Py_emscripten_signal_clock -= Py_EMSCRIPTEN_SIGNAL_HANDLING;
  |  |11436|       |                #endif
  |  |11437|      0|                uintptr_t eval_breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker);
  |  |11438|      0|                uintptr_t version = FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version);
  |  |  ------------------
  |  |  |  |  152|      0|#define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value
  |  |  ------------------
  |  |11439|      0|                assert((version & _PY_EVAL_EVENTS_MASK) == 0);
  |  |  ------------------
  |  |  |  Branch (11439:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11440|      0|                if (eval_breaker != version) {
  |  |  ------------------
  |  |  |  Branch (11440:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11441|      0|                    UPDATE_MISS_STATS(RESUME);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11442|      0|                    assert(_PyOpcode_Deopt[opcode] == (RESUME));
  |  |  ------------------
  |  |  |  Branch (11442:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11443|      0|                    JUMP_TO_PREDICTED(RESUME);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11444|      0|                }
  |  |11445|       |                #ifdef Py_GIL_DISABLED
  |  |11446|       |                if (frame->tlbc_index !=
  |  |11447|       |                    ((_PyThreadStateImpl *)tstate)->tlbc_index) {
  |  |11448|       |                    UPDATE_MISS_STATS(RESUME);
  |  |11449|       |                    assert(_PyOpcode_Deopt[opcode] == (RESUME));
  |  |11450|       |                    JUMP_TO_PREDICTED(RESUME);
  |  |11451|       |                }
  |  |11452|       |                #endif
  |  |11453|      0|            }
  |  |11454|       |            // _JIT
  |  |11455|      0|            {
  |  |11456|       |                #ifdef _Py_TIER2
  |  |11457|       |                bool is_resume = this_instr->op.code == RESUME_CHECK_JIT;
  |  |11458|       |                _Py_BackoffCounter counter = this_instr[1].counter;
  |  |11459|       |                if ((backoff_counter_triggers(counter) &&
  |  |11460|       |                        !IS_JIT_TRACING() &&
  |  |11461|       |                        (this_instr->op.code == JUMP_BACKWARD_JIT || is_resume)) &&
  |  |11462|       |                    next_instr->op.code != ENTER_EXECUTOR) {
  |  |11463|       |                    _Py_CODEUNIT *insert_exec_at = this_instr;
  |  |11464|       |                    for (int tmp = oparg; tmp > 255; tmp >>= 8) {
  |  |11465|       |                        insert_exec_at--;
  |  |11466|       |                    }
  |  |11467|       |                    int succ = _PyJit_TryInitializeTracing(tstate, frame, this_instr, insert_exec_at,
  |  |11468|       |                        is_resume ? insert_exec_at : next_instr, stack_pointer, 0, NULL, oparg, NULL);
  |  |11469|       |                    if (succ) {
  |  |11470|       |                        ENTER_TRACING();
  |  |11471|       |                    }
  |  |11472|       |                    else {
  |  |11473|       |                        this_instr[1].counter = restart_backoff_counter(counter);
  |  |11474|       |                    }
  |  |11475|       |                }
  |  |11476|       |                else {
  |  |11477|       |                    ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |11478|       |                }
  |  |11479|       |                #endif
  |  |11480|      0|            }
  |  |11481|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11482|      0|        }
  |  |11483|       |
  |  |11484|  1.24k|        TARGET(RETURN_GENERATOR) {
  |  |  ------------------
  |  |  |  |  132|  1.24k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11485|       |            #if _Py_TAIL_CALL_INTERP
  |  |11486|       |            int opcode = RETURN_GENERATOR;
  |  |11487|       |            (void)(opcode);
  |  |11488|       |            #endif
  |  |11489|  1.24k|            frame->instr_ptr = next_instr;
  |  |11490|  1.24k|            next_instr += 1;
  |  |11491|  1.24k|            INSTRUCTION_STATS(RETURN_GENERATOR);
  |  |  ------------------
  |  |  |  |   71|  1.24k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11492|  1.24k|            _PyStackRef res;
  |  |11493|  1.24k|            assert(PyStackRef_FunctionCheck(frame->f_funcobj));
  |  |  ------------------
  |  |  |  Branch (11493:13): [True: 1.24k, False: 0]
  |  |  ------------------
  |  |11494|  1.24k|            PyFunctionObject *func = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(frame->f_funcobj);
  |  |11495|  1.24k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11496|  1.24k|            _PyFrame_StackPointerValidate(frame);
  |  |11497|  1.24k|            PyGenObject *gen = (PyGenObject *)_Py_MakeCoro(func);
  |  |11498|  1.24k|            _PyFrame_StackPointerInvalidate(frame);
  |  |11499|  1.24k|            if (gen == NULL) {
  |  |  ------------------
  |  |  |  Branch (11499:17): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |11500|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11501|      0|            }
  |  |11502|  1.24k|            assert(STACK_LEVEL() <= 2);
  |  |  ------------------
  |  |  |  Branch (11502:13): [True: 1.24k, False: 0]
  |  |  ------------------
  |  |11503|  1.24k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11503:13): [True: 1.24k, False: 0]
  |  |  ------------------
  |  |11504|  1.24k|            _PyFrame_StackPointerValidate(frame);
  |  |11505|  1.24k|            _PyInterpreterFrame *gen_frame = &gen->gi_iframe;
  |  |11506|  1.24k|            frame->instr_ptr++;
  |  |11507|  1.24k|            _PyFrame_Copy(frame, gen_frame);
  |  |11508|  1.24k|            assert(frame->frame_obj == NULL);
  |  |  ------------------
  |  |  |  Branch (11508:13): [True: 1.24k, False: 0]
  |  |  ------------------
  |  |11509|  1.24k|            gen->gi_frame_state = FRAME_CREATED;
  |  |11510|  1.24k|            gen_frame->owner = FRAME_OWNED_BY_GENERATOR;
  |  |11511|  1.24k|            _Py_LeaveRecursiveCallPy(tstate);
  |  |11512|  1.24k|            _PyInterpreterFrame *prev = frame->previous;
  |  |11513|  1.24k|            _PyThreadState_UpdateLastProfiledFrame(tstate, frame, prev);
  |  |  ------------------
  |  |  |  |  326|  1.24k|    do { \
  |  |  |  |  327|  1.24k|        PyThreadState *tstate_ = (tstate); \
  |  |  |  |  328|  1.24k|        _PyInterpreterFrame *frame_ = (frame); \
  |  |  |  |  329|  1.24k|        if (tstate_->last_profiled_frame == frame_) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (329:13): [True: 0, False: 1.24k]
  |  |  |  |  ------------------
  |  |  |  |  330|      0|            tstate_->last_profiled_frame = (previous); \
  |  |  |  |  331|      0|            tstate_->last_profiled_frame_seq++; \
  |  |  |  |  332|      0|        } \
  |  |  |  |  333|  1.24k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (333:14): [Folded, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11514|  1.24k|            _PyThreadState_PopFrame(tstate, frame);
  |  |11515|  1.24k|            frame = tstate->current_frame = prev;
  |  |11516|  1.24k|            LOAD_IP(frame->return_offset);
  |  |  ------------------
  |  |  |  |  441|  1.24k|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  1.24k|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  1.24k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 1.24k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11517|  1.24k|            stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |11518|  1.24k|            _PyFrame_StackPointerInvalidate(frame);
  |  |11519|  1.24k|            res = PyStackRef_FromPyObjectStealMortal((PyObject *)gen);
  |  |11520|  1.24k|            LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  1.24k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  |11521|  1.24k|            stack_pointer[0] = res;
  |  |11522|  1.24k|            stack_pointer += 1;
  |  |11523|  1.24k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.24k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11524|  1.24k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.24k|    { \
  |  |  |  |  201|  1.24k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.24k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.24k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.24k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.24k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.24k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.24k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.24k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.24k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.24k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.24k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.24k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.24k|    }
  |  |  ------------------
  |  |11525|  1.24k|        }
  |  |11526|       |
  |  |11527|  6.65M|        TARGET(RETURN_VALUE) {
  |  |  ------------------
  |  |  |  |  132|  6.65M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11528|       |            #if _Py_TAIL_CALL_INTERP
  |  |11529|       |            int opcode = RETURN_VALUE;
  |  |11530|       |            (void)(opcode);
  |  |11531|       |            #endif
  |  |11532|  6.65M|            frame->instr_ptr = next_instr;
  |  |11533|  6.65M|            next_instr += 1;
  |  |11534|  6.65M|            INSTRUCTION_STATS(RETURN_VALUE);
  |  |  ------------------
  |  |  |  |   71|  6.65M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11535|  6.65M|            _PyStackRef value;
  |  |11536|  6.65M|            _PyStackRef retval;
  |  |11537|  6.65M|            _PyStackRef res;
  |  |11538|       |            // _MAKE_HEAP_SAFE
  |  |11539|  6.65M|            {
  |  |11540|  6.65M|                value = stack_pointer[-1];
  |  |11541|  6.65M|                value = PyStackRef_MakeHeapSafe(value);
  |  |11542|  6.65M|            }
  |  |11543|       |            // _RETURN_VALUE
  |  |11544|  6.65M|            {
  |  |11545|  6.65M|                retval = value;
  |  |11546|  6.65M|                assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (11546:17): [True: 6.65M, False: 0]
  |  |  ------------------
  |  |11547|  6.65M|                _PyStackRef temp = retval;
  |  |11548|  6.65M|                stack_pointer += -1;
  |  |11549|  6.65M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  6.65M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11550|  6.65M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11551|  6.65M|                _PyFrame_StackPointerValidate(frame);
  |  |11552|  6.65M|                assert(STACK_LEVEL() == 0);
  |  |  ------------------
  |  |  |  Branch (11552:17): [True: 6.65M, False: 0]
  |  |  ------------------
  |  |11553|  6.65M|                DTRACE_FUNCTION_RETURN();
  |  |  ------------------
  |  |  |  |  347|  6.65M|#define DTRACE_FUNCTION_RETURN() ((void)0)
  |  |  ------------------
  |  |11554|  6.65M|                _Py_LeaveRecursiveCallPy(tstate);
  |  |11555|  6.65M|                _PyInterpreterFrame *dying = frame;
  |  |11556|  6.65M|                frame = tstate->current_frame = dying->previous;
  |  |11557|  6.65M|                _PyEval_FrameClearAndPop(tstate, dying);
  |  |11558|  6.65M|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |11559|  6.65M|                _PyFrame_StackPointerInvalidate(frame);
  |  |11560|  6.65M|                LOAD_IP(frame->return_offset);
  |  |  ------------------
  |  |  |  |  441|  6.65M|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  6.65M|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  6.65M|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 6.65M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11561|  6.65M|                res = temp;
  |  |11562|  6.65M|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  6.65M|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  |11563|  6.65M|            }
  |  |11564|      0|            stack_pointer[0] = res;
  |  |11565|  6.65M|            stack_pointer += 1;
  |  |11566|  6.65M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  6.65M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11567|  6.65M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  6.65M|    { \
  |  |  |  |  201|  6.65M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  6.65M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  6.65M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  6.65M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  6.65M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  6.65M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  6.65M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  6.65M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 6.65M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  6.65M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  6.65M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  6.65M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  6.65M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  6.65M|    }
  |  |  ------------------
  |  |11568|  6.65M|        }
  |  |11569|       |
  |  |11570|      4|        TARGET(SEND) {
  |  |  ------------------
  |  |  |  |  132|      4|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11571|       |            #if _Py_TAIL_CALL_INTERP
  |  |11572|       |            int opcode = SEND;
  |  |11573|       |            (void)(opcode);
  |  |11574|       |            #endif
  |  |11575|      4|            frame->instr_ptr = next_instr;
  |  |11576|      4|            next_instr += 2;
  |  |11577|      4|            INSTRUCTION_STATS(SEND);
  |  |  ------------------
  |  |  |  |   71|      4|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11578|      4|            PREDICTED_SEND:;
  |  |11579|      4|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  |11580|      4|            (void)this_instr;
  |  |11581|      4|            _PyStackRef receiver;
  |  |11582|      4|            _PyStackRef null_or_index;
  |  |11583|      4|            _PyStackRef v;
  |  |11584|      4|            _PyStackRef retval;
  |  |11585|       |            // _SPECIALIZE_SEND
  |  |11586|      4|            {
  |  |11587|      4|                receiver = stack_pointer[-3];
  |  |11588|      4|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |11589|      4|                (void)counter;
  |  |11590|      4|                #if ENABLE_SPECIALIZATION
  |  |11591|      4|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|      4|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 2, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11592|      2|                    next_instr = this_instr;
  |  |11593|      2|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11594|      2|                    _PyFrame_StackPointerValidate(frame);
  |  |11595|      2|                    _Py_Specialize_Send(receiver, next_instr);
  |  |11596|      2|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11597|      2|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|      2|    { \
  |  |  |  |  217|      2|        opcode = next_instr->op.code; \
  |  |  |  |  218|      2|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      2|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|      2|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|      2|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|      2|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|      2|    }
  |  |  ------------------
  |  |11598|      2|                }
  |  |11599|      4|                OPCODE_DEFERRED_INC(SEND);
  |  |  ------------------
  |  |  |  |   90|      4|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |11600|      4|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|      4|    do { \
  |  |  |  |  378|      4|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|      4|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11601|      4|                #endif  /* ENABLE_SPECIALIZATION */
  |  |11602|      4|            }
  |  |11603|       |            // _SEND
  |  |11604|      4|            {
  |  |11605|      4|                v = stack_pointer[-1];
  |  |11606|      4|                null_or_index = stack_pointer[-2];
  |  |11607|      4|                PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver);
  |  |11608|      4|                assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (11608:17): [True: 2, False: 2]
  |  |  ------------------
  |  |11609|      2|                if (!IS_PEP523_HOOKED(tstate) &&
  |  |  ------------------
  |  |  |  |  539|      4|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  ------------------
  |  |  |  Branch (11609:21): [True: 2, False: 0]
  |  |  ------------------
  |  |11610|      2|                    (Py_TYPE(receiver_o) == &PyGen_Type || Py_TYPE(receiver_o) == &PyCoro_Type) &&
  |  |  ------------------
  |  |  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                                   (Py_TYPE(receiver_o) == &PyGen_Type || Py_TYPE(receiver_o) == &PyCoro_Type) &&
  |  |  ------------------
  |  |  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (11610:22): [True: 0, False: 2]
  |  |  |  Branch (11610:60): [True: 0, False: 2]
  |  |  ------------------
  |  |11611|      0|                    gen_try_set_executing((PyGenObject *)receiver_o))
  |  |  ------------------
  |  |  |  Branch (11611:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11612|      0|                {
  |  |11613|      0|                    PyGenObject *gen = (PyGenObject *)receiver_o;
  |  |11614|      0|                    _PyInterpreterFrame *gen_frame = &gen->gi_iframe;
  |  |11615|      0|                    _PyFrame_StackPush(gen_frame, PyStackRef_MakeHeapSafe(v));
  |  |11616|      0|                    stack_pointer += -1;
  |  |11617|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11618|      0|                    gen->gi_exc_state.previous_item = tstate->exc_info;
  |  |11619|      0|                    tstate->exc_info = &gen->gi_exc_state;
  |  |11620|      0|                    assert( 2u + oparg <= UINT16_MAX);
  |  |  ------------------
  |  |  |  Branch (11620:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11621|      0|                    frame->return_offset = (uint16_t)( 2u + oparg);
  |  |11622|      0|                    assert(gen_frame->previous == NULL);
  |  |  ------------------
  |  |  |  Branch (11622:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11623|      0|                    gen_frame->previous = frame;
  |  |11624|      0|                    DISPATCH_INLINED(gen_frame);
  |  |  ------------------
  |  |  |  |  223|      0|    do {                                                         \
  |  |  |  |  224|      0|        assert(!IS_PEP523_HOOKED(tstate));                       \
  |  |  |  |  225|      0|        _PyFrame_SetStackPointer(frame, stack_pointer);          \
  |  |  |  |  226|      0|        _PyFrame_StackPointerValidate(frame);                    \
  |  |  |  |  227|      0|        assert((NEW_FRAME)->previous == frame);                  \
  |  |  |  |  228|      0|        frame = tstate->current_frame = (NEW_FRAME);             \
  |  |  |  |  229|      0|        CALL_STAT_INC(inlined_py_calls);                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  230|      0|        JUMP_TO_LABEL(start_frame);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  |  |  ------------------
  |  |  |  |  231|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (11624:21): [True: 0, False: 0]
  |  |  |  Branch (11624:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11625|      0|                }
  |  |11626|      2|                if (!PyStackRef_IsNull(null_or_index) && PyStackRef_IsNone(v)) {
  |  |  ------------------
  |  |  |  |  482|      4|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|      2|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|      2|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               if (!PyStackRef_IsNull(null_or_index) && PyStackRef_IsNone(v)) {
  |  |  ------------------
  |  |  |  |  495|      2|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      2|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (495:32): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (11626:21): [True: 2, False: 0]
  |  |  ------------------
  |  |11627|      2|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11628|      2|                    _PyFrame_StackPointerValidate(frame);
  |  |11629|      2|                    _PyStackRef item = _PyForIter_VirtualIteratorNext(tstate, frame, receiver, &null_or_index);
  |  |11630|      2|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11631|      2|                    if (!PyStackRef_IsValid(item)) {
  |  |  ------------------
  |  |  |  Branch (11631:25): [True: 0, False: 2]
  |  |  ------------------
  |  |11632|      0|                        if (PyStackRef_IsError(item)) {
  |  |  ------------------
  |  |  |  Branch (11632:29): [True: 0, False: 0]
  |  |  ------------------
  |  |11633|      0|                            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11634|      0|                        }
  |  |11635|      0|                        JUMPBY(oparg);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  |11636|      0|                        stack_pointer[-2] = null_or_index;
  |  |11637|      0|                        DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11638|      0|                    }
  |  |11639|      2|                    retval = item;
  |  |11640|      2|                }
  |  |11641|      0|                else {
  |  |11642|      0|                    PyObject *v_o = PyStackRef_AsPyObjectBorrow(v);
  |  |11643|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11644|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |11645|      0|                    PySendResultPair res = _PyIter_Send(receiver_o, v_o);
  |  |11646|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11647|      0|                    if (res.kind == PYGEN_ERROR) {
  |  |  ------------------
  |  |  |  Branch (11647:25): [True: 0, False: 0]
  |  |  ------------------
  |  |11648|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11649|      0|                    }
  |  |11650|      0|                    stack_pointer += -1;
  |  |11651|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11652|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11653|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |11654|      0|                    PyStackRef_CLOSE(v);
  |  |11655|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |11656|      0|                    retval = PyStackRef_FromPyObjectSteal(res.object);
  |  |11657|      0|                    if (res.kind == PYGEN_RETURN) {
  |  |  ------------------
  |  |  |  Branch (11657:25): [True: 0, False: 0]
  |  |  ------------------
  |  |11658|      0|                        JUMPBY(oparg);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  |11659|      0|                    }
  |  |11660|      0|                    stack_pointer += 1;
  |  |11661|      0|                }
  |  |11662|      2|            }
  |  |11663|      2|            stack_pointer[-2] = null_or_index;
  |  |11664|      2|            stack_pointer[-1] = retval;
  |  |11665|      2|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      2|    { \
  |  |  |  |  201|      2|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      2|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      2|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      2|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      2|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      2|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      2|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      2|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      2|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      2|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      2|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      2|    }
  |  |  ------------------
  |  |11666|      2|        }
  |  |11667|       |
  |  |11668|      0|        TARGET(SEND_ASYNC_GEN) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11669|       |            #if _Py_TAIL_CALL_INTERP
  |  |11670|       |            int opcode = SEND_ASYNC_GEN;
  |  |11671|       |            (void)(opcode);
  |  |11672|       |            #endif
  |  |11673|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11674|      0|            (void)this_instr;
  |  |11675|      0|            frame->instr_ptr = next_instr;
  |  |11676|      0|            next_instr += 2;
  |  |11677|      0|            INSTRUCTION_STATS(SEND_ASYNC_GEN);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11678|      0|            static_assert(INLINE_CACHE_ENTRIES_SEND == 1, "incorrect cache size");
  |  |11679|      0|            _PyStackRef iter;
  |  |11680|      0|            _PyStackRef null_in;
  |  |11681|      0|            _PyStackRef v;
  |  |11682|      0|            _PyStackRef asend;
  |  |11683|      0|            _PyStackRef null_out;
  |  |11684|      0|            _PyStackRef retval;
  |  |11685|       |            /* Skip 1 cache entry */
  |  |11686|       |            // _GUARD_3OS_ASYNC_GEN_ASEND
  |  |11687|      0|            {
  |  |11688|      0|                iter = stack_pointer[-3];
  |  |11689|      0|                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
  |  |11690|      0|                if (!PyAsyncGenASend_CheckExact(iter_o)) {
  |  |  ------------------
  |  |  |  |   48|      0|#define PyAsyncGenASend_CheckExact(op) Py_IS_TYPE((op), &_PyAsyncGenASend_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (11690:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11691|      0|                    UPDATE_MISS_STATS(SEND);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11692|      0|                    assert(_PyOpcode_Deopt[opcode] == (SEND));
  |  |  ------------------
  |  |  |  Branch (11692:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11693|      0|                    JUMP_TO_PREDICTED(SEND);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11694|      0|                }
  |  |11695|      0|            }
  |  |11696|       |            // _SEND_ASYNC_GEN
  |  |11697|      0|            {
  |  |11698|      0|                v = stack_pointer[-1];
  |  |11699|      0|                null_in = stack_pointer[-2];
  |  |11700|      0|                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
  |  |11701|      0|                assert(PyAsyncGenASend_CheckExact(iter_o));
  |  |  ------------------
  |  |  |  Branch (11701:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11702|      0|                PyObject *val = PyStackRef_AsPyObjectBorrow(v);
  |  |11703|      0|                PyObject *retval_o;
  |  |11704|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11705|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11706|      0|                PySendResult what = _PyAsyncGenASend_Send(iter_o, val, &retval_o);
  |  |11707|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11708|      0|                if (what == PYGEN_ERROR) {
  |  |  ------------------
  |  |  |  Branch (11708:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11709|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11710|      0|                }
  |  |11711|      0|                stack_pointer += -1;
  |  |11712|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11713|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11714|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11715|      0|                PyStackRef_CLOSE(v);
  |  |11716|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11717|      0|                asend = iter;
  |  |11718|      0|                null_out = null_in;
  |  |11719|      0|                retval = PyStackRef_FromPyObjectSteal(retval_o);
  |  |11720|      0|                if (what == PYGEN_RETURN) {
  |  |  ------------------
  |  |  |  Branch (11720:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11721|      0|                    JUMPBY(oparg);
  |  |  ------------------
  |  |  |  |  261|      0|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  |11722|      0|                }
  |  |11723|      0|            }
  |  |11724|      0|            stack_pointer[-2] = asend;
  |  |11725|      0|            stack_pointer[-1] = null_out;
  |  |11726|      0|            stack_pointer[0] = retval;
  |  |11727|      0|            stack_pointer += 1;
  |  |11728|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11729|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11730|      0|        }
  |  |11731|       |
  |  |11732|      0|        TARGET(SEND_GEN) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11733|       |            #if _Py_TAIL_CALL_INTERP
  |  |11734|       |            int opcode = SEND_GEN;
  |  |11735|       |            (void)(opcode);
  |  |11736|       |            #endif
  |  |11737|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11738|      0|            (void)this_instr;
  |  |11739|      0|            frame->instr_ptr = next_instr;
  |  |11740|      0|            next_instr += 2;
  |  |11741|      0|            INSTRUCTION_STATS(SEND_GEN);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11742|      0|            static_assert(INLINE_CACHE_ENTRIES_SEND == 1, "incorrect cache size");
  |  |11743|      0|            _PyStackRef receiver;
  |  |11744|      0|            _PyStackRef v;
  |  |11745|      0|            _PyStackRef gen_frame;
  |  |11746|      0|            _PyStackRef new_frame;
  |  |11747|       |            /* Skip 1 cache entry */
  |  |11748|       |            // _CHECK_PEP_523
  |  |11749|      0|            {
  |  |11750|      0|                if (IS_PEP523_HOOKED(tstate)) {
  |  |  ------------------
  |  |  |  |  539|      0|#define IS_PEP523_HOOKED(tstate) (tstate->interp->eval_frame != NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (539:34): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11751|      0|                    UPDATE_MISS_STATS(SEND);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11752|      0|                    assert(_PyOpcode_Deopt[opcode] == (SEND));
  |  |  ------------------
  |  |  |  Branch (11752:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11753|      0|                    JUMP_TO_PREDICTED(SEND);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11754|      0|                }
  |  |11755|      0|            }
  |  |11756|       |            // _SEND_GEN_FRAME
  |  |11757|      0|            {
  |  |11758|      0|                v = stack_pointer[-1];
  |  |11759|      0|                receiver = stack_pointer[-3];
  |  |11760|      0|                PyGenObject *gen = (PyGenObject *)PyStackRef_AsPyObjectBorrow(receiver);
  |  |11761|      0|                if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) {
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               if (Py_TYPE(gen) != &PyGen_Type && Py_TYPE(gen) != &PyCoro_Type) {
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (11761:21): [True: 0, False: 0]
  |  |  |  Branch (11761:52): [True: 0, False: 0]
  |  |  ------------------
  |  |11762|      0|                    UPDATE_MISS_STATS(SEND);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11763|      0|                    assert(_PyOpcode_Deopt[opcode] == (SEND));
  |  |  ------------------
  |  |  |  Branch (11763:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11764|      0|                    JUMP_TO_PREDICTED(SEND);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11765|      0|                }
  |  |11766|      0|                if (!gen_try_set_executing((PyGenObject *)gen)) {
  |  |  ------------------
  |  |  |  Branch (11766:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11767|      0|                    UPDATE_MISS_STATS(SEND);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11768|      0|                    assert(_PyOpcode_Deopt[opcode] == (SEND));
  |  |  ------------------
  |  |  |  Branch (11768:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11769|      0|                    JUMP_TO_PREDICTED(SEND);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11770|      0|                }
  |  |11771|      0|                STAT_INC(SEND, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |11772|      0|                _PyInterpreterFrame *pushed_frame = &gen->gi_iframe;
  |  |11773|      0|                _PyFrame_StackPush(pushed_frame, PyStackRef_MakeHeapSafe(v));
  |  |11774|      0|                gen->gi_exc_state.previous_item = tstate->exc_info;
  |  |11775|      0|                tstate->exc_info = &gen->gi_exc_state;
  |  |11776|      0|                assert( 2u + oparg <= UINT16_MAX);
  |  |  ------------------
  |  |  |  Branch (11776:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11777|      0|                frame->return_offset = (uint16_t)( 2u + oparg);
  |  |11778|      0|                pushed_frame->previous = frame;
  |  |11779|      0|                gen_frame = PyStackRef_Wrap(pushed_frame);
  |  |11780|      0|            }
  |  |11781|       |            // _PUSH_FRAME
  |  |11782|      0|            {
  |  |11783|      0|                new_frame = gen_frame;
  |  |11784|      0|                assert(!IS_PEP523_HOOKED(tstate));
  |  |  ------------------
  |  |  |  Branch (11784:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11785|      0|                _PyInterpreterFrame *temp = PyStackRef_Unwrap(new_frame);
  |  |11786|      0|                stack_pointer += -1;
  |  |11787|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11788|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11789|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11790|      0|                assert(temp->previous == frame || temp->previous->previous == frame);
  |  |  ------------------
  |  |  |  Branch (11790:17): [True: 0, False: 0]
  |  |  |  Branch (11790:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11791|      0|                CALL_STAT_INC(inlined_py_calls);
  |  |  ------------------
  |  |  |  |   76|      0|#define CALL_STAT_INC(name) ((void)0)
  |  |  ------------------
  |  |11792|      0|                frame = tstate->current_frame = temp;
  |  |11793|      0|                tstate->py_recursion_remaining--;
  |  |11794|      0|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |11795|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11796|      0|                LOAD_IP(0);
  |  |  ------------------
  |  |  |  |  441|      0|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|      0|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11797|       |                #ifdef Py_DEBUG
  |  |11798|       |                assert(frame->previous->stackpointer_valid == 1);
  |  |11799|       |                #endif
  |  |11800|      0|                DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|      0|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  |11801|      0|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|      0|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  |11802|      0|            }
  |  |11803|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11804|      0|        }
  |  |11805|       |
  |  |11806|     14|        TARGET(SEND_VIRTUAL) {
  |  |  ------------------
  |  |  |  |  132|     14|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11807|       |            #if _Py_TAIL_CALL_INTERP
  |  |11808|       |            int opcode = SEND_VIRTUAL;
  |  |11809|       |            (void)(opcode);
  |  |11810|       |            #endif
  |  |11811|     14|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |11812|     14|            (void)this_instr;
  |  |11813|     14|            frame->instr_ptr = next_instr;
  |  |11814|     14|            next_instr += 2;
  |  |11815|     14|            INSTRUCTION_STATS(SEND_VIRTUAL);
  |  |  ------------------
  |  |  |  |   71|     14|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11816|     14|            static_assert(INLINE_CACHE_ENTRIES_SEND == 1, "incorrect cache size");
  |  |11817|     14|            _PyStackRef val;
  |  |11818|     14|            _PyStackRef nos;
  |  |11819|     14|            _PyStackRef iter;
  |  |11820|     14|            _PyStackRef null_or_index;
  |  |11821|     14|            _PyStackRef none;
  |  |11822|     14|            _PyStackRef next;
  |  |11823|       |            /* Skip 1 cache entry */
  |  |11824|       |            // _GUARD_TOS_IS_NONE
  |  |11825|     14|            {
  |  |11826|     14|                val = stack_pointer[-1];
  |  |11827|     14|                if (!PyStackRef_IsNone(val)) {
  |  |  ------------------
  |  |  |  |  495|     14|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|     14|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (11827:21): [True: 0, False: 14]
  |  |  ------------------
  |  |11828|      0|                    UPDATE_MISS_STATS(SEND);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11829|      0|                    assert(_PyOpcode_Deopt[opcode] == (SEND));
  |  |  ------------------
  |  |  |  Branch (11829:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11830|      0|                    JUMP_TO_PREDICTED(SEND);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11831|      0|                }
  |  |11832|     14|            }
  |  |11833|       |            // _GUARD_NOS_NOT_NULL
  |  |11834|     14|            {
  |  |11835|     14|                nos = stack_pointer[-2];
  |  |11836|     14|                if (PyStackRef_IsNull(nos)) {
  |  |  ------------------
  |  |  |  |  482|     14|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|     14|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|     14|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11837|      0|                    UPDATE_MISS_STATS(SEND);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |11838|      0|                    assert(_PyOpcode_Deopt[opcode] == (SEND));
  |  |  ------------------
  |  |  |  Branch (11838:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11839|      0|                    JUMP_TO_PREDICTED(SEND);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |11840|      0|                }
  |  |11841|     14|            }
  |  |11842|       |            // _SEND_VIRTUAL
  |  |11843|     14|            {
  |  |11844|     14|                none = val;
  |  |11845|     14|                null_or_index = nos;
  |  |11846|     14|                iter = stack_pointer[-3];
  |  |11847|     14|                PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
  |  |11848|     14|                Py_ssize_t index = PyStackRef_UntagInt(null_or_index);
  |  |11849|     14|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11850|     14|                _PyFrame_StackPointerValidate(frame);
  |  |11851|     14|                _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, index);
  |  |  ------------------
  |  |  |  |  213|     14|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11852|     14|                _PyFrame_StackPointerInvalidate(frame);
  |  |11853|     14|                PyObject *next_o = next_index.object;
  |  |11854|     14|                index = next_index.index;
  |  |11855|     14|                if (next_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (11855:21): [True: 5, False: 9]
  |  |  ------------------
  |  |11856|      5|                    if (index < 0) {
  |  |  ------------------
  |  |  |  Branch (11856:25): [True: 0, False: 5]
  |  |  ------------------
  |  |11857|      0|                        JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11858|      0|                    }
  |  |11859|      5|                    next = none;
  |  |11860|      5|                    JUMPBY(oparg);
  |  |  ------------------
  |  |  |  |  261|      5|#define JUMPBY(x)       (next_instr += (x))
  |  |  ------------------
  |  |11861|      5|                    DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      5|    { \
  |  |  |  |  201|      5|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      5|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      5|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      5|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      5|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      5|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      5|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      5|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 5]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      5|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      5|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      5|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      5|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      5|    }
  |  |  ------------------
  |  |11862|      5|                }
  |  |11863|     14|                next = PyStackRef_FromPyObjectSteal(next_o);
  |  |11864|     14|                null_or_index = PyStackRef_TagInt(index);
  |  |11865|     14|            }
  |  |11866|      0|            stack_pointer[-2] = null_or_index;
  |  |11867|     14|            stack_pointer[-1] = next;
  |  |11868|     14|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     14|    { \
  |  |  |  |  201|     14|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     14|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     14|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     14|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     14|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     14|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     14|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     14|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     14|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     14|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     14|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     14|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     14|    }
  |  |  ------------------
  |  |11869|     14|        }
  |  |11870|       |
  |  |11871|      0|        TARGET(SETUP_ANNOTATIONS) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11872|       |            #if _Py_TAIL_CALL_INTERP
  |  |11873|       |            int opcode = SETUP_ANNOTATIONS;
  |  |11874|       |            (void)(opcode);
  |  |11875|       |            #endif
  |  |11876|      0|            frame->instr_ptr = next_instr;
  |  |11877|      0|            next_instr += 1;
  |  |11878|      0|            INSTRUCTION_STATS(SETUP_ANNOTATIONS);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11879|      0|            if (LOCALS() == NULL) {
  |  |  ------------------
  |  |  |  |  328|      0|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  |  |  Branch (11879:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11880|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11881|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11882|      0|                _PyErr_Format(tstate, PyExc_SystemError,
  |  |11883|      0|                              "no locals found when setting up annotations");
  |  |11884|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11885|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11886|      0|            }
  |  |11887|      0|            int err;
  |  |11888|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11889|      0|            _PyFrame_StackPointerValidate(frame);
  |  |11890|      0|            PyObject* ann_dict = _PyMapping_GetOptionalItem2(LOCALS(), &_Py_ID(__annotations__), &err);
  |  |  ------------------
  |  |  |  |  328|      0|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  |                           PyObject* ann_dict = _PyMapping_GetOptionalItem2(LOCALS(), &_Py_ID(__annotations__), &err);
  |  |  ------------------
  |  |  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11891|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  |11892|      0|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (11892:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11893|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11894|      0|            }
  |  |11895|      0|            if (ann_dict == NULL) {
  |  |  ------------------
  |  |  |  Branch (11895:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11896|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11896:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11897|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11898|      0|                ann_dict = PyDict_New();
  |  |11899|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11900|      0|                if (ann_dict == NULL) {
  |  |  ------------------
  |  |  |  Branch (11900:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11901|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11902|      0|                }
  |  |11903|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11903:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11904|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11905|      0|                err = PyObject_SetItem(LOCALS(), &_Py_ID(__annotations__),
  |  |  ------------------
  |  |  |  |  328|      0|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  |                               err = PyObject_SetItem(LOCALS(), &_Py_ID(__annotations__),
  |  |  ------------------
  |  |  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11906|      0|                                       ann_dict);
  |  |11907|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11908|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11908:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11909|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11910|      0|                Py_DECREF(ann_dict);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11911|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11912|      0|                if (err) {
  |  |  ------------------
  |  |  |  Branch (11912:21): [True: 0, False: 0]
  |  |  ------------------
  |  |11913|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11914|      0|                }
  |  |11915|      0|            }
  |  |11916|      0|            else {
  |  |11917|      0|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (11917:17): [True: 0, False: 0]
  |  |  ------------------
  |  |11918|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11919|      0|                Py_DECREF(ann_dict);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |11920|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11921|      0|            }
  |  |11922|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |11923|      0|        }
  |  |11924|       |
  |  |11925|      2|        TARGET(SET_ADD) {
  |  |  ------------------
  |  |  |  |  132|      2|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11926|       |            #if _Py_TAIL_CALL_INTERP
  |  |11927|       |            int opcode = SET_ADD;
  |  |11928|       |            (void)(opcode);
  |  |11929|       |            #endif
  |  |11930|      2|            frame->instr_ptr = next_instr;
  |  |11931|      2|            next_instr += 1;
  |  |11932|      2|            INSTRUCTION_STATS(SET_ADD);
  |  |  ------------------
  |  |  |  |   71|      2|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11933|      2|            _PyStackRef set;
  |  |11934|      2|            _PyStackRef v;
  |  |11935|      2|            v = stack_pointer[-1];
  |  |11936|      2|            set = stack_pointer[-2 - (oparg-1)];
  |  |11937|      2|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11938|      2|            _PyFrame_StackPointerValidate(frame);
  |  |11939|      2|            int err = _PySet_AddTakeRef((PySetObject *)PyStackRef_AsPyObjectBorrow(set),
  |  |11940|      2|                                        PyStackRef_AsPyObjectSteal(v));
  |  |11941|      2|            _PyFrame_StackPointerInvalidate(frame);
  |  |11942|      2|            if (err) {
  |  |  ------------------
  |  |  |  Branch (11942:17): [True: 0, False: 2]
  |  |  ------------------
  |  |11943|      0|                JUMP_TO_LABEL(pop_1_error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |11944|      0|            }
  |  |11945|      2|            stack_pointer += -1;
  |  |11946|      2|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      2|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11947|      2|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      2|    { \
  |  |  |  |  201|      2|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      2|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      2|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      2|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      2|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      2|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      2|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      2|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      2|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      2|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      2|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      2|    }
  |  |  ------------------
  |  |11948|      2|        }
  |  |11949|       |
  |  |11950|  1.71k|        TARGET(SET_FUNCTION_ATTRIBUTE) {
  |  |  ------------------
  |  |  |  |  132|  1.71k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11951|       |            #if _Py_TAIL_CALL_INTERP
  |  |11952|       |            int opcode = SET_FUNCTION_ATTRIBUTE;
  |  |11953|       |            (void)(opcode);
  |  |11954|       |            #endif
  |  |11955|  1.71k|            frame->instr_ptr = next_instr;
  |  |11956|  1.71k|            next_instr += 1;
  |  |11957|  1.71k|            INSTRUCTION_STATS(SET_FUNCTION_ATTRIBUTE);
  |  |  ------------------
  |  |  |  |   71|  1.71k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11958|  1.71k|            _PyStackRef attr_st;
  |  |11959|  1.71k|            _PyStackRef func_in;
  |  |11960|  1.71k|            _PyStackRef func_out;
  |  |11961|  1.71k|            func_in = stack_pointer[-1];
  |  |11962|  1.71k|            attr_st = stack_pointer[-2];
  |  |11963|  1.71k|            PyObject *func = PyStackRef_AsPyObjectBorrow(func_in);
  |  |11964|  1.71k|            PyObject *attr = PyStackRef_AsPyObjectSteal(attr_st);
  |  |11965|  1.71k|            func_out = func_in;
  |  |11966|  1.71k|            assert(PyFunction_Check(func));
  |  |  ------------------
  |  |  |  Branch (11966:13): [True: 1.71k, False: 0]
  |  |  ------------------
  |  |11967|  1.71k|            size_t offset = _Py_FunctionAttributeOffsets[oparg];
  |  |11968|  1.71k|            assert(offset != 0);
  |  |  ------------------
  |  |  |  Branch (11968:13): [True: 1.71k, False: 0]
  |  |  ------------------
  |  |11969|  1.71k|            PyObject **ptr = (PyObject **)(((char *)func) + offset);
  |  |11970|  1.71k|            assert(*ptr == NULL);
  |  |  ------------------
  |  |  |  Branch (11970:13): [True: 1.71k, False: 0]
  |  |  ------------------
  |  |11971|  1.71k|            *ptr = attr;
  |  |11972|  1.71k|            stack_pointer[-2] = func_out;
  |  |11973|  1.71k|            stack_pointer += -1;
  |  |11974|  1.71k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.71k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |11975|  1.71k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.71k|    { \
  |  |  |  |  201|  1.71k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.71k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.71k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.71k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.71k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.71k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.71k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.71k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.71k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.71k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.71k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.71k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.71k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.71k|    }
  |  |  ------------------
  |  |11976|  1.71k|        }
  |  |11977|       |
  |  |11978|      0|        TARGET(SET_UPDATE) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |11979|       |            #if _Py_TAIL_CALL_INTERP
  |  |11980|       |            int opcode = SET_UPDATE;
  |  |11981|       |            (void)(opcode);
  |  |11982|       |            #endif
  |  |11983|      0|            frame->instr_ptr = next_instr;
  |  |11984|      0|            next_instr += 1;
  |  |11985|      0|            INSTRUCTION_STATS(SET_UPDATE);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |11986|      0|            _PyStackRef set;
  |  |11987|      0|            _PyStackRef iterable;
  |  |11988|      0|            _PyStackRef i;
  |  |11989|      0|            _PyStackRef value;
  |  |11990|       |            // _SET_UPDATE
  |  |11991|      0|            {
  |  |11992|      0|                iterable = stack_pointer[-1];
  |  |11993|      0|                set = stack_pointer[-2 - (oparg-1)];
  |  |11994|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |11995|      0|                _PyFrame_StackPointerValidate(frame);
  |  |11996|      0|                int err = _PySet_Update(PyStackRef_AsPyObjectBorrow(set),
  |  |11997|      0|                                    PyStackRef_AsPyObjectBorrow(iterable));
  |  |11998|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |11999|      0|                if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (11999:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12000|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12001|      0|                }
  |  |12002|      0|                i = iterable;
  |  |12003|      0|            }
  |  |12004|       |            // _POP_TOP
  |  |12005|      0|            {
  |  |12006|      0|                value = i;
  |  |12007|      0|                stack_pointer += -1;
  |  |12008|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12009|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12010|      0|                _PyFrame_StackPointerValidate(frame);
  |  |12011|      0|                PyStackRef_XCLOSE(value);
  |  |12012|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |12013|      0|            }
  |  |12014|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |12015|      0|        }
  |  |12016|       |
  |  |12017|  2.70k|        TARGET(STORE_ATTR) {
  |  |  ------------------
  |  |  |  |  132|  2.70k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12018|       |            #if _Py_TAIL_CALL_INTERP
  |  |12019|       |            int opcode = STORE_ATTR;
  |  |12020|       |            (void)(opcode);
  |  |12021|       |            #endif
  |  |12022|  2.70k|            frame->instr_ptr = next_instr;
  |  |12023|  2.70k|            next_instr += 5;
  |  |12024|  2.70k|            INSTRUCTION_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |   71|  2.70k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12025|  3.35k|            PREDICTED_STORE_ATTR:;
  |  |12026|  3.35k|            _Py_CODEUNIT* const this_instr = next_instr - 5;
  |  |12027|  3.35k|            (void)this_instr;
  |  |12028|  3.35k|            _PyStackRef v;
  |  |12029|  3.35k|            _PyStackRef owner;
  |  |12030|       |            // _SPECIALIZE_STORE_ATTR
  |  |12031|  3.35k|            {
  |  |12032|  3.35k|                owner = stack_pointer[-1];
  |  |12033|  3.35k|                v = stack_pointer[-2];
  |  |12034|  3.35k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |12035|  3.35k|                (void)counter;
  |  |12036|  3.35k|                #if ENABLE_SPECIALIZATION
  |  |12037|  3.35k|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  3.35k|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 285, False: 3.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12038|    285|                    if (!PyStackRef_IsNull(v)) {
  |  |  ------------------
  |  |  |  |  482|    285|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    285|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    285|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12038:25): [True: 285, False: 0]
  |  |  ------------------
  |  |12039|    285|                        PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|    285|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|    285|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|    285|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    285|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12039:42): [True: 285, False: 0]
  |  |  ------------------
  |  |12040|      0|                        next_instr = this_instr;
  |  |12041|    285|                        _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12042|    285|                        _PyFrame_StackPointerValidate(frame);
  |  |12043|    285|                        _Py_Specialize_StoreAttr(owner, next_instr, name);
  |  |12044|    285|                        _PyFrame_StackPointerInvalidate(frame);
  |  |12045|    285|                        DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|    285|    { \
  |  |  |  |  217|    285|        opcode = next_instr->op.code; \
  |  |  |  |  218|    285|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    285|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|    285|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    285|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|    285|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|    285|    }
  |  |  ------------------
  |  |12046|    285|                    }
  |  |12047|    285|                }
  |  |12048|  3.35k|                OPCODE_DEFERRED_INC(STORE_ATTR);
  |  |  ------------------
  |  |  |  |   90|  3.35k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |12049|  3.35k|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  3.35k|    do { \
  |  |  |  |  378|  3.35k|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  3.35k|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 3.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12050|  3.35k|                #endif  /* ENABLE_SPECIALIZATION */
  |  |12051|  3.35k|            }
  |  |12052|       |            /* Skip 3 cache entries */
  |  |12053|       |            // _STORE_ATTR
  |  |12054|      0|            {
  |  |12055|  3.35k|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|  3.35k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  3.35k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  3.35k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  3.07k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12055:34): [True: 3.07k, False: 285]
  |  |  ------------------
  |  |12056|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12057|  3.07k|                _PyFrame_StackPointerValidate(frame);
  |  |12058|  3.07k|                int err = PyObject_SetAttr(PyStackRef_AsPyObjectBorrow(owner),
  |  |12059|  3.07k|                                       name, PyStackRef_AsPyObjectBorrow(v));
  |  |12060|  3.07k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12061|  3.07k|                stack_pointer += -1;
  |  |12062|  3.07k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.07k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12063|  3.07k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12064|  3.07k|                _PyFrame_StackPointerValidate(frame);
  |  |12065|  3.07k|                PyStackRef_CLOSE(owner);
  |  |12066|  3.07k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12067|  3.07k|                stack_pointer += -1;
  |  |12068|  3.07k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  3.07k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12069|  3.07k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12070|  3.07k|                _PyFrame_StackPointerValidate(frame);
  |  |12071|  3.07k|                PyStackRef_XCLOSE(v);
  |  |12072|  3.07k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12073|  3.07k|                if (err) {
  |  |  ------------------
  |  |  |  Branch (12073:21): [True: 0, False: 3.07k]
  |  |  ------------------
  |  |12074|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12075|      0|                }
  |  |12076|  3.07k|            }
  |  |12077|  3.07k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  3.07k|    { \
  |  |  |  |  201|  3.07k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  3.07k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.07k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  3.07k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  3.07k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  3.07k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  3.07k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  3.07k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 3.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  3.07k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  3.07k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  3.07k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  3.07k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  3.07k|    }
  |  |  ------------------
  |  |12078|  3.07k|        }
  |  |12079|       |
  |  |12080|   447k|        TARGET(STORE_ATTR_INSTANCE_VALUE) {
  |  |  ------------------
  |  |  |  |  132|   447k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12081|       |            #if _Py_TAIL_CALL_INTERP
  |  |12082|       |            int opcode = STORE_ATTR_INSTANCE_VALUE;
  |  |12083|       |            (void)(opcode);
  |  |12084|       |            #endif
  |  |12085|   447k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12086|   447k|            (void)this_instr;
  |  |12087|   447k|            frame->instr_ptr = next_instr;
  |  |12088|   447k|            next_instr += 5;
  |  |12089|   447k|            INSTRUCTION_STATS(STORE_ATTR_INSTANCE_VALUE);
  |  |  ------------------
  |  |  |  |   71|   447k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12090|   447k|            static_assert(INLINE_CACHE_ENTRIES_STORE_ATTR == 4, "incorrect cache size");
  |  |12091|   447k|            _PyStackRef value;
  |  |12092|   447k|            _PyStackRef owner;
  |  |12093|   447k|            _PyStackRef o;
  |  |12094|       |            /* Skip 1 cache entry */
  |  |12095|       |            // _LOCK_OBJECT
  |  |12096|   447k|            {
  |  |12097|   447k|                value = stack_pointer[-1];
  |  |12098|   447k|                if (!LOCK_OBJECT(PyStackRef_AsPyObjectBorrow(value))) {
  |  |  ------------------
  |  |  |  |  322|   447k|#  define LOCK_OBJECT(op) (1)
  |  |  ------------------
  |  |  |  Branch (12098:21): [Folded, False: 447k]
  |  |  ------------------
  |  |12099|      0|                    UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12100|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12100:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12101|      0|                    JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12102|      0|                }
  |  |12103|   447k|            }
  |  |12104|       |            // _GUARD_TYPE_VERSION_LOCKED
  |  |12105|   447k|            {
  |  |12106|   447k|                owner = value;
  |  |12107|   447k|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  |12108|   447k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  |12109|   447k|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (12109:17): [True: 447k, False: 0]
  |  |  ------------------
  |  |12110|   447k|                PyTypeObject *tp = Py_TYPE(owner_o);
  |  |  ------------------
  |  |  |  |  213|   447k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   447k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   447k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12111|   447k|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|   447k|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (12111:21): [True: 652, False: 446k]
  |  |  ------------------
  |  |12112|    652|                    UNLOCK_OBJECT(owner_o);
  |  |  ------------------
  |  |  |  |  323|    652|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12113|    652|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (12113:25): [True: 652, Folded]
  |  |  ------------------
  |  |12114|    652|                        UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|    652|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12115|    652|                        assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12115:25): [True: 652, False: 0]
  |  |  ------------------
  |  |12116|    652|                        JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|    652|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12117|      0|                    }
  |  |12118|    652|                }
  |  |12119|   447k|            }
  |  |12120|       |            // _GUARD_DORV_NO_DICT
  |  |12121|   446k|            {
  |  |12122|   446k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  |12123|   446k|                assert(Py_TYPE(owner_o)->tp_dictoffset < 0);
  |  |  ------------------
  |  |  |  Branch (12123:17): [True: 446k, False: 0]
  |  |  ------------------
  |  |12124|   446k|                assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_INLINE_VALUES);
  |  |  ------------------
  |  |  |  Branch (12124:17): [True: 446k, False: 0]
  |  |  ------------------
  |  |12125|   446k|                if (_PyObject_GetManagedDict(owner_o) ||
  |  |  ------------------
  |  |  |  Branch (12125:21): [True: 0, False: 446k]
  |  |  ------------------
  |  |12126|   446k|                    !FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner_o)->valid)) {
  |  |  ------------------
  |  |  |  |  154|   446k|#define FT_ATOMIC_LOAD_UINT8(value) value
  |  |  ------------------
  |  |  |  Branch (12126:21): [True: 0, False: 446k]
  |  |  ------------------
  |  |12127|      0|                    UNLOCK_OBJECT(owner_o);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12128|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (12128:25): [True: 0, Folded]
  |  |  ------------------
  |  |12129|      0|                        UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12130|      0|                        assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12130:25): [True: 0, False: 0]
  |  |  ------------------
  |  |12131|      0|                        JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12132|      0|                    }
  |  |12133|      0|                }
  |  |12134|   446k|            }
  |  |12135|       |            // _STORE_ATTR_INSTANCE_VALUE
  |  |12136|   446k|            {
  |  |12137|   446k|                value = stack_pointer[-2];
  |  |12138|   446k|                uint16_t offset = read_u16(&this_instr[4].cache);
  |  |12139|   446k|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  |12140|   446k|                STAT_INC(STORE_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|   446k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |12141|   446k|                assert(_PyObject_GetManagedDict(owner_o) == NULL);
  |  |  ------------------
  |  |  |  Branch (12141:17): [True: 446k, False: 0]
  |  |  ------------------
  |  |12142|   446k|                PyObject **value_ptr = (PyObject**)(((char *)owner_o) + offset);
  |  |12143|   446k|                PyObject *old_value = *value_ptr;
  |  |12144|   446k|                FT_ATOMIC_STORE_PTR_RELEASE(*value_ptr, PyStackRef_AsPyObjectSteal(value));
  |  |  ------------------
  |  |  |  |  164|   446k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  |  |12145|   446k|                if (old_value == NULL) {
  |  |  ------------------
  |  |  |  Branch (12145:21): [True: 443k, False: 3.56k]
  |  |  ------------------
  |  |12146|   443k|                    PyDictValues *values = _PyObject_InlineValues(owner_o);
  |  |12147|   443k|                    Py_ssize_t index = value_ptr - values->values;
  |  |12148|   443k|                    _PyDictValues_AddToInsertionOrder(values, index);
  |  |12149|   443k|                }
  |  |12150|   446k|                UNLOCK_OBJECT(owner_o);
  |  |  ------------------
  |  |  |  |  323|   446k|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12151|   446k|                o = owner;
  |  |12152|   446k|                stack_pointer[-2] = o;
  |  |12153|   446k|                stack_pointer += -1;
  |  |12154|   446k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   446k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12155|   446k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12156|   446k|                _PyFrame_StackPointerValidate(frame);
  |  |12157|   446k|                Py_XDECREF(old_value);
  |  |  ------------------
  |  |  |  |   69|   446k|    do { \
  |  |  |  |   70|   446k|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   446k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   446k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   71|   446k|        if (xop != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:13): [True: 3.56k, False: 443k]
  |  |  |  |  ------------------
  |  |  |  |   72|  3.56k|            Py_DECREF(xop); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|  3.56k|    do { \
  |  |  |  |  |  |   81|  3.56k|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  3.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  3.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|  3.56k|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|  3.56k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|  3.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|  3.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 3.15k, False: 404]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|  3.15k|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|  3.15k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  3.15k|            break; \
  |  |  |  |  |  |   85|  3.15k|        } \
  |  |  |  |  |  |   86|  3.56k|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|    404|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|    404|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 372, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|    372|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|    372|    do { \
  |  |  |  |  |  |  |  |  113|    372|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|    372|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 372]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|    372|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 372]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|    372|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|    372|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|    372|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|    372|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|    372|            (*dealloc)(op); \
  |  |  |  |  |  |   91|    372|        } \
  |  |  |  |  |  |   92|    404|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 404]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   73|  3.56k|        } \
  |  |  |  |   74|   446k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 446k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12158|   446k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12159|   446k|            }
  |  |12160|       |            // _POP_TOP
  |  |12161|      0|            {
  |  |12162|   446k|                value = o;
  |  |12163|   446k|                stack_pointer += -1;
  |  |12164|   446k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|   446k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12165|   446k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12166|   446k|                _PyFrame_StackPointerValidate(frame);
  |  |12167|   446k|                PyStackRef_XCLOSE(value);
  |  |12168|   446k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12169|   446k|            }
  |  |12170|   446k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   446k|    { \
  |  |  |  |  201|   446k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   446k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   446k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   446k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   446k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   446k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   446k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   446k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 446k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   446k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   446k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   446k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   446k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   446k|    }
  |  |  ------------------
  |  |12171|   446k|        }
  |  |12172|       |
  |  |12173|    377|        TARGET(STORE_ATTR_SLOT) {
  |  |  ------------------
  |  |  |  |  132|    377|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12174|       |            #if _Py_TAIL_CALL_INTERP
  |  |12175|       |            int opcode = STORE_ATTR_SLOT;
  |  |12176|       |            (void)(opcode);
  |  |12177|       |            #endif
  |  |12178|    377|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12179|    377|            (void)this_instr;
  |  |12180|    377|            frame->instr_ptr = next_instr;
  |  |12181|    377|            next_instr += 5;
  |  |12182|    377|            INSTRUCTION_STATS(STORE_ATTR_SLOT);
  |  |  ------------------
  |  |  |  |   71|    377|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12183|    377|            static_assert(INLINE_CACHE_ENTRIES_STORE_ATTR == 4, "incorrect cache size");
  |  |12184|    377|            _PyStackRef owner;
  |  |12185|    377|            _PyStackRef value;
  |  |12186|    377|            _PyStackRef o;
  |  |12187|       |            /* Skip 1 cache entry */
  |  |12188|       |            // _GUARD_TYPE_VERSION
  |  |12189|    377|            {
  |  |12190|    377|                owner = stack_pointer[-1];
  |  |12191|    377|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  |12192|    377|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|    377|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    377|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    377|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12193|    377|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (12193:17): [True: 377, False: 0]
  |  |  ------------------
  |  |12194|    377|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|    377|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (12194:21): [True: 0, False: 377]
  |  |  ------------------
  |  |12195|      0|                    UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12196|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12196:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12197|      0|                    JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12198|      0|                }
  |  |12199|    377|            }
  |  |12200|       |            // _STORE_ATTR_SLOT
  |  |12201|    377|            {
  |  |12202|    377|                value = stack_pointer[-2];
  |  |12203|    377|                uint16_t index = read_u16(&this_instr[4].cache);
  |  |12204|    377|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  |12205|    377|                if (!LOCK_OBJECT(owner_o)) {
  |  |  ------------------
  |  |  |  |  322|    377|#  define LOCK_OBJECT(op) (1)
  |  |  ------------------
  |  |  |  Branch (12205:21): [Folded, False: 377]
  |  |  ------------------
  |  |12206|      0|                    UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12207|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12207:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12208|      0|                    JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12209|      0|                }
  |  |12210|    377|                char *addr = (char *)owner_o + index;
  |  |12211|    377|                STAT_INC(STORE_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|    377|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |12212|    377|                PyObject *old_value = *(PyObject **)addr;
  |  |12213|    377|                FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, PyStackRef_AsPyObjectSteal(value));
  |  |  ------------------
  |  |  |  |  164|    377|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  |  |12214|    377|                UNLOCK_OBJECT(owner_o);
  |  |  ------------------
  |  |  |  |  323|    377|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12215|    377|                o = owner;
  |  |12216|    377|                stack_pointer[-2] = o;
  |  |12217|    377|                stack_pointer += -1;
  |  |12218|    377|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    377|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12219|    377|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12220|    377|                _PyFrame_StackPointerValidate(frame);
  |  |12221|    377|                Py_XDECREF(old_value);
  |  |  ------------------
  |  |  |  |   69|    377|    do { \
  |  |  |  |   70|    377|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    377|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    377|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   71|    377|        if (xop != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:13): [True: 0, False: 377]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|            Py_DECREF(xop); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   73|      0|        } \
  |  |  |  |   74|    377|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 377]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12222|    377|                _PyFrame_StackPointerInvalidate(frame);
  |  |12223|    377|            }
  |  |12224|       |            // _POP_TOP
  |  |12225|      0|            {
  |  |12226|    377|                value = o;
  |  |12227|    377|                stack_pointer += -1;
  |  |12228|    377|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    377|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12229|    377|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12230|    377|                _PyFrame_StackPointerValidate(frame);
  |  |12231|    377|                PyStackRef_XCLOSE(value);
  |  |12232|    377|                _PyFrame_StackPointerInvalidate(frame);
  |  |12233|    377|            }
  |  |12234|    377|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    377|    { \
  |  |  |  |  201|    377|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    377|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    377|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    377|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    377|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    377|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    377|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    377|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 377]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    377|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    377|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    377|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    377|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    377|    }
  |  |  ------------------
  |  |12235|    377|        }
  |  |12236|       |
  |  |12237|      0|        TARGET(STORE_ATTR_WITH_HINT) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12238|       |            #if _Py_TAIL_CALL_INTERP
  |  |12239|       |            int opcode = STORE_ATTR_WITH_HINT;
  |  |12240|       |            (void)(opcode);
  |  |12241|       |            #endif
  |  |12242|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12243|      0|            (void)this_instr;
  |  |12244|      0|            frame->instr_ptr = next_instr;
  |  |12245|      0|            next_instr += 5;
  |  |12246|      0|            INSTRUCTION_STATS(STORE_ATTR_WITH_HINT);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12247|      0|            static_assert(INLINE_CACHE_ENTRIES_STORE_ATTR == 4, "incorrect cache size");
  |  |12248|      0|            _PyStackRef owner;
  |  |12249|      0|            _PyStackRef value;
  |  |12250|      0|            _PyStackRef o;
  |  |12251|       |            /* Skip 1 cache entry */
  |  |12252|       |            // _GUARD_TYPE_VERSION
  |  |12253|      0|            {
  |  |12254|      0|                owner = stack_pointer[-1];
  |  |12255|      0|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  |12256|      0|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12257|      0|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (12257:17): [True: 0, False: 0]
  |  |  ------------------
  |  |12258|      0|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|      0|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (12258:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12259|      0|                    UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12260|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12260:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12261|      0|                    JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12262|      0|                }
  |  |12263|      0|            }
  |  |12264|       |            // _STORE_ATTR_WITH_HINT
  |  |12265|      0|            {
  |  |12266|      0|                value = stack_pointer[-2];
  |  |12267|      0|                uint16_t hint = read_u16(&this_instr[4].cache);
  |  |12268|      0|                PyObject *owner_o = PyStackRef_AsPyObjectBorrow(owner);
  |  |12269|      0|                assert(Py_TYPE(owner_o)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
  |  |  ------------------
  |  |  |  Branch (12269:17): [True: 0, False: 0]
  |  |  ------------------
  |  |12270|      0|                PyDictObject *dict = _PyObject_GetManagedDict(owner_o);
  |  |12271|      0|                if (dict == NULL) {
  |  |  ------------------
  |  |  |  Branch (12271:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12272|      0|                    UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12273|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12273:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12274|      0|                    JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12275|      0|                }
  |  |12276|      0|                if (!LOCK_OBJECT(dict)) {
  |  |  ------------------
  |  |  |  |  322|      0|#  define LOCK_OBJECT(op) (1)
  |  |  ------------------
  |  |  |  Branch (12276:21): [Folded, False: 0]
  |  |  ------------------
  |  |12277|      0|                    UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12278|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12278:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12279|      0|                    JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12280|      0|                }
  |  |12281|      0|                assert(PyDict_CheckExact((PyObject *)dict));
  |  |  ------------------
  |  |  |  Branch (12281:17): [True: 0, False: 0]
  |  |  ------------------
  |  |12282|      0|                PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|      0|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12282:34): [True: 0, False: 0]
  |  |  ------------------
  |  |12283|      0|                if (hint >= (size_t)dict->ma_keys->dk_nentries ||
  |  |  ------------------
  |  |  |  Branch (12283:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12284|      0|                    dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
  |  |  ------------------
  |  |  |  Branch (12284:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12285|      0|                    UNLOCK_OBJECT(dict);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12286|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (12286:25): [True: 0, Folded]
  |  |  ------------------
  |  |12287|      0|                        UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12288|      0|                        assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12288:25): [True: 0, False: 0]
  |  |  ------------------
  |  |12289|      0|                        JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12290|      0|                    }
  |  |12291|      0|                }
  |  |12292|      0|                PyDictUnicodeEntry *ep = DK_UNICODE_ENTRIES(dict->ma_keys) + hint;
  |  |12293|      0|                if (ep->me_key != name) {
  |  |  ------------------
  |  |  |  Branch (12293:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12294|      0|                    UNLOCK_OBJECT(dict);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12295|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (12295:25): [True: 0, Folded]
  |  |  ------------------
  |  |12296|      0|                        UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12297|      0|                        assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12297:25): [True: 0, False: 0]
  |  |  ------------------
  |  |12298|      0|                        JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12299|      0|                    }
  |  |12300|      0|                }
  |  |12301|      0|                PyObject *old_value = ep->me_value;
  |  |12302|      0|                if (old_value == NULL) {
  |  |  ------------------
  |  |  |  Branch (12302:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12303|      0|                    UNLOCK_OBJECT(dict);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12304|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (12304:25): [True: 0, Folded]
  |  |  ------------------
  |  |12305|      0|                        UPDATE_MISS_STATS(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12306|      0|                        assert(_PyOpcode_Deopt[opcode] == (STORE_ATTR));
  |  |  ------------------
  |  |  |  Branch (12306:25): [True: 0, False: 0]
  |  |  ------------------
  |  |12307|      0|                        JUMP_TO_PREDICTED(STORE_ATTR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12308|      0|                    }
  |  |12309|      0|                }
  |  |12310|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12311|      0|                _PyFrame_StackPointerValidate(frame);
  |  |12312|      0|                _PyDict_NotifyEvent(PyDict_EVENT_MODIFIED, dict, name, PyStackRef_AsPyObjectBorrow(value));
  |  |12313|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |12314|      0|                FT_ATOMIC_STORE_PTR_RELEASE(ep->me_value, PyStackRef_AsPyObjectSteal(value));
  |  |  ------------------
  |  |  |  |  164|      0|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  |  |12315|      0|                UNLOCK_OBJECT(dict);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12316|      0|                STAT_INC(STORE_ATTR, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |12317|      0|                o = owner;
  |  |12318|      0|                stack_pointer[-2] = o;
  |  |12319|      0|                stack_pointer += -1;
  |  |12320|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12321|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12322|      0|                _PyFrame_StackPointerValidate(frame);
  |  |12323|      0|                Py_XDECREF(old_value);
  |  |  ------------------
  |  |  |  |   69|      0|    do { \
  |  |  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   71|      0|        if (xop != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|            Py_DECREF(xop); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|      0|    do { \
  |  |  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   73|      0|        } \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12324|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |12325|      0|            }
  |  |12326|       |            // _POP_TOP
  |  |12327|      0|            {
  |  |12328|      0|                value = o;
  |  |12329|      0|                stack_pointer += -1;
  |  |12330|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12331|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12332|      0|                _PyFrame_StackPointerValidate(frame);
  |  |12333|      0|                PyStackRef_XCLOSE(value);
  |  |12334|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |12335|      0|            }
  |  |12336|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |12337|      0|        }
  |  |12338|       |
  |  |12339|  1.12k|        TARGET(STORE_DEREF) {
  |  |  ------------------
  |  |  |  |  132|  1.12k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12340|       |            #if _Py_TAIL_CALL_INTERP
  |  |12341|       |            int opcode = STORE_DEREF;
  |  |12342|       |            (void)(opcode);
  |  |12343|       |            #endif
  |  |12344|  1.12k|            frame->instr_ptr = next_instr;
  |  |12345|  1.12k|            next_instr += 1;
  |  |12346|  1.12k|            INSTRUCTION_STATS(STORE_DEREF);
  |  |  ------------------
  |  |  |  |   71|  1.12k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12347|  1.12k|            _PyStackRef v;
  |  |12348|  1.12k|            v = stack_pointer[-1];
  |  |12349|  1.12k|            PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg));
  |  |  ------------------
  |  |  |  |  285|  1.12k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12350|  1.12k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12351|  1.12k|            _PyFrame_StackPointerValidate(frame);
  |  |12352|  1.12k|            PyCell_SetTakeRef(cell, PyStackRef_AsPyObjectSteal(v));
  |  |12353|  1.12k|            _PyFrame_StackPointerInvalidate(frame);
  |  |12354|  1.12k|            stack_pointer += -1;
  |  |12355|  1.12k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.12k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12356|  1.12k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.12k|    { \
  |  |  |  |  201|  1.12k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.12k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.12k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.12k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.12k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.12k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.12k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.12k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.12k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.12k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.12k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.12k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.12k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.12k|    }
  |  |  ------------------
  |  |12357|  1.12k|        }
  |  |12358|       |
  |  |12359|  64.9M|        TARGET(STORE_FAST) {
  |  |  ------------------
  |  |  |  |  132|  64.9M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12360|       |            #if _Py_TAIL_CALL_INTERP
  |  |12361|       |            int opcode = STORE_FAST;
  |  |12362|       |            (void)(opcode);
  |  |12363|       |            #endif
  |  |12364|  64.9M|            frame->instr_ptr = next_instr;
  |  |12365|  64.9M|            next_instr += 1;
  |  |12366|  64.9M|            INSTRUCTION_STATS(STORE_FAST);
  |  |  ------------------
  |  |  |  |   71|  64.9M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12367|  64.9M|            _PyStackRef value;
  |  |12368|  64.9M|            _PyStackRef trash;
  |  |12369|       |            // _SWAP_FAST
  |  |12370|  64.9M|            {
  |  |12371|  64.9M|                value = stack_pointer[-1];
  |  |12372|  64.9M|                _PyStackRef tmp = GETLOCAL(oparg);
  |  |  ------------------
  |  |  |  |  285|  64.9M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12373|  64.9M|                GETLOCAL(oparg) = value;
  |  |  ------------------
  |  |  |  |  285|  64.9M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12374|  64.9M|                trash = tmp;
  |  |12375|  64.9M|            }
  |  |12376|       |            // _POP_TOP
  |  |12377|  64.9M|            {
  |  |12378|  64.9M|                value = trash;
  |  |12379|  64.9M|                stack_pointer += -1;
  |  |12380|  64.9M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  64.9M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12381|  64.9M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12382|  64.9M|                _PyFrame_StackPointerValidate(frame);
  |  |12383|  64.9M|                PyStackRef_XCLOSE(value);
  |  |12384|  64.9M|                _PyFrame_StackPointerInvalidate(frame);
  |  |12385|  64.9M|            }
  |  |12386|  64.9M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  64.9M|    { \
  |  |  |  |  201|  64.9M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  64.9M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  64.9M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  64.9M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  64.9M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  64.9M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  64.9M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  64.9M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 64.9M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  64.9M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  64.9M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  64.9M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  64.9M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  64.9M|    }
  |  |  ------------------
  |  |12387|  64.9M|        }
  |  |12388|       |
  |  |12389|  64.9M|        TARGET(STORE_FAST_LOAD_FAST) {
  |  |  ------------------
  |  |  |  |  132|  9.44k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12390|       |            #if _Py_TAIL_CALL_INTERP
  |  |12391|       |            int opcode = STORE_FAST_LOAD_FAST;
  |  |12392|       |            (void)(opcode);
  |  |12393|       |            #endif
  |  |12394|  9.44k|            frame->instr_ptr = next_instr;
  |  |12395|  9.44k|            next_instr += 1;
  |  |12396|  9.44k|            INSTRUCTION_STATS(STORE_FAST_LOAD_FAST);
  |  |  ------------------
  |  |  |  |   71|  9.44k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12397|  9.44k|            _PyStackRef value1;
  |  |12398|  9.44k|            _PyStackRef value2;
  |  |12399|  9.44k|            value1 = stack_pointer[-1];
  |  |12400|  9.44k|            uint32_t oparg1 = oparg >> 4;
  |  |12401|  9.44k|            uint32_t oparg2 = oparg & 15;
  |  |12402|  9.44k|            _PyStackRef tmp = GETLOCAL(oparg1);
  |  |  ------------------
  |  |  |  |  285|  9.44k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12403|  9.44k|            GETLOCAL(oparg1) = value1;
  |  |  ------------------
  |  |  |  |  285|  9.44k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12404|  9.44k|            value2 = PyStackRef_DUP(GETLOCAL(oparg2));
  |  |  ------------------
  |  |  |  |  285|  9.44k|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12405|  9.44k|            stack_pointer[-1] = value2;
  |  |12406|  9.44k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12407|  9.44k|            _PyFrame_StackPointerValidate(frame);
  |  |12408|  9.44k|            PyStackRef_XCLOSE(tmp);
  |  |12409|  9.44k|            _PyFrame_StackPointerInvalidate(frame);
  |  |12410|  9.44k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  9.44k|    { \
  |  |  |  |  201|  9.44k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  9.44k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  9.44k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  9.44k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  9.44k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  9.44k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  9.44k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  9.44k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 9.44k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  9.44k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  9.44k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  9.44k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  9.44k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  9.44k|    }
  |  |  ------------------
  |  |12411|  9.44k|        }
  |  |12412|       |
  |  |12413|  1.34M|        TARGET(STORE_FAST_STORE_FAST) {
  |  |  ------------------
  |  |  |  |  132|  1.34M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12414|       |            #if _Py_TAIL_CALL_INTERP
  |  |12415|       |            int opcode = STORE_FAST_STORE_FAST;
  |  |12416|       |            (void)(opcode);
  |  |12417|       |            #endif
  |  |12418|  1.34M|            frame->instr_ptr = next_instr;
  |  |12419|  1.34M|            next_instr += 1;
  |  |12420|  1.34M|            INSTRUCTION_STATS(STORE_FAST_STORE_FAST);
  |  |  ------------------
  |  |  |  |   71|  1.34M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12421|  1.34M|            _PyStackRef value2;
  |  |12422|  1.34M|            _PyStackRef value1;
  |  |12423|  1.34M|            value1 = stack_pointer[-1];
  |  |12424|  1.34M|            value2 = stack_pointer[-2];
  |  |12425|  1.34M|            uint32_t oparg1 = oparg >> 4;
  |  |12426|  1.34M|            uint32_t oparg2 = oparg & 15;
  |  |12427|  1.34M|            _PyStackRef tmp = GETLOCAL(oparg1);
  |  |  ------------------
  |  |  |  |  285|  1.34M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12428|  1.34M|            GETLOCAL(oparg1) = value1;
  |  |  ------------------
  |  |  |  |  285|  1.34M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12429|  1.34M|            stack_pointer += -1;
  |  |12430|  1.34M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.34M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12431|  1.34M|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12432|  1.34M|            _PyFrame_StackPointerValidate(frame);
  |  |12433|  1.34M|            PyStackRef_XCLOSE(tmp);
  |  |12434|  1.34M|            _PyFrame_StackPointerInvalidate(frame);
  |  |12435|  1.34M|            tmp = GETLOCAL(oparg2);
  |  |  ------------------
  |  |  |  |  285|  1.34M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12436|  1.34M|            GETLOCAL(oparg2) = value2;
  |  |  ------------------
  |  |  |  |  285|  1.34M|#define GETLOCAL(i)     (frame->localsplus[i])
  |  |  ------------------
  |  |12437|  1.34M|            stack_pointer += -1;
  |  |12438|  1.34M|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.34M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12439|  1.34M|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12440|  1.34M|            _PyFrame_StackPointerValidate(frame);
  |  |12441|  1.34M|            PyStackRef_XCLOSE(tmp);
  |  |12442|  1.34M|            _PyFrame_StackPointerInvalidate(frame);
  |  |12443|  1.34M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.34M|    { \
  |  |  |  |  201|  1.34M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.34M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.34M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.34M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.34M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.34M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.34M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.34M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.34M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.34M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.34M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.34M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.34M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.34M|    }
  |  |  ------------------
  |  |12444|  1.34M|        }
  |  |12445|       |
  |  |12446|  1.34M|        TARGET(STORE_GLOBAL) {
  |  |  ------------------
  |  |  |  |  132|     45|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12447|       |            #if _Py_TAIL_CALL_INTERP
  |  |12448|       |            int opcode = STORE_GLOBAL;
  |  |12449|       |            (void)(opcode);
  |  |12450|       |            #endif
  |  |12451|     45|            frame->instr_ptr = next_instr;
  |  |12452|     45|            next_instr += 1;
  |  |12453|     45|            INSTRUCTION_STATS(STORE_GLOBAL);
  |  |  ------------------
  |  |  |  |   71|     45|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12454|     45|            _PyStackRef v;
  |  |12455|     45|            v = stack_pointer[-1];
  |  |12456|     45|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|     45|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|     45|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|     45|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     45|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12456:30): [True: 45, False: 0]
  |  |  ------------------
  |  |12457|      0|            int err;
  |  |12458|     45|            if (PyStackRef_IsNull(v)) {
  |  |  ------------------
  |  |  |  |  482|     45|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|     45|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|     45|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 0, False: 45]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12459|      0|                stack_pointer += -1;
  |  |12460|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12461|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12462|      0|                _PyFrame_StackPointerValidate(frame);
  |  |12463|      0|                err = PyDict_Pop(GLOBALS(), name, NULL);
  |  |  ------------------
  |  |  |  |  326|      0|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |12464|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |12465|      0|                if (err == 0) {
  |  |  ------------------
  |  |  |  Branch (12465:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12466|      0|                    err = -1;
  |  |12467|      0|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (12467:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12468|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |12469|      0|                    _PyEval_FormatExcCheckArg(tstate, PyExc_NameError,
  |  |12470|      0|                        NAME_ERROR_MSG, name);
  |  |  ------------------
  |  |  |  |  405|      0|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  |  |  ------------------
  |  |12471|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |12472|      0|                }
  |  |12473|      0|            }
  |  |12474|     45|            else {
  |  |12475|     45|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12476|     45|                _PyFrame_StackPointerValidate(frame);
  |  |12477|     45|                err = PyDict_SetItem(GLOBALS(), name, PyStackRef_AsPyObjectBorrow(v));
  |  |  ------------------
  |  |  |  |  326|     45|#define GLOBALS() frame->f_globals
  |  |  ------------------
  |  |12478|     45|                _PyFrame_StackPointerInvalidate(frame);
  |  |12479|     45|                stack_pointer += -1;
  |  |12480|     45|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     45|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12481|     45|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12482|     45|                _PyFrame_StackPointerValidate(frame);
  |  |12483|     45|                PyStackRef_CLOSE(v);
  |  |12484|     45|                _PyFrame_StackPointerInvalidate(frame);
  |  |12485|     45|            }
  |  |12486|     45|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (12486:17): [True: 0, False: 45]
  |  |  ------------------
  |  |12487|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12488|      0|            }
  |  |12489|     45|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     45|    { \
  |  |  |  |  201|     45|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     45|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     45|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     45|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     45|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     45|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     45|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     45|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 45]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     45|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     45|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     45|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     45|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     45|    }
  |  |  ------------------
  |  |12490|     45|        }
  |  |12491|       |
  |  |12492|  8.57k|        TARGET(STORE_NAME) {
  |  |  ------------------
  |  |  |  |  132|  8.57k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12493|       |            #if _Py_TAIL_CALL_INTERP
  |  |12494|       |            int opcode = STORE_NAME;
  |  |12495|       |            (void)(opcode);
  |  |12496|       |            #endif
  |  |12497|  8.57k|            frame->instr_ptr = next_instr;
  |  |12498|  8.57k|            next_instr += 1;
  |  |12499|  8.57k|            INSTRUCTION_STATS(STORE_NAME);
  |  |  ------------------
  |  |  |  |   71|  8.57k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12500|  8.57k|            _PyStackRef v;
  |  |12501|  8.57k|            v = stack_pointer[-1];
  |  |12502|  8.57k|            PyObject *name = GETITEM(FRAME_CO_NAMES, oparg);
  |  |  ------------------
  |  |  |  |  236|  8.57k|#define GETITEM(v, i) PyTuple_GET_ITEM((v), (i))
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  8.57k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   19|  8.57k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  8.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12502:30): [True: 8.57k, False: 0]
  |  |  ------------------
  |  |12503|  8.57k|            PyObject *ns = LOCALS();
  |  |  ------------------
  |  |  |  |  328|  8.57k|#define LOCALS() frame->f_locals
  |  |  ------------------
  |  |12504|  8.57k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12505|  8.57k|            _PyFrame_StackPointerValidate(frame);
  |  |12506|  8.57k|            int error = _PyEval_StoreName(tstate, v, name, ns);
  |  |12507|  8.57k|            _PyFrame_StackPointerInvalidate(frame);
  |  |12508|  8.57k|            if (PyStackRef_IsNull(v)) {
  |  |  ------------------
  |  |  |  |  482|  8.57k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|  8.57k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|  8.57k|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (482:32): [True: 42, False: 8.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12509|     42|            }
  |  |12510|  8.53k|            else {
  |  |12511|  8.53k|                stack_pointer += -1;
  |  |12512|  8.53k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  8.53k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12513|  8.53k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12514|  8.53k|                _PyFrame_StackPointerValidate(frame);
  |  |12515|  8.53k|                PyStackRef_CLOSE(v);
  |  |12516|  8.53k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12517|  8.53k|                stack_pointer += 1;
  |  |12518|  8.53k|            }
  |  |12519|  8.57k|            if (error) {
  |  |  ------------------
  |  |  |  Branch (12519:17): [True: 0, False: 8.57k]
  |  |  ------------------
  |  |12520|      0|                JUMP_TO_LABEL(pop_1_error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12521|      0|            }
  |  |12522|  8.57k|            stack_pointer += -1;
  |  |12523|  8.57k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  8.57k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12524|  8.57k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  8.57k|    { \
  |  |  |  |  201|  8.57k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  8.57k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  8.57k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  8.57k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  8.57k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  8.57k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  8.57k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  8.57k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 8.57k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  8.57k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  8.57k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  8.57k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  8.57k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  8.57k|    }
  |  |  ------------------
  |  |12525|  8.57k|        }
  |  |12526|       |
  |  |12527|      1|        TARGET(STORE_SLICE) {
  |  |  ------------------
  |  |  |  |  132|      1|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12528|       |            #if _Py_TAIL_CALL_INTERP
  |  |12529|       |            int opcode = STORE_SLICE;
  |  |12530|       |            (void)(opcode);
  |  |12531|       |            #endif
  |  |12532|      1|            frame->instr_ptr = next_instr;
  |  |12533|      1|            next_instr += 1;
  |  |12534|      1|            INSTRUCTION_STATS(STORE_SLICE);
  |  |  ------------------
  |  |  |  |   71|      1|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12535|      1|            _PyStackRef v;
  |  |12536|      1|            _PyStackRef container;
  |  |12537|      1|            _PyStackRef start;
  |  |12538|      1|            _PyStackRef stop;
  |  |12539|       |            // _SPECIALIZE_STORE_SLICE
  |  |12540|      1|            {
  |  |12541|      1|                #if ENABLE_SPECIALIZATION
  |  |12542|      1|                OPCODE_DEFERRED_INC(STORE_SLICE);
  |  |  ------------------
  |  |  |  |   90|      1|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |12543|      1|                #endif  /* ENABLE_SPECIALIZATION */
  |  |12544|      1|            }
  |  |12545|       |            // _STORE_SLICE
  |  |12546|      1|            {
  |  |12547|      1|                stop = stack_pointer[-1];
  |  |12548|      1|                start = stack_pointer[-2];
  |  |12549|      1|                container = stack_pointer[-3];
  |  |12550|      1|                v = stack_pointer[-4];
  |  |12551|      1|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12552|      1|                _PyFrame_StackPointerValidate(frame);
  |  |12553|      1|                PyObject *slice = _PyBuildSlice_ConsumeRefs(PyStackRef_AsPyObjectSteal(start),
  |  |12554|      1|                    PyStackRef_AsPyObjectSteal(stop),
  |  |12555|      1|                    Py_None);
  |  |  ------------------
  |  |  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  |  |12556|      1|                _PyFrame_StackPointerInvalidate(frame);
  |  |12557|      1|                int err;
  |  |12558|      1|                if (slice == NULL) {
  |  |  ------------------
  |  |  |  Branch (12558:21): [True: 0, False: 1]
  |  |  ------------------
  |  |12559|      0|                    err = 1;
  |  |12560|      0|                }
  |  |12561|      1|                else {
  |  |12562|      1|                    stack_pointer += -2;
  |  |12563|      1|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      1|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12564|      1|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12565|      1|                    _PyFrame_StackPointerValidate(frame);
  |  |12566|      1|                    err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), slice, PyStackRef_AsPyObjectBorrow(v));
  |  |12567|      1|                    _PyFrame_StackPointerInvalidate(frame);
  |  |12568|      1|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (12568:21): [True: 1, False: 0]
  |  |  ------------------
  |  |12569|      1|                    _PyFrame_StackPointerValidate(frame);
  |  |12570|      1|                    Py_DECREF(slice);
  |  |  ------------------
  |  |  |  |   80|      1|    do { \
  |  |  |  |   81|      1|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      1|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      1|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      1|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      1|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      1|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      1|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      1|    do { \
  |  |  |  |  |  |  113|      1|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      1|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      1|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      1|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      1|            (*dealloc)(op); \
  |  |  |  |   91|      1|        } \
  |  |  |  |   92|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12571|      1|                    _PyFrame_StackPointerInvalidate(frame);
  |  |12572|      1|                    stack_pointer += 2;
  |  |12573|      1|                }
  |  |12574|      1|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12575|      1|                _PyFrame_StackPointerValidate(frame);
  |  |12576|      1|                _PyStackRef tmp = container;
  |  |12577|      1|                container = PyStackRef_NULL;
  |  |12578|      1|                stack_pointer[-3] = container;
  |  |12579|      1|                PyStackRef_CLOSE(tmp);
  |  |12580|      1|                _PyFrame_StackPointerInvalidate(frame);
  |  |12581|      1|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (12581:17): [True: 1, False: 0]
  |  |  ------------------
  |  |12582|      1|                _PyFrame_StackPointerValidate(frame);
  |  |12583|      1|                tmp = v;
  |  |12584|      1|                v = PyStackRef_NULL;
  |  |12585|      1|                stack_pointer[-4] = v;
  |  |12586|      1|                PyStackRef_CLOSE(tmp);
  |  |12587|      1|                _PyFrame_StackPointerInvalidate(frame);
  |  |12588|      1|                stack_pointer += -4;
  |  |12589|      1|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      1|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12590|      1|                if (err) {
  |  |  ------------------
  |  |  |  Branch (12590:21): [True: 0, False: 1]
  |  |  ------------------
  |  |12591|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12592|      0|                }
  |  |12593|      1|            }
  |  |12594|      1|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      1|    { \
  |  |  |  |  201|      1|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      1|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      1|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      1|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      1|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      1|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      1|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      1|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      1|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      1|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      1|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      1|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      1|    }
  |  |  ------------------
  |  |12595|      1|        }
  |  |12596|       |
  |  |12597|    922|        TARGET(STORE_SUBSCR) {
  |  |  ------------------
  |  |  |  |  132|    922|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12598|       |            #if _Py_TAIL_CALL_INTERP
  |  |12599|       |            int opcode = STORE_SUBSCR;
  |  |12600|       |            (void)(opcode);
  |  |12601|       |            #endif
  |  |12602|    922|            frame->instr_ptr = next_instr;
  |  |12603|    922|            next_instr += 2;
  |  |12604|    922|            INSTRUCTION_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |   71|    922|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12605|    922|            PREDICTED_STORE_SUBSCR:;
  |  |12606|    922|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  |12607|    922|            (void)this_instr;
  |  |12608|    922|            _PyStackRef container;
  |  |12609|    922|            _PyStackRef sub;
  |  |12610|    922|            _PyStackRef v;
  |  |12611|       |            // _SPECIALIZE_STORE_SUBSCR
  |  |12612|    922|            {
  |  |12613|    922|                sub = stack_pointer[-1];
  |  |12614|    922|                container = stack_pointer[-2];
  |  |12615|    922|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |12616|    922|                (void)counter;
  |  |12617|    922|                #if ENABLE_SPECIALIZATION
  |  |12618|    922|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|    922|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 95, False: 827]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12619|     95|                    next_instr = this_instr;
  |  |12620|     95|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12621|     95|                    _PyFrame_StackPointerValidate(frame);
  |  |12622|     95|                    _Py_Specialize_StoreSubscr(container, sub, next_instr);
  |  |12623|     95|                    _PyFrame_StackPointerInvalidate(frame);
  |  |12624|     95|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|     95|    { \
  |  |  |  |  217|     95|        opcode = next_instr->op.code; \
  |  |  |  |  218|     95|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     95|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|     95|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|     95|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|     95|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|     95|    }
  |  |  ------------------
  |  |12625|     95|                }
  |  |12626|    922|                OPCODE_DEFERRED_INC(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |   90|    922|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |12627|    922|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|    922|    do { \
  |  |  |  |  378|    922|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|    922|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 922]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12628|    922|                #endif  /* ENABLE_SPECIALIZATION */
  |  |12629|    922|            }
  |  |12630|       |            // _STORE_SUBSCR
  |  |12631|    922|            {
  |  |12632|    922|                v = stack_pointer[-3];
  |  |12633|    922|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12634|    922|                _PyFrame_StackPointerValidate(frame);
  |  |12635|    922|                int err = PyObject_SetItem(PyStackRef_AsPyObjectBorrow(container), PyStackRef_AsPyObjectBorrow(sub), PyStackRef_AsPyObjectBorrow(v));
  |  |12636|    922|                _PyFrame_StackPointerInvalidate(frame);
  |  |12637|    922|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (12637:17): [True: 827, False: 95]
  |  |  ------------------
  |  |12638|    827|                _PyFrame_StackPointerValidate(frame);
  |  |12639|    827|                _PyStackRef tmp = sub;
  |  |12640|    827|                sub = PyStackRef_NULL;
  |  |12641|    827|                stack_pointer[-1] = sub;
  |  |12642|    827|                PyStackRef_CLOSE(tmp);
  |  |12643|    827|                _PyFrame_StackPointerInvalidate(frame);
  |  |12644|    827|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (12644:17): [True: 827, False: 0]
  |  |  ------------------
  |  |12645|    827|                _PyFrame_StackPointerValidate(frame);
  |  |12646|    827|                tmp = container;
  |  |12647|    827|                container = PyStackRef_NULL;
  |  |12648|    827|                stack_pointer[-2] = container;
  |  |12649|    827|                PyStackRef_CLOSE(tmp);
  |  |12650|    827|                _PyFrame_StackPointerInvalidate(frame);
  |  |12651|    827|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (12651:17): [True: 827, False: 0]
  |  |  ------------------
  |  |12652|    827|                _PyFrame_StackPointerValidate(frame);
  |  |12653|    827|                tmp = v;
  |  |12654|    827|                v = PyStackRef_NULL;
  |  |12655|    827|                stack_pointer[-3] = v;
  |  |12656|    827|                PyStackRef_CLOSE(tmp);
  |  |12657|    827|                _PyFrame_StackPointerInvalidate(frame);
  |  |12658|    827|                stack_pointer += -3;
  |  |12659|    827|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    827|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12660|    827|                if (err) {
  |  |  ------------------
  |  |  |  Branch (12660:21): [True: 2, False: 825]
  |  |  ------------------
  |  |12661|      2|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      2|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12662|      0|                }
  |  |12663|    827|            }
  |  |12664|    825|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    825|    { \
  |  |  |  |  201|    825|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    825|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    825|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    825|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    825|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    825|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    825|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    825|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 825]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    825|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    825|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    825|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    825|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    825|    }
  |  |  ------------------
  |  |12665|    825|        }
  |  |12666|       |
  |  |12667|  2.22k|        TARGET(STORE_SUBSCR_DICT) {
  |  |  ------------------
  |  |  |  |  132|  2.22k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12668|       |            #if _Py_TAIL_CALL_INTERP
  |  |12669|       |            int opcode = STORE_SUBSCR_DICT;
  |  |12670|       |            (void)(opcode);
  |  |12671|       |            #endif
  |  |12672|  2.22k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12673|  2.22k|            (void)this_instr;
  |  |12674|  2.22k|            frame->instr_ptr = next_instr;
  |  |12675|  2.22k|            next_instr += 2;
  |  |12676|  2.22k|            INSTRUCTION_STATS(STORE_SUBSCR_DICT);
  |  |  ------------------
  |  |  |  |   71|  2.22k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12677|  2.22k|            static_assert(INLINE_CACHE_ENTRIES_STORE_SUBSCR == 1, "incorrect cache size");
  |  |12678|  2.22k|            _PyStackRef nos;
  |  |12679|  2.22k|            _PyStackRef value;
  |  |12680|  2.22k|            _PyStackRef dict_st;
  |  |12681|  2.22k|            _PyStackRef sub;
  |  |12682|  2.22k|            _PyStackRef st;
  |  |12683|       |            // _GUARD_NOS_DICT_STORE_SUBSCRIPT
  |  |12684|  2.22k|            {
  |  |12685|  2.22k|                nos = stack_pointer[-2];
  |  |12686|  2.22k|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |12687|  2.22k|                if (!Py_TYPE(o)->tp_as_mapping) {
  |  |  ------------------
  |  |  |  |  213|  2.22k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12687:21): [True: 0, False: 2.22k]
  |  |  ------------------
  |  |12688|      0|                    UPDATE_MISS_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12689|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR));
  |  |  ------------------
  |  |  |  Branch (12689:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12690|      0|                    JUMP_TO_PREDICTED(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12691|      0|                }
  |  |12692|  2.22k|                if (Py_TYPE(o)->tp_as_mapping->mp_ass_subscript != _PyDict_StoreSubscript) {
  |  |  ------------------
  |  |  |  |  213|  2.22k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12692:21): [True: 0, False: 2.22k]
  |  |  ------------------
  |  |12693|      0|                    UPDATE_MISS_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12694|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR));
  |  |  ------------------
  |  |  |  Branch (12694:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12695|      0|                    JUMP_TO_PREDICTED(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12696|      0|                }
  |  |12697|  2.22k|            }
  |  |12698|       |            /* Skip 1 cache entry */
  |  |12699|       |            // _STORE_SUBSCR_DICT
  |  |12700|  2.22k|            {
  |  |12701|  2.22k|                sub = stack_pointer[-1];
  |  |12702|  2.22k|                dict_st = nos;
  |  |12703|  2.22k|                value = stack_pointer[-3];
  |  |12704|  2.22k|                PyObject *dict = PyStackRef_AsPyObjectBorrow(dict_st);
  |  |12705|  2.22k|                assert(Py_TYPE(dict)->tp_as_mapping->mp_ass_subscript == _PyDict_StoreSubscript);
  |  |  ------------------
  |  |  |  Branch (12705:17): [True: 2.22k, False: 0]
  |  |  ------------------
  |  |12706|  2.22k|                STAT_INC(STORE_SUBSCR, hit);
  |  |  ------------------
  |  |  |  |   73|  2.22k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |12707|  2.22k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12708|  2.22k|                _PyFrame_StackPointerValidate(frame);
  |  |12709|  2.22k|                int err = _PyDict_SetItem_Take2((PyDictObject *)dict,
  |  |12710|  2.22k|                    PyStackRef_AsPyObjectSteal(sub),
  |  |12711|  2.22k|                    PyStackRef_AsPyObjectSteal(value));
  |  |12712|  2.22k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12713|  2.22k|                if (err) {
  |  |  ------------------
  |  |  |  Branch (12713:21): [True: 0, False: 2.22k]
  |  |  ------------------
  |  |12714|      0|                    stack_pointer += -3;
  |  |12715|      0|                    ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12716|      0|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12717|      0|                    _PyFrame_StackPointerValidate(frame);
  |  |12718|      0|                    PyStackRef_CLOSE(dict_st);
  |  |12719|      0|                    _PyFrame_StackPointerInvalidate(frame);
  |  |12720|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12721|      0|                }
  |  |12722|  2.22k|                st = dict_st;
  |  |12723|  2.22k|            }
  |  |12724|       |            // _POP_TOP
  |  |12725|      0|            {
  |  |12726|  2.22k|                value = st;
  |  |12727|  2.22k|                stack_pointer += -3;
  |  |12728|  2.22k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  2.22k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12729|  2.22k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12730|  2.22k|                _PyFrame_StackPointerValidate(frame);
  |  |12731|  2.22k|                PyStackRef_XCLOSE(value);
  |  |12732|  2.22k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12733|  2.22k|            }
  |  |12734|  2.22k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.22k|    { \
  |  |  |  |  201|  2.22k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.22k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.22k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.22k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.22k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.22k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.22k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.22k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.22k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.22k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.22k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.22k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.22k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.22k|    }
  |  |  ------------------
  |  |12735|  2.22k|        }
  |  |12736|       |
  |  |12737|    150|        TARGET(STORE_SUBSCR_LIST_INT) {
  |  |  ------------------
  |  |  |  |  132|    150|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12738|       |            #if _Py_TAIL_CALL_INTERP
  |  |12739|       |            int opcode = STORE_SUBSCR_LIST_INT;
  |  |12740|       |            (void)(opcode);
  |  |12741|       |            #endif
  |  |12742|    150|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12743|    150|            (void)this_instr;
  |  |12744|    150|            frame->instr_ptr = next_instr;
  |  |12745|    150|            next_instr += 2;
  |  |12746|    150|            INSTRUCTION_STATS(STORE_SUBSCR_LIST_INT);
  |  |  ------------------
  |  |  |  |   71|    150|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12747|    150|            static_assert(INLINE_CACHE_ENTRIES_STORE_SUBSCR == 1, "incorrect cache size");
  |  |12748|    150|            _PyStackRef value;
  |  |12749|    150|            _PyStackRef nos;
  |  |12750|    150|            _PyStackRef list_st;
  |  |12751|    150|            _PyStackRef sub_st;
  |  |12752|    150|            _PyStackRef ls;
  |  |12753|    150|            _PyStackRef ss;
  |  |12754|       |            // _GUARD_TOS_INT
  |  |12755|    150|            {
  |  |12756|    150|                value = stack_pointer[-1];
  |  |12757|    150|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |12758|    150|                if (!_PyLong_CheckExactAndCompact(value_o)) {
  |  |  ------------------
  |  |  |  Branch (12758:21): [True: 0, False: 150]
  |  |  ------------------
  |  |12759|      0|                    UPDATE_MISS_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12760|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR));
  |  |  ------------------
  |  |  |  Branch (12760:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12761|      0|                    JUMP_TO_PREDICTED(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12762|      0|                }
  |  |12763|    150|            }
  |  |12764|       |            // _GUARD_NOS_LIST
  |  |12765|    150|            {
  |  |12766|    150|                nos = stack_pointer[-2];
  |  |12767|    150|                PyObject *o = PyStackRef_AsPyObjectBorrow(nos);
  |  |12768|    150|                if (!PyList_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   26|    150|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    150|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    150|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12768:21): [True: 0, False: 150]
  |  |  ------------------
  |  |12769|      0|                    UPDATE_MISS_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12770|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR));
  |  |  ------------------
  |  |  |  Branch (12770:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12771|      0|                    JUMP_TO_PREDICTED(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12772|      0|                }
  |  |12773|    150|            }
  |  |12774|       |            /* Skip 1 cache entry */
  |  |12775|       |            // _STORE_SUBSCR_LIST_INT
  |  |12776|    150|            {
  |  |12777|    150|                sub_st = value;
  |  |12778|    150|                list_st = nos;
  |  |12779|    150|                value = stack_pointer[-3];
  |  |12780|    150|                PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
  |  |12781|    150|                PyObject *list = PyStackRef_AsPyObjectBorrow(list_st);
  |  |12782|    150|                assert(PyLong_CheckExact(sub));
  |  |  ------------------
  |  |  |  Branch (12782:17): [True: 150, False: 0]
  |  |  ------------------
  |  |12783|    150|                assert(PyList_CheckExact(list));
  |  |  ------------------
  |  |  |  Branch (12783:17): [True: 150, False: 0]
  |  |  ------------------
  |  |12784|    150|                Py_ssize_t index = _PyLong_CompactValue((PyLongObject *)sub);
  |  |12785|    150|                if (!LOCK_OBJECT(list)) {
  |  |  ------------------
  |  |  |  |  322|    150|#  define LOCK_OBJECT(op) (1)
  |  |  ------------------
  |  |  |  Branch (12785:21): [Folded, False: 150]
  |  |  ------------------
  |  |12786|      0|                    UPDATE_MISS_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12787|      0|                    assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR));
  |  |  ------------------
  |  |  |  Branch (12787:21): [True: 0, False: 0]
  |  |  ------------------
  |  |12788|      0|                    JUMP_TO_PREDICTED(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12789|      0|                }
  |  |12790|    150|                Py_ssize_t len = PyList_GET_SIZE(list);
  |  |  ------------------
  |  |  |  |   38|    150|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    150|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12791|    150|                if (index < 0) {
  |  |  ------------------
  |  |  |  Branch (12791:21): [True: 0, False: 150]
  |  |  ------------------
  |  |12792|      0|                    index += len;
  |  |12793|      0|                }
  |  |12794|    150|                if (index < 0 || index >= len) {
  |  |  ------------------
  |  |  |  Branch (12794:21): [True: 0, False: 150]
  |  |  |  Branch (12794:34): [True: 0, False: 150]
  |  |  ------------------
  |  |12795|      0|                    UNLOCK_OBJECT(list);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12796|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (12796:25): [True: 0, Folded]
  |  |  ------------------
  |  |12797|      0|                        UPDATE_MISS_STATS(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12798|      0|                        assert(_PyOpcode_Deopt[opcode] == (STORE_SUBSCR));
  |  |  ------------------
  |  |  |  Branch (12798:25): [True: 0, False: 0]
  |  |  ------------------
  |  |12799|      0|                        JUMP_TO_PREDICTED(STORE_SUBSCR);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12800|      0|                    }
  |  |12801|      0|                }
  |  |12802|    150|                STAT_INC(STORE_SUBSCR, hit);
  |  |  ------------------
  |  |  |  |   73|    150|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |12803|    150|                PyObject *old_value = PyList_GET_ITEM(list, index);
  |  |  ------------------
  |  |  |  |   40|    150|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    150|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12803:39): [True: 150, False: 0]
  |  |  ------------------
  |  |12804|    150|                FT_ATOMIC_STORE_PTR_RELEASE(_PyList_ITEMS(list)[index],
  |  |  ------------------
  |  |  |  |  164|    300|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (164:55): [True: 150, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12805|    150|                                        PyStackRef_AsPyObjectSteal(value));
  |  |12806|    150|                assert(old_value != NULL);
  |  |  ------------------
  |  |  |  Branch (12806:17): [True: 150, False: 0]
  |  |  ------------------
  |  |12807|    150|                UNLOCK_OBJECT(list);
  |  |  ------------------
  |  |  |  |  323|    150|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |12808|    150|                ls = list_st;
  |  |12809|    150|                ss = sub_st;
  |  |12810|    150|                stack_pointer[-3] = ls;
  |  |12811|    150|                stack_pointer[-2] = ss;
  |  |12812|    150|                stack_pointer += -1;
  |  |12813|    150|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    150|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12814|    150|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12815|    150|                _PyFrame_StackPointerValidate(frame);
  |  |12816|    150|                Py_DECREF(old_value);
  |  |  ------------------
  |  |  |  |   80|    150|    do { \
  |  |  |  |   81|    150|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    150|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|    150|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|    150|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    150|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 150, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|    150|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|    150|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|    150|            break; \
  |  |  |  |   85|    150|        } \
  |  |  |  |   86|    150|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12817|    150|                _PyFrame_StackPointerInvalidate(frame);
  |  |12818|    150|            }
  |  |12819|       |            // _POP_TOP_INT
  |  |12820|      0|            {
  |  |12821|    150|                value = ss;
  |  |12822|    150|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (12822:17): [True: 150, False: 0]
  |  |  ------------------
  |  |12823|    150|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |12824|    150|            }
  |  |12825|       |            // _POP_TOP
  |  |12826|      0|            {
  |  |12827|    150|                value = ls;
  |  |12828|    150|                stack_pointer += -2;
  |  |12829|    150|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    150|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12830|    150|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12831|    150|                _PyFrame_StackPointerValidate(frame);
  |  |12832|    150|                PyStackRef_XCLOSE(value);
  |  |12833|    150|                _PyFrame_StackPointerInvalidate(frame);
  |  |12834|    150|            }
  |  |12835|    150|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    150|    { \
  |  |  |  |  201|    150|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    150|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    150|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    150|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    150|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    150|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    150|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    150|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 150]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    150|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    150|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    150|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    150|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    150|    }
  |  |  ------------------
  |  |12836|    150|        }
  |  |12837|       |
  |  |12838|  1.19M|        TARGET(SWAP) {
  |  |  ------------------
  |  |  |  |  132|  1.19M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12839|       |            #if _Py_TAIL_CALL_INTERP
  |  |12840|       |            int opcode = SWAP;
  |  |12841|       |            (void)(opcode);
  |  |12842|       |            #endif
  |  |12843|  1.19M|            frame->instr_ptr = next_instr;
  |  |12844|  1.19M|            next_instr += 1;
  |  |12845|  1.19M|            INSTRUCTION_STATS(SWAP);
  |  |  ------------------
  |  |  |  |   71|  1.19M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12846|  1.19M|            _PyStackRef bottom;
  |  |12847|  1.19M|            _PyStackRef top;
  |  |12848|  1.19M|            top = stack_pointer[-1];
  |  |12849|  1.19M|            bottom = stack_pointer[-2 - (oparg-2)];
  |  |12850|  1.19M|            _PyStackRef temp = bottom;
  |  |12851|  1.19M|            bottom = top;
  |  |12852|  1.19M|            top = temp;
  |  |12853|  1.19M|            stack_pointer[-2 - (oparg-2)] = bottom;
  |  |12854|  1.19M|            stack_pointer[-1] = top;
  |  |12855|  1.19M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.19M|    { \
  |  |  |  |  201|  1.19M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.19M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.19M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.19M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.19M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.19M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.19M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.19M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.19M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.19M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.19M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.19M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.19M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.19M|    }
  |  |  ------------------
  |  |12856|  1.19M|        }
  |  |12857|       |
  |  |12858|  1.19M|        TARGET(TO_BOOL) {
  |  |  ------------------
  |  |  |  |  132|  70.8k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12859|       |            #if _Py_TAIL_CALL_INTERP
  |  |12860|       |            int opcode = TO_BOOL;
  |  |12861|       |            (void)(opcode);
  |  |12862|       |            #endif
  |  |12863|  70.8k|            frame->instr_ptr = next_instr;
  |  |12864|  70.8k|            next_instr += 4;
  |  |12865|  70.8k|            INSTRUCTION_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |   71|  70.8k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12866|  71.3k|            PREDICTED_TO_BOOL:;
  |  |12867|  71.3k|            _Py_CODEUNIT* const this_instr = next_instr - 4;
  |  |12868|  71.3k|            (void)this_instr;
  |  |12869|  71.3k|            _PyStackRef value;
  |  |12870|  71.3k|            _PyStackRef res;
  |  |12871|       |            // _SPECIALIZE_TO_BOOL
  |  |12872|  71.3k|            {
  |  |12873|  71.3k|                value = stack_pointer[-1];
  |  |12874|  71.3k|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |12875|  71.3k|                (void)counter;
  |  |12876|  71.3k|                #if ENABLE_SPECIALIZATION
  |  |12877|  71.3k|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|  71.3k|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 461, False: 70.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12878|    461|                    next_instr = this_instr;
  |  |12879|    461|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12880|    461|                    _PyFrame_StackPointerValidate(frame);
  |  |12881|    461|                    _Py_Specialize_ToBool(value, next_instr);
  |  |12882|    461|                    _PyFrame_StackPointerInvalidate(frame);
  |  |12883|    461|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|    461|    { \
  |  |  |  |  217|    461|        opcode = next_instr->op.code; \
  |  |  |  |  218|    461|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    461|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|    461|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    461|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|    461|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|    461|    }
  |  |  ------------------
  |  |12884|    461|                }
  |  |12885|  71.3k|                OPCODE_DEFERRED_INC(TO_BOOL);
  |  |  ------------------
  |  |  |  |   90|  71.3k|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |12886|  71.3k|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|  71.3k|    do { \
  |  |  |  |  378|  71.3k|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|  71.3k|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 71.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12887|  71.3k|                #endif  /* ENABLE_SPECIALIZATION */
  |  |12888|  71.3k|            }
  |  |12889|       |            /* Skip 2 cache entries */
  |  |12890|       |            // _TO_BOOL
  |  |12891|  71.3k|            {
  |  |12892|  71.3k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12893|  71.3k|                _PyFrame_StackPointerValidate(frame);
  |  |12894|  71.3k|                int err = PyObject_IsTrue(PyStackRef_AsPyObjectBorrow(value));
  |  |12895|  71.3k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12896|  71.3k|                stack_pointer += -1;
  |  |12897|  71.3k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  71.3k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12898|  71.3k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12899|  71.3k|                _PyFrame_StackPointerValidate(frame);
  |  |12900|  71.3k|                PyStackRef_CLOSE(value);
  |  |12901|  71.3k|                _PyFrame_StackPointerInvalidate(frame);
  |  |12902|  71.3k|                if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (12902:21): [True: 0, False: 71.3k]
  |  |  ------------------
  |  |12903|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |12904|      0|                }
  |  |12905|  71.3k|                res = err ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  55.7k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  55.7k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = err ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  86.9k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  15.6k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (12905:23): [True: 55.7k, False: 15.6k]
  |  |  ------------------
  |  |12906|  71.3k|            }
  |  |12907|      0|            stack_pointer[0] = res;
  |  |12908|  71.3k|            stack_pointer += 1;
  |  |12909|  71.3k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  71.3k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |12910|  71.3k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  71.3k|    { \
  |  |  |  |  201|  71.3k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  71.3k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  71.3k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  71.3k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  71.3k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  71.3k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  71.3k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  71.3k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 71.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  71.3k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  71.3k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  71.3k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  71.3k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  71.3k|    }
  |  |  ------------------
  |  |12911|  71.3k|        }
  |  |12912|       |
  |  |12913|     52|        TARGET(TO_BOOL_ALWAYS_TRUE) {
  |  |  ------------------
  |  |  |  |  132|     52|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12914|       |            #if _Py_TAIL_CALL_INTERP
  |  |12915|       |            int opcode = TO_BOOL_ALWAYS_TRUE;
  |  |12916|       |            (void)(opcode);
  |  |12917|       |            #endif
  |  |12918|     52|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12919|     52|            (void)this_instr;
  |  |12920|     52|            frame->instr_ptr = next_instr;
  |  |12921|     52|            next_instr += 4;
  |  |12922|     52|            INSTRUCTION_STATS(TO_BOOL_ALWAYS_TRUE);
  |  |  ------------------
  |  |  |  |   71|     52|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12923|     52|            static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
  |  |12924|     52|            _PyStackRef owner;
  |  |12925|     52|            _PyStackRef value;
  |  |12926|     52|            _PyStackRef res;
  |  |12927|     52|            _PyStackRef v;
  |  |12928|       |            /* Skip 1 cache entry */
  |  |12929|       |            // _GUARD_TYPE_VERSION
  |  |12930|     52|            {
  |  |12931|     52|                owner = stack_pointer[-1];
  |  |12932|     52|                uint32_t type_version = read_u32(&this_instr[2].cache);
  |  |12933|     52|                PyTypeObject *tp = Py_TYPE(PyStackRef_AsPyObjectBorrow(owner));
  |  |  ------------------
  |  |  |  |  213|     52|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     52|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     52|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12934|     52|                assert(type_version != 0);
  |  |  ------------------
  |  |  |  Branch (12934:17): [True: 52, False: 0]
  |  |  ------------------
  |  |12935|     52|                if (FT_ATOMIC_LOAD_UINT_RELAXED(tp->tp_version_tag) != type_version) {
  |  |  ------------------
  |  |  |  |  189|     52|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  |  |  ------------------
  |  |  |  Branch (12935:21): [True: 20, False: 32]
  |  |  ------------------
  |  |12936|     20|                    UPDATE_MISS_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |  299|     20|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12937|     20|                    assert(_PyOpcode_Deopt[opcode] == (TO_BOOL));
  |  |  ------------------
  |  |  |  Branch (12937:21): [True: 20, False: 0]
  |  |  ------------------
  |  |12938|     20|                    JUMP_TO_PREDICTED(TO_BOOL);
  |  |  ------------------
  |  |  |  |  136|     20|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12939|      0|                }
  |  |12940|     52|            }
  |  |12941|       |            // _REPLACE_WITH_TRUE
  |  |12942|     32|            {
  |  |12943|     32|                value = owner;
  |  |12944|     32|                res = PyStackRef_True;
  |  |  ------------------
  |  |  |  |  483|     32|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|     32|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |12945|     32|                v = value;
  |  |12946|     32|            }
  |  |12947|       |            // _POP_TOP
  |  |12948|     32|            {
  |  |12949|     32|                value = v;
  |  |12950|     32|                stack_pointer[-1] = res;
  |  |12951|     32|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |12952|     32|                _PyFrame_StackPointerValidate(frame);
  |  |12953|     32|                PyStackRef_XCLOSE(value);
  |  |12954|     32|                _PyFrame_StackPointerInvalidate(frame);
  |  |12955|     32|            }
  |  |12956|     32|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     32|    { \
  |  |  |  |  201|     32|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     32|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     32|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     32|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     32|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     32|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     32|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     32|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     32|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     32|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     32|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     32|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     32|    }
  |  |  ------------------
  |  |12957|     32|        }
  |  |12958|       |
  |  |12959|  4.35M|        TARGET(TO_BOOL_BOOL) {
  |  |  ------------------
  |  |  |  |  132|  4.35M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12960|       |            #if _Py_TAIL_CALL_INTERP
  |  |12961|       |            int opcode = TO_BOOL_BOOL;
  |  |12962|       |            (void)(opcode);
  |  |12963|       |            #endif
  |  |12964|  4.35M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12965|  4.35M|            (void)this_instr;
  |  |12966|  4.35M|            frame->instr_ptr = next_instr;
  |  |12967|  4.35M|            next_instr += 4;
  |  |12968|  4.35M|            INSTRUCTION_STATS(TO_BOOL_BOOL);
  |  |  ------------------
  |  |  |  |   71|  4.35M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12969|  4.35M|            static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
  |  |12970|  4.35M|            _PyStackRef value;
  |  |12971|       |            /* Skip 1 cache entry */
  |  |12972|       |            /* Skip 2 cache entries */
  |  |12973|  4.35M|            value = stack_pointer[-1];
  |  |12974|  4.35M|            if (!PyStackRef_BoolCheck(value)) {
  |  |  ------------------
  |  |  |  Branch (12974:17): [True: 46, False: 4.35M]
  |  |  ------------------
  |  |12975|     46|                UPDATE_MISS_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |  299|     46|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |12976|     46|                assert(_PyOpcode_Deopt[opcode] == (TO_BOOL));
  |  |  ------------------
  |  |  |  Branch (12976:17): [True: 46, False: 0]
  |  |  ------------------
  |  |12977|     46|                JUMP_TO_PREDICTED(TO_BOOL);
  |  |  ------------------
  |  |  |  |  136|     46|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |12978|      0|            }
  |  |12979|  4.35M|            STAT_INC(TO_BOOL, hit);
  |  |  ------------------
  |  |  |  |   73|  4.35M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |12980|  4.35M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  4.35M|    { \
  |  |  |  |  201|  4.35M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  4.35M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.35M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  4.35M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  4.35M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.35M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  4.35M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  4.35M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 4.35M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  4.35M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  4.35M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  4.35M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  4.35M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  4.35M|    }
  |  |  ------------------
  |  |12981|  4.35M|        }
  |  |12982|       |
  |  |12983|  49.9k|        TARGET(TO_BOOL_INT) {
  |  |  ------------------
  |  |  |  |  132|  49.9k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |12984|       |            #if _Py_TAIL_CALL_INTERP
  |  |12985|       |            int opcode = TO_BOOL_INT;
  |  |12986|       |            (void)(opcode);
  |  |12987|       |            #endif
  |  |12988|  49.9k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |12989|  49.9k|            (void)this_instr;
  |  |12990|  49.9k|            frame->instr_ptr = next_instr;
  |  |12991|  49.9k|            next_instr += 4;
  |  |12992|  49.9k|            INSTRUCTION_STATS(TO_BOOL_INT);
  |  |  ------------------
  |  |  |  |   71|  49.9k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |12993|  49.9k|            static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
  |  |12994|  49.9k|            _PyStackRef value;
  |  |12995|  49.9k|            _PyStackRef res;
  |  |12996|  49.9k|            _PyStackRef v;
  |  |12997|       |            // _GUARD_TOS_EXACT_INT
  |  |12998|  49.9k|            {
  |  |12999|  49.9k|                value = stack_pointer[-1];
  |  |13000|  49.9k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |13001|  49.9k|                if (!PyLong_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |   14|  49.9k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  49.9k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  49.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  49.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13001:21): [True: 65, False: 49.8k]
  |  |  ------------------
  |  |13002|     65|                    UPDATE_MISS_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |  299|     65|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13003|     65|                    assert(_PyOpcode_Deopt[opcode] == (TO_BOOL));
  |  |  ------------------
  |  |  |  Branch (13003:21): [True: 65, False: 0]
  |  |  ------------------
  |  |13004|     65|                    JUMP_TO_PREDICTED(TO_BOOL);
  |  |  ------------------
  |  |  |  |  136|     65|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13005|      0|                }
  |  |13006|  49.9k|            }
  |  |13007|       |            /* Skip 1 cache entry */
  |  |13008|       |            /* Skip 2 cache entries */
  |  |13009|       |            // _TO_BOOL_INT
  |  |13010|  49.8k|            {
  |  |13011|  49.8k|                STAT_INC(TO_BOOL, hit);
  |  |  ------------------
  |  |  |  |   73|  49.8k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13012|  49.8k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |13013|  49.8k|                res = (_PyLong_IsZero((PyLongObject *)value_o)) ? PyStackRef_False : PyStackRef_True;
  |  |  ------------------
  |  |  |  |  484|  49.5k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  49.5k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = (_PyLong_IsZero((PyLongObject *)value_o)) ? PyStackRef_False : PyStackRef_True;
  |  |  ------------------
  |  |  |  |  483|  50.2k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    362|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13013:23): [True: 49.5k, False: 362]
  |  |  ------------------
  |  |13014|  49.8k|                v = value;
  |  |13015|  49.8k|            }
  |  |13016|       |            // _POP_TOP_INT
  |  |13017|  49.8k|            {
  |  |13018|  49.8k|                value = v;
  |  |13019|  49.8k|                assert(PyLong_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (13019:17): [True: 49.8k, False: 0]
  |  |  ------------------
  |  |13020|  49.8k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyLong_ExactDealloc);
  |  |13021|  49.8k|            }
  |  |13022|      0|            stack_pointer[-1] = res;
  |  |13023|  49.8k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  49.8k|    { \
  |  |  |  |  201|  49.8k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  49.8k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  49.8k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  49.8k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  49.8k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  49.8k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  49.8k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  49.8k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 49.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  49.8k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  49.8k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  49.8k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  49.8k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  49.8k|    }
  |  |  ------------------
  |  |13024|  49.8k|        }
  |  |13025|       |
  |  |13026|  2.34k|        TARGET(TO_BOOL_LIST) {
  |  |  ------------------
  |  |  |  |  132|  2.34k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13027|       |            #if _Py_TAIL_CALL_INTERP
  |  |13028|       |            int opcode = TO_BOOL_LIST;
  |  |13029|       |            (void)(opcode);
  |  |13030|       |            #endif
  |  |13031|  2.34k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13032|  2.34k|            (void)this_instr;
  |  |13033|  2.34k|            frame->instr_ptr = next_instr;
  |  |13034|  2.34k|            next_instr += 4;
  |  |13035|  2.34k|            INSTRUCTION_STATS(TO_BOOL_LIST);
  |  |  ------------------
  |  |  |  |   71|  2.34k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13036|  2.34k|            static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
  |  |13037|  2.34k|            _PyStackRef tos;
  |  |13038|  2.34k|            _PyStackRef value;
  |  |13039|  2.34k|            _PyStackRef res;
  |  |13040|  2.34k|            _PyStackRef v;
  |  |13041|       |            // _GUARD_TOS_LIST
  |  |13042|  2.34k|            {
  |  |13043|  2.34k|                tos = stack_pointer[-1];
  |  |13044|  2.34k|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  |13045|  2.34k|                if (!PyList_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   26|  2.34k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  2.34k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  2.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  2.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13045:21): [True: 0, False: 2.34k]
  |  |  ------------------
  |  |13046|      0|                    UPDATE_MISS_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13047|      0|                    assert(_PyOpcode_Deopt[opcode] == (TO_BOOL));
  |  |  ------------------
  |  |  |  Branch (13047:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13048|      0|                    JUMP_TO_PREDICTED(TO_BOOL);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13049|      0|                }
  |  |13050|  2.34k|            }
  |  |13051|       |            /* Skip 1 cache entry */
  |  |13052|       |            /* Skip 2 cache entries */
  |  |13053|       |            // _TO_BOOL_LIST
  |  |13054|  2.34k|            {
  |  |13055|  2.34k|                value = tos;
  |  |13056|  2.34k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |13057|  2.34k|                assert(PyList_CheckExact(value_o));
  |  |  ------------------
  |  |  |  Branch (13057:17): [True: 2.34k, False: 0]
  |  |  ------------------
  |  |13058|  2.34k|                STAT_INC(TO_BOOL, hit);
  |  |  ------------------
  |  |  |  |   73|  2.34k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13059|  2.34k|                res = PyList_GET_SIZE(value_o) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |   38|  2.34k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (38:29): [True: 1.73k, False: 614]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = PyList_GET_SIZE(value_o) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  1.73k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.73k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = PyList_GET_SIZE(value_o) ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|  2.96k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    614|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13060|  2.34k|                v = value;
  |  |13061|  2.34k|            }
  |  |13062|       |            // _POP_TOP
  |  |13063|      0|            {
  |  |13064|  2.34k|                value = v;
  |  |13065|  2.34k|                stack_pointer[-1] = res;
  |  |13066|  2.34k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13067|  2.34k|                _PyFrame_StackPointerValidate(frame);
  |  |13068|  2.34k|                PyStackRef_XCLOSE(value);
  |  |13069|  2.34k|                _PyFrame_StackPointerInvalidate(frame);
  |  |13070|  2.34k|            }
  |  |13071|  2.34k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  2.34k|    { \
  |  |  |  |  201|  2.34k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  2.34k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.34k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  2.34k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  2.34k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  2.34k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  2.34k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  2.34k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 2.34k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  2.34k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  2.34k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  2.34k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  2.34k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  2.34k|    }
  |  |  ------------------
  |  |13072|  2.34k|        }
  |  |13073|       |
  |  |13074|  1.17k|        TARGET(TO_BOOL_NONE) {
  |  |  ------------------
  |  |  |  |  132|  1.17k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13075|       |            #if _Py_TAIL_CALL_INTERP
  |  |13076|       |            int opcode = TO_BOOL_NONE;
  |  |13077|       |            (void)(opcode);
  |  |13078|       |            #endif
  |  |13079|  1.17k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13080|  1.17k|            (void)this_instr;
  |  |13081|  1.17k|            frame->instr_ptr = next_instr;
  |  |13082|  1.17k|            next_instr += 4;
  |  |13083|  1.17k|            INSTRUCTION_STATS(TO_BOOL_NONE);
  |  |  ------------------
  |  |  |  |   71|  1.17k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13084|  1.17k|            static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
  |  |13085|  1.17k|            _PyStackRef value;
  |  |13086|  1.17k|            _PyStackRef res;
  |  |13087|       |            /* Skip 1 cache entry */
  |  |13088|       |            /* Skip 2 cache entries */
  |  |13089|  1.17k|            value = stack_pointer[-1];
  |  |13090|  1.17k|            if (!PyStackRef_IsNone(value)) {
  |  |  ------------------
  |  |  |  |  495|  1.17k|#define PyStackRef_IsNone(REF) ((REF).bits == (((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  1.17k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13090:17): [True: 268, False: 911]
  |  |  ------------------
  |  |13091|    268|                UPDATE_MISS_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |  299|    268|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13092|    268|                assert(_PyOpcode_Deopt[opcode] == (TO_BOOL));
  |  |  ------------------
  |  |  |  Branch (13092:17): [True: 268, False: 0]
  |  |  ------------------
  |  |13093|    268|                JUMP_TO_PREDICTED(TO_BOOL);
  |  |  ------------------
  |  |  |  |  136|    268|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13094|      0|            }
  |  |13095|    911|            STAT_INC(TO_BOOL, hit);
  |  |  ------------------
  |  |  |  |   73|    911|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13096|    911|            res = PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|    911|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    911|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13097|    911|            stack_pointer[-1] = res;
  |  |13098|    911|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    911|    { \
  |  |  |  |  201|    911|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    911|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    911|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    911|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    911|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    911|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    911|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    911|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 911]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    911|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    911|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    911|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    911|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    911|    }
  |  |  ------------------
  |  |13099|    911|        }
  |  |13100|       |
  |  |13101|   103k|        TARGET(TO_BOOL_STR) {
  |  |  ------------------
  |  |  |  |  132|   103k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13102|       |            #if _Py_TAIL_CALL_INTERP
  |  |13103|       |            int opcode = TO_BOOL_STR;
  |  |13104|       |            (void)(opcode);
  |  |13105|       |            #endif
  |  |13106|   103k|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13107|   103k|            (void)this_instr;
  |  |13108|   103k|            frame->instr_ptr = next_instr;
  |  |13109|   103k|            next_instr += 4;
  |  |13110|   103k|            INSTRUCTION_STATS(TO_BOOL_STR);
  |  |  ------------------
  |  |  |  |   71|   103k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13111|   103k|            static_assert(INLINE_CACHE_ENTRIES_TO_BOOL == 3, "incorrect cache size");
  |  |13112|   103k|            _PyStackRef value;
  |  |13113|   103k|            _PyStackRef res;
  |  |13114|   103k|            _PyStackRef v;
  |  |13115|       |            // _GUARD_TOS_UNICODE
  |  |13116|   103k|            {
  |  |13117|   103k|                value = stack_pointer[-1];
  |  |13118|   103k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |13119|   103k|                if (!PyUnicode_CheckExact(value_o)) {
  |  |  ------------------
  |  |  |  |  104|   103k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|   103k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|   103k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|   103k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13119:21): [True: 102, False: 103k]
  |  |  ------------------
  |  |13120|    102|                    UPDATE_MISS_STATS(TO_BOOL);
  |  |  ------------------
  |  |  |  |  299|    102|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13121|    102|                    assert(_PyOpcode_Deopt[opcode] == (TO_BOOL));
  |  |  ------------------
  |  |  |  Branch (13121:21): [True: 102, False: 0]
  |  |  ------------------
  |  |13122|    102|                    JUMP_TO_PREDICTED(TO_BOOL);
  |  |  ------------------
  |  |  |  |  136|    102|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13123|      0|                }
  |  |13124|   103k|            }
  |  |13125|       |            /* Skip 1 cache entry */
  |  |13126|       |            /* Skip 2 cache entries */
  |  |13127|       |            // _TO_BOOL_STR
  |  |13128|   103k|            {
  |  |13129|   103k|                STAT_INC(TO_BOOL, hit);
  |  |  ------------------
  |  |  |  |   73|   103k|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13130|   103k|                PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
  |  |13131|   103k|                res = value_o == &_Py_STR(empty) ? PyStackRef_False : PyStackRef_True;
  |  |  ------------------
  |  |  |  |  938|   103k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  |  |  ------------------
  |  |  |  |  |  |   18|   103k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   16|   103k|    _PyRuntime.static_objects.NAME
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = value_o == &_Py_STR(empty) ? PyStackRef_False : PyStackRef_True;
  |  |  ------------------
  |  |  |  |  484|  48.6k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  48.6k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                               res = value_o == &_Py_STR(empty) ? PyStackRef_False : PyStackRef_True;
  |  |  ------------------
  |  |  |  |  483|   158k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  54.9k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13131:23): [True: 48.6k, False: 54.9k]
  |  |  ------------------
  |  |13132|   103k|                v = value;
  |  |13133|   103k|            }
  |  |13134|       |            // _POP_TOP_UNICODE
  |  |13135|   103k|            {
  |  |13136|   103k|                value = v;
  |  |13137|   103k|                assert(PyUnicode_CheckExact(PyStackRef_AsPyObjectBorrow(value)));
  |  |  ------------------
  |  |  |  Branch (13137:17): [True: 103k, False: 0]
  |  |  ------------------
  |  |13138|   103k|                PyStackRef_CLOSE_SPECIALIZED(value, _PyUnicode_ExactDealloc);
  |  |13139|   103k|            }
  |  |13140|      0|            stack_pointer[-1] = res;
  |  |13141|   103k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   103k|    { \
  |  |  |  |  201|   103k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   103k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   103k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   103k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   103k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   103k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   103k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   103k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 103k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   103k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   103k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   103k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   103k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   103k|    }
  |  |  ------------------
  |  |13142|   103k|        }
  |  |13143|       |
  |  |13144|      0|        TARGET(TRACE_RECORD) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13145|       |            #if _Py_TAIL_CALL_INTERP
  |  |13146|       |            int opcode = TRACE_RECORD;
  |  |13147|       |            (void)(opcode);
  |  |13148|       |            #endif
  |  |13149|      0|            _Py_CODEUNIT* const prev_instr = frame->instr_ptr;
  |  |13150|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13151|      0|            (void)this_instr;
  |  |13152|      0|            frame->instr_ptr = next_instr;
  |  |13153|      0|            next_instr += 1;
  |  |13154|      0|            INSTRUCTION_STATS(TRACE_RECORD);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13155|      0|            opcode = TRACE_RECORD;
  |  |  ------------------
  |  |  |  |  243|      0|#define TRACE_RECORD                           255
  |  |  ------------------
  |  |13156|       |            #if _Py_TIER2
  |  |13157|       |            assert(IS_JIT_TRACING());
  |  |13158|       |            next_instr = this_instr;
  |  |13159|       |            frame->instr_ptr = prev_instr;
  |  |13160|       |            opcode = next_instr->op.code;
  |  |13161|       |            bool stop_tracing = (
  |  |13162|       |                                 opcode == WITH_EXCEPT_START ||
  |  |13163|       |                                 opcode == RERAISE ||
  |  |13164|       |                                 opcode == CLEANUP_THROW ||
  |  |13165|       |                                 opcode == PUSH_EXC_INFO ||
  |  |13166|       |                                 opcode == INTERPRETER_EXIT ||
  |  |13167|       |                                 (opcode >= MIN_INSTRUMENTED_OPCODE && opcode != ENTER_EXECUTOR)
  |  |13168|       |            );
  |  |13169|       |            _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  |  |13170|       |            _PyJitTracerState *tracer = _tstate->jit_tracer_state;
  |  |13171|       |            assert(tracer != NULL);
  |  |13172|       |            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13173|       |            _PyFrame_StackPointerValidate(frame);
  |  |13174|       |            int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr, stop_tracing ? _DEOPT : 0);
  |  |13175|       |            _PyFrame_StackPointerInvalidate(frame);
  |  |13176|       |            if (full) {
  |  |13177|       |                LEAVE_TRACING();
  |  |13178|       |                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |13179|       |                _PyFrame_StackPointerValidate(frame);
  |  |13180|       |                int err = stop_tracing_and_jit(tstate, frame);
  |  |13181|       |                _PyFrame_StackPointerInvalidate(frame);
  |  |13182|       |                if (err < 0) {
  |  |13183|       |                    JUMP_TO_LABEL(error);
  |  |13184|       |                }
  |  |13185|       |                DISPATCH();
  |  |13186|       |            }
  |  |13187|       |            for (int i = 0; i < tracer->prev_state.recorded_count; i++) {
  |  |13188|       |                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |13189|       |                _PyFrame_StackPointerValidate(frame);
  |  |13190|       |                Py_CLEAR(tracer->prev_state.recorded_values[i]);
  |  |13191|       |                _PyFrame_StackPointerInvalidate(frame);
  |  |13192|       |            }
  |  |13193|       |            tracer->prev_state.recorded_count = 0;
  |  |13194|       |            tracer->prev_state.instr = next_instr;
  |  |13195|       |            PyObject *prev_code = PyStackRef_AsPyObjectBorrow(frame->f_executable);
  |  |13196|       |            if (tracer->prev_state.instr_code != (PyCodeObject *)prev_code) {
  |  |13197|       |                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |13198|       |                _PyFrame_StackPointerValidate(frame);
  |  |13199|       |                Py_SETREF(tracer->prev_state.instr_code, (PyCodeObject*)Py_NewRef((prev_code)));
  |  |13200|       |                _PyFrame_StackPointerInvalidate(frame);
  |  |13201|       |            }
  |  |13202|       |            tracer->prev_state.instr_frame = frame;
  |  |13203|       |            tracer->prev_state.instr_oparg = oparg;
  |  |13204|       |            tracer->prev_state.instr_stacklevel = PyStackRef_IsNone(frame->f_executable) ? 2 : STACK_LEVEL();
  |  |13205|       |            if (_PyOpcode_Caches[_PyOpcode_Deopt[opcode]]
  |  |13206|       |                // Branch opcodes use the cache for branch history, not
  |  |13207|       |                // specialization counters.  Don't reset it.
  |  |13208|       |                && !IS_CONDITIONAL_JUMP_OPCODE(opcode)) {
  |  |13209|       |                (&next_instr[1])->counter = trigger_backoff_counter();
  |  |13210|       |            }
  |  |13211|       |            const _PyOpcodeRecordEntry *record_entry = &_PyOpcode_RecordEntries[opcode];
  |  |13212|       |            for (int i = 0; i < record_entry->count; i++) {
  |  |13213|       |                _Py_RecordFuncPtr doesnt_escape = _PyOpcode_RecordFunctions[record_entry->indices[i]];
  |  |13214|       |                doesnt_escape(frame, stack_pointer, oparg, &tracer->prev_state.recorded_values[i]);
  |  |13215|       |            }
  |  |13216|       |            tracer->prev_state.recorded_count = record_entry->count;
  |  |13217|       |            DISPATCH_GOTO_NON_TRACING();
  |  |13218|       |            #else
  |  |13219|      0|            (void)prev_instr;
  |  |13220|      0|            Py_FatalError("JIT instruction executed in non-jit build.");
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  |  |13221|      0|            #endif
  |  |13222|      0|        }
  |  |13223|       |
  |  |13224|     32|        TARGET(UNARY_INVERT) {
  |  |  ------------------
  |  |  |  |  132|     32|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13225|       |            #if _Py_TAIL_CALL_INTERP
  |  |13226|       |            int opcode = UNARY_INVERT;
  |  |13227|       |            (void)(opcode);
  |  |13228|       |            #endif
  |  |13229|     32|            frame->instr_ptr = next_instr;
  |  |13230|     32|            next_instr += 1;
  |  |13231|     32|            INSTRUCTION_STATS(UNARY_INVERT);
  |  |  ------------------
  |  |  |  |   71|     32|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13232|     32|            _PyStackRef value;
  |  |13233|     32|            _PyStackRef res;
  |  |13234|     32|            _PyStackRef v;
  |  |13235|       |            // _UNARY_INVERT
  |  |13236|     32|            {
  |  |13237|     32|                value = stack_pointer[-1];
  |  |13238|     32|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13239|     32|                _PyFrame_StackPointerValidate(frame);
  |  |13240|     32|                PyObject *res_o = PyNumber_Invert(PyStackRef_AsPyObjectBorrow(value));
  |  |13241|     32|                _PyFrame_StackPointerInvalidate(frame);
  |  |13242|     32|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (13242:21): [True: 0, False: 32]
  |  |  ------------------
  |  |13243|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13244|      0|                }
  |  |13245|     32|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |13246|     32|                v = value;
  |  |13247|     32|            }
  |  |13248|       |            // _POP_TOP
  |  |13249|      0|            {
  |  |13250|     32|                value = v;
  |  |13251|     32|                stack_pointer[-1] = res;
  |  |13252|     32|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13252:17): [True: 32, False: 0]
  |  |  ------------------
  |  |13253|     32|                _PyFrame_StackPointerValidate(frame);
  |  |13254|     32|                PyStackRef_XCLOSE(value);
  |  |13255|     32|                _PyFrame_StackPointerInvalidate(frame);
  |  |13256|     32|            }
  |  |13257|     32|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     32|    { \
  |  |  |  |  201|     32|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     32|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     32|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     32|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     32|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     32|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     32|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     32|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 32]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     32|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     32|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     32|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     32|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     32|    }
  |  |  ------------------
  |  |13258|     32|        }
  |  |13259|       |
  |  |13260|      7|        TARGET(UNARY_NEGATIVE) {
  |  |  ------------------
  |  |  |  |  132|      7|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13261|       |            #if _Py_TAIL_CALL_INTERP
  |  |13262|       |            int opcode = UNARY_NEGATIVE;
  |  |13263|       |            (void)(opcode);
  |  |13264|       |            #endif
  |  |13265|      7|            frame->instr_ptr = next_instr;
  |  |13266|      7|            next_instr += 1;
  |  |13267|      7|            INSTRUCTION_STATS(UNARY_NEGATIVE);
  |  |  ------------------
  |  |  |  |   71|      7|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13268|      7|            _PyStackRef value;
  |  |13269|      7|            _PyStackRef res;
  |  |13270|      7|            _PyStackRef v;
  |  |13271|       |            // _UNARY_NEGATIVE
  |  |13272|      7|            {
  |  |13273|      7|                value = stack_pointer[-1];
  |  |13274|      7|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13275|      7|                _PyFrame_StackPointerValidate(frame);
  |  |13276|      7|                PyObject *res_o = PyNumber_Negative(PyStackRef_AsPyObjectBorrow(value));
  |  |13277|      7|                _PyFrame_StackPointerInvalidate(frame);
  |  |13278|      7|                if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (13278:21): [True: 0, False: 7]
  |  |  ------------------
  |  |13279|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13280|      0|                }
  |  |13281|      7|                res = PyStackRef_FromPyObjectSteal(res_o);
  |  |13282|      7|                v = value;
  |  |13283|      7|            }
  |  |13284|       |            // _POP_TOP
  |  |13285|      0|            {
  |  |13286|      7|                value = v;
  |  |13287|      7|                stack_pointer[-1] = res;
  |  |13288|      7|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13288:17): [True: 7, False: 0]
  |  |  ------------------
  |  |13289|      7|                _PyFrame_StackPointerValidate(frame);
  |  |13290|      7|                PyStackRef_XCLOSE(value);
  |  |13291|      7|                _PyFrame_StackPointerInvalidate(frame);
  |  |13292|      7|            }
  |  |13293|      7|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      7|    { \
  |  |  |  |  201|      7|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      7|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      7|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      7|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      7|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      7|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      7|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      7|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      7|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      7|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      7|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      7|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      7|    }
  |  |  ------------------
  |  |13294|      7|        }
  |  |13295|       |
  |  |13296|  97.0k|        TARGET(UNARY_NOT) {
  |  |  ------------------
  |  |  |  |  132|  97.0k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13297|       |            #if _Py_TAIL_CALL_INTERP
  |  |13298|       |            int opcode = UNARY_NOT;
  |  |13299|       |            (void)(opcode);
  |  |13300|       |            #endif
  |  |13301|  97.0k|            frame->instr_ptr = next_instr;
  |  |13302|  97.0k|            next_instr += 1;
  |  |13303|  97.0k|            INSTRUCTION_STATS(UNARY_NOT);
  |  |  ------------------
  |  |  |  |   71|  97.0k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13304|  97.0k|            _PyStackRef value;
  |  |13305|  97.0k|            _PyStackRef res;
  |  |13306|  97.0k|            value = stack_pointer[-1];
  |  |13307|  97.0k|            assert(PyStackRef_BoolCheck(value));
  |  |  ------------------
  |  |  |  Branch (13307:13): [True: 97.0k, False: 0]
  |  |  ------------------
  |  |13308|  97.0k|            res = PyStackRef_IsFalse(value)
  |  |  ------------------
  |  |  |  |  494|  97.0k|#define PyStackRef_IsFalse(REF) ((REF).bits == (((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT))
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  97.0k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (494:33): [True: 48.5k, False: 48.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13309|  97.0k|            ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  483|  48.5k|#define PyStackRef_True ((_PyStackRef){.bits = ((uintptr_t)&_Py_TrueStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  48.5k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                           ? PyStackRef_True : PyStackRef_False;
  |  |  ------------------
  |  |  |  |  484|   145k|#define PyStackRef_False ((_PyStackRef){.bits = ((uintptr_t)&_Py_FalseStruct) | Py_TAG_REFCNT })
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  48.5k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13310|  97.0k|            stack_pointer[-1] = res;
  |  |13311|  97.0k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  97.0k|    { \
  |  |  |  |  201|  97.0k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  97.0k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  97.0k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  97.0k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  97.0k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  97.0k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  97.0k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  97.0k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 97.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  97.0k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  97.0k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  97.0k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  97.0k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  97.0k|    }
  |  |  ------------------
  |  |13312|  97.0k|        }
  |  |13313|       |
  |  |13314|      0|        TARGET(UNPACK_EX) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13315|       |            #if _Py_TAIL_CALL_INTERP
  |  |13316|       |            int opcode = UNPACK_EX;
  |  |13317|       |            (void)(opcode);
  |  |13318|       |            #endif
  |  |13319|      0|            frame->instr_ptr = next_instr;
  |  |13320|      0|            next_instr += 1;
  |  |13321|      0|            INSTRUCTION_STATS(UNPACK_EX);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13322|      0|            _PyStackRef seq;
  |  |13323|      0|            _PyStackRef *top;
  |  |13324|      0|            seq = stack_pointer[-1];
  |  |13325|      0|            top = &stack_pointer[(oparg & 0xFF) + (oparg >> 8)];
  |  |13326|      0|            PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq);
  |  |13327|      0|            stack_pointer += -1;
  |  |13328|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13329|      0|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13330|      0|            _PyFrame_StackPointerValidate(frame);
  |  |13331|      0|            int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg & 0xFF, oparg >> 8, top);
  |  |13332|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  |13333|      0|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13333:13): [True: 0, False: 0]
  |  |  ------------------
  |  |13334|      0|            _PyFrame_StackPointerValidate(frame);
  |  |13335|      0|            Py_DECREF(seq_o);
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13336|      0|            _PyFrame_StackPointerInvalidate(frame);
  |  |13337|      0|            if (res == 0) {
  |  |  ------------------
  |  |  |  Branch (13337:17): [True: 0, False: 0]
  |  |  ------------------
  |  |13338|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13339|      0|            }
  |  |13340|      0|            stack_pointer += 1 + (oparg & 0xFF) + (oparg >> 8);
  |  |13341|      0|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13342|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |13343|      0|        }
  |  |13344|       |
  |  |13345|    155|        TARGET(UNPACK_SEQUENCE) {
  |  |  ------------------
  |  |  |  |  132|    155|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13346|       |            #if _Py_TAIL_CALL_INTERP
  |  |13347|       |            int opcode = UNPACK_SEQUENCE;
  |  |13348|       |            (void)(opcode);
  |  |13349|       |            #endif
  |  |13350|    155|            frame->instr_ptr = next_instr;
  |  |13351|    155|            next_instr += 2;
  |  |13352|    155|            INSTRUCTION_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |   71|    155|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13353|    155|            PREDICTED_UNPACK_SEQUENCE:;
  |  |13354|    155|            _Py_CODEUNIT* const this_instr = next_instr - 2;
  |  |13355|    155|            (void)this_instr;
  |  |13356|    155|            _PyStackRef seq;
  |  |13357|    155|            _PyStackRef *top;
  |  |13358|       |            // _SPECIALIZE_UNPACK_SEQUENCE
  |  |13359|    155|            {
  |  |13360|    155|                seq = stack_pointer[-1];
  |  |13361|    155|                uint16_t counter = read_u16(&this_instr[1].cache);
  |  |13362|    155|                (void)counter;
  |  |13363|    155|                #if ENABLE_SPECIALIZATION
  |  |13364|    155|                if (ADAPTIVE_COUNTER_TRIGGERS(counter)) {
  |  |  ------------------
  |  |  |  |  355|    155|    backoff_counter_triggers(forge_backoff_counter((COUNTER)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (355:5): [True: 72, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13365|     72|                    next_instr = this_instr;
  |  |13366|     72|                    _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13367|     72|                    _PyFrame_StackPointerValidate(frame);
  |  |13368|     72|                    _Py_Specialize_UnpackSequence(seq, next_instr, oparg);
  |  |13369|     72|                    _PyFrame_StackPointerInvalidate(frame);
  |  |13370|     72|                    DISPATCH_SAME_OPARG();
  |  |  ------------------
  |  |  |  |  216|     72|    { \
  |  |  |  |  217|     72|        opcode = next_instr->op.code; \
  |  |  |  |  218|     72|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     72|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  219|     72|        DISPATCH_GOTO_NON_TRACING(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|     72|#  define DISPATCH_GOTO_NON_TRACING() goto *DISPATCH_TABLE[opcode];
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|     72|#  define DISPATCH_TABLE opcode_targets_table
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  220|     72|    }
  |  |  ------------------
  |  |13371|     72|                }
  |  |13372|    155|                OPCODE_DEFERRED_INC(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |   90|    155|#define OPCODE_DEFERRED_INC(opname) ((void)0)
  |  |  ------------------
  |  |13373|    155|                ADVANCE_ADAPTIVE_COUNTER(this_instr[1].counter);
  |  |  ------------------
  |  |  |  |  377|    155|    do { \
  |  |  |  |  378|    155|        (COUNTER) = advance_backoff_counter((COUNTER)); \
  |  |  |  |  379|    155|    } while (0);
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (379:14): [Folded, False: 155]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13374|    155|                #endif  /* ENABLE_SPECIALIZATION */
  |  |13375|    155|                (void)seq;
  |  |13376|    155|                (void)counter;
  |  |13377|    155|            }
  |  |13378|       |            // _UNPACK_SEQUENCE
  |  |13379|    155|            {
  |  |13380|    155|                top = &stack_pointer[-1 + oparg];
  |  |13381|    155|                PyObject *seq_o = PyStackRef_AsPyObjectSteal(seq);
  |  |13382|    155|                stack_pointer += -1;
  |  |13383|    155|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    155|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13384|    155|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13385|    155|                _PyFrame_StackPointerValidate(frame);
  |  |13386|    155|                int res = _PyEval_UnpackIterableStackRef(tstate, seq_o, oparg, -1, top);
  |  |13387|    155|                _PyFrame_StackPointerInvalidate(frame);
  |  |13388|    155|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13388:17): [True: 83, False: 72]
  |  |  ------------------
  |  |13389|     83|                _PyFrame_StackPointerValidate(frame);
  |  |13390|     83|                Py_DECREF(seq_o);
  |  |  ------------------
  |  |  |  |   80|     83|    do { \
  |  |  |  |   81|     83|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|     83|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|     83|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 83]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|     83|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|     83|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|     83|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 29, False: 54]
  |  |  |  |  ------------------
  |  |  |  |   88|     29|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|     29|    do { \
  |  |  |  |  |  |  113|     29|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|     29|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 29]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|     29|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 29]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|     29|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|     29|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|     29|            (*dealloc)(op); \
  |  |  |  |   91|     29|        } \
  |  |  |  |   92|     83|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13391|     83|                _PyFrame_StackPointerInvalidate(frame);
  |  |13392|     83|                if (res == 0) {
  |  |  ------------------
  |  |  |  Branch (13392:21): [True: 0, False: 83]
  |  |  ------------------
  |  |13393|      0|                    JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13394|      0|                }
  |  |13395|     83|            }
  |  |13396|     83|            stack_pointer += oparg;
  |  |13397|     83|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|     83|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13398|     83|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|     83|    { \
  |  |  |  |  201|     83|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|     83|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|     83|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|     83|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|     83|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|     83|        opcode = word.op.code; \
  |  |  |  |  |  |  254|     83|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|     83|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 83]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|     83|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|     83|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|     83|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|     83|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|     83|    }
  |  |  ------------------
  |  |13399|     83|        }
  |  |13400|       |
  |  |13401|      0|        TARGET(UNPACK_SEQUENCE_LIST) {
  |  |  ------------------
  |  |  |  |  132|      0|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13402|       |            #if _Py_TAIL_CALL_INTERP
  |  |13403|       |            int opcode = UNPACK_SEQUENCE_LIST;
  |  |13404|       |            (void)(opcode);
  |  |13405|       |            #endif
  |  |13406|      0|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13407|      0|            (void)this_instr;
  |  |13408|      0|            frame->instr_ptr = next_instr;
  |  |13409|      0|            next_instr += 2;
  |  |13410|      0|            INSTRUCTION_STATS(UNPACK_SEQUENCE_LIST);
  |  |  ------------------
  |  |  |  |   71|      0|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13411|      0|            static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
  |  |13412|      0|            _PyStackRef tos;
  |  |13413|      0|            _PyStackRef seq;
  |  |13414|      0|            _PyStackRef *values;
  |  |13415|       |            // _GUARD_TOS_LIST
  |  |13416|      0|            {
  |  |13417|      0|                tos = stack_pointer[-1];
  |  |13418|      0|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  |13419|      0|                if (!PyList_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13419:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13420|      0|                    UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13421|      0|                    assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13421:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13422|      0|                    JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13423|      0|                }
  |  |13424|      0|            }
  |  |13425|       |            /* Skip 1 cache entry */
  |  |13426|       |            // _UNPACK_SEQUENCE_LIST
  |  |13427|      0|            {
  |  |13428|      0|                seq = tos;
  |  |13429|      0|                values = &stack_pointer[-1];
  |  |13430|      0|                PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq);
  |  |13431|      0|                assert(PyList_CheckExact(seq_o));
  |  |  ------------------
  |  |  |  Branch (13431:17): [True: 0, False: 0]
  |  |  ------------------
  |  |13432|      0|                if (!LOCK_OBJECT(seq_o)) {
  |  |  ------------------
  |  |  |  |  322|      0|#  define LOCK_OBJECT(op) (1)
  |  |  ------------------
  |  |  |  Branch (13432:21): [Folded, False: 0]
  |  |  ------------------
  |  |13433|      0|                    UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13434|      0|                    assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13434:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13435|      0|                    JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13436|      0|                }
  |  |13437|      0|                if (PyList_GET_SIZE(seq_o) != oparg) {
  |  |  ------------------
  |  |  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13437:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13438|      0|                    UNLOCK_OBJECT(seq_o);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |13439|      0|                    if (true) {
  |  |  ------------------
  |  |  |  Branch (13439:25): [True: 0, Folded]
  |  |  ------------------
  |  |13440|      0|                        UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13441|      0|                        assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13441:25): [True: 0, False: 0]
  |  |  ------------------
  |  |13442|      0|                        JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13443|      0|                    }
  |  |13444|      0|                }
  |  |13445|      0|                STAT_INC(UNPACK_SEQUENCE, hit);
  |  |  ------------------
  |  |  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13446|      0|                PyObject **items = _PyList_ITEMS(seq_o);
  |  |  ------------------
  |  |  |  |   30|      0|#define _PyList_ITEMS(op) _Py_RVALUE(_PyList_CAST(op)->ob_item)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13447|      0|                for (int i = oparg; --i >= 0; ) {
  |  |  ------------------
  |  |  |  Branch (13447:37): [True: 0, False: 0]
  |  |  ------------------
  |  |13448|      0|                    *values++ = PyStackRef_FromPyObjectNew(items[i]);
  |  |  ------------------
  |  |  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13449|      0|                }
  |  |13450|      0|                UNLOCK_OBJECT(seq_o);
  |  |  ------------------
  |  |  |  |  323|      0|#  define UNLOCK_OBJECT(op) ((void)0)
  |  |  ------------------
  |  |13451|      0|                stack_pointer += -1 + oparg;
  |  |13452|      0|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|      0|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13453|      0|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13454|      0|                _PyFrame_StackPointerValidate(frame);
  |  |13455|      0|                PyStackRef_CLOSE(seq);
  |  |13456|      0|                _PyFrame_StackPointerInvalidate(frame);
  |  |13457|      0|            }
  |  |13458|      0|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|      0|    { \
  |  |  |  |  201|      0|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|      0|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|      0|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|      0|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|      0|        opcode = word.op.code; \
  |  |  |  |  |  |  254|      0|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|      0|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|      0|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|      0|    }
  |  |  ------------------
  |  |13459|      0|        }
  |  |13460|       |
  |  |13461|    167|        TARGET(UNPACK_SEQUENCE_TUPLE) {
  |  |  ------------------
  |  |  |  |  132|    167|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13462|       |            #if _Py_TAIL_CALL_INTERP
  |  |13463|       |            int opcode = UNPACK_SEQUENCE_TUPLE;
  |  |13464|       |            (void)(opcode);
  |  |13465|       |            #endif
  |  |13466|    167|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13467|    167|            (void)this_instr;
  |  |13468|    167|            frame->instr_ptr = next_instr;
  |  |13469|    167|            next_instr += 2;
  |  |13470|    167|            INSTRUCTION_STATS(UNPACK_SEQUENCE_TUPLE);
  |  |  ------------------
  |  |  |  |   71|    167|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13471|    167|            static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
  |  |13472|    167|            _PyStackRef tos;
  |  |13473|    167|            _PyStackRef seq;
  |  |13474|    167|            _PyStackRef *values;
  |  |13475|       |            // _GUARD_TOS_TUPLE
  |  |13476|    167|            {
  |  |13477|    167|                tos = stack_pointer[-1];
  |  |13478|    167|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  |13479|    167|                if (!PyTuple_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   28|    167|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|    167|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13479:21): [True: 0, False: 167]
  |  |  ------------------
  |  |13480|      0|                    UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13481|      0|                    assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13481:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13482|      0|                    JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13483|      0|                }
  |  |13484|    167|            }
  |  |13485|       |            /* Skip 1 cache entry */
  |  |13486|       |            // _UNPACK_SEQUENCE_TUPLE
  |  |13487|    167|            {
  |  |13488|    167|                seq = tos;
  |  |13489|    167|                values = &stack_pointer[-1];
  |  |13490|    167|                PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq);
  |  |13491|    167|                assert(PyTuple_CheckExact(seq_o));
  |  |  ------------------
  |  |  |  Branch (13491:17): [True: 167, False: 0]
  |  |  ------------------
  |  |13492|    167|                if (PyTuple_GET_SIZE(seq_o) != oparg) {
  |  |  ------------------
  |  |  |  |   27|    167|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13492:21): [True: 0, False: 167]
  |  |  ------------------
  |  |13493|      0|                    UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13494|      0|                    assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13494:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13495|      0|                    JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13496|      0|                }
  |  |13497|    167|                STAT_INC(UNPACK_SEQUENCE, hit);
  |  |  ------------------
  |  |  |  |   73|    167|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13498|    167|                PyObject **items = _PyTuple_ITEMS(seq_o);
  |  |  ------------------
  |  |  |  |   26|    167|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    334|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 167, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13499|    716|                for (int i = oparg; --i >= 0; ) {
  |  |  ------------------
  |  |  |  Branch (13499:37): [True: 549, False: 167]
  |  |  ------------------
  |  |13500|    549|                    *values++ = PyStackRef_FromPyObjectNew(items[i]);
  |  |  ------------------
  |  |  |  |  611|    549|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    549|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    549|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13501|    549|                }
  |  |13502|    167|                stack_pointer += -1 + oparg;
  |  |13503|    167|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    167|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13504|    167|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13505|    167|                _PyFrame_StackPointerValidate(frame);
  |  |13506|    167|                PyStackRef_CLOSE(seq);
  |  |13507|    167|                _PyFrame_StackPointerInvalidate(frame);
  |  |13508|    167|            }
  |  |13509|    167|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    167|    { \
  |  |  |  |  201|    167|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    167|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    167|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    167|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    167|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    167|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    167|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    167|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 167]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    167|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    167|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    167|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    167|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    167|    }
  |  |  ------------------
  |  |13510|    167|        }
  |  |13511|       |
  |  |13512|  1.19M|        TARGET(UNPACK_SEQUENCE_TWO_TUPLE) {
  |  |  ------------------
  |  |  |  |  132|  1.19M|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13513|       |            #if _Py_TAIL_CALL_INTERP
  |  |13514|       |            int opcode = UNPACK_SEQUENCE_TWO_TUPLE;
  |  |13515|       |            (void)(opcode);
  |  |13516|       |            #endif
  |  |13517|  1.19M|            _Py_CODEUNIT* const this_instr = next_instr;
  |  |13518|  1.19M|            (void)this_instr;
  |  |13519|  1.19M|            frame->instr_ptr = next_instr;
  |  |13520|  1.19M|            next_instr += 2;
  |  |13521|  1.19M|            INSTRUCTION_STATS(UNPACK_SEQUENCE_TWO_TUPLE);
  |  |  ------------------
  |  |  |  |   71|  1.19M|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13522|  1.19M|            static_assert(INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE == 1, "incorrect cache size");
  |  |13523|  1.19M|            _PyStackRef tos;
  |  |13524|  1.19M|            _PyStackRef seq;
  |  |13525|  1.19M|            _PyStackRef val1;
  |  |13526|  1.19M|            _PyStackRef val0;
  |  |13527|       |            // _GUARD_TOS_TUPLE
  |  |13528|  1.19M|            {
  |  |13529|  1.19M|                tos = stack_pointer[-1];
  |  |13530|  1.19M|                PyObject *o = PyStackRef_AsPyObjectBorrow(tos);
  |  |13531|  1.19M|                if (!PyTuple_CheckExact(o)) {
  |  |  ------------------
  |  |  |  |   28|  1.19M|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  1.19M|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.19M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.19M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13531:21): [True: 0, False: 1.19M]
  |  |  ------------------
  |  |13532|      0|                    UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13533|      0|                    assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13533:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13534|      0|                    JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13535|      0|                }
  |  |13536|  1.19M|            }
  |  |13537|       |            /* Skip 1 cache entry */
  |  |13538|       |            // _UNPACK_SEQUENCE_TWO_TUPLE
  |  |13539|  1.19M|            {
  |  |13540|  1.19M|                seq = tos;
  |  |13541|  1.19M|                assert(oparg == 2);
  |  |  ------------------
  |  |  |  Branch (13541:17): [True: 1.19M, False: 0]
  |  |  ------------------
  |  |13542|  1.19M|                PyObject *seq_o = PyStackRef_AsPyObjectBorrow(seq);
  |  |13543|  1.19M|                assert(PyTuple_CheckExact(seq_o));
  |  |  ------------------
  |  |  |  Branch (13543:17): [True: 1.19M, False: 0]
  |  |  ------------------
  |  |13544|  1.19M|                if (PyTuple_GET_SIZE(seq_o) != 2) {
  |  |  ------------------
  |  |  |  |   27|  1.19M|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.19M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.19M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (13544:21): [True: 0, False: 1.19M]
  |  |  ------------------
  |  |13545|      0|                    UPDATE_MISS_STATS(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  299|      0|#define UPDATE_MISS_STATS(INSTNAME) ((void)0)
  |  |  ------------------
  |  |13546|      0|                    assert(_PyOpcode_Deopt[opcode] == (UNPACK_SEQUENCE));
  |  |  ------------------
  |  |  |  Branch (13546:21): [True: 0, False: 0]
  |  |  ------------------
  |  |13547|      0|                    JUMP_TO_PREDICTED(UNPACK_SEQUENCE);
  |  |  ------------------
  |  |  |  |  136|      0|#  define JUMP_TO_PREDICTED(name) goto PREDICTED_##name;
  |  |  ------------------
  |  |13548|      0|                }
  |  |13549|  1.19M|                STAT_INC(UNPACK_SEQUENCE, hit);
  |  |  ------------------
  |  |  |  |   73|  1.19M|#define STAT_INC(opname, name) ((void)0)
  |  |  ------------------
  |  |13550|  1.19M|                val0 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 0));
  |  |  ------------------
  |  |  |  |  611|  1.19M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.19M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.39M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (37:38): [True: 1.19M, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13551|  1.19M|                val1 = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(seq_o, 1));
  |  |  ------------------
  |  |  |  |  611|  1.19M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.19M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.39M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (37:38): [True: 1.19M, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13552|      0|                stack_pointer[-1] = val1;
  |  |13553|  1.19M|                stack_pointer[0] = val0;
  |  |13554|  1.19M|                stack_pointer += 1;
  |  |13555|  1.19M|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  1.19M|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13556|  1.19M|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13557|  1.19M|                _PyFrame_StackPointerValidate(frame);
  |  |13558|  1.19M|                PyStackRef_CLOSE(seq);
  |  |13559|  1.19M|                _PyFrame_StackPointerInvalidate(frame);
  |  |13560|  1.19M|            }
  |  |13561|  1.19M|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  1.19M|    { \
  |  |  |  |  201|  1.19M|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  1.19M|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  1.19M|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  1.19M|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  1.19M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  1.19M|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  1.19M|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  1.19M|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 1.19M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  1.19M|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  1.19M|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  1.19M|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  1.19M|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  1.19M|    }
  |  |  ------------------
  |  |13562|  1.19M|        }
  |  |13563|       |
  |  |13564|    184|        TARGET(WITH_EXCEPT_START) {
  |  |  ------------------
  |  |  |  |  132|    184|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13565|       |            #if _Py_TAIL_CALL_INTERP
  |  |13566|       |            int opcode = WITH_EXCEPT_START;
  |  |13567|       |            (void)(opcode);
  |  |13568|       |            #endif
  |  |13569|    184|            frame->instr_ptr = next_instr;
  |  |13570|    184|            next_instr += 1;
  |  |13571|    184|            INSTRUCTION_STATS(WITH_EXCEPT_START);
  |  |  ------------------
  |  |  |  |   71|    184|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13572|    184|            _PyStackRef exit_func;
  |  |13573|    184|            _PyStackRef exit_self;
  |  |13574|    184|            _PyStackRef lasti;
  |  |13575|    184|            _PyStackRef val;
  |  |13576|    184|            _PyStackRef res;
  |  |13577|    184|            val = stack_pointer[-1];
  |  |13578|    184|            lasti = stack_pointer[-3];
  |  |13579|    184|            exit_self = stack_pointer[-4];
  |  |13580|    184|            exit_func = stack_pointer[-5];
  |  |13581|    184|            PyObject *exc, *tb;
  |  |13582|    184|            PyObject *val_o = PyStackRef_AsPyObjectBorrow(val);
  |  |13583|    184|            PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func);
  |  |13584|    184|            assert(val_o && PyExceptionInstance_Check(val_o));
  |  |  ------------------
  |  |  |  Branch (13584:13): [True: 184, False: 0]
  |  |  |  Branch (13584:13): [True: 184, False: 0]
  |  |  ------------------
  |  |13585|    184|            exc = PyExceptionInstance_Class(val_o);
  |  |  ------------------
  |  |  |  |   69|    184|#define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13586|    184|            PyObject *original_tb = tb = PyException_GetTraceback(val_o);
  |  |13587|    184|            if (tb == NULL) {
  |  |  ------------------
  |  |  |  Branch (13587:17): [True: 0, False: 184]
  |  |  ------------------
  |  |13588|      0|                tb = Py_None;
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  |  |13589|      0|            }
  |  |13590|    184|            assert(PyStackRef_IsTaggedInt(lasti));
  |  |  ------------------
  |  |  |  Branch (13590:13): [True: 184, False: 0]
  |  |  ------------------
  |  |13591|    184|            (void)lasti;
  |  |13592|    184|            PyObject* res_o;
  |  |13593|    184|            {
  |  |13594|    184|                PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb};
  |  |13595|    184|                int has_self = !PyStackRef_IsNull(exit_self);
  |  |  ------------------
  |  |  |  |  482|    184|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  479|    184|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   55|    184|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13596|    184|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13597|    184|                _PyFrame_StackPointerValidate(frame);
  |  |13598|    184|                res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self,
  |  |13599|    184|                    (3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
  |  |  ------------------
  |  |  |  |  287|    184|    (_Py_STATIC_CAST(size_t, 1) << (8 * sizeof(size_t) - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|    184|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13600|    184|                _PyFrame_StackPointerInvalidate(frame);
  |  |13601|    184|            }
  |  |13602|    184|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13602:13): [True: 184, False: 0]
  |  |  ------------------
  |  |13603|    184|            _PyFrame_StackPointerValidate(frame);
  |  |13604|    184|            Py_XDECREF(original_tb);
  |  |  ------------------
  |  |  |  |   69|    184|    do { \
  |  |  |  |   70|    184|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   71|    184|        if (xop != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:13): [True: 184, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|    184|            Py_DECREF(xop); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|    184|    do { \
  |  |  |  |  |  |   81|    184|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   82|    184|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  137|    184|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 184]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   84|      0|            break; \
  |  |  |  |  |  |   85|      0|        } \
  |  |  |  |  |  |   86|    184|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|    184|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   87|    184|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:13): [True: 0, False: 184]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |  |  |   91|      0|        } \
  |  |  |  |  |  |   92|    184|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (92:14): [Folded, False: 184]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   73|    184|        } \
  |  |  |  |   74|    184|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 184]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13605|    184|            _PyFrame_StackPointerInvalidate(frame);
  |  |13606|    184|            if (res_o == NULL) {
  |  |  ------------------
  |  |  |  Branch (13606:17): [True: 0, False: 184]
  |  |  ------------------
  |  |13607|      0|                JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13608|      0|            }
  |  |13609|    184|            res = PyStackRef_FromPyObjectSteal(res_o);
  |  |13610|    184|            stack_pointer[0] = res;
  |  |13611|    184|            stack_pointer += 1;
  |  |13612|    184|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|    184|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13613|    184|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|    184|    { \
  |  |  |  |  201|    184|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|    184|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|    184|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|    184|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|    184|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|    184|        opcode = word.op.code; \
  |  |  |  |  |  |  254|    184|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|    184|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 184]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|    184|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|    184|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|    184|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|    184|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|    184|    }
  |  |  ------------------
  |  |13614|    184|        }
  |  |13615|       |
  |  |13616|  49.7k|        TARGET(YIELD_VALUE) {
  |  |  ------------------
  |  |  |  |  132|  49.7k|#  define TARGET(op) TARGET_##op:
  |  |  ------------------
  |  |13617|       |            #if _Py_TAIL_CALL_INTERP
  |  |13618|       |            int opcode = YIELD_VALUE;
  |  |13619|       |            (void)(opcode);
  |  |13620|       |            #endif
  |  |13621|  49.7k|            frame->instr_ptr = next_instr;
  |  |13622|  49.7k|            next_instr += 1;
  |  |13623|  49.7k|            INSTRUCTION_STATS(YIELD_VALUE);
  |  |  ------------------
  |  |  |  |   71|  49.7k|#define INSTRUCTION_STATS(op) ((void)0)
  |  |  ------------------
  |  |13624|  49.7k|            opcode = YIELD_VALUE;
  |  |  ------------------
  |  |  |  |  129|  49.7k|#define YIELD_VALUE                            116
  |  |  ------------------
  |  |13625|  49.7k|            _PyStackRef value;
  |  |13626|  49.7k|            _PyStackRef retval;
  |  |13627|       |            // _MAKE_HEAP_SAFE
  |  |13628|  49.7k|            {
  |  |13629|  49.7k|                value = stack_pointer[-1];
  |  |13630|  49.7k|                value = PyStackRef_MakeHeapSafe(value);
  |  |13631|  49.7k|            }
  |  |13632|       |            // _YIELD_VALUE
  |  |13633|  49.7k|            {
  |  |13634|  49.7k|                retval = value;
  |  |13635|  49.7k|                assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (13635:17): [True: 49.7k, False: 0]
  |  |  ------------------
  |  |13636|  49.7k|                frame->instr_ptr++;
  |  |13637|  49.7k|                PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame);
  |  |13638|  49.7k|                assert(FRAME_SUSPENDED_YIELD_FROM == FRAME_SUSPENDED + 1);
  |  |  ------------------
  |  |  |  Branch (13638:17): [True: 49.7k, Folded]
  |  |  ------------------
  |  |13639|  49.7k|                assert(oparg == 0 || oparg == 1);
  |  |  ------------------
  |  |  |  Branch (13639:17): [True: 49.7k, False: 11]
  |  |  |  Branch (13639:17): [True: 11, False: 0]
  |  |  ------------------
  |  |13640|  49.7k|                _PyStackRef temp = retval;
  |  |13641|  49.7k|                stack_pointer += -1;
  |  |13642|  49.7k|                ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  49.7k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13643|  49.7k|                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13644|  49.7k|                _PyFrame_StackPointerValidate(frame);
  |  |13645|  49.7k|                DTRACE_FUNCTION_RETURN();
  |  |  ------------------
  |  |  |  |  347|  49.7k|#define DTRACE_FUNCTION_RETURN() ((void)0)
  |  |  ------------------
  |  |13646|  49.7k|                tstate->exc_info = gen->gi_exc_state.previous_item;
  |  |13647|  49.7k|                gen->gi_exc_state.previous_item = NULL;
  |  |13648|  49.7k|                _Py_LeaveRecursiveCallPy(tstate);
  |  |13649|  49.7k|                _PyInterpreterFrame *gen_frame = frame;
  |  |13650|  49.7k|                _PyThreadState_UpdateLastProfiledFrame(tstate, gen_frame, gen_frame->previous);
  |  |  ------------------
  |  |  |  |  326|  49.7k|    do { \
  |  |  |  |  327|  49.7k|        PyThreadState *tstate_ = (tstate); \
  |  |  |  |  328|  49.7k|        _PyInterpreterFrame *frame_ = (frame); \
  |  |  |  |  329|  49.7k|        if (tstate_->last_profiled_frame == frame_) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (329:13): [True: 0, False: 49.7k]
  |  |  |  |  ------------------
  |  |  |  |  330|      0|            tstate_->last_profiled_frame = (previous); \
  |  |  |  |  331|      0|            tstate_->last_profiled_frame_seq++; \
  |  |  |  |  332|      0|        } \
  |  |  |  |  333|  49.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (333:14): [Folded, False: 49.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13651|  49.7k|                frame = tstate->current_frame = frame->previous;
  |  |13652|  49.7k|                gen_frame->previous = NULL;
  |  |13653|  49.7k|                ((_PyThreadStateImpl *)tstate)->generator_return_kind = GENERATOR_YIELD;
  |  |13654|  49.7k|                FT_ATOMIC_STORE_INT8_RELEASE(gen->gi_frame_state, FRAME_SUSPENDED + oparg);
  |  |  ------------------
  |  |  |  |  167|  49.7k|#define FT_ATOMIC_STORE_INT8_RELEASE(value, new_value) value = new_value
  |  |  ------------------
  |  |13655|  49.7k|                assert(INLINE_CACHE_ENTRIES_SEND == INLINE_CACHE_ENTRIES_FOR_ITER);
  |  |  ------------------
  |  |  |  Branch (13655:17): [True: 49.7k, Folded]
  |  |  ------------------
  |  |13656|       |                #if TIER_ONE && defined(Py_DEBUG)
  |  |13657|       |                if (!PyStackRef_IsNone(frame->f_executable)) {
  |  |13658|       |                    Py_ssize_t i = frame->instr_ptr - _PyFrame_GetBytecode(frame);
  |  |13659|       |                    assert(i >= 0 && i <= INT_MAX);
  |  |13660|       |                    int opcode = _Py_GetBaseCodeUnit(_PyFrame_GetCode(frame), (int)i).op.code;
  |  |13661|       |                    assert(opcode == SEND || opcode == FOR_ITER);
  |  |13662|       |                }
  |  |13663|       |                #endif
  |  |13664|  49.7k|                stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |13665|  49.7k|                _PyFrame_StackPointerInvalidate(frame);
  |  |13666|  49.7k|                LOAD_IP(1 + INLINE_CACHE_ENTRIES_SEND);
  |  |  ------------------
  |  |  |  |  441|  49.7k|#define LOAD_IP(OFFSET) do { \
  |  |  |  |  442|  49.7k|        next_instr = frame->instr_ptr + (OFFSET); \
  |  |  |  |  443|  49.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (443:14): [Folded, False: 49.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |13667|  49.7k|                value = temp;
  |  |13668|  49.7k|                LLTRACE_RESUME_FRAME();
  |  |  ------------------
  |  |  |  |  188|  49.7k|#define LLTRACE_RESUME_FRAME() ((void)0)
  |  |  ------------------
  |  |13669|  49.7k|            }
  |  |13670|      0|            stack_pointer[0] = value;
  |  |13671|  49.7k|            stack_pointer += 1;
  |  |13672|  49.7k|            ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
  |  |  ------------------
  |  |  |  |  511|  49.7k|#define ASSERT_WITHIN_STACK_BOUNDS(F, L) (void)0
  |  |  ------------------
  |  |13673|  49.7k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  49.7k|    { \
  |  |  |  |  201|  49.7k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  49.7k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  49.7k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  49.7k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  49.7k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  49.7k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  49.7k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  49.7k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 49.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  49.7k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  49.7k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  49.7k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  49.7k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  49.7k|    }
  |  |  ------------------
  |  |13674|  49.7k|        }
  |  |13675|       |
  |  |13676|       |            /* END INSTRUCTIONS */
  |  |13677|      0|#if !_Py_TAIL_CALL_INTERP
  |  |13678|      0|#if USE_COMPUTED_GOTOS
  |  |13679|      0|        _unknown_opcode:
  |  |13680|       |#else
  |  |13681|       |        EXTRA_CASES  // From pycore_opcode_metadata.h, a 'case' for each unused opcode
  |  |13682|       |#endif
  |  |13683|       |            /* Tell C compilers not to hold the opcode variable in the loop.
  |  |13684|       |               next_instr points the current instruction without TARGET(). */
  |  |13685|      0|            opcode = next_instr->op.code;
  |  |13686|      0|            _PyErr_Format(tstate, PyExc_SystemError,
  |  |13687|      0|              "%U:%d: unknown opcode %d",
  |  |13688|      0|              _PyFrame_GetCode(frame)->co_filename,
  |  |13689|      0|              PyUnstable_InterpreterFrame_GetLine(frame),
  |  |13690|      0|              opcode);
  |  |13691|      0|JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13692|       |
  |  |13693|       |
  |  |13694|      0|        }
  |  |13695|       |
  |  |13696|       |        /* This should never be reached. Every opcode should end with DISPATCH()
  |  |13697|       |           or goto error. */
  |  |13698|      0|        Py_UNREACHABLE();
  |  |  ------------------
  |  |  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  |  |  ------------------
  |  |13699|      0|#endif /* _Py_TAIL_CALL_INTERP */
  |  |13700|       |        /* BEGIN LABELS */
  |  |13701|       |
  |  |13702|      0|        LABEL(pop_2_error)
  |  |  ------------------
  |  |  |  |  137|      0|#  define LABEL(name) name:
  |  |  ------------------
  |  |13703|      0|        {
  |  |13704|      0|            stack_pointer -= 2;
  |  |13705|      0|            assert(WITHIN_STACK_BOUNDS());
  |  |  ------------------
  |  |  |  Branch (13705:13): [True: 0, False: 0]
  |  |  |  Branch (13705:13): [True: 0, False: 0]
  |  |  |  Branch (13705:13): [True: 0, False: 0]
  |  |  ------------------
  |  |13706|      0|            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13707|      0|        }
  |  |13708|       |
  |  |13709|    133|        LABEL(pop_1_error)
  |  |  ------------------
  |  |  |  |  137|    133|#  define LABEL(name) name:
  |  |  ------------------
  |  |13710|    133|        {
  |  |13711|    133|            stack_pointer -= 1;
  |  |13712|    133|            assert(WITHIN_STACK_BOUNDS());
  |  |  ------------------
  |  |  |  Branch (13712:13): [True: 133, False: 0]
  |  |  |  Branch (13712:13): [True: 133, False: 0]
  |  |  |  Branch (13712:13): [True: 0, False: 133]
  |  |  ------------------
  |  |13713|    133|            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|    133|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13714|      0|        }
  |  |13715|       |
  |  |13716|  42.9k|        LABEL(error)
  |  |  ------------------
  |  |  |  |  137|  42.9k|#  define LABEL(name) name:
  |  |  ------------------
  |  |13717|  42.9k|        {
  |  |13718|  42.9k|            _PyFrame_StackAssertInvalid(frame);
  |  |13719|       |            #ifdef NDEBUG
  |  |13720|       |            if (!_PyErr_Occurred(tstate)) {
  |  |13721|       |                _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13722|       |                _PyFrame_StackPointerValidate(frame);
  |  |13723|       |                _PyErr_SetString(tstate, PyExc_SystemError,
  |  |13724|       |                             "error return without exception set");
  |  |13725|       |                _PyFrame_StackPointerInvalidate(frame);
  |  |13726|       |            }
  |  |13727|       |            #else
  |  |13728|  42.9k|            assert(_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (13728:13): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13729|  42.9k|            #endif
  |  |13730|  42.9k|            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13731|  42.9k|            _PyFrame_StackPointerValidate(frame);
  |  |13732|  42.9k|            STOP_TRACING();
  |  |  ------------------
  |  |  |  |  168|  42.9k|#define STOP_TRACING() ((void)(0));
  |  |  ------------------
  |  |13733|  42.9k|            stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |13734|  42.9k|            _PyFrame_StackPointerInvalidate(frame);
  |  |13735|  42.9k|            assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (13735:13): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13736|  42.9k|            if (!_PyFrame_IsIncomplete(frame)) {
  |  |  ------------------
  |  |  |  Branch (13736:17): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13737|  42.9k|                assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13737:17): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13738|  42.9k|                _PyFrame_StackPointerValidate(frame);
  |  |13739|  42.9k|                PyFrameObject *f = _PyFrame_GetFrameObject(frame);
  |  |13740|  42.9k|                _PyFrame_StackPointerInvalidate(frame);
  |  |13741|  42.9k|                if (f != NULL) {
  |  |  ------------------
  |  |  |  Branch (13741:21): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13742|  42.9k|                    assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13742:21): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13743|  42.9k|                    _PyFrame_StackPointerValidate(frame);
  |  |13744|  42.9k|                    PyTraceBack_Here(f);
  |  |13745|  42.9k|                    _PyFrame_StackPointerInvalidate(frame);
  |  |13746|  42.9k|                }
  |  |13747|  42.9k|            }
  |  |13748|  42.9k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13748:13): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13749|  42.9k|            _PyFrame_StackPointerValidate(frame);
  |  |13750|  42.9k|            _PyEval_MonitorRaise(tstate, frame, next_instr-1);
  |  |13751|  42.9k|            _PyFrame_StackPointerInvalidate(frame);
  |  |13752|  42.9k|            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |  ------------------
  |  |  |  Branch (13752:13): [True: 42.9k, False: 0]
  |  |  ------------------
  |  |13753|  42.9k|            _PyFrame_StackPointerValidate(frame);
  |  |13754|  42.9k|            JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|  42.9k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13755|      0|        }
  |  |13756|       |
  |  |13757|  46.3k|        LABEL(exception_unwind)
  |  |  ------------------
  |  |  |  |  137|  46.3k|#  define LABEL(name) name:
  |  |  ------------------
  |  |13758|  46.3k|        {
  |  |13759|  46.3k|            STOP_TRACING();
  |  |  ------------------
  |  |  |  |  168|  46.3k|#define STOP_TRACING() ((void)(0));
  |  |  ------------------
  |  |13760|  46.3k|            int offset = INSTR_OFFSET()-1;
  |  |  ------------------
  |  |  |  |  250|  46.3k|#define INSTR_OFFSET() ((int)(next_instr - _PyFrame_GetBytecode(frame)))
  |  |  ------------------
  |  |13761|  46.3k|            int level, handler, lasti;
  |  |13762|  46.3k|            int handled = get_exception_handler(_PyFrame_GetCode(frame), offset, &level, &handler, &lasti);
  |  |13763|  46.3k|            if (handled == 0) {
  |  |  ------------------
  |  |  |  Branch (13763:17): [True: 4.21k, False: 42.1k]
  |  |  ------------------
  |  |13764|  4.21k|                assert(_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (13764:17): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |13765|  4.21k|                _PyStackRef *stackbase = _PyFrame_Stackbase(frame);
  |  |13766|  12.5k|                while (frame->stackpointer > stackbase) {
  |  |  ------------------
  |  |  |  Branch (13766:24): [True: 8.30k, False: 4.21k]
  |  |  ------------------
  |  |13767|  8.30k|                    _PyStackRef ref = _PyFrame_StackPop(frame);
  |  |13768|  8.30k|                    PyStackRef_XCLOSE(ref);
  |  |13769|  8.30k|                }
  |  |13770|  4.21k|                monitor_unwind(tstate, frame, next_instr-1);
  |  |13771|  4.21k|                JUMP_TO_LABEL(exit_unwind);
  |  |  ------------------
  |  |  |  |  135|  4.21k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13772|      0|            }
  |  |13773|  46.3k|            assert(STACK_LEVEL() >= level);
  |  |  ------------------
  |  |  |  Branch (13773:13): [True: 42.1k, False: 0]
  |  |  ------------------
  |  |13774|  42.1k|            _PyStackRef *new_top = _PyFrame_Stackbase(frame) + level;
  |  |13775|  42.1k|            assert(frame->stackpointer >= new_top);
  |  |  ------------------
  |  |  |  Branch (13775:13): [True: 42.1k, False: 0]
  |  |  ------------------
  |  |13776|   154k|            while (frame->stackpointer > new_top) {
  |  |  ------------------
  |  |  |  Branch (13776:20): [True: 111k, False: 42.1k]
  |  |  ------------------
  |  |13777|   111k|                _PyStackRef ref = _PyFrame_StackPop(frame);
  |  |13778|   111k|                PyStackRef_XCLOSE(ref);
  |  |13779|   111k|            }
  |  |13780|  42.1k|            if (lasti) {
  |  |  ------------------
  |  |  |  Branch (13780:17): [True: 3.30k, False: 38.8k]
  |  |  ------------------
  |  |13781|  3.30k|                int frame_lasti = _PyInterpreterFrame_LASTI(frame);
  |  |  ------------------
  |  |  |  |   19|  3.30k|    ((int)((IF)->instr_ptr - _PyFrame_GetBytecode((IF))))
  |  |  ------------------
  |  |13782|  3.30k|                _PyStackRef lasti = PyStackRef_TagInt(frame_lasti);
  |  |13783|  3.30k|                _PyFrame_StackPush(frame, lasti);
  |  |13784|  3.30k|            }
  |  |13785|  42.1k|            PyObject *exc = _PyErr_GetRaisedException(tstate);
  |  |13786|  42.1k|            _PyFrame_StackPush(frame, PyStackRef_FromPyObjectSteal(exc));
  |  |13787|  42.1k|            next_instr = _PyFrame_GetBytecode(frame) + handler;
  |  |13788|  42.1k|            int err = monitor_handled(tstate, frame, next_instr, exc);
  |  |13789|  42.1k|            if (err < 0) {
  |  |  ------------------
  |  |  |  Branch (13789:17): [True: 0, False: 42.1k]
  |  |  ------------------
  |  |13790|      0|                JUMP_TO_LABEL(exception_unwind);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13791|      0|            }
  |  |13792|       |            #ifdef Py_DEBUG
  |  |13793|       |            if (frame->lltrace >= 5) {
  |  |13794|       |                lltrace_resume_frame(frame);
  |  |13795|       |            }
  |  |13796|       |            #endif
  |  |13797|  42.1k|            stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |13798|  42.1k|            _PyFrame_StackPointerInvalidate(frame);
  |  |13799|       |            #if _Py_TAIL_CALL_INTERP
  |  |13800|       |            int opcode;
  |  |13801|       |            #endif
  |  |13802|  42.1k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|  42.1k|    { \
  |  |  |  |  201|  42.1k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|  42.1k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  42.1k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|  42.1k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|  42.1k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  42.1k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|  42.1k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|  42.1k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 42.1k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|  42.1k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|  42.1k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|  42.1k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|  42.1k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|  42.1k|    }
  |  |  ------------------
  |  |13803|  42.1k|        }
  |  |13804|       |
  |  |13805|  4.21k|        LABEL(exit_unwind)
  |  |  ------------------
  |  |  |  |  137|  4.21k|#  define LABEL(name) name:
  |  |  ------------------
  |  |13806|  4.21k|        {
  |  |13807|  4.21k|            assert(_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (13807:13): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |13808|  4.21k|            DTRACE_FUNCTION_RETURN();
  |  |  ------------------
  |  |  |  |  347|  4.21k|#define DTRACE_FUNCTION_RETURN() ((void)0)
  |  |  ------------------
  |  |13809|  4.21k|            JUMP_TO_LABEL(exit_unwind_notrace);
  |  |  ------------------
  |  |  |  |  135|  4.21k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13810|      0|        }
  |  |13811|       |
  |  |13812|  4.21k|        LABEL(exit_unwind_notrace)
  |  |  ------------------
  |  |  |  |  137|  4.21k|#  define LABEL(name) name:
  |  |  ------------------
  |  |13813|  4.21k|        {
  |  |13814|  4.21k|            assert(_PyErr_Occurred(tstate));
  |  |  ------------------
  |  |  |  Branch (13814:13): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |13815|  4.21k|            _Py_LeaveRecursiveCallPy(tstate);
  |  |13816|  4.21k|            assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  |  |  ------------------
  |  |  |  Branch (13816:13): [True: 4.21k, False: 0]
  |  |  ------------------
  |  |13817|  4.21k|            _PyInterpreterFrame *dying = frame;
  |  |13818|  4.21k|            frame = tstate->current_frame = dying->previous;
  |  |13819|  4.21k|            _PyEval_FrameClearAndPop(tstate, dying);
  |  |13820|  4.21k|            frame->return_offset = 0;
  |  |13821|  4.21k|            if (frame->owner == FRAME_OWNED_BY_INTERPRETER) {
  |  |  ------------------
  |  |  |  Branch (13821:17): [True: 1.76k, False: 2.45k]
  |  |  ------------------
  |  |13822|  1.76k|                tstate->current_frame = frame->previous;
  |  |13823|  1.76k|                #if !_Py_TAIL_CALL_INTERP
  |  |13824|  1.76k|                assert(frame == &entry.frame);
  |  |  ------------------
  |  |  |  Branch (13824:17): [True: 1.76k, False: 0]
  |  |  ------------------
  |  |13825|  1.76k|                #endif
  |  |13826|       |                #ifdef _Py_TIER2
  |  |13827|       |                _PyStackRef executor = frame->localsplus[0];
  |  |13828|       |                assert(tstate->current_executor == NULL);
  |  |13829|       |                if (!PyStackRef_IsNull(executor)) {
  |  |13830|       |                    tstate->current_executor = PyStackRef_AsPyObjectBorrow(executor);
  |  |13831|       |                    PyStackRef_CLOSE(executor);
  |  |13832|       |                }
  |  |13833|       |                #endif
  |  |13834|  1.76k|                return NULL;
  |  |13835|  1.76k|            }
  |  |13836|  2.45k|            next_instr = frame->instr_ptr;
  |  |13837|  2.45k|            stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |13838|  2.45k|            _PyFrame_StackPointerInvalidate(frame);
  |  |13839|  2.45k|            JUMP_TO_LABEL(error);
  |  |  ------------------
  |  |  |  |  135|  2.45k|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13840|      0|        }
  |  |13841|       |
  |  |13842|   194k|        LABEL(start_frame)
  |  |  ------------------
  |  |  |  |  137|   194k|#  define LABEL(name) name:
  |  |  ------------------
  |  |13843|   194k|        {
  |  |13844|       |            #ifdef Py_DEBUG
  |  |13845|       |            assert(frame->stackpointer_valid == 1);
  |  |13846|       |            #endif
  |  |13847|   194k|            int too_deep = _Py_EnterRecursivePy(tstate);
  |  |13848|   194k|            if (too_deep) {
  |  |  ------------------
  |  |  |  Branch (13848:17): [True: 0, False: 194k]
  |  |  ------------------
  |  |13849|      0|                JUMP_TO_LABEL(exit_unwind_notrace);
  |  |  ------------------
  |  |  |  |  135|      0|#  define JUMP_TO_LABEL(name) goto name;
  |  |  ------------------
  |  |13850|      0|            }
  |  |13851|   194k|            DTRACE_FUNCTION_ENTRY();
  |  |  ------------------
  |  |  |  |  346|   194k|#define DTRACE_FUNCTION_ENTRY() ((void)0)
  |  |  ------------------
  |  |13852|   194k|            next_instr = frame->instr_ptr;
  |  |13853|       |            #ifdef Py_DEBUG
  |  |13854|       |            int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
  |  |13855|       |            if (lltrace < 0) {
  |  |13856|       |                JUMP_TO_LABEL(exit_unwind);
  |  |13857|       |            }
  |  |13858|       |            frame->lltrace = lltrace;
  |  |13859|       |            assert(!_PyErr_Occurred(tstate));
  |  |13860|       |            #endif
  |  |13861|   194k|            stack_pointer = _PyFrame_GetStackPointer(frame);
  |  |13862|   194k|            _PyFrame_StackPointerInvalidate(frame);
  |  |13863|       |            #if _Py_TAIL_CALL_INTERP
  |  |13864|       |            int opcode;
  |  |13865|       |            #endif
  |  |13866|   194k|            DISPATCH();
  |  |  ------------------
  |  |  |  |  200|   194k|    { \
  |  |  |  |  201|   194k|        _PyFrame_StackAssertInvalid(frame); \
  |  |  |  |  202|   194k|        NEXTOPARG(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|   194k|#define NEXTOPARG()  do { \
  |  |  |  |  |  |  252|   194k|        _Py_CODEUNIT word  = {.cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t*)next_instr)}; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  158|   194k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  253|   194k|        opcode = word.op.code; \
  |  |  |  |  |  |  254|   194k|        oparg = word.op.arg; \
  |  |  |  |  |  |  255|   194k|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (255:14): [Folded, False: 194k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  203|   194k|        PRE_DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  176|   194k|#define PRE_DISPATCH_GOTO() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |  204|   194k|        DISPATCH_GOTO(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  133|   194k|#  define DISPATCH_GOTO() goto *opcode_targets[opcode]
  |  |  |  |  ------------------
  |  |  |  |  205|   194k|    }
  |  |  ------------------
  |  |13867|   194k|        }
  |  |13868|       |
  |  |13869|       |        #if _Py_TAIL_CALL_INTERP && !defined(_Py_TIER2)
  |  |13870|       |        Py_GCC_ATTRIBUTE((unused))
  |  |13871|       |        #endif
  |  |13872|      0|        LABEL(stop_tracing)
  |  |  ------------------
  |  |  |  |  137|      0|#  define LABEL(name) name:
  |  |  ------------------
  |  |13873|      0|        {
  |  |13874|       |            #if _Py_TIER2
  |  |13875|       |            assert(IS_JIT_TRACING());
  |  |13876|       |            int opcode = next_instr->op.code;
  |  |13877|       |            _PyFrame_SetStackPointer(frame, stack_pointer);
  |  |13878|       |            _PyFrame_StackPointerValidate(frame);
  |  |13879|       |            _PyJit_translate_single_bytecode_to_trace(tstate, frame, NULL, _EXIT_TRACE);
  |  |13880|       |            _PyFrame_StackPointerInvalidate(frame);
  |  |13881|       |            LEAVE_TRACING();
  |  |13882|       |            assert(stack_pointer == _PyFrame_GetStackPointer(frame));
  |  |13883|       |            _PyFrame_StackPointerValidate(frame);
  |  |13884|       |            int err = stop_tracing_and_jit(tstate, frame);
  |  |13885|       |            _PyFrame_StackPointerInvalidate(frame);
  |  |13886|       |            if (err < 0) {
  |  |13887|       |                JUMP_TO_LABEL(error);
  |  |13888|       |            }
  |  |13889|       |            DISPATCH_GOTO_NON_TRACING();
  |  |13890|       |            #else
  |  |13891|      0|            Py_FatalError("JIT label executed in non-jit build.");
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  |  |13892|      0|            #endif
  |  |13893|      0|        }
  |  |13894|       |
  |  |13895|       |/* END LABELS */
  |  |13896|      0|#undef TIER_ONE
  ------------------
 1345|      0|#endif
 1346|       |
 1347|       |
 1348|      0|early_exit:
 1349|      0|    assert(_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1349:5): [True: 0, False: 0]
  ------------------
 1350|      0|    _Py_LeaveRecursiveCallPy(tstate);
 1351|      0|    assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
  ------------------
  |  Branch (1351:5): [True: 0, False: 0]
  ------------------
 1352|       |    // GH-99729: We need to unlink the frame *before* clearing it:
 1353|      0|    _PyInterpreterFrame *dying = frame;
 1354|      0|    frame = tstate->current_frame = dying->previous;
 1355|      0|    _PyEval_FrameClearAndPop(tstate, dying);
 1356|      0|    frame->return_offset = 0;
 1357|      0|    assert(frame->owner == FRAME_OWNED_BY_INTERPRETER);
  ------------------
  |  Branch (1357:5): [True: 0, False: 0]
  ------------------
 1358|       |    /* Restore previous frame and exit */
 1359|      0|    tstate->current_frame = frame->previous;
 1360|       |    return NULL;
 1361|      0|}
_PyEval_FrameClearAndPop:
 2014|  6.66M|{
 2015|       |    // By this point, tstate->current_frame is already set to the parent frame.
 2016|  6.66M|    _PyThreadState_UpdateLastProfiledFrame(tstate, frame, tstate->current_frame);
  ------------------
  |  |  326|  6.66M|    do { \
  |  |  327|  6.66M|        PyThreadState *tstate_ = (tstate); \
  |  |  328|  6.66M|        _PyInterpreterFrame *frame_ = (frame); \
  |  |  329|  6.66M|        if (tstate_->last_profiled_frame == frame_) { \
  |  |  ------------------
  |  |  |  Branch (329:13): [True: 0, False: 6.66M]
  |  |  ------------------
  |  |  330|      0|            tstate_->last_profiled_frame = (previous); \
  |  |  331|      0|            tstate_->last_profiled_frame_seq++; \
  |  |  332|      0|        } \
  |  |  333|  6.66M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (333:14): [Folded, False: 6.66M]
  |  |  ------------------
  ------------------
 2017|       |
 2018|  6.66M|    if (frame->owner == FRAME_OWNED_BY_THREAD) {
  ------------------
  |  Branch (2018:9): [True: 6.66M, False: 1.23k]
  ------------------
 2019|  6.66M|        clear_thread_frame(tstate, frame);
 2020|  6.66M|    }
 2021|  1.23k|    else {
 2022|  1.23k|        clear_gen_frame(tstate, frame);
 2023|  1.23k|    }
 2024|  6.66M|}
_PyEvalFramePushAndInit:
 2031|   201k|{
 2032|   201k|    PyFunctionObject *func_obj = (PyFunctionObject *)PyStackRef_AsPyObjectBorrow(func);
 2033|   201k|    PyCodeObject * code = (PyCodeObject *)func_obj->func_code;
 2034|   201k|    CALL_STAT_INC(frames_pushed);
  ------------------
  |  |   76|   201k|#define CALL_STAT_INC(name) ((void)0)
  ------------------
 2035|   201k|    _PyInterpreterFrame *frame = _PyThreadState_PushFrame(tstate, code->co_framesize);
 2036|   201k|    if (frame == NULL) {
  ------------------
  |  Branch (2036:9): [True: 0, False: 201k]
  ------------------
 2037|      0|        goto fail;
 2038|      0|    }
 2039|   201k|    _PyFrame_Initialize(tstate, frame, func, locals, code, 0, previous);
 2040|   201k|    if (initialize_locals(tstate, func_obj, frame->localsplus, args, argcount, kwnames)) {
  ------------------
  |  Branch (2040:9): [True: 0, False: 201k]
  ------------------
 2041|      0|        assert(frame->owner == FRAME_OWNED_BY_THREAD);
  ------------------
  |  Branch (2041:9): [True: 0, False: 0]
  ------------------
 2042|      0|        _PyThreadState_UpdateLastProfiledFrame(tstate, frame, tstate->current_frame);
  ------------------
  |  |  326|      0|    do { \
  |  |  327|      0|        PyThreadState *tstate_ = (tstate); \
  |  |  328|      0|        _PyInterpreterFrame *frame_ = (frame); \
  |  |  329|      0|        if (tstate_->last_profiled_frame == frame_) { \
  |  |  ------------------
  |  |  |  Branch (329:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|            tstate_->last_profiled_frame = (previous); \
  |  |  331|      0|            tstate_->last_profiled_frame_seq++; \
  |  |  332|      0|        } \
  |  |  333|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (333:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2043|      0|        clear_thread_frame(tstate, frame);
 2044|      0|        return NULL;
 2045|      0|    }
 2046|   201k|    return frame;
 2047|      0|fail:
 2048|       |    /* Consume the references */
 2049|      0|    PyStackRef_CLOSE(func);
 2050|      0|    Py_XDECREF(locals);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2051|      0|    for (size_t i = 0; i < argcount; i++) {
  ------------------
  |  Branch (2051:24): [True: 0, False: 0]
  ------------------
 2052|      0|        PyStackRef_CLOSE(args[i]);
 2053|      0|    }
 2054|      0|    if (kwnames) {
  ------------------
  |  Branch (2054:9): [True: 0, False: 0]
  ------------------
 2055|      0|        Py_ssize_t kwcount = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2056|      0|        for (Py_ssize_t i = 0; i < kwcount; i++) {
  ------------------
  |  Branch (2056:32): [True: 0, False: 0]
  ------------------
 2057|      0|            PyStackRef_CLOSE(args[i+argcount]);
 2058|      0|        }
 2059|      0|    }
 2060|      0|    PyErr_NoMemory();
 2061|       |    return NULL;
 2062|   201k|}
_PyEvalFramePushAndInit_Ex:
 2070|    118|{
 2071|    118|    bool has_dict = (kwargs != NULL && PyDict_GET_SIZE(kwargs) > 0);
  ------------------
  |  |   63|     95|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2071:22): [True: 95, False: 23]
  |  Branch (2071:40): [True: 0, False: 95]
  ------------------
 2072|    118|    PyObject *kwnames = NULL;
 2073|    118|    _PyStackRef *newargs;
 2074|    118|    PyObject *const *object_array = NULL;
 2075|    118|    _PyStackRef stack_array[8] = {0};
 2076|    118|    if (has_dict) {
  ------------------
  |  Branch (2076:9): [True: 0, False: 118]
  ------------------
 2077|      0|        object_array = _PyStack_UnpackDict(tstate, _PyTuple_ITEMS(callargs), nargs, kwargs, &kwnames);
  ------------------
  |  |   26|      0|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2078|      0|        if (object_array == NULL) {
  ------------------
  |  Branch (2078:13): [True: 0, False: 0]
  ------------------
 2079|      0|            PyStackRef_CLOSE(func);
 2080|      0|            goto error;
 2081|      0|        }
 2082|      0|        size_t nkwargs = PyDict_GET_SIZE(kwargs);
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2083|      0|        assert(sizeof(PyObject *) == sizeof(_PyStackRef));
  ------------------
  |  Branch (2083:9): [True: 0, Folded]
  ------------------
 2084|      0|        newargs = (_PyStackRef *)object_array;
 2085|       |        /* Positional args are borrowed from callargs tuple, need new reference */
 2086|      0|        for (Py_ssize_t i = 0; i < nargs; i++) {
  ------------------
  |  Branch (2086:32): [True: 0, False: 0]
  ------------------
 2087|      0|            newargs[i] = PyStackRef_FromPyObjectNew(object_array[i]);
  ------------------
  |  |  611|      0|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2088|      0|        }
 2089|       |        /* Keyword args are owned by _PyStack_UnpackDict, steal them */
 2090|      0|        for (size_t i = 0; i < nkwargs; i++) {
  ------------------
  |  Branch (2090:28): [True: 0, False: 0]
  ------------------
 2091|      0|            newargs[nargs + i] = PyStackRef_FromPyObjectSteal(object_array[nargs + i]);
 2092|      0|        }
 2093|      0|    }
 2094|    118|    else {
 2095|    118|        if (nargs <= 8) {
  ------------------
  |  Branch (2095:13): [True: 114, False: 4]
  ------------------
 2096|    114|            newargs = stack_array;
 2097|    114|        }
 2098|      4|        else {
 2099|      4|            newargs = PyMem_Malloc(sizeof(_PyStackRef) *nargs);
 2100|      4|            if (newargs == NULL) {
  ------------------
  |  Branch (2100:17): [True: 0, False: 4]
  ------------------
 2101|      0|                PyErr_NoMemory();
 2102|      0|                PyStackRef_CLOSE(func);
 2103|      0|                goto error;
 2104|      0|            }
 2105|      4|        }
 2106|       |        /* We need to create a new reference for all our args since the new frame steals them. */
 2107|    537|        for (Py_ssize_t i = 0; i < nargs; i++) {
  ------------------
  |  Branch (2107:32): [True: 419, False: 118]
  ------------------
 2108|    419|            newargs[i] = PyStackRef_FromPyObjectNew(PyTuple_GET_ITEM(callargs, i));
  ------------------
  |  |  611|    419|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    419|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    838|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 419, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2109|    419|        }
 2110|    118|    }
 2111|    118|    _PyInterpreterFrame *new_frame = _PyEvalFramePushAndInit(
 2112|    118|        tstate, func, locals,
 2113|    118|        newargs, nargs, kwnames, previous
 2114|    118|    );
 2115|    118|    if (has_dict) {
  ------------------
  |  Branch (2115:9): [True: 0, False: 118]
  ------------------
 2116|      0|        _PyStack_UnpackDict_FreeNoDecRef(object_array, kwnames);
 2117|      0|    }
 2118|    118|    else if (nargs > 8) {
  ------------------
  |  Branch (2118:14): [True: 4, False: 114]
  ------------------
 2119|      4|       PyMem_Free((void *)newargs);
 2120|      4|    }
 2121|       |    /* No need to decref func here because the reference has been stolen by
 2122|       |       _PyEvalFramePushAndInit.
 2123|       |    */
 2124|    118|    Py_DECREF(callargs);
  ------------------
  |  |   80|    118|    do { \
  |  |   81|    118|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|    118|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    118|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|    118|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|    118|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    118|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    118|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 118]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|    118|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|    118|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|    118|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 103, False: 15]
  |  |  ------------------
  |  |   88|    103|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|    103|    do { \
  |  |  |  |  113|    103|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|    103|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 103]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|    103|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 103]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|    103|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|    103|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    103|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    103|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|    103|            (*dealloc)(op); \
  |  |   91|    103|        } \
  |  |   92|    118|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 118]
  |  |  ------------------
  ------------------
 2125|    118|    Py_XDECREF(kwargs);
  ------------------
  |  |   69|    118|    do { \
  |  |   70|    118|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|    118|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    118|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|    118|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 95, False: 23]
  |  |  ------------------
  |  |   72|     95|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|     95|    do { \
  |  |  |  |   81|     95|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|     95|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|     95|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 95]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|     95|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|     95|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|     95|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 95, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|     95|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|     95|    do { \
  |  |  |  |  |  |  113|     95|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|     95|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 95]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|     95|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 95]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|     95|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|     95|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|     95|            (*dealloc)(op); \
  |  |  |  |   91|     95|        } \
  |  |  |  |   92|     95|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 95]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|     95|        } \
  |  |   74|    118|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 118]
  |  |  ------------------
  ------------------
 2126|    118|    return new_frame;
 2127|      0|error:
 2128|      0|    Py_DECREF(callargs);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2129|      0|    Py_XDECREF(kwargs);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2130|       |    return NULL;
 2131|    118|}
_PyEval_Vector:
 2138|   141k|{
 2139|   141k|    size_t total_args = argcount;
 2140|   141k|    if (kwnames) {
  ------------------
  |  Branch (2140:9): [True: 331, False: 141k]
  ------------------
 2141|    331|        total_args += PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|    331|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2142|    331|    }
 2143|   141k|    _PyStackRef stack_array[8] = {0};
 2144|   141k|    _PyStackRef *arguments;
 2145|   141k|    if (total_args <= 8) {
  ------------------
  |  Branch (2145:9): [True: 141k, False: 66]
  ------------------
 2146|   141k|        arguments = stack_array;
 2147|   141k|    }
 2148|     66|    else {
 2149|     66|        arguments = PyMem_Malloc(sizeof(_PyStackRef) * total_args);
 2150|     66|        if (arguments == NULL) {
  ------------------
  |  Branch (2150:13): [True: 0, False: 66]
  ------------------
 2151|      0|            return PyErr_NoMemory();
 2152|      0|        }
 2153|     66|    }
 2154|       |    /* _PyEvalFramePushAndInit consumes the references
 2155|       |     * to func, locals and all its arguments */
 2156|   141k|    Py_XINCREF(locals);
  ------------------
  |  |  514|   141k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   141k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   141k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2157|   665k|    for (size_t i = 0; i < argcount; i++) {
  ------------------
  |  Branch (2157:24): [True: 523k, False: 141k]
  ------------------
 2158|   523k|        arguments[i] = PyStackRef_FromPyObjectNew(args[i]);
  ------------------
  |  |  611|   523k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   523k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   523k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2159|   523k|    }
 2160|   141k|    if (kwnames) {
  ------------------
  |  Branch (2160:9): [True: 331, False: 141k]
  ------------------
 2161|    331|        Py_ssize_t kwcount = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|    331|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    331|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    331|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2162|  1.71k|        for (Py_ssize_t i = 0; i < kwcount; i++) {
  ------------------
  |  Branch (2162:32): [True: 1.38k, False: 331]
  ------------------
 2163|  1.38k|            arguments[i+argcount] = PyStackRef_FromPyObjectNew(args[i+argcount]);
  ------------------
  |  |  611|  1.38k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2164|  1.38k|        }
 2165|    331|    }
 2166|   141k|    _PyInterpreterFrame *frame = _PyEvalFramePushAndInit(
 2167|   141k|        tstate, PyStackRef_FromPyObjectNew(func), locals,
  ------------------
  |  |  611|   141k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   141k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   141k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2168|   141k|        arguments, argcount, kwnames, NULL);
 2169|   141k|    if (total_args > 8) {
  ------------------
  |  Branch (2169:9): [True: 66, False: 141k]
  ------------------
 2170|     66|        PyMem_Free(arguments);
 2171|     66|    }
 2172|   141k|    if (frame == NULL) {
  ------------------
  |  Branch (2172:9): [True: 0, False: 141k]
  ------------------
 2173|      0|        return NULL;
 2174|      0|    }
 2175|   141k|    EVAL_CALL_STAT_INC(EVAL_CALL_VECTOR);
  ------------------
  |  |   79|   141k|#define EVAL_CALL_STAT_INC(name) ((void)0)
  ------------------
 2176|   141k|    return _PyEval_EvalFrame(tstate, frame, 0);
 2177|   141k|}
_PyEval_UnpackIterableStackRef:
 2354|     83|{
 2355|     83|    int i = 0, j = 0;
 2356|     83|    Py_ssize_t ll = 0;
 2357|     83|    PyObject *it;  /* iter(v) */
 2358|     83|    PyObject *w;
 2359|     83|    PyObject *l = NULL; /* variable list */
 2360|     83|    assert(v != NULL);
  ------------------
  |  Branch (2360:5): [True: 83, False: 0]
  ------------------
 2361|       |
 2362|     83|    it = PyObject_GetIter(v);
 2363|     83|    if (it == NULL) {
  ------------------
  |  Branch (2363:9): [True: 0, False: 83]
  ------------------
 2364|      0|        if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
  ------------------
  |  Branch (2364:13): [True: 0, False: 0]
  ------------------
 2365|      0|            Py_TYPE(v)->tp_iter == NULL && !PySequence_Check(v))
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2365:13): [True: 0, False: 0]
  |  Branch (2365:44): [True: 0, False: 0]
  ------------------
 2366|      0|        {
 2367|      0|            _PyErr_Format(tstate, PyExc_TypeError,
 2368|      0|                          "cannot unpack non-iterable %.200s object",
 2369|      0|                          Py_TYPE(v)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2370|      0|        }
 2371|      0|        return 0;
 2372|      0|    }
 2373|       |
 2374|    267|    for (; i < argcnt; i++) {
  ------------------
  |  Branch (2374:12): [True: 184, False: 83]
  ------------------
 2375|    184|        w = PyIter_Next(it);
 2376|    184|        if (w == NULL) {
  ------------------
  |  Branch (2376:13): [True: 0, False: 184]
  ------------------
 2377|       |            /* Iterator done, via error or exhaustion. */
 2378|      0|            if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2378:17): [True: 0, False: 0]
  ------------------
 2379|      0|                if (argcntafter == -1) {
  ------------------
  |  Branch (2379:21): [True: 0, False: 0]
  ------------------
 2380|      0|                    _PyErr_Format(tstate, PyExc_ValueError,
 2381|      0|                                  "not enough values to unpack "
 2382|      0|                                  "(expected %d, got %d)",
 2383|      0|                                  argcnt, i);
 2384|      0|                }
 2385|      0|                else {
 2386|      0|                    _PyErr_Format(tstate, PyExc_ValueError,
 2387|      0|                                  "not enough values to unpack "
 2388|      0|                                  "(expected at least %d, got %d)",
 2389|      0|                                  argcnt + argcntafter, i);
 2390|      0|                }
 2391|      0|            }
 2392|      0|            goto Error;
 2393|      0|        }
 2394|    184|        *--sp = PyStackRef_FromPyObjectSteal(w);
 2395|    184|    }
 2396|       |
 2397|     83|    if (argcntafter == -1) {
  ------------------
  |  Branch (2397:9): [True: 83, False: 0]
  ------------------
 2398|       |        /* We better have exhausted the iterator now. */
 2399|     83|        w = PyIter_Next(it);
 2400|     83|        if (w == NULL) {
  ------------------
  |  Branch (2400:13): [True: 83, False: 0]
  ------------------
 2401|     83|            if (_PyErr_Occurred(tstate))
  ------------------
  |  Branch (2401:17): [True: 0, False: 83]
  ------------------
 2402|      0|                goto Error;
 2403|     83|            Py_DECREF(it);
  ------------------
  |  |   80|     83|    do { \
  |  |   81|     83|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|     83|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|     83|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|     83|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|     83|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|     83|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 83, False: 0]
  |  |  ------------------
  |  |   88|     83|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|     83|    do { \
  |  |  |  |  113|     83|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|     83|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 83]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|     83|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|     83|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|     83|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|     83|            (*dealloc)(op); \
  |  |   91|     83|        } \
  |  |   92|     83|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 83]
  |  |  ------------------
  ------------------
 2404|     83|            return 1;
 2405|     83|        }
 2406|      0|        Py_DECREF(w);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2407|       |
 2408|      0|        if (PyList_CheckExact(v) || PyTuple_CheckExact(v)
  ------------------
  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (PyList_CheckExact(v) || PyTuple_CheckExact(v)
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2409|      0|              || PyDict_CheckExact(v)) {
  ------------------
  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2410|      0|            ll = PyDict_CheckExact(v) ? PyDict_Size(v) : Py_SIZE(v);
  ------------------
  |  |   19|      0|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          ll = PyDict_CheckExact(v) ? PyDict_Size(v) : Py_SIZE(v);
  ------------------
  |  |  214|      0|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2411|      0|            if (ll > argcnt) {
  ------------------
  |  Branch (2411:17): [True: 0, False: 0]
  ------------------
 2412|      0|                _PyErr_Format(tstate, PyExc_ValueError,
 2413|      0|                              "too many values to unpack (expected %d, got %zd)",
 2414|      0|                              argcnt, ll);
 2415|      0|                goto Error;
 2416|      0|            }
 2417|      0|        }
 2418|      0|        _PyErr_Format(tstate, PyExc_ValueError,
 2419|      0|                      "too many values to unpack (expected %d)",
 2420|      0|                      argcnt);
 2421|      0|        goto Error;
 2422|      0|    }
 2423|       |
 2424|      0|    l = PySequence_List(it);
 2425|      0|    if (l == NULL)
  ------------------
  |  Branch (2425:9): [True: 0, False: 0]
  ------------------
 2426|      0|        goto Error;
 2427|      0|    *--sp = PyStackRef_FromPyObjectSteal(l);
 2428|      0|    i++;
 2429|       |
 2430|      0|    ll = PyList_GET_SIZE(l);
  ------------------
  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2431|      0|    if (ll < argcntafter) {
  ------------------
  |  Branch (2431:9): [True: 0, False: 0]
  ------------------
 2432|      0|        _PyErr_Format(tstate, PyExc_ValueError,
 2433|      0|            "not enough values to unpack (expected at least %d, got %zd)",
 2434|      0|            argcnt + argcntafter, argcnt + ll);
 2435|      0|        goto Error;
 2436|      0|    }
 2437|       |
 2438|       |    /* Pop the "after-variable" args off the list. */
 2439|      0|    for (j = argcntafter; j > 0; j--, i++) {
  ------------------
  |  Branch (2439:27): [True: 0, False: 0]
  ------------------
 2440|      0|        *--sp = PyStackRef_FromPyObjectSteal(PyList_GET_ITEM(l, ll - j));
  ------------------
  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2440:46): [True: 0, False: 0]
  ------------------
 2441|      0|    }
 2442|       |    /* Resize the list. */
 2443|      0|    Py_SET_SIZE(l, ll - argcntafter);
  ------------------
  |  |  216|      0|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      0|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2444|      0|    Py_DECREF(it);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2445|      0|    return 1;
 2446|       |
 2447|      0|Error:
 2448|      0|    for (; i > 0; i--, sp++) {
  ------------------
  |  Branch (2448:12): [True: 0, False: 0]
  ------------------
 2449|      0|        PyStackRef_CLOSE(*sp);
 2450|      0|    }
 2451|       |    Py_XDECREF(it);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2452|      0|    return 0;
 2453|      0|}
_PyEval_MonitorRaise:
 2460|  42.9k|{
 2461|  42.9k|    if (no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_RAISE)) {
  ------------------
  |  |   32|  42.9k|#define PY_MONITORING_EVENT_RAISE 11
  ------------------
  |  Branch (2461:9): [True: 42.9k, False: 0]
  ------------------
 2462|  42.9k|        return;
 2463|  42.9k|    }
 2464|      0|    do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_RAISE);
  ------------------
  |  |   32|      0|#define PY_MONITORING_EVENT_RAISE 11
  ------------------
 2465|      0|}
_PyEval_NoToolsForUnwind:
 2469|      6|{
 2470|      6|    return no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_PY_UNWIND);
  ------------------
  |  |   34|      6|#define PY_MONITORING_EVENT_PY_UNWIND 13
  ------------------
 2471|      6|}
_PyEval_GetFrame:
 2607|    319|{
 2608|    319|    PyThreadState *tstate = _PyThreadState_GET();
 2609|    319|    return _PyThreadState_GetFrame(tstate);
 2610|    319|}
_PyEval_GetBuiltins:
 2628|    123|{
 2629|    123|    _PyInterpreterFrame *frame = _PyThreadState_GetFrame(tstate);
 2630|    123|    if (frame != NULL) {
  ------------------
  |  Branch (2630:9): [True: 117, False: 6]
  ------------------
 2631|    117|        return frame->f_builtins;
 2632|    117|    }
 2633|      6|    return tstate->interp->builtins;
 2634|    123|}
PyEval_GetBuiltins:
 2638|    123|{
 2639|    123|    PyThreadState *tstate = _PyThreadState_GET();
 2640|    123|    return _PyEval_GetBuiltins(tstate);
 2641|    123|}
_PyEval_GetFrameLocals:
 2706|      1|{
 2707|      1|    PyThreadState *tstate = _PyThreadState_GET();
 2708|      1|     _PyInterpreterFrame *current_frame = _PyThreadState_GetFrame(tstate);
 2709|      1|    if (current_frame == NULL) {
  ------------------
  |  Branch (2709:9): [True: 0, False: 1]
  ------------------
 2710|      0|        _PyErr_SetString(tstate, PyExc_SystemError, "frame does not exist");
 2711|      0|        return NULL;
 2712|      0|    }
 2713|       |
 2714|      1|    PyObject *locals = _PyFrame_GetLocals(current_frame);
 2715|      1|    if (locals == NULL) {
  ------------------
  |  Branch (2715:9): [True: 0, False: 1]
  ------------------
 2716|      0|        return NULL;
 2717|      0|    }
 2718|       |
 2719|      1|    if (PyFrameLocalsProxy_Check(locals)) {
  ------------------
  |  |    9|      1|#define PyFrameLocalsProxy_Check(op) Py_IS_TYPE((op), &PyFrameLocalsProxy_Type)
  |  |  ------------------
  |  |  |  |   65|      1|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2720|      0|        PyObject* ret = PyDict_New();
 2721|      0|        if (ret == NULL) {
  ------------------
  |  Branch (2721:13): [True: 0, False: 0]
  ------------------
 2722|      0|            Py_DECREF(locals);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2723|      0|            return NULL;
 2724|      0|        }
 2725|      0|        if (PyDict_Update(ret, locals) < 0) {
  ------------------
  |  Branch (2725:13): [True: 0, False: 0]
  ------------------
 2726|      0|            Py_DECREF(ret);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2727|      0|            Py_DECREF(locals);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2728|      0|            return NULL;
 2729|      0|        }
 2730|      0|        Py_DECREF(locals);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2731|      0|        return ret;
 2732|      0|    }
 2733|       |
 2734|      1|    assert(PyMapping_Check(locals));
  ------------------
  |  Branch (2734:5): [True: 1, False: 0]
  ------------------
 2735|      1|    return locals;
 2736|      1|}
PyEval_GetGlobals:
 2750|  51.8k|{
 2751|  51.8k|    PyThreadState *tstate = _PyThreadState_GET();
 2752|  51.8k|    return _PyEval_GetGlobals(tstate);
 2753|  51.8k|}
_PyEval_EnsureBuiltins:
 2813|    120|{
 2814|    120|    PyObject *builtins = get_globals_builtins(globals);
 2815|    120|    if (builtins == NULL) {
  ------------------
  |  Branch (2815:9): [True: 117, False: 3]
  ------------------
 2816|    117|        if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2816:13): [True: 0, False: 117]
  ------------------
 2817|      0|            return -1;
 2818|      0|        }
 2819|    117|        builtins = PyEval_GetBuiltins();  // borrowed
 2820|    117|        if (builtins == NULL) {
  ------------------
  |  Branch (2820:13): [True: 0, False: 117]
  ------------------
 2821|      0|            assert(_PyErr_Occurred(tstate));
  ------------------
  |  Branch (2821:13): [True: 0, False: 0]
  ------------------
 2822|      0|            return -1;
 2823|      0|        }
 2824|    117|        Py_INCREF(builtins);
  ------------------
  |  |  310|    117|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    117|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    117|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2825|    117|        if (set_globals_builtins(globals, builtins) < 0) {
  ------------------
  |  Branch (2825:13): [True: 0, False: 117]
  ------------------
 2826|      0|            Py_DECREF(builtins);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2827|      0|            return -1;
 2828|      0|        }
 2829|    117|    }
 2830|    120|    if (p_builtins != NULL) {
  ------------------
  |  Branch (2830:9): [True: 0, False: 120]
  ------------------
 2831|      0|        *p_builtins = builtins;
 2832|      0|    }
 2833|    120|    else {
 2834|       |        Py_DECREF(builtins);
  ------------------
  |  |   80|    120|    do { \
  |  |   81|    120|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|    120|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    120|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|    120|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|    120|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    120|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    120|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 120]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|    120|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|    120|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|    120|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 120]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|    120|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 120]
  |  |  ------------------
  ------------------
 2835|    120|    }
 2836|    120|    return 0;
 2837|    120|}
_PyEval_EnsureBuiltinsWithModule:
 2842|  51.6k|{
 2843|  51.6k|    PyObject *builtins = get_globals_builtins(globals);
 2844|  51.6k|    if (builtins == NULL) {
  ------------------
  |  Branch (2844:9): [True: 51.6k, False: 0]
  ------------------
 2845|  51.6k|        if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2845:13): [True: 0, False: 51.6k]
  ------------------
 2846|      0|            return -1;
 2847|      0|        }
 2848|  51.6k|        builtins = PyImport_ImportModuleLevel("builtins", NULL, NULL, NULL, 0);
 2849|  51.6k|        if (builtins == NULL) {
  ------------------
  |  Branch (2849:13): [True: 0, False: 51.6k]
  ------------------
 2850|      0|            return -1;
 2851|      0|        }
 2852|  51.6k|        if (set_globals_builtins(globals, builtins) < 0) {
  ------------------
  |  Branch (2852:13): [True: 0, False: 51.6k]
  ------------------
 2853|      0|            Py_DECREF(builtins);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2854|      0|            return -1;
 2855|      0|        }
 2856|  51.6k|    }
 2857|  51.6k|    if (p_builtins != NULL) {
  ------------------
  |  Branch (2857:9): [True: 51.6k, False: 0]
  ------------------
 2858|  51.6k|        *p_builtins = builtins;
 2859|  51.6k|    }
 2860|      0|    else {
 2861|       |        Py_DECREF(builtins);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2862|      0|    }
 2863|  51.6k|    return 0;
 2864|  51.6k|}
PyEval_MergeCompilerFlags:
 2890|      3|{
 2891|      3|    PyThreadState *tstate = _PyThreadState_GET();
 2892|      3|    _PyInterpreterFrame *current_frame = tstate->current_frame;
 2893|      3|    if (current_frame == tstate->base_frame) {
  ------------------
  |  Branch (2893:9): [True: 0, False: 3]
  ------------------
 2894|      0|        current_frame = NULL;
 2895|      0|    }
 2896|      3|    int result = cf->cf_flags != 0;
 2897|       |
 2898|      3|    if (current_frame != NULL) {
  ------------------
  |  Branch (2898:9): [True: 3, False: 0]
  ------------------
 2899|      3|        const int codeflags = _PyFrame_GetCode(current_frame)->co_flags;
 2900|      3|        const int compilerflags = codeflags & PyCF_MASK;
  ------------------
  |  |    6|      3|#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
  |  |  ------------------
  |  |  |  |  139|      3|#define CO_FUTURE_DIVISION      0x20000
  |  |  ------------------
  |  |               #define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
  |  |  ------------------
  |  |  |  |  140|      3|#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */
  |  |  ------------------
  |  |    7|      3|                   CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
  |  |  ------------------
  |  |  |  |  141|      3|#define CO_FUTURE_WITH_STATEMENT  0x80000
  |  |  ------------------
  |  |                                  CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
  |  |  ------------------
  |  |  |  |  142|      3|#define CO_FUTURE_PRINT_FUNCTION  0x100000
  |  |  ------------------
  |  |    8|      3|                   CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
  |  |  ------------------
  |  |  |  |  143|      3|#define CO_FUTURE_UNICODE_LITERALS 0x200000
  |  |  ------------------
  |  |                                  CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
  |  |  ------------------
  |  |  |  |  145|      3|#define CO_FUTURE_BARRY_AS_BDFL  0x400000
  |  |  ------------------
  |  |    9|      3|                   CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
  |  |  ------------------
  |  |  |  |  146|      3|#define CO_FUTURE_GENERATOR_STOP  0x800000
  |  |  ------------------
  |  |                                  CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
  |  |  ------------------
  |  |  |  |  147|      3|#define CO_FUTURE_ANNOTATIONS    0x1000000
  |  |  ------------------
  ------------------
 2901|      3|        if (compilerflags) {
  ------------------
  |  Branch (2901:13): [True: 0, False: 3]
  ------------------
 2902|      0|            result = 1;
 2903|      0|            cf->cf_flags |= compilerflags;
 2904|      0|        }
 2905|      3|    }
 2906|      3|    return result;
 2907|      3|}
_PyEval_SliceIndex:
 2944|   884k|{
 2945|   884k|    if (Py_IsNone(v)) {
  ------------------
  |  |  621|   884k|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|   884k|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 425k, False: 459k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2946|   425k|        return 1;
 2947|   425k|    }
 2948|   459k|    return _PyEval_SliceIndexNotNone(v, pi);
 2949|   884k|}
_PyEval_SliceIndexNotNone:
 2953|   459k|{
 2954|   459k|    PyThreadState *tstate = _PyThreadState_GET();
 2955|   459k|    Py_ssize_t x;
 2956|   459k|    if (PyLong_CheckExact(v) && _PyLong_IsCompact((PyLongObject *)v)) {
  ------------------
  |  |   14|   459k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |   65|   918k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   459k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   459k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 458k, False: 1.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2956:33): [True: 457k, False: 625]
  ------------------
 2957|   457k|        *pi = _PyLong_CompactValue((PyLongObject *)v);
 2958|   457k|        return 1;
 2959|   457k|    }
 2960|  1.67k|    if (_PyIndex_Check(v)) {
  ------------------
  |  Branch (2960:9): [True: 631, False: 1.04k]
  ------------------
 2961|    631|        x = PyNumber_AsSsize_t(v, NULL);
 2962|    631|        if (x == -1 && _PyErr_Occurred(tstate))
  ------------------
  |  Branch (2962:13): [True: 0, False: 631]
  |  Branch (2962:24): [True: 0, False: 0]
  ------------------
 2963|      0|            return 0;
 2964|    631|    }
 2965|  1.04k|    else {
 2966|  1.04k|        _PyErr_SetString(tstate, PyExc_TypeError,
 2967|  1.04k|                         "slice indices must be integers or "
 2968|  1.04k|                         "have an __index__ method");
 2969|  1.04k|        return 0;
 2970|  1.04k|    }
 2971|    631|    *pi = x;
 2972|    631|    return 1;
 2973|  1.67k|}
_PyEval_UnpackIndices:
 2979|   423k|{
 2980|   423k|    if (len < 0) {
  ------------------
  |  Branch (2980:9): [True: 0, False: 423k]
  ------------------
 2981|      0|        return 0;
 2982|      0|    }
 2983|   423k|    *istart = 0;
 2984|   423k|    *istop = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|   423k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 2985|   423k|    if (!_PyEval_SliceIndex(start, istart)) {
  ------------------
  |  Branch (2985:9): [True: 0, False: 423k]
  ------------------
 2986|      0|        return 0;
 2987|      0|    }
 2988|   423k|    if (!_PyEval_SliceIndex(stop, istop)) {
  ------------------
  |  Branch (2988:9): [True: 0, False: 423k]
  ------------------
 2989|      0|        return 0;
 2990|      0|    }
 2991|   423k|    PySlice_AdjustIndices(len, istart, istop, 1);
 2992|   423k|    return 1;
 2993|   423k|}
_PyEval_ImportName:
 2999|   194k|{
 3000|   194k|    PyObject *import_func;
 3001|   194k|    if (PyMapping_GetOptionalItem(builtins, &_Py_ID(__import__),
  ------------------
  |  |  936|   194k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   194k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   194k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3001:9): [True: 0, False: 194k]
  ------------------
 3002|   194k|                                  &import_func) < 0) {
 3003|      0|        return NULL;
 3004|      0|    }
 3005|   194k|    if (import_func == NULL) {
  ------------------
  |  Branch (3005:9): [True: 0, False: 194k]
  ------------------
 3006|      0|        _PyErr_SetString(tstate, PyExc_ImportError, "__import__ not found");
 3007|      0|        return NULL;
 3008|      0|    }
 3009|       |
 3010|   194k|    PyObject *res = _PyEval_ImportNameWithImport(
 3011|   194k|        tstate, import_func, globals, locals, name, fromlist, level);
 3012|       |    Py_DECREF(import_func);
  ------------------
  |  |   80|   194k|    do { \
  |  |   81|   194k|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|   194k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   194k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|   194k|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|   194k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   194k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   194k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 194k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|   194k|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|   194k|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|   194k|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 194k]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|   194k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 194k]
  |  |  ------------------
  ------------------
 3013|   194k|    return res;
 3014|   194k|}
_PyEval_ImportNameWithImport:
 3020|   194k|{
 3021|   194k|    if (locals == NULL) {
  ------------------
  |  Branch (3021:9): [True: 193k, False: 312]
  ------------------
 3022|   193k|        locals = Py_None;
  ------------------
  |  |  616|   193k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3023|   193k|    }
 3024|       |
 3025|       |    /* Fast path for not overloaded __import__. */
 3026|   194k|    if (_PyImport_IsDefaultImportFunc(tstate->interp, import_func)) {
  ------------------
  |  Branch (3026:9): [True: 194k, False: 0]
  ------------------
 3027|   194k|        int ilevel = PyLong_AsInt(level);
 3028|   194k|        if (ilevel == -1 && _PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (3028:13): [True: 0, False: 194k]
  |  Branch (3028:29): [True: 0, False: 0]
  ------------------
 3029|      0|            return NULL;
 3030|      0|        }
 3031|   194k|        return PyImport_ImportModuleLevelObject(
 3032|   194k|                        name,
 3033|   194k|                        globals,
 3034|   194k|                        locals,
 3035|   194k|                        fromlist,
 3036|   194k|                        ilevel);
 3037|   194k|    }
 3038|       |
 3039|      0|    PyObject *args[5] = {name, globals, locals, fromlist, level};
 3040|       |    PyObject *res = PyObject_Vectorcall(import_func, args, 5, NULL);
 3041|      0|    return res;
 3042|   194k|}
_PyEval_LazyImportName:
 3093|    273|{
 3094|    273|    PyObject *res = NULL;
 3095|       |    // Check if global policy overrides the local syntax
 3096|    273|    switch (PyImport_GetLazyImportsMode()) {
  ------------------
  |  Branch (3096:13): [True: 273, False: 0]
  ------------------
 3097|      0|        case PyImport_LAZY_ALL:
  ------------------
  |  Branch (3097:9): [True: 0, False: 273]
  ------------------
 3098|      0|            if (!lazy) {
  ------------------
  |  Branch (3098:17): [True: 0, False: 0]
  ------------------
 3099|      0|                lazy = is_lazy_import_module_level();
 3100|      0|            }
 3101|      0|            break;
 3102|    273|        case PyImport_LAZY_NORMAL:
  ------------------
  |  Branch (3102:9): [True: 273, False: 0]
  ------------------
 3103|    273|            break;
 3104|    273|    }
 3105|       |
 3106|    273|    if (!lazy) {
  ------------------
  |  Branch (3106:9): [True: 262, False: 11]
  ------------------
 3107|       |        // See if __lazy_modules__ forces this to be lazy.
 3108|       |        // __lazy_modules__ only applies at module level; exec() inside
 3109|       |        // functions or classes should remain eager.
 3110|    262|        if (is_lazy_import_module_level()) {
  ------------------
  |  Branch (3110:13): [True: 262, False: 0]
  ------------------
 3111|    262|            lazy = check_lazy_import_compatibility(tstate, globals, name, level);
 3112|    262|            if (lazy < 0) {
  ------------------
  |  Branch (3112:17): [True: 0, False: 262]
  ------------------
 3113|      0|                return NULL;
 3114|      0|            }
 3115|    262|        }
 3116|    262|    }
 3117|       |
 3118|    273|    if (!lazy) {
  ------------------
  |  Branch (3118:9): [True: 262, False: 11]
  ------------------
 3119|       |        // Not a lazy import or lazy imports are disabled, fallback to the
 3120|       |        // regular import.
 3121|    262|        return _PyEval_ImportName(tstate, builtins, globals, locals,
 3122|    262|                                  name, fromlist, level);
 3123|    262|    }
 3124|       |
 3125|     11|    PyObject *lazy_import_func;
 3126|     11|    if (PyMapping_GetOptionalItem(builtins, &_Py_ID(__lazy_import__),
  ------------------
  |  |  936|     11|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     11|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     11|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3126:9): [True: 0, False: 11]
  ------------------
 3127|     11|                                  &lazy_import_func) < 0) {
 3128|      0|        goto error;
 3129|      0|    }
 3130|     11|    if (lazy_import_func == NULL) {
  ------------------
  |  Branch (3130:9): [True: 0, False: 11]
  ------------------
 3131|      0|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (3131:9): [True: 0, False: 0]
  ------------------
 3132|      0|        _PyErr_SetString(tstate, PyExc_ImportError,
 3133|      0|                         "__lazy_import__ not found");
 3134|      0|        goto error;
 3135|      0|    }
 3136|       |
 3137|     11|    if (locals == NULL) {
  ------------------
  |  Branch (3137:9): [True: 0, False: 11]
  ------------------
 3138|      0|        locals = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3139|      0|    }
 3140|       |
 3141|     11|    if (_PyImport_IsDefaultLazyImportFunc(tstate->interp, lazy_import_func)) {
  ------------------
  |  Branch (3141:9): [True: 11, False: 0]
  ------------------
 3142|     11|        int ilevel = PyLong_AsInt(level);
 3143|     11|        if (ilevel == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (3143:13): [True: 0, False: 11]
  |  Branch (3143:29): [True: 0, False: 0]
  ------------------
 3144|      0|            goto error;
 3145|      0|        }
 3146|       |
 3147|     11|        res = _PyImport_LazyImportModuleLevelObject(
 3148|     11|            tstate, name, builtins, globals, locals, fromlist, ilevel
 3149|     11|        );
 3150|     11|        goto error;
 3151|     11|    }
 3152|       |
 3153|      0|    PyObject *args[6] = {name, globals, locals, fromlist, level, builtins};
 3154|      0|    res = PyObject_Vectorcall(lazy_import_func, args, 6, NULL);
 3155|     11|error:
 3156|       |    Py_XDECREF(lazy_import_func);
  ------------------
  |  |   69|     11|    do { \
  |  |   70|     11|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|     11|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 11, False: 0]
  |  |  ------------------
  |  |   72|     11|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|     11|    do { \
  |  |  |  |   81|     11|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|     11|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|     11|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 11]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|     11|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|     11|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|     11|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|     11|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|     11|        } \
  |  |   74|     11|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 11]
  |  |  ------------------
  ------------------
 3157|     11|    return res;
 3158|      0|}
_PyEval_ImportFrom:
 3162|    248|{
 3163|    248|    PyObject *x;
 3164|    248|    PyObject *fullmodname, *mod_name, *origin, *mod_name_or_unknown, *errmsg, *spec;
 3165|       |
 3166|    248|    if (PyObject_GetOptionalAttr(v, name, &x) != 0) {
  ------------------
  |  Branch (3166:9): [True: 247, False: 1]
  ------------------
 3167|    247|        return x;
 3168|    247|    }
 3169|       |    /* Issue #17636: in case this failed because of a circular relative
 3170|       |       import, try to fallback on reading the module directly from
 3171|       |       sys.modules. */
 3172|      1|    if (PyObject_GetOptionalAttr(v, &_Py_ID(__name__), &mod_name) < 0) {
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3172:9): [True: 0, False: 1]
  ------------------
 3173|      0|        return NULL;
 3174|      0|    }
 3175|      1|    if (mod_name == NULL || !PyUnicode_Check(mod_name)) {
  ------------------
  |  |  103|      1|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      1|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3175:9): [True: 0, False: 1]
  |  Branch (3175:29): [True: 0, False: 1]
  ------------------
 3176|      0|        Py_CLEAR(mod_name);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3177|      0|        goto error;
 3178|      0|    }
 3179|      1|    fullmodname = PyUnicode_FromFormat("%U.%U", mod_name, name);
 3180|      1|    if (fullmodname == NULL) {
  ------------------
  |  Branch (3180:9): [True: 0, False: 1]
  ------------------
 3181|      0|        Py_DECREF(mod_name);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3182|      0|        return NULL;
 3183|      0|    }
 3184|      1|    x = PyImport_GetModule(fullmodname);
 3185|      1|    Py_DECREF(fullmodname);
  ------------------
  |  |   80|      1|    do { \
  |  |   81|      1|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      1|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      1|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      1|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      1|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      1|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 1, False: 0]
  |  |  ------------------
  |  |   88|      1|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      1|    do { \
  |  |  |  |  113|      1|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      1|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      1|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      1|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      1|            (*dealloc)(op); \
  |  |   91|      1|        } \
  |  |   92|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3186|      1|    if (x == NULL && !_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (3186:9): [True: 1, False: 0]
  |  Branch (3186:22): [True: 1, False: 0]
  ------------------
 3187|      1|        goto error;
 3188|      1|    }
 3189|      0|    Py_DECREF(mod_name);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3190|      0|    return x;
 3191|       |
 3192|      1| error:
 3193|      1|    if (mod_name == NULL) {
  ------------------
  |  Branch (3193:9): [True: 0, False: 1]
  ------------------
 3194|      0|        mod_name_or_unknown = PyUnicode_FromString("<unknown module name>");
 3195|      0|        if (mod_name_or_unknown == NULL) {
  ------------------
  |  Branch (3195:13): [True: 0, False: 0]
  ------------------
 3196|      0|            return NULL;
 3197|      0|        }
 3198|      1|    } else {
 3199|      1|        mod_name_or_unknown = mod_name;
 3200|      1|    }
 3201|       |    // mod_name is no longer an owned reference
 3202|      1|    assert(mod_name_or_unknown);
  ------------------
  |  Branch (3202:5): [True: 1, False: 0]
  ------------------
 3203|      1|    assert(mod_name == NULL || mod_name == mod_name_or_unknown);
  ------------------
  |  Branch (3203:5): [True: 0, False: 1]
  |  Branch (3203:5): [True: 1, False: 0]
  ------------------
 3204|       |
 3205|      1|    origin = NULL;
 3206|      1|    if (PyObject_GetOptionalAttr(v, &_Py_ID(__spec__), &spec) < 0) {
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3206:9): [True: 0, False: 1]
  ------------------
 3207|      0|        Py_DECREF(mod_name_or_unknown);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3208|      0|        return NULL;
 3209|      0|    }
 3210|      1|    if (spec == NULL) {
  ------------------
  |  Branch (3210:9): [True: 0, False: 1]
  ------------------
 3211|      0|        errmsg = PyUnicode_FromFormat(
 3212|      0|            "cannot import name %R from %R (unknown location)",
 3213|      0|            name, mod_name_or_unknown
 3214|      0|        );
 3215|      0|        goto done_with_errmsg;
 3216|      0|    }
 3217|      1|    if (_PyModuleSpec_GetFileOrigin(spec, &origin) < 0) {
  ------------------
  |  Branch (3217:9): [True: 0, False: 1]
  ------------------
 3218|      0|        goto done;
 3219|      0|    }
 3220|       |
 3221|      1|    int is_possibly_shadowing = _PyModule_IsPossiblyShadowing(origin);
 3222|      1|    if (is_possibly_shadowing < 0) {
  ------------------
  |  Branch (3222:9): [True: 0, False: 1]
  ------------------
 3223|      0|        goto done;
 3224|      0|    }
 3225|      1|    int is_possibly_shadowing_stdlib = 0;
 3226|      1|    if (is_possibly_shadowing) {
  ------------------
  |  Branch (3226:9): [True: 0, False: 1]
  ------------------
 3227|      0|        PyObject *stdlib_modules;
 3228|      0|        if (PySys_GetOptionalAttrString("stdlib_module_names", &stdlib_modules) < 0) {
  ------------------
  |  Branch (3228:13): [True: 0, False: 0]
  ------------------
 3229|      0|            goto done;
 3230|      0|        }
 3231|      0|        if (stdlib_modules && PyAnySet_Check(stdlib_modules)) {
  ------------------
  |  |   31|      0|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|      0|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   33|      0|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (3231:13): [True: 0, False: 0]
  ------------------
 3232|      0|            is_possibly_shadowing_stdlib = PySet_Contains(stdlib_modules, mod_name_or_unknown);
 3233|      0|            if (is_possibly_shadowing_stdlib < 0) {
  ------------------
  |  Branch (3233:17): [True: 0, False: 0]
  ------------------
 3234|      0|                Py_DECREF(stdlib_modules);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3235|      0|                goto done;
 3236|      0|            }
 3237|      0|        }
 3238|      0|        Py_XDECREF(stdlib_modules);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3239|      0|    }
 3240|       |
 3241|      1|    if (origin == NULL && PyModule_Check(v)) {
  ------------------
  |  |   12|      1|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      1|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3241:9): [True: 1, False: 0]
  ------------------
 3242|       |        // Fall back to __file__ for diagnostics if we don't have
 3243|       |        // an origin that is a location
 3244|      1|        origin = PyModule_GetFilenameObject(v);
 3245|      1|        if (origin == NULL) {
  ------------------
  |  Branch (3245:13): [True: 1, False: 0]
  ------------------
 3246|      1|            if (!PyErr_ExceptionMatches(PyExc_SystemError)) {
  ------------------
  |  Branch (3246:17): [True: 0, False: 1]
  ------------------
 3247|      0|                goto done;
 3248|      0|            }
 3249|       |            // PyModule_GetFilenameObject raised "module filename missing"
 3250|      1|            _PyErr_Clear(tstate);
 3251|      1|        }
 3252|      1|        assert(origin == NULL || PyUnicode_Check(origin));
  ------------------
  |  Branch (3252:9): [True: 1, False: 0]
  |  Branch (3252:9): [True: 0, False: 0]
  ------------------
 3253|      1|    }
 3254|       |
 3255|      1|    if (is_possibly_shadowing_stdlib) {
  ------------------
  |  Branch (3255:9): [True: 0, False: 1]
  ------------------
 3256|      0|        assert(origin);
  ------------------
  |  Branch (3256:9): [True: 0, False: 0]
  ------------------
 3257|      0|        errmsg = PyUnicode_FromFormat(
 3258|      0|            "cannot import name %R from %R "
 3259|      0|            "(consider renaming %R since it has the same "
 3260|      0|            "name as the standard library module named %R "
 3261|      0|            "and prevents importing that standard library module)",
 3262|      0|            name, mod_name_or_unknown, origin, mod_name_or_unknown
 3263|      0|        );
 3264|      0|    }
 3265|      1|    else {
 3266|      1|        int rc = _PyModuleSpec_IsInitializing(spec);
 3267|      1|        if (rc < 0) {
  ------------------
  |  Branch (3267:13): [True: 0, False: 1]
  ------------------
 3268|      0|            goto done;
 3269|      0|        }
 3270|      1|        else if (rc > 0) {
  ------------------
  |  Branch (3270:18): [True: 0, False: 1]
  ------------------
 3271|      0|            if (is_possibly_shadowing) {
  ------------------
  |  Branch (3271:17): [True: 0, False: 0]
  ------------------
 3272|      0|                assert(origin);
  ------------------
  |  Branch (3272:17): [True: 0, False: 0]
  ------------------
 3273|       |                // For non-stdlib modules, only mention the possibility of
 3274|       |                // shadowing if the module is being initialized.
 3275|      0|                errmsg = PyUnicode_FromFormat(
 3276|      0|                    "cannot import name %R from %R "
 3277|      0|                    "(consider renaming %R if it has the same name "
 3278|      0|                    "as a library you intended to import)",
 3279|      0|                    name, mod_name_or_unknown, origin
 3280|      0|                );
 3281|      0|            }
 3282|      0|            else if (origin) {
  ------------------
  |  Branch (3282:22): [True: 0, False: 0]
  ------------------
 3283|      0|                errmsg = PyUnicode_FromFormat(
 3284|      0|                    "cannot import name %R from partially initialized module %R "
 3285|      0|                    "(most likely due to a circular import) (%S)",
 3286|      0|                    name, mod_name_or_unknown, origin
 3287|      0|                );
 3288|      0|            }
 3289|      0|            else {
 3290|      0|                errmsg = PyUnicode_FromFormat(
 3291|      0|                    "cannot import name %R from partially initialized module %R "
 3292|      0|                    "(most likely due to a circular import)",
 3293|      0|                    name, mod_name_or_unknown
 3294|      0|                );
 3295|      0|            }
 3296|      0|        }
 3297|      1|        else {
 3298|      1|            assert(rc == 0);
  ------------------
  |  Branch (3298:13): [True: 1, False: 0]
  ------------------
 3299|      1|            if (origin) {
  ------------------
  |  Branch (3299:17): [True: 0, False: 1]
  ------------------
 3300|      0|                errmsg = PyUnicode_FromFormat(
 3301|      0|                    "cannot import name %R from %R (%S)",
 3302|      0|                    name, mod_name_or_unknown, origin
 3303|      0|                );
 3304|      0|            }
 3305|      1|            else {
 3306|      1|                errmsg = PyUnicode_FromFormat(
 3307|      1|                    "cannot import name %R from %R (unknown location)",
 3308|      1|                    name, mod_name_or_unknown
 3309|      1|                );
 3310|      1|            }
 3311|      1|        }
 3312|      1|    }
 3313|       |
 3314|      1|done_with_errmsg:
 3315|      1|    if (errmsg != NULL) {
  ------------------
  |  Branch (3315:9): [True: 1, False: 0]
  ------------------
 3316|       |        /* NULL checks for mod_name and origin done by _PyErr_SetImportErrorWithNameFrom */
 3317|      1|        _PyErr_SetImportErrorWithNameFrom(errmsg, mod_name, origin, name);
 3318|      1|        Py_DECREF(errmsg);
  ------------------
  |  |   80|      1|    do { \
  |  |   81|      1|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      1|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      1|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      1|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      1|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      1|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3319|      1|    }
 3320|       |
 3321|      1|done:
 3322|      1|    Py_XDECREF(origin);
  ------------------
  |  |   69|      1|    do { \
  |  |   70|      1|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      1|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3323|      1|    Py_XDECREF(spec);
  ------------------
  |  |   69|      1|    do { \
  |  |   70|      1|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      1|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 1, False: 0]
  |  |  ------------------
  |  |   72|      1|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      1|    do { \
  |  |  |  |   81|      1|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      1|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      1|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      1|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      1|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      1|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      1|        } \
  |  |   74|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3324|      1|    Py_DECREF(mod_name_or_unknown);
  ------------------
  |  |   80|      1|    do { \
  |  |   81|      1|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      1|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      1|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      1|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      1|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      1|            break; \
  |  |   85|      1|        } \
  |  |   86|      1|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3325|       |    return NULL;
 3326|      1|}
_PyEval_LazyImportFrom:
 3330|      2|{
 3331|      2|    assert(PyLazyImport_CheckExact(v));
  ------------------
  |  Branch (3331:5): [True: 2, False: 0]
  ------------------
 3332|      2|    assert(name);
  ------------------
  |  Branch (3332:5): [True: 2, False: 0]
  ------------------
 3333|      2|    assert(PyUnicode_Check(name));
  ------------------
  |  Branch (3333:5): [True: 2, False: 0]
  ------------------
 3334|      2|    PyObject *ret;
 3335|      2|    PyLazyImportObject *d = (PyLazyImportObject *)v;
 3336|      2|    PyObject *mod = NULL;
 3337|       |    // Only `from a import b` can take b off an already imported a;
 3338|       |    // `import a.b as c` has to import a.b first.
 3339|      2|    if (d->lz_attr != NULL && PyTuple_Check(d->lz_attr) &&
  ------------------
  |  |   27|      2|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3339:9): [True: 2, False: 0]
  ------------------
 3340|      2|        PyTuple_GET_SIZE(d->lz_attr) > 0) {
  ------------------
  |  |   27|      2|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3340:9): [True: 2, False: 0]
  ------------------
 3341|      2|        mod = PyImport_GetModule(d->lz_from);
 3342|      2|    }
 3343|      2|    if (mod != NULL) {
  ------------------
  |  Branch (3343:9): [True: 0, False: 2]
  ------------------
 3344|       |        // Check if the module already has the attribute, if so, resolve it
 3345|       |        // eagerly.
 3346|      0|        if (PyModule_Check(mod)) {
  ------------------
  |  |   12|      0|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3347|      0|            PyObject *mod_dict = PyModule_GetDict(mod);
 3348|      0|            if (mod_dict != NULL) {
  ------------------
  |  Branch (3348:17): [True: 0, False: 0]
  ------------------
 3349|      0|                if (PyDict_GetItemRef(mod_dict, name, &ret) < 0) {
  ------------------
  |  Branch (3349:21): [True: 0, False: 0]
  ------------------
 3350|      0|                    Py_DECREF(mod);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3351|      0|                    return NULL;
 3352|      0|                }
 3353|      0|                if (ret != NULL) {
  ------------------
  |  Branch (3353:21): [True: 0, False: 0]
  ------------------
 3354|      0|                    Py_DECREF(mod);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3355|      0|                    return ret;
 3356|      0|                }
 3357|      0|            }
 3358|      0|        }
 3359|      0|        Py_DECREF(mod);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3360|      0|    }
 3361|       |
 3362|      2|    return _PyLazyImport_New(frame, d->lz_builtins, v, name);
 3363|      2|}
_PyEval_CheckExceptTypeValid:
 3373|  38.8k|{
 3374|  38.8k|    if (PyTuple_Check(right)) {
  ------------------
  |  |   27|  38.8k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  38.8k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 1.23k, False: 37.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3375|  1.23k|        Py_ssize_t i, length;
 3376|  1.23k|        length = PyTuple_GET_SIZE(right);
  ------------------
  |  |   27|  1.23k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.23k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.23k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3377|  3.69k|        for (i = 0; i < length; i++) {
  ------------------
  |  Branch (3377:21): [True: 2.46k, False: 1.23k]
  ------------------
 3378|  2.46k|            PyObject *exc = PyTuple_GET_ITEM(right, i);
  ------------------
  |  |   29|  2.46k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.46k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3378:29): [True: 2.46k, False: 0]
  ------------------
 3379|  2.46k|            if (!PyExceptionClass_Check(exc)) {
  ------------------
  |  |   61|  2.46k|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|  4.92k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.46k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 2.46k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  2.46k|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|  2.46k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2.46k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3380|      0|                _PyErr_SetString(tstate, PyExc_TypeError,
 3381|      0|                    CANNOT_CATCH_MSG);
  ------------------
  |  | 3365|      0|#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
  |  | 3366|      0|                         "BaseException is not allowed"
  ------------------
 3382|      0|                return -1;
 3383|      0|            }
 3384|  2.46k|        }
 3385|  1.23k|    }
 3386|  37.6k|    else {
 3387|  37.6k|        if (!PyExceptionClass_Check(right)) {
  ------------------
  |  |   61|  37.6k|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|  75.2k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  37.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  37.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 37.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  37.6k|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|  37.6k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 37.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3388|      0|            _PyErr_SetString(tstate, PyExc_TypeError,
 3389|      0|                CANNOT_CATCH_MSG);
  ------------------
  |  | 3365|      0|#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
  |  | 3366|      0|                         "BaseException is not allowed"
  ------------------
 3390|      0|            return -1;
 3391|      0|        }
 3392|  37.6k|    }
 3393|  38.8k|    return 0;
 3394|  38.8k|}
_Py_Check_ArgsIterable:
 3435|     37|{
 3436|     37|    if (Py_TYPE(args)->tp_iter == NULL && !PySequence_Check(args)) {
  ------------------
  |  |  213|     37|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     37|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     37|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3436:9): [True: 0, False: 37]
  |  Branch (3436:43): [True: 0, False: 0]
  ------------------
 3437|      0|        _PyErr_Format(tstate, PyExc_TypeError,
 3438|      0|                      "Value after * must be an iterable, not %.200s",
 3439|      0|                      Py_TYPE(args)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3440|      0|        return -1;
 3441|      0|    }
 3442|     37|    return 0;
 3443|     37|}
_PyEval_FormatExcCheckArg:
 3482|      1|{
 3483|      1|    const char *obj_str;
 3484|       |
 3485|      1|    if (!obj)
  ------------------
  |  Branch (3485:9): [True: 0, False: 1]
  ------------------
 3486|      0|        return;
 3487|       |
 3488|      1|    obj_str = PyUnicode_AsUTF8(obj);
 3489|      1|    if (!obj_str)
  ------------------
  |  Branch (3489:9): [True: 0, False: 1]
  ------------------
 3490|      0|        return;
 3491|       |
 3492|      1|    _PyErr_Format(tstate, exc, format_str, obj_str);
 3493|       |
 3494|      1|    if (exc == PyExc_NameError) {
  ------------------
  |  Branch (3494:9): [True: 1, False: 0]
  ------------------
 3495|       |        // Include the name in the NameError exceptions to offer suggestions later.
 3496|      1|        PyObject *exc = PyErr_GetRaisedException();
 3497|      1|        if (PyErr_GivenExceptionMatches(exc, PyExc_NameError)) {
  ------------------
  |  Branch (3497:13): [True: 1, False: 0]
  ------------------
 3498|      1|            if (((PyNameErrorObject*)exc)->name == NULL) {
  ------------------
  |  Branch (3498:17): [True: 1, False: 0]
  ------------------
 3499|       |                // We do not care if this fails because we are going to restore the
 3500|       |                // NameError anyway.
 3501|      1|                (void)PyObject_SetAttr(exc, &_Py_ID(name), obj);
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3502|      1|            }
 3503|      1|        }
 3504|      1|        PyErr_SetRaisedException(exc);
 3505|      1|    }
 3506|      1|}
Py_EnterRecursiveCall:
 3579|  8.45M|{
 3580|  8.45M|    return _Py_EnterRecursiveCall(where);
 3581|  8.45M|}
Py_LeaveRecursiveCall:
 3584|  5.93M|{
 3585|  5.93M|    _Py_LeaveRecursiveCall();
 3586|  5.93M|}
_PyEval_LoadGlobalStackRef:
 3629|  12.9k|{
 3630|  12.9k|    if (PyAnyDict_CheckExact(globals) && PyAnyDict_CheckExact(builtins)) {
  ------------------
  |  |   41|  25.9k|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|  12.9k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  25.9k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  12.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  12.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 12.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyAnyDict_CheckExact(globals) && PyAnyDict_CheckExact(builtins)) {
  ------------------
  |  |   41|  12.9k|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|  12.9k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|  25.9k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  12.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  12.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 12.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|      0|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (65:5): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3631|  12.9k|        _PyDict_LoadGlobalStackRef((PyDictObject *)globals,
 3632|  12.9k|                                    (PyDictObject *)builtins,
 3633|  12.9k|                                    name, writeto);
 3634|  12.9k|        if (PyStackRef_IsNull(*writeto) && !PyErr_Occurred()) {
  ------------------
  |  |  482|  25.9k|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|  12.9k|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  12.9k|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 1, False: 12.9k]
  |  |  ------------------
  ------------------
  |  Branch (3634:44): [True: 1, False: 0]
  ------------------
 3635|       |            /* _PyDict_LoadGlobal() returns NULL without raising
 3636|       |                * an exception if the key doesn't exist */
 3637|      1|            _PyEval_FormatExcCheckArg(PyThreadState_GET(), PyExc_NameError,
  ------------------
  |  |   63|      1|#define PyThreadState_GET() PyThreadState_Get()
  ------------------
 3638|      1|                                        NAME_ERROR_MSG, name);
  ------------------
  |  |  405|      1|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  ------------------
 3639|      1|        }
 3640|  12.9k|    }
 3641|      0|    else {
 3642|       |        /* Slow-path if globals or builtins is not a dict */
 3643|       |        /* namespace 1: globals */
 3644|      0|        PyObject *res;
 3645|      0|        if (PyMapping_GetOptionalItem(globals, name, &res) < 0) {
  ------------------
  |  Branch (3645:13): [True: 0, False: 0]
  ------------------
 3646|      0|            *writeto = PyStackRef_NULL;
 3647|      0|            return;
 3648|      0|        }
 3649|      0|        if (res == NULL) {
  ------------------
  |  Branch (3649:13): [True: 0, False: 0]
  ------------------
 3650|       |            /* namespace 2: builtins */
 3651|      0|            if (PyMapping_GetOptionalItem(builtins, name, &res) < 0) {
  ------------------
  |  Branch (3651:17): [True: 0, False: 0]
  ------------------
 3652|      0|                *writeto = PyStackRef_NULL;
 3653|      0|                return;
 3654|      0|            }
 3655|      0|            if (res == NULL) {
  ------------------
  |  Branch (3655:17): [True: 0, False: 0]
  ------------------
 3656|      0|                _PyEval_FormatExcCheckArg(
 3657|      0|                            PyThreadState_GET(), PyExc_NameError,
  ------------------
  |  |   63|      0|#define PyThreadState_GET() PyThreadState_Get()
  ------------------
 3658|      0|                            NAME_ERROR_MSG, name);
  ------------------
  |  |  405|      0|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  ------------------
 3659|      0|                *writeto = PyStackRef_NULL;
 3660|      0|                return;
 3661|      0|            }
 3662|      0|        }
 3663|      0|        *writeto = PyStackRef_FromPyObjectSteal(res);
 3664|      0|    }
 3665|       |
 3666|  12.9k|    PyObject *res_o = PyStackRef_AsPyObjectBorrow(*writeto);
 3667|  12.9k|    if (res_o != NULL && PyLazyImport_CheckExact(res_o)) {
  ------------------
  |  |   15|  12.9k|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |   65|  12.9k|    (_PyObject_CAST(ob)->ob_type == (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (65:5): [True: 0, False: 12.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3667:9): [True: 12.9k, False: 1]
  ------------------
 3668|      0|        PyObject *l_v = _PyImport_LoadLazyImportTstate(PyThreadState_GET(), res_o);
  ------------------
  |  |   63|      0|#define PyThreadState_GET() PyThreadState_Get()
  ------------------
 3669|      0|        PyStackRef_CLOSE(writeto[0]);
 3670|      0|        if (l_v == NULL) {
  ------------------
  |  Branch (3670:13): [True: 0, False: 0]
  ------------------
 3671|      0|            assert(PyErr_Occurred());
  ------------------
  |  Branch (3671:13): [True: 0, False: 0]
  ------------------
 3672|      0|            *writeto = PyStackRef_NULL;
 3673|      0|            return;
 3674|      0|        }
 3675|      0|        int err = PyDict_SetItem(globals, name, l_v);
 3676|      0|        if (err < 0) {
  ------------------
  |  Branch (3676:13): [True: 0, False: 0]
  ------------------
 3677|      0|            Py_DECREF(l_v);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3678|      0|            *writeto = PyStackRef_NULL;
 3679|      0|            return;
 3680|      0|        }
 3681|      0|        *writeto = PyStackRef_FromPyObjectSteal(l_v);
 3682|      0|    }
 3683|  12.9k|}
_PyEval_LoadName:
 3711|  5.21k|{
 3712|       |
 3713|  5.21k|    PyObject *value;
 3714|  5.21k|    if (frame->f_locals == NULL) {
  ------------------
  |  Branch (3714:9): [True: 0, False: 5.21k]
  ------------------
 3715|      0|        _PyErr_SetString(tstate, PyExc_SystemError,
 3716|      0|                            "no locals found");
 3717|      0|        return NULL;
 3718|      0|    }
 3719|  5.21k|    if (PyMapping_GetOptionalItem(frame->f_locals, name, &value) < 0) {
  ------------------
  |  Branch (3719:9): [True: 0, False: 5.21k]
  ------------------
 3720|      0|        return NULL;
 3721|      0|    }
 3722|  5.21k|    if (value != NULL) {
  ------------------
  |  Branch (3722:9): [True: 3.59k, False: 1.62k]
  ------------------
 3723|  3.59k|        return value;
 3724|  3.59k|    }
 3725|  1.62k|    if (PyDict_GetItemRef(frame->f_globals, name, &value) < 0) {
  ------------------
  |  Branch (3725:9): [True: 0, False: 1.62k]
  ------------------
 3726|      0|        return NULL;
 3727|      0|    }
 3728|  1.62k|    if (value != NULL) {
  ------------------
  |  Branch (3728:9): [True: 912, False: 712]
  ------------------
 3729|    912|        return value;
 3730|    912|    }
 3731|    712|    if (PyMapping_GetOptionalItem(frame->f_builtins, name, &value) < 0) {
  ------------------
  |  Branch (3731:9): [True: 0, False: 712]
  ------------------
 3732|      0|        return NULL;
 3733|      0|    }
 3734|    712|    if (value == NULL) {
  ------------------
  |  Branch (3734:9): [True: 0, False: 712]
  ------------------
 3735|      0|        _PyEval_FormatExcCheckArg(
 3736|      0|                    tstate, PyExc_NameError,
 3737|      0|                    NAME_ERROR_MSG, name);
  ------------------
  |  |  405|      0|#define NAME_ERROR_MSG "name '%.200s' is not defined"
  ------------------
 3738|      0|    }
 3739|    712|    return value;
 3740|    712|}
_PyForIter_VirtualIteratorNext:
 3743|   660k|{
 3744|   660k|    PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
 3745|   660k|    _PyStackRef index = *index_ptr;
 3746|   660k|    if (PyStackRef_IsTaggedInt(index)) {
  ------------------
  |  Branch (3746:9): [True: 167, False: 660k]
  ------------------
 3747|    167|        intptr_t i = PyStackRef_UntagInt(index);
 3748|    167|        assert(i >= 0);
  ------------------
  |  Branch (3748:9): [True: 167, False: 0]
  ------------------
 3749|    167|        _PyObjectIndexPair next_index = Py_TYPE(iter_o)->_tp_iteritem(iter_o, i);
  ------------------
  |  |  213|    167|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    167|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    167|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3750|    167|        i = next_index.index;
 3751|    167|        PyObject *next = next_index.object;
 3752|    167|        if (next == NULL) {
  ------------------
  |  Branch (3752:13): [True: 25, False: 142]
  ------------------
 3753|     25|            return i < 0 ? PyStackRef_ERROR : PyStackRef_NULL;
  ------------------
  |  Branch (3753:20): [True: 0, False: 25]
  ------------------
 3754|     25|        }
 3755|    142|        *index_ptr = PyStackRef_TagInt(i);
 3756|    142|        return PyStackRef_FromPyObjectSteal(next);
 3757|    167|    }
 3758|   660k|    PyObject *next = (*Py_TYPE(iter_o)->tp_iternext)(iter_o);
  ------------------
  |  |  213|   660k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   660k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   660k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3759|   660k|    if (next == NULL) {
  ------------------
  |  Branch (3759:9): [True: 36.8k, False: 623k]
  ------------------
 3760|  36.8k|        if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (3760:13): [True: 0, False: 36.8k]
  ------------------
 3761|      0|            if (_PyErr_ExceptionMatches(tstate, PyExc_StopIteration)) {
  ------------------
  |  Branch (3761:17): [True: 0, False: 0]
  ------------------
 3762|      0|                _PyEval_MonitorRaise(tstate, frame, frame->instr_ptr);
 3763|      0|                _PyErr_Clear(tstate);
 3764|      0|            }
 3765|      0|            else {
 3766|      0|                return PyStackRef_ERROR;
 3767|      0|            }
 3768|      0|        }
 3769|  36.8k|        return PyStackRef_NULL;
 3770|  36.8k|    }
 3771|   623k|    return PyStackRef_FromPyObjectSteal(next);
 3772|   660k|}
ceval.c:hardware_stack_limits:
  128|      2|{
  129|       |#ifdef WIN32
  130|       |    ULONG_PTR low, high;
  131|       |    GetCurrentThreadStackLimits(&low, &high);
  132|       |    *top = (uintptr_t)high;
  133|       |    ULONG guarantee = 0;
  134|       |#ifdef MS_WINDOWS_DESKTOP
  135|       |    SetThreadStackGuarantee(&guarantee);
  136|       |#endif
  137|       |    *base = (uintptr_t)low + guarantee;
  138|       |#elif defined(__APPLE__)
  139|       |    pthread_t this_thread = pthread_self();
  140|       |    void *stack_addr = pthread_get_stackaddr_np(this_thread); // top of the stack
  141|       |    size_t stack_size = pthread_get_stacksize_np(this_thread);
  142|       |    *top = (uintptr_t)stack_addr;
  143|       |    *base = ((uintptr_t)stack_addr) - stack_size;
  144|       |#else
  145|       |    /// XXX musl supports HAVE_PTHRED_GETATTR_NP, but the resulting stack size
  146|       |    /// (on alpine at least) is much smaller than expected and imposes undue limits
  147|       |    /// compared to the old stack size estimation.  (We assume musl is not glibc.)
  148|      2|#  if defined(HAVE_PTHREAD_GETATTR_NP) && !defined(_AIX) && \
  149|      2|        !defined(__NetBSD__) && (defined(__GLIBC__) || !defined(__linux__))
  150|      2|    size_t stack_size, guard_size;
  151|      2|    void *stack_addr;
  152|      2|    pthread_attr_t attr;
  153|      2|    int err = pthread_getattr_np(pthread_self(), &attr);
  154|      2|    if (err == 0) {
  ------------------
  |  Branch (154:9): [True: 2, False: 0]
  ------------------
  155|      2|        err = pthread_attr_getguardsize(&attr, &guard_size);
  156|      2|        err |= pthread_attr_getstack(&attr, &stack_addr, &stack_size);
  157|      2|        err |= pthread_attr_destroy(&attr);
  158|      2|    }
  159|      2|    if (err == 0) {
  ------------------
  |  Branch (159:9): [True: 2, False: 0]
  ------------------
  160|      2|        *base = ((uintptr_t)stack_addr) + guard_size;
  161|      2|        *top = (uintptr_t)stack_addr + stack_size;
  162|      2|        return;
  163|      2|    }
  164|      0|#  endif
  165|       |    // Add some space for caller function then round to minimum page size
  166|       |    // This is a guess at the top of the stack, but should be a reasonably
  167|       |    // good guess if called from _PyThreadState_Attach when creating a thread.
  168|       |    // If the thread is attached deep in a call stack, then the guess will be poor.
  169|      0|#if _Py_STACK_GROWS_DOWN
  170|      0|    uintptr_t top_addr = _Py_SIZE_ROUND_UP(sp + 8*sizeof(void*), SYSTEM_PAGE_SIZE);
  ------------------
  |  |  238|      0|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|      0|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
  171|      0|    *top = top_addr;
  172|      0|    *base = top_addr - Py_C_STACK_SIZE;
  ------------------
  |  |   65|      0|#  define Py_C_STACK_SIZE 4000000
  ------------------
  173|       |#  else
  174|       |    uintptr_t base_addr = _Py_SIZE_ROUND_DOWN(sp - 8*sizeof(void*), SYSTEM_PAGE_SIZE);
  175|       |    *base = base_addr;
  176|       |    *top = base_addr + Py_C_STACK_SIZE;
  177|       |#endif
  178|      0|#endif
  179|      0|}
ceval.c:tstate_set_stack:
  184|      2|{
  185|      2|    assert(base < top);
  ------------------
  |  Branch (185:5): [True: 2, False: 0]
  ------------------
  186|      2|    assert((top - base) >= _PyOS_MIN_STACK_SIZE);
  ------------------
  |  Branch (186:5): [True: 2, False: 0]
  ------------------
  187|       |
  188|       |#ifdef _Py_THREAD_SANITIZER
  189|       |    // Thread sanitizer crashes if we use more than half the stack.
  190|       |    uintptr_t stacksize = top - base;
  191|       |#  if _Py_STACK_GROWS_DOWN
  192|       |    base += stacksize/2;
  193|       |#  else
  194|       |    top -= stacksize/2;
  195|       |#  endif
  196|       |#endif
  197|      2|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  198|      2|#if _Py_STACK_GROWS_DOWN
  199|      2|    _tstate->c_stack_top = top;
  200|      2|    _tstate->c_stack_hard_limit = base + _PyOS_STACK_MARGIN_BYTES;
  ------------------
  |  |   57|      2|#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *))
  |  |  ------------------
  |  |  |  |   56|      2|#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#  define _PyOS_LOG2_STACK_MARGIN 11
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|      2|    _tstate->c_stack_soft_limit = base + _PyOS_STACK_MARGIN_BYTES * 2;
  ------------------
  |  |   57|      2|#define _PyOS_STACK_MARGIN_BYTES (_PyOS_STACK_MARGIN * sizeof(void *))
  |  |  ------------------
  |  |  |  |   56|      2|#define _PyOS_STACK_MARGIN (1 << _PyOS_LOG2_STACK_MARGIN)
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#  define _PyOS_LOG2_STACK_MARGIN 11
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  202|      2|#  ifndef NDEBUG
  203|       |    // Sanity checks
  204|      2|    _PyThreadStateImpl *ts = (_PyThreadStateImpl *)tstate;
  205|      2|    assert(ts->c_stack_hard_limit <= ts->c_stack_soft_limit);
  ------------------
  |  Branch (205:5): [True: 2, False: 0]
  ------------------
  206|      2|    assert(ts->c_stack_soft_limit < ts->c_stack_top);
  ------------------
  |  Branch (206:5): [True: 2, False: 0]
  ------------------
  207|      2|#  endif
  208|       |#else
  209|       |    _tstate->c_stack_top = base;
  210|       |    _tstate->c_stack_hard_limit = top - _PyOS_STACK_MARGIN_BYTES;
  211|       |    _tstate->c_stack_soft_limit = top - _PyOS_STACK_MARGIN_BYTES * 2;
  212|       |#  ifndef NDEBUG
  213|       |    // Sanity checks
  214|       |    _PyThreadStateImpl *ts = (_PyThreadStateImpl *)tstate;
  215|       |    assert(ts->c_stack_hard_limit >= ts->c_stack_soft_limit);
  216|       |    assert(ts->c_stack_soft_limit > ts->c_stack_top);
  217|       |#  endif
  218|       |#endif
  219|      2|}
ceval.c:clear_thread_frame:
 1980|  6.66M|{
 1981|  6.66M|    assert(frame->owner == FRAME_OWNED_BY_THREAD);
  ------------------
  |  Branch (1981:5): [True: 6.66M, False: 0]
  ------------------
 1982|       |    // Make sure that this is, indeed, the top frame. We can't check this in
 1983|       |    // _PyThreadState_PopFrame, since f_code is already cleared at that point:
 1984|  6.66M|    assert((PyObject **)frame + _PyFrame_GetCode(frame)->co_framesize ==
  ------------------
  |  Branch (1984:5): [True: 6.66M, False: 0]
  ------------------
 1985|  6.66M|        tstate->datastack_top);
 1986|  6.66M|    assert(frame->frame_obj == NULL || frame->frame_obj->f_frame == frame);
  ------------------
  |  Branch (1986:5): [True: 6.63M, False: 23.1k]
  |  Branch (1986:5): [True: 23.1k, False: 0]
  ------------------
 1987|  6.66M|    _PyFrame_ClearExceptCode(frame);
 1988|  6.66M|    PyStackRef_CLEAR(frame->f_executable);
  ------------------
  |  |  732|  6.66M|    do { \
  |  |  733|  6.66M|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  6.66M|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  6.66M|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  6.66M|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  6.66M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 6.66M]
  |  |  ------------------
  ------------------
 1989|  6.66M|    _PyThreadState_PopFrame(tstate, frame);
 1990|  6.66M|}
ceval.c:clear_gen_frame:
 1994|  1.23k|{
 1995|  1.23k|    assert(frame->owner == FRAME_OWNED_BY_GENERATOR);
  ------------------
  |  Branch (1995:5): [True: 1.23k, False: 0]
  ------------------
 1996|  1.23k|    PyGenObject *gen = _PyGen_GetGeneratorFromFrame(frame);
 1997|  1.23k|    FT_ATOMIC_STORE_INT8_RELEASE(gen->gi_frame_state, FRAME_CLEARED);
  ------------------
  |  |  167|  1.23k|#define FT_ATOMIC_STORE_INT8_RELEASE(value, new_value) value = new_value
  ------------------
 1998|  1.23k|    assert(tstate->exc_info == &gen->gi_exc_state);
  ------------------
  |  Branch (1998:5): [True: 1.23k, False: 0]
  ------------------
 1999|  1.23k|    tstate->exc_info = gen->gi_exc_state.previous_item;
 2000|  1.23k|    gen->gi_exc_state.previous_item = NULL;
 2001|  1.23k|    frame->previous = NULL;
 2002|  1.23k|    Py_BEGIN_CRITICAL_SECTION(gen);
  ------------------
  |  |   51|  1.23k|    {
  ------------------
 2003|  1.23k|    assert(frame->frame_obj == NULL || frame->frame_obj->f_frame == frame);
  ------------------
  |  Branch (2003:5): [True: 1.23k, False: 0]
  |  Branch (2003:5): [True: 0, False: 0]
  ------------------
 2004|  1.23k|    _PyFrame_ClearExceptCode(frame);
 2005|  1.23k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  1.23k|    }
  ------------------
 2006|  1.23k|    _PyErr_ClearExcState(&gen->gi_exc_state);
 2007|       |    // gh-143939: There must not be any escaping calls between setting
 2008|       |    // the generator return kind and returning from _PyEval_EvalFrame.
 2009|  1.23k|    ((_PyThreadStateImpl *)tstate)->generator_return_kind = GENERATOR_RETURN;
 2010|  1.23k|}
ceval.c:initialize_locals:
 1733|   201k|{
 1734|   201k|    PyCodeObject *co = (PyCodeObject*)func->func_code;
 1735|   201k|    const Py_ssize_t total_args = co->co_argcount + co->co_kwonlyargcount;
 1736|       |    /* Create a dictionary for keyword parameters (**kwags) */
 1737|   201k|    PyObject *kwdict;
 1738|   201k|    Py_ssize_t i;
 1739|   201k|    if (co->co_flags & CO_VARKEYWORDS) {
  ------------------
  |  |  125|   201k|#define CO_VARKEYWORDS  0x0008
  ------------------
  |  Branch (1739:9): [True: 1.41k, False: 199k]
  ------------------
 1740|  1.41k|        kwdict = PyDict_New();
 1741|  1.41k|        if (kwdict == NULL) {
  ------------------
  |  Branch (1741:13): [True: 0, False: 1.41k]
  ------------------
 1742|      0|            goto fail_pre_positional;
 1743|      0|        }
 1744|  1.41k|        i = total_args;
 1745|  1.41k|        if (co->co_flags & CO_VARARGS) {
  ------------------
  |  |  124|  1.41k|#define CO_VARARGS      0x0004
  ------------------
  |  Branch (1745:13): [True: 1.31k, False: 94]
  ------------------
 1746|  1.31k|            i++;
 1747|  1.31k|        }
 1748|  1.41k|        assert(PyStackRef_IsNull(localsplus[i]));
  ------------------
  |  Branch (1748:9): [True: 1.41k, False: 0]
  ------------------
 1749|  1.41k|        localsplus[i] = PyStackRef_FromPyObjectSteal(kwdict);
 1750|  1.41k|    }
 1751|   199k|    else {
 1752|   199k|        kwdict = NULL;
 1753|   199k|    }
 1754|       |
 1755|       |    /* Copy all positional arguments into local variables */
 1756|   201k|    Py_ssize_t j, n;
 1757|   201k|    if (argcount > co->co_argcount) {
  ------------------
  |  Branch (1757:9): [True: 6.38k, False: 194k]
  ------------------
 1758|  6.38k|        n = co->co_argcount;
 1759|  6.38k|    }
 1760|   194k|    else {
 1761|   194k|        n = argcount;
 1762|   194k|    }
 1763|   835k|    for (j = 0; j < n; j++) {
  ------------------
  |  Branch (1763:17): [True: 634k, False: 201k]
  ------------------
 1764|   634k|        assert(PyStackRef_IsNull(localsplus[j]));
  ------------------
  |  Branch (1764:9): [True: 634k, False: 0]
  ------------------
 1765|   634k|        localsplus[j] = args[j];
 1766|   634k|    }
 1767|       |
 1768|       |    /* Pack other positional arguments into the *args argument */
 1769|   201k|    if (co->co_flags & CO_VARARGS) {
  ------------------
  |  |  124|   201k|#define CO_VARARGS      0x0004
  ------------------
  |  Branch (1769:9): [True: 6.49k, False: 194k]
  ------------------
 1770|  6.49k|        PyObject *u = NULL;
 1771|  6.49k|        if (argcount == n) {
  ------------------
  |  Branch (1771:13): [True: 110, False: 6.38k]
  ------------------
 1772|    110|            u = (PyObject *)&_Py_SINGLETON(tuple_empty);
  ------------------
  |  |   18|    110|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|    110|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
 1773|    110|        }
 1774|  6.38k|        else {
 1775|  6.38k|            u = _PyTuple_FromStackRefStealOnSuccess(args + n, argcount - n);
 1776|  6.38k|            if (u == NULL) {
  ------------------
  |  Branch (1776:17): [True: 0, False: 6.38k]
  ------------------
 1777|      0|                for (Py_ssize_t i = n; i < argcount; i++) {
  ------------------
  |  Branch (1777:40): [True: 0, False: 0]
  ------------------
 1778|      0|                    PyStackRef_CLOSE(args[i]);
 1779|      0|                }
 1780|      0|            }
 1781|  6.38k|        }
 1782|  6.49k|        if (u == NULL) {
  ------------------
  |  Branch (1782:13): [True: 0, False: 6.49k]
  ------------------
 1783|      0|            goto fail_post_positional;
 1784|      0|        }
 1785|  6.49k|        assert(PyStackRef_AsPyObjectBorrow(localsplus[total_args]) == NULL);
  ------------------
  |  Branch (1785:9): [True: 6.49k, False: 0]
  ------------------
 1786|  6.49k|        localsplus[total_args] = PyStackRef_FromPyObjectSteal(u);
 1787|  6.49k|    }
 1788|   194k|    else if (argcount > n) {
  ------------------
  |  Branch (1788:14): [True: 0, False: 194k]
  ------------------
 1789|       |        /* Too many positional args. Error is reported later */
 1790|      0|        for (j = n; j < argcount; j++) {
  ------------------
  |  Branch (1790:21): [True: 0, False: 0]
  ------------------
 1791|      0|            PyStackRef_CLOSE(args[j]);
 1792|      0|        }
 1793|      0|    }
 1794|       |
 1795|       |    /* Handle keyword arguments */
 1796|   201k|    if (kwnames != NULL) {
  ------------------
  |  Branch (1796:9): [True: 3.20k, False: 197k]
  ------------------
 1797|  3.20k|        Py_ssize_t kwcount = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|  3.20k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.20k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.20k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1798|  7.77k|        for (i = 0; i < kwcount; i++) {
  ------------------
  |  Branch (1798:21): [True: 4.57k, False: 3.20k]
  ------------------
 1799|  4.57k|            PyObject **co_varnames;
 1800|  4.57k|            PyObject *keyword = PyTuple_GET_ITEM(kwnames, i);
  ------------------
  |  |   29|  4.57k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  4.57k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.57k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1800:33): [True: 4.57k, False: 0]
  ------------------
 1801|      0|            _PyStackRef value_stackref = args[i+argcount];
 1802|  4.57k|            Py_ssize_t j;
 1803|       |
 1804|  4.57k|            if (keyword == NULL || !PyUnicode_Check(keyword)) {
  ------------------
  |  |  103|  4.57k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  4.57k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1804:17): [True: 0, False: 4.57k]
  |  Branch (1804:36): [True: 0, False: 4.57k]
  ------------------
 1805|      0|                _PyErr_Format(tstate, PyExc_TypeError,
 1806|      0|                            "%U() keywords must be strings",
 1807|      0|                          func->func_qualname);
 1808|      0|                goto kw_fail;
 1809|      0|            }
 1810|       |
 1811|       |            /* Speed hack: do raw pointer compares. As names are
 1812|       |            normally interned this should almost always hit. */
 1813|  4.57k|            co_varnames = ((PyTupleObject *)(co->co_localsplusnames))->ob_item;
 1814|  14.5k|            for (j = co->co_posonlyargcount; j < total_args; j++) {
  ------------------
  |  Branch (1814:46): [True: 14.5k, False: 2]
  ------------------
 1815|  14.5k|                PyObject *varname = co_varnames[j];
 1816|  14.5k|                if (varname == keyword) {
  ------------------
  |  Branch (1816:21): [True: 4.57k, False: 9.96k]
  ------------------
 1817|  4.57k|                    goto kw_found;
 1818|  4.57k|                }
 1819|  14.5k|            }
 1820|       |
 1821|       |            /* Slow fallback, just in case */
 1822|      8|            for (j = co->co_posonlyargcount; j < total_args; j++) {
  ------------------
  |  Branch (1822:46): [True: 6, False: 2]
  ------------------
 1823|      6|                PyObject *varname = co_varnames[j];
 1824|      6|                int cmp = PyObject_RichCompareBool( keyword, varname, Py_EQ);
  ------------------
  |  |  654|      6|#define Py_EQ 2
  ------------------
 1825|      6|                if (cmp > 0) {
  ------------------
  |  Branch (1825:21): [True: 0, False: 6]
  ------------------
 1826|      0|                    goto kw_found;
 1827|      0|                }
 1828|      6|                else if (cmp < 0) {
  ------------------
  |  Branch (1828:26): [True: 0, False: 6]
  ------------------
 1829|      0|                    goto kw_fail;
 1830|      0|                }
 1831|      6|            }
 1832|       |
 1833|      2|            assert(j >= total_args);
  ------------------
  |  Branch (1833:13): [True: 2, False: 0]
  ------------------
 1834|      2|            if (kwdict == NULL) {
  ------------------
  |  Branch (1834:17): [True: 0, False: 2]
  ------------------
 1835|       |
 1836|      0|                if (co->co_posonlyargcount
  ------------------
  |  Branch (1836:21): [True: 0, False: 0]
  ------------------
 1837|      0|                    && positional_only_passed_as_keyword(tstate, co,
  ------------------
  |  Branch (1837:24): [True: 0, False: 0]
  ------------------
 1838|      0|                                                        kwcount, kwnames,
 1839|      0|                                                        func->func_qualname))
 1840|      0|                {
 1841|      0|                    goto kw_fail;
 1842|      0|                }
 1843|       |
 1844|      0|                PyObject* suggestion_keyword = NULL;
 1845|      0|                if (total_args > co->co_posonlyargcount) {
  ------------------
  |  Branch (1845:21): [True: 0, False: 0]
  ------------------
 1846|      0|                    PyObject* possible_keywords = PyList_New(total_args - co->co_posonlyargcount);
 1847|       |
 1848|      0|                    if (!possible_keywords) {
  ------------------
  |  Branch (1848:25): [True: 0, False: 0]
  ------------------
 1849|      0|                        PyErr_Clear();
 1850|      0|                    } else {
 1851|      0|                        for (Py_ssize_t k = co->co_posonlyargcount; k < total_args; k++) {
  ------------------
  |  Branch (1851:69): [True: 0, False: 0]
  ------------------
 1852|      0|                            PyList_SET_ITEM(possible_keywords, k - co->co_posonlyargcount, co_varnames[k]);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1853|      0|                        }
 1854|       |
 1855|      0|                        suggestion_keyword = _Py_CalculateSuggestions(possible_keywords, keyword);
 1856|      0|                        Py_DECREF(possible_keywords);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1857|      0|                    }
 1858|      0|                }
 1859|       |
 1860|      0|                if (suggestion_keyword) {
  ------------------
  |  Branch (1860:21): [True: 0, False: 0]
  ------------------
 1861|      0|                    _PyErr_Format(tstate, PyExc_TypeError,
 1862|      0|                                "%U() got an unexpected keyword argument '%S'. Did you mean '%S'?",
 1863|      0|                                func->func_qualname, keyword, suggestion_keyword);
 1864|      0|                    Py_DECREF(suggestion_keyword);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1865|      0|                } else {
 1866|      0|                    _PyErr_Format(tstate, PyExc_TypeError,
 1867|      0|                                "%U() got an unexpected keyword argument '%S'",
 1868|      0|                                func->func_qualname, keyword);
 1869|      0|                }
 1870|       |
 1871|      0|                goto kw_fail;
 1872|      0|            }
 1873|       |
 1874|      2|            if (PyDict_SetItem(kwdict, keyword, PyStackRef_AsPyObjectBorrow(value_stackref)) == -1) {
  ------------------
  |  Branch (1874:17): [True: 0, False: 2]
  ------------------
 1875|      0|                goto kw_fail;
 1876|      0|            }
 1877|      2|            PyStackRef_CLOSE(value_stackref);
 1878|      2|            continue;
 1879|       |
 1880|      0|        kw_fail:
 1881|      0|            for (;i < kwcount; i++) {
  ------------------
  |  Branch (1881:19): [True: 0, False: 0]
  ------------------
 1882|      0|                PyStackRef_CLOSE(args[i+argcount]);
 1883|      0|            }
 1884|      0|            goto fail_post_args;
 1885|       |
 1886|  4.57k|        kw_found:
 1887|  4.57k|            if (PyStackRef_AsPyObjectBorrow(localsplus[j]) != NULL) {
  ------------------
  |  Branch (1887:17): [True: 0, False: 4.57k]
  ------------------
 1888|      0|                _PyErr_Format(tstate, PyExc_TypeError,
 1889|      0|                            "%U() got multiple values for argument '%S'",
 1890|      0|                          func->func_qualname, keyword);
 1891|      0|                goto kw_fail;
 1892|      0|            }
 1893|  4.57k|            localsplus[j] = value_stackref;
 1894|  4.57k|        }
 1895|  3.20k|    }
 1896|       |
 1897|       |    /* Check the number of positional arguments */
 1898|   201k|    if ((argcount > co->co_argcount) && !(co->co_flags & CO_VARARGS)) {
  ------------------
  |  |  124|  6.38k|#define CO_VARARGS      0x0004
  ------------------
  |  Branch (1898:9): [True: 6.38k, False: 194k]
  |  Branch (1898:41): [True: 0, False: 6.38k]
  ------------------
 1899|      0|        too_many_positional(tstate, co, argcount, func->func_defaults, localsplus,
 1900|      0|                            func->func_qualname);
 1901|      0|        goto fail_post_args;
 1902|      0|    }
 1903|       |
 1904|       |    /* Add missing positional arguments (copy default values from defs) */
 1905|   201k|    if (argcount < co->co_argcount) {
  ------------------
  |  Branch (1905:9): [True: 137k, False: 63.8k]
  ------------------
 1906|   137k|        Py_ssize_t defcount = func->func_defaults == NULL ? 0 : PyTuple_GET_SIZE(func->func_defaults);
  ------------------
  |  |   27|   137k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   137k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1906:31): [True: 0, False: 137k]
  ------------------
 1907|   137k|        Py_ssize_t m = co->co_argcount - defcount;
 1908|   137k|        Py_ssize_t missing = 0;
 1909|   137k|        for (i = argcount; i < m; i++) {
  ------------------
  |  Branch (1909:28): [True: 307, False: 137k]
  ------------------
 1910|    307|            if (PyStackRef_IsNull(localsplus[i])) {
  ------------------
  |  |  482|    307|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|    307|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    307|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 307]
  |  |  ------------------
  ------------------
 1911|      0|                missing++;
 1912|      0|            }
 1913|    307|        }
 1914|   137k|        if (missing) {
  ------------------
  |  Branch (1914:13): [True: 0, False: 137k]
  ------------------
 1915|      0|            missing_arguments(tstate, co, missing, defcount, localsplus,
 1916|      0|                              func->func_qualname);
 1917|      0|            goto fail_post_args;
 1918|      0|        }
 1919|   137k|        if (n > m)
  ------------------
  |  Branch (1919:13): [True: 48.5k, False: 88.8k]
  ------------------
 1920|  48.5k|            i = n - m;
 1921|  88.8k|        else
 1922|  88.8k|            i = 0;
 1923|   137k|        if (defcount) {
  ------------------
  |  Branch (1923:13): [True: 137k, False: 0]
  ------------------
 1924|   137k|            PyObject **defs = &PyTuple_GET_ITEM(func->func_defaults, 0);
  ------------------
  |  |   29|   137k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   137k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1924:32): [True: 137k, False: 0]
  ------------------
 1925|   275k|            for (; i < defcount; i++) {
  ------------------
  |  Branch (1925:20): [True: 138k, False: 137k]
  ------------------
 1926|   138k|                if (PyStackRef_AsPyObjectBorrow(localsplus[m+i]) == NULL) {
  ------------------
  |  Branch (1926:21): [True: 137k, False: 1.06k]
  ------------------
 1927|   137k|                    PyObject *def = defs[i];
 1928|   137k|                    localsplus[m+i] = PyStackRef_FromPyObjectNew(def);
  ------------------
  |  |  611|   137k|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   137k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   137k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1929|   137k|                }
 1930|   138k|            }
 1931|   137k|        }
 1932|   137k|    }
 1933|       |
 1934|       |    /* Add missing keyword arguments (copy default values from kwdefs) */
 1935|   201k|    if (co->co_kwonlyargcount > 0) {
  ------------------
  |  Branch (1935:9): [True: 4.43k, False: 196k]
  ------------------
 1936|  4.43k|        Py_ssize_t missing = 0;
 1937|  10.0k|        for (i = co->co_argcount; i < total_args; i++) {
  ------------------
  |  Branch (1937:35): [True: 5.66k, False: 4.43k]
  ------------------
 1938|  5.66k|            if (PyStackRef_AsPyObjectBorrow(localsplus[i]) != NULL)
  ------------------
  |  Branch (1938:17): [True: 3.20k, False: 2.46k]
  ------------------
 1939|  3.20k|                continue;
 1940|  2.46k|            PyObject *varname = PyTuple_GET_ITEM(co->co_localsplusnames, i);
  ------------------
  |  |   29|  2.46k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.46k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.46k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1940:33): [True: 2.46k, False: 0]
  ------------------
 1941|  2.46k|            if (func->func_kwdefaults != NULL) {
  ------------------
  |  Branch (1941:17): [True: 2.46k, False: 0]
  ------------------
 1942|  2.46k|                PyObject *def;
 1943|  2.46k|                if (PyDict_GetItemRef(func->func_kwdefaults, varname, &def) < 0) {
  ------------------
  |  Branch (1943:21): [True: 0, False: 2.46k]
  ------------------
 1944|      0|                    goto fail_post_args;
 1945|      0|                }
 1946|  2.46k|                if (def) {
  ------------------
  |  Branch (1946:21): [True: 2.46k, False: 0]
  ------------------
 1947|  2.46k|                    localsplus[i] = PyStackRef_FromPyObjectSteal(def);
 1948|  2.46k|                    continue;
 1949|  2.46k|                }
 1950|  2.46k|            }
 1951|      0|            missing++;
 1952|      0|        }
 1953|  4.43k|        if (missing) {
  ------------------
  |  Branch (1953:13): [True: 0, False: 4.43k]
  ------------------
 1954|      0|            missing_arguments(tstate, co, missing, -1, localsplus,
 1955|      0|                              func->func_qualname);
 1956|      0|            goto fail_post_args;
 1957|      0|        }
 1958|  4.43k|    }
 1959|   201k|    return 0;
 1960|       |
 1961|      0|fail_pre_positional:
 1962|      0|    for (j = 0; j < argcount; j++) {
  ------------------
  |  Branch (1962:17): [True: 0, False: 0]
  ------------------
 1963|      0|        PyStackRef_CLOSE(args[j]);
 1964|      0|    }
 1965|       |    /* fall through */
 1966|      0|fail_post_positional:
 1967|      0|    if (kwnames) {
  ------------------
  |  Branch (1967:9): [True: 0, False: 0]
  ------------------
 1968|      0|        Py_ssize_t kwcount = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1969|      0|        for (j = argcount; j < argcount+kwcount; j++) {
  ------------------
  |  Branch (1969:28): [True: 0, False: 0]
  ------------------
 1970|      0|            PyStackRef_CLOSE(args[j]);
 1971|      0|        }
 1972|      0|    }
 1973|       |    /* fall through */
 1974|      0|fail_post_args:
 1975|      0|    return -1;
 1976|      0|}
ceval.c:_PyEval_GetGlobals:
 2740|  51.8k|{
 2741|  51.8k|    _PyInterpreterFrame *current_frame = _PyThreadState_GetFrame(tstate);
 2742|  51.8k|    if (current_frame == NULL) {
  ------------------
  |  Branch (2742:9): [True: 51.6k, False: 156]
  ------------------
 2743|  51.6k|        return NULL;
 2744|  51.6k|    }
 2745|    156|    return current_frame->f_globals;
 2746|  51.8k|}
ceval.c:get_globals_builtins:
 2773|  51.7k|{
 2774|  51.7k|    PyObject *builtins = NULL;
 2775|  51.7k|    if (PyAnyDict_Check(globals)) {
  ------------------
  |  |   43|  51.7k|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|  51.7k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|   103k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 51.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2776|  51.7k|        if (PyDict_GetItemRef(globals, &_Py_ID(__builtins__), &builtins) < 0) {
  ------------------
  |  |  936|  51.7k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  51.7k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  51.7k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2776:13): [True: 0, False: 51.7k]
  ------------------
 2777|      0|            return NULL;
 2778|      0|        }
 2779|  51.7k|    }
 2780|      0|    else {
 2781|      0|        if (PyMapping_GetOptionalItem(
  ------------------
  |  Branch (2781:13): [True: 0, False: 0]
  ------------------
 2782|      0|                        globals, &_Py_ID(__builtins__), &builtins) < 0)
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2783|      0|        {
 2784|      0|            return NULL;
 2785|      0|        }
 2786|      0|    }
 2787|  51.7k|    return builtins;
 2788|  51.7k|}
ceval.c:set_globals_builtins:
 2792|  51.7k|{
 2793|  51.7k|    if (PyDict_Check(globals)) {
  ------------------
  |  |   18|  51.7k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  51.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 51.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2794|  51.7k|        if (PyDict_SetItem(globals, &_Py_ID(__builtins__), builtins) < 0) {
  ------------------
  |  |  936|  51.7k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  51.7k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  51.7k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2794:13): [True: 0, False: 51.7k]
  ------------------
 2795|      0|            return -1;
 2796|      0|        }
 2797|  51.7k|    }
 2798|      0|    else {
 2799|      0|        if (PyObject_SetItem(globals, &_Py_ID(__builtins__), builtins) < 0) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2799:13): [True: 0, False: 0]
  ------------------
 2800|      0|            if (PyFrozenDict_Check(globals)) {
  ------------------
  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2801|      0|                PyErr_SetString(PyExc_TypeError,
 2802|      0|                                "cannot assign __builtins__ to frozendict globals");
 2803|      0|            }
 2804|      0|            return -1;
 2805|      0|        }
 2806|      0|    }
 2807|  51.7k|    return 0;
 2808|  51.7k|}
ceval.c:is_lazy_import_module_level:
 3084|    262|{
 3085|    262|    _PyInterpreterFrame *frame = _PyEval_GetFrame();
 3086|    262|    return frame != NULL && frame->f_globals == frame->f_locals;
  ------------------
  |  Branch (3086:12): [True: 262, False: 0]
  |  Branch (3086:29): [True: 262, False: 0]
  ------------------
 3087|    262|}
ceval.c:check_lazy_import_compatibility:
 3047|    262|{
 3048|       |     // Check if this module should be imported lazily due to
 3049|       |     // the compatibility mode support via __lazy_modules__.
 3050|    262|    PyObject *lazy_modules = NULL;
 3051|    262|    PyObject *abs_name = NULL;
 3052|    262|    int res = -1;
 3053|       |
 3054|    262|    if (globals != NULL &&
  ------------------
  |  Branch (3054:9): [True: 262, False: 0]
  ------------------
 3055|    262|        PyMapping_GetOptionalItem(globals, &_Py_ID(__lazy_modules__),
  ------------------
  |  |  936|    262|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    262|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    262|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3055:9): [True: 0, False: 262]
  ------------------
 3056|    262|                                  &lazy_modules) < 0)
 3057|      0|    {
 3058|      0|        return -1;
 3059|      0|    }
 3060|    262|    if (lazy_modules == NULL) {
  ------------------
  |  Branch (3060:9): [True: 262, False: 0]
  ------------------
 3061|    262|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (3061:9): [True: 262, False: 0]
  ------------------
 3062|    262|        return 0;
 3063|    262|    }
 3064|       |
 3065|      0|    int ilevel = PyLong_AsInt(level);
 3066|      0|    if (ilevel == -1 && _PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (3066:9): [True: 0, False: 0]
  |  Branch (3066:25): [True: 0, False: 0]
  ------------------
 3067|      0|        goto error;
 3068|      0|    }
 3069|       |
 3070|      0|    abs_name = _PyImport_GetAbsName(tstate, name, globals, ilevel);
 3071|      0|    if (abs_name == NULL) {
  ------------------
  |  Branch (3071:9): [True: 0, False: 0]
  ------------------
 3072|      0|        goto error;
 3073|      0|    }
 3074|       |
 3075|      0|    res = PySequence_Contains(lazy_modules, abs_name);
 3076|      0|error:
 3077|      0|    Py_XDECREF(abs_name);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3078|       |    Py_XDECREF(lazy_modules);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3079|      0|    return res;
 3080|      0|}

ceval.c:check_invalid_reentrancy:
  142|   192k|{
  143|       |#if defined(Py_DEBUG) && defined(Py_GIL_DISABLED)
  144|       |    // In the free-threaded build, the interpreter must not be re-entered if
  145|       |    // the world-is-stopped.  If so, that's a bug somewhere (quite likely in
  146|       |    // the painfully complex typeobject code).
  147|       |    PyInterpreterState *interp = _PyInterpreterState_GET();
  148|       |    assert(!interp->stoptheworld.world_stopped);
  149|       |#endif
  150|   192k|}
ceval.c:monitor_reraise:
  405|  3.42k|{
  406|  3.42k|    if (no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_RERAISE)) {
  ------------------
  |  |   36|  3.42k|#define PY_MONITORING_EVENT_RERAISE 15
  ------------------
  |  Branch (406:9): [True: 3.42k, False: 0]
  ------------------
  407|  3.42k|        return;
  408|  3.42k|    }
  409|      0|    do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_RERAISE);
  ------------------
  |  |   36|      0|#define PY_MONITORING_EVENT_RERAISE 15
  ------------------
  410|      0|}
ceval.c:do_raise:
  518|  2.38k|{
  519|  2.38k|    PyObject *type = NULL, *value = NULL;
  520|       |
  521|  2.38k|    if (exc == NULL) {
  ------------------
  |  Branch (521:9): [True: 0, False: 2.38k]
  ------------------
  522|       |        /* Reraise */
  523|      0|        _PyErr_StackItem *exc_info = _PyErr_GetTopmostException(tstate);
  524|      0|        exc = exc_info->exc_value;
  525|      0|        if (Py_IsNone(exc) || exc == NULL) {
  ------------------
  |  |  621|      0|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|      0|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (525:31): [True: 0, False: 0]
  ------------------
  526|      0|            _PyErr_SetString(tstate, PyExc_RuntimeError,
  527|      0|                             "No active exception to reraise");
  528|      0|            return 0;
  529|      0|        }
  530|      0|        Py_INCREF(exc);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|      0|        assert(PyExceptionInstance_Check(exc));
  ------------------
  |  Branch (531:9): [True: 0, False: 0]
  ------------------
  532|      0|        _PyErr_SetRaisedException(tstate, exc);
  533|      0|        return 1;
  534|      0|    }
  535|       |
  536|       |    /* We support the following forms of raise:
  537|       |       raise
  538|       |       raise <instance>
  539|       |       raise <type> */
  540|       |
  541|  2.38k|    if (PyExceptionClass_Check(exc)) {
  ------------------
  |  |   61|  2.38k|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|  4.77k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 0, False: 2.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|  2.38k|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  542|      0|        type = exc;
  543|      0|        value = _PyObject_CallNoArgs(exc);
  544|      0|        if (value == NULL)
  ------------------
  |  Branch (544:13): [True: 0, False: 0]
  ------------------
  545|      0|            goto raise_error;
  546|      0|        if (!PyExceptionInstance_Check(value)) {
  ------------------
  |  |   65|      0|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (546:13): [True: 0, False: 0]
  ------------------
  547|      0|            _PyErr_Format(tstate, PyExc_TypeError,
  548|      0|                          "calling %R should have returned an instance of "
  549|      0|                          "BaseException, not %R",
  550|      0|                          type, Py_TYPE(value));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|      0|             goto raise_error;
  552|      0|        }
  553|      0|    }
  554|  2.38k|    else if (PyExceptionInstance_Check(exc)) {
  ------------------
  |  |   65|  2.38k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  2.38k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2.38k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  555|  2.38k|        value = exc;
  556|  2.38k|        type = PyExceptionInstance_Class(exc);
  ------------------
  |  |   69|  2.38k|#define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x))
  |  |  ------------------
  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|  2.38k|        Py_INCREF(type);
  ------------------
  |  |  310|  2.38k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  558|  2.38k|    }
  559|      0|    else {
  560|       |        /* Not something you can raise.  You get an exception
  561|       |           anyway, just not what you specified :-) */
  562|      0|        Py_DECREF(exc);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  563|      0|        _PyErr_SetString(tstate, PyExc_TypeError,
  564|      0|                         "exceptions must derive from BaseException");
  565|      0|        goto raise_error;
  566|      0|    }
  567|       |
  568|  2.38k|    assert(type != NULL);
  ------------------
  |  Branch (568:5): [True: 2.38k, False: 0]
  ------------------
  569|  2.38k|    assert(value != NULL);
  ------------------
  |  Branch (569:5): [True: 2.38k, False: 0]
  ------------------
  570|       |
  571|  2.38k|    if (cause) {
  ------------------
  |  Branch (571:9): [True: 227, False: 2.16k]
  ------------------
  572|    227|        PyObject *fixed_cause;
  573|    227|        if (PyExceptionClass_Check(cause)) {
  ------------------
  |  |   61|    227|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|    454|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    227|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    227|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 0, False: 227]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|    227|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|      0|            fixed_cause = _PyObject_CallNoArgs(cause);
  575|      0|            if (fixed_cause == NULL)
  ------------------
  |  Branch (575:17): [True: 0, False: 0]
  ------------------
  576|      0|                goto raise_error;
  577|      0|            if (!PyExceptionInstance_Check(fixed_cause)) {
  ------------------
  |  |   65|      0|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (577:17): [True: 0, False: 0]
  ------------------
  578|      0|                _PyErr_Format(tstate, PyExc_TypeError,
  579|      0|                              "calling %R should have returned an instance of "
  580|      0|                              "BaseException, not %R",
  581|      0|                              cause, Py_TYPE(fixed_cause));
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  582|      0|                Py_DECREF(fixed_cause);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  583|      0|                goto raise_error;
  584|      0|            }
  585|      0|            Py_DECREF(cause);
  ------------------
  |  |   80|      0|    do { \
  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  586|      0|        }
  587|    227|        else if (PyExceptionInstance_Check(cause)) {
  ------------------
  |  |   65|    227|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    227|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 227]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  588|      0|            fixed_cause = cause;
  589|      0|        }
  590|    227|        else if (Py_IsNone(cause)) {
  ------------------
  |  |  621|    227|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|    227|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 227, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  591|    227|            Py_DECREF(cause);
  ------------------
  |  |   80|    227|    do { \
  |  |   81|    227|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|    227|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    227|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|    227|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|    227|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    227|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    227|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 227, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|    227|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|    227|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|    227|            break; \
  |  |   85|    227|        } \
  |  |   86|    227|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  592|    227|            fixed_cause = NULL;
  593|    227|        }
  594|      0|        else {
  595|      0|            _PyErr_SetString(tstate, PyExc_TypeError,
  596|      0|                             "exception causes must derive from "
  597|      0|                             "BaseException");
  598|      0|            goto raise_error;
  599|      0|        }
  600|    227|        PyException_SetCause(value, fixed_cause);
  601|    227|    }
  602|       |
  603|  2.38k|    _PyErr_SetObject(tstate, type, value);
  604|       |    /* _PyErr_SetObject incref's its arguments */
  605|  2.38k|    Py_DECREF(value);
  ------------------
  |  |   80|  2.38k|    do { \
  |  |   81|  2.38k|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  2.38k|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|  2.38k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 0, False: 2.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|      0|            break; \
  |  |   85|      0|        } \
  |  |   86|  2.38k|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|  2.38k|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|  2.38k|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 2.38k]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|  2.38k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 2.38k]
  |  |  ------------------
  ------------------
  606|  2.38k|    Py_DECREF(type);
  ------------------
  |  |   80|  2.38k|    do { \
  |  |   81|  2.38k|        PyObject *op = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  2.38k|        if (_Py_IsImmortal(op)) { \
  |  |  ------------------
  |  |  |  |  137|  2.38k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (137:28): [True: 2.37k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|  2.37k|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   22|  2.37k|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   84|  2.37k|            break; \
  |  |   85|  2.37k|        } \
  |  |   86|  2.38k|        _Py_DECREF_STAT_INC(); \
  |  |  ------------------
  |  |  |  |   20|     11|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  ------------------
  |  |   87|     11|        if (--op->ob_refcnt == 0) { \
  |  |  ------------------
  |  |  |  Branch (87:13): [True: 0, False: 11]
  |  |  ------------------
  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  ------------------
  |  |  |  |  112|      0|    do { \
  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  117|      0|        } \
  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  ------------------
  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|      0|            (*dealloc)(op); \
  |  |   91|      0|        } \
  |  |   92|     11|    } while (0)
  |  |  ------------------
  |  |  |  Branch (92:14): [Folded, False: 11]
  |  |  ------------------
  ------------------
  607|  2.38k|    return 0;
  608|       |
  609|      0|raise_error:
  610|      0|    Py_XDECREF(value);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  611|      0|    Py_XDECREF(type);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  612|       |    Py_XDECREF(cause);
  ------------------
  |  |   69|      0|    do { \
  |  |   70|      0|        PyObject *xop = _PyObject_CAST(arg); \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   71|      0|        if (xop != NULL) { \
  |  |  ------------------
  |  |  |  Branch (71:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   72|      0|            Py_DECREF(xop); \
  |  |  ------------------
  |  |  |  |   80|      0|    do { \
  |  |  |  |   81|      0|        PyObject *op = _PyObject_CAST(arg); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   82|      0|        if (_Py_IsImmortal(op)) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (137:28): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   83|      0|            _Py_DECREF_IMMORTAL_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   84|      0|            break; \
  |  |  |  |   85|      0|        } \
  |  |  |  |   86|      0|        _Py_DECREF_STAT_INC(); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _Py_DECREF_STAT_INC() ((void)0)
  |  |  |  |  ------------------
  |  |  |  |   87|      0|        if (--op->ob_refcnt == 0) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   88|      0|            _PyReftracerTrack(op, PyRefTracer_DESTROY); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  112|      0|    do { \
  |  |  |  |  |  |  113|      0|        struct _reftracer_runtime_state *tracer = &_PyRuntime.ref_tracer; \
  |  |  |  |  |  |  114|      0|        if (tracer->tracer_func != NULL) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (114:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  115|      0|            void *data = tracer->tracer_data; \
  |  |  |  |  |  |  116|      0|            tracer->tracer_func((obj), (operation), data); \
  |  |  |  |  |  |  117|      0|        } \
  |  |  |  |  |  |  118|      0|    } while(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (118:13): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   89|      0|            destructor dealloc = Py_TYPE(op)->tp_dealloc; \
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   90|      0|            (*dealloc)(op); \
  |  |  |  |   91|      0|        } \
  |  |  |  |   92|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|        } \
  |  |   74|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  613|      0|    return 0;
  614|  2.38k|}
ceval.c:get_exception_handler:
  459|  46.3k|{
  460|  46.3k|    unsigned char *start = (unsigned char *)PyBytes_AS_STRING(code->co_exceptiontable);
  ------------------
  |  |   27|  46.3k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|  46.3k|    unsigned char *end = start + PyBytes_GET_SIZE(code->co_exceptiontable);
  ------------------
  |  |   33|  46.3k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  46.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  462|       |    /* Invariants:
  463|       |     * start_table == end_table OR
  464|       |     * start_table points to a legal entry and end_table points
  465|       |     * beyond the table or to a legal entry that is after index.
  466|       |     */
  467|  46.3k|    if (end - start > MAX_LINEAR_SEARCH) {
  ------------------
  |  |  455|  46.3k|#define MAX_LINEAR_SEARCH 40
  ------------------
  |  Branch (467:9): [True: 43.9k, False: 2.42k]
  ------------------
  468|  43.9k|        int offset;
  469|  43.9k|        parse_varint(start, &offset);
  470|  43.9k|        if (offset > index) {
  ------------------
  |  Branch (470:13): [True: 4, False: 43.9k]
  ------------------
  471|      4|            return 0;
  472|      4|        }
  473|  45.8k|        do {
  474|  45.8k|            unsigned char * mid = start + ((end-start)>>1);
  475|  45.8k|            mid = scan_back_to_entry_start(mid);
  476|  45.8k|            parse_varint(mid, &offset);
  477|  45.8k|            if (offset > index) {
  ------------------
  |  Branch (477:17): [True: 22.7k, False: 23.1k]
  ------------------
  478|  22.7k|                end = mid;
  479|  22.7k|            }
  480|  23.1k|            else {
  481|  23.1k|                start = mid;
  482|  23.1k|            }
  483|       |
  484|  45.8k|        } while (end - start > MAX_LINEAR_SEARCH);
  ------------------
  |  |  455|  45.8k|#define MAX_LINEAR_SEARCH 40
  ------------------
  |  Branch (484:18): [True: 1.93k, False: 43.9k]
  ------------------
  485|  43.9k|    }
  486|  46.3k|    unsigned char *scan = start;
  487|  71.5k|    while (scan < end) {
  ------------------
  |  Branch (487:12): [True: 67.9k, False: 3.62k]
  ------------------
  488|  67.9k|        int start_offset, size;
  489|  67.9k|        scan = parse_varint(scan, &start_offset);
  490|  67.9k|        if (start_offset > index) {
  ------------------
  |  Branch (490:13): [True: 586, False: 67.3k]
  ------------------
  491|    586|            break;
  492|    586|        }
  493|  67.3k|        scan = parse_varint(scan, &size);
  494|  67.3k|        if (start_offset + size > index) {
  ------------------
  |  Branch (494:13): [True: 42.1k, False: 25.2k]
  ------------------
  495|  42.1k|            scan = parse_varint(scan, handler);
  496|  42.1k|            int depth_and_lasti;
  497|  42.1k|            parse_varint(scan, &depth_and_lasti);
  498|  42.1k|            *level = depth_and_lasti >> 1;
  499|  42.1k|            *lasti = depth_and_lasti & 1;
  500|  42.1k|            return 1;
  501|  42.1k|        }
  502|  25.2k|        scan = skip_to_next_entry(scan, end);
  503|  25.2k|    }
  504|  4.21k|    return 0;
  505|  46.3k|}
ceval.c:scan_back_to_entry_start:
  441|  45.8k|scan_back_to_entry_start(unsigned char *p) {
  442|  63.9k|    for (; (p[0]&128) == 0; p--);
  ------------------
  |  Branch (442:12): [True: 18.0k, False: 45.8k]
  ------------------
  443|  45.8k|    return p;
  444|  45.8k|}
ceval.c:skip_to_next_entry:
  447|  25.2k|skip_to_next_entry(unsigned char *p, unsigned char *end) {
  448|   100k|    while (p < end && ((p[0] & 128) == 0)) {
  ------------------
  |  Branch (448:12): [True: 98.1k, False: 2.76k]
  |  Branch (448:23): [True: 75.6k, False: 22.4k]
  ------------------
  449|  75.6k|        p++;
  450|  75.6k|    }
  451|  25.2k|    return p;
  452|  25.2k|}
ceval.c:monitor_unwind:
  433|  4.21k|{
  434|  4.21k|    if (no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_PY_UNWIND)) {
  ------------------
  |  |   34|  4.21k|#define PY_MONITORING_EVENT_PY_UNWIND 13
  ------------------
  |  Branch (434:9): [True: 4.21k, False: 0]
  ------------------
  435|  4.21k|        return;
  436|  4.21k|    }
  437|      0|    do_monitor_exc(tstate, frame, instr, PY_MONITORING_EVENT_PY_UNWIND);
  ------------------
  |  |   34|      0|#define PY_MONITORING_EVENT_PY_UNWIND 13
  ------------------
  438|      0|}
ceval.c:monitor_handled:
  384|  42.1k|{
  385|  42.1k|    if (no_tools_for_local_event(tstate, frame, PY_MONITORING_EVENT_EXCEPTION_HANDLED)) {
  ------------------
  |  |   33|  42.1k|#define PY_MONITORING_EVENT_EXCEPTION_HANDLED 12
  ------------------
  |  Branch (385:9): [True: 42.1k, False: 0]
  ------------------
  386|  42.1k|        return 0;
  387|  42.1k|    }
  388|      0|    return _Py_call_instrumentation_arg(tstate, PY_MONITORING_EVENT_EXCEPTION_HANDLED, frame, instr, exc);
  ------------------
  |  |   33|      0|#define PY_MONITORING_EVENT_EXCEPTION_HANDLED 12
  ------------------
  389|  42.1k|}
ceval.c:no_tools_for_local_event:
  369|  92.6k|{
  370|  92.6k|    assert(event < _PY_MONITORING_UNGROUPED_EVENTS);
  ------------------
  |  Branch (370:5): [True: 92.6k, False: 0]
  ------------------
  371|  92.6k|    _PyCoMonitoringData *data = _PyFrame_GetCode(frame)->_co_monitoring;
  372|  92.6k|    if (data) {
  ------------------
  |  Branch (372:9): [True: 0, False: 92.6k]
  ------------------
  373|      0|        return data->active_monitors.tools[event] == 0;
  374|      0|    }
  375|  92.6k|    else {
  376|  92.6k|        return no_tools_for_global_event(tstate, event);
  377|  92.6k|    }
  378|  92.6k|}
ceval.c:no_tools_for_global_event:
  363|  92.6k|{
  364|  92.6k|    return tstate->interp->monitors.tools[event] == 0;
  365|  92.6k|}

_PyEval_InitGIL:
  504|      2|{
  505|      2|    assert(tstate->interp->ceval.gil == NULL);
  ------------------
  |  Branch (505:5): [True: 2, False: 0]
  ------------------
  506|      2|    if (!own_gil) {
  ------------------
  |  Branch (506:9): [True: 0, False: 2]
  ------------------
  507|       |        /* The interpreter will share the main interpreter's instead. */
  508|      0|        PyInterpreterState *main_interp = _PyInterpreterState_Main();
  509|      0|        assert(tstate->interp != main_interp);
  ------------------
  |  Branch (509:9): [True: 0, False: 0]
  ------------------
  510|      0|        struct _gil_runtime_state *gil = main_interp->ceval.gil;
  511|      0|        init_shared_gil(tstate->interp, gil);
  512|      0|        assert(!current_thread_holds_gil(gil, tstate));
  ------------------
  |  Branch (512:9): [True: 0, False: 0]
  ------------------
  513|      0|    }
  514|      2|    else {
  515|      2|        PyThread_init_thread();
  516|      2|        init_own_gil(tstate->interp, &tstate->interp->_gil);
  517|      2|    }
  518|       |
  519|       |    // Lock the GIL and mark the current thread as attached.
  520|      2|    _PyThreadState_Attach(tstate);
  521|      2|}
_PyEval_FiniGIL:
  525|      2|{
  526|      2|    struct _gil_runtime_state *gil = interp->ceval.gil;
  527|      2|    if (gil == NULL) {
  ------------------
  |  Branch (527:9): [True: 2, False: 0]
  ------------------
  528|       |        /* It was already finalized (or hasn't been initialized yet). */
  529|      2|        assert(!interp->ceval.own_gil);
  ------------------
  |  Branch (529:9): [True: 2, False: 0]
  ------------------
  530|      2|        return;
  531|      2|    }
  532|      0|    else if (!interp->ceval.own_gil) {
  ------------------
  |  Branch (532:14): [True: 0, False: 0]
  ------------------
  533|       |#ifdef Py_DEBUG
  534|       |        PyInterpreterState *main_interp = _PyInterpreterState_Main();
  535|       |        assert(main_interp != NULL && interp != main_interp);
  536|       |        assert(interp->ceval.gil == main_interp->ceval.gil);
  537|       |#endif
  538|      0|        interp->ceval.gil = NULL;
  539|      0|        return;
  540|      0|    }
  541|       |
  542|      0|    if (!gil_created(gil)) {
  ------------------
  |  Branch (542:9): [True: 0, False: 0]
  ------------------
  543|       |        /* First Py_InitializeFromConfig() call: the GIL doesn't exist
  544|       |           yet: do nothing. */
  545|      0|        return;
  546|      0|    }
  547|       |
  548|      0|    destroy_gil(gil);
  549|      0|    assert(!gil_created(gil));
  ------------------
  |  Branch (549:5): [True: 0, False: 0]
  ------------------
  550|      0|    interp->ceval.gil = NULL;
  551|      0|}
_PyEval_AcquireLock:
  591|  56.0k|{
  592|  56.0k|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|  56.0k|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
  593|  56.0k|    take_gil(tstate);
  594|  56.0k|}
_PyEval_ReleaseLock:
  600|  56.0k|{
  601|  56.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (601:5): [True: 56.0k, False: 0]
  ------------------
  602|  56.0k|    assert(tstate->interp == interp);
  ------------------
  |  Branch (602:5): [True: 56.0k, False: 0]
  ------------------
  603|  56.0k|    drop_gil(interp, tstate, final_release);
  604|  56.0k|}
PyEval_SaveThread:
  645|  56.0k|{
  646|  56.0k|    PyThreadState *tstate = _PyThreadState_GET();
  647|  56.0k|    _PyThreadState_Detach(tstate);
  648|  56.0k|    return tstate;
  649|  56.0k|}
PyEval_RestoreThread:
  653|  56.0k|{
  654|       |#ifdef MS_WINDOWS
  655|       |    int err = GetLastError();
  656|       |#endif
  657|       |
  658|  56.0k|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|  56.0k|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
  659|  56.0k|    _PyThreadState_Attach(tstate);
  660|       |
  661|       |#ifdef MS_WINDOWS
  662|       |    SetLastError(err);
  663|       |#endif
  664|  56.0k|}
_PyEval_InitState:
 1076|      2|{
 1077|      2|    _gil_initialize(&interp->_gil);
 1078|      2|}
_PyRunRemoteDebugger:
 1260|   861k|{
 1261|   861k|    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
 1262|   861k|    if (config->remote_debug == 1
  ------------------
  |  Branch (1262:9): [True: 861k, False: 0]
  ------------------
 1263|   861k|         && tstate->remote_debugger_support.debugger_pending_call == 1)
  ------------------
  |  Branch (1263:13): [True: 0, False: 861k]
  ------------------
 1264|      0|    {
 1265|      0|        tstate->remote_debugger_support.debugger_pending_call = 0;
 1266|       |
 1267|       |        // Immediately make a copy in case of a race with another debugger
 1268|       |        // process that's trying to write to the buffer. At least this way
 1269|       |        // we'll be internally consistent: what we audit is what we run.
 1270|      0|        const size_t pathsz
 1271|      0|            = sizeof(tstate->remote_debugger_support.debugger_script_path);
 1272|       |
 1273|      0|        char *path = PyMem_Malloc(pathsz);
 1274|      0|        if (path) {
  ------------------
  |  Branch (1274:13): [True: 0, False: 0]
  ------------------
 1275|       |            // And don't assume the debugger correctly null terminated it.
 1276|      0|            memcpy(
 1277|      0|                path,
 1278|      0|                tstate->remote_debugger_support.debugger_script_path,
 1279|      0|                pathsz);
 1280|      0|            path[pathsz - 1] = '\0';
 1281|      0|            if (*path) {
  ------------------
  |  Branch (1281:17): [True: 0, False: 0]
  ------------------
 1282|      0|                PyObject *path_obj = PyUnicode_DecodeFSDefault(path);
 1283|      0|                if (path_obj == NULL) {
  ------------------
  |  Branch (1283:21): [True: 0, False: 0]
  ------------------
 1284|      0|                    PyErr_FormatUnraisable("Can't decode debugger script");
 1285|      0|                }
 1286|      0|                else {
 1287|      0|                    run_remote_debugger_script(path_obj);
 1288|      0|                    Py_DECREF(path_obj);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1289|      0|                }
 1290|      0|            }
 1291|      0|            PyMem_Free(path);
 1292|      0|        }
 1293|      0|    }
 1294|   861k|    return 0;
 1295|   861k|}
_Py_HandlePending:
 1359|    193|{
 1360|    193|    uintptr_t breaker = _Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker);
 1361|       |
 1362|       |    /* Stop-the-world */
 1363|    193|    if ((breaker & _PY_EVAL_PLEASE_STOP_BIT) != 0) {
  ------------------
  |  |  350|    193|#define _PY_EVAL_PLEASE_STOP_BIT (1U << 5)
  ------------------
  |  Branch (1363:9): [True: 0, False: 193]
  ------------------
 1364|      0|        _Py_unset_eval_breaker_bit(tstate, _PY_EVAL_PLEASE_STOP_BIT);
  ------------------
  |  |  350|      0|#define _PY_EVAL_PLEASE_STOP_BIT (1U << 5)
  ------------------
 1365|      0|        _PyThreadState_Suspend(tstate);
 1366|       |
 1367|       |        /* The attach blocks until the stop-the-world event is complete. */
 1368|      0|        _PyThreadState_Attach(tstate);
 1369|      0|    }
 1370|       |
 1371|       |    /* Pending signals */
 1372|    193|    if ((breaker & _PY_SIGNALS_PENDING_BIT) != 0) {
  ------------------
  |  |  346|    193|#define _PY_SIGNALS_PENDING_BIT (1U << 1)
  ------------------
  |  Branch (1372:9): [True: 0, False: 193]
  ------------------
 1373|      0|        if (handle_signals(tstate) != 0) {
  ------------------
  |  Branch (1373:13): [True: 0, False: 0]
  ------------------
 1374|      0|            return -1;
 1375|      0|        }
 1376|      0|    }
 1377|       |
 1378|       |    /* Pending calls */
 1379|    193|    if ((breaker & _PY_CALLS_TO_DO_BIT) != 0) {
  ------------------
  |  |  347|    193|#define _PY_CALLS_TO_DO_BIT (1U << 2)
  ------------------
  |  Branch (1379:9): [True: 0, False: 193]
  ------------------
 1380|      0|        if (make_pending_calls(tstate) != 0) {
  ------------------
  |  Branch (1380:13): [True: 0, False: 0]
  ------------------
 1381|      0|            return -1;
 1382|      0|        }
 1383|      0|    }
 1384|       |
 1385|       |#ifdef Py_GIL_DISABLED
 1386|       |    /* Objects with refcounts to merge */
 1387|       |    if ((breaker & _PY_EVAL_EXPLICIT_MERGE_BIT) != 0) {
 1388|       |        _Py_unset_eval_breaker_bit(tstate, _PY_EVAL_EXPLICIT_MERGE_BIT);
 1389|       |        _Py_brc_merge_refcounts(tstate);
 1390|       |    }
 1391|       |    /* Process deferred memory frees held by QSBR */
 1392|       |    if (_Py_qsbr_should_process(((_PyThreadStateImpl *)tstate)->qsbr)) {
 1393|       |        _PyMem_ProcessDelayed(tstate);
 1394|       |    }
 1395|       |#endif
 1396|       |
 1397|       |    /* GC scheduled to run */
 1398|    193|    if ((breaker & _PY_GC_SCHEDULED_BIT) != 0) {
  ------------------
  |  |  349|    193|#define _PY_GC_SCHEDULED_BIT (1U << 4)
  ------------------
  |  Branch (1398:9): [True: 193, False: 0]
  ------------------
 1399|    193|        _Py_unset_eval_breaker_bit(tstate, _PY_GC_SCHEDULED_BIT);
  ------------------
  |  |  349|    193|#define _PY_GC_SCHEDULED_BIT (1U << 4)
  ------------------
 1400|    193|        _Py_RunGC(tstate);
 1401|       |#ifdef _Py_TIER2
 1402|       |        _Py_ClearExecutorDeletionList(tstate->interp);
 1403|       |#endif
 1404|    193|    }
 1405|       |
 1406|       |#ifdef _Py_TIER2
 1407|       |    if ((breaker & _PY_EVAL_JIT_INVALIDATE_COLD_BIT) != 0) {
 1408|       |        _Py_unset_eval_breaker_bit(tstate, _PY_EVAL_JIT_INVALIDATE_COLD_BIT);
 1409|       |        _Py_Executors_InvalidateCold(tstate->interp);
 1410|       |        tstate->interp->executor_creation_counter = JIT_CLEANUP_THRESHOLD;
 1411|       |        _Py_ClearExecutorDeletionList(tstate->interp);
 1412|       |    }
 1413|       |#endif
 1414|       |
 1415|       |    /* GIL drop request */
 1416|    193|    if ((breaker & _PY_GIL_DROP_REQUEST_BIT) != 0) {
  ------------------
  |  |  345|    193|#define _PY_GIL_DROP_REQUEST_BIT (1U << 0)
  ------------------
  |  Branch (1416:9): [True: 0, False: 193]
  ------------------
 1417|       |        /* Give another thread a chance */
 1418|      0|        _PyThreadState_Detach(tstate);
 1419|       |
 1420|       |        /* Other threads may run now */
 1421|       |
 1422|      0|        _PyThreadState_Attach(tstate);
 1423|      0|    }
 1424|       |
 1425|       |    /* Check for asynchronous exception. */
 1426|    193|    if ((breaker & _PY_ASYNC_EXCEPTION_BIT) != 0) {
  ------------------
  |  |  348|    193|#define _PY_ASYNC_EXCEPTION_BIT (1U << 3)
  ------------------
  |  Branch (1426:9): [True: 0, False: 193]
  ------------------
 1427|      0|        if (_PyEval_RaiseAsyncExc(tstate) < 0) {
  ------------------
  |  Branch (1427:13): [True: 0, False: 0]
  ------------------
 1428|      0|            return -1;
 1429|      0|        }
 1430|      0|    }
 1431|       |
 1432|    193|#if defined(Py_REMOTE_DEBUG) && defined(Py_SUPPORTS_REMOTE_DEBUG)
 1433|    193|    _PyRunRemoteDebugger(tstate);
 1434|    193|#endif
 1435|       |
 1436|    193|    return 0;
 1437|    193|}
ceval_gil.c:gil_created:
  156|  56.0k|{
  157|  56.0k|    if (gil == NULL) {
  ------------------
  |  Branch (157:9): [True: 0, False: 56.0k]
  ------------------
  158|      0|        return 0;
  159|      0|    }
  160|  56.0k|    return (_Py_atomic_load_int_acquire(&gil->locked) >= 0);
  161|  56.0k|}
ceval_gil.c:init_own_gil:
  490|      2|{
  491|      2|    assert(!gil_created(gil));
  ------------------
  |  Branch (491:5): [True: 2, False: 0]
  ------------------
  492|       |#ifdef Py_GIL_DISABLED
  493|       |    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
  494|       |    gil->enabled = config->enable_gil == _PyConfig_GIL_ENABLE ? INT_MAX : 0;
  495|       |#endif
  496|      2|    create_gil(gil);
  497|      2|    assert(gil_created(gil));
  ------------------
  |  Branch (497:5): [True: 2, False: 0]
  ------------------
  498|      2|    interp->ceval.gil = gil;
  499|      2|    interp->ceval.own_gil = 1;
  500|      2|}
ceval_gil.c:create_gil:
  164|      2|{
  165|      2|    MUTEX_INIT(gil->mutex);
  ------------------
  |  |  111|      2|    if (PyMUTEX_INIT(&(mut))) { \
  |  |  ------------------
  |  |  |  |   57|      2|#define PyMUTEX_INIT(mut)       pthread_mutex_init((mut), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:33): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      2|        Py_FatalError("PyMUTEX_INIT(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  166|      2|#ifdef FORCE_SWITCHING
  167|      2|    MUTEX_INIT(gil->switch_mutex);
  ------------------
  |  |  111|      2|    if (PyMUTEX_INIT(&(mut))) { \
  |  |  ------------------
  |  |  |  |   57|      2|#define PyMUTEX_INIT(mut)       pthread_mutex_init((mut), NULL)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:33): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      2|        Py_FatalError("PyMUTEX_INIT(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  168|      2|#endif
  169|      2|    COND_INIT(gil->cond);
  ------------------
  |  |  124|      2|    if (PyCOND_INIT(&(cond))) { \
  |  |  ------------------
  |  |  |  |   62|      2|#define PyCOND_INIT(cond)       _PyThread_cond_init(cond)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (62:33): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|      2|        Py_FatalError("PyCOND_INIT(" #cond ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  170|      2|#ifdef FORCE_SWITCHING
  171|      2|    COND_INIT(gil->switch_cond);
  ------------------
  |  |  124|      2|    if (PyCOND_INIT(&(cond))) { \
  |  |  ------------------
  |  |  |  |   62|      2|#define PyCOND_INIT(cond)       _PyThread_cond_init(cond)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (62:33): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|      2|        Py_FatalError("PyCOND_INIT(" #cond ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  172|      2|#endif
  173|      2|    _Py_atomic_store_ptr_relaxed(&gil->last_holder, 0);
  174|      2|    _Py_ANNOTATE_RWLOCK_CREATE(&gil->locked);
  175|      2|    _Py_atomic_store_int_release(&gil->locked, 0);
  176|      2|}
ceval_gil.c:take_gil:
  287|  56.0k|{
  288|  56.0k|    int err = errno;
  289|       |
  290|  56.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (290:5): [True: 56.0k, False: 0]
  ------------------
  291|       |    /* We shouldn't be using a thread state that isn't viable any more. */
  292|       |    // XXX It may be more correct to check tstate->_status.finalizing.
  293|       |    // XXX assert(!tstate->_status.cleared);
  294|       |
  295|  56.0k|    if (_PyThreadState_MustExit(tstate)) {
  ------------------
  |  Branch (295:9): [True: 0, False: 56.0k]
  ------------------
  296|       |        /* bpo-39877: If Py_Finalize() has been called and tstate is not the
  297|       |           thread which called Py_Finalize(), this thread cannot continue.
  298|       |
  299|       |           This code path can be reached by a daemon thread after Py_Finalize()
  300|       |           completes.
  301|       |
  302|       |           This used to call a *thread_exit API, but that was not safe as it
  303|       |           lacks stack unwinding and local variable destruction important to
  304|       |           C++. gh-87135: The best that can be done is to hang the thread as
  305|       |           the public APIs calling this have no error reporting mechanism (!).
  306|       |         */
  307|      0|        _PyThreadState_HangThread(tstate);
  308|      0|    }
  309|       |
  310|  56.0k|    assert(_PyThreadState_CheckConsistency(tstate));
  ------------------
  |  Branch (310:5): [True: 56.0k, False: 0]
  ------------------
  311|  56.0k|    PyInterpreterState *interp = tstate->interp;
  312|  56.0k|    struct _gil_runtime_state *gil = interp->ceval.gil;
  313|       |#ifdef Py_GIL_DISABLED
  314|       |    if (!_Py_atomic_load_int_relaxed(&gil->enabled)) {
  315|       |        return;
  316|       |    }
  317|       |#endif
  318|       |
  319|       |    /* Check that _PyEval_InitThreads() was called to create the lock */
  320|  56.0k|    assert(gil_created(gil));
  ------------------
  |  Branch (320:5): [True: 56.0k, False: 0]
  ------------------
  321|       |
  322|   112k|    MUTEX_LOCK(gil->mutex);
  ------------------
  |  |  117|  56.0k|    if (PyMUTEX_LOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   59|  56.0k|#define PyMUTEX_LOCK(mut)       pthread_mutex_lock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  118|  56.0k|        Py_FatalError("PyMUTEX_LOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  323|       |
  324|   112k|    tstate->gil_requested = 1;
  325|       |
  326|   112k|    int drop_requested = 0;
  327|   112k|    while (_Py_atomic_load_int_relaxed(&gil->locked)) {
  ------------------
  |  Branch (327:12): [True: 0, False: 56.0k]
  ------------------
  328|      0|        unsigned long saved_switchnum = gil->switch_number;
  329|       |
  330|      0|        unsigned long interval = _Py_atomic_load_ulong_relaxed(&gil->interval);
  ------------------
  |  |  615|      0|    _Py_atomic_load_uint64_relaxed((uint64_t *)p)
  ------------------
  331|      0|        if (interval < 1) {
  ------------------
  |  Branch (331:13): [True: 0, False: 0]
  ------------------
  332|      0|            interval = 1;
  333|      0|        }
  334|      0|        int timed_out = 0;
  335|      0|        COND_TIMED_WAIT(gil->cond, gil->mutex, interval, timed_out);
  ------------------
  |  |  136|      0|    { \
  |  |  137|      0|        int r = PyCOND_TIMEDWAIT(&(cond), &(mut), (microseconds)); \
  |  |  138|      0|        if (r < 0) \
  |  |  ------------------
  |  |  |  Branch (138:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  139|      0|            Py_FatalError("PyCOND_WAIT(" #cond ") failed"); \
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  |  |  140|      0|        if (r) /* 1 == timeout, 2 == impl. can't say, so assume timeout */ \
  |  |  ------------------
  |  |  |  Branch (140:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  141|      0|            timeout_result = 1; \
  |  |  142|      0|        else \
  |  |  143|      0|            timeout_result = 0; \
  |  |  144|      0|    } \
  ------------------
  336|       |
  337|       |        /* If we timed out and no switch occurred in the meantime, it is time
  338|       |           to ask the GIL-holding thread to drop it. */
  339|      0|        if (timed_out &&
  ------------------
  |  Branch (339:13): [True: 0, False: 0]
  ------------------
  340|      0|            _Py_atomic_load_int_relaxed(&gil->locked) &&
  ------------------
  |  Branch (340:13): [True: 0, False: 0]
  ------------------
  341|      0|            gil->switch_number == saved_switchnum)
  ------------------
  |  Branch (341:13): [True: 0, False: 0]
  ------------------
  342|      0|        {
  343|      0|            PyThreadState *holder_tstate =
  344|      0|                (PyThreadState*)_Py_atomic_load_ptr_relaxed(&gil->last_holder);
  345|      0|            if (_PyThreadState_MustExit(tstate)) {
  ------------------
  |  Branch (345:17): [True: 0, False: 0]
  ------------------
  346|      0|                MUTEX_UNLOCK(gil->mutex);
  ------------------
  |  |  120|      0|    if (PyMUTEX_UNLOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   60|      0|#define PyMUTEX_UNLOCK(mut)     pthread_mutex_unlock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      0|        Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  347|       |                // gh-96387: If the loop requested a drop request in a previous
  348|       |                // iteration, reset the request. Otherwise, drop_gil() can
  349|       |                // block forever waiting for the thread which exited. Drop
  350|       |                // requests made by other threads are also reset: these threads
  351|       |                // may have to request again a drop request (iterate one more
  352|       |                // time).
  353|      0|                if (drop_requested) {
  ------------------
  |  Branch (353:21): [True: 0, False: 0]
  ------------------
  354|      0|                    _Py_unset_eval_breaker_bit(holder_tstate, _PY_GIL_DROP_REQUEST_BIT);
  ------------------
  |  |  345|      0|#define _PY_GIL_DROP_REQUEST_BIT (1U << 0)
  ------------------
  355|      0|                }
  356|       |                // gh-87135: hang the thread as *thread_exit() is not a safe
  357|       |                // API. It lacks stack unwind and local variable destruction.
  358|      0|                _PyThreadState_HangThread(tstate);
  359|      0|            }
  360|      0|            assert(_PyThreadState_CheckConsistency(tstate));
  ------------------
  |  Branch (360:13): [True: 0, False: 0]
  ------------------
  361|       |
  362|      0|            _Py_set_eval_breaker_bit(holder_tstate, _PY_GIL_DROP_REQUEST_BIT);
  ------------------
  |  |  345|      0|#define _PY_GIL_DROP_REQUEST_BIT (1U << 0)
  ------------------
  363|      0|            drop_requested = 1;
  364|      0|        }
  365|      0|    }
  366|       |
  367|       |#ifdef Py_GIL_DISABLED
  368|       |    if (!_Py_atomic_load_int_relaxed(&gil->enabled)) {
  369|       |        // Another thread disabled the GIL between our check above and
  370|       |        // now. Don't take the GIL, signal any other waiting threads, and
  371|       |        // return.
  372|       |        COND_SIGNAL(gil->cond);
  373|       |        MUTEX_UNLOCK(gil->mutex);
  374|       |        return;
  375|       |    }
  376|       |#endif
  377|       |
  378|  56.0k|#ifdef FORCE_SWITCHING
  379|       |    /* This mutex must be taken before modifying gil->last_holder:
  380|       |       see drop_gil(). */
  381|   112k|    MUTEX_LOCK(gil->switch_mutex);
  ------------------
  |  |  117|  56.0k|    if (PyMUTEX_LOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   59|  56.0k|#define PyMUTEX_LOCK(mut)       pthread_mutex_lock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  118|  56.0k|        Py_FatalError("PyMUTEX_LOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  382|   112k|#endif
  383|       |    /* We now hold the GIL */
  384|   112k|    _Py_atomic_store_int_relaxed(&gil->locked, 1);
  385|   112k|    _Py_ANNOTATE_RWLOCK_ACQUIRED(&gil->locked, /*is_write=*/1);
  386|       |
  387|   112k|    if (tstate != (PyThreadState*)_Py_atomic_load_ptr_relaxed(&gil->last_holder)) {
  ------------------
  |  Branch (387:9): [True: 2, False: 56.0k]
  ------------------
  388|      2|        _Py_atomic_store_ptr_relaxed(&gil->last_holder, tstate);
  389|      2|        ++gil->switch_number;
  390|      2|    }
  391|       |
  392|   112k|#ifdef FORCE_SWITCHING
  393|   112k|    COND_SIGNAL(gil->switch_cond);
  ------------------
  |  |  130|  56.0k|    if (PyCOND_SIGNAL(&(cond))) { \
  |  |  ------------------
  |  |  |  |   64|  56.0k|#define PyCOND_SIGNAL(cond)     pthread_cond_signal(cond)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  131|  56.0k|        Py_FatalError("PyCOND_SIGNAL(" #cond ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  394|  56.0k|    MUTEX_UNLOCK(gil->switch_mutex);
  ------------------
  |  |  120|  56.0k|    if (PyMUTEX_UNLOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   60|  56.0k|#define PyMUTEX_UNLOCK(mut)     pthread_mutex_unlock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  56.0k|        Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  395|  56.0k|#endif
  396|       |
  397|  56.0k|    if (_PyThreadState_MustExit(tstate)) {
  ------------------
  |  Branch (397:9): [True: 0, False: 56.0k]
  ------------------
  398|       |        /* bpo-36475: If Py_Finalize() has been called and tstate is not
  399|       |           the thread which called Py_Finalize(), gh-87135: hang the
  400|       |           thread.
  401|       |
  402|       |           This code path can be reached by a daemon thread which was waiting
  403|       |           in take_gil() while the main thread called
  404|       |           wait_for_thread_shutdown() from Py_Finalize(). */
  405|      0|        MUTEX_UNLOCK(gil->mutex);
  ------------------
  |  |  120|      0|    if (PyMUTEX_UNLOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   60|      0|#define PyMUTEX_UNLOCK(mut)     pthread_mutex_unlock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      0|        Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  406|       |        /* tstate could be a dangling pointer, so don't pass it to
  407|       |           drop_gil(). */
  408|      0|        drop_gil(interp, NULL, 1);
  409|      0|        _PyThreadState_HangThread(tstate);
  410|      0|    }
  411|  56.0k|    assert(_PyThreadState_CheckConsistency(tstate));
  ------------------
  |  Branch (411:5): [True: 56.0k, False: 0]
  ------------------
  412|       |
  413|  56.0k|    tstate->gil_requested = 0;
  414|  56.0k|    tstate->holds_gil = 1;
  415|  56.0k|    _Py_unset_eval_breaker_bit(tstate, _PY_GIL_DROP_REQUEST_BIT);
  ------------------
  |  |  345|  56.0k|#define _PY_GIL_DROP_REQUEST_BIT (1U << 0)
  ------------------
  416|  56.0k|    update_eval_breaker_for_thread(interp, tstate);
  417|       |
  418|  56.0k|    MUTEX_UNLOCK(gil->mutex);
  ------------------
  |  |  120|  56.0k|    if (PyMUTEX_UNLOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   60|  56.0k|#define PyMUTEX_UNLOCK(mut)     pthread_mutex_unlock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  56.0k|        Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  419|       |
  420|       |    errno = err;
  421|  56.0k|    return;
  422|  56.0k|}
ceval_gil.c:update_eval_breaker_for_thread:
   74|  56.0k|{
   75|       |#ifdef Py_GIL_DISABLED
   76|       |    // Free-threaded builds eagerly update the eval_breaker on *all* threads as
   77|       |    // needed, so this function doesn't apply.
   78|       |    return;
   79|       |#endif
   80|       |
   81|  56.0k|    int32_t npending = _Py_atomic_load_int32_relaxed(
   82|  56.0k|        &interp->ceval.pending.npending);
   83|  56.0k|    if (npending) {
  ------------------
  |  Branch (83:9): [True: 0, False: 56.0k]
  ------------------
   84|      0|        _Py_set_eval_breaker_bit(tstate, _PY_CALLS_TO_DO_BIT);
  ------------------
  |  |  347|      0|#define _PY_CALLS_TO_DO_BIT (1U << 2)
  ------------------
   85|      0|    }
   86|  56.0k|    else if (_Py_IsMainThread()) {
  ------------------
  |  Branch (86:14): [True: 56.0k, False: 0]
  ------------------
   87|  56.0k|        npending = _Py_atomic_load_int32_relaxed(
   88|  56.0k|            &_PyRuntime.ceval.pending_mainthread.npending);
   89|  56.0k|        if (npending) {
  ------------------
  |  Branch (89:13): [True: 0, False: 56.0k]
  ------------------
   90|      0|            _Py_set_eval_breaker_bit(tstate, _PY_CALLS_TO_DO_BIT);
  ------------------
  |  |  347|      0|#define _PY_CALLS_TO_DO_BIT (1U << 2)
  ------------------
   91|      0|        }
   92|  56.0k|    }
   93|       |
   94|       |    // _PY_CALLS_TO_DO_BIT was derived from other state above, so the only bits
   95|       |    // we copy from our interpreter's state are the instrumentation version.
   96|  56.0k|    copy_eval_breaker_bits(&interp->ceval.instrumentation_version,
   97|  56.0k|                           &tstate->eval_breaker,
   98|  56.0k|                           ~_PY_EVAL_EVENTS_MASK);
  ------------------
  |  |  356|  56.0k|#define _PY_EVAL_EVENTS_MASK ((1 << _PY_EVAL_EVENTS_BITS)-1)
  |  |  ------------------
  |  |  |  |  355|  56.0k|#define _PY_EVAL_EVENTS_BITS 8
  |  |  ------------------
  ------------------
   99|  56.0k|}
ceval_gil.c:copy_eval_breaker_bits:
   56|  56.0k|{
   57|  56.0k|    uintptr_t from_bits = _Py_atomic_load_uintptr_relaxed(from) & mask;
   58|  56.0k|    uintptr_t old_value = _Py_atomic_load_uintptr_relaxed(to);
   59|  56.0k|    uintptr_t to_bits = old_value & mask;
   60|  56.0k|    if (from_bits == to_bits) {
  ------------------
  |  Branch (60:9): [True: 56.0k, False: 0]
  ------------------
   61|  56.0k|        return;
   62|  56.0k|    }
   63|       |
   64|      0|    uintptr_t new_value;
   65|      0|    do {
   66|      0|        new_value = (old_value & ~mask) | from_bits;
   67|      0|    } while (!_Py_atomic_compare_exchange_uintptr(to, &old_value, new_value));
  ------------------
  |  Branch (67:14): [True: 0, False: 0]
  ------------------
   68|      0|}
ceval_gil.c:drop_gil:
  218|  56.0k|{
  219|  56.0k|    struct _ceval_state *ceval = &interp->ceval;
  220|       |    /* If final_release is true, the caller is indicating that we're releasing
  221|       |       the GIL for the last time in this thread.  This is particularly
  222|       |       relevant when the current thread state is finalizing or its
  223|       |       interpreter is finalizing (either may be in an inconsistent
  224|       |       state).  In that case the current thread will definitely
  225|       |       never try to acquire the GIL again. */
  226|       |    // XXX It may be more correct to check tstate->_status.finalizing.
  227|       |    // XXX assert(final_release || !tstate->_status.cleared);
  228|       |
  229|  56.0k|    assert(final_release || tstate != NULL);
  ------------------
  |  Branch (229:5): [True: 0, False: 56.0k]
  |  Branch (229:5): [True: 56.0k, False: 0]
  ------------------
  230|  56.0k|    struct _gil_runtime_state *gil = ceval->gil;
  231|       |#ifdef Py_GIL_DISABLED
  232|       |    // Check if we have the GIL before dropping it. tstate will be NULL if
  233|       |    // take_gil() detected that this thread has been destroyed, in which case
  234|       |    // we know we have the GIL.
  235|       |    if (tstate != NULL && !tstate->holds_gil) {
  236|       |        return;
  237|       |    }
  238|       |#endif
  239|  56.0k|    if (!_Py_atomic_load_int_relaxed(&gil->locked)) {
  ------------------
  |  Branch (239:9): [True: 0, False: 56.0k]
  ------------------
  240|      0|        Py_FatalError("drop_gil: GIL is not locked");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  241|      0|    }
  242|       |
  243|  56.0k|    if (!final_release) {
  ------------------
  |  Branch (243:9): [True: 56.0k, False: 0]
  ------------------
  244|       |        /* Sub-interpreter support: threads might have been switched
  245|       |           under our feet using PyThreadState_Swap(). Fix the GIL last
  246|       |           holder variable so that our heuristics work. */
  247|  56.0k|        _Py_atomic_store_ptr_relaxed(&gil->last_holder, tstate);
  248|  56.0k|    }
  249|       |
  250|  56.0k|    drop_gil_impl(tstate, gil);
  251|       |
  252|  56.0k|#ifdef FORCE_SWITCHING
  253|       |    /* We might be releasing the GIL for the last time in this thread.  In that
  254|       |       case there's a possible race with tstate->interp getting deleted after
  255|       |       gil->mutex is unlocked and before the following code runs, leading to a
  256|       |       crash.  We can use final_release to indicate the thread is done with the
  257|       |       GIL, and that's the only time we might delete the interpreter.  See
  258|       |       https://github.com/python/cpython/issues/104341. */
  259|  56.0k|    if (!final_release &&
  ------------------
  |  Branch (259:9): [True: 56.0k, False: 0]
  ------------------
  260|  56.0k|        _Py_eval_breaker_bit_is_set(tstate, _PY_GIL_DROP_REQUEST_BIT)) {
  ------------------
  |  |  345|  56.0k|#define _PY_GIL_DROP_REQUEST_BIT (1U << 0)
  ------------------
  |  Branch (260:9): [True: 0, False: 56.0k]
  ------------------
  261|      0|        MUTEX_LOCK(gil->switch_mutex);
  ------------------
  |  |  117|      0|    if (PyMUTEX_LOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   59|      0|#define PyMUTEX_LOCK(mut)       pthread_mutex_lock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  118|      0|        Py_FatalError("PyMUTEX_LOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  262|       |        /* Not switched yet => wait */
  263|      0|        if (((PyThreadState*)_Py_atomic_load_ptr_relaxed(&gil->last_holder)) == tstate)
  ------------------
  |  Branch (263:13): [True: 0, False: 0]
  ------------------
  264|      0|        {
  265|      0|            assert(_PyThreadState_CheckConsistency(tstate));
  ------------------
  |  Branch (265:13): [True: 0, False: 0]
  ------------------
  266|      0|            _Py_unset_eval_breaker_bit(tstate, _PY_GIL_DROP_REQUEST_BIT);
  ------------------
  |  |  345|      0|#define _PY_GIL_DROP_REQUEST_BIT (1U << 0)
  ------------------
  267|       |            /* NOTE: if COND_WAIT does not atomically start waiting when
  268|       |               releasing the mutex, another thread can run through, take
  269|       |               the GIL and drop it again, and reset the condition
  270|       |               before we even had a chance to wait for it. */
  271|      0|            COND_WAIT(gil->switch_cond, gil->switch_mutex);
  ------------------
  |  |  133|      0|    if (PyCOND_WAIT(&(cond), &(mut))) { \
  |  |  ------------------
  |  |  |  |   66|      0|#define PyCOND_WAIT(cond, mut)  pthread_cond_wait((cond), (mut))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (66:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      0|        Py_FatalError("PyCOND_WAIT(" #cond ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  272|      0|        }
  273|      0|        MUTEX_UNLOCK(gil->switch_mutex);
  ------------------
  |  |  120|      0|    if (PyMUTEX_UNLOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   60|      0|#define PyMUTEX_UNLOCK(mut)     pthread_mutex_unlock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:33): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      0|        Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  274|      0|    }
  275|  56.0k|#endif
  276|  56.0k|}
ceval_gil.c:drop_gil_impl:
  204|  56.0k|{
  205|  56.0k|    MUTEX_LOCK(gil->mutex);
  ------------------
  |  |  117|  56.0k|    if (PyMUTEX_LOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   59|  56.0k|#define PyMUTEX_LOCK(mut)       pthread_mutex_lock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  118|  56.0k|        Py_FatalError("PyMUTEX_LOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  206|  56.0k|    _Py_ANNOTATE_RWLOCK_RELEASED(&gil->locked, /*is_write=*/1);
  207|  56.0k|    _Py_atomic_store_int_relaxed(&gil->locked, 0);
  208|  56.0k|    if (tstate != NULL) {
  ------------------
  |  Branch (208:9): [True: 56.0k, False: 0]
  ------------------
  209|  56.0k|        tstate->holds_gil = 0;
  210|  56.0k|        tstate->gil_requested = 0;
  211|  56.0k|    }
  212|  56.0k|    COND_SIGNAL(gil->cond);
  ------------------
  |  |  130|  56.0k|    if (PyCOND_SIGNAL(&(cond))) { \
  |  |  ------------------
  |  |  |  |   64|  56.0k|#define PyCOND_SIGNAL(cond)     pthread_cond_signal(cond)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  131|  56.0k|        Py_FatalError("PyCOND_SIGNAL(" #cond ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  213|  56.0k|    MUTEX_UNLOCK(gil->mutex);
  ------------------
  |  |  120|  56.0k|    if (PyMUTEX_UNLOCK(&(mut))) { \
  |  |  ------------------
  |  |  |  |   60|  56.0k|#define PyMUTEX_UNLOCK(mut)     pthread_mutex_unlock(mut)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:33): [True: 0, False: 56.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  56.0k|        Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
  |  |  ------------------
  |  |  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  |  |  ------------------
  ------------------
  214|  56.0k|}
ceval_gil.c:_gil_initialize:
  150|      2|{
  151|      2|    gil->locked = -1;
  152|      2|    gil->interval = DEFAULT_INTERVAL;
  ------------------
  |  |  147|      2|#define DEFAULT_INTERVAL 5000
  ------------------
  153|      2|}

ceval.c:_Py_EnterRecursivePy:
  427|   194k|static inline int _Py_EnterRecursivePy(PyThreadState *tstate) {
  428|   194k|    return (tstate->py_recursion_remaining-- <= 0) &&
  ------------------
  |  Branch (428:12): [True: 0, False: 194k]
  ------------------
  429|      0|        _Py_CheckRecursiveCallPy(tstate);
  ------------------
  |  Branch (429:9): [True: 0, False: 0]
  ------------------
  430|   194k|}
ceval.c:check_periodics_at_end:
  552|  20.8M|check_periodics_at_end(PyThreadState *tstate, _PyInterpreterFrame *frame) {
  553|  20.8M|    _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
  554|  20.8M|    QSBR_QUIESCENT_STATE(tstate);
  555|  20.8M|    if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
  ------------------
  |  |  356|  20.8M|#define _PY_EVAL_EVENTS_MASK ((1 << _PY_EVAL_EVENTS_BITS)-1)
  |  |  ------------------
  |  |  |  |  355|  20.8M|#define _PY_EVAL_EVENTS_BITS 8
  |  |  ------------------
  ------------------
  |  Branch (555:9): [True: 6, False: 20.8M]
  ------------------
  556|       |        // Do not handle pending interrupts if the previous instruction was LOAD_SPECIAL
  557|       |        // This may also not handle interrupts if a cache looks like LOAD_SPECIAL,
  558|       |        // but this is benign as we won't skip periodic checks indefinitely.
  559|      6|        if (frame->instr_ptr[-1].op.code == LOAD_SPECIAL) {
  ------------------
  |  |  104|      6|#define LOAD_SPECIAL                            91
  ------------------
  |  Branch (559:13): [True: 0, False: 6]
  ------------------
  560|      0|            return 0;
  561|      0|        }
  562|      6|        return _Py_HandlePending(tstate);
  563|      6|    }
  564|  20.8M|    return 0;
  565|  20.8M|}
ceval.c:gen_try_set_executing:
  571|    221|{
  572|       |#ifdef Py_GIL_DISABLED
  573|       |    if (!_PyObject_IsUniquelyReferenced((PyObject *)gen)) {
  574|       |        int8_t frame_state = _Py_atomic_load_int8_relaxed(&gen->gi_frame_state);
  575|       |        while (frame_state < FRAME_SUSPENDED_YIELD_FROM_LOCKED) {
  576|       |            if (_Py_atomic_compare_exchange_int8(&gen->gi_frame_state,
  577|       |                                                 &frame_state,
  578|       |                                                 FRAME_EXECUTING)) {
  579|       |                return true;
  580|       |            }
  581|       |        }
  582|       |        // NB: We return false for FRAME_SUSPENDED_YIELD_FROM_LOCKED as well.
  583|       |        // That case is rare enough that we can just handle it in the deopt.
  584|       |        return false;
  585|       |    }
  586|       |#endif
  587|       |    // Use faster non-atomic modifications in the GIL-enabled build and when
  588|       |    // the object is uniquely referenced in the free-threaded build.
  589|    221|    if (gen->gi_frame_state < FRAME_EXECUTING) {
  ------------------
  |  Branch (589:9): [True: 221, False: 0]
  ------------------
  590|    221|        assert(gen->gi_frame_state != FRAME_SUSPENDED_YIELD_FROM_LOCKED);
  ------------------
  |  Branch (590:9): [True: 221, False: 0]
  ------------------
  591|    221|        gen->gi_frame_state = FRAME_EXECUTING;
  592|    221|        return true;
  593|    221|    }
  594|      0|    return false;
  595|    221|}
ceval.c:check_periodics:
  542|  26.7M|check_periodics(PyThreadState *tstate) {
  543|  26.7M|    _Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
  544|  26.7M|    QSBR_QUIESCENT_STATE(tstate);
  545|  26.7M|    if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
  ------------------
  |  |  356|  26.7M|#define _PY_EVAL_EVENTS_MASK ((1 << _PY_EVAL_EVENTS_BITS)-1)
  |  |  ------------------
  |  |  |  |  355|  26.7M|#define _PY_EVAL_EVENTS_BITS 8
  |  |  ------------------
  ------------------
  |  Branch (545:9): [True: 187, False: 26.7M]
  ------------------
  546|    187|        return _Py_HandlePending(tstate);
  547|    187|    }
  548|  26.7M|    return 0;
  549|  26.7M|}
ceval.c:_Py_LeaveRecursiveCallPy:
  432|  6.71M|static inline void _Py_LeaveRecursiveCallPy(PyThreadState *tstate)  {
  433|  6.71M|    tstate->py_recursion_remaining++;
  434|  6.71M|}

bltinmodule.c:builtin___import__:
   42|  52.1k|{
   43|  52.1k|    PyObject *return_value = NULL;
   44|  52.1k|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
   45|       |
   46|  52.1k|    #define NUM_KEYWORDS 5
   47|  52.1k|    static struct {
   48|  52.1k|        PyGC_Head _this_is_not_used;
   49|  52.1k|        PyObject_VAR_HEAD
   50|  52.1k|        Py_hash_t ob_hash;
   51|  52.1k|        PyObject *ob_item[NUM_KEYWORDS];
   52|  52.1k|    } _kwtuple = {
   53|  52.1k|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|  52.1k|    {                                     \
  |  |   98|  52.1k|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|  52.1k|    {                               \
  |  |  |  |   91|  52.1k|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|  52.1k|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  52.1k|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|  52.1k|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|  52.1k|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|  52.1k|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  52.1k|        (type)                      \
  |  |  |  |   93|  52.1k|    },
  |  |  ------------------
  |  |   99|  52.1k|        (size)                            \
  |  |  100|  52.1k|    },
  ------------------
   54|  52.1k|        .ob_hash = -1,
   55|  52.1k|        .ob_item = { &_Py_ID(name), &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(fromlist), &_Py_ID(level), },
  ------------------
  |  |  936|  52.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  52.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  52.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(name), &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(fromlist), &_Py_ID(level), },
  ------------------
  |  |  936|  52.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  52.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  52.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(name), &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(fromlist), &_Py_ID(level), },
  ------------------
  |  |  936|  52.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  52.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  52.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(name), &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(fromlist), &_Py_ID(level), },
  ------------------
  |  |  936|  52.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  52.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  52.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(name), &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(fromlist), &_Py_ID(level), },
  ------------------
  |  |  936|  52.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  52.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  52.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   56|  52.1k|    };
   57|  52.1k|    #undef NUM_KEYWORDS
   58|  52.1k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
   59|       |
   60|       |    #else  // !Py_BUILD_CORE
   61|       |    #  define KWTUPLE NULL
   62|       |    #endif  // !Py_BUILD_CORE
   63|       |
   64|  52.1k|    static const char * const _keywords[] = {"name", "globals", "locals", "fromlist", "level", NULL};
   65|  52.1k|    static _PyArg_Parser _parser = {
   66|  52.1k|        .keywords = _keywords,
   67|  52.1k|        .fname = "__import__",
   68|  52.1k|        .kwtuple = KWTUPLE,
  ------------------
  |  |   58|  52.1k|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
   69|  52.1k|    };
   70|  52.1k|    #undef KWTUPLE
   71|  52.1k|    PyObject *argsbuf[5];
   72|  52.1k|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|    311|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    311|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    311|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (72:36): [True: 311, False: 51.7k]
  ------------------
   73|  52.1k|    PyObject *name;
   74|  52.1k|    PyObject *globals = NULL;
   75|  52.1k|    PyObject *locals = NULL;
   76|  52.1k|    PyObject *fromlist = NULL;
   77|  52.1k|    int level = 0;
   78|       |
   79|  52.1k|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|  52.1k|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 51.7k, False: 311]
  |  |  ------------------
  |  |   89|  52.1k|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 51.7k, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 51.7k]
  |  |  |  Branch (89:43): [True: 51.7k, False: 0]
  |  |  |  Branch (89:67): [True: 51.7k, False: 0]
  |  |  ------------------
  |  |   90|  52.1k|      (args) : \
  |  |   91|  52.1k|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|    311|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
   80|  52.1k|            /*minpos*/ 1, /*maxpos*/ 5, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
   81|  52.1k|    if (!args) {
  ------------------
  |  Branch (81:9): [True: 0, False: 52.1k]
  ------------------
   82|      0|        goto exit;
   83|      0|    }
   84|  52.1k|    name = args[0];
   85|  52.1k|    if (!noptargs) {
  ------------------
  |  Branch (85:9): [True: 13, False: 52.0k]
  ------------------
   86|     13|        goto skip_optional_pos;
   87|     13|    }
   88|  52.0k|    if (args[1]) {
  ------------------
  |  Branch (88:9): [True: 51.7k, False: 311]
  ------------------
   89|  51.7k|        globals = args[1];
   90|  51.7k|        if (!--noptargs) {
  ------------------
  |  Branch (90:13): [True: 0, False: 51.7k]
  ------------------
   91|      0|            goto skip_optional_pos;
   92|      0|        }
   93|  51.7k|    }
   94|  52.0k|    if (args[2]) {
  ------------------
  |  Branch (94:9): [True: 51.7k, False: 311]
  ------------------
   95|  51.7k|        locals = args[2];
   96|  51.7k|        if (!--noptargs) {
  ------------------
  |  Branch (96:13): [True: 0, False: 51.7k]
  ------------------
   97|      0|            goto skip_optional_pos;
   98|      0|        }
   99|  51.7k|    }
  100|  52.0k|    if (args[3]) {
  ------------------
  |  Branch (100:9): [True: 52.0k, False: 0]
  ------------------
  101|  52.0k|        fromlist = args[3];
  102|  52.0k|        if (!--noptargs) {
  ------------------
  |  Branch (102:13): [True: 0, False: 52.0k]
  ------------------
  103|      0|            goto skip_optional_pos;
  104|      0|        }
  105|  52.0k|    }
  106|  52.0k|    level = PyLong_AsInt(args[4]);
  107|  52.0k|    if (level == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (107:9): [True: 0, False: 52.0k]
  |  Branch (107:24): [True: 0, False: 0]
  ------------------
  108|      0|        goto exit;
  109|      0|    }
  110|  52.1k|skip_optional_pos:
  111|  52.1k|    return_value = builtin___import___impl(module, name, globals, locals, fromlist, level);
  112|       |
  113|  52.1k|exit:
  114|  52.1k|    return return_value;
  115|  52.1k|}
bltinmodule.c:builtin_delattr:
  811|     36|{
  812|     36|    PyObject *return_value = NULL;
  813|     36|    PyObject *obj;
  814|     36|    PyObject *name;
  815|       |
  816|     36|    if (!_PyArg_CheckPositional("delattr", nargs, 2, 2)) {
  ------------------
  |  |   31|     36|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 36, False: 0]
  |  |  |  Branch (31:27): [True: 36, False: 0]
  |  |  ------------------
  |  |   32|     36|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  817|      0|        goto exit;
  818|      0|    }
  819|     36|    obj = args[0];
  820|     36|    name = args[1];
  821|     36|    return_value = builtin_delattr_impl(module, obj, name);
  822|       |
  823|     36|exit:
  824|     36|    return return_value;
  825|     36|}
bltinmodule.c:builtin_divmod:
  495|    106|{
  496|    106|    PyObject *return_value = NULL;
  497|    106|    PyObject *x;
  498|    106|    PyObject *y;
  499|       |
  500|    106|    if (!_PyArg_CheckPositional("divmod", nargs, 2, 2)) {
  ------------------
  |  |   31|    106|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 106, False: 0]
  |  |  |  Branch (31:27): [True: 106, False: 0]
  |  |  ------------------
  |  |   32|    106|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  501|      0|        goto exit;
  502|      0|    }
  503|    106|    x = args[0];
  504|    106|    y = args[1];
  505|    106|    return_value = builtin_divmod_impl(module, x, y);
  506|       |
  507|    106|exit:
  508|    106|    return return_value;
  509|    106|}
bltinmodule.c:builtin_eval:
  532|      3|{
  533|      3|    PyObject *return_value = NULL;
  534|      3|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  535|       |
  536|      3|    #define NUM_KEYWORDS 2
  537|      3|    static struct {
  538|      3|        PyGC_Head _this_is_not_used;
  539|      3|        PyObject_VAR_HEAD
  540|      3|        Py_hash_t ob_hash;
  541|      3|        PyObject *ob_item[NUM_KEYWORDS];
  542|      3|    } _kwtuple = {
  543|      3|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      3|    {                                     \
  |  |   98|      3|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      3|    {                               \
  |  |  |  |   91|      3|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      3|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      3|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      3|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      3|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      3|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      3|        (type)                      \
  |  |  |  |   93|      3|    },
  |  |  ------------------
  |  |   99|      3|        (size)                            \
  |  |  100|      3|    },
  ------------------
  544|      3|        .ob_hash = -1,
  545|      3|        .ob_item = { &_Py_ID(globals), &_Py_ID(locals), },
  ------------------
  |  |  936|      3|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      3|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      3|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(globals), &_Py_ID(locals), },
  ------------------
  |  |  936|      3|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      3|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      3|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|      3|    };
  547|      3|    #undef NUM_KEYWORDS
  548|      3|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  549|       |
  550|       |    #else  // !Py_BUILD_CORE
  551|       |    #  define KWTUPLE NULL
  552|       |    #endif  // !Py_BUILD_CORE
  553|       |
  554|      3|    static const char * const _keywords[] = {"", "globals", "locals", NULL};
  555|      3|    static _PyArg_Parser _parser = {
  556|      3|        .keywords = _keywords,
  557|      3|        .fname = "eval",
  558|      3|        .kwtuple = KWTUPLE,
  ------------------
  |  |  548|      3|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  559|      3|    };
  560|      3|    #undef KWTUPLE
  561|      3|    PyObject *argsbuf[3];
  562|      3|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (562:36): [True: 0, False: 3]
  ------------------
  563|      3|    PyObject *source;
  564|      3|    PyObject *globals = Py_None;
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
  565|      3|    PyObject *locals = Py_None;
  ------------------
  |  |  616|      3|#  define Py_None (&_Py_NoneStruct)
  ------------------
  566|       |
  567|      3|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      3|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 3, False: 0]
  |  |  ------------------
  |  |   89|      3|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 3, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 3]
  |  |  |  Branch (89:43): [True: 3, False: 0]
  |  |  |  Branch (89:67): [True: 3, False: 0]
  |  |  ------------------
  |  |   90|      3|      (args) : \
  |  |   91|      3|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  568|      3|            /*minpos*/ 1, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  569|      3|    if (!args) {
  ------------------
  |  Branch (569:9): [True: 0, False: 3]
  ------------------
  570|      0|        goto exit;
  571|      0|    }
  572|      3|    source = args[0];
  573|      3|    if (!noptargs) {
  ------------------
  |  Branch (573:9): [True: 0, False: 3]
  ------------------
  574|      0|        goto skip_optional_pos;
  575|      0|    }
  576|      3|    if (args[1]) {
  ------------------
  |  Branch (576:9): [True: 3, False: 0]
  ------------------
  577|      3|        globals = args[1];
  578|      3|        if (!--noptargs) {
  ------------------
  |  Branch (578:13): [True: 3, False: 0]
  ------------------
  579|      3|            goto skip_optional_pos;
  580|      3|        }
  581|      3|    }
  582|      0|    locals = args[2];
  583|      3|skip_optional_pos:
  584|      3|    return_value = builtin_eval_impl(module, source, globals, locals);
  585|       |
  586|      3|exit:
  587|      3|    return return_value;
  588|      3|}
bltinmodule.c:builtin_exec:
  613|    117|{
  614|    117|    PyObject *return_value = NULL;
  615|    117|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  616|       |
  617|    117|    #define NUM_KEYWORDS 3
  618|    117|    static struct {
  619|    117|        PyGC_Head _this_is_not_used;
  620|    117|        PyObject_VAR_HEAD
  621|    117|        Py_hash_t ob_hash;
  622|    117|        PyObject *ob_item[NUM_KEYWORDS];
  623|    117|    } _kwtuple = {
  624|    117|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    117|    {                                     \
  |  |   98|    117|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    117|    {                               \
  |  |  |  |   91|    117|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    117|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    117|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    117|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    117|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    117|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    117|        (type)                      \
  |  |  |  |   93|    117|    },
  |  |  ------------------
  |  |   99|    117|        (size)                            \
  |  |  100|    117|    },
  ------------------
  625|    117|        .ob_hash = -1,
  626|    117|        .ob_item = { &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(closure), },
  ------------------
  |  |  936|    117|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    117|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    117|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(closure), },
  ------------------
  |  |  936|    117|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    117|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    117|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(globals), &_Py_ID(locals), &_Py_ID(closure), },
  ------------------
  |  |  936|    117|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    117|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    117|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  627|    117|    };
  628|    117|    #undef NUM_KEYWORDS
  629|    117|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  630|       |
  631|       |    #else  // !Py_BUILD_CORE
  632|       |    #  define KWTUPLE NULL
  633|       |    #endif  // !Py_BUILD_CORE
  634|       |
  635|    117|    static const char * const _keywords[] = {"", "globals", "locals", "closure", NULL};
  636|    117|    static _PyArg_Parser _parser = {
  637|    117|        .keywords = _keywords,
  638|    117|        .fname = "exec",
  639|    117|        .kwtuple = KWTUPLE,
  ------------------
  |  |  629|    117|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  640|    117|    };
  641|    117|    #undef KWTUPLE
  642|    117|    PyObject *argsbuf[4];
  643|    117|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (643:36): [True: 0, False: 117]
  ------------------
  644|    117|    PyObject *source;
  645|    117|    PyObject *globals = Py_None;
  ------------------
  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  ------------------
  646|    117|    PyObject *locals = Py_None;
  ------------------
  |  |  616|    117|#  define Py_None (&_Py_NoneStruct)
  ------------------
  647|    117|    PyObject *closure = NULL;
  648|       |
  649|    117|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    117|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 117, False: 0]
  |  |  ------------------
  |  |   89|    117|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 117, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 117]
  |  |  |  Branch (89:43): [True: 117, False: 0]
  |  |  |  Branch (89:67): [True: 117, False: 0]
  |  |  ------------------
  |  |   90|    117|      (args) : \
  |  |   91|    117|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  650|    117|            /*minpos*/ 1, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  651|    117|    if (!args) {
  ------------------
  |  Branch (651:9): [True: 0, False: 117]
  ------------------
  652|      0|        goto exit;
  653|      0|    }
  654|    117|    source = args[0];
  655|    117|    if (!noptargs) {
  ------------------
  |  Branch (655:9): [True: 0, False: 117]
  ------------------
  656|      0|        goto skip_optional_pos;
  657|      0|    }
  658|    117|    if (args[1]) {
  ------------------
  |  Branch (658:9): [True: 117, False: 0]
  ------------------
  659|    117|        globals = args[1];
  660|    117|        if (!--noptargs) {
  ------------------
  |  Branch (660:13): [True: 117, False: 0]
  ------------------
  661|    117|            goto skip_optional_pos;
  662|    117|        }
  663|    117|    }
  664|      0|    if (args[2]) {
  ------------------
  |  Branch (664:9): [True: 0, False: 0]
  ------------------
  665|      0|        locals = args[2];
  666|      0|        if (!--noptargs) {
  ------------------
  |  Branch (666:13): [True: 0, False: 0]
  ------------------
  667|      0|            goto skip_optional_pos;
  668|      0|        }
  669|      0|    }
  670|    117|skip_optional_pos:
  671|    117|    if (!noptargs) {
  ------------------
  |  Branch (671:9): [True: 117, False: 0]
  ------------------
  672|    117|        goto skip_optional_kwonly;
  673|    117|    }
  674|      0|    closure = args[3];
  675|    117|skip_optional_kwonly:
  676|    117|    return_value = builtin_exec_impl(module, source, globals, locals, closure);
  677|       |
  678|    117|exit:
  679|    117|    return return_value;
  680|    117|}
bltinmodule.c:builtin_globals:
  699|     45|{
  700|     45|    return builtin_globals_impl(module);
  701|     45|}
bltinmodule.c:builtin_hasattr:
  719|    370|{
  720|    370|    PyObject *return_value = NULL;
  721|    370|    PyObject *obj;
  722|    370|    PyObject *name;
  723|       |
  724|    370|    if (!_PyArg_CheckPositional("hasattr", nargs, 2, 2)) {
  ------------------
  |  |   31|    370|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 370, False: 0]
  |  |  |  Branch (31:27): [True: 370, False: 0]
  |  |  ------------------
  |  |   32|    370|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  725|      0|        goto exit;
  726|      0|    }
  727|    370|    obj = args[0];
  728|    370|    name = args[1];
  729|    370|    return_value = builtin_hasattr_impl(module, obj, name);
  730|       |
  731|    370|exit:
  732|    370|    return return_value;
  733|    370|}
bltinmodule.c:builtin_isinstance:
 1454|     72|{
 1455|     72|    PyObject *return_value = NULL;
 1456|     72|    PyObject *obj;
 1457|     72|    PyObject *class_or_tuple;
 1458|       |
 1459|     72|    if (!_PyArg_CheckPositional("isinstance", nargs, 2, 2)) {
  ------------------
  |  |   31|     72|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 72, False: 0]
  |  |  |  Branch (31:27): [True: 72, False: 0]
  |  |  ------------------
  |  |   32|     72|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1460|      0|        goto exit;
 1461|      0|    }
 1462|     72|    obj = args[0];
 1463|     72|    class_or_tuple = args[1];
 1464|     72|    return_value = builtin_isinstance_impl(module, obj, class_or_tuple);
 1465|       |
 1466|     72|exit:
 1467|     72|    return return_value;
 1468|     72|}
bltinmodule.c:builtin_issubclass:
 1489|     10|{
 1490|     10|    PyObject *return_value = NULL;
 1491|     10|    PyObject *cls;
 1492|     10|    PyObject *class_or_tuple;
 1493|       |
 1494|     10|    if (!_PyArg_CheckPositional("issubclass", nargs, 2, 2)) {
  ------------------
  |  |   31|     10|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 10, False: 0]
  |  |  |  Branch (31:27): [True: 10, False: 0]
  |  |  ------------------
  |  |   32|     10|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1495|      0|        goto exit;
 1496|      0|    }
 1497|     10|    cls = args[0];
 1498|     10|    class_or_tuple = args[1];
 1499|     10|    return_value = builtin_issubclass_impl(module, cls, class_or_tuple);
 1500|       |
 1501|     10|exit:
 1502|     10|    return return_value;
 1503|     10|}
bltinmodule.c:builtin_iter:
  872|     26|{
  873|     26|    PyObject *return_value = NULL;
  874|     26|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  875|       |
  876|     26|    #define NUM_KEYWORDS 2
  877|     26|    static struct {
  878|     26|        PyGC_Head _this_is_not_used;
  879|     26|        PyObject_VAR_HEAD
  880|     26|        Py_hash_t ob_hash;
  881|     26|        PyObject *ob_item[NUM_KEYWORDS];
  882|     26|    } _kwtuple = {
  883|     26|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     26|    {                                     \
  |  |   98|     26|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     26|    {                               \
  |  |  |  |   91|     26|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     26|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     26|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     26|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     26|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     26|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     26|        (type)                      \
  |  |  |  |   93|     26|    },
  |  |  ------------------
  |  |   99|     26|        (size)                            \
  |  |  100|     26|    },
  ------------------
  884|     26|        .ob_hash = -1,
  885|     26|        .ob_item = { &_Py_ID(stop_value), &_Py_ID(stop_exception), },
  ------------------
  |  |  936|     26|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     26|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     26|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(stop_value), &_Py_ID(stop_exception), },
  ------------------
  |  |  936|     26|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     26|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     26|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  886|     26|    };
  887|     26|    #undef NUM_KEYWORDS
  888|     26|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  889|       |
  890|       |    #else  // !Py_BUILD_CORE
  891|       |    #  define KWTUPLE NULL
  892|       |    #endif  // !Py_BUILD_CORE
  893|       |
  894|     26|    static const char * const _keywords[] = {"", "stop_value", "stop_exception", NULL};
  895|     26|    static _PyArg_Parser _parser = {
  896|     26|        .keywords = _keywords,
  897|     26|        .fname = "iter",
  898|     26|        .kwtuple = KWTUPLE,
  ------------------
  |  |  888|     26|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  899|     26|    };
  900|     26|    #undef KWTUPLE
  901|     26|    PyObject *argsbuf[3];
  902|     26|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (902:36): [True: 0, False: 26]
  ------------------
  903|     26|    PyObject *object;
  904|     26|    PyObject *stop_value = NULL;
  905|     26|    PyObject *stop_exception = NULL;
  906|       |
  907|     26|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     26|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 26, False: 0]
  |  |  ------------------
  |  |   89|     26|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 26, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 26]
  |  |  |  Branch (89:43): [True: 26, False: 0]
  |  |  |  Branch (89:67): [True: 26, False: 0]
  |  |  ------------------
  |  |   90|     26|      (args) : \
  |  |   91|     26|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  908|     26|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  909|     26|    if (!args) {
  ------------------
  |  Branch (909:9): [True: 0, False: 26]
  ------------------
  910|      0|        goto exit;
  911|      0|    }
  912|     26|    object = args[0];
  913|     26|    if (!noptargs) {
  ------------------
  |  Branch (913:9): [True: 26, False: 0]
  ------------------
  914|     26|        goto skip_optional_pos;
  915|     26|    }
  916|      0|    if (args[1]) {
  ------------------
  |  Branch (916:9): [True: 0, False: 0]
  ------------------
  917|      0|        stop_value = args[1];
  918|      0|        if (!--noptargs) {
  ------------------
  |  Branch (918:13): [True: 0, False: 0]
  ------------------
  919|      0|            goto skip_optional_pos;
  920|      0|        }
  921|      0|    }
  922|     26|skip_optional_pos:
  923|     26|    if (!noptargs) {
  ------------------
  |  Branch (923:9): [True: 26, False: 0]
  ------------------
  924|     26|        goto skip_optional_kwonly;
  925|     26|    }
  926|      0|    stop_exception = args[2];
  927|     26|skip_optional_kwonly:
  928|     26|    return_value = builtin_iter_impl(module, object, stop_value, stop_exception);
  929|       |
  930|     26|exit:
  931|     26|    return return_value;
  932|     26|}
bltinmodule.c:builtin_pow:
 1091|      1|{
 1092|      1|    PyObject *return_value = NULL;
 1093|      1|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1094|       |
 1095|      1|    #define NUM_KEYWORDS 3
 1096|      1|    static struct {
 1097|      1|        PyGC_Head _this_is_not_used;
 1098|      1|        PyObject_VAR_HEAD
 1099|      1|        Py_hash_t ob_hash;
 1100|      1|        PyObject *ob_item[NUM_KEYWORDS];
 1101|      1|    } _kwtuple = {
 1102|      1|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      1|    {                                     \
  |  |   98|      1|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      1|    {                               \
  |  |  |  |   91|      1|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      1|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      1|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      1|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      1|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      1|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      1|        (type)                      \
  |  |  |  |   93|      1|    },
  |  |  ------------------
  |  |   99|      1|        (size)                            \
  |  |  100|      1|    },
  ------------------
 1103|      1|        .ob_hash = -1,
 1104|      1|        .ob_item = { &_Py_ID(base), &_Py_ID(exp), &_Py_ID(mod), },
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(base), &_Py_ID(exp), &_Py_ID(mod), },
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      .ob_item = { &_Py_ID(base), &_Py_ID(exp), &_Py_ID(mod), },
  ------------------
  |  |  936|      1|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      1|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      1|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|      1|    };
 1106|      1|    #undef NUM_KEYWORDS
 1107|      1|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1108|       |
 1109|       |    #else  // !Py_BUILD_CORE
 1110|       |    #  define KWTUPLE NULL
 1111|       |    #endif  // !Py_BUILD_CORE
 1112|       |
 1113|      1|    static const char * const _keywords[] = {"base", "exp", "mod", NULL};
 1114|      1|    static _PyArg_Parser _parser = {
 1115|      1|        .keywords = _keywords,
 1116|      1|        .fname = "pow",
 1117|      1|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1107|      1|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1118|      1|    };
 1119|      1|    #undef KWTUPLE
 1120|      1|    PyObject *argsbuf[3];
 1121|      1|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1121:36): [True: 0, False: 1]
  ------------------
 1122|      1|    PyObject *base;
 1123|      1|    PyObject *exp;
 1124|      1|    PyObject *mod = Py_None;
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1125|       |
 1126|      1|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      1|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 1, False: 0]
  |  |  ------------------
  |  |   89|      1|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 1, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 1]
  |  |  |  Branch (89:43): [True: 1, False: 0]
  |  |  |  Branch (89:67): [True: 1, False: 0]
  |  |  ------------------
  |  |   90|      1|      (args) : \
  |  |   91|      1|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1127|      1|            /*minpos*/ 2, /*maxpos*/ 3, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1128|      1|    if (!args) {
  ------------------
  |  Branch (1128:9): [True: 0, False: 1]
  ------------------
 1129|      0|        goto exit;
 1130|      0|    }
 1131|      1|    base = args[0];
 1132|      1|    exp = args[1];
 1133|      1|    if (!noptargs) {
  ------------------
  |  Branch (1133:9): [True: 0, False: 1]
  ------------------
 1134|      0|        goto skip_optional_pos;
 1135|      0|    }
 1136|      1|    mod = args[2];
 1137|      1|skip_optional_pos:
 1138|      1|    return_value = builtin_pow_impl(module, base, exp, mod);
 1139|       |
 1140|      1|exit:
 1141|      1|    return return_value;
 1142|      1|}
bltinmodule.c:builtin_setattr:
  777|    212|{
  778|    212|    PyObject *return_value = NULL;
  779|    212|    PyObject *obj;
  780|    212|    PyObject *name;
  781|    212|    PyObject *value;
  782|       |
  783|    212|    if (!_PyArg_CheckPositional("setattr", nargs, 3, 3)) {
  ------------------
  |  |   31|    212|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 212, False: 0]
  |  |  |  Branch (31:27): [True: 212, False: 0]
  |  |  ------------------
  |  |   32|    212|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  784|      0|        goto exit;
  785|      0|    }
  786|    212|    obj = args[0];
  787|    212|    name = args[1];
  788|    212|    value = args[2];
  789|    212|    return_value = builtin_setattr_impl(module, obj, name, value);
  790|       |
  791|    212|exit:
  792|    212|    return return_value;
  793|    212|}
bltinmodule.c:builtin_sum:
 1384|    958|{
 1385|    958|    PyObject *return_value = NULL;
 1386|    958|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1387|       |
 1388|    958|    #define NUM_KEYWORDS 1
 1389|    958|    static struct {
 1390|    958|        PyGC_Head _this_is_not_used;
 1391|    958|        PyObject_VAR_HEAD
 1392|    958|        Py_hash_t ob_hash;
 1393|    958|        PyObject *ob_item[NUM_KEYWORDS];
 1394|    958|    } _kwtuple = {
 1395|    958|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    958|    {                                     \
  |  |   98|    958|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    958|    {                               \
  |  |  |  |   91|    958|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    958|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    958|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    958|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    958|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    958|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    958|        (type)                      \
  |  |  |  |   93|    958|    },
  |  |  ------------------
  |  |   99|    958|        (size)                            \
  |  |  100|    958|    },
  ------------------
 1396|    958|        .ob_hash = -1,
 1397|    958|        .ob_item = { &_Py_ID(start), },
  ------------------
  |  |  936|    958|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    958|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    958|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|    958|    };
 1399|    958|    #undef NUM_KEYWORDS
 1400|    958|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1401|       |
 1402|       |    #else  // !Py_BUILD_CORE
 1403|       |    #  define KWTUPLE NULL
 1404|       |    #endif  // !Py_BUILD_CORE
 1405|       |
 1406|    958|    static const char * const _keywords[] = {"", "start", NULL};
 1407|    958|    static _PyArg_Parser _parser = {
 1408|    958|        .keywords = _keywords,
 1409|    958|        .fname = "sum",
 1410|    958|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1400|    958|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1411|    958|    };
 1412|    958|    #undef KWTUPLE
 1413|    958|    PyObject *argsbuf[2];
 1414|    958|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1414:36): [True: 0, False: 958]
  ------------------
 1415|    958|    PyObject *iterable;
 1416|    958|    PyObject *start = NULL;
 1417|       |
 1418|    958|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    958|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 958, False: 0]
  |  |  ------------------
  |  |   89|    958|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 958, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 958]
  |  |  |  Branch (89:43): [True: 958, False: 0]
  |  |  |  Branch (89:67): [True: 958, False: 0]
  |  |  ------------------
  |  |   90|    958|      (args) : \
  |  |   91|    958|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1419|    958|            /*minpos*/ 1, /*maxpos*/ 2, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1420|    958|    if (!args) {
  ------------------
  |  Branch (1420:9): [True: 0, False: 958]
  ------------------
 1421|      0|        goto exit;
 1422|      0|    }
 1423|    958|    iterable = args[0];
 1424|    958|    if (!noptargs) {
  ------------------
  |  Branch (1424:9): [True: 958, False: 0]
  ------------------
 1425|    958|        goto skip_optional_pos;
 1426|    958|    }
 1427|      0|    start = args[1];
 1428|    958|skip_optional_pos:
 1429|    958|    return_value = builtin_sum_impl(module, iterable, start);
 1430|       |
 1431|    958|exit:
 1432|    958|    return return_value;
 1433|    958|}

context.c:_contextvars_ContextVar_get:
  141|      1|{
  142|      1|    PyObject *return_value = NULL;
  143|      1|    PyObject *default_value = NULL;
  144|       |
  145|      1|    if (!_PyArg_CheckPositional("get", nargs, 0, 1)) {
  ------------------
  |  |   31|      1|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 1, False: 0]
  |  |  |  Branch (31:27): [True: 1, False: 0]
  |  |  ------------------
  |  |   32|      1|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  146|      0|        goto exit;
  147|      0|    }
  148|      1|    if (nargs < 1) {
  ------------------
  |  Branch (148:9): [True: 1, False: 0]
  ------------------
  149|      1|        goto skip_optional;
  150|      1|    }
  151|      0|    default_value = args[0];
  152|      1|skip_optional:
  153|      1|    return_value = _contextvars_ContextVar_get_impl((PyContextVar *)self, default_value);
  154|       |
  155|      1|exit:
  156|      1|    return return_value;
  157|      1|}
context.c:_contextvars_ContextVar_set:
  179|      1|{
  180|      1|    PyObject *return_value = NULL;
  181|       |
  182|      1|    return_value = _contextvars_ContextVar_set_impl((PyContextVar *)self, value);
  183|       |
  184|      1|    return return_value;
  185|      1|}

import.c:_imp_extension_suffixes:
  140|      4|{
  141|      4|    return _imp_extension_suffixes_impl(module);
  142|      4|}
import.c:_imp_acquire_lock:
   49|  1.63k|{
   50|  1.63k|    return _imp_acquire_lock_impl(module);
   51|  1.63k|}
import.c:_imp_release_lock:
   69|  1.63k|{
   70|  1.63k|    return _imp_release_lock_impl(module);
   71|  1.63k|}
import.c:_imp_find_frozen:
  195|    311|{
  196|    311|    PyObject *return_value = NULL;
  197|    311|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  198|       |
  199|    311|    #define NUM_KEYWORDS 1
  200|    311|    static struct {
  201|    311|        PyGC_Head _this_is_not_used;
  202|    311|        PyObject_VAR_HEAD
  203|    311|        Py_hash_t ob_hash;
  204|    311|        PyObject *ob_item[NUM_KEYWORDS];
  205|    311|    } _kwtuple = {
  206|    311|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|    311|    {                                     \
  |  |   98|    311|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|    311|    {                               \
  |  |  |  |   91|    311|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|    311|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|    311|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|    311|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|    311|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|    311|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|    311|        (type)                      \
  |  |  |  |   93|    311|    },
  |  |  ------------------
  |  |   99|    311|        (size)                            \
  |  |  100|    311|    },
  ------------------
  207|    311|        .ob_hash = -1,
  208|    311|        .ob_item = { &_Py_ID(withdata), },
  ------------------
  |  |  936|    311|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    311|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    311|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|    311|    };
  210|    311|    #undef NUM_KEYWORDS
  211|    311|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  212|       |
  213|       |    #else  // !Py_BUILD_CORE
  214|       |    #  define KWTUPLE NULL
  215|       |    #endif  // !Py_BUILD_CORE
  216|       |
  217|    311|    static const char * const _keywords[] = {"", "withdata", NULL};
  218|    311|    static _PyArg_Parser _parser = {
  219|    311|        .keywords = _keywords,
  220|    311|        .fname = "find_frozen",
  221|    311|        .kwtuple = KWTUPLE,
  ------------------
  |  |  211|    311|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  222|    311|    };
  223|    311|    #undef KWTUPLE
  224|    311|    PyObject *argsbuf[2];
  225|    311|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (225:36): [True: 0, False: 311]
  ------------------
  226|    311|    PyObject *name;
  227|    311|    int withdata = 0;
  228|       |
  229|    311|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|    311|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 311, False: 0]
  |  |  ------------------
  |  |   89|    311|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 311, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 311]
  |  |  |  Branch (89:43): [True: 311, False: 0]
  |  |  |  Branch (89:67): [True: 311, False: 0]
  |  |  ------------------
  |  |   90|    311|      (args) : \
  |  |   91|    311|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  230|    311|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  231|    311|    if (!args) {
  ------------------
  |  Branch (231:9): [True: 0, False: 311]
  ------------------
  232|      0|        goto exit;
  233|      0|    }
  234|    311|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|    311|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    311|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (234:9): [True: 0, False: 311]
  ------------------
  235|      0|        _PyArg_BadArgument("find_frozen", "argument 1", "str", args[0]);
  236|      0|        goto exit;
  237|      0|    }
  238|    311|    name = args[0];
  239|    311|    if (!noptargs) {
  ------------------
  |  Branch (239:9): [True: 311, False: 0]
  ------------------
  240|    311|        goto skip_optional_kwonly;
  241|    311|    }
  242|      0|    withdata = PyObject_IsTrue(args[1]);
  243|      0|    if (withdata < 0) {
  ------------------
  |  Branch (243:9): [True: 0, False: 0]
  ------------------
  244|      0|        goto exit;
  245|      0|    }
  246|    311|skip_optional_kwonly:
  247|    311|    return_value = _imp_find_frozen_impl(module, name, withdata);
  248|       |
  249|    311|exit:
  250|    311|    return return_value;
  251|    311|}
import.c:_imp_get_frozen_object:
  268|     24|{
  269|     24|    PyObject *return_value = NULL;
  270|     24|    PyObject *name;
  271|     24|    PyObject *dataobj = Py_None;
  ------------------
  |  |  616|     24|#  define Py_None (&_Py_NoneStruct)
  ------------------
  272|       |
  273|     24|    if (!_PyArg_CheckPositional("get_frozen_object", nargs, 1, 2)) {
  ------------------
  |  |   31|     24|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 24, False: 0]
  |  |  |  Branch (31:27): [True: 24, False: 0]
  |  |  ------------------
  |  |   32|     24|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  274|      0|        goto exit;
  275|      0|    }
  276|     24|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|     24|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     24|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (276:9): [True: 0, False: 24]
  ------------------
  277|      0|        _PyArg_BadArgument("get_frozen_object", "argument 1", "str", args[0]);
  278|      0|        goto exit;
  279|      0|    }
  280|     24|    name = args[0];
  281|     24|    if (nargs < 2) {
  ------------------
  |  Branch (281:9): [True: 24, False: 0]
  ------------------
  282|     24|        goto skip_optional;
  283|     24|    }
  284|      0|    dataobj = args[1];
  285|     24|skip_optional:
  286|     24|    return_value = _imp_get_frozen_object_impl(module, name, dataobj);
  287|       |
  288|     24|exit:
  289|     24|    return return_value;
  290|     24|}
import.c:_imp_is_frozen_package:
  306|      4|{
  307|      4|    PyObject *return_value = NULL;
  308|      4|    PyObject *name;
  309|       |
  310|      4|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|      4|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (310:9): [True: 0, False: 4]
  ------------------
  311|      0|        _PyArg_BadArgument("is_frozen_package", "argument", "str", arg);
  312|      0|        goto exit;
  313|      0|    }
  314|      4|    name = arg;
  315|      4|    return_value = _imp_is_frozen_package_impl(module, name);
  316|       |
  317|      4|exit:
  318|      4|    return return_value;
  319|      4|}
import.c:_imp_is_builtin:
  335|    342|{
  336|    342|    PyObject *return_value = NULL;
  337|    342|    PyObject *name;
  338|       |
  339|    342|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|    342|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    342|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (339:9): [True: 0, False: 342]
  ------------------
  340|      0|        _PyArg_BadArgument("is_builtin", "argument", "str", arg);
  341|      0|        goto exit;
  342|      0|    }
  343|    342|    name = arg;
  344|    342|    return_value = _imp_is_builtin_impl(module, name);
  345|       |
  346|    342|exit:
  347|    342|    return return_value;
  348|    342|}
import.c:_imp_is_frozen:
  364|      4|{
  365|      4|    PyObject *return_value = NULL;
  366|      4|    PyObject *name;
  367|       |
  368|      4|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|      4|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (368:9): [True: 0, False: 4]
  ------------------
  369|      0|        _PyArg_BadArgument("is_frozen", "argument", "str", arg);
  370|      0|        goto exit;
  371|      0|    }
  372|      4|    name = arg;
  373|      4|    return_value = _imp_is_frozen_impl(module, name);
  374|       |
  375|      4|exit:
  376|      4|    return return_value;
  377|      4|}
import.c:_imp_create_dynamic:
  475|     10|{
  476|     10|    PyObject *return_value = NULL;
  477|     10|    PyObject *spec;
  478|     10|    PyObject *file = NULL;
  479|       |
  480|     10|    if (!_PyArg_CheckPositional("create_dynamic", nargs, 1, 2)) {
  ------------------
  |  |   31|     10|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 10, False: 0]
  |  |  |  Branch (31:27): [True: 10, False: 0]
  |  |  ------------------
  |  |   32|     10|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  481|      0|        goto exit;
  482|      0|    }
  483|     10|    spec = args[0];
  484|     10|    if (nargs < 2) {
  ------------------
  |  Branch (484:9): [True: 10, False: 0]
  ------------------
  485|     10|        goto skip_optional;
  486|     10|    }
  487|      0|    file = args[1];
  488|     10|skip_optional:
  489|     10|    return_value = _imp_create_dynamic_impl(module, spec, file);
  490|       |
  491|     10|exit:
  492|     10|    return return_value;
  493|     10|}
import.c:_imp_exec_dynamic:
  513|     10|{
  514|     10|    PyObject *return_value = NULL;
  515|     10|    int _return_value;
  516|       |
  517|     10|    _return_value = _imp_exec_dynamic_impl(module, mod);
  518|     10|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (518:9): [True: 0, False: 10]
  |  Branch (518:34): [True: 0, False: 0]
  ------------------
  519|      0|        goto exit;
  520|      0|    }
  521|     10|    return_value = PyLong_FromLong((long)_return_value);
  522|       |
  523|     10|exit:
  524|     10|    return return_value;
  525|     10|}
import.c:_imp_exec_builtin:
  543|     31|{
  544|     31|    PyObject *return_value = NULL;
  545|     31|    int _return_value;
  546|       |
  547|     31|    _return_value = _imp_exec_builtin_impl(module, mod);
  548|     31|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (548:9): [True: 0, False: 31]
  |  Branch (548:34): [True: 0, False: 0]
  ------------------
  549|      0|        goto exit;
  550|      0|    }
  551|     31|    return_value = PyLong_FromLong((long)_return_value);
  552|       |
  553|     31|exit:
  554|     31|    return return_value;
  555|     31|}
import.c:_imp__fix_co_filename:
   93|     93|{
   94|     93|    PyObject *return_value = NULL;
   95|     93|    PyCodeObject *code;
   96|     93|    PyObject *path;
   97|       |
   98|     93|    if (!_PyArg_CheckPositional("_fix_co_filename", nargs, 2, 2)) {
  ------------------
  |  |   31|     93|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 93, False: 0]
  |  |  |  Branch (31:27): [True: 93, False: 0]
  |  |  ------------------
  |  |   32|     93|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   99|      0|        goto exit;
  100|      0|    }
  101|     93|    if (!PyObject_TypeCheck(args[0], &PyCode_Type)) {
  ------------------
  |  |  378|     93|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (101:9): [True: 0, False: 93]
  ------------------
  102|      0|        _PyArg_BadArgument("_fix_co_filename", "argument 1", (&PyCode_Type)->tp_name, args[0]);
  103|      0|        goto exit;
  104|      0|    }
  105|     93|    code = (PyCodeObject *)args[0];
  106|     93|    if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|     93|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     93|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (106:9): [True: 0, False: 93]
  ------------------
  107|      0|        _PyArg_BadArgument("_fix_co_filename", "argument 2", "str", args[1]);
  108|      0|        goto exit;
  109|      0|    }
  110|     93|    path = args[1];
  111|     93|    return_value = _imp__fix_co_filename_impl(module, code, path);
  112|       |
  113|     93|exit:
  114|     93|    return return_value;
  115|     93|}
import.c:_imp__set_lazy_attributes:
  641|    152|{
  642|    152|    PyObject *return_value = NULL;
  643|    152|    PyObject *modobj;
  644|    152|    PyObject *name;
  645|       |
  646|    152|    if (!_PyArg_CheckPositional("_set_lazy_attributes", nargs, 2, 2)) {
  ------------------
  |  |   31|    152|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 152, False: 0]
  |  |  |  Branch (31:27): [True: 152, False: 0]
  |  |  ------------------
  |  |   32|    152|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  647|      0|        goto exit;
  648|      0|    }
  649|    152|    modobj = args[0];
  650|    152|    if (!PyUnicode_Check(args[1])) {
  ------------------
  |  |  103|    152|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    152|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (650:9): [True: 0, False: 152]
  ------------------
  651|      0|        _PyArg_BadArgument("_set_lazy_attributes", "argument 2", "str", args[1]);
  652|      0|        goto exit;
  653|      0|    }
  654|    152|    name = args[1];
  655|    152|    return_value = _imp__set_lazy_attributes_impl(module, modobj, name);
  656|       |
  657|    152|exit:
  658|    152|    return return_value;
  659|    152|}

marshal.c:marshal_loads:
  294|     93|{
  295|     93|    PyObject *return_value = NULL;
  296|     93|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  297|       |
  298|     93|    #define NUM_KEYWORDS 1
  299|     93|    static struct {
  300|     93|        PyGC_Head _this_is_not_used;
  301|     93|        PyObject_VAR_HEAD
  302|     93|        Py_hash_t ob_hash;
  303|     93|        PyObject *ob_item[NUM_KEYWORDS];
  304|     93|    } _kwtuple = {
  305|     93|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|     93|    {                                     \
  |  |   98|     93|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|     93|    {                               \
  |  |  |  |   91|     93|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|     93|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|     93|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|     93|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|     93|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|     93|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|     93|        (type)                      \
  |  |  |  |   93|     93|    },
  |  |  ------------------
  |  |   99|     93|        (size)                            \
  |  |  100|     93|    },
  ------------------
  306|     93|        .ob_hash = -1,
  307|     93|        .ob_item = { &_Py_ID(allow_code), },
  ------------------
  |  |  936|     93|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     93|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     93|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|     93|    };
  309|     93|    #undef NUM_KEYWORDS
  310|     93|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  311|       |
  312|       |    #else  // !Py_BUILD_CORE
  313|       |    #  define KWTUPLE NULL
  314|       |    #endif  // !Py_BUILD_CORE
  315|       |
  316|     93|    static const char * const _keywords[] = {"", "allow_code", NULL};
  317|     93|    static _PyArg_Parser _parser = {
  318|     93|        .keywords = _keywords,
  319|     93|        .fname = "loads",
  320|     93|        .kwtuple = KWTUPLE,
  ------------------
  |  |  310|     93|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
  321|     93|    };
  322|     93|    #undef KWTUPLE
  323|     93|    PyObject *argsbuf[2];
  324|     93|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (324:36): [True: 0, False: 93]
  ------------------
  325|     93|    Py_buffer bytes = {NULL, NULL};
  326|     93|    int allow_code = 1;
  327|       |
  328|     93|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|     93|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 93, False: 0]
  |  |  ------------------
  |  |   89|     93|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 93, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 93]
  |  |  |  Branch (89:43): [True: 93, False: 0]
  |  |  |  Branch (89:67): [True: 93, False: 0]
  |  |  ------------------
  |  |   90|     93|      (args) : \
  |  |   91|     93|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
  329|     93|            /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
  330|     93|    if (!args) {
  ------------------
  |  Branch (330:9): [True: 0, False: 93]
  ------------------
  331|      0|        goto exit;
  332|      0|    }
  333|     93|    if (PyObject_GetBuffer(args[0], &bytes, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|     93|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (333:9): [True: 0, False: 93]
  ------------------
  334|      0|        goto exit;
  335|      0|    }
  336|     93|    if (!noptargs) {
  ------------------
  |  Branch (336:9): [True: 93, False: 0]
  ------------------
  337|     93|        goto skip_optional_kwonly;
  338|     93|    }
  339|      0|    allow_code = PyObject_IsTrue(args[1]);
  340|      0|    if (allow_code < 0) {
  ------------------
  |  Branch (340:9): [True: 0, False: 0]
  ------------------
  341|      0|        goto exit;
  342|      0|    }
  343|     93|skip_optional_kwonly:
  344|     93|    return_value = marshal_loads_impl(module, &bytes, allow_code);
  345|       |
  346|     93|exit:
  347|       |    /* Cleanup for bytes */
  348|     93|    if (bytes.obj) {
  ------------------
  |  Branch (348:9): [True: 93, False: 0]
  ------------------
  349|     93|       PyBuffer_Release(&bytes);
  350|     93|    }
  351|       |
  352|     93|    return return_value;
  353|     93|}

sysmodule.c:sys_audit:
   83|    336|{
   84|    336|    PyObject *return_value = NULL;
   85|    336|    const char *event;
   86|    336|    PyObject *__clinic_args = NULL;
   87|       |
   88|    336|    if (!_PyArg_CheckPositional("audit", nargs, 1, PY_SSIZE_T_MAX)) {
  ------------------
  |  |   31|    336|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 336, False: 0]
  |  |  |  Branch (31:27): [True: 336, False: 0]
  |  |  ------------------
  |  |   32|    336|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   89|      0|        goto exit;
   90|      0|    }
   91|    336|    if (!PyUnicode_Check(args[0])) {
  ------------------
  |  |  103|    336|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    336|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (91:9): [True: 0, False: 336]
  ------------------
   92|      0|        _PyArg_BadArgument("audit", "argument 1", "str", args[0]);
   93|      0|        goto exit;
   94|      0|    }
   95|    336|    Py_ssize_t event_length;
   96|    336|    event = PyUnicode_AsUTF8AndSize(args[0], &event_length);
   97|    336|    if (event == NULL) {
  ------------------
  |  Branch (97:9): [True: 0, False: 336]
  ------------------
   98|      0|        goto exit;
   99|      0|    }
  100|    336|    if (strlen(event) != (size_t)event_length) {
  ------------------
  |  Branch (100:9): [True: 0, False: 336]
  ------------------
  101|      0|        PyErr_SetString(PyExc_ValueError, "embedded null character");
  102|      0|        goto exit;
  103|      0|    }
  104|    336|    __clinic_args = PyTuple_FromArray(args + 1, nargs - 1);
  105|    336|    if (__clinic_args == NULL) {
  ------------------
  |  Branch (105:9): [True: 0, False: 336]
  ------------------
  106|      0|        goto exit;
  107|      0|    }
  108|    336|    return_value = sys_audit_impl(module, event, __clinic_args);
  109|       |
  110|    336|exit:
  111|       |    /* Cleanup for args */
  112|    336|    Py_XDECREF(__clinic_args);
  ------------------
  |  |  524|    336|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|       |
  114|    336|    return return_value;
  115|    336|}
sysmodule.c:sys_getfilesystemencoding:
  288|      4|{
  289|      4|    return sys_getfilesystemencoding_impl(module);
  290|      4|}
sysmodule.c:sys_getfilesystemencodeerrors:
  306|      2|{
  307|      2|    return sys_getfilesystemencodeerrors_impl(module);
  308|      2|}
sysmodule.c:sys__getframe:
 1122|      2|{
 1123|      2|    PyObject *return_value = NULL;
 1124|      2|    int depth = 0;
 1125|       |
 1126|      2|    if (!_PyArg_CheckPositional("_getframe", nargs, 0, 1)) {
  ------------------
  |  |   31|      2|    (((min) <= (nargs) && (nargs) <= (max)) \
  |  |  ------------------
  |  |  |  Branch (31:7): [True: 2, False: 0]
  |  |  |  Branch (31:27): [True: 2, False: 0]
  |  |  ------------------
  |  |   32|      2|     || _PyArg_CheckPositional((funcname), (nargs), (min), (max)))
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1127|      0|        goto exit;
 1128|      0|    }
 1129|      2|    if (nargs < 1) {
  ------------------
  |  Branch (1129:9): [True: 2, False: 0]
  ------------------
 1130|      2|        goto skip_optional;
 1131|      2|    }
 1132|      0|    depth = PyLong_AsInt(args[0]);
 1133|      0|    if (depth == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1133:9): [True: 0, False: 0]
  |  Branch (1133:24): [True: 0, False: 0]
  ------------------
 1134|      0|        goto exit;
 1135|      0|    }
 1136|      2|skip_optional:
 1137|      2|    return_value = sys__getframe_impl(module, depth);
 1138|       |
 1139|      2|exit:
 1140|      2|    return return_value;
 1141|      2|}
sysmodule.c:sys__getframemodulename:
 1670|      2|{
 1671|      2|    PyObject *return_value = NULL;
 1672|      2|    #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
 1673|       |
 1674|      2|    #define NUM_KEYWORDS 1
 1675|      2|    static struct {
 1676|      2|        PyGC_Head _this_is_not_used;
 1677|      2|        PyObject_VAR_HEAD
 1678|      2|        Py_hash_t ob_hash;
 1679|      2|        PyObject *ob_item[NUM_KEYWORDS];
 1680|      2|    } _kwtuple = {
 1681|      2|        .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS)
  ------------------
  |  |   97|      2|    {                                     \
  |  |   98|      2|        PyObject_HEAD_INIT(type)          \
  |  |  ------------------
  |  |  |  |   90|      2|    {                               \
  |  |  |  |   91|      2|        { _Py_STATIC_IMMORTAL_INITIAL_REFCNT },    \
  |  |  |  |  ------------------
  |  |  |  |  |  |   50|      2|#define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|      2|#define _Py_IMMORTAL_INITIAL_REFCNT (3ULL << 30)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define _Py_STATIC_IMMORTAL_INITIAL_REFCNT (((Py_ssize_t)_Py_IMMORTAL_INITIAL_REFCNT) | (_Py_STATIC_FLAG_BITS << 48))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   49|      2|#define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  583|      2|#define _Py_STATICALLY_ALLOCATED_FLAG (1 << 2)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |               #define _Py_STATIC_FLAG_BITS ((Py_ssize_t)(_Py_STATICALLY_ALLOCATED_FLAG | _Py_IMMORTAL_FLAGS))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  581|      2|#define _Py_IMMORTAL_FLAGS (1 << 0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|      2|        (type)                      \
  |  |  |  |   93|      2|    },
  |  |  ------------------
  |  |   99|      2|        (size)                            \
  |  |  100|      2|    },
  ------------------
 1682|      2|        .ob_hash = -1,
 1683|      2|        .ob_item = { &_Py_ID(depth), },
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1684|      2|    };
 1685|      2|    #undef NUM_KEYWORDS
 1686|      2|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
 1687|       |
 1688|       |    #else  // !Py_BUILD_CORE
 1689|       |    #  define KWTUPLE NULL
 1690|       |    #endif  // !Py_BUILD_CORE
 1691|       |
 1692|      2|    static const char * const _keywords[] = {"depth", NULL};
 1693|      2|    static _PyArg_Parser _parser = {
 1694|      2|        .keywords = _keywords,
 1695|      2|        .fname = "_getframemodulename",
 1696|      2|        .kwtuple = KWTUPLE,
  ------------------
  |  | 1686|      2|    #define KWTUPLE (&_kwtuple.ob_base.ob_base)
  ------------------
 1697|      2|    };
 1698|      2|    #undef KWTUPLE
 1699|      2|    PyObject *argsbuf[1];
 1700|      2|    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 0;
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1700:36): [True: 0, False: 2]
  ------------------
 1701|      2|    int depth = 0;
 1702|       |
 1703|      2|    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser,
  ------------------
  |  |   88|      2|    (((minkw) == 0 && (kwargs) == NULL && (kwnames) == NULL && \
  |  |  ------------------
  |  |  |  Branch (88:7): [True: 0, Folded]
  |  |  |  Branch (88:23): [True: 0, Folded]
  |  |  |  Branch (88:43): [True: 2, False: 0]
  |  |  ------------------
  |  |   89|      2|      (minpos) <= (nargs) && ((varpos) || (nargs) <= (maxpos)) && (args) != NULL) ? \
  |  |  ------------------
  |  |  |  Branch (89:7): [True: 2, False: 0]
  |  |  |  Branch (89:31): [Folded, False: 2]
  |  |  |  Branch (89:43): [True: 2, False: 0]
  |  |  |  Branch (89:67): [True: 2, False: 0]
  |  |  ------------------
  |  |   90|      2|      (args) : \
  |  |   91|      2|     _PyArg_UnpackKeywords((args), (nargs), (kwargs), (kwnames), (parser), \
  |  |   92|      0|                           (minpos), (maxpos), (minkw), (varpos), (buf)))
  ------------------
 1704|      2|            /*minpos*/ 0, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf);
 1705|      2|    if (!args) {
  ------------------
  |  Branch (1705:9): [True: 0, False: 2]
  ------------------
 1706|      0|        goto exit;
 1707|      0|    }
 1708|      2|    if (!noptargs) {
  ------------------
  |  Branch (1708:9): [True: 0, False: 2]
  ------------------
 1709|      0|        goto skip_optional_pos;
 1710|      0|    }
 1711|      2|    depth = PyLong_AsInt(args[0]);
 1712|      2|    if (depth == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1712:9): [True: 0, False: 2]
  |  Branch (1712:24): [True: 0, False: 0]
  ------------------
 1713|      0|        goto exit;
 1714|      0|    }
 1715|      2|skip_optional_pos:
 1716|      2|    return_value = sys__getframemodulename_impl(module, depth);
 1717|       |
 1718|      2|exit:
 1719|      2|    return return_value;
 1720|      2|}
sysmodule.c:sys_intern:
  328|     27|{
  329|     27|    PyObject *return_value = NULL;
  330|     27|    PyObject *s;
  331|       |
  332|     27|    if (!PyUnicode_Check(arg)) {
  ------------------
  |  |  103|     27|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     27|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (332:9): [True: 0, False: 27]
  ------------------
  333|      0|        _PyArg_BadArgument("intern", "argument", "str", arg);
  334|      0|        goto exit;
  335|      0|    }
  336|     27|    s = arg;
  337|     27|    return_value = sys_intern_impl(module, s);
  338|       |
  339|     27|exit:
  340|     27|    return return_value;
  341|     27|}
sysmodule.c:sys__get_cpu_count_config:
 1736|      2|{
 1737|      2|    PyObject *return_value = NULL;
 1738|      2|    int _return_value;
 1739|       |
 1740|      2|    _return_value = sys__get_cpu_count_config_impl(module);
 1741|      2|    if ((_return_value == -1) && PyErr_Occurred()) {
  ------------------
  |  Branch (1741:9): [True: 2, False: 0]
  |  Branch (1741:34): [True: 0, False: 2]
  ------------------
 1742|      0|        goto exit;
 1743|      0|    }
 1744|      2|    return_value = PyLong_FromLong((long)_return_value);
 1745|       |
 1746|      2|exit:
 1747|      2|    return return_value;
 1748|      2|}

PyCodec_Register:
   34|      4|{
   35|      4|    PyInterpreterState *interp = _PyInterpreterState_GET();
   36|      4|    assert(interp->codecs.initialized);
  ------------------
  |  Branch (36:5): [True: 4, False: 0]
  ------------------
   37|      4|    if (search_function == NULL) {
  ------------------
  |  Branch (37:9): [True: 0, False: 4]
  ------------------
   38|      0|        PyErr_BadArgument();
   39|      0|        goto onError;
   40|      0|    }
   41|      4|    if (!PyCallable_Check(search_function)) {
  ------------------
  |  Branch (41:9): [True: 0, False: 4]
  ------------------
   42|      0|        PyErr_SetString(PyExc_TypeError, "argument must be callable");
   43|      0|        goto onError;
   44|      0|    }
   45|      4|    FT_MUTEX_LOCK(&interp->codecs.search_path_mutex);
  ------------------
  |  |  204|      4|#define FT_MUTEX_LOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (204:42): [Folded, False: 4]
  |  |  ------------------
  ------------------
   46|      4|    int ret = PyList_Append(interp->codecs.search_path, search_function);
   47|      4|    FT_MUTEX_UNLOCK(&interp->codecs.search_path_mutex);
  ------------------
  |  |  206|      4|#define FT_MUTEX_UNLOCK(lock) do {} while (0)
  |  |  ------------------
  |  |  |  Branch (206:44): [Folded, False: 4]
  |  |  ------------------
  ------------------
   48|       |
   49|      4|    return ret;
   50|       |
   51|      0| onError:
   52|      0|    return -1;
   53|      4|}
_PyCodec_Lookup:
  138|  41.3k|{
  139|  41.3k|    if (encoding == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 41.3k]
  ------------------
  140|      0|        PyErr_BadArgument();
  141|      0|        return NULL;
  142|      0|    }
  143|       |
  144|  41.3k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  145|  41.3k|    assert(interp->codecs.initialized);
  ------------------
  |  Branch (145:5): [True: 41.3k, False: 0]
  ------------------
  146|       |
  147|       |    /* Convert the encoding to a normalized Python string: all
  148|       |       ASCII letters are converted to lower case, spaces are
  149|       |       replaced with hyphens. */
  150|  41.3k|    PyObject *v = normalizestring(encoding);
  151|  41.3k|    if (v == NULL) {
  ------------------
  |  Branch (151:9): [True: 0, False: 41.3k]
  ------------------
  152|      0|        return NULL;
  153|      0|    }
  154|       |
  155|       |    /* Intern the string. We'll make it immortal later if lookup succeeds. */
  156|  41.3k|    _PyUnicode_InternMortal(interp, &v);
  157|       |
  158|       |    /* First, try to lookup the name in the registry dictionary */
  159|  41.3k|    PyObject *result;
  160|  41.3k|    if (PyDict_GetItemRef(interp->codecs.search_cache, v, &result) < 0) {
  ------------------
  |  Branch (160:9): [True: 0, False: 41.3k]
  ------------------
  161|      0|        goto onError;
  162|      0|    }
  163|  41.3k|    if (result != NULL) {
  ------------------
  |  Branch (163:9): [True: 41.0k, False: 376]
  ------------------
  164|  41.0k|        Py_DECREF(v);
  ------------------
  |  |  430|  41.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|  41.0k|        return result;
  166|  41.0k|    }
  167|       |
  168|       |    /* Next, scan the search functions in order of registration */
  169|    376|    const Py_ssize_t len = PyList_Size(interp->codecs.search_path);
  170|    376|    if (len < 0)
  ------------------
  |  Branch (170:9): [True: 0, False: 376]
  ------------------
  171|      0|        goto onError;
  172|    376|    if (len == 0) {
  ------------------
  |  Branch (172:9): [True: 0, False: 376]
  ------------------
  173|      0|        PyErr_SetString(PyExc_LookupError,
  174|      0|                        "no codec search functions registered: "
  175|      0|                        "can't find encoding");
  176|      0|        goto onError;
  177|      0|    }
  178|       |
  179|    376|    Py_ssize_t i;
  180|    842|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (180:17): [True: 619, False: 223]
  ------------------
  181|    619|        PyObject *func;
  182|       |
  183|    619|        func = PyList_GetItemRef(interp->codecs.search_path, i);
  184|    619|        if (func == NULL)
  ------------------
  |  Branch (184:13): [True: 0, False: 619]
  ------------------
  185|      0|            goto onError;
  186|    619|        result = PyObject_CallOneArg(func, v);
  187|    619|        Py_DECREF(func);
  ------------------
  |  |  430|    619|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    619|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    619|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|    619|        if (result == NULL)
  ------------------
  |  Branch (188:13): [True: 0, False: 619]
  ------------------
  189|      0|            goto onError;
  190|    619|        if (result == Py_None) {
  ------------------
  |  |  616|    619|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (190:13): [True: 466, False: 153]
  ------------------
  191|    466|            Py_CLEAR(result);
  ------------------
  |  |  484|    466|    do { \
  |  |  485|    466|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    466|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    466|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    466|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    466|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    466|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 466, False: 0]
  |  |  ------------------
  |  |  488|    466|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    466|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    466|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    466|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    466|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    466|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    466|        } \
  |  |  491|    466|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 466]
  |  |  ------------------
  ------------------
  192|    466|            continue;
  193|    466|        }
  194|    153|        if (!PyTuple_Check(result) || PyTuple_GET_SIZE(result) != 4) {
  ------------------
  |  |   27|    153|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    306|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
                      if (!PyTuple_Check(result) || PyTuple_GET_SIZE(result) != 4) {
  ------------------
  |  |   27|    153|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    153|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (194:13): [True: 0, False: 153]
  |  Branch (194:39): [True: 0, False: 153]
  ------------------
  195|      0|            PyErr_SetString(PyExc_TypeError,
  196|      0|                            "codec search functions must return 4-tuples");
  197|      0|            Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|      0|            goto onError;
  199|      0|        }
  200|    153|        break;
  201|    153|    }
  202|    376|    if (result == NULL) {
  ------------------
  |  Branch (202:9): [True: 223, False: 153]
  ------------------
  203|       |        /* XXX Perhaps we should cache misses too ? */
  204|    223|        PyErr_Format(PyExc_LookupError,
  205|    223|                     "unknown encoding: %s", encoding);
  206|    223|        goto onError;
  207|    223|    }
  208|       |
  209|    153|    _PyUnicode_InternImmortal(interp, &v);
  210|       |
  211|       |    /* Cache and return the result */
  212|    153|    if (PyDict_SetItem(interp->codecs.search_cache, v, result) < 0) {
  ------------------
  |  Branch (212:9): [True: 0, False: 153]
  ------------------
  213|      0|        Py_DECREF(result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|      0|        goto onError;
  215|      0|    }
  216|    153|    Py_DECREF(v);
  ------------------
  |  |  430|    153|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    153|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|    153|    return result;
  218|       |
  219|    223| onError:
  220|    223|    Py_DECREF(v);
  ------------------
  |  |  430|    223|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    223|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    223|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|       |    return NULL;
  222|    153|}
_PyCodecInfo_GetIncrementalDecoder:
  342|      2|{
  343|      2|    return codec_makeincrementalcodec(codec_info, errors,
  344|      2|                                      "incrementaldecoder");
  345|      2|}
_PyCodecInfo_GetIncrementalEncoder:
  349|      4|{
  350|      4|    return codec_makeincrementalcodec(codec_info, errors,
  351|      4|                                      "incrementalencoder");
  352|      4|}
_PyCodec_LookupTextEncoding:
  516|  41.3k|{
  517|  41.3k|    PyObject *codec;
  518|  41.3k|    PyObject *attr;
  519|  41.3k|    int is_text_codec;
  520|       |
  521|  41.3k|    codec = _PyCodec_Lookup(encoding);
  522|  41.3k|    if (codec == NULL)
  ------------------
  |  Branch (522:9): [True: 223, False: 41.1k]
  ------------------
  523|    223|        return NULL;
  524|       |
  525|       |    /* Backwards compatibility: assume any raw tuple describes a text
  526|       |     * encoding, and the same for anything lacking the private
  527|       |     * attribute.
  528|       |     */
  529|  41.1k|    if (!PyTuple_CheckExact(codec)) {
  ------------------
  |  |   28|  41.1k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  41.1k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (529:9): [True: 41.1k, False: 0]
  ------------------
  530|  41.1k|        if (PyObject_GetOptionalAttr(codec, &_Py_ID(_is_text_encoding), &attr) < 0) {
  ------------------
  |  |  936|  41.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  41.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  41.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (530:13): [True: 0, False: 41.1k]
  ------------------
  531|      0|            Py_DECREF(codec);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      0|            return NULL;
  533|      0|        }
  534|  41.1k|        if (attr != NULL) {
  ------------------
  |  Branch (534:13): [True: 41.1k, False: 0]
  ------------------
  535|  41.1k|            is_text_codec = PyObject_IsTrue(attr);
  536|  41.1k|            Py_DECREF(attr);
  ------------------
  |  |  430|  41.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  41.1k|            if (is_text_codec <= 0) {
  ------------------
  |  Branch (537:17): [True: 7, False: 41.1k]
  ------------------
  538|      7|                Py_DECREF(codec);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  539|      7|                if (!is_text_codec) {
  ------------------
  |  Branch (539:21): [True: 7, False: 0]
  ------------------
  540|      7|                    if (alternate_command != NULL) {
  ------------------
  |  Branch (540:25): [True: 7, False: 0]
  ------------------
  541|      7|                        PyErr_Format(PyExc_LookupError,
  542|      7|                                     "'%.400s' is not a text encoding; "
  543|      7|                                     "use %s to handle arbitrary codecs",
  544|      7|                                     encoding, alternate_command);
  545|      7|                    }
  546|      0|                    else {
  547|      0|                        PyErr_Format(PyExc_LookupError,
  548|      0|                                     "'%.400s' is not a text encoding",
  549|      0|                                     encoding);
  550|      0|                    }
  551|      7|                }
  552|      7|                return NULL;
  553|      7|            }
  554|  41.1k|        }
  555|  41.1k|    }
  556|       |
  557|       |    /* This appears to be a valid text encoding */
  558|  41.1k|    return codec;
  559|  41.1k|}
_PyCodec_EncodeText:
  592|  17.7k|{
  593|  17.7k|    PyObject *encoder;
  594|       |
  595|  17.7k|    encoder = _PyCodec_TextEncoder(encoding);
  596|  17.7k|    if (encoder == NULL)
  ------------------
  |  Branch (596:9): [True: 0, False: 17.7k]
  ------------------
  597|      0|        return NULL;
  598|       |
  599|  17.7k|    return _PyCodec_EncodeInternal(object, encoder, encoding, errors);
  600|  17.7k|}
_PyCodec_DecodeText:
  605|  23.6k|{
  606|  23.6k|    PyObject *decoder;
  607|       |
  608|  23.6k|    decoder = _PyCodec_TextDecoder(encoding);
  609|  23.6k|    if (decoder == NULL)
  ------------------
  |  Branch (609:9): [True: 230, False: 23.4k]
  ------------------
  610|    230|        return NULL;
  611|       |
  612|  23.4k|    return _PyCodec_DecodeInternal(object, decoder, encoding, errors);
  613|  23.6k|}
PyCodec_LookupError:
  651|  2.98k|{
  652|  2.98k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  653|  2.98k|    assert(interp->codecs.initialized);
  ------------------
  |  Branch (653:5): [True: 2.98k, False: 0]
  ------------------
  654|       |
  655|  2.98k|    if (name==NULL)
  ------------------
  |  Branch (655:9): [True: 2.73k, False: 256]
  ------------------
  656|  2.73k|        name = "strict";
  657|  2.98k|    PyObject *handler;
  658|  2.98k|    if (PyDict_GetItemStringRef(interp->codecs.error_registry, name, &handler) < 0) {
  ------------------
  |  Branch (658:9): [True: 0, False: 2.98k]
  ------------------
  659|      0|        return NULL;
  660|      0|    }
  661|  2.98k|    if (handler == NULL) {
  ------------------
  |  Branch (661:9): [True: 0, False: 2.98k]
  ------------------
  662|      0|        PyErr_Format(PyExc_LookupError, "unknown error handler name '%.400s'", name);
  663|      0|        return NULL;
  664|      0|    }
  665|  2.98k|    return handler;
  666|  2.98k|}
PyCodec_StrictErrors:
  782|  38.9k|{
  783|  38.9k|    if (PyExceptionInstance_Check(exc)) {
  ------------------
  |  |   65|  38.9k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  38.9k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 38.9k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|  38.9k|        PyErr_SetObject(PyExceptionInstance_Class(exc), exc);
  ------------------
  |  |   69|  38.9k|#define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x))
  |  |  ------------------
  |  |  |  |  171|  38.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  38.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|  38.9k|    }
  786|      0|    else {
  787|      0|        PyErr_SetString(PyExc_TypeError, "codec must pass exception instance");
  788|      0|    }
  789|       |    return NULL;
  790|  38.9k|}
_PyCodec_InitRegistry:
 1570|      2|{
 1571|      2|    static struct {
 1572|      2|        const char *name;
 1573|      2|        PyMethodDef def;
 1574|      2|    } methods[] =
 1575|      2|    {
 1576|      2|        {
 1577|      2|            "strict",
 1578|      2|            {
 1579|      2|                "strict_errors",
 1580|      2|                strict_errors,
 1581|      2|                METH_O,
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1582|      2|                PyDoc_STR("Implements the 'strict' error handling, which "
  ------------------
  |  |  229|      2|#define PyDoc_STR(str) str
  ------------------
 1583|      2|                          "raises a UnicodeError on coding errors.")
 1584|      2|            }
 1585|      2|        },
 1586|      2|        {
 1587|      2|            "ignore",
 1588|      2|            {
 1589|      2|                "ignore_errors",
 1590|      2|                ignore_errors,
 1591|      2|                METH_O,
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1592|      2|                PyDoc_STR("Implements the 'ignore' error handling, which "
  ------------------
  |  |  229|      2|#define PyDoc_STR(str) str
  ------------------
 1593|      2|                          "ignores malformed data and continues.")
 1594|      2|            }
 1595|      2|        },
 1596|      2|        {
 1597|      2|            "replace",
 1598|      2|            {
 1599|      2|                "replace_errors",
 1600|      2|                replace_errors,
 1601|      2|                METH_O,
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1602|      2|                PyDoc_STR("Implements the 'replace' error handling, which "
  ------------------
  |  |  229|      2|#define PyDoc_STR(str) str
  ------------------
 1603|      2|                          "replaces malformed data with a replacement marker.")
 1604|      2|            }
 1605|      2|        },
 1606|      2|        {
 1607|      2|            "xmlcharrefreplace",
 1608|      2|            {
 1609|      2|                "xmlcharrefreplace_errors",
 1610|      2|                xmlcharrefreplace_errors,
 1611|      2|                METH_O,
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1612|      2|                PyDoc_STR("Implements the 'xmlcharrefreplace' error handling, "
  ------------------
  |  |  229|      2|#define PyDoc_STR(str) str
  ------------------
 1613|      2|                          "which replaces an unencodable character with the "
 1614|      2|                          "appropriate XML character reference.")
 1615|      2|            }
 1616|      2|        },
 1617|      2|        {
 1618|      2|            "backslashreplace",
 1619|      2|            {
 1620|      2|                "backslashreplace_errors",
 1621|      2|                backslashreplace_errors,
 1622|      2|                METH_O,
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1623|      2|                PyDoc_STR("Implements the 'backslashreplace' error handling, "
  ------------------
  |  |  229|      2|#define PyDoc_STR(str) str
  ------------------
 1624|      2|                          "which replaces malformed data with a backslashed "
 1625|      2|                          "escape sequence.")
 1626|      2|            }
 1627|      2|        },
 1628|      2|        {
 1629|      2|            "namereplace",
 1630|      2|            {
 1631|      2|                "namereplace_errors",
 1632|      2|                namereplace_errors,
 1633|      2|                METH_O,
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1634|      2|                PyDoc_STR("Implements the 'namereplace' error handling, "
  ------------------
  |  |  229|      2|#define PyDoc_STR(str) str
  ------------------
 1635|      2|                          "which replaces an unencodable character with a "
 1636|      2|                          "\\N{...} escape sequence.")
 1637|      2|            }
 1638|      2|        },
 1639|      2|        {
 1640|      2|            "surrogatepass",
 1641|      2|            {
 1642|      2|                "surrogatepass",
 1643|      2|                surrogatepass_errors,
 1644|      2|                METH_O
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1645|      2|            }
 1646|      2|        },
 1647|      2|        {
 1648|      2|            "surrogateescape",
 1649|      2|            {
 1650|      2|                "surrogateescape",
 1651|      2|                surrogateescape_errors,
 1652|      2|                METH_O
  ------------------
  |  |   99|      2|#define METH_O        0x0008
  ------------------
 1653|      2|            }
 1654|      2|        }
 1655|      2|    };
 1656|       |    // ensure that the built-in error handlers' names are kept in sync
 1657|      2|    assert(Py_ARRAY_LENGTH(methods) == Py_ARRAY_LENGTH(codecs_builtin_error_handlers));
  ------------------
  |  Branch (1657:5): [True: 2, Folded]
  ------------------
 1658|       |
 1659|      2|    assert(interp->codecs.initialized == 0);
  ------------------
  |  Branch (1659:5): [True: 2, False: 0]
  ------------------
 1660|      2|    interp->codecs.search_path = PyList_New(0);
 1661|      2|    if (interp->codecs.search_path == NULL) {
  ------------------
  |  Branch (1661:9): [True: 0, False: 2]
  ------------------
 1662|      0|        return PyStatus_NoMemory();
 1663|      0|    }
 1664|      2|    interp->codecs.search_cache = PyDict_New();
 1665|      2|    if (interp->codecs.search_cache == NULL) {
  ------------------
  |  Branch (1665:9): [True: 0, False: 2]
  ------------------
 1666|      0|        return PyStatus_NoMemory();
 1667|      0|    }
 1668|      2|    interp->codecs.error_registry = PyDict_New();
 1669|      2|    if (interp->codecs.error_registry == NULL) {
  ------------------
  |  Branch (1669:9): [True: 0, False: 2]
  ------------------
 1670|      0|        return PyStatus_NoMemory();
 1671|      0|    }
 1672|     18|    for (size_t i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
  ------------------
  |  |  221|     18|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (1672:24): [True: 16, False: 2]
  ------------------
 1673|     16|        PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
  ------------------
  |  |   87|     16|#define PyCFunction_NewEx(ML, SELF, MOD) PyCMethod_New((ML), (SELF), (MOD), NULL)
  ------------------
 1674|     16|        if (func == NULL) {
  ------------------
  |  Branch (1674:13): [True: 0, False: 16]
  ------------------
 1675|      0|            return PyStatus_NoMemory();
 1676|      0|        }
 1677|       |
 1678|     16|        int res = PyDict_SetItemString(interp->codecs.error_registry,
 1679|     16|                                       methods[i].name, func);
 1680|     16|        Py_DECREF(func);
  ------------------
  |  |  430|     16|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1681|     16|        if (res < 0) {
  ------------------
  |  Branch (1681:13): [True: 0, False: 16]
  ------------------
 1682|      0|            return PyStatus_Error("Failed to insert into codec error registry");
 1683|      0|        }
 1684|     16|    }
 1685|       |
 1686|      2|    interp->codecs.initialized = 1;
 1687|       |
 1688|       |    // Importing `encodings' will call back into this module to register codec
 1689|       |    // search functions, so this is done after everything else is initialized.
 1690|      2|    PyObject *mod = PyImport_ImportModule("encodings");
 1691|      2|    if (mod == NULL) {
  ------------------
  |  Branch (1691:9): [True: 0, False: 2]
  ------------------
 1692|      0|        PyThreadState *tstate = _PyThreadState_GET();
 1693|      0|        _Py_DumpPathConfig(tstate);
 1694|      0|        return PyStatus_Error("Failed to import encodings module");
 1695|      0|    }
 1696|      2|    Py_DECREF(mod);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1697|       |
 1698|      2|    return PyStatus_Ok();
 1699|      2|}
codecs.c:normalizestring:
   93|  41.3k|{
   94|  41.3k|    size_t i;
   95|  41.3k|    size_t len = strlen(string);
   96|  41.3k|    char *p;
   97|  41.3k|    PyObject *v;
   98|       |
   99|  41.3k|    if (len > PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  41.3k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (99:9): [True: 0, False: 41.3k]
  ------------------
  100|      0|        PyErr_SetString(PyExc_OverflowError, "string is too large");
  101|      0|        return NULL;
  102|      0|    }
  103|       |
  104|  41.3k|    p = PyMem_Malloc(len + 1);
  105|  41.3k|    if (p == NULL)
  ------------------
  |  Branch (105:9): [True: 0, False: 41.3k]
  ------------------
  106|      0|        return PyErr_NoMemory();
  107|   376k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (107:17): [True: 335k, False: 41.3k]
  ------------------
  108|   335k|        char ch = string[i];
  109|   335k|        if (ch == ' ')
  ------------------
  |  Branch (109:13): [True: 0, False: 335k]
  ------------------
  110|      0|            ch = '-';
  111|   335k|        else
  112|   335k|            ch = Py_TOLOWER(Py_CHARMASK(ch));
  ------------------
  |  |   32|   335k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|   335k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  113|   335k|        p[i] = ch;
  114|   335k|    }
  115|  41.3k|    p[i] = '\0';
  116|  41.3k|    v = PyUnicode_FromString(p);
  117|  41.3k|    PyMem_Free(p);
  118|  41.3k|    return v;
  119|  41.3k|}
codecs.c:codec_makeincrementalcodec:
  285|      6|{
  286|      6|    PyObject *ret, *inccodec;
  287|       |
  288|      6|    inccodec = PyObject_GetAttrString(codec_info, attrname);
  289|      6|    if (inccodec == NULL)
  ------------------
  |  Branch (289:9): [True: 0, False: 6]
  ------------------
  290|      0|        return NULL;
  291|      6|    if (errors)
  ------------------
  |  Branch (291:9): [True: 6, False: 0]
  ------------------
  292|      6|        ret = PyObject_CallFunction(inccodec, "s", errors);
  293|      0|    else
  294|      0|        ret = _PyObject_CallNoArgs(inccodec);
  295|      6|    Py_DECREF(inccodec);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|      6|    return ret;
  297|      6|}
codecs.c:_PyCodec_EncodeInternal:
  407|  17.7k|{
  408|  17.7k|    PyObject *args = NULL, *result = NULL;
  409|  17.7k|    PyObject *v = NULL;
  410|       |
  411|  17.7k|    args = args_tuple(object, errors);
  412|  17.7k|    if (args == NULL)
  ------------------
  |  Branch (412:9): [True: 0, False: 17.7k]
  ------------------
  413|      0|        goto onError;
  414|       |
  415|  17.7k|    result = PyObject_Call(encoder, args, NULL);
  416|  17.7k|    if (result == NULL) {
  ------------------
  |  Branch (416:9): [True: 0, False: 17.7k]
  ------------------
  417|      0|        _PyErr_FormatNote("%s with '%s' codec failed", "encoding", encoding);
  418|      0|        goto onError;
  419|      0|    }
  420|       |
  421|  17.7k|    if (!PyTuple_Check(result) ||
  ------------------
  |  |   27|  17.7k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  35.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (421:9): [True: 0, False: 17.7k]
  ------------------
  422|  17.7k|        PyTuple_GET_SIZE(result) != 2) {
  ------------------
  |  |   27|  17.7k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (422:9): [True: 0, False: 17.7k]
  ------------------
  423|      0|        PyErr_SetString(PyExc_TypeError,
  424|      0|                        "encoder must return a tuple (object, integer)");
  425|      0|        goto onError;
  426|      0|    }
  427|  17.7k|    v = Py_NewRef(PyTuple_GET_ITEM(result,0));
  ------------------
  |  |  550|  17.7k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  35.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 17.7k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|       |    /* We don't check or use the second (integer) entry. */
  429|       |
  430|  17.7k|    Py_DECREF(args);
  ------------------
  |  |  430|  17.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|  17.7k|    Py_DECREF(encoder);
  ------------------
  |  |  430|  17.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|  17.7k|    Py_DECREF(result);
  ------------------
  |  |  430|  17.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|  17.7k|    return v;
  434|       |
  435|      0| onError:
  436|      0|    Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|      0|    Py_XDECREF(args);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  438|      0|    Py_XDECREF(encoder);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|       |    return NULL;
  440|  17.7k|}
codecs.c:args_tuple:
  244|  41.1k|{
  245|  41.1k|    PyObject *args;
  246|       |
  247|  41.1k|    args = PyTuple_New(1 + (errors != NULL));
  248|  41.1k|    if (args == NULL)
  ------------------
  |  Branch (248:9): [True: 0, False: 41.1k]
  ------------------
  249|      0|        return NULL;
  250|  41.1k|    PyTuple_SET_ITEM(args, 0, Py_NewRef(object));
  ------------------
  |  |   40|  41.1k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|  41.1k|    if (errors) {
  ------------------
  |  Branch (251:9): [True: 0, False: 41.1k]
  ------------------
  252|      0|        PyObject *v;
  253|       |
  254|      0|        v = PyUnicode_FromString(errors);
  255|      0|        if (v == NULL) {
  ------------------
  |  Branch (255:13): [True: 0, False: 0]
  ------------------
  256|      0|            Py_DECREF(args);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      0|            return NULL;
  258|      0|        }
  259|      0|        PyTuple_SET_ITEM(args, 1, v);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|      0|    }
  261|  41.1k|    return args;
  262|  41.1k|}
codecs.c:_PyCodec_DecodeInternal:
  452|  23.4k|{
  453|  23.4k|    PyObject *args = NULL, *result = NULL;
  454|  23.4k|    PyObject *v;
  455|       |
  456|  23.4k|    args = args_tuple(object, errors);
  457|  23.4k|    if (args == NULL)
  ------------------
  |  Branch (457:9): [True: 0, False: 23.4k]
  ------------------
  458|      0|        goto onError;
  459|       |
  460|  23.4k|    result = PyObject_Call(decoder, args, NULL);
  461|  23.4k|    if (result == NULL) {
  ------------------
  |  Branch (461:9): [True: 1.92k, False: 21.5k]
  ------------------
  462|  1.92k|        _PyErr_FormatNote("%s with '%s' codec failed", "decoding", encoding);
  463|  1.92k|        goto onError;
  464|  1.92k|    }
  465|  21.5k|    if (!PyTuple_Check(result) ||
  ------------------
  |  |   27|  21.5k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  43.0k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (465:9): [True: 0, False: 21.5k]
  ------------------
  466|  21.5k|        PyTuple_GET_SIZE(result) != 2) {
  ------------------
  |  |   27|  21.5k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (466:9): [True: 0, False: 21.5k]
  ------------------
  467|      0|        PyErr_SetString(PyExc_TypeError,
  468|      0|                        "decoder must return a tuple (object,integer)");
  469|      0|        goto onError;
  470|      0|    }
  471|  21.5k|    v = Py_NewRef(PyTuple_GET_ITEM(result,0));
  ------------------
  |  |  550|  21.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 21.5k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|       |    /* We don't check or use the second (integer) entry. */
  473|       |
  474|  21.5k|    Py_DECREF(args);
  ------------------
  |  |  430|  21.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  475|  21.5k|    Py_DECREF(decoder);
  ------------------
  |  |  430|  21.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|  21.5k|    Py_DECREF(result);
  ------------------
  |  |  430|  21.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  21.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|  21.5k|    return v;
  478|       |
  479|  1.92k| onError:
  480|  1.92k|    Py_XDECREF(args);
  ------------------
  |  |  524|  1.92k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  1.92k|    Py_XDECREF(decoder);
  ------------------
  |  |  524|  1.92k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  482|  1.92k|    Py_XDECREF(result);
  ------------------
  |  |  524|  1.92k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|       |    return NULL;
  484|  21.5k|}
codecs.c:_PyCodec_TextEncoder:
  580|  17.7k|{
  581|  17.7k|    return codec_getitem_checked(encoding, "codecs.encode()", 0);
  582|  17.7k|}
codecs.c:codec_getitem_checked:
  566|  41.3k|{
  567|  41.3k|    PyObject *codec;
  568|  41.3k|    PyObject *v;
  569|       |
  570|  41.3k|    codec = _PyCodec_LookupTextEncoding(encoding, alternate_command);
  571|  41.3k|    if (codec == NULL)
  ------------------
  |  Branch (571:9): [True: 230, False: 41.1k]
  ------------------
  572|    230|        return NULL;
  573|       |
  574|  41.1k|    v = Py_NewRef(PyTuple_GET_ITEM(codec, index));
  ------------------
  |  |  550|  41.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  82.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 41.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|  41.1k|    Py_DECREF(codec);
  ------------------
  |  |  430|  41.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  41.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  41.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  576|  41.1k|    return v;
  577|  41.1k|}
codecs.c:_PyCodec_TextDecoder:
  585|  23.6k|{
  586|  23.6k|    return codec_getitem_checked(encoding, "codecs.decode()", 1);
  587|  23.6k|}
codecs.c:strict_errors:
 1514|  2.97k|{
 1515|  2.97k|    return PyCodec_StrictErrors(exc);
 1516|  2.97k|}

_Py_CArray_Init:
  113|  12.7k|_Py_CArray_Init(_Py_c_array_t* array, int item_size, int initial_num_entries) {
  114|  12.7k|    memset(array, 0, sizeof(_Py_c_array_t));
  115|  12.7k|    array->item_size = item_size;
  116|  12.7k|    array->initial_num_entries = initial_num_entries;
  117|  12.7k|    return 0;
  118|  12.7k|}
_Py_CArray_Fini:
  122|  12.7k|{
  123|  12.7k|    if (array->array) {
  ------------------
  |  Branch (123:9): [True: 2.33k, False: 10.3k]
  ------------------
  124|  2.33k|        PyMem_Free(array->array);
  125|  2.33k|        array->allocated_entries = 0;
  126|  2.33k|    }
  127|  12.7k|}
_Py_CArray_EnsureCapacity:
  131|  14.5M|{
  132|  14.5M|    void *arr = c_array->array;
  133|  14.5M|    int alloc = c_array->allocated_entries;
  134|  14.5M|    if (arr == NULL) {
  ------------------
  |  Branch (134:9): [True: 680k, False: 13.8M]
  ------------------
  135|   680k|        int new_alloc = c_array->initial_num_entries;
  136|   680k|        if (idx >= new_alloc) {
  ------------------
  |  Branch (136:13): [True: 29, False: 680k]
  ------------------
  137|     29|            new_alloc = idx + c_array->initial_num_entries;
  138|     29|        }
  139|   680k|        arr = PyMem_Calloc(new_alloc, c_array->item_size);
  140|   680k|        if (arr == NULL) {
  ------------------
  |  Branch (140:13): [True: 0, False: 680k]
  ------------------
  141|      0|            PyErr_NoMemory();
  142|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  143|      0|        }
  144|   680k|        alloc = new_alloc;
  145|   680k|    }
  146|  13.8M|    else if (idx >= alloc) {
  ------------------
  |  Branch (146:14): [True: 97.1k, False: 13.7M]
  ------------------
  147|  97.1k|        size_t oldsize = alloc * c_array->item_size;
  148|  97.1k|        int new_alloc = alloc << 1;
  149|  97.1k|        if (idx >= new_alloc) {
  ------------------
  |  Branch (149:13): [True: 3, False: 97.1k]
  ------------------
  150|      3|            new_alloc = idx + c_array->initial_num_entries;
  151|      3|        }
  152|  97.1k|        size_t newsize = new_alloc * c_array->item_size;
  153|       |
  154|  97.1k|        if (oldsize > (SIZE_MAX >> 1)) {
  ------------------
  |  Branch (154:13): [True: 0, False: 97.1k]
  ------------------
  155|      0|            PyErr_NoMemory();
  156|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  157|      0|        }
  158|       |
  159|  97.1k|        assert(newsize > 0);
  ------------------
  |  Branch (159:9): [True: 97.1k, False: 0]
  ------------------
  160|  97.1k|        void *tmp = PyMem_Realloc(arr, newsize);
  161|  97.1k|        if (tmp == NULL) {
  ------------------
  |  Branch (161:13): [True: 0, False: 97.1k]
  ------------------
  162|      0|            PyErr_NoMemory();
  163|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  164|      0|        }
  165|  97.1k|        alloc = new_alloc;
  166|  97.1k|        arr = tmp;
  167|  97.1k|        memset((char *)arr + oldsize, 0, newsize - oldsize);
  168|  97.1k|    }
  169|       |
  170|  14.5M|    c_array->array = arr;
  171|  14.5M|    c_array->allocated_entries = alloc;
  172|  14.5M|    return SUCCESS;
  ------------------
  |  |   47|  14.5M|#define SUCCESS 0
  ------------------
  173|  14.5M|}
_PyCodegen_Expression:
  923|  1.50k|{
  924|  1.50k|    VISIT(c, expr, e);
  ------------------
  |  |  460|  1.50k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.50k|    do {                    \
  |  |  |  |   52|  1.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 40, False: 1.46k]
  |  |  |  |  ------------------
  |  |  |  |   53|     40|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     40|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     40|        }                   \
  |  |  |  |   55|  1.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  925|  1.46k|    return SUCCESS;
  ------------------
  |  |   47|  1.46k|#define SUCCESS 0
  ------------------
  926|  1.50k|}
_PyCodegen_Module:
  933|  9.07k|{
  934|  9.07k|    if (SYMTABLE_ENTRY(c)->ste_has_conditional_annotations) {
  ------------------
  |  |   71|  9.07k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (934:9): [True: 2.03k, False: 7.04k]
  ------------------
  935|  2.03k|        ADDOP_I(c, loc, BUILD_SET, 0);
  ------------------
  |  |  280|  2.03k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  936|  2.03k|        ADDOP_N(c, loc, STORE_NAME, &_Py_ID(__conditional_annotations__), names);
  ------------------
  |  |  345|  2.03k|    do {                                                                \
  |  |  346|  2.03k|        assert(!OPCODE_HAS_CONST(OP)); /* use ADDOP_LOAD_CONST_NEW */   \
  |  |  347|  2.03k|        int ret = codegen_addop_o((C), (LOC), (OP),                     \
  |  |  348|  2.03k|                                  METADATA(C)->u_ ## TYPE, (O));        \
  |  |  ------------------
  |  |  |  |   76|  2.03k|#define METADATA(C) _PyCompile_Metadata(C)
  |  |  ------------------
  |  |  349|  2.03k|        Py_DECREF((O));                                                 \
  |  |  ------------------
  |  |  |  |  430|  2.03k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|  2.03k|        RETURN_IF_ERROR(ret);                                           \
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  351|  2.03k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (351:14): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  |  Branch (936:9): [True: 2.03k, Folded]
  ------------------
  937|  2.03k|    }
  938|  9.07k|    return codegen_body(c, loc, stmts, is_interactive);
  939|  9.07k|}
_PyCodegen_EnterAnonymousScope:
  988|  10.5k|{
  989|  10.5k|    _Py_DECLARE_STR(anon_module, "<module>");
  990|  10.5k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  10.5k|    do {                    \
  |  |   52|  10.5k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 10.5k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  10.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.5k]
  |  |  ------------------
  ------------------
  991|  10.5k|        codegen_enter_scope(c, &_Py_STR(anon_module), COMPILE_SCOPE_MODULE,
  992|  10.5k|                            mod, 1, NULL, NULL));
  993|  10.5k|    return SUCCESS;
  ------------------
  |  |   47|  10.5k|#define SUCCESS 0
  ------------------
  994|  10.5k|}
_PyCodegen_AddReturnAtEnd:
 6784|  52.7k|{
 6785|       |    /* Make sure every instruction stream that falls off the end returns None.
 6786|       |     * This also ensures that no jump target offsets are out of bounds.
 6787|       |     */
 6788|  52.7k|    if (addNone) {
  ------------------
  |  Branch (6788:9): [True: 45.9k, False: 6.79k]
  ------------------
 6789|  45.9k|        ADDOP_LOAD_CONST(c, NO_LOCATION, Py_None);
  ------------------
  |  |  311|  45.9k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  45.9k|    do {                    \
  |  |  |  |   52|  45.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 45.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  45.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 45.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6790|  45.9k|    }
 6791|  52.7k|    ADDOP(c, NO_LOCATION, RETURN_VALUE);
  ------------------
  |  |  294|  52.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  52.7k|    do {                    \
  |  |  |  |   52|  52.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 52.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  52.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 52.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6792|  52.7k|    return SUCCESS;
  ------------------
  |  |   47|  52.7k|#define SUCCESS 0
  ------------------
 6793|  52.7k|}
codegen.c:codegen_addop_i:
  265|  3.78M|{
  266|       |    /* oparg value is unsigned, but a signed C int is usually used to store
  267|       |       it in the C code (like Python/ceval.c).
  268|       |
  269|       |       Limit to 32-bit signed C int (rather than INT_MAX) for portability.
  270|       |
  271|       |       The argument of a concrete bytecode instruction is limited to 8-bit.
  272|       |       EXTENDED_ARG is used for 16, 24, and 32-bit arguments. */
  273|       |
  274|  3.78M|    int oparg_ = Py_SAFE_DOWNCAST(oparg, Py_ssize_t, int);
  ------------------
  |  |  247|  3.78M|#  define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) _Py_STATIC_CAST(NARROW, (VALUE))
  |  |  ------------------
  |  |  |  |   34|  3.78M|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  275|  3.78M|    assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (275:5): [True: 0, False: 3.78M]
  |  Branch (275:5): [True: 0, False: 3.78M]
  |  Branch (275:5): [True: 0, False: 3.78M]
  ------------------
  276|  3.78M|    return _PyInstructionSequence_Addop(seq, opcode, oparg_, loc);
  277|  3.78M|}
codegen.c:codegen_addop_o:
  337|   156k|{
  338|   156k|    Py_ssize_t arg = _PyCompile_DictAddObj(dict, o);
  339|   156k|    RETURN_IF_ERROR(arg);
  ------------------
  |  |   51|   156k|    do {                    \
  |  |   52|   156k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 156k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|   156k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 156k]
  |  |  ------------------
  ------------------
  340|   156k|    ADDOP_I(c, loc, opcode, arg);
  ------------------
  |  |  280|   156k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|   156k|    do {                    \
  |  |  |  |   52|   156k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 156k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   156k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 156k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|   156k|    return SUCCESS;
  ------------------
  |  |   47|   156k|#define SUCCESS 0
  ------------------
  342|   156k|}
codegen.c:codegen_body:
  943|  22.1k|{
  944|       |    /* If from __future__ import annotations is active,
  945|       |     * every annotated class and module should have __annotations__.
  946|       |     * Else __annotate__ is created when necessary. */
  947|  22.1k|    PySTEntryObject *ste = SYMTABLE_ENTRY(c);
  ------------------
  |  |   71|  22.1k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  948|  22.1k|    if ((FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS) && ste->ste_annotations_used) {
  ------------------
  |  |   69|  22.1k|#define FUTURE_FEATURES(C) _PyCompile_FutureFeatures(C)
  ------------------
                  if ((FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS) && ste->ste_annotations_used) {
  ------------------
  |  |  147|  22.1k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (948:9): [True: 2.26k, False: 19.8k]
  |  Branch (948:57): [True: 2.00k, False: 261]
  ------------------
  949|  2.00k|        ADDOP(c, loc, SETUP_ANNOTATIONS);
  ------------------
  |  |  294|  2.00k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.00k|    do {                    \
  |  |  |  |   52|  2.00k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.00k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.00k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.00k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|  2.00k|    }
  951|  22.1k|    if (!asdl_seq_LEN(stmts)) {
  ------------------
  |  |   83|  22.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  44.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 108, False: 22.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (951:9): [True: 108, False: 22.0k]
  ------------------
  952|    108|        return SUCCESS;
  ------------------
  |  |   47|    108|#define SUCCESS 0
  ------------------
  953|    108|    }
  954|  22.0k|    Py_ssize_t first_instr = 0;
  955|  22.0k|    if (!is_interactive) { /* A string literal on REPL prompt is not a docstring */
  ------------------
  |  Branch (955:9): [True: 20.2k, False: 1.80k]
  ------------------
  956|  20.2k|        if (ste->ste_has_docstring) {
  ------------------
  |  Branch (956:13): [True: 1.31k, False: 18.8k]
  ------------------
  957|  1.31k|            PyObject *docstring = _PyAST_GetDocString(stmts);
  958|  1.31k|            assert(docstring);
  ------------------
  |  Branch (958:13): [True: 1.31k, False: 0]
  ------------------
  959|  1.31k|            first_instr = 1;
  960|       |            /* set docstring */
  961|  1.31k|            assert(OPTIMIZATION_LEVEL(c) < 2);
  ------------------
  |  Branch (961:13): [True: 1.31k, False: 0]
  ------------------
  962|  1.31k|            PyObject *cleandoc = _PyCompile_CleanDoc(docstring);
  963|  1.31k|            if (cleandoc == NULL) {
  ------------------
  |  Branch (963:17): [True: 0, False: 1.31k]
  ------------------
  964|      0|                return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  965|      0|            }
  966|  1.31k|            stmt_ty st = (stmt_ty)asdl_seq_GET(stmts, 0);
  ------------------
  |  |   82|  1.31k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.31k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  967|  1.31k|            assert(st->kind == Expr_kind);
  ------------------
  |  Branch (967:13): [True: 1.31k, False: 0]
  ------------------
  968|  1.31k|            location loc = LOC(st->v.Expr.value);
  ------------------
  |  |   88|  1.31k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.31k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.31k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.31k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.31k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.31k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  969|  1.31k|            ADDOP_LOAD_CONST(c, loc, cleandoc);
  ------------------
  |  |  311|  1.31k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.31k|    do {                    \
  |  |  |  |   52|  1.31k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  970|  1.31k|            Py_DECREF(cleandoc);
  ------------------
  |  |  430|  1.31k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.31k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  971|  1.31k|            RETURN_IF_ERROR(codegen_nameop(c, NO_LOCATION, &_Py_ID(__doc__), Store));
  ------------------
  |  |   51|  1.31k|    do {                    \
  |  |   52|  1.31k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.31k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.31k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.31k]
  |  |  ------------------
  ------------------
  972|  1.31k|        }
  973|  20.2k|    }
  974|   134k|    for (Py_ssize_t i = first_instr; i < asdl_seq_LEN(stmts); i++) {
  ------------------
  |  |   83|   134k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   269k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 134k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (974:38): [True: 113k, False: 21.5k]
  ------------------
  975|   113k|        VISIT(c, stmt, (stmt_ty)asdl_seq_GET(stmts, i));
  ------------------
  |  |  460|   113k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|   113k|    do {                    \
  |  |  |  |   52|   113k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 469, False: 112k]
  |  |  |  |  ------------------
  |  |  |  |   53|    469|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    469|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    469|        }                   \
  |  |  |  |   55|   113k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 112k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  976|   113k|    }
  977|       |    // If there are annotations and the future import is not on, we
  978|       |    // collect the annotations in a separate pass and generate an
  979|       |    // __annotate__ function. See PEP 649.
  980|  21.5k|    if (!(FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS)) {
  ------------------
  |  |   69|  21.5k|#define FUTURE_FEATURES(C) _PyCompile_FutureFeatures(C)
  ------------------
                  if (!(FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS)) {
  ------------------
  |  |  147|  21.5k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (980:9): [True: 19.3k, False: 2.24k]
  ------------------
  981|  19.3k|        RETURN_IF_ERROR(codegen_process_deferred_annotations(c, loc));
  ------------------
  |  |   51|  19.3k|    do {                    \
  |  |   52|  19.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 9, False: 19.2k]
  |  |  ------------------
  |  |   53|      9|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      9|#define ERROR -1
  |  |  ------------------
  |  |   54|      9|        }                   \
  |  |   55|  19.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 19.2k]
  |  |  ------------------
  ------------------
  982|  19.3k|    }
  983|  21.5k|    return SUCCESS;
  ------------------
  |  |   47|  21.5k|#define SUCCESS 0
  ------------------
  984|  21.5k|}
codegen.c:codegen_nameop:
 3319|   526k|{
 3320|   526k|    assert(!_PyUnicode_EqualToASCIIString(name, "None") &&
  ------------------
  |  Branch (3320:5): [True: 526k, False: 0]
  |  Branch (3320:5): [True: 526k, False: 0]
  |  Branch (3320:5): [True: 526k, False: 0]
  ------------------
 3321|   526k|           !_PyUnicode_EqualToASCIIString(name, "True") &&
 3322|   526k|           !_PyUnicode_EqualToASCIIString(name, "False"));
 3323|       |
 3324|   526k|    PyObject *mangled = _PyCompile_MaybeMangle(c, name);
 3325|   526k|    if (!mangled) {
  ------------------
  |  Branch (3325:9): [True: 0, False: 526k]
  ------------------
 3326|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 3327|      0|    }
 3328|       |
 3329|   526k|    _PyCompile_optype optype;
 3330|   526k|    Py_ssize_t arg = 0;
 3331|   526k|    int scope = _PyCompile_ResolveNameop(c, mangled, &optype, &arg);
 3332|   526k|    if (scope < 0) {
  ------------------
  |  Branch (3332:9): [True: 0, False: 526k]
  ------------------
 3333|      0|        Py_DECREF(mangled);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3334|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 3335|      0|    }
 3336|       |
 3337|   526k|    int op = 0;
 3338|   526k|    switch (optype) {
  ------------------
  |  Branch (3338:13): [True: 526k, False: 0]
  ------------------
 3339|  9.30k|    case COMPILE_OP_DEREF:
  ------------------
  |  Branch (3339:5): [True: 9.30k, False: 516k]
  ------------------
 3340|  9.30k|        switch (ctx) {
  ------------------
  |  Branch (3340:17): [True: 9.30k, False: 0]
  ------------------
 3341|  6.31k|        case Load:
  ------------------
  |  Branch (3341:9): [True: 6.31k, False: 2.98k]
  ------------------
 3342|  6.31k|            if (SYMTABLE_ENTRY(c)->ste_type == ClassBlock) {
  ------------------
  |  |   71|  6.31k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (3342:17): [True: 2.67k, False: 3.64k]
  ------------------
 3343|  2.67k|                op = LOAD_FROM_DICT_OR_DEREF;
  ------------------
  |  |   99|  2.67k|#define LOAD_FROM_DICT_OR_DEREF                 86
  ------------------
 3344|       |                // First load the locals
 3345|  2.67k|                if (codegen_addop_noarg(INSTR_SEQUENCE(c), LOAD_LOCALS, loc) < 0) {
  ------------------
  |  |   68|  2.67k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
                              if (codegen_addop_noarg(INSTR_SEQUENCE(c), LOAD_LOCALS, loc) < 0) {
  ------------------
  |  |   33|  2.67k|#define LOAD_LOCALS                             20
  ------------------
  |  Branch (3345:21): [True: 0, False: 2.67k]
  ------------------
 3346|      0|                    goto error;
 3347|      0|                }
 3348|  2.67k|            }
 3349|  3.64k|            else if (SYMTABLE_ENTRY(c)->ste_can_see_class_scope) {
  ------------------
  |  |   71|  3.64k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (3349:22): [True: 169, False: 3.47k]
  ------------------
 3350|    169|                op = LOAD_FROM_DICT_OR_DEREF;
  ------------------
  |  |   99|    169|#define LOAD_FROM_DICT_OR_DEREF                 86
  ------------------
 3351|       |                // First load the classdict
 3352|    169|                if (codegen_load_classdict_freevar(c, loc) < 0) {
  ------------------
  |  Branch (3352:21): [True: 0, False: 169]
  ------------------
 3353|      0|                    goto error;
 3354|      0|                }
 3355|    169|            }
 3356|  3.47k|            else {
 3357|  3.47k|                op = LOAD_DEREF;
  ------------------
  |  |   92|  3.47k|#define LOAD_DEREF                              79
  ------------------
 3358|  3.47k|            }
 3359|  6.31k|            break;
 3360|  6.31k|        case Store: op = STORE_DEREF; break;
  ------------------
  |  |  120|  2.98k|#define STORE_DEREF                            107
  ------------------
  |  Branch (3360:9): [True: 2.98k, False: 6.31k]
  ------------------
 3361|      0|        case Del: op = DELETE_DEREF; break;
  ------------------
  |  |   72|      0|#define DELETE_DEREF                            59
  ------------------
  |  Branch (3361:9): [True: 0, False: 9.30k]
  ------------------
 3362|  9.30k|        }
 3363|  9.30k|        break;
 3364|   131k|    case COMPILE_OP_FAST:
  ------------------
  |  Branch (3364:5): [True: 131k, False: 394k]
  ------------------
 3365|   131k|        switch (ctx) {
  ------------------
  |  Branch (3365:17): [True: 131k, False: 0]
  ------------------
 3366|  19.0k|        case Load: op = LOAD_FAST; break;
  ------------------
  |  |   93|  19.0k|#define LOAD_FAST                               80
  ------------------
  |  Branch (3366:9): [True: 19.0k, False: 112k]
  ------------------
 3367|   109k|        case Store: op = STORE_FAST; break;
  ------------------
  |  |  121|   109k|#define STORE_FAST                             108
  ------------------
  |  Branch (3367:9): [True: 109k, False: 22.1k]
  ------------------
 3368|  3.12k|        case Del: op = DELETE_FAST; break;
  ------------------
  |  |   73|  3.12k|#define DELETE_FAST                             60
  ------------------
  |  Branch (3368:9): [True: 3.12k, False: 128k]
  ------------------
 3369|   131k|        }
 3370|   131k|        ADDOP_N(c, loc, op, mangled, varnames);
  ------------------
  |  |  345|   131k|    do {                                                                \
  |  |  346|   131k|        assert(!OPCODE_HAS_CONST(OP)); /* use ADDOP_LOAD_CONST_NEW */   \
  |  |  347|   131k|        int ret = codegen_addop_o((C), (LOC), (OP),                     \
  |  |  348|   131k|                                  METADATA(C)->u_ ## TYPE, (O));        \
  |  |  ------------------
  |  |  |  |   76|   131k|#define METADATA(C) _PyCompile_Metadata(C)
  |  |  ------------------
  |  |  349|   131k|        Py_DECREF((O));                                                 \
  |  |  ------------------
  |  |  |  |  430|   131k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   131k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   131k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|   131k|        RETURN_IF_ERROR(ret);                                           \
  |  |  ------------------
  |  |  |  |   51|   131k|    do {                    \
  |  |  |  |   52|   131k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 131k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   131k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 131k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  351|   131k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (351:14): [Folded, False: 131k]
  |  |  ------------------
  ------------------
  |  Branch (3370:9): [True: 131k, False: 0]
  ------------------
 3371|   131k|        return SUCCESS;
  ------------------
  |  |   47|   131k|#define SUCCESS 0
  ------------------
 3372|  93.5k|    case COMPILE_OP_GLOBAL:
  ------------------
  |  Branch (3372:5): [True: 93.5k, False: 432k]
  ------------------
 3373|  93.5k|        switch (ctx) {
  ------------------
  |  Branch (3373:17): [True: 93.5k, False: 0]
  ------------------
 3374|  92.9k|        case Load:
  ------------------
  |  Branch (3374:9): [True: 92.9k, False: 539]
  ------------------
 3375|  92.9k|            if (SYMTABLE_ENTRY(c)->ste_can_see_class_scope && scope == GLOBAL_IMPLICIT) {
  ------------------
  |  |   71|  92.9k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
                          if (SYMTABLE_ENTRY(c)->ste_can_see_class_scope && scope == GLOBAL_IMPLICIT) {
  ------------------
  |  |  193|  13.9k|#define GLOBAL_IMPLICIT 3
  ------------------
  |  Branch (3375:17): [True: 13.9k, False: 79.0k]
  |  Branch (3375:63): [True: 13.6k, False: 348]
  ------------------
 3376|  13.6k|                op = LOAD_FROM_DICT_OR_GLOBALS;
  ------------------
  |  |  100|  13.6k|#define LOAD_FROM_DICT_OR_GLOBALS               87
  ------------------
 3377|       |                // First load the classdict
 3378|  13.6k|                if (codegen_load_classdict_freevar(c, loc) < 0) {
  ------------------
  |  Branch (3378:21): [True: 0, False: 13.6k]
  ------------------
 3379|      0|                    goto error;
 3380|      0|                }
 3381|  79.3k|            } else {
 3382|  79.3k|                op = LOAD_GLOBAL;
  ------------------
  |  |  101|  79.3k|#define LOAD_GLOBAL                             88
  ------------------
 3383|  79.3k|            }
 3384|  92.9k|            break;
 3385|  92.9k|        case Store: op = STORE_GLOBAL; break;
  ------------------
  |  |  124|    492|#define STORE_GLOBAL                           111
  ------------------
  |  Branch (3385:9): [True: 492, False: 93.0k]
  ------------------
 3386|     47|        case Del:
  ------------------
  |  Branch (3386:9): [True: 47, False: 93.4k]
  ------------------
 3387|     47|            ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|     47|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     47|    do {                    \
  |  |  |  |   52|     47|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     47|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3388|     47|            op = STORE_GLOBAL;
  ------------------
  |  |  124|     47|#define STORE_GLOBAL                           111
  ------------------
 3389|     47|            break;
 3390|  93.5k|        }
 3391|  93.5k|        break;
 3392|   291k|    case COMPILE_OP_NAME:
  ------------------
  |  Branch (3392:5): [True: 291k, False: 234k]
  ------------------
 3393|   291k|        switch (ctx) {
  ------------------
  |  Branch (3393:17): [True: 291k, False: 0]
  ------------------
 3394|   171k|        case Load:
  ------------------
  |  Branch (3394:9): [True: 171k, False: 119k]
  ------------------
 3395|       |            /* LOAD_NAME in a class reads the class dict; inlined comps must not. */
 3396|   171k|            op = (SCOPE_TYPE(c) == COMPILE_SCOPE_CLASS
  ------------------
  |  |   74|   171k|#define SCOPE_TYPE(C) _PyCompile_ScopeType(C)
  ------------------
  |  Branch (3396:19): [True: 49.9k, False: 121k]
  ------------------
 3397|  49.9k|                  && SYMTABLE_ENTRY(c)->ste_type == InlinedComprehensionBlock)
  ------------------
  |  |   71|  49.9k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (3397:22): [True: 16, False: 49.9k]
  ------------------
 3398|   171k|                ? LOAD_GLOBAL
  ------------------
  |  |  101|     16|#define LOAD_GLOBAL                             88
  ------------------
 3399|   171k|                : LOAD_NAME;
  ------------------
  |  |  102|   343k|#define LOAD_NAME                               89
  ------------------
 3400|   171k|            break;
 3401|   118k|        case Store: op = STORE_NAME; break;
  ------------------
  |  |  125|   118k|#define STORE_NAME                             112
  ------------------
  |  Branch (3401:9): [True: 118k, False: 172k]
  ------------------
 3402|    935|        case Del:
  ------------------
  |  Branch (3402:9): [True: 935, False: 290k]
  ------------------
 3403|    935|            ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|    935|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    935|    do {                    \
  |  |  |  |   52|    935|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 935]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    935|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 935]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3404|    935|            op = STORE_NAME;
  ------------------
  |  |  125|    935|#define STORE_NAME                             112
  ------------------
 3405|    935|            break;
 3406|   291k|        }
 3407|   291k|        break;
 3408|   526k|    }
 3409|       |
 3410|   526k|    assert(op);
  ------------------
  |  Branch (3410:5): [True: 394k, False: 0]
  ------------------
 3411|   394k|    Py_DECREF(mangled);
  ------------------
  |  |  430|   394k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   394k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   394k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3412|   394k|    if (op == LOAD_GLOBAL) {
  ------------------
  |  |  101|   394k|#define LOAD_GLOBAL                             88
  ------------------
  |  Branch (3412:9): [True: 79.3k, False: 314k]
  ------------------
 3413|  79.3k|        arg <<= 1;
 3414|  79.3k|    }
 3415|   394k|    ADDOP_I(c, loc, op, arg);
  ------------------
  |  |  280|   394k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|   394k|    do {                    \
  |  |  |  |   52|   394k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 394k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   394k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 394k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3416|   394k|    return SUCCESS;
  ------------------
  |  |   47|   394k|#define SUCCESS 0
  ------------------
 3417|       |
 3418|      0|error:
 3419|      0|    Py_DECREF(mangled);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3420|      0|    return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 3421|   394k|}
codegen.c:codegen_load_classdict_freevar:
 3311|  13.7k|{
 3312|  13.7k|    ADDOP_N(c, loc, LOAD_DEREF, &_Py_ID(__classdict__), freevars);
  ------------------
  |  |  345|  13.7k|    do {                                                                \
  |  |  346|  13.7k|        assert(!OPCODE_HAS_CONST(OP)); /* use ADDOP_LOAD_CONST_NEW */   \
  |  |  347|  13.7k|        int ret = codegen_addop_o((C), (LOC), (OP),                     \
  |  |  348|  13.7k|                                  METADATA(C)->u_ ## TYPE, (O));        \
  |  |  ------------------
  |  |  |  |   76|  13.7k|#define METADATA(C) _PyCompile_Metadata(C)
  |  |  ------------------
  |  |  349|  13.7k|        Py_DECREF((O));                                                 \
  |  |  ------------------
  |  |  |  |  430|  13.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  13.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  13.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|  13.7k|        RETURN_IF_ERROR(ret);                                           \
  |  |  ------------------
  |  |  |  |   51|  13.7k|    do {                    \
  |  |  |  |   52|  13.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  351|  13.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (351:14): [Folded, False: 13.7k]
  |  |  ------------------
  ------------------
  |  Branch (3312:5): [True: 13.7k, Folded]
  ------------------
 3313|  13.7k|    return SUCCESS;
  ------------------
  |  |   47|  13.7k|#define SUCCESS 0
  ------------------
 3314|  13.7k|}
codegen.c:codegen_visit_stmt:
 3123|   172k|{
 3124|       |
 3125|   172k|    switch (s->kind) {
  ------------------
  |  Branch (3125:13): [True: 172k, False: 0]
  ------------------
 3126|  4.92k|    case FunctionDef_kind:
  ------------------
  |  Branch (3126:5): [True: 4.92k, False: 167k]
  ------------------
 3127|  4.92k|        return codegen_function(c, s, 0);
 3128|  13.0k|    case ClassDef_kind:
  ------------------
  |  Branch (3128:5): [True: 13.0k, False: 159k]
  ------------------
 3129|  13.0k|        return codegen_class(c, s);
 3130|    381|    case TypeAlias_kind:
  ------------------
  |  Branch (3130:5): [True: 381, False: 172k]
  ------------------
 3131|    381|        return codegen_typealias(c, s);
 3132|    229|    case Return_kind:
  ------------------
  |  Branch (3132:5): [True: 229, False: 172k]
  ------------------
 3133|    229|        return codegen_return(c, s);
 3134|  1.25k|    case Delete_kind:
  ------------------
  |  Branch (3134:5): [True: 1.25k, False: 171k]
  ------------------
 3135|  1.25k|        VISIT_SEQ(c, expr, s->v.Delete.targets);
  ------------------
  |  |  466|  1.25k|    do {                                                                    \
  |  |  467|  1.25k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  5.85k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  5.85k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 4.60k, False: 1.25k]
  |  |  ------------------
  |  |  469|  4.60k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  4.60k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.60k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  4.60k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  4.60k|    do {                    \
  |  |  |  |   52|  4.60k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 4.60k]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|  4.60k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.60k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  4.60k|        }                                                                   \
  |  |  472|  1.25k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.25k]
  |  |  ------------------
  ------------------
 3136|  1.25k|        break;
 3137|  8.45k|    case Assign_kind:
  ------------------
  |  Branch (3137:5): [True: 8.45k, False: 164k]
  ------------------
 3138|  8.45k|    {
 3139|  8.45k|        Py_ssize_t n = asdl_seq_LEN(s->v.Assign.targets);
  ------------------
  |  |   83|  8.45k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  16.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 8.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3140|  8.45k|        VISIT(c, expr, s->v.Assign.value);
  ------------------
  |  |  460|  8.45k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  8.45k|    do {                    \
  |  |  |  |   52|  8.45k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 11, False: 8.43k]
  |  |  |  |  ------------------
  |  |  |  |   53|     11|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     11|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     11|        }                   \
  |  |  |  |   55|  8.45k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.43k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3141|  59.0k|        for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3141:32): [True: 50.6k, False: 8.43k]
  ------------------
 3142|  50.6k|            if (i < n - 1) {
  ------------------
  |  Branch (3142:17): [True: 42.2k, False: 8.43k]
  ------------------
 3143|  42.2k|                ADDOP_I(c, LOC(s), COPY, 1);
  ------------------
  |  |  280|  42.2k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  42.2k|    do {                    \
  |  |  |  |   52|  42.2k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 42.2k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  42.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 42.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3144|  42.2k|            }
 3145|  50.6k|            VISIT(c, expr,
  ------------------
  |  |  460|  50.6k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  50.6k|    do {                    \
  |  |  |  |   52|  50.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 9, False: 50.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      9|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      9|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      9|        }                   \
  |  |  |  |   55|  50.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 50.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3146|  50.6k|                  (expr_ty)asdl_seq_GET(s->v.Assign.targets, i));
 3147|  50.6k|        }
 3148|  8.43k|        break;
 3149|  8.43k|    }
 3150|  8.43k|    case AugAssign_kind:
  ------------------
  |  Branch (3150:5): [True: 6.50k, False: 166k]
  ------------------
 3151|  6.50k|        return codegen_augassign(c, s);
 3152|  25.0k|    case AnnAssign_kind:
  ------------------
  |  Branch (3152:5): [True: 25.0k, False: 147k]
  ------------------
 3153|  25.0k|        return codegen_annassign(c, s);
 3154|    623|    case For_kind:
  ------------------
  |  Branch (3154:5): [True: 623, False: 172k]
  ------------------
 3155|    623|        CODEGEN_COND_BLOCK(codegen_for, c, s);
  ------------------
  |  | 3114|    623|    do { \
  |  | 3115|    623|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|    623|        int result = FUNC((C), (S)); \
  |  | 3117|    623|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|    623|        return result; \
  |  | 3119|    623|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3156|      0|        break;
 3157|  2.13k|    case While_kind:
  ------------------
  |  Branch (3157:5): [True: 2.13k, False: 170k]
  ------------------
 3158|  2.13k|        CODEGEN_COND_BLOCK(codegen_while, c, s);
  ------------------
  |  | 3114|  2.13k|    do { \
  |  | 3115|  2.13k|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|  2.13k|        int result = FUNC((C), (S)); \
  |  | 3117|  2.13k|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|  2.13k|        return result; \
  |  | 3119|  2.13k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3159|      0|        break;
 3160|  1.69k|    case If_kind:
  ------------------
  |  Branch (3160:5): [True: 1.69k, False: 171k]
  ------------------
 3161|  1.69k|        CODEGEN_COND_BLOCK(codegen_if, c, s);
  ------------------
  |  | 3114|  1.69k|    do { \
  |  | 3115|  1.69k|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|  1.69k|        int result = FUNC((C), (S)); \
  |  | 3117|  1.69k|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|  1.69k|        return result; \
  |  | 3119|  1.69k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3162|      0|        break;
 3163|    198|    case Match_kind:
  ------------------
  |  Branch (3163:5): [True: 198, False: 172k]
  ------------------
 3164|    198|        CODEGEN_COND_BLOCK(codegen_match, c, s);
  ------------------
  |  | 3114|    198|    do { \
  |  | 3115|    198|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|    198|        int result = FUNC((C), (S)); \
  |  | 3117|    198|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|    198|        return result; \
  |  | 3119|    198|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3165|      0|        break;
 3166|    497|    case Raise_kind:
  ------------------
  |  Branch (3166:5): [True: 497, False: 172k]
  ------------------
 3167|    497|    {
 3168|    497|        Py_ssize_t n = 0;
 3169|    497|        if (s->v.Raise.exc) {
  ------------------
  |  Branch (3169:13): [True: 226, False: 271]
  ------------------
 3170|    226|            VISIT(c, expr, s->v.Raise.exc);
  ------------------
  |  |  460|    226|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    226|    do {                    \
  |  |  |  |   52|    226|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 8, False: 218]
  |  |  |  |  ------------------
  |  |  |  |   53|      8|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      8|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      8|        }                   \
  |  |  |  |   55|    226|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 218]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3171|    218|            n++;
 3172|    218|            if (s->v.Raise.cause) {
  ------------------
  |  Branch (3172:17): [True: 143, False: 75]
  ------------------
 3173|    143|                VISIT(c, expr, s->v.Raise.cause);
  ------------------
  |  |  460|    143|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    143|    do {                    \
  |  |  |  |   52|    143|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 143]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    143|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 143]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3174|    143|                n++;
 3175|    143|            }
 3176|    218|        }
 3177|    489|        ADDOP_I(c, LOC(s), RAISE_VARARGS, (int)n);
  ------------------
  |  |  280|    489|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    489|    do {                    \
  |  |  |  |   52|    489|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 489]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    489|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 489]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3178|    489|        break;
 3179|    489|    }
 3180|  2.50k|    case Try_kind:
  ------------------
  |  Branch (3180:5): [True: 2.50k, False: 170k]
  ------------------
 3181|  2.50k|        CODEGEN_COND_BLOCK(codegen_try, c, s);
  ------------------
  |  | 3114|  2.50k|    do { \
  |  | 3115|  2.50k|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|  2.50k|        int result = FUNC((C), (S)); \
  |  | 3117|  2.50k|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|  2.50k|        return result; \
  |  | 3119|  2.50k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3182|      0|        break;
 3183|  1.18k|    case TryStar_kind:
  ------------------
  |  Branch (3183:5): [True: 1.18k, False: 171k]
  ------------------
 3184|  1.18k|        CODEGEN_COND_BLOCK(codegen_try_star, c, s);
  ------------------
  |  | 3114|  1.18k|    do { \
  |  | 3115|  1.18k|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|  1.18k|        int result = FUNC((C), (S)); \
  |  | 3117|  1.18k|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|  1.18k|        return result; \
  |  | 3119|  1.18k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3185|      0|        break;
 3186|  2.17k|    case Assert_kind:
  ------------------
  |  Branch (3186:5): [True: 2.17k, False: 170k]
  ------------------
 3187|  2.17k|        return codegen_assert(c, s);
 3188|  2.49k|    case Import_kind:
  ------------------
  |  Branch (3188:5): [True: 2.49k, False: 170k]
  ------------------
 3189|  2.49k|        return codegen_import(c, s);
 3190|  2.18k|    case ImportFrom_kind:
  ------------------
  |  Branch (3190:5): [True: 2.18k, False: 170k]
  ------------------
 3191|  2.18k|        return codegen_from_import(c, s);
 3192|    600|    case Global_kind:
  ------------------
  |  Branch (3192:5): [True: 600, False: 172k]
  ------------------
 3193|    600|    case Nonlocal_kind:
  ------------------
  |  Branch (3193:5): [True: 0, False: 172k]
  ------------------
 3194|    600|        break;
 3195|  89.8k|    case Expr_kind:
  ------------------
  |  Branch (3195:5): [True: 89.8k, False: 82.8k]
  ------------------
 3196|  89.8k|    {
 3197|  89.8k|        return codegen_stmt_expr(c, LOC(s), s->v.Expr.value);
  ------------------
  |  |   88|  89.8k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  89.8k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  89.8k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  89.8k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  89.8k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  89.8k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3198|    600|    }
 3199|  1.38k|    case Pass_kind:
  ------------------
  |  Branch (3199:5): [True: 1.38k, False: 171k]
  ------------------
 3200|  1.38k|    {
 3201|  1.38k|        ADDOP(c, LOC(s), NOP);
  ------------------
  |  |  294|  1.38k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.38k|    do {                    \
  |  |  |  |   52|  1.38k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.38k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.38k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3202|  1.38k|        break;
 3203|  1.38k|    }
 3204|  1.38k|    case Break_kind:
  ------------------
  |  Branch (3204:5): [True: 9, False: 172k]
  ------------------
 3205|      9|    {
 3206|      9|        return codegen_break(c, LOC(s));
  ------------------
  |  |   88|      9|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      9|    (_Py_SourceLocation){ \
  |  |  |  |   59|      9|               .lineno = (n)->lineno, \
  |  |  |  |   60|      9|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      9|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      9|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3207|  1.38k|    }
 3208|    133|    case Continue_kind:
  ------------------
  |  Branch (3208:5): [True: 133, False: 172k]
  ------------------
 3209|    133|    {
 3210|    133|        return codegen_continue(c, LOC(s));
  ------------------
  |  |   88|    133|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    133|    (_Py_SourceLocation){ \
  |  |  |  |   59|    133|               .lineno = (n)->lineno, \
  |  |  |  |   60|    133|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    133|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    133|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3211|  1.38k|    }
 3212|    545|    case With_kind:
  ------------------
  |  Branch (3212:5): [True: 545, False: 172k]
  ------------------
 3213|    545|        CODEGEN_COND_BLOCK(codegen_with, c, s);
  ------------------
  |  | 3114|    545|    do { \
  |  | 3115|    545|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|    545|        int result = FUNC((C), (S)); \
  |  | 3117|    545|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|    545|        return result; \
  |  | 3119|    545|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3214|      0|        break;
 3215|  2.50k|    case AsyncFunctionDef_kind:
  ------------------
  |  Branch (3215:5): [True: 2.50k, False: 170k]
  ------------------
 3216|  2.50k|        return codegen_function(c, s, 1);
 3217|  2.09k|    case AsyncWith_kind:
  ------------------
  |  Branch (3217:5): [True: 2.09k, False: 170k]
  ------------------
 3218|  2.09k|        CODEGEN_COND_BLOCK(codegen_async_with, c, s);
  ------------------
  |  | 3114|  2.09k|    do { \
  |  | 3115|  2.09k|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|  2.09k|        int result = FUNC((C), (S)); \
  |  | 3117|  2.09k|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|  2.09k|        return result; \
  |  | 3119|  2.09k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3219|      0|        break;
 3220|     91|    case AsyncFor_kind:
  ------------------
  |  Branch (3220:5): [True: 91, False: 172k]
  ------------------
 3221|     91|        CODEGEN_COND_BLOCK(codegen_async_for, c, s);
  ------------------
  |  | 3114|     91|    do { \
  |  | 3115|     91|        _PyCompile_EnterConditionalBlock((C)); \
  |  | 3116|     91|        int result = FUNC((C), (S)); \
  |  | 3117|     91|        _PyCompile_LeaveConditionalBlock((C)); \
  |  | 3118|     91|        return result; \
  |  | 3119|     91|    } while(0)
  |  |  ------------------
  |  |  |  Branch (3119:13): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3222|      0|        break;
 3223|   172k|    }
 3224|       |
 3225|  12.1k|    return SUCCESS;
  ------------------
  |  |   47|  12.1k|#define SUCCESS 0
  ------------------
 3226|   172k|}
codegen.c:codegen_function:
 1485|  7.42k|{
 1486|  7.42k|    arguments_ty args;
 1487|  7.42k|    expr_ty returns;
 1488|  7.42k|    identifier name;
 1489|  7.42k|    asdl_expr_seq *decos;
 1490|  7.42k|    asdl_type_param_seq *type_params;
 1491|  7.42k|    Py_ssize_t funcflags;
 1492|  7.42k|    int firstlineno;
 1493|       |
 1494|  7.42k|    if (is_async) {
  ------------------
  |  Branch (1494:9): [True: 2.50k, False: 4.92k]
  ------------------
 1495|  2.50k|        assert(s->kind == AsyncFunctionDef_kind);
  ------------------
  |  Branch (1495:9): [True: 2.50k, False: 0]
  ------------------
 1496|       |
 1497|  2.50k|        args = s->v.AsyncFunctionDef.args;
 1498|  2.50k|        returns = s->v.AsyncFunctionDef.returns;
 1499|  2.50k|        decos = s->v.AsyncFunctionDef.decorator_list;
 1500|  2.50k|        name = s->v.AsyncFunctionDef.name;
 1501|  2.50k|        type_params = s->v.AsyncFunctionDef.type_params;
 1502|  4.92k|    } else {
 1503|  4.92k|        assert(s->kind == FunctionDef_kind);
  ------------------
  |  Branch (1503:9): [True: 4.92k, False: 0]
  ------------------
 1504|       |
 1505|  4.92k|        args = s->v.FunctionDef.args;
 1506|  4.92k|        returns = s->v.FunctionDef.returns;
 1507|  4.92k|        decos = s->v.FunctionDef.decorator_list;
 1508|  4.92k|        name = s->v.FunctionDef.name;
 1509|  4.92k|        type_params = s->v.FunctionDef.type_params;
 1510|  4.92k|    }
 1511|       |
 1512|  7.42k|    RETURN_IF_ERROR(codegen_decorators(c, decos));
  ------------------
  |  |   51|  7.42k|    do {                    \
  |  |   52|  7.42k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 7.42k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  7.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 7.42k]
  |  |  ------------------
  ------------------
 1513|       |
 1514|  7.42k|    firstlineno = s->lineno;
 1515|  7.42k|    if (asdl_seq_LEN(decos)) {
  ------------------
  |  |   83|  7.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  14.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 310, False: 7.11k]
  |  |  |  |  |  Branch (302:37): [True: 7.11k, False: 310]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1516|    310|        firstlineno = ((expr_ty)asdl_seq_GET(decos, 0))->lineno;
  ------------------
  |  |   82|    310|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    310|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1517|    310|    }
 1518|       |
 1519|  7.42k|    location loc = LOC(s);
  ------------------
  |  |   88|  7.42k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  7.42k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  7.42k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  7.42k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  7.42k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  7.42k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1520|       |
 1521|  7.42k|    int is_generic = asdl_seq_LEN(type_params) > 0;
  ------------------
  |  |   83|  7.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  14.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 5.13k, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1522|       |
 1523|  7.42k|    funcflags = codegen_default_arguments(c, loc, args);
 1524|  7.42k|    RETURN_IF_ERROR(funcflags);
  ------------------
  |  |   51|  7.42k|    do {                    \
  |  |   52|  7.42k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 7.42k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  7.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 7.42k]
  |  |  ------------------
  ------------------
 1525|       |
 1526|  7.42k|    int num_typeparam_args = 0;
 1527|       |
 1528|  7.42k|    if (is_generic) {
  ------------------
  |  Branch (1528:9): [True: 2.28k, False: 5.13k]
  ------------------
 1529|  2.28k|        if (funcflags & MAKE_FUNCTION_DEFAULTS) {
  ------------------
  |  |   64|  2.28k|#define MAKE_FUNCTION_DEFAULTS    0x01
  ------------------
  |  Branch (1529:13): [True: 0, False: 2.28k]
  ------------------
 1530|      0|            num_typeparam_args += 1;
 1531|      0|        }
 1532|  2.28k|        if (funcflags & MAKE_FUNCTION_KWDEFAULTS) {
  ------------------
  |  |   65|  2.28k|#define MAKE_FUNCTION_KWDEFAULTS  0x02
  ------------------
  |  Branch (1532:13): [True: 0, False: 2.28k]
  ------------------
 1533|      0|            num_typeparam_args += 1;
 1534|      0|        }
 1535|  2.28k|        if (num_typeparam_args == 2) {
  ------------------
  |  Branch (1535:13): [True: 0, False: 2.28k]
  ------------------
 1536|      0|            ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1537|      0|        }
 1538|  2.28k|        PyObject *type_params_name = PyUnicode_FromFormat("<generic parameters of %U>", name);
 1539|  2.28k|        if (!type_params_name) {
  ------------------
  |  Branch (1539:13): [True: 0, False: 2.28k]
  ------------------
 1540|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1541|      0|        }
 1542|  2.28k|        _PyCompile_CodeUnitMetadata umd = {
 1543|  2.28k|            .u_argcount = num_typeparam_args,
 1544|  2.28k|        };
 1545|  2.28k|        int ret = codegen_enter_scope(c, type_params_name, COMPILE_SCOPE_ANNOTATIONS,
 1546|  2.28k|                                      (void *)type_params, firstlineno, NULL, &umd);
 1547|  2.28k|        Py_DECREF(type_params_name);
  ------------------
  |  |  430|  2.28k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1548|  2.28k|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  2.28k|    do {                    \
  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 1549|  2.28k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_type_params(c, type_params));
  ------------------
  |  |   58|  2.28k|    do {                                    \
  |  |   59|  2.28k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 1, False: 2.28k]
  |  |  ------------------
  |  |   60|      1|            _PyCompile_ExitScope((C));      \
  |  |   61|      1|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   62|      1|        }                                   \
  |  |   63|  2.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 1550|  2.28k|        for (int i = 0; i < num_typeparam_args; i++) {
  ------------------
  |  Branch (1550:25): [True: 0, False: 2.28k]
  ------------------
 1551|      0|            ADDOP_I_IN_SCOPE(c, loc, LOAD_FAST, i);
  ------------------
  |  |  283|      0|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|      0|    do {                                    \
  |  |  |  |   59|      0|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1552|      0|        }
 1553|  2.28k|    }
 1554|       |
 1555|  7.42k|    int annotations_flag = codegen_function_annotations(c, loc, args, returns);
 1556|  7.42k|    if (annotations_flag < 0) {
  ------------------
  |  Branch (1556:9): [True: 0, False: 7.42k]
  ------------------
 1557|      0|        if (is_generic) {
  ------------------
  |  Branch (1557:13): [True: 0, False: 0]
  ------------------
 1558|      0|            _PyCompile_ExitScope(c);
 1559|      0|        }
 1560|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1561|      0|    }
 1562|  7.42k|    funcflags |= annotations_flag;
 1563|       |
 1564|  7.42k|    int ret = codegen_function_body(c, s, is_async, funcflags, firstlineno);
 1565|  7.42k|    if (is_generic) {
  ------------------
  |  Branch (1565:9): [True: 2.28k, False: 5.13k]
  ------------------
 1566|  2.28k|        RETURN_IF_ERROR_IN_SCOPE(c, ret);
  ------------------
  |  |   58|  2.28k|    do {                                    \
  |  |   59|  2.28k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 5, False: 2.28k]
  |  |  ------------------
  |  |   60|      5|            _PyCompile_ExitScope((C));      \
  |  |   61|      5|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      5|#define ERROR -1
  |  |  ------------------
  |  |   62|      5|        }                                   \
  |  |   63|  2.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 1567|  2.28k|    }
 1568|  5.13k|    else {
 1569|  5.13k|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  5.13k|    do {                    \
  |  |   52|  5.13k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 27, False: 5.11k]
  |  |  ------------------
  |  |   53|     27|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     27|#define ERROR -1
  |  |  ------------------
  |  |   54|     27|        }                   \
  |  |   55|  5.13k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 5.11k]
  |  |  ------------------
  ------------------
 1570|  5.13k|    }
 1571|       |
 1572|  7.39k|    if (is_generic) {
  ------------------
  |  Branch (1572:9): [True: 2.28k, False: 5.11k]
  ------------------
 1573|  2.28k|        ADDOP_I_IN_SCOPE(c, loc, SWAP, 2);
  ------------------
  |  |  283|  2.28k|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  2.28k|    do {                                    \
  |  |  |  |   59|  2.28k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1574|  2.28k|        ADDOP_I_IN_SCOPE(c, loc, CALL_INTRINSIC_2, INTRINSIC_SET_FUNCTION_TYPE_PARAMS);
  ------------------
  |  |  283|  2.28k|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  2.28k|    do {                                    \
  |  |  |  |   59|  2.28k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1575|       |
 1576|  2.28k|        PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 0);
 1577|  2.28k|        _PyCompile_ExitScope(c);
 1578|  2.28k|        if (co == NULL) {
  ------------------
  |  Branch (1578:13): [True: 0, False: 2.28k]
  ------------------
 1579|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1580|      0|        }
 1581|  2.28k|        int ret = codegen_make_closure(c, loc, co, 0);
 1582|  2.28k|        Py_DECREF(co);
  ------------------
  |  |  430|  2.28k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1583|  2.28k|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  2.28k|    do {                    \
  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 1584|  2.28k|        if (num_typeparam_args > 0) {
  ------------------
  |  Branch (1584:13): [True: 0, False: 2.28k]
  ------------------
 1585|      0|            ADDOP_I(c, loc, SWAP, num_typeparam_args + 1);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1586|      0|            ADDOP_I(c, loc, CALL, num_typeparam_args - 1);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1587|      0|        }
 1588|  2.28k|        else {
 1589|  2.28k|            ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  2.28k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.28k|    do {                    \
  |  |  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1590|  2.28k|            ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|  2.28k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.28k|    do {                    \
  |  |  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1591|  2.28k|        }
 1592|  2.28k|    }
 1593|       |
 1594|  7.39k|    RETURN_IF_ERROR(codegen_apply_decorators(c, decos));
  ------------------
  |  |   51|  7.39k|    do {                    \
  |  |   52|  7.39k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 7.39k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  7.39k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 7.39k]
  |  |  ------------------
  ------------------
 1595|  7.39k|    return codegen_nameop(c, loc, name, Store);
 1596|  7.39k|}
codegen.c:codegen_decorators:
 1038|  20.4k|{
 1039|  20.4k|    if (!decos) {
  ------------------
  |  Branch (1039:9): [True: 19.8k, False: 624]
  ------------------
 1040|  19.8k|        return SUCCESS;
  ------------------
  |  |   47|  19.8k|#define SUCCESS 0
  ------------------
 1041|  19.8k|    }
 1042|       |
 1043|  2.51k|    for (Py_ssize_t i = 0; i < asdl_seq_LEN(decos); i++) {
  ------------------
  |  |   83|  2.51k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  5.03k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.51k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1043:28): [True: 1.89k, False: 624]
  ------------------
 1044|  1.89k|        VISIT(c, expr, (expr_ty)asdl_seq_GET(decos, i));
  ------------------
  |  |  460|  1.89k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.89k|    do {                    \
  |  |  |  |   52|  1.89k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.89k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.89k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1045|  1.89k|    }
 1046|    624|    return SUCCESS;
  ------------------
  |  |   47|    624|#define SUCCESS 0
  ------------------
 1047|    624|}
codegen.c:codegen_default_arguments:
 1231|  11.7k|{
 1232|  11.7k|    Py_ssize_t funcflags = 0;
 1233|  11.7k|    if (args->defaults && asdl_seq_LEN(args->defaults) > 0) {
  ------------------
  |  |   83|  11.7k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  23.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 11.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1233:9): [True: 11.7k, False: 0]
  |  Branch (1233:27): [True: 382, False: 11.3k]
  ------------------
 1234|    382|        RETURN_IF_ERROR(codegen_defaults(c, args, loc));
  ------------------
  |  |   51|    382|    do {                    \
  |  |   52|    382|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 381]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|    382|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 381]
  |  |  ------------------
  ------------------
 1235|    381|        funcflags |= MAKE_FUNCTION_DEFAULTS;
  ------------------
  |  |   64|    381|#define MAKE_FUNCTION_DEFAULTS    0x01
  ------------------
 1236|    381|    }
 1237|  11.7k|    if (args->kwonlyargs) {
  ------------------
  |  Branch (1237:9): [True: 11.7k, False: 0]
  ------------------
 1238|  11.7k|        int res = codegen_kwonlydefaults(c, loc,
 1239|  11.7k|                                         args->kwonlyargs,
 1240|  11.7k|                                         args->kw_defaults);
 1241|  11.7k|        RETURN_IF_ERROR(res);
  ------------------
  |  |   51|  11.7k|    do {                    \
  |  |   52|  11.7k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 11.7k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  11.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 11.7k]
  |  |  ------------------
  ------------------
 1242|  11.7k|        if (res > 0) {
  ------------------
  |  Branch (1242:13): [True: 1.44k, False: 10.3k]
  ------------------
 1243|  1.44k|            funcflags |= MAKE_FUNCTION_KWDEFAULTS;
  ------------------
  |  |   65|  1.44k|#define MAKE_FUNCTION_KWDEFAULTS  0x02
  ------------------
 1244|  1.44k|        }
 1245|  11.7k|    }
 1246|  11.7k|    return funcflags;
 1247|  11.7k|}
codegen.c:codegen_defaults:
 1222|    382|{
 1223|    382|    VISIT_SEQ(c, expr, args->defaults);
  ------------------
  |  |  466|    382|    do {                                                                    \
  |  |  467|    382|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    867|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    867|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 867]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 486, False: 381]
  |  |  ------------------
  |  |  469|    486|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    486|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    486|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    486|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    486|    do {                    \
  |  |  |  |   52|    486|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 485]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    486|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 485]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    486|        }                                                                   \
  |  |  472|    382|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 381]
  |  |  ------------------
  ------------------
 1224|    381|    ADDOP_I(c, loc, BUILD_TUPLE, asdl_seq_LEN(args->defaults));
  ------------------
  |  |  280|    381|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    381|    do {                    \
  |  |  |  |   52|    762|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 381]
  |  |  |  |  |  Branch (52:14): [True: 0, False: 381]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    381|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 381]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1225|    381|    return SUCCESS;
  ------------------
  |  |   47|    381|#define SUCCESS 0
  ------------------
 1226|    381|}
codegen.c:codegen_kwonlydefaults:
 1066|  11.7k|{
 1067|       |    /* Push a dict of keyword-only default values.
 1068|       |
 1069|       |       Return -1 on error, 0 if no dict pushed, 1 if a dict is pushed.
 1070|       |       */
 1071|  11.7k|    int default_count = 0;
 1072|  14.2k|    for (int i = 0; i < asdl_seq_LEN(kwonlyargs); i++) {
  ------------------
  |  |   83|  14.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  28.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 14.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1072:21): [True: 2.50k, False: 11.7k]
  ------------------
 1073|  2.50k|        arg_ty arg = asdl_seq_GET(kwonlyargs, i);
  ------------------
  |  |   82|  2.50k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.50k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1074|  2.50k|        expr_ty default_ = asdl_seq_GET(kw_defaults, i);
  ------------------
  |  |   82|  2.50k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.50k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1075|  2.50k|        if (default_) {
  ------------------
  |  Branch (1075:13): [True: 1.54k, False: 962]
  ------------------
 1076|  1.54k|            default_count++;
 1077|  1.54k|            PyObject *mangled = _PyCompile_MaybeMangle(c, arg->arg);
 1078|  1.54k|            if (!mangled) {
  ------------------
  |  Branch (1078:17): [True: 0, False: 1.54k]
  ------------------
 1079|      0|                return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1080|      0|            }
 1081|  1.54k|            ADDOP_LOAD_CONST_NEW(c, loc, mangled);
  ------------------
  |  |  329|  1.54k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.54k|    do {                    \
  |  |  |  |   52|  1.54k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.54k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.54k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.54k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1082|  1.54k|            VISIT(c, expr, default_);
  ------------------
  |  |  460|  1.54k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.54k|    do {                    \
  |  |  |  |   52|  1.54k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.54k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.54k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.54k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1083|  1.54k|        }
 1084|  2.50k|    }
 1085|  11.7k|    if (default_count) {
  ------------------
  |  Branch (1085:9): [True: 1.44k, False: 10.3k]
  ------------------
 1086|  1.44k|        ADDOP_I(c, loc, BUILD_MAP, default_count);
  ------------------
  |  |  280|  1.44k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.44k|    do {                    \
  |  |  |  |   52|  1.44k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.44k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|  1.44k|        return 1;
 1088|  1.44k|    }
 1089|  10.3k|    else {
 1090|  10.3k|        return 0;
 1091|  10.3k|    }
 1092|  11.7k|}
codegen.c:codegen_addop_load_const_new:
  318|  84.9k|{
  319|  84.9k|    if (o == NULL) {
  ------------------
  |  Branch (319:9): [True: 0, False: 84.9k]
  ------------------
  320|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  321|      0|    }
  322|  84.9k|    int ret = codegen_addop_load_const(c, loc, o);
  323|  84.9k|    Py_DECREF(o);
  ------------------
  |  |  430|  84.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  84.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  84.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  324|  84.9k|    return ret;
  325|  84.9k|}
codegen.c:codegen_type_params:
 1311|  4.97k|{
 1312|  4.97k|    if (!type_params) {
  ------------------
  |  Branch (1312:9): [True: 0, False: 4.97k]
  ------------------
 1313|      0|        return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
 1314|      0|    }
 1315|  4.97k|    Py_ssize_t n = asdl_seq_LEN(type_params);
  ------------------
  |  |   83|  4.97k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  9.94k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.97k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1316|  4.97k|    bool seen_default = false;
 1317|       |
 1318|  14.1k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (1318:28): [True: 9.19k, False: 4.95k]
  ------------------
 1319|  9.19k|        type_param_ty typeparam = asdl_seq_GET(type_params, i);
  ------------------
  |  |   82|  9.19k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  9.19k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1320|  9.19k|        location loc = LOC(typeparam);
  ------------------
  |  |   88|  9.19k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  9.19k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  9.19k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  9.19k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  9.19k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  9.19k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1321|  9.19k|        switch(typeparam->kind) {
  ------------------
  |  Branch (1321:16): [True: 9.19k, False: 0]
  ------------------
 1322|  8.82k|        case TypeVar_kind:
  ------------------
  |  Branch (1322:9): [True: 8.82k, False: 366]
  ------------------
 1323|  8.82k|            ADDOP_LOAD_CONST(c, loc, typeparam->v.TypeVar.name);
  ------------------
  |  |  311|  8.82k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  8.82k|    do {                    \
  |  |  |  |   52|  8.82k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.82k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.82k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.82k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1324|  8.82k|            if (typeparam->v.TypeVar.bound) {
  ------------------
  |  Branch (1324:17): [True: 2.22k, False: 6.59k]
  ------------------
 1325|  2.22k|                expr_ty bound = typeparam->v.TypeVar.bound;
 1326|  2.22k|                RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.22k|    do {                    \
  |  |   52|  2.22k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.22k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.22k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.22k]
  |  |  ------------------
  ------------------
 1327|  2.22k|                    codegen_type_param_bound_or_default(c, bound, typeparam->v.TypeVar.name,
 1328|  2.22k|                                                        (void *)typeparam, false));
 1329|       |
 1330|  2.22k|                int intrinsic = bound->kind == Tuple_kind
  ------------------
  |  Branch (1330:33): [True: 0, False: 2.22k]
  ------------------
 1331|  2.22k|                    ? INTRINSIC_TYPEVAR_WITH_CONSTRAINTS
  ------------------
  |  |   30|      0|#define INTRINSIC_TYPEVAR_WITH_CONSTRAINTS       3
  ------------------
 1332|  2.22k|                    : INTRINSIC_TYPEVAR_WITH_BOUND;
  ------------------
  |  |   29|  2.22k|#define INTRINSIC_TYPEVAR_WITH_BOUND             2
  ------------------
 1333|  2.22k|                ADDOP_I(c, loc, CALL_INTRINSIC_2, intrinsic);
  ------------------
  |  |  280|  2.22k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.22k|    do {                    \
  |  |  |  |   52|  2.22k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.22k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1334|  2.22k|            }
 1335|  6.59k|            else {
 1336|  6.59k|                ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_TYPEVAR);
  ------------------
  |  |  280|  6.59k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  6.59k|    do {                    \
  |  |  |  |   52|  6.59k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.59k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.59k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1337|  6.59k|            }
 1338|  8.82k|            if (typeparam->v.TypeVar.default_value) {
  ------------------
  |  Branch (1338:17): [True: 22, False: 8.80k]
  ------------------
 1339|     22|                seen_default = true;
 1340|     22|                expr_ty default_ = typeparam->v.TypeVar.default_value;
 1341|     22|                RETURN_IF_ERROR(
  ------------------
  |  |   51|     22|    do {                    \
  |  |   52|     22|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 22]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     22|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 22]
  |  |  ------------------
  ------------------
 1342|     22|                    codegen_type_param_bound_or_default(c, default_, typeparam->v.TypeVar.name,
 1343|     22|                                                        (void *)((uintptr_t)typeparam + 1), false));
 1344|     22|                ADDOP_I(c, loc, CALL_INTRINSIC_2, INTRINSIC_SET_TYPEPARAM_DEFAULT);
  ------------------
  |  |  280|     22|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     22|    do {                    \
  |  |  |  |   52|     22|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     22|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1345|     22|            }
 1346|  8.80k|            else if (seen_default) {
  ------------------
  |  Branch (1346:22): [True: 14, False: 8.79k]
  ------------------
 1347|     14|                return _PyCompile_Error(c, loc, "non-default type parameter '%U' "
 1348|     14|                                        "follows default type parameter",
 1349|     14|                                        typeparam->v.TypeVar.name);
 1350|     14|            }
 1351|  8.81k|            ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|  8.81k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  8.81k|    do {                    \
  |  |  |  |   52|  8.81k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.81k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.81k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.81k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1352|  8.81k|            RETURN_IF_ERROR(codegen_nameop(c, loc, typeparam->v.TypeVar.name, Store));
  ------------------
  |  |   51|  8.81k|    do {                    \
  |  |   52|  8.81k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 8.81k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  8.81k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8.81k]
  |  |  ------------------
  ------------------
 1353|  8.81k|            break;
 1354|  8.81k|        case TypeVarTuple_kind:
  ------------------
  |  Branch (1354:9): [True: 319, False: 8.87k]
  ------------------
 1355|    319|            ADDOP_LOAD_CONST(c, loc, typeparam->v.TypeVarTuple.name);
  ------------------
  |  |  311|    319|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    319|    do {                    \
  |  |  |  |   52|    319|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 319]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    319|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 319]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1356|    319|            ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_TYPEVARTUPLE);
  ------------------
  |  |  280|    319|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    319|    do {                    \
  |  |  |  |   52|    319|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 319]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    319|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 319]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1357|    319|            if (typeparam->v.TypeVarTuple.default_value) {
  ------------------
  |  Branch (1357:17): [True: 29, False: 290]
  ------------------
 1358|     29|                expr_ty default_ = typeparam->v.TypeVarTuple.default_value;
 1359|     29|                RETURN_IF_ERROR(
  ------------------
  |  |   51|     29|    do {                    \
  |  |   52|     29|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 29]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     29|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 29]
  |  |  ------------------
  ------------------
 1360|     29|                    codegen_type_param_bound_or_default(c, default_, typeparam->v.TypeVarTuple.name,
 1361|     29|                                                        (void *)typeparam, true));
 1362|     29|                ADDOP_I(c, loc, CALL_INTRINSIC_2, INTRINSIC_SET_TYPEPARAM_DEFAULT);
  ------------------
  |  |  280|     29|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     29|    do {                    \
  |  |  |  |   52|     29|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 29]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     29|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 29]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1363|     29|                seen_default = true;
 1364|     29|            }
 1365|    290|            else if (seen_default) {
  ------------------
  |  Branch (1365:22): [True: 1, False: 289]
  ------------------
 1366|      1|                return _PyCompile_Error(c, loc, "non-default type parameter '%U' "
 1367|      1|                                        "follows default type parameter",
 1368|      1|                                        typeparam->v.TypeVarTuple.name);
 1369|      1|            }
 1370|    318|            ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|    318|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    318|    do {                    \
  |  |  |  |   52|    318|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 318]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    318|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 318]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1371|    318|            RETURN_IF_ERROR(codegen_nameop(c, loc, typeparam->v.TypeVarTuple.name, Store));
  ------------------
  |  |   51|    318|    do {                    \
  |  |   52|    318|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 318]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    318|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 318]
  |  |  ------------------
  ------------------
 1372|    318|            break;
 1373|    318|        case ParamSpec_kind:
  ------------------
  |  Branch (1373:9): [True: 47, False: 9.14k]
  ------------------
 1374|     47|            ADDOP_LOAD_CONST(c, loc, typeparam->v.ParamSpec.name);
  ------------------
  |  |  311|     47|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     47|    do {                    \
  |  |  |  |   52|     47|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     47|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1375|     47|            ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_PARAMSPEC);
  ------------------
  |  |  280|     47|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     47|    do {                    \
  |  |  |  |   52|     47|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     47|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1376|     47|            if (typeparam->v.ParamSpec.default_value) {
  ------------------
  |  Branch (1376:17): [True: 4, False: 43]
  ------------------
 1377|      4|                expr_ty default_ = typeparam->v.ParamSpec.default_value;
 1378|      4|                RETURN_IF_ERROR(
  ------------------
  |  |   51|      4|    do {                    \
  |  |   52|      4|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 4]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1379|      4|                    codegen_type_param_bound_or_default(c, default_, typeparam->v.ParamSpec.name,
 1380|      4|                                                        (void *)typeparam, false));
 1381|      4|                ADDOP_I(c, loc, CALL_INTRINSIC_2, INTRINSIC_SET_TYPEPARAM_DEFAULT);
  ------------------
  |  |  280|      4|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      4|    do {                    \
  |  |  |  |   52|      4|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1382|      4|                seen_default = true;
 1383|      4|            }
 1384|     43|            else if (seen_default) {
  ------------------
  |  Branch (1384:22): [True: 0, False: 43]
  ------------------
 1385|      0|                return _PyCompile_Error(c, loc, "non-default type parameter '%U' "
 1386|      0|                                        "follows default type parameter",
 1387|      0|                                        typeparam->v.ParamSpec.name);
 1388|      0|            }
 1389|     47|            ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|     47|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     47|    do {                    \
  |  |  |  |   52|     47|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     47|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1390|     47|            RETURN_IF_ERROR(codegen_nameop(c, loc, typeparam->v.ParamSpec.name, Store));
  ------------------
  |  |   51|     47|    do {                    \
  |  |   52|     47|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 47]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     47|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 47]
  |  |  ------------------
  ------------------
 1391|     47|            break;
 1392|  9.19k|        }
 1393|  9.19k|    }
 1394|  4.95k|    ADDOP_I(c, LOC(asdl_seq_GET(type_params, 0)), BUILD_TUPLE, n);
  ------------------
  |  |  280|  4.95k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.95k|    do {                    \
  |  |  |  |   52|  4.95k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.95k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.95k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1395|  4.95k|    return SUCCESS;
  ------------------
  |  |   47|  4.95k|#define SUCCESS 0
  ------------------
 1396|  4.95k|}
codegen.c:codegen_type_param_bound_or_default:
 1282|  2.28k|{
 1283|  2.28k|    PyObject *defaults = PyTuple_Pack(1, _PyLong_GetOne());
 1284|  2.28k|    ADDOP_LOAD_CONST_NEW(c, LOC(e), defaults);
  ------------------
  |  |  329|  2.28k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.28k|    do {                    \
  |  |  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1285|  2.28k|    RETURN_IF_ERROR(codegen_setup_annotations_scope(c, LOC(e), key, name));
  ------------------
  |  |   51|  2.28k|    do {                    \
  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 1286|  2.28k|    if (allow_starred && e->kind == Starred_kind) {
  ------------------
  |  Branch (1286:9): [True: 29, False: 2.25k]
  |  Branch (1286:26): [True: 0, False: 29]
  ------------------
 1287|      0|        VISIT_IN_SCOPE(c, expr, e->v.Starred.value);
  ------------------
  |  |  463|      0|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   58|      0|    do {                                    \
  |  |  |  |   59|      0|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1288|      0|        ADDOP_I_IN_SCOPE(c, LOC(e), UNPACK_SEQUENCE, (Py_ssize_t)1);
  ------------------
  |  |  283|      0|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|      0|    do {                                    \
  |  |  |  |   59|      0|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1289|      0|    }
 1290|  2.28k|    else {
 1291|  2.28k|        VISIT_IN_SCOPE(c, expr, e);
  ------------------
  |  |  463|  2.28k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   58|  2.28k|    do {                                    \
  |  |  |  |   59|  2.28k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1292|  2.28k|    }
 1293|  2.28k|    ADDOP_IN_SCOPE(c, LOC(e), RETURN_VALUE);
  ------------------
  |  |  297|  2.28k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  2.28k|    do {                                    \
  |  |  |  |   59|  2.28k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 2.28k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  2.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 2.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1294|  2.28k|    PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 1);
 1295|  2.28k|    _PyCompile_ExitScope(c);
 1296|  2.28k|    if (co == NULL) {
  ------------------
  |  Branch (1296:9): [True: 0, False: 2.28k]
  ------------------
 1297|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1298|      0|    }
 1299|  2.28k|    if (codegen_rename_annotations_format_param(co) < 0) {
  ------------------
  |  Branch (1299:9): [True: 0, False: 2.28k]
  ------------------
 1300|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1301|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1302|      0|    }
 1303|  2.28k|    int ret = codegen_make_closure(c, LOC(e), co, MAKE_FUNCTION_DEFAULTS);
  ------------------
  |  |   88|  2.28k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.28k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.28k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.28k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.28k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.28k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
                  int ret = codegen_make_closure(c, LOC(e), co, MAKE_FUNCTION_DEFAULTS);
  ------------------
  |  |   64|  2.28k|#define MAKE_FUNCTION_DEFAULTS    0x01
  ------------------
 1304|  2.28k|    Py_DECREF(co);
  ------------------
  |  |  430|  2.28k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.28k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.28k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1305|  2.28k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  2.28k|    do {                    \
  |  |   52|  2.28k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.28k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
 1306|  2.28k|    return SUCCESS;
  ------------------
  |  |   47|  2.28k|#define SUCCESS 0
  ------------------
 1307|  2.28k|}
codegen.c:codegen_setup_annotations_scope:
  743|  12.6k|{
  744|  12.6k|    _PyCompile_CodeUnitMetadata umd = {
  745|  12.6k|        .u_posonlyargcount = 1,
  746|  12.6k|    };
  747|  12.6k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  12.6k|    do {                    \
  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  12.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
  748|  12.6k|        codegen_enter_scope(c, name, COMPILE_SCOPE_ANNOTATIONS,
  749|  12.6k|                            key, loc.lineno, NULL, &umd));
  750|       |
  751|  12.6k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_emit_annotations_prologue(c, loc));
  ------------------
  |  |   58|  12.6k|    do {                                    \
  |  |   59|  12.6k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 12.6k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  12.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
  752|  12.6k|    return SUCCESS;
  ------------------
  |  |   47|  12.6k|#define SUCCESS 0
  ------------------
  753|  12.6k|}
codegen.c:codegen_emit_annotations_prologue:
  720|  12.6k|{
  721|       |    // if .format > VALUE_WITH_FAKE_GLOBALS: raise NotImplementedError
  722|  12.6k|    PyObject *value_with_fake_globals = PyLong_FromLong(_Py_ANNOTATE_FORMAT_VALUE_WITH_FAKE_GLOBALS);
  723|  12.6k|    if (value_with_fake_globals == NULL) {
  ------------------
  |  Branch (723:9): [True: 0, False: 12.6k]
  ------------------
  724|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  725|      0|    }
  726|       |
  727|  12.6k|    assert(!SYMTABLE_ENTRY(c)->ste_has_docstring);
  ------------------
  |  Branch (727:5): [True: 12.6k, False: 0]
  ------------------
  728|  12.6k|    _Py_DECLARE_STR(format, ".format");
  729|  12.6k|    ADDOP_I(c, loc, LOAD_FAST, 0);
  ------------------
  |  |  280|  12.6k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|  12.6k|    ADDOP_LOAD_CONST_NEW(c, loc, value_with_fake_globals);
  ------------------
  |  |  329|  12.6k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  731|  12.6k|    ADDOP_I(c, loc, COMPARE_OP, (Py_GT << 5) | compare_masks[Py_GT]);
  ------------------
  |  |  280|  12.6k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|  12.6k|    NEW_JUMP_TARGET_LABEL(c, body);
  ------------------
  |  |   94|  12.6k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  12.6k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  12.6k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  12.6k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  12.6k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 12.6k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
  733|  12.6k|    ADDOP_JUMP(c, loc, POP_JUMP_IF_FALSE, body);
  ------------------
  |  |  435|  12.6k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  734|  12.6k|    ADDOP_I(c, loc, LOAD_COMMON_CONSTANT, CONSTANT_NOTIMPLEMENTEDERROR);
  ------------------
  |  |  280|  12.6k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|  12.6k|    ADDOP_I(c, loc, RAISE_VARARGS, 1);
  ------------------
  |  |  280|  12.6k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  736|  12.6k|    USE_LABEL(c, body);
  ------------------
  |  |  100|  12.6k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  12.6k|    do {                    \
  |  |  |  |   52|  12.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  737|  12.6k|    return SUCCESS;
  ------------------
  |  |   47|  12.6k|#define SUCCESS 0
  ------------------
  738|  12.6k|}
codegen.c:codegen_addop_j:
  427|   313k|{
  428|   313k|    assert(IS_JUMP_TARGET_LABEL(target));
  ------------------
  |  Branch (428:5): [True: 313k, False: 0]
  ------------------
  429|   313k|    assert(HAS_TARGET(opcode));
  ------------------
  |  Branch (429:5): [True: 43.9k, False: 29.2k]
  |  Branch (429:5): [True: 11.7k, False: 17.5k]
  |  Branch (429:5): [True: 17.5k, False: 0]
  |  Branch (429:5): [True: 240k, False: 73.2k]
  ------------------
  430|   313k|    assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (430:5): [True: 0, False: 313k]
  |  Branch (430:5): [True: 0, False: 313k]
  |  Branch (430:5): [True: 0, False: 313k]
  ------------------
  431|   313k|    return _PyInstructionSequence_Addop(seq, opcode, target.id, loc);
  432|   313k|}
codegen.c:codegen_rename_annotations_format_param:
  757|  12.6k|{
  758|       |    // We want the parameter to __annotate__ to be named "format" in the
  759|       |    // signature  shown by inspect.signature(), but we need to use a
  760|       |    // different name (.format) in the symtable; if the name
  761|       |    // "format" appears in the annotations, it doesn't get clobbered
  762|       |    // by this name.  This code is essentially:
  763|       |    // co->co_localsplusnames = ("format", *co->co_localsplusnames[1:])
  764|  12.6k|    const Py_ssize_t size = PyObject_Size(co->co_localsplusnames);
  765|  12.6k|    if (size == -1) {
  ------------------
  |  Branch (765:9): [True: 0, False: 12.6k]
  ------------------
  766|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  767|      0|    }
  768|  12.6k|    PyObject *new_names = PyTuple_New(size);
  769|  12.6k|    if (new_names == NULL) {
  ------------------
  |  Branch (769:9): [True: 0, False: 12.6k]
  ------------------
  770|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  771|      0|    }
  772|  12.6k|    PyTuple_SET_ITEM(new_names, 0, Py_NewRef(&_Py_ID(format)));
  ------------------
  |  |   40|  12.6k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  12.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  12.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  773|  19.3k|    for (int i = 1; i < size; i++) {
  ------------------
  |  Branch (773:21): [True: 6.70k, False: 12.6k]
  ------------------
  774|  6.70k|        PyObject *item = PyTuple_GetItem(co->co_localsplusnames, i);
  775|  6.70k|        if (item == NULL) {
  ------------------
  |  Branch (775:13): [True: 0, False: 6.70k]
  ------------------
  776|      0|            Py_DECREF(new_names);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  777|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  778|      0|        }
  779|  6.70k|        Py_INCREF(item);
  ------------------
  |  |  310|  6.70k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|  6.70k|        PyTuple_SET_ITEM(new_names, i, item);
  ------------------
  |  |   40|  6.70k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  6.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  6.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  781|  6.70k|    }
  782|  12.6k|    Py_SETREF(co->co_localsplusnames, new_names);
  ------------------
  |  |  354|  12.6k|    do { \
  |  |  355|  12.6k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  12.6k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  12.6k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  12.6k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  12.6k|        *_tmp_dst_ptr = (src); \
  |  |  358|  12.6k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  12.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  12.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  12.6k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 12.6k]
  |  |  ------------------
  ------------------
  783|  12.6k|    return SUCCESS;
  ------------------
  |  |   47|  12.6k|#define SUCCESS 0
  ------------------
  784|  12.6k|}
codegen.c:codegen_function_annotations:
 1189|  7.42k|{
 1190|       |    /* Push arg annotation names and values.
 1191|       |       The expressions are evaluated separately from the rest of the source code.
 1192|       |
 1193|       |       Return -1 on error, or a combination of flags to add to the function.
 1194|       |       */
 1195|  7.42k|    Py_ssize_t annotations_len = 0;
 1196|       |
 1197|  7.42k|    PySTEntryObject *ste;
 1198|  7.42k|    RETURN_IF_ERROR(_PySymtable_LookupOptional(SYMTABLE(c), args, &ste));
  ------------------
  |  |   51|  7.42k|    do {                    \
  |  |   52|  7.42k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 7.42k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  7.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 7.42k]
  |  |  ------------------
  ------------------
 1199|  7.42k|    assert(ste != NULL);
  ------------------
  |  Branch (1199:5): [True: 7.42k, False: 0]
  ------------------
 1200|       |
 1201|  7.42k|    if (ste->ste_annotations_used) {
  ------------------
  |  Branch (1201:9): [True: 3.45k, False: 3.97k]
  ------------------
 1202|  3.45k|        int err = codegen_setup_annotations_scope(c, loc, (void *)args, ste->ste_name);
 1203|  3.45k|        Py_DECREF(ste);
  ------------------
  |  |  430|  3.45k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1204|  3.45k|        RETURN_IF_ERROR(err);
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1205|  3.45k|        RETURN_IF_ERROR_IN_SCOPE(
  ------------------
  |  |   58|  3.45k|    do {                                    \
  |  |   59|  3.45k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1206|  3.45k|            c, codegen_annotations_in_scope(c, loc, args, returns, &annotations_len)
 1207|  3.45k|        );
 1208|  3.45k|        ADDOP_I_IN_SCOPE(c, loc, BUILD_MAP, annotations_len);
  ------------------
  |  |  283|  3.45k|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  3.45k|    do {                                    \
  |  |  |  |   59|  3.45k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 3.45k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  3.45k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 3.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1209|  3.45k|        RETURN_IF_ERROR(codegen_finish_annotations_scope(c, loc));
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1210|  3.45k|        return MAKE_FUNCTION_ANNOTATE;
  ------------------
  |  |   68|  3.45k|#define MAKE_FUNCTION_ANNOTATE    0x10
  ------------------
 1211|  3.45k|    }
 1212|  3.97k|    else {
 1213|  3.97k|        Py_DECREF(ste);
  ------------------
  |  |  430|  3.97k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.97k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1214|  3.97k|    }
 1215|       |
 1216|  3.97k|    return 0;
 1217|  7.42k|}
codegen.c:codegen_annotations_in_scope:
 1158|  3.45k|{
 1159|  3.45k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1160|  3.45k|        codegen_argannotations(c, args->posonlyargs, annotations_len, loc));
 1161|       |
 1162|  3.45k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1163|  3.45k|        codegen_argannotations(c, args->args, annotations_len, loc));
 1164|       |
 1165|  3.45k|    if (args->vararg && args->vararg->annotation) {
  ------------------
  |  Branch (1165:9): [True: 353, False: 3.10k]
  |  Branch (1165:25): [True: 256, False: 97]
  ------------------
 1166|    256|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    256|    do {                    \
  |  |   52|    256|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 256]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    256|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 256]
  |  |  ------------------
  ------------------
 1167|    256|            codegen_argannotation(c, args->vararg->arg,
 1168|    256|                                     args->vararg->annotation, annotations_len, loc));
 1169|    256|    }
 1170|       |
 1171|  3.45k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1172|  3.45k|        codegen_argannotations(c, args->kwonlyargs, annotations_len, loc));
 1173|       |
 1174|  3.45k|    if (args->kwarg && args->kwarg->annotation) {
  ------------------
  |  Branch (1174:9): [True: 665, False: 2.78k]
  |  Branch (1174:24): [True: 657, False: 8]
  ------------------
 1175|    657|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    657|    do {                    \
  |  |   52|    657|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 657]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    657|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 657]
  |  |  ------------------
  ------------------
 1176|    657|            codegen_argannotation(c, args->kwarg->arg,
 1177|    657|                                     args->kwarg->annotation, annotations_len, loc));
 1178|    657|    }
 1179|       |
 1180|  3.45k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.45k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.45k]
  |  |  ------------------
  ------------------
 1181|  3.45k|        codegen_argannotation(c, &_Py_ID(return), returns, annotations_len, loc));
 1182|       |
 1183|  3.45k|    return 0;
 1184|  3.45k|}
codegen.c:codegen_argannotations:
 1139|  10.3k|{
 1140|  10.3k|    int i;
 1141|  12.6k|    for (i = 0; i < asdl_seq_LEN(args); i++) {
  ------------------
  |  |   83|  12.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  25.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 12.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1141:17): [True: 2.27k, False: 10.3k]
  ------------------
 1142|  2.27k|        arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
  ------------------
  |  |   82|  2.27k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.27k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1143|  2.27k|        RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.27k|    do {                    \
  |  |   52|  2.27k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.27k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.27k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.27k]
  |  |  ------------------
  ------------------
 1144|  2.27k|            codegen_argannotation(
 1145|  2.27k|                        c,
 1146|  2.27k|                        arg->arg,
 1147|  2.27k|                        arg->annotation,
 1148|  2.27k|                        annotations_len,
 1149|  2.27k|                        loc));
 1150|  2.27k|    }
 1151|  10.3k|    return SUCCESS;
  ------------------
  |  |   47|  10.3k|#define SUCCESS 0
  ------------------
 1152|  10.3k|}
codegen.c:codegen_argannotation:
 1105|  6.63k|{
 1106|  6.63k|    if (!annotation) {
  ------------------
  |  Branch (1106:9): [True: 2.90k, False: 3.73k]
  ------------------
 1107|  2.90k|        return SUCCESS;
  ------------------
  |  |   47|  2.90k|#define SUCCESS 0
  ------------------
 1108|  2.90k|    }
 1109|  3.73k|    PyObject *mangled = _PyCompile_MaybeMangle(c, id);
 1110|  3.73k|    if (!mangled) {
  ------------------
  |  Branch (1110:9): [True: 0, False: 3.73k]
  ------------------
 1111|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1112|      0|    }
 1113|  3.73k|    ADDOP_LOAD_CONST(c, loc, mangled);
  ------------------
  |  |  311|  3.73k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  3.73k|    do {                    \
  |  |  |  |   52|  3.73k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.73k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.73k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1114|  3.73k|    Py_DECREF(mangled);
  ------------------
  |  |  430|  3.73k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1115|       |
 1116|  3.73k|    if (FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS) {
  ------------------
  |  |   69|  3.73k|#define FUTURE_FEATURES(C) _PyCompile_FutureFeatures(C)
  ------------------
                  if (FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS) {
  ------------------
  |  |  147|  3.73k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (1116:9): [True: 1.15k, False: 2.57k]
  ------------------
 1117|  1.15k|        VISIT(c, annexpr, annotation);
  ------------------
  |  |  460|  1.15k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.15k|    do {                    \
  |  |  |  |   52|  1.15k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.15k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.15k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.15k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1118|  1.15k|    }
 1119|  2.57k|    else {
 1120|  2.57k|        if (annotation->kind == Starred_kind) {
  ------------------
  |  Branch (1120:13): [True: 87, False: 2.48k]
  ------------------
 1121|       |            // *args: *Ts (where Ts is a TypeVarTuple).
 1122|       |            // Do [annotation_value] = [*Ts].
 1123|       |            // (Note that in theory we could end up here even for an argument
 1124|       |            // other than *args, but in practice the grammar doesn't allow it.)
 1125|     87|            VISIT(c, expr, annotation->v.Starred.value);
  ------------------
  |  |  460|     87|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     87|    do {                    \
  |  |  |  |   52|     87|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 87]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     87|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1126|     87|            ADDOP_I(c, loc, UNPACK_SEQUENCE, (Py_ssize_t) 1);
  ------------------
  |  |  280|     87|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     87|    do {                    \
  |  |  |  |   52|     87|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 87]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     87|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1127|     87|        }
 1128|  2.48k|        else {
 1129|  2.48k|            VISIT(c, expr, annotation);
  ------------------
  |  |  460|  2.48k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  2.48k|    do {                    \
  |  |  |  |   52|  2.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1130|  2.48k|        }
 1131|  2.57k|    }
 1132|  3.73k|    *annotations_len += 1;
 1133|  3.73k|    return SUCCESS;
  ------------------
  |  |   47|  3.73k|#define SUCCESS 0
  ------------------
 1134|  3.73k|}
codegen.c:codegen_visit_annexpr:
 1096|  5.21k|{
 1097|  5.21k|    location loc = LOC(annotation);
  ------------------
  |  |   88|  5.21k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  5.21k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  5.21k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  5.21k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  5.21k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  5.21k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1098|  5.21k|    ADDOP_LOAD_CONST_NEW(c, loc, _PyAST_ExprAsUnicode(annotation));
  ------------------
  |  |  329|  5.21k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  5.21k|    do {                    \
  |  |  |  |   52|  5.21k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 5.21k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  5.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 5.21k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|  5.21k|    return SUCCESS;
  ------------------
  |  |   47|  5.21k|#define SUCCESS 0
  ------------------
 1100|  5.21k|}
codegen.c:codegen_finish_annotations_scope:
  788|  9.94k|{
  789|  9.94k|    ADDOP_IN_SCOPE(c, loc, RETURN_VALUE);
  ------------------
  |  |  297|  9.94k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  9.94k|    do {                                    \
  |  |  |  |   59|  9.94k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 9.94k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  9.94k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 9.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  790|  9.94k|    PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 1);
  791|  9.94k|    _PyCompile_ExitScope(c);
  792|  9.94k|    if (co == NULL) {
  ------------------
  |  Branch (792:9): [True: 0, False: 9.94k]
  ------------------
  793|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  794|      0|    }
  795|       |
  796|  9.94k|    if (codegen_rename_annotations_format_param(co) < 0) {
  ------------------
  |  Branch (796:9): [True: 0, False: 9.94k]
  ------------------
  797|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  799|      0|    }
  800|       |
  801|  9.94k|    int ret = codegen_make_closure(c, loc, co, 0);
  802|  9.94k|    Py_DECREF(co);
  ------------------
  |  |  430|  9.94k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.94k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.94k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  803|  9.94k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  9.94k|    do {                    \
  |  |   52|  9.94k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 9.94k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  9.94k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 9.94k]
  |  |  ------------------
  ------------------
  804|  9.94k|    return SUCCESS;
  ------------------
  |  |   47|  9.94k|#define SUCCESS 0
  ------------------
  805|  9.94k|}
codegen.c:codegen_function_body:
 1439|  7.42k|{
 1440|  7.42k|    arguments_ty args;
 1441|  7.42k|    identifier name;
 1442|  7.42k|    asdl_stmt_seq *body;
 1443|  7.42k|    int scope_type;
 1444|       |
 1445|  7.42k|    if (is_async) {
  ------------------
  |  Branch (1445:9): [True: 2.50k, False: 4.92k]
  ------------------
 1446|  2.50k|        assert(s->kind == AsyncFunctionDef_kind);
  ------------------
  |  Branch (1446:9): [True: 2.50k, False: 0]
  ------------------
 1447|       |
 1448|  2.50k|        args = s->v.AsyncFunctionDef.args;
 1449|  2.50k|        name = s->v.AsyncFunctionDef.name;
 1450|  2.50k|        body = s->v.AsyncFunctionDef.body;
 1451|       |
 1452|  2.50k|        scope_type = COMPILE_SCOPE_ASYNC_FUNCTION;
 1453|  4.92k|    } else {
 1454|  4.92k|        assert(s->kind == FunctionDef_kind);
  ------------------
  |  Branch (1454:9): [True: 4.92k, False: 0]
  ------------------
 1455|       |
 1456|  4.92k|        args = s->v.FunctionDef.args;
 1457|  4.92k|        name = s->v.FunctionDef.name;
 1458|  4.92k|        body = s->v.FunctionDef.body;
 1459|       |
 1460|  4.92k|        scope_type = COMPILE_SCOPE_FUNCTION;
 1461|  4.92k|    }
 1462|       |
 1463|  7.42k|    _PyCompile_CodeUnitMetadata umd = {
 1464|  7.42k|        .u_argcount = asdl_seq_LEN(args->args),
  ------------------
  |  |   83|  7.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  14.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1465|  7.42k|        .u_posonlyargcount = asdl_seq_LEN(args->posonlyargs),
  ------------------
  |  |   83|  7.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  14.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1466|  7.42k|        .u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs),
  ------------------
  |  |   83|  7.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  14.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1467|  7.42k|    };
 1468|  7.42k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  7.42k|    do {                    \
  |  |   52|  7.42k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 7.42k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  7.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 7.42k]
  |  |  ------------------
  ------------------
 1469|  7.42k|        codegen_enter_scope(c, name, scope_type, (void *)s, firstlineno, NULL, &umd));
 1470|       |
 1471|  7.42k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_emit_function_body(c, body));
  ------------------
  |  |   58|  7.42k|    do {                                    \
  |  |   59|  7.42k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 32, False: 7.39k]
  |  |  ------------------
  |  |   60|     32|            _PyCompile_ExitScope((C));      \
  |  |   61|     32|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|     32|#define ERROR -1
  |  |  ------------------
  |  |   62|     32|        }                                   \
  |  |   63|  7.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 7.39k]
  |  |  ------------------
  ------------------
 1472|       |
 1473|  7.39k|    PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 1);
 1474|  7.39k|    _PyCompile_ExitScope(c);
 1475|  7.39k|    if (co == NULL) {
  ------------------
  |  Branch (1475:9): [True: 0, False: 7.39k]
  ------------------
 1476|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1477|      0|    }
 1478|  7.39k|    int ret = codegen_make_closure(c, LOC(s), co, funcflags);
  ------------------
  |  |   88|  7.39k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  7.39k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  7.39k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  7.39k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  7.39k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  7.39k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1479|  7.39k|    Py_DECREF(co);
  ------------------
  |  |  430|  7.39k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.39k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.39k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1480|  7.39k|    return ret;
 1481|  7.39k|}
codegen.c:codegen_emit_function_body:
 1400|  7.42k|{
 1401|  7.42k|    PySTEntryObject *ste = SYMTABLE_ENTRY(c);
  ------------------
  |  |   71|  7.42k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
 1402|  7.42k|    Py_ssize_t first_instr = 0;
 1403|  7.42k|    if (ste->ste_has_docstring) {
  ------------------
  |  Branch (1403:9): [True: 628, False: 6.79k]
  ------------------
 1404|    628|        PyObject *docstring = _PyAST_GetDocString(body);
 1405|    628|        assert(docstring);
  ------------------
  |  Branch (1405:9): [True: 628, False: 0]
  ------------------
 1406|    628|        first_instr = 1;
 1407|    628|        docstring = _PyCompile_CleanDoc(docstring);
 1408|    628|        if (docstring == NULL) {
  ------------------
  |  Branch (1408:13): [True: 0, False: 628]
  ------------------
 1409|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1410|      0|        }
 1411|    628|        Py_ssize_t idx = _PyCompile_AddConst(c, docstring);
 1412|    628|        Py_DECREF(docstring);
  ------------------
  |  |  430|    628|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    628|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    628|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|    628|        RETURN_IF_ERROR(idx < 0 ? ERROR : SUCCESS);
  ------------------
  |  |   51|    628|    do {                    \
  |  |   52|  1.25k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 628]
  |  |  |  Branch (52:14): [True: 0, False: 628]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    628|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 628]
  |  |  ------------------
  ------------------
 1414|    628|    }
 1415|       |
 1416|  7.42k|    NEW_JUMP_TARGET_LABEL(c, start);
  ------------------
  |  |   94|  7.42k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  7.42k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  7.42k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  7.42k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  7.42k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 7.42k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 1417|  7.42k|    USE_LABEL(c, start);
  ------------------
  |  |  100|  7.42k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  7.42k|    do {                    \
  |  |  |  |   52|  7.42k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7.42k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  7.42k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1418|  7.42k|    bool add_stopiteration_handler = ste->ste_coroutine || ste->ste_generator;
  ------------------
  |  Branch (1418:38): [True: 2.50k, False: 4.92k]
  |  Branch (1418:60): [True: 21, False: 4.90k]
  ------------------
 1419|  7.42k|    if (add_stopiteration_handler) {
  ------------------
  |  Branch (1419:9): [True: 2.52k, False: 4.90k]
  ------------------
 1420|       |        /* codegen_wrap_in_stopiteration_handler will push a block, so we need to account for that */
 1421|  2.52k|        RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.52k|    do {                    \
  |  |   52|  2.52k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.52k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.52k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.52k]
  |  |  ------------------
  ------------------
 1422|  2.52k|            _PyCompile_PushFBlock(c, NO_LOCATION, COMPILE_FBLOCK_STOP_ITERATION,
 1423|  2.52k|                                  start, NO_LABEL, NULL));
 1424|  2.52k|    }
 1425|       |
 1426|  22.5k|    for (Py_ssize_t i = first_instr; i < asdl_seq_LEN(body); i++) {
  ------------------
  |  |   83|  22.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  45.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 22.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1426:38): [True: 15.1k, False: 7.39k]
  ------------------
 1427|  15.1k|        VISIT(c, stmt, (stmt_ty)asdl_seq_GET(body, i));
  ------------------
  |  |  460|  15.1k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  15.1k|    do {                    \
  |  |  |  |   52|  15.1k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 32, False: 15.1k]
  |  |  |  |  ------------------
  |  |  |  |   53|     32|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     32|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     32|        }                   \
  |  |  |  |   55|  15.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 15.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1428|  15.1k|    }
 1429|  7.39k|    if (add_stopiteration_handler) {
  ------------------
  |  Branch (1429:9): [True: 2.49k, False: 4.90k]
  ------------------
 1430|  2.49k|        RETURN_IF_ERROR(codegen_wrap_in_stopiteration_handler(c));
  ------------------
  |  |   51|  2.49k|    do {                    \
  |  |   52|  2.49k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.49k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.49k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.49k]
  |  |  ------------------
  ------------------
 1431|  2.49k|        _PyCompile_PopFBlock(c, COMPILE_FBLOCK_STOP_ITERATION, start);
 1432|  2.49k|    }
 1433|  7.39k|    return SUCCESS;
  ------------------
  |  |   47|  7.39k|#define SUCCESS 0
  ------------------
 1434|  7.39k|}
codegen.c:codegen_wrap_in_stopiteration_handler:
 1251|  2.84k|{
 1252|  2.84k|    NEW_JUMP_TARGET_LABEL(c, handler);
  ------------------
  |  |   94|  2.84k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.84k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.84k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.84k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.84k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.84k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 1253|       |
 1254|       |    /* Insert SETUP_CLEANUP just after the initial RETURN_GENERATOR; POP_TOP */
 1255|  2.84k|    instr_sequence *seq = INSTR_SEQUENCE(c);
  ------------------
  |  |   68|  2.84k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
 1256|  2.84k|    int resume = 0;
 1257|  3.90k|    while (_PyInstructionSequence_GetInstruction(seq, resume).i_opcode != RETURN_GENERATOR) {
  ------------------
  |  |   45|  3.90k|#define RETURN_GENERATOR                        32
  ------------------
  |  Branch (1257:12): [True: 1.05k, False: 2.84k]
  ------------------
 1258|  1.05k|        resume++;
 1259|  1.05k|        assert(resume < seq->s_used);
  ------------------
  |  Branch (1259:9): [True: 1.05k, False: 0]
  ------------------
 1260|  1.05k|    }
 1261|  2.84k|    resume++;
 1262|  2.84k|    assert(_PyInstructionSequence_GetInstruction(seq, resume).i_opcode == POP_TOP);
  ------------------
  |  Branch (1262:5): [True: 2.84k, False: 0]
  ------------------
 1263|  2.84k|    resume++;
 1264|  2.84k|    assert(resume < seq->s_used);
  ------------------
  |  Branch (1264:5): [True: 2.84k, False: 0]
  ------------------
 1265|  2.84k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.84k|    do {                    \
  |  |   52|  2.84k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.84k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.84k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.84k]
  |  |  ------------------
  ------------------
 1266|  2.84k|        _PyInstructionSequence_InsertInstruction(
 1267|  2.84k|            seq, resume,
 1268|  2.84k|            SETUP_CLEANUP, handler.id, NO_LOCATION));
 1269|       |
 1270|  2.84k|    ADDOP_LOAD_CONST(c, NO_LOCATION, Py_None);
  ------------------
  |  |  311|  2.84k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.84k|    do {                    \
  |  |  |  |   52|  2.84k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.84k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.84k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1271|  2.84k|    ADDOP(c, NO_LOCATION, RETURN_VALUE);
  ------------------
  |  |  294|  2.84k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.84k|    do {                    \
  |  |  |  |   52|  2.84k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.84k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.84k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1272|  2.84k|    USE_LABEL(c, handler);
  ------------------
  |  |  100|  2.84k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.84k|    do {                    \
  |  |  |  |   52|  2.84k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.84k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.84k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1273|  2.84k|    ADDOP_I(c, NO_LOCATION, CALL_INTRINSIC_1, INTRINSIC_STOPITERATION_ERROR);
  ------------------
  |  |  280|  2.84k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.84k|    do {                    \
  |  |  |  |   52|  2.84k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.84k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.84k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1274|  2.84k|    ADDOP_I(c, NO_LOCATION, RERAISE, 1);
  ------------------
  |  |  280|  2.84k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.84k|    do {                    \
  |  |  |  |   52|  2.84k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.84k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.84k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1275|  2.84k|    return SUCCESS;
  ------------------
  |  |   47|  2.84k|#define SUCCESS 0
  ------------------
 1276|  2.84k|}
codegen.c:codegen_make_closure:
  999|  42.6k|{
 1000|  42.6k|    if (co->co_nfreevars) {
  ------------------
  |  Branch (1000:9): [True: 10.9k, False: 31.7k]
  ------------------
 1001|  10.9k|        int i = PyUnstable_Code_GetFirstFree(co);
 1002|  23.2k|        for (; i < co->co_nlocalsplus; ++i) {
  ------------------
  |  Branch (1002:16): [True: 12.3k, False: 10.9k]
  ------------------
 1003|       |            /* Bypass com_addop_varname because it will generate
 1004|       |               LOAD_DEREF but LOAD_CLOSURE is needed.
 1005|       |            */
 1006|  12.3k|            PyObject *name = PyTuple_GET_ITEM(co->co_localsplusnames, i);
  ------------------
  |  |   29|  12.3k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  12.3k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1006:30): [True: 12.3k, False: 0]
  ------------------
 1007|      0|            int arg = _PyCompile_LookupArg(c, co, name);
 1008|  12.3k|            RETURN_IF_ERROR(arg);
  ------------------
  |  |   51|  12.3k|    do {                    \
  |  |   52|  12.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 12.3k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  12.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 12.3k]
  |  |  ------------------
  ------------------
 1009|  12.3k|            ADDOP_I(c, loc, LOAD_CLOSURE, arg);
  ------------------
  |  |  280|  12.3k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  12.3k|    do {                    \
  |  |  |  |   52|  12.3k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 12.3k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  12.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 12.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1010|  12.3k|        }
 1011|  10.9k|        flags |= MAKE_FUNCTION_CLOSURE;
  ------------------
  |  |   67|  10.9k|#define MAKE_FUNCTION_CLOSURE     0x08
  ------------------
 1012|  10.9k|        ADDOP_I(c, loc, BUILD_TUPLE, co->co_nfreevars);
  ------------------
  |  |  280|  10.9k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.9k|    do {                    \
  |  |  |  |   52|  10.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1013|  10.9k|    }
 1014|  42.6k|    ADDOP_LOAD_CONST(c, loc, (PyObject*)co);
  ------------------
  |  |  311|  42.6k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  42.6k|    do {                    \
  |  |  |  |   52|  42.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 42.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  42.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 42.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1015|       |
 1016|  42.6k|    ADDOP(c, loc, MAKE_FUNCTION);
  ------------------
  |  |  294|  42.6k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  42.6k|    do {                    \
  |  |  |  |   52|  42.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 42.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  42.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 42.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|       |
 1018|  42.6k|    if (flags & MAKE_FUNCTION_CLOSURE) {
  ------------------
  |  |   67|  42.6k|#define MAKE_FUNCTION_CLOSURE     0x08
  ------------------
  |  Branch (1018:9): [True: 10.9k, False: 31.7k]
  ------------------
 1019|  10.9k|        ADDOP_I(c, loc, SET_FUNCTION_ATTRIBUTE, MAKE_FUNCTION_CLOSURE);
  ------------------
  |  |  280|  10.9k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.9k|    do {                    \
  |  |  |  |   52|  10.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1020|  10.9k|    }
 1021|  42.6k|    if (flags & MAKE_FUNCTION_ANNOTATIONS) {
  ------------------
  |  |   66|  42.6k|#define MAKE_FUNCTION_ANNOTATIONS 0x04
  ------------------
  |  Branch (1021:9): [True: 0, False: 42.6k]
  ------------------
 1022|      0|        ADDOP_I(c, loc, SET_FUNCTION_ATTRIBUTE, MAKE_FUNCTION_ANNOTATIONS);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1023|      0|    }
 1024|  42.6k|    if (flags & MAKE_FUNCTION_ANNOTATE) {
  ------------------
  |  |   68|  42.6k|#define MAKE_FUNCTION_ANNOTATE    0x10
  ------------------
  |  Branch (1024:9): [True: 3.42k, False: 39.2k]
  ------------------
 1025|  3.42k|        ADDOP_I(c, loc, SET_FUNCTION_ATTRIBUTE, MAKE_FUNCTION_ANNOTATE);
  ------------------
  |  |  280|  3.42k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  3.42k|    do {                    \
  |  |  |  |   52|  3.42k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.42k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.42k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.42k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1026|  3.42k|    }
 1027|  42.6k|    if (flags & MAKE_FUNCTION_KWDEFAULTS) {
  ------------------
  |  |   65|  42.6k|#define MAKE_FUNCTION_KWDEFAULTS  0x02
  ------------------
  |  Branch (1027:9): [True: 1.44k, False: 41.2k]
  ------------------
 1028|  1.44k|        ADDOP_I(c, loc, SET_FUNCTION_ATTRIBUTE, MAKE_FUNCTION_KWDEFAULTS);
  ------------------
  |  |  280|  1.44k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.44k|    do {                    \
  |  |  |  |   52|  1.44k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.44k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1029|  1.44k|    }
 1030|  42.6k|    if (flags & MAKE_FUNCTION_DEFAULTS) {
  ------------------
  |  |   64|  42.6k|#define MAKE_FUNCTION_DEFAULTS    0x01
  ------------------
  |  Branch (1030:9): [True: 3.04k, False: 39.6k]
  ------------------
 1031|  3.04k|        ADDOP_I(c, loc, SET_FUNCTION_ATTRIBUTE, MAKE_FUNCTION_DEFAULTS);
  ------------------
  |  |  280|  3.04k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  3.04k|    do {                    \
  |  |  |  |   52|  3.04k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.04k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.04k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.04k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|  3.04k|    }
 1033|  42.6k|    return SUCCESS;
  ------------------
  |  |   47|  42.6k|#define SUCCESS 0
  ------------------
 1034|  42.6k|}
codegen.c:codegen_apply_decorators:
 1051|  20.4k|{
 1052|  20.4k|    if (!decos) {
  ------------------
  |  Branch (1052:9): [True: 19.8k, False: 624]
  ------------------
 1053|  19.8k|        return SUCCESS;
  ------------------
  |  |   47|  19.8k|#define SUCCESS 0
  ------------------
 1054|  19.8k|    }
 1055|       |
 1056|  2.51k|    for (Py_ssize_t i = asdl_seq_LEN(decos) - 1; i > -1; i--) {
  ------------------
  |  |   83|    624|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.24k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 624]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1056:50): [True: 1.89k, False: 624]
  ------------------
 1057|  1.89k|        location loc = LOC((expr_ty)asdl_seq_GET(decos, i));
  ------------------
  |  |   88|  1.89k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.89k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.89k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.89k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.89k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.89k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1058|  1.89k|        ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|  1.89k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.89k|    do {                    \
  |  |  |  |   52|  1.89k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.89k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.89k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  1.89k|    }
 1060|    624|    return SUCCESS;
  ------------------
  |  |   47|    624|#define SUCCESS 0
  ------------------
 1061|    624|}
codegen.c:codegen_class:
 1712|  13.0k|{
 1713|  13.0k|    asdl_expr_seq *decos = s->v.ClassDef.decorator_list;
 1714|       |
 1715|  13.0k|    RETURN_IF_ERROR(codegen_decorators(c, decos));
  ------------------
  |  |   51|  13.0k|    do {                    \
  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1716|       |
 1717|  13.0k|    int firstlineno = s->lineno;
 1718|  13.0k|    if (asdl_seq_LEN(decos)) {
  ------------------
  |  |   83|  13.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  26.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 314, False: 12.7k]
  |  |  |  |  |  Branch (302:37): [True: 12.7k, False: 314]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1719|    314|        firstlineno = ((expr_ty)asdl_seq_GET(decos, 0))->lineno;
  ------------------
  |  |   82|    314|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    314|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1720|    314|    }
 1721|  13.0k|    location loc = LOC(s);
  ------------------
  |  |   88|  13.0k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  13.0k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  13.0k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  13.0k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  13.0k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  13.0k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1722|       |
 1723|  13.0k|    asdl_type_param_seq *type_params = s->v.ClassDef.type_params;
 1724|  13.0k|    int is_generic = asdl_seq_LEN(type_params) > 0;
  ------------------
  |  |   83|  13.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  26.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 10.3k, False: 2.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1725|  13.0k|    if (is_generic) {
  ------------------
  |  Branch (1725:9): [True: 2.68k, False: 10.3k]
  ------------------
 1726|  2.68k|        PyObject *type_params_name = PyUnicode_FromFormat("<generic parameters of %U>",
 1727|  2.68k|                                                         s->v.ClassDef.name);
 1728|  2.68k|        if (!type_params_name) {
  ------------------
  |  Branch (1728:13): [True: 0, False: 2.68k]
  ------------------
 1729|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1730|      0|        }
 1731|  2.68k|        int ret = codegen_enter_scope(c, type_params_name, COMPILE_SCOPE_ANNOTATIONS,
 1732|  2.68k|                                      (void *)type_params, firstlineno, s->v.ClassDef.name, NULL);
 1733|  2.68k|        Py_DECREF(type_params_name);
  ------------------
  |  |  430|  2.68k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1734|  2.68k|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  2.68k|    do {                    \
  |  |   52|  2.68k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.68k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.68k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.68k]
  |  |  ------------------
  ------------------
 1735|  2.68k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_type_params(c, type_params));
  ------------------
  |  |   58|  2.68k|    do {                                    \
  |  |   59|  2.68k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 14, False: 2.67k]
  |  |  ------------------
  |  |   60|     14|            _PyCompile_ExitScope((C));      \
  |  |   61|     14|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|     14|#define ERROR -1
  |  |  ------------------
  |  |   62|     14|        }                                   \
  |  |   63|  2.68k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1736|  2.67k|        _Py_DECLARE_STR(type_params, ".type_params");
 1737|  2.67k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_STR(type_params), Store));
  ------------------
  |  |   58|  2.67k|    do {                                    \
  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1738|  2.67k|    }
 1739|       |
 1740|  13.0k|    int ret = codegen_class_body(c, s, firstlineno);
 1741|  13.0k|    if (is_generic) {
  ------------------
  |  Branch (1741:9): [True: 2.67k, False: 10.3k]
  ------------------
 1742|  2.67k|        RETURN_IF_ERROR_IN_SCOPE(c, ret);
  ------------------
  |  |   58|  2.67k|    do {                                    \
  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 1, False: 2.67k]
  |  |  ------------------
  |  |   60|      1|            _PyCompile_ExitScope((C));      \
  |  |   61|      1|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   62|      1|        }                                   \
  |  |   63|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1743|  2.67k|    }
 1744|  10.3k|    else {
 1745|  10.3k|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  10.3k|    do {                    \
  |  |   52|  10.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 15, False: 10.3k]
  |  |  ------------------
  |  |   53|     15|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     15|#define ERROR -1
  |  |  ------------------
  |  |   54|     15|        }                   \
  |  |   55|  10.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.3k]
  |  |  ------------------
  ------------------
 1746|  10.3k|    }
 1747|       |
 1748|       |    /* generate the rest of the code for the call */
 1749|       |
 1750|  13.0k|    if (is_generic) {
  ------------------
  |  Branch (1750:9): [True: 2.67k, False: 10.3k]
  ------------------
 1751|  2.67k|        _Py_DECLARE_STR(type_params, ".type_params");
 1752|  2.67k|        _Py_DECLARE_STR(generic_base, ".generic_base");
 1753|  2.67k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_STR(type_params), Load));
  ------------------
  |  |   58|  2.67k|    do {                                    \
  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1754|  2.67k|        ADDOP_I_IN_SCOPE(c, loc, CALL_INTRINSIC_1, INTRINSIC_SUBSCRIPT_GENERIC);
  ------------------
  |  |  283|  2.67k|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  2.67k|    do {                                    \
  |  |  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 2.67k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  2.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1755|  2.67k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_STR(generic_base), Store));
  ------------------
  |  |   58|  2.67k|    do {                                    \
  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1756|       |
 1757|  2.67k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_call_helper_impl(c, loc, 2,
  ------------------
  |  |   58|  2.67k|    do {                                    \
  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1758|  2.67k|                                                             s->v.ClassDef.bases,
 1759|  2.67k|                                                             &_Py_STR(generic_base),
 1760|  2.67k|                                                             s->v.ClassDef.keywords));
 1761|       |
 1762|  2.67k|        PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 0);
 1763|       |
 1764|  2.67k|        _PyCompile_ExitScope(c);
 1765|  2.67k|        if (co == NULL) {
  ------------------
  |  Branch (1765:13): [True: 0, False: 2.67k]
  ------------------
 1766|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1767|      0|        }
 1768|  2.67k|        int ret = codegen_make_closure(c, loc, co, 0);
 1769|  2.67k|        Py_DECREF(co);
  ------------------
  |  |  430|  2.67k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.67k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.67k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1770|  2.67k|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  2.67k|    do {                    \
  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1771|  2.67k|        ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  2.67k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.67k|    do {                    \
  |  |  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.67k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1772|  2.67k|        ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|  2.67k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.67k|    do {                    \
  |  |  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.67k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1773|  10.3k|    } else {
 1774|  10.3k|        RETURN_IF_ERROR(codegen_call_helper(c, loc, 2,
  ------------------
  |  |   51|  10.3k|    do {                    \
  |  |   52|  10.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 10.3k]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|  10.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.3k]
  |  |  ------------------
  ------------------
 1775|  10.3k|                                            s->v.ClassDef.bases,
 1776|  10.3k|                                            s->v.ClassDef.keywords));
 1777|  10.3k|    }
 1778|       |
 1779|       |    /* 6. apply decorators */
 1780|  13.0k|    RETURN_IF_ERROR(codegen_apply_decorators(c, decos));
  ------------------
  |  |   51|  13.0k|    do {                    \
  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1781|       |
 1782|       |    /* 7. store into <name> */
 1783|  13.0k|    RETURN_IF_ERROR(codegen_nameop(c, loc, s->v.ClassDef.name, Store));
  ------------------
  |  |   51|  13.0k|    do {                    \
  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1784|  13.0k|    return SUCCESS;
  ------------------
  |  |   47|  13.0k|#define SUCCESS 0
  ------------------
 1785|  13.0k|}
codegen.c:codegen_class_body:
 1610|  13.0k|{
 1611|       |    /* ultimately generate code for:
 1612|       |         <name> = __build_class__(<func>, <name>, *<bases>, **<keywords>)
 1613|       |       where:
 1614|       |         <func> is a zero arg function/closure created from the class body.
 1615|       |            It mutates its locals to build the class namespace.
 1616|       |         <name> is the class name
 1617|       |         <bases> is the positional arguments and *varargs argument
 1618|       |         <keywords> is the keyword arguments and **kwds argument
 1619|       |       This borrows from codegen_call.
 1620|       |    */
 1621|       |
 1622|       |    /* 1. compile the class body into a code object */
 1623|  13.0k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  13.0k|    do {                    \
  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1624|  13.0k|        codegen_enter_scope(c, s->v.ClassDef.name, COMPILE_SCOPE_CLASS,
 1625|  13.0k|                            (void *)s, firstlineno, s->v.ClassDef.name, NULL));
 1626|       |
 1627|  13.0k|    location loc = LOCATION(firstlineno, firstlineno, 0, 0);
  ------------------
  |  |   86|  13.0k|    ((const _Py_SourceLocation){(LNO), (END_LNO), (COL), (END_COL)})
  ------------------
 1628|       |    /* load (global) __name__ ... */
 1629|  13.0k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_ID(__name__), Load));
  ------------------
  |  |   58|  13.0k|    do {                                    \
  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1630|       |    /* ... and store it as __module__ */
 1631|  13.0k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_ID(__module__), Store));
  ------------------
  |  |   58|  13.0k|    do {                                    \
  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1632|  13.0k|    ADDOP_LOAD_CONST_IN_SCOPE(c, loc, QUALNAME(c));
  ------------------
  |  |  314|  13.0k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   58|  13.0k|    do {                                    \
  |  |  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1633|  13.0k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_ID(__qualname__), Store));
  ------------------
  |  |   58|  13.0k|    do {                                    \
  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1634|  13.0k|    ADDOP_LOAD_CONST_NEW_IN_SCOPE(c, loc, PyLong_FromLong(METADATA(c)->u_firstlineno));
  ------------------
  |  |  332|  13.0k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   58|  13.0k|    do {                                    \
  |  |  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1635|  13.0k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_nameop(c, loc, &_Py_ID(__firstlineno__), Store));
  ------------------
  |  |   58|  13.0k|    do {                                    \
  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1636|  13.0k|    asdl_type_param_seq *type_params = s->v.ClassDef.type_params;
 1637|  13.0k|    if (asdl_seq_LEN(type_params) > 0) {
  ------------------
  |  |   83|  13.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  26.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 10.3k, False: 2.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1637:9): [True: 2.67k, False: 10.3k]
  ------------------
 1638|  2.67k|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_set_type_params_in_class(c, loc));
  ------------------
  |  |   58|  2.67k|    do {                                    \
  |  |   59|  2.67k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1639|  2.67k|    }
 1640|  13.0k|    if (SYMTABLE_ENTRY(c)->ste_needs_classdict) {
  ------------------
  |  |   71|  13.0k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (1640:9): [True: 6.06k, False: 6.99k]
  ------------------
 1641|  6.06k|        ADDOP_IN_SCOPE(c, loc, LOAD_LOCALS);
  ------------------
  |  |  297|  6.06k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  6.06k|    do {                                    \
  |  |  |  |   59|  6.06k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 6.06k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  6.06k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 6.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1642|       |
 1643|       |        // We can't use codegen_nameop here because we need to generate a
 1644|       |        // STORE_DEREF in a class namespace, and codegen_nameop() won't do
 1645|       |        // that by default.
 1646|  6.06k|        ADDOP_N_IN_SCOPE(c, loc, STORE_DEREF, &_Py_ID(__classdict__), cellvars);
  ------------------
  |  |  354|  6.06k|    do {                                                                \
  |  |  355|  6.06k|        assert(!OPCODE_HAS_CONST(OP)); /* use ADDOP_LOAD_CONST_NEW */   \
  |  |  356|  6.06k|        int ret = codegen_addop_o((C), (LOC), (OP),                     \
  |  |  357|  6.06k|                                  METADATA(C)->u_ ## TYPE, (O));        \
  |  |  ------------------
  |  |  |  |   76|  6.06k|#define METADATA(C) _PyCompile_Metadata(C)
  |  |  ------------------
  |  |  358|  6.06k|        Py_DECREF((O));                                                 \
  |  |  ------------------
  |  |  |  |  430|  6.06k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  6.06k|        RETURN_IF_ERROR_IN_SCOPE((C), ret);                             \
  |  |  ------------------
  |  |  |  |   58|  6.06k|    do {                                    \
  |  |  |  |   59|  6.06k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 6.06k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  6.06k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 6.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|  6.06k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (360:14): [Folded, False: 6.06k]
  |  |  ------------------
  ------------------
  |  Branch (1646:9): [True: 6.06k, Folded]
  ------------------
 1647|  6.06k|    }
 1648|  13.0k|    if (SYMTABLE_ENTRY(c)->ste_has_conditional_annotations) {
  ------------------
  |  |   71|  13.0k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (1648:9): [True: 873, False: 12.1k]
  ------------------
 1649|    873|        ADDOP_I_IN_SCOPE(c, loc, BUILD_SET, 0);
  ------------------
  |  |  283|    873|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|    873|    do {                                    \
  |  |  |  |   59|    873|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 873]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|    873|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 873]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1650|    873|        ADDOP_N_IN_SCOPE(c, loc, STORE_DEREF, &_Py_ID(__conditional_annotations__), cellvars);
  ------------------
  |  |  354|    873|    do {                                                                \
  |  |  355|    873|        assert(!OPCODE_HAS_CONST(OP)); /* use ADDOP_LOAD_CONST_NEW */   \
  |  |  356|    873|        int ret = codegen_addop_o((C), (LOC), (OP),                     \
  |  |  357|    873|                                  METADATA(C)->u_ ## TYPE, (O));        \
  |  |  ------------------
  |  |  |  |   76|    873|#define METADATA(C) _PyCompile_Metadata(C)
  |  |  ------------------
  |  |  358|    873|        Py_DECREF((O));                                                 \
  |  |  ------------------
  |  |  |  |  430|    873|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    873|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    873|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    873|        RETURN_IF_ERROR_IN_SCOPE((C), ret);                             \
  |  |  ------------------
  |  |  |  |   58|    873|    do {                                    \
  |  |  |  |   59|    873|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 873]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|    873|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 873]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|    873|    } while (0)
  |  |  ------------------
  |  |  |  Branch (360:14): [Folded, False: 873]
  |  |  ------------------
  ------------------
  |  Branch (1650:9): [True: 873, Folded]
  ------------------
 1651|    873|    }
 1652|       |    /* compile the body proper */
 1653|  13.0k|    RETURN_IF_ERROR_IN_SCOPE(c, codegen_body(c, loc, s->v.ClassDef.body, false));
  ------------------
  |  |   58|  13.0k|    do {                                    \
  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 16, False: 13.0k]
  |  |  ------------------
  |  |   60|     16|            _PyCompile_ExitScope((C));      \
  |  |   61|     16|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|     16|#define ERROR -1
  |  |  ------------------
  |  |   62|     16|        }                                   \
  |  |   63|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1654|  13.0k|    ADDOP_LOAD_CONST_NEW_IN_SCOPE(c, NO_LOCATION, _PyCompile_StaticAttributesAsTuple(c));
  ------------------
  |  |  332|  13.0k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   58|  13.0k|    do {                                    \
  |  |  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1655|  13.0k|    RETURN_IF_ERROR_IN_SCOPE(
  ------------------
  |  |   58|  13.0k|    do {                                    \
  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1656|  13.0k|        c, codegen_nameop(c, NO_LOCATION, &_Py_ID(__static_attributes__), Store));
 1657|       |    /* The following code is artificial */
 1658|       |    /* Set __classdictcell__ if necessary */
 1659|  13.0k|    if (SYMTABLE_ENTRY(c)->ste_needs_classdict) {
  ------------------
  |  |   71|  13.0k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (1659:9): [True: 6.05k, False: 6.98k]
  ------------------
 1660|       |        /* Store __classdictcell__ into class namespace */
 1661|  6.05k|        int i = _PyCompile_LookupCellvar(c, &_Py_ID(__classdict__));
  ------------------
  |  |  936|  6.05k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  6.05k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  6.05k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1662|  6.05k|        RETURN_IF_ERROR_IN_SCOPE(c, i);
  ------------------
  |  |   58|  6.05k|    do {                                    \
  |  |   59|  6.05k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 6.05k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  6.05k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 6.05k]
  |  |  ------------------
  ------------------
 1663|  6.05k|        ADDOP_I_IN_SCOPE(c, NO_LOCATION, LOAD_CLOSURE, i);
  ------------------
  |  |  283|  6.05k|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  6.05k|    do {                                    \
  |  |  |  |   59|  6.05k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 6.05k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  6.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 6.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1664|  6.05k|        RETURN_IF_ERROR_IN_SCOPE(
  ------------------
  |  |   58|  6.05k|    do {                                    \
  |  |   59|  6.05k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 6.05k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  6.05k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 6.05k]
  |  |  ------------------
  ------------------
 1665|  6.05k|            c, codegen_nameop(c, NO_LOCATION, &_Py_ID(__classdictcell__), Store));
 1666|  6.05k|    }
 1667|       |    /* Return __classcell__ if it is referenced, otherwise return None */
 1668|  13.0k|    if (SYMTABLE_ENTRY(c)->ste_needs_class_closure) {
  ------------------
  |  |   71|  13.0k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (1668:9): [True: 25, False: 13.0k]
  ------------------
 1669|       |        /* Store __classcell__ into class namespace & return it */
 1670|     25|        int i = _PyCompile_LookupCellvar(c, &_Py_ID(__class__));
  ------------------
  |  |  936|     25|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     25|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     25|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1671|     25|        RETURN_IF_ERROR_IN_SCOPE(c, i);
  ------------------
  |  |   58|     25|    do {                                    \
  |  |   59|     25|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 25]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
 1672|     25|        ADDOP_I_IN_SCOPE(c, NO_LOCATION, LOAD_CLOSURE, i);
  ------------------
  |  |  283|     25|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|     25|    do {                                    \
  |  |  |  |   59|     25|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|     25|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1673|     25|        ADDOP_I_IN_SCOPE(c, NO_LOCATION, COPY, 1);
  ------------------
  |  |  283|     25|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|     25|    do {                                    \
  |  |  |  |   59|     25|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|     25|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1674|     25|        RETURN_IF_ERROR_IN_SCOPE(
  ------------------
  |  |   58|     25|    do {                                    \
  |  |   59|     25|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 25]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
 1675|     25|            c, codegen_nameop(c, NO_LOCATION, &_Py_ID(__classcell__), Store));
 1676|     25|    }
 1677|  13.0k|    else {
 1678|       |        /* No methods referenced __class__, so just return None */
 1679|  13.0k|        ADDOP_LOAD_CONST_IN_SCOPE(c, NO_LOCATION, Py_None);
  ------------------
  |  |  314|  13.0k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   58|  13.0k|    do {                                    \
  |  |  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1680|  13.0k|    }
 1681|  13.0k|    ADDOP_IN_SCOPE(c, NO_LOCATION, RETURN_VALUE);
  ------------------
  |  |  297|  13.0k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  13.0k|    do {                                    \
  |  |  |  |   59|  13.0k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1682|       |    /* create the code object */
 1683|  13.0k|    PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 1);
 1684|       |
 1685|       |    /* leave the new scope */
 1686|  13.0k|    _PyCompile_ExitScope(c);
 1687|  13.0k|    if (co == NULL) {
  ------------------
  |  Branch (1687:9): [True: 0, False: 13.0k]
  ------------------
 1688|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1689|      0|    }
 1690|       |
 1691|       |    /* 2. load the 'build_class' function */
 1692|       |
 1693|       |    // these instructions should be attributed to the class line,
 1694|       |    // not a decorator line
 1695|  13.0k|    loc = LOC(s);
  ------------------
  |  |   88|  13.0k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  13.0k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  13.0k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  13.0k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  13.0k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  13.0k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1696|  13.0k|    ADDOP(c, loc, LOAD_BUILD_CLASS);
  ------------------
  |  |  294|  13.0k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  13.0k|    do {                    \
  |  |  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1697|  13.0k|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  13.0k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  13.0k|    do {                    \
  |  |  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1698|       |
 1699|       |    /* 3. load a function (or closure) made from the code object */
 1700|  13.0k|    int ret = codegen_make_closure(c, loc, co, 0);
 1701|  13.0k|    Py_DECREF(co);
  ------------------
  |  |  430|  13.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  13.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1702|  13.0k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  13.0k|    do {                    \
  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  13.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  ------------------
  ------------------
 1703|       |
 1704|       |    /* 4. load class name */
 1705|  13.0k|    ADDOP_LOAD_CONST(c, loc, s->v.ClassDef.name);
  ------------------
  |  |  311|  13.0k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  13.0k|    do {                    \
  |  |  |  |   52|  13.0k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.0k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1706|       |
 1707|  13.0k|    return SUCCESS;
  ------------------
  |  |   47|  13.0k|#define SUCCESS 0
  ------------------
 1708|  13.0k|}
codegen.c:codegen_set_type_params_in_class:
 1600|  2.67k|{
 1601|  2.67k|    _Py_DECLARE_STR(type_params, ".type_params");
 1602|  2.67k|    RETURN_IF_ERROR(codegen_nameop(c, loc, &_Py_STR(type_params), Load));
  ------------------
  |  |   51|  2.67k|    do {                    \
  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1603|  2.67k|    RETURN_IF_ERROR(codegen_nameop(c, loc, &_Py_ID(__type_params__), Store));
  ------------------
  |  |   51|  2.67k|    do {                    \
  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 1604|  2.67k|    return SUCCESS;
  ------------------
  |  |   47|  2.67k|#define SUCCESS 0
  ------------------
 1605|  2.67k|}
codegen.c:codegen_call_helper_impl:
 4461|  21.5k|{
 4462|  21.5k|    Py_ssize_t i, nseen, nelts, nkwelts;
 4463|       |
 4464|  21.5k|    RETURN_IF_ERROR(codegen_validate_keywords(c, keywords));
  ------------------
  |  |   51|  21.5k|    do {                    \
  |  |   52|  21.5k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 21.5k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  21.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 21.5k]
  |  |  ------------------
  ------------------
 4465|       |
 4466|  21.5k|    nelts = asdl_seq_LEN(args);
  ------------------
  |  |   83|  21.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  43.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 14.3k, False: 7.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4467|  21.5k|    nkwelts = asdl_seq_LEN(keywords);
  ------------------
  |  |   83|  21.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  43.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 20.5k, False: 980]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4468|       |
 4469|  21.5k|    if (CALL_STACK_USE(nelts, nkwelts) > _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   91|  21.5k|    ((nargs) + (nkwds) + ((nkwds) != 0))
  ------------------
                  if (CALL_STACK_USE(nelts, nkwelts) > _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   24|  21.5k|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (4469:9): [True: 2, False: 21.5k]
  ------------------
 4470|      2|         goto ex_call;
 4471|      2|    }
 4472|  30.0k|    for (i = 0; i < nelts; i++) {
  ------------------
  |  Branch (4472:17): [True: 10.4k, False: 19.5k]
  ------------------
 4473|  10.4k|        expr_ty elt = asdl_seq_GET(args, i);
  ------------------
  |  |   82|  10.4k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  10.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4474|  10.4k|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (4474:13): [True: 2.01k, False: 8.43k]
  ------------------
 4475|  2.01k|            goto ex_call;
 4476|  2.01k|        }
 4477|  10.4k|    }
 4478|  20.0k|    for (i = 0; i < nkwelts; i++) {
  ------------------
  |  Branch (4478:17): [True: 989, False: 19.0k]
  ------------------
 4479|    989|        keyword_ty kw = asdl_seq_GET(keywords, i);
  ------------------
  |  |   82|    989|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    989|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4480|    989|        if (kw->arg == NULL) {
  ------------------
  |  Branch (4480:13): [True: 512, False: 477]
  ------------------
 4481|    512|            goto ex_call;
 4482|    512|        }
 4483|    989|    }
 4484|       |
 4485|       |    /* No * or ** args, so can use faster calling sequence */
 4486|  26.8k|    for (i = 0; i < nelts; i++) {
  ------------------
  |  Branch (4486:17): [True: 7.88k, False: 18.9k]
  ------------------
 4487|  7.88k|        expr_ty elt = asdl_seq_GET(args, i);
  ------------------
  |  |   82|  7.88k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  7.88k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4488|  7.88k|        assert(elt->kind != Starred_kind);
  ------------------
  |  Branch (4488:9): [True: 7.88k, False: 0]
  ------------------
 4489|  7.88k|        VISIT(c, expr, elt);
  ------------------
  |  |  460|  7.88k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  7.88k|    do {                    \
  |  |  |  |   52|  7.88k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 55, False: 7.83k]
  |  |  |  |  ------------------
  |  |  |  |   53|     55|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     55|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     55|        }                   \
  |  |  |  |   55|  7.88k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7.83k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4490|  7.88k|    }
 4491|  18.9k|    if (injected_arg) {
  ------------------
  |  Branch (4491:9): [True: 2.67k, False: 16.3k]
  ------------------
 4492|  2.67k|        RETURN_IF_ERROR(codegen_nameop(c, loc, injected_arg, Load));
  ------------------
  |  |   51|  2.67k|    do {                    \
  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.67k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.67k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.67k]
  |  |  ------------------
  ------------------
 4493|  2.67k|        nelts++;
 4494|  2.67k|    }
 4495|  18.9k|    if (nkwelts) {
  ------------------
  |  Branch (4495:9): [True: 447, False: 18.5k]
  ------------------
 4496|    447|        VISIT_SEQ(c, keyword, keywords);
  ------------------
  |  |  466|    447|    do {                                                                    \
  |  |  467|    447|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    903|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    903|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.80k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 903]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 469, False: 434]
  |  |  ------------------
  |  |  469|    469|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    469|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    469|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    469|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    469|    do {                    \
  |  |  |  |   52|    469|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 13, False: 456]
  |  |  |  |  ------------------
  |  |  |  |   53|     13|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     13|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     13|        }                   \
  |  |  |  |   55|    469|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 456]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    469|        }                                                                   \
  |  |  472|    447|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 434]
  |  |  ------------------
  ------------------
 4497|    434|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    434|    do {                    \
  |  |   52|    434|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 434]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    434|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 434]
  |  |  ------------------
  ------------------
 4498|    434|            codegen_call_simple_kw_helper(c, loc, keywords, nkwelts));
 4499|    434|        ADDOP_I(c, loc, CALL_KW, n + nelts + nkwelts);
  ------------------
  |  |  280|    434|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    434|    do {                    \
  |  |  |  |   52|    434|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 434]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    434|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 434]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4500|    434|    }
 4501|  18.5k|    else {
 4502|  18.5k|        ADDOP_I(c, loc, CALL, n + nelts);
  ------------------
  |  |  280|  18.5k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  18.5k|    do {                    \
  |  |  |  |   52|  18.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 18.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  18.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 18.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4503|  18.5k|    }
 4504|  18.9k|    return SUCCESS;
  ------------------
  |  |   47|  18.9k|#define SUCCESS 0
  ------------------
 4505|       |
 4506|  2.52k|ex_call:
 4507|       |
 4508|       |    /* Do positional arguments. */
 4509|  2.52k|    if (n == 0 && nelts == 1 && ((expr_ty)asdl_seq_GET(args, 0))->kind == Starred_kind) {
  ------------------
  |  |   82|  1.22k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.22k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (4509:9): [True: 2.51k, False: 11]
  |  Branch (4509:19): [True: 1.22k, False: 1.28k]
  |  Branch (4509:33): [True: 744, False: 481]
  ------------------
 4510|    744|        VISIT(c, expr, ((expr_ty)asdl_seq_GET(args, 0))->v.Starred.value);
  ------------------
  |  |  460|    744|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    744|    do {                    \
  |  |  |  |   52|    744|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 10, False: 734]
  |  |  |  |  ------------------
  |  |  |  |   53|     10|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     10|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     10|        }                   \
  |  |  |  |   55|    744|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 734]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4511|    744|    }
 4512|  1.78k|    else {
 4513|  1.78k|        RETURN_IF_ERROR(starunpack_helper_impl(c, loc, args, injected_arg, n,
  ------------------
  |  |   51|  1.78k|    do {                    \
  |  |   52|  1.78k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 10, False: 1.77k]
  |  |  ------------------
  |  |   53|     10|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     10|#define ERROR -1
  |  |  ------------------
  |  |   54|     10|        }                   \
  |  |   55|  1.78k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.77k]
  |  |  ------------------
  ------------------
 4514|  1.78k|                                               BUILD_LIST, LIST_APPEND, LIST_EXTEND, 1));
 4515|  1.78k|    }
 4516|       |    /* Then keyword arguments */
 4517|  2.50k|    if (nkwelts) {
  ------------------
  |  Branch (4517:9): [True: 526, False: 1.97k]
  ------------------
 4518|       |        /* Has a new dict been pushed */
 4519|    526|        int have_dict = 0;
 4520|       |
 4521|    526|        nseen = 0;  /* the number of keyword arguments on the stack following */
 4522|  1.40k|        for (i = 0; i < nkwelts; i++) {
  ------------------
  |  Branch (4522:21): [True: 881, False: 521]
  ------------------
 4523|    881|            keyword_ty kw = asdl_seq_GET(keywords, i);
  ------------------
  |  |   82|    881|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    881|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4524|    881|            if (kw->arg == NULL) {
  ------------------
  |  Branch (4524:17): [True: 844, False: 37]
  ------------------
 4525|       |                /* A keyword argument unpacking. */
 4526|    844|                if (nseen) {
  ------------------
  |  Branch (4526:21): [True: 12, False: 832]
  ------------------
 4527|     12|                    RETURN_IF_ERROR(codegen_subkwargs(c, loc, keywords, i - nseen, i));
  ------------------
  |  |   51|     12|    do {                    \
  |  |   52|     12|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 2, False: 10]
  |  |  ------------------
  |  |   53|      2|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      2|#define ERROR -1
  |  |  ------------------
  |  |   54|      2|        }                   \
  |  |   55|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
 4528|     10|                    if (have_dict) {
  ------------------
  |  Branch (4528:25): [True: 3, False: 7]
  ------------------
 4529|      3|                        ADDOP_I(c, loc, DICT_MERGE, 1);
  ------------------
  |  |  280|      3|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      3|    do {                    \
  |  |  |  |   52|      3|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      3|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4530|      3|                    }
 4531|     10|                    have_dict = 1;
 4532|     10|                    nseen = 0;
 4533|     10|                }
 4534|    842|                if (!have_dict) {
  ------------------
  |  Branch (4534:21): [True: 505, False: 337]
  ------------------
 4535|    505|                    ADDOP_I(c, loc, BUILD_MAP, 0);
  ------------------
  |  |  280|    505|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    505|    do {                    \
  |  |  |  |   52|    505|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 505]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    505|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 505]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4536|    505|                    have_dict = 1;
 4537|    505|                }
 4538|    842|                VISIT(c, expr, kw->value);
  ------------------
  |  |  460|    842|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    842|    do {                    \
  |  |  |  |   52|    842|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 839]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    842|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 839]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4539|    839|                ADDOP_I(c, loc, DICT_MERGE, 1);
  ------------------
  |  |  280|    839|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    839|    do {                    \
  |  |  |  |   52|    839|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 839]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    839|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 839]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4540|    839|            }
 4541|     37|            else {
 4542|     37|                nseen++;
 4543|     37|            }
 4544|    881|        }
 4545|    521|        if (nseen) {
  ------------------
  |  Branch (4545:13): [True: 16, False: 505]
  ------------------
 4546|       |            /* Pack up any trailing keyword arguments. */
 4547|     16|            RETURN_IF_ERROR(codegen_subkwargs(c, loc, keywords, nkwelts - nseen, nkwelts));
  ------------------
  |  |   51|     16|    do {                    \
  |  |   52|     16|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 15]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|     16|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 15]
  |  |  ------------------
  ------------------
 4548|     15|            if (have_dict) {
  ------------------
  |  Branch (4548:17): [True: 4, False: 11]
  ------------------
 4549|      4|                ADDOP_I(c, loc, DICT_MERGE, 1);
  ------------------
  |  |  280|      4|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      4|    do {                    \
  |  |  |  |   52|      4|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4550|      4|            }
 4551|     15|            have_dict = 1;
 4552|     15|        }
 4553|    521|        assert(have_dict);
  ------------------
  |  Branch (4553:9): [True: 520, False: 0]
  ------------------
 4554|    520|    }
 4555|  2.49k|    if (nkwelts == 0) {
  ------------------
  |  Branch (4555:9): [True: 1.97k, False: 520]
  ------------------
 4556|  1.97k|        ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  1.97k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.97k|    do {                    \
  |  |  |  |   52|  1.97k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.97k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.97k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.97k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4557|  1.97k|    }
 4558|  2.49k|    ADDOP(c, loc, CALL_FUNCTION_EX);
  ------------------
  |  |  294|  2.49k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.49k|    do {                    \
  |  |  |  |   52|  2.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4559|  2.49k|    return SUCCESS;
  ------------------
  |  |   47|  2.49k|#define SUCCESS 0
  ------------------
 4560|  2.49k|}
codegen.c:codegen_validate_keywords:
 4230|  31.4k|{
 4231|  31.4k|    Py_ssize_t nkeywords = asdl_seq_LEN(keywords);
  ------------------
  |  |   83|  31.4k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  62.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 29.3k, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4232|  34.3k|    for (Py_ssize_t i = 0; i < nkeywords; i++) {
  ------------------
  |  Branch (4232:28): [True: 2.96k, False: 31.3k]
  ------------------
 4233|  2.96k|        keyword_ty key = ((keyword_ty)asdl_seq_GET(keywords, i));
  ------------------
  |  |   82|  2.96k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.96k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4234|  2.96k|        if (key->arg == NULL) {
  ------------------
  |  Branch (4234:13): [True: 1.71k, False: 1.25k]
  ------------------
 4235|  1.71k|            continue;
 4236|  1.71k|        }
 4237|  1.56k|        for (Py_ssize_t j = i + 1; j < nkeywords; j++) {
  ------------------
  |  Branch (4237:36): [True: 335, False: 1.22k]
  ------------------
 4238|    335|            keyword_ty other = ((keyword_ty)asdl_seq_GET(keywords, j));
  ------------------
  |  |   82|    335|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    335|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4239|    335|            if (other->arg && !PyUnicode_Compare(key->arg, other->arg)) {
  ------------------
  |  Branch (4239:17): [True: 239, False: 96]
  |  Branch (4239:31): [True: 22, False: 217]
  ------------------
 4240|     22|                return _PyCompile_Error(c, LOC(other), "keyword argument repeated: %U", key->arg);
  ------------------
  |  |   88|     22|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     22|    (_Py_SourceLocation){ \
  |  |  |  |   59|     22|               .lineno = (n)->lineno, \
  |  |  |  |   60|     22|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     22|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     22|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4241|     22|            }
 4242|    335|        }
 4243|  1.25k|    }
 4244|  31.3k|    return SUCCESS;
  ------------------
  |  |   47|  31.3k|#define SUCCESS 0
  ------------------
 4245|  31.4k|}
codegen.c:codegen_visit_keyword:
 5237|    703|{
 5238|    703|    VISIT(c, expr, k->value);
  ------------------
  |  |  460|    703|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    703|    do {                    \
  |  |  |  |   52|    703|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 16, False: 687]
  |  |  |  |  ------------------
  |  |  |  |   53|     16|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     16|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     16|        }                   \
  |  |  |  |   55|    703|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 687]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5239|    687|    return SUCCESS;
  ------------------
  |  |   47|    687|#define SUCCESS 0
  ------------------
 5240|    703|}
codegen.c:codegen_call_simple_kw_helper:
 4440|    553|{
 4441|    553|    PyObject *names;
 4442|    553|    names = PyTuple_New(nkwelts);
 4443|    553|    if (names == NULL) {
  ------------------
  |  Branch (4443:9): [True: 0, False: 553]
  ------------------
 4444|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4445|      0|    }
 4446|  1.24k|    for (Py_ssize_t i = 0; i < nkwelts; i++) {
  ------------------
  |  Branch (4446:28): [True: 687, False: 553]
  ------------------
 4447|    687|        keyword_ty kw = asdl_seq_GET(keywords, i);
  ------------------
  |  |   82|    687|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    687|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4448|    687|        PyTuple_SET_ITEM(names, i, Py_NewRef(kw->arg));
  ------------------
  |  |   40|    687|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    687|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    687|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    687|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    687|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4449|    687|    }
 4450|    553|    ADDOP_LOAD_CONST_NEW(c, loc, names);
  ------------------
  |  |  329|    553|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    553|    do {                    \
  |  |  |  |   52|    553|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 553]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    553|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 553]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4451|    553|    return SUCCESS;
  ------------------
  |  |   47|    553|#define SUCCESS 0
  ------------------
 4452|    553|}
codegen.c:starunpack_helper_impl:
 3470|  65.4k|{
 3471|  65.4k|    Py_ssize_t end = asdl_seq_LEN(elts);
  ------------------
  |  |   83|  65.4k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   130k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 5.39k, False: 60.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3472|  65.4k|    Py_ssize_t n = 0;
 3473|  65.4k|    int seen_star = 0;
 3474|   258k|    for (Py_ssize_t i = 0; i < end; i++) {
  ------------------
  |  Branch (3474:28): [True: 193k, False: 65.4k]
  ------------------
 3475|   193k|        expr_ty elt = asdl_seq_GET(elts, i);
  ------------------
  |  |   82|   193k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   193k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3476|   193k|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (3476:13): [True: 8.33k, False: 184k]
  ------------------
 3477|  8.33k|            if (is_empty_starred_literal(elt)) {
  ------------------
  |  Branch (3477:17): [True: 1, False: 8.33k]
  ------------------
 3478|      1|                continue;
 3479|      1|            }
 3480|  8.33k|            seen_star = 1;
 3481|  8.33k|        }
 3482|   193k|        n++;
 3483|   193k|    }
 3484|  65.4k|    int big = n + pushed + (injected_arg ? 1 : 0) > _PY_STACK_USE_GUIDELINE;
  ------------------
  |  |   24|  65.4k|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (3484:29): [True: 0, False: 65.4k]
  ------------------
 3485|  65.4k|    if (!seen_star && !big) {
  ------------------
  |  Branch (3485:9): [True: 58.0k, False: 7.37k]
  |  Branch (3485:23): [True: 57.7k, False: 313]
  ------------------
 3486|   182k|        for (Py_ssize_t i = 0; i < end; i++) {
  ------------------
  |  Branch (3486:32): [True: 124k, False: 57.6k]
  ------------------
 3487|   124k|            expr_ty elt = asdl_seq_GET(elts, i);
  ------------------
  |  |   82|   124k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|   124k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3488|   124k|            if (is_empty_starred_literal(elt)) {
  ------------------
  |  Branch (3488:17): [True: 1, False: 124k]
  ------------------
 3489|      1|                continue;
 3490|      1|            }
 3491|   124k|            VISIT(c, expr, elt);
  ------------------
  |  |  460|   124k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|   124k|    do {                    \
  |  |  |  |   52|   124k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 62, False: 124k]
  |  |  |  |  ------------------
  |  |  |  |   53|     62|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     62|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     62|        }                   \
  |  |  |  |   55|   124k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 124k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3492|   124k|        }
 3493|  57.6k|        if (injected_arg) {
  ------------------
  |  Branch (3493:13): [True: 0, False: 57.6k]
  ------------------
 3494|      0|            RETURN_IF_ERROR(codegen_nameop(c, loc, injected_arg, Load));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3495|      0|            n++;
 3496|      0|        }
 3497|  57.6k|        if (tuple) {
  ------------------
  |  Branch (3497:13): [True: 53.5k, False: 4.10k]
  ------------------
 3498|  53.5k|            ADDOP_I(c, loc, BUILD_TUPLE, n+pushed);
  ------------------
  |  |  280|  53.5k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  53.5k|    do {                    \
  |  |  |  |   52|  53.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 53.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  53.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 53.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3499|  53.5k|        } else {
 3500|  4.10k|            ADDOP_I(c, loc, build, n+pushed);
  ------------------
  |  |  280|  4.10k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.10k|    do {                    \
  |  |  |  |   52|  4.10k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.10k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.10k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3501|  4.10k|        }
 3502|  57.6k|        return SUCCESS;
  ------------------
  |  |   47|  57.6k|#define SUCCESS 0
  ------------------
 3503|  57.6k|    }
 3504|  7.69k|    int sequence_built = 0;
 3505|  7.69k|    Py_ssize_t nitems = 0;
 3506|  7.69k|    if (big) {
  ------------------
  |  Branch (3506:9): [True: 365, False: 7.32k]
  ------------------
 3507|    365|        ADDOP_I(c, loc, build, pushed);
  ------------------
  |  |  280|    365|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    365|    do {                    \
  |  |  |  |   52|    365|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 365]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    365|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 365]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3508|    365|        sequence_built = 1;
 3509|    365|    }
 3510|  75.8k|    for (Py_ssize_t i = 0; i < end; i++) {
  ------------------
  |  Branch (3510:28): [True: 68.2k, False: 7.66k]
  ------------------
 3511|  68.2k|        expr_ty elt = asdl_seq_GET(elts, i);
  ------------------
  |  |   82|  68.2k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  68.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3512|       |
 3513|  68.2k|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (3513:13): [True: 8.33k, False: 59.8k]
  ------------------
 3514|  8.33k|            if (is_empty_starred_literal(elt)) {
  ------------------
  |  Branch (3514:17): [True: 0, False: 8.33k]
  ------------------
 3515|      0|                continue;
 3516|      0|            }
 3517|  8.33k|            if (sequence_built == 0) {
  ------------------
  |  Branch (3517:17): [True: 7.32k, False: 1.01k]
  ------------------
 3518|  7.32k|                ADDOP_I(c, loc, build, nitems+pushed);
  ------------------
  |  |  280|  7.32k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  7.32k|    do {                    \
  |  |  |  |   52|  7.32k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7.32k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  7.32k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7.32k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3519|  7.32k|                sequence_built = 1;
 3520|  7.32k|            }
 3521|  8.33k|            VISIT(c, expr, elt->v.Starred.value);
  ------------------
  |  |  460|  8.33k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  8.33k|    do {                    \
  |  |  |  |   52|  8.33k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 14, False: 8.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|     14|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     14|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     14|        }                   \
  |  |  |  |   55|  8.33k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3522|  8.31k|            ADDOP_I(c, loc, extend, 1);
  ------------------
  |  |  280|  8.31k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  8.31k|    do {                    \
  |  |  |  |   52|  8.31k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3523|  8.31k|        }
 3524|  59.8k|        else {
 3525|  59.8k|            VISIT(c, expr, elt);
  ------------------
  |  |  460|  59.8k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  59.8k|    do {                    \
  |  |  |  |   52|  59.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 16, False: 59.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|     16|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     16|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     16|        }                   \
  |  |  |  |   55|  59.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 59.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3526|  59.8k|            if (sequence_built) {
  ------------------
  |  Branch (3526:17): [True: 37.7k, False: 22.1k]
  ------------------
 3527|  37.7k|                ADDOP_I(c, loc, add, 1);
  ------------------
  |  |  280|  37.7k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  37.7k|    do {                    \
  |  |  |  |   52|  37.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 37.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  37.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 37.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3528|  37.7k|            }
 3529|  59.8k|        }
 3530|  68.1k|        nitems++;
 3531|  68.1k|    }
 3532|  7.69k|    assert(sequence_built);
  ------------------
  |  Branch (3532:5): [True: 7.66k, False: 0]
  ------------------
 3533|  7.66k|    if (injected_arg) {
  ------------------
  |  Branch (3533:9): [True: 0, False: 7.66k]
  ------------------
 3534|      0|        RETURN_IF_ERROR(codegen_nameop(c, loc, injected_arg, Load));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3535|      0|        ADDOP_I(c, loc, add, 1);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3536|      0|    }
 3537|  7.66k|    if (tuple) {
  ------------------
  |  Branch (3537:9): [True: 2.85k, False: 4.80k]
  ------------------
 3538|  2.85k|        ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_LIST_TO_TUPLE);
  ------------------
  |  |  280|  2.85k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.85k|    do {                    \
  |  |  |  |   52|  2.85k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.85k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.85k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3539|  2.85k|    }
 3540|  7.66k|    return SUCCESS;
  ------------------
  |  |   47|  7.66k|#define SUCCESS 0
  ------------------
 3541|  7.66k|}
codegen.c:is_empty_starred_literal:
 3453|   141k|{
 3454|   141k|    if (elt->kind != Starred_kind) {
  ------------------
  |  Branch (3454:9): [True: 124k, False: 16.6k]
  ------------------
 3455|   124k|        return false;
 3456|   124k|    }
 3457|  16.6k|    expr_ty value = elt->v.Starred.value;
 3458|  16.6k|    return (value->kind == Tuple_kind &&
  ------------------
  |  Branch (3458:13): [True: 0, False: 16.6k]
  ------------------
 3459|      0|            asdl_seq_LEN(value->v.Tuple.elts) == 0) ||
  ------------------
  |  |   83|      0|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3459:13): [True: 0, False: 0]
  ------------------
 3460|  16.6k|           (value->kind == List_kind &&
  ------------------
  |  Branch (3460:13): [True: 4, False: 16.6k]
  ------------------
 3461|      4|            asdl_seq_LEN(value->v.List.elts) == 0) ||
  ------------------
  |  |   83|      4|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|      8|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3461:13): [True: 2, False: 2]
  ------------------
 3462|  16.6k|           (value->kind == Dict_kind &&
  ------------------
  |  Branch (3462:13): [True: 0, False: 16.6k]
  ------------------
 3463|      0|            asdl_seq_LEN(value->v.Dict.keys) == 0);
  ------------------
  |  |   83|      0|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3463:13): [True: 0, False: 0]
  ------------------
 3464|   141k|}
codegen.c:codegen_subkwargs:
 4412|     28|{
 4413|     28|    Py_ssize_t i, n = end - begin;
 4414|     28|    keyword_ty kw;
 4415|     28|    assert(n > 0);
  ------------------
  |  Branch (4415:5): [True: 28, False: 0]
  ------------------
 4416|     28|    int big = n*2 > _PY_STACK_USE_GUIDELINE;
  ------------------
  |  |   24|     28|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
 4417|     28|    if (big) {
  ------------------
  |  Branch (4417:9): [True: 0, False: 28]
  ------------------
 4418|      0|        ADDOP_I(c, NO_LOCATION, BUILD_MAP, 0);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4419|      0|    }
 4420|     62|    for (i = begin; i < end; i++) {
  ------------------
  |  Branch (4420:21): [True: 37, False: 25]
  ------------------
 4421|     37|        kw = asdl_seq_GET(keywords, i);
  ------------------
  |  |   82|     37|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     37|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4422|     37|        ADDOP_LOAD_CONST(c, loc, kw->arg);
  ------------------
  |  |  311|     37|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     37|    do {                    \
  |  |  |  |   52|     37|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 37]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     37|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 37]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4423|     37|        VISIT(c, expr, kw->value);
  ------------------
  |  |  460|     37|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     37|    do {                    \
  |  |  |  |   52|     37|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 34]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|     37|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4424|     34|        if (big) {
  ------------------
  |  Branch (4424:13): [True: 0, False: 34]
  ------------------
 4425|      0|            ADDOP_I(c, NO_LOCATION, MAP_ADD, 1);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4426|      0|        }
 4427|     34|    }
 4428|     25|    if (!big) {
  ------------------
  |  Branch (4428:9): [True: 25, False: 0]
  ------------------
 4429|     25|        ADDOP_I(c, loc, BUILD_MAP, n);
  ------------------
  |  |  280|     25|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     25|    do {                    \
  |  |  |  |   52|     25|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     25|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4430|     25|    }
 4431|     25|    return SUCCESS;
  ------------------
  |  |   47|     25|#define SUCCESS 0
  ------------------
 4432|     25|}
codegen.c:codegen_call_helper:
 4567|  18.9k|{
 4568|       |    return codegen_call_helper_impl(c, loc, n, args, NULL, keywords);
 4569|  18.9k|}
codegen.c:codegen_typealias:
 1820|    381|{
 1821|    381|    location loc = LOC(s);
  ------------------
  |  |   88|    381|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    381|    (_Py_SourceLocation){ \
  |  |  |  |   59|    381|               .lineno = (n)->lineno, \
  |  |  |  |   60|    381|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    381|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    381|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1822|    381|    asdl_type_param_seq *type_params = s->v.TypeAlias.type_params;
 1823|    381|    int is_generic = asdl_seq_LEN(type_params) > 0;
  ------------------
  |  |   83|    381|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    762|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 380, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1824|    381|    PyObject *name = s->v.TypeAlias.name->v.Name.id;
 1825|    381|    if (is_generic) {
  ------------------
  |  Branch (1825:9): [True: 1, False: 380]
  ------------------
 1826|      1|        PyObject *type_params_name = PyUnicode_FromFormat("<generic parameters of %U>",
 1827|      1|                                                         name);
 1828|      1|        if (!type_params_name) {
  ------------------
  |  Branch (1828:13): [True: 0, False: 1]
  ------------------
 1829|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1830|      0|        }
 1831|      1|        int ret = codegen_enter_scope(c, type_params_name, COMPILE_SCOPE_ANNOTATIONS,
 1832|      1|                                      (void *)type_params, loc.lineno, NULL, NULL);
 1833|      1|        Py_DECREF(type_params_name);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1834|      1|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|      1|    do {                    \
  |  |   52|      1|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1835|      1|        ADDOP_LOAD_CONST_IN_SCOPE(c, loc, name);
  ------------------
  |  |  314|      1|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   58|      1|    do {                                    \
  |  |  |  |   59|      1|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1836|      1|        RETURN_IF_ERROR_IN_SCOPE(c, codegen_type_params(c, type_params));
  ------------------
  |  |   58|      1|    do {                                    \
  |  |   59|      1|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1837|      1|    }
 1838|    380|    else {
 1839|    380|        ADDOP_LOAD_CONST(c, loc, name);
  ------------------
  |  |  311|    380|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    380|    do {                    \
  |  |  |  |   52|    380|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1840|    380|        ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|    380|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    380|    do {                    \
  |  |  |  |   52|    380|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1841|    380|    }
 1842|       |
 1843|    381|    int ret = codegen_typealias_body(c, s);
 1844|    381|    if (is_generic) {
  ------------------
  |  Branch (1844:9): [True: 1, False: 380]
  ------------------
 1845|      1|        RETURN_IF_ERROR_IN_SCOPE(c, ret);
  ------------------
  |  |   58|      1|    do {                                    \
  |  |   59|      1|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1846|      1|    }
 1847|    380|    else {
 1848|    380|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|    380|    do {                    \
  |  |   52|    380|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 379]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|    380|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 379]
  |  |  ------------------
  ------------------
 1849|    380|    }
 1850|       |
 1851|    380|    if (is_generic) {
  ------------------
  |  Branch (1851:9): [True: 1, False: 379]
  ------------------
 1852|      1|        PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 0);
 1853|      1|        _PyCompile_ExitScope(c);
 1854|      1|        if (co == NULL) {
  ------------------
  |  Branch (1854:13): [True: 0, False: 1]
  ------------------
 1855|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1856|      0|        }
 1857|      1|        int ret = codegen_make_closure(c, loc, co, 0);
 1858|      1|        Py_DECREF(co);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1859|      1|        RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|      1|    do {                    \
  |  |   52|      1|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1860|      1|        ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|      1|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1861|      1|        ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|      1|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1862|      1|    }
 1863|    380|    RETURN_IF_ERROR(codegen_nameop(c, loc, name, Store));
  ------------------
  |  |   51|    380|    do {                    \
  |  |   52|    380|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    380|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  ------------------
  ------------------
 1864|    380|    return SUCCESS;
  ------------------
  |  |   47|    380|#define SUCCESS 0
  ------------------
 1865|    380|}
codegen.c:codegen_typealias_body:
 1789|    381|{
 1790|    381|    location loc = LOC(s);
  ------------------
  |  |   88|    381|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    381|    (_Py_SourceLocation){ \
  |  |  |  |   59|    381|               .lineno = (n)->lineno, \
  |  |  |  |   60|    381|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    381|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    381|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1791|    381|    PyObject *name = s->v.TypeAlias.name->v.Name.id;
 1792|    381|    PyObject *defaults = PyTuple_Pack(1, _PyLong_GetOne());
 1793|    381|    ADDOP_LOAD_CONST_NEW(c, loc, defaults);
  ------------------
  |  |  329|    381|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    381|    do {                    \
  |  |  |  |   52|    381|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 381]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    381|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 381]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1794|    381|    RETURN_IF_ERROR(
  ------------------
  |  |   51|    381|    do {                    \
  |  |   52|    381|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 381]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    381|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 381]
  |  |  ------------------
  ------------------
 1795|    381|        codegen_setup_annotations_scope(c, LOC(s), s, name));
 1796|       |
 1797|    381|    assert(!SYMTABLE_ENTRY(c)->ste_has_docstring);
  ------------------
  |  Branch (1797:5): [True: 381, False: 0]
  ------------------
 1798|    381|    VISIT_IN_SCOPE(c, expr, s->v.TypeAlias.value);
  ------------------
  |  |  463|    381|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   58|    381|    do {                                    \
  |  |  |  |   59|    381|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 1, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   60|      1|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      1|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      1|        }                                   \
  |  |  |  |   63|    381|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1799|    380|    ADDOP_IN_SCOPE(c, loc, RETURN_VALUE);
  ------------------
  |  |  297|    380|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|    380|    do {                                    \
  |  |  |  |   59|    380|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1800|    380|    PyCodeObject *co = _PyCompile_OptimizeAndAssemble(c, 0);
 1801|    380|    _PyCompile_ExitScope(c);
 1802|    380|    if (co == NULL) {
  ------------------
  |  Branch (1802:9): [True: 0, False: 380]
  ------------------
 1803|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1804|      0|    }
 1805|    380|    if (codegen_rename_annotations_format_param(co) < 0) {
  ------------------
  |  Branch (1805:9): [True: 0, False: 380]
  ------------------
 1806|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1807|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 1808|      0|    }
 1809|    380|    int ret = codegen_make_closure(c, loc, co, MAKE_FUNCTION_DEFAULTS);
  ------------------
  |  |   64|    380|#define MAKE_FUNCTION_DEFAULTS    0x01
  ------------------
 1810|    380|    Py_DECREF(co);
  ------------------
  |  |  430|    380|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    380|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    380|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1811|    380|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|    380|    do {                    \
  |  |   52|    380|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    380|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  ------------------
  ------------------
 1812|       |
 1813|    380|    ADDOP_I(c, loc, BUILD_TUPLE, 3);
  ------------------
  |  |  280|    380|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    380|    do {                    \
  |  |  |  |   52|    380|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1814|    380|    ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_TYPEALIAS);
  ------------------
  |  |  280|    380|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    380|    do {                    \
  |  |  |  |   52|    380|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1815|    380|    return SUCCESS;
  ------------------
  |  |   47|    380|#define SUCCESS 0
  ------------------
 1816|    380|}
codegen.c:codegen_return:
 2285|    229|{
 2286|    229|    location loc = LOC(s);
  ------------------
  |  |   88|    229|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    229|    (_Py_SourceLocation){ \
  |  |  |  |   59|    229|               .lineno = (n)->lineno, \
  |  |  |  |   60|    229|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    229|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    229|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2287|    229|    int preserve_tos = ((s->v.Return.value != NULL) &&
  ------------------
  |  Branch (2287:25): [True: 34, False: 195]
  ------------------
 2288|     34|                        (s->v.Return.value->kind != Constant_kind));
  ------------------
  |  Branch (2288:25): [True: 33, False: 1]
  ------------------
 2289|       |
 2290|    229|    PySTEntryObject *ste = SYMTABLE_ENTRY(c);
  ------------------
  |  |   71|    229|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
 2291|    229|    if (!_PyST_IsFunctionLike(ste)) {
  ------------------
  |  Branch (2291:9): [True: 31, False: 198]
  ------------------
 2292|     31|        return _PyCompile_Error(c, loc, "'return' outside function");
 2293|     31|    }
 2294|    198|    if (s->v.Return.value != NULL && ste->ste_coroutine && ste->ste_generator) {
  ------------------
  |  Branch (2294:9): [True: 24, False: 174]
  |  Branch (2294:38): [True: 23, False: 1]
  |  Branch (2294:60): [True: 0, False: 23]
  ------------------
 2295|      0|        return _PyCompile_Error(c, loc, "'return' with value in async generator");
 2296|      0|    }
 2297|       |
 2298|    198|    if (preserve_tos) {
  ------------------
  |  Branch (2298:9): [True: 23, False: 175]
  ------------------
 2299|     23|        VISIT(c, expr, s->v.Return.value);
  ------------------
  |  |  460|     23|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     23|    do {                    \
  |  |  |  |   52|     23|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 20]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|     23|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 20]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2300|    175|    } else {
 2301|       |        /* Emit instruction with line number for return value */
 2302|    175|        if (s->v.Return.value != NULL) {
  ------------------
  |  Branch (2302:13): [True: 1, False: 174]
  ------------------
 2303|      1|            loc = LOC(s->v.Return.value);
  ------------------
  |  |   88|      1|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      1|    (_Py_SourceLocation){ \
  |  |  |  |   59|      1|               .lineno = (n)->lineno, \
  |  |  |  |   60|      1|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      1|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      1|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2304|      1|            ADDOP(c, loc, NOP);
  ------------------
  |  |  294|      1|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2305|      1|        }
 2306|    175|    }
 2307|    195|    if (s->v.Return.value == NULL || s->v.Return.value->lineno != s->lineno) {
  ------------------
  |  Branch (2307:9): [True: 174, False: 21]
  |  Branch (2307:38): [True: 0, False: 21]
  ------------------
 2308|    174|        loc = LOC(s);
  ------------------
  |  |   88|    174|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    174|    (_Py_SourceLocation){ \
  |  |  |  |   59|    174|               .lineno = (n)->lineno, \
  |  |  |  |   60|    174|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    174|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    174|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2309|    174|        ADDOP(c, loc, NOP);
  ------------------
  |  |  294|    174|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    174|    do {                    \
  |  |  |  |   52|    174|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 174]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    174|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 174]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2310|    174|    }
 2311|       |
 2312|    195|    RETURN_IF_ERROR(codegen_unwind_fblock_stack(c, &loc, preserve_tos, NULL));
  ------------------
  |  |   51|    195|    do {                    \
  |  |   52|    195|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 195]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    195|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 195]
  |  |  ------------------
  ------------------
 2313|    195|    if (s->v.Return.value == NULL) {
  ------------------
  |  Branch (2313:9): [True: 174, False: 21]
  ------------------
 2314|    174|        ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|    174|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    174|    do {                    \
  |  |  |  |   52|    174|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 174]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    174|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 174]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2315|    174|    }
 2316|     21|    else if (!preserve_tos) {
  ------------------
  |  Branch (2316:14): [True: 1, False: 20]
  ------------------
 2317|      1|        ADDOP_LOAD_CONST(c, loc, s->v.Return.value->v.Constant.value);
  ------------------
  |  |  311|      1|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2318|      1|    }
 2319|    195|    ADDOP(c, loc, RETURN_VALUE);
  ------------------
  |  |  294|    195|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    195|    do {                    \
  |  |  |  |   52|    195|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 195]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    195|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 195]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2320|       |
 2321|    195|    return SUCCESS;
  ------------------
  |  |   47|    195|#define SUCCESS 0
  ------------------
 2322|    195|}
codegen.c:codegen_unwind_fblock_stack:
  663|  2.57k|{
  664|  2.57k|    fblockinfo *top = _PyCompile_TopFBlock(c);
  665|  2.57k|    if (top == NULL) {
  ------------------
  |  Branch (665:9): [True: 229, False: 2.34k]
  ------------------
  666|    229|        return SUCCESS;
  ------------------
  |  |   47|    229|#define SUCCESS 0
  ------------------
  667|    229|    }
  668|  2.34k|    if (top->fb_type == COMPILE_FBLOCK_EXCEPTION_GROUP_HANDLER) {
  ------------------
  |  Branch (668:9): [True: 2, False: 2.34k]
  ------------------
  669|      2|        return _PyCompile_Error(
  670|      2|            c, *ploc, "'break', 'continue' and 'return' cannot appear in an except* block");
  671|      2|    }
  672|  2.34k|    if (loop != NULL && (top->fb_type == COMPILE_FBLOCK_WHILE_LOOP ||
  ------------------
  |  Branch (672:9): [True: 122, False: 2.22k]
  |  Branch (672:26): [True: 96, False: 26]
  ------------------
  673|     26|                         top->fb_type == COMPILE_FBLOCK_FOR_LOOP ||
  ------------------
  |  Branch (673:26): [True: 9, False: 17]
  ------------------
  674|    105|                         top->fb_type == COMPILE_FBLOCK_ASYNC_FOR_LOOP)) {
  ------------------
  |  Branch (674:26): [True: 0, False: 17]
  ------------------
  675|    105|        *loop = top;
  676|    105|        return SUCCESS;
  ------------------
  |  |   47|    105|#define SUCCESS 0
  ------------------
  677|    105|    }
  678|  2.24k|    fblockinfo copy = *top;
  679|  2.24k|    _PyCompile_PopFBlock(c, top->fb_type, top->fb_block);
  680|  2.24k|    RETURN_IF_ERROR(codegen_unwind_fblock(c, ploc, &copy, preserve_tos));
  ------------------
  |  |   51|  2.24k|    do {                    \
  |  |   52|  2.24k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 2.24k]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|  2.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.24k]
  |  |  ------------------
  ------------------
  681|  2.24k|    RETURN_IF_ERROR(codegen_unwind_fblock_stack(c, ploc, preserve_tos, loop));
  ------------------
  |  |   51|  2.24k|    do {                    \
  |  |   52|  2.24k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 2, False: 2.23k]
  |  |  ------------------
  |  |   53|      2|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      2|#define ERROR -1
  |  |  ------------------
  |  |   54|      2|        }                   \
  |  |   55|  2.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.23k]
  |  |  ------------------
  ------------------
  682|  2.23k|    RETURN_IF_ERROR(_PyCompile_PushFBlock(c, copy.fb_loc, copy.fb_type, copy.fb_block,
  ------------------
  |  |   51|  2.23k|    do {                    \
  |  |   52|  2.23k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.23k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.23k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.23k]
  |  |  ------------------
  ------------------
  683|  2.23k|                          copy.fb_exit, copy.fb_datum));
  684|  2.23k|    return SUCCESS;
  ------------------
  |  |   47|  2.23k|#define SUCCESS 0
  ------------------
  685|  2.23k|}
codegen.c:codegen_unwind_fblock:
  548|  2.24k|{
  549|  2.24k|    switch (info->fb_type) {
  ------------------
  |  Branch (549:13): [True: 2.24k, False: 0]
  ------------------
  550|      0|        case COMPILE_FBLOCK_WHILE_LOOP:
  ------------------
  |  Branch (550:9): [True: 0, False: 2.24k]
  ------------------
  551|      2|        case COMPILE_FBLOCK_EXCEPTION_HANDLER:
  ------------------
  |  Branch (551:9): [True: 2, False: 2.24k]
  ------------------
  552|      2|        case COMPILE_FBLOCK_EXCEPTION_GROUP_HANDLER:
  ------------------
  |  Branch (552:9): [True: 0, False: 2.24k]
  ------------------
  553|      2|        case COMPILE_FBLOCK_ASYNC_COMPREHENSION_GENERATOR:
  ------------------
  |  Branch (553:9): [True: 0, False: 2.24k]
  ------------------
  554|      2|        case COMPILE_FBLOCK_INLINED_COMPREHENSION:
  ------------------
  |  Branch (554:9): [True: 0, False: 2.24k]
  ------------------
  555|    196|        case COMPILE_FBLOCK_STOP_ITERATION:
  ------------------
  |  Branch (555:9): [True: 194, False: 2.04k]
  ------------------
  556|    196|            return SUCCESS;
  ------------------
  |  |   47|    196|#define SUCCESS 0
  ------------------
  557|       |
  558|      0|        case COMPILE_FBLOCK_FOR_LOOP:
  ------------------
  |  Branch (558:9): [True: 0, False: 2.24k]
  ------------------
  559|       |            /* Pop the iterator */
  560|      0|            if (preserve_tos) {
  ------------------
  |  Branch (560:17): [True: 0, False: 0]
  ------------------
  561|      0|                ADDOP_I(c, *ploc, SWAP, 3);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|      0|            }
  563|      0|            ADDOP(c, *ploc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|      0|            ADDOP(c, *ploc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  565|      0|            return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
  566|       |
  567|      0|        case COMPILE_FBLOCK_ASYNC_FOR_LOOP:
  ------------------
  |  Branch (567:9): [True: 0, False: 2.24k]
  ------------------
  568|       |            /* Pop the iterator */
  569|      0|            if (preserve_tos) {
  ------------------
  |  Branch (569:17): [True: 0, False: 0]
  ------------------
  570|      0|                ADDOP_I(c, *ploc, SWAP, 2);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|      0|            }
  572|      0|            ADDOP(c, *ploc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|      0|            return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
  574|       |
  575|      2|        case COMPILE_FBLOCK_TRY_EXCEPT:
  ------------------
  |  Branch (575:9): [True: 2, False: 2.24k]
  ------------------
  576|      2|            ADDOP(c, *ploc, POP_BLOCK);
  ------------------
  |  |  294|      2|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  577|      2|            return SUCCESS;
  ------------------
  |  |   47|      2|#define SUCCESS 0
  ------------------
  578|       |
  579|      9|        case COMPILE_FBLOCK_FINALLY_TRY:
  ------------------
  |  Branch (579:9): [True: 9, False: 2.23k]
  ------------------
  580|       |            /* This POP_BLOCK gets the line number of the unwinding statement */
  581|      9|            ADDOP(c, *ploc, POP_BLOCK);
  ------------------
  |  |  294|      9|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      9|    do {                    \
  |  |  |  |   52|      9|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      9|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  582|      9|            if (preserve_tos) {
  ------------------
  |  Branch (582:17): [True: 0, False: 9]
  ------------------
  583|      0|                RETURN_IF_ERROR(
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  584|      0|                    _PyCompile_PushFBlock(c, *ploc, COMPILE_FBLOCK_POP_VALUE,
  585|      0|                                          NO_LABEL, NO_LABEL, NULL));
  586|      0|            }
  587|       |            /* Emit the finally block */
  588|      9|            VISIT_SEQ(c, stmt, info->fb_datum);
  ------------------
  |  |  466|      9|    do {                                                                    \
  |  |  467|      9|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    101|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    101|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    202|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 101]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 93, False: 8]
  |  |  ------------------
  |  |  469|     93|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|     93|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     93|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|     93|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|     93|    do {                    \
  |  |  |  |   52|     93|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 92]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|     93|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 92]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|     93|        }                                                                   \
  |  |  472|      9|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
  589|      8|            if (preserve_tos) {
  ------------------
  |  Branch (589:17): [True: 0, False: 8]
  ------------------
  590|      0|                _PyCompile_PopFBlock(c, COMPILE_FBLOCK_POP_VALUE, NO_LABEL);
  ------------------
  |  |   57|      0|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
  591|      0|            }
  592|       |            /* The finally block should appear to execute after the
  593|       |             * statement causing the unwinding, so make the unwinding
  594|       |             * instruction artificial */
  595|      8|            *ploc = NO_LOCATION;
  596|      8|            return SUCCESS;
  ------------------
  |  |   47|      8|#define SUCCESS 0
  ------------------
  597|       |
  598|      0|        case COMPILE_FBLOCK_FINALLY_END:
  ------------------
  |  Branch (598:9): [True: 0, False: 2.24k]
  ------------------
  599|      0|            if (preserve_tos) {
  ------------------
  |  Branch (599:17): [True: 0, False: 0]
  ------------------
  600|      0|                ADDOP_I(c, *ploc, SWAP, 2);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  601|      0|            }
  602|      0|            ADDOP(c, *ploc, POP_TOP); /* exc_value */
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|      0|            if (preserve_tos) {
  ------------------
  |  Branch (603:17): [True: 0, False: 0]
  ------------------
  604|      0|                ADDOP_I(c, *ploc, SWAP, 2);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|      0|            }
  606|      0|            ADDOP(c, *ploc, POP_BLOCK);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  607|      0|            ADDOP(c, *ploc, POP_EXCEPT);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|      0|            return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
  609|       |
  610|     19|        case COMPILE_FBLOCK_WITH:
  ------------------
  |  Branch (610:9): [True: 19, False: 2.22k]
  ------------------
  611|  2.03k|        case COMPILE_FBLOCK_ASYNC_WITH:
  ------------------
  |  Branch (611:9): [True: 2.01k, False: 230]
  ------------------
  612|  2.03k|            *ploc = info->fb_loc;
  613|  2.03k|            ADDOP(c, *ploc, POP_BLOCK);
  ------------------
  |  |  294|  2.03k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  614|  2.03k|            if (preserve_tos) {
  ------------------
  |  Branch (614:17): [True: 57, False: 1.97k]
  ------------------
  615|     57|                ADDOP_I(c, *ploc, SWAP, 3);
  ------------------
  |  |  280|     57|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     57|    do {                    \
  |  |  |  |   52|     57|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 57]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     57|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 57]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  616|     57|                ADDOP_I(c, *ploc, SWAP, 2);
  ------------------
  |  |  280|     57|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     57|    do {                    \
  |  |  |  |   52|     57|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 57]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     57|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 57]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  617|     57|            }
  618|  2.03k|            RETURN_IF_ERROR(codegen_call_exit_with_nones(c, *ploc));
  ------------------
  |  |   51|  2.03k|    do {                    \
  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.03k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
  619|  2.03k|            if (info->fb_type == COMPILE_FBLOCK_ASYNC_WITH) {
  ------------------
  |  Branch (619:17): [True: 2.01k, False: 19]
  ------------------
  620|  2.01k|                ADDOP_I(c, *ploc, GET_AWAITABLE, 2);
  ------------------
  |  |  280|  2.01k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.01k|    do {                    \
  |  |  |  |   52|  2.01k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|  2.01k|                ADDOP(c, *ploc, PUSH_NULL);
  ------------------
  |  |  294|  2.01k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.01k|    do {                    \
  |  |  |  |   52|  2.01k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|  2.01k|                ADDOP_LOAD_CONST(c, *ploc, Py_None);
  ------------------
  |  |  311|  2.01k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.01k|    do {                    \
  |  |  |  |   52|  2.01k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|  2.01k|                ADD_YIELD_FROM(c, *ploc, 1);
  ------------------
  |  |  447|  2.01k|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|  2.01k|    do {                    \
  |  |  |  |   52|  2.01k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|  2.01k|            }
  625|  2.03k|            ADDOP(c, *ploc, POP_TOP);
  ------------------
  |  |  294|  2.03k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  626|       |            /* The exit block should appear to execute after the
  627|       |             * statement causing the unwinding, so make the unwinding
  628|       |             * instruction artificial */
  629|  2.03k|            *ploc = NO_LOCATION;
  630|  2.03k|            return SUCCESS;
  ------------------
  |  |   47|  2.03k|#define SUCCESS 0
  ------------------
  631|       |
  632|      4|        case COMPILE_FBLOCK_HANDLER_CLEANUP: {
  ------------------
  |  Branch (632:9): [True: 4, False: 2.23k]
  ------------------
  633|      4|            if (info->fb_datum) {
  ------------------
  |  Branch (633:17): [True: 0, False: 4]
  ------------------
  634|      0|                ADDOP(c, *ploc, POP_BLOCK);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  635|      0|            }
  636|      4|            if (preserve_tos) {
  ------------------
  |  Branch (636:17): [True: 0, False: 4]
  ------------------
  637|      0|                ADDOP_I(c, *ploc, SWAP, 2);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  638|      0|            }
  639|      4|            ADDOP(c, *ploc, POP_BLOCK);
  ------------------
  |  |  294|      4|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      4|    do {                    \
  |  |  |  |   52|      4|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  640|      4|            ADDOP(c, *ploc, POP_EXCEPT);
  ------------------
  |  |  294|      4|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      4|    do {                    \
  |  |  |  |   52|      4|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|      4|            if (info->fb_datum) {
  ------------------
  |  Branch (641:17): [True: 0, False: 4]
  ------------------
  642|      0|                ADDOP_LOAD_CONST(c, *ploc, Py_None);
  ------------------
  |  |  311|      0|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  643|      0|                RETURN_IF_ERROR(codegen_nameop(c, *ploc, info->fb_datum, Store));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  644|      0|                RETURN_IF_ERROR(codegen_nameop(c, *ploc, info->fb_datum, Del));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  645|      0|            }
  646|      4|            return SUCCESS;
  ------------------
  |  |   47|      4|#define SUCCESS 0
  ------------------
  647|      4|        }
  648|      0|        case COMPILE_FBLOCK_POP_VALUE: {
  ------------------
  |  Branch (648:9): [True: 0, False: 2.24k]
  ------------------
  649|      0|            if (preserve_tos) {
  ------------------
  |  Branch (649:17): [True: 0, False: 0]
  ------------------
  650|      0|                ADDOP_I(c, *ploc, SWAP, 2);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  651|      0|            }
  652|      0|            ADDOP(c, *ploc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|      0|            return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
  654|      0|        }
  655|  2.24k|    }
  656|      0|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  657|  2.24k|}
codegen.c:codegen_call_exit_with_nones:
  491|  13.5k|{
  492|  13.5k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  13.5k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  13.5k|    do {                    \
  |  |  |  |   52|  13.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  13.5k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  13.5k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  13.5k|    do {                    \
  |  |  |  |   52|  13.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  494|  13.5k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  13.5k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  13.5k|    do {                    \
  |  |  |  |   52|  13.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  13.5k|    ADDOP_I(c, loc, CALL, 3);
  ------------------
  |  |  280|  13.5k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  13.5k|    do {                    \
  |  |  |  |   52|  13.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  496|  13.5k|    return SUCCESS;
  ------------------
  |  |   47|  13.5k|#define SUCCESS 0
  ------------------
  497|  13.5k|}
codegen.c:codegen_add_yield_from:
  501|  35.9k|{
  502|  35.9k|    NEW_JUMP_TARGET_LABEL(c, send);
  ------------------
  |  |   94|  35.9k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  35.9k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  35.9k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  35.9k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  35.9k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 35.9k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
  503|  35.9k|    NEW_JUMP_TARGET_LABEL(c, fail);
  ------------------
  |  |   94|  35.9k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  35.9k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  35.9k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  35.9k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  35.9k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 35.9k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
  504|  35.9k|    NEW_JUMP_TARGET_LABEL(c, exit);
  ------------------
  |  |   94|  35.9k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  35.9k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  35.9k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  35.9k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  35.9k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 35.9k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
  505|       |
  506|  35.9k|    USE_LABEL(c, send);
  ------------------
  |  |  100|  35.9k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|  35.9k|    ADDOP_JUMP(c, loc, SEND, exit);
  ------------------
  |  |  435|  35.9k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  508|       |    // Set up a virtual try/except to handle when StopIteration is raised during
  509|       |    // a close or throw call. The only way YIELD_VALUE raises if they do!
  510|  35.9k|    ADDOP_JUMP(c, loc, SETUP_FINALLY, fail);
  ------------------
  |  |  435|  35.9k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|  35.9k|    ADDOP_I(c, loc, YIELD_VALUE, 1);
  ------------------
  |  |  280|  35.9k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  512|  35.9k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  35.9k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|  35.9k|    ADDOP_I(c, loc, RESUME, await ? RESUME_AFTER_AWAIT : RESUME_AFTER_YIELD_FROM);
  ------------------
  |  |  280|  35.9k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  71.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  |  Branch (52:14): [True: 35.9k, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  35.9k|    ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send);
  ------------------
  |  |  435|  35.9k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|       |
  516|  35.9k|    USE_LABEL(c, fail);
  ------------------
  |  |  100|  35.9k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|  35.9k|    ADDOP(c, loc, CLEANUP_THROW);
  ------------------
  |  |  294|  35.9k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|       |
  519|  35.9k|    USE_LABEL(c, exit);
  ------------------
  |  |  100|  35.9k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|  35.9k|    ADDOP(c, loc, END_SEND);
  ------------------
  |  |  294|  35.9k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  35.9k|    do {                    \
  |  |  |  |   52|  35.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 35.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  35.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 35.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|  35.9k|    return SUCCESS;
  ------------------
  |  |   47|  35.9k|#define SUCCESS 0
  ------------------
  522|  35.9k|}
codegen.c:codegen_augassign:
 5669|  6.50k|{
 5670|  6.50k|    assert(s->kind == AugAssign_kind);
  ------------------
  |  Branch (5670:5): [True: 6.50k, False: 0]
  ------------------
 5671|  6.50k|    expr_ty e = s->v.AugAssign.target;
 5672|       |
 5673|  6.50k|    location loc = LOC(e);
  ------------------
  |  |   88|  6.50k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  6.50k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  6.50k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  6.50k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  6.50k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  6.50k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5674|       |
 5675|  6.50k|    switch (e->kind) {
 5676|  1.50k|    case Attribute_kind:
  ------------------
  |  Branch (5676:5): [True: 1.50k, False: 4.99k]
  ------------------
 5677|  1.50k|        VISIT(c, expr, e->v.Attribute.value);
  ------------------
  |  |  460|  1.50k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.50k|    do {                    \
  |  |  |  |   52|  1.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|  1.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.50k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5678|  1.50k|        ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|  1.50k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.50k|    do {                    \
  |  |  |  |   52|  1.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.50k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5679|  1.50k|        loc = update_start_location_to_match_attr(c, loc, e);
 5680|  1.50k|        ADDOP_NAME(c, loc, LOAD_ATTR, e->v.Attribute.attr, names);
  ------------------
  |  |  419|  1.50k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  1.50k|    do {                    \
  |  |  |  |   52|  1.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.50k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5681|  1.50k|        break;
 5682|  1.50k|    case Subscript_kind:
  ------------------
  |  Branch (5682:5): [True: 353, False: 6.15k]
  ------------------
 5683|    353|        VISIT(c, expr, e->v.Subscript.value);
  ------------------
  |  |  460|    353|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    353|    do {                    \
  |  |  |  |   52|    353|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 353]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    353|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 353]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5684|    353|        if (should_apply_two_element_slice_optimization(e->v.Subscript.slice)) {
  ------------------
  |  Branch (5684:13): [True: 216, False: 137]
  ------------------
 5685|    216|            RETURN_IF_ERROR(codegen_slice_two_parts(c, e->v.Subscript.slice));
  ------------------
  |  |   51|    216|    do {                    \
  |  |   52|    216|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 215]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|    216|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  ------------------
  ------------------
 5686|    215|            ADDOP_I(c, loc, COPY, 3);
  ------------------
  |  |  280|    215|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5687|    215|            ADDOP_I(c, loc, COPY, 3);
  ------------------
  |  |  280|    215|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5688|    215|            ADDOP_I(c, loc, COPY, 3);
  ------------------
  |  |  280|    215|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5689|    215|            ADDOP(c, loc, BINARY_SLICE);
  ------------------
  |  |  294|    215|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5690|    215|        }
 5691|    137|        else {
 5692|    137|            VISIT(c, expr, e->v.Subscript.slice);
  ------------------
  |  |  460|    137|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    137|    do {                    \
  |  |  |  |   52|    137|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    137|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5693|    136|            ADDOP_I(c, loc, COPY, 2);
  ------------------
  |  |  280|    136|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    136|    do {                    \
  |  |  |  |   52|    136|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5694|    136|            ADDOP_I(c, loc, COPY, 2);
  ------------------
  |  |  280|    136|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    136|    do {                    \
  |  |  |  |   52|    136|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5695|    136|            ADDOP_I(c, loc, BINARY_OP, NB_SUBSCR);
  ------------------
  |  |  280|    136|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    136|    do {                    \
  |  |  |  |   52|    136|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5696|    136|        }
 5697|    351|        break;
 5698|  4.64k|    case Name_kind:
  ------------------
  |  Branch (5698:5): [True: 4.64k, False: 1.85k]
  ------------------
 5699|  4.64k|        RETURN_IF_ERROR(codegen_nameop(c, loc, e->v.Name.id, Load));
  ------------------
  |  |   51|  4.64k|    do {                    \
  |  |   52|  4.64k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 4.64k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  4.64k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 4.64k]
  |  |  ------------------
  ------------------
 5700|  4.64k|        break;
 5701|  4.64k|    default:
  ------------------
  |  Branch (5701:5): [True: 0, False: 6.50k]
  ------------------
 5702|      0|        PyErr_Format(PyExc_SystemError,
 5703|      0|            "invalid node type (%d) for augmented assignment",
 5704|      0|            e->kind);
 5705|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 5706|  6.50k|    }
 5707|       |
 5708|  6.50k|    loc = LOC(s);
  ------------------
  |  |   88|  6.50k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  6.50k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  6.50k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  6.50k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  6.50k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  6.50k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5709|       |
 5710|  6.50k|    VISIT(c, expr, s->v.AugAssign.value);
  ------------------
  |  |  460|  6.50k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  6.50k|    do {                    \
  |  |  |  |   52|  6.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 11, False: 6.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|     11|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     11|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     11|        }                   \
  |  |  |  |   55|  6.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5711|  6.49k|    ADDOP_INPLACE(c, loc, s->v.AugAssign.op);
  ------------------
  |  |  444|  6.49k|    RETURN_IF_ERROR(addop_binary((C), (LOC), (BINOP), true))
  |  |  ------------------
  |  |  |  |   51|  6.49k|    do {                    \
  |  |  |  |   52|  6.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5712|       |
 5713|  6.49k|    loc = LOC(e);
  ------------------
  |  |   88|  6.49k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  6.49k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  6.49k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  6.49k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  6.49k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  6.49k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5714|       |
 5715|  6.49k|    switch (e->kind) {
 5716|  1.50k|    case Attribute_kind:
  ------------------
  |  Branch (5716:5): [True: 1.50k, False: 4.98k]
  ------------------
 5717|  1.50k|        loc = update_start_location_to_match_attr(c, loc, e);
 5718|  1.50k|        ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|  1.50k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.50k|    do {                    \
  |  |  |  |   52|  1.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.50k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5719|  1.50k|        ADDOP_NAME(c, loc, STORE_ATTR, e->v.Attribute.attr, names);
  ------------------
  |  |  419|  1.50k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  1.50k|    do {                    \
  |  |  |  |   52|  1.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.50k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5720|  1.50k|        break;
 5721|  1.50k|    case Subscript_kind:
  ------------------
  |  Branch (5721:5): [True: 351, False: 6.13k]
  ------------------
 5722|    351|        if (should_apply_two_element_slice_optimization(e->v.Subscript.slice)) {
  ------------------
  |  Branch (5722:13): [True: 215, False: 136]
  ------------------
 5723|    215|            ADDOP_I(c, loc, SWAP, 4);
  ------------------
  |  |  280|    215|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5724|    215|            ADDOP_I(c, loc, SWAP, 3);
  ------------------
  |  |  280|    215|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5725|    215|            ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|    215|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5726|    215|            ADDOP(c, loc, STORE_SLICE);
  ------------------
  |  |  294|    215|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    215|    do {                    \
  |  |  |  |   52|    215|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    215|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5727|    215|        }
 5728|    136|        else {
 5729|    136|            ADDOP_I(c, loc, SWAP, 3);
  ------------------
  |  |  280|    136|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    136|    do {                    \
  |  |  |  |   52|    136|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5730|    136|            ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|    136|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    136|    do {                    \
  |  |  |  |   52|    136|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5731|    136|            ADDOP(c, loc, STORE_SUBSCR);
  ------------------
  |  |  294|    136|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    136|    do {                    \
  |  |  |  |   52|    136|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5732|    136|        }
 5733|    351|        break;
 5734|  4.63k|    case Name_kind:
  ------------------
  |  Branch (5734:5): [True: 4.63k, False: 1.85k]
  ------------------
 5735|  4.63k|        return codegen_nameop(c, loc, e->v.Name.id, Store);
 5736|      0|    default:
  ------------------
  |  Branch (5736:5): [True: 0, False: 6.49k]
  ------------------
 5737|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 5738|  6.49k|    }
 5739|  1.85k|    return SUCCESS;
  ------------------
  |  |   47|  1.85k|#define SUCCESS 0
  ------------------
 5740|  6.49k|}
codegen.c:update_start_location_to_match_attr:
 3988|  19.1k|{
 3989|  19.1k|    assert(attr->kind == Attribute_kind);
  ------------------
  |  Branch (3989:5): [True: 19.1k, False: 0]
  ------------------
 3990|  19.1k|    if (loc.lineno != attr->end_lineno) {
  ------------------
  |  Branch (3990:9): [True: 1.66k, False: 17.5k]
  ------------------
 3991|  1.66k|        loc.lineno = attr->end_lineno;
 3992|  1.66k|        int len = (int)PyUnicode_GET_LENGTH(attr->v.Attribute.attr);
  ------------------
  |  |  299|  1.66k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.66k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3993|  1.66k|        if (len <= attr->end_col_offset) {
  ------------------
  |  Branch (3993:13): [True: 1.66k, False: 0]
  ------------------
 3994|  1.66k|            loc.col_offset = attr->end_col_offset - len;
 3995|  1.66k|        }
 3996|      0|        else {
 3997|       |            // GH-94694: Somebody's compiling weird ASTs. Just drop the columns:
 3998|      0|            loc.col_offset = -1;
 3999|      0|            loc.end_col_offset = -1;
 4000|      0|        }
 4001|       |        // Make sure the end position still follows the start position, even for
 4002|       |        // weird ASTs:
 4003|  1.66k|        loc.end_lineno = Py_MAX(loc.lineno, loc.end_lineno);
  ------------------
  |  |  126|  1.66k|       __extension__ \
  |  |  127|  1.66k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  1.66k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  1.66k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  1.66k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  1.66k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 1.66k]
  |  |  ------------------
  ------------------
 4004|  1.66k|        if (loc.lineno == loc.end_lineno) {
  ------------------
  |  Branch (4004:13): [True: 1.09k, False: 569]
  ------------------
 4005|  1.09k|            loc.end_col_offset = Py_MAX(loc.col_offset, loc.end_col_offset);
  ------------------
  |  |  126|  1.09k|       __extension__ \
  |  |  127|  1.09k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  1.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  1.09k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  1.09k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  1.09k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 0, False: 1.09k]
  |  |  ------------------
  ------------------
 4006|  1.09k|        }
 4007|  1.66k|    }
 4008|  19.1k|    return loc;
 4009|  19.1k|}
codegen.c:codegen_addop_name:
  387|  54.4k|{
  388|  54.4k|    int shift = 0, low = 0;
  389|  54.4k|    if (opcode == LOAD_ATTR) {
  ------------------
  |  |   89|  54.4k|#define LOAD_ATTR                               76
  ------------------
  |  Branch (389:9): [True: 13.2k, False: 41.1k]
  ------------------
  390|  13.2k|        shift = 1;
  391|  13.2k|    }
  392|  54.4k|    if (opcode == LOAD_METHOD) {
  ------------------
  |  |  362|  54.4k|#define LOAD_METHOD -1
  ------------------
  |  Branch (392:9): [True: 1.15k, False: 53.2k]
  ------------------
  393|  1.15k|        opcode = LOAD_ATTR;
  ------------------
  |  |   89|  1.15k|#define LOAD_ATTR                               76
  ------------------
  394|  1.15k|        shift = 1;
  395|  1.15k|        low = 1;
  396|  1.15k|    }
  397|  54.4k|    if (opcode == LOAD_SUPER_ATTR) {
  ------------------
  |  |  105|  54.4k|#define LOAD_SUPER_ATTR                         92
  ------------------
  |  Branch (397:9): [True: 499, False: 53.9k]
  ------------------
  398|    499|        shift = 2;
  399|    499|        low = 2;
  400|    499|    }
  401|  54.4k|    if (opcode == LOAD_SUPER_METHOD) {
  ------------------
  |  |  363|  54.4k|#define LOAD_SUPER_METHOD -2
  ------------------
  |  Branch (401:9): [True: 24, False: 54.3k]
  ------------------
  402|     24|        opcode = LOAD_SUPER_ATTR;
  ------------------
  |  |  105|     24|#define LOAD_SUPER_ATTR                         92
  ------------------
  403|     24|        shift = 2;
  404|     24|        low = 3;
  405|     24|    }
  406|  54.4k|    if (opcode == LOAD_ZERO_SUPER_ATTR) {
  ------------------
  |  |  364|  54.4k|#define LOAD_ZERO_SUPER_ATTR -3
  ------------------
  |  Branch (406:9): [True: 0, False: 54.4k]
  ------------------
  407|      0|        opcode = LOAD_SUPER_ATTR;
  ------------------
  |  |  105|      0|#define LOAD_SUPER_ATTR                         92
  ------------------
  408|      0|        shift = 2;
  409|      0|    }
  410|  54.4k|    if (opcode == LOAD_ZERO_SUPER_METHOD) {
  ------------------
  |  |  365|  54.4k|#define LOAD_ZERO_SUPER_METHOD -4
  ------------------
  |  Branch (410:9): [True: 0, False: 54.4k]
  ------------------
  411|      0|        opcode = LOAD_SUPER_ATTR;
  ------------------
  |  |  105|      0|#define LOAD_SUPER_ATTR                         92
  ------------------
  412|      0|        shift = 2;
  413|      0|        low = 1;
  414|      0|    }
  415|  54.4k|    return codegen_addop_name_custom(c, loc, opcode, dict, o, shift, low);
  416|  54.4k|}
codegen.c:codegen_addop_name_custom:
  370|  64.9k|{
  371|  64.9k|    PyObject *mangled = _PyCompile_MaybeMangle(c, o);
  372|  64.9k|    if (!mangled) {
  ------------------
  |  Branch (372:9): [True: 0, False: 64.9k]
  ------------------
  373|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  374|      0|    }
  375|  64.9k|    Py_ssize_t arg = _PyCompile_DictAddObj(dict, mangled);
  376|  64.9k|    Py_DECREF(mangled);
  ------------------
  |  |  430|  64.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  64.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  64.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|  64.9k|    if (arg < 0) {
  ------------------
  |  Branch (377:9): [True: 0, False: 64.9k]
  ------------------
  378|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  379|      0|    }
  380|  64.9k|    ADDOP_I(c, loc, opcode, (arg << shift) | low);
  ------------------
  |  |  280|  64.9k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  64.9k|    do {                    \
  |  |  |  |   52|  64.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 64.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  64.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 64.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|  64.9k|    return SUCCESS;
  ------------------
  |  |   47|  64.9k|#define SUCCESS 0
  ------------------
  382|  64.9k|}
codegen.c:should_apply_two_element_slice_optimization:
 5661|  10.8k|{
 5662|  10.8k|    return !is_constant_slice(s) &&
  ------------------
  |  Branch (5662:12): [True: 6.59k, False: 4.29k]
  ------------------
 5663|  6.59k|           s->kind == Slice_kind &&
  ------------------
  |  Branch (5663:12): [True: 973, False: 5.62k]
  ------------------
 5664|    973|           s->v.Slice.step == NULL;
  ------------------
  |  Branch (5664:12): [True: 850, False: 123]
  ------------------
 5665|  10.8k|}
codegen.c:is_constant_slice:
 5649|  20.8k|{
 5650|  20.8k|    return s->kind == Slice_kind &&
  ------------------
  |  Branch (5650:12): [True: 15.2k, False: 5.62k]
  ------------------
 5651|  15.2k|        (s->v.Slice.lower == NULL ||
  ------------------
  |  Branch (5651:10): [True: 4.49k, False: 10.7k]
  ------------------
 5652|  10.7k|         s->v.Slice.lower->kind == Constant_kind) &&
  ------------------
  |  Branch (5652:10): [True: 5.66k, False: 5.08k]
  ------------------
 5653|  10.1k|        (s->v.Slice.upper == NULL ||
  ------------------
  |  Branch (5653:10): [True: 6.94k, False: 3.21k]
  ------------------
 5654|  3.21k|         s->v.Slice.upper->kind == Constant_kind) &&
  ------------------
  |  Branch (5654:10): [True: 2.80k, False: 416]
  ------------------
 5655|  9.74k|        (s->v.Slice.step == NULL ||
  ------------------
  |  Branch (5655:10): [True: 5.87k, False: 3.86k]
  ------------------
 5656|  3.86k|         s->v.Slice.step->kind == Constant_kind);
  ------------------
  |  Branch (5656:10): [True: 3.41k, False: 456]
  ------------------
 5657|  20.8k|}
codegen.c:codegen_slice_two_parts:
 5893|  5.61k|{
 5894|  5.61k|    if (s->v.Slice.lower) {
  ------------------
  |  Branch (5894:9): [True: 4.93k, False: 674]
  ------------------
 5895|  4.93k|        VISIT(c, expr, s->v.Slice.lower);
  ------------------
  |  |  460|  4.93k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  4.93k|    do {                    \
  |  |  |  |   52|  4.93k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 10, False: 4.92k]
  |  |  |  |  ------------------
  |  |  |  |   53|     10|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     10|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     10|        }                   \
  |  |  |  |   55|  4.93k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.92k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5896|  4.93k|    }
 5897|    674|    else {
 5898|    674|        ADDOP_LOAD_CONST(c, LOC(s), Py_None);
  ------------------
  |  |  311|    674|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    674|    do {                    \
  |  |  |  |   52|    674|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 674]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    674|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 674]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5899|    674|    }
 5900|       |
 5901|  5.60k|    if (s->v.Slice.upper) {
  ------------------
  |  Branch (5901:9): [True: 2.26k, False: 3.33k]
  ------------------
 5902|  2.26k|        VISIT(c, expr, s->v.Slice.upper);
  ------------------
  |  |  460|  2.26k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 5, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      5|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      5|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      5|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5903|  2.26k|    }
 5904|  3.33k|    else {
 5905|  3.33k|        ADDOP_LOAD_CONST(c, LOC(s), Py_None);
  ------------------
  |  |  311|  3.33k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  3.33k|    do {                    \
  |  |  |  |   52|  3.33k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.33k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.33k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.33k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5906|  3.33k|    }
 5907|       |
 5908|  5.59k|    return 0;
 5909|  5.60k|}
codegen.c:addop_binary:
 3246|   799k|{
 3247|   799k|    int oparg;
 3248|   799k|    switch (binop) {
 3249|   128k|        case Add:
  ------------------
  |  Branch (3249:9): [True: 128k, False: 671k]
  ------------------
 3250|   128k|            oparg = inplace ? NB_INPLACE_ADD : NB_ADD;
  ------------------
  |  |   23|  1.86k|#define NB_INPLACE_ADD                          13
  ------------------
                          oparg = inplace ? NB_INPLACE_ADD : NB_ADD;
  ------------------
  |  |   10|   254k|#define NB_ADD                                   0
  ------------------
  |  Branch (3250:21): [True: 1.86k, False: 126k]
  ------------------
 3251|   128k|            break;
 3252|   145k|        case Sub:
  ------------------
  |  Branch (3252:9): [True: 145k, False: 654k]
  ------------------
 3253|   145k|            oparg = inplace ? NB_INPLACE_SUBTRACT : NB_SUBTRACT;
  ------------------
  |  |   33|      6|#define NB_INPLACE_SUBTRACT                     23
  ------------------
                          oparg = inplace ? NB_INPLACE_SUBTRACT : NB_SUBTRACT;
  ------------------
  |  |   20|   290k|#define NB_SUBTRACT                             10
  ------------------
  |  Branch (3253:21): [True: 6, False: 145k]
  ------------------
 3254|   145k|            break;
 3255|   164k|        case Mult:
  ------------------
  |  Branch (3255:9): [True: 164k, False: 634k]
  ------------------
 3256|   164k|            oparg = inplace ? NB_INPLACE_MULTIPLY : NB_MULTIPLY;
  ------------------
  |  |   28|  2.05k|#define NB_INPLACE_MULTIPLY                     18
  ------------------
                          oparg = inplace ? NB_INPLACE_MULTIPLY : NB_MULTIPLY;
  ------------------
  |  |   15|   327k|#define NB_MULTIPLY                              5
  ------------------
  |  Branch (3256:21): [True: 2.05k, False: 162k]
  ------------------
 3257|   164k|            break;
 3258|  1.11k|        case MatMult:
  ------------------
  |  Branch (3258:9): [True: 1.11k, False: 798k]
  ------------------
 3259|  1.11k|            oparg = inplace ? NB_INPLACE_MATRIX_MULTIPLY : NB_MATRIX_MULTIPLY;
  ------------------
  |  |   27|     82|#define NB_INPLACE_MATRIX_MULTIPLY              17
  ------------------
                          oparg = inplace ? NB_INPLACE_MATRIX_MULTIPLY : NB_MATRIX_MULTIPLY;
  ------------------
  |  |   14|  2.15k|#define NB_MATRIX_MULTIPLY                       4
  ------------------
  |  Branch (3259:21): [True: 82, False: 1.03k]
  ------------------
 3260|  1.11k|            break;
 3261|  84.9k|        case Div:
  ------------------
  |  Branch (3261:9): [True: 84.9k, False: 714k]
  ------------------
 3262|  84.9k|            oparg = inplace ? NB_INPLACE_TRUE_DIVIDE : NB_TRUE_DIVIDE;
  ------------------
  |  |   34|  1.14k|#define NB_INPLACE_TRUE_DIVIDE                  24
  ------------------
                          oparg = inplace ? NB_INPLACE_TRUE_DIVIDE : NB_TRUE_DIVIDE;
  ------------------
  |  |   21|   168k|#define NB_TRUE_DIVIDE                          11
  ------------------
  |  Branch (3262:21): [True: 1.14k, False: 83.8k]
  ------------------
 3263|  84.9k|            break;
 3264|  51.4k|        case Mod:
  ------------------
  |  Branch (3264:9): [True: 51.4k, False: 748k]
  ------------------
 3265|  51.4k|            oparg = inplace ? NB_INPLACE_REMAINDER : NB_REMAINDER;
  ------------------
  |  |   29|    225|#define NB_INPLACE_REMAINDER                    19
  ------------------
                          oparg = inplace ? NB_INPLACE_REMAINDER : NB_REMAINDER;
  ------------------
  |  |   16|   102k|#define NB_REMAINDER                             6
  ------------------
  |  Branch (3265:21): [True: 225, False: 51.2k]
  ------------------
 3266|  51.4k|            break;
 3267|   122k|        case Pow:
  ------------------
  |  Branch (3267:9): [True: 122k, False: 677k]
  ------------------
 3268|   122k|            oparg = inplace ? NB_INPLACE_POWER : NB_POWER;
  ------------------
  |  |   31|     16|#define NB_INPLACE_POWER                        21
  ------------------
                          oparg = inplace ? NB_INPLACE_POWER : NB_POWER;
  ------------------
  |  |   18|   245k|#define NB_POWER                                 8
  ------------------
  |  Branch (3268:21): [True: 16, False: 122k]
  ------------------
 3269|   122k|            break;
 3270|  12.0k|        case LShift:
  ------------------
  |  Branch (3270:9): [True: 12.0k, False: 787k]
  ------------------
 3271|  12.0k|            oparg = inplace ? NB_INPLACE_LSHIFT : NB_LSHIFT;
  ------------------
  |  |   26|     37|#define NB_INPLACE_LSHIFT                       16
  ------------------
                          oparg = inplace ? NB_INPLACE_LSHIFT : NB_LSHIFT;
  ------------------
  |  |   13|  23.9k|#define NB_LSHIFT                                3
  ------------------
  |  Branch (3271:21): [True: 37, False: 11.9k]
  ------------------
 3272|  12.0k|            break;
 3273|  16.8k|        case RShift:
  ------------------
  |  Branch (3273:9): [True: 16.8k, False: 782k]
  ------------------
 3274|  16.8k|            oparg = inplace ? NB_INPLACE_RSHIFT : NB_RSHIFT;
  ------------------
  |  |   32|      6|#define NB_INPLACE_RSHIFT                       22
  ------------------
                          oparg = inplace ? NB_INPLACE_RSHIFT : NB_RSHIFT;
  ------------------
  |  |   19|  33.6k|#define NB_RSHIFT                                9
  ------------------
  |  Branch (3274:21): [True: 6, False: 16.8k]
  ------------------
 3275|  16.8k|            break;
 3276|  10.6k|        case BitOr:
  ------------------
  |  Branch (3276:9): [True: 10.6k, False: 789k]
  ------------------
 3277|  10.6k|            oparg = inplace ? NB_INPLACE_OR : NB_OR;
  ------------------
  |  |   30|     23|#define NB_INPLACE_OR                           20
  ------------------
                          oparg = inplace ? NB_INPLACE_OR : NB_OR;
  ------------------
  |  |   17|  21.3k|#define NB_OR                                    7
  ------------------
  |  Branch (3277:21): [True: 23, False: 10.6k]
  ------------------
 3278|  10.6k|            break;
 3279|  13.8k|        case BitXor:
  ------------------
  |  Branch (3279:9): [True: 13.8k, False: 785k]
  ------------------
 3280|  13.8k|            oparg = inplace ? NB_INPLACE_XOR : NB_XOR;
  ------------------
  |  |   35|    247|#define NB_INPLACE_XOR                          25
  ------------------
                          oparg = inplace ? NB_INPLACE_XOR : NB_XOR;
  ------------------
  |  |   22|  27.5k|#define NB_XOR                                  12
  ------------------
  |  Branch (3280:21): [True: 247, False: 13.6k]
  ------------------
 3281|  13.8k|            break;
 3282|  19.6k|        case BitAnd:
  ------------------
  |  Branch (3282:9): [True: 19.6k, False: 780k]
  ------------------
 3283|  19.6k|            oparg = inplace ? NB_INPLACE_AND : NB_AND;
  ------------------
  |  |   24|    601|#define NB_INPLACE_AND                          14
  ------------------
                          oparg = inplace ? NB_INPLACE_AND : NB_AND;
  ------------------
  |  |   11|  38.6k|#define NB_AND                                   1
  ------------------
  |  Branch (3283:21): [True: 601, False: 19.0k]
  ------------------
 3284|  19.6k|            break;
 3285|  28.1k|        case FloorDiv:
  ------------------
  |  Branch (3285:9): [True: 28.1k, False: 771k]
  ------------------
 3286|  28.1k|            oparg = inplace ? NB_INPLACE_FLOOR_DIVIDE : NB_FLOOR_DIVIDE;
  ------------------
  |  |   25|    191|#define NB_INPLACE_FLOOR_DIVIDE                 15
  ------------------
                          oparg = inplace ? NB_INPLACE_FLOOR_DIVIDE : NB_FLOOR_DIVIDE;
  ------------------
  |  |   12|  56.1k|#define NB_FLOOR_DIVIDE                          2
  ------------------
  |  Branch (3286:21): [True: 191, False: 27.9k]
  ------------------
 3287|  28.1k|            break;
 3288|      0|        default:
  ------------------
  |  Branch (3288:9): [True: 0, False: 799k]
  ------------------
 3289|      0|            PyErr_Format(PyExc_SystemError, "%s op %d should not be possible",
 3290|      0|                         inplace ? "inplace" : "binary", binop);
  ------------------
  |  Branch (3290:26): [True: 0, False: 0]
  ------------------
 3291|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 3292|   799k|    }
 3293|   799k|    ADDOP_I(c, loc, BINARY_OP, oparg);
  ------------------
  |  |  280|   799k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|   799k|    do {                    \
  |  |  |  |   52|   799k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 799k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   799k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 799k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3294|   799k|    return SUCCESS;
  ------------------
  |  |   47|   799k|#define SUCCESS 0
  ------------------
 3295|   799k|}
codegen.c:codegen_annassign:
 5782|  25.0k|{
 5783|  25.0k|    location loc = LOC(s);
  ------------------
  |  |   88|  25.0k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  25.0k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  25.0k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  25.0k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  25.0k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  25.0k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5784|  25.0k|    expr_ty targ = s->v.AnnAssign.target;
 5785|  25.0k|    bool future_annotations = FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS;
  ------------------
  |  |   69|  25.0k|#define FUTURE_FEATURES(C) _PyCompile_FutureFeatures(C)
  ------------------
                  bool future_annotations = FUTURE_FEATURES(c) & CO_FUTURE_ANNOTATIONS;
  ------------------
  |  |  147|  25.0k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
 5786|  25.0k|    PyObject *mangled;
 5787|       |
 5788|  25.0k|    assert(s->kind == AnnAssign_kind);
  ------------------
  |  Branch (5788:5): [True: 25.0k, False: 0]
  ------------------
 5789|       |
 5790|       |    /* We perform the actual assignment first. */
 5791|  25.0k|    if (s->v.AnnAssign.value) {
  ------------------
  |  Branch (5791:9): [True: 433, False: 24.5k]
  ------------------
 5792|    433|        VISIT(c, expr, s->v.AnnAssign.value);
  ------------------
  |  |  460|    433|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    433|    do {                    \
  |  |  |  |   52|    433|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 11, False: 422]
  |  |  |  |  ------------------
  |  |  |  |   53|     11|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     11|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     11|        }                   \
  |  |  |  |   55|    433|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 422]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5793|    422|        VISIT(c, expr, targ);
  ------------------
  |  |  460|    422|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    422|    do {                    \
  |  |  |  |   52|    422|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 420]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|    422|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 420]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5794|    422|    }
 5795|  25.0k|    switch (targ->kind) {
 5796|  23.9k|    case Name_kind:
  ------------------
  |  Branch (5796:5): [True: 23.9k, False: 1.09k]
  ------------------
 5797|       |        /* If we have a simple name in a module or class, store annotation. */
 5798|  23.9k|        if (s->v.AnnAssign.simple &&
  ------------------
  |  Branch (5798:13): [True: 23.8k, False: 96]
  ------------------
 5799|  23.8k|            (SCOPE_TYPE(c) == COMPILE_SCOPE_MODULE ||
  ------------------
  |  |   74|  23.8k|#define SCOPE_TYPE(C) _PyCompile_ScopeType(C)
  ------------------
  |  Branch (5799:14): [True: 5.70k, False: 18.1k]
  ------------------
 5800|  20.5k|             SCOPE_TYPE(c) == COMPILE_SCOPE_CLASS)) {
  ------------------
  |  |   74|  18.1k|#define SCOPE_TYPE(C) _PyCompile_ScopeType(C)
  ------------------
  |  Branch (5800:14): [True: 14.8k, False: 3.25k]
  ------------------
 5801|  20.5k|            if (future_annotations) {
  ------------------
  |  Branch (5801:17): [True: 4.05k, False: 16.5k]
  ------------------
 5802|  4.05k|                VISIT(c, annexpr, s->v.AnnAssign.annotation);
  ------------------
  |  |  460|  4.05k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  4.05k|    do {                    \
  |  |  |  |   52|  4.05k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.05k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5803|  4.05k|                ADDOP_NAME(c, loc, LOAD_NAME, &_Py_ID(__annotations__), names);
  ------------------
  |  |  419|  4.05k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  4.05k|    do {                    \
  |  |  |  |   52|  4.05k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.05k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5804|  4.05k|                mangled = _PyCompile_MaybeMangle(c, targ->v.Name.id);
 5805|  4.05k|                ADDOP_LOAD_CONST_NEW(c, loc, mangled);
  ------------------
  |  |  329|  4.05k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  4.05k|    do {                    \
  |  |  |  |   52|  4.05k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.05k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5806|  4.05k|                ADDOP(c, loc, STORE_SUBSCR);
  ------------------
  |  |  294|  4.05k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.05k|    do {                    \
  |  |  |  |   52|  4.05k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.05k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5807|  4.05k|            }
 5808|  16.5k|            else {
 5809|  16.5k|                PyObject *conditional_annotation_index = NULL;
 5810|  16.5k|                RETURN_IF_ERROR(_PyCompile_AddDeferredAnnotation(
  ------------------
  |  |   51|  16.5k|    do {                    \
  |  |   52|  16.5k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 16.5k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  16.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 16.5k]
  |  |  ------------------
  ------------------
 5811|  16.5k|                    c, s, &conditional_annotation_index));
 5812|  16.5k|                if (conditional_annotation_index != NULL) {
  ------------------
  |  Branch (5812:21): [True: 4.49k, False: 12.0k]
  ------------------
 5813|  4.49k|                    if (SCOPE_TYPE(c) == COMPILE_SCOPE_CLASS) {
  ------------------
  |  |   74|  4.49k|#define SCOPE_TYPE(C) _PyCompile_ScopeType(C)
  ------------------
  |  Branch (5813:25): [True: 820, False: 3.67k]
  ------------------
 5814|    820|                        ADDOP_NAME(c, loc, LOAD_DEREF, &_Py_ID(__conditional_annotations__), cellvars);
  ------------------
  |  |  419|    820|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|    820|    do {                    \
  |  |  |  |   52|    820|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 820]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    820|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 820]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5815|    820|                    }
 5816|  3.67k|                    else {
 5817|  3.67k|                        ADDOP_NAME(c, loc, LOAD_NAME, &_Py_ID(__conditional_annotations__), names);
  ------------------
  |  |  419|  3.67k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  3.67k|    do {                    \
  |  |  |  |   52|  3.67k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.67k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.67k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5818|  3.67k|                    }
 5819|  4.49k|                    ADDOP_LOAD_CONST_NEW(c, loc, conditional_annotation_index);
  ------------------
  |  |  329|  4.49k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  4.49k|    do {                    \
  |  |  |  |   52|  4.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5820|       |                    // gh-154902: change SET_ADD to new INTRINSIC_ADD_CONDITIONAL_ANNOTATION intrinsic
 5821|  4.49k|                    ADDOP_I(c, loc, CALL_INTRINSIC_2,
  ------------------
  |  |  280|  4.49k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.49k|    do {                    \
  |  |  |  |   52|  4.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5822|  4.49k|                            INTRINSIC_ADD_CONDITIONAL_ANNOTATION);
 5823|  4.49k|                    ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  4.49k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.49k|    do {                    \
  |  |  |  |   52|  4.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5824|  4.49k|                }
 5825|  16.5k|            }
 5826|  20.5k|        }
 5827|  23.9k|        break;
 5828|  23.9k|    case Attribute_kind:
  ------------------
  |  Branch (5828:5): [True: 665, False: 24.3k]
  ------------------
 5829|    665|        if (!s->v.AnnAssign.value &&
  ------------------
  |  Branch (5829:13): [True: 596, False: 69]
  ------------------
 5830|    596|            codegen_check_ann_expr(c, targ->v.Attribute.value) < 0) {
  ------------------
  |  Branch (5830:13): [True: 3, False: 593]
  ------------------
 5831|      3|            return ERROR;
  ------------------
  |  |   48|      3|#define ERROR -1
  ------------------
 5832|      3|        }
 5833|    662|        break;
 5834|    662|    case Subscript_kind:
  ------------------
  |  Branch (5834:5): [True: 430, False: 24.5k]
  ------------------
 5835|    430|        if (!s->v.AnnAssign.value &&
  ------------------
  |  Branch (5835:13): [True: 407, False: 23]
  ------------------
 5836|    407|            (codegen_check_ann_expr(c, targ->v.Subscript.value) < 0 ||
  ------------------
  |  Branch (5836:14): [True: 2, False: 405]
  ------------------
 5837|    405|             codegen_check_ann_subscr(c, targ->v.Subscript.slice) < 0)) {
  ------------------
  |  Branch (5837:14): [True: 10, False: 395]
  ------------------
 5838|     12|                return ERROR;
  ------------------
  |  |   48|     12|#define ERROR -1
  ------------------
 5839|     12|        }
 5840|    418|        break;
 5841|    418|    default:
  ------------------
  |  Branch (5841:5): [True: 0, False: 25.0k]
  ------------------
 5842|      0|        PyErr_Format(PyExc_SystemError,
 5843|      0|                     "invalid node type (%d) for annotated assignment",
 5844|      0|                     targ->kind);
 5845|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 5846|  25.0k|    }
 5847|  25.0k|    return SUCCESS;
  ------------------
  |  |   47|  25.0k|#define SUCCESS 0
  ------------------
 5848|  25.0k|}
codegen.c:codegen_check_ann_expr:
 5744|  4.89k|{
 5745|  4.89k|    VISIT(c, expr, e);
  ------------------
  |  |  460|  4.89k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  4.89k|    do {                    \
  |  |  |  |   52|  4.89k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 15, False: 4.88k]
  |  |  |  |  ------------------
  |  |  |  |   53|     15|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     15|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     15|        }                   \
  |  |  |  |   55|  4.89k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5746|  4.88k|    ADDOP(c, LOC(e), POP_TOP);
  ------------------
  |  |  294|  4.88k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.88k|    do {                    \
  |  |  |  |   52|  4.88k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.88k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.88k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.88k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5747|  4.88k|    return SUCCESS;
  ------------------
  |  |   47|  4.88k|#define SUCCESS 0
  ------------------
 5748|  4.88k|}
codegen.c:codegen_check_ann_subscr:
 5752|  3.85k|{
 5753|       |    /* We check that everything in a subscript is defined at runtime. */
 5754|  3.85k|    switch (e->kind) {
 5755|  2.13k|    case Slice_kind:
  ------------------
  |  Branch (5755:5): [True: 2.13k, False: 1.72k]
  ------------------
 5756|  2.13k|        if (e->v.Slice.lower && codegen_check_ann_expr(c, e->v.Slice.lower) < 0) {
  ------------------
  |  Branch (5756:13): [True: 783, False: 1.35k]
  |  Branch (5756:33): [True: 1, False: 782]
  ------------------
 5757|      1|            return ERROR;
  ------------------
  |  |   48|      1|#define ERROR -1
  ------------------
 5758|      1|        }
 5759|  2.13k|        if (e->v.Slice.upper && codegen_check_ann_expr(c, e->v.Slice.upper) < 0) {
  ------------------
  |  Branch (5759:13): [True: 1.36k, False: 770]
  |  Branch (5759:33): [True: 2, False: 1.36k]
  ------------------
 5760|      2|            return ERROR;
  ------------------
  |  |   48|      2|#define ERROR -1
  ------------------
 5761|      2|        }
 5762|  2.13k|        if (e->v.Slice.step && codegen_check_ann_expr(c, e->v.Slice.step) < 0) {
  ------------------
  |  Branch (5762:13): [True: 398, False: 1.73k]
  |  Branch (5762:32): [True: 1, False: 397]
  ------------------
 5763|      1|            return ERROR;
  ------------------
  |  |   48|      1|#define ERROR -1
  ------------------
 5764|      1|        }
 5765|  2.13k|        return SUCCESS;
  ------------------
  |  |   47|  2.13k|#define SUCCESS 0
  ------------------
 5766|    377|    case Tuple_kind: {
  ------------------
  |  Branch (5766:5): [True: 377, False: 3.48k]
  ------------------
 5767|       |        /* extended slice */
 5768|    377|        asdl_expr_seq *elts = e->v.Tuple.elts;
 5769|    377|        Py_ssize_t i, n = asdl_seq_LEN(elts);
  ------------------
  |  |   83|    377|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    754|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 3, False: 374]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5770|  3.82k|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (5770:21): [True: 3.45k, False: 369]
  ------------------
 5771|  3.45k|            RETURN_IF_ERROR(codegen_check_ann_subscr(c, asdl_seq_GET(elts, i)));
  ------------------
  |  |   51|  3.45k|    do {                    \
  |  |   52|  3.45k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 8, False: 3.44k]
  |  |  ------------------
  |  |   53|      8|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      8|#define ERROR -1
  |  |  ------------------
  |  |   54|      8|        }                   \
  |  |   55|  3.45k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.44k]
  |  |  ------------------
  ------------------
 5772|  3.45k|        }
 5773|    369|        return SUCCESS;
  ------------------
  |  |   47|    369|#define SUCCESS 0
  ------------------
 5774|    377|    }
 5775|  1.34k|    default:
  ------------------
  |  Branch (5775:5): [True: 1.34k, False: 2.51k]
  ------------------
 5776|  1.34k|        return codegen_check_ann_expr(c, e);
 5777|  3.85k|    }
 5778|  3.85k|}
codegen.c:codegen_for:
 2164|    623|{
 2165|    623|    location loc = LOC(s);
  ------------------
  |  |   88|    623|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    623|    (_Py_SourceLocation){ \
  |  |  |  |   59|    623|               .lineno = (n)->lineno, \
  |  |  |  |   60|    623|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    623|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    623|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2166|    623|    NEW_JUMP_TARGET_LABEL(c, start);
  ------------------
  |  |   94|    623|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    623|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    623|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    623|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    623|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 623]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2167|    623|    NEW_JUMP_TARGET_LABEL(c, body);
  ------------------
  |  |   94|    623|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    623|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    623|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    623|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    623|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 623]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2168|    623|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|    623|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    623|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    623|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    623|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    623|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 623]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2169|    623|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|    623|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    623|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    623|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    623|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    623|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 623]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2170|       |
 2171|    623|    RETURN_IF_ERROR(_PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_FOR_LOOP, start, end, NULL));
  ------------------
  |  |   51|    623|    do {                    \
  |  |   52|    623|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 623]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    623|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 623]
  |  |  ------------------
  ------------------
 2172|       |
 2173|    623|    VISIT(c, expr, s->v.For.iter);
  ------------------
  |  |  460|    623|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    623|    do {                    \
  |  |  |  |   52|    623|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 620]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    623|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2174|       |
 2175|    620|    loc = LOC(s->v.For.iter);
  ------------------
  |  |   88|    620|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    620|    (_Py_SourceLocation){ \
  |  |  |  |   59|    620|               .lineno = (n)->lineno, \
  |  |  |  |   60|    620|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    620|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    620|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2176|    620|    ADDOP_I(c, loc, GET_ITER, 0);
  ------------------
  |  |  280|    620|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    620|    do {                    \
  |  |  |  |   52|    620|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2177|       |
 2178|    620|    USE_LABEL(c, start);
  ------------------
  |  |  100|    620|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    620|    do {                    \
  |  |  |  |   52|    620|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2179|    620|    ADDOP_JUMP(c, loc, FOR_ITER, cleanup);
  ------------------
  |  |  435|    620|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    620|    do {                    \
  |  |  |  |   52|    620|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2180|       |
 2181|       |    /* Add NOP to ensure correct line tracing of multiline for statements.
 2182|       |     * It will be removed later if redundant.
 2183|       |     */
 2184|    620|    ADDOP(c, LOC(s->v.For.target), NOP);
  ------------------
  |  |  294|    620|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    620|    do {                    \
  |  |  |  |   52|    620|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2185|       |
 2186|    620|    USE_LABEL(c, body);
  ------------------
  |  |  100|    620|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    620|    do {                    \
  |  |  |  |   52|    620|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 620]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2187|    620|    VISIT(c, expr, s->v.For.target);
  ------------------
  |  |  460|    620|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    620|    do {                    \
  |  |  |  |   52|    620|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 619]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 619]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2188|    619|    VISIT_SEQ(c, stmt, s->v.For.body);
  ------------------
  |  |  466|    619|    do {                                                                    \
  |  |  467|    619|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.42k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.42k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.42k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 806, False: 618]
  |  |  ------------------
  |  |  469|    806|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    806|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    806|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    806|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    806|    do {                    \
  |  |  |  |   52|    806|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 805]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    806|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 805]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    806|        }                                                                   \
  |  |  472|    619|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 618]
  |  |  ------------------
  ------------------
 2189|       |    /* Mark jump as artificial */
 2190|    618|    ADDOP_JUMP(c, NO_LOCATION, JUMP, start);
  ------------------
  |  |  435|    618|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    618|    do {                    \
  |  |  |  |   52|    618|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 618]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    618|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 618]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2191|       |
 2192|    618|    USE_LABEL(c, cleanup);
  ------------------
  |  |  100|    618|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    618|    do {                    \
  |  |  |  |   52|    618|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 618]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    618|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 618]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2193|       |    /* It is important for instrumentation that the `END_FOR` comes first.
 2194|       |    * Iteration over a generator will jump to the first of these instructions,
 2195|       |    * but a non-generator will jump to the second instruction.
 2196|       |    */
 2197|    618|    ADDOP(c, NO_LOCATION, END_FOR);
  ------------------
  |  |  294|    618|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    618|    do {                    \
  |  |  |  |   52|    618|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 618]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    618|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 618]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2198|    618|    ADDOP(c, NO_LOCATION, POP_ITER);
  ------------------
  |  |  294|    618|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    618|    do {                    \
  |  |  |  |   52|    618|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 618]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    618|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 618]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|       |
 2200|    618|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_FOR_LOOP, start);
 2201|       |
 2202|    618|    VISIT_SEQ(c, stmt, s->v.For.orelse);
  ------------------
  |  |  466|    618|    do {                                                                    \
  |  |  467|    618|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    730|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    730|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.46k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 537, False: 193]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 116, False: 614]
  |  |  ------------------
  |  |  469|    116|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    116|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    116|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    116|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    116|    do {                    \
  |  |  |  |   52|    116|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 4, False: 112]
  |  |  |  |  ------------------
  |  |  |  |   53|      4|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      4|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      4|        }                   \
  |  |  |  |   55|    116|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    116|        }                                                                   \
  |  |  472|    618|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 614]
  |  |  ------------------
  ------------------
 2203|       |
 2204|    614|    USE_LABEL(c, end);
  ------------------
  |  |  100|    614|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    614|    do {                    \
  |  |  |  |   52|    614|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 614]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    614|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 614]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2205|    614|    return SUCCESS;
  ------------------
  |  |   47|    614|#define SUCCESS 0
  ------------------
 2206|    614|}
codegen.c:codegen_while:
 2259|  2.13k|{
 2260|  2.13k|    NEW_JUMP_TARGET_LABEL(c, loop);
  ------------------
  |  |   94|  2.13k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.13k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.13k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.13k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.13k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.13k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2261|  2.13k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  2.13k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.13k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.13k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.13k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.13k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.13k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2262|  2.13k|    NEW_JUMP_TARGET_LABEL(c, anchor);
  ------------------
  |  |   94|  2.13k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.13k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.13k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.13k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.13k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.13k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2263|       |
 2264|  2.13k|    USE_LABEL(c, loop);
  ------------------
  |  |  100|  2.13k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.13k|    do {                    \
  |  |  |  |   52|  2.13k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.13k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2265|       |
 2266|  2.13k|    RETURN_IF_ERROR(_PyCompile_PushFBlock(c, LOC(s), COMPILE_FBLOCK_WHILE_LOOP, loop, end, NULL));
  ------------------
  |  |   51|  2.13k|    do {                    \
  |  |   52|  2.13k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.13k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.13k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.13k]
  |  |  ------------------
  ------------------
 2267|  2.13k|    RETURN_IF_ERROR(codegen_jump_if(c, LOC(s), s->v.While.test, anchor, 0));
  ------------------
  |  |   51|  2.13k|    do {                    \
  |  |   52|  2.13k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.13k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.13k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.13k]
  |  |  ------------------
  ------------------
 2268|       |
 2269|  2.13k|    VISIT_SEQ(c, stmt, s->v.While.body);
  ------------------
  |  |  466|  2.13k|    do {                                                                    \
  |  |  467|  2.13k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  13.9k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  13.9k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  27.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 13.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 11.7k, False: 2.13k]
  |  |  ------------------
  |  |  469|  11.7k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  11.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  11.7k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  11.7k|    do {                    \
  |  |  |  |   52|  11.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 11.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|  11.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  11.7k|        }                                                                   \
  |  |  472|  2.13k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 2.13k]
  |  |  ------------------
  ------------------
 2270|  2.13k|    ADDOP_JUMP(c, NO_LOCATION, JUMP, loop);
  ------------------
  |  |  435|  2.13k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.13k|    do {                    \
  |  |  |  |   52|  2.13k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.13k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2271|       |
 2272|  2.13k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_WHILE_LOOP, loop);
 2273|       |
 2274|  2.13k|    USE_LABEL(c, anchor);
  ------------------
  |  |  100|  2.13k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.13k|    do {                    \
  |  |  |  |   52|  2.13k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.13k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2275|  2.13k|    if (s->v.While.orelse) {
  ------------------
  |  Branch (2275:9): [True: 166, False: 1.96k]
  ------------------
 2276|    166|        VISIT_SEQ(c, stmt, s->v.While.orelse);
  ------------------
  |  |  466|    166|    do {                                                                    \
  |  |  467|    166|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    530|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    530|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.06k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 530]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 366, False: 164]
  |  |  ------------------
  |  |  469|    366|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    366|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    366|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    366|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    366|    do {                    \
  |  |  |  |   52|    366|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 364]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|    366|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 364]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    366|        }                                                                   \
  |  |  472|    166|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 164]
  |  |  ------------------
  ------------------
 2277|    166|    }
 2278|       |
 2279|  2.13k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  2.13k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.13k|    do {                    \
  |  |  |  |   52|  2.13k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.13k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2280|  2.13k|    return SUCCESS;
  ------------------
  |  |   47|  2.13k|#define SUCCESS 0
  ------------------
 2281|  2.13k|}
codegen.c:codegen_jump_if:
 1979|  9.71k|{
 1980|  9.71k|    switch (e->kind) {
 1981|    519|    case UnaryOp_kind:
  ------------------
  |  Branch (1981:5): [True: 519, False: 9.19k]
  ------------------
 1982|    519|        if (e->v.UnaryOp.op == Not) {
  ------------------
  |  Branch (1982:13): [True: 1, False: 518]
  ------------------
 1983|      1|            return codegen_jump_if(c, loc, e->v.UnaryOp.operand, next, !cond);
 1984|      1|        }
 1985|       |        /* fallback to general implementation */
 1986|    518|        break;
 1987|    518|    case BoolOp_kind: {
  ------------------
  |  Branch (1987:5): [True: 360, False: 9.35k]
  ------------------
 1988|    360|        asdl_expr_seq *s = e->v.BoolOp.values;
 1989|    360|        Py_ssize_t i, n = asdl_seq_LEN(s) - 1;
  ------------------
  |  |   83|    360|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    720|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 360]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1990|    360|        assert(n >= 0);
  ------------------
  |  Branch (1990:9): [True: 360, False: 0]
  ------------------
 1991|    360|        int cond2 = e->v.BoolOp.op == Or;
 1992|    360|        jump_target_label next2 = next;
 1993|    360|        if (!cond2 != !cond) {
  ------------------
  |  Branch (1993:13): [True: 221, False: 139]
  ------------------
 1994|    221|            NEW_JUMP_TARGET_LABEL(c, new_next2);
  ------------------
  |  |   94|    221|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    221|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    221|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    221|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    221|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 221]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 1995|    221|            next2 = new_next2;
 1996|    221|        }
 1997|  1.26k|        for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (1997:21): [True: 900, False: 360]
  ------------------
 1998|    900|            RETURN_IF_ERROR(
  ------------------
  |  |   51|    900|    do {                    \
  |  |   52|    900|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 900]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    900|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 900]
  |  |  ------------------
  ------------------
 1999|    900|                codegen_jump_if(c, loc, (expr_ty)asdl_seq_GET(s, i), next2, cond2));
 2000|    900|        }
 2001|    360|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    360|    do {                    \
  |  |   52|    360|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 360]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    360|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 360]
  |  |  ------------------
  ------------------
 2002|    360|            codegen_jump_if(c, loc, (expr_ty)asdl_seq_GET(s, n), next, cond));
 2003|    360|        if (!SAME_JUMP_TARGET_LABEL(next2, next)) {
  ------------------
  |  |   59|    360|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  ------------------
  |  Branch (2003:13): [True: 221, False: 139]
  ------------------
 2004|    221|            USE_LABEL(c, next2);
  ------------------
  |  |  100|    221|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    221|    do {                    \
  |  |  |  |   52|    221|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 221]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    221|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 221]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2005|    221|        }
 2006|    360|        return SUCCESS;
  ------------------
  |  |   47|    360|#define SUCCESS 0
  ------------------
 2007|    360|    }
 2008|    718|    case IfExp_kind: {
  ------------------
  |  Branch (2008:5): [True: 718, False: 8.99k]
  ------------------
 2009|    718|        NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|    718|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    718|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    718|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    718|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    718|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 718]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2010|    718|        NEW_JUMP_TARGET_LABEL(c, next2);
  ------------------
  |  |   94|    718|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    718|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    718|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    718|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    718|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 718]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2011|    718|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    718|    do {                    \
  |  |   52|    718|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 718]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    718|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 718]
  |  |  ------------------
  ------------------
 2012|    718|            codegen_jump_if(c, loc, e->v.IfExp.test, next2, 0));
 2013|    718|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    718|    do {                    \
  |  |   52|    718|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 717]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|    718|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 717]
  |  |  ------------------
  ------------------
 2014|    718|            codegen_jump_if(c, loc, e->v.IfExp.body, next, cond));
 2015|    717|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|    717|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    717|    do {                    \
  |  |  |  |   52|    717|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 717]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    717|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 717]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2016|       |
 2017|    717|        USE_LABEL(c, next2);
  ------------------
  |  |  100|    717|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    717|    do {                    \
  |  |  |  |   52|    717|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 717]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    717|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 717]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2018|    717|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    717|    do {                    \
  |  |   52|    717|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 717]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    717|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 717]
  |  |  ------------------
  ------------------
 2019|    717|            codegen_jump_if(c, loc, e->v.IfExp.orelse, next, cond));
 2020|       |
 2021|    717|        USE_LABEL(c, end);
  ------------------
  |  |  100|    717|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    717|    do {                    \
  |  |  |  |   52|    717|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 717]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    717|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 717]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2022|    717|        return SUCCESS;
  ------------------
  |  |   47|    717|#define SUCCESS 0
  ------------------
 2023|    717|    }
 2024|  1.29k|    case Compare_kind: {
  ------------------
  |  Branch (2024:5): [True: 1.29k, False: 8.42k]
  ------------------
 2025|  1.29k|        Py_ssize_t n = asdl_seq_LEN(e->v.Compare.ops) - 1;
  ------------------
  |  |   83|  1.29k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.58k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.29k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2026|  1.29k|        if (n > 0) {
  ------------------
  |  Branch (2026:13): [True: 693, False: 601]
  ------------------
 2027|    693|            RETURN_IF_ERROR(codegen_check_compare(c, e));
  ------------------
  |  |   51|    693|    do {                    \
  |  |   52|    693|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 693]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    693|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 693]
  |  |  ------------------
  ------------------
 2028|    693|            NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|    693|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    693|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    693|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    693|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    693|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 693]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2029|    693|            VISIT(c, expr, e->v.Compare.left);
  ------------------
  |  |  460|    693|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    693|    do {                    \
  |  |  |  |   52|    693|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 692]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    693|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 692]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2030|  3.48k|            for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (2030:36): [True: 2.79k, False: 691]
  ------------------
 2031|  2.79k|                VISIT(c, expr,
  ------------------
  |  |  460|  2.79k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  2.79k|    do {                    \
  |  |  |  |   52|  2.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|  2.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2032|  2.79k|                    (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
 2033|  2.79k|                ADDOP_I(c, LOC(e), SWAP, 2);
  ------------------
  |  |  280|  2.79k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.79k|    do {                    \
  |  |  |  |   52|  2.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2034|  2.79k|                ADDOP_I(c, LOC(e), COPY, 2);
  ------------------
  |  |  280|  2.79k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.79k|    do {                    \
  |  |  |  |   52|  2.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2035|  2.79k|                ADDOP_COMPARE(c, LOC(e), asdl_seq_GET(e->v.Compare.ops, i));
  ------------------
  |  |  438|  2.79k|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|  2.79k|    do {                    \
  |  |  |  |   52|  2.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2036|  2.79k|                ADDOP(c, LOC(e), TO_BOOL);
  ------------------
  |  |  294|  2.79k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.79k|    do {                    \
  |  |  |  |   52|  2.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2037|  2.79k|                ADDOP_JUMP(c, LOC(e), POP_JUMP_IF_FALSE, cleanup);
  ------------------
  |  |  435|  2.79k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.79k|    do {                    \
  |  |  |  |   52|  2.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2038|  2.79k|            }
 2039|    691|            VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
  ------------------
  |  |  460|    691|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    691|    do {                    \
  |  |  |  |   52|    691|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    691|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2040|    688|            ADDOP_COMPARE(c, LOC(e), asdl_seq_GET(e->v.Compare.ops, n));
  ------------------
  |  |  438|    688|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|    688|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2041|    688|            ADDOP(c, LOC(e), TO_BOOL);
  ------------------
  |  |  294|    688|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|    688|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2042|    688|            ADDOP_JUMP(c, LOC(e), cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
  ------------------
  |  |  435|    688|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|  1.37k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  |  Branch (52:14): [True: 251, False: 437]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2043|    688|            NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|    688|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    688|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    688|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    688|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    688|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 688]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2044|    688|            ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|    688|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|    688|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2045|       |
 2046|    688|            USE_LABEL(c, cleanup);
  ------------------
  |  |  100|    688|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|    688|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2047|    688|            ADDOP(c, LOC(e), POP_TOP);
  ------------------
  |  |  294|    688|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|    688|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2048|    688|            if (!cond) {
  ------------------
  |  Branch (2048:17): [True: 437, False: 251]
  ------------------
 2049|    437|                ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, next);
  ------------------
  |  |  435|    437|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    437|    do {                    \
  |  |  |  |   52|    437|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 437]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    437|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 437]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2050|    437|            }
 2051|       |
 2052|    688|            USE_LABEL(c, end);
  ------------------
  |  |  100|    688|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    688|    do {                    \
  |  |  |  |   52|    688|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 688]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    688|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 688]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2053|    688|            return SUCCESS;
  ------------------
  |  |   47|    688|#define SUCCESS 0
  ------------------
 2054|    688|        }
 2055|       |        /* fallback to general implementation */
 2056|    601|        break;
 2057|  1.29k|    }
 2058|  6.82k|    default:
  ------------------
  |  Branch (2058:5): [True: 6.82k, False: 2.89k]
  ------------------
 2059|       |        /* fallback to general implementation */
 2060|  6.82k|        break;
 2061|  9.71k|    }
 2062|       |
 2063|       |    /* general implementation */
 2064|  7.94k|    VISIT(c, expr, e);
  ------------------
  |  |  460|  7.94k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  7.94k|    do {                    \
  |  |  |  |   52|  7.94k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 4, False: 7.94k]
  |  |  |  |  ------------------
  |  |  |  |   53|      4|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      4|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      4|        }                   \
  |  |  |  |   55|  7.94k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2065|  7.94k|    ADDOP(c, LOC(e), TO_BOOL);
  ------------------
  |  |  294|  7.94k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  7.94k|    do {                    \
  |  |  |  |   52|  7.94k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7.94k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  7.94k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2066|  7.94k|    ADDOP_JUMP(c, LOC(e), cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
  ------------------
  |  |  435|  7.94k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  7.94k|    do {                    \
  |  |  |  |   52|  15.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7.94k]
  |  |  |  |  |  Branch (52:14): [True: 2.32k, False: 5.61k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  7.94k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2067|  7.94k|    return SUCCESS;
  ------------------
  |  |   47|  7.94k|#define SUCCESS 0
  ------------------
 2068|  7.94k|}
codegen.c:codegen_check_compare:
 1904|  22.0k|{
 1905|  22.0k|    Py_ssize_t i, n;
 1906|  22.0k|    bool left = check_is_arg(e->v.Compare.left);
 1907|  22.0k|    expr_ty left_expr = e->v.Compare.left;
 1908|  22.0k|    n = asdl_seq_LEN(e->v.Compare.ops);
  ------------------
  |  |   83|  22.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  44.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 22.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1909|   102k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1909:17): [True: 81.2k, False: 20.8k]
  ------------------
 1910|  81.2k|        cmpop_ty op = (cmpop_ty)asdl_seq_GET(e->v.Compare.ops, i);
  ------------------
  |  |   82|  81.2k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  81.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1911|  81.2k|        expr_ty right_expr = (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i);
  ------------------
  |  |   82|  81.2k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  81.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1912|  81.2k|        bool right = check_is_arg(right_expr);
 1913|  81.2k|        if (op == Is || op == IsNot) {
  ------------------
  |  Branch (1913:13): [True: 4.21k, False: 77.0k]
  |  Branch (1913:25): [True: 6, False: 77.0k]
  ------------------
 1914|  4.22k|            if (!right || !left) {
  ------------------
  |  Branch (1914:17): [True: 1.00k, False: 3.21k]
  |  Branch (1914:27): [True: 143, False: 3.07k]
  ------------------
 1915|  1.14k|                const char *msg = (op == Is)
  ------------------
  |  Branch (1915:35): [True: 1.14k, False: 0]
  ------------------
 1916|  1.14k|                        ? "\"is\" with '%.200s' literal. Did you mean \"==\"?"
 1917|  1.14k|                        : "\"is not\" with '%.200s' literal. Did you mean \"!=\"?";
 1918|  1.14k|                expr_ty literal = !left ? left_expr : right_expr;
  ------------------
  |  Branch (1918:35): [True: 200, False: 948]
  ------------------
 1919|  1.14k|                return _PyCompile_Warn(
 1920|  1.14k|                    c, LOC(e), msg, infer_type(literal)->tp_name
  ------------------
  |  |   88|  1.14k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.14k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.14k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.14k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.14k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.14k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1921|  1.14k|                );
 1922|  1.14k|            }
 1923|  4.22k|        }
 1924|  80.0k|        left = right;
 1925|  80.0k|        left_expr = right_expr;
 1926|  80.0k|    }
 1927|  20.8k|    return SUCCESS;
  ------------------
  |  |   47|  20.8k|#define SUCCESS 0
  ------------------
 1928|  22.0k|}
codegen.c:check_is_arg:
 1883|   103k|{
 1884|   103k|    if (e->kind == Tuple_kind) {
  ------------------
  |  Branch (1884:9): [True: 295, False: 102k]
  ------------------
 1885|    295|        return !is_const_tuple(e->v.Tuple.elts);
 1886|    295|    }
 1887|   102k|    if (e->kind != Constant_kind) {
  ------------------
  |  Branch (1887:9): [True: 84.4k, False: 18.5k]
  ------------------
 1888|  84.4k|        return true;
 1889|  84.4k|    }
 1890|  18.5k|    PyObject *value = e->v.Constant.value;
 1891|  18.5k|    return (value == Py_None
  ------------------
  |  |  616|  37.1k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1891:13): [True: 448, False: 18.1k]
  ------------------
 1892|  18.5k|         || value == Py_False
  ------------------
  |  |   25|  18.5k|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  18.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1892:13): [True: 224, False: 17.8k]
  ------------------
 1893|  18.5k|         || value == Py_True
  ------------------
  |  |   26|  18.5k|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  17.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1893:13): [True: 4.31k, False: 13.5k]
  ------------------
 1894|  13.5k|         || value == Py_Ellipsis);
  ------------------
  |  |   14|  13.5k|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (1894:13): [True: 17, False: 13.5k]
  ------------------
 1895|   102k|}
codegen.c:is_const_tuple:
 1869|    295|{
 1870|    295|    for (Py_ssize_t i = 0; i < asdl_seq_LEN(elts); i++) {
  ------------------
  |  |   83|    295|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    590|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 287, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1870:28): [True: 8, False: 287]
  ------------------
 1871|      8|        expr_ty e = (expr_ty)asdl_seq_GET(elts, i);
  ------------------
  |  |   82|      8|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      8|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1872|      8|        if (e->kind != Constant_kind) {
  ------------------
  |  Branch (1872:13): [True: 8, False: 0]
  ------------------
 1873|      8|            return false;
 1874|      8|        }
 1875|      8|    }
 1876|    287|    return true;
 1877|    295|}
codegen.c:infer_type:
 3756|  16.0k|{
 3757|  16.0k|    switch (e->kind) {
 3758|  2.36k|    case Tuple_kind:
  ------------------
  |  Branch (3758:5): [True: 2.36k, False: 13.6k]
  ------------------
 3759|  2.36k|        return &PyTuple_Type;
 3760|    551|    case List_kind:
  ------------------
  |  Branch (3760:5): [True: 551, False: 15.4k]
  ------------------
 3761|    569|    case ListComp_kind:
  ------------------
  |  Branch (3761:5): [True: 18, False: 16.0k]
  ------------------
 3762|    569|        return &PyList_Type;
 3763|    107|    case Dict_kind:
  ------------------
  |  Branch (3763:5): [True: 107, False: 15.9k]
  ------------------
 3764|    757|    case DictComp_kind:
  ------------------
  |  Branch (3764:5): [True: 650, False: 15.3k]
  ------------------
 3765|    757|        return &PyDict_Type;
 3766|    522|    case Set_kind:
  ------------------
  |  Branch (3766:5): [True: 522, False: 15.5k]
  ------------------
 3767|  1.17k|    case SetComp_kind:
  ------------------
  |  Branch (3767:5): [True: 651, False: 15.3k]
  ------------------
 3768|  1.17k|        return &PySet_Type;
 3769|    126|    case GeneratorExp_kind:
  ------------------
  |  Branch (3769:5): [True: 126, False: 15.9k]
  ------------------
 3770|    126|        return &PyGen_Type;
 3771|    130|    case Lambda_kind:
  ------------------
  |  Branch (3771:5): [True: 130, False: 15.9k]
  ------------------
 3772|    130|        return &PyFunction_Type;
 3773|     64|    case TemplateStr_kind:
  ------------------
  |  Branch (3773:5): [True: 64, False: 15.9k]
  ------------------
 3774|     64|    case Interpolation_kind:
  ------------------
  |  Branch (3774:5): [True: 0, False: 16.0k]
  ------------------
 3775|     64|        return &_PyTemplate_Type;
 3776|     50|    case JoinedStr_kind:
  ------------------
  |  Branch (3776:5): [True: 50, False: 15.9k]
  ------------------
 3777|     50|    case FormattedValue_kind:
  ------------------
  |  Branch (3777:5): [True: 0, False: 16.0k]
  ------------------
 3778|     50|        return &PyUnicode_Type;
 3779|  4.03k|    case Constant_kind:
  ------------------
  |  Branch (3779:5): [True: 4.03k, False: 12.0k]
  ------------------
 3780|  4.03k|        return Py_TYPE(e->v.Constant.value);
  ------------------
  |  |  213|  4.03k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  4.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3781|  6.76k|    default:
  ------------------
  |  Branch (3781:5): [True: 6.76k, False: 9.27k]
  ------------------
 3782|       |        return NULL;
 3783|  16.0k|    }
 3784|  16.0k|}
codegen.c:codegen_addcompare:
 1932|  82.3k|{
 1933|  82.3k|    int cmp;
 1934|  82.3k|    switch (op) {
 1935|  3.81k|    case Eq:
  ------------------
  |  Branch (1935:5): [True: 3.81k, False: 78.4k]
  ------------------
 1936|  3.81k|        cmp = Py_EQ;
  ------------------
  |  |  654|  3.81k|#define Py_EQ 2
  ------------------
 1937|  3.81k|        break;
 1938|    122|    case NotEq:
  ------------------
  |  Branch (1938:5): [True: 122, False: 82.1k]
  ------------------
 1939|    122|        cmp = Py_NE;
  ------------------
  |  |  655|    122|#define Py_NE 3
  ------------------
 1940|    122|        break;
 1941|  27.8k|    case Lt:
  ------------------
  |  Branch (1941:5): [True: 27.8k, False: 54.4k]
  ------------------
 1942|  27.8k|        cmp = Py_LT;
  ------------------
  |  |  652|  27.8k|#define Py_LT 0
  ------------------
 1943|  27.8k|        break;
 1944|  1.57k|    case LtE:
  ------------------
  |  Branch (1944:5): [True: 1.57k, False: 80.7k]
  ------------------
 1945|  1.57k|        cmp = Py_LE;
  ------------------
  |  |  653|  1.57k|#define Py_LE 1
  ------------------
 1946|  1.57k|        break;
 1947|  36.7k|    case Gt:
  ------------------
  |  Branch (1947:5): [True: 36.7k, False: 45.5k]
  ------------------
 1948|  36.7k|        cmp = Py_GT;
  ------------------
  |  |  656|  36.7k|#define Py_GT 4
  ------------------
 1949|  36.7k|        break;
 1950|  5.94k|    case GtE:
  ------------------
  |  Branch (1950:5): [True: 5.94k, False: 76.3k]
  ------------------
 1951|  5.94k|        cmp = Py_GE;
  ------------------
  |  |  657|  5.94k|#define Py_GE 5
  ------------------
 1952|  5.94k|        break;
 1953|  4.35k|    case Is:
  ------------------
  |  Branch (1953:5): [True: 4.35k, False: 77.9k]
  ------------------
 1954|  4.35k|        ADDOP_I(c, loc, IS_OP, 0);
  ------------------
  |  |  280|  4.35k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.35k|    do {                    \
  |  |  |  |   52|  4.35k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.35k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.35k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1955|  4.35k|        return SUCCESS;
  ------------------
  |  |   47|  4.35k|#define SUCCESS 0
  ------------------
 1956|      6|    case IsNot:
  ------------------
  |  Branch (1956:5): [True: 6, False: 82.3k]
  ------------------
 1957|      6|        ADDOP_I(c, loc, IS_OP, 1);
  ------------------
  |  |  280|      6|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      6|    do {                    \
  |  |  |  |   52|      6|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1958|      6|        return SUCCESS;
  ------------------
  |  |   47|      6|#define SUCCESS 0
  ------------------
 1959|  1.79k|    case In:
  ------------------
  |  Branch (1959:5): [True: 1.79k, False: 80.5k]
  ------------------
 1960|  1.79k|        ADDOP_I(c, loc, CONTAINS_OP, 0);
  ------------------
  |  |  280|  1.79k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.79k|    do {                    \
  |  |  |  |   52|  1.79k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.79k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1961|  1.79k|        return SUCCESS;
  ------------------
  |  |   47|  1.79k|#define SUCCESS 0
  ------------------
 1962|     45|    case NotIn:
  ------------------
  |  Branch (1962:5): [True: 45, False: 82.2k]
  ------------------
 1963|     45|        ADDOP_I(c, loc, CONTAINS_OP, 1);
  ------------------
  |  |  280|     45|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     45|    do {                    \
  |  |  |  |   52|     45|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 45]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     45|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 45]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1964|     45|        return SUCCESS;
  ------------------
  |  |   47|     45|#define SUCCESS 0
  ------------------
 1965|      0|    default:
  ------------------
  |  Branch (1965:5): [True: 0, False: 82.3k]
  ------------------
 1966|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1967|  82.3k|    }
 1968|       |    // cmp goes in top three bits of the oparg, while the low four bits are used
 1969|       |    // by quickened versions of this opcode to store the comparison mask. The
 1970|       |    // fifth-lowest bit indicates whether the result should be converted to bool
 1971|       |    // and is set later):
 1972|  76.1k|    ADDOP_I(c, loc, COMPARE_OP, (cmp << 5) | compare_masks[cmp]);
  ------------------
  |  |  280|  76.1k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  76.1k|    do {                    \
  |  |  |  |   52|  76.1k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 76.1k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  76.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 76.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1973|  76.1k|    return SUCCESS;
  ------------------
  |  |   47|  76.1k|#define SUCCESS 0
  ------------------
 1974|  76.1k|}
codegen.c:codegen_if:
 2136|  1.69k|{
 2137|  1.69k|    jump_target_label next;
 2138|  1.69k|    assert(s->kind == If_kind);
  ------------------
  |  Branch (2138:5): [True: 1.69k, False: 0]
  ------------------
 2139|  1.69k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  1.69k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.69k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.69k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.69k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.69k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.69k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2140|  1.69k|    if (asdl_seq_LEN(s->v.If.orelse)) {
  ------------------
  |  |   83|  1.69k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.39k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 360, False: 1.33k]
  |  |  |  |  |  Branch (302:37): [True: 1.33k, False: 360]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2141|    360|        NEW_JUMP_TARGET_LABEL(c, orelse);
  ------------------
  |  |   94|    360|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    360|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    360|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    360|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    360|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 360]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2142|    360|        next = orelse;
 2143|    360|    }
 2144|  1.33k|    else {
 2145|  1.33k|        next = end;
 2146|  1.33k|    }
 2147|  1.69k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.69k|    do {                    \
  |  |   52|  1.69k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 4, False: 1.69k]
  |  |  ------------------
  |  |   53|      4|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      4|#define ERROR -1
  |  |  ------------------
  |  |   54|      4|        }                   \
  |  |   55|  1.69k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.69k]
  |  |  ------------------
  ------------------
 2148|  1.69k|        codegen_jump_if(c, LOC(s), s->v.If.test, next, 0));
 2149|       |
 2150|  1.69k|    VISIT_SEQ(c, stmt, s->v.If.body);
  ------------------
  |  |  466|  1.69k|    do {                                                                    \
  |  |  467|  1.69k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  5.59k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  5.59k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.59k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 3.90k, False: 1.68k]
  |  |  ------------------
  |  |  469|  3.90k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  3.90k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.90k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  3.90k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  3.90k|    do {                    \
  |  |  |  |   52|  3.90k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 4, False: 3.89k]
  |  |  |  |  ------------------
  |  |  |  |   53|      4|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      4|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      4|        }                   \
  |  |  |  |   55|  3.90k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  3.90k|        }                                                                   \
  |  |  472|  1.69k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.68k]
  |  |  ------------------
  ------------------
 2151|  1.68k|    if (asdl_seq_LEN(s->v.If.orelse)) {
  ------------------
  |  |   83|  1.68k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.37k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 360, False: 1.32k]
  |  |  |  |  |  Branch (302:37): [True: 1.32k, False: 360]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2152|    360|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|    360|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    360|    do {                    \
  |  |  |  |   52|    360|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 360]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    360|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 360]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2153|       |
 2154|    360|        USE_LABEL(c, next);
  ------------------
  |  |  100|    360|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    360|    do {                    \
  |  |  |  |   52|    360|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 360]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    360|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 360]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2155|    360|        VISIT_SEQ(c, stmt, s->v.If.orelse);
  ------------------
  |  |  466|    360|    do {                                                                    \
  |  |  467|    360|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.55k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.55k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.11k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.55k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.20k, False: 355]
  |  |  ------------------
  |  |  469|  1.20k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.20k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.20k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.20k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.20k|    do {                    \
  |  |  |  |   52|  1.20k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 5, False: 1.19k]
  |  |  |  |  ------------------
  |  |  |  |   53|      5|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      5|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      5|        }                   \
  |  |  |  |   55|  1.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.20k|        }                                                                   \
  |  |  472|    360|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 355]
  |  |  ------------------
  ------------------
 2156|    360|    }
 2157|       |
 2158|  1.68k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  1.68k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.68k|    do {                    \
  |  |  |  |   52|  1.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2159|  1.68k|    return SUCCESS;
  ------------------
  |  |   47|  1.68k|#define SUCCESS 0
  ------------------
 2160|  1.68k|}
codegen.c:codegen_match:
 6770|    198|{
 6771|    198|    pattern_context pc;
 6772|       |    pc.fail_pop = NULL;
 6773|    198|    int result = codegen_match_inner(c, s, &pc);
 6774|    198|    PyMem_Free(pc.fail_pop);
 6775|    198|    return result;
 6776|    198|}
codegen.c:codegen_match_inner:
 6692|    198|{
 6693|    198|    VISIT(c, expr, s->v.Match.subject);
  ------------------
  |  |  460|    198|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    198|    do {                    \
  |  |  |  |   52|    198|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 198]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    198|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 198]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6694|    198|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|    198|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    198|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    198|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    198|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    198|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 198]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 6695|    198|    Py_ssize_t cases = asdl_seq_LEN(s->v.Match.cases);
  ------------------
  |  |   83|    198|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    396|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 198]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6696|    198|    assert(cases > 0);
  ------------------
  |  Branch (6696:5): [True: 198, False: 0]
  ------------------
 6697|    198|    match_case_ty m = asdl_seq_GET(s->v.Match.cases, cases - 1);
  ------------------
  |  |   82|    198|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    198|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6698|    198|    int has_default = WILDCARD_CHECK(m->pattern) && 1 < cases;
  ------------------
  |  | 5963|    396|    ((N)->kind == MatchAs_kind && !(N)->v.MatchAs.name)
  |  |  ------------------
  |  |  |  Branch (5963:6): [True: 22, False: 176]
  |  |  |  Branch (5963:35): [True: 19, False: 3]
  |  |  ------------------
  ------------------
  |  Branch (6698:53): [True: 4, False: 15]
  ------------------
 6699|    998|    for (Py_ssize_t i = 0; i < cases - has_default; i++) {
  ------------------
  |  Branch (6699:28): [True: 892, False: 106]
  ------------------
 6700|    892|        m = asdl_seq_GET(s->v.Match.cases, i);
  ------------------
  |  |   82|    892|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    892|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6701|       |        // Only copy the subject if we're *not* on the last case:
 6702|    892|        if (i != cases - has_default - 1) {
  ------------------
  |  Branch (6702:13): [True: 703, False: 189]
  ------------------
 6703|    703|            ADDOP_I(c, LOC(m->pattern), COPY, 1);
  ------------------
  |  |  280|    703|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    703|    do {                    \
  |  |  |  |   52|    703|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 703]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    703|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 703]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6704|    703|        }
 6705|    892|        pc->stores = PyList_New(0);
 6706|    892|        if (pc->stores == NULL) {
  ------------------
  |  Branch (6706:13): [True: 0, False: 892]
  ------------------
 6707|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 6708|      0|        }
 6709|       |        // Irrefutable cases must be either guarded, last, or both:
 6710|    892|        pc->allow_irrefutable = m->guard != NULL || i == cases - 1;
  ------------------
  |  Branch (6710:33): [True: 2, False: 890]
  |  Branch (6710:53): [True: 185, False: 705]
  ------------------
 6711|    892|        pc->fail_pop = NULL;
 6712|    892|        pc->fail_pop_size = 0;
 6713|    892|        pc->on_top = 0;
 6714|       |        // NOTE: Can't use returning macros here (they'll leak pc->stores)!
 6715|    892|        if (codegen_pattern(c, m->pattern, pc) < 0) {
  ------------------
  |  Branch (6715:13): [True: 88, False: 804]
  ------------------
 6716|     88|            Py_DECREF(pc->stores);
  ------------------
  |  |  430|     88|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     88|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6717|     88|            return ERROR;
  ------------------
  |  |   48|     88|#define ERROR -1
  ------------------
 6718|     88|        }
 6719|    892|        assert(!pc->on_top);
  ------------------
  |  Branch (6719:9): [True: 804, False: 0]
  ------------------
 6720|       |        // It's a match! Store all of the captured names (they're on the stack).
 6721|    804|        Py_ssize_t nstores = PyList_GET_SIZE(pc->stores);
  ------------------
  |  |   38|    804|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    804|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    804|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6722|  2.49k|        for (Py_ssize_t n = 0; n < nstores; n++) {
  ------------------
  |  Branch (6722:32): [True: 1.69k, False: 804]
  ------------------
 6723|  1.69k|            PyObject *name = PyList_GET_ITEM(pc->stores, n);
  ------------------
  |  |   40|  1.69k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  1.69k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.69k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6723:30): [True: 1.69k, False: 0]
  ------------------
 6724|  1.69k|            if (codegen_nameop(c, LOC(m->pattern), name, Store) < 0) {
  ------------------
  |  |   88|  1.69k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.69k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.69k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.69k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.69k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.69k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (6724:17): [True: 0, False: 1.69k]
  ------------------
 6725|      0|                Py_DECREF(pc->stores);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6726|      0|                return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 6727|      0|            }
 6728|  1.69k|        }
 6729|    804|        Py_DECREF(pc->stores);
  ------------------
  |  |  430|    804|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    804|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    804|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6730|       |        // NOTE: Returning macros are safe again.
 6731|    804|        if (m->guard) {
  ------------------
  |  Branch (6731:13): [True: 1, False: 803]
  ------------------
 6732|      1|            RETURN_IF_ERROR(ensure_fail_pop(c, pc, 0));
  ------------------
  |  |   51|      1|    do {                    \
  |  |   52|      1|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6733|      1|            RETURN_IF_ERROR(codegen_jump_if(c, LOC(m->pattern), m->guard, pc->fail_pop[0], 0));
  ------------------
  |  |   51|      1|    do {                    \
  |  |   52|      1|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 6734|      1|        }
 6735|       |        // Success! Pop the subject off, we're done with it:
 6736|    804|        if (i != cases - has_default - 1) {
  ------------------
  |  Branch (6736:13): [True: 695, False: 109]
  ------------------
 6737|       |            /* Use the next location to give better locations for branch events */
 6738|    695|            ADDOP(c, NEXT_LOCATION, POP_TOP);
  ------------------
  |  |  294|    695|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    695|    do {                    \
  |  |  |  |   52|    695|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 695]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    695|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 695]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6739|    695|        }
 6740|    804|        VISIT_SEQ(c, stmt, m->body);
  ------------------
  |  |  466|    804|    do {                                                                    \
  |  |  467|    804|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.74k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.74k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.48k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.74k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 941, False: 800]
  |  |  ------------------
  |  |  469|    941|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    941|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    941|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    941|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    941|    do {                    \
  |  |  |  |   52|    941|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 4, False: 937]
  |  |  |  |  ------------------
  |  |  |  |   53|      4|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      4|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      4|        }                   \
  |  |  |  |   55|    941|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 937]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    941|        }                                                                   \
  |  |  472|    804|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 800]
  |  |  ------------------
  ------------------
 6741|    800|        ADDOP_JUMP(c, NO_LOCATION, JUMP, end);
  ------------------
  |  |  435|    800|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    800|    do {                    \
  |  |  |  |   52|    800|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 800]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    800|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 800]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6742|       |        // If the pattern fails to match, we want the line number of the
 6743|       |        // cleanup to be associated with the failed pattern, not the last line
 6744|       |        // of the body
 6745|    800|        RETURN_IF_ERROR(emit_and_reset_fail_pop(c, LOC(m->pattern), pc));
  ------------------
  |  |   51|    800|    do {                    \
  |  |   52|    800|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 800]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    800|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 800]
  |  |  ------------------
  ------------------
 6746|    800|    }
 6747|    106|    if (has_default) {
  ------------------
  |  Branch (6747:9): [True: 1, False: 105]
  ------------------
 6748|       |        // A trailing "case _" is common, and lets us save a bit of redundant
 6749|       |        // pushing and popping in the loop above:
 6750|      1|        m = asdl_seq_GET(s->v.Match.cases, cases - 1);
  ------------------
  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6751|      1|        if (cases == 1) {
  ------------------
  |  Branch (6751:13): [True: 0, False: 1]
  ------------------
 6752|       |            // No matches. Done with the subject:
 6753|      0|            ADDOP(c, LOC(m->pattern), POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6754|      0|        }
 6755|      1|        else {
 6756|       |            // Show line coverage for default case (it doesn't create bytecode)
 6757|      1|            ADDOP(c, LOC(m->pattern), NOP);
  ------------------
  |  |  294|      1|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6758|      1|        }
 6759|      1|        if (m->guard) {
  ------------------
  |  Branch (6759:13): [True: 0, False: 1]
  ------------------
 6760|      0|            RETURN_IF_ERROR(codegen_jump_if(c, LOC(m->pattern), m->guard, end, 0));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6761|      0|        }
 6762|      1|        VISIT_SEQ(c, stmt, m->body);
  ------------------
  |  |  466|      1|    do {                                                                    \
  |  |  467|      1|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|      1|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|      1|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      2|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1, False: 0]
  |  |  ------------------
  |  |  469|      1|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|      1|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|      1|        }                                                                   \
  |  |  472|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6763|      1|    }
 6764|    105|    USE_LABEL(c, end);
  ------------------
  |  |  100|    105|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    105|    do {                    \
  |  |  |  |   52|    105|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 105]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    105|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 105]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6765|    105|    return SUCCESS;
  ------------------
  |  |   47|    105|#define SUCCESS 0
  ------------------
 6766|    105|}
codegen.c:codegen_pattern:
 6665|  3.89k|{
 6666|  3.89k|    switch (p->kind) {
  ------------------
  |  Branch (6666:13): [True: 3.89k, False: 0]
  ------------------
 6667|    249|        case MatchValue_kind:
  ------------------
  |  Branch (6667:9): [True: 249, False: 3.64k]
  ------------------
 6668|    249|            return codegen_pattern_value(c, p, pc);
 6669|     73|        case MatchSingleton_kind:
  ------------------
  |  Branch (6669:9): [True: 73, False: 3.82k]
  ------------------
 6670|     73|            return codegen_pattern_singleton(c, p, pc);
 6671|    877|        case MatchSequence_kind:
  ------------------
  |  Branch (6671:9): [True: 877, False: 3.02k]
  ------------------
 6672|    877|            return codegen_pattern_sequence(c, p, pc);
 6673|     15|        case MatchMapping_kind:
  ------------------
  |  Branch (6673:9): [True: 15, False: 3.88k]
  ------------------
 6674|     15|            return codegen_pattern_mapping(c, p, pc);
 6675|    102|        case MatchClass_kind:
  ------------------
  |  Branch (6675:9): [True: 102, False: 3.79k]
  ------------------
 6676|    102|            return codegen_pattern_class(c, p, pc);
 6677|     16|        case MatchStar_kind:
  ------------------
  |  Branch (6677:9): [True: 16, False: 3.88k]
  ------------------
 6678|     16|            return codegen_pattern_star(c, p, pc);
 6679|  2.48k|        case MatchAs_kind:
  ------------------
  |  Branch (6679:9): [True: 2.48k, False: 1.41k]
  ------------------
 6680|  2.48k|            return codegen_pattern_as(c, p, pc);
 6681|     83|        case MatchOr_kind:
  ------------------
  |  Branch (6681:9): [True: 83, False: 3.81k]
  ------------------
 6682|     83|            return codegen_pattern_or(c, p, pc);
 6683|  3.89k|    }
 6684|       |    // AST validator shouldn't let this happen, but if it does,
 6685|       |    // just fail, don't crash out of the interpreter
 6686|      0|    const char *e = "invalid match pattern node in AST (kind=%d)";
 6687|      0|    return _PyCompile_Error(c, LOC(p), e, p->kind);
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6688|  3.89k|}
codegen.c:codegen_pattern_value:
 6639|    249|{
 6640|    249|    assert(p->kind == MatchValue_kind);
  ------------------
  |  Branch (6640:5): [True: 249, False: 0]
  ------------------
 6641|    249|    expr_ty value = p->v.MatchValue.value;
 6642|    249|    if (!MATCH_VALUE_EXPR(value)) {
  ------------------
  |  | 5970|    249|    ((N)->kind == Constant_kind || (N)->kind == Attribute_kind)
  |  |  ------------------
  |  |  |  Branch (5970:6): [True: 163, False: 86]
  |  |  |  Branch (5970:36): [True: 85, False: 1]
  |  |  ------------------
  ------------------
 6643|      1|        const char *e = "patterns may only match literals and attribute lookups";
 6644|      1|        return _PyCompile_Error(c, LOC(p), e);
  ------------------
  |  |   88|      1|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      1|    (_Py_SourceLocation){ \
  |  |  |  |   59|      1|               .lineno = (n)->lineno, \
  |  |  |  |   60|      1|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      1|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      1|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6645|      1|    }
 6646|    248|    VISIT(c, expr, value);
  ------------------
  |  |  460|    248|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    248|    do {                    \
  |  |  |  |   52|    248|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 248]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    248|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 248]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6647|    248|    ADDOP_COMPARE(c, LOC(p), Eq);
  ------------------
  |  |  438|    248|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|    248|    do {                    \
  |  |  |  |   52|    248|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 248]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    248|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 248]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6648|    248|    ADDOP(c, LOC(p), TO_BOOL);
  ------------------
  |  |  294|    248|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    248|    do {                    \
  |  |  |  |   52|    248|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 248]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    248|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 248]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6649|    248|    RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|    248|    do {                    \
  |  |   52|    248|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 248]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    248|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 248]
  |  |  ------------------
  ------------------
 6650|    248|    return SUCCESS;
  ------------------
  |  |   47|    248|#define SUCCESS 0
  ------------------
 6651|    248|}
codegen.c:jump_to_fail_pop:
 5998|  2.22k|{
 5999|       |    // Pop any items on the top of the stack, plus any objects we were going to
 6000|       |    // capture on success:
 6001|  2.22k|    Py_ssize_t pops = pc->on_top + PyList_GET_SIZE(pc->stores);
  ------------------
  |  |   38|  2.22k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6002|  2.22k|    RETURN_IF_ERROR(ensure_fail_pop(c, pc, pops));
  ------------------
  |  |   51|  2.22k|    do {                    \
  |  |   52|  2.22k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.22k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.22k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.22k]
  |  |  ------------------
  ------------------
 6003|  2.22k|    ADDOP_JUMP(c, loc, op, pc->fail_pop[pops]);
  ------------------
  |  |  435|  2.22k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.22k|    do {                    \
  |  |  |  |   52|  2.22k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.22k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6004|  2.22k|    return SUCCESS;
  ------------------
  |  |   47|  2.22k|#define SUCCESS 0
  ------------------
 6005|  2.22k|}
codegen.c:codegen_pattern_singleton:
 6655|     73|{
 6656|     73|    assert(p->kind == MatchSingleton_kind);
  ------------------
  |  Branch (6656:5): [True: 73, False: 0]
  ------------------
 6657|     73|    ADDOP_LOAD_CONST(c, LOC(p), p->v.MatchSingleton.value);
  ------------------
  |  |  311|     73|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     73|    do {                    \
  |  |  |  |   52|     73|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     73|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 73]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6658|     73|    ADDOP_COMPARE(c, LOC(p), Is);
  ------------------
  |  |  438|     73|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|     73|    do {                    \
  |  |  |  |   52|     73|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     73|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 73]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6659|     73|    RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|     73|    do {                    \
  |  |   52|     73|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 73]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     73|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 73]
  |  |  ------------------
  ------------------
 6660|     73|    return SUCCESS;
  ------------------
  |  |   47|     73|#define SUCCESS 0
  ------------------
 6661|     73|}
codegen.c:codegen_pattern_sequence:
 6582|    877|{
 6583|    877|    assert(p->kind == MatchSequence_kind);
  ------------------
  |  Branch (6583:5): [True: 877, False: 0]
  ------------------
 6584|    877|    asdl_pattern_seq *patterns = p->v.MatchSequence.patterns;
 6585|    877|    Py_ssize_t size = asdl_seq_LEN(patterns);
  ------------------
  |  |   83|    877|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.75k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 13, False: 864]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6586|    877|    Py_ssize_t star = -1;
 6587|    877|    int only_wildcard = 1;
 6588|    877|    int star_wildcard = 0;
 6589|       |    // Find a starred name, if it exists. There may be at most one:
 6590|  6.49k|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (6590:28): [True: 5.62k, False: 873]
  ------------------
 6591|  5.62k|        pattern_ty pattern = asdl_seq_GET(patterns, i);
  ------------------
  |  |   82|  5.62k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  5.62k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6592|  5.62k|        if (pattern->kind == MatchStar_kind) {
  ------------------
  |  Branch (6592:13): [True: 250, False: 5.37k]
  ------------------
 6593|    250|            if (star >= 0) {
  ------------------
  |  Branch (6593:17): [True: 4, False: 246]
  ------------------
 6594|      4|                const char *e = "multiple starred names in sequence pattern";
 6595|      4|                return _PyCompile_Error(c, LOC(p), e);
  ------------------
  |  |   88|      4|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      4|    (_Py_SourceLocation){ \
  |  |  |  |   59|      4|               .lineno = (n)->lineno, \
  |  |  |  |   60|      4|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      4|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      4|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6596|      4|            }
 6597|    246|            star_wildcard = WILDCARD_STAR_CHECK(pattern);
  ------------------
  |  | 5966|    246|    ((N)->kind == MatchStar_kind && !(N)->v.MatchStar.name)
  |  |  ------------------
  |  |  |  Branch (5966:6): [True: 246, False: 0]
  |  |  |  Branch (5966:37): [True: 216, False: 30]
  |  |  ------------------
  ------------------
 6598|    246|            only_wildcard &= star_wildcard;
 6599|    246|            star = i;
 6600|    246|            continue;
 6601|    250|        }
 6602|  5.37k|        only_wildcard &= WILDCARD_CHECK(pattern);
  ------------------
  |  | 5963|  5.37k|    ((N)->kind == MatchAs_kind && !(N)->v.MatchAs.name)
  |  |  ------------------
  |  |  |  Branch (5963:6): [True: 3.54k, False: 1.82k]
  |  |  |  Branch (5963:35): [True: 461, False: 3.08k]
  |  |  ------------------
  ------------------
 6603|  5.37k|    }
 6604|       |    // We need to keep the subject on top during the sequence and length checks:
 6605|    873|    pc->on_top++;
 6606|    873|    ADDOP(c, LOC(p), MATCH_SEQUENCE);
  ------------------
  |  |  294|    873|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    873|    do {                    \
  |  |  |  |   52|    873|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 873]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    873|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 873]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6607|    873|    RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|    873|    do {                    \
  |  |   52|    873|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 873]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    873|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 873]
  |  |  ------------------
  ------------------
 6608|    873|    if (star < 0) {
  ------------------
  |  Branch (6608:9): [True: 631, False: 242]
  ------------------
 6609|       |        // No star: len(subject) == size
 6610|    631|        ADDOP(c, LOC(p), GET_LEN);
  ------------------
  |  |  294|    631|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    631|    do {                    \
  |  |  |  |   52|    631|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 631]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    631|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 631]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6611|    631|        ADDOP_LOAD_CONST_NEW(c, LOC(p), PyLong_FromSsize_t(size));
  ------------------
  |  |  329|    631|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    631|    do {                    \
  |  |  |  |   52|    631|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 631]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    631|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 631]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6612|    631|        ADDOP_COMPARE(c, LOC(p), Eq);
  ------------------
  |  |  438|    631|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|    631|    do {                    \
  |  |  |  |   52|    631|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 631]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    631|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 631]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6613|    631|        RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|    631|    do {                    \
  |  |   52|    631|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 631]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    631|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 631]
  |  |  ------------------
  ------------------
 6614|    631|    }
 6615|    242|    else if (size > 1) {
  ------------------
  |  Branch (6615:14): [True: 241, False: 1]
  ------------------
 6616|       |        // Star: len(subject) >= size - 1
 6617|    241|        ADDOP(c, LOC(p), GET_LEN);
  ------------------
  |  |  294|    241|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    241|    do {                    \
  |  |  |  |   52|    241|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 241]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    241|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 241]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6618|    241|        ADDOP_LOAD_CONST_NEW(c, LOC(p), PyLong_FromSsize_t(size - 1));
  ------------------
  |  |  329|    241|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    241|    do {                    \
  |  |  |  |   52|    241|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 241]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    241|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 241]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6619|    241|        ADDOP_COMPARE(c, LOC(p), GtE);
  ------------------
  |  |  438|    241|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|    241|    do {                    \
  |  |  |  |   52|    241|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 241]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    241|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 241]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6620|    241|        RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|    241|    do {                    \
  |  |   52|    241|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 241]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    241|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 241]
  |  |  ------------------
  ------------------
 6621|    241|    }
 6622|       |    // Whatever comes next should consume the subject:
 6623|    873|    pc->on_top--;
 6624|    873|    if (only_wildcard) {
  ------------------
  |  Branch (6624:9): [True: 14, False: 859]
  ------------------
 6625|       |        // Patterns like: [] / [_] / [_, _] / [*_] / [_, *_] / [_, _, *_] / etc.
 6626|     14|        ADDOP(c, LOC(p), POP_TOP);
  ------------------
  |  |  294|     14|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     14|    do {                    \
  |  |  |  |   52|     14|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     14|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6627|     14|    }
 6628|    859|    else if (star_wildcard) {
  ------------------
  |  Branch (6628:14): [True: 216, False: 643]
  ------------------
 6629|    216|        RETURN_IF_ERROR(pattern_helper_sequence_subscr(c, LOC(p), patterns, star, pc));
  ------------------
  |  |   51|    216|    do {                    \
  |  |   52|    216|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 16, False: 200]
  |  |  ------------------
  |  |   53|     16|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     16|#define ERROR -1
  |  |  ------------------
  |  |   54|     16|        }                   \
  |  |   55|    216|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 200]
  |  |  ------------------
  ------------------
 6630|    216|    }
 6631|    643|    else {
 6632|    643|        RETURN_IF_ERROR(pattern_helper_sequence_unpack(c, LOC(p), patterns, star, pc));
  ------------------
  |  |   51|    643|    do {                    \
  |  |   52|    643|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 64, False: 579]
  |  |  ------------------
  |  |   53|     64|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     64|#define ERROR -1
  |  |  ------------------
  |  |   54|     64|        }                   \
  |  |   55|    643|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 579]
  |  |  ------------------
  ------------------
 6633|    643|    }
 6634|    793|    return SUCCESS;
  ------------------
  |  |   47|    793|#define SUCCESS 0
  ------------------
 6635|    873|}
codegen.c:pattern_helper_sequence_subscr:
 6125|    216|{
 6126|       |    // We need to keep the subject around for extracting elements:
 6127|    216|    pc->on_top++;
 6128|    216|    Py_ssize_t size = asdl_seq_LEN(patterns);
  ------------------
  |  |   83|    216|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    432|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 216]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6129|    929|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (6129:28): [True: 729, False: 200]
  ------------------
 6130|    729|        pattern_ty pattern = asdl_seq_GET(patterns, i);
  ------------------
  |  |   82|    729|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    729|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6131|    729|        if (WILDCARD_CHECK(pattern)) {
  ------------------
  |  | 5963|    729|    ((N)->kind == MatchAs_kind && !(N)->v.MatchAs.name)
  |  |  ------------------
  |  |  |  Branch (5963:6): [True: 455, False: 274]
  |  |  |  Branch (5963:35): [True: 0, False: 455]
  |  |  ------------------
  ------------------
 6132|      0|            continue;
 6133|      0|        }
 6134|    729|        if (i == star) {
  ------------------
  |  Branch (6134:13): [True: 214, False: 515]
  ------------------
 6135|    214|            assert(WILDCARD_STAR_CHECK(pattern));
  ------------------
  |  Branch (6135:13): [True: 214, False: 0]
  |  Branch (6135:13): [True: 214, False: 0]
  ------------------
 6136|    214|            continue;
 6137|    214|        }
 6138|    515|        ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|    515|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    515|    do {                    \
  |  |  |  |   52|    515|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 515]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    515|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 515]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6139|    515|        if (i < star) {
  ------------------
  |  Branch (6139:13): [True: 8, False: 507]
  ------------------
 6140|      8|            ADDOP_LOAD_CONST_NEW(c, loc, PyLong_FromSsize_t(i));
  ------------------
  |  |  329|      8|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      8|    do {                    \
  |  |  |  |   52|      8|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      8|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6141|      8|        }
 6142|    507|        else {
 6143|       |            // The subject may not support negative indexing! Compute a
 6144|       |            // nonnegative index:
 6145|    507|            ADDOP(c, loc, GET_LEN);
  ------------------
  |  |  294|    507|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    507|    do {                    \
  |  |  |  |   52|    507|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 507]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    507|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 507]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6146|    507|            ADDOP_LOAD_CONST_NEW(c, loc, PyLong_FromSsize_t(size - i));
  ------------------
  |  |  329|    507|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    507|    do {                    \
  |  |  |  |   52|    507|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 507]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    507|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 507]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6147|    507|            ADDOP_BINARY(c, loc, Sub);
  ------------------
  |  |  441|    507|    RETURN_IF_ERROR(addop_binary((C), (LOC), (BINOP), false))
  |  |  ------------------
  |  |  |  |   51|    507|    do {                    \
  |  |  |  |   52|    507|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 507]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    507|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 507]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6148|    507|        }
 6149|    515|        ADDOP_I(c, loc, BINARY_OP, NB_SUBSCR);
  ------------------
  |  |  280|    515|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    515|    do {                    \
  |  |  |  |   52|    515|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 515]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    515|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 515]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6150|    515|        RETURN_IF_ERROR(codegen_pattern_subpattern(c, pattern, pc));
  ------------------
  |  |   51|    515|    do {                    \
  |  |   52|    515|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 16, False: 499]
  |  |  ------------------
  |  |   53|     16|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     16|#define ERROR -1
  |  |  ------------------
  |  |   54|     16|        }                   \
  |  |   55|    515|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 499]
  |  |  ------------------
  ------------------
 6151|    515|    }
 6152|       |    // Pop the subject, we're done with it:
 6153|    200|    pc->on_top--;
 6154|    200|    ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|    200|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    200|    do {                    \
  |  |  |  |   52|    200|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 200]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    200|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 200]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6155|    200|    return SUCCESS;
  ------------------
  |  |   47|    200|#define SUCCESS 0
  ------------------
 6156|    200|}
codegen.c:codegen_pattern_subpattern:
 6162|  2.83k|{
 6163|  2.83k|    int allow_irrefutable = pc->allow_irrefutable;
 6164|  2.83k|    pc->allow_irrefutable = 1;
 6165|  2.83k|    RETURN_IF_ERROR(codegen_pattern(c, p, pc));
  ------------------
  |  |   51|  2.83k|    do {                    \
  |  |   52|  2.83k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 101, False: 2.73k]
  |  |  ------------------
  |  |   53|    101|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|    101|#define ERROR -1
  |  |  ------------------
  |  |   54|    101|        }                   \
  |  |   55|  2.83k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.73k]
  |  |  ------------------
  ------------------
 6166|  2.73k|    pc->allow_irrefutable = allow_irrefutable;
 6167|  2.73k|    return SUCCESS;
  ------------------
  |  |   47|  2.73k|#define SUCCESS 0
  ------------------
 6168|  2.83k|}
codegen.c:pattern_helper_sequence_unpack:
 6103|    643|{
 6104|    643|    RETURN_IF_ERROR(codegen_pattern_unpack_helper(c, loc, patterns));
  ------------------
  |  |   51|    643|    do {                    \
  |  |   52|    643|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 643]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    643|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 643]
  |  |  ------------------
  ------------------
 6105|    643|    Py_ssize_t size = asdl_seq_LEN(patterns);
  ------------------
  |  |   83|    643|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.28k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 643]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6106|       |    // We've now got a bunch of new subjects on the stack. They need to remain
 6107|       |    // there after each subpattern match:
 6108|    643|    pc->on_top += size;
 6109|  2.70k|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (6109:28): [True: 2.12k, False: 579]
  ------------------
 6110|       |        // One less item to keep track of each time we loop through:
 6111|  2.12k|        pc->on_top--;
 6112|  2.12k|        pattern_ty pattern = asdl_seq_GET(patterns, i);
  ------------------
  |  |   82|  2.12k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.12k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6113|  2.12k|        RETURN_IF_ERROR(codegen_pattern_subpattern(c, pattern, pc));
  ------------------
  |  |   51|  2.12k|    do {                    \
  |  |   52|  2.12k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 64, False: 2.05k]
  |  |  ------------------
  |  |   53|     64|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     64|#define ERROR -1
  |  |  ------------------
  |  |   54|     64|        }                   \
  |  |   55|  2.12k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.05k]
  |  |  ------------------
  ------------------
 6114|  2.12k|    }
 6115|    579|    return SUCCESS;
  ------------------
  |  |   47|    579|#define SUCCESS 0
  ------------------
 6116|    643|}
codegen.c:codegen_pattern_unpack_helper:
 6073|    643|{
 6074|    643|    Py_ssize_t n = asdl_seq_LEN(elts);
  ------------------
  |  |   83|    643|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.28k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 643]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6075|    643|    int seen_star = 0;
 6076|  3.52k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (6076:28): [True: 2.88k, False: 643]
  ------------------
 6077|  2.88k|        pattern_ty elt = asdl_seq_GET(elts, i);
  ------------------
  |  |   82|  2.88k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.88k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6078|  2.88k|        if (elt->kind == MatchStar_kind && !seen_star) {
  ------------------
  |  Branch (6078:13): [True: 26, False: 2.85k]
  |  Branch (6078:44): [True: 26, False: 0]
  ------------------
 6079|     26|            if ((i >= (1 << 8)) ||
  ------------------
  |  Branch (6079:17): [True: 0, False: 26]
  ------------------
 6080|     26|                (n-i-1 >= (INT_MAX >> 8))) {
  ------------------
  |  Branch (6080:17): [True: 0, False: 26]
  ------------------
 6081|      0|                return _PyCompile_Error(c, loc,
 6082|      0|                    "too many expressions in "
 6083|      0|                    "star-unpacking sequence pattern");
 6084|      0|            }
 6085|     26|            ADDOP_I(c, loc, UNPACK_EX, (i + ((n-i-1) << 8)));
  ------------------
  |  |  280|     26|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     26|    do {                    \
  |  |  |  |   52|     26|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 26]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     26|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 26]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6086|     26|            seen_star = 1;
 6087|     26|        }
 6088|  2.85k|        else if (elt->kind == MatchStar_kind) {
  ------------------
  |  Branch (6088:18): [True: 0, False: 2.85k]
  ------------------
 6089|      0|            return _PyCompile_Error(c, loc,
 6090|      0|                "multiple starred expressions in sequence pattern");
 6091|      0|        }
 6092|  2.88k|    }
 6093|    643|    if (!seen_star) {
  ------------------
  |  Branch (6093:9): [True: 617, False: 26]
  ------------------
 6094|    617|        ADDOP_I(c, loc, UNPACK_SEQUENCE, n);
  ------------------
  |  |  280|    617|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    617|    do {                    \
  |  |  |  |   52|    617|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 617]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    617|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 617]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6095|    617|    }
 6096|    643|    return SUCCESS;
  ------------------
  |  |   47|    643|#define SUCCESS 0
  ------------------
 6097|    643|}
codegen.c:codegen_pattern_mapping:
 6329|     15|{
 6330|     15|    assert(p->kind == MatchMapping_kind);
  ------------------
  |  Branch (6330:5): [True: 15, False: 0]
  ------------------
 6331|     15|    asdl_expr_seq *keys = p->v.MatchMapping.keys;
 6332|     15|    asdl_pattern_seq *patterns = p->v.MatchMapping.patterns;
 6333|     15|    Py_ssize_t size = asdl_seq_LEN(keys);
  ------------------
  |  |   83|     15|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     30|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 6, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6334|     15|    Py_ssize_t npatterns = asdl_seq_LEN(patterns);
  ------------------
  |  |   83|     15|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     30|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 6, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6335|     15|    if (size != npatterns) {
  ------------------
  |  Branch (6335:9): [True: 0, False: 15]
  ------------------
 6336|       |        // AST validator shouldn't let this happen, but if it does,
 6337|       |        // just fail, don't crash out of the interpreter
 6338|      0|        const char * e = "keys (%d) / patterns (%d) length mismatch in mapping pattern";
 6339|      0|        return _PyCompile_Error(c, LOC(p), e, size, npatterns);
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6340|      0|    }
 6341|       |    // We have a double-star target if "rest" is set
 6342|     15|    PyObject *star_target = p->v.MatchMapping.rest;
 6343|       |    // We need to keep the subject on top during the mapping and length checks:
 6344|     15|    pc->on_top++;
 6345|     15|    ADDOP(c, LOC(p), MATCH_MAPPING);
  ------------------
  |  |  294|     15|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     15|    do {                    \
  |  |  |  |   52|     15|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 15]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     15|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 15]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6346|     15|    RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|     15|    do {                    \
  |  |   52|     15|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 15]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     15|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 15]
  |  |  ------------------
  ------------------
 6347|     15|    if (!size && !star_target) {
  ------------------
  |  Branch (6347:9): [True: 6, False: 9]
  |  Branch (6347:18): [True: 6, False: 0]
  ------------------
 6348|       |        // If the pattern is just "{}", we're done! Pop the subject:
 6349|      6|        pc->on_top--;
 6350|      6|        ADDOP(c, LOC(p), POP_TOP);
  ------------------
  |  |  294|      6|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      6|    do {                    \
  |  |  |  |   52|      6|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6351|      6|        return SUCCESS;
  ------------------
  |  |   47|      6|#define SUCCESS 0
  ------------------
 6352|      6|    }
 6353|      9|    if (size) {
  ------------------
  |  Branch (6353:9): [True: 9, False: 0]
  ------------------
 6354|       |        // If the pattern has any keys in it, perform a length check:
 6355|      9|        ADDOP(c, LOC(p), GET_LEN);
  ------------------
  |  |  294|      9|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      9|    do {                    \
  |  |  |  |   52|      9|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      9|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6356|      9|        ADDOP_LOAD_CONST_NEW(c, LOC(p), PyLong_FromSsize_t(size));
  ------------------
  |  |  329|      9|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      9|    do {                    \
  |  |  |  |   52|      9|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      9|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6357|      9|        ADDOP_COMPARE(c, LOC(p), GtE);
  ------------------
  |  |  438|      9|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|      9|    do {                    \
  |  |  |  |   52|      9|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      9|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6358|      9|        RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|      9|    do {                    \
  |  |   52|      9|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      9|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  ------------------
  ------------------
 6359|      9|    }
 6360|      9|    if (INT_MAX < size - 1) {
  ------------------
  |  Branch (6360:9): [True: 0, False: 9]
  ------------------
 6361|      0|        return _PyCompile_Error(c, LOC(p), "too many sub-patterns in mapping pattern");
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6362|      0|    }
 6363|       |    // Collect all of the keys into a tuple for MATCH_KEYS and
 6364|       |    // **rest. They can either be dotted names or literals:
 6365|       |
 6366|       |    // Maintaining a set of Constant_kind kind keys allows us to raise a
 6367|       |    // SyntaxError in the case of duplicates.
 6368|      9|    PyObject *seen = PySet_New(NULL);
 6369|      9|    if (seen == NULL) {
  ------------------
  |  Branch (6369:9): [True: 0, False: 9]
  ------------------
 6370|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 6371|      0|    }
 6372|     34|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (6372:28): [True: 27, False: 7]
  ------------------
 6373|     27|        if (codegen_pattern_mapping_key(c, seen, p, i) < 0) {
  ------------------
  |  Branch (6373:13): [True: 2, False: 25]
  ------------------
 6374|      2|            Py_DECREF(seen);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6375|      2|            return ERROR;
  ------------------
  |  |   48|      2|#define ERROR -1
  ------------------
 6376|      2|        }
 6377|     27|    }
 6378|      7|    Py_DECREF(seen);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6379|       |
 6380|       |    // all keys have been checked; there are no duplicates
 6381|       |
 6382|      7|    ADDOP_I(c, LOC(p), BUILD_TUPLE, size);
  ------------------
  |  |  280|      7|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6383|      7|    ADDOP(c, LOC(p), MATCH_KEYS);
  ------------------
  |  |  294|      7|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6384|       |    // There's now a tuple of keys and a tuple of values on top of the subject:
 6385|      7|    pc->on_top += 2;
 6386|      7|    ADDOP_I(c, LOC(p), COPY, 1);
  ------------------
  |  |  280|      7|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6387|      7|    ADDOP_LOAD_CONST(c, LOC(p), Py_None);
  ------------------
  |  |  311|      7|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6388|      7|    ADDOP_I(c, LOC(p), IS_OP, 1);
  ------------------
  |  |  280|      7|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6389|      7|    RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|      7|    do {                    \
  |  |   52|      7|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      7|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  ------------------
  ------------------
 6390|       |    // So far so good. Use that tuple of values on the stack to match
 6391|       |    // sub-patterns against:
 6392|      7|    ADDOP_I(c, LOC(p), UNPACK_SEQUENCE, size);
  ------------------
  |  |  280|      7|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6393|      7|    pc->on_top += size - 1;
 6394|     25|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (6394:28): [True: 18, False: 7]
  ------------------
 6395|     18|        pc->on_top--;
 6396|     18|        pattern_ty pattern = asdl_seq_GET(patterns, i);
  ------------------
  |  |   82|     18|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     18|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6397|     18|        RETURN_IF_ERROR(codegen_pattern_subpattern(c, pattern, pc));
  ------------------
  |  |   51|     18|    do {                    \
  |  |   52|     18|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 18]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     18|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
 6398|     18|    }
 6399|       |    // If we get this far, it's a match! Whatever happens next should consume
 6400|       |    // the tuple of keys and the subject:
 6401|      7|    pc->on_top -= 2;
 6402|      7|    if (star_target) {
  ------------------
  |  Branch (6402:9): [True: 0, False: 7]
  ------------------
 6403|       |        // If we have a starred name, bind a dict of remaining items to it (this may
 6404|       |        // seem a bit inefficient, but keys is rarely big enough to actually impact
 6405|       |        // runtime):
 6406|       |        // rest = dict(TOS1)
 6407|       |        // for key in TOS:
 6408|       |        //     del rest[key]
 6409|      0|        ADDOP_I(c, LOC(p), BUILD_MAP, 0);           // [subject, keys, empty]
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6410|      0|        ADDOP_I(c, LOC(p), SWAP, 3);                // [empty, keys, subject]
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6411|      0|        ADDOP_I(c, LOC(p), DICT_UPDATE, 2);         // [copy, keys]
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6412|      0|        ADDOP_I(c, LOC(p), UNPACK_SEQUENCE, size);  // [copy, keys...]
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6413|      0|        while (size) {
  ------------------
  |  Branch (6413:16): [True: 0, False: 0]
  ------------------
 6414|      0|            ADDOP_I(c, LOC(p), COPY, 1 + size--);   // [copy, keys..., copy]
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6415|      0|            ADDOP_I(c, LOC(p), SWAP, 2);            // [copy, keys..., copy, key]
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6416|      0|            ADDOP(c, LOC(p), DELETE_SUBSCR);        // [copy, keys...]
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6417|      0|        }
 6418|      0|        RETURN_IF_ERROR(codegen_pattern_helper_store_name(c, LOC(p), star_target, pc));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 6419|      0|    }
 6420|      7|    else {
 6421|      7|        ADDOP(c, LOC(p), POP_TOP);  // Tuple of keys.
  ------------------
  |  |  294|      7|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6422|      7|        ADDOP(c, LOC(p), POP_TOP);  // Subject.
  ------------------
  |  |  294|      7|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      7|    do {                    \
  |  |  |  |   52|      7|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      7|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6423|      7|    }
 6424|      7|    return SUCCESS;
  ------------------
  |  |   47|      7|#define SUCCESS 0
  ------------------
 6425|      7|}
codegen.c:codegen_pattern_mapping_key:
 6298|     27|{
 6299|     27|    asdl_expr_seq *keys = p->v.MatchMapping.keys;
 6300|     27|    asdl_pattern_seq *patterns = p->v.MatchMapping.patterns;
 6301|     27|    expr_ty key = asdl_seq_GET(keys, i);
  ------------------
  |  |   82|     27|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     27|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6302|     27|    if (key == NULL) {
  ------------------
  |  Branch (6302:9): [True: 0, False: 27]
  ------------------
 6303|      0|        const char *e = "can't use NULL keys in MatchMapping "
 6304|      0|                        "(set 'rest' parameter instead)";
 6305|      0|        location loc = LOC((pattern_ty) asdl_seq_GET(patterns, i));
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6306|      0|        return _PyCompile_Error(c, loc, e);
 6307|      0|    }
 6308|       |
 6309|     27|    if (key->kind == Constant_kind) {
  ------------------
  |  Branch (6309:9): [True: 27, False: 0]
  ------------------
 6310|     27|        int in_seen = PySet_Contains(seen, key->v.Constant.value);
 6311|     27|        RETURN_IF_ERROR(in_seen);
  ------------------
  |  |   51|     27|    do {                    \
  |  |   52|     27|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 27]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     27|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 27]
  |  |  ------------------
  ------------------
 6312|     27|        if (in_seen) {
  ------------------
  |  Branch (6312:13): [True: 2, False: 25]
  ------------------
 6313|      2|            const char *e = "mapping pattern checks duplicate key (%R)";
 6314|      2|            return _PyCompile_Error(c, LOC(p), e, key->v.Constant.value);
  ------------------
  |  |   88|      2|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      2|    (_Py_SourceLocation){ \
  |  |  |  |   59|      2|               .lineno = (n)->lineno, \
  |  |  |  |   60|      2|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      2|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      2|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6315|      2|        }
 6316|     25|        RETURN_IF_ERROR(PySet_Add(seen, key->v.Constant.value));
  ------------------
  |  |   51|     25|    do {                    \
  |  |   52|     25|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 25]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     25|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
 6317|     25|    }
 6318|      0|    else if (key->kind != Attribute_kind) {
  ------------------
  |  Branch (6318:14): [True: 0, False: 0]
  ------------------
 6319|      0|        const char *e = "mapping pattern keys may only match literals and attribute lookups";
 6320|      0|        return _PyCompile_Error(c, LOC(p), e);
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6321|      0|    }
 6322|     25|    VISIT(c, expr, key);
  ------------------
  |  |  460|     25|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     25|    do {                    \
  |  |  |  |   52|     25|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     25|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6323|     25|    return SUCCESS;
  ------------------
  |  |   47|     25|#define SUCCESS 0
  ------------------
 6324|     25|}
codegen.c:codegen_pattern_helper_store_name:
 6051|  2.45k|{
 6052|  2.45k|    if (n == NULL) {
  ------------------
  |  Branch (6052:9): [True: 480, False: 1.97k]
  ------------------
 6053|    480|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|    480|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    480|    do {                    \
  |  |  |  |   52|    480|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 480]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    480|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 480]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6054|    480|        return SUCCESS;
  ------------------
  |  |   47|    480|#define SUCCESS 0
  ------------------
 6055|    480|    }
 6056|       |    // Can't assign to the same name twice:
 6057|  1.97k|    int duplicate = PySequence_Contains(pc->stores, n);
 6058|  1.97k|    RETURN_IF_ERROR(duplicate);
  ------------------
  |  |   51|  1.97k|    do {                    \
  |  |   52|  1.97k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.97k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.97k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.97k]
  |  |  ------------------
  ------------------
 6059|  1.97k|    if (duplicate) {
  ------------------
  |  Branch (6059:9): [True: 24, False: 1.95k]
  ------------------
 6060|     24|        return codegen_error_duplicate_store(c, loc, n);
 6061|     24|    }
 6062|       |    // Rotate this object underneath any items we need to preserve:
 6063|  1.95k|    Py_ssize_t rotations = pc->on_top + PyList_GET_SIZE(pc->stores) + 1;
  ------------------
  |  |   38|  1.95k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6064|  1.95k|    RETURN_IF_ERROR(codegen_pattern_helper_rotate(c, loc, rotations));
  ------------------
  |  |   51|  1.95k|    do {                    \
  |  |   52|  1.95k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.95k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.95k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.95k]
  |  |  ------------------
  ------------------
 6065|  1.95k|    RETURN_IF_ERROR(PyList_Append(pc->stores, n));
  ------------------
  |  |   51|  1.95k|    do {                    \
  |  |   52|  1.95k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.95k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.95k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.95k]
  |  |  ------------------
  ------------------
 6066|  1.95k|    return SUCCESS;
  ------------------
  |  |   47|  1.95k|#define SUCCESS 0
  ------------------
 6067|  1.95k|}
codegen.c:codegen_error_duplicate_store:
 6033|     24|{
 6034|     24|    return _PyCompile_Error(c, loc,
 6035|     24|        "multiple assignments to name %R in pattern", n);
 6036|     24|}
codegen.c:codegen_pattern_helper_rotate:
 6041|  1.95k|{
 6042|  11.2k|    while (1 < count) {
  ------------------
  |  Branch (6042:12): [True: 9.25k, False: 1.95k]
  ------------------
 6043|  9.25k|        ADDOP_I(c, loc, SWAP, count--);
  ------------------
  |  |  280|  9.25k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  9.25k|    do {                    \
  |  |  |  |   52|  9.25k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.25k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.25k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.25k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6044|  9.25k|    }
 6045|  1.95k|    return SUCCESS;
  ------------------
  |  |   47|  1.95k|#define SUCCESS 0
  ------------------
 6046|  1.95k|}
codegen.c:codegen_pattern_class:
 6227|    102|{
 6228|    102|    assert(p->kind == MatchClass_kind);
  ------------------
  |  Branch (6228:5): [True: 102, False: 0]
  ------------------
 6229|    102|    asdl_pattern_seq *patterns = p->v.MatchClass.patterns;
 6230|    102|    asdl_identifier_seq *kwd_attrs = p->v.MatchClass.kwd_attrs;
 6231|    102|    asdl_pattern_seq *kwd_patterns = p->v.MatchClass.kwd_patterns;
 6232|    102|    Py_ssize_t nargs = asdl_seq_LEN(patterns);
  ------------------
  |  |   83|    102|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    204|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 9, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6233|    102|    Py_ssize_t nattrs = asdl_seq_LEN(kwd_attrs);
  ------------------
  |  |   83|    102|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    204|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 79, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6234|    102|    Py_ssize_t nkwd_patterns = asdl_seq_LEN(kwd_patterns);
  ------------------
  |  |   83|    102|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    204|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 79, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6235|    102|    if (nattrs != nkwd_patterns) {
  ------------------
  |  Branch (6235:9): [True: 0, False: 102]
  ------------------
 6236|       |        // AST validator shouldn't let this happen, but if it does,
 6237|       |        // just fail, don't crash out of the interpreter
 6238|      0|        const char * e = "kwd_attrs (%d) / kwd_patterns (%d) length mismatch in class pattern";
 6239|      0|        return _PyCompile_Error(c, LOC(p), e, nattrs, nkwd_patterns);
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6240|      0|    }
 6241|    102|    if (INT_MAX < nargs || INT_MAX < nargs + nattrs - 1) {
  ------------------
  |  Branch (6241:9): [True: 0, False: 102]
  |  Branch (6241:28): [True: 0, False: 102]
  ------------------
 6242|      0|        const char *e = "too many sub-patterns in class pattern %R";
 6243|      0|        return _PyCompile_Error(c, LOC(p), e, p->v.MatchClass.cls);
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6244|      0|    }
 6245|    102|    if (nattrs) {
  ------------------
  |  Branch (6245:9): [True: 23, False: 79]
  ------------------
 6246|     23|        RETURN_IF_ERROR(validate_kwd_attrs(c, kwd_attrs, kwd_patterns));
  ------------------
  |  |   51|     23|    do {                    \
  |  |   52|     23|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 8, False: 15]
  |  |  ------------------
  |  |   53|      8|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      8|#define ERROR -1
  |  |  ------------------
  |  |   54|      8|        }                   \
  |  |   55|     23|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 15]
  |  |  ------------------
  ------------------
 6247|     23|    }
 6248|     94|    if (nargs + nattrs == 0) {
  ------------------
  |  Branch (6248:9): [True: 8, False: 86]
  ------------------
 6249|       |        // Fast path if there are no sub-patterns
 6250|      8|        VISIT(c, expr, p->v.MatchClass.cls);
  ------------------
  |  |  460|      8|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      8|    do {                    \
  |  |  |  |   52|      8|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      8|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6251|      8|        ADDOP_I(c, LOC(p), CALL_INTRINSIC_2, INTRINSIC_MATCH_CLASS_ISINSTANCE);
  ------------------
  |  |  280|      8|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      8|    do {                    \
  |  |  |  |   52|      8|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      8|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6252|      8|        RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|      8|    do {                    \
  |  |   52|      8|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 8]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 6253|      8|        return SUCCESS;
  ------------------
  |  |   47|      8|#define SUCCESS 0
  ------------------
 6254|      8|    }
 6255|     86|    VISIT(c, expr, p->v.MatchClass.cls);
  ------------------
  |  |  460|     86|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6256|     86|    PyObject *attr_names = PyTuple_New(nattrs);
 6257|     86|    if (attr_names == NULL) {
  ------------------
  |  Branch (6257:9): [True: 0, False: 86]
  ------------------
 6258|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 6259|      0|    }
 6260|     86|    Py_ssize_t i;
 6261|    115|    for (i = 0; i < nattrs; i++) {
  ------------------
  |  Branch (6261:17): [True: 29, False: 86]
  ------------------
 6262|     29|        PyObject *name = asdl_seq_GET(kwd_attrs, i);
  ------------------
  |  |   82|     29|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     29|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6263|     29|        PyTuple_SET_ITEM(attr_names, i, Py_NewRef(name));
  ------------------
  |  |   40|     29|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|     29|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     29|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6264|     29|    }
 6265|     86|    ADDOP_LOAD_CONST_NEW(c, LOC(p), attr_names);
  ------------------
  |  |  329|     86|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6266|     86|    ADDOP_I(c, LOC(p), MATCH_CLASS, nargs);
  ------------------
  |  |  280|     86|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6267|     86|    ADDOP_I(c, LOC(p), COPY, 1);
  ------------------
  |  |  280|     86|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6268|     86|    ADDOP_LOAD_CONST(c, LOC(p), Py_None);
  ------------------
  |  |  311|     86|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6269|     86|    ADDOP_I(c, LOC(p), IS_OP, 1);
  ------------------
  |  |  280|     86|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6270|       |    // TOS is now a tuple of (nargs + nattrs) attributes (or None):
 6271|     86|    pc->on_top++;
 6272|     86|    RETURN_IF_ERROR(jump_to_fail_pop(c, LOC(p), pc, POP_JUMP_IF_FALSE));
  ------------------
  |  |   51|     86|    do {                    \
  |  |   52|     86|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     86|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  ------------------
  ------------------
 6273|     86|    ADDOP_I(c, LOC(p), UNPACK_SEQUENCE, nargs + nattrs);
  ------------------
  |  |  280|     86|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     86|    do {                    \
  |  |  |  |   52|     86|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 86]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     86|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6274|     86|    pc->on_top += nargs + nattrs - 1;
 6275|    248|    for (i = 0; i < nargs + nattrs; i++) {
  ------------------
  |  Branch (6275:17): [True: 183, False: 65]
  ------------------
 6276|    183|        pc->on_top--;
 6277|    183|        pattern_ty pattern;
 6278|    183|        if (i < nargs) {
  ------------------
  |  Branch (6278:13): [True: 162, False: 21]
  ------------------
 6279|       |            // Positional:
 6280|    162|            pattern = asdl_seq_GET(patterns, i);
  ------------------
  |  |   82|    162|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    162|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6281|    162|        }
 6282|     21|        else {
 6283|       |            // Keyword:
 6284|     21|            pattern = asdl_seq_GET(kwd_patterns, i - nargs);
  ------------------
  |  |   82|     21|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     21|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6285|     21|        }
 6286|    183|        if (WILDCARD_CHECK(pattern)) {
  ------------------
  |  | 5963|    183|    ((N)->kind == MatchAs_kind && !(N)->v.MatchAs.name)
  |  |  ------------------
  |  |  |  Branch (5963:6): [True: 110, False: 73]
  |  |  |  Branch (5963:35): [True: 3, False: 107]
  |  |  ------------------
  ------------------
 6287|      3|            ADDOP(c, LOC(p), POP_TOP);
  ------------------
  |  |  294|      3|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      3|    do {                    \
  |  |  |  |   52|      3|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      3|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6288|      3|            continue;
 6289|      3|        }
 6290|    180|        RETURN_IF_ERROR(codegen_pattern_subpattern(c, pattern, pc));
  ------------------
  |  |   51|    180|    do {                    \
  |  |   52|    180|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 21, False: 159]
  |  |  ------------------
  |  |   53|     21|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     21|#define ERROR -1
  |  |  ------------------
  |  |   54|     21|        }                   \
  |  |   55|    180|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 159]
  |  |  ------------------
  ------------------
 6291|    180|    }
 6292|       |    // Success! Pop the tuple of attributes:
 6293|     65|    return SUCCESS;
  ------------------
  |  |   47|     65|#define SUCCESS 0
  ------------------
 6294|     86|}
codegen.c:validate_kwd_attrs:
 6207|     23|{
 6208|       |    // Any errors will point to the pattern rather than the arg name as the
 6209|       |    // parser is only supplying identifiers rather than Name or keyword nodes
 6210|     23|    Py_ssize_t nattrs = asdl_seq_LEN(attrs);
  ------------------
  |  |   83|     23|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     46|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6211|     60|    for (Py_ssize_t i = 0; i < nattrs; i++) {
  ------------------
  |  Branch (6211:28): [True: 45, False: 15]
  ------------------
 6212|     45|        identifier attr = ((identifier)asdl_seq_GET(attrs, i));
  ------------------
  |  |   82|     45|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     45|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6213|    136|        for (Py_ssize_t j = i + 1; j < nattrs; j++) {
  ------------------
  |  Branch (6213:36): [True: 99, False: 37]
  ------------------
 6214|     99|            identifier other = ((identifier)asdl_seq_GET(attrs, j));
  ------------------
  |  |   82|     99|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|     99|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6215|     99|            if (!PyUnicode_Compare(attr, other)) {
  ------------------
  |  Branch (6215:17): [True: 8, False: 91]
  ------------------
 6216|      8|                location loc = LOC((pattern_ty) asdl_seq_GET(patterns, j));
  ------------------
  |  |   88|      8|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      8|    (_Py_SourceLocation){ \
  |  |  |  |   59|      8|               .lineno = (n)->lineno, \
  |  |  |  |   60|      8|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      8|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      8|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6217|      8|                return _PyCompile_Error(c, loc, "attribute name repeated "
 6218|      8|                                                "in class pattern: %U", attr);
 6219|      8|            }
 6220|     99|        }
 6221|     45|    }
 6222|     15|    return SUCCESS;
  ------------------
  |  |   47|     15|#define SUCCESS 0
  ------------------
 6223|     23|}
codegen.c:codegen_pattern_star:
 6198|     16|{
 6199|     16|    assert(p->kind == MatchStar_kind);
  ------------------
  |  Branch (6199:5): [True: 16, False: 0]
  ------------------
 6200|     16|    RETURN_IF_ERROR(
  ------------------
  |  |   51|     16|    do {                    \
  |  |   52|     16|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 15]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|     16|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 15]
  |  |  ------------------
  ------------------
 6201|     16|        codegen_pattern_helper_store_name(c, LOC(p), p->v.MatchStar.name, pc));
 6202|     15|    return SUCCESS;
  ------------------
  |  |   47|     15|#define SUCCESS 0
  ------------------
 6203|     16|}
codegen.c:codegen_pattern_as:
 6172|  2.48k|{
 6173|  2.48k|    assert(p->kind == MatchAs_kind);
  ------------------
  |  Branch (6173:5): [True: 2.48k, False: 0]
  ------------------
 6174|  2.48k|    if (p->v.MatchAs.pattern == NULL) {
  ------------------
  |  Branch (6174:9): [True: 2.45k, False: 32]
  ------------------
 6175|       |        // An irrefutable match:
 6176|  2.45k|        if (!pc->allow_irrefutable) {
  ------------------
  |  Branch (6176:13): [True: 36, False: 2.41k]
  ------------------
 6177|     36|            if (p->v.MatchAs.name) {
  ------------------
  |  Branch (6177:17): [True: 33, False: 3]
  ------------------
 6178|     33|                const char *e = "name capture %R makes remaining patterns unreachable";
 6179|     33|                return _PyCompile_Error(c, LOC(p), e, p->v.MatchAs.name);
  ------------------
  |  |   88|     33|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     33|    (_Py_SourceLocation){ \
  |  |  |  |   59|     33|               .lineno = (n)->lineno, \
  |  |  |  |   60|     33|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     33|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     33|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6180|     33|            }
 6181|      3|            const char *e = "wildcard makes remaining patterns unreachable";
 6182|      3|            return _PyCompile_Error(c, LOC(p), e);
  ------------------
  |  |   88|      3|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      3|    (_Py_SourceLocation){ \
  |  |  |  |   59|      3|               .lineno = (n)->lineno, \
  |  |  |  |   60|      3|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      3|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      3|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6183|     36|        }
 6184|  2.41k|        return codegen_pattern_helper_store_name(c, LOC(p), p->v.MatchAs.name, pc);
  ------------------
  |  |   88|  2.41k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.41k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.41k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.41k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.41k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.41k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6185|  2.45k|    }
 6186|       |    // Need to make a copy for (possibly) storing later:
 6187|     32|    pc->on_top++;
 6188|     32|    ADDOP_I(c, LOC(p), COPY, 1);
  ------------------
  |  |  280|     32|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6189|     32|    RETURN_IF_ERROR(codegen_pattern(c, p->v.MatchAs.pattern, pc));
  ------------------
  |  |   51|     32|    do {                    \
  |  |   52|     32|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 3, False: 29]
  |  |  ------------------
  |  |   53|      3|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      3|#define ERROR -1
  |  |  ------------------
  |  |   54|      3|        }                   \
  |  |   55|     32|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 29]
  |  |  ------------------
  ------------------
 6190|       |    // Success! Store it:
 6191|     29|    pc->on_top--;
 6192|     29|    RETURN_IF_ERROR(codegen_pattern_helper_store_name(c, LOC(p), p->v.MatchAs.name, pc));
  ------------------
  |  |   51|     29|    do {                    \
  |  |   52|     29|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 4, False: 25]
  |  |  ------------------
  |  |   53|      4|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      4|#define ERROR -1
  |  |  ------------------
  |  |   54|      4|        }                   \
  |  |   55|     29|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
 6193|     25|    return SUCCESS;
  ------------------
  |  |   47|     25|#define SUCCESS 0
  ------------------
 6194|     29|}
codegen.c:codegen_pattern_or:
 6429|     83|{
 6430|     83|    assert(p->kind == MatchOr_kind);
  ------------------
  |  Branch (6430:5): [True: 83, False: 0]
  ------------------
 6431|     83|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|     83|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     83|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     83|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     83|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     83|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 83]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 6432|     83|    Py_ssize_t size = asdl_seq_LEN(p->v.MatchOr.patterns);
  ------------------
  |  |   83|     83|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    166|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6433|     83|    assert(size > 1);
  ------------------
  |  Branch (6433:5): [True: 83, False: 0]
  ------------------
 6434|       |    // We're going to be messing with pc. Keep the original info handy:
 6435|     83|    pattern_context old_pc = *pc;
 6436|     83|    Py_INCREF(pc->stores);
  ------------------
  |  |  310|     83|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     83|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     83|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6437|       |    // control is the list of names bound by the first alternative. It is used
 6438|       |    // for checking different name bindings in alternatives, and for correcting
 6439|       |    // the order in which extracted elements are placed on the stack.
 6440|     83|    PyObject *control = NULL;
 6441|       |    // NOTE: We can't use returning macros anymore! goto error on error.
 6442|    172|    for (Py_ssize_t i = 0; i < size; i++) {
  ------------------
  |  Branch (6442:28): [True: 139, False: 33]
  ------------------
 6443|    139|        pattern_ty alt = asdl_seq_GET(p->v.MatchOr.patterns, i);
  ------------------
  |  |   82|    139|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    139|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 6444|    139|        PyObject *pc_stores = PyList_New(0);
 6445|    139|        if (pc_stores == NULL) {
  ------------------
  |  Branch (6445:13): [True: 0, False: 139]
  ------------------
 6446|      0|            goto error;
 6447|      0|        }
 6448|    139|        Py_SETREF(pc->stores, pc_stores);
  ------------------
  |  |  354|    139|    do { \
  |  |  355|    139|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    139|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|    139|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    139|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|    139|        *_tmp_dst_ptr = (src); \
  |  |  358|    139|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|    139|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    139|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    139|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|    139|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 139]
  |  |  ------------------
  ------------------
 6449|       |        // An irrefutable sub-pattern must be last, if it is allowed at all:
 6450|    139|        pc->allow_irrefutable = (i == size - 1) && old_pc.allow_irrefutable;
  ------------------
  |  Branch (6450:33): [True: 50, False: 89]
  |  Branch (6450:52): [True: 50, False: 0]
  ------------------
 6451|    139|        pc->fail_pop = NULL;
 6452|    139|        pc->fail_pop_size = 0;
 6453|    139|        pc->on_top = 0;
 6454|    139|        if (codegen_addop_i(INSTR_SEQUENCE(c), COPY, 1, LOC(alt)) < 0 ||
  ------------------
  |  |   68|    139|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
                      if (codegen_addop_i(INSTR_SEQUENCE(c), COPY, 1, LOC(alt)) < 0 ||
  ------------------
  |  |   70|    139|#define COPY                                    57
  ------------------
                      if (codegen_addop_i(INSTR_SEQUENCE(c), COPY, 1, LOC(alt)) < 0 ||
  ------------------
  |  |   88|    139|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    139|    (_Py_SourceLocation){ \
  |  |  |  |   59|    139|               .lineno = (n)->lineno, \
  |  |  |  |   60|    139|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    139|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    139|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (6454:13): [True: 0, False: 139]
  ------------------
 6455|    139|            codegen_pattern(c, alt, pc) < 0) {
  ------------------
  |  Branch (6455:13): [True: 37, False: 102]
  ------------------
 6456|     37|            goto error;
 6457|     37|        }
 6458|       |        // Success!
 6459|    102|        Py_ssize_t nstores = PyList_GET_SIZE(pc->stores);
  ------------------
  |  |   38|    102|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    102|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    102|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6460|    102|        if (!i) {
  ------------------
  |  Branch (6460:13): [True: 51, False: 51]
  ------------------
 6461|       |            // This is the first alternative, so save its stores as a "control"
 6462|       |            // for the others (they can't bind a different set of names, and
 6463|       |            // might need to be reordered):
 6464|     51|            assert(control == NULL);
  ------------------
  |  Branch (6464:13): [True: 51, False: 0]
  ------------------
 6465|     51|            control = Py_NewRef(pc->stores);
  ------------------
  |  |  550|     51|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6466|     51|        }
 6467|     51|        else if (nstores != PyList_GET_SIZE(control)) {
  ------------------
  |  |   38|     51|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     51|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     51|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6467:18): [True: 8, False: 43]
  ------------------
 6468|      8|            goto diff;
 6469|      8|        }
 6470|     43|        else if (nstores) {
  ------------------
  |  Branch (6470:18): [True: 6, False: 37]
  ------------------
 6471|       |            // There were captures. Check to see if we differ from control:
 6472|      6|            Py_ssize_t icontrol = nstores;
 6473|      8|            while (icontrol--) {
  ------------------
  |  Branch (6473:20): [True: 7, False: 1]
  ------------------
 6474|      7|                PyObject *name = PyList_GET_ITEM(control, icontrol);
  ------------------
  |  |   40|      7|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      7|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6474:34): [True: 7, False: 0]
  ------------------
 6475|      0|                Py_ssize_t istores = PySequence_Index(pc->stores, name);
 6476|      7|                if (istores < 0) {
  ------------------
  |  Branch (6476:21): [True: 5, False: 2]
  ------------------
 6477|      5|                    PyErr_Clear();
 6478|      5|                    goto diff;
 6479|      5|                }
 6480|      2|                if (icontrol != istores) {
  ------------------
  |  Branch (6480:21): [True: 0, False: 2]
  ------------------
 6481|       |                    // Reorder the names on the stack to match the order of the
 6482|       |                    // names in control. There's probably a better way of doing
 6483|       |                    // this; the current solution is potentially very
 6484|       |                    // inefficient when each alternative subpattern binds lots
 6485|       |                    // of names in different orders. It's fine for reasonable
 6486|       |                    // cases, though, and the peephole optimizer will ensure
 6487|       |                    // that the final code is as efficient as possible.
 6488|      0|                    assert(istores < icontrol);
  ------------------
  |  Branch (6488:21): [True: 0, False: 0]
  ------------------
 6489|      0|                    Py_ssize_t rotations = istores + 1;
 6490|       |                    // Perform the same rotation on pc->stores:
 6491|      0|                    PyObject *rotated = PyList_GetSlice(pc->stores, 0,
 6492|      0|                                                        rotations);
 6493|      0|                    if (rotated == NULL ||
  ------------------
  |  Branch (6493:25): [True: 0, False: 0]
  ------------------
 6494|      0|                        PyList_SetSlice(pc->stores, 0, rotations, NULL) ||
  ------------------
  |  Branch (6494:25): [True: 0, False: 0]
  ------------------
 6495|      0|                        PyList_SetSlice(pc->stores, icontrol - istores,
  ------------------
  |  Branch (6495:25): [True: 0, False: 0]
  ------------------
 6496|      0|                                        icontrol - istores, rotated))
 6497|      0|                    {
 6498|      0|                        Py_XDECREF(rotated);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6499|      0|                        goto error;
 6500|      0|                    }
 6501|      0|                    Py_DECREF(rotated);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6502|       |                    // That just did:
 6503|       |                    // rotated = pc_stores[:rotations]
 6504|       |                    // del pc_stores[:rotations]
 6505|       |                    // pc_stores[icontrol-istores:icontrol-istores] = rotated
 6506|       |                    // Do the same thing to the stack, using several
 6507|       |                    // rotations:
 6508|      0|                    while (rotations--) {
  ------------------
  |  Branch (6508:28): [True: 0, False: 0]
  ------------------
 6509|      0|                        if (codegen_pattern_helper_rotate(c, LOC(alt), icontrol + 1) < 0) {
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (6509:29): [True: 0, False: 0]
  ------------------
 6510|      0|                            goto error;
 6511|      0|                        }
 6512|      0|                    }
 6513|      0|                }
 6514|      2|            }
 6515|      6|        }
 6516|    102|        assert(control);
  ------------------
  |  Branch (6516:9): [True: 89, False: 0]
  ------------------
 6517|     89|        if (codegen_addop_j(INSTR_SEQUENCE(c), LOC(alt), JUMP, end) < 0 ||
  ------------------
  |  |   68|     89|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
                      if (codegen_addop_j(INSTR_SEQUENCE(c), LOC(alt), JUMP, end) < 0 ||
  ------------------
  |  |   88|     89|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     89|    (_Py_SourceLocation){ \
  |  |  |  |   59|     89|               .lineno = (n)->lineno, \
  |  |  |  |   60|     89|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     89|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     89|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
                      if (codegen_addop_j(INSTR_SEQUENCE(c), LOC(alt), JUMP, end) < 0 ||
  ------------------
  |  |  245|     89|#define JUMP                                   257
  ------------------
  |  Branch (6517:13): [True: 0, False: 89]
  ------------------
 6518|     89|            emit_and_reset_fail_pop(c, LOC(alt), pc) < 0)
  ------------------
  |  |   88|     89|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     89|    (_Py_SourceLocation){ \
  |  |  |  |   59|     89|               .lineno = (n)->lineno, \
  |  |  |  |   60|     89|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     89|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     89|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (6518:13): [True: 0, False: 89]
  ------------------
 6519|      0|        {
 6520|      0|            goto error;
 6521|      0|        }
 6522|     89|    }
 6523|     33|    Py_DECREF(pc->stores);
  ------------------
  |  |  430|     33|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6524|     33|    *pc = old_pc;
 6525|     33|    Py_INCREF(pc->stores);
  ------------------
  |  |  310|     33|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6526|       |    // Need to NULL this for the PyMem_Free call in the error block.
 6527|     33|    old_pc.fail_pop = NULL;
 6528|       |    // No match. Pop the remaining copy of the subject and fail:
 6529|     33|    if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, LOC(p)) < 0 ||
  ------------------
  |  |   68|     33|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
                  if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, LOC(p)) < 0 ||
  ------------------
  |  |   42|     33|#define POP_TOP                                 29
  ------------------
                  if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, LOC(p)) < 0 ||
  ------------------
  |  |   88|     33|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     33|    (_Py_SourceLocation){ \
  |  |  |  |   59|     33|               .lineno = (n)->lineno, \
  |  |  |  |   60|     33|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     33|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     33|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (6529:9): [True: 0, False: 33]
  ------------------
 6530|     33|        jump_to_fail_pop(c, LOC(p), pc, JUMP) < 0) {
  ------------------
  |  |   88|     33|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     33|    (_Py_SourceLocation){ \
  |  |  |  |   59|     33|               .lineno = (n)->lineno, \
  |  |  |  |   60|     33|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     33|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     33|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
                      jump_to_fail_pop(c, LOC(p), pc, JUMP) < 0) {
  ------------------
  |  |  245|     33|#define JUMP                                   257
  ------------------
  |  Branch (6530:9): [True: 0, False: 33]
  ------------------
 6531|      0|        goto error;
 6532|      0|    }
 6533|       |
 6534|     33|    USE_LABEL(c, end);
  ------------------
  |  |  100|     33|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     33|    do {                    \
  |  |  |  |   52|     33|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 33]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     33|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 33]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6535|     33|    Py_ssize_t nstores = PyList_GET_SIZE(control);
  ------------------
  |  |   38|     33|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6536|       |    // There's a bunch of stuff on the stack between where the new stores
 6537|       |    // are and where they need to be:
 6538|       |    // - The other stores.
 6539|       |    // - A copy of the subject.
 6540|       |    // - Anything else that may be on top of the stack.
 6541|       |    // - Any previous stores we've already stashed away on the stack.
 6542|     33|    Py_ssize_t nrots = nstores + 1 + pc->on_top + PyList_GET_SIZE(pc->stores);
  ------------------
  |  |   38|     33|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6543|     35|    for (Py_ssize_t i = 0; i < nstores; i++) {
  ------------------
  |  Branch (6543:28): [True: 2, False: 33]
  ------------------
 6544|       |        // Rotate this capture to its proper place on the stack:
 6545|      2|        if (codegen_pattern_helper_rotate(c, LOC(p), nrots) < 0) {
  ------------------
  |  |   88|      2|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      2|    (_Py_SourceLocation){ \
  |  |  |  |   59|      2|               .lineno = (n)->lineno, \
  |  |  |  |   60|      2|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      2|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      2|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (6545:13): [True: 0, False: 2]
  ------------------
 6546|      0|            goto error;
 6547|      0|        }
 6548|       |        // Update the list of previous stores with this new name, checking for
 6549|       |        // duplicates:
 6550|      2|        PyObject *name = PyList_GET_ITEM(control, i);
  ------------------
  |  |   40|      2|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      2|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (6550:26): [True: 2, False: 0]
  ------------------
 6551|      0|        int dupe = PySequence_Contains(pc->stores, name);
 6552|      2|        if (dupe < 0) {
  ------------------
  |  Branch (6552:13): [True: 0, False: 2]
  ------------------
 6553|      0|            goto error;
 6554|      0|        }
 6555|      2|        if (dupe) {
  ------------------
  |  Branch (6555:13): [True: 0, False: 2]
  ------------------
 6556|      0|            codegen_error_duplicate_store(c, LOC(p), name);
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6557|      0|            goto error;
 6558|      0|        }
 6559|      2|        if (PyList_Append(pc->stores, name)) {
  ------------------
  |  Branch (6559:13): [True: 0, False: 2]
  ------------------
 6560|      0|            goto error;
 6561|      0|        }
 6562|      2|    }
 6563|     33|    Py_DECREF(old_pc.stores);
  ------------------
  |  |  430|     33|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6564|     33|    Py_DECREF(control);
  ------------------
  |  |  430|     33|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6565|       |    // NOTE: Returning macros are safe again.
 6566|       |    // Pop the copy of the subject:
 6567|     33|    ADDOP(c, LOC(p), POP_TOP);
  ------------------
  |  |  294|     33|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     33|    do {                    \
  |  |  |  |   52|     33|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 33]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     33|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 33]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6568|     33|    return SUCCESS;
  ------------------
  |  |   47|     33|#define SUCCESS 0
  ------------------
 6569|     13|diff:
 6570|     13|    _PyCompile_Error(c, LOC(p), "alternative patterns bind different names");
  ------------------
  |  |   88|     13|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     13|    (_Py_SourceLocation){ \
  |  |  |  |   59|     13|               .lineno = (n)->lineno, \
  |  |  |  |   60|     13|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     13|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     13|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 6571|     50|error:
 6572|     50|    PyMem_Free(old_pc.fail_pop);
 6573|     50|    Py_DECREF(old_pc.stores);
  ------------------
  |  |  430|     50|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6574|     50|    Py_XDECREF(control);
  ------------------
  |  |  524|     50|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     50|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     50|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6575|     50|    return ERROR;
  ------------------
  |  |   48|     50|#define ERROR -1
  ------------------
 6576|     13|}
codegen.c:ensure_fail_pop:
 5975|  2.22k|{
 5976|  2.22k|    Py_ssize_t size = n + 1;
 5977|  2.22k|    if (size <= pc->fail_pop_size) {
  ------------------
  |  Branch (5977:9): [True: 1.04k, False: 1.17k]
  ------------------
 5978|  1.04k|        return SUCCESS;
  ------------------
  |  |   47|  1.04k|#define SUCCESS 0
  ------------------
 5979|  1.04k|    }
 5980|  1.17k|    Py_ssize_t needed = sizeof(jump_target_label) * size;
 5981|  1.17k|    jump_target_label *resized = PyMem_Realloc(pc->fail_pop, needed);
 5982|  1.17k|    if (resized == NULL) {
  ------------------
  |  Branch (5982:9): [True: 0, False: 1.17k]
  ------------------
 5983|      0|        PyErr_NoMemory();
 5984|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 5985|      0|    }
 5986|  1.17k|    pc->fail_pop = resized;
 5987|  4.26k|    while (pc->fail_pop_size < size) {
  ------------------
  |  Branch (5987:12): [True: 3.09k, False: 1.17k]
  ------------------
 5988|  3.09k|        NEW_JUMP_TARGET_LABEL(c, new_block);
  ------------------
  |  |   94|  3.09k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  3.09k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  3.09k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  3.09k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  3.09k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 3.09k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5989|  3.09k|        pc->fail_pop[pc->fail_pop_size++] = new_block;
 5990|  3.09k|    }
 5991|  1.17k|    return SUCCESS;
  ------------------
  |  |   47|  1.17k|#define SUCCESS 0
  ------------------
 5992|  1.17k|}
codegen.c:emit_and_reset_fail_pop:
 6011|    889|{
 6012|    889|    if (!pc->fail_pop_size) {
  ------------------
  |  Branch (6012:9): [True: 17, False: 872]
  ------------------
 6013|     17|        assert(pc->fail_pop == NULL);
  ------------------
  |  Branch (6013:9): [True: 17, False: 0]
  ------------------
 6014|     17|        return SUCCESS;
  ------------------
  |  |   47|     17|#define SUCCESS 0
  ------------------
 6015|     17|    }
 6016|  1.92k|    while (--pc->fail_pop_size) {
  ------------------
  |  Branch (6016:12): [True: 1.05k, False: 872]
  ------------------
 6017|  1.05k|        USE_LABEL(c, pc->fail_pop[pc->fail_pop_size]);
  ------------------
  |  |  100|  1.05k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.05k|    do {                    \
  |  |  |  |   52|  1.05k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.05k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6018|  1.05k|        if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, loc) < 0) {
  ------------------
  |  |   68|  1.05k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
                      if (codegen_addop_noarg(INSTR_SEQUENCE(c), POP_TOP, loc) < 0) {
  ------------------
  |  |   42|  1.05k|#define POP_TOP                                 29
  ------------------
  |  Branch (6018:13): [True: 0, False: 1.05k]
  ------------------
 6019|      0|            pc->fail_pop_size = 0;
 6020|      0|            PyMem_Free(pc->fail_pop);
 6021|      0|            pc->fail_pop = NULL;
 6022|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 6023|      0|        }
 6024|  1.05k|    }
 6025|    872|    USE_LABEL(c, pc->fail_pop[0]);
  ------------------
  |  |  100|    872|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    872|    do {                    \
  |  |  |  |   52|    872|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 872]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    872|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 872]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6026|    872|    PyMem_Free(pc->fail_pop);
 6027|    872|    pc->fail_pop = NULL;
 6028|    872|    return SUCCESS;
  ------------------
  |  |   47|    872|#define SUCCESS 0
  ------------------
 6029|    872|}
codegen.c:codegen_try:
 2867|  2.50k|codegen_try(compiler *c, stmt_ty s) {
 2868|  2.50k|    if (s->v.Try.finalbody && asdl_seq_LEN(s->v.Try.finalbody))
  ------------------
  |  |   83|  2.06k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.13k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 2.06k, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2868:9): [True: 2.06k, False: 440]
  ------------------
 2869|  2.06k|        return codegen_try_finally(c, s);
 2870|    440|    else
 2871|    440|        return codegen_try_except(c, s);
 2872|  2.50k|}
codegen.c:codegen_try_finally:
 2387|  2.06k|{
 2388|  2.06k|    location loc = LOC(s);
  ------------------
  |  |   88|  2.06k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.06k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.06k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.06k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.06k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.06k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2389|       |
 2390|  2.06k|    NEW_JUMP_TARGET_LABEL(c, body);
  ------------------
  |  |   94|  2.06k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.06k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.06k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.06k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.06k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.06k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2391|  2.06k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  2.06k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.06k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.06k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.06k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.06k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.06k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2392|  2.06k|    NEW_JUMP_TARGET_LABEL(c, exit);
  ------------------
  |  |   94|  2.06k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.06k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.06k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.06k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.06k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.06k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2393|  2.06k|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|  2.06k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.06k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.06k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.06k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.06k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.06k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2394|       |
 2395|       |    /* `try` block */
 2396|  2.06k|    ADDOP_JUMP(c, loc, SETUP_FINALLY, end);
  ------------------
  |  |  435|  2.06k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.06k|    do {                    \
  |  |  |  |   52|  2.06k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.06k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.06k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2397|       |
 2398|  2.06k|    USE_LABEL(c, body);
  ------------------
  |  |  100|  2.06k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.06k|    do {                    \
  |  |  |  |   52|  2.06k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.06k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.06k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2399|  2.06k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.06k|    do {                    \
  |  |   52|  2.06k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.06k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.06k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.06k]
  |  |  ------------------
  ------------------
 2400|  2.06k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_FINALLY_TRY, body, end,
 2401|  2.06k|                              s->v.Try.finalbody));
 2402|       |
 2403|  2.06k|    if (s->v.Try.handlers && asdl_seq_LEN(s->v.Try.handlers)) {
  ------------------
  |  |   83|    761|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.52k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 761, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 761]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2403:9): [True: 761, False: 1.30k]
  ------------------
 2404|    761|        RETURN_IF_ERROR(codegen_try_except(c, s));
  ------------------
  |  |   51|    761|    do {                    \
  |  |   52|    761|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 2, False: 759]
  |  |  ------------------
  |  |   53|      2|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      2|#define ERROR -1
  |  |  ------------------
  |  |   54|      2|        }                   \
  |  |   55|    761|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 759]
  |  |  ------------------
  ------------------
 2405|    761|    }
 2406|  1.30k|    else {
 2407|  1.30k|        VISIT_SEQ(c, stmt, s->v.Try.body);
  ------------------
  |  |  466|  1.30k|    do {                                                                    \
  |  |  467|  1.30k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  2.64k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  2.64k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.28k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.64k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.34k, False: 1.30k]
  |  |  ------------------
  |  |  469|  1.34k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.34k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.34k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.34k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.34k|    do {                    \
  |  |  |  |   52|  1.34k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 8, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   53|      8|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      8|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      8|        }                   \
  |  |  |  |   55|  1.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.33k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.34k|        }                                                                   \
  |  |  472|  1.30k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.30k]
  |  |  ------------------
  ------------------
 2408|  1.30k|    }
 2409|  2.05k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  2.05k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.05k|    do {                    \
  |  |  |  |   52|  2.05k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.05k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2410|  2.05k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_FINALLY_TRY, body);
 2411|  2.05k|    VISIT_SEQ(c, stmt, s->v.Try.finalbody);
  ------------------
  |  |  466|  2.05k|    do {                                                                    \
  |  |  467|  2.05k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  7.02k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  7.02k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  14.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 4.99k, False: 2.03k]
  |  |  ------------------
  |  |  469|  4.99k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  4.99k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.99k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  4.99k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  4.99k|    do {                    \
  |  |  |  |   52|  4.99k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 26, False: 4.97k]
  |  |  |  |  ------------------
  |  |  |  |   53|     26|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     26|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     26|        }                   \
  |  |  |  |   55|  4.99k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.97k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  4.99k|        }                                                                   \
  |  |  472|  2.05k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 2412|       |
 2413|  2.03k|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, exit);
  ------------------
  |  |  435|  2.03k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2414|       |    /* `finally` block */
 2415|       |
 2416|  2.03k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  2.03k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2417|       |
 2418|  2.03k|    loc = NO_LOCATION;
 2419|  2.03k|    ADDOP_JUMP(c, loc, SETUP_CLEANUP, cleanup);
  ------------------
  |  |  435|  2.03k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2420|  2.03k|    ADDOP(c, loc, PUSH_EXC_INFO);
  ------------------
  |  |  294|  2.03k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2421|  2.03k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.03k|    do {                    \
  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.03k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 2422|  2.03k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_FINALLY_END, end, NO_LABEL, NULL));
 2423|  2.03k|    VISIT_SEQ(c, stmt, s->v.Try.finalbody);
  ------------------
  |  |  466|  2.03k|    do {                                                                    \
  |  |  467|  2.03k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  6.98k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  6.98k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 4.94k, False: 2.03k]
  |  |  ------------------
  |  |  469|  4.94k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  4.94k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.94k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  4.94k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  4.94k|    do {                    \
  |  |  |  |   52|  4.94k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.94k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.94k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  4.94k|        }                                                                   \
  |  |  472|  2.03k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 2.03k]
  |  |  ------------------
  ------------------
 2424|  2.03k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_FINALLY_END, end);
 2425|       |
 2426|  2.03k|    loc = NO_LOCATION;
 2427|  2.03k|    ADDOP_I(c, loc, RERAISE, 0);
  ------------------
  |  |  280|  2.03k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2428|       |
 2429|  2.03k|    USE_LABEL(c, cleanup);
  ------------------
  |  |  100|  2.03k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2430|  2.03k|    POP_EXCEPT_AND_RERAISE(c, loc);
  ------------------
  |  |  450|  2.03k|    RETURN_IF_ERROR(codegen_pop_except_and_reraise((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2431|       |
 2432|  2.03k|    USE_LABEL(c, exit);
  ------------------
  |  |  100|  2.03k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2433|  2.03k|    return SUCCESS;
  ------------------
  |  |   47|  2.03k|#define SUCCESS 0
  ------------------
 2434|  2.03k|}
codegen.c:codegen_pop_except_and_reraise:
  526|  16.0k|{
  527|       |    /* Stack contents
  528|       |     * [exc_info, lasti, exc]            COPY        3
  529|       |     * [exc_info, lasti, exc, exc_info]  POP_EXCEPT
  530|       |     * [exc_info, lasti, exc]            RERAISE      1
  531|       |     * (exception_unwind clears the stack)
  532|       |     */
  533|       |
  534|  16.0k|    ADDOP_I(c, loc, COPY, 3);
  ------------------
  |  |  280|  16.0k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  16.0k|    do {                    \
  |  |  |  |   52|  16.0k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.0k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  535|  16.0k|    ADDOP(c, loc, POP_EXCEPT);
  ------------------
  |  |  294|  16.0k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  16.0k|    do {                    \
  |  |  |  |   52|  16.0k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.0k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|  16.0k|    ADDOP_I(c, loc, RERAISE, 1);
  ------------------
  |  |  280|  16.0k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  16.0k|    do {                    \
  |  |  |  |   52|  16.0k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.0k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|  16.0k|    return SUCCESS;
  ------------------
  |  |   47|  16.0k|#define SUCCESS 0
  ------------------
  538|  16.0k|}
codegen.c:codegen_try_except:
 2518|  1.20k|{
 2519|  1.20k|    location loc = LOC(s);
  ------------------
  |  |   88|  1.20k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.20k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.20k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.20k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.20k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.20k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2520|  1.20k|    Py_ssize_t i, n;
 2521|       |
 2522|  1.20k|    NEW_JUMP_TARGET_LABEL(c, body);
  ------------------
  |  |   94|  1.20k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.20k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.20k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.20k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.20k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2523|  1.20k|    NEW_JUMP_TARGET_LABEL(c, except);
  ------------------
  |  |   94|  1.20k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.20k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.20k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.20k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.20k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2524|  1.20k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  1.20k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.20k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.20k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.20k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.20k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2525|  1.20k|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|  1.20k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.20k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.20k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.20k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.20k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2526|       |
 2527|  1.20k|    ADDOP_JUMP(c, loc, SETUP_FINALLY, except);
  ------------------
  |  |  435|  1.20k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.20k|    do {                    \
  |  |  |  |   52|  1.20k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.20k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2528|       |
 2529|  1.20k|    USE_LABEL(c, body);
  ------------------
  |  |  100|  1.20k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.20k|    do {                    \
  |  |  |  |   52|  1.20k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.20k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2530|  1.20k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.20k|    do {                    \
  |  |   52|  1.20k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.20k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.20k]
  |  |  ------------------
  ------------------
 2531|  1.20k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_TRY_EXCEPT, body, NO_LABEL, NULL));
 2532|  1.20k|    VISIT_SEQ(c, stmt, s->v.Try.body);
  ------------------
  |  |  466|  1.20k|    do {                                                                    \
  |  |  467|  1.20k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  2.45k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  2.45k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.91k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.45k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.25k, False: 1.19k]
  |  |  ------------------
  |  |  469|  1.25k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.25k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.25k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.25k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.25k|    do {                    \
  |  |  |  |   52|  1.25k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 1.25k]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|  1.25k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.25k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.25k|        }                                                                   \
  |  |  472|  1.20k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.19k]
  |  |  ------------------
  ------------------
 2533|  1.19k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_TRY_EXCEPT, body);
 2534|  1.19k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  1.19k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.19k|    do {                    \
  |  |  |  |   52|  1.19k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2535|  1.19k|    if (s->v.Try.orelse && asdl_seq_LEN(s->v.Try.orelse)) {
  ------------------
  |  |   83|     81|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    162|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 81, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 81]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2535:9): [True: 81, False: 1.11k]
  ------------------
 2536|     81|        VISIT_SEQ(c, stmt, s->v.Try.orelse);
  ------------------
  |  |  466|     81|    do {                                                                    \
  |  |  467|     81|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    334|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    334|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    668|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 334]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 254, False: 80]
  |  |  ------------------
  |  |  469|    254|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    254|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    254|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    254|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    254|    do {                    \
  |  |  |  |   52|    254|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 253]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    254|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 253]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    254|        }                                                                   \
  |  |  472|     81|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 80]
  |  |  ------------------
  ------------------
 2537|     81|    }
 2538|  1.19k|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|  1.19k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.19k|    do {                    \
  |  |  |  |   52|  1.19k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2539|  1.19k|    n = asdl_seq_LEN(s->v.Try.handlers);
  ------------------
  |  |   83|  1.19k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.39k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2540|       |
 2541|  1.19k|    USE_LABEL(c, except);
  ------------------
  |  |  100|  1.19k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.19k|    do {                    \
  |  |  |  |   52|  1.19k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2542|       |
 2543|  1.19k|    ADDOP_JUMP(c, NO_LOCATION, SETUP_CLEANUP, cleanup);
  ------------------
  |  |  435|  1.19k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.19k|    do {                    \
  |  |  |  |   52|  1.19k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2544|  1.19k|    ADDOP(c, NO_LOCATION, PUSH_EXC_INFO);
  ------------------
  |  |  294|  1.19k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.19k|    do {                    \
  |  |  |  |   52|  1.19k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.19k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2545|       |
 2546|       |    /* Runtime will push a block here, so we need to account for that */
 2547|  1.19k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.19k|    do {                    \
  |  |   52|  1.19k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.19k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.19k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.19k]
  |  |  ------------------
  ------------------
 2548|  1.19k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_EXCEPTION_HANDLER,
 2549|  1.19k|                              NO_LABEL, NO_LABEL, NULL));
 2550|       |
 2551|  2.59k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (2551:17): [True: 1.40k, False: 1.18k]
  ------------------
 2552|  1.40k|        excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
  ------------------
  |  |   82|  1.40k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.40k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2553|  1.40k|            s->v.Try.handlers, i);
 2554|  1.40k|        location loc = LOC(handler);
  ------------------
  |  |   88|  1.40k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.40k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.40k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.40k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.40k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.40k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2555|  1.40k|        if (!handler->v.ExceptHandler.type && i < n-1) {
  ------------------
  |  Branch (2555:13): [True: 1.11k, False: 298]
  |  Branch (2555:47): [True: 2, False: 1.10k]
  ------------------
 2556|      2|            return _PyCompile_Error(c, loc, "default 'except:' must be last");
 2557|      2|        }
 2558|  1.40k|        NEW_JUMP_TARGET_LABEL(c, next_except);
  ------------------
  |  |   94|  1.40k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.40k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.40k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.40k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.40k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.40k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2559|  1.40k|        except = next_except;
 2560|  1.40k|        if (handler->v.ExceptHandler.type) {
  ------------------
  |  Branch (2560:13): [True: 298, False: 1.10k]
  ------------------
 2561|    298|            VISIT(c, expr, handler->v.ExceptHandler.type);
  ------------------
  |  |  460|    298|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    298|    do {                    \
  |  |  |  |   52|    298|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 297]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    298|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 297]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2562|    297|            ADDOP(c, loc, CHECK_EXC_MATCH);
  ------------------
  |  |  294|    297|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    297|    do {                    \
  |  |  |  |   52|    297|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 297]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    297|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 297]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2563|    297|            ADDOP_JUMP(c, loc, POP_JUMP_IF_FALSE, except);
  ------------------
  |  |  435|    297|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    297|    do {                    \
  |  |  |  |   52|    297|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 297]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    297|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 297]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2564|    297|        }
 2565|  1.40k|        if (handler->v.ExceptHandler.name) {
  ------------------
  |  Branch (2565:13): [True: 34, False: 1.37k]
  ------------------
 2566|     34|            NEW_JUMP_TARGET_LABEL(c, cleanup_end);
  ------------------
  |  |   94|     34|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     34|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     34|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     34|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     34|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 34]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2567|     34|            NEW_JUMP_TARGET_LABEL(c, cleanup_body);
  ------------------
  |  |   94|     34|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     34|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     34|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     34|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     34|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 34]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2568|       |
 2569|     34|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     34|    do {                    \
  |  |   52|     34|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 34]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     34|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 34]
  |  |  ------------------
  ------------------
 2570|     34|                codegen_nameop(c, loc, handler->v.ExceptHandler.name, Store));
 2571|       |
 2572|       |            /*
 2573|       |              try:
 2574|       |                  # body
 2575|       |              except type as name:
 2576|       |                  try:
 2577|       |                      # body
 2578|       |                  finally:
 2579|       |                      name = None # in case body contains "del name"
 2580|       |                      del name
 2581|       |            */
 2582|       |
 2583|       |            /* second try: */
 2584|     34|            ADDOP_JUMP(c, loc, SETUP_CLEANUP, cleanup_end);
  ------------------
  |  |  435|     34|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|     34|    do {                    \
  |  |  |  |   52|     34|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2585|       |
 2586|     34|            USE_LABEL(c, cleanup_body);
  ------------------
  |  |  100|     34|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     34|    do {                    \
  |  |  |  |   52|     34|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2587|     34|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     34|    do {                    \
  |  |   52|     34|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 34]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     34|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 34]
  |  |  ------------------
  ------------------
 2588|     34|                _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_HANDLER_CLEANUP, cleanup_body,
 2589|     34|                                      NO_LABEL, handler->v.ExceptHandler.name));
 2590|       |
 2591|       |            /* second # body */
 2592|     34|            VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
  ------------------
  |  |  466|     34|    do {                                                                    \
  |  |  467|     34|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|     74|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|     74|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    148|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 74]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 42, False: 32]
  |  |  ------------------
  |  |  469|     42|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|     42|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     42|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|     42|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|     42|    do {                    \
  |  |  |  |   52|     42|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 40]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|     42|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 40]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|     42|        }                                                                   \
  |  |  472|     34|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 32]
  |  |  ------------------
  ------------------
 2593|     32|            _PyCompile_PopFBlock(c, COMPILE_FBLOCK_HANDLER_CLEANUP, cleanup_body);
 2594|       |            /* name = None; del name; # Mark as artificial */
 2595|     32|            ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|     32|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2596|     32|            ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|     32|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2597|     32|            ADDOP(c, NO_LOCATION, POP_EXCEPT);
  ------------------
  |  |  294|     32|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2598|     32|            ADDOP_LOAD_CONST(c, NO_LOCATION, Py_None);
  ------------------
  |  |  311|     32|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2599|     32|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     32|    do {                    \
  |  |   52|     32|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     32|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  ------------------
  ------------------
 2600|     32|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Store));
 2601|     32|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     32|    do {                    \
  |  |   52|     32|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     32|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  ------------------
  ------------------
 2602|     32|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Del));
 2603|     32|            ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|     32|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2604|       |
 2605|       |            /* except: */
 2606|     32|            USE_LABEL(c, cleanup_end);
  ------------------
  |  |  100|     32|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2607|       |
 2608|       |            /* name = None; del name; # artificial */
 2609|     32|            ADDOP_LOAD_CONST(c, NO_LOCATION, Py_None);
  ------------------
  |  |  311|     32|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2610|     32|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     32|    do {                    \
  |  |   52|     32|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     32|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  ------------------
  ------------------
 2611|     32|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Store));
 2612|     32|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     32|    do {                    \
  |  |   52|     32|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     32|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  ------------------
  ------------------
 2613|     32|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Del));
 2614|       |
 2615|     32|            ADDOP_I(c, NO_LOCATION, RERAISE, 1);
  ------------------
  |  |  280|     32|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     32|    do {                    \
  |  |  |  |   52|     32|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     32|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2616|     32|        }
 2617|  1.37k|        else {
 2618|  1.37k|            NEW_JUMP_TARGET_LABEL(c, cleanup_body);
  ------------------
  |  |   94|  1.37k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.37k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.37k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.37k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.37k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.37k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2619|       |
 2620|  1.37k|            ADDOP(c, loc, POP_TOP); /* exc_value */
  ------------------
  |  |  294|  1.37k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.37k|    do {                    \
  |  |  |  |   52|  1.37k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.37k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.37k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.37k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2621|       |
 2622|  1.37k|            USE_LABEL(c, cleanup_body);
  ------------------
  |  |  100|  1.37k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.37k|    do {                    \
  |  |  |  |   52|  1.37k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.37k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.37k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.37k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2623|  1.37k|            RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.37k|    do {                    \
  |  |   52|  1.37k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.37k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.37k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.37k]
  |  |  ------------------
  ------------------
 2624|  1.37k|                _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_HANDLER_CLEANUP, cleanup_body,
 2625|  1.37k|                                      NO_LABEL, NULL));
 2626|       |
 2627|  1.37k|            VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
  ------------------
  |  |  466|  1.37k|    do {                                                                    \
  |  |  467|  1.37k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  2.85k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  2.85k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.71k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.49k, False: 1.36k]
  |  |  ------------------
  |  |  469|  1.49k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.49k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.49k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.49k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.49k|    do {                    \
  |  |  |  |   52|  1.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 7, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      7|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      7|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      7|        }                   \
  |  |  |  |   55|  1.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.49k|        }                                                                   \
  |  |  472|  1.37k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.36k]
  |  |  ------------------
  ------------------
 2628|  1.36k|            _PyCompile_PopFBlock(c, COMPILE_FBLOCK_HANDLER_CLEANUP, cleanup_body);
 2629|  1.36k|            ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  1.36k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.36k|    do {                    \
  |  |  |  |   52|  1.36k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.36k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2630|  1.36k|            ADDOP(c, NO_LOCATION, POP_EXCEPT);
  ------------------
  |  |  294|  1.36k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.36k|    do {                    \
  |  |  |  |   52|  1.36k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.36k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2631|  1.36k|            ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|  1.36k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.36k|    do {                    \
  |  |  |  |   52|  1.36k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.36k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2632|  1.36k|        }
 2633|       |
 2634|  1.39k|        USE_LABEL(c, except);
  ------------------
  |  |  100|  1.39k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.39k|    do {                    \
  |  |  |  |   52|  1.39k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.39k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.39k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2635|  1.39k|    }
 2636|       |    /* artificial */
 2637|  1.18k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_EXCEPTION_HANDLER, NO_LABEL);
  ------------------
  |  |   57|  1.18k|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
 2638|  1.18k|    ADDOP_I(c, NO_LOCATION, RERAISE, 0);
  ------------------
  |  |  280|  1.18k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2639|       |
 2640|  1.18k|    USE_LABEL(c, cleanup);
  ------------------
  |  |  100|  1.18k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2641|  1.18k|    POP_EXCEPT_AND_RERAISE(c, NO_LOCATION);
  ------------------
  |  |  450|  1.18k|    RETURN_IF_ERROR(codegen_pop_except_and_reraise((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2642|       |
 2643|  1.18k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  1.18k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2644|  1.18k|    return SUCCESS;
  ------------------
  |  |   47|  1.18k|#define SUCCESS 0
  ------------------
 2645|  1.18k|}
codegen.c:codegen_try_star:
 2876|  1.18k|{
 2877|  1.18k|    if (s->v.TryStar.finalbody && asdl_seq_LEN(s->v.TryStar.finalbody)) {
  ------------------
  |  |   83|    112|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    224|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 112, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2877:9): [True: 112, False: 1.06k]
  ------------------
 2878|    112|        return codegen_try_star_finally(c, s);
 2879|    112|    }
 2880|  1.06k|    else {
 2881|  1.06k|        return codegen_try_star_except(c, s);
 2882|  1.06k|    }
 2883|  1.18k|}
codegen.c:codegen_try_star_finally:
 2438|    112|{
 2439|    112|    location loc = LOC(s);
  ------------------
  |  |   88|    112|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    112|    (_Py_SourceLocation){ \
  |  |  |  |   59|    112|               .lineno = (n)->lineno, \
  |  |  |  |   60|    112|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    112|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    112|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2440|       |
 2441|    112|    NEW_JUMP_TARGET_LABEL(c, body);
  ------------------
  |  |   94|    112|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    112|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    112|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    112|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    112|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 112]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2442|    112|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|    112|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    112|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    112|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    112|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    112|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 112]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2443|    112|    NEW_JUMP_TARGET_LABEL(c, exit);
  ------------------
  |  |   94|    112|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    112|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    112|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    112|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    112|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 112]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2444|    112|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|    112|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    112|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    112|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    112|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    112|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 112]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2445|       |    /* `try` block */
 2446|    112|    ADDOP_JUMP(c, loc, SETUP_FINALLY, end);
  ------------------
  |  |  435|    112|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    112|    do {                    \
  |  |  |  |   52|    112|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 112]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    112|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2447|       |
 2448|    112|    USE_LABEL(c, body);
  ------------------
  |  |  100|    112|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    112|    do {                    \
  |  |  |  |   52|    112|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 112]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    112|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2449|    112|    RETURN_IF_ERROR(
  ------------------
  |  |   51|    112|    do {                    \
  |  |   52|    112|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 112]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    112|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 112]
  |  |  ------------------
  ------------------
 2450|    112|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_FINALLY_TRY, body, end,
 2451|    112|                              s->v.TryStar.finalbody));
 2452|       |
 2453|    112|    if (s->v.TryStar.handlers && asdl_seq_LEN(s->v.TryStar.handlers)) {
  ------------------
  |  |   83|    112|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    224|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 112, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 112]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2453:9): [True: 112, False: 0]
  ------------------
 2454|    112|        RETURN_IF_ERROR(codegen_try_star_except(c, s));
  ------------------
  |  |   51|    112|    do {                    \
  |  |   52|    112|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 111]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|    112|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 111]
  |  |  ------------------
  ------------------
 2455|    112|    }
 2456|      0|    else {
 2457|      0|        VISIT_SEQ(c, stmt, s->v.TryStar.body);
  ------------------
  |  |  466|      0|    do {                                                                    \
  |  |  467|      0|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|      0|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|      0|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  469|      0|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|      0|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|      0|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|      0|        }                                                                   \
  |  |  472|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2458|      0|    }
 2459|    111|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|    111|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    111|    do {                    \
  |  |  |  |   52|    111|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 111]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    111|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 111]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2460|    111|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_FINALLY_TRY, body);
 2461|    111|    VISIT_SEQ(c, stmt, s->v.TryStar.finalbody);
  ------------------
  |  |  466|    111|    do {                                                                    \
  |  |  467|    111|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.38k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.38k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.76k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.38k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.27k, False: 107]
  |  |  ------------------
  |  |  469|  1.27k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.27k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.27k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.27k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.27k|    do {                    \
  |  |  |  |   52|  1.27k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 4, False: 1.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      4|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      4|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      4|        }                   \
  |  |  |  |   55|  1.27k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.27k|        }                                                                   \
  |  |  472|    111|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 107]
  |  |  ------------------
  ------------------
 2462|       |
 2463|    107|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, exit);
  ------------------
  |  |  435|    107|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2464|       |
 2465|       |    /* `finally` block */
 2466|    107|    USE_LABEL(c, end);
  ------------------
  |  |  100|    107|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2467|       |
 2468|    107|    loc = NO_LOCATION;
 2469|    107|    ADDOP_JUMP(c, loc, SETUP_CLEANUP, cleanup);
  ------------------
  |  |  435|    107|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2470|    107|    ADDOP(c, loc, PUSH_EXC_INFO);
  ------------------
  |  |  294|    107|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2471|    107|    RETURN_IF_ERROR(
  ------------------
  |  |   51|    107|    do {                    \
  |  |   52|    107|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    107|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  ------------------
  ------------------
 2472|    107|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_FINALLY_END, end, NO_LABEL, NULL));
 2473|       |
 2474|    107|    VISIT_SEQ(c, stmt, s->v.TryStar.finalbody);
  ------------------
  |  |  466|    107|    do {                                                                    \
  |  |  467|    107|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.36k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.36k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.25k, False: 107]
  |  |  ------------------
  |  |  469|  1.25k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.25k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.25k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.25k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.25k|    do {                    \
  |  |  |  |   52|  1.25k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.25k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.25k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.25k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.25k|        }                                                                   \
  |  |  472|    107|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 107]
  |  |  ------------------
  ------------------
 2475|       |
 2476|    107|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_FINALLY_END, end);
 2477|    107|    loc = NO_LOCATION;
 2478|    107|    ADDOP_I(c, loc, RERAISE, 0);
  ------------------
  |  |  280|    107|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2479|       |
 2480|    107|    USE_LABEL(c, cleanup);
  ------------------
  |  |  100|    107|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2481|    107|    POP_EXCEPT_AND_RERAISE(c, loc);
  ------------------
  |  |  450|    107|    RETURN_IF_ERROR(codegen_pop_except_and_reraise((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2482|       |
 2483|    107|    USE_LABEL(c, exit);
  ------------------
  |  |  100|    107|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    107|    do {                    \
  |  |  |  |   52|    107|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 107]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    107|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 107]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2484|    107|    return SUCCESS;
  ------------------
  |  |   47|    107|#define SUCCESS 0
  ------------------
 2485|    107|}
codegen.c:codegen_try_star_except:
 2701|  1.18k|{
 2702|  1.18k|    location loc = LOC(s);
  ------------------
  |  |   88|  1.18k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.18k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.18k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.18k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.18k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.18k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2703|       |
 2704|  1.18k|    NEW_JUMP_TARGET_LABEL(c, body);
  ------------------
  |  |   94|  1.18k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.18k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.18k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.18k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.18k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2705|  1.18k|    NEW_JUMP_TARGET_LABEL(c, except);
  ------------------
  |  |   94|  1.18k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.18k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.18k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.18k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.18k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2706|  1.18k|    NEW_JUMP_TARGET_LABEL(c, orelse);
  ------------------
  |  |   94|  1.18k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.18k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.18k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.18k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.18k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2707|  1.18k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  1.18k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.18k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.18k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.18k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.18k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2708|  1.18k|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|  1.18k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.18k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.18k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.18k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.18k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2709|  1.18k|    NEW_JUMP_TARGET_LABEL(c, reraise_star);
  ------------------
  |  |   94|  1.18k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.18k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.18k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.18k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.18k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2710|       |
 2711|  1.18k|    ADDOP_JUMP(c, loc, SETUP_FINALLY, except);
  ------------------
  |  |  435|  1.18k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2712|       |
 2713|  1.18k|    USE_LABEL(c, body);
  ------------------
  |  |  100|  1.18k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2714|  1.18k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.18k|    do {                    \
  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.18k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  ------------------
  ------------------
 2715|  1.18k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_TRY_EXCEPT, body, NO_LABEL, NULL));
 2716|  1.18k|    VISIT_SEQ(c, stmt, s->v.TryStar.body);
  ------------------
  |  |  466|  1.18k|    do {                                                                    \
  |  |  467|  1.18k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  2.36k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  2.36k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.18k, False: 1.17k]
  |  |  ------------------
  |  |  469|  1.18k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.18k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.18k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.18k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.18k|    do {                    \
  |  |  |  |   52|  1.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 1.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|  1.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.18k|        }                                                                   \
  |  |  472|  1.18k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.17k]
  |  |  ------------------
  ------------------
 2717|  1.17k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_TRY_EXCEPT, body);
 2718|  1.17k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2719|  1.17k|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, orelse);
  ------------------
  |  |  435|  1.17k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2720|  1.17k|    Py_ssize_t n = asdl_seq_LEN(s->v.TryStar.handlers);
  ------------------
  |  |   83|  1.17k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.35k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2721|       |
 2722|  1.17k|    USE_LABEL(c, except);
  ------------------
  |  |  100|  1.17k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2723|       |
 2724|  1.17k|    ADDOP_JUMP(c, NO_LOCATION, SETUP_CLEANUP, cleanup);
  ------------------
  |  |  435|  1.17k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2725|  1.17k|    ADDOP(c, NO_LOCATION, PUSH_EXC_INFO);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2726|       |
 2727|       |    /* Runtime will push a block here, so we need to account for that */
 2728|  1.17k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.17k|    do {                    \
  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.17k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  ------------------
  ------------------
 2729|  1.17k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_EXCEPTION_GROUP_HANDLER,
 2730|  1.17k|                              NO_LABEL, NO_LABEL, "except handler"));
 2731|       |
 2732|  2.66k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (2732:28): [True: 1.48k, False: 1.17k]
  ------------------
 2733|  1.48k|        excepthandler_ty handler = (excepthandler_ty)asdl_seq_GET(
  ------------------
  |  |   82|  1.48k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.48k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2734|  1.48k|            s->v.TryStar.handlers, i);
 2735|  1.48k|        location loc = LOC(handler);
  ------------------
  |  |   88|  1.48k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.48k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.48k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.48k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.48k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.48k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2736|  1.48k|        NEW_JUMP_TARGET_LABEL(c, next_except);
  ------------------
  |  |   94|  1.48k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.48k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.48k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.48k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.48k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2737|  1.48k|        except = next_except;
 2738|  1.48k|        NEW_JUMP_TARGET_LABEL(c, except_with_error);
  ------------------
  |  |   94|  1.48k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.48k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.48k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.48k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.48k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2739|  1.48k|        NEW_JUMP_TARGET_LABEL(c, no_match);
  ------------------
  |  |   94|  1.48k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.48k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.48k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.48k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.48k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2740|  1.48k|        if (i == 0) {
  ------------------
  |  Branch (2740:13): [True: 1.17k, False: 309]
  ------------------
 2741|       |            /* create empty list for exceptions raised/reraise in the except* blocks */
 2742|       |            /*
 2743|       |               [orig]       BUILD_LIST
 2744|       |            */
 2745|       |            /* Create a copy of the original EG */
 2746|       |            /*
 2747|       |               [orig, []]   COPY 2
 2748|       |               [orig, [], exc]
 2749|       |            */
 2750|  1.17k|            ADDOP_I(c, loc, BUILD_LIST, 0);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2751|  1.17k|            ADDOP_I(c, loc, COPY, 2);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2752|  1.17k|        }
 2753|  1.48k|        if (handler->v.ExceptHandler.type) {
  ------------------
  |  Branch (2753:13): [True: 1.48k, False: 0]
  ------------------
 2754|  1.48k|            VISIT(c, expr, handler->v.ExceptHandler.type);
  ------------------
  |  |  460|  1.48k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2755|  1.48k|            ADDOP(c, loc, CHECK_EG_MATCH);
  ------------------
  |  |  294|  1.48k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2756|  1.48k|            ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|  1.48k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2757|  1.48k|            ADDOP_JUMP(c, loc, POP_JUMP_IF_NONE, no_match);
  ------------------
  |  |  435|  1.48k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2758|  1.48k|        }
 2759|       |
 2760|  1.48k|        NEW_JUMP_TARGET_LABEL(c, cleanup_end);
  ------------------
  |  |   94|  1.48k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.48k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.48k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.48k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.48k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2761|  1.48k|        NEW_JUMP_TARGET_LABEL(c, cleanup_body);
  ------------------
  |  |   94|  1.48k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.48k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.48k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.48k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.48k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2762|       |
 2763|  1.48k|        if (handler->v.ExceptHandler.name) {
  ------------------
  |  Branch (2763:13): [True: 38, False: 1.44k]
  ------------------
 2764|     38|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     38|    do {                    \
  |  |   52|     38|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
 2765|     38|                codegen_nameop(c, loc, handler->v.ExceptHandler.name, Store));
 2766|     38|        }
 2767|  1.44k|        else {
 2768|  1.44k|            ADDOP(c, loc, POP_TOP);  // match
  ------------------
  |  |  294|  1.44k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.44k|    do {                    \
  |  |  |  |   52|  1.44k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.44k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2769|  1.44k|        }
 2770|       |
 2771|       |        /*
 2772|       |          try:
 2773|       |              # body
 2774|       |          except type as name:
 2775|       |              try:
 2776|       |                  # body
 2777|       |              finally:
 2778|       |                  name = None # in case body contains "del name"
 2779|       |                  del name
 2780|       |        */
 2781|       |        /* second try: */
 2782|  1.48k|        ADDOP_JUMP(c, loc, SETUP_CLEANUP, cleanup_end);
  ------------------
  |  |  435|  1.48k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2783|       |
 2784|  1.48k|        USE_LABEL(c, cleanup_body);
  ------------------
  |  |  100|  1.48k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2785|  1.48k|        RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.48k|    do {                    \
  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.48k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  ------------------
  ------------------
 2786|  1.48k|            _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_HANDLER_CLEANUP, cleanup_body,
 2787|  1.48k|                                  NO_LABEL, handler->v.ExceptHandler.name));
 2788|       |
 2789|       |        /* second # body */
 2790|  1.48k|        VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body);
  ------------------
  |  |  466|  1.48k|    do {                                                                    \
  |  |  467|  1.48k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  3.11k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  3.11k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.23k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.11k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.63k, False: 1.48k]
  |  |  ------------------
  |  |  469|  1.63k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.63k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.63k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.63k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.63k|    do {                    \
  |  |  |  |   52|  1.63k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 5, False: 1.63k]
  |  |  |  |  ------------------
  |  |  |  |   53|      5|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      5|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      5|        }                   \
  |  |  |  |   55|  1.63k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.63k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.63k|        }                                                                   \
  |  |  472|  1.48k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.48k]
  |  |  ------------------
  ------------------
 2791|  1.48k|        _PyCompile_PopFBlock(c, COMPILE_FBLOCK_HANDLER_CLEANUP, cleanup_body);
 2792|       |        /* name = None; del name; # artificial */
 2793|  1.48k|        ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  1.48k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2794|  1.48k|        if (handler->v.ExceptHandler.name) {
  ------------------
  |  Branch (2794:13): [True: 38, False: 1.44k]
  ------------------
 2795|     38|            ADDOP_LOAD_CONST(c, NO_LOCATION, Py_None);
  ------------------
  |  |  311|     38|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     38|    do {                    \
  |  |  |  |   52|     38|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     38|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2796|     38|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     38|    do {                    \
  |  |   52|     38|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
 2797|     38|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Store));
 2798|     38|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     38|    do {                    \
  |  |   52|     38|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
 2799|     38|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Del));
 2800|     38|        }
 2801|  1.48k|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, except);
  ------------------
  |  |  435|  1.48k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2802|       |
 2803|       |        /* except: */
 2804|  1.48k|        USE_LABEL(c, cleanup_end);
  ------------------
  |  |  100|  1.48k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2805|       |
 2806|       |        /* name = None; del name; # artificial */
 2807|  1.48k|        if (handler->v.ExceptHandler.name) {
  ------------------
  |  Branch (2807:13): [True: 38, False: 1.44k]
  ------------------
 2808|     38|            ADDOP_LOAD_CONST(c, NO_LOCATION, Py_None);
  ------------------
  |  |  311|     38|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     38|    do {                    \
  |  |  |  |   52|     38|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     38|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2809|     38|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     38|    do {                    \
  |  |   52|     38|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
 2810|     38|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Store));
 2811|     38|            RETURN_IF_ERROR(
  ------------------
  |  |   51|     38|    do {                    \
  |  |   52|     38|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 38]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     38|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 38]
  |  |  ------------------
  ------------------
 2812|     38|                codegen_nameop(c, NO_LOCATION, handler->v.ExceptHandler.name, Del));
 2813|     38|        }
 2814|       |
 2815|       |        /* add exception raised to the res list */
 2816|  1.48k|        ADDOP_I(c, NO_LOCATION, LIST_APPEND, 3); // exc
  ------------------
  |  |  280|  1.48k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2817|  1.48k|        ADDOP(c, NO_LOCATION, POP_TOP); // lasti
  ------------------
  |  |  294|  1.48k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2818|  1.48k|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, except_with_error);
  ------------------
  |  |  435|  1.48k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2819|       |
 2820|  1.48k|        USE_LABEL(c, except);
  ------------------
  |  |  100|  1.48k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2821|  1.48k|        ADDOP(c, NO_LOCATION, NOP);  // to hold a propagated location info
  ------------------
  |  |  294|  1.48k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2822|  1.48k|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, except_with_error);
  ------------------
  |  |  435|  1.48k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2823|       |
 2824|  1.48k|        USE_LABEL(c, no_match);
  ------------------
  |  |  100|  1.48k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2825|  1.48k|        ADDOP(c, loc, POP_TOP);  // match (None)
  ------------------
  |  |  294|  1.48k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2826|       |
 2827|  1.48k|        USE_LABEL(c, except_with_error);
  ------------------
  |  |  100|  1.48k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.48k|    do {                    \
  |  |  |  |   52|  1.48k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.48k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2828|       |
 2829|  1.48k|        if (i == n - 1) {
  ------------------
  |  Branch (2829:13): [True: 1.17k, False: 309]
  ------------------
 2830|       |            /* Add exc to the list (if not None it's the unhandled part of the EG) */
 2831|  1.17k|            ADDOP_I(c, NO_LOCATION, LIST_APPEND, 1);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2832|  1.17k|            ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, reraise_star);
  ------------------
  |  |  435|  1.17k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2833|  1.17k|        }
 2834|  1.48k|    }
 2835|       |    /* artificial */
 2836|  1.17k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_EXCEPTION_GROUP_HANDLER, NO_LABEL);
  ------------------
  |  |   57|  1.17k|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
 2837|  1.17k|    NEW_JUMP_TARGET_LABEL(c, reraise);
  ------------------
  |  |   94|  1.17k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.17k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.17k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.17k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.17k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.17k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2838|       |
 2839|  1.17k|    USE_LABEL(c, reraise_star);
  ------------------
  |  |  100|  1.17k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2840|  1.17k|    ADDOP_I(c, NO_LOCATION, CALL_INTRINSIC_2, INTRINSIC_PREP_RERAISE_STAR);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2841|  1.17k|    ADDOP_I(c, NO_LOCATION, COPY, 1);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2842|  1.17k|    ADDOP_JUMP(c, NO_LOCATION, POP_JUMP_IF_NOT_NONE, reraise);
  ------------------
  |  |  435|  1.17k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2843|       |
 2844|       |    /* Nothing to reraise */
 2845|  1.17k|    ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2846|  1.17k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2847|  1.17k|    ADDOP(c, NO_LOCATION, POP_EXCEPT);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2848|  1.17k|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|  1.17k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2849|       |
 2850|  1.17k|    USE_LABEL(c, reraise);
  ------------------
  |  |  100|  1.17k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2851|  1.17k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2852|  1.17k|    ADDOP_I(c, NO_LOCATION, SWAP, 2);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2853|  1.17k|    ADDOP(c, NO_LOCATION, POP_EXCEPT);
  ------------------
  |  |  294|  1.17k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2854|  1.17k|    ADDOP_I(c, NO_LOCATION, RERAISE, 0);
  ------------------
  |  |  280|  1.17k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2855|       |
 2856|  1.17k|    USE_LABEL(c, cleanup);
  ------------------
  |  |  100|  1.17k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2857|  1.17k|    POP_EXCEPT_AND_RERAISE(c, NO_LOCATION);
  ------------------
  |  |  450|  1.17k|    RETURN_IF_ERROR(codegen_pop_except_and_reraise((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2858|       |
 2859|  1.17k|    USE_LABEL(c, orelse);
  ------------------
  |  |  100|  1.17k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2860|  1.17k|    VISIT_SEQ(c, stmt, s->v.TryStar.orelse);
  ------------------
  |  |  466|  1.17k|    do {                                                                    \
  |  |  467|  1.17k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.28k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.28k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.56k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.15k, False: 128]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 112, False: 1.17k]
  |  |  ------------------
  |  |  469|    112|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    112|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    112|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    112|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    112|    do {                    \
  |  |  |  |   52|    112|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 111]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    112|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 111]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    112|        }                                                                   \
  |  |  472|  1.17k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.17k]
  |  |  ------------------
  ------------------
 2861|       |
 2862|  1.17k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  1.17k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.17k|    do {                    \
  |  |  |  |   52|  1.17k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2863|  1.17k|    return SUCCESS;
  ------------------
  |  |   47|  1.17k|#define SUCCESS 0
  ------------------
 2864|  1.17k|}
codegen.c:codegen_assert:
 3064|  2.17k|{
 3065|       |    /* Always emit a warning if the test is a non-zero length tuple */
 3066|  2.17k|    if ((s->v.Assert.test->kind == Tuple_kind &&
  ------------------
  |  Branch (3066:10): [True: 244, False: 1.93k]
  ------------------
 3067|    244|        asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0) ||
  ------------------
  |  |   83|    244|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    488|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 87, False: 157]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3067:9): [True: 157, False: 87]
  ------------------
 3068|  2.01k|        (s->v.Assert.test->kind == Constant_kind &&
  ------------------
  |  Branch (3068:10): [True: 1.45k, False: 564]
  ------------------
 3069|  2.01k|         PyTuple_Check(s->v.Assert.test->v.Constant.value) &&
  ------------------
  |  |   27|  1.45k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  3.47k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 1.45k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3070|      0|         PyTuple_Size(s->v.Assert.test->v.Constant.value) > 0))
  ------------------
  |  Branch (3070:10): [True: 0, False: 0]
  ------------------
 3071|    157|    {
 3072|    157|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    157|    do {                    \
  |  |   52|    157|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 157]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    157|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 157]
  |  |  ------------------
  ------------------
 3073|    157|            _PyCompile_Warn(c, LOC(s), "assertion is always true, "
 3074|    157|                                       "perhaps remove parentheses?"));
 3075|    157|    }
 3076|  2.17k|    if (OPTIMIZATION_LEVEL(c)) {
  ------------------
  |  |   72|  2.17k|#define OPTIMIZATION_LEVEL(C) _PyCompile_OptimizationLevel(C)
  |  |  ------------------
  |  |  |  Branch (72:31): [True: 462, False: 1.71k]
  |  |  ------------------
  ------------------
 3077|    462|        return SUCCESS;
  ------------------
  |  |   47|    462|#define SUCCESS 0
  ------------------
 3078|    462|    }
 3079|  1.71k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  1.71k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.71k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.71k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.71k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.71k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.71k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 3080|  1.71k|    RETURN_IF_ERROR(codegen_jump_if(c, LOC(s), s->v.Assert.test, end, 1));
  ------------------
  |  |   51|  1.71k|    do {                    \
  |  |   52|  1.71k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 1.71k]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|  1.71k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.71k]
  |  |  ------------------
  ------------------
 3081|  1.71k|    ADDOP_I(c, LOC(s), LOAD_COMMON_CONSTANT, CONSTANT_ASSERTIONERROR);
  ------------------
  |  |  280|  1.71k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.71k|    do {                    \
  |  |  |  |   52|  1.71k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.71k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.71k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3082|  1.71k|    if (s->v.Assert.msg) {
  ------------------
  |  Branch (3082:9): [True: 665, False: 1.04k]
  ------------------
 3083|    665|        VISIT(c, expr, s->v.Assert.msg);
  ------------------
  |  |  460|    665|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    665|    do {                    \
  |  |  |  |   52|    665|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 664]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    665|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 664]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3084|    664|        ADDOP_I(c, LOC(s), CALL, 0);
  ------------------
  |  |  280|    664|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    664|    do {                    \
  |  |  |  |   52|    664|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 664]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    664|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 664]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3085|    664|    }
 3086|  1.71k|    ADDOP_I(c, LOC(s->v.Assert.test), RAISE_VARARGS, 1);
  ------------------
  |  |  280|  1.71k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.71k|    do {                    \
  |  |  |  |   52|  1.71k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.71k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.71k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3087|       |
 3088|  1.71k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  1.71k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.71k|    do {                    \
  |  |  |  |   52|  1.71k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.71k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.71k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3089|  1.71k|    return SUCCESS;
  ------------------
  |  |   47|  1.71k|#define SUCCESS 0
  ------------------
 3090|  1.71k|}
codegen.c:codegen_import:
 2940|  2.49k|{
 2941|  2.49k|    location loc = LOC(s);
  ------------------
  |  |   88|  2.49k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.49k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.49k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.49k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.49k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.49k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2942|       |    /* The Import node stores a module name like a.b.c as a single
 2943|       |       string.  This is convenient for all cases except
 2944|       |         import a.b.c as d
 2945|       |       where we need to parse that string to extract the individual
 2946|       |       module names.
 2947|       |       XXX Perhaps change the representation to make this case simpler?
 2948|       |     */
 2949|  2.49k|    Py_ssize_t i, n = asdl_seq_LEN(s->v.Import.names);
  ------------------
  |  |   83|  2.49k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.99k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2950|       |
 2951|  2.49k|    PyObject *zero = _PyLong_GetZero();  // borrowed reference
 2952|  10.8k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (2952:17): [True: 8.36k, False: 2.49k]
  ------------------
 2953|  8.36k|        alias_ty alias = (alias_ty)asdl_seq_GET(s->v.Import.names, i);
  ------------------
  |  |   82|  8.36k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  8.36k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2954|  8.36k|        int r;
 2955|       |
 2956|  8.36k|        ADDOP_LOAD_CONST(c, loc, zero);
  ------------------
  |  |  311|  8.36k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  8.36k|    do {                    \
  |  |  |  |   52|  8.36k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.36k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.36k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2957|  8.36k|        ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  8.36k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  8.36k|    do {                    \
  |  |  |  |   52|  8.36k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.36k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.36k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.36k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2958|  8.36k|        if (s->v.Import.is_lazy) {
  ------------------
  |  Branch (2958:13): [True: 11, False: 8.35k]
  ------------------
 2959|     11|            RETURN_IF_ERROR(codegen_validate_lazy_import(c, loc));
  ------------------
  |  |   51|     11|    do {                    \
  |  |   52|     11|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 11]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     11|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 11]
  |  |  ------------------
  ------------------
 2960|     11|            ADDOP_NAME_CUSTOM(c, loc, IMPORT_NAME, alias->name, names, 2, 1);
  ------------------
  |  |  422|     11|    RETURN_IF_ERROR(codegen_addop_name_custom((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O), SHIFT, LOW))
  |  |  ------------------
  |  |  |  |   51|     11|    do {                    \
  |  |  |  |   52|     11|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     11|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2961|  8.35k|        } else {
 2962|  8.35k|            if (_PyCompile_InExceptionHandler(c) ||
  ------------------
  |  Branch (2962:17): [True: 142, False: 8.21k]
  ------------------
 2963|  8.21k|                _PyCompile_ScopeType(c) != COMPILE_SCOPE_MODULE) {
  ------------------
  |  Branch (2963:17): [True: 1.71k, False: 6.49k]
  ------------------
 2964|       |                // force eager import in try/except block
 2965|  1.85k|                ADDOP_NAME_CUSTOM(c, loc, IMPORT_NAME, alias->name, names, 2, 2);
  ------------------
  |  |  422|  1.85k|    RETURN_IF_ERROR(codegen_addop_name_custom((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O), SHIFT, LOW))
  |  |  ------------------
  |  |  |  |   51|  1.85k|    do {                    \
  |  |  |  |   52|  1.85k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.85k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.85k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2966|  6.49k|            } else {
 2967|  6.49k|                ADDOP_NAME_CUSTOM(c, loc, IMPORT_NAME, alias->name, names, 2, 0);
  ------------------
  |  |  422|  6.49k|    RETURN_IF_ERROR(codegen_addop_name_custom((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O), SHIFT, LOW))
  |  |  ------------------
  |  |  |  |   51|  6.49k|    do {                    \
  |  |  |  |   52|  6.49k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.49k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2968|  6.49k|            }
 2969|  8.35k|        }
 2970|       |
 2971|  8.36k|        if (alias->asname) {
  ------------------
  |  Branch (2971:13): [True: 177, False: 8.18k]
  ------------------
 2972|    177|            r = codegen_import_as(c, loc, alias->name, alias->asname);
 2973|    177|            RETURN_IF_ERROR(r);
  ------------------
  |  |   51|    177|    do {                    \
  |  |   52|    177|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 177]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    177|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 177]
  |  |  ------------------
  ------------------
 2974|    177|        }
 2975|  8.18k|        else {
 2976|  8.18k|            identifier tmp = alias->name;
 2977|  8.18k|            Py_ssize_t dot = PyUnicode_FindChar(
 2978|  8.18k|                alias->name, '.', 0, PyUnicode_GET_LENGTH(alias->name), 1);
  ------------------
  |  |  299|  8.18k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  8.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2979|  8.18k|            if (dot != -1) {
  ------------------
  |  Branch (2979:17): [True: 3.19k, False: 4.98k]
  ------------------
 2980|  3.19k|                tmp = PyUnicode_Substring(alias->name, 0, dot);
 2981|  3.19k|                if (tmp == NULL) {
  ------------------
  |  Branch (2981:21): [True: 0, False: 3.19k]
  ------------------
 2982|      0|                    return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 2983|      0|                }
 2984|  3.19k|            }
 2985|  8.18k|            r = codegen_nameop(c, loc, tmp, Store);
 2986|  8.18k|            if (dot != -1) {
  ------------------
  |  Branch (2986:17): [True: 3.19k, False: 4.98k]
  ------------------
 2987|  3.19k|                Py_DECREF(tmp);
  ------------------
  |  |  430|  3.19k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.19k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.19k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2988|  3.19k|            }
 2989|  8.18k|            RETURN_IF_ERROR(r);
  ------------------
  |  |   51|  8.18k|    do {                    \
  |  |   52|  8.18k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 8.18k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  8.18k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8.18k]
  |  |  ------------------
  ------------------
 2990|  8.18k|        }
 2991|  8.36k|    }
 2992|  2.49k|    return SUCCESS;
  ------------------
  |  |   47|  2.49k|#define SUCCESS 0
  ------------------
 2993|  2.49k|}
codegen.c:codegen_validate_lazy_import:
 2929|     12|{
 2930|     12|    if (_PyCompile_ScopeType(c) != COMPILE_SCOPE_MODULE) {
  ------------------
  |  Branch (2930:9): [True: 0, False: 12]
  ------------------
 2931|      0|        return _PyCompile_Error(
 2932|      0|            c, loc, "lazy imports only allowed in module scope");
 2933|      0|    }
 2934|       |
 2935|     12|    return SUCCESS;
  ------------------
  |  |   47|     12|#define SUCCESS 0
  ------------------
 2936|     12|}
codegen.c:codegen_import_as:
 2888|    177|{
 2889|       |    /* The IMPORT_NAME opcode was already generated.  This function
 2890|       |       merely needs to bind the result to a name.
 2891|       |
 2892|       |       If there is a dot in name, we need to split it and emit a
 2893|       |       IMPORT_FROM for each name.
 2894|       |    */
 2895|    177|    Py_ssize_t len = PyUnicode_GET_LENGTH(name);
  ------------------
  |  |  299|    177|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    177|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    177|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2896|    177|    Py_ssize_t dot = PyUnicode_FindChar(name, '.', 0, len, 1);
 2897|    177|    if (dot == -2) {
  ------------------
  |  Branch (2897:9): [True: 0, False: 177]
  ------------------
 2898|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 2899|      0|    }
 2900|    177|    if (dot != -1) {
  ------------------
  |  Branch (2900:9): [True: 129, False: 48]
  ------------------
 2901|       |        /* Consume the base module name to get the first attribute */
 2902|  2.44k|        while (1) {
  ------------------
  |  Branch (2902:16): [True: 2.44k, Folded]
  ------------------
 2903|  2.44k|            Py_ssize_t pos = dot + 1;
 2904|  2.44k|            PyObject *attr;
 2905|  2.44k|            dot = PyUnicode_FindChar(name, '.', pos, len, 1);
 2906|  2.44k|            if (dot == -2) {
  ------------------
  |  Branch (2906:17): [True: 0, False: 2.44k]
  ------------------
 2907|      0|                return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 2908|      0|            }
 2909|  2.44k|            attr = PyUnicode_Substring(name, pos, (dot != -1) ? dot : len);
  ------------------
  |  Branch (2909:51): [True: 2.31k, False: 129]
  ------------------
 2910|  2.44k|            if (!attr) {
  ------------------
  |  Branch (2910:17): [True: 0, False: 2.44k]
  ------------------
 2911|      0|                return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 2912|      0|            }
 2913|  2.44k|            ADDOP_N(c, loc, IMPORT_FROM, attr, names);
  ------------------
  |  |  345|  2.44k|    do {                                                                \
  |  |  346|  2.44k|        assert(!OPCODE_HAS_CONST(OP)); /* use ADDOP_LOAD_CONST_NEW */   \
  |  |  347|  2.44k|        int ret = codegen_addop_o((C), (LOC), (OP),                     \
  |  |  348|  2.44k|                                  METADATA(C)->u_ ## TYPE, (O));        \
  |  |  ------------------
  |  |  |  |   76|  2.44k|#define METADATA(C) _PyCompile_Metadata(C)
  |  |  ------------------
  |  |  349|  2.44k|        Py_DECREF((O));                                                 \
  |  |  ------------------
  |  |  |  |  430|  2.44k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.44k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.44k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|  2.44k|        RETURN_IF_ERROR(ret);                                           \
  |  |  ------------------
  |  |  |  |   51|  2.44k|    do {                    \
  |  |  |  |   52|  2.44k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.44k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  351|  2.44k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (351:14): [Folded, False: 2.44k]
  |  |  ------------------
  ------------------
  |  Branch (2913:13): [True: 2.44k, Folded]
  ------------------
 2914|  2.44k|            if (dot == -1) {
  ------------------
  |  Branch (2914:17): [True: 129, False: 2.31k]
  ------------------
 2915|    129|                break;
 2916|    129|            }
 2917|  2.31k|            ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|  2.31k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.31k|    do {                    \
  |  |  |  |   52|  2.31k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2918|  2.31k|            ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  2.31k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.31k|    do {                    \
  |  |  |  |   52|  2.31k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2919|  2.31k|        }
 2920|    129|        RETURN_IF_ERROR(codegen_nameop(c, loc, asname, Store));
  ------------------
  |  |   51|    129|    do {                    \
  |  |   52|    129|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 129]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    129|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 129]
  |  |  ------------------
  ------------------
 2921|    129|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|    129|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    129|    do {                    \
  |  |  |  |   52|    129|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 129]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    129|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 129]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2922|    129|        return SUCCESS;
  ------------------
  |  |   47|    129|#define SUCCESS 0
  ------------------
 2923|    129|    }
 2924|     48|    return codegen_nameop(c, loc, asname, Store);
 2925|    177|}
codegen.c:codegen_from_import:
 2997|  2.18k|{
 2998|  2.18k|    Py_ssize_t n = asdl_seq_LEN(s->v.ImportFrom.names);
  ------------------
  |  |   83|  2.18k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.37k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2999|       |
 3000|  2.18k|    ADDOP_LOAD_CONST_NEW(c, LOC(s), PyLong_FromLong(s->v.ImportFrom.level));
  ------------------
  |  |  329|  2.18k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.18k|    do {                    \
  |  |  |  |   52|  2.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3001|       |
 3002|  2.18k|    PyObject *names = PyTuple_New(n);
 3003|  2.18k|    if (!names) {
  ------------------
  |  Branch (3003:9): [True: 0, False: 2.18k]
  ------------------
 3004|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 3005|      0|    }
 3006|       |
 3007|       |    /* build up the names */
 3008|  5.95k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3008:28): [True: 3.76k, False: 2.18k]
  ------------------
 3009|  3.76k|        alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, i);
  ------------------
  |  |   82|  3.76k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  3.76k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3010|  3.76k|        PyTuple_SET_ITEM(names, i, Py_NewRef(alias->name));
  ------------------
  |  |   40|  3.76k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  3.76k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.76k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  3.76k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.76k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3011|  3.76k|    }
 3012|       |
 3013|  2.18k|    ADDOP_LOAD_CONST_NEW(c, LOC(s), names);
  ------------------
  |  |  329|  2.18k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.18k|    do {                    \
  |  |  |  |   52|  2.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3014|       |
 3015|  2.18k|    identifier from = &_Py_STR(empty);
  ------------------
  |  |  938|  2.18k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  2.18k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.18k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3016|  2.18k|    if (s->v.ImportFrom.module) {
  ------------------
  |  Branch (3016:9): [True: 1.93k, False: 254]
  ------------------
 3017|  1.93k|        from = s->v.ImportFrom.module;
 3018|  1.93k|    }
 3019|  2.18k|    if (s->v.ImportFrom.is_lazy) {
  ------------------
  |  Branch (3019:9): [True: 1, False: 2.18k]
  ------------------
 3020|      1|        alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, 0);
  ------------------
  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3021|      1|        if (PyUnicode_READ_CHAR(alias->name, 0) == '*') {
  ------------------
  |  |  381|      1|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3021:13): [True: 0, False: 1]
  ------------------
 3022|      0|            return _PyCompile_Error(c, LOC(s), "cannot lazy import *");
  ------------------
  |  |   88|      0|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3023|      0|        }
 3024|      1|        RETURN_IF_ERROR(codegen_validate_lazy_import(c, LOC(s)));
  ------------------
  |  |   51|      1|    do {                    \
  |  |   52|      1|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 3025|      1|        ADDOP_NAME_CUSTOM(c, LOC(s), IMPORT_NAME, from, names, 2, 1);
  ------------------
  |  |  422|      1|    RETURN_IF_ERROR(codegen_addop_name_custom((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O), SHIFT, LOW))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3026|  2.18k|    } else {
 3027|  2.18k|        alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, 0);
  ------------------
  |  |   82|  2.18k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.18k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3028|  2.18k|        if (_PyCompile_InExceptionHandler(c) ||
  ------------------
  |  Branch (3028:13): [True: 14, False: 2.17k]
  ------------------
 3029|  2.17k|            _PyCompile_ScopeType(c) != COMPILE_SCOPE_MODULE ||
  ------------------
  |  Branch (3029:13): [True: 139, False: 2.03k]
  ------------------
 3030|  2.03k|            PyUnicode_READ_CHAR(alias->name, 0) == '*') {
  ------------------
  |  |  381|  2.03k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  2.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3030:13): [True: 1, False: 2.03k]
  ------------------
 3031|       |            // forced non-lazy import due to try/except or import *
 3032|    154|            ADDOP_NAME_CUSTOM(c, LOC(s), IMPORT_NAME, from, names, 2, 2);
  ------------------
  |  |  422|    154|    RETURN_IF_ERROR(codegen_addop_name_custom((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O), SHIFT, LOW))
  |  |  ------------------
  |  |  |  |   51|    154|    do {                    \
  |  |  |  |   52|    154|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 154]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    154|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 154]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3033|  2.03k|        } else {
 3034|  2.03k|            ADDOP_NAME_CUSTOM(c, LOC(s), IMPORT_NAME, from, names, 2, 0);
  ------------------
  |  |  422|  2.03k|    RETURN_IF_ERROR(codegen_addop_name_custom((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O), SHIFT, LOW))
  |  |  ------------------
  |  |  |  |   51|  2.03k|    do {                    \
  |  |  |  |   52|  2.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3035|  2.03k|        }
 3036|  2.18k|    }
 3037|       |
 3038|  5.94k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3038:28): [True: 3.76k, False: 2.18k]
  ------------------
 3039|  3.76k|        alias_ty alias = (alias_ty)asdl_seq_GET(s->v.ImportFrom.names, i);
  ------------------
  |  |   82|  3.76k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  3.76k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3040|  3.76k|        identifier store_name;
 3041|       |
 3042|  3.76k|        if (i == 0 && PyUnicode_READ_CHAR(alias->name, 0) == '*') {
  ------------------
  |  |  381|  2.18k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  2.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3042:13): [True: 2.18k, False: 1.57k]
  |  Branch (3042:23): [True: 1, False: 2.18k]
  ------------------
 3043|      1|            assert(n == 1);
  ------------------
  |  Branch (3043:13): [True: 1, False: 0]
  ------------------
 3044|      1|            ADDOP_I(c, LOC(s), CALL_INTRINSIC_1, INTRINSIC_IMPORT_STAR);
  ------------------
  |  |  280|      1|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3045|      1|            ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|      1|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      1|    do {                    \
  |  |  |  |   52|      1|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3046|      1|            return SUCCESS;
  ------------------
  |  |   47|      1|#define SUCCESS 0
  ------------------
 3047|      1|        }
 3048|       |
 3049|  3.76k|        ADDOP_NAME(c, LOC(s), IMPORT_FROM, alias->name, names);
  ------------------
  |  |  419|  3.76k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  3.76k|    do {                    \
  |  |  |  |   52|  3.76k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.76k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.76k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.76k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3050|  3.76k|        store_name = alias->name;
 3051|  3.76k|        if (alias->asname) {
  ------------------
  |  Branch (3051:13): [True: 206, False: 3.55k]
  ------------------
 3052|    206|            store_name = alias->asname;
 3053|    206|        }
 3054|       |
 3055|  3.76k|        RETURN_IF_ERROR(codegen_nameop(c, LOC(s), store_name, Store));
  ------------------
  |  |   51|  3.76k|    do {                    \
  |  |   52|  3.76k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 3.76k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  3.76k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 3.76k]
  |  |  ------------------
  ------------------
 3056|  3.76k|    }
 3057|       |    /* remove imported module */
 3058|  2.18k|    ADDOP(c, LOC(s), POP_TOP);
  ------------------
  |  |  294|  2.18k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.18k|    do {                    \
  |  |  |  |   52|  2.18k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.18k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.18k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3059|  2.18k|    return SUCCESS;
  ------------------
  |  |   47|  2.18k|#define SUCCESS 0
  ------------------
 3060|  2.18k|}
codegen.c:codegen_stmt_expr:
 3094|  89.8k|{
 3095|  89.8k|    if (IS_INTERACTIVE_TOP_LEVEL(c)) {
  ------------------
  |  |   73|  89.8k|#define IS_INTERACTIVE_TOP_LEVEL(C) _PyCompile_IsInteractiveTopLevel(C)
  |  |  ------------------
  |  |  |  Branch (73:37): [True: 3.38k, False: 86.4k]
  |  |  ------------------
  ------------------
 3096|  3.38k|        VISIT(c, expr, value);
  ------------------
  |  |  460|  3.38k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  3.38k|    do {                    \
  |  |  |  |   52|  3.38k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 67, False: 3.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|     67|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     67|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     67|        }                   \
  |  |  |  |   55|  3.38k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3097|  3.31k|        ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_PRINT);
  ------------------
  |  |  280|  3.31k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  3.31k|    do {                    \
  |  |  |  |   52|  3.31k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3098|  3.31k|        ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|  3.31k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  3.31k|    do {                    \
  |  |  |  |   52|  3.31k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.31k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.31k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.31k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3099|  3.31k|        return SUCCESS;
  ------------------
  |  |   47|  3.31k|#define SUCCESS 0
  ------------------
 3100|  3.31k|    }
 3101|       |
 3102|  86.4k|    if (value->kind == Constant_kind) {
  ------------------
  |  Branch (3102:9): [True: 2.65k, False: 83.7k]
  ------------------
 3103|       |        /* ignore constant statement */
 3104|  2.65k|        ADDOP(c, loc, NOP);
  ------------------
  |  |  294|  2.65k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.65k|    do {                    \
  |  |  |  |   52|  2.65k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.65k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.65k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.65k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3105|  2.65k|        return SUCCESS;
  ------------------
  |  |   47|  2.65k|#define SUCCESS 0
  ------------------
 3106|  2.65k|    }
 3107|       |
 3108|  83.7k|    VISIT_UNUSED(c, expr, value);
  ------------------
  |  |  487|  83.7k|    RETURN_IF_ERROR(codegen_visit_unused_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  83.7k|    do {                    \
  |  |  |  |   52|  83.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 114, False: 83.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|    114|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    114|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    114|        }                   \
  |  |  |  |   55|  83.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 83.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3109|  83.6k|    ADDOP(c, NO_LOCATION, POP_TOP); /* artificial */
  ------------------
  |  |  294|  83.6k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  83.6k|    do {                    \
  |  |  |  |   52|  83.6k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 83.6k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  83.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 83.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3110|  83.6k|    return SUCCESS;
  ------------------
  |  |   47|  83.6k|#define SUCCESS 0
  ------------------
 3111|  83.6k|}
codegen.c:codegen_visit_unused_expr:
 5643|  83.7k|{
 5644|       |    return codegen_visit_expr_impl(c, e, true);
 5645|  83.7k|}
codegen.c:codegen_visit_expr_impl:
 5480|  2.51M|{
 5481|  2.51M|    if (Py_EnterRecursiveCall(" during compilation")) {
  ------------------
  |  Branch (5481:9): [True: 0, False: 2.51M]
  ------------------
 5482|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 5483|      0|    }
 5484|  2.51M|    location loc = LOC(e);
  ------------------
  |  |   88|  2.51M|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.51M|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.51M|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.51M|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.51M|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.51M|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5485|  2.51M|    switch (e->kind) {
  ------------------
  |  Branch (5485:13): [True: 2.51M, False: 0]
  ------------------
 5486|    936|    case NamedExpr_kind:
  ------------------
  |  Branch (5486:5): [True: 936, False: 2.51M]
  ------------------
 5487|    936|        VISIT(c, expr, e->v.NamedExpr.value);
  ------------------
  |  |  460|    936|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    936|    do {                    \
  |  |  |  |   52|    936|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 933]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    936|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 933]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5488|    933|        ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|    933|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    933|    do {                    \
  |  |  |  |   52|    933|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 933]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    933|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 933]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5489|    933|        VISIT(c, expr, e->v.NamedExpr.target);
  ------------------
  |  |  460|    933|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    933|    do {                    \
  |  |  |  |   52|    933|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 933]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    933|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 933]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5490|    933|        break;
 5491|  2.69k|    case BoolOp_kind:
  ------------------
  |  Branch (5491:5): [True: 2.69k, False: 2.51M]
  ------------------
 5492|  2.69k|        return codegen_boolop(c, e);
 5493|   793k|    case BinOp_kind:
  ------------------
  |  Branch (5493:5): [True: 793k, False: 1.72M]
  ------------------
 5494|   793k|        VISIT(c, expr, e->v.BinOp.left);
  ------------------
  |  |  460|   793k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|   793k|    do {                    \
  |  |  |  |   52|   793k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 326, False: 792k]
  |  |  |  |  ------------------
  |  |  |  |   53|    326|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    326|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    326|        }                   \
  |  |  |  |   55|   793k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 792k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5495|   792k|        VISIT(c, expr, e->v.BinOp.right);
  ------------------
  |  |  460|   792k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|   792k|    do {                    \
  |  |  |  |   52|   792k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 220, False: 792k]
  |  |  |  |  ------------------
  |  |  |  |   53|    220|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    220|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    220|        }                   \
  |  |  |  |   55|   792k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 792k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5496|   792k|        ADDOP_BINARY(c, loc, e->v.BinOp.op);
  ------------------
  |  |  441|   792k|    RETURN_IF_ERROR(addop_binary((C), (LOC), (BINOP), false))
  |  |  ------------------
  |  |  |  |   51|   792k|    do {                    \
  |  |  |  |   52|   792k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 792k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   792k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 792k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5497|   792k|        break;
 5498|   792k|    case UnaryOp_kind:
  ------------------
  |  Branch (5498:5): [True: 229k, False: 2.28M]
  ------------------
 5499|   229k|        VISIT(c, expr, e->v.UnaryOp.operand);
  ------------------
  |  |  460|   229k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|   229k|    do {                    \
  |  |  |  |   52|   229k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 442, False: 229k]
  |  |  |  |  ------------------
  |  |  |  |   53|    442|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    442|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    442|        }                   \
  |  |  |  |   55|   229k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 229k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5500|   229k|        if (e->v.UnaryOp.op == UAdd) {
  ------------------
  |  Branch (5500:13): [True: 57.4k, False: 171k]
  ------------------
 5501|  57.4k|            ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_UNARY_POSITIVE);
  ------------------
  |  |  280|  57.4k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  57.4k|    do {                    \
  |  |  |  |   52|  57.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 57.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  57.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 57.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5502|  57.4k|        }
 5503|   171k|        else if (e->v.UnaryOp.op == Not) {
  ------------------
  |  Branch (5503:18): [True: 1.35k, False: 170k]
  ------------------
 5504|  1.35k|            ADDOP(c, loc, TO_BOOL);
  ------------------
  |  |  294|  1.35k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.35k|    do {                    \
  |  |  |  |   52|  1.35k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.35k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.35k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5505|  1.35k|            ADDOP(c, loc, UNARY_NOT);
  ------------------
  |  |  294|  1.35k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.35k|    do {                    \
  |  |  |  |   52|  1.35k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.35k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.35k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5506|  1.35k|        }
 5507|   170k|        else {
 5508|   170k|            ADDOP(c, loc, unaryop(e->v.UnaryOp.op));
  ------------------
  |  |  294|   170k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|   170k|    do {                    \
  |  |  |  |   52|   170k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 170k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   170k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5509|   170k|        }
 5510|   229k|        break;
 5511|   229k|    case Lambda_kind:
  ------------------
  |  Branch (5511:5): [True: 4.35k, False: 2.51M]
  ------------------
 5512|  4.35k|        return codegen_lambda(c, e);
 5513|    587|    case IfExp_kind:
  ------------------
  |  Branch (5513:5): [True: 587, False: 2.51M]
  ------------------
 5514|    587|        return codegen_ifexp(c, e);
 5515|    535|    case Dict_kind:
  ------------------
  |  Branch (5515:5): [True: 535, False: 2.51M]
  ------------------
 5516|    535|        return codegen_dict(c, e);
 5517|  6.67k|    case Set_kind:
  ------------------
  |  Branch (5517:5): [True: 6.67k, False: 2.51M]
  ------------------
 5518|  6.67k|        return codegen_set(c, e);
 5519|    379|    case GeneratorExp_kind:
  ------------------
  |  Branch (5519:5): [True: 379, False: 2.51M]
  ------------------
 5520|    379|        return codegen_genexp(c, e);
 5521|     91|    case ListComp_kind:
  ------------------
  |  Branch (5521:5): [True: 91, False: 2.51M]
  ------------------
 5522|     91|        return codegen_listcomp(c, e, result_is_unused);
 5523|  1.56k|    case SetComp_kind:
  ------------------
  |  Branch (5523:5): [True: 1.56k, False: 2.51M]
  ------------------
 5524|  1.56k|        return codegen_setcomp(c, e);
 5525|    697|    case DictComp_kind:
  ------------------
  |  Branch (5525:5): [True: 697, False: 2.51M]
  ------------------
 5526|    697|        return codegen_dictcomp(c, e);
 5527|    274|    case Yield_kind:
  ------------------
  |  Branch (5527:5): [True: 274, False: 2.51M]
  ------------------
 5528|    274|        if (!_PyST_IsFunctionLike(SYMTABLE_ENTRY(c))) {
  ------------------
  |  |   71|    274|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (5528:13): [True: 109, False: 165]
  ------------------
 5529|    109|            return _PyCompile_Error(c, loc, "'yield' outside function");
 5530|    109|        }
 5531|    165|        if (e->v.Yield.value) {
  ------------------
  |  Branch (5531:13): [True: 59, False: 106]
  ------------------
 5532|     59|            VISIT(c, expr, e->v.Yield.value);
  ------------------
  |  |  460|     59|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     59|    do {                    \
  |  |  |  |   52|     59|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 59]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     59|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 59]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5533|     59|        }
 5534|    106|        else {
 5535|    106|            ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|    106|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    106|    do {                    \
  |  |  |  |   52|    106|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 106]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    106|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 106]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5536|    106|        }
 5537|    165|        ADDOP_YIELD(c, loc);
  ------------------
  |  |  453|    165|    RETURN_IF_ERROR(codegen_addop_yield((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    165|    do {                    \
  |  |  |  |   52|    165|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 165]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    165|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 165]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5538|    165|        break;
 5539|    165|    case YieldFrom_kind:
  ------------------
  |  Branch (5539:5): [True: 18, False: 2.51M]
  ------------------
 5540|     18|        if (!_PyST_IsFunctionLike(SYMTABLE_ENTRY(c))) {
  ------------------
  |  |   71|     18|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (5540:13): [True: 6, False: 12]
  ------------------
 5541|      6|            return _PyCompile_Error(c, loc, "'yield from' outside function");
 5542|      6|        }
 5543|     12|        if (SCOPE_TYPE(c) == COMPILE_SCOPE_ASYNC_FUNCTION) {
  ------------------
  |  |   74|     12|#define SCOPE_TYPE(C) _PyCompile_ScopeType(C)
  ------------------
  |  Branch (5543:13): [True: 6, False: 6]
  ------------------
 5544|      6|            return _PyCompile_Error(c, loc, "'yield from' inside async function");
 5545|      6|        }
 5546|      6|        VISIT(c, expr, e->v.YieldFrom.value);
  ------------------
  |  |  460|      6|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      6|    do {                    \
  |  |  |  |   52|      6|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5547|      6|        ADDOP_I(c, loc, GET_ITER, GET_ITER_YIELD_FROM);
  ------------------
  |  |  280|      6|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      6|    do {                    \
  |  |  |  |   52|      6|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5548|      6|        ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|      6|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      6|    do {                    \
  |  |  |  |   52|      6|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5549|      6|        ADD_YIELD_FROM(c, loc, 0);
  ------------------
  |  |  447|      6|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|      6|    do {                    \
  |  |  |  |   52|      6|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5550|      6|        break;
 5551|    308|    case Await_kind:
  ------------------
  |  Branch (5551:5): [True: 308, False: 2.51M]
  ------------------
 5552|    308|        VISIT(c, expr, e->v.Await.value);
  ------------------
  |  |  460|    308|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    308|    do {                    \
  |  |  |  |   52|    308|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 7, False: 301]
  |  |  |  |  ------------------
  |  |  |  |   53|      7|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      7|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      7|        }                   \
  |  |  |  |   55|    308|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5553|    301|        ADDOP_I(c, loc, GET_AWAITABLE, 0);
  ------------------
  |  |  280|    301|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    301|    do {                    \
  |  |  |  |   52|    301|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 301]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    301|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5554|    301|        ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|    301|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    301|    do {                    \
  |  |  |  |   52|    301|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 301]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    301|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5555|    301|        ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|    301|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    301|    do {                    \
  |  |  |  |   52|    301|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 301]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    301|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5556|    301|        ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|    301|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|    301|    do {                    \
  |  |  |  |   52|    301|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 301]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    301|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5557|    301|        break;
 5558|  21.3k|    case Compare_kind:
  ------------------
  |  Branch (5558:5): [True: 21.3k, False: 2.49M]
  ------------------
 5559|  21.3k|        return codegen_compare(c, e);
 5560|  9.83k|    case Call_kind:
  ------------------
  |  Branch (5560:5): [True: 9.83k, False: 2.50M]
  ------------------
 5561|  9.83k|        return codegen_call(c, e);
 5562|   942k|    case Constant_kind:
  ------------------
  |  Branch (5562:5): [True: 942k, False: 1.57M]
  ------------------
 5563|   942k|        ADDOP_LOAD_CONST(c, loc, e->v.Constant.value);
  ------------------
  |  |  311|   942k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|   942k|    do {                    \
  |  |  |  |   52|   942k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 942k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|   942k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 942k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5564|   942k|        break;
 5565|   942k|    case JoinedStr_kind:
  ------------------
  |  Branch (5565:5): [True: 3.51k, False: 2.51M]
  ------------------
 5566|  3.51k|        return codegen_joined_str(c, e);
 5567|  1.09k|    case TemplateStr_kind:
  ------------------
  |  Branch (5567:5): [True: 1.09k, False: 2.51M]
  ------------------
 5568|  1.09k|        return codegen_template_str(c, e);
 5569|  3.80k|    case FormattedValue_kind:
  ------------------
  |  Branch (5569:5): [True: 3.80k, False: 2.51M]
  ------------------
 5570|  3.80k|        return codegen_formatted_value(c, e);
 5571|  1.60k|    case Interpolation_kind:
  ------------------
  |  Branch (5571:5): [True: 1.60k, False: 2.51M]
  ------------------
 5572|  1.60k|        return codegen_interpolation(c, e);
 5573|       |    /* The following exprs can be assignment targets. */
 5574|  13.9k|    case Attribute_kind:
  ------------------
  |  Branch (5574:5): [True: 13.9k, False: 2.50M]
  ------------------
 5575|  13.9k|        if (e->v.Attribute.ctx == Load) {
  ------------------
  |  Branch (5575:13): [True: 12.4k, False: 1.44k]
  ------------------
 5576|  12.4k|            int ret = can_optimize_super_call(c, e);
 5577|  12.4k|            RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  12.4k|    do {                    \
  |  |   52|  12.4k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 12.4k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  12.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 12.4k]
  |  |  ------------------
  ------------------
 5578|  12.4k|            if (ret) {
  ------------------
  |  Branch (5578:17): [True: 499, False: 11.9k]
  ------------------
 5579|    499|                RETURN_IF_ERROR(load_args_for_super(c, e->v.Attribute.value));
  ------------------
  |  |   51|    499|    do {                    \
  |  |   52|    499|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 499]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    499|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 499]
  |  |  ------------------
  ------------------
 5580|    499|                int opcode = asdl_seq_LEN(e->v.Attribute.value->v.Call.args) ?
  ------------------
  |  |   83|    499|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    998|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 499, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 499]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5581|    499|                    LOAD_SUPER_ATTR : LOAD_ZERO_SUPER_ATTR;
  ------------------
  |  |  105|    499|#define LOAD_SUPER_ATTR                         92
  ------------------
                                  LOAD_SUPER_ATTR : LOAD_ZERO_SUPER_ATTR;
  ------------------
  |  |  364|      0|#define LOAD_ZERO_SUPER_ATTR -3
  ------------------
 5582|    499|                ADDOP_NAME(c, loc, opcode, e->v.Attribute.attr, names);
  ------------------
  |  |  419|    499|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|    499|    do {                    \
  |  |  |  |   52|    499|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 499]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    499|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 499]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5583|    499|                loc = update_start_location_to_match_attr(c, loc, e);
 5584|    499|                ADDOP(c, loc, NOP);
  ------------------
  |  |  294|    499|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    499|    do {                    \
  |  |  |  |   52|    499|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 499]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    499|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 499]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5585|    499|                return SUCCESS;
  ------------------
  |  |   47|    499|#define SUCCESS 0
  ------------------
 5586|    499|            }
 5587|  12.4k|        }
 5588|  13.4k|        RETURN_IF_ERROR(_PyCompile_MaybeAddStaticAttributeToClass(c, e));
  ------------------
  |  |   51|  13.4k|    do {                    \
  |  |   52|  13.4k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 13.4k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  13.4k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 13.4k]
  |  |  ------------------
  ------------------
 5589|  13.4k|        loc = LOC(e);
  ------------------
  |  |   88|  13.4k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  13.4k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  13.4k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  13.4k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  13.4k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  13.4k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5590|  13.4k|        loc = update_start_location_to_match_attr(c, loc, e);
 5591|  13.4k|        switch (e->v.Attribute.ctx) {
  ------------------
  |  Branch (5591:17): [True: 13.4k, False: 0]
  ------------------
 5592|  11.9k|        case Load:
  ------------------
  |  Branch (5592:9): [True: 11.9k, False: 1.44k]
  ------------------
 5593|  11.9k|            VISIT(c, expr, e->v.Attribute.value);
  ------------------
  |  |  460|  11.9k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  11.9k|    do {                    \
  |  |  |  |   52|  11.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 192, False: 11.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|    192|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    192|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    192|        }                   \
  |  |  |  |   55|  11.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5594|  11.7k|            ADDOP_NAME(c, loc, LOAD_ATTR, e->v.Attribute.attr, names);
  ------------------
  |  |  419|  11.7k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  11.7k|    do {                    \
  |  |  |  |   52|  11.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5595|  11.7k|            break;
 5596|  11.7k|        case Store:
  ------------------
  |  Branch (5596:9): [True: 863, False: 12.5k]
  ------------------
 5597|    863|            VISIT(c, expr, e->v.Attribute.value);
  ------------------
  |  |  460|    863|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    863|    do {                    \
  |  |  |  |   52|    863|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 860]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    863|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 860]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5598|    860|            ADDOP_NAME(c, loc, STORE_ATTR, e->v.Attribute.attr, names);
  ------------------
  |  |  419|    860|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|    860|    do {                    \
  |  |  |  |   52|    860|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 860]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    860|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 860]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5599|    860|            break;
 5600|    860|        case Del:
  ------------------
  |  Branch (5600:9): [True: 585, False: 12.8k]
  ------------------
 5601|    585|            ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|    585|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    585|    do {                    \
  |  |  |  |   52|    585|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 585]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    585|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 585]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5602|    585|            VISIT(c, expr, e->v.Attribute.value);
  ------------------
  |  |  460|    585|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    585|    do {                    \
  |  |  |  |   52|    585|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 584]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    585|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 584]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5603|    584|            ADDOP_NAME(c, loc, STORE_ATTR, e->v.Attribute.attr, names);
  ------------------
  |  |  419|    584|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|    584|    do {                    \
  |  |  |  |   52|    584|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 584]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    584|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 584]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5604|    584|            break;
 5605|  13.4k|        }
 5606|  13.2k|        break;
 5607|  13.2k|    case Subscript_kind:
  ------------------
  |  Branch (5607:5): [True: 10.2k, False: 2.50M]
  ------------------
 5608|  10.2k|        return codegen_subscript(c, e);
 5609|    175|    case Starred_kind:
  ------------------
  |  Branch (5609:5): [True: 175, False: 2.51M]
  ------------------
 5610|    175|        switch (e->v.Starred.ctx) {
 5611|     43|        case Store:
  ------------------
  |  Branch (5611:9): [True: 43, False: 132]
  ------------------
 5612|       |            /* In all legitimate cases, the Starred node was already replaced
 5613|       |             * by codegen_list/codegen_tuple. XXX: is that okay? */
 5614|     43|            return _PyCompile_Error(c, loc,
 5615|     43|                "starred assignment target must be in a list or tuple");
 5616|    132|        default:
  ------------------
  |  Branch (5616:9): [True: 132, False: 43]
  ------------------
 5617|    132|            return _PyCompile_Error(c, loc,
 5618|    132|                "can't use starred expression here");
 5619|    175|        }
 5620|      0|        break;
 5621|  9.97k|    case Slice_kind:
  ------------------
  |  Branch (5621:5): [True: 9.97k, False: 2.50M]
  ------------------
 5622|  9.97k|        RETURN_IF_ERROR(codegen_slice(c, e));
  ------------------
  |  |   51|  9.97k|    do {                    \
  |  |   52|  9.97k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 8, False: 9.96k]
  |  |  ------------------
  |  |   53|      8|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      8|#define ERROR -1
  |  |  ------------------
  |  |   54|      8|        }                   \
  |  |   55|  9.97k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 9.96k]
  |  |  ------------------
  ------------------
 5623|  9.96k|        break;
 5624|   376k|    case Name_kind:
  ------------------
  |  Branch (5624:5): [True: 376k, False: 2.14M]
  ------------------
 5625|   376k|        return codegen_nameop(c, loc, e->v.Name.id, e->v.Name.ctx);
 5626|       |    /* child nodes of List and Tuple will have expr_context set */
 5627|  2.54k|    case List_kind:
  ------------------
  |  Branch (5627:5): [True: 2.54k, False: 2.51M]
  ------------------
 5628|  2.54k|        return codegen_list(c, e);
 5629|  78.0k|    case Tuple_kind:
  ------------------
  |  Branch (5629:5): [True: 78.0k, False: 2.43M]
  ------------------
 5630|  78.0k|        return codegen_tuple(c, e);
 5631|  2.51M|    }
 5632|  1.98M|    return SUCCESS;
  ------------------
  |  |   47|  1.98M|#define SUCCESS 0
  ------------------
 5633|  2.51M|}
codegen.c:codegen_boolop:
 3425|  2.69k|{
 3426|  2.69k|    int jumpi;
 3427|  2.69k|    Py_ssize_t i, n;
 3428|  2.69k|    asdl_expr_seq *s;
 3429|       |
 3430|  2.69k|    location loc = LOC(e);
  ------------------
  |  |   88|  2.69k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.69k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.69k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.69k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.69k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.69k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3431|  2.69k|    assert(e->kind == BoolOp_kind);
  ------------------
  |  Branch (3431:5): [True: 2.69k, False: 0]
  ------------------
 3432|  2.69k|    if (e->v.BoolOp.op == And)
  ------------------
  |  Branch (3432:9): [True: 1.25k, False: 1.43k]
  ------------------
 3433|  1.25k|        jumpi = JUMP_IF_FALSE;
  ------------------
  |  |  246|  1.25k|#define JUMP_IF_FALSE                          258
  ------------------
 3434|  1.43k|    else
 3435|  1.43k|        jumpi = JUMP_IF_TRUE;
  ------------------
  |  |  247|  1.43k|#define JUMP_IF_TRUE                           259
  ------------------
 3436|  2.69k|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  2.69k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.69k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.69k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.69k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.69k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.69k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 3437|  2.69k|    s = e->v.BoolOp.values;
 3438|  2.69k|    n = asdl_seq_LEN(s) - 1;
  ------------------
  |  |   83|  2.69k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  5.38k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.69k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3439|  2.69k|    assert(n >= 0);
  ------------------
  |  Branch (3439:5): [True: 2.69k, False: 0]
  ------------------
 3440|  8.70k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (3440:17): [True: 6.03k, False: 2.67k]
  ------------------
 3441|  6.03k|        VISIT(c, expr, (expr_ty)asdl_seq_GET(s, i));
  ------------------
  |  |  460|  6.03k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  6.03k|    do {                    \
  |  |  |  |   52|  6.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 16, False: 6.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|     16|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     16|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     16|        }                   \
  |  |  |  |   55|  6.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3442|  6.01k|        ADDOP_JUMP(c, loc, jumpi, end);
  ------------------
  |  |  435|  6.01k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  6.01k|    do {                    \
  |  |  |  |   52|  6.01k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3443|  6.01k|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  6.01k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  6.01k|    do {                    \
  |  |  |  |   52|  6.01k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.01k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3444|  6.01k|    }
 3445|  2.67k|    VISIT(c, expr, (expr_ty)asdl_seq_GET(s, n));
  ------------------
  |  |  460|  2.67k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  2.67k|    do {                    \
  |  |  |  |   52|  2.67k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 8, False: 2.66k]
  |  |  |  |  ------------------
  |  |  |  |   53|      8|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      8|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      8|        }                   \
  |  |  |  |   55|  2.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.66k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3446|       |
 3447|  2.66k|    USE_LABEL(c, end);
  ------------------
  |  |  100|  2.66k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.66k|    do {                    \
  |  |  |  |   52|  2.66k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.66k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.66k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.66k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3448|  2.66k|    return SUCCESS;
  ------------------
  |  |   47|  2.66k|#define SUCCESS 0
  ------------------
 3449|  2.66k|}
codegen.c:unaryop:
 3230|   170k|{
 3231|   170k|    switch (op) {
 3232|  11.8k|    case Invert:
  ------------------
  |  Branch (3232:5): [True: 11.8k, False: 158k]
  ------------------
 3233|  11.8k|        return UNARY_INVERT;
  ------------------
  |  |   51|  11.8k|#define UNARY_INVERT                            38
  ------------------
 3234|   158k|    case USub:
  ------------------
  |  Branch (3234:5): [True: 158k, False: 11.8k]
  ------------------
 3235|   158k|        return UNARY_NEGATIVE;
  ------------------
  |  |   52|   158k|#define UNARY_NEGATIVE                          39
  ------------------
 3236|      0|    default:
  ------------------
  |  Branch (3236:5): [True: 0, False: 170k]
  ------------------
 3237|      0|        PyErr_Format(PyExc_SystemError,
 3238|      0|            "unary op %d should not be possible", op);
 3239|      0|        return 0;
 3240|   170k|    }
 3241|   170k|}
codegen.c:codegen_lambda:
 2092|  4.35k|{
 2093|  4.35k|    PyCodeObject *co;
 2094|  4.35k|    Py_ssize_t funcflags;
 2095|  4.35k|    arguments_ty args = e->v.Lambda.args;
 2096|  4.35k|    assert(e->kind == Lambda_kind);
  ------------------
  |  Branch (2096:5): [True: 4.35k, False: 0]
  ------------------
 2097|       |
 2098|  4.35k|    location loc = LOC(e);
  ------------------
  |  |   88|  4.35k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  4.35k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  4.35k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  4.35k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  4.35k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  4.35k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2099|  4.35k|    funcflags = codegen_default_arguments(c, loc, args);
 2100|  4.35k|    RETURN_IF_ERROR(funcflags);
  ------------------
  |  |   51|  4.35k|    do {                    \
  |  |   52|  4.35k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 4.35k]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|  4.35k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 4.35k]
  |  |  ------------------
  ------------------
 2101|       |
 2102|  4.35k|    _PyCompile_CodeUnitMetadata umd = {
 2103|  4.35k|        .u_argcount = asdl_seq_LEN(args->args),
  ------------------
  |  |   83|  4.35k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  8.70k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2104|  4.35k|        .u_posonlyargcount = asdl_seq_LEN(args->posonlyargs),
  ------------------
  |  |   83|  4.35k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  8.70k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2105|  4.35k|        .u_kwonlyargcount = asdl_seq_LEN(args->kwonlyargs),
  ------------------
  |  |   83|  4.35k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  8.70k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.35k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2106|  4.35k|    };
 2107|  4.35k|    _Py_DECLARE_STR(anon_lambda, "<lambda>");
 2108|  4.35k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  4.35k|    do {                    \
  |  |   52|  4.35k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 4.35k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  4.35k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 4.35k]
  |  |  ------------------
  ------------------
 2109|  4.35k|        codegen_enter_scope(c, &_Py_STR(anon_lambda), COMPILE_SCOPE_LAMBDA,
 2110|  4.35k|                            (void *)e, e->lineno, NULL, &umd));
 2111|       |
 2112|  4.35k|    assert(!SYMTABLE_ENTRY(c)->ste_has_docstring);
  ------------------
  |  Branch (2112:5): [True: 4.35k, False: 0]
  ------------------
 2113|       |
 2114|  4.35k|    VISIT_IN_SCOPE(c, expr, e->v.Lambda.body);
  ------------------
  |  |  463|  4.35k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   58|  4.35k|    do {                                    \
  |  |  |  |   59|  4.35k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 3, False: 4.34k]
  |  |  |  |  ------------------
  |  |  |  |   60|      3|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      3|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      3|        }                                   \
  |  |  |  |   63|  4.35k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 4.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2115|  4.34k|    if (SYMTABLE_ENTRY(c)->ste_generator) {
  ------------------
  |  |   71|  4.34k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  |  Branch (2115:9): [True: 0, False: 4.34k]
  ------------------
 2116|      0|        co = _PyCompile_OptimizeAndAssemble(c, 0);
 2117|      0|    }
 2118|  4.34k|    else {
 2119|  4.34k|        location loc = LOC(e->v.Lambda.body);
  ------------------
  |  |   88|  4.34k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  4.34k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  4.34k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  4.34k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  4.34k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  4.34k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2120|  4.34k|        ADDOP_IN_SCOPE(c, loc, RETURN_VALUE);
  ------------------
  |  |  297|  4.34k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  4.34k|    do {                                    \
  |  |  |  |   59|  4.34k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 4.34k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  4.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 4.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2121|  4.34k|        co = _PyCompile_OptimizeAndAssemble(c, 1);
 2122|  4.34k|    }
 2123|  4.34k|    _PyCompile_ExitScope(c);
 2124|  4.34k|    if (co == NULL) {
  ------------------
  |  Branch (2124:9): [True: 0, False: 4.34k]
  ------------------
 2125|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 2126|      0|    }
 2127|       |
 2128|  4.34k|    int ret = codegen_make_closure(c, loc, co, funcflags);
 2129|  4.34k|    Py_DECREF(co);
  ------------------
  |  |  430|  4.34k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2130|  4.34k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  4.34k|    do {                    \
  |  |   52|  4.34k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 4.34k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  4.34k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 4.34k]
  |  |  ------------------
  ------------------
 2131|  4.34k|    return SUCCESS;
  ------------------
  |  |   47|  4.34k|#define SUCCESS 0
  ------------------
 2132|  4.34k|}
codegen.c:codegen_ifexp:
 2072|    587|{
 2073|    587|    assert(e->kind == IfExp_kind);
  ------------------
  |  Branch (2073:5): [True: 587, False: 0]
  ------------------
 2074|    587|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|    587|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    587|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    587|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    587|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    587|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 587]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2075|    587|    NEW_JUMP_TARGET_LABEL(c, next);
  ------------------
  |  |   94|    587|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    587|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    587|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    587|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    587|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 587]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2076|       |
 2077|    587|    RETURN_IF_ERROR(
  ------------------
  |  |   51|    587|    do {                    \
  |  |   52|    587|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 587]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    587|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 587]
  |  |  ------------------
  ------------------
 2078|    587|        codegen_jump_if(c, LOC(e), e->v.IfExp.test, next, 0));
 2079|       |
 2080|    587|    VISIT(c, expr, e->v.IfExp.body);
  ------------------
  |  |  460|    587|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    587|    do {                    \
  |  |  |  |   52|    587|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 586]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    587|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 586]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2081|    586|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|    586|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    586|    do {                    \
  |  |  |  |   52|    586|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 586]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    586|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 586]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2082|       |
 2083|    586|    USE_LABEL(c, next);
  ------------------
  |  |  100|    586|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    586|    do {                    \
  |  |  |  |   52|    586|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 586]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    586|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 586]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2084|    586|    VISIT(c, expr, e->v.IfExp.orelse);
  ------------------
  |  |  460|    586|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    586|    do {                    \
  |  |  |  |   52|    586|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 16, False: 570]
  |  |  |  |  ------------------
  |  |  |  |   53|     16|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     16|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     16|        }                   \
  |  |  |  |   55|    586|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 570]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2085|       |
 2086|    570|    USE_LABEL(c, end);
  ------------------
  |  |  100|    570|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    570|    do {                    \
  |  |  |  |   52|    570|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 570]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    570|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 570]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2087|    570|    return SUCCESS;
  ------------------
  |  |   47|    570|#define SUCCESS 0
  ------------------
 2088|    570|}
codegen.c:codegen_dict:
 3660|    535|{
 3661|    535|    location loc = LOC(e);
  ------------------
  |  |   88|    535|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    535|    (_Py_SourceLocation){ \
  |  |  |  |   59|    535|               .lineno = (n)->lineno, \
  |  |  |  |   60|    535|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    535|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    535|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3662|    535|    Py_ssize_t i, n, elements;
 3663|    535|    int have_dict;
 3664|    535|    int is_unpacking = 0;
 3665|    535|    n = asdl_seq_LEN(e->v.Dict.values);
  ------------------
  |  |   83|    535|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.07k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 535]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3666|    535|    have_dict = 0;
 3667|    535|    elements = 0;
 3668|  1.14k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3668:17): [True: 613, False: 530]
  ------------------
 3669|    613|        is_unpacking = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i) == NULL;
  ------------------
  |  |   82|    613|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    613|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3670|    613|        if (is_unpacking) {
  ------------------
  |  Branch (3670:13): [True: 143, False: 470]
  ------------------
 3671|    143|            if (elements) {
  ------------------
  |  Branch (3671:17): [True: 98, False: 45]
  ------------------
 3672|     98|                RETURN_IF_ERROR(codegen_subdict(c, e, i - elements, i));
  ------------------
  |  |   51|     98|    do {                    \
  |  |   52|     98|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 2, False: 96]
  |  |  ------------------
  |  |   53|      2|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      2|#define ERROR -1
  |  |  ------------------
  |  |   54|      2|        }                   \
  |  |   55|     98|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 96]
  |  |  ------------------
  ------------------
 3673|     96|                if (have_dict) {
  ------------------
  |  Branch (3673:21): [True: 0, False: 96]
  ------------------
 3674|      0|                    ADDOP_I(c, loc, DICT_UPDATE, 1);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3675|      0|                }
 3676|     96|                have_dict = 1;
 3677|     96|                elements = 0;
 3678|     96|            }
 3679|    141|            if (have_dict == 0) {
  ------------------
  |  Branch (3679:17): [True: 45, False: 96]
  ------------------
 3680|     45|                ADDOP_I(c, loc, BUILD_MAP, 0);
  ------------------
  |  |  280|     45|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     45|    do {                    \
  |  |  |  |   52|     45|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 45]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     45|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 45]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3681|     45|                have_dict = 1;
 3682|     45|            }
 3683|    141|            VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
  ------------------
  |  |  460|    141|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    141|    do {                    \
  |  |  |  |   52|    141|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 138]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    141|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 138]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3684|    138|            ADDOP_I(c, loc, DICT_UPDATE, 1);
  ------------------
  |  |  280|    138|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    138|    do {                    \
  |  |  |  |   52|    138|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 138]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    138|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 138]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3685|    138|        }
 3686|    470|        else {
 3687|    470|            if (elements*2 > _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   24|    470|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (3687:17): [True: 16, False: 454]
  ------------------
 3688|     16|                RETURN_IF_ERROR(codegen_subdict(c, e, i - elements, i + 1));
  ------------------
  |  |   51|     16|    do {                    \
  |  |   52|     16|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 16]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     16|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 16]
  |  |  ------------------
  ------------------
 3689|     16|                if (have_dict) {
  ------------------
  |  Branch (3689:21): [True: 10, False: 6]
  ------------------
 3690|     10|                    ADDOP_I(c, loc, DICT_UPDATE, 1);
  ------------------
  |  |  280|     10|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     10|    do {                    \
  |  |  |  |   52|     10|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     10|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3691|     10|                }
 3692|     16|                have_dict = 1;
 3693|     16|                elements = 0;
 3694|     16|            }
 3695|    454|            else {
 3696|    454|                elements++;
 3697|    454|            }
 3698|    470|        }
 3699|    613|    }
 3700|    530|    if (elements) {
  ------------------
  |  Branch (3700:9): [True: 56, False: 474]
  ------------------
 3701|     56|        RETURN_IF_ERROR(codegen_subdict(c, e, n - elements, n));
  ------------------
  |  |   51|     56|    do {                    \
  |  |   52|     56|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 4, False: 52]
  |  |  ------------------
  |  |   53|      4|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      4|#define ERROR -1
  |  |  ------------------
  |  |   54|      4|        }                   \
  |  |   55|     56|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 52]
  |  |  ------------------
  ------------------
 3702|     52|        if (have_dict) {
  ------------------
  |  Branch (3702:13): [True: 5, False: 47]
  ------------------
 3703|      5|            ADDOP_I(c, loc, DICT_UPDATE, 1);
  ------------------
  |  |  280|      5|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      5|    do {                    \
  |  |  |  |   52|      5|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      5|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3704|      5|        }
 3705|     52|        have_dict = 1;
 3706|     52|    }
 3707|    526|    if (!have_dict) {
  ------------------
  |  Branch (3707:9): [True: 335, False: 191]
  ------------------
 3708|    335|        ADDOP_I(c, loc, BUILD_MAP, 0);
  ------------------
  |  |  280|    335|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    335|    do {                    \
  |  |  |  |   52|    335|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 335]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    335|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 335]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3709|    335|    }
 3710|    526|    return SUCCESS;
  ------------------
  |  |   47|    526|#define SUCCESS 0
  ------------------
 3711|    526|}
codegen.c:codegen_subdict:
 3638|    170|{
 3639|    170|    Py_ssize_t i, n = end - begin;
 3640|    170|    int big = n*2 > _PY_STACK_USE_GUIDELINE;
  ------------------
  |  |   24|    170|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
 3641|    170|    location loc = LOC(e);
  ------------------
  |  |   88|    170|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    170|    (_Py_SourceLocation){ \
  |  |  |  |   59|    170|               .lineno = (n)->lineno, \
  |  |  |  |   60|    170|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    170|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    170|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3642|    170|    if (big) {
  ------------------
  |  Branch (3642:9): [True: 17, False: 153]
  ------------------
 3643|     17|        ADDOP_I(c, loc, BUILD_MAP, 0);
  ------------------
  |  |  280|     17|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     17|    do {                    \
  |  |  |  |   52|     17|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 17]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     17|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3644|     17|    }
 3645|    634|    for (i = begin; i < end; i++) {
  ------------------
  |  Branch (3645:21): [True: 470, False: 164]
  ------------------
 3646|    470|        VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.keys, i));
  ------------------
  |  |  460|    470|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    470|    do {                    \
  |  |  |  |   52|    470|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 469]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    470|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 469]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3647|    469|        VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
  ------------------
  |  |  460|    469|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    469|    do {                    \
  |  |  |  |   52|    469|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 5, False: 464]
  |  |  |  |  ------------------
  |  |  |  |   53|      5|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      5|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      5|        }                   \
  |  |  |  |   55|    469|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 464]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3648|    464|        if (big) {
  ------------------
  |  Branch (3648:13): [True: 288, False: 176]
  ------------------
 3649|    288|            ADDOP_I(c, loc, MAP_ADD, 1);
  ------------------
  |  |  280|    288|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    288|    do {                    \
  |  |  |  |   52|    288|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 288]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    288|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 288]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3650|    288|        }
 3651|    464|    }
 3652|    164|    if (!big) {
  ------------------
  |  Branch (3652:9): [True: 147, False: 17]
  ------------------
 3653|    147|        ADDOP_I(c, loc, BUILD_MAP, n);
  ------------------
  |  |  280|    147|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    147|    do {                    \
  |  |  |  |   52|    147|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 147]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    147|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 147]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3654|    147|    }
 3655|    164|    return SUCCESS;
  ------------------
  |  |   47|    164|#define SUCCESS 0
  ------------------
 3656|    164|}
codegen.c:codegen_set:
 3630|  6.67k|{
 3631|  6.67k|    location loc = LOC(e);
  ------------------
  |  |   88|  6.67k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  6.67k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  6.67k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  6.67k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  6.67k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  6.67k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3632|  6.67k|    return starunpack_helper(c, loc, e->v.Set.elts, 0,
 3633|  6.67k|                             BUILD_SET, SET_ADD, SET_UPDATE, 0);
  ------------------
  |  |   59|  6.67k|#define BUILD_SET                               46
  ------------------
                                           BUILD_SET, SET_ADD, SET_UPDATE, 0);
  ------------------
  |  |  116|  6.67k|#define SET_ADD                                103
  ------------------
                                           BUILD_SET, SET_ADD, SET_UPDATE, 0);
  ------------------
  |  |  118|  6.67k|#define SET_UPDATE                             105
  ------------------
 3634|  6.67k|}
codegen.c:starunpack_helper:
 3547|  63.6k|{
 3548|       |    return starunpack_helper_impl(c, loc, elts, NULL, pushed,
 3549|  63.6k|                                  build, add, extend, tuple);
 3550|  63.6k|}
codegen.c:codegen_genexp:
 5195|    379|{
 5196|    379|    assert(e->kind == GeneratorExp_kind);
  ------------------
  |  Branch (5196:5): [True: 379, False: 0]
  ------------------
 5197|    379|    _Py_DECLARE_STR(anon_genexpr, "<genexpr>");
 5198|    379|    return codegen_comprehension(c, e, COMP_GENEXP, &_Py_STR(anon_genexpr),
  ------------------
  |  |   40|    379|#define COMP_GENEXP   0
  ------------------
                  return codegen_comprehension(c, e, COMP_GENEXP, &_Py_STR(anon_genexpr),
  ------------------
  |  |  938|    379|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    379|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    379|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5199|    379|                                 e->v.GeneratorExp.generators,
 5200|    379|                                 e->v.GeneratorExp.elt, NULL, false);
 5201|    379|}
codegen.c:codegen_comprehension:
 5067|  2.72k|{
 5068|  2.72k|    PyCodeObject *co = NULL;
 5069|  2.72k|    _PyCompile_InlinedComprehensionState inline_state = {NULL, NO_LABEL, NULL};
  ------------------
  |  |   57|  2.72k|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
 5070|  2.72k|    comprehension_ty outermost;
 5071|  2.72k|    PySTEntryObject *entry = _PySymtable_Lookup(SYMTABLE(c), (void *)e);
  ------------------
  |  |   70|  2.72k|#define SYMTABLE(C) _PyCompile_Symtable(C)
  ------------------
 5072|  2.72k|    if (entry == NULL) {
  ------------------
  |  Branch (5072:9): [True: 0, False: 2.72k]
  ------------------
 5073|      0|        goto error;
 5074|      0|    }
 5075|  2.72k|    int is_inlined = (entry->ste_type == InlinedComprehensionBlock);
 5076|  2.72k|    int is_async_comprehension = entry->ste_coroutine;
 5077|       |
 5078|  2.72k|    location loc = LOC(e);
  ------------------
  |  |   88|  2.72k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.72k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.72k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.72k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.72k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.72k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5079|       |
 5080|  2.72k|    outermost = (comprehension_ty) asdl_seq_GET(generators, 0);
  ------------------
  |  |   82|  2.72k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.72k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 5081|  2.72k|    IterStackPosition iter_state;
 5082|  2.72k|    if (is_inlined) {
  ------------------
  |  Branch (5082:9): [True: 2.34k, False: 379]
  ------------------
 5083|  2.34k|        VISIT(c, expr, outermost->iter);
  ------------------
  |  |  460|  2.34k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  2.34k|    do {                    \
  |  |  |  |   52|  2.34k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|  2.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5084|  2.34k|        if (push_inlined_comprehension_state(c, loc, entry, &inline_state) < 0) {
  ------------------
  |  Branch (5084:13): [True: 0, False: 2.34k]
  ------------------
 5085|      0|            goto error;
 5086|      0|        }
 5087|  2.34k|        iter_state = ITERABLE_ON_STACK;
 5088|  2.34k|    }
 5089|    379|    else {
 5090|       |        /* Receive outermost iter as an implicit argument */
 5091|    379|        _PyCompile_CodeUnitMetadata umd = {
 5092|    379|            .u_argcount = 1,
 5093|    379|        };
 5094|    379|        if (codegen_enter_scope(c, name, COMPILE_SCOPE_COMPREHENSION,
  ------------------
  |  Branch (5094:13): [True: 0, False: 379]
  ------------------
 5095|    379|                                (void *)e, e->lineno, NULL, &umd) < 0) {
 5096|      0|            goto error;
 5097|      0|        }
 5098|    379|        if (type == COMP_GENEXP) {
  ------------------
  |  |   40|    379|#define COMP_GENEXP   0
  ------------------
  |  Branch (5098:13): [True: 379, False: 0]
  ------------------
 5099|       |            /* Insert GET_ITER before RETURN_GENERATOR.
 5100|       |               https://docs.python.org/3/reference/expressions.html#generator-expressions */
 5101|    379|            if(_PyInstructionSequence_InsertInstruction(
  ------------------
  |  Branch (5101:16): [True: 0, False: 379]
  ------------------
 5102|    379|                    INSTR_SEQUENCE(c), 0,
  ------------------
  |  |   68|    379|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
 5103|    379|                    RESUME, RESUME_AT_GEN_EXPR_START, NO_LOCATION) < 0) {
  ------------------
  |  |  130|    379|#define RESUME                                 128
  ------------------
                                  RESUME, RESUME_AT_GEN_EXPR_START, NO_LOCATION) < 0) {
  ------------------
  |  |   92|    379|#define RESUME_AT_GEN_EXPR_START 4
  ------------------
 5104|      0|                goto error_in_scope;
 5105|      0|            }
 5106|    379|            if(_PyInstructionSequence_InsertInstruction(
  ------------------
  |  Branch (5106:16): [True: 0, False: 379]
  ------------------
 5107|    379|                    INSTR_SEQUENCE(c), 1,
  ------------------
  |  |   68|    379|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
 5108|    379|                    LOAD_FAST, 0, LOC(outermost->iter)) < 0) {
  ------------------
  |  |   93|    379|#define LOAD_FAST                               80
  ------------------
                                  LOAD_FAST, 0, LOC(outermost->iter)) < 0) {
  ------------------
  |  |   88|    379|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    379|    (_Py_SourceLocation){ \
  |  |  |  |   59|    379|               .lineno = (n)->lineno, \
  |  |  |  |   60|    379|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    379|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    379|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5109|      0|                goto error_in_scope;
 5110|      0|            }
 5111|    379|            if(_PyInstructionSequence_InsertInstruction(
  ------------------
  |  Branch (5111:16): [True: 0, False: 379]
  ------------------
 5112|    379|                    INSTR_SEQUENCE(c), 2,
  ------------------
  |  |   68|    379|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  ------------------
 5113|    379|                    outermost->is_async ? GET_AITER : GET_ITER,
  ------------------
  |  |   27|     11|#define GET_AITER                               14
  ------------------
                                  outermost->is_async ? GET_AITER : GET_ITER,
  ------------------
  |  |   80|    368|#define GET_ITER                                67
  ------------------
  |  Branch (5113:21): [True: 11, False: 368]
  ------------------
 5114|    379|                    0, LOC(outermost->iter)) < 0) {
  ------------------
  |  |   88|    379|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    379|    (_Py_SourceLocation){ \
  |  |  |  |   59|    379|               .lineno = (n)->lineno, \
  |  |  |  |   60|    379|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    379|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    379|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5115|      0|                goto error_in_scope;
 5116|      0|            }
 5117|    379|            iter_state = ITERATOR_ON_STACK;
 5118|    379|        }
 5119|      0|        else {
 5120|      0|            iter_state = ITERABLE_IN_LOCAL;
 5121|      0|        }
 5122|    379|    }
 5123|  2.72k|    Py_CLEAR(entry);
  ------------------
  |  |  484|  2.72k|    do { \
  |  |  485|  2.72k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.72k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.72k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.72k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.72k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.72k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2.72k, False: 0]
  |  |  ------------------
  |  |  488|  2.72k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  2.72k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  2.72k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  2.72k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.72k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  2.72k|        } \
  |  |  491|  2.72k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.72k]
  |  |  ------------------
  ------------------
 5124|       |
 5125|  2.72k|    if (type != COMP_GENEXP) {
  ------------------
  |  |   40|  2.72k|#define COMP_GENEXP   0
  ------------------
  |  Branch (5125:9): [True: 2.34k, False: 379]
  ------------------
 5126|  2.34k|        if (codegen_comprehension_init_container(
  ------------------
  |  Branch (5126:13): [True: 0, False: 2.34k]
  ------------------
 5127|  2.34k|            c, loc, type, is_inlined, avoid_creation) < 0) {
 5128|      0|            goto error_in_scope;
 5129|      0|        }
 5130|  2.34k|    }
 5131|  2.72k|    if (codegen_comprehension_generator(c, loc, generators, 0, 0,
  ------------------
  |  Branch (5131:9): [True: 42, False: 2.68k]
  ------------------
 5132|  2.72k|                                        elt, val, type, iter_state, avoid_creation) < 0) {
 5133|     42|        goto error_in_scope;
 5134|     42|    }
 5135|       |
 5136|  2.68k|    if (is_inlined) {
  ------------------
  |  Branch (5136:9): [True: 2.33k, False: 352]
  ------------------
 5137|  2.33k|        if (pop_inlined_comprehension_state(c, loc, &inline_state) < 0) {
  ------------------
  |  Branch (5137:13): [True: 0, False: 2.33k]
  ------------------
 5138|      0|            goto error_in_scope;
 5139|      0|        }
 5140|  2.33k|        return SUCCESS;
  ------------------
  |  |   47|  2.33k|#define SUCCESS 0
  ------------------
 5141|  2.33k|    }
 5142|       |
 5143|    352|    if (type != COMP_GENEXP) {
  ------------------
  |  |   40|    352|#define COMP_GENEXP   0
  ------------------
  |  Branch (5143:9): [True: 0, False: 352]
  ------------------
 5144|      0|        ADDOP_IN_SCOPE(c, LOC(e), RETURN_VALUE);
  ------------------
  |  |  297|      0|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|      0|    do {                                    \
  |  |  |  |   59|      0|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5145|      0|    }
 5146|    352|    if (type == COMP_GENEXP) {
  ------------------
  |  |   40|    352|#define COMP_GENEXP   0
  ------------------
  |  Branch (5146:9): [True: 352, False: 0]
  ------------------
 5147|    352|        if (codegen_wrap_in_stopiteration_handler(c) < 0) {
  ------------------
  |  Branch (5147:13): [True: 0, False: 352]
  ------------------
 5148|      0|            goto error_in_scope;
 5149|      0|        }
 5150|    352|    }
 5151|       |
 5152|    352|    co = _PyCompile_OptimizeAndAssemble(c, 1);
 5153|    352|    _PyCompile_ExitScope(c);
 5154|    352|    if (co == NULL) {
  ------------------
  |  Branch (5154:9): [True: 0, False: 352]
  ------------------
 5155|      0|        goto error;
 5156|      0|    }
 5157|       |
 5158|    352|    loc = LOC(e);
  ------------------
  |  |   88|    352|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    352|    (_Py_SourceLocation){ \
  |  |  |  |   59|    352|               .lineno = (n)->lineno, \
  |  |  |  |   60|    352|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    352|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    352|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5159|    352|    if (codegen_make_closure(c, loc, co, 0) < 0) {
  ------------------
  |  Branch (5159:9): [True: 0, False: 352]
  ------------------
 5160|      0|        goto error;
 5161|      0|    }
 5162|    352|    Py_CLEAR(co);
  ------------------
  |  |  484|    352|    do { \
  |  |  485|    352|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    352|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    352|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    352|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    352|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    352|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 352, False: 0]
  |  |  ------------------
  |  |  488|    352|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    352|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    352|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    352|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    352|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    352|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    352|        } \
  |  |  491|    352|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 352]
  |  |  ------------------
  ------------------
 5163|       |
 5164|    352|    VISIT(c, expr, outermost->iter);
  ------------------
  |  |  460|    352|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    352|    do {                    \
  |  |  |  |   52|    352|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 7, False: 345]
  |  |  |  |  ------------------
  |  |  |  |   53|      7|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      7|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      7|        }                   \
  |  |  |  |   55|    352|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 345]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5165|    345|    ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|    345|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    345|    do {                    \
  |  |  |  |   52|    345|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 345]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    345|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 345]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5166|       |
 5167|    345|    if (is_async_comprehension && type != COMP_GENEXP) {
  ------------------
  |  |   40|      4|#define COMP_GENEXP   0
  ------------------
  |  Branch (5167:9): [True: 4, False: 341]
  |  Branch (5167:35): [True: 0, False: 4]
  ------------------
 5168|      0|        ADDOP_I(c, loc, GET_AWAITABLE, 0);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5169|      0|        ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5170|      0|        ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|      0|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5171|      0|        ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|      0|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5172|      0|    }
 5173|       |
 5174|    345|    assert(!avoid_creation);
  ------------------
  |  Branch (5174:5): [True: 345, False: 0]
  ------------------
 5175|       |
 5176|    345|    return SUCCESS;
  ------------------
  |  |   47|    345|#define SUCCESS 0
  ------------------
 5177|     42|error_in_scope:
 5178|     42|    if (is_inlined) {
  ------------------
  |  Branch (5178:9): [True: 15, False: 27]
  ------------------
 5179|     15|        if (inline_state.saved_ste != NULL) {
  ------------------
  |  Branch (5179:13): [True: 15, False: 0]
  ------------------
 5180|     15|            _PyCompile_ExitInlinedComprehensionScope(c, &inline_state);
 5181|     15|        }
 5182|     15|    }
 5183|     27|    else {
 5184|     27|        _PyCompile_ExitScope(c);
 5185|     27|    }
 5186|     42|error:
 5187|     42|    Py_XDECREF(co);
  ------------------
  |  |  524|     42|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5188|     42|    Py_XDECREF(entry);
  ------------------
  |  |  524|     42|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5189|     42|    Py_XDECREF(inline_state.pushed_locals);
  ------------------
  |  |  524|     42|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5190|     42|    return ERROR;
  ------------------
  |  |   48|     42|#define ERROR -1
  ------------------
 5191|     42|}
codegen.c:push_inlined_comprehension_state:
 4963|  2.34k|{
 4964|  2.34k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  2.34k|    do {                    \
  |  |   52|  2.34k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.34k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.34k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.34k]
  |  |  ------------------
  ------------------
 4965|  2.34k|        _PyCompile_EnterInlinedComprehensionScope(c, comp, state));
 4966|  2.34k|    if (codegen_push_inlined_comprehension_locals(c, loc, comp, state) < 0){
  ------------------
  |  Branch (4966:9): [True: 0, False: 2.34k]
  ------------------
 4967|      0|        _PyCompile_ExitInlinedComprehensionScope(c, state);
 4968|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4969|      0|    }
 4970|  2.34k|    return SUCCESS;
  ------------------
  |  |   47|  2.34k|#define SUCCESS 0
  ------------------
 4971|  2.34k|}
codegen.c:codegen_push_inlined_comprehension_locals:
 4897|  2.34k|{
 4898|       |    // iterate over names bound in the comprehension and ensure we isolate
 4899|       |    // them from the outer scope as needed
 4900|  2.34k|    PyObject *k, *v;
 4901|  2.34k|    Py_ssize_t pos = 0;
 4902|  12.4k|    while (PyDict_Next(comp->ste_symbols, &pos, &k, &v)) {
  ------------------
  |  Branch (4902:12): [True: 10.0k, False: 2.34k]
  ------------------
 4903|  10.0k|        long symbol = PyLong_AsLong(v);
 4904|  10.0k|        assert(symbol >= 0 || PyErr_Occurred());
  ------------------
  |  Branch (4904:9): [True: 10.0k, False: 0]
  |  Branch (4904:9): [True: 0, False: 0]
  ------------------
 4905|  10.0k|        RETURN_IF_ERROR(symbol);
  ------------------
  |  |   51|  10.0k|    do {                    \
  |  |   52|  10.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 10.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  10.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.0k]
  |  |  ------------------
  ------------------
 4906|  10.0k|        long scope = SYMBOL_TO_SCOPE(symbol);
  ------------------
  |  |  189|  10.0k|#define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  187|  10.0k|#define SCOPE_OFFSET 12
  |  |  ------------------
  |  |               #define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  188|  10.0k|#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  10.0k|#define DEF_GLOBAL 1             /* global stmt */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  10.0k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  10.0k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  173|  10.0k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4907|       |
 4908|  10.0k|        if ((symbol & DEF_LOCAL) && !(symbol & DEF_NONLOCAL)) {
  ------------------
  |  |  171|  10.0k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if ((symbol & DEF_LOCAL) && !(symbol & DEF_NONLOCAL)) {
  ------------------
  |  |  173|  6.89k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
  |  Branch (4908:13): [True: 6.89k, False: 3.18k]
  |  Branch (4908:37): [True: 6.59k, False: 296]
  ------------------
 4909|       |            // local names bound in comprehension must be isolated from
 4910|       |            // outer scope; push existing value (which may be NULL if
 4911|       |            // not defined) on stack
 4912|  6.59k|            if (state->pushed_locals == NULL) {
  ------------------
  |  Branch (4912:17): [True: 2.27k, False: 4.32k]
  ------------------
 4913|  2.27k|                state->pushed_locals = PyList_New(0);
 4914|  2.27k|                if (state->pushed_locals == NULL) {
  ------------------
  |  Branch (4914:21): [True: 0, False: 2.27k]
  ------------------
 4915|      0|                    return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4916|      0|                }
 4917|  2.27k|            }
 4918|       |            // in the case of a cell, this will actually push the cell
 4919|       |            // itself to the stack, then we'll create a new one for the
 4920|       |            // comprehension and restore the original one after
 4921|  6.59k|            ADDOP_NAME(c, loc, LOAD_FAST_AND_CLEAR, k, varnames);
  ------------------
  |  |  419|  6.59k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  6.59k|    do {                    \
  |  |  |  |   52|  6.59k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.59k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.59k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4922|  6.59k|            if (scope == CELL) {
  ------------------
  |  |  195|  6.59k|#define CELL 5
  ------------------
  |  Branch (4922:17): [True: 0, False: 6.59k]
  ------------------
 4923|      0|                ADDOP_NAME(c, loc, MAKE_CELL, k, cellvars);
  ------------------
  |  |  419|      0|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4924|      0|            }
 4925|  6.59k|            if (PyList_Append(state->pushed_locals, k) < 0) {
  ------------------
  |  Branch (4925:17): [True: 0, False: 6.59k]
  ------------------
 4926|      0|                return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4927|      0|            }
 4928|  6.59k|            if (METADATA(c)->u_fasthidden != NULL) {
  ------------------
  |  |   76|  6.59k|#define METADATA(C) _PyCompile_Metadata(C)
  ------------------
  |  Branch (4928:17): [True: 4.87k, False: 1.72k]
  ------------------
 4929|       |                /* For Module/Class scopes, assemble needs to set CO_FAST_HIDDEN on these names */
 4930|  4.87k|                if (PySet_Add(METADATA(c)->u_fasthidden, k) < 0) {
  ------------------
  |  |   76|  4.87k|#define METADATA(C) _PyCompile_Metadata(C)
  ------------------
  |  Branch (4930:21): [True: 0, False: 4.87k]
  ------------------
 4931|      0|                    return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4932|      0|                }
 4933|  4.87k|            }
 4934|  6.59k|        }
 4935|  10.0k|    }
 4936|  2.34k|    if (state->pushed_locals) {
  ------------------
  |  Branch (4936:9): [True: 2.27k, False: 68]
  ------------------
 4937|       |        // Outermost iterable expression was already evaluated and is on the
 4938|       |        // stack, we need to swap it back to TOS. This also rotates the order of
 4939|       |        // `pushed_locals` on the stack, but this will be reversed when we swap
 4940|       |        // out the comprehension result in pop_inlined_comprehension_state
 4941|  2.27k|        ADDOP_I(c, loc, SWAP, PyList_GET_SIZE(state->pushed_locals) + 1);
  ------------------
  |  |  280|  2.27k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.27k|    do {                    \
  |  |  |  |   52|  2.27k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.27k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.27k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.27k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4942|       |
 4943|       |        // Add our own cleanup handler to restore comprehension locals in case
 4944|       |        // of exception, so they have the correct values inside an exception
 4945|       |        // handler or finally block.
 4946|  2.27k|        NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|  2.27k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.27k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.27k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.27k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.27k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.27k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4947|  2.27k|        state->cleanup = cleanup;
 4948|       |
 4949|       |        // Count against CO_MAXBLOCKS: SETUP_FINALLY consumes an except-stack
 4950|       |        // slot even though return/continue/break cannot appear here.
 4951|  2.27k|        RETURN_IF_ERROR(_PyCompile_PushFBlock(
  ------------------
  |  |   51|  2.27k|    do {                    \
  |  |   52|  2.27k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.27k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.27k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.27k]
  |  |  ------------------
  ------------------
 4952|  2.27k|            c, loc, COMPILE_FBLOCK_INLINED_COMPREHENSION,
 4953|  2.27k|            cleanup, NO_LABEL, NULL));
 4954|  2.27k|        ADDOP_JUMP(c, loc, SETUP_FINALLY, cleanup);
  ------------------
  |  |  435|  2.27k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.27k|    do {                    \
  |  |  |  |   52|  2.27k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.27k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.27k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.27k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4955|  2.27k|    }
 4956|  2.34k|    return SUCCESS;
  ------------------
  |  |   47|  2.34k|#define SUCCESS 0
  ------------------
 4957|  2.34k|}
codegen.c:codegen_comprehension_init_container:
 5034|  2.34k|{
 5035|  2.34k|    int op;
 5036|  2.34k|    switch (type) {
 5037|     89|    case COMP_LISTCOMP:
  ------------------
  |  |   41|     89|#define COMP_LISTCOMP 1
  ------------------
  |  Branch (5037:5): [True: 89, False: 2.25k]
  ------------------
 5038|     89|        op = BUILD_LIST;
  ------------------
  |  |   57|     89|#define BUILD_LIST                              44
  ------------------
 5039|     89|        break;
 5040|  1.56k|    case COMP_SETCOMP:
  ------------------
  |  |   42|  1.56k|#define COMP_SETCOMP  2
  ------------------
  |  Branch (5040:5): [True: 1.56k, False: 786]
  ------------------
 5041|  1.56k|        op = BUILD_SET;
  ------------------
  |  |   59|  1.56k|#define BUILD_SET                               46
  ------------------
 5042|  1.56k|        break;
 5043|    697|    case COMP_DICTCOMP:
  ------------------
  |  |   43|    697|#define COMP_DICTCOMP 3
  ------------------
  |  Branch (5043:5): [True: 697, False: 1.64k]
  ------------------
 5044|    697|        op = BUILD_MAP;
  ------------------
  |  |   58|    697|#define BUILD_MAP                               45
  ------------------
 5045|    697|        break;
 5046|      0|    default:
  ------------------
  |  Branch (5046:5): [True: 0, False: 2.34k]
  ------------------
 5047|      0|        PyErr_Format(PyExc_SystemError,
 5048|      0|                     "unknown comprehension type %d", type);
 5049|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 5050|  2.34k|    }
 5051|       |
 5052|  2.34k|    if (!avoid_creation) {
  ------------------
  |  Branch (5052:9): [True: 2.34k, False: 2]
  ------------------
 5053|  2.34k|        ADDOP_I(c, loc, op, 0);
  ------------------
  |  |  280|  2.34k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.34k|    do {                    \
  |  |  |  |   52|  2.34k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5054|  2.34k|        if (is_inlined) {
  ------------------
  |  Branch (5054:13): [True: 2.34k, False: 0]
  ------------------
 5055|  2.34k|            ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|  2.34k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.34k|    do {                    \
  |  |  |  |   52|  2.34k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5056|  2.34k|        }
 5057|  2.34k|    } else {
 5058|      2|        ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|      2|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5059|      2|    }
 5060|  2.34k|    return SUCCESS;
  ------------------
  |  |   47|  2.34k|#define SUCCESS 0
  ------------------
 5061|  2.34k|}
codegen.c:codegen_comprehension_generator:
 4594|  3.03k|{
 4595|  3.03k|    comprehension_ty gen;
 4596|  3.03k|    gen = (comprehension_ty)asdl_seq_GET(generators, gen_index);
  ------------------
  |  |   82|  3.03k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  3.03k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4597|  3.03k|    if (gen->is_async) {
  ------------------
  |  Branch (4597:9): [True: 1.12k, False: 1.90k]
  ------------------
 4598|  1.12k|        return codegen_async_comprehension_generator(
 4599|  1.12k|            c, loc, generators, gen_index, depth, elt, val, type,
 4600|  1.12k|            iter_pos, avoid_creation);
 4601|  1.90k|    } else {
 4602|  1.90k|        return codegen_sync_comprehension_generator(
 4603|  1.90k|            c, loc, generators, gen_index, depth, elt, val, type,
 4604|  1.90k|            iter_pos, avoid_creation);
 4605|  1.90k|    }
 4606|  3.03k|}
codegen.c:codegen_async_comprehension_generator:
 4814|  1.12k|{
 4815|  1.12k|    NEW_JUMP_TARGET_LABEL(c, start);
  ------------------
  |  |   94|  1.12k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.12k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.12k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.12k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.12k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.12k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4816|  1.12k|    NEW_JUMP_TARGET_LABEL(c, send);
  ------------------
  |  |   94|  1.12k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.12k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.12k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.12k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.12k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.12k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4817|  1.12k|    NEW_JUMP_TARGET_LABEL(c, except);
  ------------------
  |  |   94|  1.12k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.12k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.12k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.12k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.12k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.12k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4818|  1.12k|    NEW_JUMP_TARGET_LABEL(c, if_cleanup);
  ------------------
  |  |   94|  1.12k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.12k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.12k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.12k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.12k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.12k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4819|       |
 4820|  1.12k|    comprehension_ty gen = (comprehension_ty)asdl_seq_GET(generators,
  ------------------
  |  |   82|  1.12k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.12k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4821|  1.12k|                                                          gen_index);
 4822|       |
 4823|  1.12k|    if (iter_pos == ITERABLE_IN_LOCAL) {
  ------------------
  |  Branch (4823:9): [True: 206, False: 922]
  ------------------
 4824|    206|        if (gen_index == 0) {
  ------------------
  |  Branch (4824:13): [True: 0, False: 206]
  ------------------
 4825|      0|            assert(METADATA(c)->u_argcount == 1);
  ------------------
  |  Branch (4825:13): [True: 0, False: 0]
  ------------------
 4826|      0|            ADDOP_I(c, loc, LOAD_FAST, 0);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4827|      0|        }
 4828|    206|        else {
 4829|       |            /* Sub-iter - calculate on the fly */
 4830|    206|            VISIT(c, expr, gen->iter);
  ------------------
  |  |  460|    206|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    206|    do {                    \
  |  |  |  |   52|    206|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 206]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    206|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 206]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4831|    206|        }
 4832|    206|    }
 4833|  1.12k|    if (iter_pos != ITERATOR_ON_STACK) {
  ------------------
  |  Branch (4833:9): [True: 1.11k, False: 11]
  ------------------
 4834|  1.11k|        ADDOP(c, LOC(gen->iter), GET_AITER);
  ------------------
  |  |  294|  1.11k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.11k|    do {                    \
  |  |  |  |   52|  1.11k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.11k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.11k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.11k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4835|  1.11k|    }
 4836|       |
 4837|  1.12k|    USE_LABEL(c, start);
  ------------------
  |  |  100|  1.12k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4838|       |    /* Runtime will push a block here, so we need to account for that */
 4839|  1.12k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  1.12k|    do {                    \
  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.12k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  ------------------
  ------------------
 4840|  1.12k|        _PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_ASYNC_COMPREHENSION_GENERATOR,
 4841|  1.12k|                              start, NO_LABEL, NULL));
 4842|       |
 4843|  1.12k|    ADDOP_JUMP(c, loc, SETUP_FINALLY, except);
  ------------------
  |  |  435|  1.12k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4844|  1.12k|    ADDOP(c, loc, GET_ANEXT);
  ------------------
  |  |  294|  1.12k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4845|  1.12k|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  1.12k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4846|  1.12k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  1.12k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4847|  1.12k|    USE_LABEL(c, send);
  ------------------
  |  |  100|  1.12k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4848|  1.12k|    ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|  1.12k|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4849|  1.12k|    ADDOP(c, loc, POP_BLOCK);
  ------------------
  |  |  294|  1.12k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4850|  1.12k|    VISIT(c, expr, gen->target);
  ------------------
  |  |  460|  1.12k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 7, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      7|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      7|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      7|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4851|       |
 4852|  1.12k|    Py_ssize_t n = asdl_seq_LEN(gen->ifs);
  ------------------
  |  |   83|  1.12k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.24k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4853|  1.12k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (4853:28): [True: 1, False: 1.12k]
  ------------------
 4854|      1|        expr_ty e = (expr_ty)asdl_seq_GET(gen->ifs, i);
  ------------------
  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4855|      1|        RETURN_IF_ERROR(codegen_jump_if(c, loc, e, if_cleanup, 0));
  ------------------
  |  |   51|      1|    do {                    \
  |  |   52|      1|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 4856|      1|    }
 4857|       |
 4858|  1.12k|    depth++;
 4859|  1.12k|    if (++gen_index < asdl_seq_LEN(generators)) {
  ------------------
  |  |   83|  1.12k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.24k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4859:9): [True: 87, False: 1.03k]
  ------------------
 4860|     87|        RETURN_IF_ERROR(
  ------------------
  |  |   51|     87|    do {                    \
  |  |   52|     87|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 87]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     87|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 87]
  |  |  ------------------
  ------------------
 4861|     87|            codegen_comprehension_generator(c, loc,
 4862|     87|                                            generators, gen_index, depth,
 4863|     87|                                            elt, val, type, 0, avoid_creation));
 4864|     87|    }
 4865|       |
 4866|  1.12k|    location elt_loc = LOC(elt);
  ------------------
  |  |   88|  1.12k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.12k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.12k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.12k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.12k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.12k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4867|       |    /* only append after the last for generator */
 4868|  1.12k|    if (gen_index >= asdl_seq_LEN(generators)) {
  ------------------
  |  |   83|  1.12k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.24k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4868:9): [True: 1.03k, False: 87]
  ------------------
 4869|       |        /* comprehension specific code */
 4870|  1.03k|        RETURN_IF_ERROR(codegen_comprehension_generator_helper(c, elt_loc, depth,
  ------------------
  |  |   51|  1.03k|    do {                    \
  |  |   52|  1.03k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.03k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.03k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.03k]
  |  |  ------------------
  ------------------
 4871|  1.03k|                                                               elt, val, type,
 4872|  1.03k|                                                               avoid_creation));
 4873|  1.03k|        if (type == COMP_DICTCOMP && val != NULL) {
  ------------------
  |  |   43|  2.06k|#define COMP_DICTCOMP 3
  ------------------
  |  Branch (4873:13): [True: 516, False: 518]
  |  Branch (4873:38): [True: 164, False: 352]
  ------------------
 4874|    164|            elt_loc = LOCATION(elt->lineno,
  ------------------
  |  |   86|    164|    ((const _Py_SourceLocation){(LNO), (END_LNO), (COL), (END_COL)})
  ------------------
 4875|    164|                               val->end_lineno,
 4876|    164|                               elt->col_offset,
 4877|    164|                               val->end_col_offset);
 4878|    164|        }
 4879|  1.03k|    }
 4880|       |
 4881|  1.12k|    USE_LABEL(c, if_cleanup);
  ------------------
  |  |  100|  1.12k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4882|  1.12k|    ADDOP_JUMP(c, elt_loc, JUMP, start);
  ------------------
  |  |  435|  1.12k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4883|       |
 4884|  1.12k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_ASYNC_COMPREHENSION_GENERATOR, start);
 4885|       |
 4886|  1.12k|    USE_LABEL(c, except);
  ------------------
  |  |  100|  1.12k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4887|       |
 4888|  1.12k|    ADDOP_JUMP(c, loc, END_ASYNC_FOR, send);
  ------------------
  |  |  435|  1.12k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.12k|    do {                    \
  |  |  |  |   52|  1.12k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.12k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.12k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.12k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4889|       |
 4890|  1.12k|    return SUCCESS;
  ------------------
  |  |   47|  1.12k|#define SUCCESS 0
  ------------------
 4891|  1.12k|}
codegen.c:codegen_comprehension_generator_helper:
 4632|  2.68k|{
 4633|  2.68k|    switch (type) {
 4634|    352|    case COMP_GENEXP:
  ------------------
  |  |   40|    352|#define COMP_GENEXP   0
  ------------------
  |  Branch (4634:5): [True: 352, False: 2.33k]
  ------------------
 4635|    352|        assert(!avoid_creation);
  ------------------
  |  Branch (4635:9): [True: 352, False: 0]
  ------------------
 4636|    352|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (4636:13): [True: 0, False: 352]
  ------------------
 4637|      0|            RETURN_IF_ERROR(codegen_unpack_starred(c, elt_loc, elt->v.Starred.value, /*yield=*/true));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4638|      0|        }
 4639|    352|        else {
 4640|    352|            VISIT(c, expr, elt);
  ------------------
  |  |  460|    352|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    352|    do {                    \
  |  |  |  |   52|    352|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 352]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    352|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 352]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4641|    352|            ADDOP_YIELD(c, elt_loc);
  ------------------
  |  |  453|    352|    RETURN_IF_ERROR(codegen_addop_yield((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    352|    do {                    \
  |  |  |  |   52|    352|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 352]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    352|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 352]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4642|    352|            ADDOP(c, elt_loc, POP_TOP);
  ------------------
  |  |  294|    352|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    352|    do {                    \
  |  |  |  |   52|    352|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 352]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    352|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 352]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4643|    352|        }
 4644|    352|        break;
 4645|    352|    case COMP_LISTCOMP:
  ------------------
  |  |   41|     88|#define COMP_LISTCOMP 1
  ------------------
  |  Branch (4645:5): [True: 88, False: 2.59k]
  ------------------
 4646|     88|        if (avoid_creation) {
  ------------------
  |  Branch (4646:13): [True: 2, False: 86]
  ------------------
 4647|      2|            if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (4647:17): [True: 2, False: 0]
  ------------------
 4648|      2|                RETURN_IF_ERROR(codegen_unpack_starred(c, elt_loc, elt->v.Starred.value, /*yield=*/false));
  ------------------
  |  |   51|      2|    do {                    \
  |  |   52|      2|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4649|      2|            } else {
 4650|      0|                VISIT(c, expr, elt);
  ------------------
  |  |  460|      0|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4651|      0|                ADDOP(c, elt_loc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4652|      0|            }
 4653|      2|            break;
 4654|      2|        }
 4655|     86|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (4655:13): [True: 5, False: 81]
  ------------------
 4656|      5|            VISIT(c, expr, elt->v.Starred.value);
  ------------------
  |  |  460|      5|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      5|    do {                    \
  |  |  |  |   52|      5|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      5|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4657|      5|            ADDOP_I(c, elt_loc, LIST_EXTEND, depth + 1);
  ------------------
  |  |  280|      5|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      5|    do {                    \
  |  |  |  |   52|      5|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      5|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4658|      5|        }
 4659|     81|        else {
 4660|     81|            VISIT(c, expr, elt);
  ------------------
  |  |  460|     81|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     81|    do {                    \
  |  |  |  |   52|     81|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 81]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     81|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 81]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4661|     81|            ADDOP_I(c, elt_loc, LIST_APPEND, depth + 1);
  ------------------
  |  |  280|     81|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     81|    do {                    \
  |  |  |  |   52|     81|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 81]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     81|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 81]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4662|     81|        }
 4663|     86|        break;
 4664|  1.54k|    case COMP_SETCOMP:
  ------------------
  |  |   42|  1.54k|#define COMP_SETCOMP  2
  ------------------
  |  Branch (4664:5): [True: 1.54k, False: 1.13k]
  ------------------
 4665|  1.54k|        assert(!avoid_creation);
  ------------------
  |  Branch (4665:9): [True: 1.54k, False: 0]
  ------------------
 4666|  1.54k|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (4666:13): [True: 87, False: 1.46k]
  ------------------
 4667|     87|            VISIT(c, expr, elt->v.Starred.value);
  ------------------
  |  |  460|     87|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     87|    do {                    \
  |  |  |  |   52|     87|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 87]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     87|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4668|     87|            ADDOP_I(c, elt_loc, SET_UPDATE, depth + 1);
  ------------------
  |  |  280|     87|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     87|    do {                    \
  |  |  |  |   52|     87|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 87]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     87|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4669|     87|        }
 4670|  1.46k|        else {
 4671|  1.46k|            VISIT(c, expr, elt);
  ------------------
  |  |  460|  1.46k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.46k|    do {                    \
  |  |  |  |   52|  1.46k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.46k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.46k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4672|  1.46k|            ADDOP_I(c, elt_loc, SET_ADD, depth + 1);
  ------------------
  |  |  280|  1.46k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.46k|    do {                    \
  |  |  |  |   52|  1.46k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.46k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.46k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4673|  1.46k|        }
 4674|  1.54k|        break;
 4675|  1.54k|    case COMP_DICTCOMP:
  ------------------
  |  |   43|    695|#define COMP_DICTCOMP 3
  ------------------
  |  Branch (4675:5): [True: 695, False: 1.98k]
  ------------------
 4676|    695|        assert(!avoid_creation);
  ------------------
  |  Branch (4676:9): [True: 695, False: 0]
  ------------------
 4677|    695|        if (val == NULL) {
  ------------------
  |  Branch (4677:13): [True: 380, False: 315]
  ------------------
 4678|       |            /* unpacking (**) case */
 4679|    380|            VISIT(c, expr, elt);
  ------------------
  |  |  460|    380|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    380|    do {                    \
  |  |  |  |   52|    380|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4680|    380|            ADDOP_I(c, elt_loc, DICT_UPDATE, depth + 1);
  ------------------
  |  |  280|    380|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    380|    do {                    \
  |  |  |  |   52|    380|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 380]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    380|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 380]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4681|    380|        }
 4682|    315|        else {
 4683|       |            /* With '{k: v}', k is evaluated before v, so we do
 4684|       |            the same. */
 4685|    315|            VISIT(c, expr, elt);
  ------------------
  |  |  460|    315|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    315|    do {                    \
  |  |  |  |   52|    315|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 315]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    315|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 315]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4686|    315|            VISIT(c, expr, val);
  ------------------
  |  |  460|    315|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    315|    do {                    \
  |  |  |  |   52|    315|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 315]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    315|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 315]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4687|    315|            elt_loc = LOCATION(elt->lineno,
  ------------------
  |  |   86|    315|    ((const _Py_SourceLocation){(LNO), (END_LNO), (COL), (END_COL)})
  ------------------
 4688|    315|                               val->end_lineno,
 4689|    315|                               elt->col_offset,
 4690|    315|                               val->end_col_offset);
 4691|    315|            ADDOP_I(c, elt_loc, MAP_ADD, depth + 1);
  ------------------
  |  |  280|    315|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    315|    do {                    \
  |  |  |  |   52|    315|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 315]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    315|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 315]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4692|    315|        }
 4693|    695|        break;
 4694|    695|    default:
  ------------------
  |  Branch (4694:5): [True: 0, False: 2.68k]
  ------------------
 4695|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4696|  2.68k|    }
 4697|  2.68k|    return SUCCESS;
  ------------------
  |  |   47|  2.68k|#define SUCCESS 0
  ------------------
 4698|  2.68k|}
codegen.c:codegen_unpack_starred:
 4610|      2|{
 4611|      2|    NEW_JUMP_TARGET_LABEL(c, unpack_start);
  ------------------
  |  |   94|      2|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|      2|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|      2|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|      2|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      2|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4612|      2|    NEW_JUMP_TARGET_LABEL(c, unpack_end);
  ------------------
  |  |   94|      2|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|      2|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|      2|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|      2|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      2|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4613|      2|    VISIT(c, expr, value);
  ------------------
  |  |  460|      2|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4614|      2|    ADDOP_I(c, loc, GET_ITER, 0);
  ------------------
  |  |  280|      2|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4615|      2|    USE_LABEL(c, unpack_start);
  ------------------
  |  |  100|      2|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4616|      2|    ADDOP_JUMP(c, loc, FOR_ITER, unpack_end);
  ------------------
  |  |  435|      2|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4617|      2|    if (yield) {
  ------------------
  |  Branch (4617:9): [True: 0, False: 2]
  ------------------
 4618|      0|        ADDOP_YIELD(c, loc);
  ------------------
  |  |  453|      0|    RETURN_IF_ERROR(codegen_addop_yield((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4619|      0|    }
 4620|      2|    ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|      2|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4621|      2|    ADDOP_JUMP(c, NO_LOCATION, JUMP, unpack_start);
  ------------------
  |  |  435|      2|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4622|      2|    USE_LABEL(c, unpack_end);
  ------------------
  |  |  100|      2|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4623|      2|    ADDOP(c, NO_LOCATION, END_FOR);
  ------------------
  |  |  294|      2|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4624|      2|    ADDOP(c, NO_LOCATION, POP_ITER);
  ------------------
  |  |  294|      2|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4625|      2|    return SUCCESS;
  ------------------
  |  |   47|      2|#define SUCCESS 0
  ------------------
 4626|      2|}
codegen.c:codegen_sync_comprehension_generator:
 4706|  1.90k|{
 4707|       |    /* generate code for the iterator, then each of the ifs,
 4708|       |       and then write to the element */
 4709|       |
 4710|  1.90k|    NEW_JUMP_TARGET_LABEL(c, start);
  ------------------
  |  |   94|  1.90k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.90k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.90k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.90k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.90k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.90k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4711|  1.90k|    NEW_JUMP_TARGET_LABEL(c, if_cleanup);
  ------------------
  |  |   94|  1.90k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.90k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.90k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.90k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.90k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.90k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4712|  1.90k|    NEW_JUMP_TARGET_LABEL(c, anchor);
  ------------------
  |  |   94|  1.90k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  1.90k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  1.90k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  1.90k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  1.90k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 1.90k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4713|       |
 4714|  1.90k|    comprehension_ty gen = (comprehension_ty)asdl_seq_GET(generators,
  ------------------
  |  |   82|  1.90k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.90k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4715|  1.90k|                                                          gen_index);
 4716|       |
 4717|  1.90k|    if (iter_pos == ITERABLE_IN_LOCAL) {
  ------------------
  |  Branch (4717:9): [True: 104, False: 1.80k]
  ------------------
 4718|    104|        if (gen_index == 0) {
  ------------------
  |  Branch (4718:13): [True: 0, False: 104]
  ------------------
 4719|      0|            assert(METADATA(c)->u_argcount == 1);
  ------------------
  |  Branch (4719:13): [True: 0, False: 0]
  ------------------
 4720|      0|            ADDOP_I(c, loc, LOAD_FAST, 0);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4721|      0|        }
 4722|    104|        else {
 4723|       |            /* Sub-iter - calculate on the fly */
 4724|       |            /* Fast path for the temporary variable assignment idiom:
 4725|       |                for y in [f(x)]
 4726|       |            */
 4727|    104|            asdl_expr_seq *elts;
 4728|    104|            switch (gen->iter->kind) {
 4729|      2|                case List_kind:
  ------------------
  |  Branch (4729:17): [True: 2, False: 102]
  ------------------
 4730|      2|                    elts = gen->iter->v.List.elts;
 4731|      2|                    break;
 4732|      0|                case Tuple_kind:
  ------------------
  |  Branch (4732:17): [True: 0, False: 104]
  ------------------
 4733|      0|                    elts = gen->iter->v.Tuple.elts;
 4734|      0|                    break;
 4735|    102|                default:
  ------------------
  |  Branch (4735:17): [True: 102, False: 2]
  ------------------
 4736|    102|                    elts = NULL;
 4737|    104|            }
 4738|    104|            if (asdl_seq_LEN(elts) == 1) {
  ------------------
  |  |   83|    104|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    208|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 102, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4738:17): [True: 2, False: 102]
  ------------------
 4739|      2|                expr_ty elt = asdl_seq_GET(elts, 0);
  ------------------
  |  |   82|      2|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      2|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4740|      2|                if (elt->kind != Starred_kind) {
  ------------------
  |  Branch (4740:21): [True: 2, False: 0]
  ------------------
 4741|      2|                    VISIT(c, expr, elt);
  ------------------
  |  |  460|      2|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      2|    do {                    \
  |  |  |  |   52|      2|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4742|      2|                    start = NO_LABEL;
  ------------------
  |  |   57|      2|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
 4743|      2|                }
 4744|      2|            }
 4745|    104|            if (IS_JUMP_TARGET_LABEL(start)) {
  ------------------
  |  |   60|    104|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   59|    104|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  |  |  |  Branch (60:33): [True: 102, False: 2]
  |  |  ------------------
  ------------------
 4746|    102|                VISIT(c, expr, gen->iter);
  ------------------
  |  |  460|    102|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    102|    do {                    \
  |  |  |  |   52|    102|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 101]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    102|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 101]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4747|    102|            }
 4748|    104|        }
 4749|    104|    }
 4750|       |
 4751|  1.90k|    if (IS_JUMP_TARGET_LABEL(start)) {
  ------------------
  |  |   60|  1.90k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   59|  1.90k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  |  |  |  Branch (60:33): [True: 1.90k, False: 2]
  |  |  ------------------
  ------------------
 4752|  1.90k|        if (iter_pos != ITERATOR_ON_STACK) {
  ------------------
  |  Branch (4752:13): [True: 1.53k, False: 368]
  ------------------
 4753|  1.53k|            ADDOP_I(c, LOC(gen->iter), GET_ITER, 0);
  ------------------
  |  |  280|  1.53k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.53k|    do {                    \
  |  |  |  |   52|  1.53k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.53k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.53k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4754|  1.53k|            depth += 1;
 4755|  1.53k|        }
 4756|  1.90k|        USE_LABEL(c, start);
  ------------------
  |  |  100|  1.90k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.90k|    do {                    \
  |  |  |  |   52|  1.90k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.90k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.90k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.90k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4757|  1.90k|        depth += 1;
 4758|  1.90k|        ADDOP_JUMP(c, LOC(gen->iter), FOR_ITER, anchor);
  ------------------
  |  |  435|  1.90k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.90k|    do {                    \
  |  |  |  |   52|  1.90k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.90k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.90k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.90k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4759|  1.90k|    }
 4760|  1.90k|    VISIT(c, expr, gen->target);
  ------------------
  |  |  460|  1.90k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.90k|    do {                    \
  |  |  |  |   52|  1.90k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 30, False: 1.87k]
  |  |  |  |  ------------------
  |  |  |  |   53|     30|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     30|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     30|        }                   \
  |  |  |  |   55|  1.90k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.87k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4761|       |
 4762|       |    /* XXX this needs to be cleaned up...a lot! */
 4763|  1.87k|    Py_ssize_t n = asdl_seq_LEN(gen->ifs);
  ------------------
  |  |   83|  1.87k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.75k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.87k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4764|  2.04k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (4764:28): [True: 171, False: 1.87k]
  ------------------
 4765|    171|        expr_ty e = (expr_ty)asdl_seq_GET(gen->ifs, i);
  ------------------
  |  |   82|    171|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    171|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4766|    171|        RETURN_IF_ERROR(codegen_jump_if(c, loc, e, if_cleanup, 0));
  ------------------
  |  |   51|    171|    do {                    \
  |  |   52|    171|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 4, False: 167]
  |  |  ------------------
  |  |   53|      4|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      4|#define ERROR -1
  |  |  ------------------
  |  |   54|      4|        }                   \
  |  |   55|    171|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 167]
  |  |  ------------------
  ------------------
 4767|    171|    }
 4768|       |
 4769|  1.87k|    if (++gen_index < asdl_seq_LEN(generators)) {
  ------------------
  |  |   83|  1.87k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.74k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.87k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4769:9): [True: 223, False: 1.64k]
  ------------------
 4770|    223|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    223|    do {                    \
  |  |   52|    223|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 7, False: 216]
  |  |  ------------------
  |  |   53|      7|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      7|#define ERROR -1
  |  |  ------------------
  |  |   54|      7|        }                   \
  |  |   55|    223|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 216]
  |  |  ------------------
  ------------------
 4771|    223|            codegen_comprehension_generator(c, loc,
 4772|    223|                                            generators, gen_index, depth,
 4773|    223|                                            elt, val, type, ITERABLE_IN_LOCAL, avoid_creation));
 4774|    223|    }
 4775|       |
 4776|  1.86k|    location elt_loc = LOC(elt);
  ------------------
  |  |   88|  1.86k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.86k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.86k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.86k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.86k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.86k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4777|       |
 4778|       |    /* only append after the last for generator */
 4779|  1.86k|    if (gen_index >= asdl_seq_LEN(generators)) {
  ------------------
  |  |   83|  1.86k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4779:9): [True: 1.64k, False: 216]
  ------------------
 4780|       |        /* comprehension specific code */
 4781|  1.64k|        RETURN_IF_ERROR(codegen_comprehension_generator_helper(c, elt_loc, depth,
  ------------------
  |  |   51|  1.64k|    do {                    \
  |  |   52|  1.64k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.64k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.64k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.64k]
  |  |  ------------------
  ------------------
 4782|  1.64k|                                                               elt, val, type,
 4783|  1.64k|                                                               avoid_creation));
 4784|  1.64k|        if (type == COMP_DICTCOMP && val != NULL) {
  ------------------
  |  |   43|  3.29k|#define COMP_DICTCOMP 3
  ------------------
  |  Branch (4784:13): [True: 179, False: 1.47k]
  |  Branch (4784:38): [True: 151, False: 28]
  ------------------
 4785|    151|            elt_loc = LOCATION(elt->lineno,
  ------------------
  |  |   86|    151|    ((const _Py_SourceLocation){(LNO), (END_LNO), (COL), (END_COL)})
  ------------------
 4786|    151|                               val->end_lineno,
 4787|    151|                               elt->col_offset,
 4788|    151|                               val->end_col_offset);
 4789|    151|        }
 4790|  1.64k|    }
 4791|       |
 4792|  1.86k|    USE_LABEL(c, if_cleanup);
  ------------------
  |  |  100|  1.86k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.86k|    do {                    \
  |  |  |  |   52|  1.86k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.86k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.86k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4793|  1.86k|    if (IS_JUMP_TARGET_LABEL(start)) {
  ------------------
  |  |   60|  1.86k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   59|  1.86k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  |  |  |  Branch (60:33): [True: 1.86k, False: 2]
  |  |  ------------------
  ------------------
 4794|  1.86k|        ADDOP_JUMP(c, elt_loc, JUMP, start);
  ------------------
  |  |  435|  1.86k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.86k|    do {                    \
  |  |  |  |   52|  1.86k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.86k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.86k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4795|       |
 4796|  1.86k|        USE_LABEL(c, anchor);
  ------------------
  |  |  100|  1.86k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  1.86k|    do {                    \
  |  |  |  |   52|  1.86k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.86k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.86k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4797|       |        /* It is important for instrumentation that the `END_FOR` comes first.
 4798|       |        * Iteration over a generator will jump to the first of these instructions,
 4799|       |        * but a non-generator will jump to a later instruction.
 4800|       |        */
 4801|  1.86k|        ADDOP(c, NO_LOCATION, END_FOR);
  ------------------
  |  |  294|  1.86k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.86k|    do {                    \
  |  |  |  |   52|  1.86k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.86k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.86k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4802|  1.86k|        ADDOP(c, NO_LOCATION, POP_ITER);
  ------------------
  |  |  294|  1.86k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.86k|    do {                    \
  |  |  |  |   52|  1.86k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.86k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.86k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4803|  1.86k|    }
 4804|       |
 4805|  1.86k|    return SUCCESS;
  ------------------
  |  |   47|  1.86k|#define SUCCESS 0
  ------------------
 4806|  1.86k|}
codegen.c:pop_inlined_comprehension_state:
 5025|  2.33k|{
 5026|  2.33k|    int result = codegen_pop_inlined_comprehension_locals(c, loc, state);
 5027|  2.33k|    RETURN_IF_ERROR(_PyCompile_ExitInlinedComprehensionScope(c, state));
  ------------------
  |  |   51|  2.33k|    do {                    \
  |  |   52|  2.33k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.33k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.33k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.33k]
  |  |  ------------------
  ------------------
 5028|  2.33k|    return result;
 5029|  2.33k|}
codegen.c:codegen_pop_inlined_comprehension_locals:
 4998|  2.33k|{
 4999|  2.33k|    if (state->pushed_locals) {
  ------------------
  |  Branch (4999:9): [True: 2.26k, False: 68]
  ------------------
 5000|  2.26k|        ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  2.26k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5001|  2.26k|        _PyCompile_PopFBlock(c, COMPILE_FBLOCK_INLINED_COMPREHENSION,
 5002|  2.26k|                             state->cleanup);
 5003|       |
 5004|  2.26k|        NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  2.26k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  2.26k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  2.26k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  2.26k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  2.26k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 2.26k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5005|  2.26k|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|  2.26k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5006|       |
 5007|       |        // cleanup from an exception inside the comprehension
 5008|  2.26k|        USE_LABEL(c, state->cleanup);
  ------------------
  |  |  100|  2.26k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5009|       |        // discard incomplete comprehension result (beneath exc on stack)
 5010|  2.26k|        ADDOP_I(c, NO_LOCATION, SWAP, 2);
  ------------------
  |  |  280|  2.26k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5011|  2.26k|        ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|  2.26k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5012|  2.26k|        RETURN_IF_ERROR(restore_inlined_comprehension_locals(c, loc, state));
  ------------------
  |  |   51|  2.26k|    do {                    \
  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.26k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  ------------------
  ------------------
 5013|  2.26k|        ADDOP_I(c, NO_LOCATION, RERAISE, 0);
  ------------------
  |  |  280|  2.26k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5014|       |
 5015|  2.26k|        USE_LABEL(c, end);
  ------------------
  |  |  100|  2.26k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  2.26k|    do {                    \
  |  |  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5016|  2.26k|        RETURN_IF_ERROR(restore_inlined_comprehension_locals(c, loc, state));
  ------------------
  |  |   51|  2.26k|    do {                    \
  |  |   52|  2.26k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 2.26k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  2.26k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 2.26k]
  |  |  ------------------
  ------------------
 5017|  2.26k|        Py_CLEAR(state->pushed_locals);
  ------------------
  |  |  484|  2.26k|    do { \
  |  |  485|  2.26k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  2.26k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  2.26k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  2.26k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  2.26k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  2.26k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2.26k, False: 0]
  |  |  ------------------
  |  |  488|  2.26k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  2.26k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  2.26k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  2.26k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.26k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.26k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  2.26k|        } \
  |  |  491|  2.26k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2.26k]
  |  |  ------------------
  ------------------
 5018|  2.26k|    }
 5019|  2.33k|    return SUCCESS;
  ------------------
  |  |   47|  2.33k|#define SUCCESS 0
  ------------------
 5020|  2.33k|}
codegen.c:restore_inlined_comprehension_locals:
 4976|  4.52k|{
 4977|  4.52k|    PyObject *k;
 4978|       |    // pop names we pushed to stack earlier
 4979|  4.52k|    Py_ssize_t npops = PyList_GET_SIZE(state->pushed_locals);
  ------------------
  |  |   38|  4.52k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.52k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.52k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4980|       |    // Preserve the comprehension result (or exception) as TOS. This
 4981|       |    // reverses the SWAP we did in push_inlined_comprehension_state
 4982|       |    // to get the outermost iterable to TOS, so we can still just iterate
 4983|       |    // pushed_locals in simple reverse order
 4984|  4.52k|    ADDOP_I(c, loc, SWAP, npops + 1);
  ------------------
  |  |  280|  4.52k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.52k|    do {                    \
  |  |  |  |   52|  4.52k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.52k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.52k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.52k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4985|  17.6k|    for (Py_ssize_t i = npops - 1; i >= 0; --i) {
  ------------------
  |  Branch (4985:36): [True: 13.1k, False: 4.52k]
  ------------------
 4986|  13.1k|        k = PyList_GetItem(state->pushed_locals, i);
 4987|  13.1k|        if (k == NULL) {
  ------------------
  |  Branch (4987:13): [True: 0, False: 13.1k]
  ------------------
 4988|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4989|      0|        }
 4990|  13.1k|        ADDOP_NAME(c, loc, STORE_FAST_MAYBE_NULL, k, varnames);
  ------------------
  |  |  419|  13.1k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  13.1k|    do {                    \
  |  |  |  |   52|  13.1k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13.1k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  13.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4991|  13.1k|    }
 4992|  4.52k|    return SUCCESS;
  ------------------
  |  |   47|  4.52k|#define SUCCESS 0
  ------------------
 4993|  4.52k|}
codegen.c:codegen_listcomp:
 5205|     91|{
 5206|     91|    assert(e->kind == ListComp_kind);
  ------------------
  |  Branch (5206:5): [True: 91, False: 0]
  ------------------
 5207|     91|    _Py_DECLARE_STR(anon_listcomp, "<listcomp>");
 5208|     91|    return codegen_comprehension(c, e, COMP_LISTCOMP, &_Py_STR(anon_listcomp),
  ------------------
  |  |   41|     91|#define COMP_LISTCOMP 1
  ------------------
                  return codegen_comprehension(c, e, COMP_LISTCOMP, &_Py_STR(anon_listcomp),
  ------------------
  |  |  938|     91|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     91|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     91|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5209|     91|                                 e->v.ListComp.generators,
 5210|       |                                 e->v.ListComp.elt, NULL, avoid_creation);
 5211|     91|}
codegen.c:codegen_setcomp:
 5215|  1.56k|{
 5216|  1.56k|    assert(e->kind == SetComp_kind);
  ------------------
  |  Branch (5216:5): [True: 1.56k, False: 0]
  ------------------
 5217|  1.56k|    _Py_DECLARE_STR(anon_setcomp, "<setcomp>");
 5218|  1.56k|    return codegen_comprehension(c, e, COMP_SETCOMP, &_Py_STR(anon_setcomp),
  ------------------
  |  |   42|  1.56k|#define COMP_SETCOMP  2
  ------------------
                  return codegen_comprehension(c, e, COMP_SETCOMP, &_Py_STR(anon_setcomp),
  ------------------
  |  |  938|  1.56k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.56k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.56k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5219|  1.56k|                                 e->v.SetComp.generators,
 5220|  1.56k|                                 e->v.SetComp.elt, NULL, /*avoid_creation=*/false);
 5221|  1.56k|}
codegen.c:codegen_dictcomp:
 5226|    697|{
 5227|    697|    assert(e->kind == DictComp_kind);
  ------------------
  |  Branch (5227:5): [True: 697, False: 0]
  ------------------
 5228|    697|    _Py_DECLARE_STR(anon_dictcomp, "<dictcomp>");
 5229|    697|    return codegen_comprehension(c, e, COMP_DICTCOMP, &_Py_STR(anon_dictcomp),
  ------------------
  |  |   43|    697|#define COMP_DICTCOMP 3
  ------------------
                  return codegen_comprehension(c, e, COMP_DICTCOMP, &_Py_STR(anon_dictcomp),
  ------------------
  |  |  938|    697|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    697|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    697|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5230|    697|                                 e->v.DictComp.generators,
 5231|       |                                 e->v.DictComp.key, e->v.DictComp.value, /*avoid_creation=*/false);
 5232|    697|}
codegen.c:codegen_addop_yield:
 3299|    517|codegen_addop_yield(compiler *c, location loc) {
 3300|    517|    PySTEntryObject *ste = SYMTABLE_ENTRY(c);
  ------------------
  |  |   71|    517|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
 3301|    517|    if (ste->ste_generator && ste->ste_coroutine) {
  ------------------
  |  Branch (3301:9): [True: 517, False: 0]
  |  Branch (3301:31): [True: 149, False: 368]
  ------------------
 3302|    149|        ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP);
  ------------------
  |  |  280|    149|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    149|    do {                    \
  |  |  |  |   52|    149|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 149]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    149|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 149]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3303|    149|    }
 3304|    517|    ADDOP_I(c, loc, YIELD_VALUE, 0);
  ------------------
  |  |  280|    517|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    517|    do {                    \
  |  |  |  |   52|    517|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 517]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    517|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 517]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3305|    517|    ADDOP_I(c, loc, RESUME, RESUME_AFTER_YIELD);
  ------------------
  |  |  280|    517|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    517|    do {                    \
  |  |  |  |   52|    517|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 517]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    517|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 517]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3306|    517|    return SUCCESS;
  ------------------
  |  |   47|    517|#define SUCCESS 0
  ------------------
 3307|    517|}
codegen.c:codegen_compare:
 3715|  21.3k|{
 3716|  21.3k|    location loc = LOC(e);
  ------------------
  |  |   88|  21.3k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  21.3k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  21.3k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  21.3k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  21.3k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  21.3k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3717|  21.3k|    Py_ssize_t i, n;
 3718|       |
 3719|  21.3k|    RETURN_IF_ERROR(codegen_check_compare(c, e));
  ------------------
  |  |   51|  21.3k|    do {                    \
  |  |   52|  21.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 21.3k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  21.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 21.3k]
  |  |  ------------------
  ------------------
 3720|  21.3k|    VISIT(c, expr, e->v.Compare.left);
  ------------------
  |  |  460|  21.3k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  21.3k|    do {                    \
  |  |  |  |   52|  21.3k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 44, False: 21.2k]
  |  |  |  |  ------------------
  |  |  |  |   53|     44|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     44|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     44|        }                   \
  |  |  |  |   55|  21.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 21.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3721|  21.3k|    assert(asdl_seq_LEN(e->v.Compare.ops) > 0);
  ------------------
  |  Branch (3721:5): [True: 0, False: 21.2k]
  |  Branch (3721:5): [True: 21.2k, False: 0]
  ------------------
 3722|  21.2k|    n = asdl_seq_LEN(e->v.Compare.ops) - 1;
  ------------------
  |  |   83|  21.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  42.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 21.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3723|  21.2k|    if (n == 0) {
  ------------------
  |  Branch (3723:9): [True: 11.5k, False: 9.71k]
  ------------------
 3724|  11.5k|        VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));
  ------------------
  |  |  460|  11.5k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 60, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|     60|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     60|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     60|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3725|  11.5k|        ADDOP_COMPARE(c, loc, asdl_seq_GET(e->v.Compare.ops, 0));
  ------------------
  |  |  438|  11.5k|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3726|  11.5k|    }
 3727|  9.71k|    else {
 3728|  9.71k|        NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|  9.71k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  9.71k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  9.71k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  9.71k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  9.71k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 9.71k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 3729|  66.1k|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3729:21): [True: 56.4k, False: 9.69k]
  ------------------
 3730|  56.4k|            VISIT(c, expr,
  ------------------
  |  |  460|  56.4k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 15, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|     15|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     15|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     15|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3731|  56.4k|                (expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
 3732|  56.4k|            ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|  56.4k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3733|  56.4k|            ADDOP_I(c, loc, COPY, 2);
  ------------------
  |  |  280|  56.4k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3734|  56.4k|            ADDOP_COMPARE(c, loc, asdl_seq_GET(e->v.Compare.ops, i));
  ------------------
  |  |  438|  56.4k|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3735|  56.4k|            ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|  56.4k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3736|  56.4k|            ADDOP(c, loc, TO_BOOL);
  ------------------
  |  |  294|  56.4k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3737|  56.4k|            ADDOP_JUMP(c, loc, POP_JUMP_IF_FALSE, cleanup);
  ------------------
  |  |  435|  56.4k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3738|  56.4k|            ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  56.4k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  56.4k|    do {                    \
  |  |  |  |   52|  56.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 56.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  56.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 56.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3739|  56.4k|        }
 3740|  9.69k|        VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
  ------------------
  |  |  460|  9.69k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  9.69k|    do {                    \
  |  |  |  |   52|  9.69k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 15, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|     15|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     15|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     15|        }                   \
  |  |  |  |   55|  9.69k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3741|  9.68k|        ADDOP_COMPARE(c, loc, asdl_seq_GET(e->v.Compare.ops, n));
  ------------------
  |  |  438|  9.68k|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|  9.68k|    do {                    \
  |  |  |  |   52|  9.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3742|  9.68k|        NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|  9.68k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  9.68k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  9.68k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  9.68k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  9.68k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 9.68k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 3743|  9.68k|        ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, end);
  ------------------
  |  |  435|  9.68k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  9.68k|    do {                    \
  |  |  |  |   52|  9.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3744|       |
 3745|  9.68k|        USE_LABEL(c, cleanup);
  ------------------
  |  |  100|  9.68k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  9.68k|    do {                    \
  |  |  |  |   52|  9.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3746|  9.68k|        ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|  9.68k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  9.68k|    do {                    \
  |  |  |  |   52|  9.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3747|  9.68k|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  9.68k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  9.68k|    do {                    \
  |  |  |  |   52|  9.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3748|       |
 3749|  9.68k|        USE_LABEL(c, end);
  ------------------
  |  |  100|  9.68k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  9.68k|    do {                    \
  |  |  |  |   52|  9.68k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.68k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3750|  9.68k|    }
 3751|  21.2k|    return SUCCESS;
  ------------------
  |  |   47|  21.2k|#define SUCCESS 0
  ------------------
 3752|  21.2k|}
codegen.c:codegen_call:
 4249|  9.83k|{
 4250|  9.83k|    RETURN_IF_ERROR(codegen_validate_keywords(c, e->v.Call.keywords));
  ------------------
  |  |   51|  9.83k|    do {                    \
  |  |   52|  9.83k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 22, False: 9.81k]
  |  |  ------------------
  |  |   53|     22|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     22|#define ERROR -1
  |  |  ------------------
  |  |   54|     22|        }                   \
  |  |   55|  9.83k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 9.81k]
  |  |  ------------------
  ------------------
 4251|  9.81k|    int ret = maybe_optimize_method_call(c, e);
 4252|  9.81k|    if (ret < 0) {
  ------------------
  |  Branch (4252:9): [True: 130, False: 9.68k]
  ------------------
 4253|    130|        return ERROR;
  ------------------
  |  |   48|    130|#define ERROR -1
  ------------------
 4254|    130|    }
 4255|  9.68k|    if (ret == 1) {
  ------------------
  |  Branch (4255:9): [True: 1.11k, False: 8.57k]
  ------------------
 4256|  1.11k|        return SUCCESS;
  ------------------
  |  |   47|  1.11k|#define SUCCESS 0
  ------------------
 4257|  1.11k|    }
 4258|  8.57k|    NEW_JUMP_TARGET_LABEL(c, skip_normal_call);
  ------------------
  |  |   94|  8.57k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  8.57k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  8.57k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  8.57k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  8.57k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 8.57k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4259|  8.57k|    RETURN_IF_ERROR(check_caller(c, e->v.Call.func));
  ------------------
  |  |   51|  8.57k|    do {                    \
  |  |   52|  8.57k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 8.57k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  8.57k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8.57k]
  |  |  ------------------
  ------------------
 4260|  8.57k|    VISIT(c, expr, e->v.Call.func);
  ------------------
  |  |  460|  8.57k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  8.57k|    do {                    \
  |  |  |  |   52|  8.57k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 36, False: 8.53k]
  |  |  |  |  ------------------
  |  |  |  |   53|     36|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     36|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     36|        }                   \
  |  |  |  |   55|  8.57k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4261|  8.53k|    RETURN_IF_ERROR(maybe_optimize_function_call(c, e, skip_normal_call));
  ------------------
  |  |   51|  8.53k|    do {                    \
  |  |   52|  8.53k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 8.53k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  8.53k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8.53k]
  |  |  ------------------
  ------------------
 4262|  8.53k|    location loc = LOC(e->v.Call.func);
  ------------------
  |  |   88|  8.53k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  8.53k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  8.53k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  8.53k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  8.53k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  8.53k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4263|  8.53k|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  8.53k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  8.53k|    do {                    \
  |  |  |  |   52|  8.53k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.53k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.53k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4264|  8.53k|    loc = LOC(e);
  ------------------
  |  |   88|  8.53k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  8.53k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  8.53k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  8.53k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  8.53k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  8.53k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4265|  8.53k|    ret = codegen_call_helper(c, loc, 0,
 4266|  8.53k|                              e->v.Call.args,
 4267|  8.53k|                              e->v.Call.keywords);
 4268|  8.53k|    USE_LABEL(c, skip_normal_call);
  ------------------
  |  |  100|  8.53k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  8.53k|    do {                    \
  |  |  |  |   52|  8.53k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 8.53k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  8.53k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 8.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4269|  8.53k|    return ret;
 4270|  8.53k|}
codegen.c:maybe_optimize_method_call:
 4155|  9.81k|{
 4156|  9.81k|    Py_ssize_t argsl, i, kwdsl;
 4157|  9.81k|    expr_ty meth = e->v.Call.func;
 4158|  9.81k|    asdl_expr_seq *args = e->v.Call.args;
 4159|  9.81k|    asdl_keyword_seq *kwds = e->v.Call.keywords;
 4160|       |
 4161|       |    /* Check that the call node is an attribute access */
 4162|  9.81k|    if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load) {
  ------------------
  |  Branch (4162:9): [True: 8.27k, False: 1.54k]
  |  Branch (4162:41): [True: 0, False: 1.54k]
  ------------------
 4163|  8.27k|        return 0;
 4164|  8.27k|    }
 4165|       |
 4166|       |    /* Check that the base object is not something that is imported */
 4167|  1.54k|    int ret = is_import_originated(c, meth->v.Attribute.value);
 4168|  1.54k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  1.54k|    do {                    \
  |  |   52|  1.54k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.54k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.54k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.54k]
  |  |  ------------------
  ------------------
 4169|  1.54k|    if (ret) {
  ------------------
  |  Branch (4169:9): [True: 0, False: 1.54k]
  ------------------
 4170|      0|        return 0;
 4171|      0|    }
 4172|       |
 4173|       |    /* Check that there aren't too many arguments */
 4174|  1.54k|    argsl = asdl_seq_LEN(args);
  ------------------
  |  |   83|  1.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 775, False: 767]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4175|  1.54k|    kwdsl = asdl_seq_LEN(kwds);
  ------------------
  |  |   83|  1.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.17k, False: 367]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4176|  1.54k|    if (CALL_STACK_USE(argsl, kwdsl) >= _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   91|  1.54k|    ((nargs) + (nkwds) + ((nkwds) != 0))
  ------------------
                  if (CALL_STACK_USE(argsl, kwdsl) >= _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   24|  1.54k|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (4176:9): [True: 2, False: 1.54k]
  ------------------
 4177|      2|        return 0;
 4178|      2|    }
 4179|       |    /* Check that there are no *varargs types of arguments. */
 4180|  2.58k|    for (i = 0; i < argsl; i++) {
  ------------------
  |  Branch (4180:17): [True: 1.09k, False: 1.48k]
  ------------------
 4181|  1.09k|        expr_ty elt = asdl_seq_GET(args, i);
  ------------------
  |  |   82|  1.09k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4182|  1.09k|        if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (4182:13): [True: 55, False: 1.04k]
  ------------------
 4183|     55|            return 0;
 4184|     55|        }
 4185|  1.09k|    }
 4186|       |
 4187|  1.72k|    for (i = 0; i < kwdsl; i++) {
  ------------------
  |  Branch (4187:17): [True: 479, False: 1.24k]
  ------------------
 4188|    479|        keyword_ty kw = asdl_seq_GET(kwds, i);
  ------------------
  |  |   82|    479|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    479|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4189|    479|        if (kw->arg == NULL) {
  ------------------
  |  Branch (4189:13): [True: 243, False: 236]
  ------------------
 4190|    243|            return 0;
 4191|    243|        }
 4192|    479|    }
 4193|       |
 4194|       |    /* Alright, we can optimize the code. */
 4195|  1.24k|    location loc = LOC(meth);
  ------------------
  |  |   88|  1.24k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.24k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.24k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.24k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.24k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.24k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4196|       |
 4197|  1.24k|    ret = can_optimize_super_call(c, meth);
 4198|  1.24k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   51|  1.24k|    do {                    \
  |  |   52|  1.24k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  1.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
 4199|  1.24k|    if (ret) {
  ------------------
  |  Branch (4199:9): [True: 24, False: 1.21k]
  ------------------
 4200|     24|        RETURN_IF_ERROR(load_args_for_super(c, meth->v.Attribute.value));
  ------------------
  |  |   51|     24|    do {                    \
  |  |   52|     24|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 24]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     24|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 24]
  |  |  ------------------
  ------------------
 4201|     24|        int opcode = asdl_seq_LEN(meth->v.Attribute.value->v.Call.args) ?
  ------------------
  |  |   83|     24|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|     48|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:26): [True: 24, False: 0]
  |  |  |  |  |  Branch (302:37): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4202|     24|            LOAD_SUPER_METHOD : LOAD_ZERO_SUPER_METHOD;
  ------------------
  |  |  363|     24|#define LOAD_SUPER_METHOD -2
  ------------------
                          LOAD_SUPER_METHOD : LOAD_ZERO_SUPER_METHOD;
  ------------------
  |  |  365|      0|#define LOAD_ZERO_SUPER_METHOD -4
  ------------------
 4203|     24|        ADDOP_NAME(c, loc, opcode, meth->v.Attribute.attr, names);
  ------------------
  |  |  419|     24|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|     24|    do {                    \
  |  |  |  |   52|     24|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     24|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4204|     24|        loc = update_start_location_to_match_attr(c, loc, meth);
 4205|     24|        ADDOP(c, loc, NOP);
  ------------------
  |  |  294|     24|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     24|    do {                    \
  |  |  |  |   52|     24|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     24|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4206|  1.21k|    } else {
 4207|  1.21k|        VISIT(c, expr, meth->v.Attribute.value);
  ------------------
  |  |  460|  1.21k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.21k|    do {                    \
  |  |  |  |   52|  1.21k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 109, False: 1.10k]
  |  |  |  |  ------------------
  |  |  |  |   53|    109|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|    109|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|    109|        }                   \
  |  |  |  |   55|  1.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4208|  1.10k|        loc = update_start_location_to_match_attr(c, loc, meth);
 4209|  1.10k|        ADDOP_NAME(c, loc, LOAD_METHOD, meth->v.Attribute.attr, names);
  ------------------
  |  |  419|  1.10k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  1.10k|    do {                    \
  |  |  |  |   52|  1.10k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.10k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.10k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4210|  1.10k|    }
 4211|       |
 4212|  1.13k|    VISIT_SEQ(c, expr, e->v.Call.args);
  ------------------
  |  |  466|  1.13k|    do {                                                                    \
  |  |  467|  1.13k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.80k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.80k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.60k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 771, False: 1.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 685, False: 1.11k]
  |  |  ------------------
  |  |  469|    685|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    685|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    685|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    685|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    685|    do {                    \
  |  |  |  |   52|    685|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 18, False: 667]
  |  |  |  |  ------------------
  |  |  |  |   53|     18|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     18|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     18|        }                   \
  |  |  |  |   55|    685|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 667]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    685|        }                                                                   \
  |  |  472|  1.13k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 1.11k]
  |  |  ------------------
  ------------------
 4213|       |
 4214|  1.11k|    if (kwdsl) {
  ------------------
  |  Branch (4214:9): [True: 122, False: 993]
  ------------------
 4215|    122|        VISIT_SEQ(c, keyword, kwds);
  ------------------
  |  |  466|    122|    do {                                                                    \
  |  |  467|    122|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    353|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    353|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    706|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 353]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 234, False: 119]
  |  |  ------------------
  |  |  469|    234|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    234|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    234|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    234|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    234|    do {                    \
  |  |  |  |   52|    234|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 3, False: 231]
  |  |  |  |  ------------------
  |  |  |  |   53|      3|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      3|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      3|        }                   \
  |  |  |  |   55|    234|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 231]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    234|        }                                                                   \
  |  |  472|    122|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 119]
  |  |  ------------------
  ------------------
 4216|    119|        RETURN_IF_ERROR(
  ------------------
  |  |   51|    119|    do {                    \
  |  |   52|    119|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 119]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    119|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 119]
  |  |  ------------------
  ------------------
 4217|    119|            codegen_call_simple_kw_helper(c, loc, kwds, kwdsl));
 4218|    119|        loc = update_start_location_to_match_attr(c, LOC(e), meth);
  ------------------
  |  |   88|    119|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    119|    (_Py_SourceLocation){ \
  |  |  |  |   59|    119|               .lineno = (n)->lineno, \
  |  |  |  |   60|    119|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    119|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    119|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4219|    119|        ADDOP_I(c, loc, CALL_KW, argsl + kwdsl);
  ------------------
  |  |  280|    119|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    119|    do {                    \
  |  |  |  |   52|    119|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 119]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    119|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 119]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4220|    119|    }
 4221|    993|    else {
 4222|    993|        loc = update_start_location_to_match_attr(c, LOC(e), meth);
  ------------------
  |  |   88|    993|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    993|    (_Py_SourceLocation){ \
  |  |  |  |   59|    993|               .lineno = (n)->lineno, \
  |  |  |  |   60|    993|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    993|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    993|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4223|    993|        ADDOP_I(c, loc, CALL, argsl);
  ------------------
  |  |  280|    993|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    993|    do {                    \
  |  |  |  |   52|    993|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 993]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    993|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 993]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4224|    993|    }
 4225|  1.11k|    return 1;
 4226|  1.11k|}
codegen.c:is_import_originated:
 3882|  1.54k|{
 3883|       |    /* Check whether the global scope has an import named
 3884|       |     e, if it is a Name object. For not traversing all the
 3885|       |     scope stack every time this function is called, it will
 3886|       |     only check the global scope to determine whether something
 3887|       |     is imported or not. */
 3888|       |
 3889|  1.54k|    if (e->kind != Name_kind) {
  ------------------
  |  Branch (3889:9): [True: 1.35k, False: 185]
  ------------------
 3890|  1.35k|        return 0;
 3891|  1.35k|    }
 3892|       |
 3893|    185|    long flags = _PyST_GetSymbol(SYMTABLE(c)->st_top, e->v.Name.id);
  ------------------
  |  |   70|    185|#define SYMTABLE(C) _PyCompile_Symtable(C)
  ------------------
 3894|    185|    RETURN_IF_ERROR(flags);
  ------------------
  |  |   51|    185|    do {                    \
  |  |   52|    185|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 185]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    185|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 185]
  |  |  ------------------
  ------------------
 3895|    185|    return flags & DEF_IMPORT;
  ------------------
  |  |  176|    185|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  ------------------
 3896|    185|}
codegen.c:check_caller:
 3788|  8.57k|{
 3789|  8.57k|    switch (e->kind) {
 3790|  1.52k|    case Constant_kind:
  ------------------
  |  Branch (3790:5): [True: 1.52k, False: 7.04k]
  ------------------
 3791|  1.57k|    case Tuple_kind:
  ------------------
  |  Branch (3791:5): [True: 50, False: 8.52k]
  ------------------
 3792|  1.58k|    case List_kind:
  ------------------
  |  Branch (3792:5): [True: 9, False: 8.56k]
  ------------------
 3793|  1.59k|    case ListComp_kind:
  ------------------
  |  Branch (3793:5): [True: 12, False: 8.56k]
  ------------------
 3794|  1.64k|    case Dict_kind:
  ------------------
  |  Branch (3794:5): [True: 44, False: 8.52k]
  ------------------
 3795|  2.28k|    case DictComp_kind:
  ------------------
  |  Branch (3795:5): [True: 648, False: 7.92k]
  ------------------
 3796|  2.40k|    case Set_kind:
  ------------------
  |  Branch (3796:5): [True: 115, False: 8.45k]
  ------------------
 3797|  2.96k|    case SetComp_kind:
  ------------------
  |  Branch (3797:5): [True: 557, False: 8.01k]
  ------------------
 3798|  3.08k|    case GeneratorExp_kind:
  ------------------
  |  Branch (3798:5): [True: 126, False: 8.44k]
  ------------------
 3799|  3.12k|    case JoinedStr_kind:
  ------------------
  |  Branch (3799:5): [True: 38, False: 8.53k]
  ------------------
 3800|  3.12k|    case TemplateStr_kind:
  ------------------
  |  Branch (3800:5): [True: 4, False: 8.56k]
  ------------------
 3801|  3.12k|    case FormattedValue_kind:
  ------------------
  |  Branch (3801:5): [True: 0, False: 8.57k]
  ------------------
 3802|  3.12k|    case Interpolation_kind: {
  ------------------
  |  Branch (3802:5): [True: 0, False: 8.57k]
  ------------------
 3803|  3.12k|        location loc = LOC(e);
  ------------------
  |  |   88|  3.12k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  3.12k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  3.12k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  3.12k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  3.12k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  3.12k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3804|  3.12k|        return _PyCompile_Warn(c, loc, "'%.200s' object is not callable; "
 3805|  3.12k|                                       "perhaps you missed a comma?",
 3806|  3.12k|                                       infer_type(e)->tp_name);
 3807|  3.12k|    }
 3808|  5.44k|    default:
  ------------------
  |  Branch (3808:5): [True: 5.44k, False: 3.12k]
  ------------------
 3809|  5.44k|        return SUCCESS;
  ------------------
  |  |   47|  5.44k|#define SUCCESS 0
  ------------------
 3810|  8.57k|    }
 3811|  8.57k|}
codegen.c:maybe_optimize_function_call:
 4013|  8.53k|{
 4014|  8.53k|    asdl_expr_seq *args = e->v.Call.args;
 4015|  8.53k|    asdl_keyword_seq *kwds = e->v.Call.keywords;
 4016|  8.53k|    expr_ty func = e->v.Call.func;
 4017|       |
 4018|  8.53k|    if (! (func->kind == Name_kind &&
  ------------------
  |  Branch (4018:12): [True: 3.13k, False: 5.39k]
  ------------------
 4019|  3.13k|           asdl_seq_LEN(args) == 1 &&
  ------------------
  |  |   83|  3.13k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  6.27k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 513, False: 2.62k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4019:12): [True: 1.35k, False: 1.78k]
  ------------------
 4020|  1.35k|           asdl_seq_LEN(kwds) == 0))
  ------------------
  |  |   83|  1.35k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.71k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 1.10k, False: 257]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4020:12): [True: 1.10k, False: 257]
  ------------------
 4021|  7.43k|    {
 4022|  7.43k|        return 0;
 4023|  7.43k|    }
 4024|       |
 4025|  1.10k|    location loc = LOC(func);
  ------------------
  |  |   88|  1.10k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.10k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.10k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.10k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.10k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.10k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4026|       |
 4027|  1.10k|    expr_ty arg_expr = asdl_seq_GET(args, 0);
  ------------------
  |  |   82|  1.10k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.10k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4028|       |
 4029|  1.10k|    if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "frozenset")
  ------------------
  |  Branch (4029:9): [True: 0, False: 1.10k]
  ------------------
 4030|      0|        && (arg_expr->kind == Set_kind || arg_expr->kind == SetComp_kind)) {
  ------------------
  |  Branch (4030:13): [True: 0, False: 0]
  |  Branch (4030:43): [True: 0, False: 0]
  ------------------
 4031|      0|        NEW_JUMP_TARGET_LABEL(c, skip_optimization);
  ------------------
  |  |   94|      0|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|      0|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|      0|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|      0|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4032|       |
 4033|      0|        ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4034|      0|        ADDOP_I(c, loc, LOAD_COMMON_CONSTANT, CONSTANT_BUILTIN_FROZENSET);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4035|      0|        ADDOP_COMPARE(c, loc, Is);
  ------------------
  |  |  438|      0|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4036|      0|        ADDOP_JUMP(c, loc, POP_JUMP_IF_FALSE, skip_optimization);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4037|      0|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4038|       |
 4039|      0|        VISIT(c, expr, arg_expr);
  ------------------
  |  |  460|      0|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4040|      0|        ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_BUILD_FROZENSET);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4041|       |
 4042|      0|        ADDOP_JUMP(c, loc, JUMP, end);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4043|       |
 4044|      0|        USE_LABEL(c, skip_optimization);
  ------------------
  |  |  100|      0|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4045|      0|        return 1;
 4046|      0|    }
 4047|       |
 4048|  1.10k|    if (arg_expr->kind != GeneratorExp_kind) {
  ------------------
  |  Branch (4048:9): [True: 1.08k, False: 17]
  ------------------
 4049|  1.08k|        return 0;
 4050|  1.08k|    }
 4051|       |
 4052|     17|    PySTEntryObject *generator_entry = _PySymtable_Lookup(SYMTABLE(c), (void *)arg_expr);
  ------------------
  |  |   70|     17|#define SYMTABLE(C) _PyCompile_Symtable(C)
  ------------------
 4053|     17|    if (generator_entry->ste_coroutine) {
  ------------------
  |  Branch (4053:9): [True: 4, False: 13]
  ------------------
 4054|      4|        Py_DECREF(generator_entry);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4055|      4|        return 0;
 4056|      4|    }
 4057|     13|    Py_DECREF(generator_entry);
  ------------------
  |  |  430|     13|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4058|       |
 4059|     13|    int optimized = 0;
 4060|     13|    NEW_JUMP_TARGET_LABEL(c, skip_optimization);
  ------------------
  |  |   94|     13|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     13|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     13|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     13|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     13|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 13]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4061|       |
 4062|     13|    int const_oparg = -1;
 4063|     13|    PyObject *initial_res = NULL;
 4064|     13|    int continue_jump_opcode = -1;
 4065|     13|    if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "all")) {
  ------------------
  |  Branch (4065:9): [True: 0, False: 13]
  ------------------
 4066|      0|        const_oparg = CONSTANT_BUILTIN_ALL;
  ------------------
  |  |   74|      0|#define CONSTANT_BUILTIN_ALL 3
  ------------------
 4067|      0|        initial_res = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4068|      0|        continue_jump_opcode = POP_JUMP_IF_TRUE;
  ------------------
  |  |  112|      0|#define POP_JUMP_IF_TRUE                        99
  ------------------
 4069|      0|    }
 4070|     13|    else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "any")) {
  ------------------
  |  Branch (4070:14): [True: 0, False: 13]
  ------------------
 4071|      0|        const_oparg = CONSTANT_BUILTIN_ANY;
  ------------------
  |  |   75|      0|#define CONSTANT_BUILTIN_ANY 4
  ------------------
 4072|      0|        initial_res = Py_False;
  ------------------
  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4073|      0|        continue_jump_opcode = POP_JUMP_IF_FALSE;
  ------------------
  |  |  109|      0|#define POP_JUMP_IF_FALSE                       96
  ------------------
 4074|      0|    }
 4075|     13|    else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "tuple")) {
  ------------------
  |  Branch (4075:14): [True: 0, False: 13]
  ------------------
 4076|      0|        const_oparg = CONSTANT_BUILTIN_TUPLE;
  ------------------
  |  |   73|      0|#define CONSTANT_BUILTIN_TUPLE 2
  ------------------
 4077|      0|    }
 4078|     13|    else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "list")) {
  ------------------
  |  Branch (4078:14): [True: 0, False: 13]
  ------------------
 4079|      0|        const_oparg = CONSTANT_BUILTIN_LIST;
  ------------------
  |  |   76|      0|#define CONSTANT_BUILTIN_LIST 5
  ------------------
 4080|      0|    }
 4081|     13|    else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "set")) {
  ------------------
  |  Branch (4081:14): [True: 0, False: 13]
  ------------------
 4082|      0|        const_oparg = CONSTANT_BUILTIN_SET;
  ------------------
  |  |   77|      0|#define CONSTANT_BUILTIN_SET 6
  ------------------
 4083|      0|    }
 4084|     13|    else if (_PyUnicode_EqualToASCIIString(func->v.Name.id, "frozenset")) {
  ------------------
  |  Branch (4084:14): [True: 0, False: 13]
  ------------------
 4085|      0|        const_oparg = CONSTANT_BUILTIN_FROZENSET;
  ------------------
  |  |   83|      0|#define CONSTANT_BUILTIN_FROZENSET 12
  ------------------
 4086|      0|    }
 4087|     13|    if (const_oparg != -1) {
  ------------------
  |  Branch (4087:9): [True: 0, False: 13]
  ------------------
 4088|      0|        ADDOP_I(c, loc, COPY, 1); // the function
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4089|      0|        ADDOP_I(c, loc, LOAD_COMMON_CONSTANT, const_oparg);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4090|      0|        ADDOP_COMPARE(c, loc, Is);
  ------------------
  |  |  438|      0|    RETURN_IF_ERROR(codegen_addcompare((C), (LOC), (cmpop_ty)(CMP)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4091|      0|        ADDOP_JUMP(c, loc, POP_JUMP_IF_FALSE, skip_optimization);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4092|      0|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4093|       |
 4094|      0|        if (const_oparg == CONSTANT_BUILTIN_TUPLE || const_oparg == CONSTANT_BUILTIN_LIST) {
  ------------------
  |  |   73|      0|#define CONSTANT_BUILTIN_TUPLE 2
  ------------------
                      if (const_oparg == CONSTANT_BUILTIN_TUPLE || const_oparg == CONSTANT_BUILTIN_LIST) {
  ------------------
  |  |   76|      0|#define CONSTANT_BUILTIN_LIST 5
  ------------------
  |  Branch (4094:13): [True: 0, False: 0]
  |  Branch (4094:54): [True: 0, False: 0]
  ------------------
 4095|      0|            ADDOP_I(c, loc, BUILD_LIST, 0);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4096|      0|        } else if (const_oparg == CONSTANT_BUILTIN_SET || const_oparg == CONSTANT_BUILTIN_FROZENSET) {
  ------------------
  |  |   77|      0|#define CONSTANT_BUILTIN_SET 6
  ------------------
                      } else if (const_oparg == CONSTANT_BUILTIN_SET || const_oparg == CONSTANT_BUILTIN_FROZENSET) {
  ------------------
  |  |   83|      0|#define CONSTANT_BUILTIN_FROZENSET 12
  ------------------
  |  Branch (4096:20): [True: 0, False: 0]
  |  Branch (4096:59): [True: 0, False: 0]
  ------------------
 4097|      0|            ADDOP_I(c, loc, BUILD_SET, 0);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4098|      0|        }
 4099|      0|        VISIT(c, expr, arg_expr);
  ------------------
  |  |  460|      0|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4100|       |
 4101|      0|        NEW_JUMP_TARGET_LABEL(c, loop);
  ------------------
  |  |   94|      0|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|      0|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|      0|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|      0|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4102|      0|        NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|      0|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|      0|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|      0|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|      0|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|      0|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 4103|       |
 4104|      0|        ADDOP(c, loc, PUSH_NULL); // Push NULL index for loop
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4105|      0|        USE_LABEL(c, loop);
  ------------------
  |  |  100|      0|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4106|      0|        ADDOP_JUMP(c, loc, FOR_ITER, cleanup);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4107|      0|        if (const_oparg == CONSTANT_BUILTIN_TUPLE || const_oparg == CONSTANT_BUILTIN_LIST) {
  ------------------
  |  |   73|      0|#define CONSTANT_BUILTIN_TUPLE 2
  ------------------
                      if (const_oparg == CONSTANT_BUILTIN_TUPLE || const_oparg == CONSTANT_BUILTIN_LIST) {
  ------------------
  |  |   76|      0|#define CONSTANT_BUILTIN_LIST 5
  ------------------
  |  Branch (4107:13): [True: 0, False: 0]
  |  Branch (4107:54): [True: 0, False: 0]
  ------------------
 4108|      0|            ADDOP_I(c, loc, LIST_APPEND, 3);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4109|      0|            ADDOP_JUMP(c, loc, JUMP, loop);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4110|      0|        } else if (const_oparg == CONSTANT_BUILTIN_SET || const_oparg == CONSTANT_BUILTIN_FROZENSET) {
  ------------------
  |  |   77|      0|#define CONSTANT_BUILTIN_SET 6
  ------------------
                      } else if (const_oparg == CONSTANT_BUILTIN_SET || const_oparg == CONSTANT_BUILTIN_FROZENSET) {
  ------------------
  |  |   83|      0|#define CONSTANT_BUILTIN_FROZENSET 12
  ------------------
  |  Branch (4110:20): [True: 0, False: 0]
  |  Branch (4110:59): [True: 0, False: 0]
  ------------------
 4111|      0|            ADDOP_I(c, loc, SET_ADD, 3);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4112|      0|            ADDOP_JUMP(c, loc, JUMP, loop);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4113|      0|        }
 4114|      0|        else {
 4115|      0|            ADDOP(c, loc, TO_BOOL);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4116|      0|            ADDOP_JUMP(c, loc, continue_jump_opcode, loop);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4117|      0|        }
 4118|       |
 4119|      0|        ADDOP(c, NO_LOCATION, POP_ITER);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4120|      0|        if (const_oparg != CONSTANT_BUILTIN_TUPLE &&
  ------------------
  |  |   73|      0|#define CONSTANT_BUILTIN_TUPLE 2
  ------------------
  |  Branch (4120:13): [True: 0, False: 0]
  ------------------
 4121|      0|            const_oparg != CONSTANT_BUILTIN_LIST &&
  ------------------
  |  |   76|      0|#define CONSTANT_BUILTIN_LIST 5
  ------------------
  |  Branch (4121:13): [True: 0, False: 0]
  ------------------
 4122|      0|            const_oparg != CONSTANT_BUILTIN_SET &&
  ------------------
  |  |   77|      0|#define CONSTANT_BUILTIN_SET 6
  ------------------
  |  Branch (4122:13): [True: 0, False: 0]
  ------------------
 4123|      0|            const_oparg != CONSTANT_BUILTIN_FROZENSET) {
  ------------------
  |  |   83|      0|#define CONSTANT_BUILTIN_FROZENSET 12
  ------------------
  |  Branch (4123:13): [True: 0, False: 0]
  ------------------
 4124|      0|            ADDOP_LOAD_CONST(c, loc, initial_res == Py_True ? Py_False : Py_True);
  ------------------
  |  |  311|      0|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  |  Branch (52:14): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4125|      0|        }
 4126|      0|        ADDOP_JUMP(c, loc, JUMP, end);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4127|       |
 4128|      0|        USE_LABEL(c, cleanup);
  ------------------
  |  |  100|      0|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4129|      0|        ADDOP(c, NO_LOCATION, END_FOR);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4130|      0|        ADDOP(c, NO_LOCATION, POP_ITER);
  ------------------
  |  |  294|      0|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4131|      0|        if (const_oparg == CONSTANT_BUILTIN_TUPLE) {
  ------------------
  |  |   73|      0|#define CONSTANT_BUILTIN_TUPLE 2
  ------------------
  |  Branch (4131:13): [True: 0, False: 0]
  ------------------
 4132|      0|            ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_LIST_TO_TUPLE);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4133|      0|        } else if (const_oparg == CONSTANT_BUILTIN_LIST) {
  ------------------
  |  |   76|      0|#define CONSTANT_BUILTIN_LIST 5
  ------------------
  |  Branch (4133:20): [True: 0, False: 0]
  ------------------
 4134|       |            // result is already a list
 4135|      0|        } else if (const_oparg == CONSTANT_BUILTIN_SET) {
  ------------------
  |  |   77|      0|#define CONSTANT_BUILTIN_SET 6
  ------------------
  |  Branch (4135:20): [True: 0, False: 0]
  ------------------
 4136|       |            // result is already a set
 4137|      0|        }
 4138|      0|        else if (const_oparg == CONSTANT_BUILTIN_FROZENSET) {
  ------------------
  |  |   83|      0|#define CONSTANT_BUILTIN_FROZENSET 12
  ------------------
  |  Branch (4138:18): [True: 0, False: 0]
  ------------------
 4139|      0|            ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_BUILD_FROZENSET);
  ------------------
  |  |  280|      0|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4140|      0|        }
 4141|      0|        else {
 4142|      0|            ADDOP_LOAD_CONST(c, loc, initial_res);
  ------------------
  |  |  311|      0|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4143|      0|        }
 4144|       |
 4145|      0|        optimized = 1;
 4146|      0|        ADDOP_JUMP(c, loc, JUMP, end);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4147|      0|    }
 4148|     13|    USE_LABEL(c, skip_optimization);
  ------------------
  |  |  100|     13|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     13|    do {                    \
  |  |  |  |   52|     13|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 13]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     13|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 13]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4149|     13|    return optimized;
 4150|     13|}
codegen.c:codegen_joined_str:
 4317|  3.51k|{
 4318|  3.51k|    location loc = LOC(e);
  ------------------
  |  |   88|  3.51k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  3.51k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  3.51k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  3.51k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  3.51k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  3.51k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4319|  3.51k|    Py_ssize_t value_count = asdl_seq_LEN(e->v.JoinedStr.values);
  ------------------
  |  |   83|  3.51k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  7.02k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.51k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4320|  3.51k|    if (value_count > _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   24|  3.51k|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (4320:9): [True: 44, False: 3.46k]
  ------------------
 4321|     44|        _Py_DECLARE_STR(empty, "");
 4322|     44|        ADDOP_LOAD_CONST_NEW(c, loc, Py_NewRef(&_Py_STR(empty)));
  ------------------
  |  |  329|     44|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     44|    do {                    \
  |  |  |  |   52|     44|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 44]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     44|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 44]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4323|     44|        ADDOP_NAME(c, loc, LOAD_METHOD, &_Py_ID(join), names);
  ------------------
  |  |  419|     44|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|     44|    do {                    \
  |  |  |  |   52|     44|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 44]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     44|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 44]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4324|     44|        ADDOP_I(c, loc, BUILD_LIST, 0);
  ------------------
  |  |  280|     44|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     44|    do {                    \
  |  |  |  |   52|     44|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 44]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     44|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 44]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4325|  3.13k|        for (Py_ssize_t i = 0; i < asdl_seq_LEN(e->v.JoinedStr.values); i++) {
  ------------------
  |  |   83|  3.13k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  6.27k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4325:32): [True: 3.09k, False: 37]
  ------------------
 4326|  3.09k|            VISIT(c, expr, asdl_seq_GET(e->v.JoinedStr.values, i));
  ------------------
  |  |  460|  3.09k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  3.09k|    do {                    \
  |  |  |  |   52|  3.09k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 7, False: 3.09k]
  |  |  |  |  ------------------
  |  |  |  |   53|      7|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      7|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      7|        }                   \
  |  |  |  |   55|  3.09k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4327|  3.09k|            ADDOP_I(c, loc, LIST_APPEND, 1);
  ------------------
  |  |  280|  3.09k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  3.09k|    do {                    \
  |  |  |  |   52|  3.09k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.09k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.09k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4328|  3.09k|        }
 4329|     37|        ADDOP_I(c, loc, CALL, 1);
  ------------------
  |  |  280|     37|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     37|    do {                    \
  |  |  |  |   52|     37|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 37]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     37|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 37]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4330|     37|    }
 4331|  3.46k|    else {
 4332|  3.46k|        VISIT_SEQ(c, expr, e->v.JoinedStr.values);
  ------------------
  |  |  466|  3.46k|    do {                                                                    \
  |  |  467|  3.46k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  9.43k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  9.43k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  18.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 9.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 6.03k, False: 3.40k]
  |  |  ------------------
  |  |  469|  6.03k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  6.03k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.03k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  6.03k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  6.03k|    do {                    \
  |  |  |  |   52|  6.03k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 66, False: 5.96k]
  |  |  |  |  ------------------
  |  |  |  |   53|     66|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     66|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     66|        }                   \
  |  |  |  |   55|  6.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 5.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  6.03k|        }                                                                   \
  |  |  472|  3.46k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 3.40k]
  |  |  ------------------
  ------------------
 4333|  3.40k|        if (value_count > 1) {
  ------------------
  |  Branch (4333:13): [True: 1.66k, False: 1.73k]
  ------------------
 4334|  1.66k|            ADDOP_I(c, loc, BUILD_STRING, value_count);
  ------------------
  |  |  280|  1.66k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.66k|    do {                    \
  |  |  |  |   52|  1.66k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.66k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.66k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.66k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4335|  1.66k|        }
 4336|  1.73k|        else if (value_count == 0) {
  ------------------
  |  Branch (4336:18): [True: 354, False: 1.38k]
  ------------------
 4337|    354|            _Py_DECLARE_STR(empty, "");
 4338|    354|            ADDOP_LOAD_CONST_NEW(c, loc, Py_NewRef(&_Py_STR(empty)));
  ------------------
  |  |  329|    354|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    354|    do {                    \
  |  |  |  |   52|    354|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 354]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    354|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 354]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4339|    354|        }
 4340|  3.40k|    }
 4341|  3.43k|    return SUCCESS;
  ------------------
  |  |   47|  3.43k|#define SUCCESS 0
  ------------------
 4342|  3.51k|}
codegen.c:codegen_template_str:
 4274|  1.09k|{
 4275|  1.09k|    location loc = LOC(e);
  ------------------
  |  |   88|  1.09k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.09k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.09k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.09k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.09k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.09k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4276|  1.09k|    expr_ty value;
 4277|       |
 4278|  1.09k|    Py_ssize_t value_count = asdl_seq_LEN(e->v.TemplateStr.values);
  ------------------
  |  |   83|  1.09k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  2.18k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4279|  1.09k|    int last_was_interpolation = 1;
 4280|  1.09k|    Py_ssize_t stringslen = 0;
 4281|  3.83k|    for (Py_ssize_t i = 0; i < value_count; i++) {
  ------------------
  |  Branch (4281:28): [True: 2.74k, False: 1.09k]
  ------------------
 4282|  2.74k|        value = asdl_seq_GET(e->v.TemplateStr.values, i);
  ------------------
  |  |   82|  2.74k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.74k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4283|  2.74k|        if (value->kind == Interpolation_kind) {
  ------------------
  |  Branch (4283:13): [True: 1.60k, False: 1.13k]
  ------------------
 4284|  1.60k|            if (last_was_interpolation) {
  ------------------
  |  Branch (4284:17): [True: 947, False: 660]
  ------------------
 4285|    947|                ADDOP_LOAD_CONST(c, loc, Py_NewRef(&_Py_STR(empty)));
  ------------------
  |  |  311|    947|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    947|    do {                    \
  |  |  |  |   52|    947|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 947]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    947|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 947]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4286|    947|                stringslen++;
 4287|    947|            }
 4288|  1.60k|            last_was_interpolation = 1;
 4289|  1.60k|        }
 4290|  1.13k|        else {
 4291|  1.13k|            VISIT(c, expr, value);
  ------------------
  |  |  460|  1.13k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.13k|    do {                    \
  |  |  |  |   52|  1.13k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.13k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.13k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4292|  1.13k|            stringslen++;
 4293|  1.13k|            last_was_interpolation = 0;
 4294|  1.13k|        }
 4295|  2.74k|    }
 4296|  1.09k|    if (last_was_interpolation) {
  ------------------
  |  Branch (4296:9): [True: 613, False: 477]
  ------------------
 4297|    613|        ADDOP_LOAD_CONST(c, loc, Py_NewRef(&_Py_STR(empty)));
  ------------------
  |  |  311|    613|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|    613|    do {                    \
  |  |  |  |   52|    613|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 613]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    613|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 613]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4298|    613|        stringslen++;
 4299|    613|    }
 4300|  1.09k|    ADDOP_I(c, loc, BUILD_TUPLE, stringslen);
  ------------------
  |  |  280|  1.09k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.09k|    do {                    \
  |  |  |  |   52|  1.09k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.09k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.09k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4301|       |
 4302|  1.09k|    Py_ssize_t interpolationslen = 0;
 4303|  3.81k|    for (Py_ssize_t i = 0; i < value_count; i++) {
  ------------------
  |  Branch (4303:28): [True: 2.73k, False: 1.07k]
  ------------------
 4304|  2.73k|        value = asdl_seq_GET(e->v.TemplateStr.values, i);
  ------------------
  |  |   82|  2.73k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  2.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 4305|  2.73k|        if (value->kind == Interpolation_kind) {
  ------------------
  |  Branch (4305:13): [True: 1.60k, False: 1.13k]
  ------------------
 4306|  1.60k|            VISIT(c, expr, value);
  ------------------
  |  |  460|  1.60k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.60k|    do {                    \
  |  |  |  |   52|  1.60k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 12, False: 1.59k]
  |  |  |  |  ------------------
  |  |  |  |   53|     12|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     12|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     12|        }                   \
  |  |  |  |   55|  1.60k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4307|  1.59k|            interpolationslen++;
 4308|  1.59k|        }
 4309|  2.73k|    }
 4310|  1.07k|    ADDOP_I(c, loc, BUILD_TUPLE, interpolationslen);
  ------------------
  |  |  280|  1.07k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.07k|    do {                    \
  |  |  |  |   52|  1.07k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.07k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.07k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4311|  1.07k|    ADDOP(c, loc, BUILD_TEMPLATE);
  ------------------
  |  |  294|  1.07k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.07k|    do {                    \
  |  |  |  |   52|  1.07k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.07k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.07k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4312|  1.07k|    return SUCCESS;
  ------------------
  |  |   47|  1.07k|#define SUCCESS 0
  ------------------
 4313|  1.07k|}
codegen.c:codegen_formatted_value:
 4378|  3.80k|{
 4379|  3.80k|    int conversion = e->v.FormattedValue.conversion;
 4380|  3.80k|    int oparg;
 4381|       |
 4382|       |    /* The expression to be formatted. */
 4383|  3.80k|    VISIT(c, expr, e->v.FormattedValue.value);
  ------------------
  |  |  460|  3.80k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  3.80k|    do {                    \
  |  |  |  |   52|  3.80k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 62, False: 3.74k]
  |  |  |  |  ------------------
  |  |  |  |   53|     62|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     62|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     62|        }                   \
  |  |  |  |   55|  3.80k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.74k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4384|       |
 4385|  3.74k|    location loc = LOC(e);
  ------------------
  |  |   88|  3.74k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  3.74k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  3.74k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  3.74k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  3.74k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  3.74k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4386|  3.74k|    if (conversion != -1) {
  ------------------
  |  Branch (4386:9): [True: 2.11k, False: 1.63k]
  ------------------
 4387|  2.11k|        switch (conversion) {
 4388|    410|        case 's': oparg = FVC_STR;   break;
  ------------------
  |  |  128|    410|#define FVC_STR       0x1
  ------------------
  |  Branch (4388:9): [True: 410, False: 1.70k]
  ------------------
 4389|    776|        case 'r': oparg = FVC_REPR;  break;
  ------------------
  |  |  129|    776|#define FVC_REPR      0x2
  ------------------
  |  Branch (4389:9): [True: 776, False: 1.34k]
  ------------------
 4390|    931|        case 'a': oparg = FVC_ASCII; break;
  ------------------
  |  |  130|    931|#define FVC_ASCII     0x3
  ------------------
  |  Branch (4390:9): [True: 931, False: 1.18k]
  ------------------
 4391|      0|        default:
  ------------------
  |  Branch (4391:9): [True: 0, False: 2.11k]
  ------------------
 4392|      0|            PyErr_Format(PyExc_SystemError,
 4393|      0|                     "Unrecognized conversion character %d", conversion);
 4394|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4395|  2.11k|        }
 4396|  2.11k|        ADDOP_I(c, loc, CONVERT_VALUE, oparg);
  ------------------
  |  |  280|  2.11k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.11k|    do {                    \
  |  |  |  |   52|  2.11k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.11k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.11k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.11k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4397|  2.11k|    }
 4398|  3.74k|    if (e->v.FormattedValue.format_spec) {
  ------------------
  |  Branch (4398:9): [True: 1.62k, False: 2.11k]
  ------------------
 4399|       |        /* Evaluate the format spec, and update our opcode arg. */
 4400|  1.62k|        VISIT(c, expr, e->v.FormattedValue.format_spec);
  ------------------
  |  |  460|  1.62k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.62k|    do {                    \
  |  |  |  |   52|  1.62k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 11, False: 1.61k]
  |  |  |  |  ------------------
  |  |  |  |   53|     11|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     11|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     11|        }                   \
  |  |  |  |   55|  1.62k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4401|  1.61k|        ADDOP(c, loc, FORMAT_WITH_SPEC);
  ------------------
  |  |  294|  1.61k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.61k|    do {                    \
  |  |  |  |   52|  1.61k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.61k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.61k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4402|  2.11k|    } else {
 4403|  2.11k|        ADDOP(c, loc, FORMAT_SIMPLE);
  ------------------
  |  |  294|  2.11k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  2.11k|    do {                    \
  |  |  |  |   52|  2.11k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 2.11k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  2.11k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 2.11k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4404|  2.11k|    }
 4405|  3.73k|    return SUCCESS;
  ------------------
  |  |   47|  3.73k|#define SUCCESS 0
  ------------------
 4406|  3.74k|}
codegen.c:codegen_interpolation:
 4346|  1.60k|{
 4347|  1.60k|    location loc = LOC(e);
  ------------------
  |  |   88|  1.60k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.60k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.60k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.60k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.60k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.60k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 4348|       |
 4349|  1.60k|    VISIT(c, expr, e->v.Interpolation.value);
  ------------------
  |  |  460|  1.60k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.60k|    do {                    \
  |  |  |  |   52|  1.60k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 11, False: 1.59k]
  |  |  |  |  ------------------
  |  |  |  |   53|     11|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     11|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     11|        }                   \
  |  |  |  |   55|  1.60k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4350|  1.59k|    ADDOP_LOAD_CONST(c, loc, e->v.Interpolation.str);
  ------------------
  |  |  311|  1.59k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  1.59k|    do {                    \
  |  |  |  |   52|  1.59k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.59k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.59k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4351|       |
 4352|  1.59k|    int oparg = 2;
 4353|  1.59k|    if (e->v.Interpolation.format_spec) {
  ------------------
  |  Branch (4353:9): [True: 493, False: 1.10k]
  ------------------
 4354|    493|        oparg++;
 4355|    493|        VISIT(c, expr, e->v.Interpolation.format_spec);
  ------------------
  |  |  460|    493|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    493|    do {                    \
  |  |  |  |   52|    493|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 492]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    493|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 492]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4356|    493|    }
 4357|       |
 4358|  1.59k|    int conversion = e->v.Interpolation.conversion;
 4359|  1.59k|    if (conversion != -1) {
  ------------------
  |  Branch (4359:9): [True: 520, False: 1.07k]
  ------------------
 4360|    520|        switch (conversion) {
 4361|     69|        case 's': oparg |= FVC_STR << 2;   break;
  ------------------
  |  |  128|     69|#define FVC_STR       0x1
  ------------------
  |  Branch (4361:9): [True: 69, False: 451]
  ------------------
 4362|    139|        case 'r': oparg |= FVC_REPR << 2;  break;
  ------------------
  |  |  129|    139|#define FVC_REPR      0x2
  ------------------
  |  Branch (4362:9): [True: 139, False: 381]
  ------------------
 4363|    312|        case 'a': oparg |= FVC_ASCII << 2; break;
  ------------------
  |  |  130|    312|#define FVC_ASCII     0x3
  ------------------
  |  Branch (4363:9): [True: 312, False: 208]
  ------------------
 4364|      0|        default:
  ------------------
  |  Branch (4364:9): [True: 0, False: 520]
  ------------------
 4365|      0|            PyErr_Format(PyExc_SystemError,
 4366|      0|                     "Unrecognized conversion character %d", conversion);
 4367|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 4368|    520|        }
 4369|    520|    }
 4370|       |
 4371|  1.59k|    ADDOP_I(c, loc, BUILD_INTERPOLATION, oparg);
  ------------------
  |  |  280|  1.59k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.59k|    do {                    \
  |  |  |  |   52|  1.59k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.59k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.59k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.59k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4372|  1.59k|    return SUCCESS;
  ------------------
  |  |   47|  1.59k|#define SUCCESS 0
  ------------------
 4373|  1.59k|}
codegen.c:can_optimize_super_call:
 3900|  13.7k|{
 3901|  13.7k|    expr_ty e = attr->v.Attribute.value;
 3902|  13.7k|    if (e->kind != Call_kind ||
  ------------------
  |  Branch (3902:9): [True: 8.44k, False: 5.28k]
  ------------------
 3903|  5.28k|        e->v.Call.func->kind != Name_kind ||
  ------------------
  |  Branch (3903:9): [True: 3.00k, False: 2.27k]
  ------------------
 3904|  2.27k|        !_PyUnicode_EqualToASCIIString(e->v.Call.func->v.Name.id, "super") ||
  ------------------
  |  Branch (3904:9): [True: 1.48k, False: 795]
  ------------------
 3905|    795|        _PyUnicode_EqualToASCIIString(attr->v.Attribute.attr, "__class__") ||
  ------------------
  |  Branch (3905:9): [True: 0, False: 795]
  ------------------
 3906|  12.9k|        asdl_seq_LEN(e->v.Call.keywords) != 0) {
  ------------------
  |  |   83|    795|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.59k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 783, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3906:9): [True: 12, False: 783]
  ------------------
 3907|  12.9k|        return 0;
 3908|  12.9k|    }
 3909|    783|    Py_ssize_t num_args = asdl_seq_LEN(e->v.Call.args);
  ------------------
  |  |   83|    783|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.56k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 171, False: 612]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3910|       |
 3911|    783|    PyObject *super_name = e->v.Call.func->v.Name.id;
 3912|       |    // detect statically-visible shadowing of 'super' name
 3913|    783|    int scope = _PyST_GetScope(SYMTABLE_ENTRY(c), super_name);
  ------------------
  |  |   71|    783|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
 3914|    783|    RETURN_IF_ERROR(scope);
  ------------------
  |  |   51|    783|    do {                    \
  |  |   52|    783|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 783]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    783|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 783]
  |  |  ------------------
  ------------------
 3915|    783|    if (scope != GLOBAL_IMPLICIT) {
  ------------------
  |  |  193|    783|#define GLOBAL_IMPLICIT 3
  ------------------
  |  Branch (3915:9): [True: 93, False: 690]
  ------------------
 3916|     93|        return 0;
 3917|     93|    }
 3918|    690|    scope = _PyST_GetScope(SYMTABLE(c)->st_top, super_name);
  ------------------
  |  |   70|    690|#define SYMTABLE(C) _PyCompile_Symtable(C)
  ------------------
 3919|    690|    RETURN_IF_ERROR(scope);
  ------------------
  |  |   51|    690|    do {                    \
  |  |   52|    690|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 690]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    690|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 690]
  |  |  ------------------
  ------------------
 3920|    690|    if (scope != 0) {
  ------------------
  |  Branch (3920:9): [True: 102, False: 588]
  ------------------
 3921|    102|        return 0;
 3922|    102|    }
 3923|       |
 3924|    588|    if (num_args == 2) {
  ------------------
  |  Branch (3924:9): [True: 549, False: 39]
  ------------------
 3925|  1.61k|        for (Py_ssize_t i = 0; i < num_args; i++) {
  ------------------
  |  Branch (3925:32): [True: 1.08k, False: 523]
  ------------------
 3926|  1.08k|            expr_ty elt = asdl_seq_GET(e->v.Call.args, i);
  ------------------
  |  |   82|  1.08k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3927|  1.08k|            if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (3927:17): [True: 26, False: 1.06k]
  ------------------
 3928|     26|                return 0;
 3929|     26|            }
 3930|  1.08k|        }
 3931|       |        // exactly two non-starred args; we can just load
 3932|       |        // the provided args
 3933|    523|        return 1;
 3934|    549|    }
 3935|       |
 3936|     39|    if (num_args != 0) {
  ------------------
  |  Branch (3936:9): [True: 27, False: 12]
  ------------------
 3937|     27|        return 0;
 3938|     27|    }
 3939|       |    // we need the following for zero-arg super():
 3940|       |
 3941|       |    // enclosing function should have at least one argument
 3942|     12|    if (METADATA(c)->u_argcount == 0 &&
  ------------------
  |  |   76|     12|#define METADATA(C) _PyCompile_Metadata(C)
  ------------------
  |  Branch (3942:9): [True: 2, False: 10]
  ------------------
 3943|      2|        METADATA(c)->u_posonlyargcount == 0) {
  ------------------
  |  |   76|      2|#define METADATA(C) _PyCompile_Metadata(C)
  ------------------
  |  Branch (3943:9): [True: 1, False: 1]
  ------------------
 3944|      1|        return 0;
 3945|      1|    }
 3946|       |    // __class__ cell should be available
 3947|     11|    if (_PyCompile_GetRefType(c, &_Py_ID(__class__)) == FREE) {
  ------------------
  |  |  936|     11|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     11|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     11|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (_PyCompile_GetRefType(c, &_Py_ID(__class__)) == FREE) {
  ------------------
  |  |  194|     11|#define FREE 4
  ------------------
  |  Branch (3947:9): [True: 0, False: 11]
  ------------------
 3948|      0|        return 1;
 3949|      0|    }
 3950|     11|    return 0;
 3951|     11|}
codegen.c:load_args_for_super:
 3954|    523|load_args_for_super(compiler *c, expr_ty e) {
 3955|    523|    location loc = LOC(e);
  ------------------
  |  |   88|    523|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    523|    (_Py_SourceLocation){ \
  |  |  |  |   59|    523|               .lineno = (n)->lineno, \
  |  |  |  |   60|    523|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    523|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    523|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3956|       |
 3957|       |    // load super() global
 3958|    523|    PyObject *super_name = e->v.Call.func->v.Name.id;
 3959|    523|    RETURN_IF_ERROR(codegen_nameop(c, LOC(e->v.Call.func), super_name, Load));
  ------------------
  |  |   51|    523|    do {                    \
  |  |   52|    523|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 523]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    523|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 523]
  |  |  ------------------
  ------------------
 3960|       |
 3961|    523|    if (asdl_seq_LEN(e->v.Call.args) == 2) {
  ------------------
  |  |   83|    523|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.04k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 523]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3961:9): [True: 523, False: 0]
  ------------------
 3962|    523|        VISIT(c, expr, asdl_seq_GET(e->v.Call.args, 0));
  ------------------
  |  |  460|    523|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    523|    do {                    \
  |  |  |  |   52|    523|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 523]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    523|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 523]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3963|    523|        VISIT(c, expr, asdl_seq_GET(e->v.Call.args, 1));
  ------------------
  |  |  460|    523|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    523|    do {                    \
  |  |  |  |   52|    523|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 523]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    523|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 523]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3964|    523|        return SUCCESS;
  ------------------
  |  |   47|    523|#define SUCCESS 0
  ------------------
 3965|    523|    }
 3966|       |
 3967|       |    // load __class__ cell
 3968|      0|    PyObject *name = &_Py_ID(__class__);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3969|      0|    assert(_PyCompile_GetRefType(c, name) == FREE);
  ------------------
  |  Branch (3969:5): [True: 0, False: 0]
  ------------------
 3970|      0|    RETURN_IF_ERROR(codegen_nameop(c, loc, name, Load));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3971|       |
 3972|       |    // load self (first argument)
 3973|      0|    Py_ssize_t i = 0;
 3974|      0|    PyObject *key, *value;
 3975|      0|    if (!PyDict_Next(METADATA(c)->u_varnames, &i, &key, &value)) {
  ------------------
  |  |   76|      0|#define METADATA(C) _PyCompile_Metadata(C)
  ------------------
  |  Branch (3975:9): [True: 0, False: 0]
  ------------------
 3976|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 3977|      0|    }
 3978|      0|    RETURN_IF_ERROR(codegen_nameop(c, loc, key, Load));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3979|       |
 3980|      0|    return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
 3981|      0|}
codegen.c:codegen_subscript:
 5852|  10.2k|{
 5853|  10.2k|    location loc = LOC(e);
  ------------------
  |  |   88|  10.2k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  10.2k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  10.2k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  10.2k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  10.2k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  10.2k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5854|  10.2k|    expr_context_ty ctx = e->v.Subscript.ctx;
 5855|       |
 5856|  10.2k|    if (ctx == Load) {
  ------------------
  |  Branch (5856:9): [True: 10.0k, False: 170]
  ------------------
 5857|  10.0k|        RETURN_IF_ERROR(check_subscripter(c, e->v.Subscript.value));
  ------------------
  |  |   51|  10.0k|    do {                    \
  |  |   52|  10.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 10.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  10.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.0k]
  |  |  ------------------
  ------------------
 5858|  10.0k|        RETURN_IF_ERROR(check_index(c, e->v.Subscript.value, e->v.Subscript.slice));
  ------------------
  |  |   51|  10.0k|    do {                    \
  |  |   52|  10.0k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 10.0k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  10.0k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.0k]
  |  |  ------------------
  ------------------
 5859|  10.0k|    }
 5860|       |
 5861|  10.2k|    VISIT(c, expr, e->v.Subscript.value);
  ------------------
  |  |  460|  10.2k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  10.2k|    do {                    \
  |  |  |  |   52|  10.2k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 25, False: 10.1k]
  |  |  |  |  ------------------
  |  |  |  |   53|     25|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     25|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     25|        }                   \
  |  |  |  |   55|  10.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5862|  10.1k|    if (should_apply_two_element_slice_optimization(e->v.Subscript.slice) &&
  ------------------
  |  Branch (5862:9): [True: 419, False: 9.76k]
  ------------------
 5863|    419|        ctx != Del
  ------------------
  |  Branch (5863:9): [True: 416, False: 3]
  ------------------
 5864|  10.1k|    ) {
 5865|    416|        RETURN_IF_ERROR(codegen_slice_two_parts(c, e->v.Subscript.slice));
  ------------------
  |  |   51|    416|    do {                    \
  |  |   52|    416|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 7, False: 409]
  |  |  ------------------
  |  |   53|      7|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      7|#define ERROR -1
  |  |  ------------------
  |  |   54|      7|        }                   \
  |  |   55|    416|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 409]
  |  |  ------------------
  ------------------
 5866|    409|        if (ctx == Load) {
  ------------------
  |  Branch (5866:13): [True: 362, False: 47]
  ------------------
 5867|    362|            ADDOP(c, loc, BINARY_SLICE);
  ------------------
  |  |  294|    362|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    362|    do {                    \
  |  |  |  |   52|    362|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 362]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    362|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 362]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5868|    362|        }
 5869|     47|        else {
 5870|     47|            assert(ctx == Store);
  ------------------
  |  Branch (5870:13): [True: 47, False: 0]
  ------------------
 5871|     47|            ADDOP(c, loc, STORE_SLICE);
  ------------------
  |  |  294|     47|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     47|    do {                    \
  |  |  |  |   52|     47|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     47|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5872|     47|        }
 5873|    409|    }
 5874|  9.77k|    else {
 5875|  9.77k|        VISIT(c, expr, e->v.Subscript.slice);
  ------------------
  |  |  460|  9.77k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  9.77k|    do {                    \
  |  |  |  |   52|  9.77k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 17, False: 9.75k]
  |  |  |  |  ------------------
  |  |  |  |   53|     17|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     17|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     17|        }                   \
  |  |  |  |   55|  9.77k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5876|  9.75k|        switch (ctx) {
  ------------------
  |  Branch (5876:17): [True: 9.75k, False: 0]
  ------------------
 5877|  9.63k|            case Load:
  ------------------
  |  Branch (5877:13): [True: 9.63k, False: 122]
  ------------------
 5878|  9.63k|                ADDOP_I(c, loc, BINARY_OP, NB_SUBSCR);
  ------------------
  |  |  280|  9.63k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  9.63k|    do {                    \
  |  |  |  |   52|  9.63k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.63k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.63k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.63k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5879|  9.63k|                break;
 5880|  9.63k|            case Store:
  ------------------
  |  Branch (5880:13): [True: 73, False: 9.68k]
  ------------------
 5881|     73|                ADDOP(c, loc, STORE_SUBSCR);
  ------------------
  |  |  294|     73|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     73|    do {                    \
  |  |  |  |   52|     73|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     73|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 73]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5882|     73|                break;
 5883|     73|            case Del:
  ------------------
  |  Branch (5883:13): [True: 49, False: 9.70k]
  ------------------
 5884|     49|                ADDOP(c, loc, DELETE_SUBSCR);
  ------------------
  |  |  294|     49|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     49|    do {                    \
  |  |  |  |   52|     49|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 49]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     49|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 49]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5885|     49|                break;
 5886|  9.75k|        }
 5887|  9.75k|    }
 5888|  10.1k|    return SUCCESS;
  ------------------
  |  |   47|  10.1k|#define SUCCESS 0
  ------------------
 5889|  10.1k|}
codegen.c:check_subscripter:
 3815|  10.0k|{
 3816|  10.0k|    PyObject *v;
 3817|       |
 3818|  10.0k|    switch (e->kind) {
 3819|  4.37k|    case Constant_kind:
  ------------------
  |  Branch (3819:5): [True: 4.37k, False: 5.66k]
  ------------------
 3820|  4.37k|        v = e->v.Constant.value;
 3821|  4.37k|        if (!(v == Py_None || v == Py_Ellipsis ||
  ------------------
  |  |  616|  8.75k|#  define Py_None (&_Py_NoneStruct)
  ------------------
                      if (!(v == Py_None || v == Py_Ellipsis ||
  ------------------
  |  |   14|  8.73k|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (3821:15): [True: 19, False: 4.35k]
  |  Branch (3821:31): [True: 0, False: 4.35k]
  ------------------
 3822|  4.37k|              PyLong_Check(v) || PyFloat_Check(v) || PyComplex_Check(v) ||
  ------------------
  |  |   13|  4.35k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  8.73k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 191, False: 4.16k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                            PyLong_Check(v) || PyFloat_Check(v) || PyComplex_Check(v) ||
  ------------------
  |  |   16|  4.16k|#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  378|  8.54k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.16k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.16k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 105, False: 4.06k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                            PyLong_Check(v) || PyFloat_Check(v) || PyComplex_Check(v) ||
  ------------------
  |  |   13|  4.06k|#define PyComplex_Check(op) PyObject_TypeCheck((op), &PyComplex_Type)
  |  |  ------------------
  |  |  |  |  378|  8.43k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 44, False: 4.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3823|  4.01k|              PyAnySet_Check(v)))
  ------------------
  |  |   31|  4.01k|    (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  8.03k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 4.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (Py_IS_TYPE((ob), &PySet_Type) || Py_IS_TYPE((ob), &PyFrozenSet_Type) || \
  |  |  ------------------
  |  |  |  |  215|  8.03k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 4.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   32|  4.01k|      PyType_IsSubtype(Py_TYPE(ob), &PySet_Type) || \
  |  |  ------------------
  |  |  |  |  213|  4.01k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (32:7): [True: 0, False: 4.01k]
  |  |  ------------------
  |  |   33|  4.01k|      PyType_IsSubtype(Py_TYPE(ob), &PyFrozenSet_Type))
  |  |  ------------------
  |  |  |  |  213|  4.01k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (33:7): [True: 0, False: 4.01k]
  |  |  ------------------
  ------------------
 3824|  4.01k|        {
 3825|  4.01k|            return SUCCESS;
  ------------------
  |  |   47|  4.01k|#define SUCCESS 0
  ------------------
 3826|  4.01k|        }
 3827|    359|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|    359|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 3828|    369|    case Set_kind:
  ------------------
  |  Branch (3828:5): [True: 10, False: 10.0k]
  ------------------
 3829|    369|    case SetComp_kind:
  ------------------
  |  Branch (3829:5): [True: 0, False: 10.0k]
  ------------------
 3830|    369|    case GeneratorExp_kind:
  ------------------
  |  Branch (3830:5): [True: 0, False: 10.0k]
  ------------------
 3831|    426|    case TemplateStr_kind:
  ------------------
  |  Branch (3831:5): [True: 57, False: 9.98k]
  ------------------
 3832|    426|    case Interpolation_kind:
  ------------------
  |  Branch (3832:5): [True: 0, False: 10.0k]
  ------------------
 3833|    426|    case Lambda_kind: {
  ------------------
  |  Branch (3833:5): [True: 0, False: 10.0k]
  ------------------
 3834|    426|        location loc = LOC(e);
  ------------------
  |  |   88|    426|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    426|    (_Py_SourceLocation){ \
  |  |  |  |   59|    426|               .lineno = (n)->lineno, \
  |  |  |  |   60|    426|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    426|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    426|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3835|    426|        return _PyCompile_Warn(c, loc, "'%.200s' object is not subscriptable; "
 3836|    426|                                       "perhaps you missed a comma?",
 3837|    426|                                       infer_type(e)->tp_name);
 3838|    426|    }
 3839|  5.60k|    default:
  ------------------
  |  Branch (3839:5): [True: 5.60k, False: 4.44k]
  ------------------
 3840|  5.60k|        return SUCCESS;
  ------------------
  |  |   47|  5.60k|#define SUCCESS 0
  ------------------
 3841|  10.0k|    }
 3842|  10.0k|}
codegen.c:check_index:
 3846|  10.0k|{
 3847|  10.0k|    PyObject *v;
 3848|       |
 3849|  10.0k|    PyTypeObject *index_type = infer_type(s);
 3850|  10.0k|    if (index_type == NULL
  ------------------
  |  Branch (3850:9): [True: 6.76k, False: 3.27k]
  ------------------
 3851|  3.27k|        || PyType_FastSubclass(index_type, Py_TPFLAGS_LONG_SUBCLASS)
  ------------------
  |  |  760|  13.3k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  |  |  |  Branch (760:41): [True: 696, False: 2.57k]
  |  |  ------------------
  ------------------
 3852|  7.46k|        || index_type == &PySlice_Type) {
  ------------------
  |  Branch (3852:12): [True: 0, False: 2.57k]
  ------------------
 3853|  7.46k|        return SUCCESS;
  ------------------
  |  |   47|  7.46k|#define SUCCESS 0
  ------------------
 3854|  7.46k|    }
 3855|       |
 3856|  2.57k|    switch (e->kind) {
 3857|    385|    case Constant_kind:
  ------------------
  |  Branch (3857:5): [True: 385, False: 2.19k]
  ------------------
 3858|    385|        v = e->v.Constant.value;
 3859|    385|        if (!(PyUnicode_Check(v) || PyBytes_Check(v) || PyTuple_Check(v))) {
  ------------------
  |  |  103|    385|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    770|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 218, False: 167]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!(PyUnicode_Check(v) || PyBytes_Check(v) || PyTuple_Check(v))) {
  ------------------
  |  |   28|    167|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    552|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 31, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!(PyUnicode_Check(v) || PyBytes_Check(v) || PyTuple_Check(v))) {
  ------------------
  |  |   27|    136|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    136|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3860|    136|            return SUCCESS;
  ------------------
  |  |   47|    136|#define SUCCESS 0
  ------------------
 3861|    136|        }
 3862|    249|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|    249|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 3863|    744|    case Tuple_kind:
  ------------------
  |  Branch (3863:5): [True: 495, False: 2.08k]
  ------------------
 3864|  1.27k|    case List_kind:
  ------------------
  |  Branch (3864:5): [True: 535, False: 2.04k]
  ------------------
 3865|  1.28k|    case ListComp_kind:
  ------------------
  |  Branch (3865:5): [True: 6, False: 2.57k]
  ------------------
 3866|  1.29k|    case JoinedStr_kind:
  ------------------
  |  Branch (3866:5): [True: 12, False: 2.56k]
  ------------------
 3867|  1.29k|    case FormattedValue_kind: {
  ------------------
  |  Branch (3867:5): [True: 0, False: 2.57k]
  ------------------
 3868|  1.29k|        location loc = LOC(e);
  ------------------
  |  |   88|  1.29k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.29k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.29k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.29k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.29k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.29k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3869|  1.29k|        return _PyCompile_Warn(c, loc, "%.200s indices must be integers "
 3870|  1.29k|                                       "or slices, not %.200s; "
 3871|  1.29k|                                       "perhaps you missed a comma?",
 3872|  1.29k|                                       infer_type(e)->tp_name,
 3873|  1.29k|                                       index_type->tp_name);
 3874|  1.29k|    }
 3875|  1.14k|    default:
  ------------------
  |  Branch (3875:5): [True: 1.14k, False: 1.43k]
  ------------------
 3876|  1.14k|        return SUCCESS;
  ------------------
  |  |   47|  1.14k|#define SUCCESS 0
  ------------------
 3877|  2.57k|    }
 3878|  2.57k|}
codegen.c:codegen_slice:
 5913|  9.97k|{
 5914|  9.97k|    int n = 2;
 5915|  9.97k|    assert(s->kind == Slice_kind);
  ------------------
  |  Branch (5915:5): [True: 9.97k, False: 0]
  ------------------
 5916|       |
 5917|  9.97k|    if (is_constant_slice(s)) {
  ------------------
  |  Branch (5917:9): [True: 4.99k, False: 4.98k]
  ------------------
 5918|  4.99k|        PyObject *start = NULL;
 5919|  4.99k|        if (s->v.Slice.lower) {
  ------------------
  |  Branch (5919:13): [True: 2.82k, False: 2.16k]
  ------------------
 5920|  2.82k|            start = s->v.Slice.lower->v.Constant.value;
 5921|  2.82k|        }
 5922|  4.99k|        PyObject *stop = NULL;
 5923|  4.99k|        if (s->v.Slice.upper) {
  ------------------
  |  Branch (5923:13): [True: 1.50k, False: 3.48k]
  ------------------
 5924|  1.50k|            stop = s->v.Slice.upper->v.Constant.value;
 5925|  1.50k|        }
 5926|  4.99k|        PyObject *step = NULL;
 5927|  4.99k|        if (s->v.Slice.step) {
  ------------------
  |  Branch (5927:13): [True: 1.67k, False: 3.31k]
  ------------------
 5928|  1.67k|            step = s->v.Slice.step->v.Constant.value;
 5929|  1.67k|        }
 5930|  4.99k|        PyObject *slice = PySlice_New(start, stop, step);
 5931|  4.99k|        if (slice == NULL) {
  ------------------
  |  Branch (5931:13): [True: 0, False: 4.99k]
  ------------------
 5932|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
 5933|      0|        }
 5934|  4.99k|        ADDOP_LOAD_CONST_NEW(c, LOC(s), slice);
  ------------------
  |  |  329|  4.99k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  4.99k|    do {                    \
  |  |  |  |   52|  4.99k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.99k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.99k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.99k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5935|  4.99k|        return SUCCESS;
  ------------------
  |  |   47|  4.99k|#define SUCCESS 0
  ------------------
 5936|  4.99k|    }
 5937|       |
 5938|  4.98k|    RETURN_IF_ERROR(codegen_slice_two_parts(c, s));
  ------------------
  |  |   51|  4.98k|    do {                    \
  |  |   52|  4.98k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 7, False: 4.97k]
  |  |  ------------------
  |  |   53|      7|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      7|#define ERROR -1
  |  |  ------------------
  |  |   54|      7|        }                   \
  |  |   55|  4.98k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 4.97k]
  |  |  ------------------
  ------------------
 5939|       |
 5940|  4.97k|    if (s->v.Slice.step) {
  ------------------
  |  Branch (5940:9): [True: 1.70k, False: 3.26k]
  ------------------
 5941|  1.70k|        n++;
 5942|  1.70k|        VISIT(c, expr, s->v.Slice.step);
  ------------------
  |  |  460|  1.70k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  1.70k|    do {                    \
  |  |  |  |   52|  1.70k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 1.70k]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|  1.70k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.70k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5943|  1.70k|    }
 5944|       |
 5945|  4.97k|    ADDOP_I(c, LOC(s), BUILD_SLICE, n);
  ------------------
  |  |  280|  4.97k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.97k|    do {                    \
  |  |  |  |   52|  4.97k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.97k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.97k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.97k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5946|  4.97k|    return SUCCESS;
  ------------------
  |  |   47|  4.97k|#define SUCCESS 0
  ------------------
 5947|  4.97k|}
codegen.c:codegen_list:
 3594|  2.54k|{
 3595|  2.54k|    location loc = LOC(e);
  ------------------
  |  |   88|  2.54k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.54k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.54k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.54k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.54k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.54k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3596|  2.54k|    asdl_expr_seq *elts = e->v.List.elts;
 3597|  2.54k|    if (e->v.List.ctx == Store) {
  ------------------
  |  Branch (3597:9): [True: 222, False: 2.32k]
  ------------------
 3598|    222|        return assignment_helper(c, loc, elts);
 3599|    222|    }
 3600|  2.32k|    else if (e->v.List.ctx == Load) {
  ------------------
  |  Branch (3600:14): [True: 2.24k, False: 77]
  ------------------
 3601|  2.24k|        return starunpack_helper(c, loc, elts, 0,
 3602|  2.24k|                                 BUILD_LIST, LIST_APPEND, LIST_EXTEND, 0);
  ------------------
  |  |   57|  2.24k|#define BUILD_LIST                              44
  ------------------
                                               BUILD_LIST, LIST_APPEND, LIST_EXTEND, 0);
  ------------------
  |  |   87|  2.24k|#define LIST_APPEND                             74
  ------------------
                                               BUILD_LIST, LIST_APPEND, LIST_EXTEND, 0);
  ------------------
  |  |   88|  2.24k|#define LIST_EXTEND                             75
  ------------------
 3603|  2.24k|    }
 3604|     77|    else {
 3605|     77|        VISIT_SEQ(c, expr, elts);
  ------------------
  |  |  466|     77|    do {                                                                    \
  |  |  467|     77|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    154|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    154|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    308|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 12, False: 142]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 77, False: 77]
  |  |  ------------------
  |  |  469|     77|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|     77|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     77|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|     77|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|     77|    do {                    \
  |  |  |  |   52|     77|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 77]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     77|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 77]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|     77|        }                                                                   \
  |  |  472|     77|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 77]
  |  |  ------------------
  ------------------
 3606|     77|    }
 3607|     77|    return SUCCESS;
  ------------------
  |  |   47|     77|#define SUCCESS 0
  ------------------
 3608|  2.54k|}
codegen.c:assignment_helper:
 3582|  23.3k|{
 3583|  23.3k|    Py_ssize_t n = asdl_seq_LEN(elts);
  ------------------
  |  |   83|  23.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  46.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 799, False: 22.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3584|  23.3k|    RETURN_IF_ERROR(unpack_helper(c, loc, elts));
  ------------------
  |  |   51|  23.3k|    do {                    \
  |  |   52|  23.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 5, False: 23.3k]
  |  |  ------------------
  |  |   53|      5|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      5|#define ERROR -1
  |  |  ------------------
  |  |   54|      5|        }                   \
  |  |   55|  23.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 23.3k]
  |  |  ------------------
  ------------------
 3585|   100k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3585:28): [True: 76.7k, False: 23.3k]
  ------------------
 3586|  76.7k|        expr_ty elt = asdl_seq_GET(elts, i);
  ------------------
  |  |   82|  76.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  76.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3587|  76.7k|        VISIT(c, expr, elt->kind != Starred_kind ? elt : elt->v.Starred.value);
  ------------------
  |  |  460|  76.7k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  76.7k|    do {                    \
  |  |  |  |   52|   153k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 76.7k]
  |  |  |  |  |  Branch (52:14): [True: 76.3k, False: 408]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|  76.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 76.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3588|  76.7k|    }
 3589|  23.3k|    return SUCCESS;
  ------------------
  |  |   47|  23.3k|#define SUCCESS 0
  ------------------
 3590|  23.3k|}
codegen.c:unpack_helper:
 3554|  23.3k|{
 3555|  23.3k|    Py_ssize_t n = asdl_seq_LEN(elts);
  ------------------
  |  |   83|  23.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  46.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 799, False: 22.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3556|  23.3k|    int seen_star = 0;
 3557|   100k|    for (Py_ssize_t i = 0; i < n; i++) {
  ------------------
  |  Branch (3557:28): [True: 76.7k, False: 23.3k]
  ------------------
 3558|  76.7k|        expr_ty elt = asdl_seq_GET(elts, i);
  ------------------
  |  |   82|  76.7k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  76.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3559|  76.7k|        if (elt->kind == Starred_kind && !seen_star) {
  ------------------
  |  Branch (3559:13): [True: 418, False: 76.3k]
  |  Branch (3559:42): [True: 413, False: 5]
  ------------------
 3560|    413|            if ((i >= (1 << 8)) ||
  ------------------
  |  Branch (3560:17): [True: 0, False: 413]
  ------------------
 3561|    413|                (n-i-1 >= (INT_MAX >> 8))) {
  ------------------
  |  Branch (3561:17): [True: 0, False: 413]
  ------------------
 3562|      0|                return _PyCompile_Error(c, loc,
 3563|      0|                    "too many expressions in "
 3564|      0|                    "star-unpacking assignment");
 3565|      0|            }
 3566|    413|            ADDOP_I(c, loc, UNPACK_EX, (i + ((n-i-1) << 8)));
  ------------------
  |  |  280|    413|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    413|    do {                    \
  |  |  |  |   52|    413|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 413]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    413|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 413]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3567|    413|            seen_star = 1;
 3568|    413|        }
 3569|  76.3k|        else if (elt->kind == Starred_kind) {
  ------------------
  |  Branch (3569:18): [True: 5, False: 76.3k]
  ------------------
 3570|      5|            return _PyCompile_Error(c, loc,
 3571|      5|                "multiple starred expressions in assignment");
 3572|      5|        }
 3573|  76.7k|    }
 3574|  23.3k|    if (!seen_star) {
  ------------------
  |  Branch (3574:9): [True: 22.9k, False: 408]
  ------------------
 3575|  22.9k|        ADDOP_I(c, loc, UNPACK_SEQUENCE, n);
  ------------------
  |  |  280|  22.9k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  22.9k|    do {                    \
  |  |  |  |   52|  22.9k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 22.9k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  22.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 22.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3576|  22.9k|    }
 3577|  23.3k|    return SUCCESS;
  ------------------
  |  |   47|  23.3k|#define SUCCESS 0
  ------------------
 3578|  23.3k|}
codegen.c:codegen_tuple:
 3612|  78.0k|{
 3613|  78.0k|    location loc = LOC(e);
  ------------------
  |  |   88|  78.0k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  78.0k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  78.0k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  78.0k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  78.0k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  78.0k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3614|  78.0k|    asdl_expr_seq *elts = e->v.Tuple.elts;
 3615|  78.0k|    if (e->v.Tuple.ctx == Store) {
  ------------------
  |  Branch (3615:9): [True: 23.1k, False: 54.8k]
  ------------------
 3616|  23.1k|        return assignment_helper(c, loc, elts);
 3617|  23.1k|    }
 3618|  54.8k|    else if (e->v.Tuple.ctx == Load) {
  ------------------
  |  Branch (3618:14): [True: 54.7k, False: 131]
  ------------------
 3619|  54.7k|        return starunpack_helper(c, loc, elts, 0,
 3620|  54.7k|                                 BUILD_LIST, LIST_APPEND, LIST_EXTEND, 1);
  ------------------
  |  |   57|  54.7k|#define BUILD_LIST                              44
  ------------------
                                               BUILD_LIST, LIST_APPEND, LIST_EXTEND, 1);
  ------------------
  |  |   87|  54.7k|#define LIST_APPEND                             74
  ------------------
                                               BUILD_LIST, LIST_APPEND, LIST_EXTEND, 1);
  ------------------
  |  |   88|  54.7k|#define LIST_EXTEND                             75
  ------------------
 3621|  54.7k|    }
 3622|    131|    else {
 3623|    131|        VISIT_SEQ(c, expr, elts);
  ------------------
  |  |  466|    131|    do {                                                                    \
  |  |  467|    131|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    256|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    256|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    512|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 37, False: 219]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 125, False: 131]
  |  |  ------------------
  |  |  469|    125|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    125|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    125|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    125|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    125|    do {                    \
  |  |  |  |   52|    125|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 125]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    125|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 125]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    125|        }                                                                   \
  |  |  472|    131|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 131]
  |  |  ------------------
  ------------------
 3624|    131|    }
 3625|    131|    return SUCCESS;
  ------------------
  |  |   47|    131|#define SUCCESS 0
  ------------------
 3626|  78.0k|}
codegen.c:codegen_break:
 2326|      9|{
 2327|      9|    fblockinfo *loop = NULL;
 2328|      9|    location origin_loc = loc;
 2329|       |    /* Emit instruction with line number */
 2330|      9|    ADDOP(c, loc, NOP);
  ------------------
  |  |  294|      9|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|      9|    do {                    \
  |  |  |  |   52|      9|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      9|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2331|      9|    RETURN_IF_ERROR(codegen_unwind_fblock_stack(c, &loc, 0, &loop));
  ------------------
  |  |   51|      9|    do {                    \
  |  |   52|      9|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 9]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      9|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 9]
  |  |  ------------------
  ------------------
 2332|      9|    if (loop == NULL) {
  ------------------
  |  Branch (2332:9): [True: 9, False: 0]
  ------------------
 2333|      9|        return _PyCompile_Error(c, origin_loc, "'break' outside loop");
 2334|      9|    }
 2335|      0|    RETURN_IF_ERROR(codegen_unwind_fblock(c, &loc, loop, 0));
  ------------------
  |  |   51|      0|    do {                    \
  |  |   52|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2336|      0|    ADDOP_JUMP(c, loc, JUMP, loop->fb_exit);
  ------------------
  |  |  435|      0|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|      0|    do {                    \
  |  |  |  |   52|      0|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2337|      0|    return SUCCESS;
  ------------------
  |  |   47|      0|#define SUCCESS 0
  ------------------
 2338|      0|}
codegen.c:codegen_continue:
 2342|    133|{
 2343|    133|    fblockinfo *loop = NULL;
 2344|    133|    location origin_loc = loc;
 2345|       |    /* Emit instruction with line number */
 2346|    133|    ADDOP(c, loc, NOP);
  ------------------
  |  |  294|    133|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    133|    do {                    \
  |  |  |  |   52|    133|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 133]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    133|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 133]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2347|    133|    RETURN_IF_ERROR(codegen_unwind_fblock_stack(c, &loc, 0, &loop));
  ------------------
  |  |   51|    133|    do {                    \
  |  |   52|    133|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 3, False: 130]
  |  |  ------------------
  |  |   53|      3|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      3|#define ERROR -1
  |  |  ------------------
  |  |   54|      3|        }                   \
  |  |   55|    133|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 130]
  |  |  ------------------
  ------------------
 2348|    130|    if (loop == NULL) {
  ------------------
  |  Branch (2348:9): [True: 25, False: 105]
  ------------------
 2349|     25|        return _PyCompile_Error(c, origin_loc, "'continue' not properly in loop");
 2350|     25|    }
 2351|    105|    ADDOP_JUMP(c, loc, JUMP, loop->fb_block);
  ------------------
  |  |  435|    105|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    105|    do {                    \
  |  |  |  |   52|    105|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 105]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    105|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 105]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2352|    105|    return SUCCESS;
  ------------------
  |  |   47|    105|#define SUCCESS 0
  ------------------
 2353|    105|}
codegen.c:codegen_with:
 5474|    545|{
 5475|    545|    return codegen_with_inner(c, s, 0);
 5476|    545|}
codegen.c:codegen_with_inner:
 5405|    836|{
 5406|    836|    withitem_ty item = asdl_seq_GET(s->v.With.items, pos);
  ------------------
  |  |   82|    836|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    836|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 5407|       |
 5408|    836|    assert(s->kind == With_kind);
  ------------------
  |  Branch (5408:5): [True: 836, False: 0]
  ------------------
 5409|       |
 5410|    836|    NEW_JUMP_TARGET_LABEL(c, block);
  ------------------
  |  |   94|    836|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    836|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    836|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    836|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    836|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 836]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5411|    836|    NEW_JUMP_TARGET_LABEL(c, final);
  ------------------
  |  |   94|    836|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    836|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    836|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    836|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    836|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 836]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5412|    836|    NEW_JUMP_TARGET_LABEL(c, exit);
  ------------------
  |  |   94|    836|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    836|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    836|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    836|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    836|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 836]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5413|    836|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|    836|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|    836|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|    836|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|    836|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|    836|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 836]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5414|       |
 5415|       |    /* Evaluate EXPR */
 5416|    836|    VISIT(c, expr, item->context_expr);
  ------------------
  |  |  460|    836|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    836|    do {                    \
  |  |  |  |   52|    836|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    836|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5417|       |    /* Will push bound __exit__ */
 5418|    835|    location loc = LOC(item->context_expr);
  ------------------
  |  |   88|    835|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    835|    (_Py_SourceLocation){ \
  |  |  |  |   59|    835|               .lineno = (n)->lineno, \
  |  |  |  |   60|    835|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    835|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    835|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5419|    835|    ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|    835|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5420|    835|    ADDOP_I(c, loc, LOAD_SPECIAL, SPECIAL___EXIT__);
  ------------------
  |  |  280|    835|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5421|    835|    ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|    835|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5422|    835|    ADDOP_I(c, loc, SWAP, 3);
  ------------------
  |  |  280|    835|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5423|    835|    ADDOP_I(c, loc, LOAD_SPECIAL, SPECIAL___ENTER__);
  ------------------
  |  |  280|    835|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5424|    835|    ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|    835|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5425|    835|    ADDOP_JUMP(c, loc, SETUP_WITH, final);
  ------------------
  |  |  435|    835|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5426|       |
 5427|       |    /* SETUP_WITH pushes a finally block. */
 5428|    835|    USE_LABEL(c, block);
  ------------------
  |  |  100|    835|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    835|    do {                    \
  |  |  |  |   52|    835|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 835]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    835|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 835]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5429|    835|    RETURN_IF_ERROR(_PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_WITH, block, final, s));
  ------------------
  |  |   51|    835|    do {                    \
  |  |   52|    835|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 1, False: 834]
  |  |  ------------------
  |  |   53|      1|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      1|#define ERROR -1
  |  |  ------------------
  |  |   54|      1|        }                   \
  |  |   55|    835|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 834]
  |  |  ------------------
  ------------------
 5430|       |
 5431|    834|    if (item->optional_vars) {
  ------------------
  |  Branch (5431:9): [True: 50, False: 784]
  ------------------
 5432|     50|        VISIT(c, expr, item->optional_vars);
  ------------------
  |  |  460|     50|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     50|    do {                    \
  |  |  |  |   52|     50|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 50]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     50|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 50]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5433|     50|    }
 5434|    784|    else {
 5435|       |    /* Discard result from context.__enter__() */
 5436|    784|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|    784|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    784|    do {                    \
  |  |  |  |   52|    784|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 784]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    784|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 784]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5437|    784|    }
 5438|       |
 5439|    834|    pos++;
 5440|    834|    if (pos == asdl_seq_LEN(s->v.With.items)) {
  ------------------
  |  |   83|    834|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  1.66k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 834]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5440:9): [True: 543, False: 291]
  ------------------
 5441|       |        /* BLOCK code */
 5442|    543|        VISIT_SEQ(c, stmt, s->v.With.body);
  ------------------
  |  |  466|    543|    do {                                                                    \
  |  |  467|    543|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  1.61k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  1.61k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.23k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.61k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 1.08k, False: 532]
  |  |  ------------------
  |  |  469|  1.08k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  1.08k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  1.08k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  1.08k|    do {                    \
  |  |  |  |   52|  1.08k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 11, False: 1.07k]
  |  |  |  |  ------------------
  |  |  |  |   53|     11|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|     11|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|     11|        }                   \
  |  |  |  |   55|  1.08k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.07k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  1.08k|        }                                                                   \
  |  |  472|    543|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 532]
  |  |  ------------------
  ------------------
 5443|    543|    }
 5444|    291|    else {
 5445|    291|        RETURN_IF_ERROR(codegen_with_inner(c, s, pos));
  ------------------
  |  |   51|    291|    do {                    \
  |  |   52|    291|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 47, False: 244]
  |  |  ------------------
  |  |   53|     47|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|     47|#define ERROR -1
  |  |  ------------------
  |  |   54|     47|        }                   \
  |  |   55|    291|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 244]
  |  |  ------------------
  ------------------
 5446|    291|    }
 5447|       |
 5448|    776|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|    776|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5449|    776|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_WITH, block);
 5450|       |
 5451|       |    /* End of body; start the cleanup. */
 5452|       |
 5453|       |    /* For successful outcome:
 5454|       |     * call __exit__(None, None, None)
 5455|       |     */
 5456|    776|    RETURN_IF_ERROR(codegen_call_exit_with_nones(c, loc));
  ------------------
  |  |   51|    776|    do {                    \
  |  |   52|    776|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    776|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  ------------------
  ------------------
 5457|    776|    ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|    776|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5458|    776|    ADDOP_JUMP(c, loc, JUMP, exit);
  ------------------
  |  |  435|    776|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5459|       |
 5460|       |    /* For exceptional outcome: */
 5461|    776|    USE_LABEL(c, final);
  ------------------
  |  |  100|    776|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5462|       |
 5463|    776|    ADDOP_JUMP(c, loc, SETUP_CLEANUP, cleanup);
  ------------------
  |  |  435|    776|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5464|    776|    ADDOP(c, loc, PUSH_EXC_INFO);
  ------------------
  |  |  294|    776|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5465|    776|    ADDOP(c, loc, WITH_EXCEPT_START);
  ------------------
  |  |  294|    776|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5466|    776|    RETURN_IF_ERROR(codegen_with_except_finish(c, cleanup));
  ------------------
  |  |   51|    776|    do {                    \
  |  |   52|    776|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    776|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  ------------------
  ------------------
 5467|       |
 5468|    776|    USE_LABEL(c, exit);
  ------------------
  |  |  100|    776|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|    776|    do {                    \
  |  |  |  |   52|    776|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 776]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    776|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 776]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5469|    776|    return SUCCESS;
  ------------------
  |  |   47|    776|#define SUCCESS 0
  ------------------
 5470|    776|}
codegen.c:codegen_with_except_finish:
 5244|  11.5k|codegen_with_except_finish(compiler *c, jump_target_label cleanup) {
 5245|  11.5k|    NEW_JUMP_TARGET_LABEL(c, suppress);
  ------------------
  |  |   94|  11.5k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  11.5k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  11.5k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  11.5k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  11.5k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 11.5k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5246|  11.5k|    ADDOP(c, NO_LOCATION, TO_BOOL);
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5247|  11.5k|    ADDOP_JUMP(c, NO_LOCATION, POP_JUMP_IF_TRUE, suppress);
  ------------------
  |  |  435|  11.5k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5248|  11.5k|    ADDOP_I(c, NO_LOCATION, RERAISE, 2);
  ------------------
  |  |  280|  11.5k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5249|       |
 5250|  11.5k|    USE_LABEL(c, suppress);
  ------------------
  |  |  100|  11.5k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5251|  11.5k|    ADDOP(c, NO_LOCATION, POP_TOP); /* exc_value */
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5252|  11.5k|    ADDOP(c, NO_LOCATION, POP_BLOCK);
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5253|  11.5k|    ADDOP(c, NO_LOCATION, POP_EXCEPT);
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5254|  11.5k|    ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5255|  11.5k|    ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5256|  11.5k|    ADDOP(c, NO_LOCATION, POP_TOP);
  ------------------
  |  |  294|  11.5k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5257|  11.5k|    NEW_JUMP_TARGET_LABEL(c, exit);
  ------------------
  |  |   94|  11.5k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  11.5k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  11.5k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  11.5k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  11.5k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 11.5k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5258|  11.5k|    ADDOP_JUMP(c, NO_LOCATION, JUMP_NO_INTERRUPT, exit);
  ------------------
  |  |  435|  11.5k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5259|       |
 5260|  11.5k|    USE_LABEL(c, cleanup);
  ------------------
  |  |  100|  11.5k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5261|  11.5k|    POP_EXCEPT_AND_RERAISE(c, NO_LOCATION);
  ------------------
  |  |  450|  11.5k|    RETURN_IF_ERROR(codegen_pop_except_and_reraise((C), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5262|       |
 5263|  11.5k|    USE_LABEL(c, exit);
  ------------------
  |  |  100|  11.5k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  11.5k|    do {                    \
  |  |  |  |   52|  11.5k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 11.5k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  11.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 11.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5264|  11.5k|    return SUCCESS;
  ------------------
  |  |   47|  11.5k|#define SUCCESS 0
  ------------------
 5265|  11.5k|}
codegen.c:codegen_async_with:
 5377|  2.09k|{
 5378|  2.09k|    return codegen_async_with_inner(c, s, 0);
 5379|  2.09k|}
codegen.c:codegen_async_with_inner:
 5293|  10.8k|{
 5294|  10.8k|    location loc = LOC(s);
  ------------------
  |  |   88|  10.8k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  10.8k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  10.8k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  10.8k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  10.8k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  10.8k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5295|  10.8k|    withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos);
  ------------------
  |  |   82|  10.8k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  10.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 5296|       |
 5297|  10.8k|    assert(s->kind == AsyncWith_kind);
  ------------------
  |  Branch (5297:5): [True: 10.8k, False: 0]
  ------------------
 5298|       |
 5299|  10.8k|    NEW_JUMP_TARGET_LABEL(c, block);
  ------------------
  |  |   94|  10.8k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  10.8k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  10.8k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  10.8k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  10.8k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 10.8k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5300|  10.8k|    NEW_JUMP_TARGET_LABEL(c, final);
  ------------------
  |  |   94|  10.8k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  10.8k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  10.8k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  10.8k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  10.8k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 10.8k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5301|  10.8k|    NEW_JUMP_TARGET_LABEL(c, exit);
  ------------------
  |  |   94|  10.8k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  10.8k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  10.8k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  10.8k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  10.8k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 10.8k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5302|  10.8k|    NEW_JUMP_TARGET_LABEL(c, cleanup);
  ------------------
  |  |   94|  10.8k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  10.8k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  10.8k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  10.8k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  10.8k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 10.8k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 5303|       |
 5304|       |    /* Evaluate EXPR */
 5305|  10.8k|    VISIT(c, expr, item->context_expr);
  ------------------
  |  |  460|  10.8k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5306|  10.8k|    loc = LOC(item->context_expr);
  ------------------
  |  |   88|  10.8k|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  10.8k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  10.8k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  10.8k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  10.8k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  10.8k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 5307|  10.8k|    ADDOP_I(c, loc, COPY, 1);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5308|  10.8k|    ADDOP_I(c, loc, LOAD_SPECIAL, SPECIAL___AEXIT__);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5309|  10.8k|    ADDOP_I(c, loc, SWAP, 2);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5310|  10.8k|    ADDOP_I(c, loc, SWAP, 3);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5311|  10.8k|    ADDOP_I(c, loc, LOAD_SPECIAL, SPECIAL___AENTER__);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5312|  10.8k|    ADDOP_I(c, loc, CALL, 0);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5313|  10.8k|    ADDOP_I(c, loc, GET_AWAITABLE, 1);
  ------------------
  |  |  280|  10.8k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5314|  10.8k|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  10.8k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5315|  10.8k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  10.8k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5316|  10.8k|    ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|  10.8k|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5317|       |
 5318|  10.8k|    ADDOP_JUMP(c, loc, SETUP_WITH, final);
  ------------------
  |  |  435|  10.8k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5319|       |
 5320|       |    /* SETUP_WITH pushes a finally block. */
 5321|  10.8k|    USE_LABEL(c, block);
  ------------------
  |  |  100|  10.8k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  10.8k|    do {                    \
  |  |  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5322|  10.8k|    RETURN_IF_ERROR(_PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_ASYNC_WITH, block, final, s));
  ------------------
  |  |   51|  10.8k|    do {                    \
  |  |   52|  10.8k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 6, False: 10.8k]
  |  |  ------------------
  |  |   53|      6|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      6|#define ERROR -1
  |  |  ------------------
  |  |   54|      6|        }                   \
  |  |   55|  10.8k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.8k]
  |  |  ------------------
  ------------------
 5323|       |
 5324|  10.8k|    if (item->optional_vars) {
  ------------------
  |  Branch (5324:9): [True: 941, False: 9.95k]
  ------------------
 5325|    941|        VISIT(c, expr, item->optional_vars);
  ------------------
  |  |  460|    941|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|    941|    do {                    \
  |  |  |  |   52|    941|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 2, False: 939]
  |  |  |  |  ------------------
  |  |  |  |   53|      2|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      2|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      2|        }                   \
  |  |  |  |   55|    941|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 939]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5326|    941|    }
 5327|  9.95k|    else {
 5328|       |        /* Discard result from context.__aenter__() */
 5329|  9.95k|        ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  9.95k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  9.95k|    do {                    \
  |  |  |  |   52|  9.95k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 9.95k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  9.95k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 9.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5330|  9.95k|    }
 5331|       |
 5332|  10.8k|    pos++;
 5333|  10.8k|    if (pos == asdl_seq_LEN(s->v.AsyncWith.items)) {
  ------------------
  |  |   83|  10.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  21.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5333:9): [True: 2.08k, False: 8.80k]
  ------------------
 5334|       |        /* BLOCK code */
 5335|  2.08k|        VISIT_SEQ(c, stmt, s->v.AsyncWith.body);
  ------------------
  |  |  466|  2.08k|    do {                                                                    \
  |  |  467|  2.08k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|  5.94k|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|  5.94k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 3.86k, False: 2.08k]
  |  |  ------------------
  |  |  469|  3.86k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|  3.86k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.86k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|  3.86k|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|  3.86k|    do {                    \
  |  |  |  |   52|  3.86k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 5, False: 3.85k]
  |  |  |  |  ------------------
  |  |  |  |   53|      5|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      5|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      5|        }                   \
  |  |  |  |   55|  3.86k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.85k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|  3.86k|        }                                                                   \
  |  |  472|  2.08k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 2.08k]
  |  |  ------------------
  ------------------
 5336|  2.08k|    }
 5337|  8.80k|    else {
 5338|  8.80k|        RETURN_IF_ERROR(codegen_async_with_inner(c, s, pos));
  ------------------
  |  |   51|  8.80k|    do {                    \
  |  |   52|  8.80k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 142, False: 8.66k]
  |  |  ------------------
  |  |   53|    142|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|    142|#define ERROR -1
  |  |  ------------------
  |  |   54|    142|        }                   \
  |  |   55|  8.80k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 8.66k]
  |  |  ------------------
  ------------------
 5339|  8.80k|    }
 5340|       |
 5341|  10.7k|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_ASYNC_WITH, block);
 5342|       |
 5343|  10.7k|    ADDOP(c, loc, POP_BLOCK);
  ------------------
  |  |  294|  10.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5344|       |    /* End of body; start the cleanup */
 5345|       |
 5346|       |    /* For successful outcome:
 5347|       |     * call __exit__(None, None, None)
 5348|       |     */
 5349|  10.7k|    RETURN_IF_ERROR(codegen_call_exit_with_nones(c, loc));
  ------------------
  |  |   51|  10.7k|    do {                    \
  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  10.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  ------------------
  ------------------
 5350|  10.7k|    ADDOP_I(c, loc, GET_AWAITABLE, 2);
  ------------------
  |  |  280|  10.7k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5351|  10.7k|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  10.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5352|  10.7k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  10.7k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5353|  10.7k|    ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|  10.7k|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5354|       |
 5355|  10.7k|    ADDOP(c, loc, POP_TOP);
  ------------------
  |  |  294|  10.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5356|       |
 5357|  10.7k|    ADDOP_JUMP(c, loc, JUMP, exit);
  ------------------
  |  |  435|  10.7k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5358|       |
 5359|       |    /* For exceptional outcome: */
 5360|  10.7k|    USE_LABEL(c, final);
  ------------------
  |  |  100|  10.7k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5361|       |
 5362|  10.7k|    ADDOP_JUMP(c, loc, SETUP_CLEANUP, cleanup);
  ------------------
  |  |  435|  10.7k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5363|  10.7k|    ADDOP(c, loc, PUSH_EXC_INFO);
  ------------------
  |  |  294|  10.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5364|  10.7k|    ADDOP(c, loc, WITH_EXCEPT_START);
  ------------------
  |  |  294|  10.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5365|  10.7k|    ADDOP_I(c, loc, GET_AWAITABLE, 2);
  ------------------
  |  |  280|  10.7k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5366|  10.7k|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|  10.7k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5367|  10.7k|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|  10.7k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5368|  10.7k|    ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|  10.7k|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5369|  10.7k|    RETURN_IF_ERROR(codegen_with_except_finish(c, cleanup));
  ------------------
  |  |   51|  10.7k|    do {                    \
  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  10.7k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  ------------------
  ------------------
 5370|       |
 5371|  10.7k|    USE_LABEL(c, exit);
  ------------------
  |  |  100|  10.7k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  10.7k|    do {                    \
  |  |  |  |   52|  10.7k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 10.7k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  10.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 10.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5372|  10.7k|    return SUCCESS;
  ------------------
  |  |   47|  10.7k|#define SUCCESS 0
  ------------------
 5373|  10.7k|}
codegen.c:codegen_async_for:
 2210|     91|{
 2211|     91|    location loc = LOC(s);
  ------------------
  |  |   88|     91|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     91|    (_Py_SourceLocation){ \
  |  |  |  |   59|     91|               .lineno = (n)->lineno, \
  |  |  |  |   60|     91|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     91|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     91|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2212|       |
 2213|     91|    NEW_JUMP_TARGET_LABEL(c, start);
  ------------------
  |  |   94|     91|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     91|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     91|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     91|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     91|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 91]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2214|     91|    NEW_JUMP_TARGET_LABEL(c, send);
  ------------------
  |  |   94|     91|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     91|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     91|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     91|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     91|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 91]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2215|     91|    NEW_JUMP_TARGET_LABEL(c, except);
  ------------------
  |  |   94|     91|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     91|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     91|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     91|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     91|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 91]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2216|     91|    NEW_JUMP_TARGET_LABEL(c, end);
  ------------------
  |  |   94|     91|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|     91|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|     91|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|     91|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|     91|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 91]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
 2217|       |
 2218|     91|    VISIT(c, expr, s->v.AsyncFor.iter);
  ------------------
  |  |  460|     91|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     91|    do {                    \
  |  |  |  |   52|     91|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|     91|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2219|     90|    ADDOP(c, LOC(s->v.AsyncFor.iter), GET_AITER);
  ------------------
  |  |  294|     90|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2220|       |
 2221|     90|    USE_LABEL(c, start);
  ------------------
  |  |  100|     90|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2222|     90|    RETURN_IF_ERROR(_PyCompile_PushFBlock(c, loc, COMPILE_FBLOCK_ASYNC_FOR_LOOP, start, end, NULL));
  ------------------
  |  |   51|     90|    do {                    \
  |  |   52|     90|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|     90|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  ------------------
  ------------------
 2223|       |
 2224|       |    /* SETUP_FINALLY to guard the __anext__ call */
 2225|     90|    ADDOP_JUMP(c, loc, SETUP_FINALLY, except);
  ------------------
  |  |  435|     90|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2226|     90|    ADDOP(c, loc, GET_ANEXT);
  ------------------
  |  |  294|     90|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2227|     90|    ADDOP(c, loc, PUSH_NULL);
  ------------------
  |  |  294|     90|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2228|     90|    ADDOP_LOAD_CONST(c, loc, Py_None);
  ------------------
  |  |  311|     90|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2229|     90|    USE_LABEL(c, send);
  ------------------
  |  |  100|     90|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2230|     90|    ADD_YIELD_FROM(c, loc, 1);
  ------------------
  |  |  447|     90|    RETURN_IF_ERROR(codegen_add_yield_from((C), (LOC), (await)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2231|     90|    ADDOP(c, loc, POP_BLOCK);  /* for SETUP_FINALLY */
  ------------------
  |  |  294|     90|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2232|     90|    ADDOP(c, loc, NOT_TAKEN);
  ------------------
  |  |  294|     90|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 90]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 90]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2233|       |
 2234|       |    /* Success block for __anext__ */
 2235|     90|    VISIT(c, expr, s->v.AsyncFor.target);
  ------------------
  |  |  460|     90|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|     90|    do {                    \
  |  |  |  |   52|     90|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 89]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|     90|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 89]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2236|     89|    VISIT_SEQ(c, stmt, s->v.AsyncFor.body);
  ------------------
  |  |  466|     89|    do {                                                                    \
  |  |  467|     89|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    191|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    191|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    382|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 191]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 103, False: 88]
  |  |  ------------------
  |  |  469|    103|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    103|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    103|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    103|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    103|    do {                    \
  |  |  |  |   52|    103|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 102]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    103|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 102]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    103|        }                                                                   \
  |  |  472|     89|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 88]
  |  |  ------------------
  ------------------
 2237|       |    /* Mark jump as artificial */
 2238|     88|    ADDOP_JUMP(c, NO_LOCATION, JUMP, start);
  ------------------
  |  |  435|     88|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|     88|    do {                    \
  |  |  |  |   52|     88|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 88]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     88|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 88]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2239|       |
 2240|     88|    _PyCompile_PopFBlock(c, COMPILE_FBLOCK_ASYNC_FOR_LOOP, start);
 2241|       |
 2242|       |    /* Except block for __anext__ */
 2243|     88|    USE_LABEL(c, except);
  ------------------
  |  |  100|     88|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     88|    do {                    \
  |  |  |  |   52|     88|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 88]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     88|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 88]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2244|       |
 2245|       |    /* Use same line number as the iterator,
 2246|       |     * as the END_ASYNC_FOR succeeds the `for`, not the body. */
 2247|     88|    loc = LOC(s->v.AsyncFor.iter);
  ------------------
  |  |   88|     88|#define LOC(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     88|    (_Py_SourceLocation){ \
  |  |  |  |   59|     88|               .lineno = (n)->lineno, \
  |  |  |  |   60|     88|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     88|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     88|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2248|     88|    ADDOP_JUMP(c, loc, END_ASYNC_FOR, send);
  ------------------
  |  |  435|     88|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|     88|    do {                    \
  |  |  |  |   52|     88|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 88]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     88|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 88]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2249|       |
 2250|       |    /* `else` block */
 2251|     88|    VISIT_SEQ(c, stmt, s->v.AsyncFor.orelse);
  ------------------
  |  |  466|     88|    do {                                                                    \
  |  |  467|     88|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */    \
  |  |  468|    208|        for (int _i = 0; _i < asdl_seq_LEN(seq); _i++) {                    \
  |  |  ------------------
  |  |  |  |   83|    208|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    416|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 45, False: 163]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (468:26): [True: 121, False: 87]
  |  |  ------------------
  |  |  469|    121|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, _i);           \
  |  |  ------------------
  |  |  |  |   82|    121|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    121|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  470|    121|            RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), elt));              \
  |  |  ------------------
  |  |  |  |   51|    121|    do {                    \
  |  |  |  |   52|    121|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 1, False: 120]
  |  |  |  |  ------------------
  |  |  |  |   53|      1|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      1|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      1|        }                   \
  |  |  |  |   55|    121|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 120]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  471|    121|        }                                                                   \
  |  |  472|     88|    } while (0)
  |  |  ------------------
  |  |  |  Branch (472:14): [Folded, False: 87]
  |  |  ------------------
  ------------------
 2252|       |
 2253|     87|    USE_LABEL(c, end);
  ------------------
  |  |  100|     87|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|     87|    do {                    \
  |  |  |  |   52|     87|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 87]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|     87|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 87]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2254|     87|    return SUCCESS;
  ------------------
  |  |   47|     87|#define SUCCESS 0
  ------------------
 2255|     87|}
codegen.c:codegen_process_deferred_annotations:
  865|  19.3k|{
  866|  19.3k|    PyObject *deferred_anno = NULL;
  867|  19.3k|    PyObject *conditional_annotation_indices = NULL;
  868|  19.3k|    _PyCompile_DeferredAnnotations(c, &deferred_anno, &conditional_annotation_indices);
  869|  19.3k|    if (deferred_anno == NULL) {
  ------------------
  |  Branch (869:9): [True: 12.8k, False: 6.50k]
  ------------------
  870|  12.8k|        assert(conditional_annotation_indices == NULL);
  ------------------
  |  Branch (870:9): [True: 12.8k, False: 0]
  ------------------
  871|  12.8k|        return SUCCESS;
  ------------------
  |  |   47|  12.8k|#define SUCCESS 0
  ------------------
  872|  12.8k|    }
  873|       |
  874|  6.50k|    int scope_type = SCOPE_TYPE(c);
  ------------------
  |  |   74|  6.50k|#define SCOPE_TYPE(C) _PyCompile_ScopeType(C)
  ------------------
  875|  6.50k|    bool need_separate_block = scope_type == COMPILE_SCOPE_MODULE;
  876|  6.50k|    if (need_separate_block) {
  ------------------
  |  Branch (876:9): [True: 608, False: 5.89k]
  ------------------
  877|    608|        if (_PyCompile_StartAnnotationSetup(c) == ERROR) {
  ------------------
  |  |   48|    608|#define ERROR -1
  ------------------
  |  Branch (877:13): [True: 0, False: 608]
  ------------------
  878|      0|            goto error;
  879|      0|        }
  880|    608|    }
  881|       |
  882|       |    // It's possible that ste_annotations_block is set but
  883|       |    // u_deferred_annotations is not, because the former is still
  884|       |    // set if there are only non-simple annotations (i.e., annotations
  885|       |    // for attributes, subscripts, or parenthesized names). However, the
  886|       |    // reverse should not be possible.
  887|  6.50k|    PySTEntryObject *ste = SYMTABLE_ENTRY(c);
  ------------------
  |  |   71|  6.50k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  888|  6.50k|    assert(ste->ste_annotation_block != NULL);
  ------------------
  |  Branch (888:5): [True: 6.50k, False: 0]
  ------------------
  889|  6.50k|    void *key = (void *)((uintptr_t)ste->ste_id + 1);
  890|  6.50k|    if (codegen_setup_annotations_scope(c, loc, key,
  ------------------
  |  Branch (890:9): [True: 0, False: 6.50k]
  ------------------
  891|  6.50k|                                        ste->ste_annotation_block->ste_name) < 0) {
  892|      0|        goto error;
  893|      0|    }
  894|  6.50k|    if (codegen_deferred_annotations_body(c, loc, deferred_anno,
  ------------------
  |  Branch (894:9): [True: 9, False: 6.49k]
  ------------------
  895|  6.50k|                                          conditional_annotation_indices, scope_type) < 0) {
  896|      9|        _PyCompile_ExitScope(c);
  897|      9|        goto error;
  898|      9|    }
  899|       |
  900|  6.49k|    Py_DECREF(deferred_anno);
  ------------------
  |  |  430|  6.49k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  901|  6.49k|    Py_DECREF(conditional_annotation_indices);
  ------------------
  |  |  430|  6.49k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  902|       |
  903|  6.49k|    RETURN_IF_ERROR(codegen_finish_annotations_scope(c, loc));
  ------------------
  |  |   51|  6.49k|    do {                    \
  |  |   52|  6.49k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 6.49k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  6.49k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 6.49k]
  |  |  ------------------
  ------------------
  904|  6.49k|    RETURN_IF_ERROR(codegen_nameop(
  ------------------
  |  |   51|  6.49k|    do {                    \
  |  |   52|  12.9k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 6.49k]
  |  |  |  Branch (52:14): [True: 5.89k, False: 599]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  6.49k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 6.49k]
  |  |  ------------------
  ------------------
  905|  6.49k|        c, loc,
  906|  6.49k|        ste->ste_type == ClassBlock ? &_Py_ID(__annotate_func__) : &_Py_ID(__annotate__),
  907|  6.49k|        Store));
  908|       |
  909|  6.49k|    if (need_separate_block) {
  ------------------
  |  Branch (909:9): [True: 599, False: 5.89k]
  ------------------
  910|    599|        RETURN_IF_ERROR(_PyCompile_EndAnnotationSetup(c));
  ------------------
  |  |   51|    599|    do {                    \
  |  |   52|    599|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 599]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|    599|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 599]
  |  |  ------------------
  ------------------
  911|    599|    }
  912|       |
  913|  6.49k|    return SUCCESS;
  ------------------
  |  |   47|  6.49k|#define SUCCESS 0
  ------------------
  914|      9|error:
  915|      9|    Py_XDECREF(deferred_anno);
  ------------------
  |  |  524|      9|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|      9|    Py_XDECREF(conditional_annotation_indices);
  ------------------
  |  |  524|      9|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  917|      9|    return ERROR;
  ------------------
  |  |   48|      9|#define ERROR -1
  ------------------
  918|  6.49k|}
codegen.c:codegen_deferred_annotations_body:
  810|  6.50k|{
  811|  6.50k|    Py_ssize_t annotations_len = PyList_GET_SIZE(deferred_anno);
  ------------------
  |  |   38|  6.50k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  812|       |
  813|  6.50k|    assert(PyList_CheckExact(conditional_annotation_indices));
  ------------------
  |  Branch (813:5): [True: 6.50k, False: 0]
  ------------------
  814|  6.50k|    assert(annotations_len == PyList_Size(conditional_annotation_indices));
  ------------------
  |  Branch (814:5): [True: 6.50k, False: 0]
  ------------------
  815|       |
  816|  6.50k|    ADDOP_I(c, loc, BUILD_MAP, 0); // stack now contains <annos>
  ------------------
  |  |  280|  6.50k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  6.50k|    do {                    \
  |  |  |  |   52|  6.50k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 6.50k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  6.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 6.50k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  817|       |
  818|  22.9k|    for (Py_ssize_t i = 0; i < annotations_len; i++) {
  ------------------
  |  Branch (818:28): [True: 16.4k, False: 6.49k]
  ------------------
  819|  16.4k|        PyObject *ptr = PyList_GET_ITEM(deferred_anno, i);
  ------------------
  |  |   40|  16.4k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  16.4k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  16.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (819:25): [True: 16.4k, False: 0]
  ------------------
  820|      0|        stmt_ty st = (stmt_ty)PyLong_AsVoidPtr(ptr);
  821|  16.4k|        if (st == NULL) {
  ------------------
  |  Branch (821:13): [True: 0, False: 16.4k]
  ------------------
  822|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  823|      0|        }
  824|  16.4k|        PyObject *mangled = _PyCompile_Mangle(c, st->v.AnnAssign.target->v.Name.id);
  825|  16.4k|        if (!mangled) {
  ------------------
  |  Branch (825:13): [True: 0, False: 16.4k]
  ------------------
  826|      0|            return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  827|      0|        }
  828|       |        // NOTE: ref of mangled can be leaked on ADDOP* and VISIT macros due to early returns
  829|       |        // fixing would require an overhaul of these macros
  830|       |
  831|  16.4k|        PyObject *cond_index = PyList_GET_ITEM(conditional_annotation_indices, i);
  ------------------
  |  |   40|  16.4k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  16.4k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  16.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (831:32): [True: 16.4k, False: 0]
  ------------------
  832|  16.4k|        assert(PyLong_CheckExact(cond_index));
  ------------------
  |  Branch (832:9): [True: 16.4k, False: 0]
  ------------------
  833|  16.4k|        long idx = PyLong_AS_LONG(cond_index);
  ------------------
  |  |  101|  16.4k|#define PyLong_AS_LONG(op) PyLong_AsLong(op)
  ------------------
  834|  16.4k|        NEW_JUMP_TARGET_LABEL(c, not_set);
  ------------------
  |  |   94|  16.4k|    jump_target_label NAME = _PyInstructionSequence_NewLabel(INSTR_SEQUENCE(C)); \
  |  |  ------------------
  |  |  |  |   68|  16.4k|#define INSTR_SEQUENCE(C) _PyCompile_InstrSequence(C)
  |  |  ------------------
  |  |   95|  16.4k|    if (!IS_JUMP_TARGET_LABEL(NAME)) { \
  |  |  ------------------
  |  |  |  |   60|  16.4k|#define IS_JUMP_TARGET_LABEL(L) (!SAME_JUMP_TARGET_LABEL((L), (NO_LABEL)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   59|  16.4k|#define SAME_JUMP_TARGET_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (95:9): [True: 0, False: 16.4k]
  |  |  ------------------
  |  |   96|      0|        return ERROR; \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   97|      0|    }
  ------------------
  835|       |
  836|  16.4k|        if (idx != -1) {
  ------------------
  |  Branch (836:13): [True: 4.46k, False: 12.0k]
  ------------------
  837|  4.46k|            ADDOP_LOAD_CONST(c, LOC(st), cond_index);
  ------------------
  |  |  311|  4.46k|    RETURN_IF_ERROR(codegen_addop_load_const((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  4.46k|    do {                    \
  |  |  |  |   52|  4.46k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.46k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.46k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  838|  4.46k|            if (scope_type == COMPILE_SCOPE_CLASS) {
  ------------------
  |  Branch (838:17): [True: 819, False: 3.64k]
  ------------------
  839|    819|                ADDOP_NAME(
  ------------------
  |  |  419|    819|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|    819|    do {                    \
  |  |  |  |   52|    819|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 819]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|    819|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 819]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  840|    819|                    c, LOC(st), LOAD_DEREF, &_Py_ID(__conditional_annotations__), freevars);
  841|    819|            }
  842|  3.64k|            else {
  843|  3.64k|                ADDOP_NAME(
  ------------------
  |  |  419|  3.64k|    RETURN_IF_ERROR(codegen_addop_name((C), (LOC), (OP), METADATA(C)->u_ ## TYPE, (O)))
  |  |  ------------------
  |  |  |  |   51|  3.64k|    do {                    \
  |  |  |  |   52|  3.64k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 3.64k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  3.64k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 3.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  844|  3.64k|                    c, LOC(st), LOAD_GLOBAL, &_Py_ID(__conditional_annotations__), names);
  845|  3.64k|            }
  846|       |
  847|  4.46k|            ADDOP_I(c, LOC(st), CONTAINS_OP, 0);
  ------------------
  |  |  280|  4.46k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  4.46k|    do {                    \
  |  |  |  |   52|  4.46k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.46k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.46k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  848|  4.46k|            ADDOP_JUMP(c, LOC(st), POP_JUMP_IF_FALSE, not_set);
  ------------------
  |  |  435|  4.46k|    RETURN_IF_ERROR(codegen_addop_j(INSTR_SEQUENCE(C), (LOC), (OP), (O)))
  |  |  ------------------
  |  |  |  |   51|  4.46k|    do {                    \
  |  |  |  |   52|  4.46k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 4.46k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  4.46k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 4.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|  4.46k|        }
  850|       |
  851|  16.4k|        VISIT(c, expr, st->v.AnnAssign.annotation);
  ------------------
  |  |  460|  16.4k|    RETURN_IF_ERROR(codegen_visit_ ## TYPE((C), (V)))
  |  |  ------------------
  |  |  |  |   51|  16.4k|    do {                    \
  |  |  |  |   52|  16.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 9, False: 16.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      9|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      9|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      9|        }                   \
  |  |  |  |   55|  16.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  852|  16.4k|        ADDOP_I(c, LOC(st), COPY, 2);
  ------------------
  |  |  280|  16.4k|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  16.4k|    do {                    \
  |  |  |  |   52|  16.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  853|  16.4k|        ADDOP_LOAD_CONST_NEW(c, LOC(st), mangled);
  ------------------
  |  |  329|  16.4k|    RETURN_IF_ERROR(codegen_addop_load_const_new((C), (LOC), (O)))
  |  |  ------------------
  |  |  |  |   51|  16.4k|    do {                    \
  |  |  |  |   52|  16.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  854|       |        // stack now contains <annos> <name> <annos> <value>
  855|  16.4k|        ADDOP(c, loc, STORE_SUBSCR);
  ------------------
  |  |  294|  16.4k|    RETURN_IF_ERROR(codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  16.4k|    do {                    \
  |  |  |  |   52|  16.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  856|       |        // stack now contains <annos>
  857|       |
  858|  16.4k|        USE_LABEL(c, not_set);
  ------------------
  |  |  100|  16.4k|    RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(INSTR_SEQUENCE(C), (LBL).id))
  |  |  ------------------
  |  |  |  |   51|  16.4k|    do {                    \
  |  |  |  |   52|  16.4k|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 16.4k]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  16.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 16.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|  16.4k|    }
  860|  6.49k|    return SUCCESS;
  ------------------
  |  |   47|  6.49k|#define SUCCESS 0
  ------------------
  861|  6.50k|}
codegen.c:codegen_enter_scope:
  691|  53.3k|{
  692|  53.3k|    RETURN_IF_ERROR(
  ------------------
  |  |   51|  53.3k|    do {                    \
  |  |   52|  53.3k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (52:13): [True: 0, False: 53.3k]
  |  |  ------------------
  |  |   53|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   54|      0|        }                   \
  |  |   55|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (55:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  693|  53.3k|        _PyCompile_EnterScope(c, name, scope_type, key, lineno, private, umd));
  694|  53.3k|    RETURN_IF_ERROR_IN_SCOPE(c, _PyCompile_SetQualname(c));
  ------------------
  |  |   58|  53.3k|    do {                                    \
  |  |   59|  53.3k|        if ((CALL) < 0) {                   \
  |  |  ------------------
  |  |  |  Branch (59:13): [True: 0, False: 53.3k]
  |  |  ------------------
  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |   61|      0|            return ERROR;                   \
  |  |  ------------------
  |  |  |  |   48|      0|#define ERROR -1
  |  |  ------------------
  |  |   62|      0|        }                                   \
  |  |   63|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (63:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  695|  53.3k|    location loc = LOCATION(lineno, lineno, 0, 0);
  ------------------
  |  |   86|  53.3k|    ((const _Py_SourceLocation){(LNO), (END_LNO), (COL), (END_COL)})
  ------------------
  696|  53.3k|    if (scope_type == COMPILE_SCOPE_MODULE) {
  ------------------
  |  Branch (696:9): [True: 10.5k, False: 42.8k]
  ------------------
  697|  10.5k|        loc.lineno = 0;
  698|  10.5k|    }
  699|       |    /* Add the generator prefix instructions. */
  700|       |
  701|  53.3k|    PySTEntryObject *ste = SYMTABLE_ENTRY(c);
  ------------------
  |  |   71|  53.3k|#define SYMTABLE_ENTRY(C) _PyCompile_SymtableEntry(C)
  ------------------
  702|  53.3k|    if (ste->ste_coroutine || ste->ste_generator) {
  ------------------
  |  Branch (702:9): [True: 2.64k, False: 50.7k]
  |  Branch (702:31): [True: 501, False: 50.2k]
  ------------------
  703|       |        /* Note that RETURN_GENERATOR + POP_TOP have a net stack effect
  704|       |         * of 0. This is because RETURN_GENERATOR pushes the generator
  705|       |         before returning. */
  706|  3.14k|        location loc = LOCATION(lineno, lineno, -1, -1);
  ------------------
  |  |   86|  3.14k|    ((const _Py_SourceLocation){(LNO), (END_LNO), (COL), (END_COL)})
  ------------------
  707|  3.14k|        ADDOP_IN_SCOPE(c, loc, RETURN_GENERATOR);
  ------------------
  |  |  297|  3.14k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  3.14k|    do {                                    \
  |  |  |  |   59|  3.14k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 3.14k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  3.14k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 3.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  708|  3.14k|        ADDOP_IN_SCOPE(c, loc, POP_TOP);
  ------------------
  |  |  297|  3.14k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  3.14k|    do {                                    \
  |  |  |  |   59|  3.14k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 3.14k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  3.14k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 3.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  709|  3.14k|    }
  710|       |
  711|  53.3k|    ADDOP_I_IN_SCOPE(c, loc, RESUME, RESUME_AT_FUNC_START);
  ------------------
  |  |  283|  53.3k|    RETURN_IF_ERROR_IN_SCOPE(C, codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  53.3k|    do {                                    \
  |  |  |  |   59|  53.3k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 53.3k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  53.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 53.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  712|  53.3k|    if (scope_type == COMPILE_SCOPE_MODULE) {
  ------------------
  |  Branch (712:9): [True: 10.5k, False: 42.8k]
  ------------------
  713|  10.5k|        ADDOP_IN_SCOPE(c, loc, ANNOTATIONS_PLACEHOLDER);
  ------------------
  |  |  297|  10.5k|    RETURN_IF_ERROR_IN_SCOPE((C), codegen_addop_noarg(INSTR_SEQUENCE(C), (OP), (LOC)))
  |  |  ------------------
  |  |  |  |   58|  10.5k|    do {                                    \
  |  |  |  |   59|  10.5k|        if ((CALL) < 0) {                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:13): [True: 0, False: 10.5k]
  |  |  |  |  ------------------
  |  |  |  |   60|      0|            _PyCompile_ExitScope((C));      \
  |  |  |  |   61|      0|            return ERROR;                   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   62|      0|        }                                   \
  |  |  |  |   63|  10.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (63:14): [Folded, False: 10.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|  10.5k|    }
  715|  53.3k|    return SUCCESS;
  ------------------
  |  |   47|  53.3k|#define SUCCESS 0
  ------------------
  716|  53.3k|}
codegen.c:codegen_visit_expr:
 5637|  2.43M|{
 5638|       |    return codegen_visit_expr_impl(c, e, false);
 5639|  2.43M|}
codegen.c:codegen_addop_load_const:
  301|  1.27M|{
  302|  1.27M|    Py_ssize_t arg = _PyCompile_AddConst(c, o);
  303|  1.27M|    if (arg < 0) {
  ------------------
  |  Branch (303:9): [True: 0, False: 1.27M]
  ------------------
  304|      0|        return ERROR;
  ------------------
  |  |   48|      0|#define ERROR -1
  ------------------
  305|      0|    }
  306|  1.27M|    ADDOP_I(c, loc, LOAD_CONST, arg);
  ------------------
  |  |  280|  1.27M|    RETURN_IF_ERROR(codegen_addop_i(INSTR_SEQUENCE(C), (OP), (O), (LOC)))
  |  |  ------------------
  |  |  |  |   51|  1.27M|    do {                    \
  |  |  |  |   52|  1.27M|        if ((X) == -1) {    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:13): [True: 0, False: 1.27M]
  |  |  |  |  ------------------
  |  |  |  |   53|      0|            return ERROR;   \
  |  |  |  |  ------------------
  |  |  |  |  |  |   48|      0|#define ERROR -1
  |  |  |  |  ------------------
  |  |  |  |   54|      0|        }                   \
  |  |  |  |   55|  1.27M|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:14): [Folded, False: 1.27M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  307|  1.27M|    return SUCCESS;
  ------------------
  |  |   47|  1.27M|#define SUCCESS 0
  ------------------
  308|  1.27M|}
codegen.c:codegen_addop_noarg:
  287|   996k|{
  288|   996k|    assert(!OPCODE_HAS_ARG(opcode));
  ------------------
  |  Branch (288:5): [True: 996k, False: 0]
  ------------------
  289|   996k|    assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (289:5): [True: 0, False: 996k]
  |  Branch (289:5): [True: 0, False: 996k]
  |  Branch (289:5): [True: 0, False: 996k]
  ------------------
  290|   996k|    return _PyInstructionSequence_Addop(seq, opcode, 0, loc);
  291|   996k|}

_PyCompile_MaybeAddStaticAttributeToClass:
  211|  13.4k|{
  212|  13.4k|    assert(e->kind == Attribute_kind);
  ------------------
  |  Branch (212:5): [True: 13.4k, False: 0]
  ------------------
  213|  13.4k|    expr_ty attr_value = e->v.Attribute.value;
  214|  13.4k|    if (attr_value->kind != Name_kind ||
  ------------------
  |  Branch (214:9): [True: 5.25k, False: 8.17k]
  ------------------
  215|  8.17k|        e->v.Attribute.ctx != Store ||
  ------------------
  |  Branch (215:9): [True: 7.37k, False: 793]
  ------------------
  216|    793|        !_PyUnicode_EqualToASCIIString(attr_value->v.Name.id, "self"))
  ------------------
  |  Branch (216:9): [True: 629, False: 164]
  ------------------
  217|  13.2k|    {
  218|  13.2k|        return SUCCESS;
  ------------------
  |  |   36|  13.2k|#define SUCCESS 0
  ------------------
  219|  13.2k|    }
  220|    164|    Py_ssize_t stack_size = PyList_GET_SIZE(c->c_stack);
  ------------------
  |  |   38|    164|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    164|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    164|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|    321|    for (Py_ssize_t i = stack_size - 1; i >= 0; i--) {
  ------------------
  |  Branch (221:41): [True: 157, False: 164]
  ------------------
  222|    157|        PyObject *capsule = PyList_GET_ITEM(c->c_stack, i);
  ------------------
  |  |   40|    157|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|    157|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    157|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (222:29): [True: 157, False: 0]
  ------------------
  223|      0|        struct compiler_unit *u = (struct compiler_unit *)PyCapsule_GetPointer(
  224|    157|                                                              capsule, CAPSULE_NAME);
  ------------------
  |  |  207|    157|#define CAPSULE_NAME "compile.c compiler unit"
  ------------------
  225|    157|        assert(u);
  ------------------
  |  Branch (225:9): [True: 157, False: 0]
  ------------------
  226|    157|        if (u->u_scope_type == COMPILE_SCOPE_CLASS) {
  ------------------
  |  Branch (226:13): [True: 0, False: 157]
  ------------------
  227|      0|            assert(u->u_static_attributes);
  ------------------
  |  Branch (227:13): [True: 0, False: 0]
  ------------------
  228|      0|            RETURN_IF_ERROR(PySet_Add(u->u_static_attributes, e->v.Attribute.attr));
  ------------------
  |  |   40|      0|    do {                    \
  |  |   41|      0|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  229|      0|            break;
  230|      0|        }
  231|    157|    }
  232|    164|    return SUCCESS;
  ------------------
  |  |   36|    164|#define SUCCESS 0
  ------------------
  233|    164|}
_PyCompile_SetQualname:
  237|  53.3k|{
  238|  53.3k|    Py_ssize_t stack_size;
  239|  53.3k|    struct compiler_unit *u = c->u;
  240|  53.3k|    PyObject *name, *base;
  241|       |
  242|  53.3k|    if (u->u_scope_type == COMPILE_SCOPE_MODULE) {
  ------------------
  |  Branch (242:9): [True: 10.5k, False: 42.8k]
  ------------------
  243|  10.5k|        return SUCCESS;
  ------------------
  |  |   36|  10.5k|#define SUCCESS 0
  ------------------
  244|  10.5k|    }
  245|       |
  246|  42.8k|    base = NULL;
  247|  42.8k|    stack_size = PyList_GET_SIZE(c->c_stack);
  ------------------
  |  |   38|  42.8k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|  42.8k|    assert(stack_size >= 1);
  ------------------
  |  Branch (248:5): [True: 42.8k, False: 0]
  ------------------
  249|  42.8k|    if (stack_size > 1) {
  ------------------
  |  Branch (249:9): [True: 18.1k, False: 24.6k]
  ------------------
  250|  18.1k|        int scope, force_global = 0;
  251|  18.1k|        struct compiler_unit *parent;
  252|  18.1k|        PyObject *mangled, *capsule;
  253|       |
  254|  18.1k|        capsule = PyList_GET_ITEM(c->c_stack, stack_size - 1);
  ------------------
  |  |   40|  18.1k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  18.1k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (254:19): [True: 18.1k, False: 0]
  ------------------
  255|  18.1k|        parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, CAPSULE_NAME);
  ------------------
  |  |  207|  18.1k|#define CAPSULE_NAME "compile.c compiler unit"
  ------------------
  256|  18.1k|        assert(parent);
  ------------------
  |  Branch (256:9): [True: 18.1k, False: 0]
  ------------------
  257|  18.1k|        if (parent->u_scope_type == COMPILE_SCOPE_ANNOTATIONS) {
  ------------------
  |  Branch (257:13): [True: 7.96k, False: 10.2k]
  ------------------
  258|       |            /* The parent is an annotation scope, so we need to
  259|       |               look at the grandparent. */
  260|  7.96k|            if (stack_size == 2) {
  ------------------
  |  Branch (260:17): [True: 6.65k, False: 1.31k]
  ------------------
  261|       |                // If we're immediately within the module, we can skip
  262|       |                // the rest and just set the qualname to be the same as name.
  263|  6.65k|                u->u_metadata.u_qualname = Py_NewRef(u->u_metadata.u_name);
  ------------------
  |  |  550|  6.65k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  6.65k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.65k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|  6.65k|                return SUCCESS;
  ------------------
  |  |   36|  6.65k|#define SUCCESS 0
  ------------------
  265|  6.65k|            }
  266|  1.31k|            capsule = PyList_GET_ITEM(c->c_stack, stack_size - 2);
  ------------------
  |  |   40|  1.31k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  1.31k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.31k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (266:23): [True: 1.31k, False: 0]
  ------------------
  267|  1.31k|            parent = (struct compiler_unit *)PyCapsule_GetPointer(capsule, CAPSULE_NAME);
  ------------------
  |  |  207|  1.31k|#define CAPSULE_NAME "compile.c compiler unit"
  ------------------
  268|  1.31k|            assert(parent);
  ------------------
  |  Branch (268:13): [True: 1.31k, False: 0]
  ------------------
  269|  1.31k|        }
  270|       |
  271|  11.5k|        if (u->u_scope_type == COMPILE_SCOPE_FUNCTION
  ------------------
  |  Branch (271:13): [True: 1, False: 11.5k]
  ------------------
  272|  11.5k|            || u->u_scope_type == COMPILE_SCOPE_ASYNC_FUNCTION
  ------------------
  |  Branch (272:16): [True: 0, False: 11.5k]
  ------------------
  273|  11.5k|            || u->u_scope_type == COMPILE_SCOPE_CLASS) {
  ------------------
  |  Branch (273:16): [True: 888, False: 10.6k]
  ------------------
  274|    889|            assert(u->u_metadata.u_name);
  ------------------
  |  Branch (274:13): [True: 889, False: 0]
  ------------------
  275|    889|            mangled = _Py_Mangle(parent->u_private, u->u_metadata.u_name);
  276|    889|            if (!mangled) {
  ------------------
  |  Branch (276:17): [True: 0, False: 889]
  ------------------
  277|      0|                return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  278|      0|            }
  279|       |
  280|    889|            scope = _PyST_GetScope(parent->u_ste, mangled);
  281|    889|            Py_DECREF(mangled);
  ------------------
  |  |  430|    889|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    889|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    889|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|    889|            RETURN_IF_ERROR(scope);
  ------------------
  |  |   40|    889|    do {                    \
  |  |   41|    889|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 889]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|    889|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 889]
  |  |  ------------------
  ------------------
  283|    889|            assert(scope != GLOBAL_IMPLICIT);
  ------------------
  |  Branch (283:13): [True: 889, False: 0]
  ------------------
  284|    889|            if (scope == GLOBAL_EXPLICIT)
  ------------------
  |  |  192|    889|#define GLOBAL_EXPLICIT 2
  ------------------
  |  Branch (284:17): [True: 0, False: 889]
  ------------------
  285|      0|                force_global = 1;
  286|    889|        }
  287|       |
  288|  11.5k|        if (!force_global) {
  ------------------
  |  Branch (288:13): [True: 11.5k, False: 0]
  ------------------
  289|  11.5k|            if (parent->u_scope_type == COMPILE_SCOPE_FUNCTION
  ------------------
  |  Branch (289:17): [True: 27, False: 11.4k]
  ------------------
  290|  11.4k|                || parent->u_scope_type == COMPILE_SCOPE_ASYNC_FUNCTION
  ------------------
  |  Branch (290:20): [True: 1.71k, False: 9.78k]
  ------------------
  291|  9.78k|                || parent->u_scope_type == COMPILE_SCOPE_LAMBDA)
  ------------------
  |  Branch (291:20): [True: 3.28k, False: 6.49k]
  ------------------
  292|  5.03k|            {
  293|  5.03k|                _Py_DECLARE_STR(dot_locals, ".<locals>");
  294|  5.03k|                base = PyUnicode_Concat(parent->u_metadata.u_qualname,
  295|  5.03k|                                        &_Py_STR(dot_locals));
  ------------------
  |  |  938|  5.03k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  5.03k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  5.03k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|  5.03k|                if (base == NULL) {
  ------------------
  |  Branch (296:21): [True: 0, False: 5.03k]
  ------------------
  297|      0|                    return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  298|      0|                }
  299|  5.03k|            }
  300|  6.49k|            else {
  301|  6.49k|                base = Py_NewRef(parent->u_metadata.u_qualname);
  ------------------
  |  |  550|  6.49k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  6.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|  6.49k|            }
  303|  11.5k|        }
  304|  11.5k|        if (u->u_ste->ste_function_name != NULL) {
  ------------------
  |  Branch (304:13): [True: 1, False: 11.5k]
  ------------------
  305|      1|            PyObject *tmp = base;
  306|      1|            base = PyUnicode_FromFormat("%U.%U",
  307|      1|                base,
  308|      1|                u->u_ste->ste_function_name);
  309|      1|            Py_DECREF(tmp);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|      1|            if (base == NULL) {
  ------------------
  |  Branch (310:17): [True: 0, False: 1]
  ------------------
  311|      0|                return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  312|      0|            }
  313|      1|        }
  314|  11.5k|    }
  315|  24.6k|    else if (u->u_ste->ste_function_name != NULL) {
  ------------------
  |  Branch (315:14): [True: 3.45k, False: 21.1k]
  ------------------
  316|  3.45k|        base = Py_NewRef(u->u_ste->ste_function_name);
  ------------------
  |  |  550|  3.45k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  3.45k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.45k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  3.45k|    }
  318|       |
  319|  36.1k|    if (base != NULL) {
  ------------------
  |  Branch (319:9): [True: 14.9k, False: 21.1k]
  ------------------
  320|  14.9k|        name = PyUnicode_Concat(base, _Py_LATIN1_CHR('.'));
  ------------------
  |  |  940|  14.9k|    ((CH) < 128 \
  |  |  ------------------
  |  |  |  Branch (940:6): [True: 14.9k, Folded]
  |  |  ------------------
  |  |  941|  14.9k|     ? (PyObject*)&_Py_SINGLETON(strings).ascii[(CH)] \
  |  |  ------------------
  |  |  |  |   18|  14.9k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  14.9k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  942|  14.9k|     : (PyObject*)&_Py_SINGLETON(strings).latin1[(CH) - 128])
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|  14.9k|        Py_DECREF(base);
  ------------------
  |  |  430|  14.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  14.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  14.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|  14.9k|        if (name == NULL) {
  ------------------
  |  Branch (322:13): [True: 0, False: 14.9k]
  ------------------
  323|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  324|      0|        }
  325|  14.9k|        PyUnicode_Append(&name, u->u_metadata.u_name);
  326|  14.9k|        if (name == NULL) {
  ------------------
  |  Branch (326:13): [True: 0, False: 14.9k]
  ------------------
  327|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  328|      0|        }
  329|  14.9k|    }
  330|  21.1k|    else {
  331|  21.1k|        name = Py_NewRef(u->u_metadata.u_name);
  ------------------
  |  |  550|  21.1k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  21.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  21.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  21.1k|    }
  333|  36.1k|    u->u_metadata.u_qualname = name;
  334|       |
  335|  36.1k|    return SUCCESS;
  ------------------
  |  |   36|  36.1k|#define SUCCESS 0
  ------------------
  336|  36.1k|}
_PyCompile_DictAddObj:
  461|  1.90M|{
  462|  1.90M|    PyObject *v;
  463|  1.90M|    Py_ssize_t arg;
  464|       |
  465|  1.90M|    if (PyDict_GetItemRef(dict, o, &v) < 0) {
  ------------------
  |  Branch (465:9): [True: 0, False: 1.90M]
  ------------------
  466|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  467|      0|    }
  468|  1.90M|    if (!v) {
  ------------------
  |  Branch (468:9): [True: 552k, False: 1.35M]
  ------------------
  469|   552k|        arg = PyDict_GET_SIZE(dict);
  ------------------
  |  |   63|   552k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   552k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   552k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|   552k|        v = PyLong_FromSsize_t(arg);
  471|   552k|        if (!v) {
  ------------------
  |  Branch (471:13): [True: 0, False: 552k]
  ------------------
  472|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  473|      0|        }
  474|   552k|        if (PyDict_SetItem(dict, o, v) < 0) {
  ------------------
  |  Branch (474:13): [True: 0, False: 552k]
  ------------------
  475|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  477|      0|        }
  478|   552k|    }
  479|  1.35M|    else
  480|  1.35M|        arg = PyLong_AsLong(v);
  481|  1.90M|    Py_DECREF(v);
  ------------------
  |  |  430|  1.90M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.90M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.90M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  482|  1.90M|    return arg;
  483|  1.90M|}
_PyCompile_AddConst:
  487|  1.27M|{
  488|  1.27M|    PyObject *key = merge_consts_recursive(c->c_const_cache, o);
  489|  1.27M|    if (key == NULL) {
  ------------------
  |  Branch (489:9): [True: 0, False: 1.27M]
  ------------------
  490|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  491|      0|    }
  492|       |
  493|  1.27M|    Py_ssize_t arg = _PyCompile_DictAddObj(c->u->u_metadata.u_consts, key);
  494|  1.27M|    Py_DECREF(key);
  ------------------
  |  |  430|  1.27M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.27M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.27M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  1.27M|    return arg;
  496|  1.27M|}
_PyCompile_EnterScope:
  671|  53.3k|{
  672|  53.3k|    struct compiler_unit *u;
  673|  53.3k|    u = (struct compiler_unit *)PyMem_Calloc(1, sizeof(struct compiler_unit));
  674|  53.3k|    if (!u) {
  ------------------
  |  Branch (674:9): [True: 0, False: 53.3k]
  ------------------
  675|      0|        PyErr_NoMemory();
  676|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  677|      0|    }
  678|  53.3k|    u->u_scope_type = scope_type;
  679|  53.3k|    if (umd != NULL) {
  ------------------
  |  Branch (679:9): [True: 27.0k, False: 26.3k]
  ------------------
  680|  27.0k|        u->u_metadata = *umd;
  681|  27.0k|    }
  682|  26.3k|    else {
  683|  26.3k|        u->u_metadata.u_argcount = 0;
  684|  26.3k|        u->u_metadata.u_posonlyargcount = 0;
  685|  26.3k|        u->u_metadata.u_kwonlyargcount = 0;
  686|  26.3k|    }
  687|  53.3k|    u->u_ste = _PySymtable_Lookup(c->c_st, key);
  688|  53.3k|    if (!u->u_ste) {
  ------------------
  |  Branch (688:9): [True: 0, False: 53.3k]
  ------------------
  689|      0|        compiler_unit_free(u);
  690|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  691|      0|    }
  692|  53.3k|    u->u_metadata.u_name = Py_NewRef(name);
  ------------------
  |  |  550|  53.3k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  693|  53.3k|    u->u_metadata.u_varnames = list2dict(u->u_ste->ste_varnames);
  694|  53.3k|    if (!u->u_metadata.u_varnames) {
  ------------------
  |  Branch (694:9): [True: 0, False: 53.3k]
  ------------------
  695|      0|        compiler_unit_free(u);
  696|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  697|      0|    }
  698|  53.3k|    u->u_metadata.u_cellvars = compiler_cellvars(u->u_ste);
  699|  53.3k|    if (!u->u_metadata.u_cellvars) {
  ------------------
  |  Branch (699:9): [True: 0, False: 53.3k]
  ------------------
  700|      0|        compiler_unit_free(u);
  701|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  702|      0|    }
  703|  53.3k|    if (u->u_ste->ste_needs_class_closure) {
  ------------------
  |  Branch (703:9): [True: 25, False: 53.3k]
  ------------------
  704|       |        /* Cook up an implicit __class__ cell. */
  705|     25|        Py_ssize_t res;
  706|     25|        assert(u->u_scope_type == COMPILE_SCOPE_CLASS);
  ------------------
  |  Branch (706:9): [True: 25, False: 0]
  ------------------
  707|     25|        res = _PyCompile_DictAddObj(u->u_metadata.u_cellvars, &_Py_ID(__class__));
  ------------------
  |  |  936|     25|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     25|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     25|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  708|     25|        if (res < 0) {
  ------------------
  |  Branch (708:13): [True: 0, False: 25]
  ------------------
  709|      0|            compiler_unit_free(u);
  710|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  711|      0|        }
  712|     25|    }
  713|  53.3k|    if (u->u_ste->ste_needs_classdict) {
  ------------------
  |  Branch (713:9): [True: 6.06k, False: 47.3k]
  ------------------
  714|       |        /* Cook up an implicit __classdict__ cell. */
  715|  6.06k|        Py_ssize_t res;
  716|  6.06k|        assert(u->u_scope_type == COMPILE_SCOPE_CLASS);
  ------------------
  |  Branch (716:9): [True: 6.06k, False: 0]
  ------------------
  717|  6.06k|        res = _PyCompile_DictAddObj(u->u_metadata.u_cellvars, &_Py_ID(__classdict__));
  ------------------
  |  |  936|  6.06k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  6.06k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  6.06k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  718|  6.06k|        if (res < 0) {
  ------------------
  |  Branch (718:13): [True: 0, False: 6.06k]
  ------------------
  719|      0|            compiler_unit_free(u);
  720|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  721|      0|        }
  722|  6.06k|    }
  723|  53.3k|    if (u->u_ste->ste_has_conditional_annotations) {
  ------------------
  |  Branch (723:9): [True: 2.90k, False: 50.4k]
  ------------------
  724|       |        /* Cook up an implicit __conditional_annotations__ cell */
  725|  2.90k|        Py_ssize_t res;
  726|  2.90k|        assert(u->u_scope_type == COMPILE_SCOPE_CLASS || u->u_scope_type == COMPILE_SCOPE_MODULE);
  ------------------
  |  Branch (726:9): [True: 873, False: 2.03k]
  |  Branch (726:9): [True: 2.03k, False: 0]
  ------------------
  727|  2.90k|        res = _PyCompile_DictAddObj(u->u_metadata.u_cellvars, &_Py_ID(__conditional_annotations__));
  ------------------
  |  |  936|  2.90k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  2.90k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.90k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  728|  2.90k|        if (res < 0) {
  ------------------
  |  Branch (728:13): [True: 0, False: 2.90k]
  ------------------
  729|      0|            compiler_unit_free(u);
  730|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  731|      0|        }
  732|  2.90k|    }
  733|       |
  734|  53.3k|    u->u_metadata.u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS,
  ------------------
  |  |  194|  53.3k|#define FREE 4
  ------------------
                  u->u_metadata.u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS,
  ------------------
  |  |  175|  53.3k|#define DEF_FREE_CLASS (2<<5)    /* free variable from class's method */
  ------------------
  735|  53.3k|                               PyDict_GET_SIZE(u->u_metadata.u_cellvars));
  ------------------
  |  |   63|  53.3k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  736|  53.3k|    if (!u->u_metadata.u_freevars) {
  ------------------
  |  Branch (736:9): [True: 0, False: 53.3k]
  ------------------
  737|      0|        compiler_unit_free(u);
  738|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  739|      0|    }
  740|       |
  741|  53.3k|    if (scope_type == COMPILE_SCOPE_MODULE || scope_type == COMPILE_SCOPE_CLASS) {
  ------------------
  |  Branch (741:9): [True: 10.5k, False: 42.8k]
  |  Branch (741:47): [True: 13.0k, False: 29.7k]
  ------------------
  742|  23.6k|        u->u_metadata.u_fasthidden = PySet_New(NULL);
  743|  23.6k|        if (!u->u_metadata.u_fasthidden) {
  ------------------
  |  Branch (743:13): [True: 0, False: 23.6k]
  ------------------
  744|      0|            compiler_unit_free(u);
  745|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  746|      0|        }
  747|  23.6k|    }
  748|  29.7k|    else {
  749|  29.7k|        u->u_metadata.u_fasthidden = NULL;
  750|  29.7k|    }
  751|       |
  752|  53.3k|    u->u_nfblocks = 0;
  753|  53.3k|    u->u_metadata.u_firstlineno = lineno;
  754|  53.3k|    u->u_metadata.u_consts = PyDict_New();
  755|  53.3k|    if (!u->u_metadata.u_consts) {
  ------------------
  |  Branch (755:9): [True: 0, False: 53.3k]
  ------------------
  756|      0|        compiler_unit_free(u);
  757|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  758|      0|    }
  759|  53.3k|    u->u_metadata.u_names = PyDict_New();
  760|  53.3k|    if (!u->u_metadata.u_names) {
  ------------------
  |  Branch (760:9): [True: 0, False: 53.3k]
  ------------------
  761|      0|        compiler_unit_free(u);
  762|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  763|      0|    }
  764|       |
  765|  53.3k|    u->u_deferred_annotations = NULL;
  766|  53.3k|    u->u_conditional_annotation_indices = NULL;
  767|  53.3k|    u->u_next_conditional_annotation_index = 0;
  768|  53.3k|    if (scope_type == COMPILE_SCOPE_CLASS) {
  ------------------
  |  Branch (768:9): [True: 13.0k, False: 40.3k]
  ------------------
  769|  13.0k|        u->u_static_attributes = PySet_New(0);
  770|  13.0k|        if (!u->u_static_attributes) {
  ------------------
  |  Branch (770:13): [True: 0, False: 13.0k]
  ------------------
  771|      0|            compiler_unit_free(u);
  772|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  773|      0|        }
  774|  13.0k|    }
  775|  40.3k|    else {
  776|  40.3k|        u->u_static_attributes = NULL;
  777|  40.3k|    }
  778|       |
  779|  53.3k|    u->u_instr_sequence = (instr_sequence*)_PyInstructionSequence_New();
  780|  53.3k|    if (!u->u_instr_sequence) {
  ------------------
  |  Branch (780:9): [True: 0, False: 53.3k]
  ------------------
  781|      0|        compiler_unit_free(u);
  782|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  783|      0|    }
  784|  53.3k|    u->u_stashed_instr_sequence = NULL;
  785|       |
  786|       |    /* Push the old compiler_unit on the stack. */
  787|  53.3k|    if (c->u) {
  ------------------
  |  Branch (787:9): [True: 42.8k, False: 10.5k]
  ------------------
  788|  42.8k|        PyObject *capsule = PyCapsule_New(c->u, CAPSULE_NAME, NULL);
  ------------------
  |  |  207|  42.8k|#define CAPSULE_NAME "compile.c compiler unit"
  ------------------
  789|  42.8k|        if (!capsule || PyList_Append(c->c_stack, capsule) < 0) {
  ------------------
  |  Branch (789:13): [True: 0, False: 42.8k]
  |  Branch (789:25): [True: 0, False: 42.8k]
  ------------------
  790|      0|            Py_XDECREF(capsule);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  791|      0|            compiler_unit_free(u);
  792|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  793|      0|        }
  794|  42.8k|        Py_DECREF(capsule);
  ------------------
  |  |  430|  42.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|  42.8k|        if (private == NULL) {
  ------------------
  |  Branch (795:13): [True: 27.0k, False: 15.7k]
  ------------------
  796|  27.0k|            private = c->u->u_private;
  797|  27.0k|        }
  798|  42.8k|    }
  799|       |
  800|  53.3k|    u->u_private = Py_XNewRef(private);
  ------------------
  |  |  551|  53.3k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  801|       |
  802|  53.3k|    c->u = u;
  803|  53.3k|    return SUCCESS;
  ------------------
  |  |   36|  53.3k|#define SUCCESS 0
  ------------------
  804|  53.3k|}
_PyCompile_ExitScope:
  808|  53.3k|{
  809|       |    // Don't call PySequence_DelItem() with an exception raised
  810|  53.3k|    PyObject *exc = PyErr_GetRaisedException();
  811|       |
  812|  53.3k|    instr_sequence *nested_seq = NULL;
  813|  53.3k|    if (c->c_save_nested_seqs) {
  ------------------
  |  Branch (813:9): [True: 0, False: 53.3k]
  ------------------
  814|      0|        nested_seq = c->u->u_instr_sequence;
  815|      0|        Py_INCREF(nested_seq);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|      0|    }
  817|  53.3k|    compiler_unit_free(c->u);
  818|       |    /* Restore c->u to the parent unit. */
  819|  53.3k|    Py_ssize_t n = PyList_GET_SIZE(c->c_stack) - 1;
  ------------------
  |  |   38|  53.3k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  820|  53.3k|    if (n >= 0) {
  ------------------
  |  Branch (820:9): [True: 42.8k, False: 10.5k]
  ------------------
  821|  42.8k|        PyObject *capsule = PyList_GET_ITEM(c->c_stack, n);
  ------------------
  |  |   40|  42.8k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  42.8k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (821:29): [True: 42.8k, False: 0]
  ------------------
  822|  42.8k|        c->u = (struct compiler_unit *)PyCapsule_GetPointer(capsule, CAPSULE_NAME);
  ------------------
  |  |  207|  42.8k|#define CAPSULE_NAME "compile.c compiler unit"
  ------------------
  823|  42.8k|        assert(c->u);
  ------------------
  |  Branch (823:9): [True: 42.8k, False: 0]
  ------------------
  824|       |        /* we are deleting from a list so this really shouldn't fail */
  825|  42.8k|        if (PySequence_DelItem(c->c_stack, n) < 0) {
  ------------------
  |  Branch (825:13): [True: 0, False: 42.8k]
  ------------------
  826|      0|            PyErr_FormatUnraisable("Exception ignored while removing "
  827|      0|                                   "the last compiler stack item");
  828|      0|        }
  829|  42.8k|        if (nested_seq != NULL) {
  ------------------
  |  Branch (829:13): [True: 0, False: 42.8k]
  ------------------
  830|      0|            if (_PyInstructionSequence_AddNested(c->u->u_instr_sequence, nested_seq) < 0) {
  ------------------
  |  Branch (830:17): [True: 0, False: 0]
  ------------------
  831|      0|                PyErr_FormatUnraisable("Exception ignored while appending "
  832|      0|                                       "nested instruction sequence");
  833|      0|            }
  834|      0|        }
  835|  42.8k|    }
  836|  10.5k|    else {
  837|  10.5k|        c->u = NULL;
  838|  10.5k|    }
  839|  53.3k|    Py_XDECREF(nested_seq);
  ------------------
  |  |  524|  53.3k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  840|       |
  841|  53.3k|    PyErr_SetRaisedException(exc);
  842|  53.3k|}
_PyCompile_PushFBlock:
  852|  34.7k|{
  853|  34.7k|    fblockinfo *f;
  854|  34.7k|    if (c->u->u_nfblocks >= CO_MAXBLOCKS) {
  ------------------
  |  |  164|  34.7k|#define CO_MAXBLOCKS 21 /* Max static block nesting within a function */
  ------------------
  |  Branch (854:9): [True: 7, False: 34.7k]
  ------------------
  855|      7|        return _PyCompile_Error(c, loc, "too many statically nested blocks");
  856|      7|    }
  857|  34.7k|    f = &c->u->u_fblock[c->u->u_nfblocks++];
  858|  34.7k|    f->fb_type = t;
  859|  34.7k|    f->fb_block = block_label;
  860|  34.7k|    f->fb_loc = loc;
  861|  34.7k|    f->fb_exit = exit;
  862|  34.7k|    f->fb_datum = datum;
  863|  34.7k|    if (t == COMPILE_FBLOCK_FINALLY_END) {
  ------------------
  |  Branch (863:9): [True: 2.14k, False: 32.5k]
  ------------------
  864|  2.14k|        c->c_disable_warning++;
  865|  2.14k|    }
  866|  34.7k|    return SUCCESS;
  ------------------
  |  |   36|  34.7k|#define SUCCESS 0
  ------------------
  867|  34.7k|}
_PyCompile_PopFBlock:
  871|  34.4k|{
  872|  34.4k|    struct compiler_unit *u = c->u;
  873|  34.4k|    assert(u->u_nfblocks > 0);
  ------------------
  |  Branch (873:5): [True: 34.4k, False: 0]
  ------------------
  874|  34.4k|    u->u_nfblocks--;
  875|  34.4k|    assert(u->u_fblock[u->u_nfblocks].fb_type == t);
  ------------------
  |  Branch (875:5): [True: 34.4k, False: 0]
  ------------------
  876|  34.4k|    assert(SAME_JUMP_TARGET_LABEL(u->u_fblock[u->u_nfblocks].fb_block, block_label));
  ------------------
  |  Branch (876:5): [True: 34.4k, False: 0]
  ------------------
  877|  34.4k|    if (t == COMPILE_FBLOCK_FINALLY_END) {
  ------------------
  |  Branch (877:9): [True: 2.14k, False: 32.2k]
  ------------------
  878|  2.14k|        c->c_disable_warning--;
  879|  2.14k|    }
  880|  34.4k|}
_PyCompile_TopFBlock:
  884|  2.57k|{
  885|  2.57k|    if (c->u->u_nfblocks == 0) {
  ------------------
  |  Branch (885:9): [True: 229, False: 2.34k]
  ------------------
  886|    229|        return NULL;
  887|    229|    }
  888|  2.34k|    return &c->u->u_fblock[c->u->u_nfblocks - 1];
  889|  2.57k|}
_PyCompile_InExceptionHandler:
  893|  10.5k|{
  894|  12.1k|    for (Py_ssize_t i = 0; i < c->u->u_nfblocks; i++) {
  ------------------
  |  Branch (894:28): [True: 1.75k, False: 10.3k]
  ------------------
  895|  1.75k|        fblockinfo *block = &c->u->u_fblock[i];
  896|  1.75k|        switch (block->fb_type) {
  897|      0|            case COMPILE_FBLOCK_TRY_EXCEPT:
  ------------------
  |  Branch (897:13): [True: 0, False: 1.75k]
  ------------------
  898|      1|            case COMPILE_FBLOCK_FINALLY_TRY:
  ------------------
  |  Branch (898:13): [True: 1, False: 1.75k]
  ------------------
  899|     20|            case COMPILE_FBLOCK_FINALLY_END:
  ------------------
  |  Branch (899:13): [True: 19, False: 1.73k]
  ------------------
  900|    100|            case COMPILE_FBLOCK_EXCEPTION_HANDLER:
  ------------------
  |  Branch (900:13): [True: 80, False: 1.67k]
  ------------------
  901|    156|            case COMPILE_FBLOCK_EXCEPTION_GROUP_HANDLER:
  ------------------
  |  Branch (901:13): [True: 56, False: 1.70k]
  ------------------
  902|    156|            case COMPILE_FBLOCK_HANDLER_CLEANUP:
  ------------------
  |  Branch (902:13): [True: 0, False: 1.75k]
  ------------------
  903|    156|                return true;
  904|  1.60k|            default:
  ------------------
  |  Branch (904:13): [True: 1.60k, False: 156]
  ------------------
  905|  1.60k|                break;
  906|  1.75k|        }
  907|  1.75k|    }
  908|  10.3k|    return false;
  909|  10.5k|}
_PyCompile_DeferredAnnotations:
  915|  19.3k|{
  916|  19.3k|    *deferred_annotations = Py_XNewRef(c->u->u_deferred_annotations);
  ------------------
  |  |  551|  19.3k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  19.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  917|  19.3k|    *conditional_annotation_indices = Py_XNewRef(c->u->u_conditional_annotation_indices);
  ------------------
  |  |  551|  19.3k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  19.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  19.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  918|  19.3k|}
_PyCompile_GetRefType:
 1015|  12.3k|{
 1016|  12.3k|    if (c->u->u_scope_type == COMPILE_SCOPE_CLASS && _PyST_IsClassClosureName(name)) {
  ------------------
  |  Branch (1016:9): [True: 6.95k, False: 5.42k]
  |  Branch (1016:54): [True: 6.95k, False: 1]
  ------------------
 1017|  6.95k|        return CELL;
  ------------------
  |  |  195|  6.95k|#define CELL 5
  ------------------
 1018|  6.95k|    }
 1019|  5.42k|    PySTEntryObject *ste = c->u->u_ste;
 1020|  5.42k|    int scope = compiler_resolve_inlined_free(&ste, name);
 1021|  5.42k|    RETURN_IF_ERROR(scope);
  ------------------
  |  |   40|  5.42k|    do {                    \
  |  |   41|  5.42k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 5.42k]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|  5.42k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 5.42k]
  |  |  ------------------
  ------------------
 1022|  5.42k|    if (scope == 0) {
  ------------------
  |  Branch (1022:9): [True: 0, False: 5.42k]
  ------------------
 1023|      0|        PyErr_Format(PyExc_SystemError,
 1024|      0|                     "_PyST_GetScope(name=%R) failed: "
 1025|      0|                     "unknown scope in unit %S (%R); "
 1026|      0|                     "symbols: %R; locals: %R; "
 1027|      0|                     "globals: %R",
 1028|      0|                     name,
 1029|      0|                     c->u->u_metadata.u_name, ste->ste_id,
 1030|      0|                     ste->ste_symbols, c->u->u_metadata.u_varnames,
 1031|      0|                     c->u->u_metadata.u_names);
 1032|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1033|      0|    }
 1034|  5.42k|    return scope;
 1035|  5.42k|}
_PyCompile_LookupCellvar:
 1049|  6.07k|{
 1050|  6.07k|    assert(c->u->u_metadata.u_cellvars);
  ------------------
  |  Branch (1050:5): [True: 6.07k, False: 0]
  ------------------
 1051|  6.07k|    return dict_lookup_arg(c->u->u_metadata.u_cellvars, name);
 1052|  6.07k|}
_PyCompile_LookupArg:
 1056|  12.3k|{
 1057|       |    /* Special case: If a class contains a method with a
 1058|       |     * free variable that has the same name as a method,
 1059|       |     * the name will be considered free *and* local in the
 1060|       |     * class.  It should be handled by the closure, as
 1061|       |     * well as by the normal name lookup logic.
 1062|       |     */
 1063|  12.3k|    int reftype = _PyCompile_GetRefType(c, name);
 1064|  12.3k|    if (reftype == -1) {
  ------------------
  |  Branch (1064:9): [True: 0, False: 12.3k]
  ------------------
 1065|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1066|      0|    }
 1067|  12.3k|    int arg;
 1068|  12.3k|    if (reftype == CELL) {
  ------------------
  |  |  195|  12.3k|#define CELL 5
  ------------------
  |  Branch (1068:9): [True: 9.73k, False: 2.63k]
  ------------------
 1069|  9.73k|        arg = dict_lookup_arg(c->u->u_metadata.u_cellvars, name);
 1070|  9.73k|    }
 1071|  2.63k|    else {
 1072|  2.63k|        arg = dict_lookup_arg(c->u->u_metadata.u_freevars, name);
 1073|  2.63k|    }
 1074|  12.3k|    if (arg == -1 && !PyErr_Occurred()) {
  ------------------
  |  Branch (1074:9): [True: 0, False: 12.3k]
  |  Branch (1074:22): [True: 0, False: 0]
  ------------------
 1075|      0|        PyObject *freevars = _PyCode_GetFreevars(co);
 1076|      0|        if (freevars == NULL) {
  ------------------
  |  Branch (1076:13): [True: 0, False: 0]
  ------------------
 1077|      0|            PyErr_Clear();
 1078|      0|        }
 1079|      0|        PyErr_Format(PyExc_SystemError,
 1080|      0|            "compiler_lookup_arg(name=%R) with reftype=%d failed in %S; "
 1081|      0|            "freevars of code %S: %R",
 1082|      0|            name,
 1083|      0|            reftype,
 1084|      0|            c->u->u_metadata.u_name,
 1085|      0|            co->co_name,
 1086|      0|            freevars);
 1087|      0|        Py_XDECREF(freevars);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1089|      0|    }
 1090|  12.3k|    return arg;
 1091|  12.3k|}
_PyCompile_StaticAttributesAsTuple:
 1095|  13.0k|{
 1096|  13.0k|    assert(c->u->u_static_attributes);
  ------------------
  |  Branch (1096:5): [True: 13.0k, False: 0]
  ------------------
 1097|  13.0k|    PyObject *static_attributes_unsorted = PySequence_List(c->u->u_static_attributes);
 1098|  13.0k|    if (static_attributes_unsorted == NULL) {
  ------------------
  |  Branch (1098:9): [True: 0, False: 13.0k]
  ------------------
 1099|      0|        return NULL;
 1100|      0|    }
 1101|  13.0k|    if (PyList_Sort(static_attributes_unsorted) != 0) {
  ------------------
  |  Branch (1101:9): [True: 0, False: 13.0k]
  ------------------
 1102|      0|        Py_DECREF(static_attributes_unsorted);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1103|      0|        return NULL;
 1104|      0|    }
 1105|  13.0k|    PyObject *static_attributes = PySequence_Tuple(static_attributes_unsorted);
 1106|  13.0k|    Py_DECREF(static_attributes_unsorted);
  ------------------
  |  |  430|  13.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  13.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|  13.0k|    return static_attributes;
 1108|  13.0k|}
_PyCompile_ResolveNameop:
 1113|   526k|{
 1114|   526k|    PyObject *dict = c->u->u_metadata.u_names;
 1115|   526k|    *optype = COMPILE_OP_NAME;
 1116|       |
 1117|   526k|    PySTEntryObject *ste = c->u->u_ste;
 1118|   526k|    assert(ste != NULL);
  ------------------
  |  Branch (1118:5): [True: 526k, False: 0]
  ------------------
 1119|       |
 1120|   526k|    int scope = compiler_resolve_inlined_free(&ste, mangled);
 1121|   526k|    RETURN_IF_ERROR(scope);
  ------------------
  |  |   40|   526k|    do {                    \
  |  |   41|   526k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 526k]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|   526k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 526k]
  |  |  ------------------
  ------------------
 1122|       |
 1123|   526k|    switch (scope) {
 1124|  3.63k|    case FREE:
  ------------------
  |  |  194|  3.63k|#define FREE 4
  ------------------
  |  Branch (1124:5): [True: 3.63k, False: 522k]
  ------------------
 1125|  3.63k|        dict = c->u->u_metadata.u_freevars;
 1126|  3.63k|        *optype = COMPILE_OP_DEREF;
 1127|  3.63k|        break;
 1128|  5.67k|    case CELL:
  ------------------
  |  |  195|  5.67k|#define CELL 5
  ------------------
  |  Branch (1128:5): [True: 5.67k, False: 520k]
  ------------------
 1129|  5.67k|        dict = c->u->u_metadata.u_cellvars;
 1130|  5.67k|        *optype = COMPILE_OP_DEREF;
 1131|  5.67k|        break;
 1132|   195k|    case LOCAL:
  ------------------
  |  |  191|   195k|#define LOCAL 1
  ------------------
  |  Branch (1132:5): [True: 195k, False: 330k]
  ------------------
 1133|       |        /* Inlined comprehensions isolate their locals as FAST, even when
 1134|       |         * nested in class or module scope. */
 1135|   195k|        if (_PyST_IsFunctionLike(ste) || ste->ste_type == InlinedComprehensionBlock) {
  ------------------
  |  Branch (1135:13): [True: 113k, False: 81.8k]
  |  Branch (1135:42): [True: 18.0k, False: 63.8k]
  ------------------
 1136|   131k|            *optype = COMPILE_OP_FAST;
 1137|   131k|        }
 1138|   195k|        break;
 1139|   241k|    case GLOBAL_IMPLICIT: {
  ------------------
  |  |  193|   241k|#define GLOBAL_IMPLICIT 3
  ------------------
  |  Branch (1139:5): [True: 241k, False: 284k]
  ------------------
 1140|       |        /* Opcode depends on the enclosing non-inlined scope. */
 1141|   241k|        PySTEntryObject *enclosing = ste;
 1142|   244k|        while (enclosing->ste_parent != NULL) {
  ------------------
  |  Branch (1142:16): [True: 3.32k, False: 241k]
  ------------------
 1143|  3.32k|            assert(enclosing->ste_type == InlinedComprehensionBlock);
  ------------------
  |  Branch (1143:13): [True: 3.32k, False: 0]
  ------------------
 1144|  3.32k|            enclosing = enclosing->ste_parent;
 1145|  3.32k|        }
 1146|   241k|        if (_PyST_IsFunctionLike(enclosing)) {
  ------------------
  |  Branch (1146:13): [True: 92.6k, False: 148k]
  ------------------
 1147|  92.6k|            *optype = COMPILE_OP_GLOBAL;
 1148|  92.6k|        }
 1149|   241k|        break;
 1150|   241k|    }
 1151|    903|    case GLOBAL_EXPLICIT:
  ------------------
  |  |  192|    903|#define GLOBAL_EXPLICIT 2
  ------------------
  |  Branch (1151:5): [True: 903, False: 525k]
  ------------------
 1152|    903|        *optype = COMPILE_OP_GLOBAL;
 1153|    903|        break;
 1154|  79.1k|    default:
  ------------------
  |  Branch (1154:5): [True: 79.1k, False: 446k]
  ------------------
 1155|       |        /* scope can be 0 */
 1156|  79.1k|        break;
 1157|   526k|    }
 1158|       |    /* XXX Handle __doc__ and the like better */
 1159|   526k|    assert(scope || PyUnicode_READ_CHAR(mangled, 0) == '_');
  ------------------
  |  Branch (1159:5): [True: 446k, False: 79.1k]
  |  Branch (1159:5): [True: 79.1k, False: 0]
  ------------------
 1160|   526k|    if (*optype != COMPILE_OP_FAST) {
  ------------------
  |  Branch (1160:9): [True: 394k, False: 131k]
  ------------------
 1161|   394k|        *arg = _PyCompile_DictAddObj(dict, mangled);
 1162|   394k|        RETURN_IF_ERROR(*arg);
  ------------------
  |  |   40|   394k|    do {                    \
  |  |   41|   394k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 394k]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|   394k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 394k]
  |  |  ------------------
  ------------------
 1163|   394k|    }
 1164|   526k|    return scope;
 1165|   526k|}
_PyCompile_EnterInlinedComprehensionScope:
 1170|  2.34k|{
 1171|  2.34k|    assert(state->saved_ste == NULL);
  ------------------
  |  Branch (1171:5): [True: 2.34k, False: 0]
  ------------------
 1172|  2.34k|    state->saved_ste = c->u->u_ste;
 1173|  2.34k|    c->u->u_ste = (PySTEntryObject *)Py_NewRef(entry);
  ------------------
  |  |  550|  2.34k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1174|  2.34k|    return SUCCESS;
  ------------------
  |  |   36|  2.34k|#define SUCCESS 0
  ------------------
 1175|  2.34k|}
_PyCompile_ExitInlinedComprehensionScope:
 1180|  2.34k|{
 1181|  2.34k|    assert(state->saved_ste != NULL);
  ------------------
  |  Branch (1181:5): [True: 2.34k, False: 0]
  ------------------
 1182|  2.34k|    Py_DECREF(c->u->u_ste);
  ------------------
  |  |  430|  2.34k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.34k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.34k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|  2.34k|    c->u->u_ste = state->saved_ste;
 1184|  2.34k|    state->saved_ste = NULL;
 1185|  2.34k|    return SUCCESS;
  ------------------
  |  |   36|  2.34k|#define SUCCESS 0
  ------------------
 1186|  2.34k|}
_PyCompile_EnterConditionalBlock:
 1190|  11.0k|{
 1191|  11.0k|    c->u->u_in_conditional_block++;
 1192|  11.0k|}
_PyCompile_LeaveConditionalBlock:
 1196|  11.0k|{
 1197|  11.0k|    assert(c->u->u_in_conditional_block > 0);
  ------------------
  |  Branch (1197:5): [True: 11.0k, False: 0]
  ------------------
 1198|  11.0k|    c->u->u_in_conditional_block--;
 1199|  11.0k|}
_PyCompile_AddDeferredAnnotation:
 1204|  16.5k|{
 1205|  16.5k|    if (c->u->u_deferred_annotations == NULL) {
  ------------------
  |  Branch (1205:9): [True: 6.52k, False: 9.98k]
  ------------------
 1206|  6.52k|        c->u->u_deferred_annotations = PyList_New(0);
 1207|  6.52k|        if (c->u->u_deferred_annotations == NULL) {
  ------------------
  |  Branch (1207:13): [True: 0, False: 6.52k]
  ------------------
 1208|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1209|      0|        }
 1210|  6.52k|    }
 1211|  16.5k|    if (c->u->u_conditional_annotation_indices == NULL) {
  ------------------
  |  Branch (1211:9): [True: 6.52k, False: 9.98k]
  ------------------
 1212|  6.52k|        c->u->u_conditional_annotation_indices = PyList_New(0);
 1213|  6.52k|        if (c->u->u_conditional_annotation_indices == NULL) {
  ------------------
  |  Branch (1213:13): [True: 0, False: 6.52k]
  ------------------
 1214|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1215|      0|        }
 1216|  6.52k|    }
 1217|  16.5k|    PyObject *ptr = PyLong_FromVoidPtr((void *)s);
 1218|  16.5k|    if (ptr == NULL) {
  ------------------
  |  Branch (1218:9): [True: 0, False: 16.5k]
  ------------------
 1219|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1220|      0|    }
 1221|  16.5k|    if (PyList_Append(c->u->u_deferred_annotations, ptr) < 0) {
  ------------------
  |  Branch (1221:9): [True: 0, False: 16.5k]
  ------------------
 1222|      0|        Py_DECREF(ptr);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1223|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1224|      0|    }
 1225|  16.5k|    Py_DECREF(ptr);
  ------------------
  |  |  430|  16.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  16.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  16.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1226|  16.5k|    PyObject *index;
 1227|  16.5k|    if (c->u->u_scope_type == COMPILE_SCOPE_MODULE || c->u->u_in_conditional_block) {
  ------------------
  |  Branch (1227:9): [True: 3.67k, False: 12.8k]
  |  Branch (1227:55): [True: 820, False: 12.0k]
  ------------------
 1228|  4.49k|        index = PyLong_FromLong(c->u->u_next_conditional_annotation_index);
 1229|  4.49k|        if (index == NULL) {
  ------------------
  |  Branch (1229:13): [True: 0, False: 4.49k]
  ------------------
 1230|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1231|      0|        }
 1232|  4.49k|        *conditional_annotation_index = Py_NewRef(index);
  ------------------
  |  |  550|  4.49k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  4.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1233|  4.49k|        c->u->u_next_conditional_annotation_index++;
 1234|  4.49k|    }
 1235|  12.0k|    else {
 1236|  12.0k|        index = PyLong_FromLong(-1);
 1237|  12.0k|        if (index == NULL) {
  ------------------
  |  Branch (1237:13): [True: 0, False: 12.0k]
  ------------------
 1238|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1239|      0|        }
 1240|  12.0k|    }
 1241|  16.5k|    int rc = PyList_Append(c->u->u_conditional_annotation_indices, index);
 1242|  16.5k|    Py_DECREF(index);
  ------------------
  |  |  430|  16.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  16.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  16.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1243|  16.5k|    RETURN_IF_ERROR(rc);
  ------------------
  |  |   40|  16.5k|    do {                    \
  |  |   41|  16.5k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 16.5k]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|  16.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 16.5k]
  |  |  ------------------
  ------------------
 1244|  16.5k|    return SUCCESS;
  ------------------
  |  |   36|  16.5k|#define SUCCESS 0
  ------------------
 1245|  16.5k|}
_PyCompile_Error:
 1252|    502|{
 1253|    502|    va_list vargs;
 1254|    502|    va_start(vargs, format);
 1255|    502|    PyObject *msg = PyUnicode_FromFormatV(format, vargs);
 1256|    502|    va_end(vargs);
 1257|    502|    if (msg == NULL) {
  ------------------
  |  Branch (1257:9): [True: 0, False: 502]
  ------------------
 1258|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1259|      0|    }
 1260|    502|    _PyErr_RaiseSyntaxError(msg, c->c_filename, loc.lineno, loc.col_offset + 1,
 1261|    502|                            loc.end_lineno, loc.end_col_offset + 1);
 1262|    502|    Py_DECREF(msg);
  ------------------
  |  |  430|    502|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1263|    502|    return ERROR;
  ------------------
  |  |   37|    502|#define ERROR -1
  ------------------
 1264|    502|}
_PyCompile_Warn:
 1272|  6.15k|{
 1273|  6.15k|    if (c->c_disable_warning) {
  ------------------
  |  Branch (1273:9): [True: 415, False: 5.74k]
  ------------------
 1274|    415|        return 0;
 1275|    415|    }
 1276|  5.74k|    va_list vargs;
 1277|  5.74k|    va_start(vargs, format);
 1278|  5.74k|    PyObject *msg = PyUnicode_FromFormatV(format, vargs);
 1279|  5.74k|    va_end(vargs);
 1280|  5.74k|    if (msg == NULL) {
  ------------------
  |  Branch (1280:9): [True: 0, False: 5.74k]
  ------------------
 1281|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1282|      0|    }
 1283|  5.74k|    int ret = _PyErr_EmitSyntaxWarning(msg, c->c_filename, loc.lineno, loc.col_offset + 1,
 1284|  5.74k|                                       loc.end_lineno, loc.end_col_offset + 1,
 1285|  5.74k|                                       c->c_module);
 1286|  5.74k|    Py_DECREF(msg);
  ------------------
  |  |  430|  5.74k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1287|  5.74k|    return ret;
 1288|  5.74k|}
_PyCompile_Mangle:
 1292|  16.4k|{
 1293|  16.4k|    return _Py_Mangle(c->u->u_private, name);
 1294|  16.4k|}
_PyCompile_MaybeMangle:
 1298|   600k|{
 1299|   600k|    return _Py_MaybeMangle(c->u->u_private, c->u->u_ste, name);
 1300|   600k|}
_PyCompile_InstrSequence:
 1304|  5.72M|{
 1305|  5.72M|    return c->u->u_instr_sequence;
 1306|  5.72M|}
_PyCompile_StartAnnotationSetup:
 1310|    608|{
 1311|    608|    instr_sequence *new_seq = (instr_sequence *)_PyInstructionSequence_New();
 1312|    608|    if (new_seq == NULL) {
  ------------------
  |  Branch (1312:9): [True: 0, False: 608]
  ------------------
 1313|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1314|      0|    }
 1315|    608|    assert(c->u->u_stashed_instr_sequence == NULL);
  ------------------
  |  Branch (1315:5): [True: 608, False: 0]
  ------------------
 1316|    608|    c->u->u_stashed_instr_sequence = c->u->u_instr_sequence;
 1317|    608|    c->u->u_instr_sequence = new_seq;
 1318|    608|    return SUCCESS;
  ------------------
  |  |   36|    608|#define SUCCESS 0
  ------------------
 1319|    608|}
_PyCompile_EndAnnotationSetup:
 1323|    599|{
 1324|    599|    assert(c->u->u_stashed_instr_sequence != NULL);
  ------------------
  |  Branch (1324:5): [True: 599, False: 0]
  ------------------
 1325|    599|    instr_sequence *parent_seq = c->u->u_stashed_instr_sequence;
 1326|    599|    instr_sequence *anno_seq = c->u->u_instr_sequence;
 1327|    599|    c->u->u_stashed_instr_sequence = NULL;
 1328|    599|    c->u->u_instr_sequence = parent_seq;
 1329|    599|    if (_PyInstructionSequence_SetAnnotationsCode(parent_seq, anno_seq) == ERROR) {
  ------------------
  |  |   37|    599|#define ERROR -1
  ------------------
  |  Branch (1329:9): [True: 0, False: 599]
  ------------------
 1330|      0|        Py_DECREF(anno_seq);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1331|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1332|      0|    }
 1333|    599|    return SUCCESS;
  ------------------
  |  |   36|    599|#define SUCCESS 0
  ------------------
 1334|    599|}
_PyCompile_FutureFeatures:
 1339|  72.4k|{
 1340|  72.4k|    return c->c_future.ff_features;
 1341|  72.4k|}
_PyCompile_Symtable:
 1345|  11.0k|{
 1346|  11.0k|    return c->c_st;
 1347|  11.0k|}
_PyCompile_SymtableEntry:
 1351|   327k|{
 1352|   327k|    return c->u->u_ste;
 1353|   327k|}
_PyCompile_OptimizationLevel:
 1357|  3.49k|{
 1358|  3.49k|    return c->c_optimize;
 1359|  3.49k|}
_PyCompile_IsInteractiveTopLevel:
 1363|  89.8k|{
 1364|  89.8k|    assert(c->c_stack != NULL);
  ------------------
  |  Branch (1364:5): [True: 89.8k, False: 0]
  ------------------
 1365|  89.8k|    assert(PyList_CheckExact(c->c_stack));
  ------------------
  |  Branch (1365:5): [True: 89.8k, False: 0]
  ------------------
 1366|  89.8k|    bool is_nested_scope = PyList_GET_SIZE(c->c_stack) > 0;
  ------------------
  |  |   38|  89.8k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  89.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  89.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1367|  89.8k|    return c->c_interactive && !is_nested_scope;
  ------------------
  |  Branch (1367:12): [True: 3.40k, False: 86.4k]
  |  Branch (1367:32): [True: 3.38k, False: 26]
  ------------------
 1368|  89.8k|}
_PyCompile_ScopeType:
 1372|   235k|{
 1373|   235k|    return c->u->u_scope_type;
 1374|   235k|}
_PyCompile_Qualname:
 1378|  13.0k|{
 1379|  13.0k|    assert(c->u->u_metadata.u_qualname);
  ------------------
  |  Branch (1379:5): [True: 13.0k, False: 0]
  ------------------
 1380|  13.0k|    return c->u->u_metadata.u_qualname;
 1381|  13.0k|}
_PyCompile_Metadata:
 1385|   246k|{
 1386|   246k|    return &c->u->u_metadata;
 1387|   246k|}
_PyCompile_ConstCacheMergeOne:
 1392|   975k|{
 1393|   975k|    PyObject *key = const_cache_insert(const_cache, *obj, false);
 1394|   975k|    if (key == NULL) {
  ------------------
  |  Branch (1394:9): [True: 0, False: 975k]
  ------------------
 1395|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1396|      0|    }
 1397|   975k|    if (PyTuple_CheckExact(key)) {
  ------------------
  |  |   28|   975k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|   975k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   975k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   975k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 729k, False: 245k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|   729k|        PyObject *item = PyTuple_GET_ITEM(key, 1);
  ------------------
  |  |   29|   729k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   729k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   729k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1398:26): [True: 729k, False: 0]
  ------------------
 1399|   729k|        Py_SETREF(*obj, Py_NewRef(item));
  ------------------
  |  |  354|   729k|    do { \
  |  |  355|   729k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|   729k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|   729k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|   729k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|   729k|        *_tmp_dst_ptr = (src); \
  |  |  358|   729k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|   729k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   729k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   729k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|   729k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 729k]
  |  |  ------------------
  ------------------
 1400|   729k|        Py_DECREF(key);
  ------------------
  |  |  430|   729k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   729k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   729k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|   729k|    }
 1402|   245k|    else {
 1403|   245k|        Py_SETREF(*obj, key);
  ------------------
  |  |  354|   245k|    do { \
  |  |  355|   245k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|   245k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|   245k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|   245k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|   245k|        *_tmp_dst_ptr = (src); \
  |  |  358|   245k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|   245k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   245k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   245k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|   245k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 245k]
  |  |  ------------------
  ------------------
 1404|   245k|    }
 1405|   975k|    return SUCCESS;
  ------------------
  |  |   36|   975k|#define SUCCESS 0
  ------------------
 1406|   975k|}
_PyCompile_OptimizeAndAssemble:
 1515|  52.7k|{
 1516|  52.7k|    struct compiler_unit *u = c->u;
 1517|  52.7k|    PyObject *const_cache = c->c_const_cache;
 1518|  52.7k|    PyObject *filename = c->c_filename;
 1519|       |
 1520|  52.7k|    int code_flags = compute_code_flags(c);
 1521|  52.7k|    assert(code_flags >= 0);
  ------------------
  |  Branch (1521:5): [True: 52.7k, False: 0]
  ------------------
 1522|  52.7k|    if (_PyCodegen_AddReturnAtEnd(c, addNone) < 0) {
  ------------------
  |  Branch (1522:9): [True: 0, False: 52.7k]
  ------------------
 1523|      0|        return NULL;
 1524|      0|    }
 1525|       |
 1526|  52.7k|    return optimize_and_assemble_code_unit(u, const_cache, code_flags, filename);
 1527|  52.7k|}
_PyAST_Compile:
 1532|  10.8k|{
 1533|  10.8k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (1533:5): [True: 10.8k, False: 0]
  ------------------
 1534|  10.8k|    compiler *c = new_compiler(mod, filename, pflags, optimize, arena, module);
 1535|  10.8k|    if (c == NULL) {
  ------------------
  |  Branch (1535:9): [True: 268, False: 10.5k]
  ------------------
 1536|    268|        return NULL;
 1537|    268|    }
 1538|       |
 1539|  10.5k|    PyCodeObject *co = compiler_mod(c, mod);
 1540|  10.5k|    compiler_free(c);
 1541|  10.5k|    assert(co || PyErr_Occurred());
  ------------------
  |  Branch (1541:5): [True: 10.0k, False: 502]
  |  Branch (1541:5): [True: 502, False: 0]
  ------------------
 1542|  10.5k|    return co;
 1543|  10.5k|}
_PyCompile_AstPreprocess:
 1549|  1.89k|{
 1550|  1.89k|    _PyFutureFeatures future;
 1551|  1.89k|    if (!_PyFuture_FromAST(mod, filename, &future)) {
  ------------------
  |  Branch (1551:9): [True: 1, False: 1.89k]
  ------------------
 1552|      1|        return -1;
 1553|      1|    }
 1554|  1.89k|    int flags = future.ff_features | cf->cf_flags;
 1555|  1.89k|    if (optimize == -1) {
  ------------------
  |  Branch (1555:9): [True: 539, False: 1.35k]
  ------------------
 1556|    539|        optimize = _Py_GetConfig()->optimization_level;
 1557|    539|    }
 1558|  1.89k|    if (!_PyAST_Preprocess(mod, arena, filename, optimize, flags,
  ------------------
  |  Branch (1558:9): [True: 0, False: 1.89k]
  ------------------
 1559|  1.89k|                           no_const_folding, 0, module))
 1560|      0|    {
 1561|      0|        return -1;
 1562|      0|    }
 1563|  1.89k|    return 0;
 1564|  1.89k|}
_PyCompile_CleanDoc:
 1572|  1.94k|{
 1573|  1.94k|    doc = PyObject_CallMethod(doc, "expandtabs", NULL);
 1574|  1.94k|    if (doc == NULL) {
  ------------------
  |  Branch (1574:9): [True: 0, False: 1.94k]
  ------------------
 1575|      0|        return NULL;
 1576|      0|    }
 1577|       |
 1578|  1.94k|    Py_ssize_t doc_size;
 1579|  1.94k|    const char *doc_utf8 = PyUnicode_AsUTF8AndSize(doc, &doc_size);
 1580|  1.94k|    if (doc_utf8 == NULL) {
  ------------------
  |  Branch (1580:9): [True: 0, False: 1.94k]
  ------------------
 1581|      0|        Py_DECREF(doc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1582|      0|        return NULL;
 1583|      0|    }
 1584|  1.94k|    const char *p = doc_utf8;
 1585|  1.94k|    const char *pend = p + doc_size;
 1586|       |
 1587|       |    // First pass: find minimum indentation of any non-blank lines
 1588|       |    // after first line.
 1589|  49.5k|    while (p < pend && *p++ != '\n') {
  ------------------
  |  Branch (1589:12): [True: 48.2k, False: 1.28k]
  |  Branch (1589:24): [True: 47.6k, False: 661]
  ------------------
 1590|  47.6k|    }
 1591|       |
 1592|  1.94k|    Py_ssize_t margin = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|  1.94k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
 1593|  30.3k|    while (p < pend) {
  ------------------
  |  Branch (1593:12): [True: 28.3k, False: 1.94k]
  ------------------
 1594|  28.3k|        const char *s = p;
 1595|  41.5k|        while (*p == ' ') p++;
  ------------------
  |  Branch (1595:16): [True: 13.2k, False: 28.3k]
  ------------------
 1596|  28.3k|        if (p < pend && *p != '\n') {
  ------------------
  |  Branch (1596:13): [True: 28.3k, False: 22]
  |  Branch (1596:25): [True: 3.79k, False: 24.5k]
  ------------------
 1597|  3.79k|            margin = Py_MIN(margin, p - s);
  ------------------
  |  |  120|  3.79k|       __extension__ \
  |  |  121|  3.79k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  3.79k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  3.79k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  3.79k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  3.79k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 2.16k, False: 1.63k]
  |  |  ------------------
  ------------------
 1598|  3.79k|        }
 1599|   173k|        while (p < pend && *p++ != '\n') {
  ------------------
  |  Branch (1599:16): [True: 173k, False: 410]
  |  Branch (1599:28): [True: 145k, False: 27.9k]
  ------------------
 1600|   145k|        }
 1601|  28.3k|    }
 1602|  1.94k|    if (margin == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  1.94k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (1602:9): [True: 1.30k, False: 644]
  ------------------
 1603|  1.30k|        margin = 0;
 1604|  1.30k|    }
 1605|       |
 1606|       |    // Second pass: write cleandoc into buff.
 1607|       |
 1608|       |    // copy first line without leading spaces.
 1609|  1.94k|    p = doc_utf8;
 1610|  4.99k|    while (*p == ' ') {
  ------------------
  |  Branch (1610:12): [True: 3.04k, False: 1.94k]
  ------------------
 1611|  3.04k|        p++;
 1612|  3.04k|    }
 1613|  1.94k|    if (p == doc_utf8 && margin == 0 ) {
  ------------------
  |  Branch (1613:9): [True: 808, False: 1.13k]
  |  Branch (1613:26): [True: 763, False: 45]
  ------------------
 1614|       |        // doc is already clean.
 1615|    763|        return doc;
 1616|    763|    }
 1617|       |
 1618|  1.18k|    char *buff = PyMem_Malloc(doc_size);
 1619|  1.18k|    if (buff == NULL){
  ------------------
  |  Branch (1619:9): [True: 0, False: 1.18k]
  ------------------
 1620|      0|        Py_DECREF(doc);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1621|      0|        PyErr_NoMemory();
 1622|      0|        return NULL;
 1623|      0|    }
 1624|       |
 1625|  1.18k|    char *w = buff;
 1626|       |
 1627|  17.3k|    while (p < pend) {
  ------------------
  |  Branch (1627:12): [True: 16.5k, False: 794]
  ------------------
 1628|  16.5k|        int ch = *w++ = *p++;
 1629|  16.5k|        if (ch == '\n') {
  ------------------
  |  Branch (1629:13): [True: 390, False: 16.1k]
  ------------------
 1630|    390|            break;
 1631|    390|        }
 1632|  16.5k|    }
 1633|       |
 1634|       |    // copy subsequent lines without margin.
 1635|  29.0k|    while (p < pend) {
  ------------------
  |  Branch (1635:12): [True: 27.8k, False: 1.18k]
  ------------------
 1636|  29.1k|        for (Py_ssize_t i = 0; i < margin; i++, p++) {
  ------------------
  |  Branch (1636:32): [True: 1.42k, False: 27.7k]
  ------------------
 1637|  1.42k|            if (*p != ' ') {
  ------------------
  |  Branch (1637:17): [True: 108, False: 1.31k]
  ------------------
 1638|    108|                assert(*p == '\n' || *p == '\0');
  ------------------
  |  Branch (1638:17): [True: 107, False: 1]
  |  Branch (1638:17): [True: 1, False: 0]
  ------------------
 1639|    108|                break;
 1640|    108|            }
 1641|  1.42k|        }
 1642|   155k|        while (p < pend) {
  ------------------
  |  Branch (1642:16): [True: 155k, False: 142]
  ------------------
 1643|   155k|            int ch = *w++ = *p++;
 1644|   155k|            if (ch == '\n') {
  ------------------
  |  Branch (1644:17): [True: 27.7k, False: 127k]
  ------------------
 1645|  27.7k|                break;
 1646|  27.7k|            }
 1647|   155k|        }
 1648|  27.8k|    }
 1649|       |
 1650|  1.18k|    Py_DECREF(doc);
  ------------------
  |  |  430|  1.18k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1651|  1.18k|    PyObject *res = PyUnicode_FromStringAndSize(buff, w - buff);
 1652|  1.18k|    PyMem_Free(buff);
 1653|  1.18k|    return res;
 1654|  1.18k|}
compile.c:merge_consts_recursive:
  455|  1.27M|{
  456|       |    return const_cache_insert(const_cache, o, true);
  457|  1.27M|}
compile.c:compiler_unit_free:
  188|  53.3k|{
  189|  53.3k|    Py_CLEAR(u->u_instr_sequence);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  190|  53.3k|    Py_CLEAR(u->u_stashed_instr_sequence);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 9, False: 53.3k]
  |  |  ------------------
  |  |  488|      9|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      9|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      9|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      9|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      9|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  191|  53.3k|    Py_CLEAR(u->u_ste);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  192|  53.3k|    Py_CLEAR(u->u_metadata.u_name);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  193|  53.3k|    Py_CLEAR(u->u_metadata.u_qualname);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 42.8k, False: 10.5k]
  |  |  ------------------
  |  |  488|  42.8k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  42.8k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  42.8k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  42.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  42.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  42.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  42.8k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  194|  53.3k|    Py_CLEAR(u->u_metadata.u_consts);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  195|  53.3k|    Py_CLEAR(u->u_metadata.u_names);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  196|  53.3k|    Py_CLEAR(u->u_metadata.u_varnames);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  197|  53.3k|    Py_CLEAR(u->u_metadata.u_freevars);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  198|  53.3k|    Py_CLEAR(u->u_metadata.u_cellvars);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 53.3k, False: 0]
  |  |  ------------------
  |  |  488|  53.3k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  53.3k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  53.3k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  199|  53.3k|    Py_CLEAR(u->u_metadata.u_fasthidden);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 23.6k, False: 29.7k]
  |  |  ------------------
  |  |  488|  23.6k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  23.6k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  23.6k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  23.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  23.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  23.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  23.6k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  200|  53.3k|    Py_CLEAR(u->u_private);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 23.9k, False: 29.3k]
  |  |  ------------------
  |  |  488|  23.9k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  23.9k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  23.9k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  23.9k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  23.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  23.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  23.9k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  201|  53.3k|    Py_CLEAR(u->u_static_attributes);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 13.0k, False: 40.3k]
  |  |  ------------------
  |  |  488|  13.0k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  13.0k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  13.0k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  13.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  13.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  13.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  13.0k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  202|  53.3k|    Py_CLEAR(u->u_deferred_annotations);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6.52k, False: 46.8k]
  |  |  ------------------
  |  |  488|  6.52k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  6.52k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  6.52k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  6.52k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.52k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.52k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  6.52k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  203|       |    Py_CLEAR(u->u_conditional_annotation_indices);
  ------------------
  |  |  484|  53.3k|    do { \
  |  |  485|  53.3k|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  53.3k|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  53.3k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  53.3k|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  53.3k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6.52k, False: 46.8k]
  |  |  ------------------
  |  |  488|  6.52k|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|  6.52k|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|  6.52k|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|  6.52k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  6.52k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  6.52k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|  6.52k|        } \
  |  |  491|  53.3k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 53.3k]
  |  |  ------------------
  ------------------
  204|  53.3k|    PyMem_Free(u);
  205|  53.3k|}
compile.c:list2dict:
  500|   106k|{
  501|   106k|    Py_ssize_t i, n;
  502|   106k|    PyObject *v, *k;
  503|   106k|    PyObject *dict = PyDict_New();
  504|   106k|    if (!dict) return NULL;
  ------------------
  |  Branch (504:9): [True: 0, False: 106k]
  ------------------
  505|       |
  506|   106k|    n = PyList_Size(list);
  507|   134k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (507:17): [True: 27.8k, False: 106k]
  ------------------
  508|  27.8k|        v = PyLong_FromSsize_t(i);
  509|  27.8k|        if (!v) {
  ------------------
  |  Branch (509:13): [True: 0, False: 27.8k]
  ------------------
  510|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|            return NULL;
  512|      0|        }
  513|  27.8k|        k = PyList_GET_ITEM(list, i);
  ------------------
  |  |   40|  27.8k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  27.8k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (513:13): [True: 27.8k, False: 0]
  ------------------
  514|  27.8k|        if (PyDict_SetItem(dict, k, v) < 0) {
  ------------------
  |  Branch (514:13): [True: 0, False: 27.8k]
  ------------------
  515|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|      0|            return NULL;
  518|      0|        }
  519|  27.8k|        Py_DECREF(v);
  ------------------
  |  |  430|  27.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|  27.8k|    }
  521|   106k|    return dict;
  522|   106k|}
compile.c:compiler_cellvars:
  640|  53.3k|{
  641|  53.3k|    PyObject *names = PySet_New(NULL);
  642|  53.3k|    if (names == NULL) {
  ------------------
  |  Branch (642:9): [True: 0, False: 53.3k]
  ------------------
  643|      0|        return NULL;
  644|      0|    }
  645|  53.3k|    if (add_cell_names_from_symbols(ste->ste_symbols, names) < 0) {
  ------------------
  |  Branch (645:9): [True: 0, False: 53.3k]
  ------------------
  646|      0|        Py_DECREF(names);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|      0|        return NULL;
  648|      0|    }
  649|  53.3k|    if (add_inlined_comprehension_cell_names(ste, names) < 0) {
  ------------------
  |  Branch (649:9): [True: 0, False: 53.3k]
  ------------------
  650|      0|        Py_DECREF(names);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  651|      0|        return NULL;
  652|      0|    }
  653|  53.3k|    PyObject *sorted = PySequence_List(names);
  654|  53.3k|    Py_DECREF(names);
  ------------------
  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|  53.3k|    if (sorted == NULL) {
  ------------------
  |  Branch (655:9): [True: 0, False: 53.3k]
  ------------------
  656|      0|        return NULL;
  657|      0|    }
  658|  53.3k|    if (PyList_Sort(sorted) < 0) {
  ------------------
  |  Branch (658:9): [True: 0, False: 53.3k]
  ------------------
  659|      0|        Py_DECREF(sorted);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  660|      0|        return NULL;
  661|      0|    }
  662|  53.3k|    PyObject *cellvars = list2dict(sorted);
  663|  53.3k|    Py_DECREF(sorted);
  ------------------
  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  664|  53.3k|    return cellvars;
  665|  53.3k|}
compile.c:add_cell_names_from_symbols:
  600|  55.7k|{
  601|  55.7k|    Py_ssize_t pos = 0;
  602|  55.7k|    PyObject *k, *v;
  603|   295k|    while (PyDict_Next(symbols, &pos, &k, &v)) {
  ------------------
  |  Branch (603:12): [True: 239k, False: 55.7k]
  ------------------
  604|   239k|        long flags = PyLong_AsLong(v);
  605|   239k|        if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (605:13): [True: 0, False: 239k]
  |  Branch (605:28): [True: 0, False: 0]
  ------------------
  606|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  607|      0|        }
  608|   239k|        if (SYMBOL_TO_SCOPE(flags) == CELL) {
  ------------------
  |  |  189|   239k|#define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  187|   239k|#define SCOPE_OFFSET 12
  |  |  ------------------
  |  |               #define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  188|   239k|#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|   239k|#define DEF_GLOBAL 1             /* global stmt */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   239k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|   239k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  173|   239k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (SYMBOL_TO_SCOPE(flags) == CELL) {
  ------------------
  |  |  195|   239k|#define CELL 5
  ------------------
  |  Branch (608:13): [True: 3.09k, False: 236k]
  ------------------
  609|  3.09k|            if (PySet_Add(names, k) < 0) {
  ------------------
  |  Branch (609:17): [True: 0, False: 3.09k]
  ------------------
  610|      0|                return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  611|      0|            }
  612|  3.09k|        }
  613|   239k|    }
  614|  55.7k|    return SUCCESS;
  ------------------
  |  |   36|  55.7k|#define SUCCESS 0
  ------------------
  615|  55.7k|}
compile.c:add_inlined_comprehension_cell_names:
  619|  55.7k|{
  620|   101k|    for (Py_ssize_t i = 0; i < PyList_GET_SIZE(ste->ste_children); i++) {
  ------------------
  |  |   38|   101k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   101k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   101k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (620:28): [True: 45.8k, False: 55.7k]
  ------------------
  621|  45.8k|        PySTEntryObject *child =
  622|  45.8k|            (PySTEntryObject *)PyList_GET_ITEM(ste->ste_children, i);
  ------------------
  |  |   40|  45.8k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  45.8k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  45.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (622:32): [True: 45.8k, False: 0]
  ------------------
  623|  45.8k|        if (child->ste_type != InlinedComprehensionBlock) {
  ------------------
  |  Branch (623:13): [True: 43.5k, False: 2.33k]
  ------------------
  624|  43.5k|            continue;
  625|  43.5k|        }
  626|  2.33k|        if (add_cell_names_from_symbols(child->ste_symbols, names) < 0) {
  ------------------
  |  Branch (626:13): [True: 0, False: 2.33k]
  ------------------
  627|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  628|      0|        }
  629|  2.33k|        if (add_inlined_comprehension_cell_names(child, names) < 0) {
  ------------------
  |  Branch (629:13): [True: 0, False: 2.33k]
  ------------------
  630|      0|            return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  631|      0|        }
  632|  2.33k|    }
  633|  55.7k|    return SUCCESS;
  ------------------
  |  |   36|  55.7k|#define SUCCESS 0
  ------------------
  634|  55.7k|}
compile.c:dictbytype:
  534|  53.3k|{
  535|  53.3k|    Py_ssize_t i = offset, num_keys, key_i;
  536|  53.3k|    PyObject *k, *v, *dest = PyDict_New();
  537|  53.3k|    PyObject *sorted_keys;
  538|       |
  539|  53.3k|    assert(offset >= 0);
  ------------------
  |  Branch (539:5): [True: 53.3k, False: 0]
  ------------------
  540|  53.3k|    if (dest == NULL)
  ------------------
  |  Branch (540:9): [True: 0, False: 53.3k]
  ------------------
  541|      0|        return NULL;
  542|       |
  543|       |    /* Sort the keys so that we have a deterministic order on the indexes
  544|       |       saved in the returned dictionary.  These indexes are used as indexes
  545|       |       into the free and cell var storage.  Therefore if they aren't
  546|       |       deterministic, then the generated bytecode is not deterministic.
  547|       |    */
  548|  53.3k|    sorted_keys = PyDict_Keys(src);
  549|  53.3k|    if (sorted_keys == NULL) {
  ------------------
  |  Branch (549:9): [True: 0, False: 53.3k]
  ------------------
  550|      0|        Py_DECREF(dest);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|      0|        return NULL;
  552|      0|    }
  553|  53.3k|    if (PyList_Sort(sorted_keys) != 0) {
  ------------------
  |  Branch (553:9): [True: 0, False: 53.3k]
  ------------------
  554|      0|        Py_DECREF(sorted_keys);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  555|      0|        Py_DECREF(dest);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|      0|        return NULL;
  557|      0|    }
  558|  53.3k|    num_keys = PyList_GET_SIZE(sorted_keys);
  ------------------
  |  |   38|  53.3k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  559|       |
  560|   282k|    for (key_i = 0; key_i < num_keys; key_i++) {
  ------------------
  |  Branch (560:21): [True: 229k, False: 53.3k]
  ------------------
  561|   229k|        k = PyList_GET_ITEM(sorted_keys, key_i);
  ------------------
  |  |   40|   229k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|   229k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   229k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (561:13): [True: 229k, False: 0]
  ------------------
  562|      0|        v = PyDict_GetItemWithError(src, k);
  563|   229k|        if (!v) {
  ------------------
  |  Branch (563:13): [True: 0, False: 229k]
  ------------------
  564|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (564:17): [True: 0, False: 0]
  ------------------
  565|      0|                PyErr_SetObject(PyExc_KeyError, k);
  566|      0|            }
  567|      0|            Py_DECREF(sorted_keys);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      0|            Py_DECREF(dest);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|      0|            return NULL;
  570|      0|        }
  571|   229k|        long vi = PyLong_AsLong(v);
  572|   229k|        if (vi == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (572:13): [True: 0, False: 229k]
  |  Branch (572:25): [True: 0, False: 0]
  ------------------
  573|      0|            Py_DECREF(sorted_keys);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|      0|            Py_DECREF(dest);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|      0|            return NULL;
  576|      0|        }
  577|   229k|        if (SYMBOL_TO_SCOPE(vi) == scope_type || vi & flag) {
  ------------------
  |  |  189|   229k|#define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  187|   229k|#define SCOPE_OFFSET 12
  |  |  ------------------
  |  |               #define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  188|   229k|#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|   229k|#define DEF_GLOBAL 1             /* global stmt */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   229k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|   229k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  173|   229k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (577:13): [True: 11.6k, False: 217k]
  |  Branch (577:50): [True: 0, False: 217k]
  ------------------
  578|  11.6k|            PyObject *item = PyLong_FromSsize_t(i);
  579|  11.6k|            if (item == NULL) {
  ------------------
  |  Branch (579:17): [True: 0, False: 11.6k]
  ------------------
  580|      0|                Py_DECREF(sorted_keys);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  581|      0|                Py_DECREF(dest);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  582|      0|                return NULL;
  583|      0|            }
  584|  11.6k|            i++;
  585|  11.6k|            if (PyDict_SetItem(dest, k, item) < 0) {
  ------------------
  |  Branch (585:17): [True: 0, False: 11.6k]
  ------------------
  586|      0|                Py_DECREF(sorted_keys);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|      0|                Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  588|      0|                Py_DECREF(dest);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  589|      0|                return NULL;
  590|      0|            }
  591|  11.6k|            Py_DECREF(item);
  ------------------
  |  |  430|  11.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  592|  11.6k|        }
  593|   229k|    }
  594|  53.3k|    Py_DECREF(sorted_keys);
  ------------------
  |  |  430|  53.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  53.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  53.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  595|  53.3k|    return dest;
  596|  53.3k|}
compile.c:compiler_resolve_inlined_free:
  993|   531k|{
  994|   531k|    int scope = _PyST_GetScope(*ste, name);
  995|   531k|    RETURN_IF_ERROR(scope);
  ------------------
  |  |   40|   531k|    do {                    \
  |  |   41|   531k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 531k]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|   531k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 531k]
  |  |  ------------------
  ------------------
  996|   531k|    while ((*ste)->ste_type == InlinedComprehensionBlock &&
  ------------------
  |  Branch (996:12): [True: 22.0k, False: 509k]
  ------------------
  997|  22.0k|           (scope == FREE || scope == 0)) {
  ------------------
  |  |  194|  44.1k|#define FREE 4
  ------------------
  |  Branch (997:13): [True: 304, False: 21.7k]
  |  Branch (997:30): [True: 0, False: 21.7k]
  ------------------
  998|    304|        PySTEntryObject *parent = (*ste)->ste_parent;
  999|    304|        assert(parent != NULL);
  ------------------
  |  Branch (999:9): [True: 304, False: 0]
  ------------------
 1000|    304|        if (parent->ste_type == ClassBlock) {
  ------------------
  |  Branch (1000:13): [True: 0, False: 304]
  ------------------
 1001|      0|            if (_PyST_IsClassClosureName(name)) {
  ------------------
  |  Branch (1001:17): [True: 0, False: 0]
  ------------------
 1002|      0|                return GLOBAL_IMPLICIT;
  ------------------
  |  |  193|      0|#define GLOBAL_IMPLICIT 3
  ------------------
 1003|      0|            }
 1004|      0|            break;
 1005|      0|        }
 1006|    304|        *ste = parent;
 1007|    304|        scope = _PyST_GetScope(*ste, name);
 1008|    304|        RETURN_IF_ERROR(scope);
  ------------------
  |  |   40|    304|    do {                    \
  |  |   41|    304|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 304]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|    304|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 304]
  |  |  ------------------
  ------------------
 1009|    304|    }
 1010|   531k|    return scope;
 1011|   531k|}
compile.c:dict_lookup_arg:
 1039|  18.4k|{
 1040|  18.4k|    PyObject *v = PyDict_GetItemWithError(dict, name);
 1041|  18.4k|    if (v == NULL) {
  ------------------
  |  Branch (1041:9): [True: 0, False: 18.4k]
  ------------------
 1042|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
 1043|      0|    }
 1044|  18.4k|    return PyLong_AsLong(v);
 1045|  18.4k|}
compile.c:const_cache_insert:
  343|  2.25M|{
  344|  2.25M|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (344:5): [True: 2.25M, False: 0]
  ------------------
  345|       |    // None and Ellipsis are immortal objects, and key is the singleton.
  346|       |    // No need to merge object and key.
  347|  2.25M|    if (o == Py_None || o == Py_Ellipsis) {
  ------------------
  |  |  616|  4.51M|#  define Py_None (&_Py_NoneStruct)
  ------------------
                  if (o == Py_None || o == Py_Ellipsis) {
  ------------------
  |  |   14|  2.10M|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
  |  Branch (347:9): [True: 153k, False: 2.10M]
  |  Branch (347:25): [True: 1.23k, False: 2.10M]
  ------------------
  348|   154k|        return o;
  349|   154k|    }
  350|       |
  351|  2.10M|    PyObject *key = _PyCode_ConstantKey(o);
  352|  2.10M|    if (key == NULL) {
  ------------------
  |  Branch (352:9): [True: 0, False: 2.10M]
  ------------------
  353|      0|        return NULL;
  354|      0|    }
  355|       |
  356|  2.10M|    PyObject *t;
  357|  2.10M|    int res = PyDict_SetDefaultRef(const_cache, key, key, &t);
  358|  2.10M|    if (res != 0) {
  ------------------
  |  Branch (358:9): [True: 1.67M, False: 427k]
  ------------------
  359|       |        // o was not inserted into const_cache. t is either the existing value
  360|       |        // or NULL (on error).
  361|  1.67M|        Py_DECREF(key);
  ------------------
  |  |  430|  1.67M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.67M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.67M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|  1.67M|        return t;
  363|  1.67M|    }
  364|   427k|    Py_DECREF(t);
  ------------------
  |  |  430|   427k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   427k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   427k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|       |
  366|   427k|    if (!recursive) {
  ------------------
  |  Branch (366:9): [True: 280k, False: 147k]
  ------------------
  367|   280k|        return key;
  368|   280k|    }
  369|       |
  370|       |    // We registered o in const_cache.
  371|       |    // When o is a tuple or frozenset, we want to merge its
  372|       |    // items too.
  373|   147k|    if (PyTuple_CheckExact(o)) {
  ------------------
  |  |   28|   147k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|   147k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   147k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   147k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2.63k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|  2.63k|        Py_ssize_t len = PyTuple_GET_SIZE(o);
  ------------------
  |  |   27|  2.63k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.63k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|  5.27k|        for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (375:32): [True: 2.64k, False: 2.63k]
  ------------------
  376|  2.64k|            PyObject *item = PyTuple_GET_ITEM(o, i);
  ------------------
  |  |   29|  2.64k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.64k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.64k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (376:30): [True: 2.64k, False: 0]
  ------------------
  377|      0|            PyObject *u = const_cache_insert(const_cache, item, recursive);
  378|  2.64k|            if (u == NULL) {
  ------------------
  |  Branch (378:17): [True: 0, False: 2.64k]
  ------------------
  379|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|      0|                return NULL;
  381|      0|            }
  382|       |
  383|       |            // See _PyCode_ConstantKey()
  384|  2.64k|            PyObject *v;  // borrowed
  385|  2.64k|            if (PyTuple_CheckExact(u)) {
  ------------------
  |  |   28|  2.64k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  2.64k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.64k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.64k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 2.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|      0|                v = PyTuple_GET_ITEM(u, 1);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (386:21): [True: 0, False: 0]
  ------------------
  387|      0|            }
  388|  2.64k|            else {
  389|  2.64k|                v = u;
  390|  2.64k|            }
  391|  2.64k|            if (v != item) {
  ------------------
  |  Branch (391:17): [True: 0, False: 2.64k]
  ------------------
  392|      0|                PyTuple_SET_ITEM(o, i, Py_NewRef(v));
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  393|      0|                Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  394|      0|            }
  395|       |
  396|  2.64k|            Py_DECREF(u);
  ------------------
  |  |  430|  2.64k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.64k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.64k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|  2.64k|        }
  398|  2.63k|    }
  399|   144k|    else if (PyFrozenSet_CheckExact(o)) {
  ------------------
  |  |   23|   144k|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|   144k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   144k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   144k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|       |        // *key* is tuple. And its first item is frozenset of
  401|       |        // constant keys.
  402|       |        // See _PyCode_ConstantKey() for detail.
  403|      0|        assert(PyTuple_CheckExact(key));
  ------------------
  |  Branch (403:9): [True: 0, False: 0]
  ------------------
  404|      0|        assert(PyTuple_GET_SIZE(key) == 2);
  ------------------
  |  Branch (404:9): [True: 0, False: 0]
  ------------------
  405|       |
  406|      0|        Py_ssize_t len = PySet_GET_SIZE(o);
  ------------------
  |  |   71|      0|#define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  407|      0|        if (len == 0) {  // empty frozenset should not be re-created.
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|      0|            return key;
  409|      0|        }
  410|      0|        PyObject *tuple = PyTuple_New(len);
  411|      0|        if (tuple == NULL) {
  ------------------
  |  Branch (411:13): [True: 0, False: 0]
  ------------------
  412|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|      0|            return NULL;
  414|      0|        }
  415|      0|        Py_ssize_t i = 0, pos = 0;
  416|      0|        PyObject *item;
  417|      0|        Py_hash_t hash;
  418|      0|        while (_PySet_NextEntry(o, &pos, &item, &hash)) {
  ------------------
  |  Branch (418:16): [True: 0, False: 0]
  ------------------
  419|      0|            PyObject *k = const_cache_insert(const_cache, item, recursive);
  420|      0|            if (k == NULL) {
  ------------------
  |  Branch (420:17): [True: 0, False: 0]
  ------------------
  421|      0|                Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  423|      0|                return NULL;
  424|      0|            }
  425|      0|            PyObject *u;
  426|      0|            if (PyTuple_CheckExact(k)) {
  ------------------
  |  |   28|      0|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|      0|                u = Py_NewRef(PyTuple_GET_ITEM(k, 1));
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (37:38): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|      0|                Py_DECREF(k);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      0|            }
  430|      0|            else {
  431|      0|                u = k;
  432|      0|            }
  433|      0|            PyTuple_SET_ITEM(tuple, i, u);  // Steals reference of u.
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|      0|            i++;
  435|      0|        }
  436|       |
  437|       |        // Instead of rewriting o, we create new frozenset and embed in the
  438|       |        // key tuple.  Caller should get merged frozenset from the key tuple.
  439|      0|        PyObject *new = PyFrozenSet_New(tuple);
  440|      0|        Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  441|      0|        if (new == NULL) {
  ------------------
  |  Branch (441:13): [True: 0, False: 0]
  ------------------
  442|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  443|      0|            return NULL;
  444|      0|        }
  445|      0|        assert(PyTuple_GET_ITEM(key, 1) == o);
  ------------------
  |  Branch (445:9): [True: 0, False: 0]
  |  Branch (445:9): [True: 0, False: 0]
  ------------------
  446|      0|        Py_DECREF(o);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      0|        PyTuple_SET_ITEM(key, 1, new);
  ------------------
  |  |   40|      0|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  448|      0|    }
  449|       |
  450|   147k|    return key;
  451|   147k|}
compile.c:compute_code_flags:
 1435|  52.7k|{
 1436|  52.7k|    PySTEntryObject *ste = c->u->u_ste;
 1437|  52.7k|    int flags = 0;
 1438|  52.7k|    if (_PyST_IsFunctionLike(ste)) {
  ------------------
  |  Branch (1438:9): [True: 29.6k, False: 23.1k]
  ------------------
 1439|  29.6k|        flags |= CO_NEWLOCALS | CO_OPTIMIZED;
  ------------------
  |  |  123|  29.6k|#define CO_NEWLOCALS    0x0002
  ------------------
                      flags |= CO_NEWLOCALS | CO_OPTIMIZED;
  ------------------
  |  |  122|  29.6k|#define CO_OPTIMIZED    0x0001
  ------------------
 1440|  29.6k|        if (ste->ste_nested)
  ------------------
  |  Branch (1440:13): [True: 10.9k, False: 18.7k]
  ------------------
 1441|  10.9k|            flags |= CO_NESTED;
  ------------------
  |  |  126|  10.9k|#define CO_NESTED       0x0010
  ------------------
 1442|  29.6k|        if (ste->ste_generator && !ste->ste_coroutine)
  ------------------
  |  Branch (1442:13): [True: 428, False: 29.2k]
  |  Branch (1442:35): [True: 369, False: 59]
  ------------------
 1443|    369|            flags |= CO_GENERATOR;
  ------------------
  |  |  127|    369|#define CO_GENERATOR    0x0020
  ------------------
 1444|  29.6k|        if (ste->ste_generator && ste->ste_coroutine)
  ------------------
  |  Branch (1444:13): [True: 428, False: 29.2k]
  |  Branch (1444:35): [True: 59, False: 369]
  ------------------
 1445|     59|            flags |= CO_ASYNC_GENERATOR;
  ------------------
  |  |  133|     59|#define CO_ASYNC_GENERATOR      0x0200
  ------------------
 1446|  29.6k|        if (ste->ste_varargs)
  ------------------
  |  Branch (1446:13): [True: 2.65k, False: 27.0k]
  ------------------
 1447|  2.65k|            flags |= CO_VARARGS;
  ------------------
  |  |  124|  2.65k|#define CO_VARARGS      0x0004
  ------------------
 1448|  29.6k|        if (ste->ste_varkeywords)
  ------------------
  |  Branch (1448:13): [True: 815, False: 28.8k]
  ------------------
 1449|    815|            flags |= CO_VARKEYWORDS;
  ------------------
  |  |  125|    815|#define CO_VARKEYWORDS  0x0008
  ------------------
 1450|  29.6k|        if (ste->ste_has_docstring)
  ------------------
  |  Branch (1450:13): [True: 628, False: 29.0k]
  ------------------
 1451|    628|            flags |= CO_HAS_DOCSTRING;
  ------------------
  |  |  154|    628|#define CO_HAS_DOCSTRING 0x4000000
  ------------------
 1452|  29.6k|        if (ste->ste_method)
  ------------------
  |  Branch (1452:13): [True: 16, False: 29.6k]
  ------------------
 1453|     16|            flags |= CO_METHOD;
  ------------------
  |  |  157|     16|#define CO_METHOD  0x8000000
  ------------------
 1454|  29.6k|    }
 1455|       |
 1456|  52.7k|    if (ste->ste_coroutine && !ste->ste_generator) {
  ------------------
  |  Branch (1456:9): [True: 2.59k, False: 50.1k]
  |  Branch (1456:31): [True: 2.53k, False: 59]
  ------------------
 1457|  2.53k|        flags |= CO_COROUTINE;
  ------------------
  |  |  131|  2.53k|#define CO_COROUTINE            0x0080
  ------------------
 1458|  2.53k|    }
 1459|       |
 1460|       |    /* (Only) inherit compilerflags in PyCF_MASK */
 1461|  52.7k|    flags |= (c->c_flags.cf_flags & PyCF_MASK);
  ------------------
  |  |    6|  52.7k|#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
  |  |  ------------------
  |  |  |  |  139|  52.7k|#define CO_FUTURE_DIVISION      0x20000
  |  |  ------------------
  |  |               #define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
  |  |  ------------------
  |  |  |  |  140|  52.7k|#define CO_FUTURE_ABSOLUTE_IMPORT 0x40000 /* do absolute imports by default */
  |  |  ------------------
  |  |    7|  52.7k|                   CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
  |  |  ------------------
  |  |  |  |  141|  52.7k|#define CO_FUTURE_WITH_STATEMENT  0x80000
  |  |  ------------------
  |  |                                  CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
  |  |  ------------------
  |  |  |  |  142|  52.7k|#define CO_FUTURE_PRINT_FUNCTION  0x100000
  |  |  ------------------
  |  |    8|  52.7k|                   CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
  |  |  ------------------
  |  |  |  |  143|  52.7k|#define CO_FUTURE_UNICODE_LITERALS 0x200000
  |  |  ------------------
  |  |                                  CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
  |  |  ------------------
  |  |  |  |  145|  52.7k|#define CO_FUTURE_BARRY_AS_BDFL  0x400000
  |  |  ------------------
  |  |    9|  52.7k|                   CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
  |  |  ------------------
  |  |  |  |  146|  52.7k|#define CO_FUTURE_GENERATOR_STOP  0x800000
  |  |  ------------------
  |  |                                  CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
  |  |  ------------------
  |  |  |  |  147|  52.7k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  |  |  ------------------
  ------------------
 1462|       |
 1463|  52.7k|    return flags;
 1464|  52.7k|}
compile.c:optimize_and_assemble_code_unit:
 1469|  52.7k|{
 1470|  52.7k|    cfg_builder *g = NULL;
 1471|  52.7k|    instr_sequence optimized_instrs;
 1472|  52.7k|    memset(&optimized_instrs, 0, sizeof(instr_sequence));
 1473|       |
 1474|  52.7k|    PyCodeObject *co = NULL;
 1475|  52.7k|    PyObject *consts = consts_dict_keys_inorder(u->u_metadata.u_consts);
 1476|  52.7k|    if (consts == NULL) {
  ------------------
  |  Branch (1476:9): [True: 0, False: 52.7k]
  ------------------
 1477|      0|        goto error;
 1478|      0|    }
 1479|  52.7k|    g = _PyCfg_FromInstructionSequence(u->u_instr_sequence);
 1480|  52.7k|    if (g == NULL) {
  ------------------
  |  Branch (1480:9): [True: 0, False: 52.7k]
  ------------------
 1481|      0|        goto error;
 1482|      0|    }
 1483|  52.7k|    int nlocals = (int)PyDict_GET_SIZE(u->u_metadata.u_varnames);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1484|  52.7k|    int nparams = (int)PyList_GET_SIZE(u->u_ste->ste_varnames);
  ------------------
  |  |   38|  52.7k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1485|  52.7k|    assert(u->u_metadata.u_firstlineno);
  ------------------
  |  Branch (1485:5): [True: 52.7k, False: 0]
  ------------------
 1486|       |
 1487|  52.7k|    if (_PyCfg_OptimizeCodeUnit(g, consts, const_cache, nlocals,
  ------------------
  |  Branch (1487:9): [True: 0, False: 52.7k]
  ------------------
 1488|  52.7k|                                nparams, u->u_metadata.u_firstlineno) < 0) {
 1489|      0|        goto error;
 1490|      0|    }
 1491|       |
 1492|  52.7k|    int stackdepth;
 1493|  52.7k|    int nlocalsplus;
 1494|  52.7k|    if (_PyCfg_OptimizedCfgToInstructionSequence(g, &u->u_metadata,
  ------------------
  |  Branch (1494:9): [True: 0, False: 52.7k]
  ------------------
 1495|  52.7k|                                                 &stackdepth, &nlocalsplus,
 1496|  52.7k|                                                 &optimized_instrs) < 0) {
 1497|      0|        goto error;
 1498|      0|    }
 1499|       |
 1500|       |    /** Assembly **/
 1501|  52.7k|    co = _PyAssemble_MakeCodeObject(&u->u_metadata, const_cache, consts,
 1502|  52.7k|                                    stackdepth, &optimized_instrs, nlocalsplus,
 1503|  52.7k|                                    code_flags, filename);
 1504|       |
 1505|  52.7k|error:
 1506|  52.7k|    Py_XDECREF(consts);
  ------------------
  |  |  524|  52.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1507|  52.7k|    PyInstructionSequence_Fini(&optimized_instrs);
 1508|  52.7k|    _PyCfgBuilder_Free(g);
 1509|  52.7k|    return co;
 1510|  52.7k|}
compile.c:new_compiler:
  173|  10.8k|{
  174|  10.8k|    compiler *c = PyMem_Calloc(1, sizeof(compiler));
  175|  10.8k|    if (c == NULL) {
  ------------------
  |  Branch (175:9): [True: 0, False: 10.8k]
  ------------------
  176|      0|        PyErr_NoMemory();
  177|      0|        return NULL;
  178|      0|    }
  179|  10.8k|    if (compiler_setup(c, mod, filename, pflags, optimize, arena, module) < 0) {
  ------------------
  |  Branch (179:9): [True: 268, False: 10.5k]
  ------------------
  180|    268|        compiler_free(c);
  181|    268|        return NULL;
  182|    268|    }
  183|  10.5k|    return c;
  184|  10.8k|}
compile.c:compiler_setup:
  114|  10.8k|{
  115|  10.8k|    PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
  ------------------
  |  |   33|  10.8k|    (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
  |  |  ------------------
  |  |  |  |   24|  10.8k|#define PY_MINOR_VERSION        16
  |  |  ------------------
  ------------------
  116|       |
  117|  10.8k|    c->c_const_cache = PyDict_New();
  118|  10.8k|    if (!c->c_const_cache) {
  ------------------
  |  Branch (118:9): [True: 0, False: 10.8k]
  ------------------
  119|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  120|      0|    }
  121|       |
  122|  10.8k|    c->c_stack = PyList_New(0);
  123|  10.8k|    if (!c->c_stack) {
  ------------------
  |  Branch (123:9): [True: 0, False: 10.8k]
  ------------------
  124|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  125|      0|    }
  126|       |
  127|  10.8k|    c->c_filename = Py_NewRef(filename);
  ------------------
  |  |  550|  10.8k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|  10.8k|    if (!_PyFuture_FromAST(mod, filename, &c->c_future)) {
  ------------------
  |  Branch (128:9): [True: 14, False: 10.8k]
  ------------------
  129|     14|        return ERROR;
  ------------------
  |  |   37|     14|#define ERROR -1
  ------------------
  130|     14|    }
  131|  10.8k|    c->c_module = Py_XNewRef(module);
  ------------------
  |  |  551|  10.8k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|  10.8k|    if (!flags) {
  ------------------
  |  Branch (132:9): [True: 0, False: 10.8k]
  ------------------
  133|      0|        flags = &local_flags;
  134|      0|    }
  135|  10.8k|    int merged = c->c_future.ff_features | flags->cf_flags;
  136|  10.8k|    c->c_future.ff_features = merged;
  137|  10.8k|    flags->cf_flags = merged;
  138|  10.8k|    c->c_flags = *flags;
  139|  10.8k|    c->c_optimize = (optimize == -1) ? _Py_GetConfig()->optimization_level : optimize;
  ------------------
  |  Branch (139:21): [True: 3.13k, False: 7.70k]
  ------------------
  140|  10.8k|    c->c_save_nested_seqs = false;
  141|       |
  142|  10.8k|    if (!_PyAST_Preprocess(mod, arena, filename, c->c_optimize, merged,
  ------------------
  |  Branch (142:9): [True: 0, False: 10.8k]
  ------------------
  143|  10.8k|                           0, 1, module))
  144|      0|    {
  145|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  146|      0|    }
  147|  10.8k|    c->c_st = _PySymtable_Build(mod, filename, &c->c_future);
  148|  10.8k|    if (c->c_st == NULL) {
  ------------------
  |  Branch (148:9): [True: 254, False: 10.5k]
  ------------------
  149|    254|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (149:13): [True: 0, False: 254]
  ------------------
  150|      0|            PyErr_SetString(PyExc_SystemError, "no symtable");
  151|      0|        }
  152|    254|        return ERROR;
  ------------------
  |  |   37|    254|#define ERROR -1
  ------------------
  153|    254|    }
  154|  10.5k|    return SUCCESS;
  ------------------
  |  |   36|  10.5k|#define SUCCESS 0
  ------------------
  155|  10.8k|}
compile.c:compiler_mod:
  967|  10.5k|{
  968|  10.5k|    PyCodeObject *co = NULL;
  969|  10.5k|    int addNone = mod->kind != Expression_kind;
  970|  10.5k|    assert(c->u == NULL);
  ------------------
  |  Branch (970:5): [True: 10.5k, False: 0]
  ------------------
  971|  10.5k|    if (compiler_codegen(c, mod) < 0) {
  ------------------
  |  Branch (971:9): [True: 502, False: 10.0k]
  ------------------
  972|    502|        goto finally;
  973|    502|    }
  974|  10.0k|    co = _PyCompile_OptimizeAndAssemble(c, addNone);
  975|  10.5k|finally:
  976|  10.5k|    if (c->u != NULL) {
  ------------------
  |  Branch (976:9): [True: 10.5k, False: 0]
  ------------------
  977|  10.5k|        _PyCompile_ExitScope(c);
  978|  10.5k|    }
  979|  10.5k|    return co;
  980|  10.0k|}
compile.c:compiler_free:
  159|  10.8k|{
  160|  10.8k|    if (c->c_st) {
  ------------------
  |  Branch (160:9): [True: 10.5k, False: 268]
  ------------------
  161|  10.5k|        _PySymtable_Free(c->c_st);
  162|  10.5k|    }
  163|  10.8k|    Py_XDECREF(c->c_filename);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  10.8k|    Py_XDECREF(c->c_module);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|  10.8k|    Py_XDECREF(c->c_const_cache);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  10.8k|    Py_XDECREF(c->c_stack);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|  10.8k|    PyMem_Free(c);
  168|  10.8k|}
compile.c:compiler_codegen:
  937|  10.5k|{
  938|  10.5k|    RETURN_IF_ERROR(_PyCodegen_EnterAnonymousScope(c, mod));
  ------------------
  |  |   40|  10.5k|    do {                    \
  |  |   41|  10.5k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 0, False: 10.5k]
  |  |  ------------------
  |  |   42|      0|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|      0|#define ERROR -1
  |  |  ------------------
  |  |   43|      0|        }                   \
  |  |   44|  10.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 10.5k]
  |  |  ------------------
  ------------------
  939|  10.5k|    assert(c->u->u_scope_type == COMPILE_SCOPE_MODULE);
  ------------------
  |  Branch (939:5): [True: 10.5k, False: 0]
  ------------------
  940|  10.5k|    switch (mod->kind) {
  941|  7.26k|    case Module_kind: {
  ------------------
  |  Branch (941:5): [True: 7.26k, False: 3.31k]
  ------------------
  942|  7.26k|        asdl_stmt_seq *stmts = mod->v.Module.body;
  943|  7.26k|        RETURN_IF_ERROR(_PyCodegen_Module(c, start_location(stmts), stmts, false));
  ------------------
  |  |   40|  7.26k|    do {                    \
  |  |   41|  7.26k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 341, False: 6.92k]
  |  |  ------------------
  |  |   42|    341|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|    341|#define ERROR -1
  |  |  ------------------
  |  |   43|    341|        }                   \
  |  |   44|  7.26k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 6.92k]
  |  |  ------------------
  ------------------
  944|  6.92k|        break;
  945|  7.26k|    }
  946|  6.92k|    case Interactive_kind: {
  ------------------
  |  Branch (946:5): [True: 1.80k, False: 8.77k]
  ------------------
  947|  1.80k|        c->c_interactive = 1;
  948|  1.80k|        asdl_stmt_seq *stmts = mod->v.Interactive.body;
  949|  1.80k|        RETURN_IF_ERROR(_PyCodegen_Module(c, start_location(stmts), stmts, true));
  ------------------
  |  |   40|  1.80k|    do {                    \
  |  |   41|  1.80k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 121, False: 1.68k]
  |  |  ------------------
  |  |   42|    121|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|    121|#define ERROR -1
  |  |  ------------------
  |  |   43|    121|        }                   \
  |  |   44|  1.80k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 1.68k]
  |  |  ------------------
  ------------------
  950|  1.68k|        break;
  951|  1.80k|    }
  952|  1.68k|    case Expression_kind: {
  ------------------
  |  Branch (952:5): [True: 1.50k, False: 9.07k]
  ------------------
  953|  1.50k|        RETURN_IF_ERROR(_PyCodegen_Expression(c, mod->v.Expression.body));
  ------------------
  |  |   40|  1.50k|    do {                    \
  |  |   41|  1.50k|        if ((X) == -1) {    \
  |  |  ------------------
  |  |  |  Branch (41:13): [True: 40, False: 1.46k]
  |  |  ------------------
  |  |   42|     40|            return ERROR;   \
  |  |  ------------------
  |  |  |  |   37|     40|#define ERROR -1
  |  |  ------------------
  |  |   43|     40|        }                   \
  |  |   44|  1.50k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (44:14): [Folded, False: 1.46k]
  |  |  ------------------
  ------------------
  954|  1.46k|        break;
  955|  1.50k|    }
  956|  1.46k|    default: {
  ------------------
  |  Branch (956:5): [True: 0, False: 10.5k]
  ------------------
  957|      0|        PyErr_Format(PyExc_SystemError,
  958|      0|                     "module kind %d should not be possible",
  959|      0|                     mod->kind);
  960|      0|        return ERROR;
  ------------------
  |  |   37|      0|#define ERROR -1
  ------------------
  961|  1.50k|    }}
  962|  10.0k|    return SUCCESS;
  ------------------
  |  |   36|  10.0k|#define SUCCESS 0
  ------------------
  963|  10.5k|}
compile.c:start_location:
  922|  9.07k|{
  923|  9.07k|    if (asdl_seq_LEN(stmts) > 0) {
  ------------------
  |  |   83|  9.07k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  18.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 108, False: 8.96k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (923:9): [True: 8.96k, False: 108]
  ------------------
  924|       |        /* Set current line number to the line number of first statement.
  925|       |         * This way line number for SETUP_ANNOTATIONS will always
  926|       |         * coincide with the line number of first "real" statement in module.
  927|       |         * If body is empty, then lineno will be set later in the assembly stage.
  928|       |         */
  929|  8.96k|        stmt_ty st = (stmt_ty)asdl_seq_GET(stmts, 0);
  ------------------
  |  |   82|  8.96k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  8.96k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  930|  8.96k|        return SRC_LOCATION_FROM_AST(st);
  ------------------
  |  |   58|  8.96k|    (_Py_SourceLocation){ \
  |  |   59|  8.96k|               .lineno = (n)->lineno, \
  |  |   60|  8.96k|               .end_lineno = (n)->end_lineno, \
  |  |   61|  8.96k|               .col_offset = (n)->col_offset, \
  |  |   62|  8.96k|               .end_col_offset = (n)->end_col_offset }
  ------------------
  931|  8.96k|    }
  932|    108|    return (const _Py_SourceLocation){1, 1, 0, 0};
  933|  9.07k|}
compile.c:consts_dict_keys_inorder:
 1410|  52.7k|{
 1411|  52.7k|    PyObject *consts, *k, *v;
 1412|  52.7k|    Py_ssize_t i, pos = 0, size = PyDict_GET_SIZE(dict);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|       |
 1414|  52.7k|    consts = PyList_New(size);   /* PyCode_Optimize() requires a list */
 1415|  52.7k|    if (consts == NULL)
  ------------------
  |  Branch (1415:9): [True: 0, False: 52.7k]
  ------------------
 1416|      0|        return NULL;
 1417|   330k|    while (PyDict_Next(dict, &pos, &k, &v)) {
  ------------------
  |  Branch (1417:12): [True: 277k, False: 52.7k]
  ------------------
 1418|   277k|        assert(PyLong_CheckExact(v));
  ------------------
  |  Branch (1418:9): [True: 277k, False: 0]
  ------------------
 1419|   277k|        i = PyLong_AsLong(v);
 1420|       |        /* The keys of the dictionary can be tuples wrapping a constant.
 1421|       |         * (see _PyCompile_DictAddObj and _PyCode_ConstantKey). In that case
 1422|       |         * the object we want is always second. */
 1423|   277k|        if (PyTuple_CheckExact(k)) {
  ------------------
  |  |   28|   277k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|   277k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   277k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 34.9k, False: 242k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|  34.9k|            k = PyTuple_GET_ITEM(k, 1);
  ------------------
  |  |   29|  34.9k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  34.9k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  34.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1424:17): [True: 34.9k, False: 0]
  ------------------
 1425|  34.9k|        }
 1426|   277k|        assert(i < size);
  ------------------
  |  Branch (1426:9): [True: 277k, False: 0]
  ------------------
 1427|   277k|        assert(i >= 0);
  ------------------
  |  Branch (1427:9): [True: 277k, False: 0]
  ------------------
 1428|   277k|        PyList_SET_ITEM(consts, i, Py_NewRef(k));
  ------------------
  |  |   50|   277k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   277k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   277k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|   277k|    }
 1430|  52.7k|    return consts;
 1431|  52.7k|}

initconfig.c:config_dict_get:
   20|    144|{
   21|    144|    PyObject *item;
   22|    144|    if (_config_dict_get(dict, name, &item) < 0) {
  ------------------
  |  Branch (22:9): [True: 0, False: 144]
  ------------------
   23|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (23:13): [True: 0, False: 0]
  ------------------
   24|      0|            PyErr_Format(PyExc_ValueError, "missing config key: %s", name);
   25|      0|        }
   26|      0|        return NULL;
   27|      0|    }
   28|    144|    return item;
   29|    144|}
initconfig.c:_config_dict_get:
    4|    144|{
    5|    144|    PyObject *item;
    6|    144|    if (PyDict_GetItemStringRef(dict, name, &item) < 0) {
  ------------------
  |  Branch (6:9): [True: 0, False: 144]
  ------------------
    7|      0|        return -1;
    8|      0|    }
    9|    144|    if (item == NULL) {
  ------------------
  |  Branch (9:9): [True: 0, False: 144]
  ------------------
   10|       |        // We do not set an exception.
   11|      0|        return -1;
   12|      0|    }
   13|    144|    *p_item = item;
   14|    144|    return 0;
   15|    144|}

PyContextVar_New:
  307|      2|{
  308|      2|    PyObject *pyname = PyUnicode_FromString(name);
  309|      2|    if (pyname == NULL) {
  ------------------
  |  Branch (309:9): [True: 0, False: 2]
  ------------------
  310|      0|        return NULL;
  311|      0|    }
  312|      2|    PyContextVar *var = contextvar_new(pyname, def);
  313|      2|    Py_DECREF(pyname);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|      2|    return (PyObject *)var;
  315|      2|}
PyContextVar_Get:
  320|  48.4k|{
  321|  48.4k|    ENSURE_ContextVar(ovar, -1)
  ------------------
  |  |   31|  48.4k|    if (!PyContextVar_CheckExact(o)) {                              \
  |  |  ------------------
  |  |  |  |   19|  48.4k|#define PyContextVar_CheckExact(o) Py_IS_TYPE((o), &PyContextVar_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  48.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (31:9): [True: 0, False: 48.4k]
  |  |  ------------------
  |  |   32|      0|        PyErr_SetString(PyExc_TypeError,                            \
  |  |   33|      0|                       "an instance of ContextVar was expected");   \
  |  |   34|      0|        return err_ret;                                             \
  |  |   35|      0|    }
  ------------------
  322|  48.4k|    PyContextVar *var = (PyContextVar *)ovar;
  323|       |
  324|  48.4k|    PyThreadState *ts = _PyThreadState_GET();
  325|  48.4k|    assert(ts != NULL);
  ------------------
  |  Branch (325:5): [True: 48.4k, False: 0]
  ------------------
  326|  48.4k|    if (ts->context == NULL) {
  ------------------
  |  Branch (326:9): [True: 28.0k, False: 20.4k]
  ------------------
  327|  28.0k|        goto not_found;
  328|  28.0k|    }
  329|       |
  330|  20.4k|#ifndef Py_GIL_DISABLED
  331|  20.4k|    if (var->var_cached != NULL &&
  ------------------
  |  Branch (331:9): [True: 0, False: 20.4k]
  ------------------
  332|      0|            var->var_cached_tsid == ts->id &&
  ------------------
  |  Branch (332:13): [True: 0, False: 0]
  ------------------
  333|      0|            var->var_cached_tsver == ts->context_ver)
  ------------------
  |  Branch (333:13): [True: 0, False: 0]
  ------------------
  334|      0|    {
  335|      0|        *val = var->var_cached;
  336|      0|        goto found;
  337|      0|    }
  338|  20.4k|#endif
  339|       |
  340|  20.4k|    assert(PyContext_CheckExact(ts->context));
  ------------------
  |  Branch (340:5): [True: 20.4k, False: 0]
  ------------------
  341|  20.4k|    PyHamtObject *vars = context_get_current_vars((PyContext *)ts->context);
  342|       |
  343|  20.4k|    PyObject *found = NULL;
  344|  20.4k|    int res = _PyHamt_Find(vars, (PyObject*)var, &found);
  345|  20.4k|    if (res < 0) {
  ------------------
  |  Branch (345:9): [True: 0, False: 20.4k]
  ------------------
  346|      0|        goto error;
  347|      0|    }
  348|  20.4k|    if (res == 1) {
  ------------------
  |  Branch (348:9): [True: 0, False: 20.4k]
  ------------------
  349|      0|        assert(found != NULL);
  ------------------
  |  Branch (349:9): [True: 0, False: 0]
  ------------------
  350|      0|#ifndef Py_GIL_DISABLED
  351|      0|        var->var_cached = found;  /* borrow */
  352|      0|        var->var_cached_tsid = ts->id;
  353|      0|        var->var_cached_tsver = ts->context_ver;
  354|      0|#endif
  355|       |
  356|      0|        *val = found;
  357|      0|        goto found;
  358|      0|    }
  359|       |
  360|  48.4k|not_found:
  361|  48.4k|    if (def == NULL) {
  ------------------
  |  Branch (361:9): [True: 48.4k, False: 0]
  ------------------
  362|  48.4k|        if (var->var_default != NULL) {
  ------------------
  |  Branch (362:13): [True: 0, False: 48.4k]
  ------------------
  363|      0|            *val = var->var_default;
  364|      0|            goto found;
  365|      0|        }
  366|       |
  367|  48.4k|        *val = NULL;
  368|  48.4k|        goto found;
  369|  48.4k|    }
  370|      0|    else {
  371|      0|        *val = def;
  372|      0|        goto found;
  373|      0|   }
  374|       |
  375|  48.4k|found:
  376|  48.4k|    Py_XINCREF(*val);
  ------------------
  |  |  514|  48.4k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  48.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|  48.4k|    return 0;
  378|       |
  379|      0|error:
  380|       |    *val = NULL;
  381|      0|    return -1;
  382|  48.4k|}
PyContextVar_Set:
  387|      1|{
  388|      1|    ENSURE_ContextVar(ovar, NULL)
  ------------------
  |  |   31|      1|    if (!PyContextVar_CheckExact(o)) {                              \
  |  |  ------------------
  |  |  |  |   19|      1|#define PyContextVar_CheckExact(o) Py_IS_TYPE((o), &PyContextVar_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      1|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (31:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   32|      0|        PyErr_SetString(PyExc_TypeError,                            \
  |  |   33|      0|                       "an instance of ContextVar was expected");   \
  |  |   34|      0|        return err_ret;                                             \
  |  |   35|      0|    }
  ------------------
  389|      1|    PyContextVar *var = (PyContextVar *)ovar;
  390|       |
  391|      1|    PyContext *ctx = context_get();
  392|      1|    if (ctx == NULL) {
  ------------------
  |  Branch (392:9): [True: 0, False: 1]
  ------------------
  393|      0|        return NULL;
  394|      0|    }
  395|       |
  396|      1|    PyObject *old_val = NULL;
  397|      1|    int found = _PyHamt_Find(context_get_current_vars(ctx), (PyObject *)var,
  398|      1|                             &old_val);
  399|      1|    if (found < 0) {
  ------------------
  |  Branch (399:9): [True: 0, False: 1]
  ------------------
  400|      0|        return NULL;
  401|      0|    }
  402|       |
  403|      1|    Py_XINCREF(old_val);
  ------------------
  |  |  514|      1|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|      1|    PyContextToken *tok = token_new(ctx, var, old_val);
  405|      1|    Py_XDECREF(old_val);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|      1|    if (tok == NULL) {
  ------------------
  |  Branch (406:9): [True: 0, False: 1]
  ------------------
  407|      0|        return NULL;
  408|      0|    }
  409|       |
  410|      1|    if (contextvar_set(var, val)) {
  ------------------
  |  Branch (410:9): [True: 0, False: 1]
  ------------------
  411|      0|        Py_DECREF(tok);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      0|        return NULL;
  413|      0|    }
  414|       |
  415|      1|    return (PyObject *)tok;
  416|      1|}
_PyContext_Init:
 1433|      2|{
 1434|      2|    PyObject *missing = get_token_missing();
 1435|      2|    assert(PyUnstable_IsImmortal(missing));
  ------------------
  |  Branch (1435:5): [True: 2, False: 0]
  ------------------
 1436|      2|    if (PyDict_SetItemString(
  ------------------
  |  Branch (1436:9): [True: 0, False: 2]
  ------------------
 1437|      2|        _PyType_GetDict(&PyContextToken_Type), "MISSING", missing))
 1438|      0|    {
 1439|      0|        Py_DECREF(missing);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1440|      0|        return _PyStatus_ERR("can't init context types");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1441|      0|    }
 1442|      2|    Py_DECREF(missing);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1443|       |
 1444|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1445|      2|}
context.c:context_get_current_vars:
   83|  20.4k|{
   84|       |    // ctx_vars written only by the owning thread, and read by other threads
   85|       |    // only under the context's lock, a plain (non-atomic) load is okay
   86|  20.4k|    PyHamtObject *vars = ctx->ctx_vars;
   87|  20.4k|    assert(vars != NULL);
  ------------------
  |  Branch (87:5): [True: 20.4k, False: 0]
  ------------------
   88|  20.4k|    return vars;
   89|  20.4k|}
context.c:context_new_empty:
  490|      1|{
  491|      1|    PyContext *ctx = _context_alloc();
  492|      1|    if (ctx == NULL) {
  ------------------
  |  Branch (492:9): [True: 0, False: 1]
  ------------------
  493|      0|        return NULL;
  494|      0|    }
  495|       |
  496|      1|    ctx->ctx_vars = _PyHamt_New();
  497|      1|    if (ctx->ctx_vars == NULL) {
  ------------------
  |  Branch (497:9): [True: 0, False: 1]
  ------------------
  498|      0|        Py_DECREF(ctx);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|      0|        return NULL;
  500|      0|    }
  501|       |
  502|      1|    _PyObject_GC_TRACK(ctx);
  ------------------
  |  |  505|      1|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|      1|    return ctx;
  504|      1|}
context.c:_context_alloc:
  470|      1|{
  471|      1|    PyContext *ctx = _Py_FREELIST_POP(PyContext, contexts);
  ------------------
  |  |   43|      1|    _Py_CAST(TYPE*, _PyFreeList_Pop(&_Py_freelists_GET()->NAME))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  472|      1|    if (ctx == NULL) {
  ------------------
  |  Branch (472:9): [True: 1, False: 0]
  ------------------
  473|      1|        ctx = PyObject_GC_New(PyContext, &PyContext_Type);
  ------------------
  |  |  181|      1|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  474|      1|        if (ctx == NULL) {
  ------------------
  |  Branch (474:13): [True: 0, False: 1]
  ------------------
  475|      0|            return NULL;
  476|      0|        }
  477|      1|    }
  478|       |
  479|      1|    ctx->ctx_vars = NULL;
  480|      1|    ctx->ctx_prev = NULL;
  481|      1|    ctx->ctx_entered = 0;
  482|      1|    ctx->ctx_weakreflist = NULL;
  483|       |
  484|      1|    return ctx;
  485|      1|}
context.c:context_get:
  524|      2|{
  525|      2|    PyThreadState *ts = _PyThreadState_GET();
  526|      2|    assert(ts != NULL);
  ------------------
  |  Branch (526:5): [True: 2, False: 0]
  ------------------
  527|      2|    PyContext *current_ctx = (PyContext *)ts->context;
  528|      2|    if (current_ctx == NULL) {
  ------------------
  |  Branch (528:9): [True: 1, False: 1]
  ------------------
  529|      1|        current_ctx = context_new_empty();
  530|      1|        if (current_ctx == NULL) {
  ------------------
  |  Branch (530:13): [True: 0, False: 1]
  ------------------
  531|      0|            return NULL;
  532|      0|        }
  533|      1|        ts->context = (PyObject *)current_ctx;
  534|      1|    }
  535|      2|    return current_ctx;
  536|      2|}
context.c:context_tp_traverse:
  572|     14|{
  573|     14|    PyContext *self = _PyContext_CAST(op);
  ------------------
  |  |  465|     14|#define _PyContext_CAST(op)     ((PyContext *)(op))
  ------------------
  574|     14|    Py_VISIT(self->ctx_prev);
  ------------------
  |  |  194|     14|    do {                                                                \
  |  |  195|     14|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 14]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
  575|     14|    Py_VISIT(self->ctx_vars);
  ------------------
  |  |  194|     14|    do {                                                                \
  |  |  195|     14|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 14, False: 0]
  |  |  ------------------
  |  |  196|     14|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     14|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 14]
  |  |  ------------------
  |  |  198|     14|                return vret;                                            \
  |  |  199|     14|        }                                                               \
  |  |  200|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
  576|     14|    return 0;
  577|     14|}
context.c:contextvar_set:
  858|      1|{
  859|      1|#ifndef Py_GIL_DISABLED
  860|      1|    var->var_cached = NULL;
  861|      1|    PyThreadState *ts = _PyThreadState_GET();
  862|      1|#endif
  863|       |
  864|      1|    PyContext *ctx = context_get();
  865|      1|    if (ctx == NULL) {
  ------------------
  |  Branch (865:9): [True: 0, False: 1]
  ------------------
  866|      0|        return -1;
  867|      0|    }
  868|       |
  869|      1|    PyHamtObject *new_vars = _PyHamt_Assoc(
  870|      1|        context_get_current_vars(ctx), (PyObject *)var, val);
  871|      1|    if (new_vars == NULL) {
  ------------------
  |  Branch (871:9): [True: 0, False: 1]
  ------------------
  872|      0|        return -1;
  873|      0|    }
  874|       |
  875|      1|    context_set_vars(ctx, new_vars);
  876|       |
  877|      1|#ifndef Py_GIL_DISABLED
  878|      1|    var->var_cached = val;  /* borrow */
  879|      1|    var->var_cached_tsid = ts->id;
  880|      1|    var->var_cached_tsver = ts->context_ver;
  881|      1|#endif
  882|      1|    return 0;
  883|      1|}
context.c:context_set_vars:
   95|      1|{
   96|      1|    PyHamtObject *old_vars;
   97|      1|    Py_BEGIN_CRITICAL_SECTION(ctx);
  ------------------
  |  |   51|      1|    {
  ------------------
   98|      1|    old_vars = ctx->ctx_vars;
   99|      1|    ctx->ctx_vars = new_vars;
  100|      1|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|      1|    }
  ------------------
  101|      1|    Py_XDECREF(old_vars);
  ------------------
  |  |  524|      1|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|      1|}
context.c:contextvar_new:
  943|      4|{
  944|      4|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|      4|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (944:9): [True: 0, False: 4]
  ------------------
  945|      0|        PyErr_SetString(PyExc_TypeError,
  946|      0|                        "context variable name must be a str");
  947|      0|        return NULL;
  948|      0|    }
  949|       |
  950|      4|    PyContextVar *var = PyObject_GC_New(PyContextVar, &PyContextVar_Type);
  ------------------
  |  |  181|      4|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  951|      4|    if (var == NULL) {
  ------------------
  |  Branch (951:9): [True: 0, False: 4]
  ------------------
  952|      0|        return NULL;
  953|      0|    }
  954|       |
  955|      4|    var->var_name = Py_NewRef(name);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  956|      4|    var->var_default = Py_XNewRef(def);
  ------------------
  |  |  551|      4|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  957|       |
  958|      4|#ifndef Py_GIL_DISABLED
  959|      4|    var->var_cached = NULL;
  960|      4|    var->var_cached_tsid = 0;
  961|      4|    var->var_cached_tsver = 0;
  962|      4|#endif
  963|       |
  964|      4|    var->var_hash = contextvar_generate_hash(var, name);
  965|      4|    if (var->var_hash == -1) {
  ------------------
  |  Branch (965:9): [True: 0, False: 4]
  ------------------
  966|      0|        Py_DECREF(var);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|      0|        return NULL;
  968|      0|    }
  969|       |
  970|      4|    if (_PyObject_GC_MAY_BE_TRACKED(name) ||
  ------------------
  |  Branch (970:9): [True: 0, False: 4]
  ------------------
  971|      4|            (def != NULL && _PyObject_GC_MAY_BE_TRACKED(def)))
  ------------------
  |  Branch (971:14): [True: 0, False: 4]
  |  Branch (971:29): [True: 0, False: 0]
  ------------------
  972|      0|    {
  973|      0|        PyObject_GC_Track(var);
  974|      0|    }
  975|      4|    return var;
  976|      4|}
context.c:contextvar_generate_hash:
  915|      4|{
  916|       |    /* Take hash of `name` and XOR it with the object's addr.
  917|       |
  918|       |       The structure of the tree is encoded in objects' hashes, which
  919|       |       means that sufficiently similar hashes would result in tall trees
  920|       |       with many Collision nodes.  Which would, in turn, result in slower
  921|       |       get and set operations.
  922|       |
  923|       |       The XORing helps to ensure that:
  924|       |
  925|       |       (1) sequentially allocated ContextVar objects have
  926|       |           different hashes;
  927|       |
  928|       |       (2) context variables with equal names have
  929|       |           different hashes.
  930|       |    */
  931|       |
  932|      4|    Py_hash_t name_hash = PyObject_Hash(name);
  933|      4|    if (name_hash == -1) {
  ------------------
  |  Branch (933:9): [True: 0, False: 4]
  ------------------
  934|      0|        return -1;
  935|      0|    }
  936|       |
  937|      4|    Py_hash_t res = Py_HashPointer(addr) ^ name_hash;
  938|      4|    return res == -1 ? -2 : res;
  ------------------
  |  Branch (938:12): [True: 0, False: 4]
  ------------------
  939|      4|}
context.c:contextvar_tp_hash:
 1037|  20.4k|{
 1038|  20.4k|    PyContextVar *self = _PyContextVar_CAST(op);
  ------------------
  |  |  985|  20.4k|#define _PyContextVar_CAST(op)  ((PyContextVar *)(op))
  ------------------
 1039|  20.4k|    return self->var_hash;
 1040|  20.4k|}
context.c:_contextvars_ContextVar_get_impl:
 1102|      1|{
 1103|      1|    PyObject *val;
 1104|      1|    if (PyContextVar_Get((PyObject *)self, default_value, &val) < 0) {
  ------------------
  |  Branch (1104:9): [True: 0, False: 1]
  ------------------
 1105|      0|        return NULL;
 1106|      0|    }
 1107|       |
 1108|      1|    if (val == NULL) {
  ------------------
  |  Branch (1108:9): [True: 1, False: 0]
  ------------------
 1109|      1|        PyErr_SetObject(PyExc_LookupError, (PyObject *)self);
 1110|      1|        return NULL;
 1111|      1|    }
 1112|       |
 1113|      0|    return val;
 1114|      1|}
context.c:_contextvars_ContextVar_set_impl:
 1134|      1|{
 1135|      1|    return PyContextVar_Set((PyObject *)self, value);
 1136|      1|}
context.c:contextvar_tp_new:
  990|      2|{
  991|      2|    static char *kwlist[] = {"", "default", NULL};
  992|      2|    PyObject *name;
  993|      2|    PyObject *def = NULL;
  994|       |
  995|      2|    if (!PyArg_ParseTupleAndKeywords(
  ------------------
  |  Branch (995:9): [True: 0, False: 2]
  ------------------
  996|      2|            args, kwds, "O|$O:ContextVar", kwlist, &name, &def))
  997|      0|    {
  998|      0|        return NULL;
  999|      0|    }
 1000|       |
 1001|      2|    return (PyObject *)contextvar_new(name, def);
 1002|      2|}
context.c:token_tp_dealloc:
 1244|      1|{
 1245|      1|    PyObject_GC_UnTrack(self);
 1246|      1|    (void)token_tp_clear(self);
 1247|      1|    Py_TYPE(self)->tp_free(self);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1248|      1|}
context.c:token_tp_clear:
 1224|      1|{
 1225|      1|    PyContextToken *self = _PyContextToken_CAST(op);
  ------------------
  |  | 1211|      1|#define _PyContextToken_CAST(op)    ((PyContextToken *)(op))
  ------------------
 1226|      1|    Py_CLEAR(self->tok_ctx);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 0]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1227|      1|    Py_CLEAR(self->tok_var);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 1, False: 0]
  |  |  ------------------
  |  |  488|      1|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      1|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      1|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1228|       |    Py_CLEAR(self->tok_oldval);
  ------------------
  |  |  484|      1|    do { \
  |  |  485|      1|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      1|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      1|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      1|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      1|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 1]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      1|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 1]
  |  |  ------------------
  ------------------
 1229|      1|    return 0;
 1230|      1|}
context.c:token_new:
 1370|      1|{
 1371|      1|    PyContextToken *tok = PyObject_GC_New(PyContextToken, &PyContextToken_Type);
  ------------------
  |  |  181|      1|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1372|      1|    if (tok == NULL) {
  ------------------
  |  Branch (1372:9): [True: 0, False: 1]
  ------------------
 1373|      0|        return NULL;
 1374|      0|    }
 1375|       |
 1376|      1|    tok->tok_ctx = (PyContext*)Py_NewRef(ctx);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1377|       |
 1378|      1|    tok->tok_var = (PyContextVar*)Py_NewRef(var);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1379|       |
 1380|      1|    tok->tok_oldval = Py_XNewRef(val);
  ------------------
  |  |  551|      1|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1381|       |
 1382|      1|    tok->tok_used = 0;
 1383|       |
 1384|      1|    PyObject_GC_Track(tok);
 1385|      1|    return tok;
 1386|      1|}
context.c:get_token_missing:
 1423|      2|{
 1424|      2|    return (PyObject *)&_Py_SINGLETON(context_token_missing);
  ------------------
  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
 1425|      2|}

_Py_xi_global_state_init:
 3121|      2|{
 3122|      2|    assert(state != NULL);
  ------------------
  |  Branch (3122:5): [True: 2, False: 0]
  ------------------
 3123|      2|    xid_lookup_init(&state->data_lookup);
 3124|      2|    return 0;
 3125|      2|}
_Py_xi_state_init:
 3136|      2|{
 3137|      2|    assert(state != NULL);
  ------------------
  |  Branch (3137:5): [True: 2, False: 0]
  ------------------
 3138|      2|    assert(interp == NULL || state == _PyXI_GET_STATE(interp));
  ------------------
  |  Branch (3138:5): [True: 2, False: 0]
  |  Branch (3138:5): [True: 0, False: 0]
  ------------------
 3139|       |
 3140|       |    // Initialize pickle function cache (before any fallible ops).
 3141|      2|    state->pickle.dumps = NULL;
 3142|      2|    state->pickle.loads = NULL;
 3143|       |
 3144|      2|    xid_lookup_init(&state->data_lookup);
 3145|       |
 3146|       |    // Initialize exceptions.
 3147|      2|    if (interp != NULL) {
  ------------------
  |  Branch (3147:9): [True: 0, False: 2]
  ------------------
 3148|      0|        if (init_static_exctypes(&state->exceptions, interp) < 0) {
  ------------------
  |  Branch (3148:13): [True: 0, False: 0]
  ------------------
 3149|      0|            fini_heap_exctypes(&state->exceptions);
 3150|      0|            return -1;
 3151|      0|        }
 3152|      0|    }
 3153|      2|    if (init_heap_exctypes(&state->exceptions) < 0) {
  ------------------
  |  Branch (3153:9): [True: 0, False: 2]
  ------------------
 3154|      0|        return -1;
 3155|      0|    }
 3156|       |
 3157|      2|    return 0;
 3158|      2|}
_PyXI_Init:
 3182|      2|{
 3183|      2|    if (_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (3183:9): [True: 2, False: 0]
  ------------------
 3184|      2|        _PyXI_global_state_t *global_state = _PyXI_GET_GLOBAL_STATE(interp);
  ------------------
  |  |  276|      2|#define _PyXI_GET_GLOBAL_STATE(interp) (&(interp)->runtime->xi)
  ------------------
 3185|      2|        if (global_state == NULL) {
  ------------------
  |  Branch (3185:13): [True: 0, False: 2]
  ------------------
 3186|      0|            PyErr_PrintEx(0);
 3187|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3188|      0|                    "failed to get global cross-interpreter state");
 3189|      0|        }
 3190|      2|        if (_Py_xi_global_state_init(global_state) < 0) {
  ------------------
  |  Branch (3190:13): [True: 0, False: 2]
  ------------------
 3191|      0|            PyErr_PrintEx(0);
 3192|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3193|      0|                    "failed to initialize  global cross-interpreter state");
 3194|      0|        }
 3195|      2|    }
 3196|       |
 3197|      2|    _PyXI_state_t *state = _PyXI_GET_STATE(interp);
  ------------------
  |  |  277|      2|#define _PyXI_GET_STATE(interp) (&(interp)->xi)
  ------------------
 3198|      2|    if (state == NULL) {
  ------------------
  |  Branch (3198:9): [True: 0, False: 2]
  ------------------
 3199|      0|        PyErr_PrintEx(0);
 3200|      0|        return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3201|      0|                "failed to get interpreter's cross-interpreter state");
 3202|      0|    }
 3203|       |    // The static types were already initialized in _PyXI_InitTypes(),
 3204|       |    // so we pass in NULL here to avoid initializing them again.
 3205|      2|    if (_Py_xi_state_init(state, NULL) < 0) {
  ------------------
  |  Branch (3205:9): [True: 0, False: 2]
  ------------------
 3206|      0|        PyErr_PrintEx(0);
 3207|      0|        return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3208|      0|                "failed to initialize interpreter's cross-interpreter state");
 3209|      0|    }
 3210|       |
 3211|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3212|      2|}
_PyXI_InitTypes:
 3239|      2|{
 3240|      2|    if (init_static_exctypes(&_PyXI_GET_STATE(interp)->exceptions, interp) < 0) {
  ------------------
  |  |  277|      2|#define _PyXI_GET_STATE(interp) (&(interp)->xi)
  ------------------
  |  Branch (3240:9): [True: 0, False: 2]
  ------------------
 3241|      0|        PyErr_PrintEx(0);
 3242|      0|        return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3243|      0|                "failed to initialize the cross-interpreter exception types");
 3244|      0|    }
 3245|       |    // We would initialize heap types here too but that leads to ref leaks.
 3246|       |    // Instead, we initialize them in _PyXI_Init().
 3247|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3248|      2|}

crossinterp.c:_xidregistry_add_type:
  254|     14|{
  255|     14|    dlregitem_t *newhead = PyMem_RawMalloc(sizeof(dlregitem_t));
  256|     14|    if (newhead == NULL) {
  ------------------
  |  Branch (256:9): [True: 0, False: 14]
  ------------------
  257|      0|        return -1;
  258|      0|    }
  259|     14|    assert((getdata.basic == NULL) != (getdata.fallback == NULL));
  ------------------
  |  Branch (259:5): [True: 14, False: 0]
  ------------------
  260|     14|    *newhead = (dlregitem_t){
  261|       |        // We do not keep a reference, to avoid keeping the class alive.
  262|     14|        .cls = cls,
  263|     14|        .refcount = 1,
  264|     14|        .getdata = getdata,
  265|     14|    };
  266|     14|    if (cls->tp_flags & Py_TPFLAGS_HEAPTYPE) {
  ------------------
  |  |  503|     14|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (266:9): [True: 0, False: 14]
  ------------------
  267|       |        // XXX Assign a callback to clear the entry from the registry?
  268|      0|        newhead->weakref = PyWeakref_NewRef((PyObject *)cls, NULL);
  269|      0|        if (newhead->weakref == NULL) {
  ------------------
  |  Branch (269:13): [True: 0, False: 0]
  ------------------
  270|      0|            PyMem_RawFree(newhead);
  271|      0|            return -1;
  272|      0|        }
  273|      0|    }
  274|     14|    newhead->next = xidregistry->head;
  275|     14|    if (newhead->next != NULL) {
  ------------------
  |  Branch (275:9): [True: 12, False: 2]
  ------------------
  276|     12|        newhead->next->prev = newhead;
  277|     12|    }
  278|     14|    xidregistry->head = newhead;
  279|     14|    return 0;
  280|     14|}
crossinterp.c:xid_lookup_init:
   23|      4|{
   24|      4|    _xidregistry_init(&state->registry);
   25|      4|}
crossinterp.c:_xidregistry_init:
  145|      4|{
  146|      4|    if (registry->initialized) {
  ------------------
  |  Branch (146:9): [True: 0, False: 4]
  ------------------
  147|      0|        return;
  148|      0|    }
  149|      4|    registry->initialized = 1;
  150|       |
  151|      4|    if (registry->global) {
  ------------------
  |  Branch (151:9): [True: 2, False: 2]
  ------------------
  152|       |        // Registering the builtins is cheap so we don't bother doing it lazily.
  153|      2|        assert(registry->head == NULL);
  ------------------
  |  Branch (153:9): [True: 2, False: 0]
  ------------------
  154|      2|        _register_builtins_for_crossinterpreter_data(registry);
  155|      2|    }
  156|      4|}
crossinterp.c:_register_builtins_for_crossinterpreter_data:
  791|      2|{
  792|      2|#define REGISTER(TYPE, GETDATA) \
  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  795|      2|#define REGISTER_FALLBACK(TYPE, GETDATA) \
  796|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  797|      2|                          ((_PyXIData_getdata_t){.fallback=(GETDATA)}))
  798|       |    // None
  799|      2|    if (REGISTER(Py_TYPE(Py_None), _none_shared) != 0) {
  ------------------
  |  |  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  ------------------
  |  Branch (799:9): [True: 0, False: 2]
  ------------------
  800|      0|        Py_FatalError("could not register None for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  801|      0|    }
  802|       |
  803|       |    // int
  804|      2|    if (REGISTER(&PyLong_Type, _long_shared) != 0) {
  ------------------
  |  |  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  ------------------
  |  Branch (804:9): [True: 0, False: 2]
  ------------------
  805|      0|        Py_FatalError("could not register int for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  806|      0|    }
  807|       |
  808|       |    // bytes
  809|      2|    if (REGISTER(&PyBytes_Type, _PyBytes_GetXIData) != 0) {
  ------------------
  |  |  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  ------------------
  |  Branch (809:9): [True: 0, False: 2]
  ------------------
  810|      0|        Py_FatalError("could not register bytes for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  811|      0|    }
  812|       |
  813|       |    // str
  814|      2|    if (REGISTER(&PyUnicode_Type, _str_shared) != 0) {
  ------------------
  |  |  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  ------------------
  |  Branch (814:9): [True: 0, False: 2]
  ------------------
  815|      0|        Py_FatalError("could not register str for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  816|      0|    }
  817|       |
  818|       |    // bool
  819|      2|    if (REGISTER(&PyBool_Type, _bool_shared) != 0) {
  ------------------
  |  |  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  ------------------
  |  Branch (819:9): [True: 0, False: 2]
  ------------------
  820|      0|        Py_FatalError("could not register bool for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  821|      0|    }
  822|       |
  823|       |    // float
  824|      2|    if (REGISTER(&PyFloat_Type, _float_shared) != 0) {
  ------------------
  |  |  793|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  794|      2|                          ((_PyXIData_getdata_t){.basic=(GETDATA)}))
  ------------------
  |  Branch (824:9): [True: 0, False: 2]
  ------------------
  825|      0|        Py_FatalError("could not register float for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  826|      0|    }
  827|       |
  828|       |    // tuple
  829|      2|    if (REGISTER_FALLBACK(&PyTuple_Type, _tuple_shared) != 0) {
  ------------------
  |  |  796|      2|    _xidregistry_add_type(xidregistry, (PyTypeObject *)TYPE, \
  |  |  797|      2|                          ((_PyXIData_getdata_t){.fallback=(GETDATA)}))
  ------------------
  |  Branch (829:9): [True: 0, False: 2]
  ------------------
  830|      0|        Py_FatalError("could not register tuple for cross-interpreter sharing");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  831|      0|    }
  832|       |
  833|       |    // For now, we do not register PyCode_Type or PyFunction_Type.
  834|      2|#undef REGISTER
  835|      2|#undef REGISTER_FALLBACK
  836|      2|}

crossinterp.c:init_static_exctypes:
  139|      2|{
  140|      2|    assert(state == &_PyXI_GET_STATE(interp)->exceptions);
  ------------------
  |  Branch (140:5): [True: 2, False: 0]
  ------------------
  141|      2|    PyTypeObject *base = (PyTypeObject *)PyExc_Exception;
  142|       |
  143|       |    // PyExc_InterpreterError
  144|      2|    _PyExc_InterpreterError.tp_base = base;
  145|      2|    _PyExc_InterpreterError.tp_traverse = base->tp_traverse;
  146|      2|    _PyExc_InterpreterError.tp_clear = base->tp_clear;
  147|      2|    if (_PyStaticType_InitBuiltin(interp, &_PyExc_InterpreterError) < 0) {
  ------------------
  |  Branch (147:9): [True: 0, False: 2]
  ------------------
  148|      0|        goto error;
  149|      0|    }
  150|      2|    state->PyExc_InterpreterError = (PyObject *)&_PyExc_InterpreterError;
  151|       |
  152|       |    // PyExc_InterpreterNotFoundError
  153|      2|    _PyExc_InterpreterNotFoundError.tp_traverse = base->tp_traverse;
  154|      2|    _PyExc_InterpreterNotFoundError.tp_clear = base->tp_clear;
  155|      2|    if (_PyStaticType_InitBuiltin(interp, &_PyExc_InterpreterNotFoundError) < 0) {
  ------------------
  |  Branch (155:9): [True: 0, False: 2]
  ------------------
  156|      0|        goto error;
  157|      0|    }
  158|      2|    state->PyExc_InterpreterNotFoundError =
  159|      2|            (PyObject *)&_PyExc_InterpreterNotFoundError;
  160|       |
  161|      2|    return 0;
  162|       |
  163|      0|error:
  164|      0|    fini_static_exctypes(state, interp);
  165|      0|    return -1;
  166|      2|}
crossinterp.c:init_heap_exctypes:
  184|      2|{
  185|      2|    if (_init_notshareableerror(state) < 0) {
  ------------------
  |  Branch (185:9): [True: 0, False: 2]
  ------------------
  186|      0|        goto error;
  187|      0|    }
  188|      2|    return 0;
  189|       |
  190|      0|error:
  191|      0|    fini_heap_exctypes(state);
  192|      0|    return -1;
  193|      2|}
crossinterp.c:_init_notshareableerror:
   46|      2|{
   47|      2|    const char *name = "concurrent.interpreters.NotShareableError";
   48|      2|    PyObject *base = PyExc_TypeError;
   49|      2|    PyObject *ns = NULL;
   50|      2|    PyObject *exctype = PyErr_NewException(name, base, ns);
   51|      2|    if (exctype == NULL) {
  ------------------
  |  Branch (51:9): [True: 0, False: 2]
  ------------------
   52|      0|        return -1;
   53|      0|    }
   54|      2|    state->PyExc_NotShareableError = exctype;
   55|      2|    return 0;
   56|      2|}

_Py_dg_strtod:
 1385|   223k|{
 1386|   223k|    int bb2, bb5, bbe, bd2, bd5, bs2, c, dsign, e, e1, error;
 1387|   223k|    int esign, i, j, k, lz, nd, nd0, odd, sign;
 1388|   223k|    const char *s, *s0, *s1;
 1389|   223k|    double aadj, aadj1;
 1390|   223k|    U aadj2, adj, rv, rv0;
 1391|   223k|    ULong y, z, abs_exp;
 1392|   223k|    Long L;
 1393|   223k|    BCinfo bc;
 1394|   223k|    Bigint *bb = NULL, *bd = NULL, *bd0 = NULL, *bs = NULL, *delta = NULL;
 1395|   223k|    size_t ndigits, fraclen;
 1396|   223k|    double result;
 1397|       |
 1398|   223k|    dval(&rv) = 0.;
  ------------------
  |  |  184|   223k|#define dval(x) (x)->d
  ------------------
 1399|       |
 1400|       |    /* Start parsing. */
 1401|   223k|    c = *(s = s00);
 1402|       |
 1403|       |    /* Parse optional sign, if present. */
 1404|   223k|    sign = 0;
 1405|   223k|    switch (c) {
  ------------------
  |  Branch (1405:13): [True: 0, False: 223k]
  ------------------
 1406|      0|    case '-':
  ------------------
  |  Branch (1406:5): [True: 0, False: 223k]
  ------------------
 1407|      0|        sign = 1;
 1408|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1409|      0|    case '+':
  ------------------
  |  Branch (1409:5): [True: 0, False: 223k]
  ------------------
 1410|      0|        c = *++s;
 1411|   223k|    }
 1412|       |
 1413|       |    /* Skip leading zeros: lz is true iff there were leading zeros. */
 1414|   223k|    s1 = s;
 1415|   284k|    while (c == '0')
  ------------------
  |  Branch (1415:12): [True: 61.2k, False: 223k]
  ------------------
 1416|  61.2k|        c = *++s;
 1417|   223k|    lz = s != s1;
 1418|       |
 1419|       |    /* Point s0 at the first nonzero digit (if any).  fraclen will be the
 1420|       |       number of digits between the decimal point and the end of the
 1421|       |       digit string.  ndigits will be the total number of digits ignoring
 1422|       |       leading zeros. */
 1423|   223k|    s0 = s1 = s;
 1424|   978k|    while ('0' <= c && c <= '9')
  ------------------
  |  Branch (1424:12): [True: 898k, False: 79.7k]
  |  Branch (1424:24): [True: 754k, False: 143k]
  ------------------
 1425|   754k|        c = *++s;
 1426|   223k|    ndigits = s - s1;
 1427|   223k|    fraclen = 0;
 1428|       |
 1429|       |    /* Parse decimal point and following digits. */
 1430|   223k|    if (c == '.') {
  ------------------
  |  Branch (1430:9): [True: 79.7k, False: 143k]
  ------------------
 1431|  79.7k|        c = *++s;
 1432|  79.7k|        if (!ndigits) {
  ------------------
  |  Branch (1432:13): [True: 24.2k, False: 55.4k]
  ------------------
 1433|  24.2k|            s1 = s;
 1434|  25.8k|            while (c == '0')
  ------------------
  |  Branch (1434:20): [True: 1.61k, False: 24.2k]
  ------------------
 1435|  1.61k|                c = *++s;
 1436|  24.2k|            lz = lz || s != s1;
  ------------------
  |  Branch (1436:18): [True: 7.16k, False: 17.1k]
  |  Branch (1436:24): [True: 504, False: 16.6k]
  ------------------
 1437|  24.2k|            fraclen += (s - s1);
 1438|  24.2k|            s0 = s;
 1439|  24.2k|        }
 1440|  79.7k|        s1 = s;
 1441|   285k|        while ('0' <= c && c <= '9')
  ------------------
  |  Branch (1441:16): [True: 214k, False: 70.1k]
  |  Branch (1441:28): [True: 205k, False: 9.60k]
  ------------------
 1442|   205k|            c = *++s;
 1443|  79.7k|        ndigits += s - s1;
 1444|  79.7k|        fraclen += s - s1;
 1445|  79.7k|    }
 1446|       |
 1447|       |    /* Now lz is true if and only if there were leading zero digits, and
 1448|       |       ndigits gives the total number of digits ignoring leading zeros.  A
 1449|       |       valid input must have at least one digit. */
 1450|   223k|    if (!ndigits && !lz) {
  ------------------
  |  Branch (1450:9): [True: 18.8k, False: 204k]
  |  Branch (1450:21): [True: 0, False: 18.8k]
  ------------------
 1451|      0|        if (se)
  ------------------
  |  Branch (1451:13): [True: 0, False: 0]
  ------------------
 1452|      0|            *se = (char *)s00;
 1453|      0|        goto parse_error;
 1454|      0|    }
 1455|       |
 1456|       |    /* Range check ndigits and fraclen to make sure that they, and values
 1457|       |       computed with them, can safely fit in an int. */
 1458|   223k|    if (ndigits > MAX_DIGITS || fraclen > MAX_DIGITS) {
  ------------------
  |  |  202|   446k|#define MAX_DIGITS 1000000000U
  ------------------
                  if (ndigits > MAX_DIGITS || fraclen > MAX_DIGITS) {
  ------------------
  |  |  202|   223k|#define MAX_DIGITS 1000000000U
  ------------------
  |  Branch (1458:9): [True: 0, False: 223k]
  |  Branch (1458:33): [True: 0, False: 223k]
  ------------------
 1459|      0|        if (se)
  ------------------
  |  Branch (1459:13): [True: 0, False: 0]
  ------------------
 1460|      0|            *se = (char *)s00;
 1461|      0|        goto parse_error;
 1462|      0|    }
 1463|   223k|    nd = (int)ndigits;
 1464|   223k|    nd0 = (int)ndigits - (int)fraclen;
 1465|       |
 1466|       |    /* Parse exponent. */
 1467|   223k|    e = 0;
 1468|   223k|    if (c == 'e' || c == 'E') {
  ------------------
  |  Branch (1468:9): [True: 56.2k, False: 167k]
  |  Branch (1468:21): [True: 6.81k, False: 160k]
  ------------------
 1469|  63.0k|        s00 = s;
 1470|  63.0k|        c = *++s;
 1471|       |
 1472|       |        /* Exponent sign. */
 1473|  63.0k|        esign = 0;
 1474|  63.0k|        switch (c) {
  ------------------
  |  Branch (1474:17): [True: 11.9k, False: 51.1k]
  ------------------
 1475|  10.6k|        case '-':
  ------------------
  |  Branch (1475:9): [True: 10.6k, False: 52.3k]
  ------------------
 1476|  10.6k|            esign = 1;
 1477|  10.6k|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|  10.6k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1478|  11.9k|        case '+':
  ------------------
  |  Branch (1478:9): [True: 1.25k, False: 61.7k]
  ------------------
 1479|  11.9k|            c = *++s;
 1480|  63.0k|        }
 1481|       |
 1482|       |        /* Skip zeros.  lz is true iff there are leading zeros. */
 1483|  63.0k|        s1 = s;
 1484|  70.0k|        while (c == '0')
  ------------------
  |  Branch (1484:16): [True: 6.99k, False: 63.0k]
  ------------------
 1485|  6.99k|            c = *++s;
 1486|  63.0k|        lz = s != s1;
 1487|       |
 1488|       |        /* Get absolute value of the exponent. */
 1489|  63.0k|        s1 = s;
 1490|  63.0k|        abs_exp = 0;
 1491|   253k|        while ('0' <= c && c <= '9') {
  ------------------
  |  Branch (1491:16): [True: 197k, False: 55.9k]
  |  Branch (1491:28): [True: 190k, False: 7.12k]
  ------------------
 1492|   190k|            abs_exp = 10*abs_exp + (c - '0');
 1493|   190k|            c = *++s;
 1494|   190k|        }
 1495|       |
 1496|       |        /* abs_exp will be correct modulo 2**32.  But 10**9 < 2**32, so if
 1497|       |           there are at most 9 significant exponent digits then overflow is
 1498|       |           impossible. */
 1499|  63.0k|        if (s - s1 > 9 || abs_exp > MAX_ABS_EXP)
  ------------------
  |  |  194|  62.0k|#define MAX_ABS_EXP 1100000000U
  ------------------
  |  Branch (1499:13): [True: 1.03k, False: 62.0k]
  |  Branch (1499:27): [True: 0, False: 62.0k]
  ------------------
 1500|  1.03k|            e = (int)MAX_ABS_EXP;
  ------------------
  |  |  194|  1.03k|#define MAX_ABS_EXP 1100000000U
  ------------------
 1501|  62.0k|        else
 1502|  62.0k|            e = (int)abs_exp;
 1503|  63.0k|        if (esign)
  ------------------
  |  Branch (1503:13): [True: 10.6k, False: 52.3k]
  ------------------
 1504|  10.6k|            e = -e;
 1505|       |
 1506|       |        /* A valid exponent must have at least one digit. */
 1507|  63.0k|        if (s == s1 && !lz)
  ------------------
  |  Branch (1507:13): [True: 451, False: 62.5k]
  |  Branch (1507:24): [True: 0, False: 451]
  ------------------
 1508|      0|            s = s00;
 1509|  63.0k|    }
 1510|       |
 1511|       |    /* Adjust exponent to take into account position of the point. */
 1512|   223k|    e -= nd - nd0;
 1513|   223k|    if (nd0 <= 0)
  ------------------
  |  Branch (1513:9): [True: 36.7k, False: 186k]
  ------------------
 1514|  36.7k|        nd0 = nd;
 1515|       |
 1516|       |    /* Finished parsing.  Set se to indicate how far we parsed */
 1517|   223k|    if (se)
  ------------------
  |  Branch (1517:9): [True: 223k, False: 0]
  ------------------
 1518|   223k|        *se = (char *)s;
 1519|       |
 1520|       |    /* If all digits were zero, exit with return value +-0.0.  Otherwise,
 1521|       |       strip trailing zeros: scan back until we hit a nonzero digit. */
 1522|   223k|    if (!nd)
  ------------------
  |  Branch (1522:9): [True: 18.8k, False: 204k]
  ------------------
 1523|  18.8k|        goto ret;
 1524|   236k|    for (i = nd; i > 0; ) {
  ------------------
  |  Branch (1524:18): [True: 236k, False: 0]
  ------------------
 1525|   236k|        --i;
 1526|   236k|        if (s0[i < nd0 ? i : i+1] != '0') {
  ------------------
  |  Branch (1526:13): [True: 204k, False: 31.8k]
  |  Branch (1526:16): [True: 196k, False: 39.5k]
  ------------------
 1527|   204k|            ++i;
 1528|   204k|            break;
 1529|   204k|        }
 1530|   236k|    }
 1531|   204k|    e += nd - i;
 1532|   204k|    nd = i;
 1533|   204k|    if (nd0 > nd)
  ------------------
  |  Branch (1533:9): [True: 14.0k, False: 190k]
  ------------------
 1534|  14.0k|        nd0 = nd;
 1535|       |
 1536|       |    /* Summary of parsing results.  After parsing, and dealing with zero
 1537|       |     * inputs, we have values s0, nd0, nd, e, sign, where:
 1538|       |     *
 1539|       |     *  - s0 points to the first significant digit of the input string
 1540|       |     *
 1541|       |     *  - nd is the total number of significant digits (here, and
 1542|       |     *    below, 'significant digits' means the set of digits of the
 1543|       |     *    significand of the input that remain after ignoring leading
 1544|       |     *    and trailing zeros).
 1545|       |     *
 1546|       |     *  - nd0 indicates the position of the decimal point, if present; it
 1547|       |     *    satisfies 1 <= nd0 <= nd.  The nd significant digits are in
 1548|       |     *    s0[0:nd0] and s0[nd0+1:nd+1] using the usual Python half-open slice
 1549|       |     *    notation.  (If nd0 < nd, then s0[nd0] contains a '.'  character; if
 1550|       |     *    nd0 == nd, then s0[nd0] could be any non-digit character.)
 1551|       |     *
 1552|       |     *  - e is the adjusted exponent: the absolute value of the number
 1553|       |     *    represented by the original input string is n * 10**e, where
 1554|       |     *    n is the integer represented by the concatenation of
 1555|       |     *    s0[0:nd0] and s0[nd0+1:nd+1]
 1556|       |     *
 1557|       |     *  - sign gives the sign of the input:  1 for negative, 0 for positive
 1558|       |     *
 1559|       |     *  - the first and last significant digits are nonzero
 1560|       |     */
 1561|       |
 1562|       |    /* put first DBL_DIG+1 digits into integer y and z.
 1563|       |     *
 1564|       |     *  - y contains the value represented by the first min(9, nd)
 1565|       |     *    significant digits
 1566|       |     *
 1567|       |     *  - if nd > 9, z contains the value represented by significant digits
 1568|       |     *    with indices in [9, min(16, nd)).  So y * 10**(min(16, nd) - 9) + z
 1569|       |     *    gives the value represented by the first min(16, nd) sig. digits.
 1570|       |     */
 1571|       |
 1572|   204k|    bc.e0 = e1 = e;
 1573|   204k|    y = z = 0;
 1574|   909k|    for (i = 0; i < nd; i++) {
  ------------------
  |  Branch (1574:17): [True: 718k, False: 191k]
  ------------------
 1575|   718k|        if (i < 9)
  ------------------
  |  Branch (1575:13): [True: 561k, False: 156k]
  ------------------
 1576|   561k|            y = 10*y + s0[i < nd0 ? i : i+1] - '0';
  ------------------
  |  Branch (1576:27): [True: 522k, False: 39.6k]
  ------------------
 1577|   156k|        else if (i < DBL_DIG+1)
  ------------------
  |  Branch (1577:18): [True: 143k, False: 13.3k]
  ------------------
 1578|   143k|            z = 10*z + s0[i < nd0 ? i : i+1] - '0';
  ------------------
  |  Branch (1578:27): [True: 119k, False: 23.9k]
  ------------------
 1579|  13.3k|        else
 1580|  13.3k|            break;
 1581|   718k|    }
 1582|       |
 1583|   204k|    k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
  ------------------
  |  Branch (1583:9): [True: 187k, False: 17.2k]
  ------------------
 1584|   204k|    dval(&rv) = y;
  ------------------
  |  |  184|   204k|#define dval(x) (x)->d
  ------------------
 1585|   204k|    if (k > 9) {
  ------------------
  |  Branch (1585:9): [True: 25.8k, False: 178k]
  ------------------
 1586|  25.8k|        dval(&rv) = tens[k - 9] * dval(&rv) + z;
  ------------------
  |  |  184|  25.8k|#define dval(x) (x)->d
  ------------------
                      dval(&rv) = tens[k - 9] * dval(&rv) + z;
  ------------------
  |  |  184|  25.8k|#define dval(x) (x)->d
  ------------------
 1587|  25.8k|    }
 1588|   204k|    if (nd <= DBL_DIG
  ------------------
  |  Branch (1588:9): [True: 187k, False: 17.2k]
  ------------------
 1589|   187k|        && Flt_Rounds == 1
  ------------------
  |  |  261|   187k|#define Flt_Rounds FLT_ROUNDS
  ------------------
  |  Branch (1589:12): [True: 187k, False: 0]
  ------------------
 1590|   204k|        ) {
 1591|   187k|        if (!e)
  ------------------
  |  Branch (1591:13): [True: 93.5k, False: 93.7k]
  ------------------
 1592|  93.5k|            goto ret;
 1593|  93.7k|        if (e > 0) {
  ------------------
  |  Branch (1593:13): [True: 53.4k, False: 40.3k]
  ------------------
 1594|  53.4k|            if (e <= Ten_pmax) {
  ------------------
  |  |  248|  53.4k|#define Ten_pmax 22
  ------------------
  |  Branch (1594:17): [True: 14.8k, False: 38.5k]
  ------------------
 1595|  14.8k|                dval(&rv) *= tens[e];
  ------------------
  |  |  184|  14.8k|#define dval(x) (x)->d
  ------------------
 1596|  14.8k|                goto ret;
 1597|  14.8k|            }
 1598|  38.5k|            i = DBL_DIG - nd;
 1599|  38.5k|            if (e <= Ten_pmax + i) {
  ------------------
  |  |  248|  38.5k|#define Ten_pmax 22
  ------------------
  |  Branch (1599:17): [True: 9.44k, False: 29.0k]
  ------------------
 1600|       |                /* A fancier test would sometimes let us do
 1601|       |                 * this for larger i values.
 1602|       |                 */
 1603|  9.44k|                e -= i;
 1604|  9.44k|                dval(&rv) *= tens[i];
  ------------------
  |  |  184|  9.44k|#define dval(x) (x)->d
  ------------------
 1605|  9.44k|                dval(&rv) *= tens[e];
  ------------------
  |  |  184|  9.44k|#define dval(x) (x)->d
  ------------------
 1606|  9.44k|                goto ret;
 1607|  9.44k|            }
 1608|  38.5k|        }
 1609|  40.3k|        else if (e >= -Ten_pmax) {
  ------------------
  |  |  248|  40.3k|#define Ten_pmax 22
  ------------------
  |  Branch (1609:18): [True: 33.8k, False: 6.46k]
  ------------------
 1610|  33.8k|            dval(&rv) /= tens[-e];
  ------------------
  |  |  184|  33.8k|#define dval(x) (x)->d
  ------------------
 1611|  33.8k|            goto ret;
 1612|  33.8k|        }
 1613|  93.7k|    }
 1614|  52.8k|    e1 += nd - k;
 1615|       |
 1616|  52.8k|    bc.scale = 0;
 1617|       |
 1618|       |    /* Get starting approximation = rv * 10**e1 */
 1619|       |
 1620|  52.8k|    if (e1 > 0) {
  ------------------
  |  Branch (1620:9): [True: 36.2k, False: 16.5k]
  ------------------
 1621|  36.2k|        if ((i = e1 & 15))
  ------------------
  |  Branch (1621:13): [True: 34.7k, False: 1.48k]
  ------------------
 1622|  34.7k|            dval(&rv) *= tens[i];
  ------------------
  |  |  184|  34.7k|#define dval(x) (x)->d
  ------------------
 1623|  36.2k|        if (e1 &= ~15) {
  ------------------
  |  Branch (1623:13): [True: 31.9k, False: 4.30k]
  ------------------
 1624|  31.9k|            if (e1 > DBL_MAX_10_EXP)
  ------------------
  |  Branch (1624:17): [True: 18.7k, False: 13.2k]
  ------------------
 1625|  18.7k|                goto ovfl;
 1626|  13.2k|            e1 >>= 4;
 1627|  40.1k|            for(j = 0; e1 > 1; j++, e1 >>= 1)
  ------------------
  |  Branch (1627:24): [True: 26.8k, False: 13.2k]
  ------------------
 1628|  26.8k|                if (e1 & 1)
  ------------------
  |  Branch (1628:21): [True: 13.3k, False: 13.5k]
  ------------------
 1629|  13.3k|                    dval(&rv) *= bigtens[j];
  ------------------
  |  |  184|  13.3k|#define dval(x) (x)->d
  ------------------
 1630|       |            /* The last multiplication could overflow. */
 1631|  13.2k|            word0(&rv) -= P*Exp_msk1;
  ------------------
  |  |  178|  13.2k|#define word0(x) (x)->L[1]
  ------------------
                          word0(&rv) -= P*Exp_msk1;
  ------------------
  |  |  237|  13.2k|#define P 53
  ------------------
                          word0(&rv) -= P*Exp_msk1;
  ------------------
  |  |  234|  13.2k|#define Exp_msk1    0x100000
  ------------------
 1632|  13.2k|            dval(&rv) *= bigtens[j];
  ------------------
  |  |  184|  13.2k|#define dval(x) (x)->d
  ------------------
 1633|  13.2k|            if ((z = word0(&rv) & Exp_mask)
  ------------------
  |  |  178|  13.2k|#define word0(x) (x)->L[1]
  ------------------
                          if ((z = word0(&rv) & Exp_mask)
  ------------------
  |  |  236|  13.2k|#define Exp_mask  0x7ff00000
  ------------------
  |  Branch (1633:17): [True: 128, False: 13.1k]
  ------------------
 1634|  13.2k|                > Exp_msk1*(DBL_MAX_EXP+Bias-P))
  ------------------
  |  |  234|  13.2k|#define Exp_msk1    0x100000
  ------------------
                              > Exp_msk1*(DBL_MAX_EXP+Bias-P))
  ------------------
  |  |  239|  13.2k|#define Bias 1023
  ------------------
                              > Exp_msk1*(DBL_MAX_EXP+Bias-P))
  ------------------
  |  |  237|  13.2k|#define P 53
  ------------------
 1635|    128|                goto ovfl;
 1636|  13.1k|            if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
  ------------------
  |  |  234|  13.1k|#define Exp_msk1    0x100000
  ------------------
                          if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
  ------------------
  |  |  239|  13.1k|#define Bias 1023
  ------------------
                          if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
  ------------------
  |  |  237|  13.1k|#define P 53
  ------------------
  |  Branch (1636:17): [True: 10, False: 13.0k]
  ------------------
 1637|       |                /* set to largest number */
 1638|       |                /* (Can't trust DBL_MAX) */
 1639|     10|                word0(&rv) = Big0;
  ------------------
  |  |  178|     10|#define word0(x) (x)->L[1]
  ------------------
                              word0(&rv) = Big0;
  ------------------
  |  |  269|     10|#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  247|     10|#define Frac_mask1 0xfffff
  |  |  ------------------
  |  |               #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  234|     10|#define Exp_msk1    0x100000
  |  |  ------------------
  |  |               #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  239|     10|#define Bias 1023
  |  |  ------------------
  ------------------
 1640|     10|                word1(&rv) = Big1;
  ------------------
  |  |  179|     10|#define word1(x) (x)->L[0]
  ------------------
                              word1(&rv) = Big1;
  ------------------
  |  |  270|     10|#define Big1 0xffffffff
  ------------------
 1641|     10|            }
 1642|  13.0k|            else
 1643|  13.0k|                word0(&rv) += P*Exp_msk1;
  ------------------
  |  |  178|  13.0k|#define word0(x) (x)->L[1]
  ------------------
                              word0(&rv) += P*Exp_msk1;
  ------------------
  |  |  237|  13.0k|#define P 53
  ------------------
                              word0(&rv) += P*Exp_msk1;
  ------------------
  |  |  234|  13.0k|#define Exp_msk1    0x100000
  ------------------
 1644|  13.1k|        }
 1645|  36.2k|    }
 1646|  16.5k|    else if (e1 < 0) {
  ------------------
  |  Branch (1646:14): [True: 14.1k, False: 2.39k]
  ------------------
 1647|       |        /* The input decimal value lies in [10**e1, 10**(e1+16)).
 1648|       |
 1649|       |           If e1 <= -512, underflow immediately.
 1650|       |           If e1 <= -256, set bc.scale to 2*P.
 1651|       |
 1652|       |           So for input value < 1e-256, bc.scale is always set;
 1653|       |           for input value >= 1e-240, bc.scale is never set.
 1654|       |           For input values in [1e-256, 1e-240), bc.scale may or may
 1655|       |           not be set. */
 1656|       |
 1657|  14.1k|        e1 = -e1;
 1658|  14.1k|        if ((i = e1 & 15))
  ------------------
  |  Branch (1658:13): [True: 11.6k, False: 2.48k]
  ------------------
 1659|  11.6k|            dval(&rv) /= tens[i];
  ------------------
  |  |  184|  11.6k|#define dval(x) (x)->d
  ------------------
 1660|  14.1k|        if (e1 >>= 4) {
  ------------------
  |  Branch (1660:13): [True: 8.49k, False: 5.65k]
  ------------------
 1661|  8.49k|            if (e1 >= 1 << n_bigtens)
  ------------------
  |  | 1117|  8.49k|#define n_bigtens 5
  ------------------
  |  Branch (1661:17): [True: 2.57k, False: 5.91k]
  ------------------
 1662|  2.57k|                goto undfl;
 1663|  5.91k|            if (e1 & Scale_Bit)
  ------------------
  |  | 1116|  5.91k|#define Scale_Bit 0x10
  ------------------
  |  Branch (1663:17): [True: 3.73k, False: 2.18k]
  ------------------
 1664|  3.73k|                bc.scale = 2*P;
  ------------------
  |  |  237|  3.73k|#define P 53
  ------------------
 1665|  28.2k|            for(j = 0; e1 > 0; j++, e1 >>= 1)
  ------------------
  |  Branch (1665:24): [True: 22.2k, False: 5.91k]
  ------------------
 1666|  22.2k|                if (e1 & 1)
  ------------------
  |  Branch (1666:21): [True: 11.8k, False: 10.4k]
  ------------------
 1667|  11.8k|                    dval(&rv) *= tinytens[j];
  ------------------
  |  |  184|  11.8k|#define dval(x) (x)->d
  ------------------
 1668|  5.91k|            if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
  ------------------
  |  |  237|  3.73k|#define P 53
  ------------------
                          if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
  ------------------
  |  |  178|  3.73k|#define word0(x) (x)->L[1]
  ------------------
                          if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
  ------------------
  |  |  236|  3.73k|#define Exp_mask  0x7ff00000
  ------------------
  |  Branch (1668:17): [True: 3.73k, False: 2.18k]
  |  Branch (1668:29): [True: 3.07k, False: 661]
  ------------------
 1669|  3.73k|                                            >> Exp_shift)) > 0) {
  ------------------
  |  |  232|  3.73k|#define Exp_shift  20
  ------------------
 1670|       |                /* scaled rv is denormal; clear j low bits */
 1671|  3.07k|                if (j >= 32) {
  ------------------
  |  Branch (1671:21): [True: 2.44k, False: 633]
  ------------------
 1672|  2.44k|                    word1(&rv) = 0;
  ------------------
  |  |  179|  2.44k|#define word1(x) (x)->L[0]
  ------------------
 1673|  2.44k|                    if (j >= 53)
  ------------------
  |  Branch (1673:25): [True: 1.17k, False: 1.27k]
  ------------------
 1674|  1.17k|                        word0(&rv) = (P+2)*Exp_msk1;
  ------------------
  |  |  178|  1.17k|#define word0(x) (x)->L[1]
  ------------------
                                      word0(&rv) = (P+2)*Exp_msk1;
  ------------------
  |  |  237|  1.17k|#define P 53
  ------------------
                                      word0(&rv) = (P+2)*Exp_msk1;
  ------------------
  |  |  234|  1.17k|#define Exp_msk1    0x100000
  ------------------
 1675|  1.27k|                    else
 1676|  1.27k|                        word0(&rv) &= 0xffffffff << (j-32);
  ------------------
  |  |  178|  1.27k|#define word0(x) (x)->L[1]
  ------------------
 1677|  2.44k|                }
 1678|    633|                else
 1679|    633|                    word1(&rv) &= 0xffffffff << j;
  ------------------
  |  |  179|    633|#define word1(x) (x)->L[0]
  ------------------
 1680|  3.07k|            }
 1681|  5.91k|            if (!dval(&rv))
  ------------------
  |  |  184|  5.91k|#define dval(x) (x)->d
  ------------------
  |  Branch (1681:17): [True: 0, False: 5.91k]
  ------------------
 1682|      0|                goto undfl;
 1683|  5.91k|        }
 1684|  14.1k|    }
 1685|       |
 1686|       |    /* Now the hard part -- adjusting rv to the correct value.*/
 1687|       |
 1688|       |    /* Put digits into bd: true value = bd * 10^e */
 1689|       |
 1690|  31.3k|    bc.nd = nd;
 1691|  31.3k|    bc.nd0 = nd0;       /* Only needed if nd > STRTOD_DIGLIM, but done here */
 1692|       |                        /* to silence an erroneous warning about bc.nd0 */
 1693|       |                        /* possibly not being initialized. */
 1694|  31.3k|    if (nd > STRTOD_DIGLIM) {
  ------------------
  |  |  187|  31.3k|#define STRTOD_DIGLIM 40
  ------------------
  |  Branch (1694:9): [True: 3.55k, False: 27.8k]
  ------------------
 1695|       |        /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
 1696|       |        /* minimum number of decimal digits to distinguish double values */
 1697|       |        /* in IEEE arithmetic. */
 1698|       |
 1699|       |        /* Truncate input to 18 significant digits, then discard any trailing
 1700|       |           zeros on the result by updating nd, nd0, e and y suitably. (There's
 1701|       |           no need to update z; it's not reused beyond this point.) */
 1702|  30.9k|        for (i = 18; i > 0; ) {
  ------------------
  |  Branch (1702:22): [True: 30.9k, False: 0]
  ------------------
 1703|       |            /* scan back until we hit a nonzero digit.  significant digit 'i'
 1704|       |            is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
 1705|  30.9k|            --i;
 1706|  30.9k|            if (s0[i < nd0 ? i : i+1] != '0') {
  ------------------
  |  Branch (1706:17): [True: 3.55k, False: 27.4k]
  |  Branch (1706:20): [True: 22.8k, False: 8.12k]
  ------------------
 1707|  3.55k|                ++i;
 1708|  3.55k|                break;
 1709|  3.55k|            }
 1710|  30.9k|        }
 1711|  3.55k|        e += nd - i;
 1712|  3.55k|        nd = i;
 1713|  3.55k|        if (nd0 > nd)
  ------------------
  |  Branch (1713:13): [True: 2.79k, False: 762]
  ------------------
 1714|  2.79k|            nd0 = nd;
 1715|  3.55k|        if (nd < 9) { /* must recompute y */
  ------------------
  |  Branch (1715:13): [True: 1.64k, False: 1.90k]
  ------------------
 1716|  1.64k|            y = 0;
 1717|  5.19k|            for(i = 0; i < nd0; ++i)
  ------------------
  |  Branch (1717:24): [True: 3.54k, False: 1.64k]
  ------------------
 1718|  3.54k|                y = 10*y + s0[i] - '0';
 1719|  2.87k|            for(; i < nd; ++i)
  ------------------
  |  Branch (1719:19): [True: 1.22k, False: 1.64k]
  ------------------
 1720|  1.22k|                y = 10*y + s0[i+1] - '0';
 1721|  1.64k|        }
 1722|  3.55k|    }
 1723|  31.3k|    bd0 = s2b(s0, nd0, nd, y);
 1724|  31.3k|    if (bd0 == NULL)
  ------------------
  |  Branch (1724:9): [True: 0, False: 31.3k]
  ------------------
 1725|      0|        goto failed_malloc;
 1726|       |
 1727|       |    /* Notation for the comments below.  Write:
 1728|       |
 1729|       |         - dv for the absolute value of the number represented by the original
 1730|       |           decimal input string.
 1731|       |
 1732|       |         - if we've truncated dv, write tdv for the truncated value.
 1733|       |           Otherwise, set tdv == dv.
 1734|       |
 1735|       |         - srv for the quantity rv/2^bc.scale; so srv is the current binary
 1736|       |           approximation to tdv (and dv).  It should be exactly representable
 1737|       |           in an IEEE 754 double.
 1738|       |    */
 1739|       |
 1740|  36.1k|    for(;;) {
 1741|       |
 1742|       |        /* This is the main correction loop for _Py_dg_strtod.
 1743|       |
 1744|       |           We've got a decimal value tdv, and a floating-point approximation
 1745|       |           srv=rv/2^bc.scale to tdv.  The aim is to determine whether srv is
 1746|       |           close enough (i.e., within 0.5 ulps) to tdv, and to compute a new
 1747|       |           approximation if not.
 1748|       |
 1749|       |           To determine whether srv is close enough to tdv, compute integers
 1750|       |           bd, bb and bs proportional to tdv, srv and 0.5 ulp(srv)
 1751|       |           respectively, and then use integer arithmetic to determine whether
 1752|       |           |tdv - srv| is less than, equal to, or greater than 0.5 ulp(srv).
 1753|       |        */
 1754|       |
 1755|  36.1k|        bd = Balloc(bd0->k);
 1756|  36.1k|        if (bd == NULL) {
  ------------------
  |  Branch (1756:13): [True: 0, False: 36.1k]
  ------------------
 1757|      0|            goto failed_malloc;
 1758|      0|        }
 1759|  36.1k|        Bcopy(bd, bd0);
  ------------------
  |  |  433|  36.1k|#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign,   \
  |  |  434|  36.1k|                          y->wds*sizeof(Long) + 2*sizeof(int))
  ------------------
 1760|  36.1k|        bb = sd2b(&rv, bc.scale, &bbe);   /* srv = bb * 2^bbe */
 1761|  36.1k|        if (bb == NULL) {
  ------------------
  |  Branch (1761:13): [True: 0, False: 36.1k]
  ------------------
 1762|      0|            goto failed_malloc;
 1763|      0|        }
 1764|       |        /* Record whether lsb of bb is odd, in case we need this
 1765|       |           for the round-to-even step later. */
 1766|  36.1k|        odd = bb->x[0] & 1;
 1767|       |
 1768|       |        /* tdv = bd * 10**e;  srv = bb * 2**bbe */
 1769|  36.1k|        bs = i2b(1);
 1770|  36.1k|        if (bs == NULL) {
  ------------------
  |  Branch (1770:13): [True: 0, False: 36.1k]
  ------------------
 1771|      0|            goto failed_malloc;
 1772|      0|        }
 1773|       |
 1774|  36.1k|        if (e >= 0) {
  ------------------
  |  Branch (1774:13): [True: 18.9k, False: 17.1k]
  ------------------
 1775|  18.9k|            bb2 = bb5 = 0;
 1776|  18.9k|            bd2 = bd5 = e;
 1777|  18.9k|        }
 1778|  17.1k|        else {
 1779|  17.1k|            bb2 = bb5 = -e;
 1780|  17.1k|            bd2 = bd5 = 0;
 1781|  17.1k|        }
 1782|  36.1k|        if (bbe >= 0)
  ------------------
  |  Branch (1782:13): [True: 21.0k, False: 15.0k]
  ------------------
 1783|  21.0k|            bb2 += bbe;
 1784|  15.0k|        else
 1785|  15.0k|            bd2 -= bbe;
 1786|  36.1k|        bs2 = bb2;
 1787|  36.1k|        bb2++;
 1788|  36.1k|        bd2++;
 1789|       |
 1790|       |        /* At this stage bd5 - bb5 == e == bd2 - bb2 + bbe, bb2 - bs2 == 1,
 1791|       |           and bs == 1, so:
 1792|       |
 1793|       |              tdv == bd * 10**e = bd * 2**(bbe - bb2 + bd2) * 5**(bd5 - bb5)
 1794|       |              srv == bb * 2**bbe = bb * 2**(bbe - bb2 + bb2)
 1795|       |              0.5 ulp(srv) == 2**(bbe-1) = bs * 2**(bbe - bb2 + bs2)
 1796|       |
 1797|       |           It follows that:
 1798|       |
 1799|       |              M * tdv = bd * 2**bd2 * 5**bd5
 1800|       |              M * srv = bb * 2**bb2 * 5**bb5
 1801|       |              M * 0.5 ulp(srv) = bs * 2**bs2 * 5**bb5
 1802|       |
 1803|       |           for some constant M.  (Actually, M == 2**(bb2 - bbe) * 5**bb5, but
 1804|       |           this fact is not needed below.)
 1805|       |        */
 1806|       |
 1807|       |        /* Remove factor of 2**i, where i = min(bb2, bd2, bs2). */
 1808|  36.1k|        i = bb2 < bd2 ? bb2 : bd2;
  ------------------
  |  Branch (1808:13): [True: 14.4k, False: 21.6k]
  ------------------
 1809|  36.1k|        if (i > bs2)
  ------------------
  |  Branch (1809:13): [True: 14.6k, False: 21.4k]
  ------------------
 1810|  14.6k|            i = bs2;
 1811|  36.1k|        if (i > 0) {
  ------------------
  |  Branch (1811:13): [True: 35.7k, False: 327]
  ------------------
 1812|  35.7k|            bb2 -= i;
 1813|  35.7k|            bd2 -= i;
 1814|  35.7k|            bs2 -= i;
 1815|  35.7k|        }
 1816|       |
 1817|       |        /* Scale bb, bd, bs by the appropriate powers of 2 and 5. */
 1818|  36.1k|        if (bb5 > 0) {
  ------------------
  |  Branch (1818:13): [True: 17.1k, False: 18.9k]
  ------------------
 1819|  17.1k|            bs = pow5mult(bs, bb5);
 1820|  17.1k|            if (bs == NULL) {
  ------------------
  |  Branch (1820:17): [True: 0, False: 17.1k]
  ------------------
 1821|      0|                goto failed_malloc;
 1822|      0|            }
 1823|  17.1k|            Bigint *bb1 = mult(bs, bb);
 1824|  17.1k|            Bfree(bb);
 1825|  17.1k|            bb = bb1;
 1826|  17.1k|            if (bb == NULL) {
  ------------------
  |  Branch (1826:17): [True: 0, False: 17.1k]
  ------------------
 1827|      0|                goto failed_malloc;
 1828|      0|            }
 1829|  17.1k|        }
 1830|  36.1k|        if (bb2 > 0) {
  ------------------
  |  Branch (1830:13): [True: 36.1k, False: 0]
  ------------------
 1831|  36.1k|            bb = lshift(bb, bb2);
 1832|  36.1k|            if (bb == NULL) {
  ------------------
  |  Branch (1832:17): [True: 0, False: 36.1k]
  ------------------
 1833|      0|                goto failed_malloc;
 1834|      0|            }
 1835|  36.1k|        }
 1836|  36.1k|        if (bd5 > 0) {
  ------------------
  |  Branch (1836:13): [True: 13.5k, False: 22.5k]
  ------------------
 1837|  13.5k|            bd = pow5mult(bd, bd5);
 1838|  13.5k|            if (bd == NULL) {
  ------------------
  |  Branch (1838:17): [True: 0, False: 13.5k]
  ------------------
 1839|      0|                goto failed_malloc;
 1840|      0|            }
 1841|  13.5k|        }
 1842|  36.1k|        if (bd2 > 0) {
  ------------------
  |  Branch (1842:13): [True: 14.6k, False: 21.4k]
  ------------------
 1843|  14.6k|            bd = lshift(bd, bd2);
 1844|  14.6k|            if (bd == NULL) {
  ------------------
  |  Branch (1844:17): [True: 0, False: 14.6k]
  ------------------
 1845|      0|                goto failed_malloc;
 1846|      0|            }
 1847|  14.6k|        }
 1848|  36.1k|        if (bs2 > 0) {
  ------------------
  |  Branch (1848:13): [True: 19.7k, False: 16.3k]
  ------------------
 1849|  19.7k|            bs = lshift(bs, bs2);
 1850|  19.7k|            if (bs == NULL) {
  ------------------
  |  Branch (1850:17): [True: 0, False: 19.7k]
  ------------------
 1851|      0|                goto failed_malloc;
 1852|      0|            }
 1853|  19.7k|        }
 1854|       |
 1855|       |        /* Now bd, bb and bs are scaled versions of tdv, srv and 0.5 ulp(srv),
 1856|       |           respectively.  Compute the difference |tdv - srv|, and compare
 1857|       |           with 0.5 ulp(srv). */
 1858|       |
 1859|  36.1k|        delta = diff(bb, bd);
 1860|  36.1k|        if (delta == NULL) {
  ------------------
  |  Branch (1860:13): [True: 0, False: 36.1k]
  ------------------
 1861|      0|            goto failed_malloc;
 1862|      0|        }
 1863|  36.1k|        dsign = delta->sign;
 1864|  36.1k|        delta->sign = 0;
 1865|  36.1k|        i = cmp(delta, bs);
 1866|  36.1k|        if (bc.nd > nd && i <= 0) {
  ------------------
  |  Branch (1866:13): [True: 4.80k, False: 31.3k]
  |  Branch (1866:27): [True: 3.55k, False: 1.24k]
  ------------------
 1867|  3.55k|            if (dsign)
  ------------------
  |  Branch (1867:17): [True: 2.45k, False: 1.10k]
  ------------------
 1868|  2.45k|                break;  /* Must use bigcomp(). */
 1869|       |
 1870|       |            /* Here rv overestimates the truncated decimal value by at most
 1871|       |               0.5 ulp(rv).  Hence rv either overestimates the true decimal
 1872|       |               value by <= 0.5 ulp(rv), or underestimates it by some small
 1873|       |               amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
 1874|       |               the true decimal value, so it's possible to exit.
 1875|       |
 1876|       |               Exception: if scaled rv is a normal exact power of 2, but not
 1877|       |               DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
 1878|       |               next double, so the correctly rounded result is either rv - 0.5
 1879|       |               ulp(rv) or rv; in this case, use bigcomp to distinguish. */
 1880|       |
 1881|  1.10k|            if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
  ------------------
  |  |  179|  2.20k|#define word1(x) (x)->L[0]
  ------------------
                          if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
  ------------------
  |  |  178|    240|#define word0(x) (x)->L[1]
  ------------------
                          if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
  ------------------
  |  |  250|    240|#define Bndry_mask  0xfffff
  ------------------
  |  Branch (1881:17): [True: 240, False: 863]
  |  Branch (1881:32): [True: 207, False: 33]
  ------------------
 1882|       |                /* rv can't be 0, since it's an overestimate for some
 1883|       |                   nonzero value.  So rv is a normal power of 2. */
 1884|    207|                j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
  ------------------
  |  |  178|    207|#define word0(x) (x)->L[1]
  ------------------
                              j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
  ------------------
  |  |  236|    207|#define Exp_mask  0x7ff00000
  ------------------
                              j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
  ------------------
  |  |  232|    207|#define Exp_shift  20
  ------------------
 1885|       |                /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
 1886|       |                   rv / 2^bc.scale >= 2^-1021. */
 1887|    207|                if (j - bc.scale >= 2) {
  ------------------
  |  Branch (1887:21): [True: 190, False: 17]
  ------------------
 1888|    190|                    dval(&rv) -= 0.5 * sulp(&rv, &bc);
  ------------------
  |  |  184|    190|#define dval(x) (x)->d
  ------------------
 1889|    190|                    break; /* Use bigcomp. */
 1890|    190|                }
 1891|    207|            }
 1892|       |
 1893|    913|            {
 1894|    913|                bc.nd = nd;
 1895|    913|                i = -1; /* Discarded digits make delta smaller. */
 1896|    913|            }
 1897|    913|        }
 1898|       |
 1899|  33.4k|        if (i < 0) {
  ------------------
  |  Branch (1899:13): [True: 18.3k, False: 15.1k]
  ------------------
 1900|       |            /* Error is less than half an ulp -- check for
 1901|       |             * special case of mantissa a power of two.
 1902|       |             */
 1903|  18.3k|            if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
  ------------------
  |  |  179|  31.2k|#define word1(x) (x)->L[0]
  |  |  ------------------
  |  |  |  Branch (179:18): [True: 11.2k, False: 1.64k]
  |  |  ------------------
  ------------------
                          if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
  ------------------
  |  |  178|  1.64k|#define word0(x) (x)->L[1]
  ------------------
                          if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
  ------------------
  |  |  250|  19.9k|#define Bndry_mask  0xfffff
  ------------------
  |  Branch (1903:17): [True: 5.44k, False: 12.9k]
  |  Branch (1903:40): [True: 705, False: 940]
  ------------------
 1904|    940|                || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
  ------------------
  |  |  178|    940|#define word0(x) (x)->L[1]
  ------------------
                              || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
  ------------------
  |  |  236|    940|#define Exp_mask  0x7ff00000
  ------------------
                              || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
  ------------------
  |  |  237|    940|#define P 53
  ------------------
                              || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
  ------------------
  |  |  234|    940|#define Exp_msk1    0x100000
  ------------------
  |  Branch (1904:20): [True: 30, False: 910]
  ------------------
 1905|  18.3k|                ) {
 1906|  17.4k|                break;
 1907|  17.4k|            }
 1908|    910|            if (!delta->x[0] && delta->wds <= 1) {
  ------------------
  |  Branch (1908:17): [True: 598, False: 312]
  |  Branch (1908:33): [True: 529, False: 69]
  ------------------
 1909|       |                /* exact result */
 1910|    529|                break;
 1911|    529|            }
 1912|    381|            delta = lshift(delta,Log2P);
  ------------------
  |  |  253|    381|#define Log2P 1
  ------------------
 1913|    381|            if (delta == NULL) {
  ------------------
  |  Branch (1913:17): [True: 0, False: 381]
  ------------------
 1914|      0|                goto failed_malloc;
 1915|      0|            }
 1916|    381|            if (cmp(delta, bs) > 0)
  ------------------
  |  Branch (1916:17): [True: 43, False: 338]
  ------------------
 1917|     43|                goto drop_down;
 1918|    338|            break;
 1919|    381|        }
 1920|  15.1k|        if (i == 0) {
  ------------------
  |  Branch (1920:13): [True: 1.82k, False: 13.2k]
  ------------------
 1921|       |            /* exactly half-way between */
 1922|  1.82k|            if (dsign) {
  ------------------
  |  Branch (1922:17): [True: 1.70k, False: 115]
  ------------------
 1923|  1.70k|                if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
  ------------------
  |  |  178|  1.70k|#define word0(x) (x)->L[1]
  ------------------
                              if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
  ------------------
  |  |  251|  1.70k|#define Bndry_mask1 0xfffff
  ------------------
                              if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
  ------------------
  |  |  251|  3.41k|#define Bndry_mask1 0xfffff
  ------------------
  |  Branch (1923:21): [True: 1.05k, False: 649]
  ------------------
 1924|  1.05k|                    &&  word1(&rv) == (
  ------------------
  |  |  179|  1.05k|#define word1(x) (x)->L[0]
  ------------------
  |  Branch (1924:25): [True: 245, False: 812]
  ------------------
 1925|  1.05k|                        (bc.scale &&
  ------------------
  |  Branch (1925:26): [True: 0, False: 1.05k]
  ------------------
 1926|      0|                         (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
  ------------------
  |  |  178|      0|#define word0(x) (x)->L[1]
  ------------------
                                       (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
  ------------------
  |  |  236|      0|#define Exp_mask  0x7ff00000
  ------------------
                                       (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
  ------------------
  |  |  237|      0|#define P 53
  ------------------
                                       (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
  ------------------
  |  |  234|      0|#define Exp_msk1    0x100000
  ------------------
  |  Branch (1926:26): [True: 0, False: 0]
  ------------------
 1927|      0|                        (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
  ------------------
  |  |  237|      0|#define P 53
  ------------------
                                      (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
  ------------------
  |  |  232|      0|#define Exp_shift  20
  ------------------
 1928|  1.05k|                        0xffffffff)) {
 1929|       |                    /*boundary case -- increment exponent*/
 1930|    245|                    word0(&rv) = (word0(&rv) & Exp_mask)
  ------------------
  |  |  178|    245|#define word0(x) (x)->L[1]
  ------------------
                                  word0(&rv) = (word0(&rv) & Exp_mask)
  ------------------
  |  |  178|    245|#define word0(x) (x)->L[1]
  ------------------
                                  word0(&rv) = (word0(&rv) & Exp_mask)
  ------------------
  |  |  236|    245|#define Exp_mask  0x7ff00000
  ------------------
 1931|    245|                        + Exp_msk1
  ------------------
  |  |  234|    245|#define Exp_msk1    0x100000
  ------------------
 1932|    245|                        ;
 1933|    245|                    word1(&rv) = 0;
  ------------------
  |  |  179|    245|#define word1(x) (x)->L[0]
  ------------------
 1934|       |                    /* dsign = 0; */
 1935|    245|                    break;
 1936|    245|                }
 1937|  1.70k|            }
 1938|    115|            else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
  ------------------
  |  |  178|    115|#define word0(x) (x)->L[1]
  ------------------
                          else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
  ------------------
  |  |  250|    115|#define Bndry_mask  0xfffff
  ------------------
                          else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
  ------------------
  |  |  179|     43|#define word1(x) (x)->L[0]
  ------------------
  |  Branch (1938:22): [True: 43, False: 72]
  |  Branch (1938:52): [True: 0, False: 43]
  ------------------
 1939|     43|              drop_down:
 1940|       |                /* boundary case -- decrement exponent */
 1941|     43|                if (bc.scale) {
  ------------------
  |  Branch (1941:21): [True: 0, False: 43]
  ------------------
 1942|      0|                    L = word0(&rv) & Exp_mask;
  ------------------
  |  |  178|      0|#define word0(x) (x)->L[1]
  ------------------
                                  L = word0(&rv) & Exp_mask;
  ------------------
  |  |  236|      0|#define Exp_mask  0x7ff00000
  ------------------
 1943|      0|                    if (L <= (2*P+1)*Exp_msk1) {
  ------------------
  |  |  237|      0|#define P 53
  ------------------
                                  if (L <= (2*P+1)*Exp_msk1) {
  ------------------
  |  |  234|      0|#define Exp_msk1    0x100000
  ------------------
  |  Branch (1943:25): [True: 0, False: 0]
  ------------------
 1944|      0|                        if (L > (P+2)*Exp_msk1)
  ------------------
  |  |  237|      0|#define P 53
  ------------------
                                      if (L > (P+2)*Exp_msk1)
  ------------------
  |  |  234|      0|#define Exp_msk1    0x100000
  ------------------
  |  Branch (1944:29): [True: 0, False: 0]
  ------------------
 1945|       |                            /* round even ==> */
 1946|       |                            /* accept rv */
 1947|      0|                            break;
 1948|       |                        /* rv = smallest denormal */
 1949|      0|                        if (bc.nd > nd)
  ------------------
  |  Branch (1949:29): [True: 0, False: 0]
  ------------------
 1950|      0|                            break;
 1951|      0|                        goto undfl;
 1952|      0|                    }
 1953|      0|                }
 1954|     43|                L = (word0(&rv) & Exp_mask) - Exp_msk1;
  ------------------
  |  |  178|     43|#define word0(x) (x)->L[1]
  ------------------
                              L = (word0(&rv) & Exp_mask) - Exp_msk1;
  ------------------
  |  |  236|     43|#define Exp_mask  0x7ff00000
  ------------------
                              L = (word0(&rv) & Exp_mask) - Exp_msk1;
  ------------------
  |  |  234|     43|#define Exp_msk1    0x100000
  ------------------
 1955|     43|                word0(&rv) = L | Bndry_mask1;
  ------------------
  |  |  178|     43|#define word0(x) (x)->L[1]
  ------------------
                              word0(&rv) = L | Bndry_mask1;
  ------------------
  |  |  251|     43|#define Bndry_mask1 0xfffff
  ------------------
 1956|     43|                word1(&rv) = 0xffffffff;
  ------------------
  |  |  179|     43|#define word1(x) (x)->L[0]
  ------------------
 1957|     43|                break;
 1958|     43|            }
 1959|  1.57k|            if (!odd)
  ------------------
  |  Branch (1959:17): [True: 335, False: 1.24k]
  ------------------
 1960|    335|                break;
 1961|  1.24k|            if (dsign)
  ------------------
  |  Branch (1961:17): [True: 1.23k, False: 6]
  ------------------
 1962|  1.23k|                dval(&rv) += sulp(&rv, &bc);
  ------------------
  |  |  184|  1.23k|#define dval(x) (x)->d
  ------------------
 1963|      6|            else {
 1964|      6|                dval(&rv) -= sulp(&rv, &bc);
  ------------------
  |  |  184|      6|#define dval(x) (x)->d
  ------------------
 1965|      6|                if (!dval(&rv)) {
  ------------------
  |  |  184|      6|#define dval(x) (x)->d
  ------------------
  |  Branch (1965:21): [True: 0, False: 6]
  ------------------
 1966|      0|                    if (bc.nd >nd)
  ------------------
  |  Branch (1966:25): [True: 0, False: 0]
  ------------------
 1967|      0|                        break;
 1968|      0|                    goto undfl;
 1969|      0|                }
 1970|      6|            }
 1971|       |            /* dsign = 1 - dsign; */
 1972|  1.24k|            break;
 1973|  1.24k|        }
 1974|  13.2k|        if ((aadj = ratio(delta, bs)) <= 2.) {
  ------------------
  |  Branch (1974:13): [True: 9.98k, False: 3.31k]
  ------------------
 1975|  9.98k|            if (dsign)
  ------------------
  |  Branch (1975:17): [True: 4.08k, False: 5.89k]
  ------------------
 1976|  4.08k|                aadj = aadj1 = 1.;
 1977|  5.89k|            else if (word1(&rv) || word0(&rv) & Bndry_mask) {
  ------------------
  |  |  179|  11.7k|#define word1(x) (x)->L[0]
  |  |  ------------------
  |  |  |  Branch (179:18): [True: 4.50k, False: 1.38k]
  |  |  ------------------
  ------------------
                          else if (word1(&rv) || word0(&rv) & Bndry_mask) {
  ------------------
  |  |  178|  1.38k|#define word0(x) (x)->L[1]
  ------------------
                          else if (word1(&rv) || word0(&rv) & Bndry_mask) {
  ------------------
  |  |  250|  1.38k|#define Bndry_mask  0xfffff
  ------------------
  |  Branch (1977:36): [True: 244, False: 1.14k]
  ------------------
 1978|  4.75k|                if (word1(&rv) == Tiny1 && !word0(&rv)) {
  ------------------
  |  |  179|  4.75k|#define word1(x) (x)->L[0]
  ------------------
                              if (word1(&rv) == Tiny1 && !word0(&rv)) {
  ------------------
  |  |  255|  9.50k|#define Tiny1 1
  ------------------
                              if (word1(&rv) == Tiny1 && !word0(&rv)) {
  ------------------
  |  |  178|      6|#define word0(x) (x)->L[1]
  ------------------
  |  Branch (1978:21): [True: 6, False: 4.74k]
  |  Branch (1978:44): [True: 0, False: 6]
  ------------------
 1979|      0|                    if (bc.nd >nd)
  ------------------
  |  Branch (1979:25): [True: 0, False: 0]
  ------------------
 1980|      0|                        break;
 1981|      0|                    goto undfl;
 1982|      0|                }
 1983|  4.75k|                aadj = 1.;
 1984|  4.75k|                aadj1 = -1.;
 1985|  4.75k|            }
 1986|  1.14k|            else {
 1987|       |                /* special case -- power of FLT_RADIX to be */
 1988|       |                /* rounded down... */
 1989|       |
 1990|  1.14k|                if (aadj < 2./FLT_RADIX)
  ------------------
  |  Branch (1990:21): [True: 0, False: 1.14k]
  ------------------
 1991|      0|                    aadj = 1./FLT_RADIX;
 1992|  1.14k|                else
 1993|  1.14k|                    aadj *= 0.5;
 1994|  1.14k|                aadj1 = -aadj;
 1995|  1.14k|            }
 1996|  9.98k|        }
 1997|  3.31k|        else {
 1998|  3.31k|            aadj *= 0.5;
 1999|  3.31k|            aadj1 = dsign ? aadj : -aadj;
  ------------------
  |  Branch (1999:21): [True: 3.12k, False: 195]
  ------------------
 2000|  3.31k|            if (Flt_Rounds == 0)
  ------------------
  |  |  261|  3.31k|#define Flt_Rounds FLT_ROUNDS
  ------------------
  |  Branch (2000:17): [True: 0, False: 3.31k]
  ------------------
 2001|      0|                aadj1 += 0.5;
 2002|  3.31k|        }
 2003|  13.2k|        y = word0(&rv) & Exp_mask;
  ------------------
  |  |  178|  13.2k|#define word0(x) (x)->L[1]
  ------------------
                      y = word0(&rv) & Exp_mask;
  ------------------
  |  |  236|  13.2k|#define Exp_mask  0x7ff00000
  ------------------
 2004|       |
 2005|       |        /* Check for overflow */
 2006|       |
 2007|  13.2k|        if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
  ------------------
  |  |  234|  13.2k|#define Exp_msk1    0x100000
  ------------------
                      if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
  ------------------
  |  |  239|  13.2k|#define Bias 1023
  ------------------
  |  Branch (2007:13): [True: 35, False: 13.2k]
  ------------------
 2008|     35|            dval(&rv0) = dval(&rv);
  ------------------
  |  |  184|     35|#define dval(x) (x)->d
  ------------------
                          dval(&rv0) = dval(&rv);
  ------------------
  |  |  184|     35|#define dval(x) (x)->d
  ------------------
 2009|     35|            word0(&rv) -= P*Exp_msk1;
  ------------------
  |  |  178|     35|#define word0(x) (x)->L[1]
  ------------------
                          word0(&rv) -= P*Exp_msk1;
  ------------------
  |  |  237|     35|#define P 53
  ------------------
                          word0(&rv) -= P*Exp_msk1;
  ------------------
  |  |  234|     35|#define Exp_msk1    0x100000
  ------------------
 2010|     35|            adj.d = aadj1 * ulp(&rv);
 2011|     35|            dval(&rv) += adj.d;
  ------------------
  |  |  184|     35|#define dval(x) (x)->d
  ------------------
 2012|     35|            if ((word0(&rv) & Exp_mask) >=
  ------------------
  |  |  178|     35|#define word0(x) (x)->L[1]
  ------------------
                          if ((word0(&rv) & Exp_mask) >=
  ------------------
  |  |  236|     35|#define Exp_mask  0x7ff00000
  ------------------
  |  Branch (2012:17): [True: 24, False: 11]
  ------------------
 2013|     35|                Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
  ------------------
  |  |  234|     35|#define Exp_msk1    0x100000
  ------------------
                              Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
  ------------------
  |  |  239|     35|#define Bias 1023
  ------------------
                              Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
  ------------------
  |  |  237|     35|#define P 53
  ------------------
 2014|     24|                if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
  ------------------
  |  |  178|     24|#define word0(x) (x)->L[1]
  ------------------
                              if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
  ------------------
  |  |  269|     48|#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  247|     24|#define Frac_mask1 0xfffff
  |  |  ------------------
  |  |               #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  234|     24|#define Exp_msk1    0x100000
  |  |  ------------------
  |  |               #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  239|     24|#define Bias 1023
  |  |  ------------------
  ------------------
                              if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
  ------------------
  |  |  179|     24|#define word1(x) (x)->L[0]
  ------------------
                              if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
  ------------------
  |  |  270|     24|#define Big1 0xffffffff
  ------------------
  |  Branch (2014:21): [True: 24, False: 0]
  |  Branch (2014:44): [True: 17, False: 7]
  ------------------
 2015|     17|                    goto ovfl;
 2016|     17|                }
 2017|      7|                word0(&rv) = Big0;
  ------------------
  |  |  178|      7|#define word0(x) (x)->L[1]
  ------------------
                              word0(&rv) = Big0;
  ------------------
  |  |  269|      7|#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  247|      7|#define Frac_mask1 0xfffff
  |  |  ------------------
  |  |               #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  234|      7|#define Exp_msk1    0x100000
  |  |  ------------------
  |  |               #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
  |  |  ------------------
  |  |  |  |  239|      7|#define Bias 1023
  |  |  ------------------
  ------------------
 2018|      7|                word1(&rv) = Big1;
  ------------------
  |  |  179|      7|#define word1(x) (x)->L[0]
  ------------------
                              word1(&rv) = Big1;
  ------------------
  |  |  270|      7|#define Big1 0xffffffff
  ------------------
 2019|      7|                goto cont;
 2020|     24|            }
 2021|     11|            else
 2022|     11|                word0(&rv) += P*Exp_msk1;
  ------------------
  |  |  178|     11|#define word0(x) (x)->L[1]
  ------------------
                              word0(&rv) += P*Exp_msk1;
  ------------------
  |  |  237|     11|#define P 53
  ------------------
                              word0(&rv) += P*Exp_msk1;
  ------------------
  |  |  234|     11|#define Exp_msk1    0x100000
  ------------------
 2023|     35|        }
 2024|  13.2k|        else {
 2025|  13.2k|            if (bc.scale && y <= 2*P*Exp_msk1) {
  ------------------
  |  |  237|  2.58k|#define P 53
  ------------------
                          if (bc.scale && y <= 2*P*Exp_msk1) {
  ------------------
  |  |  234|  2.58k|#define Exp_msk1    0x100000
  ------------------
  |  Branch (2025:17): [True: 2.58k, False: 10.6k]
  |  Branch (2025:29): [True: 2.27k, False: 303]
  ------------------
 2026|  2.27k|                if (aadj <= 0x7fffffff) {
  ------------------
  |  Branch (2026:21): [True: 2.27k, False: 0]
  ------------------
 2027|  2.27k|                    if ((z = (ULong)aadj) <= 0)
  ------------------
  |  Branch (2027:25): [True: 247, False: 2.03k]
  ------------------
 2028|    247|                        z = 1;
 2029|  2.27k|                    aadj = z;
 2030|  2.27k|                    aadj1 = dsign ? aadj : -aadj;
  ------------------
  |  Branch (2030:29): [True: 1.13k, False: 1.14k]
  ------------------
 2031|  2.27k|                }
 2032|  2.27k|                dval(&aadj2) = aadj1;
  ------------------
  |  |  184|  2.27k|#define dval(x) (x)->d
  ------------------
 2033|  2.27k|                word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
  ------------------
  |  |  178|  2.27k|#define word0(x) (x)->L[1]
  ------------------
                              word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
  ------------------
  |  |  237|  2.27k|#define P 53
  ------------------
                              word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
  ------------------
  |  |  234|  2.27k|#define Exp_msk1    0x100000
  ------------------
 2034|  2.27k|                aadj1 = dval(&aadj2);
  ------------------
  |  |  184|  2.27k|#define dval(x) (x)->d
  ------------------
 2035|  2.27k|            }
 2036|  13.2k|            adj.d = aadj1 * ulp(&rv);
 2037|  13.2k|            dval(&rv) += adj.d;
  ------------------
  |  |  184|  13.2k|#define dval(x) (x)->d
  ------------------
 2038|  13.2k|        }
 2039|  13.2k|        z = word0(&rv) & Exp_mask;
  ------------------
  |  |  178|  13.2k|#define word0(x) (x)->L[1]
  ------------------
                      z = word0(&rv) & Exp_mask;
  ------------------
  |  |  236|  13.2k|#define Exp_mask  0x7ff00000
  ------------------
 2040|  13.2k|        if (bc.nd == nd) {
  ------------------
  |  Branch (2040:13): [True: 12.0k, False: 1.24k]
  ------------------
 2041|  12.0k|            if (!bc.scale)
  ------------------
  |  Branch (2041:17): [True: 9.59k, False: 2.43k]
  ------------------
 2042|  9.59k|                if (y == z) {
  ------------------
  |  Branch (2042:21): [True: 8.73k, False: 862]
  ------------------
 2043|       |                    /* Can we stop now? */
 2044|  8.73k|                    L = (Long)aadj;
 2045|  8.73k|                    aadj -= L;
 2046|       |                    /* The tolerances below are conservative. */
 2047|  8.73k|                    if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
  ------------------
  |  |  179|  13.3k|#define word1(x) (x)->L[0]
  |  |  ------------------
  |  |  |  Branch (179:18): [True: 4.60k, False: 6]
  |  |  ------------------
  ------------------
                                  if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
  ------------------
  |  |  178|      6|#define word0(x) (x)->L[1]
  ------------------
                                  if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
  ------------------
  |  |  250|      6|#define Bndry_mask  0xfffff
  ------------------
  |  Branch (2047:25): [True: 4.12k, False: 4.60k]
  |  Branch (2047:48): [True: 6, False: 0]
  ------------------
 2048|  8.73k|                        if (aadj < .4999999 || aadj > .5000001)
  ------------------
  |  Branch (2048:29): [True: 7.48k, False: 1.25k]
  |  Branch (2048:48): [True: 1.06k, False: 186]
  ------------------
 2049|  8.54k|                            break;
 2050|  8.73k|                    }
 2051|      0|                    else if (aadj < .4999999/FLT_RADIX)
  ------------------
  |  Branch (2051:30): [True: 0, False: 0]
  ------------------
 2052|      0|                        break;
 2053|  8.73k|                }
 2054|  12.0k|        }
 2055|  4.73k|      cont:
 2056|  4.73k|        Bfree(bb); bb = NULL;
 2057|  4.73k|        Bfree(bd); bd = NULL;
 2058|  4.73k|        Bfree(bs); bs = NULL;
 2059|  4.73k|        Bfree(delta); delta = NULL;
 2060|  4.73k|    }
 2061|  31.3k|    if (bc.nd > nd) {
  ------------------
  |  Branch (2061:9): [True: 2.64k, False: 28.7k]
  ------------------
 2062|  2.64k|        error = bigcomp(&rv, s0, &bc);
 2063|  2.64k|        if (error)
  ------------------
  |  Branch (2063:13): [True: 0, False: 2.64k]
  ------------------
 2064|      0|            goto failed_malloc;
 2065|  2.64k|    }
 2066|       |
 2067|  31.3k|    if (bc.scale) {
  ------------------
  |  Branch (2067:9): [True: 3.73k, False: 27.6k]
  ------------------
 2068|  3.73k|        word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
  ------------------
  |  |  178|  3.73k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
  ------------------
  |  |  243|  3.73k|#define Exp_1  0x3ff00000
  ------------------
                      word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
  ------------------
  |  |  237|  3.73k|#define P 53
  ------------------
                      word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
  ------------------
  |  |  234|  3.73k|#define Exp_msk1    0x100000
  ------------------
 2069|  3.73k|        word1(&rv0) = 0;
  ------------------
  |  |  179|  3.73k|#define word1(x) (x)->L[0]
  ------------------
 2070|  3.73k|        dval(&rv) *= dval(&rv0);
  ------------------
  |  |  184|  3.73k|#define dval(x) (x)->d
  ------------------
                      dval(&rv) *= dval(&rv0);
  ------------------
  |  |  184|  3.73k|#define dval(x) (x)->d
  ------------------
 2071|  3.73k|    }
 2072|       |
 2073|   201k|  ret:
 2074|   201k|    result = sign ? -dval(&rv) : dval(&rv);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                  result = sign ? -dval(&rv) : dval(&rv);
  ------------------
  |  |  184|   403k|#define dval(x) (x)->d
  ------------------
  |  Branch (2074:14): [True: 0, False: 201k]
  ------------------
 2075|   201k|    goto done;
 2076|       |
 2077|      0|  parse_error:
 2078|      0|    result = 0.0;
 2079|      0|    goto done;
 2080|       |
 2081|      0|  failed_malloc:
 2082|      0|    errno = ENOMEM;
 2083|      0|    result = -1.0;
 2084|      0|    goto done;
 2085|       |
 2086|  2.57k|  undfl:
 2087|  2.57k|    result = sign ? -0.0 : 0.0;
  ------------------
  |  Branch (2087:14): [True: 0, False: 2.57k]
  ------------------
 2088|  2.57k|    goto done;
 2089|       |
 2090|  18.8k|  ovfl:
 2091|  18.8k|    errno = ERANGE;
 2092|       |    /* Can't trust HUGE_VAL */
 2093|  18.8k|    word0(&rv) = Exp_mask;
  ------------------
  |  |  178|  18.8k|#define word0(x) (x)->L[1]
  ------------------
                  word0(&rv) = Exp_mask;
  ------------------
  |  |  236|  18.8k|#define Exp_mask  0x7ff00000
  ------------------
 2094|  18.8k|    word1(&rv) = 0;
  ------------------
  |  |  179|  18.8k|#define word1(x) (x)->L[0]
  ------------------
 2095|  18.8k|    result = sign ? -dval(&rv) : dval(&rv);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                  result = sign ? -dval(&rv) : dval(&rv);
  ------------------
  |  |  184|  37.7k|#define dval(x) (x)->d
  ------------------
  |  Branch (2095:14): [True: 0, False: 18.8k]
  ------------------
 2096|  18.8k|    goto done;
 2097|       |
 2098|   223k|  done:
 2099|   223k|    Bfree(bb);
 2100|   223k|    Bfree(bd);
 2101|   223k|    Bfree(bs);
 2102|   223k|    Bfree(bd0);
 2103|   223k|    Bfree(delta);
 2104|   223k|    return result;
 2105|       |
 2106|  31.3k|}
_Py_dg_freedtoa:
 2148|  42.8k|{
 2149|  42.8k|    Bigint *b = (Bigint *)((int *)s - 1);
 2150|  42.8k|    b->maxwds = 1 << (b->k = *(int*)b);
 2151|  42.8k|    Bfree(b);
 2152|  42.8k|}
_Py_dg_dtoa:
 2195|  42.8k|{
 2196|       |    /*  Arguments ndigits, decpt, sign are similar to those
 2197|       |        of ecvt and fcvt; trailing zeros are suppressed from
 2198|       |        the returned string.  If not null, *rve is set to point
 2199|       |        to the end of the return value.  If d is +-Infinity or NaN,
 2200|       |        then *decpt is set to 9999.
 2201|       |
 2202|       |        mode:
 2203|       |        0 ==> shortest string that yields d when read in
 2204|       |        and rounded to nearest.
 2205|       |        1 ==> like 0, but with Steele & White stopping rule;
 2206|       |        e.g. with IEEE P754 arithmetic , mode 0 gives
 2207|       |        1e23 whereas mode 1 gives 9.999999999999999e22.
 2208|       |        2 ==> max(1,ndigits) significant digits.  This gives a
 2209|       |        return value similar to that of ecvt, except
 2210|       |        that trailing zeros are suppressed.
 2211|       |        3 ==> through ndigits past the decimal point.  This
 2212|       |        gives a return value similar to that from fcvt,
 2213|       |        except that trailing zeros are suppressed, and
 2214|       |        ndigits can be negative.
 2215|       |        4,5 ==> similar to 2 and 3, respectively, but (in
 2216|       |        round-nearest mode) with the tests of mode 0 to
 2217|       |        possibly return a shorter string that rounds to d.
 2218|       |        With IEEE arithmetic and compilation with
 2219|       |        -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
 2220|       |        as modes 2 and 3 when FLT_ROUNDS != 1.
 2221|       |        6-9 ==> Debugging modes similar to mode - 4:  don't try
 2222|       |        fast floating-point estimate (if applicable).
 2223|       |
 2224|       |        Values of mode other than 0-9 are treated as mode 0.
 2225|       |
 2226|       |        Sufficient space is allocated to the return value
 2227|       |        to hold the suppressed trailing zeros.
 2228|       |    */
 2229|       |
 2230|  42.8k|    int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
 2231|  42.8k|        j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
 2232|  42.8k|        spec_case, try_quick;
 2233|  42.8k|    Long L;
 2234|  42.8k|    int denorm;
 2235|  42.8k|    ULong x;
 2236|  42.8k|    Bigint *b, *b1, *delta, *mlo, *mhi, *S;
 2237|  42.8k|    U d2, eps, u;
 2238|  42.8k|    double ds;
 2239|  42.8k|    char *s, *s0;
 2240|       |
 2241|       |    /* set pointers to NULL, to silence gcc compiler warnings and make
 2242|       |       cleanup easier on error */
 2243|  42.8k|    mlo = mhi = S = 0;
 2244|  42.8k|    s0 = 0;
 2245|       |
 2246|  42.8k|    u.d = dd;
 2247|  42.8k|    if (word0(&u) & Sign_bit) {
  ------------------
  |  |  178|  42.8k|#define word0(x) (x)->L[1]
  ------------------
                  if (word0(&u) & Sign_bit) {
  ------------------
  |  |  252|  42.8k|#define Sign_bit 0x80000000
  ------------------
  |  Branch (2247:9): [True: 0, False: 42.8k]
  ------------------
 2248|       |        /* set sign for everything, including 0's and NaNs */
 2249|      0|        *sign = 1;
 2250|      0|        word0(&u) &= ~Sign_bit; /* clear sign bit */
  ------------------
  |  |  178|      0|#define word0(x) (x)->L[1]
  ------------------
                      word0(&u) &= ~Sign_bit; /* clear sign bit */
  ------------------
  |  |  252|      0|#define Sign_bit 0x80000000
  ------------------
 2251|      0|    }
 2252|  42.8k|    else
 2253|  42.8k|        *sign = 0;
 2254|       |
 2255|       |    /* quick return for Infinities, NaNs and zeros */
 2256|  42.8k|    if ((word0(&u) & Exp_mask) == Exp_mask)
  ------------------
  |  |  178|  42.8k|#define word0(x) (x)->L[1]
  ------------------
                  if ((word0(&u) & Exp_mask) == Exp_mask)
  ------------------
  |  |  236|  42.8k|#define Exp_mask  0x7ff00000
  ------------------
                  if ((word0(&u) & Exp_mask) == Exp_mask)
  ------------------
  |  |  236|  42.8k|#define Exp_mask  0x7ff00000
  ------------------
  |  Branch (2256:9): [True: 3.16k, False: 39.6k]
  ------------------
 2257|  3.16k|    {
 2258|       |        /* Infinity or NaN */
 2259|  3.16k|        *decpt = 9999;
 2260|  3.16k|        if (!word1(&u) && !(word0(&u) & 0xfffff))
  ------------------
  |  |  179|  6.32k|#define word1(x) (x)->L[0]
  ------------------
                      if (!word1(&u) && !(word0(&u) & 0xfffff))
  ------------------
  |  |  178|  3.16k|#define word0(x) (x)->L[1]
  ------------------
  |  Branch (2260:13): [True: 3.16k, False: 0]
  |  Branch (2260:27): [True: 3.16k, False: 0]
  ------------------
 2261|  3.16k|            return nrv_alloc("Infinity", rve, 8);
 2262|      0|        return nrv_alloc("NaN", rve, 3);
 2263|  3.16k|    }
 2264|  39.6k|    if (!dval(&u)) {
  ------------------
  |  |  184|  39.6k|#define dval(x) (x)->d
  ------------------
  |  Branch (2264:9): [True: 1.98k, False: 37.7k]
  ------------------
 2265|  1.98k|        *decpt = 1;
 2266|  1.98k|        return nrv_alloc("0", rve, 1);
 2267|  1.98k|    }
 2268|       |
 2269|       |    /* compute k = floor(log10(d)).  The computation may leave k
 2270|       |       one too large, but should never leave k too small. */
 2271|  37.7k|    b = d2b(&u, &be, &bbits);
 2272|  37.7k|    if (b == NULL)
  ------------------
  |  Branch (2272:9): [True: 0, False: 37.7k]
  ------------------
 2273|      0|        goto failed_malloc;
 2274|  37.7k|    if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
  ------------------
  |  |  178|  37.7k|#define word0(x) (x)->L[1]
  ------------------
                  if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
  ------------------
  |  |  233|  37.7k|#define Exp_shift1 20
  ------------------
                  if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
  ------------------
  |  |  236|  37.7k|#define Exp_mask  0x7ff00000
  ------------------
                  if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
  ------------------
  |  |  233|  37.7k|#define Exp_shift1 20
  ------------------
  |  Branch (2274:9): [True: 36.8k, False: 811]
  ------------------
 2275|  36.8k|        dval(&d2) = dval(&u);
  ------------------
  |  |  184|  36.8k|#define dval(x) (x)->d
  ------------------
                      dval(&d2) = dval(&u);
  ------------------
  |  |  184|  36.8k|#define dval(x) (x)->d
  ------------------
 2276|  36.8k|        word0(&d2) &= Frac_mask1;
  ------------------
  |  |  178|  36.8k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&d2) &= Frac_mask1;
  ------------------
  |  |  247|  36.8k|#define Frac_mask1 0xfffff
  ------------------
 2277|  36.8k|        word0(&d2) |= Exp_11;
  ------------------
  |  |  178|  36.8k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&d2) |= Exp_11;
  ------------------
  |  |  244|  36.8k|#define Exp_11 0x3ff00000
  ------------------
 2278|       |
 2279|       |        /* log(x)       ~=~ log(1.5) + (x-1.5)/1.5
 2280|       |         * log10(x)      =  log(x) / log(10)
 2281|       |         *              ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
 2282|       |         * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
 2283|       |         *
 2284|       |         * This suggests computing an approximation k to log10(d) by
 2285|       |         *
 2286|       |         * k = (i - Bias)*0.301029995663981
 2287|       |         *      + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
 2288|       |         *
 2289|       |         * We want k to be too large rather than too small.
 2290|       |         * The error in the first-order Taylor series approximation
 2291|       |         * is in our favor, so we just round up the constant enough
 2292|       |         * to compensate for any error in the multiplication of
 2293|       |         * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
 2294|       |         * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
 2295|       |         * adding 1e-13 to the constant term more than suffices.
 2296|       |         * Hence we adjust the constant term to 0.1760912590558.
 2297|       |         * (We could get a more accurate k by invoking log10,
 2298|       |         *  but this is probably not worthwhile.)
 2299|       |         */
 2300|       |
 2301|  36.8k|        i -= Bias;
  ------------------
  |  |  239|  36.8k|#define Bias 1023
  ------------------
 2302|  36.8k|        denorm = 0;
 2303|  36.8k|    }
 2304|    811|    else {
 2305|       |        /* d is denormalized */
 2306|       |
 2307|    811|        i = bbits + be + (Bias + (P-1) - 1);
  ------------------
  |  |  239|    811|#define Bias 1023
  ------------------
                      i = bbits + be + (Bias + (P-1) - 1);
  ------------------
  |  |  237|    811|#define P 53
  ------------------
 2308|    811|        x = i > 32  ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
  ------------------
  |  |  178|    259|#define word0(x) (x)->L[1]
  ------------------
                      x = i > 32  ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
  ------------------
  |  |  179|    259|#define word1(x) (x)->L[0]
  ------------------
  |  Branch (2308:13): [True: 259, False: 552]
  ------------------
 2309|    811|            : word1(&u) << (32 - i);
  ------------------
  |  |  179|    552|#define word1(x) (x)->L[0]
  ------------------
 2310|    811|        dval(&d2) = x;
  ------------------
  |  |  184|    811|#define dval(x) (x)->d
  ------------------
 2311|    811|        word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
  ------------------
  |  |  178|    811|#define word0(x) (x)->L[1]
  ------------------
                      word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
  ------------------
  |  |  234|    811|#define Exp_msk1    0x100000
  ------------------
 2312|    811|        i -= (Bias + (P-1) - 1) + 1;
  ------------------
  |  |  239|    811|#define Bias 1023
  ------------------
                      i -= (Bias + (P-1) - 1) + 1;
  ------------------
  |  |  237|    811|#define P 53
  ------------------
 2313|    811|        denorm = 1;
 2314|    811|    }
 2315|  37.7k|    ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
  ------------------
  |  |  184|  37.7k|#define dval(x) (x)->d
  ------------------
 2316|  37.7k|        i*0.301029995663981;
 2317|  37.7k|    k = (int)ds;
 2318|  37.7k|    if (ds < 0. && ds != k)
  ------------------
  |  Branch (2318:9): [True: 3.61k, False: 34.0k]
  |  Branch (2318:20): [True: 3.61k, False: 0]
  ------------------
 2319|  3.61k|        k--;    /* want k = floor(ds) */
 2320|  37.7k|    k_check = 1;
 2321|  37.7k|    if (k >= 0 && k <= Ten_pmax) {
  ------------------
  |  |  248|  34.0k|#define Ten_pmax 22
  ------------------
  |  Branch (2321:9): [True: 34.0k, False: 3.61k]
  |  Branch (2321:19): [True: 23.2k, False: 10.8k]
  ------------------
 2322|  23.2k|        if (dval(&u) < tens[k])
  ------------------
  |  |  184|  23.2k|#define dval(x) (x)->d
  ------------------
  |  Branch (2322:13): [True: 640, False: 22.6k]
  ------------------
 2323|    640|            k--;
 2324|  23.2k|        k_check = 0;
 2325|  23.2k|    }
 2326|  37.7k|    j = bbits - i - 1;
 2327|  37.7k|    if (j >= 0) {
  ------------------
  |  Branch (2327:9): [True: 12.5k, False: 25.1k]
  ------------------
 2328|  12.5k|        b2 = 0;
 2329|  12.5k|        s2 = j;
 2330|  12.5k|    }
 2331|  25.1k|    else {
 2332|  25.1k|        b2 = -j;
 2333|  25.1k|        s2 = 0;
 2334|  25.1k|    }
 2335|  37.7k|    if (k >= 0) {
  ------------------
  |  Branch (2335:9): [True: 34.0k, False: 3.61k]
  ------------------
 2336|  34.0k|        b5 = 0;
 2337|  34.0k|        s5 = k;
 2338|  34.0k|        s2 += k;
 2339|  34.0k|    }
 2340|  3.61k|    else {
 2341|  3.61k|        b2 -= k;
 2342|  3.61k|        b5 = -k;
 2343|  3.61k|        s5 = 0;
 2344|  3.61k|    }
 2345|  37.7k|    if (mode < 0 || mode > 9)
  ------------------
  |  Branch (2345:9): [True: 0, False: 37.7k]
  |  Branch (2345:21): [True: 0, False: 37.7k]
  ------------------
 2346|      0|        mode = 0;
 2347|       |
 2348|  37.7k|    try_quick = 1;
 2349|       |
 2350|  37.7k|    if (mode > 5) {
  ------------------
  |  Branch (2350:9): [True: 0, False: 37.7k]
  ------------------
 2351|      0|        mode -= 4;
 2352|      0|        try_quick = 0;
 2353|      0|    }
 2354|  37.7k|    leftright = 1;
 2355|  37.7k|    ilim = ilim1 = -1;  /* Values for cases 0 and 1; done here to */
 2356|       |    /* silence erroneous "gcc -Wall" warning. */
 2357|  37.7k|    switch(mode) {
  ------------------
  |  Branch (2357:12): [True: 37.7k, False: 0]
  ------------------
 2358|  37.7k|    case 0:
  ------------------
  |  Branch (2358:5): [True: 37.7k, False: 0]
  ------------------
 2359|  37.7k|    case 1:
  ------------------
  |  Branch (2359:5): [True: 0, False: 37.7k]
  ------------------
 2360|  37.7k|        i = 18;
 2361|  37.7k|        ndigits = 0;
 2362|  37.7k|        break;
 2363|      0|    case 2:
  ------------------
  |  Branch (2363:5): [True: 0, False: 37.7k]
  ------------------
 2364|      0|        leftright = 0;
 2365|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 2366|      0|    case 4:
  ------------------
  |  Branch (2366:5): [True: 0, False: 37.7k]
  ------------------
 2367|      0|        if (ndigits <= 0)
  ------------------
  |  Branch (2367:13): [True: 0, False: 0]
  ------------------
 2368|      0|            ndigits = 1;
 2369|      0|        ilim = ilim1 = i = ndigits;
 2370|      0|        break;
 2371|      0|    case 3:
  ------------------
  |  Branch (2371:5): [True: 0, False: 37.7k]
  ------------------
 2372|      0|        leftright = 0;
 2373|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 2374|      0|    case 5:
  ------------------
  |  Branch (2374:5): [True: 0, False: 37.7k]
  ------------------
 2375|      0|        i = ndigits + k + 1;
 2376|      0|        ilim = i;
 2377|      0|        ilim1 = i - 1;
 2378|      0|        if (i <= 0)
  ------------------
  |  Branch (2378:13): [True: 0, False: 0]
  ------------------
 2379|      0|            i = 1;
 2380|  37.7k|    }
 2381|  37.7k|    s0 = rv_alloc(i);
 2382|  37.7k|    if (s0 == NULL)
  ------------------
  |  Branch (2382:9): [True: 0, False: 37.7k]
  ------------------
 2383|      0|        goto failed_malloc;
 2384|  37.7k|    s = s0;
 2385|       |
 2386|       |
 2387|  37.7k|    if (ilim >= 0 && ilim <= Quick_max && try_quick) {
  ------------------
  |  |  256|  37.7k|#define Quick_max 14
  ------------------
  |  Branch (2387:9): [True: 0, False: 37.7k]
  |  Branch (2387:22): [True: 0, False: 0]
  |  Branch (2387:43): [True: 0, False: 0]
  ------------------
 2388|       |
 2389|       |        /* Try to get by with floating-point arithmetic. */
 2390|       |
 2391|      0|        i = 0;
 2392|      0|        dval(&d2) = dval(&u);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                      dval(&d2) = dval(&u);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2393|      0|        k0 = k;
 2394|      0|        ilim0 = ilim;
 2395|      0|        ieps = 2; /* conservative */
 2396|      0|        if (k > 0) {
  ------------------
  |  Branch (2396:13): [True: 0, False: 0]
  ------------------
 2397|      0|            ds = tens[k&0xf];
 2398|      0|            j = k >> 4;
 2399|      0|            if (j & Bletch) {
  ------------------
  |  |  249|      0|#define Bletch 0x10
  ------------------
  |  Branch (2399:17): [True: 0, False: 0]
  ------------------
 2400|       |                /* prevent overflows */
 2401|      0|                j &= Bletch - 1;
  ------------------
  |  |  249|      0|#define Bletch 0x10
  ------------------
 2402|      0|                dval(&u) /= bigtens[n_bigtens-1];
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                              dval(&u) /= bigtens[n_bigtens-1];
  ------------------
  |  | 1117|      0|#define n_bigtens 5
  ------------------
 2403|      0|                ieps++;
 2404|      0|            }
 2405|      0|            for(; j; j >>= 1, i++)
  ------------------
  |  Branch (2405:19): [True: 0, False: 0]
  ------------------
 2406|      0|                if (j & 1) {
  ------------------
  |  Branch (2406:21): [True: 0, False: 0]
  ------------------
 2407|      0|                    ieps++;
 2408|      0|                    ds *= bigtens[i];
 2409|      0|                }
 2410|      0|            dval(&u) /= ds;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2411|      0|        }
 2412|      0|        else if ((j1 = -k)) {
  ------------------
  |  Branch (2412:18): [True: 0, False: 0]
  ------------------
 2413|      0|            dval(&u) *= tens[j1 & 0xf];
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2414|      0|            for(j = j1 >> 4; j; j >>= 1, i++)
  ------------------
  |  Branch (2414:30): [True: 0, False: 0]
  ------------------
 2415|      0|                if (j & 1) {
  ------------------
  |  Branch (2415:21): [True: 0, False: 0]
  ------------------
 2416|      0|                    ieps++;
 2417|      0|                    dval(&u) *= bigtens[i];
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2418|      0|                }
 2419|      0|        }
 2420|      0|        if (k_check && dval(&u) < 1. && ilim > 0) {
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2420:13): [True: 0, False: 0]
  |  Branch (2420:24): [True: 0, False: 0]
  |  Branch (2420:41): [True: 0, False: 0]
  ------------------
 2421|      0|            if (ilim1 <= 0)
  ------------------
  |  Branch (2421:17): [True: 0, False: 0]
  ------------------
 2422|      0|                goto fast_failed;
 2423|      0|            ilim = ilim1;
 2424|      0|            k--;
 2425|      0|            dval(&u) *= 10.;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2426|      0|            ieps++;
 2427|      0|        }
 2428|      0|        dval(&eps) = ieps*dval(&u) + 7.;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                      dval(&eps) = ieps*dval(&u) + 7.;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2429|      0|        word0(&eps) -= (P-1)*Exp_msk1;
  ------------------
  |  |  178|      0|#define word0(x) (x)->L[1]
  ------------------
                      word0(&eps) -= (P-1)*Exp_msk1;
  ------------------
  |  |  237|      0|#define P 53
  ------------------
                      word0(&eps) -= (P-1)*Exp_msk1;
  ------------------
  |  |  234|      0|#define Exp_msk1    0x100000
  ------------------
 2430|      0|        if (ilim == 0) {
  ------------------
  |  Branch (2430:13): [True: 0, False: 0]
  ------------------
 2431|      0|            S = mhi = 0;
 2432|      0|            dval(&u) -= 5.;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2433|      0|            if (dval(&u) > dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                          if (dval(&u) > dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2433:17): [True: 0, False: 0]
  ------------------
 2434|      0|                goto one_digit;
 2435|      0|            if (dval(&u) < -dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                          if (dval(&u) < -dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2435:17): [True: 0, False: 0]
  ------------------
 2436|      0|                goto no_digits;
 2437|      0|            goto fast_failed;
 2438|      0|        }
 2439|      0|        if (leftright) {
  ------------------
  |  Branch (2439:13): [True: 0, False: 0]
  ------------------
 2440|       |            /* Use Steele & White method of only
 2441|       |             * generating digits needed.
 2442|       |             */
 2443|      0|            dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                          dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2444|      0|            for(i = 0;;) {
 2445|      0|                L = (Long)dval(&u);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2446|      0|                dval(&u) -= L;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2447|      0|                *s++ = '0' + (int)L;
 2448|      0|                if (dval(&u) < dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                              if (dval(&u) < dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2448:21): [True: 0, False: 0]
  ------------------
 2449|      0|                    goto ret1;
 2450|      0|                if (1. - dval(&u) < dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                              if (1. - dval(&u) < dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2450:21): [True: 0, False: 0]
  ------------------
 2451|      0|                    goto bump_up;
 2452|      0|                if (++i >= ilim)
  ------------------
  |  Branch (2452:21): [True: 0, False: 0]
  ------------------
 2453|      0|                    break;
 2454|      0|                dval(&eps) *= 10.;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2455|      0|                dval(&u) *= 10.;
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2456|      0|            }
 2457|      0|        }
 2458|      0|        else {
 2459|       |            /* Generate ilim digits, then fix them up. */
 2460|      0|            dval(&eps) *= tens[ilim-1];
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2461|      0|            for(i = 1;; i++, dval(&u) *= 10.) {
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2462|      0|                L = (Long)(dval(&u));
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2463|      0|                if (!(dval(&u) -= L))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2463:21): [True: 0, False: 0]
  ------------------
 2464|      0|                    ilim = i;
 2465|      0|                *s++ = '0' + (int)L;
 2466|      0|                if (i == ilim) {
  ------------------
  |  Branch (2466:21): [True: 0, False: 0]
  ------------------
 2467|      0|                    if (dval(&u) > 0.5 + dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                                  if (dval(&u) > 0.5 + dval(&eps))
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2467:25): [True: 0, False: 0]
  ------------------
 2468|      0|                        goto bump_up;
 2469|      0|                    else if (dval(&u) < 0.5 - dval(&eps)) {
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                                  else if (dval(&u) < 0.5 - dval(&eps)) {
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2469:30): [True: 0, False: 0]
  ------------------
 2470|      0|                        while(*--s == '0');
  ------------------
  |  Branch (2470:31): [True: 0, False: 0]
  ------------------
 2471|      0|                        s++;
 2472|      0|                        goto ret1;
 2473|      0|                    }
 2474|      0|                    break;
 2475|      0|                }
 2476|      0|            }
 2477|      0|        }
 2478|      0|      fast_failed:
 2479|      0|        s = s0;
 2480|      0|        dval(&u) = dval(&d2);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                      dval(&u) = dval(&d2);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2481|      0|        k = k0;
 2482|      0|        ilim = ilim0;
 2483|      0|    }
 2484|       |
 2485|       |    /* Do we have a "small" integer? */
 2486|       |
 2487|  37.7k|    if (be >= 0 && k <= Int_max) {
  ------------------
  |  |  257|  28.4k|#define Int_max 14
  ------------------
  |  Branch (2487:9): [True: 28.4k, False: 9.29k]
  |  Branch (2487:20): [True: 15.0k, False: 13.3k]
  ------------------
 2488|       |        /* Yes. */
 2489|  15.0k|        ds = tens[k];
 2490|  15.0k|        if (ndigits < 0 && ilim <= 0) {
  ------------------
  |  Branch (2490:13): [True: 0, False: 15.0k]
  |  Branch (2490:28): [True: 0, False: 0]
  ------------------
 2491|      0|            S = mhi = 0;
 2492|      0|            if (ilim < 0 || dval(&u) <= 5*ds)
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2492:17): [True: 0, False: 0]
  |  Branch (2492:29): [True: 0, False: 0]
  ------------------
 2493|      0|                goto no_digits;
 2494|      0|            goto one_digit;
 2495|      0|        }
 2496|  65.1k|        for(i = 1;; i++, dval(&u) *= 10.) {
  ------------------
  |  |  184|  50.0k|#define dval(x) (x)->d
  ------------------
 2497|  65.1k|            L = (Long)(dval(&u) / ds);
  ------------------
  |  |  184|  65.1k|#define dval(x) (x)->d
  ------------------
 2498|  65.1k|            dval(&u) -= L*ds;
  ------------------
  |  |  184|  65.1k|#define dval(x) (x)->d
  ------------------
 2499|  65.1k|            *s++ = '0' + (int)L;
 2500|  65.1k|            if (!dval(&u)) {
  ------------------
  |  |  184|  65.1k|#define dval(x) (x)->d
  ------------------
  |  Branch (2500:17): [True: 15.0k, False: 50.0k]
  ------------------
 2501|  15.0k|                break;
 2502|  15.0k|            }
 2503|  50.0k|            if (i == ilim) {
  ------------------
  |  Branch (2503:17): [True: 0, False: 50.0k]
  ------------------
 2504|      0|                dval(&u) += dval(&u);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                              dval(&u) += dval(&u);
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
 2505|      0|                if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
                              if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
  ------------------
  |  |  184|      0|#define dval(x) (x)->d
  ------------------
  |  Branch (2505:21): [True: 0, False: 0]
  |  Branch (2505:39): [True: 0, False: 0]
  |  Branch (2505:57): [True: 0, False: 0]
  ------------------
 2506|      0|                  bump_up:
 2507|      0|                    while(*--s == '9')
  ------------------
  |  Branch (2507:27): [True: 0, False: 0]
  ------------------
 2508|      0|                        if (s == s0) {
  ------------------
  |  Branch (2508:29): [True: 0, False: 0]
  ------------------
 2509|      0|                            k++;
 2510|      0|                            *s = '0';
 2511|      0|                            break;
 2512|      0|                        }
 2513|      0|                    ++*s++;
 2514|      0|                }
 2515|      0|                else {
 2516|       |                    /* Strip trailing zeros. This branch was missing from the
 2517|       |                       original dtoa.c, leading to surplus trailing zeros in
 2518|       |                       some cases. See bugs.python.org/issue40780. */
 2519|      0|                    while (s > s0 && s[-1] == '0') {
  ------------------
  |  Branch (2519:28): [True: 0, False: 0]
  |  Branch (2519:38): [True: 0, False: 0]
  ------------------
 2520|      0|                        --s;
 2521|      0|                    }
 2522|      0|                }
 2523|      0|                break;
 2524|      0|            }
 2525|  50.0k|        }
 2526|  15.0k|        goto ret1;
 2527|  15.0k|    }
 2528|       |
 2529|  22.6k|    m2 = b2;
 2530|  22.6k|    m5 = b5;
 2531|  22.6k|    if (leftright) {
  ------------------
  |  Branch (2531:9): [True: 22.6k, False: 0]
  ------------------
 2532|  22.6k|        i =
 2533|  22.6k|            denorm ? be + (Bias + (P-1) - 1 + 1) :
  ------------------
  |  |  239|    811|#define Bias 1023
  ------------------
                          denorm ? be + (Bias + (P-1) - 1 + 1) :
  ------------------
  |  |  237|    811|#define P 53
  ------------------
  |  Branch (2533:13): [True: 811, False: 21.7k]
  ------------------
 2534|  22.6k|            1 + P - bbits;
  ------------------
  |  |  237|  21.7k|#define P 53
  ------------------
 2535|  22.6k|        b2 += i;
 2536|  22.6k|        s2 += i;
 2537|  22.6k|        mhi = i2b(1);
 2538|  22.6k|        if (mhi == NULL)
  ------------------
  |  Branch (2538:13): [True: 0, False: 22.6k]
  ------------------
 2539|      0|            goto failed_malloc;
 2540|  22.6k|    }
 2541|  22.6k|    if (m2 > 0 && s2 > 0) {
  ------------------
  |  Branch (2541:9): [True: 16.9k, False: 5.68k]
  |  Branch (2541:19): [True: 16.9k, False: 0]
  ------------------
 2542|  16.9k|        i = m2 < s2 ? m2 : s2;
  ------------------
  |  Branch (2542:13): [True: 5.95k, False: 10.9k]
  ------------------
 2543|  16.9k|        b2 -= i;
 2544|  16.9k|        m2 -= i;
 2545|  16.9k|        s2 -= i;
 2546|  16.9k|    }
 2547|  22.6k|    if (b5 > 0) {
  ------------------
  |  Branch (2547:9): [True: 3.61k, False: 18.9k]
  ------------------
 2548|  3.61k|        if (leftright) {
  ------------------
  |  Branch (2548:13): [True: 3.61k, False: 0]
  ------------------
 2549|  3.61k|            if (m5 > 0) {
  ------------------
  |  Branch (2549:17): [True: 3.61k, False: 0]
  ------------------
 2550|  3.61k|                mhi = pow5mult(mhi, m5);
 2551|  3.61k|                if (mhi == NULL)
  ------------------
  |  Branch (2551:21): [True: 0, False: 3.61k]
  ------------------
 2552|      0|                    goto failed_malloc;
 2553|  3.61k|                b1 = mult(mhi, b);
 2554|  3.61k|                Bfree(b);
 2555|  3.61k|                b = b1;
 2556|  3.61k|                if (b == NULL)
  ------------------
  |  Branch (2556:21): [True: 0, False: 3.61k]
  ------------------
 2557|      0|                    goto failed_malloc;
 2558|  3.61k|            }
 2559|  3.61k|            if ((j = b5 - m5)) {
  ------------------
  |  Branch (2559:17): [True: 0, False: 3.61k]
  ------------------
 2560|      0|                b = pow5mult(b, j);
 2561|      0|                if (b == NULL)
  ------------------
  |  Branch (2561:21): [True: 0, False: 0]
  ------------------
 2562|      0|                    goto failed_malloc;
 2563|      0|            }
 2564|  3.61k|        }
 2565|      0|        else {
 2566|      0|            b = pow5mult(b, b5);
 2567|      0|            if (b == NULL)
  ------------------
  |  Branch (2567:17): [True: 0, False: 0]
  ------------------
 2568|      0|                goto failed_malloc;
 2569|      0|        }
 2570|  3.61k|    }
 2571|  22.6k|    S = i2b(1);
 2572|  22.6k|    if (S == NULL)
  ------------------
  |  Branch (2572:9): [True: 0, False: 22.6k]
  ------------------
 2573|      0|        goto failed_malloc;
 2574|  22.6k|    if (s5 > 0) {
  ------------------
  |  Branch (2574:9): [True: 17.0k, False: 5.54k]
  ------------------
 2575|  17.0k|        S = pow5mult(S, s5);
 2576|  17.0k|        if (S == NULL)
  ------------------
  |  Branch (2576:13): [True: 0, False: 17.0k]
  ------------------
 2577|      0|            goto failed_malloc;
 2578|  17.0k|    }
 2579|       |
 2580|       |    /* Check for special case that d is a normalized power of 2. */
 2581|       |
 2582|  22.6k|    spec_case = 0;
 2583|  22.6k|    if ((mode < 2 || leftright)
  ------------------
  |  Branch (2583:10): [True: 22.6k, False: 0]
  |  Branch (2583:22): [True: 0, False: 0]
  ------------------
 2584|  22.6k|        ) {
 2585|  22.6k|        if (!word1(&u) && !(word0(&u) & Bndry_mask)
  ------------------
  |  |  179|  45.2k|#define word1(x) (x)->L[0]
  ------------------
                      if (!word1(&u) && !(word0(&u) & Bndry_mask)
  ------------------
  |  |  178|    833|#define word0(x) (x)->L[1]
  ------------------
                      if (!word1(&u) && !(word0(&u) & Bndry_mask)
  ------------------
  |  |  250|    833|#define Bndry_mask  0xfffff
  ------------------
  |  Branch (2585:13): [True: 833, False: 21.7k]
  |  Branch (2585:27): [True: 539, False: 294]
  ------------------
 2586|    539|            && word0(&u) & (Exp_mask & ~Exp_msk1)
  ------------------
  |  |  178|    539|#define word0(x) (x)->L[1]
  ------------------
                          && word0(&u) & (Exp_mask & ~Exp_msk1)
  ------------------
  |  |  236|    539|#define Exp_mask  0x7ff00000
  ------------------
                          && word0(&u) & (Exp_mask & ~Exp_msk1)
  ------------------
  |  |  234|    539|#define Exp_msk1    0x100000
  ------------------
  |  Branch (2586:16): [True: 539, False: 0]
  ------------------
 2587|  22.6k|            ) {
 2588|       |            /* The special case */
 2589|    539|            b2 += Log2P;
  ------------------
  |  |  253|    539|#define Log2P 1
  ------------------
 2590|    539|            s2 += Log2P;
  ------------------
  |  |  253|    539|#define Log2P 1
  ------------------
 2591|    539|            spec_case = 1;
 2592|    539|        }
 2593|  22.6k|    }
 2594|       |
 2595|       |    /* Arrange for convenient computation of quotients:
 2596|       |     * shift left if necessary so divisor has 4 leading 0 bits.
 2597|       |     *
 2598|       |     * Perhaps we should just compute leading 28 bits of S once
 2599|       |     * and for all and pass them and a shift to quorem, so it
 2600|       |     * can do shifts and ors to compute the numerator for q.
 2601|       |     */
 2602|  22.6k|#define iInc 28
 2603|  22.6k|    i = dshift(S, s2);
 2604|  22.6k|    b2 += i;
 2605|  22.6k|    m2 += i;
 2606|  22.6k|    s2 += i;
 2607|  22.6k|    if (b2 > 0) {
  ------------------
  |  Branch (2607:9): [True: 22.6k, False: 0]
  ------------------
 2608|  22.6k|        b = lshift(b, b2);
 2609|  22.6k|        if (b == NULL)
  ------------------
  |  Branch (2609:13): [True: 0, False: 22.6k]
  ------------------
 2610|      0|            goto failed_malloc;
 2611|  22.6k|    }
 2612|  22.6k|    if (s2 > 0) {
  ------------------
  |  Branch (2612:9): [True: 22.5k, False: 25]
  ------------------
 2613|  22.5k|        S = lshift(S, s2);
 2614|  22.5k|        if (S == NULL)
  ------------------
  |  Branch (2614:13): [True: 0, False: 22.5k]
  ------------------
 2615|      0|            goto failed_malloc;
 2616|  22.5k|    }
 2617|  22.6k|    if (k_check) {
  ------------------
  |  Branch (2617:9): [True: 14.4k, False: 8.17k]
  ------------------
 2618|  14.4k|        if (cmp(b,S) < 0) {
  ------------------
  |  Branch (2618:13): [True: 3.96k, False: 10.4k]
  ------------------
 2619|  3.96k|            k--;
 2620|  3.96k|            b = multadd(b, 10, 0);      /* we botched the k estimate */
 2621|  3.96k|            if (b == NULL)
  ------------------
  |  Branch (2621:17): [True: 0, False: 3.96k]
  ------------------
 2622|      0|                goto failed_malloc;
 2623|  3.96k|            if (leftright) {
  ------------------
  |  Branch (2623:17): [True: 3.96k, False: 0]
  ------------------
 2624|  3.96k|                mhi = multadd(mhi, 10, 0);
 2625|  3.96k|                if (mhi == NULL)
  ------------------
  |  Branch (2625:21): [True: 0, False: 3.96k]
  ------------------
 2626|      0|                    goto failed_malloc;
 2627|  3.96k|            }
 2628|  3.96k|            ilim = ilim1;
 2629|  3.96k|        }
 2630|  14.4k|    }
 2631|  22.6k|    if (ilim <= 0 && (mode == 3 || mode == 5)) {
  ------------------
  |  Branch (2631:9): [True: 22.6k, False: 0]
  |  Branch (2631:23): [True: 0, False: 22.6k]
  |  Branch (2631:36): [True: 0, False: 22.6k]
  ------------------
 2632|      0|        if (ilim < 0) {
  ------------------
  |  Branch (2632:13): [True: 0, False: 0]
  ------------------
 2633|       |            /* no digits, fcvt style */
 2634|      0|          no_digits:
 2635|      0|            k = -1 - ndigits;
 2636|      0|            goto ret;
 2637|      0|        }
 2638|      0|        else {
 2639|      0|            S = multadd(S, 5, 0);
 2640|      0|            if (S == NULL)
  ------------------
  |  Branch (2640:17): [True: 0, False: 0]
  ------------------
 2641|      0|                goto failed_malloc;
 2642|      0|            if (cmp(b, S) <= 0)
  ------------------
  |  Branch (2642:17): [True: 0, False: 0]
  ------------------
 2643|      0|                goto no_digits;
 2644|      0|        }
 2645|      0|      one_digit:
 2646|      0|        *s++ = '1';
 2647|      0|        k++;
 2648|      0|        goto ret;
 2649|      0|    }
 2650|  22.6k|    if (leftright) {
  ------------------
  |  Branch (2650:9): [True: 22.6k, False: 0]
  ------------------
 2651|  22.6k|        if (m2 > 0) {
  ------------------
  |  Branch (2651:13): [True: 22.2k, False: 401]
  ------------------
 2652|  22.2k|            mhi = lshift(mhi, m2);
 2653|  22.2k|            if (mhi == NULL)
  ------------------
  |  Branch (2653:17): [True: 0, False: 22.2k]
  ------------------
 2654|      0|                goto failed_malloc;
 2655|  22.2k|        }
 2656|       |
 2657|       |        /* Compute mlo -- check for special case
 2658|       |         * that d is a normalized power of 2.
 2659|       |         */
 2660|       |
 2661|  22.6k|        mlo = mhi;
 2662|  22.6k|        if (spec_case) {
  ------------------
  |  Branch (2662:13): [True: 539, False: 22.0k]
  ------------------
 2663|    539|            mhi = Balloc(mhi->k);
 2664|    539|            if (mhi == NULL)
  ------------------
  |  Branch (2664:17): [True: 0, False: 539]
  ------------------
 2665|      0|                goto failed_malloc;
 2666|    539|            Bcopy(mhi, mlo);
  ------------------
  |  |  433|    539|#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign,   \
  |  |  434|    539|                          y->wds*sizeof(Long) + 2*sizeof(int))
  ------------------
 2667|    539|            mhi = lshift(mhi, Log2P);
  ------------------
  |  |  253|    539|#define Log2P 1
  ------------------
 2668|    539|            if (mhi == NULL)
  ------------------
  |  Branch (2668:17): [True: 0, False: 539]
  ------------------
 2669|      0|                goto failed_malloc;
 2670|    539|        }
 2671|       |
 2672|   111k|        for(i = 1;;i++) {
 2673|   111k|            dig = quorem(b,S) + '0';
 2674|       |            /* Do we yet have the shortest decimal string
 2675|       |             * that will round to d?
 2676|       |             */
 2677|   111k|            j = cmp(b, mlo);
 2678|   111k|            delta = diff(S, mhi);
 2679|   111k|            if (delta == NULL)
  ------------------
  |  Branch (2679:17): [True: 0, False: 111k]
  ------------------
 2680|      0|                goto failed_malloc;
 2681|   111k|            j1 = delta->sign ? 1 : cmp(b, delta);
  ------------------
  |  Branch (2681:18): [True: 1.03k, False: 110k]
  ------------------
 2682|   111k|            Bfree(delta);
 2683|   111k|            if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
  ------------------
  |  |  179|  4.64k|#define word1(x) (x)->L[0]
  ------------------
  |  Branch (2683:17): [True: 4.64k, False: 107k]
  |  Branch (2683:28): [True: 4.64k, False: 0]
  |  Branch (2683:41): [True: 4.32k, False: 316]
  ------------------
 2684|   111k|                ) {
 2685|  4.32k|                if (dig == '9')
  ------------------
  |  Branch (2685:21): [True: 3.04k, False: 1.28k]
  ------------------
 2686|  3.04k|                    goto round_9_up;
 2687|  1.28k|                if (j > 0)
  ------------------
  |  Branch (2687:21): [True: 1.21k, False: 74]
  ------------------
 2688|  1.21k|                    dig++;
 2689|  1.28k|                *s++ = dig;
 2690|  1.28k|                goto ret;
 2691|  4.32k|            }
 2692|   107k|            if (j < 0 || (j == 0 && mode != 1
  ------------------
  |  Branch (2692:17): [True: 12.4k, False: 94.9k]
  |  Branch (2692:27): [True: 1.86k, False: 93.1k]
  |  Branch (2692:37): [True: 1.86k, False: 0]
  ------------------
 2693|  1.86k|                          && !(word1(&u) & 1)
  ------------------
  |  |  179|  1.86k|#define word1(x) (x)->L[0]
  ------------------
  |  Branch (2693:30): [True: 237, False: 1.62k]
  ------------------
 2694|  94.9k|                    )) {
 2695|  12.6k|                if (!b->x[0] && b->wds <= 1) {
  ------------------
  |  Branch (2695:21): [True: 2.76k, False: 9.88k]
  |  Branch (2695:33): [True: 2.50k, False: 259]
  ------------------
 2696|  2.50k|                    goto accept_dig;
 2697|  2.50k|                }
 2698|  10.1k|                if (j1 > 0) {
  ------------------
  |  Branch (2698:21): [True: 3.08k, False: 7.06k]
  ------------------
 2699|  3.08k|                    b = lshift(b, 1);
 2700|  3.08k|                    if (b == NULL)
  ------------------
  |  Branch (2700:25): [True: 0, False: 3.08k]
  ------------------
 2701|      0|                        goto failed_malloc;
 2702|  3.08k|                    j1 = cmp(b, S);
 2703|  3.08k|                    if ((j1 > 0 || (j1 == 0 && dig & 1))
  ------------------
  |  Branch (2703:26): [True: 410, False: 2.67k]
  |  Branch (2703:37): [True: 2.34k, False: 322]
  |  Branch (2703:48): [True: 177, False: 2.17k]
  ------------------
 2704|    587|                        && dig++ == '9')
  ------------------
  |  Branch (2704:28): [True: 3, False: 584]
  ------------------
 2705|      3|                        goto round_9_up;
 2706|  3.08k|                }
 2707|  12.6k|              accept_dig:
 2708|  12.6k|                *s++ = dig;
 2709|  12.6k|                goto ret;
 2710|  10.1k|            }
 2711|  94.7k|            if (j1 > 0) {
  ------------------
  |  Branch (2711:17): [True: 5.62k, False: 89.1k]
  ------------------
 2712|  5.62k|                if (dig == '9') { /* possible if i == 1 */
  ------------------
  |  Branch (2712:21): [True: 944, False: 4.68k]
  ------------------
 2713|  3.99k|                  round_9_up:
 2714|  3.99k|                    *s++ = '9';
 2715|  3.99k|                    goto roundoff;
 2716|    944|                }
 2717|  4.68k|                *s++ = dig + 1;
 2718|  4.68k|                goto ret;
 2719|  5.62k|            }
 2720|  89.1k|            *s++ = dig;
 2721|  89.1k|            if (i == ilim)
  ------------------
  |  Branch (2721:17): [True: 0, False: 89.1k]
  ------------------
 2722|      0|                break;
 2723|  89.1k|            b = multadd(b, 10, 0);
 2724|  89.1k|            if (b == NULL)
  ------------------
  |  Branch (2724:17): [True: 0, False: 89.1k]
  ------------------
 2725|      0|                goto failed_malloc;
 2726|  89.1k|            if (mlo == mhi) {
  ------------------
  |  Branch (2726:17): [True: 88.2k, False: 885]
  ------------------
 2727|  88.2k|                mlo = mhi = multadd(mhi, 10, 0);
 2728|  88.2k|                if (mlo == NULL)
  ------------------
  |  Branch (2728:21): [True: 0, False: 88.2k]
  ------------------
 2729|      0|                    goto failed_malloc;
 2730|  88.2k|            }
 2731|    885|            else {
 2732|    885|                mlo = multadd(mlo, 10, 0);
 2733|    885|                if (mlo == NULL)
  ------------------
  |  Branch (2733:21): [True: 0, False: 885]
  ------------------
 2734|      0|                    goto failed_malloc;
 2735|    885|                mhi = multadd(mhi, 10, 0);
 2736|    885|                if (mhi == NULL)
  ------------------
  |  Branch (2736:21): [True: 0, False: 885]
  ------------------
 2737|      0|                    goto failed_malloc;
 2738|    885|            }
 2739|  89.1k|        }
 2740|  22.6k|    }
 2741|      0|    else
 2742|      0|        for(i = 1;; i++) {
 2743|      0|            *s++ = dig = quorem(b,S) + '0';
 2744|      0|            if (!b->x[0] && b->wds <= 1) {
  ------------------
  |  Branch (2744:17): [True: 0, False: 0]
  |  Branch (2744:29): [True: 0, False: 0]
  ------------------
 2745|      0|                goto ret;
 2746|      0|            }
 2747|      0|            if (i >= ilim)
  ------------------
  |  Branch (2747:17): [True: 0, False: 0]
  ------------------
 2748|      0|                break;
 2749|      0|            b = multadd(b, 10, 0);
 2750|      0|            if (b == NULL)
  ------------------
  |  Branch (2750:17): [True: 0, False: 0]
  ------------------
 2751|      0|                goto failed_malloc;
 2752|      0|        }
 2753|       |
 2754|       |    /* Round off last digit */
 2755|       |
 2756|      0|    b = lshift(b, 1);
 2757|      0|    if (b == NULL)
  ------------------
  |  Branch (2757:9): [True: 0, False: 0]
  ------------------
 2758|      0|        goto failed_malloc;
 2759|      0|    j = cmp(b, S);
 2760|      0|    if (j > 0 || (j == 0 && dig & 1)) {
  ------------------
  |  Branch (2760:9): [True: 0, False: 0]
  |  Branch (2760:19): [True: 0, False: 0]
  |  Branch (2760:29): [True: 0, False: 0]
  ------------------
 2761|  3.99k|      roundoff:
 2762|  3.99k|        while(*--s == '9')
  ------------------
  |  Branch (2762:15): [True: 3.99k, False: 0]
  ------------------
 2763|  3.99k|            if (s == s0) {
  ------------------
  |  Branch (2763:17): [True: 3.99k, False: 0]
  ------------------
 2764|  3.99k|                k++;
 2765|  3.99k|                *s++ = '1';
 2766|  3.99k|                goto ret;
 2767|  3.99k|            }
 2768|      0|        ++*s++;
 2769|      0|    }
 2770|      0|    else {
 2771|      0|        while(*--s == '0');
  ------------------
  |  Branch (2771:15): [True: 0, False: 0]
  ------------------
 2772|      0|        s++;
 2773|      0|    }
 2774|  22.6k|  ret:
 2775|  22.6k|    Bfree(S);
 2776|  22.6k|    if (mhi) {
  ------------------
  |  Branch (2776:9): [True: 22.6k, False: 0]
  ------------------
 2777|  22.6k|        if (mlo && mlo != mhi)
  ------------------
  |  Branch (2777:13): [True: 22.6k, False: 0]
  |  Branch (2777:20): [True: 539, False: 22.0k]
  ------------------
 2778|    539|            Bfree(mlo);
 2779|  22.6k|        Bfree(mhi);
 2780|  22.6k|    }
 2781|  37.7k|  ret1:
 2782|  37.7k|    Bfree(b);
 2783|  37.7k|    *s = 0;
 2784|  37.7k|    *decpt = k + 1;
 2785|  37.7k|    if (rve)
  ------------------
  |  Branch (2785:9): [True: 37.7k, False: 0]
  ------------------
 2786|  37.7k|        *rve = s;
 2787|  37.7k|    return s0;
 2788|      0|  failed_malloc:
 2789|      0|    if (S)
  ------------------
  |  Branch (2789:9): [True: 0, False: 0]
  ------------------
 2790|      0|        Bfree(S);
 2791|      0|    if (mlo && mlo != mhi)
  ------------------
  |  Branch (2791:9): [True: 0, False: 0]
  |  Branch (2791:16): [True: 0, False: 0]
  ------------------
 2792|      0|        Bfree(mlo);
 2793|      0|    if (mhi)
  ------------------
  |  Branch (2793:9): [True: 0, False: 0]
  ------------------
 2794|      0|        Bfree(mhi);
 2795|      0|    if (b)
  ------------------
  |  Branch (2795:9): [True: 0, False: 0]
  ------------------
 2796|      0|        Bfree(b);
 2797|      0|    if (s0)
  ------------------
  |  Branch (2797:9): [True: 0, False: 0]
  ------------------
 2798|      0|        _Py_dg_freedtoa(s0);
 2799|       |    return NULL;
 2800|  22.6k|}
_PyDtoa_Init:
 2806|      2|{
 2807|      2|#if _PY_SHORT_FLOAT_REPR == 1 && !defined(Py_USING_MEMORY_DEBUGGER)
 2808|      2|    Bigint **p5s = interp->dtoa.p5s;
 2809|       |
 2810|       |    // 5**4 = 625
 2811|      2|    Bigint *p5 = i2b(625);
 2812|      2|    if (p5 == NULL) {
  ------------------
  |  Branch (2812:9): [True: 0, False: 2]
  ------------------
 2813|      0|        return PyStatus_NoMemory();
 2814|      0|    }
 2815|      2|    p5s[0] = p5;
 2816|       |
 2817|       |    // compute 5**8, 5**16, 5**32, ..., 5**512
 2818|     16|    for (Py_ssize_t i = 1; i < Bigint_Pow5size; i++) {
  ------------------
  |  |  483|     16|#define Bigint_Pow5size 8
  ------------------
  |  Branch (2818:28): [True: 14, False: 2]
  ------------------
 2819|     14|        p5 = mult(p5, p5);
 2820|     14|        if (p5 == NULL) {
  ------------------
  |  Branch (2820:13): [True: 0, False: 14]
  ------------------
 2821|      0|            return PyStatus_NoMemory();
 2822|      0|        }
 2823|     14|        p5s[i] = p5;
 2824|     14|    }
 2825|       |
 2826|      2|#endif
 2827|      2|    return PyStatus_Ok();
 2828|      2|}
dtoa.c:s2b:
  483|  31.3k|{
  484|  31.3k|    Bigint *b;
  485|  31.3k|    int i, k;
  486|  31.3k|    Long x, y;
  487|       |
  488|  31.3k|    x = (nd + 8) / 9;
  489|  53.1k|    for(k = 0, y = 1; x > y; y <<= 1, k++) ;
  ------------------
  |  Branch (489:23): [True: 21.7k, False: 31.3k]
  ------------------
  490|  31.3k|    b = Balloc(k);
  491|  31.3k|    if (b == NULL)
  ------------------
  |  Branch (491:9): [True: 0, False: 31.3k]
  ------------------
  492|      0|        return NULL;
  493|  31.3k|    b->x[0] = y9;
  494|  31.3k|    b->wds = 1;
  495|       |
  496|  31.3k|    if (nd <= 9)
  ------------------
  |  Branch (496:9): [True: 16.1k, False: 15.2k]
  ------------------
  497|  16.1k|      return b;
  498|       |
  499|  15.2k|    s += 9;
  500|   150k|    for (i = 9; i < nd0; i++) {
  ------------------
  |  Branch (500:17): [True: 135k, False: 15.2k]
  ------------------
  501|   135k|        b = multadd(b, 10, *s++ - '0');
  502|   135k|        if (b == NULL)
  ------------------
  |  Branch (502:13): [True: 0, False: 135k]
  ------------------
  503|      0|            return NULL;
  504|   135k|    }
  505|  15.2k|    s++;
  506|  48.5k|    for(; i < nd; i++) {
  ------------------
  |  Branch (506:11): [True: 33.2k, False: 15.2k]
  ------------------
  507|  33.2k|        b = multadd(b, 10, *s++ - '0');
  508|  33.2k|        if (b == NULL)
  ------------------
  |  Branch (508:13): [True: 0, False: 33.2k]
  ------------------
  509|      0|            return NULL;
  510|  33.2k|    }
  511|  15.2k|    return b;
  512|  15.2k|}
dtoa.c:Balloc:
  341|   710k|{
  342|   710k|    int x;
  343|   710k|    Bigint *rv;
  344|   710k|    unsigned int len;
  345|   710k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  346|       |
  347|   710k|    if (k <= Bigint_Kmax && (rv = freelist[k]))
  ------------------
  |  |  480|  1.42M|#define Bigint_Kmax 7
  ------------------
                  if (k <= Bigint_Kmax && (rv = freelist[k]))
  ------------------
  |  |  333|   710k|#define freelist interp->dtoa.freelist
  ------------------
  |  Branch (347:9): [True: 710k, False: 0]
  |  Branch (347:29): [True: 710k, False: 55]
  ------------------
  348|   710k|        freelist[k] = rv->next;
  ------------------
  |  |  333|   710k|#define freelist interp->dtoa.freelist
  ------------------
  349|     55|    else {
  350|     55|        x = 1 << k;
  351|     55|        len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
  352|     55|            /sizeof(double);
  353|     55|        if (k <= Bigint_Kmax &&
  ------------------
  |  |  480|    110|#define Bigint_Kmax 7
  ------------------
  |  Branch (353:13): [True: 55, False: 0]
  ------------------
  354|     55|            pmem_next - private_mem + len <= (Py_ssize_t)Bigint_PREALLOC_SIZE
  ------------------
  |  |  335|     55|#define pmem_next interp->dtoa.preallocated_next
  ------------------
                          pmem_next - private_mem + len <= (Py_ssize_t)Bigint_PREALLOC_SIZE
  ------------------
  |  |  334|     55|#define private_mem interp->dtoa.preallocated
  ------------------
                          pmem_next - private_mem + len <= (Py_ssize_t)Bigint_PREALLOC_SIZE
  ------------------
  |  |  489|     55|    ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
  |  |  ------------------
  |  |  |  |  486|     55|#define PRIVATE_MEM 2304
  |  |  ------------------
  ------------------
  |  Branch (354:13): [True: 35, False: 20]
  ------------------
  355|     55|        ) {
  356|     35|            rv = (Bigint*)pmem_next;
  ------------------
  |  |  335|     35|#define pmem_next interp->dtoa.preallocated_next
  ------------------
  357|     35|            pmem_next += len;
  ------------------
  |  |  335|     35|#define pmem_next interp->dtoa.preallocated_next
  ------------------
  358|     35|        }
  359|     20|        else {
  360|     20|            rv = (Bigint*)MALLOC(len*sizeof(double));
  ------------------
  |  |  133|     20|#define MALLOC PyMem_Malloc
  ------------------
  361|     20|            if (rv == NULL)
  ------------------
  |  Branch (361:17): [True: 0, False: 20]
  ------------------
  362|      0|                return NULL;
  363|     20|        }
  364|     55|        rv->k = k;
  365|     55|        rv->maxwds = x;
  366|     55|    }
  367|   710k|    rv->sign = rv->wds = 0;
  368|   710k|    return rv;
  369|   710k|}
dtoa.c:sd2b:
  979|  38.7k|{
  980|  38.7k|    Bigint *b;
  981|       |
  982|  38.7k|    b = Balloc(1);
  983|  38.7k|    if (b == NULL)
  ------------------
  |  Branch (983:9): [True: 0, False: 38.7k]
  ------------------
  984|      0|        return NULL;
  985|       |
  986|       |    /* First construct b and e assuming that scale == 0. */
  987|  38.7k|    b->wds = 2;
  988|  38.7k|    b->x[0] = word1(d);
  ------------------
  |  |  179|  38.7k|#define word1(x) (x)->L[0]
  ------------------
  989|  38.7k|    b->x[1] = word0(d) & Frac_mask;
  ------------------
  |  |  178|  38.7k|#define word0(x) (x)->L[1]
  ------------------
                  b->x[1] = word0(d) & Frac_mask;
  ------------------
  |  |  246|  38.7k|#define Frac_mask  0xfffff
  ------------------
  990|  38.7k|    *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
  ------------------
  |  |  242|  38.7k|#define Etiny (-1074)  /* smallest denormal is 2**Etiny */
  ------------------
                  *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
  ------------------
  |  |  178|  38.7k|#define word0(x) (x)->L[1]
  ------------------
                  *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
  ------------------
  |  |  236|  38.7k|#define Exp_mask  0x7ff00000
  ------------------
                  *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
  ------------------
  |  |  232|  38.7k|#define Exp_shift  20
  ------------------
  991|  38.7k|    if (*e < Etiny)
  ------------------
  |  |  242|  38.7k|#define Etiny (-1074)  /* smallest denormal is 2**Etiny */
  ------------------
  |  Branch (991:9): [True: 1.24k, False: 37.5k]
  ------------------
  992|  1.24k|        *e = Etiny;
  ------------------
  |  |  242|  1.24k|#define Etiny (-1074)  /* smallest denormal is 2**Etiny */
  ------------------
  993|  37.5k|    else
  994|  37.5k|        b->x[1] |= Exp_msk1;
  ------------------
  |  |  234|  37.5k|#define Exp_msk1    0x100000
  ------------------
  995|       |
  996|       |    /* Now adjust for scale, provided that b != 0. */
  997|  38.7k|    if (scale && (b->x[0] || b->x[1])) {
  ------------------
  |  Branch (997:9): [True: 6.50k, False: 32.2k]
  |  Branch (997:19): [True: 2.12k, False: 4.37k]
  |  Branch (997:30): [True: 3.13k, False: 1.24k]
  ------------------
  998|  5.25k|        *e -= scale;
  999|  5.25k|        if (*e < Etiny) {
  ------------------
  |  |  242|  5.25k|#define Etiny (-1074)  /* smallest denormal is 2**Etiny */
  ------------------
  |  Branch (999:13): [True: 4.24k, False: 1.00k]
  ------------------
 1000|  4.24k|            scale = Etiny - *e;
  ------------------
  |  |  242|  4.24k|#define Etiny (-1074)  /* smallest denormal is 2**Etiny */
  ------------------
 1001|  4.24k|            *e = Etiny;
  ------------------
  |  |  242|  4.24k|#define Etiny (-1074)  /* smallest denormal is 2**Etiny */
  ------------------
 1002|       |            /* We can't shift more than P-1 bits without shifting out a 1. */
 1003|  4.24k|            assert(0 < scale && scale <= P - 1);
  ------------------
  |  Branch (1003:13): [True: 4.24k, False: 0]
  |  Branch (1003:13): [True: 4.24k, False: 0]
  ------------------
 1004|  4.24k|            if (scale >= 32) {
  ------------------
  |  Branch (1004:17): [True: 3.11k, False: 1.13k]
  ------------------
 1005|       |                /* The bits shifted out should all be zero. */
 1006|  3.11k|                assert(b->x[0] == 0);
  ------------------
  |  Branch (1006:17): [True: 3.11k, False: 0]
  ------------------
 1007|  3.11k|                b->x[0] = b->x[1];
 1008|  3.11k|                b->x[1] = 0;
 1009|  3.11k|                scale -= 32;
 1010|  3.11k|            }
 1011|  4.24k|            if (scale) {
  ------------------
  |  Branch (1011:17): [True: 4.13k, False: 113]
  ------------------
 1012|       |                /* The bits shifted out should all be zero. */
 1013|  4.13k|                assert(b->x[0] << (32 - scale) == 0);
  ------------------
  |  Branch (1013:17): [True: 4.13k, False: 0]
  ------------------
 1014|  4.13k|                b->x[0] = (b->x[0] >> scale) | (b->x[1] << (32 - scale));
 1015|  4.13k|                b->x[1] >>= scale;
 1016|  4.13k|            }
 1017|  4.24k|        }
 1018|  5.25k|    }
 1019|       |    /* Ensure b is normalized. */
 1020|  38.7k|    if (!b->x[1])
  ------------------
  |  Branch (1020:9): [True: 4.43k, False: 34.3k]
  ------------------
 1021|  4.43k|        b->wds = 1;
 1022|       |
 1023|  38.7k|    return b;
 1024|  38.7k|}
dtoa.c:i2b:
  595|  83.9k|{
  596|  83.9k|    Bigint *b;
  597|       |
  598|  83.9k|    b = Balloc(1);
  599|  83.9k|    if (b == NULL)
  ------------------
  |  Branch (599:9): [True: 0, False: 83.9k]
  ------------------
  600|      0|        return NULL;
  601|  83.9k|    b->x[0] = i;
  602|  83.9k|    b->wds = 1;
  603|  83.9k|    return b;
  604|  83.9k|}
dtoa.c:pow5mult:
  675|  53.8k|{
  676|  53.8k|    Bigint *b1, *p5, **p5s;
  677|  53.8k|    int i;
  678|  53.8k|    static const int p05[3] = { 5, 25, 125 };
  679|       |
  680|       |    // For double-to-string conversion, the maximum value of k is limited by
  681|       |    // DBL_MAX_10_EXP (308), the maximum decimal base-10 exponent for binary64.
  682|       |    // For string-to-double conversion, the extreme case is constrained by our
  683|       |    // hardcoded exponent limit before we underflow of -512, adjusted by
  684|       |    // STRTOD_DIGLIM-DBL_DIG-1, giving a maximum of k=535.
  685|  53.8k|    assert(0 <= k && k < 1024);
  ------------------
  |  Branch (685:5): [True: 53.8k, False: 0]
  |  Branch (685:5): [True: 53.8k, False: 0]
  ------------------
  686|       |
  687|  53.8k|    if ((i = k & 3)) {
  ------------------
  |  Branch (687:9): [True: 44.7k, False: 9.14k]
  ------------------
  688|  44.7k|        b = multadd(b, p05[i-1], 0);
  689|  44.7k|        if (b == NULL)
  ------------------
  |  Branch (689:13): [True: 0, False: 44.7k]
  ------------------
  690|      0|            return NULL;
  691|  44.7k|    }
  692|       |
  693|  53.8k|    if (!(k >>= 2))
  ------------------
  |  Branch (693:9): [True: 8.09k, False: 45.7k]
  ------------------
  694|  8.09k|        return b;
  695|  45.7k|    PyInterpreterState *interp = _PyInterpreterState_GET();
  696|  45.7k|    p5s = interp->dtoa.p5s;
  697|   197k|    for(;;) {
  698|   197k|        assert(p5s != interp->dtoa.p5s + Bigint_Pow5size);
  ------------------
  |  Branch (698:9): [True: 197k, False: 0]
  ------------------
  699|   197k|        p5 = *p5s;
  700|   197k|        p5s++;
  701|   197k|        if (k & 1) {
  ------------------
  |  Branch (701:13): [True: 122k, False: 74.9k]
  ------------------
  702|   122k|            b1 = mult(b, p5);
  703|   122k|            Bfree(b);
  704|   122k|            b = b1;
  705|   122k|            if (b == NULL)
  ------------------
  |  Branch (705:17): [True: 0, False: 122k]
  ------------------
  706|      0|                return NULL;
  707|   122k|        }
  708|   197k|        if (!(k >>= 1))
  ------------------
  |  Branch (708:13): [True: 45.7k, False: 151k]
  ------------------
  709|  45.7k|            break;
  710|   197k|    }
  711|  45.7k|    return b;
  712|  45.7k|}
dtoa.c:mult:
  611|   143k|{
  612|   143k|    Bigint *c;
  613|   143k|    int k, wa, wb, wc;
  614|   143k|    ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
  615|   143k|    ULong y;
  616|   143k|    ULLong carry, z;
  617|       |
  618|   143k|    if ((!a->x[0] && a->wds == 1) || (!b->x[0] && b->wds == 1)) {
  ------------------
  |  Branch (618:10): [True: 132, False: 143k]
  |  Branch (618:22): [True: 0, False: 132]
  |  Branch (618:39): [True: 1.63k, False: 141k]
  |  Branch (618:51): [True: 1.14k, False: 487]
  ------------------
  619|  1.14k|        c = Balloc(0);
  620|  1.14k|        if (c == NULL)
  ------------------
  |  Branch (620:13): [True: 0, False: 1.14k]
  ------------------
  621|      0|            return NULL;
  622|  1.14k|        c->wds = 1;
  623|  1.14k|        c->x[0] = 0;
  624|  1.14k|        return c;
  625|  1.14k|    }
  626|       |
  627|   142k|    if (a->wds < b->wds) {
  ------------------
  |  Branch (627:9): [True: 69.5k, False: 72.4k]
  ------------------
  628|  69.5k|        c = a;
  629|  69.5k|        a = b;
  630|  69.5k|        b = c;
  631|  69.5k|    }
  632|   142k|    k = a->k;
  633|   142k|    wa = a->wds;
  634|   142k|    wb = b->wds;
  635|   142k|    wc = wa + wb;
  636|   142k|    if (wc > a->maxwds)
  ------------------
  |  Branch (636:9): [True: 62.5k, False: 79.4k]
  ------------------
  637|  62.5k|        k++;
  638|   142k|    c = Balloc(k);
  639|   142k|    if (c == NULL)
  ------------------
  |  Branch (639:9): [True: 0, False: 142k]
  ------------------
  640|      0|        return NULL;
  641|  1.07M|    for(x = c->x, xa = x + wc; x < xa; x++)
  ------------------
  |  Branch (641:32): [True: 928k, False: 142k]
  ------------------
  642|   928k|        *x = 0;
  643|   142k|    xa = a->x;
  644|   142k|    xae = xa + wa;
  645|   142k|    xb = b->x;
  646|   142k|    xbe = xb + wb;
  647|   142k|    xc0 = c->x;
  648|   427k|    for(; xb < xbe; xc0++) {
  ------------------
  |  Branch (648:11): [True: 285k, False: 142k]
  ------------------
  649|   285k|        if ((y = *xb++)) {
  ------------------
  |  Branch (649:13): [True: 284k, False: 361]
  ------------------
  650|   284k|            x = xa;
  651|   284k|            xc = xc0;
  652|   284k|            carry = 0;
  653|  2.20M|            do {
  654|  2.20M|                z = *x++ * (ULLong)y + *xc + carry;
  655|  2.20M|                carry = z >> 32;
  656|  2.20M|                *xc++ = (ULong)(z & FFFFFFFF);
  ------------------
  |  |  285|  2.20M|#define FFFFFFFF 0xffffffffUL
  ------------------
  657|  2.20M|            }
  658|  2.20M|            while(x < xae);
  ------------------
  |  Branch (658:19): [True: 1.92M, False: 284k]
  ------------------
  659|   284k|            *xc = (ULong)carry;
  660|   284k|        }
  661|   285k|    }
  662|   243k|    for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
  ------------------
  |  Branch (662:36): [True: 243k, False: 0]
  |  Branch (662:46): [True: 101k, False: 142k]
  ------------------
  663|   142k|    c->wds = wc;
  664|   142k|    return c;
  665|   142k|}
dtoa.c:Bfree:
  375|  1.67M|{
  376|  1.67M|    if (v) {
  ------------------
  |  Branch (376:9): [True: 710k, False: 960k]
  ------------------
  377|   710k|        if (v->k > Bigint_Kmax)
  ------------------
  |  |  480|   710k|#define Bigint_Kmax 7
  ------------------
  |  Branch (377:13): [True: 0, False: 710k]
  ------------------
  378|      0|            FREE((void*)v);
  ------------------
  |  |  134|      0|#define FREE PyMem_Free
  ------------------
  379|   710k|        else {
  380|   710k|            PyInterpreterState *interp = _PyInterpreterState_GET();
  381|   710k|            v->next = freelist[v->k];
  ------------------
  |  |  333|   710k|#define freelist interp->dtoa.freelist
  ------------------
  382|   710k|            freelist[v->k] = v;
  ------------------
  |  |  333|   710k|#define freelist interp->dtoa.freelist
  ------------------
  383|   710k|        }
  384|   710k|    }
  385|  1.67M|}
dtoa.c:lshift:
  772|   149k|{
  773|   149k|    int i, k1, n, n1;
  774|   149k|    Bigint *b1;
  775|   149k|    ULong *x, *x1, *xe, z;
  776|       |
  777|   149k|    if (!k || (!b->x[0] && b->wds == 1))
  ------------------
  |  Branch (777:9): [True: 0, False: 149k]
  |  Branch (777:16): [True: 3.14k, False: 146k]
  |  Branch (777:28): [True: 1.24k, False: 1.90k]
  ------------------
  778|  1.24k|        return b;
  779|       |
  780|   147k|    n = k >> 5;
  781|   147k|    k1 = b->k;
  782|   147k|    n1 = n + b->wds + 1;
  783|   321k|    for(i = b->maxwds; n1 > i; i <<= 1)
  ------------------
  |  Branch (783:24): [True: 173k, False: 147k]
  ------------------
  784|   173k|        k1++;
  785|   147k|    b1 = Balloc(k1);
  786|   147k|    if (b1 == NULL) {
  ------------------
  |  Branch (786:9): [True: 0, False: 147k]
  ------------------
  787|      0|        Bfree(b);
  788|      0|        return NULL;
  789|      0|    }
  790|   147k|    x1 = b1->x;
  791|   635k|    for(i = 0; i < n; i++)
  ------------------
  |  Branch (791:16): [True: 487k, False: 147k]
  ------------------
  792|   487k|        *x1++ = 0;
  793|   147k|    x = b->x;
  794|   147k|    xe = x + b->wds;
  795|   147k|    if (k &= 0x1f) {
  ------------------
  |  Branch (795:9): [True: 147k, False: 839]
  ------------------
  796|   147k|        k1 = 32 - k;
  797|   147k|        z = 0;
  798|   461k|        do {
  799|   461k|            *x1++ = *x << k | z;
  800|   461k|            z = *x++ >> k1;
  801|   461k|        }
  802|   461k|        while(x < xe);
  ------------------
  |  Branch (802:15): [True: 314k, False: 147k]
  ------------------
  803|   147k|        if ((*x1 = z))
  ------------------
  |  Branch (803:13): [True: 19.9k, False: 127k]
  ------------------
  804|  19.9k|            ++n1;
  805|   147k|    }
  806|    839|    else do
  807|  1.29k|             *x1++ = *x++;
  808|  1.29k|        while(x < xe);
  ------------------
  |  Branch (808:15): [True: 457, False: 839]
  ------------------
  809|   147k|    b1->wds = n1 - 1;
  810|   147k|    Bfree(b);
  811|   147k|    return b1;
  812|   147k|}
dtoa.c:diff:
  852|   147k|{
  853|   147k|    Bigint *c;
  854|   147k|    int i, wa, wb;
  855|   147k|    ULong *xa, *xae, *xb, *xbe, *xc;
  856|   147k|    ULLong borrow, y;
  857|       |
  858|   147k|    i = cmp(a,b);
  859|   147k|    if (!i) {
  ------------------
  |  Branch (859:9): [True: 1.69k, False: 146k]
  ------------------
  860|  1.69k|        c = Balloc(0);
  861|  1.69k|        if (c == NULL)
  ------------------
  |  Branch (861:13): [True: 0, False: 1.69k]
  ------------------
  862|      0|            return NULL;
  863|  1.69k|        c->wds = 1;
  864|  1.69k|        c->x[0] = 0;
  865|  1.69k|        return c;
  866|  1.69k|    }
  867|   146k|    if (i < 0) {
  ------------------
  |  Branch (867:9): [True: 17.8k, False: 128k]
  ------------------
  868|  17.8k|        c = a;
  869|  17.8k|        a = b;
  870|  17.8k|        b = c;
  871|  17.8k|        i = 1;
  872|  17.8k|    }
  873|   128k|    else
  874|   128k|        i = 0;
  875|   146k|    c = Balloc(a->k);
  876|   146k|    if (c == NULL)
  ------------------
  |  Branch (876:9): [True: 0, False: 146k]
  ------------------
  877|      0|        return NULL;
  878|   146k|    c->sign = i;
  879|   146k|    wa = a->wds;
  880|   146k|    xa = a->x;
  881|   146k|    xae = xa + wa;
  882|   146k|    wb = b->wds;
  883|   146k|    xb = b->x;
  884|   146k|    xbe = xb + wb;
  885|   146k|    xc = c->x;
  886|   146k|    borrow = 0;
  887|   604k|    do {
  888|   604k|        y = (ULLong)*xa++ - *xb++ - borrow;
  889|   604k|        borrow = y >> 32 & (ULong)1;
  890|   604k|        *xc++ = (ULong)(y & FFFFFFFF);
  ------------------
  |  |  285|   604k|#define FFFFFFFF 0xffffffffUL
  ------------------
  891|   604k|    }
  892|   604k|    while(xb < xbe);
  ------------------
  |  Branch (892:11): [True: 458k, False: 146k]
  ------------------
  893|   246k|    while(xa < xae) {
  ------------------
  |  Branch (893:11): [True: 100k, False: 146k]
  ------------------
  894|   100k|        y = *xa++ - borrow;
  895|   100k|        borrow = y >> 32 & (ULong)1;
  896|   100k|        *xc++ = (ULong)(y & FFFFFFFF);
  ------------------
  |  |  285|   100k|#define FFFFFFFF 0xffffffffUL
  ------------------
  897|   100k|    }
  898|   195k|    while(!*--xc)
  ------------------
  |  Branch (898:11): [True: 49.2k, False: 146k]
  ------------------
  899|  49.2k|        wa--;
  900|   146k|    c->wds = wa;
  901|   146k|    return c;
  902|   146k|}
dtoa.c:cmp:
  819|   573k|{
  820|   573k|    ULong *xa, *xa0, *xb, *xb0;
  821|   573k|    int i, j;
  822|       |
  823|   573k|    i = a->wds;
  824|   573k|    j = b->wds;
  825|       |#ifdef DEBUG
  826|       |    if (i > 1 && !a->x[i-1])
  827|       |        Bug("cmp called with a->x[a->wds-1] == 0");
  828|       |    if (j > 1 && !b->x[j-1])
  829|       |        Bug("cmp called with b->x[b->wds-1] == 0");
  830|       |#endif
  831|   573k|    if (i -= j)
  ------------------
  |  Branch (831:9): [True: 144k, False: 429k]
  ------------------
  832|   144k|        return i;
  833|   429k|    xa0 = a->x;
  834|   429k|    xa = xa0 + j;
  835|   429k|    xb0 = b->x;
  836|   429k|    xb = xb0 + j;
  837|   510k|    for(;;) {
  838|   510k|        if (*--xa != *--xb)
  ------------------
  |  Branch (838:13): [True: 413k, False: 96.1k]
  ------------------
  839|   413k|            return *xa < *xb ? -1 : 1;
  ------------------
  |  Branch (839:20): [True: 279k, False: 134k]
  ------------------
  840|  96.1k|        if (xa <= xa0)
  ------------------
  |  Branch (840:13): [True: 15.2k, False: 80.9k]
  ------------------
  841|  15.2k|            break;
  842|  96.1k|    }
  843|  15.2k|    return 0;
  844|   429k|}
dtoa.c:sulp:
 1211|  1.72k|{
 1212|  1.72k|    U u;
 1213|       |
 1214|  1.72k|    if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
  ------------------
  |  |  237|     36|#define P 53
  ------------------
                  if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
  ------------------
  |  |  178|     36|#define word0(x) (x)->L[1]
  ------------------
                  if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
  ------------------
  |  |  236|     36|#define Exp_mask  0x7ff00000
  ------------------
                  if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
  ------------------
  |  |  232|     36|#define Exp_shift  20
  ------------------
  |  Branch (1214:9): [True: 36, False: 1.69k]
  |  Branch (1214:22): [True: 23, False: 13]
  ------------------
 1215|       |        /* rv/2^bc->scale is subnormal */
 1216|     23|        word0(&u) = (P+2)*Exp_msk1;
  ------------------
  |  |  178|     23|#define word0(x) (x)->L[1]
  ------------------
                      word0(&u) = (P+2)*Exp_msk1;
  ------------------
  |  |  237|     23|#define P 53
  ------------------
                      word0(&u) = (P+2)*Exp_msk1;
  ------------------
  |  |  234|     23|#define Exp_msk1    0x100000
  ------------------
 1217|     23|        word1(&u) = 0;
  ------------------
  |  |  179|     23|#define word1(x) (x)->L[0]
  ------------------
 1218|     23|        return u.d;
 1219|     23|    }
 1220|  1.70k|    else {
 1221|  1.70k|        assert(word0(x) || word1(x)); /* x != 0.0 */
  ------------------
  |  Branch (1221:9): [True: 1.70k, False: 0]
  |  Branch (1221:9): [True: 0, False: 0]
  ------------------
 1222|  1.70k|        return ulp(x);
 1223|  1.70k|    }
 1224|  1.72k|}
dtoa.c:ratio:
 1085|  13.2k|{
 1086|  13.2k|    U da, db;
 1087|  13.2k|    int k, ka, kb;
 1088|       |
 1089|  13.2k|    dval(&da) = b2d(a, &ka);
  ------------------
  |  |  184|  13.2k|#define dval(x) (x)->d
  ------------------
 1090|  13.2k|    dval(&db) = b2d(b, &kb);
  ------------------
  |  |  184|  13.2k|#define dval(x) (x)->d
  ------------------
 1091|  13.2k|    k = ka - kb + 32*(a->wds - b->wds);
 1092|  13.2k|    if (k > 0)
  ------------------
  |  Branch (1092:9): [True: 6.45k, False: 6.84k]
  ------------------
 1093|  6.45k|        word0(&da) += k*Exp_msk1;
  ------------------
  |  |  178|  6.45k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&da) += k*Exp_msk1;
  ------------------
  |  |  234|  6.45k|#define Exp_msk1    0x100000
  ------------------
 1094|  6.84k|    else {
 1095|  6.84k|        k = -k;
 1096|  6.84k|        word0(&db) += k*Exp_msk1;
  ------------------
  |  |  178|  6.84k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&db) += k*Exp_msk1;
  ------------------
  |  |  234|  6.84k|#define Exp_msk1    0x100000
  ------------------
 1097|  6.84k|    }
 1098|  13.2k|    return dval(&da) / dval(&db);
  ------------------
  |  |  184|  13.2k|#define dval(x) (x)->d
  ------------------
                  return dval(&da) / dval(&db);
  ------------------
  |  |  184|  13.2k|#define dval(x) (x)->d
  ------------------
 1099|  13.2k|}
dtoa.c:b2d:
  923|  26.5k|{
  924|  26.5k|    ULong *xa, *xa0, w, y, z;
  925|  26.5k|    int k;
  926|  26.5k|    U d;
  927|       |
  928|  26.5k|    xa0 = a->x;
  929|  26.5k|    xa = xa0 + a->wds;
  930|  26.5k|    y = *--xa;
  931|       |#ifdef DEBUG
  932|       |    if (!y) Bug("zero y in b2d");
  933|       |#endif
  934|  26.5k|    k = hi0bits(y);
  935|  26.5k|    *e = 32 - k;
  936|  26.5k|    if (k < Ebits) {
  ------------------
  |  |  245|  26.5k|#define Ebits 11
  ------------------
  |  Branch (936:9): [True: 10.3k, False: 16.2k]
  ------------------
  937|  10.3k|        word0(&d) = Exp_1 | y >> (Ebits - k);
  ------------------
  |  |  178|  10.3k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&d) = Exp_1 | y >> (Ebits - k);
  ------------------
  |  |  243|  10.3k|#define Exp_1  0x3ff00000
  ------------------
                      word0(&d) = Exp_1 | y >> (Ebits - k);
  ------------------
  |  |  245|  10.3k|#define Ebits 11
  ------------------
  938|  10.3k|        w = xa > xa0 ? *--xa : 0;
  ------------------
  |  Branch (938:13): [True: 8.35k, False: 2.02k]
  ------------------
  939|  10.3k|        word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
  ------------------
  |  |  179|  10.3k|#define word1(x) (x)->L[0]
  ------------------
                      word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
  ------------------
  |  |  245|  10.3k|#define Ebits 11
  ------------------
                      word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
  ------------------
  |  |  245|  10.3k|#define Ebits 11
  ------------------
  940|  10.3k|        goto ret_d;
  941|  10.3k|    }
  942|  16.2k|    z = xa > xa0 ? *--xa : 0;
  ------------------
  |  Branch (942:9): [True: 11.1k, False: 5.05k]
  ------------------
  943|  16.2k|    if (k -= Ebits) {
  ------------------
  |  |  245|  16.2k|#define Ebits 11
  ------------------
  |  Branch (943:9): [True: 15.0k, False: 1.19k]
  ------------------
  944|  15.0k|        word0(&d) = Exp_1 | y << k | z >> (32 - k);
  ------------------
  |  |  178|  15.0k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&d) = Exp_1 | y << k | z >> (32 - k);
  ------------------
  |  |  243|  15.0k|#define Exp_1  0x3ff00000
  ------------------
  945|  15.0k|        y = xa > xa0 ? *--xa : 0;
  ------------------
  |  Branch (945:13): [True: 7.84k, False: 7.17k]
  ------------------
  946|  15.0k|        word1(&d) = z << k | y >> (32 - k);
  ------------------
  |  |  179|  15.0k|#define word1(x) (x)->L[0]
  ------------------
  947|  15.0k|    }
  948|  1.19k|    else {
  949|  1.19k|        word0(&d) = Exp_1 | y;
  ------------------
  |  |  178|  1.19k|#define word0(x) (x)->L[1]
  ------------------
                      word0(&d) = Exp_1 | y;
  ------------------
  |  |  243|  1.19k|#define Exp_1  0x3ff00000
  ------------------
  950|  1.19k|        word1(&d) = z;
  ------------------
  |  |  179|  1.19k|#define word1(x) (x)->L[0]
  ------------------
  951|  1.19k|    }
  952|  26.5k|  ret_d:
  953|  26.5k|    return dval(&d);
  ------------------
  |  |  184|  26.5k|#define dval(x) (x)->d
  ------------------
  954|  16.2k|}
dtoa.c:hi0bits:
  518|  52.6k|{
  519|  52.6k|    int k = 0;
  520|       |
  521|  52.6k|    if (!(x & 0xffff0000)) {
  ------------------
  |  Branch (521:9): [True: 27.9k, False: 24.6k]
  ------------------
  522|  27.9k|        k = 16;
  523|  27.9k|        x <<= 16;
  524|  27.9k|    }
  525|  52.6k|    if (!(x & 0xff000000)) {
  ------------------
  |  Branch (525:9): [True: 35.5k, False: 17.0k]
  ------------------
  526|  35.5k|        k += 8;
  527|  35.5k|        x <<= 8;
  528|  35.5k|    }
  529|  52.6k|    if (!(x & 0xf0000000)) {
  ------------------
  |  Branch (529:9): [True: 28.6k, False: 23.9k]
  ------------------
  530|  28.6k|        k += 4;
  531|  28.6k|        x <<= 4;
  532|  28.6k|    }
  533|  52.6k|    if (!(x & 0xc0000000)) {
  ------------------
  |  Branch (533:9): [True: 29.9k, False: 22.6k]
  ------------------
  534|  29.9k|        k += 2;
  535|  29.9k|        x <<= 2;
  536|  29.9k|    }
  537|  52.6k|    if (!(x & 0x80000000)) {
  ------------------
  |  Branch (537:9): [True: 25.5k, False: 27.0k]
  ------------------
  538|  25.5k|        k++;
  539|  25.5k|        if (!(x & 0x40000000))
  ------------------
  |  Branch (539:13): [True: 0, False: 25.5k]
  ------------------
  540|      0|            return 32;
  541|  25.5k|    }
  542|  52.6k|    return k;
  543|  52.6k|}
dtoa.c:ulp:
  909|  15.0k|{
  910|  15.0k|    Long L;
  911|  15.0k|    U u;
  912|       |
  913|  15.0k|    L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
  ------------------
  |  |  178|  15.0k|#define word0(x) (x)->L[1]
  ------------------
                  L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
  ------------------
  |  |  236|  15.0k|#define Exp_mask  0x7ff00000
  ------------------
                  L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
  ------------------
  |  |  237|  15.0k|#define P 53
  ------------------
                  L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
  ------------------
  |  |  234|  15.0k|#define Exp_msk1    0x100000
  ------------------
  914|  15.0k|    word0(&u) = L;
  ------------------
  |  |  178|  15.0k|#define word0(x) (x)->L[1]
  ------------------
  915|  15.0k|    word1(&u) = 0;
  ------------------
  |  |  179|  15.0k|#define word1(x) (x)->L[0]
  ------------------
  916|  15.0k|    return dval(&u);
  ------------------
  |  |  184|  15.0k|#define dval(x) (x)->d
  ------------------
  917|  15.0k|}
dtoa.c:bigcomp:
 1274|  2.64k|{
 1275|  2.64k|    Bigint *b, *d;
 1276|  2.64k|    int b2, d2, dd, i, nd, nd0, odd, p2, p5;
 1277|       |
 1278|  2.64k|    nd = bc->nd;
 1279|  2.64k|    nd0 = bc->nd0;
 1280|  2.64k|    p5 = nd + bc->e0;
 1281|  2.64k|    b = sd2b(rv, bc->scale, &p2);
 1282|  2.64k|    if (b == NULL)
  ------------------
  |  Branch (1282:9): [True: 0, False: 2.64k]
  ------------------
 1283|      0|        return -1;
 1284|       |
 1285|       |    /* record whether the lsb of rv/2^(bc->scale) is odd:  in the exact halfway
 1286|       |       case, this is used for round to even. */
 1287|  2.64k|    odd = b->x[0] & 1;
 1288|       |
 1289|       |    /* left shift b by 1 bit and or a 1 into the least significant bit;
 1290|       |       this gives us b * 2**p2 = rv/2^(bc->scale) + 0.5 ulp. */
 1291|  2.64k|    b = lshift(b, 1);
 1292|  2.64k|    if (b == NULL)
  ------------------
  |  Branch (1292:9): [True: 0, False: 2.64k]
  ------------------
 1293|      0|        return -1;
 1294|  2.64k|    b->x[0] |= 1;
 1295|  2.64k|    p2--;
 1296|       |
 1297|  2.64k|    p2 -= p5;
 1298|  2.64k|    d = i2b(1);
 1299|  2.64k|    if (d == NULL) {
  ------------------
  |  Branch (1299:9): [True: 0, False: 2.64k]
  ------------------
 1300|      0|        Bfree(b);
 1301|      0|        return -1;
 1302|      0|    }
 1303|       |    /* Arrange for convenient computation of quotients:
 1304|       |     * shift left if necessary so divisor has 4 leading 0 bits.
 1305|       |     */
 1306|  2.64k|    if (p5 > 0) {
  ------------------
  |  Branch (1306:9): [True: 2.19k, False: 449]
  ------------------
 1307|  2.19k|        d = pow5mult(d, p5);
 1308|  2.19k|        if (d == NULL) {
  ------------------
  |  Branch (1308:13): [True: 0, False: 2.19k]
  ------------------
 1309|      0|            Bfree(b);
 1310|      0|            return -1;
 1311|      0|        }
 1312|  2.19k|    }
 1313|    449|    else if (p5 < 0) {
  ------------------
  |  Branch (1313:14): [True: 281, False: 168]
  ------------------
 1314|    281|        b = pow5mult(b, -p5);
 1315|    281|        if (b == NULL) {
  ------------------
  |  Branch (1315:13): [True: 0, False: 281]
  ------------------
 1316|      0|            Bfree(d);
 1317|      0|            return -1;
 1318|      0|        }
 1319|    281|    }
 1320|  2.64k|    if (p2 > 0) {
  ------------------
  |  Branch (1320:9): [True: 1.36k, False: 1.28k]
  ------------------
 1321|  1.36k|        b2 = p2;
 1322|  1.36k|        d2 = 0;
 1323|  1.36k|    }
 1324|  1.28k|    else {
 1325|  1.28k|        b2 = 0;
 1326|  1.28k|        d2 = -p2;
 1327|  1.28k|    }
 1328|  2.64k|    i = dshift(d, d2);
 1329|  2.64k|    if ((b2 += i) > 0) {
  ------------------
  |  Branch (1329:9): [True: 2.60k, False: 44]
  ------------------
 1330|  2.60k|        b = lshift(b, b2);
 1331|  2.60k|        if (b == NULL) {
  ------------------
  |  Branch (1331:13): [True: 0, False: 2.60k]
  ------------------
 1332|      0|            Bfree(d);
 1333|      0|            return -1;
 1334|      0|        }
 1335|  2.60k|    }
 1336|  2.64k|    if ((d2 += i) > 0) {
  ------------------
  |  Branch (1336:9): [True: 2.06k, False: 580]
  ------------------
 1337|  2.06k|        d = lshift(d, d2);
 1338|  2.06k|        if (d == NULL) {
  ------------------
  |  Branch (1338:13): [True: 0, False: 2.06k]
  ------------------
 1339|      0|            Bfree(b);
 1340|      0|            return -1;
 1341|      0|        }
 1342|  2.06k|    }
 1343|       |
 1344|       |    /* Compare s0 with b/d: set dd to -1, 0, or 1 according as s0 < b/d, s0 ==
 1345|       |     * b/d, or s0 > b/d.  Here the digits of s0 are thought of as representing
 1346|       |     * a number in the range [0.1, 1). */
 1347|  2.64k|    if (cmp(b, d) >= 0)
  ------------------
  |  Branch (1347:9): [True: 244, False: 2.40k]
  ------------------
 1348|       |        /* b/d >= 1 */
 1349|    244|        dd = -1;
 1350|  2.40k|    else {
 1351|  2.40k|        i = 0;
 1352|  41.4k|        for(;;) {
 1353|  41.4k|            b = multadd(b, 10, 0);
 1354|  41.4k|            if (b == NULL) {
  ------------------
  |  Branch (1354:17): [True: 0, False: 41.4k]
  ------------------
 1355|      0|                Bfree(d);
 1356|      0|                return -1;
 1357|      0|            }
 1358|  41.4k|            dd = s0[i < nd0 ? i : i+1] - '0' - quorem(b, d);
  ------------------
  |  Branch (1358:21): [True: 34.3k, False: 7.12k]
  ------------------
 1359|  41.4k|            i++;
 1360|       |
 1361|  41.4k|            if (dd)
  ------------------
  |  Branch (1361:17): [True: 2.29k, False: 39.1k]
  ------------------
 1362|  2.29k|                break;
 1363|  39.1k|            if (!b->x[0] && b->wds == 1) {
  ------------------
  |  Branch (1363:17): [True: 4.69k, False: 34.4k]
  |  Branch (1363:29): [True: 100, False: 4.59k]
  ------------------
 1364|       |                /* b/d == 0 */
 1365|    100|                dd = i < nd;
 1366|    100|                break;
 1367|    100|            }
 1368|  39.0k|            if (!(i < nd)) {
  ------------------
  |  Branch (1368:17): [True: 5, False: 39.0k]
  ------------------
 1369|       |                /* b/d != 0, but digits of s0 exhausted */
 1370|      5|                dd = -1;
 1371|      5|                break;
 1372|      5|            }
 1373|  39.0k|        }
 1374|  2.40k|    }
 1375|  2.64k|    Bfree(b);
 1376|  2.64k|    Bfree(d);
 1377|  2.64k|    if (dd > 0 || (dd == 0 && odd))
  ------------------
  |  Branch (1377:9): [True: 295, False: 2.35k]
  |  Branch (1377:20): [True: 89, False: 2.26k]
  |  Branch (1377:31): [True: 0, False: 89]
  ------------------
 1378|    295|        dval(rv) += sulp(rv, bc);
  ------------------
  |  |  184|    295|#define dval(x) (x)->d
  ------------------
 1379|  2.64k|    return 0;
 1380|  2.64k|}
dtoa.c:nrv_alloc:
 2127|  5.14k|{
 2128|  5.14k|    char *rv, *t;
 2129|       |
 2130|  5.14k|    rv = rv_alloc(n);
 2131|  5.14k|    if (rv == NULL)
  ------------------
  |  Branch (2131:9): [True: 0, False: 5.14k]
  ------------------
 2132|      0|        return NULL;
 2133|  5.14k|    t = rv;
 2134|  32.4k|    while((*t = *s++)) t++;
  ------------------
  |  Branch (2134:11): [True: 27.2k, False: 5.14k]
  ------------------
 2135|  5.14k|    if (rve)
  ------------------
  |  Branch (2135:9): [True: 5.14k, False: 0]
  ------------------
 2136|  5.14k|        *rve = t;
 2137|  5.14k|    return rv;
 2138|  5.14k|}
dtoa.c:d2b:
 1037|  37.7k|{
 1038|  37.7k|    Bigint *b;
 1039|  37.7k|    int de, k;
 1040|  37.7k|    ULong *x, y, z;
 1041|  37.7k|    int i;
 1042|       |
 1043|  37.7k|    b = Balloc(1);
 1044|  37.7k|    if (b == NULL)
  ------------------
  |  Branch (1044:9): [True: 0, False: 37.7k]
  ------------------
 1045|      0|        return NULL;
 1046|  37.7k|    x = b->x;
 1047|       |
 1048|  37.7k|    z = word0(d) & Frac_mask;
  ------------------
  |  |  178|  37.7k|#define word0(x) (x)->L[1]
  ------------------
                  z = word0(d) & Frac_mask;
  ------------------
  |  |  246|  37.7k|#define Frac_mask  0xfffff
  ------------------
 1049|  37.7k|    word0(d) &= 0x7fffffff;   /* clear sign bit, which we ignore */
  ------------------
  |  |  178|  37.7k|#define word0(x) (x)->L[1]
  ------------------
 1050|  37.7k|    if ((de = (int)(word0(d) >> Exp_shift)))
  ------------------
  |  |  178|  37.7k|#define word0(x) (x)->L[1]
  ------------------
                  if ((de = (int)(word0(d) >> Exp_shift)))
  ------------------
  |  |  232|  37.7k|#define Exp_shift  20
  ------------------
  |  Branch (1050:9): [True: 36.8k, False: 811]
  ------------------
 1051|  36.8k|        z |= Exp_msk1;
  ------------------
  |  |  234|  36.8k|#define Exp_msk1    0x100000
  ------------------
 1052|  37.7k|    if ((y = word1(d))) {
  ------------------
  |  |  179|  37.7k|#define word1(x) (x)->L[0]
  ------------------
  |  Branch (1052:9): [True: 25.8k, False: 11.8k]
  ------------------
 1053|  25.8k|        if ((k = lo0bits(&y))) {
  ------------------
  |  Branch (1053:13): [True: 18.8k, False: 6.96k]
  ------------------
 1054|  18.8k|            x[0] = y | z << (32 - k);
 1055|  18.8k|            z >>= k;
 1056|  18.8k|        }
 1057|  6.96k|        else
 1058|  6.96k|            x[0] = y;
 1059|  25.8k|        i =
 1060|  25.8k|            b->wds = (x[1] = z) ? 2 : 1;
  ------------------
  |  Branch (1060:22): [True: 24.7k, False: 1.11k]
  ------------------
 1061|  25.8k|    }
 1062|  11.8k|    else {
 1063|  11.8k|        k = lo0bits(&z);
 1064|  11.8k|        x[0] = z;
 1065|  11.8k|        i =
 1066|  11.8k|            b->wds = 1;
 1067|  11.8k|        k += 32;
 1068|  11.8k|    }
 1069|  37.7k|    if (de) {
  ------------------
  |  Branch (1069:9): [True: 36.8k, False: 811]
  ------------------
 1070|  36.8k|        *e = de - Bias - (P-1) + k;
  ------------------
  |  |  239|  36.8k|#define Bias 1023
  ------------------
                      *e = de - Bias - (P-1) + k;
  ------------------
  |  |  237|  36.8k|#define P 53
  ------------------
 1071|  36.8k|        *bits = P - k;
  ------------------
  |  |  237|  36.8k|#define P 53
  ------------------
 1072|  36.8k|    }
 1073|    811|    else {
 1074|    811|        *e = de - Bias - (P-1) + 1 + k;
  ------------------
  |  |  239|    811|#define Bias 1023
  ------------------
                      *e = de - Bias - (P-1) + 1 + k;
  ------------------
  |  |  237|    811|#define P 53
  ------------------
 1075|    811|        *bits = 32*i - hi0bits(x[i-1]);
 1076|    811|    }
 1077|  37.7k|    return b;
 1078|  37.7k|}
dtoa.c:lo0bits:
  550|  37.7k|{
  551|  37.7k|    int k;
  552|  37.7k|    ULong x = *y;
  553|       |
  554|  37.7k|    if (x & 7) {
  ------------------
  |  Branch (554:9): [True: 20.9k, False: 16.7k]
  ------------------
  555|  20.9k|        if (x & 1)
  ------------------
  |  Branch (555:13): [True: 7.12k, False: 13.8k]
  ------------------
  556|  7.12k|            return 0;
  557|  13.8k|        if (x & 2) {
  ------------------
  |  Branch (557:13): [True: 11.4k, False: 2.39k]
  ------------------
  558|  11.4k|            *y = x >> 1;
  559|  11.4k|            return 1;
  560|  11.4k|        }
  561|  2.39k|        *y = x >> 2;
  562|  2.39k|        return 2;
  563|  13.8k|    }
  564|  16.7k|    k = 0;
  565|  16.7k|    if (!(x & 0xffff)) {
  ------------------
  |  Branch (565:9): [True: 11.4k, False: 5.27k]
  ------------------
  566|  11.4k|        k = 16;
  567|  11.4k|        x >>= 16;
  568|  11.4k|    }
  569|  16.7k|    if (!(x & 0xff)) {
  ------------------
  |  Branch (569:9): [True: 2.66k, False: 14.0k]
  ------------------
  570|  2.66k|        k += 8;
  571|  2.66k|        x >>= 8;
  572|  2.66k|    }
  573|  16.7k|    if (!(x & 0xf)) {
  ------------------
  |  Branch (573:9): [True: 9.74k, False: 6.98k]
  ------------------
  574|  9.74k|        k += 4;
  575|  9.74k|        x >>= 4;
  576|  9.74k|    }
  577|  16.7k|    if (!(x & 0x3)) {
  ------------------
  |  Branch (577:9): [True: 6.57k, False: 10.1k]
  ------------------
  578|  6.57k|        k += 2;
  579|  6.57k|        x >>= 2;
  580|  6.57k|    }
  581|  16.7k|    if (!(x & 1)) {
  ------------------
  |  Branch (581:9): [True: 6.98k, False: 9.75k]
  ------------------
  582|  6.98k|        k++;
  583|  6.98k|        x >>= 1;
  584|  6.98k|        if (!x)
  ------------------
  |  Branch (584:13): [True: 0, False: 6.98k]
  ------------------
  585|      0|            return 32;
  586|  6.98k|    }
  587|  16.7k|    *y = x;
  588|  16.7k|    return k;
  589|  16.7k|}
dtoa.c:rv_alloc:
 2110|  42.8k|{
 2111|  42.8k|    int j, k, *r;
 2112|       |
 2113|  42.8k|    j = sizeof(ULong);
 2114|  42.8k|    for(k = 0;
 2115|  42.8k|        sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
  ------------------
  |  Branch (2115:9): [True: 0, False: 42.8k]
  ------------------
 2116|  42.8k|        j <<= 1)
 2117|      0|        k++;
 2118|  42.8k|    r = (int*)Balloc(k);
 2119|  42.8k|    if (r == NULL)
  ------------------
  |  Branch (2119:9): [True: 0, False: 42.8k]
  ------------------
 2120|      0|        return NULL;
 2121|  42.8k|    *r = k;
 2122|  42.8k|    return (char *)(r+1);
 2123|  42.8k|}
dtoa.c:dshift:
 1126|  25.2k|{
 1127|  25.2k|    int rv = hi0bits(b->x[b->wds-1]) - 4;
 1128|  25.2k|    if (p2 > 0)
  ------------------
  |  Branch (1128:9): [True: 12.7k, False: 12.4k]
  ------------------
 1129|  12.7k|        rv -= p2;
 1130|  25.2k|    return rv & kmask;
  ------------------
  |  | 1121|  25.2k|#define kmask 31
  ------------------
 1131|  25.2k|}
dtoa.c:multadd:
  442|   442k|{
  443|   442k|    int i, wds;
  444|   442k|    ULong *x;
  445|   442k|    ULLong carry, y;
  446|   442k|    Bigint *b1;
  447|       |
  448|   442k|    wds = b->wds;
  449|   442k|    x = b->x;
  450|   442k|    i = 0;
  451|   442k|    carry = a;
  452|  1.04M|    do {
  453|  1.04M|        y = *x * (ULLong)m + carry;
  454|  1.04M|        carry = y >> 32;
  455|  1.04M|        *x++ = (ULong)(y & FFFFFFFF);
  ------------------
  |  |  285|  1.04M|#define FFFFFFFF 0xffffffffUL
  ------------------
  456|  1.04M|    }
  457|  1.04M|    while(++i < wds);
  ------------------
  |  Branch (457:11): [True: 605k, False: 442k]
  ------------------
  458|   442k|    if (carry) {
  ------------------
  |  Branch (458:9): [True: 30.0k, False: 412k]
  ------------------
  459|  30.0k|        if (wds >= b->maxwds) {
  ------------------
  |  Branch (459:13): [True: 538, False: 29.5k]
  ------------------
  460|    538|            b1 = Balloc(b->k+1);
  461|    538|            if (b1 == NULL){
  ------------------
  |  Branch (461:17): [True: 0, False: 538]
  ------------------
  462|      0|                Bfree(b);
  463|      0|                return NULL;
  464|      0|            }
  465|    538|            Bcopy(b1, b);
  ------------------
  |  |  433|    538|#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign,   \
  |  |  434|    538|                          y->wds*sizeof(Long) + 2*sizeof(int))
  ------------------
  466|    538|            Bfree(b);
  467|    538|            b = b1;
  468|    538|        }
  469|  30.0k|        b->x[wds++] = (ULong)carry;
  470|  30.0k|        b->wds = wds;
  471|  30.0k|    }
  472|   442k|    return b;
  473|   442k|}
dtoa.c:quorem:
 1139|   153k|{
 1140|   153k|    int n;
 1141|   153k|    ULong *bx, *bxe, q, *sx, *sxe;
 1142|   153k|    ULLong borrow, carry, y, ys;
 1143|       |
 1144|   153k|    n = S->wds;
 1145|       |#ifdef DEBUG
 1146|       |    /*debug*/ if (b->wds > n)
 1147|       |        /*debug*/       Bug("oversize b in quorem");
 1148|       |#endif
 1149|   153k|    if (b->wds < n)
  ------------------
  |  Branch (1149:9): [True: 6.51k, False: 146k]
  ------------------
 1150|  6.51k|        return 0;
 1151|   146k|    sx = S->x;
 1152|   146k|    sxe = sx + --n;
 1153|   146k|    bx = b->x;
 1154|   146k|    bxe = bx + n;
 1155|   146k|    q = *bxe / (*sxe + 1);      /* ensure q <= true quotient */
 1156|       |#ifdef DEBUG
 1157|       |    /*debug*/ if (q > 9)
 1158|       |        /*debug*/       Bug("oversized quotient in quorem");
 1159|       |#endif
 1160|   146k|    if (q) {
  ------------------
  |  Branch (1160:9): [True: 116k, False: 30.0k]
  ------------------
 1161|   116k|        borrow = 0;
 1162|   116k|        carry = 0;
 1163|   386k|        do {
 1164|   386k|            ys = *sx++ * (ULLong)q + carry;
 1165|   386k|            carry = ys >> 32;
 1166|   386k|            y = *bx - (ys & FFFFFFFF) - borrow;
  ------------------
  |  |  285|   386k|#define FFFFFFFF 0xffffffffUL
  ------------------
 1167|   386k|            borrow = y >> 32 & (ULong)1;
 1168|   386k|            *bx++ = (ULong)(y & FFFFFFFF);
  ------------------
  |  |  285|   386k|#define FFFFFFFF 0xffffffffUL
  ------------------
 1169|   386k|        }
 1170|   386k|        while(sx <= sxe);
  ------------------
  |  Branch (1170:15): [True: 270k, False: 116k]
  ------------------
 1171|   116k|        if (!*bxe) {
  ------------------
  |  Branch (1171:13): [True: 497, False: 116k]
  ------------------
 1172|    497|            bx = b->x;
 1173|    497|            while(--bxe > bx && !*bxe)
  ------------------
  |  Branch (1173:19): [True: 369, False: 128]
  |  Branch (1173:33): [True: 0, False: 369]
  ------------------
 1174|      0|                --n;
 1175|    497|            b->wds = n;
 1176|    497|        }
 1177|   116k|    }
 1178|   146k|    if (cmp(b, S) >= 0) {
  ------------------
  |  Branch (1178:9): [True: 9.73k, False: 136k]
  ------------------
 1179|  9.73k|        q++;
 1180|  9.73k|        borrow = 0;
 1181|  9.73k|        carry = 0;
 1182|  9.73k|        bx = b->x;
 1183|  9.73k|        sx = S->x;
 1184|  49.9k|        do {
 1185|  49.9k|            ys = *sx++ + carry;
 1186|  49.9k|            carry = ys >> 32;
 1187|  49.9k|            y = *bx - (ys & FFFFFFFF) - borrow;
  ------------------
  |  |  285|  49.9k|#define FFFFFFFF 0xffffffffUL
  ------------------
 1188|  49.9k|            borrow = y >> 32 & (ULong)1;
 1189|  49.9k|            *bx++ = (ULong)(y & FFFFFFFF);
  ------------------
  |  |  285|  49.9k|#define FFFFFFFF 0xffffffffUL
  ------------------
 1190|  49.9k|        }
 1191|  49.9k|        while(sx <= sxe);
  ------------------
  |  Branch (1191:15): [True: 40.2k, False: 9.73k]
  ------------------
 1192|  9.73k|        bx = b->x;
 1193|  9.73k|        bxe = bx + n;
 1194|  9.73k|        if (!*bxe) {
  ------------------
  |  Branch (1194:13): [True: 9.64k, False: 88]
  ------------------
 1195|  9.82k|            while(--bxe > bx && !*bxe)
  ------------------
  |  Branch (1195:19): [True: 3.57k, False: 6.24k]
  |  Branch (1195:33): [True: 181, False: 3.39k]
  ------------------
 1196|    181|                --n;
 1197|  9.64k|            b->wds = n;
 1198|  9.64k|        }
 1199|  9.73k|    }
 1200|   146k|    return q;
 1201|   153k|}

_PyImport_FindSharedFuncptr:
   68|     20|{
   69|     20|    dl_funcptr p;
   70|     20|    void *handle;
   71|     20|    char funcname[258];
   72|     20|    char pathbuf[260];
   73|     20|    int dlopenflags=0;
   74|       |
   75|     20|    if (strchr(pathname, '/') == NULL) {
  ------------------
  |  Branch (75:9): [True: 0, False: 20]
  ------------------
   76|       |        /* Prefix bare filename with "./" */
   77|      0|        PyOS_snprintf(pathbuf, sizeof(pathbuf), "./%-.255s", pathname);
   78|      0|        pathname = pathbuf;
   79|      0|    }
   80|       |
   81|     20|    PyOS_snprintf(funcname, sizeof(funcname),
   82|     20|                  LEAD_UNDERSCORE "%.20s_%.200s", prefix, shortname);
  ------------------
  |  |   30|     20|#define LEAD_UNDERSCORE ""
  ------------------
   83|       |
   84|     20|    if (fp != NULL) {
  ------------------
  |  Branch (84:9): [True: 0, False: 20]
  ------------------
   85|      0|        struct _Py_stat_struct status;
   86|      0|        if (_Py_fstat(fileno(fp), &status) == -1)
  ------------------
  |  Branch (86:13): [True: 0, False: 0]
  ------------------
   87|      0|            return NULL;
   88|      0|    }
   89|       |
   90|     20|    dlopenflags = _PyImport_GetDLOpenFlags(_PyInterpreterState_GET());
   91|       |
   92|     20|    handle = dlopen(pathname, dlopenflags);
   93|       |
   94|     20|    if (handle == NULL) {
  ------------------
  |  Branch (94:9): [True: 0, False: 20]
  ------------------
   95|      0|        PyObject *mod_name;
   96|      0|        PyObject *path;
   97|      0|        PyObject *error_ob;
   98|      0|        const char *error = dlerror();
   99|      0|        if (error == NULL)
  ------------------
  |  Branch (99:13): [True: 0, False: 0]
  ------------------
  100|      0|            error = "unknown dlopen() error";
  101|      0|        error_ob = PyUnicode_DecodeLocale(error, "surrogateescape");
  102|      0|        if (error_ob == NULL)
  ------------------
  |  Branch (102:13): [True: 0, False: 0]
  ------------------
  103|      0|            return NULL;
  104|      0|        mod_name = PyUnicode_FromString(shortname);
  105|      0|        if (mod_name == NULL) {
  ------------------
  |  Branch (105:13): [True: 0, False: 0]
  ------------------
  106|      0|            Py_DECREF(error_ob);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      0|            return NULL;
  108|      0|        }
  109|      0|        path = PyUnicode_DecodeFSDefault(pathname);
  110|      0|        if (path == NULL) {
  ------------------
  |  Branch (110:13): [True: 0, False: 0]
  ------------------
  111|      0|            Py_DECREF(error_ob);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|      0|            Py_DECREF(mod_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      0|            return NULL;
  114|      0|        }
  115|      0|        PyErr_SetImportError(error_ob, mod_name, path);
  116|      0|        Py_DECREF(error_ob);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      0|        Py_DECREF(mod_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|      0|        Py_DECREF(path);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      0|        return NULL;
  120|      0|    }
  121|     20|    p = (dl_funcptr) dlsym(handle, funcname);
  122|     20|    return p;
  123|     20|}

_PyErr_SetRaisedException:
   27|   434k|{
   28|   434k|    PyObject *old_exc = tstate->current_exception;
   29|   434k|    tstate->current_exception = exc;
   30|   434k|    Py_XDECREF(old_exc);
  ------------------
  |  |  524|   434k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   434k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   434k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   31|   434k|}
_PyErr_Restore:
   62|   295k|{
   63|   295k|    if (type == NULL) {
  ------------------
  |  Branch (63:9): [True: 175k, False: 119k]
  ------------------
   64|   175k|        assert(value == NULL);
  ------------------
  |  Branch (64:9): [True: 175k, False: 0]
  ------------------
   65|   175k|        assert(traceback == NULL);
  ------------------
  |  Branch (65:9): [True: 175k, False: 0]
  ------------------
   66|   175k|        _PyErr_SetRaisedException(tstate, NULL);
   67|   175k|        return;
   68|   175k|    }
   69|   295k|    assert(PyExceptionClass_Check(type));
  ------------------
  |  Branch (69:5): [True: 119k, False: 0]
  |  Branch (69:5): [True: 119k, False: 0]
  ------------------
   70|   119k|    if (value != NULL && type == (PyObject *)Py_TYPE(value)) {
  ------------------
  |  |  213|   119k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|   119k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (70:9): [True: 119k, False: 0]
  |  Branch (70:26): [True: 119k, False: 0]
  ------------------
   71|       |        /* Already normalized */
   72|       |#ifdef Py_DEBUG
   73|       |        PyObject *tb = PyException_GetTraceback(value);
   74|       |        assert(tb != Py_None);
   75|       |        Py_XDECREF(tb);
   76|       |#endif
   77|   119k|    }
   78|      0|    else {
   79|      0|        PyObject *exc = _PyErr_CreateException(type, value);
   80|      0|        Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|      0|        if (exc == NULL) {
  ------------------
  |  Branch (81:13): [True: 0, False: 0]
  ------------------
   82|      0|            Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|      0|            Py_XDECREF(traceback);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|      0|            return;
   85|      0|        }
   86|      0|        value = exc;
   87|      0|    }
   88|   119k|    assert(PyExceptionInstance_Check(value));
  ------------------
  |  Branch (88:5): [True: 119k, False: 0]
  ------------------
   89|   119k|    if (traceback != NULL) {
  ------------------
  |  Branch (89:9): [True: 0, False: 119k]
  ------------------
   90|      0|        if (PyException_SetTraceback(value, traceback) < 0) {
  ------------------
  |  Branch (90:13): [True: 0, False: 0]
  ------------------
   91|      0|            Py_DECREF(traceback);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|      0|            Py_DECREF(value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|      0|            Py_DECREF(type);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      0|            return;
   95|      0|        }
   96|      0|        Py_DECREF(traceback);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|      0|    }
   98|   119k|    _PyErr_SetRaisedException(tstate, value);
   99|   119k|    Py_DECREF(type);
  ------------------
  |  |  430|   119k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   119k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   119k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|   119k|}
PyErr_Restore:
  104|  4.48k|{
  105|  4.48k|    PyThreadState *tstate = _PyThreadState_GET();
  106|  4.48k|    _PyErr_Restore(tstate, type, value, traceback);
  107|  4.48k|}
PyErr_SetRaisedException:
  111|   134k|{
  112|   134k|    PyThreadState *tstate = _PyThreadState_GET();
  113|   134k|    _PyErr_SetRaisedException(tstate, exc);
  114|   134k|}
_PyErr_GetTopmostException:
  118|   115k|{
  119|   115k|    _PyErr_StackItem *exc_info = tstate->exc_info;
  120|   115k|    assert(exc_info);
  ------------------
  |  Branch (120:5): [True: 115k, False: 0]
  ------------------
  121|       |
  122|   115k|    while (exc_info->exc_value == NULL && exc_info->previous_item != NULL)
  ------------------
  |  Branch (122:12): [True: 113k, False: 1.53k]
  |  Branch (122:43): [True: 4, False: 113k]
  ------------------
  123|      4|    {
  124|      4|        exc_info = exc_info->previous_item;
  125|      4|    }
  126|   115k|    assert(!Py_IsNone(exc_info->exc_value));
  ------------------
  |  Branch (126:5): [True: 115k, False: 0]
  ------------------
  127|   115k|    return exc_info;
  128|   115k|}
_PyErr_SetObject:
  154|   115k|{
  155|   115k|    PyObject *exc_value;
  156|   115k|    PyObject *tb = NULL;
  157|       |
  158|   115k|    if (exception != NULL &&
  ------------------
  |  Branch (158:9): [True: 115k, False: 0]
  ------------------
  159|   115k|        !PyExceptionClass_Check(exception)) {
  ------------------
  |  |   61|   115k|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|   230k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   115k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   115k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 115k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|   115k|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|   115k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 115k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|      0|        _PyErr_Format(tstate, PyExc_SystemError,
  161|      0|                      "_PyErr_SetObject: "
  162|      0|                      "exception %R is not a BaseException subclass",
  163|      0|                      exception);
  164|      0|        return;
  165|      0|    }
  166|       |    /* Normalize the exception */
  167|   115k|    int is_subclass = 0;
  168|   115k|    if (value != NULL && PyExceptionInstance_Check(value)) {
  ------------------
  |  |   65|   115k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   115k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 49.1k, False: 66.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (168:9): [True: 115k, False: 0]
  ------------------
  169|  49.1k|        is_subclass = PyObject_IsSubclass((PyObject *)Py_TYPE(value), exception);
  ------------------
  |  |  213|  49.1k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  49.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  49.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|  49.1k|        if (is_subclass < 0) {
  ------------------
  |  Branch (170:13): [True: 0, False: 49.1k]
  ------------------
  171|      0|            return;
  172|      0|        }
  173|  49.1k|    }
  174|   115k|    Py_XINCREF(value);
  ------------------
  |  |  514|   115k|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   115k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|   115k|    if (!is_subclass) {
  ------------------
  |  Branch (175:9): [True: 66.2k, False: 49.1k]
  ------------------
  176|       |        /* We must normalize the value right now */
  177|       |
  178|       |        /* Issue #23571: functions must not be called with an
  179|       |            exception set */
  180|  66.2k|        _PyErr_Clear(tstate);
  181|       |
  182|  66.2k|        PyObject *fixed_value = _PyErr_CreateException(exception, value);
  183|  66.2k|        if (fixed_value == NULL) {
  ------------------
  |  Branch (183:13): [True: 0, False: 66.2k]
  ------------------
  184|      0|            PyObject *exc = _PyErr_GetRaisedException(tstate);
  185|      0|            assert(PyExceptionInstance_Check(exc));
  ------------------
  |  Branch (185:13): [True: 0, False: 0]
  ------------------
  186|       |
  187|      0|            PyObject *note = get_normalization_failure_note(tstate, exception, value);
  188|      0|            Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      0|            if (note != NULL) {
  ------------------
  |  Branch (189:17): [True: 0, False: 0]
  ------------------
  190|       |                /* ignore errors in _PyException_AddNote - they will be overwritten below */
  191|      0|                _PyException_AddNote(exc, note);
  192|      0|                Py_DECREF(note);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|      0|            }
  194|      0|            _PyErr_SetRaisedException(tstate, exc);
  195|      0|            return;
  196|      0|        }
  197|  66.2k|        Py_XSETREF(value, fixed_value);
  ------------------
  |  |  376|  66.2k|    do { \
  |  |  377|  66.2k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  66.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  66.2k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  66.2k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  66.2k|        *_tmp_dst_ptr = (src); \
  |  |  380|  66.2k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  66.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  66.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  66.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  66.2k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 66.2k]
  |  |  ------------------
  ------------------
  198|  66.2k|    }
  199|       |
  200|   115k|    exc_value = _PyErr_GetTopmostException(tstate)->exc_value;
  201|   115k|    if (exc_value != NULL && exc_value != Py_None) {
  ------------------
  |  |  616|  1.53k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (201:9): [True: 1.53k, False: 113k]
  |  Branch (201:30): [True: 1.53k, False: 0]
  ------------------
  202|       |        /* Implicit exception chaining */
  203|  1.53k|        Py_INCREF(exc_value);
  ------------------
  |  |  310|  1.53k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|       |        /* Avoid creating new reference cycles through the
  205|       |           context chain, while taking care not to hang on
  206|       |           pre-existing ones.
  207|       |           This is O(chain length) but context chains are
  208|       |           usually very short. Sensitive readers may try
  209|       |           to inline the call to PyException_GetContext. */
  210|  1.53k|        if (exc_value != value) {
  ------------------
  |  Branch (210:13): [True: 1.53k, False: 0]
  ------------------
  211|  1.53k|            PyObject *o = exc_value, *context;
  212|  1.53k|            PyObject *slow_o = o;  /* Floyd's cycle detection algo */
  213|  1.53k|            int slow_update_toggle = 0;
  214|  2.24k|            while ((context = PyException_GetContext(o))) {
  ------------------
  |  Branch (214:20): [True: 714, False: 1.53k]
  ------------------
  215|    714|                Py_DECREF(context);
  ------------------
  |  |  430|    714|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    714|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    714|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|    714|                if (context == value) {
  ------------------
  |  Branch (216:21): [True: 0, False: 714]
  ------------------
  217|      0|                    PyException_SetContext(o, NULL);
  218|      0|                    break;
  219|      0|                }
  220|    714|                o = context;
  221|    714|                if (o == slow_o) {
  ------------------
  |  Branch (221:21): [True: 0, False: 714]
  ------------------
  222|       |                    /* pre-existing cycle - all exceptions on the
  223|       |                       path were visited and checked.  */
  224|      0|                    break;
  225|      0|                }
  226|    714|                if (slow_update_toggle) {
  ------------------
  |  Branch (226:21): [True: 237, False: 477]
  ------------------
  227|    237|                    slow_o = PyException_GetContext(slow_o);
  228|    237|                    Py_DECREF(slow_o);
  ------------------
  |  |  430|    237|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    237|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    237|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|    237|                }
  230|    714|                slow_update_toggle = !slow_update_toggle;
  231|    714|            }
  232|  1.53k|            PyException_SetContext(value, exc_value);
  233|  1.53k|        }
  234|      0|        else {
  235|      0|            Py_DECREF(exc_value);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|      0|        }
  237|  1.53k|    }
  238|   115k|    assert(value != NULL);
  ------------------
  |  Branch (238:5): [True: 115k, False: 0]
  ------------------
  239|   115k|    if (PyExceptionInstance_Check(value))
  ------------------
  |  |   65|   115k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   115k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 115k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|   115k|        tb = PyException_GetTraceback(value);
  241|   115k|    _PyErr_Restore(tstate, Py_NewRef(Py_TYPE(value)), value, tb);
  ------------------
  |  |  550|   115k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   115k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|   115k|}
PyErr_SetObject:
  246|  53.2k|{
  247|  53.2k|    PyThreadState *tstate = _PyThreadState_GET();
  248|  53.2k|    _PyErr_SetObject(tstate, exception, value);
  249|  53.2k|}
_PyErr_SetKeyError:
  260|    750|{
  261|    750|    PyThreadState *tstate = _PyThreadState_GET();
  262|       |
  263|       |    // PyObject_CallOneArg() must not be called with an exception set,
  264|       |    // otherwise _Py_CheckFunctionResult() can fail if the function returned
  265|       |    // a result with an excception set.
  266|    750|    _PyErr_Clear(tstate);
  267|       |
  268|    750|    PyObject *exc = PyObject_CallOneArg(PyExc_KeyError, arg);
  269|    750|    if (!exc) {
  ------------------
  |  Branch (269:9): [True: 0, False: 750]
  ------------------
  270|       |        /* caller will expect error to be set anyway */
  271|      0|        return;
  272|      0|    }
  273|       |
  274|    750|    _PyErr_SetObject(tstate, (PyObject*)Py_TYPE(exc), exc);
  ------------------
  |  |  213|    750|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    750|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    750|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|    750|    Py_DECREF(exc);
  ------------------
  |  |  430|    750|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    750|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    750|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|    750|}
_PyErr_SetString:
  296|  26.0k|{
  297|  26.0k|    PyObject *value = PyUnicode_FromString(string);
  298|  26.0k|    if (value != NULL) {
  ------------------
  |  Branch (298:9): [True: 26.0k, False: 0]
  ------------------
  299|  26.0k|        _PyErr_SetObject(tstate, exception, value);
  300|  26.0k|        Py_DECREF(value);
  ------------------
  |  |  430|  26.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  26.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  26.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|  26.0k|    }
  302|  26.0k|}
PyErr_SetString:
  306|  25.0k|{
  307|  25.0k|    PyThreadState *tstate = _PyThreadState_GET();
  308|  25.0k|    _PyErr_SetString(tstate, exception, string);
  309|  25.0k|}
PyErr_Occurred:
  323|  4.27M|{
  324|       |    /* The caller must hold a thread state. */
  325|  4.27M|    _Py_AssertHoldsTstate();
  ------------------
  |  |  324|  4.27M|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
  326|       |
  327|  4.27M|    PyThreadState *tstate = _PyThreadState_GET();
  328|  4.27M|    return _PyErr_Occurred(tstate);
  329|  4.27M|}
PyErr_GivenExceptionMatches:
  334|   138k|{
  335|   138k|    if (err == NULL || exc == NULL) {
  ------------------
  |  Branch (335:9): [True: 10.7k, False: 127k]
  |  Branch (335:24): [True: 0, False: 127k]
  ------------------
  336|       |        /* maybe caused by "import exceptions" that failed early on */
  337|  10.7k|        return 0;
  338|  10.7k|    }
  339|   127k|    if (PyTuple_Check(exc)) {
  ------------------
  |  |   27|   127k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   127k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 1.23k, False: 126k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  340|  1.23k|        Py_ssize_t i, n;
  341|  1.23k|        n = PyTuple_Size(exc);
  342|  1.80k|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (342:21): [True: 1.76k, False: 36]
  ------------------
  343|       |            /* Test recursively */
  344|  1.76k|             if (PyErr_GivenExceptionMatches(
  ------------------
  |  Branch (344:18): [True: 1.19k, False: 573]
  ------------------
  345|  1.76k|                 err, PyTuple_GET_ITEM(exc, i)))
  ------------------
  |  |   29|  1.76k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.76k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.76k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (345:23): [True: 1.76k, False: 0]
  ------------------
  346|  1.19k|             {
  347|  1.19k|                 return 1;
  348|  1.19k|             }
  349|  1.76k|        }
  350|     36|        return 0;
  351|  1.23k|    }
  352|       |    /* err might be an instance, so check its class. */
  353|   126k|    if (PyExceptionInstance_Check(err))
  ------------------
  |  |   65|   126k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   126k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 42.0k, False: 84.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|  42.0k|        err = PyExceptionInstance_Class(err);
  ------------------
  |  |   69|  42.0k|#define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x))
  |  |  ------------------
  |  |  |  |  171|  42.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|       |
  356|   126k|    if (PyExceptionClass_Check(err) && PyExceptionClass_Check(exc)) {
  ------------------
  |  |   61|   253k|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|   253k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   126k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   126k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 126k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|   253k|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|   126k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 126k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyExceptionClass_Check(err) && PyExceptionClass_Check(exc)) {
  ------------------
  |  |   61|   126k|    (PyType_Check((x)) &&                                               \
  |  |  ------------------
  |  |  |  |  766|   253k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   126k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   126k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (766:28): [True: 126k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|   126k|     PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
  |  |  ------------------
  |  |  |  |  760|   126k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 126k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|   126k|        return PyType_IsSubtype((PyTypeObject *)err, (PyTypeObject *)exc);
  358|   126k|    }
  359|       |
  360|      0|    return err == exc;
  361|   126k|}
_PyErr_ExceptionMatches:
  366|  92.5k|{
  367|  92.5k|    return PyErr_GivenExceptionMatches(_PyErr_Occurred(tstate), exc);
  368|  92.5k|}
PyErr_ExceptionMatches:
  373|  92.4k|{
  374|  92.4k|    PyThreadState *tstate = _PyThreadState_GET();
  375|  92.4k|    return _PyErr_ExceptionMatches(tstate, exc);
  376|  92.4k|}
_PyErr_GetRaisedException:
  501|   186k|_PyErr_GetRaisedException(PyThreadState *tstate) {
  502|   186k|    PyObject *exc = tstate->current_exception;
  503|       |    tstate->current_exception = NULL;
  504|   186k|    return exc;
  505|   186k|}
PyErr_GetRaisedException:
  509|   134k|{
  510|   134k|    PyThreadState *tstate = _PyThreadState_GET();
  511|   134k|    return _PyErr_GetRaisedException(tstate);
  512|   134k|}
_PyErr_Fetch:
  517|  8.43k|{
  518|  8.43k|    PyObject *exc = _PyErr_GetRaisedException(tstate);
  519|  8.43k|    *p_value = exc;
  520|  8.43k|    if (exc == NULL) {
  ------------------
  |  Branch (520:9): [True: 0, False: 8.43k]
  ------------------
  521|      0|        *p_type = NULL;
  522|      0|        *p_traceback = NULL;
  523|      0|    }
  524|  8.43k|    else {
  525|  8.43k|        *p_type = Py_NewRef(Py_TYPE(exc));
  ------------------
  |  |  550|  8.43k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  8.43k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.43k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  526|  8.43k|        *p_traceback = PyException_GetTraceback(exc);
  527|  8.43k|    }
  528|  8.43k|}
PyErr_Fetch:
  533|  8.43k|{
  534|  8.43k|    PyThreadState *tstate = _PyThreadState_GET();
  535|  8.43k|    _PyErr_Fetch(tstate, p_type, p_value, p_traceback);
  536|  8.43k|}
_PyErr_Clear:
  541|   175k|{
  542|   175k|    _PyErr_Restore(tstate, NULL, NULL, NULL);
  543|   175k|}
PyErr_Clear:
  548|  79.8k|{
  549|  79.8k|    PyThreadState *tstate = _PyThreadState_GET();
  550|  79.8k|    _PyErr_Clear(tstate);
  551|  79.8k|}
_PyErr_ChainExceptions1Tstate:
  709|     93|{
  710|     93|    if (exc == NULL) {
  ------------------
  |  Branch (710:9): [True: 93, False: 0]
  ------------------
  711|     93|        return;
  712|     93|    }
  713|      0|    if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (713:9): [True: 0, False: 0]
  ------------------
  714|      0|        PyObject *exc2 = _PyErr_GetRaisedException(tstate);
  715|      0|        PyException_SetContext(exc2, exc);
  716|      0|        _PyErr_SetRaisedException(tstate, exc2);
  717|      0|    }
  718|      0|    else {
  719|      0|        _PyErr_SetRaisedException(tstate, exc);
  720|      0|    }
  721|      0|}
_PyErr_ChainExceptions1:
  725|     93|{
  726|     93|    PyThreadState *tstate = _PyThreadState_GET();
  727|     93|    _PyErr_ChainExceptions1Tstate(tstate, exc);
  728|     93|}
PyErr_SetFromErrnoWithFilenameObject:
  812|  5.54k|{
  813|       |    return PyErr_SetFromErrnoWithFilenameObjects(exc, filenameObject, NULL);
  814|  5.54k|}
PyErr_SetFromErrnoWithFilenameObjects:
  818|  6.97k|{
  819|  6.97k|    PyThreadState *tstate = _PyThreadState_GET();
  820|  6.97k|    PyObject *message;
  821|  6.97k|    PyObject *v, *args;
  822|  6.97k|    int i = errno;
  823|       |#ifdef MS_WINDOWS
  824|       |    WCHAR *s_buf = NULL;
  825|       |#endif /* Unix/Windows */
  826|       |
  827|  6.97k|#ifdef EINTR
  828|  6.97k|    if (i == EINTR && PyErr_CheckSignals())
  ------------------
  |  Branch (828:9): [True: 0, False: 6.97k]
  |  Branch (828:23): [True: 0, False: 0]
  ------------------
  829|      0|        return NULL;
  830|  6.97k|#endif
  831|       |
  832|  6.97k|#ifndef MS_WINDOWS
  833|  6.97k|    if (i != 0) {
  ------------------
  |  Branch (833:9): [True: 6.97k, False: 0]
  ------------------
  834|  6.97k|        const char *s = strerror(i);
  835|  6.97k|        message = PyUnicode_DecodeLocale(s, "surrogateescape");
  836|  6.97k|    }
  837|      0|    else {
  838|       |        /* Sometimes errno didn't get set */
  839|      0|        message = PyUnicode_FromString("Error");
  840|      0|    }
  841|       |#else
  842|       |    if (i == 0)
  843|       |        message = PyUnicode_FromString("Error"); /* Sometimes errno didn't get set */
  844|       |    else
  845|       |    {
  846|       |        /* Note that the Win32 errors do not lineup with the
  847|       |           errno error.  So if the error is in the MSVC error
  848|       |           table, we use it, otherwise we assume it really _is_
  849|       |           a Win32 error code
  850|       |        */
  851|       |        if (i > 0 && i < _sys_nerr) {
  852|       |            message = PyUnicode_FromString(_sys_errlist[i]);
  853|       |        }
  854|       |        else {
  855|       |            int len = FormatMessageW(
  856|       |                FORMAT_MESSAGE_ALLOCATE_BUFFER |
  857|       |                FORMAT_MESSAGE_FROM_SYSTEM |
  858|       |                FORMAT_MESSAGE_IGNORE_INSERTS,
  859|       |                NULL,                   /* no message source */
  860|       |                i,
  861|       |                MAKELANGID(LANG_NEUTRAL,
  862|       |                           SUBLANG_DEFAULT),
  863|       |                           /* Default language */
  864|       |                (LPWSTR) &s_buf,
  865|       |                0,                      /* size not used */
  866|       |                NULL);                  /* no args */
  867|       |            if (len==0) {
  868|       |                /* Only ever seen this in out-of-mem
  869|       |                   situations */
  870|       |                s_buf = NULL;
  871|       |                message = PyUnicode_FromFormat("Windows Error 0x%x", i);
  872|       |            } else {
  873|       |                /* remove trailing cr/lf and dots */
  874|       |                while (len > 0 && (s_buf[len-1] <= L' ' || s_buf[len-1] == L'.'))
  875|       |                    s_buf[--len] = L'\0';
  876|       |                message = PyUnicode_FromWideChar(s_buf, len);
  877|       |            }
  878|       |        }
  879|       |    }
  880|       |#endif /* Unix/Windows */
  881|       |
  882|  6.97k|    if (message == NULL)
  ------------------
  |  Branch (882:9): [True: 0, False: 6.97k]
  ------------------
  883|      0|    {
  884|       |#ifdef MS_WINDOWS
  885|       |        LocalFree(s_buf);
  886|       |#endif
  887|      0|        return NULL;
  888|      0|    }
  889|       |
  890|  6.97k|    if (filenameObject != NULL) {
  ------------------
  |  Branch (890:9): [True: 5.54k, False: 1.43k]
  ------------------
  891|  5.54k|        if (filenameObject2 != NULL)
  ------------------
  |  Branch (891:13): [True: 0, False: 5.54k]
  ------------------
  892|      0|            args = Py_BuildValue("(iOOiO)", i, message, filenameObject, 0, filenameObject2);
  893|  5.54k|        else
  894|  5.54k|            args = Py_BuildValue("(iOO)", i, message, filenameObject);
  895|  5.54k|    } else {
  896|  1.43k|        assert(filenameObject2 == NULL);
  ------------------
  |  Branch (896:9): [True: 1.43k, False: 0]
  ------------------
  897|  1.43k|        args = Py_BuildValue("(iO)", i, message);
  898|  1.43k|    }
  899|  6.97k|    Py_DECREF(message);
  ------------------
  |  |  430|  6.97k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.97k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  900|       |
  901|  6.97k|    if (args != NULL) {
  ------------------
  |  Branch (901:9): [True: 6.97k, False: 0]
  ------------------
  902|  6.97k|        v = PyObject_Call(exc, args, NULL);
  903|  6.97k|        Py_DECREF(args);
  ------------------
  |  |  430|  6.97k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.97k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  904|  6.97k|        if (v != NULL) {
  ------------------
  |  Branch (904:13): [True: 6.97k, False: 0]
  ------------------
  905|  6.97k|            _PyErr_SetObject(tstate, (PyObject *) Py_TYPE(v), v);
  ------------------
  |  |  213|  6.97k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  6.97k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  906|  6.97k|            Py_DECREF(v);
  ------------------
  |  |  430|  6.97k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  6.97k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  6.97k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  907|  6.97k|        }
  908|  6.97k|    }
  909|       |#ifdef MS_WINDOWS
  910|       |    LocalFree(s_buf);
  911|       |#endif
  912|       |    return NULL;
  913|  6.97k|}
PyErr_SetFromErrno:
  934|  1.43k|{
  935|  1.43k|    return PyErr_SetFromErrnoWithFilenameObjects(exc, NULL, NULL);
  936|  1.43k|}
_PyErr_SetImportErrorWithNameFrom:
 1154|      1|{
 1155|      1|    return _PyErr_SetImportErrorSubclassWithNameFrom(PyExc_ImportError, msg, name, path, from_name);
 1156|      1|}
_PyErr_FormatV:
 1213|  25.8k|{
 1214|  25.8k|    PyObject* string;
 1215|       |
 1216|       |    /* Issue #23571: PyUnicode_FromFormatV() must not be called with an
 1217|       |       exception set, it calls arbitrary Python code like PyObject_Repr() */
 1218|  25.8k|    _PyErr_Clear(tstate);
 1219|       |
 1220|  25.8k|    string = PyUnicode_FromFormatV(format, vargs);
 1221|  25.8k|    if (string != NULL) {
  ------------------
  |  Branch (1221:9): [True: 25.8k, False: 0]
  ------------------
 1222|  25.8k|        _PyErr_SetObject(tstate, exception, string);
 1223|  25.8k|        Py_DECREF(string);
  ------------------
  |  |  430|  25.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  25.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  25.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1224|  25.8k|    }
 1225|       |    return NULL;
 1226|  25.8k|}
_PyErr_Format:
 1240|  2.29k|{
 1241|  2.29k|    va_list vargs;
 1242|  2.29k|    va_start(vargs, format);
 1243|  2.29k|    _PyErr_FormatV(tstate, exception, format, vargs);
 1244|  2.29k|    va_end(vargs);
 1245|       |    return NULL;
 1246|  2.29k|}
PyErr_Format:
 1251|  23.5k|{
 1252|  23.5k|    PyThreadState *tstate = _PyThreadState_GET();
 1253|  23.5k|    va_list vargs;
 1254|  23.5k|    va_start(vargs, format);
 1255|  23.5k|    _PyErr_FormatV(tstate, exception, format, vargs);
 1256|  23.5k|    va_end(vargs);
 1257|       |    return NULL;
 1258|  23.5k|}
_PyErr_FormatNote:
 1264|  1.92k|{
 1265|  1.92k|    PyObject *exc = PyErr_GetRaisedException();
 1266|  1.92k|    if (exc == NULL) {
  ------------------
  |  Branch (1266:9): [True: 0, False: 1.92k]
  ------------------
 1267|      0|        return;
 1268|      0|    }
 1269|  1.92k|    va_list vargs;
 1270|  1.92k|    va_start(vargs, format);
 1271|  1.92k|    PyObject *note = PyUnicode_FromFormatV(format, vargs);
 1272|  1.92k|    va_end(vargs);
 1273|  1.92k|    if (note == NULL) {
  ------------------
  |  Branch (1273:9): [True: 0, False: 1.92k]
  ------------------
 1274|      0|        goto error;
 1275|      0|    }
 1276|  1.92k|    int res = _PyException_AddNote(exc, note);
 1277|  1.92k|    Py_DECREF(note);
  ------------------
  |  |  430|  1.92k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.92k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.92k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|  1.92k|    if (res < 0) {
  ------------------
  |  Branch (1278:9): [True: 0, False: 1.92k]
  ------------------
 1279|      0|        goto error;
 1280|      0|    }
 1281|  1.92k|    PyErr_SetRaisedException(exc);
 1282|  1.92k|    return;
 1283|      0|error:
 1284|      0|    _PyErr_ChainExceptions1(exc);
 1285|      0|}
PyErr_NewException:
 1290|      8|{
 1291|      8|    PyThreadState *tstate = _PyThreadState_GET();
 1292|      8|    PyObject *modulename = NULL;
 1293|      8|    PyObject *mydict = NULL;
 1294|      8|    PyObject *bases = NULL;
 1295|      8|    PyObject *result = NULL;
 1296|       |
 1297|      8|    const char *dot = strrchr(name, '.');
 1298|      8|    if (dot == NULL) {
  ------------------
  |  Branch (1298:9): [True: 0, False: 8]
  ------------------
 1299|      0|        _PyErr_SetString(tstate, PyExc_SystemError,
 1300|      0|                         "PyErr_NewException: name must be module.class");
 1301|      0|        return NULL;
 1302|      0|    }
 1303|      8|    if (base == NULL) {
  ------------------
  |  Branch (1303:9): [True: 3, False: 5]
  ------------------
 1304|      3|        base = PyExc_Exception;
 1305|      3|    }
 1306|      8|    if (dict == NULL) {
  ------------------
  |  Branch (1306:9): [True: 8, False: 0]
  ------------------
 1307|      8|        dict = mydict = PyDict_New();
 1308|      8|        if (dict == NULL)
  ------------------
  |  Branch (1308:13): [True: 0, False: 8]
  ------------------
 1309|      0|            goto failure;
 1310|      8|    }
 1311|       |
 1312|      8|    int r = PyDict_Contains(dict, &_Py_ID(__module__));
  ------------------
  |  |  936|      8|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      8|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      8|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|      8|    if (r < 0) {
  ------------------
  |  Branch (1313:9): [True: 0, False: 8]
  ------------------
 1314|      0|        goto failure;
 1315|      0|    }
 1316|      8|    if (r == 0) {
  ------------------
  |  Branch (1316:9): [True: 8, False: 0]
  ------------------
 1317|      8|        modulename = PyUnicode_FromStringAndSize(name,
 1318|      8|                                             (Py_ssize_t)(dot-name));
 1319|      8|        if (modulename == NULL)
  ------------------
  |  Branch (1319:13): [True: 0, False: 8]
  ------------------
 1320|      0|            goto failure;
 1321|      8|        if (PyDict_SetItem(dict, &_Py_ID(__module__), modulename) != 0)
  ------------------
  |  |  936|      8|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      8|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      8|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1321:13): [True: 0, False: 8]
  ------------------
 1322|      0|            goto failure;
 1323|      8|    }
 1324|      8|    if (PyTuple_Check(base)) {
  ------------------
  |  |   27|      8|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      8|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1325|      2|        bases = Py_NewRef(base);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1326|      6|    } else {
 1327|      6|        bases = PyTuple_Pack(1, base);
 1328|      6|        if (bases == NULL)
  ------------------
  |  Branch (1328:13): [True: 0, False: 6]
  ------------------
 1329|      0|            goto failure;
 1330|      6|    }
 1331|       |    /* Create a real class. */
 1332|      8|    result = PyObject_CallFunction((PyObject *)&PyType_Type, "sOO",
 1333|      8|                                   dot+1, bases, dict);
 1334|      8|  failure:
 1335|      8|    Py_XDECREF(bases);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1336|      8|    Py_XDECREF(mydict);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1337|      8|    Py_XDECREF(modulename);
  ------------------
  |  |  524|      8|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1338|      8|    return result;
 1339|      8|}
_PyErr_InitTypes:
 1402|      2|{
 1403|      2|    if (_PyStructSequence_InitBuiltin(interp, &UnraisableHookArgsType,
  ------------------
  |  Branch (1403:9): [True: 0, False: 2]
  ------------------
 1404|      2|                                      &UnraisableHookArgs_desc) < 0)
 1405|      0|    {
 1406|      0|        return _PyStatus_ERR("failed to initialize UnraisableHookArgs type");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1407|      0|    }
 1408|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1409|      2|}
PyErr_RangedSyntaxLocationObject:
 1922|    269|                                 int end_lineno, int end_col_offset) {
 1923|    269|    PyErr_SyntaxLocationObjectEx(filename, lineno, col_offset, end_lineno, end_col_offset);
 1924|    269|}
_PyErr_RaiseSyntaxError:
 1950|    502|{
 1951|    502|    PyObject *text = PyErr_ProgramTextObject(filename, lineno);
 1952|    502|    if (text == NULL) {
  ------------------
  |  Branch (1952:9): [True: 502, False: 0]
  ------------------
 1953|    502|        text = Py_NewRef(Py_None);
  ------------------
  |  |  550|    502|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1954|    502|    }
 1955|    502|    PyObject *args = Py_BuildValue("O(OiiOii)", msg, filename,
 1956|    502|                                   lineno, col_offset, text,
 1957|    502|                                   end_lineno, end_col_offset);
 1958|    502|    if (args == NULL) {
  ------------------
  |  Branch (1958:9): [True: 0, False: 502]
  ------------------
 1959|      0|        goto exit;
 1960|      0|    }
 1961|    502|    PyErr_SetObject(PyExc_SyntaxError, args);
 1962|    502| exit:
 1963|    502|    Py_DECREF(text);
  ------------------
  |  |  430|    502|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1964|    502|    Py_XDECREF(args);
  ------------------
  |  |  524|    502|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1965|    502|}
_PyErr_EmitSyntaxWarning:
 1975|  5.97k|{
 1976|  5.97k|    if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, filename, lineno,
  ------------------
  |  Branch (1976:9): [True: 0, False: 5.97k]
  ------------------
 1977|  5.97k|                                 module, NULL) < 0)
 1978|      0|    {
 1979|      0|        if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) {
  ------------------
  |  Branch (1979:13): [True: 0, False: 0]
  ------------------
 1980|       |            /* Replace the SyntaxWarning exception with a SyntaxError
 1981|       |               to get a more accurate error report */
 1982|      0|            PyErr_Clear();
 1983|      0|            _PyErr_RaiseSyntaxError(msg, filename, lineno, col_offset,
 1984|      0|                                    end_lineno, end_col_offset);
 1985|      0|        }
 1986|      0|        return -1;
 1987|      0|    }
 1988|  5.97k|    return 0;
 1989|  5.97k|}
_PyErr_ProgramDecodedTextObject:
 2057|  5.49k|{
 2058|  5.49k|    char *found_encoding = NULL;
 2059|  5.49k|    if (filename == NULL || lineno <= 0) {
  ------------------
  |  Branch (2059:9): [True: 0, False: 5.49k]
  |  Branch (2059:29): [True: 0, False: 5.49k]
  ------------------
 2060|      0|        return NULL;
 2061|      0|    }
 2062|       |
 2063|  5.49k|    FILE *fp = Py_fopen(filename, "r" PY_STDIOTEXTMODE);
  ------------------
  |  |    9|  5.49k|#define PY_STDIOTEXTMODE "b"
  ------------------
 2064|  5.49k|    if (fp == NULL) {
  ------------------
  |  Branch (2064:9): [True: 5.49k, False: 0]
  ------------------
 2065|  5.49k|        PyErr_Clear();
 2066|  5.49k|        return NULL;
 2067|  5.49k|    }
 2068|      0|    if (encoding == NULL) {
  ------------------
  |  Branch (2068:9): [True: 0, False: 0]
  ------------------
 2069|      0|        int fd = fileno(fp);
 2070|      0|        found_encoding = _PyTokenizer_FindEncodingFilename(fd, filename);
 2071|      0|        encoding = found_encoding;
 2072|      0|        if (encoding == NULL) {
  ------------------
  |  Branch (2072:13): [True: 0, False: 0]
  ------------------
 2073|      0|            PyErr_Clear();
 2074|      0|            encoding = "utf-8";
 2075|      0|        }
 2076|       |        /* Reset position */
 2077|      0|        if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
  ------------------
  |  Branch (2077:13): [True: 0, False: 0]
  ------------------
 2078|      0|            fclose(fp);
 2079|      0|            PyMem_Free(found_encoding);
 2080|      0|            return NULL;
 2081|      0|        }
 2082|      0|    }
 2083|      0|    PyObject *res = err_programtext(fp, lineno, encoding);
 2084|      0|    fclose(fp);
 2085|      0|    PyMem_Free(found_encoding);
 2086|      0|    return res;
 2087|      0|}
PyErr_ProgramTextObject:
 2091|    771|{
 2092|       |    return _PyErr_ProgramDecodedTextObject(filename, lineno, NULL);
 2093|    771|}
errors.c:_PyErr_CreateException:
   35|  66.2k|{
   36|  66.2k|    PyObject *exc;
   37|       |
   38|  66.2k|    if (value == NULL || value == Py_None) {
  ------------------
  |  |  616|  66.2k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (38:9): [True: 0, False: 66.2k]
  |  Branch (38:26): [True: 0, False: 66.2k]
  ------------------
   39|      0|        exc = _PyObject_CallNoArgs(exception_type);
   40|      0|    }
   41|  66.2k|    else if (PyTuple_Check(value)) {
  ------------------
  |  |   27|  66.2k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  66.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 14.1k, False: 52.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|  14.1k|        exc = PyObject_Call(exception_type, value, NULL);
   43|  14.1k|    }
   44|  52.0k|    else {
   45|  52.0k|        exc = PyObject_CallOneArg(exception_type, value);
   46|  52.0k|    }
   47|       |
   48|  66.2k|    if (exc != NULL && !PyExceptionInstance_Check(exc)) {
  ------------------
  |  |   65|  66.2k|    PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  66.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (48:9): [True: 66.2k, False: 0]
  |  Branch (48:24): [True: 0, False: 66.2k]
  ------------------
   49|      0|        PyErr_Format(PyExc_TypeError,
   50|      0|                     "calling %R should have returned an instance of "
   51|      0|                     "BaseException, not %s",
   52|      0|                     exception_type, Py_TYPE(exc)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   53|      0|        Py_CLEAR(exc);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
   54|      0|    }
   55|       |
   56|  66.2k|    return exc;
   57|  66.2k|}
errors.c:_PyErr_SetImportErrorSubclassWithNameFrom:
 1133|      1|{
 1134|      1|    PyThreadState *tstate = _PyThreadState_GET();
 1135|      1|    PyObject *error = new_importerror(
 1136|      1|                        tstate, exception, msg, name, path, from_name);
 1137|      1|    if (error != NULL) {
  ------------------
  |  Branch (1137:9): [True: 1, False: 0]
  ------------------
 1138|      1|        _PyErr_SetObject(tstate, (PyObject *)Py_TYPE(error), error);
  ------------------
  |  |  213|      1|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|      1|        Py_DECREF(error);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1140|      1|    }
 1141|       |    return NULL;
 1142|      1|}
errors.c:new_importerror:
 1079|      1|{
 1080|      1|    PyObject *exc = NULL;
 1081|      1|    PyObject *kwargs = NULL;
 1082|       |
 1083|      1|    int issubclass = PyObject_IsSubclass(exctype, PyExc_ImportError);
 1084|      1|    if (issubclass < 0) {
  ------------------
  |  Branch (1084:9): [True: 0, False: 1]
  ------------------
 1085|      0|        return NULL;
 1086|      0|    }
 1087|      1|    else if (!issubclass) {
  ------------------
  |  Branch (1087:14): [True: 0, False: 1]
  ------------------
 1088|      0|        _PyErr_SetString(tstate, PyExc_TypeError,
 1089|      0|                         "expected a subclass of ImportError");
 1090|      0|        return NULL;
 1091|      0|    }
 1092|       |
 1093|      1|    if (msg == NULL) {
  ------------------
  |  Branch (1093:9): [True: 0, False: 1]
  ------------------
 1094|      0|        _PyErr_SetString(tstate, PyExc_TypeError,
 1095|      0|                         "expected a message argument");
 1096|      0|        return NULL;
 1097|      0|    }
 1098|       |
 1099|      1|    if (name == NULL) {
  ------------------
  |  Branch (1099:9): [True: 0, False: 1]
  ------------------
 1100|      0|        name = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1101|      0|    }
 1102|      1|    if (path == NULL) {
  ------------------
  |  Branch (1102:9): [True: 1, False: 0]
  ------------------
 1103|      1|        path = Py_None;
  ------------------
  |  |  616|      1|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1104|      1|    }
 1105|      1|    if (from_name == NULL) {
  ------------------
  |  Branch (1105:9): [True: 0, False: 1]
  ------------------
 1106|      0|        from_name = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1107|      0|    }
 1108|       |
 1109|      1|    kwargs = PyDict_New();
 1110|      1|    if (kwargs == NULL) {
  ------------------
  |  Branch (1110:9): [True: 0, False: 1]
  ------------------
 1111|      0|        return NULL;
 1112|      0|    }
 1113|      1|    if (PyDict_SetItemString(kwargs, "name", name) < 0) {
  ------------------
  |  Branch (1113:9): [True: 0, False: 1]
  ------------------
 1114|      0|        goto finally;
 1115|      0|    }
 1116|      1|    if (PyDict_SetItemString(kwargs, "path", path) < 0) {
  ------------------
  |  Branch (1116:9): [True: 0, False: 1]
  ------------------
 1117|      0|        goto finally;
 1118|      0|    }
 1119|      1|    if (PyDict_SetItemString(kwargs, "name_from", from_name) < 0) {
  ------------------
  |  Branch (1119:9): [True: 0, False: 1]
  ------------------
 1120|      0|        goto finally;
 1121|      0|    }
 1122|      1|    exc = PyObject_VectorcallDict(exctype, &msg, 1, kwargs);
 1123|       |
 1124|      1|finally:
 1125|      1|    Py_DECREF(kwargs);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1126|      1|    return exc;
 1127|      1|}
errors.c:PyErr_SyntaxLocationObjectEx:
 1814|    269|{
 1815|    269|    PyThreadState *tstate = _PyThreadState_GET();
 1816|       |
 1817|       |    /* add attributes for the line number and filename for the error */
 1818|    269|    PyObject *exc = _PyErr_GetRaisedException(tstate);
 1819|       |    /* XXX check that it is, indeed, a syntax error. It might not
 1820|       |     * be, though. */
 1821|    269|    PyObject *tmp = PyLong_FromLong(lineno);
 1822|    269|    if (tmp == NULL) {
  ------------------
  |  Branch (1822:9): [True: 0, False: 269]
  ------------------
 1823|      0|        _PyErr_Clear(tstate);
 1824|      0|    }
 1825|    269|    else {
 1826|    269|        if (PyObject_SetAttr(exc, &_Py_ID(lineno), tmp)) {
  ------------------
  |  |  936|    269|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    269|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    269|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1826:13): [True: 0, False: 269]
  ------------------
 1827|      0|            _PyErr_Clear(tstate);
 1828|      0|        }
 1829|    269|        Py_DECREF(tmp);
  ------------------
  |  |  430|    269|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    269|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    269|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1830|    269|    }
 1831|    269|    tmp = NULL;
 1832|    269|    if (col_offset >= 0) {
  ------------------
  |  Branch (1832:9): [True: 269, False: 0]
  ------------------
 1833|    269|        tmp = PyLong_FromLong(col_offset);
 1834|    269|        if (tmp == NULL) {
  ------------------
  |  Branch (1834:13): [True: 0, False: 269]
  ------------------
 1835|      0|            _PyErr_Clear(tstate);
 1836|      0|        }
 1837|    269|    }
 1838|    269|    if (PyObject_SetAttr(exc, &_Py_ID(offset), tmp ? tmp : Py_None)) {
  ------------------
  |  |  936|    269|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    269|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    269|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyObject_SetAttr(exc, &_Py_ID(offset), tmp ? tmp : Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1838:9): [True: 0, False: 269]
  |  Branch (1838:48): [True: 269, False: 0]
  ------------------
 1839|      0|        _PyErr_Clear(tstate);
 1840|      0|    }
 1841|    269|    Py_XDECREF(tmp);
  ------------------
  |  |  524|    269|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    269|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    269|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1842|       |
 1843|    269|    tmp = NULL;
 1844|    269|    if (end_lineno >= 0) {
  ------------------
  |  Branch (1844:9): [True: 269, False: 0]
  ------------------
 1845|    269|        tmp = PyLong_FromLong(end_lineno);
 1846|    269|        if (tmp == NULL) {
  ------------------
  |  Branch (1846:13): [True: 0, False: 269]
  ------------------
 1847|      0|            _PyErr_Clear(tstate);
 1848|      0|        }
 1849|    269|    }
 1850|    269|    if (PyObject_SetAttr(exc, &_Py_ID(end_lineno), tmp ? tmp : Py_None)) {
  ------------------
  |  |  936|    269|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    269|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    269|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyObject_SetAttr(exc, &_Py_ID(end_lineno), tmp ? tmp : Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1850:9): [True: 0, False: 269]
  |  Branch (1850:52): [True: 269, False: 0]
  ------------------
 1851|      0|        _PyErr_Clear(tstate);
 1852|      0|    }
 1853|    269|    Py_XDECREF(tmp);
  ------------------
  |  |  524|    269|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    269|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    269|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1854|       |
 1855|    269|    tmp = NULL;
 1856|    269|    if (end_col_offset >= 0) {
  ------------------
  |  Branch (1856:9): [True: 269, False: 0]
  ------------------
 1857|    269|        tmp = PyLong_FromLong(end_col_offset);
 1858|    269|        if (tmp == NULL) {
  ------------------
  |  Branch (1858:13): [True: 0, False: 269]
  ------------------
 1859|      0|            _PyErr_Clear(tstate);
 1860|      0|        }
 1861|    269|    }
 1862|    269|    if (PyObject_SetAttr(exc, &_Py_ID(end_offset), tmp ? tmp : Py_None)) {
  ------------------
  |  |  936|    269|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    269|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    269|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyObject_SetAttr(exc, &_Py_ID(end_offset), tmp ? tmp : Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1862:9): [True: 0, False: 269]
  |  Branch (1862:52): [True: 269, False: 0]
  ------------------
 1863|      0|        _PyErr_Clear(tstate);
 1864|      0|    }
 1865|    269|    Py_XDECREF(tmp);
  ------------------
  |  |  524|    269|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    269|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    269|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1866|       |
 1867|    269|    tmp = NULL;
 1868|    269|    if (filename != NULL) {
  ------------------
  |  Branch (1868:9): [True: 269, False: 0]
  ------------------
 1869|    269|        if (PyObject_SetAttr(exc, &_Py_ID(filename), filename)) {
  ------------------
  |  |  936|    269|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    269|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    269|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1869:13): [True: 0, False: 269]
  ------------------
 1870|      0|            _PyErr_Clear(tstate);
 1871|      0|        }
 1872|       |
 1873|    269|        tmp = PyErr_ProgramTextObject(filename, lineno);
 1874|    269|        if (tmp) {
  ------------------
  |  Branch (1874:13): [True: 0, False: 269]
  ------------------
 1875|      0|            if (PyObject_SetAttr(exc, &_Py_ID(text), tmp)) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1875:17): [True: 0, False: 0]
  ------------------
 1876|      0|                _PyErr_Clear(tstate);
 1877|      0|            }
 1878|      0|            Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1879|      0|        }
 1880|    269|        else {
 1881|    269|            _PyErr_Clear(tstate);
 1882|    269|        }
 1883|    269|    }
 1884|    269|    if ((PyObject *)Py_TYPE(exc) != PyExc_SyntaxError) {
  ------------------
  |  |  213|    269|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    269|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    269|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1884:9): [True: 0, False: 269]
  ------------------
 1885|      0|        int rc = PyObject_HasAttrWithError(exc, &_Py_ID(msg));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1886|      0|        if (rc < 0) {
  ------------------
  |  Branch (1886:13): [True: 0, False: 0]
  ------------------
 1887|      0|            _PyErr_Clear(tstate);
 1888|      0|        }
 1889|      0|        else if (!rc) {
  ------------------
  |  Branch (1889:18): [True: 0, False: 0]
  ------------------
 1890|      0|            tmp = PyObject_Str(exc);
 1891|      0|            if (tmp) {
  ------------------
  |  Branch (1891:17): [True: 0, False: 0]
  ------------------
 1892|      0|                if (PyObject_SetAttr(exc, &_Py_ID(msg), tmp)) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1892:21): [True: 0, False: 0]
  ------------------
 1893|      0|                    _PyErr_Clear(tstate);
 1894|      0|                }
 1895|      0|                Py_DECREF(tmp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1896|      0|            }
 1897|      0|            else {
 1898|      0|                _PyErr_Clear(tstate);
 1899|      0|            }
 1900|      0|        }
 1901|       |
 1902|      0|        rc = PyObject_HasAttrWithError(exc, &_Py_ID(print_file_and_line));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1903|      0|        if (rc < 0) {
  ------------------
  |  Branch (1903:13): [True: 0, False: 0]
  ------------------
 1904|      0|            _PyErr_Clear(tstate);
 1905|      0|        }
 1906|      0|        else if (!rc) {
  ------------------
  |  Branch (1906:18): [True: 0, False: 0]
  ------------------
 1907|      0|            if (PyObject_SetAttr(exc, &_Py_ID(print_file_and_line), Py_None)) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PyObject_SetAttr(exc, &_Py_ID(print_file_and_line), Py_None)) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1907:17): [True: 0, False: 0]
  ------------------
 1908|      0|                _PyErr_Clear(tstate);
 1909|      0|            }
 1910|      0|        }
 1911|      0|    }
 1912|    269|    _PyErr_SetRaisedException(tstate, exc);
 1913|    269|}

_Py_ResetForceASCII:
  351|      8|{
  352|      8|    force_ascii = -1;
  ------------------
  |  |  236|      8|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  ------------------
  353|      8|}
_Py_DecodeLocaleEx:
  626|  7.63k|{
  627|  7.63k|    if (current_locale) {
  ------------------
  |  Branch (627:9): [True: 6.97k, False: 660]
  ------------------
  628|       |#ifdef _Py_FORCE_UTF8_LOCALE
  629|       |        return _Py_DecodeUTF8Ex(arg, strlen(arg), wstr, wlen, reason,
  630|       |                                errors);
  631|       |#else
  632|  6.97k|        return decode_current_locale(arg, wstr, wlen, reason, errors);
  633|  6.97k|#endif
  634|  6.97k|    }
  635|       |
  636|       |#ifdef _Py_FORCE_UTF8_FS_ENCODING
  637|       |    return _Py_DecodeUTF8Ex(arg, strlen(arg), wstr, wlen, reason,
  638|       |                            errors);
  639|       |#else
  640|    660|    int use_utf8 = (_PyRuntime.preconfig.utf8_mode >= 1);
  641|       |#ifdef MS_WINDOWS
  642|       |    use_utf8 |= (_PyRuntime.preconfig.legacy_windows_fs_encoding == 0);
  643|       |#endif
  644|    660|    if (use_utf8) {
  ------------------
  |  Branch (644:9): [True: 660, False: 0]
  ------------------
  645|    660|        return _Py_DecodeUTF8Ex(arg, strlen(arg), wstr, wlen, reason,
  646|    660|                                errors);
  647|    660|    }
  648|       |
  649|      0|#ifdef USE_FORCE_ASCII
  650|      0|    if (force_ascii == -1) {
  ------------------
  |  |  236|      0|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  ------------------
  |  Branch (650:9): [True: 0, False: 0]
  ------------------
  651|      0|        force_ascii = check_force_ascii();
  ------------------
  |  |  236|      0|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  ------------------
  652|      0|    }
  653|       |
  654|      0|    if (force_ascii) {
  ------------------
  |  |  236|      0|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  |  |  ------------------
  |  |  |  Branch (236:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  655|       |        /* force ASCII encoding to workaround mbstowcs() issue */
  656|      0|        return decode_ascii(arg, wstr, wlen, reason, errors);
  657|      0|    }
  658|      0|#endif
  659|       |
  660|      0|    return decode_current_locale(arg, wstr, wlen, reason, errors);
  661|      0|#endif   /* !_Py_FORCE_UTF8_FS_ENCODING */
  662|      0|}
Py_DecodeLocale:
  686|     12|{
  687|     12|    wchar_t *wstr;
  688|     12|    int res = _Py_DecodeLocaleEx(arg, &wstr, wlen,
  689|     12|                                 NULL, 0,
  690|     12|                                 _Py_ERROR_SURROGATEESCAPE);
  691|     12|    if (res != 0) {
  ------------------
  |  Branch (691:9): [True: 0, False: 12]
  ------------------
  692|      0|        assert(res != -3);
  ------------------
  |  Branch (692:9): [True: 0, False: 0]
  ------------------
  693|      0|        if (wlen != NULL) {
  ------------------
  |  Branch (693:13): [True: 0, False: 0]
  ------------------
  694|      0|            *wlen = (size_t)res;
  695|      0|        }
  696|      0|        return NULL;
  697|      0|    }
  698|     12|    return wstr;
  699|     12|}
_Py_EncodeLocaleRaw:
  897|     10|{
  898|     10|    return encode_locale(text, error_pos, 1, 0);
  899|     10|}
_Py_EncodeLocaleEx:
  906|     82|{
  907|     82|    return encode_locale_ex(text, str, error_pos, reason, 1,
  908|     82|                            current_locale, errors);
  909|     82|}
_Py_fstat_noraise:
 1249|    101|{
 1250|       |#ifdef MS_WINDOWS
 1251|       |    FILE_STANDARD_INFO standardInfo = {0};
 1252|       |    FILE_BASIC_INFO basicInfo = {0};
 1253|       |    FILE_ID_INFO idInfo = {0};
 1254|       |    FILE_ID_INFO *pIdInfo = &idInfo;
 1255|       |    HANDLE h;
 1256|       |    int type;
 1257|       |
 1258|       |    h = _Py_get_osfhandle_noraise(fd);
 1259|       |
 1260|       |    if (h == INVALID_HANDLE_VALUE) {
 1261|       |        /* errno is already set by _get_osfhandle, but we also set
 1262|       |           the Win32 error for callers who expect that */
 1263|       |        SetLastError(ERROR_INVALID_HANDLE);
 1264|       |        return -1;
 1265|       |    }
 1266|       |    memset(status, 0, sizeof(*status));
 1267|       |
 1268|       |    type = GetFileType(h);
 1269|       |    if (type == FILE_TYPE_UNKNOWN) {
 1270|       |        DWORD error = GetLastError();
 1271|       |        if (error != 0) {
 1272|       |            errno = winerror_to_errno(error);
 1273|       |            return -1;
 1274|       |        }
 1275|       |        /* else: valid but unknown file */
 1276|       |    }
 1277|       |
 1278|       |    if (type != FILE_TYPE_DISK) {
 1279|       |        if (type == FILE_TYPE_CHAR)
 1280|       |            status->st_mode = _S_IFCHR;
 1281|       |        else if (type == FILE_TYPE_PIPE)
 1282|       |            status->st_mode = _S_IFIFO;
 1283|       |        return 0;
 1284|       |    }
 1285|       |
 1286|       |    if (!GetFileInformationByHandleEx(h,FileStandardInfo, &standardInfo, sizeof(standardInfo)) ||
 1287|       |        !GetFileInformationByHandleEx(h, FileBasicInfo, &basicInfo, sizeof(basicInfo))) {
 1288|       |        /* The Win32 error is already set, but we also set errno for
 1289|       |           callers who expect it */
 1290|       |        errno = winerror_to_errno(GetLastError());
 1291|       |        return -1;
 1292|       |    }
 1293|       |
 1294|       |    if (!GetFileInformationByHandleEx(h, FileIdInfo, &idInfo, sizeof(idInfo))) {
 1295|       |        /* Failed to get FileIdInfo, so do not pass it along */
 1296|       |        pIdInfo = NULL;
 1297|       |    }
 1298|       |
 1299|       |    _Py_attribute_data_to_stat(&standardInfo, 0, &basicInfo, pIdInfo, status);
 1300|       |    return 0;
 1301|       |#else
 1302|    101|    return fstat(fd, status);
 1303|    101|#endif
 1304|    101|}
_Py_wstat:
 1346|      8|{
 1347|      8|    int err;
 1348|       |#ifdef MS_WINDOWS
 1349|       |    struct _stat wstatbuf;
 1350|       |    err = _wstat(path, &wstatbuf);
 1351|       |    if (!err) {
 1352|       |        buf->st_mode = wstatbuf.st_mode;
 1353|       |    }
 1354|       |#else
 1355|      8|    char *fname;
 1356|      8|    fname = _Py_EncodeLocaleRaw(path, NULL);
 1357|      8|    if (fname == NULL) {
  ------------------
  |  Branch (1357:9): [True: 0, False: 8]
  ------------------
 1358|      0|        errno = EINVAL;
 1359|      0|        return -1;
 1360|      0|    }
 1361|      8|    err = stat(fname, buf);
 1362|      8|    PyMem_RawFree(fname);
 1363|      8|#endif
 1364|      8|    return err;
 1365|      8|}
_Py_stat:
 1376|     10|{
 1377|       |#ifdef MS_WINDOWS
 1378|       |    int err;
 1379|       |
 1380|       |    wchar_t *wpath = PyUnicode_AsWideCharString(path, NULL);
 1381|       |    if (wpath == NULL)
 1382|       |        return -2;
 1383|       |
 1384|       |    err = _Py_wstat(wpath, statbuf);
 1385|       |    PyMem_Free(wpath);
 1386|       |    return err;
 1387|       |#else
 1388|     10|    PyObject *bytes = PyUnicode_EncodeFSDefault(path);
 1389|     10|    if (bytes == NULL) {
  ------------------
  |  Branch (1389:9): [True: 0, False: 10]
  ------------------
 1390|      0|        return -2;
 1391|      0|    }
 1392|       |
 1393|       |    /* check for embedded null bytes */
 1394|     10|    char *cpath;
 1395|     10|    if (PyBytes_AsStringAndSize(bytes, &cpath, NULL) == -1) {
  ------------------
  |  Branch (1395:9): [True: 0, False: 10]
  ------------------
 1396|      0|        Py_DECREF(bytes);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1397|      0|        return -2;
 1398|      0|    }
 1399|       |
 1400|     10|    int ret = stat(cpath, statbuf);
 1401|     10|    Py_DECREF(bytes);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1402|     10|    assert(ret == 0 || ret == -1);
  ------------------
  |  Branch (1402:5): [True: 2, False: 8]
  |  Branch (1402:5): [True: 8, False: 0]
  ------------------
 1403|     10|    return ret;
 1404|     10|#endif
 1405|     10|}
_Py_set_inheritable:
 1617|     93|{
 1618|     93|    return set_inheritable(fd, inheritable, 1, atomic_flag_works);
 1619|     93|}
Py_fopen:
 1779|  5.50k|{
 1780|  5.50k|    _Py_AssertHoldsTstate();
  ------------------
  |  |  324|  5.50k|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
 1781|       |
 1782|  5.50k|    if (PySys_Audit("open", "Osi", path, mode, 0) < 0) {
  ------------------
  |  Branch (1782:9): [True: 0, False: 5.50k]
  ------------------
 1783|      0|        return NULL;
 1784|      0|    }
 1785|       |
 1786|  5.50k|    FILE *f;
 1787|  5.50k|    int async_err = 0;
 1788|  5.50k|    int saved_errno;
 1789|       |#ifdef MS_WINDOWS
 1790|       |    PyObject *unicode;
 1791|       |    if (!PyUnicode_FSDecoder(path, &unicode)) {
 1792|       |        return NULL;
 1793|       |    }
 1794|       |
 1795|       |    wchar_t *wpath = PyUnicode_AsWideCharString(unicode, NULL);
 1796|       |    Py_DECREF(unicode);
 1797|       |    if (wpath == NULL) {
 1798|       |        return NULL;
 1799|       |    }
 1800|       |
 1801|       |    wchar_t wmode[10];
 1802|       |    int usize = MultiByteToWideChar(CP_ACP, 0, mode, -1,
 1803|       |                                    wmode, Py_ARRAY_LENGTH(wmode));
 1804|       |    if (usize == 0) {
 1805|       |        PyErr_SetFromWindowsErr(0);
 1806|       |        PyMem_Free(wpath);
 1807|       |        return NULL;
 1808|       |    }
 1809|       |
 1810|       |    do {
 1811|       |        Py_BEGIN_ALLOW_THREADS
 1812|       |        _Py_BEGIN_SUPPRESS_IPH
 1813|       |        f = _wfopen(wpath, wmode);
 1814|       |        _Py_END_SUPPRESS_IPH
 1815|       |        Py_END_ALLOW_THREADS
 1816|       |    } while (f == NULL
 1817|       |             && errno == EINTR && !(async_err = PyErr_CheckSignals()));
 1818|       |    saved_errno = errno;
 1819|       |    PyMem_Free(wpath);
 1820|       |#else
 1821|  5.50k|    PyObject *bytes;
 1822|  5.50k|    if (!PyUnicode_FSConverter(path, &bytes)) {
  ------------------
  |  Branch (1822:9): [True: 0, False: 5.50k]
  ------------------
 1823|      0|        return NULL;
 1824|      0|    }
 1825|  5.50k|    const char *path_bytes = PyBytes_AS_STRING(bytes);
  ------------------
  |  |   27|  5.50k|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1826|       |
 1827|  5.50k|    do {
 1828|  5.50k|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|  5.50k|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|  5.50k|                        PyThreadState *_save; \
  |  |  119|  5.50k|                        _save = PyEval_SaveThread();
  ------------------
 1829|  5.50k|        f = fopen(path_bytes, mode);
 1830|  5.50k|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|  5.50k|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|  5.50k|                 }
  ------------------
 1831|  5.50k|    } while (f == NULL
  ------------------
  |  Branch (1831:14): [True: 5.50k, False: 0]
  ------------------
 1832|  5.50k|             && errno == EINTR && !(async_err = PyErr_CheckSignals()));
  ------------------
  |  Branch (1832:17): [True: 0, False: 5.50k]
  |  Branch (1832:35): [True: 0, False: 0]
  ------------------
 1833|  5.50k|    saved_errno = errno;
 1834|  5.50k|    Py_DECREF(bytes);
  ------------------
  |  |  430|  5.50k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1835|  5.50k|#endif
 1836|       |
 1837|  5.50k|    if (async_err) {
  ------------------
  |  Branch (1837:9): [True: 0, False: 5.50k]
  ------------------
 1838|      0|        return NULL;
 1839|      0|    }
 1840|       |
 1841|  5.50k|    if (f == NULL) {
  ------------------
  |  Branch (1841:9): [True: 5.50k, False: 0]
  ------------------
 1842|  5.50k|        errno = saved_errno;
 1843|  5.50k|        PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path);
 1844|  5.50k|        return NULL;
 1845|  5.50k|    }
 1846|       |
 1847|      0|    if (set_inheritable(fileno(f), 0, 1, NULL) < 0) {
  ------------------
  |  Branch (1847:9): [True: 0, False: 0]
  ------------------
 1848|      0|        fclose(f);
 1849|      0|        return NULL;
 1850|      0|    }
 1851|      0|    return f;
 1852|      0|}
_Py_read:
 1882|    186|{
 1883|    186|    Py_ssize_t n;
 1884|    186|    int err;
 1885|    186|    int async_err = 0;
 1886|       |
 1887|    186|    _Py_AssertHoldsTstate();
  ------------------
  |  |  324|    186|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
 1888|       |
 1889|       |    /* _Py_read() must not be called with an exception set, otherwise the
 1890|       |     * caller may think that read() was interrupted by a signal and the signal
 1891|       |     * handler raised an exception. */
 1892|    186|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (1892:5): [True: 186, False: 0]
  ------------------
 1893|       |
 1894|    186|    if (count > _PY_READ_MAX) {
  ------------------
  |  |   59|    186|#   define _PY_READ_MAX  PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|    186|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  |  Branch (1894:9): [True: 0, False: 186]
  ------------------
 1895|      0|        count = _PY_READ_MAX;
  ------------------
  |  |   59|      0|#   define _PY_READ_MAX  PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
 1896|      0|    }
 1897|       |
 1898|    186|    _Py_BEGIN_SUPPRESS_IPH
 1899|    186|    do {
 1900|    186|        Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|    186|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|    186|                        PyThreadState *_save; \
  |  |  119|    186|                        _save = PyEval_SaveThread();
  ------------------
 1901|    186|        errno = 0;
 1902|       |#ifdef MS_WINDOWS
 1903|       |        _doserrno = 0;
 1904|       |        n = read(fd, buf, (int)count);
 1905|       |        // read() on a non-blocking empty pipe fails with EINVAL, which is
 1906|       |        // mapped from the Windows error code ERROR_NO_DATA.
 1907|       |        if (n < 0 && errno == EINVAL) {
 1908|       |            if (_doserrno == ERROR_NO_DATA) {
 1909|       |                errno = EAGAIN;
 1910|       |            }
 1911|       |        }
 1912|       |#else
 1913|    186|        n = read(fd, buf, count);
 1914|    186|#endif
 1915|       |        /* save/restore errno because PyErr_CheckSignals()
 1916|       |         * and PyErr_SetFromErrno() can modify it */
 1917|    186|        err = errno;
 1918|    186|        Py_END_ALLOW_THREADS
  ------------------
  |  |  122|    186|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|    186|                 }
  ------------------
 1919|    186|    } while (n < 0 && err == EINTR &&
  ------------------
  |  Branch (1919:14): [True: 0, False: 186]
  |  Branch (1919:23): [True: 0, False: 0]
  ------------------
 1920|      0|            !(async_err = PyErr_CheckSignals()));
  ------------------
  |  Branch (1920:13): [True: 0, False: 0]
  ------------------
 1921|    186|    _Py_END_SUPPRESS_IPH
 1922|       |
 1923|    186|    if (async_err) {
  ------------------
  |  Branch (1923:9): [True: 0, False: 186]
  ------------------
 1924|       |        /* read() was interrupted by a signal (failed with EINTR)
 1925|       |         * and the Python signal handler raised an exception */
 1926|      0|        errno = err;
 1927|      0|        assert(errno == EINTR && PyErr_Occurred());
  ------------------
  |  Branch (1927:9): [True: 0, False: 0]
  |  Branch (1927:9): [True: 0, False: 0]
  ------------------
 1928|      0|        return -1;
 1929|      0|    }
 1930|    186|    if (n < 0) {
  ------------------
  |  Branch (1930:9): [True: 0, False: 186]
  ------------------
 1931|      0|        PyErr_SetFromErrno(PyExc_OSError);
 1932|      0|        errno = err;
 1933|      0|        return -1;
 1934|      0|    }
 1935|       |
 1936|    186|    return n;
 1937|    186|}
_Py_write:
 2052|  48.4k|{
 2053|  48.4k|    _Py_AssertHoldsTstate();
  ------------------
  |  |  324|  48.4k|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
 2054|       |
 2055|       |    /* _Py_write() must not be called with an exception set, otherwise the
 2056|       |     * caller may think that write() was interrupted by a signal and the signal
 2057|       |     * handler raised an exception. */
 2058|  48.4k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (2058:5): [True: 48.4k, False: 0]
  ------------------
 2059|       |
 2060|  48.4k|    return _Py_write_impl(fd, buf, count, 1);
 2061|  48.4k|}
_Py_wreadlink:
 2085|      2|{
 2086|      2|    char *cpath;
 2087|      2|    char cbuf[MAXPATHLEN];
 2088|      2|    size_t cbuf_len = Py_ARRAY_LENGTH(cbuf);
  ------------------
  |  |  221|      2|    (sizeof(array) / sizeof((array)[0]))
  ------------------
 2089|      2|    wchar_t *wbuf;
 2090|      2|    Py_ssize_t res;
 2091|      2|    size_t r1;
 2092|       |
 2093|      2|    cpath = _Py_EncodeLocaleRaw(path, NULL);
 2094|      2|    if (cpath == NULL) {
  ------------------
  |  Branch (2094:9): [True: 0, False: 2]
  ------------------
 2095|      0|        errno = EINVAL;
 2096|      0|        return -1;
 2097|      0|    }
 2098|      2|    res = readlink(cpath, cbuf, cbuf_len);
 2099|      2|    PyMem_RawFree(cpath);
 2100|      2|    if (res == -1) {
  ------------------
  |  Branch (2100:9): [True: 2, False: 0]
  ------------------
 2101|      2|        return -1;
 2102|      2|    }
 2103|      0|    if ((size_t)res == cbuf_len) {
  ------------------
  |  Branch (2103:9): [True: 0, False: 0]
  ------------------
 2104|      0|        errno = EINVAL;
 2105|      0|        return -1;
 2106|      0|    }
 2107|      0|    cbuf[res] = '\0'; /* buf will be null terminated */
 2108|      0|    wbuf = Py_DecodeLocale(cbuf, &r1);
 2109|      0|    if (wbuf == NULL) {
  ------------------
  |  Branch (2109:9): [True: 0, False: 0]
  ------------------
 2110|      0|        errno = EINVAL;
 2111|      0|        return -1;
 2112|      0|    }
 2113|       |    /* wbuf must have space to store the trailing NUL character */
 2114|      0|    if (buflen <= r1) {
  ------------------
  |  Branch (2114:9): [True: 0, False: 0]
  ------------------
 2115|      0|        PyMem_RawFree(wbuf);
 2116|      0|        errno = EINVAL;
 2117|      0|        return -1;
 2118|      0|    }
 2119|      0|    wcsncpy(buf, wbuf, buflen);
 2120|      0|    PyMem_RawFree(wbuf);
 2121|      0|    return (int)r1;
 2122|      0|}
_Py_isabs:
 2172|     74|{
 2173|       |#ifdef MS_WINDOWS
 2174|       |    const wchar_t *tail;
 2175|       |    HRESULT hr = PathCchSkipRoot(path, &tail);
 2176|       |    if (FAILED(hr) || path == tail) {
 2177|       |        return 0;
 2178|       |    }
 2179|       |    if (tail == &path[1] && (path[0] == SEP || path[0] == ALTSEP)) {
 2180|       |        // Exclude paths with leading SEP
 2181|       |        return 0;
 2182|       |    }
 2183|       |    if (tail == &path[2] && path[1] == L':') {
 2184|       |        // Exclude drive-relative paths (e.g. C:filename.ext)
 2185|       |        return 0;
 2186|       |    }
 2187|       |    return 1;
 2188|       |#else
 2189|     74|    return (path[0] == SEP);
  ------------------
  |  |   29|     74|#  define SEP L'/'
  ------------------
 2190|     74|#endif
 2191|     74|}
_Py_abspath:
 2201|      2|{
 2202|      2|    if (path[0] == '\0' || !wcscmp(path, L".")) {
  ------------------
  |  Branch (2202:9): [True: 0, False: 2]
  |  Branch (2202:28): [True: 0, False: 2]
  ------------------
 2203|      0|        wchar_t cwd[MAXPATHLEN + 1];
 2204|      0|        cwd[Py_ARRAY_LENGTH(cwd) - 1] = 0;
  ------------------
  |  |  221|      0|    (sizeof(array) / sizeof((array)[0]))
  ------------------
 2205|      0|        if (!_Py_wgetcwd(cwd, Py_ARRAY_LENGTH(cwd) - 1)) {
  ------------------
  |  |  221|      0|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (2205:13): [True: 0, False: 0]
  ------------------
 2206|       |            /* unable to get the current directory */
 2207|      0|            return -1;
 2208|      0|        }
 2209|      0|        *abspath_p = _PyMem_RawWcsdup(cwd);
 2210|      0|        return 0;
 2211|      0|    }
 2212|       |
 2213|      2|    if (_Py_isabs(path)) {
  ------------------
  |  Branch (2213:9): [True: 2, False: 0]
  ------------------
 2214|      2|        *abspath_p = _PyMem_RawWcsdup(path);
 2215|      2|        return 0;
 2216|      2|    }
 2217|       |
 2218|       |#ifdef MS_WINDOWS
 2219|       |    return _PyOS_getfullpathname(path, abspath_p);
 2220|       |#else
 2221|      0|    wchar_t cwd[MAXPATHLEN + 1];
 2222|      0|    cwd[Py_ARRAY_LENGTH(cwd) - 1] = 0;
  ------------------
  |  |  221|      0|    (sizeof(array) / sizeof((array)[0]))
  ------------------
 2223|      0|    if (!_Py_wgetcwd(cwd, Py_ARRAY_LENGTH(cwd) - 1)) {
  ------------------
  |  |  221|      0|    (sizeof(array) / sizeof((array)[0]))
  ------------------
  |  Branch (2223:9): [True: 0, False: 0]
  ------------------
 2224|       |        /* unable to get the current directory */
 2225|      0|        return -1;
 2226|      0|    }
 2227|       |
 2228|      0|    size_t cwd_len = wcslen(cwd);
 2229|      0|    size_t path_len = wcslen(path);
 2230|      0|    size_t len = cwd_len + 1 + path_len + 1;
 2231|      0|    if (len <= (size_t)PY_SSIZE_T_MAX / sizeof(wchar_t)) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2231:9): [True: 0, False: 0]
  ------------------
 2232|      0|        *abspath_p = PyMem_RawMalloc(len * sizeof(wchar_t));
 2233|      0|    }
 2234|      0|    else {
 2235|      0|        *abspath_p = NULL;
 2236|      0|    }
 2237|      0|    if (*abspath_p == NULL) {
  ------------------
  |  Branch (2237:9): [True: 0, False: 0]
  ------------------
 2238|      0|        return 0;
 2239|      0|    }
 2240|       |
 2241|      0|    wchar_t *abspath = *abspath_p;
 2242|      0|    memcpy(abspath, cwd, cwd_len * sizeof(wchar_t));
 2243|      0|    abspath += cwd_len;
 2244|       |
 2245|      0|    *abspath = (wchar_t)SEP;
  ------------------
  |  |   29|      0|#  define SEP L'/'
  ------------------
 2246|      0|    abspath++;
 2247|       |
 2248|      0|    memcpy(abspath, path, path_len * sizeof(wchar_t));
 2249|      0|    abspath += path_len;
 2250|       |
 2251|      0|    *abspath = 0;
 2252|      0|    return 0;
 2253|      0|#endif
 2254|      0|}
_Py_skiproot:
 2326|     36|{
 2327|     36|    assert(drvsize);
  ------------------
  |  Branch (2327:5): [True: 36, False: 0]
  ------------------
 2328|     36|    assert(rootsize);
  ------------------
  |  Branch (2328:5): [True: 36, False: 0]
  ------------------
 2329|     36|#ifndef MS_WINDOWS
 2330|     36|#define IS_SEP(x) (*(x) == SEP)
 2331|     36|    *drvsize = 0;
 2332|     36|    if (!IS_SEP(&path[0])) {
  ------------------
  |  | 2330|     36|#define IS_SEP(x) (*(x) == SEP)
  |  |  ------------------
  |  |  |  |   29|     36|#  define SEP L'/'
  |  |  ------------------
  ------------------
  |  Branch (2332:9): [True: 0, False: 36]
  ------------------
 2333|       |        // Relative path, e.g.: 'foo'
 2334|      0|        *rootsize = 0;
 2335|      0|    }
 2336|     36|    else if (!IS_SEP(&path[1]) || IS_SEP(&path[2])) {
  ------------------
  |  | 2330|     72|#define IS_SEP(x) (*(x) == SEP)
  |  |  ------------------
  |  |  |  |   29|     36|#  define SEP L'/'
  |  |  ------------------
  ------------------
                  else if (!IS_SEP(&path[1]) || IS_SEP(&path[2])) {
  ------------------
  |  | 2330|      0|#define IS_SEP(x) (*(x) == SEP)
  |  |  ------------------
  |  |  |  |   29|      0|#  define SEP L'/'
  |  |  ------------------
  |  |  |  Branch (2330:19): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2336:14): [True: 36, False: 0]
  ------------------
 2337|       |        // Absolute path, e.g.: '/foo', '///foo', '////foo', etc.
 2338|     36|        *rootsize = 1;
 2339|     36|    }
 2340|      0|    else {
 2341|       |        // Precisely two leading slashes, e.g.: '//foo'. Implementation defined per POSIX, see
 2342|       |        // https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13
 2343|      0|        *rootsize = 2;
 2344|      0|    }
 2345|     36|#undef IS_SEP
 2346|       |#else
 2347|       |    const wchar_t *pEnd = size >= 0 ? &path[size] : NULL;
 2348|       |#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
 2349|       |#define IS_SEP(x) (*(x) == SEP || *(x) == ALTSEP)
 2350|       |#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
 2351|       |    if (IS_SEP(&path[0])) {
 2352|       |        if (IS_SEP(&path[1])) {
 2353|       |            // Device drives, e.g. \\.\device or \\?\device
 2354|       |            // UNC drives, e.g. \\server\share or \\?\UNC\server\share
 2355|       |            Py_ssize_t idx;
 2356|       |            if (path[2] == L'?' && IS_SEP(&path[3]) &&
 2357|       |                (path[4] == L'U' || path[4] == L'u') &&
 2358|       |                (path[5] == L'N' || path[5] == L'n') &&
 2359|       |                (path[6] == L'C' || path[6] == L'c') &&
 2360|       |                IS_SEP(&path[7]))
 2361|       |            {
 2362|       |                idx = 8;
 2363|       |            }
 2364|       |            else {
 2365|       |                idx = 2;
 2366|       |            }
 2367|       |            while (!SEP_OR_END(&path[idx])) {
 2368|       |                idx++;
 2369|       |            }
 2370|       |            if (IS_END(&path[idx])) {
 2371|       |                *drvsize = idx;
 2372|       |                *rootsize = 0;
 2373|       |            }
 2374|       |            else {
 2375|       |                idx++;
 2376|       |                while (!SEP_OR_END(&path[idx])) {
 2377|       |                    idx++;
 2378|       |                }
 2379|       |                *drvsize = idx;
 2380|       |                if (IS_END(&path[idx])) {
 2381|       |                    *rootsize = 0;
 2382|       |                }
 2383|       |                else {
 2384|       |                    *rootsize = 1;
 2385|       |                }
 2386|       |            }
 2387|       |        }
 2388|       |        else {
 2389|       |            // Relative path with root, e.g. \Windows
 2390|       |            *drvsize = 0;
 2391|       |            *rootsize = 1;
 2392|       |        }
 2393|       |    }
 2394|       |    else if (!IS_END(&path[0]) && path[1] == L':') {
 2395|       |        *drvsize = 2;
 2396|       |        if (IS_SEP(&path[2])) {
 2397|       |            // Absolute drive-letter path, e.g. X:\Windows
 2398|       |            *rootsize = 1;
 2399|       |        }
 2400|       |        else {
 2401|       |            // Relative path with drive, e.g. X:Windows
 2402|       |            *rootsize = 0;
 2403|       |        }
 2404|       |    }
 2405|       |    else {
 2406|       |        // Relative path, e.g. Windows
 2407|       |        *drvsize = 0;
 2408|       |        *rootsize = 0;
 2409|       |    }
 2410|       |#undef SEP_OR_END
 2411|       |#undef IS_SEP
 2412|       |#undef IS_END
 2413|       |#endif
 2414|     36|}
_Py_add_relfile:
 2486|     24|{
 2487|     24|    assert(dirname != NULL && relfile != NULL);
  ------------------
  |  Branch (2487:5): [True: 24, False: 0]
  |  Branch (2487:5): [True: 24, False: 0]
  ------------------
 2488|     24|    assert(bufsize > 0);
  ------------------
  |  Branch (2488:5): [True: 24, False: 0]
  ------------------
 2489|     24|    return join_relfile(dirname, bufsize, dirname, relfile);
 2490|     24|}
_Py_normpath_and_size:
 2512|     36|{
 2513|     36|    assert(path != NULL);
  ------------------
  |  Branch (2513:5): [True: 36, False: 0]
  ------------------
 2514|     36|    if ((size < 0 && !path[0]) || size == 0) {
  ------------------
  |  Branch (2514:10): [True: 26, False: 10]
  |  Branch (2514:22): [True: 0, False: 26]
  |  Branch (2514:35): [True: 0, False: 36]
  ------------------
 2515|      0|        *normsize = 0;
 2516|      0|        return path;
 2517|      0|    }
 2518|     36|    wchar_t *pEnd = size >= 0 ? &path[size] : NULL;
  ------------------
  |  Branch (2518:21): [True: 10, False: 26]
  ------------------
 2519|     36|    wchar_t *p1 = path;     // sequentially scanned address in the path
 2520|     36|    wchar_t *p2 = path;     // destination of a scanned character to be ljusted
 2521|     36|    wchar_t *minP2 = path;  // the beginning of the destination range
 2522|     36|    wchar_t lastC = L'\0';  // the last ljusted character, p2[-1] in most cases
 2523|       |
 2524|     36|#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
 2525|       |#ifdef ALTSEP
 2526|       |#define IS_SEP(x) (*(x) == SEP || *(x) == ALTSEP)
 2527|       |#else
 2528|     36|#define IS_SEP(x) (*(x) == SEP)
 2529|     36|#endif
 2530|     36|#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
 2531|       |
 2532|     36|    Py_ssize_t drvsize, rootsize;
 2533|     36|    _Py_skiproot(path, size, &drvsize, &rootsize);
 2534|     36|    if (drvsize || rootsize) {
  ------------------
  |  Branch (2534:9): [True: 0, False: 36]
  |  Branch (2534:20): [True: 36, False: 0]
  ------------------
 2535|       |        // Skip past root and update minP2
 2536|     36|        p1 = &path[drvsize + rootsize];
 2537|     36|#ifndef ALTSEP
 2538|     36|        p2 = p1;
 2539|       |#else
 2540|       |        for (; p2 < p1; ++p2) {
 2541|       |            if (*p2 == ALTSEP) {
 2542|       |                *p2 = SEP;
 2543|       |            }
 2544|       |        }
 2545|       |#endif
 2546|     36|        minP2 = p2 - 1;
 2547|     36|        lastC = *minP2;
 2548|       |#ifdef MS_WINDOWS
 2549|       |        if (lastC != SEP) {
 2550|       |            minP2++;
 2551|       |        }
 2552|       |#endif
 2553|     36|    }
 2554|     36|    if (p1[0] == L'.' && SEP_OR_END(&p1[1])) {
  ------------------
  |  | 2530|      0|#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
  |  |  ------------------
  |  |  |  | 2528|      0|#define IS_SEP(x) (*(x) == SEP)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#  define SEP L'/'
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2528:19): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
  |  |  ------------------
  |  |  |  | 2524|      0|#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2524:19): [True: 0, False: 0]
  |  |  |  |  |  Branch (2524:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2554:9): [True: 0, False: 36]
  ------------------
 2555|       |        // Skip leading '.\'
 2556|      0|        lastC = *++p1;
 2557|       |#ifdef ALTSEP
 2558|       |        if (lastC == ALTSEP) {
 2559|       |            lastC = SEP;
 2560|       |        }
 2561|       |#endif
 2562|      0|        while (IS_SEP(p1)) {
  ------------------
  |  | 2528|      0|#define IS_SEP(x) (*(x) == SEP)
  |  |  ------------------
  |  |  |  |   29|      0|#  define SEP L'/'
  |  |  ------------------
  |  |  |  Branch (2528:19): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2563|      0|            p1++;
 2564|      0|        }
 2565|      0|    }
 2566|       |
 2567|       |    /* if pEnd is specified, check that. Else, check for null terminator */
 2568|  1.96k|    for (; !IS_END(p1); ++p1) {
  ------------------
  |  | 2524|  1.96k|#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
  |  |  ------------------
  |  |  |  Branch (2524:20): [True: 608, False: 1.35k]
  |  |  ------------------
  ------------------
  |  Branch (2568:12): [True: 1.93k, False: 36]
  ------------------
 2569|  1.93k|        wchar_t c = *p1;
 2570|       |#ifdef ALTSEP
 2571|       |        if (c == ALTSEP) {
 2572|       |            c = SEP;
 2573|       |        }
 2574|       |#endif
 2575|  1.93k|        if (lastC == SEP) {
  ------------------
  |  |   29|  1.93k|#  define SEP L'/'
  ------------------
  |  Branch (2575:13): [True: 174, False: 1.75k]
  ------------------
 2576|    174|            if (c == L'.') {
  ------------------
  |  Branch (2576:17): [True: 0, False: 174]
  ------------------
 2577|      0|                int sep_at_1 = SEP_OR_END(&p1[1]);
  ------------------
  |  | 2530|      0|#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
  |  |  ------------------
  |  |  |  | 2528|      0|#define IS_SEP(x) (*(x) == SEP)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#  define SEP L'/'
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2528:19): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
  |  |  ------------------
  |  |  |  | 2524|      0|#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2524:19): [True: 0, False: 0]
  |  |  |  |  |  Branch (2524:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2578|      0|                int sep_at_2 = !sep_at_1 && SEP_OR_END(&p1[2]);
  ------------------
  |  | 2530|      0|#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
  |  |  ------------------
  |  |  |  | 2528|      0|#define IS_SEP(x) (*(x) == SEP)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#  define SEP L'/'
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2528:19): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
  |  |  ------------------
  |  |  |  | 2524|      0|#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (2524:19): [True: 0, False: 0]
  |  |  |  |  |  Branch (2524:20): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2578:32): [True: 0, False: 0]
  ------------------
 2579|      0|                if (sep_at_2 && p1[1] == L'.') {
  ------------------
  |  Branch (2579:21): [True: 0, False: 0]
  |  Branch (2579:33): [True: 0, False: 0]
  ------------------
 2580|      0|                    wchar_t *p3 = p2;
 2581|      0|                    while (p3 != minP2 && *--p3 == SEP) { }
  ------------------
  |  |   29|      0|#  define SEP L'/'
  ------------------
  |  Branch (2581:28): [True: 0, False: 0]
  |  Branch (2581:43): [True: 0, False: 0]
  ------------------
 2582|      0|                    while (p3 != minP2 && *(p3 - 1) != SEP) { --p3; }
  ------------------
  |  |   29|      0|#  define SEP L'/'
  ------------------
  |  Branch (2582:28): [True: 0, False: 0]
  |  Branch (2582:43): [True: 0, False: 0]
  ------------------
 2583|      0|                    if (p2 == minP2
  ------------------
  |  Branch (2583:25): [True: 0, False: 0]
  ------------------
 2584|      0|                        || (p3[0] == L'.' && p3[1] == L'.' && IS_SEP(&p3[2])))
  ------------------
  |  | 2528|      0|#define IS_SEP(x) (*(x) == SEP)
  |  |  ------------------
  |  |  |  |   29|      0|#  define SEP L'/'
  |  |  ------------------
  |  |  |  Branch (2528:19): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2584:29): [True: 0, False: 0]
  |  Branch (2584:46): [True: 0, False: 0]
  ------------------
 2585|      0|                    {
 2586|       |                        // Previous segment is also ../, so append instead.
 2587|       |                        // Relative path does not absorb ../ at minP2 as well.
 2588|      0|                        *p2++ = L'.';
 2589|      0|                        *p2++ = L'.';
 2590|      0|                        lastC = L'.';
 2591|      0|                    } else if (p3[0] == SEP) {
  ------------------
  |  |   29|      0|#  define SEP L'/'
  ------------------
  |  Branch (2591:32): [True: 0, False: 0]
  ------------------
 2592|       |                        // Absolute path, so absorb segment
 2593|      0|                        p2 = p3 + 1;
 2594|      0|                    } else {
 2595|      0|                        p2 = p3;
 2596|      0|                    }
 2597|      0|                    p1 += 1;
 2598|      0|                } else if (sep_at_1) {
  ------------------
  |  Branch (2598:28): [True: 0, False: 0]
  ------------------
 2599|      0|                } else {
 2600|      0|                    *p2++ = lastC = c;
 2601|      0|                }
 2602|    174|            } else if (c == SEP) {
  ------------------
  |  |   29|    174|#  define SEP L'/'
  ------------------
  |  Branch (2602:24): [True: 0, False: 174]
  ------------------
 2603|    174|            } else {
 2604|    174|                *p2++ = lastC = c;
 2605|    174|            }
 2606|  1.75k|        } else {
 2607|  1.75k|            *p2++ = lastC = c;
 2608|  1.75k|        }
 2609|  1.93k|    }
 2610|     36|    *p2 = L'\0';
 2611|     36|    if (p2 != minP2) {
  ------------------
  |  Branch (2611:9): [True: 36, False: 0]
  ------------------
 2612|     36|        while (--p2 != minP2 && *p2 == SEP) {
  ------------------
  |  |   29|     36|#  define SEP L'/'
  ------------------
  |  Branch (2612:16): [True: 36, False: 0]
  |  Branch (2612:33): [True: 0, False: 36]
  ------------------
 2613|      0|            *p2 = L'\0';
 2614|      0|        }
 2615|     36|    } else {
 2616|      0|        --p2;
 2617|      0|    }
 2618|     36|    *normsize = p2 - path + 1;
 2619|     36|#undef SEP_OR_END
 2620|     36|#undef IS_SEP
 2621|     36|#undef IS_END
 2622|     36|    return path;
 2623|     36|}
_Py_normpath:
 2632|     26|{
 2633|     26|    Py_ssize_t norm_length;
 2634|     26|    return _Py_normpath_and_size(path, size, &norm_length);
 2635|     26|}
_Py_GetTicksPerSecond:
 3099|      4|{
 3100|      4|#if defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)
 3101|      4|    long value = sysconf(_SC_CLK_TCK);
 3102|      4|    if (value < 1) {
  ------------------
  |  Branch (3102:9): [True: 0, False: 4]
  ------------------
 3103|      0|        return -1;
 3104|      0|    }
 3105|      4|    *ticks_per_second = value;
 3106|       |#elif defined(HZ)
 3107|       |    assert(HZ >= 1);
 3108|       |    *ticks_per_second = HZ;
 3109|       |#else
 3110|       |    // Magic fallback value; may be bogus
 3111|       |    *ticks_per_second = 60;
 3112|       |#endif
 3113|      4|    return 0;
 3114|      4|}
_Py_IsValidFD:
 3122|      6|{
 3123|       |/* dup() is faster than fstat(): fstat() can require input/output operations,
 3124|       |   whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
 3125|       |   startup. Problem: dup() doesn't check if the file descriptor is valid on
 3126|       |   some platforms.
 3127|       |
 3128|       |   fcntl(fd, F_GETFD) is even faster, because it only checks the process table.
 3129|       |   It is preferred over dup() when available, since it cannot fail with the
 3130|       |   "too many open files" error (EMFILE).
 3131|       |
 3132|       |   bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
 3133|       |   side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
 3134|       |   EBADF. FreeBSD has similar issue (bpo-32849).
 3135|       |
 3136|       |   Only use dup() on Linux where dup() is enough to detect invalid FD
 3137|       |   (bpo-32849).
 3138|       |*/
 3139|      6|    if (fd < 0) {
  ------------------
  |  Branch (3139:9): [True: 0, False: 6]
  ------------------
 3140|      0|        return 0;
 3141|      0|    }
 3142|      6|#if defined(F_GETFD) && ( \
 3143|      6|        defined(__linux__) || \
 3144|      6|        defined(__APPLE__) || \
 3145|      6|        (defined(__wasm__) && !defined(__wasi__)))
 3146|      6|    return fcntl(fd, F_GETFD) >= 0;
 3147|       |#elif defined(__linux__)
 3148|       |    int fd2 = dup(fd);
 3149|       |    if (fd2 >= 0) {
 3150|       |        close(fd2);
 3151|       |    }
 3152|       |    return (fd2 >= 0);
 3153|       |#elif defined(MS_WINDOWS)
 3154|       |    HANDLE hfile;
 3155|       |    _Py_BEGIN_SUPPRESS_IPH
 3156|       |    hfile = (HANDLE)_get_osfhandle(fd);
 3157|       |    _Py_END_SUPPRESS_IPH
 3158|       |    return (hfile != INVALID_HANDLE_VALUE
 3159|       |            && GetFileType(hfile) != FILE_TYPE_UNKNOWN);
 3160|       |#else
 3161|       |    struct stat st;
 3162|       |    return (fstat(fd, &st) == 0);
 3163|       |#endif
 3164|      6|}
fileutils.c:_Py_mbstowcs:
  173|  13.9k|{
  174|  13.9k|    size_t count = mbstowcs(dest, src, n);
  175|  13.9k|    if (dest != NULL && count != DECODE_ERROR) {
  ------------------
  |  Branch (175:9): [True: 6.97k, False: 6.97k]
  |  Branch (175:25): [True: 6.97k, False: 0]
  ------------------
  176|   187k|        for (size_t i=0; i < count; i++) {
  ------------------
  |  Branch (176:26): [True: 180k, False: 6.97k]
  ------------------
  177|   180k|            wchar_t ch = dest[i];
  178|   180k|            if (!is_valid_wide_char(ch)) {
  ------------------
  |  Branch (178:17): [True: 0, False: 180k]
  ------------------
  179|      0|                return DECODE_ERROR;
  180|      0|            }
  181|   180k|        }
  182|  6.97k|    }
  183|  13.9k|    return count;
  184|  13.9k|}
fileutils.c:is_valid_wide_char:
  147|   180k|{
  148|       |#ifdef HAVE_NON_UNICODE_WCHAR_T_REPRESENTATION
  149|       |    /* Oracle Solaris doesn't use Unicode code points as wchar_t encoding
  150|       |       for non-Unicode locales, which makes values higher than _Py_MAX_UNICODE
  151|       |       possibly valid. */
  152|       |    return 1;
  153|       |#endif
  154|   180k|    if (Py_UNICODE_IS_SURROGATE(ch)) {
  ------------------
  |  Branch (154:9): [True: 0, False: 180k]
  ------------------
  155|       |        // Reject lone surrogate characters
  156|      0|        return 0;
  157|      0|    }
  158|   180k|#if SIZEOF_WCHAR_T > 2
  159|   180k|    if (ch > _Py_MAX_UNICODE) {
  ------------------
  |  |   17|   180k|#define _Py_MAX_UNICODE 0x10ffff
  ------------------
  |  Branch (159:9): [True: 0, False: 180k]
  ------------------
  160|       |        // bpo-35883: Reject characters outside [U+0000; U+10ffff] range.
  161|       |        // The glibc mbstowcs() UTF-8 decoder does not respect the RFC 3629,
  162|       |        // it creates characters outside the [U+0000; U+10ffff] range:
  163|       |        // https://sourceware.org/bugzilla/show_bug.cgi?id=2373
  164|      0|        return 0;
  165|      0|    }
  166|   180k|#endif
  167|   180k|    return 1;
  168|   180k|}
fileutils.c:decode_current_locale:
  486|  6.97k|{
  487|  6.97k|    wchar_t *res;
  488|  6.97k|    size_t argsize;
  489|  6.97k|    size_t count;
  490|  6.97k|#ifdef HAVE_MBRTOWC
  491|  6.97k|    unsigned char *in;
  492|  6.97k|    wchar_t *out;
  493|  6.97k|    mbstate_t mbs;
  494|  6.97k|#endif
  495|       |
  496|  6.97k|    int surrogateescape;
  497|  6.97k|    if (get_surrogateescape(errors, &surrogateescape) < 0) {
  ------------------
  |  Branch (497:9): [True: 0, False: 6.97k]
  ------------------
  498|      0|        return -3;
  499|      0|    }
  500|       |
  501|       |#ifdef HAVE_BROKEN_MBSTOWCS
  502|       |    /* Some platforms have a broken implementation of
  503|       |     * mbstowcs which does not count the characters that
  504|       |     * would result from conversion.  Use an upper bound.
  505|       |     */
  506|       |    argsize = strlen(arg);
  507|       |#else
  508|  6.97k|    argsize = _Py_mbstowcs(NULL, arg, 0);
  509|  6.97k|#endif
  510|  6.97k|    if (argsize != DECODE_ERROR) {
  ------------------
  |  Branch (510:9): [True: 6.97k, False: 0]
  ------------------
  511|  6.97k|        if (argsize > PY_SSIZE_T_MAX / sizeof(wchar_t) - 1) {
  ------------------
  |  |  137|  6.97k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (511:13): [True: 0, False: 6.97k]
  ------------------
  512|      0|            return -1;
  513|      0|        }
  514|  6.97k|        res = (wchar_t *)PyMem_RawMalloc((argsize + 1) * sizeof(wchar_t));
  515|  6.97k|        if (!res) {
  ------------------
  |  Branch (515:13): [True: 0, False: 6.97k]
  ------------------
  516|      0|            return -1;
  517|      0|        }
  518|       |
  519|  6.97k|        count = _Py_mbstowcs(res, arg, argsize + 1);
  520|  6.97k|        if (count != DECODE_ERROR) {
  ------------------
  |  Branch (520:13): [True: 6.97k, False: 0]
  ------------------
  521|  6.97k|            *wstr = res;
  522|  6.97k|            if (wlen != NULL) {
  ------------------
  |  Branch (522:17): [True: 6.97k, False: 0]
  ------------------
  523|  6.97k|                *wlen = count;
  524|  6.97k|            }
  525|  6.97k|            return 0;
  526|  6.97k|        }
  527|      0|        PyMem_RawFree(res);
  528|      0|    }
  529|       |
  530|       |    /* Conversion failed. Fall back to escaping with surrogateescape. */
  531|      0|#ifdef HAVE_MBRTOWC
  532|       |    /* Try conversion with mbrtwoc (C99), and escape non-decodable bytes. */
  533|       |
  534|       |    /* Overallocate; as multi-byte characters are in the argument, the
  535|       |       actual output could use less memory. */
  536|      0|    argsize = strlen(arg) + 1;
  537|      0|    if (argsize > PY_SSIZE_T_MAX / sizeof(wchar_t)) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (537:9): [True: 0, False: 0]
  ------------------
  538|      0|        return -1;
  539|      0|    }
  540|      0|    res = (wchar_t*)PyMem_RawMalloc(argsize * sizeof(wchar_t));
  541|      0|    if (!res) {
  ------------------
  |  Branch (541:9): [True: 0, False: 0]
  ------------------
  542|      0|        return -1;
  543|      0|    }
  544|       |
  545|      0|    in = (unsigned char*)arg;
  546|      0|    out = res;
  547|      0|    memset(&mbs, 0, sizeof mbs);
  548|      0|    while (argsize) {
  ------------------
  |  Branch (548:12): [True: 0, False: 0]
  ------------------
  549|      0|        size_t converted = _Py_mbrtowc(out, (char*)in, argsize, &mbs);
  550|      0|        if (converted == 0) {
  ------------------
  |  Branch (550:13): [True: 0, False: 0]
  ------------------
  551|       |            /* Reached end of string; null char stored. */
  552|      0|            break;
  553|      0|        }
  554|       |
  555|      0|        if (converted == DECODE_ERROR || converted == INCOMPLETE_CHARACTER) {
  ------------------
  |  Branch (555:13): [True: 0, False: 0]
  |  Branch (555:42): [True: 0, False: 0]
  ------------------
  556|      0|            if (!surrogateescape) {
  ------------------
  |  Branch (556:17): [True: 0, False: 0]
  ------------------
  557|      0|                goto decode_error;
  558|      0|            }
  559|       |
  560|       |            /* Decoding error. Escape as UTF-8b, and start over in the initial
  561|       |               shift state. */
  562|      0|            *out++ = 0xdc00 + *in++;
  563|      0|            argsize--;
  564|      0|            memset(&mbs, 0, sizeof mbs);
  565|      0|            continue;
  566|      0|        }
  567|       |
  568|       |        // _Py_mbrtowc() reject lone surrogate characters
  569|      0|        assert(!Py_UNICODE_IS_SURROGATE(*out));
  ------------------
  |  Branch (569:9): [True: 0, False: 0]
  ------------------
  570|       |
  571|       |        /* successfully converted some bytes */
  572|      0|        in += converted;
  573|      0|        argsize -= converted;
  574|      0|        out++;
  575|      0|    }
  576|      0|    if (wlen != NULL) {
  ------------------
  |  Branch (576:9): [True: 0, False: 0]
  ------------------
  577|      0|        *wlen = out - res;
  578|      0|    }
  579|      0|    *wstr = res;
  580|      0|    return 0;
  581|       |
  582|      0|decode_error:
  583|      0|    PyMem_RawFree(res);
  584|      0|    if (wlen) {
  ------------------
  |  Branch (584:9): [True: 0, False: 0]
  ------------------
  585|      0|        *wlen = in - (unsigned char*)arg;
  586|      0|    }
  587|      0|    if (reason) {
  ------------------
  |  Branch (587:9): [True: 0, False: 0]
  ------------------
  588|      0|        *reason = "decoding error";
  589|      0|    }
  590|      0|    return -2;
  591|       |#else   /* HAVE_MBRTOWC */
  592|       |    /* Cannot use C locale for escaping; manually escape as if charset
  593|       |       is ASCII (i.e. escape all bytes > 128. This will still roundtrip
  594|       |       correctly in the locale's charset, which must be an ASCII superset. */
  595|       |    return decode_ascii(arg, wstr, wlen, reason, errors);
  596|       |#endif   /* HAVE_MBRTOWC */
  597|      0|}
fileutils.c:get_surrogateescape:
   63|  6.97k|{
   64|  6.97k|    switch (errors)
   65|  6.97k|    {
   66|      0|    case _Py_ERROR_STRICT:
  ------------------
  |  Branch (66:5): [True: 0, False: 6.97k]
  ------------------
   67|      0|        *surrogateescape = 0;
   68|      0|        return 0;
   69|  6.97k|    case _Py_ERROR_SURROGATEESCAPE:
  ------------------
  |  Branch (69:5): [True: 6.97k, False: 0]
  ------------------
   70|  6.97k|        *surrogateescape = 1;
   71|  6.97k|        return 0;
   72|      0|    default:
  ------------------
  |  Branch (72:5): [True: 0, False: 6.97k]
  ------------------
   73|      0|        return -1;
   74|  6.97k|    }
   75|  6.97k|}
fileutils.c:encode_locale:
  860|     10|{
  861|     10|    char *str;
  862|     10|    int res = encode_locale_ex(text, &str, error_pos, NULL,
  863|     10|                               raw_malloc, current_locale,
  864|     10|                               _Py_ERROR_SURROGATEESCAPE);
  865|     10|    if (res != -2 && error_pos) {
  ------------------
  |  Branch (865:9): [True: 10, False: 0]
  |  Branch (865:22): [True: 0, False: 10]
  ------------------
  866|      0|        *error_pos = (size_t)-1;
  867|      0|    }
  868|     10|    if (res != 0) {
  ------------------
  |  Branch (868:9): [True: 0, False: 10]
  ------------------
  869|      0|        return NULL;
  870|      0|    }
  871|     10|    return str;
  872|     10|}
fileutils.c:encode_locale_ex:
  817|     92|{
  818|     92|    if (current_locale) {
  ------------------
  |  Branch (818:9): [True: 0, False: 92]
  ------------------
  819|       |#ifdef _Py_FORCE_UTF8_LOCALE
  820|       |        return _Py_EncodeUTF8Ex(text, str, error_pos, reason,
  821|       |                                raw_malloc, errors);
  822|       |#else
  823|      0|        return encode_current_locale(text, str, error_pos, reason,
  824|      0|                                     raw_malloc, errors);
  825|      0|#endif
  826|      0|    }
  827|       |
  828|       |#ifdef _Py_FORCE_UTF8_FS_ENCODING
  829|       |    return _Py_EncodeUTF8Ex(text, str, error_pos, reason,
  830|       |                            raw_malloc, errors);
  831|       |#else
  832|     92|    int use_utf8 = (_PyRuntime.preconfig.utf8_mode >= 1);
  833|       |#ifdef MS_WINDOWS
  834|       |    use_utf8 |= (_PyRuntime.preconfig.legacy_windows_fs_encoding == 0);
  835|       |#endif
  836|     92|    if (use_utf8) {
  ------------------
  |  Branch (836:9): [True: 92, False: 0]
  ------------------
  837|     92|        return _Py_EncodeUTF8Ex(text, str, error_pos, reason,
  838|     92|                                raw_malloc, errors);
  839|     92|    }
  840|       |
  841|      0|#ifdef USE_FORCE_ASCII
  842|      0|    if (force_ascii == -1) {
  ------------------
  |  |  236|      0|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  ------------------
  |  Branch (842:9): [True: 0, False: 0]
  ------------------
  843|      0|        force_ascii = check_force_ascii();
  ------------------
  |  |  236|      0|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  ------------------
  844|      0|    }
  845|       |
  846|      0|    if (force_ascii) {
  ------------------
  |  |  236|      0|#define force_ascii (_PyRuntime.fileutils.force_ascii)
  |  |  ------------------
  |  |  |  Branch (236:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  847|      0|        return encode_ascii(text, str, error_pos, reason,
  848|      0|                            raw_malloc, errors);
  849|      0|    }
  850|      0|#endif
  851|       |
  852|      0|    return encode_current_locale(text, str, error_pos, reason,
  853|      0|                                 raw_malloc, errors);
  854|      0|#endif   /* _Py_FORCE_UTF8_FS_ENCODING */
  855|      0|}
fileutils.c:get_inheritable:
 1418|      2|{
 1419|       |#ifdef MS_WINDOWS
 1420|       |    HANDLE handle;
 1421|       |    DWORD flags;
 1422|       |
 1423|       |    handle = _Py_get_osfhandle_noraise(fd);
 1424|       |    if (handle == INVALID_HANDLE_VALUE) {
 1425|       |        if (raise)
 1426|       |            PyErr_SetFromErrno(PyExc_OSError);
 1427|       |        return -1;
 1428|       |    }
 1429|       |
 1430|       |    if (!GetHandleInformation(handle, &flags)) {
 1431|       |        if (raise)
 1432|       |            PyErr_SetFromWindowsErr(0);
 1433|       |        return -1;
 1434|       |    }
 1435|       |
 1436|       |    return (flags & HANDLE_FLAG_INHERIT);
 1437|       |#else
 1438|      2|    int flags;
 1439|       |
 1440|      2|    flags = fcntl(fd, F_GETFD, 0);
 1441|      2|    if (flags == -1) {
  ------------------
  |  Branch (1441:9): [True: 0, False: 2]
  ------------------
 1442|      0|        if (raise)
  ------------------
  |  Branch (1442:13): [True: 0, False: 0]
  ------------------
 1443|      0|            PyErr_SetFromErrno(PyExc_OSError);
 1444|      0|        return -1;
 1445|      0|    }
 1446|      2|    return !(flags & FD_CLOEXEC);
 1447|      2|#endif
 1448|      2|}
fileutils.c:set_inheritable:
 1463|     93|{
 1464|       |#ifdef MS_WINDOWS
 1465|       |    HANDLE handle;
 1466|       |    DWORD flags;
 1467|       |#else
 1468|     93|#if defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX)
 1469|     93|    static int ioctl_works = -1;
 1470|     93|    int request;
 1471|     93|    int err;
 1472|     93|#endif
 1473|     93|    int flags, new_flags;
 1474|     93|    int res;
 1475|     93|#endif
 1476|       |
 1477|       |    /* atomic_flag_works can only be used to make the file descriptor
 1478|       |       non-inheritable */
 1479|     93|    assert(!(atomic_flag_works != NULL && inheritable));
  ------------------
  |  Branch (1479:5): [True: 93, False: 0]
  |  Branch (1479:5): [True: 0, False: 93]
  ------------------
 1480|       |
 1481|     93|    if (atomic_flag_works != NULL && !inheritable) {
  ------------------
  |  Branch (1481:9): [True: 93, False: 0]
  |  Branch (1481:38): [True: 93, False: 0]
  ------------------
 1482|     93|        if (_Py_atomic_load_int_relaxed(atomic_flag_works) == -1) {
  ------------------
  |  Branch (1482:13): [True: 2, False: 91]
  ------------------
 1483|      2|            int isInheritable = get_inheritable(fd, raise);
 1484|      2|            if (isInheritable == -1)
  ------------------
  |  Branch (1484:17): [True: 0, False: 2]
  ------------------
 1485|      0|                return -1;
 1486|      2|            _Py_atomic_store_int_relaxed(atomic_flag_works, !isInheritable);
 1487|      2|        }
 1488|       |
 1489|     93|        if (_Py_atomic_load_int_relaxed(atomic_flag_works))
  ------------------
  |  Branch (1489:13): [True: 93, False: 0]
  ------------------
 1490|     93|            return 0;
 1491|     93|    }
 1492|       |
 1493|       |#ifdef MS_WINDOWS
 1494|       |    handle = _Py_get_osfhandle_noraise(fd);
 1495|       |    if (handle == INVALID_HANDLE_VALUE) {
 1496|       |        if (raise)
 1497|       |            PyErr_SetFromErrno(PyExc_OSError);
 1498|       |        return -1;
 1499|       |    }
 1500|       |
 1501|       |    if (inheritable)
 1502|       |        flags = HANDLE_FLAG_INHERIT;
 1503|       |    else
 1504|       |        flags = 0;
 1505|       |
 1506|       |    if (!SetHandleInformation(handle, HANDLE_FLAG_INHERIT, flags)) {
 1507|       |        if (raise)
 1508|       |            PyErr_SetFromWindowsErr(0);
 1509|       |        return -1;
 1510|       |    }
 1511|       |    return 0;
 1512|       |
 1513|       |#else
 1514|       |
 1515|      0|#if defined(HAVE_SYS_IOCTL_H) && defined(FIOCLEX) && defined(FIONCLEX)
 1516|      0|    if (raise != 0 && _Py_atomic_load_int_relaxed(&ioctl_works) != 0) {
  ------------------
  |  Branch (1516:9): [True: 0, False: 0]
  |  Branch (1516:23): [True: 0, False: 0]
  ------------------
 1517|       |        /* fast-path: ioctl() only requires one syscall */
 1518|       |        /* caveat: raise=0 is an indicator that we must be async-signal-safe
 1519|       |         * thus avoid using ioctl() so we skip the fast-path. */
 1520|      0|        if (inheritable)
  ------------------
  |  Branch (1520:13): [True: 0, False: 0]
  ------------------
 1521|      0|            request = FIONCLEX;
 1522|      0|        else
 1523|      0|            request = FIOCLEX;
 1524|      0|        err = ioctl(fd, request, NULL);
 1525|      0|        if (!err) {
  ------------------
  |  Branch (1525:13): [True: 0, False: 0]
  ------------------
 1526|      0|            if (_Py_atomic_load_int_relaxed(&ioctl_works) == -1) {
  ------------------
  |  Branch (1526:17): [True: 0, False: 0]
  ------------------
 1527|      0|                _Py_atomic_store_int_relaxed(&ioctl_works, 1);
 1528|      0|            }
 1529|      0|            return 0;
 1530|      0|        }
 1531|       |
 1532|      0|#ifdef O_PATH
 1533|      0|        if (errno == EBADF) {
  ------------------
  |  Branch (1533:13): [True: 0, False: 0]
  ------------------
 1534|       |            // bpo-44849: On Linux and FreeBSD, ioctl(FIOCLEX) fails with EBADF
 1535|       |            // on O_PATH file descriptors. Fall through to the fcntl()
 1536|       |            // implementation.
 1537|      0|        }
 1538|      0|        else
 1539|      0|#endif
 1540|      0|        if (errno != ENOTTY && errno != EACCES) {
  ------------------
  |  Branch (1540:13): [True: 0, False: 0]
  |  Branch (1540:32): [True: 0, False: 0]
  ------------------
 1541|      0|            if (raise)
  ------------------
  |  Branch (1541:17): [True: 0, False: 0]
  ------------------
 1542|      0|                PyErr_SetFromErrno(PyExc_OSError);
 1543|      0|            return -1;
 1544|      0|        }
 1545|      0|        else {
 1546|       |            /* Issue #22258: Here, ENOTTY means "Inappropriate ioctl for
 1547|       |               device". The ioctl is declared but not supported by the kernel.
 1548|       |               Remember that ioctl() doesn't work. It is the case on
 1549|       |               Illumos-based OS for example.
 1550|       |
 1551|       |               Issue #27057: When SELinux policy disallows ioctl it will fail
 1552|       |               with EACCES. While FIOCLEX is safe operation it may be
 1553|       |               unavailable because ioctl was denied altogether.
 1554|       |               This can be the case on Android. */
 1555|      0|            _Py_atomic_store_int_relaxed(&ioctl_works, 0);
 1556|      0|        }
 1557|       |        /* fallback to fcntl() if ioctl() does not work */
 1558|      0|    }
 1559|      0|#endif
 1560|       |
 1561|       |    /* slow-path: fcntl() requires two syscalls */
 1562|      0|    flags = fcntl(fd, F_GETFD);
 1563|      0|    if (flags < 0) {
  ------------------
  |  Branch (1563:9): [True: 0, False: 0]
  ------------------
 1564|      0|        if (raise)
  ------------------
  |  Branch (1564:13): [True: 0, False: 0]
  ------------------
 1565|      0|            PyErr_SetFromErrno(PyExc_OSError);
 1566|      0|        return -1;
 1567|      0|    }
 1568|       |
 1569|      0|    if (inheritable) {
  ------------------
  |  Branch (1569:9): [True: 0, False: 0]
  ------------------
 1570|      0|        new_flags = flags & ~FD_CLOEXEC;
 1571|      0|    }
 1572|      0|    else {
 1573|      0|        new_flags = flags | FD_CLOEXEC;
 1574|      0|    }
 1575|       |
 1576|      0|    if (new_flags == flags) {
  ------------------
  |  Branch (1576:9): [True: 0, False: 0]
  ------------------
 1577|       |        /* FD_CLOEXEC flag already set/cleared: nothing to do */
 1578|      0|        return 0;
 1579|      0|    }
 1580|       |
 1581|      0|    res = fcntl(fd, F_SETFD, new_flags);
 1582|      0|    if (res < 0) {
  ------------------
  |  Branch (1582:9): [True: 0, False: 0]
  ------------------
 1583|      0|        if (raise)
  ------------------
  |  Branch (1583:13): [True: 0, False: 0]
  ------------------
 1584|      0|            PyErr_SetFromErrno(PyExc_OSError);
 1585|      0|        return -1;
 1586|      0|    }
 1587|      0|    return 0;
 1588|      0|#endif
 1589|      0|}
fileutils.c:_Py_write_impl:
 1941|  48.4k|{
 1942|  48.4k|    Py_ssize_t n;
 1943|  48.4k|    int err;
 1944|  48.4k|    int async_err = 0;
 1945|       |
 1946|  48.4k|    _Py_BEGIN_SUPPRESS_IPH
 1947|       |#ifdef MS_WINDOWS
 1948|       |    if (count > 32767) {
 1949|       |        /* Issue #11395: the Windows console returns an error (12: not
 1950|       |           enough space error) on writing into stdout if stdout mode is
 1951|       |           binary and the length is greater than 66,000 bytes (or less,
 1952|       |           depending on heap usage). */
 1953|       |        if (gil_held) {
 1954|       |            Py_BEGIN_ALLOW_THREADS
 1955|       |            if (isatty(fd)) {
 1956|       |                count = 32767;
 1957|       |            }
 1958|       |            Py_END_ALLOW_THREADS
 1959|       |        } else {
 1960|       |            if (isatty(fd)) {
 1961|       |                count = 32767;
 1962|       |            }
 1963|       |        }
 1964|       |    }
 1965|       |
 1966|       |#endif
 1967|  48.4k|    if (count > _PY_WRITE_MAX) {
  ------------------
  |  |   60|  48.4k|#   define _PY_WRITE_MAX PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|  48.4k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
  |  Branch (1967:9): [True: 0, False: 48.4k]
  ------------------
 1968|      0|        count = _PY_WRITE_MAX;
  ------------------
  |  |   60|      0|#   define _PY_WRITE_MAX PY_SSIZE_T_MAX
  |  |  ------------------
  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  ------------------
 1969|      0|    }
 1970|       |
 1971|  48.4k|    if (gil_held) {
  ------------------
  |  Branch (1971:9): [True: 48.4k, False: 0]
  ------------------
 1972|  48.4k|        do {
 1973|  48.4k|            Py_BEGIN_ALLOW_THREADS
  ------------------
  |  |  117|  48.4k|#define Py_BEGIN_ALLOW_THREADS { \
  |  |  118|  48.4k|                        PyThreadState *_save; \
  |  |  119|  48.4k|                        _save = PyEval_SaveThread();
  ------------------
 1974|  48.4k|            errno = 0;
 1975|       |#ifdef MS_WINDOWS
 1976|       |            // write() on a non-blocking pipe fails with ENOSPC on Windows if
 1977|       |            // the pipe lacks available space for the entire buffer.
 1978|       |            int c = (int)count;
 1979|       |            do {
 1980|       |                _doserrno = 0;
 1981|       |                n = write(fd, buf, c);
 1982|       |                if (n >= 0 || errno != ENOSPC || _doserrno != 0) {
 1983|       |                    break;
 1984|       |                }
 1985|       |                errno = EAGAIN;
 1986|       |                c /= 2;
 1987|       |            } while (c > 0);
 1988|       |#else
 1989|  48.4k|            n = write(fd, buf, count);
 1990|  48.4k|#endif
 1991|       |            /* save/restore errno because PyErr_CheckSignals()
 1992|       |             * and PyErr_SetFromErrno() can modify it */
 1993|  48.4k|            err = errno;
 1994|  48.4k|            Py_END_ALLOW_THREADS
  ------------------
  |  |  122|  48.4k|#define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  |  |  123|  48.4k|                 }
  ------------------
 1995|  48.4k|        } while (n < 0 && err == EINTR &&
  ------------------
  |  Branch (1995:18): [True: 0, False: 48.4k]
  |  Branch (1995:27): [True: 0, False: 0]
  ------------------
 1996|      0|                !(async_err = PyErr_CheckSignals()));
  ------------------
  |  Branch (1996:17): [True: 0, False: 0]
  ------------------
 1997|  48.4k|    }
 1998|      0|    else {
 1999|      0|        do {
 2000|      0|            errno = 0;
 2001|       |#ifdef MS_WINDOWS
 2002|       |            // write() on a non-blocking pipe fails with ENOSPC on Windows if
 2003|       |            // the pipe lacks available space for the entire buffer.
 2004|       |            int c = (int)count;
 2005|       |            do {
 2006|       |                _doserrno = 0;
 2007|       |                n = write(fd, buf, c);
 2008|       |                if (n >= 0 || errno != ENOSPC || _doserrno != 0) {
 2009|       |                    break;
 2010|       |                }
 2011|       |                errno = EAGAIN;
 2012|       |                c /= 2;
 2013|       |            } while (c > 0);
 2014|       |#else
 2015|      0|            n = write(fd, buf, count);
 2016|      0|#endif
 2017|      0|            err = errno;
 2018|      0|        } while (n < 0 && err == EINTR);
  ------------------
  |  Branch (2018:18): [True: 0, False: 0]
  |  Branch (2018:27): [True: 0, False: 0]
  ------------------
 2019|      0|    }
 2020|  48.4k|    _Py_END_SUPPRESS_IPH
 2021|       |
 2022|  48.4k|    if (async_err) {
  ------------------
  |  Branch (2022:9): [True: 0, False: 48.4k]
  ------------------
 2023|       |        /* write() was interrupted by a signal (failed with EINTR)
 2024|       |           and the Python signal handler raised an exception (if gil_held is
 2025|       |           nonzero). */
 2026|      0|        errno = err;
 2027|      0|        assert(errno == EINTR && (!gil_held || PyErr_Occurred()));
  ------------------
  |  Branch (2027:9): [True: 0, False: 0]
  |  Branch (2027:9): [True: 0, False: 0]
  |  Branch (2027:9): [True: 0, False: 0]
  ------------------
 2028|      0|        return -1;
 2029|      0|    }
 2030|  48.4k|    if (n < 0) {
  ------------------
  |  Branch (2030:9): [True: 0, False: 48.4k]
  ------------------
 2031|      0|        if (gil_held)
  ------------------
  |  Branch (2031:13): [True: 0, False: 0]
  ------------------
 2032|      0|            PyErr_SetFromErrno(PyExc_OSError);
 2033|      0|        errno = err;
 2034|      0|        return -1;
 2035|      0|    }
 2036|       |
 2037|  48.4k|    return n;
 2038|  48.4k|}
fileutils.c:join_relfile:
 2420|     24|{
 2421|       |#ifdef MS_WINDOWS
 2422|       |    if (FAILED(PathCchCombineEx(buffer, bufsize, dirname, relfile,
 2423|       |        PATHCCH_ALLOW_LONG_PATHS))) {
 2424|       |        return -1;
 2425|       |    }
 2426|       |#else
 2427|     24|    assert(!_Py_isabs(relfile));
  ------------------
  |  Branch (2427:5): [True: 24, False: 0]
  ------------------
 2428|     24|    size_t dirlen = wcslen(dirname);
 2429|     24|    size_t rellen = wcslen(relfile);
 2430|     24|    size_t maxlen = bufsize - 1;
 2431|     24|    if (maxlen > MAXPATHLEN || dirlen >= maxlen || rellen >= maxlen - dirlen) {
  ------------------
  |  |   43|     48|#    define MAXPATHLEN PATH_MAX
  ------------------
  |  Branch (2431:9): [True: 0, False: 24]
  |  Branch (2431:32): [True: 0, False: 24]
  |  Branch (2431:52): [True: 0, False: 24]
  ------------------
 2432|      0|        return -1;
 2433|      0|    }
 2434|     24|    if (dirlen == 0) {
  ------------------
  |  Branch (2434:9): [True: 0, False: 24]
  ------------------
 2435|       |        // We do not add a leading separator.
 2436|      0|        wcscpy(buffer, relfile);
 2437|      0|    }
 2438|     24|    else {
 2439|     24|        if (dirname != buffer) {
  ------------------
  |  Branch (2439:13): [True: 0, False: 24]
  ------------------
 2440|      0|            wcscpy(buffer, dirname);
 2441|      0|        }
 2442|     24|        size_t relstart = dirlen;
 2443|     24|        if (dirlen > 1 && dirname[dirlen - 1] != SEP) {
  ------------------
  |  |   29|     24|#  define SEP L'/'
  ------------------
  |  Branch (2443:13): [True: 24, False: 0]
  |  Branch (2443:27): [True: 24, False: 0]
  ------------------
 2444|     24|            buffer[dirlen] = SEP;
  ------------------
  |  |   29|     24|#  define SEP L'/'
  ------------------
 2445|     24|            relstart += 1;
 2446|     24|        }
 2447|     24|        wcscpy(&buffer[relstart], relfile);
 2448|     24|    }
 2449|     24|#endif
 2450|     24|    return 0;
 2451|     24|}

_PyCfgBuilder_New:
  438|  52.7k|{
  439|  52.7k|    cfg_builder *g = PyMem_Malloc(sizeof(cfg_builder));
  440|  52.7k|    if (g == NULL) {
  ------------------
  |  Branch (440:9): [True: 0, False: 52.7k]
  ------------------
  441|      0|        PyErr_NoMemory();
  442|      0|        return NULL;
  443|      0|    }
  444|  52.7k|    memset(g, 0, sizeof(cfg_builder));
  445|  52.7k|    if (init_cfg_builder(g) < 0) {
  ------------------
  |  Branch (445:9): [True: 0, False: 52.7k]
  ------------------
  446|      0|        PyMem_Free(g);
  447|      0|        return NULL;
  448|      0|    }
  449|  52.7k|    return g;
  450|  52.7k|}
_PyCfgBuilder_Free:
  454|  52.7k|{
  455|  52.7k|    if (g == NULL) {
  ------------------
  |  Branch (455:9): [True: 0, False: 52.7k]
  ------------------
  456|      0|        return;
  457|      0|    }
  458|  52.7k|    assert(cfg_builder_check(g));
  ------------------
  |  Branch (458:5): [True: 52.7k, False: 0]
  ------------------
  459|  52.7k|    basicblock *b = g->g_block_list;
  460|   547k|    while (b != NULL) {
  ------------------
  |  Branch (460:12): [True: 494k, False: 52.7k]
  ------------------
  461|   494k|        if (b->b_instr) {
  ------------------
  |  Branch (461:13): [True: 494k, False: 0]
  ------------------
  462|   494k|            PyMem_Free((void *)b->b_instr);
  463|   494k|        }
  464|   494k|        basicblock *next = b->b_list;
  465|   494k|        PyMem_Free((void *)b);
  466|   494k|        b = next;
  467|   494k|    }
  468|  52.7k|    PyMem_Free(g);
  469|  52.7k|}
_PyCfgBuilder_CheckSize:
  473|  52.7k|{
  474|  52.7k|    int nblocks = 0;
  475|   525k|    for (basicblock *b = g->g_block_list; b != NULL; b = b->b_list) {
  ------------------
  |  Branch (475:43): [True: 472k, False: 52.7k]
  ------------------
  476|   472k|        nblocks++;
  477|   472k|    }
  478|  52.7k|    if ((size_t)nblocks > SIZE_MAX / sizeof(basicblock *)) {
  ------------------
  |  Branch (478:9): [True: 0, False: 52.7k]
  ------------------
  479|      0|        PyErr_NoMemory();
  480|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  481|      0|    }
  482|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
  483|  52.7k|}
_PyCfgBuilder_UseLabel:
  487|   239k|{
  488|   239k|    g->g_current_label = lbl;
  489|   239k|    return cfg_builder_maybe_start_new_block(g);
  490|   239k|}
_PyCfgBuilder_Addop:
  494|  5.04M|{
  495|  5.04M|    RETURN_IF_ERROR(cfg_builder_maybe_start_new_block(g));
  ------------------
  |  |   25|  5.04M|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 5.04M]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  496|  5.04M|    return basicblock_addop(g->g_curblock, opcode, oparg, loc);
  497|  5.04M|}
_PyCfg_OptimizeCodeUnit:
 3791|  52.7k|{
 3792|  52.7k|    assert(cfg_builder_check(g));
  ------------------
  |  Branch (3792:5): [True: 52.7k, False: 0]
  ------------------
 3793|  52.7k|    assert(g->g_entryblock->b_iused > 0);
  ------------------
  |  Branch (3793:5): [True: 52.7k, False: 0]
  ------------------
 3794|       |    /** Preprocessing **/
 3795|       |    /* Map labels to targets and mark exception handlers */
 3796|  52.7k|    RETURN_IF_ERROR(translate_jump_labels_to_targets(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3797|  52.7k|    RETURN_IF_ERROR(mark_except_handlers(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3798|  52.7k|    RETURN_IF_ERROR(label_exception_targets(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3799|       |
 3800|       |    /** Optimization **/
 3801|       |
 3802|  52.7k|    _Py_hashtable_t *consts_index = _Py_hashtable_new(
 3803|  52.7k|        _Py_hashtable_hash_ptr, _Py_hashtable_compare_direct);
 3804|  52.7k|    if (consts_index == NULL) {
  ------------------
  |  Branch (3804:9): [True: 0, False: 52.7k]
  ------------------
 3805|      0|        PyErr_NoMemory();
 3806|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3807|      0|    }
 3808|       |
 3809|   330k|    for (Py_ssize_t i = 0; i < PyList_GET_SIZE(consts); i++) {
  ------------------
  |  |   38|   330k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   330k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   330k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3809:28): [True: 277k, False: 52.7k]
  ------------------
 3810|   277k|        PyObject *item = PyList_GET_ITEM(consts, i);
  ------------------
  |  |   40|   277k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|   277k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3810:26): [True: 277k, False: 0]
  ------------------
 3811|   277k|        if (_Py_hashtable_get_entry(consts_index, (void *)item) != NULL) {
  ------------------
  |  Branch (3811:13): [True: 0, False: 277k]
  ------------------
 3812|      0|            continue;
 3813|      0|        }
 3814|   277k|        if (_Py_hashtable_set(consts_index, (void *)item,
  ------------------
  |  Branch (3814:13): [True: 0, False: 277k]
  ------------------
 3815|   277k|                              (void *)(uintptr_t)i) < 0) {
 3816|      0|            _Py_hashtable_destroy(consts_index);
 3817|      0|            PyErr_NoMemory();
 3818|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3819|      0|        }
 3820|   277k|    }
 3821|       |
 3822|  52.7k|    int ret = optimize_cfg(g, consts, const_cache, consts_index, firstlineno);
 3823|       |
 3824|  52.7k|    _Py_hashtable_destroy(consts_index);
 3825|       |
 3826|  52.7k|    RETURN_IF_ERROR(ret);
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3827|       |
 3828|  52.7k|    RETURN_IF_ERROR(remove_unused_consts(g->g_entryblock, consts));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3829|  52.7k|    RETURN_IF_ERROR(
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3830|  52.7k|        add_checks_for_loads_of_uninitialized_variables(
 3831|  52.7k|            g->g_entryblock, nlocals, nparams));
 3832|  52.7k|    RETURN_IF_ERROR(insert_superinstructions(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3833|       |
 3834|  52.7k|    RETURN_IF_ERROR(push_cold_blocks_to_end(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3835|  52.7k|    RETURN_IF_ERROR(resolve_line_numbers(g, firstlineno));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3836|       |    // temporarily remove assert. See https://github.com/python/cpython/issues/125845
 3837|       |    // assert(all_exits_have_lineno(g->g_entryblock));
 3838|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 3839|  52.7k|}
_PyCfg_FromInstructionSequence:
 4029|  52.7k|{
 4030|  52.7k|    if (_PyInstructionSequence_ApplyLabelMap(seq) < 0) {
  ------------------
  |  Branch (4030:9): [True: 0, False: 52.7k]
  ------------------
 4031|      0|        return NULL;
 4032|      0|    }
 4033|  52.7k|    cfg_builder *g = _PyCfgBuilder_New();
 4034|  52.7k|    if (g == NULL) {
  ------------------
  |  Branch (4034:9): [True: 0, False: 52.7k]
  ------------------
 4035|      0|        return NULL;
 4036|      0|    }
 4037|  5.10M|    for (int i = 0; i < seq->s_used; i++) {
  ------------------
  |  Branch (4037:21): [True: 5.05M, False: 52.7k]
  ------------------
 4038|  5.05M|        seq->s_instrs[i].i_target = 0;
 4039|  5.05M|    }
 4040|  5.10M|    for (int i = 0; i < seq->s_used; i++) {
  ------------------
  |  Branch (4040:21): [True: 5.05M, False: 52.7k]
  ------------------
 4041|  5.05M|        _PyInstruction *instr = &seq->s_instrs[i];
 4042|  5.05M|        if (HAS_TARGET(instr->i_opcode)) {
  ------------------
  |  |   23|  5.05M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  10.1M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  5.05M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 238k, False: 4.81M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  4.81M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  9.62M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 43.3k, False: 4.76M]
  |  |  |  |  ------------------
  |  |  |  |   19|  4.81M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  9.58M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 11.4k, False: 4.75M]
  |  |  |  |  ------------------
  |  |  |  |   20|  4.81M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.75M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 20.2k, False: 4.73M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4043|   313k|            assert(instr->i_oparg >= 0 && instr->i_oparg < seq->s_used);
  ------------------
  |  Branch (4043:13): [True: 313k, False: 0]
  |  Branch (4043:13): [True: 313k, False: 0]
  ------------------
 4044|   313k|            seq->s_instrs[instr->i_oparg].i_target = 1;
 4045|   313k|        }
 4046|  5.05M|    }
 4047|  52.7k|    int offset = 0;
 4048|  5.10M|    for (int i = 0; i < seq->s_used; i++) {
  ------------------
  |  Branch (4048:21): [True: 5.05M, False: 52.7k]
  ------------------
 4049|  5.05M|        _PyInstruction *instr = &seq->s_instrs[i];
 4050|  5.05M|        if (instr->i_opcode == ANNOTATIONS_PLACEHOLDER) {
  ------------------
  |  |  244|  5.05M|#define ANNOTATIONS_PLACEHOLDER                256
  ------------------
  |  Branch (4050:13): [True: 10.0k, False: 5.04M]
  ------------------
 4051|  10.0k|            if (seq->s_annotations_code != NULL) {
  ------------------
  |  Branch (4051:17): [True: 599, False: 9.47k]
  ------------------
 4052|    599|                assert(seq->s_annotations_code->s_labelmap_size == 0
  ------------------
  |  Branch (4052:17): [True: 599, False: 0]
  |  Branch (4052:17): [True: 599, False: 0]
  ------------------
 4053|    599|                    && seq->s_annotations_code->s_nested == NULL);
 4054|  2.39k|                for (int j = 0; j < seq->s_annotations_code->s_used; j++) {
  ------------------
  |  Branch (4054:33): [True: 1.79k, False: 599]
  ------------------
 4055|  1.79k|                    _PyInstruction *ann_instr = &seq->s_annotations_code->s_instrs[j];
 4056|  1.79k|                    assert(!HAS_TARGET(ann_instr->i_opcode));
  ------------------
  |  Branch (4056:21): [True: 0, False: 1.79k]
  |  Branch (4056:21): [True: 0, False: 1.79k]
  |  Branch (4056:21): [True: 0, False: 1.79k]
  |  Branch (4056:21): [True: 0, False: 1.79k]
  ------------------
 4057|  1.79k|                    if (_PyCfgBuilder_Addop(g, ann_instr->i_opcode, ann_instr->i_oparg, ann_instr->i_loc) < 0) {
  ------------------
  |  Branch (4057:25): [True: 0, False: 1.79k]
  ------------------
 4058|      0|                        goto error;
 4059|      0|                    }
 4060|  1.79k|                }
 4061|    599|                offset += seq->s_annotations_code->s_used - 1;
 4062|    599|            }
 4063|  9.47k|            else {
 4064|  9.47k|                offset -= 1;
 4065|  9.47k|            }
 4066|  10.0k|            continue;
 4067|  10.0k|        }
 4068|  5.04M|        if (instr->i_target) {
  ------------------
  |  Branch (4068:13): [True: 239k, False: 4.80M]
  ------------------
 4069|   239k|            jump_target_label lbl_ = {i + offset};
 4070|   239k|            if (_PyCfgBuilder_UseLabel(g, lbl_) < 0) {
  ------------------
  |  Branch (4070:17): [True: 0, False: 239k]
  ------------------
 4071|      0|                goto error;
 4072|      0|            }
 4073|   239k|        }
 4074|  5.04M|        int opcode = instr->i_opcode;
 4075|  5.04M|        int oparg = instr->i_oparg;
 4076|  5.04M|        if (HAS_TARGET(opcode)) {
  ------------------
  |  |   23|  5.04M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  10.0M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  5.04M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 238k, False: 4.80M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  4.80M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  9.60M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 43.3k, False: 4.75M]
  |  |  |  |  ------------------
  |  |  |  |   19|  4.80M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  9.56M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 11.4k, False: 4.74M]
  |  |  |  |  ------------------
  |  |  |  |   20|  4.80M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.74M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 20.2k, False: 4.72M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4077|   313k|            oparg += offset;
 4078|   313k|        }
 4079|  5.04M|        if (_PyCfgBuilder_Addop(g, opcode, oparg, instr->i_loc) < 0) {
  ------------------
  |  Branch (4079:13): [True: 0, False: 5.04M]
  ------------------
 4080|      0|            goto error;
 4081|      0|        }
 4082|  5.04M|    }
 4083|  52.7k|    if (_PyCfgBuilder_CheckSize(g) < 0) {
  ------------------
  |  Branch (4083:9): [True: 0, False: 52.7k]
  ------------------
 4084|      0|        goto error;
 4085|      0|    }
 4086|  52.7k|    return g;
 4087|      0|error:
 4088|      0|    _PyCfgBuilder_Free(g);
 4089|       |    return NULL;
 4090|  52.7k|}
_PyCfg_ToInstructionSequence:
 4094|  52.7k|{
 4095|  52.7k|    int lbl = 0;
 4096|   547k|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (4096:43): [True: 494k, False: 52.7k]
  ------------------
 4097|   494k|        b->b_label = (jump_target_label){lbl};
 4098|   494k|        lbl += 1;
 4099|   494k|    }
 4100|   547k|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (4100:43): [True: 494k, False: 52.7k]
  ------------------
 4101|   494k|        RETURN_IF_ERROR(_PyInstructionSequence_UseLabel(seq, b->b_label.id));
  ------------------
  |  |   25|   494k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 494k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 4102|  3.87M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (4102:25): [True: 3.37M, False: 494k]
  ------------------
 4103|  3.37M|            cfg_instr *instr = &b->b_instr[i];
 4104|  3.37M|            if (HAS_TARGET(instr->i_opcode)) {
  ------------------
  |  |   23|  3.37M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  6.75M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  3.37M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 214k, False: 3.16M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  3.16M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  6.33M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 0, False: 3.16M]
  |  |  |  |  ------------------
  |  |  |  |   19|  3.16M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  6.33M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 0, False: 3.16M]
  |  |  |  |  ------------------
  |  |  |  |   20|  3.16M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.16M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 0, False: 3.16M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4105|       |                /* Set oparg to the label id (it will later be mapped to an offset) */
 4106|   214k|                instr->i_oparg = instr->i_target->b_label.id;
 4107|   214k|            }
 4108|  3.37M|            RETURN_IF_ERROR(
  ------------------
  |  |   25|  3.37M|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 3.37M]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 4109|  3.37M|                _PyInstructionSequence_Addop(
 4110|  3.37M|                    seq, instr->i_opcode, instr->i_oparg, instr->i_loc));
 4111|       |
 4112|  3.37M|            _PyExceptHandlerInfo *hi = &seq->s_instrs[seq->s_used-1].i_except_handler_info;
 4113|  3.37M|            if (instr->i_except != NULL) {
  ------------------
  |  Branch (4113:17): [True: 1.03M, False: 2.34M]
  ------------------
 4114|  1.03M|                hi->h_label = instr->i_except->b_label.id;
 4115|  1.03M|                hi->h_startdepth = instr->i_except->b_startdepth;
 4116|  1.03M|                hi->h_preserve_lasti = instr->i_except->b_preserve_lasti;
 4117|  1.03M|            }
 4118|  2.34M|            else {
 4119|  2.34M|                hi->h_label = -1;
 4120|  2.34M|            }
 4121|  3.37M|        }
 4122|   494k|    }
 4123|  52.7k|    if (_PyInstructionSequence_ApplyLabelMap(seq) < 0) {
  ------------------
  |  Branch (4123:9): [True: 0, False: 52.7k]
  ------------------
 4124|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4125|      0|    }
 4126|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 4127|  52.7k|}
_PyCfg_OptimizedCfgToInstructionSequence:
 4135|  52.7k|{
 4136|  52.7k|    RETURN_IF_ERROR(convert_pseudo_conditional_jumps(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 4137|       |
 4138|  52.7k|    *stackdepth = calculate_stackdepth(g);
 4139|  52.7k|    if (*stackdepth < 0) {
  ------------------
  |  Branch (4139:9): [True: 0, False: 52.7k]
  ------------------
 4140|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4141|      0|    }
 4142|       |
 4143|  52.7k|    *nlocalsplus = prepare_localsplus(umd, g);
 4144|  52.7k|    if (*nlocalsplus < 0) {
  ------------------
  |  Branch (4144:9): [True: 0, False: 52.7k]
  ------------------
 4145|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4146|      0|    }
 4147|       |
 4148|  52.7k|    RETURN_IF_ERROR(convert_pseudo_ops(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 4149|       |
 4150|       |    /* Order of basic blocks must have been determined by now */
 4151|       |
 4152|  52.7k|    RETURN_IF_ERROR(normalize_jumps(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 4153|  52.7k|    assert(no_redundant_jumps(g));
  ------------------
  |  Branch (4153:5): [True: 52.7k, False: 0]
  ------------------
 4154|       |
 4155|       |    /* Can't modify the bytecode after inserting instructions that produce
 4156|       |     * borrowed references.
 4157|       |     */
 4158|  52.7k|    RETURN_IF_ERROR(optimize_load_fast(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 4159|       |
 4160|       |    /* Can't modify the bytecode after computing jump offsets. */
 4161|  52.7k|    if (_PyCfg_ToInstructionSequence(g, seq) < 0) {
  ------------------
  |  Branch (4161:9): [True: 0, False: 52.7k]
  ------------------
 4162|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4163|      0|    }
 4164|       |
 4165|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 4166|  52.7k|}
PyCompile_OpcodeStackEffect:
 4193|  4.63k|{
 4194|  4.63k|    stack_effects effs;
 4195|  4.63k|    if (get_stack_effects(opcode, oparg, -1, &effs) < 0) {
  ------------------
  |  Branch (4195:9): [True: 0, False: 4.63k]
  ------------------
 4196|      0|        return PY_INVALID_STACK_EFFECT;
  ------------------
  |  |   48|      0|#define PY_INVALID_STACK_EFFECT INT_MAX
  ------------------
 4197|      0|    }
 4198|  4.63k|    return effs.net;
 4199|  4.63k|}
flowgraph.c:init_cfg_builder:
  425|  52.7k|{
  426|  52.7k|    g->g_block_list = NULL;
  427|  52.7k|    basicblock *block = cfg_builder_new_block(g);
  428|  52.7k|    if (block == NULL) {
  ------------------
  |  Branch (428:9): [True: 0, False: 52.7k]
  ------------------
  429|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  430|      0|    }
  431|  52.7k|    g->g_curblock = g->g_entryblock = block;
  432|  52.7k|    g->g_current_label = NO_LABEL;
  ------------------
  |  |   57|  52.7k|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
  433|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
  434|  52.7k|}
flowgraph.c:cfg_builder_new_block:
  177|   494k|{
  178|   494k|    basicblock *b = (basicblock *)PyMem_Calloc(1, sizeof(basicblock));
  179|   494k|    if (b == NULL) {
  ------------------
  |  Branch (179:9): [True: 0, False: 494k]
  ------------------
  180|      0|        PyErr_NoMemory();
  181|      0|        return NULL;
  182|      0|    }
  183|       |    /* Extend the singly linked list of blocks with new block. */
  184|   494k|    b->b_list = g->g_block_list;
  185|   494k|    g->g_block_list = b;
  186|   494k|    b->b_label = NO_LABEL;
  ------------------
  |  |   57|   494k|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
  187|   494k|    return b;
  188|   494k|}
flowgraph.c:cfg_builder_check:
  406|   105k|{
  407|  1.07M|    for (basicblock *block = g->g_block_list; block != NULL; block = block->b_list) {
  ------------------
  |  Branch (407:47): [True: 967k, False: 105k]
  ------------------
  408|   967k|        assert(!_PyMem_IsPtrFreed(block));
  ------------------
  |  Branch (408:9): [True: 967k, False: 0]
  ------------------
  409|   967k|        if (block->b_instr != NULL) {
  ------------------
  |  Branch (409:13): [True: 967k, False: 0]
  ------------------
  410|   967k|            assert(block->b_ialloc > 0);
  ------------------
  |  Branch (410:13): [True: 967k, False: 0]
  ------------------
  411|   967k|            assert(block->b_iused >= 0);
  ------------------
  |  Branch (411:13): [True: 967k, False: 0]
  ------------------
  412|   967k|            assert(block->b_ialloc >= block->b_iused);
  ------------------
  |  Branch (412:13): [True: 967k, False: 0]
  ------------------
  413|   967k|        }
  414|      0|        else {
  415|      0|            assert (block->b_iused == 0);
  ------------------
  |  Branch (415:13): [True: 0, False: 0]
  ------------------
  416|      0|            assert (block->b_ialloc == 0);
  ------------------
  |  Branch (416:13): [True: 0, False: 0]
  ------------------
  417|      0|        }
  418|   967k|    }
  419|   105k|    return true;
  420|   105k|}
flowgraph.c:cfg_builder_maybe_start_new_block:
  390|  5.28M|{
  391|  5.28M|    if (cfg_builder_current_block_is_terminated(g)) {
  ------------------
  |  Branch (391:9): [True: 419k, False: 4.86M]
  ------------------
  392|   419k|        basicblock *b = cfg_builder_new_block(g);
  393|   419k|        if (b == NULL) {
  ------------------
  |  Branch (393:13): [True: 0, False: 419k]
  ------------------
  394|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  395|      0|        }
  396|   419k|        b->b_label = g->g_current_label;
  397|   419k|        g->g_current_label = NO_LABEL;
  ------------------
  |  |   57|   419k|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
  398|   419k|        cfg_builder_use_next_block(g, b);
  399|   419k|    }
  400|  5.28M|    return SUCCESS;
  ------------------
  |  |   21|  5.28M|#define SUCCESS 0
  ------------------
  401|  5.28M|}
flowgraph.c:cfg_builder_current_block_is_terminated:
  370|  5.28M|{
  371|  5.28M|    cfg_instr *last = basicblock_last_instr(g->g_curblock);
  372|  5.28M|    if (last && IS_TERMINATOR_OPCODE(last->i_opcode)) {
  ------------------
  |  |   27|  4.98M|        (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  9.97M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  4.98M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 238k, False: 4.75M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   53|  4.75M|        ((opcode) == RETURN_VALUE || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  9.50M|#define RETURN_VALUE                            33
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:10): [True: 33.0k, False: 4.71M]
  |  |  |  |  ------------------
  |  |  |  |   54|  4.75M|         (opcode) == RAISE_VARARGS || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  113|  9.46M|#define RAISE_VARARGS                          100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:10): [True: 14.7k, False: 4.70M]
  |  |  |  |  ------------------
  |  |  |  |   55|  4.75M|         (opcode) == RERAISE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  114|  4.70M|#define RERAISE                                101
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:10): [True: 36.9k, False: 4.66M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (372:9): [True: 4.98M, False: 292k]
  ------------------
  373|   323k|        return true;
  374|   323k|    }
  375|  4.95M|    if (IS_LABEL(g->g_current_label)) {
  ------------------
  |  |   96|  4.95M|#define IS_LABEL(L) (!SAME_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   95|  4.95M|#define SAME_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  |  |  |  Branch (96:21): [True: 96.6k, False: 4.86M]
  |  |  ------------------
  ------------------
  376|  96.6k|        if (last || IS_LABEL(g->g_curblock->b_label)) {
  ------------------
  |  |   96|      0|#define IS_LABEL(L) (!SAME_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   95|      0|#define SAME_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  |  |  |  Branch (96:21): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (376:13): [True: 96.6k, False: 0]
  ------------------
  377|  96.6k|            return true;
  378|  96.6k|        }
  379|      0|        else {
  380|       |            /* current block is empty, label it */
  381|      0|            g->g_curblock->b_label = g->g_current_label;
  382|      0|            g->g_current_label = NO_LABEL;
  ------------------
  |  |   57|      0|#define NO_LABEL ((const _PyJumpTargetLabel){-1})
  ------------------
  383|      0|        }
  384|  96.6k|    }
  385|  4.86M|    return false;
  386|  4.95M|}
flowgraph.c:basicblock_last_instr:
  162|  18.2M|basicblock_last_instr(const basicblock *b) {
  163|  18.2M|    assert(b->b_iused >= 0);
  ------------------
  |  Branch (163:5): [True: 18.2M, False: 0]
  ------------------
  164|  18.2M|    if (b->b_iused > 0) {
  ------------------
  |  Branch (164:9): [True: 17.0M, False: 1.18M]
  ------------------
  165|  17.0M|        assert(b->b_instr != NULL);
  ------------------
  |  Branch (165:9): [True: 17.0M, False: 0]
  ------------------
  166|  17.0M|        return &b->b_instr[b->b_iused - 1];
  167|  17.0M|    }
  168|  1.18M|    return NULL;
  169|  18.2M|}
flowgraph.c:cfg_builder_use_next_block:
  345|   419k|{
  346|   419k|    assert(block != NULL);
  ------------------
  |  Branch (346:5): [True: 419k, False: 0]
  ------------------
  347|   419k|    g->g_curblock->b_next = block;
  348|   419k|    g->g_curblock = block;
  349|   419k|    return block;
  350|   419k|}
flowgraph.c:basicblock_addop:
  192|  5.15M|{
  193|  5.15M|    assert(IS_WITHIN_OPCODE_RANGE(opcode));
  ------------------
  |  Branch (193:5): [True: 5.15M, False: 0]
  |  Branch (193:5): [True: 4.85M, False: 300k]
  |  Branch (193:5): [True: 18.4k, False: 281k]
  |  Branch (193:5): [True: 13.0k, False: 268k]
  |  Branch (193:5): [True: 0, False: 268k]
  |  Branch (193:5): [True: 18.5k, False: 249k]
  |  Branch (193:5): [True: 94.2k, False: 155k]
  |  Branch (193:5): [True: 4.01k, False: 151k]
  |  Branch (193:5): [True: 3.11k, False: 148k]
  |  Branch (193:5): [True: 43.3k, False: 105k]
  |  Branch (193:5): [True: 20.2k, False: 84.9k]
  |  Branch (193:5): [True: 11.4k, False: 73.5k]
  |  Branch (193:5): [True: 73.5k, False: 0]
  |  Branch (193:5): [Folded, False: 0]
  ------------------
  194|  5.15M|    assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (194:5): [True: 0, False: 5.15M]
  |  Branch (194:5): [True: 0, False: 5.15M]
  |  Branch (194:5): [True: 0, False: 5.15M]
  ------------------
  195|  5.15M|    assert(OPCODE_HAS_ARG(opcode) || HAS_TARGET(opcode) || oparg == 0);
  ------------------
  |  Branch (195:5): [True: 0, False: 1.06M]
  |  Branch (195:5): [True: 0, False: 1.06M]
  |  Branch (195:5): [True: 0, False: 1.06M]
  |  Branch (195:5): [True: 0, False: 1.06M]
  |  Branch (195:5): [True: 4.08M, False: 1.06M]
  |  Branch (195:5): [True: 1.06M, False: 0]
  ------------------
  196|  5.15M|    assert(0 <= oparg && oparg < (1 << 30));
  ------------------
  |  Branch (196:5): [True: 5.15M, False: 0]
  |  Branch (196:5): [True: 5.15M, False: 0]
  ------------------
  197|       |
  198|  5.15M|    int off = basicblock_next_instr(b);
  199|  5.15M|    if (off < 0) {
  ------------------
  |  Branch (199:9): [True: 0, False: 5.15M]
  ------------------
  200|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  201|      0|    }
  202|  5.15M|    cfg_instr *i = &b->b_instr[off];
  203|  5.15M|    i->i_opcode = opcode;
  204|  5.15M|    i->i_oparg = oparg;
  205|  5.15M|    i->i_loc = loc;
  206|       |    // memory is already zero initialized
  207|  5.15M|    assert(i->i_target == NULL);
  ------------------
  |  Branch (207:5): [True: 5.15M, False: 0]
  ------------------
  208|  5.15M|    assert(i->i_except == NULL);
  ------------------
  |  Branch (208:5): [True: 5.15M, False: 0]
  ------------------
  209|       |
  210|  5.15M|    return SUCCESS;
  ------------------
  |  |   21|  5.15M|#define SUCCESS 0
  ------------------
  211|  5.15M|}
flowgraph.c:basicblock_next_instr:
  146|  5.21M|{
  147|  5.21M|    assert(b != NULL);
  ------------------
  |  Branch (147:5): [True: 5.21M, False: 0]
  ------------------
  148|  5.21M|    _Py_c_array_t array = {
  149|  5.21M|        .array = (void*)b->b_instr,
  150|  5.21M|        .allocated_entries = b->b_ialloc,
  151|  5.21M|        .item_size = sizeof(cfg_instr),
  152|  5.21M|        .initial_num_entries = DEFAULT_BLOCK_SIZE,
  ------------------
  |  |   29|  5.21M|#define DEFAULT_BLOCK_SIZE 16
  ------------------
  153|  5.21M|    };
  154|       |
  155|  5.21M|    RETURN_IF_ERROR(_Py_CArray_EnsureCapacity(&array, b->b_iused + 1));
  ------------------
  |  |   25|  5.21M|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 5.21M]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  156|  5.21M|    b->b_instr = array.array;
  157|  5.21M|    b->b_ialloc = array.allocated_entries;
  158|  5.21M|    return b->b_iused++;
  159|  5.21M|}
flowgraph.c:translate_jump_labels_to_targets:
  647|  52.7k|{
  648|  52.7k|    int max_label = get_max_label(entryblock);
  649|  52.7k|    size_t mapsize = sizeof(basicblock *) * (max_label + 1);
  650|  52.7k|    basicblock **label2block = (basicblock **)PyMem_Malloc(mapsize);
  651|  52.7k|    if (!label2block) {
  ------------------
  |  Branch (651:9): [True: 0, False: 52.7k]
  ------------------
  652|      0|        PyErr_NoMemory();
  653|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  654|      0|    }
  655|  52.7k|    memset(label2block, 0, mapsize);
  656|   525k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (656:38): [True: 472k, False: 52.7k]
  ------------------
  657|   472k|        if (b->b_label.id >= 0) {
  ------------------
  |  Branch (657:13): [True: 239k, False: 233k]
  ------------------
  658|   239k|            label2block[b->b_label.id] = b;
  659|   239k|        }
  660|   472k|    }
  661|   525k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (661:38): [True: 472k, False: 52.7k]
  ------------------
  662|  5.51M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (662:25): [True: 5.04M, False: 472k]
  ------------------
  663|  5.04M|            cfg_instr *instr = &b->b_instr[i];
  664|  5.04M|            assert(instr->i_target == NULL);
  ------------------
  |  Branch (664:13): [True: 5.04M, False: 0]
  ------------------
  665|  5.04M|            if (HAS_TARGET(instr->i_opcode)) {
  ------------------
  |  |   23|  5.04M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  10.0M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  5.04M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 238k, False: 4.80M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  4.80M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  9.60M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 43.3k, False: 4.76M]
  |  |  |  |  ------------------
  |  |  |  |   19|  4.80M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  9.56M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 11.4k, False: 4.74M]
  |  |  |  |  ------------------
  |  |  |  |   20|  4.80M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.74M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 20.2k, False: 4.72M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  666|   313k|                int lbl = instr->i_oparg;
  667|   313k|                assert(lbl >= 0 && lbl <= max_label);
  ------------------
  |  Branch (667:17): [True: 313k, False: 0]
  |  Branch (667:17): [True: 313k, False: 0]
  ------------------
  668|   313k|                instr->i_target = label2block[lbl];
  669|   313k|                assert(instr->i_target != NULL);
  ------------------
  |  Branch (669:17): [True: 313k, False: 0]
  ------------------
  670|   313k|                assert(instr->i_target->b_label.id == lbl);
  ------------------
  |  Branch (670:17): [True: 313k, False: 0]
  ------------------
  671|   313k|            }
  672|  5.04M|        }
  673|   472k|    }
  674|  52.7k|    PyMem_Free(label2block);
  675|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
  676|  52.7k|}
flowgraph.c:get_max_label:
  634|   194k|{
  635|   194k|    int lbl = -1;
  636|  2.09M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (636:38): [True: 1.89M, False: 194k]
  ------------------
  637|  1.89M|        if (b->b_label.id > lbl) {
  ------------------
  |  Branch (637:13): [True: 822k, False: 1.07M]
  ------------------
  638|   822k|            lbl = b->b_label.id;
  639|   822k|        }
  640|  1.89M|    }
  641|   194k|    return lbl;
  642|   194k|}
flowgraph.c:mark_except_handlers:
  679|  52.7k|mark_except_handlers(basicblock *entryblock) {
  680|  52.7k|#ifndef NDEBUG
  681|   525k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (681:38): [True: 472k, False: 52.7k]
  ------------------
  682|   472k|        assert(!b->b_except_handler);
  ------------------
  |  Branch (682:9): [True: 472k, False: 0]
  ------------------
  683|   472k|    }
  684|  52.7k|#endif
  685|   525k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (685:38): [True: 472k, False: 52.7k]
  ------------------
  686|  5.51M|        for (int i=0; i < b->b_iused; i++) {
  ------------------
  |  Branch (686:23): [True: 5.04M, False: 472k]
  ------------------
  687|  5.04M|            cfg_instr *instr = &b->b_instr[i];
  688|  5.04M|            if (is_block_push(instr)) {
  ------------------
  |  Branch (688:17): [True: 75.1k, False: 4.96M]
  ------------------
  689|  75.1k|                instr->i_target->b_except_handler = 1;
  690|  75.1k|            }
  691|  5.04M|        }
  692|   472k|    }
  693|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
  694|  52.7k|}
flowgraph.c:is_block_push:
  103|  21.3M|{
  104|  21.3M|    assert(OPCODE_HAS_ARG(i->i_opcode) || !IS_BLOCK_PUSH_OPCODE(i->i_opcode));
  ------------------
  |  Branch (104:5): [True: 0, False: 4.21M]
  |  Branch (104:5): [True: 0, False: 4.21M]
  |  Branch (104:5): [True: 0, False: 4.21M]
  |  Branch (104:5): [True: 17.1M, False: 4.21M]
  ------------------
  105|  21.3M|    return IS_BLOCK_PUSH_OPCODE(i->i_opcode);
  ------------------
  |  |   18|  21.3M|        ((opcode) == SETUP_FINALLY || \
  |  |  ------------------
  |  |  |  |  252|  42.6M|#define SETUP_FINALLY                          264
  |  |  ------------------
  |  |  |  Branch (18:10): [True: 259k, False: 21.0M]
  |  |  ------------------
  |  |   19|  21.3M|         (opcode) == SETUP_WITH || \
  |  |  ------------------
  |  |  |  |  253|  42.4M|#define SETUP_WITH                             265
  |  |  ------------------
  |  |  |  Branch (19:10): [True: 68.5k, False: 21.0M]
  |  |  ------------------
  |  |   20|  21.3M|         (opcode) == SETUP_CLEANUP)
  |  |  ------------------
  |  |  |  |  251|  21.0M|#define SETUP_CLEANUP                          263
  |  |  ------------------
  |  |  |  Branch (20:10): [True: 121k, False: 20.8M]
  |  |  ------------------
  ------------------
  106|  21.3M|}
flowgraph.c:label_exception_targets:
  897|  52.7k|label_exception_targets(basicblock *entryblock) {
  898|  52.7k|    basicblock **todo_stack = make_cfg_traversal_stack(entryblock);
  899|  52.7k|    if (todo_stack == NULL) {
  ------------------
  |  Branch (899:9): [True: 0, False: 52.7k]
  ------------------
  900|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  901|      0|    }
  902|  52.7k|    struct _PyCfgExceptStack *except_stack = make_except_stack();
  903|  52.7k|    if (except_stack == NULL) {
  ------------------
  |  Branch (903:9): [True: 0, False: 52.7k]
  ------------------
  904|      0|        PyMem_Free(todo_stack);
  905|      0|        PyErr_NoMemory();
  906|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  907|      0|    }
  908|  52.7k|    except_stack->depth = 0;
  909|  52.7k|    todo_stack[0] = entryblock;
  910|  52.7k|    entryblock->b_visited = 1;
  911|  52.7k|    entryblock->b_exceptstack = except_stack;
  912|  52.7k|    basicblock **todo = &todo_stack[1];
  913|  52.7k|    basicblock *handler = NULL;
  914|   489k|    while (todo > todo_stack) {
  ------------------
  |  Branch (914:12): [True: 437k, False: 52.7k]
  ------------------
  915|   437k|        todo--;
  916|   437k|        basicblock *b = todo[0];
  917|   437k|        assert(b->b_visited == 1);
  ------------------
  |  Branch (917:9): [True: 437k, False: 0]
  ------------------
  918|   437k|        except_stack = b->b_exceptstack;
  919|   437k|        assert(except_stack != NULL);
  ------------------
  |  Branch (919:9): [True: 437k, False: 0]
  ------------------
  920|   437k|        b->b_exceptstack = NULL;
  921|   437k|        handler = except_stack_top(except_stack);
  922|   437k|        int last_yield_except_depth = -1;
  923|  5.40M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (923:25): [True: 4.96M, False: 437k]
  ------------------
  924|  4.96M|            cfg_instr *instr = &b->b_instr[i];
  925|  4.96M|            if (is_block_push(instr)) {
  ------------------
  |  Branch (925:17): [True: 74.9k, False: 4.89M]
  ------------------
  926|  74.9k|                if (!instr->i_target->b_visited) {
  ------------------
  |  Branch (926:21): [True: 74.9k, False: 0]
  ------------------
  927|  74.9k|                    struct _PyCfgExceptStack *copy = copy_except_stack(except_stack);
  928|  74.9k|                    if (copy == NULL) {
  ------------------
  |  Branch (928:25): [True: 0, False: 74.9k]
  ------------------
  929|      0|                        goto error;
  930|      0|                    }
  931|  74.9k|                    instr->i_target->b_exceptstack = copy;
  932|  74.9k|                    todo[0] = instr->i_target;
  933|  74.9k|                    instr->i_target->b_visited = 1;
  934|  74.9k|                    todo++;
  935|  74.9k|                }
  936|  74.9k|                handler = push_except_block(except_stack, instr);
  937|  74.9k|            }
  938|  4.89M|            else if (instr->i_opcode == POP_BLOCK) {
  ------------------
  |  |  250|  4.89M|#define POP_BLOCK                              262
  ------------------
  |  Branch (938:22): [True: 73.1k, False: 4.81M]
  ------------------
  939|  73.1k|                handler = pop_except_block(except_stack);
  940|  73.1k|                INSTR_SET_OP0(instr, NOP);
  ------------------
  |  |  125|  73.1k|    do { \
  |  |  126|  73.1k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  73.1k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  73.1k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  73.1k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  73.1k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 73.1k]
  |  |  ------------------
  ------------------
  |  Branch (940:17): [True: 73.1k, False: 0]
  ------------------
  941|  73.1k|            }
  942|  4.81M|            else if (is_jump(instr)) {
  ------------------
  |  Branch (942:22): [True: 237k, False: 4.58M]
  ------------------
  943|   237k|                instr->i_except = handler;
  944|   237k|                assert(i == b->b_iused -1);
  ------------------
  |  Branch (944:17): [True: 237k, False: 0]
  ------------------
  945|   237k|                if (!instr->i_target->b_visited) {
  ------------------
  |  Branch (945:21): [True: 122k, False: 115k]
  ------------------
  946|   122k|                    if (BB_HAS_FALLTHROUGH(b)) {
  ------------------
  |  |  251|   122k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 90.0k, False: 32.6k]
  |  |  ------------------
  ------------------
  947|  90.0k|                        struct _PyCfgExceptStack *copy = copy_except_stack(except_stack);
  948|  90.0k|                        if (copy == NULL) {
  ------------------
  |  Branch (948:29): [True: 0, False: 90.0k]
  ------------------
  949|      0|                            goto error;
  950|      0|                        }
  951|  90.0k|                        instr->i_target->b_exceptstack = copy;
  952|  90.0k|                    }
  953|  32.6k|                    else {
  954|  32.6k|                        instr->i_target->b_exceptstack = except_stack;
  955|  32.6k|                        except_stack = NULL;
  956|  32.6k|                    }
  957|   122k|                    todo[0] = instr->i_target;
  958|   122k|                    instr->i_target->b_visited = 1;
  959|   122k|                    todo++;
  960|   122k|                }
  961|   237k|            }
  962|  4.58M|            else if (instr->i_opcode == YIELD_VALUE) {
  ------------------
  |  |  129|  4.58M|#define YIELD_VALUE                            116
  ------------------
  |  Branch (962:22): [True: 35.7k, False: 4.54M]
  ------------------
  963|  35.7k|                instr->i_except = handler;
  964|  35.7k|                last_yield_except_depth = except_stack->depth;
  965|  35.7k|            }
  966|  4.54M|            else if (instr->i_opcode == RESUME) {
  ------------------
  |  |  130|  4.54M|#define RESUME                                 128
  ------------------
  |  Branch (966:22): [True: 88.9k, False: 4.45M]
  ------------------
  967|  88.9k|                instr->i_except = handler;
  968|  88.9k|                if (instr->i_oparg != RESUME_AT_FUNC_START && instr->i_oparg != RESUME_AT_GEN_EXPR_START) {
  ------------------
  |  |   88|   177k|#define RESUME_AT_FUNC_START 0
  ------------------
                              if (instr->i_oparg != RESUME_AT_FUNC_START && instr->i_oparg != RESUME_AT_GEN_EXPR_START) {
  ------------------
  |  |   92|  36.1k|#define RESUME_AT_GEN_EXPR_START 4
  ------------------
  |  Branch (968:21): [True: 36.1k, False: 52.7k]
  |  Branch (968:63): [True: 35.7k, False: 352]
  ------------------
  969|  35.7k|                    assert(last_yield_except_depth >= 0);
  ------------------
  |  Branch (969:21): [True: 35.7k, False: 0]
  ------------------
  970|  35.7k|                    if (last_yield_except_depth == 1) {
  ------------------
  |  Branch (970:25): [True: 810, False: 34.9k]
  ------------------
  971|    810|                        instr->i_oparg |= RESUME_OPARG_DEPTH1_MASK;
  ------------------
  |  |   95|    810|#define RESUME_OPARG_DEPTH1_MASK 0x8
  ------------------
  972|    810|                    }
  973|  35.7k|                    last_yield_except_depth = -1;
  974|  35.7k|                }
  975|  88.9k|            }
  976|  4.45M|            else if (instr->i_opcode == RETURN_GENERATOR) {
  ------------------
  |  |   45|  4.45M|#define RETURN_GENERATOR                        32
  ------------------
  |  Branch (976:22): [True: 2.96k, False: 4.45M]
  ------------------
  977|  2.96k|                instr->i_except = NULL;
  978|  2.96k|            }
  979|  4.45M|            else {
  980|  4.45M|                instr->i_except = handler;
  981|  4.45M|            }
  982|  4.96M|        }
  983|   437k|        if (BB_HAS_FALLTHROUGH(b) && !b->b_next->b_visited) {
  ------------------
  |  |  251|   874k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 242k, False: 195k]
  |  |  ------------------
  ------------------
  |  Branch (983:38): [True: 186k, False: 55.3k]
  ------------------
  984|   186k|            assert(except_stack != NULL);
  ------------------
  |  Branch (984:13): [True: 186k, False: 0]
  ------------------
  985|   186k|            b->b_next->b_exceptstack = except_stack;
  986|   186k|            todo[0] = b->b_next;
  987|   186k|            b->b_next->b_visited = 1;
  988|   186k|            todo++;
  989|   186k|        }
  990|   250k|        else if (except_stack != NULL) {
  ------------------
  |  Branch (990:18): [True: 217k, False: 32.6k]
  ------------------
  991|   217k|           PyMem_Free(except_stack);
  992|   217k|        }
  993|   437k|    }
  994|       |#ifdef Py_DEBUG
  995|       |    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  996|       |        assert(b->b_exceptstack == NULL);
  997|       |    }
  998|       |#endif
  999|  52.7k|    PyMem_Free(todo_stack);
 1000|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 1001|      0|error:
 1002|      0|    PyMem_Free(todo_stack);
 1003|      0|    PyMem_Free(except_stack);
 1004|      0|    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1005|  52.7k|}
flowgraph.c:make_cfg_traversal_stack:
  751|   361k|make_cfg_traversal_stack(basicblock *entryblock) {
  752|   361k|    int nblocks = 0;
  753|  3.98M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (753:38): [True: 3.61M, False: 361k]
  ------------------
  754|  3.61M|        b->b_visited = 0;
  755|  3.61M|        nblocks++;
  756|  3.61M|    }
  757|   361k|    basicblock **stack = (basicblock **)PyMem_Malloc(sizeof(basicblock *) * nblocks);
  758|   361k|    if (!stack) {
  ------------------
  |  Branch (758:9): [True: 0, False: 361k]
  ------------------
  759|      0|        PyErr_NoMemory();
  760|      0|    }
  761|   361k|    return stack;
  762|   361k|}
flowgraph.c:make_except_stack:
  728|  52.7k|make_except_stack(void) {
  729|  52.7k|    struct _PyCfgExceptStack *new = PyMem_Malloc(sizeof(struct _PyCfgExceptStack));
  730|  52.7k|    if (new == NULL) {
  ------------------
  |  Branch (730:9): [True: 0, False: 52.7k]
  ------------------
  731|      0|        PyErr_NoMemory();
  732|      0|        return NULL;
  733|      0|    }
  734|  52.7k|    new->depth = 0;
  735|       |    new->handlers[0] = NULL;
  736|  52.7k|    return new;
  737|  52.7k|}
flowgraph.c:except_stack_top:
  723|   437k|except_stack_top(struct _PyCfgExceptStack *stack) {
  724|   437k|    return stack->handlers[stack->depth];
  725|   437k|}
flowgraph.c:copy_except_stack:
  740|   164k|copy_except_stack(struct _PyCfgExceptStack *stack) {
  741|   164k|    struct _PyCfgExceptStack *copy = PyMem_Malloc(sizeof(struct _PyCfgExceptStack));
  742|   164k|    if (copy == NULL) {
  ------------------
  |  Branch (742:9): [True: 0, False: 164k]
  ------------------
  743|      0|        PyErr_NoMemory();
  744|      0|        return NULL;
  745|      0|    }
  746|   164k|    memcpy(copy, stack, sizeof(struct _PyCfgExceptStack));
  747|   164k|    return copy;
  748|   164k|}
flowgraph.c:push_except_block:
  704|  74.9k|push_except_block(struct _PyCfgExceptStack *stack, cfg_instr *setup) {
  705|  74.9k|    assert(is_block_push(setup));
  ------------------
  |  Branch (705:5): [True: 74.9k, False: 0]
  ------------------
  706|  74.9k|    int opcode = setup->i_opcode;
  707|  74.9k|    basicblock * target = setup->i_target;
  708|  74.9k|    if (opcode == SETUP_WITH || opcode == SETUP_CLEANUP) {
  ------------------
  |  |  253|   149k|#define SETUP_WITH                             265
  ------------------
                  if (opcode == SETUP_WITH || opcode == SETUP_CLEANUP) {
  ------------------
  |  |  251|  63.4k|#define SETUP_CLEANUP                          263
  ------------------
  |  Branch (708:9): [True: 11.4k, False: 63.4k]
  |  Branch (708:33): [True: 20.2k, False: 43.2k]
  ------------------
  709|  31.6k|        target->b_preserve_lasti = 1;
  710|  31.6k|    }
  711|  74.9k|    assert(stack->depth <= CO_MAXBLOCKS);
  ------------------
  |  Branch (711:5): [True: 74.9k, False: 0]
  ------------------
  712|  74.9k|    stack->handlers[++stack->depth] = target;
  713|  74.9k|    return target;
  714|  74.9k|}
flowgraph.c:pop_except_block:
  717|  73.1k|pop_except_block(struct _PyCfgExceptStack *stack) {
  718|  73.1k|    assert(stack->depth > 0);
  ------------------
  |  Branch (718:5): [True: 73.1k, False: 0]
  ------------------
  719|  73.1k|    return stack->handlers[--stack->depth];
  720|  73.1k|}
flowgraph.c:is_jump:
  110|  18.4M|{
  111|  18.4M|    return OPCODE_HAS_JUMP(i->i_opcode);
  ------------------
  |  | 1065|  18.4M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  ------------------
  |  |  |  | 1046|  18.4M|#define HAS_JUMP_FLAG (8)
  |  |  ------------------
  ------------------
  112|  18.4M|}
flowgraph.c:basicblock_nofallthrough:
  243|  4.98M|basicblock_nofallthrough(const basicblock *b) {
  244|  4.98M|    cfg_instr *last = basicblock_last_instr(b);
  245|  4.98M|    return (last &&
  ------------------
  |  Branch (245:13): [True: 4.78M, False: 202k]
  ------------------
  246|  4.78M|            (IS_SCOPE_EXIT_OPCODE(last->i_opcode) ||
  ------------------
  |  |   53|  9.56M|        ((opcode) == RETURN_VALUE || \
  |  |  ------------------
  |  |  |  |   46|  9.56M|#define RETURN_VALUE                            33
  |  |  ------------------
  |  |  |  Branch (53:10): [True: 537k, False: 4.24M]
  |  |  ------------------
  |  |   54|  4.78M|         (opcode) == RAISE_VARARGS || \
  |  |  ------------------
  |  |  |  |  113|  9.02M|#define RAISE_VARARGS                          100
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 162k, False: 4.08M]
  |  |  ------------------
  |  |   55|  9.56M|         (opcode) == RERAISE)
  |  |  ------------------
  |  |  |  |  114|  4.08M|#define RERAISE                                101
  |  |  ------------------
  |  |  |  Branch (55:10): [True: 417k, False: 3.66M]
  |  |  ------------------
  ------------------
  247|  3.66M|             IS_UNCONDITIONAL_JUMP_OPCODE(last->i_opcode)));
  ------------------
  |  |   40|  3.66M|        ((opcode) == JUMP || \
  |  |  ------------------
  |  |  |  |  245|  7.32M|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (40:10): [True: 159k, False: 3.50M]
  |  |  ------------------
  |  |   41|  3.66M|         (opcode) == JUMP_NO_INTERRUPT || \
  |  |  ------------------
  |  |  |  |  248|  7.16M|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (41:10): [True: 726k, False: 2.77M]
  |  |  ------------------
  |  |   42|  3.66M|         (opcode) == JUMP_FORWARD || \
  |  |  ------------------
  |  |  |  |   86|  6.44M|#define JUMP_FORWARD                            73
  |  |  ------------------
  |  |  |  Branch (42:10): [True: 0, False: 2.77M]
  |  |  ------------------
  |  |   43|  3.66M|         (opcode) == JUMP_BACKWARD || \
  |  |  ------------------
  |  |  |  |   84|  6.44M|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 2.77M]
  |  |  ------------------
  |  |   44|  3.66M|         (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
  |  |  ------------------
  |  |  |  |   85|  2.77M|#define JUMP_BACKWARD_NO_INTERRUPT              72
  |  |  ------------------
  |  |  |  Branch (44:10): [True: 0, False: 2.77M]
  |  |  ------------------
  ------------------
  248|  4.98M|}
flowgraph.c:optimize_cfg:
 2670|  52.7k|{
 2671|  52.7k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (2671:5): [True: 52.7k, False: 0]
  ------------------
 2672|  52.7k|    RETURN_IF_ERROR(check_cfg(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2673|  52.7k|    RETURN_IF_ERROR(inline_small_or_no_lineno_blocks(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2674|  52.7k|    RETURN_IF_ERROR(remove_unreachable(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2675|  52.7k|    RETURN_IF_ERROR(resolve_line_numbers(g, firstlineno));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2676|  52.7k|    RETURN_IF_ERROR(optimize_load_const(const_cache, g, consts, consts_index));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2677|   527k|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (2677:43): [True: 474k, False: 52.7k]
  ------------------
 2678|   474k|        RETURN_IF_ERROR(optimize_basic_block(const_cache, b, consts, consts_index));
  ------------------
  |  |   25|   474k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 474k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2679|   474k|    }
 2680|  52.7k|    RETURN_IF_ERROR(remove_redundant_nops_and_pairs(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2681|  52.7k|    RETURN_IF_ERROR(remove_unreachable(g->g_entryblock));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2682|  52.7k|    RETURN_IF_ERROR(remove_redundant_nops_and_jumps(g));
  ------------------
  |  |   25|  52.7k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2683|  52.7k|    assert(no_redundant_jumps(g));
  ------------------
  |  Branch (2683:5): [True: 52.7k, False: 0]
  ------------------
 2684|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 2685|  52.7k|}
flowgraph.c:check_cfg:
  615|  52.7k|check_cfg(cfg_builder *g) {
  616|   525k|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (616:43): [True: 472k, False: 52.7k]
  ------------------
  617|       |        /* Raise SystemError if jump or exit is not last instruction in the block. */
  618|  5.51M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (618:25): [True: 5.04M, False: 472k]
  ------------------
  619|  5.04M|            int opcode = b->b_instr[i].i_opcode;
  620|  5.04M|            assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (620:13): [True: 0, False: 5.04M]
  |  Branch (620:13): [True: 0, False: 5.04M]
  |  Branch (620:13): [True: 0, False: 5.04M]
  ------------------
  621|  5.04M|            if (IS_TERMINATOR_OPCODE(opcode)) {
  ------------------
  |  |   27|  5.04M|        (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  10.0M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  5.04M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 238k, False: 4.80M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_SCOPE_EXIT_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   53|  4.80M|        ((opcode) == RETURN_VALUE || \
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  9.60M|#define RETURN_VALUE                            33
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:10): [True: 85.8k, False: 4.71M]
  |  |  |  |  ------------------
  |  |  |  |   54|  4.80M|         (opcode) == RAISE_VARARGS || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  113|  9.52M|#define RAISE_VARARGS                          100
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:10): [True: 14.7k, False: 4.70M]
  |  |  |  |  ------------------
  |  |  |  |   55|  4.80M|         (opcode) == RERAISE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  114|  4.70M|#define RERAISE                                101
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (55:10): [True: 36.9k, False: 4.66M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|   375k|                if (i != b->b_iused - 1) {
  ------------------
  |  Branch (622:21): [True: 0, False: 375k]
  ------------------
  623|      0|                    PyErr_SetString(PyExc_SystemError, "malformed control flow graph.");
  624|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  625|      0|                }
  626|   375k|            }
  627|  5.04M|        }
  628|   472k|    }
  629|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
  630|  52.7k|}
flowgraph.c:inline_small_or_no_lineno_blocks:
 1262|  52.7k|inline_small_or_no_lineno_blocks(basicblock *entryblock) {
 1263|  52.7k|    bool changes;
 1264|  55.5k|    do {
 1265|  55.5k|        changes = false;
 1266|   872k|        for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (1266:42): [True: 816k, False: 55.5k]
  ------------------
 1267|   816k|            int res = basicblock_inline_small_or_no_lineno_blocks(b);
 1268|   816k|            RETURN_IF_ERROR(res);
  ------------------
  |  |   25|   816k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 816k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1269|   816k|            if (res) {
  ------------------
  |  Branch (1269:17): [True: 12.9k, False: 803k]
  ------------------
 1270|  12.9k|                changes = true;
 1271|  12.9k|            }
 1272|   816k|        }
 1273|  55.5k|    } while(changes); /* every change removes a jump, ensuring convergence */
  ------------------
  |  Branch (1273:13): [True: 2.81k, False: 52.7k]
  ------------------
 1274|  52.7k|    return changes;
 1275|  52.7k|}
flowgraph.c:basicblock_inline_small_or_no_lineno_blocks:
 1228|   816k|basicblock_inline_small_or_no_lineno_blocks(basicblock *bb) {
 1229|   816k|    cfg_instr *last = basicblock_last_instr(bb);
 1230|   816k|    if (last == NULL) {
  ------------------
  |  Branch (1230:9): [True: 0, False: 816k]
  ------------------
 1231|      0|        return 0;
 1232|      0|    }
 1233|   816k|    if (!IS_UNCONDITIONAL_JUMP_OPCODE(last->i_opcode)) {
  ------------------
  |  |   40|   816k|        ((opcode) == JUMP || \
  |  |  ------------------
  |  |  |  |  245|  1.63M|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (40:10): [True: 29.5k, False: 787k]
  |  |  ------------------
  |  |   41|   816k|         (opcode) == JUMP_NO_INTERRUPT || \
  |  |  ------------------
  |  |  |  |  248|  1.60M|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (41:10): [True: 147k, False: 639k]
  |  |  ------------------
  |  |   42|   816k|         (opcode) == JUMP_FORWARD || \
  |  |  ------------------
  |  |  |  |   86|  1.45M|#define JUMP_FORWARD                            73
  |  |  ------------------
  |  |  |  Branch (42:10): [True: 0, False: 639k]
  |  |  ------------------
  |  |   43|   816k|         (opcode) == JUMP_BACKWARD || \
  |  |  ------------------
  |  |  |  |   84|  1.45M|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 639k]
  |  |  ------------------
  |  |   44|   816k|         (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
  |  |  ------------------
  |  |  |  |   85|   639k|#define JUMP_BACKWARD_NO_INTERRUPT              72
  |  |  ------------------
  |  |  |  Branch (44:10): [True: 0, False: 639k]
  |  |  ------------------
  ------------------
 1234|   639k|        return 0;
 1235|   639k|    }
 1236|   177k|    basicblock *target = last->i_target;
 1237|   177k|    bool small_exit_block = (basicblock_exits_scope(target) &&
  ------------------
  |  Branch (1237:30): [True: 8.53k, False: 168k]
  ------------------
 1238|  8.53k|                             target->b_iused <= MAX_COPY_SIZE);
  ------------------
  |  | 1220|  8.53k|#define MAX_COPY_SIZE 4
  ------------------
  |  Branch (1238:30): [True: 6.60k, False: 1.93k]
  ------------------
 1239|   177k|    bool no_lineno_no_fallthrough = (basicblock_has_no_lineno(target) &&
  ------------------
  |  Branch (1239:38): [True: 21.6k, False: 155k]
  ------------------
 1240|  21.6k|                                     !BB_HAS_FALLTHROUGH(target));
  ------------------
  |  |  251|  21.6k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  ------------------
  |  Branch (1240:38): [True: 10.8k, False: 10.8k]
  ------------------
 1241|   177k|    if (small_exit_block || no_lineno_no_fallthrough) {
  ------------------
  |  Branch (1241:9): [True: 6.60k, False: 170k]
  |  Branch (1241:29): [True: 6.32k, False: 164k]
  ------------------
 1242|  12.9k|        assert(is_jump(last));
  ------------------
  |  Branch (1242:9): [True: 12.9k, False: 0]
  ------------------
 1243|  12.9k|        int removed_jump_opcode = last->i_opcode;
 1244|  12.9k|        INSTR_SET_OP0(last, NOP);
  ------------------
  |  |  125|  12.9k|    do { \
  |  |  126|  12.9k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  12.9k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  12.9k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  12.9k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  12.9k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 12.9k]
  |  |  ------------------
  ------------------
  |  Branch (1244:9): [True: 12.9k, False: 0]
  ------------------
 1245|  12.9k|        RETURN_IF_ERROR(basicblock_append_instructions(bb, target));
  ------------------
  |  |   25|  12.9k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 12.9k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1246|  12.9k|        if (no_lineno_no_fallthrough) {
  ------------------
  |  Branch (1246:13): [True: 10.8k, False: 2.07k]
  ------------------
 1247|  10.8k|            last = basicblock_last_instr(bb);
 1248|  10.8k|            if (IS_UNCONDITIONAL_JUMP_OPCODE(last->i_opcode) &&
  ------------------
  |  |   40|  21.6k|        ((opcode) == JUMP || \
  |  |  ------------------
  |  |  |  |  245|  21.6k|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (40:10): [True: 3, False: 10.8k]
  |  |  ------------------
  |  |   41|  10.8k|         (opcode) == JUMP_NO_INTERRUPT || \
  |  |  ------------------
  |  |  |  |  248|  21.6k|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (41:10): [True: 6.28k, False: 4.56k]
  |  |  ------------------
  |  |   42|  10.8k|         (opcode) == JUMP_FORWARD || \
  |  |  ------------------
  |  |  |  |   86|  15.4k|#define JUMP_FORWARD                            73
  |  |  ------------------
  |  |  |  Branch (42:10): [True: 0, False: 4.56k]
  |  |  ------------------
  |  |   43|  10.8k|         (opcode) == JUMP_BACKWARD || \
  |  |  ------------------
  |  |  |  |   84|  15.4k|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 4.56k]
  |  |  ------------------
  |  |   44|  21.6k|         (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
  |  |  ------------------
  |  |  |  |   85|  4.56k|#define JUMP_BACKWARD_NO_INTERRUPT              72
  |  |  ------------------
  |  |  |  Branch (44:10): [True: 0, False: 4.56k]
  |  |  ------------------
  ------------------
 1249|  6.28k|                removed_jump_opcode == JUMP)
  ------------------
  |  |  245|  6.28k|#define JUMP                                   257
  ------------------
  |  Branch (1249:17): [True: 79, False: 6.20k]
  ------------------
 1250|     79|            {
 1251|       |                /* Make sure we don't lose eval breaker checks */
 1252|     79|                last->i_opcode = JUMP;
  ------------------
  |  |  245|     79|#define JUMP                                   257
  ------------------
 1253|     79|            }
 1254|  10.8k|        }
 1255|  12.9k|        target->b_predecessors--;
 1256|  12.9k|        return 1;
 1257|  12.9k|    }
 1258|   164k|    return 0;
 1259|   177k|}
flowgraph.c:basicblock_exits_scope:
  353|  1.10M|basicblock_exits_scope(const basicblock *b) {
  354|  1.10M|    cfg_instr *last = basicblock_last_instr(b);
  355|  1.10M|    return last && IS_SCOPE_EXIT_OPCODE(last->i_opcode);
  ------------------
  |  |   53|  1.09M|        ((opcode) == RETURN_VALUE || \
  |  |  ------------------
  |  |  |  |   46|  2.19M|#define RETURN_VALUE                            33
  |  |  ------------------
  |  |  |  Branch (53:10): [True: 57.8k, False: 1.03M]
  |  |  ------------------
  |  |   54|  1.09M|         (opcode) == RAISE_VARARGS || \
  |  |  ------------------
  |  |  |  |  113|  2.13M|#define RAISE_VARARGS                          100
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 34.3k, False: 1.00M]
  |  |  ------------------
  |  |   55|  1.09M|         (opcode) == RERAISE)
  |  |  ------------------
  |  |  |  |  114|  1.00M|#define RERAISE                                101
  |  |  ------------------
  |  |  |  Branch (55:10): [True: 31.6k, False: 973k]
  |  |  ------------------
  ------------------
  |  Branch (355:12): [True: 1.09M, False: 4.14k]
  ------------------
  356|  1.10M|}
flowgraph.c:basicblock_has_no_lineno:
 1210|   499k|basicblock_has_no_lineno(basicblock *b) {
 1211|   606k|    for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (1211:21): [True: 564k, False: 42.0k]
  ------------------
 1212|   564k|        if (b->b_instr[i].i_loc.lineno >= 0) {
  ------------------
  |  Branch (1212:13): [True: 457k, False: 106k]
  ------------------
 1213|   457k|            return false;
 1214|   457k|        }
 1215|   564k|    }
 1216|  42.0k|    return true;
 1217|   499k|}
flowgraph.c:basicblock_append_instructions:
  231|  15.0k|{
  232|  47.3k|    for (int i = 0; i < from->b_iused; i++) {
  ------------------
  |  Branch (232:21): [True: 32.3k, False: 15.0k]
  ------------------
  233|  32.3k|        int n = basicblock_next_instr(to);
  234|  32.3k|        if (n < 0) {
  ------------------
  |  Branch (234:13): [True: 0, False: 32.3k]
  ------------------
  235|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  236|      0|        }
  237|  32.3k|        to->b_instr[n] = from->b_instr[i];
  238|  32.3k|    }
  239|  15.0k|    return SUCCESS;
  ------------------
  |  |   21|  15.0k|#define SUCCESS 0
  ------------------
  240|  15.0k|}
flowgraph.c:remove_unreachable:
 1010|   105k|remove_unreachable(basicblock *entryblock) {
 1011|  1.05M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (1011:38): [True: 947k, False: 105k]
  ------------------
 1012|   947k|        b->b_predecessors = 0;
 1013|   947k|    }
 1014|   105k|    basicblock **stack = make_cfg_traversal_stack(entryblock);
 1015|   105k|    if (stack == NULL) {
  ------------------
  |  Branch (1015:9): [True: 0, False: 105k]
  ------------------
 1016|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1017|      0|    }
 1018|   105k|    basicblock **sp = stack;
 1019|   105k|    entryblock->b_predecessors = 1;
 1020|   105k|    *sp++ = entryblock;
 1021|   105k|    entryblock->b_visited = 1;
 1022|   953k|    while (sp > stack) {
  ------------------
  |  Branch (1022:12): [True: 848k, False: 105k]
  ------------------
 1023|   848k|        basicblock *b = *(--sp);
 1024|   848k|        if (b->b_next && BB_HAS_FALLTHROUGH(b)) {
  ------------------
  |  |  251|   810k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 464k, False: 345k]
  |  |  ------------------
  ------------------
  |  Branch (1024:13): [True: 810k, False: 38.1k]
  ------------------
 1025|   464k|            if (!b->b_next->b_visited) {
  ------------------
  |  Branch (1025:17): [True: 379k, False: 85.0k]
  ------------------
 1026|   379k|                assert(b->b_next->b_predecessors == 0);
  ------------------
  |  Branch (1026:17): [True: 379k, False: 0]
  ------------------
 1027|   379k|                *sp++ = b->b_next;
 1028|   379k|                b->b_next->b_visited = 1;
 1029|   379k|            }
 1030|   464k|            b->b_next->b_predecessors++;
 1031|   464k|        }
 1032|  9.18M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (1032:25): [True: 8.33M, False: 848k]
  ------------------
 1033|  8.33M|            basicblock *target;
 1034|  8.33M|            cfg_instr *instr = &b->b_instr[i];
 1035|  8.33M|            if (is_jump(instr) || is_block_push(instr)) {
  ------------------
  |  Branch (1035:17): [True: 439k, False: 7.89M]
  |  Branch (1035:35): [True: 149k, False: 7.74M]
  ------------------
 1036|   589k|                target = instr->i_target;
 1037|   589k|                if (!target->b_visited) {
  ------------------
  |  Branch (1037:21): [True: 363k, False: 226k]
  ------------------
 1038|   363k|                    *sp++ = target;
 1039|   363k|                    target->b_visited = 1;
 1040|   363k|                }
 1041|   589k|                target->b_predecessors++;
 1042|   589k|            }
 1043|  8.33M|        }
 1044|   848k|    }
 1045|   105k|    PyMem_Free(stack);
 1046|       |
 1047|       |    /* Delete unreachable instructions */
 1048|  1.05M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (1048:38): [True: 947k, False: 105k]
  ------------------
 1049|   947k|       if (b->b_predecessors == 0) {
  ------------------
  |  Branch (1049:12): [True: 99.0k, False: 848k]
  ------------------
 1050|  99.0k|            b->b_iused = 0;
 1051|  99.0k|            b->b_except_handler = 0;
 1052|  99.0k|       }
 1053|   947k|    }
 1054|   105k|    return SUCCESS;
  ------------------
  |  |   21|   105k|#define SUCCESS 0
  ------------------
 1055|   105k|}
flowgraph.c:optimize_load_const:
 2414|  52.7k|                    _Py_hashtable_t *consts_index) {
 2415|   527k|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (2415:43): [True: 474k, False: 52.7k]
  ------------------
 2416|   474k|        RETURN_IF_ERROR(basicblock_optimize_load_const(const_cache, b, consts, consts_index));
  ------------------
  |  |   25|   474k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 474k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2417|   474k|    }
 2418|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 2419|  52.7k|}
flowgraph.c:basicblock_optimize_load_const:
 2271|   474k|{
 2272|   474k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (2272:5): [True: 474k, False: 0]
  ------------------
 2273|   474k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (2273:5): [True: 474k, False: 0]
  ------------------
 2274|   474k|    int opcode = 0;
 2275|   474k|    int oparg = 0;
 2276|  5.46M|    for (int i = 0; i < bb->b_iused; i++) {
  ------------------
  |  Branch (2276:21): [True: 4.99M, False: 474k]
  ------------------
 2277|  4.99M|        cfg_instr *inst = &bb->b_instr[i];
 2278|  4.99M|        if (inst->i_opcode == LOAD_CONST) {
  ------------------
  |  |   91|  4.99M|#define LOAD_CONST                              78
  ------------------
  |  Branch (2278:13): [True: 1.24M, False: 3.74M]
  ------------------
 2279|  1.24M|            PyObject *constant = get_const_value(inst->i_opcode, inst->i_oparg, consts);
 2280|  1.24M|            if (constant == NULL) {
  ------------------
  |  Branch (2280:17): [True: 0, False: 1.24M]
  ------------------
 2281|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2282|      0|            }
 2283|  1.24M|            int res = maybe_instr_make_load_smallint(inst, constant, consts, const_cache);
 2284|  1.24M|            Py_DECREF(constant);
  ------------------
  |  |  430|  1.24M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2285|  1.24M|            if (res < 0) {
  ------------------
  |  Branch (2285:17): [True: 0, False: 1.24M]
  ------------------
 2286|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2287|      0|            }
 2288|  1.24M|        }
 2289|  4.99M|        bool is_copy_of_load_const = (opcode == LOAD_CONST &&
  ------------------
  |  |   91|  9.98M|#define LOAD_CONST                              78
  ------------------
  |  Branch (2289:39): [True: 697k, False: 4.29M]
  ------------------
 2290|   697k|                                      inst->i_opcode == COPY &&
  ------------------
  |  |   70|  5.68M|#define COPY                                    57
  ------------------
  |  Branch (2290:39): [True: 584, False: 697k]
  ------------------
 2291|    584|                                      inst->i_oparg == 1);
  ------------------
  |  Branch (2291:39): [True: 71, False: 513]
  ------------------
 2292|  4.99M|        if (! is_copy_of_load_const) {
  ------------------
  |  Branch (2292:13): [True: 4.99M, False: 71]
  ------------------
 2293|  4.99M|            opcode = inst->i_opcode;
 2294|  4.99M|            oparg = inst->i_oparg;
 2295|  4.99M|        }
 2296|  4.99M|        assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (2296:9): [True: 0, False: 4.99M]
  |  Branch (2296:9): [True: 0, False: 4.99M]
  |  Branch (2296:9): [True: 0, False: 4.99M]
  ------------------
 2297|  4.99M|        if (!loads_const(opcode)) {
  ------------------
  |  Branch (2297:13): [True: 3.72M, False: 1.26M]
  ------------------
 2298|  3.72M|            continue;
 2299|  3.72M|        }
 2300|  1.26M|        int nextop = i+1 < bb->b_iused ? bb->b_instr[i+1].i_opcode : 0;
  ------------------
  |  Branch (2300:22): [True: 1.22M, False: 36.7k]
  ------------------
 2301|  1.26M|        switch(nextop) {
  ------------------
  |  Branch (2301:16): [True: 8.41k, False: 1.25M]
  ------------------
 2302|  1.32k|            case POP_JUMP_IF_FALSE:
  ------------------
  |  |  109|  1.32k|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (2302:13): [True: 1.32k, False: 1.25M]
  ------------------
 2303|  2.69k|            case POP_JUMP_IF_TRUE:
  ------------------
  |  |  112|  2.69k|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (2303:13): [True: 1.36k, False: 1.25M]
  ------------------
 2304|  3.73k|            case JUMP_IF_FALSE:
  ------------------
  |  |  246|  3.73k|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (2304:13): [True: 1.04k, False: 1.26M]
  ------------------
 2305|  4.63k|            case JUMP_IF_TRUE:
  ------------------
  |  |  247|  4.63k|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (2305:13): [True: 898, False: 1.26M]
  ------------------
 2306|  4.63k|            {
 2307|       |                /* Remove LOAD_CONST const; conditional jump */
 2308|  4.63k|                PyObject* cnt = get_const_value(opcode, oparg, consts);
 2309|  4.63k|                if (cnt == NULL) {
  ------------------
  |  Branch (2309:21): [True: 0, False: 4.63k]
  ------------------
 2310|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2311|      0|                }
 2312|  4.63k|                int is_true = PyObject_IsTrue(cnt);
 2313|  4.63k|                Py_DECREF(cnt);
  ------------------
  |  |  430|  4.63k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.63k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.63k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2314|  4.63k|                if (is_true == -1) {
  ------------------
  |  Branch (2314:21): [True: 0, False: 4.63k]
  ------------------
 2315|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2316|      0|                }
 2317|  4.63k|                if (PyCompile_OpcodeStackEffect(nextop, 0) == -1) {
  ------------------
  |  Branch (2317:21): [True: 2.69k, False: 1.94k]
  ------------------
 2318|       |                    /* POP_JUMP_IF_FALSE or POP_JUMP_IF_TRUE */
 2319|  2.69k|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|  2.69k|    do { \
  |  |  126|  2.69k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  2.69k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  2.69k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  2.69k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  2.69k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 2.69k]
  |  |  ------------------
  ------------------
  |  Branch (2319:21): [True: 2.69k, False: 0]
  ------------------
 2320|  2.69k|                }
 2321|  4.63k|                int jump_if_true = (nextop == POP_JUMP_IF_TRUE || nextop == JUMP_IF_TRUE);
  ------------------
  |  |  112|  9.27k|#define POP_JUMP_IF_TRUE                        99
  ------------------
                              int jump_if_true = (nextop == POP_JUMP_IF_TRUE || nextop == JUMP_IF_TRUE);
  ------------------
  |  |  247|  3.26k|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (2321:37): [True: 1.36k, False: 3.26k]
  |  Branch (2321:67): [True: 898, False: 2.36k]
  ------------------
 2322|  4.63k|                if (is_true == jump_if_true) {
  ------------------
  |  Branch (2322:21): [True: 2.37k, False: 2.26k]
  ------------------
 2323|  2.37k|                    bb->b_instr[i+1].i_opcode = JUMP;
  ------------------
  |  |  245|  2.37k|#define JUMP                                   257
  ------------------
 2324|  2.37k|                }
 2325|  2.26k|                else {
 2326|  2.26k|                    INSTR_SET_OP0(&bb->b_instr[i + 1], NOP);
  ------------------
  |  |  125|  2.26k|    do { \
  |  |  126|  2.26k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  2.26k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  2.26k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  2.26k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  2.26k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 2.26k]
  |  |  ------------------
  ------------------
  |  Branch (2326:21): [True: 2.26k, False: 0]
  ------------------
 2327|  2.26k|                }
 2328|  4.63k|                break;
 2329|  4.63k|            }
 2330|  4.63k|            case IS_OP:
  ------------------
  |  |   83|  1.02k|#define IS_OP                                   70
  ------------------
  |  Branch (2330:13): [True: 1.02k, False: 1.26M]
  ------------------
 2331|  1.02k|            {
 2332|       |                // Fold to POP_JUMP_IF_NONE:
 2333|       |                // - LOAD_CONST(None) IS_OP(0) POP_JUMP_IF_TRUE
 2334|       |                // - LOAD_CONST(None) IS_OP(1) POP_JUMP_IF_FALSE
 2335|       |                // - LOAD_CONST(None) IS_OP(0) TO_BOOL POP_JUMP_IF_TRUE
 2336|       |                // - LOAD_CONST(None) IS_OP(1) TO_BOOL POP_JUMP_IF_FALSE
 2337|       |                // Fold to POP_JUMP_IF_NOT_NONE:
 2338|       |                // - LOAD_CONST(None) IS_OP(0) POP_JUMP_IF_FALSE
 2339|       |                // - LOAD_CONST(None) IS_OP(1) POP_JUMP_IF_TRUE
 2340|       |                // - LOAD_CONST(None) IS_OP(0) TO_BOOL POP_JUMP_IF_FALSE
 2341|       |                // - LOAD_CONST(None) IS_OP(1) TO_BOOL POP_JUMP_IF_TRUE
 2342|  1.02k|                PyObject *cnt = get_const_value(opcode, oparg, consts);
 2343|  1.02k|                if (cnt == NULL) {
  ------------------
  |  Branch (2343:21): [True: 0, False: 1.02k]
  ------------------
 2344|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2345|      0|                }
 2346|  1.02k|                if (!Py_IsNone(cnt)) {
  ------------------
  |  |  621|  1.02k|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|  1.02k|#define Py_Is(x, y) ((x) == (y))
  |  |  ------------------
  ------------------
  |  Branch (2346:21): [True: 1.00k, False: 26]
  ------------------
 2347|  1.00k|                    Py_DECREF(cnt);
  ------------------
  |  |  430|  1.00k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2348|  1.00k|                    break;
 2349|  1.00k|                }
 2350|     26|                if (bb->b_iused <= i + 2) {
  ------------------
  |  Branch (2350:21): [True: 0, False: 26]
  ------------------
 2351|      0|                    break;
 2352|      0|                }
 2353|     26|                cfg_instr *is_instr = &bb->b_instr[i + 1];
 2354|     26|                cfg_instr *jump_instr = &bb->b_instr[i + 2];
 2355|       |                // Get rid of TO_BOOL regardless:
 2356|     26|                if (jump_instr->i_opcode == TO_BOOL) {
  ------------------
  |  |   50|     26|#define TO_BOOL                                 37
  ------------------
  |  Branch (2356:21): [True: 0, False: 26]
  ------------------
 2357|      0|                    INSTR_SET_OP0(jump_instr, NOP);
  ------------------
  |  |  125|      0|    do { \
  |  |  126|      0|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|      0|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|      0|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|      0|        _instr__ptr_->i_oparg = 0; \
  |  |  130|      0|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2357:21): [True: 0, False: 0]
  ------------------
 2358|      0|                    if (bb->b_iused <= i + 3) {
  ------------------
  |  Branch (2358:25): [True: 0, False: 0]
  ------------------
 2359|      0|                        break;
 2360|      0|                    }
 2361|      0|                    jump_instr = &bb->b_instr[i + 3];
 2362|      0|                }
 2363|     26|                bool invert = is_instr->i_oparg;
 2364|     26|                if (jump_instr->i_opcode == POP_JUMP_IF_FALSE) {
  ------------------
  |  |  109|     26|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (2364:21): [True: 25, False: 1]
  ------------------
 2365|     25|                    invert = !invert;
 2366|     25|                }
 2367|      1|                else if (jump_instr->i_opcode != POP_JUMP_IF_TRUE) {
  ------------------
  |  |  112|      1|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (2367:26): [True: 1, False: 0]
  ------------------
 2368|      1|                    break;
 2369|      1|                }
 2370|     25|                INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|     25|    do { \
  |  |  126|     25|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     25|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     25|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     25|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     25|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
  |  Branch (2370:17): [True: 25, False: 0]
  ------------------
 2371|     25|                INSTR_SET_OP0(is_instr, NOP);
  ------------------
  |  |  125|     25|    do { \
  |  |  126|     25|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     25|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     25|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     25|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     25|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 25]
  |  |  ------------------
  ------------------
  |  Branch (2371:17): [True: 25, False: 0]
  ------------------
 2372|     25|                jump_instr->i_opcode = invert ? POP_JUMP_IF_NOT_NONE
  ------------------
  |  |  111|      0|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  |  Branch (2372:40): [True: 0, False: 25]
  ------------------
 2373|     25|                                              : POP_JUMP_IF_NONE;
  ------------------
  |  |  110|     50|#define POP_JUMP_IF_NONE                        97
  ------------------
 2374|     25|                break;
 2375|     25|            }
 2376|  2.75k|            case TO_BOOL:
  ------------------
  |  |   50|  2.75k|#define TO_BOOL                                 37
  ------------------
  |  Branch (2376:13): [True: 2.75k, False: 1.25M]
  ------------------
 2377|  2.75k|            {
 2378|  2.75k|                PyObject *cnt = get_const_value(opcode, oparg, consts);
 2379|  2.75k|                if (cnt == NULL) {
  ------------------
  |  Branch (2379:21): [True: 0, False: 2.75k]
  ------------------
 2380|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2381|      0|                }
 2382|  2.75k|                int is_true = PyObject_IsTrue(cnt);
 2383|  2.75k|                Py_DECREF(cnt);
  ------------------
  |  |  430|  2.75k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.75k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.75k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2384|  2.75k|                if (is_true == -1) {
  ------------------
  |  Branch (2384:21): [True: 0, False: 2.75k]
  ------------------
 2385|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2386|      0|                }
 2387|  2.75k|                cnt = PyBool_FromLong(is_true);
 2388|  2.75k|                int index = add_const(cnt, consts, const_cache, consts_index);
 2389|  2.75k|                if (index < 0) {
  ------------------
  |  Branch (2389:21): [True: 0, False: 2.75k]
  ------------------
 2390|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2391|      0|                }
 2392|  2.75k|                INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|  2.75k|    do { \
  |  |  126|  2.75k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  2.75k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  2.75k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  2.75k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  2.75k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 2.75k]
  |  |  ------------------
  ------------------
  |  Branch (2392:17): [True: 2.75k, False: 0]
  ------------------
 2393|  2.75k|                INSTR_SET_OP1(&bb->b_instr[i + 1], LOAD_CONST, index);
  ------------------
  |  |  116|  2.75k|    do { \
  |  |  117|  2.75k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  2.75k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  2.75k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  2.75k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  2.75k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 2.75k]
  |  |  ------------------
  ------------------
  |  Branch (2393:17): [True: 2.75k, False: 0]
  ------------------
 2394|  2.75k|                break;
 2395|  2.75k|            }
 2396|  1.26M|        }
 2397|  1.26M|        if (inst->i_opcode == LOAD_CONST) {
  ------------------
  |  |   91|  1.26M|#define LOAD_CONST                              78
  ------------------
  |  Branch (2397:13): [True: 730k, False: 530k]
  ------------------
 2398|   730k|            PyObject *constant = get_const_value(inst->i_opcode, inst->i_oparg, consts);
 2399|   730k|            if (constant == NULL) {
  ------------------
  |  Branch (2399:17): [True: 0, False: 730k]
  ------------------
 2400|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2401|      0|            }
 2402|   730k|            int res = maybe_instr_make_load_common_const(inst, constant);
 2403|   730k|            Py_DECREF(constant);
  ------------------
  |  |  430|   730k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   730k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   730k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2404|   730k|            if (res < 0) {
  ------------------
  |  Branch (2404:17): [True: 0, False: 730k]
  ------------------
 2405|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2406|      0|            }
 2407|   730k|        }
 2408|  1.26M|    }
 2409|   474k|    return SUCCESS;
  ------------------
  |  |   21|   474k|#define SUCCESS 0
  ------------------
 2410|   474k|}
flowgraph.c:get_const_value:
 1314|  3.46M|{
 1315|  3.46M|    PyObject *constant = NULL;
 1316|  3.46M|    assert(loads_const(opcode));
  ------------------
  |  Branch (1316:5): [True: 3.46M, False: 0]
  ------------------
 1317|  3.46M|    if (opcode == LOAD_CONST) {
  ------------------
  |  |   91|  3.46M|#define LOAD_CONST                              78
  ------------------
  |  Branch (1317:9): [True: 2.94M, False: 519k]
  ------------------
 1318|  2.94M|        assert(PyList_Check(co_consts));
  ------------------
  |  Branch (1318:9): [True: 2.94M, False: 0]
  ------------------
 1319|  2.94M|        Py_ssize_t n = PyList_GET_SIZE(co_consts);
  ------------------
  |  |   38|  2.94M|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1320|  2.94M|        if (oparg < 0 || oparg >= n) {
  ------------------
  |  Branch (1320:13): [True: 0, False: 2.94M]
  |  Branch (1320:26): [True: 0, False: 2.94M]
  ------------------
 1321|      0|            PyErr_Format(PyExc_ValueError,
 1322|      0|                         "LOAD_CONST index %d is out of range for consts (len=%zd)",
 1323|      0|                         oparg, n);
 1324|      0|            return NULL;
 1325|      0|        }
 1326|  2.94M|        constant = PyList_GET_ITEM(co_consts, oparg);
  ------------------
  |  |   40|  2.94M|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  2.94M|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1326:20): [True: 2.94M, False: 0]
  ------------------
 1327|  2.94M|    }
 1328|  3.46M|    if (opcode == LOAD_SMALL_INT) {
  ------------------
  |  |  103|  3.46M|#define LOAD_SMALL_INT                          90
  ------------------
  |  Branch (1328:9): [True: 472k, False: 2.99M]
  ------------------
 1329|   472k|        return PyLong_FromLong(oparg);
 1330|   472k|    }
 1331|  2.99M|    if (opcode == LOAD_COMMON_CONSTANT) {
  ------------------
  |  |   90|  2.99M|#define LOAD_COMMON_CONSTANT                    77
  ------------------
  |  Branch (1331:9): [True: 46.3k, False: 2.94M]
  ------------------
 1332|  46.3k|        assert(oparg < NUM_COMMON_CONSTANTS);
  ------------------
  |  Branch (1332:9): [True: 46.3k, False: 0]
  ------------------
 1333|  46.3k|        return PyStackRef_AsPyObjectBorrow(
 1334|  46.3k|            _PyInterpreterState_GET()->common_consts[oparg]);
 1335|  46.3k|    }
 1336|       |
 1337|  2.94M|    if (constant == NULL) {
  ------------------
  |  Branch (1337:9): [True: 0, False: 2.94M]
  ------------------
 1338|      0|        PyErr_SetString(PyExc_SystemError,
 1339|      0|                        "Internal error: failed to get value of a constant");
 1340|      0|        return NULL;
 1341|      0|    }
 1342|  2.94M|    return Py_NewRef(constant);
  ------------------
  |  |  550|  2.94M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.94M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.94M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|  2.94M|}
flowgraph.c:maybe_instr_make_load_smallint:
 1434|  2.02M|{
 1435|  2.02M|    if (PyLong_CheckExact(newconst)) {
  ------------------
  |  |   14|  2.02M|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  2.02M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.02M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.10M, False: 912k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1436|  1.10M|        int overflow;
 1437|  1.10M|        long val = PyLong_AsLongAndOverflow(newconst, &overflow);
 1438|  1.10M|        if (val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1438:13): [True: 133k, False: 976k]
  |  Branch (1438:26): [True: 0, False: 133k]
  ------------------
 1439|      0|            return -1;
 1440|      0|        }
 1441|  1.10M|        if (!overflow && _PY_IS_SMALL_INT(val) && 0 <= val && val <= 255) {
  ------------------
  |  |   68|  2.12M|    (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  ------------------
  |  |  |  |   98|  1.01M|#define _PY_NSMALLNEGINTS           5
  |  |  ------------------
  |  |                   (-_PY_NSMALLNEGINTS <= (val) && (val) < _PY_NSMALLPOSINTS)
  |  |  ------------------
  |  |  |  |   97|   914k|#define _PY_NSMALLPOSINTS           1025
  |  |  ------------------
  |  |  |  Branch (68:6): [True: 914k, False: 96.1k]
  |  |  |  Branch (68:37): [True: 676k, False: 237k]
  |  |  ------------------
  ------------------
  |  Branch (1441:13): [True: 1.01M, False: 99.5k]
  |  Branch (1441:51): [True: 630k, False: 45.6k]
  |  Branch (1441:63): [True: 594k, False: 36.4k]
  ------------------
 1442|   594k|            assert(_Py_IsImmortal(newconst));
  ------------------
  |  Branch (1442:13): [True: 594k, False: 0]
  ------------------
 1443|   594k|            INSTR_SET_OP1(instr, LOAD_SMALL_INT, (int)val);
  ------------------
  |  |  116|   594k|    do { \
  |  |  117|   594k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|   594k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|   594k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|   594k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|   594k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 594k]
  |  |  ------------------
  ------------------
  |  Branch (1443:13): [True: 594k, False: 0]
  ------------------
 1444|   594k|            return 1;
 1445|   594k|        }
 1446|  1.10M|    }
 1447|  1.42M|    return 0;
 1448|  2.02M|}
flowgraph.c:loads_const:
 1305|  12.1M|{
 1306|  12.1M|    return OPCODE_HAS_CONST(opcode)
  ------------------
  |  | 1063|  24.2M|#define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
  |  |  ------------------
  |  |  |  | 1044|  12.1M|#define HAS_CONST_FLAG (2)
  |  |  ------------------
  |  |  |  Branch (1063:30): [True: 5.68M, False: 6.43M]
  |  |  ------------------
  ------------------
 1307|  6.43M|        || opcode == LOAD_SMALL_INT
  ------------------
  |  |  103|  18.5M|#define LOAD_SMALL_INT                          90
  ------------------
  |  Branch (1307:12): [True: 1.96M, False: 4.46M]
  ------------------
 1308|  4.46M|        || opcode == LOAD_COMMON_CONSTANT;
  ------------------
  |  |   90|  4.46M|#define LOAD_COMMON_CONSTANT                    77
  ------------------
  |  Branch (1308:12): [True: 158k, False: 4.30M]
  ------------------
 1309|  12.1M|}
flowgraph.c:add_const:
 1349|   658k|{
 1350|   658k|    if (_PyCompile_ConstCacheMergeOne(const_cache, &newconst) < 0) {
  ------------------
  |  Branch (1350:9): [True: 0, False: 658k]
  ------------------
 1351|      0|        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1352|      0|        return -1;
 1353|      0|    }
 1354|       |
 1355|   658k|    _Py_hashtable_entry_t *entry = _Py_hashtable_get_entry(consts_index, (void *)newconst);
 1356|   658k|    if (entry != NULL) {
  ------------------
  |  Branch (1356:9): [True: 492k, False: 165k]
  ------------------
 1357|   492k|        Py_DECREF(newconst);
  ------------------
  |  |  430|   492k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   492k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   492k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1358|   492k|        return (int)(uintptr_t)entry->value;
 1359|   492k|    }
 1360|       |
 1361|   165k|    Py_ssize_t index = PyList_GET_SIZE(consts);
  ------------------
  |  |   38|   165k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   165k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   165k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1362|   165k|    if ((size_t)index >= (size_t)INT_MAX - 1) {
  ------------------
  |  Branch (1362:9): [True: 0, False: 165k]
  ------------------
 1363|      0|        PyErr_SetString(PyExc_OverflowError, "too many constants");
 1364|      0|        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1365|      0|        return -1;
 1366|      0|    }
 1367|   165k|    if (PyList_Append(consts, newconst)) {
  ------------------
  |  Branch (1367:9): [True: 0, False: 165k]
  ------------------
 1368|      0|        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1369|      0|        return -1;
 1370|      0|    }
 1371|       |
 1372|   165k|    if (_Py_hashtable_set(consts_index, (void *)newconst, (void *)(uintptr_t)index) < 0) {
  ------------------
  |  Branch (1372:9): [True: 0, False: 165k]
  ------------------
 1373|      0|        PyList_SetSlice(consts, index, index + 1, NULL);
 1374|      0|        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1375|      0|        PyErr_NoMemory();
 1376|      0|        return -1;
 1377|      0|    }
 1378|       |
 1379|   165k|    Py_DECREF(newconst);
  ------------------
  |  |  430|   165k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   165k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   165k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1380|   165k|    return (int)index;
 1381|   165k|}
flowgraph.c:maybe_instr_make_load_common_const:
 1457|  1.42M|{
 1458|  1.42M|    int oparg;
 1459|  1.42M|    if (newconst == Py_None) {
  ------------------
  |  |  616|  1.42M|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1459:9): [True: 123k, False: 1.30M]
  ------------------
 1460|   123k|        oparg = CONSTANT_NONE;
  ------------------
  |  |   78|   123k|#define CONSTANT_NONE 7
  ------------------
 1461|   123k|    }
 1462|  1.30M|    else if (newconst == Py_True) {
  ------------------
  |  |   26|  1.30M|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|  1.30M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.30M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1462:14): [True: 10.5k, False: 1.29M]
  ------------------
 1463|  10.5k|        oparg = CONSTANT_TRUE;
  ------------------
  |  |   80|  10.5k|#define CONSTANT_TRUE 9
  ------------------
 1464|  10.5k|    }
 1465|  1.29M|    else if (newconst == Py_False) {
  ------------------
  |  |   25|  1.29M|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|  1.29M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.29M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1465:14): [True: 761, False: 1.28M]
  ------------------
 1466|    761|        oparg = CONSTANT_FALSE;
  ------------------
  |  |   81|    761|#define CONSTANT_FALSE 10
  ------------------
 1467|    761|    }
 1468|  1.28M|    else if (PyUnicode_CheckExact(newconst)
  ------------------
  |  |  104|  1.28M|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  2.57M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.28M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.28M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 112k, False: 1.17M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|   112k|             && PyUnicode_GET_LENGTH(newconst) == 0) {
  ------------------
  |  |  299|   112k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   112k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   112k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1469:17): [True: 7.05k, False: 105k]
  ------------------
 1470|  7.05k|        oparg = CONSTANT_EMPTY_STR;
  ------------------
  |  |   79|  7.05k|#define CONSTANT_EMPTY_STR 8
  ------------------
 1471|  7.05k|    }
 1472|  1.28M|    else if (PyTuple_CheckExact(newconst)
  ------------------
  |  |   28|  1.28M|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  2.56M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.28M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.28M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 104k, False: 1.17M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1473|   104k|             && PyTuple_GET_SIZE(newconst) == 0) {
  ------------------
  |  |   27|   104k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   104k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   104k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1473:17): [True: 20.3k, False: 83.9k]
  ------------------
 1474|  20.3k|        oparg = CONSTANT_EMPTY_TUPLE;
  ------------------
  |  |   84|  20.3k|#define CONSTANT_EMPTY_TUPLE 13
  ------------------
 1475|  20.3k|    }
 1476|  1.26M|    else if (PyLong_CheckExact(newconst)) {
  ------------------
  |  |   14|  1.26M|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  1.26M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.26M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.26M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 515k, False: 747k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1477|   515k|        int overflow;
 1478|   515k|        long val = PyLong_AsLongAndOverflow(newconst, &overflow);
 1479|   515k|        if (val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1479:13): [True: 133k, False: 382k]
  |  Branch (1479:26): [True: 0, False: 133k]
  ------------------
 1480|      0|            return -1;
 1481|      0|        }
 1482|   515k|        if (overflow || val != -1) {
  ------------------
  |  Branch (1482:13): [True: 99.5k, False: 415k]
  |  Branch (1482:25): [True: 382k, False: 33.6k]
  ------------------
 1483|   481k|            return 0;
 1484|   481k|        }
 1485|  33.6k|        oparg = CONSTANT_MINUS_ONE;
  ------------------
  |  |   82|  33.6k|#define CONSTANT_MINUS_ONE 11
  ------------------
 1486|  33.6k|    }
 1487|   747k|    else {
 1488|   747k|        return 0;
 1489|   747k|    }
 1490|  1.42M|    assert(_Py_IsImmortal(newconst));
  ------------------
  |  Branch (1490:5): [True: 195k, False: 0]
  ------------------
 1491|   195k|    INSTR_SET_OP1(instr, LOAD_COMMON_CONSTANT, oparg);
  ------------------
  |  |  116|   195k|    do { \
  |  |  117|   195k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|   195k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|   195k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|   195k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|   195k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 195k]
  |  |  ------------------
  ------------------
  |  Branch (1491:5): [True: 195k, False: 0]
  ------------------
 1492|   195k|    return 1;
 1493|   195k|}
flowgraph.c:optimize_basic_block:
 2424|   474k|{
 2425|   474k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (2425:5): [True: 474k, False: 0]
  ------------------
 2426|   474k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (2426:5): [True: 474k, False: 0]
  ------------------
 2427|   474k|    cfg_instr nop;
 2428|   474k|    INSTR_SET_OP0(&nop, NOP);
  ------------------
  |  |  125|   474k|    do { \
  |  |  126|   474k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|   474k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|   474k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|   474k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|   474k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 474k]
  |  |  ------------------
  ------------------
  |  Branch (2428:5): [True: 474k, False: 0]
  ------------------
 2429|  5.46M|    for (int i = 0; i < bb->b_iused; i++) {
  ------------------
  |  Branch (2429:21): [True: 4.99M, False: 474k]
  ------------------
 2430|  4.99M|        cfg_instr *inst = &bb->b_instr[i];
 2431|  4.99M|        cfg_instr *target;
 2432|  4.99M|        int opcode = inst->i_opcode;
 2433|  4.99M|        int oparg = inst->i_oparg;
 2434|  4.99M|        if (HAS_TARGET(opcode)) {
  ------------------
  |  |   23|  4.99M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  9.98M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  4.99M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 229k, False: 4.76M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  4.76M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  9.52M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 43.2k, False: 4.72M]
  |  |  |  |  ------------------
  |  |  |  |   19|  4.76M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  9.48M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 11.4k, False: 4.71M]
  |  |  |  |  ------------------
  |  |  |  |   20|  4.76M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  4.71M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 20.2k, False: 4.68M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2435|   303k|            assert(inst->i_target->b_iused > 0);
  ------------------
  |  Branch (2435:13): [True: 303k, False: 0]
  ------------------
 2436|   303k|            target = &inst->i_target->b_instr[0];
 2437|   303k|            assert(!IS_ASSEMBLER_OPCODE(target->i_opcode));
  ------------------
  |  Branch (2437:13): [True: 0, False: 303k]
  |  Branch (2437:13): [True: 0, False: 303k]
  |  Branch (2437:13): [True: 0, False: 303k]
  ------------------
 2438|   303k|        }
 2439|  4.68M|        else {
 2440|  4.68M|            target = &nop;
 2441|  4.68M|        }
 2442|  4.99M|        int nextop = i+1 < bb->b_iused ? bb->b_instr[i+1].i_opcode : 0;
  ------------------
  |  Branch (2442:22): [True: 4.55M, False: 438k]
  ------------------
 2443|  4.99M|        assert(!IS_ASSEMBLER_OPCODE(opcode));
  ------------------
  |  Branch (2443:9): [True: 0, False: 4.99M]
  |  Branch (2443:9): [True: 0, False: 4.99M]
  |  Branch (2443:9): [True: 0, False: 4.99M]
  ------------------
 2444|  4.99M|        switch (opcode) {
  ------------------
  |  Branch (2444:17): [True: 1.86M, False: 3.12M]
  ------------------
 2445|       |            /* Try to fold tuples of constants.
 2446|       |               Skip over BUILD_TUPLE(1) UNPACK_SEQUENCE(1).
 2447|       |               Replace BUILD_TUPLE(2) UNPACK_SEQUENCE(2) with SWAP(2).
 2448|       |               Replace BUILD_TUPLE(3) UNPACK_SEQUENCE(3) with SWAP(3). */
 2449|  72.4k|            case BUILD_TUPLE:
  ------------------
  |  |   62|  72.4k|#define BUILD_TUPLE                             49
  ------------------
  |  Branch (2449:13): [True: 72.4k, False: 4.92M]
  ------------------
 2450|  72.4k|                if (nextop == UNPACK_SEQUENCE && oparg == bb->b_instr[i+1].i_oparg) {
  ------------------
  |  |  128|   144k|#define UNPACK_SEQUENCE                        115
  ------------------
  |  Branch (2450:21): [True: 327, False: 72.1k]
  |  Branch (2450:50): [True: 136, False: 191]
  ------------------
 2451|    136|                    switch(oparg) {
  ------------------
  |  Branch (2451:28): [True: 114, False: 22]
  ------------------
 2452|     43|                        case 1:
  ------------------
  |  Branch (2452:25): [True: 43, False: 93]
  ------------------
 2453|     43|                            INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|     43|    do { \
  |  |  126|     43|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     43|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     43|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     43|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     43|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
  |  Branch (2453:29): [True: 43, False: 0]
  ------------------
 2454|     43|                            INSTR_SET_OP0(&bb->b_instr[i + 1], NOP);
  ------------------
  |  |  125|     43|    do { \
  |  |  126|     43|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     43|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     43|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     43|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     43|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
  |  Branch (2454:29): [True: 43, False: 0]
  ------------------
 2455|     43|                            continue;
 2456|     17|                        case 2:
  ------------------
  |  Branch (2456:25): [True: 17, False: 119]
  ------------------
 2457|     71|                        case 3:
  ------------------
  |  Branch (2457:25): [True: 54, False: 82]
  ------------------
 2458|     71|                            INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|     71|    do { \
  |  |  126|     71|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     71|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     71|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     71|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     71|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 71]
  |  |  ------------------
  ------------------
  |  Branch (2458:29): [True: 71, False: 0]
  ------------------
 2459|     71|                            bb->b_instr[i+1].i_opcode = SWAP;
  ------------------
  |  |  126|     71|#define SWAP                                   113
  ------------------
 2460|     71|                            continue;
 2461|    136|                    }
 2462|    136|                }
 2463|  72.3k|                RETURN_IF_ERROR(fold_tuple_of_constants(bb, i, consts, const_cache, consts_index));
  ------------------
  |  |   25|  72.3k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 72.3k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2464|  72.3k|                break;
 2465|  6.35k|            case BUILD_LIST:
  ------------------
  |  |   57|  6.35k|#define BUILD_LIST                              44
  ------------------
  |  Branch (2465:13): [True: 6.35k, False: 4.98M]
  ------------------
 2466|  17.3k|            case BUILD_SET:
  ------------------
  |  |   59|  17.3k|#define BUILD_SET                               46
  ------------------
  |  Branch (2466:13): [True: 11.0k, False: 4.98M]
  ------------------
 2467|  17.3k|                RETURN_IF_ERROR(optimize_lists_and_sets(bb, i, nextop, consts, const_cache, consts_index));
  ------------------
  |  |   25|  17.3k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 17.3k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2468|  17.3k|                break;
 2469|  1.16k|            case POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  111|  1.16k|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  |  Branch (2469:13): [True: 1.16k, False: 4.99M]
  ------------------
 2470|  2.67k|            case POP_JUMP_IF_NONE:
  ------------------
  |  |  110|  2.67k|#define POP_JUMP_IF_NONE                        97
  ------------------
  |  Branch (2470:13): [True: 1.50k, False: 4.99M]
  ------------------
 2471|  2.67k|                switch (target->i_opcode) {
  ------------------
  |  Branch (2471:25): [True: 0, False: 2.67k]
  ------------------
 2472|      0|                    case JUMP:
  ------------------
  |  |  245|      0|#define JUMP                                   257
  ------------------
  |  Branch (2472:21): [True: 0, False: 2.67k]
  ------------------
 2473|      0|                        i -= jump_thread(bb, inst, target, inst->i_opcode);
 2474|  2.67k|                }
 2475|  2.67k|                break;
 2476|  82.9k|            case POP_JUMP_IF_FALSE:
  ------------------
  |  |  109|  82.9k|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (2476:13): [True: 82.9k, False: 4.91M]
  ------------------
 2477|  82.9k|                switch (target->i_opcode) {
  ------------------
  |  Branch (2477:25): [True: 56, False: 82.8k]
  ------------------
 2478|     56|                    case JUMP:
  ------------------
  |  |  245|     56|#define JUMP                                   257
  ------------------
  |  Branch (2478:21): [True: 56, False: 82.8k]
  ------------------
 2479|     56|                        i -= jump_thread(bb, inst, target, POP_JUMP_IF_FALSE);
  ------------------
  |  |  109|     56|#define POP_JUMP_IF_FALSE                       96
  ------------------
 2480|  82.9k|                }
 2481|  82.9k|                break;
 2482|  82.9k|            case POP_JUMP_IF_TRUE:
  ------------------
  |  |  112|  12.6k|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (2482:13): [True: 12.6k, False: 4.98M]
  ------------------
 2483|  12.6k|                switch (target->i_opcode) {
  ------------------
  |  Branch (2483:25): [True: 1, False: 12.6k]
  ------------------
 2484|      1|                    case JUMP:
  ------------------
  |  |  245|      1|#define JUMP                                   257
  ------------------
  |  Branch (2484:21): [True: 1, False: 12.6k]
  ------------------
 2485|      1|                        i -= jump_thread(bb, inst, target, POP_JUMP_IF_TRUE);
  ------------------
  |  |  112|      1|#define POP_JUMP_IF_TRUE                        99
  ------------------
 2486|  12.6k|                }
 2487|  12.6k|                break;
 2488|  12.6k|            case JUMP_IF_FALSE:
  ------------------
  |  |  246|  3.20k|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (2488:13): [True: 3.20k, False: 4.99M]
  ------------------
 2489|  3.20k|                switch (target->i_opcode) {
  ------------------
  |  Branch (2489:25): [True: 235, False: 2.96k]
  ------------------
 2490|      0|                    case JUMP:
  ------------------
  |  |  245|      0|#define JUMP                                   257
  ------------------
  |  Branch (2490:21): [True: 0, False: 3.20k]
  ------------------
 2491|      0|                    case JUMP_IF_FALSE:
  ------------------
  |  |  246|      0|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (2491:21): [True: 0, False: 3.20k]
  ------------------
 2492|      0|                        i -= jump_thread(bb, inst, target, JUMP_IF_FALSE);
  ------------------
  |  |  246|      0|#define JUMP_IF_FALSE                          258
  ------------------
 2493|      0|                        continue;
 2494|    235|                    case JUMP_IF_TRUE:
  ------------------
  |  |  247|    235|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (2494:21): [True: 235, False: 2.96k]
  ------------------
 2495|       |                        // No need to check for loops here, a block's b_next
 2496|       |                        // cannot point to itself.
 2497|    235|                        assert(inst->i_target != inst->i_target->b_next);
  ------------------
  |  Branch (2497:25): [True: 235, False: 0]
  ------------------
 2498|    235|                        inst->i_target = inst->i_target->b_next;
 2499|    235|                        i--;
 2500|    235|                        continue;
 2501|  3.20k|                }
 2502|  2.96k|                break;
 2503|  2.96k|            case JUMP_IF_TRUE:
  ------------------
  |  |  247|  2.21k|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (2503:13): [True: 2.21k, False: 4.99M]
  ------------------
 2504|  2.21k|                switch (target->i_opcode) {
  ------------------
  |  Branch (2504:25): [True: 1.12k, False: 1.09k]
  ------------------
 2505|      0|                    case JUMP:
  ------------------
  |  |  245|      0|#define JUMP                                   257
  ------------------
  |  Branch (2505:21): [True: 0, False: 2.21k]
  ------------------
 2506|  1.12k|                    case JUMP_IF_TRUE:
  ------------------
  |  |  247|  1.12k|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (2506:21): [True: 1.12k, False: 1.09k]
  ------------------
 2507|  1.12k|                        i -= jump_thread(bb, inst, target, JUMP_IF_TRUE);
  ------------------
  |  |  247|  1.12k|#define JUMP_IF_TRUE                           259
  ------------------
 2508|  1.12k|                        continue;
 2509|      0|                    case JUMP_IF_FALSE:
  ------------------
  |  |  246|      0|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (2509:21): [True: 0, False: 2.21k]
  ------------------
 2510|       |                        // No need to check for loops here, a block's b_next
 2511|       |                        // cannot point to itself.
 2512|      0|                        assert(inst->i_target != inst->i_target->b_next);
  ------------------
  |  Branch (2512:25): [True: 0, False: 0]
  ------------------
 2513|      0|                        inst->i_target = inst->i_target->b_next;
 2514|      0|                        i--;
 2515|      0|                        continue;
 2516|  2.21k|                }
 2517|  1.09k|                break;
 2518|  19.5k|            case JUMP:
  ------------------
  |  |  245|  19.5k|#define JUMP                                   257
  ------------------
  |  Branch (2518:13): [True: 19.5k, False: 4.97M]
  ------------------
 2519|  86.4k|            case JUMP_NO_INTERRUPT:
  ------------------
  |  |  248|  86.4k|#define JUMP_NO_INTERRUPT                      260
  ------------------
  |  Branch (2519:13): [True: 66.9k, False: 4.92M]
  ------------------
 2520|  86.4k|                switch (target->i_opcode) {
  ------------------
  |  Branch (2520:25): [True: 335, False: 86.1k]
  ------------------
 2521|     53|                    case JUMP:
  ------------------
  |  |  245|     53|#define JUMP                                   257
  ------------------
  |  Branch (2521:21): [True: 53, False: 86.4k]
  ------------------
 2522|     53|                        i -= jump_thread(bb, inst, target, JUMP);
  ------------------
  |  |  245|     53|#define JUMP                                   257
  ------------------
 2523|     53|                        continue;
 2524|    282|                    case JUMP_NO_INTERRUPT:
  ------------------
  |  |  248|    282|#define JUMP_NO_INTERRUPT                      260
  ------------------
  |  Branch (2524:21): [True: 282, False: 86.1k]
  ------------------
 2525|    282|                        i -= jump_thread(bb, inst, target, opcode);
 2526|    282|                        continue;
 2527|  86.4k|                }
 2528|  86.1k|                break;
 2529|  86.1k|            case FOR_ITER:
  ------------------
  |  |   78|  2.46k|#define FOR_ITER                                65
  ------------------
  |  Branch (2529:13): [True: 2.46k, False: 4.99M]
  ------------------
 2530|  2.46k|                if (target->i_opcode == JUMP) {
  ------------------
  |  |  245|  2.46k|#define JUMP                                   257
  ------------------
  |  Branch (2530:21): [True: 0, False: 2.46k]
  ------------------
 2531|       |                    /* This will not work now because the jump (at target) could
 2532|       |                     * be forward or backward and FOR_ITER only jumps forward. We
 2533|       |                     * can re-enable this if ever we implement a backward version
 2534|       |                     * of FOR_ITER.
 2535|       |                     */
 2536|       |                    /*
 2537|       |                    i -= jump_thread(bb, inst, target, FOR_ITER);
 2538|       |                    */
 2539|      0|                }
 2540|  2.46k|                break;
 2541|   109k|            case STORE_FAST:
  ------------------
  |  |  121|   109k|#define STORE_FAST                             108
  ------------------
  |  Branch (2541:13): [True: 109k, False: 4.88M]
  ------------------
 2542|   109k|                if (opcode == nextop &&
  ------------------
  |  Branch (2542:21): [True: 52.6k, False: 56.7k]
  ------------------
 2543|  52.6k|                    oparg == bb->b_instr[i+1].i_oparg &&
  ------------------
  |  Branch (2543:21): [True: 352, False: 52.3k]
  ------------------
 2544|    352|                    bb->b_instr[i].i_loc.lineno == bb->b_instr[i+1].i_loc.lineno) {
  ------------------
  |  Branch (2544:21): [True: 349, False: 3]
  ------------------
 2545|    349|                    bb->b_instr[i].i_opcode = POP_TOP;
  ------------------
  |  |   42|    349|#define POP_TOP                                 29
  ------------------
 2546|    349|                    bb->b_instr[i].i_oparg = 0;
 2547|    349|                }
 2548|   109k|                break;
 2549|   114k|            case SWAP:
  ------------------
  |  |  126|   114k|#define SWAP                                   113
  ------------------
  |  Branch (2549:13): [True: 114k, False: 4.87M]
  ------------------
 2550|   114k|                if (oparg == 1) {
  ------------------
  |  Branch (2550:21): [True: 0, False: 114k]
  ------------------
 2551|      0|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|      0|    do { \
  |  |  126|      0|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|      0|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|      0|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|      0|        _instr__ptr_->i_oparg = 0; \
  |  |  130|      0|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2551:21): [True: 0, False: 0]
  ------------------
 2552|      0|                }
 2553|   114k|                break;
 2554|   114k|            case LOAD_GLOBAL:
  ------------------
  |  |  101|  82.5k|#define LOAD_GLOBAL                             88
  ------------------
  |  Branch (2554:13): [True: 82.5k, False: 4.91M]
  ------------------
 2555|  82.5k|                if (nextop == PUSH_NULL && (oparg & 1) == 0) {
  ------------------
  |  |   44|   165k|#define PUSH_NULL                               31
  ------------------
  |  Branch (2555:21): [True: 1.72k, False: 80.8k]
  |  Branch (2555:44): [True: 1.72k, False: 0]
  ------------------
 2556|  1.72k|                    INSTR_SET_OP1(inst, LOAD_GLOBAL, oparg | 1);
  ------------------
  |  |  116|  1.72k|    do { \
  |  |  117|  1.72k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  1.72k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  1.72k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  1.72k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  1.72k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 1.72k]
  |  |  ------------------
  ------------------
  |  Branch (2556:21): [True: 1.72k, False: 0]
  ------------------
 2557|  1.72k|                    INSTR_SET_OP0(&bb->b_instr[i + 1], NOP);
  ------------------
  |  |  125|  1.72k|    do { \
  |  |  126|  1.72k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  1.72k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  1.72k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  1.72k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  1.72k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 1.72k]
  |  |  ------------------
  ------------------
  |  Branch (2557:21): [True: 1.72k, False: 0]
  ------------------
 2558|  1.72k|                }
 2559|  82.5k|                break;
 2560|  92.1k|            case COMPARE_OP:
  ------------------
  |  |   67|  92.1k|#define COMPARE_OP                              54
  ------------------
  |  Branch (2560:13): [True: 92.1k, False: 4.90M]
  ------------------
 2561|  92.1k|                if (nextop == TO_BOOL) {
  ------------------
  |  |   50|  92.1k|#define TO_BOOL                                 37
  ------------------
  |  Branch (2561:21): [True: 3.77k, False: 88.3k]
  ------------------
 2562|  3.77k|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|  3.77k|    do { \
  |  |  126|  3.77k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  3.77k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  3.77k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  3.77k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  3.77k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 3.77k]
  |  |  ------------------
  ------------------
  |  Branch (2562:21): [True: 3.77k, False: 0]
  ------------------
 2563|  3.77k|                    INSTR_SET_OP1(&bb->b_instr[i + 1], COMPARE_OP, oparg | 16);
  ------------------
  |  |  116|  3.77k|    do { \
  |  |  117|  3.77k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  3.77k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  3.77k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  3.77k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  3.77k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 3.77k]
  |  |  ------------------
  ------------------
  |  Branch (2563:21): [True: 3.77k, False: 0]
  ------------------
 2564|  3.77k|                    continue;
 2565|  3.77k|                }
 2566|  88.3k|                break;
 2567|  88.3k|            case CONTAINS_OP:
  ------------------
  |  |   68|  6.37k|#define CONTAINS_OP                             55
  ------------------
  |  Branch (2567:13): [True: 6.37k, False: 4.98M]
  ------------------
 2568|  13.0k|            case IS_OP:
  ------------------
  |  |   83|  13.0k|#define IS_OP                                   70
  ------------------
  |  Branch (2568:13): [True: 6.71k, False: 4.98M]
  ------------------
 2569|  13.0k|                if (nextop == TO_BOOL) {
  ------------------
  |  |   50|  13.0k|#define TO_BOOL                                 37
  ------------------
  |  Branch (2569:21): [True: 1.47k, False: 11.6k]
  ------------------
 2570|  1.47k|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|  1.47k|    do { \
  |  |  126|  1.47k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  1.47k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  1.47k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  1.47k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  1.47k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 1.47k]
  |  |  ------------------
  ------------------
  |  Branch (2570:21): [True: 1.47k, False: 0]
  ------------------
 2571|  1.47k|                    INSTR_SET_OP1(&bb->b_instr[i + 1], opcode, oparg);
  ------------------
  |  |  116|  1.47k|    do { \
  |  |  117|  1.47k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  1.47k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  1.47k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  1.47k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  1.47k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 1.47k]
  |  |  ------------------
  ------------------
  |  Branch (2571:21): [True: 1.47k, False: 0]
  ------------------
 2572|  1.47k|                    continue;
 2573|  1.47k|                }
 2574|  11.6k|                if (nextop == UNARY_NOT) {
  ------------------
  |  |   53|  11.6k|#define UNARY_NOT                               40
  ------------------
  |  Branch (2574:21): [True: 1.02k, False: 10.6k]
  ------------------
 2575|  1.02k|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|  1.02k|    do { \
  |  |  126|  1.02k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  1.02k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  1.02k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  1.02k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  1.02k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 1.02k]
  |  |  ------------------
  ------------------
  |  Branch (2575:21): [True: 1.02k, False: 0]
  ------------------
 2576|  1.02k|                    int inverted = oparg ^ 1;
 2577|  1.02k|                    assert(inverted == 0 || inverted == 1);
  ------------------
  |  Branch (2577:21): [True: 463, False: 560]
  |  Branch (2577:21): [True: 560, False: 0]
  ------------------
 2578|  1.02k|                    INSTR_SET_OP1(&bb->b_instr[i + 1], opcode, inverted);
  ------------------
  |  |  116|  1.02k|    do { \
  |  |  117|  1.02k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  1.02k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  1.02k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  1.02k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  1.02k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 1.02k]
  |  |  ------------------
  ------------------
  |  Branch (2578:21): [True: 1.02k, False: 0]
  ------------------
 2579|  1.02k|                    continue;
 2580|  1.02k|                }
 2581|  10.6k|                break;
 2582|  72.5k|            case TO_BOOL:
  ------------------
  |  |   50|  72.5k|#define TO_BOOL                                 37
  ------------------
  |  Branch (2582:13): [True: 72.5k, False: 4.92M]
  ------------------
 2583|  72.5k|                if (nextop == TO_BOOL) {
  ------------------
  |  |   50|  72.5k|#define TO_BOOL                                 37
  ------------------
  |  Branch (2583:21): [True: 0, False: 72.5k]
  ------------------
 2584|      0|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|      0|    do { \
  |  |  126|      0|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|      0|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|      0|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|      0|        _instr__ptr_->i_oparg = 0; \
  |  |  130|      0|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2584:21): [True: 0, False: 0]
  ------------------
 2585|      0|                    continue;
 2586|      0|                }
 2587|  72.5k|                break;
 2588|  72.5k|            case UNARY_NOT:
  ------------------
  |  |   53|    332|#define UNARY_NOT                               40
  ------------------
  |  Branch (2588:13): [True: 332, False: 4.99M]
  ------------------
 2589|    332|                if (nextop == TO_BOOL) {
  ------------------
  |  |   50|    332|#define TO_BOOL                                 37
  ------------------
  |  Branch (2589:21): [True: 93, False: 239]
  ------------------
 2590|     93|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|     93|    do { \
  |  |  126|     93|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     93|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     93|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     93|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     93|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  |  Branch (2590:21): [True: 93, False: 0]
  ------------------
 2591|     93|                    INSTR_SET_OP0(&bb->b_instr[i + 1], UNARY_NOT);
  ------------------
  |  |  125|     93|    do { \
  |  |  126|     93|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     93|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     93|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     93|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     93|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  |  Branch (2591:21): [True: 93, False: 0]
  ------------------
 2592|     93|                    continue;
 2593|     93|                }
 2594|    239|                if (nextop == UNARY_NOT) {
  ------------------
  |  |   53|    239|#define UNARY_NOT                               40
  ------------------
  |  Branch (2594:21): [True: 93, False: 146]
  ------------------
 2595|     93|                    INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|     93|    do { \
  |  |  126|     93|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     93|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     93|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     93|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     93|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  |  Branch (2595:21): [True: 93, False: 0]
  ------------------
 2596|     93|                    INSTR_SET_OP0(&bb->b_instr[i + 1], NOP);
  ------------------
  |  |  125|     93|    do { \
  |  |  126|     93|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     93|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     93|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     93|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     93|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 93]
  |  |  ------------------
  ------------------
  |  Branch (2596:21): [True: 93, False: 0]
  ------------------
 2597|     93|                    continue;
 2598|     93|                }
 2599|    146|                _Py_FALLTHROUGH;
  ------------------
  |  |  650|    146|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 2600|  11.9k|            case UNARY_INVERT:
  ------------------
  |  |   51|  11.9k|#define UNARY_INVERT                            38
  ------------------
  |  Branch (2600:13): [True: 11.8k, False: 4.98M]
  ------------------
 2601|   170k|            case UNARY_NEGATIVE:
  ------------------
  |  |   52|   170k|#define UNARY_NEGATIVE                          39
  ------------------
  |  Branch (2601:13): [True: 158k, False: 4.83M]
  ------------------
 2602|   170k|                RETURN_IF_ERROR(fold_const_unaryop(bb, i, consts, const_cache, consts_index));
  ------------------
  |  |   25|   170k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 170k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2603|   170k|                break;
 2604|  76.5k|            case CALL_INTRINSIC_1:
  ------------------
  |  |   64|  76.5k|#define CALL_INTRINSIC_1                        51
  ------------------
  |  Branch (2604:13): [True: 76.5k, False: 4.91M]
  ------------------
 2605|  76.5k|                if (oparg == INTRINSIC_LIST_TO_TUPLE) {
  ------------------
  |  |   15|  76.5k|#define INTRINSIC_LIST_TO_TUPLE                  6
  ------------------
  |  Branch (2605:21): [True: 2.87k, False: 73.6k]
  ------------------
 2606|  2.87k|                    RETURN_IF_ERROR(fold_constant_seq_into_load_const(bb, i, consts, const_cache, consts_index));
  ------------------
  |  |   25|  2.87k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 2.87k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2607|  2.87k|                    if (inst->i_opcode == CALL_INTRINSIC_1 && nextop == GET_ITER) {
  ------------------
  |  |   64|  5.74k|#define CALL_INTRINSIC_1                        51
  ------------------
                                  if (inst->i_opcode == CALL_INTRINSIC_1 && nextop == GET_ITER) {
  ------------------
  |  |   80|  2.76k|#define GET_ITER                                67
  ------------------
  |  Branch (2607:25): [True: 2.76k, False: 102]
  |  Branch (2607:63): [True: 18, False: 2.75k]
  ------------------
 2608|     18|                        INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|     18|    do { \
  |  |  126|     18|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|     18|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|     18|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|     18|        _instr__ptr_->i_oparg = 0; \
  |  |  130|     18|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 18]
  |  |  ------------------
  ------------------
  |  Branch (2608:25): [True: 18, False: 0]
  ------------------
 2609|     18|                    }
 2610|  2.87k|                }
 2611|  73.6k|                else if (oparg == INTRINSIC_UNARY_POSITIVE) {
  ------------------
  |  |   14|  73.6k|#define INTRINSIC_UNARY_POSITIVE                 5
  ------------------
  |  Branch (2611:26): [True: 57.3k, False: 16.3k]
  ------------------
 2612|  57.3k|                    RETURN_IF_ERROR(fold_const_unaryop(bb, i, consts, const_cache, consts_index));
  ------------------
  |  |   25|  57.3k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 57.3k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2613|  57.3k|                }
 2614|  76.5k|                break;
 2615|  76.5k|            case LIST_APPEND:
  ------------------
  |  |   87|  43.3k|#define LIST_APPEND                             74
  ------------------
  |  Branch (2615:13): [True: 43.3k, False: 4.95M]
  ------------------
 2616|  47.2k|            case SET_ADD:
  ------------------
  |  |  116|  47.2k|#define SET_ADD                                103
  ------------------
  |  Branch (2616:13): [True: 3.91k, False: 4.99M]
  ------------------
 2617|  47.2k|                if (oparg == 1 && (nextop == GET_ITER || nextop == CONTAINS_OP)) {
  ------------------
  |  |   80|  88.4k|#define GET_ITER                                67
  ------------------
                              if (oparg == 1 && (nextop == GET_ITER || nextop == CONTAINS_OP)) {
  ------------------
  |  |   68|  44.2k|#define CONTAINS_OP                             55
  ------------------
  |  Branch (2617:21): [True: 44.2k, False: 3.00k]
  |  Branch (2617:36): [True: 0, False: 44.2k]
  |  Branch (2617:58): [True: 1, False: 44.2k]
  ------------------
 2618|      1|                    RETURN_IF_ERROR(fold_constant_seq_into_load_const(
  ------------------
  |  |   25|      1|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2619|      1|                        bb, i, consts, const_cache, consts_index));
 2620|      1|                }
 2621|  47.2k|                break;
 2622|   807k|            case BINARY_OP:
  ------------------
  |  |   55|   807k|#define BINARY_OP                               42
  ------------------
  |  Branch (2622:13): [True: 807k, False: 4.18M]
  ------------------
 2623|   807k|                RETURN_IF_ERROR(fold_const_binop(bb, i, consts, const_cache, consts_index));
  ------------------
  |  |   25|   807k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 807k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2624|   807k|                break;
 2625|  4.99M|        }
 2626|  4.99M|    }
 2627|       |
 2628|  5.45M|    for (int i = 0; i < bb->b_iused; i++) {
  ------------------
  |  Branch (2628:21): [True: 4.97M, False: 474k]
  ------------------
 2629|  4.97M|        cfg_instr *inst = &bb->b_instr[i];
 2630|  4.97M|        if (inst->i_opcode == SWAP) {
  ------------------
  |  |  126|  4.97M|#define SWAP                                   113
  ------------------
  |  Branch (2630:13): [True: 100k, False: 4.87M]
  ------------------
 2631|   100k|            if (swaptimize(bb, &i) < 0) {
  ------------------
  |  Branch (2631:17): [True: 0, False: 100k]
  ------------------
 2632|      0|                goto error;
 2633|      0|            }
 2634|   100k|            apply_static_swaps(bb, i);
 2635|   100k|        }
 2636|  4.97M|    }
 2637|   474k|    return SUCCESS;
  ------------------
  |  |   21|   474k|#define SUCCESS 0
  ------------------
 2638|      0|error:
 2639|      0|    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2640|   474k|}
flowgraph.c:fold_tuple_of_constants:
 1532|  72.3k|{
 1533|       |    /* Pre-conditions */
 1534|  72.3k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (1534:5): [True: 72.3k, False: 0]
  ------------------
 1535|  72.3k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (1535:5): [True: 72.3k, False: 0]
  ------------------
 1536|       |
 1537|  72.3k|    cfg_instr *instr = &bb->b_instr[i];
 1538|  72.3k|    assert(instr->i_opcode == BUILD_TUPLE);
  ------------------
  |  Branch (1538:5): [True: 72.3k, False: 0]
  ------------------
 1539|       |
 1540|  72.3k|    int seq_size = instr->i_oparg;
 1541|  72.3k|    if (seq_size > _PY_STACK_USE_GUIDELINE) {
  ------------------
  |  |   24|  72.3k|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (1541:9): [True: 13, False: 72.3k]
  ------------------
 1542|     13|        return SUCCESS;
  ------------------
  |  |   21|     13|#define SUCCESS 0
  ------------------
 1543|     13|    }
 1544|       |
 1545|  72.3k|    cfg_instr *const_instrs[_PY_STACK_USE_GUIDELINE];
 1546|  72.3k|    if (!get_const_loading_instrs(bb, i-1, const_instrs, seq_size)) {
  ------------------
  |  Branch (1546:9): [True: 34.1k, False: 38.1k]
  ------------------
 1547|       |        /* not a const sequence */
 1548|  34.1k|        return SUCCESS;
  ------------------
  |  |   21|  34.1k|#define SUCCESS 0
  ------------------
 1549|  34.1k|    }
 1550|       |
 1551|  38.1k|    PyObject *const_tuple = PyTuple_New((Py_ssize_t)seq_size);
 1552|  38.1k|    if (const_tuple == NULL) {
  ------------------
  |  Branch (1552:9): [True: 0, False: 38.1k]
  ------------------
 1553|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1554|      0|    }
 1555|       |
 1556|  99.5k|    for (int i = 0; i < seq_size; i++) {
  ------------------
  |  Branch (1556:21): [True: 61.3k, False: 38.1k]
  ------------------
 1557|  61.3k|        cfg_instr *inst = const_instrs[i];
 1558|  61.3k|        assert(loads_const(inst->i_opcode));
  ------------------
  |  Branch (1558:9): [True: 61.3k, False: 0]
  ------------------
 1559|  61.3k|        PyObject *element = get_const_value(inst->i_opcode, inst->i_oparg, consts);
 1560|  61.3k|        if (element == NULL) {
  ------------------
  |  Branch (1560:13): [True: 0, False: 61.3k]
  ------------------
 1561|      0|            Py_DECREF(const_tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1562|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1563|      0|        }
 1564|  61.3k|        PyTuple_SET_ITEM(const_tuple, i, element);
  ------------------
  |  |   40|  61.3k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  61.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  61.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  61.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  61.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1565|  61.3k|    }
 1566|       |
 1567|  38.1k|    nop_out(const_instrs, seq_size);
 1568|  38.1k|    return instr_make_load_const(instr, const_tuple, consts, const_cache, consts_index);
 1569|  38.1k|}
flowgraph.c:get_const_loading_instrs:
 1392|  1.11M|{
 1393|  1.11M|    assert(start < bb->b_iused);
  ------------------
  |  Branch (1393:5): [True: 1.11M, False: 0]
  ------------------
 1394|  1.11M|    assert(size >= 0);
  ------------------
  |  Branch (1394:5): [True: 1.11M, False: 0]
  ------------------
 1395|  1.11M|    assert(size <= _PY_STACK_USE_GUIDELINE);
  ------------------
  |  Branch (1395:5): [True: 1.11M, False: 0]
  ------------------
 1396|       |
 1397|  3.83M|    for (; start >= 0 && size > 0; start--) {
  ------------------
  |  Branch (1397:12): [True: 3.82M, False: 5.61k]
  |  Branch (1397:26): [True: 2.99M, False: 828k]
  ------------------
 1398|  2.99M|        cfg_instr *instr = &bb->b_instr[start];
 1399|  2.99M|        if (instr->i_opcode == NOP) {
  ------------------
  |  |   38|  2.99M|#define NOP                                     25
  ------------------
  |  Branch (1399:13): [True: 1.13M, False: 1.86M]
  ------------------
 1400|  1.13M|            continue;
 1401|  1.13M|        }
 1402|  1.86M|        if (!loads_const(instr->i_opcode)) {
  ------------------
  |  Branch (1402:13): [True: 277k, False: 1.58M]
  ------------------
 1403|   277k|            return false;
 1404|   277k|        }
 1405|  1.58M|        instrs[--size] = instr;
 1406|  1.58M|    }
 1407|       |
 1408|   834k|    return size == 0;
 1409|  1.11M|}
flowgraph.c:nop_out:
 1417|   799k|{
 1418|  2.18M|    for (int i = 0; i < size; i++) {
  ------------------
  |  Branch (1418:21): [True: 1.38M, False: 799k]
  ------------------
 1419|  1.38M|        cfg_instr *instr = instrs[i];
 1420|  1.38M|        assert(instr->i_opcode != NOP);
  ------------------
  |  Branch (1420:9): [True: 1.38M, False: 0]
  ------------------
 1421|  1.38M|        INSTR_SET_OP0(instr, NOP);
  ------------------
  |  |  125|  1.38M|    do { \
  |  |  126|  1.38M|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  1.38M|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  1.38M|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  1.38M|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  1.38M|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 1.38M]
  |  |  ------------------
  ------------------
  |  Branch (1421:9): [True: 1.38M, False: 0]
  ------------------
 1422|  1.38M|        INSTR_SET_LOC(instr, NO_LOCATION);
  ------------------
  |  |  133|  1.38M|    do { \
  |  |  134|  1.38M|        cfg_instr *_instr__ptr_ = (I); \
  |  |  135|  1.38M|        _instr__ptr_->i_loc = (LOC); \
  |  |  136|  1.38M|    } while (0);
  |  |  ------------------
  |  |  |  Branch (136:14): [Folded, False: 1.38M]
  |  |  ------------------
  ------------------
 1423|  1.38M|    }
 1424|   799k|}
flowgraph.c:instr_make_load_const:
 1500|   776k|{
 1501|   776k|    int res = maybe_instr_make_load_smallint(instr, newconst, consts, const_cache);
 1502|   776k|    if (res < 0) {
  ------------------
  |  Branch (1502:9): [True: 0, False: 776k]
  ------------------
 1503|      0|        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1504|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1505|      0|    }
 1506|   776k|    if (res > 0) {
  ------------------
  |  Branch (1506:9): [True: 82.9k, False: 693k]
  ------------------
 1507|  82.9k|        return SUCCESS;
  ------------------
  |  |   21|  82.9k|#define SUCCESS 0
  ------------------
 1508|  82.9k|    }
 1509|   693k|    res = maybe_instr_make_load_common_const(instr, newconst);
 1510|   693k|    if (res < 0) {
  ------------------
  |  Branch (1510:9): [True: 0, False: 693k]
  ------------------
 1511|      0|        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1512|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1513|      0|    }
 1514|   693k|    if (res > 0) {
  ------------------
  |  Branch (1514:9): [True: 42.6k, False: 651k]
  ------------------
 1515|  42.6k|        return SUCCESS;
  ------------------
  |  |   21|  42.6k|#define SUCCESS 0
  ------------------
 1516|  42.6k|    }
 1517|   651k|    int oparg = add_const(newconst, consts, const_cache, consts_index);
 1518|   651k|    RETURN_IF_ERROR(oparg);
  ------------------
  |  |   25|   651k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 651k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1519|   651k|    INSTR_SET_OP1(instr, LOAD_CONST, oparg);
  ------------------
  |  |  116|   651k|    do { \
  |  |  117|   651k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|   651k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|   651k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|   651k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|   651k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 651k]
  |  |  ------------------
  ------------------
  |  Branch (1519:5): [True: 651k, False: 0]
  ------------------
 1520|   651k|    return SUCCESS;
  ------------------
  |  |   21|   651k|#define SUCCESS 0
  ------------------
 1521|   651k|}
flowgraph.c:optimize_lists_and_sets:
 1701|  17.3k|{
 1702|  17.3k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (1702:5): [True: 17.3k, False: 0]
  ------------------
 1703|  17.3k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (1703:5): [True: 17.3k, False: 0]
  ------------------
 1704|       |
 1705|  17.3k|    cfg_instr *instr = &bb->b_instr[i];
 1706|  17.3k|    assert(instr->i_opcode == BUILD_LIST || instr->i_opcode == BUILD_SET);
  ------------------
  |  Branch (1706:5): [True: 6.35k, False: 11.0k]
  |  Branch (1706:5): [True: 11.0k, False: 0]
  ------------------
 1707|       |
 1708|  17.3k|    bool contains_or_iter = nextop == GET_ITER || nextop == CONTAINS_OP;
  ------------------
  |  |   80|  34.7k|#define GET_ITER                                67
  ------------------
                  bool contains_or_iter = nextop == GET_ITER || nextop == CONTAINS_OP;
  ------------------
  |  |   68|  34.7k|#define CONTAINS_OP                             55
  ------------------
  |  Branch (1708:29): [True: 0, False: 17.3k]
  |  Branch (1708:51): [True: 317, False: 17.0k]
  ------------------
 1709|  17.3k|    int seq_size = instr->i_oparg;
 1710|  17.3k|    if (seq_size > _PY_STACK_USE_GUIDELINE ||
  ------------------
  |  |   24|  34.7k|#define _PY_STACK_USE_GUIDELINE 30
  ------------------
  |  Branch (1710:9): [True: 0, False: 17.3k]
  ------------------
 1711|  17.3k|        (seq_size < MIN_CONST_SEQUENCE_SIZE && !contains_or_iter))
  ------------------
  |  | 1685|  34.7k|#define MIN_CONST_SEQUENCE_SIZE 3
  ------------------
  |  Branch (1711:10): [True: 12.6k, False: 4.79k]
  |  Branch (1711:48): [True: 12.2k, False: 317]
  ------------------
 1712|  12.2k|    {
 1713|  12.2k|        return SUCCESS;
  ------------------
  |  |   21|  12.2k|#define SUCCESS 0
  ------------------
 1714|  12.2k|    }
 1715|       |
 1716|  5.11k|    cfg_instr *const_instrs[_PY_STACK_USE_GUIDELINE];
 1717|  5.11k|    if (!get_const_loading_instrs(bb, i-1, const_instrs, seq_size)) {  /* not a const sequence */
  ------------------
  |  Branch (1717:9): [True: 677, False: 4.43k]
  ------------------
 1718|    677|        if (contains_or_iter && instr->i_opcode == BUILD_LIST) {
  ------------------
  |  |   57|    141|#define BUILD_LIST                              44
  ------------------
  |  Branch (1718:13): [True: 141, False: 536]
  |  Branch (1718:33): [True: 3, False: 138]
  ------------------
 1719|       |            /* iterate over a tuple instead of list */
 1720|      3|            INSTR_SET_OP1(instr, BUILD_TUPLE, instr->i_oparg);
  ------------------
  |  |  116|      3|    do { \
  |  |  117|      3|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|      3|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|      3|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|      3|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|      3|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 3]
  |  |  ------------------
  ------------------
  |  Branch (1720:13): [True: 3, False: 0]
  ------------------
 1721|      3|        }
 1722|    677|        return SUCCESS;
  ------------------
  |  |   21|    677|#define SUCCESS 0
  ------------------
 1723|    677|    }
 1724|       |
 1725|  4.43k|    PyObject *const_result = PyTuple_New((Py_ssize_t)seq_size);
 1726|  4.43k|    if (const_result == NULL) {
  ------------------
  |  Branch (1726:9): [True: 0, False: 4.43k]
  ------------------
 1727|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1728|      0|    }
 1729|       |
 1730|  24.7k|    for (int i = 0; i < seq_size; i++) {
  ------------------
  |  Branch (1730:21): [True: 20.3k, False: 4.43k]
  ------------------
 1731|  20.3k|        cfg_instr *inst = const_instrs[i];
 1732|  20.3k|        assert(loads_const(inst->i_opcode));
  ------------------
  |  Branch (1732:9): [True: 20.3k, False: 0]
  ------------------
 1733|  20.3k|        PyObject *element = get_const_value(inst->i_opcode, inst->i_oparg, consts);
 1734|  20.3k|        if (element == NULL) {
  ------------------
  |  Branch (1734:13): [True: 0, False: 20.3k]
  ------------------
 1735|      0|            Py_DECREF(const_result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1736|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1737|      0|        }
 1738|  20.3k|        PyTuple_SET_ITEM(const_result, i, element);
  ------------------
  |  |   40|  20.3k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  20.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  20.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  20.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1739|  20.3k|    }
 1740|       |
 1741|  4.43k|    if (instr->i_opcode == BUILD_SET) {
  ------------------
  |  |   59|  4.43k|#define BUILD_SET                               46
  ------------------
  |  Branch (1741:9): [True: 4.29k, False: 139]
  ------------------
 1742|  4.29k|        PyObject *frozenset = PyFrozenSet_New(const_result);
 1743|  4.29k|        if (frozenset == NULL) {
  ------------------
  |  Branch (1743:13): [True: 0, False: 4.29k]
  ------------------
 1744|      0|            Py_DECREF(const_result);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1745|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1746|      0|        }
 1747|  4.29k|        Py_SETREF(const_result, frozenset);
  ------------------
  |  |  354|  4.29k|    do { \
  |  |  355|  4.29k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  4.29k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|  4.29k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  4.29k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|  4.29k|        *_tmp_dst_ptr = (src); \
  |  |  358|  4.29k|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|  4.29k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  4.29k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  4.29k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|  4.29k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 4.29k]
  |  |  ------------------
  ------------------
 1748|  4.29k|    }
 1749|       |
 1750|  4.43k|    int index = add_const(const_result, consts, const_cache, consts_index);
 1751|  4.43k|    RETURN_IF_ERROR(index);
  ------------------
  |  |   25|  4.43k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 4.43k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1752|  4.43k|    nop_out(const_instrs, seq_size);
 1753|       |
 1754|  4.43k|    if (contains_or_iter) {
  ------------------
  |  Branch (1754:9): [True: 176, False: 4.25k]
  ------------------
 1755|    176|        INSTR_SET_OP1(instr, LOAD_CONST, index);
  ------------------
  |  |  116|    176|    do { \
  |  |  117|    176|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|    176|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|    176|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|    176|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|    176|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 176]
  |  |  ------------------
  ------------------
  |  Branch (1755:9): [True: 176, False: 0]
  ------------------
 1756|    176|    }
 1757|  4.25k|    else {
 1758|  4.25k|        assert(i >= 2);
  ------------------
  |  Branch (1758:9): [True: 4.25k, False: 0]
  ------------------
 1759|  4.25k|        assert(instr->i_opcode == BUILD_LIST || instr->i_opcode == BUILD_SET);
  ------------------
  |  Branch (1759:9): [True: 129, False: 4.13k]
  |  Branch (1759:9): [True: 4.13k, False: 0]
  ------------------
 1760|       |
 1761|  4.25k|        INSTR_SET_LOC(&bb->b_instr[i-2], instr->i_loc);
  ------------------
  |  |  133|  4.25k|    do { \
  |  |  134|  4.25k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  135|  4.25k|        _instr__ptr_->i_loc = (LOC); \
  |  |  136|  4.25k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (136:14): [Folded, False: 4.25k]
  |  |  ------------------
  ------------------
 1762|       |
 1763|  4.25k|        INSTR_SET_OP1(&bb->b_instr[i-2], instr->i_opcode, 0);
  ------------------
  |  |  116|  4.25k|    do { \
  |  |  117|  4.25k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  4.25k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  4.25k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  4.25k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  4.25k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 4.25k]
  |  |  ------------------
  ------------------
  |  Branch (1763:9): [True: 4.25k, False: 0]
  ------------------
 1764|  4.25k|        INSTR_SET_OP1(&bb->b_instr[i-1], LOAD_CONST, index);
  ------------------
  |  |  116|  4.25k|    do { \
  |  |  117|  4.25k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  4.25k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  4.25k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  4.25k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  4.25k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 4.25k]
  |  |  ------------------
  ------------------
  |  Branch (1764:9): [True: 4.25k, False: 0]
  ------------------
 1765|  4.25k|        INSTR_SET_OP1(&bb->b_instr[i], instr->i_opcode == BUILD_LIST ? LIST_EXTEND : SET_UPDATE, 1);
  ------------------
  |  |  116|  4.25k|    do { \
  |  |  117|  4.25k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  4.25k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  8.51k|        _instr__ptr_->i_opcode = (OP); \
  |  |  ------------------
  |  |  |  Branch (119:35): [True: 129, False: 4.13k]
  |  |  ------------------
  |  |  120|  4.25k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  4.25k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 4.25k]
  |  |  ------------------
  ------------------
  |  Branch (1765:9): [True: 129, False: 4.13k]
  |  Branch (1765:9): [True: 4.25k, False: 0]
  ------------------
 1766|  4.25k|    }
 1767|  4.43k|    return SUCCESS;
  ------------------
  |  |   21|  4.43k|#define SUCCESS 0
  ------------------
 1768|  4.43k|}
flowgraph.c:jump_thread:
 1282|  1.51k|{
 1283|  1.51k|    assert(is_jump(inst));
  ------------------
  |  Branch (1283:5): [True: 1.51k, False: 0]
  ------------------
 1284|  1.51k|    assert(is_jump(target));
  ------------------
  |  Branch (1284:5): [True: 1.51k, False: 0]
  ------------------
 1285|  1.51k|    assert(inst == basicblock_last_instr(bb));
  ------------------
  |  Branch (1285:5): [True: 1.51k, False: 0]
  ------------------
 1286|       |    // bpo-45773: If inst->i_target == target->i_target, then nothing actually
 1287|       |    // changes (and we fall into an infinite loop):
 1288|  1.51k|    if (inst->i_target != target->i_target) {
  ------------------
  |  Branch (1288:9): [True: 1.51k, False: 0]
  ------------------
 1289|       |        /* Change inst to NOP and append a jump to target->i_target. The
 1290|       |         * NOP will be removed later if it's not needed for the lineno.
 1291|       |         */
 1292|  1.51k|        INSTR_SET_OP0(inst, NOP);
  ------------------
  |  |  125|  1.51k|    do { \
  |  |  126|  1.51k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  1.51k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  1.51k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  1.51k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  1.51k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 1.51k]
  |  |  ------------------
  ------------------
  |  Branch (1292:9): [True: 1.51k, False: 0]
  ------------------
 1293|       |
 1294|  1.51k|        RETURN_IF_ERROR(
  ------------------
  |  |   25|  1.51k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 1.51k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1295|  1.51k|            basicblock_add_jump(
 1296|  1.51k|                bb, opcode, target->i_target, target->i_loc));
 1297|       |
 1298|  1.51k|        return true;
 1299|  1.51k|    }
 1300|      0|    return false;
 1301|  1.51k|}
flowgraph.c:basicblock_add_jump:
  215|  1.54k|{
  216|  1.54k|    cfg_instr *last = basicblock_last_instr(b);
  217|  1.54k|    if (last && is_jump(last)) {
  ------------------
  |  Branch (217:9): [True: 1.54k, False: 0]
  |  Branch (217:17): [True: 0, False: 1.54k]
  ------------------
  218|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  219|      0|    }
  220|       |
  221|  1.54k|    RETURN_IF_ERROR(
  ------------------
  |  |   25|  1.54k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 1.54k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  222|  1.54k|        basicblock_addop(b, opcode, target->b_label.id, loc));
  223|  1.54k|    last = basicblock_last_instr(b);
  224|  1.54k|    assert(last && last->i_opcode == opcode);
  ------------------
  |  Branch (224:5): [True: 1.54k, False: 0]
  |  Branch (224:5): [True: 1.54k, False: 0]
  ------------------
  225|  1.54k|    last->i_target = target;
  226|  1.54k|    return SUCCESS;
  ------------------
  |  |   21|  1.54k|#define SUCCESS 0
  ------------------
  227|  1.54k|}
flowgraph.c:fold_const_unaryop:
 2038|   227k|{
 2039|   227k|    #define UNARYOP_OPERAND_COUNT 1
 2040|   227k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (2040:5): [True: 227k, False: 0]
  ------------------
 2041|   227k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (2041:5): [True: 227k, False: 0]
  ------------------
 2042|   227k|    cfg_instr *unaryop = &bb->b_instr[i];
 2043|       |
 2044|   227k|    cfg_instr *operand_instr;
 2045|   227k|    if (!get_const_loading_instrs(bb, i-1, &operand_instr, UNARYOP_OPERAND_COUNT)) {
  ------------------
  |  | 2039|   227k|    #define UNARYOP_OPERAND_COUNT 1
  ------------------
  |  Branch (2045:9): [True: 34.9k, False: 192k]
  ------------------
 2046|       |        /* not a const */
 2047|  34.9k|        return SUCCESS;
  ------------------
  |  |   21|  34.9k|#define SUCCESS 0
  ------------------
 2048|  34.9k|    }
 2049|       |
 2050|   227k|    assert(loads_const(operand_instr->i_opcode));
  ------------------
  |  Branch (2050:5): [True: 192k, False: 0]
  ------------------
 2051|   192k|    PyObject *operand = get_const_value(
 2052|   192k|        operand_instr->i_opcode,
 2053|   192k|        operand_instr->i_oparg,
 2054|   192k|        consts
 2055|   192k|    );
 2056|   192k|    if (operand == NULL) {
  ------------------
  |  Branch (2056:9): [True: 0, False: 192k]
  ------------------
 2057|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2058|      0|    }
 2059|       |
 2060|   192k|    PyObject *newconst = eval_const_unaryop(operand, unaryop->i_opcode, unaryop->i_oparg);
 2061|   192k|    Py_DECREF(operand);
  ------------------
  |  |  430|   192k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   192k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   192k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2062|   192k|    if (newconst == NULL) {
  ------------------
  |  Branch (2062:9): [True: 1.50k, False: 190k]
  ------------------
 2063|  1.50k|        if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) {
  ------------------
  |  Branch (2063:13): [True: 0, False: 1.50k]
  ------------------
 2064|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2065|      0|        }
 2066|  1.50k|        PyErr_Clear();
 2067|  1.50k|        return SUCCESS;
  ------------------
  |  |   21|  1.50k|#define SUCCESS 0
  ------------------
 2068|  1.50k|    }
 2069|       |
 2070|   190k|    if (unaryop->i_opcode == UNARY_NOT) {
  ------------------
  |  |   53|   190k|#define UNARY_NOT                               40
  ------------------
  |  Branch (2070:9): [True: 61, False: 190k]
  ------------------
 2071|     61|        assert(PyBool_Check(newconst));
  ------------------
  |  Branch (2071:9): [True: 61, False: 0]
  ------------------
 2072|     61|    }
 2073|   190k|    nop_out(&operand_instr, UNARYOP_OPERAND_COUNT);
  ------------------
  |  | 2039|   190k|    #define UNARYOP_OPERAND_COUNT 1
  ------------------
 2074|   190k|    return instr_make_load_const(unaryop, newconst, consts, const_cache, consts_index);
 2075|   190k|}
flowgraph.c:eval_const_unaryop:
 1995|   192k|{
 1996|   192k|    assert(operand != NULL);
  ------------------
  |  Branch (1996:5): [True: 192k, False: 0]
  ------------------
 1997|   192k|    assert(
  ------------------
  |  Branch (1997:5): [True: 145k, False: 47.3k]
  |  Branch (1997:5): [True: 11.4k, False: 35.8k]
  |  Branch (1997:5): [True: 61, False: 35.8k]
  |  Branch (1997:5): [True: 35.8k, False: 0]
  |  Branch (1997:5): [True: 35.8k, False: 0]
  ------------------
 1998|   192k|        opcode == UNARY_NEGATIVE ||
 1999|   192k|        opcode == UNARY_INVERT ||
 2000|   192k|        opcode == UNARY_NOT ||
 2001|   192k|        (opcode == CALL_INTRINSIC_1 && oparg == INTRINSIC_UNARY_POSITIVE)
 2002|   192k|    );
 2003|   192k|    PyObject *result;
 2004|   192k|    switch (opcode) {
 2005|   145k|        case UNARY_NEGATIVE:
  ------------------
  |  |   52|   145k|#define UNARY_NEGATIVE                          39
  ------------------
  |  Branch (2005:9): [True: 145k, False: 47.3k]
  ------------------
 2006|   145k|            result = PyNumber_Negative(operand);
 2007|   145k|            break;
 2008|  11.4k|        case UNARY_INVERT:
  ------------------
  |  |   51|  11.4k|#define UNARY_INVERT                            38
  ------------------
  |  Branch (2008:9): [True: 11.4k, False: 180k]
  ------------------
 2009|       |            // XXX: This should be removed once the ~bool depreciation expires.
 2010|  11.4k|            if (PyBool_Check(operand)) {
  ------------------
  |  |   12|  11.4k|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|  11.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  11.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  11.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 70, False: 11.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2011|     70|                return NULL;
 2012|     70|            }
 2013|  11.4k|            result = PyNumber_Invert(operand);
 2014|  11.4k|            break;
 2015|     61|        case UNARY_NOT: {
  ------------------
  |  |   53|     61|#define UNARY_NOT                               40
  ------------------
  |  Branch (2015:9): [True: 61, False: 192k]
  ------------------
 2016|     61|            int r = PyObject_IsTrue(operand);
 2017|     61|            if (r < 0) {
  ------------------
  |  Branch (2017:17): [True: 0, False: 61]
  ------------------
 2018|      0|                return NULL;
 2019|      0|            }
 2020|     61|            result = PyBool_FromLong(!r);
 2021|     61|            break;
 2022|     61|        }
 2023|  35.8k|        case CALL_INTRINSIC_1:
  ------------------
  |  |   64|  35.8k|#define CALL_INTRINSIC_1                        51
  ------------------
  |  Branch (2023:9): [True: 35.8k, False: 156k]
  ------------------
 2024|  35.8k|            if (oparg != INTRINSIC_UNARY_POSITIVE) {
  ------------------
  |  |   14|  35.8k|#define INTRINSIC_UNARY_POSITIVE                 5
  ------------------
  |  Branch (2024:17): [True: 0, False: 35.8k]
  ------------------
 2025|      0|                Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2026|      0|            }
 2027|  35.8k|            result = PyNumber_Positive(operand);
 2028|  35.8k|            break;
 2029|      0|        default:
  ------------------
  |  Branch (2029:9): [True: 0, False: 192k]
  ------------------
 2030|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2031|   192k|    }
 2032|   192k|    return result;
 2033|   192k|}
flowgraph.c:fold_constant_seq_into_load_const:
 1594|  2.87k|{
 1595|  2.87k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (1595:5): [True: 2.87k, False: 0]
  ------------------
 1596|  2.87k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (1596:5): [True: 2.87k, False: 0]
  ------------------
 1597|  2.87k|    assert(i >= 0);
  ------------------
  |  Branch (1597:5): [True: 2.87k, False: 0]
  ------------------
 1598|  2.87k|    assert(i < bb->b_iused);
  ------------------
  |  Branch (1598:5): [True: 2.87k, False: 0]
  ------------------
 1599|       |
 1600|  2.87k|    cfg_instr *target = &bb->b_instr[i];
 1601|  2.87k|    assert(target->i_opcode == LIST_APPEND || target->i_opcode == SET_ADD ||
  ------------------
  |  Branch (1601:5): [True: 1, False: 2.87k]
  |  Branch (1601:5): [True: 0, False: 2.87k]
  |  Branch (1601:5): [True: 2.87k, False: 0]
  |  Branch (1601:5): [True: 2.87k, False: 0]
  ------------------
 1602|  2.87k|           (target->i_opcode == CALL_INTRINSIC_1 &&
 1603|  2.87k|            target->i_oparg == INTRINSIC_LIST_TO_TUPLE));
 1604|  2.87k|    bool expected_append = target->i_opcode == CALL_INTRINSIC_1;
  ------------------
  |  |   64|  2.87k|#define CALL_INTRINSIC_1                        51
  ------------------
 1605|  2.87k|    int append_op = expected_append ? LIST_APPEND : target->i_opcode;
  ------------------
  |  |   87|  2.87k|#define LIST_APPEND                             74
  ------------------
  |  Branch (1605:21): [True: 2.87k, False: 1]
  ------------------
 1606|  2.87k|    assert(append_op == LIST_APPEND || append_op == SET_ADD);
  ------------------
  |  Branch (1606:5): [True: 2.87k, False: 0]
  |  Branch (1606:5): [True: 0, False: 0]
  ------------------
 1607|  2.87k|    int build_op = append_op == LIST_APPEND ? BUILD_LIST : BUILD_SET;
  ------------------
  |  |   87|  2.87k|#define LIST_APPEND                             74
  ------------------
                  int build_op = append_op == LIST_APPEND ? BUILD_LIST : BUILD_SET;
  ------------------
  |  |   57|  2.87k|#define BUILD_LIST                              44
  ------------------
                  int build_op = append_op == LIST_APPEND ? BUILD_LIST : BUILD_SET;
  ------------------
  |  |   59|      0|#define BUILD_SET                               46
  ------------------
  |  Branch (1607:20): [True: 2.87k, False: 0]
  ------------------
 1608|  2.87k|    int consts_found = 0;
 1609|       |    /* Walking backward from `i`, we expect LIST_APPEND/SET_ADD and
 1610|       |       LOAD_CONST to alternate. If `i` is the trailing LIST_TO_TUPLE
 1611|       |       intrinsic, the next instruction back is an APPEND. If `i` is the
 1612|       |       trailing APPEND itself, the next instruction back is a LOAD_CONST. */
 1613|  2.87k|    bool expect_append = expected_append;
 1614|       |
 1615|  66.5k|    for (int pos = i - 1; pos >= 0; pos--) {
  ------------------
  |  Branch (1615:27): [True: 66.4k, False: 80]
  ------------------
 1616|  66.4k|        cfg_instr *instr = &bb->b_instr[pos];
 1617|  66.4k|        int opcode = instr->i_opcode;
 1618|  66.4k|        int oparg = instr->i_oparg;
 1619|       |
 1620|  66.4k|        if (opcode == NOP) {
  ------------------
  |  |   38|  66.4k|#define NOP                                     25
  ------------------
  |  Branch (1620:13): [True: 36.5k, False: 29.9k]
  ------------------
 1621|  36.5k|            continue;
 1622|  36.5k|        }
 1623|       |
 1624|  29.9k|        if (opcode == build_op && oparg == 0) {
  ------------------
  |  Branch (1624:13): [True: 220, False: 29.7k]
  |  Branch (1624:35): [True: 103, False: 117]
  ------------------
 1625|    103|            if (!expect_append) {
  ------------------
  |  Branch (1625:17): [True: 1, False: 102]
  ------------------
 1626|       |                /* Not a sequence start. */
 1627|      1|                return SUCCESS;
  ------------------
  |  |   21|      1|#define SUCCESS 0
  ------------------
 1628|      1|            }
 1629|       |
 1630|       |            /* Sequence start, we are done. */
 1631|    102|            PyObject *newconst = PyTuple_New((Py_ssize_t)consts_found);
 1632|    102|            if (newconst == NULL) {
  ------------------
  |  Branch (1632:17): [True: 0, False: 102]
  ------------------
 1633|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1634|      0|            }
 1635|       |
 1636|    102|            int newpos_start = expected_append ? i - 1 : i;
  ------------------
  |  Branch (1636:32): [True: 102, False: 0]
  ------------------
 1637|  43.0k|            for (int newpos = newpos_start; newpos >= pos; newpos--) {
  ------------------
  |  Branch (1637:45): [True: 42.9k, False: 102]
  ------------------
 1638|  42.9k|                instr = &bb->b_instr[newpos];
 1639|  42.9k|                if (instr->i_opcode == NOP) {
  ------------------
  |  |   38|  42.9k|#define NOP                                     25
  ------------------
  |  Branch (1639:21): [True: 24.7k, False: 18.2k]
  ------------------
 1640|  24.7k|                    continue;
 1641|  24.7k|                }
 1642|  18.2k|                if (loads_const(instr->i_opcode)) {
  ------------------
  |  Branch (1642:21): [True: 9.06k, False: 9.16k]
  ------------------
 1643|  9.06k|                    PyObject *constant = get_const_value(instr->i_opcode, instr->i_oparg, consts);
 1644|  9.06k|                    if (constant == NULL) {
  ------------------
  |  Branch (1644:25): [True: 0, False: 9.06k]
  ------------------
 1645|      0|                        Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1646|      0|                        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1647|      0|                    }
 1648|  9.06k|                    assert(consts_found > 0);
  ------------------
  |  Branch (1648:21): [True: 9.06k, False: 0]
  ------------------
 1649|  9.06k|                    PyTuple_SET_ITEM(newconst, --consts_found, constant);
  ------------------
  |  |   40|  9.06k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  9.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  9.06k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.06k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1650|  9.06k|                }
 1651|  18.2k|                nop_out(&instr, 1);
 1652|  18.2k|            }
 1653|    102|            assert(consts_found == 0);
  ------------------
  |  Branch (1653:13): [True: 102, False: 0]
  ------------------
 1654|       |
 1655|    102|            if (build_op == BUILD_SET) {
  ------------------
  |  |   59|    102|#define BUILD_SET                               46
  ------------------
  |  Branch (1655:17): [True: 0, False: 102]
  ------------------
 1656|      0|                PyObject *frozen = PyFrozenSet_New(newconst);
 1657|      0|                Py_DECREF(newconst);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1658|      0|                if (frozen == NULL) {
  ------------------
  |  Branch (1658:21): [True: 0, False: 0]
  ------------------
 1659|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1660|      0|                }
 1661|      0|                newconst = frozen;
 1662|      0|            }
 1663|    102|            return instr_make_load_const(target, newconst, consts, const_cache, consts_index);
 1664|    102|        }
 1665|       |
 1666|  29.8k|        if (expect_append) {
  ------------------
  |  Branch (1666:13): [True: 15.5k, False: 14.3k]
  ------------------
 1667|  15.5k|            if (opcode != append_op || oparg != 1) {
  ------------------
  |  Branch (1667:17): [True: 1.09k, False: 14.4k]
  |  Branch (1667:40): [True: 0, False: 14.4k]
  ------------------
 1668|  1.09k|                return SUCCESS;
  ------------------
  |  |   21|  1.09k|#define SUCCESS 0
  ------------------
 1669|  1.09k|            }
 1670|  15.5k|        }
 1671|  14.3k|        else {
 1672|  14.3k|            if (!loads_const(opcode)) {
  ------------------
  |  Branch (1672:17): [True: 1.59k, False: 12.7k]
  ------------------
 1673|  1.59k|                return SUCCESS;
  ------------------
  |  |   21|  1.59k|#define SUCCESS 0
  ------------------
 1674|  1.59k|            }
 1675|  12.7k|            consts_found++;
 1676|  12.7k|        }
 1677|       |
 1678|  27.1k|        expect_append = !expect_append;
 1679|  27.1k|    }
 1680|       |
 1681|       |    /* Did not find sequence start. */
 1682|     80|    return SUCCESS;
  ------------------
  |  |   21|     80|#define SUCCESS 0
  ------------------
 1683|  2.87k|}
flowgraph.c:fold_const_binop:
 1949|   807k|{
 1950|   807k|    #define BINOP_OPERAND_COUNT 2
 1951|   807k|    assert(PyDict_CheckExact(const_cache));
  ------------------
  |  Branch (1951:5): [True: 807k, False: 0]
  ------------------
 1952|   807k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (1952:5): [True: 807k, False: 0]
  ------------------
 1953|       |
 1954|   807k|    cfg_instr *binop = &bb->b_instr[i];
 1955|   807k|    assert(binop->i_opcode == BINARY_OP);
  ------------------
  |  Branch (1955:5): [True: 807k, False: 0]
  ------------------
 1956|       |
 1957|   807k|    cfg_instr *operands_instrs[BINOP_OPERAND_COUNT];
 1958|   807k|    if (!get_const_loading_instrs(bb, i-1, operands_instrs, BINOP_OPERAND_COUNT)) {
  ------------------
  |  | 1950|   807k|    #define BINOP_OPERAND_COUNT 2
  ------------------
  |  Branch (1958:9): [True: 207k, False: 599k]
  ------------------
 1959|       |        /* not a const sequence */
 1960|   207k|        return SUCCESS;
  ------------------
  |  |   21|   207k|#define SUCCESS 0
  ------------------
 1961|   207k|    }
 1962|       |
 1963|   599k|    cfg_instr *lhs_instr = operands_instrs[0];
 1964|   599k|    assert(loads_const(lhs_instr->i_opcode));
  ------------------
  |  Branch (1964:5): [True: 599k, False: 0]
  ------------------
 1965|   599k|    PyObject *lhs = get_const_value(lhs_instr->i_opcode, lhs_instr->i_oparg, consts);
 1966|   599k|    if (lhs == NULL) {
  ------------------
  |  Branch (1966:9): [True: 0, False: 599k]
  ------------------
 1967|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1968|      0|    }
 1969|       |
 1970|   599k|    cfg_instr *rhs_instr = operands_instrs[1];
 1971|   599k|    assert(loads_const(rhs_instr->i_opcode));
  ------------------
  |  Branch (1971:5): [True: 599k, False: 0]
  ------------------
 1972|   599k|    PyObject *rhs = get_const_value(rhs_instr->i_opcode, rhs_instr->i_oparg, consts);
 1973|   599k|    if (rhs == NULL) {
  ------------------
  |  Branch (1973:9): [True: 0, False: 599k]
  ------------------
 1974|      0|        Py_DECREF(lhs);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1975|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1976|      0|    }
 1977|       |
 1978|   599k|    PyObject *newconst = eval_const_binop(lhs, binop->i_oparg, rhs);
 1979|   599k|    Py_DECREF(lhs);
  ------------------
  |  |  430|   599k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   599k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   599k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1980|   599k|    Py_DECREF(rhs);
  ------------------
  |  |  430|   599k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   599k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   599k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1981|   599k|    if (newconst == NULL) {
  ------------------
  |  Branch (1981:9): [True: 51.4k, False: 547k]
  ------------------
 1982|  51.4k|        if (PyErr_ExceptionMatches(PyExc_KeyboardInterrupt)) {
  ------------------
  |  Branch (1982:13): [True: 0, False: 51.4k]
  ------------------
 1983|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1984|      0|        }
 1985|  51.4k|        PyErr_Clear();
 1986|  51.4k|        return SUCCESS;
  ------------------
  |  |   21|  51.4k|#define SUCCESS 0
  ------------------
 1987|  51.4k|    }
 1988|       |
 1989|   547k|    nop_out(operands_instrs, BINOP_OPERAND_COUNT);
  ------------------
  |  | 1950|   547k|    #define BINOP_OPERAND_COUNT 2
  ------------------
 1990|   547k|    return instr_make_load_const(binop, newconst, consts, const_cache, consts_index);
 1991|   599k|}
flowgraph.c:eval_const_binop:
 1892|   599k|{
 1893|   599k|    assert(left != NULL && right != NULL);
  ------------------
  |  Branch (1893:5): [True: 599k, False: 0]
  |  Branch (1893:5): [True: 599k, False: 0]
  ------------------
 1894|   599k|    assert(op >= 0 && op <= NB_OPARG_LAST);
  ------------------
  |  Branch (1894:5): [True: 599k, False: 0]
  |  Branch (1894:5): [True: 599k, False: 0]
  ------------------
 1895|       |
 1896|   599k|    PyObject *result = NULL;
 1897|   599k|    switch (op) {
 1898|  81.0k|        case NB_ADD:
  ------------------
  |  |   10|  81.0k|#define NB_ADD                                   0
  ------------------
  |  Branch (1898:9): [True: 81.0k, False: 518k]
  ------------------
 1899|  81.0k|            result = PyNumber_Add(left, right);
 1900|  81.0k|            break;
 1901|  81.4k|        case NB_SUBTRACT:
  ------------------
  |  |   20|  81.4k|#define NB_SUBTRACT                             10
  ------------------
  |  Branch (1901:9): [True: 81.4k, False: 517k]
  ------------------
 1902|  81.4k|            result = PyNumber_Subtract(left, right);
 1903|  81.4k|            break;
 1904|   135k|        case NB_MULTIPLY:
  ------------------
  |  |   15|   135k|#define NB_MULTIPLY                              5
  ------------------
  |  Branch (1904:9): [True: 135k, False: 463k]
  ------------------
 1905|   135k|            result = const_folding_safe_multiply(left, right);
 1906|   135k|            break;
 1907|  74.2k|        case NB_TRUE_DIVIDE:
  ------------------
  |  |   21|  74.2k|#define NB_TRUE_DIVIDE                          11
  ------------------
  |  Branch (1907:9): [True: 74.2k, False: 524k]
  ------------------
 1908|  74.2k|            result = PyNumber_TrueDivide(left, right);
 1909|  74.2k|            break;
 1910|  24.6k|        case NB_FLOOR_DIVIDE:
  ------------------
  |  |   12|  24.6k|#define NB_FLOOR_DIVIDE                          2
  ------------------
  |  Branch (1910:9): [True: 24.6k, False: 574k]
  ------------------
 1911|  24.6k|            result = PyNumber_FloorDivide(left, right);
 1912|  24.6k|            break;
 1913|  34.8k|        case NB_REMAINDER:
  ------------------
  |  |   16|  34.8k|#define NB_REMAINDER                             6
  ------------------
  |  Branch (1913:9): [True: 34.8k, False: 564k]
  ------------------
 1914|  34.8k|            result = const_folding_safe_mod(left, right);
 1915|  34.8k|            break;
 1916|   116k|        case NB_POWER:
  ------------------
  |  |   18|   116k|#define NB_POWER                                 8
  ------------------
  |  Branch (1916:9): [True: 116k, False: 482k]
  ------------------
 1917|   116k|            result = const_folding_safe_power(left, right);
 1918|   116k|            break;
 1919|  10.5k|        case NB_LSHIFT:
  ------------------
  |  |   13|  10.5k|#define NB_LSHIFT                                3
  ------------------
  |  Branch (1919:9): [True: 10.5k, False: 588k]
  ------------------
 1920|  10.5k|            result = const_folding_safe_lshift(left, right);
 1921|  10.5k|            break;
 1922|  13.6k|        case NB_RSHIFT:
  ------------------
  |  |   19|  13.6k|#define NB_RSHIFT                                9
  ------------------
  |  Branch (1922:9): [True: 13.6k, False: 585k]
  ------------------
 1923|  13.6k|            result = PyNumber_Rshift(left, right);
 1924|  13.6k|            break;
 1925|  6.67k|        case NB_OR:
  ------------------
  |  |   17|  6.67k|#define NB_OR                                    7
  ------------------
  |  Branch (1925:9): [True: 6.67k, False: 592k]
  ------------------
 1926|  6.67k|            result = PyNumber_Or(left, right);
 1927|  6.67k|            break;
 1928|  5.95k|        case NB_XOR:
  ------------------
  |  |   22|  5.95k|#define NB_XOR                                  12
  ------------------
  |  Branch (1928:9): [True: 5.95k, False: 593k]
  ------------------
 1929|  5.95k|            result = PyNumber_Xor(left, right);
 1930|  5.95k|            break;
 1931|  6.63k|        case NB_AND:
  ------------------
  |  |   11|  6.63k|#define NB_AND                                   1
  ------------------
  |  Branch (1931:9): [True: 6.63k, False: 592k]
  ------------------
 1932|  6.63k|            result = PyNumber_And(left, right);
 1933|  6.63k|            break;
 1934|  6.40k|        case NB_SUBSCR:
  ------------------
  |  |   36|  6.40k|#define NB_SUBSCR                               26
  ------------------
  |  Branch (1934:9): [True: 6.40k, False: 592k]
  ------------------
 1935|  6.40k|            result = PyObject_GetItem(left, right);
 1936|  6.40k|            break;
 1937|    441|        case NB_MATRIX_MULTIPLY:
  ------------------
  |  |   14|    441|#define NB_MATRIX_MULTIPLY                       4
  ------------------
  |  Branch (1937:9): [True: 441, False: 598k]
  ------------------
 1938|       |            // No builtin constants implement matrix multiplication
 1939|    441|            break;
 1940|      0|        default:
  ------------------
  |  Branch (1940:9): [True: 0, False: 599k]
  ------------------
 1941|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1942|   599k|    }
 1943|   599k|    return result;
 1944|   599k|}
flowgraph.c:const_folding_safe_multiply:
 1797|   188k|{
 1798|   188k|    if (PyLong_Check(v) && PyLong_Check(w) &&
  ------------------
  |  |   13|   188k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   376k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 95.5k, False: 92.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyLong_Check(v) && PyLong_Check(w) &&
  ------------------
  |  |   13|  95.5k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   283k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 34.8k, False: 60.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1799|  34.8k|        !_PyLong_IsZero((PyLongObject *)v) && !_PyLong_IsZero((PyLongObject *)w)
  ------------------
  |  Branch (1799:9): [True: 31.7k, False: 3.12k]
  |  Branch (1799:47): [True: 30.3k, False: 1.31k]
  ------------------
 1800|   188k|    ) {
 1801|  30.3k|        int64_t vbits = _PyLong_NumBits(v);
 1802|  30.3k|        int64_t wbits = _PyLong_NumBits(w);
 1803|  30.3k|        assert(vbits >= 0);
  ------------------
  |  Branch (1803:9): [True: 30.3k, False: 0]
  ------------------
 1804|  30.3k|        assert(wbits >= 0);
  ------------------
  |  Branch (1804:9): [True: 30.3k, False: 0]
  ------------------
 1805|  30.3k|        if (vbits + wbits > MAX_INT_SIZE) {
  ------------------
  |  | 1790|  30.3k|#define MAX_INT_SIZE           128  /* bits */
  ------------------
  |  Branch (1805:13): [True: 448, False: 29.9k]
  ------------------
 1806|    448|            return NULL;
 1807|    448|        }
 1808|  30.3k|    }
 1809|   157k|    else if (PyLong_Check(v) && PyTuple_Check(w)) {
  ------------------
  |  |   13|   157k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   315k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 65.1k, False: 92.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  else if (PyLong_Check(v) && PyTuple_Check(w)) {
  ------------------
  |  |   27|  65.1k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  65.1k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 33.0k, False: 32.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1810|  33.0k|        Py_ssize_t size = PyTuple_GET_SIZE(w);
  ------------------
  |  |   27|  33.0k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  33.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  33.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1811|  33.0k|        if (size) {
  ------------------
  |  Branch (1811:13): [True: 32.9k, False: 111]
  ------------------
 1812|  32.9k|            long n = PyLong_AsLong(v);
 1813|  32.9k|            if (n < 0 || n > MAX_COLLECTION_SIZE / size) {
  ------------------
  |  | 1791|  32.5k|#define MAX_COLLECTION_SIZE    256  /* items */
  ------------------
  |  Branch (1813:17): [True: 404, False: 32.5k]
  |  Branch (1813:26): [True: 1.96k, False: 30.5k]
  ------------------
 1814|  2.36k|                return NULL;
 1815|  2.36k|            }
 1816|  30.5k|            if (n && const_folding_check_complexity(w, MAX_TOTAL_ITEMS / n) < 0) {
  ------------------
  |  | 1793|  29.8k|#define MAX_TOTAL_ITEMS       1024  /* including nested collections */
  ------------------
  |  Branch (1816:17): [True: 29.8k, False: 690]
  |  Branch (1816:22): [True: 85, False: 29.8k]
  ------------------
 1817|     85|                return NULL;
 1818|     85|            }
 1819|  30.5k|        }
 1820|  33.0k|    }
 1821|   124k|    else if (PyLong_Check(v) && (PyUnicode_Check(w) || PyBytes_Check(w))) {
  ------------------
  |  |   13|   124k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   249k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 32.0k, False: 92.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  else if (PyLong_Check(v) && (PyUnicode_Check(w) || PyBytes_Check(w))) {
  ------------------
  |  |  103|  32.0k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  64.1k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 13.3k, False: 18.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  else if (PyLong_Check(v) && (PyUnicode_Check(w) || PyBytes_Check(w))) {
  ------------------
  |  |   28|  18.7k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  18.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 7.14k, False: 11.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1822|  20.4k|        Py_ssize_t size = PyUnicode_Check(w) ? PyUnicode_GET_LENGTH(w) :
  ------------------
  |  |  103|  20.4k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  20.4k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 13.3k, False: 7.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      Py_ssize_t size = PyUnicode_Check(w) ? PyUnicode_GET_LENGTH(w) :
  ------------------
  |  |  299|  13.3k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  13.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1823|  20.4k|                                               PyBytes_GET_SIZE(w);
  ------------------
  |  |   33|  7.14k|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|  7.14k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.14k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1824|  20.4k|        if (size) {
  ------------------
  |  Branch (1824:13): [True: 14.3k, False: 6.13k]
  ------------------
 1825|  14.3k|            long n = PyLong_AsLong(v);
 1826|  14.3k|            if (n < 0 || n > MAX_STR_SIZE / size) {
  ------------------
  |  | 1792|  14.0k|#define MAX_STR_SIZE          4096  /* characters */
  ------------------
  |  Branch (1826:17): [True: 268, False: 14.0k]
  |  Branch (1826:26): [True: 652, False: 13.3k]
  ------------------
 1827|    920|                return NULL;
 1828|    920|            }
 1829|  14.3k|        }
 1830|  20.4k|    }
 1831|   104k|    else if (PyLong_Check(w) &&
  ------------------
  |  |   13|   104k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   208k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 71.0k, False: 33.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1832|  71.0k|             (PyTuple_Check(v) || PyUnicode_Check(v) || PyBytes_Check(v)))
  ------------------
  |  |   27|  71.0k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   142k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 32.1k, False: 38.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                           (PyTuple_Check(v) || PyUnicode_Check(v) || PyBytes_Check(v)))
  ------------------
  |  |  103|  38.8k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   109k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 13.2k, False: 25.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                           (PyTuple_Check(v) || PyUnicode_Check(v) || PyBytes_Check(v)))
  ------------------
  |  |   28|  25.5k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  25.5k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 6.86k, False: 18.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1833|  52.2k|    {
 1834|  52.2k|        return const_folding_safe_multiply(w, v);
 1835|  52.2k|    }
 1836|       |
 1837|   132k|    return PyNumber_Multiply(v, w);
 1838|   188k|}
flowgraph.c:const_folding_check_complexity:
 1776|   189k|{
 1777|   189k|    if (PyTuple_Check(obj)) {
  ------------------
  |  |   27|   189k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   189k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 122k, False: 67.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1778|   122k|        Py_ssize_t i;
 1779|   122k|        limit -= PyTuple_GET_SIZE(obj);
  ------------------
  |  |   27|   122k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   122k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   122k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1780|   281k|        for (i = 0; limit >= 0 && i < PyTuple_GET_SIZE(obj); i++) {
  ------------------
  |  |   27|   281k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   281k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   281k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1780:21): [True: 281k, False: 85]
  |  Branch (1780:35): [True: 159k, False: 121k]
  ------------------
 1781|   159k|            limit = const_folding_check_complexity(PyTuple_GET_ITEM(obj, i), limit);
  ------------------
  |  |   29|   159k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|   159k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   159k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1781:52): [True: 159k, False: 0]
  ------------------
 1782|   159k|            if (limit < 0) {
  ------------------
  |  Branch (1782:17): [True: 413, False: 159k]
  ------------------
 1783|    413|                return limit;
 1784|    413|            }
 1785|   159k|        }
 1786|   122k|    }
 1787|   189k|    return limit;
 1788|   189k|}
flowgraph.c:const_folding_safe_mod:
 1882|  34.8k|{
 1883|  34.8k|    if (PyUnicode_Check(v) || PyBytes_Check(v)) {
  ------------------
  |  |  103|  34.8k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  69.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 95, False: 34.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyUnicode_Check(v) || PyBytes_Check(v)) {
  ------------------
  |  |   28|  34.8k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  34.8k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 43, False: 34.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1884|    138|        return NULL;
 1885|    138|    }
 1886|       |
 1887|  34.7k|    return PyNumber_Remainder(v, w);
 1888|  34.8k|}
flowgraph.c:const_folding_safe_power:
 1842|   116k|{
 1843|   116k|    if (PyLong_Check(v) && PyLong_Check(w) &&
  ------------------
  |  |   13|   116k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   233k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 66.0k, False: 50.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyLong_Check(v) && PyLong_Check(w) &&
  ------------------
  |  |   13|  66.0k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   182k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 52.5k, False: 13.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1844|  52.5k|        !_PyLong_IsZero((PyLongObject *)v) && _PyLong_IsPositive((PyLongObject *)w)
  ------------------
  |  Branch (1844:9): [True: 46.3k, False: 6.13k]
  |  Branch (1844:47): [True: 43.7k, False: 2.65k]
  ------------------
 1845|   116k|    ) {
 1846|  43.7k|        int64_t vbits = _PyLong_NumBits(v);
 1847|  43.7k|        size_t wbits = PyLong_AsSize_t(w);
 1848|  43.7k|        assert(vbits >= 0);
  ------------------
  |  Branch (1848:9): [True: 43.7k, False: 0]
  ------------------
 1849|  43.7k|        if (wbits == (size_t)-1) {
  ------------------
  |  Branch (1849:13): [True: 364, False: 43.3k]
  ------------------
 1850|    364|            return NULL;
 1851|    364|        }
 1852|  43.3k|        if ((uint64_t)vbits > MAX_INT_SIZE / wbits) {
  ------------------
  |  | 1790|  43.3k|#define MAX_INT_SIZE           128  /* bits */
  ------------------
  |  Branch (1852:13): [True: 4.72k, False: 38.6k]
  ------------------
 1853|  4.72k|            return NULL;
 1854|  4.72k|        }
 1855|  43.3k|    }
 1856|       |
 1857|   111k|    return PyNumber_Power(v, w, Py_None);
  ------------------
  |  |  616|   111k|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1858|   116k|}
flowgraph.c:const_folding_safe_lshift:
 1862|  10.5k|{
 1863|  10.5k|    if (PyLong_Check(v) && PyLong_Check(w) &&
  ------------------
  |  |   13|  10.5k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  21.0k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 10.3k, False: 216]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyLong_Check(v) && PyLong_Check(w) &&
  ------------------
  |  |   13|  10.3k|        PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  20.8k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 10.1k, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1864|  10.1k|        !_PyLong_IsZero((PyLongObject *)v) && !_PyLong_IsZero((PyLongObject *)w)
  ------------------
  |  Branch (1864:9): [True: 8.88k, False: 1.31k]
  |  Branch (1864:47): [True: 8.73k, False: 146]
  ------------------
 1865|  10.5k|    ) {
 1866|  8.73k|        int64_t vbits = _PyLong_NumBits(v);
 1867|  8.73k|        size_t wbits = PyLong_AsSize_t(w);
 1868|  8.73k|        assert(vbits >= 0);
  ------------------
  |  Branch (1868:9): [True: 8.73k, False: 0]
  ------------------
 1869|  8.73k|        if (wbits == (size_t)-1) {
  ------------------
  |  Branch (1869:13): [True: 759, False: 7.97k]
  ------------------
 1870|    759|            return NULL;
 1871|    759|        }
 1872|  7.97k|        if (wbits > MAX_INT_SIZE || (uint64_t)vbits > MAX_INT_SIZE - wbits) {
  ------------------
  |  | 1790|  15.9k|#define MAX_INT_SIZE           128  /* bits */
  ------------------
                      if (wbits > MAX_INT_SIZE || (uint64_t)vbits > MAX_INT_SIZE - wbits) {
  ------------------
  |  | 1790|  6.37k|#define MAX_INT_SIZE           128  /* bits */
  ------------------
  |  Branch (1872:13): [True: 1.60k, False: 6.37k]
  |  Branch (1872:37): [True: 56, False: 6.31k]
  ------------------
 1873|  1.66k|            return NULL;
 1874|  1.66k|        }
 1875|  7.97k|    }
 1876|       |
 1877|  8.11k|    return PyNumber_Lshift(v, w);
 1878|  10.5k|}
flowgraph.c:swaptimize:
 2083|   100k|{
 2084|       |    // NOTE: "./python -m test test_patma" serves as a good, quick stress test
 2085|       |    // for this function. Make sure to blow away cached *.pyc files first!
 2086|   100k|    assert(*ix < block->b_iused);
  ------------------
  |  Branch (2086:5): [True: 100k, False: 0]
  ------------------
 2087|   100k|    cfg_instr *instructions = &block->b_instr[*ix];
 2088|       |    // Find the length of the current sequence of SWAPs and NOPs, and record the
 2089|       |    // maximum depth of the stack manipulations:
 2090|   100k|    assert(instructions[0].i_opcode == SWAP);
  ------------------
  |  Branch (2090:5): [True: 100k, False: 0]
  ------------------
 2091|   100k|    int depth = instructions[0].i_oparg;
 2092|   100k|    int len = 0;
 2093|   100k|    int more = false;
 2094|   100k|    int limit = block->b_iused - *ix;
 2095|   114k|    while (++len < limit) {
  ------------------
  |  Branch (2095:12): [True: 114k, False: 0]
  ------------------
 2096|   114k|        int opcode = instructions[len].i_opcode;
 2097|   114k|        if (opcode == SWAP) {
  ------------------
  |  |  126|   114k|#define SWAP                                   113
  ------------------
  |  Branch (2097:13): [True: 14.0k, False: 100k]
  ------------------
 2098|  14.0k|            depth = Py_MAX(depth, instructions[len].i_oparg);
  ------------------
  |  |  126|  14.0k|       __extension__ \
  |  |  127|  14.0k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  14.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  14.0k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  14.0k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  14.0k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 1.97k, False: 12.0k]
  |  |  ------------------
  ------------------
 2099|  14.0k|            more = true;
 2100|  14.0k|        }
 2101|   100k|        else if (opcode != NOP) {
  ------------------
  |  |   38|   100k|#define NOP                                     25
  ------------------
  |  Branch (2101:18): [True: 100k, False: 0]
  ------------------
 2102|   100k|            break;
 2103|   100k|        }
 2104|   114k|    }
 2105|       |    // It's already optimal if there's only one SWAP:
 2106|   100k|    if (!more) {
  ------------------
  |  Branch (2106:9): [True: 87.6k, False: 12.6k]
  ------------------
 2107|  87.6k|        return SUCCESS;
  ------------------
  |  |   21|  87.6k|#define SUCCESS 0
  ------------------
 2108|  87.6k|    }
 2109|       |    // Create an array with elements {0, 1, 2, ..., depth - 1}:
 2110|  12.6k|    int *stack = PyMem_Malloc(depth * sizeof(int));
 2111|  12.6k|    if (stack == NULL) {
  ------------------
  |  Branch (2111:9): [True: 0, False: 12.6k]
  ------------------
 2112|      0|        PyErr_NoMemory();
 2113|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2114|      0|    }
 2115|  50.5k|    for (int i = 0; i < depth; i++) {
  ------------------
  |  Branch (2115:21): [True: 37.8k, False: 12.6k]
  ------------------
 2116|  37.8k|        stack[i] = i;
 2117|  37.8k|    }
 2118|       |    // Simulate the combined effect of these instructions by "running" them on
 2119|       |    // our "stack":
 2120|  39.3k|    for (int i = 0; i < len; i++) {
  ------------------
  |  Branch (2120:21): [True: 26.7k, False: 12.6k]
  ------------------
 2121|  26.7k|        if (instructions[i].i_opcode == SWAP) {
  ------------------
  |  |  126|  26.7k|#define SWAP                                   113
  ------------------
  |  Branch (2121:13): [True: 26.7k, False: 0]
  ------------------
 2122|  26.7k|            int oparg = instructions[i].i_oparg;
 2123|  26.7k|            int top = stack[0];
 2124|       |            // SWAPs are 1-indexed:
 2125|  26.7k|            stack[0] = stack[oparg - 1];
 2126|  26.7k|            stack[oparg - 1] = top;
 2127|  26.7k|        }
 2128|  26.7k|    }
 2129|       |    // Now we can begin! Our approach here is based on a solution to a closely
 2130|       |    // related problem (https://cs.stackexchange.com/a/13938). It's easiest to
 2131|       |    // think of this algorithm as determining the steps needed to efficiently
 2132|       |    // "un-shuffle" our stack. By performing the moves in *reverse* order,
 2133|       |    // though, we can efficiently *shuffle* it! For this reason, we will be
 2134|       |    // replacing instructions starting from the *end* of the run. Since the
 2135|       |    // solution is optimal, we don't need to worry about running out of space:
 2136|  12.6k|    int current = len - 1;
 2137|  50.5k|    for (int i = 0; i < depth; i++) {
  ------------------
  |  Branch (2137:21): [True: 37.8k, False: 12.6k]
  ------------------
 2138|       |        // Skip items that have already been visited, or just happen to be in
 2139|       |        // the correct location:
 2140|  37.8k|        if (stack[i] == VISITED || stack[i] == i) {
  ------------------
  |  | 2077|  75.7k|#define VISITED (-1)
  ------------------
  |  Branch (2140:13): [True: 24.6k, False: 13.2k]
  |  Branch (2140:36): [True: 1.13k, False: 12.1k]
  ------------------
 2141|  25.7k|            continue;
 2142|  25.7k|        }
 2143|       |        // Okay, we've found an item that hasn't been visited. It forms a cycle
 2144|       |        // with other items; traversing the cycle and swapping each item with
 2145|       |        // the next will put them all in the correct place. The weird
 2146|       |        // loop-and-a-half is necessary to insert 0 into every cycle, since we
 2147|       |        // can only swap from that position:
 2148|  12.1k|        int j = i;
 2149|  48.8k|        while (true) {
  ------------------
  |  Branch (2149:16): [True: 48.8k, Folded]
  ------------------
 2150|       |            // Skip the actual swap if our item is zero, since swapping the top
 2151|       |            // item with itself is pointless:
 2152|  48.8k|            if (j) {
  ------------------
  |  Branch (2152:17): [True: 24.6k, False: 24.2k]
  ------------------
 2153|  24.6k|                assert(0 <= current);
  ------------------
  |  Branch (2153:17): [True: 24.6k, False: 0]
  ------------------
 2154|       |                // SWAPs are 1-indexed:
 2155|  24.6k|                instructions[current].i_opcode = SWAP;
  ------------------
  |  |  126|  24.6k|#define SWAP                                   113
  ------------------
 2156|  24.6k|                instructions[current--].i_oparg = j + 1;
 2157|  24.6k|            }
 2158|  48.8k|            if (stack[j] == VISITED) {
  ------------------
  |  | 2077|  48.8k|#define VISITED (-1)
  ------------------
  |  Branch (2158:17): [True: 12.1k, False: 36.7k]
  ------------------
 2159|       |                // Completed the cycle:
 2160|  12.1k|                assert(j == i);
  ------------------
  |  Branch (2160:17): [True: 12.1k, False: 0]
  ------------------
 2161|  12.1k|                break;
 2162|  12.1k|            }
 2163|  36.7k|            int next_j = stack[j];
 2164|  36.7k|            stack[j] = VISITED;
  ------------------
  |  | 2077|  36.7k|#define VISITED (-1)
  ------------------
 2165|  36.7k|            j = next_j;
 2166|  36.7k|        }
 2167|  12.1k|    }
 2168|       |    // NOP out any unused instructions:
 2169|  14.7k|    while (0 <= current) {
  ------------------
  |  Branch (2169:12): [True: 2.06k, False: 12.6k]
  ------------------
 2170|  2.06k|        INSTR_SET_OP0(&instructions[current--], NOP);
  ------------------
  |  |  125|  2.06k|    do { \
  |  |  126|  2.06k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  2.06k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  2.06k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  2.06k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  2.06k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 2.06k]
  |  |  ------------------
  ------------------
  |  Branch (2170:9): [True: 2.06k, False: 0]
  ------------------
 2171|  2.06k|    }
 2172|  12.6k|    PyMem_Free(stack);
 2173|  12.6k|    *ix += len - 1;
 2174|  12.6k|    return SUCCESS;
  ------------------
  |  |   21|  12.6k|#define SUCCESS 0
  ------------------
 2175|  12.6k|}
flowgraph.c:apply_static_swaps:
 2218|   100k|{
 2219|       |    // SWAPs are to our left, and potential swaperands are to our right:
 2220|   102k|    for (; 0 <= i; i--) {
  ------------------
  |  Branch (2220:12): [True: 102k, False: 575]
  ------------------
 2221|   102k|        assert(i < block->b_iused);
  ------------------
  |  Branch (2221:9): [True: 102k, False: 0]
  ------------------
 2222|   102k|        cfg_instr *swap = &block->b_instr[i];
 2223|   102k|        if (swap->i_opcode != SWAP) {
  ------------------
  |  |  126|   102k|#define SWAP                                   113
  ------------------
  |  Branch (2223:13): [True: 2.58k, False: 99.7k]
  ------------------
 2224|  2.58k|            if (swap->i_opcode == NOP || SWAPPABLE(swap->i_opcode)) {
  ------------------
  |  |   38|  5.16k|#define NOP                                     25
  ------------------
                          if (swap->i_opcode == NOP || SWAPPABLE(swap->i_opcode)) {
  ------------------
  |  | 2183|    974|    ((opcode) == STORE_FAST || \
  |  |  ------------------
  |  |  |  |  121|  1.94k|#define STORE_FAST                             108
  |  |  ------------------
  |  |  |  Branch (2183:6): [True: 0, False: 974]
  |  |  ------------------
  |  | 2184|    974|     (opcode) == STORE_FAST_MAYBE_NULL || \
  |  |  ------------------
  |  |  |  |  254|  1.94k|#define STORE_FAST_MAYBE_NULL                  266
  |  |  ------------------
  |  |  |  Branch (2184:6): [True: 0, False: 974]
  |  |  ------------------
  |  | 2185|    974|     (opcode) == POP_TOP)
  |  |  ------------------
  |  |  |  |   42|    974|#define POP_TOP                                 29
  |  |  ------------------
  |  |  |  Branch (2185:6): [True: 451, False: 523]
  |  |  ------------------
  ------------------
  |  Branch (2224:17): [True: 1.60k, False: 974]
  ------------------
 2225|       |                // Nope, but we know how to handle these. Keep looking:
 2226|  2.06k|                continue;
 2227|  2.06k|            }
 2228|       |            // We can't reason about what this instruction does. Bail:
 2229|    523|            return;
 2230|  2.58k|        }
 2231|  99.7k|        int j = next_swappable_instruction(block, i, -1);
 2232|  99.7k|        if (j < 0) {
  ------------------
  |  Branch (2232:13): [True: 80.7k, False: 18.9k]
  ------------------
 2233|  80.7k|            return;
 2234|  80.7k|        }
 2235|  18.9k|        int k = j;
 2236|  18.9k|        int lineno = block->b_instr[j].i_loc.lineno;
 2237|  28.1k|        for (int count = swap->i_oparg - 1; 0 < count; count--) {
  ------------------
  |  Branch (2237:45): [True: 27.6k, False: 569]
  ------------------
 2238|  27.6k|            k = next_swappable_instruction(block, k, lineno);
 2239|  27.6k|            if (k < 0) {
  ------------------
  |  Branch (2239:17): [True: 18.4k, False: 9.20k]
  ------------------
 2240|  18.4k|                return;
 2241|  18.4k|            }
 2242|  27.6k|        }
 2243|       |        // The reordering is not safe if the two instructions to be swapped
 2244|       |        // store to the same location, or if any intervening instruction stores
 2245|       |        // to the same location as either of them.
 2246|    569|        int store_j = STORES_TO(block->b_instr[j]);
  ------------------
  |  | 2188|    569|    (((instr).i_opcode == STORE_FAST || \
  |  |  ------------------
  |  |  |  |  121|  1.13k|#define STORE_FAST                             108
  |  |  ------------------
  |  |  |  Branch (2188:7): [True: 43, False: 526]
  |  |  ------------------
  |  | 2189|    569|      (instr).i_opcode == STORE_FAST_MAYBE_NULL) \
  |  |  ------------------
  |  |  |  |  254|    526|#define STORE_FAST_MAYBE_NULL                  266
  |  |  ------------------
  |  |  |  Branch (2189:7): [True: 521, False: 5]
  |  |  ------------------
  |  | 2190|    569|     ? (instr).i_oparg : -1)
  ------------------
 2247|    569|        int store_k = STORES_TO(block->b_instr[k]);
  ------------------
  |  | 2188|    569|    (((instr).i_opcode == STORE_FAST || \
  |  |  ------------------
  |  |  |  |  121|  1.13k|#define STORE_FAST                             108
  |  |  ------------------
  |  |  |  Branch (2188:7): [True: 75, False: 494]
  |  |  ------------------
  |  | 2189|    569|      (instr).i_opcode == STORE_FAST_MAYBE_NULL) \
  |  |  ------------------
  |  |  |  |  254|    494|#define STORE_FAST_MAYBE_NULL                  266
  |  |  ------------------
  |  |  |  Branch (2189:7): [True: 0, False: 494]
  |  |  ------------------
  |  | 2190|    569|     ? (instr).i_oparg : -1)
  ------------------
 2248|    569|        if (store_j >= 0 || store_k >= 0) {
  ------------------
  |  Branch (2248:13): [True: 564, False: 5]
  |  Branch (2248:29): [True: 0, False: 5]
  ------------------
 2249|    564|            if (store_j == store_k) {
  ------------------
  |  Branch (2249:17): [True: 0, False: 564]
  ------------------
 2250|      0|                return;
 2251|      0|            }
 2252|  1.06k|            for (int idx = j + 1; idx < k; idx++) {
  ------------------
  |  Branch (2252:35): [True: 501, False: 564]
  ------------------
 2253|    501|                int store_idx = STORES_TO(block->b_instr[idx]);
  ------------------
  |  | 2188|    501|    (((instr).i_opcode == STORE_FAST || \
  |  |  ------------------
  |  |  |  |  121|  1.00k|#define STORE_FAST                             108
  |  |  ------------------
  |  |  |  Branch (2188:7): [True: 42, False: 459]
  |  |  ------------------
  |  | 2189|    501|      (instr).i_opcode == STORE_FAST_MAYBE_NULL) \
  |  |  ------------------
  |  |  |  |  254|    459|#define STORE_FAST_MAYBE_NULL                  266
  |  |  ------------------
  |  |  |  Branch (2189:7): [True: 459, False: 0]
  |  |  ------------------
  |  | 2190|    501|     ? (instr).i_oparg : -1)
  ------------------
 2254|    501|                if (store_idx >= 0 && (store_idx == store_j || store_idx == store_k)) {
  ------------------
  |  Branch (2254:21): [True: 501, False: 0]
  |  Branch (2254:40): [True: 0, False: 501]
  |  Branch (2254:64): [True: 0, False: 501]
  ------------------
 2255|      0|                    return;
 2256|      0|                }
 2257|    501|            }
 2258|    564|        }
 2259|       |
 2260|       |        // Success!
 2261|    569|        INSTR_SET_OP0(swap, NOP);
  ------------------
  |  |  125|    569|    do { \
  |  |  126|    569|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|    569|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|    569|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|    569|        _instr__ptr_->i_oparg = 0; \
  |  |  130|    569|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 569]
  |  |  ------------------
  ------------------
  |  Branch (2261:9): [True: 569, False: 0]
  ------------------
 2262|    569|        cfg_instr temp = block->b_instr[j];
 2263|    569|        block->b_instr[j] = block->b_instr[k];
 2264|    569|        block->b_instr[k] = temp;
 2265|    569|    }
 2266|   100k|}
flowgraph.c:next_swappable_instruction:
 2194|   127k|{
 2195|   127k|    while (++i < block->b_iused) {
  ------------------
  |  Branch (2195:12): [True: 117k, False: 9.67k]
  ------------------
 2196|   117k|        cfg_instr *instruction = &block->b_instr[i];
 2197|   117k|        if (0 <= lineno && instruction->i_loc.lineno != lineno) {
  ------------------
  |  Branch (2197:13): [True: 15.7k, False: 102k]
  |  Branch (2197:28): [True: 2, False: 15.7k]
  ------------------
 2198|       |            // Optimizing across this instruction could cause user-visible
 2199|       |            // changes in the names bound between line tracing events!
 2200|      2|            return -1;
 2201|      2|        }
 2202|   117k|        if (instruction->i_opcode == NOP) {
  ------------------
  |  |   38|   117k|#define NOP                                     25
  ------------------
  |  Branch (2202:13): [True: 7, False: 117k]
  ------------------
 2203|      7|            continue;
 2204|      7|        }
 2205|   117k|        if (SWAPPABLE(instruction->i_opcode)) {
  ------------------
  |  | 2183|   117k|    ((opcode) == STORE_FAST || \
  |  |  ------------------
  |  |  |  |  121|   235k|#define STORE_FAST                             108
  |  |  ------------------
  |  |  |  Branch (2183:6): [True: 160, False: 117k]
  |  |  ------------------
  |  | 2184|   117k|     (opcode) == STORE_FAST_MAYBE_NULL || \
  |  |  ------------------
  |  |  |  |  254|   235k|#define STORE_FAST_MAYBE_NULL                  266
  |  |  ------------------
  |  |  |  Branch (2184:6): [True: 13.0k, False: 104k]
  |  |  ------------------
  |  | 2185|   117k|     (opcode) == POP_TOP)
  |  |  ------------------
  |  |  |  |   42|   104k|#define POP_TOP                                 29
  |  |  ------------------
  |  |  |  Branch (2185:6): [True: 14.9k, False: 89.5k]
  |  |  ------------------
  ------------------
 2206|  28.1k|            return i;
 2207|  28.1k|        }
 2208|  89.5k|        return -1;
 2209|   117k|    }
 2210|  9.67k|    return -1;
 2211|   127k|}
flowgraph.c:remove_redundant_nops_and_pairs:
 1133|  52.7k|{
 1134|  52.7k|    bool done = false;
 1135|       |
 1136|   106k|    while (! done) {
  ------------------
  |  Branch (1136:12): [True: 53.8k, False: 52.7k]
  ------------------
 1137|  53.8k|        done = true;
 1138|  53.8k|        cfg_instr *prev_instr = NULL;
 1139|  53.8k|        cfg_instr *instr = NULL;
 1140|   595k|        for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (1140:42): [True: 541k, False: 53.8k]
  ------------------
 1141|   541k|            RETURN_IF_ERROR(basicblock_remove_redundant_nops(b));
  ------------------
  |  |   25|   541k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 541k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1142|   541k|            if (IS_LABEL(b->b_label)) {
  ------------------
  |  |   96|   541k|#define IS_LABEL(L) (!SAME_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   95|   541k|#define SAME_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  |  |  |  Branch (96:21): [True: 286k, False: 255k]
  |  |  ------------------
  ------------------
 1143|       |                /* this block is a jump target, forget instr */
 1144|   286k|                instr = NULL;
 1145|   286k|            }
 1146|  4.38M|            for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (1146:29): [True: 3.84M, False: 541k]
  ------------------
 1147|  3.84M|                prev_instr = instr;
 1148|  3.84M|                instr = &b->b_instr[i];
 1149|  3.84M|                int prev_opcode = prev_instr ? prev_instr->i_opcode : 0;
  ------------------
  |  Branch (1149:35): [True: 3.34M, False: 498k]
  ------------------
 1150|  3.84M|                int prev_oparg = prev_instr ? prev_instr->i_oparg : 0;
  ------------------
  |  Branch (1150:34): [True: 3.34M, False: 498k]
  ------------------
 1151|  3.84M|                int opcode = instr->i_opcode;
 1152|  3.84M|                bool is_redundant_pair = false;
 1153|  3.84M|                if (opcode == POP_TOP) {
  ------------------
  |  |   42|  3.84M|#define POP_TOP                                 29
  ------------------
  |  Branch (1153:21): [True: 293k, False: 3.54M]
  ------------------
 1154|   293k|                   if (loads_const(prev_opcode)) {
  ------------------
  |  Branch (1154:24): [True: 5.89k, False: 288k]
  ------------------
 1155|  5.89k|                       is_redundant_pair = true;
 1156|  5.89k|                   }
 1157|   288k|                   else if (prev_opcode == COPY && prev_oparg == 1) {
  ------------------
  |  |   70|   576k|#define COPY                                    57
  ------------------
  |  Branch (1157:29): [True: 130, False: 287k]
  |  Branch (1157:52): [True: 130, False: 0]
  ------------------
 1158|    130|                       is_redundant_pair = true;
 1159|    130|                   }
 1160|   293k|                }
 1161|  3.84M|                if (is_redundant_pair) {
  ------------------
  |  Branch (1161:21): [True: 6.02k, False: 3.83M]
  ------------------
 1162|  6.02k|                    INSTR_SET_OP0(prev_instr, NOP);
  ------------------
  |  |  125|  6.02k|    do { \
  |  |  126|  6.02k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  6.02k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  6.02k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  6.02k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  6.02k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 6.02k]
  |  |  ------------------
  ------------------
  |  Branch (1162:21): [True: 6.02k, False: 0]
  ------------------
 1163|  6.02k|                    INSTR_SET_OP0(instr, NOP);
  ------------------
  |  |  125|  6.02k|    do { \
  |  |  126|  6.02k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  6.02k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  6.02k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  6.02k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  6.02k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 6.02k]
  |  |  ------------------
  ------------------
  |  Branch (1163:21): [True: 6.02k, False: 0]
  ------------------
 1164|  6.02k|                    done = false;
 1165|  6.02k|                }
 1166|  3.84M|            }
 1167|   541k|            if ((instr && is_jump(instr)) || !BB_HAS_FALLTHROUGH(b)) {
  ------------------
  |  |  251|   279k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  ------------------
  |  Branch (1167:18): [True: 502k, False: 39.0k]
  |  Branch (1167:27): [True: 262k, False: 240k]
  |  Branch (1167:46): [True: 120k, False: 159k]
  ------------------
 1168|   382k|                instr = NULL;
 1169|   382k|            }
 1170|   541k|        }
 1171|  53.8k|    }
 1172|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 1173|  52.7k|}
flowgraph.c:basicblock_remove_redundant_nops:
 1058|  3.72M|basicblock_remove_redundant_nops(basicblock *bb) {
 1059|       |    /* Remove NOPs when legal to do so. */
 1060|  3.72M|    int dest = 0;
 1061|  3.72M|    int prev_lineno = -1;
 1062|  27.7M|    for (int src = 0; src < bb->b_iused; src++) {
  ------------------
  |  Branch (1062:23): [True: 24.0M, False: 3.72M]
  ------------------
 1063|  24.0M|        int lineno = bb->b_instr[src].i_loc.lineno;
 1064|  24.0M|        if (bb->b_instr[src].i_opcode == NOP) {
  ------------------
  |  |   38|  24.0M|#define NOP                                     25
  ------------------
  |  Branch (1064:13): [True: 1.63M, False: 22.3M]
  ------------------
 1065|       |            /* Eliminate no-op if it doesn't have a line number */
 1066|  1.63M|            if (lineno < 0) {
  ------------------
  |  Branch (1066:17): [True: 1.38M, False: 246k]
  ------------------
 1067|  1.38M|                continue;
 1068|  1.38M|            }
 1069|       |            /* or, if the previous instruction had the same line number. */
 1070|   246k|            if (prev_lineno == lineno) {
  ------------------
  |  Branch (1070:17): [True: 146k, False: 100k]
  ------------------
 1071|   146k|                continue;
 1072|   146k|            }
 1073|       |            /* or, if the next instruction has same line number or no line number */
 1074|   100k|            if (src < bb->b_iused - 1) {
  ------------------
  |  Branch (1074:17): [True: 91.6k, False: 8.71k]
  ------------------
 1075|  91.6k|                int next_lineno = bb->b_instr[src+1].i_loc.lineno;
 1076|  91.6k|                if (next_lineno == lineno) {
  ------------------
  |  Branch (1076:21): [True: 74.1k, False: 17.5k]
  ------------------
 1077|  74.1k|                    continue;
 1078|  74.1k|                }
 1079|  17.5k|                if (next_lineno < 0) {
  ------------------
  |  Branch (1079:21): [True: 1.17k, False: 16.3k]
  ------------------
 1080|  1.17k|                    bb->b_instr[src+1].i_loc = bb->b_instr[src].i_loc;
 1081|  1.17k|                    continue;
 1082|  1.17k|                }
 1083|  17.5k|            }
 1084|  8.71k|            else {
 1085|  8.71k|                basicblock *next = next_nonempty_block(bb->b_next);
 1086|       |                /* or if last instruction in BB and next BB has same line number */
 1087|  8.71k|                if (next) {
  ------------------
  |  Branch (1087:21): [True: 8.71k, False: 0]
  ------------------
 1088|  8.71k|                    location next_loc = NO_LOCATION;
 1089|  9.17k|                    for (int next_i=0; next_i < next->b_iused; next_i++) {
  ------------------
  |  Branch (1089:40): [True: 9.16k, False: 10]
  ------------------
 1090|  9.16k|                        cfg_instr *instr = &next->b_instr[next_i];
 1091|  9.16k|                        if (instr->i_opcode == NOP && instr->i_loc.lineno < 0) {
  ------------------
  |  |   38|  18.3k|#define NOP                                     25
  ------------------
  |  Branch (1091:29): [True: 5.01k, False: 4.14k]
  |  Branch (1091:55): [True: 462, False: 4.55k]
  ------------------
 1092|       |                            /* Skip over NOPs without a location, they will be removed */
 1093|    462|                            continue;
 1094|    462|                        }
 1095|  8.70k|                        next_loc = instr->i_loc;
 1096|  8.70k|                        break;
 1097|  9.16k|                    }
 1098|  8.71k|                    if (lineno == next_loc.lineno) {
  ------------------
  |  Branch (1098:25): [True: 1.85k, False: 6.85k]
  ------------------
 1099|  1.85k|                        continue;
 1100|  1.85k|                    }
 1101|  8.71k|                }
 1102|  8.71k|            }
 1103|       |
 1104|   100k|        }
 1105|  22.3M|        if (dest != src) {
  ------------------
  |  Branch (1105:13): [True: 1.98M, False: 20.4M]
  ------------------
 1106|  1.98M|            bb->b_instr[dest] = bb->b_instr[src];
 1107|  1.98M|        }
 1108|  22.3M|        dest++;
 1109|  22.3M|        prev_lineno = lineno;
 1110|  22.3M|    }
 1111|  3.72M|    assert(dest <= bb->b_iused);
  ------------------
  |  Branch (1111:5): [True: 3.72M, False: 0]
  ------------------
 1112|  3.72M|    int num_removed = bb->b_iused - dest;
 1113|  3.72M|    bb->b_iused = dest;
 1114|  3.72M|    memset(&bb->b_instr[dest], 0, sizeof(cfg_instr) * num_removed);
 1115|  3.72M|    return num_removed;
 1116|  3.72M|}
flowgraph.c:next_nonempty_block:
  502|  1.75M|{
  503|  1.91M|    while (b && b->b_iused == 0) {
  ------------------
  |  Branch (503:12): [True: 1.91M, False: 378]
  |  Branch (503:17): [True: 155k, False: 1.75M]
  ------------------
  504|   155k|        b = b->b_next;
  505|   155k|    }
  506|  1.75M|    return b;
  507|  1.75M|}
flowgraph.c:remove_redundant_nops_and_jumps:
 2646|   109k|{
 2647|   109k|    int removed_nops, removed_jumps;
 2648|   116k|    do {
 2649|       |        /* Convergence is guaranteed because the number of
 2650|       |         * redundant jumps and nops only decreases.
 2651|       |         */
 2652|   116k|        removed_nops = remove_redundant_nops(g);
 2653|   116k|        RETURN_IF_ERROR(removed_nops);
  ------------------
  |  |   25|   116k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 116k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2654|   116k|        removed_jumps = remove_redundant_jumps(g);
 2655|   116k|        RETURN_IF_ERROR(removed_jumps);
  ------------------
  |  |   25|   116k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 116k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 2656|   116k|    } while(removed_nops + removed_jumps > 0);
  ------------------
  |  Branch (2656:13): [True: 6.68k, False: 109k]
  ------------------
 2657|   109k|    return SUCCESS;
  ------------------
  |  |   21|   109k|#define SUCCESS 0
  ------------------
 2658|   109k|}
flowgraph.c:remove_redundant_nops:
 1119|   221k|remove_redundant_nops(cfg_builder *g) {
 1120|   221k|    int changes = 0;
 1121|  3.40M|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (1121:43): [True: 3.18M, False: 221k]
  ------------------
 1122|  3.18M|        int change = basicblock_remove_redundant_nops(b);
 1123|  3.18M|        RETURN_IF_ERROR(change);
  ------------------
  |  |   25|  3.18M|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 3.18M]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 1124|  3.18M|        changes += change;
 1125|  3.18M|    }
 1126|   221k|    return changes;
 1127|   221k|}
flowgraph.c:remove_redundant_jumps:
 1176|   116k|remove_redundant_jumps(cfg_builder *g) {
 1177|       |    /* If a non-empty block ends with a jump instruction, check if the next
 1178|       |     * non-empty block reached through normal flow control is the target
 1179|       |     * of that jump. If it is, then the jump instruction is redundant and
 1180|       |     * can be deleted.
 1181|       |     *
 1182|       |     * Return the number of changes applied, or -1 on error.
 1183|       |     */
 1184|       |
 1185|   116k|    int changes = 0;
 1186|  2.35M|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (1186:43): [True: 2.23M, False: 116k]
  ------------------
 1187|  2.23M|        cfg_instr *last = basicblock_last_instr(b);
 1188|  2.23M|        if (last == NULL) {
  ------------------
  |  Branch (1188:13): [True: 282k, False: 1.95M]
  ------------------
 1189|   282k|            continue;
 1190|   282k|        }
 1191|  2.23M|        assert(!IS_ASSEMBLER_OPCODE(last->i_opcode));
  ------------------
  |  Branch (1191:9): [True: 0, False: 1.95M]
  |  Branch (1191:9): [True: 0, False: 1.95M]
  |  Branch (1191:9): [True: 0, False: 1.95M]
  ------------------
 1192|  1.95M|        if (IS_UNCONDITIONAL_JUMP_OPCODE(last->i_opcode)) {
  ------------------
  |  |   40|  1.95M|        ((opcode) == JUMP || \
  |  |  ------------------
  |  |  |  |  245|  3.90M|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (40:10): [True: 50.8k, False: 1.90M]
  |  |  ------------------
  |  |   41|  1.95M|         (opcode) == JUMP_NO_INTERRUPT || \
  |  |  ------------------
  |  |  |  |  248|  3.85M|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (41:10): [True: 435k, False: 1.46M]
  |  |  ------------------
  |  |   42|  1.95M|         (opcode) == JUMP_FORWARD || \
  |  |  ------------------
  |  |  |  |   86|  3.42M|#define JUMP_FORWARD                            73
  |  |  ------------------
  |  |  |  Branch (42:10): [True: 0, False: 1.46M]
  |  |  ------------------
  |  |   43|  1.95M|         (opcode) == JUMP_BACKWARD || \
  |  |  ------------------
  |  |  |  |   84|  3.42M|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 1.46M]
  |  |  ------------------
  |  |   44|  1.95M|         (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
  |  |  ------------------
  |  |  |  |   85|  1.46M|#define JUMP_BACKWARD_NO_INTERRUPT              72
  |  |  ------------------
  |  |  |  Branch (44:10): [True: 0, False: 1.46M]
  |  |  ------------------
  ------------------
 1193|   486k|            basicblock* jump_target = next_nonempty_block(last->i_target);
 1194|   486k|            if (jump_target == NULL) {
  ------------------
  |  Branch (1194:17): [True: 0, False: 486k]
  ------------------
 1195|      0|                PyErr_SetString(PyExc_SystemError, "jump with NULL target");
 1196|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 1197|      0|            }
 1198|   486k|            basicblock *next = next_nonempty_block(b->b_next);
 1199|   486k|            if (jump_target == next) {
  ------------------
  |  Branch (1199:17): [True: 16.2k, False: 470k]
  ------------------
 1200|  16.2k|                changes++;
 1201|  16.2k|                INSTR_SET_OP0(last, NOP);
  ------------------
  |  |  125|  16.2k|    do { \
  |  |  126|  16.2k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  16.2k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  16.2k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  16.2k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  16.2k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 16.2k]
  |  |  ------------------
  ------------------
  |  Branch (1201:17): [True: 16.2k, False: 0]
  ------------------
 1202|  16.2k|            }
 1203|   486k|        }
 1204|  1.95M|    }
 1205|       |
 1206|   116k|    return changes;
 1207|   116k|}
flowgraph.c:remove_unused_consts:
 3297|  52.7k|{
 3298|  52.7k|    assert(PyList_CheckExact(consts));
  ------------------
  |  Branch (3298:5): [True: 52.7k, False: 0]
  ------------------
 3299|  52.7k|    Py_ssize_t nconsts = PyList_GET_SIZE(consts);
  ------------------
  |  |   38|  52.7k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3300|  52.7k|    if (nconsts == 0) {
  ------------------
  |  Branch (3300:9): [True: 50, False: 52.7k]
  ------------------
 3301|     50|        return SUCCESS;  /* nothing to do */
  ------------------
  |  |   21|     50|#define SUCCESS 0
  ------------------
 3302|     50|    }
 3303|       |
 3304|  52.7k|    Py_ssize_t *index_map = NULL;
 3305|  52.7k|    Py_ssize_t *reverse_index_map = NULL;
 3306|  52.7k|    int err = ERROR;
  ------------------
  |  |   22|  52.7k|#define ERROR -1
  ------------------
 3307|       |
 3308|  52.7k|    index_map = PyMem_Malloc(nconsts * sizeof(Py_ssize_t));
 3309|  52.7k|    if (index_map == NULL) {
  ------------------
  |  Branch (3309:9): [True: 0, False: 52.7k]
  ------------------
 3310|      0|        PyErr_NoMemory();
 3311|      0|        goto end;
 3312|      0|    }
 3313|   442k|    for (Py_ssize_t i = 1; i < nconsts; i++) {
  ------------------
  |  Branch (3313:28): [True: 390k, False: 52.7k]
  ------------------
 3314|   390k|        index_map[i] = -1;
 3315|   390k|    }
 3316|       |    // The first constant may be docstring; keep it always.
 3317|  52.7k|    index_map[0] = 0;
 3318|       |
 3319|       |    /* mark used consts */
 3320|   527k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3320:38): [True: 474k, False: 52.7k]
  ------------------
 3321|  3.82M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3321:25): [True: 3.34M, False: 474k]
  ------------------
 3322|  3.34M|            int opcode = b->b_instr[i].i_opcode;
 3323|  3.34M|            if (OPCODE_HAS_CONST(opcode)) {
  ------------------
  |  | 1063|  3.34M|#define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
  |  |  ------------------
  |  |  |  | 1044|  3.34M|#define HAS_CONST_FLAG (2)
  |  |  ------------------
  |  |  |  Branch (1063:30): [True: 332k, False: 3.01M]
  |  |  ------------------
  ------------------
 3324|   332k|                int index = b->b_instr[i].i_oparg;
 3325|   332k|                index_map[index] = index;
 3326|   332k|            }
 3327|  3.34M|        }
 3328|   474k|    }
 3329|       |    /* now index_map[i] == i if consts[i] is used, -1 otherwise */
 3330|       |    /* condense consts */
 3331|  52.7k|    Py_ssize_t n_used_consts = 0;
 3332|   495k|    for (Py_ssize_t i = 0; i < nconsts; i++) {
  ------------------
  |  Branch (3332:28): [True: 442k, False: 52.7k]
  ------------------
 3333|   442k|        if (index_map[i] != -1) {
  ------------------
  |  Branch (3333:13): [True: 171k, False: 271k]
  ------------------
 3334|   171k|            assert(index_map[i] == i);
  ------------------
  |  Branch (3334:13): [True: 171k, False: 0]
  ------------------
 3335|   171k|            index_map[n_used_consts++] = index_map[i];
 3336|   171k|        }
 3337|   442k|    }
 3338|  52.7k|    if (n_used_consts == nconsts) {
  ------------------
  |  Branch (3338:9): [True: 12.7k, False: 39.9k]
  ------------------
 3339|       |        /* nothing to do */
 3340|  12.7k|        err = SUCCESS;
  ------------------
  |  |   21|  12.7k|#define SUCCESS 0
  ------------------
 3341|  12.7k|        goto end;
 3342|  12.7k|    }
 3343|       |
 3344|       |    /* move all used consts to the beginning of the consts list */
 3345|  52.7k|    assert(n_used_consts < nconsts);
  ------------------
  |  Branch (3345:5): [True: 39.9k, False: 0]
  ------------------
 3346|   182k|    for (Py_ssize_t i = 0; i < n_used_consts; i++) {
  ------------------
  |  Branch (3346:28): [True: 142k, False: 39.9k]
  ------------------
 3347|   142k|        Py_ssize_t old_index = index_map[i];
 3348|   142k|        assert(i <= old_index && old_index < nconsts);
  ------------------
  |  Branch (3348:9): [True: 142k, False: 0]
  |  Branch (3348:9): [True: 142k, False: 0]
  ------------------
 3349|   142k|        if (i != old_index) {
  ------------------
  |  Branch (3349:13): [True: 61.5k, False: 80.6k]
  ------------------
 3350|  61.5k|            PyObject *value = PyList_GET_ITEM(consts, index_map[i]);
  ------------------
  |  |   40|  61.5k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  61.5k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  61.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3350:31): [True: 61.5k, False: 0]
  ------------------
 3351|  61.5k|            assert(value != NULL);
  ------------------
  |  Branch (3351:13): [True: 61.5k, False: 0]
  ------------------
 3352|  61.5k|            PyList_SetItem(consts, i, Py_NewRef(value));
  ------------------
  |  |  550|  61.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  61.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  61.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3353|  61.5k|        }
 3354|   142k|    }
 3355|       |
 3356|       |    /* truncate the consts list at its new size */
 3357|  39.9k|    if (PyList_SetSlice(consts, n_used_consts, nconsts, NULL) < 0) {
  ------------------
  |  Branch (3357:9): [True: 0, False: 39.9k]
  ------------------
 3358|      0|        goto end;
 3359|      0|    }
 3360|       |    /* adjust const indices in the bytecode */
 3361|  39.9k|    reverse_index_map = PyMem_Malloc(nconsts * sizeof(Py_ssize_t));
 3362|  39.9k|    if (reverse_index_map == NULL) {
  ------------------
  |  Branch (3362:9): [True: 0, False: 39.9k]
  ------------------
 3363|      0|        PyErr_NoMemory();
 3364|      0|        goto end;
 3365|      0|    }
 3366|   453k|    for (Py_ssize_t i = 0; i < nconsts; i++) {
  ------------------
  |  Branch (3366:28): [True: 413k, False: 39.9k]
  ------------------
 3367|   413k|        reverse_index_map[i] = -1;
 3368|   413k|    }
 3369|   182k|    for (Py_ssize_t i = 0; i < n_used_consts; i++) {
  ------------------
  |  Branch (3369:28): [True: 142k, False: 39.9k]
  ------------------
 3370|   142k|        assert(index_map[i] != -1);
  ------------------
  |  Branch (3370:9): [True: 142k, False: 0]
  ------------------
 3371|   142k|        assert(reverse_index_map[index_map[i]] == -1);
  ------------------
  |  Branch (3371:9): [True: 142k, False: 0]
  ------------------
 3372|   142k|        reverse_index_map[index_map[i]] = i;
 3373|   142k|    }
 3374|       |
 3375|   376k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3375:38): [True: 336k, False: 39.9k]
  ------------------
 3376|  2.91M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3376:25): [True: 2.57M, False: 336k]
  ------------------
 3377|  2.57M|            int opcode = b->b_instr[i].i_opcode;
 3378|  2.57M|            if (OPCODE_HAS_CONST(opcode)) {
  ------------------
  |  | 1063|  2.57M|#define OPCODE_HAS_CONST(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_CONST_FLAG))
  |  |  ------------------
  |  |  |  | 1044|  2.57M|#define HAS_CONST_FLAG (2)
  |  |  ------------------
  |  |  |  Branch (1063:30): [True: 310k, False: 2.26M]
  |  |  ------------------
  ------------------
 3379|   310k|                int index = b->b_instr[i].i_oparg;
 3380|   310k|                assert(reverse_index_map[index] >= 0);
  ------------------
  |  Branch (3380:17): [True: 310k, False: 0]
  ------------------
 3381|   310k|                assert(reverse_index_map[index] < n_used_consts);
  ------------------
  |  Branch (3381:17): [True: 310k, False: 0]
  ------------------
 3382|   310k|                b->b_instr[i].i_oparg = (int)reverse_index_map[index];
 3383|   310k|            }
 3384|  2.57M|        }
 3385|   336k|    }
 3386|       |
 3387|  39.9k|    err = SUCCESS;
  ------------------
  |  |   21|  39.9k|#define SUCCESS 0
  ------------------
 3388|  52.7k|end:
 3389|  52.7k|    PyMem_Free(index_map);
 3390|  52.7k|    PyMem_Free(reverse_index_map);
 3391|  52.7k|    return err;
 3392|  39.9k|}
flowgraph.c:add_checks_for_loads_of_uninitialized_variables:
 3400|  52.7k|{
 3401|  52.7k|    if (nlocals == 0) {
  ------------------
  |  Branch (3401:9): [True: 27.0k, False: 25.7k]
  ------------------
 3402|  27.0k|        return SUCCESS;
  ------------------
  |  |   21|  27.0k|#define SUCCESS 0
  ------------------
 3403|  27.0k|    }
 3404|  25.7k|    if (nlocals > 64) {
  ------------------
  |  Branch (3404:9): [True: 143, False: 25.6k]
  ------------------
 3405|       |        // To avoid O(nlocals**2) compilation, locals beyond the first
 3406|       |        // 64 are only analyzed one basicblock at a time: initialization
 3407|       |        // info is not passed between basicblocks.
 3408|    143|        if (fast_scan_many_locals(entryblock, nlocals) < 0) {
  ------------------
  |  Branch (3408:13): [True: 0, False: 143]
  ------------------
 3409|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3410|      0|        }
 3411|    143|        nlocals = 64;
 3412|    143|    }
 3413|  25.7k|    basicblock **stack = make_cfg_traversal_stack(entryblock);
 3414|  25.7k|    if (stack == NULL) {
  ------------------
  |  Branch (3414:9): [True: 0, False: 25.7k]
  ------------------
 3415|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3416|      0|    }
 3417|  25.7k|    basicblock **sp = stack;
 3418|       |
 3419|       |    // First origin of being uninitialized:
 3420|       |    // The non-parameter locals in the entry block.
 3421|  25.7k|    uint64_t start_mask = 0;
 3422|  86.8k|    for (int i = nparams; i < nlocals; i++) {
  ------------------
  |  Branch (3422:27): [True: 61.1k, False: 25.7k]
  ------------------
 3423|  61.1k|        start_mask |= (uint64_t)1 << i;
 3424|  61.1k|    }
 3425|  25.7k|    maybe_push(entryblock, start_mask, &sp);
 3426|       |
 3427|       |    // Second origin of being uninitialized:
 3428|       |    // There could be DELETE_FAST somewhere, so
 3429|       |    // be sure to scan each basicblock at least once.
 3430|   318k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3430:38): [True: 292k, False: 25.7k]
  ------------------
 3431|   292k|        scan_block_for_locals(b, &sp);
 3432|   292k|    }
 3433|       |    // Now propagate the uncertainty from the origins we found: Use
 3434|       |    // LOAD_FAST_CHECK for any LOAD_FAST where the local could be undefined.
 3435|   110k|    while (sp > stack) {
  ------------------
  |  Branch (3435:12): [True: 84.8k, False: 25.7k]
  ------------------
 3436|  84.8k|        basicblock *b = *--sp;
 3437|       |        // mark as no longer on stack
 3438|  84.8k|        b->b_visited = 0;
 3439|  84.8k|        scan_block_for_locals(b, &sp);
 3440|  84.8k|    }
 3441|  25.7k|    PyMem_Free(stack);
 3442|  25.7k|    return SUCCESS;
  ------------------
  |  |   21|  25.7k|#define SUCCESS 0
  ------------------
 3443|  25.7k|}
flowgraph.c:fast_scan_many_locals:
 3250|    143|{
 3251|    143|    assert(nlocals > 64);
  ------------------
  |  Branch (3251:5): [True: 143, False: 0]
  ------------------
 3252|    143|    Py_ssize_t *states = PyMem_Calloc(nlocals - 64, sizeof(Py_ssize_t));
 3253|    143|    if (states == NULL) {
  ------------------
  |  Branch (3253:9): [True: 0, False: 143]
  ------------------
 3254|      0|        PyErr_NoMemory();
 3255|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3256|      0|    }
 3257|    143|    Py_ssize_t blocknum = 0;
 3258|       |    // state[i - 64] == blocknum if local i is guaranteed to
 3259|       |    // be initialized, i.e., if it has had a previous LOAD_FAST or
 3260|       |    // STORE_FAST within that basicblock (not followed by
 3261|       |    // DELETE_FAST/LOAD_FAST_AND_CLEAR/STORE_FAST_MAYBE_NULL).
 3262|  1.26k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3262:38): [True: 1.12k, False: 143]
  ------------------
 3263|  1.12k|        blocknum++;
 3264|  66.3k|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3264:25): [True: 65.2k, False: 1.12k]
  ------------------
 3265|  65.2k|            cfg_instr *instr = &b->b_instr[i];
 3266|  65.2k|            assert(instr->i_opcode != EXTENDED_ARG);
  ------------------
  |  Branch (3266:13): [True: 65.2k, False: 0]
  ------------------
 3267|  65.2k|            int arg = instr->i_oparg;
 3268|  65.2k|            if (arg < 64) {
  ------------------
  |  Branch (3268:17): [True: 62.7k, False: 2.53k]
  ------------------
 3269|  62.7k|                continue;
 3270|  62.7k|            }
 3271|  65.2k|            assert(arg >= 0);
  ------------------
  |  Branch (3271:13): [True: 2.53k, False: 0]
  ------------------
 3272|  2.53k|            switch (instr->i_opcode) {
  ------------------
  |  Branch (3272:21): [True: 1.53k, False: 1.00k]
  ------------------
 3273|    241|                case DELETE_FAST:
  ------------------
  |  |   73|    241|#define DELETE_FAST                             60
  ------------------
  |  Branch (3273:17): [True: 241, False: 2.29k]
  ------------------
 3274|    367|                case LOAD_FAST_AND_CLEAR:
  ------------------
  |  |   94|    367|#define LOAD_FAST_AND_CLEAR                     81
  ------------------
  |  Branch (3274:17): [True: 126, False: 2.41k]
  ------------------
 3275|    619|                case STORE_FAST_MAYBE_NULL:
  ------------------
  |  |  254|    619|#define STORE_FAST_MAYBE_NULL                  266
  ------------------
  |  Branch (3275:17): [True: 252, False: 2.28k]
  ------------------
 3276|    619|                    states[arg - 64] = blocknum - 1;
 3277|    619|                    break;
 3278|    780|                case STORE_FAST:
  ------------------
  |  |  121|    780|#define STORE_FAST                             108
  ------------------
  |  Branch (3278:17): [True: 780, False: 1.75k]
  ------------------
 3279|    780|                    states[arg - 64] = blocknum;
 3280|    780|                    break;
 3281|    138|                case LOAD_FAST:
  ------------------
  |  |   93|    138|#define LOAD_FAST                               80
  ------------------
  |  Branch (3281:17): [True: 138, False: 2.40k]
  ------------------
 3282|    138|                    if (states[arg - 64] != blocknum) {
  ------------------
  |  Branch (3282:25): [True: 70, False: 68]
  ------------------
 3283|     70|                        instr->i_opcode = LOAD_FAST_CHECK;
  ------------------
  |  |   97|     70|#define LOAD_FAST_CHECK                         84
  ------------------
 3284|     70|                    }
 3285|    138|                    states[arg - 64] = blocknum;
 3286|    138|                    break;
 3287|  2.53k|                    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 3288|  2.53k|            }
 3289|  2.53k|        }
 3290|  1.12k|    }
 3291|    143|    PyMem_Free(states);
 3292|    143|    return SUCCESS;
  ------------------
  |  |   21|    143|#define SUCCESS 0
  ------------------
 3293|    143|}
flowgraph.c:maybe_push:
 3185|  1.47M|{
 3186|       |    // Push b if the unsafe mask is giving us any new information.
 3187|       |    // To avoid overflowing the stack, only allow each block once.
 3188|       |    // Use b->b_visited=1 to mean that b is currently on the stack.
 3189|  1.47M|    uint64_t both = b->b_unsafe_locals_mask | unsafe_mask;
 3190|  1.47M|    if (b->b_unsafe_locals_mask != both) {
  ------------------
  |  Branch (3190:9): [True: 85.4k, False: 1.38M]
  ------------------
 3191|  85.4k|        b->b_unsafe_locals_mask = both;
 3192|       |        // More work left to do.
 3193|  85.4k|        if (!b->b_visited) {
  ------------------
  |  Branch (3193:13): [True: 84.8k, False: 546]
  ------------------
 3194|       |            // not on the stack, so push it.
 3195|  84.8k|            *(*sp)++ = b;
 3196|  84.8k|            b->b_visited = 1;
 3197|  84.8k|        }
 3198|  85.4k|    }
 3199|  1.47M|}
flowgraph.c:scan_block_for_locals:
 3203|   377k|{
 3204|       |    // bit i is set if local i is potentially uninitialized
 3205|   377k|    uint64_t unsafe_mask = b->b_unsafe_locals_mask;
 3206|  2.52M|    for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3206:21): [True: 2.14M, False: 377k]
  ------------------
 3207|  2.14M|        cfg_instr *instr = &b->b_instr[i];
 3208|  2.14M|        assert(instr->i_opcode != EXTENDED_ARG);
  ------------------
  |  Branch (3208:9): [True: 2.14M, False: 0]
  ------------------
 3209|  2.14M|        if (instr->i_except != NULL) {
  ------------------
  |  Branch (3209:13): [True: 1.08M, False: 1.05M]
  ------------------
 3210|  1.08M|            maybe_push(instr->i_except, unsafe_mask, sp);
 3211|  1.08M|        }
 3212|  2.14M|        if (instr->i_oparg >= 64) {
  ------------------
  |  Branch (3212:13): [True: 244k, False: 1.90M]
  ------------------
 3213|   244k|            continue;
 3214|   244k|        }
 3215|  2.14M|        assert(instr->i_oparg >= 0);
  ------------------
  |  Branch (3215:9): [True: 1.90M, False: 0]
  ------------------
 3216|  1.90M|        uint64_t bit = (uint64_t)1 << instr->i_oparg;
 3217|  1.90M|        switch (instr->i_opcode) {
  ------------------
  |  Branch (3217:17): [True: 311k, False: 1.59M]
  ------------------
 3218|  5.77k|            case DELETE_FAST:
  ------------------
  |  |   73|  5.77k|#define DELETE_FAST                             60
  ------------------
  |  Branch (3218:13): [True: 5.77k, False: 1.89M]
  ------------------
 3219|  18.5k|            case LOAD_FAST_AND_CLEAR:
  ------------------
  |  |   94|  18.5k|#define LOAD_FAST_AND_CLEAR                     81
  ------------------
  |  Branch (3219:13): [True: 12.7k, False: 1.88M]
  ------------------
 3220|  44.1k|            case STORE_FAST_MAYBE_NULL:
  ------------------
  |  |  254|  44.1k|#define STORE_FAST_MAYBE_NULL                  266
  ------------------
  |  Branch (3220:13): [True: 25.6k, False: 1.87M]
  ------------------
 3221|  44.1k|                unsafe_mask |= bit;
 3222|  44.1k|                break;
 3223|   216k|            case STORE_FAST:
  ------------------
  |  |  121|   216k|#define STORE_FAST                             108
  ------------------
  |  Branch (3223:13): [True: 216k, False: 1.68M]
  ------------------
 3224|   216k|                unsafe_mask &= ~bit;
 3225|   216k|                break;
 3226|  4.04k|            case LOAD_FAST_CHECK:
  ------------------
  |  |   97|  4.04k|#define LOAD_FAST_CHECK                         84
  ------------------
  |  Branch (3226:13): [True: 4.04k, False: 1.89M]
  ------------------
 3227|       |                // If this doesn't raise, then the local is defined.
 3228|  4.04k|                unsafe_mask &= ~bit;
 3229|  4.04k|                break;
 3230|  46.6k|            case LOAD_FAST:
  ------------------
  |  |   93|  46.6k|#define LOAD_FAST                               80
  ------------------
  |  Branch (3230:13): [True: 46.6k, False: 1.85M]
  ------------------
 3231|  46.6k|                if (unsafe_mask & bit) {
  ------------------
  |  Branch (3231:21): [True: 4.04k, False: 42.6k]
  ------------------
 3232|  4.04k|                    instr->i_opcode = LOAD_FAST_CHECK;
  ------------------
  |  |   97|  4.04k|#define LOAD_FAST_CHECK                         84
  ------------------
 3233|  4.04k|                }
 3234|  46.6k|                unsafe_mask &= ~bit;
 3235|  46.6k|                break;
 3236|  1.90M|        }
 3237|  1.90M|    }
 3238|   377k|    if (b->b_next && BB_HAS_FALLTHROUGH(b)) {
  ------------------
  |  |  251|   345k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 191k, False: 154k]
  |  |  ------------------
  ------------------
  |  Branch (3238:9): [True: 345k, False: 32.0k]
  ------------------
 3239|   191k|        maybe_push(b->b_next, unsafe_mask, sp);
 3240|   191k|    }
 3241|   377k|    cfg_instr *last = basicblock_last_instr(b);
 3242|   377k|    if (last && is_jump(last)) {
  ------------------
  |  Branch (3242:9): [True: 357k, False: 20.1k]
  |  Branch (3242:17): [True: 170k, False: 187k]
  ------------------
 3243|   170k|        assert(last->i_target != NULL);
  ------------------
  |  Branch (3243:9): [True: 170k, False: 0]
  ------------------
 3244|   170k|        maybe_push(last->i_target, unsafe_mask, sp);
 3245|   170k|    }
 3246|   377k|}
flowgraph.c:insert_superinstructions:
 2705|  52.7k|{
 2706|   527k|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (2706:43): [True: 474k, False: 52.7k]
  ------------------
 2707|       |
 2708|  3.82M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (2708:25): [True: 3.34M, False: 474k]
  ------------------
 2709|  3.34M|            cfg_instr *inst = &b->b_instr[i];
 2710|  3.34M|            int nextop = i+1 < b->b_iused ? b->b_instr[i+1].i_opcode : 0;
  ------------------
  |  Branch (2710:26): [True: 2.93M, False: 412k]
  ------------------
 2711|  3.34M|            switch(inst->i_opcode) {
  ------------------
  |  Branch (2711:20): [True: 115k, False: 3.23M]
  ------------------
 2712|  21.8k|                case LOAD_FAST:
  ------------------
  |  |   93|  21.8k|#define LOAD_FAST                               80
  ------------------
  |  Branch (2712:17): [True: 21.8k, False: 3.32M]
  ------------------
 2713|  21.8k|                    if (nextop == LOAD_FAST) {
  ------------------
  |  |   93|  21.8k|#define LOAD_FAST                               80
  ------------------
  |  Branch (2713:25): [True: 3.44k, False: 18.3k]
  ------------------
 2714|  3.44k|                        make_super_instruction(inst, &b->b_instr[i + 1], LOAD_FAST_LOAD_FAST);
  ------------------
  |  |   98|  3.44k|#define LOAD_FAST_LOAD_FAST                     85
  ------------------
 2715|  3.44k|                    }
 2716|  21.8k|                    break;
 2717|  94.1k|                case STORE_FAST:
  ------------------
  |  |  121|  94.1k|#define STORE_FAST                             108
  ------------------
  |  Branch (2717:17): [True: 94.1k, False: 3.25M]
  ------------------
 2718|  94.1k|                    switch (nextop) {
  ------------------
  |  Branch (2718:29): [True: 44.8k, False: 49.3k]
  ------------------
 2719|  4.13k|                        case LOAD_FAST:
  ------------------
  |  |   93|  4.13k|#define LOAD_FAST                               80
  ------------------
  |  Branch (2719:25): [True: 4.13k, False: 90.0k]
  ------------------
 2720|  4.13k|                            make_super_instruction(inst, &b->b_instr[i + 1], STORE_FAST_LOAD_FAST);
  ------------------
  |  |  122|  4.13k|#define STORE_FAST_LOAD_FAST                   109
  ------------------
 2721|  4.13k|                            break;
 2722|  40.6k|                        case STORE_FAST:
  ------------------
  |  |  121|  40.6k|#define STORE_FAST                             108
  ------------------
  |  Branch (2722:25): [True: 40.6k, False: 53.4k]
  ------------------
 2723|  40.6k|                            make_super_instruction(inst, &b->b_instr[i + 1], STORE_FAST_STORE_FAST);
  ------------------
  |  |  123|  40.6k|#define STORE_FAST_STORE_FAST                  110
  ------------------
 2724|  40.6k|                            break;
 2725|  94.1k|                    }
 2726|  94.1k|                    break;
 2727|  3.34M|            }
 2728|  3.34M|        }
 2729|   474k|    }
 2730|  52.7k|    int res = remove_redundant_nops(g);
 2731|  52.7k|    assert(no_redundant_nops(g));
  ------------------
  |  Branch (2731:5): [True: 52.7k, False: 0]
  ------------------
 2732|  52.7k|    return res;
 2733|  52.7k|}
flowgraph.c:make_super_instruction:
 2689|  48.2k|{
 2690|  48.2k|    int32_t line1 = inst1->i_loc.lineno;
 2691|  48.2k|    int32_t line2 = inst2->i_loc.lineno;
 2692|       |    /* Skip if instructions are on different lines */
 2693|  48.2k|    if (line1 >= 0 && line2 >= 0 && line1 != line2) {
  ------------------
  |  Branch (2693:9): [True: 48.2k, False: 0]
  |  Branch (2693:23): [True: 48.2k, False: 0]
  |  Branch (2693:37): [True: 171, False: 48.1k]
  ------------------
 2694|    171|        return;
 2695|    171|    }
 2696|  48.1k|    if (inst1->i_oparg >= 16 || inst2->i_oparg >= 16) {
  ------------------
  |  Branch (2696:9): [True: 23.3k, False: 24.7k]
  |  Branch (2696:33): [True: 3.77k, False: 20.9k]
  ------------------
 2697|  27.1k|        return;
 2698|  27.1k|    }
 2699|  20.9k|    INSTR_SET_OP1(inst1, super_op, (inst1->i_oparg << 4) | inst2->i_oparg);
  ------------------
  |  |  116|  20.9k|    do { \
  |  |  117|  20.9k|        assert(OPCODE_HAS_ARG(OP)); \
  |  |  118|  20.9k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  119|  20.9k|        _instr__ptr_->i_opcode = (OP); \
  |  |  120|  20.9k|        _instr__ptr_->i_oparg = (ARG); \
  |  |  121|  20.9k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (121:14): [Folded, False: 20.9k]
  |  |  ------------------
  ------------------
  |  Branch (2699:5): [True: 20.9k, False: 0]
  ------------------
 2700|  20.9k|    INSTR_SET_OP0(inst2, NOP);
  ------------------
  |  |  125|  20.9k|    do { \
  |  |  126|  20.9k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  20.9k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  20.9k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  20.9k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  20.9k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 20.9k]
  |  |  ------------------
  ------------------
  |  Branch (2700:5): [True: 20.9k, False: 0]
  ------------------
 2701|  20.9k|}
flowgraph.c:no_redundant_nops:
  515|  52.7k|no_redundant_nops(cfg_builder *g) {
  516|  52.7k|    if (remove_redundant_nops(g) != 0) {
  ------------------
  |  Branch (516:9): [True: 0, False: 52.7k]
  ------------------
  517|      0|        return false;
  518|      0|    }
  519|  52.7k|    return true;
  520|  52.7k|}
flowgraph.c:push_cold_blocks_to_end:
 3528|  52.7k|push_cold_blocks_to_end(cfg_builder *g) {
 3529|  52.7k|    basicblock *entryblock = g->g_entryblock;
 3530|  52.7k|    if (entryblock->b_next == NULL) {
  ------------------
  |  Branch (3530:9): [True: 16.6k, False: 36.1k]
  ------------------
 3531|       |        /* single basicblock, no need to reorder */
 3532|  16.6k|        return SUCCESS;
  ------------------
  |  |   21|  16.6k|#define SUCCESS 0
  ------------------
 3533|  16.6k|    }
 3534|  36.1k|    RETURN_IF_ERROR(mark_cold(entryblock));
  ------------------
  |  |   25|  36.1k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 36.1k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3535|       |
 3536|  36.1k|    int next_lbl = get_max_label(g->g_entryblock) + 1;
 3537|       |
 3538|       |    /* If we have a cold block with fallthrough to a warm block, add */
 3539|       |    /* an explicit jump instead of fallthrough */
 3540|   514k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3540:38): [True: 478k, False: 36.1k]
  ------------------
 3541|   478k|        if (b->b_cold && BB_HAS_FALLTHROUGH(b) && b->b_next && b->b_next->b_warm) {
  ------------------
  |  |  251|   679k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 105k, False: 95.6k]
  |  |  ------------------
  ------------------
  |  Branch (3541:13): [True: 201k, False: 276k]
  |  Branch (3541:51): [True: 105k, False: 0]
  |  Branch (3541:64): [True: 19.9k, False: 85.9k]
  ------------------
 3542|  19.9k|            basicblock *explicit_jump = cfg_builder_new_block(g);
 3543|  19.9k|            if (explicit_jump == NULL) {
  ------------------
  |  Branch (3543:17): [True: 0, False: 19.9k]
  ------------------
 3544|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3545|      0|            }
 3546|  19.9k|            if (!IS_LABEL(b->b_next->b_label)) {
  ------------------
  |  |   96|  19.9k|#define IS_LABEL(L) (!SAME_LABEL((L), (NO_LABEL)))
  |  |  ------------------
  |  |  |  |   95|  19.9k|#define SAME_LABEL(L1, L2) ((L1).id == (L2).id)
  |  |  ------------------
  ------------------
  |  Branch (3546:17): [True: 0, False: 19.9k]
  ------------------
 3547|      0|                b->b_next->b_label.id = next_lbl++;
 3548|      0|            }
 3549|  19.9k|            basicblock_addop(explicit_jump, JUMP_NO_INTERRUPT, b->b_next->b_label.id,
  ------------------
  |  |  248|  19.9k|#define JUMP_NO_INTERRUPT                      260
  ------------------
 3550|  19.9k|                             NO_LOCATION);
 3551|  19.9k|            explicit_jump->b_cold = 1;
 3552|  19.9k|            explicit_jump->b_next = b->b_next;
 3553|  19.9k|            explicit_jump->b_predecessors = 1;
 3554|  19.9k|            b->b_next = explicit_jump;
 3555|       |
 3556|       |            /* set target */
 3557|  19.9k|            cfg_instr *last = basicblock_last_instr(explicit_jump);
 3558|  19.9k|            last->i_target = explicit_jump->b_next;
 3559|  19.9k|        }
 3560|   478k|    }
 3561|       |
 3562|  36.1k|    assert(!entryblock->b_cold);  /* First block can't be cold */
  ------------------
  |  Branch (3562:5): [True: 36.1k, False: 0]
  ------------------
 3563|  36.1k|    basicblock *cold_blocks = NULL;
 3564|  36.1k|    basicblock *cold_blocks_tail = NULL;
 3565|       |
 3566|  36.1k|    basicblock *b = entryblock;
 3567|  76.6k|    while(b->b_next) {
  ------------------
  |  Branch (3567:11): [True: 76.6k, False: 31]
  ------------------
 3568|  76.6k|        assert(!b->b_cold);
  ------------------
  |  Branch (3568:9): [True: 76.6k, False: 0]
  ------------------
 3569|   316k|        while (b->b_next && !b->b_next->b_cold) {
  ------------------
  |  Branch (3569:16): [True: 280k, False: 36.1k]
  |  Branch (3569:29): [True: 240k, False: 40.4k]
  ------------------
 3570|   240k|            b = b->b_next;
 3571|   240k|        }
 3572|  76.6k|        if (b->b_next == NULL) {
  ------------------
  |  Branch (3572:13): [True: 36.1k, False: 40.4k]
  ------------------
 3573|       |            /* no more cold blocks */
 3574|  36.1k|            break;
 3575|  36.1k|        }
 3576|       |
 3577|       |        /* b->b_next is the beginning of a cold streak */
 3578|  76.6k|        assert(!b->b_cold && b->b_next->b_cold);
  ------------------
  |  Branch (3578:9): [True: 40.4k, False: 0]
  |  Branch (3578:9): [True: 40.4k, False: 0]
  ------------------
 3579|       |
 3580|  40.4k|        basicblock *b_end = b->b_next;
 3581|   201k|        while (b_end->b_next && b_end->b_next->b_cold) {
  ------------------
  |  Branch (3581:16): [True: 201k, False: 31]
  |  Branch (3581:33): [True: 161k, False: 40.4k]
  ------------------
 3582|   161k|            b_end = b_end->b_next;
 3583|   161k|        }
 3584|       |
 3585|       |        /* b_end is the end of the cold streak */
 3586|  40.4k|        assert(b_end && b_end->b_cold);
  ------------------
  |  Branch (3586:9): [True: 40.4k, False: 0]
  |  Branch (3586:9): [True: 40.4k, False: 0]
  ------------------
 3587|  40.4k|        assert(b_end->b_next == NULL || !b_end->b_next->b_cold);
  ------------------
  |  Branch (3587:9): [True: 31, False: 40.4k]
  |  Branch (3587:9): [True: 40.4k, False: 0]
  ------------------
 3588|       |
 3589|  40.4k|        if (cold_blocks == NULL) {
  ------------------
  |  Branch (3589:13): [True: 3.99k, False: 36.4k]
  ------------------
 3590|  3.99k|            cold_blocks = b->b_next;
 3591|  3.99k|        }
 3592|  36.4k|        else {
 3593|  36.4k|            cold_blocks_tail->b_next = b->b_next;
 3594|  36.4k|        }
 3595|  40.4k|        cold_blocks_tail = b_end;
 3596|  40.4k|        b->b_next = b_end->b_next;
 3597|  40.4k|        b_end->b_next = NULL;
 3598|  40.4k|    }
 3599|  36.1k|    assert(b != NULL && b->b_next == NULL);
  ------------------
  |  Branch (3599:5): [True: 36.1k, False: 0]
  |  Branch (3599:5): [True: 36.1k, False: 0]
  ------------------
 3600|  36.1k|    b->b_next = cold_blocks;
 3601|       |
 3602|  36.1k|    if (cold_blocks != NULL) {
  ------------------
  |  Branch (3602:9): [True: 3.99k, False: 32.1k]
  ------------------
 3603|  3.99k|        RETURN_IF_ERROR(remove_redundant_nops_and_jumps(g));
  ------------------
  |  |   25|  3.99k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 3.99k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3604|  3.99k|    }
 3605|  36.1k|    return SUCCESS;
  ------------------
  |  |   21|  36.1k|#define SUCCESS 0
  ------------------
 3606|  36.1k|}
flowgraph.c:mark_cold:
 3478|  36.1k|mark_cold(basicblock *entryblock) {
 3479|   494k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3479:38): [True: 458k, False: 36.1k]
  ------------------
 3480|   458k|        assert(!b->b_cold && !b->b_warm);
  ------------------
  |  Branch (3480:9): [True: 458k, False: 0]
  |  Branch (3480:9): [True: 458k, False: 0]
  ------------------
 3481|   458k|    }
 3482|  36.1k|    if (mark_warm(entryblock) < 0) {
  ------------------
  |  Branch (3482:9): [True: 0, False: 36.1k]
  ------------------
 3483|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3484|      0|    }
 3485|       |
 3486|  36.1k|    basicblock **stack = make_cfg_traversal_stack(entryblock);
 3487|  36.1k|    if (stack == NULL) {
  ------------------
  |  Branch (3487:9): [True: 0, False: 36.1k]
  ------------------
 3488|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3489|      0|    }
 3490|       |
 3491|  36.1k|    basicblock **sp = stack;
 3492|   494k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3492:38): [True: 458k, False: 36.1k]
  ------------------
 3493|   458k|        if (b->b_except_handler) {
  ------------------
  |  Branch (3493:13): [True: 74.8k, False: 383k]
  ------------------
 3494|  74.8k|            assert(!b->b_warm);
  ------------------
  |  Branch (3494:13): [True: 74.8k, False: 0]
  ------------------
 3495|  74.8k|            *sp++ = b;
 3496|  74.8k|            b->b_visited = 1;
 3497|  74.8k|        }
 3498|   458k|    }
 3499|       |
 3500|   217k|    while (sp > stack) {
  ------------------
  |  Branch (3500:12): [True: 181k, False: 36.1k]
  ------------------
 3501|   181k|        basicblock *b = *(--sp);
 3502|   181k|        b->b_cold = 1;
 3503|   181k|        basicblock *next = b->b_next;
 3504|   181k|        if (next && BB_HAS_FALLTHROUGH(b)) {
  ------------------
  |  |  251|   181k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 105k, False: 75.6k]
  |  |  ------------------
  ------------------
  |  Branch (3504:13): [True: 181k, False: 31]
  ------------------
 3505|   105k|            if (!next->b_warm && !next->b_visited) {
  ------------------
  |  Branch (3505:17): [True: 85.9k, False: 19.9k]
  |  Branch (3505:34): [True: 82.1k, False: 3.77k]
  ------------------
 3506|  82.1k|                *sp++ = next;
 3507|  82.1k|                next->b_visited = 1;
 3508|  82.1k|            }
 3509|   105k|        }
 3510|   864k|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3510:25): [True: 682k, False: 181k]
  ------------------
 3511|   682k|            cfg_instr *instr = &b->b_instr[i];
 3512|   682k|            if (is_jump(instr)) {
  ------------------
  |  Branch (3512:17): [True: 76.1k, False: 606k]
  ------------------
 3513|  76.1k|                assert(i == b->b_iused - 1);
  ------------------
  |  Branch (3513:17): [True: 76.1k, False: 0]
  ------------------
 3514|  76.1k|                basicblock *target = b->b_instr[i].i_target;
 3515|  76.1k|                if (!target->b_warm && !target->b_visited) {
  ------------------
  |  Branch (3515:21): [True: 64.4k, False: 11.7k]
  |  Branch (3515:40): [True: 24.5k, False: 39.8k]
  ------------------
 3516|  24.5k|                    *sp++ = target;
 3517|  24.5k|                    target->b_visited = 1;
 3518|  24.5k|                }
 3519|  76.1k|            }
 3520|   682k|        }
 3521|   181k|    }
 3522|  36.1k|    PyMem_Free(stack);
 3523|  36.1k|    return SUCCESS;
  ------------------
  |  |   21|  36.1k|#define SUCCESS 0
  ------------------
 3524|  36.1k|}
flowgraph.c:mark_warm:
 3447|  36.1k|mark_warm(basicblock *entryblock) {
 3448|  36.1k|    basicblock **stack = make_cfg_traversal_stack(entryblock);
 3449|  36.1k|    if (stack == NULL) {
  ------------------
  |  Branch (3449:9): [True: 0, False: 36.1k]
  ------------------
 3450|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3451|      0|    }
 3452|  36.1k|    basicblock **sp = stack;
 3453|       |
 3454|  36.1k|    *sp++ = entryblock;
 3455|  36.1k|    entryblock->b_visited = 1;
 3456|   264k|    while (sp > stack) {
  ------------------
  |  Branch (3456:12): [True: 227k, False: 36.1k]
  ------------------
 3457|   227k|        basicblock *b = *(--sp);
 3458|   227k|        assert(!b->b_except_handler);
  ------------------
  |  Branch (3458:9): [True: 227k, False: 0]
  ------------------
 3459|   227k|        b->b_warm = 1;
 3460|   227k|        basicblock *next = b->b_next;
 3461|   227k|        if (next && BB_HAS_FALLTHROUGH(b) && !next->b_visited) {
  ------------------
  |  |  251|   453k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 131k, False: 93.9k]
  |  |  ------------------
  ------------------
  |  Branch (3461:13): [True: 225k, False: 2.42k]
  |  Branch (3461:46): [True: 125k, False: 5.76k]
  ------------------
 3462|   125k|            *sp++ = next;
 3463|   125k|            next->b_visited = 1;
 3464|   125k|        }
 3465|  2.18M|        for (int i=0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3465:23): [True: 1.96M, False: 227k]
  ------------------
 3466|  1.96M|            cfg_instr *instr = &b->b_instr[i];
 3467|  1.96M|            if (is_jump(instr) && !instr->i_target->b_visited) {
  ------------------
  |  Branch (3467:17): [True: 131k, False: 1.83M]
  |  Branch (3467:35): [True: 65.9k, False: 65.7k]
  ------------------
 3468|  65.9k|                *sp++ = instr->i_target;
 3469|  65.9k|                instr->i_target->b_visited = 1;
 3470|  65.9k|            }
 3471|  1.96M|        }
 3472|   227k|    }
 3473|  36.1k|    PyMem_Free(stack);
 3474|  36.1k|    return SUCCESS;
  ------------------
  |  |   21|  36.1k|#define SUCCESS 0
  ------------------
 3475|  36.1k|}
flowgraph.c:resolve_line_numbers:
 3782|   105k|{
 3783|   105k|    RETURN_IF_ERROR(duplicate_exits_without_lineno(g));
  ------------------
  |  |   25|   105k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 105k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3784|   105k|    propagate_line_numbers(g->g_entryblock);
 3785|   105k|    return SUCCESS;
  ------------------
  |  |   21|   105k|#define SUCCESS 0
  ------------------
 3786|   105k|}
flowgraph.c:duplicate_exits_without_lineno:
 3688|   105k|{
 3689|   105k|    int next_lbl = get_max_label(g->g_entryblock) + 1;
 3690|       |
 3691|       |    /* Copy all exit blocks without line number that are targets of a jump.
 3692|       |     */
 3693|   105k|    basicblock *entryblock = g->g_entryblock;
 3694|  1.07M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3694:38): [True: 969k, False: 105k]
  ------------------
 3695|   969k|        cfg_instr *last = basicblock_last_instr(b);
 3696|   969k|        if (last == NULL) {
  ------------------
  |  Branch (3696:13): [True: 99.9k, False: 869k]
  ------------------
 3697|  99.9k|            continue;
 3698|  99.9k|        }
 3699|   869k|        if (is_jump(last)) {
  ------------------
  |  Branch (3699:13): [True: 443k, False: 425k]
  ------------------
 3700|   443k|            basicblock *target = next_nonempty_block(last->i_target);
 3701|   443k|            if (is_exit_or_eval_check_without_lineno(target) && target->b_predecessors > 1) {
  ------------------
  |  Branch (3701:17): [True: 6.45k, False: 437k]
  |  Branch (3701:65): [True: 2.09k, False: 4.35k]
  ------------------
 3702|  2.09k|                basicblock *new_target = copy_basicblock(g, target);
 3703|  2.09k|                if (new_target == NULL) {
  ------------------
  |  Branch (3703:21): [True: 0, False: 2.09k]
  ------------------
 3704|      0|                    return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3705|      0|                }
 3706|  2.09k|                new_target->b_instr[0].i_loc = last->i_loc;
 3707|  2.09k|                last->i_target = new_target;
 3708|  2.09k|                target->b_predecessors--;
 3709|  2.09k|                new_target->b_predecessors = 1;
 3710|  2.09k|                new_target->b_next = target->b_next;
 3711|  2.09k|                new_target->b_label.id = next_lbl++;
 3712|  2.09k|                target->b_next = new_target;
 3713|  2.09k|            }
 3714|   443k|        }
 3715|   869k|    }
 3716|       |
 3717|       |    /* Any remaining reachable exit blocks without line number can only be reached by
 3718|       |     * fall through, and thus can only have a single predecessor */
 3719|  1.07M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3719:38): [True: 969k, False: 105k]
  ------------------
 3720|   969k|        if (BB_HAS_FALLTHROUGH(b) && b->b_next && b->b_iused > 0) {
  ------------------
  |  |  251|  1.93M|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 580k, False: 389k]
  |  |  ------------------
  ------------------
  |  Branch (3720:38): [True: 516k, False: 63.7k]
  |  Branch (3720:51): [True: 480k, False: 36.1k]
  ------------------
 3721|   480k|            if (is_exit_or_eval_check_without_lineno(b->b_next)) {
  ------------------
  |  Branch (3721:17): [True: 13.9k, False: 466k]
  ------------------
 3722|  13.9k|                cfg_instr *last = basicblock_last_instr(b);
 3723|  13.9k|                assert(last != NULL);
  ------------------
  |  Branch (3723:17): [True: 13.9k, False: 0]
  ------------------
 3724|  13.9k|                b->b_next->b_instr[0].i_loc = last->i_loc;
 3725|  13.9k|            }
 3726|   480k|        }
 3727|   969k|    }
 3728|   105k|    return SUCCESS;
  ------------------
  |  |   21|   105k|#define SUCCESS 0
  ------------------
 3729|   105k|}
flowgraph.c:is_exit_or_eval_check_without_lineno:
 3667|   923k|is_exit_or_eval_check_without_lineno(basicblock *b) {
 3668|   923k|    if (basicblock_exits_scope(b) || basicblock_has_eval_break(b)) {
  ------------------
  |  Branch (3668:9): [True: 115k, False: 808k]
  |  Branch (3668:38): [True: 207k, False: 601k]
  ------------------
 3669|   322k|        return basicblock_has_no_lineno(b);
 3670|   322k|    }
 3671|   601k|    else {
 3672|       |        return false;
 3673|   601k|    }
 3674|   923k|}
flowgraph.c:basicblock_has_eval_break:
  359|   808k|basicblock_has_eval_break(const basicblock *b) {
  360|  5.27M|    for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (360:21): [True: 4.67M, False: 601k]
  ------------------
  361|  4.67M|        if (OPCODE_HAS_EVAL_BREAK(b->b_instr[i].i_opcode)) {
  ------------------
  |  | 1068|  4.67M|#define OPCODE_HAS_EVAL_BREAK(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_EVAL_BREAK_FLAG))
  |  |  ------------------
  |  |  |  | 1049|  4.67M|#define HAS_EVAL_BREAK_FLAG (64)
  |  |  ------------------
  |  |  |  Branch (1068:35): [True: 207k, False: 4.46M]
  |  |  ------------------
  ------------------
  362|   207k|            return true;
  363|   207k|        }
  364|  4.67M|    }
  365|   601k|    return false;
  366|   808k|}
flowgraph.c:copy_basicblock:
  255|  2.09k|{
  256|       |    /* Cannot copy a block if it has a fallthrough, since
  257|       |     * a block can only have one fallthrough predecessor.
  258|       |     */
  259|  2.09k|    assert(BB_NO_FALLTHROUGH(block));
  ------------------
  |  Branch (259:5): [True: 2.09k, False: 0]
  ------------------
  260|  2.09k|    basicblock *result = cfg_builder_new_block(g);
  261|  2.09k|    if (result == NULL) {
  ------------------
  |  Branch (261:9): [True: 0, False: 2.09k]
  ------------------
  262|      0|        return NULL;
  263|      0|    }
  264|  2.09k|    if (basicblock_append_instructions(result, block) < 0) {
  ------------------
  |  Branch (264:9): [True: 0, False: 2.09k]
  ------------------
  265|      0|        return NULL;
  266|      0|    }
  267|  2.09k|    return result;
  268|  2.09k|}
flowgraph.c:propagate_line_numbers:
 3751|   105k|{
 3752|  1.07M|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3752:38): [True: 969k, False: 105k]
  ------------------
 3753|   969k|        cfg_instr *last = basicblock_last_instr(b);
 3754|   969k|        if (last == NULL) {
  ------------------
  |  Branch (3754:13): [True: 99.9k, False: 869k]
  ------------------
 3755|  99.9k|            continue;
 3756|  99.9k|        }
 3757|       |
 3758|   869k|        location prev_location = NO_LOCATION;
 3759|  9.19M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3759:25): [True: 8.32M, False: 869k]
  ------------------
 3760|  8.32M|            maybe_propagate_location(b, i, prev_location);
 3761|  8.32M|            prev_location = b->b_instr[i].i_loc;
 3762|  8.32M|        }
 3763|   869k|        if (BB_HAS_FALLTHROUGH(b) && b->b_next->b_predecessors == 1) {
  ------------------
  |  |  251|  1.73M|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 480k, False: 389k]
  |  |  ------------------
  ------------------
  |  Branch (3763:38): [True: 307k, False: 173k]
  ------------------
 3764|   307k|            if (b->b_next->b_iused > 0) {
  ------------------
  |  Branch (3764:17): [True: 306k, False: 477]
  ------------------
 3765|   306k|                maybe_propagate_location(b->b_next, 0, prev_location);
 3766|   306k|            }
 3767|   307k|        }
 3768|   869k|        if (is_jump(last)) {
  ------------------
  |  Branch (3768:13): [True: 443k, False: 425k]
  ------------------
 3769|   443k|            basicblock *target = last->i_target;
 3770|   443k|            while (target->b_iused == 0 && target->b_predecessors == 1) {
  ------------------
  |  Branch (3770:20): [True: 329, False: 443k]
  |  Branch (3770:44): [True: 20, False: 309]
  ------------------
 3771|     20|                target = target->b_next;
 3772|     20|            }
 3773|   443k|            if (target->b_predecessors == 1) {
  ------------------
  |  Branch (3773:17): [True: 84.6k, False: 359k]
  ------------------
 3774|  84.6k|                maybe_propagate_location(target, 0, prev_location);
 3775|  84.6k|            }
 3776|   443k|        }
 3777|   869k|    }
 3778|   105k|}
flowgraph.c:maybe_propagate_location:
 3742|  8.71M|{
 3743|  8.71M|    assert(b->b_iused > i);
  ------------------
  |  Branch (3743:5): [True: 8.71M, False: 0]
  ------------------
 3744|  8.71M|    if (b->b_instr[i].i_loc.lineno == NO_LOCATION.lineno) {
  ------------------
  |  Branch (3744:9): [True: 613k, False: 8.10M]
  ------------------
 3745|   613k|         b->b_instr[i].i_loc = loc;
 3746|   613k|    }
 3747|  8.71M|}
flowgraph.c:convert_pseudo_conditional_jumps:
 3610|  52.7k|{
 3611|  52.7k|    basicblock *entryblock = g->g_entryblock;
 3612|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3612:38): [True: 494k, False: 52.7k]
  ------------------
 3613|  3.82M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3613:25): [True: 3.33M, False: 494k]
  ------------------
 3614|  3.33M|            cfg_instr *instr = &b->b_instr[i];
 3615|  3.33M|            if (instr->i_opcode == JUMP_IF_FALSE || instr->i_opcode == JUMP_IF_TRUE) {
  ------------------
  |  |  246|  6.66M|#define JUMP_IF_FALSE                          258
  ------------------
                          if (instr->i_opcode == JUMP_IF_FALSE || instr->i_opcode == JUMP_IF_TRUE) {
  ------------------
  |  |  247|  3.33M|#define JUMP_IF_TRUE                           259
  ------------------
  |  Branch (3615:17): [True: 2.94k, False: 3.33M]
  |  Branch (3615:53): [True: 1.04k, False: 3.32M]
  ------------------
 3616|  3.98k|                assert(i == b->b_iused - 1);
  ------------------
  |  Branch (3616:17): [True: 3.98k, False: 0]
  ------------------
 3617|  3.98k|                instr->i_opcode = instr->i_opcode == JUMP_IF_FALSE ?
  ------------------
  |  |  246|  3.98k|#define JUMP_IF_FALSE                          258
  ------------------
  |  Branch (3617:35): [True: 2.94k, False: 1.04k]
  ------------------
 3618|  2.94k|                                          POP_JUMP_IF_FALSE : POP_JUMP_IF_TRUE;
  ------------------
  |  |  109|  2.94k|#define POP_JUMP_IF_FALSE                       96
  ------------------
                                                        POP_JUMP_IF_FALSE : POP_JUMP_IF_TRUE;
  ------------------
  |  |  112|  5.02k|#define POP_JUMP_IF_TRUE                        99
  ------------------
 3619|  3.98k|                location loc = instr->i_loc;
 3620|  3.98k|                basicblock *except = instr->i_except;
 3621|  3.98k|                cfg_instr copy = {
 3622|  3.98k|                            .i_opcode = COPY,
  ------------------
  |  |   70|  3.98k|#define COPY                                    57
  ------------------
 3623|  3.98k|                            .i_oparg = 1,
 3624|  3.98k|                            .i_loc = loc,
 3625|  3.98k|                            .i_target = NULL,
 3626|  3.98k|                            .i_except = except,
 3627|  3.98k|                };
 3628|  3.98k|                RETURN_IF_ERROR(basicblock_insert_instruction(b, i++, &copy));
  ------------------
  |  |   25|  3.98k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 3.98k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3629|  3.98k|                cfg_instr to_bool = {
 3630|  3.98k|                            .i_opcode = TO_BOOL,
  ------------------
  |  |   50|  3.98k|#define TO_BOOL                                 37
  ------------------
 3631|  3.98k|                            .i_oparg = 0,
 3632|  3.98k|                            .i_loc = loc,
 3633|  3.98k|                            .i_target = NULL,
 3634|  3.98k|                            .i_except = except,
 3635|  3.98k|                };
 3636|  3.98k|                RETURN_IF_ERROR(basicblock_insert_instruction(b, i++, &to_bool));
  ------------------
  |  |   25|  3.98k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 3.98k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3637|  3.98k|            }
 3638|  3.33M|        }
 3639|   494k|    }
 3640|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 3641|  52.7k|}
flowgraph.c:basicblock_insert_instruction:
  271|  30.8k|basicblock_insert_instruction(basicblock *block, int pos, cfg_instr *instr) {
  272|  30.8k|    RETURN_IF_ERROR(basicblock_next_instr(block));
  ------------------
  |  |   25|  30.8k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 30.8k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  273|   522k|    for (int i = block->b_iused - 1; i > pos; i--) {
  ------------------
  |  Branch (273:38): [True: 491k, False: 30.8k]
  ------------------
  274|   491k|        block->b_instr[i] = block->b_instr[i-1];
  275|   491k|    }
  276|  30.8k|    block->b_instr[pos] = *instr;
  277|  30.8k|    return SUCCESS;
  ------------------
  |  |   21|  30.8k|#define SUCCESS 0
  ------------------
  278|  30.8k|}
flowgraph.c:calculate_stackdepth:
  821|  52.7k|{
  822|  52.7k|    basicblock *entryblock = g->g_entryblock;
  823|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (823:38): [True: 494k, False: 52.7k]
  ------------------
  824|   494k|        b->b_startdepth = INT_MIN;
  825|   494k|    }
  826|  52.7k|    basicblock **stack = make_cfg_traversal_stack(entryblock);
  827|  52.7k|    if (!stack) {
  ------------------
  |  Branch (827:9): [True: 0, False: 52.7k]
  ------------------
  828|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  829|      0|    }
  830|       |
  831|       |
  832|  52.7k|    int stackdepth = -1;
  833|  52.7k|    int maxdepth = 0;
  834|  52.7k|    basicblock **sp = stack;
  835|  52.7k|    if (stackdepth_push(&sp, entryblock, 0) < 0) {
  ------------------
  |  Branch (835:9): [True: 0, False: 52.7k]
  ------------------
  836|      0|        goto error;
  837|      0|    }
  838|   509k|    while (sp != stack) {
  ------------------
  |  Branch (838:12): [True: 457k, False: 52.7k]
  ------------------
  839|   457k|        basicblock *b = *--sp;
  840|   457k|        int depth = b->b_startdepth;
  841|   457k|        assert(depth >= 0);
  ------------------
  |  Branch (841:9): [True: 457k, False: 0]
  ------------------
  842|   457k|        basicblock *next = b->b_next;
  843|  3.60M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (843:25): [True: 3.34M, False: 262k]
  ------------------
  844|  3.34M|            cfg_instr *instr = &b->b_instr[i];
  845|  3.34M|            stack_effects effects;
  846|  3.34M|            if (get_stack_effects(instr->i_opcode, instr->i_oparg, 0, &effects) < 0) {
  ------------------
  |  Branch (846:17): [True: 0, False: 3.34M]
  ------------------
  847|      0|                PyErr_Format(PyExc_SystemError,
  848|      0|                             "Invalid stack effect for opcode=%d, arg=%i",
  849|      0|                             instr->i_opcode, instr->i_oparg);
  850|      0|                goto error;
  851|      0|            }
  852|  3.34M|            int new_depth = depth + effects.net;
  853|  3.34M|            if (new_depth < 0) {
  ------------------
  |  Branch (853:17): [True: 0, False: 3.34M]
  ------------------
  854|      0|                PyErr_Format(PyExc_ValueError,
  855|      0|                             "Invalid CFG, stack underflow at line %d", instr->i_loc.lineno);
  856|      0|                goto error;
  857|      0|            }
  858|  3.34M|            maxdepth = Py_MAX(maxdepth, depth);
  ------------------
  |  |  126|  3.34M|       __extension__ \
  |  |  127|  3.34M|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  3.34M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  3.34M|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  3.34M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  3.34M|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 2.64M, False: 699k]
  |  |  ------------------
  ------------------
  859|  3.34M|            if (HAS_TARGET(instr->i_opcode) && instr->i_opcode != END_ASYNC_FOR) {
  ------------------
  |  |   23|  6.68M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  6.68M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  3.34M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 214k, False: 3.12M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  3.12M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  6.25M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 43.1k, False: 3.08M]
  |  |  |  |  ------------------
  |  |  |  |   19|  3.12M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  6.21M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 11.4k, False: 3.07M]
  |  |  |  |  ------------------
  |  |  |  |   20|  3.12M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  3.07M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 20.2k, False: 3.05M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (HAS_TARGET(instr->i_opcode) && instr->i_opcode != END_ASYNC_FOR) {
  ------------------
  |  |   76|   288k|#define END_ASYNC_FOR                           63
  ------------------
  |  Branch (859:48): [True: 287k, False: 1.20k]
  ------------------
  860|   287k|                if (get_stack_effects(instr->i_opcode, instr->i_oparg, 1, &effects) < 0) {
  ------------------
  |  Branch (860:21): [True: 0, False: 287k]
  ------------------
  861|      0|                    PyErr_Format(PyExc_SystemError,
  862|      0|                                 "Invalid stack effect for opcode=%d, arg=%i",
  863|      0|                                 instr->i_opcode, instr->i_oparg);
  864|      0|                    goto error;
  865|      0|                }
  866|   287k|                int target_depth = depth + effects.net;
  867|   287k|                assert(target_depth >= 0); /* invalid code or bug in stackdepth() */
  ------------------
  |  Branch (867:17): [True: 287k, False: 0]
  ------------------
  868|   287k|                maxdepth = Py_MAX(maxdepth, depth);
  ------------------
  |  |  126|   287k|       __extension__ \
  |  |  127|   287k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   287k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   287k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   287k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   287k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 245k, False: 41.8k]
  |  |  ------------------
  ------------------
  869|   287k|                if (stackdepth_push(&sp, instr->i_target, target_depth) < 0) {
  ------------------
  |  Branch (869:21): [True: 0, False: 287k]
  ------------------
  870|      0|                    goto error;
  871|      0|                }
  872|   287k|            }
  873|  3.34M|            depth = new_depth;
  874|  3.34M|            assert(!IS_ASSEMBLER_OPCODE(instr->i_opcode));
  ------------------
  |  Branch (874:13): [True: 0, False: 3.34M]
  |  Branch (874:13): [True: 0, False: 3.34M]
  |  Branch (874:13): [True: 0, False: 3.34M]
  ------------------
  875|  3.34M|            if (IS_UNCONDITIONAL_JUMP_OPCODE(instr->i_opcode) ||
  ------------------
  |  |   40|  6.68M|        ((opcode) == JUMP || \
  |  |  ------------------
  |  |  |  |  245|  6.68M|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (40:10): [True: 7.94k, False: 3.33M]
  |  |  ------------------
  |  |   41|  3.34M|         (opcode) == JUMP_NO_INTERRUPT || \
  |  |  ------------------
  |  |  |  |  248|  6.67M|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (41:10): [True: 78.1k, False: 3.25M]
  |  |  ------------------
  |  |   42|  3.34M|         (opcode) == JUMP_FORWARD || \
  |  |  ------------------
  |  |  |  |   86|  6.59M|#define JUMP_FORWARD                            73
  |  |  ------------------
  |  |  |  Branch (42:10): [True: 0, False: 3.25M]
  |  |  ------------------
  |  |   43|  3.34M|         (opcode) == JUMP_BACKWARD || \
  |  |  ------------------
  |  |  |  |   84|  6.59M|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 3.25M]
  |  |  ------------------
  |  |   44|  6.68M|         (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
  |  |  ------------------
  |  |  |  |   85|  3.25M|#define JUMP_BACKWARD_NO_INTERRUPT              72
  |  |  ------------------
  |  |  |  Branch (44:10): [True: 0, False: 3.25M]
  |  |  ------------------
  ------------------
  876|  3.25M|                IS_SCOPE_EXIT_OPCODE(instr->i_opcode))
  ------------------
  |  |   53|  3.25M|        ((opcode) == RETURN_VALUE || \
  |  |  ------------------
  |  |  |  |   46|  6.51M|#define RETURN_VALUE                            33
  |  |  ------------------
  |  |  |  Branch (53:10): [True: 57.0k, False: 3.19M]
  |  |  ------------------
  |  |   54|  3.25M|         (opcode) == RAISE_VARARGS || \
  |  |  ------------------
  |  |  |  |  113|  6.45M|#define RAISE_VARARGS                          100
  |  |  ------------------
  |  |  |  Branch (54:10): [True: 14.3k, False: 3.18M]
  |  |  ------------------
  |  |   55|  3.25M|         (opcode) == RERAISE)
  |  |  ------------------
  |  |  |  |  114|  3.18M|#define RERAISE                                101
  |  |  ------------------
  |  |  |  Branch (55:10): [True: 37.3k, False: 3.14M]
  |  |  ------------------
  ------------------
  877|   194k|            {
  878|       |                /* remaining code is dead */
  879|   194k|                next = NULL;
  880|   194k|                break;
  881|   194k|            }
  882|  3.34M|        }
  883|   457k|        if (next != NULL) {
  ------------------
  |  Branch (883:13): [True: 262k, False: 194k]
  ------------------
  884|   262k|            assert(BB_HAS_FALLTHROUGH(b));
  ------------------
  |  Branch (884:13): [True: 262k, False: 0]
  ------------------
  885|   262k|            if (stackdepth_push(&sp, next, depth) < 0) {
  ------------------
  |  Branch (885:17): [True: 0, False: 262k]
  ------------------
  886|      0|                goto error;
  887|      0|            }
  888|   262k|        }
  889|   457k|    }
  890|  52.7k|    stackdepth = maxdepth;
  891|  52.7k|error:
  892|  52.7k|    PyMem_Free(stack);
  893|  52.7k|    return stackdepth;
  894|  52.7k|}
flowgraph.c:stackdepth_push:
  803|   602k|{
  804|   602k|    if (!(b->b_startdepth < 0 || b->b_startdepth == depth)) {
  ------------------
  |  Branch (804:11): [True: 457k, False: 145k]
  |  Branch (804:34): [True: 145k, False: 0]
  ------------------
  805|      0|        PyErr_Format(PyExc_ValueError, "Invalid CFG, inconsistent stackdepth");
  806|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  807|      0|    }
  808|   602k|    if (b->b_startdepth < depth && b->b_startdepth < 100) {
  ------------------
  |  Branch (808:9): [True: 457k, False: 145k]
  |  Branch (808:36): [True: 457k, False: 0]
  ------------------
  809|   457k|        assert(b->b_startdepth < 0);
  ------------------
  |  Branch (809:9): [True: 457k, False: 0]
  ------------------
  810|   457k|        b->b_startdepth = depth;
  811|   457k|        *(*sp)++ = b;
  812|   457k|    }
  813|   602k|    return SUCCESS;
  ------------------
  |  |   21|   602k|#define SUCCESS 0
  ------------------
  814|   602k|}
flowgraph.c:prepare_localsplus:
 3995|  52.7k|{
 3996|  52.7k|    assert(PyDict_GET_SIZE(umd->u_varnames) < INT_MAX);
  ------------------
  |  Branch (3996:5): [True: 52.7k, False: 0]
  ------------------
 3997|  52.7k|    assert(PyDict_GET_SIZE(umd->u_cellvars) < INT_MAX);
  ------------------
  |  Branch (3997:5): [True: 52.7k, False: 0]
  ------------------
 3998|  52.7k|    assert(PyDict_GET_SIZE(umd->u_freevars) < INT_MAX);
  ------------------
  |  Branch (3998:5): [True: 52.7k, False: 0]
  ------------------
 3999|  52.7k|    int nlocals = (int)PyDict_GET_SIZE(umd->u_varnames);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4000|  52.7k|    int ncellvars = (int)PyDict_GET_SIZE(umd->u_cellvars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4001|  52.7k|    int nfreevars = (int)PyDict_GET_SIZE(umd->u_freevars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4002|  52.7k|    assert(INT_MAX - nlocals - ncellvars > 0);
  ------------------
  |  Branch (4002:5): [True: 52.7k, False: 0]
  ------------------
 4003|  52.7k|    assert(INT_MAX - nlocals - ncellvars - nfreevars > 0);
  ------------------
  |  Branch (4003:5): [True: 52.7k, False: 0]
  ------------------
 4004|  52.7k|    int nlocalsplus = nlocals + ncellvars + nfreevars;
 4005|  52.7k|    int* cellfixedoffsets = build_cellfixedoffsets(umd);
 4006|  52.7k|    if (cellfixedoffsets == NULL) {
  ------------------
  |  Branch (4006:9): [True: 0, False: 52.7k]
  ------------------
 4007|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4008|      0|    }
 4009|       |
 4010|       |    // This must be called before fix_cell_offsets().
 4011|  52.7k|    if (insert_prefix_instructions(umd, g->g_entryblock, cellfixedoffsets, nfreevars)) {
  ------------------
  |  Branch (4011:9): [True: 0, False: 52.7k]
  ------------------
 4012|      0|        PyMem_Free(cellfixedoffsets);
 4013|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4014|      0|    }
 4015|       |
 4016|  52.7k|    int numdropped = fix_cell_offsets(umd, g->g_entryblock, cellfixedoffsets);
 4017|  52.7k|    PyMem_Free(cellfixedoffsets);  // At this point we're done with it.
 4018|  52.7k|    cellfixedoffsets = NULL;
 4019|  52.7k|    if (numdropped < 0) {
  ------------------
  |  Branch (4019:9): [True: 0, False: 52.7k]
  ------------------
 4020|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 4021|      0|    }
 4022|       |
 4023|  52.7k|    nlocalsplus -= numdropped;
 4024|  52.7k|    return nlocalsplus;
 4025|  52.7k|}
flowgraph.c:build_cellfixedoffsets:
 3843|  52.7k|{
 3844|  52.7k|    int nlocals = (int)PyDict_GET_SIZE(umd->u_varnames);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3845|  52.7k|    int ncellvars = (int)PyDict_GET_SIZE(umd->u_cellvars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3846|  52.7k|    int nfreevars = (int)PyDict_GET_SIZE(umd->u_freevars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3847|       |
 3848|  52.7k|    int noffsets = ncellvars + nfreevars;
 3849|  52.7k|    int *fixed = PyMem_New(int, noffsets);
  ------------------
  |  |   64|  52.7k|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|  52.7k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [True: 0, False: 52.7k]
  |  |  ------------------
  |  |   65|  52.7k|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
 3850|  52.7k|    if (fixed == NULL) {
  ------------------
  |  Branch (3850:9): [True: 0, False: 52.7k]
  ------------------
 3851|      0|        PyErr_NoMemory();
 3852|      0|        return NULL;
 3853|      0|    }
 3854|  77.1k|    for (int i = 0; i < noffsets; i++) {
  ------------------
  |  Branch (3854:21): [True: 24.3k, False: 52.7k]
  ------------------
 3855|  24.3k|        fixed[i] = nlocals + i;
 3856|  24.3k|    }
 3857|       |
 3858|  52.7k|    PyObject *varname, *cellindex;
 3859|  52.7k|    Py_ssize_t pos = 0;
 3860|  64.7k|    while (PyDict_Next(umd->u_cellvars, &pos, &varname, &cellindex)) {
  ------------------
  |  Branch (3860:12): [True: 11.9k, False: 52.7k]
  ------------------
 3861|  11.9k|        PyObject *varindex;
 3862|  11.9k|        if (PyDict_GetItemRef(umd->u_varnames, varname, &varindex) < 0) {
  ------------------
  |  Branch (3862:13): [True: 0, False: 11.9k]
  ------------------
 3863|      0|            goto error;
 3864|      0|        }
 3865|  11.9k|        if (varindex == NULL) {
  ------------------
  |  Branch (3865:13): [True: 11.8k, False: 104]
  ------------------
 3866|  11.8k|            continue;
 3867|  11.8k|        }
 3868|       |
 3869|    104|        int argoffset = PyLong_AsInt(varindex);
 3870|    104|        Py_DECREF(varindex);
  ------------------
  |  |  430|    104|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    104|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    104|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3871|    104|        if (argoffset == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (3871:13): [True: 0, False: 104]
  |  Branch (3871:32): [True: 0, False: 0]
  ------------------
 3872|      0|            goto error;
 3873|      0|        }
 3874|       |
 3875|    104|        int oldindex = PyLong_AsInt(cellindex);
 3876|    104|        if (oldindex == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (3876:13): [True: 0, False: 104]
  |  Branch (3876:31): [True: 0, False: 0]
  ------------------
 3877|      0|            goto error;
 3878|      0|        }
 3879|    104|        fixed[oldindex] = argoffset;
 3880|    104|    }
 3881|  52.7k|    return fixed;
 3882|       |
 3883|      0|error:
 3884|      0|    PyMem_Free(fixed);
 3885|       |    return NULL;
 3886|  52.7k|}
flowgraph.c:insert_prefix_instructions:
 3894|  52.7k|{
 3895|  52.7k|    assert(umd->u_firstlineno > 0);
  ------------------
  |  Branch (3895:5): [True: 52.7k, False: 0]
  ------------------
 3896|       |
 3897|       |    /* Set up cells for any variable that escapes, to be put in a closure. */
 3898|  52.7k|    const int ncellvars = (int)PyDict_GET_SIZE(umd->u_cellvars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3899|  52.7k|    if (ncellvars) {
  ------------------
  |  Branch (3899:9): [True: 11.1k, False: 41.6k]
  ------------------
 3900|       |        // umd->u_cellvars has the cells out of order so we sort them
 3901|       |        // before adding the MAKE_CELL instructions.  Note that we
 3902|       |        // adjust for arg cells, which come first.
 3903|  11.1k|        const int nvars = ncellvars + (int)PyDict_GET_SIZE(umd->u_varnames);
  ------------------
  |  |   63|  11.1k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3904|  11.1k|        int *sorted = PyMem_RawCalloc(nvars, sizeof(int));
 3905|  11.1k|        if (sorted == NULL) {
  ------------------
  |  Branch (3905:13): [True: 0, False: 11.1k]
  ------------------
 3906|      0|            PyErr_NoMemory();
 3907|      0|            return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3908|      0|        }
 3909|  23.1k|        for (int i = 0; i < ncellvars; i++) {
  ------------------
  |  Branch (3909:25): [True: 11.9k, False: 11.1k]
  ------------------
 3910|  11.9k|            sorted[fixed[i]] = i + 1;
 3911|  11.9k|        }
 3912|  30.8k|        for (int i = 0, ncellsused = 0; ncellsused < ncellvars; i++) {
  ------------------
  |  Branch (3912:41): [True: 19.6k, False: 11.1k]
  ------------------
 3913|  19.6k|            int oldindex = sorted[i] - 1;
 3914|  19.6k|            if (oldindex == -1) {
  ------------------
  |  Branch (3914:17): [True: 7.71k, False: 11.9k]
  ------------------
 3915|  7.71k|                continue;
 3916|  7.71k|            }
 3917|  11.9k|            cfg_instr make_cell = {
 3918|  11.9k|                .i_opcode = MAKE_CELL,
  ------------------
  |  |  106|  11.9k|#define MAKE_CELL                               93
  ------------------
 3919|       |                // This will get fixed in offset_derefs().
 3920|  11.9k|                .i_oparg = oldindex,
 3921|  11.9k|                .i_loc = NO_LOCATION,
 3922|  11.9k|                .i_target = NULL,
 3923|  11.9k|                .i_except = NULL,
 3924|  11.9k|            };
 3925|  11.9k|            if (basicblock_insert_instruction(entryblock, ncellsused, &make_cell) < 0) {
  ------------------
  |  Branch (3925:17): [True: 0, False: 11.9k]
  ------------------
 3926|      0|                PyMem_RawFree(sorted);
 3927|      0|                return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 3928|      0|            }
 3929|  11.9k|            ncellsused += 1;
 3930|  11.9k|        }
 3931|  11.1k|        PyMem_RawFree(sorted);
 3932|  11.1k|    }
 3933|       |
 3934|  52.7k|    if (nfreevars) {
  ------------------
  |  Branch (3934:9): [True: 10.9k, False: 41.8k]
  ------------------
 3935|  10.9k|        cfg_instr copy_frees = {
 3936|  10.9k|            .i_opcode = COPY_FREE_VARS,
  ------------------
  |  |   71|  10.9k|#define COPY_FREE_VARS                          58
  ------------------
 3937|  10.9k|            .i_oparg = nfreevars,
 3938|  10.9k|            .i_loc = NO_LOCATION,
 3939|  10.9k|            .i_target = NULL,
 3940|  10.9k|            .i_except = NULL,
 3941|  10.9k|        };
 3942|  10.9k|        RETURN_IF_ERROR(basicblock_insert_instruction(entryblock, 0, &copy_frees));
  ------------------
  |  |   25|  10.9k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 10.9k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
 3943|  10.9k|    }
 3944|       |
 3945|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 3946|  52.7k|}
flowgraph.c:fix_cell_offsets:
 3950|  52.7k|{
 3951|  52.7k|    int nlocals = (int)PyDict_GET_SIZE(umd->u_varnames);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3952|  52.7k|    int ncellvars = (int)PyDict_GET_SIZE(umd->u_cellvars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3953|  52.7k|    int nfreevars = (int)PyDict_GET_SIZE(umd->u_freevars);
  ------------------
  |  |   63|  52.7k|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  52.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  52.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3954|  52.7k|    int noffsets = ncellvars + nfreevars;
 3955|       |
 3956|       |    // First deal with duplicates (arg cells).
 3957|  52.7k|    int numdropped = 0;
 3958|  77.1k|    for (int i = 0; i < noffsets ; i++) {
  ------------------
  |  Branch (3958:21): [True: 24.3k, False: 52.7k]
  ------------------
 3959|  24.3k|        if (fixedmap[i] == i + nlocals) {
  ------------------
  |  Branch (3959:13): [True: 24.2k, False: 104]
  ------------------
 3960|  24.2k|            fixedmap[i] -= numdropped;
 3961|  24.2k|        }
 3962|    104|        else {
 3963|       |            // It was a duplicate (cell/arg).
 3964|    104|            numdropped += 1;
 3965|    104|        }
 3966|  24.3k|    }
 3967|       |
 3968|       |    // Then update offsets, either relative to locals or by cell2arg.
 3969|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3969:38): [True: 494k, False: 52.7k]
  ------------------
 3970|  3.85M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3970:25): [True: 3.36M, False: 494k]
  ------------------
 3971|  3.36M|            cfg_instr *inst = &b->b_instr[i];
 3972|       |            // This is called before extended args are generated.
 3973|  3.36M|            assert(inst->i_opcode != EXTENDED_ARG);
  ------------------
  |  Branch (3973:13): [True: 3.36M, False: 0]
  ------------------
 3974|  3.36M|            int oldoffset = inst->i_oparg;
 3975|  3.36M|            switch(inst->i_opcode) {
  ------------------
  |  Branch (3975:20): [True: 62.0k, False: 3.30M]
  ------------------
 3976|  11.9k|                case MAKE_CELL:
  ------------------
  |  |  106|  11.9k|#define MAKE_CELL                               93
  ------------------
  |  Branch (3976:17): [True: 11.9k, False: 3.35M]
  ------------------
 3977|  30.4k|                case LOAD_CLOSURE:
  ------------------
  |  |  249|  30.4k|#define LOAD_CLOSURE                           261
  ------------------
  |  Branch (3977:17): [True: 18.4k, False: 3.34M]
  ------------------
 3978|  49.2k|                case LOAD_DEREF:
  ------------------
  |  |   92|  49.2k|#define LOAD_DEREF                              79
  ------------------
  |  Branch (3978:17): [True: 18.8k, False: 3.34M]
  ------------------
 3979|  59.2k|                case STORE_DEREF:
  ------------------
  |  |  120|  59.2k|#define STORE_DEREF                            107
  ------------------
  |  Branch (3979:17): [True: 9.90k, False: 3.35M]
  ------------------
 3980|  59.2k|                case DELETE_DEREF:
  ------------------
  |  |   72|  59.2k|#define DELETE_DEREF                            59
  ------------------
  |  Branch (3980:17): [True: 0, False: 3.36M]
  ------------------
 3981|  62.0k|                case LOAD_FROM_DICT_OR_DEREF:
  ------------------
  |  |   99|  62.0k|#define LOAD_FROM_DICT_OR_DEREF                 86
  ------------------
  |  Branch (3981:17): [True: 2.84k, False: 3.36M]
  ------------------
 3982|  62.0k|                    assert(oldoffset >= 0);
  ------------------
  |  Branch (3982:21): [True: 62.0k, False: 0]
  ------------------
 3983|  62.0k|                    assert(oldoffset < noffsets);
  ------------------
  |  Branch (3983:21): [True: 62.0k, False: 0]
  ------------------
 3984|  62.0k|                    assert(fixedmap[oldoffset] >= 0);
  ------------------
  |  Branch (3984:21): [True: 62.0k, False: 0]
  ------------------
 3985|  62.0k|                    inst->i_oparg = fixedmap[oldoffset];
 3986|  3.36M|            }
 3987|  3.36M|        }
 3988|   494k|    }
 3989|       |
 3990|  52.7k|    return numdropped;
 3991|  52.7k|}
flowgraph.c:convert_pseudo_ops:
 3645|  52.7k|{
 3646|  52.7k|    basicblock *entryblock = g->g_entryblock;
 3647|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (3647:38): [True: 494k, False: 52.7k]
  ------------------
 3648|  3.85M|        for (int i = 0; i < b->b_iused; i++) {
  ------------------
  |  Branch (3648:25): [True: 3.36M, False: 494k]
  ------------------
 3649|  3.36M|            cfg_instr *instr = &b->b_instr[i];
 3650|  3.36M|            if (is_block_push(instr)) {
  ------------------
  |  Branch (3650:17): [True: 74.8k, False: 3.28M]
  ------------------
 3651|  74.8k|                INSTR_SET_OP0(instr, NOP);
  ------------------
  |  |  125|  74.8k|    do { \
  |  |  126|  74.8k|        assert(!OPCODE_HAS_ARG(OP)); \
  |  |  127|  74.8k|        cfg_instr *_instr__ptr_ = (I); \
  |  |  128|  74.8k|        _instr__ptr_->i_opcode = (OP); \
  |  |  129|  74.8k|        _instr__ptr_->i_oparg = 0; \
  |  |  130|  74.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (130:14): [Folded, False: 74.8k]
  |  |  ------------------
  ------------------
  |  Branch (3651:17): [True: 74.8k, False: 0]
  ------------------
 3652|  74.8k|            }
 3653|  3.28M|            else if (instr->i_opcode == LOAD_CLOSURE) {
  ------------------
  |  |  249|  3.28M|#define LOAD_CLOSURE                           261
  ------------------
  |  Branch (3653:22): [True: 18.4k, False: 3.27M]
  ------------------
 3654|  18.4k|                assert(is_pseudo_target(LOAD_CLOSURE, LOAD_FAST));
  ------------------
  |  Branch (3654:17): [True: 18.4k, False: 0]
  ------------------
 3655|  18.4k|                instr->i_opcode = LOAD_FAST;
  ------------------
  |  |   93|  18.4k|#define LOAD_FAST                               80
  ------------------
 3656|  18.4k|            }
 3657|  3.27M|            else if (instr->i_opcode == STORE_FAST_MAYBE_NULL) {
  ------------------
  |  |  254|  3.27M|#define STORE_FAST_MAYBE_NULL                  266
  ------------------
  |  Branch (3657:22): [True: 13.0k, False: 3.25M]
  ------------------
 3658|  13.0k|                assert(is_pseudo_target(STORE_FAST_MAYBE_NULL, STORE_FAST));
  ------------------
  |  Branch (3658:17): [True: 13.0k, False: 0]
  ------------------
 3659|  13.0k|                instr->i_opcode = STORE_FAST;
  ------------------
  |  |  121|  13.0k|#define STORE_FAST                             108
  ------------------
 3660|  13.0k|            }
 3661|  3.36M|        }
 3662|   494k|    }
 3663|  52.7k|    return remove_redundant_nops_and_jumps(g);
 3664|  52.7k|}
flowgraph.c:normalize_jumps:
  602|  52.7k|{
  603|  52.7k|    basicblock *entryblock = g->g_entryblock;
  604|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (604:38): [True: 494k, False: 52.7k]
  ------------------
  605|   494k|        b->b_visited = 0;
  606|   494k|    }
  607|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (607:38): [True: 494k, False: 52.7k]
  ------------------
  608|   494k|        b->b_visited = 1;
  609|   494k|        RETURN_IF_ERROR(normalize_jumps_in_block(g, b));
  ------------------
  |  |   25|   494k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 494k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  610|   494k|    }
  611|  52.7k|    return SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
  612|  52.7k|}
flowgraph.c:normalize_jumps_in_block:
  547|   494k|normalize_jumps_in_block(cfg_builder *g, basicblock *b) {
  548|   494k|    cfg_instr *last = basicblock_last_instr(b);
  549|   494k|    if (last == NULL || !IS_CONDITIONAL_JUMP_OPCODE(last->i_opcode)) {
  ------------------
  |  |   47|   432k|        ((opcode) == POP_JUMP_IF_FALSE || \
  |  |  ------------------
  |  |  |  |  109|   865k|#define POP_JUMP_IF_FALSE                       96
  |  |  ------------------
  |  |  |  Branch (47:10): [True: 72.7k, False: 360k]
  |  |  ------------------
  |  |   48|   432k|         (opcode) == POP_JUMP_IF_TRUE || \
  |  |  ------------------
  |  |  |  |  112|   792k|#define POP_JUMP_IF_TRUE                        99
  |  |  ------------------
  |  |  |  Branch (48:10): [True: 13.6k, False: 346k]
  |  |  ------------------
  |  |   49|   432k|         (opcode) == POP_JUMP_IF_NONE || \
  |  |  ------------------
  |  |  |  |  110|   779k|#define POP_JUMP_IF_NONE                        97
  |  |  ------------------
  |  |  |  Branch (49:10): [True: 1.49k, False: 344k]
  |  |  ------------------
  |  |   50|   432k|         (opcode) == POP_JUMP_IF_NOT_NONE)
  |  |  ------------------
  |  |  |  |  111|   344k|#define POP_JUMP_IF_NOT_NONE                    98
  |  |  ------------------
  |  |  |  Branch (50:10): [True: 1.15k, False: 343k]
  |  |  ------------------
  ------------------
  |  Branch (549:9): [True: 61.8k, False: 432k]
  ------------------
  550|   405k|        return SUCCESS;
  ------------------
  |  |   21|   405k|#define SUCCESS 0
  ------------------
  551|   405k|    }
  552|   494k|    assert(!IS_ASSEMBLER_OPCODE(last->i_opcode));
  ------------------
  |  Branch (552:5): [True: 0, False: 89.0k]
  |  Branch (552:5): [True: 0, False: 89.0k]
  |  Branch (552:5): [True: 0, False: 89.0k]
  ------------------
  553|       |
  554|  89.0k|    bool is_forward = last->i_target->b_visited == 0;
  555|  89.0k|    if (is_forward) {
  ------------------
  |  Branch (555:9): [True: 89.0k, False: 25]
  ------------------
  556|  89.0k|        RETURN_IF_ERROR(
  ------------------
  |  |   25|  89.0k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 89.0k]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  557|  89.0k|            basicblock_addop(b, NOT_TAKEN, 0, last->i_loc));
  558|  89.0k|        return SUCCESS;
  ------------------
  |  |   21|  89.0k|#define SUCCESS 0
  ------------------
  559|  89.0k|    }
  560|       |
  561|     25|    int reversed_opcode = 0;
  562|     25|    switch(last->i_opcode) {
  ------------------
  |  Branch (562:12): [True: 25, False: 0]
  ------------------
  563|      0|        case POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  111|      0|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  |  Branch (563:9): [True: 0, False: 25]
  ------------------
  564|      0|            reversed_opcode = POP_JUMP_IF_NONE;
  ------------------
  |  |  110|      0|#define POP_JUMP_IF_NONE                        97
  ------------------
  565|      0|            break;
  566|      0|        case POP_JUMP_IF_NONE:
  ------------------
  |  |  110|      0|#define POP_JUMP_IF_NONE                        97
  ------------------
  |  Branch (566:9): [True: 0, False: 25]
  ------------------
  567|      0|            reversed_opcode = POP_JUMP_IF_NOT_NONE;
  ------------------
  |  |  111|      0|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  568|      0|            break;
  569|     24|        case POP_JUMP_IF_FALSE:
  ------------------
  |  |  109|     24|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (569:9): [True: 24, False: 1]
  ------------------
  570|     24|            reversed_opcode = POP_JUMP_IF_TRUE;
  ------------------
  |  |  112|     24|#define POP_JUMP_IF_TRUE                        99
  ------------------
  571|     24|            break;
  572|      1|        case POP_JUMP_IF_TRUE:
  ------------------
  |  |  112|      1|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (572:9): [True: 1, False: 24]
  ------------------
  573|      1|            reversed_opcode = POP_JUMP_IF_FALSE;
  ------------------
  |  |  109|      1|#define POP_JUMP_IF_FALSE                       96
  ------------------
  574|      1|            break;
  575|     25|    }
  576|       |    /* transform 'conditional jump T' to
  577|       |     * 'reversed_jump b_next' followed by 'jump_backwards T'
  578|       |     */
  579|       |
  580|     25|    basicblock *target = last->i_target;
  581|     25|    basicblock *backwards_jump = cfg_builder_new_block(g);
  582|     25|    if (backwards_jump == NULL) {
  ------------------
  |  Branch (582:9): [True: 0, False: 25]
  ------------------
  583|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
  584|      0|    }
  585|     25|    RETURN_IF_ERROR(
  ------------------
  |  |   25|     25|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 25]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  586|     25|        basicblock_addop(backwards_jump, NOT_TAKEN, 0, last->i_loc));
  587|     25|    RETURN_IF_ERROR(
  ------------------
  |  |   25|     25|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (25:9): [True: 0, False: 25]
  |  |  ------------------
  |  |   26|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  |   27|      0|    }
  ------------------
  588|     25|        basicblock_add_jump(backwards_jump, JUMP, target, last->i_loc));
  589|     25|    backwards_jump->b_startdepth = target->b_startdepth;
  590|     25|    last->i_opcode = reversed_opcode;
  591|     25|    last->i_target = b->b_next;
  592|       |
  593|     25|    backwards_jump->b_cold = b->b_cold;
  594|     25|    backwards_jump->b_next = b->b_next;
  595|     25|    b->b_next = backwards_jump;
  596|     25|    return SUCCESS;
  ------------------
  |  |   21|     25|#define SUCCESS 0
  ------------------
  597|     25|}
flowgraph.c:no_redundant_jumps:
  523|   105k|no_redundant_jumps(cfg_builder *g) {
  524|  1.07M|    for (basicblock *b = g->g_entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (524:43): [True: 969k, False: 105k]
  ------------------
  525|   969k|        cfg_instr *last = basicblock_last_instr(b);
  526|   969k|        if (last != NULL) {
  ------------------
  |  Branch (526:13): [True: 845k, False: 123k]
  ------------------
  527|   845k|            if (IS_UNCONDITIONAL_JUMP_OPCODE(last->i_opcode)) {
  ------------------
  |  |   40|   845k|        ((opcode) == JUMP || \
  |  |  ------------------
  |  |  |  |  245|  1.69M|#define JUMP                                   257
  |  |  ------------------
  |  |  |  Branch (40:10): [True: 25.1k, False: 820k]
  |  |  ------------------
  |  |   41|   845k|         (opcode) == JUMP_NO_INTERRUPT || \
  |  |  ------------------
  |  |  |  |  248|  1.66M|#define JUMP_NO_INTERRUPT                      260
  |  |  ------------------
  |  |  |  Branch (41:10): [True: 140k, False: 679k]
  |  |  ------------------
  |  |   42|   845k|         (opcode) == JUMP_FORWARD || \
  |  |  ------------------
  |  |  |  |   86|  1.52M|#define JUMP_FORWARD                            73
  |  |  ------------------
  |  |  |  Branch (42:10): [True: 0, False: 679k]
  |  |  ------------------
  |  |   43|   845k|         (opcode) == JUMP_BACKWARD || \
  |  |  ------------------
  |  |  |  |   84|  1.52M|#define JUMP_BACKWARD                           71
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 679k]
  |  |  ------------------
  |  |   44|   845k|         (opcode) == JUMP_BACKWARD_NO_INTERRUPT)
  |  |  ------------------
  |  |  |  |   85|   679k|#define JUMP_BACKWARD_NO_INTERRUPT              72
  |  |  ------------------
  |  |  |  Branch (44:10): [True: 0, False: 679k]
  |  |  ------------------
  ------------------
  528|   165k|                basicblock *next = next_nonempty_block(b->b_next);
  529|   165k|                basicblock *jump_target = next_nonempty_block(last->i_target);
  530|   165k|                if (jump_target == next) {
  ------------------
  |  Branch (530:21): [True: 0, False: 165k]
  ------------------
  531|      0|                    assert(next);
  ------------------
  |  Branch (531:21): [True: 0, False: 0]
  ------------------
  532|      0|                    if (last->i_loc.lineno == next->b_instr[0].i_loc.lineno) {
  ------------------
  |  Branch (532:25): [True: 0, False: 0]
  ------------------
  533|      0|                        assert(0);
  ------------------
  |  Branch (533:25): [Folded, False: 0]
  ------------------
  534|      0|                        return false;
  535|      0|                    }
  536|      0|                }
  537|   165k|            }
  538|   845k|        }
  539|   969k|    }
  540|   105k|    return true;
  541|   105k|}
flowgraph.c:optimize_load_fast:
 2893|  52.7k|{
 2894|  52.7k|    int status;
 2895|  52.7k|    ref_stack refs = {0};
 2896|  52.7k|    int max_instrs = 0;
 2897|  52.7k|    basicblock *entryblock = g->g_entryblock;
 2898|   547k|    for (basicblock *b = entryblock; b != NULL; b = b->b_next) {
  ------------------
  |  Branch (2898:38): [True: 494k, False: 52.7k]
  ------------------
 2899|   494k|        max_instrs = Py_MAX(max_instrs, b->b_iused);
  ------------------
  |  |  126|   494k|       __extension__ \
  |  |  127|   494k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|   494k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|   494k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|   494k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|   494k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 425k, False: 69.4k]
  |  |  ------------------
  ------------------
 2900|   494k|    }
 2901|  52.7k|    size_t instr_flags_size = max_instrs * sizeof(uint8_t);
 2902|  52.7k|    uint8_t *instr_flags = PyMem_Malloc(instr_flags_size);
 2903|  52.7k|    if (instr_flags == NULL) {
  ------------------
  |  Branch (2903:9): [True: 0, False: 52.7k]
  ------------------
 2904|      0|        PyErr_NoMemory();
 2905|      0|        return ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2906|      0|    }
 2907|  52.7k|    basicblock **blocks = make_cfg_traversal_stack(entryblock);
 2908|  52.7k|    if (blocks == NULL) {
  ------------------
  |  Branch (2908:9): [True: 0, False: 52.7k]
  ------------------
 2909|      0|        status = ERROR;
  ------------------
  |  |   22|      0|#define ERROR -1
  ------------------
 2910|      0|        goto done;
 2911|      0|    }
 2912|  52.7k|    basicblock **sp = blocks;
 2913|  52.7k|    *sp = entryblock;
 2914|  52.7k|    sp++;
 2915|  52.7k|    entryblock->b_startdepth = 0;
 2916|  52.7k|    entryblock->b_visited = 1;
 2917|       |
 2918|  52.7k|    #define PUSH_REF(instr, local)                \
 2919|  52.7k|        do {                                      \
 2920|  52.7k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
 2921|  52.7k|                status = ERROR;                   \
 2922|  52.7k|                goto done;                        \
 2923|  52.7k|            }                                     \
 2924|  52.7k|        } while(0)
 2925|       |
 2926|   308k|    while (sp != blocks) {
  ------------------
  |  Branch (2926:12): [True: 255k, False: 52.7k]
  ------------------
 2927|   255k|        basicblock *block = *--sp;
 2928|   255k|        assert(block->b_startdepth > -1);
  ------------------
  |  Branch (2928:9): [True: 255k, False: 0]
  ------------------
 2929|       |
 2930|       |        // Reset per-block state.
 2931|   255k|        memset(instr_flags, 0, block->b_iused * sizeof(*instr_flags));
 2932|       |
 2933|       |        // Reset the stack of refs. We don't track references on the stack
 2934|       |        // across basic blocks, but the bytecode will expect their
 2935|       |        // presence. Add dummy references as necessary.
 2936|   255k|        ref_stack_clear(&refs);
 2937|  1.11M|        for (int i = 0; i < block->b_startdepth; i++) {
  ------------------
  |  Branch (2937:25): [True: 857k, False: 255k]
  ------------------
 2938|   857k|            PUSH_REF(DUMMY_INSTR, NOT_LOCAL);
  ------------------
  |  | 2919|   857k|        do {                                      \
  |  | 2920|   857k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 857k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|   857k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 857k]
  |  |  ------------------
  ------------------
 2939|   857k|        }
 2940|       |
 2941|  2.94M|        for (int i = 0; i < block->b_iused; i++) {
  ------------------
  |  Branch (2941:25): [True: 2.68M, False: 255k]
  ------------------
 2942|  2.68M|            cfg_instr *instr = &block->b_instr[i];
 2943|  2.68M|            int opcode = instr->i_opcode;
 2944|  2.68M|            int oparg = instr->i_oparg;
 2945|  2.68M|            assert(opcode != EXTENDED_ARG);
  ------------------
  |  Branch (2945:13): [True: 2.68M, False: 0]
  ------------------
 2946|  2.68M|            switch (opcode) {
 2947|       |                // Opcodes that load and store locals
 2948|  3.12k|                case DELETE_FAST: {
  ------------------
  |  |   73|  3.12k|#define DELETE_FAST                             60
  ------------------
  |  Branch (2948:17): [True: 3.12k, False: 2.68M]
  ------------------
 2949|  3.12k|                    kill_local(instr_flags, &refs, oparg);
 2950|  3.12k|                    break;
 2951|      0|                }
 2952|       |
 2953|  37.1k|                case LOAD_FAST: {
  ------------------
  |  |   93|  37.1k|#define LOAD_FAST                               80
  ------------------
  |  Branch (2953:17): [True: 37.1k, False: 2.65M]
  ------------------
 2954|  37.1k|                    PUSH_REF(i, oparg);
  ------------------
  |  | 2919|  37.1k|        do {                                      \
  |  | 2920|  37.1k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 37.1k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  37.1k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 37.1k]
  |  |  ------------------
  ------------------
 2955|  37.1k|                    break;
 2956|  37.1k|                }
 2957|       |
 2958|  37.1k|                case LOAD_FAST_AND_CLEAR: {
  ------------------
  |  |   94|  5.81k|#define LOAD_FAST_AND_CLEAR                     81
  ------------------
  |  Branch (2958:17): [True: 5.81k, False: 2.68M]
  ------------------
 2959|  5.81k|                    kill_local(instr_flags, &refs, oparg);
 2960|  5.81k|                    PUSH_REF(i, oparg);
  ------------------
  |  | 2919|  5.81k|        do {                                      \
  |  | 2920|  5.81k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 5.81k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  5.81k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 5.81k]
  |  |  ------------------
  ------------------
 2961|  5.81k|                    break;
 2962|  5.81k|                }
 2963|       |
 2964|  5.81k|                case LOAD_FAST_LOAD_FAST: {
  ------------------
  |  |   98|  2.83k|#define LOAD_FAST_LOAD_FAST                     85
  ------------------
  |  Branch (2964:17): [True: 2.83k, False: 2.68M]
  ------------------
 2965|  2.83k|                    PUSH_REF(i, oparg >> 4);
  ------------------
  |  | 2919|  2.83k|        do {                                      \
  |  | 2920|  2.83k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 2.83k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  2.83k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 2.83k]
  |  |  ------------------
  ------------------
 2966|  2.83k|                    PUSH_REF(i, oparg & 15);
  ------------------
  |  | 2919|  2.83k|        do {                                      \
  |  | 2920|  2.83k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 2.83k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  2.83k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 2.83k]
  |  |  ------------------
  ------------------
 2967|  2.83k|                    break;
 2968|  2.83k|                }
 2969|       |
 2970|  80.2k|                case STORE_FAST: {
  ------------------
  |  |  121|  80.2k|#define STORE_FAST                             108
  ------------------
  |  Branch (2970:17): [True: 80.2k, False: 2.60M]
  ------------------
 2971|  80.2k|                    ref r = ref_stack_pop(&refs);
 2972|  80.2k|                    store_local(instr_flags, &refs, oparg, r);
 2973|  80.2k|                    break;
 2974|  2.83k|                }
 2975|       |
 2976|  3.20k|                case STORE_FAST_LOAD_FAST: {
  ------------------
  |  |  122|  3.20k|#define STORE_FAST_LOAD_FAST                   109
  ------------------
  |  Branch (2976:17): [True: 3.20k, False: 2.68M]
  ------------------
 2977|       |                    // STORE_FAST
 2978|  3.20k|                    ref r = ref_stack_pop(&refs);
 2979|  3.20k|                    store_local(instr_flags, &refs, oparg >> 4, r);
 2980|       |                    // LOAD_FAST
 2981|  3.20k|                    PUSH_REF(i, oparg & 15);
  ------------------
  |  | 2919|  3.20k|        do {                                      \
  |  | 2920|  3.20k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 3.20k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  3.20k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 3.20k]
  |  |  ------------------
  ------------------
 2982|  3.20k|                    break;
 2983|  3.20k|                }
 2984|       |
 2985|  14.9k|                case STORE_FAST_STORE_FAST: {
  ------------------
  |  |  123|  14.9k|#define STORE_FAST_STORE_FAST                  110
  ------------------
  |  Branch (2985:17): [True: 14.9k, False: 2.67M]
  ------------------
 2986|       |                    // STORE_FAST
 2987|  14.9k|                    ref r = ref_stack_pop(&refs);
 2988|  14.9k|                    store_local(instr_flags, &refs, oparg >> 4, r);
 2989|       |                    // STORE_FAST
 2990|  14.9k|                    r = ref_stack_pop(&refs);
 2991|  14.9k|                    store_local(instr_flags, &refs, oparg & 15, r);
 2992|  14.9k|                    break;
 2993|  3.20k|                }
 2994|       |
 2995|       |                // Opcodes that shuffle values on the stack
 2996|   160k|                case COPY: {
  ------------------
  |  |   70|   160k|#define COPY                                    57
  ------------------
  |  Branch (2996:17): [True: 160k, False: 2.52M]
  ------------------
 2997|   160k|                    assert(oparg > 0);
  ------------------
  |  Branch (2997:21): [True: 160k, False: 0]
  ------------------
 2998|   160k|                    Py_ssize_t idx = refs.size - oparg;
 2999|   160k|                    ref r = ref_stack_at(&refs, idx);
 3000|   160k|                    PUSH_REF(r.instr, r.local);
  ------------------
  |  | 2919|   160k|        do {                                      \
  |  | 2920|   160k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 160k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|   160k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 160k]
  |  |  ------------------
  ------------------
 3001|   160k|                    break;
 3002|   160k|                }
 3003|       |
 3004|   160k|                case SWAP: {
  ------------------
  |  |  126|  76.7k|#define SWAP                                   113
  ------------------
  |  Branch (3004:17): [True: 76.7k, False: 2.61M]
  ------------------
 3005|  76.7k|                    assert(oparg >= 2);
  ------------------
  |  Branch (3005:21): [True: 76.7k, False: 0]
  ------------------
 3006|  76.7k|                    ref_stack_swap_top(&refs, oparg);
 3007|  76.7k|                    break;
 3008|  76.7k|                }
 3009|       |
 3010|       |                // We treat opcodes that do not consume all of their inputs on
 3011|       |                // a case by case basis, as we have no generic way of knowing
 3012|       |                // how many inputs should be left on the stack.
 3013|       |
 3014|       |                // Opcodes that consume no inputs
 3015|  2.04k|                case FORMAT_SIMPLE:
  ------------------
  |  |   25|  2.04k|#define FORMAT_SIMPLE                           12
  ------------------
  |  Branch (3015:17): [True: 2.04k, False: 2.68M]
  ------------------
 3016|  2.53k|                case GET_ANEXT:
  ------------------
  |  |   28|  2.53k|#define GET_ANEXT                               15
  ------------------
  |  Branch (3016:17): [True: 490, False: 2.68M]
  ------------------
 3017|  4.74k|                case GET_ITER:
  ------------------
  |  |   80|  4.74k|#define GET_ITER                                67
  ------------------
  |  Branch (3017:17): [True: 2.21k, False: 2.68M]
  ------------------
 3018|  5.94k|                case GET_LEN:
  ------------------
  |  |   29|  5.94k|#define GET_LEN                                 16
  ------------------
  |  Branch (3018:17): [True: 1.20k, False: 2.68M]
  ------------------
 3019|  12.1k|                case IMPORT_FROM:
  ------------------
  |  |   81|  12.1k|#define IMPORT_FROM                             68
  ------------------
  |  Branch (3019:17): [True: 6.15k, False: 2.68M]
  ------------------
 3020|  12.1k|                case MATCH_KEYS:
  ------------------
  |  |   35|  12.1k|#define MATCH_KEYS                              22
  ------------------
  |  Branch (3020:17): [True: 5, False: 2.68M]
  ------------------
 3021|  12.1k|                case MATCH_MAPPING:
  ------------------
  |  |   36|  12.1k|#define MATCH_MAPPING                           23
  ------------------
  |  Branch (3021:17): [True: 8, False: 2.68M]
  ------------------
 3022|  12.8k|                case MATCH_SEQUENCE:
  ------------------
  |  |   37|  12.8k|#define MATCH_SEQUENCE                          24
  ------------------
  |  Branch (3022:17): [True: 778, False: 2.68M]
  ------------------
 3023|  12.8k|                case WITH_EXCEPT_START: {
  ------------------
  |  |   54|  12.8k|#define WITH_EXCEPT_START                       41
  ------------------
  |  Branch (3023:17): [True: 0, False: 2.68M]
  ------------------
 3024|  12.8k|                    int num_popped = _PyOpcode_num_popped(opcode, oparg);
 3025|  12.8k|                    int num_pushed = _PyOpcode_num_pushed(opcode, oparg);
 3026|  12.8k|                    int net_pushed = num_pushed - num_popped;
 3027|  12.8k|                    assert(net_pushed >= 0);
  ------------------
  |  Branch (3027:21): [True: 12.8k, False: 0]
  ------------------
 3028|  23.7k|                    for (int j = 0; j < net_pushed; j++) {
  ------------------
  |  Branch (3028:37): [True: 10.8k, False: 12.8k]
  ------------------
 3029|  10.8k|                        PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|  10.8k|        do {                                      \
  |  | 2920|  10.8k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 10.8k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  10.8k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 10.8k]
  |  |  ------------------
  ------------------
 3030|  10.8k|                    }
 3031|  12.8k|                    break;
 3032|  12.8k|                }
 3033|       |
 3034|       |                // Opcodes that consume some inputs and push no new values
 3035|  12.8k|                case DICT_MERGE:
  ------------------
  |  |   74|    746|#define DICT_MERGE                              61
  ------------------
  |  Branch (3035:17): [True: 746, False: 2.68M]
  ------------------
 3036|    890|                case DICT_UPDATE:
  ------------------
  |  |   75|    890|#define DICT_UPDATE                             62
  ------------------
  |  Branch (3036:17): [True: 144, False: 2.68M]
  ------------------
 3037|  28.1k|                case LIST_APPEND:
  ------------------
  |  |   87|  28.1k|#define LIST_APPEND                             74
  ------------------
  |  Branch (3037:17): [True: 27.2k, False: 2.66M]
  ------------------
 3038|  30.1k|                case LIST_EXTEND:
  ------------------
  |  |   88|  30.1k|#define LIST_EXTEND                             75
  ------------------
  |  Branch (3038:17): [True: 2.01k, False: 2.68M]
  ------------------
 3039|  30.5k|                case MAP_ADD:
  ------------------
  |  |  107|  30.5k|#define MAP_ADD                                 94
  ------------------
  |  Branch (3039:17): [True: 423, False: 2.68M]
  ------------------
 3040|  30.5k|                case RERAISE:
  ------------------
  |  |  114|  30.5k|#define RERAISE                                101
  ------------------
  |  Branch (3040:17): [True: 0, False: 2.68M]
  ------------------
 3041|  34.3k|                case SET_ADD:
  ------------------
  |  |  116|  34.3k|#define SET_ADD                                103
  ------------------
  |  Branch (3041:17): [True: 3.78k, False: 2.68M]
  ------------------
 3042|  43.4k|                case SET_UPDATE: {
  ------------------
  |  |  118|  43.4k|#define SET_UPDATE                             105
  ------------------
  |  Branch (3042:17): [True: 9.13k, False: 2.67M]
  ------------------
 3043|  43.4k|                    int num_popped = _PyOpcode_num_popped(opcode, oparg);
 3044|  43.4k|                    int num_pushed = _PyOpcode_num_pushed(opcode, oparg);
 3045|  43.4k|                    int net_popped = num_popped - num_pushed;
 3046|  43.4k|                    assert(net_popped > 0);
  ------------------
  |  Branch (3046:21): [True: 43.4k, False: 0]
  ------------------
 3047|  87.4k|                    for (int i = 0; i < net_popped; i++) {
  ------------------
  |  Branch (3047:37): [True: 43.9k, False: 43.4k]
  ------------------
 3048|  43.9k|                        ref_stack_pop(&refs);
 3049|  43.9k|                    }
 3050|  43.4k|                    break;
 3051|  43.4k|                }
 3052|       |
 3053|  19.9k|                case END_SEND: {
  ------------------
  |  |   23|  19.9k|#define END_SEND                                10
  ------------------
  |  Branch (3053:17): [True: 19.9k, False: 2.66M]
  ------------------
 3054|  19.9k|                    assert(_PyOpcode_num_popped(opcode, oparg) == 3);
  ------------------
  |  Branch (3054:21): [True: 19.9k, False: 0]
  ------------------
 3055|  19.9k|                    assert(_PyOpcode_num_pushed(opcode, oparg) == 1);
  ------------------
  |  Branch (3055:21): [True: 19.9k, False: 0]
  ------------------
 3056|  19.9k|                    ref tos = ref_stack_pop(&refs);
 3057|  19.9k|                    ref_stack_pop(&refs);
 3058|  19.9k|                    ref_stack_pop(&refs);
 3059|  19.9k|                    PUSH_REF(tos.instr, tos.local);
  ------------------
  |  | 2919|  19.9k|        do {                                      \
  |  | 2920|  19.9k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 19.9k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  19.9k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
 3060|  19.9k|                    break;
 3061|  19.9k|                }
 3062|       |
 3063|  19.9k|                case SET_FUNCTION_ATTRIBUTE: {
  ------------------
  |  |  117|  18.7k|#define SET_FUNCTION_ATTRIBUTE                 104
  ------------------
  |  Branch (3063:17): [True: 18.7k, False: 2.66M]
  ------------------
 3064|  18.7k|                    assert(_PyOpcode_num_popped(opcode, oparg) == 2);
  ------------------
  |  Branch (3064:21): [True: 18.7k, False: 0]
  ------------------
 3065|  18.7k|                    assert(_PyOpcode_num_pushed(opcode, oparg) == 1);
  ------------------
  |  Branch (3065:21): [True: 18.7k, False: 0]
  ------------------
 3066|  18.7k|                    ref tos = ref_stack_pop(&refs);
 3067|  18.7k|                    ref_stack_pop(&refs);
 3068|  18.7k|                    PUSH_REF(tos.instr, tos.local);
  ------------------
  |  | 2919|  18.7k|        do {                                      \
  |  | 2920|  18.7k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 18.7k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  18.7k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 18.7k]
  |  |  ------------------
  ------------------
 3069|  18.7k|                    break;
 3070|  18.7k|                }
 3071|       |
 3072|       |                // Opcodes that consume some inputs and push new values
 3073|  18.7k|                case CHECK_EXC_MATCH: {
  ------------------
  |  |   19|      0|#define CHECK_EXC_MATCH                          6
  ------------------
  |  Branch (3073:17): [True: 0, False: 2.68M]
  ------------------
 3074|      0|                    ref_stack_pop(&refs);
 3075|      0|                    PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|      0|        do {                                      \
  |  | 2920|      0|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|      0|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3076|      0|                    break;
 3077|      0|                }
 3078|       |
 3079|  2.20k|                case FOR_ITER: {
  ------------------
  |  |   78|  2.20k|#define FOR_ITER                                65
  ------------------
  |  Branch (3079:17): [True: 2.20k, False: 2.68M]
  ------------------
 3080|  2.20k|                    load_fast_push_block(&sp, instr->i_target, refs.size + 1);
 3081|  2.20k|                    PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|  2.20k|        do {                                      \
  |  | 2920|  2.20k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 2.20k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  2.20k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 2.20k]
  |  |  ------------------
  ------------------
 3082|  2.20k|                    break;
 3083|  2.20k|                }
 3084|       |
 3085|  11.8k|                case LOAD_ATTR:
  ------------------
  |  |   89|  11.8k|#define LOAD_ATTR                               76
  ------------------
  |  Branch (3085:17): [True: 11.8k, False: 2.67M]
  ------------------
 3086|  12.3k|                case LOAD_SUPER_ATTR: {
  ------------------
  |  |  105|  12.3k|#define LOAD_SUPER_ATTR                         92
  ------------------
  |  Branch (3086:17): [True: 521, False: 2.68M]
  ------------------
 3087|  12.3k|                    ref self = ref_stack_pop(&refs);
 3088|  12.3k|                    if (opcode == LOAD_SUPER_ATTR) {
  ------------------
  |  |  105|  12.3k|#define LOAD_SUPER_ATTR                         92
  ------------------
  |  Branch (3088:25): [True: 521, False: 11.8k]
  ------------------
 3089|    521|                        ref_stack_pop(&refs);
 3090|    521|                        ref_stack_pop(&refs);
 3091|    521|                    }
 3092|  12.3k|                    PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|  12.3k|        do {                                      \
  |  | 2920|  12.3k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 12.3k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  12.3k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 12.3k]
  |  |  ------------------
  ------------------
 3093|  12.3k|                    if (oparg & 1) {
  ------------------
  |  Branch (3093:25): [True: 1.13k, False: 11.2k]
  ------------------
 3094|       |                        // A method call; conservatively assume that self is pushed
 3095|       |                        // back onto the stack
 3096|  1.13k|                        PUSH_REF(self.instr, self.local);
  ------------------
  |  | 2919|  1.13k|        do {                                      \
  |  | 2920|  1.13k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 1.13k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  1.13k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 1.13k]
  |  |  ------------------
  ------------------
 3097|  1.13k|                    }
 3098|  12.3k|                    break;
 3099|  12.3k|                }
 3100|       |
 3101|  20.6k|                case LOAD_SPECIAL:
  ------------------
  |  |  104|  20.6k|#define LOAD_SPECIAL                            91
  ------------------
  |  Branch (3101:17): [True: 20.6k, False: 2.66M]
  ------------------
 3102|  20.6k|                case PUSH_EXC_INFO: {
  ------------------
  |  |   43|  20.6k|#define PUSH_EXC_INFO                           30
  ------------------
  |  Branch (3102:17): [True: 0, False: 2.68M]
  ------------------
 3103|  20.6k|                    ref tos = ref_stack_pop(&refs);
 3104|  20.6k|                    PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|  20.6k|        do {                                      \
  |  | 2920|  20.6k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 20.6k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  20.6k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 20.6k]
  |  |  ------------------
  ------------------
 3105|  20.6k|                    PUSH_REF(tos.instr, tos.local);
  ------------------
  |  | 2919|  20.6k|        do {                                      \
  |  | 2920|  20.6k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 20.6k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  20.6k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 20.6k]
  |  |  ------------------
  ------------------
 3106|  20.6k|                    break;
 3107|  20.6k|                }
 3108|       |
 3109|  20.6k|                case SEND: {
  ------------------
  |  |  115|  19.9k|#define SEND                                   102
  ------------------
  |  Branch (3109:17): [True: 19.9k, False: 2.66M]
  ------------------
 3110|  19.9k|                    load_fast_push_block(&sp, instr->i_target, refs.size);
 3111|  19.9k|                    ref_stack_pop(&refs);
 3112|  19.9k|                    PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|  19.9k|        do {                                      \
  |  | 2920|  19.9k|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 19.9k]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  19.9k|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
 3113|  19.9k|                    break;
 3114|  19.9k|                }
 3115|       |
 3116|       |                // Opcodes that consume all of their inputs
 3117|  2.15M|                default: {
  ------------------
  |  Branch (3117:17): [True: 2.15M, False: 535k]
  ------------------
 3118|  2.15M|                    int num_popped = _PyOpcode_num_popped(opcode, oparg);
 3119|  2.15M|                    int num_pushed = _PyOpcode_num_pushed(opcode, oparg);
 3120|  2.15M|                    if (HAS_TARGET(instr->i_opcode)) {
  ------------------
  |  |   23|  2.15M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  4.30M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  2.15M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 95.7k, False: 2.05M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  2.05M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  4.11M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 0, False: 2.05M]
  |  |  |  |  ------------------
  |  |  |  |   19|  2.05M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  4.11M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 0, False: 2.05M]
  |  |  |  |  ------------------
  |  |  |  |   20|  2.05M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  2.05M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 0, False: 2.05M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3121|  95.7k|                        load_fast_push_block(&sp, instr->i_target, refs.size - num_popped + num_pushed);
 3122|  95.7k|                    }
 3123|  2.15M|                    if (!IS_BLOCK_PUSH_OPCODE(instr->i_opcode)) {
  ------------------
  |  |   18|  2.15M|        ((opcode) == SETUP_FINALLY || \
  |  |  ------------------
  |  |  |  |  252|  4.30M|#define SETUP_FINALLY                          264
  |  |  ------------------
  |  |  |  Branch (18:10): [True: 0, False: 2.15M]
  |  |  ------------------
  |  |   19|  2.15M|         (opcode) == SETUP_WITH || \
  |  |  ------------------
  |  |  |  |  253|  4.30M|#define SETUP_WITH                             265
  |  |  ------------------
  |  |  |  Branch (19:10): [True: 0, False: 2.15M]
  |  |  ------------------
  |  |   20|  2.15M|         (opcode) == SETUP_CLEANUP)
  |  |  ------------------
  |  |  |  |  251|  2.15M|#define SETUP_CLEANUP                          263
  |  |  ------------------
  |  |  |  Branch (20:10): [True: 0, False: 2.15M]
  |  |  ------------------
  ------------------
 3124|       |                        // Block push opcodes only affect the stack when jumping
 3125|       |                        // to the target.
 3126|  3.75M|                        for (int j = 0; j < num_popped; j++) {
  ------------------
  |  Branch (3126:41): [True: 1.60M, False: 2.15M]
  ------------------
 3127|  1.60M|                            ref_stack_pop(&refs);
 3128|  1.60M|                        }
 3129|  3.76M|                        for (int j = 0; j < num_pushed; j++) {
  ------------------
  |  Branch (3129:41): [True: 1.61M, False: 2.15M]
  ------------------
 3130|  1.61M|                            PUSH_REF(i, NOT_LOCAL);
  ------------------
  |  | 2919|  1.61M|        do {                                      \
  |  | 2920|  1.61M|            if (ref_stack_push(&refs, (ref){(instr), (local)}) < 0) { \
  |  |  ------------------
  |  |  |  Branch (2920:17): [True: 0, False: 1.61M]
  |  |  ------------------
  |  | 2921|      0|                status = ERROR;                   \
  |  |  ------------------
  |  |  |  |   22|      0|#define ERROR -1
  |  |  ------------------
  |  | 2922|      0|                goto done;                        \
  |  | 2923|      0|            }                                     \
  |  | 2924|  1.61M|        } while(0)
  |  |  ------------------
  |  |  |  Branch (2924:17): [Folded, False: 1.61M]
  |  |  ------------------
  ------------------
 3131|  1.61M|                        }
 3132|  2.15M|                    }
 3133|  2.15M|                    break;
 3134|  2.15M|                }
 3135|  2.68M|            }
 3136|  2.68M|        }
 3137|       |
 3138|       |        // Push fallthrough block
 3139|   255k|        if (BB_HAS_FALLTHROUGH(block)) {
  ------------------
  |  |  251|   255k|#define BB_HAS_FALLTHROUGH(B) (!basicblock_nofallthrough(B))
  |  |  ------------------
  |  |  |  Branch (251:31): [True: 156k, False: 99.1k]
  |  |  ------------------
  ------------------
 3140|   156k|            assert(block->b_next != NULL);
  ------------------
  |  Branch (3140:13): [True: 156k, False: 0]
  ------------------
 3141|   156k|            load_fast_push_block(&sp, block->b_next, refs.size);
 3142|   156k|        }
 3143|       |
 3144|       |        // Mark instructions that produce values that are on the stack at the
 3145|       |        // end of the basic block
 3146|  1.15M|        for (Py_ssize_t i = 0; i < refs.size; i++) {
  ------------------
  |  Branch (3146:32): [True: 901k, False: 255k]
  ------------------
 3147|   901k|            ref r = ref_stack_at(&refs, i);
 3148|   901k|            if (r.instr != -1) {
  ------------------
  |  Branch (3148:17): [True: 277k, False: 624k]
  ------------------
 3149|   277k|                instr_flags[r.instr] |= REF_UNCONSUMED;
 3150|   277k|            }
 3151|   901k|        }
 3152|       |
 3153|       |        // Optimize instructions
 3154|  2.94M|        for (int i = 0; i < block->b_iused; i++) {
  ------------------
  |  Branch (3154:25): [True: 2.68M, False: 255k]
  ------------------
 3155|  2.68M|            if (!instr_flags[i]) {
  ------------------
  |  Branch (3155:17): [True: 2.37M, False: 314k]
  ------------------
 3156|  2.37M|                cfg_instr *instr = &block->b_instr[i];
 3157|  2.37M|                switch (instr->i_opcode) {
 3158|  36.1k|                    case LOAD_FAST:
  ------------------
  |  |   93|  36.1k|#define LOAD_FAST                               80
  ------------------
  |  Branch (3158:21): [True: 36.1k, False: 2.33M]
  ------------------
 3159|  36.1k|                        instr->i_opcode = LOAD_FAST_BORROW;
  ------------------
  |  |   95|  36.1k|#define LOAD_FAST_BORROW                        82
  ------------------
 3160|  36.1k|                        break;
 3161|  2.83k|                    case LOAD_FAST_LOAD_FAST:
  ------------------
  |  |   98|  2.83k|#define LOAD_FAST_LOAD_FAST                     85
  ------------------
  |  Branch (3161:21): [True: 2.83k, False: 2.37M]
  ------------------
 3162|  2.83k|                        instr->i_opcode = LOAD_FAST_BORROW_LOAD_FAST_BORROW;
  ------------------
  |  |   96|  2.83k|#define LOAD_FAST_BORROW_LOAD_FAST_BORROW       83
  ------------------
 3163|  2.83k|                        break;
 3164|  2.33M|                    default:
  ------------------
  |  Branch (3164:21): [True: 2.33M, False: 38.9k]
  ------------------
 3165|  2.33M|                        break;
 3166|  2.37M|                }
 3167|  2.37M|            }
 3168|  2.68M|        }
 3169|   255k|    }
 3170|       |
 3171|  52.7k|    #undef PUSH_REF
 3172|       |
 3173|  52.7k|    status = SUCCESS;
  ------------------
  |  |   21|  52.7k|#define SUCCESS 0
  ------------------
 3174|       |
 3175|  52.7k|done:
 3176|  52.7k|    ref_stack_fini(&refs);
 3177|  52.7k|    PyMem_Free(instr_flags);
 3178|  52.7k|    PyMem_Free(blocks);
 3179|  52.7k|    return status;
 3180|  52.7k|}
flowgraph.c:ref_stack_clear:
 2798|   255k|{
 2799|   255k|    stack->size = 0;
 2800|   255k|}
flowgraph.c:ref_stack_push:
 2754|  2.81M|{
 2755|  2.81M|    if (stack->size == stack->capacity) {
  ------------------
  |  Branch (2755:9): [True: 53.1k, False: 2.76M]
  ------------------
 2756|  53.1k|        Py_ssize_t new_cap = Py_MAX(32, stack->capacity * 2);
  ------------------
  |  |  126|  53.1k|       __extension__ \
  |  |  127|  53.1k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  53.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|  53.1k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  53.1k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|  53.1k|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 52.7k, False: 331]
  |  |  ------------------
  ------------------
 2757|  53.1k|        ref *refs = PyMem_Realloc(stack->refs, sizeof(*stack->refs) * new_cap);
 2758|  53.1k|        if (refs == NULL) {
  ------------------
  |  Branch (2758:13): [True: 0, False: 53.1k]
  ------------------
 2759|      0|            PyErr_NoMemory();
 2760|      0|            return -1;
 2761|      0|        }
 2762|  53.1k|        stack->refs = refs;
 2763|  53.1k|        stack->capacity = new_cap;
 2764|  53.1k|    }
 2765|  2.81M|    stack->refs[stack->size] = r;
 2766|  2.81M|    stack->size++;
 2767|  2.81M|    return 0;
 2768|  2.81M|}
flowgraph.c:kill_local:
 2824|   122k|{
 2825|  6.60M|    for (Py_ssize_t i = 0; i < refs->size; i++) {
  ------------------
  |  Branch (2825:28): [True: 6.47M, False: 122k]
  ------------------
 2826|  6.47M|        ref r = ref_stack_at(refs, i);
 2827|  6.47M|        if (r.local == local) {
  ------------------
  |  Branch (2827:13): [True: 271, False: 6.47M]
  ------------------
 2828|    271|            assert(r.instr >= 0);
  ------------------
  |  Branch (2828:13): [True: 271, False: 0]
  ------------------
 2829|    271|            instr_flags[r.instr] |= SUPPORT_KILLED;
 2830|    271|        }
 2831|  6.47M|    }
 2832|   122k|}
flowgraph.c:ref_stack_pop:
 2772|  1.91M|{
 2773|  1.91M|    assert(stack->size > 0);
  ------------------
  |  Branch (2773:5): [True: 1.91M, False: 0]
  ------------------
 2774|  1.91M|    stack->size--;
 2775|  1.91M|    ref r = stack->refs[stack->size];
 2776|  1.91M|    return r;
 2777|  1.91M|}
flowgraph.c:store_local:
 2836|   113k|{
 2837|   113k|    kill_local(instr_flags, refs, local);
 2838|   113k|    if (r.instr != DUMMY_INSTR) {
  ------------------
  |  | 2736|   113k|#define DUMMY_INSTR -1
  ------------------
  |  Branch (2838:9): [True: 105k, False: 8.17k]
  ------------------
 2839|   105k|        instr_flags[r.instr] |= STORED_AS_LOCAL;
 2840|   105k|    }
 2841|   113k|}
flowgraph.c:ref_stack_at:
 2791|  7.54M|{
 2792|  7.54M|    assert(idx >= 0 && idx < stack->size);
  ------------------
  |  Branch (2792:5): [True: 7.54M, False: 0]
  |  Branch (2792:5): [True: 7.54M, False: 0]
  ------------------
 2793|  7.54M|    return stack->refs[idx];
 2794|  7.54M|}
flowgraph.c:ref_stack_swap_top:
 2781|  76.7k|{
 2782|  76.7k|    Py_ssize_t idx = stack->size - off;
 2783|  76.7k|    assert(idx >= 0 && idx < stack->size);
  ------------------
  |  Branch (2783:5): [True: 76.7k, False: 0]
  |  Branch (2783:5): [True: 76.7k, False: 0]
  ------------------
 2784|  76.7k|    ref tmp = stack->refs[idx];
 2785|  76.7k|    stack->refs[idx] = stack->refs[stack->size - 1];
 2786|  76.7k|    stack->refs[stack->size - 1] = tmp;
 2787|  76.7k|}
flowgraph.c:load_fast_push_block:
 2846|   274k|{
 2847|   274k|    assert(target->b_startdepth >= 0 && target->b_startdepth == start_depth);
  ------------------
  |  Branch (2847:5): [True: 274k, False: 0]
  |  Branch (2847:5): [True: 274k, False: 0]
  ------------------
 2848|   274k|    if (!target->b_visited) {
  ------------------
  |  Branch (2848:9): [True: 202k, False: 71.5k]
  ------------------
 2849|   202k|        target->b_visited = 1;
 2850|   202k|        *(*sp)++ = target;
 2851|   202k|    }
 2852|   274k|}
flowgraph.c:ref_stack_fini:
 2804|  52.7k|{
 2805|  52.7k|    if (stack->refs != NULL) {
  ------------------
  |  Branch (2805:9): [True: 52.7k, False: 3]
  ------------------
 2806|  52.7k|        PyMem_Free(stack->refs);
 2807|  52.7k|    }
 2808|       |    stack->refs = NULL;
 2809|  52.7k|    stack->capacity = 0;
 2810|  52.7k|    stack->size = 0;
 2811|  52.7k|}
flowgraph.c:get_stack_effects:
  780|  3.63M|{
  781|  3.63M|    if (opcode < 0) {
  ------------------
  |  Branch (781:9): [True: 0, False: 3.63M]
  ------------------
  782|      0|        return -1;
  783|      0|    }
  784|  3.63M|    if ((opcode <= MAX_REAL_OPCODE) && (_PyOpcode_Deopt[opcode] != opcode)) {
  ------------------
  |  |   11|  3.63M|#define MAX_REAL_OPCODE 254
  ------------------
  |  Branch (784:9): [True: 3.27M, False: 355k]
  |  Branch (784:40): [True: 0, False: 3.27M]
  ------------------
  785|       |        // Specialized instructions are not supported.
  786|      0|        return -1;
  787|      0|    }
  788|  3.63M|    int popped = _PyOpcode_num_popped(opcode, oparg);
  789|  3.63M|    int pushed = _PyOpcode_num_pushed(opcode, oparg);
  790|  3.63M|    if (popped < 0 || pushed < 0) {
  ------------------
  |  Branch (790:9): [True: 0, False: 3.63M]
  |  Branch (790:23): [True: 0, False: 3.63M]
  ------------------
  791|      0|        return -1;
  792|      0|    }
  793|  3.63M|    if (IS_BLOCK_PUSH_OPCODE(opcode) && !jump) {
  ------------------
  |  |   18|  7.26M|        ((opcode) == SETUP_FINALLY || \
  |  |  ------------------
  |  |  |  |  252|  7.26M|#define SETUP_FINALLY                          264
  |  |  ------------------
  |  |  |  Branch (18:10): [True: 86.3k, False: 3.54M]
  |  |  ------------------
  |  |   19|  3.63M|         (opcode) == SETUP_WITH || \
  |  |  ------------------
  |  |  |  |  253|  7.18M|#define SETUP_WITH                             265
  |  |  ------------------
  |  |  |  Branch (19:10): [True: 22.8k, False: 3.52M]
  |  |  ------------------
  |  |   20|  7.26M|         (opcode) == SETUP_CLEANUP)
  |  |  ------------------
  |  |  |  |  251|  3.52M|#define SETUP_CLEANUP                          263
  |  |  ------------------
  |  |  |  Branch (20:10): [True: 40.4k, False: 3.48M]
  |  |  ------------------
  ------------------
  |  Branch (793:41): [True: 74.8k, False: 74.8k]
  ------------------
  794|  74.8k|        effects->net = 0;
  795|  74.8k|        return 0;
  796|  74.8k|    }
  797|  3.55M|    effects->net = pushed - popped;
  798|  3.55M|    return 0;
  799|  3.63M|}

_PyFrame_Traverse:
   12|     10|{
   13|     10|    Py_VISIT(frame->frame_obj);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 10]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
   14|     10|    Py_VISIT(frame->f_locals);
  ------------------
  |  |  194|     10|    do {                                                                \
  |  |  195|     10|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 10]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
   15|     10|    _Py_VISIT_STACKREF(frame->f_funcobj);
  ------------------
  |  |  863|     10|    do {                                                                \
  |  |  864|     10|        if (!PyStackRef_IsNullOrInt(ref)) {                             \
  |  |  ------------------
  |  |  |  |  498|     10|#define PyStackRef_IsNullOrInt(stackref) (PyStackRef_IsNull(stackref) || PyStackRef_IsTaggedInt(stackref))
  |  |  |  |  ------------------
  |  |  |  |  |  |  482|     20|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  479|     10|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   55|     10|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:32): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (498:74): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  865|     10|            int vret = _PyGC_VisitStackRef(&(ref), visit, arg);         \
  |  |  866|     10|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (866:17): [True: 0, False: 10]
  |  |  ------------------
  |  |  867|     10|                return vret;                                            \
  |  |  868|     10|        }                                                               \
  |  |  869|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (869:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
   16|     10|    _Py_VISIT_STACKREF(frame->f_executable);
  ------------------
  |  |  863|     10|    do {                                                                \
  |  |  864|     10|        if (!PyStackRef_IsNullOrInt(ref)) {                             \
  |  |  ------------------
  |  |  |  |  498|     10|#define PyStackRef_IsNullOrInt(stackref) (PyStackRef_IsNull(stackref) || PyStackRef_IsTaggedInt(stackref))
  |  |  |  |  ------------------
  |  |  |  |  |  |  482|     20|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  479|     10|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   55|     10|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:32): [True: 0, False: 10]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (498:74): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  865|     10|            int vret = _PyGC_VisitStackRef(&(ref), visit, arg);         \
  |  |  866|     10|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (866:17): [True: 0, False: 10]
  |  |  ------------------
  |  |  867|     10|                return vret;                                            \
  |  |  868|     10|        }                                                               \
  |  |  869|     10|    } while (0)
  |  |  ------------------
  |  |  |  Branch (869:14): [Folded, False: 10]
  |  |  ------------------
  ------------------
   17|     10|    return _PyGC_VisitFrameStack(frame, visit, arg);
   18|     10|}
_PyFrame_MakeAndSetFrameObject:
   22|  23.1k|{
   23|  23.1k|    PyObject *exc = PyErr_GetRaisedException();
   24|       |
   25|  23.1k|    PyFrameObject *f = _PyFrame_New_NoTrack(_PyFrame_GetCode(frame));
   26|  23.1k|    if (f == NULL) {
  ------------------
  |  Branch (26:9): [True: 0, False: 23.1k]
  ------------------
   27|      0|        Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   28|      0|        return NULL;
   29|      0|    }
   30|  23.1k|    PyErr_SetRaisedException(exc);
   31|       |
   32|       |    // GH-97002: There was a time when a frame object could be created when we
   33|       |    // are allocating the new frame object f above, so frame->frame_obj would
   34|       |    // be assigned already. That path does not exist anymore. We won't call any
   35|       |    // Python code in this function and garbage collection will not run.
   36|       |    // Notice that _PyFrame_New_NoTrack() can potentially raise a MemoryError,
   37|       |    // but it won't allocate a traceback until the frame unwinds, so we are safe
   38|       |    // here.
   39|  23.1k|    assert(frame->owner != FRAME_OWNED_BY_FRAME_OBJECT);
  ------------------
  |  Branch (39:5): [True: 23.1k, False: 0]
  ------------------
   40|  23.1k|    f->f_frame = frame;
   41|       |#ifdef Py_GIL_DISABLED
   42|       |    PyFrameObject *expected = NULL;
   43|       |    if (!_Py_atomic_compare_exchange_ptr(&frame->frame_obj, &expected, f)) {
   44|       |        Py_DECREF(f);
   45|       |        return expected;
   46|       |    }
   47|       |#else
   48|  23.1k|    assert(frame->frame_obj == NULL);
  ------------------
  |  Branch (48:5): [True: 23.1k, False: 0]
  ------------------
   49|  23.1k|    frame->frame_obj = f;
   50|  23.1k|#endif
   51|  23.1k|    return f;
   52|  23.1k|}
_PyFrame_ClearLocals:
  101|  6.65M|{
  102|  6.65M|    assert(frame->stackpointer != NULL);
  ------------------
  |  Branch (102:5): [True: 6.65M, False: 0]
  ------------------
  103|  6.65M|    _PyStackRef *sp = frame->stackpointer;
  104|  6.65M|    _PyStackRef *locals = frame->localsplus;
  105|  6.65M|    frame->stackpointer = locals;
  106|  27.1M|    while (sp > locals) {
  ------------------
  |  Branch (106:12): [True: 20.5M, False: 6.65M]
  ------------------
  107|  20.5M|        sp--;
  108|  20.5M|        PyStackRef_XCLOSE(*sp);
  109|  20.5M|    }
  110|       |    Py_CLEAR(frame->f_locals);
  ------------------
  |  |  484|  6.65M|    do { \
  |  |  485|  6.65M|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|  6.65M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|  6.65M|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|  6.65M|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|  6.65M|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|  6.65M|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 757, False: 6.65M]
  |  |  ------------------
  |  |  488|    757|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    757|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    757|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    757|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    757|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    757|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    757|        } \
  |  |  491|  6.65M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6.65M]
  |  |  ------------------
  ------------------
  111|  6.65M|}
_PyFrame_ClearExceptCode:
  115|  6.66M|{
  116|       |    /* It is the responsibility of the owning generator/coroutine
  117|       |     * to have cleared the enclosing generator, if any. */
  118|  6.66M|    assert(frame->owner != FRAME_OWNED_BY_GENERATOR ||
  ------------------
  |  Branch (118:5): [True: 6.66M, False: 1.24k]
  |  Branch (118:5): [True: 1.24k, False: 0]
  ------------------
  119|  6.66M|           FT_ATOMIC_LOAD_INT8_RELAXED(_PyGen_GetGeneratorFromFrame(frame)->gi_frame_state) == FRAME_CLEARED);
  120|       |    // GH-99729: Clearing this frame can expose the stack (via finalizers). It's
  121|       |    // crucial that this frame has been unlinked, and is no longer visible:
  122|  6.66M|    assert(_PyThreadState_GET()->current_frame != frame);
  ------------------
  |  Branch (122:5): [True: 6.66M, False: 0]
  ------------------
  123|  6.66M|    PyFrameObject *f = FT_ATOMIC_LOAD_PTR_RELAXED(frame->frame_obj);
  ------------------
  |  |  153|  6.66M|#define FT_ATOMIC_LOAD_PTR_RELAXED(value) value
  ------------------
  124|  6.66M|    if (f != NULL) {
  ------------------
  |  Branch (124:9): [True: 23.1k, False: 6.63M]
  ------------------
  125|  23.1k|        FT_ATOMIC_STORE_PTR_RELAXED(frame->frame_obj, NULL);
  ------------------
  |  |  163|  23.1k|#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
  ------------------
  126|  23.1k|        if (!_PyObject_IsUniquelyReferenced((PyObject *)f)) {
  ------------------
  |  Branch (126:13): [True: 4.21k, False: 18.8k]
  ------------------
  127|  4.21k|            take_ownership(f, frame);
  128|  4.21k|            Py_DECREF(f);
  ------------------
  |  |  430|  4.21k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|  4.21k|            return;
  130|  4.21k|        }
  131|  18.8k|        Py_DECREF(f);
  ------------------
  |  |  430|  18.8k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  18.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  18.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|  18.8k|    }
  133|  6.65M|    _PyFrame_ClearLocals(frame);
  134|  6.65M|    PyStackRef_CLEAR(frame->f_funcobj);
  ------------------
  |  |  732|  6.65M|    do { \
  |  |  733|  6.65M|        _PyStackRef *_tmp_op_ptr = &(REF); \
  |  |  734|  6.65M|        _PyStackRef _tmp_old_op = (*_tmp_op_ptr); \
  |  |  735|  6.65M|        *_tmp_op_ptr = PyStackRef_NULL; \
  |  |  736|  6.65M|        PyStackRef_XCLOSE(_tmp_old_op); \
  |  |  737|  6.65M|    } while (0)
  |  |  ------------------
  |  |  |  Branch (737:14): [Folded, False: 6.65M]
  |  |  ------------------
  ------------------
  135|  6.65M|}
frame.c:take_ownership:
   56|  4.21k|{
   57|  4.21k|    Py_BEGIN_CRITICAL_SECTION(f);
  ------------------
  |  |   51|  4.21k|    {
  ------------------
   58|  4.21k|    assert(frame->owner < FRAME_OWNED_BY_INTERPRETER);
  ------------------
  |  Branch (58:5): [True: 4.21k, False: 0]
  ------------------
   59|  4.21k|    assert(frame->owner != FRAME_OWNED_BY_FRAME_OBJECT);
  ------------------
  |  Branch (59:5): [True: 4.21k, False: 0]
  ------------------
   60|  4.21k|    _PyInterpreterFrame *new_frame = (_PyInterpreterFrame *)f->_f_frame_data;
   61|  4.21k|    _PyFrame_Copy(frame, new_frame);
   62|       |    // _PyFrame_Copy takes the reference to the executable,
   63|       |    // so we need to restore it.
   64|  4.21k|    new_frame->f_executable = PyStackRef_DUP(new_frame->f_executable);
   65|  4.21k|    f->f_frame = new_frame;
   66|  4.21k|    new_frame->owner = FRAME_OWNED_BY_FRAME_OBJECT;
   67|  4.21k|    if (_PyFrame_IsIncomplete(new_frame)) {
  ------------------
  |  Branch (67:9): [True: 0, False: 4.21k]
  ------------------
   68|       |        // This may be a newly-created generator or coroutine frame. Since it's
   69|       |        // dead anyways, just pretend that the first RESUME ran:
   70|      0|        PyCodeObject *code = _PyFrame_GetCode(new_frame);
   71|      0|        new_frame->instr_ptr =
   72|      0|            _PyFrame_GetBytecode(new_frame) + code->_co_firsttraceable + 1;
   73|      0|    }
   74|  4.21k|    assert(!_PyFrame_IsIncomplete(new_frame));
  ------------------
  |  Branch (74:5): [True: 4.21k, False: 0]
  ------------------
   75|  4.21k|    assert(f->f_back == NULL);
  ------------------
  |  Branch (75:5): [True: 4.21k, False: 0]
  ------------------
   76|  4.21k|    _PyInterpreterFrame *prev = _PyFrame_GetFirstComplete(frame->previous);
   77|  4.21k|    if (prev) {
  ------------------
  |  Branch (77:9): [True: 2.95k, False: 1.26k]
  ------------------
   78|  2.95k|        assert(prev->owner < FRAME_OWNED_BY_INTERPRETER);
  ------------------
  |  Branch (78:9): [True: 2.95k, False: 0]
  ------------------
   79|  2.95k|        PyObject *exc = PyErr_GetRaisedException();
   80|       |        /* Link PyFrameObjects.f_back and remove link through _PyInterpreterFrame.previous */
   81|  2.95k|        PyFrameObject *back = _PyFrame_GetFrameObject(prev);
   82|  2.95k|        if (back == NULL) {
  ------------------
  |  Branch (82:13): [True: 0, False: 2.95k]
  ------------------
   83|       |            /* Memory error here. */
   84|      0|            assert(PyErr_ExceptionMatches(PyExc_MemoryError));
  ------------------
  |  Branch (84:13): [True: 0, False: 0]
  ------------------
   85|       |            /* Nothing we can do about it */
   86|      0|            PyErr_Clear();
   87|      0|        }
   88|  2.95k|        else {
   89|  2.95k|            f->f_back = (PyFrameObject *)Py_NewRef(back);
  ------------------
  |  |  550|  2.95k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  2.95k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.95k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|  2.95k|        }
   91|  2.95k|        PyErr_SetRaisedException(exc);
   92|  2.95k|    }
   93|  4.21k|    if (!_PyObject_GC_IS_TRACKED((PyObject *)f)) {
  ------------------
  |  |   81|  4.21k|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  4.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (93:9): [True: 4.21k, False: 0]
  ------------------
   94|  4.21k|        _PyObject_GC_TRACK((PyObject *)f);
  ------------------
  |  |  505|  4.21k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|  4.21k|    }
   96|  4.21k|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  4.21k|    }
  ------------------
   97|  4.21k|}

_PyFuture_FromAST:
  141|  12.7k|{
  142|  12.7k|    ff->ff_features = 0;
  143|  12.7k|    ff->ff_location = (_Py_SourceLocation){-1, -1, -1, -1};
  144|       |
  145|  12.7k|    if (!future_parse(ff, mod, filename)) {
  ------------------
  |  Branch (145:9): [True: 15, False: 12.7k]
  ------------------
  146|     15|        return 0;
  147|     15|    }
  148|  12.7k|    return 1;
  149|  12.7k|}
future.c:future_parse:
   96|  12.7k|{
   97|  12.7k|    if (!(mod->kind == Module_kind || mod->kind == Interactive_kind)) {
  ------------------
  |  Branch (97:11): [True: 8.78k, False: 3.95k]
  |  Branch (97:39): [True: 2.23k, False: 1.72k]
  ------------------
   98|  1.72k|        return 1;
   99|  1.72k|    }
  100|       |
  101|  11.0k|    Py_ssize_t n = asdl_seq_LEN(mod->v.Module.body);
  ------------------
  |  |   83|  11.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  22.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 359, False: 10.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|  11.0k|    if (n == 0) {
  ------------------
  |  Branch (102:9): [True: 359, False: 10.6k]
  ------------------
  103|    359|        return 1;
  104|    359|    }
  105|       |
  106|  10.6k|    Py_ssize_t i = 0;
  107|  10.6k|    if (_PyAST_GetDocString(mod->v.Module.body) != NULL) {
  ------------------
  |  Branch (107:9): [True: 204, False: 10.4k]
  ------------------
  108|    204|        i++;
  109|    204|    }
  110|       |
  111|  12.1k|    for (; i < n; i++) {
  ------------------
  |  Branch (111:12): [True: 11.9k, False: 192]
  ------------------
  112|  11.9k|        stmt_ty s = (stmt_ty)asdl_seq_GET(mod->v.Module.body, i);
  ------------------
  |  |   82|  11.9k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  11.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  113|       |
  114|       |        /* The only things that can precede a future statement
  115|       |         *  are another future statement and a doc string.
  116|       |         */
  117|       |
  118|  11.9k|        if (s->kind == ImportFrom_kind && s->v.ImportFrom.level == 0) {
  ------------------
  |  Branch (118:13): [True: 1.60k, False: 10.3k]
  |  Branch (118:43): [True: 1.57k, False: 28]
  ------------------
  119|  1.57k|            identifier modname = s->v.ImportFrom.module;
  120|  1.57k|            if (modname &&
  ------------------
  |  Branch (120:17): [True: 1.57k, False: 0]
  ------------------
  121|  1.57k|                _PyUnicode_EqualToASCIIString(modname, "__future__")) {
  ------------------
  |  Branch (121:17): [True: 1.49k, False: 83]
  ------------------
  122|  1.49k|                if (!future_check_features(ff, s, filename)) {
  ------------------
  |  Branch (122:21): [True: 15, False: 1.48k]
  ------------------
  123|     15|                    return 0;
  124|     15|                }
  125|  1.48k|                ff->ff_location = SRC_LOCATION_FROM_AST(s);
  ------------------
  |  |   58|  1.48k|    (_Py_SourceLocation){ \
  |  |   59|  1.48k|               .lineno = (n)->lineno, \
  |  |   60|  1.48k|               .end_lineno = (n)->end_lineno, \
  |  |   61|  1.48k|               .col_offset = (n)->col_offset, \
  |  |   62|  1.48k|               .end_col_offset = (n)->end_col_offset }
  ------------------
  126|  1.48k|            }
  127|     83|            else {
  128|     83|                return 1;
  129|     83|            }
  130|  1.57k|        }
  131|  10.3k|        else {
  132|  10.3k|            return 1;
  133|  10.3k|        }
  134|  11.9k|    }
  135|    192|    return 1;
  136|  10.6k|}
future.c:future_check_features:
   11|  1.49k|{
   12|  1.49k|    Py_ssize_t i;
   13|       |
   14|  1.49k|    assert(s->kind == ImportFrom_kind);
  ------------------
  |  Branch (14:5): [True: 1.49k, False: 0]
  ------------------
   15|       |
   16|  1.49k|    asdl_alias_seq *names = s->v.ImportFrom.names;
   17|  2.97k|    for (i = 0; i < asdl_seq_LEN(names); i++) {
  ------------------
  |  |   83|  2.97k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  5.95k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.97k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (17:17): [True: 1.49k, False: 1.48k]
  ------------------
   18|  1.49k|        alias_ty name = (alias_ty)asdl_seq_GET(names, i);
  ------------------
  |  |   82|  1.49k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.49k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
   19|  1.49k|        const char *feature = PyUnicode_AsUTF8(name->name);
   20|  1.49k|        if (!feature)
  ------------------
  |  Branch (20:13): [True: 0, False: 1.49k]
  ------------------
   21|      0|            return 0;
   22|  1.49k|        if (strcmp(feature, FUTURE_NESTED_SCOPES) == 0) {
  ------------------
  |  |   37|  1.49k|#define FUTURE_NESTED_SCOPES "nested_scopes"
  ------------------
  |  Branch (22:13): [True: 0, False: 1.49k]
  ------------------
   23|      0|            continue;
   24|  1.49k|        } else if (strcmp(feature, FUTURE_GENERATORS) == 0) {
  ------------------
  |  |   38|  1.49k|#define FUTURE_GENERATORS "generators"
  ------------------
  |  Branch (24:20): [True: 0, False: 1.49k]
  ------------------
   25|      0|            continue;
   26|  1.49k|        } else if (strcmp(feature, FUTURE_DIVISION) == 0) {
  ------------------
  |  |   39|  1.49k|#define FUTURE_DIVISION "division"
  ------------------
  |  Branch (26:20): [True: 0, False: 1.49k]
  ------------------
   27|      0|            continue;
   28|  1.49k|        } else if (strcmp(feature, FUTURE_ABSOLUTE_IMPORT) == 0) {
  ------------------
  |  |   40|  1.49k|#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
  ------------------
  |  Branch (28:20): [True: 0, False: 1.49k]
  ------------------
   29|      0|            continue;
   30|  1.49k|        } else if (strcmp(feature, FUTURE_WITH_STATEMENT) == 0) {
  ------------------
  |  |   41|  1.49k|#define FUTURE_WITH_STATEMENT "with_statement"
  ------------------
  |  Branch (30:20): [True: 0, False: 1.49k]
  ------------------
   31|      0|            continue;
   32|  1.49k|        } else if (strcmp(feature, FUTURE_PRINT_FUNCTION) == 0) {
  ------------------
  |  |   42|  1.49k|#define FUTURE_PRINT_FUNCTION "print_function"
  ------------------
  |  Branch (32:20): [True: 1, False: 1.49k]
  ------------------
   33|      1|            continue;
   34|  1.49k|        } else if (strcmp(feature, FUTURE_UNICODE_LITERALS) == 0) {
  ------------------
  |  |   43|  1.49k|#define FUTURE_UNICODE_LITERALS "unicode_literals"
  ------------------
  |  Branch (34:20): [True: 0, False: 1.49k]
  ------------------
   35|      0|            continue;
   36|  1.49k|        } else if (strcmp(feature, FUTURE_BARRY_AS_BDFL) == 0) {
  ------------------
  |  |   44|  1.49k|#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
  ------------------
  |  Branch (36:20): [True: 0, False: 1.49k]
  ------------------
   37|      0|            ff->ff_features |= CO_FUTURE_BARRY_AS_BDFL;
  ------------------
  |  |  145|      0|#define CO_FUTURE_BARRY_AS_BDFL  0x400000
  ------------------
   38|  1.49k|        } else if (strcmp(feature, FUTURE_GENERATOR_STOP) == 0) {
  ------------------
  |  |   45|  1.49k|#define FUTURE_GENERATOR_STOP "generator_stop"
  ------------------
  |  Branch (38:20): [True: 0, False: 1.49k]
  ------------------
   39|      0|            continue;
   40|  1.49k|        } else if (strcmp(feature, FUTURE_ANNOTATIONS) == 0) {
  ------------------
  |  |   46|  1.49k|#define FUTURE_ANNOTATIONS "annotations"
  ------------------
  |  Branch (40:20): [True: 1.47k, False: 15]
  ------------------
   41|  1.47k|            ff->ff_features |= CO_FUTURE_ANNOTATIONS;
  ------------------
  |  |  147|  1.47k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
   42|  1.47k|        } else if (strcmp(feature, "braces") == 0) {
  ------------------
  |  Branch (42:20): [True: 0, False: 15]
  ------------------
   43|      0|            PyErr_SetString(PyExc_SyntaxError,
   44|      0|                            "not a chance");
   45|      0|            PyErr_RangedSyntaxLocationObject(filename,
   46|      0|                                             name->lineno,
   47|      0|                                             name->col_offset + 1,
   48|      0|                                             name->end_lineno,
   49|      0|                                             name->end_col_offset + 1);
   50|      0|            return 0;
   51|     15|        } else {
   52|       |            // Keep this list in sync with the feature checks above.
   53|     15|            PyObject *future_features = Py_BuildValue("[ssssssssss]",
   54|     15|                                                      FUTURE_NESTED_SCOPES,
  ------------------
  |  |   37|     15|#define FUTURE_NESTED_SCOPES "nested_scopes"
  ------------------
   55|     15|                                                      FUTURE_GENERATORS,
  ------------------
  |  |   38|     15|#define FUTURE_GENERATORS "generators"
  ------------------
   56|     15|                                                      FUTURE_DIVISION,
  ------------------
  |  |   39|     15|#define FUTURE_DIVISION "division"
  ------------------
   57|     15|                                                      FUTURE_ABSOLUTE_IMPORT,
  ------------------
  |  |   40|     15|#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
  ------------------
   58|     15|                                                      FUTURE_WITH_STATEMENT,
  ------------------
  |  |   41|     15|#define FUTURE_WITH_STATEMENT "with_statement"
  ------------------
   59|     15|                                                      FUTURE_PRINT_FUNCTION,
  ------------------
  |  |   42|     15|#define FUTURE_PRINT_FUNCTION "print_function"
  ------------------
   60|     15|                                                      FUTURE_UNICODE_LITERALS,
  ------------------
  |  |   43|     15|#define FUTURE_UNICODE_LITERALS "unicode_literals"
  ------------------
   61|     15|                                                      FUTURE_BARRY_AS_BDFL,
  ------------------
  |  |   44|     15|#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
  ------------------
   62|     15|                                                      FUTURE_GENERATOR_STOP,
  ------------------
  |  |   45|     15|#define FUTURE_GENERATOR_STOP "generator_stop"
  ------------------
   63|     15|                                                      FUTURE_ANNOTATIONS);
  ------------------
  |  |   46|     15|#define FUTURE_ANNOTATIONS "annotations"
  ------------------
   64|     15|            PyObject *suggestion = NULL;
   65|     15|            if (future_features != NULL) {
  ------------------
  |  Branch (65:17): [True: 15, False: 0]
  ------------------
   66|     15|                suggestion = _Py_CalculateSuggestions(future_features,
   67|     15|                                                      name->name);
   68|     15|            }
   69|     15|            if (suggestion != NULL) {
  ------------------
  |  Branch (69:17): [True: 4, False: 11]
  ------------------
   70|      4|                PyErr_Format(PyExc_SyntaxError,
   71|      4|                             UNDEFINED_FUTURE_FEATURE ". Did you mean: %R?",
  ------------------
  |  |    7|      4|#define UNDEFINED_FUTURE_FEATURE "future feature '%.100s' is not defined"
  ------------------
   72|      4|                             feature, suggestion);
   73|      4|                Py_DECREF(suggestion);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|      4|            }
   75|     11|            else {
   76|       |                // Do not fail on missing suggestion,
   77|       |                // just show the default message.
   78|     11|                PyErr_Format(PyExc_SyntaxError,
   79|     11|                             UNDEFINED_FUTURE_FEATURE,
  ------------------
  |  |    7|     11|#define UNDEFINED_FUTURE_FEATURE "future feature '%.100s' is not defined"
  ------------------
   80|     11|                             feature);
   81|     11|            }
   82|     15|            Py_XDECREF(future_features);
  ------------------
  |  |  524|     15|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|     15|            PyErr_RangedSyntaxLocationObject(filename,
   84|     15|                                             name->lineno,
   85|     15|                                             name->col_offset + 1,
   86|     15|                                             name->end_lineno,
   87|     15|                                             name->end_col_offset + 1);
   88|     15|            return 0;
   89|     15|        }
   90|  1.49k|    }
   91|  1.48k|    return 1;
   92|  1.49k|}

_PyGC_InitState:
  114|      2|{
  115|      2|#define INIT_HEAD(GEN) \
  116|      2|    do { \
  117|      2|        GEN.head._gc_next = (uintptr_t)&GEN.head; \
  118|      2|        GEN.head._gc_prev = (uintptr_t)&GEN.head; \
  119|      2|    } while (0)
  120|       |
  121|      8|    for (int i = 0; i < NUM_GENERATIONS; i++) {
  ------------------
  |  |  217|      8|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (121:21): [True: 6, False: 2]
  ------------------
  122|      6|        assert(gcstate->generations[i].count == 0);
  ------------------
  |  Branch (122:9): [True: 6, False: 0]
  ------------------
  123|      6|        INIT_HEAD(gcstate->generations[i]);
  ------------------
  |  |  116|      6|    do { \
  |  |  117|      6|        GEN.head._gc_next = (uintptr_t)&GEN.head; \
  |  |  118|      6|        GEN.head._gc_prev = (uintptr_t)&GEN.head; \
  |  |  119|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (119:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
  124|      6|    };
  125|      2|    gcstate->generation0 = GEN_HEAD(gcstate, 0);
  ------------------
  |  |  101|      2|#define GEN_HEAD(gcstate, n) (&(gcstate)->generations[n].head)
  ------------------
  126|      2|    INIT_HEAD(gcstate->permanent_generation);
  ------------------
  |  |  116|      2|    do { \
  |  |  117|      2|        GEN.head._gc_next = (uintptr_t)&GEN.head; \
  |  |  118|      2|        GEN.head._gc_prev = (uintptr_t)&GEN.head; \
  |  |  119|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (119:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  127|       |
  128|      2|#undef INIT_HEAD
  129|      2|}
_PyGC_Init:
  134|      2|{
  135|      2|    GCState *gcstate = &interp->gc;
  136|       |
  137|      2|    gcstate->generation_stats = PyMem_RawCalloc(1, sizeof(struct gc_stats));
  138|      2|    if (gcstate->generation_stats == NULL) {
  ------------------
  |  Branch (138:9): [True: 0, False: 2]
  ------------------
  139|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  140|      0|    }
  141|       |
  142|      2|    gcstate->garbage = PyList_New(0);
  143|      2|    if (gcstate->garbage == NULL) {
  ------------------
  |  Branch (143:9): [True: 0, False: 2]
  ------------------
  144|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  145|      0|    }
  146|       |
  147|      2|    gcstate->callbacks = PyList_New(0);
  148|      2|    if (gcstate->callbacks == NULL) {
  ------------------
  |  Branch (148:9): [True: 0, False: 2]
  ------------------
  149|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  150|      0|    }
  151|       |
  152|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  153|      2|}
_PyGC_VisitStackRef:
  460|     92|{
  461|       |    // This is a bit tricky! We want to ignore stackrefs with embedded
  462|       |    // refcounts when computing the incoming references, but otherwise treat
  463|       |    // them like normal.
  464|     92|    assert(!PyStackRef_IsTaggedInt(*ref));
  ------------------
  |  Branch (464:5): [True: 92, False: 0]
  ------------------
  465|     92|    if (!PyStackRef_RefcountOnObject(*ref) && (visit == visit_decref)) {
  ------------------
  |  Branch (465:9): [True: 44, False: 48]
  |  Branch (465:47): [True: 22, False: 22]
  ------------------
  466|     22|        return 0;
  467|     22|    }
  468|     70|    Py_VISIT(PyStackRef_AsPyObjectBorrow(*ref));
  ------------------
  |  |  194|     70|    do {                                                                \
  |  |  195|     70|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 70, False: 0]
  |  |  ------------------
  |  |  196|     70|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     70|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     70|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     70|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 70]
  |  |  ------------------
  |  |  198|     70|                return vret;                                            \
  |  |  199|     70|        }                                                               \
  |  |  200|     70|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 70]
  |  |  ------------------
  ------------------
  469|     70|    return 0;
  470|     70|}
_PyGC_VisitFrameStack:
  474|     10|{
  475|     10|    _PyStackRef *ref = _PyFrame_GetLocalsArray(frame);
  476|       |    /* locals and stack */
  477|     94|    for (; ref < frame->stackpointer; ref++) {
  ------------------
  |  Branch (477:12): [True: 84, False: 10]
  ------------------
  478|     84|        if (!PyStackRef_IsTaggedInt(*ref)) {
  ------------------
  |  Branch (478:13): [True: 84, False: 0]
  ------------------
  479|     84|            _Py_VISIT_STACKREF(*ref);
  ------------------
  |  |  863|     84|    do {                                                                \
  |  |  864|     84|        if (!PyStackRef_IsNullOrInt(ref)) {                             \
  |  |  ------------------
  |  |  |  |  498|     84|#define PyStackRef_IsNullOrInt(stackref) (PyStackRef_IsNull(stackref) || PyStackRef_IsTaggedInt(stackref))
  |  |  |  |  ------------------
  |  |  |  |  |  |  482|    168|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  479|     84|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   55|     84|#define Py_TAG_REFCNT 1
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (482:32): [True: 12, False: 72]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (498:74): [True: 0, False: 72]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  865|     72|            int vret = _PyGC_VisitStackRef(&(ref), visit, arg);         \
  |  |  866|     72|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (866:17): [True: 0, False: 72]
  |  |  ------------------
  |  |  867|     72|                return vret;                                            \
  |  |  868|     72|        }                                                               \
  |  |  869|     84|    } while (0)
  |  |  ------------------
  |  |  |  Branch (869:14): [Folded, False: 84]
  |  |  ------------------
  ------------------
  480|     84|        }
  481|     84|    }
  482|     10|    return 0;
  483|     10|}
PyObject_GC_Track:
 1930|  97.3k|{
 1931|  97.3k|    PyObject *op = _PyObject_CAST(op_raw);
  ------------------
  |  |  171|  97.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  97.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1932|  97.3k|    if (_PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|  97.3k|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  97.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 0, False: 97.3k]
  |  |  ------------------
  ------------------
 1933|      0|        _PyObject_ASSERT_FAILED_MSG(op,
  ------------------
  |  |  428|      0|    _PyObject_AssertFailed((obj), NULL, (msg), __FILE__, __LINE__, __func__)
  ------------------
 1934|      0|                                    "object already tracked "
 1935|      0|                                    "by the garbage collector");
 1936|      0|    }
 1937|  97.3k|    _PyObject_GC_TRACK(op);
  ------------------
  |  |  505|  97.3k|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  97.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  97.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1938|       |
 1939|       |#ifdef Py_DEBUG
 1940|       |    /* Check that the object is valid: validate objects traversed
 1941|       |       by tp_traverse() */
 1942|       |    traverseproc traverse = Py_TYPE(op)->tp_traverse;
 1943|       |    (void)traverse(op, visit_validate, op);
 1944|       |#endif
 1945|  97.3k|}
PyObject_GC_UnTrack:
 1949|  60.4M|{
 1950|  60.4M|    PyObject *op = _PyObject_CAST(op_raw);
  ------------------
  |  |  171|  60.4M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  ------------------
  |  |  |  |   37|  60.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 1951|       |    /* The code for some objects, such as tuples, is a bit
 1952|       |     * sloppy about when the object is tracked and untracked. */
 1953|  60.4M|    if (_PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|  60.4M|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  60.4M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 13.2M, False: 47.2M]
  |  |  ------------------
  ------------------
 1954|  13.2M|        _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|  13.2M|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  13.2M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  13.2M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1955|  13.2M|    }
 1956|  60.4M|}
PyObject_IS_GC:
 1960|   277M|{
 1961|   277M|    return _PyObject_IS_GC(obj);
 1962|   277M|}
_Py_ScheduleGC:
 1966|  33.0M|{
 1967|  33.0M|    if (!_Py_eval_breaker_bit_is_set(tstate, _PY_GC_SCHEDULED_BIT))
  ------------------
  |  |  349|  33.0M|#define _PY_GC_SCHEDULED_BIT (1U << 4)
  ------------------
  |  Branch (1967:9): [True: 8.38k, False: 33.0M]
  ------------------
 1968|  8.38k|    {
 1969|  8.38k|        _Py_set_eval_breaker_bit(tstate, _PY_GC_SCHEDULED_BIT);
  ------------------
  |  |  349|  8.38k|#define _PY_GC_SCHEDULED_BIT (1U << 4)
  ------------------
 1970|  8.38k|    }
 1971|  33.0M|}
_PyObject_GC_Link:
 1975|  50.8M|{
 1976|  50.8M|    PyGC_Head *gc = AS_GC(op);
  ------------------
  |  |   52|  50.8M|#define AS_GC(op) _Py_AS_GC(op)
  ------------------
 1977|       |    // gc must be correctly aligned
 1978|  50.8M|    _PyObject_ASSERT(op, ((uintptr_t)gc & (sizeof(uintptr_t)-1)) == 0);
  ------------------
  |  |  425|  50.8M|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  50.8M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  50.8M|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 50.8M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  50.8M|      ? (void)(0) \
  |  |  |  |  |  |  418|  50.8M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1979|       |
 1980|  50.8M|    PyThreadState *tstate = _PyThreadState_GET();
 1981|  50.8M|    GCState *gcstate = &tstate->interp->gc;
 1982|  50.8M|    gc->_gc_next = 0;
 1983|  50.8M|    gc->_gc_prev = 0;
 1984|  50.8M|    gcstate->generations[0].count++; /* number of allocated GC objects */
 1985|  50.8M|    if (gcstate->generations[0].count > gcstate->generations[0].threshold &&
  ------------------
  |  Branch (1985:9): [True: 33.0M, False: 17.7M]
  ------------------
 1986|  33.0M|        gcstate->enabled &&
  ------------------
  |  Branch (1986:9): [True: 33.0M, False: 0]
  ------------------
 1987|  33.0M|        gcstate->generations[0].threshold &&
  ------------------
  |  Branch (1987:9): [True: 33.0M, False: 0]
  ------------------
 1988|  33.0M|        !_Py_atomic_load_int_relaxed(&gcstate->collecting) &&
  ------------------
  |  Branch (1988:9): [True: 33.0M, False: 0]
  ------------------
 1989|  33.0M|        !_PyErr_Occurred(tstate))
  ------------------
  |  Branch (1989:9): [True: 33.0M, False: 0]
  ------------------
 1990|  33.0M|    {
 1991|  33.0M|        _Py_ScheduleGC(tstate);
 1992|  33.0M|    }
 1993|  50.8M|}
_Py_RunGC:
 1997|  8.38k|{
 1998|  8.38k|    GCState *gcstate = get_gc_state();
 1999|  8.38k|    if (!gcstate->enabled) {
  ------------------
  |  Branch (1999:9): [True: 0, False: 8.38k]
  ------------------
 2000|      0|        return;
 2001|      0|    }
 2002|  8.38k|    gc_collect_main(tstate, GENERATION_AUTO, _Py_GC_REASON_HEAP);
  ------------------
  |  |   56|  8.38k|#define GENERATION_AUTO (-1)
  ------------------
 2003|  8.38k|}
_PyObject_GC_New:
 2027|   791k|{
 2028|   791k|    size_t presize = _PyType_PreHeaderSize(tp);
 2029|   791k|    size_t size = _PyObject_SIZE(tp);
 2030|   791k|    if (_PyType_HasFeature(tp, Py_TPFLAGS_INLINE_VALUES)) {
  ------------------
  |  |  472|   791k|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (2030:9): [True: 0, False: 791k]
  ------------------
 2031|      0|        size += _PyInlineValuesSize(tp);
 2032|      0|    }
 2033|   791k|    PyObject *op = gc_alloc(tp, size, presize);
 2034|   791k|    if (op == NULL) {
  ------------------
  |  Branch (2034:9): [True: 0, False: 791k]
  ------------------
 2035|      0|        return NULL;
 2036|      0|    }
 2037|   791k|    _PyObject_Init(op, tp);
 2038|   791k|    if (tp->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|   791k|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (2038:9): [True: 0, False: 791k]
  ------------------
 2039|      0|        _PyObject_InitInlineValues(op, tp);
 2040|      0|    }
 2041|   791k|    return op;
 2042|   791k|}
_PyObject_GC_NewVar:
 2046|  48.7M|{
 2047|  48.7M|    PyVarObject *op;
 2048|       |
 2049|  48.7M|    if (nitems < 0) {
  ------------------
  |  Branch (2049:9): [True: 0, False: 48.7M]
  ------------------
 2050|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2051|      0|        return NULL;
 2052|      0|    }
 2053|  48.7M|    size_t presize = _PyType_PreHeaderSize(tp);
 2054|  48.7M|    size_t size = _PyObject_VAR_SIZE(tp, nitems);
 2055|  48.7M|    op = (PyVarObject *)gc_alloc(tp, size, presize);
 2056|  48.7M|    if (op == NULL) {
  ------------------
  |  Branch (2056:9): [True: 0, False: 48.7M]
  ------------------
 2057|      0|        return NULL;
 2058|      0|    }
 2059|  48.7M|    _PyObject_InitVar(op, tp, nitems);
 2060|  48.7M|    return op;
 2061|  48.7M|}
_PyObject_GC_Resize:
 2079|      2|{
 2080|      2|    const size_t basicsize = _PyObject_VAR_SIZE(Py_TYPE(op), nitems);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2081|      2|    const size_t presize = _PyType_PreHeaderSize(Py_TYPE(op));
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2082|      2|    _PyObject_ASSERT((PyObject *)op, !_PyObject_GC_IS_TRACKED(op));
  ------------------
  |  |  425|      2|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      2|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      2|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      2|      ? (void)(0) \
  |  |  |  |  |  |  418|      2|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2083|      2|    if (basicsize > (size_t)PY_SSIZE_T_MAX - presize) {
  ------------------
  |  |  137|      2|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2083:9): [True: 0, False: 2]
  ------------------
 2084|      0|        return (PyVarObject *)PyErr_NoMemory();
 2085|      0|    }
 2086|      2|    char *mem = (char *)op - presize;
 2087|      2|    mem = (char *)_PyObject_ReallocWithType(Py_TYPE(op), mem, presize + basicsize);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2088|      2|    if (mem == NULL) {
  ------------------
  |  Branch (2088:9): [True: 0, False: 2]
  ------------------
 2089|      0|        return (PyVarObject *)PyErr_NoMemory();
 2090|      0|    }
 2091|      2|    op = (PyVarObject *) (mem + presize);
 2092|      2|    Py_SET_SIZE(op, nitems);
  ------------------
  |  |  216|      2|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      2|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2093|      2|    return op;
 2094|      2|}
PyObject_GC_Del:
 2098|  50.7M|{
 2099|  50.7M|    size_t presize = _PyType_PreHeaderSize(Py_TYPE(op));
  ------------------
  |  |  213|  50.7M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  50.7M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2100|  50.7M|    PyGC_Head *g = AS_GC(op);
  ------------------
  |  |   52|  50.7M|#define AS_GC(op) _Py_AS_GC(op)
  ------------------
 2101|  50.7M|    if (_PyObject_GC_IS_TRACKED(op)) {
  ------------------
  |  |   81|  50.7M|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|  50.7M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 0, False: 50.7M]
  |  |  ------------------
  ------------------
 2102|      0|        gc_list_remove(g);
 2103|      0|        GCState *gcstate = get_gc_state();
 2104|      0|        gcstate->heap_size--;
 2105|       |#ifdef Py_DEBUG
 2106|       |        PyObject *exc = PyErr_GetRaisedException();
 2107|       |        if (PyErr_WarnExplicitFormat(PyExc_ResourceWarning, "gc", 0,
 2108|       |                                     "gc", NULL,
 2109|       |                                     "Object of type %s is not untracked "
 2110|       |                                     "before destruction",
 2111|       |                                     Py_TYPE(op)->tp_name))
 2112|       |        {
 2113|       |            PyErr_FormatUnraisable("Exception ignored on object deallocation");
 2114|       |        }
 2115|       |        PyErr_SetRaisedException(exc);
 2116|       |#endif
 2117|      0|    }
 2118|  50.7M|    GCState *gcstate = get_gc_state();
 2119|  50.7M|    if (gcstate->generations[0].count > 0) {
  ------------------
  |  Branch (2119:9): [True: 4.61M, False: 46.1M]
  ------------------
 2120|  4.61M|        gcstate->generations[0].count--;
 2121|  4.61M|    }
 2122|  50.7M|    PyObject_Free(((char *)op)-presize);
 2123|  50.7M|}
PyObject_GC_IsTracked:
 2127|    490|{
 2128|    490|    if (_PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj)) {
  ------------------
  |  |   81|    245|#define _PyObject_GC_IS_TRACKED(op) _PyObject_GC_IS_TRACKED(_Py_CAST(PyObject*, op))
  |  |  ------------------
  |  |  |  |   37|    245|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  |  Branch (81:37): [True: 0, False: 245]
  |  |  ------------------
  ------------------
  |  Branch (2128:9): [True: 245, False: 245]
  ------------------
 2129|      0|        return 1;
 2130|      0|    }
 2131|    490|    return 0;
 2132|    490|}
gc.c:visit_decref:
  441|   379M|{
  442|   379M|    OBJECT_STAT_INC(object_visits);
  ------------------
  |  |   77|   379M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  443|   379M|    _PyObject_ASSERT(_PyObject_CAST(parent), !_PyObject_IsFreed(op));
  ------------------
  |  |  425|   379M|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|   379M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|   379M|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 379M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|   379M|      ? (void)(0) \
  |  |  |  |  |  |  418|   379M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  444|       |
  445|   379M|    if (_PyObject_IS_GC(op)) {
  ------------------
  |  Branch (445:9): [True: 85.2M, False: 294M]
  ------------------
  446|  85.2M|        PyGC_Head *gc = AS_GC(op);
  ------------------
  |  |   52|  85.2M|#define AS_GC(op) _Py_AS_GC(op)
  ------------------
  447|       |        /* We're only interested in gc_refs for objects in the
  448|       |         * generation being collected, which can be recognized
  449|       |         * because only they have positive gc_refs.
  450|       |         */
  451|  85.2M|        if (gc_is_collecting(gc)) {
  ------------------
  |  Branch (451:13): [True: 46.9M, False: 38.2M]
  ------------------
  452|  46.9M|            gc_decref(gc);
  453|  46.9M|        }
  454|  85.2M|    }
  455|   379M|    return 0;
  456|   379M|}
gc.c:gc_is_collecting:
   60|   170M|{
   61|   170M|    return (g->_gc_prev & PREV_MASK_COLLECTING) != 0;
  ------------------
  |  |   39|   170M|#define PREV_MASK_COLLECTING   _PyGC_PREV_MASK_COLLECTING
  |  |  ------------------
  |  |  |  |  119|   170M|#define _PyGC_PREV_MASK_COLLECTING ((uintptr_t)2)
  |  |  ------------------
  ------------------
   62|   170M|}
gc.c:gc_decref:
   93|  46.9M|{
   94|  46.9M|    _PyObject_ASSERT_WITH_MSG(FROM_GC(g),
  ------------------
  |  |  423|  46.9M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  416|  46.9M|    ((expr) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (416:6): [True: 46.9M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  417|  46.9M|      ? (void)(0) \
  |  |  |  |  418|  46.9M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  ------------------
  ------------------
   95|  46.9M|                              gc_get_refs(g) > 0,
   96|  46.9M|                              "refcount is too small");
   97|  46.9M|    g->_gc_prev -= 1 << _PyGC_PREV_SHIFT;
  ------------------
  |  |  121|  46.9M|#define _PyGC_PREV_SHIFT           2
  ------------------
   98|  46.9M|}
gc.c:gc_get_refs:
   72|   319M|{
   73|   319M|    return (Py_ssize_t)(g->_gc_prev >> _PyGC_PREV_SHIFT);
  ------------------
  |  |  121|   319M|#define _PyGC_PREV_SHIFT           2
  ------------------
   74|   319M|}
gc.c:gc_list_merge:
  277|  31.7k|{
  278|  31.7k|    assert(from != to);
  ------------------
  |  Branch (278:5): [True: 31.7k, False: 0]
  ------------------
  279|  31.7k|    if (!gc_list_is_empty(from)) {
  ------------------
  |  Branch (279:9): [True: 8.46k, False: 23.2k]
  ------------------
  280|  8.46k|        PyGC_Head *to_tail = GC_PREV(to);
  ------------------
  |  |   29|  8.46k|#define GC_PREV _PyGCHead_PREV
  ------------------
  281|  8.46k|        PyGC_Head *from_head = GC_NEXT(from);
  ------------------
  |  |   28|  8.46k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  282|  8.46k|        PyGC_Head *from_tail = GC_PREV(from);
  ------------------
  |  |   29|  8.46k|#define GC_PREV _PyGCHead_PREV
  ------------------
  283|  8.46k|        assert(from_head != from);
  ------------------
  |  Branch (283:9): [True: 8.46k, False: 0]
  ------------------
  284|  8.46k|        assert(from_tail != from);
  ------------------
  |  Branch (284:9): [True: 8.46k, False: 0]
  ------------------
  285|       |
  286|  8.46k|        _PyGCHead_SET_NEXT(to_tail, from_head);
  287|  8.46k|        _PyGCHead_SET_PREV(from_head, to_tail);
  288|       |
  289|  8.46k|        _PyGCHead_SET_NEXT(from_tail, to);
  290|  8.46k|        _PyGCHead_SET_PREV(to, from_tail);
  291|  8.46k|    }
  292|  31.7k|    gc_list_init(from);
  293|  31.7k|}
gc.c:gc_list_is_empty:
  220|  57.2k|{
  221|  57.2k|    return (list->_gc_next == (uintptr_t)list);
  222|  57.2k|}
gc.c:gc_list_init:
  211|  70.5k|{
  212|       |    // List header must not have flags.
  213|       |    // We can assign pointer by simple cast.
  214|  70.5k|    list->_gc_prev = (uintptr_t)list;
  215|  70.5k|    list->_gc_next = (uintptr_t)list;
  216|  70.5k|}
gc.c:gc_list_size:
  297|  8.42k|{
  298|  8.42k|    PyGC_Head *gc;
  299|  8.42k|    Py_ssize_t n = 0;
  300|   142k|    for (gc = GC_NEXT(list); gc != list; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|  8.42k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
                  for (gc = GC_NEXT(list); gc != list; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|   133k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (300:30): [True: 133k, False: 8.42k]
  ------------------
  301|   133k|        n++;
  302|   133k|    }
  303|  8.42k|    return n;
  304|  8.42k|}
gc.c:get_gc_state:
  106|  50.7M|{
  107|  50.7M|    PyInterpreterState *interp = _PyInterpreterState_GET();
  108|  50.7M|    return &interp->gc;
  109|  50.7M|}
gc.c:gc_collect_main:
 1424|  8.38k|{
 1425|  8.38k|    int i;
 1426|  8.38k|    PyGC_Head *young; /* the generation we are examining */
 1427|  8.38k|    PyGC_Head *old; /* next older generation */
 1428|  8.38k|    PyGC_Head unreachable; /* non-problematic unreachable trash */
 1429|  8.38k|    PyGC_Head finalizers;  /* objects with, & reachable from, __del__ */
 1430|  8.38k|    PyGC_Head *gc;
 1431|  8.38k|    GCState *gcstate = &tstate->interp->gc;
 1432|       |
 1433|       |    // gc_collect_main() must not be called before _PyGC_Init
 1434|       |    // or after _PyGC_Fini()
 1435|  8.38k|    assert(gcstate->garbage != NULL);
  ------------------
  |  Branch (1435:5): [True: 8.38k, False: 0]
  ------------------
 1436|  8.38k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1436:5): [True: 8.38k, False: 0]
  ------------------
 1437|       |
 1438|  8.38k|    int expected = 0;
 1439|  8.38k|    if (!_Py_atomic_compare_exchange_int(&gcstate->collecting, &expected, 1)) {
  ------------------
  |  Branch (1439:9): [True: 0, False: 8.38k]
  ------------------
 1440|       |        // Don't start a garbage collection if one is already in progress.
 1441|      0|        return 0;
 1442|      0|    }
 1443|  8.38k|    gcstate->frame = tstate->current_frame;
 1444|       |
 1445|  8.38k|    if (generation == GENERATION_AUTO) {
  ------------------
  |  |   56|  8.38k|#define GENERATION_AUTO (-1)
  ------------------
  |  Branch (1445:9): [True: 8.38k, False: 0]
  ------------------
 1446|       |        // Select the oldest generation that needs collecting. We will collect
 1447|       |        // objects from that generation and all generations younger than it.
 1448|  8.38k|        generation = gc_select_generation(gcstate);
 1449|  8.38k|        if (generation < 0) {
  ------------------
  |  Branch (1449:13): [True: 612, False: 7.76k]
  ------------------
 1450|       |            // No generation needs to be collected.
 1451|    612|            _Py_atomic_store_int(&gcstate->collecting, 0);
 1452|    612|            return 0;
 1453|    612|        }
 1454|  8.38k|    }
 1455|       |
 1456|  8.38k|    assert(generation >= 0 && generation < NUM_GENERATIONS);
  ------------------
  |  Branch (1456:5): [True: 7.76k, False: 0]
  |  Branch (1456:5): [True: 7.76k, False: 0]
  ------------------
 1457|       |
 1458|       |#ifdef Py_STATS
 1459|       |    {
 1460|       |        PyStats *s = _PyStats_GET();
 1461|       |        if (s) {
 1462|       |            s->object_stats.object_visits = 0;
 1463|       |        }
 1464|       |    }
 1465|       |#endif
 1466|       |
 1467|  7.76k|    GC_STAT_ADD(generation, collections, 1);
  ------------------
  |  |   81|  7.76k|#define GC_STAT_ADD(gen, name, n) ((void)0)
  ------------------
 1468|       |
 1469|  7.76k|    struct gc_generation_stats stats = { 0 };
 1470|  7.76k|    if (reason != _Py_GC_REASON_SHUTDOWN) {
  ------------------
  |  Branch (1470:9): [True: 7.76k, False: 0]
  ------------------
 1471|  7.76k|        invoke_gc_callback(tstate, "start", generation, &stats);
 1472|  7.76k|    }
 1473|       |
 1474|  7.76k|    stats.heap_size = gcstate->heap_size;
 1475|       |    // ignore error: don't interrupt the GC if reading the clock fails
 1476|  7.76k|    (void)PyTime_PerfCounterRaw(&stats.ts_start);
 1477|  7.76k|    if (gcstate->debug & _PyGC_DEBUG_STATS) {
  ------------------
  |  |  125|  7.76k|#define _PyGC_DEBUG_STATS             (1<<0) /* print collection statistics */
  ------------------
  |  Branch (1477:9): [True: 0, False: 7.76k]
  ------------------
 1478|      0|        PySys_WriteStderr("gc: collecting generation %d...\n", generation);
 1479|      0|        show_stats_each_generations(gcstate);
 1480|      0|    }
 1481|       |
 1482|  7.76k|    if (PyDTrace_GC_START_ENABLED()) {
  ------------------
  |  Branch (1482:9): [True: 0, False: 7.76k]
  ------------------
 1483|      0|        PyDTrace_GC_START(generation);
 1484|      0|    }
 1485|       |
 1486|       |    /* update collection and allocation counters */
 1487|  7.76k|    if (generation+1 < NUM_GENERATIONS) {
  ------------------
  |  |  217|  7.76k|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (1487:9): [True: 7.76k, False: 7]
  ------------------
 1488|  7.76k|        gcstate->generations[generation+1].count += 1;
 1489|  7.76k|    }
 1490|  16.1k|    for (i = 0; i <= generation; i++) {
  ------------------
  |  Branch (1490:17): [True: 8.42k, False: 7.76k]
  ------------------
 1491|  8.42k|        gcstate->generations[i].count = 0;
 1492|  8.42k|    }
 1493|       |
 1494|       |    /* merge younger generations with one we are currently collecting */
 1495|  8.42k|    for (i = 0; i < generation; i++) {
  ------------------
  |  Branch (1495:17): [True: 660, False: 7.76k]
  ------------------
 1496|    660|        gc_list_merge(GEN_HEAD(gcstate, i), GEN_HEAD(gcstate, generation));
  ------------------
  |  |  101|    660|#define GEN_HEAD(gcstate, n) (&(gcstate)->generations[n].head)
  ------------------
                      gc_list_merge(GEN_HEAD(gcstate, i), GEN_HEAD(gcstate, generation));
  ------------------
  |  |  101|    660|#define GEN_HEAD(gcstate, n) (&(gcstate)->generations[n].head)
  ------------------
 1497|    660|    }
 1498|       |
 1499|       |    /* handy references */
 1500|  7.76k|    young = GEN_HEAD(gcstate, generation);
  ------------------
  |  |  101|  7.76k|#define GEN_HEAD(gcstate, n) (&(gcstate)->generations[n].head)
  ------------------
 1501|  7.76k|    if (generation < NUM_GENERATIONS-1) {
  ------------------
  |  |  217|  7.76k|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (1501:9): [True: 7.76k, False: 7]
  ------------------
 1502|  7.76k|        old = GEN_HEAD(gcstate, generation+1);
  ------------------
  |  |  101|  7.76k|#define GEN_HEAD(gcstate, n) (&(gcstate)->generations[n].head)
  ------------------
 1503|  7.76k|    }
 1504|      7|    else {
 1505|      7|        old = young;
 1506|      7|    }
 1507|  7.76k|    validate_list(old, collecting_clear_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
 1508|       |
 1509|  7.76k|    stats.candidates = deduce_unreachable(young, &unreachable);
 1510|       |
 1511|  7.76k|    untrack_tuples(young);
 1512|       |    /* Move reachable objects to next generation. */
 1513|  7.76k|    if (young != old) {
  ------------------
  |  Branch (1513:9): [True: 7.76k, False: 7]
  ------------------
 1514|  7.76k|        if (generation == NUM_GENERATIONS - 2) {
  ------------------
  |  |  217|  7.76k|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (1514:13): [True: 646, False: 7.11k]
  ------------------
 1515|    646|            gcstate->long_lived_pending += gc_list_size(young);
 1516|    646|        }
 1517|  7.76k|        gc_list_merge(young, old);
 1518|  7.76k|    }
 1519|      7|    else {
 1520|       |        // In Python <= 3.13, we called untrack_dicts(young) here to untrack
 1521|       |        // atomic-only dicts (see issue #14775). Python 3.14 removed the lazy
 1522|       |        // dict tracking machinery entirely (GH-127010) -- dicts are always
 1523|       |        // tracked from creation and never untracked by GC. That way, we don't
 1524|       |        // have to restore MAINTAIN_TRACKING across every PyDict_SetItem call
 1525|       |        // site; the cost is slightly more work for full collections on dicts
 1526|       |        // with only atomic values.
 1527|      7|        gcstate->long_lived_pending = 0;
 1528|      7|        gcstate->long_lived_total = gc_list_size(young);
 1529|      7|    }
 1530|       |
 1531|       |    /* All objects in unreachable are trash, but objects reachable from
 1532|       |     * legacy finalizers (e.g. tp_del) can't safely be deleted.
 1533|       |     */
 1534|  7.76k|    gc_list_init(&finalizers);
 1535|       |    // NEXT_MASK_UNREACHABLE is cleared here.
 1536|       |    // After move_legacy_finalizers(), unreachable is normal list.
 1537|  7.76k|    move_legacy_finalizers(&unreachable, &finalizers);
 1538|       |    /* finalizers contains the unreachable objects with a legacy finalizer;
 1539|       |     * unreachable objects reachable *from* those are also uncollectable,
 1540|       |     * and we move those into the finalizers list too.
 1541|       |     */
 1542|  7.76k|    move_legacy_finalizer_reachable(&finalizers);
 1543|       |
 1544|  7.76k|    validate_list(&finalizers, collecting_clear_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
 1545|  7.76k|    validate_list(&unreachable, collecting_set_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
 1546|       |
 1547|       |    /* Print debugging information. */
 1548|  7.76k|    if (gcstate->debug & _PyGC_DEBUG_COLLECTABLE) {
  ------------------
  |  |  126|  7.76k|#define _PyGC_DEBUG_COLLECTABLE       (1<<1) /* print collectable objects */
  ------------------
  |  Branch (1548:9): [True: 0, False: 7.76k]
  ------------------
 1549|      0|        for (gc = GC_NEXT(&unreachable); gc != &unreachable; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|      0|#define GC_NEXT _PyGCHead_NEXT
  ------------------
                      for (gc = GC_NEXT(&unreachable); gc != &unreachable; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|      0|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (1549:42): [True: 0, False: 0]
  ------------------
 1550|      0|            debug_cycle("collectable", FROM_GC(gc));
  ------------------
  |  |   53|      0|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
 1551|      0|        }
 1552|      0|    }
 1553|       |
 1554|       |    /* Clear weakrefs and invoke callbacks as necessary. */
 1555|  7.76k|    stats.collected += handle_weakref_callbacks(&unreachable, old);
 1556|  7.76k|    validate_list(old, collecting_clear_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
 1557|  7.76k|    validate_list(&unreachable, collecting_set_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
 1558|       |
 1559|       |    /* Call tp_finalize on objects which have one. */
 1560|  7.76k|    finalize_garbage(tstate, &unreachable);
 1561|       |
 1562|       |    /* Handle any objects that may have resurrected after the call
 1563|       |     * to 'finalize_garbage' and continue the collection with the
 1564|       |     * objects that are still unreachable */
 1565|  7.76k|    PyGC_Head final_unreachable;
 1566|  7.76k|    handle_resurrected_objects(&unreachable, &final_unreachable, old);
 1567|       |
 1568|       |    /* Clear weakrefs to objects in the unreachable set.  No Python-level
 1569|       |     * code must be allowed to access those unreachable objects.  During
 1570|       |     * delete_garbage(), finalizers outside the unreachable set might run
 1571|       |     * and create new weakrefs.  If those weakrefs were not cleared, they
 1572|       |     * could reveal unreachable objects.  Callbacks are not executed.
 1573|       |     */
 1574|  7.76k|    clear_weakrefs(&final_unreachable);
 1575|       |
 1576|       |    /* Call tp_clear on objects in the final_unreachable set.  This will cause
 1577|       |    * the reference cycles to be broken.  It may also cause some objects
 1578|       |    * in finalizers to be freed.
 1579|       |    */
 1580|  7.76k|    stats.collected += gc_list_size(&final_unreachable);
 1581|  7.76k|    delete_garbage(tstate, gcstate, &final_unreachable, old);
 1582|       |
 1583|       |    /* Collect statistics on uncollectable objects found and print
 1584|       |     * debugging information. */
 1585|  7.76k|    Py_ssize_t n = 0;
 1586|  7.76k|    for (gc = GC_NEXT(&finalizers); gc != &finalizers; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
                  for (gc = GC_NEXT(&finalizers); gc != &finalizers; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|      0|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (1586:37): [True: 0, False: 7.76k]
  ------------------
 1587|      0|        n++;
 1588|      0|        if (gcstate->debug & _PyGC_DEBUG_UNCOLLECTABLE)
  ------------------
  |  |  127|      0|#define _PyGC_DEBUG_UNCOLLECTABLE     (1<<2) /* print uncollectable objects */
  ------------------
  |  Branch (1588:13): [True: 0, False: 0]
  ------------------
 1589|      0|            debug_cycle("uncollectable", FROM_GC(gc));
  ------------------
  |  |   53|      0|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
 1590|      0|    }
 1591|  7.76k|    stats.uncollectable = n;
 1592|  7.76k|    (void)PyTime_PerfCounterRaw(&stats.ts_stop);
 1593|  7.76k|    stats.duration = PyTime_AsSecondsDouble(stats.ts_stop - stats.ts_start);
 1594|  7.76k|    if (gcstate->debug & _PyGC_DEBUG_STATS) {
  ------------------
  |  |  125|  7.76k|#define _PyGC_DEBUG_STATS             (1<<0) /* print collection statistics */
  ------------------
  |  Branch (1594:9): [True: 0, False: 7.76k]
  ------------------
 1595|      0|        PySys_WriteStderr(
 1596|      0|            "gc: done, %zd unreachable, %zd uncollectable, %.4fs elapsed\n",
 1597|      0|            stats.uncollectable+stats.collected, stats.uncollectable,
 1598|      0|            stats.duration);
 1599|      0|    }
 1600|       |
 1601|       |    /* Append instances in the uncollectable set to a Python
 1602|       |     * reachable list of garbage.  The programmer has to deal with
 1603|       |     * this if they insist on creating this type of structure.
 1604|       |     */
 1605|  7.76k|    handle_legacy_finalizers(tstate, gcstate, &finalizers, old);
 1606|  7.76k|    validate_list(old, collecting_clear_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
 1607|       |
 1608|       |    /* Clear free list only during the collection of the highest
 1609|       |     * generation */
 1610|  7.76k|    if (generation == NUM_GENERATIONS-1) {
  ------------------
  |  |  217|  7.76k|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (1610:9): [True: 7, False: 7.76k]
  ------------------
 1611|      7|        _PyGC_ClearAllFreeLists(tstate->interp);
 1612|      7|    }
 1613|       |
 1614|  7.76k|    if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1614:9): [True: 0, False: 7.76k]
  ------------------
 1615|      0|        if (reason == _Py_GC_REASON_SHUTDOWN) {
  ------------------
  |  Branch (1615:13): [True: 0, False: 0]
  ------------------
 1616|      0|            _PyErr_Clear(tstate);
 1617|      0|        }
 1618|      0|        else {
 1619|      0|            PyErr_FormatUnraisable("Exception ignored in garbage collection");
 1620|      0|        }
 1621|      0|    }
 1622|       |
 1623|       |    /* Update stats */
 1624|  7.76k|    add_stats(gcstate, generation, &stats);
 1625|  7.76k|    GC_STAT_ADD(generation, objects_collected, stats.collected);
  ------------------
  |  |   81|  7.76k|#define GC_STAT_ADD(gen, name, n) ((void)0)
  ------------------
 1626|       |
 1627|       |#ifdef Py_STATS
 1628|       |    {
 1629|       |        PyStats *s = _PyStats_GET();
 1630|       |        if (s) {
 1631|       |            GC_STAT_ADD(generation, object_visits,
 1632|       |                s->object_stats.object_visits);
 1633|       |            s->object_stats.object_visits = 0;
 1634|       |        }
 1635|       |    }
 1636|       |#endif
 1637|       |
 1638|  7.76k|    if (PyDTrace_GC_DONE_ENABLED()) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 7.76k]
  ------------------
 1639|      0|        PyDTrace_GC_DONE(stats.uncollectable + stats.collected);
 1640|      0|    }
 1641|       |
 1642|  7.76k|    if (reason != _Py_GC_REASON_SHUTDOWN) {
  ------------------
  |  Branch (1642:9): [True: 7.76k, False: 0]
  ------------------
 1643|  7.76k|        invoke_gc_callback(tstate, "stop", generation, &stats);
 1644|  7.76k|    }
 1645|       |
 1646|  7.76k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1646:5): [True: 7.76k, False: 0]
  ------------------
 1647|  7.76k|    gcstate->frame = NULL;
 1648|  7.76k|    _Py_atomic_store_int(&gcstate->collecting, 0);
 1649|  7.76k|    return stats.uncollectable + stats.collected;
 1650|  7.76k|}
gc.c:gc_select_generation:
 1317|  8.38k|{
 1318|  25.0k|    for (int i = NUM_GENERATIONS-1; i >= 0; i--) {
  ------------------
  |  |  217|  8.38k|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (1318:37): [True: 24.4k, False: 612]
  ------------------
 1319|  24.4k|        if (gcstate->generations[i].count > gcstate->generations[i].threshold) {
  ------------------
  |  Branch (1319:13): [True: 14.9k, False: 9.52k]
  ------------------
 1320|       |            /* Avoid quadratic performance degradation in number
 1321|       |               of tracked objects (see also issue #4074):
 1322|       |
 1323|       |               To limit the cost of garbage collection, there are two strategies;
 1324|       |                 - make each collection faster, e.g. by scanning fewer objects
 1325|       |                 - do less collections
 1326|       |               This heuristic is about the latter strategy.
 1327|       |
 1328|       |               In addition to the various configurable thresholds, we only trigger a
 1329|       |               full collection if the ratio
 1330|       |
 1331|       |                long_lived_pending / long_lived_total
 1332|       |
 1333|       |               is above a given value (hardwired to 25%).
 1334|       |
 1335|       |               The reason is that, while "non-full" collections (i.e., collections of
 1336|       |               the young and middle generations) will always examine roughly the same
 1337|       |               number of objects -- determined by the aforementioned thresholds --,
 1338|       |               the cost of a full collection is proportional to the total number of
 1339|       |               long-lived objects, which is virtually unbounded.
 1340|       |
 1341|       |               Indeed, it has been remarked that doing a full collection every
 1342|       |               <constant number> of object creations entails a dramatic performance
 1343|       |               degradation in workloads which consist in creating and storing lots of
 1344|       |               long-lived objects (e.g. building a large list of GC-tracked objects would
 1345|       |               show quadratic performance, instead of linear as expected: see issue #4074).
 1346|       |
 1347|       |               Using the above ratio, instead, yields amortized linear performance in
 1348|       |               the total number of objects (the effect of which can be summarized
 1349|       |               thusly: "each full garbage collection is more and more costly as the
 1350|       |               number of objects grows, but we do fewer and fewer of them").
 1351|       |
 1352|       |               This heuristic was suggested by Martin von Löwis on python-dev in
 1353|       |               June 2008. His original analysis and proposal can be found at:
 1354|       |               http://mail.python.org/pipermail/python-dev/2008-June/080579.html
 1355|       |            */
 1356|  14.9k|            if (i == NUM_GENERATIONS - 1
  ------------------
  |  |  217|  14.9k|#define NUM_GENERATIONS 3
  ------------------
  |  Branch (1356:17): [True: 7.19k, False: 7.76k]
  ------------------
 1357|  7.19k|                && gcstate->long_lived_pending < gcstate->long_lived_total / 4)
  ------------------
  |  Branch (1357:20): [True: 7.19k, False: 7]
  ------------------
 1358|  7.19k|            {
 1359|  7.19k|                continue;
 1360|  7.19k|            }
 1361|  7.76k|            return i;
 1362|  14.9k|        }
 1363|  24.4k|    }
 1364|    612|    return -1;
 1365|  8.38k|}
gc.c:invoke_gc_callback:
 1260|  15.5k|{
 1261|  15.5k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1261:5): [True: 15.5k, False: 0]
  ------------------
 1262|       |
 1263|       |    /* we may get called very early */
 1264|  15.5k|    GCState *gcstate = &tstate->interp->gc;
 1265|  15.5k|    if (gcstate->callbacks == NULL) {
  ------------------
  |  Branch (1265:9): [True: 0, False: 15.5k]
  ------------------
 1266|      0|        return;
 1267|      0|    }
 1268|       |
 1269|       |    /* The local variable cannot be rebound, check it for sanity */
 1270|  15.5k|    assert(PyList_CheckExact(gcstate->callbacks));
  ------------------
  |  Branch (1270:5): [True: 15.5k, False: 0]
  ------------------
 1271|  15.5k|    PyObject *info = NULL;
 1272|  15.5k|    if (PyList_GET_SIZE(gcstate->callbacks) != 0) {
  ------------------
  |  |   38|  15.5k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1272:9): [True: 0, False: 15.5k]
  ------------------
 1273|      0|        info = Py_BuildValue("{sisnsnsnsd}",
 1274|      0|            "generation", generation,
 1275|      0|            "collected", stats->collected,
 1276|      0|            "uncollectable", stats->uncollectable,
 1277|      0|            "candidates", stats->candidates,
 1278|      0|            "duration", stats->duration);
 1279|      0|        if (info == NULL) {
  ------------------
  |  Branch (1279:13): [True: 0, False: 0]
  ------------------
 1280|      0|            PyErr_FormatUnraisable("Exception ignored on invoking gc callbacks");
 1281|      0|            return;
 1282|      0|        }
 1283|      0|    }
 1284|       |
 1285|  15.5k|    PyObject *phase_obj = PyUnicode_FromString(phase);
 1286|  15.5k|    if (phase_obj == NULL) {
  ------------------
  |  Branch (1286:9): [True: 0, False: 15.5k]
  ------------------
 1287|      0|        Py_XDECREF(info);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1288|      0|        PyErr_FormatUnraisable("Exception ignored on invoking gc callbacks");
 1289|      0|        return;
 1290|      0|    }
 1291|       |
 1292|  15.5k|    PyObject *stack[] = {phase_obj, info};
 1293|  15.5k|    for (Py_ssize_t i=0; i<PyList_GET_SIZE(gcstate->callbacks); i++) {
  ------------------
  |  |   38|  15.5k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1293:26): [True: 0, False: 15.5k]
  ------------------
 1294|      0|        PyObject *r, *cb = PyList_GET_ITEM(gcstate->callbacks, i);
  ------------------
  |  |   40|      0|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      0|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1294:28): [True: 0, False: 0]
  ------------------
 1295|      0|        Py_INCREF(cb); /* make sure cb doesn't go away */
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|      0|        r = PyObject_Vectorcall(cb, stack, 2, NULL);
 1297|      0|        if (r == NULL) {
  ------------------
  |  Branch (1297:13): [True: 0, False: 0]
  ------------------
 1298|      0|            PyErr_FormatUnraisable("Exception ignored while "
 1299|      0|                                   "calling GC callback %R", cb);
 1300|      0|        }
 1301|      0|        else {
 1302|      0|            Py_DECREF(r);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1303|      0|        }
 1304|      0|        Py_DECREF(cb);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1305|      0|    }
 1306|  15.5k|    Py_DECREF(phase_obj);
  ------------------
  |  |  430|  15.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|  15.5k|    Py_XDECREF(info);
  ------------------
  |  |  524|  15.5k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  15.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  15.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1308|       |    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1308:5): [True: 15.5k, False: 0]
  ------------------
 1309|  15.5k|}
gc.c:deduce_unreachable:
 1169|  15.5k|deduce_unreachable(PyGC_Head *base, PyGC_Head *unreachable) {
 1170|  15.5k|    validate_list(base, collecting_clear_unreachable_clear);
  ------------------
  |  |  387|  15.5k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
 1171|       |    /* Using ob_refcnt and gc_refs, calculate which objects in the
 1172|       |     * container set are reachable from outside the set (i.e., have a
 1173|       |     * refcount greater than 0 when all the references within the
 1174|       |     * set are taken into account).
 1175|       |     */
 1176|  15.5k|    Py_ssize_t candidates = update_refs(base);  // gc_prev is used for gc_refs
 1177|  15.5k|    subtract_refs(base);
 1178|       |
 1179|       |    /* Leave everything reachable from outside base in base, and move
 1180|       |     * everything else (in base) to unreachable.
 1181|       |     *
 1182|       |     * NOTE:  This used to move the reachable objects into a reachable
 1183|       |     * set instead.  But most things usually turn out to be reachable,
 1184|       |     * so it's more efficient to move the unreachable things.  It "sounds slick"
 1185|       |     * to move the unreachable objects, until you think about it - the reason it
 1186|       |     * pays isn't actually obvious.
 1187|       |     *
 1188|       |     * Suppose we create objects A, B, C in that order.  They appear in the young
 1189|       |     * generation in the same order.  If B points to A, and C to B, and C is
 1190|       |     * reachable from outside, then the adjusted refcounts will be 0, 0, and 1
 1191|       |     * respectively.
 1192|       |     *
 1193|       |     * When move_unreachable finds A, A is moved to the unreachable list.  The
 1194|       |     * same for B when it's first encountered.  Then C is traversed, B is moved
 1195|       |     * _back_ to the reachable list.  B is eventually traversed, and then A is
 1196|       |     * moved back to the reachable list.
 1197|       |     *
 1198|       |     * So instead of not moving at all, the reachable objects B and A are moved
 1199|       |     * twice each.  Why is this a win?  A straightforward algorithm to move the
 1200|       |     * reachable objects instead would move A, B, and C once each.
 1201|       |     *
 1202|       |     * The key is that this dance leaves the objects in order C, B, A - it's
 1203|       |     * reversed from the original order.  On all _subsequent_ scans, none of
 1204|       |     * them will move.  Since most objects aren't in cycles, this can save an
 1205|       |     * unbounded number of moves across an unbounded number of later collections.
 1206|       |     * It can cost more only the first time the chain is scanned.
 1207|       |     *
 1208|       |     * Drawback:  move_unreachable is also used to find out what's still trash
 1209|       |     * after finalizers may resurrect objects.  In _that_ case most unreachable
 1210|       |     * objects will remain unreachable, so it would be more efficient to move
 1211|       |     * the reachable objects instead.  But this is a one-time cost, probably not
 1212|       |     * worth complicating the code to speed just a little.
 1213|       |     */
 1214|  15.5k|    gc_list_init(unreachable);
 1215|  15.5k|    move_unreachable(base, unreachable);  // gc_prev is pointer again
 1216|  15.5k|    validate_list(base, collecting_clear_unreachable_clear);
  ------------------
  |  |  387|  15.5k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
 1217|  15.5k|    validate_list(unreachable, collecting_set_unreachable_set);
  ------------------
  |  |  387|  15.5k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 15.5k]
  |  |  ------------------
  ------------------
 1218|  15.5k|    return candidates;
 1219|  15.5k|}
gc.c:update_refs:
  398|  15.5k|{
  399|  15.5k|    PyGC_Head *next;
  400|  15.5k|    PyGC_Head *gc = GC_NEXT(containers);
  ------------------
  |  |   28|  15.5k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  401|  15.5k|    Py_ssize_t candidates = 0;
  402|       |
  403|  46.8M|    while (gc != containers) {
  ------------------
  |  Branch (403:12): [True: 46.8M, False: 15.5k]
  ------------------
  404|  46.8M|        next = GC_NEXT(gc);
  ------------------
  |  |   28|  46.8M|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  405|  46.8M|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  46.8M|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  406|  46.8M|        if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  46.8M|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  46.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 46.8M]
  |  |  ------------------
  ------------------
  407|      0|            assert(!_Py_IsStaticImmortal(op));
  ------------------
  |  Branch (407:13): [True: 0, False: 0]
  ------------------
  408|      0|            _PyObject_GC_UNTRACK(op);
  ------------------
  |  |  507|      0|        _PyObject_GC_UNTRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|      0|            gc = next;
  410|      0|            continue;
  411|      0|        }
  412|  46.8M|        gc_reset_refs(gc, Py_REFCNT(op));
  ------------------
  |  |  119|  46.8M|    #  define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  46.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|       |        /* Python's cyclic gc should never see an incoming refcount
  414|       |         * of 0:  if something decref'ed to 0, it should have been
  415|       |         * deallocated immediately at that time.
  416|       |         * Possible cause (if the assert triggers):  a tp_dealloc
  417|       |         * routine left a gc-aware object tracked during its teardown
  418|       |         * phase, and did something-- or allowed something to happen --
  419|       |         * that called back into Python.  gc can trigger then, and may
  420|       |         * see the still-tracked dying object.  Before this assert
  421|       |         * was added, such mistakes went on to allow gc to try to
  422|       |         * delete the object again.  In a debug build, that caused
  423|       |         * a mysterious segfault, when _Py_ForgetReference tried
  424|       |         * to remove the object from the doubly-linked list of all
  425|       |         * objects a second time.  In a release build, an actual
  426|       |         * double deallocation occurred, which leads to corruption
  427|       |         * of the allocator's internal bookkeeping pointers.  That's
  428|       |         * so serious that maybe this should be a release-build
  429|       |         * check instead of an assert?
  430|       |         */
  431|  46.8M|        _PyObject_ASSERT(op, gc_get_refs(gc) != 0);
  ------------------
  |  |  425|  46.8M|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  46.8M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  46.8M|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 46.8M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  46.8M|      ? (void)(0) \
  |  |  |  |  |  |  418|  46.8M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|  46.8M|        gc = next;
  433|  46.8M|        candidates++;
  434|  46.8M|    }
  435|  15.5k|    return candidates;
  436|  15.5k|}
gc.c:gc_reset_refs:
   85|  46.8M|{
   86|  46.8M|    g->_gc_prev = (g->_gc_prev & _PyGC_PREV_MASK_FINALIZED)
  ------------------
  |  |  117|  46.8M|#define _PyGC_PREV_MASK_FINALIZED  ((uintptr_t)1)
  ------------------
   87|  46.8M|        | PREV_MASK_COLLECTING
  ------------------
  |  |   39|  46.8M|#define PREV_MASK_COLLECTING   _PyGC_PREV_MASK_COLLECTING
  |  |  ------------------
  |  |  |  |  119|  46.8M|#define _PyGC_PREV_MASK_COLLECTING ((uintptr_t)2)
  |  |  ------------------
  ------------------
   88|  46.8M|        | ((uintptr_t)(refs) << _PyGC_PREV_SHIFT);
  ------------------
  |  |  121|  46.8M|#define _PyGC_PREV_SHIFT           2
  ------------------
   89|  46.8M|}
gc.c:subtract_refs:
  491|  15.5k|{
  492|  15.5k|    traverseproc traverse;
  493|  15.5k|    PyGC_Head *gc = GC_NEXT(containers);
  ------------------
  |  |   28|  15.5k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  494|  46.8M|    for (; gc != containers; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|  46.8M|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (494:12): [True: 46.8M, False: 15.5k]
  ------------------
  495|  46.8M|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  46.8M|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  496|  46.8M|        traverse = Py_TYPE(op)->tp_traverse;
  ------------------
  |  |  213|  46.8M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  46.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  497|  46.8M|        (void) traverse(op,
  498|  46.8M|                        visit_decref,
  499|  46.8M|                        op);
  500|  46.8M|    }
  501|  15.5k|}
gc.c:move_unreachable:
  580|  15.5k|{
  581|       |    // previous elem in the young list, used for restore gc_prev.
  582|  15.5k|    PyGC_Head *prev = young;
  583|  15.5k|    PyGC_Head *gc = GC_NEXT(young);
  ------------------
  |  |   28|  15.5k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  584|       |
  585|       |    /* Invariants:  all objects "to the left" of us in young are reachable
  586|       |     * (directly or indirectly) from outside the young list as it was at entry.
  587|       |     *
  588|       |     * All other objects from the original young "to the left" of us are in
  589|       |     * unreachable now, and have NEXT_MASK_UNREACHABLE.  All objects to the
  590|       |     * left of us in 'young' now have been scanned, and no objects here
  591|       |     * or to the right have been scanned yet.
  592|       |     */
  593|       |
  594|  93.4M|    while (gc != young) {
  ------------------
  |  Branch (594:12): [True: 93.4M, False: 15.5k]
  ------------------
  595|  93.4M|        if (gc_get_refs(gc)) {
  ------------------
  |  Branch (595:13): [True: 46.8M, False: 46.6M]
  ------------------
  596|       |            /* gc is definitely reachable from outside the
  597|       |             * original 'young'.  Mark it as such, and traverse
  598|       |             * its pointers to find any other objects that may
  599|       |             * be directly reachable from it.  Note that the
  600|       |             * call to tp_traverse may append objects to young,
  601|       |             * so we have to wait until it returns to determine
  602|       |             * the next object to visit.
  603|       |             */
  604|  46.8M|            PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  46.8M|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  605|  46.8M|            traverseproc traverse = Py_TYPE(op)->tp_traverse;
  ------------------
  |  |  213|  46.8M|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  46.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  46.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  606|  46.8M|            _PyObject_ASSERT_WITH_MSG(op, gc_get_refs(gc) > 0,
  ------------------
  |  |  423|  46.8M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  416|  46.8M|    ((expr) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (416:6): [True: 46.8M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  417|  46.8M|      ? (void)(0) \
  |  |  |  |  418|  46.8M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  ------------------
  ------------------
  607|  46.8M|                                      "refcount is too small");
  608|       |            // NOTE: visit_reachable may change gc->_gc_next when
  609|       |            // young->_gc_prev == gc.  Don't do gc = GC_NEXT(gc) before!
  610|  46.8M|            (void) traverse(op,
  611|  46.8M|                    visit_reachable,
  612|  46.8M|                    (void *)young);
  613|       |            // relink gc_prev to prev element.
  614|  46.8M|            _PyGCHead_SET_PREV(gc, prev);
  615|       |            // gc is not COLLECTING state after here.
  616|  46.8M|            gc_clear_collecting(gc);
  617|  46.8M|            prev = gc;
  618|  46.8M|        }
  619|  46.6M|        else {
  620|       |            /* This *may* be unreachable.  To make progress,
  621|       |             * assume it is.  gc isn't directly reachable from
  622|       |             * any object we've already traversed, but may be
  623|       |             * reachable from an object we haven't gotten to yet.
  624|       |             * visit_reachable will eventually move gc back into
  625|       |             * young if that's so, and we'll see it again.
  626|       |             */
  627|       |            // Move gc to unreachable.
  628|       |            // No need to gc->next->prev = prev because it is single linked.
  629|  46.6M|            prev->_gc_next = gc->_gc_next;
  630|       |
  631|       |            // We can't use gc_list_append() here because we use
  632|       |            // NEXT_MASK_UNREACHABLE here.
  633|  46.6M|            PyGC_Head *last = GC_PREV(unreachable);
  ------------------
  |  |   29|  46.6M|#define GC_PREV _PyGCHead_PREV
  ------------------
  634|       |            // NOTE: Since all objects in unreachable set has
  635|       |            // NEXT_MASK_UNREACHABLE flag, we set it unconditionally.
  636|       |            // But this may pollute the unreachable list head's 'next' pointer
  637|       |            // too. That's semantically senseless but expedient here - the
  638|       |            // damage is repaired when this function ends.
  639|  46.6M|            last->_gc_next = (NEXT_MASK_UNREACHABLE | (uintptr_t)gc);
  ------------------
  |  |   50|  46.6M|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  640|  46.6M|            _PyGCHead_SET_PREV(gc, last);
  641|  46.6M|            gc->_gc_next = (NEXT_MASK_UNREACHABLE | (uintptr_t)unreachable);
  ------------------
  |  |   50|  46.6M|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  642|  46.6M|            unreachable->_gc_prev = (uintptr_t)gc;
  643|  46.6M|        }
  644|  93.4M|        gc = (PyGC_Head*)prev->_gc_next;
  645|  93.4M|    }
  646|       |    // young->_gc_prev must be last element remained in the list.
  647|  15.5k|    young->_gc_prev = (uintptr_t)prev;
  648|       |    // don't let the pollution of the list head's next pointer leak
  649|  15.5k|    unreachable->_gc_next &= ~NEXT_MASK_UNREACHABLE;
  ------------------
  |  |   50|  15.5k|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  650|  15.5k|}
gc.c:visit_reachable:
  506|   379M|{
  507|   379M|    PyGC_Head *reachable = arg;
  508|   379M|    OBJECT_STAT_INC(object_visits);
  ------------------
  |  |   77|   379M|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  509|   379M|    if (!_PyObject_IS_GC(op)) {
  ------------------
  |  Branch (509:9): [True: 294M, False: 85.2M]
  ------------------
  510|   294M|        return 0;
  511|   294M|    }
  512|       |
  513|  85.2M|    PyGC_Head *gc = AS_GC(op);
  ------------------
  |  |   52|  85.2M|#define AS_GC(op) _Py_AS_GC(op)
  ------------------
  514|  85.2M|    const Py_ssize_t gc_refs = gc_get_refs(gc);
  515|       |
  516|       |    // Ignore objects in other generation.
  517|       |    // This also skips objects "to the left" of the current position in
  518|       |    // move_unreachable's scan of the 'young' list - they've already been
  519|       |    // traversed, and no longer have the PREV_MASK_COLLECTING flag.
  520|  85.2M|    if (! gc_is_collecting(gc)) {
  ------------------
  |  Branch (520:9): [True: 38.4M, False: 46.7M]
  ------------------
  521|  38.4M|        return 0;
  522|  38.4M|    }
  523|       |    // It would be a logic error elsewhere if the collecting flag were set on
  524|       |    // an untracked object.
  525|  46.7M|    _PyObject_ASSERT(op, gc->_gc_next != 0);
  ------------------
  |  |  425|  46.7M|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  46.7M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  46.7M|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 46.7M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  46.7M|      ? (void)(0) \
  |  |  |  |  |  |  418|  46.7M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  526|       |
  527|  46.7M|    if (gc->_gc_next & NEXT_MASK_UNREACHABLE) {
  ------------------
  |  |   50|  46.7M|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  |  Branch (527:9): [True: 46.6M, False: 193k]
  ------------------
  528|       |        /* This had gc_refs = 0 when move_unreachable got
  529|       |         * to it, but turns out it's reachable after all.
  530|       |         * Move it back to move_unreachable's 'young' list,
  531|       |         * and move_unreachable will eventually get to it
  532|       |         * again.
  533|       |         */
  534|       |        // Manually unlink gc from unreachable list because the list functions
  535|       |        // don't work right in the presence of NEXT_MASK_UNREACHABLE flags.
  536|  46.6M|        PyGC_Head *prev = GC_PREV(gc);
  ------------------
  |  |   29|  46.6M|#define GC_PREV _PyGCHead_PREV
  ------------------
  537|  46.6M|        PyGC_Head *next = (PyGC_Head*)(gc->_gc_next & ~NEXT_MASK_UNREACHABLE);
  ------------------
  |  |   50|  46.6M|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  538|  46.6M|        _PyObject_ASSERT(FROM_GC(prev),
  ------------------
  |  |  425|  46.6M|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  46.6M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  46.6M|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 46.6M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  46.6M|      ? (void)(0) \
  |  |  |  |  |  |  418|  46.6M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  539|  46.6M|                         prev->_gc_next & NEXT_MASK_UNREACHABLE);
  540|  46.6M|        _PyObject_ASSERT(FROM_GC(next),
  ------------------
  |  |  425|  46.6M|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  46.6M|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  46.6M|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 46.6M, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  46.6M|      ? (void)(0) \
  |  |  |  |  |  |  418|  46.6M|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  541|  46.6M|                         next->_gc_next & NEXT_MASK_UNREACHABLE);
  542|  46.6M|        prev->_gc_next = gc->_gc_next;  // copy NEXT_MASK_UNREACHABLE
  543|  46.6M|        _PyGCHead_SET_PREV(next, prev);
  544|       |
  545|  46.6M|        gc_list_append(gc, reachable);
  546|  46.6M|        gc_set_refs(gc, 1);
  547|  46.6M|    }
  548|   193k|    else if (gc_refs == 0) {
  ------------------
  |  Branch (548:14): [True: 151k, False: 41.9k]
  ------------------
  549|       |        /* This is in move_unreachable's 'young' list, but
  550|       |         * the traversal hasn't yet gotten to it.  All
  551|       |         * we need to do is tell move_unreachable that it's
  552|       |         * reachable.
  553|       |         */
  554|   151k|        gc_set_refs(gc, 1);
  555|   151k|    }
  556|       |    /* Else there's nothing to do.
  557|       |     * If gc_refs > 0, it must be in move_unreachable's 'young'
  558|       |     * list, and move_unreachable will eventually get to it.
  559|       |     */
  560|  41.9k|    else {
  561|  41.9k|        _PyObject_ASSERT_WITH_MSG(op, gc_refs > 0, "refcount is too small");
  ------------------
  |  |  423|  41.9k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  416|  41.9k|    ((expr) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (416:6): [True: 41.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  417|  41.9k|      ? (void)(0) \
  |  |  |  |  418|  41.9k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  ------------------
  ------------------
  562|  41.9k|    }
  563|  46.7M|    return 0;
  564|  46.7M|}
gc.c:gc_list_append:
  227|  46.6M|{
  228|  46.6M|    PyGC_Head *last = (PyGC_Head *)list->_gc_prev;
  229|       |
  230|       |    // last <-> node
  231|  46.6M|    _PyGCHead_SET_PREV(node, last);
  232|  46.6M|    _PyGCHead_SET_NEXT(last, node);
  233|       |
  234|       |    // node <-> list
  235|  46.6M|    _PyGCHead_SET_NEXT(node, list);
  236|  46.6M|    list->_gc_prev = (uintptr_t)node;
  237|  46.6M|}
gc.c:gc_set_refs:
   78|  46.7M|{
   79|  46.7M|    g->_gc_prev = (g->_gc_prev & ~_PyGC_PREV_MASK)
  ------------------
  |  |  122|  46.7M|#define _PyGC_PREV_MASK            (((uintptr_t) -1) << _PyGC_PREV_SHIFT)
  |  |  ------------------
  |  |  |  |  121|  46.7M|#define _PyGC_PREV_SHIFT           2
  |  |  ------------------
  ------------------
   80|  46.7M|        | ((uintptr_t)(refs) << _PyGC_PREV_SHIFT);
  ------------------
  |  |  121|  46.7M|#define _PyGC_PREV_SHIFT           2
  ------------------
   81|  46.7M|}
gc.c:gc_clear_collecting:
   66|  46.8M|{
   67|  46.8M|    g->_gc_prev &= ~PREV_MASK_COLLECTING;
  ------------------
  |  |   39|  46.8M|#define PREV_MASK_COLLECTING   _PyGC_PREV_MASK_COLLECTING
  |  |  ------------------
  |  |  |  |  119|  46.8M|#define _PyGC_PREV_MASK_COLLECTING ((uintptr_t)2)
  |  |  ------------------
  ------------------
   68|  46.8M|}
gc.c:untrack_tuples:
  666|  7.76k|{
  667|  7.76k|    PyGC_Head *gc = GC_NEXT(head);
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  668|  46.8M|    while (gc != head) {
  ------------------
  |  Branch (668:12): [True: 46.8M, False: 7.76k]
  ------------------
  669|  46.8M|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  46.8M|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  670|  46.8M|        PyGC_Head *next = GC_NEXT(gc);
  ------------------
  |  |   28|  46.8M|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  671|  46.8M|        if (PyTuple_CheckExact(op)) {
  ------------------
  |  |   28|  46.8M|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|  46.8M|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  46.8M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  46.8M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 46.7M, False: 114k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|  46.7M|            _PyTuple_MaybeUntrack(op);
  673|  46.7M|        }
  674|  46.8M|        gc = next;
  675|  46.8M|    }
  676|  7.76k|}
gc.c:move_legacy_finalizers:
  692|  7.76k|{
  693|  7.76k|    PyGC_Head *gc, *next;
  694|  7.76k|    _PyObject_ASSERT(
  ------------------
  |  |  425|  7.76k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  7.76k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  7.76k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 7.76k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  7.76k|      ? (void)(0) \
  |  |  |  |  |  |  418|  7.76k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  695|  7.76k|        FROM_GC(unreachable),
  696|  7.76k|        (unreachable->_gc_next & NEXT_MASK_UNREACHABLE) == 0);
  697|       |
  698|       |    /* March over unreachable.  Move objects with finalizers into
  699|       |     * `finalizers`.
  700|       |     */
  701|  9.26k|    for (gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (701:37): [True: 1.49k, False: 7.76k]
  ------------------
  702|  1.49k|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  1.49k|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  703|       |
  704|  1.49k|        _PyObject_ASSERT(op, gc->_gc_next & NEXT_MASK_UNREACHABLE);
  ------------------
  |  |  425|  1.49k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  1.49k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  1.49k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 1.49k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  1.49k|      ? (void)(0) \
  |  |  |  |  |  |  418|  1.49k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  705|  1.49k|        gc->_gc_next &= ~NEXT_MASK_UNREACHABLE;
  ------------------
  |  |   50|  1.49k|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  706|  1.49k|        next = (PyGC_Head*)gc->_gc_next;
  707|       |
  708|  1.49k|        if (has_legacy_finalizer(op)) {
  ------------------
  |  Branch (708:13): [True: 0, False: 1.49k]
  ------------------
  709|      0|            gc_clear_collecting(gc);
  710|      0|            gc_list_move(gc, finalizers);
  711|      0|        }
  712|  1.49k|    }
  713|  7.76k|}
gc.c:has_legacy_finalizer:
  681|  1.49k|{
  682|  1.49k|    return Py_TYPE(op)->tp_del != NULL;
  ------------------
  |  |  213|  1.49k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  683|  1.49k|}
gc.c:gc_list_move:
  258|  1.98k|{
  259|       |    /* Unlink from current list. */
  260|  1.98k|    PyGC_Head *from_prev = GC_PREV(node);
  ------------------
  |  |   29|  1.98k|#define GC_PREV _PyGCHead_PREV
  ------------------
  261|  1.98k|    PyGC_Head *from_next = GC_NEXT(node);
  ------------------
  |  |   28|  1.98k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  262|  1.98k|    _PyGCHead_SET_NEXT(from_prev, from_next);
  263|  1.98k|    _PyGCHead_SET_PREV(from_next, from_prev);
  264|       |
  265|       |    /* Relink at end of new list. */
  266|       |    // list must not have flags.  So we can skip macros.
  267|  1.98k|    PyGC_Head *to_prev = (PyGC_Head*)list->_gc_prev;
  268|  1.98k|    _PyGCHead_SET_PREV(node, to_prev);
  269|  1.98k|    _PyGCHead_SET_NEXT(to_prev, node);
  270|  1.98k|    list->_gc_prev = (uintptr_t)node;
  271|  1.98k|    _PyGCHead_SET_NEXT(node, list);
  272|  1.98k|}
gc.c:move_legacy_finalizer_reachable:
  756|  7.76k|{
  757|  7.76k|    traverseproc traverse;
  758|  7.76k|    PyGC_Head *gc = GC_NEXT(finalizers);
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  759|  7.76k|    for (; gc != finalizers; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|      0|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (759:12): [True: 0, False: 7.76k]
  ------------------
  760|       |        /* Note that the finalizers list may grow during this. */
  761|      0|        traverse = Py_TYPE(FROM_GC(gc))->tp_traverse;
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|      0|        (void) traverse(FROM_GC(gc),
  ------------------
  |  |   53|      0|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  763|      0|                        visit_move,
  764|      0|                        (void *)finalizers);
  765|      0|    }
  766|  7.76k|}
gc.c:handle_weakref_callbacks:
  809|  7.76k|{
  810|  7.76k|    PyGC_Head *gc;
  811|  7.76k|    PyGC_Head wrcb_to_call;     /* weakrefs with callbacks to call */
  812|  7.76k|    PyGC_Head *next;
  813|  7.76k|    int num_freed = 0;
  814|       |
  815|  7.76k|    gc_list_init(&wrcb_to_call);
  816|       |
  817|       |    /* Find all weakrefs with callbacks and move into `wrcb_to_call` if the
  818|       |     * callback needs to be invoked. We make another pass over wrcb_to_call,
  819|       |     * invoking callbacks, after this pass completes.
  820|       |     */
  821|  9.26k|    for (gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (821:37): [True: 1.49k, False: 7.76k]
  ------------------
  822|  1.49k|        PyWeakReference **wrlist;
  823|       |
  824|  1.49k|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  1.49k|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  825|  1.49k|        next = GC_NEXT(gc);
  ------------------
  |  |   28|  1.49k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  826|       |
  827|  1.49k|        if (! _PyType_SUPPORTS_WEAKREFS(Py_TYPE(op))) {
  ------------------
  |  |  213|  1.49k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (827:13): [True: 1.21k, False: 277]
  ------------------
  828|  1.21k|            continue;
  829|  1.21k|        }
  830|       |
  831|       |        /* It supports weakrefs.  Does it have any?
  832|       |         *
  833|       |         * This is never triggered for static types so we can avoid the
  834|       |         * (slightly) more costly _PyObject_GET_WEAKREFS_LISTPTR().
  835|       |         */
  836|    277|        wrlist = _PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET(op);
  837|       |
  838|       |        /* `op` may have some weakrefs.  March over the list and move the
  839|       |         * weakrefs with callbacks that must be called into wrcb_to_call.
  840|       |         */
  841|    277|        PyWeakReference *next_wr;
  842|    285|        for (PyWeakReference *wr = *wrlist; wr != NULL; wr = next_wr) {
  ------------------
  |  Branch (842:45): [True: 8, False: 277]
  ------------------
  843|       |            // Get the next list element to get iterator progress if we omit
  844|       |            // clearing of the weakref (because _PyWeakref_ClearRef changes
  845|       |            // next pointer in the wrlist).
  846|      8|            next_wr = wr->wr_next;
  847|       |
  848|      8|            if (wr->wr_callback == NULL) {
  ------------------
  |  Branch (848:17): [True: 8, False: 0]
  ------------------
  849|       |                /* no callback */
  850|      8|                continue;
  851|      8|            }
  852|       |
  853|       |            // Clear the weakref.  See the comments above this function for
  854|       |            // reasons why we need to clear weakrefs that have callbacks.
  855|       |            // Note that _PyWeakref_ClearRef clears the weakref but leaves the
  856|       |            // callback pointer intact.  Obscure: it also changes *wrlist.
  857|      0|            _PyObject_ASSERT((PyObject *)wr, wr->wr_object == op);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|      0|            _PyWeakref_ClearRef(wr);
  859|      0|            _PyObject_ASSERT((PyObject *)wr, wr->wr_object == Py_None);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  860|       |
  861|       |            /* Headache time.  `op` is going away, and is weakly referenced by
  862|       |             * `wr`, which has a callback.  Should the callback be invoked?  If wr
  863|       |             * is also trash, no:
  864|       |             *
  865|       |             * 1. There's no need to call it.  The object and the weakref are
  866|       |             *    both going away, so it's legitimate to pretend the weakref is
  867|       |             *    going away first.  The user has to ensure a weakref outlives its
  868|       |             *    referent if they want a guarantee that the wr callback will get
  869|       |             *    invoked.
  870|       |             *
  871|       |             * 2. It may be catastrophic to call it.  If the callback is also in
  872|       |             *    cyclic trash (CT), then although the CT is unreachable from
  873|       |             *    outside the current generation, CT may be reachable from the
  874|       |             *    callback.  Then the callback could resurrect insane objects.
  875|       |             *
  876|       |             * Since the callback is never needed and may be unsafe in this
  877|       |             * case, wr is simply left in the unreachable set.  Note that
  878|       |             * clear_weakrefs() will ensure its callback will not trigger
  879|       |             * inside delete_garbage().
  880|       |             *
  881|       |             * OTOH, if wr isn't part of CT, we should invoke the callback:  the
  882|       |             * weakref outlived the trash.  Note that since wr isn't CT in this
  883|       |             * case, its callback can't be CT either -- wr acted as an external
  884|       |             * root to this generation, and therefore its callback did too.  So
  885|       |             * nothing in CT is reachable from the callback either, so it's hard
  886|       |             * to imagine how calling it later could create a problem for us.  wr
  887|       |             * is moved to wrcb_to_call in this case.
  888|       |             */
  889|      0|            if (gc_is_collecting(AS_GC((PyObject *)wr))) {
  ------------------
  |  |   52|      0|#define AS_GC(op) _Py_AS_GC(op)
  ------------------
  |  Branch (889:17): [True: 0, False: 0]
  ------------------
  890|      0|                continue;
  891|      0|            }
  892|       |
  893|       |            /* Create a new reference so that wr can't go away
  894|       |             * before we can process it again.
  895|       |             */
  896|      0|            Py_INCREF(wr);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|       |
  898|       |            /* Move wr to wrcb_to_call, for the next pass. */
  899|      0|            PyGC_Head *wrasgc = AS_GC((PyObject *)wr);
  ------------------
  |  |   52|      0|#define AS_GC(op) _Py_AS_GC(op)
  ------------------
  900|       |            // wrasgc is reachable, but next isn't, so they can't be the same
  901|      0|            _PyObject_ASSERT((PyObject *)wr, wrasgc != next);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  902|      0|            gc_list_move(wrasgc, &wrcb_to_call);
  903|      0|        }
  904|    277|    }
  905|       |
  906|       |    /* Invoke the callbacks we decided to honor.  It's safe to invoke them
  907|       |     * because they can't reference unreachable objects.
  908|       |     */
  909|  7.76k|    while (! gc_list_is_empty(&wrcb_to_call)) {
  ------------------
  |  Branch (909:12): [True: 0, False: 7.76k]
  ------------------
  910|      0|        PyObject *temp;
  911|      0|        PyObject *callback;
  912|       |
  913|      0|        gc = (PyGC_Head*)wrcb_to_call._gc_next;
  914|      0|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|      0|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  915|      0|        _PyObject_ASSERT(op, PyWeakref_Check(op));
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (416:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (416:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|      0|        PyWeakReference *wr = (PyWeakReference *)op;
  917|      0|        callback = wr->wr_callback;
  918|      0|        _PyObject_ASSERT(op, callback != NULL);
  ------------------
  |  |  425|      0|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      0|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      0|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      0|      ? (void)(0) \
  |  |  |  |  |  |  418|      0|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|       |
  920|       |        /* copy-paste of weakrefobject.c's handle_callback() */
  921|      0|        temp = PyObject_CallOneArg(callback, (PyObject *)wr);
  922|      0|        if (temp == NULL) {
  ------------------
  |  Branch (922:13): [True: 0, False: 0]
  ------------------
  923|      0|            PyErr_FormatUnraisable("Exception ignored on "
  924|      0|                                   "calling weakref callback %R", callback);
  925|      0|        }
  926|      0|        else {
  927|      0|            Py_DECREF(temp);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|      0|        }
  929|       |
  930|       |        /* Give up the reference we created in the first pass.  When
  931|       |         * op's refcount hits 0 (which it may or may not do right now),
  932|       |         * op's tp_dealloc will decref op->wr_callback too.  Note
  933|       |         * that the refcount probably will hit 0 now, and because this
  934|       |         * weakref was reachable to begin with, gc didn't already
  935|       |         * add it to its count of freed objects.  Example:  a reachable
  936|       |         * weak value dict maps some key to this reachable weakref.
  937|       |         * The callback removes this key->weakref mapping from the
  938|       |         * dict, leaving no other references to the weakref (excepting
  939|       |         * ours).
  940|       |         */
  941|      0|        Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  942|      0|        if (wrcb_to_call._gc_next == (uintptr_t)gc) {
  ------------------
  |  Branch (942:13): [True: 0, False: 0]
  ------------------
  943|       |            /* object is still alive -- move it */
  944|      0|            gc_list_move(gc, old);
  945|      0|        }
  946|      0|        else {
  947|      0|            ++num_freed;
  948|      0|        }
  949|      0|    }
  950|       |
  951|  7.76k|    return num_freed;
  952|  7.76k|}
gc.c:finalize_garbage:
 1047|  7.76k|{
 1048|  7.76k|    destructor finalize;
 1049|  7.76k|    PyGC_Head seen;
 1050|       |
 1051|       |    /* While we're going through the loop, `finalize(op)` may cause op, or
 1052|       |     * other objects, to be reclaimed via refcounts falling to zero.  So
 1053|       |     * there's little we can rely on about the structure of the input
 1054|       |     * `collectable` list across iterations.  For safety, we always take the
 1055|       |     * first object in that list and move it to a temporary `seen` list.
 1056|       |     * If objects vanish from the `collectable` and `seen` lists we don't
 1057|       |     * care.
 1058|       |     */
 1059|  7.76k|    gc_list_init(&seen);
 1060|       |
 1061|  9.26k|    while (!gc_list_is_empty(collectable)) {
  ------------------
  |  Branch (1061:12): [True: 1.49k, False: 7.76k]
  ------------------
 1062|  1.49k|        PyGC_Head *gc = GC_NEXT(collectable);
  ------------------
  |  |   28|  1.49k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
 1063|  1.49k|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  1.49k|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
 1064|  1.49k|        gc_list_move(gc, &seen);
 1065|  1.49k|        if (!_PyGC_FINALIZED(op) &&
  ------------------
  |  Branch (1065:13): [True: 1.49k, False: 0]
  ------------------
 1066|  1.49k|            (finalize = Py_TYPE(op)->tp_finalize) != NULL)
  ------------------
  |  |  213|  1.49k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1066:13): [True: 0, False: 1.49k]
  ------------------
 1067|      0|        {
 1068|      0|            _PyGC_SET_FINALIZED(op);
 1069|      0|            Py_INCREF(op);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1070|      0|            finalize(op);
 1071|      0|            assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1071:13): [True: 0, False: 0]
  ------------------
 1072|      0|            Py_DECREF(op);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|      0|        }
 1074|  1.49k|    }
 1075|  7.76k|    gc_list_merge(&seen, collectable);
 1076|  7.76k|}
gc.c:handle_resurrected_objects:
 1237|  7.76k|{
 1238|       |    // Remove the PREV_MASK_COLLECTING from unreachable
 1239|       |    // to prepare it for a new call to 'deduce_unreachable'
 1240|  7.76k|    gc_list_clear_collecting(unreachable);
 1241|       |
 1242|       |    // After the call to deduce_unreachable, the 'still_unreachable' set will
 1243|       |    // have the PREV_MARK_COLLECTING set, but the objects are going to be
 1244|       |    // removed so we can skip the expense of clearing the flag.
 1245|  7.76k|    PyGC_Head* resurrected = unreachable;
 1246|  7.76k|    deduce_unreachable(resurrected, still_unreachable);
 1247|  7.76k|    clear_unreachable_mask(still_unreachable);
 1248|       |
 1249|       |    // Move the resurrected objects to the old generation for future collection.
 1250|  7.76k|    gc_list_merge(resurrected, old_generation);
 1251|  7.76k|}
gc.c:gc_list_clear_collecting:
  309|  7.76k|{
  310|  7.76k|    PyGC_Head *gc;
  311|  9.26k|    for (gc = GC_NEXT(collectable); gc != collectable; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
                  for (gc = GC_NEXT(collectable); gc != collectable; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|  1.49k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (311:37): [True: 1.49k, False: 7.76k]
  ------------------
  312|  1.49k|        gc_clear_collecting(gc);
  313|  1.49k|    }
  314|  7.76k|}
gc.c:clear_unreachable_mask:
  717|  7.76k|{
  718|       |    /* Check that the list head does not have the unreachable bit set */
  719|  7.76k|    _PyObject_ASSERT(
  ------------------
  |  |  425|  7.76k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  7.76k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  7.76k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 7.76k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  7.76k|      ? (void)(0) \
  |  |  |  |  |  |  418|  7.76k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  720|  7.76k|        FROM_GC(unreachable),
  721|  7.76k|        ((uintptr_t)unreachable & NEXT_MASK_UNREACHABLE) == 0);
  722|  7.76k|    _PyObject_ASSERT(
  ------------------
  |  |  425|  7.76k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  7.76k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  7.76k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 7.76k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  7.76k|      ? (void)(0) \
  |  |  |  |  |  |  418|  7.76k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  723|  7.76k|        FROM_GC(unreachable),
  724|  7.76k|        (unreachable->_gc_next & NEXT_MASK_UNREACHABLE) == 0);
  725|       |
  726|  7.76k|    PyGC_Head *gc, *next;
  727|  9.26k|    for (gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (727:37): [True: 1.49k, False: 7.76k]
  ------------------
  728|  1.49k|        _PyObject_ASSERT((PyObject*)FROM_GC(gc), gc->_gc_next & NEXT_MASK_UNREACHABLE);
  ------------------
  |  |  425|  1.49k|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|  1.49k|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|  1.49k|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 1.49k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|  1.49k|      ? (void)(0) \
  |  |  |  |  |  |  418|  1.49k|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  729|  1.49k|        gc->_gc_next &= ~NEXT_MASK_UNREACHABLE;
  ------------------
  |  |   50|  1.49k|#define NEXT_MASK_UNREACHABLE  (1)
  ------------------
  730|  1.49k|        next = (PyGC_Head*)gc->_gc_next;
  731|  1.49k|    }
  732|  7.76k|    validate_list(unreachable, collecting_set_unreachable_clear);
  ------------------
  |  |  387|  7.76k|#define validate_list(x, y) do{}while(0)
  |  |  ------------------
  |  |  |  Branch (387:39): [Folded, False: 7.76k]
  |  |  ------------------
  ------------------
  733|  7.76k|}
gc.c:clear_weakrefs:
  960|  7.76k|{
  961|  7.76k|    PyGC_Head *gc;
  962|  7.76k|    PyGC_Head *next;
  963|       |
  964|  9.26k|    for (gc = GC_NEXT(unreachable); gc != unreachable; gc = next) {
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (964:37): [True: 1.49k, False: 7.76k]
  ------------------
  965|  1.49k|        PyWeakReference **wrlist;
  966|       |
  967|  1.49k|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|  1.49k|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
  968|  1.49k|        next = GC_NEXT(gc);
  ------------------
  |  |   28|  1.49k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  969|       |
  970|  1.49k|        if (PyWeakref_Check(op)) {
  ------------------
  |  |   23|  1.49k|        (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
  |  |  ------------------
  |  |  |  |   15|  1.49k|#define PyWeakref_CheckRef(op) PyObject_TypeCheck((op), &_PyWeakref_RefType)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|  2.98k|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 1.49k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
  |  |  ------------------
  |  |  |  |   19|  1.49k|        (Py_IS_TYPE((op), &_PyWeakref_ProxyType) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  2.98k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 1.49k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   20|  1.49k|         || Py_IS_TYPE((op), &_PyWeakref_CallableProxyType))
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  1.49k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 1.49k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  971|       |            /* A weakref inside the unreachable set is always cleared. See
  972|       |             * the comments above handle_weakref_callbacks() for why these
  973|       |             * must be cleared.
  974|       |             */
  975|      0|            _PyWeakref_ClearRef((PyWeakReference *)op);
  976|      0|        }
  977|       |
  978|  1.49k|        if (! _PyType_SUPPORTS_WEAKREFS(Py_TYPE(op))) {
  ------------------
  |  |  213|  1.49k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.49k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.49k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (978:13): [True: 1.21k, False: 277]
  ------------------
  979|  1.21k|            continue;
  980|  1.21k|        }
  981|       |
  982|       |        /* It supports weakrefs.  Does it have any?
  983|       |         *
  984|       |         * This is never triggered for static types so we can avoid the
  985|       |         * (slightly) more costly _PyObject_GET_WEAKREFS_LISTPTR().
  986|       |         */
  987|    277|        wrlist = _PyObject_GET_WEAKREFS_LISTPTR_FROM_OFFSET(op);
  988|       |
  989|       |        /* `op` may have some weakrefs.  March over the list, clear
  990|       |         * all the weakrefs.
  991|       |         */
  992|    285|        for (PyWeakReference *wr = *wrlist; wr != NULL; wr = *wrlist) {
  ------------------
  |  Branch (992:45): [True: 8, False: 277]
  ------------------
  993|       |            /* _PyWeakref_ClearRef clears the weakref but leaves
  994|       |             * the callback pointer intact.  Obscure:  it also
  995|       |             * changes *wrlist.
  996|       |             */
  997|      8|            _PyObject_ASSERT((PyObject *)wr, wr->wr_object == op);
  ------------------
  |  |  425|      8|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      8|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      8|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      8|      ? (void)(0) \
  |  |  |  |  |  |  418|      8|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  998|      8|            _PyWeakref_ClearRef(wr);
  999|      8|            _PyObject_ASSERT((PyObject *)wr, wr->wr_object == Py_None);
  ------------------
  |  |  425|      8|    _PyObject_ASSERT_WITH_MSG((obj), expr, NULL)
  |  |  ------------------
  |  |  |  |  423|      8|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  |  |  ------------------
  |  |  |  |  |  |  416|      8|    ((expr) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (416:6): [True: 8, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  417|      8|      ? (void)(0) \
  |  |  |  |  |  |  418|      8|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1000|      8|        }
 1001|    277|    }
 1002|  7.76k|}
gc.c:delete_garbage:
 1085|  7.76k|{
 1086|  7.76k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1086:5): [True: 7.76k, False: 0]
  ------------------
 1087|       |
 1088|  8.47k|    while (!gc_list_is_empty(collectable)) {
  ------------------
  |  Branch (1088:12): [True: 701, False: 7.76k]
  ------------------
 1089|    701|        PyGC_Head *gc = GC_NEXT(collectable);
  ------------------
  |  |   28|    701|#define GC_NEXT _PyGCHead_NEXT
  ------------------
 1090|    701|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|    701|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
 1091|       |
 1092|    701|        _PyObject_ASSERT_WITH_MSG(op, Py_REFCNT(op) > 0,
  ------------------
  |  |  423|    701|    _PyObject_ASSERT_FROM((obj), expr, (msg), __FILE__, __LINE__, __func__)
  |  |  ------------------
  |  |  |  |  416|    701|    ((expr) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (416:6): [True: 701, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  417|    701|      ? (void)(0) \
  |  |  |  |  418|    701|      : _PyObject_AssertFailed((obj), Py_STRINGIFY(expr), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|      0|#define Py_STRINGIFY(x) _Py_XSTRINGIFY(x)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  151|      0|#define _Py_XSTRINGIFY(x) #x
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  419|      0|                               (msg), (filename), (lineno), (func)))
  |  |  ------------------
  ------------------
 1093|    701|                                  "refcount is too small");
 1094|       |
 1095|    701|        if (gcstate->debug & _PyGC_DEBUG_SAVEALL) {
  ------------------
  |  |  128|    701|#define _PyGC_DEBUG_SAVEALL           (1<<5) /* save all garbage in gc.garbage */
  ------------------
  |  Branch (1095:13): [True: 0, False: 701]
  ------------------
 1096|      0|            assert(gcstate->garbage != NULL);
  ------------------
  |  Branch (1096:13): [True: 0, False: 0]
  ------------------
 1097|      0|            if (PyList_Append(gcstate->garbage, op) < 0) {
  ------------------
  |  Branch (1097:17): [True: 0, False: 0]
  ------------------
 1098|      0|                _PyErr_Clear(tstate);
 1099|      0|            }
 1100|      0|        }
 1101|    701|        else {
 1102|    701|            inquiry clear;
 1103|    701|            if ((clear = Py_TYPE(op)->tp_clear) != NULL) {
  ------------------
  |  |  213|    701|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    701|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    701|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1103:17): [True: 683, False: 18]
  ------------------
 1104|    683|                Py_INCREF(op);
  ------------------
  |  |  310|    683|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    683|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    683|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|    683|                (void) clear(op);
 1106|    683|                if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (1106:21): [True: 0, False: 683]
  ------------------
 1107|      0|                    PyErr_FormatUnraisable("Exception ignored in tp_clear of %s",
 1108|      0|                                           Py_TYPE(op)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|      0|                }
 1110|    683|                Py_DECREF(op);
  ------------------
  |  |  430|    683|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    683|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    683|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1111|    683|            }
 1112|    701|        }
 1113|    701|        if (GC_NEXT(collectable) == gc) {
  ------------------
  |  |   28|    701|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (1113:13): [True: 495, False: 206]
  ------------------
 1114|       |            /* object is still alive, move it, it may die later */
 1115|    495|            gc_clear_collecting(gc);
 1116|    495|            gc_list_move(gc, old);
 1117|    495|        }
 1118|    701|    }
 1119|  7.76k|}
gc.c:handle_legacy_finalizers:
 1022|  7.76k|{
 1023|  7.76k|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1023:5): [True: 7.76k, False: 0]
  ------------------
 1024|  7.76k|    assert(gcstate->garbage != NULL);
  ------------------
  |  Branch (1024:5): [True: 7.76k, False: 0]
  ------------------
 1025|       |
 1026|  7.76k|    PyGC_Head *gc = GC_NEXT(finalizers);
  ------------------
  |  |   28|  7.76k|#define GC_NEXT _PyGCHead_NEXT
  ------------------
 1027|  7.76k|    for (; gc != finalizers; gc = GC_NEXT(gc)) {
  ------------------
  |  |   28|      0|#define GC_NEXT _PyGCHead_NEXT
  ------------------
  |  Branch (1027:12): [True: 0, False: 7.76k]
  ------------------
 1028|      0|        PyObject *op = FROM_GC(gc);
  ------------------
  |  |   53|      0|#define FROM_GC(gc) _Py_FROM_GC(gc)
  ------------------
 1029|       |
 1030|      0|        if ((gcstate->debug & _PyGC_DEBUG_SAVEALL) || has_legacy_finalizer(op)) {
  ------------------
  |  |  128|      0|#define _PyGC_DEBUG_SAVEALL           (1<<5) /* save all garbage in gc.garbage */
  ------------------
  |  Branch (1030:13): [True: 0, False: 0]
  |  Branch (1030:55): [True: 0, False: 0]
  ------------------
 1031|      0|            if (PyList_Append(gcstate->garbage, op) < 0) {
  ------------------
  |  Branch (1031:17): [True: 0, False: 0]
  ------------------
 1032|      0|                _PyErr_Clear(tstate);
 1033|      0|                break;
 1034|      0|            }
 1035|      0|        }
 1036|      0|    }
 1037|       |
 1038|  7.76k|    gc_list_merge(finalizers, old);
 1039|  7.76k|}
gc.c:add_stats:
 1401|  7.76k|{
 1402|  7.76k|    struct gc_generation_stats *prev_stats = gc_get_prev_stats(gcstate, gen);
 1403|  7.76k|    struct gc_generation_stats *cur_stats = gc_get_stats(gcstate, gen);
 1404|       |
 1405|  7.76k|    memcpy(cur_stats, prev_stats, sizeof(struct gc_generation_stats));
 1406|       |
 1407|  7.76k|    cur_stats->ts_start = stats->ts_start;
 1408|  7.76k|    cur_stats->collections += 1;
 1409|  7.76k|    cur_stats->collected += stats->collected;
 1410|  7.76k|    cur_stats->uncollectable += stats->uncollectable;
 1411|  7.76k|    cur_stats->candidates += stats->candidates;
 1412|       |
 1413|  7.76k|    cur_stats->duration += stats->duration;
 1414|  7.76k|    cur_stats->heap_size = stats->heap_size;
 1415|       |    /* Publish ts_stop last so remote readers do not select a partially
 1416|       |       updated stats record as the latest collection. */
 1417|  7.76k|    cur_stats->ts_stop = stats->ts_stop;
 1418|  7.76k|}
gc.c:gc_get_prev_stats:
 1386|  7.76k|{
 1387|  7.76k|    if (gen == 0) {
  ------------------
  |  Branch (1387:9): [True: 7.11k, False: 653]
  ------------------
 1388|  7.11k|        struct gc_young_stats_buffer *buffer = &gcstate->generation_stats->young;
 1389|  7.11k|        struct gc_generation_stats *stats = &buffer->items[buffer->index];
 1390|  7.11k|        return stats;
 1391|  7.11k|    }
 1392|    653|    else {
 1393|    653|        struct gc_old_stats_buffer *buffer = &gcstate->generation_stats->old[gen - 1];
 1394|    653|        struct gc_generation_stats *stats = &buffer->items[buffer->index];
 1395|    653|        return stats;
 1396|    653|    }
 1397|  7.76k|}
gc.c:gc_get_stats:
 1369|  7.76k|{
 1370|  7.76k|    if (gen == 0) {
  ------------------
  |  Branch (1370:9): [True: 7.11k, False: 653]
  ------------------
 1371|  7.11k|        struct gc_young_stats_buffer *buffer = &gcstate->generation_stats->young;
 1372|  7.11k|        buffer->index = (buffer->index + 1) % GC_YOUNG_STATS_SIZE;
  ------------------
  |  |  202|  7.11k|#define GC_YOUNG_STATS_SIZE 11
  ------------------
 1373|  7.11k|        struct gc_generation_stats *stats = &buffer->items[buffer->index];
 1374|  7.11k|        return stats;
 1375|  7.11k|    }
 1376|    653|    else {
 1377|    653|        struct gc_old_stats_buffer *buffer = &gcstate->generation_stats->old[gen - 1];
 1378|    653|        buffer->index = (buffer->index + 1) % GC_OLD_STATS_SIZE;
  ------------------
  |  |  203|    653|#define GC_OLD_STATS_SIZE 3
  ------------------
 1379|    653|        struct gc_generation_stats *stats = &buffer->items[buffer->index];
 1380|    653|        return stats;
 1381|    653|    }
 1382|  7.76k|}
gc.c:gc_alloc:
 2007|  49.5M|{
 2008|  49.5M|    PyThreadState *tstate = _PyThreadState_GET();
 2009|  49.5M|    if (basicsize > PY_SSIZE_T_MAX - presize) {
  ------------------
  |  |  137|  49.5M|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (2009:9): [True: 0, False: 49.5M]
  ------------------
 2010|      0|        return _PyErr_NoMemory(tstate);
 2011|      0|    }
 2012|  49.5M|    size_t size = presize + basicsize;
 2013|  49.5M|    char *mem = _PyObject_MallocWithType(tp, size);
 2014|  49.5M|    if (mem == NULL) {
  ------------------
  |  Branch (2014:9): [True: 0, False: 49.5M]
  ------------------
 2015|      0|        return _PyErr_NoMemory(tstate);
 2016|      0|    }
 2017|  49.5M|    ((PyObject **)mem)[0] = NULL;
 2018|       |    ((PyObject **)mem)[1] = NULL;
 2019|  49.5M|    PyObject *op = (PyObject *)(mem + presize);
 2020|  49.5M|    _PyObject_GC_Link(op);
 2021|  49.5M|    return op;
 2022|  49.5M|}

_PyGC_ClearAllFreeLists:
   13|      7|{
   14|      7|    _PyObject_ClearFreeLists(&interp->object_state.freelists, 0);
   15|      7|}

PyArg_ParseTuple:
  104|  56.2k|{
  105|  56.2k|    int retval;
  106|  56.2k|    va_list va;
  107|       |
  108|  56.2k|    va_start(va, format);
  109|  56.2k|    retval = vgetargs1(args, format, &va, 0);
  110|       |    va_end(va);
  111|  56.2k|    return retval;
  112|  56.2k|}
PyArg_ParseTupleAndKeywords:
 1426|    782|{
 1427|    782|    int retval;
 1428|    782|    va_list va;
 1429|       |
 1430|    782|    if ((args == NULL || !PyTuple_Check(args)) ||
  ------------------
  |  |   27|    782|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    782|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1430:10): [True: 0, False: 782]
  |  Branch (1430:26): [True: 0, False: 782]
  ------------------
 1431|    782|        (keywords != NULL && !PyDict_Check(keywords)) ||
  ------------------
  |  |   18|    198|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    198|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1431:10): [True: 198, False: 584]
  |  Branch (1431:30): [True: 0, False: 198]
  ------------------
 1432|    782|        format == NULL ||
  ------------------
  |  Branch (1432:9): [True: 0, False: 782]
  ------------------
 1433|    782|        kwlist == NULL)
  ------------------
  |  Branch (1433:9): [True: 0, False: 782]
  ------------------
 1434|      0|    {
 1435|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1436|      0|        return 0;
 1437|      0|    }
 1438|       |
 1439|    782|    va_start(va, kwlist);
 1440|    782|    retval = vgetargskeywords(args, keywords, format, kwlist, &va, 0);
 1441|       |    va_end(va);
 1442|    782|    return retval;
 1443|    782|}
PyArg_ValidateKeywordArguments:
 1640|     28|{
 1641|     28|    if (!PyDict_Check(kwargs)) {
  ------------------
  |  |   18|     28|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     28|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1641:9): [True: 0, False: 28]
  ------------------
 1642|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1643|      0|        return 0;
 1644|      0|    }
 1645|     28|    if (!_PyDict_HasOnlyStringKeys(kwargs)) {
  ------------------
  |  Branch (1645:9): [True: 0, False: 28]
  ------------------
 1646|      0|        PyErr_SetString(PyExc_TypeError,
 1647|      0|                        "keywords must be strings");
 1648|      0|        return 0;
 1649|      0|    }
 1650|     28|    return 1;
 1651|     28|}
_PyArg_UnpackKeywords:
 2524|  2.26k|{
 2525|  2.26k|    PyObject *kwtuple;
 2526|  2.26k|    PyObject *keyword;
 2527|  2.26k|    int i, posonly, minposonly, maxargs;
 2528|  2.26k|    int reqlimit = minkw ? maxpos + minkw : minpos;
  ------------------
  |  Branch (2528:20): [True: 0, False: 2.26k]
  ------------------
 2529|  2.26k|    Py_ssize_t nkwargs;
 2530|  2.26k|    PyObject * const *kwstack = NULL;
 2531|       |
 2532|  2.26k|    assert(kwargs == NULL || PyDict_Check(kwargs));
  ------------------
  |  Branch (2532:5): [True: 2.26k, False: 0]
  |  Branch (2532:5): [True: 0, False: 0]
  ------------------
 2533|  2.26k|    assert(kwargs == NULL || kwnames == NULL);
  ------------------
  |  Branch (2533:5): [True: 2.26k, False: 0]
  |  Branch (2533:5): [True: 0, False: 0]
  ------------------
 2534|       |
 2535|  2.26k|    if (parser == NULL) {
  ------------------
  |  Branch (2535:9): [True: 0, False: 2.26k]
  ------------------
 2536|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2537|      0|        return NULL;
 2538|      0|    }
 2539|       |
 2540|  2.26k|    if (kwnames != NULL && !PyTuple_Check(kwnames)) {
  ------------------
  |  |   27|    314|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|    314|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2540:9): [True: 314, False: 1.94k]
  |  Branch (2540:28): [True: 0, False: 314]
  ------------------
 2541|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2542|      0|        return NULL;
 2543|      0|    }
 2544|       |
 2545|  2.26k|    if (args == NULL && nargs == 0) {
  ------------------
  |  Branch (2545:9): [True: 1.94k, False: 314]
  |  Branch (2545:25): [True: 1.94k, False: 0]
  ------------------
 2546|  1.94k|        args = buf;
 2547|  1.94k|    }
 2548|       |
 2549|  2.26k|    if (parser_init(parser) < 0) {
  ------------------
  |  Branch (2549:9): [True: 0, False: 2.26k]
  ------------------
 2550|      0|        return NULL;
 2551|      0|    }
 2552|       |
 2553|  2.26k|    kwtuple = parser->kwtuple;
 2554|  2.26k|    posonly = parser->pos;
 2555|  2.26k|    minposonly = Py_MIN(posonly, minpos);
  ------------------
  |  |  120|  2.26k|       __extension__ \
  |  |  121|  2.26k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  2.26k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  2.26k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  2.26k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  2.26k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 311, False: 1.95k]
  |  |  ------------------
  ------------------
 2556|  2.26k|    maxargs = posonly + (int)PyTuple_GET_SIZE(kwtuple);
  ------------------
  |  |   27|  2.26k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.26k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.26k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2557|       |
 2558|  2.26k|    if (kwargs != NULL) {
  ------------------
  |  Branch (2558:9): [True: 0, False: 2.26k]
  ------------------
 2559|      0|        nkwargs = PyDict_GET_SIZE(kwargs);
  ------------------
  |  |   63|      0|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2560|      0|    }
 2561|  2.26k|    else if (kwnames != NULL) {
  ------------------
  |  Branch (2561:14): [True: 314, False: 1.94k]
  ------------------
 2562|    314|        nkwargs = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|    314|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    314|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    314|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2563|    314|        kwstack = args + nargs;
 2564|    314|    }
 2565|  1.94k|    else {
 2566|  1.94k|        nkwargs = 0;
 2567|  1.94k|    }
 2568|  2.26k|    if (nkwargs == 0 && minkw == 0 && minpos <= nargs && (varpos || nargs <= maxpos)) {
  ------------------
  |  Branch (2568:9): [True: 1.94k, False: 314]
  |  Branch (2568:25): [True: 1.94k, False: 0]
  |  Branch (2568:39): [True: 1.94k, False: 0]
  |  Branch (2568:59): [True: 0, False: 1.94k]
  |  Branch (2568:69): [True: 1.94k, False: 0]
  ------------------
 2569|       |        /* Fast path. */
 2570|  1.94k|        return args;
 2571|  1.94k|    }
 2572|    314|    if (!varpos && nargs + nkwargs > maxargs) {
  ------------------
  |  Branch (2572:9): [True: 314, False: 0]
  |  Branch (2572:20): [True: 0, False: 314]
  ------------------
 2573|       |        /* Adding "keyword" (when nargs == 0) prevents producing wrong error
 2574|       |           messages in some special cases (see bpo-31229). */
 2575|      0|        PyErr_Format(PyExc_TypeError,
 2576|      0|                     "%.200s%s takes at most %d %sargument%s (%zd given)",
 2577|      0|                     (parser->fname == NULL) ? "function" : parser->fname,
  ------------------
  |  Branch (2577:22): [True: 0, False: 0]
  ------------------
 2578|      0|                     (parser->fname == NULL) ? "" : "()",
  ------------------
  |  Branch (2578:22): [True: 0, False: 0]
  ------------------
 2579|      0|                     maxargs,
 2580|      0|                     (nargs == 0) ? "keyword " : "",
  ------------------
  |  Branch (2580:22): [True: 0, False: 0]
  ------------------
 2581|      0|                     (maxargs == 1) ? "" : "s",
  ------------------
  |  Branch (2581:22): [True: 0, False: 0]
  ------------------
 2582|      0|                     nargs + nkwargs);
 2583|      0|        return NULL;
 2584|      0|    }
 2585|    314|    if (!varpos && nargs > maxpos) {
  ------------------
  |  Branch (2585:9): [True: 314, False: 0]
  |  Branch (2585:20): [True: 0, False: 314]
  ------------------
 2586|      0|        if (maxpos == 0) {
  ------------------
  |  Branch (2586:13): [True: 0, False: 0]
  ------------------
 2587|      0|            PyErr_Format(PyExc_TypeError,
 2588|      0|                         "%.200s%s takes no positional arguments",
 2589|      0|                         (parser->fname == NULL) ? "function" : parser->fname,
  ------------------
  |  Branch (2589:26): [True: 0, False: 0]
  ------------------
 2590|      0|                         (parser->fname == NULL) ? "" : "()");
  ------------------
  |  Branch (2590:26): [True: 0, False: 0]
  ------------------
 2591|      0|        }
 2592|      0|        else {
 2593|      0|            PyErr_Format(PyExc_TypeError,
 2594|      0|                         "%.200s%s takes %s %d positional argument%s (%zd given)",
 2595|      0|                         (parser->fname == NULL) ? "function" : parser->fname,
  ------------------
  |  Branch (2595:26): [True: 0, False: 0]
  ------------------
 2596|      0|                         (parser->fname == NULL) ? "" : "()",
  ------------------
  |  Branch (2596:26): [True: 0, False: 0]
  ------------------
 2597|      0|                         (minpos < maxpos) ? "at most" : "exactly",
  ------------------
  |  Branch (2597:26): [True: 0, False: 0]
  ------------------
 2598|      0|                         maxpos,
 2599|      0|                         (maxpos == 1) ? "" : "s",
  ------------------
  |  Branch (2599:26): [True: 0, False: 0]
  ------------------
 2600|      0|                         nargs);
 2601|      0|        }
 2602|      0|        return NULL;
 2603|      0|    }
 2604|    314|    if (nargs < minposonly) {
  ------------------
  |  Branch (2604:9): [True: 0, False: 314]
  ------------------
 2605|      0|        PyErr_Format(PyExc_TypeError,
 2606|      0|                     "%.200s%s takes %s %d positional argument%s"
 2607|      0|                     " (%zd given)",
 2608|      0|                     (parser->fname == NULL) ? "function" : parser->fname,
  ------------------
  |  Branch (2608:22): [True: 0, False: 0]
  ------------------
 2609|      0|                     (parser->fname == NULL) ? "" : "()",
  ------------------
  |  Branch (2609:22): [True: 0, False: 0]
  ------------------
 2610|      0|                     (varpos || minposonly < maxpos) ? "at least" : "exactly",
  ------------------
  |  Branch (2610:23): [True: 0, False: 0]
  |  Branch (2610:33): [True: 0, False: 0]
  ------------------
 2611|      0|                     minposonly,
 2612|      0|                     minposonly == 1 ? "" : "s",
  ------------------
  |  Branch (2612:22): [True: 0, False: 0]
  ------------------
 2613|      0|                     nargs);
 2614|      0|        return NULL;
 2615|      0|    }
 2616|       |
 2617|    314|    if (varpos) {
  ------------------
  |  Branch (2617:9): [True: 0, False: 314]
  ------------------
 2618|      0|        nargs = Py_MIN(maxpos, nargs);
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2619|      0|    }
 2620|       |    /* copy tuple args */
 2621|    625|    for (i = 0; i < nargs; i++) {
  ------------------
  |  Branch (2621:17): [True: 311, False: 314]
  ------------------
 2622|    311|        buf[i] = args[i];
 2623|    311|    }
 2624|       |
 2625|       |    /* copy keyword args using kwtuple to drive process */
 2626|  1.56k|    for (i = Py_MAX((int)nargs, posonly); i < maxargs; i++) {
  ------------------
  |  |  126|    314|       __extension__ \
  |  |  127|    314|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|    314|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  128|    314|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|    314|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  129|    314|          _x > _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (129:11): [True: 311, False: 3]
  |  |  ------------------
  ------------------
  |  Branch (2626:43): [True: 1.25k, False: 312]
  ------------------
 2627|  1.25k|        PyObject *current_arg;
 2628|  1.25k|        if (nkwargs) {
  ------------------
  |  Branch (2628:13): [True: 1.24k, False: 2]
  ------------------
 2629|  1.24k|            keyword = PyTuple_GET_ITEM(kwtuple, i - posonly);
  ------------------
  |  |   29|  1.24k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.24k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2629:23): [True: 1.24k, False: 0]
  ------------------
 2630|  1.24k|            if (kwargs != NULL) {
  ------------------
  |  Branch (2630:17): [True: 0, False: 1.24k]
  ------------------
 2631|      0|                if (PyDict_GetItemRef(kwargs, keyword, &current_arg) < 0) {
  ------------------
  |  Branch (2631:21): [True: 0, False: 0]
  ------------------
 2632|      0|                    return NULL;
 2633|      0|                }
 2634|      0|            }
 2635|  1.24k|            else {
 2636|  1.24k|                current_arg = find_keyword(kwnames, kwstack, keyword);
 2637|  1.24k|            }
 2638|  1.24k|        }
 2639|      2|        else if (i >= reqlimit) {
  ------------------
  |  Branch (2639:18): [True: 2, False: 0]
  ------------------
 2640|      2|            break;
 2641|      2|        }
 2642|      0|        else {
 2643|      0|            current_arg = NULL;
 2644|      0|        }
 2645|       |
 2646|  1.24k|        buf[i] = current_arg;
 2647|       |
 2648|  1.24k|        if (current_arg) {
  ------------------
  |  Branch (2648:13): [True: 625, False: 623]
  ------------------
 2649|    625|            Py_DECREF(current_arg);
  ------------------
  |  |  430|    625|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    625|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    625|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2650|    625|            --nkwargs;
 2651|    625|        }
 2652|    623|        else if (i < minpos || (maxpos <= i && i < reqlimit)) {
  ------------------
  |  Branch (2652:18): [True: 0, False: 623]
  |  Branch (2652:33): [True: 1, False: 622]
  |  Branch (2652:48): [True: 0, False: 1]
  ------------------
 2653|       |            /* Less arguments than required */
 2654|      0|            keyword = PyTuple_GET_ITEM(kwtuple, i - posonly);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2654:23): [True: 0, False: 0]
  ------------------
 2655|      0|            PyErr_Format(PyExc_TypeError,  "%.200s%s missing required "
 2656|      0|                         "argument '%U' (pos %d)",
 2657|      0|                         (parser->fname == NULL) ? "function" : parser->fname,
  ------------------
  |  Branch (2657:26): [True: 0, False: 0]
  ------------------
 2658|      0|                         (parser->fname == NULL) ? "" : "()",
  ------------------
  |  Branch (2658:26): [True: 0, False: 0]
  ------------------
 2659|      0|                         keyword, i+1);
 2660|      0|            return NULL;
 2661|      0|        }
 2662|  1.24k|    }
 2663|       |
 2664|    314|    if (nkwargs > 0) {
  ------------------
  |  Branch (2664:9): [True: 0, False: 314]
  ------------------
 2665|       |        /* make sure there are no arguments given by name and position */
 2666|      0|        for (i = posonly; i < nargs; i++) {
  ------------------
  |  Branch (2666:27): [True: 0, False: 0]
  ------------------
 2667|      0|            PyObject *current_arg;
 2668|      0|            keyword = PyTuple_GET_ITEM(kwtuple, i - posonly);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2668:23): [True: 0, False: 0]
  ------------------
 2669|      0|            if (kwargs != NULL) {
  ------------------
  |  Branch (2669:17): [True: 0, False: 0]
  ------------------
 2670|      0|                if (PyDict_GetItemRef(kwargs, keyword, &current_arg) < 0) {
  ------------------
  |  Branch (2670:21): [True: 0, False: 0]
  ------------------
 2671|      0|                    return NULL;
 2672|      0|                }
 2673|      0|            }
 2674|      0|            else {
 2675|      0|                current_arg = find_keyword(kwnames, kwstack, keyword);
 2676|      0|            }
 2677|      0|            if (current_arg) {
  ------------------
  |  Branch (2677:17): [True: 0, False: 0]
  ------------------
 2678|      0|                Py_DECREF(current_arg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2679|       |                /* arg present in tuple and in dict */
 2680|      0|                PyErr_Format(PyExc_TypeError,
 2681|      0|                             "argument for %.200s%s given by name ('%U') "
 2682|      0|                             "and position (%d)",
 2683|      0|                             (parser->fname == NULL) ? "function" : parser->fname,
  ------------------
  |  Branch (2683:30): [True: 0, False: 0]
  ------------------
 2684|      0|                             (parser->fname == NULL) ? "" : "()",
  ------------------
  |  Branch (2684:30): [True: 0, False: 0]
  ------------------
 2685|      0|                             keyword, i+1);
 2686|      0|                return NULL;
 2687|      0|            }
 2688|      0|        }
 2689|       |
 2690|      0|        error_unexpected_keyword_arg(kwargs, kwnames, kwtuple, parser->fname);
 2691|      0|        return NULL;
 2692|      0|    }
 2693|       |
 2694|    314|    return buf;
 2695|    314|}
_PyArg_CheckPositional:
 2838|  25.5k|{
 2839|  25.5k|    assert(min >= 0);
  ------------------
  |  Branch (2839:5): [True: 25.5k, False: 0]
  ------------------
 2840|  25.5k|    assert(min <= max);
  ------------------
  |  Branch (2840:5): [True: 25.5k, False: 0]
  ------------------
 2841|       |
 2842|  25.5k|    if (nargs < min) {
  ------------------
  |  Branch (2842:9): [True: 0, False: 25.5k]
  ------------------
 2843|      0|        if (name != NULL)
  ------------------
  |  Branch (2843:13): [True: 0, False: 0]
  ------------------
 2844|      0|            PyErr_Format(
 2845|      0|                PyExc_TypeError,
 2846|      0|                "%.200s expected %s%zd argument%s, got %zd",
 2847|      0|                name, (min == max ? "" : "at least "), min, min == 1 ? "" : "s", nargs);
  ------------------
  |  Branch (2847:24): [True: 0, False: 0]
  |  Branch (2847:61): [True: 0, False: 0]
  ------------------
 2848|      0|        else
 2849|      0|            PyErr_Format(
 2850|      0|                PyExc_TypeError,
 2851|      0|                "unpacked tuple should have %s%zd element%s,"
 2852|      0|                " but has %zd",
 2853|      0|                (min == max ? "" : "at least "), min, min == 1 ? "" : "s", nargs);
  ------------------
  |  Branch (2853:18): [True: 0, False: 0]
  |  Branch (2853:55): [True: 0, False: 0]
  ------------------
 2854|      0|        return 0;
 2855|      0|    }
 2856|       |
 2857|  25.5k|    if (nargs == 0) {
  ------------------
  |  Branch (2857:9): [True: 37, False: 25.4k]
  ------------------
 2858|     37|        return 1;
 2859|     37|    }
 2860|       |
 2861|  25.4k|    if (nargs > max) {
  ------------------
  |  Branch (2861:9): [True: 0, False: 25.4k]
  ------------------
 2862|      0|        if (name != NULL)
  ------------------
  |  Branch (2862:13): [True: 0, False: 0]
  ------------------
 2863|      0|            PyErr_Format(
 2864|      0|                PyExc_TypeError,
 2865|      0|                "%.200s expected %s%zd argument%s, got %zd",
 2866|      0|                name, (min == max ? "" : "at most "), max, max == 1 ? "" : "s", nargs);
  ------------------
  |  Branch (2866:24): [True: 0, False: 0]
  |  Branch (2866:60): [True: 0, False: 0]
  ------------------
 2867|      0|        else
 2868|      0|            PyErr_Format(
 2869|      0|                PyExc_TypeError,
 2870|      0|                "unpacked tuple should have %s%zd element%s,"
 2871|      0|                " but has %zd",
 2872|      0|                (min == max ? "" : "at most "), max, max == 1 ? "" : "s", nargs);
  ------------------
  |  Branch (2872:18): [True: 0, False: 0]
  |  Branch (2872:54): [True: 0, False: 0]
  ------------------
 2873|      0|        return 0;
 2874|      0|    }
 2875|       |
 2876|  25.4k|    return 1;
 2877|  25.4k|}
PyArg_UnpackTuple:
 2899|  7.50k|{
 2900|  7.50k|    PyObject **stack;
 2901|  7.50k|    Py_ssize_t nargs;
 2902|  7.50k|    int retval;
 2903|  7.50k|    va_list vargs;
 2904|       |
 2905|  7.50k|    if (!PyTuple_Check(args)) {
  ------------------
  |  |   27|  7.50k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  7.50k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (2905:9): [True: 0, False: 7.50k]
  ------------------
 2906|      0|        PyErr_SetString(PyExc_SystemError,
 2907|      0|            "PyArg_UnpackTuple() argument list is not a tuple");
 2908|      0|        return 0;
 2909|      0|    }
 2910|  7.50k|    stack = _PyTuple_ITEMS(args);
  ------------------
  |  |   26|  7.50k|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|  15.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 7.50k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2911|  7.50k|    nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  7.50k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.50k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.50k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2912|       |
 2913|  7.50k|    va_start(vargs, max);
 2914|  7.50k|    retval = unpack_stack(stack, nargs, name, min, max, vargs);
 2915|       |    va_end(vargs);
 2916|  7.50k|    return retval;
 2917|  7.50k|}
_PyArg_UnpackStack:
 2922|  18.0k|{
 2923|  18.0k|    int retval;
 2924|  18.0k|    va_list vargs;
 2925|       |
 2926|  18.0k|    va_start(vargs, max);
 2927|  18.0k|    retval = unpack_stack(args, nargs, name, min, max, vargs);
 2928|       |    va_end(vargs);
 2929|  18.0k|    return retval;
 2930|  18.0k|}
_PyArg_NoPositional:
 2963|    337|{
 2964|    337|    if (args == NULL)
  ------------------
  |  Branch (2964:9): [True: 0, False: 337]
  ------------------
 2965|      0|        return 1;
 2966|    337|    if (!PyTuple_CheckExact(args)) {
  ------------------
  |  |   28|    337|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|    337|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    337|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    337|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2966:9): [True: 0, False: 337]
  ------------------
 2967|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2968|      0|        return 0;
 2969|      0|    }
 2970|    337|    if (PyTuple_GET_SIZE(args) == 0)
  ------------------
  |  |   27|    337|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    337|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    337|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2970:9): [True: 337, False: 0]
  ------------------
 2971|    337|        return 1;
 2972|       |
 2973|      0|    PyErr_Format(PyExc_TypeError, "%.200s() takes no positional arguments",
 2974|      0|                    funcname);
 2975|      0|    return 0;
 2976|    337|}
getargs.c:vgetargs1_impl:
  258|  56.2k|{
  259|  56.2k|    char msgbuf[256];
  260|  56.2k|    int levels[32];
  261|  56.2k|    const char *fname = NULL;
  262|  56.2k|    const char *message = NULL;
  263|  56.2k|    int min = -1;
  264|  56.2k|    int max = 0;
  265|  56.2k|    int level = 0;
  266|  56.2k|    int endfmt = 0;
  267|  56.2k|    const char *formatsave = format;
  268|  56.2k|    Py_ssize_t i;
  269|  56.2k|    const char *msg;
  270|  56.2k|    int compat = flags & FLAG_COMPAT;
  ------------------
  |  |   24|  56.2k|#define FLAG_COMPAT 1
  ------------------
  271|  56.2k|    freelistentry_t static_entries[STATIC_FREELIST_ENTRIES];
  272|  56.2k|    freelist_t freelist;
  273|       |
  274|  56.2k|    assert(nargs == 0 || stack != NULL);
  ------------------
  |  Branch (274:5): [True: 0, False: 56.2k]
  |  Branch (274:5): [True: 56.2k, False: 0]
  ------------------
  275|       |
  276|  56.2k|    freelist.entries = static_entries;
  277|  56.2k|    freelist.first_available = 0;
  278|  56.2k|    freelist.entries_malloced = 0;
  279|       |
  280|  56.2k|    flags = flags & ~FLAG_COMPAT;
  ------------------
  |  |   24|  56.2k|#define FLAG_COMPAT 1
  ------------------
  281|       |
  282|   435k|    while (endfmt == 0) {
  ------------------
  |  Branch (282:12): [True: 378k, False: 56.2k]
  ------------------
  283|   378k|        int c = *format++;
  284|   378k|        switch (c) {
  285|      0|        case '(':
  ------------------
  |  Branch (285:9): [True: 0, False: 378k]
  ------------------
  286|      0|            if (level == 0)
  ------------------
  |  Branch (286:17): [True: 0, False: 0]
  ------------------
  287|      0|                max++;
  288|      0|            level++;
  289|      0|            if (level >= 30)
  ------------------
  |  Branch (289:17): [True: 0, False: 0]
  ------------------
  290|      0|                Py_FatalError("too many tuple nesting levels "
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  291|      0|                              "in argument format string");
  292|      0|            break;
  293|      0|        case ')':
  ------------------
  |  Branch (293:9): [True: 0, False: 378k]
  ------------------
  294|      0|            if (level == 0)
  ------------------
  |  Branch (294:17): [True: 0, False: 0]
  ------------------
  295|      0|                Py_FatalError("excess ')' in getargs format");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  296|      0|            else
  297|      0|                level--;
  298|      0|            break;
  299|  55.4k|        case '\0':
  ------------------
  |  Branch (299:9): [True: 55.4k, False: 323k]
  ------------------
  300|  55.4k|            endfmt = 1;
  301|  55.4k|            break;
  302|    773|        case ':':
  ------------------
  |  Branch (302:9): [True: 773, False: 378k]
  ------------------
  303|    773|            fname = format;
  304|    773|            endfmt = 1;
  305|    773|            break;
  306|      0|        case ';':
  ------------------
  |  Branch (306:9): [True: 0, False: 378k]
  ------------------
  307|      0|            message = format;
  308|      0|            endfmt = 1;
  309|      0|            break;
  310|  14.1k|        case '|':
  ------------------
  |  Branch (310:9): [True: 14.1k, False: 364k]
  ------------------
  311|  14.1k|            if (level == 0)
  ------------------
  |  Branch (311:17): [True: 14.1k, False: 0]
  ------------------
  312|  14.1k|                min = max;
  313|  14.1k|            break;
  314|   308k|        default:
  ------------------
  |  Branch (314:9): [True: 308k, False: 70.3k]
  ------------------
  315|   308k|            if (level == 0) {
  ------------------
  |  Branch (315:17): [True: 308k, False: 0]
  ------------------
  316|   308k|                if (Py_ISALPHA(c))
  ------------------
  |  |   23|   308k|#define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |  163|   308k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |   10|   308k|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|   308k|#define PY_CTF_LOWER  0x01
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    9|   308k|#define PY_CTF_UPPER  0x02
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (23:24): [True: 307k, False: 773]
  |  |  ------------------
  ------------------
  317|   307k|                    if (c != 'e') /* skip encoded */
  ------------------
  |  Branch (317:25): [True: 307k, False: 0]
  ------------------
  318|   307k|                        max++;
  319|   308k|            }
  320|   308k|            break;
  321|   378k|        }
  322|   378k|    }
  323|       |
  324|  56.2k|    if (level != 0)
  ------------------
  |  Branch (324:9): [True: 0, False: 56.2k]
  ------------------
  325|      0|        Py_FatalError(/* '(' */ "missing ')' in getargs format");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  326|       |
  327|  56.2k|    if (min < 0)
  ------------------
  |  Branch (327:9): [True: 42.0k, False: 14.1k]
  ------------------
  328|  42.0k|        min = max;
  329|       |
  330|  56.2k|    format = formatsave;
  331|       |
  332|  56.2k|    if (max > STATIC_FREELIST_ENTRIES) {
  ------------------
  |  |   44|  56.2k|#define STATIC_FREELIST_ENTRIES 8
  ------------------
  |  Branch (332:9): [True: 0, False: 56.2k]
  ------------------
  333|      0|        freelist.entries = PyMem_NEW(freelistentry_t, max);
  ------------------
  |  |   82|      0|#define PyMem_NEW(type, n)        PyMem_New(type, (n))
  |  |  ------------------
  |  |  |  |   64|      0|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  |  |  ------------------
  ------------------
  334|      0|        if (freelist.entries == NULL) {
  ------------------
  |  Branch (334:13): [True: 0, False: 0]
  ------------------
  335|      0|            PyErr_NoMemory();
  336|      0|            return 0;
  337|      0|        }
  338|      0|        freelist.entries_malloced = 1;
  339|      0|    }
  340|       |
  341|  56.2k|    if (compat) {
  ------------------
  |  Branch (341:9): [True: 0, False: 56.2k]
  ------------------
  342|      0|        if (max == 0) {
  ------------------
  |  Branch (342:13): [True: 0, False: 0]
  ------------------
  343|      0|            if (compat_args == NULL)
  ------------------
  |  Branch (343:17): [True: 0, False: 0]
  ------------------
  344|      0|                return 1;
  345|      0|            PyErr_Format(PyExc_TypeError,
  346|      0|                         "%.200s%s takes no arguments",
  347|      0|                         fname==NULL ? "function" : fname,
  ------------------
  |  Branch (347:26): [True: 0, False: 0]
  ------------------
  348|      0|                         fname==NULL ? "" : "()");
  ------------------
  |  Branch (348:26): [True: 0, False: 0]
  ------------------
  349|      0|            return cleanreturn(0, &freelist);
  350|      0|        }
  351|      0|        else if (min == 1 && max == 1) {
  ------------------
  |  Branch (351:18): [True: 0, False: 0]
  |  Branch (351:30): [True: 0, False: 0]
  ------------------
  352|      0|            if (compat_args == NULL) {
  ------------------
  |  Branch (352:17): [True: 0, False: 0]
  ------------------
  353|      0|                PyErr_Format(PyExc_TypeError,
  354|      0|                             "%.200s%s takes at least one argument",
  355|      0|                             fname==NULL ? "function" : fname,
  ------------------
  |  Branch (355:30): [True: 0, False: 0]
  ------------------
  356|      0|                             fname==NULL ? "" : "()");
  ------------------
  |  Branch (356:30): [True: 0, False: 0]
  ------------------
  357|      0|                return cleanreturn(0, &freelist);
  358|      0|            }
  359|      0|            msg = convertitem(compat_args, &format, p_va, flags, levels,
  360|      0|                              msgbuf, sizeof(msgbuf), &freelist);
  361|      0|            if (msg == NULL)
  ------------------
  |  Branch (361:17): [True: 0, False: 0]
  ------------------
  362|      0|                return cleanreturn(1, &freelist);
  363|      0|            seterror(levels[0], msg, levels+1, fname, message);
  364|      0|            return cleanreturn(0, &freelist);
  365|      0|        }
  366|      0|        else {
  367|      0|            PyErr_SetString(PyExc_SystemError,
  368|      0|                "old style getargs format uses new features");
  369|      0|            return cleanreturn(0, &freelist);
  370|      0|        }
  371|      0|    }
  372|       |
  373|  56.2k|    if (nargs < min || max < nargs) {
  ------------------
  |  Branch (373:9): [True: 0, False: 56.2k]
  |  Branch (373:24): [True: 0, False: 56.2k]
  ------------------
  374|      0|        if (message == NULL)
  ------------------
  |  Branch (374:13): [True: 0, False: 0]
  ------------------
  375|      0|            PyErr_Format(PyExc_TypeError,
  376|      0|                         "%.150s%s takes %s %d argument%s (%zd given)",
  377|      0|                         fname==NULL ? "function" : fname,
  ------------------
  |  Branch (377:26): [True: 0, False: 0]
  ------------------
  378|      0|                         fname==NULL ? "" : "()",
  ------------------
  |  Branch (378:26): [True: 0, False: 0]
  ------------------
  379|      0|                         min==max ? "exactly"
  ------------------
  |  Branch (379:26): [True: 0, False: 0]
  ------------------
  380|      0|                         : nargs < min ? "at least" : "at most",
  ------------------
  |  Branch (380:28): [True: 0, False: 0]
  ------------------
  381|      0|                         nargs < min ? min : max,
  ------------------
  |  Branch (381:26): [True: 0, False: 0]
  ------------------
  382|      0|                         (nargs < min ? min : max) == 1 ? "" : "s",
  ------------------
  |  Branch (382:26): [True: 0, False: 0]
  |  Branch (382:27): [True: 0, False: 0]
  ------------------
  383|      0|                         nargs);
  384|      0|        else
  385|      0|            PyErr_SetString(PyExc_TypeError, message);
  386|      0|        return cleanreturn(0, &freelist);
  387|      0|    }
  388|       |
  389|   346k|    for (i = 0; i < nargs; i++) {
  ------------------
  |  Branch (389:17): [True: 290k, False: 56.1k]
  ------------------
  390|   290k|        if (*format == '|')
  ------------------
  |  Branch (390:13): [True: 12.5k, False: 277k]
  ------------------
  391|  12.5k|            format++;
  392|   290k|        msg = convertitem(stack[i], &format, p_va,
  393|   290k|                          flags, levels, msgbuf,
  394|   290k|                          sizeof(msgbuf), &freelist);
  395|   290k|        if (msg) {
  ------------------
  |  Branch (395:13): [True: 44, False: 290k]
  ------------------
  396|     44|            seterror(i+1, msg, levels, fname, message);
  397|     44|            return cleanreturn(0, &freelist);
  398|     44|        }
  399|   290k|    }
  400|       |
  401|  56.1k|    if (*format != '\0' && !Py_ISALPHA(*format) &&
  ------------------
  |  |   23|  71.1k|#define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |  163|  14.9k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISALPHA(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
  |  |  ------------------
  |  |  |  |   10|  14.9k|#define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    8|  14.9k|#define PY_CTF_LOWER  0x01
  |  |  |  |  ------------------
  |  |  |  |               #define PY_CTF_ALPHA  (PY_CTF_LOWER|PY_CTF_UPPER)
  |  |  |  |  ------------------
  |  |  |  |  |  |    9|  14.9k|#define PY_CTF_UPPER  0x02
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (401:9): [True: 14.9k, False: 41.2k]
  |  Branch (401:28): [True: 2.39k, False: 12.5k]
  ------------------
  402|  2.39k|        *format != '(' &&
  ------------------
  |  Branch (402:9): [True: 2.39k, False: 0]
  ------------------
  403|  2.39k|        *format != '|' && *format != ':' && *format != ';') {
  ------------------
  |  Branch (403:9): [True: 773, False: 1.62k]
  |  Branch (403:27): [True: 0, False: 773]
  |  Branch (403:45): [True: 0, False: 0]
  ------------------
  404|      0|        PyErr_Format(PyExc_SystemError,
  405|      0|                     "bad format string: %.200s", formatsave);
  406|      0|        return cleanreturn(0, &freelist);
  407|      0|    }
  408|       |
  409|  56.1k|    return cleanreturn(1, &freelist);
  410|  56.1k|}
getargs.c:cleanreturn:
  237|  56.9k|{
  238|  56.9k|    int index;
  239|       |
  240|  56.9k|    if (retval == 0) {
  ------------------
  |  Branch (240:9): [True: 44, False: 56.9k]
  ------------------
  241|       |      /* A failure occurred, therefore execute all of the cleanup
  242|       |         functions.
  243|       |      */
  244|     44|      for (index = 0; index < freelist->first_available; ++index) {
  ------------------
  |  Branch (244:23): [True: 0, False: 44]
  ------------------
  245|      0|          freelist->entries[index].destructor(NULL,
  246|      0|                                              freelist->entries[index].item);
  247|      0|      }
  248|     44|    }
  249|  56.9k|    if (freelist->entries_malloced)
  ------------------
  |  Branch (249:9): [True: 0, False: 56.9k]
  ------------------
  250|      0|        PyMem_Free(freelist->entries);
  251|  56.9k|    return retval;
  252|  56.9k|}
getargs.c:convertitem:
  634|   290k|{
  635|   290k|    const char *msg;
  636|   290k|    const char *format = *p_format;
  637|       |
  638|   290k|    if (*format == '(' /* ')' */) {
  ------------------
  |  Branch (638:9): [True: 0, False: 290k]
  ------------------
  639|      0|        format++;
  640|      0|        msg = converttuple(arg, &format, p_va, flags, levels, msgbuf,
  641|      0|                           bufsize, freelist);
  642|      0|        if (msg == NULL)
  ------------------
  |  Branch (642:13): [True: 0, False: 0]
  ------------------
  643|      0|            format++;
  644|      0|    }
  645|   290k|    else {
  646|   290k|        msg = convertsimple(arg, &format, p_va, flags,
  647|   290k|                            msgbuf, bufsize, freelist);
  648|   290k|        if (msg != NULL)
  ------------------
  |  Branch (648:13): [True: 44, False: 290k]
  ------------------
  649|     44|            levels[0] = 0;
  650|   290k|    }
  651|   290k|    if (msg == NULL)
  ------------------
  |  Branch (651:9): [True: 290k, False: 44]
  ------------------
  652|   290k|        *p_format = format;
  653|   290k|    return msg;
  654|   290k|}
getargs.c:convertsimple:
  714|   290k|{
  715|   290k|#define RETURN_ERR_OCCURRED return msgbuf
  716|       |
  717|   290k|    const char *format = *p_format;
  718|   290k|    char c = *format++;
  719|   290k|    const char *sarg;
  720|       |
  721|   290k|    switch (c) {
  722|       |
  723|      0|    case 'b': { /* unsigned byte -- very short int */
  ------------------
  |  Branch (723:5): [True: 0, False: 290k]
  ------------------
  724|      0|        unsigned char *p = va_arg(*p_va, unsigned char *);
  725|      0|        long ival = PyLong_AsLong(arg);
  726|      0|        if (ival == -1 && PyErr_Occurred())
  ------------------
  |  Branch (726:13): [True: 0, False: 0]
  |  Branch (726:27): [True: 0, False: 0]
  ------------------
  727|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  728|      0|        else if (ival < 0) {
  ------------------
  |  Branch (728:18): [True: 0, False: 0]
  ------------------
  729|      0|            PyErr_SetString(PyExc_OverflowError,
  730|      0|                            "unsigned byte integer is less than minimum");
  731|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  732|      0|        }
  733|      0|        else if (ival > UCHAR_MAX) {
  ------------------
  |  Branch (733:18): [True: 0, False: 0]
  ------------------
  734|      0|            PyErr_SetString(PyExc_OverflowError,
  735|      0|                            "unsigned byte integer is greater than maximum");
  736|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  737|      0|        }
  738|      0|        else
  739|      0|            *p = (unsigned char) ival;
  740|      0|        break;
  741|      0|    }
  742|       |
  743|      0|    case 'B': {/* byte sized bitfield - both signed and unsigned
  ------------------
  |  Branch (743:5): [True: 0, False: 290k]
  ------------------
  744|       |                  values allowed */
  745|      0|        unsigned char *p = va_arg(*p_va, unsigned char *);
  746|      0|        Py_ssize_t bytes = PyLong_AsNativeBytes(arg, p, sizeof(unsigned char),
  747|      0|                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
  ------------------
  |  |   47|      0|#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
  ------------------
  748|      0|                Py_ASNATIVEBYTES_ALLOW_INDEX |
  ------------------
  |  |   50|      0|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  ------------------
  749|      0|                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
  ------------------
  |  |   48|      0|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  750|      0|        if (bytes < 0) {
  ------------------
  |  Branch (750:13): [True: 0, False: 0]
  ------------------
  751|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  752|      0|        }
  753|      0|        if ((size_t)bytes > sizeof(unsigned char)) {
  ------------------
  |  Branch (753:13): [True: 0, False: 0]
  ------------------
  754|      0|            if (PyErr_WarnEx(PyExc_DeprecationWarning,
  ------------------
  |  Branch (754:17): [True: 0, False: 0]
  ------------------
  755|      0|                "integer value out of range", 1) < 0)
  756|      0|            {
  757|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  758|      0|            }
  759|      0|        }
  760|      0|        break;
  761|      0|    }
  762|       |
  763|      0|    case 'h': {/* signed short int */
  ------------------
  |  Branch (763:5): [True: 0, False: 290k]
  ------------------
  764|      0|        short *p = va_arg(*p_va, short *);
  765|      0|        long ival = PyLong_AsLong(arg);
  766|      0|        if (ival == -1 && PyErr_Occurred())
  ------------------
  |  Branch (766:13): [True: 0, False: 0]
  |  Branch (766:27): [True: 0, False: 0]
  ------------------
  767|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  768|      0|        else if (ival < SHRT_MIN) {
  ------------------
  |  Branch (768:18): [True: 0, False: 0]
  ------------------
  769|      0|            PyErr_SetString(PyExc_OverflowError,
  770|      0|                            "signed short integer is less than minimum");
  771|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  772|      0|        }
  773|      0|        else if (ival > SHRT_MAX) {
  ------------------
  |  Branch (773:18): [True: 0, False: 0]
  ------------------
  774|      0|            PyErr_SetString(PyExc_OverflowError,
  775|      0|                            "signed short integer is greater than maximum");
  776|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  777|      0|        }
  778|      0|        else
  779|      0|            *p = (short) ival;
  780|      0|        break;
  781|      0|    }
  782|       |
  783|      0|    case 'H': { /* short int sized bitfield, both signed and
  ------------------
  |  Branch (783:5): [True: 0, False: 290k]
  ------------------
  784|       |                   unsigned allowed */
  785|      0|        unsigned short *p = va_arg(*p_va, unsigned short *);
  786|      0|        Py_ssize_t bytes = PyLong_AsNativeBytes(arg, p, sizeof(unsigned short),
  787|      0|                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
  ------------------
  |  |   47|      0|#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
  ------------------
  788|      0|                Py_ASNATIVEBYTES_ALLOW_INDEX |
  ------------------
  |  |   50|      0|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  ------------------
  789|      0|                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
  ------------------
  |  |   48|      0|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  790|      0|        if (bytes < 0) {
  ------------------
  |  Branch (790:13): [True: 0, False: 0]
  ------------------
  791|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  792|      0|        }
  793|      0|        if ((size_t)bytes > sizeof(unsigned short)) {
  ------------------
  |  Branch (793:13): [True: 0, False: 0]
  ------------------
  794|      0|            if (PyErr_WarnEx(PyExc_DeprecationWarning,
  ------------------
  |  Branch (794:17): [True: 0, False: 0]
  ------------------
  795|      0|                "integer value out of range", 1) < 0)
  796|      0|            {
  797|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  798|      0|            }
  799|      0|        }
  800|      0|        break;
  801|      0|    }
  802|       |
  803|      0|    case 'i': {/* signed int */
  ------------------
  |  Branch (803:5): [True: 0, False: 290k]
  ------------------
  804|      0|        int *p = va_arg(*p_va, int *);
  805|      0|        long ival = PyLong_AsLong(arg);
  806|      0|        if (ival == -1 && PyErr_Occurred())
  ------------------
  |  Branch (806:13): [True: 0, False: 0]
  |  Branch (806:27): [True: 0, False: 0]
  ------------------
  807|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  808|      0|        else if (ival > INT_MAX) {
  ------------------
  |  Branch (808:18): [True: 0, False: 0]
  ------------------
  809|      0|            PyErr_SetString(PyExc_OverflowError,
  810|      0|                            "signed integer is greater than maximum");
  811|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  812|      0|        }
  813|      0|        else if (ival < INT_MIN) {
  ------------------
  |  Branch (813:18): [True: 0, False: 0]
  ------------------
  814|      0|            PyErr_SetString(PyExc_OverflowError,
  815|      0|                            "signed integer is less than minimum");
  816|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  817|      0|        }
  818|      0|        else
  819|      0|            *p = ival;
  820|      0|        break;
  821|      0|    }
  822|       |
  823|      0|    case 'I': { /* int sized bitfield, both signed and
  ------------------
  |  Branch (823:5): [True: 0, False: 290k]
  ------------------
  824|       |                   unsigned allowed */
  825|      0|        unsigned int *p = va_arg(*p_va, unsigned int *);
  826|      0|        Py_ssize_t bytes = PyLong_AsNativeBytes(arg, p, sizeof(unsigned int),
  827|      0|                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
  ------------------
  |  |   47|      0|#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
  ------------------
  828|      0|                Py_ASNATIVEBYTES_ALLOW_INDEX |
  ------------------
  |  |   50|      0|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  ------------------
  829|      0|                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
  ------------------
  |  |   48|      0|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  830|      0|        if (bytes < 0) {
  ------------------
  |  Branch (830:13): [True: 0, False: 0]
  ------------------
  831|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  832|      0|        }
  833|      0|        if ((size_t)bytes > sizeof(unsigned int)) {
  ------------------
  |  Branch (833:13): [True: 0, False: 0]
  ------------------
  834|      0|            if (PyErr_WarnEx(PyExc_DeprecationWarning,
  ------------------
  |  Branch (834:17): [True: 0, False: 0]
  ------------------
  835|      0|                "integer value out of range", 1) < 0)
  836|      0|            {
  837|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  838|      0|            }
  839|      0|        }
  840|      0|        break;
  841|      0|    }
  842|       |
  843|  82.3k|    case 'n': /* Py_ssize_t */
  ------------------
  |  Branch (843:5): [True: 82.3k, False: 207k]
  ------------------
  844|  82.3k|    {
  845|  82.3k|        PyObject *iobj;
  846|  82.3k|        Py_ssize_t *p = va_arg(*p_va, Py_ssize_t *);
  847|  82.3k|        Py_ssize_t ival = -1;
  848|  82.3k|        iobj = _PyNumber_Index(arg);
  849|  82.3k|        if (iobj != NULL) {
  ------------------
  |  Branch (849:13): [True: 82.3k, False: 0]
  ------------------
  850|  82.3k|            ival = PyLong_AsSsize_t(iobj);
  851|  82.3k|            Py_DECREF(iobj);
  ------------------
  |  |  430|  82.3k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  82.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  82.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  852|  82.3k|        }
  853|  82.3k|        if (ival == -1 && PyErr_Occurred())
  ------------------
  |  Branch (853:13): [True: 44, False: 82.3k]
  |  Branch (853:27): [True: 44, False: 0]
  ------------------
  854|     44|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|     44|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  855|  82.3k|        *p = ival;
  856|  82.3k|        break;
  857|  82.3k|    }
  858|      0|    case 'l': {/* long int */
  ------------------
  |  Branch (858:5): [True: 0, False: 290k]
  ------------------
  859|      0|        long *p = va_arg(*p_va, long *);
  860|      0|        long ival = PyLong_AsLong(arg);
  861|      0|        if (ival == -1 && PyErr_Occurred())
  ------------------
  |  Branch (861:13): [True: 0, False: 0]
  |  Branch (861:27): [True: 0, False: 0]
  ------------------
  862|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  863|      0|        else
  864|      0|            *p = ival;
  865|      0|        break;
  866|      0|    }
  867|       |
  868|      0|    case 'k': { /* long sized bitfield */
  ------------------
  |  Branch (868:5): [True: 0, False: 290k]
  ------------------
  869|      0|        unsigned long *p = va_arg(*p_va, unsigned long *);
  870|      0|        if (!PyIndex_Check(arg)) {
  ------------------
  |  Branch (870:13): [True: 0, False: 0]
  ------------------
  871|      0|            return converterr("int", arg, msgbuf, bufsize);
  872|      0|        }
  873|      0|        Py_ssize_t bytes = PyLong_AsNativeBytes(arg, p, sizeof(unsigned long),
  874|      0|                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
  ------------------
  |  |   47|      0|#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
  ------------------
  875|      0|                Py_ASNATIVEBYTES_ALLOW_INDEX |
  ------------------
  |  |   50|      0|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  ------------------
  876|      0|                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
  ------------------
  |  |   48|      0|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  877|      0|        if (bytes < 0) {
  ------------------
  |  Branch (877:13): [True: 0, False: 0]
  ------------------
  878|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  879|      0|        }
  880|      0|        if ((size_t)bytes > sizeof(unsigned long)) {
  ------------------
  |  Branch (880:13): [True: 0, False: 0]
  ------------------
  881|      0|            if (PyErr_WarnEx(PyExc_DeprecationWarning,
  ------------------
  |  Branch (881:17): [True: 0, False: 0]
  ------------------
  882|      0|                "integer value out of range", 1) < 0)
  883|      0|            {
  884|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  885|      0|            }
  886|      0|        }
  887|      0|        break;
  888|      0|    }
  889|       |
  890|      0|    case 'L': {/* long long */
  ------------------
  |  Branch (890:5): [True: 0, False: 290k]
  ------------------
  891|      0|        long long *p = va_arg( *p_va, long long * );
  892|      0|        long long ival = PyLong_AsLongLong(arg);
  893|      0|        if (ival == (long long)-1 && PyErr_Occurred())
  ------------------
  |  Branch (893:13): [True: 0, False: 0]
  |  Branch (893:38): [True: 0, False: 0]
  ------------------
  894|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  895|      0|        else
  896|      0|            *p = ival;
  897|      0|        break;
  898|      0|    }
  899|       |
  900|      0|    case 'K': { /* long long sized bitfield */
  ------------------
  |  Branch (900:5): [True: 0, False: 290k]
  ------------------
  901|      0|        unsigned long long *p = va_arg(*p_va, unsigned long long *);
  902|      0|        if (!PyIndex_Check(arg)) {
  ------------------
  |  Branch (902:13): [True: 0, False: 0]
  ------------------
  903|      0|            return converterr("int", arg, msgbuf, bufsize);
  904|      0|        }
  905|      0|        Py_ssize_t bytes = PyLong_AsNativeBytes(arg, p, sizeof(unsigned long long),
  906|      0|                Py_ASNATIVEBYTES_NATIVE_ENDIAN |
  ------------------
  |  |   47|      0|#define Py_ASNATIVEBYTES_NATIVE_ENDIAN 3
  ------------------
  907|      0|                Py_ASNATIVEBYTES_ALLOW_INDEX |
  ------------------
  |  |   50|      0|#define Py_ASNATIVEBYTES_ALLOW_INDEX 16
  ------------------
  908|      0|                Py_ASNATIVEBYTES_UNSIGNED_BUFFER);
  ------------------
  |  |   48|      0|#define Py_ASNATIVEBYTES_UNSIGNED_BUFFER 4
  ------------------
  909|      0|        if (bytes < 0) {
  ------------------
  |  Branch (909:13): [True: 0, False: 0]
  ------------------
  910|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  911|      0|        }
  912|      0|        if ((size_t)bytes > sizeof(unsigned long long)) {
  ------------------
  |  Branch (912:13): [True: 0, False: 0]
  ------------------
  913|      0|            if (PyErr_WarnEx(PyExc_DeprecationWarning,
  ------------------
  |  Branch (913:17): [True: 0, False: 0]
  ------------------
  914|      0|                "integer value out of range", 1) < 0)
  915|      0|            {
  916|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  917|      0|            }
  918|      0|        }
  919|      0|        break;
  920|      0|    }
  921|       |
  922|      0|    case 'f': {/* float */
  ------------------
  |  Branch (922:5): [True: 0, False: 290k]
  ------------------
  923|      0|        float *p = va_arg(*p_va, float *);
  924|      0|        double dval = PyFloat_AsDouble(arg);
  925|      0|        if (dval == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (925:13): [True: 0, False: 0]
  |  Branch (925:29): [True: 0, False: 0]
  ------------------
  926|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  927|      0|        else
  928|      0|            *p = (float) dval;
  929|      0|        break;
  930|      0|    }
  931|       |
  932|      0|    case 'd': {/* double */
  ------------------
  |  Branch (932:5): [True: 0, False: 290k]
  ------------------
  933|      0|        double *p = va_arg(*p_va, double *);
  934|      0|        double dval = PyFloat_AsDouble(arg);
  935|      0|        if (dval == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (935:13): [True: 0, False: 0]
  |  Branch (935:29): [True: 0, False: 0]
  ------------------
  936|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  937|      0|        else
  938|      0|            *p = dval;
  939|      0|        break;
  940|      0|    }
  941|       |
  942|      0|    case 'D': {/* complex double */
  ------------------
  |  Branch (942:5): [True: 0, False: 290k]
  ------------------
  943|      0|        Py_complex *p = va_arg(*p_va, Py_complex *);
  944|      0|        Py_complex cval;
  945|      0|        cval = PyComplex_AsCComplex(arg);
  946|      0|        if (PyErr_Occurred())
  ------------------
  |  Branch (946:13): [True: 0, False: 0]
  ------------------
  947|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
  948|      0|        else
  949|      0|            *p = cval;
  950|      0|        break;
  951|      0|    }
  952|       |
  953|      0|    case 'c': {/* char */
  ------------------
  |  Branch (953:5): [True: 0, False: 290k]
  ------------------
  954|      0|        char *p = va_arg(*p_va, char *);
  955|      0|        if (PyBytes_Check(arg)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  956|      0|            if (PyBytes_GET_SIZE(arg) != 1) {
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (956:17): [True: 0, False: 0]
  ------------------
  957|      0|                return convertcharerr("a byte string of length 1",
  958|      0|                                      "a bytes object", PyBytes_GET_SIZE(arg),
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|      0|                                      msgbuf, bufsize);
  960|      0|            }
  961|      0|            *p = PyBytes_AS_STRING(arg)[0];
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  962|      0|        }
  963|      0|        else if (PyByteArray_Check(arg)) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  964|      0|            if (PyByteArray_GET_SIZE(arg) != 1) {
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (964:17): [True: 0, False: 0]
  ------------------
  965|      0|                return convertcharerr("a byte string of length 1",
  966|      0|                                      "a bytearray object", PyByteArray_GET_SIZE(arg),
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|      0|                                      msgbuf, bufsize);
  968|      0|            }
  969|      0|            *p = PyByteArray_AS_STRING(arg)[0];
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  970|      0|        }
  971|      0|        else
  972|      0|            return converterr("a byte string of length 1", arg, msgbuf, bufsize);
  973|      0|        break;
  974|      0|    }
  975|       |
  976|      0|    case 'C': {/* unicode char */
  ------------------
  |  Branch (976:5): [True: 0, False: 290k]
  ------------------
  977|      0|        int *p = va_arg(*p_va, int *);
  978|      0|        int kind;
  979|      0|        const void *data;
  980|       |
  981|      0|        if (!PyUnicode_Check(arg))
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (981:13): [True: 0, False: 0]
  ------------------
  982|      0|            return converterr("a unicode character", arg, msgbuf, bufsize);
  983|       |
  984|      0|        if (PyUnicode_GET_LENGTH(arg) != 1) {
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (984:13): [True: 0, False: 0]
  ------------------
  985|      0|            return convertcharerr("a unicode character",
  986|      0|                                  "a string", PyUnicode_GET_LENGTH(arg),
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  987|      0|                                  msgbuf, bufsize);
  988|      0|        }
  989|       |
  990|      0|        kind = PyUnicode_KIND(arg);
  ------------------
  |  |  258|      0|#define PyUnicode_KIND(op) _Py_RVALUE(_PyASCIIObject_CAST(op)->state.kind)
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  991|      0|        data = PyUnicode_DATA(arg);
  ------------------
  |  |  284|      0|#define PyUnicode_DATA(op) _PyUnicode_DATA(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  992|      0|        *p = PyUnicode_READ(kind, data, 0);
  ------------------
  |  |  354|      0|    PyUnicode_READ(_Py_STATIC_CAST(int, kind), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  355|      0|                   _Py_STATIC_CAST(const void*, data), \
  |  |  ------------------
  |  |  |  |   34|      0|#  define _Py_STATIC_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  |  |  356|      0|                   (index))
  ------------------
  993|      0|        break;
  994|      0|    }
  995|       |
  996|      2|    case 'p': {/* boolean *p*redicate */
  ------------------
  |  Branch (996:5): [True: 2, False: 290k]
  ------------------
  997|      2|        int *p = va_arg(*p_va, int *);
  998|      2|        int val = PyObject_IsTrue(arg);
  999|      2|        if (val > 0)
  ------------------
  |  Branch (999:13): [True: 0, False: 2]
  ------------------
 1000|      0|            *p = 1;
 1001|      2|        else if (val == 0)
  ------------------
  |  Branch (1001:18): [True: 2, False: 0]
  ------------------
 1002|      2|            *p = 0;
 1003|      0|        else
 1004|      0|            RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
 1005|      2|        break;
 1006|      2|    }
 1007|       |
 1008|       |    /* XXX WAAAAH!  's', 'y', 'z', 'u', 'Z', 'e', 'w' codes all
 1009|       |       need to be cleaned up! */
 1010|       |
 1011|      2|    case 'y': {/* any bytes-like object */
  ------------------
  |  Branch (1011:5): [True: 0, False: 290k]
  ------------------
 1012|      0|        void **p = (void **)va_arg(*p_va, char **);
 1013|      0|        const char *buf;
 1014|      0|        Py_ssize_t count;
 1015|      0|        if (*format == '*') {
  ------------------
  |  Branch (1015:13): [True: 0, False: 0]
  ------------------
 1016|      0|            if (getbuffer(arg, (Py_buffer*)p, &buf) < 0)
  ------------------
  |  Branch (1016:17): [True: 0, False: 0]
  ------------------
 1017|      0|                return converterr(buf, arg, msgbuf, bufsize);
 1018|      0|            format++;
 1019|      0|            if (addcleanup(p, freelist, cleanup_buffer)) {
  ------------------
  |  Branch (1019:17): [True: 0, False: 0]
  ------------------
 1020|      0|                return converterr(
 1021|      0|                    "(cleanup problem)",
 1022|      0|                    arg, msgbuf, bufsize);
 1023|      0|            }
 1024|      0|            break;
 1025|      0|        }
 1026|      0|        count = convertbuffer(arg, (const void **)p, &buf);
 1027|      0|        if (count < 0)
  ------------------
  |  Branch (1027:13): [True: 0, False: 0]
  ------------------
 1028|      0|            return converterr(buf, arg, msgbuf, bufsize);
 1029|      0|        if (*format == '#') {
  ------------------
  |  Branch (1029:13): [True: 0, False: 0]
  ------------------
 1030|      0|            Py_ssize_t *psize = va_arg(*p_va, Py_ssize_t*);
 1031|      0|            *psize = count;
 1032|      0|            format++;
 1033|      0|        } else {
 1034|      0|            if (strlen(*p) != (size_t)count) {
  ------------------
  |  Branch (1034:17): [True: 0, False: 0]
  ------------------
 1035|      0|                PyErr_SetString(PyExc_ValueError, "embedded null byte");
 1036|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
 1037|      0|            }
 1038|      0|        }
 1039|      0|        break;
 1040|      0|    }
 1041|       |
 1042|      0|    case 's': /* text string or bytes-like object */
  ------------------
  |  Branch (1042:5): [True: 0, False: 290k]
  ------------------
 1043|      0|    case 'z': /* text string, bytes-like object or None */
  ------------------
  |  Branch (1043:5): [True: 0, False: 290k]
  ------------------
 1044|      0|    {
 1045|      0|        if (*format == '*') {
  ------------------
  |  Branch (1045:13): [True: 0, False: 0]
  ------------------
 1046|       |            /* "s*" or "z*" */
 1047|      0|            Py_buffer *p = (Py_buffer *)va_arg(*p_va, Py_buffer *);
 1048|       |
 1049|      0|            if (c == 'z' && arg == Py_None)
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1049:17): [True: 0, False: 0]
  |  Branch (1049:29): [True: 0, False: 0]
  ------------------
 1050|      0|                PyBuffer_FillInfo(p, NULL, NULL, 0, 1, 0);
 1051|      0|            else if (PyUnicode_Check(arg)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1052|      0|                Py_ssize_t len;
 1053|      0|                sarg = PyUnicode_AsUTF8AndSize(arg, &len);
 1054|      0|                if (sarg == NULL)
  ------------------
  |  Branch (1054:21): [True: 0, False: 0]
  ------------------
 1055|      0|                    return converterr(CONV_UNICODE,
  ------------------
  |  |  700|      0|#define CONV_UNICODE "(unicode conversion error)"
  ------------------
 1056|      0|                                      arg, msgbuf, bufsize);
 1057|      0|                PyBuffer_FillInfo(p, arg, (void *)sarg, len, 1, 0);
 1058|      0|            }
 1059|      0|            else { /* any bytes-like object */
 1060|      0|                const char *buf;
 1061|      0|                if (getbuffer(arg, p, &buf) < 0)
  ------------------
  |  Branch (1061:21): [True: 0, False: 0]
  ------------------
 1062|      0|                    return converterr(buf, arg, msgbuf, bufsize);
 1063|      0|            }
 1064|      0|            if (addcleanup(p, freelist, cleanup_buffer)) {
  ------------------
  |  Branch (1064:17): [True: 0, False: 0]
  ------------------
 1065|      0|                return converterr(
 1066|      0|                    "(cleanup problem)",
 1067|      0|                    arg, msgbuf, bufsize);
 1068|      0|            }
 1069|      0|            format++;
 1070|      0|        } else if (*format == '#') { /* a string or read-only bytes-like object */
  ------------------
  |  Branch (1070:20): [True: 0, False: 0]
  ------------------
 1071|       |            /* "s#" or "z#" */
 1072|      0|            const void **p = (const void **)va_arg(*p_va, const char **);
 1073|      0|            Py_ssize_t *psize = va_arg(*p_va, Py_ssize_t*);
 1074|       |
 1075|      0|            if (c == 'z' && arg == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1075:17): [True: 0, False: 0]
  |  Branch (1075:29): [True: 0, False: 0]
  ------------------
 1076|      0|                *p = NULL;
 1077|      0|                *psize = 0;
 1078|      0|            }
 1079|      0|            else if (PyUnicode_Check(arg)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1080|      0|                Py_ssize_t len;
 1081|      0|                sarg = PyUnicode_AsUTF8AndSize(arg, &len);
 1082|      0|                if (sarg == NULL)
  ------------------
  |  Branch (1082:21): [True: 0, False: 0]
  ------------------
 1083|      0|                    return converterr(CONV_UNICODE,
  ------------------
  |  |  700|      0|#define CONV_UNICODE "(unicode conversion error)"
  ------------------
 1084|      0|                                      arg, msgbuf, bufsize);
 1085|      0|                *p = sarg;
 1086|      0|                *psize = len;
 1087|      0|            }
 1088|      0|            else { /* read-only bytes-like object */
 1089|       |                /* XXX Really? */
 1090|      0|                const char *buf;
 1091|      0|                Py_ssize_t count = convertbuffer(arg, p, &buf);
 1092|      0|                if (count < 0)
  ------------------
  |  Branch (1092:21): [True: 0, False: 0]
  ------------------
 1093|      0|                    return converterr(buf, arg, msgbuf, bufsize);
 1094|      0|                *psize = count;
 1095|      0|            }
 1096|      0|            format++;
 1097|      0|        } else {
 1098|       |            /* "s" or "z" */
 1099|      0|            const char **p = va_arg(*p_va, const char **);
 1100|      0|            Py_ssize_t len;
 1101|      0|            sarg = NULL;
 1102|       |
 1103|      0|            if (c == 'z' && arg == Py_None)
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1103:17): [True: 0, False: 0]
  |  Branch (1103:29): [True: 0, False: 0]
  ------------------
 1104|      0|                *p = NULL;
 1105|      0|            else if (PyUnicode_Check(arg)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|      0|                sarg = PyUnicode_AsUTF8AndSize(arg, &len);
 1107|      0|                if (sarg == NULL)
  ------------------
  |  Branch (1107:21): [True: 0, False: 0]
  ------------------
 1108|      0|                    return converterr(CONV_UNICODE,
  ------------------
  |  |  700|      0|#define CONV_UNICODE "(unicode conversion error)"
  ------------------
 1109|      0|                                      arg, msgbuf, bufsize);
 1110|      0|                if (strlen(sarg) != (size_t)len) {
  ------------------
  |  Branch (1110:21): [True: 0, False: 0]
  ------------------
 1111|      0|                    PyErr_SetString(PyExc_ValueError, "embedded null character");
 1112|      0|                    RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
 1113|      0|                }
 1114|      0|                *p = sarg;
 1115|      0|            }
 1116|      0|            else
 1117|      0|                return converterr(c == 'z' ? "str or None" : "str",
  ------------------
  |  Branch (1117:35): [True: 0, False: 0]
  ------------------
 1118|      0|                                  arg, msgbuf, bufsize);
 1119|      0|        }
 1120|      0|        break;
 1121|      0|    }
 1122|       |
 1123|      0|    case 'e': {/* encoded string */
  ------------------
  |  Branch (1123:5): [True: 0, False: 290k]
  ------------------
 1124|      0|        char **buffer;
 1125|      0|        const char *encoding;
 1126|      0|        PyObject *s;
 1127|      0|        int recode_strings;
 1128|      0|        Py_ssize_t size;
 1129|      0|        const char *ptr;
 1130|       |
 1131|       |        /* Get 'e' parameter: the encoding name */
 1132|      0|        encoding = (const char *)va_arg(*p_va, const char *);
 1133|      0|        if (encoding == NULL)
  ------------------
  |  Branch (1133:13): [True: 0, False: 0]
  ------------------
 1134|      0|            encoding = PyUnicode_GetDefaultEncoding();
 1135|       |
 1136|       |        /* Get output buffer parameter:
 1137|       |           's' (recode all objects via Unicode) or
 1138|       |           't' (only recode non-string objects)
 1139|       |        */
 1140|      0|        if (*format == 's')
  ------------------
  |  Branch (1140:13): [True: 0, False: 0]
  ------------------
 1141|      0|            recode_strings = 1;
 1142|      0|        else if (*format == 't')
  ------------------
  |  Branch (1142:18): [True: 0, False: 0]
  ------------------
 1143|      0|            recode_strings = 0;
 1144|      0|        else
 1145|      0|            return converterr(
 1146|      0|                "(unknown parser marker combination)",
 1147|      0|                arg, msgbuf, bufsize);
 1148|      0|        buffer = (char **)va_arg(*p_va, char **);
 1149|      0|        format++;
 1150|      0|        if (buffer == NULL)
  ------------------
  |  Branch (1150:13): [True: 0, False: 0]
  ------------------
 1151|      0|            return converterr("(buffer is NULL)",
 1152|      0|                              arg, msgbuf, bufsize);
 1153|       |
 1154|       |        /* Encode object */
 1155|      0|        if (!recode_strings &&
  ------------------
  |  Branch (1155:13): [True: 0, False: 0]
  ------------------
 1156|      0|            (PyBytes_Check(arg) || PyByteArray_Check(arg))) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          (PyBytes_Check(arg) || PyByteArray_Check(arg))) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|      0|            s = Py_NewRef(arg);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1158|      0|            if (PyBytes_Check(arg)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|      0|                size = PyBytes_GET_SIZE(s);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|      0|                ptr = PyBytes_AS_STRING(s);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|      0|            }
 1162|      0|            else {
 1163|      0|                size = PyByteArray_GET_SIZE(s);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1164|      0|                ptr = PyByteArray_AS_STRING(s);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1165|      0|            }
 1166|      0|        }
 1167|      0|        else if (PyUnicode_Check(arg)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1168|       |            /* Encode object; use default error handling */
 1169|      0|            s = PyUnicode_AsEncodedString(arg,
 1170|      0|                                          encoding,
 1171|      0|                                          NULL);
 1172|      0|            if (s == NULL)
  ------------------
  |  Branch (1172:17): [True: 0, False: 0]
  ------------------
 1173|      0|                return converterr("(encoding failed)",
 1174|      0|                                  arg, msgbuf, bufsize);
 1175|      0|            assert(PyBytes_Check(s));
  ------------------
  |  Branch (1175:13): [True: 0, False: 0]
  ------------------
 1176|      0|            size = PyBytes_GET_SIZE(s);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1177|      0|            ptr = PyBytes_AS_STRING(s);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1178|      0|            if (ptr == NULL)
  ------------------
  |  Branch (1178:17): [True: 0, False: 0]
  ------------------
 1179|      0|                ptr = "";
 1180|      0|        }
 1181|      0|        else {
 1182|      0|            return converterr(
 1183|      0|                recode_strings ? "str" : "str, bytes or bytearray",
  ------------------
  |  Branch (1183:17): [True: 0, False: 0]
  ------------------
 1184|      0|                arg, msgbuf, bufsize);
 1185|      0|        }
 1186|       |
 1187|       |        /* Write output; output is guaranteed to be 0-terminated */
 1188|      0|        if (*format == '#') {
  ------------------
  |  Branch (1188:13): [True: 0, False: 0]
  ------------------
 1189|       |            /* Using buffer length parameter '#':
 1190|       |
 1191|       |               - if *buffer is NULL, a new buffer of the
 1192|       |               needed size is allocated and the data
 1193|       |               copied into it; *buffer is updated to point
 1194|       |               to the new buffer; the caller is
 1195|       |               responsible for PyMem_Free()ing it after
 1196|       |               usage
 1197|       |
 1198|       |               - if *buffer is not NULL, the data is
 1199|       |               copied to *buffer; *buffer_len has to be
 1200|       |               set to the size of the buffer on input;
 1201|       |               buffer overflow is signalled with an error;
 1202|       |               buffer has to provide enough room for the
 1203|       |               encoded string plus the trailing 0-byte
 1204|       |
 1205|       |               - in both cases, *buffer_len is updated to
 1206|       |               the size of the buffer /excluding/ the
 1207|       |               trailing 0-byte
 1208|       |
 1209|       |            */
 1210|      0|            Py_ssize_t *psize = va_arg(*p_va, Py_ssize_t*);
 1211|       |
 1212|      0|            format++;
 1213|      0|            if (psize == NULL) {
  ------------------
  |  Branch (1213:17): [True: 0, False: 0]
  ------------------
 1214|      0|                Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1215|      0|                return converterr(
 1216|      0|                    "(buffer_len is NULL)",
 1217|      0|                    arg, msgbuf, bufsize);
 1218|      0|            }
 1219|      0|            if (*buffer == NULL) {
  ------------------
  |  Branch (1219:17): [True: 0, False: 0]
  ------------------
 1220|      0|                *buffer = PyMem_NEW(char, size + 1);
  ------------------
  |  |   82|      0|#define PyMem_NEW(type, n)        PyMem_New(type, (n))
  |  |  ------------------
  |  |  |  |   64|      0|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  |  |  ------------------
  ------------------
 1221|      0|                if (*buffer == NULL) {
  ------------------
  |  Branch (1221:21): [True: 0, False: 0]
  ------------------
 1222|      0|                    Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1223|      0|                    PyErr_NoMemory();
 1224|      0|                    RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
 1225|      0|                }
 1226|      0|                if (addcleanup(buffer, freelist, cleanup_ptr)) {
  ------------------
  |  Branch (1226:21): [True: 0, False: 0]
  ------------------
 1227|      0|                    Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1228|      0|                    return converterr(
 1229|      0|                        "(cleanup problem)",
 1230|      0|                        arg, msgbuf, bufsize);
 1231|      0|                }
 1232|      0|            } else {
 1233|      0|                if (size + 1 > *psize) {
  ------------------
  |  Branch (1233:21): [True: 0, False: 0]
  ------------------
 1234|      0|                    Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1235|      0|                    PyErr_Format(PyExc_ValueError,
 1236|      0|                                 "encoded string too long "
 1237|      0|                                 "(%zd, maximum length %zd)",
 1238|      0|                                 (Py_ssize_t)size, (Py_ssize_t)(*psize - 1));
 1239|      0|                    RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
 1240|      0|                }
 1241|      0|            }
 1242|      0|            memcpy(*buffer, ptr, size+1);
 1243|       |
 1244|      0|            *psize = size;
 1245|      0|        }
 1246|      0|        else {
 1247|       |            /* Using a 0-terminated buffer:
 1248|       |
 1249|       |               - the encoded string has to be 0-terminated
 1250|       |               for this variant to work; if it is not, an
 1251|       |               error raised
 1252|       |
 1253|       |               - a new buffer of the needed size is
 1254|       |               allocated and the data copied into it;
 1255|       |               *buffer is updated to point to the new
 1256|       |               buffer; the caller is responsible for
 1257|       |               PyMem_Free()ing it after usage
 1258|       |
 1259|       |            */
 1260|      0|            if ((Py_ssize_t)strlen(ptr) != size) {
  ------------------
  |  Branch (1260:17): [True: 0, False: 0]
  ------------------
 1261|      0|                Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1262|      0|                return converterr(
 1263|      0|                    "encoded string without null bytes",
 1264|      0|                    arg, msgbuf, bufsize);
 1265|      0|            }
 1266|      0|            *buffer = PyMem_NEW(char, size + 1);
  ------------------
  |  |   82|      0|#define PyMem_NEW(type, n)        PyMem_New(type, (n))
  |  |  ------------------
  |  |  |  |   64|      0|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  |  |  ------------------
  ------------------
 1267|      0|            if (*buffer == NULL) {
  ------------------
  |  Branch (1267:17): [True: 0, False: 0]
  ------------------
 1268|      0|                Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1269|      0|                PyErr_NoMemory();
 1270|      0|                RETURN_ERR_OCCURRED;
  ------------------
  |  |  715|      0|#define RETURN_ERR_OCCURRED return msgbuf
  ------------------
 1271|      0|            }
 1272|      0|            if (addcleanup(buffer, freelist, cleanup_ptr)) {
  ------------------
  |  Branch (1272:17): [True: 0, False: 0]
  ------------------
 1273|      0|                Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1274|      0|                return converterr("(cleanup problem)",
 1275|      0|                                arg, msgbuf, bufsize);
 1276|      0|            }
 1277|      0|            memcpy(*buffer, ptr, size+1);
 1278|      0|        }
 1279|      0|        Py_DECREF(s);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1280|      0|        break;
 1281|      0|    }
 1282|       |
 1283|      0|    case 'S': { /* PyBytes object */
  ------------------
  |  Branch (1283:5): [True: 0, False: 290k]
  ------------------
 1284|      0|        PyObject **p = va_arg(*p_va, PyObject **);
 1285|      0|        if (PyBytes_Check(arg))
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1286|      0|            *p = arg;
 1287|      0|        else
 1288|      0|            return converterr("bytes", arg, msgbuf, bufsize);
 1289|      0|        break;
 1290|      0|    }
 1291|       |
 1292|      0|    case 'Y': { /* PyByteArray object */
  ------------------
  |  Branch (1292:5): [True: 0, False: 290k]
  ------------------
 1293|      0|        PyObject **p = va_arg(*p_va, PyObject **);
 1294|      0|        if (PyByteArray_Check(arg))
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1295|      0|            *p = arg;
 1296|      0|        else
 1297|      0|            return converterr("bytearray", arg, msgbuf, bufsize);
 1298|      0|        break;
 1299|      0|    }
 1300|       |
 1301|   119k|    case 'U': { /* PyUnicode object */
  ------------------
  |  Branch (1301:5): [True: 119k, False: 171k]
  ------------------
 1302|   119k|        PyObject **p = va_arg(*p_va, PyObject **);
 1303|   119k|        if (PyUnicode_Check(arg)) {
  ------------------
  |  |  103|   119k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   119k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 119k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|   119k|            *p = arg;
 1305|   119k|        }
 1306|      0|        else
 1307|      0|            return converterr("str", arg, msgbuf, bufsize);
 1308|   119k|        break;
 1309|   119k|    }
 1310|       |
 1311|   119k|    case 'O': { /* object */
  ------------------
  |  Branch (1311:5): [True: 88.6k, False: 201k]
  ------------------
 1312|  88.6k|        PyTypeObject *type;
 1313|  88.6k|        PyObject **p;
 1314|  88.6k|        if (*format == '!') {
  ------------------
  |  Branch (1314:13): [True: 773, False: 87.8k]
  ------------------
 1315|    773|            type = va_arg(*p_va, PyTypeObject*);
 1316|    773|            p = va_arg(*p_va, PyObject **);
 1317|    773|            format++;
 1318|    773|            if (PyType_IsSubtype(Py_TYPE(arg), type))
  ------------------
  |  |  213|    773|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    773|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    773|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1318:17): [True: 773, False: 0]
  ------------------
 1319|    773|                *p = arg;
 1320|      0|            else
 1321|      0|                return converterr(type->tp_name, arg, msgbuf, bufsize);
 1322|       |
 1323|    773|        }
 1324|  87.8k|        else if (*format == '&') {
  ------------------
  |  Branch (1324:18): [True: 0, False: 87.8k]
  ------------------
 1325|      0|            typedef int (*converter)(PyObject *, void *);
 1326|      0|            converter convert = va_arg(*p_va, converter);
 1327|      0|            void *addr = va_arg(*p_va, void *);
 1328|      0|            int res;
 1329|      0|            format++;
 1330|      0|            if (! (res = (*convert)(arg, addr)))
  ------------------
  |  Branch (1330:17): [True: 0, False: 0]
  ------------------
 1331|      0|                return converterr("(unspecified)",
 1332|      0|                                  arg, msgbuf, bufsize);
 1333|      0|            if (res == Py_CLEANUP_SUPPORTED &&
  ------------------
  |  |   57|      0|#define Py_CLEANUP_SUPPORTED 0x20000
  ------------------
  |  Branch (1333:17): [True: 0, False: 0]
  ------------------
 1334|      0|                addcleanup(addr, freelist, convert) == -1)
  ------------------
  |  Branch (1334:17): [True: 0, False: 0]
  ------------------
 1335|      0|                return converterr("(cleanup problem)",
 1336|      0|                                arg, msgbuf, bufsize);
 1337|      0|        }
 1338|  87.8k|        else {
 1339|  87.8k|            p = va_arg(*p_va, PyObject **);
 1340|  87.8k|            *p = arg;
 1341|  87.8k|        }
 1342|  88.6k|        break;
 1343|  88.6k|    }
 1344|       |
 1345|       |
 1346|  88.6k|    case 'w': { /* "w*": memory buffer, read-write access */
  ------------------
  |  Branch (1346:5): [True: 0, False: 290k]
  ------------------
 1347|      0|        void **p = va_arg(*p_va, void **);
 1348|       |
 1349|      0|        if (*format != '*')
  ------------------
  |  Branch (1349:13): [True: 0, False: 0]
  ------------------
 1350|      0|            return converterr(
 1351|      0|                "(invalid use of 'w' format character)",
 1352|      0|                arg, msgbuf, bufsize);
 1353|      0|        format++;
 1354|       |
 1355|       |        /* Caller is interested in Py_buffer, and the object supports it
 1356|       |           directly. The request implicitly asks for PyBUF_SIMPLE, so the
 1357|       |           result is C-contiguous with format 'B'. */
 1358|      0|        if (PyObject_GetBuffer(arg, (Py_buffer*)p, PyBUF_WRITABLE) < 0) {
  ------------------
  |  |  109|      0|#define PyBUF_WRITABLE 0x0001
  ------------------
  |  Branch (1358:13): [True: 0, False: 0]
  ------------------
 1359|      0|            PyErr_Clear();
 1360|      0|            return converterr("read-write bytes-like object",
 1361|      0|                              arg, msgbuf, bufsize);
 1362|      0|        }
 1363|      0|        assert(PyBuffer_IsContiguous((Py_buffer *)p, 'C'));
  ------------------
  |  Branch (1363:9): [True: 0, False: 0]
  ------------------
 1364|      0|        if (addcleanup(p, freelist, cleanup_buffer)) {
  ------------------
  |  Branch (1364:13): [True: 0, False: 0]
  ------------------
 1365|      0|            return converterr(
 1366|      0|                "(cleanup problem)",
 1367|      0|                arg, msgbuf, bufsize);
 1368|      0|        }
 1369|      0|        break;
 1370|      0|    }
 1371|       |
 1372|      0|    default:
  ------------------
  |  Branch (1372:5): [True: 0, False: 290k]
  ------------------
 1373|      0|        return converterr("(impossible<bad format char>)", arg, msgbuf, bufsize);
 1374|       |
 1375|   290k|    }
 1376|       |
 1377|   290k|    *p_format = format;
 1378|   290k|    return NULL;
 1379|       |
 1380|   290k|#undef RETURN_ERR_OCCURRED
 1381|   290k|}
getargs.c:seterror:
  442|     44|{
  443|     44|    char buf[512];
  444|     44|    int i;
  445|     44|    char *p = buf;
  446|       |
  447|     44|    if (PyErr_Occurred())
  ------------------
  |  Branch (447:9): [True: 44, False: 0]
  ------------------
  448|     44|        return;
  449|      0|    else if (message == NULL) {
  ------------------
  |  Branch (449:14): [True: 0, False: 0]
  ------------------
  450|      0|        if (fname != NULL) {
  ------------------
  |  Branch (450:13): [True: 0, False: 0]
  ------------------
  451|      0|            PyOS_snprintf(p, sizeof(buf), "%.200s() ", fname);
  452|      0|            p += strlen(p);
  453|      0|        }
  454|      0|        if (iarg != 0) {
  ------------------
  |  Branch (454:13): [True: 0, False: 0]
  ------------------
  455|      0|            PyOS_snprintf(p, sizeof(buf) - (p - buf),
  456|      0|                          "argument %zd", iarg);
  457|      0|            i = 0;
  458|      0|            p += strlen(p);
  459|      0|            while (i < 32 && levels[i] > 0 && (int)(p-buf) < 220) {
  ------------------
  |  Branch (459:20): [True: 0, False: 0]
  |  Branch (459:30): [True: 0, False: 0]
  |  Branch (459:47): [True: 0, False: 0]
  ------------------
  460|      0|                PyOS_snprintf(p, sizeof(buf) - (p - buf),
  461|      0|                              ", item %d", levels[i]-1);
  462|      0|                p += strlen(p);
  463|      0|                i++;
  464|      0|            }
  465|      0|        }
  466|      0|        else {
  467|      0|            PyOS_snprintf(p, sizeof(buf) - (p - buf), "argument");
  468|      0|            p += strlen(p);
  469|      0|        }
  470|      0|        PyOS_snprintf(p, sizeof(buf) - (p - buf), " %.256s", msg);
  471|      0|        message = buf;
  472|      0|    }
  473|      0|    if (msg[0] == '(') {
  ------------------
  |  Branch (473:9): [True: 0, False: 0]
  ------------------
  474|      0|        PyErr_SetString(PyExc_SystemError, message);
  475|      0|    }
  476|      0|    else {
  477|      0|        PyErr_SetString(PyExc_TypeError, message);
  478|      0|    }
  479|      0|}
getargs.c:vgetargs1:
  414|  56.2k|{
  415|  56.2k|    PyObject **stack;
  416|  56.2k|    Py_ssize_t nargs;
  417|       |
  418|  56.2k|    if (!(flags & FLAG_COMPAT)) {
  ------------------
  |  |   24|  56.2k|#define FLAG_COMPAT 1
  ------------------
  |  Branch (418:9): [True: 56.2k, False: 0]
  ------------------
  419|  56.2k|        assert(args != NULL);
  ------------------
  |  Branch (419:9): [True: 56.2k, False: 0]
  ------------------
  420|       |
  421|  56.2k|        if (!PyTuple_Check(args)) {
  ------------------
  |  |   27|  56.2k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  56.2k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (421:13): [True: 0, False: 56.2k]
  ------------------
  422|      0|            PyErr_SetString(PyExc_SystemError,
  423|      0|                "new style getargs format but argument is not a tuple");
  424|      0|            return 0;
  425|      0|        }
  426|       |
  427|  56.2k|        stack = _PyTuple_ITEMS(args);
  ------------------
  |  |   26|  56.2k|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|   112k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 56.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|  56.2k|        nargs = PyTuple_GET_SIZE(args);
  ------------------
  |  |   27|  56.2k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|  56.2k|    }
  430|      0|    else {
  431|      0|        stack = NULL;
  432|      0|        nargs = 0;
  433|      0|    }
  434|       |
  435|  56.2k|    return vgetargs1_impl(args, stack, nargs, format, p_va, flags);
  436|  56.2k|}
getargs.c:vgetargskeywords_impl:
 1677|    782|{
 1678|    782|    char msgbuf[512];
 1679|    782|    int levels[32];
 1680|    782|    const char *fname, *msg, *custom_msg;
 1681|    782|    int min = INT_MAX;
 1682|    782|    int max = INT_MAX;
 1683|    782|    int i, pos, len;
 1684|    782|    int skip = 0;
 1685|    782|    Py_ssize_t nkwargs;
 1686|    782|    freelistentry_t static_entries[STATIC_FREELIST_ENTRIES];
 1687|    782|    freelist_t freelist;
 1688|    782|    PyObject * const *kwstack = NULL;
 1689|       |
 1690|    782|    freelist.entries = static_entries;
 1691|    782|    freelist.first_available = 0;
 1692|    782|    freelist.entries_malloced = 0;
 1693|       |
 1694|    782|    assert(args != NULL || nargs == 0);
  ------------------
  |  Branch (1694:5): [True: 782, False: 0]
  |  Branch (1694:5): [True: 0, False: 0]
  ------------------
 1695|    782|    assert(kwargs == NULL || PyDict_Check(kwargs));
  ------------------
  |  Branch (1695:5): [True: 584, False: 198]
  |  Branch (1695:5): [True: 198, False: 0]
  ------------------
 1696|    782|    assert(kwnames == NULL || PyTuple_Check(kwnames));
  ------------------
  |  Branch (1696:5): [True: 782, False: 0]
  |  Branch (1696:5): [True: 0, False: 0]
  ------------------
 1697|    782|    assert(format != NULL);
  ------------------
  |  Branch (1697:5): [True: 782, False: 0]
  ------------------
 1698|    782|    assert(kwlist != NULL);
  ------------------
  |  Branch (1698:5): [True: 782, False: 0]
  ------------------
 1699|    782|    assert(p_va != NULL);
  ------------------
  |  Branch (1699:5): [True: 782, False: 0]
  ------------------
 1700|       |
 1701|       |    /* grab the function name or custom error msg first (mutually exclusive) */
 1702|    782|    fname = strchr(format, ':');
 1703|    782|    if (fname) {
  ------------------
  |  Branch (1703:9): [True: 782, False: 0]
  ------------------
 1704|    782|        fname++;
 1705|    782|        custom_msg = NULL;
 1706|    782|    }
 1707|      0|    else {
 1708|      0|        custom_msg = strchr(format,';');
 1709|      0|        if (custom_msg)
  ------------------
  |  Branch (1709:13): [True: 0, False: 0]
  ------------------
 1710|      0|            custom_msg++;
 1711|      0|    }
 1712|       |
 1713|       |    /* scan kwlist and count the number of positional-only parameters */
 1714|    784|    for (pos = 0; kwlist[pos] && !*kwlist[pos]; pos++) {
  ------------------
  |  Branch (1714:19): [True: 784, False: 0]
  |  Branch (1714:34): [True: 2, False: 782]
  ------------------
 1715|      2|    }
 1716|       |    /* scan kwlist and get greatest possible nbr of args */
 1717|  2.54k|    for (len = pos; kwlist[len]; len++) {
  ------------------
  |  Branch (1717:21): [True: 1.76k, False: 782]
  ------------------
 1718|  1.76k|        if (!*kwlist[len]) {
  ------------------
  |  Branch (1718:13): [True: 0, False: 1.76k]
  ------------------
 1719|      0|            PyErr_SetString(PyExc_SystemError,
 1720|      0|                            "Empty keyword parameter name");
 1721|      0|            return cleanreturn(0, &freelist);
 1722|      0|        }
 1723|  1.76k|    }
 1724|       |
 1725|    782|    if (len > STATIC_FREELIST_ENTRIES) {
  ------------------
  |  |   44|    782|#define STATIC_FREELIST_ENTRIES 8
  ------------------
  |  Branch (1725:9): [True: 0, False: 782]
  ------------------
 1726|      0|        freelist.entries = PyMem_NEW(freelistentry_t, len);
  ------------------
  |  |   82|      0|#define PyMem_NEW(type, n)        PyMem_New(type, (n))
  |  |  ------------------
  |  |  |  |   64|      0|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (64:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   65|      0|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  |  |  ------------------
  ------------------
 1727|      0|        if (freelist.entries == NULL) {
  ------------------
  |  Branch (1727:13): [True: 0, False: 0]
  ------------------
 1728|      0|            PyErr_NoMemory();
 1729|      0|            return 0;
 1730|      0|        }
 1731|      0|        freelist.entries_malloced = 1;
 1732|      0|    }
 1733|       |
 1734|    782|    if (kwargs != NULL) {
  ------------------
  |  Branch (1734:9): [True: 198, False: 584]
  ------------------
 1735|    198|        nkwargs = PyDict_GET_SIZE(kwargs);
  ------------------
  |  |   63|    198|#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    198|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    198|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1736|    198|    }
 1737|    584|    else if (kwnames != NULL) {
  ------------------
  |  Branch (1737:14): [True: 0, False: 584]
  ------------------
 1738|      0|        nkwargs = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|      0|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1739|      0|        kwstack = args + nargs;
 1740|      0|    }
 1741|    584|    else {
 1742|    584|        nkwargs = 0;
 1743|    584|    }
 1744|    782|    if (nargs + nkwargs > len) {
  ------------------
  |  Branch (1744:9): [True: 0, False: 782]
  ------------------
 1745|       |        /* Adding "keyword" (when nargs == 0) prevents producing wrong error
 1746|       |           messages in some special cases (see bpo-31229). */
 1747|      0|        PyErr_Format(PyExc_TypeError,
 1748|      0|                     "%.200s%s takes at most %d %sargument%s (%zd given)",
 1749|      0|                     (fname == NULL) ? "function" : fname,
  ------------------
  |  Branch (1749:22): [True: 0, False: 0]
  ------------------
 1750|      0|                     (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1750:22): [True: 0, False: 0]
  ------------------
 1751|      0|                     len,
 1752|      0|                     (nargs == 0) ? "keyword " : "",
  ------------------
  |  Branch (1752:22): [True: 0, False: 0]
  ------------------
 1753|      0|                     (len == 1) ? "" : "s",
  ------------------
  |  Branch (1753:22): [True: 0, False: 0]
  ------------------
 1754|      0|                     nargs + nkwargs);
 1755|      0|        return cleanreturn(0, &freelist);
 1756|      0|    }
 1757|       |
 1758|       |    /* convert tuple args and keyword args in same loop, using kwlist to drive process */
 1759|  1.00k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (1759:17): [True: 1.00k, False: 3]
  ------------------
 1760|  1.00k|        if (*format == '|') {
  ------------------
  |  Branch (1760:13): [True: 780, False: 222]
  ------------------
 1761|    780|            if (min != INT_MAX) {
  ------------------
  |  Branch (1761:17): [True: 0, False: 780]
  ------------------
 1762|      0|                PyErr_SetString(PyExc_SystemError,
 1763|      0|                                "Invalid format string (| specified twice)");
 1764|      0|                return cleanreturn(0, &freelist);
 1765|      0|            }
 1766|       |
 1767|    780|            min = i;
 1768|    780|            format++;
 1769|       |
 1770|    780|            if (max != INT_MAX) {
  ------------------
  |  Branch (1770:17): [True: 0, False: 780]
  ------------------
 1771|      0|                PyErr_SetString(PyExc_SystemError,
 1772|      0|                                "Invalid format string ($ before |)");
 1773|      0|                return cleanreturn(0, &freelist);
 1774|      0|            }
 1775|    780|        }
 1776|  1.00k|        if (*format == '$') {
  ------------------
  |  Branch (1776:13): [True: 780, False: 222]
  ------------------
 1777|    780|            if (max != INT_MAX) {
  ------------------
  |  Branch (1777:17): [True: 0, False: 780]
  ------------------
 1778|      0|                PyErr_SetString(PyExc_SystemError,
 1779|      0|                                "Invalid format string ($ specified twice)");
 1780|      0|                return cleanreturn(0, &freelist);
 1781|      0|            }
 1782|       |
 1783|    780|            max = i;
 1784|    780|            format++;
 1785|       |
 1786|    780|            if (max < pos) {
  ------------------
  |  Branch (1786:17): [True: 0, False: 780]
  ------------------
 1787|      0|                PyErr_SetString(PyExc_SystemError,
 1788|      0|                                "Empty parameter name after $");
 1789|      0|                return cleanreturn(0, &freelist);
 1790|      0|            }
 1791|    780|            if (skip) {
  ------------------
  |  Branch (1791:17): [True: 0, False: 780]
  ------------------
 1792|       |                /* Now we know the minimal and the maximal numbers of
 1793|       |                 * positional arguments and can raise an exception with
 1794|       |                 * informative message (see below). */
 1795|      0|                break;
 1796|      0|            }
 1797|    780|            if (max < nargs) {
  ------------------
  |  Branch (1797:17): [True: 0, False: 780]
  ------------------
 1798|      0|                if (max == 0) {
  ------------------
  |  Branch (1798:21): [True: 0, False: 0]
  ------------------
 1799|      0|                    PyErr_Format(PyExc_TypeError,
 1800|      0|                                 "%.200s%s takes no positional arguments",
 1801|      0|                                 (fname == NULL) ? "function" : fname,
  ------------------
  |  Branch (1801:34): [True: 0, False: 0]
  ------------------
 1802|      0|                                 (fname == NULL) ? "" : "()");
  ------------------
  |  Branch (1802:34): [True: 0, False: 0]
  ------------------
 1803|      0|                }
 1804|      0|                else {
 1805|      0|                    PyErr_Format(PyExc_TypeError,
 1806|      0|                                 "%.200s%s takes %s %d positional argument%s"
 1807|      0|                                 " (%zd given)",
 1808|      0|                                 (fname == NULL) ? "function" : fname,
  ------------------
  |  Branch (1808:34): [True: 0, False: 0]
  ------------------
 1809|      0|                                 (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1809:34): [True: 0, False: 0]
  ------------------
 1810|      0|                                 (min != INT_MAX) ? "at most" : "exactly",
  ------------------
  |  Branch (1810:34): [True: 0, False: 0]
  ------------------
 1811|      0|                                 max,
 1812|      0|                                 max == 1 ? "" : "s",
  ------------------
  |  Branch (1812:34): [True: 0, False: 0]
  ------------------
 1813|      0|                                 nargs);
 1814|      0|                }
 1815|      0|                return cleanreturn(0, &freelist);
 1816|      0|            }
 1817|    780|        }
 1818|  1.00k|        if (IS_END_OF_FORMAT(*format)) {
  ------------------
  |  | 1670|  1.00k|#define IS_END_OF_FORMAT(c) (c == '\0' || c == ';' || c == ':')
  |  |  ------------------
  |  |  |  Branch (1670:30): [True: 0, False: 1.00k]
  |  |  |  Branch (1670:43): [True: 0, False: 1.00k]
  |  |  |  Branch (1670:55): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
 1819|      0|            PyErr_Format(PyExc_SystemError,
 1820|      0|                         "More keyword list entries (%d) than "
 1821|      0|                         "format specifiers (%d)", len, i);
 1822|      0|            return cleanreturn(0, &freelist);
 1823|      0|        }
 1824|  1.00k|        if (!skip) {
  ------------------
  |  Branch (1824:13): [True: 1.00k, False: 0]
  ------------------
 1825|  1.00k|            PyObject *current_arg;
 1826|  1.00k|            if (i < nargs) {
  ------------------
  |  Branch (1826:17): [True: 10, False: 992]
  ------------------
 1827|     10|                current_arg = Py_NewRef(args[i]);
  ------------------
  |  |  550|     10|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1828|     10|            }
 1829|    992|            else if (nkwargs && i >= pos) {
  ------------------
  |  Branch (1829:22): [True: 213, False: 779]
  |  Branch (1829:33): [True: 213, False: 0]
  ------------------
 1830|    213|                if (kwargs != NULL) {
  ------------------
  |  Branch (1830:21): [True: 213, False: 0]
  ------------------
 1831|    213|                    if (PyDict_GetItemStringRef(kwargs, kwlist[i], &current_arg) < 0) {
  ------------------
  |  Branch (1831:25): [True: 0, False: 213]
  ------------------
 1832|      0|                        return cleanreturn(0, &freelist);
 1833|      0|                    }
 1834|    213|                }
 1835|      0|                else {
 1836|      0|                    current_arg = find_keyword_str(kwnames, kwstack, kwlist[i]);
 1837|      0|                }
 1838|    213|                if (current_arg) {
  ------------------
  |  Branch (1838:21): [True: 200, False: 13]
  ------------------
 1839|    200|                    --nkwargs;
 1840|    200|                }
 1841|    213|            }
 1842|    779|            else {
 1843|    779|                current_arg = NULL;
 1844|    779|            }
 1845|       |
 1846|  1.00k|            if (current_arg) {
  ------------------
  |  Branch (1846:17): [True: 210, False: 792]
  ------------------
 1847|    210|                msg = convertitem(current_arg, &format, p_va, flags,
 1848|    210|                    levels, msgbuf, sizeof(msgbuf), &freelist);
 1849|    210|                Py_DECREF(current_arg);
  ------------------
  |  |  430|    210|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    210|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    210|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1850|    210|                if (msg) {
  ------------------
  |  Branch (1850:21): [True: 0, False: 210]
  ------------------
 1851|      0|                    seterror(i+1, msg, levels, fname, custom_msg);
 1852|      0|                    return cleanreturn(0, &freelist);
 1853|      0|                }
 1854|    210|                continue;
 1855|    210|            }
 1856|       |
 1857|    792|            if (i < min) {
  ------------------
  |  Branch (1857:17): [True: 0, False: 792]
  ------------------
 1858|      0|                if (i < pos) {
  ------------------
  |  Branch (1858:21): [True: 0, False: 0]
  ------------------
 1859|      0|                    assert (min == INT_MAX);
  ------------------
  |  Branch (1859:21): [True: 0, False: 0]
  ------------------
 1860|      0|                    assert (max == INT_MAX);
  ------------------
  |  Branch (1860:21): [True: 0, False: 0]
  ------------------
 1861|      0|                    skip = 1;
 1862|       |                    /* At that moment we still don't know the minimal and
 1863|       |                     * the maximal numbers of positional arguments.  Raising
 1864|       |                     * an exception is deferred until we encounter | and $
 1865|       |                     * or the end of the format. */
 1866|      0|                }
 1867|      0|                else {
 1868|      0|                    PyErr_Format(PyExc_TypeError,  "%.200s%s missing required "
 1869|      0|                                 "argument '%s' (pos %d)",
 1870|      0|                                 (fname == NULL) ? "function" : fname,
  ------------------
  |  Branch (1870:34): [True: 0, False: 0]
  ------------------
 1871|      0|                                 (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1871:34): [True: 0, False: 0]
  ------------------
 1872|      0|                                 kwlist[i], i+1);
 1873|      0|                    return cleanreturn(0, &freelist);
 1874|      0|                }
 1875|      0|            }
 1876|       |            /* current code reports success when all required args
 1877|       |             * fulfilled and no keyword args left, with no further
 1878|       |             * validation. XXX Maybe skip this in debug build ?
 1879|       |             */
 1880|    792|            if (!nkwargs && !skip) {
  ------------------
  |  Branch (1880:17): [True: 779, False: 13]
  |  Branch (1880:29): [True: 779, False: 0]
  ------------------
 1881|    779|                return cleanreturn(1, &freelist);
 1882|    779|            }
 1883|    792|        }
 1884|       |
 1885|       |        /* We are into optional args, skip through to any remaining
 1886|       |         * keyword args */
 1887|     13|        msg = skipitem(&format, p_va, flags);
 1888|     13|        if (msg) {
  ------------------
  |  Branch (1888:13): [True: 0, False: 13]
  ------------------
 1889|      0|            PyErr_Format(PyExc_SystemError, "%s: '%s'", msg,
 1890|      0|                         format);
 1891|      0|            return cleanreturn(0, &freelist);
 1892|      0|        }
 1893|     13|    }
 1894|       |
 1895|      3|    if (skip) {
  ------------------
  |  Branch (1895:9): [True: 0, False: 3]
  ------------------
 1896|      0|        PyErr_Format(PyExc_TypeError,
 1897|      0|                     "%.200s%s takes %s %d positional argument%s"
 1898|      0|                     " (%zd given)",
 1899|      0|                     (fname == NULL) ? "function" : fname,
  ------------------
  |  Branch (1899:22): [True: 0, False: 0]
  ------------------
 1900|      0|                     (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1900:22): [True: 0, False: 0]
  ------------------
 1901|      0|                     (Py_MIN(pos, min) < i) ? "at least" : "exactly",
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1901:22): [True: 0, False: 0]
  ------------------
 1902|      0|                     Py_MIN(pos, min),
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1903|      0|                     Py_MIN(pos, min) == 1 ? "" : "s",
  ------------------
  |  |  120|      0|       __extension__ \
  |  |  121|      0|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|      0|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|      0|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1903:22): [True: 0, False: 0]
  ------------------
 1904|      0|                     nargs);
 1905|      0|        return cleanreturn(0, &freelist);
 1906|      0|    }
 1907|       |
 1908|      3|    if (!IS_END_OF_FORMAT(*format) && (*format != '|') && (*format != '$')) {
  ------------------
  |  | 1670|      6|#define IS_END_OF_FORMAT(c) (c == '\0' || c == ';' || c == ':')
  |  |  ------------------
  |  |  |  Branch (1670:30): [True: 0, False: 3]
  |  |  |  Branch (1670:43): [True: 0, False: 3]
  |  |  |  Branch (1670:55): [True: 3, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (1908:39): [True: 0, False: 0]
  |  Branch (1908:59): [True: 0, False: 0]
  ------------------
 1909|      0|        PyErr_Format(PyExc_SystemError,
 1910|      0|            "more argument specifiers than keyword list entries "
 1911|      0|            "(remaining format:'%s')", format);
 1912|      0|        return cleanreturn(0, &freelist);
 1913|      0|    }
 1914|       |
 1915|      3|    if (nkwargs > 0) {
  ------------------
  |  Branch (1915:9): [True: 0, False: 3]
  ------------------
 1916|      0|        PyObject *key;
 1917|      0|        Py_ssize_t j;
 1918|       |        /* make sure there are no arguments given by name and position */
 1919|      0|        for (i = pos; i < nargs; i++) {
  ------------------
  |  Branch (1919:23): [True: 0, False: 0]
  ------------------
 1920|      0|            PyObject *current_arg;
 1921|      0|            if (kwargs != NULL) {
  ------------------
  |  Branch (1921:17): [True: 0, False: 0]
  ------------------
 1922|      0|                if (PyDict_GetItemStringRef(kwargs, kwlist[i], &current_arg) < 0) {
  ------------------
  |  Branch (1922:21): [True: 0, False: 0]
  ------------------
 1923|      0|                    return cleanreturn(0, &freelist);
 1924|      0|                }
 1925|      0|            }
 1926|      0|            else {
 1927|      0|                current_arg = find_keyword_str(kwnames, kwstack, kwlist[i]);
 1928|      0|            }
 1929|      0|            if (current_arg) {
  ------------------
  |  Branch (1929:17): [True: 0, False: 0]
  ------------------
 1930|      0|                Py_DECREF(current_arg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1931|       |                /* arg present in tuple and in dict */
 1932|      0|                PyErr_Format(PyExc_TypeError,
 1933|      0|                             "argument for %.200s%s given by name ('%s') "
 1934|      0|                             "and position (%d)",
 1935|      0|                             (fname == NULL) ? "function" : fname,
  ------------------
  |  Branch (1935:30): [True: 0, False: 0]
  ------------------
 1936|      0|                             (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1936:30): [True: 0, False: 0]
  ------------------
 1937|      0|                             kwlist[i], i+1);
 1938|      0|                return cleanreturn(0, &freelist);
 1939|      0|            }
 1940|      0|        }
 1941|       |        /* make sure there are no extraneous keyword arguments */
 1942|      0|        j = 0;
 1943|      0|        while (1) {
  ------------------
  |  Branch (1943:16): [True: 0, Folded]
  ------------------
 1944|      0|            if (kwargs != NULL) {
  ------------------
  |  Branch (1944:17): [True: 0, False: 0]
  ------------------
 1945|      0|                if (!PyDict_Next(kwargs, &j, &key, NULL)) {
  ------------------
  |  Branch (1945:21): [True: 0, False: 0]
  ------------------
 1946|      0|                    break;
 1947|      0|                }
 1948|      0|            }
 1949|      0|            else {
 1950|      0|                if (j >= nkwargs) {
  ------------------
  |  Branch (1950:21): [True: 0, False: 0]
  ------------------
 1951|      0|                    break;
 1952|      0|                }
 1953|      0|                key = PyTuple_GET_ITEM(kwnames, j);
  ------------------
  |  |   29|      0|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      0|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1953:23): [True: 0, False: 0]
  ------------------
 1954|      0|                j++;
 1955|      0|            }
 1956|       |
 1957|      0|            int match = 0;
 1958|      0|            if (!PyUnicode_Check(key)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1958:17): [True: 0, False: 0]
  ------------------
 1959|      0|                PyErr_SetString(PyExc_TypeError,
 1960|      0|                                "keywords must be strings");
 1961|      0|                return cleanreturn(0, &freelist);
 1962|      0|            }
 1963|      0|            for (i = pos; i < len; i++) {
  ------------------
  |  Branch (1963:27): [True: 0, False: 0]
  ------------------
 1964|      0|                if (PyUnicode_EqualToUTF8(key, kwlist[i])) {
  ------------------
  |  Branch (1964:21): [True: 0, False: 0]
  ------------------
 1965|      0|                    match = 1;
 1966|      0|                    break;
 1967|      0|                }
 1968|      0|            }
 1969|      0|            if (!match) {
  ------------------
  |  Branch (1969:17): [True: 0, False: 0]
  ------------------
 1970|      0|                PyObject *_pykwtuple = new_kwtuple(kwlist, len, pos);
 1971|      0|                if (!_pykwtuple) {
  ------------------
  |  Branch (1971:21): [True: 0, False: 0]
  ------------------
 1972|      0|                    return cleanreturn(0, &freelist);
 1973|      0|                }
 1974|      0|                PyObject *pykwlist = PySequence_List(_pykwtuple);
 1975|      0|                Py_DECREF(_pykwtuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1976|      0|                if (!pykwlist) {
  ------------------
  |  Branch (1976:21): [True: 0, False: 0]
  ------------------
 1977|      0|                    return cleanreturn(0, &freelist);
 1978|      0|                }
 1979|      0|                PyObject *suggestion_keyword = _Py_CalculateSuggestions(pykwlist, key);
 1980|      0|                Py_DECREF(pykwlist);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1981|       |
 1982|      0|                if (suggestion_keyword) {
  ------------------
  |  Branch (1982:21): [True: 0, False: 0]
  ------------------
 1983|      0|                    PyErr_Format(PyExc_TypeError,
 1984|      0|                                "%.200s%s got an unexpected keyword argument '%S'."
 1985|      0|                                " Did you mean '%S'?",
 1986|      0|                                (fname == NULL) ? "this function" : fname,
  ------------------
  |  Branch (1986:33): [True: 0, False: 0]
  ------------------
 1987|      0|                                (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1987:33): [True: 0, False: 0]
  ------------------
 1988|      0|                                key,
 1989|      0|                                suggestion_keyword);
 1990|      0|                    Py_DECREF(suggestion_keyword);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1991|      0|                }
 1992|      0|                else {
 1993|      0|                    PyErr_Format(PyExc_TypeError,
 1994|      0|                                "%.200s%s got an unexpected keyword argument '%S'",
 1995|      0|                                (fname == NULL) ? "this function" : fname,
  ------------------
  |  Branch (1995:33): [True: 0, False: 0]
  ------------------
 1996|      0|                                (fname == NULL) ? "" : "()",
  ------------------
  |  Branch (1996:33): [True: 0, False: 0]
  ------------------
 1997|      0|                                key);
 1998|      0|                }
 1999|      0|                return cleanreturn(0, &freelist);
 2000|      0|            }
 2001|      0|        }
 2002|       |        /* Something wrong happened. There are extraneous keyword arguments,
 2003|       |         * but we don't know what. And we don't bother. */
 2004|      0|        PyErr_Format(PyExc_TypeError,
 2005|      0|                     "invalid keyword argument for %.200s%s",
 2006|      0|                     (fname == NULL) ? "this function" : fname,
  ------------------
  |  Branch (2006:22): [True: 0, False: 0]
  ------------------
 2007|      0|                     (fname == NULL) ? "" : "()");
  ------------------
  |  Branch (2007:22): [True: 0, False: 0]
  ------------------
 2008|      0|        return cleanreturn(0, &freelist);
 2009|      0|    }
 2010|       |
 2011|      3|    return cleanreturn(1, &freelist);
 2012|      3|}
getargs.c:skipitem:
 2699|     13|{
 2700|     13|    const char *format = *p_format;
 2701|     13|    char c = *format++;
 2702|       |
 2703|     13|    switch (c) {
 2704|       |
 2705|       |    /*
 2706|       |     * codes that take a single data pointer as an argument
 2707|       |     * (the type of the pointer is irrelevant)
 2708|       |     */
 2709|       |
 2710|      0|    case 'b': /* byte -- very short int */
  ------------------
  |  Branch (2710:5): [True: 0, False: 13]
  ------------------
 2711|      0|    case 'B': /* byte as bitfield */
  ------------------
  |  Branch (2711:5): [True: 0, False: 13]
  ------------------
 2712|      0|    case 'h': /* short int */
  ------------------
  |  Branch (2712:5): [True: 0, False: 13]
  ------------------
 2713|      0|    case 'H': /* short int as bitfield */
  ------------------
  |  Branch (2713:5): [True: 0, False: 13]
  ------------------
 2714|      0|    case 'i': /* int */
  ------------------
  |  Branch (2714:5): [True: 0, False: 13]
  ------------------
 2715|      0|    case 'I': /* int sized bitfield */
  ------------------
  |  Branch (2715:5): [True: 0, False: 13]
  ------------------
 2716|      0|    case 'l': /* long int */
  ------------------
  |  Branch (2716:5): [True: 0, False: 13]
  ------------------
 2717|      0|    case 'k': /* long int sized bitfield */
  ------------------
  |  Branch (2717:5): [True: 0, False: 13]
  ------------------
 2718|      0|    case 'L': /* long long */
  ------------------
  |  Branch (2718:5): [True: 0, False: 13]
  ------------------
 2719|      0|    case 'K': /* long long sized bitfield */
  ------------------
  |  Branch (2719:5): [True: 0, False: 13]
  ------------------
 2720|      0|    case 'n': /* Py_ssize_t */
  ------------------
  |  Branch (2720:5): [True: 0, False: 13]
  ------------------
 2721|      0|    case 'f': /* float */
  ------------------
  |  Branch (2721:5): [True: 0, False: 13]
  ------------------
 2722|      0|    case 'd': /* double */
  ------------------
  |  Branch (2722:5): [True: 0, False: 13]
  ------------------
 2723|      0|    case 'D': /* complex double */
  ------------------
  |  Branch (2723:5): [True: 0, False: 13]
  ------------------
 2724|      0|    case 'c': /* char */
  ------------------
  |  Branch (2724:5): [True: 0, False: 13]
  ------------------
 2725|      0|    case 'C': /* unicode char */
  ------------------
  |  Branch (2725:5): [True: 0, False: 13]
  ------------------
 2726|      0|    case 'p': /* boolean predicate */
  ------------------
  |  Branch (2726:5): [True: 0, False: 13]
  ------------------
 2727|      0|    case 'S': /* string object */
  ------------------
  |  Branch (2727:5): [True: 0, False: 13]
  ------------------
 2728|      0|    case 'Y': /* string object */
  ------------------
  |  Branch (2728:5): [True: 0, False: 13]
  ------------------
 2729|      0|    case 'U': /* unicode string object */
  ------------------
  |  Branch (2729:5): [True: 0, False: 13]
  ------------------
 2730|      0|        {
 2731|      0|            if (p_va != NULL) {
  ------------------
  |  Branch (2731:17): [True: 0, False: 0]
  ------------------
 2732|      0|                (void) va_arg(*p_va, void *);
 2733|      0|            }
 2734|      0|            break;
 2735|      0|        }
 2736|       |
 2737|       |    /* string codes */
 2738|       |
 2739|      0|    case 'e': /* string with encoding */
  ------------------
  |  Branch (2739:5): [True: 0, False: 13]
  ------------------
 2740|      0|        {
 2741|      0|            if (p_va != NULL) {
  ------------------
  |  Branch (2741:17): [True: 0, False: 0]
  ------------------
 2742|      0|                (void) va_arg(*p_va, const char *);
 2743|      0|            }
 2744|      0|            if (!(*format == 's' || *format == 't'))
  ------------------
  |  Branch (2744:19): [True: 0, False: 0]
  |  Branch (2744:37): [True: 0, False: 0]
  ------------------
 2745|       |                /* after 'e', only 's' and 't' is allowed */
 2746|      0|                goto err;
 2747|      0|            format++;
 2748|      0|        }
 2749|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 2750|       |
 2751|      0|    case 's': /* string */
  ------------------
  |  Branch (2751:5): [True: 0, False: 13]
  ------------------
 2752|      0|    case 'z': /* string or None */
  ------------------
  |  Branch (2752:5): [True: 0, False: 13]
  ------------------
 2753|      0|    case 'y': /* bytes */
  ------------------
  |  Branch (2753:5): [True: 0, False: 13]
  ------------------
 2754|      0|    case 'w': /* buffer, read-write */
  ------------------
  |  Branch (2754:5): [True: 0, False: 13]
  ------------------
 2755|      0|        {
 2756|      0|            if (p_va != NULL) {
  ------------------
  |  Branch (2756:17): [True: 0, False: 0]
  ------------------
 2757|      0|                (void) va_arg(*p_va, char **);
 2758|      0|            }
 2759|      0|            if (c == 'w' && *format != '*')
  ------------------
  |  Branch (2759:17): [True: 0, False: 0]
  |  Branch (2759:29): [True: 0, False: 0]
  ------------------
 2760|      0|            {
 2761|       |                /* after 'w', only '*' is allowed */
 2762|      0|                goto err;
 2763|      0|            }
 2764|      0|            if (*format == '#') {
  ------------------
  |  Branch (2764:17): [True: 0, False: 0]
  ------------------
 2765|      0|                if (p_va != NULL) {
  ------------------
  |  Branch (2765:21): [True: 0, False: 0]
  ------------------
 2766|      0|                    (void) va_arg(*p_va, Py_ssize_t *);
 2767|      0|                }
 2768|      0|                format++;
 2769|      0|            } else if ((c == 's' || c == 'z' || c == 'y' || c == 'w')
  ------------------
  |  Branch (2769:25): [True: 0, False: 0]
  |  Branch (2769:37): [True: 0, False: 0]
  |  Branch (2769:49): [True: 0, False: 0]
  |  Branch (2769:61): [True: 0, False: 0]
  ------------------
 2770|      0|                       && *format == '*')
  ------------------
  |  Branch (2770:27): [True: 0, False: 0]
  ------------------
 2771|      0|            {
 2772|      0|                format++;
 2773|      0|            }
 2774|      0|            break;
 2775|      0|        }
 2776|       |
 2777|     13|    case 'O': /* object */
  ------------------
  |  Branch (2777:5): [True: 13, False: 0]
  ------------------
 2778|     13|        {
 2779|     13|            if (*format == '!') {
  ------------------
  |  Branch (2779:17): [True: 0, False: 13]
  ------------------
 2780|      0|                format++;
 2781|      0|                if (p_va != NULL) {
  ------------------
  |  Branch (2781:21): [True: 0, False: 0]
  ------------------
 2782|      0|                    (void) va_arg(*p_va, PyTypeObject*);
 2783|      0|                    (void) va_arg(*p_va, PyObject **);
 2784|      0|                }
 2785|      0|            }
 2786|     13|            else if (*format == '&') {
  ------------------
  |  Branch (2786:22): [True: 0, False: 13]
  ------------------
 2787|      0|                typedef int (*converter)(PyObject *, void *);
 2788|      0|                if (p_va != NULL) {
  ------------------
  |  Branch (2788:21): [True: 0, False: 0]
  ------------------
 2789|      0|                    (void) va_arg(*p_va, converter);
 2790|      0|                    (void) va_arg(*p_va, void *);
 2791|      0|                }
 2792|      0|                format++;
 2793|      0|            }
 2794|     13|            else {
 2795|     13|                if (p_va != NULL) {
  ------------------
  |  Branch (2795:21): [True: 13, False: 0]
  ------------------
 2796|     13|                    (void) va_arg(*p_va, PyObject **);
 2797|     13|                }
 2798|     13|            }
 2799|     13|            break;
 2800|      0|        }
 2801|       |
 2802|      0|    case '(':           /* bypass tuple, not handled at all previously */
  ------------------
  |  Branch (2802:5): [True: 0, False: 13]
  ------------------
 2803|      0|        {
 2804|      0|            const char *msg;
 2805|      0|            for (;;) {
 2806|      0|                if (*format==')')
  ------------------
  |  Branch (2806:21): [True: 0, False: 0]
  ------------------
 2807|      0|                    break;
 2808|      0|                if (IS_END_OF_FORMAT(*format))
  ------------------
  |  | 1670|      0|#define IS_END_OF_FORMAT(c) (c == '\0' || c == ';' || c == ':')
  |  |  ------------------
  |  |  |  Branch (1670:30): [True: 0, False: 0]
  |  |  |  Branch (1670:43): [True: 0, False: 0]
  |  |  |  Branch (1670:55): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2809|      0|                    return "Unmatched left paren in format "
 2810|      0|                           "string";
 2811|      0|                msg = skipitem(&format, p_va, flags);
 2812|      0|                if (msg)
  ------------------
  |  Branch (2812:21): [True: 0, False: 0]
  ------------------
 2813|      0|                    return msg;
 2814|      0|            }
 2815|      0|            format++;
 2816|      0|            break;
 2817|      0|        }
 2818|       |
 2819|      0|    case ')':
  ------------------
  |  Branch (2819:5): [True: 0, False: 13]
  ------------------
 2820|      0|        return "Unmatched right paren in format string";
 2821|       |
 2822|      0|    default:
  ------------------
  |  Branch (2822:5): [True: 0, False: 13]
  ------------------
 2823|      0|err:
 2824|      0|        return "impossible<bad format char>";
 2825|       |
 2826|     13|    }
 2827|       |
 2828|     13|    *p_format = format;
 2829|       |    return NULL;
 2830|     13|}
getargs.c:vgetargskeywords:
 2018|    782|{
 2019|    782|    PyObject *const *args = _PyTuple_ITEMS(argstuple);
  ------------------
  |  |   26|    782|#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
  |  |  ------------------
  |  |  |  |  302|  1.56k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 782, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2020|    782|    Py_ssize_t nargs = PyTuple_GET_SIZE(argstuple);
  ------------------
  |  |   27|    782|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    782|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    782|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2021|       |    return vgetargskeywords_impl(args, nargs, kwargs, NULL,
 2022|    782|                                 format, kwlist, p_va, flags);
 2023|    782|}
getargs.c:parser_init:
 2228|  2.26k|{
 2229|  2.26k|    return _PyOnceFlag_CallOnce(&parser->once, &_parser_init, parser);
 2230|  2.26k|}
getargs.c:_parser_init:
 2151|      4|{
 2152|      4|    struct _PyArg_Parser *parser = (struct _PyArg_Parser *)arg;
 2153|      4|    const char * const *keywords = parser->keywords;
 2154|      4|    assert(keywords != NULL);
  ------------------
  |  Branch (2154:5): [True: 4, False: 0]
  ------------------
 2155|      4|    assert(parser->pos == 0 &&
  ------------------
  |  Branch (2155:5): [True: 4, False: 0]
  |  Branch (2155:5): [True: 0, False: 0]
  |  Branch (2155:5): [True: 4, False: 0]
  |  Branch (2155:5): [True: 4, False: 0]
  |  Branch (2155:5): [True: 4, False: 0]
  |  Branch (2155:5): [True: 4, False: 0]
  ------------------
 2156|      4|           (parser->format == NULL || parser->fname == NULL) &&
 2157|      4|           parser->custom_msg == NULL &&
 2158|      4|           parser->min == 0 &&
 2159|      4|           parser->max == 0);
 2160|       |
 2161|      4|    int len, pos;
 2162|      4|    if (scan_keywords(keywords, &len, &pos) < 0) {
  ------------------
  |  Branch (2162:9): [True: 0, False: 4]
  ------------------
 2163|      0|        return -1;
 2164|      0|    }
 2165|       |
 2166|      4|    const char *fname, *custommsg = NULL;
 2167|      4|    int min = 0, max = 0;
 2168|      4|    if (parser->format) {
  ------------------
  |  Branch (2168:9): [True: 0, False: 4]
  ------------------
 2169|      0|        assert(parser->fname == NULL);
  ------------------
  |  Branch (2169:9): [True: 0, False: 0]
  ------------------
 2170|      0|        if (parse_format(parser->format, len, pos,
  ------------------
  |  Branch (2170:13): [True: 0, False: 0]
  ------------------
 2171|      0|                         &fname, &custommsg, &min, &max) < 0) {
 2172|      0|            return -1;
 2173|      0|        }
 2174|      0|    }
 2175|      4|    else {
 2176|      4|        assert(parser->fname != NULL);
  ------------------
  |  Branch (2176:9): [True: 4, False: 0]
  ------------------
 2177|      4|        fname = parser->fname;
 2178|      4|    }
 2179|       |
 2180|      4|    int owned;
 2181|      4|    PyObject *kwtuple = parser->kwtuple;
 2182|      4|    if (kwtuple == NULL) {
  ------------------
  |  Branch (2182:9): [True: 0, False: 4]
  ------------------
 2183|       |        /* We may temporarily switch to the main interpreter to avoid
 2184|       |         * creating a tuple that could outlive its owning interpreter. */
 2185|      0|        PyThreadState *save_tstate = NULL;
 2186|      0|        PyThreadState *temp_tstate = NULL;
 2187|      0|        if (!_Py_IsMainInterpreter(PyInterpreterState_Get())) {
  ------------------
  |  Branch (2187:13): [True: 0, False: 0]
  ------------------
 2188|      0|            temp_tstate = PyThreadState_New(_PyInterpreterState_Main());
 2189|      0|            if (temp_tstate == NULL) {
  ------------------
  |  Branch (2189:17): [True: 0, False: 0]
  ------------------
 2190|      0|                return -1;
 2191|      0|            }
 2192|      0|            save_tstate = PyThreadState_Swap(temp_tstate);
 2193|      0|        }
 2194|      0|        kwtuple = new_kwtuple(keywords, len, pos);
 2195|      0|        if (temp_tstate != NULL) {
  ------------------
  |  Branch (2195:13): [True: 0, False: 0]
  ------------------
 2196|      0|            PyThreadState_Clear(temp_tstate);
 2197|      0|            (void)PyThreadState_Swap(save_tstate);
 2198|      0|            PyThreadState_Delete(temp_tstate);
 2199|      0|        }
 2200|      0|        if (kwtuple == NULL) {
  ------------------
  |  Branch (2200:13): [True: 0, False: 0]
  ------------------
 2201|      0|            return -1;
 2202|      0|        }
 2203|      0|        owned = 1;
 2204|      0|    }
 2205|      4|    else {
 2206|      4|        owned = 0;
 2207|      4|    }
 2208|       |
 2209|      4|    parser->pos = pos;
 2210|      4|    parser->fname = fname;
 2211|      4|    parser->custom_msg = custommsg;
 2212|      4|    parser->min = min;
 2213|      4|    parser->max = max;
 2214|      4|    parser->kwtuple = kwtuple;
 2215|      4|    parser->is_kwtuple_owned = owned;
 2216|       |
 2217|      4|    assert(parser->next == NULL);
  ------------------
  |  Branch (2217:5): [True: 4, False: 0]
  ------------------
 2218|      4|    parser->next = _Py_atomic_load_ptr(&_PyRuntime.getargs.static_parsers);
 2219|      4|    do {
 2220|       |        // compare-exchange updates parser->next on failure
 2221|      4|    } while (!_Py_atomic_compare_exchange_ptr(&_PyRuntime.getargs.static_parsers,
  ------------------
  |  Branch (2221:14): [True: 0, False: 4]
  ------------------
 2222|      4|                                              &parser->next, parser));
 2223|      4|    return 0;
 2224|      4|}
getargs.c:scan_keywords:
 2027|      4|{
 2028|       |    /* scan keywords and count the number of positional-only parameters */
 2029|      4|    int i;
 2030|      4|    for (i = 0; keywords[i] && !*keywords[i]; i++) {
  ------------------
  |  Branch (2030:17): [True: 4, False: 0]
  |  Branch (2030:32): [True: 0, False: 4]
  ------------------
 2031|      0|    }
 2032|      4|    *pposonly = i;
 2033|       |
 2034|       |    /* scan keywords and get greatest possible nbr of args */
 2035|     17|    for (; keywords[i]; i++) {
  ------------------
  |  Branch (2035:12): [True: 13, False: 4]
  ------------------
 2036|     13|        if (!*keywords[i]) {
  ------------------
  |  Branch (2036:13): [True: 0, False: 13]
  ------------------
 2037|      0|            PyErr_SetString(PyExc_SystemError,
 2038|      0|                            "Empty keyword parameter name");
 2039|      0|            return -1;
 2040|      0|        }
 2041|     13|    }
 2042|      4|    *ptotal = i;
 2043|      4|    return 0;
 2044|      4|}
getargs.c:find_keyword:
 2255|  1.24k|{
 2256|  1.24k|    Py_ssize_t i, nkwargs;
 2257|       |
 2258|  1.24k|    nkwargs = PyTuple_GET_SIZE(kwnames);
  ------------------
  |  |   27|  1.24k|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2259|  2.80k|    for (i = 0; i < nkwargs; i++) {
  ------------------
  |  Branch (2259:17): [True: 2.18k, False: 623]
  ------------------
 2260|  2.18k|        PyObject *kwname = PyTuple_GET_ITEM(kwnames, i);
  ------------------
  |  |   29|  2.18k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  2.18k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2260:28): [True: 2.18k, False: 0]
  ------------------
 2261|       |
 2262|       |        /* kwname == key will normally find a match in since keyword keys
 2263|       |           should be interned strings; if not retry below in a new loop. */
 2264|  2.18k|        if (kwname == key) {
  ------------------
  |  Branch (2264:13): [True: 625, False: 1.55k]
  ------------------
 2265|    625|            return Py_NewRef(kwstack[i]);
  ------------------
  |  |  550|    625|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    625|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    625|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2266|    625|        }
 2267|  2.18k|    }
 2268|       |
 2269|  1.86k|    for (i = 0; i < nkwargs; i++) {
  ------------------
  |  Branch (2269:17): [True: 1.24k, False: 623]
  ------------------
 2270|  1.24k|        PyObject *kwname = PyTuple_GET_ITEM(kwnames, i);
  ------------------
  |  |   29|  1.24k|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|  1.24k|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2270:28): [True: 1.24k, False: 0]
  ------------------
 2271|  1.24k|        assert(PyUnicode_Check(kwname));
  ------------------
  |  Branch (2271:9): [True: 1.24k, False: 0]
  ------------------
 2272|  1.24k|        if (_PyUnicode_Equal(kwname, key)) {
  ------------------
  |  Branch (2272:13): [True: 0, False: 1.24k]
  ------------------
 2273|      0|            return Py_NewRef(kwstack[i]);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2274|      0|        }
 2275|  1.24k|    }
 2276|    623|    return NULL;
 2277|    623|}
getargs.c:unpack_stack:
 2882|  25.5k|{
 2883|  25.5k|    Py_ssize_t i;
 2884|  25.5k|    PyObject **o;
 2885|       |
 2886|  25.5k|    if (!_PyArg_CheckPositional(name, nargs, min, max)) {
  ------------------
  |  Branch (2886:9): [True: 0, False: 25.5k]
  ------------------
 2887|      0|        return 0;
 2888|      0|    }
 2889|       |
 2890|  63.7k|    for (i = 0; i < nargs; i++) {
  ------------------
  |  Branch (2890:17): [True: 38.2k, False: 25.5k]
  ------------------
 2891|       |        o = va_arg(vargs, PyObject **);
 2892|  38.2k|        *o = args[i];
 2893|  38.2k|    }
 2894|  25.5k|    return 1;
 2895|  25.5k|}

Py_GetCompiler:
   29|      2|{
   30|      2|    return COMPILER;
  ------------------
  |  |   15|      2|#define COMPILER "[Clang " __clang_version__ "]"
  ------------------
   31|      2|}

Py_GetCopyright:
   21|      2|{
   22|      2|    return cprt;
   23|      2|}

_PyOS_ResetGetOpt:
   53|      8|{
   54|      8|    _PyOS_opterr = 1;
   55|      8|    _PyOS_optind = 1;
   56|       |    _PyOS_optarg = NULL;
   57|      8|    opt_ptr = L"";
   58|      8|}
_PyOS_GetOpt:
   61|      8|{
   62|      8|    wchar_t *ptr;
   63|      8|    wchar_t option;
   64|       |
   65|      8|    if (*opt_ptr == '\0') {
  ------------------
  |  Branch (65:9): [True: 8, False: 0]
  ------------------
   66|       |
   67|      8|        if (_PyOS_optind >= argc)
  ------------------
  |  Branch (67:13): [True: 8, False: 0]
  ------------------
   68|      8|            return -1;
   69|       |#ifdef MS_WINDOWS
   70|       |        else if (wcscmp(argv[_PyOS_optind], L"/?") == 0) {
   71|       |            ++_PyOS_optind;
   72|       |            return 'h';
   73|       |        }
   74|       |#endif
   75|       |
   76|      0|        else if (argv[_PyOS_optind][0] != L'-' ||
  ------------------
  |  Branch (76:18): [True: 0, False: 0]
  ------------------
   77|      0|                 argv[_PyOS_optind][1] == L'\0' /* lone dash */ )
  ------------------
  |  Branch (77:18): [True: 0, False: 0]
  ------------------
   78|      0|            return -1;
   79|       |
   80|      0|        else if (wcscmp(argv[_PyOS_optind], L"--") == 0) {
  ------------------
  |  Branch (80:18): [True: 0, False: 0]
  ------------------
   81|      0|            ++_PyOS_optind;
   82|      0|            return -1;
   83|      0|        }
   84|       |
   85|      0|        else if (wcscmp(argv[_PyOS_optind], L"--help") == 0) {
  ------------------
  |  Branch (85:18): [True: 0, False: 0]
  ------------------
   86|      0|            ++_PyOS_optind;
   87|      0|            return 'h';
   88|      0|        }
   89|       |
   90|      0|        else if (wcscmp(argv[_PyOS_optind], L"--version") == 0) {
  ------------------
  |  Branch (90:18): [True: 0, False: 0]
  ------------------
   91|      0|            ++_PyOS_optind;
   92|      0|            return 'V';
   93|      0|        }
   94|       |
   95|      0|        opt_ptr = &argv[_PyOS_optind++][1];
   96|      0|    }
   97|       |
   98|      0|    if ((option = *opt_ptr++) == L'\0')
  ------------------
  |  Branch (98:9): [True: 0, False: 0]
  ------------------
   99|      0|        return -1;
  100|       |
  101|      0|    if (option == L'-') {
  ------------------
  |  Branch (101:9): [True: 0, False: 0]
  ------------------
  102|       |        // Parse long option.
  103|      0|        if (*opt_ptr == L'\0') {
  ------------------
  |  Branch (103:13): [True: 0, False: 0]
  ------------------
  104|      0|            if (_PyOS_opterr) {
  ------------------
  |  Branch (104:17): [True: 0, False: 0]
  ------------------
  105|      0|                fprintf(stderr, "Expected long option\n");
  106|      0|            }
  107|      0|            return -1;
  108|      0|        }
  109|      0|        *longindex = 0;
  110|      0|        const _PyOS_LongOption *opt;
  111|      0|        for (opt = &longopts[*longindex]; opt->name; opt = &longopts[++(*longindex)]) {
  ------------------
  |  Branch (111:43): [True: 0, False: 0]
  ------------------
  112|      0|            if (!wcscmp(opt->name, opt_ptr))
  ------------------
  |  Branch (112:17): [True: 0, False: 0]
  ------------------
  113|      0|                break;
  114|      0|        }
  115|      0|        if (!opt->name) {
  ------------------
  |  Branch (115:13): [True: 0, False: 0]
  ------------------
  116|      0|            if (_PyOS_opterr) {
  ------------------
  |  Branch (116:17): [True: 0, False: 0]
  ------------------
  117|      0|                fprintf(stderr, "Unknown option: %ls\n", argv[_PyOS_optind - 1]);
  118|      0|            }
  119|      0|            return '_';
  120|      0|        }
  121|      0|        opt_ptr = L"";
  122|      0|        if (!opt->has_arg) {
  ------------------
  |  Branch (122:13): [True: 0, False: 0]
  ------------------
  123|      0|            return opt->val;
  124|      0|        }
  125|      0|        if (_PyOS_optind >= argc) {
  ------------------
  |  Branch (125:13): [True: 0, False: 0]
  ------------------
  126|      0|            if (_PyOS_opterr) {
  ------------------
  |  Branch (126:17): [True: 0, False: 0]
  ------------------
  127|      0|                fprintf(stderr, "Argument expected for the %ls options\n",
  128|      0|                        argv[_PyOS_optind - 1]);
  129|      0|            }
  130|      0|            return '_';
  131|      0|        }
  132|      0|        _PyOS_optarg = argv[_PyOS_optind++];
  133|      0|        return opt->val;
  134|      0|    }
  135|       |
  136|      0|    if ((ptr = wcschr(SHORT_OPTS, option)) == NULL) {
  ------------------
  |  |   40|      0|#define SHORT_OPTS L"bBc:dEhiIm:OPqRsStuvVW:xX:?"
  ------------------
  |  Branch (136:9): [True: 0, False: 0]
  ------------------
  137|      0|        if (_PyOS_opterr) {
  ------------------
  |  Branch (137:13): [True: 0, False: 0]
  ------------------
  138|      0|            fprintf(stderr, "Unknown option: -%c\n", (char)option);
  139|      0|        }
  140|      0|        return '_';
  141|      0|    }
  142|       |
  143|      0|    if (*(ptr + 1) == L':') {
  ------------------
  |  Branch (143:9): [True: 0, False: 0]
  ------------------
  144|      0|        if (*opt_ptr != L'\0') {
  ------------------
  |  Branch (144:13): [True: 0, False: 0]
  ------------------
  145|      0|            _PyOS_optarg  = opt_ptr;
  146|      0|            opt_ptr = L"";
  147|      0|        }
  148|       |
  149|      0|        else {
  150|      0|            if (_PyOS_optind >= argc) {
  ------------------
  |  Branch (150:17): [True: 0, False: 0]
  ------------------
  151|      0|                if (_PyOS_opterr) {
  ------------------
  |  Branch (151:21): [True: 0, False: 0]
  ------------------
  152|      0|                    fprintf(stderr,
  153|      0|                        "Argument expected for the -%c option\n", (char)option);
  154|      0|                }
  155|      0|                return '_';
  156|      0|            }
  157|       |
  158|      0|            _PyOS_optarg = argv[_PyOS_optind++];
  159|      0|        }
  160|      0|    }
  161|       |
  162|      0|    return option;
  163|      0|}

Py_GetPlatform:
   10|      2|{
   11|      2|    return PLATFORM;
   12|      2|}

_Py_InitVersion:
   12|      4|{
   13|      4|    if (initialized) {
  ------------------
  |  Branch (13:9): [True: 2, False: 2]
  ------------------
   14|      2|        return;
   15|      2|    }
   16|      2|    initialized = 1;
   17|       |#ifdef Py_GIL_DISABLED
   18|       |    const char *buildinfo_format = "%.80s free-threading build (%.80s) %.80s";
   19|       |#else
   20|      2|    const char *buildinfo_format = "%.80s (%.80s) %.80s";
   21|      2|#endif
   22|      2|    PyOS_snprintf(version, sizeof(version), buildinfo_format,
   23|      2|                  PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler());
  ------------------
  |  |   30|      2|#define PY_VERSION              "3.16.0a0"
  ------------------
   24|      2|}
Py_GetVersion:
   28|      2|{
   29|      2|    _Py_InitVersion();
   30|      2|    return version;
   31|      2|}

_PyHamt_Assoc:
 2214|      1|{
 2215|      1|    int32_t key_hash;
 2216|      1|    int added_leaf = 0;
 2217|      1|    PyHamtNode *new_root;
 2218|      1|    PyHamtObject *new_o;
 2219|       |
 2220|      1|    key_hash = hamt_hash(key);
 2221|      1|    if (key_hash == -1) {
  ------------------
  |  Branch (2221:9): [True: 0, False: 1]
  ------------------
 2222|      0|        return NULL;
 2223|      0|    }
 2224|       |
 2225|      1|    new_root = hamt_node_assoc(
 2226|      1|        (PyHamtNode *)(o->h_root),
 2227|      1|        0, key_hash, key, val, &added_leaf);
 2228|      1|    if (new_root == NULL) {
  ------------------
  |  Branch (2228:9): [True: 0, False: 1]
  ------------------
 2229|      0|        return NULL;
 2230|      0|    }
 2231|       |
 2232|      1|    if (new_root == o->h_root) {
  ------------------
  |  Branch (2232:9): [True: 0, False: 1]
  ------------------
 2233|      0|        Py_DECREF(new_root);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2234|      0|        return (PyHamtObject*)Py_NewRef(o);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2235|      0|    }
 2236|       |
 2237|      1|    new_o = hamt_alloc();
 2238|      1|    if (new_o == NULL) {
  ------------------
  |  Branch (2238:9): [True: 0, False: 1]
  ------------------
 2239|      0|        Py_DECREF(new_root);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2240|      0|        return NULL;
 2241|      0|    }
 2242|       |
 2243|      1|    new_o->h_root = new_root;  /* borrow */
 2244|      1|    new_o->h_count = added_leaf ? o->h_count + 1 : o->h_count;
  ------------------
  |  Branch (2244:22): [True: 1, False: 0]
  ------------------
 2245|       |
 2246|      1|    return new_o;
 2247|      1|}
_PyHamt_Find:
 2308|  20.4k|{
 2309|  20.4k|    hamt_find_t res = hamt_find(o, key, val);
 2310|  20.4k|    switch (res) {
 2311|      0|        case F_ERROR:
  ------------------
  |  Branch (2311:9): [True: 0, False: 20.4k]
  ------------------
 2312|      0|            return -1;
 2313|  20.4k|        case F_NOT_FOUND:
  ------------------
  |  Branch (2313:9): [True: 20.4k, False: 0]
  ------------------
 2314|  20.4k|            return 0;
 2315|      0|        case F_FOUND:
  ------------------
  |  Branch (2315:9): [True: 0, False: 20.4k]
  ------------------
 2316|      0|            return 1;
 2317|      0|        default:
  ------------------
  |  Branch (2317:9): [True: 0, False: 20.4k]
  ------------------
 2318|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2319|  20.4k|    }
 2320|  20.4k|}
_PyHamt_New:
 2413|      1|{
 2414|       |    /* HAMT is an immutable object so we can easily cache an
 2415|       |       empty instance. */
 2416|      1|    return (PyHamtObject*)Py_NewRef(_empty_hamt);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2417|      1|}
hamt.c:hamt_hash:
  396|  20.4k|{
  397|  20.4k|    Py_hash_t hash = PyObject_Hash(o);
  398|       |
  399|       |#if SIZEOF_PY_HASH_T <= 4
  400|       |    return hash;
  401|       |#else
  402|  20.4k|    if (hash == -1) {
  ------------------
  |  Branch (402:9): [True: 0, False: 20.4k]
  ------------------
  403|       |        /* exception */
  404|      0|        return -1;
  405|      0|    }
  406|       |
  407|       |    /* While it's somewhat suboptimal to reduce Python's 64 bit hash to
  408|       |       32 bits via XOR, it seems that the resulting hash function
  409|       |       is good enough (this is also how Long type is hashed in Java.)
  410|       |       Storing 10, 100, 1000 Python strings results in a relatively
  411|       |       shallow and uniform tree structure.
  412|       |
  413|       |       Also it's worth noting that it would be possible to adapt the tree
  414|       |       structure to 64 bit hashes, but that would increase memory pressure
  415|       |       and provide little to no performance benefits for collections with
  416|       |       fewer than billions of key/value pairs.
  417|       |
  418|       |       Important: do not change this hash reducing function. There are many
  419|       |       tests that need an exact tree shape to cover all code paths and
  420|       |       we do that by specifying concrete values for test data's `__hash__`.
  421|       |       If this function is changed most of the regression tests would
  422|       |       become useless.
  423|       |    */
  424|  20.4k|    int32_t xored = (int32_t)(hash & 0xffffffffl) ^ (int32_t)(hash >> 32);
  425|  20.4k|    return xored == -1 ? -2 : xored;
  ------------------
  |  Branch (425:12): [True: 0, False: 20.4k]
  ------------------
  426|  20.4k|#endif
  427|  20.4k|}
hamt.c:hamt_node_assoc:
 1940|      1|{
 1941|       |    /* Set key/value to the 'node' starting with the given shift/hash.
 1942|       |       Return a new node, or the same node if key/value already
 1943|       |       set.
 1944|       |
 1945|       |       added_leaf will be set to 1 if key/value wasn't in the
 1946|       |       tree before.
 1947|       |
 1948|       |       This method automatically dispatches to the suitable
 1949|       |       hamt_node_{nodetype}_assoc method.
 1950|       |    */
 1951|       |
 1952|      1|    if (IS_BITMAP_NODE(node)) {
  ------------------
  |  |  281|      1|#define IS_BITMAP_NODE(node)    Py_IS_TYPE(node, &_PyHamt_BitmapNode_Type)
  |  |  ------------------
  |  |  |  |  215|      1|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1953|      1|        return hamt_node_bitmap_assoc(
 1954|      1|            (PyHamtNode_Bitmap *)node,
 1955|      1|            shift, hash, key, val, added_leaf);
 1956|      1|    }
 1957|      0|    else if (IS_ARRAY_NODE(node)) {
  ------------------
  |  |  280|      0|#define IS_ARRAY_NODE(node)     Py_IS_TYPE(node, &_PyHamt_ArrayNode_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1958|      0|        return hamt_node_array_assoc(
 1959|      0|            (PyHamtNode_Array *)node,
 1960|      0|            shift, hash, key, val, added_leaf);
 1961|      0|    }
 1962|      0|    else {
 1963|      0|        assert(IS_COLLISION_NODE(node));
  ------------------
  |  Branch (1963:9): [True: 0, False: 0]
  ------------------
 1964|      0|        return hamt_node_collision_assoc(
 1965|      0|            (PyHamtNode_Collision *)node,
 1966|      0|            shift, hash, key, val, added_leaf);
 1967|      0|    }
 1968|      1|}
hamt.c:hamt_node_bitmap_assoc:
  647|      1|{
  648|       |    /* assoc operation for bitmap nodes.
  649|       |
  650|       |       Return: a new node, or self if key/val already is in the
  651|       |       collection.
  652|       |
  653|       |       'added_leaf' is later used in '_PyHamt_Assoc' to determine if
  654|       |       `hamt.set(key, val)` increased the size of the collection.
  655|       |    */
  656|       |
  657|      1|    uint32_t bit = hamt_bitpos(hash, shift);
  658|      1|    uint32_t idx = hamt_bitindex(self->b_bitmap, bit);
  659|       |
  660|       |    /* Bitmap node layout:
  661|       |
  662|       |    +------+------+------+------+  ---  +------+------+
  663|       |    | key1 | val1 | key2 | val2 |  ...  | keyN | valN |
  664|       |    +------+------+------+------+  ---  +------+------+
  665|       |    where `N < Py_SIZE(node)`.
  666|       |
  667|       |    The `node->b_bitmap` field is a bitmap.  For a given
  668|       |    `(shift, hash)` pair we can determine:
  669|       |
  670|       |     - If this node has the corresponding key/val slots.
  671|       |     - The index of key/val slots.
  672|       |    */
  673|       |
  674|      1|    if (self->b_bitmap & bit) {
  ------------------
  |  Branch (674:9): [True: 0, False: 1]
  ------------------
  675|       |        /* The key is set in this node */
  676|       |
  677|      0|        uint32_t key_idx = 2 * idx;
  678|      0|        uint32_t val_idx = key_idx + 1;
  679|       |
  680|      0|        assert(val_idx < (size_t)Py_SIZE(self));
  ------------------
  |  Branch (680:9): [True: 0, False: 0]
  ------------------
  681|       |
  682|      0|        PyObject *key_or_null = self->b_array[key_idx];
  683|      0|        PyObject *val_or_node = self->b_array[val_idx];
  684|       |
  685|      0|        if (key_or_null == NULL) {
  ------------------
  |  Branch (685:13): [True: 0, False: 0]
  ------------------
  686|       |            /* key is NULL.  This means that we have a few keys
  687|       |               that have the same (hash, shift) pair. */
  688|       |
  689|      0|            assert(val_or_node != NULL);
  ------------------
  |  Branch (689:13): [True: 0, False: 0]
  ------------------
  690|       |
  691|      0|            PyHamtNode *sub_node = hamt_node_assoc(
  692|      0|                (PyHamtNode *)val_or_node,
  693|      0|                shift + 5, hash, key, val, added_leaf);
  694|      0|            if (sub_node == NULL) {
  ------------------
  |  Branch (694:17): [True: 0, False: 0]
  ------------------
  695|      0|                return NULL;
  696|      0|            }
  697|       |
  698|      0|            if (val_or_node == (PyObject *)sub_node) {
  ------------------
  |  Branch (698:17): [True: 0, False: 0]
  ------------------
  699|      0|                Py_DECREF(sub_node);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|      0|                return (PyHamtNode *)Py_NewRef(self);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|      0|            }
  702|       |
  703|      0|            PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
  704|      0|            if (ret == NULL) {
  ------------------
  |  Branch (704:17): [True: 0, False: 0]
  ------------------
  705|      0|                Py_DECREF(sub_node);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  706|      0|                return NULL;
  707|      0|            }
  708|      0|            Py_SETREF(ret->b_array[val_idx], (PyObject*)sub_node);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  709|      0|            return (PyHamtNode *)ret;
  710|      0|        }
  711|       |
  712|      0|        assert(key != NULL);
  ------------------
  |  Branch (712:9): [True: 0, False: 0]
  ------------------
  713|       |        /* key is not NULL.  This means that we have only one other
  714|       |           key in this collection that matches our hash for this shift. */
  715|       |
  716|      0|        int comp_err = PyObject_RichCompareBool(key, key_or_null, Py_EQ);
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
  717|      0|        if (comp_err < 0) {  /* exception in __eq__ */
  ------------------
  |  Branch (717:13): [True: 0, False: 0]
  ------------------
  718|      0|            return NULL;
  719|      0|        }
  720|      0|        if (comp_err == 1) {  /* key == key_or_null */
  ------------------
  |  Branch (720:13): [True: 0, False: 0]
  ------------------
  721|      0|            if (val == val_or_node) {
  ------------------
  |  Branch (721:17): [True: 0, False: 0]
  ------------------
  722|       |                /* we already have the same key/val pair; return self. */
  723|      0|                return (PyHamtNode *)Py_NewRef(self);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  724|      0|            }
  725|       |
  726|       |            /* We're setting a new value for the key we had before.
  727|       |               Make a new bitmap node with a replaced value, and return it. */
  728|      0|            PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
  729|      0|            if (ret == NULL) {
  ------------------
  |  Branch (729:17): [True: 0, False: 0]
  ------------------
  730|      0|                return NULL;
  731|      0|            }
  732|      0|            Py_SETREF(ret->b_array[val_idx], Py_NewRef(val));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  733|      0|            return (PyHamtNode *)ret;
  734|      0|        }
  735|       |
  736|       |        /* It's a new key, and it has the same index as *one* another key.
  737|       |           We have a collision.  We need to create a new node which will
  738|       |           combine the existing key and the key we're adding.
  739|       |
  740|       |           `hamt_node_new_bitmap_or_collision` will either create a new
  741|       |           Collision node if the keys have identical hashes, or
  742|       |           a new Bitmap node.
  743|       |        */
  744|      0|        PyHamtNode *sub_node = hamt_node_new_bitmap_or_collision(
  745|      0|            shift + 5,
  746|      0|            key_or_null, val_or_node,  /* existing key/val */
  747|      0|            hash,
  748|      0|            key, val  /* new key/val */
  749|      0|        );
  750|      0|        if (sub_node == NULL) {
  ------------------
  |  Branch (750:13): [True: 0, False: 0]
  ------------------
  751|      0|            return NULL;
  752|      0|        }
  753|       |
  754|      0|        PyHamtNode_Bitmap *ret = hamt_node_bitmap_clone(self);
  755|      0|        if (ret == NULL) {
  ------------------
  |  Branch (755:13): [True: 0, False: 0]
  ------------------
  756|      0|            Py_DECREF(sub_node);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  757|      0|            return NULL;
  758|      0|        }
  759|      0|        Py_SETREF(ret->b_array[key_idx], NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  760|      0|        Py_SETREF(ret->b_array[val_idx], (PyObject *)sub_node);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  761|       |
  762|      0|        *added_leaf = 1;
  763|      0|        return (PyHamtNode *)ret;
  764|      0|    }
  765|      1|    else {
  766|       |        /* There was no key before with the same (shift,hash). */
  767|       |
  768|      1|        uint32_t n = (uint32_t)_Py_popcount32(self->b_bitmap);
  769|       |
  770|      1|        if (n >= 16) {
  ------------------
  |  Branch (770:13): [True: 0, False: 1]
  ------------------
  771|       |            /* When we have a situation where we want to store more
  772|       |               than 16 nodes at one level of the tree, we no longer
  773|       |               want to use the Bitmap node with bitmap encoding.
  774|       |
  775|       |               Instead we start using an Array node, which has
  776|       |               simpler (faster) implementation at the expense of
  777|       |               having preallocated 32 pointers for its keys/values
  778|       |               pairs.
  779|       |
  780|       |               Small hamt objects (<30 keys) usually don't have any
  781|       |               Array nodes at all.  Between ~30 and ~400 keys hamt
  782|       |               objects usually have one Array node, and usually it's
  783|       |               a root node.
  784|       |            */
  785|       |
  786|      0|            uint32_t jdx = hamt_mask(hash, shift);
  787|       |            /* 'jdx' is the index of where the new key should be added
  788|       |               in the new Array node we're about to create. */
  789|       |
  790|      0|            PyHamtNode *empty = NULL;
  791|      0|            PyHamtNode_Array *new_node = NULL;
  792|      0|            PyHamtNode *res = NULL;
  793|       |
  794|       |            /* Create a new Array node. */
  795|      0|            new_node = (PyHamtNode_Array *)hamt_node_array_new(n + 1);
  796|      0|            if (new_node == NULL) {
  ------------------
  |  Branch (796:17): [True: 0, False: 0]
  ------------------
  797|      0|                goto fin;
  798|      0|            }
  799|       |
  800|       |            /* Create an empty bitmap node for the next
  801|       |               hamt_node_assoc call. */
  802|      0|            empty = hamt_node_bitmap_new(0);
  803|      0|            if (empty == NULL) {
  ------------------
  |  Branch (803:17): [True: 0, False: 0]
  ------------------
  804|      0|                goto fin;
  805|      0|            }
  806|       |
  807|       |            /* Make a new bitmap node for the key/val we're adding.
  808|       |               Set that bitmap node to new-array-node[jdx]. */
  809|      0|            new_node->a_array[jdx] = hamt_node_assoc(
  810|      0|                empty, shift + 5, hash, key, val, added_leaf);
  811|      0|            if (new_node->a_array[jdx] == NULL) {
  ------------------
  |  Branch (811:17): [True: 0, False: 0]
  ------------------
  812|      0|                goto fin;
  813|      0|            }
  814|       |
  815|       |            /* Copy existing key/value pairs from the current Bitmap
  816|       |               node to the new Array node we've just created. */
  817|      0|            Py_ssize_t i, j;
  818|      0|            for (i = 0, j = 0; i < HAMT_ARRAY_NODE_SIZE; i++) {
  ------------------
  |  |  314|      0|#define HAMT_ARRAY_NODE_SIZE 32
  ------------------
  |  Branch (818:32): [True: 0, False: 0]
  ------------------
  819|      0|                if (((self->b_bitmap >> i) & 1) != 0) {
  ------------------
  |  Branch (819:21): [True: 0, False: 0]
  ------------------
  820|       |                    /* Ensure we don't accidentally override `jdx` element
  821|       |                       we set few lines above.
  822|       |                    */
  823|      0|                    assert(new_node->a_array[i] == NULL);
  ------------------
  |  Branch (823:21): [True: 0, False: 0]
  ------------------
  824|       |
  825|      0|                    if (self->b_array[j] == NULL) {
  ------------------
  |  Branch (825:25): [True: 0, False: 0]
  ------------------
  826|      0|                        new_node->a_array[i] =
  827|      0|                            (PyHamtNode *)Py_NewRef(self->b_array[j + 1]);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  828|      0|                    }
  829|      0|                    else {
  830|      0|                        int32_t rehash = hamt_hash(self->b_array[j]);
  831|      0|                        if (rehash == -1) {
  ------------------
  |  Branch (831:29): [True: 0, False: 0]
  ------------------
  832|      0|                            goto fin;
  833|      0|                        }
  834|       |
  835|      0|                        new_node->a_array[i] = hamt_node_assoc(
  836|      0|                            empty, shift + 5,
  837|      0|                            rehash,
  838|      0|                            self->b_array[j],
  839|      0|                            self->b_array[j + 1],
  840|      0|                            added_leaf);
  841|       |
  842|      0|                        if (new_node->a_array[i] == NULL) {
  ------------------
  |  Branch (842:29): [True: 0, False: 0]
  ------------------
  843|      0|                            goto fin;
  844|      0|                        }
  845|      0|                    }
  846|      0|                    j += 2;
  847|      0|                }
  848|      0|            }
  849|       |
  850|      0|            VALIDATE_ARRAY_NODE(new_node)
  851|       |
  852|       |            /* That's it! */
  853|      0|            res = (PyHamtNode *)new_node;
  854|       |
  855|      0|        fin:
  856|      0|            Py_XDECREF(empty);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  857|      0|            if (res == NULL) {
  ------------------
  |  Branch (857:17): [True: 0, False: 0]
  ------------------
  858|      0|                Py_XDECREF(new_node);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|      0|            }
  860|      0|            return res;
  861|      0|        }
  862|      1|        else {
  863|       |            /* We have less than 16 keys at this level; let's just
  864|       |               create a new bitmap node out of this node with the
  865|       |               new key/val pair added. */
  866|       |
  867|      1|            uint32_t key_idx = 2 * idx;
  868|      1|            uint32_t val_idx = key_idx + 1;
  869|      1|            uint32_t i;
  870|       |
  871|      1|            *added_leaf = 1;
  872|       |
  873|       |            /* Allocate new Bitmap node which can have one more key/val
  874|       |               pair in addition to what we have already. */
  875|      1|            PyHamtNode_Bitmap *new_node =
  876|      1|                (PyHamtNode_Bitmap *)hamt_node_bitmap_new(2 * (n + 1));
  877|      1|            if (new_node == NULL) {
  ------------------
  |  Branch (877:17): [True: 0, False: 1]
  ------------------
  878|      0|                return NULL;
  879|      0|            }
  880|       |
  881|       |            /* Copy all keys/values that will be before the new key/value
  882|       |               we are adding. */
  883|      1|            for (i = 0; i < key_idx; i++) {
  ------------------
  |  Branch (883:25): [True: 0, False: 1]
  ------------------
  884|      0|                new_node->b_array[i] = Py_XNewRef(self->b_array[i]);
  ------------------
  |  |  551|      0|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  885|      0|            }
  886|       |
  887|       |            /* Set the new key/value to the new Bitmap node. */
  888|      1|            new_node->b_array[key_idx] = Py_NewRef(key);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  889|      1|            new_node->b_array[val_idx] = Py_NewRef(val);
  ------------------
  |  |  550|      1|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  890|       |
  891|       |            /* Copy all keys/values that will be after the new key/value
  892|       |               we are adding. */
  893|      1|            assert(Py_SIZE(self) >= 0 && Py_SIZE(self) <= 32);
  ------------------
  |  Branch (893:13): [True: 1, False: 0]
  |  Branch (893:13): [True: 1, False: 0]
  ------------------
  894|      1|            for (i = key_idx; i < (uint32_t)Py_SIZE(self); i++) {
  ------------------
  |  |  214|      1|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (894:31): [True: 0, False: 1]
  ------------------
  895|      0|                new_node->b_array[i + 2] = Py_XNewRef(self->b_array[i]);
  ------------------
  |  |  551|      0|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  896|      0|            }
  897|       |
  898|      1|            new_node->b_bitmap = self->b_bitmap | bit;
  899|      1|            return (PyHamtNode *)new_node;
  900|      1|        }
  901|      1|    }
  902|      1|}
hamt.c:hamt_bitpos:
  437|  20.4k|{
  438|  20.4k|    return (uint32_t)1 << hamt_mask(hash, shift);
  439|  20.4k|}
hamt.c:hamt_bitindex:
  443|      1|{
  444|      1|    return (uint32_t)_Py_popcount32(bitmap & (bit - 1));
  445|      1|}
hamt.c:hamt_mask:
  431|  20.4k|{
  432|  20.4k|    return (((uint32_t)hash >> shift) & 0x01f);
  433|  20.4k|}
hamt.c:hamt_node_bitmap_new:
  492|      1|{
  493|       |    /* Create a new bitmap node of size 'size' */
  494|       |
  495|      1|    PyHamtNode_Bitmap *node;
  496|      1|    Py_ssize_t i;
  497|       |
  498|      1|    if (size == 0) {
  ------------------
  |  Branch (498:9): [True: 0, False: 1]
  ------------------
  499|       |        /* Since bitmap nodes are immutable, we can cache the instance
  500|       |           for size=0 and reuse it whenever we need an empty bitmap node.
  501|       |        */
  502|      0|        return (PyHamtNode *)&_Py_SINGLETON(hamt_bitmap_node_empty);
  ------------------
  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  ------------------
  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  ------------------
  ------------------
  503|      0|    }
  504|       |
  505|      1|    assert(size >= 0);
  ------------------
  |  Branch (505:5): [True: 1, False: 0]
  ------------------
  506|      1|    assert(size % 2 == 0);
  ------------------
  |  Branch (506:5): [True: 1, False: 0]
  ------------------
  507|       |
  508|       |    /* No freelist; allocate a new bitmap node */
  509|      1|    node = PyObject_GC_NewVar(
  ------------------
  |  |  183|      1|    _Py_CAST(type*, _PyObject_GC_NewVar((typeobj), (n)))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  510|      1|        PyHamtNode_Bitmap, &_PyHamt_BitmapNode_Type, size);
  511|      1|    if (node == NULL) {
  ------------------
  |  Branch (511:9): [True: 0, False: 1]
  ------------------
  512|      0|        return NULL;
  513|      0|    }
  514|       |
  515|      1|    Py_SET_SIZE(node, size);
  ------------------
  |  |  216|      1|#  define Py_SET_SIZE(ob, size) _Py_SET_SIZE_impl(_PyVarObject_CAST(ob), (size))
  |  |  ------------------
  |  |  |  |  182|      1|#define _PyVarObject_CAST(op) _Py_CAST(PyVarObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|       |
  517|      3|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (517:17): [True: 2, False: 1]
  ------------------
  518|      2|        node->b_array[i] = NULL;
  519|      2|    }
  520|       |
  521|      1|    node->b_bitmap = 0;
  522|       |
  523|      1|    _PyObject_GC_TRACK(node);
  ------------------
  |  |  505|      1|        _PyObject_GC_TRACK(__FILE__, __LINE__, _PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|       |
  525|      1|    return (PyHamtNode *)node;
  526|      1|}
hamt.c:hamt_find:
 2292|  20.4k|{
 2293|  20.4k|    if (o->h_count == 0) {
  ------------------
  |  Branch (2293:9): [True: 1, False: 20.4k]
  ------------------
 2294|      1|        return F_NOT_FOUND;
 2295|      1|    }
 2296|       |
 2297|  20.4k|    int32_t key_hash = hamt_hash(key);
 2298|  20.4k|    if (key_hash == -1) {
  ------------------
  |  Branch (2298:9): [True: 0, False: 20.4k]
  ------------------
 2299|      0|        return F_ERROR;
 2300|      0|    }
 2301|       |
 2302|  20.4k|    return hamt_node_find(o->h_root, 0, key_hash, key, val);
 2303|  20.4k|}
hamt.c:hamt_node_find:
 2001|  20.4k|{
 2002|       |    /* Find the key in the node starting with the given shift/hash.
 2003|       |
 2004|       |       If a value is found, the result will be set to F_FOUND, and
 2005|       |       *val will point to the found value object.
 2006|       |
 2007|       |       If a value wasn't found, the result will be set to F_NOT_FOUND.
 2008|       |
 2009|       |       If an exception occurs during the call, the result will be F_ERROR.
 2010|       |
 2011|       |       This method automatically dispatches to the suitable
 2012|       |       hamt_node_{nodetype}_find method.
 2013|       |    */
 2014|       |
 2015|  20.4k|    if (IS_BITMAP_NODE(node)) {
  ------------------
  |  |  281|  20.4k|#define IS_BITMAP_NODE(node)    Py_IS_TYPE(node, &_PyHamt_BitmapNode_Type)
  |  |  ------------------
  |  |  |  |  215|  20.4k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  20.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  20.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 20.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2016|  20.4k|        return hamt_node_bitmap_find(
 2017|  20.4k|            (PyHamtNode_Bitmap *)node,
 2018|  20.4k|            shift, hash, key, val);
 2019|       |
 2020|  20.4k|    }
 2021|      0|    else if (IS_ARRAY_NODE(node)) {
  ------------------
  |  |  280|      0|#define IS_ARRAY_NODE(node)     Py_IS_TYPE(node, &_PyHamt_ArrayNode_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2022|      0|        return hamt_node_array_find(
 2023|      0|            (PyHamtNode_Array *)node,
 2024|      0|            shift, hash, key, val);
 2025|      0|    }
 2026|      0|    else {
 2027|      0|        assert(IS_COLLISION_NODE(node));
  ------------------
  |  Branch (2027:9): [True: 0, False: 0]
  ------------------
 2028|      0|        return hamt_node_collision_find(
 2029|      0|            (PyHamtNode_Collision *)node,
 2030|      0|            shift, hash, key, val);
 2031|      0|    }
 2032|  20.4k|}
hamt.c:hamt_node_bitmap_find:
 1047|  20.4k|{
 1048|       |    /* Lookup a key in a Bitmap node. */
 1049|       |
 1050|  20.4k|    uint32_t bit = hamt_bitpos(hash, shift);
 1051|  20.4k|    uint32_t idx;
 1052|  20.4k|    uint32_t key_idx;
 1053|  20.4k|    uint32_t val_idx;
 1054|  20.4k|    PyObject *key_or_null;
 1055|  20.4k|    PyObject *val_or_node;
 1056|  20.4k|    int comp_err;
 1057|       |
 1058|  20.4k|    if ((self->b_bitmap & bit) == 0) {
  ------------------
  |  Branch (1058:9): [True: 20.4k, False: 0]
  ------------------
 1059|  20.4k|        return F_NOT_FOUND;
 1060|  20.4k|    }
 1061|       |
 1062|      0|    idx = hamt_bitindex(self->b_bitmap, bit);
 1063|      0|    key_idx = idx * 2;
 1064|      0|    val_idx = key_idx + 1;
 1065|       |
 1066|      0|    assert(val_idx < (size_t)Py_SIZE(self));
  ------------------
  |  Branch (1066:5): [True: 0, False: 0]
  ------------------
 1067|       |
 1068|      0|    key_or_null = self->b_array[key_idx];
 1069|      0|    val_or_node = self->b_array[val_idx];
 1070|       |
 1071|      0|    if (key_or_null == NULL) {
  ------------------
  |  Branch (1071:9): [True: 0, False: 0]
  ------------------
 1072|       |        /* There are a few keys that have the same hash at the current shift
 1073|       |           that match our key.  Dispatch the lookup further down the tree. */
 1074|      0|        assert(val_or_node != NULL);
  ------------------
  |  Branch (1074:9): [True: 0, False: 0]
  ------------------
 1075|      0|        return hamt_node_find((PyHamtNode *)val_or_node,
 1076|      0|                              shift + 5, hash, key, val);
 1077|      0|    }
 1078|       |
 1079|       |    /* We have only one key -- a potential match.  Let's compare if the
 1080|       |       key we are looking at is equal to the key we are looking for. */
 1081|      0|    assert(key != NULL);
  ------------------
  |  Branch (1081:5): [True: 0, False: 0]
  ------------------
 1082|      0|    comp_err = PyObject_RichCompareBool(key, key_or_null, Py_EQ);
  ------------------
  |  |  654|      0|#define Py_EQ 2
  ------------------
 1083|      0|    if (comp_err < 0) {  /* exception in __eq__ */
  ------------------
  |  Branch (1083:9): [True: 0, False: 0]
  ------------------
 1084|      0|        return F_ERROR;
 1085|      0|    }
 1086|      0|    if (comp_err == 1) {  /* key == key_or_null */
  ------------------
  |  Branch (1086:9): [True: 0, False: 0]
  ------------------
 1087|      0|        *val = val_or_node;
 1088|      0|        return F_FOUND;
 1089|      0|    }
 1090|       |
 1091|      0|    return F_NOT_FOUND;
 1092|      0|}
hamt.c:hamt_alloc:
 2395|      1|{
 2396|      1|    PyHamtObject *o;
 2397|      1|    o = PyObject_GC_New(PyHamtObject, &_PyHamt_Type);
  ------------------
  |  |  181|      1|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
 2398|      1|    if (o == NULL) {
  ------------------
  |  Branch (2398:9): [True: 0, False: 1]
  ------------------
 2399|      0|        return NULL;
 2400|      0|    }
 2401|      1|    o->h_count = 0;
 2402|      1|    o->h_root = NULL;
 2403|       |    o->h_weakreflist = NULL;
 2404|      1|    PyObject_GC_Track(o);
 2405|      1|    return o;
 2406|      1|}
hamt.c:hamt_tp_traverse:
 2642|     14|{
 2643|     14|    PyHamtObject *self = _PyHamtObject_CAST(op);
  ------------------
  |  | 2622|     14|#define _PyHamtObject_CAST(op)      ((PyHamtObject *)(op))
  ------------------
 2644|     14|    Py_VISIT(self->h_root);
  ------------------
  |  |  194|     14|    do {                                                                \
  |  |  195|     14|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 14, False: 0]
  |  |  ------------------
  |  |  196|     14|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     14|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 14]
  |  |  ------------------
  |  |  198|     14|                return vret;                                            \
  |  |  199|     14|        }                                                               \
  |  |  200|     14|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 14]
  |  |  ------------------
  ------------------
 2645|     14|    return 0;
 2646|     14|}
hamt.c:hamt_node_bitmap_traverse:
 1096|     14|{
 1097|       |    /* Bitmap's tp_traverse */
 1098|     14|    PyHamtNode_Bitmap *self = _PyHamtNode_Bitmap_CAST(op);
  ------------------
  |  |  487|     14|#define _PyHamtNode_Bitmap_CAST(op)     ((PyHamtNode_Bitmap *)(op))
  ------------------
 1099|     42|    for (Py_ssize_t i = Py_SIZE(self); --i >= 0;) {
  ------------------
  |  |  214|     14|#  define Py_SIZE(ob) _Py_SIZE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:40): [True: 28, False: 14]
  ------------------
 1100|     28|        Py_VISIT(self->b_array[i]);
  ------------------
  |  |  194|     28|    do {                                                                \
  |  |  195|     28|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 28, False: 0]
  |  |  ------------------
  |  |  196|     28|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     28|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 28]
  |  |  ------------------
  |  |  198|     28|                return vret;                                            \
  |  |  199|     28|        }                                                               \
  |  |  200|     28|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 28]
  |  |  ------------------
  ------------------
 1101|     28|    }
 1102|     14|    return 0;
 1103|     14|}

_Py_hashtable_hash_ptr:
   94|  2.17M|{
   95|  2.17M|    return (Py_uhash_t)_Py_HashPointerRaw(key);
   96|  2.17M|}
_Py_hashtable_get_entry_generic:
  141|   225k|{
  142|   225k|    Py_uhash_t key_hash = ht->hash_func(key);
  143|   225k|    size_t index = key_hash & (ht->nbuckets - 1);
  144|   225k|    _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
  ------------------
  |  |   59|   225k|        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(HT)->buckets[BUCKET]))
  |  |  ------------------
  |  |  |  |   23|   225k|#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_Py_slist_t *)(SLIST))->head)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   225k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|   271k|    while (1) {
  ------------------
  |  Branch (145:12): [True: 271k, Folded]
  ------------------
  146|   271k|        if (entry == NULL) {
  ------------------
  |  Branch (146:13): [True: 214k, False: 56.4k]
  ------------------
  147|   214k|            return NULL;
  148|   214k|        }
  149|  56.4k|        if (entry->key_hash == key_hash && ht->compare_func(key, entry->key)) {
  ------------------
  |  Branch (149:13): [True: 10.0k, False: 46.3k]
  |  Branch (149:44): [True: 10.0k, False: 2]
  ------------------
  150|  10.0k|            break;
  151|  10.0k|        }
  152|  46.3k|        entry = ENTRY_NEXT(entry);
  ------------------
  |  |   61|  46.3k|        ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
  |  |  ------------------
  |  |  |  |   21|  46.3k|#define _Py_SLIST_ITEM_NEXT(ITEM) _Py_RVALUE(((_Py_slist_item_t *)(ITEM))->next)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  46.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|  46.3k|    }
  154|  10.0k|    return entry;
  155|   225k|}
_Py_hashtable_set:
  218|   445k|{
  219|   445k|    _Py_hashtable_entry_t *entry;
  220|       |
  221|   445k|#ifndef NDEBUG
  222|       |    /* Don't write the assertion on a single line because it is interesting
  223|       |       to know the duplicated entry if the assertion failed. The entry can
  224|       |       be read using a debugger. */
  225|   445k|    entry = ht->get_entry_func(ht, key);
  226|   445k|    assert(entry == NULL);
  ------------------
  |  Branch (226:5): [True: 445k, False: 0]
  ------------------
  227|   445k|#endif
  228|       |
  229|   445k|    entry = ht->alloc.malloc(sizeof(_Py_hashtable_entry_t));
  230|   445k|    if (entry == NULL) {
  ------------------
  |  Branch (230:9): [True: 0, False: 445k]
  ------------------
  231|       |        /* memory allocation failed */
  232|      0|        return -1;
  233|      0|    }
  234|       |
  235|   445k|    entry->key_hash = ht->hash_func(key);
  236|   445k|    entry->key = (void *)key;
  237|   445k|    entry->value = value;
  238|       |
  239|   445k|    ht->nentries++;
  240|   445k|    if ((float)ht->nentries / (float)ht->nbuckets > HASHTABLE_HIGH) {
  ------------------
  |  |   52|   445k|#define HASHTABLE_HIGH 0.50
  ------------------
  |  Branch (240:9): [True: 12.2k, False: 432k]
  ------------------
  241|  12.2k|        if (hashtable_rehash(ht) < 0) {
  ------------------
  |  Branch (241:13): [True: 0, False: 12.2k]
  ------------------
  242|      0|            ht->nentries--;
  243|      0|            ht->alloc.free(entry);
  244|      0|            return -1;
  245|      0|        }
  246|  12.2k|    }
  247|       |
  248|   445k|    size_t index = entry->key_hash & (ht->nbuckets - 1);
  249|   445k|    _Py_slist_prepend(&ht->buckets[index], (_Py_slist_item_t*)entry);
  250|   445k|    return 0;
  251|   445k|}
_Py_hashtable_get:
  256|   222k|{
  257|   222k|    _Py_hashtable_entry_t *entry = ht->get_entry_func(ht, key);
  258|   222k|    if (entry != NULL) {
  ------------------
  |  Branch (258:9): [True: 10.0k, False: 212k]
  ------------------
  259|  10.0k|        return entry->value;
  260|  10.0k|    }
  261|   212k|    else {
  262|       |        return NULL;
  263|   212k|    }
  264|   222k|}
_Py_hashtable_new_full:
  328|  52.7k|{
  329|  52.7k|    _Py_hashtable_allocator_t alloc;
  330|  52.7k|    if (allocator == NULL) {
  ------------------
  |  Branch (330:9): [True: 52.7k, False: 12]
  ------------------
  331|  52.7k|        alloc.malloc = PyMem_Malloc;
  332|  52.7k|        alloc.free = PyMem_Free;
  333|  52.7k|    }
  334|     12|    else {
  335|     12|        alloc = *allocator;
  336|     12|    }
  337|       |
  338|  52.7k|    _Py_hashtable_t *ht = (_Py_hashtable_t *)alloc.malloc(sizeof(_Py_hashtable_t));
  339|  52.7k|    if (ht == NULL) {
  ------------------
  |  Branch (339:9): [True: 0, False: 52.7k]
  ------------------
  340|      0|        return ht;
  341|      0|    }
  342|       |
  343|  52.7k|    ht->nbuckets = HASHTABLE_MIN_SIZE;
  ------------------
  |  |   51|  52.7k|#define HASHTABLE_MIN_SIZE 16
  ------------------
  344|  52.7k|    ht->nentries = 0;
  345|       |
  346|  52.7k|    size_t buckets_size = ht->nbuckets * sizeof(ht->buckets[0]);
  347|  52.7k|    ht->buckets = alloc.malloc(buckets_size);
  348|  52.7k|    if (ht->buckets == NULL) {
  ------------------
  |  Branch (348:9): [True: 0, False: 52.7k]
  ------------------
  349|      0|        alloc.free(ht);
  350|      0|        return NULL;
  351|      0|    }
  352|  52.7k|    memset(ht->buckets, 0, buckets_size);
  353|       |
  354|  52.7k|    ht->get_entry_func = _Py_hashtable_get_entry_generic;
  355|  52.7k|    ht->hash_func = hash_func;
  356|  52.7k|    ht->compare_func = compare_func;
  357|  52.7k|    ht->key_destroy_func = key_destroy_func;
  358|  52.7k|    ht->value_destroy_func = value_destroy_func;
  359|  52.7k|    ht->alloc = alloc;
  360|  52.7k|    if (ht->hash_func == _Py_hashtable_hash_ptr
  ------------------
  |  Branch (360:9): [True: 52.7k, False: 10]
  ------------------
  361|  52.7k|        && ht->compare_func == _Py_hashtable_compare_direct)
  ------------------
  |  Branch (361:12): [True: 52.7k, False: 0]
  ------------------
  362|  52.7k|    {
  363|  52.7k|        ht->get_entry_func = _Py_hashtable_get_entry_ptr;
  364|  52.7k|    }
  365|  52.7k|    return ht;
  366|  52.7k|}
_Py_hashtable_new:
  372|  52.7k|{
  373|  52.7k|    return _Py_hashtable_new_full(hash_func, compare_func,
  374|  52.7k|                                  NULL, NULL, NULL);
  375|  52.7k|}
_Py_hashtable_destroy:
  412|  52.7k|{
  413|  1.61M|    for (size_t i = 0; i < ht->nbuckets; i++) {
  ------------------
  |  Branch (413:24): [True: 1.55M, False: 52.7k]
  ------------------
  414|  1.55M|        _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, i);
  ------------------
  |  |   59|  1.55M|        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(HT)->buckets[BUCKET]))
  |  |  ------------------
  |  |  |  |   23|  1.55M|#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_Py_slist_t *)(SLIST))->head)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.55M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|  2.00M|        while (entry) {
  ------------------
  |  Branch (415:16): [True: 442k, False: 1.55M]
  ------------------
  416|   442k|            _Py_hashtable_entry_t *entry_next = ENTRY_NEXT(entry);
  ------------------
  |  |   61|   442k|        ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
  |  |  ------------------
  |  |  |  |   21|   442k|#define _Py_SLIST_ITEM_NEXT(ITEM) _Py_RVALUE(((_Py_slist_item_t *)(ITEM))->next)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   442k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|   442k|            _Py_hashtable_destroy_entry(ht, entry);
  418|   442k|            entry = entry_next;
  419|   442k|        }
  420|  1.55M|    }
  421|       |
  422|  52.7k|    ht->alloc.free(ht->buckets);
  423|  52.7k|    ht->alloc.free(ht);
  424|  52.7k|}
hashtable.c:_Py_slist_prepend:
   75|   806k|{
   76|   806k|    item->next = list->head;
   77|   806k|    list->head = item;
   78|   806k|}
hashtable.c:hashtable_rehash:
  288|  12.2k|{
  289|  12.2k|    size_t new_size = round_size((size_t)(ht->nentries * HASHTABLE_REHASH_FACTOR));
  ------------------
  |  |   54|  12.2k|#define HASHTABLE_REHASH_FACTOR 2.0 / (HASHTABLE_LOW + HASHTABLE_HIGH)
  |  |  ------------------
  |  |  |  |   53|  12.2k|#define HASHTABLE_LOW 0.10
  |  |  ------------------
  |  |               #define HASHTABLE_REHASH_FACTOR 2.0 / (HASHTABLE_LOW + HASHTABLE_HIGH)
  |  |  ------------------
  |  |  |  |   52|  12.2k|#define HASHTABLE_HIGH 0.50
  |  |  ------------------
  ------------------
  290|  12.2k|    if (new_size == ht->nbuckets) {
  ------------------
  |  Branch (290:9): [True: 0, False: 12.2k]
  ------------------
  291|      0|        return 0;
  292|      0|    }
  293|       |
  294|  12.2k|    size_t buckets_size = new_size * sizeof(ht->buckets[0]);
  295|  12.2k|    _Py_slist_t *new_buckets = ht->alloc.malloc(buckets_size);
  296|  12.2k|    if (new_buckets == NULL) {
  ------------------
  |  Branch (296:9): [True: 0, False: 12.2k]
  ------------------
  297|       |        /* memory allocation failed */
  298|      0|        return -1;
  299|      0|    }
  300|  12.2k|    memset(new_buckets, 0, buckets_size);
  301|       |
  302|   734k|    for (size_t bucket = 0; bucket < ht->nbuckets; bucket++) {
  ------------------
  |  Branch (302:29): [True: 722k, False: 12.2k]
  ------------------
  303|   722k|        _Py_hashtable_entry_t *entry = BUCKETS_HEAD(ht->buckets[bucket]);
  ------------------
  |  |   57|   722k|        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(SLIST)))
  |  |  ------------------
  |  |  |  |   23|   722k|#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_Py_slist_t *)(SLIST))->head)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   722k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  304|  1.08M|        while (entry != NULL) {
  ------------------
  |  Branch (304:16): [True: 361k, False: 722k]
  ------------------
  305|   361k|            assert(ht->hash_func(entry->key) == entry->key_hash);
  ------------------
  |  Branch (305:13): [True: 361k, False: 0]
  ------------------
  306|   361k|            _Py_hashtable_entry_t *next = ENTRY_NEXT(entry);
  ------------------
  |  |   61|   361k|        ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
  |  |  ------------------
  |  |  |  |   21|   361k|#define _Py_SLIST_ITEM_NEXT(ITEM) _Py_RVALUE(((_Py_slist_item_t *)(ITEM))->next)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   361k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  307|   361k|            size_t entry_index = entry->key_hash & (new_size - 1);
  308|       |
  309|   361k|            _Py_slist_prepend(&new_buckets[entry_index], (_Py_slist_item_t*)entry);
  310|       |
  311|   361k|            entry = next;
  312|   361k|        }
  313|   722k|    }
  314|       |
  315|  12.2k|    ht->alloc.free(ht->buckets);
  316|  12.2k|    ht->nbuckets = new_size;
  317|  12.2k|    ht->buckets = new_buckets;
  318|  12.2k|    return 0;
  319|  12.2k|}
hashtable.c:round_size:
  109|  12.2k|{
  110|  12.2k|    size_t i;
  111|  12.2k|    if (s < HASHTABLE_MIN_SIZE)
  ------------------
  |  |   51|  12.2k|#define HASHTABLE_MIN_SIZE 16
  ------------------
  |  Branch (111:9): [True: 0, False: 12.2k]
  ------------------
  112|      0|        return HASHTABLE_MIN_SIZE;
  ------------------
  |  |   51|      0|#define HASHTABLE_MIN_SIZE 16
  ------------------
  113|  12.2k|    i = 1;
  114|  85.7k|    while (i < s)
  ------------------
  |  Branch (114:12): [True: 73.4k, False: 12.2k]
  ------------------
  115|  73.4k|        i <<= 1;
  116|  12.2k|    return i;
  117|  12.2k|}
hashtable.c:_Py_hashtable_get_entry_ptr:
  163|  1.37M|{
  164|  1.37M|    Py_uhash_t key_hash = _Py_hashtable_hash_ptr(key);
  165|  1.37M|    size_t index = key_hash & (ht->nbuckets - 1);
  166|  1.37M|    _Py_hashtable_entry_t *entry = TABLE_HEAD(ht, index);
  ------------------
  |  |   59|  1.37M|        ((_Py_hashtable_entry_t *)_Py_SLIST_HEAD(&(HT)->buckets[BUCKET]))
  |  |  ------------------
  |  |  |  |   23|  1.37M|#define _Py_SLIST_HEAD(SLIST) _Py_RVALUE(((_Py_slist_t *)(SLIST))->head)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.37M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|  1.83M|    while (1) {
  ------------------
  |  Branch (167:12): [True: 1.83M, Folded]
  ------------------
  168|  1.83M|        if (entry == NULL) {
  ------------------
  |  Branch (168:13): [True: 885k, False: 947k]
  ------------------
  169|   885k|            return NULL;
  170|   885k|        }
  171|       |        // Compare directly keys (ignore entry->key_hash)
  172|   947k|        if (entry->key == key) {
  ------------------
  |  Branch (172:13): [True: 492k, False: 454k]
  ------------------
  173|   492k|            break;
  174|   492k|        }
  175|   454k|        entry = ENTRY_NEXT(entry);
  ------------------
  |  |   61|   454k|        ((_Py_hashtable_entry_t *)_Py_SLIST_ITEM_NEXT(ENTRY))
  |  |  ------------------
  |  |  |  |   21|   454k|#define _Py_SLIST_ITEM_NEXT(ITEM) _Py_RVALUE(((_Py_slist_item_t *)(ITEM))->next)
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   454k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|   454k|    }
  177|   492k|    return entry;
  178|  1.37M|}
hashtable.c:_Py_hashtable_destroy_entry:
  380|   442k|{
  381|   442k|    if (ht->key_destroy_func) {
  ------------------
  |  Branch (381:9): [True: 0, False: 442k]
  ------------------
  382|      0|        ht->key_destroy_func(entry->key);
  383|      0|    }
  384|   442k|    if (ht->value_destroy_func) {
  ------------------
  |  Branch (384:9): [True: 0, False: 442k]
  ------------------
  385|      0|        ht->value_destroy_func(entry->value);
  386|      0|    }
  387|   442k|    ht->alloc.free(entry);
  388|   442k|}

_PyImport_AcquireLock:
  154|  1.63k|{
  155|  1.63k|    _PyRecursiveMutex_Lock(&IMPORT_LOCK(interp));
  ------------------
  |  |  114|  1.63k|    (interp)->imports.lock
  ------------------
  156|  1.63k|}
_PyImport_ReleaseLock:
  160|  1.63k|{
  161|  1.63k|    _PyRecursiveMutex_Unlock(&IMPORT_LOCK(interp));
  ------------------
  |  |  114|  1.63k|    (interp)->imports.lock
  ------------------
  162|  1.63k|}
_PyImport_InitModules:
  178|      2|{
  179|      2|    assert(MODULES(interp) == NULL);
  ------------------
  |  Branch (179:5): [True: 2, False: 0]
  ------------------
  180|      2|    MODULES(interp) = PyDict_New();
  ------------------
  |  |   90|      2|    (interp)->imports.modules
  ------------------
  181|      2|    if (MODULES(interp) == NULL) {
  ------------------
  |  |   90|      2|    (interp)->imports.modules
  ------------------
  |  Branch (181:9): [True: 0, False: 2]
  ------------------
  182|      0|        return NULL;
  183|      0|    }
  184|      2|    return MODULES(interp);
  ------------------
  |  |   90|      2|    (interp)->imports.modules
  ------------------
  185|      2|}
_PyImport_GetModules:
  189|   145k|{
  190|   145k|    return MODULES(interp);
  ------------------
  |  |   90|   145k|    (interp)->imports.modules
  ------------------
  191|   145k|}
_PyImport_SetModuleString:
  250|      3|{
  251|      3|    PyThreadState *tstate = _PyThreadState_GET();
  252|       |    PyObject *modules = get_modules_dict(tstate, true);
  253|      3|    return PyMapping_SetItemString(modules, name, m);
  254|      3|}
_PyImport_InitLazyModules:
  273|      2|{
  274|      2|    assert(LAZY_MODULES(interp) == NULL &&
  ------------------
  |  Branch (274:5): [True: 2, False: 0]
  |  Branch (274:5): [True: 2, False: 0]
  ------------------
  275|      2|           LAZY_PENDING_SUBMODULES(interp) == NULL);
  276|       |
  277|      2|    LAZY_PENDING_SUBMODULES(interp) = PyDict_New();
  ------------------
  |  |   96|      2|    (interp)->imports.lazy_pending_submodules
  ------------------
  278|      2|    LAZY_MODULES(interp) = PySet_New(0);
  ------------------
  |  |   94|      2|    (interp)->imports.lazy_modules
  ------------------
  279|      2|    return LAZY_MODULES(interp);
  ------------------
  |  |   94|      2|    (interp)->imports.lazy_modules
  ------------------
  280|      2|}
PyImport_GetModule:
  354|   145k|{
  355|   145k|    PyThreadState *tstate = _PyThreadState_GET();
  356|   145k|    PyObject *mod;
  357|       |
  358|   145k|    mod = import_get_module(tstate, name);
  359|   145k|    if (mod != NULL && mod != Py_None) {
  ------------------
  |  |  616|   145k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (359:9): [True: 145k, False: 5]
  |  Branch (359:24): [True: 145k, False: 0]
  ------------------
  360|   145k|        if (import_ensure_initialized(tstate->interp, mod, name) < 0) {
  ------------------
  |  Branch (360:13): [True: 0, False: 145k]
  ------------------
  361|      0|            goto error;
  362|      0|        }
  363|       |        /* Verify the module is still in sys.modules. Another thread may have
  364|       |           removed it (due to import failure) between our import_get_module()
  365|       |           call and the _initializing check in import_ensure_initialized(). */
  366|   145k|        PyObject *mod_check = import_get_module(tstate, name);
  367|   145k|        if (mod_check != mod) {
  ------------------
  |  Branch (367:13): [True: 0, False: 145k]
  ------------------
  368|      0|            Py_XDECREF(mod_check);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  369|      0|            if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (369:17): [True: 0, False: 0]
  ------------------
  370|      0|                goto error;
  371|      0|            }
  372|       |            /* The module was removed or replaced. Return NULL to report
  373|       |               "not found" rather than trying to keep up with racing
  374|       |               modifications to sys.modules; returning the new value would
  375|       |               require looping to redo the ensure_initialized check. */
  376|      0|            Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|      0|            return NULL;
  378|      0|        }
  379|   145k|        Py_DECREF(mod_check);
  ------------------
  |  |  430|   145k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   145k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   145k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|   145k|    }
  381|   145k|    return mod;
  382|       |
  383|      0|error:
  384|      0|    Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      0|    remove_importlib_frames(tstate);
  386|       |    return NULL;
  387|   145k|}
PyImport_AddModuleRef:
  432|      4|{
  433|      4|    PyObject *name_obj = PyUnicode_FromString(name);
  434|      4|    if (name_obj == NULL) {
  ------------------
  |  Branch (434:9): [True: 0, False: 4]
  ------------------
  435|      0|        return NULL;
  436|      0|    }
  437|      4|    PyThreadState *tstate = _PyThreadState_GET();
  438|      4|    PyObject *module = import_add_module(tstate, name_obj);
  439|      4|    Py_DECREF(name_obj);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  440|      4|    return module;
  441|      4|}
PyImport_AddModuleObject:
  446|      2|{
  447|      2|    PyThreadState *tstate = _PyThreadState_GET();
  448|      2|    PyObject *mod = import_add_module(tstate, name);
  449|      2|    if (!mod) {
  ------------------
  |  Branch (449:9): [True: 0, False: 2]
  ------------------
  450|      0|        return NULL;
  451|      0|    }
  452|       |
  453|       |    // gh-86160: PyImport_AddModuleObject() returns a borrowed reference.
  454|       |    // Create a weak reference to produce a borrowed reference, since it can
  455|       |    // become NULL. sys.modules type can be different than dict and it is not
  456|       |    // guaranteed that it keeps a strong reference to the module. It can be a
  457|       |    // custom mapping with __getitem__() which returns a new object or removes
  458|       |    // returned object, or __setitem__ which does nothing. There is so much
  459|       |    // unknown.  With weakref we can be sure that we get either a reference to
  460|       |    // live object or NULL.
  461|       |    //
  462|       |    // Use PyImport_AddModuleRef() to avoid these issues.
  463|      2|    PyObject *ref = PyWeakref_NewRef(mod, NULL);
  464|      2|    Py_DECREF(mod);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  465|      2|    if (ref == NULL) {
  ------------------
  |  Branch (465:9): [True: 0, False: 2]
  ------------------
  466|      0|        return NULL;
  467|      0|    }
  468|      2|    mod = _PyWeakref_GET_REF(ref);
  469|      2|    Py_DECREF(ref);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      2|    Py_XDECREF(mod);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|       |
  472|      2|    if (mod == NULL && !PyErr_Occurred()) {
  ------------------
  |  Branch (472:9): [True: 0, False: 2]
  |  Branch (472:24): [True: 0, False: 0]
  ------------------
  473|      0|        PyErr_SetString(PyExc_RuntimeError,
  474|      0|                        "sys.modules does not hold a strong reference "
  475|      0|                        "to the module");
  476|      0|    }
  477|      2|    return mod; /* borrowed reference */
  478|      2|}
_PyImport_GetNextModuleIndex:
  525|     51|{
  526|     51|    return _Py_atomic_add_ssize(&LAST_MODULE_INDEX, 1) + 1;
  ------------------
  |  |   81|     51|#define LAST_MODULE_INDEX _PyRuntime.imports.last_module_index
  ------------------
  527|     51|}
_PyImport_ResolveNameWithPackageContext:
  904|      8|{
  905|      8|    if (PKGCONTEXT != NULL) {
  ------------------
  |  |  900|      8|# define PKGCONTEXT pkgcontext
  ------------------
  |  Branch (905:9): [True: 0, False: 8]
  ------------------
  906|      0|        const char *p = strrchr(PKGCONTEXT, '.');
  ------------------
  |  |  900|      0|# define PKGCONTEXT pkgcontext
  ------------------
  907|      0|        if (p != NULL && strcmp(name, p+1) == 0) {
  ------------------
  |  Branch (907:13): [True: 0, False: 0]
  |  Branch (907:26): [True: 0, False: 0]
  ------------------
  908|      0|            name = PKGCONTEXT;
  ------------------
  |  |  900|      0|# define PKGCONTEXT pkgcontext
  ------------------
  909|      0|            PKGCONTEXT = NULL;
  ------------------
  |  |  900|      0|# define PKGCONTEXT pkgcontext
  ------------------
  910|      0|        }
  911|      0|    }
  912|      8|    return name;
  913|      8|}
_PyImport_SwapPackageContext:
  917|     86|{
  918|     86|    const char *oldcontext = PKGCONTEXT;
  ------------------
  |  |  900|     86|# define PKGCONTEXT pkgcontext
  ------------------
  919|     86|    PKGCONTEXT = newcontext;
  ------------------
  |  |  900|     86|# define PKGCONTEXT pkgcontext
  ------------------
  920|     86|    return oldcontext;
  921|     86|}
_PyImport_GetDLOpenFlags:
  926|     20|{
  927|     20|    return FT_ATOMIC_LOAD_INT_RELAXED(DLOPENFLAGS(interp));
  ------------------
  |  |  186|     20|#define FT_ATOMIC_LOAD_INT_RELAXED(value) value
  ------------------
  928|     20|}
_PyImport_FixupBuiltin:
 2408|      4|{
 2409|      4|    int res = -1;
 2410|      4|    assert(mod != NULL && PyModule_Check(mod));
  ------------------
  |  Branch (2410:5): [True: 4, False: 0]
  |  Branch (2410:5): [True: 4, False: 0]
  ------------------
 2411|       |
 2412|      4|    PyObject *nameobj;
 2413|      4|    nameobj = PyUnicode_InternFromString(name);
 2414|      4|    if (nameobj == NULL) {
  ------------------
  |  Branch (2414:9): [True: 0, False: 4]
  ------------------
 2415|      0|        return -1;
 2416|      0|    }
 2417|       |
 2418|      4|    PyModuleDef *def = _PyModule_GetDefOrNull(mod);
 2419|      4|    if (def == NULL) {
  ------------------
  |  Branch (2419:9): [True: 0, False: 4]
  ------------------
 2420|      0|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (2420:9): [True: 0, False: 0]
  ------------------
 2421|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 2422|      0|        goto finally;
 2423|      0|    }
 2424|       |
 2425|       |    /* We only use _PyImport_FixupBuiltin() for the core builtin modules
 2426|       |     * (sys and builtins).  These modules are single-phase init with no
 2427|       |     * module state, but we also don't populate def->m_base.m_copy
 2428|       |     * for them. */
 2429|      4|    assert(is_core_module(tstate->interp, nameobj, nameobj));
  ------------------
  |  Branch (2429:5): [True: 4, False: 0]
  ------------------
 2430|      4|    assert_singlephase_def(def);
  ------------------
  |  | 1805|      4|    do {                                                            \
  |  | 1806|      4|        _Py_ext_module_kind kind = _get_extension_kind(def, true);  \
  |  | 1807|      4|        assert(kind == _Py_ext_module_kind_SINGLEPHASE              \
  |  | 1808|      4|                || kind == _Py_ext_module_kind_UNKNOWN);            \
  |  | 1809|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1809:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (2430:5): [True: 4, False: 0]
  |  Branch (2430:5): [True: 0, False: 0]
  ------------------
 2431|      4|    assert(def->m_size == -1);
  ------------------
  |  Branch (2431:5): [True: 4, False: 0]
  ------------------
 2432|      4|    assert(def->m_base.m_copy == NULL);
  ------------------
  |  Branch (2432:5): [True: 4, False: 0]
  ------------------
 2433|      4|    assert(def->m_base.m_index >= 0);
  ------------------
  |  Branch (2433:5): [True: 4, False: 0]
  ------------------
 2434|       |
 2435|       |    /* We aren't using import_find_extension() for core modules,
 2436|       |     * so we have to do the extra check to make sure the module
 2437|       |     * isn't already in the global cache before calling
 2438|       |     * update_global_state_for_extension(). */
 2439|      4|    struct extensions_cache_value *cached
 2440|      4|            = _extensions_cache_get(nameobj, nameobj);
 2441|      4|    if (cached == NULL) {
  ------------------
  |  Branch (2441:9): [True: 4, False: 0]
  ------------------
 2442|      4|        struct singlephase_global_update singlephase = {
 2443|      4|            .m_index=def->m_base.m_index,
 2444|       |            /* We don't want def->m_base.m_copy populated. */
 2445|      4|            .m_dict=NULL,
 2446|      4|            .origin=_Py_ext_module_origin_CORE,
 2447|       |#ifdef Py_GIL_DISABLED
 2448|       |            /* Unused when m_dict == NULL. */
 2449|       |            .md_requires_gil=false,
 2450|       |#endif
 2451|      4|        };
 2452|      4|        cached = update_global_state_for_extension(
 2453|      4|                tstate, nameobj, nameobj, def, &singlephase);
 2454|      4|        if (cached == NULL) {
  ------------------
  |  Branch (2454:13): [True: 0, False: 4]
  ------------------
 2455|      0|            goto finally;
 2456|      0|        }
 2457|      4|    }
 2458|       |
 2459|      4|    if (finish_singlephase_extension(tstate, mod, cached, nameobj, modules) < 0) {
  ------------------
  |  Branch (2459:9): [True: 0, False: 4]
  ------------------
 2460|      0|        goto finally;
 2461|      0|    }
 2462|       |
 2463|      4|    res = 0;
 2464|       |
 2465|      4|finally:
 2466|      4|    Py_DECREF(nameobj);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2467|      4|    return res;
 2468|      4|}
_PyImport_GetBuiltinModuleNames:
 2713|      2|{
 2714|      2|    PyObject *list = PyList_New(0);
 2715|      2|    if (list == NULL) {
  ------------------
  |  Branch (2715:9): [True: 0, False: 2]
  ------------------
 2716|      0|        return NULL;
 2717|      0|    }
 2718|      2|    struct _inittab *inittab = INITTAB;
  ------------------
  |  |   80|      2|#define INITTAB _PyRuntime.imports.inittab
  ------------------
 2719|     78|    for (Py_ssize_t i = 0; inittab[i].name != NULL; i++) {
  ------------------
  |  Branch (2719:28): [True: 76, False: 2]
  ------------------
 2720|     76|        PyObject *name = PyUnicode_FromString(inittab[i].name);
 2721|     76|        if (name == NULL) {
  ------------------
  |  Branch (2721:13): [True: 0, False: 76]
  ------------------
 2722|      0|            Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2723|      0|            return NULL;
 2724|      0|        }
 2725|     76|        if (PyList_Append(list, name) < 0) {
  ------------------
  |  Branch (2725:13): [True: 0, False: 76]
  ------------------
 2726|      0|            Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2727|      0|            Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2728|      0|            return NULL;
 2729|      0|        }
 2730|     76|        Py_DECREF(name);
  ------------------
  |  |  430|     76|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     76|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     76|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2731|     76|    }
 2732|      2|    return list;
 2733|      2|}
PyImport_ImportFrozenModuleObject:
 3258|      4|{
 3259|      4|    PyThreadState *tstate = _PyThreadState_GET();
 3260|      4|    PyObject *co, *m, *d = NULL;
 3261|      4|    int err;
 3262|       |
 3263|      4|    struct frozen_info info;
 3264|      4|    frozen_status status = find_frozen(name, &info);
 3265|      4|    if (status == FROZEN_NOT_FOUND || status == FROZEN_DISABLED) {
  ------------------
  |  Branch (3265:9): [True: 0, False: 4]
  |  Branch (3265:39): [True: 0, False: 4]
  ------------------
 3266|      0|        return 0;
 3267|      0|    }
 3268|      4|    else if (status == FROZEN_BAD_NAME) {
  ------------------
  |  Branch (3268:14): [True: 0, False: 4]
  ------------------
 3269|      0|        return 0;
 3270|      0|    }
 3271|      4|    else if (status != FROZEN_OKAY) {
  ------------------
  |  Branch (3271:14): [True: 0, False: 4]
  ------------------
 3272|      0|        set_frozen_error(status, name);
 3273|      0|        return -1;
 3274|      0|    }
 3275|      4|    co = unmarshal_frozen_code(tstate->interp, &info);
 3276|      4|    if (co == NULL) {
  ------------------
  |  Branch (3276:9): [True: 0, False: 4]
  ------------------
 3277|      0|        return -1;
 3278|      0|    }
 3279|      4|    if (info.is_package) {
  ------------------
  |  Branch (3279:9): [True: 0, False: 4]
  ------------------
 3280|       |        /* Set __path__ to the empty list */
 3281|      0|        PyObject *l;
 3282|      0|        m = import_add_module(tstate, name);
 3283|      0|        if (m == NULL)
  ------------------
  |  Branch (3283:13): [True: 0, False: 0]
  ------------------
 3284|      0|            goto err_return;
 3285|      0|        d = PyModule_GetDict(m);
 3286|      0|        l = PyList_New(0);
 3287|      0|        if (l == NULL) {
  ------------------
  |  Branch (3287:13): [True: 0, False: 0]
  ------------------
 3288|      0|            Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3289|      0|            goto err_return;
 3290|      0|        }
 3291|      0|        err = PyDict_SetItemString(d, "__path__", l);
 3292|      0|        Py_DECREF(l);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3293|      0|        Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3294|      0|        if (err != 0)
  ------------------
  |  Branch (3294:13): [True: 0, False: 0]
  ------------------
 3295|      0|            goto err_return;
 3296|      0|    }
 3297|      4|    d = module_dict_for_exec(tstate, name);
 3298|      4|    if (d == NULL) {
  ------------------
  |  Branch (3298:9): [True: 0, False: 4]
  ------------------
 3299|      0|        goto err_return;
 3300|      0|    }
 3301|      4|    m = exec_code_in_module(tstate, name, d, co);
 3302|      4|    if (m == NULL) {
  ------------------
  |  Branch (3302:9): [True: 0, False: 4]
  ------------------
 3303|      0|        goto err_return;
 3304|      0|    }
 3305|      4|    Py_DECREF(m);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3306|       |    /* Set __origname__ (consumed in FrozenImporter._setup_module()). */
 3307|      4|    PyObject *origname;
 3308|      4|    if (info.origname) {
  ------------------
  |  Branch (3308:9): [True: 4, False: 0]
  ------------------
 3309|      4|        origname = PyUnicode_FromString(info.origname);
 3310|      4|        if (origname == NULL) {
  ------------------
  |  Branch (3310:13): [True: 0, False: 4]
  ------------------
 3311|      0|            goto err_return;
 3312|      0|        }
 3313|      4|    }
 3314|      0|    else {
 3315|      0|        origname = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3316|      0|    }
 3317|      4|    err = PyDict_SetItemString(d, "__origname__", origname);
 3318|      4|    Py_DECREF(origname);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3319|      4|    if (err != 0) {
  ------------------
  |  Branch (3319:9): [True: 0, False: 4]
  ------------------
 3320|      0|        goto err_return;
 3321|      0|    }
 3322|      4|    Py_DECREF(d);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3323|      4|    Py_DECREF(co);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3324|      4|    return 1;
 3325|       |
 3326|      0|err_return:
 3327|      0|    Py_XDECREF(d);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3328|      0|    Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3329|      0|    return -1;
 3330|      4|}
PyImport_ImportFrozenModule:
 3334|      4|{
 3335|      4|    PyObject *nameobj;
 3336|      4|    int ret;
 3337|      4|    nameobj = PyUnicode_InternFromString(name);
 3338|      4|    if (nameobj == NULL)
  ------------------
  |  Branch (3338:9): [True: 0, False: 4]
  ------------------
 3339|      0|        return -1;
 3340|      4|    ret = PyImport_ImportFrozenModuleObject(nameobj);
 3341|      4|    Py_DECREF(nameobj);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3342|      4|    return ret;
 3343|      4|}
_PyImport_GetImportlibLoader:
 3473|      2|{
 3474|      2|    return PyObject_GetAttrString(IMPORTLIB(interp), loader_name);
  ------------------
  |  |   98|      2|    (interp)->imports.importlib
  ------------------
 3475|      2|}
_PyImport_InitDefaultImportFunc:
 3602|      2|{
 3603|       |    // Get the __import__ function
 3604|      2|    PyObject *import_func;
 3605|      2|    if (PyDict_GetItemStringRef(interp->builtins, "__import__", &import_func) <= 0) {
  ------------------
  |  Branch (3605:9): [True: 0, False: 2]
  ------------------
 3606|      0|        return -1;
 3607|      0|    }
 3608|      2|    IMPORT_FUNC(interp) = import_func;
  ------------------
  |  |  108|      2|    (interp)->imports.import_func
  ------------------
 3609|       |
 3610|       |    // Get the __lazy_import__ function
 3611|      2|    if (PyDict_GetItemStringRef(interp->builtins, "__lazy_import__",
  ------------------
  |  Branch (3611:9): [True: 0, False: 2]
  ------------------
 3612|      2|                                &import_func) <= 0) {
 3613|      0|        return -1;
 3614|      0|    }
 3615|      2|    LAZY_IMPORT_FUNC(interp) = import_func;
  ------------------
  |  |  111|      2|    (interp)->imports.lazy_import_func
  ------------------
 3616|      2|    return 0;
 3617|      2|}
_PyImport_IsDefaultImportFunc:
 3621|   194k|{
 3622|   194k|    return func == IMPORT_FUNC(interp);
  ------------------
  |  |  108|   194k|    (interp)->imports.import_func
  ------------------
 3623|   194k|}
_PyImport_IsDefaultLazyImportFunc:
 3627|     11|{
 3628|     11|    return func == LAZY_IMPORT_FUNC(interp);
  ------------------
  |  |  111|     11|    (interp)->imports.lazy_import_func
  ------------------
 3629|     11|}
PyImport_ImportModule:
 3636|    187|{
 3637|    187|    PyObject *pname;
 3638|    187|    PyObject *result;
 3639|       |
 3640|    187|    pname = PyUnicode_FromString(name);
 3641|    187|    if (pname == NULL)
  ------------------
  |  Branch (3641:9): [True: 0, False: 187]
  ------------------
 3642|      0|        return NULL;
 3643|    187|    result = PyImport_Import(pname);
 3644|    187|    Py_DECREF(pname);
  ------------------
  |  |  430|    187|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    187|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    187|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3645|    187|    return result;
 3646|    187|}
PyImport_ImportModuleLevelObject:
 4209|   298k|{
 4210|   298k|    PyThreadState *tstate = _PyThreadState_GET();
 4211|   298k|    PyObject *abs_name = NULL;
 4212|   298k|    PyObject *final_mod = NULL;
 4213|   298k|    PyObject *mod = NULL;
 4214|   298k|    PyInterpreterState *interp = tstate->interp;
 4215|   298k|    int has_from;
 4216|       |
 4217|   298k|    if (name == NULL) {
  ------------------
  |  Branch (4217:9): [True: 0, False: 298k]
  ------------------
 4218|      0|        _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
 4219|      0|        goto error;
 4220|      0|    }
 4221|       |
 4222|       |    /* The below code is importlib.__import__() & _gcd_import(), ported to C
 4223|       |       for added performance. */
 4224|       |
 4225|   298k|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|   298k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|   298k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4225:9): [True: 0, False: 298k]
  ------------------
 4226|      0|        _PyErr_SetString(tstate, PyExc_TypeError,
 4227|      0|                         "module name must be a string");
 4228|      0|        goto error;
 4229|      0|    }
 4230|   298k|    if (level < 0) {
  ------------------
  |  Branch (4230:9): [True: 0, False: 298k]
  ------------------
 4231|      0|        _PyErr_SetString(tstate, PyExc_ValueError, "level must be >= 0");
 4232|      0|        goto error;
 4233|      0|    }
 4234|       |
 4235|   298k|    abs_name = get_abs_name(tstate, name, globals, level);
 4236|   298k|    if (abs_name == NULL) {
  ------------------
  |  Branch (4236:9): [True: 0, False: 298k]
  ------------------
 4237|      0|        goto error;
 4238|      0|    }
 4239|       |
 4240|   298k|    mod = import_get_module(tstate, abs_name);
 4241|   298k|    if (mod == NULL && _PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4241:9): [True: 336, False: 297k]
  |  Branch (4241:24): [True: 0, False: 336]
  ------------------
 4242|      0|        goto error;
 4243|      0|    }
 4244|       |
 4245|   298k|    if (mod != NULL && mod != Py_None) {
  ------------------
  |  |  616|   297k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (4245:9): [True: 297k, False: 336]
  |  Branch (4245:24): [True: 297k, False: 0]
  ------------------
 4246|   297k|        if (import_ensure_initialized(tstate->interp, mod, abs_name) < 0) {
  ------------------
  |  Branch (4246:13): [True: 0, False: 297k]
  ------------------
 4247|      0|            goto error;
 4248|      0|        }
 4249|       |        /* Verify the module is still in sys.modules. Another thread may have
 4250|       |           removed it (due to import failure) between our import_get_module()
 4251|       |           call and the _initializing check in import_ensure_initialized().
 4252|       |           If removed, we retry the import to preserve normal semantics: the
 4253|       |           caller gets the exception from the actual import failure rather
 4254|       |           than a synthetic error. */
 4255|   297k|        PyObject *mod_check = import_get_module(tstate, abs_name);
 4256|   297k|        if (mod_check != mod) {
  ------------------
  |  Branch (4256:13): [True: 0, False: 297k]
  ------------------
 4257|      0|            Py_XDECREF(mod_check);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4258|      0|            if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4258:17): [True: 0, False: 0]
  ------------------
 4259|      0|                goto error;
 4260|      0|            }
 4261|      0|            Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4262|      0|            mod = import_find_and_load(tstate, abs_name);
 4263|      0|            if (mod == NULL) {
  ------------------
  |  Branch (4263:17): [True: 0, False: 0]
  ------------------
 4264|      0|                goto error;
 4265|      0|            }
 4266|      0|        }
 4267|   297k|        else {
 4268|   297k|            Py_DECREF(mod_check);
  ------------------
  |  |  430|   297k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   297k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   297k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4269|   297k|        }
 4270|   297k|    }
 4271|    336|    else {
 4272|    336|        Py_XDECREF(mod);
  ------------------
  |  |  524|    336|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    336|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    336|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4273|    336|        mod = import_find_and_load(tstate, abs_name);
 4274|    336|        if (mod == NULL) {
  ------------------
  |  Branch (4274:13): [True: 184, False: 152]
  ------------------
 4275|    184|            goto error;
 4276|    184|        }
 4277|    336|    }
 4278|       |
 4279|   297k|    has_from = 0;
 4280|   297k|    if (fromlist != NULL && fromlist != Py_None) {
  ------------------
  |  |  616|   246k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (4280:9): [True: 246k, False: 51.6k]
  |  Branch (4280:29): [True: 52.0k, False: 194k]
  ------------------
 4281|  52.0k|        has_from = PyObject_IsTrue(fromlist);
 4282|  52.0k|        if (has_from < 0)
  ------------------
  |  Branch (4282:13): [True: 0, False: 52.0k]
  ------------------
 4283|      0|            goto error;
 4284|  52.0k|    }
 4285|   297k|    if (!has_from) {
  ------------------
  |  Branch (4285:9): [True: 297k, False: 253]
  ------------------
 4286|   297k|        Py_ssize_t len = PyUnicode_GET_LENGTH(name);
  ------------------
  |  |  299|   297k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   297k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   297k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4287|   297k|        if (level == 0 || len > 0) {
  ------------------
  |  Branch (4287:13): [True: 297k, False: 0]
  |  Branch (4287:27): [True: 0, False: 0]
  ------------------
 4288|   297k|            Py_ssize_t dot;
 4289|       |
 4290|   297k|            dot = PyUnicode_FindChar(name, '.', 0, len, 1);
 4291|   297k|            if (dot == -2) {
  ------------------
  |  Branch (4291:17): [True: 0, False: 297k]
  ------------------
 4292|      0|                goto error;
 4293|      0|            }
 4294|       |
 4295|   297k|            if (dot == -1) {
  ------------------
  |  Branch (4295:17): [True: 297k, False: 5]
  ------------------
 4296|       |                /* No dot in module name, simple exit */
 4297|   297k|                final_mod = Py_NewRef(mod);
  ------------------
  |  |  550|   297k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   297k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   297k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4298|   297k|                goto error;
 4299|   297k|            }
 4300|       |
 4301|      5|            if (level == 0) {
  ------------------
  |  Branch (4301:17): [True: 5, False: 0]
  ------------------
 4302|      5|                PyObject *front = PyUnicode_Substring(name, 0, dot);
 4303|      5|                if (front == NULL) {
  ------------------
  |  Branch (4303:21): [True: 0, False: 5]
  ------------------
 4304|      0|                    goto error;
 4305|      0|                }
 4306|       |
 4307|      5|                final_mod = PyImport_ImportModuleLevelObject(front, NULL, NULL, NULL, 0);
 4308|      5|                Py_DECREF(front);
  ------------------
  |  |  430|      5|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4309|      5|            }
 4310|      0|            else {
 4311|      0|                Py_ssize_t cut_off = len - dot;
 4312|      0|                Py_ssize_t abs_name_len = PyUnicode_GET_LENGTH(abs_name);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4313|      0|                PyObject *to_return = PyUnicode_Substring(abs_name, 0,
 4314|      0|                                                        abs_name_len - cut_off);
 4315|      0|                if (to_return == NULL) {
  ------------------
  |  Branch (4315:21): [True: 0, False: 0]
  ------------------
 4316|      0|                    goto error;
 4317|      0|                }
 4318|       |
 4319|      0|                final_mod = import_get_module(tstate, to_return);
 4320|      0|                if (final_mod == NULL) {
  ------------------
  |  Branch (4320:21): [True: 0, False: 0]
  ------------------
 4321|      0|                    if (!_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4321:25): [True: 0, False: 0]
  ------------------
 4322|      0|                        _PyErr_Format(tstate, PyExc_KeyError,
 4323|      0|                                      "%R not in sys.modules as expected",
 4324|      0|                                      to_return);
 4325|      0|                    }
 4326|      0|                    Py_DECREF(to_return);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4327|      0|                    goto error;
 4328|      0|                }
 4329|       |
 4330|      0|                Py_DECREF(to_return);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4331|      0|            }
 4332|      5|        }
 4333|      0|        else {
 4334|      0|            final_mod = Py_NewRef(mod);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4335|      0|        }
 4336|   297k|    }
 4337|    253|    else {
 4338|    253|        int has_path = PyObject_HasAttrWithError(mod, &_Py_ID(__path__));
  ------------------
  |  |  936|    253|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    253|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    253|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4339|    253|        if (has_path < 0) {
  ------------------
  |  Branch (4339:13): [True: 0, False: 253]
  ------------------
 4340|      0|            goto error;
 4341|      0|        }
 4342|    253|        if (has_path) {
  ------------------
  |  Branch (4342:13): [True: 8, False: 245]
  ------------------
 4343|      8|            final_mod = PyObject_CallMethodObjArgs(
 4344|      8|                        IMPORTLIB(interp), &_Py_ID(_handle_fromlist),
  ------------------
  |  |   98|      8|    (interp)->imports.importlib
  ------------------
                                      IMPORTLIB(interp), &_Py_ID(_handle_fromlist),
  ------------------
  |  |  936|      8|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      8|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      8|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4345|      8|                        mod, fromlist, IMPORT_FUNC(interp), NULL);
  ------------------
  |  |  108|      8|    (interp)->imports.import_func
  ------------------
 4346|      8|        }
 4347|    245|        else {
 4348|    245|            final_mod = Py_NewRef(mod);
  ------------------
  |  |  550|    245|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    245|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    245|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4349|    245|        }
 4350|    253|    }
 4351|       |
 4352|   298k|  error:
 4353|   298k|    Py_XDECREF(abs_name);
  ------------------
  |  |  524|   298k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   298k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   298k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4354|   298k|    Py_XDECREF(mod);
  ------------------
  |  |  524|   298k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   298k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   298k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4355|   298k|    if (final_mod == NULL) {
  ------------------
  |  Branch (4355:9): [True: 184, False: 297k]
  ------------------
 4356|    184|        remove_importlib_frames(tstate);
 4357|    184|    }
 4358|   298k|    return final_mod;
 4359|   297k|}
_PyImport_TryLoadLazySubmodule:
 4469|    700|{
 4470|    700|    assert(result != NULL);
  ------------------
  |  Branch (4470:5): [True: 700, False: 0]
  ------------------
 4471|    700|    *result = NULL;
 4472|       |
 4473|    700|    PyThreadState *tstate = _PyThreadState_GET();
 4474|    700|    PyInterpreterState *interp = tstate->interp;
 4475|    700|    PyObject *lazy_pending = LAZY_PENDING_SUBMODULES(interp);
  ------------------
  |  |   96|    700|    (interp)->imports.lazy_pending_submodules
  ------------------
 4476|    700|    if (lazy_pending == NULL) {
  ------------------
  |  Branch (4476:9): [True: 0, False: 700]
  ------------------
 4477|      0|        return _Py_LAZY_SUBMODULE_NOT_FOUND;
 4478|      0|    }
 4479|       |
 4480|    700|    PyObject *pending_set;
 4481|    700|    int rc = PyDict_GetItemRef(lazy_pending, mod_name, &pending_set);
 4482|    700|    if (rc < 0) {
  ------------------
  |  Branch (4482:9): [True: 0, False: 700]
  ------------------
 4483|      0|        return _Py_LAZY_SUBMODULE_ERROR;
 4484|      0|    }
 4485|    700|    if (rc == 0) {
  ------------------
  |  Branch (4485:9): [True: 696, False: 4]
  ------------------
 4486|    696|        return _Py_LAZY_SUBMODULE_NOT_FOUND;
 4487|    696|    }
 4488|       |
 4489|      4|    int contains = PySet_Contains(pending_set, attr_name);
 4490|      4|    if (contains < 0) {
  ------------------
  |  Branch (4490:9): [True: 0, False: 4]
  ------------------
 4491|      0|        Py_DECREF(pending_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4492|      0|        return _Py_LAZY_SUBMODULE_ERROR;
 4493|      0|    }
 4494|      4|    if (contains == 0) {
  ------------------
  |  Branch (4494:9): [True: 4, False: 0]
  ------------------
 4495|      4|        Py_DECREF(pending_set);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4496|      4|        return _Py_LAZY_SUBMODULE_NOT_FOUND;
 4497|      4|    }
 4498|       |
 4499|      0|    PyObject *full_name = PyUnicode_FromFormat("%U.%U", mod_name, attr_name);
 4500|      0|    if (full_name == NULL) {
  ------------------
  |  Branch (4500:9): [True: 0, False: 0]
  ------------------
 4501|      0|        Py_DECREF(pending_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4502|      0|        return _Py_LAZY_SUBMODULE_ERROR;
 4503|      0|    }
 4504|       |
 4505|      0|    PyObject *mod = import_find_and_load_with_name(
 4506|      0|        tstate, full_name, &_Py_ID(_find_and_load_lazy_submodule), Py_None);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      tstate, full_name, &_Py_ID(_find_and_load_lazy_submodule), Py_None);
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 4507|      0|    if (mod == NULL) {
  ------------------
  |  Branch (4507:9): [True: 0, False: 0]
  ------------------
 4508|      0|        Py_DECREF(pending_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4509|      0|        Py_DECREF(full_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4510|      0|        remove_importlib_frames(tstate);
 4511|      0|        return _Py_LAZY_SUBMODULE_ERROR;
 4512|      0|    }
 4513|      0|    if (mod == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (4513:9): [True: 0, False: 0]
  ------------------
 4514|      0|        Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4515|      0|        Py_DECREF(pending_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4516|      0|        Py_DECREF(full_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4517|      0|        return _Py_LAZY_SUBMODULE_NOT_FOUND;
 4518|      0|    }
 4519|       |
 4520|      0|    if (PySet_Discard(pending_set, attr_name) < 0) {
  ------------------
  |  Branch (4520:9): [True: 0, False: 0]
  ------------------
 4521|      0|        Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4522|      0|        Py_DECREF(pending_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4523|      0|        Py_DECREF(full_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4524|      0|        return _Py_LAZY_SUBMODULE_ERROR;
 4525|      0|    }
 4526|      0|    Py_DECREF(pending_set);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4527|      0|    Py_DECREF(full_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4528|      0|    *result = mod;
 4529|      0|    return _Py_LAZY_SUBMODULE_LOADED;
 4530|      0|}
_PyImport_LazyImportModuleLevelObject:
 4537|     11|{
 4538|     11|    assert(name != NULL);
  ------------------
  |  Branch (4538:5): [True: 11, False: 0]
  ------------------
 4539|     11|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|     11|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     11|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (4539:9): [True: 0, False: 11]
  ------------------
 4540|      0|        _PyErr_Format(tstate, PyExc_TypeError,
 4541|      0|                      "module name must be a string, got %T", name);
 4542|      0|        return NULL;
 4543|      0|    }
 4544|     11|    if (level < 0) {
  ------------------
  |  Branch (4544:9): [True: 0, False: 11]
  ------------------
 4545|      0|        _PyErr_SetString(tstate, PyExc_ValueError, "level must be >= 0");
 4546|      0|        return NULL;
 4547|      0|    }
 4548|       |
 4549|     11|    PyObject *abs_name = get_abs_name(tstate, name, globals, level);
 4550|     11|    if (abs_name == NULL) {
  ------------------
  |  Branch (4550:9): [True: 0, False: 11]
  ------------------
 4551|      0|        return NULL;
 4552|      0|    }
 4553|       |
 4554|     11|    PyInterpreterState *interp = tstate->interp;
 4555|     11|    _PyInterpreterFrame *frame = _PyEval_GetFrame();
 4556|     11|    if (frame == NULL || frame->f_globals != frame->f_locals) {
  ------------------
  |  Branch (4556:9): [True: 0, False: 11]
  |  Branch (4556:26): [True: 0, False: 11]
  ------------------
 4557|      0|        Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4558|      0|        PyErr_SetString(PyExc_SyntaxError,
 4559|      0|                        "'lazy import' is only allowed at module level");
 4560|      0|        return NULL;
 4561|      0|    }
 4562|       |
 4563|       |    // Check if the filter disables the lazy import.
 4564|       |    // We must hold a reference to the filter while calling it to prevent
 4565|       |    // use-after-free if another thread replaces it via
 4566|       |    // PyImport_SetLazyImportsFilter.
 4567|     11|    LAZY_IMPORTS_LOCK(interp);
 4568|     11|    PyObject *filter = Py_XNewRef(LAZY_IMPORTS_FILTER(interp));
  ------------------
  |  |  551|     11|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4569|     11|    LAZY_IMPORTS_UNLOCK(interp);
 4570|       |
 4571|     11|    if (filter != NULL) {
  ------------------
  |  Branch (4571:9): [True: 0, False: 11]
  ------------------
 4572|      0|        PyObject *modname;
 4573|      0|        if (PyDict_GetItemRef(globals, &_Py_ID(__name__), &modname) < 0) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4573:13): [True: 0, False: 0]
  ------------------
 4574|      0|            Py_DECREF(filter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4575|      0|            Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4576|      0|            return NULL;
 4577|      0|        }
 4578|      0|        if (modname == NULL) {
  ------------------
  |  Branch (4578:13): [True: 0, False: 0]
  ------------------
 4579|      0|            assert(!PyErr_Occurred());
  ------------------
  |  Branch (4579:13): [True: 0, False: 0]
  ------------------
 4580|      0|            modname = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4581|      0|        }
 4582|      0|        if (fromlist == NULL) {
  ------------------
  |  Branch (4582:13): [True: 0, False: 0]
  ------------------
 4583|      0|            assert(!PyErr_Occurred());
  ------------------
  |  Branch (4583:13): [True: 0, False: 0]
  ------------------
 4584|      0|            fromlist = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 4585|      0|        }
 4586|      0|        PyObject *args[] = {modname, abs_name, fromlist};
 4587|      0|        PyObject *res = PyObject_Vectorcall(filter, args, 3, NULL);
 4588|       |
 4589|      0|        Py_DECREF(modname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4590|      0|        Py_DECREF(filter);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4591|       |
 4592|      0|        if (res == NULL) {
  ------------------
  |  Branch (4592:13): [True: 0, False: 0]
  ------------------
 4593|      0|            Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4594|      0|            return NULL;
 4595|      0|        }
 4596|       |
 4597|      0|        int is_true = PyObject_IsTrue(res);
 4598|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4599|       |
 4600|      0|        if (is_true < 0) {
  ------------------
  |  Branch (4600:13): [True: 0, False: 0]
  ------------------
 4601|      0|            Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4602|      0|            return NULL;
 4603|      0|        }
 4604|      0|        if (!is_true) {
  ------------------
  |  Branch (4604:13): [True: 0, False: 0]
  ------------------
 4605|      0|            Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4606|      0|            return PyImport_ImportModuleLevelObject(
 4607|      0|                name, globals, locals, fromlist, level
 4608|      0|            );
 4609|      0|        }
 4610|      0|    }
 4611|       |
 4612|       |    // here, 'filter' is either NULL or is equivalent to a borrowed reference
 4613|     11|    if (fromlist && PyUnicode_Check(fromlist)) {
  ------------------
  |  |  103|     11|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     11|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4613:9): [True: 11, False: 0]
  ------------------
 4614|      0|        fromlist = PyTuple_Pack(1, fromlist);
 4615|      0|        if (fromlist == NULL) {
  ------------------
  |  Branch (4615:13): [True: 0, False: 0]
  ------------------
 4616|      0|            Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4617|      0|            return NULL;
 4618|      0|        }
 4619|      0|    }
 4620|     11|    else {
 4621|     11|        Py_XINCREF(fromlist);
  ------------------
  |  |  514|     11|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4622|     11|    }
 4623|     11|    PyObject *res = _PyLazyImport_New(frame, builtins, abs_name, fromlist);
 4624|     11|    if (res == NULL) {
  ------------------
  |  Branch (4624:9): [True: 0, False: 11]
  ------------------
 4625|      0|        Py_XDECREF(fromlist);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4626|      0|        Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4627|      0|        return NULL;
 4628|      0|    }
 4629|       |
 4630|       |    // Add the module name to sys.lazy_modules set (PEP 810).
 4631|     11|    PyObject *lazy_modules = LAZY_MODULES(tstate->interp);
  ------------------
  |  |   94|     11|    (interp)->imports.lazy_modules
  ------------------
 4632|     11|    if (PySet_Add(lazy_modules, abs_name) < 0) {
  ------------------
  |  Branch (4632:9): [True: 0, False: 11]
  ------------------
 4633|      0|        goto error;
 4634|      0|    }
 4635|       |
 4636|     11|    if (fromlist && PyTuple_Check(fromlist) && PyTuple_GET_SIZE(fromlist)) {
  ------------------
  |  |   27|     11|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     22|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (fromlist && PyTuple_Check(fromlist) && PyTuple_GET_SIZE(fromlist)) {
  ------------------
  |  |   27|      2|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (27:30): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (4636:9): [True: 11, False: 0]
  ------------------
 4637|      4|        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(fromlist); i++) {
  ------------------
  |  |   27|      4|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4637:32): [True: 2, False: 2]
  ------------------
 4638|      2|            if (register_from_lazy_on_parent(tstate, abs_name,
  ------------------
  |  Branch (4638:17): [True: 0, False: 2]
  ------------------
 4639|      2|                                             PyTuple_GET_ITEM(fromlist, i)) < 0)
  ------------------
  |  |   29|      2|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      2|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4639:46): [True: 2, False: 0]
  ------------------
 4640|      0|            {
 4641|      0|                goto error;
 4642|      0|            }
 4643|      2|        }
 4644|      2|    }
 4645|      9|    else if (register_lazy_on_parent(tstate, abs_name) < 0) {
  ------------------
  |  Branch (4645:14): [True: 0, False: 9]
  ------------------
 4646|      0|        goto error;
 4647|      0|    }
 4648|       |
 4649|     11|    Py_XDECREF(fromlist);
  ------------------
  |  |  524|     11|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4650|     11|    Py_DECREF(abs_name);
  ------------------
  |  |  430|     11|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4651|     11|    return res;
 4652|      0|error:
 4653|      0|    Py_XDECREF(fromlist);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4654|      0|    Py_DECREF(abs_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4655|      0|    Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4656|       |    return NULL;
 4657|     11|}
PyImport_ImportModuleLevel:
 4662|  51.6k|{
 4663|  51.6k|    PyObject *nameobj, *mod;
 4664|  51.6k|    nameobj = PyUnicode_FromString(name);
 4665|  51.6k|    if (nameobj == NULL)
  ------------------
  |  Branch (4665:9): [True: 0, False: 51.6k]
  ------------------
 4666|      0|        return NULL;
 4667|  51.6k|    mod = PyImport_ImportModuleLevelObject(nameobj, globals, locals,
 4668|  51.6k|                                           fromlist, level);
 4669|  51.6k|    Py_DECREF(nameobj);
  ------------------
  |  |  430|  51.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4670|  51.6k|    return mod;
 4671|  51.6k|}
PyImport_Import:
 4710|  51.7k|{
 4711|  51.7k|    PyThreadState *tstate = _PyThreadState_GET();
 4712|  51.7k|    PyObject *globals = NULL;
 4713|  51.7k|    PyObject *import = NULL;
 4714|  51.7k|    PyObject *builtins = NULL;
 4715|  51.7k|    PyObject *r = NULL;
 4716|       |
 4717|  51.7k|    PyObject *from_list = PyList_New(0);
 4718|  51.7k|    if (from_list == NULL) {
  ------------------
  |  Branch (4718:9): [True: 0, False: 51.7k]
  ------------------
 4719|      0|        goto err;
 4720|      0|    }
 4721|       |
 4722|       |    /* Get the builtins from current globals */
 4723|  51.7k|    globals = PyEval_GetGlobals();  // borrowed
 4724|  51.7k|    if (globals != NULL) {
  ------------------
  |  Branch (4724:9): [True: 106, False: 51.6k]
  ------------------
 4725|    106|        Py_INCREF(globals);
  ------------------
  |  |  310|    106|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    106|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    106|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4726|       |        // XXX Use _PyEval_EnsureBuiltins()?
 4727|    106|        builtins = PyObject_GetItem(globals, &_Py_ID(__builtins__));
  ------------------
  |  |  936|    106|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    106|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    106|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4728|    106|        if (builtins == NULL) {
  ------------------
  |  Branch (4728:13): [True: 0, False: 106]
  ------------------
 4729|       |            // XXX Fall back to interp->builtins or sys.modules['builtins']?
 4730|      0|            goto err;
 4731|      0|        }
 4732|    106|    }
 4733|  51.6k|    else if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4733:14): [True: 0, False: 51.6k]
  ------------------
 4734|      0|        goto err;
 4735|      0|    }
 4736|  51.6k|    else {
 4737|       |        /* No globals -- use standard builtins, and fake globals */
 4738|  51.6k|        globals = PyDict_New();
 4739|  51.6k|        if (globals == NULL) {
  ------------------
  |  Branch (4739:13): [True: 0, False: 51.6k]
  ------------------
 4740|      0|            goto err;
 4741|      0|        }
 4742|  51.6k|        if (_PyEval_EnsureBuiltinsWithModule(tstate, globals, &builtins) < 0) {
  ------------------
  |  Branch (4742:13): [True: 0, False: 51.6k]
  ------------------
 4743|      0|            goto err;
 4744|      0|        }
 4745|  51.6k|    }
 4746|       |
 4747|       |    /* Get the __import__ function from the builtins */
 4748|  51.7k|    if (PyDict_Check(builtins)) {
  ------------------
  |  |   18|  51.7k|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  51.7k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 106, False: 51.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4749|    106|        import = PyObject_GetItem(builtins, &_Py_ID(__import__));
  ------------------
  |  |  936|    106|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    106|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    106|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4750|    106|        if (import == NULL) {
  ------------------
  |  Branch (4750:13): [True: 0, False: 106]
  ------------------
 4751|      0|            _PyErr_SetObject(tstate, PyExc_KeyError, &_Py_ID(__import__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4752|      0|        }
 4753|    106|    }
 4754|  51.6k|    else
 4755|  51.6k|        import = PyObject_GetAttr(builtins, &_Py_ID(__import__));
  ------------------
  |  |  936|  51.6k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  51.6k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  51.6k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4756|  51.7k|    if (import == NULL)
  ------------------
  |  Branch (4756:9): [True: 0, False: 51.7k]
  ------------------
 4757|      0|        goto err;
 4758|       |
 4759|       |    /* Call the __import__ function with the proper argument list
 4760|       |       Always use absolute import here.
 4761|       |       Calling for side-effect of import. */
 4762|  51.7k|    r = PyObject_CallFunction(import, "OOOOi", module_name, globals,
 4763|  51.7k|                              globals, from_list, 0, NULL);
 4764|  51.7k|    if (r == NULL)
  ------------------
  |  Branch (4764:9): [True: 0, False: 51.7k]
  ------------------
 4765|      0|        goto err;
 4766|  51.7k|    Py_DECREF(r);
  ------------------
  |  |  430|  51.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4767|       |
 4768|  51.7k|    r = import_get_module(tstate, module_name);
 4769|  51.7k|    if (r == NULL && !_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4769:9): [True: 0, False: 51.7k]
  |  Branch (4769:22): [True: 0, False: 0]
  ------------------
 4770|      0|        _PyErr_SetObject(tstate, PyExc_KeyError, module_name);
 4771|      0|    }
 4772|       |
 4773|  51.7k|  err:
 4774|  51.7k|    Py_XDECREF(globals);
  ------------------
  |  |  524|  51.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4775|  51.7k|    Py_XDECREF(builtins);
  ------------------
  |  |  524|  51.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4776|  51.7k|    Py_XDECREF(import);
  ------------------
  |  |  524|  51.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4777|  51.7k|    Py_XDECREF(from_list);
  ------------------
  |  |  524|  51.7k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  51.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  51.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4778|       |
 4779|  51.7k|    return r;
 4780|  51.7k|}
_PyImport_Init:
 4789|      2|{
 4790|      2|    if (INITTAB != NULL) {
  ------------------
  |  |   80|      2|#define INITTAB _PyRuntime.imports.inittab
  ------------------
  |  Branch (4790:9): [True: 0, False: 2]
  ------------------
 4791|      0|        return _PyStatus_ERR("global import state already initialized");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4792|      0|    }
 4793|      2|    if (init_builtin_modules_table() != 0) {
  ------------------
  |  Branch (4793:9): [True: 0, False: 2]
  ------------------
 4794|      0|        return PyStatus_NoMemory();
 4795|      0|    }
 4796|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4797|      2|}
_PyImport_InitCore:
 4829|      2|{
 4830|       |    // XXX Initialize here: interp->modules and interp->import_func.
 4831|       |    // XXX Initialize here: sys.modules and sys.meta_path.
 4832|       |
 4833|      2|    if (importlib) {
  ------------------
  |  Branch (4833:9): [True: 2, False: 0]
  ------------------
 4834|       |        /* This call sets up builtin and frozen import support */
 4835|      2|        if (init_importlib(tstate, sysmod) < 0) {
  ------------------
  |  Branch (4835:13): [True: 0, False: 2]
  ------------------
 4836|      0|            return _PyStatus_ERR("failed to initialize importlib");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4837|      0|        }
 4838|      2|    }
 4839|       |
 4840|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4841|      2|}
_PyImport_InitExternal:
 4935|      2|{
 4936|      2|    int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
 4937|       |
 4938|       |    // XXX Initialize here: sys.path_hooks and sys.path_importer_cache.
 4939|       |
 4940|      2|    if (init_importlib_external(tstate->interp) != 0) {
  ------------------
  |  Branch (4940:9): [True: 0, False: 2]
  ------------------
 4941|      0|        _PyErr_Print(tstate);
 4942|      0|        return _PyStatus_ERR("external importer setup failed");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4943|      0|    }
 4944|       |
 4945|      2|    if (init_zipimport(tstate, verbose) != 0) {
  ------------------
  |  Branch (4945:9): [True: 0, False: 2]
  ------------------
 4946|      0|        PyErr_Print();
 4947|      0|        return _PyStatus_ERR("initializing zipimport failed");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4948|      0|    }
 4949|       |
 4950|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4951|      2|}
PyImport_ImportModuleAttr:
 4977|  3.11k|{
 4978|  3.11k|    PyObject *mod = PyImport_Import(modname);
 4979|  3.11k|    if (mod == NULL) {
  ------------------
  |  Branch (4979:9): [True: 0, False: 3.11k]
  ------------------
 4980|      0|        return NULL;
 4981|      0|    }
 4982|  3.11k|    PyObject *result = PyObject_GetAttr(mod, attrname);
 4983|  3.11k|    Py_DECREF(mod);
  ------------------
  |  |  430|  3.11k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.11k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4984|  3.11k|    return result;
 4985|  3.11k|}
PyImport_ImportModuleAttrString:
 4989|  3.11k|{
 4990|  3.11k|    PyObject *pmodname = PyUnicode_FromString(modname);
 4991|  3.11k|    if (pmodname == NULL) {
  ------------------
  |  Branch (4991:9): [True: 0, False: 3.11k]
  ------------------
 4992|      0|        return NULL;
 4993|      0|    }
 4994|  3.11k|    PyObject *pattrname = PyUnicode_FromString(attrname);
 4995|  3.11k|    if (pattrname == NULL) {
  ------------------
  |  Branch (4995:9): [True: 0, False: 3.11k]
  ------------------
 4996|      0|        Py_DECREF(pmodname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4997|      0|        return NULL;
 4998|      0|    }
 4999|  3.11k|    PyObject *result = PyImport_ImportModuleAttr(pmodname, pattrname);
 5000|  3.11k|    Py_DECREF(pattrname);
  ------------------
  |  |  430|  3.11k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.11k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5001|  3.11k|    Py_DECREF(pmodname);
  ------------------
  |  |  430|  3.11k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.11k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.11k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5002|  3.11k|    return result;
 5003|  3.11k|}
PyImport_GetLazyImportsMode:
 5053|    273|{
 5054|    273|    PyInterpreterState *interp = _PyInterpreterState_GET();
 5055|    273|    return FT_ATOMIC_LOAD_INT_RELAXED(LAZY_IMPORTS_MODE(interp));
  ------------------
  |  |  186|    273|#define FT_ATOMIC_LOAD_INT_RELAXED(value) value
  ------------------
 5056|    273|}
PyInit__imp:
 5744|      2|{
 5745|      2|    return PyModuleDef_Init(&imp_module);
 5746|      2|}
import.c:get_modules_dict:
  215|   938k|{
  216|       |    /* Technically, it would make sense to incref the dict,
  217|       |     * since sys.modules could be swapped out and decref'ed to 0
  218|       |     * before the caller is done using it.  However, that is highly
  219|       |     * unlikely, especially since we can rely on a global lock
  220|       |     * (i.e. the GIL) for thread-safety. */
  221|   938k|    PyObject *modules = MODULES(tstate->interp);
  ------------------
  |  |   90|   938k|    (interp)->imports.modules
  ------------------
  222|   938k|    if (modules == NULL) {
  ------------------
  |  Branch (222:9): [True: 0, False: 938k]
  ------------------
  223|      0|        if (fatal) {
  ------------------
  |  Branch (223:13): [True: 0, False: 0]
  ------------------
  224|      0|            Py_FatalError("interpreter has no modules dictionary");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  225|      0|        }
  226|      0|        _PyErr_SetString(tstate, PyExc_RuntimeError,
  227|      0|                         "unable to get sys.modules");
  228|      0|        return NULL;
  229|      0|    }
  230|   938k|    return modules;
  231|   938k|}
import.c:import_get_module:
  258|   938k|{
  259|   938k|    PyObject *modules = get_modules_dict(tstate, false);
  260|   938k|    if (modules == NULL) {
  ------------------
  |  Branch (260:9): [True: 0, False: 938k]
  ------------------
  261|      0|        return NULL;
  262|      0|    }
  263|       |
  264|   938k|    PyObject *m;
  265|   938k|    Py_INCREF(modules);
  ------------------
  |  |  310|   938k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   938k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   938k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|   938k|    (void)PyMapping_GetOptionalItem(modules, name, &m);
  267|   938k|    Py_DECREF(modules);
  ------------------
  |  |  430|   938k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   938k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   938k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|   938k|    return m;
  269|   938k|}
import.c:import_ensure_initialized:
  304|   443k|{
  305|   443k|    PyObject *spec;
  306|       |
  307|       |    /* Optimization: only call _bootstrap._lock_unlock_module() if
  308|       |       __spec__._initializing is true.
  309|       |       NOTE: because of this, initializing must be set *before*
  310|       |       stuffing the new module in sys.modules.
  311|       |    */
  312|   443k|    int rc = PyObject_GetOptionalAttr(mod, &_Py_ID(__spec__), &spec);
  ------------------
  |  |  936|   443k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|   443k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|   443k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|   443k|    if (rc > 0) {
  ------------------
  |  Branch (313:9): [True: 443k, False: 0]
  ------------------
  314|   443k|        rc = _PyModuleSpec_IsInitializing(spec);
  315|   443k|        Py_DECREF(spec);
  ------------------
  |  |  430|   443k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   443k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   443k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|   443k|    }
  317|   443k|    if (rc == 0) {
  ------------------
  |  Branch (317:9): [True: 443k, False: 22]
  ------------------
  318|   443k|        goto done;
  319|   443k|    }
  320|     22|    else if (rc < 0) {
  ------------------
  |  Branch (320:14): [True: 0, False: 22]
  ------------------
  321|      0|        return rc;
  322|      0|    }
  323|       |
  324|       |    /* Wait until module is done importing. */
  325|     22|    PyObject *value = PyObject_CallMethodOneArg(
  326|     22|        IMPORTLIB(interp), &_Py_ID(_lock_unlock_module), name);
  ------------------
  |  |   98|     22|    (interp)->imports.importlib
  ------------------
                      IMPORTLIB(interp), &_Py_ID(_lock_unlock_module), name);
  ------------------
  |  |  936|     22|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     22|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     22|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|     22|    if (value == NULL) {
  ------------------
  |  Branch (327:9): [True: 0, False: 22]
  ------------------
  328|      0|        return -1;
  329|      0|    }
  330|     22|    Py_DECREF(value);
  ------------------
  |  |  430|     22|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     22|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     22|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|       |
  332|   443k|done:
  333|       |    /* When -X importtime=2, print an import time entry even if an
  334|       |       imported module has already been loaded.
  335|       |     */
  336|   443k|    if (_PyInterpreterState_GetConfig(interp)->import_time == 2) {
  ------------------
  |  Branch (336:9): [True: 0, False: 443k]
  ------------------
  337|      0|        _IMPORT_TIME_HEADER(interp);
  ------------------
  |  |  135|      0|    do {                                                                      \
  |  |  136|      0|        if (FIND_AND_LOAD((interp)).header) {                                 \
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  |  |  |  Branch (136:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|            fputs("import time: self [us] | cumulative | imported package\n", \
  |  |  138|      0|                  stderr);                                                    \
  |  |  139|      0|            FIND_AND_LOAD((interp)).header = 0;                               \
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  |  |  140|      0|        }                                                                     \
  |  |  141|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (141:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  338|      0|#define import_level FIND_AND_LOAD(interp).import_level
  339|      0|        PyObject *encoded_name = get_importtime_name(name);
  340|      0|        fprintf(stderr, "import time: cached    | cached     | %*s\n",
  341|      0|                import_level*2,
  ------------------
  |  |  338|      0|#define import_level FIND_AND_LOAD(interp).import_level
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
  342|      0|                encoded_name != NULL ? PyBytes_AS_STRING(encoded_name) : "?");
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (342:17): [True: 0, False: 0]
  ------------------
  343|      0|        Py_XDECREF(encoded_name);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|      0|#undef import_level
  345|      0|    }
  346|       |
  347|   443k|    return 0;
  348|     22|}
import.c:import_add_module:
  417|     10|{
  418|     10|    PyObject *modules = get_modules_dict(tstate, false);
  419|     10|    if (modules == NULL) {
  ------------------
  |  Branch (419:9): [True: 0, False: 10]
  ------------------
  420|      0|        return NULL;
  421|      0|    }
  422|       |
  423|     10|    PyObject *m;
  424|     10|    Py_BEGIN_CRITICAL_SECTION(modules);
  ------------------
  |  |   51|     10|    {
  ------------------
  425|     10|    m = import_add_module_lock_held(modules, name);
  426|     10|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     10|    }
  ------------------
  427|     10|    return m;
  428|     10|}
import.c:import_add_module_lock_held:
  395|     10|{
  396|     10|    PyObject *m;
  397|     10|    if (PyMapping_GetOptionalItem(modules, name, &m) < 0) {
  ------------------
  |  Branch (397:9): [True: 0, False: 10]
  ------------------
  398|      0|        return NULL;
  399|      0|    }
  400|     10|    if (m != NULL && PyModule_Check(m)) {
  ------------------
  |  |   12|      4|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      4|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (400:9): [True: 4, False: 6]
  ------------------
  401|      4|        return m;
  402|      4|    }
  403|      6|    Py_XDECREF(m);
  ------------------
  |  |  524|      6|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|      6|    m = PyModule_NewObject(name);
  405|      6|    if (m == NULL)
  ------------------
  |  Branch (405:9): [True: 0, False: 6]
  ------------------
  406|      0|        return NULL;
  407|      6|    if (PyObject_SetItem(modules, name, m) != 0) {
  ------------------
  |  Branch (407:9): [True: 0, False: 6]
  ------------------
  408|      0|        Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|      0|        return NULL;
  410|      0|    }
  411|       |
  412|      6|    return m;
  413|      6|}
import.c:_get_cached_module_index:
 1139|      4|{
 1140|      4|    assert(cached->m_index > 0);
  ------------------
  |  Branch (1140:5): [True: 4, False: 0]
  ------------------
 1141|      4|    return cached->m_index;
 1142|      4|}
import.c:_modules_by_index_set:
  595|      4|{
  596|      4|    assert(index > 0);
  ------------------
  |  Branch (596:5): [True: 4, False: 0]
  ------------------
  597|       |
  598|      4|    if (MODULES_BY_INDEX(interp) == NULL) {
  ------------------
  |  |   92|      4|    (interp)->imports.modules_by_index
  ------------------
  |  Branch (598:9): [True: 2, False: 2]
  ------------------
  599|      2|        MODULES_BY_INDEX(interp) = PyList_New(0);
  ------------------
  |  |   92|      2|    (interp)->imports.modules_by_index
  ------------------
  600|      2|        if (MODULES_BY_INDEX(interp) == NULL) {
  ------------------
  |  |   92|      2|    (interp)->imports.modules_by_index
  ------------------
  |  Branch (600:13): [True: 0, False: 2]
  ------------------
  601|      0|            return -1;
  602|      0|        }
  603|      2|    }
  604|       |
  605|     14|    while (PyList_GET_SIZE(MODULES_BY_INDEX(interp)) <= index) {
  ------------------
  |  |   38|     14|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     14|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     14|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (605:12): [True: 10, False: 4]
  ------------------
  606|     10|        if (PyList_Append(MODULES_BY_INDEX(interp), Py_None) < 0) {
  ------------------
  |  |   92|     10|    (interp)->imports.modules_by_index
  ------------------
                      if (PyList_Append(MODULES_BY_INDEX(interp), Py_None) < 0) {
  ------------------
  |  |  616|     10|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (606:13): [True: 0, False: 10]
  ------------------
  607|      0|            return -1;
  608|      0|        }
  609|     10|    }
  610|       |
  611|      4|    return PyList_SetItem(MODULES_BY_INDEX(interp), index, Py_NewRef(module));
  ------------------
  |  |   92|      4|    (interp)->imports.modules_by_index
  ------------------
                  return PyList_SetItem(MODULES_BY_INDEX(interp), index, Py_NewRef(module));
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      4|}
import.c:switch_to_main_interpreter:
 1683|     43|{
 1684|     43|    if (_Py_IsMainInterpreter(tstate->interp)) {
  ------------------
  |  Branch (1684:9): [True: 43, False: 0]
  ------------------
 1685|     43|        return tstate;
 1686|     43|    }
 1687|      0|    PyThreadState *main_tstate = _PyThreadState_NewBound(
 1688|      0|            _PyInterpreterState_Main(), _PyThreadState_WHENCE_EXEC);
  ------------------
  |  |  109|      0|#  define _PyThreadState_WHENCE_EXEC 5
  ------------------
 1689|      0|    if (main_tstate == NULL) {
  ------------------
  |  Branch (1689:9): [True: 0, False: 0]
  ------------------
 1690|      0|        return NULL;
 1691|      0|    }
 1692|      0|#ifndef NDEBUG
 1693|      0|    PyThreadState *old_tstate = PyThreadState_Swap(main_tstate);
 1694|      0|    assert(old_tstate == tstate);
  ------------------
  |  Branch (1694:5): [True: 0, False: 0]
  ------------------
 1695|       |#else
 1696|       |    (void)PyThreadState_Swap(main_tstate);
 1697|       |#endif
 1698|      0|    return main_tstate;
 1699|      0|}
import.c:extensions_lock_acquire:
 1052|     55|{
 1053|     55|    PyMutex_Lock(&_PyRuntime.imports.extensions.mutex);
  ------------------
  |  |   59|     55|#define PyMutex_Lock _PyMutex_Lock
  ------------------
 1054|     55|}
import.c:_extensions_cache_find_unlocked:
 1401|     55|{
 1402|     55|    if (EXTENSIONS.hashtable == NULL) {
  ------------------
  |  |   82|     55|#define EXTENSIONS _PyRuntime.imports.extensions
  ------------------
  |  Branch (1402:9): [True: 4, False: 51]
  ------------------
 1403|      4|        return NULL;
 1404|      4|    }
 1405|     51|    void *key = hashtable_key_from_2_strings(path, name, HTSEP);
  ------------------
  |  | 1378|     51|#define HTSEP ':'
  ------------------
 1406|     51|    if (key == NULL) {
  ------------------
  |  Branch (1406:9): [True: 0, False: 51]
  ------------------
 1407|      0|        return NULL;
 1408|      0|    }
 1409|     51|    _Py_hashtable_entry_t *entry =
 1410|     51|            _Py_hashtable_get_entry(EXTENSIONS.hashtable, key);
  ------------------
  |  |   82|     51|#define EXTENSIONS _PyRuntime.imports.extensions
  ------------------
 1411|     51|    if (p_key != NULL) {
  ------------------
  |  Branch (1411:9): [True: 4, False: 47]
  ------------------
 1412|      4|        *p_key = key;
 1413|      4|    }
 1414|     47|    else {
 1415|     47|        hashtable_destroy_str(key);
 1416|     47|    }
 1417|     51|    return entry;
 1418|     51|}
import.c:hashtable_key_from_2_strings:
 1297|     51|{
 1298|     51|    const char *str1_data = _PyUnicode_AsUTF8NoNUL(str1);
 1299|     51|    const char *str2_data = _PyUnicode_AsUTF8NoNUL(str2);
 1300|     51|    if (str1_data == NULL || str2_data == NULL) {
  ------------------
  |  Branch (1300:9): [True: 0, False: 51]
  |  Branch (1300:30): [True: 0, False: 51]
  ------------------
 1301|      0|        return NULL;
 1302|      0|    }
 1303|     51|    Py_ssize_t str1_len = strlen(str1_data);
 1304|     51|    Py_ssize_t str2_len = strlen(str2_data);
 1305|       |
 1306|       |    /* Make sure sep and the NULL byte won't cause an overflow. */
 1307|     51|    assert(SIZE_MAX - str1_len - str2_len > 2);
  ------------------
  |  Branch (1307:5): [True: 51, False: 0]
  ------------------
 1308|     51|    size_t size = str1_len + 1 + str2_len + 1;
 1309|       |
 1310|       |    // XXX Use a buffer if it's a temp value (every case but "set").
 1311|     51|    char *key = PyMem_RawMalloc(size);
 1312|     51|    if (key == NULL) {
  ------------------
  |  Branch (1312:9): [True: 0, False: 51]
  ------------------
 1313|      0|        PyErr_NoMemory();
 1314|      0|        return NULL;
 1315|      0|    }
 1316|       |
 1317|     51|    memcpy(key, str1_data, str1_len);
 1318|     51|    key[str1_len] = sep;
 1319|     51|    memcpy(key + str1_len + 1, str2_data, str2_len);
 1320|     51|    key[size - 1] = '\0';
 1321|     51|    assert(strlen(key) == size - 1);
  ------------------
  |  Branch (1321:5): [True: 51, False: 0]
  ------------------
 1322|     51|    return key;
 1323|     51|}
import.c:hashtable_destroy_str:
 1339|     47|{
 1340|     47|    PyMem_RawFree(ptr);
 1341|     47|}
import.c:extensions_lock_release:
 1058|     55|{
 1059|     55|    PyMutex_Unlock(&_PyRuntime.imports.extensions.mutex);
  ------------------
  |  |   70|     55|#define PyMutex_Unlock _PyMutex_Unlock
  ------------------
 1060|     55|}
import.c:is_core_module:
 1752|     51|{
 1753|       |    /* This might be called before the core dict copies are in place,
 1754|       |       so we can't rely on get_core_module_dict() here. */
 1755|     51|    if (path == name) {
  ------------------
  |  Branch (1755:9): [True: 41, False: 10]
  ------------------
 1756|     41|        if (PyUnicode_CompareWithASCIIString(name, "sys") == 0) {
  ------------------
  |  Branch (1756:13): [True: 4, False: 37]
  ------------------
 1757|      4|            return 1;
 1758|      4|        }
 1759|     37|        if (PyUnicode_CompareWithASCIIString(name, "builtins") == 0) {
  ------------------
  |  Branch (1759:13): [True: 4, False: 33]
  ------------------
 1760|      4|            return 1;
 1761|      4|        }
 1762|     37|    }
 1763|     43|    return 0;
 1764|     51|}
import.c:_get_extension_kind:
 1769|     47|{
 1770|     47|    _Py_ext_module_kind kind;
 1771|     47|    if (def == NULL) {
  ------------------
  |  Branch (1771:9): [True: 0, False: 47]
  ------------------
 1772|       |        /* It must be a module created by reload_singlephase_extension()
 1773|       |         * from m_copy.  Ideally we'd do away with this case. */
 1774|      0|        kind = _Py_ext_module_kind_SINGLEPHASE;
 1775|      0|    }
 1776|     47|    else if (def->m_slots != NULL) {
  ------------------
  |  Branch (1776:14): [True: 43, False: 4]
  ------------------
 1777|     43|        kind = _Py_ext_module_kind_MULTIPHASE;
 1778|     43|    }
 1779|      4|    else if (check_size && def->m_size == -1) {
  ------------------
  |  Branch (1779:14): [True: 4, False: 0]
  |  Branch (1779:28): [True: 4, False: 0]
  ------------------
 1780|      4|        kind = _Py_ext_module_kind_SINGLEPHASE;
 1781|      4|    }
 1782|      0|    else if (def->m_base.m_init != NULL) {
  ------------------
  |  Branch (1782:14): [True: 0, False: 0]
  ------------------
 1783|      0|        kind = _Py_ext_module_kind_SINGLEPHASE;
 1784|      0|    }
 1785|      0|    else {
 1786|       |        // This is probably single-phase init, but a multi-phase
 1787|       |        // module *can* have NULL m_slots.
 1788|      0|        kind = _Py_ext_module_kind_UNKNOWN;
 1789|      0|    }
 1790|     47|    return kind;
 1791|     47|}
import.c:_extensions_cache_get:
 1423|     51|{
 1424|     51|    struct extensions_cache_value *value = NULL;
 1425|     51|    extensions_lock_acquire();
 1426|       |
 1427|     51|    _Py_hashtable_entry_t *entry =
 1428|     51|            _extensions_cache_find_unlocked(path, name, NULL);
 1429|     51|    if (entry == NULL) {
  ------------------
  |  Branch (1429:9): [True: 51, False: 0]
  ------------------
 1430|       |        /* It was never added. */
 1431|     51|        goto finally;
 1432|     51|    }
 1433|      0|    value = (struct extensions_cache_value *)entry->value;
 1434|       |
 1435|     51|finally:
 1436|     51|    extensions_lock_release();
 1437|     51|    return value;
 1438|      0|}
import.c:update_global_state_for_extension:
 1837|      4|{
 1838|      4|    struct extensions_cache_value *cached = NULL;
 1839|      4|    PyModInitFunction m_init = NULL;
 1840|      4|    PyObject *m_dict = NULL;
 1841|       |
 1842|       |    /* Set up for _extensions_cache_set(). */
 1843|      4|    if (singlephase == NULL) {
  ------------------
  |  Branch (1843:9): [True: 0, False: 4]
  ------------------
 1844|      0|        assert(def->m_base.m_init == NULL);
  ------------------
  |  Branch (1844:9): [True: 0, False: 0]
  ------------------
 1845|      0|        assert(def->m_base.m_copy == NULL);
  ------------------
  |  Branch (1845:9): [True: 0, False: 0]
  ------------------
 1846|      0|    }
 1847|      4|    else {
 1848|      4|        if (singlephase->m_init != NULL) {
  ------------------
  |  Branch (1848:13): [True: 0, False: 4]
  ------------------
 1849|      0|            assert(singlephase->m_dict == NULL);
  ------------------
  |  Branch (1849:13): [True: 0, False: 0]
  ------------------
 1850|      0|            assert(def->m_base.m_copy == NULL);
  ------------------
  |  Branch (1850:13): [True: 0, False: 0]
  ------------------
 1851|      0|            assert(def->m_size >= 0);
  ------------------
  |  Branch (1851:13): [True: 0, False: 0]
  ------------------
 1852|       |            /* Remember pointer to module init function. */
 1853|       |            // XXX If two modules share a def then def->m_base will
 1854|       |            // reflect the last one added (here) to the global cache.
 1855|       |            // We should prevent this somehow.  The simplest solution
 1856|       |            // is probably to store m_copy/m_init in the cache along
 1857|       |            // with the def, rather than within the def.
 1858|      0|            m_init = singlephase->m_init;
 1859|      0|        }
 1860|      4|        else if (singlephase->m_dict == NULL) {
  ------------------
  |  Branch (1860:18): [True: 4, False: 0]
  ------------------
 1861|       |            /* It must be a core builtin module. */
 1862|      4|            assert(is_core_module(tstate->interp, name, path));
  ------------------
  |  Branch (1862:13): [True: 4, False: 0]
  ------------------
 1863|      4|            assert(def->m_size == -1);
  ------------------
  |  Branch (1863:13): [True: 4, False: 0]
  ------------------
 1864|      4|            assert(def->m_base.m_copy == NULL);
  ------------------
  |  Branch (1864:13): [True: 4, False: 0]
  ------------------
 1865|      4|            assert(def->m_base.m_init == NULL);
  ------------------
  |  Branch (1865:13): [True: 4, False: 0]
  ------------------
 1866|      4|        }
 1867|      0|        else {
 1868|      0|            assert(PyDict_Check(singlephase->m_dict));
  ------------------
  |  Branch (1868:13): [True: 0, False: 0]
  ------------------
 1869|       |            // gh-88216: Extensions and def->m_base.m_copy can be updated
 1870|       |            // when the extension module doesn't support sub-interpreters.
 1871|      0|            assert(def->m_size == -1);
  ------------------
  |  Branch (1871:13): [True: 0, False: 0]
  ------------------
 1872|      0|            assert(!is_core_module(tstate->interp, name, path));
  ------------------
  |  Branch (1872:13): [True: 0, False: 0]
  ------------------
 1873|      0|            assert(PyUnicode_CompareWithASCIIString(name, "sys") != 0);
  ------------------
  |  Branch (1873:13): [True: 0, False: 0]
  ------------------
 1874|      0|            assert(PyUnicode_CompareWithASCIIString(name, "builtins") != 0);
  ------------------
  |  Branch (1874:13): [True: 0, False: 0]
  ------------------
 1875|      0|            m_dict = singlephase->m_dict;
 1876|      0|        }
 1877|      4|    }
 1878|       |
 1879|       |    /* Add the module's def to the global cache. */
 1880|       |    // XXX Why special-case the main interpreter?
 1881|      4|    if (_Py_IsMainInterpreter(tstate->interp) || def->m_size == -1) {
  ------------------
  |  Branch (1881:9): [True: 4, False: 0]
  |  Branch (1881:50): [True: 0, False: 0]
  ------------------
 1882|      4|#ifndef NDEBUG
 1883|      4|        cached = _extensions_cache_get(path, name);
 1884|      4|        assert(cached == NULL || cached->def == def);
  ------------------
  |  Branch (1884:9): [True: 4, False: 0]
  |  Branch (1884:9): [True: 0, False: 0]
  ------------------
 1885|      4|#endif
 1886|      4|        cached = _extensions_cache_set(
 1887|      4|                path, name, def, m_init, singlephase->m_index, m_dict,
 1888|      4|                singlephase->origin, singlephase->md_requires_gil);
 1889|      4|        if (cached == NULL) {
  ------------------
  |  Branch (1889:13): [True: 0, False: 4]
  ------------------
 1890|       |            // XXX Ignore this error?  Doing so would effectively
 1891|       |            // mark the module as not loadable.
 1892|      0|            return NULL;
 1893|      0|        }
 1894|      4|    }
 1895|       |
 1896|      4|    return cached;
 1897|      4|}
import.c:_extensions_cache_set:
 1446|      4|{
 1447|      4|    struct extensions_cache_value *value = NULL;
 1448|      4|    void *key = NULL;
 1449|      4|    struct extensions_cache_value *newvalue = NULL;
 1450|      4|    PyModuleDef_Base olddefbase = def->m_base;
 1451|       |
 1452|      4|    assert(def != NULL);
  ------------------
  |  Branch (1452:5): [True: 4, False: 0]
  ------------------
 1453|      4|    assert(m_init == NULL || m_dict == NULL);
  ------------------
  |  Branch (1453:5): [True: 4, False: 0]
  |  Branch (1453:5): [True: 0, False: 0]
  ------------------
 1454|       |    /* We expect the same symbol to be used and the shared object file
 1455|       |     * to have remained loaded, so it must be the same pointer. */
 1456|      4|    assert(def->m_base.m_init == NULL || def->m_base.m_init == m_init);
  ------------------
  |  Branch (1456:5): [True: 4, False: 0]
  |  Branch (1456:5): [True: 0, False: 0]
  ------------------
 1457|       |    /* For now we don't worry about comparing value->m_copy. */
 1458|      4|    assert(def->m_base.m_copy == NULL || m_dict != NULL);
  ------------------
  |  Branch (1458:5): [True: 4, False: 0]
  |  Branch (1458:5): [True: 0, False: 0]
  ------------------
 1459|      4|    assert((origin == _Py_ext_module_origin_DYNAMIC) == (name != path));
  ------------------
  |  Branch (1459:5): [True: 4, False: 0]
  ------------------
 1460|      4|    assert(origin != _Py_ext_module_origin_CORE || m_dict == NULL);
  ------------------
  |  Branch (1460:5): [True: 0, False: 4]
  |  Branch (1460:5): [True: 4, False: 0]
  ------------------
 1461|       |
 1462|      4|    extensions_lock_acquire();
 1463|       |
 1464|      4|    if (EXTENSIONS.hashtable == NULL) {
  ------------------
  |  |   82|      4|#define EXTENSIONS _PyRuntime.imports.extensions
  ------------------
  |  Branch (1464:9): [True: 2, False: 2]
  ------------------
 1465|      2|        if (_extensions_cache_init() < 0) {
  ------------------
  |  Branch (1465:13): [True: 0, False: 2]
  ------------------
 1466|      0|            goto finally;
 1467|      0|        }
 1468|      2|    }
 1469|       |
 1470|       |    /* Create a cached value to populate for the module. */
 1471|      4|    _Py_hashtable_entry_t *entry =
 1472|      4|            _extensions_cache_find_unlocked(path, name, &key);
 1473|      4|    value = entry == NULL
  ------------------
  |  Branch (1473:13): [True: 4, False: 0]
  ------------------
 1474|      4|        ? NULL
 1475|      4|        : (struct extensions_cache_value *)entry->value;
 1476|      4|    if (value != NULL) {
  ------------------
  |  Branch (1476:9): [True: 0, False: 4]
  ------------------
 1477|       |        /* gh-123880: If there's an existing cache value, it means a module is
 1478|       |         * being imported recursively from its PyInit_* or Py_mod_* function.
 1479|       |         * (That function presumably handles returning a partially
 1480|       |         *  constructed module in such a case.)
 1481|       |         * We can reuse the existing cache value; it is owned by the cache.
 1482|       |         * (Entries get removed from it in exceptional circumstances,
 1483|       |         *  after interpreter shutdown, and in runtime shutdown.)
 1484|       |         */
 1485|      0|        goto finally_oldvalue;
 1486|      0|    }
 1487|      4|    newvalue = alloc_extensions_cache_value();
 1488|      4|    if (newvalue == NULL) {
  ------------------
  |  Branch (1488:9): [True: 0, False: 4]
  ------------------
 1489|      0|        goto finally;
 1490|      0|    }
 1491|       |
 1492|       |    /* Populate the new cache value data. */
 1493|      4|    *newvalue = (struct extensions_cache_value){
 1494|      4|        .def=def,
 1495|      4|        .m_init=m_init,
 1496|      4|        .m_index=m_index,
 1497|       |        /* m_dict is set by set_cached_m_dict(). */
 1498|      4|        .origin=origin,
 1499|       |#ifdef Py_GIL_DISABLED
 1500|       |        .md_requires_gil=requires_gil,
 1501|       |#endif
 1502|      4|    };
 1503|      4|#ifndef Py_GIL_DISABLED
 1504|      4|    (void)requires_gil;
 1505|      4|#endif
 1506|      4|    if (init_cached_m_dict(newvalue, m_dict) < 0) {
  ------------------
  |  Branch (1506:9): [True: 0, False: 4]
  ------------------
 1507|      0|        goto finally;
 1508|      0|    }
 1509|      4|    fixup_cached_def(newvalue);
 1510|       |
 1511|      4|    if (entry == NULL) {
  ------------------
  |  Branch (1511:9): [True: 4, False: 0]
  ------------------
 1512|       |        /* It was never added. */
 1513|      4|        if (_Py_hashtable_set(EXTENSIONS.hashtable, key, newvalue) < 0) {
  ------------------
  |  |   82|      4|#define EXTENSIONS _PyRuntime.imports.extensions
  ------------------
  |  Branch (1513:13): [True: 0, False: 4]
  ------------------
 1514|      0|            PyErr_NoMemory();
 1515|      0|            goto finally;
 1516|      0|        }
 1517|       |        /* The hashtable owns the key now. */
 1518|      4|        key = NULL;
 1519|      4|    }
 1520|      0|    else if (value == NULL) {
  ------------------
  |  Branch (1520:14): [True: 0, False: 0]
  ------------------
 1521|       |        /* It was previously deleted. */
 1522|      0|        entry->value = newvalue;
 1523|      0|    }
 1524|      0|    else {
 1525|       |        /* We are updating the entry for an existing module. */
 1526|       |        /* We expect def to be static, so it must be the same pointer. */
 1527|      0|        assert(value->def == def);
  ------------------
  |  Branch (1527:9): [True: 0, False: 0]
  ------------------
 1528|       |        /* We expect the same symbol to be used and the shared object file
 1529|       |         * to have remained loaded, so it must be the same pointer. */
 1530|      0|        assert(value->m_init == m_init);
  ------------------
  |  Branch (1530:9): [True: 0, False: 0]
  ------------------
 1531|       |        /* The same module can't switch between caching __dict__ and not. */
 1532|      0|        assert((value->m_dict == NULL) == (m_dict == NULL));
  ------------------
  |  Branch (1532:9): [True: 0, False: 0]
  ------------------
 1533|       |        /* This shouldn't ever happen. */
 1534|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1535|      0|    }
 1536|       |
 1537|      4|    value = newvalue;
 1538|       |
 1539|      4|finally:
 1540|      4|    if (value == NULL) {
  ------------------
  |  Branch (1540:9): [True: 0, False: 4]
  ------------------
 1541|      0|        restore_old_cached_def(def, &olddefbase);
 1542|      0|        if (newvalue != NULL) {
  ------------------
  |  Branch (1542:13): [True: 0, False: 0]
  ------------------
 1543|      0|            del_extensions_cache_value(newvalue);
 1544|      0|        }
 1545|      0|    }
 1546|      4|    else {
 1547|      4|        cleanup_old_cached_def(&olddefbase);
 1548|      4|    }
 1549|       |
 1550|      4|finally_oldvalue:
 1551|      4|    extensions_lock_release();
 1552|      4|    if (key != NULL) {
  ------------------
  |  Branch (1552:9): [True: 0, False: 4]
  ------------------
 1553|      0|        hashtable_destroy_str(key);
 1554|      0|    }
 1555|       |
 1556|      4|    return value;
 1557|      4|}
import.c:_extensions_cache_init:
 1382|      2|{
 1383|      2|    _Py_hashtable_allocator_t alloc = {PyMem_RawMalloc, PyMem_RawFree};
 1384|      2|    EXTENSIONS.hashtable = _Py_hashtable_new_full(
  ------------------
  |  |   82|      2|#define EXTENSIONS _PyRuntime.imports.extensions
  ------------------
 1385|      2|        hashtable_hash_str,
 1386|      2|        hashtable_compare_str,
 1387|      2|        hashtable_destroy_str,  // key
 1388|      2|        del_extensions_cache_value,  // value
 1389|      2|        &alloc
 1390|      2|    );
 1391|      2|    if (EXTENSIONS.hashtable == NULL) {
  ------------------
  |  |   82|      2|#define EXTENSIONS _PyRuntime.imports.extensions
  ------------------
  |  Branch (1391:9): [True: 0, False: 2]
  ------------------
 1392|      0|        PyErr_NoMemory();
 1393|      0|        return -1;
 1394|      0|    }
 1395|      2|    return 0;
 1396|      2|}
import.c:hashtable_hash_str:
 1327|     59|{
 1328|     59|    return Py_HashBuffer(key, strlen((const char *)key));
 1329|     59|}
import.c:alloc_extensions_cache_value:
 1120|      4|{
 1121|      4|    struct extensions_cache_value *value
 1122|      4|            = PyMem_RawMalloc(sizeof(struct extensions_cache_value));
 1123|      4|    if (value == NULL) {
  ------------------
  |  Branch (1123:9): [True: 0, False: 4]
  ------------------
 1124|      0|        PyErr_NoMemory();
 1125|      0|        return NULL;
 1126|      0|    }
 1127|      4|    *value = (struct extensions_cache_value){0};
 1128|      4|    return value;
 1129|      4|}
import.c:init_cached_m_dict:
 1207|      4|{
 1208|      4|    assert(value != NULL);
  ------------------
  |  Branch (1208:5): [True: 4, False: 0]
  ------------------
 1209|       |    /* This should only have been called without an m_dict already set. */
 1210|      4|    assert(value->m_dict == NULL);
  ------------------
  |  Branch (1210:5): [True: 4, False: 0]
  ------------------
 1211|      4|    if (m_dict == NULL) {
  ------------------
  |  Branch (1211:9): [True: 4, False: 0]
  ------------------
 1212|      4|        return 0;
 1213|      4|    }
 1214|      4|    assert(PyDict_Check(m_dict));
  ------------------
  |  Branch (1214:5): [True: 0, False: 0]
  ------------------
 1215|      0|    assert(value->origin != _Py_ext_module_origin_CORE);
  ------------------
  |  Branch (1215:5): [True: 0, False: 0]
  ------------------
 1216|       |
 1217|      0|    PyInterpreterState *interp = _PyInterpreterState_GET();
 1218|      0|    assert(!is_interpreter_isolated(interp));
  ------------------
  |  Branch (1218:5): [True: 0, False: 0]
  ------------------
 1219|       |
 1220|       |    /* XXX gh-88216: The copied dict is owned by the current
 1221|       |     * interpreter.  That's a problem if the interpreter has
 1222|       |     * its own obmalloc state or if the module is successfully
 1223|       |     * imported into such an interpreter.  If the interpreter
 1224|       |     * has its own GIL then there may be data races and
 1225|       |     * PyImport_ClearModulesByIndex() can crash.  Normally,
 1226|       |     * a single-phase init module cannot be imported in an
 1227|       |     * isolated interpreter, but there are ways around that.
 1228|       |     * Hence, heere be dragons!  Ideally we would instead do
 1229|       |     * something like make a read-only, immortal copy of the
 1230|       |     * dict using PyMem_RawMalloc() and store *that* in m_copy.
 1231|       |     * Then we'd need to make sure to clear that when the
 1232|       |     * runtime is finalized, rather than in
 1233|       |     * PyImport_ClearModulesByIndex(). */
 1234|      0|    PyObject *copied = PyDict_Copy(m_dict);
 1235|      0|    if (copied == NULL) {
  ------------------
  |  Branch (1235:9): [True: 0, False: 0]
  ------------------
 1236|       |        /* We expect this can only be "out of memory". */
 1237|      0|        return -1;
 1238|      0|    }
 1239|       |    // XXX We may want to make the copy immortal.
 1240|       |
 1241|      0|    value->_m_dict = (struct cached_m_dict){
 1242|      0|        .copied=copied,
 1243|      0|        .interpid=PyInterpreterState_GetID(interp),
 1244|      0|    };
 1245|       |
 1246|      0|    value->m_dict = &value->_m_dict;
 1247|      0|    return 0;
 1248|      0|}
import.c:fixup_cached_def:
 1146|      4|{
 1147|       |    /* For the moment, the values in the def's m_base may belong
 1148|       |     * to another module, and we're replacing them here.  This can
 1149|       |     * cause problems later if the old module is reloaded.
 1150|       |     *
 1151|       |     * Also, we don't decref any old cached values first when we
 1152|       |     * replace them here, in case we need to restore them in the
 1153|       |     * near future.  Instead, the caller is responsible for wrapping
 1154|       |     * this up by calling cleanup_old_cached_def() or
 1155|       |     * restore_old_cached_def() if there was an error. */
 1156|      4|    PyModuleDef *def = value->def;
 1157|      4|    assert(def != NULL);
  ------------------
  |  Branch (1157:5): [True: 4, False: 0]
  ------------------
 1158|       |
 1159|       |    /* We assume that all module defs are statically allocated
 1160|       |       and will never be freed.  Otherwise, we would incref here. */
 1161|      4|    _Py_SetImmortalUntracked((PyObject *)def);
 1162|       |
 1163|      4|    def->m_base.m_init = value->m_init;
 1164|       |
 1165|      4|    assert(value->m_index > 0);
  ------------------
  |  Branch (1165:5): [True: 4, False: 0]
  ------------------
 1166|      4|    _set_module_index(def, value->m_index);
 1167|       |
 1168|       |    /* Different modules can share the same def, so we can't just
 1169|       |     * expect m_copy to be NULL. */
 1170|      4|    assert(def->m_base.m_copy == NULL
  ------------------
  |  Branch (1170:5): [True: 4, False: 0]
  |  Branch (1170:5): [True: 0, False: 0]
  |  Branch (1170:5): [True: 0, False: 0]
  ------------------
 1171|      4|           || def->m_base.m_init == NULL
 1172|      4|           || value->m_dict != NULL);
 1173|      4|    if (value->m_dict != NULL) {
  ------------------
  |  Branch (1173:9): [True: 0, False: 4]
  ------------------
 1174|      0|        assert(value->m_dict->copied != NULL);
  ------------------
  |  Branch (1174:9): [True: 0, False: 0]
  ------------------
 1175|       |        /* As noted above, we don't first decref the old value, if any. */
 1176|      0|        def->m_base.m_copy = Py_NewRef(value->m_dict->copied);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1177|      0|    }
 1178|      4|}
import.c:_set_module_index:
  548|      4|{
  549|      4|    assert(index > 0);
  ------------------
  |  Branch (549:5): [True: 4, False: 0]
  ------------------
  550|      4|    if (index == def->m_base.m_index) {
  ------------------
  |  Branch (550:9): [True: 4, False: 0]
  ------------------
  551|       |        /* There's nothing to do. */
  552|      4|    }
  553|      0|    else if (def->m_base.m_index == 0) {
  ------------------
  |  Branch (553:14): [True: 0, False: 0]
  ------------------
  554|       |        /* It should have been initialized by PyModuleDef_Init().
  555|       |         * We assert here to catch this in dev, but keep going otherwise. */
  556|      0|        assert(def->m_base.m_index != 0);
  ------------------
  |  Branch (556:9): [True: 0, False: 0]
  ------------------
  557|      0|        def->m_base.m_index = index;
  558|      0|    }
  559|      0|    else {
  560|       |        /* It was already set for a different module.
  561|       |         * We replace the old value. */
  562|      0|        assert(def->m_base.m_index > 0);
  ------------------
  |  Branch (562:9): [True: 0, False: 0]
  ------------------
  563|      0|        def->m_base.m_index = index;
  564|      0|    }
  565|      4|}
import.c:cleanup_old_cached_def:
 1188|      4|{
 1189|      4|    Py_XDECREF(oldbase->m_copy);
  ------------------
  |  |  524|      4|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      4|}
import.c:finish_singlephase_extension:
 1905|      4|{
 1906|      4|    assert(mod != NULL && PyModule_Check(mod));
  ------------------
  |  Branch (1906:5): [True: 4, False: 0]
  |  Branch (1906:5): [True: 4, False: 0]
  ------------------
 1907|      4|    assert(cached->def == _PyModule_GetDefOrNull(mod));
  ------------------
  |  Branch (1907:5): [True: 4, False: 0]
  ------------------
 1908|       |
 1909|      4|    Py_ssize_t index = _get_cached_module_index(cached);
 1910|      4|    if (_modules_by_index_set(tstate->interp, index, mod) < 0) {
  ------------------
  |  Branch (1910:9): [True: 0, False: 4]
  ------------------
 1911|      0|        return -1;
 1912|      0|    }
 1913|       |
 1914|      4|    if (modules != NULL) {
  ------------------
  |  Branch (1914:9): [True: 4, False: 0]
  ------------------
 1915|      4|        if (PyObject_SetItem(modules, name, mod) < 0) {
  ------------------
  |  Branch (1915:13): [True: 0, False: 4]
  ------------------
 1916|      0|            return -1;
 1917|      0|        }
 1918|      4|    }
 1919|       |
 1920|      4|    return 0;
 1921|      4|}
import.c:create_builtin:
 2505|     33|{
 2506|     33|    struct _Py_ext_module_loader_info info;
 2507|     33|    if (_Py_ext_module_loader_info_init_for_builtin(&info, name) < 0) {
  ------------------
  |  Branch (2507:9): [True: 0, False: 33]
  ------------------
 2508|      0|        return NULL;
 2509|      0|    }
 2510|       |
 2511|     33|    struct extensions_cache_value *cached = NULL;
 2512|     33|    PyObject *mod = import_find_extension(tstate, &info, &cached);
 2513|     33|    if (mod != NULL) {
  ------------------
  |  Branch (2513:9): [True: 0, False: 33]
  ------------------
 2514|      0|        assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (2514:9): [True: 0, False: 0]
  ------------------
 2515|      0|        assert(cached != NULL);
  ------------------
  |  Branch (2515:9): [True: 0, False: 0]
  ------------------
 2516|       |        /* The module might not have md_def set in certain reload cases. */
 2517|      0|        assert(_PyModule_GetDefOrNull(mod) == NULL
  ------------------
  |  Branch (2517:9): [True: 0, False: 0]
  |  Branch (2517:9): [True: 0, False: 0]
  ------------------
 2518|      0|                || cached->def == _PyModule_GetDefOrNull(mod));
 2519|      0|        assert_singlephase(cached);
  ------------------
  |  | 1812|      0|    do {                                                                    \
  |  | 1813|      0|        _Py_ext_module_kind kind = _get_extension_kind(cached->def, true);  \
  |  | 1814|      0|        assert(kind == _Py_ext_module_kind_SINGLEPHASE);                    \
  |  | 1815|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1815:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2519:9): [True: 0, False: 0]
  ------------------
 2520|      0|        goto finally;
 2521|      0|    }
 2522|     33|    else if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2522:14): [True: 0, False: 33]
  ------------------
 2523|      0|        goto finally;
 2524|      0|    }
 2525|       |
 2526|       |    /* If the module was added to the global cache
 2527|       |     * but def->m_base.m_copy was cleared (e.g. subinterp fini)
 2528|       |     * then we have to do a little dance here. */
 2529|     33|    if (cached != NULL) {
  ------------------
  |  Branch (2529:9): [True: 0, False: 33]
  ------------------
 2530|      0|        assert(cached->def->m_base.m_copy == NULL);
  ------------------
  |  Branch (2530:9): [True: 0, False: 0]
  ------------------
 2531|       |        /* For now we clear the cache and move on. */
 2532|      0|        _extensions_cache_delete(info.path, info.name);
 2533|      0|    }
 2534|       |
 2535|     33|    PyModInitFunction p0 = NULL;
 2536|     33|    if (initfunc == NULL) {
  ------------------
  |  Branch (2536:9): [True: 33, False: 0]
  ------------------
 2537|     33|        struct _inittab *entry = lookup_inittab_entry(&info);
 2538|     33|        if (entry == NULL) {
  ------------------
  |  Branch (2538:13): [True: 0, False: 33]
  ------------------
 2539|      0|            mod = NULL;
 2540|      0|            _PyErr_SetModuleNotFoundError(name);
 2541|      0|            goto finally;
 2542|      0|        }
 2543|       |
 2544|     33|        p0 = (PyModInitFunction)entry->initfunc;
 2545|     33|    }
 2546|      0|    else {
 2547|      0|        p0 = initfunc;
 2548|      0|    }
 2549|       |
 2550|     33|    if (p0 == NULL) {
  ------------------
  |  Branch (2550:9): [True: 0, False: 33]
  ------------------
 2551|       |        /* Cannot re-init internal module ("sys" or "builtins") */
 2552|      0|        assert(is_core_module(tstate->interp, info.name, info.path));
  ------------------
  |  Branch (2552:9): [True: 0, False: 0]
  ------------------
 2553|      0|        mod = import_add_module(tstate, info.name);
 2554|      0|        goto finally;
 2555|      0|    }
 2556|       |
 2557|       |
 2558|       |#ifdef Py_GIL_DISABLED
 2559|       |    // This call (and the corresponding call to _PyImport_CheckGILForModule())
 2560|       |    // would ideally be inside import_run_extension(). They are kept in the
 2561|       |    // callers for now because that would complicate the control flow inside
 2562|       |    // import_run_extension(). It should be possible to restructure
 2563|       |    // import_run_extension() to address this.
 2564|       |    _PyEval_EnableGILTransient(tstate);
 2565|       |#endif
 2566|       |    /* Now load it. */
 2567|     33|    mod = import_run_extension(
 2568|     33|                    tstate, p0, &info, spec, get_modules_dict(tstate, true));
 2569|       |#ifdef Py_GIL_DISABLED
 2570|       |    if (_PyImport_CheckGILForModule(mod, info.name) < 0) {
 2571|       |        Py_CLEAR(mod);
 2572|       |        goto finally;
 2573|       |    }
 2574|       |#endif
 2575|       |
 2576|     33|finally:
 2577|     33|    _Py_ext_module_loader_info_clear(&info);
 2578|     33|    return mod;
 2579|     33|}
import.c:import_find_extension:
 2039|     43|{
 2040|       |    /* Only single-phase init modules will be in the cache. */
 2041|     43|    struct extensions_cache_value *cached
 2042|     43|            = _extensions_cache_get(info->path, info->name);
 2043|     43|    if (cached == NULL) {
  ------------------
  |  Branch (2043:9): [True: 43, False: 0]
  ------------------
 2044|     43|        return NULL;
 2045|     43|    }
 2046|     43|    assert(cached->def != NULL);
  ------------------
  |  Branch (2046:5): [True: 0, False: 0]
  ------------------
 2047|      0|    assert_singlephase(cached);
  ------------------
  |  | 1812|      0|    do {                                                                    \
  |  | 1813|      0|        _Py_ext_module_kind kind = _get_extension_kind(cached->def, true);  \
  |  | 1814|      0|        assert(kind == _Py_ext_module_kind_SINGLEPHASE);                    \
  |  | 1815|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1815:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2047:5): [True: 0, False: 0]
  ------------------
 2048|      0|    *p_cached = cached;
 2049|       |
 2050|       |    /* It may have been successfully imported previously
 2051|       |       in an interpreter that allows legacy modules
 2052|       |       but is not allowed in the current interpreter. */
 2053|      0|    const char *name_buf = PyUnicode_AsUTF8(info->name);
 2054|      0|    assert(name_buf != NULL);
  ------------------
  |  Branch (2054:5): [True: 0, False: 0]
  ------------------
 2055|      0|    if (_PyImport_CheckSubinterpIncompatibleExtensionAllowed(name_buf) < 0) {
  ------------------
  |  Branch (2055:9): [True: 0, False: 0]
  ------------------
 2056|      0|        return NULL;
 2057|      0|    }
 2058|       |
 2059|      0|    PyObject *mod = reload_singlephase_extension(tstate, cached, info);
 2060|      0|    if (mod == NULL) {
  ------------------
  |  Branch (2060:9): [True: 0, False: 0]
  ------------------
 2061|      0|        return NULL;
 2062|      0|    }
 2063|       |
 2064|      0|    int verbose = _PyInterpreterState_GetConfig(tstate->interp)->verbose;
 2065|      0|    if (verbose) {
  ------------------
  |  Branch (2065:9): [True: 0, False: 0]
  ------------------
 2066|      0|        PySys_FormatStderr("import %U # previously loaded (%R)\n",
 2067|      0|                           info->name, info->path);
 2068|      0|    }
 2069|       |
 2070|      0|    return mod;
 2071|      0|}
import.c:lookup_inittab_entry:
 2490|     33|{
 2491|    657|    for (struct _inittab *p = INITTAB; p->name != NULL; p++) {
  ------------------
  |  |   80|     33|#define INITTAB _PyRuntime.imports.inittab
  ------------------
  |  Branch (2491:40): [True: 657, False: 0]
  ------------------
 2492|    657|        if (_PyUnicode_EqualToASCIIString(info->name, p->name)) {
  ------------------
  |  Branch (2492:13): [True: 33, False: 624]
  ------------------
 2493|     33|            return p;
 2494|     33|        }
 2495|    657|    }
 2496|       |    // not found
 2497|      0|    return NULL;
 2498|     33|}
import.c:import_run_extension:
 2114|     43|{
 2115|       |    /* Core modules go through _PyImport_FixupBuiltin(). */
 2116|     43|    assert(!is_core_module(tstate->interp, info->name, info->path));
  ------------------
  |  Branch (2116:5): [True: 43, False: 0]
  ------------------
 2117|       |
 2118|     43|    PyObject *mod = NULL;
 2119|     43|    PyModuleDef *def = NULL;
 2120|     43|    struct extensions_cache_value *cached = NULL;
 2121|     43|    const char *name_buf = PyBytes_AS_STRING(info->name_encoded);
  ------------------
  |  |   27|     43|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2122|       |
 2123|       |    /* We cannot know if the module is single-phase init or
 2124|       |     * multi-phase init until after we call its init function. Even
 2125|       |     * in isolated interpreters (that do not support single-phase init),
 2126|       |     * the init function will run without restriction.  For multi-phase
 2127|       |     * init modules that isn't a problem because the init function only
 2128|       |     * runs PyModuleDef_Init() on the module's def and then returns it.
 2129|       |     *
 2130|       |     * However, for single-phase init the module's init function will
 2131|       |     * create the module, create other objects (and allocate other
 2132|       |     * memory), populate it and its module state, and initialize static
 2133|       |     * types.  Some modules store other objects and data in global C
 2134|       |     * variables and register callbacks with the runtime/stdlib or
 2135|       |     * even external libraries (which is part of why we can't just
 2136|       |     * dlclose() the module in the error case).  That's a problem
 2137|       |     * for isolated interpreters since all of the above happens
 2138|       |     * and only then * will the import fail.  Memory will leak,
 2139|       |     * callbacks will still get used, and sometimes there
 2140|       |     * will be crashes (memory access violations
 2141|       |     * and use-after-free).
 2142|       |     *
 2143|       |     * To put it another way, if the module is single-phase init
 2144|       |     * then the import will probably break interpreter isolation
 2145|       |     * and should fail ASAP.  However, the module's init function
 2146|       |     * will still get run.  That means it may still store state
 2147|       |     * in the shared-object/DLL address space (which never gets
 2148|       |     * closed/cleared), including objects (e.g. static types).
 2149|       |     * This is a problem for isolated subinterpreters since each
 2150|       |     * has its own object allocator.  If the loaded shared-object
 2151|       |     * still holds a reference to an object after the corresponding
 2152|       |     * interpreter has finalized then either we must let it leak
 2153|       |     * or else any later use of that object by another interpreter
 2154|       |     * (or across multiple init-fini cycles) will crash the process.
 2155|       |     *
 2156|       |     * To avoid all of that, we make sure the module's init function
 2157|       |     * is always run first with the main interpreter active.  If it was
 2158|       |     * already the main interpreter then we can continue loading the
 2159|       |     * module like normal.  Otherwise, right after the init function,
 2160|       |     * we take care of some import state bookkeeping, switch back
 2161|       |     * to the subinterpreter, check for single-phase init,
 2162|       |     * and then continue loading like normal. */
 2163|       |
 2164|     43|    bool switched = false;
 2165|       |    /* We *could* leave in place a legacy interpreter here
 2166|       |     * (one that shares obmalloc/GIL with main interp),
 2167|       |     * but there isn't a big advantage, we anticipate
 2168|       |     * such interpreters will be increasingly uncommon,
 2169|       |     * and the code is a bit simpler if we always switch
 2170|       |     * to the main interpreter. */
 2171|     43|    PyThreadState *main_tstate = switch_to_main_interpreter(tstate);
 2172|     43|    if (main_tstate == NULL) {
  ------------------
  |  Branch (2172:9): [True: 0, False: 43]
  ------------------
 2173|      0|        return NULL;
 2174|      0|    }
 2175|     43|    else if (main_tstate != tstate) {
  ------------------
  |  Branch (2175:14): [True: 0, False: 43]
  ------------------
 2176|      0|        switched = true;
 2177|       |        /* In the switched case, we could play it safe
 2178|       |         * by getting the main interpreter's import lock here.
 2179|       |         * It's unlikely to matter though. */
 2180|      0|    }
 2181|       |
 2182|     43|    struct _Py_ext_module_loader_result res;
 2183|     43|    int rc = _PyImport_RunModInitFunc(p0, info, &res);
 2184|     43|    bool main_error = false;
 2185|     43|    if (rc < 0) {
  ------------------
  |  Branch (2185:9): [True: 0, False: 43]
  ------------------
 2186|       |        /* We discard res.def. */
 2187|      0|        assert(res.module == NULL);
  ------------------
  |  Branch (2187:9): [True: 0, False: 0]
  ------------------
 2188|      0|    }
 2189|     43|    else {
 2190|     43|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (2190:9): [True: 43, False: 0]
  ------------------
 2191|     43|        assert(res.err == NULL);
  ------------------
  |  Branch (2191:9): [True: 43, False: 0]
  ------------------
 2192|       |
 2193|     43|        mod = res.module;
 2194|     43|        res.module = NULL;
 2195|     43|        def = res.def;
 2196|     43|        assert(def != NULL);
  ------------------
  |  Branch (2196:9): [True: 43, False: 0]
  ------------------
 2197|       |
 2198|       |        /* Do anything else that should be done
 2199|       |         * while still using the main interpreter. */
 2200|     43|        if (res.kind == _Py_ext_module_kind_SINGLEPHASE) {
  ------------------
  |  Branch (2200:13): [True: 0, False: 43]
  ------------------
 2201|       |            /* Remember the filename as the __file__ attribute */
 2202|      0|            if (info->filename != NULL) {
  ------------------
  |  Branch (2202:17): [True: 0, False: 0]
  ------------------
 2203|      0|                PyObject *filename = NULL;
 2204|      0|                if (switched) {
  ------------------
  |  Branch (2204:21): [True: 0, False: 0]
  ------------------
 2205|       |                    // The original filename may be allocated by subinterpreter's
 2206|       |                    // obmalloc, so we create a copy here.
 2207|      0|                    filename = _PyUnicode_Copy(info->filename);
 2208|      0|                    if (filename == NULL) {
  ------------------
  |  Branch (2208:25): [True: 0, False: 0]
  ------------------
 2209|      0|                        main_error = true;
 2210|      0|                        goto main_finally;
 2211|      0|                    }
 2212|      0|                }
 2213|      0|                else {
 2214|      0|                    filename = Py_NewRef(info->filename);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2215|      0|                }
 2216|       |                // XXX There's a refleak somewhere with the filename.
 2217|       |                // Until we can track it down, we immortalize it.
 2218|      0|                PyInterpreterState *interp = _PyInterpreterState_GET();
 2219|      0|                _PyUnicode_InternImmortal(interp, &filename);
 2220|       |
 2221|      0|                if (PyModule_AddObjectRef(mod, "__file__", filename) < 0) {
  ------------------
  |  Branch (2221:21): [True: 0, False: 0]
  ------------------
 2222|      0|                    PyErr_Clear(); /* Not important enough to report */
 2223|      0|                }
 2224|      0|            }
 2225|       |
 2226|       |            /* Update global import state. */
 2227|      0|            assert(def->m_base.m_index != 0);
  ------------------
  |  Branch (2227:13): [True: 0, False: 0]
  ------------------
 2228|      0|            struct singlephase_global_update singlephase = {
 2229|       |                // XXX Modules that share a def should each get their own index,
 2230|       |                // whereas currently they share (which means the per-interpreter
 2231|       |                // cache is less reliable than it should be).
 2232|      0|                .m_index=def->m_base.m_index,
 2233|      0|                .origin=info->origin,
 2234|       |#ifdef Py_GIL_DISABLED
 2235|       |                .md_requires_gil=((PyModuleObject *)mod)->md_requires_gil,
 2236|       |#endif
 2237|      0|            };
 2238|       |            // gh-88216: Extensions and def->m_base.m_copy can be updated
 2239|       |            // when the extension module doesn't support sub-interpreters.
 2240|      0|            if (def->m_size == -1) {
  ------------------
  |  Branch (2240:17): [True: 0, False: 0]
  ------------------
 2241|       |                /* We will reload from m_copy. */
 2242|      0|                assert(def->m_base.m_init == NULL);
  ------------------
  |  Branch (2242:17): [True: 0, False: 0]
  ------------------
 2243|      0|                singlephase.m_dict = PyModule_GetDict(mod);
 2244|      0|                assert(singlephase.m_dict != NULL);
  ------------------
  |  Branch (2244:17): [True: 0, False: 0]
  ------------------
 2245|      0|            }
 2246|      0|            else {
 2247|       |                /* We will reload via the init function. */
 2248|      0|                assert(def->m_size >= 0);
  ------------------
  |  Branch (2248:17): [True: 0, False: 0]
  ------------------
 2249|      0|                assert(def->m_base.m_copy == NULL);
  ------------------
  |  Branch (2249:17): [True: 0, False: 0]
  ------------------
 2250|      0|                singlephase.m_init = p0;
 2251|      0|            }
 2252|      0|            cached = update_global_state_for_extension(
 2253|      0|                    main_tstate, info->path, info->name, def, &singlephase);
 2254|      0|            if (cached == NULL) {
  ------------------
  |  Branch (2254:17): [True: 0, False: 0]
  ------------------
 2255|      0|                assert(PyErr_Occurred());
  ------------------
  |  Branch (2255:17): [True: 0, False: 0]
  ------------------
 2256|      0|                main_error = true;
 2257|      0|                goto main_finally;
 2258|      0|            }
 2259|      0|        }
 2260|     43|    }
 2261|       |
 2262|     43|main_finally:
 2263|     43|    if (rc < 0) {
  ------------------
  |  Branch (2263:9): [True: 0, False: 43]
  ------------------
 2264|      0|        _Py_ext_module_loader_result_apply_error(&res, name_buf);
 2265|      0|    }
 2266|       |
 2267|       |    /* Switch back to the subinterpreter. */
 2268|     43|    if (switched) {
  ------------------
  |  Branch (2268:9): [True: 0, False: 43]
  ------------------
 2269|       |        // gh-144601: The exception object can't be transferred across
 2270|       |        // interpreters. Instead, we print out an unraisable exception, and
 2271|       |        // then raise a different exception for the calling interpreter.
 2272|      0|        if (rc < 0 || main_error) {
  ------------------
  |  Branch (2272:13): [True: 0, False: 0]
  |  Branch (2272:23): [True: 0, False: 0]
  ------------------
 2273|      0|            assert(PyErr_Occurred());
  ------------------
  |  Branch (2273:13): [True: 0, False: 0]
  ------------------
 2274|      0|            PyErr_FormatUnraisable("Exception while importing from subinterpreter");
 2275|      0|        }
 2276|      0|        assert(main_tstate != tstate);
  ------------------
  |  Branch (2276:9): [True: 0, False: 0]
  ------------------
 2277|      0|        switch_back_from_main_interpreter(tstate, main_tstate, mod);
 2278|       |        /* Any module we got from the init function will have to be
 2279|       |         * reloaded in the subinterpreter. */
 2280|      0|        mod = NULL;
 2281|      0|        if (rc < 0 || main_error) {
  ------------------
  |  Branch (2281:13): [True: 0, False: 0]
  |  Branch (2281:23): [True: 0, False: 0]
  ------------------
 2282|      0|            PyErr_SetString(PyExc_ImportError,
 2283|      0|                            "failed to import from subinterpreter due to exception");
 2284|      0|            goto error;
 2285|      0|        }
 2286|      0|    }
 2287|       |
 2288|       |    /*****************************************************************/
 2289|       |    /* At this point we are back to the interpreter we started with. */
 2290|       |    /*****************************************************************/
 2291|       |
 2292|       |    /* Finally we handle the error return from _PyImport_RunModInitFunc(). */
 2293|     43|    if (rc < 0) {
  ------------------
  |  Branch (2293:9): [True: 0, False: 43]
  ------------------
 2294|      0|        goto error;
 2295|      0|    }
 2296|     43|    if (main_error) {
  ------------------
  |  Branch (2296:9): [True: 0, False: 43]
  ------------------
 2297|      0|        goto error;
 2298|      0|    }
 2299|       |
 2300|     43|    if (res.kind == _Py_ext_module_kind_MULTIPHASE) {
  ------------------
  |  Branch (2300:9): [True: 43, False: 0]
  ------------------
 2301|     43|        assert_multiphase_def(def);
  ------------------
  |  | 1797|     43|    do {                                                            \
  |  | 1798|     43|        _Py_ext_module_kind kind = _get_extension_kind(def, false); \
  |  | 1799|     43|        assert(kind == _Py_ext_module_kind_MULTIPHASE               \
  |  | 1800|     43|                /* m_slots can be NULL. */                          \
  |  | 1801|     43|                || kind == _Py_ext_module_kind_UNKNOWN);            \
  |  | 1802|     43|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1802:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
  |  Branch (2301:9): [True: 43, False: 0]
  |  Branch (2301:9): [True: 0, False: 0]
  ------------------
 2302|     43|        assert(mod == NULL);
  ------------------
  |  Branch (2302:9): [True: 43, False: 0]
  ------------------
 2303|       |        /* Note that we cheat a little by not repeating the calls
 2304|       |         * to _PyImport_GetModuleExportHooks() and _PyImport_RunModInitFunc(). */
 2305|     43|        mod = PyModule_FromDefAndSpec(def, spec);
  ------------------
  |  |   80|     43|    PyModule_FromDefAndSpec2((module), (spec), PYTHON_API_VERSION)
  |  |  ------------------
  |  |  |  |   59|     43|#define PYTHON_API_VERSION 1013
  |  |  ------------------
  ------------------
 2306|     43|        if (mod == NULL) {
  ------------------
  |  Branch (2306:13): [True: 0, False: 43]
  ------------------
 2307|      0|            goto error;
 2308|      0|        }
 2309|     43|    }
 2310|      0|    else {
 2311|      0|        assert(res.kind == _Py_ext_module_kind_SINGLEPHASE);
  ------------------
  |  Branch (2311:9): [True: 0, False: 0]
  ------------------
 2312|      0|        assert_singlephase_def(def);
  ------------------
  |  | 1805|      0|    do {                                                            \
  |  | 1806|      0|        _Py_ext_module_kind kind = _get_extension_kind(def, true);  \
  |  | 1807|      0|        assert(kind == _Py_ext_module_kind_SINGLEPHASE              \
  |  | 1808|      0|                || kind == _Py_ext_module_kind_UNKNOWN);            \
  |  | 1809|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1809:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2312:9): [True: 0, False: 0]
  |  Branch (2312:9): [True: 0, False: 0]
  ------------------
 2313|       |
 2314|      0|        if (_PyImport_CheckSubinterpIncompatibleExtensionAllowed(name_buf) < 0) {
  ------------------
  |  Branch (2314:13): [True: 0, False: 0]
  ------------------
 2315|      0|            goto error;
 2316|      0|        }
 2317|      0|        assert(!PyErr_Occurred());
  ------------------
  |  Branch (2317:9): [True: 0, False: 0]
  ------------------
 2318|       |
 2319|      0|        if (switched) {
  ------------------
  |  Branch (2319:13): [True: 0, False: 0]
  ------------------
 2320|       |            /* We switched to the main interpreter to run the init
 2321|       |             * function, so now we will "reload" the module from the
 2322|       |             * cached data using the original subinterpreter. */
 2323|      0|            assert(mod == NULL);
  ------------------
  |  Branch (2323:13): [True: 0, False: 0]
  ------------------
 2324|      0|            mod = reload_singlephase_extension(tstate, cached, info);
 2325|      0|            if (mod == NULL) {
  ------------------
  |  Branch (2325:17): [True: 0, False: 0]
  ------------------
 2326|      0|                goto error;
 2327|      0|            }
 2328|      0|            assert(!PyErr_Occurred());
  ------------------
  |  Branch (2328:13): [True: 0, False: 0]
  ------------------
 2329|      0|            assert(PyModule_Check(mod));
  ------------------
  |  Branch (2329:13): [True: 0, False: 0]
  ------------------
 2330|      0|        }
 2331|      0|        else {
 2332|      0|            assert(mod != NULL);
  ------------------
  |  Branch (2332:13): [True: 0, False: 0]
  ------------------
 2333|      0|            assert(PyModule_Check(mod));
  ------------------
  |  Branch (2333:13): [True: 0, False: 0]
  ------------------
 2334|       |
 2335|       |            /* Update per-interpreter import state. */
 2336|      0|            PyObject *modules = get_modules_dict(tstate, true);
 2337|      0|            if (finish_singlephase_extension(
  ------------------
  |  Branch (2337:17): [True: 0, False: 0]
  ------------------
 2338|      0|                    tstate, mod, cached, info->name, modules) < 0)
 2339|      0|            {
 2340|      0|                goto error;
 2341|      0|            }
 2342|      0|        }
 2343|      0|    }
 2344|       |
 2345|     43|    _Py_ext_module_loader_result_clear(&res);
 2346|     43|    return mod;
 2347|       |
 2348|      0|error:
 2349|      0|    Py_XDECREF(mod);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2350|      0|    _Py_ext_module_loader_result_clear(&res);
 2351|       |    return NULL;
 2352|     43|}
import.c:module_dict_for_exec:
 2840|      4|{
 2841|      4|    PyObject *m, *d;
 2842|       |
 2843|      4|    m = import_add_module(tstate, name);
 2844|      4|    if (m == NULL)
  ------------------
  |  Branch (2844:9): [True: 0, False: 4]
  ------------------
 2845|      0|        return NULL;
 2846|       |    /* If the module is being reloaded, we get the old module back
 2847|       |       and re-use its dict to exec the new code. */
 2848|      4|    d = PyModule_GetDict(m);
 2849|      4|    int r = PyDict_Contains(d, &_Py_ID(__builtins__));
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2850|      4|    if (r == 0) {
  ------------------
  |  Branch (2850:9): [True: 4, False: 0]
  ------------------
 2851|      4|        r = PyDict_SetItem(d, &_Py_ID(__builtins__), PyEval_GetBuiltins());
  ------------------
  |  |  936|      4|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2852|      4|    }
 2853|      4|    if (r < 0) {
  ------------------
  |  Branch (2853:9): [True: 0, False: 4]
  ------------------
 2854|      0|        remove_module(tstate, name);
 2855|      0|        Py_DECREF(m);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2856|      0|        return NULL;
 2857|      0|    }
 2858|       |
 2859|      4|    Py_INCREF(d);
  ------------------
  |  |  310|      4|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2860|      4|    Py_DECREF(m);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2861|      4|    return d;
 2862|      4|}
import.c:exec_code_in_module:
 2867|      4|{
 2868|      4|    PyObject *v, *m;
 2869|       |
 2870|      4|    v = PyEval_EvalCode(code_object, module_dict, module_dict);
 2871|      4|    if (v == NULL) {
  ------------------
  |  Branch (2871:9): [True: 0, False: 4]
  ------------------
 2872|      0|        remove_module(tstate, name);
 2873|      0|        return NULL;
 2874|      0|    }
 2875|      4|    Py_DECREF(v);
  ------------------
  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2876|       |
 2877|      4|    m = import_get_module(tstate, name);
 2878|      4|    if (m == NULL && !_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (2878:9): [True: 0, False: 4]
  |  Branch (2878:22): [True: 0, False: 0]
  ------------------
 2879|      0|        _PyErr_Format(tstate, PyExc_ImportError,
 2880|      0|                      "Loaded module %R not found in sys.modules",
 2881|      0|                      name);
 2882|      0|    }
 2883|       |
 2884|      4|    return m;
 2885|      4|}
import.c:find_frozen:
 3182|    347|{
 3183|    347|    if (info != NULL) {
  ------------------
  |  Branch (3183:9): [True: 347, False: 0]
  ------------------
 3184|    347|        memset(info, 0, sizeof(*info));
 3185|    347|    }
 3186|       |
 3187|    347|    if (nameobj == NULL || nameobj == Py_None) {
  ------------------
  |  |  616|    347|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3187:9): [True: 0, False: 347]
  |  Branch (3187:28): [True: 0, False: 347]
  ------------------
 3188|      0|        return FROZEN_BAD_NAME;
 3189|      0|    }
 3190|    347|    const char *name = _PyUnicode_AsUTF8NoNUL(nameobj);
 3191|    347|    if (name == NULL) {
  ------------------
  |  Branch (3191:9): [True: 0, False: 347]
  ------------------
 3192|       |        // Note that this function previously used
 3193|       |        // _PyUnicode_EqualToASCIIString().  We clear the error here
 3194|       |        // (instead of propagating it) to match the earlier behavior
 3195|       |        // more closely.
 3196|      0|        PyErr_Clear();
 3197|      0|        return FROZEN_BAD_NAME;
 3198|      0|    }
 3199|       |
 3200|    347|    const struct _frozen *p = look_up_frozen(name);
 3201|    347|    if (p == NULL) {
  ------------------
  |  Branch (3201:9): [True: 287, False: 60]
  ------------------
 3202|    287|        return FROZEN_NOT_FOUND;
 3203|    287|    }
 3204|     60|    if (info != NULL) {
  ------------------
  |  Branch (3204:9): [True: 60, False: 0]
  ------------------
 3205|     60|        info->nameobj = nameobj;  // borrowed
 3206|     60|        info->data = (const char *)p->code;
 3207|     60|        info->size = p->size;
 3208|     60|        info->is_package = p->is_package;
 3209|     60|        if (p->size < 0) {
  ------------------
  |  Branch (3209:13): [True: 0, False: 60]
  ------------------
 3210|       |            // backward compatibility with negative size values
 3211|      0|            info->size = -(p->size);
 3212|      0|            info->is_package = true;
 3213|      0|        }
 3214|     60|        info->origname = name;
 3215|     60|        info->is_alias = resolve_module_alias(name, _PyImport_FrozenAliases,
 3216|     60|                                              &info->origname);
 3217|     60|    }
 3218|     60|    if (p->code == NULL) {
  ------------------
  |  Branch (3218:9): [True: 0, False: 60]
  ------------------
 3219|       |        /* It is frozen but marked as un-importable. */
 3220|      0|        return FROZEN_EXCLUDED;
 3221|      0|    }
 3222|     60|    if (p->code[0] == '\0' || p->size == 0) {
  ------------------
  |  Branch (3222:9): [True: 0, False: 60]
  |  Branch (3222:31): [True: 0, False: 60]
  ------------------
 3223|       |        /* Does not contain executable code. */
 3224|      0|        return FROZEN_INVALID;
 3225|      0|    }
 3226|     60|    return FROZEN_OKAY;
 3227|     60|}
import.c:look_up_frozen:
 3125|    347|{
 3126|    347|    const struct _frozen *p;
 3127|       |    // We always use the bootstrap modules.
 3128|  1.68k|    for (p = _PyImport_FrozenBootstrap; ; p++) {
 3129|  1.68k|        if (p->name == NULL) {
  ------------------
  |  Branch (3129:13): [True: 327, False: 1.35k]
  ------------------
 3130|       |            // We hit the end-of-list sentinel value.
 3131|    327|            break;
 3132|    327|        }
 3133|  1.35k|        if (strcmp(name, p->name) == 0) {
  ------------------
  |  Branch (3133:13): [True: 20, False: 1.33k]
  ------------------
 3134|     20|            return p;
 3135|     20|        }
 3136|  1.35k|    }
 3137|       |    // Prefer custom modules, if any.  Frozen stdlib modules can be
 3138|       |    // disabled here by setting "code" to NULL in the array entry.
 3139|    327|    if (PyImport_FrozenModules != NULL) {
  ------------------
  |  Branch (3139:9): [True: 0, False: 327]
  ------------------
 3140|      0|        for (p = PyImport_FrozenModules; ; p++) {
 3141|      0|            if (p->name == NULL) {
  ------------------
  |  Branch (3141:17): [True: 0, False: 0]
  ------------------
 3142|      0|                break;
 3143|      0|            }
 3144|      0|            if (strcmp(name, p->name) == 0) {
  ------------------
  |  Branch (3144:17): [True: 0, False: 0]
  ------------------
 3145|      0|                return p;
 3146|      0|            }
 3147|      0|        }
 3148|      0|    }
 3149|       |    // Frozen stdlib modules may be disabled.
 3150|    327|    if (use_frozen()) {
  ------------------
  |  Branch (3150:9): [True: 327, False: 0]
  ------------------
 3151|  4.84k|        for (p = _PyImport_FrozenStdlib; ; p++) {
 3152|  4.84k|            if (p->name == NULL) {
  ------------------
  |  Branch (3152:17): [True: 287, False: 4.55k]
  ------------------
 3153|    287|                break;
 3154|    287|            }
 3155|  4.55k|            if (strcmp(name, p->name) == 0) {
  ------------------
  |  Branch (3155:17): [True: 40, False: 4.51k]
  ------------------
 3156|     40|                return p;
 3157|     40|            }
 3158|  4.55k|        }
 3159|  3.44k|        for (p = _PyImport_FrozenTest; ; p++) {
 3160|  3.44k|            if (p->name == NULL) {
  ------------------
  |  Branch (3160:17): [True: 287, False: 3.15k]
  ------------------
 3161|    287|                break;
 3162|    287|            }
 3163|  3.15k|            if (strcmp(name, p->name) == 0) {
  ------------------
  |  Branch (3163:17): [True: 0, False: 3.15k]
  ------------------
 3164|      0|                return p;
 3165|      0|            }
 3166|  3.15k|        }
 3167|    287|    }
 3168|    287|    return NULL;
 3169|    327|}
import.c:use_frozen:
 2984|    327|{
 2985|    327|    PyInterpreterState *interp = _PyInterpreterState_GET();
 2986|    327|    int override = OVERRIDE_FROZEN_MODULES(interp);
  ------------------
  |  |  102|    327|    (interp)->imports.override_frozen_modules
  ------------------
 2987|    327|    if (override > 0) {
  ------------------
  |  Branch (2987:9): [True: 0, False: 327]
  ------------------
 2988|      0|        return true;
 2989|      0|    }
 2990|    327|    else if (override < 0) {
  ------------------
  |  Branch (2990:14): [True: 0, False: 327]
  ------------------
 2991|      0|        return false;
 2992|      0|    }
 2993|    327|    else {
 2994|    327|        return interp->config.use_frozen_modules;
 2995|    327|    }
 2996|    327|}
import.c:resolve_module_alias:
 2966|     60|{
 2967|     60|    const struct _module_alias *entry;
 2968|    472|    for (entry = aliases; ; entry++) {
 2969|    472|        if (entry->name == NULL) {
  ------------------
  |  Branch (2969:13): [True: 44, False: 428]
  ------------------
 2970|       |            /* It isn't an alias. */
 2971|     44|            return false;
 2972|     44|        }
 2973|    428|        if (strcmp(name, entry->name) == 0) {
  ------------------
  |  Branch (2973:13): [True: 16, False: 412]
  ------------------
 2974|     16|            if (alias != NULL) {
  ------------------
  |  Branch (2974:17): [True: 16, False: 0]
  ------------------
 2975|     16|                *alias = entry->orig;
 2976|     16|            }
 2977|       |            return true;
 2978|     16|        }
 2979|    428|    }
 2980|     60|}
import.c:unmarshal_frozen_code:
 3231|     28|{
 3232|     28|    PyObject *co = PyMarshal_ReadObjectFromString(info->data, info->size);
 3233|     28|    if (co == NULL) {
  ------------------
  |  Branch (3233:9): [True: 0, False: 28]
  ------------------
 3234|       |        /* Does not contain executable code. */
 3235|      0|        PyErr_Clear();
 3236|      0|        set_frozen_error(FROZEN_INVALID, info->nameobj);
 3237|      0|        return NULL;
 3238|      0|    }
 3239|     28|    if (!PyCode_Check(co)) {
  ------------------
  |  |  168|     28|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|     28|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3239:9): [True: 0, False: 28]
  ------------------
 3240|       |        // We stick with TypeError for backward compatibility.
 3241|      0|        PyErr_Format(PyExc_TypeError,
 3242|      0|                     "frozen object %R is not a code object",
 3243|      0|                     info->nameobj);
 3244|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3245|      0|        return NULL;
 3246|      0|    }
 3247|     28|    return co;
 3248|     28|}
import.c:remove_importlib_frames:
 3677|    184|{
 3678|    184|    const char *importlib_filename = "<frozen importlib._bootstrap>";
 3679|    184|    const char *external_filename = "<frozen importlib._bootstrap_external>";
 3680|    184|    const char *remove_frames = "_call_with_frames_removed";
 3681|    184|    int always_trim = 0;
 3682|    184|    int in_importlib = 0;
 3683|    184|    PyObject **prev_link, **outer_link = NULL;
 3684|    184|    PyObject *base_tb = NULL;
 3685|       |
 3686|       |    /* Synopsis: if it's an ImportError, we trim all importlib chunks
 3687|       |       from the traceback. We always trim chunks
 3688|       |       which end with a call to "_call_with_frames_removed". */
 3689|       |
 3690|    184|    PyObject *exc = _PyErr_GetRaisedException(tstate);
 3691|    184|    if (exc == NULL || _PyInterpreterState_GetConfig(tstate->interp)->verbose) {
  ------------------
  |  Branch (3691:9): [True: 0, False: 184]
  |  Branch (3691:24): [True: 0, False: 184]
  ------------------
 3692|      0|        goto done;
 3693|      0|    }
 3694|       |
 3695|    184|    if (PyType_IsSubtype(Py_TYPE(exc), (PyTypeObject *) PyExc_ImportError)) {
  ------------------
  |  |  213|    184|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3695:9): [True: 184, False: 0]
  ------------------
 3696|    184|        always_trim = 1;
 3697|    184|    }
 3698|       |
 3699|    184|    assert(PyExceptionInstance_Check(exc));
  ------------------
  |  Branch (3699:5): [True: 184, False: 0]
  ------------------
 3700|    184|    base_tb = PyException_GetTraceback(exc);
 3701|    184|    prev_link = &base_tb;
 3702|    184|    PyObject *tb = base_tb;
 3703|    552|    while (tb != NULL) {
  ------------------
  |  Branch (3703:12): [True: 368, False: 184]
  ------------------
 3704|    368|        assert(PyTraceBack_Check(tb));
  ------------------
  |  Branch (3704:9): [True: 368, False: 0]
  ------------------
 3705|    368|        PyTracebackObject *traceback = (PyTracebackObject *)tb;
 3706|    368|        PyObject *next = (PyObject *) traceback->tb_next;
 3707|    368|        PyFrameObject *frame = traceback->tb_frame;
 3708|    368|        PyCodeObject *code = PyFrame_GetCode(frame);
 3709|    368|        int now_in_importlib;
 3710|       |
 3711|    368|        now_in_importlib = _PyUnicode_EqualToASCIIString(code->co_filename, importlib_filename) ||
  ------------------
  |  Branch (3711:28): [True: 368, False: 0]
  ------------------
 3712|      0|                           _PyUnicode_EqualToASCIIString(code->co_filename, external_filename);
  ------------------
  |  Branch (3712:28): [True: 0, False: 0]
  ------------------
 3713|    368|        if (now_in_importlib && !in_importlib) {
  ------------------
  |  Branch (3713:13): [True: 368, False: 0]
  |  Branch (3713:33): [True: 184, False: 184]
  ------------------
 3714|       |            /* This is the link to this chunk of importlib tracebacks */
 3715|    184|            outer_link = prev_link;
 3716|    184|        }
 3717|    368|        in_importlib = now_in_importlib;
 3718|       |
 3719|    368|        if (in_importlib &&
  ------------------
  |  Branch (3719:13): [True: 368, False: 0]
  ------------------
 3720|    368|            (always_trim ||
  ------------------
  |  Branch (3720:14): [True: 368, False: 0]
  ------------------
 3721|    368|             _PyUnicode_EqualToASCIIString(code->co_name, remove_frames))) {
  ------------------
  |  Branch (3721:14): [True: 0, False: 0]
  ------------------
 3722|    368|            Py_XSETREF(*outer_link, Py_XNewRef(next));
  ------------------
  |  |  376|    368|    do { \
  |  |  377|    368|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|    368|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|    368|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|    368|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|    368|        *_tmp_dst_ptr = (src); \
  |  |  380|    368|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|    368|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    368|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    368|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|    368|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 368]
  |  |  ------------------
  ------------------
 3723|    368|            prev_link = outer_link;
 3724|    368|        }
 3725|      0|        else {
 3726|      0|            prev_link = (PyObject **) &traceback->tb_next;
 3727|      0|        }
 3728|    368|        Py_DECREF(code);
  ------------------
  |  |  430|    368|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    368|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    368|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3729|    368|        tb = next;
 3730|    368|    }
 3731|    184|    if (base_tb == NULL) {
  ------------------
  |  Branch (3731:9): [True: 184, False: 0]
  ------------------
 3732|    184|        base_tb = Py_None;
  ------------------
  |  |  616|    184|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3733|    184|        Py_INCREF(Py_None);
  ------------------
  |  |  310|    184|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3734|    184|    }
 3735|    184|    PyException_SetTraceback(exc, base_tb);
 3736|    184|done:
 3737|    184|    Py_XDECREF(base_tb);
  ------------------
  |  |  524|    184|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    184|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    184|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3738|    184|    _PyErr_SetRaisedException(tstate, exc);
 3739|    184|}
import.c:resolve_name:
 3744|     12|{
 3745|     12|    PyObject *abs_name;
 3746|     12|    PyObject *package = NULL;
 3747|     12|    PyObject *spec = NULL;
 3748|     12|    Py_ssize_t last_dot;
 3749|     12|    PyObject *base;
 3750|     12|    int level_up;
 3751|       |
 3752|     12|    if (globals == NULL) {
  ------------------
  |  Branch (3752:9): [True: 0, False: 12]
  ------------------
 3753|      0|        _PyErr_SetString(tstate, PyExc_KeyError, "'__name__' not in globals");
 3754|      0|        goto error;
 3755|      0|    }
 3756|     12|    if (!PyAnyDict_Check(globals)) {
  ------------------
  |  |   43|     12|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|     12|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|     24|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 12, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3757|      0|        _PyErr_SetString(tstate, PyExc_TypeError,
 3758|      0|                         "globals must be a dict or a frozendict");
 3759|      0|        goto error;
 3760|      0|    }
 3761|     12|    if (PyDict_GetItemRef(globals, &_Py_ID(__package__), &package) < 0) {
  ------------------
  |  |  936|     12|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     12|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     12|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3761:9): [True: 0, False: 12]
  ------------------
 3762|      0|        goto error;
 3763|      0|    }
 3764|     12|    if (package == Py_None) {
  ------------------
  |  |  616|     12|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3764:9): [True: 0, False: 12]
  ------------------
 3765|      0|        Py_DECREF(package);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3766|      0|        package = NULL;
 3767|      0|    }
 3768|     12|    if (PyDict_GetItemRef(globals, &_Py_ID(__spec__), &spec) < 0) {
  ------------------
  |  |  936|     12|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     12|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     12|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3768:9): [True: 0, False: 12]
  ------------------
 3769|      0|        goto error;
 3770|      0|    }
 3771|       |
 3772|     12|    if (package != NULL) {
  ------------------
  |  Branch (3772:9): [True: 12, False: 0]
  ------------------
 3773|     12|        if (!PyUnicode_Check(package)) {
  ------------------
  |  |  103|     12|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     12|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3773:13): [True: 0, False: 12]
  ------------------
 3774|      0|            _PyErr_SetString(tstate, PyExc_TypeError,
 3775|      0|                             "package must be a string");
 3776|      0|            goto error;
 3777|      0|        }
 3778|     12|        else if (spec != NULL && spec != Py_None) {
  ------------------
  |  |  616|     12|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3778:18): [True: 12, False: 0]
  |  Branch (3778:34): [True: 12, False: 0]
  ------------------
 3779|     12|            int equal;
 3780|     12|            PyObject *parent = PyObject_GetAttr(spec, &_Py_ID(parent));
  ------------------
  |  |  936|     12|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     12|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     12|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3781|     12|            if (parent == NULL) {
  ------------------
  |  Branch (3781:17): [True: 0, False: 12]
  ------------------
 3782|      0|                goto error;
 3783|      0|            }
 3784|       |
 3785|     12|            equal = PyObject_RichCompareBool(package, parent, Py_EQ);
  ------------------
  |  |  654|     12|#define Py_EQ 2
  ------------------
 3786|     12|            Py_DECREF(parent);
  ------------------
  |  |  430|     12|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3787|     12|            if (equal < 0) {
  ------------------
  |  Branch (3787:17): [True: 0, False: 12]
  ------------------
 3788|      0|                goto error;
 3789|      0|            }
 3790|     12|            else if (equal == 0) {
  ------------------
  |  Branch (3790:22): [True: 0, False: 12]
  ------------------
 3791|      0|                if (PyErr_WarnEx(PyExc_DeprecationWarning,
  ------------------
  |  Branch (3791:21): [True: 0, False: 0]
  ------------------
 3792|      0|                        "__package__ != __spec__.parent", 1) < 0) {
 3793|      0|                    goto error;
 3794|      0|                }
 3795|      0|            }
 3796|     12|        }
 3797|     12|    }
 3798|      0|    else if (spec != NULL && spec != Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3798:14): [True: 0, False: 0]
  |  Branch (3798:30): [True: 0, False: 0]
  ------------------
 3799|      0|        package = PyObject_GetAttr(spec, &_Py_ID(parent));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3800|      0|        if (package == NULL) {
  ------------------
  |  Branch (3800:13): [True: 0, False: 0]
  ------------------
 3801|      0|            goto error;
 3802|      0|        }
 3803|      0|        else if (!PyUnicode_Check(package)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3803:18): [True: 0, False: 0]
  ------------------
 3804|      0|            _PyErr_SetString(tstate, PyExc_TypeError,
 3805|      0|                             "__spec__.parent must be a string");
 3806|      0|            goto error;
 3807|      0|        }
 3808|      0|    }
 3809|      0|    else {
 3810|      0|        if (PyErr_WarnEx(PyExc_ImportWarning,
  ------------------
  |  Branch (3810:13): [True: 0, False: 0]
  ------------------
 3811|      0|                    "can't resolve package from __spec__ or __package__, "
 3812|      0|                    "falling back on __name__ and __path__", 1) < 0) {
 3813|      0|            goto error;
 3814|      0|        }
 3815|       |
 3816|      0|        if (PyDict_GetItemRef(globals, &_Py_ID(__name__), &package) < 0) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3816:13): [True: 0, False: 0]
  ------------------
 3817|      0|            goto error;
 3818|      0|        }
 3819|      0|        if (package == NULL) {
  ------------------
  |  Branch (3819:13): [True: 0, False: 0]
  ------------------
 3820|      0|            _PyErr_SetString(tstate, PyExc_KeyError,
 3821|      0|                             "'__name__' not in globals");
 3822|      0|            goto error;
 3823|      0|        }
 3824|       |
 3825|      0|        if (!PyUnicode_Check(package)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3825:13): [True: 0, False: 0]
  ------------------
 3826|      0|            _PyErr_SetString(tstate, PyExc_TypeError,
 3827|      0|                             "__name__ must be a string");
 3828|      0|            goto error;
 3829|      0|        }
 3830|       |
 3831|      0|        int haspath = PyDict_Contains(globals, &_Py_ID(__path__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3832|      0|        if (haspath < 0) {
  ------------------
  |  Branch (3832:13): [True: 0, False: 0]
  ------------------
 3833|      0|            goto error;
 3834|      0|        }
 3835|      0|        if (!haspath) {
  ------------------
  |  Branch (3835:13): [True: 0, False: 0]
  ------------------
 3836|      0|            Py_ssize_t dot;
 3837|       |
 3838|      0|            dot = PyUnicode_FindChar(package, '.',
 3839|      0|                                        0, PyUnicode_GET_LENGTH(package), -1);
  ------------------
  |  |  299|      0|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3840|      0|            if (dot == -2) {
  ------------------
  |  Branch (3840:17): [True: 0, False: 0]
  ------------------
 3841|      0|                goto error;
 3842|      0|            }
 3843|      0|            else if (dot == -1) {
  ------------------
  |  Branch (3843:22): [True: 0, False: 0]
  ------------------
 3844|      0|                goto no_parent_error;
 3845|      0|            }
 3846|      0|            PyObject *substr = PyUnicode_Substring(package, 0, dot);
 3847|      0|            if (substr == NULL) {
  ------------------
  |  Branch (3847:17): [True: 0, False: 0]
  ------------------
 3848|      0|                goto error;
 3849|      0|            }
 3850|      0|            Py_SETREF(package, substr);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3851|      0|        }
 3852|      0|    }
 3853|       |
 3854|     12|    last_dot = PyUnicode_GET_LENGTH(package);
  ------------------
  |  |  299|     12|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3855|     12|    if (last_dot == 0) {
  ------------------
  |  Branch (3855:9): [True: 0, False: 12]
  ------------------
 3856|      0|        goto no_parent_error;
 3857|      0|    }
 3858|       |
 3859|     12|    for (level_up = 1; level_up < level; level_up += 1) {
  ------------------
  |  Branch (3859:24): [True: 0, False: 12]
  ------------------
 3860|      0|        last_dot = PyUnicode_FindChar(package, '.', 0, last_dot, -1);
 3861|      0|        if (last_dot == -2) {
  ------------------
  |  Branch (3861:13): [True: 0, False: 0]
  ------------------
 3862|      0|            goto error;
 3863|      0|        }
 3864|      0|        else if (last_dot == -1) {
  ------------------
  |  Branch (3864:18): [True: 0, False: 0]
  ------------------
 3865|      0|            _PyErr_SetString(tstate, PyExc_ImportError,
 3866|      0|                             "attempted relative import beyond top-level "
 3867|      0|                             "package");
 3868|      0|            goto error;
 3869|      0|        }
 3870|      0|    }
 3871|       |
 3872|     12|    Py_XDECREF(spec);
  ------------------
  |  |  524|     12|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3873|     12|    base = PyUnicode_Substring(package, 0, last_dot);
 3874|     12|    Py_DECREF(package);
  ------------------
  |  |  430|     12|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3875|     12|    if (base == NULL || PyUnicode_GET_LENGTH(name) == 0) {
  ------------------
  |  |  299|     12|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3875:9): [True: 0, False: 12]
  |  Branch (3875:25): [True: 5, False: 7]
  ------------------
 3876|      5|        return base;
 3877|      5|    }
 3878|       |
 3879|      7|    abs_name = PyUnicode_FromFormat("%U.%U", base, name);
 3880|      7|    Py_DECREF(base);
  ------------------
  |  |  430|      7|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      7|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      7|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3881|      7|    return abs_name;
 3882|       |
 3883|      0|  no_parent_error:
 3884|      0|    _PyErr_SetString(tstate, PyExc_ImportError,
 3885|      0|                     "attempted relative import "
 3886|      0|                     "with no known parent package");
 3887|       |
 3888|      0|  error:
 3889|      0|    Py_XDECREF(spec);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3890|      0|    Py_XDECREF(package);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3891|       |    return NULL;
 3892|      0|}
import.c:get_abs_name:
 4186|   298k|{
 4187|   298k|    if (level > 0) {
  ------------------
  |  Branch (4187:9): [True: 12, False: 298k]
  ------------------
 4188|     12|        return resolve_name(tstate, name, globals, level);
 4189|     12|    }
 4190|   298k|    if (PyUnicode_GET_LENGTH(name) == 0) {
  ------------------
  |  |  299|   298k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   298k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   298k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4190:9): [True: 0, False: 298k]
  ------------------
 4191|      0|        _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
 4192|      0|        return NULL;
 4193|      0|    }
 4194|   298k|    return Py_NewRef(name);
  ------------------
  |  |  550|   298k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|   298k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   298k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4195|   298k|}
import.c:import_find_and_load:
 4178|    336|{
 4179|    336|    return import_find_and_load_with_name(
 4180|    336|        tstate, abs_name, &_Py_ID(_find_and_load), NULL);
  ------------------
  |  |  936|    336|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    336|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    336|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4181|    336|}
import.c:import_find_and_load_with_name:
 4119|    336|{
 4120|    336|    PyObject *mod = NULL;
 4121|    336|    PyInterpreterState *interp = tstate->interp;
 4122|    336|    int import_time = _PyInterpreterState_GetConfig(interp)->import_time;
 4123|    336|#define import_level FIND_AND_LOAD(interp).import_level
 4124|    336|#define accumulated FIND_AND_LOAD(interp).accumulated
 4125|       |
 4126|    336|    PyTime_t t1 = 0, accumulated_copy = accumulated;
  ------------------
  |  | 4124|    336|#define accumulated FIND_AND_LOAD(interp).accumulated
  |  |  ------------------
  |  |  |  |  117|    336|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4127|       |
 4128|       |    /* XOptions is initialized after first some imports.
 4129|       |     * So we can't have negative cache before completed initialization.
 4130|       |     * Anyway, importlib._find_and_load is much slower than
 4131|       |     * _PyDict_GetItemIdWithError().
 4132|       |     */
 4133|    336|    if (import_time) {
  ------------------
  |  Branch (4133:9): [True: 0, False: 336]
  ------------------
 4134|      0|        _IMPORT_TIME_HEADER(interp);
  ------------------
  |  |  135|      0|    do {                                                                      \
  |  |  136|      0|        if (FIND_AND_LOAD((interp)).header) {                                 \
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  |  |  |  Branch (136:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  137|      0|            fputs("import time: self [us] | cumulative | imported package\n", \
  |  |  138|      0|                  stderr);                                                    \
  |  |  139|      0|            FIND_AND_LOAD((interp)).header = 0;                               \
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  |  |  140|      0|        }                                                                     \
  |  |  141|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (141:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4135|       |
 4136|      0|        import_level++;
  ------------------
  |  | 4123|      0|#define import_level FIND_AND_LOAD(interp).import_level
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4137|       |        // ignore error: don't block import if reading the clock fails
 4138|      0|        (void)PyTime_PerfCounterRaw(&t1);
 4139|      0|        accumulated = 0;
  ------------------
  |  | 4124|      0|#define accumulated FIND_AND_LOAD(interp).accumulated
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4140|      0|    }
 4141|       |
 4142|    336|    if (PyDTrace_IMPORT_FIND_LOAD_START_ENABLED())
  ------------------
  |  Branch (4142:9): [True: 0, False: 336]
  ------------------
 4143|      0|        PyDTrace_IMPORT_FIND_LOAD_START(PyUnicode_AsUTF8(abs_name));
 4144|       |
 4145|    336|    mod = PyObject_CallMethodObjArgs(IMPORTLIB(interp), find_and_load,
  ------------------
  |  |   98|    336|    (interp)->imports.importlib
  ------------------
 4146|    336|                                     abs_name, IMPORT_FUNC(interp), NULL);
  ------------------
  |  |  108|    336|    (interp)->imports.import_func
  ------------------
 4147|       |
 4148|    336|    if (PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED()) {
  ------------------
  |  Branch (4148:9): [True: 0, False: 336]
  ------------------
 4149|      0|        int found = mod != NULL && mod != not_found;
  ------------------
  |  Branch (4149:21): [True: 0, False: 0]
  |  Branch (4149:36): [True: 0, False: 0]
  ------------------
 4150|      0|        PyDTrace_IMPORT_FIND_LOAD_DONE(PyUnicode_AsUTF8(abs_name),
 4151|      0|                                       found);
 4152|      0|    }
 4153|       |
 4154|    336|    if (import_time) {
  ------------------
  |  Branch (4154:9): [True: 0, False: 336]
  ------------------
 4155|      0|        PyTime_t t2;
 4156|      0|        (void)PyTime_PerfCounterRaw(&t2);
 4157|      0|        PyTime_t cum = t2 - t1;
 4158|       |
 4159|      0|        import_level--;
  ------------------
  |  | 4123|      0|#define import_level FIND_AND_LOAD(interp).import_level
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4160|      0|        PyObject *encoded_name = get_importtime_name(abs_name);
 4161|      0|        fprintf(stderr, "import time: %9ld | %10ld | %*s%s\n",
 4162|      0|                (long)_PyTime_AsMicroseconds(cum - accumulated, _PyTime_ROUND_CEILING),
  ------------------
  |  | 4124|      0|#define accumulated FIND_AND_LOAD(interp).accumulated
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4163|      0|                (long)_PyTime_AsMicroseconds(cum, _PyTime_ROUND_CEILING),
 4164|      0|                import_level*2, "",
  ------------------
  |  | 4123|      0|#define import_level FIND_AND_LOAD(interp).import_level
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4165|      0|                encoded_name != NULL ? PyBytes_AS_STRING(encoded_name) : "?");
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4165:17): [True: 0, False: 0]
  ------------------
 4166|      0|        Py_XDECREF(encoded_name);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4167|       |
 4168|      0|        accumulated = accumulated_copy + cum;
  ------------------
  |  | 4124|      0|#define accumulated FIND_AND_LOAD(interp).accumulated
  |  |  ------------------
  |  |  |  |  117|      0|    (interp)->imports.find_and_load
  |  |  ------------------
  ------------------
 4169|      0|    }
 4170|       |
 4171|    336|    return mod;
 4172|    336|#undef import_level
 4173|    336|#undef accumulated
 4174|    336|}
import.c:register_from_lazy_on_parent:
 4448|      2|{
 4449|      2|    PyObject *fromname = PyUnicode_FromFormat("%U.%U", abs_name, from);
 4450|      2|    if (fromname == NULL) {
  ------------------
  |  Branch (4450:9): [True: 0, False: 2]
  ------------------
 4451|      0|        return -1;
 4452|      0|    }
 4453|       |
 4454|       |    // Add the module name to sys.lazy_modules set (PEP 810).
 4455|      2|    PyObject *lazy_modules = LAZY_MODULES(tstate->interp);
  ------------------
  |  |   94|      2|    (interp)->imports.lazy_modules
  ------------------
 4456|      2|    if (PySet_Add(lazy_modules, fromname) < 0) {
  ------------------
  |  Branch (4456:9): [True: 0, False: 2]
  ------------------
 4457|      0|        Py_DECREF(fromname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4458|      0|        return -1;
 4459|      0|    }
 4460|       |
 4461|      2|    int res = register_lazy_on_parent(tstate, fromname);
 4462|      2|    Py_DECREF(fromname);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4463|      2|    return res;
 4464|      2|}
import.c:register_lazy_on_parent:
 4389|     11|{
 4390|     11|    int ret = -1;
 4391|     11|    PyObject *parent = NULL;
 4392|     11|    PyObject *child = NULL;
 4393|       |
 4394|     11|    PyInterpreterState *interp = tstate->interp;
 4395|     11|    PyObject *lazy_pending_submodules = LAZY_PENDING_SUBMODULES(interp);
  ------------------
  |  |   96|     11|    (interp)->imports.lazy_pending_submodules
  ------------------
 4396|     11|    assert(lazy_pending_submodules != NULL);
  ------------------
  |  Branch (4396:5): [True: 11, False: 0]
  ------------------
 4397|       |
 4398|     11|    Py_INCREF(name);
  ------------------
  |  |  310|     11|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4399|     13|    while (true) {
  ------------------
  |  Branch (4399:12): [True: 13, Folded]
  ------------------
 4400|     13|        Py_ssize_t dot = PyUnicode_FindChar(name, '.', 0,
 4401|     13|                                            PyUnicode_GET_LENGTH(name), -1);
  ------------------
  |  |  299|     13|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4402|     13|        if (dot < 0) {
  ------------------
  |  Branch (4402:13): [True: 11, False: 2]
  ------------------
 4403|     11|            PyObject *lazy_submodules = ensure_lazy_pending_submodules(
 4404|     11|                (PyDictObject *)lazy_pending_submodules, name);
 4405|     11|            if (lazy_submodules == NULL) {
  ------------------
  |  Branch (4405:17): [True: 0, False: 11]
  ------------------
 4406|      0|                goto done;
 4407|      0|            }
 4408|     11|            Py_DECREF(lazy_submodules);
  ------------------
  |  |  430|     11|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4409|     11|            ret = 0;
 4410|     11|            goto done;
 4411|     11|        }
 4412|      2|        parent = PyUnicode_Substring(name, 0, dot);
 4413|      2|        if (parent == NULL) {
  ------------------
  |  Branch (4413:13): [True: 0, False: 2]
  ------------------
 4414|      0|            goto done;
 4415|      0|        }
 4416|      2|        Py_XDECREF(child);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4417|      2|        child = PyUnicode_Substring(name, dot + 1, PyUnicode_GET_LENGTH(name));
  ------------------
  |  |  299|      2|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4418|      2|        if (child == NULL) {
  ------------------
  |  Branch (4418:13): [True: 0, False: 2]
  ------------------
 4419|      0|            goto done;
 4420|      0|        }
 4421|       |
 4422|      2|        PyObject *lazy_submodules = ensure_lazy_pending_submodules(
 4423|      2|            (PyDictObject *)lazy_pending_submodules, parent);
 4424|      2|        if (lazy_submodules == NULL) {
  ------------------
  |  Branch (4424:13): [True: 0, False: 2]
  ------------------
 4425|      0|            goto done;
 4426|      0|        }
 4427|       |
 4428|      2|        if (PySet_Add(lazy_submodules, child) < 0) {
  ------------------
  |  Branch (4428:13): [True: 0, False: 2]
  ------------------
 4429|      0|            Py_DECREF(lazy_submodules);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4430|      0|            goto done;
 4431|      0|        }
 4432|      2|        Py_DECREF(lazy_submodules);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4433|       |
 4434|      2|        Py_SETREF(name, parent);
  ------------------
  |  |  354|      2|    do { \
  |  |  355|      2|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      2|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      2|        *_tmp_dst_ptr = (src); \
  |  |  358|      2|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4435|      2|        parent = NULL;
 4436|      2|    }
 4437|       |
 4438|     11|done:
 4439|     11|    Py_XDECREF(child);
  ------------------
  |  |  524|     11|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4440|     11|    Py_XDECREF(parent);
  ------------------
  |  |  524|     11|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4441|     11|    Py_XDECREF(name);
  ------------------
  |  |  524|     11|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4442|     11|    return ret;
 4443|     11|}
import.c:ensure_lazy_pending_submodules:
 4365|     13|{
 4366|     13|    PyObject *lazy_submodules;
 4367|     13|    Py_BEGIN_CRITICAL_SECTION(lazy_modules);
  ------------------
  |  |   51|     13|    {
  ------------------
 4368|     13|    int err = _PyDict_GetItemRef_Unicode_LockHeld(lazy_modules, parent,
 4369|     13|                                                  &lazy_submodules);
 4370|     13|    if (err == 0) {
  ------------------
  |  Branch (4370:9): [True: 11, False: 2]
  ------------------
 4371|       |        // value isn't present
 4372|     11|        lazy_submodules = PySet_New(NULL);
 4373|     11|        if (lazy_submodules != NULL &&
  ------------------
  |  Branch (4373:13): [True: 11, False: 0]
  ------------------
 4374|     11|            _PyDict_SetItem_LockHeld(lazy_modules, parent,
  ------------------
  |  Branch (4374:13): [True: 0, False: 11]
  ------------------
 4375|     11|                                     lazy_submodules) < 0) {
 4376|      0|            Py_CLEAR(lazy_submodules);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 4377|      0|        }
 4378|     11|    }
 4379|     13|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     13|    }
  ------------------
 4380|     13|    return lazy_submodules;
 4381|     13|}
import.c:init_builtin_modules_table:
 2687|      2|{
 2688|      2|    size_t size;
 2689|     78|    for (size = 0; PyImport_Inittab[size].name != NULL; size++)
  ------------------
  |  Branch (2689:20): [True: 76, False: 2]
  ------------------
 2690|     76|        ;
 2691|      2|    size++;
 2692|       |
 2693|       |    /* Make the copy. */
 2694|      2|    struct _inittab *copied = _PyMem_DefaultRawMalloc(size * sizeof(struct _inittab));
 2695|      2|    if (copied == NULL) {
  ------------------
  |  Branch (2695:9): [True: 0, False: 2]
  ------------------
 2696|      0|        return -1;
 2697|      0|    }
 2698|      2|    memcpy(copied, PyImport_Inittab, size * sizeof(struct _inittab));
 2699|      2|    INITTAB = copied;
  ------------------
  |  |   80|      2|#define INITTAB _PyRuntime.imports.inittab
  ------------------
 2700|      2|    return 0;
 2701|      2|}
import.c:init_importlib:
 3410|      2|{
 3411|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (3411:5): [True: 2, False: 0]
  ------------------
 3412|       |
 3413|      2|    PyInterpreterState *interp = tstate->interp;
 3414|      2|    int verbose = _PyInterpreterState_GetConfig(interp)->verbose;
 3415|       |
 3416|       |    // Import _importlib through its frozen version, _frozen_importlib.
 3417|      2|    if (verbose) {
  ------------------
  |  Branch (3417:9): [True: 0, False: 2]
  ------------------
 3418|      0|        PySys_FormatStderr("import _frozen_importlib # frozen\n");
 3419|      0|    }
 3420|      2|    if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
  ------------------
  |  Branch (3420:9): [True: 0, False: 2]
  ------------------
 3421|      0|        return -1;
 3422|      0|    }
 3423|       |
 3424|      2|    PyObject *importlib = PyImport_AddModuleRef("_frozen_importlib");
 3425|      2|    if (importlib == NULL) {
  ------------------
  |  Branch (3425:9): [True: 0, False: 2]
  ------------------
 3426|      0|        return -1;
 3427|      0|    }
 3428|      2|    IMPORTLIB(interp) = importlib;
  ------------------
  |  |   98|      2|    (interp)->imports.importlib
  ------------------
 3429|       |
 3430|       |    // Import the _imp module
 3431|      2|    if (verbose) {
  ------------------
  |  Branch (3431:9): [True: 0, False: 2]
  ------------------
 3432|      0|        PySys_FormatStderr("import _imp # builtin\n");
 3433|      0|    }
 3434|      2|    PyObject *imp_mod = bootstrap_imp(tstate);
 3435|      2|    if (imp_mod == NULL) {
  ------------------
  |  Branch (3435:9): [True: 0, False: 2]
  ------------------
 3436|      0|        return -1;
 3437|      0|    }
 3438|      2|    if (_PyImport_SetModuleString("_imp", imp_mod) < 0) {
  ------------------
  |  Branch (3438:9): [True: 0, False: 2]
  ------------------
 3439|      0|        Py_DECREF(imp_mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3440|      0|        return -1;
 3441|      0|    }
 3442|       |
 3443|       |    // Install importlib as the implementation of import
 3444|      2|    PyObject *value = PyObject_CallMethod(importlib, "_install",
 3445|      2|                                          "OO", sysmod, imp_mod);
 3446|      2|    Py_DECREF(imp_mod);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3447|      2|    if (value == NULL) {
  ------------------
  |  Branch (3447:9): [True: 0, False: 2]
  ------------------
 3448|      0|        return -1;
 3449|      0|    }
 3450|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3451|       |
 3452|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (3452:5): [True: 2, False: 0]
  ------------------
 3453|      2|    return 0;
 3454|      2|}
import.c:bootstrap_imp:
 3356|      2|{
 3357|      2|    PyObject *name = PyUnicode_FromString("_imp");
 3358|      2|    if (name == NULL) {
  ------------------
  |  Branch (3358:9): [True: 0, False: 2]
  ------------------
 3359|      0|        return NULL;
 3360|      0|    }
 3361|       |
 3362|       |    // Mock a ModuleSpec object just good enough for PyModule_FromDefAndSpec():
 3363|       |    // an object with just a name attribute.
 3364|       |    //
 3365|       |    // _imp.__spec__ is overridden by importlib._bootstrap._instal() anyway.
 3366|      2|    PyObject *attrs = Py_BuildValue("{sO}", "name", name);
 3367|      2|    if (attrs == NULL) {
  ------------------
  |  Branch (3367:9): [True: 0, False: 2]
  ------------------
 3368|      0|        goto error;
 3369|      0|    }
 3370|      2|    PyObject *spec = _PyNamespace_New(attrs);
 3371|      2|    Py_DECREF(attrs);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3372|      2|    if (spec == NULL) {
  ------------------
  |  Branch (3372:9): [True: 0, False: 2]
  ------------------
 3373|      0|        goto error;
 3374|      0|    }
 3375|       |
 3376|       |    // Create the _imp module from its definition.
 3377|      2|    PyObject *mod = create_builtin(tstate, name, spec, NULL);
 3378|      2|    Py_CLEAR(name);
  ------------------
  |  |  484|      2|    do { \
  |  |  485|      2|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      2|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      2|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      2|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  488|      2|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      2|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      2|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      2|        } \
  |  |  491|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 3379|      2|    Py_DECREF(spec);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3380|      2|    if (mod == NULL) {
  ------------------
  |  Branch (3380:9): [True: 0, False: 2]
  ------------------
 3381|      0|        goto error;
 3382|      0|    }
 3383|      2|    assert(mod != Py_None);  // not found
  ------------------
  |  Branch (3383:5): [True: 2, False: 0]
  ------------------
 3384|       |
 3385|       |    // Execute the _imp module: call imp_module_exec().
 3386|      2|    if (exec_builtin_or_dynamic(mod) < 0) {
  ------------------
  |  Branch (3386:9): [True: 0, False: 2]
  ------------------
 3387|      0|        Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3388|      0|        goto error;
 3389|      0|    }
 3390|      2|    return mod;
 3391|       |
 3392|      0|error:
 3393|      0|    Py_XDECREF(name);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3394|       |    return NULL;
 3395|      2|}
import.c:exec_builtin_or_dynamic:
  940|     43|exec_builtin_or_dynamic(PyObject *mod) {
  941|     43|    void *state;
  942|       |
  943|     43|    if (!PyModule_Check(mod)) {
  ------------------
  |  |   12|     43|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|     43|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (943:9): [True: 0, False: 43]
  ------------------
  944|      0|        return 0;
  945|      0|    }
  946|       |
  947|     43|    state = PyModule_GetState(mod);
  948|     43|    if (state) {
  ------------------
  |  Branch (948:9): [True: 0, False: 43]
  ------------------
  949|       |        /* Already initialized; skip reload */
  950|      0|        return 0;
  951|      0|    }
  952|       |
  953|     43|    return PyModule_Exec(mod);
  954|     43|}
import.c:init_importlib_external:
 3459|      2|{
 3460|      2|    PyObject *value;
 3461|      2|    value = PyObject_CallMethod(IMPORTLIB(interp),
  ------------------
  |  |   98|      2|    (interp)->imports.importlib
  ------------------
 3462|      2|                                "_install_external_importers", "");
 3463|      2|    if (value == NULL) {
  ------------------
  |  Branch (3463:9): [True: 0, False: 2]
  ------------------
 3464|      0|        return -1;
 3465|      0|    }
 3466|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3467|      2|    return 0;
 3468|      2|}
import.c:init_zipimport:
 4899|      2|{
 4900|      2|    PyObject *path_hooks = PySys_GetAttrString("path_hooks");
 4901|      2|    if (path_hooks == NULL) {
  ------------------
  |  Branch (4901:9): [True: 0, False: 2]
  ------------------
 4902|      0|        return -1;
 4903|      0|    }
 4904|       |
 4905|      2|    if (verbose) {
  ------------------
  |  Branch (4905:9): [True: 0, False: 2]
  ------------------
 4906|      0|        PySys_WriteStderr("# installing zipimport hook\n");
 4907|      0|    }
 4908|       |
 4909|      2|    PyObject *zipimporter = PyImport_ImportModuleAttrString("zipimport", "zipimporter");
 4910|      2|    if (zipimporter == NULL) {
  ------------------
  |  Branch (4910:9): [True: 0, False: 2]
  ------------------
 4911|      0|        _PyErr_Clear(tstate); /* No zipimporter object -- okay */
 4912|      0|        if (verbose) {
  ------------------
  |  Branch (4912:13): [True: 0, False: 0]
  ------------------
 4913|      0|            PySys_WriteStderr("# can't import zipimport.zipimporter\n");
 4914|      0|        }
 4915|      0|    }
 4916|      2|    else {
 4917|       |        /* sys.path_hooks.insert(0, zipimporter) */
 4918|      2|        int err = PyList_Insert(path_hooks, 0, zipimporter);
 4919|      2|        Py_DECREF(zipimporter);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4920|      2|        if (err < 0) {
  ------------------
  |  Branch (4920:13): [True: 0, False: 2]
  ------------------
 4921|      0|            Py_DECREF(path_hooks);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4922|      0|            return -1;
 4923|      0|        }
 4924|      2|        if (verbose) {
  ------------------
  |  Branch (4924:13): [True: 0, False: 2]
  ------------------
 4925|      0|            PySys_WriteStderr("# installed zipimport hook\n");
 4926|      0|        }
 4927|      2|    }
 4928|      2|    Py_DECREF(path_hooks);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4929|       |
 4930|      2|    return 0;
 4931|      2|}
import.c:_imp_extension_suffixes_impl:
 5194|      4|{
 5195|      4|    PyObject *list;
 5196|       |
 5197|      4|    list = PyList_New(0);
 5198|      4|    if (list == NULL)
  ------------------
  |  Branch (5198:9): [True: 0, False: 4]
  ------------------
 5199|      0|        return NULL;
 5200|      4|#ifdef HAVE_DYNAMIC_LOADING
 5201|      4|    const char *suffix;
 5202|      4|    unsigned int index = 0;
 5203|       |
 5204|     28|    while ((suffix = _PyImport_DynLoadFiletab[index])) {
  ------------------
  |  Branch (5204:12): [True: 24, False: 4]
  ------------------
 5205|     24|        PyObject *item = PyUnicode_FromString(suffix);
 5206|     24|        if (item == NULL) {
  ------------------
  |  Branch (5206:13): [True: 0, False: 24]
  ------------------
 5207|      0|            Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5208|      0|            return NULL;
 5209|      0|        }
 5210|     24|        if (PyList_Append(list, item) < 0) {
  ------------------
  |  Branch (5210:13): [True: 0, False: 24]
  ------------------
 5211|      0|            Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5212|      0|            Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5213|      0|            return NULL;
 5214|      0|        }
 5215|     24|        Py_DECREF(item);
  ------------------
  |  |  430|     24|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5216|     24|        index += 1;
 5217|     24|    }
 5218|      4|#endif
 5219|      4|    return list;
 5220|      4|}
import.c:_imp_acquire_lock_impl:
 5091|  1.63k|{
 5092|  1.63k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 5093|  1.63k|    _PyImport_AcquireLock(interp);
 5094|  1.63k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  1.63k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  1.63k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5095|  1.63k|}
import.c:_imp_release_lock_impl:
 5108|  1.63k|{
 5109|  1.63k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 5110|  1.63k|    if (!_PyRecursiveMutex_IsLockedByCurrentThread(&IMPORT_LOCK(interp))) {
  ------------------
  |  |  114|  1.63k|    (interp)->imports.lock
  ------------------
  |  Branch (5110:9): [True: 0, False: 1.63k]
  ------------------
 5111|      0|        PyErr_SetString(PyExc_RuntimeError,
 5112|      0|                        "not holding the import lock");
 5113|      0|        return NULL;
 5114|      0|    }
 5115|  1.63k|    _PyImport_ReleaseLock(interp);
 5116|  1.63k|    Py_RETURN_NONE;
  ------------------
  |  |  628|  1.63k|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|  1.63k|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5117|  1.63k|}
import.c:_imp_find_frozen_impl:
 5270|    311|{
 5271|    311|    struct frozen_info info;
 5272|    311|    frozen_status status = find_frozen(name, &info);
 5273|    311|    if (status == FROZEN_NOT_FOUND || status == FROZEN_DISABLED) {
  ------------------
  |  Branch (5273:9): [True: 287, False: 24]
  |  Branch (5273:39): [True: 0, False: 24]
  ------------------
 5274|    287|        Py_RETURN_NONE;
  ------------------
  |  |  628|    287|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    287|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5275|    287|    }
 5276|     24|    else if (status == FROZEN_BAD_NAME) {
  ------------------
  |  Branch (5276:14): [True: 0, False: 24]
  ------------------
 5277|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5278|      0|    }
 5279|     24|    else if (status != FROZEN_OKAY) {
  ------------------
  |  Branch (5279:14): [True: 0, False: 24]
  ------------------
 5280|      0|        set_frozen_error(status, name);
 5281|      0|        return NULL;
 5282|      0|    }
 5283|       |
 5284|     24|    PyObject *data = NULL;
 5285|     24|    if (withdata) {
  ------------------
  |  Branch (5285:9): [True: 0, False: 24]
  ------------------
 5286|      0|        data = PyMemoryView_FromMemory((char *)info.data, info.size, PyBUF_READ);
  ------------------
  |  |  137|      0|#define PyBUF_READ  0x100
  ------------------
 5287|      0|        if (data == NULL) {
  ------------------
  |  Branch (5287:13): [True: 0, False: 0]
  ------------------
 5288|      0|            return NULL;
 5289|      0|        }
 5290|      0|    }
 5291|       |
 5292|     24|    PyObject *origname = NULL;
 5293|     24|    if (info.origname != NULL && info.origname[0] != '\0') {
  ------------------
  |  Branch (5293:9): [True: 24, False: 0]
  |  Branch (5293:34): [True: 24, False: 0]
  ------------------
 5294|     24|        origname = PyUnicode_FromString(info.origname);
 5295|     24|        if (origname == NULL) {
  ------------------
  |  Branch (5295:13): [True: 0, False: 24]
  ------------------
 5296|      0|            Py_XDECREF(data);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5297|      0|            return NULL;
 5298|      0|        }
 5299|     24|    }
 5300|       |
 5301|     24|    PyObject *result = PyTuple_Pack(3, data ? data : Py_None,
  ------------------
  |  |  616|     24|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (5301:40): [True: 0, False: 24]
  ------------------
 5302|     24|                                    info.is_package ? Py_True : Py_False,
  ------------------
  |  |   26|     24|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                                  info.is_package ? Py_True : Py_False,
  ------------------
  |  |   25|     24|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5302:37): [True: 0, False: 24]
  ------------------
 5303|     24|                                    origname ? origname : Py_None);
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (5303:37): [True: 24, False: 0]
  ------------------
 5304|     24|    Py_XDECREF(origname);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5305|     24|    Py_XDECREF(data);
  ------------------
  |  |  524|     24|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5306|     24|    return result;
 5307|     24|}
import.c:_imp_get_frozen_object_impl:
 5323|     24|{
 5324|     24|    struct frozen_info info = {0};
 5325|     24|    Py_buffer buf = {0};
 5326|     24|    if (PyObject_CheckBuffer(dataobj)) {
  ------------------
  |  Branch (5326:9): [True: 0, False: 24]
  ------------------
 5327|      0|        if (PyObject_GetBuffer(dataobj, &buf, PyBUF_SIMPLE) != 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (5327:13): [True: 0, False: 0]
  ------------------
 5328|      0|            return NULL;
 5329|      0|        }
 5330|      0|        info.data = (const char *)buf.buf;
 5331|      0|        info.size = buf.len;
 5332|      0|    }
 5333|     24|    else if (dataobj != Py_None) {
  ------------------
  |  |  616|     24|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (5333:14): [True: 0, False: 24]
  ------------------
 5334|      0|        _PyArg_BadArgument("get_frozen_object", "argument 2", "bytes", dataobj);
 5335|      0|        return NULL;
 5336|      0|    }
 5337|     24|    else {
 5338|     24|        frozen_status status = find_frozen(name, &info);
 5339|     24|        if (status != FROZEN_OKAY) {
  ------------------
  |  Branch (5339:13): [True: 0, False: 24]
  ------------------
 5340|      0|            set_frozen_error(status, name);
 5341|      0|            return NULL;
 5342|      0|        }
 5343|     24|    }
 5344|       |
 5345|     24|    if (info.nameobj == NULL) {
  ------------------
  |  Branch (5345:9): [True: 0, False: 24]
  ------------------
 5346|      0|        info.nameobj = name;
 5347|      0|    }
 5348|     24|    if (info.size == 0) {
  ------------------
  |  Branch (5348:9): [True: 0, False: 24]
  ------------------
 5349|       |        /* Does not contain executable code. */
 5350|      0|        set_frozen_error(FROZEN_INVALID, name);
 5351|      0|        return NULL;
 5352|      0|    }
 5353|       |
 5354|     24|    PyInterpreterState *interp = _PyInterpreterState_GET();
 5355|     24|    PyObject *codeobj = unmarshal_frozen_code(interp, &info);
 5356|     24|    if (dataobj != Py_None) {
  ------------------
  |  |  616|     24|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (5356:9): [True: 0, False: 24]
  ------------------
 5357|      0|        PyBuffer_Release(&buf);
 5358|      0|    }
 5359|     24|    return codeobj;
 5360|     24|}
import.c:_imp_is_frozen_package_impl:
 5374|      4|{
 5375|      4|    struct frozen_info info;
 5376|      4|    frozen_status status = find_frozen(name, &info);
 5377|      4|    if (status != FROZEN_OKAY && status != FROZEN_EXCLUDED) {
  ------------------
  |  Branch (5377:9): [True: 0, False: 4]
  |  Branch (5377:34): [True: 0, False: 0]
  ------------------
 5378|      0|        set_frozen_error(status, name);
 5379|      0|        return NULL;
 5380|      0|    }
 5381|      4|    return PyBool_FromLong(info.is_package);
 5382|      4|}
import.c:_imp_create_builtin:
 5157|     31|{
 5158|     31|    PyThreadState *tstate = _PyThreadState_GET();
 5159|       |
 5160|     31|    PyObject *name = PyObject_GetAttrString(spec, "name");
 5161|     31|    if (name == NULL) {
  ------------------
  |  Branch (5161:9): [True: 0, False: 31]
  ------------------
 5162|      0|        return NULL;
 5163|      0|    }
 5164|       |
 5165|     31|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|     31|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     31|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (5165:9): [True: 0, False: 31]
  ------------------
 5166|      0|        PyErr_Format(PyExc_TypeError,
 5167|      0|                     "name must be string, not %.200s",
 5168|      0|                     Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5169|      0|        Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5170|      0|        return NULL;
 5171|      0|    }
 5172|       |
 5173|     31|    if (PyUnicode_GetLength(name) == 0) {
  ------------------
  |  Branch (5173:9): [True: 0, False: 31]
  ------------------
 5174|      0|        PyErr_Format(PyExc_ValueError, "name must not be empty");
 5175|      0|        Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5176|      0|        return NULL;
 5177|      0|    }
 5178|       |
 5179|     31|    PyObject *mod = create_builtin(tstate, name, spec, NULL);
 5180|     31|    Py_DECREF(name);
  ------------------
  |  |  430|     31|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     31|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     31|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5181|     31|    return mod;
 5182|     31|}
import.c:_imp_is_builtin_impl:
 5396|    342|{
 5397|    342|    return PyLong_FromLong(is_builtin(name));
 5398|    342|}
import.c:is_builtin:
 2474|    342|{
 2475|    342|    int i;
 2476|    342|    struct _inittab *inittab = INITTAB;
  ------------------
  |  |   80|    342|#define INITTAB _PyRuntime.imports.inittab
  ------------------
 2477|  12.7k|    for (i = 0; inittab[i].name != NULL; i++) {
  ------------------
  |  Branch (2477:17): [True: 12.4k, False: 311]
  ------------------
 2478|  12.4k|        if (_PyUnicode_EqualToASCIIString(name, inittab[i].name)) {
  ------------------
  |  Branch (2478:13): [True: 31, False: 12.3k]
  ------------------
 2479|     31|            if (inittab[i].initfunc == NULL)
  ------------------
  |  Branch (2479:17): [True: 0, False: 31]
  ------------------
 2480|      0|                return -1;
 2481|     31|            else
 2482|     31|                return 1;
 2483|     31|        }
 2484|  12.4k|    }
 2485|    311|    return 0;
 2486|    342|}
import.c:_imp_is_frozen_impl:
 5412|      4|{
 5413|      4|    struct frozen_info info;
 5414|      4|    frozen_status status = find_frozen(name, &info);
 5415|      4|    if (status != FROZEN_OKAY) {
  ------------------
  |  Branch (5415:9): [True: 0, False: 4]
  ------------------
 5416|      0|        Py_RETURN_FALSE;
  ------------------
  |  |   45|      0|#  define Py_RETURN_FALSE return Py_False
  |  |  ------------------
  |  |  |  |   25|      0|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5417|      0|    }
 5418|      4|    Py_RETURN_TRUE;
  ------------------
  |  |   44|      4|#  define Py_RETURN_TRUE return Py_True
  |  |  ------------------
  |  |  |  |   26|      4|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5419|      4|}
import.c:_imp_create_dynamic_impl:
 5506|     10|{
 5507|     10|    FILE *fp = NULL;
 5508|     10|    PyObject *mod = NULL;
 5509|     10|    PyThreadState *tstate = _PyThreadState_GET();
 5510|       |
 5511|     10|    struct _Py_ext_module_loader_info info;
 5512|     10|    if (_Py_ext_module_loader_info_init_from_spec(&info, spec) < 0) {
  ------------------
  |  Branch (5512:9): [True: 0, False: 10]
  ------------------
 5513|      0|        return NULL;
 5514|      0|    }
 5515|       |
 5516|     10|    struct extensions_cache_value *cached = NULL;
 5517|     10|    mod = import_find_extension(tstate, &info, &cached);
 5518|     10|    if (mod != NULL) {
  ------------------
  |  Branch (5518:9): [True: 0, False: 10]
  ------------------
 5519|      0|        assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (5519:9): [True: 0, False: 0]
  ------------------
 5520|      0|        assert(cached != NULL);
  ------------------
  |  Branch (5520:9): [True: 0, False: 0]
  ------------------
 5521|       |        /* The module might not have md_def set in certain reload cases. */
 5522|      0|        assert(_PyModule_GetDefOrNull(mod) == NULL
  ------------------
  |  Branch (5522:9): [True: 0, False: 0]
  |  Branch (5522:9): [True: 0, False: 0]
  ------------------
 5523|      0|                || cached->def == _PyModule_GetDefOrNull(mod));
 5524|      0|        assert_singlephase(cached);
  ------------------
  |  | 1812|      0|    do {                                                                    \
  |  | 1813|      0|        _Py_ext_module_kind kind = _get_extension_kind(cached->def, true);  \
  |  | 1814|      0|        assert(kind == _Py_ext_module_kind_SINGLEPHASE);                    \
  |  | 1815|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1815:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (5524:9): [True: 0, False: 0]
  ------------------
 5525|      0|        goto finally;
 5526|      0|    }
 5527|     10|    else if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (5527:14): [True: 0, False: 10]
  ------------------
 5528|      0|        goto finally;
 5529|      0|    }
 5530|       |    /* Otherwise it must be multi-phase init or the first time it's loaded. */
 5531|       |
 5532|       |    /* If the module was added to the global cache
 5533|       |     * but def->m_base.m_copy was cleared (e.g. subinterp fini)
 5534|       |     * then we have to do a little dance here. */
 5535|     10|    if (cached != NULL) {
  ------------------
  |  Branch (5535:9): [True: 0, False: 10]
  ------------------
 5536|      0|        assert(cached->def->m_base.m_copy == NULL);
  ------------------
  |  Branch (5536:9): [True: 0, False: 0]
  ------------------
 5537|       |        /* For now we clear the cache and move on. */
 5538|      0|        _extensions_cache_delete(info.path, info.name);
 5539|      0|    }
 5540|       |
 5541|     10|    if (PySys_Audit("import", "OOOOO", info.name, info.filename,
  ------------------
  |  Branch (5541:9): [True: 0, False: 10]
  ------------------
 5542|     10|                    Py_None, Py_None, Py_None) < 0)
  ------------------
  |  |  616|     10|#  define Py_None (&_Py_NoneStruct)
  ------------------
                                  Py_None, Py_None, Py_None) < 0)
  ------------------
  |  |  616|     10|#  define Py_None (&_Py_NoneStruct)
  ------------------
                                  Py_None, Py_None, Py_None) < 0)
  ------------------
  |  |  616|     10|#  define Py_None (&_Py_NoneStruct)
  ------------------
 5543|      0|    {
 5544|      0|        goto finally;
 5545|      0|    }
 5546|       |
 5547|       |    /* We would move this (and the fclose() below) into
 5548|       |     * _PyImport_GetModuleExportHooks(), but it isn't clear if the intervening
 5549|       |     * code relies on fp still being open. */
 5550|     10|    if (file != NULL) {
  ------------------
  |  Branch (5550:9): [True: 0, False: 10]
  ------------------
 5551|      0|        fp = Py_fopen(info.filename, "r");
 5552|      0|        if (fp == NULL) {
  ------------------
  |  Branch (5552:13): [True: 0, False: 0]
  ------------------
 5553|      0|            goto finally;
 5554|      0|        }
 5555|      0|    }
 5556|       |
 5557|     10|    PyModInitFunction p0 = NULL;
 5558|     10|    PyModExportFunction ex0 = NULL;
 5559|     10|    _PyImport_GetModuleExportHooks(&info, fp, &p0, &ex0);
 5560|     10|    if (ex0) {
  ------------------
  |  Branch (5560:9): [True: 0, False: 10]
  ------------------
 5561|      0|        mod = import_run_modexport(tstate, ex0, &info, spec);
 5562|       |        // Modules created from slots handle GIL enablement (Py_mod_gil slot)
 5563|       |        // when they're created.
 5564|      0|        goto finally;
 5565|      0|    }
 5566|     10|    if (p0 == NULL) {
  ------------------
  |  Branch (5566:9): [True: 0, False: 10]
  ------------------
 5567|      0|        goto finally;
 5568|      0|    }
 5569|       |
 5570|       |#ifdef Py_GIL_DISABLED
 5571|       |    // This call (and the corresponding call to _PyImport_CheckGILForModule())
 5572|       |    // would ideally be inside import_run_extension(). They are kept in the
 5573|       |    // callers for now because that would complicate the control flow inside
 5574|       |    // import_run_extension(). It should be possible to restructure
 5575|       |    // import_run_extension() to address this.
 5576|       |    _PyEval_EnableGILTransient(tstate);
 5577|       |#endif
 5578|     10|    mod = import_run_extension(
 5579|     10|                    tstate, p0, &info, spec, get_modules_dict(tstate, true));
 5580|       |#ifdef Py_GIL_DISABLED
 5581|       |    if (_PyImport_CheckGILForModule(mod, info.name) < 0) {
 5582|       |        Py_CLEAR(mod);
 5583|       |        goto finally;
 5584|       |    }
 5585|       |#endif
 5586|       |
 5587|     10|finally:
 5588|     10|    if (fp != NULL) {
  ------------------
  |  Branch (5588:9): [True: 0, False: 10]
  ------------------
 5589|      0|        fclose(fp);
 5590|      0|    }
 5591|     10|    _Py_ext_module_loader_info_clear(&info);
 5592|     10|    return mod;
 5593|     10|}
import.c:_imp_exec_dynamic_impl:
 5607|     10|{
 5608|     10|    return exec_builtin_or_dynamic(mod);
 5609|     10|}
import.c:_imp_exec_builtin_impl:
 5626|     31|{
 5627|     31|    return exec_builtin_or_dynamic(mod);
 5628|     31|}
import.c:_imp__fix_co_filename_impl:
 5138|     93|{
 5139|     93|    update_compiled_module(code, path);
 5140|       |
 5141|     93|    Py_RETURN_NONE;
  ------------------
  |  |  628|     93|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     93|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5142|     93|}
import.c:update_compiled_module:
 2943|     93|{
 2944|     93|    PyObject *oldname;
 2945|       |
 2946|     93|    if (PyUnicode_Compare(co->co_filename, newname) == 0)
  ------------------
  |  Branch (2946:9): [True: 93, False: 0]
  ------------------
 2947|     93|        return;
 2948|       |
 2949|      0|    oldname = co->co_filename;
 2950|      0|    Py_INCREF(oldname);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2951|      0|    update_code_filenames(co, oldname, newname);
 2952|      0|    Py_DECREF(oldname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2953|      0|}
import.c:_imp__set_lazy_attributes_impl:
 5670|    152|{
 5671|    152|    PyInterpreterState *interp = _PyInterpreterState_GET();
 5672|    152|    if (PySet_Discard(LAZY_MODULES(interp), name) < 0) {
  ------------------
  |  |   94|    152|    (interp)->imports.lazy_modules
  ------------------
  |  Branch (5672:9): [True: 0, False: 152]
  ------------------
 5673|      0|        return NULL;
 5674|      0|    }
 5675|    152|    Py_RETURN_NONE;
  ------------------
  |  |  628|    152|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    152|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 5676|    152|}
import.c:imp_module_exec:
 5708|      2|{
 5709|      2|    const wchar_t *mode = _Py_GetConfig()->check_hash_pycs_mode;
 5710|      2|    PyObject *pyc_mode = PyUnicode_FromWideChar(mode, -1);
 5711|      2|    if (PyModule_Add(module, "check_hash_based_pycs", pyc_mode) < 0) {
  ------------------
  |  Branch (5711:9): [True: 0, False: 2]
  ------------------
 5712|      0|        return -1;
 5713|      0|    }
 5714|       |
 5715|      2|    if (PyModule_AddIntConstant(
  ------------------
  |  Branch (5715:9): [True: 0, False: 2]
  ------------------
 5716|      2|            module, "pyc_magic_number_token", PYC_MAGIC_NUMBER_TOKEN) < 0)
  ------------------
  |  |  320|      2|    ((uint32_t)PYC_MAGIC_NUMBER | ((uint32_t)'\r' << 16) | ((uint32_t)'\n' << 24))
  |  |  ------------------
  |  |  |  |  316|      2|#define PYC_MAGIC_NUMBER 3706
  |  |  ------------------
  ------------------
 5717|      0|    {
 5718|      0|        return -1;
 5719|      0|    }
 5720|       |
 5721|      2|    return 0;
 5722|      2|}

_Py_ext_module_loader_info_clear:
   86|     43|{
   87|     43|    Py_CLEAR(info->filename);
  ------------------
  |  |  484|     43|    do { \
  |  |  485|     43|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     43|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     43|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     43|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 10, False: 33]
  |  |  ------------------
  |  |  488|     10|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     10|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     10|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     10|        } \
  |  |  491|     43|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
   88|     43|#ifndef MS_WINDOWS
   89|     43|    Py_CLEAR(info->filename_encoded);
  ------------------
  |  |  484|     43|    do { \
  |  |  485|     43|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     43|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     43|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     43|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 10, False: 33]
  |  |  ------------------
  |  |  488|     10|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     10|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     10|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     10|        } \
  |  |  491|     43|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
   90|     43|#endif
   91|     43|    Py_CLEAR(info->name);
  ------------------
  |  |  484|     43|    do { \
  |  |  485|     43|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     43|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     43|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     43|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 43, False: 0]
  |  |  ------------------
  |  |  488|     43|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     43|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     43|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     43|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     43|        } \
  |  |  491|     43|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
   92|       |    Py_CLEAR(info->name_encoded);
  ------------------
  |  |  484|     43|    do { \
  |  |  485|     43|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|     43|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|     43|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|     43|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|     43|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 43, False: 0]
  |  |  ------------------
  |  |  488|     43|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|     43|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|     43|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|     43|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|     43|        } \
  |  |  491|     43|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 43]
  |  |  ------------------
  ------------------
   93|     43|}
_Py_ext_module_loader_info_init:
   99|     10|{
  100|     10|    struct _Py_ext_module_loader_info info = {
  101|     10|        .origin=origin,
  102|     10|    };
  103|       |
  104|     10|    assert(name != NULL);
  ------------------
  |  Branch (104:5): [True: 10, False: 0]
  ------------------
  105|     10|    if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|     10|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     10|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (105:9): [True: 0, False: 10]
  ------------------
  106|      0|        PyErr_SetString(PyExc_TypeError,
  107|      0|                        "module name must be a string");
  108|      0|        _Py_ext_module_loader_info_clear(&info);
  109|      0|        return -1;
  110|      0|    }
  111|     10|    assert(PyUnicode_GetLength(name) > 0);
  ------------------
  |  Branch (111:5): [True: 10, False: 0]
  ------------------
  112|     10|    info.name = Py_NewRef(name);
  ------------------
  |  |  550|     10|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|       |
  114|     10|    info.name_encoded = get_encoded_name(info.name, &info.hook_prefixes);
  115|     10|    if (info.name_encoded == NULL) {
  ------------------
  |  Branch (115:9): [True: 0, False: 10]
  ------------------
  116|      0|        _Py_ext_module_loader_info_clear(&info);
  117|      0|        return -1;
  118|      0|    }
  119|       |
  120|     10|    info.newcontext = PyUnicode_AsUTF8(info.name);
  121|     10|    if (info.newcontext == NULL) {
  ------------------
  |  Branch (121:9): [True: 0, False: 10]
  ------------------
  122|      0|        _Py_ext_module_loader_info_clear(&info);
  123|      0|        return -1;
  124|      0|    }
  125|       |
  126|     10|    if (filename != NULL) {
  ------------------
  |  Branch (126:9): [True: 10, False: 0]
  ------------------
  127|     10|        if (!PyUnicode_Check(filename)) {
  ------------------
  |  |  103|     10|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     10|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (127:13): [True: 0, False: 10]
  ------------------
  128|      0|            PyErr_SetString(PyExc_TypeError,
  129|      0|                            "module filename must be a string");
  130|      0|            _Py_ext_module_loader_info_clear(&info);
  131|      0|            return -1;
  132|      0|        }
  133|     10|        info.filename = Py_NewRef(filename);
  ------------------
  |  |  550|     10|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|       |
  135|     10|#ifndef MS_WINDOWS
  136|     10|        info.filename_encoded = PyUnicode_EncodeFSDefault(info.filename);
  137|     10|        if (info.filename_encoded == NULL) {
  ------------------
  |  Branch (137:13): [True: 0, False: 10]
  ------------------
  138|      0|            _Py_ext_module_loader_info_clear(&info);
  139|      0|            return -1;
  140|      0|        }
  141|     10|#endif
  142|       |
  143|     10|        info.path = info.filename;
  144|     10|    }
  145|      0|    else {
  146|      0|        info.path = info.name;
  147|      0|    }
  148|       |
  149|     10|    *p_info = info;
  150|     10|    return 0;
  151|     10|}
_Py_ext_module_loader_info_init_for_builtin:
  157|     33|{
  158|     33|    assert(PyUnicode_Check(name));
  ------------------
  |  Branch (158:5): [True: 33, False: 0]
  ------------------
  159|     33|    assert(PyUnicode_GetLength(name) > 0);
  ------------------
  |  Branch (159:5): [True: 33, False: 0]
  ------------------
  160|       |
  161|     33|    PyObject *name_encoded = PyUnicode_AsEncodedString(name, "ascii", NULL);
  162|     33|    if (name_encoded == NULL) {
  ------------------
  |  Branch (162:9): [True: 0, False: 33]
  ------------------
  163|      0|        return -1;
  164|      0|    }
  165|       |
  166|     33|    *info = (struct _Py_ext_module_loader_info){
  167|     33|        .name=Py_NewRef(name),
  ------------------
  |  |  550|     33|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     33|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     33|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|     33|        .name_encoded=name_encoded,
  169|       |        /* We won't need filename. */
  170|     33|        .path=name,
  171|     33|        .origin=_Py_ext_module_origin_BUILTIN,
  172|     33|        .hook_prefixes=&ascii_only_prefixes,
  173|       |        .newcontext=NULL,
  174|     33|    };
  175|     33|    return 0;
  176|     33|}
_Py_ext_module_loader_info_init_from_spec:
  195|     10|{
  196|     10|    PyObject *name = PyObject_GetAttrString(spec, "name");
  197|     10|    if (name == NULL) {
  ------------------
  |  Branch (197:9): [True: 0, False: 10]
  ------------------
  198|      0|        return -1;
  199|      0|    }
  200|     10|    PyObject *filename = PyObject_GetAttrString(spec, "origin");
  201|     10|    if (filename == NULL) {
  ------------------
  |  Branch (201:9): [True: 0, False: 10]
  ------------------
  202|      0|        Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|      0|        return -1;
  204|      0|    }
  205|       |    /* We could also accommodate builtin modules here without much trouble. */
  206|     10|    _Py_ext_module_origin origin = _Py_ext_module_origin_DYNAMIC;
  207|     10|    int err = _Py_ext_module_loader_info_init(p_info, name, filename, origin);
  208|     10|    Py_DECREF(name);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|     10|    Py_DECREF(filename);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|     10|    return err;
  211|     10|}
_Py_ext_module_loader_result_clear:
  221|     43|{
  222|       |    /* Instead, the caller should have called
  223|       |     * _Py_ext_module_loader_result_apply_error(). */
  224|     43|    assert(res->err == NULL);
  ------------------
  |  Branch (224:5): [True: 43, False: 0]
  ------------------
  225|     43|    *res = (struct _Py_ext_module_loader_result){0};
  226|     43|}
_PyImport_GetModuleExportHooks:
  381|     10|{
  382|     10|    *modinit = NULL;
  383|     10|    *modexport = NULL;
  384|       |
  385|     10|    const char *name_buf = PyBytes_AS_STRING(info->name_encoded);
  ------------------
  |  |   27|     10|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|     10|    dl_funcptr exportfunc;
  387|       |
  388|     10|    exportfunc = findfuncptr(
  389|     10|        info->hook_prefixes->export_prefix,
  390|     10|        name_buf, info, fp);
  391|     10|    if (exportfunc) {
  ------------------
  |  Branch (391:9): [True: 0, False: 10]
  ------------------
  392|      0|        *modexport = (PyModExportFunction)exportfunc;
  393|      0|        return 2;
  394|      0|    }
  395|     10|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (395:9): [True: 0, False: 10]
  ------------------
  396|      0|        return -1;
  397|      0|    }
  398|       |
  399|     10|    exportfunc = findfuncptr(
  400|     10|        info->hook_prefixes->init_prefix,
  401|     10|        name_buf, info, fp);
  402|     10|    if (exportfunc) {
  ------------------
  |  Branch (402:9): [True: 10, False: 0]
  ------------------
  403|     10|        *modinit = (PyModInitFunction)exportfunc;
  404|     10|        return 1;
  405|     10|    }
  406|       |
  407|      0|    if (!PyErr_Occurred()) {
  ------------------
  |  Branch (407:9): [True: 0, False: 0]
  ------------------
  408|      0|        PyObject *msg;
  409|      0|        msg = PyUnicode_FromFormat(
  410|      0|            "dynamic module does not define "
  411|      0|            "module export function (%s_%s or %s_%s)",
  412|      0|            info->hook_prefixes->export_prefix, name_buf,
  413|      0|            info->hook_prefixes->init_prefix, name_buf);
  414|      0|        if (msg != NULL) {
  ------------------
  |  Branch (414:13): [True: 0, False: 0]
  ------------------
  415|      0|            PyErr_SetImportError(msg, info->name, info->filename);
  416|      0|            Py_DECREF(msg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      0|        }
  418|      0|    }
  419|      0|    return -1;
  420|     10|}
_PyImport_RunModInitFunc:
  427|     43|{
  428|     43|    struct _Py_ext_module_loader_result res = {
  429|     43|        .kind=_Py_ext_module_kind_UNKNOWN,
  430|     43|    };
  431|       |
  432|       |    /* Call the module init function. */
  433|       |
  434|       |    /* Package context is needed for single-phase init */
  435|     43|    const char *oldcontext = _PyImport_SwapPackageContext(info->newcontext);
  436|     43|    PyObject *m = p0();
  437|     43|    _PyImport_SwapPackageContext(oldcontext);
  438|       |
  439|       |    /* Validate the result (and populate "res". */
  440|       |
  441|     43|    if (m == NULL) {
  ------------------
  |  Branch (441:9): [True: 0, False: 43]
  ------------------
  442|       |        /* The init func for multi-phase init modules is expected
  443|       |         * to return a PyModuleDef after calling PyModuleDef_Init().
  444|       |         * That function never raises an exception nor returns NULL,
  445|       |         * so at this point it must be a single-phase init modules. */
  446|      0|        res.kind = _Py_ext_module_kind_SINGLEPHASE;
  447|      0|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (447:13): [True: 0, False: 0]
  ------------------
  448|      0|            _Py_ext_module_loader_result_set_error(
  449|      0|                        &res, _Py_ext_module_loader_result_EXCEPTION);
  450|      0|        }
  451|      0|        else {
  452|      0|            _Py_ext_module_loader_result_set_error(
  453|      0|                        &res, _Py_ext_module_loader_result_ERR_MISSING);
  454|      0|        }
  455|      0|        goto error;
  456|     43|    } else if (PyErr_Occurred()) {
  ------------------
  |  Branch (456:16): [True: 0, False: 43]
  ------------------
  457|       |        /* Likewise, we infer that this is a single-phase init module. */
  458|      0|        res.kind = _Py_ext_module_kind_SINGLEPHASE;
  459|      0|        _Py_ext_module_loader_result_set_error(
  460|      0|                &res, _Py_ext_module_loader_result_ERR_UNREPORTED_EXC);
  461|       |        /* We would probably be correct to decref m here,
  462|       |         * but we weren't doing so before,
  463|       |         * so we stick with doing nothing. */
  464|      0|        m = NULL;
  465|      0|        goto error;
  466|      0|    }
  467|       |
  468|     43|    if (Py_IS_TYPE(m, NULL)) {
  ------------------
  |  |  215|     43|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 43]
  |  |  ------------------
  ------------------
  469|       |        /* This can happen when a PyModuleDef is returned without calling
  470|       |         * PyModuleDef_Init on it
  471|       |         */
  472|      0|        _Py_ext_module_loader_result_set_error(
  473|      0|                &res, _Py_ext_module_loader_result_ERR_UNINITIALIZED);
  474|       |        /* Likewise, decref'ing here makes sense.  However, the original
  475|       |         * code has a note about "prevent segfault in DECREF",
  476|       |         * so we play it safe and leave it alone. */
  477|      0|        m = NULL; /* prevent segfault in DECREF */
  478|      0|        goto error;
  479|      0|    }
  480|       |
  481|     43|    if (PyObject_TypeCheck(m, &PyModuleDef_Type)) {
  ------------------
  |  |  378|     43|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     43|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     43|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (378:40): [True: 43, False: 0]
  |  |  ------------------
  ------------------
  482|       |        /* multi-phase init */
  483|     43|        res.kind = _Py_ext_module_kind_MULTIPHASE;
  484|     43|        res.def = (PyModuleDef *)m;
  485|       |        /* Run PyModule_FromDefAndSpec() to finish loading the module. */
  486|     43|    }
  487|      0|    else if (info->hook_prefixes == &nonascii_prefixes) {
  ------------------
  |  Branch (487:14): [True: 0, False: 0]
  ------------------
  488|       |        /* Non-ASCII is only supported for multi-phase init. */
  489|      0|        res.kind = _Py_ext_module_kind_MULTIPHASE;
  490|       |        /* Don't allow legacy init for non-ASCII module names. */
  491|      0|        _Py_ext_module_loader_result_set_error(
  492|      0|                &res, _Py_ext_module_loader_result_ERR_NONASCII_NOT_MULTIPHASE);
  493|      0|        goto error;
  494|      0|    }
  495|      0|    else {
  496|       |        /* single-phase init (legacy) */
  497|      0|        res.kind = _Py_ext_module_kind_SINGLEPHASE;
  498|      0|        res.module = m;
  499|       |
  500|      0|        if (!PyModule_Check(m)) {
  ------------------
  |  |   12|      0|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (500:13): [True: 0, False: 0]
  ------------------
  501|      0|            _Py_ext_module_loader_result_set_error(
  502|      0|                    &res, _Py_ext_module_loader_result_ERR_NOT_MODULE);
  503|      0|            goto error;
  504|      0|        }
  505|       |
  506|      0|        res.def = _PyModule_GetDefOrNull(m);
  507|      0|        if (res.def == NULL) {
  ------------------
  |  Branch (507:13): [True: 0, False: 0]
  ------------------
  508|      0|            PyErr_Clear();
  509|      0|            _Py_ext_module_loader_result_set_error(
  510|      0|                    &res, _Py_ext_module_loader_result_ERR_MISSING_DEF);
  511|      0|            goto error;
  512|      0|        }
  513|      0|    }
  514|       |
  515|     43|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (515:5): [True: 43, False: 0]
  ------------------
  516|     43|    assert(res.err == NULL);
  ------------------
  |  Branch (516:5): [True: 43, False: 0]
  ------------------
  517|     43|    *p_res = res;
  518|     43|    return 0;
  519|       |
  520|      0|error:
  521|      0|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (521:5): [True: 0, False: 0]
  ------------------
  522|      0|    assert(res.err != NULL);
  ------------------
  |  Branch (522:5): [True: 0, False: 0]
  ------------------
  523|      0|    Py_CLEAR(res.module);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  524|       |    res.def = NULL;
  525|      0|    *p_res = res;
  526|      0|    p_res->err = &p_res->_err;
  527|      0|    return -1;
  528|      0|}
importdl.c:get_encoded_name:
   29|     10|get_encoded_name(PyObject *name, const struct hook_prefixes **hook_prefixes) {
   30|     10|    PyObject *tmp;
   31|     10|    PyObject *encoded = NULL;
   32|     10|    PyObject *modname = NULL;
   33|     10|    Py_ssize_t name_len, lastdot;
   34|       |
   35|       |    /* Get the short name (substring after last dot) */
   36|     10|    name_len = PyUnicode_GetLength(name);
   37|     10|    if (name_len < 0) {
  ------------------
  |  Branch (37:9): [True: 0, False: 10]
  ------------------
   38|      0|        return NULL;
   39|      0|    }
   40|     10|    lastdot = PyUnicode_FindChar(name, '.', 0, name_len, -1);
   41|     10|    if (lastdot < -1) {
  ------------------
  |  Branch (41:9): [True: 0, False: 10]
  ------------------
   42|      0|        return NULL;
   43|     10|    } else if (lastdot >= 0) {
  ------------------
  |  Branch (43:16): [True: 0, False: 10]
  ------------------
   44|      0|        tmp = PyUnicode_Substring(name, lastdot + 1, name_len);
   45|      0|        if (tmp == NULL)
  ------------------
  |  Branch (45:13): [True: 0, False: 0]
  ------------------
   46|      0|            return NULL;
   47|      0|        name = tmp;
   48|       |        /* "name" now holds a new reference to the substring */
   49|     10|    } else {
   50|     10|        Py_INCREF(name);
  ------------------
  |  |  310|     10|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|     10|    }
   52|       |
   53|       |    /* Encode to ASCII or Punycode, as needed */
   54|     10|    encoded = PyUnicode_AsEncodedString(name, "ascii", NULL);
   55|     10|    if (encoded != NULL) {
  ------------------
  |  Branch (55:9): [True: 10, False: 0]
  ------------------
   56|     10|        *hook_prefixes = &ascii_only_prefixes;
   57|     10|    } else {
   58|      0|        if (PyErr_ExceptionMatches(PyExc_UnicodeEncodeError)) {
  ------------------
  |  Branch (58:13): [True: 0, False: 0]
  ------------------
   59|      0|            PyErr_Clear();
   60|      0|            encoded = PyUnicode_AsEncodedString(name, "punycode", NULL);
   61|      0|            if (encoded == NULL) {
  ------------------
  |  Branch (61:17): [True: 0, False: 0]
  ------------------
   62|      0|                goto error;
   63|      0|            }
   64|      0|            *hook_prefixes = &nonascii_prefixes;
   65|      0|        } else {
   66|      0|            goto error;
   67|      0|        }
   68|      0|    }
   69|       |
   70|       |    /* Replace '-' by '_' */
   71|     10|    modname = _PyObject_CallMethod(encoded, &_Py_ID(replace), "cc", '-', '_');
  ------------------
  |  |  936|     10|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     10|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     10|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|     10|    if (modname == NULL)
  ------------------
  |  Branch (72:9): [True: 0, False: 10]
  ------------------
   73|      0|        goto error;
   74|       |
   75|     10|    Py_DECREF(name);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   76|     10|    Py_DECREF(encoded);
  ------------------
  |  |  430|     10|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|     10|    return modname;
   78|      0|error:
   79|      0|    Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      0|    Py_XDECREF(encoded);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|       |    return NULL;
   82|     10|}
importdl.c:findfuncptr:
  364|     20|{
  365|       |#ifdef MS_WINDOWS
  366|       |    return _PyImport_FindSharedFuncptrWindows(
  367|       |            prefix, name_buf, info->filename, fp);
  368|       |#else
  369|     20|    const char *path_buf = PyBytes_AS_STRING(info->filename_encoded);
  ------------------
  |  |   27|     20|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     20|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     20|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  370|     20|    return _PyImport_FindSharedFuncptr(
  371|     20|            prefix, name_buf, path_buf, fp);
  372|     20|#endif
  373|     20|}

Py_GETENV:
  660|     24|{
  661|     24|    int use_environment = 1;
  662|     24|    PyThreadState *tstate = PyThreadState_GetUnchecked();
  663|     24|    if (tstate != NULL) {
  ------------------
  |  Branch (663:9): [True: 2, False: 22]
  ------------------
  664|      2|        const PyConfig *config = &tstate->interp->config;
  665|      2|        use_environment = config->use_environment;
  666|      2|    }
  667|       |
  668|     24|    if (!use_environment) {
  ------------------
  |  Branch (668:9): [True: 0, False: 24]
  ------------------
  669|      0|        return NULL;
  670|      0|    }
  671|     24|    return getenv(name);
  672|     24|}
PyStatus_Ok:
  677|      6|{ return _PyStatus_OK(); }
  ------------------
  |  |   24|      6|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
PyStatus_Exception:
  700|      4|{ return _PyStatus_EXCEPTION(status); }
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  ------------------
_PyWideStringList_CheckConsistency:
  738|    214|{
  739|    214|    assert(list->length >= 0);
  ------------------
  |  Branch (739:5): [True: 214, False: 0]
  ------------------
  740|    214|    if (list->length != 0) {
  ------------------
  |  Branch (740:9): [True: 24, False: 190]
  ------------------
  741|     24|        assert(list->items != NULL);
  ------------------
  |  Branch (741:9): [True: 24, False: 0]
  ------------------
  742|     24|    }
  743|    250|    for (Py_ssize_t i = 0; i < list->length; i++) {
  ------------------
  |  Branch (743:28): [True: 36, False: 214]
  ------------------
  744|     36|        assert(list->items[i] != NULL);
  ------------------
  |  Branch (744:9): [True: 36, False: 0]
  ------------------
  745|     36|    }
  746|    214|    return 1;
  747|    214|}
_PyWideStringList_Clear:
  776|     68|{
  777|       |    _PyWideStringList_ClearEx(list, false);
  778|     68|}
_PyWideStringList_Copy:
  829|     38|{
  830|       |    return _PyWideStringList_CopyEx(list, list2, false);
  831|     38|}
PyWideStringList_Insert:
  836|     10|{
  837|     10|    Py_ssize_t len = list->length;
  838|     10|    if (len == PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|     10|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (838:9): [True: 0, False: 10]
  ------------------
  839|       |        /* length+1 would overflow */
  840|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  841|      0|    }
  842|     10|    if (index < 0) {
  ------------------
  |  Branch (842:9): [True: 0, False: 10]
  ------------------
  843|      0|        return _PyStatus_ERR("PyWideStringList_Insert index must be >= 0");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  844|      0|    }
  845|     10|    if (index > len) {
  ------------------
  |  Branch (845:9): [True: 0, False: 10]
  ------------------
  846|      0|        index = len;
  847|      0|    }
  848|       |
  849|     10|    wchar_t *item2 = _PyMem_RawWcsdup(item);
  850|     10|    if (item2 == NULL) {
  ------------------
  |  Branch (850:9): [True: 0, False: 10]
  ------------------
  851|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  852|      0|    }
  853|       |
  854|     10|    size_t size = (len + 1) * sizeof(list->items[0]);
  855|     10|    wchar_t **items2 = (wchar_t **)PyMem_RawRealloc(list->items, size);
  856|     10|    if (items2 == NULL) {
  ------------------
  |  Branch (856:9): [True: 0, False: 10]
  ------------------
  857|      0|        PyMem_RawFree(item2);
  858|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  859|      0|    }
  860|       |
  861|     10|    if (index < len) {
  ------------------
  |  Branch (861:9): [True: 0, False: 10]
  ------------------
  862|      0|        memmove(&items2[index + 1],
  863|      0|                &items2[index],
  864|      0|                (len - index) * sizeof(items2[0]));
  865|      0|    }
  866|       |
  867|     10|    items2[index] = item2;
  868|     10|    list->items = items2;
  869|     10|    list->length++;
  870|     10|    return _PyStatus_OK();
  ------------------
  |  |   24|     10|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  871|     10|}
PyWideStringList_Append:
  876|     10|{
  877|     10|    return PyWideStringList_Insert(list, list->length, item);
  878|     10|}
_PyWideStringList_Extend:
  883|      4|{
  884|      4|    for (Py_ssize_t i = 0; i < list2->length; i++) {
  ------------------
  |  Branch (884:28): [True: 0, False: 4]
  ------------------
  885|      0|        PyStatus status = PyWideStringList_Append(list, list2->items[i]);
  886|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  887|      0|            return status;
  888|      0|        }
  889|      0|    }
  890|      4|    return _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  891|      4|}
_PyWideStringList_AsList:
  908|      8|{
  909|      8|    assert(_PyWideStringList_CheckConsistency(list));
  ------------------
  |  Branch (909:5): [True: 8, False: 0]
  ------------------
  910|       |
  911|      8|    PyObject *pylist = PyList_New(list->length);
  912|      8|    if (pylist == NULL) {
  ------------------
  |  Branch (912:9): [True: 0, False: 8]
  ------------------
  913|      0|        return NULL;
  914|      0|    }
  915|       |
  916|     16|    for (Py_ssize_t i = 0; i < list->length; i++) {
  ------------------
  |  Branch (916:28): [True: 8, False: 8]
  ------------------
  917|      8|        PyObject *item = PyUnicode_FromWideChar(list->items[i], -1);
  918|      8|        if (item == NULL) {
  ------------------
  |  Branch (918:13): [True: 0, False: 8]
  ------------------
  919|      0|            Py_DECREF(pylist);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|      0|            return NULL;
  921|      0|        }
  922|      8|        PyList_SET_ITEM(pylist, i, item);
  ------------------
  |  |   50|      8|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|      8|    }
  924|      8|    return pylist;
  925|      8|}
PyConfig_Clear:
 1066|      8|{
 1067|      8|#define CLEAR(ATTR) \
 1068|      8|    do { \
 1069|      8|        PyMem_RawFree(ATTR); \
 1070|      8|        ATTR = NULL; \
 1071|      8|    } while (0)
 1072|       |
 1073|      8|    CLEAR(config->pycache_prefix);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1074|      8|    CLEAR(config->pythonpath_env);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1075|      8|    CLEAR(config->home);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1076|      8|    CLEAR(config->program_name);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1077|       |
 1078|      8|    _PyWideStringList_Clear(&config->argv);
 1079|      8|    _PyWideStringList_Clear(&config->warnoptions);
 1080|      8|    _PyWideStringList_Clear(&config->xoptions);
 1081|      8|    _PyWideStringList_Clear(&config->module_search_paths);
 1082|      8|    config->module_search_paths_set = 0;
 1083|      8|    CLEAR(config->stdlib_dir);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1084|       |
 1085|      8|    CLEAR(config->executable);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1086|      8|    CLEAR(config->base_executable);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1087|      8|    CLEAR(config->prefix);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1088|      8|    CLEAR(config->base_prefix);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1089|      8|    CLEAR(config->exec_prefix);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1090|      8|    CLEAR(config->base_exec_prefix);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1091|      8|    CLEAR(config->platlibdir);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1092|      8|    CLEAR(config->sys_path_0);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1093|       |
 1094|      8|    CLEAR(config->filesystem_encoding);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1095|      8|    CLEAR(config->filesystem_errors);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1096|      8|    CLEAR(config->stdio_encoding);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1097|      8|    CLEAR(config->stdio_errors);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1098|      8|    CLEAR(config->run_command);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1099|      8|    CLEAR(config->run_module);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1100|      8|    CLEAR(config->run_filename);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1101|      8|    CLEAR(config->check_hash_pycs_mode);
  ------------------
  |  | 1068|      8|    do { \
  |  | 1069|      8|        PyMem_RawFree(ATTR); \
  |  | 1070|      8|        ATTR = NULL; \
  |  | 1071|      8|    } while (0)
  |  |  ------------------
  |  |  |  Branch (1071:14): [Folded, False: 8]
  |  |  ------------------
  ------------------
 1102|       |#ifdef Py_DEBUG
 1103|       |    CLEAR(config->run_presite);
 1104|       |#endif
 1105|       |
 1106|      8|    _PyWideStringList_Clear(&config->orig_argv);
 1107|      8|#undef CLEAR
 1108|      8|}
_PyConfig_InitCompatConfig:
 1113|      6|{
 1114|      6|    memset(config, 0, sizeof(*config));
 1115|       |
 1116|      6|    config->_config_init = (int)_PyConfig_INIT_COMPAT;
 1117|      6|    config->import_time = -1;
 1118|      6|    config->isolated = -1;
 1119|      6|    config->use_environment = -1;
 1120|      6|    config->dev_mode = -1;
 1121|      6|    config->install_signal_handlers = 1;
 1122|      6|    config->use_hash_seed = -1;
 1123|      6|    config->faulthandler = -1;
 1124|      6|    config->tracemalloc = -1;
 1125|      6|    config->perf_profiling = -1;
 1126|      6|    config->remote_debug = -1;
 1127|      6|    config->module_search_paths_set = 0;
 1128|      6|    config->parse_argv = 0;
 1129|      6|    config->site_import = -1;
 1130|      6|    config->bytes_warning = -1;
 1131|      6|    config->warn_default_encoding = 0;
 1132|      6|    config->inspect = -1;
 1133|      6|    config->interactive = -1;
 1134|      6|    config->optimization_level = -1;
 1135|      6|    config->parser_debug= -1;
 1136|      6|    config->write_bytecode = -1;
 1137|      6|    config->verbose = -1;
 1138|      6|    config->quiet = -1;
 1139|      6|    config->user_site_directory = -1;
 1140|      6|    config->configure_c_stdio = 0;
 1141|      6|    config->buffered_stdio = -1;
 1142|      6|    config->_install_importlib = 1;
 1143|      6|    config->check_hash_pycs_mode = NULL;
 1144|      6|    config->pathconfig_warnings = -1;
 1145|      6|    config->_init_main = 1;
 1146|       |#ifdef MS_WINDOWS
 1147|       |    config->legacy_windows_stdio = -1;
 1148|       |#endif
 1149|       |#ifdef Py_DEBUG
 1150|       |    config->use_frozen_modules = 0;
 1151|       |#else
 1152|      6|    config->use_frozen_modules = 1;
 1153|      6|#endif
 1154|      6|    config->safe_path = 0;
 1155|      6|    config->int_max_str_digits = -1;
 1156|      6|    config->_is_python_build = 0;
 1157|      6|    config->code_debug_ranges = 1;
 1158|      6|    config->cpu_count = -1;
 1159|      6|    config->lazy_imports = -1;
 1160|       |#ifdef Py_GIL_DISABLED
 1161|       |    config->thread_inherit_context = 1;
 1162|       |    config->context_aware_warnings = 1;
 1163|       |#else
 1164|      6|    config->thread_inherit_context = 0;
 1165|      6|    config->context_aware_warnings = 0;
 1166|      6|#endif
 1167|       |#ifdef __APPLE__
 1168|       |    config->use_system_logger = USE_SYSTEM_LOGGER_DEFAULT;
 1169|       |#endif
 1170|       |#ifdef Py_GIL_DISABLED
 1171|       |    config->enable_gil = _PyConfig_GIL_DEFAULT;
 1172|       |    config->tlbc_enabled = 1;
 1173|       |#endif
 1174|      6|}
PyConfig_InitPythonConfig:
 1214|      6|{
 1215|      6|    config_init_defaults(config);
 1216|       |
 1217|      6|    config->_config_init = (int)_PyConfig_INIT_PYTHON;
 1218|      6|    config->configure_c_stdio = 1;
 1219|      6|    config->parse_argv = 1;
 1220|      6|}
PyConfig_SetString:
 1257|    142|{
 1258|    142|    PyStatus status = _Py_PreInitializeFromConfig(config, NULL);
 1259|    142|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|    142|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 142]
  |  |  ------------------
  ------------------
 1260|      0|        return status;
 1261|      0|    }
 1262|       |
 1263|    142|    wchar_t *str2;
 1264|    142|    if (str != NULL) {
  ------------------
  |  Branch (1264:9): [True: 52, False: 90]
  ------------------
 1265|     52|        str2 = _PyMem_RawWcsdup(str);
 1266|     52|        if (str2 == NULL) {
  ------------------
  |  Branch (1266:13): [True: 0, False: 52]
  ------------------
 1267|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 1268|      0|        }
 1269|     52|    }
 1270|     90|    else {
 1271|     90|        str2 = NULL;
 1272|     90|    }
 1273|    142|    PyMem_RawFree(*config_str);
 1274|    142|    *config_str = str2;
 1275|    142|    return _PyStatus_OK();
  ------------------
  |  |   24|    142|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1276|    142|}
PyConfig_SetBytesString:
 1320|      2|{
 1321|      2|    return CONFIG_SET_BYTES_STR(config, config_str, str, "string");
  ------------------
  |  | 1311|      2|    config_set_bytes_string(config, config_str, str, "cannot decode " NAME)
  ------------------
 1322|      2|}
_PyConfig_Copy:
 1341|      4|{
 1342|      4|    PyConfig_Clear(config);
 1343|       |
 1344|      4|    PyStatus status;
 1345|      4|    const PyConfigSpec *spec = PYCONFIG_SPEC;
 1346|    292|    for (; spec->name != NULL; spec++) {
  ------------------
  |  Branch (1346:12): [True: 288, False: 4]
  ------------------
 1347|    288|        void *member = config_get_spec_member(config, spec);
 1348|    288|        const void *member2 = config_get_spec_member((PyConfig*)config2, spec);
 1349|    288|        switch (spec->type) {
 1350|     20|        case PyConfig_MEMBER_INT:
  ------------------
  |  Branch (1350:9): [True: 20, False: 268]
  ------------------
 1351|     52|        case PyConfig_MEMBER_UINT:
  ------------------
  |  Branch (1351:9): [True: 32, False: 256]
  ------------------
 1352|    176|        case PyConfig_MEMBER_BOOL:
  ------------------
  |  Branch (1352:9): [True: 124, False: 164]
  ------------------
 1353|    176|        {
 1354|    176|            *(int*)member = *(int*)member2;
 1355|    176|            break;
 1356|     52|        }
 1357|      4|        case PyConfig_MEMBER_ULONG:
  ------------------
  |  Branch (1357:9): [True: 4, False: 284]
  ------------------
 1358|      4|        {
 1359|      4|            *(unsigned long*)member = *(unsigned long*)member2;
 1360|      4|            break;
 1361|     52|        }
 1362|     24|        case PyConfig_MEMBER_WSTR:
  ------------------
  |  Branch (1362:9): [True: 24, False: 264]
  ------------------
 1363|     88|        case PyConfig_MEMBER_WSTR_OPT:
  ------------------
  |  Branch (1363:9): [True: 64, False: 224]
  ------------------
 1364|     88|        {
 1365|     88|            const wchar_t *str = *(const wchar_t**)member2;
 1366|     88|            status = PyConfig_SetString(config, (wchar_t**)member, str);
 1367|     88|            if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|     88|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 88]
  |  |  ------------------
  ------------------
 1368|      0|                return status;
 1369|      0|            }
 1370|     88|            break;
 1371|     88|        }
 1372|     88|        case PyConfig_MEMBER_WSTR_LIST:
  ------------------
  |  Branch (1372:9): [True: 20, False: 268]
  ------------------
 1373|     20|        {
 1374|     20|            if (_PyWideStringList_Copy((PyWideStringList*)member,
  ------------------
  |  Branch (1374:17): [True: 0, False: 20]
  ------------------
 1375|     20|                                       (const PyWideStringList*)member2) < 0) {
 1376|      0|                return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 1377|      0|            }
 1378|     20|            break;
 1379|     20|        }
 1380|     20|        default:
  ------------------
  |  Branch (1380:9): [True: 0, False: 288]
  ------------------
 1381|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1382|    288|        }
 1383|    288|    }
 1384|      4|    return _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1385|      4|}
_PyConfig_AsDict:
 1390|      2|{
 1391|      2|    PyObject *dict = PyDict_New();
 1392|      2|    if (dict == NULL) {
  ------------------
  |  Branch (1392:9): [True: 0, False: 2]
  ------------------
 1393|      0|        return NULL;
 1394|      0|    }
 1395|       |
 1396|      2|    const PyConfigSpec *spec = PYCONFIG_SPEC;
 1397|    146|    for (; spec->name != NULL; spec++) {
  ------------------
  |  Branch (1397:12): [True: 144, False: 2]
  ------------------
 1398|    144|        PyObject *obj = config_get(config, spec, 0);
 1399|    144|        if (obj == NULL) {
  ------------------
  |  Branch (1399:13): [True: 0, False: 144]
  ------------------
 1400|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|      0|            return NULL;
 1402|      0|        }
 1403|       |
 1404|    144|        int res = PyDict_SetItemString(dict, spec->name, obj);
 1405|    144|        Py_DECREF(obj);
  ------------------
  |  |  430|    144|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    144|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    144|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1406|    144|        if (res < 0) {
  ------------------
  |  Branch (1406:13): [True: 0, False: 144]
  ------------------
 1407|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1408|      0|            return NULL;
 1409|      0|        }
 1410|    144|    }
 1411|      2|    return dict;
 1412|      2|}
_PyConfig_FromDict:
 1624|      2|{
 1625|      2|    if (!PyDict_Check(dict)) {
  ------------------
  |  |   18|      2|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      2|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1625:9): [True: 0, False: 2]
  ------------------
 1626|      0|        PyErr_SetString(PyExc_TypeError, "dict expected");
 1627|      0|        return -1;
 1628|      0|    }
 1629|       |
 1630|      2|    const PyConfigSpec *spec = PYCONFIG_SPEC;
 1631|    146|    for (; spec->name != NULL; spec++) {
  ------------------
  |  Branch (1631:12): [True: 144, False: 2]
  ------------------
 1632|    144|        char *member = (char *)config + spec->offset;
 1633|    144|        switch (spec->type) {
 1634|     10|        case PyConfig_MEMBER_INT:
  ------------------
  |  Branch (1634:9): [True: 10, False: 134]
  ------------------
 1635|     26|        case PyConfig_MEMBER_UINT:
  ------------------
  |  Branch (1635:9): [True: 16, False: 128]
  ------------------
 1636|     88|        case PyConfig_MEMBER_BOOL:
  ------------------
  |  Branch (1636:9): [True: 62, False: 82]
  ------------------
 1637|     88|        {
 1638|     88|            int value;
 1639|     88|            if (config_dict_get_int(dict, spec->name, &value) < 0) {
  ------------------
  |  Branch (1639:17): [True: 0, False: 88]
  ------------------
 1640|      0|                return -1;
 1641|      0|            }
 1642|     88|            if (spec->type == PyConfig_MEMBER_BOOL
  ------------------
  |  Branch (1642:17): [True: 62, False: 26]
  ------------------
 1643|     26|                || spec->type == PyConfig_MEMBER_UINT)
  ------------------
  |  Branch (1643:20): [True: 16, False: 10]
  ------------------
 1644|     78|            {
 1645|     78|                if (value < 0) {
  ------------------
  |  Branch (1645:21): [True: 0, False: 78]
  ------------------
 1646|      0|                    config_dict_invalid_value(spec->name);
 1647|      0|                    return -1;
 1648|      0|                }
 1649|     78|            }
 1650|     88|            *(int*)member = value;
 1651|     88|            break;
 1652|     88|        }
 1653|      2|        case PyConfig_MEMBER_ULONG:
  ------------------
  |  Branch (1653:9): [True: 2, False: 142]
  ------------------
 1654|      2|        {
 1655|      2|            if (config_dict_get_ulong(dict, spec->name,
  ------------------
  |  Branch (1655:17): [True: 0, False: 2]
  ------------------
 1656|      2|                                      (unsigned long*)member) < 0) {
 1657|      0|                return -1;
 1658|      0|            }
 1659|      2|            break;
 1660|      2|        }
 1661|     12|        case PyConfig_MEMBER_WSTR:
  ------------------
  |  Branch (1661:9): [True: 12, False: 132]
  ------------------
 1662|     12|        {
 1663|     12|            wchar_t **wstr = (wchar_t**)member;
 1664|     12|            if (config_dict_get_wstr(dict, spec->name, config, wstr) < 0) {
  ------------------
  |  Branch (1664:17): [True: 0, False: 12]
  ------------------
 1665|      0|                return -1;
 1666|      0|            }
 1667|     12|            if (*wstr == NULL) {
  ------------------
  |  Branch (1667:17): [True: 0, False: 12]
  ------------------
 1668|      0|                config_dict_invalid_value(spec->name);
 1669|      0|                return -1;
 1670|      0|            }
 1671|     12|            break;
 1672|     12|        }
 1673|     32|        case PyConfig_MEMBER_WSTR_OPT:
  ------------------
  |  Branch (1673:9): [True: 32, False: 112]
  ------------------
 1674|     32|        {
 1675|     32|            wchar_t **wstr = (wchar_t**)member;
 1676|     32|            if (config_dict_get_wstr(dict, spec->name, config, wstr) < 0) {
  ------------------
  |  Branch (1676:17): [True: 0, False: 32]
  ------------------
 1677|      0|                return -1;
 1678|      0|            }
 1679|     32|            break;
 1680|     32|        }
 1681|     32|        case PyConfig_MEMBER_WSTR_LIST:
  ------------------
  |  Branch (1681:9): [True: 10, False: 134]
  ------------------
 1682|     10|        {
 1683|     10|            if (strcmp(spec->name, "xoptions") == 0) {
  ------------------
  |  Branch (1683:17): [True: 2, False: 8]
  ------------------
 1684|      2|                if (config_dict_get_xoptions(dict, spec->name, config,
  ------------------
  |  Branch (1684:21): [True: 0, False: 2]
  ------------------
 1685|      2|                                             (PyWideStringList*)member) < 0) {
 1686|      0|                    return -1;
 1687|      0|                }
 1688|      2|            }
 1689|      8|            else {
 1690|      8|                if (config_dict_get_wstrlist(dict, spec->name, config,
  ------------------
  |  Branch (1690:21): [True: 0, False: 8]
  ------------------
 1691|      8|                                             (PyWideStringList*)member) < 0) {
 1692|      0|                    return -1;
 1693|      0|                }
 1694|      8|            }
 1695|     10|            break;
 1696|     10|        }
 1697|     10|        default:
  ------------------
  |  Branch (1697:9): [True: 0, False: 144]
  ------------------
 1698|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1699|    144|        }
 1700|    144|    }
 1701|       |
 1702|      2|    if (!(config->_config_init == _PyConfig_INIT_COMPAT
  ------------------
  |  Branch (1702:11): [True: 0, False: 2]
  ------------------
 1703|      2|          || config->_config_init == _PyConfig_INIT_PYTHON
  ------------------
  |  Branch (1703:14): [True: 2, False: 0]
  ------------------
 1704|      0|          || config->_config_init == _PyConfig_INIT_ISOLATED))
  ------------------
  |  Branch (1704:14): [True: 0, False: 0]
  ------------------
 1705|      0|    {
 1706|      0|        config_dict_invalid_value("_config_init");
 1707|      0|        return -1;
 1708|      0|    }
 1709|       |
 1710|      2|    if (config->hash_seed > MAX_HASH_SEED) {
  ------------------
  |  |  981|      2|#define MAX_HASH_SEED 4294967295UL
  ------------------
  |  Branch (1710:9): [True: 0, False: 2]
  ------------------
 1711|      0|        config_dict_invalid_value("hash_seed");
 1712|      0|        return -1;
 1713|      0|    }
 1714|      2|    return 0;
 1715|      2|}
_PyConfig_InitImportConfig:
 2762|      2|{
 2763|      2|    return config_init_import(config, 1);
 2764|      2|}
_PyConfig_Write:
 2928|      2|{
 2929|      2|    if (config->configure_c_stdio) {
  ------------------
  |  Branch (2929:9): [True: 2, False: 0]
  ------------------
 2930|      2|        config_init_stdio(config);
 2931|      2|    }
 2932|       |
 2933|       |    /* Write the new pre-configuration into _PyRuntime */
 2934|      2|    PyPreConfig *preconfig = &runtime->preconfig;
 2935|      2|    preconfig->isolated = config->isolated;
 2936|      2|    preconfig->use_environment = config->use_environment;
 2937|      2|    preconfig->dev_mode = config->dev_mode;
 2938|       |
 2939|      2|    if (_Py_SetArgcArgv(config->orig_argv.length,
  ------------------
  |  Branch (2939:9): [True: 0, False: 2]
  ------------------
 2940|      2|                        config->orig_argv.items) < 0)
 2941|      0|    {
 2942|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 2943|      0|    }
 2944|       |
 2945|       |#ifdef PYMALLOC_USE_HUGEPAGES
 2946|       |    runtime->allocators.use_hugepages = config->pymalloc_hugepages;
 2947|       |#endif
 2948|       |
 2949|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2950|      2|}
_PyConfig_Read:
 3710|      2|{
 3711|      2|    PyStatus status;
 3712|       |
 3713|      2|    status = _Py_PreInitializeFromConfig(config, NULL);
 3714|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3715|      0|        return status;
 3716|      0|    }
 3717|       |
 3718|      2|    config_read_preconfig(config);
 3719|       |
 3720|       |    // Set default values
 3721|      2|    if (config->bytes_warning < 0) {
  ------------------
  |  Branch (3721:9): [True: 0, False: 2]
  ------------------
 3722|      0|        config->bytes_warning = 0;
 3723|      0|    }
 3724|      2|    if (config->inspect < 0) {
  ------------------
  |  Branch (3724:9): [True: 0, False: 2]
  ------------------
 3725|      0|        config->inspect = 0;
 3726|      0|    }
 3727|      2|    if (config->interactive < 0) {
  ------------------
  |  Branch (3727:9): [True: 0, False: 2]
  ------------------
 3728|      0|        config->interactive = 0;
 3729|      0|    }
 3730|      2|    if (config->optimization_level < 0) {
  ------------------
  |  Branch (3730:9): [True: 0, False: 2]
  ------------------
 3731|      0|        config->optimization_level = 0;
 3732|      0|    }
 3733|      2|    if (config->parser_debug < 0) {
  ------------------
  |  Branch (3733:9): [True: 0, False: 2]
  ------------------
 3734|      0|        config->parser_debug = 0;
 3735|      0|    }
 3736|      2|    if (config->quiet < 0) {
  ------------------
  |  Branch (3736:9): [True: 0, False: 2]
  ------------------
 3737|      0|        config->quiet = 0;
 3738|      0|    }
 3739|      2|    if (config->use_environment < 0) {
  ------------------
  |  Branch (3739:9): [True: 0, False: 2]
  ------------------
 3740|      0|        config->use_environment = 0;
 3741|      0|    }
 3742|      2|    if (config->verbose < 0) {
  ------------------
  |  Branch (3742:9): [True: 0, False: 2]
  ------------------
 3743|      0|        config->verbose = 0;
 3744|      0|    }
 3745|      2|    if (config->write_bytecode < 0) {
  ------------------
  |  Branch (3745:9): [True: 0, False: 2]
  ------------------
 3746|      0|        config->write_bytecode = 1;
 3747|      0|    }
 3748|      2|    if (config->buffered_stdio < 0) {
  ------------------
  |  Branch (3748:9): [True: 0, False: 2]
  ------------------
 3749|      0|        config->buffered_stdio = 1;
 3750|      0|    }
 3751|      2|    if (config->isolated < 0) {
  ------------------
  |  Branch (3751:9): [True: 0, False: 2]
  ------------------
 3752|      0|        config->isolated = 0;
 3753|      0|    }
 3754|       |#ifdef MS_WINDOWS
 3755|       |    if (config->legacy_windows_stdio < 0) {
 3756|       |        config->legacy_windows_stdio = 0;
 3757|       |    }
 3758|       |#endif
 3759|      2|    if (config->pathconfig_warnings < 0) {
  ------------------
  |  Branch (3759:9): [True: 0, False: 2]
  ------------------
 3760|      0|        config->pathconfig_warnings = 1;
 3761|      0|    }
 3762|      2|    if (config->site_import < 0) {
  ------------------
  |  Branch (3762:9): [True: 0, False: 2]
  ------------------
 3763|      0|        config->site_import = 1;
 3764|      0|    }
 3765|      2|    if (config->user_site_directory < 0) {
  ------------------
  |  Branch (3765:9): [True: 0, False: 2]
  ------------------
 3766|      0|        config->user_site_directory = 1;
 3767|      0|    }
 3768|       |
 3769|       |#ifdef __CYGWIN__
 3770|       |    status = config_argv0_add_exe(config);
 3771|       |    if (_PyStatus_EXCEPTION(status)) {
 3772|       |        return status;
 3773|       |    }
 3774|       |#endif
 3775|       |
 3776|      2|    if (config->orig_argv.length == 0
  ------------------
  |  Branch (3776:9): [True: 2, False: 0]
  ------------------
 3777|      2|        && !(config->argv.length == 1
  ------------------
  |  Branch (3777:14): [True: 0, False: 2]
  ------------------
 3778|      0|             && wcscmp(config->argv.items[0], L"") == 0))
  ------------------
  |  Branch (3778:17): [True: 0, False: 0]
  ------------------
 3779|      2|    {
 3780|      2|        if (_PyWideStringList_Copy(&config->orig_argv, &config->argv) < 0) {
  ------------------
  |  Branch (3780:13): [True: 0, False: 2]
  ------------------
 3781|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3782|      0|        }
 3783|      2|    }
 3784|       |
 3785|      2|    _PyPreCmdline precmdline = _PyPreCmdline_INIT;
  ------------------
  |  |  111|      2|    (_PyPreCmdline){ \
  |  |  112|      2|        .use_environment = -1, \
  |  |  113|      2|        .isolated = -1, \
  |  |  114|      2|        .dev_mode = -1}
  ------------------
 3786|      2|    status = core_read_precmdline(config, &precmdline);
 3787|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3788|      0|        goto done;
 3789|      0|    }
 3790|       |
 3791|      2|    assert(config->isolated >= 0);
  ------------------
  |  Branch (3791:5): [True: 2, False: 0]
  ------------------
 3792|      2|    if (config->isolated) {
  ------------------
  |  Branch (3792:9): [True: 0, False: 2]
  ------------------
 3793|      0|        config->safe_path = 1;
 3794|      0|        config->use_environment = 0;
 3795|      0|        config->user_site_directory = 0;
 3796|      0|    }
 3797|       |
 3798|      2|    status = config_read_cmdline(config);
 3799|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3800|      0|        goto done;
 3801|      0|    }
 3802|       |
 3803|       |    /* Handle early PySys_AddXOption() calls */
 3804|      2|    status = _PySys_ReadPreinitXOptions(config);
 3805|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3806|      0|        goto done;
 3807|      0|    }
 3808|       |
 3809|      2|    status = config_read(config, compute_path_config);
 3810|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3811|      0|        goto done;
 3812|      0|    }
 3813|       |
 3814|      2|    assert(config_check_consistency(config));
  ------------------
  |  Branch (3814:5): [True: 2, False: 0]
  ------------------
 3815|       |
 3816|      2|    status = _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3817|       |
 3818|      2|done:
 3819|      2|    _PyPreCmdline_Clear(&precmdline);
 3820|      2|    return status;
 3821|      2|}
_PyConfig_CreateXOptionsDict:
 4594|      4|{
 4595|      4|    PyObject *dict = PyDict_New();
 4596|      4|    if (dict == NULL) {
  ------------------
  |  Branch (4596:9): [True: 0, False: 4]
  ------------------
 4597|      0|        return NULL;
 4598|      0|    }
 4599|       |
 4600|      4|    Py_ssize_t nxoption = config->xoptions.length;
 4601|      4|    wchar_t **xoptions = config->xoptions.items;
 4602|      4|    for (Py_ssize_t i=0; i < nxoption; i++) {
  ------------------
  |  Branch (4602:26): [True: 0, False: 4]
  ------------------
 4603|      0|        const wchar_t *option = xoptions[i];
 4604|      0|        if (config_add_xoption(dict, option) < 0) {
  ------------------
  |  Branch (4604:13): [True: 0, False: 0]
  ------------------
 4605|      0|            Py_DECREF(dict);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4606|      0|            return NULL;
 4607|      0|        }
 4608|      0|    }
 4609|      4|    return dict;
 4610|      4|}
initconfig.c:_PyWideStringList_ClearEx:
  754|    108|{
  755|    108|    assert(_PyWideStringList_CheckConsistency(list));
  ------------------
  |  Branch (755:5): [True: 108, False: 0]
  ------------------
  756|    120|    for (Py_ssize_t i=0; i < list->length; i++) {
  ------------------
  |  Branch (756:26): [True: 12, False: 108]
  ------------------
  757|     12|        if (use_default_allocator) {
  ------------------
  |  Branch (757:13): [True: 0, False: 12]
  ------------------
  758|      0|            _PyMem_DefaultRawFree(list->items[i]);
  759|      0|        }
  760|     12|        else {
  761|     12|            PyMem_RawFree(list->items[i]);
  762|     12|        }
  763|     12|    }
  764|    108|    if (use_default_allocator) {
  ------------------
  |  Branch (764:9): [True: 2, False: 106]
  ------------------
  765|      2|        _PyMem_DefaultRawFree(list->items);
  766|      2|    }
  767|    106|    else {
  768|    106|        PyMem_RawFree(list->items);
  769|    106|    }
  770|    108|    list->length = 0;
  771|       |    list->items = NULL;
  772|    108|}
initconfig.c:_PyWideStringList_CopyEx:
  784|     40|{
  785|     40|    assert(_PyWideStringList_CheckConsistency(list));
  ------------------
  |  Branch (785:5): [True: 40, False: 0]
  ------------------
  786|     40|    assert(_PyWideStringList_CheckConsistency(list2));
  ------------------
  |  Branch (786:5): [True: 40, False: 0]
  ------------------
  787|       |
  788|     40|    if (list2->length == 0) {
  ------------------
  |  Branch (788:9): [True: 34, False: 6]
  ------------------
  789|     34|        _PyWideStringList_ClearEx(list, use_default_allocator);
  790|     34|        return 0;
  791|     34|    }
  792|       |
  793|      6|    PyWideStringList copy = _PyWideStringList_INIT;
  ------------------
  |  |   53|      6|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
  794|       |
  795|      6|    size_t size = list2->length * sizeof(list2->items[0]);
  796|      6|    if (use_default_allocator) {
  ------------------
  |  Branch (796:9): [True: 0, False: 6]
  ------------------
  797|      0|        copy.items = _PyMem_DefaultRawMalloc(size);
  798|      0|    }
  799|      6|    else {
  800|      6|        copy.items = PyMem_RawMalloc(size);
  801|      6|    }
  802|      6|    if (copy.items == NULL) {
  ------------------
  |  Branch (802:9): [True: 0, False: 6]
  ------------------
  803|      0|        return -1;
  804|      0|    }
  805|       |
  806|     16|    for (Py_ssize_t i=0; i < list2->length; i++) {
  ------------------
  |  Branch (806:26): [True: 10, False: 6]
  ------------------
  807|     10|        wchar_t *item;
  808|     10|        if (use_default_allocator) {
  ------------------
  |  Branch (808:13): [True: 0, False: 10]
  ------------------
  809|      0|            item = _PyMem_DefaultRawWcsdup(list2->items[i]);
  810|      0|        }
  811|     10|        else {
  812|     10|            item = _PyMem_RawWcsdup(list2->items[i]);
  813|     10|        }
  814|     10|        if (item == NULL) {
  ------------------
  |  Branch (814:13): [True: 0, False: 10]
  ------------------
  815|      0|            _PyWideStringList_ClearEx(&copy, use_default_allocator);
  816|      0|            return -1;
  817|      0|        }
  818|     10|        copy.items[i] = item;
  819|     10|        copy.length = i + 1;
  820|     10|    }
  821|       |
  822|      6|    _PyWideStringList_ClearEx(list, use_default_allocator);
  823|      6|    *list = copy;
  824|      6|    return 0;
  825|      6|}
initconfig.c:config_init_defaults:
 1179|      6|{
 1180|      6|    _PyConfig_InitCompatConfig(config);
 1181|       |
 1182|      6|    config->isolated = 0;
 1183|      6|    config->use_environment = 1;
 1184|      6|    config->site_import = 1;
 1185|      6|    config->bytes_warning = 0;
 1186|      6|    config->inspect = 0;
 1187|      6|    config->interactive = 0;
 1188|      6|    config->optimization_level = 0;
 1189|      6|    config->parser_debug= 0;
 1190|      6|    config->write_bytecode = 1;
 1191|      6|    config->verbose = 0;
 1192|      6|    config->quiet = 0;
 1193|      6|    config->user_site_directory = 1;
 1194|      6|    config->buffered_stdio = 1;
 1195|      6|    config->pathconfig_warnings = 1;
 1196|       |#ifdef MS_WINDOWS
 1197|       |    config->legacy_windows_stdio = 0;
 1198|       |#endif
 1199|       |#ifdef Py_GIL_DISABLED
 1200|       |    config->thread_inherit_context = 1;
 1201|       |    config->context_aware_warnings = 1;
 1202|       |#else
 1203|      6|    config->thread_inherit_context = 0;
 1204|      6|    config->context_aware_warnings = 0;
 1205|      6|#endif
 1206|       |#ifdef __APPLE__
 1207|       |    config->use_system_logger = USE_SYSTEM_LOGGER_DEFAULT;
 1208|       |#endif
 1209|      6|}
initconfig.c:config_set_bytes_string:
 1282|      2|{
 1283|      2|    PyStatus status = _Py_PreInitializeFromConfig(config, NULL);
 1284|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1285|      0|        return status;
 1286|      0|    }
 1287|       |
 1288|      2|    wchar_t *str2;
 1289|      2|    if (str != NULL) {
  ------------------
  |  Branch (1289:9): [True: 2, False: 0]
  ------------------
 1290|      2|        size_t len;
 1291|      2|        str2 = Py_DecodeLocale(str, &len);
 1292|      2|        if (str2 == NULL) {
  ------------------
  |  Branch (1292:13): [True: 0, False: 2]
  ------------------
 1293|      0|            if (len == (size_t)-2) {
  ------------------
  |  Branch (1293:17): [True: 0, False: 0]
  ------------------
 1294|      0|                return _PyStatus_ERR(decode_err_msg);
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1295|      0|            }
 1296|      0|            else {
 1297|      0|                return  _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 1298|      0|            }
 1299|      0|        }
 1300|      2|    }
 1301|      0|    else {
 1302|      0|        str2 = NULL;
 1303|      0|    }
 1304|      2|    PyMem_RawFree(*config_str);
 1305|      2|    *config_str = str2;
 1306|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1307|      2|}
initconfig.c:config_get_spec_member:
 1327|    720|{
 1328|    720|    return (char *)config + spec->offset;
 1329|    720|}
initconfig.c:config_dict_get_int:
 1424|     88|{
 1425|     88|    PyObject *item = config_dict_get(dict, name);
 1426|     88|    if (item == NULL) {
  ------------------
  |  Branch (1426:9): [True: 0, False: 88]
  ------------------
 1427|      0|        return -1;
 1428|      0|    }
 1429|     88|    int value = PyLong_AsInt(item);
 1430|     88|    Py_DECREF(item);
  ------------------
  |  |  430|     88|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     88|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1431|     88|    if (value == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1431:9): [True: 4, False: 84]
  |  Branch (1431:24): [True: 0, False: 4]
  ------------------
 1432|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (1432:13): [True: 0, False: 0]
  ------------------
 1433|      0|            config_dict_invalid_type(name);
 1434|      0|        }
 1435|      0|        else if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
  ------------------
  |  Branch (1435:18): [True: 0, False: 0]
  ------------------
 1436|      0|            config_dict_invalid_value(name);
 1437|      0|        }
 1438|      0|        return -1;
 1439|      0|    }
 1440|     88|    *result = value;
 1441|     88|    return 0;
 1442|     88|}
initconfig.c:config_dict_get_ulong:
 1447|      2|{
 1448|      2|    PyObject *item = config_dict_get(dict, name);
 1449|      2|    if (item == NULL) {
  ------------------
  |  Branch (1449:9): [True: 0, False: 2]
  ------------------
 1450|      0|        return -1;
 1451|      0|    }
 1452|      2|    unsigned long value = PyLong_AsUnsignedLong(item);
 1453|      2|    Py_DECREF(item);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1454|      2|    if (value == (unsigned long)-1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1454:9): [True: 0, False: 2]
  |  Branch (1454:39): [True: 0, False: 0]
  ------------------
 1455|      0|        if (PyErr_ExceptionMatches(PyExc_TypeError)) {
  ------------------
  |  Branch (1455:13): [True: 0, False: 0]
  ------------------
 1456|      0|            config_dict_invalid_type(name);
 1457|      0|        }
 1458|      0|        else if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
  ------------------
  |  Branch (1458:18): [True: 0, False: 0]
  ------------------
 1459|      0|            config_dict_invalid_value(name);
 1460|      0|        }
 1461|      0|        return -1;
 1462|      0|    }
 1463|      2|    *result = value;
 1464|      2|    return 0;
 1465|      2|}
initconfig.c:config_dict_get_wstr:
 1471|     44|{
 1472|     44|    PyObject *item = config_dict_get(dict, name);
 1473|     44|    if (item == NULL) {
  ------------------
  |  Branch (1473:9): [True: 0, False: 44]
  ------------------
 1474|      0|        return -1;
 1475|      0|    }
 1476|       |
 1477|     44|    PyStatus status;
 1478|     44|    if (item == Py_None) {
  ------------------
  |  |  616|     44|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1478:9): [True: 16, False: 28]
  ------------------
 1479|     16|        status = PyConfig_SetString(config, result, NULL);
 1480|     16|    }
 1481|     28|    else if (!PyUnicode_Check(item)) {
  ------------------
  |  |  103|     28|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|     28|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1481:14): [True: 0, False: 28]
  ------------------
 1482|      0|        config_dict_invalid_type(name);
 1483|      0|        goto error;
 1484|      0|    }
 1485|     28|    else {
 1486|     28|        wchar_t *wstr = PyUnicode_AsWideCharString(item, NULL);
 1487|     28|        if (wstr == NULL) {
  ------------------
  |  Branch (1487:13): [True: 0, False: 28]
  ------------------
 1488|      0|            goto error;
 1489|      0|        }
 1490|     28|        status = PyConfig_SetString(config, result, wstr);
 1491|     28|        PyMem_Free(wstr);
 1492|     28|    }
 1493|     44|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|     44|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 44]
  |  |  ------------------
  ------------------
 1494|      0|        PyErr_NoMemory();
 1495|      0|        goto error;
 1496|      0|    }
 1497|     44|    Py_DECREF(item);
  ------------------
  |  |  430|     44|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     44|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1498|     44|    return 0;
 1499|       |
 1500|      0|error:
 1501|      0|    Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1502|      0|    return -1;
 1503|     44|}
initconfig.c:config_dict_get_xoptions:
 1565|      2|{
 1566|      2|    PyObject *xoptions = config_dict_get(dict, name);
 1567|      2|    if (xoptions == NULL) {
  ------------------
  |  Branch (1567:9): [True: 0, False: 2]
  ------------------
 1568|      0|        return -1;
 1569|      0|    }
 1570|       |
 1571|      2|    if (!PyDict_CheckExact(xoptions)) {
  ------------------
  |  |   19|      2|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|      2|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1571:9): [True: 0, False: 2]
  ------------------
 1572|      0|        Py_DECREF(xoptions);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1573|      0|        config_dict_invalid_type(name);
 1574|      0|        return -1;
 1575|      0|    }
 1576|       |
 1577|      2|    Py_ssize_t pos = 0;
 1578|      2|    PyObject *key, *value;
 1579|      2|    PyWideStringList wstrlist = _PyWideStringList_INIT;
  ------------------
  |  |   53|      2|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 1580|      2|    while (PyDict_Next(xoptions, &pos, &key, &value)) {
  ------------------
  |  Branch (1580:12): [True: 0, False: 2]
  ------------------
 1581|      0|        PyObject *item;
 1582|       |
 1583|      0|        if (value != Py_True) {
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1583:13): [True: 0, False: 0]
  ------------------
 1584|      0|            item = PyUnicode_FromFormat("%S=%S", key, value);
 1585|      0|            if (item == NULL) {
  ------------------
  |  Branch (1585:17): [True: 0, False: 0]
  ------------------
 1586|      0|                goto error;
 1587|      0|            }
 1588|      0|        }
 1589|      0|        else {
 1590|      0|            item = Py_NewRef(key);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1591|      0|        }
 1592|       |
 1593|      0|        wchar_t *wstr = PyUnicode_AsWideCharString(item, NULL);
 1594|      0|        Py_DECREF(item);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1595|      0|        if (wstr == NULL) {
  ------------------
  |  Branch (1595:13): [True: 0, False: 0]
  ------------------
 1596|      0|            goto error;
 1597|      0|        }
 1598|       |
 1599|      0|        PyStatus status = PyWideStringList_Append(&wstrlist, wstr);
 1600|      0|        PyMem_Free(wstr);
 1601|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1602|      0|            PyErr_NoMemory();
 1603|      0|            goto error;
 1604|      0|        }
 1605|      0|    }
 1606|       |
 1607|      2|    if (_PyWideStringList_Copy(result, &wstrlist) < 0) {
  ------------------
  |  Branch (1607:9): [True: 0, False: 2]
  ------------------
 1608|      0|        PyErr_NoMemory();
 1609|      0|        goto error;
 1610|      0|    }
 1611|      2|    _PyWideStringList_Clear(&wstrlist);
 1612|      2|    Py_DECREF(xoptions);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1613|      2|    return 0;
 1614|       |
 1615|      0|error:
 1616|      0|    _PyWideStringList_Clear(&wstrlist);
 1617|      0|    Py_DECREF(xoptions);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1618|      0|    return -1;
 1619|      2|}
initconfig.c:config_dict_get_wstrlist:
 1509|      8|{
 1510|      8|    PyObject *list = config_dict_get(dict, name);
 1511|      8|    if (list == NULL) {
  ------------------
  |  Branch (1511:9): [True: 0, False: 8]
  ------------------
 1512|      0|        return -1;
 1513|      0|    }
 1514|       |
 1515|      8|    int is_list = PyList_CheckExact(list);
  ------------------
  |  |   26|      8|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|      8|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1516|      8|    if (!is_list && !PyTuple_CheckExact(list)) {
  ------------------
  |  |   28|      6|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|      6|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1516:9): [True: 6, False: 2]
  |  Branch (1516:21): [True: 0, False: 6]
  ------------------
 1517|      0|        Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1518|      0|        config_dict_invalid_type(name);
 1519|      0|        return -1;
 1520|      0|    }
 1521|       |
 1522|      8|    PyWideStringList wstrlist = _PyWideStringList_INIT;
  ------------------
  |  |   53|      8|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 1523|      8|    Py_ssize_t len = is_list ? PyList_GET_SIZE(list) : PyTuple_GET_SIZE(list);
  ------------------
  |  |   38|      2|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  Py_ssize_t len = is_list ? PyList_GET_SIZE(list) : PyTuple_GET_SIZE(list);
  ------------------
  |  |   27|      6|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1523:22): [True: 2, False: 6]
  ------------------
 1524|     16|    for (Py_ssize_t i=0; i < len; i++) {
  ------------------
  |  Branch (1524:26): [True: 8, False: 8]
  ------------------
 1525|      8|        PyObject *item = is_list ? PyList_GET_ITEM(list, i) : PyTuple_GET_ITEM(list, i);
  ------------------
  |  |   40|      6|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      6|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      PyObject *item = is_list ? PyList_GET_ITEM(list, i) : PyTuple_GET_ITEM(list, i);
  ------------------
  |  |   29|      2|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|      2|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1525:26): [True: 6, False: 2]
  |  Branch (1525:36): [True: 6, False: 0]
  |  Branch (1525:63): [True: 2, False: 0]
  ------------------
 1526|       |
 1527|      8|        if (item == Py_None) {
  ------------------
  |  |  616|      8|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1527:13): [True: 0, False: 8]
  ------------------
 1528|      0|            config_dict_invalid_value(name);
 1529|      0|            goto error;
 1530|      0|        }
 1531|      8|        else if (!PyUnicode_Check(item)) {
  ------------------
  |  |  103|      8|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      8|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (1531:18): [True: 0, False: 8]
  ------------------
 1532|      0|            config_dict_invalid_type(name);
 1533|      0|            goto error;
 1534|      0|        }
 1535|      8|        wchar_t *wstr = PyUnicode_AsWideCharString(item, NULL);
 1536|      8|        if (wstr == NULL) {
  ------------------
  |  Branch (1536:13): [True: 0, False: 8]
  ------------------
 1537|      0|            goto error;
 1538|      0|        }
 1539|      8|        PyStatus status = PyWideStringList_Append(&wstrlist, wstr);
 1540|      8|        PyMem_Free(wstr);
 1541|      8|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      8|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 8]
  |  |  ------------------
  ------------------
 1542|      0|            PyErr_NoMemory();
 1543|      0|            goto error;
 1544|      0|        }
 1545|      8|    }
 1546|       |
 1547|      8|    if (_PyWideStringList_Copy(result, &wstrlist) < 0) {
  ------------------
  |  Branch (1547:9): [True: 0, False: 8]
  ------------------
 1548|      0|        PyErr_NoMemory();
 1549|      0|        goto error;
 1550|      0|    }
 1551|      8|    _PyWideStringList_Clear(&wstrlist);
 1552|      8|    Py_DECREF(list);
  ------------------
  |  |  430|      8|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1553|      8|    return 0;
 1554|       |
 1555|      0|error:
 1556|      0|    _PyWideStringList_Clear(&wstrlist);
 1557|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1558|      0|    return -1;
 1559|      8|}
initconfig.c:config_init_import:
 2716|      4|{
 2717|      4|    PyStatus status;
 2718|       |
 2719|      4|    status = _PyConfig_InitPathConfig(config, compute_path_config);
 2720|      4|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
 2721|      0|        return status;
 2722|      0|    }
 2723|       |
 2724|      4|    const char *env = config_get_env(config, "PYTHON_FROZEN_MODULES");
 2725|      4|    if (env == NULL) {
  ------------------
  |  Branch (2725:9): [True: 4, False: 0]
  ------------------
 2726|      4|    }
 2727|      0|    else if (strcmp(env, "on") == 0) {
  ------------------
  |  Branch (2727:14): [True: 0, False: 0]
  ------------------
 2728|      0|        config->use_frozen_modules = 1;
 2729|      0|    }
 2730|      0|    else if (strcmp(env, "off") == 0) {
  ------------------
  |  Branch (2730:14): [True: 0, False: 0]
  ------------------
 2731|      0|        config->use_frozen_modules = 0;
 2732|      0|    } else {
 2733|      0|        return PyStatus_Error("bad value for PYTHON_FROZEN_MODULES "
 2734|      0|                              "(expected \"on\" or \"off\")");
 2735|      0|    }
 2736|       |
 2737|       |    /* -X frozen_modules=[on|off] */
 2738|      4|    const wchar_t *value = config_get_xoption_value(config, L"frozen_modules");
 2739|      4|    if (value == NULL) {
  ------------------
  |  Branch (2739:9): [True: 4, False: 0]
  ------------------
 2740|      4|    }
 2741|      0|    else if (wcscmp(value, L"on") == 0) {
  ------------------
  |  Branch (2741:14): [True: 0, False: 0]
  ------------------
 2742|      0|        config->use_frozen_modules = 1;
 2743|      0|    }
 2744|      0|    else if (wcscmp(value, L"off") == 0) {
  ------------------
  |  Branch (2744:14): [True: 0, False: 0]
  ------------------
 2745|      0|        config->use_frozen_modules = 0;
 2746|      0|    }
 2747|      0|    else if (wcslen(value) == 0) {
  ------------------
  |  Branch (2747:14): [True: 0, False: 0]
  ------------------
 2748|       |        // "-X frozen_modules" and "-X frozen_modules=" both imply "on".
 2749|      0|        config->use_frozen_modules = 1;
 2750|      0|    }
 2751|      0|    else {
 2752|      0|        return PyStatus_Error("bad value for option -X frozen_modules "
 2753|      0|                              "(expected \"on\" or \"off\")");
 2754|      0|    }
 2755|       |
 2756|      4|    assert(config->use_frozen_modules >= 0);
  ------------------
  |  Branch (2756:5): [True: 4, False: 0]
  ------------------
 2757|      4|    return _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2758|      4|}
initconfig.c:config_get_env:
 1720|     38|{
 1721|     38|    return _Py_GetEnv(config->use_environment, name);
 1722|     38|}
initconfig.c:config_get_xoption_value:
 1791|     10|{
 1792|     10|    const wchar_t *xoption = config_get_xoption(config, name);
 1793|     10|    if (xoption == NULL) {
  ------------------
  |  Branch (1793:9): [True: 10, False: 0]
  ------------------
 1794|     10|        return NULL;
 1795|     10|    }
 1796|      0|    const wchar_t *sep = wcschr(xoption, L'=');
 1797|      0|    return sep ? sep + 1 : L"";
  ------------------
  |  Branch (1797:12): [True: 0, False: 0]
  ------------------
 1798|     10|}
initconfig.c:config_get_xoption:
 1785|     34|{
 1786|     34|    return _Py_get_xoption(&config->xoptions, name);
 1787|     34|}
initconfig.c:config_init_stdio:
 2887|      2|{
 2888|       |#if defined(MS_WINDOWS) || defined(__CYGWIN__)
 2889|       |    /* don't translate newlines (\r\n <=> \n) */
 2890|       |    _setmode(fileno(stdin), O_BINARY);
 2891|       |    _setmode(fileno(stdout), O_BINARY);
 2892|       |    _setmode(fileno(stderr), O_BINARY);
 2893|       |#endif
 2894|       |
 2895|      2|    if (!config->buffered_stdio) {
  ------------------
  |  Branch (2895:9): [True: 0, False: 2]
  ------------------
 2896|      0|#ifdef HAVE_SETVBUF
 2897|      0|        setvbuf(stdin,  (char *)NULL, _IONBF, BUFSIZ);
 2898|      0|        setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ);
 2899|      0|        setvbuf(stderr, (char *)NULL, _IONBF, BUFSIZ);
 2900|       |#else /* !HAVE_SETVBUF */
 2901|       |        setbuf(stdin,  (char *)NULL);
 2902|       |        setbuf(stdout, (char *)NULL);
 2903|       |        setbuf(stderr, (char *)NULL);
 2904|       |#endif /* !HAVE_SETVBUF */
 2905|      0|    }
 2906|      2|    else if (config->interactive) {
  ------------------
  |  Branch (2906:14): [True: 0, False: 2]
  ------------------
 2907|       |#ifdef MS_WINDOWS
 2908|       |        /* Doesn't have to have line-buffered -- use unbuffered */
 2909|       |        /* Any set[v]buf(stdin, ...) screws up Tkinter :-( */
 2910|       |        setvbuf(stdout, (char *)NULL, _IONBF, BUFSIZ);
 2911|       |#else /* !MS_WINDOWS */
 2912|      0|#ifdef HAVE_SETVBUF
 2913|      0|        setvbuf(stdin,  (char *)NULL, _IOLBF, BUFSIZ);
 2914|      0|        setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
 2915|      0|#endif /* HAVE_SETVBUF */
 2916|      0|#endif /* !MS_WINDOWS */
 2917|       |        /* Leave stderr alone - it should be unbuffered anyway. */
 2918|      0|    }
 2919|      2|}
initconfig.c:_Py_SetArgcArgv:
  961|      2|{
  962|      2|    const PyWideStringList argv_list = {.length = argc, .items = (wchar_t **)argv};
  963|       |
  964|       |    // XXX _PyRuntime.orig_argv only gets cleared by Py_Main(),
  965|       |    // so it currently leaks for embedders.
  966|       |    return _PyWideStringList_CopyEx(&_PyRuntime.orig_argv, &argv_list, true);
  967|      2|}
initconfig.c:config_read_preconfig:
 1768|      2|{
 1769|      2|#define COPY_FLAG(ATTR) \
 1770|      2|        if (config->ATTR == -1) { \
 1771|      2|            config->ATTR = preconfig->ATTR; \
 1772|      2|        }
 1773|       |
 1774|      2|    const PyPreConfig *preconfig = &_PyRuntime.preconfig;
 1775|      2|    COPY_FLAG(isolated);
  ------------------
  |  | 1770|      2|        if (config->ATTR == -1) { \
  |  |  ------------------
  |  |  |  Branch (1770:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1771|      0|            config->ATTR = preconfig->ATTR; \
  |  | 1772|      0|        }
  ------------------
 1776|      2|    COPY_FLAG(use_environment);
  ------------------
  |  | 1770|      2|        if (config->ATTR == -1) { \
  |  |  ------------------
  |  |  |  Branch (1770:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1771|      0|            config->ATTR = preconfig->ATTR; \
  |  | 1772|      0|        }
  ------------------
 1777|      2|    COPY_FLAG(dev_mode);
  ------------------
  |  | 1770|      2|        if (config->ATTR == -1) { \
  |  |  ------------------
  |  |  |  Branch (1770:13): [True: 2, False: 0]
  |  |  ------------------
  |  | 1771|      2|            config->ATTR = preconfig->ATTR; \
  |  | 1772|      2|        }
  ------------------
 1778|       |
 1779|      2|#undef COPY_FLAG
 1780|      2|}
initconfig.c:core_read_precmdline:
 3480|      2|{
 3481|      2|    PyStatus status;
 3482|       |
 3483|      2|    if (config->parse_argv == 1) {
  ------------------
  |  Branch (3483:9): [True: 2, False: 0]
  ------------------
 3484|      2|        if (_PyWideStringList_Copy(&precmdline->argv, &config->argv) < 0) {
  ------------------
  |  Branch (3484:13): [True: 0, False: 2]
  ------------------
 3485|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3486|      0|        }
 3487|      2|    }
 3488|       |
 3489|      2|    PyPreConfig preconfig;
 3490|       |
 3491|      2|    status = _PyPreConfig_InitFromPreConfig(&preconfig, &_PyRuntime.preconfig);
 3492|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3493|      0|        return status;
 3494|      0|    }
 3495|       |
 3496|      2|    _PyPreConfig_GetConfig(&preconfig, config);
 3497|       |
 3498|      2|    status = _PyPreCmdline_Read(precmdline, &preconfig);
 3499|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3500|      0|        return status;
 3501|      0|    }
 3502|       |
 3503|      2|    status = _PyPreCmdline_SetConfig(precmdline, config);
 3504|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3505|      0|        return status;
 3506|      0|    }
 3507|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3508|      2|}
initconfig.c:config_read_cmdline:
 3544|      2|{
 3545|      2|    PyStatus status;
 3546|      2|    PyWideStringList cmdline_warnoptions = _PyWideStringList_INIT;
  ------------------
  |  |   53|      2|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 3547|      2|    PyWideStringList env_warnoptions = _PyWideStringList_INIT;
  ------------------
  |  |   53|      2|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 3548|      2|    PyWideStringList sys_warnoptions = _PyWideStringList_INIT;
  ------------------
  |  |   53|      2|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 3549|       |
 3550|      2|    if (config->parse_argv < 0) {
  ------------------
  |  Branch (3550:9): [True: 0, False: 2]
  ------------------
 3551|      0|        config->parse_argv = 1;
 3552|      0|    }
 3553|       |
 3554|      2|    if (config->parse_argv == 1) {
  ------------------
  |  Branch (3554:9): [True: 2, False: 0]
  ------------------
 3555|      2|        Py_ssize_t opt_index;
 3556|      2|        status = config_parse_cmdline(config, &cmdline_warnoptions, &opt_index);
 3557|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3558|      0|            goto done;
 3559|      0|        }
 3560|       |
 3561|      2|        status = config_run_filename_abspath(config);
 3562|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3563|      0|            goto done;
 3564|      0|        }
 3565|       |
 3566|      2|        status = config_update_argv(config, opt_index);
 3567|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3568|      0|            goto done;
 3569|      0|        }
 3570|      2|    }
 3571|      0|    else {
 3572|      0|        status = config_run_filename_abspath(config);
 3573|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3574|      0|            goto done;
 3575|      0|        }
 3576|      0|    }
 3577|       |
 3578|      2|    if (config->use_environment) {
  ------------------
  |  Branch (3578:9): [True: 2, False: 0]
  ------------------
 3579|      2|        status = config_init_env_warnoptions(config, &env_warnoptions);
 3580|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3581|      0|            goto done;
 3582|      0|        }
 3583|      2|    }
 3584|       |
 3585|       |    /* Handle early PySys_AddWarnOption() calls */
 3586|      2|    status = _PySys_ReadPreinitWarnOptions(&sys_warnoptions);
 3587|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3588|      0|        goto done;
 3589|      0|    }
 3590|       |
 3591|      2|    status = config_init_warnoptions(config,
 3592|      2|                                     &cmdline_warnoptions,
 3593|      2|                                     &env_warnoptions,
 3594|      2|                                     &sys_warnoptions);
 3595|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3596|      0|        goto done;
 3597|      0|    }
 3598|       |
 3599|      2|    status = _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3600|       |
 3601|      2|done:
 3602|      2|    _PyWideStringList_Clear(&cmdline_warnoptions);
 3603|      2|    _PyWideStringList_Clear(&env_warnoptions);
 3604|      2|    _PyWideStringList_Clear(&sys_warnoptions);
 3605|      2|    return status;
 3606|      2|}
initconfig.c:config_parse_cmdline:
 2999|      2|{
 3000|       |    // Only store the first option
 3001|      2|#define DEFER_OPTION(OPTION) \
 3002|      2|        do { \
 3003|      2|            if (config->_deferred_cmdline_option == 0) { \
 3004|      2|                config->_deferred_cmdline_option = (OPTION); \
 3005|      2|            } \
 3006|      2|        } while (0)
 3007|       |
 3008|      2|    PyStatus status;
 3009|      2|    const PyWideStringList *argv = &config->argv;
 3010|      2|    int print_version = 0;
 3011|       |
 3012|      2|    _PyOS_ResetGetOpt();
 3013|      2|    do {
 3014|      2|        int longindex = -1;
 3015|      2|        int c = _PyOS_GetOpt(argv->length, argv->items, &longindex);
 3016|      2|        if (c == EOF) {
  ------------------
  |  Branch (3016:13): [True: 2, False: 0]
  ------------------
 3017|      2|            break;
 3018|      2|        }
 3019|       |
 3020|      0|        if (c == 'c') {
  ------------------
  |  Branch (3020:13): [True: 0, False: 0]
  ------------------
 3021|      0|            if (config->run_command == NULL) {
  ------------------
  |  Branch (3021:17): [True: 0, False: 0]
  ------------------
 3022|       |                /* -c is the last option; following arguments
 3023|       |                   that look like options are left for the
 3024|       |                   command to interpret. */
 3025|      0|                size_t len = wcslen(_PyOS_optarg) + 1 + 1;
 3026|      0|                wchar_t *command = PyMem_RawMalloc(sizeof(wchar_t) * len);
 3027|      0|                if (command == NULL) {
  ------------------
  |  Branch (3027:21): [True: 0, False: 0]
  ------------------
 3028|      0|                    return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3029|      0|                }
 3030|      0|                memcpy(command, _PyOS_optarg, (len - 2) * sizeof(wchar_t));
 3031|      0|                command[len - 2] = '\n';
 3032|      0|                command[len - 1] = 0;
 3033|      0|                config->run_command = command;
 3034|      0|            }
 3035|      0|            break;
 3036|      0|        }
 3037|       |
 3038|      0|        if (c == 'm') {
  ------------------
  |  Branch (3038:13): [True: 0, False: 0]
  ------------------
 3039|       |            /* -m is the last option; following arguments
 3040|       |               that look like options are left for the
 3041|       |               module to interpret. */
 3042|      0|            if (config->run_module == NULL) {
  ------------------
  |  Branch (3042:17): [True: 0, False: 0]
  ------------------
 3043|      0|                config->run_module = _PyMem_RawWcsdup(_PyOS_optarg);
 3044|      0|                if (config->run_module == NULL) {
  ------------------
  |  Branch (3044:21): [True: 0, False: 0]
  ------------------
 3045|      0|                    return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3046|      0|                }
 3047|      0|            }
 3048|      0|            break;
 3049|      0|        }
 3050|       |
 3051|      0|        switch (c) {
 3052|       |        // Integers represent long options, see Python/getopt.c
 3053|      0|        case 1:
  ------------------
  |  Branch (3053:9): [True: 0, False: 0]
  ------------------
 3054|       |            // check-hash-based-pycs
 3055|      0|            if (wcscmp(_PyOS_optarg, L"always") == 0
  ------------------
  |  Branch (3055:17): [True: 0, False: 0]
  ------------------
 3056|      0|                || wcscmp(_PyOS_optarg, L"never") == 0
  ------------------
  |  Branch (3056:20): [True: 0, False: 0]
  ------------------
 3057|      0|                || wcscmp(_PyOS_optarg, L"default") == 0)
  ------------------
  |  Branch (3057:20): [True: 0, False: 0]
  ------------------
 3058|      0|            {
 3059|      0|                status = PyConfig_SetString(config, &config->check_hash_pycs_mode,
 3060|      0|                                            _PyOS_optarg);
 3061|      0|                if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3062|      0|                    return status;
 3063|      0|                }
 3064|      0|            } else {
 3065|      0|                DEFER_OPTION(c);
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3066|      0|            }
 3067|      0|            break;
 3068|       |
 3069|      0|        case 2:
  ------------------
  |  Branch (3069:9): [True: 0, False: 0]
  ------------------
 3070|       |            // help-all
 3071|      0|            DEFER_OPTION(c);
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3072|      0|            break;
 3073|       |
 3074|      0|        case 3:
  ------------------
  |  Branch (3074:9): [True: 0, False: 0]
  ------------------
 3075|       |            // help-env
 3076|      0|            DEFER_OPTION(c);
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3077|      0|            break;
 3078|       |
 3079|      0|        case 4:
  ------------------
  |  Branch (3079:9): [True: 0, False: 0]
  ------------------
 3080|       |            // help-xoptions
 3081|      0|            DEFER_OPTION(c);
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3082|      0|            break;
 3083|       |
 3084|      0|        case 'b':
  ------------------
  |  Branch (3084:9): [True: 0, False: 0]
  ------------------
 3085|      0|            config->bytes_warning++;
 3086|      0|            break;
 3087|       |
 3088|      0|        case 'd':
  ------------------
  |  Branch (3088:9): [True: 0, False: 0]
  ------------------
 3089|      0|            config->parser_debug++;
 3090|      0|            break;
 3091|       |
 3092|      0|        case 'i':
  ------------------
  |  Branch (3092:9): [True: 0, False: 0]
  ------------------
 3093|      0|            config->inspect++;
 3094|      0|            config->interactive++;
 3095|      0|            break;
 3096|       |
 3097|      0|        case 'E':
  ------------------
  |  Branch (3097:9): [True: 0, False: 0]
  ------------------
 3098|      0|        case 'I':
  ------------------
  |  Branch (3098:9): [True: 0, False: 0]
  ------------------
 3099|      0|        case 'X':
  ------------------
  |  Branch (3099:9): [True: 0, False: 0]
  ------------------
 3100|       |            /* option handled by _PyPreCmdline_Read() */
 3101|      0|            break;
 3102|       |
 3103|      0|        case 'O':
  ------------------
  |  Branch (3103:9): [True: 0, False: 0]
  ------------------
 3104|      0|            config->optimization_level++;
 3105|      0|            break;
 3106|       |
 3107|      0|        case 'P':
  ------------------
  |  Branch (3107:9): [True: 0, False: 0]
  ------------------
 3108|      0|            config->safe_path = 1;
 3109|      0|            break;
 3110|       |
 3111|      0|        case 'B':
  ------------------
  |  Branch (3111:9): [True: 0, False: 0]
  ------------------
 3112|      0|            config->write_bytecode = 0;
 3113|      0|            break;
 3114|       |
 3115|      0|        case 's':
  ------------------
  |  Branch (3115:9): [True: 0, False: 0]
  ------------------
 3116|      0|            config->user_site_directory = 0;
 3117|      0|            break;
 3118|       |
 3119|      0|        case 'S':
  ------------------
  |  Branch (3119:9): [True: 0, False: 0]
  ------------------
 3120|      0|            config->site_import = 0;
 3121|      0|            break;
 3122|       |
 3123|      0|        case 't':
  ------------------
  |  Branch (3123:9): [True: 0, False: 0]
  ------------------
 3124|       |            /* ignored for backwards compatibility */
 3125|      0|            break;
 3126|       |
 3127|      0|        case 'u':
  ------------------
  |  Branch (3127:9): [True: 0, False: 0]
  ------------------
 3128|      0|            config->buffered_stdio = 0;
 3129|      0|            break;
 3130|       |
 3131|      0|        case 'v':
  ------------------
  |  Branch (3131:9): [True: 0, False: 0]
  ------------------
 3132|      0|            config->verbose++;
 3133|      0|            break;
 3134|       |
 3135|      0|        case 'x':
  ------------------
  |  Branch (3135:9): [True: 0, False: 0]
  ------------------
 3136|      0|            config->skip_source_first_line = 1;
 3137|      0|            break;
 3138|       |
 3139|      0|        case 'h':
  ------------------
  |  Branch (3139:9): [True: 0, False: 0]
  ------------------
 3140|      0|        case '?':
  ------------------
  |  Branch (3140:9): [True: 0, False: 0]
  ------------------
 3141|      0|            DEFER_OPTION(c);
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3142|      0|            break;
 3143|       |
 3144|      0|        case 'V':
  ------------------
  |  Branch (3144:9): [True: 0, False: 0]
  ------------------
 3145|      0|            print_version++;
 3146|      0|            break;
 3147|       |
 3148|      0|        case 'W':
  ------------------
  |  Branch (3148:9): [True: 0, False: 0]
  ------------------
 3149|      0|            status = PyWideStringList_Append(warnoptions, _PyOS_optarg);
 3150|      0|            if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3151|      0|                return status;
 3152|      0|            }
 3153|      0|            break;
 3154|       |
 3155|      0|        case 'q':
  ------------------
  |  Branch (3155:9): [True: 0, False: 0]
  ------------------
 3156|      0|            config->quiet++;
 3157|      0|            break;
 3158|       |
 3159|      0|        case 'R':
  ------------------
  |  Branch (3159:9): [True: 0, False: 0]
  ------------------
 3160|      0|            config->use_hash_seed = 0;
 3161|      0|            break;
 3162|       |
 3163|       |        /* This space reserved for other options */
 3164|       |
 3165|      0|        default:
  ------------------
  |  Branch (3165:9): [True: 0, False: 0]
  ------------------
 3166|       |            /* unknown argument: parsing failed */
 3167|      0|            DEFER_OPTION(c);
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3168|      0|            break;
 3169|      0|        }
 3170|      0|    } while (config->_deferred_cmdline_option == 0);
  ------------------
  |  Branch (3170:14): [True: 0, False: 0]
  ------------------
 3171|       |
 3172|      2|    if (print_version >= 2) {
  ------------------
  |  Branch (3172:9): [True: 0, False: 2]
  ------------------
 3173|      0|        DEFER_OPTION('W');
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3174|      0|    }
 3175|      2|    else if (print_version >= 1) {
  ------------------
  |  Branch (3175:14): [True: 0, False: 2]
  ------------------
 3176|      0|        DEFER_OPTION('V');
  ------------------
  |  | 3002|      0|        do { \
  |  | 3003|      0|            if (config->_deferred_cmdline_option == 0) { \
  |  |  ------------------
  |  |  |  Branch (3003:17): [True: 0, False: 0]
  |  |  ------------------
  |  | 3004|      0|                config->_deferred_cmdline_option = (OPTION); \
  |  | 3005|      0|            } \
  |  | 3006|      0|        } while (0)
  |  |  ------------------
  |  |  |  Branch (3006:18): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3177|      0|    }
 3178|       |
 3179|      2|    if (config->run_command == NULL && config->run_module == NULL
  ------------------
  |  Branch (3179:9): [True: 2, False: 0]
  |  Branch (3179:40): [True: 2, False: 0]
  ------------------
 3180|      2|        && _PyOS_optind < argv->length
  ------------------
  |  Branch (3180:12): [True: 0, False: 2]
  ------------------
 3181|      0|        && wcscmp(argv->items[_PyOS_optind], L"-") != 0
  ------------------
  |  Branch (3181:12): [True: 0, False: 0]
  ------------------
 3182|      0|        && config->run_filename == NULL)
  ------------------
  |  Branch (3182:12): [True: 0, False: 0]
  ------------------
 3183|      0|    {
 3184|      0|        config->run_filename = _PyMem_RawWcsdup(argv->items[_PyOS_optind]);
 3185|      0|        if (config->run_filename == NULL) {
  ------------------
  |  Branch (3185:13): [True: 0, False: 0]
  ------------------
 3186|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3187|      0|        }
 3188|      0|    }
 3189|       |
 3190|      2|    if (config->run_command != NULL || config->run_module != NULL) {
  ------------------
  |  Branch (3190:9): [True: 0, False: 2]
  |  Branch (3190:40): [True: 0, False: 2]
  ------------------
 3191|       |        /* Backup _PyOS_optind */
 3192|      0|        _PyOS_optind--;
 3193|      0|    }
 3194|       |
 3195|      2|    *opt_index = _PyOS_optind;
 3196|       |
 3197|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3198|       |
 3199|      2|#undef DEFER_OPTION
 3200|      2|}
initconfig.c:config_run_filename_abspath:
 3514|      2|{
 3515|      2|    if (!config->run_filename) {
  ------------------
  |  Branch (3515:9): [True: 2, False: 0]
  ------------------
 3516|      2|        return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3517|      2|    }
 3518|       |
 3519|      0|#ifndef MS_WINDOWS
 3520|      0|    if (_Py_isabs(config->run_filename)) {
  ------------------
  |  Branch (3520:9): [True: 0, False: 0]
  ------------------
 3521|       |        /* path is already absolute */
 3522|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3523|      0|    }
 3524|      0|#endif
 3525|       |
 3526|      0|    wchar_t *abs_filename;
 3527|      0|    if (_Py_abspath(config->run_filename, &abs_filename) < 0) {
  ------------------
  |  Branch (3527:9): [True: 0, False: 0]
  ------------------
 3528|       |        /* failed to get the absolute path of the command line filename:
 3529|       |           ignore the error, keep the relative path */
 3530|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3531|      0|    }
 3532|      0|    if (abs_filename == NULL) {
  ------------------
  |  Branch (3532:9): [True: 0, False: 0]
  ------------------
 3533|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3534|      0|    }
 3535|       |
 3536|      0|    PyMem_RawFree(config->run_filename);
 3537|      0|    config->run_filename = abs_filename;
 3538|      0|    return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3539|      0|}
initconfig.c:config_update_argv:
 3429|      2|{
 3430|      2|    const PyWideStringList *cmdline_argv = &config->argv;
 3431|      2|    PyWideStringList config_argv = _PyWideStringList_INIT;
  ------------------
  |  |   53|      2|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 3432|       |
 3433|       |    /* Copy argv to be able to modify it (to force -c/-m) */
 3434|      2|    if (cmdline_argv->length <= opt_index) {
  ------------------
  |  Branch (3434:9): [True: 2, False: 0]
  ------------------
 3435|       |        /* Ensure at least one (empty) argument is seen */
 3436|      2|        PyStatus status = PyWideStringList_Append(&config_argv, L"");
 3437|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3438|      0|            return status;
 3439|      0|        }
 3440|      2|    }
 3441|      0|    else {
 3442|      0|        PyWideStringList slice;
 3443|      0|        slice.length = cmdline_argv->length - opt_index;
 3444|      0|        slice.items = &cmdline_argv->items[opt_index];
 3445|      0|        if (_PyWideStringList_Copy(&config_argv, &slice) < 0) {
  ------------------
  |  Branch (3445:13): [True: 0, False: 0]
  ------------------
 3446|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3447|      0|        }
 3448|      0|    }
 3449|      2|    assert(config_argv.length >= 1);
  ------------------
  |  Branch (3449:5): [True: 2, False: 0]
  ------------------
 3450|       |
 3451|      2|    wchar_t *arg0 = NULL;
 3452|      2|    if (config->run_command != NULL) {
  ------------------
  |  Branch (3452:9): [True: 0, False: 2]
  ------------------
 3453|       |        /* Force sys.argv[0] = '-c' */
 3454|      0|        arg0 = L"-c";
 3455|      0|    }
 3456|      2|    else if (config->run_module != NULL) {
  ------------------
  |  Branch (3456:14): [True: 0, False: 2]
  ------------------
 3457|       |        /* Force sys.argv[0] = '-m'*/
 3458|      0|        arg0 = L"-m";
 3459|      0|    }
 3460|       |
 3461|      2|    if (arg0 != NULL) {
  ------------------
  |  Branch (3461:9): [True: 0, False: 2]
  ------------------
 3462|      0|        arg0 = _PyMem_RawWcsdup(arg0);
 3463|      0|        if (arg0 == NULL) {
  ------------------
  |  Branch (3463:13): [True: 0, False: 0]
  ------------------
 3464|      0|            _PyWideStringList_Clear(&config_argv);
 3465|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 3466|      0|        }
 3467|       |
 3468|      0|        PyMem_RawFree(config_argv.items[0]);
 3469|      0|        config_argv.items[0] = arg0;
 3470|      0|    }
 3471|       |
 3472|      2|    _PyWideStringList_Clear(&config->argv);
 3473|      2|    config->argv = config_argv;
 3474|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3475|      2|}
initconfig.c:config_init_env_warnoptions:
 3276|      2|{
 3277|      2|    PyStatus status;
 3278|       |    /* CONFIG_GET_ENV_DUP requires dest to be initialized to NULL */
 3279|      2|    wchar_t *env = NULL;
 3280|      2|    status = CONFIG_GET_ENV_DUP(config, &env,
  ------------------
  |  | 1763|      2|    config_get_env_dup(CONFIG, DEST, WNAME, NAME, "cannot decode " NAME)
  ------------------
 3281|      2|                             L"PYTHONWARNINGS", "PYTHONWARNINGS");
 3282|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3283|      0|        return status;
 3284|      0|    }
 3285|       |
 3286|       |    /* env var is not set or is empty */
 3287|      2|    if (env == NULL) {
  ------------------
  |  Branch (3287:9): [True: 2, False: 0]
  ------------------
 3288|      2|        return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3289|      2|    }
 3290|       |
 3291|       |
 3292|      0|    wchar_t *warning, *context = NULL;
 3293|      0|    for (warning = WCSTOK(env, L",", &context);
  ------------------
  |  | 3270|      0|#  define WCSTOK wcstok
  ------------------
 3294|      0|         warning != NULL;
  ------------------
  |  Branch (3294:10): [True: 0, False: 0]
  ------------------
 3295|      0|         warning = WCSTOK(NULL, L",", &context))
  ------------------
  |  | 3270|      0|#  define WCSTOK wcstok
  ------------------
 3296|      0|    {
 3297|      0|        status = PyWideStringList_Append(warnoptions, warning);
 3298|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3299|      0|            PyMem_RawFree(env);
 3300|      0|            return status;
 3301|      0|        }
 3302|      0|    }
 3303|      0|    PyMem_RawFree(env);
 3304|      0|    return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3305|      0|}
initconfig.c:config_get_env_dup:
 1733|     10|{
 1734|     10|    assert(*dest == NULL);
  ------------------
  |  Branch (1734:5): [True: 10, False: 0]
  ------------------
 1735|     10|    assert(config->use_environment >= 0);
  ------------------
  |  Branch (1735:5): [True: 10, False: 0]
  ------------------
 1736|       |
 1737|     10|    if (!config->use_environment) {
  ------------------
  |  Branch (1737:9): [True: 0, False: 10]
  ------------------
 1738|      0|        *dest = NULL;
 1739|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1740|      0|    }
 1741|       |
 1742|       |#ifdef MS_WINDOWS
 1743|       |    const wchar_t *var = _wgetenv(wname);
 1744|       |    if (!var || var[0] == '\0') {
 1745|       |        *dest = NULL;
 1746|       |        return _PyStatus_OK();
 1747|       |    }
 1748|       |
 1749|       |    return PyConfig_SetString(config, dest, var);
 1750|       |#else
 1751|     10|    const char *var = getenv(name);
 1752|     10|    if (!var || var[0] == '\0') {
  ------------------
  |  Branch (1752:9): [True: 10, False: 0]
  |  Branch (1752:17): [True: 0, False: 0]
  ------------------
 1753|     10|        *dest = NULL;
 1754|     10|        return _PyStatus_OK();
  ------------------
  |  |   24|     10|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1755|     10|    }
 1756|       |
 1757|      0|    return config_set_bytes_string(config, dest, var, decode_err_msg);
 1758|     10|#endif
 1759|     10|}
initconfig.c:config_init_warnoptions:
 3350|      2|{
 3351|      2|    PyStatus status;
 3352|      2|    PyWideStringList options = _PyWideStringList_INIT;
  ------------------
  |  |   53|      2|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
 3353|       |
 3354|       |    /* Priority of warnings options, lowest to highest:
 3355|       |     *
 3356|       |     * - any implicit filters added by _warnings.c/warnings.py
 3357|       |     * - PyConfig.dev_mode: "default" filter
 3358|       |     * - PYTHONWARNINGS environment variable
 3359|       |     * - '-W' command line options
 3360|       |     * - PyConfig.bytes_warning ('-b' and '-bb' command line options):
 3361|       |     *   "default::BytesWarning" or "error::BytesWarning" filter
 3362|       |     * - early PySys_AddWarnOption() calls
 3363|       |     * - PyConfig.warnoptions
 3364|       |     *
 3365|       |     * PyConfig.warnoptions is copied to sys.warnoptions. Since the warnings
 3366|       |     * module works on the basis of "the most recently added filter will be
 3367|       |     * checked first", we add the lowest precedence entries first so that later
 3368|       |     * entries override them.
 3369|       |     */
 3370|       |
 3371|      2|    if (config->dev_mode) {
  ------------------
  |  Branch (3371:9): [True: 0, False: 2]
  ------------------
 3372|      0|        status = warnoptions_append(config, &options, L"default");
 3373|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3374|      0|            goto error;
 3375|      0|        }
 3376|      0|    }
 3377|       |
 3378|      2|    status = warnoptions_extend(config, &options, env_warnoptions);
 3379|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3380|      0|        goto error;
 3381|      0|    }
 3382|       |
 3383|      2|    status = warnoptions_extend(config, &options, cmdline_warnoptions);
 3384|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3385|      0|        goto error;
 3386|      0|    }
 3387|       |
 3388|       |    /* If the bytes_warning_flag isn't set, bytesobject.c and bytearrayobject.c
 3389|       |     * don't even try to emit a warning, so we skip setting the filter in that
 3390|       |     * case.
 3391|       |     */
 3392|      2|    if (config->bytes_warning) {
  ------------------
  |  Branch (3392:9): [True: 0, False: 2]
  ------------------
 3393|      0|        const wchar_t *filter;
 3394|      0|        if (config->bytes_warning> 1) {
  ------------------
  |  Branch (3394:13): [True: 0, False: 0]
  ------------------
 3395|      0|            filter = L"error::BytesWarning";
 3396|      0|        }
 3397|      0|        else {
 3398|      0|            filter = L"default::BytesWarning";
 3399|      0|        }
 3400|      0|        status = warnoptions_append(config, &options, filter);
 3401|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3402|      0|            goto error;
 3403|      0|        }
 3404|      0|    }
 3405|       |
 3406|      2|    status = warnoptions_extend(config, &options, sys_warnoptions);
 3407|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3408|      0|        goto error;
 3409|      0|    }
 3410|       |
 3411|       |    /* Always add all PyConfig.warnoptions options */
 3412|      2|    status = _PyWideStringList_Extend(&options, &config->warnoptions);
 3413|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3414|      0|        goto error;
 3415|      0|    }
 3416|       |
 3417|      2|    _PyWideStringList_Clear(&config->warnoptions);
 3418|      2|    config->warnoptions = options;
 3419|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3420|       |
 3421|      0|error:
 3422|      0|    _PyWideStringList_Clear(&options);
 3423|      0|    return status;
 3424|      2|}
initconfig.c:warnoptions_extend:
 3331|      6|{
 3332|      6|    const Py_ssize_t len = options2->length;
 3333|      6|    wchar_t *const *items = options2->items;
 3334|       |
 3335|      6|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (3335:28): [True: 0, False: 6]
  ------------------
 3336|      0|        PyStatus status = warnoptions_append(config, options, items[i]);
 3337|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3338|      0|            return status;
 3339|      0|        }
 3340|      0|    }
 3341|      6|    return _PyStatus_OK();
  ------------------
  |  |   24|      6|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3342|      6|}
initconfig.c:config_read:
 2769|      2|{
 2770|      2|    PyStatus status;
 2771|      2|    const PyPreConfig *preconfig = &_PyRuntime.preconfig;
 2772|       |
 2773|      2|    if (config->use_environment) {
  ------------------
  |  Branch (2773:9): [True: 2, False: 0]
  ------------------
 2774|      2|        status = config_read_env_vars(config);
 2775|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2776|      0|            return status;
 2777|      0|        }
 2778|      2|    }
 2779|       |
 2780|       |    /* -X options */
 2781|      2|    if (config_get_xoption(config, L"showrefcount")) {
  ------------------
  |  Branch (2781:9): [True: 0, False: 2]
  ------------------
 2782|      0|        config->show_ref_count = 1;
 2783|      0|    }
 2784|       |
 2785|      2|    const wchar_t *x_gil = config_get_xoption_value(config, L"gil");
 2786|      2|    if (x_gil != NULL) {
  ------------------
  |  Branch (2786:9): [True: 0, False: 2]
  ------------------
 2787|      0|        size_t len = wcslen(x_gil);
 2788|      0|        status = config_read_gil(config, len, x_gil[0]);
 2789|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2790|      0|            return status;
 2791|      0|        }
 2792|      0|    }
 2793|       |
 2794|       |#ifdef Py_STATS
 2795|       |    if (config_get_xoption(config, L"pystats")) {
 2796|       |        config->_pystats = 1;
 2797|       |    }
 2798|       |    else if (config_get_env(config, "PYTHONSTATS")) {
 2799|       |        config->_pystats = 1;
 2800|       |    }
 2801|       |    if (config->_pystats < 0) {
 2802|       |        config->_pystats = 0;
 2803|       |    }
 2804|       |#endif
 2805|       |
 2806|      2|    status = config_read_complex_options(config);
 2807|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2808|      0|        return status;
 2809|      0|    }
 2810|       |
 2811|      2|    if (config->_install_importlib) {
  ------------------
  |  Branch (2811:9): [True: 2, False: 0]
  ------------------
 2812|      2|        status = config_init_import(config, compute_path_config);
 2813|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2814|      0|            return status;
 2815|      0|        }
 2816|      2|    }
 2817|       |
 2818|       |    /* default values */
 2819|      2|    if (config->dev_mode) {
  ------------------
  |  Branch (2819:9): [True: 0, False: 2]
  ------------------
 2820|      0|        if (config->faulthandler < 0) {
  ------------------
  |  Branch (2820:13): [True: 0, False: 0]
  ------------------
 2821|      0|            config->faulthandler = 1;
 2822|      0|        }
 2823|      0|    }
 2824|      2|    if (config->faulthandler < 0) {
  ------------------
  |  Branch (2824:9): [True: 2, False: 0]
  ------------------
 2825|      2|        config->faulthandler = 0;
 2826|      2|    }
 2827|      2|    if (config->tracemalloc < 0) {
  ------------------
  |  Branch (2827:9): [True: 2, False: 0]
  ------------------
 2828|      2|        config->tracemalloc = 0;
 2829|      2|    }
 2830|      2|    if (config->lazy_imports < 0) {
  ------------------
  |  Branch (2830:9): [True: 2, False: 0]
  ------------------
 2831|      2|        config->lazy_imports = -1;  // Default is auto/unset
 2832|      2|    }
 2833|      2|    if (config->perf_profiling < 0) {
  ------------------
  |  Branch (2833:9): [True: 2, False: 0]
  ------------------
 2834|      2|        config->perf_profiling = 0;
 2835|      2|    }
 2836|      2|    if (config->remote_debug < 0) {
  ------------------
  |  Branch (2836:9): [True: 0, False: 2]
  ------------------
 2837|      0|        config->remote_debug = -1;
 2838|      0|    }
 2839|      2|    if (config->use_hash_seed < 0) {
  ------------------
  |  Branch (2839:9): [True: 0, False: 2]
  ------------------
 2840|      0|        config->use_hash_seed = 0;
 2841|      0|        config->hash_seed = 0;
 2842|      0|    }
 2843|       |
 2844|      2|    if (config->filesystem_encoding == NULL || config->filesystem_errors == NULL) {
  ------------------
  |  Branch (2844:9): [True: 2, False: 0]
  |  Branch (2844:48): [True: 0, False: 0]
  ------------------
 2845|      2|        status = config_init_fs_encoding(config, preconfig);
 2846|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2847|      0|            return status;
 2848|      0|        }
 2849|      2|    }
 2850|       |
 2851|      2|    status = config_init_stdio_encoding(config, preconfig);
 2852|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2853|      0|        return status;
 2854|      0|    }
 2855|       |
 2856|      2|    if (config->argv.length < 1) {
  ------------------
  |  Branch (2856:9): [True: 0, False: 2]
  ------------------
 2857|       |        /* Ensure at least one (empty) argument is seen */
 2858|      0|        status = PyWideStringList_Append(&config->argv, L"");
 2859|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2860|      0|            return status;
 2861|      0|        }
 2862|      0|    }
 2863|       |
 2864|      2|    if (config->check_hash_pycs_mode == NULL) {
  ------------------
  |  Branch (2864:9): [True: 2, False: 0]
  ------------------
 2865|      2|        status = PyConfig_SetString(config, &config->check_hash_pycs_mode,
 2866|      2|                                    L"default");
 2867|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2868|      0|            return status;
 2869|      0|        }
 2870|      2|    }
 2871|       |
 2872|      2|    if (config->configure_c_stdio < 0) {
  ------------------
  |  Branch (2872:9): [True: 0, False: 2]
  ------------------
 2873|      0|        config->configure_c_stdio = 1;
 2874|      0|    }
 2875|       |
 2876|       |    // Only parse arguments once.
 2877|      2|    if (config->parse_argv == 1) {
  ------------------
  |  Branch (2877:9): [True: 2, False: 0]
  ------------------
 2878|      2|        config->parse_argv = 2;
 2879|      2|    }
 2880|       |
 2881|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2882|      2|}
initconfig.c:config_read_env_vars:
 1877|      2|{
 1878|      2|    PyStatus status;
 1879|      2|    int use_env = config->use_environment;
 1880|       |
 1881|       |    /* Get environment variables */
 1882|      2|    _Py_get_env_flag(use_env, &config->parser_debug, "PYTHONDEBUG");
 1883|      2|    _Py_get_env_flag(use_env, &config->verbose, "PYTHONVERBOSE");
 1884|      2|    _Py_get_env_flag(use_env, &config->optimization_level, "PYTHONOPTIMIZE");
 1885|      2|    if (!config->inspect && _Py_GetEnv(use_env, "PYTHONINSPECT")) {
  ------------------
  |  Branch (1885:9): [True: 2, False: 0]
  |  Branch (1885:29): [True: 0, False: 2]
  ------------------
 1886|      0|        config->inspect = 1;
 1887|      0|    }
 1888|       |
 1889|      2|    int dont_write_bytecode = 0;
 1890|      2|    _Py_get_env_flag(use_env, &dont_write_bytecode, "PYTHONDONTWRITEBYTECODE");
 1891|      2|    if (dont_write_bytecode) {
  ------------------
  |  Branch (1891:9): [True: 0, False: 2]
  ------------------
 1892|      0|        config->write_bytecode = 0;
 1893|      0|    }
 1894|       |
 1895|      2|    int no_user_site_directory = 0;
 1896|      2|    _Py_get_env_flag(use_env, &no_user_site_directory, "PYTHONNOUSERSITE");
 1897|      2|    if (no_user_site_directory) {
  ------------------
  |  Branch (1897:9): [True: 0, False: 2]
  ------------------
 1898|      0|        config->user_site_directory = 0;
 1899|      0|    }
 1900|       |
 1901|      2|    int unbuffered_stdio = 0;
 1902|      2|    _Py_get_env_flag(use_env, &unbuffered_stdio, "PYTHONUNBUFFERED");
 1903|      2|    if (unbuffered_stdio) {
  ------------------
  |  Branch (1903:9): [True: 0, False: 2]
  ------------------
 1904|      0|        config->buffered_stdio = 0;
 1905|      0|    }
 1906|       |
 1907|       |#ifdef MS_WINDOWS
 1908|       |    _Py_get_env_flag(use_env, &config->legacy_windows_stdio,
 1909|       |                     "PYTHONLEGACYWINDOWSSTDIO");
 1910|       |#endif
 1911|       |
 1912|      2|    if (config_get_env(config, "PYTHONDUMPREFS")) {
  ------------------
  |  Branch (1912:9): [True: 0, False: 2]
  ------------------
 1913|      0|        config->dump_refs = 1;
 1914|      0|    }
 1915|      2|    if (config_get_env(config, "PYTHONMALLOCSTATS")) {
  ------------------
  |  Branch (1915:9): [True: 0, False: 2]
  ------------------
 1916|      0|        config->malloc_stats = 1;
 1917|      0|    }
 1918|      2|    {
 1919|      2|        const char *env = _Py_GetEnv(use_env, "PYTHON_PYMALLOC_HUGEPAGES");
 1920|      2|        if (env) {
  ------------------
  |  Branch (1920:13): [True: 0, False: 2]
  ------------------
 1921|      0|            int value;
 1922|      0|            if (_Py_str_to_int(env, &value) < 0 || value < 0) {
  ------------------
  |  Branch (1922:17): [True: 0, False: 0]
  |  Branch (1922:52): [True: 0, False: 0]
  ------------------
 1923|       |                /* PYTHON_PYMALLOC_HUGEPAGES=text or negative
 1924|       |                   behaves as PYTHON_PYMALLOC_HUGEPAGES=1 */
 1925|      0|                value = 1;
 1926|      0|            }
 1927|      0|            config->pymalloc_hugepages = (value > 0);
 1928|      0|        }
 1929|      2|    }
 1930|       |
 1931|      2|    if (config->dump_refs_file == NULL) {
  ------------------
  |  Branch (1931:9): [True: 2, False: 0]
  ------------------
 1932|      2|        status = CONFIG_GET_ENV_DUP(config, &config->dump_refs_file,
  ------------------
  |  | 1763|      2|    config_get_env_dup(CONFIG, DEST, WNAME, NAME, "cannot decode " NAME)
  ------------------
 1933|      2|                                    L"PYTHONDUMPREFSFILE", "PYTHONDUMPREFSFILE");
 1934|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1935|      0|            return status;
 1936|      0|        }
 1937|      2|    }
 1938|       |
 1939|      2|    if (config->pythonpath_env == NULL) {
  ------------------
  |  Branch (1939:9): [True: 2, False: 0]
  ------------------
 1940|      2|        status = CONFIG_GET_ENV_DUP(config, &config->pythonpath_env,
  ------------------
  |  | 1763|      2|    config_get_env_dup(CONFIG, DEST, WNAME, NAME, "cannot decode " NAME)
  ------------------
 1941|      2|                                    L"PYTHONPATH", "PYTHONPATH");
 1942|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1943|      0|            return status;
 1944|      0|        }
 1945|      2|    }
 1946|       |
 1947|      2|    if(config->platlibdir == NULL) {
  ------------------
  |  Branch (1947:8): [True: 2, False: 0]
  ------------------
 1948|      2|        status = CONFIG_GET_ENV_DUP(config, &config->platlibdir,
  ------------------
  |  | 1763|      2|    config_get_env_dup(CONFIG, DEST, WNAME, NAME, "cannot decode " NAME)
  ------------------
 1949|      2|                                    L"PYTHONPLATLIBDIR", "PYTHONPLATLIBDIR");
 1950|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1951|      0|            return status;
 1952|      0|        }
 1953|      2|    }
 1954|       |
 1955|      2|    if (config->use_hash_seed < 0) {
  ------------------
  |  Branch (1955:9): [True: 2, False: 0]
  ------------------
 1956|      2|        status = config_init_hash_seed(config);
 1957|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1958|      0|            return status;
 1959|      0|        }
 1960|      2|    }
 1961|       |
 1962|      2|    if (config_get_env(config, "PYTHONSAFEPATH")) {
  ------------------
  |  Branch (1962:9): [True: 0, False: 2]
  ------------------
 1963|      0|        config->safe_path = 1;
 1964|      0|    }
 1965|       |
 1966|      2|    const char *gil = config_get_env(config, "PYTHON_GIL");
 1967|      2|    if (gil != NULL) {
  ------------------
  |  Branch (1967:9): [True: 0, False: 2]
  ------------------
 1968|      0|        size_t len = strlen(gil);
 1969|      0|        status = config_read_gil(config, len, gil[0]);
 1970|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1971|      0|            return status;
 1972|      0|        }
 1973|      0|    }
 1974|       |
 1975|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1976|      2|}
initconfig.c:config_init_hash_seed:
 1803|      2|{
 1804|      2|    static_assert(sizeof(_Py_HashSecret_t) == sizeof(_Py_HashSecret.uc),
 1805|      2|                  "_Py_HashSecret_t has wrong size");
 1806|       |
 1807|      2|    const char *seed_text = config_get_env(config, "PYTHONHASHSEED");
 1808|       |
 1809|       |    /* Convert a text seed to a numeric one */
 1810|      2|    if (seed_text && strcmp(seed_text, "random") != 0) {
  ------------------
  |  Branch (1810:9): [True: 0, False: 2]
  |  Branch (1810:22): [True: 0, False: 0]
  ------------------
 1811|      0|        const char *endptr = seed_text;
 1812|      0|        unsigned long seed;
 1813|      0|        errno = 0;
 1814|      0|        seed = strtoul(seed_text, (char **)&endptr, 10);
 1815|      0|        if (*endptr != '\0'
  ------------------
  |  Branch (1815:13): [True: 0, False: 0]
  ------------------
 1816|      0|            || seed > MAX_HASH_SEED
  ------------------
  |  |  981|      0|#define MAX_HASH_SEED 4294967295UL
  ------------------
  |  Branch (1816:16): [True: 0, False: 0]
  ------------------
 1817|      0|            || (errno == ERANGE && seed == ULONG_MAX))
  ------------------
  |  Branch (1817:17): [True: 0, False: 0]
  |  Branch (1817:36): [True: 0, False: 0]
  ------------------
 1818|      0|        {
 1819|      0|            return _PyStatus_ERR("PYTHONHASHSEED must be \"random\" "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1820|      0|                                "or an integer in range [0; 4294967295]");
 1821|      0|        }
 1822|       |        /* Use a specific hash */
 1823|      0|        config->use_hash_seed = 1;
 1824|      0|        config->hash_seed = seed;
 1825|      0|    }
 1826|      2|    else {
 1827|       |        /* Use a random hash */
 1828|      2|        config->use_hash_seed = 0;
 1829|      2|        config->hash_seed = 0;
 1830|      2|    }
 1831|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1832|      2|}
initconfig.c:config_read_complex_options:
 2402|      2|{
 2403|       |    /* More complex options configured by env var and -X option */
 2404|      2|    if (config->faulthandler < 0) {
  ------------------
  |  Branch (2404:9): [True: 2, False: 0]
  ------------------
 2405|      2|        if (config_get_env(config, "PYTHONFAULTHANDLER")
  ------------------
  |  Branch (2405:13): [True: 0, False: 2]
  ------------------
 2406|      2|           || config_get_xoption(config, L"faulthandler")) {
  ------------------
  |  Branch (2406:15): [True: 0, False: 2]
  ------------------
 2407|      0|            config->faulthandler = 1;
 2408|      0|        }
 2409|      2|    }
 2410|      2|    if (config_get_env(config, "PYTHONNODEBUGRANGES")
  ------------------
  |  Branch (2410:9): [True: 0, False: 2]
  ------------------
 2411|      2|       || config_get_xoption(config, L"no_debug_ranges")) {
  ------------------
  |  Branch (2411:11): [True: 0, False: 2]
  ------------------
 2412|      0|        config->code_debug_ranges = 0;
 2413|      0|    }
 2414|       |
 2415|      2|    PyStatus status;
 2416|      2|    if (config->import_time < 0) {
  ------------------
  |  Branch (2416:9): [True: 2, False: 0]
  ------------------
 2417|      2|        status = config_init_import_time(config);
 2418|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2419|      0|            return status;
 2420|      0|        }
 2421|      2|    }
 2422|       |
 2423|      2|    if (config->lazy_imports < 0) {
  ------------------
  |  Branch (2423:9): [True: 2, False: 0]
  ------------------
 2424|      2|        status = config_init_lazy_imports(config);
 2425|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2426|      0|            return status;
 2427|      0|        }
 2428|      2|    }
 2429|       |
 2430|      2|    if (config->tracemalloc < 0) {
  ------------------
  |  Branch (2430:9): [True: 2, False: 0]
  ------------------
 2431|      2|        status = config_init_tracemalloc(config);
 2432|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2433|      0|            return status;
 2434|      0|        }
 2435|      2|    }
 2436|       |
 2437|      2|    if (config->perf_profiling < 0) {
  ------------------
  |  Branch (2437:9): [True: 2, False: 0]
  ------------------
 2438|      2|        status = config_init_perf_profiling(config);
 2439|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2440|      0|            return status;
 2441|      0|        }
 2442|      2|    }
 2443|       |
 2444|      2|    if (config->remote_debug < 0) {
  ------------------
  |  Branch (2444:9): [True: 2, False: 0]
  ------------------
 2445|      2|        status = config_init_remote_debug(config);
 2446|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2447|      0|            return status;
 2448|      0|        }
 2449|      2|    }
 2450|       |
 2451|      2|    if (config->int_max_str_digits < 0) {
  ------------------
  |  Branch (2451:9): [True: 0, False: 2]
  ------------------
 2452|      0|        status = config_init_int_max_str_digits(config);
 2453|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2454|      0|            return status;
 2455|      0|        }
 2456|      0|    }
 2457|       |
 2458|      2|    if (config->cpu_count < 0) {
  ------------------
  |  Branch (2458:9): [True: 2, False: 0]
  ------------------
 2459|      2|        status = config_init_cpu_count(config);
 2460|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2461|      0|            return status;
 2462|      0|        }
 2463|      2|    }
 2464|       |
 2465|      2|    if (config->pycache_prefix == NULL) {
  ------------------
  |  Branch (2465:9): [True: 2, False: 0]
  ------------------
 2466|      2|        status = config_init_pycache_prefix(config);
 2467|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2468|      0|            return status;
 2469|      0|        }
 2470|      2|    }
 2471|       |
 2472|       |#ifdef Py_DEBUG
 2473|       |    if (config->run_presite == NULL) {
 2474|       |        status = config_init_run_presite(config);
 2475|       |        if (_PyStatus_EXCEPTION(status)) {
 2476|       |            return status;
 2477|       |        }
 2478|       |    }
 2479|       |#endif
 2480|       |
 2481|      2|    status = config_init_thread_inherit_context(config);
 2482|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2483|      0|        return status;
 2484|      0|    }
 2485|       |
 2486|      2|    status = config_init_context_aware_warnings(config);
 2487|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2488|      0|        return status;
 2489|      0|    }
 2490|       |
 2491|      2|    status = config_init_tlbc(config);
 2492|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2493|      0|        return status;
 2494|      0|    }
 2495|       |
 2496|      2|    status = config_init_pathconfig_warnings(config);
 2497|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2498|      0|        return status;
 2499|      0|    }
 2500|       |
 2501|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2502|      2|}
initconfig.c:config_init_import_time:
 2306|      2|{
 2307|      2|    int importtime = 0;
 2308|       |
 2309|      2|    const char *env = config_get_env(config, "PYTHONPROFILEIMPORTTIME");
 2310|      2|    if (env) {
  ------------------
  |  Branch (2310:9): [True: 0, False: 2]
  ------------------
 2311|      0|        if (_Py_str_to_int(env, &importtime) != 0) {
  ------------------
  |  Branch (2311:13): [True: 0, False: 0]
  ------------------
 2312|      0|            importtime = 1;
 2313|      0|        }
 2314|      0|        if (importtime < 0 || importtime > 2) {
  ------------------
  |  Branch (2314:13): [True: 0, False: 0]
  |  Branch (2314:31): [True: 0, False: 0]
  ------------------
 2315|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2316|      0|                "PYTHONPROFILEIMPORTTIME: numeric values other than 1 and 2 "
 2317|      0|                "are reserved for future use.");
 2318|      0|        }
 2319|      0|    }
 2320|       |
 2321|      2|    const wchar_t *x_value = config_get_xoption_value(config, L"importtime");
 2322|      2|    if (x_value) {
  ------------------
  |  Branch (2322:9): [True: 0, False: 2]
  ------------------
 2323|      0|        if (*x_value == 0 || config_wstr_to_int(x_value, &importtime) != 0) {
  ------------------
  |  Branch (2323:13): [True: 0, False: 0]
  |  Branch (2323:30): [True: 0, False: 0]
  ------------------
 2324|      0|            importtime = 1;
 2325|      0|        }
 2326|      0|        if (importtime < 0 || importtime > 2) {
  ------------------
  |  Branch (2326:13): [True: 0, False: 0]
  |  Branch (2326:31): [True: 0, False: 0]
  ------------------
 2327|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2328|      0|                "-X importtime: values other than 1 and 2 "
 2329|      0|                "are reserved for future use.");
 2330|      0|        }
 2331|      0|    }
 2332|       |
 2333|      2|    config->import_time = importtime;
 2334|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2335|      2|}
initconfig.c:config_init_lazy_imports:
 2339|      2|{
 2340|      2|    int lazy_imports = -1;
 2341|       |
 2342|      2|    const char *env = config_get_env(config, "PYTHON_LAZY_IMPORTS");
 2343|      2|    if (env) {
  ------------------
  |  Branch (2343:9): [True: 0, False: 2]
  ------------------
 2344|      0|        if (strcmp(env, "all") == 0) {
  ------------------
  |  Branch (2344:13): [True: 0, False: 0]
  ------------------
 2345|      0|            lazy_imports = 1;
 2346|      0|        }
 2347|      0|        else if (strcmp(env, "normal") == 0) {
  ------------------
  |  Branch (2347:18): [True: 0, False: 0]
  ------------------
 2348|      0|            lazy_imports = -1;
 2349|      0|        }
 2350|      0|        else {
 2351|      0|            return _PyStatus_ERR("PYTHON_LAZY_IMPORTS: invalid value; "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2352|      0|                                 "expected 'all' or 'normal'");
 2353|      0|        }
 2354|      0|        config->lazy_imports = lazy_imports;
 2355|      0|    }
 2356|       |
 2357|      2|    const wchar_t *x_value = config_get_xoption_value(config, L"lazy_imports");
 2358|      2|    if (x_value) {
  ------------------
  |  Branch (2358:9): [True: 0, False: 2]
  ------------------
 2359|      0|        if (wcscmp(x_value, L"all") == 0) {
  ------------------
  |  Branch (2359:13): [True: 0, False: 0]
  ------------------
 2360|      0|            lazy_imports = 1;
 2361|      0|        }
 2362|      0|        else if (wcscmp(x_value, L"normal") == 0) {
  ------------------
  |  Branch (2362:18): [True: 0, False: 0]
  ------------------
 2363|      0|            lazy_imports = -1;
 2364|      0|        }
 2365|      0|        else {
 2366|      0|            return _PyStatus_ERR("-X lazy_imports: invalid value; "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2367|      0|                                 "expected 'all' or 'normal'");
 2368|      0|        }
 2369|      0|        config->lazy_imports = lazy_imports;
 2370|      0|    }
 2371|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2372|      2|}
initconfig.c:config_init_tracemalloc:
 2158|      2|{
 2159|      2|    int nframe;
 2160|      2|    int valid;
 2161|       |
 2162|      2|    const char *env = config_get_env(config, "PYTHONTRACEMALLOC");
 2163|      2|    if (env) {
  ------------------
  |  Branch (2163:9): [True: 0, False: 2]
  ------------------
 2164|      0|        if (!_Py_str_to_int(env, &nframe)) {
  ------------------
  |  Branch (2164:13): [True: 0, False: 0]
  ------------------
 2165|      0|            valid = (nframe >= 0);
 2166|      0|        }
 2167|      0|        else {
 2168|      0|            valid = 0;
 2169|      0|        }
 2170|      0|        if (!valid) {
  ------------------
  |  Branch (2170:13): [True: 0, False: 0]
  ------------------
 2171|      0|            return _PyStatus_ERR("PYTHONTRACEMALLOC: invalid number of frames");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2172|      0|        }
 2173|      0|        config->tracemalloc = nframe;
 2174|      0|    }
 2175|       |
 2176|      2|    const wchar_t *xoption = config_get_xoption(config, L"tracemalloc");
 2177|      2|    if (xoption) {
  ------------------
  |  Branch (2177:9): [True: 0, False: 2]
  ------------------
 2178|      0|        const wchar_t *sep = wcschr(xoption, L'=');
 2179|      0|        if (sep) {
  ------------------
  |  Branch (2179:13): [True: 0, False: 0]
  ------------------
 2180|      0|            if (!config_wstr_to_int(sep + 1, &nframe)) {
  ------------------
  |  Branch (2180:17): [True: 0, False: 0]
  ------------------
 2181|      0|                valid = (nframe >= 0);
 2182|      0|            }
 2183|      0|            else {
 2184|      0|                valid = 0;
 2185|      0|            }
 2186|      0|            if (!valid) {
  ------------------
  |  Branch (2186:17): [True: 0, False: 0]
  ------------------
 2187|      0|                return _PyStatus_ERR("-X tracemalloc=NFRAME: "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2188|      0|                                     "invalid number of frames");
 2189|      0|            }
 2190|      0|        }
 2191|      0|        else {
 2192|       |            /* -X tracemalloc behaves as -X tracemalloc=1 */
 2193|      0|            nframe = 1;
 2194|      0|        }
 2195|      0|        config->tracemalloc = nframe;
 2196|      0|    }
 2197|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2198|      2|}
initconfig.c:config_init_perf_profiling:
 2101|      2|{
 2102|      2|    int active = 0;
 2103|      2|    const char *env = config_get_env(config, "PYTHONPERFSUPPORT");
 2104|      2|    if (env) {
  ------------------
  |  Branch (2104:9): [True: 0, False: 2]
  ------------------
 2105|      0|        if (_Py_str_to_int(env, &active) != 0) {
  ------------------
  |  Branch (2105:13): [True: 0, False: 0]
  ------------------
 2106|      0|            active = 0;
 2107|      0|        }
 2108|      0|        if (active) {
  ------------------
  |  Branch (2108:13): [True: 0, False: 0]
  ------------------
 2109|      0|            config->perf_profiling = 1;
 2110|      0|        }
 2111|      0|    }
 2112|      2|    const wchar_t *xoption = config_get_xoption(config, L"perf");
 2113|      2|    if (xoption) {
  ------------------
  |  Branch (2113:9): [True: 0, False: 2]
  ------------------
 2114|      0|        config->perf_profiling = 1;
 2115|      0|    }
 2116|      2|    env = config_get_env(config, "PYTHON_PERF_JIT_SUPPORT");
 2117|      2|    if (env) {
  ------------------
  |  Branch (2117:9): [True: 0, False: 2]
  ------------------
 2118|      0|        if (_Py_str_to_int(env, &active) != 0) {
  ------------------
  |  Branch (2118:13): [True: 0, False: 0]
  ------------------
 2119|      0|            active = 0;
 2120|      0|        }
 2121|      0|        if (active) {
  ------------------
  |  Branch (2121:13): [True: 0, False: 0]
  ------------------
 2122|      0|            config->perf_profiling = 2;
 2123|      0|        }
 2124|      0|    }
 2125|      2|    xoption = config_get_xoption(config, L"perf_jit");
 2126|      2|    if (xoption) {
  ------------------
  |  Branch (2126:9): [True: 0, False: 2]
  ------------------
 2127|      0|        config->perf_profiling = 2;
 2128|      0|    }
 2129|       |
 2130|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2131|       |
 2132|      2|}
initconfig.c:config_init_remote_debug:
 2136|      2|{
 2137|       |#ifndef Py_REMOTE_DEBUG
 2138|       |    config->remote_debug = 0;
 2139|       |#else
 2140|      2|    int active = 1;
 2141|      2|    const char *env = Py_GETENV("PYTHON_DISABLE_REMOTE_DEBUG");
 2142|      2|    if (env) {
  ------------------
  |  Branch (2142:9): [True: 0, False: 2]
  ------------------
 2143|      0|        active = 0;
 2144|      0|    }
 2145|      2|    const wchar_t *xoption = config_get_xoption(config, L"disable-remote-debug");
 2146|      2|    if (xoption) {
  ------------------
  |  Branch (2146:9): [True: 0, False: 2]
  ------------------
 2147|      0|        active = 0;
 2148|      0|    }
 2149|       |
 2150|      2|    config->remote_debug = active;
 2151|      2|#endif
 2152|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2153|       |
 2154|      2|}
initconfig.c:config_init_cpu_count:
 1980|      2|{
 1981|      2|    const char *env = config_get_env(config, "PYTHON_CPU_COUNT");
 1982|      2|    if (env) {
  ------------------
  |  Branch (1982:9): [True: 0, False: 2]
  ------------------
 1983|      0|        int cpu_count = -1;
 1984|      0|        if (strcmp(env, "default") == 0) {
  ------------------
  |  Branch (1984:13): [True: 0, False: 0]
  ------------------
 1985|      0|            cpu_count = -1;
 1986|      0|        }
 1987|      0|        else if (_Py_str_to_int(env, &cpu_count) < 0 || cpu_count < 1) {
  ------------------
  |  Branch (1987:18): [True: 0, False: 0]
  |  Branch (1987:57): [True: 0, False: 0]
  ------------------
 1988|      0|            goto error;
 1989|      0|        }
 1990|      0|        config->cpu_count = cpu_count;
 1991|      0|    }
 1992|       |
 1993|      2|    const wchar_t *xoption = config_get_xoption(config, L"cpu_count");
 1994|      2|    if (xoption) {
  ------------------
  |  Branch (1994:9): [True: 0, False: 2]
  ------------------
 1995|      0|        int cpu_count = -1;
 1996|      0|        const wchar_t *sep = wcschr(xoption, L'=');
 1997|      0|        if (sep) {
  ------------------
  |  Branch (1997:13): [True: 0, False: 0]
  ------------------
 1998|      0|            if (wcscmp(sep + 1, L"default") == 0) {
  ------------------
  |  Branch (1998:17): [True: 0, False: 0]
  ------------------
 1999|      0|                cpu_count = -1;
 2000|      0|            }
 2001|      0|            else if (config_wstr_to_int(sep + 1, &cpu_count) < 0 || cpu_count < 1) {
  ------------------
  |  Branch (2001:22): [True: 0, False: 0]
  |  Branch (2001:69): [True: 0, False: 0]
  ------------------
 2002|      0|                goto error;
 2003|      0|            }
 2004|      0|        }
 2005|      0|        else {
 2006|      0|            goto error;
 2007|      0|        }
 2008|      0|        config->cpu_count = cpu_count;
 2009|      0|    }
 2010|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2011|       |
 2012|      0|error:
 2013|      0|    return _PyStatus_ERR("-X cpu_count=n option: n is missing or an invalid number, "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2014|      2|                         "n must be greater than 0");
 2015|      2|}
initconfig.c:config_init_pycache_prefix:
 2249|      2|{
 2250|      2|    assert(config->pycache_prefix == NULL);
  ------------------
  |  Branch (2250:5): [True: 2, False: 0]
  ------------------
 2251|       |
 2252|      2|    const wchar_t *xoption = config_get_xoption(config, L"pycache_prefix");
 2253|      2|    if (xoption) {
  ------------------
  |  Branch (2253:9): [True: 0, False: 2]
  ------------------
 2254|      0|        const wchar_t *sep = wcschr(xoption, L'=');
 2255|      0|        if (sep && wcslen(sep) > 1) {
  ------------------
  |  Branch (2255:13): [True: 0, False: 0]
  |  Branch (2255:20): [True: 0, False: 0]
  ------------------
 2256|      0|            config->pycache_prefix = _PyMem_RawWcsdup(sep + 1);
 2257|      0|            if (config->pycache_prefix == NULL) {
  ------------------
  |  Branch (2257:17): [True: 0, False: 0]
  ------------------
 2258|      0|                return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 2259|      0|            }
 2260|      0|        }
 2261|      0|        else {
 2262|       |            // PYTHONPYCACHEPREFIX env var ignored
 2263|       |            // if "-X pycache_prefix=" option is used
 2264|      0|            config->pycache_prefix = NULL;
 2265|      0|        }
 2266|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2267|      0|    }
 2268|       |
 2269|      2|    return CONFIG_GET_ENV_DUP(config, &config->pycache_prefix,
  ------------------
  |  | 1763|      2|    config_get_env_dup(CONFIG, DEST, WNAME, NAME, "cannot decode " NAME)
  ------------------
 2270|      2|                              L"PYTHONPYCACHEPREFIX",
 2271|      2|                              "PYTHONPYCACHEPREFIX");
 2272|      2|}
initconfig.c:config_init_thread_inherit_context:
 2019|      2|{
 2020|      2|    const char *env = config_get_env(config, "PYTHON_THREAD_INHERIT_CONTEXT");
 2021|      2|    if (env) {
  ------------------
  |  Branch (2021:9): [True: 0, False: 2]
  ------------------
 2022|      0|        int enabled;
 2023|      0|        if (_Py_str_to_int(env, &enabled) < 0 || (enabled < 0) || (enabled > 1)) {
  ------------------
  |  Branch (2023:13): [True: 0, False: 0]
  |  Branch (2023:50): [True: 0, False: 0]
  |  Branch (2023:67): [True: 0, False: 0]
  ------------------
 2024|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2025|      0|                "PYTHON_THREAD_INHERIT_CONTEXT=N: N is missing or invalid");
 2026|      0|        }
 2027|      0|        config->thread_inherit_context = enabled;
 2028|      0|    }
 2029|       |
 2030|      2|    const wchar_t *xoption = config_get_xoption(config, L"thread_inherit_context");
 2031|      2|    if (xoption) {
  ------------------
  |  Branch (2031:9): [True: 0, False: 2]
  ------------------
 2032|      0|        int enabled;
 2033|      0|        const wchar_t *sep = wcschr(xoption, L'=');
 2034|      0|        if (!sep || (config_wstr_to_int(sep + 1, &enabled) < 0) || (enabled < 0) || (enabled > 1)) {
  ------------------
  |  Branch (2034:13): [True: 0, False: 0]
  |  Branch (2034:21): [True: 0, False: 0]
  |  Branch (2034:68): [True: 0, False: 0]
  |  Branch (2034:85): [True: 0, False: 0]
  ------------------
 2035|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2036|      0|                "-X thread_inherit_context=n: n is missing or invalid");
 2037|      0|        }
 2038|      0|        config->thread_inherit_context = enabled;
 2039|      0|    }
 2040|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2041|      2|}
initconfig.c:config_init_context_aware_warnings:
 2045|      2|{
 2046|      2|    const char *env = config_get_env(config, "PYTHON_CONTEXT_AWARE_WARNINGS");
 2047|      2|    if (env) {
  ------------------
  |  Branch (2047:9): [True: 0, False: 2]
  ------------------
 2048|      0|        int enabled;
 2049|      0|        if (_Py_str_to_int(env, &enabled) < 0 || (enabled < 0) || (enabled > 1)) {
  ------------------
  |  Branch (2049:13): [True: 0, False: 0]
  |  Branch (2049:50): [True: 0, False: 0]
  |  Branch (2049:67): [True: 0, False: 0]
  ------------------
 2050|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2051|      0|                "PYTHON_CONTEXT_AWARE_WARNINGS=N: N is missing or invalid");
 2052|      0|        }
 2053|      0|        config->context_aware_warnings = enabled;
 2054|      0|    }
 2055|       |
 2056|      2|    const wchar_t *xoption = config_get_xoption(config, L"context_aware_warnings");
 2057|      2|    if (xoption) {
  ------------------
  |  Branch (2057:9): [True: 0, False: 2]
  ------------------
 2058|      0|        int enabled;
 2059|      0|        const wchar_t *sep = wcschr(xoption, L'=');
 2060|      0|        if (!sep || (config_wstr_to_int(sep + 1, &enabled) < 0) || (enabled < 0) || (enabled > 1)) {
  ------------------
  |  Branch (2060:13): [True: 0, False: 0]
  |  Branch (2060:21): [True: 0, False: 0]
  |  Branch (2060:68): [True: 0, False: 0]
  |  Branch (2060:85): [True: 0, False: 0]
  ------------------
 2061|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2062|      0|                "-X context_aware_warnings=n: n is missing or invalid");
 2063|      0|        }
 2064|      0|        config->context_aware_warnings = enabled;
 2065|      0|    }
 2066|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2067|      2|}
initconfig.c:config_init_tlbc:
 2071|      2|{
 2072|       |#ifdef Py_GIL_DISABLED
 2073|       |    const char *env = config_get_env(config, "PYTHON_TLBC");
 2074|       |    if (env) {
 2075|       |        int enabled;
 2076|       |        if (_Py_str_to_int(env, &enabled) < 0 || (enabled < 0) || (enabled > 1)) {
 2077|       |            return _PyStatus_ERR(
 2078|       |                "PYTHON_TLBC=N: N is missing or invalid");
 2079|       |        }
 2080|       |        config->tlbc_enabled = enabled;
 2081|       |    }
 2082|       |
 2083|       |    const wchar_t *xoption = config_get_xoption(config, L"tlbc");
 2084|       |    if (xoption) {
 2085|       |        int enabled;
 2086|       |        const wchar_t *sep = wcschr(xoption, L'=');
 2087|       |        if (!sep || (config_wstr_to_int(sep + 1, &enabled) < 0) || (enabled < 0) || (enabled > 1)) {
 2088|       |            return _PyStatus_ERR(
 2089|       |                "-X tlbc=n: n is missing or invalid");
 2090|       |        }
 2091|       |        config->tlbc_enabled = enabled;
 2092|       |    }
 2093|       |    return _PyStatus_OK();
 2094|       |#else
 2095|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2096|      2|#endif
 2097|      2|}
initconfig.c:config_init_pathconfig_warnings:
 2376|      2|{
 2377|      2|    const char *env = config_get_env(config, "PYTHON_PATHCONFIG_WARNINGS");
 2378|      2|    if (env) {
  ------------------
  |  Branch (2378:9): [True: 0, False: 2]
  ------------------
 2379|      0|        int enabled;
 2380|      0|        if (_Py_str_to_int(env, &enabled) < 0 || (enabled < 0) || (enabled > 1)) {
  ------------------
  |  Branch (2380:13): [True: 0, False: 0]
  |  Branch (2380:50): [True: 0, False: 0]
  |  Branch (2380:67): [True: 0, False: 0]
  ------------------
 2381|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2382|      0|                "PYTHON_PATHCONFIG_WARNINGS=N: N is missing or invalid");
 2383|      0|        }
 2384|      0|        config->pathconfig_warnings = enabled;
 2385|      0|    }
 2386|       |
 2387|      2|    const wchar_t *xoption = config_get_xoption(config, L"pathconfig_warnings");
 2388|      2|    if (xoption) {
  ------------------
  |  Branch (2388:9): [True: 0, False: 2]
  ------------------
 2389|      0|        int enabled;
 2390|      0|        const wchar_t *sep = wcschr(xoption, L'=');
 2391|      0|        if (!sep || (config_wstr_to_int(sep + 1, &enabled) < 0) || (enabled < 0) || (enabled > 1)) {
  ------------------
  |  Branch (2391:13): [True: 0, False: 0]
  |  Branch (2391:21): [True: 0, False: 0]
  |  Branch (2391:68): [True: 0, False: 0]
  |  Branch (2391:85): [True: 0, False: 0]
  ------------------
 2392|      0|            return _PyStatus_ERR(
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2393|      0|                "-X pathconfig_warnings=n: n is missing or invalid");
 2394|      0|        }
 2395|      0|        config->pathconfig_warnings = enabled;
 2396|      0|    }
 2397|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2398|      2|}
initconfig.c:config_init_fs_encoding:
 2682|      2|{
 2683|      2|    PyStatus status;
 2684|       |
 2685|      2|    if (config->filesystem_encoding == NULL) {
  ------------------
  |  Branch (2685:9): [True: 2, False: 0]
  ------------------
 2686|      2|        status = config_get_fs_encoding(config, preconfig,
 2687|      2|                                        &config->filesystem_encoding);
 2688|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2689|      0|            return status;
 2690|      0|        }
 2691|      2|    }
 2692|       |
 2693|      2|    if (config->filesystem_errors == NULL) {
  ------------------
  |  Branch (2693:9): [True: 2, False: 0]
  ------------------
 2694|      2|        const wchar_t *errors;
 2695|       |#ifdef MS_WINDOWS
 2696|       |        if (preconfig->legacy_windows_fs_encoding) {
 2697|       |            errors = L"replace";
 2698|       |        }
 2699|       |        else {
 2700|       |            errors = L"surrogatepass";
 2701|       |        }
 2702|       |#else
 2703|      2|        errors = L"surrogateescape";
 2704|      2|#endif
 2705|      2|        status = PyConfig_SetString(config, &config->filesystem_errors, errors);
 2706|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2707|      0|            return status;
 2708|      0|        }
 2709|      2|    }
 2710|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2711|      2|}
initconfig.c:config_get_fs_encoding:
 2652|      2|{
 2653|       |#ifdef _Py_FORCE_UTF8_FS_ENCODING
 2654|       |    return PyConfig_SetString(config, fs_encoding, L"utf-8");
 2655|       |#elif defined(MS_WINDOWS)
 2656|       |    const wchar_t *encoding;
 2657|       |    if (preconfig->legacy_windows_fs_encoding) {
 2658|       |        // Legacy Windows filesystem encoding: mbcs/replace
 2659|       |        encoding = L"mbcs";
 2660|       |    }
 2661|       |    else {
 2662|       |        // Windows defaults to utf-8/surrogatepass (PEP 529)
 2663|       |        encoding = L"utf-8";
 2664|       |    }
 2665|       |     return PyConfig_SetString(config, fs_encoding, encoding);
 2666|       |#else  // !MS_WINDOWS
 2667|      2|    if (preconfig->utf8_mode) {
  ------------------
  |  Branch (2667:9): [True: 2, False: 0]
  ------------------
 2668|      2|        return PyConfig_SetString(config, fs_encoding, L"utf-8");
 2669|      2|    }
 2670|       |
 2671|      0|    if (_Py_GetForceASCII()) {
  ------------------
  |  Branch (2671:9): [True: 0, False: 0]
  ------------------
 2672|      0|        return PyConfig_SetString(config, fs_encoding, L"ascii");
 2673|      0|    }
 2674|       |
 2675|      0|    return config_get_locale_encoding(config, preconfig, fs_encoding);
 2676|      0|#endif  // !MS_WINDOWS
 2677|      0|}
initconfig.c:config_get_locale_encoding:
 2541|      2|{
 2542|      2|    wchar_t *encoding;
 2543|      2|    if (preconfig->utf8_mode) {
  ------------------
  |  Branch (2543:9): [True: 2, False: 0]
  ------------------
 2544|      2|        encoding = _PyMem_RawWcsdup(L"utf-8");
 2545|      2|    }
 2546|      0|    else {
 2547|      0|        encoding = _Py_GetLocaleEncoding();
 2548|      0|    }
 2549|      2|    if (encoding == NULL) {
  ------------------
  |  Branch (2549:9): [True: 0, False: 2]
  ------------------
 2550|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 2551|      0|    }
 2552|      2|    PyStatus status = PyConfig_SetString(config, locale_encoding, encoding);
 2553|      2|    PyMem_RawFree(encoding);
 2554|      2|    return status;
 2555|      2|}
initconfig.c:config_init_stdio_encoding:
 2561|      2|{
 2562|      2|    PyStatus status;
 2563|       |
 2564|       |    // Exit if encoding and errors are defined
 2565|      2|    if (config->stdio_encoding != NULL && config->stdio_errors != NULL) {
  ------------------
  |  Branch (2565:9): [True: 0, False: 2]
  |  Branch (2565:43): [True: 0, False: 0]
  ------------------
 2566|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2567|      0|    }
 2568|       |
 2569|       |    /* PYTHONIOENCODING environment variable */
 2570|      2|    const char *opt = config_get_env(config, "PYTHONIOENCODING");
 2571|      2|    if (opt) {
  ------------------
  |  Branch (2571:9): [True: 0, False: 2]
  ------------------
 2572|      0|        char *pythonioencoding = _PyMem_RawStrdup(opt);
 2573|      0|        if (pythonioencoding == NULL) {
  ------------------
  |  Branch (2573:13): [True: 0, False: 0]
  ------------------
 2574|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
 2575|      0|        }
 2576|       |
 2577|      0|        char *errors = strchr(pythonioencoding, ':');
 2578|      0|        if (errors) {
  ------------------
  |  Branch (2578:13): [True: 0, False: 0]
  ------------------
 2579|      0|            *errors = '\0';
 2580|      0|            errors++;
 2581|      0|            if (!errors[0]) {
  ------------------
  |  Branch (2581:17): [True: 0, False: 0]
  ------------------
 2582|      0|                errors = NULL;
 2583|      0|            }
 2584|      0|        }
 2585|       |
 2586|       |        /* Does PYTHONIOENCODING contain an encoding? */
 2587|      0|        if (pythonioencoding[0]) {
  ------------------
  |  Branch (2587:13): [True: 0, False: 0]
  ------------------
 2588|      0|            if (config->stdio_encoding == NULL) {
  ------------------
  |  Branch (2588:17): [True: 0, False: 0]
  ------------------
 2589|      0|                status = CONFIG_SET_BYTES_STR(config, &config->stdio_encoding,
  ------------------
  |  | 1311|      0|    config_set_bytes_string(config, config_str, str, "cannot decode " NAME)
  ------------------
 2590|      0|                                              pythonioencoding,
 2591|      0|                                              "PYTHONIOENCODING environment variable");
 2592|      0|                if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2593|      0|                    PyMem_RawFree(pythonioencoding);
 2594|      0|                    return status;
 2595|      0|                }
 2596|      0|            }
 2597|       |
 2598|       |            /* If the encoding is set but not the error handler,
 2599|       |               use "strict" error handler by default.
 2600|       |               PYTHONIOENCODING=latin1 behaves as
 2601|       |               PYTHONIOENCODING=latin1:strict. */
 2602|      0|            if (!errors) {
  ------------------
  |  Branch (2602:17): [True: 0, False: 0]
  ------------------
 2603|      0|                errors = "strict";
 2604|      0|            }
 2605|      0|        }
 2606|       |
 2607|      0|        if (config->stdio_errors == NULL && errors != NULL) {
  ------------------
  |  Branch (2607:13): [True: 0, False: 0]
  |  Branch (2607:45): [True: 0, False: 0]
  ------------------
 2608|      0|            status = CONFIG_SET_BYTES_STR(config, &config->stdio_errors,
  ------------------
  |  | 1311|      0|    config_set_bytes_string(config, config_str, str, "cannot decode " NAME)
  ------------------
 2609|      0|                                          errors,
 2610|      0|                                          "PYTHONIOENCODING environment variable");
 2611|      0|            if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2612|      0|                PyMem_RawFree(pythonioencoding);
 2613|      0|                return status;
 2614|      0|            }
 2615|      0|        }
 2616|       |
 2617|      0|        PyMem_RawFree(pythonioencoding);
 2618|      0|    }
 2619|       |
 2620|       |    /* Choose the default error handler based on the current locale. */
 2621|      2|    if (config->stdio_encoding == NULL
  ------------------
  |  Branch (2621:9): [True: 2, False: 0]
  ------------------
 2622|       |#ifdef MS_WINDOWS
 2623|       |        /* gh-86427: it is determined for each stream: create_stdio() uses
 2624|       |           _Py_device_encoding(), falling back to the locale encoding. */
 2625|       |        && !config->legacy_windows_stdio
 2626|       |#endif
 2627|      2|       ) {
 2628|      2|        status = config_get_locale_encoding(config, preconfig,
 2629|      2|                                            &config->stdio_encoding);
 2630|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2631|      0|            return status;
 2632|      0|        }
 2633|      2|    }
 2634|      2|    if (config->stdio_errors == NULL) {
  ------------------
  |  Branch (2634:9): [True: 2, False: 0]
  ------------------
 2635|      2|        const wchar_t *errors = config_get_stdio_errors(preconfig);
 2636|      2|        assert(errors != NULL);
  ------------------
  |  Branch (2636:9): [True: 2, False: 0]
  ------------------
 2637|       |
 2638|      2|        status = PyConfig_SetString(config, &config->stdio_errors, errors);
 2639|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 2640|      0|            return status;
 2641|      0|        }
 2642|      2|    }
 2643|       |
 2644|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2645|      2|}
initconfig.c:config_get_stdio_errors:
 2507|      2|{
 2508|      2|    if (preconfig->utf8_mode) {
  ------------------
  |  Branch (2508:9): [True: 2, False: 0]
  ------------------
 2509|       |        /* UTF-8 Mode uses UTF-8/surrogateescape */
 2510|      2|        return L"surrogateescape";
 2511|      2|    }
 2512|       |
 2513|      0|#ifndef MS_WINDOWS
 2514|      0|    const char *loc = setlocale(LC_CTYPE, NULL);
 2515|      0|    if (loc != NULL) {
  ------------------
  |  Branch (2515:9): [True: 0, False: 0]
  ------------------
 2516|       |        /* surrogateescape is the default in the legacy C and POSIX locales */
 2517|      0|        if (strcmp(loc, "C") == 0 || strcmp(loc, "POSIX") == 0) {
  ------------------
  |  Branch (2517:13): [True: 0, False: 0]
  |  Branch (2517:38): [True: 0, False: 0]
  ------------------
 2518|      0|            return L"surrogateescape";
 2519|      0|        }
 2520|       |
 2521|      0|#ifdef PY_COERCE_C_LOCALE
 2522|       |        /* surrogateescape is the default in locale coercion target locales */
 2523|      0|        if (_Py_IsLocaleCoercionTarget(loc)) {
  ------------------
  |  Branch (2523:13): [True: 0, False: 0]
  ------------------
 2524|      0|            return L"surrogateescape";
 2525|      0|        }
 2526|      0|#endif
 2527|      0|    }
 2528|       |
 2529|      0|    return L"strict";
 2530|       |#else
 2531|       |    /* On Windows, always use surrogateescape by default */
 2532|       |    return L"surrogateescape";
 2533|       |#endif
 2534|      0|}
initconfig.c:config_check_consistency:
  987|      2|{
  988|       |    /* Check config consistency */
  989|      2|    assert(config->isolated >= 0);
  ------------------
  |  Branch (989:5): [True: 2, False: 0]
  ------------------
  990|      2|    assert(config->use_environment >= 0);
  ------------------
  |  Branch (990:5): [True: 2, False: 0]
  ------------------
  991|      2|    assert(config->dev_mode >= 0);
  ------------------
  |  Branch (991:5): [True: 2, False: 0]
  ------------------
  992|      2|    assert(config->install_signal_handlers >= 0);
  ------------------
  |  Branch (992:5): [True: 2, False: 0]
  ------------------
  993|      2|    assert(config->use_hash_seed >= 0);
  ------------------
  |  Branch (993:5): [True: 2, False: 0]
  ------------------
  994|      2|    assert(config->hash_seed <= MAX_HASH_SEED);
  ------------------
  |  Branch (994:5): [True: 2, False: 0]
  ------------------
  995|      2|    assert(config->faulthandler >= 0);
  ------------------
  |  Branch (995:5): [True: 2, False: 0]
  ------------------
  996|      2|    assert(config->tracemalloc >= 0);
  ------------------
  |  Branch (996:5): [True: 2, False: 0]
  ------------------
  997|      2|    assert(config->import_time >= 0);
  ------------------
  |  Branch (997:5): [True: 2, False: 0]
  ------------------
  998|      2|    assert(config->code_debug_ranges >= 0);
  ------------------
  |  Branch (998:5): [True: 2, False: 0]
  ------------------
  999|      2|    assert(config->show_ref_count >= 0);
  ------------------
  |  Branch (999:5): [True: 2, False: 0]
  ------------------
 1000|      2|    assert(config->dump_refs >= 0);
  ------------------
  |  Branch (1000:5): [True: 2, False: 0]
  ------------------
 1001|      2|    assert(config->malloc_stats >= 0);
  ------------------
  |  Branch (1001:5): [True: 2, False: 0]
  ------------------
 1002|      2|    assert(config->pymalloc_hugepages >= 0);
  ------------------
  |  Branch (1002:5): [True: 2, False: 0]
  ------------------
 1003|      2|    assert(config->site_import >= 0);
  ------------------
  |  Branch (1003:5): [True: 2, False: 0]
  ------------------
 1004|      2|    assert(config->bytes_warning >= 0);
  ------------------
  |  Branch (1004:5): [True: 2, False: 0]
  ------------------
 1005|      2|    assert(config->warn_default_encoding >= 0);
  ------------------
  |  Branch (1005:5): [True: 2, False: 0]
  ------------------
 1006|      2|    assert(config->inspect >= 0);
  ------------------
  |  Branch (1006:5): [True: 2, False: 0]
  ------------------
 1007|      2|    assert(config->interactive >= 0);
  ------------------
  |  Branch (1007:5): [True: 2, False: 0]
  ------------------
 1008|      2|    assert(config->optimization_level >= 0);
  ------------------
  |  Branch (1008:5): [True: 2, False: 0]
  ------------------
 1009|      2|    assert(config->parser_debug >= 0);
  ------------------
  |  Branch (1009:5): [True: 2, False: 0]
  ------------------
 1010|      2|    assert(config->write_bytecode >= 0);
  ------------------
  |  Branch (1010:5): [True: 2, False: 0]
  ------------------
 1011|      2|    assert(config->verbose >= 0);
  ------------------
  |  Branch (1011:5): [True: 2, False: 0]
  ------------------
 1012|      2|    assert(config->quiet >= 0);
  ------------------
  |  Branch (1012:5): [True: 2, False: 0]
  ------------------
 1013|      2|    assert(config->user_site_directory >= 0);
  ------------------
  |  Branch (1013:5): [True: 2, False: 0]
  ------------------
 1014|      2|    assert(config->parse_argv >= 0);
  ------------------
  |  Branch (1014:5): [True: 2, False: 0]
  ------------------
 1015|      2|    assert(config->configure_c_stdio >= 0);
  ------------------
  |  Branch (1015:5): [True: 2, False: 0]
  ------------------
 1016|      2|    assert(config->buffered_stdio >= 0);
  ------------------
  |  Branch (1016:5): [True: 2, False: 0]
  ------------------
 1017|      2|    assert(_PyWideStringList_CheckConsistency(&config->orig_argv));
  ------------------
  |  Branch (1017:5): [True: 2, False: 0]
  ------------------
 1018|      2|    assert(_PyWideStringList_CheckConsistency(&config->argv));
  ------------------
  |  Branch (1018:5): [True: 2, False: 0]
  ------------------
 1019|       |    /* sys.argv must be non-empty: empty argv is replaced with [''] */
 1020|      2|    assert(config->argv.length >= 1);
  ------------------
  |  Branch (1020:5): [True: 2, False: 0]
  ------------------
 1021|      2|    assert(_PyWideStringList_CheckConsistency(&config->xoptions));
  ------------------
  |  Branch (1021:5): [True: 2, False: 0]
  ------------------
 1022|      2|    assert(_PyWideStringList_CheckConsistency(&config->warnoptions));
  ------------------
  |  Branch (1022:5): [True: 2, False: 0]
  ------------------
 1023|      2|    assert(_PyWideStringList_CheckConsistency(&config->module_search_paths));
  ------------------
  |  Branch (1023:5): [True: 2, False: 0]
  ------------------
 1024|      2|    assert(config->module_search_paths_set >= 0);
  ------------------
  |  Branch (1024:5): [True: 2, False: 0]
  ------------------
 1025|      2|    assert(config->filesystem_encoding != NULL);
  ------------------
  |  Branch (1025:5): [True: 2, False: 0]
  ------------------
 1026|      2|    assert(config->filesystem_errors != NULL);
  ------------------
  |  Branch (1026:5): [True: 2, False: 0]
  ------------------
 1027|       |#ifdef MS_WINDOWS
 1028|       |    /* stdio_encoding can be NULL in the legacy Windows stdio mode. */
 1029|       |    assert(config->stdio_encoding != NULL || config->legacy_windows_stdio);
 1030|       |    assert(config->legacy_windows_stdio >= 0);
 1031|       |#else
 1032|      2|    assert(config->stdio_encoding != NULL);
  ------------------
  |  Branch (1032:5): [True: 2, False: 0]
  ------------------
 1033|      2|#endif
 1034|      2|    assert(config->stdio_errors != NULL);
  ------------------
  |  Branch (1034:5): [True: 2, False: 0]
  ------------------
 1035|       |    /* -c and -m options are exclusive */
 1036|      2|    assert(!(config->run_command != NULL && config->run_module != NULL));
  ------------------
  |  Branch (1036:5): [True: 0, False: 2]
  |  Branch (1036:5): [True: 0, False: 0]
  ------------------
 1037|      2|    assert(config->check_hash_pycs_mode != NULL);
  ------------------
  |  Branch (1037:5): [True: 2, False: 0]
  ------------------
 1038|      2|    assert(config->_install_importlib >= 0);
  ------------------
  |  Branch (1038:5): [True: 2, False: 0]
  ------------------
 1039|      2|    assert(config->pathconfig_warnings >= 0);
  ------------------
  |  Branch (1039:5): [True: 2, False: 0]
  ------------------
 1040|      2|    assert(config->_is_python_build >= 0);
  ------------------
  |  Branch (1040:5): [True: 2, False: 0]
  ------------------
 1041|      2|    assert(config->safe_path >= 0);
  ------------------
  |  Branch (1041:5): [True: 2, False: 0]
  ------------------
 1042|      2|    assert(config->int_max_str_digits >= 0);
  ------------------
  |  Branch (1042:5): [True: 2, False: 0]
  ------------------
 1043|       |    // cpu_count can be -1 if the user doesn't override it.
 1044|      2|    assert(config->cpu_count != 0);
  ------------------
  |  Branch (1044:5): [True: 2, False: 0]
  ------------------
 1045|       |    // lazy_imports can be -1 (default) or 1 (on). 0 is rejected later
 1046|       |    // for embedders with an error message.
 1047|      2|    assert(config->lazy_imports >= -1 && config->lazy_imports <= 1);
  ------------------
  |  Branch (1047:5): [True: 2, False: 0]
  |  Branch (1047:5): [True: 2, False: 0]
  ------------------
 1048|       |    // config->use_frozen_modules is initialized later
 1049|       |    // by _PyConfig_InitImportConfig().
 1050|      2|    assert(config->thread_inherit_context >= 0);
  ------------------
  |  Branch (1050:5): [True: 2, False: 0]
  ------------------
 1051|      2|    assert(config->context_aware_warnings >= 0);
  ------------------
  |  Branch (1051:5): [True: 2, False: 0]
  ------------------
 1052|       |#ifdef __APPLE__
 1053|       |    assert(config->use_system_logger >= 0);
 1054|       |#endif
 1055|       |#ifdef Py_STATS
 1056|       |    assert(config->_pystats >= 0);
 1057|       |#endif
 1058|      2|    return 1;
 1059|      2|}
initconfig.c:config_get:
 4634|    144|{
 4635|    144|    if (use_sys) {
  ------------------
  |  Branch (4635:9): [True: 0, False: 144]
  ------------------
 4636|      0|        if (spec->sys.attr != NULL) {
  ------------------
  |  Branch (4636:13): [True: 0, False: 0]
  ------------------
 4637|      0|            return PySys_GetAttrString(spec->sys.attr);
 4638|      0|        }
 4639|       |
 4640|      0|        if (strcmp(spec->name, "write_bytecode") == 0) {
  ------------------
  |  Branch (4640:13): [True: 0, False: 0]
  ------------------
 4641|      0|            int value;
 4642|      0|            if (config_get_sys_write_bytecode(config, &value) < 0) {
  ------------------
  |  Branch (4642:17): [True: 0, False: 0]
  ------------------
 4643|      0|                return NULL;
 4644|      0|            }
 4645|      0|            return PyBool_FromLong(value);
 4646|      0|        }
 4647|       |
 4648|      0|        if (strcmp(spec->name, "int_max_str_digits") == 0) {
  ------------------
  |  Branch (4648:13): [True: 0, False: 0]
  ------------------
 4649|      0|            PyInterpreterState *interp = _PyInterpreterState_GET();
 4650|      0|            int maxdigits = _Py_atomic_load_int(&interp->long_state.max_str_digits);
 4651|      0|            return PyLong_FromLong(maxdigits);
 4652|      0|        }
 4653|      0|    }
 4654|       |
 4655|    144|    void *member = config_get_spec_member(config, spec);
 4656|    144|    switch (spec->type) {
 4657|     10|    case PyConfig_MEMBER_INT:
  ------------------
  |  Branch (4657:5): [True: 10, False: 134]
  ------------------
 4658|     26|    case PyConfig_MEMBER_UINT:
  ------------------
  |  Branch (4658:5): [True: 16, False: 128]
  ------------------
 4659|     26|    {
 4660|     26|        int value = *(int *)member;
 4661|     26|        return PyLong_FromLong(value);
 4662|     10|    }
 4663|       |
 4664|     62|    case PyConfig_MEMBER_BOOL:
  ------------------
  |  Branch (4664:5): [True: 62, False: 82]
  ------------------
 4665|     62|    {
 4666|     62|        int value = *(int *)member;
 4667|     62|        return PyBool_FromLong(value != 0);
 4668|     10|    }
 4669|       |
 4670|      2|    case PyConfig_MEMBER_ULONG:
  ------------------
  |  Branch (4670:5): [True: 2, False: 142]
  ------------------
 4671|      2|    {
 4672|      2|        unsigned long value = *(unsigned long *)member;
 4673|      2|        return PyLong_FromUnsignedLong(value);
 4674|     10|    }
 4675|       |
 4676|     12|    case PyConfig_MEMBER_WSTR:
  ------------------
  |  Branch (4676:5): [True: 12, False: 132]
  ------------------
 4677|     44|    case PyConfig_MEMBER_WSTR_OPT:
  ------------------
  |  Branch (4677:5): [True: 32, False: 112]
  ------------------
 4678|     44|    {
 4679|     44|        wchar_t *wstr = *(wchar_t **)member;
 4680|     44|        if (wstr != NULL) {
  ------------------
  |  Branch (4680:13): [True: 12, False: 32]
  ------------------
 4681|     12|            return PyUnicode_FromWideChar(wstr, -1);
 4682|     12|        }
 4683|     32|        else {
 4684|     32|            return Py_NewRef(Py_None);
  ------------------
  |  |  550|     32|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     32|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     32|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4685|     32|        }
 4686|     44|    }
 4687|       |
 4688|     10|    case PyConfig_MEMBER_WSTR_LIST:
  ------------------
  |  Branch (4688:5): [True: 10, False: 134]
  ------------------
 4689|     10|    {
 4690|     10|        if (strcmp(spec->name, "xoptions") == 0) {
  ------------------
  |  Branch (4690:13): [True: 2, False: 8]
  ------------------
 4691|      2|            return _PyConfig_CreateXOptionsDict(config);
 4692|      2|        }
 4693|      8|        else {
 4694|      8|            const PyWideStringList *list = (const PyWideStringList *)member;
 4695|      8|            return _PyWideStringList_AsTuple(list);
 4696|      8|        }
 4697|     10|    }
 4698|       |
 4699|      0|    default:
  ------------------
  |  Branch (4699:5): [True: 0, False: 144]
  ------------------
 4700|      0|        Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 4701|    144|    }
 4702|    144|}
initconfig.c:_PyWideStringList_AsTuple:
  930|      8|{
  931|      8|    assert(_PyWideStringList_CheckConsistency(list));
  ------------------
  |  Branch (931:5): [True: 8, False: 0]
  ------------------
  932|       |
  933|      8|    PyObject *tuple = PyTuple_New(list->length);
  934|      8|    if (tuple == NULL) {
  ------------------
  |  Branch (934:9): [True: 0, False: 8]
  ------------------
  935|      0|        return NULL;
  936|      0|    }
  937|       |
  938|     10|    for (Py_ssize_t i = 0; i < list->length; i++) {
  ------------------
  |  Branch (938:28): [True: 2, False: 8]
  ------------------
  939|      2|        PyObject *item = PyUnicode_FromWideChar(list->items[i], -1);
  940|      2|        if (item == NULL) {
  ------------------
  |  Branch (940:13): [True: 0, False: 2]
  ------------------
  941|      0|            Py_DECREF(tuple);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  942|      0|            return NULL;
  943|      0|        }
  944|      2|        PyTuple_SET_ITEM(tuple, i, item);
  ------------------
  |  |   40|      2|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  945|      2|    }
  946|      8|    return tuple;
  947|      8|}

_PyInstructionSequence_NewLabel:
   59|   315k|{
   60|   315k|    _PyJumpTargetLabel lbl = {++seq->s_next_free_label};
   61|   315k|    return lbl;
   62|   315k|}
_PyInstructionSequence_UseLabel:
   66|   807k|{
   67|   807k|    int old_size = seq->s_labelmap_size;
   68|   807k|    _Py_c_array_t array = {
   69|   807k|        .array = (void*)seq->s_labelmap,
   70|   807k|        .allocated_entries = seq->s_labelmap_size,
   71|   807k|        .item_size = sizeof(int),
   72|   807k|        .initial_num_entries = INITIAL_INSTR_SEQUENCE_LABELS_MAP_SIZE,
  ------------------
  |  |   20|   807k|#define INITIAL_INSTR_SEQUENCE_LABELS_MAP_SIZE 10
  ------------------
   73|   807k|    };
   74|       |
   75|   807k|    RETURN_IF_ERROR(_Py_CArray_EnsureCapacity(&array, lbl));
  ------------------
  |  |   32|   807k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 807k]
  |  |  ------------------
  |  |   33|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   29|      0|#define ERROR -1
  |  |  ------------------
  |  |   34|      0|    }
  ------------------
   76|   807k|    seq->s_labelmap = array.array;
   77|   807k|    seq->s_labelmap_size = array.allocated_entries;
   78|       |
   79|  2.42M|    for(int i = old_size; i < seq->s_labelmap_size; i++) {
  ------------------
  |  Branch (79:27): [True: 1.61M, False: 807k]
  ------------------
   80|  1.61M|        seq->s_labelmap[i] = -111;  /* something weird, for debugging */
   81|  1.61M|    }
   82|   807k|    seq->s_labelmap[lbl] = seq->s_used; /* label refers to the next instruction */
   83|   807k|    return SUCCESS;
  ------------------
  |  |   28|   807k|#define SUCCESS 0
  ------------------
   84|   807k|}
_PyInstructionSequence_ApplyLabelMap:
   88|   158k|{
   89|   158k|    if (instrs->s_labelmap == NULL) {
  ------------------
  |  Branch (89:9): [True: 81.8k, False: 76.4k]
  ------------------
   90|       |        /* Already applied - nothing to do */
   91|  81.8k|        return SUCCESS;
  ------------------
  |  |   28|  81.8k|#define SUCCESS 0
  ------------------
   92|  81.8k|    }
   93|       |    /* Replace labels by offsets in the code */
   94|  6.94M|    for (int i=0; i < instrs->s_used; i++) {
  ------------------
  |  Branch (94:19): [True: 6.86M, False: 76.4k]
  ------------------
   95|  6.86M|        instruction *instr = &instrs->s_instrs[i];
   96|  6.86M|        if (HAS_TARGET(instr->i_opcode)) {
  ------------------
  |  |   23|  6.86M|        (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  | 1065|  13.7M|#define OPCODE_HAS_JUMP(OP) (_PyOpcode_opcode_metadata[OP].flags & (HAS_JUMP_FLAG))
  |  |  |  |  ------------------
  |  |  |  |  |  | 1046|  6.86M|#define HAS_JUMP_FLAG (8)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1065:29): [True: 452k, False: 6.41M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       (OPCODE_HAS_JUMP(opcode) || IS_BLOCK_PUSH_OPCODE(opcode))
  |  |  ------------------
  |  |  |  |   18|  6.41M|        ((opcode) == SETUP_FINALLY || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  252|  12.8M|#define SETUP_FINALLY                          264
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (18:10): [True: 43.3k, False: 6.37M]
  |  |  |  |  ------------------
  |  |  |  |   19|  6.41M|         (opcode) == SETUP_WITH || \
  |  |  |  |  ------------------
  |  |  |  |  |  |  253|  12.7M|#define SETUP_WITH                             265
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (19:10): [True: 11.4k, False: 6.35M]
  |  |  |  |  ------------------
  |  |  |  |   20|  6.41M|         (opcode) == SETUP_CLEANUP)
  |  |  |  |  ------------------
  |  |  |  |  |  |  251|  6.35M|#define SETUP_CLEANUP                          263
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (20:10): [True: 20.2k, False: 6.33M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|   527k|            assert(instr->i_oparg < instrs->s_labelmap_size);
  ------------------
  |  Branch (97:13): [True: 527k, False: 0]
  ------------------
   98|   527k|            instr->i_oparg = instrs->s_labelmap[instr->i_oparg];
   99|   527k|        }
  100|  6.86M|        _PyExceptHandlerInfo *hi = &instr->i_except_handler_info;
  101|  6.86M|        if (hi->h_label >= 0) {
  ------------------
  |  Branch (101:13): [True: 4.52M, False: 2.34M]
  ------------------
  102|  4.52M|            assert(hi->h_label < instrs->s_labelmap_size);
  ------------------
  |  Branch (102:13): [True: 4.52M, False: 0]
  ------------------
  103|  4.52M|            hi->h_label = instrs->s_labelmap[hi->h_label];
  104|  4.52M|        }
  105|  6.86M|    }
  106|       |    /* Clear label map so it's never used again */
  107|  76.4k|    PyMem_Free(instrs->s_labelmap);
  108|  76.4k|    instrs->s_labelmap = NULL;
  109|  76.4k|    instrs->s_labelmap_size = 0;
  110|  76.4k|    return SUCCESS;
  ------------------
  |  |   28|  76.4k|#define SUCCESS 0
  ------------------
  111|  76.4k|}
_PyInstructionSequence_Addop:
  118|  8.47M|{
  119|  8.47M|    assert(0 <= opcode && opcode <= MAX_OPCODE);
  ------------------
  |  Branch (119:5): [True: 8.47M, False: 0]
  |  Branch (119:5): [True: 8.47M, False: 0]
  ------------------
  120|  8.47M|    assert(IS_WITHIN_OPCODE_RANGE(opcode));
  ------------------
  |  Branch (120:5): [True: 8.47M, False: 0]
  |  Branch (120:5): [True: 8.09M, False: 375k]
  |  Branch (120:5): [True: 18.4k, False: 356k]
  |  Branch (120:5): [True: 13.1k, False: 343k]
  |  Branch (120:5): [True: 10.5k, False: 332k]
  |  Branch (120:5): [True: 26.3k, False: 306k]
  |  Branch (120:5): [True: 152k, False: 153k]
  |  Branch (120:5): [True: 4.01k, False: 149k]
  |  Branch (120:5): [True: 1.99k, False: 147k]
  |  Branch (120:5): [True: 43.9k, False: 103k]
  |  Branch (120:5): [True: 17.5k, False: 86.0k]
  |  Branch (120:5): [True: 11.7k, False: 74.2k]
  |  Branch (120:5): [True: 74.2k, False: 0]
  |  Branch (120:5): [Folded, False: 0]
  ------------------
  121|  8.47M|    assert(OPCODE_HAS_ARG(opcode) || HAS_TARGET(opcode) || oparg == 0);
  ------------------
  |  Branch (121:5): [True: 0, False: 1.75M]
  |  Branch (121:5): [True: 0, False: 1.75M]
  |  Branch (121:5): [True: 0, False: 1.75M]
  |  Branch (121:5): [True: 0, False: 1.75M]
  |  Branch (121:5): [True: 6.71M, False: 1.75M]
  |  Branch (121:5): [True: 1.75M, False: 0]
  ------------------
  122|  8.47M|    assert(0 <= oparg && oparg < (1 << 30));
  ------------------
  |  Branch (122:5): [True: 8.47M, False: 0]
  |  Branch (122:5): [True: 8.47M, False: 0]
  ------------------
  123|       |
  124|  8.47M|    int idx = instr_sequence_next_inst(seq);
  125|  8.47M|    RETURN_IF_ERROR(idx);
  ------------------
  |  |   32|  8.47M|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 8.47M]
  |  |  ------------------
  |  |   33|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   29|      0|#define ERROR -1
  |  |  ------------------
  |  |   34|      0|    }
  ------------------
  126|  8.47M|    instruction *ci = &seq->s_instrs[idx];
  127|  8.47M|    ci->i_opcode = opcode;
  128|  8.47M|    ci->i_oparg = oparg;
  129|  8.47M|    ci->i_loc = loc;
  130|  8.47M|    return SUCCESS;
  ------------------
  |  |   28|  8.47M|#define SUCCESS 0
  ------------------
  131|  8.47M|}
_PyInstructionSequence_InsertInstruction:
  136|  3.98k|{
  137|  3.98k|    assert(pos >= 0 && pos <= seq->s_used);
  ------------------
  |  Branch (137:5): [True: 3.98k, False: 0]
  |  Branch (137:5): [True: 3.98k, False: 0]
  ------------------
  138|  3.98k|    int last_idx = instr_sequence_next_inst(seq);
  139|  3.98k|    RETURN_IF_ERROR(last_idx);
  ------------------
  |  |   32|  3.98k|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 3.98k]
  |  |  ------------------
  |  |   33|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   29|      0|#define ERROR -1
  |  |  ------------------
  |  |   34|      0|    }
  ------------------
  140|   881k|    for (int i=last_idx-1; i >= pos; i--) {
  ------------------
  |  Branch (140:28): [True: 877k, False: 3.98k]
  ------------------
  141|   877k|        seq->s_instrs[i+1] = seq->s_instrs[i];
  142|   877k|    }
  143|  3.98k|    instruction *ci = &seq->s_instrs[pos];
  144|  3.98k|    ci->i_opcode = opcode;
  145|  3.98k|    ci->i_oparg = oparg;
  146|  3.98k|    ci->i_loc = loc;
  147|       |
  148|       |    /* fix the labels map */
  149|   280k|    for(int lbl=0; lbl < seq->s_labelmap_size; lbl++) {
  ------------------
  |  Branch (149:20): [True: 276k, False: 3.98k]
  ------------------
  150|   276k|        if (seq->s_labelmap[lbl] >= pos) {
  ------------------
  |  Branch (150:13): [True: 184k, False: 91.7k]
  ------------------
  151|   184k|            seq->s_labelmap[lbl]++;
  152|   184k|        }
  153|   276k|    }
  154|  3.98k|    return SUCCESS;
  ------------------
  |  |   28|  3.98k|#define SUCCESS 0
  ------------------
  155|  3.98k|}
_PyInstructionSequence_GetInstruction:
  159|  6.74k|{
  160|  6.74k|    assert(pos >= 0 && pos < seq->s_used);
  ------------------
  |  Branch (160:5): [True: 6.74k, False: 0]
  |  Branch (160:5): [True: 6.74k, False: 0]
  ------------------
  161|  6.74k|    return seq->s_instrs[pos];
  162|  6.74k|}
_PyInstructionSequence_SetAnnotationsCode:
  167|    599|{
  168|    599|    assert(seq->s_annotations_code == NULL);
  ------------------
  |  Branch (168:5): [True: 599, False: 0]
  ------------------
  169|    599|    seq->s_annotations_code = annotations;
  170|    599|    return SUCCESS;
  ------------------
  |  |   28|    599|#define SUCCESS 0
  ------------------
  171|    599|}
PyInstructionSequence_Fini:
  189|   107k|PyInstructionSequence_Fini(instr_sequence *seq) {
  190|   107k|    Py_XDECREF(seq->s_nested);
  ------------------
  |  |  524|   107k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   107k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   107k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|       |
  192|   107k|    PyMem_Free(seq->s_labelmap);
  193|   107k|    seq->s_labelmap = NULL;
  194|       |
  195|   107k|    PyMem_Free(seq->s_instrs);
  196|   107k|    seq->s_instrs = NULL;
  197|       |
  198|   107k|    if (seq->s_annotations_code != NULL) {
  ------------------
  |  Branch (198:9): [True: 599, False: 106k]
  ------------------
  199|    599|        PyInstructionSequence_Fini(seq->s_annotations_code);
  200|    599|        Py_CLEAR(seq->s_annotations_code);
  ------------------
  |  |  484|    599|    do { \
  |  |  485|    599|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|    599|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|    599|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|    599|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|    599|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|    599|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 599, False: 0]
  |  |  ------------------
  |  |  488|    599|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|    599|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|    599|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|    599|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    599|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    599|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|    599|        } \
  |  |  491|    599|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 599]
  |  |  ------------------
  ------------------
  201|    599|    }
  202|       |
  203|   107k|}
_PyInstructionSequence_New:
  233|  53.9k|{
  234|  53.9k|    _PyInstructionSequence *seq = inst_seq_create();
  235|  53.9k|    if (seq == NULL) {
  ------------------
  |  Branch (235:9): [True: 0, False: 53.9k]
  ------------------
  236|      0|        return NULL;
  237|      0|    }
  238|  53.9k|    return (PyObject*)seq;
  239|  53.9k|}
instruction_sequence.c:instr_sequence_next_inst:
   37|  8.47M|instr_sequence_next_inst(instr_sequence *seq) {
   38|  8.47M|    assert(seq->s_instrs != NULL || seq->s_used == 0);
  ------------------
  |  Branch (38:5): [True: 8.36M, False: 106k]
  |  Branch (38:5): [True: 106k, False: 0]
  ------------------
   39|       |
   40|       |
   41|  8.47M|    _Py_c_array_t array = {
   42|  8.47M|        .array = (void*)seq->s_instrs,
   43|  8.47M|        .allocated_entries = seq->s_allocated,
   44|  8.47M|        .item_size = sizeof(instruction),
   45|  8.47M|        .initial_num_entries = INITIAL_INSTR_SEQUENCE_SIZE,
  ------------------
  |  |   19|  8.47M|#define INITIAL_INSTR_SEQUENCE_SIZE 100
  ------------------
   46|  8.47M|    };
   47|       |
   48|  8.47M|    RETURN_IF_ERROR(_Py_CArray_EnsureCapacity(&array, seq->s_used + 1));
  ------------------
  |  |   32|  8.47M|    if ((X) == -1) {        \
  |  |  ------------------
  |  |  |  Branch (32:9): [True: 0, False: 8.47M]
  |  |  ------------------
  |  |   33|      0|        return ERROR;       \
  |  |  ------------------
  |  |  |  |   29|      0|#define ERROR -1
  |  |  ------------------
  |  |   34|      0|    }
  ------------------
   49|  8.47M|    seq->s_instrs = array.array;
   50|  8.47M|    seq->s_allocated = array.allocated_entries;
   51|       |
   52|  8.47M|    assert(seq->s_allocated >= 0);
  ------------------
  |  Branch (52:5): [True: 8.47M, False: 0]
  ------------------
   53|  8.47M|    assert(seq->s_used < seq->s_allocated);
  ------------------
  |  Branch (53:5): [True: 8.47M, False: 0]
  ------------------
   54|  8.47M|    return seq->s_used++;
   55|  8.47M|}
instruction_sequence.c:inst_seq_create:
  212|  53.9k|{
  213|  53.9k|    _PyInstructionSequence *seq;
  214|  53.9k|    seq = PyObject_GC_New(_PyInstructionSequence, &_PyInstructionSequence_Type);
  ------------------
  |  |  181|  53.9k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  53.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  215|  53.9k|    if (seq == NULL) {
  ------------------
  |  Branch (215:9): [True: 0, False: 53.9k]
  ------------------
  216|      0|        return NULL;
  217|      0|    }
  218|  53.9k|    seq->s_instrs = NULL;
  219|  53.9k|    seq->s_allocated = 0;
  220|  53.9k|    seq->s_used = 0;
  221|  53.9k|    seq->s_next_free_label = 0;
  222|  53.9k|    seq->s_labelmap = NULL;
  223|  53.9k|    seq->s_labelmap_size = 0;
  224|  53.9k|    seq->s_nested = NULL;
  225|  53.9k|    seq->s_annotations_code = NULL;
  226|       |
  227|  53.9k|    PyObject_GC_Track(seq);
  228|  53.9k|    return seq;
  229|  53.9k|}
instruction_sequence.c:inst_seq_dealloc:
  426|  53.9k|{
  427|  53.9k|    _PyInstructionSequence *seq = (_PyInstructionSequence *)op;
  428|  53.9k|    PyObject_GC_UnTrack(seq);
  429|  53.9k|    PyInstructionSequence_Fini(seq);
  430|  53.9k|    PyObject_GC_Del(seq);
  431|  53.9k|}
instruction_sequence.c:inst_seq_traverse:
  435|    764|{
  436|    764|    _PyInstructionSequence *seq = (_PyInstructionSequence *)op;
  437|    764|    Py_VISIT(seq->s_nested);
  ------------------
  |  |  194|    764|    do {                                                                \
  |  |  195|    764|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 764]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|    764|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 764]
  |  |  ------------------
  ------------------
  438|    764|    Py_VISIT((PyObject *)seq->s_annotations_code);
  ------------------
  |  |  194|    764|    do {                                                                \
  |  |  195|    764|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 0, False: 764]
  |  |  ------------------
  |  |  196|      0|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|      0|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  198|      0|                return vret;                                            \
  |  |  199|      0|        }                                                               \
  |  |  200|    764|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 764]
  |  |  ------------------
  ------------------
  439|    764|    return 0;
  440|    764|}

_Py_GetBaseCodeUnit:
  639|  8.94M|{
  640|  8.94M|    _Py_CODEUNIT *src_instr = _PyCode_CODE(code) + i;
  ------------------
  |  |   16|  8.94M|#define _PyCode_CODE(CO) _Py_RVALUE((_Py_CODEUNIT *)(CO)->co_code_adaptive)
  |  |  ------------------
  |  |  |  |  302|  8.94M|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  641|  8.94M|    _Py_CODEUNIT inst = {
  642|  8.94M|        .cache = FT_ATOMIC_LOAD_UINT16_RELAXED(*(uint16_t *)src_instr)};
  ------------------
  |  |  158|  8.94M|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  ------------------
  643|  8.94M|    int opcode = inst.op.code;
  644|  8.94M|    if (opcode < MIN_INSTRUMENTED_OPCODE) {
  ------------------
  |  |  258|  8.94M|#define MIN_INSTRUMENTED_OPCODE                233
  ------------------
  |  Branch (644:9): [True: 8.94M, False: 0]
  ------------------
  645|  8.94M|        inst.op.code = _PyOpcode_Deopt[opcode];
  646|  8.94M|        assert(inst.op.code < MIN_SPECIALIZED_OPCODE);
  ------------------
  |  Branch (646:9): [True: 8.94M, False: 0]
  ------------------
  647|  8.94M|        return inst;
  648|  8.94M|    }
  649|      0|    if (opcode == ENTER_EXECUTOR) {
  ------------------
  |  |  242|      0|#define ENTER_EXECUTOR                         254
  ------------------
  |  Branch (649:9): [True: 0, False: 0]
  ------------------
  650|      0|        _PyExecutorObject *exec = code->co_executors->executors[inst.op.arg];
  651|      0|        opcode = _PyOpcode_Deopt[exec->vm_data.opcode];
  652|      0|        inst.op.code = opcode;
  653|      0|        inst.op.arg = exec->vm_data.oparg;
  654|      0|        assert(inst.op.code < MIN_SPECIALIZED_OPCODE);
  ------------------
  |  Branch (654:9): [True: 0, False: 0]
  ------------------
  655|      0|        return inst;
  656|      0|    }
  657|      0|    if (opcode == INSTRUMENTED_LINE) {
  ------------------
  |  |  241|      0|#define INSTRUMENTED_LINE                      253
  ------------------
  |  Branch (657:9): [True: 0, False: 0]
  ------------------
  658|      0|        opcode = _PyCode_GetOriginalOpcode(code->_co_monitoring->lines, i);
  659|      0|    }
  660|      0|    if (opcode == INSTRUMENTED_INSTRUCTION) {
  ------------------
  |  |  225|      0|#define INSTRUMENTED_INSTRUCTION               237
  ------------------
  |  Branch (660:9): [True: 0, False: 0]
  ------------------
  661|      0|        opcode = code->_co_monitoring->per_instruction_opcodes[i];
  662|      0|    }
  663|      0|    CHECK(opcode != INSTRUMENTED_INSTRUCTION);
  ------------------
  |  |  632|      0|#define CHECK(test) assert(test)
  ------------------
  |  Branch (663:5): [True: 0, False: 0]
  ------------------
  664|      0|    CHECK(opcode != INSTRUMENTED_LINE);
  ------------------
  |  |  632|      0|#define CHECK(test) assert(test)
  ------------------
  |  Branch (664:5): [True: 0, False: 0]
  ------------------
  665|      0|    int deinstrumented = DE_INSTRUMENT[opcode];
  666|      0|    if (deinstrumented) {
  ------------------
  |  Branch (666:9): [True: 0, False: 0]
  ------------------
  667|      0|        inst.op.code = deinstrumented;
  668|      0|    }
  669|      0|    else {
  670|      0|        inst.op.code = _PyOpcode_Deopt[opcode];
  671|      0|    }
  672|      0|    assert(inst.op.code < MIN_SPECIALIZED_OPCODE);
  ------------------
  |  Branch (672:5): [True: 0, False: 0]
  ------------------
  673|      0|    return inst;
  674|      0|}
_Py_CreateMonitoringObject:
 2569|      2|{
 2570|      2|    PyObject *mod = _PyModule_CreateInitialized(&monitoring_module, PYTHON_API_VERSION);
  ------------------
  |  |   59|      2|#define PYTHON_API_VERSION 1013
  ------------------
 2571|      2|    if (mod == NULL) {
  ------------------
  |  Branch (2571:9): [True: 0, False: 2]
  ------------------
 2572|      0|        return NULL;
 2573|      0|    }
 2574|      2|    if (PyObject_SetAttrString(mod, "DISABLE", &_PyInstrumentation_DISABLE)) {
  ------------------
  |  Branch (2574:9): [True: 0, False: 2]
  ------------------
 2575|      0|        goto error;
 2576|      0|    }
 2577|      2|    if (PyObject_SetAttrString(mod, "MISSING", &_PyInstrumentation_MISSING)) {
  ------------------
  |  Branch (2577:9): [True: 0, False: 2]
  ------------------
 2578|      0|        goto error;
 2579|      0|    }
 2580|      2|    PyObject *events = _PyNamespace_New(NULL);
 2581|      2|    if (events == NULL) {
  ------------------
  |  Branch (2581:9): [True: 0, False: 2]
  ------------------
 2582|      0|        goto error;
 2583|      0|    }
 2584|      2|    int err = PyObject_SetAttrString(mod, "events", events);
 2585|      2|    Py_DECREF(events);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2586|      2|    if (err) {
  ------------------
  |  Branch (2586:9): [True: 0, False: 2]
  ------------------
 2587|      0|        goto error;
 2588|      0|    }
 2589|     40|    for (int i = 0; i < _PY_MONITORING_EVENTS; i++) {
  ------------------
  |  |   77|     40|#define _PY_MONITORING_EVENTS 19
  ------------------
  |  Branch (2589:21): [True: 38, False: 2]
  ------------------
 2590|     38|        if (add_power2_constant(events, event_names[i], i)) {
  ------------------
  |  Branch (2590:13): [True: 0, False: 38]
  ------------------
 2591|      0|            goto error;
 2592|      0|        }
 2593|     38|    }
 2594|      2|    err = PyObject_SetAttrString(events, "NO_EVENTS", _PyLong_GetZero());
 2595|      2|    if (err) goto error;
  ------------------
  |  Branch (2595:9): [True: 0, False: 2]
  ------------------
 2596|      2|    PyObject *val = PyLong_FromLong(PY_MONITORING_DEBUGGER_ID);
  ------------------
  |  |   20|      2|#define PY_MONITORING_DEBUGGER_ID 0
  ------------------
 2597|      2|    assert(val != NULL); /* Can't return NULL because the int is small. */
  ------------------
  |  Branch (2597:5): [True: 2, False: 0]
  ------------------
 2598|      2|    err = PyObject_SetAttrString(mod, "DEBUGGER_ID", val);
 2599|      2|    Py_DECREF(val);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2600|      2|    if (err) goto error;
  ------------------
  |  Branch (2600:9): [True: 0, False: 2]
  ------------------
 2601|      2|    val = PyLong_FromLong(PY_MONITORING_COVERAGE_ID);
  ------------------
  |  |   21|      2|#define PY_MONITORING_COVERAGE_ID 1
  ------------------
 2602|      2|    assert(val != NULL);
  ------------------
  |  Branch (2602:5): [True: 2, False: 0]
  ------------------
 2603|      2|    err = PyObject_SetAttrString(mod, "COVERAGE_ID", val);
 2604|      2|    Py_DECREF(val);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2605|      2|    if (err) goto error;
  ------------------
  |  Branch (2605:9): [True: 0, False: 2]
  ------------------
 2606|      2|    val = PyLong_FromLong(PY_MONITORING_PROFILER_ID);
  ------------------
  |  |   22|      2|#define PY_MONITORING_PROFILER_ID 2
  ------------------
 2607|      2|    assert(val != NULL);
  ------------------
  |  Branch (2607:5): [True: 2, False: 0]
  ------------------
 2608|      2|    err = PyObject_SetAttrString(mod, "PROFILER_ID", val);
 2609|      2|    Py_DECREF(val);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2610|      2|    if (err) goto error;
  ------------------
  |  Branch (2610:9): [True: 0, False: 2]
  ------------------
 2611|      2|    val = PyLong_FromLong(PY_MONITORING_OPTIMIZER_ID);
  ------------------
  |  |   23|      2|#define PY_MONITORING_OPTIMIZER_ID 5
  ------------------
 2612|      2|    assert(val != NULL);
  ------------------
  |  Branch (2612:5): [True: 2, False: 0]
  ------------------
 2613|      2|    err = PyObject_SetAttrString(mod, "OPTIMIZER_ID", val);
 2614|      2|    Py_DECREF(val);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2615|      2|    if (err) goto error;
  ------------------
  |  Branch (2615:9): [True: 0, False: 2]
  ------------------
 2616|      2|    return mod;
 2617|      0|error:
 2618|      0|    Py_DECREF(mod);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2619|       |    return NULL;
 2620|      2|}
instrumentation.c:add_power2_constant:
 2506|     38|{
 2507|     38|    PyObject *val = PyLong_FromLong(1<<i);
 2508|     38|    if (val == NULL) {
  ------------------
  |  Branch (2508:9): [True: 0, False: 38]
  ------------------
 2509|      0|        return -1;
 2510|      0|    }
 2511|     38|    int err = PyObject_SetAttrString(obj, name, val);
 2512|     38|    Py_DECREF(val);
  ------------------
  |  |  430|     38|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     38|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     38|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2513|     38|    return err;
 2514|     38|}

intrinsics.c:import_star:
  126|     15|{
  127|     15|    _PyInterpreterFrame *frame = tstate->current_frame;
  128|       |
  129|     15|    PyObject *locals = _PyFrame_GetLocals(frame);
  130|     15|    if (locals == NULL) {
  ------------------
  |  Branch (130:9): [True: 0, False: 15]
  ------------------
  131|      0|        _PyErr_SetString(tstate, PyExc_SystemError,
  132|      0|                            "no locals found during 'import *'");
  133|      0|        return NULL;
  134|      0|    }
  135|     15|    int err = import_all_from(tstate, locals, from);
  136|     15|    Py_DECREF(locals);
  ------------------
  |  |  430|     15|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|     15|    if (err < 0) {
  ------------------
  |  Branch (137:9): [True: 0, False: 15]
  ------------------
  138|      0|        return NULL;
  139|      0|    }
  140|     15|    Py_RETURN_NONE;
  ------------------
  |  |  628|     15|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|     15|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  141|     15|}
intrinsics.c:import_all_from:
   42|     15|{
   43|     15|    PyObject *all, *dict, *name, *value;
   44|     15|    int skip_leading_underscores = 0;
   45|     15|    int pos, err;
   46|       |
   47|     15|    if (PyObject_GetOptionalAttr(v, &_Py_ID(__all__), &all) < 0) {
  ------------------
  |  |  936|     15|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     15|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     15|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (47:9): [True: 0, False: 15]
  ------------------
   48|      0|        return -1; /* Unexpected error */
   49|      0|    }
   50|     15|    if (all == NULL) {
  ------------------
  |  Branch (50:9): [True: 12, False: 3]
  ------------------
   51|     12|        if (PyObject_GetOptionalAttr(v, &_Py_ID(__dict__), &dict) < 0) {
  ------------------
  |  |  936|     12|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     12|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     12|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (51:13): [True: 0, False: 12]
  ------------------
   52|      0|            return -1;
   53|      0|        }
   54|     12|        if (dict == NULL) {
  ------------------
  |  Branch (54:13): [True: 0, False: 12]
  ------------------
   55|      0|            _PyErr_SetString(tstate, PyExc_ImportError,
   56|      0|                    "from-import-* object has no __dict__ and no __all__");
   57|      0|            return -1;
   58|      0|        }
   59|     12|        all = PyMapping_Keys(dict);
   60|     12|        Py_DECREF(dict);
  ------------------
  |  |  430|     12|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   61|     12|        if (all == NULL)
  ------------------
  |  Branch (61:13): [True: 0, False: 12]
  ------------------
   62|      0|            return -1;
   63|     12|        skip_leading_underscores = 1;
   64|     12|    }
   65|       |
   66|  1.79k|    for (pos = 0, err = 0; ; pos++) {
   67|  1.79k|        name = PySequence_GetItem(all, pos);
   68|  1.79k|        if (name == NULL) {
  ------------------
  |  Branch (68:13): [True: 15, False: 1.77k]
  ------------------
   69|     15|            if (!_PyErr_ExceptionMatches(tstate, PyExc_IndexError)) {
  ------------------
  |  Branch (69:17): [True: 0, False: 15]
  ------------------
   70|      0|                err = -1;
   71|      0|            }
   72|     15|            else {
   73|     15|                _PyErr_Clear(tstate);
   74|     15|            }
   75|     15|            break;
   76|     15|        }
   77|  1.77k|        if (!PyUnicode_Check(name)) {
  ------------------
  |  |  103|  1.77k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.77k|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (77:13): [True: 0, False: 1.77k]
  ------------------
   78|      0|            PyObject *modname = PyObject_GetAttr(v, &_Py_ID(__name__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      0|            if (modname == NULL) {
  ------------------
  |  Branch (79:17): [True: 0, False: 0]
  ------------------
   80|      0|                Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|      0|                err = -1;
   82|      0|                break;
   83|      0|            }
   84|      0|            if (!PyUnicode_Check(modname)) {
  ------------------
  |  |  103|      0|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (84:17): [True: 0, False: 0]
  ------------------
   85|      0|                _PyErr_Format(tstate, PyExc_TypeError,
   86|      0|                              "module __name__ must be a string, not %.100s",
   87|      0|                              Py_TYPE(modname)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      0|            }
   89|      0|            else {
   90|      0|                _PyErr_Format(tstate, PyExc_TypeError,
   91|      0|                              "%s in %U.%s must be str, not %.100s",
   92|      0|                              skip_leading_underscores ? "Key" : "Item",
  ------------------
  |  Branch (92:31): [True: 0, False: 0]
  ------------------
   93|      0|                              modname,
   94|      0|                              skip_leading_underscores ? "__dict__" : "__all__",
  ------------------
  |  Branch (94:31): [True: 0, False: 0]
  ------------------
   95|      0|                              Py_TYPE(name)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      0|            }
   97|      0|            Py_DECREF(modname);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|      0|            Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      0|            err = -1;
  100|      0|            break;
  101|      0|        }
  102|  1.77k|        if (skip_leading_underscores) {
  ------------------
  |  Branch (102:13): [True: 1.66k, False: 110]
  ------------------
  103|  1.66k|            if (PyUnicode_READ_CHAR(name, 0) == '_') {
  ------------------
  |  |  381|  1.66k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  1.66k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.66k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (103:17): [True: 94, False: 1.57k]
  ------------------
  104|     94|                Py_DECREF(name);
  ------------------
  |  |  430|     94|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     94|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     94|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  105|     94|                continue;
  106|     94|            }
  107|  1.66k|        }
  108|  1.68k|        value = PyObject_GetAttr(v, name);
  109|  1.68k|        if (value == NULL)
  ------------------
  |  Branch (109:13): [True: 0, False: 1.68k]
  ------------------
  110|      0|            err = -1;
  111|  1.68k|        else if (PyDict_CheckExact(locals))
  ------------------
  |  |   19|  1.68k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|  1.68k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.68k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|  1.68k|            err = PyDict_SetItem(locals, name, value);
  113|      0|        else
  114|      0|            err = PyObject_SetItem(locals, name, value);
  115|  1.68k|        Py_DECREF(name);
  ------------------
  |  |  430|  1.68k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|  1.68k|        Py_XDECREF(value);
  ------------------
  |  |  524|  1.68k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.68k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.68k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|  1.68k|        if (err < 0)
  ------------------
  |  Branch (117:13): [True: 0, False: 1.68k]
  ------------------
  118|      0|            break;
  119|  1.68k|    }
  120|     15|    Py_DECREF(all);
  ------------------
  |  |  430|     15|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|     15|    return err;
  122|     15|}
intrinsics.c:list_to_tuple:
  195|    162|{
  196|       |    /* INTRINSIC_LIST_TO_TUPLE is only emitted by the compiler for a
  197|       |       freshly-built, uniquely-referenced temporary list, so steal its items
  198|       |       into the tuple instead of copying them. */
  199|    162|    assert(PyList_CheckExact(v));
  ------------------
  |  Branch (199:5): [True: 162, False: 0]
  ------------------
  200|    162|    assert(_PyObject_IsUniquelyReferenced(v));
  ------------------
  |  Branch (200:5): [True: 162, False: 0]
  ------------------
  201|    162|    return _PyList_AsTupleAndClear((PyListObject *)v);
  202|    162|}
intrinsics.c:make_frozenset:
  213|      3|{
  214|      3|    assert(PySet_CheckExact(set));
  ------------------
  |  Branch (214:5): [True: 3, False: 0]
  ------------------
  215|      3|    assert(_PyObject_IsUniquelyReferenced(set));
  ------------------
  |  Branch (215:5): [True: 3, False: 0]
  ------------------
  216|      3|    return _PySet_Freeze(set);
  217|      3|}

_PyMutex_LockTimed:
   57|  97.9k|{
   58|  97.9k|    uint8_t v = _Py_atomic_load_uint8_relaxed(&m->_bits);
   59|  97.9k|    if ((v & _Py_LOCKED) == 0) {
  ------------------
  |  |   10|  97.9k|#define _Py_LOCKED      1
  ------------------
  |  Branch (59:9): [True: 97.9k, False: 0]
  ------------------
   60|  97.9k|        if (_Py_atomic_compare_exchange_uint8(&m->_bits, &v, v|_Py_LOCKED)) {
  ------------------
  |  |   10|  97.9k|#define _Py_LOCKED      1
  ------------------
  |  Branch (60:13): [True: 97.9k, False: 0]
  ------------------
   61|  97.9k|            return PY_LOCK_ACQUIRED;
   62|  97.9k|        }
   63|  97.9k|    }
   64|      0|    if (timeout == 0) {
  ------------------
  |  Branch (64:9): [True: 0, False: 0]
  ------------------
   65|      0|        return PY_LOCK_FAILURE;
   66|      0|    }
   67|       |
   68|      0|    FT_STAT_MUTEX_SLEEP_INC();
   69|       |
   70|      0|    PyTime_t now;
   71|       |    // silently ignore error: cannot report error to the caller
   72|      0|    (void)PyTime_MonotonicRaw(&now);
   73|      0|    PyTime_t endtime = 0;
   74|      0|    if (timeout > 0) {
  ------------------
  |  Branch (74:9): [True: 0, False: 0]
  ------------------
   75|      0|        endtime = _PyTime_Add(now, timeout);
   76|      0|    }
   77|       |
   78|      0|    struct mutex_entry entry = {
   79|      0|        .time_to_be_fair = now + TIME_TO_BE_FAIR_NS,
   80|      0|        .handed_off = 0,
   81|      0|    };
   82|       |
   83|      0|    Py_ssize_t spin_count = 0;
   84|       |#ifdef Py_GIL_DISABLED
   85|       |    // Using thread-id as a way of reducing contention further in the reload below.
   86|       |    // It adds a pseudo-random starting offset to the recurrence, so that threads
   87|       |    // are less likely to try and run compare-exchange at the same time.
   88|       |    // The lower bits of platform thread ids are likely to not be random,
   89|       |    // hence the right shift.
   90|       |    const Py_ssize_t tid = (Py_ssize_t)(_Py_ThreadId() >> 12);
   91|       |#else
   92|      0|    const Py_ssize_t tid = 0;
   93|      0|#endif
   94|      0|    for (;;) {
   95|      0|        if ((v & _Py_LOCKED) == 0) {
  ------------------
  |  |   10|      0|#define _Py_LOCKED      1
  ------------------
  |  Branch (95:13): [True: 0, False: 0]
  ------------------
   96|       |            // The lock is unlocked. Try to grab it.
   97|      0|            if (_Py_atomic_compare_exchange_uint8(&m->_bits, &v, v|_Py_LOCKED)) {
  ------------------
  |  |   10|      0|#define _Py_LOCKED      1
  ------------------
  |  Branch (97:17): [True: 0, False: 0]
  ------------------
   98|      0|                return PY_LOCK_ACQUIRED;
   99|      0|            }
  100|      0|            continue;
  101|      0|        }
  102|       |
  103|      0|        if (!(v & _Py_HAS_PARKED) && spin_count < MAX_SPIN_COUNT) {
  ------------------
  |  |   17|      0|#define _Py_HAS_PARKED  2
  ------------------
  |  Branch (103:13): [True: 0, False: 0]
  |  Branch (103:38): [True: 0, False: 0]
  ------------------
  104|       |            // Spin for a bit.
  105|      0|            _Py_yield();
  106|      0|            spin_count++;
  107|      0|            if (((spin_count + tid) & RELOAD_SPIN_MASK) == 0) {
  ------------------
  |  Branch (107:17): [True: 0, False: 0]
  ------------------
  108|      0|                v = _Py_atomic_load_uint8_relaxed(&m->_bits);
  109|      0|            }
  110|      0|            continue;
  111|      0|        }
  112|       |
  113|      0|        if (timeout == 0) {
  ------------------
  |  Branch (113:13): [True: 0, False: 0]
  ------------------
  114|      0|            return PY_LOCK_FAILURE;
  115|      0|        }
  116|      0|        if ((flags & _PY_LOCK_PYTHONLOCK) && Py_IsFinalizing()) {
  ------------------
  |  Branch (116:13): [True: 0, False: 0]
  |  Branch (116:46): [True: 0, False: 0]
  ------------------
  117|       |            // At this phase of runtime shutdown, only the finalization thread
  118|       |            // can have attached thread state; others hang if they try
  119|       |            // attaching. And since operations on this lock requires attached
  120|       |            // thread state (_PY_LOCK_PYTHONLOCK), the finalization thread is
  121|       |            // running this code, and no other thread can unlock.
  122|       |            // Raise rather than hang. (_PY_LOCK_PYTHONLOCK allows raising
  123|       |            // exceptons.)
  124|      0|            PyErr_SetString(PyExc_PythonFinalizationError,
  125|      0|                            "cannot acquire lock at interpreter finalization");
  126|      0|            return PY_LOCK_FAILURE;
  127|      0|        }
  128|       |
  129|      0|        uint8_t newv = v;
  130|      0|        if (!(v & _Py_HAS_PARKED)) {
  ------------------
  |  |   17|      0|#define _Py_HAS_PARKED  2
  ------------------
  |  Branch (130:13): [True: 0, False: 0]
  ------------------
  131|       |            // We are the first waiter. Set the _Py_HAS_PARKED flag.
  132|      0|            newv = v | _Py_HAS_PARKED;
  ------------------
  |  |   17|      0|#define _Py_HAS_PARKED  2
  ------------------
  133|      0|            if (!_Py_atomic_compare_exchange_uint8(&m->_bits, &v, newv)) {
  ------------------
  |  Branch (133:17): [True: 0, False: 0]
  ------------------
  134|      0|                continue;
  135|      0|            }
  136|      0|        }
  137|       |
  138|      0|        int ret = _PyParkingLot_Park(&m->_bits, &newv, sizeof(newv), timeout,
  139|      0|                                     &entry, (flags & _PY_LOCK_DETACH) != 0);
  140|      0|        if (ret == Py_PARK_OK) {
  ------------------
  |  Branch (140:13): [True: 0, False: 0]
  ------------------
  141|      0|            if (entry.handed_off) {
  ------------------
  |  Branch (141:17): [True: 0, False: 0]
  ------------------
  142|       |                // We own the lock now. thread.Lock allows other threads
  143|       |                // to concurrently release the lock so we cannot assert that
  144|       |                // it is locked if _PY_LOCK_PYTHONLOCK is set.
  145|      0|                assert(_Py_atomic_load_uint8_relaxed(&m->_bits) & _Py_LOCKED ||
  ------------------
  |  Branch (145:17): [True: 0, False: 0]
  |  Branch (145:17): [True: 0, False: 0]
  ------------------
  146|      0|                       (flags & _PY_LOCK_PYTHONLOCK) != 0);
  147|      0|                return PY_LOCK_ACQUIRED;
  148|      0|            }
  149|      0|        }
  150|      0|        else if (ret == Py_PARK_INTR && (flags & _PY_LOCK_HANDLE_SIGNALS)) {
  ------------------
  |  Branch (150:18): [True: 0, False: 0]
  |  Branch (150:41): [True: 0, False: 0]
  ------------------
  151|      0|            if (Py_MakePendingCalls() < 0) {
  ------------------
  |  Branch (151:17): [True: 0, False: 0]
  ------------------
  152|      0|                return PY_LOCK_INTR;
  153|      0|            }
  154|      0|        }
  155|      0|        else if (ret == Py_PARK_INTR && (flags & _PY_FAIL_IF_INTERRUPTED)) {
  ------------------
  |  Branch (155:18): [True: 0, False: 0]
  |  Branch (155:41): [True: 0, False: 0]
  ------------------
  156|      0|            return PY_LOCK_INTR;
  157|      0|        }
  158|      0|        else if (ret == Py_PARK_TIMEOUT) {
  ------------------
  |  Branch (158:18): [True: 0, False: 0]
  ------------------
  159|      0|            assert(timeout >= 0);
  ------------------
  |  Branch (159:13): [True: 0, False: 0]
  ------------------
  160|      0|            return PY_LOCK_FAILURE;
  161|      0|        }
  162|       |
  163|      0|        if (timeout > 0) {
  ------------------
  |  Branch (163:13): [True: 0, False: 0]
  ------------------
  164|      0|            timeout = _PyDeadline_Get(endtime);
  165|      0|            if (timeout <= 0) {
  ------------------
  |  Branch (165:17): [True: 0, False: 0]
  ------------------
  166|       |                // Avoid negative values because those mean block forever.
  167|      0|                timeout = 0;
  168|      0|            }
  169|      0|        }
  170|       |
  171|      0|        v = _Py_atomic_load_uint8_relaxed(&m->_bits);
  172|      0|    }
  173|      0|}
_PyOnceFlag_CallOnceSlow:
  372|      5|{
  373|      5|    uint8_t v = _Py_atomic_load_uint8(&flag->v);
  374|      5|    for (;;) {
  375|      5|        if (v == _Py_UNLOCKED) {
  ------------------
  |  |    9|      5|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (375:13): [True: 5, False: 0]
  ------------------
  376|      5|            if (!_Py_atomic_compare_exchange_uint8(&flag->v, &v, _Py_LOCKED)) {
  ------------------
  |  |   10|      5|#define _Py_LOCKED      1
  ------------------
  |  Branch (376:17): [True: 0, False: 5]
  ------------------
  377|      0|                continue;
  378|      0|            }
  379|      5|            int res = fn(arg);
  380|      5|            return unlock_once(flag, res);
  381|      5|        }
  382|       |
  383|      0|        if (v == _Py_ONCE_INITIALIZED) {
  ------------------
  |  |   18|      0|#define _Py_ONCE_INITIALIZED 4
  ------------------
  |  Branch (383:13): [True: 0, False: 0]
  ------------------
  384|      0|            return 0;
  385|      0|        }
  386|       |
  387|       |        // The once flag is initializing (locked).
  388|      0|        assert((v & _Py_LOCKED));
  ------------------
  |  Branch (388:9): [True: 0, False: 0]
  ------------------
  389|      0|        if (!(v & _Py_HAS_PARKED)) {
  ------------------
  |  |   17|      0|#define _Py_HAS_PARKED  2
  ------------------
  |  Branch (389:13): [True: 0, False: 0]
  ------------------
  390|       |            // We are the first waiter. Set the _Py_HAS_PARKED flag.
  391|      0|            uint8_t new_value = v | _Py_HAS_PARKED;
  ------------------
  |  |   17|      0|#define _Py_HAS_PARKED  2
  ------------------
  392|      0|            if (!_Py_atomic_compare_exchange_uint8(&flag->v, &v, new_value)) {
  ------------------
  |  Branch (392:17): [True: 0, False: 0]
  ------------------
  393|      0|                continue;
  394|      0|            }
  395|      0|            v = new_value;
  396|      0|        }
  397|       |
  398|       |        // Wait for initialization to finish.
  399|      0|        _PyParkingLot_Park(&flag->v, &v, sizeof(v), -1, NULL, 1);
  400|      0|        v = _Py_atomic_load_uint8(&flag->v);
  401|      0|    }
  402|      5|}
_PyRecursiveMutex_IsLockedByCurrentThread:
  412|  1.63k|{
  413|  1.63k|    return recursive_mutex_is_owned_by(m, PyThread_get_thread_ident_ex());
  414|  1.63k|}
_PyRecursiveMutex_Lock:
  418|  50.1k|{
  419|  50.1k|    PyThread_ident_t thread = PyThread_get_thread_ident_ex();
  420|  50.1k|    if (recursive_mutex_is_owned_by(m, thread)) {
  ------------------
  |  Branch (420:9): [True: 0, False: 50.1k]
  ------------------
  421|      0|        m->level++;
  422|      0|        return;
  423|      0|    }
  424|  50.1k|    PyMutex_Lock(&m->mutex);
  ------------------
  |  |   59|  50.1k|#define PyMutex_Lock _PyMutex_Lock
  ------------------
  425|  50.1k|    _Py_atomic_store_ullong_relaxed(&m->thread, thread);
  426|       |    assert(m->level == 0);
  ------------------
  |  Branch (426:5): [True: 50.1k, False: 0]
  ------------------
  427|  50.1k|}
_PyRecursiveMutex_LockTimed:
  431|    734|{
  432|    734|    PyThread_ident_t thread = PyThread_get_thread_ident_ex();
  433|    734|    if (recursive_mutex_is_owned_by(m, thread)) {
  ------------------
  |  Branch (433:9): [True: 0, False: 734]
  ------------------
  434|      0|        m->level++;
  435|      0|        return PY_LOCK_ACQUIRED;
  436|      0|    }
  437|    734|    PyLockStatus s = _PyMutex_LockTimed(&m->mutex, timeout, flags);
  438|    734|    if (s == PY_LOCK_ACQUIRED) {
  ------------------
  |  Branch (438:9): [True: 734, False: 0]
  ------------------
  439|    734|        _Py_atomic_store_ullong_relaxed(&m->thread, thread);
  440|    734|        assert(m->level == 0);
  ------------------
  |  Branch (440:9): [True: 734, False: 0]
  ------------------
  441|    734|    }
  442|    734|    return s;
  443|    734|}
_PyRecursiveMutex_Unlock:
  447|  1.63k|{
  448|  1.63k|    if (_PyRecursiveMutex_TryUnlock(m) < 0) {
  ------------------
  |  Branch (448:9): [True: 0, False: 1.63k]
  ------------------
  449|      0|        Py_FatalError("unlocking a recursive mutex that is not "
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  450|      0|                      "owned by the current thread");
  451|      0|    }
  452|  1.63k|}
_PyRecursiveMutex_TryUnlock:
  456|  50.8k|{
  457|  50.8k|    PyThread_ident_t thread = PyThread_get_thread_ident_ex();
  458|  50.8k|    if (!recursive_mutex_is_owned_by(m, thread)) {
  ------------------
  |  Branch (458:9): [True: 0, False: 50.8k]
  ------------------
  459|      0|        return -1;
  460|      0|    }
  461|  50.8k|    if (m->level > 0) {
  ------------------
  |  Branch (461:9): [True: 0, False: 50.8k]
  ------------------
  462|      0|        m->level--;
  463|      0|        return 0;
  464|      0|    }
  465|  50.8k|    assert(m->level == 0);
  ------------------
  |  Branch (465:5): [True: 50.8k, False: 0]
  ------------------
  466|  50.8k|    _Py_atomic_store_ullong_relaxed(&m->thread, 0);
  467|  50.8k|    PyMutex_Unlock(&m->mutex);
  ------------------
  |  |   70|  50.8k|#define PyMutex_Unlock _PyMutex_Unlock
  ------------------
  468|  50.8k|    return 0;
  469|  50.8k|}
lock.c:unlock_once:
  348|      5|{
  349|       |    // On success (res=0), we set the state to _Py_ONCE_INITIALIZED.
  350|       |    // On failure (res=-1), we reset the state to _Py_UNLOCKED.
  351|      5|    uint8_t new_value;
  352|      5|    switch (res) {
  353|      0|        case -1: new_value = _Py_UNLOCKED; break;
  ------------------
  |  |    9|      0|#define _Py_UNLOCKED    0
  ------------------
  |  Branch (353:9): [True: 0, False: 5]
  ------------------
  354|      5|        case  0: new_value = _Py_ONCE_INITIALIZED; break;
  ------------------
  |  |   18|      5|#define _Py_ONCE_INITIALIZED 4
  ------------------
  |  Branch (354:9): [True: 5, False: 0]
  ------------------
  355|      0|        default: {
  ------------------
  |  Branch (355:9): [True: 0, False: 5]
  ------------------
  356|      0|            Py_FatalError("invalid result from _PyOnceFlag_CallOnce");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
  357|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  358|      0|            break;
  359|      0|        }
  360|      5|    }
  361|       |
  362|      5|    uint8_t old_value = _Py_atomic_exchange_uint8(&o->v, new_value);
  363|      5|    if ((old_value & _Py_HAS_PARKED) != 0) {
  ------------------
  |  |   17|      5|#define _Py_HAS_PARKED  2
  ------------------
  |  Branch (363:9): [True: 0, False: 5]
  ------------------
  364|       |        // wake up anyone waiting on the once flag
  365|      0|        _PyParkingLot_UnparkAll(&o->v);
  366|      0|    }
  367|      5|    return res;
  368|      5|}
lock.c:recursive_mutex_is_owned_by:
  406|   103k|{
  407|   103k|    return _Py_atomic_load_ullong_relaxed(&m->thread) == tid;
  408|   103k|}

PyMarshal_ReadObjectFromString:
 1950|     30|{
 1951|     30|    RFILE rf;
 1952|     30|    PyObject *result;
 1953|     30|    rf.allow_code = 1;
 1954|     30|    rf.fp = NULL;
 1955|     30|    rf.readable = NULL;
 1956|     30|    rf.ptr = str;
 1957|     30|    rf.end = str + len;
 1958|     30|    rf.buf = NULL;
 1959|     30|    rf.depth = 0;
 1960|     30|    rf.refs = PyList_New(0);
 1961|     30|    if (rf.refs == NULL)
  ------------------
  |  Branch (1961:9): [True: 0, False: 30]
  ------------------
 1962|      0|        return NULL;
 1963|     30|    result = read_object(&rf);
 1964|     30|    Py_DECREF(rf.refs);
  ------------------
  |  |  430|     30|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     30|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     30|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1965|     30|    if (rf.buf != NULL)
  ------------------
  |  Branch (1965:9): [True: 0, False: 30]
  ------------------
 1966|      0|        PyMem_Free(rf.buf);
 1967|     30|    return result;
 1968|     30|}
PyMarshal_Init:
 2242|      2|{
 2243|      2|    return PyModuleDef_Init(&marshalmodule);
 2244|      2|}
marshal.c:r_short:
  993|     42|{
  994|     42|    short x = -1;
  995|     42|    const unsigned char *buffer;
  996|       |
  997|     42|    buffer = (const unsigned char *) r_string(2, p);
  998|     42|    if (buffer != NULL) {
  ------------------
  |  Branch (998:9): [True: 42, False: 0]
  ------------------
  999|     42|        x = buffer[0];
 1000|     42|        x |= buffer[1] << 8;
 1001|       |        /* Sign-extension, in case short greater than 16 bits */
 1002|     42|        x |= -(x & 0x8000);
 1003|     42|    }
 1004|     42|    return x;
 1005|     42|}
marshal.c:r_string:
  873|   102k|{
  874|   102k|    Py_ssize_t read = -1;
  875|       |
  876|   102k|    if (p->ptr != NULL) {
  ------------------
  |  Branch (876:9): [True: 102k, False: 0]
  ------------------
  877|       |        /* Fast path for loads() */
  878|   102k|        const char *res = p->ptr;
  879|   102k|        Py_ssize_t left = p->end - p->ptr;
  880|   102k|        if (left < n) {
  ------------------
  |  Branch (880:13): [True: 0, False: 102k]
  ------------------
  881|      0|            PyErr_SetString(PyExc_EOFError,
  882|      0|                            "marshal data too short");
  883|      0|            return NULL;
  884|      0|        }
  885|   102k|        p->ptr += n;
  886|   102k|        return res;
  887|   102k|    }
  888|      0|    if (p->buf == NULL) {
  ------------------
  |  Branch (888:9): [True: 0, False: 0]
  ------------------
  889|      0|        p->buf = PyMem_Malloc(n);
  890|      0|        if (p->buf == NULL) {
  ------------------
  |  Branch (890:13): [True: 0, False: 0]
  ------------------
  891|      0|            PyErr_NoMemory();
  892|      0|            return NULL;
  893|      0|        }
  894|      0|        p->buf_size = n;
  895|      0|    }
  896|      0|    else if (p->buf_size < n) {
  ------------------
  |  Branch (896:14): [True: 0, False: 0]
  ------------------
  897|      0|        char *tmp = PyMem_Realloc(p->buf, n);
  898|      0|        if (tmp == NULL) {
  ------------------
  |  Branch (898:13): [True: 0, False: 0]
  ------------------
  899|      0|            PyErr_NoMemory();
  900|      0|            return NULL;
  901|      0|        }
  902|      0|        p->buf = tmp;
  903|      0|        p->buf_size = n;
  904|      0|    }
  905|       |
  906|      0|    if (!p->readable) {
  ------------------
  |  Branch (906:9): [True: 0, False: 0]
  ------------------
  907|      0|        assert(p->fp != NULL);
  ------------------
  |  Branch (907:9): [True: 0, False: 0]
  ------------------
  908|      0|        read = fread(p->buf, 1, n, p->fp);
  909|      0|        if (read != n) {
  ------------------
  |  Branch (909:13): [True: 0, False: 0]
  ------------------
  910|      0|            assert(read < n);
  ------------------
  |  Branch (910:13): [True: 0, False: 0]
  ------------------
  911|      0|            int saved_errno = errno;
  912|      0|            if (!PyErr_CheckSignals() && ferror(p->fp)) {
  ------------------
  |  Branch (912:17): [True: 0, False: 0]
  |  Branch (912:42): [True: 0, False: 0]
  ------------------
  913|      0|                errno = saved_errno;
  914|      0|                PyErr_SetFromErrno(PyExc_OSError);
  915|      0|            }
  916|      0|        }
  917|      0|    }
  918|      0|    else {
  919|      0|        PyObject *res, *mview;
  920|      0|        Py_buffer buf;
  921|       |
  922|      0|        if (PyBuffer_FillInfo(&buf, NULL, p->buf, n, 0, PyBUF_CONTIG) == -1)
  ------------------
  |  |  124|      0|#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
  |  |  ------------------
  |  |  |  |  117|      0|#define PyBUF_ND 0x0008
  |  |  ------------------
  |  |               #define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
  |  |  ------------------
  |  |  |  |  109|      0|#define PyBUF_WRITABLE 0x0001
  |  |  ------------------
  ------------------
  |  Branch (922:13): [True: 0, False: 0]
  ------------------
  923|      0|            return NULL;
  924|      0|        mview = PyMemoryView_FromBuffer(&buf);
  925|      0|        if (mview == NULL)
  ------------------
  |  Branch (925:13): [True: 0, False: 0]
  ------------------
  926|      0|            return NULL;
  927|       |
  928|      0|        res = _PyObject_CallMethod(p->readable, &_Py_ID(readinto), "N", mview);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  929|      0|        if (res == NULL) {
  ------------------
  |  Branch (929:13): [True: 0, False: 0]
  ------------------
  930|      0|            return NULL;
  931|      0|        }
  932|      0|        read = PyNumber_AsSsize_t(res, PyExc_ValueError);
  933|      0|        Py_DECREF(res);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  934|      0|        if (read == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (934:13): [True: 0, False: 0]
  |  Branch (934:27): [True: 0, False: 0]
  ------------------
  935|      0|            return NULL;
  936|      0|        }
  937|      0|        if (read > n) {
  ------------------
  |  Branch (937:13): [True: 0, False: 0]
  ------------------
  938|      0|            PyErr_Format(PyExc_ValueError,
  939|      0|                         "read() returned too much data: "
  940|      0|                         "%zd bytes requested, %zd returned",
  941|      0|                         n, read);
  942|      0|            return NULL;
  943|      0|        }
  944|      0|    }
  945|      0|    if (read != n) {
  ------------------
  |  Branch (945:9): [True: 0, False: 0]
  ------------------
  946|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (946:13): [True: 0, False: 0]
  ------------------
  947|      0|            PyErr_SetString(PyExc_EOFError,
  948|      0|                            "EOF read where not expected");
  949|      0|        }
  950|      0|        return NULL;
  951|      0|    }
  952|      0|    return p->buf;
  953|      0|}
marshal.c:r_long:
 1009|  71.5k|{
 1010|  71.5k|    long x = -1;
 1011|  71.5k|    const unsigned char *buffer;
 1012|       |
 1013|  71.5k|    buffer = (const unsigned char *) r_string(4, p);
 1014|  71.5k|    if (buffer != NULL) {
  ------------------
  |  Branch (1014:9): [True: 71.5k, False: 0]
  ------------------
 1015|  71.5k|        x = buffer[0];
 1016|  71.5k|        x |= (long)buffer[1] << 8;
 1017|  71.5k|        x |= (long)buffer[2] << 16;
 1018|  71.5k|        x |= (long)buffer[3] << 24;
 1019|  71.5k|#if SIZEOF_LONG > 4
 1020|       |        /* Sign extension for 64-bit machines */
 1021|  71.5k|        x |= -(x & 0x80000000L);
 1022|  71.5k|#endif
 1023|  71.5k|    }
 1024|  71.5k|    return x;
 1025|  71.5k|}
marshal.c:read_object:
 1819|    123|{
 1820|    123|    PyObject *v;
 1821|    123|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1821:9): [True: 0, False: 123]
  ------------------
 1822|      0|        fprintf(stderr, "XXX readobject called with exception set\n");
 1823|      0|        return NULL;
 1824|      0|    }
 1825|    123|    if (p->ptr && p->end) {
  ------------------
  |  Branch (1825:9): [True: 123, False: 0]
  |  Branch (1825:19): [True: 123, False: 0]
  ------------------
 1826|    123|        if (PySys_Audit("marshal.loads", "y#", p->ptr, (Py_ssize_t)(p->end - p->ptr)) < 0) {
  ------------------
  |  Branch (1826:13): [True: 0, False: 123]
  ------------------
 1827|      0|            return NULL;
 1828|      0|        }
 1829|    123|    } else if (p->fp || p->readable) {
  ------------------
  |  Branch (1829:16): [True: 0, False: 0]
  |  Branch (1829:25): [True: 0, False: 0]
  ------------------
 1830|      0|        if (PySys_Audit("marshal.load", NULL) < 0) {
  ------------------
  |  Branch (1830:13): [True: 0, False: 0]
  ------------------
 1831|      0|            return NULL;
 1832|      0|        }
 1833|      0|    }
 1834|    123|    v = r_object(p);
 1835|    123|    if (v == NULL && !PyErr_Occurred())
  ------------------
  |  Branch (1835:9): [True: 0, False: 123]
  |  Branch (1835:22): [True: 0, False: 0]
  ------------------
 1836|      0|        PyErr_SetString(PyExc_TypeError, "NULL object in marshal data for object");
 1837|    123|    return v;
 1838|    123|}
marshal.c:r_object:
 1230|  83.2k|{
 1231|       |    /* NULL is a valid return value, it does not necessarily means that
 1232|       |       an exception is set. */
 1233|  83.2k|    PyObject *v, *v2;
 1234|  83.2k|    Py_ssize_t idx = 0;
 1235|  83.2k|    long i, n;
 1236|  83.2k|    int type, code = r_byte(p);
 1237|  83.2k|    int flag, is_interned = 0;
 1238|  83.2k|    PyObject *retval = NULL;
 1239|       |
 1240|  83.2k|    if (code == EOF) {
  ------------------
  |  Branch (1240:9): [True: 0, False: 83.2k]
  ------------------
 1241|      0|        if (PyErr_ExceptionMatches(PyExc_EOFError)) {
  ------------------
  |  Branch (1241:13): [True: 0, False: 0]
  ------------------
 1242|      0|            PyErr_SetString(PyExc_EOFError,
 1243|      0|                            "EOF read where object expected");
 1244|      0|        }
 1245|      0|        return NULL;
 1246|      0|    }
 1247|       |
 1248|  83.2k|    p->depth++;
 1249|       |
 1250|  83.2k|    if (p->depth > MAX_MARSHAL_STACK_DEPTH) {
  ------------------
  |  |   54|  83.2k|#  define MAX_MARSHAL_STACK_DEPTH 2000
  ------------------
  |  Branch (1250:9): [True: 0, False: 83.2k]
  ------------------
 1251|      0|        p->depth--;
 1252|      0|        PyErr_SetString(PyExc_ValueError, "recursion limit exceeded");
 1253|      0|        return NULL;
 1254|      0|    }
 1255|       |
 1256|  83.2k|    flag = code & FLAG_REF;
  ------------------
  |  |  100|  83.2k|#define FLAG_REF                '\x80' /* with a type, add obj to index */
  ------------------
 1257|  83.2k|    type = code & ~FLAG_REF;
  ------------------
  |  |  100|  83.2k|#define FLAG_REF                '\x80' /* with a type, add obj to index */
  ------------------
 1258|       |
 1259|  83.2k|#define R_REF(O) do{\
 1260|  83.2k|    if (flag) \
 1261|  83.2k|        O = r_ref(O, flag, p);\
 1262|  83.2k|} while (0)
 1263|       |
 1264|  83.2k|    switch (type) {
 1265|       |
 1266|      0|    case TYPE_NULL:
  ------------------
  |  |   58|      0|#define TYPE_NULL               '0'
  ------------------
  |  Branch (1266:5): [True: 0, False: 83.2k]
  ------------------
 1267|      0|        break;
 1268|       |
 1269|    479|    case TYPE_NONE:
  ------------------
  |  |   59|    479|#define TYPE_NONE               'N'
  ------------------
  |  Branch (1269:5): [True: 479, False: 82.7k]
  ------------------
 1270|    479|        retval = Py_None;
  ------------------
  |  |  616|    479|#  define Py_None (&_Py_NoneStruct)
  ------------------
 1271|    479|        break;
 1272|       |
 1273|      0|    case TYPE_STOPITER:
  ------------------
  |  |   62|      0|#define TYPE_STOPITER           'S'
  ------------------
  |  Branch (1273:5): [True: 0, False: 83.2k]
  ------------------
 1274|      0|        retval = Py_NewRef(PyExc_StopIteration);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1275|      0|        break;
 1276|       |
 1277|      3|    case TYPE_ELLIPSIS:
  ------------------
  |  |   63|      3|#define TYPE_ELLIPSIS           '.'
  ------------------
  |  Branch (1277:5): [True: 3, False: 83.2k]
  ------------------
 1278|      3|        retval = Py_Ellipsis;
  ------------------
  |  |   14|      3|#  define Py_Ellipsis (&_Py_EllipsisObject)
  ------------------
 1279|      3|        break;
 1280|       |
 1281|     90|    case TYPE_FALSE:
  ------------------
  |  |   60|     90|#define TYPE_FALSE              'F'
  ------------------
  |  Branch (1281:5): [True: 90, False: 83.1k]
  ------------------
 1282|     90|        retval = Py_False;
  ------------------
  |  |   25|     90|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|     90|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     90|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1283|     90|        break;
 1284|       |
 1285|     47|    case TYPE_TRUE:
  ------------------
  |  |   61|     47|#define TYPE_TRUE               'T'
  ------------------
  |  Branch (1285:5): [True: 47, False: 83.2k]
  ------------------
 1286|     47|        retval = Py_True;
  ------------------
  |  |   26|     47|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|     47|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     47|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1287|     47|        break;
 1288|       |
 1289|  3.51k|    case TYPE_INT:
  ------------------
  |  |   90|  3.51k|#define TYPE_INT                'i'  // All versions. 32-bit encoding.
  ------------------
  |  Branch (1289:5): [True: 3.51k, False: 79.7k]
  ------------------
 1290|  3.51k|        n = r_long(p);
 1291|  3.51k|        if (n == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1291:13): [True: 8, False: 3.50k]
  |  Branch (1291:24): [True: 0, False: 8]
  ------------------
 1292|      0|            break;
 1293|      0|        }
 1294|  3.51k|        retval = PyLong_FromLong(n);
 1295|  3.51k|        R_REF(retval);
  ------------------
  |  | 1259|  3.51k|#define R_REF(O) do{\
  |  | 1260|  3.51k|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 721, False: 2.79k]
  |  |  ------------------
  |  | 1261|  3.51k|        O = r_ref(O, flag, p);\
  |  | 1262|  3.51k|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 3.51k]
  |  |  ------------------
  ------------------
 1296|  3.51k|        break;
 1297|       |
 1298|      0|    case TYPE_INT64:
  ------------------
  |  |   96|      0|#define TYPE_INT64              'I'  // Not generated any more.
  ------------------
  |  Branch (1298:5): [True: 0, False: 83.2k]
  ------------------
 1299|      0|        retval = r_long64(p);
 1300|      0|        R_REF(retval);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1301|      0|        break;
 1302|       |
 1303|     12|    case TYPE_LONG:
  ------------------
  |  |   66|     12|#define TYPE_LONG               'l'  // See also TYPE_INT.
  ------------------
  |  Branch (1303:5): [True: 12, False: 83.2k]
  ------------------
 1304|     12|        retval = r_PyLong(p);
 1305|     12|        R_REF(retval);
  ------------------
  |  | 1259|     12|#define R_REF(O) do{\
  |  | 1260|     12|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 2, False: 10]
  |  |  ------------------
  |  | 1261|     12|        O = r_ref(O, flag, p);\
  |  | 1262|     12|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 12]
  |  |  ------------------
  ------------------
 1306|     12|        break;
 1307|       |
 1308|      0|    case TYPE_FLOAT:
  ------------------
  |  |   95|      0|#define TYPE_FLOAT              'f'  // Generated for version 0 only.
  ------------------
  |  Branch (1308:5): [True: 0, False: 83.2k]
  ------------------
 1309|      0|        {
 1310|      0|            double x = r_float_str(p);
 1311|      0|            if (x == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (1311:17): [True: 0, False: 0]
  |  Branch (1311:30): [True: 0, False: 0]
  ------------------
 1312|      0|                break;
 1313|      0|            retval = PyFloat_FromDouble(x);
 1314|      0|            R_REF(retval);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1315|      0|            break;
 1316|      0|        }
 1317|       |
 1318|      4|    case TYPE_BINARY_FLOAT:
  ------------------
  |  |   64|      4|#define TYPE_BINARY_FLOAT       'g'  // Version 0 uses TYPE_FLOAT instead.
  ------------------
  |  Branch (1318:5): [True: 4, False: 83.2k]
  ------------------
 1319|      4|        {
 1320|      4|            double x = r_float_bin(p);
 1321|      4|            if (x == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (1321:17): [True: 0, False: 4]
  |  Branch (1321:30): [True: 0, False: 0]
  ------------------
 1322|      0|                break;
 1323|      4|            retval = PyFloat_FromDouble(x);
 1324|      4|            R_REF(retval);
  ------------------
  |  | 1259|      4|#define R_REF(O) do{\
  |  | 1260|      4|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 4]
  |  |  ------------------
  |  | 1261|      4|        O = r_ref(O, flag, p);\
  |  | 1262|      4|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 4]
  |  |  ------------------
  ------------------
 1325|      4|            break;
 1326|      4|        }
 1327|       |
 1328|      0|    case TYPE_COMPLEX:
  ------------------
  |  |   94|      0|#define TYPE_COMPLEX            'x'  // Generated for version 0 only.
  ------------------
  |  Branch (1328:5): [True: 0, False: 83.2k]
  ------------------
 1329|      0|        {
 1330|      0|            Py_complex c;
 1331|      0|            c.real = r_float_str(p);
 1332|      0|            if (c.real == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (1332:17): [True: 0, False: 0]
  |  Branch (1332:35): [True: 0, False: 0]
  ------------------
 1333|      0|                break;
 1334|      0|            c.imag = r_float_str(p);
 1335|      0|            if (c.imag == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (1335:17): [True: 0, False: 0]
  |  Branch (1335:35): [True: 0, False: 0]
  ------------------
 1336|      0|                break;
 1337|      0|            retval = PyComplex_FromCComplex(c);
 1338|      0|            R_REF(retval);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1339|      0|            break;
 1340|      0|        }
 1341|       |
 1342|      0|    case TYPE_BINARY_COMPLEX:
  ------------------
  |  |   65|      0|#define TYPE_BINARY_COMPLEX     'y'  // Version 0 uses TYPE_COMPLEX instead.
  ------------------
  |  Branch (1342:5): [True: 0, False: 83.2k]
  ------------------
 1343|      0|        {
 1344|      0|            Py_complex c;
 1345|      0|            c.real = r_float_bin(p);
 1346|      0|            if (c.real == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (1346:17): [True: 0, False: 0]
  |  Branch (1346:35): [True: 0, False: 0]
  ------------------
 1347|      0|                break;
 1348|      0|            c.imag = r_float_bin(p);
 1349|      0|            if (c.imag == -1.0 && PyErr_Occurred())
  ------------------
  |  Branch (1349:17): [True: 0, False: 0]
  |  Branch (1349:35): [True: 0, False: 0]
  ------------------
 1350|      0|                break;
 1351|      0|            retval = PyComplex_FromCComplex(c);
 1352|      0|            R_REF(retval);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1353|      0|            break;
 1354|      0|        }
 1355|       |
 1356|  10.0k|    case TYPE_STRING:
  ------------------
  |  |   67|  10.0k|#define TYPE_STRING             's'  // Bytes. (Name comes from Python 2.)
  ------------------
  |  Branch (1356:5): [True: 10.0k, False: 73.2k]
  ------------------
 1357|  10.0k|        {
 1358|  10.0k|            const char *ptr;
 1359|  10.0k|            n = r_long(p);
 1360|  10.0k|            if (n < 0 || n > SIZE32_MAX) {
  ------------------
  |  |  230|  10.0k|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1360:17): [True: 0, False: 10.0k]
  |  Branch (1360:26): [True: 0, False: 10.0k]
  ------------------
 1361|      0|                if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1361:21): [True: 0, False: 0]
  ------------------
 1362|      0|                    PyErr_SetString(PyExc_ValueError,
 1363|      0|                        "bad marshal data (bytes object size out of range)");
 1364|      0|                }
 1365|      0|                break;
 1366|      0|            }
 1367|  10.0k|            ptr = r_string(n, p);
 1368|  10.0k|            if (ptr == NULL) {
  ------------------
  |  Branch (1368:17): [True: 0, False: 10.0k]
  ------------------
 1369|      0|                break;
 1370|      0|            }
 1371|       |            // Get a singleton for 1-byte string
 1372|  10.0k|            retval = PyBytes_FromStringAndSize(ptr, n);  // can be NULL
 1373|  10.0k|            R_REF(retval);
  ------------------
  |  | 1259|  10.0k|#define R_REF(O) do{\
  |  | 1260|  10.0k|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 3.89k, False: 6.11k]
  |  |  ------------------
  |  | 1261|  10.0k|        O = r_ref(O, flag, p);\
  |  | 1262|  10.0k|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 10.0k]
  |  |  ------------------
  ------------------
 1374|  10.0k|            break;
 1375|  10.0k|        }
 1376|       |
 1377|      0|    case TYPE_ASCII_INTERNED:
  ------------------
  |  |   85|      0|#define TYPE_ASCII_INTERNED     'A'
  ------------------
  |  Branch (1377:5): [True: 0, False: 83.2k]
  ------------------
 1378|      0|        is_interned = 1;
 1379|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1380|    306|    case TYPE_ASCII:
  ------------------
  |  |   84|    306|#define TYPE_ASCII              'a'
  ------------------
  |  Branch (1380:5): [True: 306, False: 82.9k]
  ------------------
 1381|    306|        n = r_long(p);
 1382|    306|        if (n < 0 || n > SIZE32_MAX) {
  ------------------
  |  |  230|    306|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1382:13): [True: 0, False: 306]
  |  Branch (1382:22): [True: 0, False: 306]
  ------------------
 1383|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1383:17): [True: 0, False: 0]
  ------------------
 1384|      0|                PyErr_SetString(PyExc_ValueError,
 1385|      0|                    "bad marshal data (string size out of range)");
 1386|      0|            }
 1387|      0|            break;
 1388|      0|        }
 1389|    306|        goto _read_ascii;
 1390|       |
 1391|  17.0k|    case TYPE_SHORT_ASCII_INTERNED:
  ------------------
  |  |   87|  17.0k|#define TYPE_SHORT_ASCII_INTERNED 'Z'
  ------------------
  |  Branch (1391:5): [True: 17.0k, False: 66.2k]
  ------------------
 1392|  17.0k|        is_interned = 1;
 1393|  17.0k|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|  17.0k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1394|  19.9k|    case TYPE_SHORT_ASCII:
  ------------------
  |  |   86|  19.9k|#define TYPE_SHORT_ASCII        'z'
  ------------------
  |  Branch (1394:5): [True: 2.95k, False: 80.3k]
  ------------------
 1395|  19.9k|        n = r_byte(p);
 1396|  19.9k|        if (n == EOF) {
  ------------------
  |  Branch (1396:13): [True: 0, False: 19.9k]
  ------------------
 1397|      0|            break;
 1398|      0|        }
 1399|  20.2k|    _read_ascii:
 1400|  20.2k|        {
 1401|  20.2k|            const char *ptr;
 1402|  20.2k|            ptr = r_string(n, p);
 1403|  20.2k|            if (ptr == NULL)
  ------------------
  |  Branch (1403:17): [True: 0, False: 20.2k]
  ------------------
 1404|      0|                break;
 1405|  20.2k|            v = PyUnicode_FromKindAndData(PyUnicode_1BYTE_KIND, ptr, n);
 1406|  20.2k|            if (v == NULL)
  ------------------
  |  Branch (1406:17): [True: 0, False: 20.2k]
  ------------------
 1407|      0|                break;
 1408|  20.2k|            if (is_interned) {
  ------------------
  |  Branch (1408:17): [True: 17.0k, False: 3.25k]
  ------------------
 1409|       |                // marshal is meant to serialize .pyc files with code
 1410|       |                // objects, and code-related strings are currently immortal.
 1411|  17.0k|                PyInterpreterState *interp = _PyInterpreterState_GET();
 1412|  17.0k|                _PyUnicode_InternImmortal(interp, &v);
 1413|  17.0k|            }
 1414|  20.2k|            retval = v;
 1415|  20.2k|            R_REF(retval);
  ------------------
  |  | 1259|  20.2k|#define R_REF(O) do{\
  |  | 1260|  20.2k|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 17.1k, False: 3.12k]
  |  |  ------------------
  |  | 1261|  20.2k|        O = r_ref(O, flag, p);\
  |  | 1262|  20.2k|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 20.2k]
  |  |  ------------------
  ------------------
 1416|  20.2k|            break;
 1417|  20.2k|        }
 1418|       |
 1419|      0|    case TYPE_INTERNED:
  ------------------
  |  |   83|      0|#define TYPE_INTERNED           't' // Version 1+
  ------------------
  |  Branch (1419:5): [True: 0, False: 83.2k]
  ------------------
 1420|      0|        is_interned = 1;
 1421|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1422|    901|    case TYPE_UNICODE:
  ------------------
  |  |   73|    901|#define TYPE_UNICODE            'u'
  ------------------
  |  Branch (1422:5): [True: 901, False: 82.3k]
  ------------------
 1423|    901|        {
 1424|    901|        const char *buffer;
 1425|       |
 1426|    901|        n = r_long(p);
 1427|    901|        if (n < 0 || n > SIZE32_MAX) {
  ------------------
  |  |  230|    901|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1427:13): [True: 0, False: 901]
  |  Branch (1427:22): [True: 0, False: 901]
  ------------------
 1428|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1428:17): [True: 0, False: 0]
  ------------------
 1429|      0|                PyErr_SetString(PyExc_ValueError,
 1430|      0|                    "bad marshal data (string size out of range)");
 1431|      0|            }
 1432|      0|            break;
 1433|      0|        }
 1434|    901|        if (n != 0) {
  ------------------
  |  Branch (1434:13): [True: 901, False: 0]
  ------------------
 1435|    901|            buffer = r_string(n, p);
 1436|    901|            if (buffer == NULL)
  ------------------
  |  Branch (1436:17): [True: 0, False: 901]
  ------------------
 1437|      0|                break;
 1438|    901|            v = PyUnicode_DecodeUTF8(buffer, n, "surrogatepass");
 1439|    901|        }
 1440|      0|        else {
 1441|      0|            v = Py_GetConstant(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      0|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
 1442|      0|        }
 1443|    901|        if (v == NULL)
  ------------------
  |  Branch (1443:13): [True: 0, False: 901]
  ------------------
 1444|      0|            break;
 1445|    901|        if (is_interned) {
  ------------------
  |  Branch (1445:13): [True: 0, False: 901]
  ------------------
 1446|       |            // marshal is meant to serialize .pyc files with code
 1447|       |            // objects, and code-related strings are currently immortal.
 1448|      0|            PyInterpreterState *interp = _PyInterpreterState_GET();
 1449|      0|            _PyUnicode_InternImmortal(interp, &v);
 1450|      0|        }
 1451|    901|        retval = v;
 1452|    901|        R_REF(retval);
  ------------------
  |  | 1259|    901|#define R_REF(O) do{\
  |  | 1260|    901|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 901]
  |  |  ------------------
  |  | 1261|    901|        O = r_ref(O, flag, p);\
  |  | 1262|    901|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 901]
  |  |  ------------------
  ------------------
 1453|    901|        break;
 1454|    901|        }
 1455|       |
 1456|  7.99k|    case TYPE_SMALL_TUPLE:
  ------------------
  |  |   91|  7.99k|#define TYPE_SMALL_TUPLE        ')'  // Version 4+
  ------------------
  |  Branch (1456:5): [True: 7.99k, False: 75.2k]
  ------------------
 1457|  7.99k|        n = r_byte(p);
 1458|  7.99k|        if (n == EOF) {
  ------------------
  |  Branch (1458:13): [True: 0, False: 7.99k]
  ------------------
 1459|      0|            break;
 1460|      0|        }
 1461|  7.99k|        goto _read_tuple;
 1462|  7.99k|    case TYPE_TUPLE:
  ------------------
  |  |   68|      4|#define TYPE_TUPLE              '('  // See also TYPE_SMALL_TUPLE.
  ------------------
  |  Branch (1462:5): [True: 4, False: 83.2k]
  ------------------
 1463|      4|        n = r_long(p);
 1464|      4|        if (n < 0 || n > SIZE32_MAX) {
  ------------------
  |  |  230|      4|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1464:13): [True: 0, False: 4]
  |  Branch (1464:22): [True: 0, False: 4]
  ------------------
 1465|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1465:17): [True: 0, False: 0]
  ------------------
 1466|      0|                PyErr_SetString(PyExc_ValueError,
 1467|      0|                    "bad marshal data (tuple size out of range)");
 1468|      0|            }
 1469|      0|            break;
 1470|      0|        }
 1471|  7.99k|    _read_tuple:
 1472|  7.99k|        idx = r_ref_reserve(flag, p);
 1473|  7.99k|        if (idx < 0)
  ------------------
  |  Branch (1473:13): [True: 0, False: 7.99k]
  ------------------
 1474|      0|            break;
 1475|  7.99k|        v = PyTuple_New(n);
 1476|  7.99k|        if (v == NULL)
  ------------------
  |  Branch (1476:13): [True: 0, False: 7.99k]
  ------------------
 1477|      0|            break;
 1478|       |
 1479|  56.6k|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1479:21): [True: 48.6k, False: 7.99k]
  ------------------
 1480|  48.6k|            v2 = r_object(p);
 1481|  48.6k|            if ( v2 == NULL ) {
  ------------------
  |  Branch (1481:18): [True: 0, False: 48.6k]
  ------------------
 1482|      0|                if (!PyErr_Occurred())
  ------------------
  |  Branch (1482:21): [True: 0, False: 0]
  ------------------
 1483|      0|                    PyErr_SetString(PyExc_TypeError,
 1484|      0|                        "NULL object in marshal data for tuple");
 1485|      0|                Py_SETREF(v, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1486|      0|                break;
 1487|      0|            }
 1488|  48.6k|            PyTuple_SET_ITEM(v, i, v2);
  ------------------
  |  |   40|  48.6k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  48.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  48.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  48.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1489|  48.6k|        }
 1490|  7.99k|        retval = r_ref_insert(v, idx, flag, p);
 1491|  7.99k|        break;
 1492|       |
 1493|      0|    case TYPE_LIST:
  ------------------
  |  |   69|      0|#define TYPE_LIST               '['
  ------------------
  |  Branch (1493:5): [True: 0, False: 83.2k]
  ------------------
 1494|      0|        n = r_long(p);
 1495|      0|        if (n < 0 || n > SIZE32_MAX) {
  ------------------
  |  |  230|      0|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1495:13): [True: 0, False: 0]
  |  Branch (1495:22): [True: 0, False: 0]
  ------------------
 1496|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1496:17): [True: 0, False: 0]
  ------------------
 1497|      0|                PyErr_SetString(PyExc_ValueError,
 1498|      0|                    "bad marshal data (list size out of range)");
 1499|      0|            }
 1500|      0|            break;
 1501|      0|        }
 1502|      0|        v = PyList_New(n);
 1503|      0|        R_REF(v);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1504|      0|        if (v == NULL)
  ------------------
  |  Branch (1504:13): [True: 0, False: 0]
  ------------------
 1505|      0|            break;
 1506|      0|        for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1506:21): [True: 0, False: 0]
  ------------------
 1507|      0|            v2 = r_object(p);
 1508|      0|            if ( v2 == NULL ) {
  ------------------
  |  Branch (1508:18): [True: 0, False: 0]
  ------------------
 1509|      0|                if (!PyErr_Occurred())
  ------------------
  |  Branch (1509:21): [True: 0, False: 0]
  ------------------
 1510|      0|                    PyErr_SetString(PyExc_TypeError,
 1511|      0|                        "NULL object in marshal data for list");
 1512|      0|                Py_SETREF(v, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1513|      0|                break;
 1514|      0|            }
 1515|      0|            PyList_SET_ITEM(v, i, v2);
  ------------------
  |  |   50|      0|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1516|      0|        }
 1517|      0|        retval = v;
 1518|      0|        break;
 1519|       |
 1520|      0|    case TYPE_DICT:
  ------------------
  |  |   70|      0|#define TYPE_DICT               '{'
  ------------------
  |  Branch (1520:5): [True: 0, False: 83.2k]
  ------------------
 1521|      0|    case TYPE_FROZENDICT:
  ------------------
  |  |   71|      0|#define TYPE_FROZENDICT         '}'
  ------------------
  |  Branch (1521:5): [True: 0, False: 83.2k]
  ------------------
 1522|      0|        v = PyDict_New();
 1523|      0|        if (v == NULL) {
  ------------------
  |  Branch (1523:13): [True: 0, False: 0]
  ------------------
 1524|      0|            break;
 1525|      0|        }
 1526|      0|        if (type == TYPE_DICT) {
  ------------------
  |  |   70|      0|#define TYPE_DICT               '{'
  ------------------
  |  Branch (1526:13): [True: 0, False: 0]
  ------------------
 1527|      0|            R_REF(v);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1528|      0|            if (v == NULL) {
  ------------------
  |  Branch (1528:17): [True: 0, False: 0]
  ------------------
 1529|      0|                break;
 1530|      0|            }
 1531|      0|        }
 1532|      0|        else {
 1533|      0|            idx = r_ref_reserve(flag, p);
 1534|      0|            if (idx < 0) {
  ------------------
  |  Branch (1534:17): [True: 0, False: 0]
  ------------------
 1535|      0|                Py_CLEAR(v);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1536|      0|                break;
 1537|      0|            }
 1538|      0|        }
 1539|      0|        for (;;) {
 1540|      0|            PyObject *key, *val;
 1541|      0|            key = r_object(p);
 1542|      0|            if (key == NULL)
  ------------------
  |  Branch (1542:17): [True: 0, False: 0]
  ------------------
 1543|      0|                break;
 1544|      0|            val = r_object(p);
 1545|      0|            if (val == NULL) {
  ------------------
  |  Branch (1545:17): [True: 0, False: 0]
  ------------------
 1546|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1547|      0|                break;
 1548|      0|            }
 1549|      0|            if (PyDict_SetItem(v, key, val) < 0) {
  ------------------
  |  Branch (1549:17): [True: 0, False: 0]
  ------------------
 1550|      0|                Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1551|      0|                Py_DECREF(val);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1552|      0|                break;
 1553|      0|            }
 1554|      0|            Py_DECREF(key);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1555|      0|            Py_DECREF(val);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1556|      0|        }
 1557|      0|        if (PyErr_Occurred()) {
  ------------------
  |  Branch (1557:13): [True: 0, False: 0]
  ------------------
 1558|      0|            Py_CLEAR(v);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1559|      0|        }
 1560|      0|        if (type == TYPE_FROZENDICT && v != NULL) {
  ------------------
  |  |   71|      0|#define TYPE_FROZENDICT         '}'
  ------------------
  |  Branch (1560:13): [True: 0, False: 0]
  |  Branch (1560:40): [True: 0, False: 0]
  ------------------
 1561|      0|            Py_SETREF(v, PyFrozenDict_New(v));
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1562|      0|            v = r_ref_insert(v, idx, flag, p);
 1563|      0|        }
 1564|      0|        retval = v;
 1565|      0|        break;
 1566|       |
 1567|      0|    case TYPE_SET:
  ------------------
  |  |   76|      0|#define TYPE_SET                '<'
  ------------------
  |  Branch (1567:5): [True: 0, False: 83.2k]
  ------------------
 1568|     13|    case TYPE_FROZENSET:
  ------------------
  |  |   77|     13|#define TYPE_FROZENSET          '>'
  ------------------
  |  Branch (1568:5): [True: 13, False: 83.2k]
  ------------------
 1569|     13|        n = r_long(p);
 1570|     13|        if (n < 0 || n > SIZE32_MAX) {
  ------------------
  |  |  230|     13|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1570:13): [True: 0, False: 13]
  |  Branch (1570:22): [True: 0, False: 13]
  ------------------
 1571|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1571:17): [True: 0, False: 0]
  ------------------
 1572|      0|                PyErr_SetString(PyExc_ValueError,
 1573|      0|                    "bad marshal data (set size out of range)");
 1574|      0|            }
 1575|      0|            break;
 1576|      0|        }
 1577|       |
 1578|     13|        if (n == 0 && type == TYPE_FROZENSET) {
  ------------------
  |  |   77|      0|#define TYPE_FROZENSET          '>'
  ------------------
  |  Branch (1578:13): [True: 0, False: 13]
  |  Branch (1578:23): [True: 0, False: 0]
  ------------------
 1579|       |            /* call frozenset() to get the empty frozenset singleton */
 1580|      0|            v = _PyObject_CallNoArgs((PyObject*)&PyFrozenSet_Type);
 1581|      0|            if (v == NULL)
  ------------------
  |  Branch (1581:17): [True: 0, False: 0]
  ------------------
 1582|      0|                break;
 1583|      0|            R_REF(v);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1584|      0|            retval = v;
 1585|      0|        }
 1586|     13|        else {
 1587|     13|            v = (type == TYPE_SET) ? PySet_New(NULL) : PyFrozenSet_New(NULL);
  ------------------
  |  |   76|     13|#define TYPE_SET                '<'
  ------------------
  |  Branch (1587:17): [True: 0, False: 13]
  ------------------
 1588|     13|            if (type == TYPE_SET) {
  ------------------
  |  |   76|     13|#define TYPE_SET                '<'
  ------------------
  |  Branch (1588:17): [True: 0, False: 13]
  ------------------
 1589|      0|                R_REF(v);
  ------------------
  |  | 1259|      0|#define R_REF(O) do{\
  |  | 1260|      0|    if (flag) \
  |  |  ------------------
  |  |  |  Branch (1260:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1261|      0|        O = r_ref(O, flag, p);\
  |  | 1262|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (1262:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1590|     13|            } else {
 1591|       |                /* must use delayed registration of frozensets because they must
 1592|       |                 * be init with a refcount of 1
 1593|       |                 */
 1594|     13|                idx = r_ref_reserve(flag, p);
 1595|     13|                if (idx < 0)
  ------------------
  |  Branch (1595:21): [True: 0, False: 13]
  ------------------
 1596|      0|                    Py_CLEAR(v); /* signal error */
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1597|     13|            }
 1598|     13|            if (v == NULL)
  ------------------
  |  Branch (1598:17): [True: 0, False: 13]
  ------------------
 1599|      0|                break;
 1600|       |
 1601|     62|            for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1601:25): [True: 49, False: 13]
  ------------------
 1602|     49|                v2 = r_object(p);
 1603|     49|                if ( v2 == NULL ) {
  ------------------
  |  Branch (1603:22): [True: 0, False: 49]
  ------------------
 1604|      0|                    if (!PyErr_Occurred())
  ------------------
  |  Branch (1604:25): [True: 0, False: 0]
  ------------------
 1605|      0|                        PyErr_SetString(PyExc_TypeError,
 1606|      0|                            "NULL object in marshal data for set");
 1607|      0|                    Py_SETREF(v, NULL);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1608|      0|                    break;
 1609|      0|                }
 1610|     49|                if (PySet_Add(v, v2) == -1) {
  ------------------
  |  Branch (1610:21): [True: 0, False: 49]
  ------------------
 1611|      0|                    Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1612|      0|                    Py_DECREF(v2);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1613|      0|                    v = NULL;
 1614|      0|                    break;
 1615|      0|                }
 1616|     49|                Py_DECREF(v2);
  ------------------
  |  |  430|     49|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     49|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     49|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1617|     49|            }
 1618|     13|            if (type != TYPE_SET)
  ------------------
  |  |   76|     13|#define TYPE_SET                '<'
  ------------------
  |  Branch (1618:17): [True: 13, False: 0]
  ------------------
 1619|     13|                v = r_ref_insert(v, idx, flag, p);
 1620|     13|            retval = v;
 1621|     13|        }
 1622|     13|        break;
 1623|       |
 1624|  3.40k|    case TYPE_CODE:
  ------------------
  |  |   72|  3.40k|#define TYPE_CODE               'c'
  ------------------
  |  Branch (1624:5): [True: 3.40k, False: 79.8k]
  ------------------
 1625|  3.40k|        {
 1626|  3.40k|            int argcount;
 1627|  3.40k|            int posonlyargcount;
 1628|  3.40k|            int kwonlyargcount;
 1629|  3.40k|            int stacksize;
 1630|  3.40k|            int flags;
 1631|  3.40k|            PyObject *code = NULL;
 1632|  3.40k|            PyObject *consts = NULL;
 1633|  3.40k|            PyObject *names = NULL;
 1634|  3.40k|            PyObject *localsplusnames = NULL;
 1635|  3.40k|            PyObject *localspluskinds = NULL;
 1636|  3.40k|            PyObject *filename = NULL;
 1637|  3.40k|            PyObject *name = NULL;
 1638|  3.40k|            PyObject *qualname = NULL;
 1639|  3.40k|            int firstlineno;
 1640|  3.40k|            PyObject* linetable = NULL;
 1641|  3.40k|            PyObject *exceptiontable = NULL;
 1642|       |
 1643|  3.40k|            if (!p->allow_code) {
  ------------------
  |  Branch (1643:17): [True: 0, False: 3.40k]
  ------------------
 1644|      0|                PyErr_SetString(PyExc_ValueError,
 1645|      0|                                "unmarshalling code objects is disallowed");
 1646|      0|                break;
 1647|      0|            }
 1648|  3.40k|            idx = r_ref_reserve(flag, p);
 1649|  3.40k|            if (idx < 0)
  ------------------
  |  Branch (1649:17): [True: 0, False: 3.40k]
  ------------------
 1650|      0|                break;
 1651|       |
 1652|  3.40k|            v = NULL;
 1653|       |
 1654|       |            /* XXX ignore long->int overflows for now */
 1655|  3.40k|            argcount = (int)r_long(p);
 1656|  3.40k|            if (argcount == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1656:17): [True: 0, False: 3.40k]
  |  Branch (1656:35): [True: 0, False: 0]
  ------------------
 1657|      0|                goto code_error;
 1658|  3.40k|            posonlyargcount = (int)r_long(p);
 1659|  3.40k|            if (posonlyargcount == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1659:17): [True: 0, False: 3.40k]
  |  Branch (1659:42): [True: 0, False: 0]
  ------------------
 1660|      0|                goto code_error;
 1661|      0|            }
 1662|  3.40k|            kwonlyargcount = (int)r_long(p);
 1663|  3.40k|            if (kwonlyargcount == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1663:17): [True: 0, False: 3.40k]
  |  Branch (1663:41): [True: 0, False: 0]
  ------------------
 1664|      0|                goto code_error;
 1665|  3.40k|            stacksize = (int)r_long(p);
 1666|  3.40k|            if (stacksize == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1666:17): [True: 0, False: 3.40k]
  |  Branch (1666:36): [True: 0, False: 0]
  ------------------
 1667|      0|                goto code_error;
 1668|  3.40k|            flags = (int)r_long(p);
 1669|  3.40k|            if (flags == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1669:17): [True: 0, False: 3.40k]
  |  Branch (1669:32): [True: 0, False: 0]
  ------------------
 1670|      0|                goto code_error;
 1671|  3.40k|            code = r_object(p);
 1672|  3.40k|            if (code == NULL)
  ------------------
  |  Branch (1672:17): [True: 0, False: 3.40k]
  ------------------
 1673|      0|                goto code_error;
 1674|  3.40k|            consts = r_object(p);
 1675|  3.40k|            if (consts == NULL)
  ------------------
  |  Branch (1675:17): [True: 0, False: 3.40k]
  ------------------
 1676|      0|                goto code_error;
 1677|  3.40k|            names = r_object(p);
 1678|  3.40k|            if (names == NULL)
  ------------------
  |  Branch (1678:17): [True: 0, False: 3.40k]
  ------------------
 1679|      0|                goto code_error;
 1680|  3.40k|            localsplusnames = r_object(p);
 1681|  3.40k|            if (localsplusnames == NULL)
  ------------------
  |  Branch (1681:17): [True: 0, False: 3.40k]
  ------------------
 1682|      0|                goto code_error;
 1683|  3.40k|            localspluskinds = r_object(p);
 1684|  3.40k|            if (localspluskinds == NULL)
  ------------------
  |  Branch (1684:17): [True: 0, False: 3.40k]
  ------------------
 1685|      0|                goto code_error;
 1686|  3.40k|            filename = r_object(p);
 1687|  3.40k|            if (filename == NULL)
  ------------------
  |  Branch (1687:17): [True: 0, False: 3.40k]
  ------------------
 1688|      0|                goto code_error;
 1689|  3.40k|            name = r_object(p);
 1690|  3.40k|            if (name == NULL)
  ------------------
  |  Branch (1690:17): [True: 0, False: 3.40k]
  ------------------
 1691|      0|                goto code_error;
 1692|  3.40k|            qualname = r_object(p);
 1693|  3.40k|            if (qualname == NULL)
  ------------------
  |  Branch (1693:17): [True: 0, False: 3.40k]
  ------------------
 1694|      0|                goto code_error;
 1695|  3.40k|            firstlineno = (int)r_long(p);
 1696|  3.40k|            if (firstlineno == -1 && PyErr_Occurred())
  ------------------
  |  Branch (1696:17): [True: 0, False: 3.40k]
  |  Branch (1696:38): [True: 0, False: 0]
  ------------------
 1697|      0|                goto code_error;
 1698|  3.40k|            linetable = r_object(p);
 1699|  3.40k|            if (linetable == NULL)
  ------------------
  |  Branch (1699:17): [True: 0, False: 3.40k]
  ------------------
 1700|      0|                goto code_error;
 1701|  3.40k|            exceptiontable = r_object(p);
 1702|  3.40k|            if (exceptiontable == NULL)
  ------------------
  |  Branch (1702:17): [True: 0, False: 3.40k]
  ------------------
 1703|      0|                goto code_error;
 1704|       |
 1705|  3.40k|            struct _PyCodeConstructor con = {
 1706|  3.40k|                .filename = filename,
 1707|  3.40k|                .name = name,
 1708|  3.40k|                .qualname = qualname,
 1709|  3.40k|                .flags = flags,
 1710|       |
 1711|  3.40k|                .code = code,
 1712|  3.40k|                .firstlineno = firstlineno,
 1713|  3.40k|                .linetable = linetable,
 1714|       |
 1715|  3.40k|                .consts = consts,
 1716|  3.40k|                .names = names,
 1717|       |
 1718|  3.40k|                .localsplusnames = localsplusnames,
 1719|  3.40k|                .localspluskinds = localspluskinds,
 1720|       |
 1721|  3.40k|                .argcount = argcount,
 1722|  3.40k|                .posonlyargcount = posonlyargcount,
 1723|  3.40k|                .kwonlyargcount = kwonlyargcount,
 1724|       |
 1725|  3.40k|                .stacksize = stacksize,
 1726|       |
 1727|  3.40k|                .exceptiontable = exceptiontable,
 1728|  3.40k|            };
 1729|       |
 1730|  3.40k|            if (_PyCode_Validate(&con) < 0) {
  ------------------
  |  Branch (1730:17): [True: 0, False: 3.40k]
  ------------------
 1731|      0|                goto code_error;
 1732|      0|            }
 1733|       |
 1734|  3.40k|            v = (PyObject *)_PyCode_New(&con);
 1735|  3.40k|            if (v == NULL) {
  ------------------
  |  Branch (1735:17): [True: 0, False: 3.40k]
  ------------------
 1736|      0|                goto code_error;
 1737|      0|            }
 1738|       |
 1739|  3.40k|            v = r_ref_insert(v, idx, flag, p);
 1740|       |
 1741|  3.40k|          code_error:
 1742|  3.40k|            if (v == NULL && !PyErr_Occurred()) {
  ------------------
  |  Branch (1742:17): [True: 0, False: 3.40k]
  |  Branch (1742:30): [True: 0, False: 0]
  ------------------
 1743|      0|                PyErr_SetString(PyExc_TypeError,
 1744|      0|                    "NULL object in marshal data for code object");
 1745|      0|            }
 1746|  3.40k|            Py_XDECREF(code);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1747|  3.40k|            Py_XDECREF(consts);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1748|  3.40k|            Py_XDECREF(names);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1749|  3.40k|            Py_XDECREF(localsplusnames);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1750|  3.40k|            Py_XDECREF(localspluskinds);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1751|  3.40k|            Py_XDECREF(filename);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1752|  3.40k|            Py_XDECREF(name);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1753|  3.40k|            Py_XDECREF(qualname);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1754|  3.40k|            Py_XDECREF(linetable);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1755|  3.40k|            Py_XDECREF(exceptiontable);
  ------------------
  |  |  524|  3.40k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.40k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.40k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1756|  3.40k|        }
 1757|      0|        retval = v;
 1758|  3.40k|        break;
 1759|       |
 1760|  36.3k|    case TYPE_REF:
  ------------------
  |  |   99|  36.3k|#define TYPE_REF                'r'
  ------------------
  |  Branch (1760:5): [True: 36.3k, False: 46.8k]
  ------------------
 1761|  36.3k|        n = r_long(p);
 1762|  36.3k|        if (n < 0 || n >= PyList_GET_SIZE(p->refs)) {
  ------------------
  |  |   38|  36.3k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  36.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1762:13): [True: 0, False: 36.3k]
  |  Branch (1762:22): [True: 0, False: 36.3k]
  ------------------
 1763|      0|            if (!PyErr_Occurred()) {
  ------------------
  |  Branch (1763:17): [True: 0, False: 0]
  ------------------
 1764|      0|                PyErr_SetString(PyExc_ValueError,
 1765|      0|                    "bad marshal data (invalid reference)");
 1766|      0|            }
 1767|      0|            break;
 1768|      0|        }
 1769|  36.3k|        v = PyList_GET_ITEM(p->refs, n);
  ------------------
  |  |   40|  36.3k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  36.3k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1769:13): [True: 36.3k, False: 0]
  ------------------
 1770|  36.3k|        if (v == Py_None) {
  ------------------
  |  |  616|  36.3k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1770:13): [True: 0, False: 36.3k]
  ------------------
 1771|      0|            PyErr_SetString(PyExc_ValueError, "bad marshal data (invalid reference)");
 1772|      0|            break;
 1773|      0|        }
 1774|  36.3k|        retval = Py_NewRef(v);
  ------------------
  |  |  550|  36.3k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  36.3k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  36.3k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1775|  36.3k|        break;
 1776|       |
 1777|    126|    case TYPE_SLICE:
  ------------------
  |  |   79|    126|#define TYPE_SLICE              ':'
  ------------------
  |  Branch (1777:5): [True: 126, False: 83.1k]
  ------------------
 1778|    126|    {
 1779|    126|        Py_ssize_t idx = r_ref_reserve(flag, p);
 1780|    126|        if (idx < 0) {
  ------------------
  |  Branch (1780:13): [True: 0, False: 126]
  ------------------
 1781|      0|            break;
 1782|      0|        }
 1783|    126|        PyObject *stop = NULL;
 1784|    126|        PyObject *step = NULL;
 1785|    126|        PyObject *start = r_object(p);
 1786|    126|        if (start == NULL) {
  ------------------
  |  Branch (1786:13): [True: 0, False: 126]
  ------------------
 1787|      0|            goto cleanup;
 1788|      0|        }
 1789|    126|        stop = r_object(p);
 1790|    126|        if (stop == NULL) {
  ------------------
  |  Branch (1790:13): [True: 0, False: 126]
  ------------------
 1791|      0|            goto cleanup;
 1792|      0|        }
 1793|    126|        step = r_object(p);
 1794|    126|        if (step == NULL) {
  ------------------
  |  Branch (1794:13): [True: 0, False: 126]
  ------------------
 1795|      0|            goto cleanup;
 1796|      0|        }
 1797|    126|        retval = PySlice_New(start, stop, step);
 1798|    126|        r_ref_insert(retval, idx, flag, p);
 1799|    126|    cleanup:
 1800|    126|        Py_XDECREF(start);
  ------------------
  |  |  524|    126|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1801|    126|        Py_XDECREF(stop);
  ------------------
  |  |  524|    126|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1802|    126|        Py_XDECREF(step);
  ------------------
  |  |  524|    126|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    126|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    126|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1803|    126|        break;
 1804|    126|    }
 1805|       |
 1806|      0|    default:
  ------------------
  |  Branch (1806:5): [True: 0, False: 83.2k]
  ------------------
 1807|       |        /* Bogus data got written, which isn't ideal.
 1808|       |           This will let you keep working and recover. */
 1809|      0|        PyErr_SetString(PyExc_ValueError, "bad marshal data (unknown type code)");
 1810|      0|        break;
 1811|       |
 1812|  83.2k|    }
 1813|  83.2k|    p->depth--;
 1814|  83.2k|    return retval;
 1815|  83.2k|}
marshal.c:r_byte:
  957|   111k|{
  958|   111k|    if (p->ptr != NULL) {
  ------------------
  |  Branch (958:9): [True: 111k, False: 0]
  ------------------
  959|   111k|        if (p->ptr < p->end) {
  ------------------
  |  Branch (959:13): [True: 111k, False: 0]
  ------------------
  960|   111k|            return (unsigned char) *p->ptr++;
  961|   111k|        }
  962|   111k|    }
  963|      0|    else if (!p->readable) {
  ------------------
  |  Branch (963:14): [True: 0, False: 0]
  ------------------
  964|      0|        assert(p->fp);
  ------------------
  |  Branch (964:9): [True: 0, False: 0]
  ------------------
  965|      0|        int c = getc(p->fp);
  966|      0|        if (c != EOF) {
  ------------------
  |  Branch (966:13): [True: 0, False: 0]
  ------------------
  967|      0|            return c;
  968|      0|        }
  969|      0|        int saved_errno = errno;
  970|      0|        if (PyErr_CheckSignals()) {
  ------------------
  |  Branch (970:13): [True: 0, False: 0]
  ------------------
  971|      0|            return EOF;
  972|      0|        }
  973|      0|        if (ferror(p->fp)) {
  ------------------
  |  Branch (973:13): [True: 0, False: 0]
  ------------------
  974|      0|            errno = saved_errno;
  975|      0|            PyErr_SetFromErrno(PyExc_OSError);
  976|      0|            return EOF;
  977|      0|        }
  978|      0|    }
  979|      0|    else {
  980|      0|        const char *ptr = r_string(1, p);
  981|      0|        if (ptr != NULL) {
  ------------------
  |  Branch (981:13): [True: 0, False: 0]
  ------------------
  982|      0|            return *(const unsigned char *) ptr;
  983|      0|        }
  984|      0|        return EOF;
  985|      0|    }
  986|      0|    PyErr_SetString(PyExc_EOFError,
  987|      0|                    "EOF read where not expected");
  988|       |    return EOF;
  989|   111k|}
marshal.c:r_ref:
 1217|  21.7k|{
 1218|  21.7k|    assert(flag & FLAG_REF);
  ------------------
  |  Branch (1218:5): [True: 21.7k, False: 0]
  ------------------
 1219|  21.7k|    if (o == NULL)
  ------------------
  |  Branch (1219:9): [True: 0, False: 21.7k]
  ------------------
 1220|      0|        return NULL;
 1221|  21.7k|    if (PyList_Append(p->refs, o) < 0) {
  ------------------
  |  Branch (1221:9): [True: 0, False: 21.7k]
  ------------------
 1222|      0|        Py_DECREF(o); /* release the new object */
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1223|      0|        return NULL;
 1224|      0|    }
 1225|  21.7k|    return o;
 1226|  21.7k|}
marshal.c:r_PyLong:
 1094|     12|{
 1095|     12|    long n = r_long(p);
 1096|     12|    if (n == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1096:9): [True: 0, False: 12]
  |  Branch (1096:20): [True: 0, False: 0]
  ------------------
 1097|      0|        return NULL;
 1098|      0|    }
 1099|     12|    if (n < -SIZE32_MAX || n > SIZE32_MAX) {
  ------------------
  |  |  230|     24|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
                  if (n < -SIZE32_MAX || n > SIZE32_MAX) {
  ------------------
  |  |  230|     12|#define SIZE32_MAX  0x7FFFFFFF
  ------------------
  |  Branch (1099:9): [True: 0, False: 12]
  |  Branch (1099:28): [True: 0, False: 12]
  ------------------
 1100|      0|        PyErr_SetString(PyExc_ValueError,
 1101|      0|                       "bad marshal data (long size out of range)");
 1102|      0|        return NULL;
 1103|      0|    }
 1104|       |
 1105|     12|    const PyLongLayout *layout = PyLong_GetNativeLayout();
 1106|     12|    Py_ssize_t marshal_ratio = layout->bits_per_digit/PyLong_MARSHAL_SHIFT;
  ------------------
  |  |  265|     12|#define PyLong_MARSHAL_SHIFT 15
  ------------------
 1107|       |
 1108|       |    /* must be a multiple of PyLong_MARSHAL_SHIFT */
 1109|     12|    assert(layout->bits_per_digit % PyLong_MARSHAL_SHIFT == 0);
  ------------------
  |  Branch (1109:5): [True: 12, False: 0]
  ------------------
 1110|     12|    assert(layout->bits_per_digit >= PyLong_MARSHAL_SHIFT);
  ------------------
  |  Branch (1110:5): [True: 12, False: 0]
  ------------------
 1111|       |
 1112|       |    /* other assumptions on PyLongObject internals */
 1113|     12|    assert(layout->bits_per_digit <= 32);
  ------------------
  |  Branch (1113:5): [True: 12, False: 0]
  ------------------
 1114|     12|    assert(layout->digits_order == -1);
  ------------------
  |  Branch (1114:5): [True: 12, False: 0]
  ------------------
 1115|     12|    assert(layout->digit_endianness == (PY_LITTLE_ENDIAN ? -1 : 1));
  ------------------
  |  Branch (1115:5): [True: 12, Folded]
  |  Branch (1115:5): [True: 12, False: 0]
  ------------------
 1116|     12|    assert(layout->digit_size == 2 || layout->digit_size == 4);
  ------------------
  |  Branch (1116:5): [True: 0, False: 12]
  |  Branch (1116:5): [True: 12, False: 0]
  ------------------
 1117|       |
 1118|     12|    Py_ssize_t size = 1 + (Py_ABS(n) - 1) / marshal_ratio;
  ------------------
  |  |  132|     12|       __extension__ \
  |  |  133|     12|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|     12|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  134|     12|          _x < 0 ? -_x : _x; })
  |  |  ------------------
  |  |  |  Branch (134:11): [True: 1, False: 11]
  |  |  ------------------
  ------------------
 1119|       |
 1120|     12|    assert(size >= 1);
  ------------------
  |  Branch (1120:5): [True: 12, False: 0]
  ------------------
 1121|       |
 1122|     12|    int shorts_in_top_digit = 1 + (Py_ABS(n) - 1) % marshal_ratio;
  ------------------
  |  |  132|     12|       __extension__ \
  |  |  133|     12|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|     12|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  134|     12|          _x < 0 ? -_x : _x; })
  |  |  ------------------
  |  |  |  Branch (134:11): [True: 1, False: 11]
  |  |  ------------------
  ------------------
 1123|     12|    void *digits;
 1124|     12|    PyLongWriter *writer = PyLongWriter_Create(n < 0, size, &digits);
 1125|       |
 1126|     12|    if (writer == NULL) {
  ------------------
  |  Branch (1126:9): [True: 0, False: 12]
  ------------------
 1127|      0|        return NULL;
 1128|      0|    }
 1129|       |
 1130|     12|    int ret;
 1131|       |
 1132|     12|    if (layout->digit_size == 4) {
  ------------------
  |  Branch (1132:9): [True: 12, False: 0]
  ------------------
 1133|     12|        ret = _w_digits32(digits, size, marshal_ratio, shorts_in_top_digit, p);
 1134|     12|    }
 1135|      0|    else {
 1136|      0|        ret = _w_digits16(digits, size, marshal_ratio, shorts_in_top_digit, p);
 1137|      0|    }
 1138|     12|    if (ret < 0) {
  ------------------
  |  Branch (1138:9): [True: 0, False: 12]
  ------------------
 1139|      0|        PyLongWriter_Discard(writer);
 1140|      0|        return NULL;
 1141|      0|    }
 1142|     12|    return PyLongWriter_Finish(writer);
 1143|     12|}
marshal.c:r_float_bin:
 1147|      4|{
 1148|      4|    const char *buf = r_string(8, p);
 1149|      4|    if (buf == NULL)
  ------------------
  |  Branch (1149:9): [True: 0, False: 4]
  ------------------
 1150|      0|        return -1;
 1151|      4|    return PyFloat_Unpack8(buf, 1);
 1152|      4|}
marshal.c:r_ref_reserve:
 1178|  11.5k|{
 1179|  11.5k|    if (flag) { /* currently only FLAG_REF is defined */
  ------------------
  |  Branch (1179:9): [True: 1.08k, False: 10.4k]
  ------------------
 1180|  1.08k|        Py_ssize_t idx = PyList_GET_SIZE(p->refs);
  ------------------
  |  |   38|  1.08k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1181|  1.08k|        if (idx >= 0x7ffffffe) {
  ------------------
  |  Branch (1181:13): [True: 0, False: 1.08k]
  ------------------
 1182|      0|            PyErr_SetString(PyExc_ValueError, "bad marshal data (index list too large)");
 1183|      0|            return -1;
 1184|      0|        }
 1185|  1.08k|        if (PyList_Append(p->refs, Py_None) < 0)
  ------------------
  |  |  616|  1.08k|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (1185:13): [True: 0, False: 1.08k]
  ------------------
 1186|      0|            return -1;
 1187|  1.08k|        return idx;
 1188|  1.08k|    } else
 1189|  10.4k|        return 0;
 1190|  11.5k|}
marshal.c:r_ref_insert:
 1202|  11.5k|{
 1203|  11.5k|    if (o != NULL && flag) { /* currently only FLAG_REF is defined */
  ------------------
  |  Branch (1203:9): [True: 11.5k, False: 0]
  |  Branch (1203:22): [True: 1.08k, False: 10.4k]
  ------------------
 1204|  1.08k|        PyObject *tmp = PyList_GET_ITEM(p->refs, idx);
  ------------------
  |  |   40|  1.08k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  1.08k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1204:25): [True: 1.08k, False: 0]
  ------------------
 1205|  1.08k|        PyList_SET_ITEM(p->refs, idx, Py_NewRef(o));
  ------------------
  |  |   50|  1.08k|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1206|  1.08k|        Py_DECREF(tmp);
  ------------------
  |  |  430|  1.08k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.08k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.08k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1207|  1.08k|    }
 1208|  11.5k|    return o;
 1209|  11.5k|}
marshal.c:marshal_loads_impl:
 2158|     93|{
 2159|     93|    RFILE rf;
 2160|     93|    char *s = bytes->buf;
 2161|     93|    Py_ssize_t n = bytes->len;
 2162|     93|    PyObject* result;
 2163|     93|    rf.allow_code = allow_code;
 2164|     93|    rf.fp = NULL;
 2165|     93|    rf.readable = NULL;
 2166|     93|    rf.ptr = s;
 2167|     93|    rf.end = s + n;
 2168|     93|    rf.depth = 0;
 2169|     93|    if ((rf.refs = PyList_New(0)) == NULL)
  ------------------
  |  Branch (2169:9): [True: 0, False: 93]
  ------------------
 2170|      0|        return NULL;
 2171|     93|    result = read_object(&rf);
 2172|     93|    Py_DECREF(rf.refs);
  ------------------
  |  |  430|     93|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     93|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     93|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2173|     93|    return result;
 2174|     93|}
marshal.c:marshal_module_exec:
 2217|      2|{
 2218|      2|    if (PyModule_AddIntConstant(mod, "version", Py_MARSHAL_VERSION) < 0) {
  ------------------
  |  |    9|      2|#define Py_MARSHAL_VERSION 6
  ------------------
  |  Branch (2218:9): [True: 0, False: 2]
  ------------------
 2219|      0|        return -1;
 2220|      0|    }
 2221|      2|    return 0;
 2222|      2|}

Py_BuildValue:
  497|  35.4k|{
  498|  35.4k|    va_list va;
  499|  35.4k|    PyObject* retval;
  500|  35.4k|    va_start(va, format);
  501|  35.4k|    retval = va_build_value(format, va);
  502|       |    va_end(va);
  503|  35.4k|    return retval;
  504|  35.4k|}
_Py_VaBuildStack:
  555|  91.4k|{
  556|  91.4k|    const char *f;
  557|  91.4k|    Py_ssize_t n;
  558|  91.4k|    va_list lva;
  559|  91.4k|    PyObject **stack;
  560|  91.4k|    int res;
  561|       |
  562|  91.4k|    n = countformat(format, '\0');
  563|  91.4k|    if (n < 0) {
  ------------------
  |  Branch (563:9): [True: 0, False: 91.4k]
  ------------------
  564|      0|        *p_nargs = 0;
  565|      0|        return NULL;
  566|      0|    }
  567|       |
  568|  91.4k|    if (n == 0) {
  ------------------
  |  Branch (568:9): [True: 0, False: 91.4k]
  ------------------
  569|      0|        *p_nargs = 0;
  570|      0|        return small_stack;
  571|      0|    }
  572|       |
  573|  91.4k|    if (n <= small_stack_len) {
  ------------------
  |  Branch (573:9): [True: 91.3k, False: 12]
  ------------------
  574|  91.3k|        stack = small_stack;
  575|  91.3k|    }
  576|     12|    else {
  577|     12|        stack = PyMem_Malloc(n * sizeof(stack[0]));
  578|     12|        if (stack == NULL) {
  ------------------
  |  Branch (578:13): [True: 0, False: 12]
  ------------------
  579|      0|            PyErr_NoMemory();
  580|      0|            return NULL;
  581|      0|        }
  582|     12|    }
  583|       |
  584|  91.4k|    va_copy(lva, va);
  585|  91.4k|    f = format;
  586|  91.4k|    res = do_mkstack(stack, &f, &lva, '\0', n);
  587|  91.4k|    va_end(lva);
  588|       |
  589|  91.4k|    if (res < 0) {
  ------------------
  |  Branch (589:9): [True: 0, False: 91.4k]
  ------------------
  590|      0|        if (stack != small_stack) {
  ------------------
  |  Branch (590:13): [True: 0, False: 0]
  ------------------
  591|      0|            PyMem_Free(stack);
  592|      0|        }
  593|      0|        return NULL;
  594|      0|    }
  595|       |
  596|  91.4k|    *p_nargs = n;
  597|  91.4k|    return stack;
  598|  91.4k|}
PyModule_AddObjectRef:
  603|    803|{
  604|    803|    if (!PyModule_Check(mod)) {
  ------------------
  |  |   12|    803|#define PyModule_Check(op) PyObject_TypeCheck((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  378|    803|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    803|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    803|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (604:9): [True: 0, False: 803]
  ------------------
  605|      0|        PyErr_SetString(PyExc_TypeError,
  606|      0|                        "PyModule_AddObjectRef() first argument "
  607|      0|                        "must be a module");
  608|      0|        return -1;
  609|      0|    }
  610|    803|    if (!value) {
  ------------------
  |  Branch (610:9): [True: 0, False: 803]
  ------------------
  611|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (611:13): [True: 0, False: 0]
  ------------------
  612|      0|            PyErr_SetString(PyExc_SystemError,
  613|      0|                            "PyModule_AddObjectRef() must be called "
  614|      0|                            "with an exception raised if value is NULL");
  615|      0|        }
  616|      0|        return -1;
  617|      0|    }
  618|       |
  619|    803|    PyObject *dict = PyModule_GetDict(mod);
  620|    803|    if (dict == NULL) {
  ------------------
  |  Branch (620:9): [True: 0, False: 803]
  ------------------
  621|       |        /* Internal error -- modules must have a dict! */
  622|      0|        PyErr_Format(PyExc_SystemError, "module '%s' has no __dict__",
  623|      0|                     PyModule_GetName(mod));
  624|      0|        return -1;
  625|      0|    }
  626|    803|    return PyDict_SetItemString(dict, name, value);
  627|    803|}
PyModule_Add:
  631|    647|{
  632|    647|    int res = PyModule_AddObjectRef(mod, name, value);
  633|    647|    Py_XDECREF(value);
  ------------------
  |  |  524|    647|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    647|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    647|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|    647|    return res;
  635|    647|}
PyModule_AddIntConstant:
  649|    576|{
  650|    576|    return PyModule_Add(m, name, PyLong_FromLong(value));
  651|    576|}
PyModule_AddStringConstant:
  655|      2|{
  656|      2|    return PyModule_Add(m, name, PyUnicode_FromString(value));
  657|      2|}
PyModule_AddType:
  661|     81|{
  662|     81|    if (!_PyType_IsReady(type) && PyType_Ready(type) < 0) {
  ------------------
  |  Branch (662:9): [True: 0, False: 81]
  |  Branch (662:35): [True: 0, False: 0]
  ------------------
  663|      0|        return -1;
  664|      0|    }
  665|       |
  666|     81|    const char *name = _PyType_Name(type);
  667|     81|    assert(name != NULL);
  ------------------
  |  Branch (667:5): [True: 81, False: 0]
  ------------------
  668|       |
  669|     81|    return PyModule_AddObjectRef(module, name, (PyObject *)type);
  670|     81|}
PyABIInfo_Check:
  707|     39|{
  708|     39|    if (!info) {
  ------------------
  |  Branch (708:9): [True: 0, False: 39]
  ------------------
  709|      0|        return _abiinfo_raise(module_name, "NULL PyABIInfo");
  710|      0|    }
  711|       |
  712|       |    /* abiinfo_major_version */
  713|     39|    if (info->abiinfo_major_version == 0) {
  ------------------
  |  Branch (713:9): [True: 0, False: 39]
  ------------------
  714|      0|        return 0;
  715|      0|    }
  716|     39|    if (info->abiinfo_major_version > 1) {
  ------------------
  |  Branch (716:9): [True: 0, False: 39]
  ------------------
  717|      0|        return _abiinfo_raise(module_name, "PyABIInfo version too high");
  718|      0|    }
  719|       |
  720|       |    /* Internal ABI */
  721|     39|    if (info->flags & PyABIInfo_INTERNAL) {
  ------------------
  |  |   97|     39|#define PyABIInfo_INTERNAL      0x0008
  ------------------
  |  Branch (721:9): [True: 39, False: 0]
  ------------------
  722|     39|        if (info->abi_version && (info->abi_version != PY_VERSION_HEX)) {
  ------------------
  |  |   43|     39|#define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \
  |  |  ------------------
  |  |  |  |   34|     39|#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
  |  |  |  |   35|     39|    (((X) & 0xff) << 24) |                              \
  |  |  |  |   36|     39|    (((Y) & 0xff) << 16) |                              \
  |  |  |  |   37|     39|    (((Z) & 0xff) << 8) |                               \
  |  |  |  |   38|     39|    (((LEVEL) & 0xf) << 4) |                            \
  |  |  |  |   39|     39|    (((SERIAL) & 0xf) << 0))
  |  |  ------------------
  |  |   44|     39|    PY_MAJOR_VERSION,                         \
  |  |   45|     39|    PY_MINOR_VERSION,                         \
  |  |   46|     39|    PY_MICRO_VERSION,                         \
  |  |   47|     39|    PY_RELEASE_LEVEL,                         \
  |  |   48|     39|    PY_RELEASE_SERIAL)
  ------------------
  |  Branch (722:13): [True: 39, False: 0]
  |  Branch (722:34): [True: 0, False: 39]
  ------------------
  723|      0|            return _abiinfo_raise(
  724|      0|                module_name,
  725|      0|                "incompatible internal ABI (0x%x != 0x%x)",
  726|      0|                info->abi_version, PY_VERSION_HEX);
  ------------------
  |  |   43|      0|#define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \
  |  |  ------------------
  |  |  |  |   34|      0|#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
  |  |  |  |   35|      0|    (((X) & 0xff) << 24) |                              \
  |  |  |  |   36|      0|    (((Y) & 0xff) << 16) |                              \
  |  |  |  |   37|      0|    (((Z) & 0xff) << 8) |                               \
  |  |  |  |   38|      0|    (((LEVEL) & 0xf) << 4) |                            \
  |  |  |  |   39|      0|    (((SERIAL) & 0xf) << 0))
  |  |  ------------------
  |  |   44|      0|    PY_MAJOR_VERSION,                         \
  |  |   45|      0|    PY_MINOR_VERSION,                         \
  |  |   46|      0|    PY_MICRO_VERSION,                         \
  |  |   47|      0|    PY_RELEASE_LEVEL,                         \
  |  |   48|      0|    PY_RELEASE_SERIAL)
  ------------------
  727|      0|        }
  728|     39|    }
  729|       |
  730|     39|#define XY_MASK 0xffff0000
  731|     39|    if (info->flags & PyABIInfo_STABLE) {
  ------------------
  |  |   94|     39|#define PyABIInfo_STABLE        0x0001
  ------------------
  |  Branch (731:9): [True: 0, False: 39]
  ------------------
  732|       |        /* Greater-than major.minor version check */
  733|      0|        if (info->abi_version) {
  ------------------
  |  Branch (733:13): [True: 0, False: 0]
  ------------------
  734|      0|            if ((info->abi_version & XY_MASK) > (PY_VERSION_HEX & XY_MASK)) {
  ------------------
  |  |  730|      0|#define XY_MASK 0xffff0000
  ------------------
                          if ((info->abi_version & XY_MASK) > (PY_VERSION_HEX & XY_MASK)) {
  ------------------
  |  |   43|      0|#define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \
  |  |  ------------------
  |  |  |  |   34|      0|#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
  |  |  |  |   35|      0|    (((X) & 0xff) << 24) |                              \
  |  |  |  |   36|      0|    (((Y) & 0xff) << 16) |                              \
  |  |  |  |   37|      0|    (((Z) & 0xff) << 8) |                               \
  |  |  |  |   38|      0|    (((LEVEL) & 0xf) << 4) |                            \
  |  |  |  |   39|      0|    (((SERIAL) & 0xf) << 0))
  |  |  ------------------
  |  |   44|      0|    PY_MAJOR_VERSION,                         \
  |  |   45|      0|    PY_MINOR_VERSION,                         \
  |  |   46|      0|    PY_MICRO_VERSION,                         \
  |  |   47|      0|    PY_RELEASE_LEVEL,                         \
  |  |   48|      0|    PY_RELEASE_SERIAL)
  ------------------
                          if ((info->abi_version & XY_MASK) > (PY_VERSION_HEX & XY_MASK)) {
  ------------------
  |  |  730|      0|#define XY_MASK 0xffff0000
  ------------------
  |  Branch (734:17): [True: 0, False: 0]
  ------------------
  735|      0|                return _abiinfo_raise(
  736|      0|                    module_name,
  737|      0|                    "incompatible future stable ABI version (%d.%d)",
  738|      0|                    ((info->abi_version) >> 24) & 0xff,
  739|      0|                    ((info->abi_version) >> 16) & 0xff);
  740|      0|            }
  741|      0|            if (info->abi_version < Py_PACK_VERSION(3, 2)) {
  ------------------
  |  |  315|      0|#define Py_PACK_VERSION _Py_PACK_VERSION
  |  |  ------------------
  |  |  |  |  310|      0|#define _Py_PACK_VERSION(X, Y) _Py_PACK_FULL_VERSION(X, Y, 0, 0, 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |   34|      0|#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
  |  |  |  |  |  |   35|      0|    (((X) & 0xff) << 24) |                              \
  |  |  |  |  |  |   36|      0|    (((Y) & 0xff) << 16) |                              \
  |  |  |  |  |  |   37|      0|    (((Z) & 0xff) << 8) |                               \
  |  |  |  |  |  |   38|      0|    (((LEVEL) & 0xf) << 4) |                            \
  |  |  |  |  |  |   39|      0|    (((SERIAL) & 0xf) << 0))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (741:17): [True: 0, False: 0]
  ------------------
  742|      0|                return _abiinfo_raise(
  743|      0|                    module_name,
  744|      0|                    "invalid stable ABI version (%d.%d)",
  745|      0|                    ((info->abi_version) >> 24) & 0xff,
  746|      0|                    ((info->abi_version) >> 16) & 0xff);
  747|      0|            }
  748|      0|        }
  749|      0|        if (info->flags & PyABIInfo_INTERNAL) {
  ------------------
  |  |   97|      0|#define PyABIInfo_INTERNAL      0x0008
  ------------------
  |  Branch (749:13): [True: 0, False: 0]
  ------------------
  750|      0|            return _abiinfo_raise(module_name,
  751|      0|                                  "cannot use both internal and stable ABI");
  752|      0|        }
  753|      0|    }
  754|     39|    else {
  755|       |        /* Exact major.minor version check */
  756|     39|        if (info->abi_version) {
  ------------------
  |  Branch (756:13): [True: 39, False: 0]
  ------------------
  757|     39|            if ((info->abi_version & XY_MASK) != (PY_VERSION_HEX & XY_MASK)) {
  ------------------
  |  |  730|     39|#define XY_MASK 0xffff0000
  ------------------
                          if ((info->abi_version & XY_MASK) != (PY_VERSION_HEX & XY_MASK)) {
  ------------------
  |  |   43|     39|#define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \
  |  |  ------------------
  |  |  |  |   34|     39|#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
  |  |  |  |   35|     39|    (((X) & 0xff) << 24) |                              \
  |  |  |  |   36|     39|    (((Y) & 0xff) << 16) |                              \
  |  |  |  |   37|     39|    (((Z) & 0xff) << 8) |                               \
  |  |  |  |   38|     39|    (((LEVEL) & 0xf) << 4) |                            \
  |  |  |  |   39|     39|    (((SERIAL) & 0xf) << 0))
  |  |  ------------------
  |  |   44|     39|    PY_MAJOR_VERSION,                         \
  |  |   45|     39|    PY_MINOR_VERSION,                         \
  |  |   46|     39|    PY_MICRO_VERSION,                         \
  |  |   47|     39|    PY_RELEASE_LEVEL,                         \
  |  |   48|     39|    PY_RELEASE_SERIAL)
  ------------------
                          if ((info->abi_version & XY_MASK) != (PY_VERSION_HEX & XY_MASK)) {
  ------------------
  |  |  730|     39|#define XY_MASK 0xffff0000
  ------------------
  |  Branch (757:17): [True: 0, False: 39]
  ------------------
  758|      0|                return _abiinfo_raise(
  759|      0|                    module_name,
  760|      0|                    "incompatible ABI version (%d.%d)",
  761|      0|                    ((info->abi_version) >> 24) & 0xff,
  762|      0|                    ((info->abi_version) >> 16) & 0xff);
  763|      0|            }
  764|     39|        }
  765|     39|    }
  766|     39|#undef XY_MASK
  767|       |
  768|       |    /* Free-threading/GIL */
  769|     39|    uint16_t gilflags = info->flags & (PyABIInfo_GIL | PyABIInfo_FREETHREADED);
  ------------------
  |  |   95|     39|#define PyABIInfo_GIL           0x0002
  ------------------
                  uint16_t gilflags = info->flags & (PyABIInfo_GIL | PyABIInfo_FREETHREADED);
  ------------------
  |  |   96|     39|#define PyABIInfo_FREETHREADED  0x0004
  ------------------
  770|       |#if Py_GIL_DISABLED
  771|       |    if (gilflags == PyABIInfo_GIL) {
  772|       |        return _abiinfo_raise(module_name,
  773|       |                              "incompatible with free-threaded CPython");
  774|       |    }
  775|       |#else
  776|     39|    if (gilflags == PyABIInfo_FREETHREADED) {
  ------------------
  |  |   96|     39|#define PyABIInfo_FREETHREADED  0x0004
  ------------------
  |  Branch (776:9): [True: 0, False: 39]
  ------------------
  777|      0|        return _abiinfo_raise(module_name,
  778|      0|                              "only compatible with free-threaded CPython");
  779|      0|    }
  780|     39|#endif
  781|       |
  782|     39|    return 0;
  783|     39|}
modsupport.c:va_build_value:
  531|  35.4k|{
  532|  35.4k|    const char *f = format;
  533|  35.4k|    Py_ssize_t n = countformat(f, '\0');
  534|  35.4k|    va_list lva;
  535|  35.4k|    PyObject *retval;
  536|       |
  537|  35.4k|    if (n < 0)
  ------------------
  |  Branch (537:9): [True: 0, False: 35.4k]
  ------------------
  538|      0|        return NULL;
  539|  35.4k|    if (n == 0) {
  ------------------
  |  Branch (539:9): [True: 0, False: 35.4k]
  ------------------
  540|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  541|      0|    }
  542|  35.4k|    va_copy(lva, va);
  543|  35.4k|    if (n == 1) {
  ------------------
  |  Branch (543:9): [True: 32.1k, False: 3.27k]
  ------------------
  544|  32.1k|        retval = do_mkvalue(&f, &lva);
  545|  32.1k|    } else {
  546|  3.27k|        retval = do_mktuple(&f, &lva, '\0', n);
  547|  3.27k|    }
  548|       |    va_end(lva);
  549|  35.4k|    return retval;
  550|  35.4k|}
modsupport.c:do_mkvalue:
  287|   643k|{
  288|   643k|    for (;;) {
  289|   643k|        switch (*(*p_format)++) {
  290|  36.0k|        case '(':
  ------------------
  |  Branch (290:9): [True: 36.0k, False: 607k]
  ------------------
  291|  36.0k|            return do_mktuple(p_format, p_va, ')',
  292|  36.0k|                              countformat(*p_format, ')'));
  293|       |
  294|     15|        case '[':
  ------------------
  |  Branch (294:9): [True: 15, False: 643k]
  ------------------
  295|     15|            return do_mklist(p_format, p_va, ']',
  296|     15|                             countformat(*p_format, ']'));
  297|       |
  298|    129|        case '{':
  ------------------
  |  Branch (298:9): [True: 129, False: 643k]
  ------------------
  299|    129|            return do_mkdict(p_format, p_va, '}',
  300|    129|                             countformat(*p_format, '}'));
  301|       |
  302|      0|        case 'b':
  ------------------
  |  Branch (302:9): [True: 0, False: 643k]
  ------------------
  303|      0|        case 'B':
  ------------------
  |  Branch (303:9): [True: 0, False: 643k]
  ------------------
  304|      0|        case 'h':
  ------------------
  |  Branch (304:9): [True: 0, False: 643k]
  ------------------
  305|   105k|        case 'i':
  ------------------
  |  Branch (305:9): [True: 105k, False: 537k]
  ------------------
  306|   105k|            return PyLong_FromLong((long)va_arg(*p_va, int));
  307|       |
  308|      0|        case 'H':
  ------------------
  |  Branch (308:9): [True: 0, False: 643k]
  ------------------
  309|      0|            return PyLong_FromLong((long)va_arg(*p_va, unsigned int));
  310|       |
  311|      0|        case 'I':
  ------------------
  |  Branch (311:9): [True: 0, False: 643k]
  ------------------
  312|      0|        {
  313|      0|            unsigned int n;
  314|      0|            n = va_arg(*p_va, unsigned int);
  315|      0|            return PyLong_FromUnsignedLong(n);
  316|      0|        }
  317|       |
  318|   115k|        case 'n':
  ------------------
  |  Branch (318:9): [True: 115k, False: 527k]
  ------------------
  319|       |#if SIZEOF_SIZE_T!=SIZEOF_LONG
  320|       |            return PyLong_FromSsize_t(va_arg(*p_va, Py_ssize_t));
  321|       |#endif
  322|       |            /* Fall through from 'n' to 'l' if Py_ssize_t is long */
  323|   115k|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|   115k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  324|   115k|        case 'l':
  ------------------
  |  Branch (324:9): [True: 0, False: 643k]
  ------------------
  325|   115k|            return PyLong_FromLong(va_arg(*p_va, long));
  326|       |
  327|      0|        case 'k':
  ------------------
  |  Branch (327:9): [True: 0, False: 643k]
  ------------------
  328|      0|        {
  329|      0|            unsigned long n;
  330|      0|            n = va_arg(*p_va, unsigned long);
  331|      0|            return PyLong_FromUnsignedLong(n);
  332|   115k|        }
  333|       |
  334|      0|        case 'L':
  ------------------
  |  Branch (334:9): [True: 0, False: 643k]
  ------------------
  335|      0|            return PyLong_FromLongLong((long long)va_arg(*p_va, long long));
  336|       |
  337|      0|        case 'K':
  ------------------
  |  Branch (337:9): [True: 0, False: 643k]
  ------------------
  338|      0|            return PyLong_FromUnsignedLongLong(
  339|      0|                va_arg(*p_va, unsigned long long));
  340|       |
  341|      0|        case 'u':
  ------------------
  |  Branch (341:9): [True: 0, False: 643k]
  ------------------
  342|      0|        {
  343|      0|            PyObject *v;
  344|      0|            const wchar_t *u = va_arg(*p_va, wchar_t*);
  345|      0|            Py_ssize_t n;
  346|      0|            if (**p_format == '#') {
  ------------------
  |  Branch (346:17): [True: 0, False: 0]
  ------------------
  347|      0|                ++*p_format;
  348|      0|                n = va_arg(*p_va, Py_ssize_t);
  349|      0|            }
  350|      0|            else
  351|      0|                n = -1;
  352|      0|            if (u == NULL) {
  ------------------
  |  Branch (352:17): [True: 0, False: 0]
  ------------------
  353|      0|                v = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|      0|            }
  355|      0|            else {
  356|      0|                if (n < 0)
  ------------------
  |  Branch (356:21): [True: 0, False: 0]
  ------------------
  357|      0|                    n = wcslen(u);
  358|      0|                v = PyUnicode_FromWideChar(u, n);
  359|      0|            }
  360|      0|            return v;
  361|   115k|        }
  362|      0|        case 'f':
  ------------------
  |  Branch (362:9): [True: 0, False: 643k]
  ------------------
  363|      0|        case 'd':
  ------------------
  |  Branch (363:9): [True: 0, False: 643k]
  ------------------
  364|      0|            return PyFloat_FromDouble(
  365|      0|                (double)va_arg(*p_va, va_double));
  366|       |
  367|      0|        case 'D':
  ------------------
  |  Branch (367:9): [True: 0, False: 643k]
  ------------------
  368|      0|            return PyComplex_FromCComplex(
  369|      0|                *((Py_complex *)va_arg(*p_va, Py_complex *)));
  370|       |
  371|     20|        case 'c':
  ------------------
  |  Branch (371:9): [True: 20, False: 643k]
  ------------------
  372|     20|        {
  373|     20|            char p[1];
  374|     20|            p[0] = (char)va_arg(*p_va, int);
  375|     20|            return PyBytes_FromStringAndSize(p, 1);
  376|      0|        }
  377|      0|        case 'C':
  ------------------
  |  Branch (377:9): [True: 0, False: 643k]
  ------------------
  378|      0|        {
  379|      0|            int i = va_arg(*p_va, int);
  380|      0|            return PyUnicode_FromOrdinal(i);
  381|      0|        }
  382|      0|        case 'p':
  ------------------
  |  Branch (382:9): [True: 0, False: 643k]
  ------------------
  383|      0|        {
  384|      0|            int i = va_arg(*p_va, int);
  385|      0|            return PyBool_FromLong(i);
  386|      0|        }
  387|       |
  388|  78.6k|        case 's':
  ------------------
  |  Branch (388:9): [True: 78.6k, False: 564k]
  ------------------
  389|  78.6k|        case 'z':
  ------------------
  |  Branch (389:9): [True: 8, False: 643k]
  ------------------
  390|  78.6k|        case 'U':   /* XXX deprecated alias */
  ------------------
  |  Branch (390:9): [True: 0, False: 643k]
  ------------------
  391|  78.6k|        {
  392|  78.6k|            PyObject *v;
  393|  78.6k|            const char *str = va_arg(*p_va, const char *);
  394|  78.6k|            Py_ssize_t n;
  395|  78.6k|            if (**p_format == '#') {
  ------------------
  |  Branch (395:17): [True: 0, False: 78.6k]
  ------------------
  396|      0|                ++*p_format;
  397|      0|                n = va_arg(*p_va, Py_ssize_t);
  398|      0|            }
  399|  78.6k|            else
  400|  78.6k|                n = -1;
  401|  78.6k|            if (str == NULL) {
  ------------------
  |  Branch (401:17): [True: 0, False: 78.6k]
  ------------------
  402|      0|                v = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  403|      0|            }
  404|  78.6k|            else {
  405|  78.6k|                if (n < 0) {
  ------------------
  |  Branch (405:21): [True: 78.6k, False: 0]
  ------------------
  406|  78.6k|                    size_t m = strlen(str);
  407|  78.6k|                    if (m > PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|  78.6k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (407:25): [True: 0, False: 78.6k]
  ------------------
  408|      0|                        PyErr_SetString(PyExc_OverflowError,
  409|      0|                            "string too long for Python string");
  410|      0|                        return NULL;
  411|      0|                    }
  412|  78.6k|                    n = (Py_ssize_t)m;
  413|  78.6k|                }
  414|  78.6k|                v = PyUnicode_FromStringAndSize(str, n);
  415|  78.6k|            }
  416|  78.6k|            return v;
  417|  78.6k|        }
  418|       |
  419|  3.36k|        case 'y':
  ------------------
  |  Branch (419:9): [True: 3.36k, False: 639k]
  ------------------
  420|  3.36k|        {
  421|  3.36k|            PyObject *v;
  422|  3.36k|            const char *str = va_arg(*p_va, const char *);
  423|  3.36k|            Py_ssize_t n;
  424|  3.36k|            if (**p_format == '#') {
  ------------------
  |  Branch (424:17): [True: 3.36k, False: 0]
  ------------------
  425|  3.36k|                ++*p_format;
  426|  3.36k|                n = va_arg(*p_va, Py_ssize_t);
  427|  3.36k|            }
  428|      0|            else
  429|      0|                n = -1;
  430|  3.36k|            if (str == NULL) {
  ------------------
  |  Branch (430:17): [True: 0, False: 3.36k]
  ------------------
  431|      0|                v = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|      0|            }
  433|  3.36k|            else {
  434|  3.36k|                if (n < 0) {
  ------------------
  |  Branch (434:21): [True: 0, False: 3.36k]
  ------------------
  435|      0|                    size_t m = strlen(str);
  436|      0|                    if (m > PY_SSIZE_T_MAX) {
  ------------------
  |  |  137|      0|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (436:25): [True: 0, False: 0]
  ------------------
  437|      0|                        PyErr_SetString(PyExc_OverflowError,
  438|      0|                            "string too long for Python bytes");
  439|      0|                        return NULL;
  440|      0|                    }
  441|      0|                    n = (Py_ssize_t)m;
  442|      0|                }
  443|  3.36k|                v = PyBytes_FromStringAndSize(str, n);
  444|  3.36k|            }
  445|  3.36k|            return v;
  446|  3.36k|        }
  447|       |
  448|  26.3k|        case 'N':
  ------------------
  |  Branch (448:9): [True: 26.3k, False: 616k]
  ------------------
  449|  26.3k|        case 'S':
  ------------------
  |  Branch (449:9): [True: 0, False: 643k]
  ------------------
  450|   303k|        case 'O':
  ------------------
  |  Branch (450:9): [True: 277k, False: 366k]
  ------------------
  451|   303k|        if (**p_format == '&') {
  ------------------
  |  Branch (451:13): [True: 0, False: 303k]
  ------------------
  452|      0|            typedef PyObject *(*converter)(void *);
  453|      0|            converter func = va_arg(*p_va, converter);
  454|      0|            void *arg = va_arg(*p_va, void *);
  455|      0|            ++*p_format;
  456|      0|            return (*func)(arg);
  457|      0|        }
  458|   303k|        else {
  459|   303k|            PyObject *v;
  460|   303k|            v = va_arg(*p_va, PyObject *);
  461|   303k|            if (v != NULL) {
  ------------------
  |  Branch (461:17): [True: 303k, False: 0]
  ------------------
  462|   303k|                if (*(*p_format - 1) != 'N')
  ------------------
  |  Branch (462:21): [True: 277k, False: 26.3k]
  ------------------
  463|   277k|                    Py_INCREF(v);
  ------------------
  |  |  310|   277k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   277k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   277k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|   303k|            }
  465|      0|            else if (!PyErr_Occurred())
  ------------------
  |  Branch (465:22): [True: 0, False: 0]
  ------------------
  466|       |                /* If a NULL was passed
  467|       |                 * because a call that should
  468|       |                 * have constructed a value
  469|       |                 * failed, that's OK, and we
  470|       |                 * pass the error on; but if
  471|       |                 * no error occurred it's not
  472|       |                 * clear that the caller knew
  473|       |                 * what she was doing. */
  474|      0|                PyErr_SetString(PyExc_SystemError,
  475|      0|                    "NULL object passed to Py_BuildValue");
  476|   303k|            return v;
  477|   303k|        }
  478|       |
  479|      0|        case ':':
  ------------------
  |  Branch (479:9): [True: 0, False: 643k]
  ------------------
  480|      0|        case ',':
  ------------------
  |  Branch (480:9): [True: 0, False: 643k]
  ------------------
  481|      0|        case ' ':
  ------------------
  |  Branch (481:9): [True: 0, False: 643k]
  ------------------
  482|      0|        case '\t':
  ------------------
  |  Branch (482:9): [True: 0, False: 643k]
  ------------------
  483|      0|            break;
  484|       |
  485|      0|        default:
  ------------------
  |  Branch (485:9): [True: 0, False: 643k]
  ------------------
  486|      0|            PyErr_SetString(PyExc_SystemError,
  487|      0|                "bad format char passed to Py_BuildValue");
  488|      0|            return NULL;
  489|       |
  490|   643k|        }
  491|   643k|    }
  492|   643k|}
modsupport.c:do_mklist:
  196|     15|{
  197|     15|    PyObject *v;
  198|     15|    Py_ssize_t i;
  199|     15|    if (n < 0)
  ------------------
  |  Branch (199:9): [True: 0, False: 15]
  ------------------
  200|      0|        return NULL;
  201|       |    /* Note that we can't bail immediately on error as this will leak
  202|       |       refcounts on any 'N' arguments. */
  203|     15|    v = PyList_New(n);
  204|     15|    if (v == NULL) {
  ------------------
  |  Branch (204:9): [True: 0, False: 15]
  ------------------
  205|      0|        do_ignore(p_format, p_va, endchar, n);
  206|      0|        return NULL;
  207|      0|    }
  208|    165|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (208:17): [True: 150, False: 15]
  ------------------
  209|    150|        PyObject *w = do_mkvalue(p_format, p_va);
  210|    150|        if (w == NULL) {
  ------------------
  |  Branch (210:13): [True: 0, False: 150]
  ------------------
  211|      0|            do_ignore(p_format, p_va, endchar, n - i - 1);
  212|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|      0|            return NULL;
  214|      0|        }
  215|    150|        PyList_SET_ITEM(v, i, w);
  ------------------
  |  |   50|    150|    PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    150|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyList_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    150|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|    150|    }
  217|     15|    if (!check_end(p_format, endchar)) {
  ------------------
  |  Branch (217:9): [True: 0, False: 15]
  ------------------
  218|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|      0|        return NULL;
  220|      0|    }
  221|     15|    return v;
  222|     15|}
modsupport.c:check_end:
  107|   130k|{
  108|   130k|    const char *f = *p_format;
  109|   130k|    while (*f != endchar) {
  ------------------
  |  Branch (109:12): [True: 0, False: 130k]
  ------------------
  110|      0|        if (*f != ' ' && *f != '\t' && *f != ',' && *f != ':') {
  ------------------
  |  Branch (110:13): [True: 0, False: 0]
  |  Branch (110:26): [True: 0, False: 0]
  |  Branch (110:40): [True: 0, False: 0]
  |  Branch (110:53): [True: 0, False: 0]
  ------------------
  111|      0|            PyErr_SetString(PyExc_SystemError,
  112|      0|                            "Unmatched paren in format");
  113|      0|            return 0;
  114|      0|        }
  115|      0|        f++;
  116|      0|    }
  117|   130k|    if (endchar) {
  ------------------
  |  Branch (117:9): [True: 36.1k, False: 94.6k]
  ------------------
  118|  36.1k|        f++;
  119|  36.1k|    }
  120|   130k|    *p_format = f;
  121|   130k|    return 1;
  122|   130k|}
modsupport.c:do_mkdict:
  150|    129|{
  151|    129|    PyObject *d;
  152|    129|    Py_ssize_t i;
  153|    129|    if (n < 0)
  ------------------
  |  Branch (153:9): [True: 0, False: 129]
  ------------------
  154|      0|        return NULL;
  155|    129|    if (n % 2) {
  ------------------
  |  Branch (155:9): [True: 0, False: 129]
  ------------------
  156|      0|        PyErr_SetString(PyExc_SystemError,
  157|      0|                        "Bad dict format");
  158|      0|        do_ignore(p_format, p_va, endchar, n);
  159|      0|        return NULL;
  160|      0|    }
  161|       |    /* Note that we can't bail immediately on error as this will leak
  162|       |       refcounts on any 'N' arguments. */
  163|    129|    if ((d = PyDict_New()) == NULL) {
  ------------------
  |  Branch (163:9): [True: 0, False: 129]
  ------------------
  164|      0|        do_ignore(p_format, p_va, endchar, n);
  165|      0|        return NULL;
  166|      0|    }
  167|    631|    for (i = 0; i < n; i+= 2) {
  ------------------
  |  Branch (167:17): [True: 502, False: 129]
  ------------------
  168|    502|        PyObject *k, *v;
  169|       |
  170|    502|        k = do_mkvalue(p_format, p_va);
  171|    502|        if (k == NULL) {
  ------------------
  |  Branch (171:13): [True: 0, False: 502]
  ------------------
  172|      0|            do_ignore(p_format, p_va, endchar, n - i - 1);
  173|      0|            Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|      0|            return NULL;
  175|      0|        }
  176|    502|        v = do_mkvalue(p_format, p_va);
  177|    502|        if (v == NULL || PyDict_SetItem(d, k, v) < 0) {
  ------------------
  |  Branch (177:13): [True: 0, False: 502]
  |  Branch (177:26): [True: 0, False: 502]
  ------------------
  178|      0|            do_ignore(p_format, p_va, endchar, n - i - 2);
  179|      0|            Py_DECREF(k);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      0|            Py_XDECREF(v);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|      0|            Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|      0|            return NULL;
  183|      0|        }
  184|    502|        Py_DECREF(k);
  ------------------
  |  |  430|    502|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|    502|        Py_DECREF(v);
  ------------------
  |  |  430|    502|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|    502|    }
  187|    129|    if (!check_end(p_format, endchar)) {
  ------------------
  |  Branch (187:9): [True: 0, False: 129]
  ------------------
  188|      0|        Py_DECREF(d);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      0|        return NULL;
  190|      0|    }
  191|    129|    return d;
  192|    129|}
modsupport.c:do_mktuple:
  258|  39.3k|{
  259|  39.3k|    PyObject *v;
  260|  39.3k|    Py_ssize_t i;
  261|  39.3k|    if (n < 0)
  ------------------
  |  Branch (261:9): [True: 0, False: 39.3k]
  ------------------
  262|      0|        return NULL;
  263|       |    /* Note that we can't bail immediately on error as this will leak
  264|       |       refcounts on any 'N' arguments. */
  265|  39.3k|    if ((v = PyTuple_New(n)) == NULL) {
  ------------------
  |  Branch (265:9): [True: 0, False: 39.3k]
  ------------------
  266|      0|        do_ignore(p_format, p_va, endchar, n);
  267|      0|        return NULL;
  268|      0|    }
  269|   193k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (269:17): [True: 154k, False: 39.3k]
  ------------------
  270|   154k|        PyObject *w = do_mkvalue(p_format, p_va);
  271|   154k|        if (w == NULL) {
  ------------------
  |  Branch (271:13): [True: 0, False: 154k]
  ------------------
  272|      0|            do_ignore(p_format, p_va, endchar, n - i - 1);
  273|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|      0|            return NULL;
  275|      0|        }
  276|   154k|        PyTuple_SET_ITEM(v, i, w);
  ------------------
  |  |   40|   154k|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   154k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   154k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|   154k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   154k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|   154k|    }
  278|  39.3k|    if (!check_end(p_format, endchar)) {
  ------------------
  |  Branch (278:9): [True: 0, False: 39.3k]
  ------------------
  279|      0|        Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  280|      0|        return NULL;
  281|      0|    }
  282|  39.3k|    return v;
  283|  39.3k|}
modsupport.c:countformat:
   55|   163k|{
   56|   163k|    Py_ssize_t count = 0;
   57|   163k|    int level = 0;
   58|  1.01M|    while (level > 0 || *format != endchar) {
  ------------------
  |  Branch (58:12): [True: 208k, False: 809k]
  |  Branch (58:25): [True: 646k, False: 163k]
  ------------------
   59|   854k|        switch (*format) {
   60|      0|        case '\0':
  ------------------
  |  Branch (60:9): [True: 0, False: 854k]
  ------------------
   61|       |            /* Premature end */
   62|      0|            PyErr_SetString(PyExc_SystemError,
   63|      0|                            "unmatched paren in format");
   64|      0|            return -1;
   65|  39.2k|        case '(':
  ------------------
  |  Branch (65:9): [True: 39.2k, False: 815k]
  ------------------
   66|  39.3k|        case '[':
  ------------------
  |  Branch (66:9): [True: 15, False: 854k]
  ------------------
   67|  39.4k|        case '{':
  ------------------
  |  Branch (67:9): [True: 129, False: 854k]
  ------------------
   68|  39.4k|            if (level == 0) {
  ------------------
  |  Branch (68:17): [True: 36.1k, False: 3.25k]
  ------------------
   69|  36.1k|                count++;
   70|  36.1k|            }
   71|  39.4k|            level++;
   72|  39.4k|            break;
   73|  39.2k|        case ')':
  ------------------
  |  Branch (73:9): [True: 39.2k, False: 815k]
  ------------------
   74|  39.3k|        case ']':
  ------------------
  |  Branch (74:9): [True: 15, False: 854k]
  ------------------
   75|  39.4k|        case '}':
  ------------------
  |  Branch (75:9): [True: 129, False: 854k]
  ------------------
   76|  39.4k|            level--;
   77|  39.4k|            break;
   78|  3.36k|        case '#':
  ------------------
  |  Branch (78:9): [True: 3.36k, False: 851k]
  ------------------
   79|  3.36k|        case '&':
  ------------------
  |  Branch (79:9): [True: 0, False: 854k]
  ------------------
   80|  3.36k|        case ',':
  ------------------
  |  Branch (80:9): [True: 0, False: 854k]
  ------------------
   81|  3.36k|        case ':':
  ------------------
  |  Branch (81:9): [True: 0, False: 854k]
  ------------------
   82|  3.36k|        case ' ':
  ------------------
  |  Branch (82:9): [True: 0, False: 854k]
  ------------------
   83|  3.36k|        case '\t':
  ------------------
  |  Branch (83:9): [True: 0, False: 854k]
  ------------------
   84|  3.36k|            break;
   85|   772k|        default:
  ------------------
  |  Branch (85:9): [True: 772k, False: 82.2k]
  ------------------
   86|   772k|            if (level == 0) {
  ------------------
  |  Branch (86:17): [True: 607k, False: 165k]
  ------------------
   87|   607k|                count++;
   88|   607k|            }
   89|   854k|        }
   90|   854k|        format++;
   91|   854k|    }
   92|   163k|    return count;
   93|   163k|}
modsupport.c:do_mkstack:
  227|  91.4k|{
  228|  91.4k|    Py_ssize_t i;
  229|       |
  230|  91.4k|    if (n < 0) {
  ------------------
  |  Branch (230:9): [True: 0, False: 91.4k]
  ------------------
  231|      0|        return -1;
  232|      0|    }
  233|       |    /* Note that we can't bail immediately on error as this will leak
  234|       |       refcounts on any 'N' arguments. */
  235|   546k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (235:17): [True: 455k, False: 91.4k]
  ------------------
  236|   455k|        PyObject *w = do_mkvalue(p_format, p_va);
  237|   455k|        if (w == NULL) {
  ------------------
  |  Branch (237:13): [True: 0, False: 455k]
  ------------------
  238|      0|            do_ignore(p_format, p_va, endchar, n - i - 1);
  239|      0|            goto error;
  240|      0|        }
  241|   455k|        stack[i] = w;
  242|   455k|    }
  243|  91.4k|    if (!check_end(p_format, endchar)) {
  ------------------
  |  Branch (243:9): [True: 0, False: 91.4k]
  ------------------
  244|      0|        goto error;
  245|      0|    }
  246|  91.4k|    return 0;
  247|       |
  248|      0|error:
  249|      0|    n = i;
  250|      0|    for (i=0; i < n; i++) {
  ------------------
  |  Branch (250:15): [True: 0, False: 0]
  ------------------
  251|      0|        Py_DECREF(stack[i]);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|      0|    }
  253|      0|    return -1;
  254|  91.4k|}

PyOS_snprintf:
   42|     24|{
   43|     24|    int rc;
   44|     24|    va_list va;
   45|       |
   46|     24|    va_start(va, format);
   47|     24|    rc = PyOS_vsnprintf(str, size, format, va);
   48|       |    va_end(va);
   49|     24|    return rc;
   50|     24|}
PyOS_vsnprintf:
   54|     24|{
   55|     24|    assert(str != NULL);
  ------------------
  |  Branch (55:5): [True: 24, False: 0]
  ------------------
   56|     24|    assert(size > 0);
  ------------------
  |  Branch (56:5): [True: 24, False: 0]
  ------------------
   57|     24|    assert(size <= (INT_MAX - 1));
  ------------------
  |  Branch (57:5): [True: 24, False: 0]
  ------------------
   58|     24|    assert(format != NULL);
  ------------------
  |  Branch (58:5): [True: 24, False: 0]
  ------------------
   59|       |
   60|     24|    int len;  /* # bytes written, excluding \0 */
   61|       |    /* We take a size_t as input but return an int.  Sanity check
   62|       |     * our input so that it won't cause an overflow in the
   63|       |     * vsnprintf return value.  */
   64|     24|    if (size > INT_MAX - 1) {
  ------------------
  |  Branch (64:9): [True: 0, False: 24]
  ------------------
   65|      0|        len = -666;
   66|      0|        goto Done;
   67|      0|    }
   68|       |
   69|       |#if defined(_MSC_VER)
   70|       |    len = _vsnprintf(str, size, format, va);
   71|       |#else
   72|     24|    len = vsnprintf(str, size, format, va);
   73|     24|#endif
   74|       |
   75|     24|Done:
   76|     24|    if (size > 0) {
  ------------------
  |  Branch (76:9): [True: 24, False: 0]
  ------------------
   77|     24|        str[size-1] = '\0';
   78|     24|    }
   79|     24|    return len;
   80|     24|}

PyOS_strtoul:
  102|  1.12M|{
  103|  1.12M|    unsigned long result = 0; /* return value of the function */
  104|  1.12M|    int c;             /* current input character */
  105|  1.12M|    int ovlimit;       /* required digits to overflow */
  106|       |
  107|       |    /* skip leading white space */
  108|  1.12M|    while (*str && Py_ISSPACE(*str))
  ------------------
  |  |   27|  1.12M|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|  1.12M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|  1.12M|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 1.12M]
  |  |  ------------------
  ------------------
  |  Branch (108:12): [True: 1.12M, False: 0]
  ------------------
  109|      0|        ++str;
  110|       |
  111|       |    /* check for leading 0b, 0o or 0x for auto-base or base 16 */
  112|  1.12M|    switch (base) {
  ------------------
  |  Branch (112:13): [True: 1.12M, False: 0]
  ------------------
  113|  1.12M|    case 0:             /* look for leading 0b, 0o or 0x */
  ------------------
  |  Branch (113:5): [True: 1.12M, False: 0]
  ------------------
  114|  1.12M|        if (*str == '0') {
  ------------------
  |  Branch (114:13): [True: 74.9k, False: 1.04M]
  ------------------
  115|  74.9k|            ++str;
  116|  74.9k|            if (*str == 'x' || *str == 'X') {
  ------------------
  |  Branch (116:17): [True: 1.81k, False: 73.1k]
  |  Branch (116:32): [True: 764, False: 72.3k]
  ------------------
  117|       |                /* there must be at least one digit after 0x */
  118|  2.57k|                if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
  ------------------
  |  |  163|  2.57k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (118:21): [True: 0, False: 2.57k]
  ------------------
  119|      0|                    if (ptr)
  ------------------
  |  Branch (119:25): [True: 0, False: 0]
  ------------------
  120|      0|                        *ptr = (char *)str;
  121|      0|                    return 0;
  122|      0|                }
  123|  2.57k|                ++str;
  124|  2.57k|                base = 16;
  125|  72.3k|            } else if (*str == 'o' || *str == 'O') {
  ------------------
  |  Branch (125:24): [True: 1.04k, False: 71.3k]
  |  Branch (125:39): [True: 848, False: 70.4k]
  ------------------
  126|       |                /* there must be at least one digit after 0o */
  127|  1.89k|                if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
  ------------------
  |  |  163|  1.89k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (127:21): [True: 0, False: 1.89k]
  ------------------
  128|      0|                    if (ptr)
  ------------------
  |  Branch (128:25): [True: 0, False: 0]
  ------------------
  129|      0|                        *ptr = (char *)str;
  130|      0|                    return 0;
  131|      0|                }
  132|  1.89k|                ++str;
  133|  1.89k|                base = 8;
  134|  70.4k|            } else if (*str == 'b' || *str == 'B') {
  ------------------
  |  Branch (134:24): [True: 1.01k, False: 69.4k]
  |  Branch (134:39): [True: 570, False: 68.9k]
  ------------------
  135|       |                /* there must be at least one digit after 0b */
  136|  1.58k|                if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
  ------------------
  |  |  163|  1.58k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (136:21): [True: 0, False: 1.58k]
  ------------------
  137|      0|                    if (ptr)
  ------------------
  |  Branch (137:25): [True: 0, False: 0]
  ------------------
  138|      0|                        *ptr = (char *)str;
  139|      0|                    return 0;
  140|      0|                }
  141|  1.58k|                ++str;
  142|  1.58k|                base = 2;
  143|  68.9k|            } else {
  144|       |                /* skip all zeroes... */
  145|   143k|                while (*str == '0')
  ------------------
  |  Branch (145:24): [True: 74.5k, False: 68.9k]
  ------------------
  146|  74.5k|                    ++str;
  147|  68.9k|                while (Py_ISSPACE(*str))
  ------------------
  |  |   27|  68.9k|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|  68.9k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|  68.9k|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 68.9k]
  |  |  ------------------
  ------------------
  148|      0|                    ++str;
  149|  68.9k|                if (ptr)
  ------------------
  |  Branch (149:21): [True: 68.9k, False: 0]
  ------------------
  150|  68.9k|                    *ptr = (char *)str;
  151|  68.9k|                return 0;
  152|  68.9k|            }
  153|  74.9k|        }
  154|  1.04M|        else
  155|  1.04M|            base = 10;
  156|  1.05M|        break;
  157|       |
  158|       |    /* even with explicit base, skip leading 0? prefix */
  159|  1.05M|    case 16:
  ------------------
  |  Branch (159:5): [True: 0, False: 1.12M]
  ------------------
  160|      0|        if (*str == '0') {
  ------------------
  |  Branch (160:13): [True: 0, False: 0]
  ------------------
  161|      0|            ++str;
  162|      0|            if (*str == 'x' || *str == 'X') {
  ------------------
  |  Branch (162:17): [True: 0, False: 0]
  |  Branch (162:32): [True: 0, False: 0]
  ------------------
  163|       |                /* there must be at least one digit after 0x */
  164|      0|                if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (164:21): [True: 0, False: 0]
  ------------------
  165|      0|                    if (ptr)
  ------------------
  |  Branch (165:25): [True: 0, False: 0]
  ------------------
  166|      0|                        *ptr = (char *)str;
  167|      0|                    return 0;
  168|      0|                }
  169|      0|                ++str;
  170|      0|            }
  171|      0|        }
  172|      0|        break;
  173|      0|    case 8:
  ------------------
  |  Branch (173:5): [True: 0, False: 1.12M]
  ------------------
  174|      0|        if (*str == '0') {
  ------------------
  |  Branch (174:13): [True: 0, False: 0]
  ------------------
  175|      0|            ++str;
  176|      0|            if (*str == 'o' || *str == 'O') {
  ------------------
  |  Branch (176:17): [True: 0, False: 0]
  |  Branch (176:32): [True: 0, False: 0]
  ------------------
  177|       |                /* there must be at least one digit after 0o */
  178|      0|                if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (178:21): [True: 0, False: 0]
  ------------------
  179|      0|                    if (ptr)
  ------------------
  |  Branch (179:25): [True: 0, False: 0]
  ------------------
  180|      0|                        *ptr = (char *)str;
  181|      0|                    return 0;
  182|      0|                }
  183|      0|                ++str;
  184|      0|            }
  185|      0|        }
  186|      0|        break;
  187|      0|    case 2:
  ------------------
  |  Branch (187:5): [True: 0, False: 1.12M]
  ------------------
  188|      0|        if(*str == '0') {
  ------------------
  |  Branch (188:12): [True: 0, False: 0]
  ------------------
  189|      0|            ++str;
  190|      0|            if (*str == 'b' || *str == 'B') {
  ------------------
  |  Branch (190:17): [True: 0, False: 0]
  |  Branch (190:32): [True: 0, False: 0]
  ------------------
  191|       |                /* there must be at least one digit after 0b */
  192|      0|                if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
  ------------------
  |  |  163|      0|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (192:21): [True: 0, False: 0]
  ------------------
  193|      0|                    if (ptr)
  ------------------
  |  Branch (193:25): [True: 0, False: 0]
  ------------------
  194|      0|                        *ptr = (char *)str;
  195|      0|                    return 0;
  196|      0|                }
  197|      0|                ++str;
  198|      0|            }
  199|      0|        }
  200|      0|        break;
  201|  1.12M|    }
  202|       |
  203|       |    /* catch silly bases */
  204|  1.05M|    if (base < 2 || base > 36) {
  ------------------
  |  Branch (204:9): [True: 0, False: 1.05M]
  |  Branch (204:21): [True: 0, False: 1.05M]
  ------------------
  205|      0|        if (ptr)
  ------------------
  |  Branch (205:13): [True: 0, False: 0]
  ------------------
  206|      0|            *ptr = (char *)str;
  207|      0|        return 0;
  208|      0|    }
  209|       |
  210|       |    /* skip leading zeroes */
  211|  1.06M|    while (*str == '0')
  ------------------
  |  Branch (211:12): [True: 15.8k, False: 1.05M]
  ------------------
  212|  15.8k|        ++str;
  213|       |
  214|       |    /* base is guaranteed to be in [2, 36] at this point */
  215|  1.05M|    ovlimit = digitlimit[base];
  216|       |
  217|       |    /* do the conversion until non-digit character encountered */
  218|  5.01M|    while ((c = _PyLong_DigitValue[Py_CHARMASK(*str)]) < base) {
  ------------------
  |  |  163|  5.01M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (218:12): [True: 4.00M, False: 1.01M]
  ------------------
  219|  4.00M|        if (ovlimit > 0) /* no overflow check required */
  ------------------
  |  Branch (219:13): [True: 3.96M, False: 45.5k]
  ------------------
  220|  3.96M|            result = result * base + c;
  221|  45.5k|        else { /* requires overflow check */
  222|  45.5k|            unsigned long temp_result;
  223|       |
  224|  45.5k|            if (ovlimit < 0) /* guaranteed overflow */
  ------------------
  |  Branch (224:17): [True: 3.63k, False: 41.9k]
  ------------------
  225|  3.63k|                goto overflowed;
  226|       |
  227|       |            /* there could be an overflow */
  228|       |            /* check overflow just from shifting */
  229|  41.9k|            if (result > smallmax[base])
  ------------------
  |  Branch (229:17): [True: 35.2k, False: 6.71k]
  ------------------
  230|  35.2k|                goto overflowed;
  231|       |
  232|  6.71k|            result *= base;
  233|       |
  234|       |            /* check overflow from the digit's value */
  235|  6.71k|            temp_result = result + c;
  236|  6.71k|            if (temp_result < result)
  ------------------
  |  Branch (236:17): [True: 2.38k, False: 4.32k]
  ------------------
  237|  2.38k|                goto overflowed;
  238|       |
  239|  4.32k|            result = temp_result;
  240|  4.32k|        }
  241|       |
  242|  3.96M|        ++str;
  243|  3.96M|        --ovlimit;
  244|  3.96M|    }
  245|       |
  246|       |    /* set pointer to point to the last character scanned */
  247|  1.01M|    if (ptr)
  ------------------
  |  Branch (247:9): [True: 1.01M, False: 0]
  ------------------
  248|  1.01M|        *ptr = (char *)str;
  249|       |
  250|  1.01M|    return result;
  251|       |
  252|  41.2k|overflowed:
  253|  41.2k|    if (ptr) {
  ------------------
  |  Branch (253:9): [True: 41.2k, False: 0]
  ------------------
  254|       |        /* spool through remaining digit characters */
  255|  2.02M|        while (_PyLong_DigitValue[Py_CHARMASK(*str)] < base)
  ------------------
  |  |  163|  2.02M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  ------------------
  |  Branch (255:16): [True: 1.98M, False: 41.2k]
  ------------------
  256|  1.98M|            ++str;
  257|  41.2k|        *ptr = (char *)str;
  258|  41.2k|    }
  259|  41.2k|    errno = ERANGE;
  260|  41.2k|    return (unsigned long)-1;
  261|  1.05M|}
PyOS_strtol:
  270|  1.04M|{
  271|  1.04M|    long result;
  272|  1.04M|    unsigned long uresult;
  273|  1.04M|    char sign;
  274|       |
  275|  1.04M|    while (*str && Py_ISSPACE(*str))
  ------------------
  |  |   27|  1.04M|#define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |  163|  1.04M|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISSPACE(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
  |  |  ------------------
  |  |  |  |   13|  1.04M|#define PY_CTF_SPACE  0x08
  |  |  ------------------
  |  |  |  Branch (27:24): [True: 0, False: 1.04M]
  |  |  ------------------
  ------------------
  |  Branch (275:12): [True: 1.04M, False: 0]
  ------------------
  276|      0|        str++;
  277|       |
  278|  1.04M|    sign = *str;
  279|  1.04M|    if (sign == '+' || sign == '-')
  ------------------
  |  Branch (279:9): [True: 0, False: 1.04M]
  |  Branch (279:24): [True: 0, False: 1.04M]
  ------------------
  280|      0|        str++;
  281|       |
  282|  1.04M|    uresult = PyOS_strtoul(str, ptr, base);
  283|       |
  284|  1.04M|    if (uresult <= (unsigned long)LONG_MAX) {
  ------------------
  |  Branch (284:9): [True: 1.00M, False: 41.6k]
  ------------------
  285|  1.00M|        result = (long)uresult;
  286|  1.00M|        if (sign == '-')
  ------------------
  |  Branch (286:13): [True: 0, False: 1.00M]
  ------------------
  287|      0|            result = -result;
  288|  1.00M|    }
  289|  41.6k|    else if (sign == '-' && uresult == PY_ABS_LONG_MIN) {
  ------------------
  |  |  266|      0|#define PY_ABS_LONG_MIN         (0-(unsigned long)LONG_MIN)
  ------------------
  |  Branch (289:14): [True: 0, False: 41.6k]
  |  Branch (289:29): [True: 0, False: 0]
  ------------------
  290|      0|        result = LONG_MIN;
  291|      0|    }
  292|  41.6k|    else {
  293|  41.6k|        errno = ERANGE;
  294|       |        result = LONG_MAX;
  295|  41.6k|    }
  296|  1.04M|    return result;
  297|  1.04M|}

_PyPathConfig_GetGlobalModuleSearchPath:
   49|      2|{
   50|      2|    return _Py_path_config.module_search_path;
   51|      2|}
_PyPathConfig_ReadGlobal:
   78|      4|{
   79|      4|    PyStatus status = _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
   80|       |
   81|      4|#define COPY(ATTR) \
   82|      4|    do { \
   83|      4|        if (_Py_path_config.ATTR && !config->ATTR) { \
   84|      4|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.ATTR); \
   85|      4|            if (_PyStatus_EXCEPTION(status)) goto done; \
   86|      4|        } \
   87|      4|    } while (0)
   88|       |
   89|      4|#define COPY2(ATTR, SRCATTR) \
   90|      4|    do { \
   91|      4|        if (_Py_path_config.SRCATTR && !config->ATTR) { \
   92|      4|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.SRCATTR); \
   93|      4|            if (_PyStatus_EXCEPTION(status)) goto done; \
   94|      4|        } \
   95|      4|    } while (0)
   96|       |
   97|      4|#define COPY_INT(ATTR) \
   98|      4|    do { \
   99|      4|        assert(_Py_path_config.ATTR >= 0); \
  100|      4|        if ((_Py_path_config.ATTR >= 0) && (config->ATTR <= 0)) { \
  101|      4|            config->ATTR = _Py_path_config.ATTR; \
  102|      4|        } \
  103|      4|    } while (0)
  104|       |
  105|      4|    COPY(prefix);
  ------------------
  |  |   82|      4|    do { \
  |  |   83|      4|        if (_Py_path_config.ATTR && !config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (83:13): [True: 0, False: 4]
  |  |  |  Branch (83:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   84|      0|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.ATTR); \
  |  |   85|      0|            if (_PyStatus_EXCEPTION(status)) goto done; \
  |  |  ------------------
  |  |  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|        } \
  |  |   87|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  106|      4|    COPY(exec_prefix);
  ------------------
  |  |   82|      4|    do { \
  |  |   83|      4|        if (_Py_path_config.ATTR && !config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (83:13): [True: 0, False: 4]
  |  |  |  Branch (83:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   84|      0|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.ATTR); \
  |  |   85|      0|            if (_PyStatus_EXCEPTION(status)) goto done; \
  |  |  ------------------
  |  |  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|        } \
  |  |   87|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  107|      4|    COPY(stdlib_dir);
  ------------------
  |  |   82|      4|    do { \
  |  |   83|      4|        if (_Py_path_config.ATTR && !config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (83:13): [True: 0, False: 4]
  |  |  |  Branch (83:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   84|      0|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.ATTR); \
  |  |   85|      0|            if (_PyStatus_EXCEPTION(status)) goto done; \
  |  |  ------------------
  |  |  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|        } \
  |  |   87|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  108|      4|    COPY(program_name);
  ------------------
  |  |   82|      4|    do { \
  |  |   83|      4|        if (_Py_path_config.ATTR && !config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (83:13): [True: 0, False: 4]
  |  |  |  Branch (83:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   84|      0|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.ATTR); \
  |  |   85|      0|            if (_PyStatus_EXCEPTION(status)) goto done; \
  |  |  ------------------
  |  |  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|        } \
  |  |   87|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  109|      4|    COPY(home);
  ------------------
  |  |   82|      4|    do { \
  |  |   83|      4|        if (_Py_path_config.ATTR && !config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (83:13): [True: 0, False: 4]
  |  |  |  Branch (83:37): [True: 0, False: 0]
  |  |  ------------------
  |  |   84|      0|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.ATTR); \
  |  |   85|      0|            if (_PyStatus_EXCEPTION(status)) goto done; \
  |  |  ------------------
  |  |  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|        } \
  |  |   87|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  110|      4|    COPY2(executable, program_full_path);
  ------------------
  |  |   90|      4|    do { \
  |  |   91|      4|        if (_Py_path_config.SRCATTR && !config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (91:13): [True: 0, False: 4]
  |  |  |  Branch (91:40): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|            status = PyConfig_SetString(config, &config->ATTR, _Py_path_config.SRCATTR); \
  |  |   93|      0|            if (_PyStatus_EXCEPTION(status)) goto done; \
  |  |  ------------------
  |  |  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      0|        } \
  |  |   95|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (95:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  111|      4|    COPY_INT(_is_python_build);
  ------------------
  |  |   98|      4|    do { \
  |  |   99|      4|        assert(_Py_path_config.ATTR >= 0); \
  |  |  100|      4|        if ((_Py_path_config.ATTR >= 0) && (config->ATTR <= 0)) { \
  |  |  ------------------
  |  |  |  Branch (100:13): [True: 4, False: 0]
  |  |  |  Branch (100:44): [True: 4, False: 0]
  |  |  ------------------
  |  |  101|      4|            config->ATTR = _Py_path_config.ATTR; \
  |  |  102|      4|        } \
  |  |  103|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (103:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (111:5): [True: 4, False: 0]
  ------------------
  112|       |    // module_search_path must be initialised - not read
  113|      4|#undef COPY
  114|      4|#undef COPY2
  115|      4|#undef COPY_INT
  116|       |
  117|      4|done:
  118|      4|    return status;
  119|      4|}
_PyPathConfig_UpdateGlobal:
  123|      2|{
  124|      2|#define COPY(ATTR) \
  125|      2|    do { \
  126|      2|        if (config->ATTR) { \
  127|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  128|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->ATTR); \
  129|      2|            if (!_Py_path_config.ATTR) goto error; \
  130|      2|        } \
  131|      2|    } while (0)
  132|       |
  133|      2|#define COPY2(ATTR, SRCATTR) \
  134|      2|    do { \
  135|      2|        if (config->SRCATTR) { \
  136|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  137|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->SRCATTR); \
  138|      2|            if (!_Py_path_config.ATTR) goto error; \
  139|      2|        } \
  140|      2|    } while (0)
  141|       |
  142|      2|#define COPY_INT(ATTR) \
  143|      2|    do { \
  144|      2|        if (config->ATTR > 0) { \
  145|      2|            _Py_path_config.ATTR = config->ATTR; \
  146|      2|        } \
  147|      2|    } while (0)
  148|       |
  149|      2|    COPY(prefix);
  ------------------
  |  |  125|      2|    do { \
  |  |  126|      2|        if (config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (126:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  127|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  |  |  128|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->ATTR); \
  |  |  129|      2|            if (!_Py_path_config.ATTR) goto error; \
  |  |  ------------------
  |  |  |  Branch (129:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  130|      2|        } \
  |  |  131|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (131:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  150|      2|    COPY(exec_prefix);
  ------------------
  |  |  125|      2|    do { \
  |  |  126|      2|        if (config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (126:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  127|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  |  |  128|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->ATTR); \
  |  |  129|      2|            if (!_Py_path_config.ATTR) goto error; \
  |  |  ------------------
  |  |  |  Branch (129:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  130|      2|        } \
  |  |  131|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (131:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  151|      2|    COPY(stdlib_dir);
  ------------------
  |  |  125|      2|    do { \
  |  |  126|      2|        if (config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (126:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  127|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  |  |  128|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->ATTR); \
  |  |  129|      2|            if (!_Py_path_config.ATTR) goto error; \
  |  |  ------------------
  |  |  |  Branch (129:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  130|      2|        } \
  |  |  131|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (131:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  152|      2|    COPY(program_name);
  ------------------
  |  |  125|      2|    do { \
  |  |  126|      2|        if (config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (126:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  127|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  |  |  128|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->ATTR); \
  |  |  129|      2|            if (!_Py_path_config.ATTR) goto error; \
  |  |  ------------------
  |  |  |  Branch (129:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  130|      2|        } \
  |  |  131|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (131:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  153|      2|    COPY(home);
  ------------------
  |  |  125|      2|    do { \
  |  |  126|      2|        if (config->ATTR) { \
  |  |  ------------------
  |  |  |  Branch (126:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  127|      0|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  |  |  128|      0|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->ATTR); \
  |  |  129|      0|            if (!_Py_path_config.ATTR) goto error; \
  |  |  ------------------
  |  |  |  Branch (129:17): [True: 0, False: 0]
  |  |  ------------------
  |  |  130|      0|        } \
  |  |  131|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (131:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  154|      2|    COPY2(program_full_path, executable);
  ------------------
  |  |  134|      2|    do { \
  |  |  135|      2|        if (config->SRCATTR) { \
  |  |  ------------------
  |  |  |  Branch (135:13): [True: 2, False: 0]
  |  |  ------------------
  |  |  136|      2|            _PyMem_DefaultRawFree(_Py_path_config.ATTR); \
  |  |  137|      2|            _Py_path_config.ATTR = _PyMem_DefaultRawWcsdup(config->SRCATTR); \
  |  |  138|      2|            if (!_Py_path_config.ATTR) goto error; \
  |  |  ------------------
  |  |  |  Branch (138:17): [True: 0, False: 2]
  |  |  ------------------
  |  |  139|      2|        } \
  |  |  140|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (140:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  155|      2|    COPY_INT(_is_python_build);
  ------------------
  |  |  143|      2|    do { \
  |  |  144|      2|        if (config->ATTR > 0) { \
  |  |  ------------------
  |  |  |  Branch (144:13): [True: 0, False: 2]
  |  |  ------------------
  |  |  145|      0|            _Py_path_config.ATTR = config->ATTR; \
  |  |  146|      0|        } \
  |  |  147|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (147:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
  156|      2|#undef COPY
  157|      2|#undef COPY2
  158|      2|#undef COPY_INT
  159|       |
  160|      2|    _PyMem_DefaultRawFree(_Py_path_config.module_search_path);
  161|      2|    _Py_path_config.module_search_path = NULL;
  162|      2|    _PyMem_DefaultRawFree(_Py_path_config.calculated_module_search_path);
  163|      2|    _Py_path_config.calculated_module_search_path = NULL;
  164|       |
  165|      2|    do {
  166|      2|        size_t cch = 1;
  167|      8|        for (Py_ssize_t i = 0; i < config->module_search_paths.length; ++i) {
  ------------------
  |  Branch (167:32): [True: 6, False: 2]
  ------------------
  168|      6|            cch += 1 + wcslen(config->module_search_paths.items[i]);
  169|      6|        }
  170|       |
  171|      2|        wchar_t *path = (wchar_t*)_PyMem_DefaultRawMalloc(sizeof(wchar_t) * cch);
  172|      2|        if (!path) {
  ------------------
  |  Branch (172:13): [True: 0, False: 2]
  ------------------
  173|      0|            goto error;
  174|      0|        }
  175|      2|        wchar_t *p = path;
  176|      8|        for (Py_ssize_t i = 0; i < config->module_search_paths.length; ++i) {
  ------------------
  |  Branch (176:32): [True: 6, False: 2]
  ------------------
  177|      6|            wcscpy(p, config->module_search_paths.items[i]);
  178|      6|            p = wcschr(p, L'\0');
  179|      6|            *p++ = DELIM;
  ------------------
  |  |   51|      6|#  define DELIM L':'
  ------------------
  180|      6|            *p = L'\0';
  181|      6|        }
  182|       |
  183|      4|        do {
  184|      4|            *p = L'\0';
  185|      4|        } while (p != path && *--p == DELIM);
  ------------------
  |  |   51|      4|#  define DELIM L':'
  ------------------
  |  Branch (185:18): [True: 4, False: 0]
  |  Branch (185:31): [True: 2, False: 2]
  ------------------
  186|      2|        _Py_path_config.calculated_module_search_path = path;
  187|      2|    } while (0);
  ------------------
  |  Branch (187:14): [Folded, False: 2]
  ------------------
  188|       |
  189|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  190|       |
  191|      0|error:
  192|      0|    return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  193|      2|}
_Py_GetStdlibDir:
  292|      2|{
  293|      2|    wchar_t *stdlib_dir = _Py_path_config.stdlib_dir;
  294|      2|    if (stdlib_dir != NULL && stdlib_dir[0] != L'\0') {
  ------------------
  |  Branch (294:9): [True: 2, False: 0]
  |  Branch (294:31): [True: 2, False: 0]
  ------------------
  295|      2|        return stdlib_dir;
  296|      2|    }
  297|      0|    return NULL;
  298|      2|}

_Py_ClearFileSystemEncoding:
   35|      2|{
   36|      2|    if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
  ------------------
  |  Branch (36:9): [True: 2, False: 0]
  |  Branch (36:45): [True: 0, False: 2]
  ------------------
   37|      0|        PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
   38|      0|        Py_FileSystemDefaultEncoding = NULL;
   39|      0|    }
   40|      2|    if (!_Py_HasFileSystemDefaultEncodeErrors && Py_FileSystemDefaultEncodeErrors) {
  ------------------
  |  Branch (40:9): [True: 2, False: 0]
  |  Branch (40:50): [True: 0, False: 2]
  ------------------
   41|      0|        PyMem_RawFree((char*)Py_FileSystemDefaultEncodeErrors);
   42|       |        Py_FileSystemDefaultEncodeErrors = NULL;
   43|      0|    }
   44|      2|}
_Py_SetFileSystemEncoding:
   54|      2|{
   55|      2|    char *encoding2 = _PyMem_RawStrdup(encoding);
   56|      2|    if (encoding2 == NULL) {
  ------------------
  |  Branch (56:9): [True: 0, False: 2]
  ------------------
   57|      0|        return -1;
   58|      0|    }
   59|       |
   60|      2|    char *errors2 = _PyMem_RawStrdup(errors);
   61|      2|    if (errors2 == NULL) {
  ------------------
  |  Branch (61:9): [True: 0, False: 2]
  ------------------
   62|      0|        PyMem_RawFree(encoding2);
   63|      0|        return -1;
   64|      0|    }
   65|       |
   66|      2|    _Py_ClearFileSystemEncoding();
   67|       |
   68|      2|    Py_FileSystemDefaultEncoding = encoding2;
   69|      2|    Py_HasFileSystemDefaultEncoding = 0;
   70|       |
   71|      2|    Py_FileSystemDefaultEncodeErrors = errors2;
   72|      2|    _Py_HasFileSystemDefaultEncodeErrors = 0;
   73|      2|    return 0;
   74|      2|}
_PyArgv_AsWstrList:
   82|      4|{
   83|      4|    PyWideStringList wargv = _PyWideStringList_INIT;
  ------------------
  |  |   53|      4|#define _PyWideStringList_INIT (PyWideStringList){.length = 0, .items = NULL}
  ------------------
   84|      4|    if (args->use_bytes_argv) {
  ------------------
  |  Branch (84:9): [True: 0, False: 4]
  ------------------
   85|      0|        size_t size = sizeof(wchar_t*) * args->argc;
   86|      0|        wargv.items = (wchar_t **)PyMem_RawMalloc(size);
   87|      0|        if (wargv.items == NULL) {
  ------------------
  |  Branch (87:13): [True: 0, False: 0]
  ------------------
   88|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
   89|      0|        }
   90|       |
   91|      0|        for (Py_ssize_t i = 0; i < args->argc; i++) {
  ------------------
  |  Branch (91:32): [True: 0, False: 0]
  ------------------
   92|      0|            size_t len;
   93|      0|            wchar_t *arg = Py_DecodeLocale(args->bytes_argv[i], &len);
   94|      0|            if (arg == NULL) {
  ------------------
  |  Branch (94:17): [True: 0, False: 0]
  ------------------
   95|      0|                _PyWideStringList_Clear(&wargv);
   96|      0|                return DECODE_LOCALE_ERR("command line arguments", len);
  ------------------
  |  |  189|      0|    ((LEN) == (size_t)-2) \
  |  |  ------------------
  |  |  |  Branch (189:5): [True: 0, False: 0]
  |  |  ------------------
  |  |  190|      0|     ? _PyStatus_ERR("cannot decode " NAME) \
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  |  |  191|      0|     : _PyStatus_NO_MEMORY()
  |  |  ------------------
  |  |  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|      0|            }
   98|      0|            wargv.items[i] = arg;
   99|      0|            wargv.length++;
  100|      0|        }
  101|       |
  102|      0|        _PyWideStringList_Clear(list);
  103|      0|        *list = wargv;
  104|      0|    }
  105|      4|    else {
  106|      4|        wargv.length = args->argc;
  107|      4|        wargv.items = (wchar_t **)args->wchar_argv;
  108|      4|        if (_PyWideStringList_Copy(list, &wargv) < 0) {
  ------------------
  |  Branch (108:13): [True: 0, False: 4]
  ------------------
  109|      0|            return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  110|      0|        }
  111|      4|    }
  112|      4|    return _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  113|      4|}
_PyPreCmdline_Clear:
  120|      4|{
  121|      4|    _PyWideStringList_Clear(&cmdline->argv);
  122|      4|    _PyWideStringList_Clear(&cmdline->xoptions);
  123|      4|}
_PyPreCmdline_SetArgv:
  128|      4|{
  129|      4|    return _PyArgv_AsWstrList(args, &cmdline->argv);
  130|      4|}
_PyPreCmdline_SetConfig:
  165|      2|{
  166|      2|#define COPY_ATTR(ATTR) \
  167|      2|    config->ATTR = cmdline->ATTR
  168|       |
  169|      2|    PyStatus status = _PyWideStringList_Extend(&config->xoptions, &cmdline->xoptions);
  170|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  171|      0|        return status;
  172|      0|    }
  173|       |
  174|      2|    COPY_ATTR(isolated);
  ------------------
  |  |  167|      2|    config->ATTR = cmdline->ATTR
  ------------------
  175|      2|    COPY_ATTR(use_environment);
  ------------------
  |  |  167|      2|    config->ATTR = cmdline->ATTR
  ------------------
  176|      2|    COPY_ATTR(dev_mode);
  ------------------
  |  |  167|      2|    config->ATTR = cmdline->ATTR
  ------------------
  177|      2|    COPY_ATTR(warn_default_encoding);
  ------------------
  |  |  167|      2|    config->ATTR = cmdline->ATTR
  ------------------
  178|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  179|       |
  180|      2|#undef COPY_ATTR
  181|      2|}
_PyPreCmdline_Read:
  234|      6|{
  235|      6|    precmdline_get_preconfig(cmdline, preconfig);
  236|       |
  237|      6|    if (preconfig->parse_argv) {
  ------------------
  |  Branch (237:9): [True: 6, False: 0]
  ------------------
  238|      6|        PyStatus status = precmdline_parse_cmdline(cmdline);
  239|      6|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      6|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 6]
  |  |  ------------------
  ------------------
  240|      0|            return status;
  241|      0|        }
  242|      6|    }
  243|       |
  244|       |    /* isolated, use_environment */
  245|      6|    if (cmdline->isolated < 0) {
  ------------------
  |  Branch (245:9): [True: 0, False: 6]
  ------------------
  246|      0|        cmdline->isolated = 0;
  247|      0|    }
  248|      6|    if (cmdline->isolated > 0) {
  ------------------
  |  Branch (248:9): [True: 0, False: 6]
  ------------------
  249|      0|        cmdline->use_environment = 0;
  250|      0|    }
  251|      6|    if (cmdline->use_environment < 0) {
  ------------------
  |  Branch (251:9): [True: 0, False: 6]
  ------------------
  252|      0|        cmdline->use_environment = 0;
  253|      0|    }
  254|       |
  255|       |    /* dev_mode */
  256|      6|    if ((cmdline->dev_mode < 0)
  ------------------
  |  Branch (256:9): [True: 2, False: 4]
  ------------------
  257|      2|        && (_Py_get_xoption(&cmdline->xoptions, L"dev")
  ------------------
  |  Branch (257:13): [True: 0, False: 2]
  ------------------
  258|      2|            || _Py_GetEnv(cmdline->use_environment, "PYTHONDEVMODE")))
  ------------------
  |  Branch (258:16): [True: 0, False: 2]
  ------------------
  259|      0|    {
  260|      0|        cmdline->dev_mode = 1;
  261|      0|    }
  262|      6|    if (cmdline->dev_mode < 0) {
  ------------------
  |  Branch (262:9): [True: 2, False: 4]
  ------------------
  263|      2|        cmdline->dev_mode = 0;
  264|      2|    }
  265|       |
  266|       |    // warn_default_encoding
  267|      6|    if (_Py_get_xoption(&cmdline->xoptions, L"warn_default_encoding")
  ------------------
  |  Branch (267:9): [True: 0, False: 6]
  ------------------
  268|      6|            || _Py_GetEnv(cmdline->use_environment, "PYTHONWARNDEFAULTENCODING"))
  ------------------
  |  Branch (268:16): [True: 0, False: 6]
  ------------------
  269|      0|    {
  270|      0|        cmdline->warn_default_encoding = 1;
  271|      0|    }
  272|       |
  273|      6|    assert(cmdline->use_environment >= 0);
  ------------------
  |  Branch (273:5): [True: 6, False: 0]
  ------------------
  274|      6|    assert(cmdline->isolated >= 0);
  ------------------
  |  Branch (274:5): [True: 6, False: 0]
  ------------------
  275|      6|    assert(cmdline->dev_mode >= 0);
  ------------------
  |  Branch (275:5): [True: 6, False: 0]
  ------------------
  276|      6|    assert(cmdline->warn_default_encoding >= 0);
  ------------------
  |  Branch (276:5): [True: 6, False: 0]
  ------------------
  277|       |
  278|      6|    return _PyStatus_OK();
  ------------------
  |  |   24|      6|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  279|      6|}
_PyPreConfig_InitCompatConfig:
  287|     12|{
  288|     12|    memset(config, 0, sizeof(*config));
  289|       |
  290|     12|    config->_config_init = (int)_PyConfig_INIT_COMPAT;
  291|     12|    config->parse_argv = 0;
  292|     12|    config->isolated = -1;
  293|     12|    config->use_environment = -1;
  294|     12|    config->configure_locale = 1;
  295|       |
  296|       |    /* gh-80624: C locale coercion (PEP 538) is disabled by default using
  297|       |       the Compat configuration.
  298|       |
  299|       |       Py_UTF8Mode=0 disables the UTF-8 mode. PYTHONUTF8 environment variable
  300|       |       is ignored (even if use_environment=1). */
  301|     12|    config->utf8_mode = 1;
  302|     12|    config->coerce_c_locale = 0;
  303|     12|    config->coerce_c_locale_warn = 0;
  304|       |
  305|     12|    config->dev_mode = -1;
  306|     12|    config->allocator = PYMEM_ALLOCATOR_NOT_SET;
  307|       |#ifdef MS_WINDOWS
  308|       |    config->legacy_windows_fs_encoding = -1;
  309|       |#endif
  310|     12|}
PyPreConfig_InitPythonConfig:
  315|     12|{
  316|     12|    _PyPreConfig_InitCompatConfig(config);
  317|       |
  318|     12|    config->_config_init = (int)_PyConfig_INIT_PYTHON;
  319|     12|    config->isolated = 0;
  320|     12|    config->parse_argv = 1;
  321|     12|    config->use_environment = 1;
  322|       |    /* Set to -1 to enable C locale coercion (PEP 538) depending on
  323|       |       the LC_CTYPE locale, PYTHONUTF8 and PYTHONCOERCECLOCALE
  324|       |       environment variables. */
  325|     12|    config->coerce_c_locale = -1;
  326|     12|    config->coerce_c_locale_warn = -1;
  327|     12|    config->utf8_mode = -1;
  328|       |#ifdef MS_WINDOWS
  329|       |    config->legacy_windows_fs_encoding = 0;
  330|       |#endif
  331|     12|}
_PyPreConfig_InitFromPreConfig:
  354|      8|{
  355|      8|    PyPreConfig_InitPythonConfig(config);
  356|      8|    preconfig_copy(config, config2);
  357|      8|    return _PyStatus_OK();
  ------------------
  |  |   24|      8|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  358|      8|}
_PyPreConfig_InitFromConfig:
  363|      2|{
  364|      2|    _PyConfigInitEnum config_init = (_PyConfigInitEnum)config->_config_init;
  365|      2|    switch (config_init) {
  366|      2|    case _PyConfig_INIT_PYTHON:
  ------------------
  |  Branch (366:5): [True: 2, False: 0]
  ------------------
  367|      2|        PyPreConfig_InitPythonConfig(preconfig);
  368|      2|        break;
  369|      0|    case _PyConfig_INIT_ISOLATED:
  ------------------
  |  Branch (369:5): [True: 0, False: 2]
  ------------------
  370|      0|        PyPreConfig_InitIsolatedConfig(preconfig);
  371|      0|        break;
  372|      0|    case _PyConfig_INIT_COMPAT:
  ------------------
  |  Branch (372:5): [True: 0, False: 2]
  ------------------
  373|      0|    default:
  ------------------
  |  Branch (373:5): [True: 0, False: 2]
  ------------------
  374|      0|        _PyPreConfig_InitCompatConfig(preconfig);
  375|      2|    }
  376|       |
  377|      2|    _PyPreConfig_GetConfig(preconfig, config);
  378|      2|}
_PyPreConfig_GetConfig:
  452|      4|{
  453|      4|#define COPY_ATTR(ATTR) \
  454|      4|    if (config->ATTR != -1) { \
  455|      4|        preconfig->ATTR = config->ATTR; \
  456|      4|    }
  457|       |
  458|      4|    COPY_ATTR(parse_argv);
  ------------------
  |  |  454|      4|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (454:9): [True: 4, False: 0]
  |  |  ------------------
  |  |  455|      4|        preconfig->ATTR = config->ATTR; \
  |  |  456|      4|    }
  ------------------
  459|      4|    COPY_ATTR(isolated);
  ------------------
  |  |  454|      4|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (454:9): [True: 4, False: 0]
  |  |  ------------------
  |  |  455|      4|        preconfig->ATTR = config->ATTR; \
  |  |  456|      4|    }
  ------------------
  460|      4|    COPY_ATTR(use_environment);
  ------------------
  |  |  454|      4|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (454:9): [True: 4, False: 0]
  |  |  ------------------
  |  |  455|      4|        preconfig->ATTR = config->ATTR; \
  |  |  456|      4|    }
  ------------------
  461|      4|    COPY_ATTR(dev_mode);
  ------------------
  |  |  454|      4|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (454:9): [True: 2, False: 2]
  |  |  ------------------
  |  |  455|      2|        preconfig->ATTR = config->ATTR; \
  |  |  456|      2|    }
  ------------------
  462|       |
  463|      4|#undef COPY_ATTR
  464|      4|}
_Py_GetEnv:
  492|     72|{
  493|     72|    assert(use_environment >= 0);
  ------------------
  |  Branch (493:5): [True: 72, False: 0]
  ------------------
  494|       |
  495|     72|    if (!use_environment) {
  ------------------
  |  Branch (495:9): [True: 0, False: 72]
  ------------------
  496|      0|        return NULL;
  497|      0|    }
  498|       |
  499|     72|    const char *var = getenv(name);
  500|     72|    if (var && var[0] != '\0') {
  ------------------
  |  Branch (500:9): [True: 0, False: 72]
  |  Branch (500:16): [True: 0, False: 0]
  ------------------
  501|      0|        return var;
  502|      0|    }
  503|     72|    else {
  504|       |        return NULL;
  505|     72|    }
  506|     72|}
_Py_get_env_flag:
  529|     12|{
  530|     12|    const char *var = _Py_GetEnv(use_environment, name);
  531|     12|    if (!var) {
  ------------------
  |  Branch (531:9): [True: 12, False: 0]
  ------------------
  532|     12|        return;
  533|     12|    }
  534|      0|    int value;
  535|      0|    if (_Py_str_to_int(var, &value) < 0 || value < 0) {
  ------------------
  |  Branch (535:9): [True: 0, False: 0]
  |  Branch (535:44): [True: 0, False: 0]
  ------------------
  536|       |        /* PYTHONDEBUG=text and PYTHONDEBUG=-2 behave as PYTHONDEBUG=1 */
  537|      0|        value = 1;
  538|      0|    }
  539|      0|    if (*flag < value) {
  ------------------
  |  Branch (539:9): [True: 0, False: 0]
  ------------------
  540|      0|        *flag = value;
  541|      0|    }
  542|      0|}
_Py_get_xoption:
  547|     44|{
  548|     44|    for (Py_ssize_t i=0; i < xoptions->length; i++) {
  ------------------
  |  Branch (548:26): [True: 0, False: 44]
  ------------------
  549|      0|        const wchar_t *option = xoptions->items[i];
  550|      0|        size_t len;
  551|      0|        const wchar_t *sep = wcschr(option, L'=');
  552|      0|        if (sep != NULL) {
  ------------------
  |  Branch (552:13): [True: 0, False: 0]
  ------------------
  553|      0|            len = (sep - option);
  554|      0|        }
  555|      0|        else {
  556|      0|            len = wcslen(option);
  557|      0|        }
  558|      0|        if (wcsncmp(option, name, len) == 0 && name[len] == L'\0') {
  ------------------
  |  Branch (558:13): [True: 0, False: 0]
  |  Branch (558:48): [True: 0, False: 0]
  ------------------
  559|      0|            return option;
  560|      0|        }
  561|      0|    }
  562|     44|    return NULL;
  563|     44|}
_PyPreConfig_Read:
  747|      2|{
  748|      2|    PyStatus status;
  749|       |
  750|      2|    status = _PyRuntime_Initialize();
  751|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  752|      0|        return status;
  753|      0|    }
  754|       |
  755|      2|    preconfig_get_global_var(config);
  756|      2|    if (config->use_environment < 0) {
  ------------------
  |  Branch (756:9): [True: 0, False: 2]
  ------------------
  757|      0|        config->use_environment = 1;
  758|      0|    }
  759|      2|    if (config->isolated < 0) {
  ------------------
  |  Branch (759:9): [True: 0, False: 2]
  ------------------
  760|      0|        config->isolated = 0;
  761|      0|    }
  762|       |#ifdef MS_WINDOWS
  763|       |    if (config->legacy_windows_fs_encoding < 0) {
  764|       |        config->legacy_windows_fs_encoding = 0;
  765|       |    }
  766|       |#endif
  767|       |
  768|       |    /* Copy LC_CTYPE locale, since it's modified later */
  769|      2|    const char *loc = setlocale(LC_CTYPE, NULL);
  770|      2|    if (loc == NULL) {
  ------------------
  |  Branch (770:9): [True: 0, False: 2]
  ------------------
  771|      0|        return _PyStatus_ERR("failed to LC_CTYPE locale");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  772|      0|    }
  773|      2|    char *init_ctype_locale = _PyMem_RawStrdup(loc);
  774|      2|    if (init_ctype_locale == NULL) {
  ------------------
  |  Branch (774:9): [True: 0, False: 2]
  ------------------
  775|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  776|      0|    }
  777|       |
  778|       |    /* Save the config to be able to restore it if encodings change */
  779|      2|    PyPreConfig save_config;
  780|       |
  781|      2|    status = _PyPreConfig_InitFromPreConfig(&save_config, config);
  782|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  783|      0|        return status;
  784|      0|    }
  785|       |
  786|       |    /* Set LC_CTYPE to the user preferred locale */
  787|      2|    if (config->configure_locale) {
  ------------------
  |  Branch (787:9): [True: 2, False: 0]
  ------------------
  788|      2|        _Py_SetLocaleFromEnv(LC_CTYPE);
  789|      2|    }
  790|       |
  791|      2|    PyPreConfig save_runtime_config;
  792|      2|    preconfig_copy(&save_runtime_config, &_PyRuntime.preconfig);
  793|       |
  794|      2|    _PyPreCmdline cmdline = _PyPreCmdline_INIT;
  ------------------
  |  |  111|      2|    (_PyPreCmdline){ \
  |  |  112|      2|        .use_environment = -1, \
  |  |  113|      2|        .isolated = -1, \
  |  |  114|      2|        .dev_mode = -1}
  ------------------
  795|      2|    int locale_coerced = 0;
  796|      2|    int loops = 0;
  797|       |
  798|      4|    while (1) {
  ------------------
  |  Branch (798:12): [True: 4, Folded]
  ------------------
  799|      4|        int utf8_mode = config->utf8_mode;
  800|       |
  801|       |        /* Watchdog to prevent an infinite loop */
  802|      4|        loops++;
  803|      4|        if (loops == 3) {
  ------------------
  |  Branch (803:13): [True: 0, False: 4]
  ------------------
  804|      0|            status = _PyStatus_ERR("Encoding changed twice while "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  805|      0|                                   "reading the configuration");
  806|      0|            goto done;
  807|      0|        }
  808|       |
  809|       |        /* bpo-34207: Py_DecodeLocale() and Py_EncodeLocale() depend
  810|       |           on the utf8_mode and legacy_windows_fs_encoding members
  811|       |           of _PyRuntime.preconfig. */
  812|      4|        preconfig_copy(&_PyRuntime.preconfig, config);
  813|       |
  814|      4|        if (args) {
  ------------------
  |  Branch (814:13): [True: 4, False: 0]
  ------------------
  815|       |            // Set command line arguments at each iteration. If they are bytes
  816|       |            // strings, they are decoded from the new encoding.
  817|      4|            status = _PyPreCmdline_SetArgv(&cmdline, args);
  818|      4|            if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  819|      0|                goto done;
  820|      0|            }
  821|      4|        }
  822|       |
  823|      4|        status = preconfig_read(config, &cmdline);
  824|      4|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  825|      0|            goto done;
  826|      0|        }
  827|       |
  828|       |        /* The legacy C locale assumes ASCII as the default text encoding, which
  829|       |         * causes problems not only for the CPython runtime, but also other
  830|       |         * components like GNU readline.
  831|       |         *
  832|       |         * Accordingly, when the CLI detects it, it attempts to coerce it to a
  833|       |         * more capable UTF-8 based alternative.
  834|       |         *
  835|       |         * See the documentation of the PYTHONCOERCECLOCALE setting for more
  836|       |         * details.
  837|       |         */
  838|      4|        int encoding_changed = 0;
  839|      4|        if (config->coerce_c_locale && !locale_coerced) {
  ------------------
  |  Branch (839:13): [True: 2, False: 2]
  |  Branch (839:40): [True: 1, False: 1]
  ------------------
  840|      1|            locale_coerced = 1;
  841|      1|            _Py_CoerceLegacyLocale(0);
  842|      1|            encoding_changed = 1;
  843|      1|        }
  844|       |
  845|      4|        if (utf8_mode == -1) {
  ------------------
  |  Branch (845:13): [True: 2, False: 2]
  ------------------
  846|      2|            if (config->utf8_mode == 1) {
  ------------------
  |  Branch (846:17): [True: 2, False: 0]
  ------------------
  847|       |                /* UTF-8 Mode enabled */
  848|      2|                encoding_changed = 1;
  849|      2|            }
  850|      2|        }
  851|      2|        else {
  852|      2|            if (config->utf8_mode != utf8_mode) {
  ------------------
  |  Branch (852:17): [True: 0, False: 2]
  ------------------
  853|      0|                encoding_changed = 1;
  854|      0|            }
  855|      2|        }
  856|       |
  857|      4|        if (!encoding_changed) {
  ------------------
  |  Branch (857:13): [True: 2, False: 2]
  ------------------
  858|      2|            break;
  859|      2|        }
  860|       |
  861|       |        /* Reset the configuration before reading again the configuration,
  862|       |           just keep UTF-8 Mode and coerce C locale value. */
  863|      2|        int new_utf8_mode = config->utf8_mode;
  864|      2|        int new_coerce_c_locale = config->coerce_c_locale;
  865|      2|        preconfig_copy(config, &save_config);
  866|      2|        config->utf8_mode = new_utf8_mode;
  867|      2|        config->coerce_c_locale = new_coerce_c_locale;
  868|       |
  869|       |        /* The encoding changed: read again the configuration
  870|       |           with the new encoding */
  871|      2|    }
  872|      2|    status = _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  873|       |
  874|      2|done:
  875|       |    // Revert side effects
  876|       |    setlocale(LC_CTYPE, init_ctype_locale);
  877|      2|    PyMem_RawFree(init_ctype_locale);
  878|      2|    preconfig_copy(&_PyRuntime.preconfig, &save_runtime_config);
  879|      2|    _PyPreCmdline_Clear(&cmdline);
  880|      2|    return status;
  881|      2|}
_PyPreConfig_Write:
  898|      2|{
  899|      2|    PyPreConfig config;
  900|       |
  901|      2|    PyStatus status = _PyPreConfig_InitFromPreConfig(&config, src_config);
  902|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  903|      0|        return status;
  904|      0|    }
  905|       |
  906|      2|    if (_Py_IsCoreInitialized()) {
  ------------------
  |  Branch (906:9): [True: 0, False: 2]
  ------------------
  907|       |        /* bpo-34008: Calling this functions after Py_Initialize() ignores
  908|       |           the new configuration. */
  909|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  910|      0|    }
  911|       |
  912|      2|    PyMemAllocatorName name = (PyMemAllocatorName)config.allocator;
  913|      2|    if (name != PYMEM_ALLOCATOR_NOT_SET) {
  ------------------
  |  Branch (913:9): [True: 0, False: 2]
  ------------------
  914|      0|        if (_PyMem_SetupAllocators(name) < 0) {
  ------------------
  |  Branch (914:13): [True: 0, False: 0]
  ------------------
  915|      0|            return _PyStatus_ERR("Unknown PYTHONMALLOC allocator");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  916|      0|        }
  917|      0|    }
  918|       |
  919|      2|    preconfig_set_global_var(&config);
  920|       |
  921|      2|    if (config.configure_locale) {
  ------------------
  |  Branch (921:9): [True: 2, False: 0]
  ------------------
  922|      2|        if (config.coerce_c_locale) {
  ------------------
  |  Branch (922:13): [True: 1, False: 1]
  ------------------
  923|      1|            if (!_Py_CoerceLegacyLocale(config.coerce_c_locale_warn)) {
  ------------------
  |  Branch (923:17): [True: 0, False: 1]
  ------------------
  924|       |                /* C locale not coerced */
  925|      0|                config.coerce_c_locale = 0;
  926|      0|            }
  927|      1|        }
  928|       |
  929|       |        /* Set LC_CTYPE to the user preferred locale */
  930|      2|        _Py_SetLocaleFromEnv(LC_CTYPE);
  931|      2|    }
  932|       |
  933|       |    /* Write the new pre-configuration into _PyRuntime */
  934|      2|    preconfig_copy(&_PyRuntime.preconfig, &config);
  935|       |
  936|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  937|      2|}
preconfig.c:precmdline_get_preconfig:
  135|      6|{
  136|      6|#define COPY_ATTR(ATTR) \
  137|      6|    if (config->ATTR != -1) { \
  138|      6|        cmdline->ATTR = config->ATTR; \
  139|      6|    }
  140|       |
  141|      6|    COPY_ATTR(isolated);
  ------------------
  |  |  137|      6|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (137:9): [True: 6, False: 0]
  |  |  ------------------
  |  |  138|      6|        cmdline->ATTR = config->ATTR; \
  |  |  139|      6|    }
  ------------------
  142|      6|    COPY_ATTR(use_environment);
  ------------------
  |  |  137|      6|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (137:9): [True: 6, False: 0]
  |  |  ------------------
  |  |  138|      6|        cmdline->ATTR = config->ATTR; \
  |  |  139|      6|    }
  ------------------
  143|      6|    COPY_ATTR(dev_mode);
  ------------------
  |  |  137|      6|    if (config->ATTR != -1) { \
  |  |  ------------------
  |  |  |  Branch (137:9): [True: 2, False: 4]
  |  |  ------------------
  |  |  138|      2|        cmdline->ATTR = config->ATTR; \
  |  |  139|      2|    }
  ------------------
  144|       |
  145|      6|#undef COPY_ATTR
  146|      6|}
preconfig.c:precmdline_parse_cmdline:
  187|      6|{
  188|      6|    const PyWideStringList *argv = &cmdline->argv;
  189|       |
  190|      6|    _PyOS_ResetGetOpt();
  191|       |    /* Don't log parsing errors into stderr here: PyConfig_Read()
  192|       |       is responsible for that */
  193|      6|    _PyOS_opterr = 0;
  194|      6|    do {
  195|      6|        int longindex = -1;
  196|      6|        int c = _PyOS_GetOpt(argv->length, argv->items, &longindex);
  197|       |
  198|      6|        if (c == EOF || c == 'c' || c == 'm') {
  ------------------
  |  Branch (198:13): [True: 6, False: 0]
  |  Branch (198:25): [True: 0, False: 0]
  |  Branch (198:37): [True: 0, False: 0]
  ------------------
  199|      6|            break;
  200|      6|        }
  201|       |
  202|      0|        switch (c) {
  203|      0|        case 'E':
  ------------------
  |  Branch (203:9): [True: 0, False: 0]
  ------------------
  204|      0|            cmdline->use_environment = 0;
  205|      0|            break;
  206|       |
  207|      0|        case 'I':
  ------------------
  |  Branch (207:9): [True: 0, False: 0]
  ------------------
  208|      0|            cmdline->isolated = 1;
  209|      0|            break;
  210|       |
  211|      0|        case 'X':
  ------------------
  |  Branch (211:9): [True: 0, False: 0]
  ------------------
  212|      0|        {
  213|      0|            PyStatus status = PyWideStringList_Append(&cmdline->xoptions,
  214|      0|                                                      _PyOS_optarg);
  215|      0|            if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  216|      0|                return status;
  217|      0|            }
  218|      0|            break;
  219|      0|        }
  220|       |
  221|      0|        default:
  ------------------
  |  Branch (221:9): [True: 0, False: 0]
  ------------------
  222|       |            /* ignore other argument:
  223|       |               handled by PyConfig_Read() */
  224|      0|            break;
  225|      0|        }
  226|      0|    } while (1);
  ------------------
  |  Branch (226:14): [True: 0, Folded]
  ------------------
  227|       |
  228|      6|    return _PyStatus_OK();
  ------------------
  |  |   24|      6|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  229|      6|}
preconfig.c:preconfig_copy:
  383|     20|{
  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  385|       |
  386|     20|    COPY_ATTR(_config_init);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  387|     20|    COPY_ATTR(parse_argv);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  388|     20|    COPY_ATTR(isolated);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  389|     20|    COPY_ATTR(use_environment);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  390|     20|    COPY_ATTR(configure_locale);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  391|     20|    COPY_ATTR(dev_mode);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  392|     20|    COPY_ATTR(coerce_c_locale);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  393|     20|    COPY_ATTR(coerce_c_locale_warn);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  394|     20|    COPY_ATTR(utf8_mode);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  395|     20|    COPY_ATTR(allocator);
  ------------------
  |  |  384|     20|#define COPY_ATTR(ATTR) config->ATTR = config2->ATTR
  ------------------
  396|       |#ifdef MS_WINDOWS
  397|       |    COPY_ATTR(legacy_windows_fs_encoding);
  398|       |#endif
  399|       |
  400|     20|#undef COPY_ATTR
  401|     20|}
preconfig.c:preconfig_get_global_var:
  469|      2|{
  470|      2|    if (config->_config_init != _PyConfig_INIT_COMPAT) {
  ------------------
  |  Branch (470:9): [True: 2, False: 0]
  ------------------
  471|       |        /* Python and Isolated configuration ignore global variables */
  472|      2|        return;
  473|      2|    }
  474|       |
  475|      0|    if (Py_UTF8Mode > 0) {
  ------------------
  |  Branch (475:9): [True: 0, False: 0]
  ------------------
  476|      0|        config->utf8_mode = Py_UTF8Mode;
  477|      0|    }
  478|      0|}
preconfig.c:preconfig_read:
  695|      4|{
  696|      4|    PyStatus status;
  697|       |
  698|      4|    status = _PyPreCmdline_Read(cmdline, config);
  699|      4|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  700|      0|        return status;
  701|      0|    }
  702|       |
  703|      4|    precmdline_set_preconfig(cmdline, config);
  704|       |
  705|       |    /* legacy_windows_fs_encoding, coerce_c_locale, utf8_mode */
  706|       |#ifdef MS_WINDOWS
  707|       |    _Py_get_env_flag(config->use_environment,
  708|       |                     &config->legacy_windows_fs_encoding,
  709|       |                     "PYTHONLEGACYWINDOWSFSENCODING");
  710|       |#endif
  711|       |
  712|      4|    preconfig_init_coerce_c_locale(config);
  713|       |
  714|      4|    status = preconfig_init_utf8_mode(config, cmdline);
  715|      4|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  716|      0|        return status;
  717|      0|    }
  718|       |
  719|       |    /* allocator */
  720|      4|    status = preconfig_init_allocator(config);
  721|      4|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      4|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  722|      0|        return status;
  723|      0|    }
  724|       |
  725|      4|    assert(config->coerce_c_locale >= 0);
  ------------------
  |  Branch (725:5): [True: 4, False: 0]
  ------------------
  726|      4|    assert(config->coerce_c_locale_warn >= 0);
  ------------------
  |  Branch (726:5): [True: 4, False: 0]
  ------------------
  727|       |#ifdef MS_WINDOWS
  728|       |    assert(config->legacy_windows_fs_encoding >= 0);
  729|       |#endif
  730|      4|    assert(config->utf8_mode >= 0);
  ------------------
  |  Branch (730:5): [True: 4, False: 0]
  ------------------
  731|      4|    assert(config->isolated >= 0);
  ------------------
  |  Branch (731:5): [True: 4, False: 0]
  ------------------
  732|      4|    assert(config->use_environment >= 0);
  ------------------
  |  Branch (732:5): [True: 4, False: 0]
  ------------------
  733|      4|    assert(config->dev_mode >= 0);
  ------------------
  |  Branch (733:5): [True: 4, False: 0]
  ------------------
  734|       |
  735|      4|    return _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  736|      4|}
preconfig.c:precmdline_set_preconfig:
  151|      4|{
  152|      4|#define COPY_ATTR(ATTR) \
  153|      4|    config->ATTR = cmdline->ATTR
  154|       |
  155|      4|    COPY_ATTR(isolated);
  ------------------
  |  |  153|      4|    config->ATTR = cmdline->ATTR
  ------------------
  156|      4|    COPY_ATTR(use_environment);
  ------------------
  |  |  153|      4|    config->ATTR = cmdline->ATTR
  ------------------
  157|      4|    COPY_ATTR(dev_mode);
  ------------------
  |  |  153|      4|    config->ATTR = cmdline->ATTR
  ------------------
  158|       |
  159|      4|#undef COPY_ATTR
  160|      4|}
preconfig.c:preconfig_init_coerce_c_locale:
  623|      4|{
  624|      4|    if (!config->configure_locale) {
  ------------------
  |  Branch (624:9): [True: 0, False: 4]
  ------------------
  625|      0|        config->coerce_c_locale = 0;
  626|      0|        config->coerce_c_locale_warn = 0;
  627|      0|        return;
  628|      0|    }
  629|       |
  630|      4|    const char *env = _Py_GetEnv(config->use_environment, "PYTHONCOERCECLOCALE");
  631|      4|    if (env) {
  ------------------
  |  Branch (631:9): [True: 0, False: 4]
  ------------------
  632|      0|        if (strcmp(env, "0") == 0) {
  ------------------
  |  Branch (632:13): [True: 0, False: 0]
  ------------------
  633|      0|            if (config->coerce_c_locale < 0) {
  ------------------
  |  Branch (633:17): [True: 0, False: 0]
  ------------------
  634|      0|                config->coerce_c_locale = 0;
  635|      0|            }
  636|      0|        }
  637|      0|        else if (strcmp(env, "warn") == 0) {
  ------------------
  |  Branch (637:18): [True: 0, False: 0]
  ------------------
  638|      0|            if (config->coerce_c_locale_warn < 0) {
  ------------------
  |  Branch (638:17): [True: 0, False: 0]
  ------------------
  639|      0|                config->coerce_c_locale_warn = 1;
  640|      0|            }
  641|      0|        }
  642|      0|        else {
  643|      0|            if (config->coerce_c_locale < 0) {
  ------------------
  |  Branch (643:17): [True: 0, False: 0]
  ------------------
  644|      0|                config->coerce_c_locale = 1;
  645|      0|            }
  646|      0|        }
  647|      0|    }
  648|       |
  649|       |    /* Test if coerce_c_locale equals to -1 or equals to 1:
  650|       |       PYTHONCOERCECLOCALE=1 doesn't imply that the C locale is always coerced.
  651|       |       It is only coerced if the LC_CTYPE locale is "C". */
  652|      4|    if (config->coerce_c_locale < 0 || config->coerce_c_locale == 1) {
  ------------------
  |  Branch (652:9): [True: 2, False: 2]
  |  Branch (652:40): [True: 0, False: 2]
  ------------------
  653|       |        /* The C locale enables the C locale coercion (PEP 538) */
  654|      2|        if (_Py_LegacyLocaleDetected(0)) {
  ------------------
  |  Branch (654:13): [True: 1, False: 1]
  ------------------
  655|      1|            config->coerce_c_locale = 2;
  656|      1|        }
  657|      1|        else {
  658|      1|            config->coerce_c_locale = 0;
  659|      1|        }
  660|      2|    }
  661|       |
  662|      4|    if (config->coerce_c_locale_warn < 0) {
  ------------------
  |  Branch (662:9): [True: 4, False: 0]
  ------------------
  663|      4|        config->coerce_c_locale_warn = 0;
  664|      4|    }
  665|      4|}
preconfig.c:preconfig_init_utf8_mode:
  568|      4|{
  569|       |#ifdef MS_WINDOWS
  570|       |    if (config->legacy_windows_fs_encoding) {
  571|       |        config->utf8_mode = 0;
  572|       |    }
  573|       |#endif
  574|       |
  575|      4|    if (config->utf8_mode >= 0) {
  ------------------
  |  Branch (575:9): [True: 2, False: 2]
  ------------------
  576|      2|        return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  577|      2|    }
  578|       |
  579|      2|    const wchar_t *xopt;
  580|      2|    xopt = _Py_get_xoption(&cmdline->xoptions, L"utf8");
  581|      2|    if (xopt) {
  ------------------
  |  Branch (581:9): [True: 0, False: 2]
  ------------------
  582|      0|        const wchar_t *sep = wcschr(xopt, L'=');
  583|      0|        if (sep) {
  ------------------
  |  Branch (583:13): [True: 0, False: 0]
  ------------------
  584|      0|            xopt = sep + 1;
  585|      0|            if (wcscmp(xopt, L"1") == 0) {
  ------------------
  |  Branch (585:17): [True: 0, False: 0]
  ------------------
  586|      0|                config->utf8_mode = 1;
  587|      0|            }
  588|      0|            else if (wcscmp(xopt, L"0") == 0) {
  ------------------
  |  Branch (588:22): [True: 0, False: 0]
  ------------------
  589|      0|                config->utf8_mode = 0;
  590|      0|            }
  591|      0|            else {
  592|      0|                return _PyStatus_ERR("invalid -X utf8 option value");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  593|      0|            }
  594|      0|        }
  595|      0|        else {
  596|      0|            config->utf8_mode = 1;
  597|      0|        }
  598|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  599|      0|    }
  600|       |
  601|      2|    const char *opt = _Py_GetEnv(config->use_environment, "PYTHONUTF8");
  602|      2|    if (opt) {
  ------------------
  |  Branch (602:9): [True: 0, False: 2]
  ------------------
  603|      0|        if (strcmp(opt, "1") == 0) {
  ------------------
  |  Branch (603:13): [True: 0, False: 0]
  ------------------
  604|      0|            config->utf8_mode = 1;
  605|      0|        }
  606|      0|        else if (strcmp(opt, "0") == 0) {
  ------------------
  |  Branch (606:18): [True: 0, False: 0]
  ------------------
  607|      0|            config->utf8_mode = 0;
  608|      0|        }
  609|      0|        else {
  610|      0|            return _PyStatus_ERR("invalid PYTHONUTF8 environment "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  611|      0|                                "variable value");
  612|      0|        }
  613|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  614|      0|    }
  615|       |
  616|      2|    config->utf8_mode = 1;
  617|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  618|      2|}
preconfig.c:preconfig_init_allocator:
  670|      4|{
  671|      4|    if (config->allocator == PYMEM_ALLOCATOR_NOT_SET) {
  ------------------
  |  Branch (671:9): [True: 4, False: 0]
  ------------------
  672|       |        /* bpo-34247. The PYTHONMALLOC environment variable has the priority
  673|       |           over PYTHONDEV env var and "-X dev" command line option.
  674|       |           For example, PYTHONMALLOC=malloc PYTHONDEVMODE=1 sets the memory
  675|       |           allocators to "malloc" (and not to "debug"). */
  676|      4|        const char *envvar = _Py_GetEnv(config->use_environment, "PYTHONMALLOC");
  677|      4|        if (envvar) {
  ------------------
  |  Branch (677:13): [True: 0, False: 4]
  ------------------
  678|      0|            PyMemAllocatorName name;
  679|      0|            if (_PyMem_GetAllocatorName(envvar, &name) < 0) {
  ------------------
  |  Branch (679:17): [True: 0, False: 0]
  ------------------
  680|      0|                return _PyStatus_ERR("PYTHONMALLOC: unknown allocator");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  681|      0|            }
  682|      0|            config->allocator = (int)name;
  683|      0|        }
  684|      4|    }
  685|       |
  686|      4|    if (config->dev_mode && config->allocator == PYMEM_ALLOCATOR_NOT_SET) {
  ------------------
  |  Branch (686:9): [True: 0, False: 4]
  |  Branch (686:29): [True: 0, False: 0]
  ------------------
  687|      0|        config->allocator = PYMEM_ALLOCATOR_DEBUG;
  688|      0|    }
  689|      4|    return _PyStatus_OK();
  ------------------
  |  |   24|      4|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  690|      4|}
preconfig.c:preconfig_set_global_var:
  483|      2|{
  484|      2|    if (config->utf8_mode >= 0) {
  ------------------
  |  Branch (484:9): [True: 2, False: 0]
  ------------------
  485|      2|        Py_UTF8Mode = config->utf8_mode;
  486|      2|    }
  487|      2|}

_PyArena_New:
  126|  24.5k|{
  127|  24.5k|    PyArena* arena = (PyArena *)PyMem_Malloc(sizeof(PyArena));
  128|  24.5k|    if (!arena)
  ------------------
  |  Branch (128:9): [True: 0, False: 24.5k]
  ------------------
  129|      0|        return (PyArena*)PyErr_NoMemory();
  130|       |
  131|  24.5k|    arena->a_head = block_new(DEFAULT_BLOCK_SIZE);
  ------------------
  |  |   11|  24.5k|#define DEFAULT_BLOCK_SIZE 8192
  ------------------
  132|  24.5k|    arena->a_cur = arena->a_head;
  133|  24.5k|    if (!arena->a_head) {
  ------------------
  |  Branch (133:9): [True: 0, False: 24.5k]
  ------------------
  134|      0|        PyMem_Free((void *)arena);
  135|      0|        return (PyArena*)PyErr_NoMemory();
  136|      0|    }
  137|  24.5k|    arena->a_objects = PyList_New(0);
  138|  24.5k|    if (!arena->a_objects) {
  ------------------
  |  Branch (138:9): [True: 0, False: 24.5k]
  ------------------
  139|      0|        block_free(arena->a_head);
  140|      0|        PyMem_Free((void *)arena);
  141|      0|        return (PyArena*)PyErr_NoMemory();
  142|      0|    }
  143|       |#if defined(Py_DEBUG)
  144|       |    arena->total_allocs = 0;
  145|       |    arena->total_size = 0;
  146|       |    arena->total_blocks = 1;
  147|       |    arena->total_block_size = DEFAULT_BLOCK_SIZE;
  148|       |    arena->total_big_blocks = 0;
  149|       |#endif
  150|  24.5k|    return arena;
  151|  24.5k|}
_PyArena_Free:
  155|  24.5k|{
  156|  24.5k|    assert(arena);
  ------------------
  |  Branch (156:5): [True: 24.5k, False: 0]
  ------------------
  157|       |#if defined(Py_DEBUG)
  158|       |    /*
  159|       |    fprintf(stderr,
  160|       |        "alloc=%zu size=%zu blocks=%zu block_size=%zu big=%zu objects=%zu\n",
  161|       |        arena->total_allocs, arena->total_size, arena->total_blocks,
  162|       |        arena->total_block_size, arena->total_big_blocks,
  163|       |        PyList_Size(arena->a_objects));
  164|       |    */
  165|       |#endif
  166|  24.5k|    block_free(arena->a_head);
  167|       |    /* This property normally holds, except when the code being compiled
  168|       |       is sys.getobjects(0), in which case there will be two references.
  169|       |    assert(arena->a_objects->ob_refcnt == 1);
  170|       |    */
  171|       |
  172|  24.5k|    Py_DECREF(arena->a_objects);
  ------------------
  |  |  430|  24.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  24.5k|    PyMem_Free(arena);
  174|  24.5k|}
_PyArena_Malloc:
  178|  33.4M|{
  179|  33.4M|    void *p = block_alloc(arena->a_cur, size);
  180|  33.4M|    if (!p)
  ------------------
  |  Branch (180:9): [True: 0, False: 33.4M]
  ------------------
  181|      0|        return PyErr_NoMemory();
  182|       |#if defined(Py_DEBUG)
  183|       |    arena->total_allocs++;
  184|       |    arena->total_size += size;
  185|       |#endif
  186|       |    /* Reset cur if we allocated a new block. */
  187|  33.4M|    if (arena->a_cur->ab_next) {
  ------------------
  |  Branch (187:9): [True: 137k, False: 33.3M]
  ------------------
  188|   137k|        arena->a_cur = arena->a_cur->ab_next;
  189|       |#if defined(Py_DEBUG)
  190|       |        arena->total_blocks++;
  191|       |        arena->total_block_size += arena->a_cur->ab_size;
  192|       |        if (arena->a_cur->ab_size > DEFAULT_BLOCK_SIZE)
  193|       |            ++arena->total_big_blocks;
  194|       |#endif
  195|   137k|    }
  196|  33.4M|    return p;
  197|  33.4M|}
_PyArena_AddPyObject:
  201|  3.60M|{
  202|  3.60M|    int r = PyList_Append(arena->a_objects, obj);
  203|  3.60M|    if (r >= 0) {
  ------------------
  |  Branch (203:9): [True: 3.60M, False: 0]
  ------------------
  204|  3.60M|        Py_DECREF(obj);
  ------------------
  |  |  430|  3.60M|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  3.60M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.60M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|  3.60M|    }
  206|  3.60M|    return r;
  207|  3.60M|}
pyarena.c:block_new:
   75|   162k|{
   76|       |    /* Allocate header and block as one unit.
   77|       |       ab_mem points just past header. */
   78|   162k|    block *b = (block *)PyMem_Malloc(sizeof(block) + size);
   79|   162k|    if (!b)
  ------------------
  |  Branch (79:9): [True: 0, False: 162k]
  ------------------
   80|      0|        return NULL;
   81|   162k|    b->ab_size = size;
   82|   162k|    b->ab_mem = (void *)(b + 1);
   83|   162k|    b->ab_next = NULL;
   84|   162k|    b->ab_offset = (char *)_Py_ALIGN_UP(b->ab_mem, ALIGNMENT) -
  ------------------
  |  |  243|   162k|#define _Py_ALIGN_UP(p, a) ((void *)(((uintptr_t)(p) + \
  |  |  244|   162k|        (uintptr_t)((a) - 1)) & ~(uintptr_t)((a) - 1)))
  ------------------
   85|   162k|            (char *)(b->ab_mem);
   86|   162k|    return b;
   87|   162k|}
pyarena.c:block_free:
   90|  24.5k|block_free(block *b) {
   91|   187k|    while (b) {
  ------------------
  |  Branch (91:12): [True: 162k, False: 24.5k]
  ------------------
   92|   162k|        block *next = b->ab_next;
   93|   162k|        PyMem_Free(b);
   94|   162k|        b = next;
   95|   162k|    }
   96|  24.5k|}
pyarena.c:block_alloc:
  100|  33.4M|{
  101|  33.4M|    void *p;
  102|  33.4M|    assert(b);
  ------------------
  |  Branch (102:5): [True: 33.4M, False: 0]
  ------------------
  103|  33.4M|    size = _Py_SIZE_ROUND_UP(size, ALIGNMENT);
  ------------------
  |  |  238|  33.4M|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|  33.4M|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
  104|  33.4M|    if (b->ab_offset + size > b->ab_size) {
  ------------------
  |  Branch (104:9): [True: 137k, False: 33.3M]
  ------------------
  105|       |        /* If we need to allocate more memory than will fit in
  106|       |           the default block, allocate a one-off block that is
  107|       |           exactly the right size. */
  108|   137k|        block *newbl = block_new(
  109|   137k|                        size < DEFAULT_BLOCK_SIZE ?
  ------------------
  |  |   11|   137k|#define DEFAULT_BLOCK_SIZE 8192
  ------------------
  |  Branch (109:25): [True: 137k, False: 94]
  ------------------
  110|   137k|                        DEFAULT_BLOCK_SIZE : size);
  ------------------
  |  |   11|   137k|#define DEFAULT_BLOCK_SIZE 8192
  ------------------
  111|   137k|        if (!newbl)
  ------------------
  |  Branch (111:13): [True: 0, False: 137k]
  ------------------
  112|      0|            return NULL;
  113|   137k|        assert(!b->ab_next);
  ------------------
  |  Branch (113:9): [True: 137k, False: 0]
  ------------------
  114|   137k|        b->ab_next = newbl;
  115|   137k|        b = newbl;
  116|   137k|    }
  117|       |
  118|  33.4M|    assert(b->ab_offset + size <= b->ab_size);
  ------------------
  |  Branch (118:5): [True: 33.4M, False: 0]
  ------------------
  119|  33.4M|    p = (void *)(((char *)b->ab_mem) + b->ab_offset);
  120|  33.4M|    b->ab_offset += size;
  121|  33.4M|    return p;
  122|  33.4M|}

_Py_HashDouble:
   88|   103M|{
   89|   103M|    int e, sign;
   90|   103M|    double m;
   91|   103M|    Py_uhash_t x, y;
   92|       |
   93|   103M|    if (!isfinite(v)) {
  ------------------
  |  Branch (93:9): [True: 140k, False: 102M]
  ------------------
   94|   140k|        if (isinf(v))
  ------------------
  |  Branch (94:13): [True: 65.4k, False: 75.0k]
  ------------------
   95|  65.4k|            return v > 0 ? PyHASH_INF : -PyHASH_INF;
  ------------------
  |  |   19|  43.1k|#define PyHASH_INF 314159
  ------------------
                          return v > 0 ? PyHASH_INF : -PyHASH_INF;
  ------------------
  |  |   19|  87.7k|#define PyHASH_INF 314159
  ------------------
  |  Branch (95:20): [True: 43.1k, False: 22.2k]
  ------------------
   96|  75.0k|        else
   97|  75.0k|            return PyObject_GenericHash(inst);
   98|   140k|    }
   99|       |
  100|   102M|    m = frexp(v, &e);
  101|       |
  102|   102M|    sign = 1;
  103|   102M|    if (m < 0) {
  ------------------
  |  Branch (103:9): [True: 9.19M, False: 93.6M]
  ------------------
  104|  9.19M|        sign = -1;
  105|  9.19M|        m = -m;
  106|  9.19M|    }
  107|       |
  108|       |    /* process 28 bits at a time;  this should work well both for binary
  109|       |       and hexadecimal floating point. */
  110|   102M|    x = 0;
  111|   307M|    while (m) {
  ------------------
  |  Branch (111:12): [True: 204M, False: 102M]
  ------------------
  112|   204M|        x = ((x << 28) & PyHASH_MODULUS) | x >> (PyHASH_BITS - 28);
  ------------------
  |  |   18|   204M|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|   204M|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
                      x = ((x << 28) & PyHASH_MODULUS) | x >> (PyHASH_BITS - 28);
  ------------------
  |  |   13|   204M|#  define PyHASH_BITS 61
  ------------------
  113|   204M|        m *= 268435456.0;  /* 2**28 */
  114|   204M|        e -= 28;
  115|   204M|        y = (Py_uhash_t)m;  /* pull out integer part */
  116|   204M|        m -= y;
  117|   204M|        x += y;
  118|   204M|        if (x >= PyHASH_MODULUS)
  ------------------
  |  |   18|   204M|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|   204M|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
  |  Branch (118:13): [True: 0, False: 204M]
  ------------------
  119|      0|            x -= PyHASH_MODULUS;
  ------------------
  |  |   18|      0|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|      0|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
  120|   204M|    }
  121|       |
  122|       |    /* adjust for the exponent;  first reduce it modulo PyHASH_BITS */
  123|   102M|    e = e >= 0 ? e % PyHASH_BITS : PyHASH_BITS-1-((-1-e) % PyHASH_BITS);
  ------------------
  |  |   13|  3.31M|#  define PyHASH_BITS 61
  ------------------
                  e = e >= 0 ? e % PyHASH_BITS : PyHASH_BITS-1-((-1-e) % PyHASH_BITS);
  ------------------
  |  |   13|  99.5M|#  define PyHASH_BITS 61
  ------------------
                  e = e >= 0 ? e % PyHASH_BITS : PyHASH_BITS-1-((-1-e) % PyHASH_BITS);
  ------------------
  |  |   13|  99.5M|#  define PyHASH_BITS 61
  ------------------
  |  Branch (123:9): [True: 3.31M, False: 99.5M]
  ------------------
  124|   102M|    x = ((x << e) & PyHASH_MODULUS) | x >> (PyHASH_BITS - e);
  ------------------
  |  |   18|   102M|#define PyHASH_MODULUS (((size_t)1 << PyHASH_BITS) - 1)
  |  |  ------------------
  |  |  |  |   13|   102M|#  define PyHASH_BITS 61
  |  |  ------------------
  ------------------
                  x = ((x << e) & PyHASH_MODULUS) | x >> (PyHASH_BITS - e);
  ------------------
  |  |   13|   102M|#  define PyHASH_BITS 61
  ------------------
  125|       |
  126|   102M|    x = x * sign;
  127|   102M|    if (x == (Py_uhash_t)-1)
  ------------------
  |  Branch (127:9): [True: 15.5k, False: 102M]
  ------------------
  128|  15.5k|        x = (Py_uhash_t)-2;
  129|   102M|    return (Py_hash_t)x;
  130|   103M|}
Py_HashPointer:
  134|  53.0M|{
  135|  53.0M|    Py_hash_t hash = _Py_HashPointerRaw(ptr);
  136|  53.0M|    if (hash == -1) {
  ------------------
  |  Branch (136:9): [True: 0, False: 53.0M]
  ------------------
  137|      0|        hash = -2;
  138|      0|    }
  139|  53.0M|    return hash;
  140|  53.0M|}
PyObject_GenericHash:
  144|  53.0M|{
  145|  53.0M|    return Py_HashPointer(obj);
  146|  53.0M|}
Py_HashBuffer:
  150|  1.23M|{
  151|       |    /*
  152|       |      We make the hash of the empty string be 0, rather than using
  153|       |      (prefix ^ suffix), since this slightly obfuscates the hash secret
  154|       |    */
  155|  1.23M|    if (len == 0) {
  ------------------
  |  Branch (155:9): [True: 191, False: 1.23M]
  ------------------
  156|    191|        return 0;
  157|    191|    }
  158|       |
  159|       |#ifdef Py_HASH_STATS
  160|       |    hashstats[(len <= Py_HASH_STATS_MAX) ? len : 0]++;
  161|       |#endif
  162|       |
  163|  1.23M|    Py_hash_t x;
  164|       |#if Py_HASH_CUTOFF > 0
  165|       |    if (len < Py_HASH_CUTOFF) {
  166|       |        /* Optimize hashing of very small strings with inline DJBX33A. */
  167|       |        Py_uhash_t hash;
  168|       |        const unsigned char *p = ptr;
  169|       |        hash = 5381; /* DJBX33A starts with 5381 */
  170|       |
  171|       |        switch(len) {
  172|       |            /* ((hash << 5) + hash) + *p == hash * 33 + *p */
  173|       |            case 7: hash = ((hash << 5) + hash) + *p++; _Py_FALLTHROUGH;
  174|       |            case 6: hash = ((hash << 5) + hash) + *p++; _Py_FALLTHROUGH;
  175|       |            case 5: hash = ((hash << 5) + hash) + *p++; _Py_FALLTHROUGH;
  176|       |            case 4: hash = ((hash << 5) + hash) + *p++; _Py_FALLTHROUGH;
  177|       |            case 3: hash = ((hash << 5) + hash) + *p++; _Py_FALLTHROUGH;
  178|       |            case 2: hash = ((hash << 5) + hash) + *p++; _Py_FALLTHROUGH;
  179|       |            case 1: hash = ((hash << 5) + hash) + *p++; break;
  180|       |            default:
  181|       |                Py_UNREACHABLE();
  182|       |        }
  183|       |        hash ^= len;
  184|       |        hash ^= (Py_uhash_t) _Py_HashSecret.djbx33a.suffix;
  185|       |        x = (Py_hash_t)hash;
  186|       |    }
  187|       |    else
  188|       |#endif /* Py_HASH_CUTOFF */
  189|  1.23M|    {
  190|  1.23M|        x = PyHash_Func.hash(ptr, len);
  191|  1.23M|    }
  192|       |
  193|  1.23M|    if (x == -1) {
  ------------------
  |  Branch (193:9): [True: 0, False: 1.23M]
  ------------------
  194|      0|        return -2;
  195|      0|    }
  196|  1.23M|    return x;
  197|  1.23M|}
PyHash_GetFuncDef:
  216|      2|{
  217|      2|    return &PyHash_Func;
  218|      2|}
pyhash.c:siphash13:
  371|  1.23M|siphash13(uint64_t k0, uint64_t k1, const void *src, Py_ssize_t src_sz) {
  372|  1.23M|    uint64_t b = (uint64_t)src_sz << 56;
  373|  1.23M|    const uint8_t *in = (const uint8_t*)src;
  374|       |
  375|  1.23M|    uint64_t v0 = k0 ^ 0x736f6d6570736575ULL;
  376|  1.23M|    uint64_t v1 = k1 ^ 0x646f72616e646f6dULL;
  377|  1.23M|    uint64_t v2 = k0 ^ 0x6c7967656e657261ULL;
  378|  1.23M|    uint64_t v3 = k1 ^ 0x7465646279746573ULL;
  379|       |
  380|  1.23M|    uint64_t t;
  381|  1.23M|    uint8_t *pt;
  382|       |
  383|  8.70M|    while (src_sz >= 8) {
  ------------------
  |  Branch (383:12): [True: 7.47M, False: 1.23M]
  ------------------
  384|  7.47M|        uint64_t mi;
  385|  7.47M|        memcpy(&mi, in, sizeof(mi));
  386|  7.47M|        mi = _le64toh(mi);
  ------------------
  |  |  332|  7.47M|#  define _le64toh(x) ((uint64_t)(x))
  ------------------
  387|  7.47M|        in += sizeof(mi);
  388|  7.47M|        src_sz -= sizeof(mi);
  389|  7.47M|        v3 ^= mi;
  390|  7.47M|        SINGLE_ROUND(v0,v1,v2,v3);
  ------------------
  |  |  362|  7.47M|    HALF_ROUND(v0,v1,v2,v3,13,16);  \
  |  |  ------------------
  |  |  |  |  356|  7.47M|    a += b; c += d;                 \
  |  |  |  |  357|  7.47M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  7.47M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  7.47M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  7.47M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  7.47M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  7.47M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  363|  7.47M|    HALF_ROUND(v2,v1,v0,v3,17,21);
  |  |  ------------------
  |  |  |  |  356|  7.47M|    a += b; c += d;                 \
  |  |  |  |  357|  7.47M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  7.47M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  7.47M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  7.47M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  7.47M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  7.47M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  391|  7.47M|        v0 ^= mi;
  392|  7.47M|    }
  393|       |
  394|  1.23M|    t = 0;
  395|  1.23M|    pt = (uint8_t *)&t;
  396|  1.23M|    switch (src_sz) {
  ------------------
  |  Branch (396:13): [True: 1.06M, False: 175k]
  ------------------
  397|  57.3k|        case 7: pt[6] = in[6]; _Py_FALLTHROUGH;
  ------------------
  |  |  650|  57.3k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  |  Branch (397:9): [True: 57.3k, False: 1.17M]
  ------------------
  398|   160k|        case 6: pt[5] = in[5]; _Py_FALLTHROUGH;
  ------------------
  |  |  650|   160k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  |  Branch (398:9): [True: 103k, False: 1.13M]
  ------------------
  399|   241k|        case 5: pt[4] = in[4]; _Py_FALLTHROUGH;
  ------------------
  |  |  650|   241k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  |  Branch (399:9): [True: 81.0k, False: 1.15M]
  ------------------
  400|   435k|        case 4: memcpy(pt, in, sizeof(uint32_t)); break;
  ------------------
  |  Branch (400:9): [True: 194k, False: 1.04M]
  ------------------
  401|   181k|        case 3: pt[2] = in[2]; _Py_FALLTHROUGH;
  ------------------
  |  |  650|   181k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  |  Branch (401:9): [True: 181k, False: 1.05M]
  ------------------
  402|   581k|        case 2: pt[1] = in[1]; _Py_FALLTHROUGH;
  ------------------
  |  |  650|   581k|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  |  Branch (402:9): [True: 399k, False: 836k]
  ------------------
  403|   624k|        case 1: pt[0] = in[0]; break;
  ------------------
  |  Branch (403:9): [True: 43.3k, False: 1.19M]
  ------------------
  404|  1.23M|    }
  405|  1.23M|    b |= _le64toh(t);
  ------------------
  |  |  332|  1.23M|#  define _le64toh(x) ((uint64_t)(x))
  ------------------
  406|       |
  407|  1.23M|    v3 ^= b;
  408|  1.23M|    SINGLE_ROUND(v0,v1,v2,v3);
  ------------------
  |  |  362|  1.23M|    HALF_ROUND(v0,v1,v2,v3,13,16);  \
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  363|  1.23M|    HALF_ROUND(v2,v1,v0,v3,17,21);
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|  1.23M|    v0 ^= b;
  410|  1.23M|    v2 ^= 0xff;
  411|  1.23M|    SINGLE_ROUND(v0,v1,v2,v3);
  ------------------
  |  |  362|  1.23M|    HALF_ROUND(v0,v1,v2,v3,13,16);  \
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  363|  1.23M|    HALF_ROUND(v2,v1,v0,v3,17,21);
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|  1.23M|    SINGLE_ROUND(v0,v1,v2,v3);
  ------------------
  |  |  362|  1.23M|    HALF_ROUND(v0,v1,v2,v3,13,16);  \
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  363|  1.23M|    HALF_ROUND(v2,v1,v0,v3,17,21);
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|  1.23M|    SINGLE_ROUND(v0,v1,v2,v3);
  ------------------
  |  |  362|  1.23M|    HALF_ROUND(v0,v1,v2,v3,13,16);  \
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  363|  1.23M|    HALF_ROUND(v2,v1,v0,v3,17,21);
  |  |  ------------------
  |  |  |  |  356|  1.23M|    a += b; c += d;                 \
  |  |  |  |  357|  1.23M|    b = ROTATE(b, s) ^ a;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  358|  1.23M|    d = ROTATE(d, t) ^ c;           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  |  |  359|  1.23M|    a = ROTATE(a, 32);
  |  |  |  |  ------------------
  |  |  |  |  |  |  352|  1.23M|#  define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|       |
  415|       |    /* modified */
  416|  1.23M|    t = (v0 ^ v1) ^ (v2 ^ v3);
  417|  1.23M|    return t;
  418|  1.23M|}
pyhash.c:pysiphash:
  480|  1.23M|pysiphash(const void *src, Py_ssize_t src_sz) {
  481|  1.23M|    return (Py_hash_t)siphash13(
  482|  1.23M|        _le64toh(_Py_HashSecret.siphash.k0), _le64toh(_Py_HashSecret.siphash.k1),
  ------------------
  |  |  332|  1.23M|#  define _le64toh(x) ((uint64_t)(x))
  ------------------
                      _le64toh(_Py_HashSecret.siphash.k0), _le64toh(_Py_HashSecret.siphash.k1),
  ------------------
  |  |  332|  1.23M|#  define _le64toh(x) ((uint64_t)(x))
  ------------------
  483|  1.23M|        src, src_sz);
  484|  1.23M|}

_PyRuntime_Initialize:
  131|    154|{
  132|       |    /* XXX We only initialize once in the process, which aligns with
  133|       |       the static initialization of the former globals now found in
  134|       |       _PyRuntime.  However, _PyRuntime *should* be initialized with
  135|       |       every Py_Initialize() call, but doing so breaks the runtime.
  136|       |       This is because the runtime state is not properly finalized
  137|       |       currently. */
  138|    154|    if (runtime_initialized) {
  ------------------
  |  Branch (138:9): [True: 152, False: 2]
  ------------------
  139|    152|        return _PyStatus_OK();
  ------------------
  |  |   24|    152|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  140|    152|    }
  141|      2|    runtime_initialized = 1;
  142|       |
  143|      2|    return _PyRuntimeState_Init(&_PyRuntime);
  144|    154|}
_Py_IsCoreInitialized:
  171|      2|{
  172|      2|    return _PyRuntimeState_GetCoreInitialized(&_PyRuntime);
  173|      2|}
Py_IsInitialized:
  177|  2.27k|{
  178|  2.27k|    return _PyRuntimeState_GetInitialized(&_PyRuntime);
  179|  2.27k|}
_Py_LegacyLocaleDetected:
  204|      2|{
  205|      2|#ifndef MS_WINDOWS
  206|      2|    if (!warn) {
  ------------------
  |  Branch (206:9): [True: 2, False: 0]
  ------------------
  207|      2|        const char *locale_override = getenv("LC_ALL");
  208|      2|        if (locale_override != NULL && *locale_override != '\0') {
  ------------------
  |  Branch (208:13): [True: 0, False: 2]
  |  Branch (208:40): [True: 0, False: 0]
  ------------------
  209|       |            /* Don't coerce C locale if the LC_ALL environment variable
  210|       |               is set */
  211|      0|            return 0;
  212|      0|        }
  213|      2|    }
  214|       |
  215|       |    /* On non-Windows systems, the C locale is considered a legacy locale */
  216|       |    /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
  217|       |     *                 the POSIX locale as a simple alias for the C locale, so
  218|       |     *                 we may also want to check for that explicitly.
  219|       |     */
  220|      2|    const char *ctype_loc = setlocale(LC_CTYPE, NULL);
  221|      2|    if (ctype_loc == NULL) {
  ------------------
  |  Branch (221:9): [True: 0, False: 2]
  ------------------
  222|      0|        return 0;
  223|      0|    }
  224|      2|    return (strcmp(ctype_loc, "C") == 0 || strcmp(ctype_loc, "POSIX") == 0);
  ------------------
  |  Branch (224:13): [True: 1, False: 1]
  |  Branch (224:44): [True: 0, False: 1]
  ------------------
  225|       |#else
  226|       |    /* Windows uses code pages instead of locales, so no locale is legacy */
  227|       |    return 0;
  228|       |#endif
  229|      2|}
_Py_CoerceLegacyLocale:
  304|      2|{
  305|      2|    int coerced = 0;
  306|      2|#ifdef PY_COERCE_C_LOCALE
  307|      2|    char *oldloc = NULL;
  308|       |
  309|      2|    oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
  310|      2|    if (oldloc == NULL) {
  ------------------
  |  Branch (310:9): [True: 0, False: 2]
  ------------------
  311|      0|        return coerced;
  312|      0|    }
  313|       |
  314|      2|    const char *locale_override = getenv("LC_ALL");
  315|      2|    if (locale_override == NULL || *locale_override == '\0') {
  ------------------
  |  Branch (315:9): [True: 2, False: 0]
  |  Branch (315:36): [True: 0, False: 0]
  ------------------
  316|       |        /* LC_ALL is also not set (or is set to an empty string) */
  317|      2|        const _LocaleCoercionTarget *target = NULL;
  318|      2|        for (target = _TARGET_LOCALES; target->locale_name; target++) {
  ------------------
  |  Branch (318:40): [True: 2, False: 0]
  ------------------
  319|      2|            const char *new_locale = setlocale(LC_CTYPE,
  320|      2|                                               target->locale_name);
  321|      2|            if (new_locale != NULL) {
  ------------------
  |  Branch (321:17): [True: 2, False: 0]
  ------------------
  322|      2|#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
  323|       |                /* Also ensure that nl_langinfo works in this locale */
  324|      2|                char *codeset = nl_langinfo(CODESET);
  325|      2|                if (!codeset || *codeset == '\0') {
  ------------------
  |  Branch (325:21): [True: 0, False: 2]
  |  Branch (325:33): [True: 0, False: 2]
  ------------------
  326|       |                    /* CODESET is not set or empty, so skip coercion */
  327|      0|                    new_locale = NULL;
  328|      0|                    _Py_SetLocaleFromEnv(LC_CTYPE);
  329|      0|                    continue;
  330|      0|                }
  331|      2|#endif
  332|       |                /* Successfully configured locale, so make it the default */
  333|      2|                coerced = _coerce_default_locale_settings(warn, target);
  334|      2|                goto done;
  335|      2|            }
  336|      2|        }
  337|      2|    }
  338|       |    /* No C locale warning here, as Py_Initialize will emit one later */
  339|       |
  340|      0|    setlocale(LC_CTYPE, oldloc);
  341|       |
  342|      2|done:
  343|      2|    PyMem_RawFree(oldloc);
  344|      2|#endif
  345|      2|    return coerced;
  346|      0|}
_Py_SetLocaleFromEnv:
  354|      8|{
  355|      8|    char *res;
  356|       |#ifdef __ANDROID__
  357|       |    const char *locale;
  358|       |    const char **pvar;
  359|       |#ifdef PY_COERCE_C_LOCALE
  360|       |    const char *coerce_c_locale;
  361|       |#endif
  362|       |    const char *utf8_locale = "C.UTF-8";
  363|       |    const char *env_var_set[] = {
  364|       |        "LC_ALL",
  365|       |        "LC_CTYPE",
  366|       |        "LANG",
  367|       |        NULL,
  368|       |    };
  369|       |
  370|       |    /* Android setlocale(category, "") doesn't check the environment variables
  371|       |     * and incorrectly sets the "C" locale at API 24 and older APIs. We only
  372|       |     * check the environment variables listed in env_var_set. */
  373|       |    for (pvar=env_var_set; *pvar; pvar++) {
  374|       |        locale = getenv(*pvar);
  375|       |        if (locale != NULL && *locale != '\0') {
  376|       |            if (strcmp(locale, utf8_locale) == 0 ||
  377|       |                    strcmp(locale, "en_US.UTF-8") == 0) {
  378|       |                return setlocale(category, utf8_locale);
  379|       |            }
  380|       |            return setlocale(category, "C");
  381|       |        }
  382|       |    }
  383|       |
  384|       |    /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
  385|       |     * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
  386|       |     * Quote from POSIX section "8.2 Internationalization Variables":
  387|       |     * "4. If the LANG environment variable is not set or is set to the empty
  388|       |     * string, the implementation-defined default locale shall be used." */
  389|       |
  390|       |#ifdef PY_COERCE_C_LOCALE
  391|       |    coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
  392|       |    if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
  393|       |        /* Some other ported code may check the environment variables (e.g. in
  394|       |         * extension modules), so we make sure that they match the locale
  395|       |         * configuration */
  396|       |        if (setenv("LC_CTYPE", utf8_locale, 1)) {
  397|       |            fprintf(stderr, "Warning: failed setting the LC_CTYPE "
  398|       |                            "environment variable to %s\n", utf8_locale);
  399|       |        }
  400|       |    }
  401|       |#endif
  402|       |    res = setlocale(category, utf8_locale);
  403|       |#else /* !defined(__ANDROID__) */
  404|      8|    res = setlocale(category, "");
  405|      8|#endif
  406|      8|    _Py_ResetForceASCII();
  407|      8|    return res;
  408|      8|}
_Py_PreInitializeFromPyArgv:
 1064|      2|{
 1065|      2|    PyStatus status;
 1066|       |
 1067|      2|    if (src_config == NULL) {
  ------------------
  |  Branch (1067:9): [True: 0, False: 2]
  ------------------
 1068|      0|        return _PyStatus_ERR("preinitialization config is NULL");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1069|      0|    }
 1070|       |
 1071|      2|    status = _PyRuntime_Initialize();
 1072|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1073|      0|        return status;
 1074|      0|    }
 1075|      2|    _PyRuntimeState *runtime = &_PyRuntime;
 1076|       |
 1077|      2|    if (runtime->preinitialized) {
  ------------------
  |  Branch (1077:9): [True: 0, False: 2]
  ------------------
 1078|       |        /* If it's already configured: ignored the new configuration */
 1079|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1080|      0|    }
 1081|       |
 1082|       |    /* Note: preinitializing remains 1 on error, it is only set to 0
 1083|       |       at exit on success. */
 1084|      2|    runtime->preinitializing = 1;
 1085|       |
 1086|      2|    PyPreConfig config;
 1087|       |
 1088|      2|    status = _PyPreConfig_InitFromPreConfig(&config, src_config);
 1089|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1090|      0|        return status;
 1091|      0|    }
 1092|       |
 1093|      2|    status = _PyPreConfig_Read(&config, args);
 1094|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1095|      0|        return status;
 1096|      0|    }
 1097|       |
 1098|      2|    status = _PyPreConfig_Write(&config);
 1099|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1100|      0|        return status;
 1101|      0|    }
 1102|       |
 1103|      2|    runtime->preinitializing = 0;
 1104|      2|    runtime->preinitialized = 1;
 1105|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1106|      2|}
_Py_PreInitializeFromConfig:
 1135|    148|{
 1136|    148|    assert(config != NULL);
  ------------------
  |  Branch (1136:5): [True: 148, False: 0]
  ------------------
 1137|       |
 1138|    148|    PyStatus status = _PyRuntime_Initialize();
 1139|    148|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|    148|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 148]
  |  |  ------------------
  ------------------
 1140|      0|        return status;
 1141|      0|    }
 1142|    148|    _PyRuntimeState *runtime = &_PyRuntime;
 1143|       |
 1144|    148|    if (runtime->preinitialized) {
  ------------------
  |  Branch (1144:9): [True: 146, False: 2]
  ------------------
 1145|       |        /* Already initialized: do nothing */
 1146|    146|        return _PyStatus_OK();
  ------------------
  |  |   24|    146|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1147|    146|    }
 1148|       |
 1149|      2|    PyPreConfig preconfig;
 1150|       |
 1151|      2|    _PyPreConfig_InitFromConfig(&preconfig, config);
 1152|       |
 1153|      2|    if (!config->parse_argv) {
  ------------------
  |  Branch (1153:9): [True: 0, False: 2]
  ------------------
 1154|      0|        return Py_PreInitialize(&preconfig);
 1155|      0|    }
 1156|      2|    else if (args == NULL) {
  ------------------
  |  Branch (1156:14): [True: 2, False: 0]
  ------------------
 1157|      2|        _PyArgv config_args = {
 1158|      2|            .use_bytes_argv = 0,
 1159|      2|            .argc = config->argv.length,
 1160|      2|            .wchar_argv = config->argv.items};
 1161|      2|        return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
 1162|      2|    }
 1163|      0|    else {
 1164|      0|        return _Py_PreInitializeFromPyArgv(&preconfig, args);
 1165|      0|    }
 1166|      2|}
Py_InitializeFromConfig:
 1628|      2|{
 1629|      2|    if (config == NULL) {
  ------------------
  |  Branch (1629:9): [True: 0, False: 2]
  ------------------
 1630|      0|        return _PyStatus_ERR("initialization config is NULL");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1631|      0|    }
 1632|       |
 1633|      2|    PyStatus status;
 1634|       |
 1635|      2|    status = _PyRuntime_Initialize();
 1636|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1637|      0|        return status;
 1638|      0|    }
 1639|      2|    _PyRuntimeState *runtime = &_PyRuntime;
 1640|       |
 1641|      2|    PyThreadState *tstate = NULL;
 1642|      2|    status = pyinit_core(runtime, config, &tstate);
 1643|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1644|      0|        return status;
 1645|      0|    }
 1646|      2|    config = _PyInterpreterState_GetConfig(tstate->interp);
 1647|       |
 1648|      2|    if (config->_init_main) {
  ------------------
  |  Branch (1648:9): [True: 2, False: 0]
  ------------------
 1649|      2|        status = pyinit_main(tstate);
 1650|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1651|      0|            return status;
 1652|      0|        }
 1653|      2|    }
 1654|       |
 1655|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1656|      2|}
_Py_IsInterpreterFinalizing:
 2849|  48.4k|{
 2850|       |    /* We check the runtime first since, in a daemon thread,
 2851|       |       interp might be dangling pointer. */
 2852|  48.4k|    PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(&_PyRuntime);
 2853|  48.4k|    if (finalizing == NULL) {
  ------------------
  |  Branch (2853:9): [True: 48.4k, False: 0]
  ------------------
 2854|  48.4k|        finalizing = _PyInterpreterState_GetFinalizing(interp);
 2855|  48.4k|    }
 2856|       |    return finalizing != NULL;
 2857|  48.4k|}
pylifecycle.c:_coerce_default_locale_settings:
  280|      2|{
  281|      2|    const char *newloc = target->locale_name;
  282|       |
  283|       |    /* Reset locale back to currently configured defaults */
  284|      2|    _Py_SetLocaleFromEnv(LC_ALL);
  285|       |
  286|       |    /* Set the relevant locale environment variable */
  287|      2|    if (setenv("LC_CTYPE", newloc, 1)) {
  ------------------
  |  Branch (287:9): [True: 0, False: 2]
  ------------------
  288|      0|        fprintf(stderr,
  289|      0|                "Error setting LC_CTYPE, skipping C locale coercion\n");
  290|      0|        return 0;
  291|      0|    }
  292|      2|    if (warn) {
  ------------------
  |  Branch (292:9): [True: 0, False: 2]
  ------------------
  293|      0|        fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
  294|      0|    }
  295|       |
  296|       |    /* Reconfigure with the overridden environment variables */
  297|       |    _Py_SetLocaleFromEnv(LC_ALL);
  298|      2|    return 1;
  299|      2|}
pylifecycle.c:pyinit_core:
 1190|      2|{
 1191|      2|    PyStatus status;
 1192|       |
 1193|      2|    status = _Py_PreInitializeFromConfig(src_config, NULL);
 1194|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1195|      0|        return status;
 1196|      0|    }
 1197|       |
 1198|      2|    PyConfig config;
 1199|      2|    PyConfig_InitPythonConfig(&config);
 1200|       |
 1201|      2|    status = _PyConfig_Copy(&config, src_config);
 1202|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1203|      0|        goto done;
 1204|      0|    }
 1205|       |
 1206|       |    // Read the configuration, but don't compute the path configuration
 1207|       |    // (it is computed in the main init).
 1208|      2|    status = _PyConfig_Read(&config, 0);
 1209|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1210|      0|        goto done;
 1211|      0|    }
 1212|       |
 1213|      2|    if (!runtime->core_initialized) {
  ------------------
  |  Branch (1213:9): [True: 2, False: 0]
  ------------------
 1214|      2|        status = pyinit_config(runtime, tstate_p, &config);
 1215|      2|    }
 1216|      0|    else {
 1217|      0|        status = pyinit_core_reconfigure(runtime, tstate_p, &config);
 1218|      0|    }
 1219|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1220|      0|        goto done;
 1221|      0|    }
 1222|       |
 1223|      2|done:
 1224|      2|    PyConfig_Clear(&config);
 1225|      2|    return status;
 1226|      2|}
pylifecycle.c:pyinit_config:
 1038|      2|{
 1039|      2|    PyStatus status = pycore_init_runtime(runtime, config);
 1040|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1041|      0|        return status;
 1042|      0|    }
 1043|       |
 1044|      2|    PyThreadState *tstate;
 1045|      2|    status = pycore_create_interpreter(runtime, config, &tstate);
 1046|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1047|      0|        return status;
 1048|      0|    }
 1049|      2|    *tstate_p = tstate;
 1050|       |
 1051|      2|    status = pycore_interp_init(tstate);
 1052|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1053|      0|        return status;
 1054|      0|    }
 1055|       |
 1056|       |    /* Only when we get here is the runtime core fully initialized */
 1057|      2|    _PyRuntimeState_SetCoreInitialized(runtime, 1);
 1058|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1059|      2|}
pylifecycle.c:pycore_init_runtime:
  532|      2|{
  533|      2|    if (_PyRuntimeState_GetInitialized(runtime)) {
  ------------------
  |  Branch (533:9): [True: 0, False: 2]
  ------------------
  534|      0|        return _PyStatus_ERR("main interpreter already initialized");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  535|      0|    }
  536|       |
  537|      2|    PyStatus status = _PyConfig_Write(config, runtime);
  538|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  539|      0|        return status;
  540|      0|    }
  541|       |
  542|       |#if defined(PYMALLOC_USE_HUGEPAGES) && defined(MS_WINDOWS)
  543|       |    if (runtime->allocators.use_hugepages) {
  544|       |        status = get_huge_pages_privilege();
  545|       |        if (_PyStatus_EXCEPTION(status)) {
  546|       |            return status;
  547|       |        }
  548|       |    }
  549|       |#endif
  550|       |
  551|       |    /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
  552|       |     * threads behave a little more gracefully at interpreter shutdown.
  553|       |     * We clobber it here so the new interpreter can start with a clean
  554|       |     * slate.
  555|       |     *
  556|       |     * However, this may still lead to misbehaviour if there are daemon
  557|       |     * threads still hanging around from a previous Py_Initialize/Finalize
  558|       |     * pair :(
  559|       |     */
  560|      2|    _PyRuntimeState_SetFinalizing(runtime, NULL);
  561|       |
  562|      2|    _Py_InitVersion();
  563|      2|    _Py_DumpTraceback_Init();
  564|       |
  565|      2|    status = _Py_HashRandomization_Init(config);
  566|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  567|      0|        return status;
  568|      0|    }
  569|       |
  570|      2|    status = _PyImport_Init();
  571|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  572|      0|        return status;
  573|      0|    }
  574|       |
  575|      2|    status = _PyInterpreterState_Enable(runtime);
  576|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  577|      0|        return status;
  578|      0|    }
  579|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  580|      2|}
pylifecycle.c:pycore_create_interpreter:
  673|      2|{
  674|      2|    PyStatus status;
  675|      2|    PyInterpreterState *interp;
  676|      2|    status = _PyInterpreterState_New(NULL, &interp);
  677|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  678|      0|        return status;
  679|      0|    }
  680|      2|    assert(interp != NULL);
  ------------------
  |  Branch (680:5): [True: 2, False: 0]
  ------------------
  681|      2|    assert(_Py_IsMainInterpreter(interp));
  ------------------
  |  Branch (681:5): [True: 2, False: 0]
  ------------------
  682|      2|    _PyInterpreterState_SetWhence(interp, _PyInterpreterState_WHENCE_RUNTIME);
  ------------------
  |  |   18|      2|#define _PyInterpreterState_WHENCE_RUNTIME 1
  ------------------
  683|      2|    interp->_ready = 1;
  684|       |
  685|       |    /* Initialize the module dict watcher early, before any modules are created */
  686|      2|    if (_PyModule_InitModuleDictWatcher(interp) != 0) {
  ------------------
  |  Branch (686:9): [True: 0, False: 2]
  ------------------
  687|      0|        return _PyStatus_ERR("failed to initialize module dict watcher");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  688|      0|    }
  689|       |
  690|      2|    status = _PyConfig_Copy(&interp->config, src_config);
  691|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  692|      0|        return status;
  693|      0|    }
  694|       |
  695|       |    /* Auto-thread-state API */
  696|      2|    status = _PyGILState_Init(interp);
  697|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  698|      0|        return status;
  699|      0|    }
  700|       |
  701|      2|    PyInterpreterConfig config = _PyInterpreterConfig_LEGACY_INIT;
  ------------------
  |  |   76|      2|    { \
  |  |   77|      2|        .use_main_obmalloc = 1, \
  |  |   78|      2|        .allow_fork = 1, \
  |  |   79|      2|        .allow_exec = 1, \
  |  |   80|      2|        .allow_threads = 1, \
  |  |   81|      2|        .allow_daemon_threads = 1, \
  |  |   82|      2|        .check_multi_interp_extensions = _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS, \
  |  |  ------------------
  |  |  |  |   72|      2|#  define _PyInterpreterConfig_LEGACY_CHECK_MULTI_INTERP_EXTENSIONS 0
  |  |  ------------------
  |  |   83|      2|        .gil = PyInterpreterConfig_SHARED_GIL, \
  |  |  ------------------
  |  |  |  |   41|      2|#define PyInterpreterConfig_SHARED_GIL (1)
  |  |  ------------------
  |  |   84|      2|    }
  ------------------
  702|       |    // The main interpreter always has its own GIL and supports single-phase
  703|       |    // init extensions.
  704|      2|    config.gil = PyInterpreterConfig_OWN_GIL;
  ------------------
  |  |   42|      2|#define PyInterpreterConfig_OWN_GIL (2)
  ------------------
  705|      2|    config.check_multi_interp_extensions = 0;
  706|      2|    status = init_interp_settings(interp, &config);
  707|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  708|      0|        return status;
  709|      0|    }
  710|       |
  711|       |    // This could be done in init_interpreter() (in pystate.c) if it
  712|       |    // didn't depend on interp->feature_flags being set already.
  713|      2|    status = _PyObject_InitState(interp);
  714|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  715|      0|        return status;
  716|      0|    }
  717|       |
  718|       |#ifdef Py_STATS
  719|       |    // initialize pystats.  This must be done after the settings are loaded.
  720|       |    status = _PyStats_InterpInit(interp);
  721|       |    if (_PyStatus_EXCEPTION(status)) {
  722|       |        return status;
  723|       |    }
  724|       |#endif
  725|       |
  726|       |    // initialize the interp->obmalloc state.  This must be done after
  727|       |    // the settings are loaded (so that feature_flags are set) but before
  728|       |    // any calls are made to obmalloc functions.
  729|      2|    if (_PyMem_init_obmalloc(interp) < 0) {
  ------------------
  |  Branch (729:9): [True: 0, False: 2]
  ------------------
  730|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  731|      0|    }
  732|       |
  733|      2|    status = _PyTraceMalloc_Init();
  734|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  735|      0|        return status;
  736|      0|    }
  737|       |
  738|      2|    PyThreadState *tstate = _PyThreadState_New(interp,
  739|      2|                                               _PyThreadState_WHENCE_INIT);
  ------------------
  |  |  105|      2|#  define _PyThreadState_WHENCE_INIT 1
  ------------------
  740|      2|    if (tstate == NULL) {
  ------------------
  |  Branch (740:9): [True: 0, False: 2]
  ------------------
  741|      0|        return _PyStatus_ERR("can't make first thread");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  742|      0|    }
  743|      2|    runtime->main_tstate = tstate;
  744|      2|    _PyThreadState_Bind(tstate);
  745|       |
  746|      2|    init_interp_create_gil(tstate, config.gil);
  747|       |
  748|      2|    *tstate_p = tstate;
  749|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  750|      2|}
pylifecycle.c:init_interp_settings:
  586|      2|{
  587|      2|    assert(interp->feature_flags == 0);
  ------------------
  |  Branch (587:5): [True: 2, False: 0]
  ------------------
  588|       |
  589|      2|    if (config->use_main_obmalloc) {
  ------------------
  |  Branch (589:9): [True: 2, False: 0]
  ------------------
  590|      2|        interp->feature_flags |= Py_RTFLAGS_USE_MAIN_OBMALLOC;
  ------------------
  |  |   79|      2|#define Py_RTFLAGS_USE_MAIN_OBMALLOC (1UL << 5)
  ------------------
  591|      2|    }
  592|      0|    else if (!config->check_multi_interp_extensions) {
  ------------------
  |  Branch (592:14): [True: 0, False: 0]
  ------------------
  593|       |        /* The reason: PyModuleDef.m_base.m_copy leaks objects between
  594|       |           interpreters. */
  595|      0|        return _PyStatus_ERR("per-interpreter obmalloc does not support "
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  596|      0|                             "single-phase init extension modules");
  597|      0|    }
  598|       |#ifdef Py_GIL_DISABLED
  599|       |    if (!_Py_IsMainInterpreter(interp) &&
  600|       |        !config->check_multi_interp_extensions)
  601|       |    {
  602|       |        return _PyStatus_ERR("The free-threaded build does not support "
  603|       |                             "single-phase init extension modules in "
  604|       |                             "subinterpreters");
  605|       |    }
  606|       |#endif
  607|       |
  608|      2|    if (config->allow_fork) {
  ------------------
  |  Branch (608:9): [True: 2, False: 0]
  ------------------
  609|      2|        interp->feature_flags |= Py_RTFLAGS_FORK;
  ------------------
  |  |   91|      2|#define Py_RTFLAGS_FORK (1UL << 15)
  ------------------
  610|      2|    }
  611|      2|    if (config->allow_exec) {
  ------------------
  |  Branch (611:9): [True: 2, False: 0]
  ------------------
  612|      2|        interp->feature_flags |= Py_RTFLAGS_EXEC;
  ------------------
  |  |   94|      2|#define Py_RTFLAGS_EXEC (1UL << 16)
  ------------------
  613|      2|    }
  614|       |    // Note that fork+exec is always allowed.
  615|       |
  616|      2|    if (config->allow_threads) {
  ------------------
  |  Branch (616:9): [True: 2, False: 0]
  ------------------
  617|      2|        interp->feature_flags |= Py_RTFLAGS_THREADS;
  ------------------
  |  |   85|      2|#define Py_RTFLAGS_THREADS (1UL << 10)
  ------------------
  618|      2|    }
  619|      2|    if (config->allow_daemon_threads) {
  ------------------
  |  Branch (619:9): [True: 2, False: 0]
  ------------------
  620|      2|        interp->feature_flags |= Py_RTFLAGS_DAEMON_THREADS;
  ------------------
  |  |   88|      2|#define Py_RTFLAGS_DAEMON_THREADS (1UL << 11)
  ------------------
  621|      2|    }
  622|       |
  623|      2|    if (config->check_multi_interp_extensions) {
  ------------------
  |  Branch (623:9): [True: 0, False: 2]
  ------------------
  624|      0|        interp->feature_flags |= Py_RTFLAGS_MULTI_INTERP_EXTENSIONS;
  ------------------
  |  |   82|      0|#define Py_RTFLAGS_MULTI_INTERP_EXTENSIONS (1UL << 8)
  ------------------
  625|      0|    }
  626|       |
  627|      2|    switch (config->gil) {
  628|      0|    case PyInterpreterConfig_DEFAULT_GIL: break;
  ------------------
  |  |   40|      0|#define PyInterpreterConfig_DEFAULT_GIL (0)
  ------------------
  |  Branch (628:5): [True: 0, False: 2]
  ------------------
  629|      0|    case PyInterpreterConfig_SHARED_GIL: break;
  ------------------
  |  |   41|      0|#define PyInterpreterConfig_SHARED_GIL (1)
  ------------------
  |  Branch (629:5): [True: 0, False: 2]
  ------------------
  630|      2|    case PyInterpreterConfig_OWN_GIL: break;
  ------------------
  |  |   42|      2|#define PyInterpreterConfig_OWN_GIL (2)
  ------------------
  |  Branch (630:5): [True: 2, False: 0]
  ------------------
  631|      0|    default:
  ------------------
  |  Branch (631:5): [True: 0, False: 2]
  ------------------
  632|      0|        return _PyStatus_ERR("invalid interpreter config 'gil' value");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  633|      2|    }
  634|       |
  635|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  636|      2|}
pylifecycle.c:init_interp_create_gil:
  641|      2|{
  642|       |    /* finalize_interp_delete() comment explains why _PyEval_FiniGIL() is
  643|       |       only called here. */
  644|       |    // XXX This is broken with a per-interpreter GIL.
  645|      2|    _PyEval_FiniGIL(tstate->interp);
  646|       |
  647|       |    /* Auto-thread-state API */
  648|      2|    _PyGILState_SetTstate(tstate);
  649|       |
  650|      2|    int own_gil = (gil == PyInterpreterConfig_OWN_GIL);
  ------------------
  |  |   42|      2|#define PyInterpreterConfig_OWN_GIL (2)
  ------------------
  651|       |
  652|       |    /* Create the GIL and take it */
  653|      2|    _PyEval_InitGIL(tstate, own_gil);
  654|      2|}
pylifecycle.c:pycore_interp_init:
  958|      2|{
  959|      2|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
  960|      2|    if (_tstate->c_stack_hard_limit == 0) {
  ------------------
  |  Branch (960:9): [True: 0, False: 2]
  ------------------
  961|      0|        _Py_InitializeRecursionLimits(tstate);
  962|      0|    }
  963|      2|    PyInterpreterState *interp = tstate->interp;
  964|      2|    PyStatus status;
  965|      2|    PyObject *sysmod = NULL;
  966|       |
  967|       |    // Create singletons before the first PyType_Ready() call, since
  968|       |    // PyType_Ready() uses singletons like the Unicode empty string (tp_doc)
  969|       |    // and the empty tuple singletons (tp_bases).
  970|      2|    status = pycore_init_global_objects(interp);
  971|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  972|      0|        return status;
  973|      0|    }
  974|       |
  975|      2|    status = _PyCode_Init(interp);
  976|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  977|      0|        return status;
  978|      0|    }
  979|       |
  980|      2|    status = _PyDtoa_Init(interp);
  981|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  982|      0|        return status;
  983|      0|    }
  984|       |
  985|       |    // The GC must be initialized before the first GC collection.
  986|      2|    status = _PyGC_Init(interp);
  987|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  988|      0|        return status;
  989|      0|    }
  990|       |
  991|      2|    status = pycore_init_types(interp);
  992|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  993|      0|        goto done;
  994|      0|    }
  995|       |
  996|      2|    if (_PyWarnings_InitState(interp) < 0) {
  ------------------
  |  Branch (996:9): [True: 0, False: 2]
  ------------------
  997|      0|        return _PyStatus_ERR("can't initialize warnings");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  998|      0|    }
  999|       |
 1000|      2|    status = _PyAtExit_Init(interp);
 1001|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1002|      0|        return status;
 1003|      0|    }
 1004|       |
 1005|      2|    status = _PySys_Create(tstate, &sysmod);
 1006|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1007|      0|        goto done;
 1008|      0|    }
 1009|       |
 1010|      2|    status = pycore_init_builtins(tstate);
 1011|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1012|      0|        goto done;
 1013|      0|    }
 1014|       |
 1015|      2|    status = _PyXI_Init(interp);
 1016|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1017|      0|        goto done;
 1018|      0|    }
 1019|       |
 1020|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 1021|       |
 1022|      2|    status = _PyImport_InitCore(tstate, sysmod, config->_install_importlib);
 1023|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1024|      0|        goto done;
 1025|      0|    }
 1026|       |
 1027|      2|done:
 1028|       |    /* sys.modules['sys'] contains a strong reference to the module */
 1029|      2|    Py_XDECREF(sysmod);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1030|      2|    return status;
 1031|      2|}
pylifecycle.c:pycore_init_global_objects:
  755|      2|{
  756|      2|    PyStatus status;
  757|       |
  758|      2|    status = _PyUnicode_InitGlobalObjects(interp);
  759|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  760|      0|        return status;
  761|      0|    }
  762|       |
  763|      2|    _PyUnicode_InitState(interp);
  764|       |
  765|      2|    if (_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (765:9): [True: 2, False: 0]
  ------------------
  766|      2|        _Py_GetConstant_Init();
  767|      2|    }
  768|       |
  769|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  770|      2|}
pylifecycle.c:pycore_init_types:
  775|      2|{
  776|      2|    PyStatus status;
  777|       |
  778|      2|    status = _PyTypes_InitTypes(interp);
  779|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  780|      0|        return status;
  781|      0|    }
  782|       |
  783|      2|    status = _PyLong_InitTypes(interp);
  784|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  785|      0|        return status;
  786|      0|    }
  787|       |
  788|      2|    status = _PyUnicode_InitTypes(interp);
  789|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  790|      0|        return status;
  791|      0|    }
  792|       |
  793|      2|    status = _PyFloat_InitTypes(interp);
  794|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  795|      0|        return status;
  796|      0|    }
  797|       |
  798|      2|    if (_PyExc_InitTypes(interp) < 0) {
  ------------------
  |  Branch (798:9): [True: 0, False: 2]
  ------------------
  799|      0|        return _PyStatus_ERR("failed to initialize an exception type");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  800|      0|    }
  801|       |
  802|      2|    status = _PyExc_InitGlobalObjects(interp);
  803|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  804|      0|        return status;
  805|      0|    }
  806|       |
  807|      2|    status = _PyExc_InitState(interp);
  808|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  809|      0|        return status;
  810|      0|    }
  811|       |
  812|      2|    status = _PyErr_InitTypes(interp);
  813|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  814|      0|        return status;
  815|      0|    }
  816|       |
  817|      2|    status = _PyContext_Init(interp);
  818|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  819|      0|        return status;
  820|      0|    }
  821|       |
  822|      2|    status = _PyXI_InitTypes(interp);
  823|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  824|      0|        return status;
  825|      0|    }
  826|       |
  827|      2|    status = _PyInterpolation_InitTypes(interp);
  828|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  829|      0|        return status;
  830|      0|    }
  831|       |
  832|      2|    status = _PyDateTime_InitTypes(interp);
  833|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  834|      0|        return status;
  835|      0|    }
  836|       |
  837|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  838|      2|}
pylifecycle.c:pycore_init_builtins:
  842|      2|{
  843|      2|    PyInterpreterState *interp = tstate->interp;
  844|       |
  845|      2|    PyObject *bimod = _PyBuiltin_Init(interp);
  846|      2|    if (bimod == NULL) {
  ------------------
  |  Branch (846:9): [True: 0, False: 2]
  ------------------
  847|      0|        goto error;
  848|      0|    }
  849|       |
  850|      2|    PyObject *modules = _PyImport_GetModules(interp);
  851|      2|    if (_PyImport_FixupBuiltin(tstate, bimod, "builtins", modules) < 0) {
  ------------------
  |  Branch (851:9): [True: 0, False: 2]
  ------------------
  852|      0|        goto error;
  853|      0|    }
  854|       |
  855|      2|    PyObject *builtins_dict = PyModule_GetDict(bimod);
  856|      2|    if (builtins_dict == NULL) {
  ------------------
  |  Branch (856:9): [True: 0, False: 2]
  ------------------
  857|      0|        goto error;
  858|      0|    }
  859|      2|    interp->builtins = Py_NewRef(builtins_dict);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  860|       |
  861|      2|    PyObject *isinstance = PyDict_GetItemWithError(builtins_dict, &_Py_ID(isinstance));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|      2|    if (!isinstance) {
  ------------------
  |  Branch (862:9): [True: 0, False: 2]
  ------------------
  863|      0|        goto error;
  864|      0|    }
  865|      2|    interp->callable_cache.isinstance = isinstance;
  866|       |
  867|      2|    PyObject *len = PyDict_GetItemWithError(builtins_dict, &_Py_ID(len));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  868|      2|    if (!len) {
  ------------------
  |  Branch (868:9): [True: 0, False: 2]
  ------------------
  869|      0|        goto error;
  870|      0|    }
  871|      2|    interp->callable_cache.len = len;
  872|       |
  873|      2|    PyObject *all = PyDict_GetItemWithError(builtins_dict, &_Py_ID(all));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  874|      2|    if (!all) {
  ------------------
  |  Branch (874:9): [True: 0, False: 2]
  ------------------
  875|      0|        goto error;
  876|      0|    }
  877|       |
  878|      2|    PyObject *any = PyDict_GetItemWithError(builtins_dict, &_Py_ID(any));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  879|      2|    if (!any) {
  ------------------
  |  Branch (879:9): [True: 0, False: 2]
  ------------------
  880|      0|        goto error;
  881|      0|    }
  882|       |
  883|      2|    PyObject *common_objs[NUM_COMMON_CONSTANTS] = {NULL};
  884|      2|    common_objs[CONSTANT_ASSERTIONERROR] = PyExc_AssertionError;
  ------------------
  |  |   71|      2|#define CONSTANT_ASSERTIONERROR 0
  ------------------
  885|      2|    common_objs[CONSTANT_NOTIMPLEMENTEDERROR] = PyExc_NotImplementedError;
  ------------------
  |  |   72|      2|#define CONSTANT_NOTIMPLEMENTEDERROR 1
  ------------------
  886|      2|    common_objs[CONSTANT_BUILTIN_TUPLE] = (PyObject *)&PyTuple_Type;
  ------------------
  |  |   73|      2|#define CONSTANT_BUILTIN_TUPLE 2
  ------------------
  887|      2|    common_objs[CONSTANT_BUILTIN_ALL] = all;
  ------------------
  |  |   74|      2|#define CONSTANT_BUILTIN_ALL 3
  ------------------
  888|      2|    common_objs[CONSTANT_BUILTIN_ANY] = any;
  ------------------
  |  |   75|      2|#define CONSTANT_BUILTIN_ANY 4
  ------------------
  889|      2|    common_objs[CONSTANT_BUILTIN_LIST] = (PyObject *)&PyList_Type;
  ------------------
  |  |   76|      2|#define CONSTANT_BUILTIN_LIST 5
  ------------------
  890|      2|    common_objs[CONSTANT_BUILTIN_SET] = (PyObject *)&PySet_Type;
  ------------------
  |  |   77|      2|#define CONSTANT_BUILTIN_SET 6
  ------------------
  891|      2|    common_objs[CONSTANT_NONE] = Py_None;
  ------------------
  |  |   78|      2|#define CONSTANT_NONE 7
  ------------------
                  common_objs[CONSTANT_NONE] = Py_None;
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  892|      2|    common_objs[CONSTANT_EMPTY_STR] =
  ------------------
  |  |   79|      2|#define CONSTANT_EMPTY_STR 8
  ------------------
  893|      2|        Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_STR);
  ------------------
  |  |  597|      2|#define Py_CONSTANT_EMPTY_STR 7
  ------------------
  894|      2|    common_objs[CONSTANT_TRUE] = Py_True;
  ------------------
  |  |   80|      2|#define CONSTANT_TRUE 9
  ------------------
                  common_objs[CONSTANT_TRUE] = Py_True;
  ------------------
  |  |   26|      2|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  895|      2|    common_objs[CONSTANT_FALSE] = Py_False;
  ------------------
  |  |   81|      2|#define CONSTANT_FALSE 10
  ------------------
                  common_objs[CONSTANT_FALSE] = Py_False;
  ------------------
  |  |   25|      2|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  896|      2|    common_objs[CONSTANT_MINUS_ONE] =
  ------------------
  |  |   82|      2|#define CONSTANT_MINUS_ONE 11
  ------------------
  897|      2|        (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS - 1];
  ------------------
  |  |   59|      2|#define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints)
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS - 1];
  ------------------
  |  |   98|      2|#define _PY_NSMALLNEGINTS           5
  ------------------
  898|      2|    common_objs[CONSTANT_BUILTIN_FROZENSET] = (PyObject *)&PyFrozenSet_Type;
  ------------------
  |  |   83|      2|#define CONSTANT_BUILTIN_FROZENSET 12
  ------------------
  899|      2|    common_objs[CONSTANT_EMPTY_TUPLE] =
  ------------------
  |  |   84|      2|#define CONSTANT_EMPTY_TUPLE 13
  ------------------
  900|      2|        Py_GetConstantBorrowed(Py_CONSTANT_EMPTY_TUPLE);
  ------------------
  |  |  599|      2|#define Py_CONSTANT_EMPTY_TUPLE 9
  ------------------
  901|     30|    for (int i = 0; i < NUM_COMMON_CONSTANTS; i++) {
  ------------------
  |  |   85|     30|#define NUM_COMMON_CONSTANTS 14
  ------------------
  |  Branch (901:21): [True: 28, False: 2]
  ------------------
  902|     28|        assert(common_objs[i] != NULL);
  ------------------
  |  Branch (902:9): [True: 28, False: 0]
  ------------------
  903|     28|        _Py_SetImmortal(common_objs[i]);
  904|     28|        interp->common_consts[i] = PyStackRef_FromPyObjectBorrow(common_objs[i]);
  905|     28|    }
  906|       |
  907|      2|    PyObject *list_append = _PyType_Lookup(&PyList_Type, &_Py_ID(append));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|      2|    if (list_append == NULL) {
  ------------------
  |  Branch (908:9): [True: 0, False: 2]
  ------------------
  909|      0|        goto error;
  910|      0|    }
  911|      2|    interp->callable_cache.list_append = list_append;
  912|       |
  913|      2|    PyObject *object__getattribute__ = _PyType_Lookup(&PyBaseObject_Type, &_Py_ID(__getattribute__));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|      2|    if (object__getattribute__ == NULL) {
  ------------------
  |  Branch (914:9): [True: 0, False: 2]
  ------------------
  915|      0|        goto error;
  916|      0|    }
  917|      2|    interp->callable_cache.object__getattribute__ = object__getattribute__;
  918|       |
  919|      2|    if (_PyType_InitSlotDefs(interp) < 0) {
  ------------------
  |  Branch (919:9): [True: 0, False: 2]
  ------------------
  920|      0|        return _PyStatus_ERR("failed to init slotdefs");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  921|      0|    }
  922|       |
  923|      2|    if (_PyBuiltins_AddExceptions(bimod) < 0) {
  ------------------
  |  Branch (923:9): [True: 0, False: 2]
  ------------------
  924|      0|        return _PyStatus_ERR("failed to add exceptions to builtins");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  925|      0|    }
  926|       |
  927|       |    /* The Python-implemented builtins live in the frozen _pybuiltins module.
  928|       |       Programs/_freeze_module has no frozen modules (it's what creates
  929|       |       them) and opts out via _install_importlib, like the import system. */
  930|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
  931|      2|    if (config->_install_importlib) {
  ------------------
  |  Branch (931:9): [True: 2, False: 0]
  ------------------
  932|      2|        if (_PyBuiltin_InitPythonFunctions(builtins_dict) < 0) {
  ------------------
  |  Branch (932:13): [True: 0, False: 2]
  ------------------
  933|      0|            return _PyStatus_ERR("failed to add Python-implemented builtins");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  934|      0|        }
  935|      2|    }
  936|       |
  937|      2|    interp->builtins_copy = PyDict_Copy(interp->builtins);
  938|      2|    if (interp->builtins_copy == NULL) {
  ------------------
  |  Branch (938:9): [True: 0, False: 2]
  ------------------
  939|      0|        goto error;
  940|      0|    }
  941|      2|    Py_DECREF(bimod);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  942|       |
  943|      2|    if (_PyImport_InitDefaultImportFunc(interp) < 0) {
  ------------------
  |  Branch (943:9): [True: 0, False: 2]
  ------------------
  944|      0|        goto error;
  945|      0|    }
  946|       |
  947|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (947:5): [True: 2, False: 0]
  ------------------
  948|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  949|       |
  950|      0|error:
  951|      0|    Py_XDECREF(bimod);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  952|      0|    return _PyStatus_ERR("can't initialize builtins module");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  953|      2|}
pylifecycle.c:pyinit_main:
 1608|      2|{
 1609|      2|    PyInterpreterState *interp = tstate->interp;
 1610|      2|    if (!_PyRuntimeState_GetCoreInitialized(interp->runtime)) {
  ------------------
  |  Branch (1610:9): [True: 0, False: 2]
  ------------------
 1611|      0|        return _PyStatus_ERR("runtime core not initialized");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1612|      0|    }
 1613|       |
 1614|      2|    if (_PyRuntimeState_GetInitialized(interp->runtime)) {
  ------------------
  |  Branch (1614:9): [True: 0, False: 2]
  ------------------
 1615|      0|        return pyinit_main_reconfigure(tstate);
 1616|      0|    }
 1617|       |
 1618|      2|    PyStatus status = init_interp_main(tstate);
 1619|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1620|      0|        return status;
 1621|      0|    }
 1622|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1623|      2|}
pylifecycle.c:interpreter_update_config:
  413|      2|{
  414|      2|    const PyConfig *config = &tstate->interp->config;
  415|       |
  416|      2|    if (!only_update_path_config) {
  ------------------
  |  Branch (416:9): [True: 0, False: 2]
  ------------------
  417|      0|        PyStatus status = _PyConfig_Write(config, tstate->interp->runtime);
  418|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  419|      0|            _PyErr_SetFromPyStatus(status);
  420|      0|            return -1;
  421|      0|        }
  422|      0|    }
  423|       |
  424|      2|    if (_Py_IsMainInterpreter(tstate->interp)) {
  ------------------
  |  Branch (424:9): [True: 2, False: 0]
  ------------------
  425|      2|        PyStatus status = _PyPathConfig_UpdateGlobal(config);
  426|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  427|      0|            _PyErr_SetFromPyStatus(status);
  428|      0|            return -1;
  429|      0|        }
  430|      2|    }
  431|       |
  432|      2|    _Py_atomic_store_int(&tstate->interp->long_state.max_str_digits,
  433|      2|                         config->int_max_str_digits);
  434|       |
  435|       |    // Update the sys module for the new configuration
  436|      2|    if (_PySys_UpdateConfig(tstate) < 0) {
  ------------------
  |  Branch (436:9): [True: 0, False: 2]
  ------------------
  437|      0|        return -1;
  438|      0|    }
  439|      2|    return 0;
  440|      2|}
pylifecycle.c:init_interp_main:
 1369|      2|{
 1370|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1370:5): [True: 2, False: 0]
  ------------------
 1371|       |
 1372|      2|    PyStatus status;
 1373|      2|    int is_main_interp = _Py_IsMainInterpreter(tstate->interp);
 1374|      2|    PyInterpreterState *interp = tstate->interp;
 1375|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 1376|       |
 1377|      2|    if (!config->_install_importlib) {
  ------------------
  |  Branch (1377:9): [True: 0, False: 2]
  ------------------
 1378|       |        /* Special mode for freeze_importlib: run with no import system
 1379|       |         *
 1380|       |         * This means anything which needs support from extension modules
 1381|       |         * or pure Python code in the standard library won't work.
 1382|       |         */
 1383|      0|        if (is_main_interp) {
  ------------------
  |  Branch (1383:13): [True: 0, False: 0]
  ------------------
 1384|      0|            _PyRuntimeState_SetInitialized(interp->runtime, 1);
 1385|      0|        }
 1386|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1387|      0|    }
 1388|       |
 1389|       |    // Initialize the import-related configuration.
 1390|      2|    status = _PyConfig_InitImportConfig(&interp->config);
 1391|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1392|      0|        return status;
 1393|      0|    }
 1394|       |
 1395|      2|    if (interpreter_update_config(tstate, 1) < 0) {
  ------------------
  |  Branch (1395:9): [True: 0, False: 2]
  ------------------
 1396|      0|        return _PyStatus_ERR("failed to update the Python config");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1397|      0|    }
 1398|       |
 1399|      2|    status = _PyImport_InitExternal(tstate);
 1400|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1401|      0|        return status;
 1402|      0|    }
 1403|       |
 1404|      2|    if (is_main_interp) {
  ------------------
  |  Branch (1404:9): [True: 2, False: 0]
  ------------------
 1405|       |        /* initialize the faulthandler module */
 1406|      2|        status = _PyFaulthandler_Init(config->faulthandler);
 1407|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1408|      0|            return status;
 1409|      0|        }
 1410|      2|    }
 1411|       |
 1412|      2|    status = _PyUnicode_InitEncodings(tstate);
 1413|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1414|      0|        return status;
 1415|      0|    }
 1416|       |
 1417|      2|    if (is_main_interp) {
  ------------------
  |  Branch (1417:9): [True: 2, False: 0]
  ------------------
 1418|      2|        if (_PySignal_Init(config->install_signal_handlers) < 0) {
  ------------------
  |  Branch (1418:13): [True: 0, False: 2]
  ------------------
 1419|      0|            return _PyStatus_ERR("can't initialize signals");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1420|      0|        }
 1421|       |
 1422|      2|        if (config->tracemalloc) {
  ------------------
  |  Branch (1422:13): [True: 0, False: 2]
  ------------------
 1423|      0|           if (_PyTraceMalloc_Start(config->tracemalloc) < 0) {
  ------------------
  |  Branch (1423:16): [True: 0, False: 0]
  ------------------
 1424|      0|                return _PyStatus_ERR("can't start tracemalloc");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1425|      0|            }
 1426|      0|        }
 1427|       |
 1428|      2|#ifdef PY_HAVE_PERF_TRAMPOLINE
 1429|      2|        if (config->perf_profiling) {
  ------------------
  |  Branch (1429:13): [True: 0, False: 2]
  ------------------
 1430|      0|            _PyPerf_Callbacks *cur_cb;
 1431|      0|            if (config->perf_profiling == 1) {
  ------------------
  |  Branch (1431:17): [True: 0, False: 0]
  ------------------
 1432|      0|                cur_cb = &_Py_perfmap_callbacks;
 1433|      0|            }
 1434|      0|            else {
 1435|      0|                cur_cb = &_Py_perfmap_jit_callbacks;
 1436|      0|            }
 1437|      0|            if (_PyPerfTrampoline_SetCallbacks(cur_cb) < 0 ||
  ------------------
  |  Branch (1437:17): [True: 0, False: 0]
  ------------------
 1438|      0|                    _PyPerfTrampoline_Init(config->perf_profiling) < 0) {
  ------------------
  |  Branch (1438:21): [True: 0, False: 0]
  ------------------
 1439|      0|                return _PyStatus_ERR("can't initialize the perf trampoline");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1440|      0|            }
 1441|      0|        }
 1442|      2|#endif
 1443|      2|    }
 1444|       |
 1445|      2|    status = init_sys_streams(tstate);
 1446|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1447|      0|        return status;
 1448|      0|    }
 1449|       |
 1450|      2|    status = init_set_builtins_open();
 1451|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1452|      0|        return status;
 1453|      0|    }
 1454|       |
 1455|       |#ifdef __ANDROID__
 1456|       |    status = init_android_streams(tstate);
 1457|       |    if (_PyStatus_EXCEPTION(status)) {
 1458|       |        return status;
 1459|       |    }
 1460|       |#endif
 1461|       |#if defined(__APPLE__) && HAS_APPLE_SYSTEM_LOG
 1462|       |    if (config->use_system_logger) {
 1463|       |        status = init_apple_streams(tstate);
 1464|       |        if (_PyStatus_EXCEPTION(status)) {
 1465|       |            return status;
 1466|       |        }
 1467|       |    }
 1468|       |#endif
 1469|       |
 1470|       |#ifdef Py_DEBUG
 1471|       |    run_presite(tstate);
 1472|       |#endif
 1473|       |
 1474|      2|    status = add_main_module(interp);
 1475|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1476|      0|        return status;
 1477|      0|    }
 1478|       |
 1479|      2|    if (is_main_interp) {
  ------------------
  |  Branch (1479:9): [True: 2, False: 0]
  ------------------
 1480|       |        /* Initialize warnings. */
 1481|      2|        PyObject *warnoptions;
 1482|      2|        if (PySys_GetOptionalAttrString("warnoptions", &warnoptions) < 0) {
  ------------------
  |  Branch (1482:13): [True: 0, False: 2]
  ------------------
 1483|      0|            return _PyStatus_ERR("can't initialize warnings");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1484|      0|        }
 1485|      2|        if (warnoptions != NULL && PyList_Check(warnoptions) &&
  ------------------
  |  |   25|      2|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      4|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1485:13): [True: 2, False: 0]
  ------------------
 1486|      2|            PyList_Size(warnoptions) > 0)
  ------------------
  |  Branch (1486:13): [True: 0, False: 2]
  ------------------
 1487|      0|        {
 1488|      0|            PyObject *warnings_module = PyImport_ImportModule("warnings");
 1489|      0|            if (warnings_module == NULL) {
  ------------------
  |  Branch (1489:17): [True: 0, False: 0]
  ------------------
 1490|      0|                fprintf(stderr, "'import warnings' failed; traceback:\n");
 1491|      0|                _PyErr_Print(tstate);
 1492|      0|            }
 1493|      0|            Py_XDECREF(warnings_module);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1494|      0|        }
 1495|      2|        Py_XDECREF(warnoptions);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1496|      2|    }
 1497|       |
 1498|      2|    if (config->site_import) {
  ------------------
  |  Branch (1498:9): [True: 2, False: 0]
  ------------------
 1499|      2|        status = init_import_site();
 1500|      2|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 1501|      0|            return status;
 1502|      0|        }
 1503|      2|    }
 1504|       |
 1505|       |    // Initialize lazy imports based on configuration. Do this after site
 1506|       |    // module is imported to avoid circular imports during startup.
 1507|      2|    if (config->lazy_imports == 0) {
  ------------------
  |  Branch (1507:9): [True: 0, False: 2]
  ------------------
 1508|      0|        return _PyStatus_ERR("PyConfig.lazy_imports=0 is not supported");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1509|      0|    }
 1510|      2|    if (config->lazy_imports == 1) {
  ------------------
  |  Branch (1510:9): [True: 0, False: 2]
  ------------------
 1511|      0|        if (PyImport_SetLazyImportsMode(PyImport_LAZY_ALL) < 0) {
  ------------------
  |  Branch (1511:13): [True: 0, False: 0]
  ------------------
 1512|      0|            return _PyStatus_ERR("failed to set lazy imports mode");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1513|      0|        }
 1514|      0|    }
 1515|       |    // If config->lazy_imports == -1, use the default mode, no change needed.
 1516|       |
 1517|      2|    if (is_main_interp) {
  ------------------
  |  Branch (1517:9): [True: 2, False: 0]
  ------------------
 1518|      2|#ifndef MS_WINDOWS
 1519|      2|        emit_stderr_warning_for_legacy_locale(interp->runtime);
 1520|      2|#endif
 1521|      2|    }
 1522|       |
 1523|       |    // Turn on experimental tier 2 (uops-based) optimizer
 1524|       |    // This is also needed when the JIT is enabled
 1525|       |#ifdef _Py_TIER2
 1526|       |    if (is_main_interp) {
 1527|       |        int enabled = 1;
 1528|       |#if _Py_TIER2 & 2
 1529|       |        enabled = 0;
 1530|       |#endif
 1531|       |        char *env = Py_GETENV("PYTHON_JIT");
 1532|       |        if (env && *env != '\0') {
 1533|       |            // PYTHON_JIT=0|1 overrides the default
 1534|       |            enabled = *env != '0';
 1535|       |        }
 1536|       |        if (enabled) {
 1537|       |#ifdef _Py_JIT
 1538|       |            // perf profiler works fine with tier 2 interpreter, so
 1539|       |            // only checking for a "real JIT".
 1540|       |            if (config->perf_profiling > 0) {
 1541|       |                (void)PyErr_WarnEx(
 1542|       |                    PyExc_RuntimeWarning,
 1543|       |                    "JIT deactivated as perf profiling support is active",
 1544|       |                    0);
 1545|       |            } else
 1546|       |#endif
 1547|       |            {
 1548|       |                interp->jit = true;
 1549|       |            }
 1550|       |        }
 1551|       |    }
 1552|       |#endif
 1553|       |
 1554|      2|    if (!is_main_interp) {
  ------------------
  |  Branch (1554:9): [True: 0, False: 2]
  ------------------
 1555|       |        // The main interpreter is handled in Py_Main(), for now.
 1556|      0|        if (config->sys_path_0 != NULL) {
  ------------------
  |  Branch (1556:13): [True: 0, False: 0]
  ------------------
 1557|      0|            PyObject *path0 = PyUnicode_FromWideChar(config->sys_path_0, -1);
 1558|      0|            if (path0 == NULL) {
  ------------------
  |  Branch (1558:17): [True: 0, False: 0]
  ------------------
 1559|      0|                return _PyStatus_ERR("can't initialize sys.path[0]");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1560|      0|            }
 1561|      0|            PyObject *sysdict = interp->sysdict;
 1562|      0|            if (sysdict == NULL) {
  ------------------
  |  Branch (1562:17): [True: 0, False: 0]
  ------------------
 1563|      0|                Py_DECREF(path0);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1564|      0|                return _PyStatus_ERR("can't initialize sys.path[0]");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1565|      0|            }
 1566|      0|            PyObject *sys_path = PyDict_GetItemWithError(sysdict, &_Py_ID(path));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1567|      0|            if (sys_path == NULL) {
  ------------------
  |  Branch (1567:17): [True: 0, False: 0]
  ------------------
 1568|      0|                Py_DECREF(path0);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1569|      0|                return _PyStatus_ERR("can't initialize sys.path[0]");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1570|      0|            }
 1571|      0|            int res = PyList_Insert(sys_path, 0, path0);
 1572|      0|            Py_DECREF(path0);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1573|      0|            if (res) {
  ------------------
  |  Branch (1573:17): [True: 0, False: 0]
  ------------------
 1574|      0|                return _PyStatus_ERR("can't initialize sys.path[0]");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1575|      0|            }
 1576|      0|        }
 1577|      0|    }
 1578|       |
 1579|       |
 1580|      2|    interp->dict_state.watchers[0] = &builtins_dict_watcher;
 1581|      2|    if (PyDict_Watch(0, interp->builtins) != 0) {
  ------------------
  |  Branch (1581:9): [True: 0, False: 2]
  ------------------
 1582|      0|        return _PyStatus_ERR("failed to set builtin dict watcher");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 1583|      0|    }
 1584|       |
 1585|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (1585:5): [True: 2, False: 0]
  ------------------
 1586|       |
 1587|      2|    if (is_main_interp) {
  ------------------
  |  Branch (1587:9): [True: 2, False: 0]
  ------------------
 1588|      2|        _PyRuntimeState_SetInitialized(interp->runtime, 1);
 1589|      2|    }
 1590|       |
 1591|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 1592|      2|}
pylifecycle.c:init_sys_streams:
 3178|      2|{
 3179|      2|    PyObject *iomod = NULL;
 3180|      2|    PyObject *std = NULL;
 3181|      2|    int fd;
 3182|      2|    PyObject * encoding_attr;
 3183|      2|    PyStatus res = _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3184|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp);
 3185|       |
 3186|       |    /* Check that stdin is not a directory
 3187|       |       Using shell redirection, you can redirect stdin to a directory,
 3188|       |       crashing the Python interpreter. Catch this common mistake here
 3189|       |       and output a useful error message. Note that under MS Windows,
 3190|       |       the shell already prevents that. */
 3191|      2|#ifndef MS_WINDOWS
 3192|      2|    struct _Py_stat_struct sb;
 3193|      2|    if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
  ------------------
  |  Branch (3193:9): [True: 2, False: 0]
  ------------------
 3194|      2|        S_ISDIR(sb.st_mode)) {
  ------------------
  |  Branch (3194:9): [True: 0, False: 2]
  ------------------
 3195|      0|        return _PyStatus_ERR("<stdin> is a directory, cannot continue");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3196|      0|    }
 3197|      2|#endif
 3198|       |
 3199|      2|    if (!(iomod = PyImport_ImportModule("_io"))) {
  ------------------
  |  Branch (3199:9): [True: 0, False: 2]
  ------------------
 3200|      0|        goto error;
 3201|      0|    }
 3202|       |
 3203|       |    /* Set sys.stdin */
 3204|      2|    fd = fileno(stdin);
 3205|       |    /* Under some conditions stdin, stdout and stderr may not be connected
 3206|       |     * and fileno() may point to an invalid file descriptor. For example
 3207|       |     * GUI apps don't have valid standard streams by default.
 3208|       |     */
 3209|      2|    std = create_stdio(config, iomod, fd, 0, "<stdin>",
 3210|      2|                       config->stdio_encoding,
 3211|      2|                       config->stdio_errors);
 3212|      2|    if (std == NULL)
  ------------------
  |  Branch (3212:9): [True: 0, False: 2]
  ------------------
 3213|      0|        goto error;
 3214|      2|    PySys_SetObject("__stdin__", std);
 3215|      2|    _PySys_SetAttr(&_Py_ID(stdin), std);
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3216|      2|    Py_DECREF(std);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3217|       |
 3218|       |    /* Set sys.stdout */
 3219|      2|    fd = fileno(stdout);
 3220|      2|    std = create_stdio(config, iomod, fd, 1, "<stdout>",
 3221|      2|                       config->stdio_encoding,
 3222|      2|                       config->stdio_errors);
 3223|      2|    if (std == NULL)
  ------------------
  |  Branch (3223:9): [True: 0, False: 2]
  ------------------
 3224|      0|        goto error;
 3225|      2|    PySys_SetObject("__stdout__", std);
 3226|      2|    _PySys_SetAttr(&_Py_ID(stdout), std);
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3227|      2|    Py_DECREF(std);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3228|       |
 3229|      2|#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
 3230|       |    /* Set sys.stderr, replaces the preliminary stderr */
 3231|      2|    fd = fileno(stderr);
 3232|      2|    std = create_stdio(config, iomod, fd, 1, "<stderr>",
 3233|      2|                       config->stdio_encoding,
 3234|      2|                       L"backslashreplace");
 3235|      2|    if (std == NULL)
  ------------------
  |  Branch (3235:9): [True: 0, False: 2]
  ------------------
 3236|      0|        goto error;
 3237|       |
 3238|       |    /* Same as hack above, pre-import stderr's codec to avoid recursion
 3239|       |       when import.c tries to write to stderr in verbose mode. */
 3240|      2|    encoding_attr = PyObject_GetAttrString(std, "encoding");
 3241|      2|    if (encoding_attr != NULL) {
  ------------------
  |  Branch (3241:9): [True: 2, False: 0]
  ------------------
 3242|      2|        const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
 3243|      2|        if (std_encoding != NULL) {
  ------------------
  |  Branch (3243:13): [True: 2, False: 0]
  ------------------
 3244|      2|            PyObject *codec_info = _PyCodec_Lookup(std_encoding);
 3245|      2|            Py_XDECREF(codec_info);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3246|      2|        }
 3247|      2|        Py_DECREF(encoding_attr);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3248|      2|    }
 3249|      2|    _PyErr_Clear(tstate);  /* Not a fatal error if codec isn't available */
 3250|       |
 3251|      2|    if (PySys_SetObject("__stderr__", std) < 0) {
  ------------------
  |  Branch (3251:9): [True: 0, False: 2]
  ------------------
 3252|      0|        Py_DECREF(std);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3253|      0|        goto error;
 3254|      0|    }
 3255|      2|    if (_PySys_SetAttr(&_Py_ID(stderr), std) < 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3255:9): [True: 0, False: 2]
  ------------------
 3256|      0|        Py_DECREF(std);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3257|      0|        goto error;
 3258|      0|    }
 3259|      2|    Py_DECREF(std);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3260|      2|#endif
 3261|       |
 3262|      2|    goto done;
 3263|       |
 3264|      0|error:
 3265|      0|    res = _PyStatus_ERR("can't initialize sys standard streams");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3266|       |
 3267|      2|done:
 3268|      2|    Py_XDECREF(iomod);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3269|      2|    return res;
 3270|      0|}
pylifecycle.c:create_stdio:
 2995|      6|{
 2996|      6|    PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
 2997|      6|    const char* mode;
 2998|      6|    const char* newline;
 2999|      6|    PyObject *line_buffering, *write_through;
 3000|      6|    int buffering, isatty;
 3001|      6|    const int buffered_stdio = config->buffered_stdio;
 3002|       |
 3003|      6|    if (!_Py_IsValidFD(fd)) {
  ------------------
  |  Branch (3003:9): [True: 0, False: 6]
  ------------------
 3004|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 3005|      0|    }
 3006|       |
 3007|       |    /* stdin is always opened in buffered mode, first because it shouldn't
 3008|       |       make a difference in common use cases, second because TextIOWrapper
 3009|       |       depends on the presence of a read1() method which only exists on
 3010|       |       buffered streams.
 3011|       |    */
 3012|      6|    if (!buffered_stdio && write_mode)
  ------------------
  |  Branch (3012:9): [True: 0, False: 6]
  |  Branch (3012:28): [True: 0, False: 0]
  ------------------
 3013|      0|        buffering = 0;
 3014|      6|    else
 3015|      6|        buffering = -1;
 3016|      6|    if (write_mode)
  ------------------
  |  Branch (3016:9): [True: 4, False: 2]
  ------------------
 3017|      4|        mode = "wb";
 3018|      2|    else
 3019|      2|        mode = "rb";
 3020|      6|    buf = _PyObject_CallMethod(io, &_Py_ID(open), "isiOOOO",
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3021|      6|                               fd, mode, buffering,
 3022|      6|                               Py_None, Py_None, /* encoding, errors */
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
                                             Py_None, Py_None, /* encoding, errors */
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
 3023|      6|                               Py_None, Py_False); /* newline, closefd */
  ------------------
  |  |  616|      6|#  define Py_None (&_Py_NoneStruct)
  ------------------
                                             Py_None, Py_False); /* newline, closefd */
  ------------------
  |  |   25|      6|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3024|      6|    if (buf == NULL)
  ------------------
  |  Branch (3024:9): [True: 0, False: 6]
  ------------------
 3025|      0|        goto error;
 3026|       |
 3027|      6|    if (buffering) {
  ------------------
  |  Branch (3027:9): [True: 6, False: 0]
  ------------------
 3028|      6|        raw = PyObject_GetAttr(buf, &_Py_ID(raw));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3029|      6|        if (raw == NULL)
  ------------------
  |  Branch (3029:13): [True: 0, False: 6]
  ------------------
 3030|      0|            goto error;
 3031|      6|    }
 3032|      0|    else {
 3033|      0|        raw = Py_NewRef(buf);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3034|      0|    }
 3035|       |
 3036|       |#ifdef HAVE_WINDOWS_CONSOLE_IO
 3037|       |    /* Windows console IO is always UTF-8 encoded */
 3038|       |    PyTypeObject *winconsoleio_type = (PyTypeObject *)PyImport_ImportModuleAttr(
 3039|       |            &_Py_ID(_io), &_Py_ID(_WindowsConsoleIO));
 3040|       |    if (winconsoleio_type == NULL) {
 3041|       |        goto error;
 3042|       |    }
 3043|       |    int is_subclass = PyObject_TypeCheck(raw, winconsoleio_type);
 3044|       |    Py_DECREF(winconsoleio_type);
 3045|       |    if (is_subclass) {
 3046|       |        encoding = L"utf-8";
 3047|       |    }
 3048|       |#endif
 3049|       |
 3050|      6|    text = PyUnicode_FromString(name);
 3051|      6|    if (text == NULL || PyObject_SetAttr(raw, &_Py_ID(name), text) < 0)
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3051:9): [True: 0, False: 6]
  |  Branch (3051:25): [True: 0, False: 6]
  ------------------
 3052|      0|        goto error;
 3053|      6|    res = PyObject_CallMethodNoArgs(raw, &_Py_ID(isatty));
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3054|      6|    if (res == NULL)
  ------------------
  |  Branch (3054:9): [True: 0, False: 6]
  ------------------
 3055|      0|        goto error;
 3056|      6|    isatty = PyObject_IsTrue(res);
 3057|      6|    Py_DECREF(res);
  ------------------
  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3058|      6|    if (isatty == -1)
  ------------------
  |  Branch (3058:9): [True: 0, False: 6]
  ------------------
 3059|      0|        goto error;
 3060|      6|    if (!buffered_stdio)
  ------------------
  |  Branch (3060:9): [True: 0, False: 6]
  ------------------
 3061|      0|        write_through = Py_True;
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3062|      6|    else
 3063|      6|        write_through = Py_False;
  ------------------
  |  |   25|      6|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3064|      6|    if (buffered_stdio && (isatty || fd == fileno(stderr)))
  ------------------
  |  Branch (3064:9): [True: 6, False: 0]
  |  Branch (3064:28): [True: 0, False: 6]
  |  Branch (3064:38): [True: 2, False: 4]
  ------------------
 3065|      2|        line_buffering = Py_True;
  ------------------
  |  |   26|      2|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3066|      4|    else
 3067|      4|        line_buffering = Py_False;
  ------------------
  |  |   25|      4|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3068|       |
 3069|      6|    Py_CLEAR(raw);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3070|      6|    Py_CLEAR(text);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3071|       |
 3072|       |#ifdef MS_WINDOWS
 3073|       |    /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
 3074|       |       newlines to "\n".
 3075|       |       sys.stdout and sys.stderr: translate "\n" to "\r\n". */
 3076|       |    newline = NULL;
 3077|       |#else
 3078|       |    /* sys.stdin: split lines at "\n".
 3079|       |       sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
 3080|      6|    newline = "\n";
 3081|      6|#endif
 3082|       |
 3083|      6|    PyObject *encoding_str;
 3084|      6|    if (encoding != NULL) {
  ------------------
  |  Branch (3084:9): [True: 6, False: 0]
  ------------------
 3085|      6|        encoding_str = PyUnicode_FromWideChar(encoding, -1);
 3086|      6|    }
 3087|      0|    else {
 3088|       |        /* gh-86427: use the encoding of the device. */
 3089|      0|        encoding_str = _Py_device_encoding(fd);
 3090|      0|        if (encoding_str == Py_None) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (3090:13): [True: 0, False: 0]
  ------------------
 3091|      0|            Py_DECREF(encoding_str);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3092|      0|            encoding_str = _Py_GetLocaleEncodingObject();
 3093|      0|        }
 3094|      0|    }
 3095|      6|    if (encoding_str == NULL) {
  ------------------
  |  Branch (3095:9): [True: 0, False: 6]
  ------------------
 3096|      0|        Py_CLEAR(buf);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3097|      0|        goto error;
 3098|      0|    }
 3099|       |
 3100|      6|    PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
 3101|      6|    if (errors_str == NULL) {
  ------------------
  |  Branch (3101:9): [True: 0, False: 6]
  ------------------
 3102|      0|        Py_CLEAR(buf);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3103|      0|        Py_CLEAR(encoding_str);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3104|      0|        goto error;
 3105|      0|    }
 3106|       |
 3107|      6|    stream = _PyObject_CallMethod(io, &_Py_ID(TextIOWrapper), "OOOsOO",
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3108|      6|                                  buf, encoding_str, errors_str,
 3109|      6|                                  newline, line_buffering, write_through);
 3110|      6|    Py_CLEAR(buf);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3111|      6|    Py_CLEAR(encoding_str);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3112|      6|    Py_CLEAR(errors_str);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3113|      6|    if (stream == NULL)
  ------------------
  |  Branch (3113:9): [True: 0, False: 6]
  ------------------
 3114|      0|        goto error;
 3115|       |
 3116|      6|    if (write_mode)
  ------------------
  |  Branch (3116:9): [True: 4, False: 2]
  ------------------
 3117|      4|        mode = "w";
 3118|      2|    else
 3119|      2|        mode = "r";
 3120|      6|    text = PyUnicode_FromString(mode);
 3121|      6|    if (!text || PyObject_SetAttr(stream, &_Py_ID(mode), text) < 0)
  ------------------
  |  |  936|      6|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      6|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      6|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3121:9): [True: 0, False: 6]
  |  Branch (3121:18): [True: 0, False: 6]
  ------------------
 3122|      0|        goto error;
 3123|      6|    Py_CLEAR(text);
  ------------------
  |  |  484|      6|    do { \
  |  |  485|      6|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      6|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      6|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      6|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 6, False: 0]
  |  |  ------------------
  |  |  488|      6|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      6|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      6|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      6|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      6|        } \
  |  |  491|      6|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 6]
  |  |  ------------------
  ------------------
 3124|      6|    return stream;
 3125|       |
 3126|      0|error:
 3127|      0|    Py_XDECREF(buf);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3128|      0|    Py_XDECREF(stream);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3129|      0|    Py_XDECREF(text);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3130|      0|    Py_XDECREF(raw);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3131|       |
 3132|      0|    if (PyErr_ExceptionMatches(PyExc_OSError) && !_Py_IsValidFD(fd)) {
  ------------------
  |  Branch (3132:9): [True: 0, False: 0]
  |  Branch (3132:50): [True: 0, False: 0]
  ------------------
 3133|       |        /* Issue #24891: the file descriptor was closed after the first
 3134|       |           _Py_IsValidFD() check was called. Ignore the OSError and set the
 3135|       |           stream to None. */
 3136|      0|        PyErr_Clear();
 3137|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 3138|      0|    }
 3139|      0|    return NULL;
 3140|      0|}
pylifecycle.c:init_set_builtins_open:
 3145|      2|{
 3146|      2|    PyObject *wrapper;
 3147|      2|    PyObject *bimod = NULL;
 3148|      2|    PyStatus res = _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3149|       |
 3150|      2|    if (!(bimod = PyImport_ImportModule("builtins"))) {
  ------------------
  |  Branch (3150:9): [True: 0, False: 2]
  ------------------
 3151|      0|        goto error;
 3152|      0|    }
 3153|       |
 3154|      2|    if (!(wrapper = PyImport_ImportModuleAttrString("_io", "open"))) {
  ------------------
  |  Branch (3154:9): [True: 0, False: 2]
  ------------------
 3155|      0|        goto error;
 3156|      0|    }
 3157|       |
 3158|       |    /* Set builtins.open */
 3159|      2|    if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
  ------------------
  |  Branch (3159:9): [True: 0, False: 2]
  ------------------
 3160|      0|        Py_DECREF(wrapper);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3161|      0|        goto error;
 3162|      0|    }
 3163|      2|    Py_DECREF(wrapper);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3164|      2|    goto done;
 3165|       |
 3166|      0|error:
 3167|      0|    res = _PyStatus_ERR("can't initialize io.open");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 3168|       |
 3169|      2|done:
 3170|      2|    Py_XDECREF(bimod);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3171|      2|    return res;
 3172|      0|}
pylifecycle.c:add_main_module:
 2928|      2|{
 2929|      2|    PyObject *m, *d;
 2930|      2|    m = PyImport_AddModuleObject(&_Py_ID(__main__));
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2931|      2|    if (m == NULL)
  ------------------
  |  Branch (2931:9): [True: 0, False: 2]
  ------------------
 2932|      0|        return _PyStatus_ERR("can't create __main__ module");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2933|       |
 2934|      2|    d = PyModule_GetDict(m);
 2935|       |
 2936|      2|    int has_builtins = PyDict_ContainsString(d, "__builtins__");
 2937|      2|    if (has_builtins < 0) {
  ------------------
  |  Branch (2937:9): [True: 0, False: 2]
  ------------------
 2938|      0|        return _PyStatus_ERR("Failed to test __main__.__builtins__");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2939|      0|    }
 2940|      2|    if (!has_builtins) {
  ------------------
  |  Branch (2940:9): [True: 2, False: 0]
  ------------------
 2941|      2|        PyObject *bimod = PyImport_ImportModule("builtins");
 2942|      2|        if (bimod == NULL) {
  ------------------
  |  Branch (2942:13): [True: 0, False: 2]
  ------------------
 2943|      0|            return _PyStatus_ERR("Failed to retrieve builtins module");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2944|      0|        }
 2945|      2|        if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
  ------------------
  |  Branch (2945:13): [True: 0, False: 2]
  ------------------
 2946|      0|            return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2947|      0|        }
 2948|      2|        Py_DECREF(bimod);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2949|      2|    }
 2950|       |
 2951|       |    /* Main is a little special - BuiltinImporter is the most appropriate
 2952|       |     * initial setting for its __loader__ attribute. A more suitable value
 2953|       |     * will be set if __main__ gets further initialized later in the startup
 2954|       |     * process.
 2955|       |     */
 2956|      2|    PyObject *loader;
 2957|      2|    if (PyDict_GetItemStringRef(d, "__loader__", &loader) < 0) {
  ------------------
  |  Branch (2957:9): [True: 0, False: 2]
  ------------------
 2958|      0|        return _PyStatus_ERR("Failed to test __main__.__loader__");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2959|      0|    }
 2960|      2|    int has_loader = !(loader == NULL || loader == Py_None);
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (2960:24): [True: 0, False: 2]
  |  Branch (2960:42): [True: 2, False: 0]
  ------------------
 2961|      2|    Py_XDECREF(loader);
  ------------------
  |  |  524|      2|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2962|      2|    if (!has_loader) {
  ------------------
  |  Branch (2962:9): [True: 2, False: 0]
  ------------------
 2963|      2|        PyObject *loader = _PyImport_GetImportlibLoader(interp,
 2964|      2|                                                        "BuiltinImporter");
 2965|      2|        if (loader == NULL) {
  ------------------
  |  Branch (2965:13): [True: 0, False: 2]
  ------------------
 2966|      0|            return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2967|      0|        }
 2968|      2|        if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
  ------------------
  |  Branch (2968:13): [True: 0, False: 2]
  ------------------
 2969|      0|            return _PyStatus_ERR("Failed to initialize __main__.__loader__");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2970|      0|        }
 2971|      2|        Py_DECREF(loader);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2972|      2|    }
 2973|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2974|      2|}
pylifecycle.c:init_import_site:
 2980|      2|{
 2981|      2|    PyObject *m;
 2982|      2|    m = PyImport_ImportModule("site");
 2983|      2|    if (m == NULL) {
  ------------------
  |  Branch (2983:9): [True: 0, False: 2]
  ------------------
 2984|      0|        return _PyStatus_ERR("Failed to import the site module");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 2985|      0|    }
 2986|      2|    Py_DECREF(m);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2987|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2988|      2|}
pylifecycle.c:emit_stderr_warning_for_legacy_locale:
  240|      2|{
  241|      2|    const PyPreConfig *preconfig = &runtime->preconfig;
  242|      2|    if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) {
  ------------------
  |  Branch (242:9): [True: 0, False: 2]
  |  Branch (242:44): [True: 0, False: 0]
  ------------------
  243|      0|        PySys_FormatStderr("%s", _C_LOCALE_WARNING);
  244|      0|    }
  245|      2|}

_Py_get_387controlword:
   10|   266k|unsigned short _Py_get_387controlword(void) {
   11|   266k|    unsigned short cw;
   12|   266k|    __asm__ __volatile__ ("fnstcw %0" : "=m" (cw));
   13|   266k|    return cw;
   14|   266k|}
_Py_set_387controlword:
   16|   532k|void _Py_set_387controlword(unsigned short cw) {
   17|   532k|    __asm__ __volatile__ ("fldcw %0" : : "m" (cw));
   18|   532k|}

_PyRuntimeState_Init:
  354|      2|{
  355|       |    /* We preserve the hook across init, because there is
  356|       |       currently no public API to set it between runtime
  357|       |       initialization and interpreter initialization. */
  358|      2|    void *open_code_hook = runtime->open_code_hook;
  359|      2|    void *open_code_userdata = runtime->open_code_userdata;
  360|      2|    _Py_AuditHookEntry *audit_hook_head = runtime->audit_hooks.head;
  361|       |    // bpo-42882: Preserve next_index value if Py_Initialize()/Py_Finalize()
  362|       |    // is called multiple times.
  363|      2|    Py_ssize_t unicode_next_index = runtime->unicode_state.ids.next_index;
  364|       |
  365|      2|    if (runtime->_initialized) {
  ------------------
  |  Branch (365:9): [True: 0, False: 2]
  ------------------
  366|       |        // Py_Initialize() must be running again.
  367|       |        // Reset to _PyRuntimeState_INIT.
  368|      0|        memcpy(runtime, &initial, sizeof(*runtime));
  369|       |        // Preserve the cookie from the original runtime.
  370|      0|        memcpy(runtime->debug_offsets.cookie, _Py_Debug_Cookie, 8);
  ------------------
  |  |   12|      0|#define _Py_Debug_Cookie "xdebugpy"
  ------------------
  371|      0|        assert(!runtime->_initialized);
  ------------------
  |  Branch (371:9): [True: 0, False: 0]
  ------------------
  372|      0|    }
  373|       |
  374|      2|    PyStatus status = _PyTime_Init(&runtime->time);
  375|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  376|      0|        return status;
  377|      0|    }
  378|       |
  379|      2|    init_runtime(runtime, open_code_hook, open_code_userdata, audit_hook_head,
  380|      2|                 unicode_next_index);
  381|       |
  382|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  383|      2|}
_PyInterpreterState_Enable:
  442|      2|{
  443|      2|    struct pyinterpreters *interpreters = &runtime->interpreters;
  444|      2|    interpreters->next_id = 0;
  445|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  446|      2|}
_PyInterpreterState_New:
  683|      2|{
  684|      2|    *pinterp = NULL;
  685|       |
  686|       |    // Don't get runtime from tstate since tstate can be NULL
  687|      2|    _PyRuntimeState *runtime = &_PyRuntime;
  688|       |
  689|       |    // tstate is NULL when pycore_create_interpreter() calls
  690|       |    // _PyInterpreterState_New() to create the main interpreter.
  691|      2|    if (tstate != NULL) {
  ------------------
  |  Branch (691:9): [True: 0, False: 2]
  ------------------
  692|      0|        if (_PySys_Audit(tstate, "cpython.PyInterpreterState_New", NULL) < 0) {
  ------------------
  |  Branch (692:13): [True: 0, False: 0]
  ------------------
  693|      0|            return _PyStatus_ERR("sys.audit failed");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  694|      0|        }
  695|      0|    }
  696|       |
  697|       |    /* We completely serialize creation of multiple interpreters, since
  698|       |       it simplifies things here and blocking concurrent calls isn't a problem.
  699|       |       Regardless, we must fully block subinterpreter creation until
  700|       |       after the main interpreter is created. */
  701|      2|    HEAD_LOCK(runtime);
  ------------------
  |  |  284|      2|    PyMutex_LockFlags(&(runtime)->interpreters.mutex, _Py_LOCK_DONT_DETACH)
  ------------------
  702|       |
  703|      2|    struct pyinterpreters *interpreters = &runtime->interpreters;
  704|      2|    int64_t id = interpreters->next_id;
  705|      2|    interpreters->next_id += 1;
  706|       |
  707|       |    // Allocate the interpreter and add it to the runtime state.
  708|      2|    PyInterpreterState *interp;
  709|      2|    PyStatus status;
  710|      2|    PyInterpreterState *old_head = interpreters->head;
  711|      2|    if (old_head == NULL) {
  ------------------
  |  Branch (711:9): [True: 2, False: 0]
  ------------------
  712|       |        // We are creating the main interpreter.
  713|      2|        assert(interpreters->main == NULL);
  ------------------
  |  Branch (713:9): [True: 2, False: 0]
  ------------------
  714|      2|        assert(id == 0);
  ------------------
  |  Branch (714:9): [True: 2, False: 0]
  ------------------
  715|       |
  716|      2|        interp = &runtime->_main_interpreter;
  717|      2|        assert(interp->id == 0);
  ------------------
  |  Branch (717:9): [True: 2, False: 0]
  ------------------
  718|      2|        assert(interp->next == NULL);
  ------------------
  |  Branch (718:9): [True: 2, False: 0]
  ------------------
  719|       |
  720|      2|        interpreters->main = interp;
  721|      2|    }
  722|      0|    else {
  723|      0|        assert(interpreters->main != NULL);
  ------------------
  |  Branch (723:9): [True: 0, False: 0]
  ------------------
  724|      0|        assert(id != 0);
  ------------------
  |  Branch (724:9): [True: 0, False: 0]
  ------------------
  725|       |
  726|      0|        interp = alloc_interpreter();
  727|      0|        if (interp == NULL) {
  ------------------
  |  Branch (727:13): [True: 0, False: 0]
  ------------------
  728|      0|            status = _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  729|      0|            goto error;
  730|      0|        }
  731|       |        // Set to _PyInterpreterState_INIT.
  732|      0|        memcpy(interp, &initial._main_interpreter, sizeof(*interp));
  733|       |
  734|      0|        if (id < 0) {
  ------------------
  |  Branch (734:13): [True: 0, False: 0]
  ------------------
  735|       |            /* overflow or Py_Initialize() not called yet! */
  736|      0|            status = _PyStatus_ERR("failed to get an interpreter ID");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  737|      0|            goto error;
  738|      0|        }
  739|      0|    }
  740|      2|    interpreters->head = interp;
  741|       |
  742|      2|    long whence = _PyInterpreterState_WHENCE_UNKNOWN;
  ------------------
  |  |   17|      2|#define _PyInterpreterState_WHENCE_UNKNOWN 0
  ------------------
  743|      2|    status = init_interpreter(interp, runtime,
  744|      2|                              id, old_head, whence);
  745|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  746|      0|        goto error;
  747|      0|    }
  748|       |
  749|      2|    HEAD_UNLOCK(runtime);
  ------------------
  |  |  286|      2|    PyMutex_Unlock(&(runtime)->interpreters.mutex)
  |  |  ------------------
  |  |  |  |   70|      2|#define PyMutex_Unlock _PyMutex_Unlock
  |  |  ------------------
  ------------------
  750|       |
  751|      2|    assert(interp != NULL);
  ------------------
  |  Branch (751:5): [True: 2, False: 0]
  ------------------
  752|      2|    *pinterp = interp;
  753|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  754|       |
  755|      0|error:
  756|      0|    HEAD_UNLOCK(runtime);
  ------------------
  |  |  286|      0|    PyMutex_Unlock(&(runtime)->interpreters.mutex)
  |  |  ------------------
  |  |  |  |   70|      0|#define PyMutex_Unlock _PyMutex_Unlock
  |  |  ------------------
  ------------------
  757|       |
  758|      0|    if (interp != NULL) {
  ------------------
  |  Branch (758:9): [True: 0, False: 0]
  ------------------
  759|      0|        free_interpreter(interp);
  760|      0|    }
  761|      0|    return status;
  762|      2|}
_PyInterpreterState_SetWhence:
 1225|      2|{
 1226|      2|    assert(interp->_whence != _PyInterpreterState_WHENCE_NOTSET);
  ------------------
  |  Branch (1226:5): [True: 2, False: 0]
  ------------------
 1227|      2|    assert(check_interpreter_whence(whence) == 0);
  ------------------
  |  Branch (1227:5): [True: 2, False: 0]
  ------------------
 1228|      2|    interp->_whence = whence;
 1229|      2|}
_PyThreadState_New:
 1741|      2|{
 1742|      2|    return new_threadstate(interp, whence);
 1743|      2|}
_PyThreadState_Attach:
 2292|  56.0k|{
 2293|       |#if defined(Py_DEBUG)
 2294|       |    // This is called from PyEval_RestoreThread(). Similar
 2295|       |    // to it, we need to ensure errno doesn't change.
 2296|       |    int err = errno;
 2297|       |#endif
 2298|       |
 2299|  56.0k|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|  56.0k|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
 2300|  56.0k|    if (current_fast_get() != NULL) {
  ------------------
  |  Branch (2300:9): [True: 0, False: 56.0k]
  ------------------
 2301|      0|        Py_FatalError("non-NULL old thread state");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
 2302|      0|    }
 2303|  56.0k|    _PyThreadStateImpl *_tstate = (_PyThreadStateImpl *)tstate;
 2304|  56.0k|    if (_tstate->c_stack_hard_limit == 0) {
  ------------------
  |  Branch (2304:9): [True: 2, False: 56.0k]
  ------------------
 2305|      2|        _Py_InitializeRecursionLimits(tstate);
 2306|      2|    }
 2307|       |
 2308|  56.0k|    while (1) {
  ------------------
  |  Branch (2308:12): [True: 56.0k, Folded]
  ------------------
 2309|  56.0k|        _PyEval_AcquireLock(tstate);
 2310|       |
 2311|       |        // XXX assert(tstate_is_alive(tstate));
 2312|  56.0k|        current_fast_set(&_PyRuntime, tstate);
 2313|  56.0k|        if (!tstate_try_attach(tstate)) {
  ------------------
  |  Branch (2313:13): [True: 0, False: 56.0k]
  ------------------
 2314|      0|            tstate_wait_attach(tstate);
 2315|      0|        }
 2316|  56.0k|        tstate_activate(tstate);
 2317|       |
 2318|       |#ifdef Py_GIL_DISABLED
 2319|       |        if (_PyEval_IsGILEnabled(tstate) && !tstate->holds_gil) {
 2320|       |            // The GIL was enabled between our call to _PyEval_AcquireLock()
 2321|       |            // and when we attached (the GIL can't go from enabled to disabled
 2322|       |            // here because only a thread holding the GIL can disable
 2323|       |            // it). Detach and try again.
 2324|       |            tstate_set_detached(tstate, _Py_THREAD_DETACHED);
 2325|       |            tstate_deactivate(tstate);
 2326|       |            current_fast_clear(&_PyRuntime);
 2327|       |            continue;
 2328|       |        }
 2329|       |        _Py_qsbr_attach(((_PyThreadStateImpl *)tstate)->qsbr);
 2330|       |#endif
 2331|  56.0k|        break;
 2332|  56.0k|    }
 2333|       |
 2334|       |    // Resume previous critical section. This acquires the lock(s) from the
 2335|       |    // top-most critical section.
 2336|  56.0k|    if (tstate->critical_section != 0) {
  ------------------
  |  Branch (2336:9): [True: 0, False: 56.0k]
  ------------------
 2337|      0|        _PyCriticalSection_Resume(tstate);
 2338|      0|    }
 2339|       |
 2340|       |#ifdef Py_STATS
 2341|       |    _PyStats_Attach((_PyThreadStateImpl *)tstate);
 2342|       |#endif
 2343|       |
 2344|       |#if defined(Py_DEBUG)
 2345|       |    errno = err;
 2346|       |#endif
 2347|  56.0k|}
_PyThreadState_Detach:
 2369|  56.0k|{
 2370|  56.0k|    detach_thread(tstate, _Py_THREAD_DETACHED);
  ------------------
  |  |   44|  56.0k|#define _Py_THREAD_DETACHED             0
  ------------------
 2371|  56.0k|}
_PyEval_StopTheWorld:
 2615|    122|{
 2616|       |#ifdef Py_GIL_DISABLED
 2617|       |    stop_the_world(&interp->stoptheworld);
 2618|       |#endif
 2619|    122|}
_PyEval_StartTheWorld:
 2623|    122|{
 2624|       |#ifdef Py_GIL_DISABLED
 2625|       |    start_the_world(&interp->stoptheworld);
 2626|       |#endif
 2627|    122|}
PyThreadState_GetUnchecked:
 2687|     24|{
 2688|     24|    return current_fast_get();
 2689|     24|}
PyThreadState_Get:
 2694|  76.2k|{
 2695|  76.2k|    PyThreadState *tstate = current_fast_get();
 2696|  76.2k|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|  76.2k|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
 2697|  76.2k|    return tstate;
 2698|  76.2k|}
_PyThreadState_Bind:
 2722|      2|{
 2723|       |    // gh-104690: If Python is being finalized and PyInterpreterState_Delete()
 2724|       |    // was called, tstate becomes a dangling pointer.
 2725|      2|    assert(_PyThreadState_CheckConsistency(tstate));
  ------------------
  |  Branch (2725:5): [True: 2, False: 0]
  ------------------
 2726|       |
 2727|      2|    bind_tstate(tstate);
 2728|       |    // This makes sure there's a gilstate tstate bound
 2729|       |    // as soon as possible.
 2730|      2|    if (gilstate_get() == NULL) {
  ------------------
  |  Branch (2730:9): [True: 2, False: 0]
  ------------------
 2731|      2|        bind_gilstate_tstate(tstate);
 2732|      2|    }
 2733|      2|}
_PyGILState_Init:
 2921|      2|{
 2922|      2|    if (!_Py_IsMainInterpreter(interp)) {
  ------------------
  |  Branch (2922:9): [True: 0, False: 2]
  ------------------
 2923|       |        /* Currently, PyGILState is shared by all interpreters. The main
 2924|       |         * interpreter is responsible to initialize it. */
 2925|      0|        return _PyStatus_OK();
  ------------------
  |  |   24|      0|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2926|      0|    }
 2927|      2|    _PyRuntimeState *runtime = interp->runtime;
 2928|      2|    assert(gilstate_get() == NULL);
  ------------------
  |  Branch (2928:5): [True: 2, False: 0]
  ------------------
 2929|      2|    assert(runtime->gilstate.autoInterpreterState == NULL);
  ------------------
  |  Branch (2929:5): [True: 2, False: 0]
  ------------------
 2930|      2|    runtime->gilstate.autoInterpreterState = interp;
 2931|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 2932|      2|}
_PyGILState_SetTstate:
 2949|      2|{
 2950|       |    /* must init with valid states */
 2951|      2|    assert(tstate != NULL);
  ------------------
  |  Branch (2951:5): [True: 2, False: 0]
  ------------------
 2952|      2|    assert(tstate->interp != NULL);
  ------------------
  |  Branch (2952:5): [True: 2, False: 0]
  ------------------
 2953|       |
 2954|      2|    if (!_Py_IsMainInterpreter(tstate->interp)) {
  ------------------
  |  Branch (2954:9): [True: 0, False: 2]
  ------------------
 2955|       |        /* Currently, PyGILState is shared by all interpreters. The main
 2956|       |         * interpreter is responsible to initialize it. */
 2957|      0|        return;
 2958|      0|    }
 2959|       |
 2960|      2|#ifndef NDEBUG
 2961|      2|    _PyRuntimeState *runtime = tstate->interp->runtime;
 2962|       |
 2963|      2|    assert(runtime->gilstate.autoInterpreterState == tstate->interp);
  ------------------
  |  Branch (2963:5): [True: 2, False: 0]
  ------------------
 2964|      2|    assert(gilstate_get() == tstate);
  ------------------
  |  Branch (2964:5): [True: 2, False: 0]
  ------------------
 2965|      2|    assert(tstate->gilstate_counter == 1);
  ------------------
  |  Branch (2965:5): [True: 2, False: 0]
  ------------------
 2966|      2|#endif
 2967|      2|}
_PyInterpreterState_IsSpecializationEnabled:
 3165|    453|{
 3166|    453|    return interp->eval_frame == NULL
  ------------------
  |  Branch (3166:12): [True: 453, False: 0]
  ------------------
 3167|      0|        || interp->eval_frame_allow_specialization;
  ------------------
  |  Branch (3167:12): [True: 0, False: 0]
  ------------------
 3168|    453|}
_PyInterpreterState_GetConfig:
 3173|  1.59M|{
 3174|  1.59M|    return &interp->config;
 3175|  1.59M|}
_Py_GetConfig:
 3180|  59.9k|{
 3181|  59.9k|    PyThreadState *tstate = current_fast_get();
 3182|  59.9k|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|  59.9k|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
 3183|  59.9k|    return _PyInterpreterState_GetConfig(tstate->interp);
 3184|  59.9k|}
_PyThreadState_PushFrame:
 3234|   201k|{
 3235|   201k|    assert(size < INT_MAX/sizeof(PyObject *));
  ------------------
  |  Branch (3235:5): [True: 201k, False: 0]
  ------------------
 3236|   201k|    if (_PyThreadState_HasStackSpace(tstate, (int)size)) {
  ------------------
  |  Branch (3236:9): [True: 201k, False: 2]
  ------------------
 3237|   201k|        _PyInterpreterFrame *res = (_PyInterpreterFrame *)tstate->datastack_top;
 3238|   201k|        tstate->datastack_top += size;
 3239|   201k|        return res;
 3240|   201k|    }
 3241|      2|    return (_PyInterpreterFrame *)push_chunk(tstate, (int)size);
 3242|   201k|}
_PyThreadState_PopFrame:
 3246|  6.66M|{
 3247|  6.66M|    assert(tstate->datastack_chunk);
  ------------------
  |  Branch (3247:5): [True: 6.66M, False: 0]
  ------------------
 3248|  6.66M|    PyObject **base = (PyObject **)frame;
 3249|  6.66M|    if (base == &tstate->datastack_chunk->data[0]) {
  ------------------
  |  Branch (3249:9): [True: 0, False: 6.66M]
  ------------------
 3250|      0|        _PyStackChunk *chunk = tstate->datastack_chunk;
 3251|      0|        _PyStackChunk *previous = chunk->previous;
 3252|      0|        _PyStackChunk *cached = tstate->datastack_cached_chunk;
 3253|       |        // push_chunk ensures that the root chunk is never popped:
 3254|      0|        assert(previous);
  ------------------
  |  Branch (3254:9): [True: 0, False: 0]
  ------------------
 3255|      0|        tstate->datastack_top = &previous->data[previous->top];
 3256|      0|        tstate->datastack_chunk = previous;
 3257|      0|        tstate->datastack_limit = (PyObject **)(((char *)previous) + previous->size);
 3258|      0|        chunk->previous = NULL;
 3259|      0|        if (cached != NULL) {
  ------------------
  |  Branch (3259:13): [True: 0, False: 0]
  ------------------
 3260|      0|            _PyObject_VirtualFree(cached, cached->size);
 3261|      0|        }
 3262|      0|        tstate->datastack_cached_chunk = chunk;
 3263|      0|    }
 3264|  6.66M|    else {
 3265|  6.66M|        assert(tstate->datastack_top);
  ------------------
  |  Branch (3265:9): [True: 6.66M, False: 0]
  ------------------
 3266|  6.66M|        assert(tstate->datastack_top >= base);
  ------------------
  |  Branch (3266:9): [True: 6.66M, False: 0]
  ------------------
 3267|  6.66M|        tstate->datastack_top = base;
 3268|  6.66M|    }
 3269|  6.66M|}
_PyThreadState_CheckConsistency:
 3282|   112k|{
 3283|   112k|    assert(!_PyMem_IsPtrFreed(tstate));
  ------------------
  |  Branch (3283:5): [True: 112k, False: 0]
  ------------------
 3284|   112k|    assert(!_PyMem_IsPtrFreed(tstate->interp));
  ------------------
  |  Branch (3284:5): [True: 112k, False: 0]
  ------------------
 3285|   112k|    return 1;
 3286|   112k|}
_PyThreadState_MustExit:
 3300|   112k|{
 3301|   112k|    int state = _Py_atomic_load_int_relaxed(&tstate->state);
 3302|   112k|    return state == _Py_THREAD_SHUTTING_DOWN;
  ------------------
  |  |   47|   112k|#define _Py_THREAD_SHUTTING_DOWN        3
  ------------------
 3303|   112k|}
_Py_IsMainThread:
 3393|   917k|{
 3394|   917k|    unsigned long thread = PyThread_get_thread_ident();
 3395|   917k|    return (thread == _PyRuntime.main_thread);
 3396|   917k|}
_PyInterpreterState_Main:
 3401|   862k|{
 3402|   862k|    return _PyRuntime.interpreters.main;
 3403|   862k|}
pystate.c:current_fast_get:
   86|   248k|{
   87|   248k|    return _Py_tss_tstate;
   88|   248k|}
pystate.c:init_runtime:
  332|      2|{
  333|      2|    assert(!runtime->preinitializing);
  ------------------
  |  Branch (333:5): [True: 2, False: 0]
  ------------------
  334|      2|    assert(!runtime->preinitialized);
  ------------------
  |  Branch (334:5): [True: 2, False: 0]
  ------------------
  335|      2|    assert(!_PyRuntimeState_GetCoreInitialized(runtime));
  ------------------
  |  Branch (335:5): [True: 2, False: 0]
  ------------------
  336|      2|    assert(!_PyRuntimeState_GetInitialized(runtime));
  ------------------
  |  Branch (336:5): [True: 2, False: 0]
  ------------------
  337|      2|    assert(!runtime->_initialized);
  ------------------
  |  Branch (337:5): [True: 2, False: 0]
  ------------------
  338|       |
  339|      2|    runtime->open_code_hook = open_code_hook;
  340|      2|    runtime->open_code_userdata = open_code_userdata;
  341|      2|    runtime->audit_hooks.head = audit_hook_head;
  342|       |
  343|      2|    PyPreConfig_InitPythonConfig(&runtime->preconfig);
  344|       |
  345|       |    // Set it to the ID of the main thread of the main interpreter.
  346|      2|    runtime->main_thread = PyThread_get_thread_ident();
  347|       |
  348|      2|    runtime->unicode_state.ids.next_index = unicode_next_index;
  349|      2|    runtime->_initialized = 1;
  350|      2|}
pystate.c:init_interpreter:
  545|      2|{
  546|      2|    if (interp->_initialized) {
  ------------------
  |  Branch (546:9): [True: 0, False: 2]
  ------------------
  547|      0|        return _PyStatus_ERR("interpreter already initialized");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
  548|      0|    }
  549|       |
  550|      2|    assert(interp->_whence == _PyInterpreterState_WHENCE_NOTSET);
  ------------------
  |  Branch (550:5): [True: 2, False: 0]
  ------------------
  551|      2|    assert(check_interpreter_whence(whence) == 0);
  ------------------
  |  Branch (551:5): [True: 2, False: 0]
  ------------------
  552|      2|    interp->_whence = whence;
  553|       |
  554|      2|    assert(runtime != NULL);
  ------------------
  |  Branch (554:5): [True: 2, False: 0]
  ------------------
  555|      2|    interp->runtime = runtime;
  556|       |
  557|      2|    assert(id > 0 || (id == 0 && interp == runtime->interpreters.main));
  ------------------
  |  Branch (557:5): [True: 2, False: 0]
  |  Branch (557:5): [True: 2, False: 0]
  |  Branch (557:5): [True: 0, False: 2]
  ------------------
  558|      2|    interp->id = id;
  559|       |
  560|      2|    interp->id_refcount = 0;
  561|       |
  562|      2|    assert(runtime->interpreters.head == interp);
  ------------------
  |  Branch (562:5): [True: 2, False: 0]
  ------------------
  563|      2|    assert(next != NULL || (interp == runtime->interpreters.main));
  ------------------
  |  Branch (563:5): [True: 0, False: 2]
  |  Branch (563:5): [True: 2, False: 0]
  ------------------
  564|      2|    interp->next = next;
  565|       |
  566|      2|    interp->threads.preallocated = &interp->_initial_thread;
  567|       |
  568|       |    // We would call _PyObject_InitState() at this point
  569|       |    // if interp->feature_flags were alredy set.
  570|       |
  571|      2|    _PyEval_InitState(interp);
  572|      2|    _PyGC_InitState(&interp->gc);
  573|      2|    PyConfig_InitPythonConfig(&interp->config);
  574|       |#ifdef Py_GIL_DISABLED
  575|       |    _Py_brc_init_state(interp);
  576|       |#endif
  577|       |
  578|      2|    llist_init(&interp->mem_free_queue.head);
  579|      2|    llist_init(&interp->asyncio_tasks_head);
  580|      2|    interp->asyncio_tasks_lock = (PyMutex){0};
  581|     34|    for (int i = 0; i < _PY_MONITORING_UNGROUPED_EVENTS; i++) {
  ------------------
  |  |   75|     34|#define _PY_MONITORING_UNGROUPED_EVENTS 16
  ------------------
  |  Branch (581:21): [True: 32, False: 2]
  ------------------
  582|     32|        interp->monitors.tools[i] = 0;
  583|     32|    }
  584|     18|    for (int t = 0; t < PY_MONITORING_TOOL_IDS; t++) {
  ------------------
  |  |   72|     18|#define  PY_MONITORING_TOOL_IDS 8
  ------------------
  |  Branch (584:21): [True: 16, False: 2]
  ------------------
  585|    320|        for (int e = 0; e < _PY_MONITORING_EVENTS; e++) {
  ------------------
  |  |   77|    320|#define _PY_MONITORING_EVENTS 19
  ------------------
  |  Branch (585:25): [True: 304, False: 16]
  ------------------
  586|    304|            interp->monitoring_callables[t][e] = NULL;
  587|       |
  588|    304|        }
  589|     16|        interp->monitoring_tool_versions[t] = 0;
  590|     16|    }
  591|      2|    interp->_code_object_generation = 0;
  592|      2|    interp->jit = false;
  593|      2|    interp->compiling = false;
  594|      2|    interp->executor_blooms = NULL;
  595|      2|    interp->executor_ptrs = NULL;
  596|      2|    interp->executor_count = 0;
  597|      2|    interp->executor_capacity = 0;
  598|      2|    interp->executor_deletion_list_head = NULL;
  599|      2|    interp->executor_creation_counter = JIT_CLEANUP_THRESHOLD;
  ------------------
  |  |  308|      2|#define JIT_CLEANUP_THRESHOLD 1000
  ------------------
  600|       |
  601|       |    // Initialize optimization configuration from environment variables
  602|       |    // PYTHON_JIT_STRESS sets aggressive defaults for testing, but can be overridden
  603|      2|    uint16_t jump_default = JUMP_BACKWARD_INITIAL_VALUE;
  ------------------
  |  |  134|      2|#define JUMP_BACKWARD_INITIAL_VALUE 4000
  ------------------
  604|      2|    uint16_t resume_default = RESUME_INITIAL_VALUE;
  ------------------
  |  |  148|      2|#define RESUME_INITIAL_VALUE 8190
  ------------------
  605|      2|    uint16_t side_exit_default = SIDE_EXIT_INITIAL_VALUE;
  ------------------
  |  |  162|      2|#define SIDE_EXIT_INITIAL_VALUE 4000
  ------------------
  606|       |
  607|      2|    if (is_env_enabled("PYTHON_JIT_STRESS")) {
  ------------------
  |  Branch (607:9): [True: 0, False: 2]
  ------------------
  608|      0|        jump_default = 63;
  609|      0|        side_exit_default = 63;
  610|      0|        resume_default = 127;
  611|      0|    }
  612|       |
  613|      2|    init_policy(&interp->opt_config.jump_backward_initial_value,
  614|      2|                "PYTHON_JIT_JUMP_BACKWARD_INITIAL_VALUE",
  615|      2|                jump_default, 1, MAX_VALUE);
  ------------------
  |  |   41|      2|#define MAX_VALUE 0x1FFF
  ------------------
  616|      2|    init_policy(&interp->opt_config.jump_backward_initial_backoff,
  617|      2|                "PYTHON_JIT_JUMP_BACKWARD_INITIAL_BACKOFF",
  618|      2|                JUMP_BACKWARD_INITIAL_BACKOFF, 0, MAX_BACKOFF);
  ------------------
  |  |  135|      2|#define JUMP_BACKWARD_INITIAL_BACKOFF 6
  ------------------
                              JUMP_BACKWARD_INITIAL_BACKOFF, 0, MAX_BACKOFF);
  ------------------
  |  |   39|      2|#define MAX_BACKOFF 6
  ------------------
  619|      2|    init_policy(&interp->opt_config.resume_initial_value,
  620|      2|                "PYTHON_JIT_RESUME_INITIAL_VALUE",
  621|      2|                resume_default, 1, MAX_VALUE);
  ------------------
  |  |   41|      2|#define MAX_VALUE 0x1FFF
  ------------------
  622|      2|    init_policy(&interp->opt_config.resume_initial_backoff,
  623|      2|                "PYTHON_JIT_RESUME_INITIAL_BACKOFF",
  624|      2|                RESUME_INITIAL_BACKOFF, 0, MAX_BACKOFF);
  ------------------
  |  |  149|      2|#define RESUME_INITIAL_BACKOFF 6
  ------------------
                              RESUME_INITIAL_BACKOFF, 0, MAX_BACKOFF);
  ------------------
  |  |   39|      2|#define MAX_BACKOFF 6
  ------------------
  625|      2|    init_policy(&interp->opt_config.side_exit_initial_value,
  626|      2|                "PYTHON_JIT_SIDE_EXIT_INITIAL_VALUE",
  627|      2|                side_exit_default, 1, MAX_VALUE);
  ------------------
  |  |   41|      2|#define MAX_VALUE 0x1FFF
  ------------------
  628|      2|    init_policy(&interp->opt_config.side_exit_initial_backoff,
  629|      2|                "PYTHON_JIT_SIDE_EXIT_INITIAL_BACKOFF",
  630|      2|                SIDE_EXIT_INITIAL_BACKOFF, 0, MAX_BACKOFF);
  ------------------
  |  |  163|      2|#define SIDE_EXIT_INITIAL_BACKOFF 6
  ------------------
                              SIDE_EXIT_INITIAL_BACKOFF, 0, MAX_BACKOFF);
  ------------------
  |  |   39|      2|#define MAX_BACKOFF 6
  ------------------
  631|       |
  632|       |    // Trace fitness configuration
  633|      2|    init_policy(&interp->opt_config.fitness_initial,
  634|      2|                "PYTHON_JIT_FITNESS_INITIAL",
  635|      2|                FITNESS_INITIAL, EXIT_QUALITY_CLOSE_LOOP, FITNESS_INITIAL);
  ------------------
  |  |   41|      2|#define FITNESS_INITIAL 2500
  ------------------
                              FITNESS_INITIAL, EXIT_QUALITY_CLOSE_LOOP, FITNESS_INITIAL);
  ------------------
  |  |   39|      2|#define EXIT_QUALITY_CLOSE_LOOP      (FITNESS_INITIAL - AVG_SLOTS_PER_INSTRUCTION*4)
  |  |  ------------------
  |  |  |  |   41|      2|#define FITNESS_INITIAL 2500
  |  |  ------------------
  |  |               #define EXIT_QUALITY_CLOSE_LOOP      (FITNESS_INITIAL - AVG_SLOTS_PER_INSTRUCTION*4)
  |  |  ------------------
  |  |  |  |   46|      2|#define AVG_SLOTS_PER_INSTRUCTION  6
  |  |  ------------------
  ------------------
                              FITNESS_INITIAL, EXIT_QUALITY_CLOSE_LOOP, FITNESS_INITIAL);
  ------------------
  |  |   41|      2|#define FITNESS_INITIAL 2500
  ------------------
  636|       |
  637|      2|    interp->opt_config.specialization_enabled = !is_env_enabled("PYTHON_SPECIALIZATION_OFF");
  638|      2|    interp->opt_config.uops_optimize_enabled = !is_env_disabled("PYTHON_UOPS_OPTIMIZE");
  639|      2|    if (interp != &runtime->_main_interpreter) {
  ------------------
  |  Branch (639:9): [True: 0, False: 2]
  ------------------
  640|       |        /* Fix the self-referential, statically initialized fields. */
  641|      0|        interp->dtoa = (struct _dtoa_state)_dtoa_state_INIT(interp);
  ------------------
  |  |   22|      0|    { \
  |  |   23|      0|        .preallocated_next = (INTERP)->dtoa.preallocated, \
  |  |   24|      0|    }
  ------------------
  642|      0|    }
  643|       |#if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG)
  644|       |    interp->next_stackref = INITIAL_STACKREF_INDEX;
  645|       |    _Py_hashtable_allocator_t alloc = {
  646|       |        .malloc = malloc,
  647|       |        .free = free,
  648|       |    };
  649|       |    interp->open_stackrefs_table = _Py_hashtable_new_full(
  650|       |        _Py_hashtable_hash_ptr,
  651|       |        _Py_hashtable_compare_direct,
  652|       |        NULL,
  653|       |        NULL,
  654|       |        &alloc
  655|       |    );
  656|       |    if (interp->open_stackrefs_table == NULL) {
  657|       |        return _PyStatus_NO_MEMORY();
  658|       |    }
  659|       |#  ifdef Py_STACKREF_CLOSE_DEBUG
  660|       |    interp->closed_stackrefs_table = _Py_hashtable_new_full(
  661|       |        _Py_hashtable_hash_ptr,
  662|       |        _Py_hashtable_compare_direct,
  663|       |        NULL,
  664|       |        NULL,
  665|       |        &alloc
  666|       |    );
  667|       |    if (interp->closed_stackrefs_table == NULL) {
  668|       |        return _PyStatus_NO_MEMORY();
  669|       |    }
  670|       |#  endif
  671|       |    _Py_stackref_associate(interp, Py_None, PyStackRef_None);
  672|       |    _Py_stackref_associate(interp, Py_False, PyStackRef_False);
  673|       |    _Py_stackref_associate(interp, Py_True, PyStackRef_True);
  674|       |#endif
  675|       |
  676|      2|    interp->_initialized = 1;
  677|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  678|      2|}
pystate.c:is_env_enabled:
  514|      4|{
  515|      4|    char *env = Py_GETENV(env_name);
  516|      4|    return env && *env != '\0' && *env != '0';
  ------------------
  |  Branch (516:12): [True: 0, False: 4]
  |  Branch (516:19): [True: 0, False: 0]
  |  Branch (516:35): [True: 0, False: 0]
  ------------------
  517|      4|}
pystate.c:init_policy:
  529|     14|{
  530|     14|    *target = default_value;
  531|     14|    char *env = Py_GETENV(env_name);
  532|     14|    if (env && *env != '\0') {
  ------------------
  |  Branch (532:9): [True: 0, False: 14]
  |  Branch (532:16): [True: 0, False: 0]
  ------------------
  533|      0|        long value = atol(env);
  534|      0|        if (value >= min_value && value <= max_value) {
  ------------------
  |  Branch (534:13): [True: 0, False: 0]
  |  Branch (534:35): [True: 0, False: 0]
  ------------------
  535|      0|            *target = (uint16_t)value;
  536|      0|        }
  537|      0|    }
  538|     14|}
pystate.c:is_env_disabled:
  521|      2|{
  522|      2|    char *env = Py_GETENV(env_name);
  523|      2|    return env != NULL && *env == '0';
  ------------------
  |  Branch (523:12): [True: 0, False: 2]
  |  Branch (523:27): [True: 0, False: 0]
  ------------------
  524|      2|}
pystate.c:check_interpreter_whence:
 1205|      4|{
 1206|      4|    if(whence < 0) {
  ------------------
  |  Branch (1206:8): [True: 0, False: 4]
  ------------------
 1207|      0|        return -1;
 1208|      0|    }
 1209|      4|    if (whence > _PyInterpreterState_WHENCE_MAX) {
  ------------------
  |  |   23|      4|#define _PyInterpreterState_WHENCE_MAX 5
  ------------------
  |  Branch (1209:9): [True: 0, False: 4]
  ------------------
 1210|      0|        return -1;
 1211|      0|    }
 1212|      4|    return 0;
 1213|      4|}
pystate.c:new_threadstate:
 1665|      2|{
 1666|       |    // Allocate the thread state.
 1667|      2|    _PyThreadStateImpl *tstate = alloc_threadstate(interp);
 1668|      2|    if (tstate == NULL) {
  ------------------
  |  Branch (1668:9): [True: 0, False: 2]
  ------------------
 1669|      0|        return NULL;
 1670|      0|    }
 1671|       |
 1672|       |#ifdef Py_STATS
 1673|       |    // The PyStats structure is quite large and is allocated separated from
 1674|       |    // tstate.
 1675|       |    if (!_PyStats_ThreadInit(interp, tstate)) {
 1676|       |        free_threadstate(tstate);
 1677|       |        return NULL;
 1678|       |    }
 1679|       |#endif
 1680|       |#ifdef Py_GIL_DISABLED
 1681|       |    int32_t tlbc_idx = _Py_ReserveTLBCIndex(interp);
 1682|       |    if (tlbc_idx < 0) {
 1683|       |        free_threadstate(tstate);
 1684|       |        return NULL;
 1685|       |    }
 1686|       |    Py_ssize_t qsbr_idx = _Py_qsbr_reserve(interp);
 1687|       |    if (qsbr_idx < 0) {
 1688|       |        _Py_UnreserveTLBCIndex(interp, tlbc_idx);
 1689|       |        free_threadstate(tstate);
 1690|       |        return NULL;
 1691|       |    }
 1692|       |#endif
 1693|       |
 1694|       |    /* We serialize concurrent creation to protect global state. */
 1695|      2|    HEAD_LOCK(interp->runtime);
  ------------------
  |  |  284|      2|    PyMutex_LockFlags(&(runtime)->interpreters.mutex, _Py_LOCK_DONT_DETACH)
  ------------------
 1696|       |
 1697|       |    // Initialize the new thread state.
 1698|      2|    interp->threads.next_unique_id += 1;
 1699|      2|    uint64_t id = interp->threads.next_unique_id;
 1700|      2|    init_threadstate(tstate, interp, id, whence);
 1701|       |
 1702|       |    // Add the new thread state to the interpreter.
 1703|      2|    PyThreadState *old_head = interp->threads.head;
 1704|      2|    add_threadstate(interp, (PyThreadState *)tstate, old_head);
 1705|       |
 1706|      2|    HEAD_UNLOCK(interp->runtime);
  ------------------
  |  |  286|      2|    PyMutex_Unlock(&(runtime)->interpreters.mutex)
  |  |  ------------------
  |  |  |  |   70|      2|#define PyMutex_Unlock _PyMutex_Unlock
  |  |  ------------------
  ------------------
 1707|       |
 1708|       |#ifdef Py_GIL_DISABLED
 1709|       |    // Must be called with lock unlocked to avoid lock ordering deadlocks.
 1710|       |    _Py_qsbr_register(tstate, interp, qsbr_idx);
 1711|       |    tstate->tlbc_index = tlbc_idx;
 1712|       |#endif
 1713|       |
 1714|      2|    return (PyThreadState *)tstate;
 1715|      2|}
pystate.c:alloc_threadstate:
 1497|      2|{
 1498|      2|    _PyThreadStateImpl *tstate;
 1499|       |
 1500|       |    // Try the preallocated tstate first.
 1501|      2|    tstate = _Py_atomic_exchange_ptr(&interp->threads.preallocated, NULL);
 1502|       |
 1503|       |    // Fall back to the allocator.
 1504|      2|    if (tstate == NULL) {
  ------------------
  |  Branch (1504:9): [True: 0, False: 2]
  ------------------
 1505|      0|        tstate = PyMem_RawCalloc(1, sizeof(_PyThreadStateImpl));
 1506|      0|        if (tstate == NULL) {
  ------------------
  |  Branch (1506:13): [True: 0, False: 0]
  ------------------
 1507|      0|            return NULL;
 1508|      0|        }
 1509|      0|        reset_threadstate(tstate);
 1510|      0|    }
 1511|       |    // Set the interpreter before any later initialization can fail.
 1512|      2|    tstate->base.interp = interp;
 1513|      2|    return tstate;
 1514|      2|}
pystate.c:init_threadstate:
 1556|      2|{
 1557|      2|    PyThreadState *tstate = (PyThreadState *)_tstate;
 1558|      2|    if (tstate->_status.initialized) {
  ------------------
  |  Branch (1558:9): [True: 0, False: 2]
  ------------------
 1559|      0|        Py_FatalError("thread state already initialized");
  ------------------
  |  |  133|      0|#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, (message))
  ------------------
 1560|      0|    }
 1561|       |
 1562|      2|    assert(interp != NULL);
  ------------------
  |  Branch (1562:5): [True: 2, False: 0]
  ------------------
 1563|      2|    tstate->interp = interp;
 1564|      2|    tstate->eval_breaker =
 1565|      2|        _Py_atomic_load_uintptr_relaxed(&interp->ceval.instrumentation_version);
 1566|       |
 1567|       |    // next/prev are set in add_threadstate().
 1568|      2|    assert(tstate->next == NULL);
  ------------------
  |  Branch (1568:5): [True: 2, False: 0]
  ------------------
 1569|      2|    assert(tstate->prev == NULL);
  ------------------
  |  Branch (1569:5): [True: 2, False: 0]
  ------------------
 1570|       |
 1571|      2|    assert(tstate->_whence == _PyThreadState_WHENCE_NOTSET);
  ------------------
  |  Branch (1571:5): [True: 2, False: 0]
  ------------------
 1572|      2|    assert(whence >= 0 && whence <= _PyThreadState_WHENCE_THREADING_DAEMON);
  ------------------
  |  Branch (1572:5): [True: 2, False: 0]
  |  Branch (1572:5): [True: 2, False: 0]
  ------------------
 1573|      2|    tstate->_whence = whence;
 1574|       |
 1575|      2|    assert(id > 0);
  ------------------
  |  Branch (1575:5): [True: 2, False: 0]
  ------------------
 1576|      2|    tstate->id = id;
 1577|       |
 1578|       |    // thread_id and native_thread_id are set in bind_tstate().
 1579|       |
 1580|      2|    tstate->py_recursion_limit = interp->ceval.recursion_limit;
 1581|      2|    tstate->py_recursion_remaining = interp->ceval.recursion_limit;
 1582|      2|    tstate->exc_info = &tstate->exc_state;
 1583|       |
 1584|       |    // PyGILState_Release must not try to delete this thread state.
 1585|       |    // This is cleared when PyGILState_Ensure() creates the thread state.
 1586|      2|    tstate->gilstate_counter = 1;
 1587|       |
 1588|       |    // Initialize the embedded base frame - sentinel at the bottom of the frame stack
 1589|      2|    _tstate->base_frame.previous = NULL;
 1590|      2|    _tstate->base_frame.f_executable = PyStackRef_None;
  ------------------
  |  |  485|      2|#define PyStackRef_None ((_PyStackRef){.bits = ((uintptr_t)&_Py_NoneStruct) | Py_TAG_REFCNT })
  |  |  ------------------
  |  |  |  |   55|      2|#define Py_TAG_REFCNT 1
  |  |  ------------------
  ------------------
 1591|      2|    _tstate->base_frame.f_funcobj = PyStackRef_NULL;
 1592|      2|    _tstate->base_frame.f_globals = NULL;
 1593|      2|    _tstate->base_frame.f_builtins = NULL;
 1594|      2|    _tstate->base_frame.f_locals = NULL;
 1595|      2|    _tstate->base_frame.frame_obj = NULL;
 1596|      2|    _tstate->base_frame.instr_ptr = NULL;
 1597|      2|    _tstate->base_frame.stackpointer = _tstate->base_frame.localsplus;
 1598|      2|    _tstate->base_frame.return_offset = 0;
 1599|      2|    _tstate->base_frame.owner = FRAME_OWNED_BY_INTERPRETER;
 1600|      2|    _tstate->base_frame.visited = 0;
 1601|       |#ifdef Py_DEBUG
 1602|       |    _tstate->base_frame.lltrace = 0;
 1603|       |#endif
 1604|       |#ifdef Py_GIL_DISABLED
 1605|       |    _tstate->base_frame.tlbc_index = 0;
 1606|       |#endif
 1607|      2|    _tstate->base_frame.localsplus[0] = PyStackRef_NULL;
 1608|       |
 1609|       |    // current_frame starts pointing to the base frame
 1610|      2|    tstate->current_frame = &_tstate->base_frame;
 1611|       |    // base_frame pointer for profilers to validate stack unwinding
 1612|      2|    tstate->base_frame = &_tstate->base_frame;
 1613|      2|    tstate->last_profiled_frame = NULL;
 1614|      2|    tstate->last_profiled_frame_seq = 0;
 1615|      2|    tstate->datastack_chunk = NULL;
 1616|      2|    tstate->datastack_top = NULL;
 1617|      2|    tstate->datastack_limit = NULL;
 1618|      2|    tstate->datastack_cached_chunk = NULL;
 1619|      2|    tstate->what_event = -1;
 1620|      2|    tstate->current_executor = NULL;
 1621|      2|    tstate->jit_exit = NULL;
 1622|      2|    tstate->dict_global_version = 0;
 1623|       |
 1624|      2|    _tstate->c_stack_soft_limit = UINTPTR_MAX;
 1625|      2|    _tstate->c_stack_top = 0;
 1626|      2|    _tstate->c_stack_hard_limit = 0;
 1627|       |
 1628|      2|    _tstate->c_stack_init_base = 0;
 1629|      2|    _tstate->c_stack_init_top = 0;
 1630|       |
 1631|      2|    _tstate->asyncio_running_loop = NULL;
 1632|      2|    _tstate->asyncio_running_task = NULL;
 1633|       |
 1634|       |#ifdef _Py_TIER2
 1635|       |    _tstate->jit_tracer_state = NULL;
 1636|       |#endif
 1637|      2|    tstate->delete_later = NULL;
 1638|       |
 1639|      2|    llist_init(&_tstate->mem_free_queue);
 1640|      2|    llist_init(&_tstate->asyncio_tasks_head);
 1641|      2|    if (interp->stoptheworld.requested || _PyRuntime.stoptheworld.requested) {
  ------------------
  |  Branch (1641:9): [True: 0, False: 2]
  |  Branch (1641:43): [True: 0, False: 2]
  ------------------
 1642|       |        // Start in the suspended state if there is an ongoing stop-the-world.
 1643|      0|        tstate->state = _Py_THREAD_SUSPENDED;
  ------------------
  |  |   46|      0|#define _Py_THREAD_SUSPENDED            2
  ------------------
 1644|      0|    }
 1645|       |
 1646|      2|    tstate->_status.initialized = 1;
 1647|      2|}
pystate.c:add_threadstate:
 1652|      2|{
 1653|      2|    assert(interp->threads.head != tstate);
  ------------------
  |  Branch (1653:5): [True: 2, False: 0]
  ------------------
 1654|      2|    if (next != NULL) {
  ------------------
  |  Branch (1654:9): [True: 0, False: 2]
  ------------------
 1655|      0|        assert(next->prev == NULL || next->prev == tstate);
  ------------------
  |  Branch (1655:9): [True: 0, False: 0]
  |  Branch (1655:9): [True: 0, False: 0]
  ------------------
 1656|      0|        next->prev = tstate;
 1657|      0|    }
 1658|      2|    tstate->next = next;
 1659|      2|    assert(tstate->prev == NULL);
  ------------------
  |  Branch (1659:5): [True: 2, False: 0]
  ------------------
 1660|      2|    interp->threads.head = tstate;
 1661|      2|}
pystate.c:bind_tstate:
  165|      2|{
  166|      2|    assert(tstate != NULL);
  ------------------
  |  Branch (166:5): [True: 2, False: 0]
  ------------------
  167|      2|    assert(tstate_is_alive(tstate) && !tstate->_status.bound);
  ------------------
  |  Branch (167:5): [True: 2, False: 0]
  |  Branch (167:5): [True: 2, False: 0]
  ------------------
  168|      2|    assert(!tstate->_status.unbound);  // just in case
  ------------------
  |  Branch (168:5): [True: 2, False: 0]
  ------------------
  169|      2|    assert(!tstate->_status.bound_gilstate);
  ------------------
  |  Branch (169:5): [True: 2, False: 0]
  ------------------
  170|      2|    assert(tstate != gilstate_get());
  ------------------
  |  Branch (170:5): [True: 2, False: 0]
  ------------------
  171|      2|    assert(!tstate->_status.active);
  ------------------
  |  Branch (171:5): [True: 2, False: 0]
  ------------------
  172|      2|    assert(tstate->thread_id == 0);
  ------------------
  |  Branch (172:5): [True: 2, False: 0]
  ------------------
  173|      2|    assert(tstate->native_thread_id == 0);
  ------------------
  |  Branch (173:5): [True: 2, False: 0]
  ------------------
  174|       |
  175|       |    // Currently we don't necessarily store the thread state
  176|       |    // in thread-local storage (e.g. per-interpreter).
  177|       |
  178|      2|    tstate->thread_id = PyThread_get_thread_ident();
  179|      2|#ifdef PY_HAVE_THREAD_NATIVE_ID
  180|      2|    tstate->native_thread_id = PyThread_get_thread_native_id();
  181|      2|#endif
  182|       |
  183|       |#ifdef Py_GIL_DISABLED
  184|       |    // Initialize biased reference counting inter-thread queue. Note that this
  185|       |    // needs to be initialized from the active thread.
  186|       |    _Py_brc_init_thread(tstate);
  187|       |#endif
  188|       |
  189|       |    // mimalloc state needs to be initialized from the active thread.
  190|      2|    tstate_mimalloc_bind(tstate);
  191|       |
  192|      2|    tstate->_status.bound = 1;
  193|      2|}
pystate.c:tstate_is_alive:
 1459|      4|{
 1460|      4|    return (tstate->_status.initialized &&
  ------------------
  |  Branch (1460:13): [True: 4, False: 0]
  ------------------
 1461|      4|            !tstate->_status.finalized &&
  ------------------
  |  Branch (1461:13): [True: 4, False: 0]
  ------------------
 1462|      4|            !tstate->_status.cleared &&
  ------------------
  |  Branch (1462:13): [True: 4, False: 0]
  ------------------
 1463|      4|            !tstate->_status.finalizing);
  ------------------
  |  Branch (1463:13): [True: 4, False: 0]
  ------------------
 1464|      4|}
pystate.c:tstate_mimalloc_bind:
 3319|      2|{
 3320|       |#ifdef Py_GIL_DISABLED
 3321|       |    struct _mimalloc_thread_state *mts = &((_PyThreadStateImpl*)tstate)->mimalloc;
 3322|       |
 3323|       |    // Initialize the mimalloc thread state. This must be called from the
 3324|       |    // same thread that will use the thread state. The "mem" heap doubles as
 3325|       |    // the "backing" heap.
 3326|       |    mi_tld_t *tld = &mts->tld;
 3327|       |    _mi_tld_init(tld, &mts->heaps[_Py_MIMALLOC_HEAP_MEM]);
 3328|       |    llist_init(&mts->page_list);
 3329|       |
 3330|       |    // Exiting threads push any remaining in-use segments to the abandoned
 3331|       |    // pool to be re-claimed later by other threads. We use per-interpreter
 3332|       |    // pools to keep Python objects from different interpreters separate.
 3333|       |    tld->segments.abandoned = &tstate->interp->mimalloc.abandoned_pool;
 3334|       |
 3335|       |    // Don't fill in the first N bytes up to ob_type in debug builds. We may
 3336|       |    // access ob_tid and the refcount fields in the dict and list lock-less
 3337|       |    // accesses, so they must remain valid for a while after deallocation.
 3338|       |    size_t base_offset = offsetof(PyObject, ob_type);
 3339|       |    if (_PyMem_DebugEnabled()) {
 3340|       |        // The debug allocator adds two words at the beginning of each block.
 3341|       |        base_offset += 2 * sizeof(size_t);
 3342|       |    }
 3343|       |    size_t debug_offsets[_Py_MIMALLOC_HEAP_COUNT] = {
 3344|       |        [_Py_MIMALLOC_HEAP_OBJECT] = base_offset,
 3345|       |        [_Py_MIMALLOC_HEAP_GC] = base_offset,
 3346|       |        [_Py_MIMALLOC_HEAP_GC_PRE] = base_offset + 2 * sizeof(PyObject *),
 3347|       |    };
 3348|       |
 3349|       |    // Initialize each heap
 3350|       |    for (uint8_t i = 0; i < _Py_MIMALLOC_HEAP_COUNT; i++) {
 3351|       |        _mi_heap_init_ex(&mts->heaps[i], tld, _mi_arena_id_none(), false, i);
 3352|       |        mts->heaps[i].debug_offset = (uint8_t)debug_offsets[i];
 3353|       |    }
 3354|       |
 3355|       |    // Heaps that store Python objects should use QSBR to delay freeing
 3356|       |    // mimalloc pages while there may be concurrent lock-free readers.
 3357|       |    mts->heaps[_Py_MIMALLOC_HEAP_OBJECT].page_use_qsbr = true;
 3358|       |    mts->heaps[_Py_MIMALLOC_HEAP_GC].page_use_qsbr = true;
 3359|       |    mts->heaps[_Py_MIMALLOC_HEAP_GC_PRE].page_use_qsbr = true;
 3360|       |
 3361|       |    // By default, object allocations use _Py_MIMALLOC_HEAP_OBJECT.
 3362|       |    // _PyObject_GC_New() and similar functions temporarily override this to
 3363|       |    // use one of the GC heaps.
 3364|       |    mts->current_object_heap = &mts->heaps[_Py_MIMALLOC_HEAP_OBJECT];
 3365|       |
 3366|       |    _Py_atomic_store_int(&mts->initialized, 1);
 3367|       |#endif
 3368|      2|}
pystate.c:gilstate_get:
  130|  56.0k|{
  131|  56.0k|    return _Py_tss_gilstate;
  132|  56.0k|}
pystate.c:bind_gilstate_tstate:
  238|      2|{
  239|      2|    assert(tstate != NULL);
  ------------------
  |  Branch (239:5): [True: 2, False: 0]
  ------------------
  240|      2|    assert(tstate_is_alive(tstate));
  ------------------
  |  Branch (240:5): [True: 2, False: 0]
  ------------------
  241|      2|    assert(tstate_is_bound(tstate));
  ------------------
  |  Branch (241:5): [True: 2, False: 0]
  ------------------
  242|       |    // XXX assert(!tstate->_status.active);
  243|      2|    assert(!tstate->_status.bound_gilstate);
  ------------------
  |  Branch (243:5): [True: 2, False: 0]
  ------------------
  244|       |
  245|      2|    PyThreadState *tcur = gilstate_get();
  246|      2|    assert(tstate != tcur);
  ------------------
  |  Branch (246:5): [True: 2, False: 0]
  ------------------
  247|       |
  248|      2|    if (tcur != NULL) {
  ------------------
  |  Branch (248:9): [True: 0, False: 2]
  ------------------
  249|      0|        tcur->_status.bound_gilstate = 0;
  250|      0|    }
  251|      2|    gilstate_set(tstate);
  252|      2|    tstate->_status.bound_gilstate = 1;
  253|      2|}
pystate.c:tstate_is_bound:
  153|   112k|{
  154|   112k|    return tstate->_status.bound && !tstate->_status.unbound;
  ------------------
  |  Branch (154:12): [True: 112k, False: 0]
  |  Branch (154:37): [True: 112k, False: 0]
  ------------------
  155|   112k|}
pystate.c:gilstate_set:
  136|      2|{
  137|      2|    assert(tstate != NULL);
  ------------------
  |  Branch (137:5): [True: 2, False: 0]
  ------------------
  138|      2|    _Py_tss_gilstate = tstate;
  139|      2|}
pystate.c:current_fast_clear:
  101|  56.0k|{
  102|  56.0k|    _Py_tss_tstate = NULL;
  103|       |    _Py_tss_interp = NULL;
  104|  56.0k|}
pystate.c:current_fast_set:
   92|  56.0k|{
   93|  56.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (93:5): [True: 56.0k, False: 0]
  ------------------
   94|  56.0k|    _Py_tss_tstate = tstate;
   95|  56.0k|    assert(tstate->interp != NULL);
  ------------------
  |  Branch (95:5): [True: 56.0k, False: 0]
  ------------------
   96|  56.0k|    _Py_tss_interp = tstate->interp;
   97|  56.0k|}
pystate.c:tstate_try_attach:
 2216|  56.0k|{
 2217|       |#ifdef Py_GIL_DISABLED
 2218|       |    int expected = _Py_THREAD_DETACHED;
 2219|       |    return _Py_atomic_compare_exchange_int(&tstate->state,
 2220|       |                                           &expected,
 2221|       |                                           _Py_THREAD_ATTACHED);
 2222|       |#else
 2223|  56.0k|    assert(tstate->state == _Py_THREAD_DETACHED);
  ------------------
  |  Branch (2223:5): [True: 56.0k, False: 0]
  ------------------
 2224|  56.0k|    tstate->state = _Py_THREAD_ATTACHED;
  ------------------
  |  |   45|  56.0k|#define _Py_THREAD_ATTACHED             1
  ------------------
 2225|  56.0k|    return 1;
 2226|  56.0k|#endif
 2227|  56.0k|}
pystate.c:tstate_activate:
 2181|  56.0k|{
 2182|  56.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (2182:5): [True: 56.0k, False: 0]
  ------------------
 2183|       |    // XXX assert(tstate_is_alive(tstate));
 2184|  56.0k|    assert(tstate_is_bound(tstate));
  ------------------
  |  Branch (2184:5): [True: 56.0k, False: 0]
  ------------------
 2185|  56.0k|    assert(!tstate->_status.active);
  ------------------
  |  Branch (2185:5): [True: 56.0k, False: 0]
  ------------------
 2186|       |
 2187|  56.0k|    assert(!tstate->_status.bound_gilstate ||
  ------------------
  |  Branch (2187:5): [True: 0, False: 56.0k]
  |  Branch (2187:5): [True: 56.0k, False: 0]
  ------------------
 2188|  56.0k|           tstate == gilstate_get());
 2189|  56.0k|    if (!tstate->_status.bound_gilstate) {
  ------------------
  |  Branch (2189:9): [True: 0, False: 56.0k]
  ------------------
 2190|      0|        bind_gilstate_tstate(tstate);
 2191|      0|    }
 2192|       |
 2193|  56.0k|    tstate->_status.active = 1;
 2194|  56.0k|}
pystate.c:detach_thread:
 2351|  56.0k|{
 2352|       |    // XXX assert(tstate_is_alive(tstate) && tstate_is_bound(tstate));
 2353|  56.0k|    assert(_Py_atomic_load_int_relaxed(&tstate->state) == _Py_THREAD_ATTACHED);
  ------------------
  |  Branch (2353:5): [True: 56.0k, False: 0]
  ------------------
 2354|  56.0k|    assert(tstate == current_fast_get());
  ------------------
  |  Branch (2354:5): [True: 56.0k, False: 0]
  ------------------
 2355|  56.0k|    if (tstate->critical_section != 0) {
  ------------------
  |  Branch (2355:9): [True: 0, False: 56.0k]
  ------------------
 2356|      0|        _PyCriticalSection_SuspendAll(tstate);
 2357|      0|    }
 2358|       |#ifdef Py_GIL_DISABLED
 2359|       |    _Py_qsbr_detach(((_PyThreadStateImpl *)tstate)->qsbr);
 2360|       |#endif
 2361|  56.0k|    tstate_deactivate(tstate);
 2362|  56.0k|    tstate_set_detached(tstate, detached_state);
 2363|  56.0k|    current_fast_clear(&_PyRuntime);
 2364|  56.0k|    _PyEval_ReleaseLock(tstate->interp, tstate, 0);
 2365|  56.0k|}
pystate.c:tstate_deactivate:
 2198|  56.0k|{
 2199|  56.0k|    assert(tstate != NULL);
  ------------------
  |  Branch (2199:5): [True: 56.0k, False: 0]
  ------------------
 2200|       |    // XXX assert(tstate_is_alive(tstate));
 2201|  56.0k|    assert(tstate_is_bound(tstate));
  ------------------
  |  Branch (2201:5): [True: 56.0k, False: 0]
  ------------------
 2202|  56.0k|    assert(tstate->_status.active);
  ------------------
  |  Branch (2202:5): [True: 56.0k, False: 0]
  ------------------
 2203|       |
 2204|       |#if Py_STATS
 2205|       |    _PyStats_Detach((_PyThreadStateImpl *)tstate);
 2206|       |#endif
 2207|       |
 2208|  56.0k|    tstate->_status.active = 0;
 2209|       |
 2210|       |    // We do not unbind the gilstate tstate here.
 2211|       |    // It will still be used in PyGILState_Ensure().
 2212|  56.0k|}
pystate.c:tstate_set_detached:
 2247|  56.0k|{
 2248|  56.0k|    assert(_Py_atomic_load_int_relaxed(&tstate->state) == _Py_THREAD_ATTACHED);
  ------------------
  |  Branch (2248:5): [True: 56.0k, False: 0]
  ------------------
 2249|       |#ifdef Py_GIL_DISABLED
 2250|       |    _Py_atomic_store_int(&tstate->state, detached_state);
 2251|       |#else
 2252|  56.0k|    tstate->state = detached_state;
 2253|  56.0k|#endif
 2254|  56.0k|}
pystate.c:push_chunk:
 3198|      2|{
 3199|      2|    int allocate_size = _PY_DATA_STACK_CHUNK_SIZE;
  ------------------
  |  |   65|      2|#define _PY_DATA_STACK_CHUNK_SIZE (16*1024)
  ------------------
 3200|      2|    while (allocate_size < (int)sizeof(PyObject*)*(size + MINIMUM_OVERHEAD)) {
  ------------------
  |  | 3194|      2|#define MINIMUM_OVERHEAD 1000
  ------------------
  |  Branch (3200:12): [True: 0, False: 2]
  ------------------
 3201|      0|        allocate_size *= 2;
 3202|      0|    }
 3203|      2|    _PyStackChunk *new;
 3204|      2|    if (tstate->datastack_cached_chunk != NULL
  ------------------
  |  Branch (3204:9): [True: 0, False: 2]
  ------------------
 3205|      0|        && (size_t)allocate_size <= tstate->datastack_cached_chunk->size)
  ------------------
  |  Branch (3205:12): [True: 0, False: 0]
  ------------------
 3206|      0|    {
 3207|      0|        new = tstate->datastack_cached_chunk;
 3208|      0|        tstate->datastack_cached_chunk = NULL;
 3209|      0|        new->previous = tstate->datastack_chunk;
 3210|      0|        new->top = 0;
 3211|      0|    }
 3212|      2|    else {
 3213|      2|        new = allocate_chunk(allocate_size, tstate->datastack_chunk);
 3214|      2|        if (new == NULL) {
  ------------------
  |  Branch (3214:13): [True: 0, False: 2]
  ------------------
 3215|      0|            return NULL;
 3216|      0|        }
 3217|      2|    }
 3218|      2|    if (tstate->datastack_chunk) {
  ------------------
  |  Branch (3218:9): [True: 0, False: 2]
  ------------------
 3219|      0|        tstate->datastack_chunk->top = tstate->datastack_top -
 3220|      0|                                       &tstate->datastack_chunk->data[0];
 3221|      0|    }
 3222|      2|    tstate->datastack_chunk = new;
 3223|      2|    tstate->datastack_limit = (PyObject **)(((char *)new) + allocate_size);
 3224|       |    // When new is the "root" chunk (i.e. new->previous == NULL), we can keep
 3225|       |    // _PyThreadState_PopFrame from freeing it later by "skipping" over the
 3226|       |    // first element:
 3227|       |    PyObject **res = &new->data[new->previous == NULL];
 3228|      2|    tstate->datastack_top = res + size;
 3229|      2|    return res;
 3230|      2|}
pystate.c:allocate_chunk:
 1474|      2|{
 1475|      2|    assert(size_in_bytes % sizeof(PyObject **) == 0);
  ------------------
  |  Branch (1475:5): [True: 2, False: 0]
  ------------------
 1476|      2|    _PyStackChunk *res = _PyObject_VirtualAlloc(size_in_bytes);
 1477|      2|    if (res == NULL) {
  ------------------
  |  Branch (1477:9): [True: 0, False: 2]
  ------------------
 1478|      0|        return NULL;
 1479|      0|    }
 1480|      2|    res->previous = previous;
 1481|      2|    res->size = size_in_bytes;
 1482|      2|    res->top = 0;
 1483|      2|    return res;
 1484|      2|}

PyOS_mystrnicmp:
    8|  74.3k|{
    9|  74.3k|    const unsigned char *p1, *p2;
   10|  74.3k|    if (size == 0)
  ------------------
  |  Branch (10:9): [True: 599, False: 73.7k]
  ------------------
   11|    599|        return 0;
   12|  73.7k|    p1 = (const unsigned char *)s1;
   13|  73.7k|    p2 = (const unsigned char *)s2;
   14|  92.0k|    for (; (--size > 0) && *p1 && *p2 && (Py_TOLOWER(*p1) == Py_TOLOWER(*p2));
  ------------------
  |  |   32|  80.0k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  80.0k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
                  for (; (--size > 0) && *p1 && *p2 && (Py_TOLOWER(*p1) == Py_TOLOWER(*p2));
  ------------------
  |  |   32|  80.0k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  80.0k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  |  Branch (14:12): [True: 80.0k, False: 12.0k]
  |  Branch (14:28): [True: 80.0k, False: 0]
  |  Branch (14:35): [True: 80.0k, False: 0]
  |  Branch (14:42): [True: 18.3k, False: 61.7k]
  ------------------
   15|  73.7k|         p1++, p2++) {
   16|  18.3k|        ;
   17|  18.3k|    }
   18|  73.7k|    return Py_TOLOWER(*p1) - Py_TOLOWER(*p2);
  ------------------
  |  |   32|  73.7k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  73.7k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
                  return Py_TOLOWER(*p1) - Py_TOLOWER(*p2);
  ------------------
  |  |   32|  73.7k|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|  73.7k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
   19|  74.3k|}

_Py_parse_inf_or_nan:
   29|      1|{
   30|      1|    double retval;
   31|      1|    const char *s;
   32|      1|    int negate = 0;
   33|       |
   34|      1|    s = p;
   35|      1|    if (*s == '-') {
  ------------------
  |  Branch (35:9): [True: 0, False: 1]
  ------------------
   36|      0|        negate = 1;
   37|      0|        s++;
   38|      0|    }
   39|      1|    else if (*s == '+') {
  ------------------
  |  Branch (39:14): [True: 0, False: 1]
  ------------------
   40|      0|        s++;
   41|      0|    }
   42|      1|    if (case_insensitive_match(s, "inf")) {
  ------------------
  |  Branch (42:9): [True: 0, False: 1]
  ------------------
   43|      0|        s += 3;
   44|      0|        if (case_insensitive_match(s, "inity"))
  ------------------
  |  Branch (44:13): [True: 0, False: 0]
  ------------------
   45|      0|            s += 5;
   46|      0|        retval = negate ? -INFINITY : INFINITY;
  ------------------
  |  Branch (46:18): [True: 0, False: 0]
  ------------------
   47|      0|    }
   48|      1|    else if (case_insensitive_match(s, "nan")) {
  ------------------
  |  Branch (48:14): [True: 0, False: 1]
  ------------------
   49|      0|        s += 3;
   50|      0|        retval = negate ? -fabs(Py_NAN) : fabs(Py_NAN);
  ------------------
  |  |   79|      0|#    define Py_NAN      ((double)NAN)
  ------------------
                      retval = negate ? -fabs(Py_NAN) : fabs(Py_NAN);
  ------------------
  |  |   79|      0|#    define Py_NAN      ((double)NAN)
  ------------------
  |  Branch (50:18): [True: 0, False: 0]
  ------------------
   51|      0|    }
   52|      1|    else {
   53|      1|        s = p;
   54|      1|        retval = -1.0;
   55|      1|    }
   56|      1|    *endptr = (char *)s;
   57|      1|    return retval;
   58|      1|}
PyOS_string_to_double:
  302|   223k|{
  303|   223k|    double x, result=-1.0;
  304|   223k|    char *fail_pos;
  305|       |
  306|   223k|    errno = 0;
  307|   223k|    x = _PyOS_ascii_strtod(s, &fail_pos);
  308|       |
  309|   223k|    if (errno == ENOMEM) {
  ------------------
  |  Branch (309:9): [True: 0, False: 223k]
  ------------------
  310|      0|        PyErr_NoMemory();
  311|      0|        fail_pos = (char *)s;
  312|      0|    }
  313|   223k|    else if (!endptr && (fail_pos == s || *fail_pos != '\0'))
  ------------------
  |  Branch (313:14): [True: 126k, False: 97.3k]
  |  Branch (313:26): [True: 0, False: 126k]
  |  Branch (313:43): [True: 0, False: 126k]
  ------------------
  314|      0|        PyErr_Format(PyExc_ValueError,
  315|      0|                      "could not convert string to float: "
  316|      0|                      "'%.200s'", s);
  317|   223k|    else if (fail_pos == s)
  ------------------
  |  Branch (317:14): [True: 0, False: 223k]
  ------------------
  318|      0|        PyErr_Format(PyExc_ValueError,
  319|      0|                      "could not convert string to float: "
  320|      0|                      "'%.200s'", s);
  321|   223k|    else if (errno == ERANGE && fabs(x) >= 1.0 && overflow_exception)
  ------------------
  |  Branch (321:14): [True: 18.8k, False: 204k]
  |  Branch (321:33): [True: 18.8k, False: 0]
  |  Branch (321:51): [True: 0, False: 18.8k]
  ------------------
  322|      0|        PyErr_Format(overflow_exception,
  323|      0|                      "value too large to convert to float: "
  324|      0|                      "'%.200s'", s);
  325|   223k|    else
  326|   223k|        result = x;
  327|       |
  328|   223k|    if (endptr != NULL)
  ------------------
  |  Branch (328:9): [True: 97.3k, False: 126k]
  ------------------
  329|  97.3k|        *endptr = fail_pos;
  330|   223k|    return result;
  331|   223k|}
PyOS_double_to_string:
 1226|  42.8k|{
 1227|  42.8k|    const char * const *float_strings = lc_float_strings;
 1228|  42.8k|    int mode;
 1229|       |
 1230|       |    /* Validate format_code, and map upper and lower case. Compute the
 1231|       |       mode and make any adjustments as needed. */
 1232|  42.8k|    switch (format_code) {
 1233|       |    /* exponent */
 1234|      0|    case 'E':
  ------------------
  |  Branch (1234:5): [True: 0, False: 42.8k]
  ------------------
 1235|      0|        float_strings = uc_float_strings;
 1236|      0|        format_code = 'e';
 1237|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1238|      0|    case 'e':
  ------------------
  |  Branch (1238:5): [True: 0, False: 42.8k]
  ------------------
 1239|      0|        mode = 2;
 1240|      0|        precision++;
 1241|      0|        break;
 1242|       |
 1243|       |    /* fixed */
 1244|      0|    case 'F':
  ------------------
  |  Branch (1244:5): [True: 0, False: 42.8k]
  ------------------
 1245|      0|        float_strings = uc_float_strings;
 1246|      0|        format_code = 'f';
 1247|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1248|      0|    case 'f':
  ------------------
  |  Branch (1248:5): [True: 0, False: 42.8k]
  ------------------
 1249|      0|        mode = 3;
 1250|      0|        break;
 1251|       |
 1252|       |    /* general */
 1253|      0|    case 'G':
  ------------------
  |  Branch (1253:5): [True: 0, False: 42.8k]
  ------------------
 1254|      0|        float_strings = uc_float_strings;
 1255|      0|        format_code = 'g';
 1256|      0|        _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1257|      0|    case 'g':
  ------------------
  |  Branch (1257:5): [True: 0, False: 42.8k]
  ------------------
 1258|      0|        mode = 2;
 1259|       |        /* precision 0 makes no sense for 'g' format; interpret as 1 */
 1260|      0|        if (precision == 0)
  ------------------
  |  Branch (1260:13): [True: 0, False: 0]
  ------------------
 1261|      0|            precision = 1;
 1262|      0|        break;
 1263|       |
 1264|       |    /* repr format */
 1265|  42.8k|    case 'r':
  ------------------
  |  Branch (1265:5): [True: 42.8k, False: 0]
  ------------------
 1266|  42.8k|        mode = 0;
 1267|       |        /* Supplied precision is unused, must be 0. */
 1268|  42.8k|        if (precision != 0) {
  ------------------
  |  Branch (1268:13): [True: 0, False: 42.8k]
  ------------------
 1269|      0|            PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1270|      0|            return NULL;
 1271|      0|        }
 1272|  42.8k|        break;
 1273|       |
 1274|  42.8k|    default:
  ------------------
  |  Branch (1274:5): [True: 0, False: 42.8k]
  ------------------
 1275|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1276|      0|        return NULL;
 1277|  42.8k|    }
 1278|       |
 1279|  42.8k|    return format_float_short(val, format_code, mode, precision,
 1280|  42.8k|                              flags & Py_DTSF_SIGN,
  ------------------
  |  |   22|  42.8k|#define Py_DTSF_SIGN      0x01 /* always add the sign */
  ------------------
 1281|  42.8k|                              flags & Py_DTSF_ADD_DOT_0,
  ------------------
  |  |   23|  42.8k|#define Py_DTSF_ADD_DOT_0 0x02 /* if the result is an integer add ".0" */
  ------------------
 1282|  42.8k|                              flags & Py_DTSF_ALT,
  ------------------
  |  |   24|  42.8k|#define Py_DTSF_ALT       0x04 /* "alternate" formatting. it's format_code
  ------------------
 1283|  42.8k|                              flags & Py_DTSF_NO_NEG_0,
  ------------------
  |  |   26|  42.8k|#define Py_DTSF_NO_NEG_0  0x08 /* negative zero result is coerced to 0 */
  ------------------
 1284|  42.8k|                              float_strings, type);
 1285|  42.8k|}
pystrtod.c:case_insensitive_match:
   14|      2|{
   15|      2|    while(*t && Py_TOLOWER(*s) == *t) {
  ------------------
  |  |   32|      2|#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
  |  |  ------------------
  |  |  |  |  163|      2|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  ------------------
  |  Branch (15:11): [True: 2, False: 0]
  |  Branch (15:17): [True: 0, False: 2]
  ------------------
   16|      0|        s++;
   17|      0|        t++;
   18|      0|    }
   19|      2|    return *t ? 0 : 1;
  ------------------
  |  Branch (19:12): [True: 2, False: 0]
  ------------------
   20|      2|}
pystrtod.c:_PyOS_ascii_strtod:
   94|   223k|{
   95|   223k|    double result;
   96|   223k|    _Py_SET_53BIT_PRECISION_HEADER;
  ------------------
  |  |   94|   223k|    unsigned short old_387controlword, new_387controlword
  ------------------
   97|       |
   98|   223k|    assert(nptr != NULL);
  ------------------
  |  Branch (98:5): [True: 223k, False: 0]
  ------------------
   99|       |    /* Set errno to zero, so that we can distinguish zero results
  100|       |       and underflows */
  101|   223k|    errno = 0;
  102|       |
  103|   223k|    _Py_SET_53BIT_PRECISION_START;
  ------------------
  |  |   96|   223k|    do {                                                                \
  |  |   97|   223k|        old_387controlword = _Py_get_387controlword();                  \
  |  |   98|   223k|        new_387controlword = (old_387controlword & ~0x0f00) | 0x0200;   \
  |  |   99|   223k|        if (new_387controlword != old_387controlword) {                 \
  |  |  ------------------
  |  |  |  Branch (99:13): [True: 223k, False: 0]
  |  |  ------------------
  |  |  100|   223k|            _Py_set_387controlword(new_387controlword);                 \
  |  |  101|   223k|        }                                                               \
  |  |  102|   223k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (102:14): [Folded, False: 223k]
  |  |  ------------------
  ------------------
  104|   223k|    result = _Py_dg_strtod(nptr, endptr);
  105|   223k|    _Py_SET_53BIT_PRECISION_END;
  ------------------
  |  |  104|   223k|    do {                                                                \
  |  |  105|   223k|        if (new_387controlword != old_387controlword) {                 \
  |  |  ------------------
  |  |  |  Branch (105:13): [True: 223k, False: 0]
  |  |  ------------------
  |  |  106|   223k|            _Py_set_387controlword(old_387controlword);                 \
  |  |  107|   223k|        }                                                               \
  |  |  108|   223k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (108:14): [Folded, False: 223k]
  |  |  ------------------
  ------------------
  106|       |
  107|   223k|    if (*endptr == nptr)
  ------------------
  |  Branch (107:9): [True: 0, False: 223k]
  ------------------
  108|       |        /* string might represent an inf or nan */
  109|      0|        result = _Py_parse_inf_or_nan(nptr, endptr);
  110|       |
  111|   223k|    return result;
  112|       |
  113|   223k|}
pystrtod.c:format_float_short:
  974|  42.8k|{
  975|  42.8k|    char *buf = NULL;
  976|  42.8k|    char *p = NULL;
  977|  42.8k|    Py_ssize_t bufsize = 0;
  978|  42.8k|    char *digits, *digits_end;
  979|  42.8k|    int decpt_as_int, sign, exp_len, exp = 0, use_exp = 0;
  980|  42.8k|    Py_ssize_t decpt, digits_len, vdigits_start, vdigits_end;
  981|  42.8k|    _Py_SET_53BIT_PRECISION_HEADER;
  ------------------
  |  |   94|  42.8k|    unsigned short old_387controlword, new_387controlword
  ------------------
  982|       |
  983|       |    /* _Py_dg_dtoa returns a digit string (no decimal point or exponent).
  984|       |       Must be matched by a call to _Py_dg_freedtoa. */
  985|  42.8k|    _Py_SET_53BIT_PRECISION_START;
  ------------------
  |  |   96|  42.8k|    do {                                                                \
  |  |   97|  42.8k|        old_387controlword = _Py_get_387controlword();                  \
  |  |   98|  42.8k|        new_387controlword = (old_387controlword & ~0x0f00) | 0x0200;   \
  |  |   99|  42.8k|        if (new_387controlword != old_387controlword) {                 \
  |  |  ------------------
  |  |  |  Branch (99:13): [True: 42.8k, False: 0]
  |  |  ------------------
  |  |  100|  42.8k|            _Py_set_387controlword(new_387controlword);                 \
  |  |  101|  42.8k|        }                                                               \
  |  |  102|  42.8k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (102:14): [Folded, False: 42.8k]
  |  |  ------------------
  ------------------
  986|  42.8k|    digits = _Py_dg_dtoa(d, mode, precision, &decpt_as_int, &sign,
  987|  42.8k|                         &digits_end);
  988|  42.8k|    _Py_SET_53BIT_PRECISION_END;
  ------------------
  |  |  104|  42.8k|    do {                                                                \
  |  |  105|  42.8k|        if (new_387controlword != old_387controlword) {                 \
  |  |  ------------------
  |  |  |  Branch (105:13): [True: 42.8k, False: 0]
  |  |  ------------------
  |  |  106|  42.8k|            _Py_set_387controlword(old_387controlword);                 \
  |  |  107|  42.8k|        }                                                               \
  |  |  108|  42.8k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (108:14): [Folded, False: 42.8k]
  |  |  ------------------
  ------------------
  989|       |
  990|  42.8k|    decpt = (Py_ssize_t)decpt_as_int;
  991|  42.8k|    if (digits == NULL) {
  ------------------
  |  Branch (991:9): [True: 0, False: 42.8k]
  ------------------
  992|       |        /* The only failure mode is no memory. */
  993|      0|        PyErr_NoMemory();
  994|      0|        goto exit;
  995|      0|    }
  996|  42.8k|    assert(digits_end != NULL && digits_end >= digits);
  ------------------
  |  Branch (996:5): [True: 42.8k, False: 0]
  |  Branch (996:5): [True: 42.8k, False: 0]
  ------------------
  997|  42.8k|    digits_len = digits_end - digits;
  998|       |
  999|  42.8k|    if (no_negative_zero && sign == 1 &&
  ------------------
  |  Branch (999:9): [True: 0, False: 42.8k]
  |  Branch (999:29): [True: 0, False: 0]
  ------------------
 1000|      0|            (digits_len == 0 || (digits_len == 1 && digits[0] == '0'))) {
  ------------------
  |  Branch (1000:14): [True: 0, False: 0]
  |  Branch (1000:34): [True: 0, False: 0]
  |  Branch (1000:53): [True: 0, False: 0]
  ------------------
 1001|      0|        sign = 0;
 1002|      0|    }
 1003|       |
 1004|  42.8k|    if (digits_len && !Py_ISDIGIT(digits[0])) {
  ------------------
  |  |   24|  42.8k|#define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |  163|  42.8k|#define Py_CHARMASK(c) ((unsigned char)((c) & 0xff))
  |  |  ------------------
  |  |               #define Py_ISDIGIT(c)  (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
  |  |  ------------------
  |  |  |  |   11|  42.8k|#define PY_CTF_DIGIT  0x04
  |  |  ------------------
  ------------------
  |  Branch (1004:9): [True: 42.8k, False: 0]
  |  Branch (1004:23): [True: 3.16k, False: 39.6k]
  ------------------
 1005|       |        /* Infinities and nans here; adapt Gay's output,
 1006|       |           so convert Infinity to inf and NaN to nan, and
 1007|       |           ignore sign of nan. Then return. */
 1008|       |
 1009|       |        /* ignore the actual sign of a nan */
 1010|  3.16k|        if (digits[0] == 'n' || digits[0] == 'N')
  ------------------
  |  Branch (1010:13): [True: 0, False: 3.16k]
  |  Branch (1010:33): [True: 0, False: 3.16k]
  ------------------
 1011|      0|            sign = 0;
 1012|       |
 1013|       |        /* We only need 5 bytes to hold the result "+inf\0" . */
 1014|  3.16k|        bufsize = 5; /* Used later in an assert. */
 1015|  3.16k|        buf = (char *)PyMem_Malloc(bufsize);
 1016|  3.16k|        if (buf == NULL) {
  ------------------
  |  Branch (1016:13): [True: 0, False: 3.16k]
  ------------------
 1017|      0|            PyErr_NoMemory();
 1018|      0|            goto exit;
 1019|      0|        }
 1020|  3.16k|        p = buf;
 1021|       |
 1022|  3.16k|        if (sign == 1) {
  ------------------
  |  Branch (1022:13): [True: 0, False: 3.16k]
  ------------------
 1023|      0|            *p++ = '-';
 1024|      0|        }
 1025|  3.16k|        else if (always_add_sign) {
  ------------------
  |  Branch (1025:18): [True: 0, False: 3.16k]
  ------------------
 1026|      0|            *p++ = '+';
 1027|      0|        }
 1028|  3.16k|        if (digits[0] == 'i' || digits[0] == 'I') {
  ------------------
  |  Branch (1028:13): [True: 0, False: 3.16k]
  |  Branch (1028:33): [True: 3.16k, False: 0]
  ------------------
 1029|  3.16k|            strncpy(p, float_strings[OFS_INF], 3);
  ------------------
  |  |  923|  3.16k|#define OFS_INF 0
  ------------------
 1030|  3.16k|            p += 3;
 1031|       |
 1032|  3.16k|            if (type)
  ------------------
  |  Branch (1032:17): [True: 0, False: 3.16k]
  ------------------
 1033|      0|                *type = Py_DTST_INFINITE;
  ------------------
  |  |   30|      0|#define Py_DTST_INFINITE 1
  ------------------
 1034|  3.16k|        }
 1035|      0|        else if (digits[0] == 'n' || digits[0] == 'N') {
  ------------------
  |  Branch (1035:18): [True: 0, False: 0]
  |  Branch (1035:38): [True: 0, False: 0]
  ------------------
 1036|      0|            strncpy(p, float_strings[OFS_NAN], 3);
  ------------------
  |  |  924|      0|#define OFS_NAN 1
  ------------------
 1037|      0|            p += 3;
 1038|       |
 1039|      0|            if (type)
  ------------------
  |  Branch (1039:17): [True: 0, False: 0]
  ------------------
 1040|      0|                *type = Py_DTST_NAN;
  ------------------
  |  |   31|      0|#define Py_DTST_NAN 2
  ------------------
 1041|      0|        }
 1042|      0|        else {
 1043|       |            /* shouldn't get here: Gay's code should always return
 1044|       |               something starting with a digit, an 'I',  or 'N' */
 1045|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 1046|      0|        }
 1047|  3.16k|        goto exit;
 1048|  3.16k|    }
 1049|       |
 1050|       |    /* The result must be finite (not inf or nan). */
 1051|  39.6k|    if (type)
  ------------------
  |  Branch (1051:9): [True: 0, False: 39.6k]
  ------------------
 1052|      0|        *type = Py_DTST_FINITE;
  ------------------
  |  |   29|      0|#define Py_DTST_FINITE 0
  ------------------
 1053|       |
 1054|       |
 1055|       |    /* We got digits back, format them.  We may need to pad 'digits'
 1056|       |       either on the left or right (or both) with extra zeros, so in
 1057|       |       general the resulting string has the form
 1058|       |
 1059|       |         [<sign>]<zeros><digits><zeros>[<exponent>]
 1060|       |
 1061|       |       where either of the <zeros> pieces could be empty, and there's a
 1062|       |       decimal point that could appear either in <digits> or in the
 1063|       |       leading or trailing <zeros>.
 1064|       |
 1065|       |       Imagine an infinite 'virtual' string vdigits, consisting of the
 1066|       |       string 'digits' (starting at index 0) padded on both the left and
 1067|       |       right with infinite strings of zeros.  We want to output a slice
 1068|       |
 1069|       |         vdigits[vdigits_start : vdigits_end]
 1070|       |
 1071|       |       of this virtual string.  Thus if vdigits_start < 0 then we'll end
 1072|       |       up producing some leading zeros; if vdigits_end > digits_len there
 1073|       |       will be trailing zeros in the output.  The next section of code
 1074|       |       determines whether to use an exponent or not, figures out the
 1075|       |       position 'decpt' of the decimal point, and computes 'vdigits_start'
 1076|       |       and 'vdigits_end'. */
 1077|  39.6k|    vdigits_end = digits_len;
 1078|  39.6k|    switch (format_code) {
 1079|      0|    case 'e':
  ------------------
  |  Branch (1079:5): [True: 0, False: 39.6k]
  ------------------
 1080|      0|        use_exp = 1;
 1081|      0|        vdigits_end = precision;
 1082|      0|        break;
 1083|      0|    case 'f':
  ------------------
  |  Branch (1083:5): [True: 0, False: 39.6k]
  ------------------
 1084|      0|        vdigits_end = decpt + precision;
 1085|      0|        break;
 1086|      0|    case 'g':
  ------------------
  |  Branch (1086:5): [True: 0, False: 39.6k]
  ------------------
 1087|      0|        if (decpt <= -4 || decpt >
  ------------------
  |  Branch (1087:13): [True: 0, False: 0]
  |  Branch (1087:28): [True: 0, False: 0]
  ------------------
 1088|      0|            (add_dot_0_if_integer ? precision-1 : precision))
  ------------------
  |  Branch (1088:14): [True: 0, False: 0]
  ------------------
 1089|      0|            use_exp = 1;
 1090|      0|        if (use_alt_formatting)
  ------------------
  |  Branch (1090:13): [True: 0, False: 0]
  ------------------
 1091|      0|            vdigits_end = precision;
 1092|      0|        break;
 1093|  39.6k|    case 'r':
  ------------------
  |  Branch (1093:5): [True: 39.6k, False: 0]
  ------------------
 1094|       |        /* convert to exponential format at 1e16.  We used to convert
 1095|       |           at 1e17, but that gives odd-looking results for some values
 1096|       |           when a 16-digit 'shortest' repr is padded with bogus zeros.
 1097|       |           For example, repr(2e16+8) would give 20000000000000010.0;
 1098|       |           the true value is 20000000000000008.0. */
 1099|  39.6k|        if (decpt <= -4 || decpt > 16)
  ------------------
  |  Branch (1099:13): [True: 2.16k, False: 37.5k]
  |  Branch (1099:28): [True: 12.8k, False: 24.6k]
  ------------------
 1100|  15.0k|            use_exp = 1;
 1101|  39.6k|        break;
 1102|      0|    default:
  ------------------
  |  Branch (1102:5): [True: 0, False: 39.6k]
  ------------------
 1103|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
 1104|      0|        goto exit;
 1105|  39.6k|    }
 1106|       |
 1107|       |    /* if using an exponent, reset decimal point position to 1 and adjust
 1108|       |       exponent accordingly.*/
 1109|  39.6k|    if (use_exp) {
  ------------------
  |  Branch (1109:9): [True: 15.0k, False: 24.6k]
  ------------------
 1110|  15.0k|        exp = (int)decpt - 1;
 1111|  15.0k|        decpt = 1;
 1112|  15.0k|    }
 1113|       |    /* ensure vdigits_start < decpt <= vdigits_end, or vdigits_start <
 1114|       |       decpt < vdigits_end if add_dot_0_if_integer and no exponent */
 1115|  39.6k|    vdigits_start = decpt <= 0 ? decpt-1 : 0;
  ------------------
  |  Branch (1115:21): [True: 1.44k, False: 38.2k]
  ------------------
 1116|  39.6k|    if (!use_exp && add_dot_0_if_integer)
  ------------------
  |  Branch (1116:9): [True: 24.6k, False: 15.0k]
  |  Branch (1116:21): [True: 8.50k, False: 16.1k]
  ------------------
 1117|  8.50k|        vdigits_end = vdigits_end > decpt ? vdigits_end : decpt + 1;
  ------------------
  |  Branch (1117:23): [True: 2.70k, False: 5.80k]
  ------------------
 1118|  31.1k|    else
 1119|  31.1k|        vdigits_end = vdigits_end > decpt ? vdigits_end : decpt;
  ------------------
  |  Branch (1119:23): [True: 10.3k, False: 20.7k]
  ------------------
 1120|       |
 1121|       |    /* double check inequalities */
 1122|  39.6k|    assert(vdigits_start <= 0 &&
  ------------------
  |  Branch (1122:5): [True: 39.6k, False: 0]
  |  Branch (1122:5): [True: 39.6k, False: 0]
  |  Branch (1122:5): [True: 39.6k, False: 0]
  ------------------
 1123|  39.6k|           0 <= digits_len &&
 1124|  39.6k|           digits_len <= vdigits_end);
 1125|       |    /* decimal point should be in (vdigits_start, vdigits_end] */
 1126|  39.6k|    assert(vdigits_start < decpt && decpt <= vdigits_end);
  ------------------
  |  Branch (1126:5): [True: 39.6k, False: 0]
  |  Branch (1126:5): [True: 39.6k, False: 0]
  ------------------
 1127|       |
 1128|       |    /* Compute an upper bound how much memory we need. This might be a few
 1129|       |       chars too long, but no big deal. */
 1130|  39.6k|    bufsize =
 1131|       |        /* sign, decimal point and trailing 0 byte */
 1132|  39.6k|        3 +
 1133|       |
 1134|       |        /* total digit count (including zero padding on both sides) */
 1135|  39.6k|        (vdigits_end - vdigits_start) +
 1136|       |
 1137|       |        /* exponent "e+100", max 3 numerical digits */
 1138|  39.6k|        (use_exp ? 5 : 0);
  ------------------
  |  Branch (1138:10): [True: 15.0k, False: 24.6k]
  ------------------
 1139|       |
 1140|       |    /* Now allocate the memory and initialize p to point to the start of
 1141|       |       it. */
 1142|  39.6k|    buf = (char *)PyMem_Malloc(bufsize);
 1143|  39.6k|    if (buf == NULL) {
  ------------------
  |  Branch (1143:9): [True: 0, False: 39.6k]
  ------------------
 1144|      0|        PyErr_NoMemory();
 1145|      0|        goto exit;
 1146|      0|    }
 1147|  39.6k|    p = buf;
 1148|       |
 1149|       |    /* Add a negative sign if negative, and a plus sign if non-negative
 1150|       |       and always_add_sign is true. */
 1151|  39.6k|    if (sign == 1)
  ------------------
  |  Branch (1151:9): [True: 0, False: 39.6k]
  ------------------
 1152|      0|        *p++ = '-';
 1153|  39.6k|    else if (always_add_sign)
  ------------------
  |  Branch (1153:14): [True: 0, False: 39.6k]
  ------------------
 1154|      0|        *p++ = '+';
 1155|       |
 1156|       |    /* note that exactly one of the three 'if' conditions is true,
 1157|       |       so we include exactly one decimal point */
 1158|       |    /* Zero padding on left of digit string */
 1159|  39.6k|    if (decpt <= 0) {
  ------------------
  |  Branch (1159:9): [True: 1.44k, False: 38.2k]
  ------------------
 1160|  1.44k|        memset(p, '0', decpt-vdigits_start);
 1161|  1.44k|        p += decpt - vdigits_start;
 1162|  1.44k|        *p++ = '.';
 1163|  1.44k|        memset(p, '0', 0-decpt);
 1164|  1.44k|        p += 0-decpt;
 1165|  1.44k|    }
 1166|  38.2k|    else {
 1167|  38.2k|        memset(p, '0', 0-vdigits_start);
 1168|  38.2k|        p += 0 - vdigits_start;
 1169|  38.2k|    }
 1170|       |
 1171|       |    /* Digits, with included decimal point */
 1172|  39.6k|    if (0 < decpt && decpt <= digits_len) {
  ------------------
  |  Branch (1172:9): [True: 38.2k, False: 1.44k]
  |  Branch (1172:22): [True: 36.0k, False: 2.16k]
  ------------------
 1173|  36.0k|        strncpy(p, digits, decpt-0);
 1174|  36.0k|        p += decpt-0;
 1175|  36.0k|        *p++ = '.';
 1176|  36.0k|        strncpy(p, digits+decpt, digits_len-decpt);
 1177|  36.0k|        p += digits_len-decpt;
 1178|  36.0k|    }
 1179|  3.61k|    else {
 1180|  3.61k|        strncpy(p, digits, digits_len);
 1181|  3.61k|        p += digits_len;
 1182|  3.61k|    }
 1183|       |
 1184|       |    /* And zeros on the right */
 1185|  39.6k|    if (digits_len < decpt) {
  ------------------
  |  Branch (1185:9): [True: 2.16k, False: 37.5k]
  ------------------
 1186|  2.16k|        memset(p, '0', decpt-digits_len);
 1187|  2.16k|        p += decpt-digits_len;
 1188|  2.16k|        *p++ = '.';
 1189|  2.16k|        memset(p, '0', vdigits_end-decpt);
 1190|  2.16k|        p += vdigits_end-decpt;
 1191|  2.16k|    }
 1192|  37.5k|    else {
 1193|  37.5k|        memset(p, '0', vdigits_end-digits_len);
 1194|  37.5k|        p += vdigits_end-digits_len;
 1195|  37.5k|    }
 1196|       |
 1197|       |    /* Delete a trailing decimal pt unless using alternative formatting. */
 1198|  39.6k|    if (p[-1] == '.' && !use_alt_formatting)
  ------------------
  |  Branch (1198:9): [True: 20.7k, False: 18.8k]
  |  Branch (1198:25): [True: 20.7k, False: 0]
  ------------------
 1199|  20.7k|        p--;
 1200|       |
 1201|       |    /* Now that we've done zero padding, add an exponent if needed. */
 1202|  39.6k|    if (use_exp) {
  ------------------
  |  Branch (1202:9): [True: 15.0k, False: 24.6k]
  ------------------
 1203|  15.0k|        *p++ = float_strings[OFS_E][0];
  ------------------
  |  |  925|  15.0k|#define OFS_E 2
  ------------------
 1204|  15.0k|        exp_len = sprintf(p, "%+.02d", exp);
 1205|  15.0k|        p += exp_len;
 1206|  15.0k|    }
 1207|  42.8k|  exit:
 1208|  42.8k|    if (buf) {
  ------------------
  |  Branch (1208:9): [True: 42.8k, False: 0]
  ------------------
 1209|  42.8k|        *p = '\0';
 1210|       |        /* It's too late if this fails, as we've already stepped on
 1211|       |           memory that isn't ours. But it's an okay debugging test. */
 1212|  42.8k|        assert(p-buf < bufsize);
  ------------------
  |  Branch (1212:9): [True: 42.8k, False: 0]
  ------------------
 1213|  42.8k|    }
 1214|  42.8k|    if (digits)
  ------------------
  |  Branch (1214:9): [True: 42.8k, False: 0]
  ------------------
 1215|  42.8k|        _Py_dg_freedtoa(digits);
 1216|       |
 1217|  42.8k|    return buf;
 1218|  42.8k|}

PyRun_StringFlags:
 1304|      3|                     PyObject *locals, PyCompilerFlags *flags) {
 1305|       |
 1306|       |    return _PyRun_String(str, NULL, start, globals, locals, flags, 0);
 1307|      3|}
Py_CompileStringObject:
 1560|  24.5k|{
 1561|       |    return _Py_CompileString(str, filename, start, flags, optimize, NULL);
 1562|  24.5k|}
_Py_CompileString:
 1567|  24.5k|{
 1568|  24.5k|    if (check_start(start) < 0) {
  ------------------
  |  Branch (1568:9): [True: 0, False: 24.5k]
  ------------------
 1569|      0|        return NULL;
 1570|      0|    }
 1571|       |
 1572|  24.5k|    PyCodeObject *co;
 1573|  24.5k|    mod_ty mod;
 1574|  24.5k|    PyArena *arena = _PyArena_New();
 1575|  24.5k|    if (arena == NULL)
  ------------------
  |  Branch (1575:9): [True: 0, False: 24.5k]
  ------------------
 1576|      0|        return NULL;
 1577|       |
 1578|  24.5k|    mod = _PyParser_ASTFromString(str, filename, start, flags, arena, module);
 1579|  24.5k|    if (mod == NULL) {
  ------------------
  |  Branch (1579:9): [True: 11.8k, False: 12.7k]
  ------------------
 1580|  11.8k|        _PyArena_Free(arena);
 1581|  11.8k|        return NULL;
 1582|  11.8k|    }
 1583|  12.7k|    if (flags && (flags->cf_flags & PyCF_ONLY_AST)) {
  ------------------
  |  |   17|  12.7k|#define PyCF_ONLY_AST 0x0400
  ------------------
  |  Branch (1583:9): [True: 12.7k, False: 0]
  |  Branch (1583:18): [True: 1.89k, False: 10.8k]
  ------------------
 1584|  1.89k|        int syntax_check_only = ((flags->cf_flags & PyCF_OPTIMIZED_AST) == PyCF_ONLY_AST); /* unoptiomized AST */
  ------------------
  |  |   22|  1.89k|#define PyCF_OPTIMIZED_AST (0x8000 | PyCF_ONLY_AST)
  |  |  ------------------
  |  |  |  |   17|  1.89k|#define PyCF_ONLY_AST 0x0400
  |  |  ------------------
  ------------------
                      int syntax_check_only = ((flags->cf_flags & PyCF_OPTIMIZED_AST) == PyCF_ONLY_AST); /* unoptiomized AST */
  ------------------
  |  |   17|  1.89k|#define PyCF_ONLY_AST 0x0400
  ------------------
 1585|  1.89k|        if (_PyCompile_AstPreprocess(mod, filename, flags, optimize, arena,
  ------------------
  |  Branch (1585:13): [True: 1, False: 1.89k]
  ------------------
 1586|  1.89k|                                     syntax_check_only, module) < 0)
 1587|      1|        {
 1588|      1|            _PyArena_Free(arena);
 1589|      1|            return NULL;
 1590|      1|        }
 1591|  1.89k|        PyObject *result = PyAST_mod2obj(mod);
 1592|  1.89k|        _PyArena_Free(arena);
 1593|  1.89k|        return result;
 1594|  1.89k|    }
 1595|  10.8k|    co = _PyAST_Compile(mod, filename, flags, optimize, arena, module);
 1596|  10.8k|    _PyArena_Free(arena);
 1597|  10.8k|    return (PyObject *)co;
 1598|  12.7k|}
Py_CompileStringExFlags:
 1603|  24.5k|{
 1604|  24.5k|    PyObject *filename, *co;
 1605|  24.5k|    filename = PyUnicode_DecodeFSDefault(filename_str);
 1606|  24.5k|    if (filename == NULL)
  ------------------
  |  Branch (1606:9): [True: 0, False: 24.5k]
  ------------------
 1607|      0|        return NULL;
 1608|  24.5k|    co = Py_CompileStringObject(str, filename, start, flags, optimize);
 1609|  24.5k|    Py_DECREF(filename);
  ------------------
  |  |  430|  24.5k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  24.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  24.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1610|  24.5k|    return co;
 1611|  24.5k|}
_Py_SourceAsString:
 1635|      3|{
 1636|      3|    const char *str;
 1637|      3|    Py_ssize_t size;
 1638|      3|    Py_buffer view;
 1639|       |
 1640|      3|    *cmd_copy = NULL;
 1641|      3|    if (PyUnicode_Check(cmd)) {
  ------------------
  |  |  103|      3|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      3|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 3, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1642|      3|        cf->cf_flags |= PyCF_IGNORE_COOKIE;
  ------------------
  |  |   18|      3|#define PyCF_IGNORE_COOKIE 0x0800
  ------------------
 1643|      3|        str = PyUnicode_AsUTF8AndSize(cmd, &size);
 1644|      3|        if (str == NULL)
  ------------------
  |  Branch (1644:13): [True: 0, False: 3]
  ------------------
 1645|      0|            return NULL;
 1646|      3|    }
 1647|      0|    else if (PyBytes_Check(cmd)) {
  ------------------
  |  |   28|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (760:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1648|      0|        str = PyBytes_AS_STRING(cmd);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1649|      0|        size = PyBytes_GET_SIZE(cmd);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1650|      0|    }
 1651|      0|    else if (PyByteArray_Check(cmd)) {
  ------------------
  |  |   24|      0|#define PyByteArray_Check(self) PyObject_TypeCheck((self), &PyByteArray_Type)
  |  |  ------------------
  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1652|      0|        str = PyByteArray_AS_STRING(cmd);
  ------------------
  |  |   28|      0|#define PyByteArray_AS_STRING(self) PyByteArray_AS_STRING(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1653|      0|        size = PyByteArray_GET_SIZE(cmd);
  ------------------
  |  |   38|      0|#define PyByteArray_GET_SIZE(self) PyByteArray_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1654|      0|    }
 1655|      0|    else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
  ------------------
  |  |  108|      0|#define PyBUF_SIMPLE 0
  ------------------
  |  Branch (1655:14): [True: 0, False: 0]
  ------------------
 1656|       |        /* Copy to NUL-terminated buffer. */
 1657|      0|        *cmd_copy = PyBytes_FromStringAndSize(
 1658|      0|            (const char *)view.buf, view.len);
 1659|      0|        PyBuffer_Release(&view);
 1660|      0|        if (*cmd_copy == NULL) {
  ------------------
  |  Branch (1660:13): [True: 0, False: 0]
  ------------------
 1661|      0|            return NULL;
 1662|      0|        }
 1663|      0|        str = PyBytes_AS_STRING(*cmd_copy);
  ------------------
  |  |   27|      0|#define PyBytes_AS_STRING(op) PyBytes_AS_STRING(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1664|      0|        size = PyBytes_GET_SIZE(*cmd_copy);
  ------------------
  |  |   33|      0|#define PyBytes_GET_SIZE(self) PyBytes_GET_SIZE(_PyObject_CAST(self))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1665|      0|    }
 1666|      0|    else {
 1667|      0|        PyErr_Format(PyExc_TypeError,
 1668|      0|            "%s() arg 1 must be a %s object",
 1669|      0|            funcname, what);
 1670|      0|        return NULL;
 1671|      0|    }
 1672|       |
 1673|      3|    if (strlen(str) != (size_t)size) {
  ------------------
  |  Branch (1673:9): [True: 0, False: 3]
  ------------------
 1674|      0|        PyErr_SetString(PyExc_SyntaxError,
 1675|      0|            "source code string cannot contain null bytes");
 1676|      0|        Py_CLEAR(*cmd_copy);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1677|      0|        return NULL;
 1678|      0|    }
 1679|      3|    return str;
 1680|      3|}
pythonrun.c:run_mod:
 1436|      3|{
 1437|      3|    PyThreadState *tstate = _PyThreadState_GET();
 1438|      3|    PyObject* interactive_filename = filename;
 1439|      3|    if (interactive_src) {
  ------------------
  |  Branch (1439:9): [True: 0, False: 3]
  ------------------
 1440|      0|        PyInterpreterState *interp = tstate->interp;
 1441|      0|        if (generate_new_source) {
  ------------------
  |  Branch (1441:13): [True: 0, False: 0]
  ------------------
 1442|      0|            interactive_filename = get_interactive_filename(
 1443|      0|                filename, interp->_interactive_src_count++);
 1444|      0|        } else {
 1445|      0|            Py_INCREF(interactive_filename);
  ------------------
  |  |  310|      0|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1446|      0|        }
 1447|      0|        if (interactive_filename == NULL) {
  ------------------
  |  Branch (1447:13): [True: 0, False: 0]
  ------------------
 1448|      0|            return NULL;
 1449|      0|        }
 1450|      0|    }
 1451|      3|    PyObject *module = NULL;
 1452|      3|    if (globals && PyDict_GetItemStringRef(globals, "__name__", &module) < 0) {
  ------------------
  |  Branch (1452:9): [True: 3, False: 0]
  |  Branch (1452:20): [True: 0, False: 3]
  ------------------
 1453|      0|        if (interactive_src) {
  ------------------
  |  Branch (1453:13): [True: 0, False: 0]
  ------------------
 1454|      0|            Py_DECREF(interactive_filename);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1455|      0|        }
 1456|      0|        return NULL;
 1457|      0|    }
 1458|       |
 1459|      3|    PyCodeObject *co = _PyAST_Compile(mod, interactive_filename, flags, -1,
 1460|      3|                                      arena, module);
 1461|      3|    Py_XDECREF(module);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1462|      3|    if (co == NULL) {
  ------------------
  |  Branch (1462:9): [True: 0, False: 3]
  ------------------
 1463|      0|        if (interactive_src) {
  ------------------
  |  Branch (1463:13): [True: 0, False: 0]
  ------------------
 1464|      0|            Py_DECREF(interactive_filename);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1465|      0|        }
 1466|      0|        return NULL;
 1467|      0|    }
 1468|       |
 1469|      3|    if (interactive_src) {
  ------------------
  |  Branch (1469:9): [True: 0, False: 3]
  ------------------
 1470|      0|        PyObject *print_tb_func = PyImport_ImportModuleAttrString(
 1471|      0|            "linecache",
 1472|      0|            "_register_code");
 1473|      0|        if (print_tb_func == NULL) {
  ------------------
  |  Branch (1473:13): [True: 0, False: 0]
  ------------------
 1474|      0|            Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1475|      0|            Py_DECREF(interactive_filename);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1476|      0|            return NULL;
 1477|      0|        }
 1478|       |
 1479|      0|        if (!PyCallable_Check(print_tb_func)) {
  ------------------
  |  Branch (1479:13): [True: 0, False: 0]
  ------------------
 1480|      0|            Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1481|      0|            Py_DECREF(interactive_filename);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|      0|            Py_DECREF(print_tb_func);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1483|      0|            PyErr_SetString(PyExc_ValueError, "linecache._register_code is not callable");
 1484|      0|            return NULL;
 1485|      0|        }
 1486|       |
 1487|      0|        PyObject* result = PyObject_CallFunction(
 1488|      0|            print_tb_func, "OOO",
 1489|      0|            co,
 1490|      0|            interactive_src,
 1491|      0|            filename
 1492|      0|        );
 1493|       |
 1494|      0|        Py_DECREF(interactive_filename);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1495|       |
 1496|      0|        Py_XDECREF(print_tb_func);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1497|      0|        Py_XDECREF(result);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1498|      0|        if (!result) {
  ------------------
  |  Branch (1498:13): [True: 0, False: 0]
  ------------------
 1499|      0|            Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1500|      0|            return NULL;
 1501|      0|        }
 1502|      0|    }
 1503|       |
 1504|      3|    if (_PySys_Audit(tstate, "exec", "O", co) < 0) {
  ------------------
  |  Branch (1504:9): [True: 0, False: 3]
  ------------------
 1505|      0|        Py_DECREF(co);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1506|      0|        return NULL;
 1507|      0|    }
 1508|       |
 1509|      3|    PyObject *v = run_eval_code_obj(tstate, co, globals, locals);
 1510|      3|    Py_DECREF(co);
  ------------------
  |  |  430|      3|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1511|      3|    return v;
 1512|      3|}
pythonrun.c:run_eval_code_obj:
 1387|      3|{
 1388|       |    /* Set globals['__builtins__'] if it doesn't exist */
 1389|      3|    if (!globals || !PyAnyDict_Check(globals)) {
  ------------------
  |  |   43|      3|    (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   18|      3|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  760|      6|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (760:41): [True: 3, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_Check(ob) || PyFrozenDict_Check(ob))
  |  |  ------------------
  |  |  |  |   37|      0|#define PyFrozenDict_Check(op) PyObject_TypeCheck((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  378|      0|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (378:40): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1389:9): [True: 0, False: 3]
  ------------------
 1390|      0|        PyErr_SetString(PyExc_SystemError,
 1391|      0|                        "globals must be a real dict or a real frozendict");
 1392|      0|        return NULL;
 1393|      0|    }
 1394|      3|    int has_builtins = PyDict_ContainsString(globals, "__builtins__");
 1395|      3|    if (has_builtins < 0) {
  ------------------
  |  Branch (1395:9): [True: 0, False: 3]
  ------------------
 1396|      0|        return NULL;
 1397|      0|    }
 1398|      3|    if (!has_builtins) {
  ------------------
  |  Branch (1398:9): [True: 0, False: 3]
  ------------------
 1399|      0|        if (PyDict_SetItemString(globals, "__builtins__",
  ------------------
  |  Branch (1399:13): [True: 0, False: 0]
  ------------------
 1400|      0|                                 tstate->interp->builtins) < 0)
 1401|      0|        {
 1402|      0|            return NULL;
 1403|      0|        }
 1404|      0|    }
 1405|       |
 1406|      3|    return PyEval_EvalCode((PyObject*)co, globals, locals);
 1407|      3|}
pythonrun.c:_PyRun_String:
 1259|      3|{
 1260|      3|    if (check_start(start) < 0) {
  ------------------
  |  Branch (1260:9): [True: 0, False: 3]
  ------------------
 1261|      0|        return NULL;
 1262|      0|    }
 1263|       |
 1264|      3|    PyObject *ret = NULL;
 1265|      3|    mod_ty mod;
 1266|      3|    PyArena *arena;
 1267|       |
 1268|      3|    arena = _PyArena_New();
 1269|      3|    if (arena == NULL)
  ------------------
  |  Branch (1269:9): [True: 0, False: 3]
  ------------------
 1270|      0|        return NULL;
 1271|       |
 1272|      3|    PyObject* source = NULL;
 1273|      3|    _Py_DECLARE_STR(anon_string, "<string>");
 1274|       |
 1275|      3|    if (name) {
  ------------------
  |  Branch (1275:9): [True: 0, False: 3]
  ------------------
 1276|      0|        source = PyUnicode_FromString(str);
 1277|      0|        if (!source) {
  ------------------
  |  Branch (1277:13): [True: 0, False: 0]
  ------------------
 1278|      0|            PyErr_Clear();
 1279|      0|        }
 1280|      3|    } else {
 1281|      3|        name = &_Py_STR(anon_string);
  ------------------
  |  |  938|      3|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      3|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      3|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1282|      3|    }
 1283|      3|    PyObject *module = NULL;
 1284|      3|    if (globals && PyDict_GetItemStringRef(globals, "__name__", &module) < 0) {
  ------------------
  |  Branch (1284:9): [True: 3, False: 0]
  |  Branch (1284:20): [True: 0, False: 3]
  ------------------
 1285|      0|        goto done;
 1286|      0|    }
 1287|       |
 1288|      3|    mod = _PyParser_ASTFromString(str, name, start, flags, arena, module);
 1289|      3|    Py_XDECREF(module);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1290|       |
 1291|      3|    if (mod != NULL) {
  ------------------
  |  Branch (1291:9): [True: 3, False: 0]
  ------------------
 1292|      3|        ret = run_mod(mod, name, globals, locals, flags, arena, source, generate_new_source);
 1293|      3|    }
 1294|       |
 1295|      3|done:
 1296|      3|    Py_XDECREF(source);
  ------------------
  |  |  524|      3|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      3|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      3|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|      3|    _PyArena_Free(arena);
 1298|      3|    return ret;
 1299|      3|}
pythonrun.c:check_start:
 1245|  24.5k|{
 1246|  24.5k|    if (start == Py_single_input || start == Py_file_input
  ------------------
  |  |    8|  49.0k|#define Py_single_input 256
  ------------------
                  if (start == Py_single_input || start == Py_file_input
  ------------------
  |  |    9|  43.6k|#define Py_file_input 257
  ------------------
  |  Branch (1246:9): [True: 5.46k, False: 19.0k]
  |  Branch (1246:37): [True: 15.7k, False: 3.34k]
  ------------------
 1247|  3.34k|        || start == Py_eval_input || start == Py_func_type_input)
  ------------------
  |  |   10|  27.8k|#define Py_eval_input 258
  ------------------
                      || start == Py_eval_input || start == Py_func_type_input)
  ------------------
  |  |   11|      0|#define Py_func_type_input 345
  ------------------
  |  Branch (1247:12): [True: 3.34k, False: 0]
  |  Branch (1247:38): [True: 0, False: 0]
  ------------------
 1248|  24.5k|    {
 1249|  24.5k|        return 0;
 1250|  24.5k|    }
 1251|      0|    PyErr_SetString(PyExc_ValueError, "invalid start argument");
 1252|      0|    return -1;
 1253|  24.5k|}

_PyTimeFraction_Set:
   79|      4|{
   80|      4|    if (numer < 1 || denom < 1) {
  ------------------
  |  Branch (80:9): [True: 0, False: 4]
  |  Branch (80:22): [True: 0, False: 4]
  ------------------
   81|      0|        return -1;
   82|      0|    }
   83|       |
   84|      4|    PyTime_t gcd = _PyTime_GCD(numer, denom);
   85|      4|    frac->numer = numer / gcd;
   86|      4|    frac->denom = denom / gcd;
   87|      4|    return 0;
   88|      4|}
_PyLong_FromTime_t:
  226|  1.58k|{
  227|  1.58k|#if SIZEOF_TIME_T == SIZEOF_LONG_LONG
  228|  1.58k|    return PyLong_FromLongLong((long long)t);
  229|       |#elif SIZEOF_TIME_T <= SIZEOF_LONG
  230|       |    return PyLong_FromLong((long)t);
  231|       |#else
  232|       |#   error "unsupported time_t size"
  233|       |#endif
  234|  1.58k|}
_PyTime_FromSeconds:
  539|    734|{
  540|       |    /* ensure that integer overflow cannot happen, int type should have 32
  541|       |       bits, whereas PyTime_t type has at least 64 bits (SEC_TO_NS takes 30
  542|       |       bits). */
  543|    734|    static_assert(INT_MAX <= PyTime_MAX / SEC_TO_NS, "PyTime_t overflow");
  544|    734|    static_assert(INT_MIN >= PyTime_MIN / SEC_TO_NS, "PyTime_t underflow");
  545|       |
  546|    734|    PyTime_t t = (PyTime_t)seconds;
  547|    734|    assert((t >= 0 && t <= PyTime_MAX / SEC_TO_NS)
  ------------------
  |  Branch (547:5): [True: 0, False: 734]
  |  Branch (547:5): [True: 0, False: 0]
  |  Branch (547:5): [True: 734, False: 0]
  |  Branch (547:5): [True: 734, False: 0]
  ------------------
  548|    734|           || (t < 0 && t >= PyTime_MIN / SEC_TO_NS));
  549|    734|    t *= SEC_TO_NS;
  ------------------
  |  |   35|    734|#define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   26|    734|#define SEC_TO_MS 1000
  |  |  ------------------
  |  |               #define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   34|    734|#define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|    734|#define MS_TO_US 1000
  |  |  |  |  ------------------
  |  |  |  |               #define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    734|#define US_TO_NS 1000
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|    734|    return t;
  551|    734|}
_PyTime_FromMicrosecondsClamp:
  556|  97.2k|{
  557|  97.2k|    PyTime_t ns = _PyTime_Mul(us, US_TO_NS);
  ------------------
  |  |   33|  97.2k|#define US_TO_NS 1000
  ------------------
  558|  97.2k|    return ns;
  559|  97.2k|}
PyTime_AsSecondsDouble:
  705|  7.77k|{
  706|       |    /* volatile avoids optimization changing how numbers are rounded */
  707|  7.77k|    volatile double d;
  708|       |
  709|  7.77k|    if (ns % SEC_TO_NS == 0) {
  ------------------
  |  |   35|  7.77k|#define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   26|  7.77k|#define SEC_TO_MS 1000
  |  |  ------------------
  |  |               #define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   34|  7.77k|#define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  7.77k|#define MS_TO_US 1000
  |  |  |  |  ------------------
  |  |  |  |               #define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  7.77k|#define US_TO_NS 1000
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (709:9): [True: 0, False: 7.77k]
  ------------------
  710|       |        /* Divide using integers to avoid rounding issues on the integer part.
  711|       |           1e-9 cannot be stored exactly in IEEE 64-bit. */
  712|      0|        PyTime_t secs = ns / SEC_TO_NS;
  ------------------
  |  |   35|      0|#define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   26|      0|#define SEC_TO_MS 1000
  |  |  ------------------
  |  |               #define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   34|      0|#define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|      0|#define MS_TO_US 1000
  |  |  |  |  ------------------
  |  |  |  |               #define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|      0|#define US_TO_NS 1000
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|      0|        d = (double)secs;
  714|      0|    }
  715|  7.77k|    else {
  716|  7.77k|        d = (double)ns;
  717|  7.77k|        d /= 1e9;
  718|  7.77k|    }
  719|  7.77k|    return d;
  720|  7.77k|}
_PyTime_Init:
 1179|      2|{
 1180|       |#ifdef MS_WINDOWS
 1181|       |    return py_win_perf_counter_frequency(&state->base);
 1182|       |#elif defined(__APPLE__)
 1183|       |    return py_mach_timebase_info(&state->base);
 1184|       |#else
 1185|      2|    return PyStatus_Ok();
 1186|      2|#endif
 1187|      2|}
PyTime_MonotonicRaw:
 1289|  15.5k|{
 1290|  15.5k|    if (py_get_monotonic_clock(result, NULL, 0) < 0) {
  ------------------
  |  Branch (1290:9): [True: 0, False: 15.5k]
  ------------------
 1291|      0|        *result = 0;
 1292|      0|        return -1;
 1293|      0|    }
 1294|  15.5k|    return 0;
 1295|  15.5k|}
PyTime_PerfCounterRaw:
 1321|  15.5k|{
 1322|  15.5k|    return PyTime_MonotonicRaw(result);
 1323|  15.5k|}
_PyTime_localtime:
 1328|      4|{
 1329|       |#ifdef MS_WINDOWS
 1330|       |    if (t >= 0) {
 1331|       |        /* For non-negative timestamps, use localtime_s() */
 1332|       |        int error = localtime_s(tm, &t);
 1333|       |        if (error != 0) {
 1334|       |            errno = error;
 1335|       |            PyErr_SetFromErrno(PyExc_OSError);
 1336|       |            return -1;
 1337|       |        }
 1338|       |        return 0;
 1339|       |    }
 1340|       |
 1341|       |    /* For negative timestamps, use FILETIME-based conversion */
 1342|       |    return _PyTime_windows_filetime(t, tm, 1);
 1343|       |#else /* !MS_WINDOWS */
 1344|       |
 1345|       |#if defined(_AIX) && (SIZEOF_TIME_T < 8)
 1346|       |    /* bpo-34373: AIX does not return NULL if t is too small or too large */
 1347|       |    if (t < -2145916800 /* 1902-01-01 */
 1348|       |       || t > 2145916800 /* 2038-01-01 */) {
 1349|       |        errno = EINVAL;
 1350|       |        PyErr_SetString(PyExc_OverflowError,
 1351|       |                        "localtime argument out of range");
 1352|       |        return -1;
 1353|       |    }
 1354|       |#endif
 1355|       |
 1356|      4|    errno = 0;
 1357|      4|    if (localtime_r(&t, tm) == NULL) {
  ------------------
  |  Branch (1357:9): [True: 0, False: 4]
  ------------------
 1358|      0|        if (errno == 0) {
  ------------------
  |  Branch (1358:13): [True: 0, False: 0]
  ------------------
 1359|      0|            errno = EINVAL;
 1360|      0|        }
 1361|      0|        PyErr_SetFromErrno(PyExc_OSError);
 1362|      0|        return -1;
 1363|      0|    }
 1364|      4|    return 0;
 1365|      4|#endif /* MS_WINDOWS */
 1366|      4|}
pytime.c:_PyTime_GCD:
   63|      4|{
   64|       |    // Euclidean algorithm
   65|      4|    assert(x >= 1);
  ------------------
  |  Branch (65:5): [True: 4, False: 0]
  ------------------
   66|      4|    assert(y >= 1);
  ------------------
  |  Branch (66:5): [True: 4, False: 0]
  ------------------
   67|      8|    while (y != 0) {
  ------------------
  |  Branch (67:12): [True: 4, False: 4]
  ------------------
   68|      4|        PyTime_t tmp = y;
   69|      4|        y = x % y;
   70|      4|        x = tmp;
   71|      4|    }
   72|      4|    assert(x >= 1);
  ------------------
  |  Branch (72:5): [True: 4, False: 0]
  ------------------
   73|      4|    return x;
   74|      4|}
pytime.c:pytime_add:
  117|  15.5k|{
  118|  15.5k|    if (t2 > 0 && *t1 > PyTime_MAX - t2) {
  ------------------
  |  |   12|  15.5k|#define PyTime_MAX INT64_MAX
  ------------------
  |  Branch (118:9): [True: 15.5k, False: 0]
  |  Branch (118:19): [True: 0, False: 15.5k]
  ------------------
  119|      0|        *t1 = PyTime_MAX;
  ------------------
  |  |   12|      0|#define PyTime_MAX INT64_MAX
  ------------------
  120|      0|        return -1;
  121|      0|    }
  122|  15.5k|    else if (t2 < 0 && *t1 < PyTime_MIN - t2) {
  ------------------
  |  |   11|      0|#define PyTime_MIN INT64_MIN
  ------------------
  |  Branch (122:14): [True: 0, False: 15.5k]
  |  Branch (122:24): [True: 0, False: 0]
  ------------------
  123|      0|        *t1 = PyTime_MIN;
  ------------------
  |  |   11|      0|#define PyTime_MIN INT64_MIN
  ------------------
  124|      0|        return -1;
  125|      0|    }
  126|  15.5k|    else {
  127|  15.5k|        *t1 += t2;
  128|  15.5k|        return 0;
  129|  15.5k|    }
  130|  15.5k|}
pytime.c:_PyTime_Mul:
  173|  97.2k|{
  174|  97.2k|    (void)pytime_mul(&t, k);
  175|  97.2k|    return t;
  176|  97.2k|}
pytime.c:pytime_mul:
  157|   112k|{
  158|   112k|    assert(k >= 0);
  ------------------
  |  Branch (158:5): [True: 112k, False: 0]
  ------------------
  159|   112k|    if (pytime_mul_check_overflow(*t, k)) {
  ------------------
  |  Branch (159:9): [True: 0, False: 112k]
  ------------------
  160|      0|        *t = (*t >= 0) ? PyTime_MAX : PyTime_MIN;
  ------------------
  |  |   12|      0|#define PyTime_MAX INT64_MAX
  ------------------
                      *t = (*t >= 0) ? PyTime_MAX : PyTime_MIN;
  ------------------
  |  |   11|      0|#define PyTime_MIN INT64_MIN
  ------------------
  |  Branch (160:14): [True: 0, False: 0]
  ------------------
  161|      0|        return -1;
  162|      0|    }
  163|   112k|    else {
  164|   112k|        *t *= k;
  165|   112k|        return 0;
  166|   112k|    }
  167|   112k|}
pytime.c:pytime_mul_check_overflow:
  143|   112k|{
  144|   112k|    if (b != 0) {
  ------------------
  |  Branch (144:9): [True: 112k, False: 0]
  ------------------
  145|   112k|        assert(b > 0);
  ------------------
  |  Branch (145:9): [True: 112k, False: 0]
  ------------------
  146|   112k|        return ((a < PyTime_MIN / b) || (PyTime_MAX / b < a));
  ------------------
  |  |   11|   112k|#define PyTime_MIN INT64_MIN
  ------------------
                      return ((a < PyTime_MIN / b) || (PyTime_MAX / b < a));
  ------------------
  |  |   12|   112k|#define PyTime_MAX INT64_MAX
  ------------------
  |  Branch (146:17): [True: 0, False: 112k]
  |  Branch (146:41): [True: 0, False: 112k]
  ------------------
  147|   112k|    }
  148|      0|    else {
  149|      0|        return 0;
  150|      0|    }
  151|   112k|}
pytime.c:pytime_fromtimespec:
  565|  15.5k|{
  566|  15.5k|    PyTime_t t, tv_nsec;
  567|       |
  568|  15.5k|    static_assert(sizeof(ts->tv_sec) <= sizeof(PyTime_t),
  569|  15.5k|                  "timespec.tv_sec is larger than PyTime_t");
  570|  15.5k|    t = (PyTime_t)ts->tv_sec;
  571|       |
  572|  15.5k|    int res1 = pytime_mul(&t, SEC_TO_NS);
  ------------------
  |  |   35|  15.5k|#define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   26|  15.5k|#define SEC_TO_MS 1000
  |  |  ------------------
  |  |               #define SEC_TO_NS (SEC_TO_MS * MS_TO_NS)
  |  |  ------------------
  |  |  |  |   34|  15.5k|#define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   29|  15.5k|#define MS_TO_US 1000
  |  |  |  |  ------------------
  |  |  |  |               #define MS_TO_NS (MS_TO_US * US_TO_NS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|  15.5k|#define US_TO_NS 1000
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|       |
  574|  15.5k|    tv_nsec = ts->tv_nsec;
  575|  15.5k|    int res2 = pytime_add(&t, tv_nsec);
  576|       |
  577|  15.5k|    *tp = t;
  578|       |
  579|  15.5k|    if (raise_exc && (res1 < 0 || res2 < 0)) {
  ------------------
  |  Branch (579:9): [True: 0, False: 15.5k]
  |  Branch (579:23): [True: 0, False: 0]
  |  Branch (579:35): [True: 0, False: 0]
  ------------------
  580|      0|        pytime_overflow();
  581|      0|        return -1;
  582|      0|    }
  583|  15.5k|    return 0;
  584|  15.5k|}
pytime.c:py_get_monotonic_clock:
 1192|  15.5k|{
 1193|  15.5k|    assert(info == NULL || raise_exc);
  ------------------
  |  Branch (1193:5): [True: 15.5k, False: 0]
  |  Branch (1193:5): [True: 0, False: 0]
  ------------------
 1194|  15.5k|    if (raise_exc) {
  ------------------
  |  Branch (1194:9): [True: 0, False: 15.5k]
  ------------------
 1195|       |        // raise_exc requires to hold a thread state
 1196|      0|        _Py_AssertHoldsTstate();
  ------------------
  |  |  324|      0|#define _Py_AssertHoldsTstate() _Py_AssertHoldsTstateFunc(__func__)
  ------------------
 1197|      0|    }
 1198|       |
 1199|       |#if defined(MS_WINDOWS)
 1200|       |    if (py_get_win_perf_counter(tp, info, raise_exc) < 0) {
 1201|       |        return -1;
 1202|       |    }
 1203|       |#elif defined(__APPLE__)
 1204|       |    if (info) {
 1205|       |        info->implementation = "mach_absolute_time()";
 1206|       |        info->resolution = _PyTimeFraction_Resolution(&_PyRuntime.time.base);
 1207|       |        info->monotonic = 1;
 1208|       |        info->adjustable = 0;
 1209|       |    }
 1210|       |
 1211|       |    uint64_t uticks = mach_absolute_time();
 1212|       |    // unsigned => signed
 1213|       |    assert(uticks <= (uint64_t)PyTime_MAX);
 1214|       |    PyTime_t ticks = (PyTime_t)uticks;
 1215|       |
 1216|       |    PyTime_t ns = _PyTimeFraction_Mul(ticks, &_PyRuntime.time.base);
 1217|       |    *tp = ns;
 1218|       |
 1219|       |#elif defined(__hpux)
 1220|       |    hrtime_t time = gethrtime();
 1221|       |    if (time == -1) {
 1222|       |        if (raise_exc) {
 1223|       |            PyErr_SetFromErrno(PyExc_OSError);
 1224|       |        }
 1225|       |        return -1;
 1226|       |    }
 1227|       |
 1228|       |    *tp = time;
 1229|       |
 1230|       |    if (info) {
 1231|       |        info->implementation = "gethrtime()";
 1232|       |        info->resolution = 1e-9;
 1233|       |        info->monotonic = 1;
 1234|       |        info->adjustable = 0;
 1235|       |    }
 1236|       |
 1237|       |#else
 1238|       |
 1239|       |#ifdef CLOCK_HIGHRES
 1240|       |    const clockid_t clk_id = CLOCK_HIGHRES;
 1241|       |    const char *implementation = "clock_gettime(CLOCK_HIGHRES)";
 1242|       |#else
 1243|  15.5k|    const clockid_t clk_id = CLOCK_MONOTONIC;
 1244|  15.5k|    const char *implementation = "clock_gettime(CLOCK_MONOTONIC)";
 1245|  15.5k|#endif
 1246|       |
 1247|  15.5k|    struct timespec ts;
 1248|  15.5k|    if (clock_gettime(clk_id, &ts) != 0) {
  ------------------
  |  Branch (1248:9): [True: 0, False: 15.5k]
  ------------------
 1249|      0|        if (raise_exc) {
  ------------------
  |  Branch (1249:13): [True: 0, False: 0]
  ------------------
 1250|      0|            PyErr_SetFromErrno(PyExc_OSError);
 1251|      0|            return -1;
 1252|      0|        }
 1253|      0|        return -1;
 1254|      0|    }
 1255|       |
 1256|  15.5k|    if (pytime_fromtimespec(tp, &ts, raise_exc) < 0) {
  ------------------
  |  Branch (1256:9): [True: 0, False: 15.5k]
  ------------------
 1257|      0|        return -1;
 1258|      0|    }
 1259|       |
 1260|  15.5k|    if (info) {
  ------------------
  |  Branch (1260:9): [True: 0, False: 15.5k]
  ------------------
 1261|      0|        info->monotonic = 1;
 1262|      0|        info->implementation = implementation;
 1263|      0|        info->adjustable = 0;
 1264|      0|        struct timespec res;
 1265|      0|        if (clock_getres(clk_id, &res) != 0) {
  ------------------
  |  Branch (1265:13): [True: 0, False: 0]
  ------------------
 1266|      0|            PyErr_SetFromErrno(PyExc_OSError);
 1267|      0|            return -1;
 1268|      0|        }
 1269|      0|        info->resolution = res.tv_sec + res.tv_nsec * 1e-9;
 1270|      0|    }
 1271|  15.5k|#endif
 1272|  15.5k|    return 0;
 1273|  15.5k|}

_PySlotIterator_InitLegacy:
   61|    217|{
   62|    217|    init_with_kind(it, slots, kind, kind);
   63|    217|}
_PySlotIterator_Rewind:
   67|    131|{
   68|    131|    MSG("");
   69|    131|    MSG("rewind (%s slot iterator)", kind_name(it->kind));
   70|    131|    assert (it->is_at_end);
  ------------------
  |  Branch (70:5): [True: 131, False: 0]
  ------------------
   71|    131|    assert (it->recursion_level == 0);
  ------------------
  |  Branch (71:5): [True: 131, False: 0]
  ------------------
   72|    131|    assert (it->state == it->states);
  ------------------
  |  Branch (72:5): [True: 131, False: 0]
  ------------------
   73|    131|    it->is_at_end = false;
   74|    131|    it->state->any_slot = slots;
   75|       |    it->is_first_run = false;
   76|    131|}
_PySlotIterator_SawSlot:
   92|  1.31k|{
   93|  1.31k|    assert (id > 0);
  ------------------
  |  Branch (93:5): [True: 1.31k, False: 0]
  ------------------
   94|  1.31k|    assert (id < _Py_slot_COUNT);
  ------------------
  |  Branch (94:5): [True: 1.31k, False: 0]
  ------------------
   95|  1.31k|    return it->seen[seen_index(id)] & seen_mask(id);
   96|  1.31k|}
_PySlotIterator_Next:
  116|  2.70k|{
  117|  2.70k|    MSG("next");
  118|  2.70k|    assert(it);
  ------------------
  |  Branch (118:5): [True: 2.70k, False: 0]
  ------------------
  119|  2.70k|    assert(!it->is_at_end);
  ------------------
  |  Branch (119:5): [True: 2.70k, False: 0]
  ------------------
  120|  2.70k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (120:5): [True: 2.70k, False: 0]
  ------------------
  121|       |
  122|  2.70k|    it->current.sl_id = -1;
  123|       |
  124|  3.05k|    while (true) {
  ------------------
  |  Branch (124:12): [True: 3.05k, Folded]
  ------------------
  125|  3.05k|        if (it->state->slot == NULL) {
  ------------------
  |  Branch (125:13): [True: 348, False: 2.70k]
  ------------------
  126|    348|            if (it->recursion_level == 0) {
  ------------------
  |  Branch (126:17): [True: 348, False: 0]
  ------------------
  127|    348|                MSG("end (initial nesting level done)");
  128|    348|                it->is_at_end = true;
  129|    348|                return 0;
  130|    348|            }
  131|      0|            MSG("pop nesting level %d", (int)it->recursion_level);
  132|      0|            it->recursion_level--;
  133|      0|            it->state = &it->states[it->recursion_level];
  134|      0|            advance(it);
  135|      0|            continue;
  136|    348|        }
  137|       |
  138|  2.70k|        switch (it->state->slot_struct_kind) {
  139|      0|            case _PySlot_KIND_SLOT: {
  ------------------
  |  Branch (139:13): [True: 0, False: 2.70k]
  ------------------
  140|      0|                MSG("copying PySlot structure");
  141|      0|                it->current = *it->state->slot;
  142|      0|            } break;
  143|  2.29k|            case _PySlot_KIND_TYPE: {
  ------------------
  |  Branch (143:13): [True: 2.29k, False: 418]
  ------------------
  144|  2.29k|                MSG("converting PyType_Slot structure");
  145|  2.29k|                memset(&it->current, 0, sizeof(it->current));
  146|  2.29k|                it->current.sl_id = (uint16_t)it->state->tp_slot->slot;
  147|  2.29k|                it->current.sl_flags = PySlot_INTPTR;
  ------------------
  |  |   23|  2.29k|#define PySlot_INTPTR 0x0004
  ------------------
  148|  2.29k|                it->current.sl_ptr = (void*)it->state->tp_slot->pfunc;
  149|  2.29k|            } break;
  150|    418|            case _PySlot_KIND_MOD: {
  ------------------
  |  Branch (150:13): [True: 418, False: 2.29k]
  ------------------
  151|    418|                MSG("converting PyModuleDef_Slot structure");
  152|    418|                memset(&it->current, 0, sizeof(it->current));
  153|    418|                it->current.sl_id = (uint16_t)it->state->mod_slot->slot;
  154|    418|                it->current.sl_flags = PySlot_INTPTR;
  ------------------
  |  |   23|    418|#define PySlot_INTPTR 0x0004
  ------------------
  155|    418|                it->current.sl_ptr = (void*)it->state->mod_slot->value;
  156|    418|            } break;
  157|      0|            default: {
  ------------------
  |  Branch (157:13): [True: 0, False: 2.70k]
  ------------------
  158|      0|                Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  159|      0|            } break;
  160|  2.70k|        }
  161|       |
  162|       |        /* shorter local names */
  163|  2.70k|        PySlot *const result = &it->current;
  164|  2.70k|        uint16_t flags = result->sl_flags;
  165|       |
  166|  2.70k|        MSG("slot %d, flags 0x%x, from %p",
  167|  2.70k|            (int)result->sl_id, (unsigned)flags, it->state->slot);
  168|       |
  169|  2.70k|        uint16_t orig_id = result->sl_id;
  170|  2.70k|        switch (it->kind) {
  171|  2.29k|            case _PySlot_KIND_TYPE:
  ------------------
  |  Branch (171:13): [True: 2.29k, False: 418]
  ------------------
  172|  2.29k|                result->sl_id = _PySlot_resolve_type_slot(result->sl_id);
  173|  2.29k|                break;
  174|    418|            case _PySlot_KIND_MOD:
  ------------------
  |  Branch (174:13): [True: 418, False: 2.29k]
  ------------------
  175|    418|                result->sl_id = _PySlot_resolve_mod_slot(result->sl_id);
  176|    418|                break;
  177|      0|            default:
  ------------------
  |  Branch (177:13): [True: 0, False: 2.70k]
  ------------------
  178|      0|                Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  179|  2.70k|        }
  180|  2.70k|        MSG("resolved to slot %d (%s)",
  181|  2.70k|            (int)result->sl_id, _PySlot_GetName(result->sl_id));
  182|       |
  183|  2.70k|        if (result->sl_id == Py_slot_invalid) {
  ------------------
  |  |   25|  2.70k|#define Py_slot_invalid 0xffff
  ------------------
  |  Branch (183:13): [True: 0, False: 2.70k]
  ------------------
  184|      0|            MSG("error (unknown/invalid slot)");
  185|      0|            if (flags & PySlot_OPTIONAL) {
  ------------------
  |  |   21|      0|#define PySlot_OPTIONAL 0x0001
  ------------------
  |  Branch (185:17): [True: 0, False: 0]
  ------------------
  186|      0|                advance(it);
  187|      0|                continue;
  188|      0|            }
  189|      0|            _PySlot_err_bad_slot(kind_name(it->kind), orig_id);
  190|      0|            goto error;
  191|      0|        }
  192|  2.70k|        if (result->sl_id == Py_slot_end) {
  ------------------
  |  |   12|  2.70k|#define Py_slot_end 0
  ------------------
  |  Branch (192:13): [True: 348, False: 2.36k]
  ------------------
  193|    348|            MSG("sentinel slot, flags %x", (unsigned)flags);
  194|    348|            if (flags & PySlot_OPTIONAL) {
  ------------------
  |  |   21|    348|#define PySlot_OPTIONAL 0x0001
  ------------------
  |  Branch (194:17): [True: 0, False: 348]
  ------------------
  195|      0|                MSG("error (bad flags on sentinel)");
  196|      0|                PyErr_Format(PyExc_SystemError,
  197|      0|                            "invalid flags for Py_slot_end: 0x%x",
  198|      0|                             (unsigned int)flags);
  199|      0|                goto error;
  200|      0|            }
  201|    348|            it->state->slot = NULL;
  202|    348|            continue;
  203|    348|        }
  204|       |
  205|  2.36k|        if (result->sl_id == Py_slot_subslots
  ------------------
  |  |  100|  4.72k|#define Py_slot_subslots 92
  ------------------
  |  Branch (205:13): [True: 0, False: 2.36k]
  ------------------
  206|  2.36k|            || result->sl_id == Py_tp_slots
  ------------------
  |  |  101|  4.72k|#define Py_tp_slots 93
  ------------------
  |  Branch (206:16): [True: 0, False: 2.36k]
  ------------------
  207|  2.36k|            || result->sl_id == Py_mod_slots
  ------------------
  |  |  102|  2.36k|#define Py_mod_slots 94
  ------------------
  |  Branch (207:16): [True: 0, False: 2.36k]
  ------------------
  208|  2.36k|        ) {
  209|      0|            if (result->sl_ptr == NULL) {
  ------------------
  |  Branch (209:17): [True: 0, False: 0]
  ------------------
  210|      0|                MSG("NULL subslots; skipping");
  211|      0|                advance(it);
  212|      0|                continue;
  213|      0|            }
  214|      0|            if ((it->states[0].slot_struct_kind == _PySlot_KIND_MOD)
  ------------------
  |  Branch (214:17): [True: 0, False: 0]
  ------------------
  215|      0|                && (it->state->slot_struct_kind == _PySlot_KIND_SLOT)
  ------------------
  |  Branch (215:20): [True: 0, False: 0]
  ------------------
  216|      0|                && !(result->sl_flags & PySlot_STATIC))
  ------------------
  |  |   22|      0|#define PySlot_STATIC 0x0002
  ------------------
  |  Branch (216:20): [True: 0, False: 0]
  ------------------
  217|      0|            {
  218|      0|                PyErr_Format(PyExc_SystemError,
  219|      0|                             "slots included from PyModuleDef must be static");
  220|      0|                goto error;
  221|      0|            }
  222|      0|            it->recursion_level++;
  223|      0|            MSG("recursing into level %d", it->recursion_level);
  224|      0|            if (it->recursion_level >= _PySlot_MAX_NESTING) {
  ------------------
  |  |   39|      0|#define _PySlot_MAX_NESTING 5
  ------------------
  |  Branch (224:17): [True: 0, False: 0]
  ------------------
  225|      0|                MSG("error (too much nesting)");
  226|      0|                PyErr_Format(PyExc_SystemError,
  227|      0|                            "%s (slot %d): too many levels of nested slots",
  228|      0|                            _PySlot_GetName(result->sl_id), orig_id);
  229|      0|                goto error;
  230|      0|            }
  231|      0|            it->state = &it->states[it->recursion_level];
  232|      0|            memset(it->state, 0, sizeof(_PySlotIterator_state));
  233|      0|            it->state->slot = result->sl_ptr;
  234|      0|            switch (result->sl_id) {
  ------------------
  |  Branch (234:21): [True: 0, False: 0]
  ------------------
  235|      0|                case Py_slot_subslots:
  ------------------
  |  |  100|      0|#define Py_slot_subslots 92
  ------------------
  |  Branch (235:17): [True: 0, False: 0]
  ------------------
  236|      0|                    it->state->slot_struct_kind = _PySlot_KIND_SLOT; break;
  237|      0|                case Py_tp_slots:
  ------------------
  |  |  101|      0|#define Py_tp_slots 93
  ------------------
  |  Branch (237:17): [True: 0, False: 0]
  ------------------
  238|      0|                    it->state->slot_struct_kind = _PySlot_KIND_TYPE; break;
  239|      0|                case Py_mod_slots:
  ------------------
  |  |  102|      0|#define Py_mod_slots 94
  ------------------
  |  Branch (239:17): [True: 0, False: 0]
  ------------------
  240|      0|                    it->state->slot_struct_kind = _PySlot_KIND_MOD; break;
  241|      0|            }
  242|      0|            continue;
  243|      0|        }
  244|       |
  245|  2.36k|        if (flags & PySlot_INTPTR) {
  ------------------
  |  |   23|  2.36k|#define PySlot_INTPTR 0x0004
  ------------------
  |  Branch (245:13): [True: 2.36k, False: 0]
  ------------------
  246|  2.36k|            MSG("casting from intptr");
  247|       |            /* this should compile to nothing on common architectures */
  248|  2.36k|            switch (_PySlot_get_dtype(result->sl_id)) {
  ------------------
  |  Branch (248:21): [True: 2.36k, False: 0]
  ------------------
  249|      0|                case _PySlot_DTYPE_SIZE: {
  ------------------
  |  Branch (249:17): [True: 0, False: 2.36k]
  ------------------
  250|      0|                    result->sl_size = (Py_ssize_t)(intptr_t)result->sl_ptr;
  251|      0|                } break;
  252|      0|                case _PySlot_DTYPE_INT64: {
  ------------------
  |  Branch (252:17): [True: 0, False: 2.36k]
  ------------------
  253|      0|                    result->sl_int64 = (int64_t)(intptr_t)result->sl_ptr;
  254|      0|                } break;
  255|    172|                case _PySlot_DTYPE_UINT64: {
  ------------------
  |  Branch (255:17): [True: 172, False: 2.18k]
  ------------------
  256|    172|                    result->sl_uint64 = (uint64_t)(intptr_t)result->sl_ptr;
  257|    172|                } break;
  258|    720|                case _PySlot_DTYPE_PTR:
  ------------------
  |  Branch (258:17): [True: 720, False: 1.64k]
  ------------------
  259|  2.18k|                case _PySlot_DTYPE_FUNC:
  ------------------
  |  Branch (259:17): [True: 1.46k, False: 892]
  ------------------
  260|  2.18k|                case _PySlot_DTYPE_VOID:
  ------------------
  |  Branch (260:17): [True: 0, False: 2.36k]
  ------------------
  261|  2.18k|                    break;
  262|  2.36k|            }
  263|  2.36k|        }
  264|       |
  265|  2.36k|        advance(it);
  266|  2.36k|        switch (_PySlot_get_dtype(result->sl_id)) {
  ------------------
  |  Branch (266:17): [True: 2.36k, False: 0]
  ------------------
  267|      0|            case _PySlot_DTYPE_VOID:
  ------------------
  |  Branch (267:13): [True: 0, False: 2.36k]
  ------------------
  268|    720|            case _PySlot_DTYPE_PTR:
  ------------------
  |  Branch (268:13): [True: 720, False: 1.64k]
  ------------------
  269|    720|                MSG("result: %d (%s): %p",
  270|    720|                    (int)result->sl_id, _PySlot_GetName(result->sl_id),
  271|    720|                    (void*)result->sl_ptr);
  272|    720|                break;
  273|  1.46k|            case _PySlot_DTYPE_FUNC:
  ------------------
  |  Branch (273:13): [True: 1.46k, False: 892]
  ------------------
  274|  1.46k|                MSG("result: %d (%s): %p",
  275|  1.46k|                    (int)result->sl_id, _PySlot_GetName(result->sl_id),
  276|  1.46k|                    (void*)result->sl_func);
  277|  1.46k|                break;
  278|      0|            case _PySlot_DTYPE_SIZE:
  ------------------
  |  Branch (278:13): [True: 0, False: 2.36k]
  ------------------
  279|      0|                MSG("result: %d (%s): %zd",
  280|      0|                    (int)result->sl_id, _PySlot_GetName(result->sl_id),
  281|      0|                    (Py_ssize_t)result->sl_size);
  282|      0|                break;
  283|      0|            case _PySlot_DTYPE_INT64:
  ------------------
  |  Branch (283:13): [True: 0, False: 2.36k]
  ------------------
  284|      0|                MSG("result: %d (%s): %ld",
  285|      0|                    (int)result->sl_id,  _PySlot_GetName(result->sl_id),
  286|      0|                    (long)result->sl_int64);
  287|      0|                break;
  288|    172|            case _PySlot_DTYPE_UINT64:
  ------------------
  |  Branch (288:13): [True: 172, False: 2.18k]
  ------------------
  289|    172|                MSG("result: %d (%s): %lu (0x%lx)",
  290|    172|                    (int)result->sl_id, _PySlot_GetName(result->sl_id),
  291|    172|                    (unsigned long)result->sl_int64,
  292|    172|                    (unsigned long)result->sl_int64);
  293|    172|                break;
  294|  2.36k|        }
  295|  2.36k|        assert (result->sl_id > 0);
  ------------------
  |  Branch (295:9): [True: 2.36k, False: 0]
  ------------------
  296|  2.36k|        assert (result->sl_id <= _Py_slot_COUNT);
  ------------------
  |  Branch (296:9): [True: 2.36k, False: 0]
  ------------------
  297|  2.36k|        if (it->is_first_run && (handle_first_run(it) < 0)) {
  ------------------
  |  Branch (297:13): [True: 1.34k, False: 1.01k]
  |  Branch (297:33): [True: 0, False: 1.34k]
  ------------------
  298|      0|            goto error;
  299|      0|        }
  300|  2.36k|        return result->sl_id != Py_slot_end;
  ------------------
  |  |   12|  2.36k|#define Py_slot_end 0
  ------------------
  301|  2.36k|    }
  302|  2.70k|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  303|       |
  304|      0|error:
  305|      0|    it->current.sl_id = Py_slot_invalid;
  ------------------
  |  |   25|      0|#define Py_slot_invalid 0xffff
  ------------------
  306|       |    return true;
  307|  2.70k|}
slots.c:init_with_kind:
   36|    217|{
   37|    217|    MSG("");
   38|    217|    MSG("init (%s slot iterator)", kind_name(result_kind));
   39|    217|    it->state = it->states;
   40|    217|    it->state->any_slot = slots;
   41|    217|    it->state->slot_struct_kind = slot_struct_kind;
   42|    217|    it->kind = result_kind;
   43|    217|    it->name = NULL;
   44|    217|    it->recursion_level = 0;
   45|    217|    it->is_at_end = false;
   46|       |    it->is_first_run = true;
   47|    217|    it->current.sl_id = 0;
   48|    217|    memset(it->seen, 0, sizeof(it->seen));
   49|    217|}
slots.c:seen_index:
   80|  2.66k|{
   81|  2.66k|    return id / _PySlot_SEEN_ENTRY_BITS;
  ------------------
  |  |   53|  2.66k|#define _PySlot_SEEN_ENTRY_BITS (8 * sizeof(unsigned int))
  ------------------
   82|  2.66k|}
slots.c:seen_mask:
   86|  2.66k|{
   87|  2.66k|    return ((unsigned int)1) << (id % _PySlot_SEEN_ENTRY_BITS);
  ------------------
  |  |   53|  2.66k|#define _PySlot_SEEN_ENTRY_BITS (8 * sizeof(unsigned int))
  ------------------
   88|  2.66k|}
slots.c:advance:
  101|  2.36k|{
  102|  2.36k|    MSG("advance (at level %d)", (int)it->recursion_level);
  103|  2.36k|    switch (it->state->slot_struct_kind) {
  104|      0|        case _PySlot_KIND_SLOT: it->state->slot++; break;
  ------------------
  |  Branch (104:9): [True: 0, False: 2.36k]
  ------------------
  105|  2.02k|        case _PySlot_KIND_TYPE: it->state->tp_slot++; break;
  ------------------
  |  Branch (105:9): [True: 2.02k, False: 332]
  ------------------
  106|    332|        case _PySlot_KIND_MOD: it->state->mod_slot++; break;
  ------------------
  |  Branch (106:9): [True: 332, False: 2.02k]
  ------------------
  107|      0|        default:
  ------------------
  |  Branch (107:9): [True: 0, False: 2.36k]
  ------------------
  108|      0|            Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  109|  2.36k|    }
  110|  2.36k|}
slots.c:handle_first_run:
  312|  1.34k|{
  313|  1.34k|    int id = it->current.sl_id;
  314|       |
  315|  1.34k|    if (_PySlot_get_must_be_static(id)) {
  ------------------
  |  Branch (315:9): [True: 221, False: 1.12k]
  ------------------
  316|    221|        if (!(it->current.sl_flags & PySlot_STATIC)
  ------------------
  |  |   22|    221|#define PySlot_STATIC 0x0002
  ------------------
  |  Branch (316:13): [True: 221, False: 0]
  ------------------
  317|    221|            && (it->state->slot_struct_kind == _PySlot_KIND_SLOT))
  ------------------
  |  Branch (317:16): [True: 0, False: 221]
  ------------------
  318|      0|        {
  319|      0|            PyErr_Format(
  320|      0|                PyExc_SystemError,
  321|      0|                "%s requires PySlot_STATIC",
  322|      0|                _PySlot_GetName(id));
  323|      0|            return -1;
  324|      0|        }
  325|    221|    }
  326|       |
  327|  1.34k|    _PySlot_PROBLEM_HANDLING null_handling = _PySlot_get_null_handling(id);
  328|  1.34k|    if (null_handling != _PySlot_PROBLEM_ALLOW) {
  ------------------
  |  Branch (328:9): [True: 1.07k, False: 272]
  ------------------
  329|  1.07k|        bool is_null = false;
  330|  1.07k|        switch (_PySlot_get_dtype(id)) {
  331|    299|            case _PySlot_DTYPE_PTR: {
  ------------------
  |  Branch (331:13): [True: 299, False: 775]
  ------------------
  332|    299|                is_null = it->current.sl_ptr == NULL;
  333|    299|            } break;
  334|    775|            case _PySlot_DTYPE_FUNC: {
  ------------------
  |  Branch (334:13): [True: 775, False: 299]
  ------------------
  335|    775|                is_null = it->current.sl_func == NULL;
  336|    775|            } break;
  337|      0|            default: {
  ------------------
  |  Branch (337:13): [True: 0, False: 1.07k]
  ------------------
  338|       |                //Py_UNREACHABLE();
  339|      0|            } break;
  340|  1.07k|        }
  341|  1.07k|        if (is_null) {
  ------------------
  |  Branch (341:13): [True: 0, False: 1.07k]
  ------------------
  342|      0|            MSG("slot is NULL but shouldn't");
  343|      0|            if (null_handling == _PySlot_PROBLEM_REJECT) {
  ------------------
  |  Branch (343:17): [True: 0, False: 0]
  ------------------
  344|      0|                MSG("error (NULL rejected)");
  345|      0|                PyErr_Format(PyExc_SystemError,
  346|      0|                             "NULL not allowed for slot %s",
  347|      0|                             _PySlot_GetName(id));
  348|      0|                return -1;
  349|      0|            }
  350|      0|            if (it->states[0].slot_struct_kind == _PySlot_KIND_SLOT) {
  ------------------
  |  Branch (350:17): [True: 0, False: 0]
  ------------------
  351|      0|                MSG("deprecated NULL");
  352|      0|                if (PyErr_WarnFormat(
  ------------------
  |  Branch (352:21): [True: 0, False: 0]
  ------------------
  353|      0|                    PyExc_DeprecationWarning,
  354|      0|                    1,
  355|      0|                    "NULL value in slot %s is deprecated",
  356|      0|                    _PySlot_GetName(id)) < 0)
  357|      0|                {
  358|      0|                    return -1;
  359|      0|                }
  360|      0|            }
  361|      0|            else {
  362|      0|                MSG("unwanted NULL in legacy struct");
  363|      0|            }
  364|      0|        }
  365|  1.07k|    }
  366|       |
  367|  1.34k|    _PySlot_PROBLEM_HANDLING duplicate_handling = _PySlot_get_duplicate_handling(id);
  368|  1.34k|    if (duplicate_handling != _PySlot_PROBLEM_ALLOW) {
  ------------------
  |  Branch (368:9): [True: 1.18k, False: 160]
  ------------------
  369|  1.18k|        if (_PySlotIterator_SawSlot(it, id)) {
  ------------------
  |  Branch (369:13): [True: 0, False: 1.18k]
  ------------------
  370|      0|            MSG("slot was seen before but shouldn't be duplicated");
  371|      0|            if (duplicate_handling == _PySlot_PROBLEM_REJECT) {
  ------------------
  |  Branch (371:17): [True: 0, False: 0]
  ------------------
  372|      0|                MSG("error (duplicate rejected)");
  373|      0|                PyErr_Format(
  374|      0|                    PyExc_SystemError,
  375|      0|                    "%s%s%s has multiple %s (%d) slots",
  376|      0|                    kind_name(it->kind),
  377|      0|                    it->name ? " " : "",
  ------------------
  |  Branch (377:21): [True: 0, False: 0]
  ------------------
  378|      0|                    it->name ? it->name : "",
  ------------------
  |  Branch (378:21): [True: 0, False: 0]
  ------------------
  379|      0|                    _PySlot_GetName(id),
  380|      0|                    (int)it->current.sl_id);
  381|      0|                return -1;
  382|      0|            }
  383|      0|            if (it->states[0].slot_struct_kind == _PySlot_KIND_SLOT) {
  ------------------
  |  Branch (383:17): [True: 0, False: 0]
  ------------------
  384|      0|                MSG("deprecated duplicate");
  385|      0|                if (PyErr_WarnFormat(
  ------------------
  |  Branch (385:21): [True: 0, False: 0]
  ------------------
  386|      0|                        PyExc_DeprecationWarning,
  387|      0|                        0,
  388|      0|                        "%s%s%s has multiple %s (%d) slots. This is deprecated.",
  389|      0|                        kind_name(it->kind),
  390|      0|                        it->name ? " " : "",
  ------------------
  |  Branch (390:25): [True: 0, False: 0]
  ------------------
  391|      0|                        it->name ? it->name : "",
  ------------------
  |  Branch (391:25): [True: 0, False: 0]
  ------------------
  392|      0|                        _PySlot_GetName(id),
  393|      0|                        (int)it->current.sl_id) < 0) {
  394|      0|                    return -1;
  395|      0|                }
  396|      0|            }
  397|      0|            else {
  398|      0|                MSG("unwanted duplicate in legacy struct");
  399|      0|            }
  400|      0|        }
  401|  1.18k|    }
  402|  1.34k|    it->seen[seen_index(id)] |= seen_mask(id);
  403|  1.34k|    return 0;
  404|  1.34k|}

_PyCode_Quicken:
   64|  56.1k|{
   65|  56.1k|    #if ENABLE_SPECIALIZATION
   66|  56.1k|    _Py_BackoffCounter jump_counter, adaptive_counter, resume_counter;
   67|  56.1k|    if (enable_counters) {
  ------------------
  |  Branch (67:9): [True: 56.1k, False: 0]
  ------------------
   68|  56.1k|        PyThreadState *tstate = _PyThreadState_GET();
   69|  56.1k|        PyInterpreterState *interp = tstate->interp;
   70|  56.1k|        jump_counter = initial_jump_backoff_counter(&interp->opt_config);
   71|  56.1k|        adaptive_counter = adaptive_counter_warmup();
   72|  56.1k|        resume_counter = initial_resume_backoff_counter(&interp->opt_config);
   73|  56.1k|    }
   74|      0|    else {
   75|      0|        jump_counter = initial_unreachable_backoff_counter();
   76|      0|        adaptive_counter = initial_unreachable_backoff_counter();
   77|      0|        resume_counter = initial_unreachable_backoff_counter();
   78|      0|    }
   79|  56.1k|    int opcode = 0;
   80|  56.1k|    int oparg = 0;
   81|       |    /* The last code unit cannot have a cache, so we don't need to check it */
   82|  3.61M|    for (Py_ssize_t i = 0; i < size-1; i++) {
  ------------------
  |  Branch (82:28): [True: 3.55M, False: 56.1k]
  ------------------
   83|  3.55M|        opcode = instructions[i].op.code;
   84|  3.55M|        int caches = _PyOpcode_Caches[opcode];
   85|  3.55M|        oparg = (oparg << 8) | instructions[i].op.arg;
   86|  3.55M|        if (opcode == GET_ITER) {
  ------------------
  |  |   80|  3.55M|#define GET_ITER                                67
  ------------------
  |  Branch (86:13): [True: 3.06k, False: 3.55M]
  ------------------
   87|  3.06k|            fixup_getiter(&instructions[i], flags);
   88|  3.06k|        }
   89|  3.55M|        if (caches) {
  ------------------
  |  Branch (89:13): [True: 867k, False: 2.68M]
  ------------------
   90|       |            // The initial value depends on the opcode
   91|   867k|            switch (opcode) {
   92|  7.07k|                case JUMP_BACKWARD:
  ------------------
  |  |   84|  7.07k|#define JUMP_BACKWARD                           71
  ------------------
  |  Branch (92:17): [True: 7.07k, False: 860k]
  ------------------
   93|  7.07k|                    instructions[i + 1].counter = jump_counter;
   94|  7.07k|                    break;
   95|  92.5k|                case RESUME:
  ------------------
  |  |  130|  92.5k|#define RESUME                                 128
  ------------------
  |  Branch (95:17): [True: 92.5k, False: 775k]
  ------------------
   96|  92.5k|                    instructions[i + 1].counter = resume_counter;
   97|  92.5k|                    break;
   98|  76.4k|                case POP_JUMP_IF_FALSE:
  ------------------
  |  |  109|  76.4k|#define POP_JUMP_IF_FALSE                       96
  ------------------
  |  Branch (98:17): [True: 76.4k, False: 791k]
  ------------------
   99|  91.4k|                case POP_JUMP_IF_TRUE:
  ------------------
  |  |  112|  91.4k|#define POP_JUMP_IF_TRUE                        99
  ------------------
  |  Branch (99:17): [True: 14.9k, False: 852k]
  ------------------
  100|  93.1k|                case POP_JUMP_IF_NONE:
  ------------------
  |  |  110|  93.1k|#define POP_JUMP_IF_NONE                        97
  ------------------
  |  Branch (100:17): [True: 1.75k, False: 866k]
  ------------------
  101|  94.7k|                case POP_JUMP_IF_NOT_NONE:
  ------------------
  |  |  111|  94.7k|#define POP_JUMP_IF_NOT_NONE                    98
  ------------------
  |  Branch (101:17): [True: 1.56k, False: 866k]
  ------------------
  102|  94.7k|                    instructions[i + 1].cache = 0x5555;  // Alternating 0, 1 bits
  103|  94.7k|                    break;
  104|   673k|                default:
  ------------------
  |  Branch (104:17): [True: 673k, False: 194k]
  ------------------
  105|   673k|                    instructions[i + 1].counter = adaptive_counter;
  106|   673k|                    break;
  107|   867k|            }
  108|   867k|            i += caches;
  109|   867k|        }
  110|  3.55M|        if (opcode != EXTENDED_ARG) {
  ------------------
  |  |   77|  3.55M|#define EXTENDED_ARG                            64
  ------------------
  |  Branch (110:13): [True: 3.49M, False: 59.1k]
  ------------------
  111|  3.49M|            oparg = 0;
  112|  3.49M|        }
  113|  3.55M|    }
  114|       |    #else
  115|       |    for (Py_ssize_t i = 0; i < size-1; i++) {
  116|       |        int opcode = instructions[i].op.code;
  117|       |        if (opcode == GET_ITER) {
  118|       |            fixup_getiter(&instructions[i], flags);
  119|       |        }
  120|       |        i += _PyOpcode_Caches[opcode];
  121|       |    }
  122|       |    #endif /* ENABLE_SPECIALIZATION */
  123|  56.1k|}
_Py_Specialize_LoadSuperAttr:
  469|     13|_Py_Specialize_LoadSuperAttr(_PyStackRef global_super_st, _PyStackRef cls_st, _Py_CODEUNIT *instr, int load_method) {
  470|     13|    PyObject *global_super = PyStackRef_AsPyObjectBorrow(global_super_st);
  471|     13|    PyObject *cls = PyStackRef_AsPyObjectBorrow(cls_st);
  472|       |
  473|     13|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (473:5): [True: 13, Folded]
  ------------------
  474|     13|    assert(_PyOpcode_Caches[LOAD_SUPER_ATTR] == INLINE_CACHE_ENTRIES_LOAD_SUPER_ATTR);
  ------------------
  |  Branch (474:5): [True: 13, False: 0]
  ------------------
  475|     13|    if (global_super != (PyObject *)&PySuper_Type) {
  ------------------
  |  Branch (475:9): [True: 0, False: 13]
  ------------------
  476|      0|        SPECIALIZATION_FAIL(LOAD_SUPER_ATTR, SPEC_FAIL_SUPER_SHADOWED);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  477|      0|        goto fail;
  478|      0|    }
  479|     13|    if (!PyType_Check(cls)) {
  ------------------
  |  |  766|     13|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     13|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     13|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (479:9): [True: 0, False: 13]
  ------------------
  480|      0|        SPECIALIZATION_FAIL(LOAD_SUPER_ATTR, SPEC_FAIL_SUPER_BAD_CLASS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  481|      0|        goto fail;
  482|      0|    }
  483|     13|    uint8_t load_code = load_method ? LOAD_SUPER_ATTR_METHOD : LOAD_SUPER_ATTR_ATTR;
  ------------------
  |  |  201|      9|#define LOAD_SUPER_ATTR_METHOD                 199
  ------------------
                  uint8_t load_code = load_method ? LOAD_SUPER_ATTR_METHOD : LOAD_SUPER_ATTR_ATTR;
  ------------------
  |  |  200|     17|#define LOAD_SUPER_ATTR_ATTR                   198
  ------------------
  |  Branch (483:25): [True: 9, False: 4]
  ------------------
  484|     13|    specialize(instr, load_code);
  485|     13|    return;
  486|      0|fail:
  487|      0|    unspecialize(instr);
  488|      0|}
_Py_Specialize_LoadAttr:
  999|  1.56k|{
 1000|  1.56k|    PyObject *owner = PyStackRef_AsPyObjectBorrow(owner_st);
 1001|       |
 1002|  1.56k|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (1002:5): [True: 1.56k, Folded]
  ------------------
 1003|  1.56k|    assert(_PyOpcode_Caches[LOAD_ATTR] == INLINE_CACHE_ENTRIES_LOAD_ATTR);
  ------------------
  |  Branch (1003:5): [True: 1.56k, False: 0]
  ------------------
 1004|  1.56k|    PyTypeObject *type = Py_TYPE(owner);
  ------------------
  |  |  213|  1.56k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1005|  1.56k|    bool fail;
 1006|  1.56k|    if (!_PyType_IsReady(type)) {
  ------------------
  |  Branch (1006:9): [True: 0, False: 1.56k]
  ------------------
 1007|       |        // We *might* not really need this check, but we inherited it from
 1008|       |        // PyObject_GenericGetAttr and friends... and this way we still do the
 1009|       |        // right thing if someone forgets to call PyType_Ready(type):
 1010|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1011|      0|        fail = true;
 1012|      0|    }
 1013|  1.56k|    else if (Py_TYPE(owner)->tp_getattro == PyModule_Type.tp_getattro) {
  ------------------
  |  |  213|  1.56k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1013:14): [True: 345, False: 1.21k]
  ------------------
 1014|    345|        fail = specialize_module_load_attr(owner, instr, name);
 1015|    345|    }
 1016|  1.21k|    else if (PyType_Check(owner)) {
  ------------------
  |  |  766|  1.21k|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.21k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.21k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 202, False: 1.01k]
  |  |  ------------------
  ------------------
 1017|    202|        fail = specialize_class_load_attr(owner, instr, name);
 1018|    202|    }
 1019|  1.01k|    else {
 1020|  1.01k|        fail = specialize_instance_load_attr(owner, instr, name);
 1021|  1.01k|    }
 1022|       |
 1023|  1.56k|    if (fail) {
  ------------------
  |  Branch (1023:9): [True: 550, False: 1.01k]
  ------------------
 1024|    550|        unspecialize(instr);
 1025|    550|    }
 1026|  1.56k|}
_Py_Specialize_StoreAttr:
 1030|    285|{
 1031|    285|    PyObject *owner = PyStackRef_AsPyObjectBorrow(owner_st);
 1032|       |
 1033|    285|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (1033:5): [True: 285, Folded]
  ------------------
 1034|    285|    assert(_PyOpcode_Caches[STORE_ATTR] == INLINE_CACHE_ENTRIES_STORE_ATTR);
  ------------------
  |  Branch (1034:5): [True: 285, False: 0]
  ------------------
 1035|    285|    PyObject *descr = NULL;
 1036|    285|    _PyAttrCache *cache = (_PyAttrCache *)(instr + 1);
 1037|    285|    PyTypeObject *type = Py_TYPE(owner);
  ------------------
  |  |  213|    285|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    285|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    285|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|    285|    if (!_PyType_IsReady(type)) {
  ------------------
  |  Branch (1038:9): [True: 0, False: 285]
  ------------------
 1039|       |        // We *might* not really need this check, but we inherited it from
 1040|       |        // PyObject_GenericSetAttr and friends... and this way we still do the
 1041|       |        // right thing if someone forgets to call PyType_Ready(type):
 1042|      0|        SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1043|      0|        goto fail;
 1044|      0|    }
 1045|    285|    if (PyModule_CheckExact(owner)) {
  ------------------
  |  |   13|    285|#define PyModule_CheckExact(op) Py_IS_TYPE((op), &PyModule_Type)
  |  |  ------------------
  |  |  |  |  215|    285|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    285|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    285|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 24, False: 261]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1046|     24|        SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_OVERRIDDEN);
  ------------------
  |  |   43|     24|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1047|     24|        goto fail;
 1048|     24|    }
 1049|    261|    unsigned int tp_version = 0;
 1050|    261|    DescriptorClassification kind = analyze_descriptor_store(type, name, &descr, &tp_version);
 1051|    261|    if (tp_version == 0) {
  ------------------
  |  Branch (1051:9): [True: 14, False: 247]
  ------------------
 1052|     14|        goto fail;
 1053|     14|    }
 1054|    261|    assert(descr != NULL || kind == ABSENT || kind == GETSET_OVERRIDDEN);
  ------------------
  |  Branch (1054:5): [True: 26, False: 221]
  |  Branch (1054:5): [True: 221, False: 0]
  |  Branch (1054:5): [True: 0, False: 0]
  ------------------
 1055|    247|    switch(kind) {
  ------------------
  |  Branch (1055:12): [True: 247, False: 0]
  ------------------
 1056|     12|        case OVERRIDING:
  ------------------
  |  Branch (1056:9): [True: 12, False: 235]
  ------------------
 1057|     12|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_OVERRIDING_DESCRIPTOR);
  ------------------
  |  |   43|     12|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1058|     12|            goto fail;
 1059|      0|        case METHOD:
  ------------------
  |  Branch (1059:9): [True: 0, False: 247]
  ------------------
 1060|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_METHOD);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1061|      0|            goto fail;
 1062|      2|        case PROPERTY:
  ------------------
  |  Branch (1062:9): [True: 2, False: 245]
  ------------------
 1063|      2|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_PROPERTY);
  ------------------
  |  |   43|      2|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1064|      2|            goto fail;
 1065|     10|        case OBJECT_SLOT:
  ------------------
  |  Branch (1065:9): [True: 10, False: 237]
  ------------------
 1066|     10|        {
 1067|     10|            PyMemberDescrObject *member = (PyMemberDescrObject *)descr;
 1068|     10|            struct PyMemberDef *dmem = member->d_member;
 1069|     10|            Py_ssize_t offset = dmem->offset;
 1070|     10|            if (!PyObject_TypeCheck(owner, member->d_common.d_type)) {
  ------------------
  |  |  378|     10|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1070:17): [True: 0, False: 10]
  ------------------
 1071|      0|                SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1072|      0|                goto fail;
 1073|      0|            }
 1074|     10|            if (dmem->flags & _Py_AFTER_ITEMS) {
  ------------------
  |  |   89|     10|#  define _Py_AFTER_ITEMS      (1 << 4) // For internal use.
  ------------------
  |  Branch (1074:17): [True: 0, False: 10]
  ------------------
 1075|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_SLOT_AFTER_ITEMS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1076|      0|                goto fail;
 1077|      0|            }
 1078|     10|            if (dmem->flags & Py_READONLY) {
  ------------------
  |  |   83|     10|#define Py_READONLY            (1 << 0)
  ------------------
  |  Branch (1078:17): [True: 0, False: 10]
  ------------------
 1079|      0|                SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_READ_ONLY);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1080|      0|                goto fail;
 1081|      0|            }
 1082|     10|            if (offset != (uint16_t)offset) {
  ------------------
  |  Branch (1082:17): [True: 0, False: 10]
  ------------------
 1083|      0|                SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1084|      0|                goto fail;
 1085|      0|            }
 1086|     10|            assert(dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT);
  ------------------
  |  Branch (1086:13): [True: 10, False: 0]
  |  Branch (1086:13): [True: 0, False: 0]
  ------------------
 1087|     10|            assert(offset > 0);
  ------------------
  |  Branch (1087:13): [True: 10, False: 0]
  ------------------
 1088|     10|            cache->index = (uint16_t)offset;
 1089|     10|            write_u32(cache->version, tp_version);
 1090|     10|            specialize(instr, STORE_ATTR_SLOT);
  ------------------
  |  |  208|     10|#define STORE_ATTR_SLOT                        206
  ------------------
 1091|     10|            goto success;
 1092|     10|        }
 1093|      0|        case DUNDER_CLASS:
  ------------------
  |  Branch (1093:9): [True: 0, False: 247]
  ------------------
 1094|      0|        case OTHER_SLOT:
  ------------------
  |  Branch (1094:9): [True: 0, False: 247]
  ------------------
 1095|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_NON_OBJECT_SLOT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1096|      0|            goto fail;
 1097|      0|        case MUTABLE:
  ------------------
  |  Branch (1097:9): [True: 0, False: 247]
  ------------------
 1098|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_MUTABLE_CLASS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1099|      0|            goto fail;
 1100|      0|        case GETATTRIBUTE_IS_PYTHON_FUNCTION:
  ------------------
  |  Branch (1100:9): [True: 0, False: 247]
  ------------------
 1101|      0|        case GETSET_OVERRIDDEN:
  ------------------
  |  Branch (1101:9): [True: 0, False: 247]
  ------------------
 1102|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_OVERRIDDEN);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1103|      0|            goto fail;
 1104|      0|        case BUILTIN_CLASSMETHOD:
  ------------------
  |  Branch (1104:9): [True: 0, False: 247]
  ------------------
 1105|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_BUILTIN_CLASS_METHOD_OBJ);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1106|      0|            goto fail;
 1107|      0|        case PYTHON_CLASSMETHOD:
  ------------------
  |  Branch (1107:9): [True: 0, False: 247]
  ------------------
 1108|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_CLASS_METHOD_OBJ);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1109|      0|            goto fail;
 1110|      0|        case NON_OVERRIDING:
  ------------------
  |  Branch (1110:9): [True: 0, False: 247]
  ------------------
 1111|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_CLASS_ATTR_DESCRIPTOR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1112|      0|            goto fail;
 1113|      2|        case NON_DESCRIPTOR:
  ------------------
  |  Branch (1113:9): [True: 2, False: 245]
  ------------------
 1114|      2|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_ATTR_CLASS_ATTR_SIMPLE);
  ------------------
  |  |   43|      2|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1115|      2|            goto fail;
 1116|    221|        case ABSENT:
  ------------------
  |  Branch (1116:9): [True: 221, False: 26]
  ------------------
 1117|    221|            if (specialize_dict_access(owner, instr, type, kind, name, tp_version,
  ------------------
  |  Branch (1117:17): [True: 177, False: 44]
  ------------------
 1118|    221|                                       STORE_ATTR, STORE_ATTR_INSTANCE_VALUE,
  ------------------
  |  |  119|    221|#define STORE_ATTR                             106
  ------------------
                                                     STORE_ATTR, STORE_ATTR_INSTANCE_VALUE,
  ------------------
  |  |  207|    221|#define STORE_ATTR_INSTANCE_VALUE              205
  ------------------
 1119|    221|                                       STORE_ATTR_WITH_HINT)) {
  ------------------
  |  |  209|    221|#define STORE_ATTR_WITH_HINT                   207
  ------------------
 1120|    177|                goto success;
 1121|    177|            }
 1122|    247|    }
 1123|     98|fail:
 1124|     98|    Py_XDECREF(descr);
  ------------------
  |  |  524|     98|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     98|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     98|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1125|     98|    unspecialize(instr);
 1126|     98|    return;
 1127|    187|success:
 1128|    187|    Py_XDECREF(descr);
  ------------------
  |  |  524|    187|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    187|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    187|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1129|    187|    return;
 1130|    247|}
_Py_Specialize_LoadGlobal:
 1459|  1.73k|{
 1460|       |#ifdef Py_GIL_DISABLED
 1461|       |    if (PyMutex_IsLocked(&globals->ob_mutex) || PyMutex_IsLocked(&builtins->ob_mutex)) {
 1462|       |        // Skip specialization if either dictionary is locked to avoid lock
 1463|       |        // contention.
 1464|       |        unspecialize(instr);
 1465|       |        return;
 1466|       |    }
 1467|       |#endif
 1468|  1.73k|    Py_BEGIN_CRITICAL_SECTION2(globals, builtins);
  ------------------
  |  |   57|  1.73k|    {
  ------------------
 1469|  1.73k|    specialize_load_global_lock_held(globals, builtins, instr, name);
 1470|  1.73k|    Py_END_CRITICAL_SECTION2();
  ------------------
  |  |   61|  1.73k|    }
  ------------------
 1471|  1.73k|}
_Py_Specialize_StoreSubscr:
 1585|     95|{
 1586|     95|    PyObject *container = PyStackRef_AsPyObjectBorrow(container_st);
 1587|     95|    PyObject *sub = PyStackRef_AsPyObjectBorrow(sub_st);
 1588|       |
 1589|     95|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (1589:5): [True: 95, Folded]
  ------------------
 1590|     95|    PyTypeObject *container_type = Py_TYPE(container);
  ------------------
  |  |  213|     95|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     95|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     95|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1591|     95|    if (container_type == &PyList_Type) {
  ------------------
  |  Branch (1591:9): [True: 17, False: 78]
  ------------------
 1592|     17|        if (PyLong_CheckExact(sub)) {
  ------------------
  |  |   14|     17|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|     17|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     17|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     17|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 13, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1593|     13|            if (_PyLong_IsNonNegativeCompact((PyLongObject *)sub)
  ------------------
  |  Branch (1593:17): [True: 11, False: 2]
  ------------------
 1594|     11|                && ((PyLongObject *)sub)->long_value.ob_digit[0] < (size_t)PyList_GET_SIZE(container))
  ------------------
  |  |   38|     11|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1594:20): [True: 11, False: 0]
  ------------------
 1595|     11|            {
 1596|     11|                specialize(instr, STORE_SUBSCR_LIST_INT);
  ------------------
  |  |  211|     11|#define STORE_SUBSCR_LIST_INT                  209
  ------------------
 1597|     11|                return;
 1598|     11|            }
 1599|      2|            else {
 1600|      2|                SPECIALIZATION_FAIL(STORE_SUBSCR, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      2|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1601|      2|                unspecialize(instr);
 1602|      2|                return;
 1603|      2|            }
 1604|     13|        }
 1605|      4|        else if (PySlice_Check(sub)) {
  ------------------
  |  |   22|      4|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|      4|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 4, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1606|      4|            SPECIALIZATION_FAIL(STORE_SUBSCR, SPEC_FAIL_SUBSCR_LIST_SLICE);
  ------------------
  |  |   43|      4|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1607|      4|            unspecialize(instr);
 1608|      4|            return;
 1609|      4|        }
 1610|      0|        else {
 1611|      0|            SPECIALIZATION_FAIL(STORE_SUBSCR, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1612|      0|            unspecialize(instr);
 1613|      0|            return;
 1614|      0|        }
 1615|     17|    }
 1616|     78|    if (container_type->tp_as_mapping != NULL &&
  ------------------
  |  Branch (1616:9): [True: 78, False: 0]
  ------------------
 1617|     78|        container_type->tp_as_mapping->mp_ass_subscript == _PyDict_StoreSubscript)
  ------------------
  |  Branch (1617:9): [True: 65, False: 13]
  ------------------
 1618|     65|    {
 1619|     65|        specialize(instr, STORE_SUBSCR_DICT);
  ------------------
  |  |  210|     65|#define STORE_SUBSCR_DICT                      208
  ------------------
 1620|     65|        return;
 1621|     65|    }
 1622|     13|    SPECIALIZATION_FAIL(STORE_SUBSCR, store_subscr_fail_kind(container, sub));
  ------------------
  |  |   43|     13|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1623|     13|    unspecialize(instr);
 1624|     13|}
_Py_Specialize_Call:
 1876|  1.38k|{
 1877|  1.38k|    PyObject *callable = PyStackRef_AsPyObjectBorrow(callable_st);
 1878|       |
 1879|  1.38k|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (1879:5): [True: 1.38k, Folded]
  ------------------
 1880|  1.38k|    assert(_PyOpcode_Caches[CALL] == INLINE_CACHE_ENTRIES_CALL);
  ------------------
  |  Branch (1880:5): [True: 1.38k, False: 0]
  ------------------
 1881|  1.38k|    assert(_Py_OPCODE(*instr) != INSTRUMENTED_CALL);
  ------------------
  |  Branch (1881:5): [True: 1.38k, False: 0]
  ------------------
 1882|  1.38k|    int fail;
 1883|  1.38k|    if (PyCFunction_CheckExact(callable)) {
  ------------------
  |  |   16|  1.38k|#define PyCFunction_CheckExact(op) Py_IS_TYPE((op), &PyCFunction_Type)
  |  |  ------------------
  |  |  |  |  215|  1.38k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.38k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 502, False: 880]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1884|    502|        fail = specialize_c_call(callable, instr, nargs);
 1885|    502|    }
 1886|    880|    else if (PyFunction_Check(callable)) {
  ------------------
  |  |   68|    880|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|    880|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    880|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    880|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 350, False: 530]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1887|    350|        fail = specialize_py_call((PyFunctionObject *)callable, instr, nargs, false);
 1888|    350|    }
 1889|    530|    else if (PyType_Check(callable)) {
  ------------------
  |  |  766|    530|#  define PyType_Check(op) PyType_Check(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    530|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    530|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (766:28): [True: 190, False: 340]
  |  |  ------------------
  ------------------
 1890|    190|        fail = specialize_class_call(callable, instr, nargs);
 1891|    190|    }
 1892|    340|    else if (Py_IS_TYPE(callable, &PyMethodDescr_Type)) {
  ------------------
  |  |  215|    340|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    340|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    340|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 269, False: 71]
  |  |  ------------------
  ------------------
 1893|    269|        PyObject *self_or_null = PyStackRef_AsPyObjectBorrow(self_or_null_st);
 1894|    269|        fail = specialize_method_descriptor((PyMethodDescrObject *)callable,
 1895|    269|                                            self_or_null, instr, nargs);
 1896|    269|    }
 1897|     71|    else if (PyMethod_Check(callable)) {
  ------------------
  |  |   22|     71|#define PyMethod_Check(op) Py_IS_TYPE((op), &PyMethod_Type)
  |  |  ------------------
  |  |  |  |  215|     71|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     71|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     71|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 54, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1898|     54|        PyObject *func = ((PyMethodObject *)callable)->im_func;
 1899|     54|        if (PyFunction_Check(func)) {
  ------------------
  |  |   68|     54|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|     54|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     54|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     54|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 54, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1900|     54|            fail = specialize_py_call((PyFunctionObject *)func, instr, nargs, true);
 1901|     54|        }
 1902|      0|        else {
 1903|      0|            SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_BOUND_METHOD);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1904|      0|            fail = -1;
 1905|      0|        }
 1906|     54|    }
 1907|     17|    else {
 1908|     17|        specialize(instr, CALL_NON_PY_GENERAL);
  ------------------
  |  |  165|     17|#define CALL_NON_PY_GENERAL                    163
  ------------------
 1909|     17|        fail = 0;
 1910|     17|    }
 1911|  1.38k|    if (fail) {
  ------------------
  |  Branch (1911:9): [True: 0, False: 1.38k]
  ------------------
 1912|      0|        unspecialize(instr);
 1913|      0|    }
 1914|  1.38k|}
_Py_Specialize_CallKw:
 1918|     58|{
 1919|     58|    PyObject *callable = PyStackRef_AsPyObjectBorrow(callable_st);
 1920|       |
 1921|     58|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (1921:5): [True: 58, Folded]
  ------------------
 1922|     58|    assert(_PyOpcode_Caches[CALL_KW] == INLINE_CACHE_ENTRIES_CALL_KW);
  ------------------
  |  Branch (1922:5): [True: 58, False: 0]
  ------------------
 1923|     58|    assert(_Py_OPCODE(*instr) != INSTRUMENTED_CALL_KW);
  ------------------
  |  Branch (1923:5): [True: 58, False: 0]
  ------------------
 1924|     58|    int fail;
 1925|     58|    if (PyFunction_Check(callable)) {
  ------------------
  |  |   68|     58|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|     58|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     58|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     58|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 12, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1926|     12|        fail = specialize_py_call_kw((PyFunctionObject *)callable, instr, nargs, false);
 1927|     12|    }
 1928|     46|    else if (PyMethod_Check(callable)) {
  ------------------
  |  |   22|     46|#define PyMethod_Check(op) Py_IS_TYPE((op), &PyMethod_Type)
  |  |  ------------------
  |  |  |  |  215|     46|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     46|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     46|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1929|      0|        PyObject *func = ((PyMethodObject *)callable)->im_func;
 1930|      0|        if (PyFunction_Check(func)) {
  ------------------
  |  |   68|      0|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1931|      0|            fail = specialize_py_call_kw((PyFunctionObject *)func, instr, nargs, true);
 1932|      0|        }
 1933|      0|        else {
 1934|      0|            SPECIALIZATION_FAIL(CALL_KW, SPEC_FAIL_CALL_BOUND_METHOD);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1935|      0|            fail = -1;
 1936|      0|        }
 1937|      0|    }
 1938|     46|    else {
 1939|     46|        specialize(instr, CALL_KW_NON_PY);
  ------------------
  |  |  157|     46|#define CALL_KW_NON_PY                         155
  ------------------
 1940|     46|        fail = 0;
 1941|     46|    }
 1942|     58|    if (fail) {
  ------------------
  |  Branch (1942:9): [True: 0, False: 58]
  ------------------
 1943|      0|        unspecialize(instr);
 1944|      0|    }
 1945|     58|}
_Py_Specialize_BinaryOp:
 2344|   177k|{
 2345|   177k|    PyObject *lhs = PyStackRef_AsPyObjectBorrow(lhs_st);
 2346|   177k|    PyObject *rhs = PyStackRef_AsPyObjectBorrow(rhs_st);
 2347|   177k|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2347:5): [True: 177k, Folded]
  ------------------
 2348|   177k|    assert(_PyOpcode_Caches[BINARY_OP] == INLINE_CACHE_ENTRIES_BINARY_OP);
  ------------------
  |  Branch (2348:5): [True: 177k, False: 0]
  ------------------
 2349|       |
 2350|   177k|    _PyBinaryOpCache *cache = (_PyBinaryOpCache *)(instr + 1);
 2351|   177k|    if (instr->op.code == BINARY_OP_EXTEND) {
  ------------------
  |  |  134|   177k|#define BINARY_OP_EXTEND                       132
  ------------------
  |  Branch (2351:9): [True: 0, False: 177k]
  ------------------
 2352|      0|        write_ptr(cache->external_cache, NULL);
 2353|      0|    }
 2354|       |
 2355|   177k|    switch (oparg) {
  ------------------
  |  Branch (2355:13): [True: 176k, False: 447]
  ------------------
 2356|    121|        case NB_ADD:
  ------------------
  |  |   10|    121|#define NB_ADD                                   0
  ------------------
  |  Branch (2356:9): [True: 121, False: 177k]
  ------------------
 2357|    330|        case NB_INPLACE_ADD:
  ------------------
  |  |   23|    330|#define NB_INPLACE_ADD                          13
  ------------------
  |  Branch (2357:9): [True: 209, False: 177k]
  ------------------
 2358|    330|            if (!Py_IS_TYPE(lhs, Py_TYPE(rhs))) {
  ------------------
  |  |  215|    330|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    330|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    330|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2358:17): [True: 3, False: 327]
  ------------------
 2359|      3|                break;
 2360|      3|            }
 2361|    327|            if (PyUnicode_CheckExact(lhs)) {
  ------------------
  |  |  104|    327|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    327|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    327|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    327|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 34, False: 293]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2362|     34|                _Py_CODEUNIT next = instr[INLINE_CACHE_ENTRIES_BINARY_OP + 1];
  ------------------
  |  |   81|     34|#define INLINE_CACHE_ENTRIES_BINARY_OP CACHE_ENTRIES(_PyBinaryOpCache)
  |  |  ------------------
  |  |  |  |   65|     34|#define CACHE_ENTRIES(cache) (sizeof(cache)/sizeof(_Py_CODEUNIT))
  |  |  ------------------
  ------------------
 2363|     34|                bool to_store = (next.op.code == STORE_FAST);
  ------------------
  |  |  121|     34|#define STORE_FAST                             108
  ------------------
 2364|     34|                if (to_store && PyStackRef_AsPyObjectBorrow(locals[next.op.arg]) == lhs) {
  ------------------
  |  Branch (2364:21): [True: 9, False: 25]
  |  Branch (2364:33): [True: 4, False: 5]
  ------------------
 2365|      4|                    specialize(instr, BINARY_OP_INPLACE_ADD_UNICODE);
  ------------------
  |  |   16|      4|#define BINARY_OP_INPLACE_ADD_UNICODE            3
  ------------------
 2366|      4|                    return;
 2367|      4|                }
 2368|     30|                specialize(instr, BINARY_OP_ADD_UNICODE);
  ------------------
  |  |  133|     30|#define BINARY_OP_ADD_UNICODE                  131
  ------------------
 2369|     30|                return;
 2370|     34|            }
 2371|    293|            if (_PyLong_CheckExactAndCompact(lhs) && _PyLong_CheckExactAndCompact(rhs)) {
  ------------------
  |  Branch (2371:17): [True: 132, False: 161]
  |  Branch (2371:54): [True: 113, False: 19]
  ------------------
 2372|    113|                specialize(instr, BINARY_OP_ADD_INT);
  ------------------
  |  |  132|    113|#define BINARY_OP_ADD_INT                      130
  ------------------
 2373|    113|                return;
 2374|    113|            }
 2375|    180|            if (PyFloat_CheckExact(lhs)) {
  ------------------
  |  |   17|    180|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|    180|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    180|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    180|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 180]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2376|      0|                specialize(instr, BINARY_OP_ADD_FLOAT);
  ------------------
  |  |  131|      0|#define BINARY_OP_ADD_FLOAT                    129
  ------------------
 2377|      0|                return;
 2378|      0|            }
 2379|    180|            break;
 2380|    339|        case NB_MULTIPLY:
  ------------------
  |  |   15|    339|#define NB_MULTIPLY                              5
  ------------------
  |  Branch (2380:9): [True: 339, False: 177k]
  ------------------
 2381|    342|        case NB_INPLACE_MULTIPLY:
  ------------------
  |  |   28|    342|#define NB_INPLACE_MULTIPLY                     18
  ------------------
  |  Branch (2381:9): [True: 3, False: 177k]
  ------------------
 2382|    342|            if (!Py_IS_TYPE(lhs, Py_TYPE(rhs))) {
  ------------------
  |  |  215|    342|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|    342|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    342|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2382:17): [True: 7, False: 335]
  ------------------
 2383|      7|                break;
 2384|      7|            }
 2385|    335|            if (_PyLong_CheckExactAndCompact(lhs) && _PyLong_CheckExactAndCompact(rhs)) {
  ------------------
  |  Branch (2385:17): [True: 215, False: 120]
  |  Branch (2385:54): [True: 80, False: 135]
  ------------------
 2386|     80|                specialize(instr, BINARY_OP_MULTIPLY_INT);
  ------------------
  |  |  136|     80|#define BINARY_OP_MULTIPLY_INT                 134
  ------------------
 2387|     80|                return;
 2388|     80|            }
 2389|    255|            if (PyFloat_CheckExact(lhs)) {
  ------------------
  |  |   17|    255|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|    255|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    255|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    255|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 255]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2390|      0|                specialize(instr, BINARY_OP_MULTIPLY_FLOAT);
  ------------------
  |  |  135|      0|#define BINARY_OP_MULTIPLY_FLOAT               133
  ------------------
 2391|      0|                return;
 2392|      0|            }
 2393|    255|            break;
 2394|    255|        case NB_SUBTRACT:
  ------------------
  |  |   20|     59|#define NB_SUBTRACT                             10
  ------------------
  |  Branch (2394:9): [True: 59, False: 177k]
  ------------------
 2395|     61|        case NB_INPLACE_SUBTRACT:
  ------------------
  |  |   33|     61|#define NB_INPLACE_SUBTRACT                     23
  ------------------
  |  Branch (2395:9): [True: 2, False: 177k]
  ------------------
 2396|     61|            if (!Py_IS_TYPE(lhs, Py_TYPE(rhs))) {
  ------------------
  |  |  215|     61|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     61|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     61|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2396:17): [True: 3, False: 58]
  ------------------
 2397|      3|                break;
 2398|      3|            }
 2399|     58|            if (_PyLong_CheckExactAndCompact(lhs) && _PyLong_CheckExactAndCompact(rhs)) {
  ------------------
  |  Branch (2399:17): [True: 47, False: 11]
  |  Branch (2399:54): [True: 47, False: 0]
  ------------------
 2400|     47|                specialize(instr, BINARY_OP_SUBTRACT_INT);
  ------------------
  |  |  145|     47|#define BINARY_OP_SUBTRACT_INT                 143
  ------------------
 2401|     47|                return;
 2402|     47|            }
 2403|     11|            if (PyFloat_CheckExact(lhs)) {
  ------------------
  |  |   17|     11|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|     11|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2404|      0|                specialize(instr, BINARY_OP_SUBTRACT_FLOAT);
  ------------------
  |  |  144|      0|#define BINARY_OP_SUBTRACT_FLOAT               142
  ------------------
 2405|      0|                return;
 2406|      0|            }
 2407|     11|            break;
 2408|   176k|        case NB_SUBSCR:
  ------------------
  |  |   36|   176k|#define NB_SUBSCR                               26
  ------------------
  |  Branch (2408:9): [True: 176k, False: 1.18k]
  ------------------
 2409|   176k|            if (PyLong_CheckExact(rhs) && _PyLong_IsNonNegativeCompact((PyLongObject *)rhs)) {
  ------------------
  |  |   14|   176k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|   352k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   176k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 176k, False: 66]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2409:43): [True: 176k, False: 23]
  ------------------
 2410|   176k|                if (PyList_CheckExact(lhs)) {
  ------------------
  |  |   26|   176k|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|   176k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   176k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 11, False: 176k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2411|     11|                    specialize(instr, BINARY_OP_SUBSCR_LIST_INT);
  ------------------
  |  |  139|     11|#define BINARY_OP_SUBSCR_LIST_INT              137
  ------------------
 2412|     11|                    return;
 2413|     11|                }
 2414|   176k|                if (PyTuple_CheckExact(lhs)) {
  ------------------
  |  |   28|   176k|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|   176k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   176k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 43, False: 176k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2415|     43|                    specialize(instr, BINARY_OP_SUBSCR_TUPLE_INT);
  ------------------
  |  |  142|     43|#define BINARY_OP_SUBSCR_TUPLE_INT             140
  ------------------
 2416|     43|                    return;
 2417|     43|                }
 2418|   176k|                if (PyUnicode_CheckExact(lhs) && _PyLong_IsNonNegativeCompact((PyLongObject*)rhs)) {
  ------------------
  |  |  104|   176k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|   352k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   176k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   176k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 175k, False: 110]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2418:50): [True: 175k, False: 0]
  ------------------
 2419|   175k|                    if (PyUnicode_IS_COMPACT_ASCII(lhs)) {
  ------------------
  |  |  241|   175k|#define PyUnicode_IS_COMPACT_ASCII(op) PyUnicode_IS_COMPACT_ASCII(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   175k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   175k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (241:40): [True: 10, False: 175k]
  |  |  ------------------
  ------------------
 2420|     10|                        specialize(instr, BINARY_OP_SUBSCR_STR_INT);
  ------------------
  |  |  141|     10|#define BINARY_OP_SUBSCR_STR_INT               139
  ------------------
 2421|     10|                        return;
 2422|   175k|                    } else {
 2423|   175k|                        specialize(instr, BINARY_OP_SUBSCR_USTR_INT);
  ------------------
  |  |  143|   175k|#define BINARY_OP_SUBSCR_USTR_INT              141
  ------------------
 2424|   175k|                        return;
 2425|   175k|                    }
 2426|   175k|                }
 2427|   176k|            }
 2428|    199|            if (Py_TYPE(lhs)->tp_as_mapping != NULL &&
  ------------------
  |  |  213|    199|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    199|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    199|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2428:17): [True: 199, False: 0]
  ------------------
 2429|    199|                Py_TYPE(lhs)->tp_as_mapping->mp_subscript == _PyDict_Subscript)
  ------------------
  |  |  213|    199|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    199|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    199|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2429:17): [True: 35, False: 164]
  ------------------
 2430|     35|            {
 2431|     35|                specialize(instr, BINARY_OP_SUBSCR_DICT);
  ------------------
  |  |  137|     35|#define BINARY_OP_SUBSCR_DICT                  135
  ------------------
 2432|     35|                return;
 2433|     35|            }
 2434|    164|            if (PyList_CheckExact(lhs) && PySlice_Check(rhs)) {
  ------------------
  |  |   26|    164|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|    328|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    164|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    164|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 11, False: 153]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (PyList_CheckExact(lhs) && PySlice_Check(rhs)) {
  ------------------
  |  |   22|     11|#define PySlice_Check(op) Py_IS_TYPE((op), &PySlice_Type)
  |  |  ------------------
  |  |  |  |  215|     11|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     11|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     11|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2435|      2|                specialize(instr, BINARY_OP_SUBSCR_LIST_SLICE);
  ------------------
  |  |  140|      2|#define BINARY_OP_SUBSCR_LIST_SLICE            138
  ------------------
 2436|      2|                return;
 2437|      2|            }
 2438|    162|            unsigned int tp_version;
 2439|    162|            PyTypeObject *container_type = Py_TYPE(lhs);
  ------------------
  |  |  213|    162|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2440|    162|            PyObject *descriptor = _PyType_LookupRefAndVersion(container_type, &_Py_ID(__getitem__), &tp_version);
  ------------------
  |  |  936|    162|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    162|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    162|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2441|    162|            if (descriptor && Py_TYPE(descriptor) == &PyFunction_Type &&
  ------------------
  |  |  213|    162|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    162|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2441:17): [True: 162, False: 0]
  |  Branch (2441:31): [True: 9, False: 153]
  ------------------
 2442|      9|                container_type->tp_flags & Py_TPFLAGS_HEAPTYPE)
  ------------------
  |  |  503|      9|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2442:17): [True: 9, False: 0]
  ------------------
 2443|      9|            {
 2444|      9|                PyFunctionObject *func = (PyFunctionObject *)descriptor;
 2445|      9|                PyCodeObject *fcode = (PyCodeObject *)func->func_code;
 2446|      9|                int kind = function_kind(fcode);
 2447|      9|                PyHeapTypeObject *ht = (PyHeapTypeObject *)container_type;
 2448|      9|                if (kind == SIMPLE_FUNCTION &&
  ------------------
  |  |  125|     18|#define SIMPLE_FUNCTION 0
  ------------------
  |  Branch (2448:21): [True: 9, False: 0]
  ------------------
 2449|      9|                    fcode->co_argcount == 2 &&
  ------------------
  |  Branch (2449:21): [True: 9, False: 0]
  ------------------
 2450|      9|                    _PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET()) && /* Don't specialize if PEP 523 is active */
  ------------------
  |  Branch (2450:21): [True: 9, False: 0]
  ------------------
 2451|      9|                    _PyType_CacheGetItemForSpecialization(ht, descriptor, (uint32_t)tp_version))
  ------------------
  |  Branch (2451:21): [True: 9, False: 0]
  ------------------
 2452|      9|                {
 2453|      9|                    specialize(instr, BINARY_OP_SUBSCR_GETITEM);
  ------------------
  |  |  138|      9|#define BINARY_OP_SUBSCR_GETITEM               136
  ------------------
 2454|      9|                    Py_DECREF(descriptor);
  ------------------
  |  |  430|      9|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      9|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      9|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2455|      9|                    return;
 2456|      9|                }
 2457|      9|            }
 2458|    153|            Py_XDECREF(descriptor);
  ------------------
  |  |  524|    153|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    153|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    153|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2459|    153|            break;
 2460|   177k|    }
 2461|       |
 2462|  1.05k|    _PyBinaryOpSpecializationDescr *descr;
 2463|  1.05k|    if (binary_op_extended_specialization(lhs, rhs, oparg, &descr)) {
  ------------------
  |  Branch (2463:9): [True: 67, False: 992]
  ------------------
 2464|     67|        specialize(instr, BINARY_OP_EXTEND);
  ------------------
  |  |  134|     67|#define BINARY_OP_EXTEND                       132
  ------------------
 2465|     67|        write_ptr(cache->external_cache, (void*)descr);
 2466|     67|        return;
 2467|     67|    }
 2468|       |
 2469|    992|    SPECIALIZATION_FAIL(BINARY_OP, binary_op_fail_kind(oparg, lhs, rhs));
  ------------------
  |  |   43|    992|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2470|    992|    unspecialize(instr);
 2471|    992|    return;
 2472|  1.05k|}
_Py_Specialize_CompareOp:
 2513|  1.71k|{
 2514|  1.71k|    PyObject *lhs = PyStackRef_AsPyObjectBorrow(lhs_st);
 2515|  1.71k|    PyObject *rhs = PyStackRef_AsPyObjectBorrow(rhs_st);
 2516|  1.71k|    uint8_t specialized_op;
 2517|       |
 2518|  1.71k|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2518:5): [True: 1.71k, Folded]
  ------------------
 2519|  1.71k|    assert(_PyOpcode_Caches[COMPARE_OP] == INLINE_CACHE_ENTRIES_COMPARE_OP);
  ------------------
  |  Branch (2519:5): [True: 1.71k, False: 0]
  ------------------
 2520|       |    // All of these specializations compute boolean values, so they're all valid
 2521|       |    // regardless of the fifth-lowest oparg bit.
 2522|  1.71k|    if (Py_TYPE(lhs) != Py_TYPE(rhs)) {
  ------------------
  |  |  213|  1.71k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (Py_TYPE(lhs) != Py_TYPE(rhs)) {
  ------------------
  |  |  213|  1.71k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2522:9): [True: 11, False: 1.70k]
  ------------------
 2523|     11|        SPECIALIZATION_FAIL(COMPARE_OP, compare_op_fail_kind(lhs, rhs));
  ------------------
  |  |   43|     11|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2524|     11|        goto failure;
 2525|     11|    }
 2526|  1.70k|    if (PyFloat_CheckExact(lhs)) {
  ------------------
  |  |   17|  1.70k|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|  1.70k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 2, False: 1.70k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2527|      2|        specialized_op = COMPARE_OP_FLOAT;
  ------------------
  |  |  171|      2|#define COMPARE_OP_FLOAT                       169
  ------------------
 2528|      2|        goto success;
 2529|      2|    }
 2530|  1.70k|    if (PyLong_CheckExact(lhs)) {
  ------------------
  |  |   14|  1.70k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  1.70k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 139, False: 1.56k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    139|        if (_PyLong_IsCompact((PyLongObject *)lhs) && _PyLong_IsCompact((PyLongObject *)rhs)) {
  ------------------
  |  Branch (2531:13): [True: 111, False: 28]
  |  Branch (2531:55): [True: 109, False: 2]
  ------------------
 2532|    109|            specialized_op = COMPARE_OP_INT;
  ------------------
  |  |  172|    109|#define COMPARE_OP_INT                         170
  ------------------
 2533|    109|            goto success;
 2534|    109|        }
 2535|     30|        else {
 2536|     30|            SPECIALIZATION_FAIL(COMPARE_OP, SPEC_FAIL_COMPARE_OP_BIG_INT);
  ------------------
  |  |   43|     30|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2537|     30|            goto failure;
 2538|     30|        }
 2539|    139|    }
 2540|  1.56k|    if (PyUnicode_CheckExact(lhs)) {
  ------------------
  |  |  104|  1.56k|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|  1.56k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.56k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.56k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 1.54k, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2541|  1.54k|        int cmp = oparg >> 5;
 2542|  1.54k|        if (cmp != Py_EQ && cmp != Py_NE) {
  ------------------
  |  |  654|  3.09k|#define Py_EQ 2
  ------------------
                      if (cmp != Py_EQ && cmp != Py_NE) {
  ------------------
  |  |  655|  1.48k|#define Py_NE 3
  ------------------
  |  Branch (2542:13): [True: 1.48k, False: 64]
  |  Branch (2542:29): [True: 1.46k, False: 19]
  ------------------
 2543|  1.46k|            SPECIALIZATION_FAIL(COMPARE_OP, SPEC_FAIL_COMPARE_OP_STRING);
  ------------------
  |  |   43|  1.46k|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2544|  1.46k|            goto failure;
 2545|  1.46k|        }
 2546|     83|        else {
 2547|     83|            specialized_op = COMPARE_OP_STR;
  ------------------
  |  |  173|     83|#define COMPARE_OP_STR                         171
  ------------------
 2548|     83|            goto success;
 2549|     83|        }
 2550|  1.54k|    }
 2551|     17|    SPECIALIZATION_FAIL(COMPARE_OP, compare_op_fail_kind(lhs, rhs));
  ------------------
  |  |   43|     17|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2552|  1.52k|failure:
 2553|  1.52k|    unspecialize(instr);
 2554|  1.52k|    return;
 2555|    194|success:
 2556|    194|    specialize(instr, specialized_op);
 2557|    194|}
_Py_Specialize_UnpackSequence:
 2575|     72|{
 2576|     72|    PyObject *seq = PyStackRef_AsPyObjectBorrow(seq_st);
 2577|       |
 2578|     72|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2578:5): [True: 72, Folded]
  ------------------
 2579|     72|    assert(_PyOpcode_Caches[UNPACK_SEQUENCE] ==
  ------------------
  |  Branch (2579:5): [True: 72, False: 0]
  ------------------
 2580|     72|           INLINE_CACHE_ENTRIES_UNPACK_SEQUENCE);
 2581|     72|    if (PyTuple_CheckExact(seq)) {
  ------------------
  |  |   28|     72|#define PyTuple_CheckExact(op) Py_IS_TYPE((op), &PyTuple_Type)
  |  |  ------------------
  |  |  |  |  215|     72|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 72, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2582|     72|        if (PyTuple_GET_SIZE(seq) != oparg) {
  ------------------
  |  |   27|     72|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2582:13): [True: 0, False: 72]
  ------------------
 2583|      0|            SPECIALIZATION_FAIL(UNPACK_SEQUENCE, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2584|      0|            unspecialize(instr);
 2585|      0|            return;
 2586|      0|        }
 2587|     72|        if (PyTuple_GET_SIZE(seq) == 2) {
  ------------------
  |  |   27|     72|#define PyTuple_GET_SIZE(op) PyTuple_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     72|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     72|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2587:13): [True: 62, False: 10]
  ------------------
 2588|     62|            specialize(instr, UNPACK_SEQUENCE_TWO_TUPLE);
  ------------------
  |  |  220|     62|#define UNPACK_SEQUENCE_TWO_TUPLE              218
  ------------------
 2589|     62|            return;
 2590|     62|        }
 2591|     10|        specialize(instr, UNPACK_SEQUENCE_TUPLE);
  ------------------
  |  |  219|     10|#define UNPACK_SEQUENCE_TUPLE                  217
  ------------------
 2592|     10|        return;
 2593|     72|    }
 2594|      0|    if (PyList_CheckExact(seq)) {
  ------------------
  |  |   26|      0|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2595|      0|        if (PyList_GET_SIZE(seq) != oparg) {
  ------------------
  |  |   38|      0|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2595:13): [True: 0, False: 0]
  ------------------
 2596|      0|            SPECIALIZATION_FAIL(UNPACK_SEQUENCE, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2597|      0|            unspecialize(instr);
 2598|      0|            return;
 2599|      0|        }
 2600|      0|        specialize(instr, UNPACK_SEQUENCE_LIST);
  ------------------
  |  |  218|      0|#define UNPACK_SEQUENCE_LIST                   216
  ------------------
 2601|      0|        return;
 2602|      0|    }
 2603|      0|    SPECIALIZATION_FAIL(UNPACK_SEQUENCE, unpack_sequence_fail_kind(seq));
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2604|      0|    unspecialize(instr);
 2605|      0|}
_Py_Specialize_ForIter:
 2682|    301|{
 2683|    301|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2683:5): [True: 301, Folded]
  ------------------
 2684|    301|    assert(_PyOpcode_Caches[FOR_ITER] == INLINE_CACHE_ENTRIES_FOR_ITER);
  ------------------
  |  Branch (2684:5): [True: 301, False: 0]
  ------------------
 2685|    301|    PyObject *iter_o = PyStackRef_AsPyObjectBorrow(iter);
 2686|    301|    PyTypeObject *tp = Py_TYPE(iter_o);
  ------------------
  |  |  213|    301|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    301|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    301|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2687|       |
 2688|    301|    if (PyStackRef_IsNull(null_or_index)) {
  ------------------
  |  |  482|    301|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|    301|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|    301|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 174, False: 127]
  |  |  ------------------
  ------------------
 2689|    174|        if (tp == &PyRangeIter_Type) {
  ------------------
  |  Branch (2689:13): [True: 6, False: 168]
  ------------------
 2690|       |#ifdef Py_GIL_DISABLED
 2691|       |            // Only specialize for uniquely referenced iterators, so that we know
 2692|       |            // they're only referenced by this one thread. This is more limiting
 2693|       |            // than we need (even `it = iter(mylist); for item in it:` won't get
 2694|       |            // specialized) but we don't have a way to check whether we're the only
 2695|       |            // _thread_ who has access to the object.
 2696|       |            if (!_PyObject_IsUniquelyReferenced(iter_o)) {
 2697|       |                goto failure;
 2698|       |            }
 2699|       |#endif
 2700|      6|            specialize(instr, FOR_ITER_RANGE);
  ------------------
  |  |  178|      6|#define FOR_ITER_RANGE                         176
  ------------------
 2701|      6|            return;
 2702|      6|        }
 2703|    168|        else if (tp == &PyGen_Type && oparg <= SHRT_MAX) {
  ------------------
  |  Branch (2703:18): [True: 10, False: 158]
  |  Branch (2703:39): [True: 10, False: 0]
  ------------------
 2704|     10|            assert(instr[oparg + INLINE_CACHE_ENTRIES_FOR_ITER + 1].op.code == END_FOR  ||
  ------------------
  |  Branch (2704:13): [True: 10, False: 0]
  |  Branch (2704:13): [True: 0, False: 0]
  ------------------
 2705|     10|                instr[oparg + INLINE_CACHE_ENTRIES_FOR_ITER + 1].op.code == INSTRUMENTED_END_FOR
 2706|     10|            );
 2707|       |            /* Don't specialize if PEP 523 is active */
 2708|     10|            if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (2708:17): [True: 0, False: 10]
  ------------------
 2709|      0|                goto failure;
 2710|      0|            }
 2711|     10|            specialize(instr, FOR_ITER_GEN);
  ------------------
  |  |  176|     10|#define FOR_ITER_GEN                           174
  ------------------
 2712|     10|            return;
 2713|     10|        }
 2714|    174|    }
 2715|    127|    else {
 2716|    127|        if (tp->_tp_iteritem != NULL) {
  ------------------
  |  Branch (2716:13): [True: 127, False: 0]
  ------------------
 2717|    127|            if (tp == &PyList_Type) {
  ------------------
  |  Branch (2717:17): [True: 66, False: 61]
  ------------------
 2718|       |    #ifdef Py_GIL_DISABLED
 2719|       |                // Only specialize for lists owned by this thread or shared
 2720|       |                if (!_Py_IsOwnedByCurrentThread(iter_o) && !_PyObject_GC_IS_SHARED(iter_o)) {
 2721|       |                    goto failure;
 2722|       |                }
 2723|       |    #endif
 2724|     66|                specialize(instr, FOR_ITER_LIST);
  ------------------
  |  |  177|     66|#define FOR_ITER_LIST                          175
  ------------------
 2725|     66|                return;
 2726|     66|            }
 2727|     61|            else if (tp == &PyTuple_Type) {
  ------------------
  |  Branch (2727:22): [True: 51, False: 10]
  ------------------
 2728|     51|                specialize(instr, FOR_ITER_TUPLE);
  ------------------
  |  |  179|     51|#define FOR_ITER_TUPLE                         177
  ------------------
 2729|     51|                return;
 2730|     51|            }
 2731|    127|        }
 2732|     10|        specialize(instr, FOR_ITER_VIRTUAL);
  ------------------
  |  |  180|     10|#define FOR_ITER_VIRTUAL                       178
  ------------------
 2733|     10|        return;
 2734|    127|    }
 2735|    158|failure:
 2736|    158|    SPECIALIZATION_FAIL(FOR_ITER,
  ------------------
  |  |   43|    158|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2737|    158|                        _PySpecialization_ClassifyIterator(iter_o));
 2738|    158|    unspecialize(instr);
 2739|    158|}
_Py_Specialize_Send:
 2743|      2|{
 2744|      2|    PyObject *receiver = PyStackRef_AsPyObjectBorrow(receiver_st);
 2745|       |
 2746|      2|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2746:5): [True: 2, Folded]
  ------------------
 2747|      2|    assert(_PyOpcode_Caches[SEND] == INLINE_CACHE_ENTRIES_SEND);
  ------------------
  |  Branch (2747:5): [True: 2, False: 0]
  ------------------
 2748|      2|    PyTypeObject *tp = Py_TYPE(receiver);
  ------------------
  |  |  213|      2|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2749|      2|    if (tp == &PyGen_Type || tp == &PyCoro_Type) {
  ------------------
  |  Branch (2749:9): [True: 0, False: 2]
  |  Branch (2749:30): [True: 0, False: 2]
  ------------------
 2750|       |        /* Don't specialize if PEP 523 is active */
 2751|      0|        if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (2751:13): [True: 0, False: 0]
  ------------------
 2752|      0|            SPECIALIZATION_FAIL(SEND, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2753|      0|            goto failure;
 2754|      0|        }
 2755|      0|        specialize(instr, SEND_GEN);
  ------------------
  |  |  205|      0|#define SEND_GEN                               203
  ------------------
 2756|      0|        return;
 2757|      0|    }
 2758|      2|    if (tp->_tp_iteritem != NULL) {
  ------------------
  |  Branch (2758:9): [True: 2, False: 0]
  ------------------
 2759|      2|        specialize(instr, SEND_VIRTUAL);
  ------------------
  |  |  206|      2|#define SEND_VIRTUAL                           204
  ------------------
 2760|      2|        return;
 2761|      2|    }
 2762|      0|    if (tp == &_PyAsyncGenASend_Type) {
  ------------------
  |  Branch (2762:9): [True: 0, False: 0]
  ------------------
 2763|      0|        specialize(instr, SEND_ASYNC_GEN);
  ------------------
  |  |  204|      0|#define SEND_ASYNC_GEN                         202
  ------------------
 2764|      0|        return;
 2765|      0|    }
 2766|      0|    SPECIALIZATION_FAIL(SEND,
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2767|      0|                        _PySpecialization_ClassifyIterator(receiver));
 2768|      0|failure:
 2769|      0|    unspecialize(instr);
 2770|      0|}
_Py_Specialize_CallFunctionEx:
 2774|     19|{
 2775|     19|    PyObject *func = PyStackRef_AsPyObjectBorrow(func_st);
 2776|       |
 2777|     19|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2777:5): [True: 19, Folded]
  ------------------
 2778|     19|    assert(_PyOpcode_Caches[CALL_FUNCTION_EX] == INLINE_CACHE_ENTRIES_CALL_FUNCTION_EX);
  ------------------
  |  Branch (2778:5): [True: 19, False: 0]
  ------------------
 2779|       |
 2780|     19|    if (Py_TYPE(func) == &PyFunction_Type &&
  ------------------
  |  |  213|     19|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     19|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     19|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2780:9): [True: 6, False: 13]
  ------------------
 2781|      6|        ((PyFunctionObject *)func)->vectorcall == _PyFunction_Vectorcall) {
  ------------------
  |  Branch (2781:9): [True: 6, False: 0]
  ------------------
 2782|      6|        if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (2782:13): [True: 0, False: 6]
  ------------------
 2783|      0|            goto failure;
 2784|      0|        }
 2785|      6|        specialize(instr, CALL_EX_PY);
  ------------------
  |  |  154|      6|#define CALL_EX_PY                             152
  ------------------
 2786|      6|        return;
 2787|      6|    }
 2788|     13|    specialize(instr, CALL_EX_NON_PY_GENERAL);
  ------------------
  |  |  153|     13|#define CALL_EX_NON_PY_GENERAL                 151
  ------------------
 2789|     13|    return;
 2790|      0|failure:
 2791|      0|    unspecialize(instr);
 2792|      0|}
_Py_Specialize_ToBool:
 2843|    461|{
 2844|    461|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2844:5): [True: 461, Folded]
  ------------------
 2845|    461|    assert(_PyOpcode_Caches[TO_BOOL] == INLINE_CACHE_ENTRIES_TO_BOOL);
  ------------------
  |  Branch (2845:5): [True: 461, False: 0]
  ------------------
 2846|    461|    _PyToBoolCache *cache = (_PyToBoolCache *)(instr + 1);
 2847|    461|    PyObject *value = PyStackRef_AsPyObjectBorrow(value_o);
 2848|    461|    uint8_t specialized_op;
 2849|    461|    if (PyBool_Check(value)) {
  ------------------
  |  |   12|    461|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|    461|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    461|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    461|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 242, False: 219]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2850|    242|        specialized_op = TO_BOOL_BOOL;
  ------------------
  |  |  213|    242|#define TO_BOOL_BOOL                           211
  ------------------
 2851|    242|        goto success;
 2852|    242|    }
 2853|    219|    if (PyLong_CheckExact(value)) {
  ------------------
  |  |   14|    219|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    219|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    219|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    219|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 55, False: 164]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2854|     55|        specialized_op = TO_BOOL_INT;
  ------------------
  |  |  214|     55|#define TO_BOOL_INT                            212
  ------------------
 2855|     55|        goto success;
 2856|     55|    }
 2857|    164|    if (PyList_CheckExact(value)) {
  ------------------
  |  |   26|    164|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|    164|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    164|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    164|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 25, False: 139]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2858|     25|        specialized_op = TO_BOOL_LIST;
  ------------------
  |  |  215|     25|#define TO_BOOL_LIST                           213
  ------------------
 2859|     25|        goto success;
 2860|     25|    }
 2861|    139|    if (Py_IsNone(value)) {
  ------------------
  |  |  621|    139|#define Py_IsNone(x) Py_Is((x), Py_None)
  |  |  ------------------
  |  |  |  |  187|    139|#define Py_Is(x, y) ((x) == (y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (187:21): [True: 24, False: 115]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2862|     24|        specialized_op = TO_BOOL_NONE;
  ------------------
  |  |  216|     24|#define TO_BOOL_NONE                           214
  ------------------
 2863|     24|        goto success;
 2864|     24|    }
 2865|    115|    if (PyUnicode_CheckExact(value)) {
  ------------------
  |  |  104|    115|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|    115|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    115|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    115|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 49, False: 66]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2866|     49|        specialized_op = TO_BOOL_STR;
  ------------------
  |  |  217|     49|#define TO_BOOL_STR                            215
  ------------------
 2867|     49|        goto success;
 2868|     49|    }
 2869|     66|    if (PyType_HasFeature(Py_TYPE(value), Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  213|     66|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     66|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     66|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PyType_HasFeature(Py_TYPE(value), Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|     66|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (2869:9): [True: 8, False: 58]
  ------------------
 2870|      8|        unsigned int version = 0;
 2871|      8|        int err = _PyType_Validate(Py_TYPE(value), check_type_always_true, &version);
  ------------------
  |  |  213|      8|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      8|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      8|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2872|      8|        if (err < 0) {
  ------------------
  |  Branch (2872:13): [True: 0, False: 8]
  ------------------
 2873|      0|            SPECIALIZATION_FAIL(TO_BOOL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2874|      0|            goto failure;
 2875|      0|        }
 2876|      8|        else if (err > 0) {
  ------------------
  |  Branch (2876:18): [True: 6, False: 2]
  ------------------
 2877|      6|            SPECIALIZATION_FAIL(TO_BOOL, err);
  ------------------
  |  |   43|      6|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2878|      6|            goto failure;
 2879|      6|        }
 2880|       |
 2881|      8|        assert(err == 0);
  ------------------
  |  Branch (2881:9): [True: 2, False: 0]
  ------------------
 2882|      2|        assert(version);
  ------------------
  |  Branch (2882:9): [True: 2, False: 0]
  ------------------
 2883|      2|        write_u32(cache->version, version);
 2884|      2|        specialized_op = TO_BOOL_ALWAYS_TRUE;
  ------------------
  |  |  212|      2|#define TO_BOOL_ALWAYS_TRUE                    210
  ------------------
 2885|      2|        goto success;
 2886|      2|    }
 2887|       |
 2888|     58|    SPECIALIZATION_FAIL(TO_BOOL, to_bool_fail_kind(value));
  ------------------
  |  |   43|     58|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2889|     64|failure:
 2890|     64|    unspecialize(instr);
 2891|     64|    return;
 2892|    397|success:
 2893|    397|    specialize(instr, specialized_op);
 2894|    397|}
_Py_Specialize_ContainsOp:
 2917|    197|{
 2918|    197|    PyObject *value = PyStackRef_AsPyObjectBorrow(value_st);
 2919|       |
 2920|    197|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2920:5): [True: 197, Folded]
  ------------------
 2921|    197|    assert(_PyOpcode_Caches[CONTAINS_OP] == INLINE_CACHE_ENTRIES_COMPARE_OP);
  ------------------
  |  Branch (2921:5): [True: 197, False: 0]
  ------------------
 2922|    197|    if (PyAnyDict_CheckExact(value)) {
  ------------------
  |  |   41|    197|    (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   19|    197|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|    394|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    197|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    197|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 29, False: 168]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   (PyDict_CheckExact(ob) || PyFrozenDict_CheckExact(ob))
  |  |  ------------------
  |  |  |  |   38|    168|#define PyFrozenDict_CheckExact(op) Py_IS_TYPE((op), &PyFrozenDict_Type)
  |  |  |  |  ------------------
  |  |  |  |  |  |  215|    168|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|    168|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:32): [True: 0, False: 168]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2923|     29|        specialize(instr, CONTAINS_OP_DICT);
  ------------------
  |  |  174|     29|#define CONTAINS_OP_DICT                       172
  ------------------
 2924|     29|        return;
 2925|     29|    }
 2926|    168|    if (PySet_CheckExact(value) || PyFrozenSet_CheckExact(value)) {
  ------------------
  |  |   35|    168|#define PySet_CheckExact(op) Py_IS_TYPE(op, &PySet_Type)
  |  |  ------------------
  |  |  |  |  215|    336|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    168|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    168|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 21, False: 147]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if (PySet_CheckExact(value) || PyFrozenSet_CheckExact(value)) {
  ------------------
  |  |   23|    147|#define PyFrozenSet_CheckExact(ob) Py_IS_TYPE((ob), &PyFrozenSet_Type)
  |  |  ------------------
  |  |  |  |  215|    147|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    147|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    147|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 8, False: 139]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2927|     29|        specialize(instr, CONTAINS_OP_SET);
  ------------------
  |  |  175|     29|#define CONTAINS_OP_SET                        173
  ------------------
 2928|     29|        return;
 2929|     29|    }
 2930|       |
 2931|    139|    SPECIALIZATION_FAIL(CONTAINS_OP, containsop_fail_kind(value));
  ------------------
  |  |   43|    139|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2932|    139|    unspecialize(instr);
 2933|    139|    return;
 2934|    168|}
_Py_Specialize_GetIter:
 2938|    132|{
 2939|    132|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (2939:5): [True: 132, Folded]
  ------------------
 2940|    132|    PyTypeObject *tp = PyStackRef_TYPE(iterable);
 2941|    132|    if (tp->_tp_iteritem != NULL) {
  ------------------
  |  Branch (2941:9): [True: 93, False: 39]
  ------------------
 2942|     93|        specialize(instr, GET_ITER_VIRTUAL);
  ------------------
  |  |  182|     93|#define GET_ITER_VIRTUAL                       180
  ------------------
 2943|     93|        return;
 2944|     93|    }
 2945|     39|    if (tp->tp_iter == PyObject_SelfIter) {
  ------------------
  |  Branch (2945:9): [True: 16, False: 23]
  ------------------
 2946|     16|        specialize(instr, GET_ITER_SELF);
  ------------------
  |  |  181|     16|#define GET_ITER_SELF                          179
  ------------------
 2947|     16|        return;
 2948|     16|    }
 2949|     23|    SPECIALIZATION_FAIL(GET_ITER,
  ------------------
  |  |   43|     23|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 2950|     23|        tp == &PyCoro_Type ? SPEC_FAIL_ITER_COROUTINE : SPEC_FAIL_OTHER);
 2951|     23|    unspecialize(instr);
 2952|     23|}
_Py_Specialize_Resume:
 2956|  1.71k|{
 2957|  1.71k|    if (tstate->tracing == 0 && instr->op.code == RESUME) {
  ------------------
  |  |  130|  1.71k|#define RESUME                                 128
  ------------------
  |  Branch (2957:9): [True: 1.71k, False: 0]
  |  Branch (2957:33): [True: 1.54k, False: 171]
  ------------------
 2958|  1.54k|        if (tstate->interp->jit) {
  ------------------
  |  Branch (2958:13): [True: 0, False: 1.54k]
  ------------------
 2959|      0|            PyCodeObject *co = (PyCodeObject *)PyStackRef_AsPyObjectBorrow(frame->f_executable);
 2960|      0|            if (co != NULL &&
  ------------------
  |  Branch (2960:17): [True: 0, False: 0]
  ------------------
 2961|      0|                PyCode_Check(co) &&
  ------------------
  |  |  168|      0|#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2962|      0|                (co->co_flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) == 0) {
  ------------------
  |  |  127|      0|#define CO_GENERATOR    0x0020
  ------------------
                              (co->co_flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) == 0) {
  ------------------
  |  |  131|      0|#define CO_COROUTINE            0x0080
  ------------------
                              (co->co_flags & (CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR)) == 0) {
  ------------------
  |  |  133|      0|#define CO_ASYNC_GENERATOR      0x0200
  ------------------
  |  Branch (2962:17): [True: 0, False: 0]
  ------------------
 2963|      0|                specialize(instr, RESUME_CHECK_JIT);
  ------------------
  |  |  203|      0|#define RESUME_CHECK_JIT                       201
  ------------------
 2964|      0|                set_counter((_Py_BackoffCounter *)instr + 1, initial_resume_backoff_counter(&tstate->interp->opt_config));
 2965|      0|                return;
 2966|      0|            }
 2967|      0|        }
 2968|  1.54k|        specialize(instr, RESUME_CHECK);
  ------------------
  |  |  202|  1.54k|#define RESUME_CHECK                           200
  ------------------
 2969|  1.54k|        return;
 2970|  1.54k|    }
 2971|    171|    unspecialize(instr);
 2972|    171|    return;
 2973|  1.71k|}
specialize.c:fixup_getiter:
   48|  3.06k|{
   49|       |    // Compiler can't know if types.coroutine() will be called,
   50|       |    // so fix up here
   51|  3.06k|    if (instruction->op.arg) {
  ------------------
  |  Branch (51:9): [True: 19, False: 3.05k]
  ------------------
   52|     19|        if (flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE)) {
  ------------------
  |  |  131|     19|#define CO_COROUTINE            0x0080
  ------------------
                      if (flags & (CO_COROUTINE | CO_ITERABLE_COROUTINE)) {
  ------------------
  |  |  132|     19|#define CO_ITERABLE_COROUTINE   0x0100
  ------------------
  |  Branch (52:13): [True: 0, False: 19]
  ------------------
   53|      0|            instruction->op.arg = GET_ITER_YIELD_FROM_NO_CHECK;
  ------------------
  |  |   98|      0|#define GET_ITER_YIELD_FROM_NO_CHECK 2
  ------------------
   54|      0|        }
   55|     19|        else {
   56|     19|            instruction->op.arg = GET_ITER_YIELD_FROM_CORO_CHECK;
  ------------------
  |  |   99|     19|#define GET_ITER_YIELD_FROM_CORO_CHECK 3
  ------------------
   57|     19|        }
   58|     19|    }
   59|  3.06k|}
specialize.c:specialize:
  364|   183k|{
  365|   183k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (365:5): [True: 183k, False: 0]
  ------------------
  366|   183k|    if (!set_opcode(instr, specialized_opcode)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 183k]
  ------------------
  367|      0|        STAT_INC(_PyOpcode_Deopt[specialized_opcode], failure);
  ------------------
  |  |   73|      0|#define STAT_INC(opname, name) ((void)0)
  ------------------
  368|      0|        SPECIALIZATION_FAIL(_PyOpcode_Deopt[specialized_opcode],
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  369|      0|                            SPEC_FAIL_OTHER);
  370|      0|        return;
  371|      0|    }
  372|   183k|    STAT_INC(_PyOpcode_Deopt[specialized_opcode], success);
  ------------------
  |  |   73|   183k|#define STAT_INC(opname, name) ((void)0)
  ------------------
  373|   183k|    set_counter((_Py_BackoffCounter *)instr + 1, adaptive_counter_cooldown());
  374|   183k|}
specialize.c:set_opcode:
  327|   187k|{
  328|       |#ifdef Py_GIL_DISABLED
  329|       |    uint8_t old_op = _Py_atomic_load_uint8_relaxed(&instr->op.code);
  330|       |    if (old_op >= MIN_INSTRUMENTED_OPCODE) {
  331|       |        /* Lost race with instrumentation */
  332|       |        return 0;
  333|       |    }
  334|       |    if (!_Py_atomic_compare_exchange_uint8(&instr->op.code, &old_op, opcode)) {
  335|       |        /* Lost race with instrumentation */
  336|       |        assert(old_op >= MIN_INSTRUMENTED_OPCODE);
  337|       |        return 0;
  338|       |    }
  339|       |    return 1;
  340|       |#else
  341|   187k|    instr->op.code = opcode;
  342|   187k|    return 1;
  343|   187k|#endif
  344|   187k|}
specialize.c:unspecialize:
  378|  3.73k|{
  379|  3.73k|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (379:5): [True: 3.73k, False: 0]
  ------------------
  380|  3.73k|    uint8_t opcode = FT_ATOMIC_LOAD_UINT8_RELAXED(instr->op.code);
  ------------------
  |  |  157|  3.73k|#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
  ------------------
  381|  3.73k|    uint8_t generic_opcode = _PyOpcode_Deopt[opcode];
  382|  3.73k|    STAT_INC(generic_opcode, failure);
  ------------------
  |  |   73|  3.73k|#define STAT_INC(opname, name) ((void)0)
  ------------------
  383|  3.73k|    if (!set_opcode(instr, generic_opcode)) {
  ------------------
  |  Branch (383:9): [True: 0, False: 3.73k]
  ------------------
  384|      0|        SPECIALIZATION_FAIL(generic_opcode, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  385|      0|        return;
  386|      0|    }
  387|  3.73k|    _Py_BackoffCounter *counter = (_Py_BackoffCounter *)instr + 1;
  388|  3.73k|    _Py_BackoffCounter cur = load_counter(counter);
  389|  3.73k|    set_counter(counter, adaptive_counter_backoff(cur));
  390|  3.73k|}
specialize.c:load_counter:
  355|  3.73k|{
  356|  3.73k|    _Py_BackoffCounter result = {
  357|  3.73k|        .value_and_backoff =
  358|  3.73k|            FT_ATOMIC_LOAD_UINT16_RELAXED(counter->value_and_backoff)};
  ------------------
  |  |  158|  3.73k|#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
  ------------------
  359|  3.73k|    return result;
  360|  3.73k|}
specialize.c:specialize_module_load_attr:
  451|    345|{
  452|    345|    PyModuleObject *m = (PyModuleObject *)owner;
  453|    345|    assert((Py_TYPE(owner)->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0);
  ------------------
  |  Branch (453:5): [True: 345, False: 0]
  ------------------
  454|    345|    PyDictObject *dict = (PyDictObject *)m->md_dict;
  455|    345|    if (dict == NULL) {
  ------------------
  |  Branch (455:9): [True: 0, False: 345]
  ------------------
  456|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_NO_DICT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  457|      0|        return -1;
  458|      0|    }
  459|    345|    int result;
  460|    345|    Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|    345|    {
  ------------------
  461|    345|    result = specialize_module_load_attr_lock_held(dict, instr, name);
  462|    345|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    345|    }
  ------------------
  463|    345|    return result;
  464|    345|}
specialize.c:specialize_module_load_attr_lock_held:
  413|    345|{
  414|    345|    _PyAttrCache *cache = (_PyAttrCache *)(instr + 1);
  415|    345|    if (dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) {
  ------------------
  |  Branch (415:9): [True: 0, False: 345]
  ------------------
  416|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_NON_STRING);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  417|      0|        return -1;
  418|      0|    }
  419|    345|    PyObject *value;
  420|    345|    Py_ssize_t index = _PyDict_LookupIndexAndValue(dict, name, &value);
  421|    345|    if (value != NULL && PyLazyImport_CheckExact(value)) {
  ------------------
  |  |   15|    330|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |  215|    330|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    330|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    330|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 330]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (421:9): [True: 330, False: 15]
  ------------------
  422|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_MODULE_LAZY_VALUE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  423|      0|        return -1;
  424|      0|    }
  425|    345|    assert(index != DKIX_ERROR);
  ------------------
  |  Branch (425:5): [True: 345, False: 0]
  ------------------
  426|    345|    if (index != (uint16_t)index) {
  ------------------
  |  Branch (426:9): [True: 15, False: 330]
  ------------------
  427|     15|        SPECIALIZATION_FAIL(LOAD_ATTR,
  ------------------
  |  |   43|     15|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  428|     15|                            index == DKIX_EMPTY ?
  429|     15|                            SPEC_FAIL_ATTR_MODULE_ATTR_NOT_FOUND :
  430|     15|                            SPEC_FAIL_OUT_OF_RANGE);
  431|     15|        return -1;
  432|     15|    }
  433|    330|    uint32_t keys_version = _PyDict_GetKeysVersionForCurrentState(
  434|    330|            _PyInterpreterState_GET(), dict);
  435|    330|    if (keys_version == 0) {
  ------------------
  |  Branch (435:9): [True: 0, False: 330]
  ------------------
  436|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  437|      0|        return -1;
  438|      0|    }
  439|       |#ifdef Py_GIL_DISABLED
  440|       |    maybe_enable_deferred_ref_count(value);
  441|       |#endif
  442|    330|    write_u32(cache->version, keys_version);
  443|    330|    cache->index = (uint16_t)index;
  444|    330|    specialize(instr, LOAD_ATTR_MODULE);
  ------------------
  |  |  192|    330|#define LOAD_ATTR_MODULE                       190
  ------------------
  445|    330|    return 0;
  446|    330|}
specialize.c:specialize_instance_load_attr:
  981|  1.01k|{
  982|       |    // 0 is not a valid version
  983|  1.01k|    PyObject *descr = NULL;
  984|  1.01k|    unsigned int tp_version = 0;
  985|  1.01k|    PyTypeObject *type = Py_TYPE(owner);
  ------------------
  |  |  213|  1.01k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  986|       |    // Read the type version before the keys version, we could have a concurrent
  987|       |    // modification of the split keys in which case we update the keys version and
  988|       |    // then the type version, this ensures we will still deopt if that happens.
  989|  1.01k|    DescriptorClassification kind = analyze_descriptor_load(type, name, &descr, &tp_version);
  990|  1.01k|    uint32_t shared_keys_version = 0;
  991|  1.01k|    bool shadow = instance_has_key(owner, name, &shared_keys_version);
  992|  1.01k|    int result = do_specialize_instance_load_attr(owner, instr, name, shadow, shared_keys_version, kind, descr, tp_version);
  993|  1.01k|    Py_XDECREF(descr);
  ------------------
  |  |  524|  1.01k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  994|  1.01k|    return result;
  995|  1.01k|}
specialize.c:analyze_descriptor_load:
  558|  1.15k|analyze_descriptor_load(PyTypeObject *type, PyObject *name, PyObject **descr, unsigned int *tp_version) {
  559|  1.15k|    bool has_getattr = false;
  560|  1.15k|    bool have_ga_version = false;
  561|  1.15k|    unsigned int ga_version;
  562|  1.15k|    getattrofunc getattro_slot = type->tp_getattro;
  563|  1.15k|    if (getattro_slot == PyObject_GenericGetAttr) {
  ------------------
  |  Branch (563:9): [True: 1.14k, False: 7]
  ------------------
  564|       |        /* Normal attribute lookup; */
  565|  1.14k|        has_getattr = false;
  566|  1.14k|    }
  567|      7|    else if (getattro_slot == _Py_slot_tp_getattr_hook ||
  ------------------
  |  Branch (567:14): [True: 0, False: 7]
  ------------------
  568|      7|        getattro_slot == _Py_slot_tp_getattro) {
  ------------------
  |  Branch (568:9): [True: 0, False: 7]
  ------------------
  569|       |        /* One or both of __getattribute__ or __getattr__ may have been
  570|       |         overridden See typeobject.c for why these functions are special. */
  571|      0|        PyObject *getattribute = _PyType_LookupRefAndVersion(type,
  572|      0|                &_Py_ID(__getattribute__), &ga_version);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|      0|        have_ga_version = true;
  574|      0|        PyInterpreterState *interp = _PyInterpreterState_GET();
  575|      0|        bool has_custom_getattribute = getattribute != NULL &&
  ------------------
  |  Branch (575:40): [True: 0, False: 0]
  ------------------
  576|      0|            getattribute != interp->callable_cache.object__getattribute__;
  ------------------
  |  Branch (576:13): [True: 0, False: 0]
  ------------------
  577|      0|        PyObject *getattr = _PyType_Lookup(type, &_Py_ID(__getattr__));
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  578|      0|        has_getattr = getattr != NULL;
  579|      0|        if (has_custom_getattribute) {
  ------------------
  |  Branch (579:13): [True: 0, False: 0]
  ------------------
  580|      0|            if (!has_getattr &&
  ------------------
  |  Branch (580:17): [True: 0, False: 0]
  ------------------
  581|      0|                Py_IS_TYPE(getattribute, &PyFunction_Type)) {
  ------------------
  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  582|      0|                *descr = getattribute;
  583|      0|                *tp_version = ga_version;
  584|      0|                return GETATTRIBUTE_IS_PYTHON_FUNCTION;
  585|      0|            }
  586|       |            /* Potentially both __getattr__ and __getattribute__ are set.
  587|       |               Too complicated */
  588|      0|            Py_DECREF(getattribute);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  589|      0|            *descr = NULL;
  590|      0|            *tp_version = ga_version;
  591|      0|            return GETSET_OVERRIDDEN;
  592|      0|        }
  593|       |        /* Potentially has __getattr__ but no custom __getattribute__.
  594|       |           Fall through to usual descriptor analysis.
  595|       |           Usual attribute lookup should only be allowed at runtime
  596|       |           if we can guarantee that there is no way an exception can be
  597|       |           raised. This means some specializations, e.g. specializing
  598|       |           for property() isn't safe.
  599|       |        */
  600|      0|        Py_XDECREF(getattribute);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  601|      0|    }
  602|      7|    else {
  603|      7|        *descr = NULL;
  604|      7|        *tp_version = FT_ATOMIC_LOAD_UINT_RELAXED(type->tp_version_tag);
  ------------------
  |  |  189|      7|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  ------------------
  605|      7|        return GETSET_OVERRIDDEN;
  606|      7|    }
  607|  1.14k|    unsigned int descr_version;
  608|  1.14k|    PyObject *descriptor = _PyType_LookupRefAndVersion(type, name, &descr_version);
  609|  1.14k|    *descr = descriptor;
  610|  1.14k|    *tp_version = have_ga_version ? ga_version : descr_version;
  ------------------
  |  Branch (610:19): [True: 0, False: 1.14k]
  ------------------
  611|  1.14k|    if (descriptor_is_class(descriptor, name)) {
  ------------------
  |  Branch (611:9): [True: 4, False: 1.14k]
  ------------------
  612|      4|        return DUNDER_CLASS;
  613|      4|    }
  614|  1.14k|    return classify_descriptor(descriptor, has_getattr);
  615|  1.14k|}
specialize.c:descriptor_is_class:
  552|  1.39k|{
  553|  1.39k|    return ((PyUnicode_CompareWithASCIIString(name, "__class__") == 0) &&
  ------------------
  |  Branch (553:13): [True: 4, False: 1.39k]
  ------------------
  554|      4|            (descriptor == _PyType_Lookup(&PyBaseObject_Type, name)));
  ------------------
  |  Branch (554:13): [True: 4, False: 0]
  ------------------
  555|  1.39k|}
specialize.c:classify_descriptor:
  510|  1.59k|{
  511|  1.59k|    if (descriptor == NULL) {
  ------------------
  |  Branch (511:9): [True: 591, False: 1.00k]
  ------------------
  512|    591|        return ABSENT;
  513|    591|    }
  514|  1.00k|    PyTypeObject *desc_cls = Py_TYPE(descriptor);
  ------------------
  |  |  213|  1.00k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.00k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.00k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|  1.00k|    if (!(desc_cls->tp_flags & Py_TPFLAGS_IMMUTABLETYPE)) {
  ------------------
  |  |  500|  1.00k|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (515:9): [True: 1, False: 1.00k]
  ------------------
  516|      1|        return MUTABLE;
  517|      1|    }
  518|  1.00k|    if (desc_cls->tp_descr_set) {
  ------------------
  |  Branch (518:9): [True: 171, False: 830]
  ------------------
  519|    171|        if (desc_cls == &PyMemberDescr_Type) {
  ------------------
  |  Branch (519:13): [True: 71, False: 100]
  ------------------
  520|     71|            PyMemberDescrObject *member = (PyMemberDescrObject *)descriptor;
  521|     71|            struct PyMemberDef *dmem = member->d_member;
  522|     71|            if (dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT) {
  ------------------
  |  |   75|    142|#define Py_T_OBJECT_EX 16
  ------------------
                          if (dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT) {
  ------------------
  |  |   59|     59|#define _Py_T_OBJECT   6  // Deprecated, use Py_T_OBJECT_EX instead
  ------------------
  |  Branch (522:17): [True: 12, False: 59]
  |  Branch (522:49): [True: 29, False: 30]
  ------------------
  523|     41|                return OBJECT_SLOT;
  524|     41|            }
  525|     30|            return OTHER_SLOT;
  526|     71|        }
  527|    100|        if (desc_cls == &PyProperty_Type) {
  ------------------
  |  Branch (527:13): [True: 14, False: 86]
  ------------------
  528|       |            /* We can't detect at runtime whether an attribute exists
  529|       |               with property. So that means we may have to call
  530|       |               __getattr__. */
  531|     14|            return has_getattr ? GETSET_OVERRIDDEN : PROPERTY;
  ------------------
  |  Branch (531:20): [True: 0, False: 14]
  ------------------
  532|     14|        }
  533|     86|        return OVERRIDING;
  534|    100|    }
  535|    830|    if (desc_cls->tp_descr_get) {
  ------------------
  |  Branch (535:9): [True: 750, False: 80]
  ------------------
  536|    750|        if (desc_cls->tp_flags & Py_TPFLAGS_METHOD_DESCRIPTOR) {
  ------------------
  |  |  534|    750|#define Py_TPFLAGS_METHOD_DESCRIPTOR (1UL << 17)
  ------------------
  |  Branch (536:13): [True: 672, False: 78]
  ------------------
  537|    672|            return METHOD;
  538|    672|        }
  539|     78|        if (Py_IS_TYPE(descriptor, &PyClassMethodDescr_Type)) {
  ------------------
  |  |  215|     78|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     78|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     78|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 8, False: 70]
  |  |  ------------------
  ------------------
  540|      8|            return BUILTIN_CLASSMETHOD;
  541|      8|        }
  542|     70|        if (Py_IS_TYPE(descriptor, &PyClassMethod_Type)) {
  ------------------
  |  |  215|     70|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     70|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     70|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (215:32): [True: 35, False: 35]
  |  |  ------------------
  ------------------
  543|     35|            return PYTHON_CLASSMETHOD;
  544|     35|        }
  545|     35|        return NON_OVERRIDING;
  546|     70|    }
  547|     80|    return NON_DESCRIPTOR;
  548|    830|}
specialize.c:instance_has_key:
  760|  1.01k|{
  761|  1.01k|    PyTypeObject *cls = Py_TYPE(obj);
  ------------------
  |  |  213|  1.01k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|  1.01k|    if ((cls->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0) {
  ------------------
  |  |  482|  1.01k|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (762:9): [True: 624, False: 390]
  ------------------
  763|    624|        return false;
  764|    624|    }
  765|    390|    if (cls->tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|    390|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (765:9): [True: 366, False: 24]
  ------------------
  766|    366|        PyDictKeysObject *keys = ((PyHeapTypeObject *)cls)->ht_cached_keys;
  767|    366|        Py_ssize_t index =
  768|    366|            _PyDictKeys_StringLookupAndVersion(keys, name, shared_keys_version);
  769|    366|        return index >= 0;
  770|    366|    }
  771|     24|    PyDictObject *dict = _PyObject_GetManagedDict(obj);
  772|     24|    if (dict == NULL || !PyDict_CheckExact(dict)) {
  ------------------
  |  |   19|     24|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|     24|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     24|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     24|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (772:9): [True: 0, False: 24]
  |  Branch (772:25): [True: 0, False: 24]
  ------------------
  773|      0|        return false;
  774|      0|    }
  775|     24|    bool result;
  776|     24|    Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|     24|    {
  ------------------
  777|     24|    if (dict->ma_values) {
  ------------------
  |  Branch (777:9): [True: 24, False: 0]
  ------------------
  778|     24|        result = false;
  779|     24|    }
  780|      0|    else {
  781|      0|        result = (_PyDict_LookupIndex(dict, name) >= 0);
  782|      0|    }
  783|     24|    Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     24|    }
  ------------------
  784|     24|    return result;
  785|     24|}
specialize.c:do_specialize_instance_load_attr:
  791|  1.01k|{
  792|  1.01k|    _PyAttrCache *cache = (_PyAttrCache *)(instr + 1);
  793|  1.01k|    PyTypeObject *type = Py_TYPE(owner);
  ------------------
  |  |  213|  1.01k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.01k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.01k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  794|  1.01k|    if (tp_version == 0) {
  ------------------
  |  Branch (794:9): [True: 0, False: 1.01k]
  ------------------
  795|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  796|      0|        return -1;
  797|      0|    }
  798|  1.01k|    uint8_t oparg = FT_ATOMIC_LOAD_UINT8_RELAXED(instr->op.arg);
  ------------------
  |  |  157|  1.01k|#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
  ------------------
  799|  1.01k|    switch(kind) {
  ------------------
  |  Branch (799:12): [True: 1.01k, False: 0]
  ------------------
  800|     13|        case OVERRIDING:
  ------------------
  |  Branch (800:9): [True: 13, False: 1.00k]
  ------------------
  801|     13|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_OVERRIDING_DESCRIPTOR);
  ------------------
  |  |   43|     13|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  802|     13|            return -1;
  803|    644|        case METHOD:
  ------------------
  |  Branch (803:9): [True: 644, False: 370]
  ------------------
  804|    644|        {
  805|    644|            if (shadow) {
  ------------------
  |  Branch (805:17): [True: 0, False: 644]
  ------------------
  806|      0|                goto try_instance;
  807|      0|            }
  808|    644|            if (oparg & 1) {
  ------------------
  |  Branch (808:17): [True: 315, False: 329]
  ------------------
  809|    315|                if (specialize_attr_loadclassattr(owner, instr, name, descr,
  ------------------
  |  Branch (809:21): [True: 299, False: 16]
  ------------------
  810|    315|                                                  tp_version, kind, true,
  811|    315|                                                  shared_keys_version)) {
  812|    299|                    return 0;
  813|    299|                }
  814|     16|                else {
  815|     16|                    return -1;
  816|     16|                }
  817|    315|            }
  818|    329|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_METHOD);
  ------------------
  |  |   43|    329|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  819|    329|            return -1;
  820|    644|        }
  821|     12|        case PROPERTY:
  ------------------
  |  Branch (821:9): [True: 12, False: 1.00k]
  ------------------
  822|     12|        {
  823|     12|            _PyLoadMethodCache *lm_cache = (_PyLoadMethodCache *)(instr + 1);
  824|     12|            assert(Py_TYPE(descr) == &PyProperty_Type);
  ------------------
  |  Branch (824:13): [True: 12, False: 0]
  ------------------
  825|     12|            PyObject *fget = ((_PyPropertyObject *)descr)->prop_get;
  826|     12|            if (fget == NULL) {
  ------------------
  |  Branch (826:17): [True: 0, False: 12]
  ------------------
  827|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  828|      0|                return -1;
  829|      0|            }
  830|     12|            if (!Py_IS_TYPE(fget, &PyFunction_Type)) {
  ------------------
  |  |  215|     12|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     12|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     12|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (830:17): [True: 0, False: 12]
  ------------------
  831|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_PROPERTY_NOT_PY_FUNCTION);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  832|      0|                return -1;
  833|      0|            }
  834|     12|            if (!function_check_args(fget, 1, LOAD_ATTR)) {
  ------------------
  |  |   89|     12|#define LOAD_ATTR                               76
  ------------------
  |  Branch (834:17): [True: 0, False: 12]
  ------------------
  835|      0|                return -1;
  836|      0|            }
  837|     12|            if (oparg & 1) {
  ------------------
  |  Branch (837:17): [True: 0, False: 12]
  ------------------
  838|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_METHOD);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  839|      0|                return -1;
  840|      0|            }
  841|       |            /* Don't specialize if PEP 523 is active */
  842|     12|            if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (842:17): [True: 0, False: 12]
  ------------------
  843|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  844|      0|                return -1;
  845|      0|            }
  846|       |            #ifdef Py_GIL_DISABLED
  847|       |            if (!_PyObject_HasDeferredRefcount(fget)) {
  848|       |                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_DESCR_NOT_DEFERRED);
  849|       |                return -1;
  850|       |            }
  851|       |            #endif
  852|     12|            uint32_t func_version = function_get_version(fget, LOAD_ATTR);
  ------------------
  |  |   89|     12|#define LOAD_ATTR                               76
  ------------------
  853|     12|            if (func_version == 0) {
  ------------------
  |  Branch (853:17): [True: 0, False: 12]
  ------------------
  854|      0|                return -1;
  855|      0|            }
  856|     12|            assert(tp_version != 0);
  ------------------
  |  Branch (856:13): [True: 12, False: 0]
  ------------------
  857|     12|            write_u32(lm_cache->type_version, tp_version);
  858|     12|            write_u32(lm_cache->keys_version, func_version);
  859|       |            /* borrowed */
  860|     12|            write_ptr(lm_cache->descr, fget);
  861|     12|            specialize(instr, LOAD_ATTR_PROPERTY);
  ------------------
  |  |  195|     12|#define LOAD_ATTR_PROPERTY                     193
  ------------------
  862|     12|            return 0;
  863|     12|        }
  864|     31|        case OBJECT_SLOT:
  ------------------
  |  Branch (864:9): [True: 31, False: 983]
  ------------------
  865|     31|        {
  866|     31|            PyMemberDescrObject *member = (PyMemberDescrObject *)descr;
  867|     31|            struct PyMemberDef *dmem = member->d_member;
  868|     31|            Py_ssize_t offset = dmem->offset;
  869|     31|            if (!PyObject_TypeCheck(owner, member->d_common.d_type)) {
  ------------------
  |  |  378|     31|#  define PyObject_TypeCheck(ob, type) PyObject_TypeCheck(_PyObject_CAST(ob), (type))
  |  |  ------------------
  |  |  |  |  171|     31|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     31|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (869:17): [True: 0, False: 31]
  ------------------
  870|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  871|      0|                return -1;
  872|      0|            }
  873|     31|            if (dmem->flags & _Py_AFTER_ITEMS) {
  ------------------
  |  |   89|     31|#  define _Py_AFTER_ITEMS      (1 << 4) // For internal use.
  ------------------
  |  Branch (873:17): [True: 0, False: 31]
  ------------------
  874|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_SLOT_AFTER_ITEMS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  875|      0|                return -1;
  876|      0|            }
  877|     31|            if (dmem->flags & Py_AUDIT_READ) {
  ------------------
  |  |   84|     31|#define Py_AUDIT_READ          (1 << 1) // Added in 3.10, harmless no-op before that
  ------------------
  |  Branch (877:17): [True: 0, False: 31]
  ------------------
  878|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_AUDITED_SLOT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  879|      0|                return -1;
  880|      0|            }
  881|     31|            if (offset != (uint16_t)offset) {
  ------------------
  |  Branch (881:17): [True: 0, False: 31]
  ------------------
  882|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  883|      0|                return -1;
  884|      0|            }
  885|     31|            assert(dmem->type == Py_T_OBJECT_EX || dmem->type == _Py_T_OBJECT);
  ------------------
  |  Branch (885:13): [True: 2, False: 29]
  |  Branch (885:13): [True: 29, False: 0]
  ------------------
  886|     31|            assert(offset > 0);
  ------------------
  |  Branch (886:13): [True: 31, False: 0]
  ------------------
  887|     31|            cache->index = (uint16_t)offset;
  888|     31|            write_u32(cache->version, tp_version);
  889|     31|            specialize(instr, LOAD_ATTR_SLOT);
  ------------------
  |  |  196|     31|#define LOAD_ATTR_SLOT                         194
  ------------------
  890|     31|            return 0;
  891|     31|        }
  892|      4|        case DUNDER_CLASS:
  ------------------
  |  Branch (892:9): [True: 4, False: 1.01k]
  ------------------
  893|      4|        {
  894|      4|            Py_ssize_t offset = offsetof(PyObject, ob_type);
  895|      4|            assert(offset == (uint16_t)offset);
  ------------------
  |  Branch (895:13): [True: 4, False: 0]
  ------------------
  896|      4|            cache->index = (uint16_t)offset;
  897|      4|            write_u32(cache->version, tp_version);
  898|      4|            specialize(instr, LOAD_ATTR_SLOT);
  ------------------
  |  |  196|      4|#define LOAD_ATTR_SLOT                         194
  ------------------
  899|      4|            return 0;
  900|      4|        }
  901|     30|        case OTHER_SLOT:
  ------------------
  |  Branch (901:9): [True: 30, False: 984]
  ------------------
  902|     30|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_NON_OBJECT_SLOT);
  ------------------
  |  |   43|     30|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  903|     30|            return -1;
  904|      1|        case MUTABLE:
  ------------------
  |  Branch (904:9): [True: 1, False: 1.01k]
  ------------------
  905|      1|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_MUTABLE_CLASS);
  ------------------
  |  |   43|      1|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  906|      1|            return -1;
  907|      0|        case GETSET_OVERRIDDEN:
  ------------------
  |  Branch (907:9): [True: 0, False: 1.01k]
  ------------------
  908|      0|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OVERRIDDEN);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  909|      0|            return -1;
  910|      0|        case GETATTRIBUTE_IS_PYTHON_FUNCTION:
  ------------------
  |  Branch (910:9): [True: 0, False: 1.01k]
  ------------------
  911|      0|        {
  912|      0|            assert(Py_IS_TYPE(descr, &PyFunction_Type));
  ------------------
  |  Branch (912:13): [True: 0, False: 0]
  ------------------
  913|      0|            _PyLoadMethodCache *lm_cache = (_PyLoadMethodCache *)(instr + 1);
  914|      0|            if (!function_check_args(descr, 2, LOAD_ATTR)) {
  ------------------
  |  |   89|      0|#define LOAD_ATTR                               76
  ------------------
  |  Branch (914:17): [True: 0, False: 0]
  ------------------
  915|      0|                return -1;
  916|      0|            }
  917|      0|            if (oparg & 1) {
  ------------------
  |  Branch (917:17): [True: 0, False: 0]
  ------------------
  918|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_METHOD);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  919|      0|                return -1;
  920|      0|            }
  921|      0|            uint32_t version = function_get_version(descr, LOAD_ATTR);
  ------------------
  |  |   89|      0|#define LOAD_ATTR                               76
  ------------------
  922|      0|            if (version == 0) {
  ------------------
  |  Branch (922:17): [True: 0, False: 0]
  ------------------
  923|      0|                return -1;
  924|      0|            }
  925|       |            /* Don't specialize if PEP 523 is active */
  926|      0|            if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (926:17): [True: 0, False: 0]
  ------------------
  927|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  928|      0|                return -1;
  929|      0|            }
  930|       |            #ifdef Py_GIL_DISABLED
  931|       |            if (!_PyObject_HasDeferredRefcount(descr)) {
  932|       |                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_DESCR_NOT_DEFERRED);
  933|       |                return -1;
  934|       |            }
  935|       |            #endif
  936|      0|            write_u32(lm_cache->keys_version, version);
  937|       |            /* borrowed */
  938|      0|            write_ptr(lm_cache->descr, descr);
  939|      0|            write_u32(lm_cache->type_version, tp_version);
  940|      0|            specialize(instr, LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN);
  ------------------
  |  |  187|      0|#define LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN      185
  ------------------
  941|      0|            return 0;
  942|      0|        }
  943|      0|        case BUILTIN_CLASSMETHOD:
  ------------------
  |  Branch (943:9): [True: 0, False: 1.01k]
  ------------------
  944|      0|        case PYTHON_CLASSMETHOD:
  ------------------
  |  Branch (944:9): [True: 0, False: 1.01k]
  ------------------
  945|      6|        case NON_OVERRIDING:
  ------------------
  |  Branch (945:9): [True: 6, False: 1.00k]
  ------------------
  946|      6|            if (shadow) {
  ------------------
  |  Branch (946:17): [True: 0, False: 6]
  ------------------
  947|      0|                goto try_instance;
  948|      0|            }
  949|      6|            return -1;
  950|     19|        case NON_DESCRIPTOR:
  ------------------
  |  Branch (950:9): [True: 19, False: 995]
  ------------------
  951|     19|            if (shadow) {
  ------------------
  |  Branch (951:17): [True: 0, False: 19]
  ------------------
  952|      0|                goto try_instance;
  953|      0|            }
  954|     19|            if ((oparg & 1) == 0) {
  ------------------
  |  Branch (954:17): [True: 19, False: 0]
  ------------------
  955|     19|                if (specialize_attr_loadclassattr(owner, instr, name, descr,
  ------------------
  |  Branch (955:21): [True: 17, False: 2]
  ------------------
  956|     19|                                                  tp_version, kind, false,
  957|     19|                                                  shared_keys_version)) {
  958|     17|                    return 0;
  959|     17|                }
  960|     19|            }
  961|      2|            return -1;
  962|    254|        case ABSENT:
  ------------------
  |  Branch (962:9): [True: 254, False: 760]
  ------------------
  963|    254|            if (shadow) {
  ------------------
  |  Branch (963:17): [True: 234, False: 20]
  ------------------
  964|    234|                goto try_instance;
  965|    234|            }
  966|     20|            set_counter((_Py_BackoffCounter*)instr + 1, adaptive_counter_cooldown());
  967|     20|            return 0;
  968|  1.01k|    }
  969|  1.01k|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
  970|    234|try_instance:
  971|    234|    if (specialize_dict_access(owner, instr, type, kind, name, tp_version,
  ------------------
  |  Branch (971:9): [True: 234, False: 0]
  ------------------
  972|    234|                               LOAD_ATTR, LOAD_ATTR_INSTANCE_VALUE, LOAD_ATTR_WITH_HINT))
  ------------------
  |  |   89|    234|#define LOAD_ATTR                               76
  ------------------
                                             LOAD_ATTR, LOAD_ATTR_INSTANCE_VALUE, LOAD_ATTR_WITH_HINT))
  ------------------
  |  |  188|    234|#define LOAD_ATTR_INSTANCE_VALUE               186
  ------------------
                                             LOAD_ATTR, LOAD_ATTR_INSTANCE_VALUE, LOAD_ATTR_WITH_HINT))
  ------------------
  |  |  197|    234|#define LOAD_ATTR_WITH_HINT                    195
  ------------------
  973|    234|    {
  974|    234|        return 0;
  975|    234|    }
  976|      0|    return -1;
  977|    234|}
specialize.c:specialize_attr_loadclassattr:
 1268|    334|{
 1269|    334|    _PyLoadMethodCache *cache = (_PyLoadMethodCache *)(instr + 1);
 1270|    334|    PyTypeObject *owner_cls = Py_TYPE(owner);
  ------------------
  |  |  213|    334|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    334|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    334|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1271|       |
 1272|    334|    assert(descr != NULL);
  ------------------
  |  Branch (1272:5): [True: 334, False: 0]
  ------------------
 1273|    334|    assert((is_method && kind == METHOD) || (!is_method && kind == NON_DESCRIPTOR));
  ------------------
  |  Branch (1273:5): [True: 315, False: 19]
  |  Branch (1273:5): [True: 315, False: 0]
  |  Branch (1273:5): [True: 19, False: 0]
  |  Branch (1273:5): [True: 19, False: 0]
  ------------------
 1274|       |
 1275|       |    #ifdef Py_GIL_DISABLED
 1276|       |    if (!_PyObject_HasDeferredRefcount(descr)) {
 1277|       |        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_DESCR_NOT_DEFERRED);
 1278|       |        return 0;
 1279|       |    }
 1280|       |    #endif
 1281|       |
 1282|    334|    unsigned long tp_flags = PyType_GetFlags(owner_cls);
 1283|    334|    if (tp_flags & Py_TPFLAGS_INLINE_VALUES) {
  ------------------
  |  |  472|    334|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (1283:9): [True: 78, False: 256]
  ------------------
 1284|     78|        #ifndef Py_GIL_DISABLED
 1285|     78|        assert(_PyDictKeys_StringLookup(
  ------------------
  |  Branch (1285:9): [True: 78, False: 0]
  ------------------
 1286|     78|                   ((PyHeapTypeObject *)owner_cls)->ht_cached_keys, name) < 0);
 1287|     78|        #endif
 1288|     78|        if (shared_keys_version == 0) {
  ------------------
  |  Branch (1288:13): [True: 0, False: 78]
  ------------------
 1289|      0|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1290|      0|            return 0;
 1291|      0|        }
 1292|     78|        specialize(instr, is_method ? LOAD_ATTR_METHOD_WITH_VALUES : LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES);
  ------------------
  |  |  191|     62|#define LOAD_ATTR_METHOD_WITH_VALUES           189
  ------------------
                      specialize(instr, is_method ? LOAD_ATTR_METHOD_WITH_VALUES : LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES);
  ------------------
  |  |  194|     94|#define LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES    192
  ------------------
  |  Branch (1292:27): [True: 62, False: 16]
  ------------------
 1293|     78|    }
 1294|    256|    else {
 1295|    256|        Py_ssize_t dictoffset;
 1296|    256|        if (tp_flags & Py_TPFLAGS_MANAGED_DICT) {
  ------------------
  |  |  482|    256|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (1296:13): [True: 7, False: 249]
  ------------------
 1297|      7|            dictoffset = MANAGED_DICT_OFFSET;
  ------------------
  |  |  923|      7|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
 1298|      7|        }
 1299|    249|        else {
 1300|    249|            dictoffset = owner_cls->tp_dictoffset;
 1301|    249|            if (dictoffset < 0 || dictoffset > INT16_MAX + MANAGED_DICT_OFFSET) {
  ------------------
  |  |  923|    249|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
  |  Branch (1301:17): [True: 0, False: 249]
  |  Branch (1301:35): [True: 0, False: 249]
  ------------------
 1302|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1303|      0|                return 0;
 1304|      0|            }
 1305|    249|        }
 1306|    256|        if (dictoffset == 0) {
  ------------------
  |  Branch (1306:13): [True: 236, False: 20]
  ------------------
 1307|    236|            specialize(instr, is_method ? LOAD_ATTR_METHOD_NO_DICT : LOAD_ATTR_NONDESCRIPTOR_NO_DICT);
  ------------------
  |  |  190|    235|#define LOAD_ATTR_METHOD_NO_DICT               188
  ------------------
                          specialize(instr, is_method ? LOAD_ATTR_METHOD_NO_DICT : LOAD_ATTR_NONDESCRIPTOR_NO_DICT);
  ------------------
  |  |  193|    237|#define LOAD_ATTR_NONDESCRIPTOR_NO_DICT        191
  ------------------
  |  Branch (1307:31): [True: 235, False: 1]
  ------------------
 1308|    236|        }
 1309|     20|        else if (is_method) {
  ------------------
  |  Branch (1309:18): [True: 18, False: 2]
  ------------------
 1310|     18|            PyObject **addr = (PyObject **)((char *)owner + dictoffset);
 1311|     18|            PyObject *dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*addr);
  ------------------
  |  |  150|     18|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
 1312|     18|            if (dict) {
  ------------------
  |  Branch (1312:17): [True: 16, False: 2]
  ------------------
 1313|     16|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_NOT_MANAGED_DICT);
  ------------------
  |  |   43|     16|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1314|     16|                return 0;
 1315|     16|            }
 1316|       |            /* Cache entries must be unsigned values, so we offset the
 1317|       |             * dictoffset by MANAGED_DICT_OFFSET.
 1318|       |             * We do the reverse offset in LOAD_ATTR_METHOD_LAZY_DICT */
 1319|      2|            dictoffset -= MANAGED_DICT_OFFSET;
  ------------------
  |  |  923|      2|#  define MANAGED_DICT_OFFSET    (((Py_ssize_t)sizeof(PyObject *))*-3)
  ------------------
 1320|      2|            assert(((uint16_t)dictoffset) == dictoffset);
  ------------------
  |  Branch (1320:13): [True: 2, False: 0]
  ------------------
 1321|      2|            cache->dict_offset = (uint16_t)dictoffset;
 1322|      2|            specialize(instr, LOAD_ATTR_METHOD_LAZY_DICT);
  ------------------
  |  |  189|      2|#define LOAD_ATTR_METHOD_LAZY_DICT             187
  ------------------
 1323|      2|        }
 1324|      2|        else {
 1325|      2|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_CLASS_ATTR_SIMPLE);
  ------------------
  |  |   43|      2|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1326|      2|            return 0;
 1327|      2|        }
 1328|    256|    }
 1329|       |    /* `descr` is borrowed. This is safe for methods (even inherited ones from
 1330|       |    *  super classes!) as long as tp_version_tag is validated for two main reasons:
 1331|       |    *
 1332|       |    *  1. The class will always hold a reference to the method so it will
 1333|       |    *  usually not be GC-ed. Should it be deleted in Python, e.g.
 1334|       |    *  `del obj.meth`, tp_version_tag will be invalidated, because of reason 2.
 1335|       |    *
 1336|       |    *  2. The pre-existing type method cache (MCACHE) uses the same principles
 1337|       |    *  of caching a borrowed descriptor. The MCACHE infrastructure does all the
 1338|       |    *  heavy lifting for us. E.g. it invalidates tp_version_tag on any MRO
 1339|       |    *  modification, on any type object change along said MRO, etc. (see
 1340|       |    *  PyType_Modified usages in typeobject.c). The MCACHE has been
 1341|       |    *  working since Python 2.6 and it's battle-tested.
 1342|       |    */
 1343|    316|    write_u32(cache->type_version, tp_version);
 1344|    316|    write_ptr(cache->descr, descr);
 1345|    316|    return 1;
 1346|    334|}
specialize.c:function_check_args:
 1488|     12|{
 1489|     12|    assert(Py_IS_TYPE(o, &PyFunction_Type));
  ------------------
  |  Branch (1489:5): [True: 12, False: 0]
  ------------------
 1490|     12|    PyFunctionObject *func = (PyFunctionObject *)o;
 1491|     12|    PyCodeObject *fcode = (PyCodeObject *)func->func_code;
 1492|     12|    int kind = function_kind(fcode);
 1493|     12|    if (kind != SIMPLE_FUNCTION) {
  ------------------
  |  |  125|     12|#define SIMPLE_FUNCTION 0
  ------------------
  |  Branch (1493:9): [True: 0, False: 12]
  ------------------
 1494|      0|        SPECIALIZATION_FAIL(opcode, kind);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1495|      0|        return false;
 1496|      0|    }
 1497|     12|    if (fcode->co_argcount != expected_argcount) {
  ------------------
  |  Branch (1497:9): [True: 0, False: 12]
  ------------------
 1498|      0|        SPECIALIZATION_FAIL(opcode, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1499|      0|        return false;
 1500|      0|    }
 1501|     12|    return true;
 1502|     12|}
specialize.c:function_get_version:
 1507|     12|{
 1508|     12|    assert(Py_IS_TYPE(o, &PyFunction_Type));
  ------------------
  |  Branch (1508:5): [True: 12, False: 0]
  ------------------
 1509|     12|    PyFunctionObject *func = (PyFunctionObject *)o;
 1510|     12|    uint32_t version = _PyFunction_GetVersionForCurrentState(func);
 1511|     12|    if (!_PyFunction_IsVersionValid(version)) {
  ------------------
  |  Branch (1511:9): [True: 0, False: 12]
  ------------------
 1512|      0|        SPECIALIZATION_FAIL(opcode, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1513|      0|        return 0;
 1514|      0|    }
 1515|     12|    return version;
 1516|     12|}
specialize.c:analyze_descriptor_store:
  619|    261|{
  620|    261|    if (type->tp_setattro != PyObject_GenericSetAttr) {
  ------------------
  |  Branch (620:9): [True: 14, False: 247]
  ------------------
  621|     14|        *descr = NULL;
  622|     14|        return GETSET_OVERRIDDEN;
  623|     14|    }
  624|    247|    PyObject *descriptor = _PyType_LookupRefAndVersion(type, name, tp_version);
  625|    247|    *descr = descriptor;
  626|    247|    if (descriptor_is_class(descriptor, name)) {
  ------------------
  |  Branch (626:9): [True: 0, False: 247]
  ------------------
  627|      0|        return DUNDER_CLASS;
  628|      0|    }
  629|    247|    return classify_descriptor(descriptor, false);
  630|    247|}
specialize.c:specialize_dict_access:
  700|    455|{
  701|    455|    assert(kind == NON_OVERRIDING || kind == NON_DESCRIPTOR || kind == ABSENT ||
  ------------------
  |  Branch (701:5): [True: 0, False: 455]
  |  Branch (701:5): [True: 0, False: 455]
  |  Branch (701:5): [True: 455, False: 0]
  |  Branch (701:5): [True: 0, False: 0]
  |  Branch (701:5): [True: 0, False: 0]
  |  Branch (701:5): [True: 0, False: 0]
  ------------------
  702|    455|        kind == BUILTIN_CLASSMETHOD || kind == PYTHON_CLASSMETHOD ||
  703|    455|        kind == METHOD);
  704|       |    // No descriptor, or non overriding.
  705|    455|    if ((type->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0) {
  ------------------
  |  |  482|    455|#define Py_TPFLAGS_MANAGED_DICT (1 << 4)
  ------------------
  |  Branch (705:9): [True: 7, False: 448]
  ------------------
  706|      7|        SPECIALIZATION_FAIL(base_op, SPEC_FAIL_ATTR_NOT_MANAGED_DICT);
  ------------------
  |  |   43|      7|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  707|      7|        return 0;
  708|      7|    }
  709|    448|    if (type->tp_flags & Py_TPFLAGS_INLINE_VALUES &&
  ------------------
  |  |  472|    896|#define Py_TPFLAGS_INLINE_VALUES (1 << 2)
  ------------------
  |  Branch (709:9): [True: 411, False: 37]
  ------------------
  710|    411|        FT_ATOMIC_LOAD_UINT8(_PyObject_InlineValues(owner)->valid) &&
  ------------------
  |  |  154|    859|#define FT_ATOMIC_LOAD_UINT8(value) value
  |  |  ------------------
  |  |  |  Branch (154:37): [True: 411, False: 0]
  |  |  ------------------
  ------------------
  711|    411|        !(base_op == STORE_ATTR && _PyObject_GetManagedDict(owner) != NULL))
  ------------------
  |  |  119|    822|#define STORE_ATTR                             106
  ------------------
  |  Branch (711:11): [True: 177, False: 234]
  |  Branch (711:36): [True: 0, False: 177]
  ------------------
  712|    411|    {
  713|    411|        int res;
  714|    411|        Py_BEGIN_CRITICAL_SECTION(owner);
  ------------------
  |  |   51|    411|    {
  ------------------
  715|    411|        PyDictObject *dict = _PyObject_GetManagedDict(owner);
  716|    411|        if (dict == NULL) {
  ------------------
  |  Branch (716:13): [True: 411, False: 0]
  ------------------
  717|       |            // managed dict, not materialized, inline values valid
  718|    411|            res = specialize_dict_access_inline(owner, instr, type, name,
  719|    411|                                                tp_version, base_op, values_op);
  720|    411|        }
  721|      0|        else {
  722|       |            // lost race and dict was created, fail specialization
  723|      0|            SPECIALIZATION_FAIL(STORE_ATTR, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  724|      0|            res = 0;
  725|      0|        }
  726|    411|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|    411|    }
  ------------------
  727|    411|        return res;
  728|    411|    }
  729|     37|    else {
  730|     37|        PyDictObject *dict = _PyObject_GetManagedDict(owner);
  731|     37|        if (dict == NULL || !PyDict_CheckExact(dict)) {
  ------------------
  |  |   19|     28|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|     28|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     28|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (731:13): [True: 9, False: 28]
  |  Branch (731:29): [True: 0, False: 28]
  ------------------
  732|      9|            SPECIALIZATION_FAIL(base_op, SPEC_FAIL_NO_DICT);
  ------------------
  |  |   43|      9|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  733|      9|            return 0;
  734|      9|        }
  735|     28|        int res;
  736|     28|        Py_BEGIN_CRITICAL_SECTION(dict);
  ------------------
  |  |   51|     28|    {
  ------------------
  737|       |        // materialized managed dict
  738|     28|        res = specialize_dict_access_hint(dict, instr, type, name,
  739|     28|                                          tp_version, base_op, hint_op);
  740|     28|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|     28|    }
  ------------------
  741|     28|        return res;
  742|     37|    }
  743|    448|}
specialize.c:specialize_dict_access_inline:
  637|    411|{
  638|    411|    _PyAttrCache *cache = (_PyAttrCache *)(instr + 1);
  639|    411|    PyDictKeysObject *keys = ((PyHeapTypeObject *)type)->ht_cached_keys;
  640|    411|    assert(PyUnicode_CheckExact(name));
  ------------------
  |  Branch (640:5): [True: 411, False: 0]
  ------------------
  641|    411|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(owner);
  642|    411|    Py_ssize_t index = _PyDictKeys_StringLookupSplit(keys, name);
  643|    411|    assert (index != DKIX_ERROR);
  ------------------
  |  Branch (643:5): [True: 411, False: 0]
  ------------------
  644|    411|    if (index == DKIX_EMPTY) {
  ------------------
  |  |  185|    411|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (644:9): [True: 0, False: 411]
  ------------------
  645|      0|        SPECIALIZATION_FAIL(base_op, SPEC_FAIL_ATTR_NOT_IN_KEYS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  646|      0|        return 0;
  647|      0|    }
  648|    411|    assert(index >= 0);
  ------------------
  |  Branch (648:5): [True: 411, False: 0]
  ------------------
  649|    411|    assert(_PyObject_InlineValues(owner)->valid);
  ------------------
  |  Branch (649:5): [True: 411, False: 0]
  ------------------
  650|    411|    char *value_addr = (char *)&_PyObject_InlineValues(owner)->values[index];
  651|    411|    Py_ssize_t offset = value_addr - (char *)owner;
  652|    411|    if (offset != (uint16_t)offset) {
  ------------------
  |  Branch (652:9): [True: 0, False: 411]
  ------------------
  653|      0|        SPECIALIZATION_FAIL(base_op, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  654|      0|        return 0;
  655|      0|    }
  656|    411|    cache->index = (uint16_t)offset;
  657|    411|    write_u32(cache->version, tp_version);
  658|    411|    specialize(instr, values_op);
  659|    411|    return 1;
  660|    411|}
specialize.c:specialize_dict_access_hint:
  667|     28|{
  668|     28|    _PyAttrCache *cache = (_PyAttrCache *)(instr + 1);
  669|       |
  670|     28|    _Py_CRITICAL_SECTION_ASSERT_OBJECT_LOCKED(dict);
  671|       |#ifdef Py_GIL_DISABLED
  672|       |    _PyDict_EnsureSharedOnRead(dict);
  673|       |#endif
  674|       |
  675|       |    // We found an instance with a __dict__.
  676|     28|    if (_PyDict_HasSplitTable(dict)) {
  ------------------
  |  |   56|     28|#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
  |  |  ------------------
  |  |  |  Branch (56:34): [True: 28, False: 0]
  |  |  ------------------
  ------------------
  677|     28|        SPECIALIZATION_FAIL(base_op, SPEC_FAIL_ATTR_SPLIT_DICT);
  ------------------
  |  |   43|     28|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  678|     28|        return 0;
  679|     28|    }
  680|      0|    Py_ssize_t index = _PyDict_LookupIndex(dict, name);
  681|      0|    if (index != (uint16_t)index) {
  ------------------
  |  Branch (681:9): [True: 0, False: 0]
  ------------------
  682|      0|        SPECIALIZATION_FAIL(base_op,
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
  683|      0|                            index == DKIX_EMPTY ?
  684|      0|                            SPEC_FAIL_ATTR_NOT_IN_DICT :
  685|      0|                            SPEC_FAIL_OUT_OF_RANGE);
  686|      0|        return 0;
  687|      0|    }
  688|      0|    cache->index = (uint16_t)index;
  689|      0|    write_u32(cache->version, tp_version);
  690|      0|    specialize(instr, hint_op);
  691|      0|    return 1;
  692|      0|}
specialize.c:specialize_class_load_attr:
 1172|    202|{
 1173|    202|    assert(PyType_Check(owner));
  ------------------
  |  Branch (1173:5): [True: 202, False: 0]
  ------------------
 1174|    202|    PyTypeObject *cls = (PyTypeObject *)owner;
 1175|    202|    _PyLoadMethodCache *cache = (_PyLoadMethodCache *)(instr + 1);
 1176|    202|    if (Py_TYPE(cls)->tp_getattro != _Py_type_getattro) {
  ------------------
  |  |  213|    202|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    202|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    202|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1176:9): [True: 0, False: 202]
  ------------------
 1177|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_METACLASS_OVERRIDDEN);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1178|      0|        return -1;
 1179|      0|    }
 1180|    202|    unsigned int meta_version = 0;
 1181|    202|    PyObject *metadescriptor = _PyType_LookupRefAndVersion(Py_TYPE(cls), name, &meta_version);
  ------------------
  |  |  213|    202|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    202|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    202|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1182|    202|    DescriptorClassification metakind = classify_descriptor(metadescriptor, false);
 1183|    202|    Py_XDECREF(metadescriptor);
  ------------------
  |  |  524|    202|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    202|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    202|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|    202|    switch (metakind) {
 1185|     14|        case METHOD:
  ------------------
  |  Branch (1185:9): [True: 14, False: 188]
  ------------------
 1186|     23|        case NON_DESCRIPTOR:
  ------------------
  |  Branch (1186:9): [True: 9, False: 193]
  ------------------
 1187|     29|        case NON_OVERRIDING:
  ------------------
  |  Branch (1187:9): [True: 6, False: 196]
  ------------------
 1188|     29|        case BUILTIN_CLASSMETHOD:
  ------------------
  |  Branch (1188:9): [True: 0, False: 202]
  ------------------
 1189|     29|        case PYTHON_CLASSMETHOD:
  ------------------
  |  Branch (1189:9): [True: 0, False: 202]
  ------------------
 1190|    141|        case ABSENT:
  ------------------
  |  Branch (1190:9): [True: 112, False: 90]
  ------------------
 1191|    141|            break;
 1192|     61|        default:
  ------------------
  |  Branch (1192:9): [True: 61, False: 141]
  ------------------
 1193|     61|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_METACLASS_ATTRIBUTE);
  ------------------
  |  |   43|     61|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1194|     61|            return -1;
 1195|    202|    }
 1196|    141|    PyObject *descr = NULL;
 1197|    141|    DescriptorClassification kind = 0;
 1198|    141|    unsigned int tp_version = 0;
 1199|    141|    kind = analyze_descriptor_load(cls, name, &descr, &tp_version);
 1200|    141|    if (tp_version == 0) {
  ------------------
  |  Branch (1200:9): [True: 0, False: 141]
  ------------------
 1201|      0|        SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1202|      0|        Py_XDECREF(descr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1203|      0|        return -1;
 1204|      0|    }
 1205|    141|    bool metaclass_check = false;
 1206|    141|    if ((Py_TYPE(cls)->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
  ------------------
  |  |  213|    141|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    141|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    141|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if ((Py_TYPE(cls)->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) == 0) {
  ------------------
  |  |  500|    141|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (1206:9): [True: 50, False: 91]
  ------------------
 1207|     50|        metaclass_check = true;
 1208|     50|        if (meta_version == 0) {
  ------------------
  |  Branch (1208:13): [True: 0, False: 50]
  ------------------
 1209|      0|            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1210|      0|            Py_XDECREF(descr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1211|      0|            return -1;
 1212|      0|        }
 1213|     50|    }
 1214|    141|    switch (kind) {
 1215|      0|        case MUTABLE:
  ------------------
  |  Branch (1215:9): [True: 0, False: 141]
  ------------------
 1216|       |            // special case for enums which has Py_TYPE(descr) == cls
 1217|       |            // so guarding on type version is sufficient
 1218|      0|            if (Py_TYPE(descr) != cls) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1218:17): [True: 0, False: 0]
  ------------------
 1219|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_MUTABLE_CLASS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1220|      0|                Py_XDECREF(descr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1221|      0|                return -1;
 1222|      0|            }
 1223|      0|            if (Py_TYPE(descr)->tp_descr_get || Py_TYPE(descr)->tp_descr_set) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (Py_TYPE(descr)->tp_descr_get || Py_TYPE(descr)->tp_descr_set) {
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1223:17): [True: 0, False: 0]
  |  Branch (1223:49): [True: 0, False: 0]
  ------------------
 1224|      0|                SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_ATTR_OVERRIDING_DESCRIPTOR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1225|      0|                Py_XDECREF(descr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1226|      0|                return -1;
 1227|      0|            }
 1228|      0|            _Py_FALLTHROUGH;
  ------------------
  |  |  650|      0|#  define _Py_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1229|     14|        case METHOD:
  ------------------
  |  Branch (1229:9): [True: 14, False: 127]
  ------------------
 1230|     64|        case NON_DESCRIPTOR:
  ------------------
  |  Branch (1230:9): [True: 50, False: 91]
  ------------------
 1231|       |#ifdef Py_GIL_DISABLED
 1232|       |            maybe_enable_deferred_ref_count(descr);
 1233|       |#endif
 1234|     64|            write_ptr(cache->descr, descr);
 1235|     64|            if (metaclass_check) {
  ------------------
  |  Branch (1235:17): [True: 37, False: 27]
  ------------------
 1236|     37|                write_u32(cache->keys_version, tp_version);
 1237|     37|                write_u32(cache->type_version, meta_version);
 1238|     37|                specialize(instr, LOAD_ATTR_CLASS_WITH_METACLASS_CHECK);
  ------------------
  |  |  186|     37|#define LOAD_ATTR_CLASS_WITH_METACLASS_CHECK   184
  ------------------
 1239|     37|            }
 1240|     27|            else {
 1241|     27|                write_u32(cache->type_version, tp_version);
 1242|     27|                specialize(instr, LOAD_ATTR_CLASS);
  ------------------
  |  |  185|     27|#define LOAD_ATTR_CLASS                        183
  ------------------
 1243|     27|            }
 1244|     64|            Py_XDECREF(descr);
  ------------------
  |  |  524|     64|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     64|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     64|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1245|     64|            return 0;
 1246|       |#ifdef Py_STATS
 1247|       |        case ABSENT:
 1248|       |            SPECIALIZATION_FAIL(LOAD_ATTR, SPEC_FAIL_EXPECTED_ERROR);
 1249|       |            Py_XDECREF(descr);
 1250|       |            return -1;
 1251|       |#endif
 1252|     77|        default:
  ------------------
  |  Branch (1252:9): [True: 77, False: 64]
  ------------------
 1253|     77|            SPECIALIZATION_FAIL(LOAD_ATTR, load_attr_fail_kind(kind));
  ------------------
  |  |   43|     77|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1254|     77|            Py_XDECREF(descr);
  ------------------
  |  |  524|     77|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     77|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     77|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1255|     77|            return -1;
 1256|    141|    }
 1257|    141|}
specialize.c:specialize_load_global_lock_held:
 1352|  1.73k|{
 1353|  1.73k|    assert(ENABLE_SPECIALIZATION);
  ------------------
  |  Branch (1353:5): [True: 1.73k, Folded]
  ------------------
 1354|  1.73k|    assert(_PyOpcode_Caches[LOAD_GLOBAL] == INLINE_CACHE_ENTRIES_LOAD_GLOBAL);
  ------------------
  |  Branch (1354:5): [True: 1.73k, False: 0]
  ------------------
 1355|       |    /* Use inline cache */
 1356|  1.73k|    _PyLoadGlobalCache *cache = (_PyLoadGlobalCache *)(instr + 1);
 1357|  1.73k|    assert(PyUnicode_CheckExact(name));
  ------------------
  |  Branch (1357:5): [True: 1.73k, False: 0]
  ------------------
 1358|  1.73k|    if (!PyDict_CheckExact(globals)) {
  ------------------
  |  |   19|  1.73k|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|  1.73k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.73k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.73k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1358:9): [True: 0, False: 1.73k]
  ------------------
 1359|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_DICT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1360|      0|        goto fail;
 1361|      0|    }
 1362|  1.73k|    PyDictKeysObject * globals_keys = ((PyDictObject *)globals)->ma_keys;
 1363|  1.73k|    if (globals_keys->dk_kind != DICT_KEYS_UNICODE) {
  ------------------
  |  Branch (1363:9): [True: 0, False: 1.73k]
  ------------------
 1364|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1365|      0|        goto fail;
 1366|      0|    }
 1367|  1.73k|    PyObject *value;
 1368|  1.73k|    Py_ssize_t index = _PyDict_LookupIndexAndValue((PyDictObject *)globals, name, &value);
 1369|  1.73k|    if (index == DKIX_ERROR) {
  ------------------
  |  |  187|  1.73k|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (1369:9): [True: 0, False: 1.73k]
  ------------------
 1370|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1371|      0|        goto fail;
 1372|      0|    }
 1373|  1.73k|    if (value != NULL && PyLazyImport_CheckExact(value)) {
  ------------------
  |  |   15|  1.09k|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |  215|  1.09k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.09k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.09k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 1.09k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1373:9): [True: 1.09k, False: 635]
  ------------------
 1374|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_ATTR_MODULE_LAZY_VALUE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1375|      0|        goto fail;
 1376|      0|    }
 1377|  1.73k|    PyInterpreterState *interp = _PyInterpreterState_GET();
 1378|  1.73k|    if (index != DKIX_EMPTY) {
  ------------------
  |  |  185|  1.73k|#define DKIX_EMPTY (-1)
  ------------------
  |  Branch (1378:9): [True: 1.09k, False: 635]
  ------------------
 1379|  1.09k|        if (index != (uint16_t)index) {
  ------------------
  |  Branch (1379:13): [True: 0, False: 1.09k]
  ------------------
 1380|      0|            SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1381|      0|            goto fail;
 1382|      0|        }
 1383|  1.09k|        uint32_t keys_version = _PyDict_GetKeysVersionForCurrentState(
 1384|  1.09k|                interp, (PyDictObject*) globals);
 1385|  1.09k|        if (keys_version == 0) {
  ------------------
  |  Branch (1385:13): [True: 0, False: 1.09k]
  ------------------
 1386|      0|            SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1387|      0|            goto fail;
 1388|      0|        }
 1389|  1.09k|        if (keys_version != (uint16_t)keys_version) {
  ------------------
  |  Branch (1389:13): [True: 0, False: 1.09k]
  ------------------
 1390|      0|            SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1391|      0|            goto fail;
 1392|      0|        }
 1393|  1.09k|        PyDict_Watch(MODULE_WATCHER_ID, globals);
  ------------------
  |  |  306|  1.09k|#define MODULE_WATCHER_ID       2
  ------------------
 1394|       |#ifdef Py_GIL_DISABLED
 1395|       |        maybe_enable_deferred_ref_count(value);
 1396|       |#endif
 1397|  1.09k|        cache->index = (uint16_t)index;
 1398|  1.09k|        cache->module_keys_version = (uint16_t)keys_version;
 1399|  1.09k|        specialize(instr, LOAD_GLOBAL_MODULE);
  ------------------
  |  |  199|  1.09k|#define LOAD_GLOBAL_MODULE                     197
  ------------------
 1400|  1.09k|        return;
 1401|  1.09k|    }
 1402|    635|    if (!PyDict_CheckExact(builtins)) {
  ------------------
  |  |   19|    635|#define PyDict_CheckExact(op) Py_IS_TYPE((op), &PyDict_Type)
  |  |  ------------------
  |  |  |  |  215|    635|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    635|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    635|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1402:9): [True: 0, False: 635]
  ------------------
 1403|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_DICT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1404|      0|        goto fail;
 1405|      0|    }
 1406|    635|    PyDictKeysObject * builtin_keys = ((PyDictObject *)builtins)->ma_keys;
 1407|    635|    if (builtin_keys->dk_kind != DICT_KEYS_UNICODE) {
  ------------------
  |  Branch (1407:9): [True: 0, False: 635]
  ------------------
 1408|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1409|      0|        goto fail;
 1410|      0|    }
 1411|    635|    index = _PyDict_LookupIndexAndValue((PyDictObject *)builtins, name, &value);
 1412|    635|    if (index == DKIX_ERROR) {
  ------------------
  |  |  187|    635|#define DKIX_ERROR (-3)
  ------------------
  |  Branch (1412:9): [True: 0, False: 635]
  ------------------
 1413|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1414|      0|        goto fail;
 1415|      0|    }
 1416|    635|    if (value != NULL && PyLazyImport_CheckExact(value)) {
  ------------------
  |  |   15|    635|#define PyLazyImport_CheckExact(op) Py_IS_TYPE((op), &PyLazyImport_Type)
  |  |  ------------------
  |  |  |  |  215|    635|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    635|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    635|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 635]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1416:9): [True: 635, False: 0]
  ------------------
 1417|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_ATTR_MODULE_LAZY_VALUE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1418|      0|        goto fail;
 1419|      0|    }
 1420|    635|    if (index != (uint16_t)index) {
  ------------------
  |  Branch (1420:9): [True: 0, False: 635]
  ------------------
 1421|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1422|      0|        goto fail;
 1423|      0|    }
 1424|    635|    uint32_t globals_version = _PyDict_GetKeysVersionForCurrentState(
 1425|    635|            interp, (PyDictObject*) globals);
 1426|    635|    if (globals_version == 0) {
  ------------------
  |  Branch (1426:9): [True: 0, False: 635]
  ------------------
 1427|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1428|      0|        goto fail;
 1429|      0|    }
 1430|    635|    if (globals_version != (uint16_t)globals_version) {
  ------------------
  |  Branch (1430:9): [True: 0, False: 635]
  ------------------
 1431|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1432|      0|        goto fail;
 1433|      0|    }
 1434|    635|    PyDict_Watch(MODULE_WATCHER_ID, globals);
  ------------------
  |  |  306|    635|#define MODULE_WATCHER_ID       2
  ------------------
 1435|    635|    uint32_t builtins_version = _PyDict_GetKeysVersionForCurrentState(
 1436|    635|            interp, (PyDictObject*) builtins);
 1437|    635|    if (builtins_version == 0) {
  ------------------
  |  Branch (1437:9): [True: 0, False: 635]
  ------------------
 1438|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1439|      0|        goto fail;
 1440|      0|    }
 1441|    635|    if (builtins_version > UINT16_MAX) {
  ------------------
  |  Branch (1441:9): [True: 0, False: 635]
  ------------------
 1442|      0|        SPECIALIZATION_FAIL(LOAD_GLOBAL, SPEC_FAIL_OUT_OF_RANGE);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1443|      0|        goto fail;
 1444|      0|    }
 1445|    635|    PyDict_Watch(MODULE_WATCHER_ID, builtins);
  ------------------
  |  |  306|    635|#define MODULE_WATCHER_ID       2
  ------------------
 1446|    635|    cache->index = (uint16_t)index;
 1447|    635|    cache->module_keys_version = (uint16_t)globals_version;
 1448|    635|    cache->builtin_keys_version = (uint16_t)builtins_version;
 1449|    635|    specialize(instr, LOAD_GLOBAL_BUILTIN);
  ------------------
  |  |  198|    635|#define LOAD_GLOBAL_BUILTIN                    196
  ------------------
 1450|    635|    return;
 1451|      0|fail:
 1452|      0|    unspecialize(instr);
 1453|      0|}
specialize.c:specialize_c_call:
 1830|    502|{
 1831|    502|    if (PyCFunction_GET_FUNCTION(callable) == NULL) {
  ------------------
  |  |   43|    502|#define PyCFunction_GET_FUNCTION(func) PyCFunction_GET_FUNCTION(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1831:9): [True: 0, False: 502]
  ------------------
 1832|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_OTHER);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1833|      0|        return 1;
 1834|      0|    }
 1835|    502|    switch (PyCFunction_GET_FLAGS(callable) &
  ------------------
  |  |   57|    502|#define PyCFunction_GET_FLAGS(func) PyCFunction_GET_FLAGS(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|    502|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    502|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1836|    502|        (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |   95|    502|#define METH_VARARGS  0x0001
  ------------------
                      (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |  115|    502|#  define METH_FASTCALL  0x0080
  ------------------
                      (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |   98|    502|#define METH_NOARGS   0x0004
  ------------------
                      (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |   99|    502|#define METH_O        0x0008
  ------------------
 1837|    502|        METH_KEYWORDS | METH_METHOD)) {
  ------------------
  |  |   96|    502|#define METH_KEYWORDS 0x0002
  ------------------
                      METH_KEYWORDS | METH_METHOD)) {
  ------------------
  |  |  133|    502|#define METH_METHOD 0x0200
  ------------------
 1838|    197|        case METH_O: {
  ------------------
  |  |   99|    197|#define METH_O        0x0008
  ------------------
  |  Branch (1838:9): [True: 197, False: 305]
  ------------------
 1839|    197|            if (nargs != 1) {
  ------------------
  |  Branch (1839:17): [True: 0, False: 197]
  ------------------
 1840|      0|                SPECIALIZATION_FAIL(CALL, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1841|      0|                return 1;
 1842|      0|            }
 1843|       |            /* len(o) */
 1844|    197|            PyInterpreterState *interp = _PyInterpreterState_GET();
 1845|    197|            if (callable == interp->callable_cache.len && instr->op.arg == 1) {
  ------------------
  |  Branch (1845:17): [True: 101, False: 96]
  |  Branch (1845:59): [True: 101, False: 0]
  ------------------
 1846|    101|                specialize(instr, CALL_LEN);
  ------------------
  |  |  159|    101|#define CALL_LEN                               157
  ------------------
 1847|    101|                return 0;
 1848|    101|            }
 1849|     96|            specialize(instr, CALL_BUILTIN_O);
  ------------------
  |  |  152|     96|#define CALL_BUILTIN_O                         150
  ------------------
 1850|     96|            return 0;
 1851|    197|        }
 1852|    212|        case METH_FASTCALL: {
  ------------------
  |  |  115|    212|#  define METH_FASTCALL  0x0080
  ------------------
  |  Branch (1852:9): [True: 212, False: 290]
  ------------------
 1853|    212|            if (nargs == 2) {
  ------------------
  |  Branch (1853:17): [True: 126, False: 86]
  ------------------
 1854|       |                /* isinstance(o1, o2) */
 1855|    126|                PyInterpreterState *interp = _PyInterpreterState_GET();
 1856|    126|                if (callable == interp->callable_cache.isinstance && instr->op.arg == 2) {
  ------------------
  |  Branch (1856:21): [True: 64, False: 62]
  |  Branch (1856:70): [True: 64, False: 0]
  ------------------
 1857|     64|                    specialize(instr, CALL_ISINSTANCE);
  ------------------
  |  |  155|     64|#define CALL_ISINSTANCE                        153
  ------------------
 1858|     64|                    return 0;
 1859|     64|                }
 1860|    126|            }
 1861|    148|            specialize(instr, CALL_BUILTIN_FAST);
  ------------------
  |  |  150|    148|#define CALL_BUILTIN_FAST                      148
  ------------------
 1862|    148|            return 0;
 1863|    212|        }
 1864|     62|        case METH_FASTCALL | METH_KEYWORDS: {
  ------------------
  |  |  115|     62|#  define METH_FASTCALL  0x0080
  ------------------
                      case METH_FASTCALL | METH_KEYWORDS: {
  ------------------
  |  |   96|     62|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (1864:9): [True: 62, False: 440]
  ------------------
 1865|     62|            specialize(instr, CALL_BUILTIN_FAST_WITH_KEYWORDS);
  ------------------
  |  |  151|     62|#define CALL_BUILTIN_FAST_WITH_KEYWORDS        149
  ------------------
 1866|     62|            return 0;
 1867|    212|        }
 1868|     31|        default:
  ------------------
  |  Branch (1868:9): [True: 31, False: 471]
  ------------------
 1869|     31|            specialize(instr, CALL_NON_PY_GENERAL);
  ------------------
  |  |  165|     31|#define CALL_NON_PY_GENERAL                    163
  ------------------
 1870|     31|            return 0;
 1871|    502|    }
 1872|    502|}
specialize.c:specialize_py_call:
 1758|    404|{
 1759|    404|    _PyCallCache *cache = (_PyCallCache *)(instr + 1);
 1760|    404|    PyCodeObject *code = (PyCodeObject *)func->func_code;
 1761|    404|    int kind = function_kind(code);
 1762|       |    /* Don't specialize if PEP 523 is active */
 1763|    404|    if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (1763:9): [True: 0, False: 404]
  ------------------
 1764|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_PEP_523);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1765|      0|        return -1;
 1766|      0|    }
 1767|    404|    if (func->vectorcall != _PyFunction_Vectorcall) {
  ------------------
  |  Branch (1767:9): [True: 0, False: 404]
  ------------------
 1768|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_VECTORCALL);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1769|      0|        return -1;
 1770|      0|    }
 1771|    404|    int argcount = -1;
 1772|    404|    if (kind == SPEC_FAIL_CODE_NOT_OPTIMIZED) {
  ------------------
  |  |  137|    404|#define SPEC_FAIL_CODE_NOT_OPTIMIZED 8
  ------------------
  |  Branch (1772:9): [True: 0, False: 404]
  ------------------
 1773|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CODE_NOT_OPTIMIZED);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1774|      0|        return -1;
 1775|      0|    }
 1776|    404|    if (kind == SIMPLE_FUNCTION) {
  ------------------
  |  |  125|    404|#define SIMPLE_FUNCTION 0
  ------------------
  |  Branch (1776:9): [True: 354, False: 50]
  ------------------
 1777|    354|        argcount = code->co_argcount;
 1778|    354|    }
 1779|    404|    int version = _PyFunction_GetVersionForCurrentState(func);
 1780|    404|    if (!_PyFunction_IsVersionValid(version)) {
  ------------------
  |  Branch (1780:9): [True: 0, False: 404]
  ------------------
 1781|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1782|      0|        return -1;
 1783|      0|    }
 1784|    404|    write_u32(cache->func_version, version);
 1785|    404|    uint8_t opcode;
 1786|    404|    if (argcount == nargs + bound_method) {
  ------------------
  |  Branch (1786:9): [True: 342, False: 62]
  ------------------
 1787|    342|        opcode =
 1788|    342|            bound_method ? CALL_BOUND_METHOD_EXACT_ARGS : CALL_PY_EXACT_ARGS;
  ------------------
  |  |  147|     52|#define CALL_BOUND_METHOD_EXACT_ARGS           145
  ------------------
                          bound_method ? CALL_BOUND_METHOD_EXACT_ARGS : CALL_PY_EXACT_ARGS;
  ------------------
  |  |  166|    632|#define CALL_PY_EXACT_ARGS                     164
  ------------------
  |  Branch (1788:13): [True: 52, False: 290]
  ------------------
 1789|    342|    }
 1790|     62|    else {
 1791|     62|        opcode = bound_method ? CALL_BOUND_METHOD_GENERAL : CALL_PY_GENERAL;
  ------------------
  |  |  148|      2|#define CALL_BOUND_METHOD_GENERAL              146
  ------------------
                      opcode = bound_method ? CALL_BOUND_METHOD_GENERAL : CALL_PY_GENERAL;
  ------------------
  |  |  167|    122|#define CALL_PY_GENERAL                        165
  ------------------
  |  Branch (1791:18): [True: 2, False: 60]
  ------------------
 1792|     62|    }
 1793|    404|    specialize(instr, opcode);
 1794|    404|    return 0;
 1795|    404|}
specialize.c:specialize_class_call:
 1658|    190|{
 1659|    190|    assert(PyType_Check(callable));
  ------------------
  |  Branch (1659:5): [True: 190, False: 0]
  ------------------
 1660|    190|    PyTypeObject *tp = _PyType_CAST(callable);
  ------------------
  |  |  770|    190|    (assert(PyType_Check(op)), _Py_CAST(PyTypeObject*, (op)))
  |  |  ------------------
  |  |  |  |   37|    190|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
  |  Branch (1660:24): [True: 190, False: 0]
  ------------------
 1661|    190|    if (tp->tp_flags & Py_TPFLAGS_IMMUTABLETYPE) {
  ------------------
  |  |  500|    190|#define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
  ------------------
  |  Branch (1661:9): [True: 122, False: 68]
  ------------------
 1662|    122|        int oparg = instr->op.arg;
 1663|    122|        if (nargs == 1 && oparg == 1) {
  ------------------
  |  Branch (1663:13): [True: 73, False: 49]
  |  Branch (1663:27): [True: 72, False: 1]
  ------------------
 1664|     72|            if (tp == &PyUnicode_Type) {
  ------------------
  |  Branch (1664:17): [True: 6, False: 66]
  ------------------
 1665|      6|                specialize(instr, CALL_STR_1);
  ------------------
  |  |  168|      6|#define CALL_STR_1                             166
  ------------------
 1666|      6|                return 0;
 1667|      6|            }
 1668|     66|            else if (tp == &PyType_Type) {
  ------------------
  |  Branch (1668:22): [True: 12, False: 54]
  ------------------
 1669|     12|                specialize(instr, CALL_TYPE_1);
  ------------------
  |  |  170|     12|#define CALL_TYPE_1                            168
  ------------------
 1670|     12|                return 0;
 1671|     12|            }
 1672|     54|            else if (tp == &PyTuple_Type) {
  ------------------
  |  Branch (1672:22): [True: 2, False: 52]
  ------------------
 1673|      2|                specialize(instr, CALL_TUPLE_1);
  ------------------
  |  |  169|      2|#define CALL_TUPLE_1                           167
  ------------------
 1674|      2|                return 0;
 1675|      2|            }
 1676|     72|        }
 1677|    102|        if (tp->tp_vectorcall != NULL) {
  ------------------
  |  Branch (1677:13): [True: 62, False: 40]
  ------------------
 1678|     62|            specialize(instr, CALL_BUILTIN_CLASS);
  ------------------
  |  |  149|     62|#define CALL_BUILTIN_CLASS                     147
  ------------------
 1679|     62|            return 0;
 1680|     62|        }
 1681|     40|        goto generic;
 1682|    102|    }
 1683|     68|    if (Py_TYPE(tp) != &PyType_Type) {
  ------------------
  |  |  213|     68|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|     68|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     68|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1683:9): [True: 2, False: 66]
  ------------------
 1684|      2|        goto generic;
 1685|      2|    }
 1686|     66|    if (tp->tp_new == PyBaseObject_Type.tp_new) {
  ------------------
  |  Branch (1686:9): [True: 60, False: 6]
  ------------------
 1687|     60|        unsigned int tp_version = 0;
 1688|     60|        PyObject *init = get_init_for_simple_managed_python_class(tp, &tp_version);
 1689|     60|        if (!tp_version) {
  ------------------
  |  Branch (1689:13): [True: 0, False: 60]
  ------------------
 1690|      0|            SPECIALIZATION_FAIL(CALL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1691|      0|            Py_XDECREF(init);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1692|      0|            return -1;
 1693|      0|        }
 1694|     60|        if (init != NULL && _PyType_CacheInitForSpecialization(
  ------------------
  |  Branch (1694:13): [True: 16, False: 44]
  |  Branch (1694:29): [True: 16, False: 0]
  ------------------
 1695|     16|                                (PyHeapTypeObject *)tp, init, tp_version)) {
 1696|     16|            _PyCallCache *cache = (_PyCallCache *)(instr + 1);
 1697|     16|            write_u32(cache->func_version, tp_version);
 1698|     16|            specialize(instr, CALL_ALLOC_AND_ENTER_INIT);
  ------------------
  |  |  146|     16|#define CALL_ALLOC_AND_ENTER_INIT              144
  ------------------
 1699|     16|            Py_DECREF(init);
  ------------------
  |  |  430|     16|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1700|     16|            return 0;
 1701|     16|        }
 1702|     44|        Py_XDECREF(init);
  ------------------
  |  |  524|     44|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     44|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     44|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1703|     44|    }
 1704|     92|generic:
 1705|     92|    specialize(instr, CALL_NON_PY_GENERAL);
  ------------------
  |  |  165|     92|#define CALL_NON_PY_GENERAL                    163
  ------------------
 1706|     92|    return 0;
 1707|     66|}
specialize.c:get_init_for_simple_managed_python_class:
 1629|     60|{
 1630|     60|    assert(tp->tp_new == PyBaseObject_Type.tp_new);
  ------------------
  |  Branch (1630:5): [True: 60, False: 0]
  ------------------
 1631|     60|    if (tp->tp_alloc != PyType_GenericAlloc) {
  ------------------
  |  Branch (1631:9): [True: 0, False: 60]
  ------------------
 1632|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_OVERRIDDEN);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1633|      0|        return NULL;
 1634|      0|    }
 1635|     60|    unsigned long tp_flags = PyType_GetFlags(tp);
 1636|     60|    if (!(tp_flags & Py_TPFLAGS_HEAPTYPE)) {
  ------------------
  |  |  503|     60|#define Py_TPFLAGS_HEAPTYPE (1UL << 9)
  ------------------
  |  Branch (1636:9): [True: 0, False: 60]
  ------------------
 1637|       |        /* Is this possible? */
 1638|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_EXPECTED_ERROR);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1639|      0|        return NULL;
 1640|      0|    }
 1641|     60|    PyObject *init = _PyType_LookupRefAndVersion(tp, &_Py_ID(__init__), tp_version);
  ------------------
  |  |  936|     60|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     60|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     60|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1642|     60|    if (init == NULL || !PyFunction_Check(init)) {
  ------------------
  |  |   68|     60|#define PyFunction_Check(op) Py_IS_TYPE((op), &PyFunction_Type)
  |  |  ------------------
  |  |  |  |  215|     60|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     60|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     60|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1642:9): [True: 0, False: 60]
  |  Branch (1642:25): [True: 42, False: 18]
  ------------------
 1643|     42|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_INIT_NOT_PYTHON);
  ------------------
  |  |   43|     42|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1644|     42|        Py_XDECREF(init);
  ------------------
  |  |  524|     42|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1645|     42|        return NULL;
 1646|     42|    }
 1647|     18|    int kind = function_kind((PyCodeObject *)PyFunction_GET_CODE(init));
  ------------------
  |  |   93|     18|#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1648|     18|    if (kind != SIMPLE_FUNCTION) {
  ------------------
  |  |  125|     18|#define SIMPLE_FUNCTION 0
  ------------------
  |  Branch (1648:9): [True: 2, False: 16]
  ------------------
 1649|      2|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_INIT_NOT_SIMPLE);
  ------------------
  |  |   43|      2|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1650|      2|        Py_DECREF(init);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1651|      2|        return NULL;
 1652|      2|    }
 1653|     16|    return init;
 1654|     18|}
specialize.c:specialize_method_descriptor:
 1712|    269|{
 1713|    269|    switch (descr->d_method->ml_flags &
  ------------------
  |  Branch (1713:13): [True: 259, False: 10]
  ------------------
 1714|    269|        (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |   95|    269|#define METH_VARARGS  0x0001
  ------------------
                      (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |  115|    269|#  define METH_FASTCALL  0x0080
  ------------------
                      (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |   98|    269|#define METH_NOARGS   0x0004
  ------------------
                      (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O |
  ------------------
  |  |   99|    269|#define METH_O        0x0008
  ------------------
 1715|    269|        METH_KEYWORDS | METH_METHOD)) {
  ------------------
  |  |   96|    269|#define METH_KEYWORDS 0x0002
  ------------------
                      METH_KEYWORDS | METH_METHOD)) {
  ------------------
  |  |  133|    269|#define METH_METHOD 0x0200
  ------------------
 1716|     34|        case METH_NOARGS: {
  ------------------
  |  |   98|     34|#define METH_NOARGS   0x0004
  ------------------
  |  Branch (1716:9): [True: 34, False: 235]
  ------------------
 1717|     34|            if (nargs != 1) {
  ------------------
  |  Branch (1717:17): [True: 0, False: 34]
  ------------------
 1718|      0|                SPECIALIZATION_FAIL(CALL, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1719|      0|                return -1;
 1720|      0|            }
 1721|     34|            specialize(instr, CALL_METHOD_DESCRIPTOR_NOARGS);
  ------------------
  |  |  163|     34|#define CALL_METHOD_DESCRIPTOR_NOARGS          161
  ------------------
 1722|     34|            return 0;
 1723|     34|        }
 1724|    102|        case METH_O: {
  ------------------
  |  |   99|    102|#define METH_O        0x0008
  ------------------
  |  Branch (1724:9): [True: 102, False: 167]
  ------------------
 1725|    102|            if (nargs != 2) {
  ------------------
  |  Branch (1725:17): [True: 0, False: 102]
  ------------------
 1726|      0|                SPECIALIZATION_FAIL(CALL, SPEC_FAIL_WRONG_NUMBER_ARGUMENTS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1727|      0|                return -1;
 1728|      0|            }
 1729|    102|            PyInterpreterState *interp = _PyInterpreterState_GET();
 1730|    102|            PyObject *list_append = interp->callable_cache.list_append;
 1731|    102|            int oparg = instr->op.arg;
 1732|    102|            if ((PyObject *)descr == list_append && oparg == 1) {
  ------------------
  |  Branch (1732:17): [True: 42, False: 60]
  |  Branch (1732:53): [True: 42, False: 0]
  ------------------
 1733|     42|                assert(self_or_null != NULL);
  ------------------
  |  Branch (1733:17): [True: 42, False: 0]
  ------------------
 1734|     42|                if (PyList_CheckExact(self_or_null)) {
  ------------------
  |  |   26|     42|#define PyList_CheckExact(op) Py_IS_TYPE((op), &PyList_Type)
  |  |  ------------------
  |  |  |  |  215|     42|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     42|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     42|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 34, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1735|     34|                    specialize(instr, CALL_LIST_APPEND);
  ------------------
  |  |  160|     34|#define CALL_LIST_APPEND                       158
  ------------------
 1736|     34|                    return 0;
 1737|     34|                }
 1738|     42|            }
 1739|     68|            specialize(instr, CALL_METHOD_DESCRIPTOR_O);
  ------------------
  |  |  164|     68|#define CALL_METHOD_DESCRIPTOR_O               162
  ------------------
 1740|     68|            return 0;
 1741|    102|        }
 1742|    101|        case METH_FASTCALL: {
  ------------------
  |  |  115|    101|#  define METH_FASTCALL  0x0080
  ------------------
  |  Branch (1742:9): [True: 101, False: 168]
  ------------------
 1743|    101|            specialize(instr, CALL_METHOD_DESCRIPTOR_FAST);
  ------------------
  |  |  161|    101|#define CALL_METHOD_DESCRIPTOR_FAST            159
  ------------------
 1744|    101|            return 0;
 1745|    102|        }
 1746|     22|        case METH_FASTCALL | METH_KEYWORDS: {
  ------------------
  |  |  115|     22|#  define METH_FASTCALL  0x0080
  ------------------
                      case METH_FASTCALL | METH_KEYWORDS: {
  ------------------
  |  |   96|     22|#define METH_KEYWORDS 0x0002
  ------------------
  |  Branch (1746:9): [True: 22, False: 247]
  ------------------
 1747|     22|            specialize(instr, CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS);
  ------------------
  |  |  162|     22|#define CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS 160
  ------------------
 1748|     22|            return 0;
 1749|    102|        }
 1750|    269|    }
 1751|     10|    specialize(instr, CALL_NON_PY_GENERAL);
  ------------------
  |  |  165|     10|#define CALL_NON_PY_GENERAL                    163
  ------------------
 1752|     10|    return 0;
 1753|    269|}
specialize.c:specialize_py_call_kw:
 1801|     12|{
 1802|     12|    _PyCallCache *cache = (_PyCallCache *)(instr + 1);
 1803|     12|    PyCodeObject *code = (PyCodeObject *)func->func_code;
 1804|     12|    int kind = function_kind(code);
 1805|       |    /* Don't specialize if PEP 523 is active */
 1806|     12|    if (!_PyInterpreterState_IsSpecializationEnabled(_PyInterpreterState_GET())) {
  ------------------
  |  Branch (1806:9): [True: 0, False: 12]
  ------------------
 1807|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_PEP_523);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1808|      0|        return -1;
 1809|      0|    }
 1810|     12|    if (func->vectorcall != _PyFunction_Vectorcall) {
  ------------------
  |  Branch (1810:9): [True: 0, False: 12]
  ------------------
 1811|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CALL_VECTORCALL);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1812|      0|        return -1;
 1813|      0|    }
 1814|     12|    if (kind == SPEC_FAIL_CODE_NOT_OPTIMIZED) {
  ------------------
  |  |  137|     12|#define SPEC_FAIL_CODE_NOT_OPTIMIZED 8
  ------------------
  |  Branch (1814:9): [True: 0, False: 12]
  ------------------
 1815|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_CODE_NOT_OPTIMIZED);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1816|      0|        return -1;
 1817|      0|    }
 1818|     12|    int version = _PyFunction_GetVersionForCurrentState(func);
 1819|     12|    if (!_PyFunction_IsVersionValid(version)) {
  ------------------
  |  Branch (1819:9): [True: 0, False: 12]
  ------------------
 1820|      0|        SPECIALIZATION_FAIL(CALL, SPEC_FAIL_OUT_OF_VERSIONS);
  ------------------
  |  |   43|      0|#  define SPECIALIZATION_FAIL(opcode, kind) ((void)0)
  ------------------
 1821|      0|        return -1;
 1822|      0|    }
 1823|     12|    write_u32(cache->func_version, version);
 1824|     12|    specialize(instr, bound_method ? CALL_KW_BOUND_METHOD : CALL_KW_PY);
  ------------------
  |  |  156|      0|#define CALL_KW_BOUND_METHOD                   154
  ------------------
                  specialize(instr, bound_method ? CALL_KW_BOUND_METHOD : CALL_KW_PY);
  ------------------
  |  |  158|     24|#define CALL_KW_PY                             156
  ------------------
  |  Branch (1824:23): [True: 0, False: 12]
  ------------------
 1825|     12|    return 0;
 1826|     12|}
specialize.c:function_kind:
 1474|    455|function_kind(PyCodeObject *code) {
 1475|    455|    int flags = code->co_flags;
 1476|    455|    if ((flags & (CO_VARKEYWORDS | CO_VARARGS)) || code->co_kwonlyargcount) {
  ------------------
  |  |  125|    455|#define CO_VARKEYWORDS  0x0008
  ------------------
                  if ((flags & (CO_VARKEYWORDS | CO_VARARGS)) || code->co_kwonlyargcount) {
  ------------------
  |  |  124|    455|#define CO_VARARGS      0x0004
  ------------------
  |  Branch (1476:9): [True: 45, False: 410]
  |  Branch (1476:52): [True: 17, False: 393]
  ------------------
 1477|     62|        return SPEC_FAIL_CODE_COMPLEX_PARAMETERS;
  ------------------
  |  |  136|     62|#define SPEC_FAIL_CODE_COMPLEX_PARAMETERS 7
  ------------------
 1478|     62|    }
 1479|    393|    if ((flags & CO_OPTIMIZED) == 0) {
  ------------------
  |  |  122|    393|#define CO_OPTIMIZED    0x0001
  ------------------
  |  Branch (1479:9): [True: 0, False: 393]
  ------------------
 1480|      0|        return SPEC_FAIL_CODE_NOT_OPTIMIZED;
  ------------------
  |  |  137|      0|#define SPEC_FAIL_CODE_NOT_OPTIMIZED 8
  ------------------
 1481|      0|    }
 1482|    393|    return SIMPLE_FUNCTION;
  ------------------
  |  |  125|    393|#define SIMPLE_FUNCTION 0
  ------------------
 1483|    393|}
specialize.c:binary_op_extended_specialization:
 2323|  1.05k|{
 2324|  1.05k|    size_t n = sizeof(binaryop_extend_descrs)/sizeof(_PyBinaryOpSpecializationDescr);
 2325|  41.0k|    for (size_t i = 0; i < n; i++) {
  ------------------
  |  Branch (2325:24): [True: 40.0k, False: 992]
  ------------------
 2326|  40.0k|        _PyBinaryOpSpecializationDescr *d = &binaryop_extend_descrs[i];
 2327|  40.0k|        if (d->oparg != oparg) {
  ------------------
  |  Branch (2327:13): [True: 37.2k, False: 2.81k]
  ------------------
 2328|  37.2k|            continue;
 2329|  37.2k|        }
 2330|  2.81k|        int match = (d->guard != NULL)
  ------------------
  |  Branch (2330:21): [True: 1.00k, False: 1.81k]
  ------------------
 2331|  2.81k|            ? d->guard(lhs, rhs)
 2332|  2.81k|            : (Py_TYPE(lhs) == d->lhs_type && Py_TYPE(rhs) == d->rhs_type);
  ------------------
  |  |  213|  1.81k|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|  1.81k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.81k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          : (Py_TYPE(lhs) == d->lhs_type && Py_TYPE(rhs) == d->rhs_type);
  ------------------
  |  |  213|    776|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|    776|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    776|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2332:16): [True: 776, False: 1.03k]
  |  Branch (2332:47): [True: 11, False: 765]
  ------------------
 2333|  2.81k|        if (match) {
  ------------------
  |  Branch (2333:13): [True: 67, False: 2.74k]
  ------------------
 2334|     67|            *descr = d;
 2335|     67|            return 1;
 2336|     67|        }
 2337|  2.81k|    }
 2338|    992|    return 0;
 2339|  1.05k|}
specialize.c:compactlongs_guard:
 2165|  21.4k|{
 2166|  21.4k|    return (is_compactlong(lhs) && is_compactlong(rhs));
  ------------------
  |  Branch (2166:13): [True: 21.3k, False: 22]
  |  Branch (2166:36): [True: 21.3k, False: 8]
  ------------------
 2167|  21.4k|}
specialize.c:is_compactlong:
 2140|  42.7k|{
 2141|  42.7k|    return PyLong_CheckExact(v) &&
  ------------------
  |  |   14|  42.7k|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|  85.5k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  42.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  42.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 42.7k, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2142|  42.7k|           _PyLong_IsCompact((PyLongObject *)v);
  ------------------
  |  Branch (2142:12): [True: 42.7k, False: 25]
  ------------------
 2143|  42.7k|}
specialize.c:compactlongs_or:
 2172|     54|    { \
 2173|     54|        Py_ssize_t rhs_val = _PyLong_CompactValue((PyLongObject *)rhs); \
 2174|     54|        Py_ssize_t lhs_val = _PyLong_CompactValue((PyLongObject *)lhs); \
 2175|     54|        return PyLong_FromSsize_t(lhs_val OP rhs_val); \
 2176|     54|    }
specialize.c:compactlongs_and:
 2172|  21.2k|    { \
 2173|  21.2k|        Py_ssize_t rhs_val = _PyLong_CompactValue((PyLongObject *)rhs); \
 2174|  21.2k|        Py_ssize_t lhs_val = _PyLong_CompactValue((PyLongObject *)lhs); \
 2175|  21.2k|        return PyLong_FromSsize_t(lhs_val OP rhs_val); \
 2176|  21.2k|    }
specialize.c:compactlongs_xor:
 2172|      5|    { \
 2173|      5|        Py_ssize_t rhs_val = _PyLong_CompactValue((PyLongObject *)rhs); \
 2174|      5|        Py_ssize_t lhs_val = _PyLong_CompactValue((PyLongObject *)lhs); \
 2175|      5|        return PyLong_FromSsize_t(lhs_val OP rhs_val); \
 2176|      5|    }
specialize.c:float_compactlong_guard:
 2186|    459|{
 2187|    459|    return (
 2188|    459|        PyFloat_CheckExact(lhs) &&
  ------------------
  |  |   17|    459|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|    918|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    459|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    459|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 459]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2189|      0|        !isnan(PyFloat_AS_DOUBLE(lhs)) &&
  ------------------
  |  Branch (2189:9): [True: 0, False: 0]
  ------------------
 2190|    459|        PyLong_CheckExact(rhs) &&
  ------------------
  |  |   14|      0|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    459|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2191|      0|        _PyLong_IsCompact((PyLongObject *)rhs)
  ------------------
  |  Branch (2191:9): [True: 0, False: 0]
  ------------------
 2192|    459|    );
 2193|    459|}
specialize.c:compactlong_float_guard:
 2221|    459|{
 2222|    459|    return (
 2223|    459|        PyLong_CheckExact(lhs) &&
  ------------------
  |  |   14|    459|#define PyLong_CheckExact(op) Py_IS_TYPE((op), &PyLong_Type)
  |  |  ------------------
  |  |  |  |  215|    918|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    459|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    459|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 433, False: 26]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2224|    433|        _PyLong_IsCompact((PyLongObject *)lhs) &&
  ------------------
  |  Branch (2224:9): [True: 154, False: 279]
  ------------------
 2225|    459|        PyFloat_CheckExact(rhs) &&
  ------------------
  |  |   17|    154|#define PyFloat_CheckExact(op) Py_IS_TYPE((op), &PyFloat_Type)
  |  |  ------------------
  |  |  |  |  215|    613|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    154|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    154|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 0, False: 154]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2226|      0|        !isnan(PyFloat_AS_DOUBLE(rhs))
  ------------------
  |  Branch (2226:9): [True: 0, False: 0]
  ------------------
 2227|    459|    );
 2228|    459|}
specialize.c:check_type_always_true:
 2825|      8|{
 2826|      8|    PyNumberMethods *nb = ty->tp_as_number;
 2827|      8|    if (nb && nb->nb_bool) {
  ------------------
  |  Branch (2827:9): [True: 8, False: 0]
  |  Branch (2827:15): [True: 1, False: 7]
  ------------------
 2828|      1|        return SPEC_FAIL_TO_BOOL_NUMBER;
  ------------------
  |  |  314|      1|#define SPEC_FAIL_TO_BOOL_NUMBER      15
  ------------------
 2829|      1|    }
 2830|      7|    PyMappingMethods *mp = ty->tp_as_mapping;
 2831|      7|    if (mp && mp->mp_length) {
  ------------------
  |  Branch (2831:9): [True: 7, False: 0]
  |  Branch (2831:15): [True: 5, False: 2]
  ------------------
 2832|      5|        return SPEC_FAIL_TO_BOOL_MAPPING;
  ------------------
  |  |  312|      5|#define SPEC_FAIL_TO_BOOL_MAPPING     13
  ------------------
 2833|      5|    }
 2834|      2|    PySequenceMethods *sq = ty->tp_as_sequence;
 2835|      2|    if (sq && sq->sq_length) {
  ------------------
  |  Branch (2835:9): [True: 2, False: 0]
  |  Branch (2835:15): [True: 0, False: 2]
  ------------------
 2836|      0|      return SPEC_FAIL_TO_BOOL_SEQUENCE;
  ------------------
  |  |  315|      0|#define SPEC_FAIL_TO_BOOL_SEQUENCE    16
  ------------------
 2837|      0|    }
 2838|      2|    return 0;
 2839|      2|}
specialize.c:set_counter:
  348|   187k|{
  349|   187k|    FT_ATOMIC_STORE_UINT16_RELAXED(counter->value_and_backoff,
  ------------------
  |  |  171|   187k|#define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value
  ------------------
  350|   187k|                                   value.value_and_backoff);
  351|   187k|}

_PyMember_GetOffset:
   26|  6.73k|{
   27|  6.73k|    unsigned char *addr = (unsigned char *)obj + mp->offset;
   28|  6.73k|    if (mp->flags & _Py_AFTER_ITEMS) {
  ------------------
  |  |   89|  6.73k|#  define _Py_AFTER_ITEMS      (1 << 4) // For internal use.
  ------------------
  |  Branch (28:9): [True: 0, False: 6.73k]
  ------------------
   29|      0|        PyTypeObject *type = Py_TYPE(obj);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   30|      0|        addr += _Py_SIZE_ROUND_UP(Py_SIZE(obj) * type->tp_itemsize, SIZEOF_VOID_P);
  ------------------
  |  |  238|      0|#define _Py_SIZE_ROUND_UP(n, a) (((size_t)(n) + \
  |  |  239|      0|        (size_t)((a) - 1)) & ~(size_t)((a) - 1))
  ------------------
   31|      0|    }
   32|  6.73k|    return addr;
   33|  6.73k|}
PyMember_GetOne:
   37|  3.30k|{
   38|  3.30k|    PyObject *v;
   39|  3.30k|    if (l->flags & Py_RELATIVE_OFFSET) {
  ------------------
  |  |   86|  3.30k|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
  |  Branch (39:9): [True: 0, False: 3.30k]
  ------------------
   40|      0|        PyErr_SetString(
   41|      0|            PyExc_SystemError,
   42|      0|            "PyMember_GetOne used with Py_RELATIVE_OFFSET");
   43|      0|        return NULL;
   44|      0|    }
   45|       |
   46|  3.30k|    const void *addr = _PyMember_GetOffset((PyObject *)obj_addr, l);
   47|  3.30k|    switch (l->type) {
   48|      0|    case Py_T_BOOL:
  ------------------
  |  |   73|      0|#define Py_T_BOOL      14
  ------------------
  |  Branch (48:5): [True: 0, False: 3.30k]
  ------------------
   49|      0|        v = PyBool_FromLong(FT_ATOMIC_LOAD_CHAR_RELAXED(*(char*)addr));
  ------------------
  |  |  176|      0|#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) value
  ------------------
   50|      0|        break;
   51|      0|    case Py_T_BYTE:
  ------------------
  |  |   62|      0|#define Py_T_BYTE      8   /* 8-bit signed int */
  ------------------
  |  Branch (51:5): [True: 0, False: 3.30k]
  ------------------
   52|      0|        v = PyLong_FromLong(FT_ATOMIC_LOAD_CHAR_RELAXED(*(char*)addr));
  ------------------
  |  |  176|      0|#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) value
  ------------------
   53|      0|        break;
   54|      0|    case Py_T_UBYTE:
  ------------------
  |  |   64|      0|#define Py_T_UBYTE     9
  ------------------
  |  Branch (54:5): [True: 0, False: 3.30k]
  ------------------
   55|      0|        v = PyLong_FromUnsignedLong(FT_ATOMIC_LOAD_UCHAR_RELAXED(*(unsigned char*)addr));
  ------------------
  |  |  178|      0|#define FT_ATOMIC_LOAD_UCHAR_RELAXED(value) value
  ------------------
   56|      0|        break;
   57|      0|    case Py_T_SHORT:
  ------------------
  |  |   53|      0|#define Py_T_SHORT     0
  ------------------
  |  Branch (57:5): [True: 0, False: 3.30k]
  ------------------
   58|      0|        v = PyLong_FromLong(FT_ATOMIC_LOAD_SHORT_RELAXED(*(short*)addr));
  ------------------
  |  |  180|      0|#define FT_ATOMIC_LOAD_SHORT_RELAXED(value) value
  ------------------
   59|      0|        break;
   60|      0|    case Py_T_USHORT:
  ------------------
  |  |   65|      0|#define Py_T_USHORT    10
  ------------------
  |  Branch (60:5): [True: 0, False: 3.30k]
  ------------------
   61|      0|        v = PyLong_FromUnsignedLong(FT_ATOMIC_LOAD_USHORT_RELAXED(*(unsigned short*)addr));
  ------------------
  |  |  182|      0|#define FT_ATOMIC_LOAD_USHORT_RELAXED(value) value
  ------------------
   62|      0|        break;
   63|      0|    case Py_T_INT:
  ------------------
  |  |   54|      0|#define Py_T_INT       1
  ------------------
  |  Branch (63:5): [True: 0, False: 3.30k]
  ------------------
   64|      0|        v = PyLong_FromLong(FT_ATOMIC_LOAD_INT_RELAXED(*(int*)addr));
  ------------------
  |  |  186|      0|#define FT_ATOMIC_LOAD_INT_RELAXED(value) value
  ------------------
   65|      0|        break;
   66|      0|    case Py_T_UINT:
  ------------------
  |  |   66|      0|#define Py_T_UINT      11
  ------------------
  |  Branch (66:5): [True: 0, False: 3.30k]
  ------------------
   67|      0|        v = PyLong_FromUnsignedLong(FT_ATOMIC_LOAD_UINT_RELAXED(*(unsigned int*)addr));
  ------------------
  |  |  189|      0|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  ------------------
   68|      0|        break;
   69|      0|    case Py_T_LONG:
  ------------------
  |  |   55|      0|#define Py_T_LONG      2
  ------------------
  |  Branch (69:5): [True: 0, False: 3.30k]
  ------------------
   70|      0|        v = PyLong_FromLong(FT_ATOMIC_LOAD_LONG_RELAXED(*(long*)addr));
  ------------------
  |  |  191|      0|#define FT_ATOMIC_LOAD_LONG_RELAXED(value) value
  ------------------
   71|      0|        break;
   72|      0|    case Py_T_ULONG:
  ------------------
  |  |   67|      0|#define Py_T_ULONG     12
  ------------------
  |  Branch (72:5): [True: 0, False: 3.30k]
  ------------------
   73|      0|        v = PyLong_FromUnsignedLong(FT_ATOMIC_LOAD_ULONG_RELAXED(*(unsigned long*)addr));
  ------------------
  |  |  162|      0|#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) value
  ------------------
   74|      0|        break;
   75|  2.77k|    case Py_T_PYSSIZET:
  ------------------
  |  |   79|  2.77k|#define Py_T_PYSSIZET  19      /* Py_ssize_t */
  ------------------
  |  Branch (75:5): [True: 2.77k, False: 537]
  ------------------
   76|  2.77k|        v = PyLong_FromSsize_t(FT_ATOMIC_LOAD_SSIZE_RELAXED(*(Py_ssize_t*)addr));
  ------------------
  |  |  149|  2.77k|#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
  ------------------
   77|  2.77k|        break;
   78|      0|    case Py_T_FLOAT:
  ------------------
  |  |   56|      0|#define Py_T_FLOAT     3
  ------------------
  |  Branch (78:5): [True: 0, False: 3.30k]
  ------------------
   79|      0|        v = PyFloat_FromDouble((double)FT_ATOMIC_LOAD_FLOAT_RELAXED(*(float*)addr));
  ------------------
  |  |  195|      0|#define FT_ATOMIC_LOAD_FLOAT_RELAXED(value) value
  ------------------
   80|      0|        break;
   81|      0|    case Py_T_DOUBLE:
  ------------------
  |  |   57|      0|#define Py_T_DOUBLE    4
  ------------------
  |  Branch (81:5): [True: 0, False: 3.30k]
  ------------------
   82|      0|        v = PyFloat_FromDouble(FT_ATOMIC_LOAD_DOUBLE_RELAXED(*(double*)addr));
  ------------------
  |  |  197|      0|#define FT_ATOMIC_LOAD_DOUBLE_RELAXED(value) value
  ------------------
   83|      0|        break;
   84|      1|    case Py_T_STRING:
  ------------------
  |  |   58|      1|#define Py_T_STRING    5
  ------------------
  |  Branch (84:5): [True: 1, False: 3.30k]
  ------------------
   85|      1|        if (*(char**)addr == NULL) {
  ------------------
  |  Branch (85:13): [True: 0, False: 1]
  ------------------
   86|      0|            v = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      0|        }
   88|      1|        else
   89|      1|            v = PyUnicode_FromString(*(char**)addr);
   90|      1|        break;
   91|      0|    case Py_T_STRING_INPLACE:
  ------------------
  |  |   70|      0|#define Py_T_STRING_INPLACE    13
  ------------------
  |  Branch (91:5): [True: 0, False: 3.30k]
  ------------------
   92|      0|        v = PyUnicode_FromString((char*)addr);
   93|      0|        break;
   94|      0|    case Py_T_CHAR: {
  ------------------
  |  |   61|      0|#define Py_T_CHAR      7   /* 1-character string */
  ------------------
  |  Branch (94:5): [True: 0, False: 3.30k]
  ------------------
   95|      0|        char char_val = FT_ATOMIC_LOAD_CHAR_RELAXED(*(char*)addr);
  ------------------
  |  |  176|      0|#define FT_ATOMIC_LOAD_CHAR_RELAXED(value) value
  ------------------
   96|      0|        v = PyUnicode_FromStringAndSize(&char_val, 1);
   97|      0|        break;
   98|      0|    }
   99|    518|    case _Py_T_OBJECT:
  ------------------
  |  |   59|    518|#define _Py_T_OBJECT   6  // Deprecated, use Py_T_OBJECT_EX instead
  ------------------
  |  Branch (99:5): [True: 518, False: 2.78k]
  ------------------
  100|    518|        v = FT_ATOMIC_LOAD_PTR(*(PyObject **) addr);
  ------------------
  |  |  145|    518|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
  101|    518|        if (v != NULL) {
  ------------------
  |  Branch (101:13): [True: 518, False: 0]
  ------------------
  102|       |#ifdef Py_GIL_DISABLED
  103|       |            if (!_Py_TryIncrefCompare((PyObject **) addr, v)) {
  104|       |                Py_BEGIN_CRITICAL_SECTION((PyObject *) obj_addr);
  105|       |                v = FT_ATOMIC_LOAD_PTR(*(PyObject **) addr);
  106|       |                Py_XINCREF(v);
  107|       |                Py_END_CRITICAL_SECTION();
  108|       |            }
  109|       |#else
  110|    518|            Py_INCREF(v);
  ------------------
  |  |  310|    518|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    518|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    518|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|    518|#endif
  112|    518|        }
  113|    518|        if (v == NULL) {
  ------------------
  |  Branch (113:13): [True: 0, False: 518]
  ------------------
  114|      0|            v = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  115|      0|        }
  116|    518|        break;
  117|     18|    case Py_T_OBJECT_EX:
  ------------------
  |  |   75|     18|#define Py_T_OBJECT_EX 16
  ------------------
  |  Branch (117:5): [True: 18, False: 3.28k]
  ------------------
  118|     18|        v = member_get_object(addr, obj_addr, l);
  119|     18|#ifndef Py_GIL_DISABLED
  120|     18|        Py_XINCREF(v);
  ------------------
  |  |  514|     18|#  define Py_XINCREF(op) Py_XINCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     18|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     18|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|       |#else
  122|       |        if (v != NULL) {
  123|       |            if (!_Py_TryIncrefCompare((PyObject **) addr, v)) {
  124|       |                Py_BEGIN_CRITICAL_SECTION((PyObject *) obj_addr);
  125|       |                v = member_get_object(addr, obj_addr, l);
  126|       |                Py_XINCREF(v);
  127|       |                Py_END_CRITICAL_SECTION();
  128|       |            }
  129|       |        }
  130|       |#endif
  131|     18|        break;
  132|      0|    case Py_T_LONGLONG:
  ------------------
  |  |   76|      0|#define Py_T_LONGLONG  17
  ------------------
  |  Branch (132:5): [True: 0, False: 3.30k]
  ------------------
  133|      0|        v = PyLong_FromLongLong(FT_ATOMIC_LOAD_LLONG_RELAXED(*(long long *)addr));
  ------------------
  |  |  199|      0|#define FT_ATOMIC_LOAD_LLONG_RELAXED(value) value
  ------------------
  134|      0|        break;
  135|      0|    case Py_T_ULONGLONG:
  ------------------
  |  |   77|      0|#define Py_T_ULONGLONG 18
  ------------------
  |  Branch (135:5): [True: 0, False: 3.30k]
  ------------------
  136|      0|        v = PyLong_FromUnsignedLongLong(FT_ATOMIC_LOAD_ULLONG_RELAXED(*(unsigned long long *)addr));
  ------------------
  |  |  201|      0|#define FT_ATOMIC_LOAD_ULLONG_RELAXED(value) value
  ------------------
  137|      0|        break;
  138|      0|    case _Py_T_NONE:
  ------------------
  |  |   80|      0|#define _Py_T_NONE     20 // Deprecated. Value is always None.
  ------------------
  |  Branch (138:5): [True: 0, False: 3.30k]
  ------------------
  139|       |        // doesn't require free-threading code path
  140|      0|        v = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|      0|        break;
  142|      0|    default:
  ------------------
  |  Branch (142:5): [True: 0, False: 3.30k]
  ------------------
  143|      0|        PyErr_SetString(PyExc_SystemError, "bad memberdescr type");
  144|      0|        v = NULL;
  145|  3.30k|    }
  146|  3.30k|    return v;
  147|  3.30k|}
PyMember_SetOne:
  157|  2.71k|{
  158|  2.71k|    PyObject *oldv;
  159|  2.71k|    if (l->flags & Py_RELATIVE_OFFSET) {
  ------------------
  |  |   86|  2.71k|#define Py_RELATIVE_OFFSET     (1 << 3)
  ------------------
  |  Branch (159:9): [True: 0, False: 2.71k]
  ------------------
  160|      0|        PyErr_SetString(
  161|      0|            PyExc_SystemError,
  162|      0|            "PyMember_SetOne used with Py_RELATIVE_OFFSET");
  163|      0|        return -1;
  164|      0|    }
  165|       |
  166|  2.71k|    PyObject *obj = (PyObject *)addr;
  167|  2.71k|    addr = _PyMember_GetOffset(obj, l);
  168|       |
  169|  2.71k|    if ((l->flags & Py_READONLY))
  ------------------
  |  |   83|  2.71k|#define Py_READONLY            (1 << 0)
  ------------------
  |  Branch (169:9): [True: 0, False: 2.71k]
  ------------------
  170|      0|    {
  171|      0|        PyErr_SetString(PyExc_AttributeError, "readonly attribute");
  172|      0|        return -1;
  173|      0|    }
  174|  2.71k|    if (v == NULL && l->type != Py_T_OBJECT_EX && l->type != _Py_T_OBJECT) {
  ------------------
  |  |   75|  2.71k|#define Py_T_OBJECT_EX 16
  ------------------
                  if (v == NULL && l->type != Py_T_OBJECT_EX && l->type != _Py_T_OBJECT) {
  ------------------
  |  |   59|      0|#define _Py_T_OBJECT   6  // Deprecated, use Py_T_OBJECT_EX instead
  ------------------
  |  Branch (174:9): [True: 0, False: 2.71k]
  |  Branch (174:22): [True: 0, False: 0]
  |  Branch (174:51): [True: 0, False: 0]
  ------------------
  175|      0|        PyErr_SetString(PyExc_TypeError,
  176|      0|                        "can't delete numeric/char attribute");
  177|      0|        return -1;
  178|      0|    }
  179|  2.71k|    switch (l->type) {
  180|      0|    case Py_T_BOOL:{
  ------------------
  |  |   73|      0|#define Py_T_BOOL      14
  ------------------
  |  Branch (180:5): [True: 0, False: 2.71k]
  ------------------
  181|      0|        if (!PyBool_Check(v)) {
  ------------------
  |  |   12|      0|#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
  |  |  ------------------
  |  |  |  |  215|      0|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (181:13): [True: 0, False: 0]
  ------------------
  182|      0|            PyErr_SetString(PyExc_TypeError,
  183|      0|                            "attribute value type must be bool");
  184|      0|            return -1;
  185|      0|        }
  186|      0|        if (v == Py_True)
  ------------------
  |  |   26|      0|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (186:13): [True: 0, False: 0]
  ------------------
  187|      0|            FT_ATOMIC_STORE_CHAR_RELAXED(*(char*)addr, 1);
  ------------------
  |  |  177|      0|#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value
  ------------------
  188|      0|        else
  189|      0|            FT_ATOMIC_STORE_CHAR_RELAXED(*(char*)addr, 0);
  ------------------
  |  |  177|      0|#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value
  ------------------
  190|      0|        break;
  191|      0|        }
  192|      0|    case Py_T_BYTE:{
  ------------------
  |  |   62|      0|#define Py_T_BYTE      8   /* 8-bit signed int */
  ------------------
  |  Branch (192:5): [True: 0, False: 2.71k]
  ------------------
  193|      0|        long long_val = PyLong_AsLong(v);
  194|      0|        if ((long_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (194:13): [True: 0, False: 0]
  |  Branch (194:33): [True: 0, False: 0]
  ------------------
  195|      0|            return -1;
  196|      0|        FT_ATOMIC_STORE_CHAR_RELAXED(*(char*)addr, (char)long_val);
  ------------------
  |  |  177|      0|#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value
  ------------------
  197|       |        /* XXX: For compatibility, only warn about truncations
  198|       |           for now. */
  199|      0|        if ((long_val > CHAR_MAX) || (long_val < CHAR_MIN))
  ------------------
  |  Branch (199:13): [True: 0, False: 0]
  |  Branch (199:38): [True: 0, False: 0]
  ------------------
  200|      0|            WARN("Truncation of value to char");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  201|      0|        break;
  202|      0|        }
  203|      0|    case Py_T_UBYTE:{
  ------------------
  |  |   64|      0|#define Py_T_UBYTE     9
  ------------------
  |  Branch (203:5): [True: 0, False: 2.71k]
  ------------------
  204|      0|        long long_val = PyLong_AsLong(v);
  205|      0|        if ((long_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (205:13): [True: 0, False: 0]
  |  Branch (205:33): [True: 0, False: 0]
  ------------------
  206|      0|            return -1;
  207|      0|        FT_ATOMIC_STORE_UCHAR_RELAXED(*(unsigned char*)addr, (unsigned char)long_val);
  ------------------
  |  |  179|      0|#define FT_ATOMIC_STORE_UCHAR_RELAXED(value, new_value) value = new_value
  ------------------
  208|      0|        if ((long_val > UCHAR_MAX) || (long_val < 0))
  ------------------
  |  Branch (208:13): [True: 0, False: 0]
  |  Branch (208:39): [True: 0, False: 0]
  ------------------
  209|      0|            WARN("Truncation of value to unsigned char");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  210|      0|        break;
  211|      0|        }
  212|      0|    case Py_T_SHORT:{
  ------------------
  |  |   53|      0|#define Py_T_SHORT     0
  ------------------
  |  Branch (212:5): [True: 0, False: 2.71k]
  ------------------
  213|      0|        long long_val = PyLong_AsLong(v);
  214|      0|        if ((long_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (214:13): [True: 0, False: 0]
  |  Branch (214:33): [True: 0, False: 0]
  ------------------
  215|      0|            return -1;
  216|      0|        FT_ATOMIC_STORE_SHORT_RELAXED(*(short*)addr, (short)long_val);
  ------------------
  |  |  181|      0|#define FT_ATOMIC_STORE_SHORT_RELAXED(value, new_value) value = new_value
  ------------------
  217|      0|        if ((long_val > SHRT_MAX) || (long_val < SHRT_MIN))
  ------------------
  |  Branch (217:13): [True: 0, False: 0]
  |  Branch (217:38): [True: 0, False: 0]
  ------------------
  218|      0|            WARN("Truncation of value to short");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  219|      0|        break;
  220|      0|        }
  221|      0|    case Py_T_USHORT:{
  ------------------
  |  |   65|      0|#define Py_T_USHORT    10
  ------------------
  |  Branch (221:5): [True: 0, False: 2.71k]
  ------------------
  222|      0|        long long_val = PyLong_AsLong(v);
  223|      0|        if ((long_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (223:13): [True: 0, False: 0]
  |  Branch (223:33): [True: 0, False: 0]
  ------------------
  224|      0|            return -1;
  225|      0|        FT_ATOMIC_STORE_USHORT_RELAXED(*(unsigned short*)addr, (unsigned short)long_val);
  ------------------
  |  |  183|      0|#define FT_ATOMIC_STORE_USHORT_RELAXED(value, new_value) value = new_value
  ------------------
  226|      0|        if ((long_val > USHRT_MAX) || (long_val < 0))
  ------------------
  |  Branch (226:13): [True: 0, False: 0]
  |  Branch (226:39): [True: 0, False: 0]
  ------------------
  227|      0|            WARN("Truncation of value to unsigned short");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  228|      0|        break;
  229|      0|        }
  230|      0|    case Py_T_INT:{
  ------------------
  |  |   54|      0|#define Py_T_INT       1
  ------------------
  |  Branch (230:5): [True: 0, False: 2.71k]
  ------------------
  231|      0|        long long_val = PyLong_AsLong(v);
  232|      0|        if ((long_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (232:13): [True: 0, False: 0]
  |  Branch (232:33): [True: 0, False: 0]
  ------------------
  233|      0|            return -1;
  234|      0|        FT_ATOMIC_STORE_INT_RELAXED(*(int *)addr, (int)long_val);
  ------------------
  |  |  187|      0|#define FT_ATOMIC_STORE_INT_RELAXED(value, new_value) value = new_value
  ------------------
  235|      0|        if ((long_val > INT_MAX) || (long_val < INT_MIN))
  ------------------
  |  Branch (235:13): [True: 0, False: 0]
  |  Branch (235:37): [True: 0, False: 0]
  ------------------
  236|      0|            WARN("Truncation of value to int");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  237|      0|        break;
  238|      0|        }
  239|      0|    case Py_T_UINT: {
  ------------------
  |  |   66|      0|#define Py_T_UINT      11
  ------------------
  |  Branch (239:5): [True: 0, False: 2.71k]
  ------------------
  240|       |        /* XXX: For compatibility, accept negative int values
  241|       |           as well. */
  242|      0|        v = _PyNumber_Index(v);
  243|      0|        if (v == NULL) {
  ------------------
  |  Branch (243:13): [True: 0, False: 0]
  ------------------
  244|      0|            return -1;
  245|      0|        }
  246|      0|        if (_PyLong_IsNegative((PyLongObject *)v)) {
  ------------------
  |  Branch (246:13): [True: 0, False: 0]
  ------------------
  247|      0|            long long_val = PyLong_AsLong(v);
  248|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|      0|            if (long_val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (249:17): [True: 0, False: 0]
  |  Branch (249:35): [True: 0, False: 0]
  ------------------
  250|      0|                return -1;
  251|      0|            }
  252|      0|            FT_ATOMIC_STORE_UINT_RELAXED(*(unsigned int *)addr, (unsigned int)(unsigned long)long_val);
  ------------------
  |  |  190|      0|#define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) value = new_value
  ------------------
  253|      0|            WARN("Writing negative value into unsigned field");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  254|      0|        }
  255|      0|        else {
  256|      0|            unsigned long ulong_val = PyLong_AsUnsignedLong(v);
  257|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|      0|            if (ulong_val == (unsigned long)-1 && PyErr_Occurred()) {
  ------------------
  |  Branch (258:17): [True: 0, False: 0]
  |  Branch (258:51): [True: 0, False: 0]
  ------------------
  259|      0|                return -1;
  260|      0|            }
  261|      0|            FT_ATOMIC_STORE_UINT_RELAXED(*(unsigned int *)addr, (unsigned int)ulong_val);
  ------------------
  |  |  190|      0|#define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) value = new_value
  ------------------
  262|      0|            if (ulong_val > UINT_MAX) {
  ------------------
  |  Branch (262:17): [True: 0, False: 0]
  ------------------
  263|      0|                WARN("Truncation of value to unsigned int");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  264|      0|            }
  265|      0|        }
  266|      0|        break;
  267|      0|    }
  268|      0|    case Py_T_LONG: {
  ------------------
  |  |   55|      0|#define Py_T_LONG      2
  ------------------
  |  Branch (268:5): [True: 0, False: 2.71k]
  ------------------
  269|      0|        const long long_val = PyLong_AsLong(v);
  270|      0|        if ((long_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (270:13): [True: 0, False: 0]
  |  Branch (270:33): [True: 0, False: 0]
  ------------------
  271|      0|            return -1;
  272|      0|        FT_ATOMIC_STORE_LONG_RELAXED(*(long*)addr, long_val);
  ------------------
  |  |  192|      0|#define FT_ATOMIC_STORE_LONG_RELAXED(value, new_value) value = new_value
  ------------------
  273|      0|        break;
  274|      0|    }
  275|      0|    case Py_T_ULONG: {
  ------------------
  |  |   67|      0|#define Py_T_ULONG     12
  ------------------
  |  Branch (275:5): [True: 0, False: 2.71k]
  ------------------
  276|       |        /* XXX: For compatibility, accept negative int values
  277|       |           as well. */
  278|      0|        v = _PyNumber_Index(v);
  279|      0|        if (v == NULL) {
  ------------------
  |  Branch (279:13): [True: 0, False: 0]
  ------------------
  280|      0|            return -1;
  281|      0|        }
  282|      0|        if (_PyLong_IsNegative((PyLongObject *)v)) {
  ------------------
  |  Branch (282:13): [True: 0, False: 0]
  ------------------
  283|      0|            long long_val = PyLong_AsLong(v);
  284|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|      0|            if (long_val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (285:17): [True: 0, False: 0]
  |  Branch (285:35): [True: 0, False: 0]
  ------------------
  286|      0|                return -1;
  287|      0|            }
  288|      0|            FT_ATOMIC_STORE_ULONG_RELAXED(*(unsigned long *)addr, (unsigned long)long_val);
  ------------------
  |  |  193|      0|#define FT_ATOMIC_STORE_ULONG_RELAXED(value, new_value) value = new_value
  ------------------
  289|      0|            WARN("Writing negative value into unsigned field");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  290|      0|        }
  291|      0|        else {
  292|      0|            unsigned long ulong_val = PyLong_AsUnsignedLong(v);
  293|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|      0|            if (ulong_val == (unsigned long)-1 && PyErr_Occurred()) {
  ------------------
  |  Branch (294:17): [True: 0, False: 0]
  |  Branch (294:51): [True: 0, False: 0]
  ------------------
  295|      0|                return -1;
  296|      0|            }
  297|      0|            FT_ATOMIC_STORE_ULONG_RELAXED(*(unsigned long *)addr, ulong_val);
  ------------------
  |  |  193|      0|#define FT_ATOMIC_STORE_ULONG_RELAXED(value, new_value) value = new_value
  ------------------
  298|      0|        }
  299|      0|        break;
  300|      0|    }
  301|      0|    case Py_T_PYSSIZET: {
  ------------------
  |  |   79|      0|#define Py_T_PYSSIZET  19      /* Py_ssize_t */
  ------------------
  |  Branch (301:5): [True: 0, False: 2.71k]
  ------------------
  302|      0|        const Py_ssize_t ssize_val = PyLong_AsSsize_t(v);
  303|      0|        if ((ssize_val == (Py_ssize_t)-1) && PyErr_Occurred())
  ------------------
  |  Branch (303:13): [True: 0, False: 0]
  |  Branch (303:46): [True: 0, False: 0]
  ------------------
  304|      0|            return -1;
  305|      0|        FT_ATOMIC_STORE_SSIZE_RELAXED(*(Py_ssize_t*)addr, ssize_val);
  ------------------
  |  |  194|      0|#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
  ------------------
  306|      0|        break;
  307|      0|    }
  308|      0|    case Py_T_FLOAT:{
  ------------------
  |  |   56|      0|#define Py_T_FLOAT     3
  ------------------
  |  Branch (308:5): [True: 0, False: 2.71k]
  ------------------
  309|      0|        double double_val = PyFloat_AsDouble(v);
  310|      0|        if ((double_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (310:13): [True: 0, False: 0]
  |  Branch (310:35): [True: 0, False: 0]
  ------------------
  311|      0|            return -1;
  312|      0|        FT_ATOMIC_STORE_FLOAT_RELAXED(*(float*)addr, (float)double_val);
  ------------------
  |  |  196|      0|#define FT_ATOMIC_STORE_FLOAT_RELAXED(value, new_value) value = new_value
  ------------------
  313|      0|        break;
  314|      0|        }
  315|      0|    case Py_T_DOUBLE: {
  ------------------
  |  |   57|      0|#define Py_T_DOUBLE    4
  ------------------
  |  Branch (315:5): [True: 0, False: 2.71k]
  ------------------
  316|      0|        const double double_val = PyFloat_AsDouble(v);
  317|      0|        if ((double_val == -1) && PyErr_Occurred())
  ------------------
  |  Branch (317:13): [True: 0, False: 0]
  |  Branch (317:35): [True: 0, False: 0]
  ------------------
  318|      0|            return -1;
  319|      0|        FT_ATOMIC_STORE_DOUBLE_RELAXED(*(double *) addr, double_val);
  ------------------
  |  |  198|      0|#define FT_ATOMIC_STORE_DOUBLE_RELAXED(value, new_value) value = new_value
  ------------------
  320|      0|        break;
  321|      0|    }
  322|  2.68k|    case _Py_T_OBJECT:
  ------------------
  |  |   59|  2.68k|#define _Py_T_OBJECT   6  // Deprecated, use Py_T_OBJECT_EX instead
  ------------------
  |  Branch (322:5): [True: 2.68k, False: 24]
  ------------------
  323|  2.71k|    case Py_T_OBJECT_EX:
  ------------------
  |  |   75|  2.71k|#define Py_T_OBJECT_EX 16
  ------------------
  |  Branch (323:5): [True: 24, False: 2.68k]
  ------------------
  324|  2.71k|        Py_BEGIN_CRITICAL_SECTION(obj);
  ------------------
  |  |   51|  2.71k|    {
  ------------------
  325|  2.71k|        oldv = *(PyObject **)addr;
  326|  2.71k|        FT_ATOMIC_STORE_PTR_RELEASE(*(PyObject **)addr, Py_XNewRef(v));
  ------------------
  |  |  164|  2.71k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  327|  2.71k|        Py_END_CRITICAL_SECTION();
  ------------------
  |  |   55|  2.71k|    }
  ------------------
  328|  2.71k|        if (v == NULL && oldv == NULL && l->type == Py_T_OBJECT_EX) {
  ------------------
  |  |   75|      0|#define Py_T_OBJECT_EX 16
  ------------------
  |  Branch (328:13): [True: 0, False: 2.71k]
  |  Branch (328:26): [True: 0, False: 0]
  |  Branch (328:42): [True: 0, False: 0]
  ------------------
  329|       |            // Raise an exception when attempting to delete an already deleted
  330|       |            // attribute.
  331|       |            // Differently from Py_T_OBJECT_EX, _Py_T_OBJECT does not raise an
  332|       |            // exception here (PyMember_GetOne will return Py_None instead of
  333|       |            // NULL).
  334|      0|            PyErr_SetString(PyExc_AttributeError, l->name);
  335|      0|            return -1;
  336|      0|        }
  337|  2.71k|        Py_XDECREF(oldv);
  ------------------
  |  |  524|  2.71k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|  2.71k|        break;
  339|      0|    case Py_T_CHAR: {
  ------------------
  |  |   61|      0|#define Py_T_CHAR      7   /* 1-character string */
  ------------------
  |  Branch (339:5): [True: 0, False: 2.71k]
  ------------------
  340|      0|        const char *string;
  341|      0|        Py_ssize_t len;
  342|       |
  343|      0|        string = PyUnicode_AsUTF8AndSize(v, &len);
  344|      0|        if (string == NULL || len != 1) {
  ------------------
  |  Branch (344:13): [True: 0, False: 0]
  |  Branch (344:31): [True: 0, False: 0]
  ------------------
  345|      0|            PyErr_BadArgument();
  346|      0|            return -1;
  347|      0|        }
  348|      0|        FT_ATOMIC_STORE_CHAR_RELAXED(*(char*)addr, string[0]);
  ------------------
  |  |  177|      0|#define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value
  ------------------
  349|      0|        break;
  350|      0|        }
  351|      0|    case Py_T_STRING:
  ------------------
  |  |   58|      0|#define Py_T_STRING    5
  ------------------
  |  Branch (351:5): [True: 0, False: 2.71k]
  ------------------
  352|      0|    case Py_T_STRING_INPLACE:
  ------------------
  |  |   70|      0|#define Py_T_STRING_INPLACE    13
  ------------------
  |  Branch (352:5): [True: 0, False: 2.71k]
  ------------------
  353|      0|        PyErr_SetString(PyExc_TypeError, "readonly attribute");
  354|      0|        return -1;
  355|      0|    case Py_T_LONGLONG:{
  ------------------
  |  |   76|      0|#define Py_T_LONGLONG  17
  ------------------
  |  Branch (355:5): [True: 0, False: 2.71k]
  ------------------
  356|      0|        long long value = PyLong_AsLongLong(v);
  357|      0|        if ((value == -1) && PyErr_Occurred())
  ------------------
  |  Branch (357:13): [True: 0, False: 0]
  |  Branch (357:30): [True: 0, False: 0]
  ------------------
  358|      0|            return -1;
  359|      0|        FT_ATOMIC_STORE_LLONG_RELAXED(*(long long*)addr, value);
  ------------------
  |  |  200|      0|#define FT_ATOMIC_STORE_LLONG_RELAXED(value, new_value) value = new_value
  ------------------
  360|      0|        break;
  361|      0|        }
  362|      0|    case Py_T_ULONGLONG: {
  ------------------
  |  |   77|      0|#define Py_T_ULONGLONG 18
  ------------------
  |  Branch (362:5): [True: 0, False: 2.71k]
  ------------------
  363|      0|        v = _PyNumber_Index(v);
  364|      0|        if (v == NULL) {
  ------------------
  |  Branch (364:13): [True: 0, False: 0]
  ------------------
  365|      0|            return -1;
  366|      0|        }
  367|      0|        if (_PyLong_IsNegative((PyLongObject *)v)) {
  ------------------
  |  Branch (367:13): [True: 0, False: 0]
  ------------------
  368|      0|            long long_val = PyLong_AsLong(v);
  369|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  370|      0|            if (long_val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (370:17): [True: 0, False: 0]
  |  Branch (370:35): [True: 0, False: 0]
  ------------------
  371|      0|                return -1;
  372|      0|            }
  373|      0|            FT_ATOMIC_STORE_ULLONG_RELAXED(*(unsigned long long *)addr, (unsigned long long)(long long)long_val);
  ------------------
  |  |  202|      0|#define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) value = new_value
  ------------------
  374|      0|            WARN("Writing negative value into unsigned field");
  ------------------
  |  |  150|      0|    do {                                                        \
  |  |  151|      0|    if (PyErr_WarnEx(PyExc_RuntimeWarning, msg, 1) < 0)         \
  |  |  ------------------
  |  |  |  Branch (151:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  152|      0|        return -1;                                              \
  |  |  153|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (153:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  375|      0|        }
  376|      0|        else {
  377|      0|            unsigned long long ulonglong_val = PyLong_AsUnsignedLongLong(v);
  378|      0|            Py_DECREF(v);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|      0|            if (ulonglong_val == (unsigned long long)-1 && PyErr_Occurred()) {
  ------------------
  |  Branch (379:17): [True: 0, False: 0]
  |  Branch (379:60): [True: 0, False: 0]
  ------------------
  380|      0|                return -1;
  381|      0|            }
  382|      0|            FT_ATOMIC_STORE_ULLONG_RELAXED(*(unsigned long long *)addr, ulonglong_val);
  ------------------
  |  |  202|      0|#define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) value = new_value
  ------------------
  383|      0|        }
  384|      0|        break;
  385|      0|    }
  386|      0|    default:
  ------------------
  |  Branch (386:5): [True: 0, False: 2.71k]
  ------------------
  387|      0|        PyErr_Format(PyExc_SystemError,
  388|      0|                     "bad memberdescr type for %s", l->name);
  389|      0|        return -1;
  390|  2.71k|    }
  391|  2.71k|    return 0;
  392|  2.71k|}
structmember.c:member_get_object:
   14|     18|{
   15|     18|    PyObject *v = FT_ATOMIC_LOAD_PTR(*(PyObject **) addr);
  ------------------
  |  |  145|     18|#define FT_ATOMIC_LOAD_PTR(value) value
  ------------------
   16|     18|    if (v == NULL) {
  ------------------
  |  Branch (16:9): [True: 0, False: 18]
  ------------------
   17|      0|        PyErr_Format(PyExc_AttributeError,
   18|      0|                     "'%T' object has no attribute '%s'",
   19|      0|                     (PyObject *)obj_addr, l->name);
   20|      0|    }
   21|     18|    return v;
   22|     18|}

_Py_CalculateSuggestions:
  130|     15|{
  131|     15|    assert(!PyErr_Occurred());
  ------------------
  |  Branch (131:5): [True: 15, False: 0]
  ------------------
  132|     15|    assert(PyList_CheckExact(dir));
  ------------------
  |  Branch (132:5): [True: 15, False: 0]
  ------------------
  133|       |
  134|     15|    Py_ssize_t dir_size = PyList_GET_SIZE(dir);
  ------------------
  |  |   38|     15|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|     15|    if (dir_size >= MAX_CANDIDATE_ITEMS) {
  ------------------
  |  |    8|     15|#define MAX_CANDIDATE_ITEMS 750
  ------------------
  |  Branch (135:9): [True: 0, False: 15]
  ------------------
  136|      0|        return NULL;
  137|      0|    }
  138|       |
  139|     15|    Py_ssize_t suggestion_distance = PY_SSIZE_T_MAX;
  ------------------
  |  |  137|     15|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  140|     15|    PyObject *suggestion = NULL;
  141|     15|    Py_ssize_t name_size;
  142|     15|    const char *name_str = PyUnicode_AsUTF8AndSize(name, &name_size);
  143|     15|    if (name_str == NULL) {
  ------------------
  |  Branch (143:9): [True: 0, False: 15]
  ------------------
  144|      0|        return NULL;
  145|      0|    }
  146|     15|    size_t *buffer = PyMem_New(size_t, MAX_STRING_SIZE);
  ------------------
  |  |   64|     15|  ( ((size_t)(n) > PY_SSIZE_T_MAX / sizeof(type)) ? NULL :      \
  |  |  ------------------
  |  |  |  |  137|     15|#   define PY_SSIZE_T_MAX SSIZE_MAX
  |  |  ------------------
  |  |  |  Branch (64:5): [Folded, False: 15]
  |  |  ------------------
  |  |   65|     15|        ( (type *) PyMem_Malloc((n) * sizeof(type)) ) )
  ------------------
  147|     15|    if (buffer == NULL) {
  ------------------
  |  Branch (147:9): [True: 0, False: 15]
  ------------------
  148|      0|        return PyErr_NoMemory();
  149|      0|    }
  150|    165|    for (Py_ssize_t i = 0; i < dir_size; ++i) {
  ------------------
  |  Branch (150:28): [True: 150, False: 15]
  ------------------
  151|    150|        PyObject *item = PyList_GET_ITEM(dir, i);
  ------------------
  |  |   40|    150|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|    150|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    150|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (151:26): [True: 150, False: 0]
  ------------------
  152|    150|        if (_PyUnicode_Equal(name, item)) {
  ------------------
  |  Branch (152:13): [True: 0, False: 150]
  ------------------
  153|      0|            continue;
  154|      0|        }
  155|    150|        Py_ssize_t item_size;
  156|    150|        const char *item_str = PyUnicode_AsUTF8AndSize(item, &item_size);
  157|    150|        if (item_str == NULL) {
  ------------------
  |  Branch (157:13): [True: 0, False: 150]
  ------------------
  158|      0|            PyMem_Free(buffer);
  159|      0|            return NULL;
  160|      0|        }
  161|       |        // No more than 1/3 of the involved characters should need changed.
  162|    150|        Py_ssize_t max_distance = (name_size + item_size + 3) * MOVE_COST / 6;
  ------------------
  |  |   11|    150|#define MOVE_COST 2
  ------------------
  163|       |        // Don't take matches we've already beaten.
  164|    150|        max_distance = Py_MIN(max_distance, suggestion_distance - 1);
  ------------------
  |  |  120|    150|       __extension__ \
  |  |  121|    150|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|    150|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|    150|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|    150|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|    150|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 150, False: 0]
  |  |  ------------------
  ------------------
  165|    150|        Py_ssize_t current_distance =
  166|    150|            levenshtein_distance(name_str, name_size, item_str,
  167|    150|                                 item_size, max_distance, buffer);
  168|    150|        if (current_distance > max_distance) {
  ------------------
  |  Branch (168:13): [True: 146, False: 4]
  ------------------
  169|    146|            continue;
  170|    146|        }
  171|      4|        if (!suggestion || current_distance < suggestion_distance) {
  ------------------
  |  Branch (171:13): [True: 4, False: 0]
  |  Branch (171:28): [True: 0, False: 0]
  ------------------
  172|      4|            suggestion = item;
  173|      4|            suggestion_distance = current_distance;
  174|      4|        }
  175|      4|    }
  176|     15|    PyMem_Free(buffer);
  177|     15|    return Py_XNewRef(suggestion);
  ------------------
  |  |  551|     15|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     15|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     15|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|     15|}
suggestions.c:levenshtein_distance:
   43|    150|{
   44|       |    // Both strings are the same (by identity)
   45|    150|    if (a == b) {
  ------------------
  |  Branch (45:9): [True: 0, False: 150]
  ------------------
   46|      0|        return 0;
   47|      0|    }
   48|       |
   49|       |    // Trim away common affixes.
   50|    222|    while (a_size && b_size && a[0] == b[0]) {
  ------------------
  |  Branch (50:12): [True: 219, False: 3]
  |  Branch (50:22): [True: 218, False: 1]
  |  Branch (50:32): [True: 72, False: 146]
  ------------------
   51|     72|        a++; a_size--;
   52|     72|        b++; b_size--;
   53|     72|    }
   54|    207|    while (a_size && b_size && a[a_size-1] == b[b_size-1]) {
  ------------------
  |  Branch (54:12): [True: 204, False: 3]
  |  Branch (54:22): [True: 200, False: 4]
  |  Branch (54:32): [True: 57, False: 143]
  ------------------
   55|     57|        a_size--;
   56|     57|        b_size--;
   57|     57|    }
   58|    150|    if (a_size == 0 || b_size == 0) {
  ------------------
  |  Branch (58:9): [True: 3, False: 147]
  |  Branch (58:24): [True: 4, False: 143]
  ------------------
   59|      7|        return (a_size + b_size) * MOVE_COST;
  ------------------
  |  |   11|      7|#define MOVE_COST 2
  ------------------
   60|      7|    }
   61|    143|    if (a_size > MAX_STRING_SIZE || b_size > MAX_STRING_SIZE) {
  ------------------
  |  |    9|    286|#define MAX_STRING_SIZE 40
  ------------------
                  if (a_size > MAX_STRING_SIZE || b_size > MAX_STRING_SIZE) {
  ------------------
  |  |    9|    114|#define MAX_STRING_SIZE 40
  ------------------
  |  Branch (61:9): [True: 29, False: 114]
  |  Branch (61:37): [True: 0, False: 114]
  ------------------
   62|     29|        return max_cost + 1;
   63|     29|    }
   64|       |
   65|       |    // Prefer shorter buffer
   66|    114|    if (b_size < a_size) {
  ------------------
  |  Branch (66:9): [True: 27, False: 87]
  ------------------
   67|     27|        const char *t = a; a = b; b = t;
   68|     27|        size_t t_size = a_size; a_size = b_size; b_size = t_size;
   69|     27|    }
   70|       |
   71|       |    // quick fail when a match is impossible.
   72|    114|    if ((b_size - a_size) * MOVE_COST > max_cost) {
  ------------------
  |  |   11|    114|#define MOVE_COST 2
  ------------------
  |  Branch (72:9): [True: 70, False: 44]
  ------------------
   73|     70|        return max_cost + 1;
   74|     70|    }
   75|       |
   76|       |    // Instead of producing the whole traditional len(a)-by-len(b)
   77|       |    // matrix, we can update just one row in place.
   78|       |    // Initialize the buffer row
   79|     44|    size_t tmp = MOVE_COST;
  ------------------
  |  |   11|     44|#define MOVE_COST 2
  ------------------
   80|    483|    for (size_t i = 0; i < a_size; i++) {
  ------------------
  |  Branch (80:24): [True: 439, False: 44]
  ------------------
   81|       |        // cost from b[:0] to a[:i+1]
   82|    439|        buffer[i] = tmp;
   83|    439|        tmp += MOVE_COST;
  ------------------
  |  |   11|    439|#define MOVE_COST 2
  ------------------
   84|    439|    }
   85|       |
   86|     44|    size_t result = 0;
   87|    260|    for (size_t b_index = 0; b_index < b_size; b_index++) {
  ------------------
  |  Branch (87:30): [True: 258, False: 2]
  ------------------
   88|    258|        char code = b[b_index];
   89|       |        // cost(b[:b_index], a[:0]) == b_index * MOVE_COST
   90|    258|        size_t distance = result = b_index * MOVE_COST;
  ------------------
  |  |   11|    258|#define MOVE_COST 2
  ------------------
   91|    258|        size_t minimum = SIZE_MAX;
   92|  2.97k|        for (size_t index = 0; index < a_size; index++) {
  ------------------
  |  Branch (92:32): [True: 2.71k, False: 258]
  ------------------
   93|       |
   94|       |            // cost(b[:b_index+1], a[:index+1]) = min(
   95|       |            //     // 1) substitute
   96|       |            //     cost(b[:b_index], a[:index])
   97|       |            //         + substitution_cost(b[b_index], a[index]),
   98|       |            //     // 2) delete from b
   99|       |            //     cost(b[:b_index], a[:index+1]) + MOVE_COST,
  100|       |            //     // 3) delete from a
  101|       |            //     cost(b[:b_index+1], a[index]) + MOVE_COST
  102|       |            // )
  103|       |
  104|       |            // 1) Previous distance in this row is cost(b[:b_index], a[:index])
  105|  2.71k|            size_t substitute = distance + substitution_cost(code, a[index]);
  106|       |            // 2) cost(b[:b_index], a[:index+1]) from previous row
  107|  2.71k|            distance = buffer[index];
  108|       |            // 3) existing result is cost(b[:b_index+1], a[index])
  109|       |
  110|  2.71k|            size_t insert_delete = Py_MIN(result, distance) + MOVE_COST;
  ------------------
  |  |  120|  2.71k|       __extension__ \
  |  |  121|  2.71k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  2.71k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  2.71k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  2.71k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  2.71k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 1.67k, False: 1.03k]
  |  |  ------------------
  ------------------
                          size_t insert_delete = Py_MIN(result, distance) + MOVE_COST;
  ------------------
  |  |   11|  2.71k|#define MOVE_COST 2
  ------------------
  111|  2.71k|            result = Py_MIN(insert_delete, substitute);
  ------------------
  |  |  120|  2.71k|       __extension__ \
  |  |  121|  2.71k|       ({ _Py_TYPEOF (x) _x = (x); \
  |  |  ------------------
  |  |  |  |  552|  2.71k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  122|  2.71k|          _Py_TYPEOF (y) _y = (y); \
  |  |  ------------------
  |  |  |  |  552|  2.71k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  123|  2.71k|          _x < _y ? _x : _y; })
  |  |  ------------------
  |  |  |  Branch (123:11): [True: 477, False: 2.23k]
  |  |  ------------------
  ------------------
  112|       |
  113|       |            // cost(b[:b_index+1], a[:index+1])
  114|  2.71k|            buffer[index] = result;
  115|  2.71k|            if (result < minimum) {
  ------------------
  |  Branch (115:17): [True: 393, False: 2.32k]
  ------------------
  116|    393|                minimum = result;
  117|    393|            }
  118|  2.71k|        }
  119|    258|        if (minimum > max_cost) {
  ------------------
  |  Branch (119:13): [True: 42, False: 216]
  ------------------
  120|       |            // Everything in this row is too big, so bail early.
  121|     42|            return max_cost + 1;
  122|     42|        }
  123|    258|    }
  124|      2|    return result;
  125|     44|}
suggestions.c:substitution_cost:
   18|  2.71k|{
   19|  2.71k|    if (LEAST_FIVE_BITS(a) != LEAST_FIVE_BITS(b)) {
  ------------------
  |  |   14|  2.71k|#define LEAST_FIVE_BITS(n) ((n) & 31)
  ------------------
                  if (LEAST_FIVE_BITS(a) != LEAST_FIVE_BITS(b)) {
  ------------------
  |  |   14|  2.71k|#define LEAST_FIVE_BITS(n) ((n) & 31)
  ------------------
  |  Branch (19:9): [True: 2.52k, False: 191]
  ------------------
   20|       |        // Not the same, not a case flip.
   21|  2.52k|        return MOVE_COST;
  ------------------
  |  |   11|  2.52k|#define MOVE_COST 2
  ------------------
   22|  2.52k|    }
   23|    191|    if (a == b) {
  ------------------
  |  Branch (23:9): [True: 182, False: 9]
  ------------------
   24|    182|        return 0;
   25|    182|    }
   26|      9|    if ('A' <= a && a <= 'Z') {
  ------------------
  |  Branch (26:9): [True: 9, False: 0]
  |  Branch (26:21): [True: 0, False: 9]
  ------------------
   27|      0|        a += ('a' - 'A');
   28|      0|    }
   29|      9|    if ('A' <= b && b <= 'Z') {
  ------------------
  |  Branch (29:9): [True: 0, False: 9]
  |  Branch (29:21): [True: 0, False: 0]
  ------------------
   30|      0|        b += ('a' - 'A');
   31|      0|    }
   32|      9|    if (a == b) {
  ------------------
  |  Branch (32:9): [True: 0, False: 9]
  ------------------
   33|      0|        return CASE_COST;
  ------------------
  |  |   12|      0|#define CASE_COST 1
  ------------------
   34|      0|    }
   35|      9|    return MOVE_COST;
  ------------------
  |  |   11|      9|#define MOVE_COST 2
  ------------------
   36|      9|}

_PySymtable_Build:
  424|  10.8k|{
  425|  10.8k|    struct symtable *st = symtable_new();
  426|  10.8k|    asdl_stmt_seq *seq;
  427|  10.8k|    Py_ssize_t i;
  428|  10.8k|    PyThreadState *tstate;
  429|       |
  430|  10.8k|    if (st == NULL)
  ------------------
  |  Branch (430:9): [True: 0, False: 10.8k]
  ------------------
  431|      0|        return NULL;
  432|  10.8k|    if (filename == NULL) {
  ------------------
  |  Branch (432:9): [True: 0, False: 10.8k]
  ------------------
  433|      0|        _PySymtable_Free(st);
  434|      0|        return NULL;
  435|      0|    }
  436|  10.8k|    st->st_filename = Py_NewRef(filename);
  ------------------
  |  |  550|  10.8k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|  10.8k|    st->st_future = future;
  438|       |
  439|       |    /* Setup recursion depth check counters */
  440|  10.8k|    tstate = _PyThreadState_GET();
  441|  10.8k|    if (!tstate) {
  ------------------
  |  Branch (441:9): [True: 0, False: 10.8k]
  ------------------
  442|      0|        _PySymtable_Free(st);
  443|      0|        return NULL;
  444|      0|    }
  445|       |
  446|       |    /* Make the initial symbol information gathering pass */
  447|       |
  448|  10.8k|    _Py_SourceLocation loc0 = {0, 0, 0, 0};
  449|  10.8k|    if (!symtable_enter_block(st, &_Py_ID(top), ModuleBlock, (void *)mod, loc0)) {
  ------------------
  |  |  936|  10.8k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  10.8k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  10.8k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (449:9): [True: 0, False: 10.8k]
  ------------------
  450|      0|        _PySymtable_Free(st);
  451|      0|        return NULL;
  452|      0|    }
  453|       |
  454|  10.8k|    st->st_top = st->st_cur;
  455|  10.8k|    switch (mod->kind) {
  ------------------
  |  Branch (455:13): [True: 10.8k, False: 0]
  ------------------
  456|  7.45k|    case Module_kind:
  ------------------
  |  Branch (456:5): [True: 7.45k, False: 3.37k]
  ------------------
  457|  7.45k|        seq = mod->v.Module.body;
  458|  7.45k|        if (_PyAST_GetDocString(seq)) {
  ------------------
  |  Branch (458:13): [True: 164, False: 7.29k]
  ------------------
  459|    164|            st->st_cur->ste_has_docstring = 1;
  460|    164|        }
  461|  77.2k|        for (i = 0; i < asdl_seq_LEN(seq); i++)
  ------------------
  |  |   83|  77.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|   154k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 108, False: 77.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (461:21): [True: 69.9k, False: 7.28k]
  ------------------
  462|  69.9k|            if (!symtable_visit_stmt(st,
  ------------------
  |  Branch (462:17): [True: 165, False: 69.7k]
  ------------------
  463|  69.9k|                        (stmt_ty)asdl_seq_GET(seq, i)))
  ------------------
  |  |   82|  69.9k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  69.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  464|    165|                goto error;
  465|  7.28k|        break;
  466|  7.28k|    case Expression_kind:
  ------------------
  |  Branch (466:5): [True: 1.52k, False: 9.30k]
  ------------------
  467|  1.52k|        if (!symtable_visit_expr(st, mod->v.Expression.body))
  ------------------
  |  Branch (467:13): [True: 20, False: 1.50k]
  ------------------
  468|     20|            goto error;
  469|  1.50k|        break;
  470|  1.85k|    case Interactive_kind:
  ------------------
  |  Branch (470:5): [True: 1.85k, False: 8.97k]
  ------------------
  471|  1.85k|        seq = mod->v.Interactive.body;
  472|  6.23k|        for (i = 0; i < asdl_seq_LEN(seq); i++)
  ------------------
  |  |   83|  6.23k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  12.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (472:21): [True: 4.42k, False: 1.81k]
  ------------------
  473|  4.42k|            if (!symtable_visit_stmt(st,
  ------------------
  |  Branch (473:17): [True: 41, False: 4.38k]
  ------------------
  474|  4.42k|                        (stmt_ty)asdl_seq_GET(seq, i)))
  ------------------
  |  |   82|  4.42k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  4.42k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  475|     41|                goto error;
  476|  1.81k|        break;
  477|  1.81k|    case FunctionType_kind:
  ------------------
  |  Branch (477:5): [True: 0, False: 10.8k]
  ------------------
  478|      0|        PyErr_SetString(PyExc_RuntimeError,
  479|      0|                        "this compiler does not handle FunctionTypes");
  480|      0|        goto error;
  481|  10.8k|    }
  482|  10.6k|    if (!symtable_exit_block(st)) {
  ------------------
  |  Branch (482:9): [True: 0, False: 10.6k]
  ------------------
  483|      0|        _PySymtable_Free(st);
  484|      0|        return NULL;
  485|      0|    }
  486|       |    /* Make the second symbol analysis pass */
  487|  10.6k|    if (symtable_analyze(st)) {
  ------------------
  |  Branch (487:9): [True: 10.5k, False: 28]
  ------------------
  488|       |#if _PY_DUMP_SYMTABLE
  489|       |        dump_symtable(st->st_top);
  490|       |#endif
  491|  10.5k|        return st;
  492|  10.5k|    }
  493|     28|    _PySymtable_Free(st);
  494|     28|    return NULL;
  495|    226| error:
  496|    226|    (void) symtable_exit_block(st);
  497|    226|    _PySymtable_Free(st);
  498|       |    return NULL;
  499|  10.6k|}
_PySymtable_Free:
  504|  10.8k|{
  505|  10.8k|    Py_XDECREF(st->st_filename);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|  10.8k|    Py_XDECREF(st->st_blocks);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|  10.8k|    Py_XDECREF(st->st_stack);
  ------------------
  |  |  524|  10.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  508|  10.8k|    PyMem_Free((void *)st);
  509|  10.8k|}
_PySymtable_Lookup:
  513|  56.1k|{
  514|  56.1k|    PyObject *k, *v;
  515|       |
  516|  56.1k|    k = PyLong_FromVoidPtr(key);
  517|  56.1k|    if (k == NULL)
  ------------------
  |  Branch (517:9): [True: 0, False: 56.1k]
  ------------------
  518|      0|        return NULL;
  519|  56.1k|    if (PyDict_GetItemRef(st->st_blocks, k, &v) == 0) {
  ------------------
  |  Branch (519:9): [True: 0, False: 56.1k]
  ------------------
  520|      0|        PyErr_SetString(PyExc_KeyError,
  521|      0|                        "unknown symbol table entry");
  522|      0|    }
  523|  56.1k|    Py_DECREF(k);
  ------------------
  |  |  430|  56.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  56.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  56.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|       |
  525|  56.1k|    assert(v == NULL || PySTEntry_Check(v));
  ------------------
  |  Branch (525:5): [True: 0, False: 56.1k]
  |  Branch (525:5): [True: 56.1k, False: 0]
  ------------------
  526|  56.1k|    return (PySTEntryObject *)v;
  527|  56.1k|}
_PySymtable_LookupOptional:
  532|  7.42k|{
  533|  7.42k|    PyObject *k = PyLong_FromVoidPtr(key);
  534|  7.42k|    if (k == NULL) {
  ------------------
  |  Branch (534:9): [True: 0, False: 7.42k]
  ------------------
  535|      0|        *out = NULL;
  536|      0|        return -1;
  537|      0|    }
  538|  7.42k|    int result = PyDict_GetItemRef(st->st_blocks, k, (PyObject **)out);
  539|  7.42k|    Py_DECREF(k);
  ------------------
  |  |  430|  7.42k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  7.42k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  7.42k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  540|  7.42k|    assert(*out == NULL || PySTEntry_Check(*out));
  ------------------
  |  Branch (540:5): [True: 0, False: 7.42k]
  |  Branch (540:5): [True: 7.42k, False: 0]
  ------------------
  541|  7.42k|    return result;
  542|  7.42k|}
_PyST_GetSymbol:
  546|   575k|{
  547|   575k|    PyObject *v;
  548|   575k|    if (PyDict_GetItemRef(ste->ste_symbols, name, &v) < 0) {
  ------------------
  |  Branch (548:9): [True: 0, False: 575k]
  ------------------
  549|      0|        return -1;
  550|      0|    }
  551|   575k|    if (v == NULL) {
  ------------------
  |  Branch (551:9): [True: 111k, False: 464k]
  ------------------
  552|   111k|        return 0;
  553|   111k|    }
  554|   464k|    long symbol = PyLong_AsLong(v);
  555|   464k|    Py_DECREF(v);
  ------------------
  |  |  430|   464k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   464k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   464k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|   464k|    if (symbol < 0) {
  ------------------
  |  Branch (556:9): [True: 0, False: 464k]
  ------------------
  557|      0|        if (!PyErr_Occurred()) {
  ------------------
  |  Branch (557:13): [True: 0, False: 0]
  ------------------
  558|      0|            PyErr_SetString(PyExc_SystemError, "invalid symbol");
  559|      0|        }
  560|      0|        return -1;
  561|      0|    }
  562|   464k|    return symbol;
  563|   464k|}
_PyST_GetScope:
  567|   534k|{
  568|   534k|    long symbol = _PyST_GetSymbol(ste, name);
  569|   534k|    if (symbol < 0) {
  ------------------
  |  Branch (569:9): [True: 0, False: 534k]
  ------------------
  570|      0|        return -1;
  571|      0|    }
  572|   534k|    return SYMBOL_TO_SCOPE(symbol);
  ------------------
  |  |  189|   534k|#define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  187|   534k|#define SCOPE_OFFSET 12
  |  |  ------------------
  |  |               #define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  188|   534k|#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|   534k|#define DEF_GLOBAL 1             /* global stmt */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   534k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|   534k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  173|   534k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|   534k|}
_PyST_IsFunctionLike:
  577|   904k|{
  578|   904k|    return ste->ste_type == FunctionBlock
  ------------------
  |  Branch (578:12): [True: 291k, False: 613k]
  ------------------
  579|   613k|        || ste->ste_type == AnnotationBlock
  ------------------
  |  Branch (579:12): [True: 89.7k, False: 524k]
  ------------------
  580|   524k|        || ste->ste_type == TypeVariableBlock
  ------------------
  |  Branch (580:12): [True: 9.30k, False: 514k]
  ------------------
  581|   514k|        || ste->ste_type == TypeAliasBlock
  ------------------
  |  Branch (581:12): [True: 1.92k, False: 512k]
  ------------------
  582|   512k|        || ste->ste_type == TypeParametersBlock;
  ------------------
  |  Branch (582:12): [True: 34.7k, False: 478k]
  ------------------
  583|   904k|}
_PyST_IsClassClosureName:
  587|  6.95k|{
  588|  6.95k|    return _PyUnicode_EqualToASCIIString(name, "__class__")
  ------------------
  |  Branch (588:12): [True: 25, False: 6.92k]
  ------------------
  589|  6.92k|        || _PyUnicode_EqualToASCIIString(name, "__classdict__")
  ------------------
  |  Branch (589:12): [True: 6.06k, False: 866]
  ------------------
  590|    866|        || _PyUnicode_EqualToASCIIString(name, "__conditional_annotations__");
  ------------------
  |  Branch (590:12): [True: 865, False: 1]
  ------------------
  591|  6.95k|}
_Py_MaybeMangle:
 3292|  1.17M|{
 3293|       |    /* Special case for type parameter blocks around generic classes:
 3294|       |     * we want to mangle type parameter names (so a type param with a private
 3295|       |     * name can be used inside the class body), but we don't want to mangle
 3296|       |     * any other names that appear within the type parameter scope.
 3297|       |     */
 3298|  1.17M|    if (ste->ste_mangled_names != NULL) {
  ------------------
  |  Branch (3298:9): [True: 25.7k, False: 1.14M]
  ------------------
 3299|  25.7k|        int result = PySet_Contains(ste->ste_mangled_names, name);
 3300|  25.7k|        if (result < 0) {
  ------------------
  |  Branch (3300:13): [True: 0, False: 25.7k]
  ------------------
 3301|      0|            return NULL;
 3302|      0|        }
 3303|  25.7k|        if (result == 0) {
  ------------------
  |  Branch (3303:13): [True: 17.7k, False: 8.02k]
  ------------------
 3304|  17.7k|            return Py_NewRef(name);
  ------------------
  |  |  550|  17.7k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  17.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  17.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3305|  17.7k|        }
 3306|  25.7k|    }
 3307|  1.15M|    return _Py_Mangle(privateobj, name);
 3308|  1.17M|}
_Py_Mangle:
 3333|  1.17M|{
 3334|       |    /* Name mangling: __private becomes _classname__private.
 3335|       |       This is independent from how the name is used. */
 3336|  1.17M|    if (privateobj == NULL || !PyUnicode_Check(privateobj) ||
  ------------------
  |  |  103|   278k|    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_UNICODE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|  1.44M|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (3336:9): [True: 891k, False: 278k]
  |  Branch (3336:31): [True: 0, False: 278k]
  ------------------
 3337|   278k|        PyUnicode_READ_CHAR(ident, 0) != '_' ||
  ------------------
  |  |  381|   278k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|   278k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   278k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3337:9): [True: 119k, False: 159k]
  ------------------
 3338|  1.02M|        PyUnicode_READ_CHAR(ident, 1) != '_') {
  ------------------
  |  |  381|   159k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|   159k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   159k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3338:9): [True: 10.9k, False: 148k]
  ------------------
 3339|  1.02M|        return Py_NewRef(ident);
  ------------------
  |  |  550|  1.02M|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.02M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.02M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3340|  1.02M|    }
 3341|   148k|    size_t nlen = PyUnicode_GET_LENGTH(ident);
  ------------------
  |  |  299|   148k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   148k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   148k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3342|   148k|    size_t plen = PyUnicode_GET_LENGTH(privateobj);
  ------------------
  |  |  299|   148k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   148k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   148k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3343|       |    /* Don't mangle __id__ or names with dots.
 3344|       |
 3345|       |       The only time a name with a dot can occur is when
 3346|       |       we are compiling an import statement that has a
 3347|       |       package name.
 3348|       |
 3349|       |       TODO(jhylton): Decide whether we want to support
 3350|       |       mangling of the module name, e.g. __M.X.
 3351|       |    */
 3352|   148k|    if ((PyUnicode_READ_CHAR(ident, nlen-1) == '_' &&
  ------------------
  |  |  381|   148k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|   148k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   148k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3352:10): [True: 96.2k, False: 52.3k]
  ------------------
 3353|  96.2k|         PyUnicode_READ_CHAR(ident, nlen-2) == '_') ||
  ------------------
  |  |  381|  96.2k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|  96.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  96.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3353:10): [True: 95.7k, False: 533]
  ------------------
 3354|  95.7k|        PyUnicode_FindChar(ident, '.', 0, nlen, 1) != -1) {
  ------------------
  |  Branch (3354:9): [True: 6, False: 52.8k]
  ------------------
 3355|  95.7k|        return Py_NewRef(ident); /* Don't mangle __whatever__ */
  ------------------
  |  |  550|  95.7k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  95.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  95.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3356|  95.7k|    }
 3357|       |    /* Strip leading underscores from class name */
 3358|  52.8k|    size_t ipriv = 0;
 3359|   115k|    while (PyUnicode_READ_CHAR(privateobj, ipriv) == '_') {
  ------------------
  |  |  381|   115k|    PyUnicode_READ_CHAR(_PyObject_CAST(unicode), (index))
  |  |  ------------------
  |  |  |  |  171|   115k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   115k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3359:12): [True: 62.8k, False: 52.8k]
  ------------------
 3360|  62.8k|        ipriv++;
 3361|  62.8k|    }
 3362|  52.8k|    if (ipriv == plen) {
  ------------------
  |  Branch (3362:9): [True: 472, False: 52.3k]
  ------------------
 3363|    472|        return Py_NewRef(ident); /* Don't mangle if class is just underscores */
  ------------------
  |  |  550|    472|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|    472|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    472|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3364|    472|    }
 3365|       |
 3366|  52.3k|    if (nlen + (plen - ipriv) >= PY_SSIZE_T_MAX - 1) {
  ------------------
  |  |  137|  52.3k|#   define PY_SSIZE_T_MAX SSIZE_MAX
  ------------------
  |  Branch (3366:9): [True: 0, False: 52.3k]
  ------------------
 3367|      0|        PyErr_SetString(PyExc_OverflowError,
 3368|      0|                        "private identifier too large to be mangled");
 3369|      0|        return NULL;
 3370|      0|    }
 3371|       |
 3372|  52.3k|    PyUnicodeWriter *writer = PyUnicodeWriter_Create(1 + nlen + (plen - ipriv));
 3373|  52.3k|    if (!writer) {
  ------------------
  |  Branch (3373:9): [True: 0, False: 52.3k]
  ------------------
 3374|      0|        return NULL;
 3375|      0|    }
 3376|       |    // ident = "_" + priv[ipriv:] + ident
 3377|  52.3k|    if (PyUnicodeWriter_WriteChar(writer, '_') < 0) {
  ------------------
  |  Branch (3377:9): [True: 0, False: 52.3k]
  ------------------
 3378|      0|        goto error;
 3379|      0|    }
 3380|  52.3k|    if (PyUnicodeWriter_WriteSubstring(writer, privateobj, ipriv, plen) < 0) {
  ------------------
  |  Branch (3380:9): [True: 0, False: 52.3k]
  ------------------
 3381|      0|        goto error;
 3382|      0|    }
 3383|  52.3k|    if (PyUnicodeWriter_WriteStr(writer, ident) < 0) {
  ------------------
  |  Branch (3383:9): [True: 0, False: 52.3k]
  ------------------
 3384|      0|        goto error;
 3385|      0|    }
 3386|  52.3k|    return PyUnicodeWriter_Finish(writer);
 3387|       |
 3388|      0|error:
 3389|      0|    PyUnicodeWriter_Discard(writer);
 3390|       |    return NULL;
 3391|  52.3k|}
symtable.c:ste_dealloc:
  193|  63.2k|{
  194|  63.2k|    PySTEntryObject *ste = (PySTEntryObject *)op;
  195|  63.2k|    ste->ste_table = NULL;
  196|  63.2k|    Py_XDECREF(ste->ste_id);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|  63.2k|    Py_XDECREF(ste->ste_name);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|  63.2k|    Py_XDECREF(ste->ste_function_name);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|  63.2k|    Py_XDECREF(ste->ste_symbols);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|  63.2k|    Py_XDECREF(ste->ste_varnames);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|  63.2k|    Py_XDECREF(ste->ste_children);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  202|  63.2k|    Py_XDECREF(ste->ste_directives);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|  63.2k|    Py_XDECREF(ste->ste_annotation_block);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|  63.2k|    Py_XDECREF(ste->ste_mangled_names);
  ------------------
  |  |  524|  63.2k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|  63.2k|    PyObject_Free(ste);
  206|  63.2k|}
symtable.c:symtable_new:
  398|  10.8k|{
  399|  10.8k|    struct symtable *st;
  400|       |
  401|  10.8k|    st = (struct symtable *)PyMem_Malloc(sizeof(struct symtable));
  402|  10.8k|    if (st == NULL) {
  ------------------
  |  Branch (402:9): [True: 0, False: 10.8k]
  ------------------
  403|      0|        PyErr_NoMemory();
  404|      0|        return NULL;
  405|      0|    }
  406|       |
  407|  10.8k|    st->st_filename = NULL;
  408|  10.8k|    st->st_blocks = NULL;
  409|       |
  410|  10.8k|    if ((st->st_stack = PyList_New(0)) == NULL)
  ------------------
  |  Branch (410:9): [True: 0, False: 10.8k]
  ------------------
  411|      0|        goto fail;
  412|  10.8k|    if ((st->st_blocks = PyDict_New()) == NULL)
  ------------------
  |  Branch (412:9): [True: 0, False: 10.8k]
  ------------------
  413|      0|        goto fail;
  414|  10.8k|    st->st_cur = NULL;
  415|  10.8k|    st->st_private = NULL;
  416|  10.8k|    return st;
  417|      0| fail:
  418|      0|    _PySymtable_Free(st);
  419|       |    return NULL;
  420|  10.8k|}
symtable.c:symtable_analyze:
 1409|  10.6k|{
 1410|  10.6k|    PyObject *free, *global, *type_params;
 1411|  10.6k|    int r;
 1412|       |
 1413|  10.6k|    free = PySet_New(NULL);
 1414|  10.6k|    if (!free)
  ------------------
  |  Branch (1414:9): [True: 0, False: 10.6k]
  ------------------
 1415|      0|        return 0;
 1416|  10.6k|    global = PySet_New(NULL);
 1417|  10.6k|    if (!global) {
  ------------------
  |  Branch (1417:9): [True: 0, False: 10.6k]
  ------------------
 1418|      0|        Py_DECREF(free);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1419|      0|        return 0;
 1420|      0|    }
 1421|  10.6k|    type_params = PySet_New(NULL);
 1422|  10.6k|    if (!type_params) {
  ------------------
  |  Branch (1422:9): [True: 0, False: 10.6k]
  ------------------
 1423|      0|        Py_DECREF(free);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|      0|        Py_DECREF(global);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|      0|        return 0;
 1426|      0|    }
 1427|  10.6k|    r = analyze_block(st->st_top, NULL, free, global, type_params, NULL);
 1428|  10.6k|    Py_DECREF(free);
  ------------------
  |  |  430|  10.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|  10.6k|    Py_DECREF(global);
  ------------------
  |  |  430|  10.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1430|  10.6k|    Py_DECREF(type_params);
  ------------------
  |  |  430|  10.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  10.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1431|  10.6k|    return r;
 1432|  10.6k|}
symtable.c:analyze_block:
 1166|  54.8k|{
 1167|  54.8k|    PyObject *name, *v, *local = NULL, *scopes = NULL, *newbound = NULL;
 1168|  54.8k|    PyObject *newglobal = NULL, *newfree = NULL, *inlined_cells = NULL;
 1169|  54.8k|    PyObject *temp;
 1170|  54.8k|    int success = 0;
 1171|  54.8k|    Py_ssize_t i, pos = 0;
 1172|       |
 1173|  54.8k|    local = PySet_New(NULL);  /* collect new names bound in block */
 1174|  54.8k|    if (!local)
  ------------------
  |  Branch (1174:9): [True: 0, False: 54.8k]
  ------------------
 1175|      0|        goto error;
 1176|  54.8k|    scopes = PyDict_New();  /* collect scopes defined for each name */
 1177|  54.8k|    if (!scopes)
  ------------------
  |  Branch (1177:9): [True: 0, False: 54.8k]
  ------------------
 1178|      0|        goto error;
 1179|       |
 1180|       |    /* Allocate new global, bound and free variable sets.  These
 1181|       |       sets hold the names visible in nested blocks.  For
 1182|       |       ClassBlocks, the bound and global names are initialized
 1183|       |       before analyzing names, because class bindings aren't
 1184|       |       visible in methods.  For other blocks, they are initialized
 1185|       |       after this block's declarations are recorded.
 1186|       |     */
 1187|       |
 1188|       |    /* TODO(jhylton): Package these dicts in a struct so that we
 1189|       |       can write reasonable helper functions?
 1190|       |    */
 1191|  54.8k|    newglobal = PySet_New(NULL);
 1192|  54.8k|    if (!newglobal)
  ------------------
  |  Branch (1192:9): [True: 0, False: 54.8k]
  ------------------
 1193|      0|        goto error;
 1194|  54.8k|    newfree = PySet_New(NULL);
 1195|  54.8k|    if (!newfree)
  ------------------
  |  Branch (1195:9): [True: 0, False: 54.8k]
  ------------------
 1196|      0|        goto error;
 1197|  54.8k|    newbound = PySet_New(NULL);
 1198|  54.8k|    if (!newbound)
  ------------------
  |  Branch (1198:9): [True: 0, False: 54.8k]
  ------------------
 1199|      0|        goto error;
 1200|  54.8k|    inlined_cells = PySet_New(NULL);
 1201|  54.8k|    if (!inlined_cells)
  ------------------
  |  Branch (1201:9): [True: 0, False: 54.8k]
  ------------------
 1202|      0|        goto error;
 1203|       |    /* Class namespace has no effect on names visible in
 1204|       |       nested functions, so populate the global and bound
 1205|       |       sets to be passed to child blocks before analyzing
 1206|       |       this one.
 1207|       |     */
 1208|  54.8k|    if (ste->ste_type == ClassBlock) {
  ------------------
  |  Branch (1208:9): [True: 12.1k, False: 42.6k]
  ------------------
 1209|       |        /* Pass down known globals */
 1210|  12.1k|        temp = PyNumber_InPlaceOr(newglobal, global);
 1211|  12.1k|        if (!temp)
  ------------------
  |  Branch (1211:13): [True: 0, False: 12.1k]
  ------------------
 1212|      0|            goto error;
 1213|  12.1k|        Py_DECREF(temp);
  ------------------
  |  |  430|  12.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1214|       |        /* Pass down previously bound symbols */
 1215|  12.1k|        if (bound) {
  ------------------
  |  Branch (1215:13): [True: 12.1k, False: 0]
  ------------------
 1216|  12.1k|            temp = PyNumber_InPlaceOr(newbound, bound);
 1217|  12.1k|            if (!temp)
  ------------------
  |  Branch (1217:17): [True: 0, False: 12.1k]
  ------------------
 1218|      0|                goto error;
 1219|  12.1k|            Py_DECREF(temp);
  ------------------
  |  |  430|  12.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1220|  12.1k|        }
 1221|  12.1k|    }
 1222|       |
 1223|       |    /* Record bindings and global/nonlocal declarations first so child
 1224|       |       blocks see this scope's locals. Uses are classified after children
 1225|       |       so inlined comprehensions can add USE flags to this table. */
 1226|   286k|    while (PyDict_Next(ste->ste_symbols, &pos, &name, &v)) {
  ------------------
  |  Branch (1226:12): [True: 232k, False: 54.7k]
  ------------------
 1227|   232k|        long flags = PyLong_AsLong(v);
 1228|   232k|        if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1228:13): [True: 0, False: 232k]
  |  Branch (1228:28): [True: 0, False: 0]
  ------------------
 1229|      0|            goto error;
 1230|      0|        }
 1231|   232k|        if (!(flags & (DEF_GLOBAL | DEF_NONLOCAL | DEF_BOUND))) {
  ------------------
  |  |  170|   232k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                      if (!(flags & (DEF_GLOBAL | DEF_NONLOCAL | DEF_BOUND))) {
  ------------------
  |  |  173|   232k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
                      if (!(flags & (DEF_GLOBAL | DEF_NONLOCAL | DEF_BOUND))) {
  ------------------
  |  |  181|   232k|#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  171|   232k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  172|   232k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  176|   232k|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  |  |  ------------------
  ------------------
  |  Branch (1231:13): [True: 104k, False: 127k]
  ------------------
 1232|   104k|            continue;
 1233|   104k|        }
 1234|   127k|        if (!analyze_name(ste, scopes, name, flags,
  ------------------
  |  Branch (1234:13): [True: 28, False: 127k]
  ------------------
 1235|   127k|                          bound, local, free, global, type_params, class_entry))
 1236|     28|            goto error;
 1237|   127k|    }
 1238|       |
 1239|       |    /* Populate global and bound sets to be passed to children. */
 1240|  54.7k|    if (ste->ste_type != ClassBlock) {
  ------------------
  |  Branch (1240:9): [True: 42.6k, False: 12.1k]
  ------------------
 1241|       |        /* Add function locals to bound set */
 1242|  42.6k|        if (ste_uses_fast_locals(ste)) {
  ------------------
  |  Branch (1242:13): [True: 32.0k, False: 10.5k]
  ------------------
 1243|  32.0k|            temp = PyNumber_InPlaceOr(newbound, local);
 1244|  32.0k|            if (!temp)
  ------------------
  |  Branch (1244:17): [True: 0, False: 32.0k]
  ------------------
 1245|      0|                goto error;
 1246|  32.0k|            Py_DECREF(temp);
  ------------------
  |  |  430|  32.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1247|  32.0k|        }
 1248|       |        /* Pass down previously bound symbols */
 1249|  42.6k|        if (bound) {
  ------------------
  |  Branch (1249:13): [True: 32.0k, False: 10.5k]
  ------------------
 1250|  32.0k|            temp = PyNumber_InPlaceOr(newbound, bound);
 1251|  32.0k|            if (!temp)
  ------------------
  |  Branch (1251:17): [True: 0, False: 32.0k]
  ------------------
 1252|      0|                goto error;
 1253|  32.0k|            Py_DECREF(temp);
  ------------------
  |  |  430|  32.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1254|  32.0k|        }
 1255|       |        /* Pass down known globals */
 1256|  42.6k|        temp = PyNumber_InPlaceOr(newglobal, global);
 1257|  42.6k|        if (!temp)
  ------------------
  |  Branch (1257:13): [True: 0, False: 42.6k]
  ------------------
 1258|      0|            goto error;
 1259|  42.6k|        Py_DECREF(temp);
  ------------------
  |  |  430|  42.6k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.6k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.6k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1260|  42.6k|    }
 1261|  12.1k|    else {
 1262|       |        /* Special-case __class__ and __classdict__ */
 1263|  12.1k|        if (PySet_Add(newbound, &_Py_ID(__class__)) < 0)
  ------------------
  |  |  936|  12.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  12.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1263:13): [True: 0, False: 12.1k]
  ------------------
 1264|      0|            goto error;
 1265|  12.1k|        if (PySet_Add(newbound, &_Py_ID(__classdict__)) < 0)
  ------------------
  |  |  936|  12.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  12.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1265:13): [True: 0, False: 12.1k]
  ------------------
 1266|      0|            goto error;
 1267|  12.1k|        if (PySet_Add(newbound, &_Py_ID(__conditional_annotations__)) < 0)
  ------------------
  |  |  936|  12.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  12.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1267:13): [True: 0, False: 12.1k]
  ------------------
 1268|      0|            goto error;
 1269|  12.1k|    }
 1270|       |
 1271|       |    /* Recursively call analyze_child_block() on each child block.
 1272|       |
 1273|       |       newbound, newglobal now contain the names visible in
 1274|       |       nested blocks.  The free variables in the children will
 1275|       |       be added to newfree.
 1276|       |    */
 1277|  98.9k|    for (i = 0; i < PyList_GET_SIZE(ste->ste_children); ++i) {
  ------------------
  |  |   38|  98.9k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  98.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  98.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1277:17): [True: 44.1k, False: 54.7k]
  ------------------
 1278|  44.1k|        PyObject *child_free = NULL;
 1279|  44.1k|        PyObject *c = PyList_GET_ITEM(ste->ste_children, i);
  ------------------
  |  |   40|  44.1k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  44.1k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1279:23): [True: 44.1k, False: 0]
  ------------------
 1280|      0|        PySTEntryObject* entry;
 1281|  44.1k|        assert(c && PySTEntry_Check(c));
  ------------------
  |  Branch (1281:9): [True: 44.1k, False: 0]
  |  Branch (1281:9): [True: 44.1k, False: 0]
  ------------------
 1282|  44.1k|        entry = (PySTEntryObject*)c;
 1283|       |
 1284|  44.1k|        PySTEntryObject *new_class_entry = NULL;
 1285|  44.1k|        if (entry->ste_can_see_class_scope) {
  ------------------
  |  Branch (1285:13): [True: 5.33k, False: 38.8k]
  ------------------
 1286|  5.33k|            if (ste->ste_type == ClassBlock) {
  ------------------
  |  Branch (1286:17): [True: 5.28k, False: 49]
  ------------------
 1287|  5.28k|                new_class_entry = ste;
 1288|  5.28k|            }
 1289|     49|            else if (class_entry) {
  ------------------
  |  Branch (1289:22): [True: 49, False: 0]
  ------------------
 1290|     49|                new_class_entry = class_entry;
 1291|     49|            }
 1292|  5.33k|        }
 1293|       |
 1294|       |        // Finalize inlined children before classifying this block's uses
 1295|       |        // and analyze_cells, so their loads are USE here and do not force
 1296|       |        // a cell unless a real nested unit needs one.
 1297|  44.1k|        if (!analyze_child_block(entry, newbound, newfree, newglobal,
  ------------------
  |  Branch (1297:13): [True: 5, False: 44.1k]
  ------------------
 1298|  44.1k|                                 type_params, new_class_entry, &child_free))
 1299|      5|        {
 1300|      5|            goto error;
 1301|      5|        }
 1302|  44.1k|        if (entry->ste_type == InlinedComprehensionBlock) {
  ------------------
  |  Branch (1302:13): [True: 3.29k, False: 40.8k]
  ------------------
 1303|  3.29k|            if (!finalize_inlined_comprehension(ste, entry, child_free, newfree,
  ------------------
  |  Branch (1303:17): [True: 0, False: 3.29k]
  ------------------
 1304|  3.29k|                                                inlined_cells)) {
 1305|      0|                Py_DECREF(child_free);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1306|      0|                goto error;
 1307|      0|            }
 1308|  3.29k|        }
 1309|  44.1k|        temp = PyNumber_InPlaceOr(newfree, child_free);
 1310|  44.1k|        Py_DECREF(child_free);
  ------------------
  |  |  430|  44.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|  44.1k|        if (!temp)
  ------------------
  |  Branch (1311:13): [True: 0, False: 44.1k]
  ------------------
 1312|      0|            goto error;
 1313|  44.1k|        Py_DECREF(temp);
  ------------------
  |  |  430|  44.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1314|  44.1k|    }
 1315|       |
 1316|       |    /* Complete the classification. */
 1317|  54.7k|    pos = 0;
 1318|   286k|    while (PyDict_Next(ste->ste_symbols, &pos, &name, &v)) {
  ------------------
  |  Branch (1318:12): [True: 231k, False: 54.7k]
  ------------------
 1319|   231k|        long flags = PyLong_AsLong(v);
 1320|   231k|        if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1320:13): [True: 0, False: 231k]
  |  Branch (1320:28): [True: 0, False: 0]
  ------------------
 1321|      0|            goto error;
 1322|      0|        }
 1323|   231k|        int contains = PyDict_Contains(scopes, name);
 1324|   231k|        if (contains < 0) {
  ------------------
  |  Branch (1324:13): [True: 0, False: 231k]
  ------------------
 1325|      0|            goto error;
 1326|      0|        }
 1327|   231k|        if (contains) {
  ------------------
  |  Branch (1327:13): [True: 127k, False: 104k]
  ------------------
 1328|   127k|            continue;
 1329|   127k|        }
 1330|   104k|        if (!analyze_name(ste, scopes, name, flags,
  ------------------
  |  Branch (1330:13): [True: 0, False: 104k]
  ------------------
 1331|   104k|                          bound, local, free, global, type_params, class_entry))
 1332|      0|            goto error;
 1333|   104k|    }
 1334|       |
 1335|       |    /* Check if any local variables must be converted to cell variables */
 1336|  54.7k|    if (ste_uses_fast_locals(ste) && !analyze_cells(scopes, newfree, inlined_cells)) {
  ------------------
  |  Branch (1336:9): [True: 32.0k, False: 22.7k]
  |  Branch (1336:38): [True: 0, False: 32.0k]
  ------------------
 1337|      0|        goto error;
 1338|      0|    }
 1339|  54.7k|    else if (ste->ste_type == ClassBlock && !drop_class_free(ste, newfree)) {
  ------------------
  |  Branch (1339:14): [True: 12.1k, False: 42.6k]
  |  Branch (1339:45): [True: 0, False: 12.1k]
  ------------------
 1340|      0|        goto error;
 1341|      0|    }
 1342|       |    /* Records the results of the analysis in the symbol table entry */
 1343|  54.7k|    if (!update_symbols(ste->ste_symbols, scopes, bound, newfree,
  ------------------
  |  Branch (1343:9): [True: 0, False: 54.7k]
  ------------------
 1344|  54.7k|                        (ste->ste_type == ClassBlock) || ste->ste_can_see_class_scope))
  ------------------
  |  Branch (1344:25): [True: 12.1k, False: 42.6k]
  |  Branch (1344:58): [True: 5.33k, False: 37.2k]
  ------------------
 1345|      0|        goto error;
 1346|  54.7k|    temp = PyNumber_InPlaceOr(free, newfree);
 1347|  54.7k|    if (!temp)
  ------------------
  |  Branch (1347:9): [True: 0, False: 54.7k]
  ------------------
 1348|      0|        goto error;
 1349|  54.7k|    Py_DECREF(temp);
  ------------------
  |  |  430|  54.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1350|  54.7k|    success = 1;
 1351|  54.8k| error:
 1352|  54.8k|    Py_XDECREF(scopes);
  ------------------
  |  |  524|  54.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1353|  54.8k|    Py_XDECREF(local);
  ------------------
  |  |  524|  54.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1354|  54.8k|    Py_XDECREF(newbound);
  ------------------
  |  |  524|  54.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1355|  54.8k|    Py_XDECREF(newglobal);
  ------------------
  |  |  524|  54.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1356|  54.8k|    Py_XDECREF(newfree);
  ------------------
  |  |  524|  54.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1357|  54.8k|    Py_XDECREF(inlined_cells);
  ------------------
  |  |  524|  54.8k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.8k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.8k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1358|  54.8k|    if (!success)
  ------------------
  |  Branch (1358:9): [True: 33, False: 54.7k]
  ------------------
 1359|  54.8k|        assert(PyErr_Occurred());
  ------------------
  |  Branch (1359:9): [True: 33, False: 0]
  ------------------
 1360|  54.8k|    return success;
 1361|  54.8k|}
symtable.c:analyze_name:
  687|   232k|{
  688|   232k|    int contains;
  689|   232k|    if (flags & DEF_GLOBAL) {
  ------------------
  |  |  170|   232k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
  |  Branch (689:9): [True: 874, False: 231k]
  ------------------
  690|    874|        if (flags & DEF_NONLOCAL) {
  ------------------
  |  |  173|    874|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
  |  Branch (690:13): [True: 3, False: 871]
  ------------------
  691|      3|            PyErr_Format(PyExc_SyntaxError,
  692|      3|                         "name '%U' is nonlocal and global",
  693|      3|                         name);
  694|      3|            return error_at_directive(ste, name);
  695|      3|        }
  696|    871|        SET_SCOPE(scopes, name, GLOBAL_EXPLICIT);
  ------------------
  |  |  665|    871|    do { \
  |  |  666|    871|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|    871|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 871]
  |  |  ------------------
  |  |  668|    871|            return 0; \
  |  |  669|    871|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 871]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|    871|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|    871|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    871|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    871|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|    871|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 871]
  |  |  ------------------
  ------------------
  697|    871|        if (PySet_Add(global, name) < 0)
  ------------------
  |  Branch (697:13): [True: 0, False: 871]
  ------------------
  698|      0|            return 0;
  699|    871|        if (bound && (PySet_Discard(bound, name) < 0))
  ------------------
  |  Branch (699:13): [True: 631, False: 240]
  |  Branch (699:22): [True: 0, False: 631]
  ------------------
  700|      0|            return 0;
  701|    871|        return 1;
  702|    871|    }
  703|   231k|    if (flags & DEF_NONLOCAL) {
  ------------------
  |  |  173|   231k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
  |  Branch (703:9): [True: 1.24k, False: 229k]
  ------------------
  704|  1.24k|        if (!bound) {
  ------------------
  |  Branch (704:13): [True: 21, False: 1.22k]
  ------------------
  705|     21|            PyErr_Format(PyExc_SyntaxError,
  706|     21|                         "nonlocal declaration not allowed at module level");
  707|     21|            return error_at_directive(ste, name);
  708|     21|        }
  709|  1.22k|        contains = PySet_Contains(bound, name);
  710|  1.22k|        if (contains < 0) {
  ------------------
  |  Branch (710:13): [True: 0, False: 1.22k]
  ------------------
  711|      0|            return 0;
  712|      0|        }
  713|  1.22k|        if (!contains) {
  ------------------
  |  Branch (713:13): [True: 4, False: 1.22k]
  ------------------
  714|      4|            PyErr_Format(PyExc_SyntaxError,
  715|      4|                         "no binding for nonlocal '%U' found",
  716|      4|                         name);
  717|       |
  718|      4|            return error_at_directive(ste, name);
  719|      4|        }
  720|  1.22k|        contains = PySet_Contains(type_params, name);
  721|  1.22k|        if (contains < 0) {
  ------------------
  |  Branch (721:13): [True: 0, False: 1.22k]
  ------------------
  722|      0|            return 0;
  723|      0|        }
  724|  1.22k|        if (contains) {
  ------------------
  |  Branch (724:13): [True: 0, False: 1.22k]
  ------------------
  725|      0|            PyErr_Format(PyExc_SyntaxError,
  726|      0|                         "nonlocal binding not allowed for type parameter '%U'",
  727|      0|                         name);
  728|      0|            return error_at_directive(ste, name);
  729|      0|        }
  730|  1.22k|        SET_SCOPE(scopes, name, FREE);
  ------------------
  |  |  665|  1.22k|    do { \
  |  |  666|  1.22k|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|  1.22k|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 1.22k]
  |  |  ------------------
  |  |  668|  1.22k|            return 0; \
  |  |  669|  1.22k|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 1.22k]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|  1.22k|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|  1.22k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.22k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.22k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|  1.22k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 1.22k]
  |  |  ------------------
  ------------------
  731|  1.22k|        return PySet_Add(free, name) >= 0;
  732|  1.22k|    }
  733|   229k|    if (flags & DEF_BOUND) {
  ------------------
  |  |  181|   229k|#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  171|   229k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  172|   229k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  176|   229k|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  |  |  ------------------
  ------------------
  |  Branch (733:9): [True: 125k, False: 104k]
  ------------------
  734|   125k|        SET_SCOPE(scopes, name, LOCAL);
  ------------------
  |  |  665|   125k|    do { \
  |  |  666|   125k|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|   125k|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 125k]
  |  |  ------------------
  |  |  668|   125k|            return 0; \
  |  |  669|   125k|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 125k]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|   125k|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|   125k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|   125k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   125k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|   125k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 125k]
  |  |  ------------------
  ------------------
  735|   125k|        if (PySet_Add(local, name) < 0)
  ------------------
  |  Branch (735:13): [True: 0, False: 125k]
  ------------------
  736|      0|            return 0;
  737|   125k|        if (PySet_Discard(global, name) < 0)
  ------------------
  |  Branch (737:13): [True: 0, False: 125k]
  ------------------
  738|      0|            return 0;
  739|   125k|        if (flags & DEF_TYPE_PARAM) {
  ------------------
  |  |  179|   125k|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
  |  Branch (739:13): [True: 7.99k, False: 117k]
  ------------------
  740|  7.99k|            if (PySet_Add(type_params, name) < 0)
  ------------------
  |  Branch (740:17): [True: 0, False: 7.99k]
  ------------------
  741|      0|                return 0;
  742|  7.99k|        }
  743|   117k|        else {
  744|   117k|            if (PySet_Discard(type_params, name) < 0)
  ------------------
  |  Branch (744:17): [True: 0, False: 117k]
  ------------------
  745|      0|                return 0;
  746|   117k|        }
  747|   125k|        return 1;
  748|   125k|    }
  749|       |    // If we were passed class_entry (i.e., we're in an ste_can_see_class_scope scope)
  750|       |    // and the bound name is in that set, then the name is potentially bound both by
  751|       |    // the immediately enclosing class namespace, and also by an outer function namespace.
  752|       |    // In that case, we want the runtime name resolution to look at only the class
  753|       |    // namespace and the globals (not the namespace providing the bound).
  754|       |    // Similarly, if the name is explicitly global in the class namespace (through the
  755|       |    // global statement), we want to also treat it as a global in this scope.
  756|   104k|    if (class_entry != NULL) {
  ------------------
  |  Branch (756:9): [True: 13.9k, False: 90.9k]
  ------------------
  757|  13.9k|        long class_flags = _PyST_GetSymbol(class_entry, name);
  758|  13.9k|        if (class_flags < 0) {
  ------------------
  |  Branch (758:13): [True: 0, False: 13.9k]
  ------------------
  759|      0|            return 0;
  760|      0|        }
  761|  13.9k|        if (class_flags & DEF_GLOBAL) {
  ------------------
  |  |  170|  13.9k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
  |  Branch (761:13): [True: 105, False: 13.8k]
  ------------------
  762|    105|            SET_SCOPE(scopes, name, GLOBAL_EXPLICIT);
  ------------------
  |  |  665|    105|    do { \
  |  |  666|    105|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|    105|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 105]
  |  |  ------------------
  |  |  668|    105|            return 0; \
  |  |  669|    105|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 105]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|    105|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|    105|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    105|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    105|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|    105|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 105]
  |  |  ------------------
  ------------------
  763|    105|            return 1;
  764|    105|        }
  765|  13.8k|        else if ((class_flags & DEF_BOUND) && !(class_flags & DEF_NONLOCAL)) {
  ------------------
  |  |  181|  13.8k|#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  171|  13.8k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  172|  13.8k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  176|  13.8k|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  |  |  ------------------
  ------------------
                      else if ((class_flags & DEF_BOUND) && !(class_flags & DEF_NONLOCAL)) {
  ------------------
  |  |  173|    526|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
  |  Branch (765:18): [True: 526, False: 13.3k]
  |  Branch (765:47): [True: 526, False: 0]
  ------------------
  766|    526|            SET_SCOPE(scopes, name, GLOBAL_IMPLICIT);
  ------------------
  |  |  665|    526|    do { \
  |  |  666|    526|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|    526|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 526]
  |  |  ------------------
  |  |  668|    526|            return 0; \
  |  |  669|    526|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 526]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|    526|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|    526|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|    526|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|    526|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|    526|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 526]
  |  |  ------------------
  ------------------
  767|    526|            return 1;
  768|    526|        }
  769|  13.9k|    }
  770|       |    /* If an enclosing block has a binding for this name, it
  771|       |       is a free variable rather than a global variable.
  772|       |       Note that having a non-NULL bound implies that the block
  773|       |       is nested.
  774|       |    */
  775|   104k|    if (bound) {
  ------------------
  |  Branch (775:9): [True: 80.9k, False: 23.2k]
  ------------------
  776|  80.9k|        contains = PySet_Contains(bound, name);
  777|  80.9k|        if (contains < 0) {
  ------------------
  |  Branch (777:13): [True: 0, False: 80.9k]
  ------------------
  778|      0|            return 0;
  779|      0|        }
  780|  80.9k|        if (contains) {
  ------------------
  |  Branch (780:13): [True: 8.24k, False: 72.7k]
  ------------------
  781|  8.24k|            SET_SCOPE(scopes, name, FREE);
  ------------------
  |  |  665|  8.24k|    do { \
  |  |  666|  8.24k|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|  8.24k|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 8.24k]
  |  |  ------------------
  |  |  668|  8.24k|            return 0; \
  |  |  669|  8.24k|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 8.24k]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|  8.24k|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|  8.24k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  8.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  8.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|  8.24k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 8.24k]
  |  |  ------------------
  ------------------
  782|  8.24k|            return PySet_Add(free, name) >= 0;
  783|  8.24k|        }
  784|  80.9k|    }
  785|       |    /* If a parent has a global statement, then call it global
  786|       |       explicit?  It could also be global implicit.
  787|       |     */
  788|  96.0k|    if (global) {
  ------------------
  |  Branch (788:9): [True: 96.0k, False: 0]
  ------------------
  789|  96.0k|        contains = PySet_Contains(global, name);
  790|  96.0k|        if (contains < 0) {
  ------------------
  |  Branch (790:13): [True: 0, False: 96.0k]
  ------------------
  791|      0|            return 0;
  792|      0|        }
  793|  96.0k|        if (contains) {
  ------------------
  |  Branch (793:13): [True: 1.24k, False: 94.7k]
  ------------------
  794|  1.24k|            SET_SCOPE(scopes, name, GLOBAL_IMPLICIT);
  ------------------
  |  |  665|  1.24k|    do { \
  |  |  666|  1.24k|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|  1.24k|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  668|  1.24k|            return 0; \
  |  |  669|  1.24k|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|  1.24k|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|  1.24k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  1.24k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  1.24k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|  1.24k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  795|  1.24k|            return 1;
  796|  1.24k|        }
  797|  96.0k|    }
  798|  94.7k|    SET_SCOPE(scopes, name, GLOBAL_IMPLICIT);
  ------------------
  |  |  665|  94.7k|    do { \
  |  |  666|  94.7k|        PyObject *o = PyLong_FromLong(I); \
  |  |  667|  94.7k|        if (!o) \
  |  |  ------------------
  |  |  |  Branch (667:13): [True: 0, False: 94.7k]
  |  |  ------------------
  |  |  668|  94.7k|            return 0; \
  |  |  669|  94.7k|        if (PyDict_SetItem((DICT), (NAME), o) < 0) { \
  |  |  ------------------
  |  |  |  Branch (669:13): [True: 0, False: 94.7k]
  |  |  ------------------
  |  |  670|      0|            Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  671|      0|            return 0; \
  |  |  672|      0|        } \
  |  |  673|  94.7k|        Py_DECREF(o); \
  |  |  ------------------
  |  |  |  |  430|  94.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  94.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  94.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  674|  94.7k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (674:13): [Folded, False: 94.7k]
  |  |  ------------------
  ------------------
  799|  94.7k|    return 1;
  800|  94.7k|}
symtable.c:error_at_directive:
  595|     28|{
  596|     28|    Py_ssize_t i;
  597|     28|    PyObject *data;
  598|     28|    assert(ste->ste_directives);
  ------------------
  |  Branch (598:5): [True: 28, False: 0]
  ------------------
  599|    151|    for (i = 0; i < PyList_GET_SIZE(ste->ste_directives); i++) {
  ------------------
  |  |   38|    151|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    151|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    151|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (599:17): [True: 151, False: 0]
  ------------------
  600|    151|        data = PyList_GET_ITEM(ste->ste_directives, i);
  ------------------
  |  |   40|    151|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|    151|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    151|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (600:16): [True: 151, False: 0]
  ------------------
  601|    151|        assert(PyTuple_CheckExact(data));
  ------------------
  |  Branch (601:9): [True: 151, False: 0]
  ------------------
  602|    151|        assert(PyUnicode_CheckExact(PyTuple_GET_ITEM(data, 0)));
  ------------------
  |  Branch (602:9): [True: 151, False: 0]
  |  Branch (602:9): [True: 151, False: 0]
  ------------------
  603|    151|        if (PyUnicode_Compare(PyTuple_GET_ITEM(data, 0), name) == 0) {
  ------------------
  |  |   29|    151|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|    151|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    151|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (603:13): [True: 28, False: 123]
  |  Branch (603:31): [True: 151, False: 0]
  ------------------
  604|     28|            PyErr_RangedSyntaxLocationObject(ste->ste_table->st_filename,
  605|     28|                                             PyLong_AsLong(PyTuple_GET_ITEM(data, 1)),
  ------------------
  |  |   29|     28|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     28|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (605:60): [True: 28, False: 0]
  ------------------
  606|     28|                                             PyLong_AsLong(PyTuple_GET_ITEM(data, 2)) + 1,
  ------------------
  |  |   29|     28|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     28|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (606:60): [True: 28, False: 0]
  ------------------
  607|     28|                                             PyLong_AsLong(PyTuple_GET_ITEM(data, 3)),
  ------------------
  |  |   29|     28|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     28|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (607:60): [True: 28, False: 0]
  ------------------
  608|     28|                                             PyLong_AsLong(PyTuple_GET_ITEM(data, 4)) + 1);
  ------------------
  |  |   29|     28|#define PyTuple_GET_ITEM(op, index) (_PyTuple_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   19|     28|    (assert(PyTuple_Check(op)), _Py_CAST(PyTupleObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     28|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (608:60): [True: 28, False: 0]
  ------------------
  609|       |
  610|      0|            return 0;
  611|     28|        }
  612|    151|    }
  613|      0|    PyErr_SetString(PyExc_RuntimeError,
  614|      0|                    "BUG: internal directive bookkeeping broken");
  615|      0|    return 0;
  616|     28|}
symtable.c:ste_uses_fast_locals:
   96|   415k|{
   97|   415k|    return _PyST_IsFunctionLike(ste) || ste->ste_type == InlinedComprehensionBlock;
  ------------------
  |  Branch (97:12): [True: 190k, False: 224k]
  |  Branch (97:41): [True: 11.4k, False: 212k]
  ------------------
   98|   415k|}
symtable.c:analyze_child_block:
 1367|  44.1k|{
 1368|  44.1k|    PyObject *temp_bound = NULL, *temp_global = NULL, *temp_free = NULL;
 1369|  44.1k|    PyObject *temp_type_params = NULL;
 1370|       |
 1371|       |    /* Copy the bound/global/free sets.
 1372|       |
 1373|       |       These sets are used by all blocks enclosed by the
 1374|       |       current block.  The analyze_block() call modifies these
 1375|       |       sets.
 1376|       |
 1377|       |    */
 1378|  44.1k|    temp_bound = PySet_New(bound);
 1379|  44.1k|    if (!temp_bound)
  ------------------
  |  Branch (1379:9): [True: 0, False: 44.1k]
  ------------------
 1380|      0|        goto error;
 1381|  44.1k|    temp_free = PySet_New(free);
 1382|  44.1k|    if (!temp_free)
  ------------------
  |  Branch (1382:9): [True: 0, False: 44.1k]
  ------------------
 1383|      0|        goto error;
 1384|  44.1k|    temp_global = PySet_New(global);
 1385|  44.1k|    if (!temp_global)
  ------------------
  |  Branch (1385:9): [True: 0, False: 44.1k]
  ------------------
 1386|      0|        goto error;
 1387|  44.1k|    temp_type_params = PySet_New(type_params);
 1388|  44.1k|    if (!temp_type_params)
  ------------------
  |  Branch (1388:9): [True: 0, False: 44.1k]
  ------------------
 1389|      0|        goto error;
 1390|       |
 1391|  44.1k|    if (!analyze_block(entry, temp_bound, temp_free, temp_global,
  ------------------
  |  Branch (1391:9): [True: 5, False: 44.1k]
  ------------------
 1392|  44.1k|                       temp_type_params, class_entry))
 1393|      5|        goto error;
 1394|  44.1k|    *child_free = temp_free;
 1395|  44.1k|    Py_DECREF(temp_bound);
  ------------------
  |  |  430|  44.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|  44.1k|    Py_DECREF(temp_global);
  ------------------
  |  |  430|  44.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1397|  44.1k|    Py_DECREF(temp_type_params);
  ------------------
  |  |  430|  44.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  44.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  44.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|  44.1k|    return 1;
 1399|      5| error:
 1400|      5|    Py_XDECREF(temp_bound);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|      5|    Py_XDECREF(temp_free);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1402|      5|    Py_XDECREF(temp_global);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|      5|    Py_XDECREF(temp_type_params);
  ------------------
  |  |  524|      5|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      5|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      5|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1404|      5|    return 0;
 1405|  44.1k|}
symtable.c:finalize_inlined_comprehension:
  860|  3.29k|{
  861|  3.29k|    PyObject *k, *v;
  862|  3.29k|    Py_ssize_t pos = 0;
  863|       |
  864|  3.29k|    assert(comp->ste_type == InlinedComprehensionBlock);
  ------------------
  |  Branch (864:5): [True: 3.29k, False: 0]
  ------------------
  865|  3.29k|    assert(comp->ste_parent != NULL);
  ------------------
  |  Branch (865:5): [True: 3.29k, False: 0]
  ------------------
  866|       |
  867|  16.2k|    while (PyDict_Next(comp->ste_symbols, &pos, &k, &v)) {
  ------------------
  |  Branch (867:12): [True: 12.9k, False: 3.29k]
  ------------------
  868|  12.9k|        long comp_flags = PyLong_AsLong(v);
  869|  12.9k|        if (comp_flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (869:13): [True: 0, False: 12.9k]
  |  Branch (869:33): [True: 0, False: 0]
  ------------------
  870|      0|            goto error;
  871|      0|        }
  872|  12.9k|        int scope = SYMBOL_TO_SCOPE(comp_flags);
  ------------------
  |  |  189|  12.9k|#define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  187|  12.9k|#define SCOPE_OFFSET 12
  |  |  ------------------
  |  |               #define SYMBOL_TO_SCOPE(S) (((S) >> SCOPE_OFFSET) & SCOPE_MASK)
  |  |  ------------------
  |  |  |  |  188|  12.9k|#define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  12.9k|#define DEF_GLOBAL 1             /* global stmt */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  12.9k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|  12.9k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  |  |  ------------------
  |  |  |  |               #define SCOPE_MASK (DEF_GLOBAL | DEF_LOCAL | DEF_PARAM | DEF_NONLOCAL)
  |  |  |  |  ------------------
  |  |  |  |  |  |  173|  12.9k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  873|  12.9k|        if (scope == CELL) {
  ------------------
  |  |  195|  12.9k|#define CELL 5
  ------------------
  |  Branch (873:13): [True: 0, False: 12.9k]
  ------------------
  874|      0|            if (PySet_Add(inlined_cells, k) < 0) {
  ------------------
  |  Branch (874:17): [True: 0, False: 0]
  ------------------
  875|      0|                goto error;
  876|      0|            }
  877|      0|        }
  878|  12.9k|        PyObject *existing = PyDict_GetItemWithError(ste->ste_symbols, k);
  879|  12.9k|        if (existing == NULL && PyErr_Occurred()) {
  ------------------
  |  Branch (879:13): [True: 11.3k, False: 1.59k]
  |  Branch (879:33): [True: 0, False: 11.3k]
  ------------------
  880|      0|            goto error;
  881|      0|        }
  882|       |        // These names are not allowed to be free through a class (see
  883|       |        // drop_class_free) unless a nested child needs them. Keep FREE
  884|       |        // on this table; compile treats the load as a global.
  885|  12.9k|        if (scope == FREE && ste->ste_type == ClassBlock &&
  ------------------
  |  |  194|  25.9k|#define FREE 4
  ------------------
  |  Branch (885:13): [True: 1.23k, False: 11.7k]
  |  Branch (885:30): [True: 0, False: 1.23k]
  ------------------
  886|      0|                _PyST_IsClassClosureName(k)) {
  ------------------
  |  Branch (886:17): [True: 0, False: 0]
  ------------------
  887|      0|            int child_needs_free = is_free_in_any_child(comp, k);
  888|      0|            if (child_needs_free < 0) {
  ------------------
  |  Branch (888:17): [True: 0, False: 0]
  ------------------
  889|      0|                goto error;
  890|      0|            }
  891|      0|            if (!child_needs_free) {
  ------------------
  |  Branch (891:17): [True: 0, False: 0]
  ------------------
  892|      0|                if (PySet_Discard(comp_free, k) < 0) {
  ------------------
  |  Branch (892:21): [True: 0, False: 0]
  ------------------
  893|      0|                    goto error;
  894|      0|                }
  895|      0|            }
  896|      0|            continue;
  897|      0|        }
  898|  12.9k|        int is_def_bound = 0;
  899|  12.9k|        if (existing) {
  ------------------
  |  Branch (899:13): [True: 1.59k, False: 11.3k]
  ------------------
  900|  1.59k|            long flags = PyLong_AsLong(existing);
  901|  1.59k|            if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (901:17): [True: 0, False: 1.59k]
  |  Branch (901:32): [True: 0, False: 0]
  ------------------
  902|      0|                goto error;
  903|      0|            }
  904|  1.59k|            is_def_bound = flags & DEF_BOUND;
  ------------------
  |  |  181|  1.59k|#define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  171|  1.59k|#define DEF_LOCAL 2              /* assignment in code block */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  172|  1.59k|#define DEF_PARAM (2<<1)         /* formal parameter */
  |  |  ------------------
  |  |               #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT)
  |  |  ------------------
  |  |  |  |  176|  1.59k|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  |  |  ------------------
  ------------------
  905|  1.59k|        }
  906|       |        // Loads here are in the enclosing compilation unit.
  907|  12.9k|        if (scope == FREE && (comp_flags & USE) &&
  ------------------
  |  |  194|  25.9k|#define FREE 4
  ------------------
                      if (scope == FREE && (comp_flags & USE) &&
  ------------------
  |  |  174|  1.23k|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (907:13): [True: 1.23k, False: 11.7k]
  |  Branch (907:30): [True: 8, False: 1.22k]
  ------------------
  908|      8|                !symtable_add_flag(ste->ste_symbols, k, USE)) {
  ------------------
  |  |  174|      8|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (908:17): [True: 0, False: 8]
  ------------------
  909|      0|            goto error;
  910|      0|        }
  911|  12.9k|        if (is_def_bound && ste->ste_type != ClassBlock) {
  ------------------
  |  Branch (911:13): [True: 481, False: 12.4k]
  |  Branch (911:29): [True: 481, False: 0]
  ------------------
  912|       |            // free vars in comprehension that are locals in outer scope can
  913|       |            // now simply be locals, unless they are free in comp children,
  914|       |            // needed as cells by sibling nested scopes, or if the outer
  915|       |            // scope is a class block
  916|    481|            int ok = is_free_in_any_child(comp, k);
  917|    481|            if (ok < 0) {
  ------------------
  |  Branch (917:17): [True: 0, False: 481]
  ------------------
  918|      0|                goto error;
  919|      0|            }
  920|    481|            if (!ok) {
  ------------------
  |  Branch (920:17): [True: 481, False: 0]
  ------------------
  921|    481|                int in_newfree = PySet_Contains(outer_newfree, k);
  922|    481|                if (in_newfree < 0) {
  ------------------
  |  Branch (922:21): [True: 0, False: 481]
  ------------------
  923|      0|                    goto error;
  924|      0|                }
  925|    481|                if (!in_newfree) {
  ------------------
  |  Branch (925:21): [True: 351, False: 130]
  ------------------
  926|    351|                    if (PySet_Discard(comp_free, k) < 0) {
  ------------------
  |  Branch (926:25): [True: 0, False: 351]
  ------------------
  927|      0|                        goto error;
  928|      0|                    }
  929|    351|                }
  930|    481|            }
  931|    481|        }
  932|  12.4k|        else if (!existing) {
  ------------------
  |  Branch (932:18): [True: 11.3k, False: 1.10k]
  ------------------
  933|  11.3k|            assert(scope != FREE || PySet_Contains(comp_free, k) == 1);
  ------------------
  |  Branch (933:13): [True: 10.4k, False: 926]
  |  Branch (933:13): [True: 926, False: 0]
  ------------------
  934|  11.3k|        }
  935|  12.9k|    }
  936|  3.29k|    return 1;
  937|      0|error:
  938|      0|    return 0;
  939|  3.29k|}
symtable.c:is_free_in_any_child:
  806|    482|{
  807|    483|    for (Py_ssize_t i = 0; i < PyList_GET_SIZE(entry->ste_children); i++) {
  ------------------
  |  |   38|    483|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    483|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    483|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (807:28): [True: 1, False: 482]
  ------------------
  808|      1|        PySTEntryObject *child_ste = (PySTEntryObject *)PyList_GET_ITEM(
  ------------------
  |  |   40|      1|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|      1|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (808:57): [True: 1, False: 0]
  ------------------
  809|      1|            entry->ste_children, i);
  810|      1|        if (child_ste->ste_type == InlinedComprehensionBlock) {
  ------------------
  |  Branch (810:13): [True: 1, False: 0]
  ------------------
  811|       |            /* this is the same scope, so we check its children */
  812|      1|            int nested = is_free_in_any_child(child_ste, key);
  813|      1|            if (nested != 0) {
  ------------------
  |  Branch (813:17): [True: 0, False: 1]
  ------------------
  814|      0|                return nested;
  815|      0|            }
  816|      1|            continue;
  817|      1|        }
  818|      0|        long scope = _PyST_GetScope(child_ste, key);
  819|      0|        if (scope < 0) {
  ------------------
  |  Branch (819:13): [True: 0, False: 0]
  ------------------
  820|      0|            return -1;
  821|      0|        }
  822|      0|        if (scope == FREE) {
  ------------------
  |  |  194|      0|#define FREE 4
  ------------------
  |  Branch (822:13): [True: 0, False: 0]
  ------------------
  823|      0|            return 1;
  824|      0|        }
  825|      0|    }
  826|    482|    return 0;
  827|    482|}
symtable.c:symtable_add_flag:
  831|   541k|{
  832|   541k|    PyObject *o = PyDict_GetItemWithError(dict, name);
  833|   541k|    long val;
  834|   541k|    if (o != NULL) {
  ------------------
  |  Branch (834:9): [True: 295k, False: 246k]
  ------------------
  835|   295k|        val = PyLong_AsLong(o);
  836|   295k|        if (val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (836:13): [True: 0, False: 295k]
  |  Branch (836:26): [True: 0, False: 0]
  ------------------
  837|      0|            return 0;
  838|      0|        }
  839|   295k|        val |= flag;
  840|   295k|    }
  841|   246k|    else if (PyErr_Occurred()) {
  ------------------
  |  Branch (841:14): [True: 0, False: 246k]
  ------------------
  842|      0|        return 0;
  843|      0|    }
  844|   246k|    else {
  845|   246k|        val = flag;
  846|   246k|    }
  847|   541k|    o = PyLong_FromLong(val);
  848|   541k|    if (o == NULL) {
  ------------------
  |  Branch (848:9): [True: 0, False: 541k]
  ------------------
  849|      0|        return 0;
  850|      0|    }
  851|   541k|    int rc = PyDict_SetItem(dict, name, o);
  852|   541k|    Py_DECREF(o);
  ------------------
  |  |  430|   541k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   541k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   541k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  853|   541k|    return rc >= 0;
  854|   541k|}
symtable.c:analyze_cells:
  953|  32.0k|{
  954|  32.0k|    PyObject *name, *v, *v_cell;
  955|  32.0k|    int success = 0;
  956|  32.0k|    Py_ssize_t pos = 0;
  957|       |
  958|  32.0k|    v_cell = PyLong_FromLong(CELL);
  ------------------
  |  |  195|  32.0k|#define CELL 5
  ------------------
  959|  32.0k|    if (!v_cell)
  ------------------
  |  Branch (959:9): [True: 0, False: 32.0k]
  ------------------
  960|      0|        return 0;
  961|   180k|    while (PyDict_Next(scopes, &pos, &name, &v)) {
  ------------------
  |  Branch (961:12): [True: 148k, False: 32.0k]
  ------------------
  962|   148k|        long scope = PyLong_AsLong(v);
  963|   148k|        if (scope == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (963:13): [True: 0, False: 148k]
  |  Branch (963:28): [True: 0, False: 0]
  ------------------
  964|      0|            goto error;
  965|      0|        }
  966|   148k|        if (scope != LOCAL)
  ------------------
  |  |  191|   148k|#define LOCAL 1
  ------------------
  |  Branch (966:13): [True: 56.4k, False: 91.9k]
  ------------------
  967|  56.4k|            continue;
  968|  91.9k|        int contains = PySet_Contains(free, name);
  969|  91.9k|        if (contains < 0) {
  ------------------
  |  Branch (969:13): [True: 0, False: 91.9k]
  ------------------
  970|      0|            goto error;
  971|      0|        }
  972|  91.9k|        if (!contains) {
  ------------------
  |  Branch (972:13): [True: 89.7k, False: 2.16k]
  ------------------
  973|  89.7k|            contains = PySet_Contains(inlined_cells, name);
  974|  89.7k|            if (contains < 0) {
  ------------------
  |  Branch (974:17): [True: 0, False: 89.7k]
  ------------------
  975|      0|                goto error;
  976|      0|            }
  977|  89.7k|            if (!contains) {
  ------------------
  |  Branch (977:17): [True: 89.7k, False: 0]
  ------------------
  978|  89.7k|                continue;
  979|  89.7k|            }
  980|  89.7k|        }
  981|       |        /* Replace LOCAL with CELL for this name, and remove
  982|       |           from free. It is safe to replace the value of name
  983|       |           in the dict, because it will not cause a resize.
  984|       |         */
  985|  2.16k|        if (PyDict_SetItem(scopes, name, v_cell) < 0)
  ------------------
  |  Branch (985:13): [True: 0, False: 2.16k]
  ------------------
  986|      0|            goto error;
  987|  2.16k|        if (PySet_Discard(free, name) < 0)
  ------------------
  |  Branch (987:13): [True: 0, False: 2.16k]
  ------------------
  988|      0|            goto error;
  989|  2.16k|    }
  990|  32.0k|    success = 1;
  991|  32.0k| error:
  992|  32.0k|    Py_DECREF(v_cell);
  ------------------
  |  |  430|  32.0k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  32.0k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  32.0k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  993|  32.0k|    return success;
  994|  32.0k|}
symtable.c:drop_class_free:
  998|  12.1k|{
  999|  12.1k|    int res;
 1000|  12.1k|    res = PySet_Discard(free, &_Py_ID(__class__));
  ------------------
  |  |  936|  12.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  12.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1001|  12.1k|    if (res < 0)
  ------------------
  |  Branch (1001:9): [True: 0, False: 12.1k]
  ------------------
 1002|      0|        return 0;
 1003|  12.1k|    if (res)
  ------------------
  |  Branch (1003:9): [True: 25, False: 12.1k]
  ------------------
 1004|     25|        ste->ste_needs_class_closure = 1;
 1005|  12.1k|    res = PySet_Discard(free, &_Py_ID(__classdict__));
  ------------------
  |  |  936|  12.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  12.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1006|  12.1k|    if (res < 0)
  ------------------
  |  Branch (1006:9): [True: 0, False: 12.1k]
  ------------------
 1007|      0|        return 0;
 1008|  12.1k|    if (res)
  ------------------
  |  Branch (1008:9): [True: 5.27k, False: 6.88k]
  ------------------
 1009|  5.27k|        ste->ste_needs_classdict = 1;
 1010|  12.1k|    res = PySet_Discard(free, &_Py_ID(__conditional_annotations__));
  ------------------
  |  |  936|  12.1k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  12.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  12.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|  12.1k|    if (res < 0)
  ------------------
  |  Branch (1011:9): [True: 0, False: 12.1k]
  ------------------
 1012|      0|        return 0;
 1013|  12.1k|    if (res) {
  ------------------
  |  Branch (1013:9): [True: 146, False: 12.0k]
  ------------------
 1014|    146|        ste->ste_has_conditional_annotations = 1;
 1015|    146|    }
 1016|  12.1k|    return 1;
 1017|  12.1k|}
symtable.c:update_symbols:
 1027|  54.7k|{
 1028|  54.7k|    PyObject *name = NULL, *itr = NULL;
 1029|  54.7k|    PyObject *v = NULL, *v_scope = NULL, *v_new = NULL, *v_free = NULL;
 1030|  54.7k|    Py_ssize_t pos = 0;
 1031|       |
 1032|       |    /* Update scope information for all symbols in this scope */
 1033|   286k|    while (PyDict_Next(symbols, &pos, &name, &v)) {
  ------------------
  |  Branch (1033:12): [True: 231k, False: 54.7k]
  ------------------
 1034|   231k|        long flags = PyLong_AsLong(v);
 1035|   231k|        if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1035:13): [True: 0, False: 231k]
  |  Branch (1035:28): [True: 0, False: 0]
  ------------------
 1036|      0|            return 0;
 1037|      0|        }
 1038|   231k|        if (PyDict_GetItemRef(scopes, name, &v_scope) < 0) {
  ------------------
  |  Branch (1038:13): [True: 0, False: 231k]
  ------------------
 1039|      0|            return 0;
 1040|      0|        }
 1041|   231k|        if (!v_scope) {
  ------------------
  |  Branch (1041:13): [True: 0, False: 231k]
  ------------------
 1042|      0|            PyErr_SetObject(PyExc_KeyError, name);
 1043|      0|            return 0;
 1044|      0|        }
 1045|   231k|        long scope = PyLong_AsLong(v_scope);
 1046|   231k|        Py_DECREF(v_scope);
  ------------------
  |  |  430|   231k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   231k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1047|   231k|        if (scope == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1047:13): [True: 0, False: 231k]
  |  Branch (1047:28): [True: 0, False: 0]
  ------------------
 1048|      0|            return 0;
 1049|      0|        }
 1050|   231k|        flags |= (scope << SCOPE_OFFSET);
  ------------------
  |  |  187|   231k|#define SCOPE_OFFSET 12
  ------------------
 1051|   231k|        v_new = PyLong_FromLong(flags);
 1052|   231k|        if (!v_new)
  ------------------
  |  Branch (1052:13): [True: 0, False: 231k]
  ------------------
 1053|      0|            return 0;
 1054|   231k|        if (PyDict_SetItem(symbols, name, v_new) < 0) {
  ------------------
  |  Branch (1054:13): [True: 0, False: 231k]
  ------------------
 1055|      0|            Py_DECREF(v_new);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|      0|            return 0;
 1057|      0|        }
 1058|   231k|        Py_DECREF(v_new);
  ------------------
  |  |  430|   231k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   231k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   231k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|   231k|    }
 1060|       |
 1061|       |    /* Record not yet resolved free variables from children (if any) */
 1062|  54.7k|    v_free = PyLong_FromLong(FREE << SCOPE_OFFSET);
  ------------------
  |  |  194|  54.7k|#define FREE 4
  ------------------
                  v_free = PyLong_FromLong(FREE << SCOPE_OFFSET);
  ------------------
  |  |  187|  54.7k|#define SCOPE_OFFSET 12
  ------------------
 1063|  54.7k|    if (!v_free)
  ------------------
  |  Branch (1063:9): [True: 0, False: 54.7k]
  ------------------
 1064|      0|        return 0;
 1065|       |
 1066|  54.7k|    itr = PyObject_GetIter(free);
 1067|  54.7k|    if (itr == NULL) {
  ------------------
  |  Branch (1067:9): [True: 0, False: 54.7k]
  ------------------
 1068|      0|        Py_DECREF(v_free);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1069|      0|        return 0;
 1070|      0|    }
 1071|       |
 1072|  57.6k|    while ((name = PyIter_Next(itr))) {
  ------------------
  |  Branch (1072:12): [True: 2.91k, False: 54.7k]
  ------------------
 1073|  2.91k|        v = PyDict_GetItemWithError(symbols, name);
 1074|       |
 1075|       |        /* Handle symbol that already exists in this scope */
 1076|  2.91k|        if (v) {
  ------------------
  |  Branch (1076:13): [True: 894, False: 2.02k]
  ------------------
 1077|       |            /* Handle a free variable in a method of
 1078|       |               the class that has the same name as a local
 1079|       |               or global in the class scope.
 1080|       |            */
 1081|    894|            if  (classflag) {
  ------------------
  |  Branch (1081:18): [True: 49, False: 845]
  ------------------
 1082|     49|                long flags = PyLong_AsLong(v);
 1083|     49|                if (flags == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1083:21): [True: 0, False: 49]
  |  Branch (1083:36): [True: 0, False: 0]
  ------------------
 1084|      0|                    goto error;
 1085|      0|                }
 1086|     49|                flags |= DEF_FREE_CLASS;
  ------------------
  |  |  175|     49|#define DEF_FREE_CLASS (2<<5)    /* free variable from class's method */
  ------------------
 1087|     49|                v_new = PyLong_FromLong(flags);
 1088|     49|                if (!v_new) {
  ------------------
  |  Branch (1088:21): [True: 0, False: 49]
  ------------------
 1089|      0|                    goto error;
 1090|      0|                }
 1091|     49|                if (PyDict_SetItem(symbols, name, v_new) < 0) {
  ------------------
  |  Branch (1091:21): [True: 0, False: 49]
  ------------------
 1092|      0|                    Py_DECREF(v_new);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1093|      0|                    goto error;
 1094|      0|                }
 1095|     49|                Py_DECREF(v_new);
  ------------------
  |  |  430|     49|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     49|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     49|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1096|     49|            }
 1097|       |            /* It's a cell, or already free in this scope */
 1098|    894|            Py_DECREF(name);
  ------------------
  |  |  430|    894|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    894|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    894|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|    894|            continue;
 1100|    894|        }
 1101|  2.02k|        else if (PyErr_Occurred()) {
  ------------------
  |  Branch (1101:18): [True: 0, False: 2.02k]
  ------------------
 1102|      0|            goto error;
 1103|      0|        }
 1104|       |        /* Handle global symbol */
 1105|  2.02k|        if (bound) {
  ------------------
  |  Branch (1105:13): [True: 2.02k, False: 0]
  ------------------
 1106|  2.02k|            int contains = PySet_Contains(bound, name);
 1107|  2.02k|            if (contains < 0) {
  ------------------
  |  Branch (1107:17): [True: 0, False: 2.02k]
  ------------------
 1108|      0|                goto error;
 1109|      0|            }
 1110|  2.02k|            if (!contains) {
  ------------------
  |  Branch (1110:17): [True: 0, False: 2.02k]
  ------------------
 1111|      0|                Py_DECREF(name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1112|      0|                continue;       /* it's a global */
 1113|      0|            }
 1114|  2.02k|        }
 1115|       |        /* Propagate new free symbol up the lexical stack */
 1116|  2.02k|        if (PyDict_SetItem(symbols, name, v_free) < 0) {
  ------------------
  |  Branch (1116:13): [True: 0, False: 2.02k]
  ------------------
 1117|      0|            goto error;
 1118|      0|        }
 1119|  2.02k|        Py_DECREF(name);
  ------------------
  |  |  430|  2.02k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.02k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.02k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1120|  2.02k|    }
 1121|       |
 1122|       |    /* Check if loop ended because of exception in PyIter_Next */
 1123|  54.7k|    if (PyErr_Occurred()) {
  ------------------
  |  Branch (1123:9): [True: 0, False: 54.7k]
  ------------------
 1124|      0|        goto error;
 1125|      0|    }
 1126|       |
 1127|  54.7k|    Py_DECREF(itr);
  ------------------
  |  |  430|  54.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1128|  54.7k|    Py_DECREF(v_free);
  ------------------
  |  |  430|  54.7k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  54.7k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  54.7k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1129|  54.7k|    return 1;
 1130|      0|error:
 1131|      0|    Py_XDECREF(v_free);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1132|      0|    Py_XDECREF(itr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1133|      0|    Py_XDECREF(name);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1134|      0|    return 0;
 1135|  54.7k|}
symtable.c:symtable_exit_block:
 1441|  76.9k|{
 1442|  76.9k|    Py_ssize_t size;
 1443|       |
 1444|  76.9k|    st->st_cur = NULL;
 1445|  76.9k|    size = PyList_GET_SIZE(st->st_stack);
  ------------------
  |  |   38|  76.9k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  76.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  76.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1446|  76.9k|    if (size) {
  ------------------
  |  Branch (1446:9): [True: 76.9k, False: 0]
  ------------------
 1447|  76.9k|        if (PyList_SetSlice(st->st_stack, size - 1, size, NULL) < 0)
  ------------------
  |  Branch (1447:13): [True: 0, False: 76.9k]
  ------------------
 1448|      0|            return 0;
 1449|  76.9k|        if (--size)
  ------------------
  |  Branch (1449:13): [True: 66.2k, False: 10.7k]
  ------------------
 1450|  66.2k|            st->st_cur = (PySTEntryObject *)PyList_GET_ITEM(st->st_stack, size - 1);
  ------------------
  |  |   40|  66.2k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  66.2k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  66.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1450:45): [True: 66.2k, False: 0]
  ------------------
 1451|  76.9k|    }
 1452|  76.9k|    return 1;
 1453|  76.9k|}
symtable.c:symtable_enter_block:
 1499|  55.4k|{
 1500|  55.4k|    PySTEntryObject *ste = ste_new(st, name, block, ast, loc);
 1501|  55.4k|    if (ste == NULL) {
  ------------------
  |  Branch (1501:9): [True: 0, False: 55.4k]
  ------------------
 1502|      0|        return 0;
 1503|      0|    }
 1504|  55.4k|    int result = symtable_enter_existing_block(st, ste, /* add_to_children */true);
 1505|  55.4k|    Py_DECREF(ste);
  ------------------
  |  |  430|  55.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  55.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  55.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1506|  55.4k|    if (result == 0) {
  ------------------
  |  Branch (1506:9): [True: 0, False: 55.4k]
  ------------------
 1507|      0|        return 0;
 1508|      0|    }
 1509|  55.4k|    if (block == AnnotationBlock || block == TypeVariableBlock || block == TypeAliasBlock) {
  ------------------
  |  Branch (1509:9): [True: 18.2k, False: 37.2k]
  |  Branch (1509:37): [True: 1.52k, False: 35.7k]
  |  Branch (1509:67): [True: 385, False: 35.3k]
  ------------------
 1510|  20.1k|        _Py_DECLARE_STR(format, ".format");
 1511|       |        // We need to insert code that reads this "parameter" to the function.
 1512|  20.1k|        if (!symtable_add_def(st, &_Py_STR(format), DEF_PARAM, loc)) {
  ------------------
  |  |  938|  20.1k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  20.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  20.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(format), DEF_PARAM, loc)) {
  ------------------
  |  |  172|  20.1k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (1512:13): [True: 0, False: 20.1k]
  ------------------
 1513|      0|            symtable_exit_block(st);
 1514|      0|            return 0;
 1515|      0|        }
 1516|  20.1k|        if (!symtable_add_def(st, &_Py_STR(format), USE, loc)) {
  ------------------
  |  |  938|  20.1k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  20.1k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  20.1k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(format), USE, loc)) {
  ------------------
  |  |  174|  20.1k|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (1516:13): [True: 0, False: 20.1k]
  ------------------
 1517|      0|            symtable_exit_block(st);
 1518|      0|            return 0;
 1519|      0|        }
 1520|  20.1k|    }
 1521|  55.4k|    return 1;
 1522|  55.4k|}
symtable.c:ste_new:
  103|  63.2k|{
  104|  63.2k|    PySTEntryObject *ste = NULL;
  105|  63.2k|    PyObject *k = NULL;
  106|       |
  107|  63.2k|    k = PyLong_FromVoidPtr(key);
  108|  63.2k|    if (k == NULL)
  ------------------
  |  Branch (108:9): [True: 0, False: 63.2k]
  ------------------
  109|      0|        goto fail;
  110|  63.2k|    ste = PyObject_New(PySTEntryObject, &PySTEntry_Type);
  ------------------
  |  |  130|  63.2k|#define PyObject_New(type, typeobj) ((type *)_PyObject_New(typeobj))
  ------------------
  111|  63.2k|    if (ste == NULL) {
  ------------------
  |  Branch (111:9): [True: 0, False: 63.2k]
  ------------------
  112|      0|        Py_DECREF(k);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      0|        goto fail;
  114|      0|    }
  115|  63.2k|    ste->ste_table = st;
  116|  63.2k|    ste->ste_id = k; /* ste owns reference to k */
  117|       |
  118|  63.2k|    ste->ste_name = Py_NewRef(name);
  ------------------
  |  |  550|  63.2k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  63.2k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  63.2k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|  63.2k|    ste->ste_function_name = NULL;
  120|       |
  121|  63.2k|    ste->ste_symbols = NULL;
  122|  63.2k|    ste->ste_varnames = NULL;
  123|  63.2k|    ste->ste_children = NULL;
  124|       |
  125|  63.2k|    ste->ste_directives = NULL;
  126|  63.2k|    ste->ste_mangled_names = NULL;
  127|       |
  128|  63.2k|    ste->ste_type = block;
  129|  63.2k|    ste->ste_scope_info = NULL;
  130|       |
  131|  63.2k|    ste->ste_nested = 0;
  132|  63.2k|    ste->ste_varargs = 0;
  133|  63.2k|    ste->ste_varkeywords = 0;
  134|  63.2k|    ste->ste_annotations_used = 0;
  135|  63.2k|    ste->ste_loc = loc;
  136|       |
  137|  63.2k|    if (st->st_cur != NULL &&
  ------------------
  |  Branch (137:9): [True: 52.3k, False: 10.8k]
  ------------------
  138|  52.3k|        (st->st_cur->ste_nested ||
  ------------------
  |  Branch (138:10): [True: 8.57k, False: 43.8k]
  ------------------
  139|  43.8k|         ste_uses_fast_locals(st->st_cur)))
  ------------------
  |  Branch (139:10): [True: 10.3k, False: 33.4k]
  ------------------
  140|  18.9k|        ste->ste_nested = 1;
  141|  63.2k|    ste->ste_generator = 0;
  142|  63.2k|    ste->ste_coroutine = 0;
  143|  63.2k|    ste->ste_comprehension = NoComprehension;
  144|  63.2k|    ste->ste_returns_value = 0;
  145|  63.2k|    ste->ste_needs_class_closure = 0;
  146|  63.2k|    ste->ste_parent = (block == InlinedComprehensionBlock) ? st->st_cur : NULL;
  ------------------
  |  Branch (146:23): [True: 3.34k, False: 59.8k]
  ------------------
  147|  63.2k|    ste->ste_comp_iter_target = 0;
  148|  63.2k|    ste->ste_can_see_class_scope = 0;
  149|  63.2k|    ste->ste_comp_iter_expr = 0;
  150|  63.2k|    ste->ste_needs_classdict = 0;
  151|  63.2k|    ste->ste_has_conditional_annotations = 0;
  152|  63.2k|    ste->ste_in_conditional_block = 0;
  153|  63.2k|    ste->ste_in_try_block = 0;
  154|  63.2k|    ste->ste_in_unevaluated_annotation = 0;
  155|  63.2k|    ste->ste_annotation_block = NULL;
  156|       |
  157|  63.2k|    ste->ste_has_docstring = 0;
  158|       |
  159|  63.2k|    ste->ste_method = 0;
  160|  63.2k|    if (st->st_cur != NULL &&
  ------------------
  |  Branch (160:9): [True: 52.3k, False: 10.8k]
  ------------------
  161|  52.3k|        st->st_cur->ste_type == ClassBlock &&
  ------------------
  |  Branch (161:9): [True: 6.26k, False: 46.1k]
  ------------------
  162|  6.26k|        block == FunctionBlock) {
  ------------------
  |  Branch (162:9): [True: 16, False: 6.24k]
  ------------------
  163|     16|        ste->ste_method = 1;
  164|     16|    }
  165|       |
  166|  63.2k|    ste->ste_symbols = PyDict_New();
  167|  63.2k|    ste->ste_varnames = PyList_New(0);
  168|  63.2k|    ste->ste_children = PyList_New(0);
  169|  63.2k|    if (ste->ste_symbols == NULL
  ------------------
  |  Branch (169:9): [True: 0, False: 63.2k]
  ------------------
  170|  63.2k|        || ste->ste_varnames == NULL
  ------------------
  |  Branch (170:12): [True: 0, False: 63.2k]
  ------------------
  171|  63.2k|        || ste->ste_children == NULL)
  ------------------
  |  Branch (171:12): [True: 0, False: 63.2k]
  ------------------
  172|      0|        goto fail;
  173|       |
  174|  63.2k|    if (PyDict_SetItem(st->st_blocks, ste->ste_id, (PyObject *)ste) < 0)
  ------------------
  |  Branch (174:9): [True: 0, False: 63.2k]
  ------------------
  175|      0|        goto fail;
  176|       |
  177|  63.2k|    return ste;
  178|      0| fail:
  179|      0|    Py_XDECREF(ste);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|       |    return NULL;
  181|  63.2k|}
symtable.c:symtable_enter_existing_block:
 1457|  77.1k|{
 1458|  77.1k|    if (PyList_Append(st->st_stack, (PyObject *)ste) < 0) {
  ------------------
  |  Branch (1458:9): [True: 0, False: 77.1k]
  ------------------
 1459|      0|        return 0;
 1460|      0|    }
 1461|  77.1k|    PySTEntryObject *prev = st->st_cur;
 1462|       |    /* bpo-37757: For now, disallow *all* assignment expressions in the
 1463|       |     * outermost iterator expression of a comprehension, even those inside
 1464|       |     * a nested comprehension or a lambda expression.
 1465|       |     */
 1466|  77.1k|    if (prev) {
  ------------------
  |  Branch (1466:9): [True: 66.3k, False: 10.8k]
  ------------------
 1467|  66.3k|        ste->ste_comp_iter_expr = prev->ste_comp_iter_expr;
 1468|  66.3k|    }
 1469|       |    /* No need to inherit ste_mangled_names in classes, where all names
 1470|       |     * are mangled. */
 1471|  77.1k|    if (prev && prev->ste_mangled_names != NULL && ste->ste_type != ClassBlock) {
  ------------------
  |  Branch (1471:9): [True: 66.3k, False: 10.8k]
  |  Branch (1471:17): [True: 3.28k, False: 63.0k]
  |  Branch (1471:52): [True: 1.52k, False: 1.75k]
  ------------------
 1472|  1.52k|        ste->ste_mangled_names = Py_NewRef(prev->ste_mangled_names);
  ------------------
  |  |  550|  1.52k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  1.52k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.52k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1473|  1.52k|    }
 1474|       |    /* The entry is owned by the stack. Borrow it for st_cur. */
 1475|  77.1k|    st->st_cur = ste;
 1476|       |
 1477|       |    /* If "from __future__ import annotations" is active,
 1478|       |     * annotation blocks shouldn't have any affect on the symbol table since in
 1479|       |     * the compilation stage, they will all be transformed to strings. */
 1480|  77.1k|    if (st->st_future->ff_features & CO_FUTURE_ANNOTATIONS && ste->ste_type == AnnotationBlock) {
  ------------------
  |  |  147|   154k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
  |  Branch (1480:9): [True: 17.8k, False: 59.2k]
  |  Branch (1480:63): [True: 9.55k, False: 8.31k]
  ------------------
 1481|  9.55k|        return 1;
 1482|  9.55k|    }
 1483|       |
 1484|  67.5k|    if (ste->ste_type == ModuleBlock)
  ------------------
  |  Branch (1484:9): [True: 10.8k, False: 56.7k]
  ------------------
 1485|  10.8k|        st->st_global = st->st_cur->ste_symbols;
 1486|       |
 1487|  67.5k|    if (add_to_children && prev) {
  ------------------
  |  Branch (1487:9): [True: 55.9k, False: 11.6k]
  |  Branch (1487:28): [True: 45.0k, False: 10.8k]
  ------------------
 1488|  45.0k|        if (PyList_Append(prev->ste_children, (PyObject *)ste) < 0) {
  ------------------
  |  Branch (1488:13): [True: 0, False: 45.0k]
  ------------------
 1489|      0|            symtable_exit_block(st);
 1490|      0|            return 0;
 1491|      0|        }
 1492|  45.0k|    }
 1493|  67.5k|    return 1;
 1494|  67.5k|}
symtable.c:symtable_add_def:
 1676|   145k|{
 1677|   145k|    return symtable_add_def_ctx(st, name, flag, loc,
 1678|   145k|                                flag == USE ? Load : Store);
  ------------------
  |  |  174|   145k|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (1678:33): [True: 34.3k, False: 111k]
  ------------------
 1679|   145k|}
symtable.c:symtable_add_def_ctx:
 1660|   538k|{
 1661|   538k|    int write_mask = DEF_PARAM | DEF_LOCAL | DEF_IMPORT;
  ------------------
  |  |  172|   538k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                  int write_mask = DEF_PARAM | DEF_LOCAL | DEF_IMPORT;
  ------------------
  |  |  171|   538k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                  int write_mask = DEF_PARAM | DEF_LOCAL | DEF_IMPORT;
  ------------------
  |  |  176|   538k|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  ------------------
 1662|   538k|    if ((flag & write_mask) && !check_name(st, name, loc, ctx)) {
  ------------------
  |  Branch (1662:9): [True: 227k, False: 310k]
  |  Branch (1662:32): [True: 4, False: 227k]
  ------------------
 1663|      4|        return 0;
 1664|      4|    }
 1665|   538k|    if ((flag & DEF_TYPE_PARAM) && st->st_cur->ste_mangled_names != NULL) {
  ------------------
  |  |  179|   538k|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
  |  Branch (1665:9): [True: 8.31k, False: 530k]
  |  Branch (1665:36): [True: 3.39k, False: 4.92k]
  ------------------
 1666|  3.39k|        if(PySet_Add(st->st_cur->ste_mangled_names, name) < 0) {
  ------------------
  |  Branch (1666:12): [True: 0, False: 3.39k]
  ------------------
 1667|      0|            return 0;
 1668|      0|        }
 1669|  3.39k|    }
 1670|   538k|    return symtable_add_def_helper(st, name, flag, st->st_cur, loc);
 1671|   538k|}
symtable.c:check_name:
 1616|   248k|{
 1617|   248k|    if (ctx == Store && _PyUnicode_EqualToASCIIString(name, "__debug__")) {
  ------------------
  |  Branch (1617:9): [True: 227k, False: 20.4k]
  |  Branch (1617:25): [True: 6, False: 227k]
  ------------------
 1618|      6|        PyErr_SetString(PyExc_SyntaxError, "cannot assign to __debug__");
 1619|      6|        SET_ERROR_LOCATION(st->st_filename, loc);
  ------------------
  |  |   89|      6|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      6|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1620|      6|        return 0;
 1621|      6|    }
 1622|   248k|    if (ctx == Del && _PyUnicode_EqualToASCIIString(name, "__debug__")) {
  ------------------
  |  Branch (1622:9): [True: 4.55k, False: 243k]
  |  Branch (1622:23): [True: 0, False: 4.55k]
  ------------------
 1623|      0|        PyErr_SetString(PyExc_SyntaxError, "cannot delete __debug__");
 1624|      0|        SET_ERROR_LOCATION(st->st_filename, loc);
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1625|      0|        return 0;
 1626|      0|    }
 1627|   248k|    return 1;
 1628|   248k|}
symtable.c:symtable_add_def_helper:
 1547|   540k|{
 1548|   540k|    PyObject *o;
 1549|   540k|    long val = 0;
 1550|   540k|    PyObject *mangled = _Py_MaybeMangle(st->st_private, st->st_cur, name);
 1551|       |
 1552|   540k|    if (!mangled)
  ------------------
  |  Branch (1552:9): [True: 0, False: 540k]
  ------------------
 1553|      0|        return 0;
 1554|   540k|    if ((o = PyDict_GetItemWithError(ste->ste_symbols, mangled))) {
  ------------------
  |  Branch (1554:9): [True: 294k, False: 246k]
  ------------------
 1555|   294k|        val = PyLong_AsLong(o);
 1556|   294k|        if (val == -1 && PyErr_Occurred()) {
  ------------------
  |  Branch (1556:13): [True: 0, False: 294k]
  |  Branch (1556:26): [True: 0, False: 0]
  ------------------
 1557|      0|            goto error;
 1558|      0|        }
 1559|   294k|        if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
  ------------------
  |  |  172|   294k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                      if ((flag & DEF_PARAM) && (val & DEF_PARAM)) {
  ------------------
  |  |  172|     39|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (1559:13): [True: 39, False: 293k]
  |  Branch (1559:35): [True: 39, False: 0]
  ------------------
 1560|       |            /* Is it better to use 'mangled' or 'name' here? */
 1561|     39|            PyErr_Format(PyExc_SyntaxError, DUPLICATE_PARAMETER, name);
  ------------------
  |  |  393|     39|#define DUPLICATE_PARAMETER \
  |  |  394|     39|"duplicate parameter '%U' in function definition"
  ------------------
 1562|     39|            SET_ERROR_LOCATION(st->st_filename, loc);
  ------------------
  |  |   89|     39|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|     39|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1563|     39|            goto error;
 1564|     39|        }
 1565|   293k|        if ((flag & DEF_TYPE_PARAM) && (val & DEF_TYPE_PARAM)) {
  ------------------
  |  |  179|   293k|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
                      if ((flag & DEF_TYPE_PARAM) && (val & DEF_TYPE_PARAM)) {
  ------------------
  |  |  179|     12|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
  |  Branch (1565:13): [True: 12, False: 293k]
  |  Branch (1565:40): [True: 12, False: 0]
  ------------------
 1566|     12|            PyErr_Format(PyExc_SyntaxError, DUPLICATE_TYPE_PARAM, name);
  ------------------
  |  |   77|     12|#define DUPLICATE_TYPE_PARAM \
  |  |   78|     12|"duplicate type parameter '%U'"
  ------------------
 1567|     12|            SET_ERROR_LOCATION(st->st_filename, loc);
  ------------------
  |  |   89|     12|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|     12|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1568|     12|            goto error;
 1569|     12|        }
 1570|   293k|    }
 1571|   246k|    else if (PyErr_Occurred()) {
  ------------------
  |  Branch (1571:14): [True: 0, False: 246k]
  ------------------
 1572|      0|        goto error;
 1573|      0|    }
 1574|       |
 1575|   540k|    int to_add = flag;
 1576|   540k|    if (ste->ste_comp_iter_target) {
  ------------------
  |  Branch (1576:9): [True: 19.6k, False: 520k]
  ------------------
 1577|       |        /* This name is an iteration variable in a comprehension,
 1578|       |         * so check for a binding conflict with any named expressions.
 1579|       |         * Otherwise, mark it as an iteration variable so subsequent
 1580|       |         * named expressions can check for conflicts.
 1581|       |         */
 1582|  19.6k|        if ((val | flag) & (DEF_GLOBAL | DEF_NONLOCAL)) {
  ------------------
  |  |  170|  19.6k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                      if ((val | flag) & (DEF_GLOBAL | DEF_NONLOCAL)) {
  ------------------
  |  |  173|  19.6k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
  |  Branch (1582:13): [True: 1, False: 19.6k]
  ------------------
 1583|      1|            PyErr_Format(PyExc_SyntaxError,
 1584|      1|                NAMED_EXPR_COMP_INNER_LOOP_CONFLICT, name);
  ------------------
  |  |   59|      1|#define NAMED_EXPR_COMP_INNER_LOOP_CONFLICT \
  |  |   60|      1|"comprehension inner loop cannot rebind assignment expression target '%U'"
  ------------------
 1585|      1|            SET_ERROR_LOCATION(st->st_filename, loc);
  ------------------
  |  |   89|      1|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      1|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1586|      1|            goto error;
 1587|      1|        }
 1588|  19.6k|        to_add |= DEF_COMP_ITER;
  ------------------
  |  |  178|  19.6k|#define DEF_COMP_ITER (2<<8)     /* this name is a comprehension iteration variable */
  ------------------
 1589|  19.6k|    }
 1590|   540k|    if (!symtable_add_flag(ste->ste_symbols, mangled, to_add)) {
  ------------------
  |  Branch (1590:9): [True: 0, False: 540k]
  ------------------
 1591|      0|        goto error;
 1592|      0|    }
 1593|       |
 1594|   540k|    if (flag & DEF_PARAM) {
  ------------------
  |  |  172|   540k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (1594:9): [True: 32.8k, False: 507k]
  ------------------
 1595|  32.8k|        if (PyList_Append(ste->ste_varnames, mangled) < 0)
  ------------------
  |  Branch (1595:13): [True: 0, False: 32.8k]
  ------------------
 1596|      0|            goto error;
 1597|  32.8k|    }
 1598|   507k|    else if (flag & DEF_GLOBAL) {
  ------------------
  |  |  170|   507k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
  |  Branch (1598:14): [True: 1.83k, False: 505k]
  ------------------
 1599|       |        /* XXX need to update DEF_GLOBAL for other flags too;
 1600|       |           perhaps only DEF_FREE_GLOBAL */
 1601|  1.83k|        if (!symtable_add_flag(st->st_global, mangled, flag)) {
  ------------------
  |  Branch (1601:13): [True: 0, False: 1.83k]
  ------------------
 1602|      0|            goto error;
 1603|      0|        }
 1604|  1.83k|    }
 1605|   540k|    Py_DECREF(mangled);
  ------------------
  |  |  430|   540k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|   540k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   540k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1606|   540k|    return 1;
 1607|       |
 1608|     52|error:
 1609|     52|    Py_DECREF(mangled);
  ------------------
  |  |  430|     52|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     52|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     52|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1610|     52|    return 0;
 1611|   540k|}
symtable.c:symtable_visit_stmt:
 1913|   173k|{
 1914|   173k|    ENTER_RECURSIVE();
  ------------------
  |  | 1802|   173k|#define ENTER_RECURSIVE() \
  |  | 1803|   173k|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (1803:5): [True: 0, False: 173k]
  |  |  ------------------
  |  | 1804|      0|    return 0; \
  |  | 1805|      0|}
  ------------------
 1915|   173k|    switch (s->kind) {
  ------------------
  |  Branch (1915:13): [True: 173k, False: 0]
  ------------------
 1916|  5.19k|    case FunctionDef_kind: {
  ------------------
  |  Branch (1916:5): [True: 5.19k, False: 168k]
  ------------------
 1917|  5.19k|        if (!symtable_add_def(st, s->v.FunctionDef.name, DEF_LOCAL, LOCATION(s)))
  ------------------
  |  |  171|  5.19k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, s->v.FunctionDef.name, DEF_LOCAL, LOCATION(s)))
  ------------------
  |  |   86|  5.19k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  5.19k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  5.19k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  5.19k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  5.19k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  5.19k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (1917:13): [True: 0, False: 5.19k]
  ------------------
 1918|      0|            return 0;
 1919|  5.19k|        if (s->v.FunctionDef.args->defaults)
  ------------------
  |  Branch (1919:13): [True: 5.19k, False: 0]
  ------------------
 1920|  5.19k|            VISIT_SEQ(st, expr, s->v.FunctionDef.args->defaults);
  ------------------
  |  | 1755|  5.19k|    do { \
  |  | 1756|  5.19k|        Py_ssize_t i; \
  |  | 1757|  5.19k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  5.50k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.50k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 313, False: 5.19k]
  |  |  ------------------
  |  | 1759|    313|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    313|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    313|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    313|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 313]
  |  |  ------------------
  |  | 1761|    313|                return 0;                 \
  |  | 1762|    313|        } \
  |  | 1763|  5.19k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 5.19k]
  |  |  ------------------
  ------------------
 1921|  5.19k|        if (s->v.FunctionDef.args->kw_defaults)
  ------------------
  |  Branch (1921:13): [True: 5.19k, False: 0]
  ------------------
 1922|  5.19k|            VISIT_SEQ_WITH_NULL(st, expr, s->v.FunctionDef.args->kw_defaults);
  ------------------
  |  | 1777|  5.19k|    do { \
  |  | 1778|  5.19k|        int i = 0; \
  |  | 1779|  5.19k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1780|  5.44k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.44k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  10.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.44k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1780:21): [True: 259, False: 5.19k]
  |  |  ------------------
  |  | 1781|    259|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    259|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    259|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1782|    259|            if (!elt) continue; /* can be NULL */ \
  |  |  ------------------
  |  |  |  Branch (1782:17): [True: 205, False: 54]
  |  |  ------------------
  |  | 1783|    259|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1783:17): [True: 0, False: 54]
  |  |  ------------------
  |  | 1784|     54|                return 0;             \
  |  | 1785|     54|        } \
  |  | 1786|  5.19k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1786:13): [Folded, False: 5.19k]
  |  |  ------------------
  ------------------
 1923|  5.19k|        if (s->v.FunctionDef.decorator_list)
  ------------------
  |  Branch (1923:13): [True: 197, False: 4.99k]
  ------------------
 1924|    197|            VISIT_SEQ(st, expr, s->v.FunctionDef.decorator_list);
  ------------------
  |  | 1755|    197|    do { \
  |  | 1756|    197|        Py_ssize_t i; \
  |  | 1757|    197|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.04k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.04k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.04k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 852, False: 197]
  |  |  ------------------
  |  | 1759|    852|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    852|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    852|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    852|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 852]
  |  |  ------------------
  |  | 1761|    852|                return 0;                 \
  |  | 1762|    852|        } \
  |  | 1763|    197|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 197]
  |  |  ------------------
  ------------------
 1925|  5.19k|        if (asdl_seq_LEN(s->v.FunctionDef.type_params) > 0) {
  ------------------
  |  |   83|  5.19k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  10.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2.72k, False: 2.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1925:13): [True: 2.46k, False: 2.72k]
  ------------------
 1926|  2.46k|            if (!symtable_enter_type_param_block(
  ------------------
  |  Branch (1926:17): [True: 0, False: 2.46k]
  ------------------
 1927|  2.46k|                    st, s->v.FunctionDef.name,
 1928|  2.46k|                    (void *)s->v.FunctionDef.type_params,
 1929|  2.46k|                    s->v.FunctionDef.args->defaults != NULL,
 1930|  2.46k|                    has_kwonlydefaults(s->v.FunctionDef.args->kwonlyargs,
 1931|  2.46k|                                       s->v.FunctionDef.args->kw_defaults),
 1932|  2.46k|                    s->kind,
 1933|  2.46k|                    LOCATION(s))) {
  ------------------
  |  |   86|  2.46k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.46k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.46k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.46k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.46k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.46k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1934|      0|                return 0;
 1935|      0|            }
 1936|  2.46k|            VISIT_SEQ(st, type_param, s->v.FunctionDef.type_params);
  ------------------
  |  | 1755|  2.46k|    do { \
  |  | 1756|  2.46k|        Py_ssize_t i; \
  |  | 1757|  2.46k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  7.36k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  7.36k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  14.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.36k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 4.90k, False: 2.46k]
  |  |  ------------------
  |  | 1759|  4.90k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  4.90k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.90k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  4.90k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 3, False: 4.89k]
  |  |  ------------------
  |  | 1761|  4.90k|                return 0;                 \
  |  | 1762|  4.90k|        } \
  |  | 1763|  2.46k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.46k]
  |  |  ------------------
  ------------------
 1937|  2.46k|        }
 1938|  5.18k|        PySTEntryObject *new_ste = ste_new(st, s->v.FunctionDef.name, FunctionBlock, (void *)s,
 1939|  5.18k|                                           LOCATION(s));
  ------------------
  |  |   86|  5.18k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  5.18k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  5.18k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  5.18k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  5.18k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  5.18k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1940|  5.18k|        if (!new_ste) {
  ------------------
  |  Branch (1940:13): [True: 0, False: 5.18k]
  ------------------
 1941|      0|            return 0;
 1942|      0|        }
 1943|       |
 1944|  5.18k|        if (_PyAST_GetDocString(s->v.FunctionDef.body)) {
  ------------------
  |  Branch (1944:13): [True: 628, False: 4.55k]
  ------------------
 1945|    628|            new_ste->ste_has_docstring = 1;
 1946|    628|        }
 1947|       |
 1948|  5.18k|        if (!symtable_visit_annotations(st, s, s->v.FunctionDef.args,
  ------------------
  |  Branch (1948:13): [True: 2, False: 5.18k]
  ------------------
 1949|  5.18k|                                        s->v.FunctionDef.returns, new_ste)) {
 1950|      2|            Py_DECREF(new_ste);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1951|      2|            return 0;
 1952|      2|        }
 1953|  5.18k|        if (!symtable_enter_existing_block(st, new_ste, /* add_to_children */true)) {
  ------------------
  |  Branch (1953:13): [True: 0, False: 5.18k]
  ------------------
 1954|      0|            Py_DECREF(new_ste);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1955|      0|            return 0;
 1956|      0|        }
 1957|  5.18k|        Py_DECREF(new_ste);
  ------------------
  |  |  430|  5.18k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  5.18k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.18k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1958|  5.18k|        VISIT(st, arguments, s->v.FunctionDef.args);
  ------------------
  |  | 1748|  5.18k|    do { \
  |  | 1749|  5.18k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 7, False: 5.17k]
  |  |  ------------------
  |  | 1750|      7|            return 0; \
  |  | 1751|      7|        } \
  |  | 1752|  5.18k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 5.17k]
  |  |  ------------------
  ------------------
 1959|  5.17k|        VISIT_SEQ(st, stmt, s->v.FunctionDef.body);
  ------------------
  |  | 1755|  5.17k|    do { \
  |  | 1756|  5.17k|        Py_ssize_t i; \
  |  | 1757|  5.17k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  11.6k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  11.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  23.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 11.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 6.44k, False: 5.17k]
  |  |  ------------------
  |  | 1759|  6.44k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  6.44k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.44k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  6.44k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 3, False: 6.43k]
  |  |  ------------------
  |  | 1761|  6.44k|                return 0;                 \
  |  | 1762|  6.44k|        } \
  |  | 1763|  5.17k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 5.17k]
  |  |  ------------------
  ------------------
 1960|  5.17k|        if (!symtable_exit_block(st))
  ------------------
  |  Branch (1960:13): [True: 0, False: 5.17k]
  ------------------
 1961|      0|            return 0;
 1962|  5.17k|        if (asdl_seq_LEN(s->v.FunctionDef.type_params) > 0) {
  ------------------
  |  |   83|  5.17k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  10.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2.71k, False: 2.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1962:13): [True: 2.46k, False: 2.71k]
  ------------------
 1963|  2.46k|            if (!symtable_exit_block(st))
  ------------------
  |  Branch (1963:17): [True: 0, False: 2.46k]
  ------------------
 1964|      0|                return 0;
 1965|  2.46k|        }
 1966|  5.17k|        break;
 1967|  5.17k|    }
 1968|  12.2k|    case ClassDef_kind: {
  ------------------
  |  Branch (1968:5): [True: 12.2k, False: 161k]
  ------------------
 1969|  12.2k|        PyObject *tmp;
 1970|  12.2k|        if (!symtable_add_def(st, s->v.ClassDef.name, DEF_LOCAL, LOCATION(s)))
  ------------------
  |  |  171|  12.2k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, s->v.ClassDef.name, DEF_LOCAL, LOCATION(s)))
  ------------------
  |  |   86|  12.2k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  12.2k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  12.2k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  12.2k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  12.2k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  12.2k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (1970:13): [True: 0, False: 12.2k]
  ------------------
 1971|      0|            return 0;
 1972|  12.2k|        if (s->v.ClassDef.decorator_list)
  ------------------
  |  Branch (1972:13): [True: 314, False: 11.9k]
  ------------------
 1973|    314|            VISIT_SEQ(st, expr, s->v.ClassDef.decorator_list);
  ------------------
  |  | 1755|    314|    do { \
  |  | 1756|    314|        Py_ssize_t i; \
  |  | 1757|    314|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.03k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.03k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.07k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.03k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 724, False: 314]
  |  |  ------------------
  |  | 1759|    724|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    724|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    724|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    724|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 724]
  |  |  ------------------
  |  | 1761|    724|                return 0;                 \
  |  | 1762|    724|        } \
  |  | 1763|    314|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 314]
  |  |  ------------------
  ------------------
 1974|  12.2k|        tmp = st->st_private;
 1975|  12.2k|        if (asdl_seq_LEN(s->v.ClassDef.type_params) > 0) {
  ------------------
  |  |   83|  12.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  24.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 10.4k, False: 1.76k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1975:13): [True: 1.76k, False: 10.4k]
  ------------------
 1976|  1.76k|            if (!symtable_enter_type_param_block(st, s->v.ClassDef.name,
  ------------------
  |  Branch (1976:17): [True: 0, False: 1.76k]
  ------------------
 1977|  1.76k|                                                (void *)s->v.ClassDef.type_params,
 1978|  1.76k|                                                false, false, s->kind,
 1979|  1.76k|                                                LOCATION(s))) {
  ------------------
  |  |   86|  1.76k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.76k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.76k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.76k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.76k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.76k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1980|      0|                return 0;
 1981|      0|            }
 1982|  1.76k|            st->st_private = s->v.ClassDef.name;
 1983|  1.76k|            st->st_cur->ste_mangled_names = PySet_New(NULL);
 1984|  1.76k|            if (!st->st_cur->ste_mangled_names) {
  ------------------
  |  Branch (1984:17): [True: 0, False: 1.76k]
  ------------------
 1985|      0|                return 0;
 1986|      0|            }
 1987|  1.76k|            VISIT_SEQ(st, type_param, s->v.ClassDef.type_params);
  ------------------
  |  | 1755|  1.76k|    do { \
  |  | 1756|  1.76k|        Py_ssize_t i; \
  |  | 1757|  1.76k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  5.14k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.14k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  10.2k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.14k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 3.39k, False: 1.75k]
  |  |  ------------------
  |  | 1759|  3.39k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.39k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.39k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  3.39k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 9, False: 3.38k]
  |  |  ------------------
  |  | 1761|  3.39k|                return 0;                 \
  |  | 1762|  3.39k|        } \
  |  | 1763|  1.76k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.75k]
  |  |  ------------------
  ------------------
 1988|  1.76k|        }
 1989|  12.2k|        VISIT_SEQ(st, expr, s->v.ClassDef.bases);
  ------------------
  |  | 1755|  12.2k|    do { \
  |  | 1756|  12.2k|        Py_ssize_t i; \
  |  | 1757|  12.2k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  12.3k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  12.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  24.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 12.0k, False: 351]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 181, False: 12.2k]
  |  |  ------------------
  |  | 1759|    181|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    181|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    181|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    181|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 180]
  |  |  ------------------
  |  | 1761|    181|                return 0;                 \
  |  | 1762|    181|        } \
  |  | 1763|  12.2k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 12.2k]
  |  |  ------------------
  ------------------
 1990|  12.2k|        if (!check_keywords(st, s->v.ClassDef.keywords)) {
  ------------------
  |  Branch (1990:13): [True: 0, False: 12.2k]
  ------------------
 1991|      0|            return 0;
 1992|      0|        }
 1993|  12.2k|        VISIT_SEQ(st, keyword, s->v.ClassDef.keywords);
  ------------------
  |  | 1755|  12.2k|    do { \
  |  | 1756|  12.2k|        Py_ssize_t i; \
  |  | 1757|  12.2k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  12.2k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  12.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  24.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 12.1k, False: 114]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 58, False: 12.2k]
  |  |  ------------------
  |  | 1759|     58|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     58|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     58|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|     58|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 57]
  |  |  ------------------
  |  | 1761|     58|                return 0;                 \
  |  | 1762|     58|        } \
  |  | 1763|  12.2k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 12.2k]
  |  |  ------------------
  ------------------
 1994|  12.2k|        if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock,
  ------------------
  |  Branch (1994:13): [True: 0, False: 12.2k]
  ------------------
 1995|  12.2k|                                  (void *)s, LOCATION(s))) {
  ------------------
  |  |   86|  12.2k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  12.2k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  12.2k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  12.2k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  12.2k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  12.2k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1996|      0|            return 0;
 1997|      0|        }
 1998|  12.2k|        st->st_private = s->v.ClassDef.name;
 1999|  12.2k|        if (asdl_seq_LEN(s->v.ClassDef.type_params) > 0) {
  ------------------
  |  |   83|  12.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  24.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 10.4k, False: 1.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1999:13): [True: 1.75k, False: 10.4k]
  ------------------
 2000|  1.75k|            if (!symtable_add_def(st, &_Py_ID(__type_params__),
  ------------------
  |  |  936|  1.75k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.75k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.75k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2000:17): [True: 0, False: 1.75k]
  ------------------
 2001|  1.75k|                                  DEF_LOCAL, LOCATION(s))) {
  ------------------
  |  |  171|  1.75k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                                                DEF_LOCAL, LOCATION(s))) {
  ------------------
  |  |   86|  1.75k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.75k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.75k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.75k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.75k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.75k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2002|      0|                return 0;
 2003|      0|            }
 2004|  1.75k|            _Py_DECLARE_STR(type_params, ".type_params");
 2005|  1.75k|            if (!symtable_add_def(st, &_Py_STR(type_params),
  ------------------
  |  |  938|  1.75k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.75k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.75k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2005:17): [True: 0, False: 1.75k]
  ------------------
 2006|  1.75k|                                  USE, LOCATION(s))) {
  ------------------
  |  |  174|  1.75k|#define USE (2<<3)               /* name is used */
  ------------------
                                                USE, LOCATION(s))) {
  ------------------
  |  |   86|  1.75k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.75k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.75k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.75k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.75k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.75k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2007|      0|                return 0;
 2008|      0|            }
 2009|  1.75k|        }
 2010|       |
 2011|  12.2k|        if (_PyAST_GetDocString(s->v.ClassDef.body)) {
  ------------------
  |  Branch (2011:13): [True: 1.15k, False: 11.0k]
  ------------------
 2012|  1.15k|            st->st_cur->ste_has_docstring = 1;
 2013|  1.15k|        }
 2014|       |
 2015|  12.2k|        VISIT_SEQ(st, stmt, s->v.ClassDef.body);
  ------------------
  |  | 1755|  12.2k|    do { \
  |  | 1756|  12.2k|        Py_ssize_t i; \
  |  | 1757|  12.2k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  56.6k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  56.6k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   113k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 56.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 44.4k, False: 12.2k]
  |  |  ------------------
  |  | 1759|  44.4k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  44.4k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  44.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  44.4k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 8, False: 44.4k]
  |  |  ------------------
  |  | 1761|  44.4k|                return 0;                 \
  |  | 1762|  44.4k|        } \
  |  | 1763|  12.2k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 12.2k]
  |  |  ------------------
  ------------------
 2016|  12.2k|        if (!symtable_exit_block(st))
  ------------------
  |  Branch (2016:13): [True: 0, False: 12.2k]
  ------------------
 2017|      0|            return 0;
 2018|  12.2k|        if (asdl_seq_LEN(s->v.ClassDef.type_params) > 0) {
  ------------------
  |  |   83|  12.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  24.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 10.4k, False: 1.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2018:13): [True: 1.75k, False: 10.4k]
  ------------------
 2019|  1.75k|            if (!symtable_exit_block(st))
  ------------------
  |  Branch (2019:17): [True: 0, False: 1.75k]
  ------------------
 2020|      0|                return 0;
 2021|  1.75k|        }
 2022|  12.2k|        st->st_private = tmp;
 2023|  12.2k|        break;
 2024|  12.2k|    }
 2025|    385|    case TypeAlias_kind: {
  ------------------
  |  Branch (2025:5): [True: 385, False: 172k]
  ------------------
 2026|    385|        VISIT(st, expr, s->v.TypeAlias.name);
  ------------------
  |  | 1748|    385|    do { \
  |  | 1749|    385|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 385]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    385|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 385]
  |  |  ------------------
  ------------------
 2027|    385|        assert(s->v.TypeAlias.name->kind == Name_kind);
  ------------------
  |  Branch (2027:9): [True: 385, False: 0]
  ------------------
 2028|    385|        PyObject *name = s->v.TypeAlias.name->v.Name.id;
 2029|    385|        int is_in_class = st->st_cur->ste_type == ClassBlock;
 2030|    385|        int is_generic = asdl_seq_LEN(s->v.TypeAlias.type_params) > 0;
  ------------------
  |  |   83|    385|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    770|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 384, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2031|    385|        if (is_generic) {
  ------------------
  |  Branch (2031:13): [True: 1, False: 384]
  ------------------
 2032|      1|            if (!symtable_enter_type_param_block(
  ------------------
  |  Branch (2032:17): [True: 0, False: 1]
  ------------------
 2033|      1|                    st, name,
 2034|      1|                    (void *)s->v.TypeAlias.type_params,
 2035|      1|                    false, false, s->kind,
 2036|      1|                    LOCATION(s))) {
  ------------------
  |  |   86|      1|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      1|    (_Py_SourceLocation){ \
  |  |  |  |   59|      1|               .lineno = (n)->lineno, \
  |  |  |  |   60|      1|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      1|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      1|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2037|      0|                return 0;
 2038|      0|            }
 2039|      1|            VISIT_SEQ(st, type_param, s->v.TypeAlias.type_params);
  ------------------
  |  | 1755|      1|    do { \
  |  | 1756|      1|        Py_ssize_t i; \
  |  | 1757|      1|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|      2|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|      2|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      4|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1, False: 1]
  |  |  ------------------
  |  | 1759|      1|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|      1|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 1]
  |  |  ------------------
  |  | 1761|      1|                return 0;                 \
  |  | 1762|      1|        } \
  |  | 1763|      1|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1]
  |  |  ------------------
  ------------------
 2040|      1|        }
 2041|    385|        if (!symtable_enter_block(st, name, TypeAliasBlock,
  ------------------
  |  Branch (2041:13): [True: 0, False: 385]
  ------------------
 2042|    385|                                  (void *)s, LOCATION(s))) {
  ------------------
  |  |   86|    385|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    385|    (_Py_SourceLocation){ \
  |  |  |  |   59|    385|               .lineno = (n)->lineno, \
  |  |  |  |   60|    385|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    385|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    385|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2043|      0|            return 0;
 2044|      0|        }
 2045|    385|        st->st_cur->ste_can_see_class_scope = is_in_class;
 2046|    385|        if (is_in_class && !symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(s->v.TypeAlias.value))) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (is_in_class && !symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(s->v.TypeAlias.value))) {
  ------------------
  |  |  174|      0|#define USE (2<<3)               /* name is used */
  ------------------
                      if (is_in_class && !symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(s->v.TypeAlias.value))) {
  ------------------
  |  |   86|      0|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2046:13): [True: 0, False: 385]
  |  Branch (2046:28): [True: 0, False: 0]
  ------------------
 2047|      0|            return 0;
 2048|      0|        }
 2049|    385|        VISIT(st, expr, s->v.TypeAlias.value);
  ------------------
  |  | 1748|    385|    do { \
  |  | 1749|    385|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 383]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|    385|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 383]
  |  |  ------------------
  ------------------
 2050|    383|        if (!symtable_exit_block(st))
  ------------------
  |  Branch (2050:13): [True: 0, False: 383]
  ------------------
 2051|      0|            return 0;
 2052|    383|        if (is_generic) {
  ------------------
  |  Branch (2052:13): [True: 1, False: 382]
  ------------------
 2053|      1|            if (!symtable_exit_block(st))
  ------------------
  |  Branch (2053:17): [True: 0, False: 1]
  ------------------
 2054|      0|                return 0;
 2055|      1|        }
 2056|    383|        break;
 2057|    383|    }
 2058|    383|    case Return_kind:
  ------------------
  |  Branch (2058:5): [True: 363, False: 172k]
  ------------------
 2059|    363|        if (s->v.Return.value) {
  ------------------
  |  Branch (2059:13): [True: 59, False: 304]
  ------------------
 2060|     59|            VISIT(st, expr, s->v.Return.value);
  ------------------
  |  | 1748|     59|    do { \
  |  | 1749|     59|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 58]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|     59|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 58]
  |  |  ------------------
  ------------------
 2061|     58|            st->st_cur->ste_returns_value = 1;
 2062|     58|        }
 2063|    362|        break;
 2064|  1.25k|    case Delete_kind:
  ------------------
  |  Branch (2064:5): [True: 1.25k, False: 172k]
  ------------------
 2065|  1.25k|        VISIT_SEQ(st, expr, s->v.Delete.targets);
  ------------------
  |  | 1755|  1.25k|    do { \
  |  | 1756|  1.25k|        Py_ssize_t i; \
  |  | 1757|  1.25k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  5.85k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.85k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.85k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 4.60k, False: 1.25k]
  |  |  ------------------
  |  | 1759|  4.60k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  4.60k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.60k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  4.60k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 4.60k]
  |  |  ------------------
  |  | 1761|  4.60k|                return 0;                 \
  |  | 1762|  4.60k|        } \
  |  | 1763|  1.25k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.25k]
  |  |  ------------------
  ------------------
 2066|  1.25k|        break;
 2067|  8.33k|    case Assign_kind:
  ------------------
  |  Branch (2067:5): [True: 8.33k, False: 164k]
  ------------------
 2068|  8.33k|        VISIT_SEQ(st, expr, s->v.Assign.targets);
  ------------------
  |  | 1755|  8.33k|    do { \
  |  | 1756|  8.33k|        Py_ssize_t i; \
  |  | 1757|  8.33k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  58.7k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  58.7k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   117k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 58.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 50.4k, False: 8.32k]
  |  |  ------------------
  |  | 1759|  50.4k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  50.4k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  50.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  50.4k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 50.4k]
  |  |  ------------------
  |  | 1761|  50.4k|                return 0;                 \
  |  | 1762|  50.4k|        } \
  |  | 1763|  8.33k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 8.32k]
  |  |  ------------------
  ------------------
 2069|  8.32k|        VISIT(st, expr, s->v.Assign.value);
  ------------------
  |  | 1748|  8.32k|    do { \
  |  | 1749|  8.32k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 7, False: 8.32k]
  |  |  ------------------
  |  | 1750|      7|            return 0; \
  |  | 1751|      7|        } \
  |  | 1752|  8.32k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 8.32k]
  |  |  ------------------
  ------------------
 2070|  8.32k|        break;
 2071|  24.4k|    case AnnAssign_kind:
  ------------------
  |  Branch (2071:5): [True: 24.4k, False: 148k]
  ------------------
 2072|  24.4k|        st->st_cur->ste_annotations_used = 1;
 2073|  24.4k|        if (s->v.AnnAssign.target->kind == Name_kind) {
  ------------------
  |  Branch (2073:13): [True: 23.4k, False: 989]
  ------------------
 2074|  23.4k|            expr_ty e_name = s->v.AnnAssign.target;
 2075|  23.4k|            long cur = symtable_lookup(st, e_name->v.Name.id);
 2076|  23.4k|            if (cur < 0) {
  ------------------
  |  Branch (2076:17): [True: 0, False: 23.4k]
  ------------------
 2077|      0|                return 0;
 2078|      0|            }
 2079|  23.4k|            if ((cur & (DEF_GLOBAL | DEF_NONLOCAL))
  ------------------
  |  |  170|  23.4k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                          if ((cur & (DEF_GLOBAL | DEF_NONLOCAL))
  ------------------
  |  |  173|  23.4k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
  |  Branch (2079:17): [True: 133, False: 23.3k]
  ------------------
 2080|    133|                && (st->st_cur->ste_symbols != st->st_global)
  ------------------
  |  Branch (2080:20): [True: 1, False: 132]
  ------------------
 2081|      1|                && s->v.AnnAssign.simple) {
  ------------------
  |  Branch (2081:20): [True: 1, False: 0]
  ------------------
 2082|      1|                PyErr_Format(PyExc_SyntaxError,
 2083|      1|                             cur & DEF_GLOBAL ? GLOBAL_ANNOT : NONLOCAL_ANNOT,
  ------------------
  |  |  170|      1|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                                           cur & DEF_GLOBAL ? GLOBAL_ANNOT : NONLOCAL_ANNOT,
  ------------------
  |  |   36|      1|#define GLOBAL_ANNOT \
  |  |   37|      1|"annotated name '%U' can't be global"
  ------------------
                                           cur & DEF_GLOBAL ? GLOBAL_ANNOT : NONLOCAL_ANNOT,
  ------------------
  |  |   39|      1|#define NONLOCAL_ANNOT \
  |  |   40|      1|"annotated name '%U' can't be nonlocal"
  ------------------
  |  Branch (2083:30): [True: 1, False: 0]
  ------------------
 2084|      1|                             e_name->v.Name.id);
 2085|      1|                SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      1|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      1|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2086|      1|                return 0;
 2087|      1|            }
 2088|  23.4k|            if (s->v.AnnAssign.simple &&
  ------------------
  |  Branch (2088:17): [True: 23.3k, False: 96]
  ------------------
 2089|  23.3k|                !symtable_add_def(st, e_name->v.Name.id,
  ------------------
  |  Branch (2089:17): [True: 0, False: 23.3k]
  ------------------
 2090|  23.3k|                                  DEF_ANNOT | DEF_LOCAL, LOCATION(e_name))) {
  ------------------
  |  |  177|  23.3k|#define DEF_ANNOT (2<<7)         /* this name is annotated */
  ------------------
                                                DEF_ANNOT | DEF_LOCAL, LOCATION(e_name))) {
  ------------------
  |  |  171|  23.3k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                                                DEF_ANNOT | DEF_LOCAL, LOCATION(e_name))) {
  ------------------
  |  |   86|  23.3k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  23.3k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  23.3k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  23.3k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  23.3k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  23.3k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2091|      0|                return 0;
 2092|      0|            }
 2093|  23.4k|            else {
 2094|  23.4k|                if (s->v.AnnAssign.value
  ------------------
  |  Branch (2094:21): [True: 337, False: 23.1k]
  ------------------
 2095|    337|                    && !symtable_add_def(st, e_name->v.Name.id, DEF_LOCAL, LOCATION(e_name))) {
  ------------------
  |  |  171|    337|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                                  && !symtable_add_def(st, e_name->v.Name.id, DEF_LOCAL, LOCATION(e_name))) {
  ------------------
  |  |   86|    337|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    337|    (_Py_SourceLocation){ \
  |  |  |  |   59|    337|               .lineno = (n)->lineno, \
  |  |  |  |   60|    337|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    337|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    337|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2095:24): [True: 0, False: 337]
  ------------------
 2096|      0|                    return 0;
 2097|      0|                }
 2098|  23.4k|            }
 2099|  23.4k|        }
 2100|    989|        else {
 2101|    989|            VISIT(st, expr, s->v.AnnAssign.target);
  ------------------
  |  | 1748|    989|    do { \
  |  | 1749|    989|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 988]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    989|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 988]
  |  |  ------------------
  ------------------
 2102|    989|        }
 2103|  24.4k|        if (!symtable_visit_annotation(st, s->v.AnnAssign.annotation,
  ------------------
  |  Branch (2103:13): [True: 35, False: 24.4k]
  ------------------
 2104|  24.4k|                                       (void *)((uintptr_t)st->st_cur->ste_id + 1))) {
 2105|     35|            return 0;
 2106|     35|        }
 2107|       |
 2108|  24.4k|        if (s->v.AnnAssign.value) {
  ------------------
  |  Branch (2108:13): [True: 430, False: 23.9k]
  ------------------
 2109|    430|            VISIT(st, expr, s->v.AnnAssign.value);
  ------------------
  |  | 1748|    430|    do { \
  |  | 1749|    430|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 3, False: 427]
  |  |  ------------------
  |  | 1750|      3|            return 0; \
  |  | 1751|      3|        } \
  |  | 1752|    430|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 427]
  |  |  ------------------
  ------------------
 2110|    430|        }
 2111|  24.4k|        break;
 2112|  24.4k|    case AugAssign_kind: {
  ------------------
  |  Branch (2112:5): [True: 6.56k, False: 166k]
  ------------------
 2113|  6.56k|        VISIT(st, expr, s->v.AugAssign.target);
  ------------------
  |  | 1748|  6.56k|    do { \
  |  | 1749|  6.56k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 6.56k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  6.56k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 6.56k]
  |  |  ------------------
  ------------------
 2114|  6.56k|        VISIT(st, expr, s->v.AugAssign.value);
  ------------------
  |  | 1748|  6.56k|    do { \
  |  | 1749|  6.56k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 4, False: 6.56k]
  |  |  ------------------
  |  | 1750|      4|            return 0; \
  |  | 1751|      4|        } \
  |  | 1752|  6.56k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 6.56k]
  |  |  ------------------
  ------------------
 2115|  6.56k|        break;
 2116|  6.56k|    }
 2117|  6.56k|    case For_kind: {
  ------------------
  |  Branch (2117:5): [True: 732, False: 172k]
  ------------------
 2118|    732|        VISIT(st, expr, s->v.For.target);
  ------------------
  |  | 1748|    732|    do { \
  |  | 1749|    732|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 732]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    732|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 732]
  |  |  ------------------
  ------------------
 2119|    732|        VISIT(st, expr, s->v.For.iter);
  ------------------
  |  | 1748|    732|    do { \
  |  | 1749|    732|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 731]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    732|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 731]
  |  |  ------------------
  ------------------
 2120|    731|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|    731|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|    731|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2121|    731|        VISIT_SEQ(st, stmt, s->v.For.body);
  ------------------
  |  | 1755|    731|    do { \
  |  | 1756|    731|        Py_ssize_t i; \
  |  | 1757|    731|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.65k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.65k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.30k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.65k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 920, False: 730]
  |  |  ------------------
  |  | 1759|    920|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    920|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    920|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    920|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 919]
  |  |  ------------------
  |  | 1761|    920|                return 0;                 \
  |  | 1762|    920|        } \
  |  | 1763|    731|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 730]
  |  |  ------------------
  ------------------
 2122|    730|        if (s->v.For.orelse)
  ------------------
  |  Branch (2122:13): [True: 123, False: 607]
  ------------------
 2123|    123|            VISIT_SEQ(st, stmt, s->v.For.orelse);
  ------------------
  |  | 1755|    123|    do { \
  |  | 1756|    123|        Py_ssize_t i; \
  |  | 1757|    123|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    329|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    329|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    658|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 329]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 207, False: 122]
  |  |  ------------------
  |  | 1759|    207|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    207|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    207|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    207|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 206]
  |  |  ------------------
  |  | 1761|    207|                return 0;                 \
  |  | 1762|    207|        } \
  |  | 1763|    123|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 122]
  |  |  ------------------
  ------------------
 2124|    729|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|    729|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2125|    729|        break;
 2126|    730|    }
 2127|  2.14k|    case While_kind: {
  ------------------
  |  Branch (2127:5): [True: 2.14k, False: 171k]
  ------------------
 2128|  2.14k|        VISIT(st, expr, s->v.While.test);
  ------------------
  |  | 1748|  2.14k|    do { \
  |  | 1749|  2.14k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 2.14k]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|  2.14k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 2.14k]
  |  |  ------------------
  ------------------
 2129|  2.14k|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|  2.14k|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|  2.14k|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2130|  2.14k|        VISIT_SEQ(st, stmt, s->v.While.body);
  ------------------
  |  | 1755|  2.14k|    do { \
  |  | 1756|  2.14k|        Py_ssize_t i; \
  |  | 1757|  2.14k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  13.9k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  13.9k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  27.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 13.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 11.8k, False: 2.13k]
  |  |  ------------------
  |  | 1759|  11.8k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  11.8k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  11.8k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 5, False: 11.8k]
  |  |  ------------------
  |  | 1761|  11.8k|                return 0;                 \
  |  | 1762|  11.8k|        } \
  |  | 1763|  2.14k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.13k]
  |  |  ------------------
  ------------------
 2131|  2.13k|        if (s->v.While.orelse)
  ------------------
  |  Branch (2131:13): [True: 167, False: 1.97k]
  ------------------
 2132|    167|            VISIT_SEQ(st, stmt, s->v.While.orelse);
  ------------------
  |  | 1755|    167|    do { \
  |  | 1756|    167|        Py_ssize_t i; \
  |  | 1757|    167|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    534|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    534|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.06k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 534]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 368, False: 166]
  |  |  ------------------
  |  | 1759|    368|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    368|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    368|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    368|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 367]
  |  |  ------------------
  |  | 1761|    368|                return 0;                 \
  |  | 1762|    368|        } \
  |  | 1763|    167|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 166]
  |  |  ------------------
  ------------------
 2133|  2.13k|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|  2.13k|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2134|  2.13k|        break;
 2135|  2.13k|    }
 2136|  1.30k|    case If_kind: {
  ------------------
  |  Branch (2136:5): [True: 1.30k, False: 171k]
  ------------------
 2137|       |        /* XXX if 0: and lookup_yield() hacks */
 2138|  1.30k|        VISIT(st, expr, s->v.If.test);
  ------------------
  |  | 1748|  1.30k|    do { \
  |  | 1749|  1.30k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 1.29k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  1.30k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.29k]
  |  |  ------------------
  ------------------
 2139|  1.29k|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|  1.29k|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|  1.29k|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2140|  1.29k|        VISIT_SEQ(st, stmt, s->v.If.body);
  ------------------
  |  | 1755|  1.29k|    do { \
  |  | 1756|  1.29k|        Py_ssize_t i; \
  |  | 1757|  1.29k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  3.72k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.72k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.44k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.72k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 2.42k, False: 1.29k]
  |  |  ------------------
  |  | 1759|  2.42k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.42k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.42k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  2.42k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 2.42k]
  |  |  ------------------
  |  | 1761|  2.42k|                return 0;                 \
  |  | 1762|  2.42k|        } \
  |  | 1763|  1.29k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.29k]
  |  |  ------------------
  ------------------
 2141|  1.29k|        if (s->v.If.orelse)
  ------------------
  |  Branch (2141:13): [True: 362, False: 936]
  ------------------
 2142|    362|            VISIT_SEQ(st, stmt, s->v.If.orelse);
  ------------------
  |  | 1755|    362|    do { \
  |  | 1756|    362|        Py_ssize_t i; \
  |  | 1757|    362|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.59k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.59k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.18k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.59k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.23k, False: 361]
  |  |  ------------------
  |  | 1759|  1.23k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.23k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.23k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.23k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 1.23k]
  |  |  ------------------
  |  | 1761|  1.23k|                return 0;                 \
  |  | 1762|  1.23k|        } \
  |  | 1763|    362|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 361]
  |  |  ------------------
  ------------------
 2143|  1.29k|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|  1.29k|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2144|  1.29k|        break;
 2145|  1.29k|    }
 2146|    201|    case Match_kind: {
  ------------------
  |  Branch (2146:5): [True: 201, False: 173k]
  ------------------
 2147|    201|        VISIT(st, expr, s->v.Match.subject);
  ------------------
  |  | 1748|    201|    do { \
  |  | 1749|    201|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 200]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    201|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 200]
  |  |  ------------------
  ------------------
 2148|    200|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|    200|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|    200|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2149|    200|        VISIT_SEQ(st, match_case, s->v.Match.cases);
  ------------------
  |  | 1755|    200|    do { \
  |  | 1756|    200|        Py_ssize_t i; \
  |  | 1757|    200|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.14k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.14k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.28k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.14k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 943, False: 198]
  |  |  ------------------
  |  | 1759|    943|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    943|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    943|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    943|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 941]
  |  |  ------------------
  |  | 1761|    943|                return 0;                 \
  |  | 1762|    943|        } \
  |  | 1763|    200|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 198]
  |  |  ------------------
  ------------------
 2150|    198|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|    198|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2151|    198|        break;
 2152|    200|    }
 2153|    497|    case Raise_kind:
  ------------------
  |  Branch (2153:5): [True: 497, False: 172k]
  ------------------
 2154|    497|        if (s->v.Raise.exc) {
  ------------------
  |  Branch (2154:13): [True: 227, False: 270]
  ------------------
 2155|    227|            VISIT(st, expr, s->v.Raise.exc);
  ------------------
  |  | 1748|    227|    do { \
  |  | 1749|    227|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 225]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|    227|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 225]
  |  |  ------------------
  ------------------
 2156|    225|            if (s->v.Raise.cause) {
  ------------------
  |  Branch (2156:17): [True: 145, False: 80]
  ------------------
 2157|    145|                VISIT(st, expr, s->v.Raise.cause);
  ------------------
  |  | 1748|    145|    do { \
  |  | 1749|    145|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 143]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|    145|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 143]
  |  |  ------------------
  ------------------
 2158|    145|            }
 2159|    225|        }
 2160|    493|        break;
 2161|  2.59k|    case Try_kind: {
  ------------------
  |  Branch (2161:5): [True: 2.59k, False: 170k]
  ------------------
 2162|  2.59k|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|  2.59k|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|  2.59k|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2163|  2.59k|        ENTER_TRY_BLOCK(st);
  ------------------
  |  | 1796|  2.59k|    int in_try_block = (ST)->st_cur->ste_in_try_block; \
  |  | 1797|  2.59k|    (ST)->st_cur->ste_in_try_block = 1;
  ------------------
 2164|  2.59k|        VISIT_SEQ(st, stmt, s->v.Try.body);
  ------------------
  |  | 1755|  2.59k|    do { \
  |  | 1756|  2.59k|        Py_ssize_t i; \
  |  | 1757|  2.59k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  5.30k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.30k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  10.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.30k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 2.70k, False: 2.59k]
  |  |  ------------------
  |  | 1759|  2.70k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.70k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.70k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  2.70k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 2.70k]
  |  |  ------------------
  |  | 1761|  2.70k|                return 0;                 \
  |  | 1762|  2.70k|        } \
  |  | 1763|  2.59k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.59k]
  |  |  ------------------
  ------------------
 2165|  2.59k|        VISIT_SEQ(st, excepthandler, s->v.Try.handlers);
  ------------------
  |  | 1755|  2.59k|    do { \
  |  | 1756|  2.59k|        Py_ssize_t i; \
  |  | 1757|  2.59k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  4.14k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  4.14k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  8.29k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.32k, False: 2.82k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.55k, False: 2.59k]
  |  |  ------------------
  |  | 1759|  1.55k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.55k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.55k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.55k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 1.54k]
  |  |  ------------------
  |  | 1761|  1.55k|                return 0;                 \
  |  | 1762|  1.55k|        } \
  |  | 1763|  2.59k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.59k]
  |  |  ------------------
  ------------------
 2166|  2.59k|        VISIT_SEQ(st, stmt, s->v.Try.orelse);
  ------------------
  |  | 1755|  2.59k|    do { \
  |  | 1756|  2.59k|        Py_ssize_t i; \
  |  | 1757|  2.59k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.85k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.85k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.70k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 2.51k, False: 339]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 258, False: 2.59k]
  |  |  ------------------
  |  | 1759|    258|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    258|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    258|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    258|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 257]
  |  |  ------------------
  |  | 1761|    258|                return 0;                 \
  |  | 1762|    258|        } \
  |  | 1763|  2.59k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.59k]
  |  |  ------------------
  ------------------
 2167|  2.59k|        VISIT_SEQ(st, stmt, s->v.Try.finalbody);
  ------------------
  |  | 1755|  2.59k|    do { \
  |  | 1756|  2.59k|        Py_ssize_t i; \
  |  | 1757|  2.59k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  8.76k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  8.76k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  17.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 507, False: 8.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 6.17k, False: 2.58k]
  |  |  ------------------
  |  | 1759|  6.17k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  6.17k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.17k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  6.17k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 9, False: 6.17k]
  |  |  ------------------
  |  | 1761|  6.17k|                return 0;                 \
  |  | 1762|  6.17k|        } \
  |  | 1763|  2.59k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.58k]
  |  |  ------------------
  ------------------
 2168|  2.58k|        LEAVE_TRY_BLOCK(st);
  ------------------
  |  | 1800|  2.58k|    (ST)->st_cur->ste_in_try_block = in_try_block;
  ------------------
 2169|  2.58k|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|  2.58k|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2170|  2.58k|        break;
 2171|  2.59k|    }
 2172|  1.18k|    case TryStar_kind: {
  ------------------
  |  Branch (2172:5): [True: 1.18k, False: 172k]
  ------------------
 2173|  1.18k|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|  1.18k|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|  1.18k|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2174|  1.18k|        ENTER_TRY_BLOCK(st);
  ------------------
  |  | 1796|  1.18k|    int in_try_block = (ST)->st_cur->ste_in_try_block; \
  |  | 1797|  1.18k|    (ST)->st_cur->ste_in_try_block = 1;
  ------------------
 2175|  1.18k|        VISIT_SEQ(st, stmt, s->v.TryStar.body);
  ------------------
  |  | 1755|  1.18k|    do { \
  |  | 1756|  1.18k|        Py_ssize_t i; \
  |  | 1757|  1.18k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.37k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.37k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.75k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.37k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.19k, False: 1.18k]
  |  |  ------------------
  |  | 1759|  1.19k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.19k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.19k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.19k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 1.19k]
  |  |  ------------------
  |  | 1761|  1.19k|                return 0;                 \
  |  | 1762|  1.19k|        } \
  |  | 1763|  1.18k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.18k]
  |  |  ------------------
  ------------------
 2176|  1.18k|        VISIT_SEQ(st, excepthandler, s->v.TryStar.handlers);
  ------------------
  |  | 1755|  1.18k|    do { \
  |  | 1756|  1.18k|        Py_ssize_t i; \
  |  | 1757|  1.18k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.67k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.67k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.35k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.67k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.49k, False: 1.18k]
  |  |  ------------------
  |  | 1759|  1.49k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.49k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.49k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.49k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 1.49k]
  |  |  ------------------
  |  | 1761|  1.49k|                return 0;                 \
  |  | 1762|  1.49k|        } \
  |  | 1763|  1.18k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.18k]
  |  |  ------------------
  ------------------
 2177|  1.18k|        VISIT_SEQ(st, stmt, s->v.TryStar.orelse);
  ------------------
  |  | 1755|  1.18k|    do { \
  |  | 1756|  1.18k|        Py_ssize_t i; \
  |  | 1757|  1.18k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.29k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.29k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.59k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.16k, False: 134]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 117, False: 1.18k]
  |  |  ------------------
  |  | 1759|    117|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    117|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    117|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    117|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 116]
  |  |  ------------------
  |  | 1761|    117|                return 0;                 \
  |  | 1762|    117|        } \
  |  | 1763|  1.18k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.18k]
  |  |  ------------------
  ------------------
 2178|  1.18k|        VISIT_SEQ(st, stmt, s->v.TryStar.finalbody);
  ------------------
  |  | 1755|  1.18k|    do { \
  |  | 1756|  1.18k|        Py_ssize_t i; \
  |  | 1757|  1.18k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.48k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.48k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.96k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 1.06k, False: 1.41k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.29k, False: 1.18k]
  |  |  ------------------
  |  | 1759|  1.29k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.29k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.29k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.29k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 1.29k]
  |  |  ------------------
  |  | 1761|  1.29k|                return 0;                 \
  |  | 1762|  1.29k|        } \
  |  | 1763|  1.18k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.18k]
  |  |  ------------------
  ------------------
 2179|  1.18k|        LEAVE_TRY_BLOCK(st);
  ------------------
  |  | 1800|  1.18k|    (ST)->st_cur->ste_in_try_block = in_try_block;
  ------------------
 2180|  1.18k|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|  1.18k|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2181|  1.18k|        break;
 2182|  1.18k|    }
 2183|  1.85k|    case Assert_kind:
  ------------------
  |  Branch (2183:5): [True: 1.85k, False: 171k]
  ------------------
 2184|  1.85k|        VISIT(st, expr, s->v.Assert.test);
  ------------------
  |  | 1748|  1.85k|    do { \
  |  | 1749|  1.85k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 1.84k]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|  1.85k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.84k]
  |  |  ------------------
  ------------------
 2185|  1.84k|        if (s->v.Assert.msg)
  ------------------
  |  Branch (2185:13): [True: 382, False: 1.46k]
  ------------------
 2186|    382|            VISIT(st, expr, s->v.Assert.msg);
  ------------------
  |  | 1748|    382|    do { \
  |  | 1749|    382|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 381]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    382|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 381]
  |  |  ------------------
  ------------------
 2187|  1.84k|        break;
 2188|  2.50k|    case Import_kind:
  ------------------
  |  Branch (2188:5): [True: 2.50k, False: 170k]
  ------------------
 2189|  2.50k|        if (s->v.Import.is_lazy) {
  ------------------
  |  Branch (2189:13): [True: 6, False: 2.49k]
  ------------------
 2190|      6|            if (!check_lazy_import_context(st, s, "import")) {
  ------------------
  |  Branch (2190:17): [True: 0, False: 6]
  ------------------
 2191|      0|                return 0;
 2192|      0|            }
 2193|      6|        }
 2194|  2.50k|        VISIT_SEQ(st, alias, s->v.Import.names);
  ------------------
  |  | 1755|  2.50k|    do { \
  |  | 1756|  2.50k|        Py_ssize_t i; \
  |  | 1757|  2.50k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  10.8k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  10.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  21.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 10.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 8.35k, False: 2.50k]
  |  |  ------------------
  |  | 1759|  8.35k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  8.35k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  8.35k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  8.35k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 8.35k]
  |  |  ------------------
  |  | 1761|  8.35k|                return 0;                 \
  |  | 1762|  8.35k|        } \
  |  | 1763|  2.50k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.50k]
  |  |  ------------------
  ------------------
 2195|  2.50k|        break;
 2196|  2.50k|    case ImportFrom_kind:
  ------------------
  |  Branch (2196:5): [True: 2.20k, False: 171k]
  ------------------
 2197|  2.20k|        if (s->v.ImportFrom.is_lazy) {
  ------------------
  |  Branch (2197:13): [True: 1, False: 2.20k]
  ------------------
 2198|      1|            if (!check_lazy_import_context(st, s, "from ... import")) {
  ------------------
  |  Branch (2198:17): [True: 0, False: 1]
  ------------------
 2199|      0|                return 0;
 2200|      0|            }
 2201|       |
 2202|       |            // Check for import *
 2203|      2|            for (Py_ssize_t i = 0; i < asdl_seq_LEN(s->v.ImportFrom.names);
  ------------------
  |  |   83|      2|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|      4|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2203:36): [True: 1, False: 1]
  ------------------
 2204|      1|                 i++) {
 2205|      1|                alias_ty alias = (alias_ty)asdl_seq_GET(
  ------------------
  |  |   82|      1|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      1|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2206|      1|                    s->v.ImportFrom.names, i);
 2207|      1|                if (alias->name &&
  ------------------
  |  Branch (2207:21): [True: 1, False: 0]
  ------------------
 2208|      1|                        _PyUnicode_EqualToASCIIString(alias->name, "*")) {
  ------------------
  |  Branch (2208:25): [True: 0, False: 1]
  ------------------
 2209|      0|                    PyErr_SetString(PyExc_SyntaxError,
 2210|      0|                                    "lazy from ... import * is not allowed");
 2211|      0|                    SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2212|      0|                    return 0;
 2213|      0|                }
 2214|      1|            }
 2215|      1|        }
 2216|  2.20k|        VISIT_SEQ(st, alias, s->v.ImportFrom.names);
  ------------------
  |  | 1755|  2.20k|    do { \
  |  | 1756|  2.20k|        Py_ssize_t i; \
  |  | 1757|  2.20k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  5.97k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.97k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.97k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 3.77k, False: 2.20k]
  |  |  ------------------
  |  | 1759|  3.77k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.77k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.77k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  3.77k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 3.77k]
  |  |  ------------------
  |  | 1761|  3.77k|                return 0;                 \
  |  | 1762|  3.77k|        } \
  |  | 1763|  2.20k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.20k]
  |  |  ------------------
  ------------------
 2217|  2.20k|        if (!check_import_from(st, s)) {
  ------------------
  |  Branch (2217:13): [True: 3, False: 2.19k]
  ------------------
 2218|      3|            return 0;
 2219|      3|        }
 2220|  2.19k|        break;
 2221|  2.19k|    case Global_kind: {
  ------------------
  |  Branch (2221:5): [True: 733, False: 172k]
  ------------------
 2222|    733|        Py_ssize_t i;
 2223|    733|        asdl_identifier_seq *seq = s->v.Global.names;
 2224|  1.58k|        for (i = 0; i < asdl_seq_LEN(seq); i++) {
  ------------------
  |  |   83|  1.58k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  3.17k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.58k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2224:21): [True: 861, False: 728]
  ------------------
 2225|    861|            identifier name = (identifier)asdl_seq_GET(seq, i);
  ------------------
  |  |   82|    861|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    861|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2226|    861|            long cur = symtable_lookup(st, name);
 2227|    861|            if (cur < 0)
  ------------------
  |  Branch (2227:17): [True: 0, False: 861]
  ------------------
 2228|      0|                return 0;
 2229|    861|            if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  172|    861|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                          if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  171|    861|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                          if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  174|    861|#define USE (2<<3)               /* name is used */
  ------------------
                          if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  177|    861|#define DEF_ANNOT (2<<7)         /* this name is annotated */
  ------------------
  |  Branch (2229:17): [True: 5, False: 856]
  ------------------
 2230|      5|                const char* msg;
 2231|      5|                if (cur & DEF_PARAM) {
  ------------------
  |  |  172|      5|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (2231:21): [True: 0, False: 5]
  ------------------
 2232|      0|                    msg = GLOBAL_PARAM;
  ------------------
  |  |   18|      0|#define GLOBAL_PARAM \
  |  |   19|      0|"name '%U' is parameter and global"
  ------------------
 2233|      5|                } else if (cur & USE) {
  ------------------
  |  |  174|      5|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (2233:28): [True: 4, False: 1]
  ------------------
 2234|      4|                    msg = GLOBAL_AFTER_USE;
  ------------------
  |  |   30|      4|#define GLOBAL_AFTER_USE \
  |  |   31|      4|"name '%U' is used prior to global declaration"
  ------------------
 2235|      4|                } else if (cur & DEF_ANNOT) {
  ------------------
  |  |  177|      1|#define DEF_ANNOT (2<<7)         /* this name is annotated */
  ------------------
  |  Branch (2235:28): [True: 0, False: 1]
  ------------------
 2236|      0|                    msg = GLOBAL_ANNOT;
  ------------------
  |  |   36|      0|#define GLOBAL_ANNOT \
  |  |   37|      0|"annotated name '%U' can't be global"
  ------------------
 2237|      1|                } else {  /* DEF_LOCAL */
 2238|      1|                    msg = GLOBAL_AFTER_ASSIGN;
  ------------------
  |  |   24|      1|#define GLOBAL_AFTER_ASSIGN \
  |  |   25|      1|"name '%U' is assigned to before global declaration"
  ------------------
 2239|      1|                }
 2240|      5|                PyErr_Format(PyExc_SyntaxError,
 2241|      5|                             msg, name);
 2242|      5|                SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      5|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      5|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2243|      5|                return 0;
 2244|      5|            }
 2245|    856|            if (!symtable_add_def(st, name, DEF_GLOBAL, LOCATION(s))) {
  ------------------
  |  |  170|    856|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                          if (!symtable_add_def(st, name, DEF_GLOBAL, LOCATION(s))) {
  ------------------
  |  |   86|    856|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    856|    (_Py_SourceLocation){ \
  |  |  |  |   59|    856|               .lineno = (n)->lineno, \
  |  |  |  |   60|    856|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    856|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    856|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2245:17): [True: 0, False: 856]
  ------------------
 2246|      0|                return 0;
 2247|      0|            }
 2248|    856|            if (!symtable_record_directive(st, name, LOCATION(s))) {
  ------------------
  |  |   86|    856|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    856|    (_Py_SourceLocation){ \
  |  |  |  |   59|    856|               .lineno = (n)->lineno, \
  |  |  |  |   60|    856|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    856|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    856|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2248:17): [True: 0, False: 856]
  ------------------
 2249|      0|                return 0;
 2250|      0|            }
 2251|    856|        }
 2252|    728|        break;
 2253|    733|    }
 2254|    728|    case Nonlocal_kind: {
  ------------------
  |  Branch (2254:5): [True: 98, False: 173k]
  ------------------
 2255|     98|        Py_ssize_t i;
 2256|     98|        asdl_identifier_seq *seq = s->v.Nonlocal.names;
 2257|    290|        for (i = 0; i < asdl_seq_LEN(seq); i++) {
  ------------------
  |  |   83|    290|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    580|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 290]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2257:21): [True: 196, False: 94]
  ------------------
 2258|    196|            identifier name = (identifier)asdl_seq_GET(seq, i);
  ------------------
  |  |   82|    196|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    196|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2259|    196|            long cur = symtable_lookup(st, name);
 2260|    196|            if (cur < 0)
  ------------------
  |  Branch (2260:17): [True: 0, False: 196]
  ------------------
 2261|      0|                return 0;
 2262|    196|            if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  172|    196|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                          if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  171|    196|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                          if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  174|    196|#define USE (2<<3)               /* name is used */
  ------------------
                          if (cur & (DEF_PARAM | DEF_LOCAL | USE | DEF_ANNOT)) {
  ------------------
  |  |  177|    196|#define DEF_ANNOT (2<<7)         /* this name is annotated */
  ------------------
  |  Branch (2262:17): [True: 4, False: 192]
  ------------------
 2263|      4|                const char* msg;
 2264|      4|                if (cur & DEF_PARAM) {
  ------------------
  |  |  172|      4|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (2264:21): [True: 0, False: 4]
  ------------------
 2265|      0|                    msg = NONLOCAL_PARAM;
  ------------------
  |  |   21|      0|#define NONLOCAL_PARAM \
  |  |   22|      0|"name '%U' is parameter and nonlocal"
  ------------------
 2266|      4|                } else if (cur & USE) {
  ------------------
  |  |  174|      4|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (2266:28): [True: 2, False: 2]
  ------------------
 2267|      2|                    msg = NONLOCAL_AFTER_USE;
  ------------------
  |  |   33|      2|#define NONLOCAL_AFTER_USE \
  |  |   34|      2|"name '%U' is used prior to nonlocal declaration"
  ------------------
 2268|      2|                } else if (cur & DEF_ANNOT) {
  ------------------
  |  |  177|      2|#define DEF_ANNOT (2<<7)         /* this name is annotated */
  ------------------
  |  Branch (2268:28): [True: 1, False: 1]
  ------------------
 2269|      1|                    msg = NONLOCAL_ANNOT;
  ------------------
  |  |   39|      1|#define NONLOCAL_ANNOT \
  |  |   40|      1|"annotated name '%U' can't be nonlocal"
  ------------------
 2270|      1|                } else {  /* DEF_LOCAL */
 2271|      1|                    msg = NONLOCAL_AFTER_ASSIGN;
  ------------------
  |  |   27|      1|#define NONLOCAL_AFTER_ASSIGN \
  |  |   28|      1|"name '%U' is assigned to before nonlocal declaration"
  ------------------
 2272|      1|                }
 2273|      4|                PyErr_Format(PyExc_SyntaxError, msg, name);
 2274|      4|                SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      4|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      4|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2275|      4|                return 0;
 2276|      4|            }
 2277|    192|            if (!symtable_add_def(st, name, DEF_NONLOCAL, LOCATION(s)))
  ------------------
  |  |  173|    192|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
                          if (!symtable_add_def(st, name, DEF_NONLOCAL, LOCATION(s)))
  ------------------
  |  |   86|    192|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    192|    (_Py_SourceLocation){ \
  |  |  |  |   59|    192|               .lineno = (n)->lineno, \
  |  |  |  |   60|    192|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    192|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    192|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2277:17): [True: 0, False: 192]
  ------------------
 2278|      0|                return 0;
 2279|    192|            if (!symtable_record_directive(st, name, LOCATION(s))) {
  ------------------
  |  |   86|    192|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    192|    (_Py_SourceLocation){ \
  |  |  |  |   59|    192|               .lineno = (n)->lineno, \
  |  |  |  |   60|    192|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    192|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    192|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2279:17): [True: 0, False: 192]
  ------------------
 2280|      0|                return 0;
 2281|      0|            }
 2282|    192|        }
 2283|     94|        break;
 2284|     98|    }
 2285|  91.2k|    case Expr_kind:
  ------------------
  |  Branch (2285:5): [True: 91.2k, False: 82.0k]
  ------------------
 2286|  91.2k|        VISIT(st, expr, s->v.Expr.value);
  ------------------
  |  | 1748|  91.2k|    do { \
  |  | 1749|  91.2k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 84, False: 91.1k]
  |  |  ------------------
  |  | 1750|     84|            return 0; \
  |  | 1751|     84|        } \
  |  | 1752|  91.2k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 91.1k]
  |  |  ------------------
  ------------------
 2287|  91.1k|        break;
 2288|  91.1k|    case Pass_kind:
  ------------------
  |  Branch (2288:5): [True: 1.41k, False: 171k]
  ------------------
 2289|  1.49k|    case Break_kind:
  ------------------
  |  Branch (2289:5): [True: 80, False: 173k]
  ------------------
 2290|  1.98k|    case Continue_kind:
  ------------------
  |  Branch (2290:5): [True: 491, False: 172k]
  ------------------
 2291|       |        /* nothing to do here */
 2292|  1.98k|        break;
 2293|    550|    case With_kind: {
  ------------------
  |  Branch (2293:5): [True: 550, False: 172k]
  ------------------
 2294|    550|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|    550|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|    550|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2295|    550|        VISIT_SEQ(st, withitem, s->v.With.items);
  ------------------
  |  | 1755|    550|    do { \
  |  | 1756|    550|        Py_ssize_t i; \
  |  | 1757|    550|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.39k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.39k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.78k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.39k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 844, False: 549]
  |  |  ------------------
  |  | 1759|    844|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    844|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    844|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    844|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 843]
  |  |  ------------------
  |  | 1761|    844|                return 0;                 \
  |  | 1762|    844|        } \
  |  | 1763|    550|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 549]
  |  |  ------------------
  ------------------
 2296|    549|        VISIT_SEQ(st, stmt, s->v.With.body);
  ------------------
  |  | 1755|    549|    do { \
  |  | 1756|    549|        Py_ssize_t i; \
  |  | 1757|    549|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.64k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.64k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.29k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.64k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.10k, False: 547]
  |  |  ------------------
  |  | 1759|  1.10k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.10k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.10k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.10k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 1.10k]
  |  |  ------------------
  |  | 1761|  1.10k|                return 0;                 \
  |  | 1762|  1.10k|        } \
  |  | 1763|    549|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 547]
  |  |  ------------------
  ------------------
 2297|    547|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|    547|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2298|    547|        break;
 2299|    549|    }
 2300|  2.53k|    case AsyncFunctionDef_kind: {
  ------------------
  |  Branch (2300:5): [True: 2.53k, False: 170k]
  ------------------
 2301|  2.53k|        if (!symtable_add_def(st, s->v.AsyncFunctionDef.name, DEF_LOCAL, LOCATION(s)))
  ------------------
  |  |  171|  2.53k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, s->v.AsyncFunctionDef.name, DEF_LOCAL, LOCATION(s)))
  ------------------
  |  |   86|  2.53k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.53k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.53k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.53k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.53k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.53k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2301:13): [True: 0, False: 2.53k]
  ------------------
 2302|      0|            return 0;
 2303|  2.53k|        if (s->v.AsyncFunctionDef.args->defaults)
  ------------------
  |  Branch (2303:13): [True: 2.53k, False: 0]
  ------------------
 2304|  2.53k|            VISIT_SEQ(st, expr, s->v.AsyncFunctionDef.args->defaults);
  ------------------
  |  | 1755|  2.53k|    do { \
  |  | 1756|  2.53k|        Py_ssize_t i; \
  |  | 1757|  2.53k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.54k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.54k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.09k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.54k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 9, False: 2.53k]
  |  |  ------------------
  |  | 1759|      9|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|      9|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      9|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|      9|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 9]
  |  |  ------------------
  |  | 1761|      9|                return 0;                 \
  |  | 1762|      9|        } \
  |  | 1763|  2.53k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 2305|  2.53k|        if (s->v.AsyncFunctionDef.args->kw_defaults)
  ------------------
  |  Branch (2305:13): [True: 2.53k, False: 0]
  ------------------
 2306|  2.53k|            VISIT_SEQ_WITH_NULL(st, expr,
  ------------------
  |  | 1777|  2.53k|    do { \
  |  | 1778|  2.53k|        int i = 0; \
  |  | 1779|  2.53k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1780|  2.81k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.81k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.63k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.81k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1780:21): [True: 278, False: 2.53k]
  |  |  ------------------
  |  | 1781|    278|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    278|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    278|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1782|    278|            if (!elt) continue; /* can be NULL */ \
  |  |  ------------------
  |  |  |  Branch (1782:17): [True: 197, False: 81]
  |  |  ------------------
  |  | 1783|    278|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1783:17): [True: 0, False: 81]
  |  |  ------------------
  |  | 1784|     81|                return 0;             \
  |  | 1785|     81|        } \
  |  | 1786|  2.53k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1786:13): [Folded, False: 2.53k]
  |  |  ------------------
  ------------------
 2307|  2.53k|                                s->v.AsyncFunctionDef.args->kw_defaults);
 2308|  2.53k|        if (s->v.AsyncFunctionDef.decorator_list)
  ------------------
  |  Branch (2308:13): [True: 113, False: 2.42k]
  ------------------
 2309|    113|            VISIT_SEQ(st, expr, s->v.AsyncFunctionDef.decorator_list);
  ------------------
  |  | 1755|    113|    do { \
  |  | 1756|    113|        Py_ssize_t i; \
  |  | 1757|    113|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    430|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    430|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    860|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 430]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 317, False: 113]
  |  |  ------------------
  |  | 1759|    317|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    317|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    317|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    317|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 317]
  |  |  ------------------
  |  | 1761|    317|                return 0;                 \
  |  | 1762|    317|        } \
  |  | 1763|    113|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 113]
  |  |  ------------------
  ------------------
 2310|  2.53k|        if (asdl_seq_LEN(s->v.AsyncFunctionDef.type_params) > 0) {
  ------------------
  |  |   83|  2.53k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  5.07k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2.53k, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2310:13): [True: 6, False: 2.53k]
  ------------------
 2311|      6|            if (!symtable_enter_type_param_block(
  ------------------
  |  Branch (2311:17): [True: 0, False: 6]
  ------------------
 2312|      6|                    st, s->v.AsyncFunctionDef.name,
 2313|      6|                    (void *)s->v.AsyncFunctionDef.type_params,
 2314|      6|                    s->v.AsyncFunctionDef.args->defaults != NULL,
 2315|      6|                    has_kwonlydefaults(s->v.AsyncFunctionDef.args->kwonlyargs,
 2316|      6|                                       s->v.AsyncFunctionDef.args->kw_defaults),
 2317|      6|                    s->kind,
 2318|      6|                    LOCATION(s))) {
  ------------------
  |  |   86|      6|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      6|    (_Py_SourceLocation){ \
  |  |  |  |   59|      6|               .lineno = (n)->lineno, \
  |  |  |  |   60|      6|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      6|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      6|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2319|      0|                return 0;
 2320|      0|            }
 2321|      6|            VISIT_SEQ(st, type_param, s->v.AsyncFunctionDef.type_params);
  ------------------
  |  | 1755|      6|    do { \
  |  | 1756|      6|        Py_ssize_t i; \
  |  | 1757|      6|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|     25|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|     25|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     50|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 25]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 20, False: 5]
  |  |  ------------------
  |  | 1759|     20|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     20|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     20|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|     20|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 19]
  |  |  ------------------
  |  | 1761|     20|                return 0;                 \
  |  | 1762|     20|        } \
  |  | 1763|      6|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 5]
  |  |  ------------------
  ------------------
 2322|      6|        }
 2323|  2.53k|        PySTEntryObject *new_ste = ste_new(st, s->v.FunctionDef.name, FunctionBlock, (void *)s,
 2324|  2.53k|                                           LOCATION(s));
  ------------------
  |  |   86|  2.53k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.53k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.53k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.53k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.53k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.53k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2325|  2.53k|        if (!new_ste) {
  ------------------
  |  Branch (2325:13): [True: 0, False: 2.53k]
  ------------------
 2326|      0|            return 0;
 2327|      0|        }
 2328|       |
 2329|  2.53k|        if (_PyAST_GetDocString(s->v.AsyncFunctionDef.body)) {
  ------------------
  |  Branch (2329:13): [True: 0, False: 2.53k]
  ------------------
 2330|      0|            new_ste->ste_has_docstring = 1;
 2331|      0|        }
 2332|       |
 2333|  2.53k|        if (!symtable_visit_annotations(st, s, s->v.AsyncFunctionDef.args,
  ------------------
  |  Branch (2333:13): [True: 0, False: 2.53k]
  ------------------
 2334|  2.53k|                                        s->v.AsyncFunctionDef.returns, new_ste)) {
 2335|      0|            Py_DECREF(new_ste);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2336|      0|            return 0;
 2337|      0|        }
 2338|  2.53k|        if (!symtable_enter_existing_block(st, new_ste, /* add_to_children */true)) {
  ------------------
  |  Branch (2338:13): [True: 0, False: 2.53k]
  ------------------
 2339|      0|            Py_DECREF(new_ste);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2340|      0|            return 0;
 2341|      0|        }
 2342|  2.53k|        Py_DECREF(new_ste);
  ------------------
  |  |  430|  2.53k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.53k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.53k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2343|       |
 2344|  2.53k|        st->st_cur->ste_coroutine = 1;
 2345|  2.53k|        VISIT(st, arguments, s->v.AsyncFunctionDef.args);
  ------------------
  |  | 1748|  2.53k|    do { \
  |  | 1749|  2.53k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 10, False: 2.52k]
  |  |  ------------------
  |  | 1750|     10|            return 0; \
  |  | 1751|     10|        } \
  |  | 1752|  2.53k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 2.52k]
  |  |  ------------------
  ------------------
 2346|  2.52k|        VISIT_SEQ(st, stmt, s->v.AsyncFunctionDef.body);
  ------------------
  |  | 1755|  2.52k|    do { \
  |  | 1756|  2.52k|        Py_ssize_t i; \
  |  | 1757|  2.52k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  12.2k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  12.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  24.4k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 12.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 9.70k, False: 2.52k]
  |  |  ------------------
  |  | 1759|  9.70k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  9.70k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  9.70k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  9.70k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 9.70k]
  |  |  ------------------
  |  | 1761|  9.70k|                return 0;                 \
  |  | 1762|  9.70k|        } \
  |  | 1763|  2.52k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.52k]
  |  |  ------------------
  ------------------
 2347|  2.52k|        if (!symtable_exit_block(st))
  ------------------
  |  Branch (2347:13): [True: 0, False: 2.52k]
  ------------------
 2348|      0|            return 0;
 2349|  2.52k|        if (asdl_seq_LEN(s->v.AsyncFunctionDef.type_params) > 0) {
  ------------------
  |  |   83|  2.52k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  5.04k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 2.51k, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2349:13): [True: 5, False: 2.51k]
  ------------------
 2350|      5|            if (!symtable_exit_block(st))
  ------------------
  |  Branch (2350:17): [True: 0, False: 5]
  ------------------
 2351|      0|                return 0;
 2352|      5|        }
 2353|  2.52k|        break;
 2354|  2.52k|    }
 2355|  2.52k|    case AsyncWith_kind: {
  ------------------
  |  Branch (2355:5): [True: 2.09k, False: 171k]
  ------------------
 2356|  2.09k|        maybe_set_ste_coroutine_for_module(st, s);
 2357|  2.09k|        if (!symtable_raise_if_not_coroutine(st, ASYNC_WITH_OUTSIDE_ASYNC_FUNC, LOCATION(s))) {
  ------------------
  |  |   80|  2.09k|#define ASYNC_WITH_OUTSIDE_ASYNC_FUNC \
  |  |   81|  2.09k|"'async with' outside async function"
  ------------------
                      if (!symtable_raise_if_not_coroutine(st, ASYNC_WITH_OUTSIDE_ASYNC_FUNC, LOCATION(s))) {
  ------------------
  |  |   86|  2.09k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.09k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.09k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.09k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.09k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.09k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2357:13): [True: 5, False: 2.08k]
  ------------------
 2358|      5|            return 0;
 2359|      5|        }
 2360|  2.08k|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|  2.08k|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|  2.08k|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2361|  2.08k|        VISIT_SEQ(st, withitem, s->v.AsyncWith.items);
  ------------------
  |  | 1755|  2.08k|    do { \
  |  | 1756|  2.08k|        Py_ssize_t i; \
  |  | 1757|  2.08k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  13.0k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  13.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  26.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 10.9k, False: 2.08k]
  |  |  ------------------
  |  | 1759|  10.9k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  10.9k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  10.9k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  10.9k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 10.9k]
  |  |  ------------------
  |  | 1761|  10.9k|                return 0;                 \
  |  | 1762|  10.9k|        } \
  |  | 1763|  2.08k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.08k]
  |  |  ------------------
  ------------------
 2362|  2.08k|        VISIT_SEQ(st, stmt, s->v.AsyncWith.body);
  ------------------
  |  | 1755|  2.08k|    do { \
  |  | 1756|  2.08k|        Py_ssize_t i; \
  |  | 1757|  2.08k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  5.93k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  5.93k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  11.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 5.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 3.84k, False: 2.08k]
  |  |  ------------------
  |  | 1759|  3.84k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.84k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.84k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  3.84k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 3.84k]
  |  |  ------------------
  |  | 1761|  3.84k|                return 0;                 \
  |  | 1762|  3.84k|        } \
  |  | 1763|  2.08k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.08k]
  |  |  ------------------
  ------------------
 2363|  2.08k|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|  2.08k|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2364|  2.08k|        break;
 2365|  2.08k|    }
 2366|     94|    case AsyncFor_kind: {
  ------------------
  |  Branch (2366:5): [True: 94, False: 173k]
  ------------------
 2367|     94|        maybe_set_ste_coroutine_for_module(st, s);
 2368|     94|        if (!symtable_raise_if_not_coroutine(st, ASYNC_FOR_OUTSIDE_ASYNC_FUNC, LOCATION(s))) {
  ------------------
  |  |   83|     94|#define ASYNC_FOR_OUTSIDE_ASYNC_FUNC \
  |  |   84|     94|"'async for' outside async function"
  ------------------
                      if (!symtable_raise_if_not_coroutine(st, ASYNC_FOR_OUTSIDE_ASYNC_FUNC, LOCATION(s))) {
  ------------------
  |  |   86|     94|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     94|    (_Py_SourceLocation){ \
  |  |  |  |   59|     94|               .lineno = (n)->lineno, \
  |  |  |  |   60|     94|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     94|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     94|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2368:13): [True: 1, False: 93]
  ------------------
 2369|      1|            return 0;
 2370|      1|        }
 2371|     93|        VISIT(st, expr, s->v.AsyncFor.target);
  ------------------
  |  | 1748|     93|    do { \
  |  | 1749|     93|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 93]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|     93|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 93]
  |  |  ------------------
  ------------------
 2372|     93|        VISIT(st, expr, s->v.AsyncFor.iter);
  ------------------
  |  | 1748|     93|    do { \
  |  | 1749|     93|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 93]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|     93|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 93]
  |  |  ------------------
  ------------------
 2373|     93|        ENTER_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1789|     93|    int in_conditional_block = (ST)->st_cur->ste_in_conditional_block; \
  |  | 1790|     93|    (ST)->st_cur->ste_in_conditional_block = 1;
  ------------------
 2374|     93|        VISIT_SEQ(st, stmt, s->v.AsyncFor.body);
  ------------------
  |  | 1755|     93|    do { \
  |  | 1756|     93|        Py_ssize_t i; \
  |  | 1757|     93|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    200|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    200|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    400|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 200]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 107, False: 93]
  |  |  ------------------
  |  | 1759|    107|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    107|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    107|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    107|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 107]
  |  |  ------------------
  |  | 1761|    107|                return 0;                 \
  |  | 1762|    107|        } \
  |  | 1763|     93|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 93]
  |  |  ------------------
  ------------------
 2375|     93|        if (s->v.AsyncFor.orelse)
  ------------------
  |  Branch (2375:13): [True: 44, False: 49]
  ------------------
 2376|     44|            VISIT_SEQ(st, stmt, s->v.AsyncFor.orelse);
  ------------------
  |  | 1755|     44|    do { \
  |  | 1756|     44|        Py_ssize_t i; \
  |  | 1757|     44|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    166|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    166|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    332|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 166]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 122, False: 44]
  |  |  ------------------
  |  | 1759|    122|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    122|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    122|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    122|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 122]
  |  |  ------------------
  |  | 1761|    122|                return 0;                 \
  |  | 1762|    122|        } \
  |  | 1763|     44|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 44]
  |  |  ------------------
  ------------------
 2377|     93|        LEAVE_CONDITIONAL_BLOCK(st);
  ------------------
  |  | 1793|     93|    (ST)->st_cur->ste_in_conditional_block = in_conditional_block;
  ------------------
 2378|     93|        break;
 2379|     93|    }
 2380|   173k|    }
 2381|   173k|    LEAVE_RECURSIVE();
  ------------------
  |  | 1807|   173k|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
 2382|   173k|    return 1;
 2383|   173k|}
symtable.c:symtable_enter_type_param_block:
 1685|  4.24k|{
 1686|  4.24k|    _Py_block_ty current_type = st->st_cur->ste_type;
 1687|  4.24k|    if(!symtable_enter_block(st, name, TypeParametersBlock, ast, loc)) {
  ------------------
  |  Branch (1687:8): [True: 0, False: 4.24k]
  ------------------
 1688|      0|        return 0;
 1689|      0|    }
 1690|  4.24k|    if (current_type == ClassBlock) {
  ------------------
  |  Branch (1690:9): [True: 170, False: 4.07k]
  ------------------
 1691|    170|        st->st_cur->ste_can_see_class_scope = 1;
 1692|    170|        if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, loc)) {
  ------------------
  |  |  936|    170|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    170|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    170|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, loc)) {
  ------------------
  |  |  174|    170|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (1692:13): [True: 0, False: 170]
  ------------------
 1693|      0|            goto error;
 1694|      0|        }
 1695|    170|    }
 1696|  4.24k|    if (kind == ClassDef_kind) {
  ------------------
  |  Branch (1696:9): [True: 1.76k, False: 2.47k]
  ------------------
 1697|  1.76k|        _Py_DECLARE_STR(type_params, ".type_params");
 1698|       |        // It gets "set" when we create the type params tuple and
 1699|       |        // "used" when we build up the bases.
 1700|  1.76k|        if (!symtable_add_def(st, &_Py_STR(type_params), DEF_LOCAL, loc)) {
  ------------------
  |  |  938|  1.76k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.76k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.76k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(type_params), DEF_LOCAL, loc)) {
  ------------------
  |  |  171|  1.76k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
  |  Branch (1700:13): [True: 0, False: 1.76k]
  ------------------
 1701|      0|            goto error;
 1702|      0|        }
 1703|  1.76k|        if (!symtable_add_def(st, &_Py_STR(type_params), USE, loc)) {
  ------------------
  |  |  938|  1.76k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.76k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.76k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(type_params), USE, loc)) {
  ------------------
  |  |  174|  1.76k|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (1703:13): [True: 0, False: 1.76k]
  ------------------
 1704|      0|            goto error;
 1705|      0|        }
 1706|       |        // This is used for setting the generic base
 1707|  1.76k|        _Py_DECLARE_STR(generic_base, ".generic_base");
 1708|  1.76k|        if (!symtable_add_def(st, &_Py_STR(generic_base), DEF_LOCAL, loc)) {
  ------------------
  |  |  938|  1.76k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.76k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.76k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(generic_base), DEF_LOCAL, loc)) {
  ------------------
  |  |  171|  1.76k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
  |  Branch (1708:13): [True: 0, False: 1.76k]
  ------------------
 1709|      0|            goto error;
 1710|      0|        }
 1711|  1.76k|        if (!symtable_add_def(st, &_Py_STR(generic_base), USE, loc)) {
  ------------------
  |  |  938|  1.76k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  1.76k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  1.76k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(generic_base), USE, loc)) {
  ------------------
  |  |  174|  1.76k|#define USE (2<<3)               /* name is used */
  ------------------
  |  Branch (1711:13): [True: 0, False: 1.76k]
  ------------------
 1712|      0|            goto error;
 1713|      0|        }
 1714|  1.76k|    }
 1715|  4.24k|    if (has_defaults) {
  ------------------
  |  Branch (1715:9): [True: 2.47k, False: 1.76k]
  ------------------
 1716|  2.47k|        _Py_DECLARE_STR(defaults, ".defaults");
 1717|  2.47k|        if (!symtable_add_def(st, &_Py_STR(defaults), DEF_PARAM, loc)) {
  ------------------
  |  |  938|  2.47k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  2.47k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.47k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(defaults), DEF_PARAM, loc)) {
  ------------------
  |  |  172|  2.47k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (1717:13): [True: 0, False: 2.47k]
  ------------------
 1718|      0|            goto error;
 1719|      0|        }
 1720|  2.47k|    }
 1721|  4.24k|    if (has_kwdefaults) {
  ------------------
  |  Branch (1721:9): [True: 0, False: 4.24k]
  ------------------
 1722|      0|        _Py_DECLARE_STR(kwdefaults, ".kwdefaults");
 1723|      0|        if (!symtable_add_def(st, &_Py_STR(kwdefaults), DEF_PARAM, loc)) {
  ------------------
  |  |  938|      0|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_STR(kwdefaults), DEF_PARAM, loc)) {
  ------------------
  |  |  172|      0|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (1723:13): [True: 0, False: 0]
  ------------------
 1724|      0|            goto error;
 1725|      0|        }
 1726|      0|    }
 1727|  4.24k|    return 1;
 1728|      0|error:
 1729|      0|    symtable_exit_block(st);
 1730|      0|    return 0;
 1731|  4.24k|}
symtable.c:has_kwonlydefaults:
 1834|  2.47k|{
 1835|  2.47k|    for (int i = 0; i < asdl_seq_LEN(kwonlyargs); i++) {
  ------------------
  |  |   83|  2.47k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  4.94k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.47k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1835:21): [True: 0, False: 2.47k]
  ------------------
 1836|      0|        expr_ty default_ = asdl_seq_GET(kw_defaults, i);
  ------------------
  |  |   82|      0|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|      0|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1837|      0|        if (default_) {
  ------------------
  |  Branch (1837:13): [True: 0, False: 0]
  ------------------
 1838|      0|            return 1;
 1839|      0|        }
 1840|      0|    }
 1841|  2.47k|    return 0;
 1842|  2.47k|}
symtable.c:symtable_visit_type_param:
 2731|  8.31k|{
 2732|  8.31k|    ENTER_RECURSIVE();
  ------------------
  |  | 1802|  8.31k|#define ENTER_RECURSIVE() \
  |  | 1803|  8.31k|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (1803:5): [True: 0, False: 8.31k]
  |  |  ------------------
  |  | 1804|      0|    return 0; \
  |  | 1805|      0|}
  ------------------
 2733|  8.31k|    switch(tp->kind) {
  ------------------
  |  Branch (2733:12): [True: 8.31k, False: 0]
  ------------------
 2734|  7.92k|    case TypeVar_kind:
  ------------------
  |  Branch (2734:5): [True: 7.92k, False: 385]
  ------------------
 2735|  7.92k|        if (!symtable_add_def(st, tp->v.TypeVar.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp)))
  ------------------
  |  |  179|  7.92k|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
                      if (!symtable_add_def(st, tp->v.TypeVar.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp)))
  ------------------
  |  |  171|  7.92k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, tp->v.TypeVar.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp)))
  ------------------
  |  |   86|  7.92k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  7.92k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  7.92k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  7.92k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  7.92k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  7.92k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2735:13): [True: 10, False: 7.91k]
  ------------------
 2736|     10|            return 0;
 2737|       |
 2738|  7.91k|        const char *ste_scope_info = NULL;
 2739|  7.91k|        const expr_ty bound = tp->v.TypeVar.bound;
 2740|  7.91k|        if (bound != NULL) {
  ------------------
  |  Branch (2740:13): [True: 1.45k, False: 6.46k]
  ------------------
 2741|  1.45k|            ste_scope_info = bound->kind == Tuple_kind ? "a TypeVar constraint" : "a TypeVar bound";
  ------------------
  |  Branch (2741:30): [True: 0, False: 1.45k]
  ------------------
 2742|  1.45k|        }
 2743|       |
 2744|       |        // We must use a different key for the bound and default. The obvious choice would be to
 2745|       |        // use the .bound and .default_value pointers, but that fails when the expression immediately
 2746|       |        // inside the bound or default is a comprehension: we would reuse the same key for
 2747|       |        // the comprehension scope. Therefore, use the address + 1 as the second key.
 2748|       |        // The only requirement for the key is that it is unique and it matches the logic in
 2749|       |        // compile.c where the scope is retrieved.
 2750|  7.91k|        if (!symtable_visit_type_param_bound_or_default(st, tp->v.TypeVar.bound, tp->v.TypeVar.name,
  ------------------
  |  Branch (2750:13): [True: 1, False: 7.91k]
  ------------------
 2751|  7.91k|                                                        tp, ste_scope_info)) {
 2752|      1|            return 0;
 2753|      1|        }
 2754|       |
 2755|  7.91k|        if (!symtable_visit_type_param_bound_or_default(st, tp->v.TypeVar.default_value, tp->v.TypeVar.name,
  ------------------
  |  Branch (2755:13): [True: 0, False: 7.91k]
  ------------------
 2756|  7.91k|                                                        (type_param_ty)((uintptr_t)tp + 1), "a TypeVar default")) {
 2757|      0|            return 0;
 2758|      0|        }
 2759|  7.91k|        break;
 2760|  7.91k|    case TypeVarTuple_kind:
  ------------------
  |  Branch (2760:5): [True: 337, False: 7.97k]
  ------------------
 2761|    337|        if (!symtable_add_def(st, tp->v.TypeVarTuple.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp))) {
  ------------------
  |  |  179|    337|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
                      if (!symtable_add_def(st, tp->v.TypeVarTuple.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp))) {
  ------------------
  |  |  171|    337|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, tp->v.TypeVarTuple.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp))) {
  ------------------
  |  |   86|    337|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    337|    (_Py_SourceLocation){ \
  |  |  |  |   59|    337|               .lineno = (n)->lineno, \
  |  |  |  |   60|    337|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    337|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    337|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2761:13): [True: 2, False: 335]
  ------------------
 2762|      2|            return 0;
 2763|      2|        }
 2764|       |
 2765|    335|        if (!symtable_visit_type_param_bound_or_default(st, tp->v.TypeVarTuple.default_value, tp->v.TypeVarTuple.name,
  ------------------
  |  Branch (2765:13): [True: 0, False: 335]
  ------------------
 2766|    335|                                                        tp, "a TypeVarTuple default")) {
 2767|      0|            return 0;
 2768|      0|        }
 2769|    335|        break;
 2770|    335|    case ParamSpec_kind:
  ------------------
  |  Branch (2770:5): [True: 48, False: 8.26k]
  ------------------
 2771|     48|        if (!symtable_add_def(st, tp->v.ParamSpec.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp))) {
  ------------------
  |  |  179|     48|#define DEF_TYPE_PARAM (2<<9)    /* this name is a type parameter */
  ------------------
                      if (!symtable_add_def(st, tp->v.ParamSpec.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp))) {
  ------------------
  |  |  171|     48|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, tp->v.ParamSpec.name, DEF_TYPE_PARAM | DEF_LOCAL, LOCATION(tp))) {
  ------------------
  |  |   86|     48|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     48|    (_Py_SourceLocation){ \
  |  |  |  |   59|     48|               .lineno = (n)->lineno, \
  |  |  |  |   60|     48|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     48|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     48|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2771:13): [True: 0, False: 48]
  ------------------
 2772|      0|            return 0;
 2773|      0|        }
 2774|       |
 2775|     48|        if (!symtable_visit_type_param_bound_or_default(st, tp->v.ParamSpec.default_value, tp->v.ParamSpec.name,
  ------------------
  |  Branch (2775:13): [True: 0, False: 48]
  ------------------
 2776|     48|                                                        tp, "a ParamSpec default")) {
 2777|      0|            return 0;
 2778|      0|        }
 2779|     48|        break;
 2780|  8.31k|    }
 2781|  8.30k|    LEAVE_RECURSIVE();
  ------------------
  |  | 1807|  8.30k|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
 2782|  8.30k|    return 1;
 2783|  8.31k|}
symtable.c:symtable_visit_type_param_bound_or_default:
 2693|  16.2k|{
 2694|  16.2k|    if (_PyUnicode_Equal(name, &_Py_ID(__classdict__))) {
  ------------------
  |  |  936|  16.2k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  16.2k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  16.2k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2694:9): [True: 0, False: 16.2k]
  ------------------
 2695|       |
 2696|      0|        PyObject *error_msg = PyUnicode_FromFormat("reserved name '%U' cannot be "
 2697|      0|                                                   "used for type parameter", name);
 2698|      0|        if (error_msg == NULL) {
  ------------------
  |  Branch (2698:13): [True: 0, False: 0]
  ------------------
 2699|      0|            return 0;
 2700|      0|        }
 2701|      0|        PyErr_SetObject(PyExc_SyntaxError, error_msg);
 2702|      0|        Py_DECREF(error_msg);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2703|      0|        SET_ERROR_LOCATION(st->st_filename, LOCATION(tp));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2704|      0|        return 0;
 2705|      0|    }
 2706|       |
 2707|  16.2k|    if (e) {
  ------------------
  |  Branch (2707:9): [True: 1.52k, False: 14.6k]
  ------------------
 2708|  1.52k|        int is_in_class = st->st_cur->ste_can_see_class_scope;
 2709|  1.52k|        if (!symtable_enter_block(st, name, TypeVariableBlock, (void *)tp, LOCATION(e))) {
  ------------------
  |  |   86|  1.52k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.52k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.52k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.52k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.52k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.52k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2709:13): [True: 0, False: 1.52k]
  ------------------
 2710|      0|            return 0;
 2711|      0|        }
 2712|       |
 2713|  1.52k|        st->st_cur->ste_can_see_class_scope = is_in_class;
 2714|  1.52k|        if (is_in_class && !symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(e))) {
  ------------------
  |  |  936|     49|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     49|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     49|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (is_in_class && !symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(e))) {
  ------------------
  |  |  174|     49|#define USE (2<<3)               /* name is used */
  ------------------
                      if (is_in_class && !symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(e))) {
  ------------------
  |  |   86|     49|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     49|    (_Py_SourceLocation){ \
  |  |  |  |   59|     49|               .lineno = (n)->lineno, \
  |  |  |  |   60|     49|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     49|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     49|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2714:13): [True: 49, False: 1.47k]
  |  Branch (2714:28): [True: 0, False: 49]
  ------------------
 2715|      0|            return 0;
 2716|      0|        }
 2717|       |
 2718|  1.52k|        assert(ste_scope_info != NULL);
  ------------------
  |  Branch (2718:9): [True: 1.52k, False: 0]
  ------------------
 2719|  1.52k|        st->st_cur->ste_scope_info = ste_scope_info;
 2720|  1.52k|        VISIT(st, expr, e);
  ------------------
  |  | 1748|  1.52k|    do { \
  |  | 1749|  1.52k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 1.52k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  1.52k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.52k]
  |  |  ------------------
  ------------------
 2721|       |
 2722|  1.52k|        if (!symtable_exit_block(st)) {
  ------------------
  |  Branch (2722:13): [True: 0, False: 1.52k]
  ------------------
 2723|      0|            return 0;
 2724|      0|        }
 2725|  1.52k|    }
 2726|  16.2k|    return 1;
 2727|  16.2k|}
symtable.c:symtable_visit_annotations:
 2942|  7.72k|{
 2943|  7.72k|    int is_in_class = st->st_cur->ste_can_see_class_scope;
 2944|  7.72k|    _Py_block_ty current_type = st->st_cur->ste_type;
 2945|  7.72k|    if (!symtable_enter_block(st, &_Py_ID(__annotate__), AnnotationBlock,
  ------------------
  |  |  936|  7.72k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  7.72k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  7.72k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2945:9): [True: 0, False: 7.72k]
  ------------------
 2946|  7.72k|                              (void *)a, LOCATION(o))) {
  ------------------
  |  |   86|  7.72k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  7.72k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  7.72k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  7.72k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  7.72k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  7.72k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2947|      0|        return 0;
 2948|      0|    }
 2949|  7.72k|    Py_XSETREF(st->st_cur->ste_function_name, Py_NewRef(function_ste->ste_name));
  ------------------
  |  |  376|  7.72k|    do { \
  |  |  377|  7.72k|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|  7.72k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  378|  7.72k|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|  7.72k|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  379|  7.72k|        *_tmp_dst_ptr = (src); \
  |  |  380|  7.72k|        Py_XDECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  524|  7.72k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  7.72k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  7.72k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  381|  7.72k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (381:14): [Folded, False: 7.72k]
  |  |  ------------------
  ------------------
 2950|  7.72k|    if (is_in_class || current_type == ClassBlock) {
  ------------------
  |  Branch (2950:9): [True: 0, False: 7.72k]
  |  Branch (2950:24): [True: 0, False: 7.72k]
  ------------------
 2951|      0|        st->st_cur->ste_can_see_class_scope = 1;
 2952|      0|        if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(o))) {
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(o))) {
  ------------------
  |  |  174|      0|#define USE (2<<3)               /* name is used */
  ------------------
                      if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(o))) {
  ------------------
  |  |   86|      0|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2952:13): [True: 0, False: 0]
  ------------------
 2953|      0|            return 0;
 2954|      0|        }
 2955|      0|    }
 2956|  7.72k|    if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs))
  ------------------
  |  Branch (2956:9): [True: 7.72k, False: 0]
  |  Branch (2956:27): [True: 1, False: 7.72k]
  ------------------
 2957|      1|        return 0;
 2958|  7.72k|    if (a->args && !symtable_visit_argannotations(st, a->args))
  ------------------
  |  Branch (2958:9): [True: 7.72k, False: 0]
  |  Branch (2958:20): [True: 1, False: 7.72k]
  ------------------
 2959|      1|        return 0;
 2960|  7.72k|    if (a->vararg && a->vararg->annotation) {
  ------------------
  |  Branch (2960:9): [True: 409, False: 7.31k]
  |  Branch (2960:22): [True: 256, False: 153]
  ------------------
 2961|    256|        st->st_cur->ste_annotations_used = 1;
 2962|    256|        VISIT(st, expr, a->vararg->annotation);
  ------------------
  |  | 1748|    256|    do { \
  |  | 1749|    256|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 256]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    256|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 256]
  |  |  ------------------
  ------------------
 2963|    256|    }
 2964|  7.72k|    if (a->kwarg && a->kwarg->annotation) {
  ------------------
  |  Branch (2964:9): [True: 757, False: 6.96k]
  |  Branch (2964:21): [True: 657, False: 100]
  ------------------
 2965|    657|        st->st_cur->ste_annotations_used = 1;
 2966|    657|        VISIT(st, expr, a->kwarg->annotation);
  ------------------
  |  | 1748|    657|    do { \
  |  | 1749|    657|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 657]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    657|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 657]
  |  |  ------------------
  ------------------
 2967|    657|    }
 2968|  7.72k|    if (a->kwonlyargs && !symtable_visit_argannotations(st, a->kwonlyargs))
  ------------------
  |  Branch (2968:9): [True: 7.72k, False: 0]
  |  Branch (2968:26): [True: 0, False: 7.72k]
  ------------------
 2969|      0|        return 0;
 2970|  7.72k|    if (returns) {
  ------------------
  |  Branch (2970:9): [True: 2.41k, False: 5.30k]
  ------------------
 2971|  2.41k|        st->st_cur->ste_annotations_used = 1;
 2972|  2.41k|        VISIT(st, expr, returns);
  ------------------
  |  | 1748|  2.41k|    do { \
  |  | 1749|  2.41k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 2.41k]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|  2.41k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 2.41k]
  |  |  ------------------
  ------------------
 2973|  2.41k|    }
 2974|  7.72k|    if (!symtable_exit_block(st)) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 7.72k]
  ------------------
 2975|      0|        return 0;
 2976|      0|    }
 2977|  7.72k|    return 1;
 2978|  7.72k|}
symtable.c:symtable_visit_argannotations:
 2925|  23.1k|{
 2926|  23.1k|    Py_ssize_t i;
 2927|       |
 2928|  26.1k|    for (i = 0; i < asdl_seq_LEN(args); i++) {
  ------------------
  |  |   83|  26.1k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  52.3k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 26.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2928:17): [True: 3.02k, False: 23.1k]
  ------------------
 2929|  3.02k|        arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
  ------------------
  |  |   82|  3.02k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  3.02k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2930|  3.02k|        if (arg->annotation) {
  ------------------
  |  Branch (2930:13): [True: 524, False: 2.50k]
  ------------------
 2931|    524|            st->st_cur->ste_annotations_used = 1;
 2932|    524|            VISIT(st, expr, arg->annotation);
  ------------------
  |  | 1748|    524|    do { \
  |  | 1749|    524|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 522]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|    524|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 522]
  |  |  ------------------
  ------------------
 2933|    524|        }
 2934|  3.02k|    }
 2935|       |
 2936|  23.1k|    return 1;
 2937|  23.1k|}
symtable.c:symtable_visit_arguments:
 2982|  12.0k|{
 2983|       |    /* skip default arguments inside function block
 2984|       |       XXX should ast be different?
 2985|       |    */
 2986|  12.0k|    if (a->posonlyargs && !symtable_visit_params(st, a->posonlyargs))
  ------------------
  |  Branch (2986:9): [True: 12.0k, False: 0]
  |  Branch (2986:27): [True: 7, False: 12.0k]
  ------------------
 2987|      7|        return 0;
 2988|  12.0k|    if (a->args && !symtable_visit_params(st, a->args))
  ------------------
  |  Branch (2988:9): [True: 12.0k, False: 0]
  |  Branch (2988:20): [True: 8, False: 12.0k]
  ------------------
 2989|      8|        return 0;
 2990|  12.0k|    if (a->kwonlyargs && !symtable_visit_params(st, a->kwonlyargs))
  ------------------
  |  Branch (2990:9): [True: 12.0k, False: 0]
  |  Branch (2990:26): [True: 23, False: 12.0k]
  ------------------
 2991|     23|        return 0;
 2992|  12.0k|    if (a->vararg) {
  ------------------
  |  Branch (2992:9): [True: 2.73k, False: 9.26k]
  ------------------
 2993|  2.73k|        if (!symtable_add_def(st, a->vararg->arg, DEF_PARAM, LOCATION(a->vararg)))
  ------------------
  |  |  172|  2.73k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                      if (!symtable_add_def(st, a->vararg->arg, DEF_PARAM, LOCATION(a->vararg)))
  ------------------
  |  |   86|  2.73k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.73k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.73k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.73k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.73k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.73k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2993:13): [True: 1, False: 2.73k]
  ------------------
 2994|      1|            return 0;
 2995|  2.73k|        st->st_cur->ste_varargs = 1;
 2996|  2.73k|    }
 2997|  12.0k|    if (a->kwarg) {
  ------------------
  |  Branch (2997:9): [True: 814, False: 11.1k]
  ------------------
 2998|    814|        if (!symtable_add_def(st, a->kwarg->arg, DEF_PARAM, LOCATION(a->kwarg)))
  ------------------
  |  |  172|    814|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                      if (!symtable_add_def(st, a->kwarg->arg, DEF_PARAM, LOCATION(a->kwarg)))
  ------------------
  |  |   86|    814|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    814|    (_Py_SourceLocation){ \
  |  |  |  |   59|    814|               .lineno = (n)->lineno, \
  |  |  |  |   60|    814|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    814|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    814|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2998:13): [True: 0, False: 814]
  ------------------
 2999|      0|            return 0;
 3000|    814|        st->st_cur->ste_varkeywords = 1;
 3001|    814|    }
 3002|  12.0k|    return 1;
 3003|  12.0k|}
symtable.c:symtable_visit_params:
 2857|  36.1k|{
 2858|  36.1k|    Py_ssize_t i;
 2859|       |
 2860|  42.3k|    for (i = 0; i < asdl_seq_LEN(args); i++) {
  ------------------
  |  |   83|  42.3k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  84.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 0, False: 42.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2860:17): [True: 6.27k, False: 36.0k]
  ------------------
 2861|  6.27k|        arg_ty arg = (arg_ty)asdl_seq_GET(args, i);
  ------------------
  |  |   82|  6.27k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  6.27k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 2862|  6.27k|        if (!symtable_add_def(st, arg->arg, DEF_PARAM, LOCATION(arg)))
  ------------------
  |  |  172|  6.27k|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
                      if (!symtable_add_def(st, arg->arg, DEF_PARAM, LOCATION(arg)))
  ------------------
  |  |   86|  6.27k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  6.27k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  6.27k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  6.27k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  6.27k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  6.27k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2862:13): [True: 38, False: 6.23k]
  ------------------
 2863|     38|            return 0;
 2864|  6.27k|    }
 2865|       |
 2866|  36.0k|    return 1;
 2867|  36.1k|}
symtable.c:check_keywords:
 1632|  22.8k|{
 1633|  24.5k|    for (Py_ssize_t i = 0; i < asdl_seq_LEN(keywords); i++) {
  ------------------
  |  |   83|  24.5k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|  49.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 21.6k, False: 2.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1633:28): [True: 1.74k, False: 22.8k]
  ------------------
 1634|  1.74k|        keyword_ty key = ((keyword_ty)asdl_seq_GET(keywords, i));
  ------------------
  |  |   82|  1.74k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  1.74k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 1635|  1.74k|        if (key->arg  && !check_name(st, key->arg, LOCATION(key), Store)) {
  ------------------
  |  |   86|    844|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    844|    (_Py_SourceLocation){ \
  |  |  |  |   59|    844|               .lineno = (n)->lineno, \
  |  |  |  |   60|    844|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    844|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    844|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (1635:13): [True: 844, False: 899]
  |  Branch (1635:26): [True: 1, False: 843]
  ------------------
 1636|      1|            return 0;
 1637|      1|        }
 1638|  1.74k|    }
 1639|  22.8k|    return 1;
 1640|  22.8k|}
symtable.c:symtable_visit_keyword:
 3095|  1.74k|{
 3096|  1.74k|    VISIT(st, expr, k->value);
  ------------------
  |  | 1748|  1.74k|    do { \
  |  | 1749|  1.74k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 6, False: 1.73k]
  |  |  ------------------
  |  | 1750|      6|            return 0; \
  |  | 1751|      6|        } \
  |  | 1752|  1.74k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.73k]
  |  |  ------------------
  ------------------
 3097|  1.73k|    return 1;
 3098|  1.74k|}
symtable.c:symtable_lookup:
 1540|  24.5k|{
 1541|  24.5k|    return symtable_lookup_entry(st, st->st_cur, name);
 1542|  24.5k|}
symtable.c:symtable_lookup_entry:
 1526|  27.4k|{
 1527|  27.4k|    PyObject *mangled = _Py_MaybeMangle(st->st_private, ste, name);
 1528|  27.4k|    if (!mangled)
  ------------------
  |  Branch (1528:9): [True: 0, False: 27.4k]
  ------------------
 1529|      0|        return -1;
 1530|  27.4k|    long ret = _PyST_GetSymbol(ste, mangled);
 1531|  27.4k|    Py_DECREF(mangled);
  ------------------
  |  |  430|  27.4k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  27.4k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  27.4k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1532|  27.4k|    if (ret < 0) {
  ------------------
  |  Branch (1532:9): [True: 0, False: 27.4k]
  ------------------
 1533|      0|        return -1;
 1534|      0|    }
 1535|  27.4k|    return ret;
 1536|  27.4k|}
symtable.c:symtable_visit_annotation:
 2871|  24.4k|{
 2872|       |    // Annotations in local scopes are not executed and should not affect the symtable
 2873|  24.4k|    bool is_unevaluated = st->st_cur->ste_type == FunctionBlock;
 2874|       |
 2875|       |    // Module-level annotations are always considered conditional because the module
 2876|       |    // may be partially executed.
 2877|  24.4k|    if ((((st->st_cur->ste_type == ClassBlock && st->st_cur->ste_in_conditional_block)
  ------------------
  |  Branch (2877:12): [True: 14.8k, False: 9.64k]
  |  Branch (2877:50): [True: 833, False: 13.9k]
  ------------------
 2878|  23.6k|            || st->st_cur->ste_type == ModuleBlock))
  ------------------
  |  Branch (2878:16): [True: 6.12k, False: 17.4k]
  ------------------
 2879|  6.95k|            && !st->st_cur->ste_has_conditional_annotations)
  ------------------
  |  Branch (2879:16): [True: 2.81k, False: 4.13k]
  ------------------
 2880|  2.81k|    {
 2881|  2.81k|        st->st_cur->ste_has_conditional_annotations = 1;
 2882|  2.81k|        if (!symtable_add_def(st, &_Py_ID(__conditional_annotations__), USE, LOCATION(annotation))) {
  ------------------
  |  |  936|  2.81k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  2.81k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.81k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                      if (!symtable_add_def(st, &_Py_ID(__conditional_annotations__), USE, LOCATION(annotation))) {
  ------------------
  |  |  174|  2.81k|#define USE (2<<3)               /* name is used */
  ------------------
                      if (!symtable_add_def(st, &_Py_ID(__conditional_annotations__), USE, LOCATION(annotation))) {
  ------------------
  |  |   86|  2.81k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  2.81k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  2.81k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  2.81k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  2.81k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  2.81k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2882:13): [True: 0, False: 2.81k]
  ------------------
 2883|      0|            return 0;
 2884|      0|        }
 2885|  2.81k|    }
 2886|  24.4k|    struct _symtable_entry *parent_ste = st->st_cur;
 2887|  24.4k|    if (parent_ste->ste_annotation_block == NULL) {
  ------------------
  |  Branch (2887:9): [True: 10.5k, False: 13.9k]
  ------------------
 2888|  10.5k|        _Py_block_ty current_type = parent_ste->ste_type;
 2889|  10.5k|        if (!symtable_enter_block(st, &_Py_ID(__annotate__), AnnotationBlock,
  ------------------
  |  |  936|  10.5k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  10.5k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  10.5k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2889:13): [True: 0, False: 10.5k]
  ------------------
 2890|  10.5k|                                    key, LOCATION(annotation))) {
  ------------------
  |  |   86|  10.5k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  10.5k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  10.5k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  10.5k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  10.5k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  10.5k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2891|      0|            return 0;
 2892|      0|        }
 2893|  10.5k|        parent_ste->ste_annotation_block =
 2894|  10.5k|            (struct _symtable_entry *)Py_NewRef(st->st_cur);
  ------------------
  |  |  550|  10.5k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  10.5k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  10.5k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2895|  10.5k|        int future_annotations = st->st_future->ff_features & CO_FUTURE_ANNOTATIONS;
  ------------------
  |  |  147|  10.5k|#define CO_FUTURE_ANNOTATIONS    0x1000000
  ------------------
 2896|  10.5k|        if (current_type == ClassBlock && !future_annotations) {
  ------------------
  |  Branch (2896:13): [True: 5.87k, False: 4.65k]
  |  Branch (2896:43): [True: 5.15k, False: 726]
  ------------------
 2897|  5.15k|            st->st_cur->ste_can_see_class_scope = 1;
 2898|  5.15k|            parent_ste->ste_needs_classdict = 1;
 2899|  5.15k|            if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(annotation))) {
  ------------------
  |  |  936|  5.15k|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  5.15k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  5.15k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(annotation))) {
  ------------------
  |  |  174|  5.15k|#define USE (2<<3)               /* name is used */
  ------------------
                          if (!symtable_add_def(st, &_Py_ID(__classdict__), USE, LOCATION(annotation))) {
  ------------------
  |  |   86|  5.15k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  5.15k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  5.15k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  5.15k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  5.15k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  5.15k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2899:17): [True: 0, False: 5.15k]
  ------------------
 2900|      0|                return 0;
 2901|      0|            }
 2902|  5.15k|        }
 2903|  10.5k|    }
 2904|  13.9k|    else {
 2905|  13.9k|        if (!symtable_enter_existing_block(st, parent_ste->ste_annotation_block,
  ------------------
  |  Branch (2905:13): [True: 0, False: 13.9k]
  ------------------
 2906|  13.9k|                                           /* add_to_children */false)) {
 2907|      0|            return 0;
 2908|      0|        }
 2909|  13.9k|    }
 2910|  24.4k|    if (is_unevaluated) {
  ------------------
  |  Branch (2910:9): [True: 3.52k, False: 20.9k]
  ------------------
 2911|  3.52k|        st->st_cur->ste_in_unevaluated_annotation = 1;
 2912|  3.52k|    }
 2913|  24.4k|    int rc = symtable_visit_expr(st, annotation);
 2914|  24.4k|    if (is_unevaluated) {
  ------------------
  |  Branch (2914:9): [True: 3.52k, False: 20.9k]
  ------------------
 2915|  3.52k|        st->st_cur->ste_in_unevaluated_annotation = 0;
 2916|  3.52k|    }
 2917|  24.4k|    if (!symtable_exit_block(st)) {
  ------------------
  |  Branch (2917:9): [True: 0, False: 24.4k]
  ------------------
 2918|      0|        return 0;
 2919|      0|    }
 2920|  24.4k|    return rc;
 2921|  24.4k|}
symtable.c:symtable_visit_match_case:
 3030|    943|{
 3031|    943|    VISIT(st, pattern, m->pattern);
  ------------------
  |  | 1748|    943|    do { \
  |  | 1749|    943|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 942]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    943|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 942]
  |  |  ------------------
  ------------------
 3032|    942|    if (m->guard) {
  ------------------
  |  Branch (3032:9): [True: 2, False: 940]
  ------------------
 3033|      2|        VISIT(st, expr, m->guard);
  ------------------
  |  | 1748|      2|    do { \
  |  | 1749|      2|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 3034|      2|    }
 3035|    942|    VISIT_SEQ(st, stmt, m->body);
  ------------------
  |  | 1755|    942|    do { \
  |  | 1756|    942|        Py_ssize_t i; \
  |  | 1757|    942|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.02k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.02k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.04k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.08k, False: 941]
  |  |  ------------------
  |  | 1759|  1.08k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.08k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.08k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.08k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 1.08k]
  |  |  ------------------
  |  | 1761|  1.08k|                return 0;                 \
  |  | 1762|  1.08k|        } \
  |  | 1763|    942|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 941]
  |  |  ------------------
  ------------------
 3036|    941|    return 1;
 3037|    942|}
symtable.c:symtable_visit_pattern:
 2787|  10.2k|{
 2788|  10.2k|    ENTER_RECURSIVE();
  ------------------
  |  | 1802|  10.2k|#define ENTER_RECURSIVE() \
  |  | 1803|  10.2k|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (1803:5): [True: 0, False: 10.2k]
  |  |  ------------------
  |  | 1804|      0|    return 0; \
  |  | 1805|      0|}
  ------------------
 2789|  10.2k|    switch (p->kind) {
  ------------------
  |  Branch (2789:13): [True: 10.2k, False: 0]
  ------------------
 2790|  1.17k|    case MatchValue_kind:
  ------------------
  |  Branch (2790:5): [True: 1.17k, False: 9.04k]
  ------------------
 2791|  1.17k|        VISIT(st, expr, p->v.MatchValue.value);
  ------------------
  |  | 1748|  1.17k|    do { \
  |  | 1749|  1.17k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 1.17k]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|  1.17k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.17k]
  |  |  ------------------
  ------------------
 2792|  1.17k|        break;
 2793|  1.17k|    case MatchSingleton_kind:
  ------------------
  |  Branch (2793:5): [True: 457, False: 9.75k]
  ------------------
 2794|       |        /* Nothing to do here. */
 2795|    457|        break;
 2796|    937|    case MatchSequence_kind:
  ------------------
  |  Branch (2796:5): [True: 937, False: 9.27k]
  ------------------
 2797|    937|        VISIT_SEQ(st, pattern, p->v.MatchSequence.patterns);
  ------------------
  |  | 1755|    937|    do { \
  |  | 1756|    937|        Py_ssize_t i; \
  |  | 1757|    937|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  7.82k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  7.82k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  15.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 18, False: 7.80k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 6.88k, False: 936]
  |  |  ------------------
  |  | 1759|  6.88k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  6.88k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  6.88k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  6.88k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 6.88k]
  |  |  ------------------
  |  | 1761|  6.88k|                return 0;                 \
  |  | 1762|  6.88k|        } \
  |  | 1763|    937|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 936]
  |  |  ------------------
  ------------------
 2798|    936|        break;
 2799|    936|    case MatchStar_kind:
  ------------------
  |  Branch (2799:5): [True: 503, False: 9.70k]
  ------------------
 2800|    503|        if (p->v.MatchStar.name) {
  ------------------
  |  Branch (2800:13): [True: 287, False: 216]
  ------------------
 2801|    287|            if (!symtable_add_def(st, p->v.MatchStar.name, DEF_LOCAL, LOCATION(p))) {
  ------------------
  |  |  171|    287|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                          if (!symtable_add_def(st, p->v.MatchStar.name, DEF_LOCAL, LOCATION(p))) {
  ------------------
  |  |   86|    287|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    287|    (_Py_SourceLocation){ \
  |  |  |  |   59|    287|               .lineno = (n)->lineno, \
  |  |  |  |   60|    287|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    287|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    287|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2801:17): [True: 0, False: 287]
  ------------------
 2802|      0|                return 0;
 2803|      0|            }
 2804|    287|        }
 2805|    503|        break;
 2806|    503|    case MatchMapping_kind:
  ------------------
  |  Branch (2806:5): [True: 29, False: 10.1k]
  ------------------
 2807|     29|        VISIT_SEQ(st, expr, p->v.MatchMapping.keys);
  ------------------
  |  | 1755|     29|    do { \
  |  | 1756|     29|        Py_ssize_t i; \
  |  | 1757|     29|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    113|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    113|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    226|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 15, False: 98]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 84, False: 29]
  |  |  ------------------
  |  | 1759|     84|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     84|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     84|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|     84|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 84]
  |  |  ------------------
  |  | 1761|     84|                return 0;                 \
  |  | 1762|     84|        } \
  |  | 1763|     29|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 29]
  |  |  ------------------
  ------------------
 2808|     29|        VISIT_SEQ(st, pattern, p->v.MatchMapping.patterns);
  ------------------
  |  | 1755|     29|    do { \
  |  | 1756|     29|        Py_ssize_t i; \
  |  | 1757|     29|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    113|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    113|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    226|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 15, False: 98]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 84, False: 29]
  |  |  ------------------
  |  | 1759|     84|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     84|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     84|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|     84|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 84]
  |  |  ------------------
  |  | 1761|     84|                return 0;                 \
  |  | 1762|     84|        } \
  |  | 1763|     29|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 29]
  |  |  ------------------
  ------------------
 2809|     29|        if (p->v.MatchMapping.rest) {
  ------------------
  |  Branch (2809:13): [True: 0, False: 29]
  ------------------
 2810|      0|            if (!symtable_add_def(st, p->v.MatchMapping.rest, DEF_LOCAL, LOCATION(p))) {
  ------------------
  |  |  171|      0|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                          if (!symtable_add_def(st, p->v.MatchMapping.rest, DEF_LOCAL, LOCATION(p))) {
  ------------------
  |  |   86|      0|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2810:17): [True: 0, False: 0]
  ------------------
 2811|      0|                return 0;
 2812|      0|            }
 2813|      0|        }
 2814|     29|        break;
 2815|    210|    case MatchClass_kind:
  ------------------
  |  Branch (2815:5): [True: 210, False: 10.0k]
  ------------------
 2816|    210|        VISIT(st, expr, p->v.MatchClass.cls);
  ------------------
  |  | 1748|    210|    do { \
  |  | 1749|    210|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 210]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    210|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 210]
  |  |  ------------------
  ------------------
 2817|    210|        VISIT_SEQ(st, pattern, p->v.MatchClass.patterns);
  ------------------
  |  | 1755|    210|    do { \
  |  | 1756|    210|        Py_ssize_t i; \
  |  | 1757|    210|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    682|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    682|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.36k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 21, False: 661]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 472, False: 210]
  |  |  ------------------
  |  | 1759|    472|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    472|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    472|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    472|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 472]
  |  |  ------------------
  |  | 1761|    472|                return 0;                 \
  |  | 1762|    472|        } \
  |  | 1763|    210|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 210]
  |  |  ------------------
  ------------------
 2818|    210|        if (!check_kwd_patterns(st, p)) {
  ------------------
  |  Branch (2818:13): [True: 0, False: 210]
  ------------------
 2819|      0|            return 0;
 2820|      0|        }
 2821|    210|        VISIT_SEQ(st, pattern, p->v.MatchClass.kwd_patterns);
  ------------------
  |  | 1755|    210|    do { \
  |  | 1756|    210|        Py_ssize_t i; \
  |  | 1757|    210|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    327|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    327|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    654|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 183, False: 144]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 117, False: 210]
  |  |  ------------------
  |  | 1759|    117|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    117|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    117|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    117|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 117]
  |  |  ------------------
  |  | 1761|    117|                return 0;                 \
  |  | 1762|    117|        } \
  |  | 1763|    210|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 210]
  |  |  ------------------
  ------------------
 2822|    210|        break;
 2823|  6.13k|    case MatchAs_kind:
  ------------------
  |  Branch (2823:5): [True: 6.13k, False: 4.07k]
  ------------------
 2824|  6.13k|        if (p->v.MatchAs.pattern) {
  ------------------
  |  Branch (2824:13): [True: 164, False: 5.97k]
  ------------------
 2825|    164|            VISIT(st, pattern, p->v.MatchAs.pattern);
  ------------------
  |  | 1748|    164|    do { \
  |  | 1749|    164|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 164]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    164|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 164]
  |  |  ------------------
  ------------------
 2826|    164|        }
 2827|  6.13k|        if (p->v.MatchAs.name) {
  ------------------
  |  Branch (2827:13): [True: 5.63k, False: 500]
  ------------------
 2828|  5.63k|            if (!symtable_add_def(st, p->v.MatchAs.name, DEF_LOCAL, LOCATION(p))) {
  ------------------
  |  |  171|  5.63k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                          if (!symtable_add_def(st, p->v.MatchAs.name, DEF_LOCAL, LOCATION(p))) {
  ------------------
  |  |   86|  5.63k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  5.63k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  5.63k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  5.63k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  5.63k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  5.63k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2828:17): [True: 1, False: 5.63k]
  ------------------
 2829|      1|                return 0;
 2830|      1|            }
 2831|  5.63k|        }
 2832|  6.13k|        break;
 2833|  6.13k|    case MatchOr_kind:
  ------------------
  |  Branch (2833:5): [True: 769, False: 9.44k]
  ------------------
 2834|    769|        VISIT_SEQ(st, pattern, p->v.MatchOr.patterns);
  ------------------
  |  | 1755|    769|    do { \
  |  | 1756|    769|        Py_ssize_t i; \
  |  | 1757|    769|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  2.31k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  2.31k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  4.62k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 2.31k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 1.54k, False: 769]
  |  |  ------------------
  |  | 1759|  1.54k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.54k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.54k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  1.54k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 1.54k]
  |  |  ------------------
  |  | 1761|  1.54k|                return 0;                 \
  |  | 1762|  1.54k|        } \
  |  | 1763|    769|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 769]
  |  |  ------------------
  ------------------
 2835|    769|        break;
 2836|  10.2k|    }
 2837|  10.2k|    LEAVE_RECURSIVE();
  ------------------
  |  | 1807|  10.2k|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
 2838|  10.2k|    return 1;
 2839|  10.2k|}
symtable.c:check_kwd_patterns:
 1644|    210|{
 1645|    210|    assert(p->kind == MatchClass_kind);
  ------------------
  |  Branch (1645:5): [True: 210, False: 0]
  ------------------
 1646|    210|    asdl_identifier_seq *kwd_attrs = p->v.MatchClass.kwd_attrs;
 1647|    210|    asdl_pattern_seq *kwd_patterns = p->v.MatchClass.kwd_patterns;
 1648|    327|    for (Py_ssize_t i = 0; i < asdl_seq_LEN(kwd_attrs); i++) {
  ------------------
  |  |   83|    327|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  ------------------
  |  |  |  |  302|    654|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (302:37): [True: 183, False: 144]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1648:28): [True: 117, False: 210]
  ------------------
 1649|    117|        _Py_SourceLocation loc = LOCATION(asdl_seq_GET(kwd_patterns, i));
  ------------------
  |  |   86|    117|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    117|    (_Py_SourceLocation){ \
  |  |  |  |   59|    117|               .lineno = (n)->lineno, \
  |  |  |  |   60|    117|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    117|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    117|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 1650|    117|        if (!check_name(st, asdl_seq_GET(kwd_attrs, i), loc, Store)) {
  ------------------
  |  |   82|    117|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|    117|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
  |  Branch (1650:13): [True: 0, False: 117]
  ------------------
 1651|      0|            return 0;
 1652|      0|        }
 1653|    117|    }
 1654|    210|    return 1;
 1655|    210|}
symtable.c:symtable_visit_excepthandler:
 3008|  3.04k|{
 3009|  3.04k|    if (eh->v.ExceptHandler.type)
  ------------------
  |  Branch (3009:9): [True: 1.79k, False: 1.24k]
  ------------------
 3010|  1.79k|        VISIT(st, expr, eh->v.ExceptHandler.type);
  ------------------
  |  | 1748|  1.79k|    do { \
  |  | 1749|  1.79k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 1.79k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  1.79k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.79k]
  |  |  ------------------
  ------------------
 3011|  3.04k|    if (eh->v.ExceptHandler.name)
  ------------------
  |  Branch (3011:9): [True: 72, False: 2.97k]
  ------------------
 3012|     72|        if (!symtable_add_def(st, eh->v.ExceptHandler.name, DEF_LOCAL, LOCATION(eh)))
  ------------------
  |  |  171|     72|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                      if (!symtable_add_def(st, eh->v.ExceptHandler.name, DEF_LOCAL, LOCATION(eh)))
  ------------------
  |  |   86|     72|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|     72|    (_Py_SourceLocation){ \
  |  |  |  |   59|     72|               .lineno = (n)->lineno, \
  |  |  |  |   60|     72|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|     72|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|     72|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (3012:13): [True: 0, False: 72]
  ------------------
 3013|      0|            return 0;
 3014|  3.04k|    VISIT_SEQ(st, stmt, eh->v.ExceptHandler.body);
  ------------------
  |  | 1755|  3.04k|    do { \
  |  | 1756|  3.04k|        Py_ssize_t i; \
  |  | 1757|  3.04k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  6.38k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  6.38k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  12.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.38k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 3.33k, False: 3.04k]
  |  |  ------------------
  |  | 1759|  3.33k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  3.33k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  3.33k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  3.33k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 3.33k]
  |  |  ------------------
  |  | 1761|  3.33k|                return 0;                 \
  |  | 1762|  3.33k|        } \
  |  | 1763|  3.04k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 3.04k]
  |  |  ------------------
  ------------------
 3015|  3.04k|    return 1;
 3016|  3.04k|}
symtable.c:check_lazy_import_context:
 1866|      7|{
 1867|       |    // Check if inside try/except block.
 1868|      7|    if (st->st_cur->ste_in_try_block) {
  ------------------
  |  Branch (1868:9): [True: 0, False: 7]
  ------------------
 1869|      0|        PyErr_Format(PyExc_SyntaxError,
 1870|      0|                     "lazy %s not allowed inside try/except blocks",
 1871|      0|                     import_type);
 1872|      0|        SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1873|      0|        return 0;
 1874|      0|    }
 1875|       |
 1876|       |    // Check if inside function scope.
 1877|      7|    if (st->st_cur->ste_type == FunctionBlock) {
  ------------------
  |  Branch (1877:9): [True: 0, False: 7]
  ------------------
 1878|      0|        PyErr_Format(PyExc_SyntaxError,
 1879|      0|                     "lazy %s not allowed inside functions", import_type);
 1880|      0|        SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1881|      0|        return 0;
 1882|      0|    }
 1883|       |
 1884|       |    // Check if inside class scope.
 1885|      7|    if (st->st_cur->ste_type == ClassBlock) {
  ------------------
  |  Branch (1885:9): [True: 0, False: 7]
  ------------------
 1886|      0|        PyErr_Format(PyExc_SyntaxError,
 1887|      0|                     "lazy %s not allowed inside classes", import_type);
 1888|      0|        SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1889|      0|        return 0;
 1890|      0|    }
 1891|       |
 1892|      7|    return 1;
 1893|      7|}
symtable.c:symtable_visit_alias:
 3041|  12.1k|{
 3042|       |    /* Compute store_name, the name actually bound by the import
 3043|       |       operation.  It is different than a->name when a->name is a
 3044|       |       dotted package name (e.g. spam.eggs)
 3045|       |    */
 3046|  12.1k|    PyObject *store_name;
 3047|  12.1k|    PyObject *name = (a->asname == NULL) ? a->name : a->asname;
  ------------------
  |  Branch (3047:22): [True: 11.7k, False: 383]
  ------------------
 3048|  12.1k|    Py_ssize_t dot = PyUnicode_FindChar(name, '.', 0,
 3049|  12.1k|                                        PyUnicode_GET_LENGTH(name), 1);
  ------------------
  |  |  299|  12.1k|#define PyUnicode_GET_LENGTH(op) PyUnicode_GET_LENGTH(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3050|  12.1k|    if (dot != -1) {
  ------------------
  |  Branch (3050:9): [True: 3.20k, False: 8.93k]
  ------------------
 3051|  3.20k|        store_name = PyUnicode_Substring(name, 0, dot);
 3052|  3.20k|        if (!store_name)
  ------------------
  |  Branch (3052:13): [True: 0, False: 3.20k]
  ------------------
 3053|      0|            return 0;
 3054|  3.20k|    }
 3055|  8.93k|    else {
 3056|  8.93k|        store_name = Py_NewRef(name);
  ------------------
  |  |  550|  8.93k|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  8.93k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  8.93k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3057|  8.93k|    }
 3058|  12.1k|    if (!_PyUnicode_EqualToASCIIString(name, "*")) {
  ------------------
  |  Branch (3058:9): [True: 12.1k, False: 1]
  ------------------
 3059|  12.1k|        int r = symtable_add_def(st, store_name, DEF_IMPORT, LOCATION(a));
  ------------------
  |  |  176|  12.1k|#define DEF_IMPORT (2<<6)        /* assignment occurred via import */
  ------------------
                      int r = symtable_add_def(st, store_name, DEF_IMPORT, LOCATION(a));
  ------------------
  |  |   86|  12.1k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  12.1k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  12.1k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  12.1k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  12.1k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  12.1k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 3060|  12.1k|        Py_DECREF(store_name);
  ------------------
  |  |  430|  12.1k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  12.1k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  12.1k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3061|  12.1k|        return r;
 3062|  12.1k|    }
 3063|      1|    else {
 3064|      1|        if (st->st_cur->ste_type != ModuleBlock) {
  ------------------
  |  Branch (3064:13): [True: 0, False: 1]
  ------------------
 3065|      0|            PyErr_SetString(PyExc_SyntaxError, IMPORT_STAR_WARNING);
  ------------------
  |  |   42|      0|#define IMPORT_STAR_WARNING "import * only allowed at module level"
  ------------------
 3066|      0|            SET_ERROR_LOCATION(st->st_filename, LOCATION(a));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 3067|      0|            Py_DECREF(store_name);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3068|      0|            return 0;
 3069|      0|        }
 3070|      1|        Py_DECREF(store_name);
  ------------------
  |  |  430|      1|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      1|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      1|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3071|      1|        return 1;
 3072|      1|    }
 3073|  12.1k|}
symtable.c:check_import_from:
 1846|  2.20k|{
 1847|  2.20k|    assert(s->kind == ImportFrom_kind);
  ------------------
  |  Branch (1847:5): [True: 2.20k, False: 0]
  ------------------
 1848|  2.20k|    _Py_SourceLocation fut = st->st_future->ff_location;
 1849|  2.20k|    if (s->v.ImportFrom.module && s->v.ImportFrom.level == 0 &&
  ------------------
  |  Branch (1849:9): [True: 1.94k, False: 254]
  |  Branch (1849:35): [True: 1.90k, False: 40]
  ------------------
 1850|  1.90k|        _PyUnicode_EqualToASCIIString(s->v.ImportFrom.module, "__future__") &&
  ------------------
  |  Branch (1850:9): [True: 1.45k, False: 453]
  ------------------
 1851|  1.45k|        ((s->lineno > fut.lineno) ||
  ------------------
  |  Branch (1851:10): [True: 3, False: 1.45k]
  ------------------
 1852|  1.45k|         ((s->lineno == fut.end_lineno) && (s->col_offset > fut.end_col_offset))))
  ------------------
  |  Branch (1852:11): [True: 1.37k, False: 73]
  |  Branch (1852:44): [True: 0, False: 1.37k]
  ------------------
 1853|      3|    {
 1854|      3|        PyErr_SetString(PyExc_SyntaxError,
 1855|      3|                        "from __future__ imports must occur "
 1856|      3|                        "at the beginning of the file");
 1857|      3|        SET_ERROR_LOCATION(st->st_filename, LOCATION(s));
  ------------------
  |  |   89|      3|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      3|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 1858|      3|        return 0;
 1859|      3|    }
 1860|  2.19k|    return 1;
 1861|  2.20k|}
symtable.c:symtable_record_directive:
 1812|  2.76k|{
 1813|  2.76k|    PyObject *data, *mangled;
 1814|  2.76k|    int res;
 1815|  2.76k|    if (!st->st_cur->ste_directives) {
  ------------------
  |  Branch (1815:9): [True: 1.89k, False: 866]
  ------------------
 1816|  1.89k|        st->st_cur->ste_directives = PyList_New(0);
 1817|  1.89k|        if (!st->st_cur->ste_directives)
  ------------------
  |  Branch (1817:13): [True: 0, False: 1.89k]
  ------------------
 1818|      0|            return 0;
 1819|  1.89k|    }
 1820|  2.76k|    mangled = _Py_MaybeMangle(st->st_private, st->st_cur, name);
 1821|  2.76k|    if (!mangled)
  ------------------
  |  Branch (1821:9): [True: 0, False: 2.76k]
  ------------------
 1822|      0|        return 0;
 1823|  2.76k|    data = Py_BuildValue("(Niiii)", mangled, loc.lineno, loc.col_offset,
 1824|  2.76k|                                    loc.end_lineno, loc.end_col_offset);
 1825|  2.76k|    if (!data)
  ------------------
  |  Branch (1825:9): [True: 0, False: 2.76k]
  ------------------
 1826|      0|        return 0;
 1827|  2.76k|    res = PyList_Append(st->st_cur->ste_directives, data);
 1828|  2.76k|    Py_DECREF(data);
  ------------------
  |  |  430|  2.76k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  2.76k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.76k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1829|  2.76k|    return res == 0;
 1830|  2.76k|}
symtable.c:symtable_visit_withitem:
 3020|  11.7k|{
 3021|  11.7k|    VISIT(st, expr, item->context_expr);
  ------------------
  |  | 1748|  11.7k|    do { \
  |  | 1749|  11.7k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 11.7k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  11.7k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 11.7k]
  |  |  ------------------
  ------------------
 3022|  11.7k|    if (item->optional_vars) {
  ------------------
  |  Branch (3022:9): [True: 992, False: 10.7k]
  ------------------
 3023|    992|        VISIT(st, expr, item->optional_vars);
  ------------------
  |  | 1748|    992|    do { \
  |  | 1749|    992|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 992]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    992|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 992]
  |  |  ------------------
  ------------------
 3024|    992|    }
 3025|  11.7k|    return 1;
 3026|  11.7k|}
symtable.c:maybe_set_ste_coroutine_for_module:
 1905|  2.18k|{
 1906|  2.18k|    if (allows_top_level_await(st)) {
  ------------------
  |  Branch (1906:9): [True: 142, False: 2.04k]
  ------------------
 1907|    142|        st->st_cur->ste_coroutine = 1;
 1908|    142|    }
 1909|  2.18k|}
symtable.c:allows_top_level_await:
 1897|  2.61k|{
 1898|  2.61k|    return (st->st_future->ff_features & PyCF_ALLOW_TOP_LEVEL_AWAIT) &&
  ------------------
  |  |   20|  2.61k|#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000
  ------------------
  |  Branch (1898:12): [True: 1.87k, False: 740]
  ------------------
 1899|  1.87k|            st->st_cur->ste_type == ModuleBlock;
  ------------------
  |  Branch (1899:13): [True: 426, False: 1.44k]
  ------------------
 1900|  2.61k|}
symtable.c:symtable_raise_if_not_coroutine:
 3253|  2.18k|symtable_raise_if_not_coroutine(struct symtable *st, const char *msg, _Py_SourceLocation loc) {
 3254|  2.18k|    if (!st->st_cur->ste_coroutine) {
  ------------------
  |  Branch (3254:9): [True: 6, False: 2.18k]
  ------------------
 3255|      6|        PyErr_SetString(PyExc_SyntaxError, msg);
 3256|      6|        SET_ERROR_LOCATION(st->st_filename, loc);
  ------------------
  |  |   89|      6|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      6|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 3257|      6|        return 0;
 3258|      6|    }
 3259|  2.18k|    return 1;
 3260|  2.18k|}
symtable.c:symtable_visit_expr:
 2503|  2.50M|{
 2504|  2.50M|    ENTER_RECURSIVE();
  ------------------
  |  | 1802|  2.50M|#define ENTER_RECURSIVE() \
  |  | 1803|  2.50M|if (Py_EnterRecursiveCall(" during compilation")) { \
  |  |  ------------------
  |  |  |  Branch (1803:5): [True: 0, False: 2.50M]
  |  |  ------------------
  |  | 1804|      0|    return 0; \
  |  | 1805|      0|}
  ------------------
 2505|  2.50M|    switch (e->kind) {
  ------------------
  |  Branch (2505:13): [True: 2.50M, False: 0]
  ------------------
 2506|  1.88k|    case NamedExpr_kind:
  ------------------
  |  Branch (2506:5): [True: 1.88k, False: 2.50M]
  ------------------
 2507|  1.88k|        if (!symtable_raise_if_annotation_block(st, "named expression", e)) {
  ------------------
  |  Branch (2507:13): [True: 6, False: 1.88k]
  ------------------
 2508|      6|            return 0;
 2509|      6|        }
 2510|  1.88k|        if(!symtable_handle_namedexpr(st, e))
  ------------------
  |  Branch (2510:12): [True: 14, False: 1.86k]
  ------------------
 2511|     14|            return 0;
 2512|  1.86k|        break;
 2513|  3.29k|    case BoolOp_kind:
  ------------------
  |  Branch (2513:5): [True: 3.29k, False: 2.49M]
  ------------------
 2514|  3.29k|        VISIT_SEQ(st, expr, e->v.BoolOp.values);
  ------------------
  |  | 1755|  3.29k|    do { \
  |  | 1756|  3.29k|        Py_ssize_t i; \
  |  | 1757|  3.29k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  13.0k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  13.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  26.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 13.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 9.77k, False: 3.28k]
  |  |  ------------------
  |  | 1759|  9.77k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  9.77k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  9.77k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  9.77k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 12, False: 9.75k]
  |  |  ------------------
  |  | 1761|  9.77k|                return 0;                 \
  |  | 1762|  9.77k|        } \
  |  | 1763|  3.29k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 3.28k]
  |  |  ------------------
  ------------------
 2515|  3.28k|        break;
 2516|   758k|    case BinOp_kind:
  ------------------
  |  Branch (2516:5): [True: 758k, False: 1.74M]
  ------------------
 2517|   758k|        VISIT(st, expr, e->v.BinOp.left);
  ------------------
  |  | 1748|   758k|    do { \
  |  | 1749|   758k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 538, False: 757k]
  |  |  ------------------
  |  | 1750|    538|            return 0; \
  |  | 1751|    538|        } \
  |  | 1752|   758k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 757k]
  |  |  ------------------
  ------------------
 2518|   757k|        VISIT(st, expr, e->v.BinOp.right);
  ------------------
  |  | 1748|   757k|    do { \
  |  | 1749|   757k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 118, False: 757k]
  |  |  ------------------
  |  | 1750|    118|            return 0; \
  |  | 1751|    118|        } \
  |  | 1752|   757k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 757k]
  |  |  ------------------
  ------------------
 2519|   757k|        break;
 2520|   757k|    case UnaryOp_kind:
  ------------------
  |  Branch (2520:5): [True: 221k, False: 2.28M]
  ------------------
 2521|   221k|        VISIT(st, expr, e->v.UnaryOp.operand);
  ------------------
  |  | 1748|   221k|    do { \
  |  | 1749|   221k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 304, False: 221k]
  |  |  ------------------
  |  | 1750|    304|            return 0; \
  |  | 1751|    304|        } \
  |  | 1752|   221k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 221k]
  |  |  ------------------
  ------------------
 2522|   221k|        break;
 2523|   221k|    case Lambda_kind: {
  ------------------
  |  Branch (2523:5): [True: 4.32k, False: 2.49M]
  ------------------
 2524|  4.32k|        if (e->v.Lambda.args->defaults)
  ------------------
  |  Branch (2524:13): [True: 4.32k, False: 0]
  ------------------
 2525|  4.32k|            VISIT_SEQ(st, expr, e->v.Lambda.args->defaults);
  ------------------
  |  | 1755|  4.32k|    do { \
  |  | 1756|  4.32k|        Py_ssize_t i; \
  |  | 1757|  4.32k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  4.60k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  4.60k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  9.21k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.60k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 286, False: 4.32k]
  |  |  ------------------
  |  | 1759|    286|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    286|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    286|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    286|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 0, False: 286]
  |  |  ------------------
  |  | 1761|    286|                return 0;                 \
  |  | 1762|    286|        } \
  |  | 1763|  4.32k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 4.32k]
  |  |  ------------------
  ------------------
 2526|  4.32k|        if (e->v.Lambda.args->kw_defaults)
  ------------------
  |  Branch (2526:13): [True: 4.32k, False: 0]
  ------------------
 2527|  4.32k|            VISIT_SEQ_WITH_NULL(st, expr, e->v.Lambda.args->kw_defaults);
  ------------------
  |  | 1777|  4.32k|    do { \
  |  | 1778|  4.32k|        int i = 0; \
  |  | 1779|  4.32k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1780|  6.89k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  6.89k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 6.89k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1780:21): [True: 2.57k, False: 4.32k]
  |  |  ------------------
  |  | 1781|  2.57k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.57k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.57k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1782|  2.57k|            if (!elt) continue; /* can be NULL */ \
  |  |  ------------------
  |  |  |  Branch (1782:17): [True: 890, False: 1.68k]
  |  |  ------------------
  |  | 1783|  2.57k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1783:17): [True: 0, False: 1.68k]
  |  |  ------------------
  |  | 1784|  1.68k|                return 0;             \
  |  | 1785|  1.68k|        } \
  |  | 1786|  4.32k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1786:13): [Folded, False: 4.32k]
  |  |  ------------------
  ------------------
 2528|  4.32k|        if (!symtable_enter_block(st, &_Py_STR(anon_lambda),
  ------------------
  |  |  938|  4.32k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  4.32k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  4.32k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2528:13): [True: 0, False: 4.32k]
  ------------------
 2529|  4.32k|                                  FunctionBlock, (void *)e, LOCATION(e))) {
  ------------------
  |  |   86|  4.32k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  4.32k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  4.32k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  4.32k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  4.32k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  4.32k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2530|      0|            return 0;
 2531|      0|        }
 2532|  4.32k|        VISIT(st, arguments, e->v.Lambda.args);
  ------------------
  |  | 1748|  4.32k|    do { \
  |  | 1749|  4.32k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 22, False: 4.29k]
  |  |  ------------------
  |  | 1750|     22|            return 0; \
  |  | 1751|     22|        } \
  |  | 1752|  4.32k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 4.29k]
  |  |  ------------------
  ------------------
 2533|  4.29k|        VISIT(st, expr, e->v.Lambda.body);
  ------------------
  |  | 1748|  4.29k|    do { \
  |  | 1749|  4.29k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 92, False: 4.20k]
  |  |  ------------------
  |  | 1750|     92|            return 0; \
  |  | 1751|     92|        } \
  |  | 1752|  4.29k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 4.20k]
  |  |  ------------------
  ------------------
 2534|  4.20k|        if (!symtable_exit_block(st))
  ------------------
  |  Branch (2534:13): [True: 0, False: 4.20k]
  ------------------
 2535|      0|            return 0;
 2536|  4.20k|        break;
 2537|  4.20k|    }
 2538|  4.20k|    case IfExp_kind:
  ------------------
  |  Branch (2538:5): [True: 1.87k, False: 2.50M]
  ------------------
 2539|  1.87k|        VISIT(st, expr, e->v.IfExp.test);
  ------------------
  |  | 1748|  1.87k|    do { \
  |  | 1749|  1.87k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 5, False: 1.87k]
  |  |  ------------------
  |  | 1750|      5|            return 0; \
  |  | 1751|      5|        } \
  |  | 1752|  1.87k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.87k]
  |  |  ------------------
  ------------------
 2540|  1.87k|        VISIT(st, expr, e->v.IfExp.body);
  ------------------
  |  | 1748|  1.87k|    do { \
  |  | 1749|  1.87k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 1.87k]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|  1.87k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.87k]
  |  |  ------------------
  ------------------
 2541|  1.87k|        VISIT(st, expr, e->v.IfExp.orelse);
  ------------------
  |  | 1748|  1.87k|    do { \
  |  | 1749|  1.87k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 24, False: 1.84k]
  |  |  ------------------
  |  | 1750|     24|            return 0; \
  |  | 1751|     24|        } \
  |  | 1752|  1.87k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.84k]
  |  |  ------------------
  ------------------
 2542|  1.84k|        break;
 2543|  1.84k|    case Dict_kind:
  ------------------
  |  Branch (2543:5): [True: 555, False: 2.50M]
  ------------------
 2544|    555|        VISIT_SEQ_WITH_NULL(st, expr, e->v.Dict.keys);
  ------------------
  |  | 1777|    555|    do { \
  |  | 1778|    555|        int i = 0; \
  |  | 1779|    555|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1780|  1.21k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.21k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.43k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1780:21): [True: 661, False: 554]
  |  |  ------------------
  |  | 1781|    661|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    661|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    661|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1782|    661|            if (!elt) continue; /* can be NULL */ \
  |  |  ------------------
  |  |  |  Branch (1782:17): [True: 157, False: 504]
  |  |  ------------------
  |  | 1783|    661|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1783:17): [True: 1, False: 503]
  |  |  ------------------
  |  | 1784|    504|                return 0;             \
  |  | 1785|    504|        } \
  |  | 1786|    555|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1786:13): [Folded, False: 554]
  |  |  ------------------
  ------------------
 2545|    554|        VISIT_SEQ(st, expr, e->v.Dict.values);
  ------------------
  |  | 1755|    554|    do { \
  |  | 1756|    554|        Py_ssize_t i; \
  |  | 1757|    554|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  1.20k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  1.20k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.41k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 1.20k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 660, False: 549]
  |  |  ------------------
  |  | 1759|    660|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    660|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    660|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    660|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 5, False: 655]
  |  |  ------------------
  |  | 1761|    660|                return 0;                 \
  |  | 1762|    660|        } \
  |  | 1763|    554|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 549]
  |  |  ------------------
  ------------------
 2546|    549|        break;
 2547|  7.00k|    case Set_kind:
  ------------------
  |  Branch (2547:5): [True: 7.00k, False: 2.49M]
  ------------------
 2548|  7.00k|        VISIT_SEQ(st, expr, e->v.Set.elts);
  ------------------
  |  | 1755|  7.00k|    do { \
  |  | 1756|  7.00k|        Py_ssize_t i; \
  |  | 1757|  7.00k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  38.8k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  38.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  77.7k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 38.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 31.8k, False: 6.99k]
  |  |  ------------------
  |  | 1759|  31.8k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  31.8k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  31.8k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  31.8k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 11, False: 31.8k]
  |  |  ------------------
  |  | 1761|  31.8k|                return 0;                 \
  |  | 1762|  31.8k|        } \
  |  | 1763|  7.00k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 6.99k]
  |  |  ------------------
  ------------------
 2549|  6.99k|        break;
 2550|  6.99k|    case GeneratorExp_kind:
  ------------------
  |  Branch (2550:5): [True: 390, False: 2.50M]
  ------------------
 2551|    390|        if (!symtable_visit_genexp(st, e))
  ------------------
  |  Branch (2551:13): [True: 7, False: 383]
  ------------------
 2552|      7|            return 0;
 2553|    383|        break;
 2554|    383|    case ListComp_kind:
  ------------------
  |  Branch (2554:5): [True: 97, False: 2.50M]
  ------------------
 2555|     97|        if (!symtable_visit_listcomp(st, e))
  ------------------
  |  Branch (2555:13): [True: 6, False: 91]
  ------------------
 2556|      6|            return 0;
 2557|     91|        break;
 2558|  2.54k|    case SetComp_kind:
  ------------------
  |  Branch (2558:5): [True: 2.54k, False: 2.49M]
  ------------------
 2559|  2.54k|        if (!symtable_visit_setcomp(st, e))
  ------------------
  |  Branch (2559:13): [True: 14, False: 2.53k]
  ------------------
 2560|     14|            return 0;
 2561|  2.53k|        break;
 2562|  2.53k|    case DictComp_kind:
  ------------------
  |  Branch (2562:5): [True: 703, False: 2.50M]
  ------------------
 2563|    703|        if (!symtable_visit_dictcomp(st, e))
  ------------------
  |  Branch (2563:13): [True: 5, False: 698]
  ------------------
 2564|      5|            return 0;
 2565|    698|        break;
 2566|    884|    case Yield_kind:
  ------------------
  |  Branch (2566:5): [True: 884, False: 2.50M]
  ------------------
 2567|    884|        if (!symtable_raise_if_annotation_block(st, "yield expression", e)) {
  ------------------
  |  Branch (2567:13): [True: 12, False: 872]
  ------------------
 2568|     12|            return 0;
 2569|     12|        }
 2570|    872|        if (e->v.Yield.value)
  ------------------
  |  Branch (2570:13): [True: 397, False: 475]
  ------------------
 2571|    397|            VISIT(st, expr, e->v.Yield.value);
  ------------------
  |  | 1748|    397|    do { \
  |  | 1749|    397|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 2, False: 395]
  |  |  ------------------
  |  | 1750|      2|            return 0; \
  |  | 1751|      2|        } \
  |  | 1752|    397|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 395]
  |  |  ------------------
  ------------------
 2572|    870|        st->st_cur->ste_generator = 1;
 2573|    870|        if (st->st_cur->ste_comprehension) {
  ------------------
  |  Branch (2573:13): [True: 6, False: 864]
  ------------------
 2574|      6|            return symtable_raise_if_comprehension_block(st, e);
 2575|      6|        }
 2576|    864|        break;
 2577|    864|    case YieldFrom_kind:
  ------------------
  |  Branch (2577:5): [True: 206, False: 2.50M]
  ------------------
 2578|    206|        if (!symtable_raise_if_annotation_block(st, "yield expression", e)) {
  ------------------
  |  Branch (2578:13): [True: 0, False: 206]
  ------------------
 2579|      0|            return 0;
 2580|      0|        }
 2581|    206|        VISIT(st, expr, e->v.YieldFrom.value);
  ------------------
  |  | 1748|    206|    do { \
  |  | 1749|    206|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 3, False: 203]
  |  |  ------------------
  |  | 1750|      3|            return 0; \
  |  | 1751|      3|        } \
  |  | 1752|    206|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 203]
  |  |  ------------------
  ------------------
 2582|    203|        st->st_cur->ste_generator = 1;
 2583|    203|        if (st->st_cur->ste_comprehension) {
  ------------------
  |  Branch (2583:13): [True: 0, False: 203]
  ------------------
 2584|      0|            return symtable_raise_if_comprehension_block(st, e);
 2585|      0|        }
 2586|    203|        break;
 2587|    429|    case Await_kind:
  ------------------
  |  Branch (2587:5): [True: 429, False: 2.50M]
  ------------------
 2588|    429|        if (!symtable_raise_if_annotation_block(st, "await expression", e)) {
  ------------------
  |  Branch (2588:13): [True: 12, False: 417]
  ------------------
 2589|     12|            return 0;
 2590|     12|        }
 2591|    417|        if (!allows_top_level_await(st)) {
  ------------------
  |  Branch (2591:13): [True: 137, False: 280]
  ------------------
 2592|    137|            if (!ste_uses_fast_locals(st->st_cur)) {
  ------------------
  |  Branch (2592:17): [True: 96, False: 41]
  ------------------
 2593|     96|                PyErr_SetString(PyExc_SyntaxError,
 2594|     96|                                "'await' outside function");
 2595|     96|                SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|     96|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|     96|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2596|     96|                return 0;
 2597|     96|            }
 2598|     41|            if (!IS_ASYNC_DEF(st) && st->st_cur->ste_comprehension == NoComprehension) {
  ------------------
  |  |   92|     82|#define IS_ASYNC_DEF(st) ((st)->st_cur->ste_type == FunctionBlock && (st)->st_cur->ste_coroutine)
  |  |  ------------------
  |  |  |  Branch (92:27): [True: 23, False: 18]
  |  |  |  Branch (92:70): [True: 15, False: 8]
  |  |  ------------------
  ------------------
  |  Branch (2598:38): [True: 8, False: 18]
  ------------------
 2599|      8|                PyErr_SetString(PyExc_SyntaxError,
 2600|      8|                                "'await' outside async function");
 2601|      8|                SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|      8|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      8|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2602|      8|                return 0;
 2603|      8|            }
 2604|     41|        }
 2605|    313|        VISIT(st, expr, e->v.Await.value);
  ------------------
  |  | 1748|    313|    do { \
  |  | 1749|    313|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 313]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    313|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 313]
  |  |  ------------------
  ------------------
 2606|    313|        st->st_cur->ste_coroutine = 1;
 2607|    313|        break;
 2608|  19.9k|    case Compare_kind:
  ------------------
  |  Branch (2608:5): [True: 19.9k, False: 2.48M]
  ------------------
 2609|  19.9k|        VISIT(st, expr, e->v.Compare.left);
  ------------------
  |  | 1748|  19.9k|    do { \
  |  | 1749|  19.9k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 13, False: 19.9k]
  |  |  ------------------
  |  | 1750|     13|            return 0; \
  |  | 1751|     13|        } \
  |  | 1752|  19.9k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 19.9k]
  |  |  ------------------
  ------------------
 2610|  19.9k|        VISIT_SEQ(st, expr, e->v.Compare.comparators);
  ------------------
  |  | 1755|  19.9k|    do { \
  |  | 1756|  19.9k|        Py_ssize_t i; \
  |  | 1757|  19.9k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  89.8k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  89.8k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   179k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 89.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 70.0k, False: 19.8k]
  |  |  ------------------
  |  | 1759|  70.0k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  70.0k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  70.0k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  70.0k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 63, False: 69.9k]
  |  |  ------------------
  |  | 1761|  70.0k|                return 0;                 \
  |  | 1762|  70.0k|        } \
  |  | 1763|  19.9k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 19.8k]
  |  |  ------------------
  ------------------
 2611|  19.8k|        break;
 2612|  19.8k|    case Call_kind:
  ------------------
  |  Branch (2612:5): [True: 10.9k, False: 2.49M]
  ------------------
 2613|  10.9k|        VISIT(st, expr, e->v.Call.func);
  ------------------
  |  | 1748|  10.9k|    do { \
  |  | 1749|  10.9k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 270, False: 10.6k]
  |  |  ------------------
  |  | 1750|    270|            return 0; \
  |  | 1751|    270|        } \
  |  | 1752|  10.9k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 10.6k]
  |  |  ------------------
  ------------------
 2614|  10.6k|        VISIT_SEQ(st, expr, e->v.Call.args);
  ------------------
  |  | 1755|  10.6k|    do { \
  |  | 1756|  10.6k|        Py_ssize_t i; \
  |  | 1757|  10.6k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  24.2k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  24.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  48.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 2.41k, False: 21.8k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 13.6k, False: 10.6k]
  |  |  ------------------
  |  | 1759|  13.6k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  13.6k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  13.6k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  13.6k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 22, False: 13.6k]
  |  |  ------------------
  |  | 1761|  13.6k|                return 0;                 \
  |  | 1762|  13.6k|        } \
  |  | 1763|  10.6k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 10.6k]
  |  |  ------------------
  ------------------
 2615|  10.6k|        if (!check_keywords(st, e->v.Call.keywords)) {
  ------------------
  |  Branch (2615:13): [True: 1, False: 10.6k]
  ------------------
 2616|      1|            return 0;
 2617|      1|        }
 2618|  10.6k|        VISIT_SEQ_WITH_NULL(st, keyword, e->v.Call.keywords);
  ------------------
  |  | 1777|  10.6k|    do { \
  |  | 1778|  10.6k|        int i = 0; \
  |  | 1779|  10.6k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1780|  12.2k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  12.2k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  24.5k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 9.51k, False: 2.76k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1780:21): [True: 1.68k, False: 10.6k]
  |  |  ------------------
  |  | 1781|  1.68k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  1.68k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  1.68k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1782|  1.68k|            if (!elt) continue; /* can be NULL */ \
  |  |  ------------------
  |  |  |  Branch (1782:17): [True: 0, False: 1.68k]
  |  |  ------------------
  |  | 1783|  1.68k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1783:17): [True: 5, False: 1.67k]
  |  |  ------------------
  |  | 1784|  1.68k|                return 0;             \
  |  | 1785|  1.68k|        } \
  |  | 1786|  10.6k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1786:13): [Folded, False: 10.6k]
  |  |  ------------------
  ------------------
 2619|  10.6k|        break;
 2620|  10.6k|    case FormattedValue_kind:
  ------------------
  |  Branch (2620:5): [True: 8.53k, False: 2.49M]
  ------------------
 2621|  8.53k|        VISIT(st, expr, e->v.FormattedValue.value);
  ------------------
  |  | 1748|  8.53k|    do { \
  |  | 1749|  8.53k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 8, False: 8.53k]
  |  |  ------------------
  |  | 1750|      8|            return 0; \
  |  | 1751|      8|        } \
  |  | 1752|  8.53k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 8.53k]
  |  |  ------------------
  ------------------
 2622|  8.53k|        if (e->v.FormattedValue.format_spec)
  ------------------
  |  Branch (2622:13): [True: 4.68k, False: 3.84k]
  ------------------
 2623|  4.68k|            VISIT(st, expr, e->v.FormattedValue.format_spec);
  ------------------
  |  | 1748|  4.68k|    do { \
  |  | 1749|  4.68k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 4.68k]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|  4.68k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 4.68k]
  |  |  ------------------
  ------------------
 2624|  8.53k|        break;
 2625|  8.53k|    case Interpolation_kind:
  ------------------
  |  Branch (2625:5): [True: 2.98k, False: 2.49M]
  ------------------
 2626|  2.98k|        VISIT(st, expr, e->v.Interpolation.value);
  ------------------
  |  | 1748|  2.98k|    do { \
  |  | 1749|  2.98k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 2.98k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  2.98k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 2.98k]
  |  |  ------------------
  ------------------
 2627|  2.98k|        if (e->v.Interpolation.format_spec)
  ------------------
  |  Branch (2627:13): [True: 965, False: 2.01k]
  ------------------
 2628|    965|            VISIT(st, expr, e->v.Interpolation.format_spec);
  ------------------
  |  | 1748|    965|    do { \
  |  | 1749|    965|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 964]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    965|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 964]
  |  |  ------------------
  ------------------
 2629|  2.97k|        break;
 2630|  10.9k|    case JoinedStr_kind:
  ------------------
  |  Branch (2630:5): [True: 10.9k, False: 2.49M]
  ------------------
 2631|  10.9k|        VISIT_SEQ(st, expr, e->v.JoinedStr.values);
  ------------------
  |  | 1755|  10.9k|    do { \
  |  | 1756|  10.9k|        Py_ssize_t i; \
  |  | 1757|  10.9k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  34.0k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  34.0k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  68.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 34.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 23.1k, False: 10.9k]
  |  |  ------------------
  |  | 1759|  23.1k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  23.1k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  23.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  23.1k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 8, False: 23.1k]
  |  |  ------------------
  |  | 1761|  23.1k|                return 0;                 \
  |  | 1762|  23.1k|        } \
  |  | 1763|  10.9k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 10.9k]
  |  |  ------------------
  ------------------
 2632|  10.9k|        break;
 2633|  10.9k|    case TemplateStr_kind:
  ------------------
  |  Branch (2633:5): [True: 1.25k, False: 2.50M]
  ------------------
 2634|  1.25k|        VISIT_SEQ(st, expr, e->v.TemplateStr.values);
  ------------------
  |  | 1755|  1.25k|    do { \
  |  | 1756|  1.25k|        Py_ssize_t i; \
  |  | 1757|  1.25k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  7.09k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  7.09k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  14.1k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 7.09k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 5.83k, False: 1.25k]
  |  |  ------------------
  |  | 1759|  5.83k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  5.83k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  5.83k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  5.83k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 5.83k]
  |  |  ------------------
  |  | 1761|  5.83k|                return 0;                 \
  |  | 1762|  5.83k|        } \
  |  | 1763|  1.25k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 1.25k]
  |  |  ------------------
  ------------------
 2635|  1.25k|        break;
 2636|   913k|    case Constant_kind:
  ------------------
  |  Branch (2636:5): [True: 913k, False: 1.58M]
  ------------------
 2637|       |        /* Nothing to do here. */
 2638|   913k|        break;
 2639|       |    /* The following exprs can be assignment targets. */
 2640|  19.4k|    case Attribute_kind:
  ------------------
  |  Branch (2640:5): [True: 19.4k, False: 2.48M]
  ------------------
 2641|  19.4k|        if (!check_name(st, e->v.Attribute.attr, LOCATION(e), e->v.Attribute.ctx)) {
  ------------------
  |  |   86|  19.4k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  19.4k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  19.4k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  19.4k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  19.4k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  19.4k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2641:13): [True: 1, False: 19.4k]
  ------------------
 2642|      1|            return 0;
 2643|      1|        }
 2644|  19.4k|        VISIT(st, expr, e->v.Attribute.value);
  ------------------
  |  | 1748|  19.4k|    do { \
  |  | 1749|  19.4k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 275, False: 19.2k]
  |  |  ------------------
  |  | 1750|    275|            return 0; \
  |  | 1751|    275|        } \
  |  | 1752|  19.4k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 19.2k]
  |  |  ------------------
  ------------------
 2645|  19.2k|        break;
 2646|  19.2k|    case Subscript_kind:
  ------------------
  |  Branch (2646:5): [True: 10.8k, False: 2.49M]
  ------------------
 2647|  10.8k|        VISIT(st, expr, e->v.Subscript.value);
  ------------------
  |  | 1748|  10.8k|    do { \
  |  | 1749|  10.8k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 77, False: 10.7k]
  |  |  ------------------
  |  | 1750|     77|            return 0; \
  |  | 1751|     77|        } \
  |  | 1752|  10.8k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 10.7k]
  |  |  ------------------
  ------------------
 2648|  10.7k|        VISIT(st, expr, e->v.Subscript.slice);
  ------------------
  |  | 1748|  10.7k|    do { \
  |  | 1749|  10.7k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 55, False: 10.7k]
  |  |  ------------------
  |  | 1750|     55|            return 0; \
  |  | 1751|     55|        } \
  |  | 1752|  10.7k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 10.7k]
  |  |  ------------------
  ------------------
 2649|  10.7k|        break;
 2650|  10.7k|    case Starred_kind:
  ------------------
  |  Branch (2650:5): [True: 10.1k, False: 2.49M]
  ------------------
 2651|  10.1k|        VISIT(st, expr, e->v.Starred.value);
  ------------------
  |  | 1748|  10.1k|    do { \
  |  | 1749|  10.1k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 9, False: 10.1k]
  |  |  ------------------
  |  | 1750|      9|            return 0; \
  |  | 1751|      9|        } \
  |  | 1752|  10.1k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 10.1k]
  |  |  ------------------
  ------------------
 2652|  10.1k|        break;
 2653|  12.9k|    case Slice_kind:
  ------------------
  |  Branch (2653:5): [True: 12.9k, False: 2.48M]
  ------------------
 2654|  12.9k|        if (e->v.Slice.lower)
  ------------------
  |  Branch (2654:13): [True: 8.49k, False: 4.50k]
  ------------------
 2655|  8.49k|            VISIT(st, expr, e->v.Slice.lower);
  ------------------
  |  | 1748|  8.49k|    do { \
  |  | 1749|  8.49k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 9, False: 8.48k]
  |  |  ------------------
  |  | 1750|      9|            return 0; \
  |  | 1751|      9|        } \
  |  | 1752|  8.49k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 8.48k]
  |  |  ------------------
  ------------------
 2656|  12.9k|        if (e->v.Slice.upper)
  ------------------
  |  Branch (2656:13): [True: 5.31k, False: 7.67k]
  ------------------
 2657|  5.31k|            VISIT(st, expr, e->v.Slice.upper);
  ------------------
  |  | 1748|  5.31k|    do { \
  |  | 1749|  5.31k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 16, False: 5.29k]
  |  |  ------------------
  |  | 1750|     16|            return 0; \
  |  | 1751|     16|        } \
  |  | 1752|  5.31k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 5.29k]
  |  |  ------------------
  ------------------
 2658|  12.9k|        if (e->v.Slice.step)
  ------------------
  |  Branch (2658:13): [True: 3.84k, False: 9.12k]
  ------------------
 2659|  3.84k|            VISIT(st, expr, e->v.Slice.step);
  ------------------
  |  | 1748|  3.84k|    do { \
  |  | 1749|  3.84k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 5, False: 3.84k]
  |  |  ------------------
  |  | 1750|      5|            return 0; \
  |  | 1751|      5|        } \
  |  | 1752|  3.84k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 3.84k]
  |  |  ------------------
  ------------------
 2660|  12.9k|        break;
 2661|   398k|    case Name_kind:
  ------------------
  |  Branch (2661:5): [True: 398k, False: 2.10M]
  ------------------
 2662|   398k|        if (!st->st_cur->ste_in_unevaluated_annotation) {
  ------------------
  |  Branch (2662:13): [True: 393k, False: 5.33k]
  ------------------
 2663|   393k|            if (!symtable_add_def_ctx(st, e->v.Name.id,
  ------------------
  |  Branch (2663:17): [True: 3, False: 393k]
  ------------------
 2664|   393k|                                    e->v.Name.ctx == Load ? USE : DEF_LOCAL,
  ------------------
  |  |  174|   273k|#define USE (2<<3)               /* name is used */
  ------------------
                                                  e->v.Name.ctx == Load ? USE : DEF_LOCAL,
  ------------------
  |  |  171|   119k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
  |  Branch (2664:37): [True: 273k, False: 119k]
  ------------------
 2665|   393k|                                    LOCATION(e), e->v.Name.ctx)) {
  ------------------
  |  |   86|   393k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|   393k|    (_Py_SourceLocation){ \
  |  |  |  |   59|   393k|               .lineno = (n)->lineno, \
  |  |  |  |   60|   393k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|   393k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|   393k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2666|      3|                return 0;
 2667|      3|            }
 2668|       |            /* Special-case super: it counts as a use of __class__ */
 2669|   393k|            if (e->v.Name.ctx == Load &&
  ------------------
  |  Branch (2669:17): [True: 273k, False: 119k]
  ------------------
 2670|   273k|                ste_uses_fast_locals(st->st_cur) &&
  ------------------
  |  Branch (2670:17): [True: 127k, False: 146k]
  ------------------
 2671|   127k|                _PyUnicode_EqualToASCIIString(e->v.Name.id, "super")) {
  ------------------
  |  Branch (2671:17): [True: 656, False: 126k]
  ------------------
 2672|    656|                if (!symtable_add_def(st, &_Py_ID(__class__), USE, LOCATION(e)))
  ------------------
  |  |  936|    656|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    656|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    656|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                              if (!symtable_add_def(st, &_Py_ID(__class__), USE, LOCATION(e)))
  ------------------
  |  |  174|    656|#define USE (2<<3)               /* name is used */
  ------------------
                              if (!symtable_add_def(st, &_Py_ID(__class__), USE, LOCATION(e)))
  ------------------
  |  |   86|    656|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    656|    (_Py_SourceLocation){ \
  |  |  |  |   59|    656|               .lineno = (n)->lineno, \
  |  |  |  |   60|    656|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    656|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    656|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2672:21): [True: 0, False: 656]
  ------------------
 2673|      0|                    return 0;
 2674|    656|            }
 2675|   393k|        }
 2676|   398k|        break;
 2677|       |    /* child nodes of List and Tuple will have expr_context set */
 2678|   398k|    case List_kind:
  ------------------
  |  Branch (2678:5): [True: 2.23k, False: 2.49M]
  ------------------
 2679|  2.23k|        VISIT_SEQ(st, expr, e->v.List.elts);
  ------------------
  |  | 1755|  2.23k|    do { \
  |  | 1756|  2.23k|        Py_ssize_t i; \
  |  | 1757|  2.23k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  4.37k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  4.37k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  8.74k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 240, False: 4.13k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 2.15k, False: 2.21k]
  |  |  ------------------
  |  | 1759|  2.15k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|  2.15k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  2.15k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|  2.15k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 23, False: 2.13k]
  |  |  ------------------
  |  | 1761|  2.15k|                return 0;                 \
  |  | 1762|  2.15k|        } \
  |  | 1763|  2.23k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 2.21k]
  |  |  ------------------
  ------------------
 2680|  2.21k|        break;
 2681|  75.6k|    case Tuple_kind:
  ------------------
  |  Branch (2681:5): [True: 75.6k, False: 2.42M]
  ------------------
 2682|  75.6k|        VISIT_SEQ(st, expr, e->v.Tuple.elts);
  ------------------
  |  | 1755|  75.6k|    do { \
  |  | 1756|  75.6k|        Py_ssize_t i; \
  |  | 1757|  75.6k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|   307k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|   307k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   614k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 6.11k, False: 300k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 231k, False: 75.6k]
  |  |  ------------------
  |  | 1759|   231k|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|   231k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|   231k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|   231k|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 44, False: 231k]
  |  |  ------------------
  |  | 1761|   231k|                return 0;                 \
  |  | 1762|   231k|        } \
  |  | 1763|  75.6k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 75.6k]
  |  |  ------------------
  ------------------
 2683|  75.6k|        break;
 2684|  2.50M|    }
 2685|  2.49M|    LEAVE_RECURSIVE();
  ------------------
  |  | 1807|  2.49M|#define LEAVE_RECURSIVE() Py_LeaveRecursiveCall();
  ------------------
 2686|  2.49M|    return 1;
 2687|  2.50M|}
symtable.c:symtable_raise_if_annotation_block:
 3214|  3.40k|{
 3215|  3.40k|    _Py_block_ty type = st->st_cur->ste_type;
 3216|  3.40k|    if (type == AnnotationBlock)
  ------------------
  |  Branch (3216:9): [True: 28, False: 3.37k]
  ------------------
 3217|     28|        PyErr_Format(PyExc_SyntaxError, ANNOTATION_NOT_ALLOWED, name);
  ------------------
  |  |   65|     28|#define ANNOTATION_NOT_ALLOWED \
  |  |   66|     28|"%s cannot be used within an annotation"
  ------------------
 3218|  3.37k|    else if (type == TypeVariableBlock) {
  ------------------
  |  Branch (3218:14): [True: 0, False: 3.37k]
  ------------------
 3219|      0|        const char *info = st->st_cur->ste_scope_info;
 3220|      0|        assert(info != NULL); // e.g., info == "a ParamSpec default"
  ------------------
  |  Branch (3220:9): [True: 0, False: 0]
  ------------------
 3221|      0|        PyErr_Format(PyExc_SyntaxError, EXPR_NOT_ALLOWED_IN_TYPE_VARIABLE, name, info);
  ------------------
  |  |   68|      0|#define EXPR_NOT_ALLOWED_IN_TYPE_VARIABLE \
  |  |   69|      0|"%s cannot be used within %s"
  ------------------
 3222|      0|    }
 3223|  3.37k|    else if (type == TypeAliasBlock) {
  ------------------
  |  Branch (3223:14): [True: 2, False: 3.37k]
  ------------------
 3224|       |        // for now, we do not have any extra information
 3225|      2|        assert(st->st_cur->ste_scope_info == NULL);
  ------------------
  |  Branch (3225:9): [True: 2, False: 0]
  ------------------
 3226|      2|        PyErr_Format(PyExc_SyntaxError, EXPR_NOT_ALLOWED_IN_TYPE_ALIAS, name);
  ------------------
  |  |   71|      2|#define EXPR_NOT_ALLOWED_IN_TYPE_ALIAS \
  |  |   72|      2|"%s cannot be used within a type alias"
  ------------------
 3227|      2|    }
 3228|  3.37k|    else if (type == TypeParametersBlock) {
  ------------------
  |  Branch (3228:14): [True: 0, False: 3.37k]
  ------------------
 3229|       |        // for now, we do not have any extra information
 3230|      0|        assert(st->st_cur->ste_scope_info == NULL);
  ------------------
  |  Branch (3230:9): [True: 0, False: 0]
  ------------------
 3231|      0|        PyErr_Format(PyExc_SyntaxError, EXPR_NOT_ALLOWED_IN_TYPE_PARAMETERS, name);
  ------------------
  |  |   74|      0|#define EXPR_NOT_ALLOWED_IN_TYPE_PARAMETERS \
  |  |   75|      0|"%s cannot be used within the definition of a generic"
  ------------------
 3232|      0|    }
 3233|  3.37k|    else
 3234|  3.37k|        return 1;
 3235|       |
 3236|     30|    SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|     30|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|     30|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 3237|     30|    return 0;
 3238|  3.40k|}
symtable.c:symtable_handle_namedexpr:
 2484|  1.88k|{
 2485|  1.88k|    if (st->st_cur->ste_comp_iter_expr > 0) {
  ------------------
  |  Branch (2485:9): [True: 2, False: 1.87k]
  ------------------
 2486|       |        /* Assignment isn't allowed in a comprehension iterable expression */
 2487|      2|        PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_ITER_EXPR);
  ------------------
  |  |   62|      2|#define NAMED_EXPR_COMP_ITER_EXPR \
  |  |   63|      2|"assignment expression cannot be used in a comprehension iterable expression"
  ------------------
 2488|      2|        SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|      2|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      2|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2489|      2|        return 0;
 2490|      2|    }
 2491|  1.87k|    if (st->st_cur->ste_comprehension) {
  ------------------
  |  Branch (2491:9): [True: 1.71k, False: 164]
  ------------------
 2492|       |        /* Inside a comprehension body, so find the right target scope */
 2493|  1.71k|        if (!symtable_extend_namedexpr_scope(st, e->v.NamedExpr.target))
  ------------------
  |  Branch (2493:13): [True: 3, False: 1.71k]
  ------------------
 2494|      3|            return 0;
 2495|  1.71k|    }
 2496|  1.87k|    VISIT(st, expr, e->v.NamedExpr.value);
  ------------------
  |  | 1748|  1.87k|    do { \
  |  | 1749|  1.87k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 8, False: 1.86k]
  |  |  ------------------
  |  | 1750|      8|            return 0; \
  |  | 1751|      8|        } \
  |  | 1752|  1.87k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.86k]
  |  |  ------------------
  ------------------
 2497|  1.86k|    VISIT(st, expr, e->v.NamedExpr.target);
  ------------------
  |  | 1748|  1.86k|    do { \
  |  | 1749|  1.86k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 1.86k]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|  1.86k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 1.86k]
  |  |  ------------------
  ------------------
 2498|  1.86k|    return 1;
 2499|  1.86k|}
symtable.c:symtable_extend_namedexpr_scope:
 2387|  1.71k|{
 2388|  1.71k|    assert(st->st_stack);
  ------------------
  |  Branch (2388:5): [True: 1.71k, False: 0]
  ------------------
 2389|  1.71k|    assert(e->kind == Name_kind);
  ------------------
  |  Branch (2389:5): [True: 1.71k, False: 0]
  ------------------
 2390|       |
 2391|  1.71k|    PyObject *target_name = e->v.Name.id;
 2392|  1.71k|    Py_ssize_t i, size;
 2393|  1.71k|    struct _symtable_entry *ste;
 2394|  1.71k|    size = PyList_GET_SIZE(st->st_stack);
  ------------------
  |  |   38|  1.71k|#define PyList_GET_SIZE(op) PyList_GET_SIZE(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  1.71k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  1.71k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2395|  1.71k|    assert(size);
  ------------------
  |  Branch (2395:5): [True: 1.71k, False: 0]
  ------------------
 2396|       |
 2397|       |    /* Iterate over the stack in reverse and add to the nearest adequate scope */
 2398|  4.38k|    for (i = size - 1; i >= 0; i--) {
  ------------------
  |  Branch (2398:24): [True: 4.38k, False: 0]
  ------------------
 2399|  4.38k|        ste = (struct _symtable_entry *) PyList_GET_ITEM(st->st_stack, i);
  ------------------
  |  |   40|  4.38k|#define PyList_GET_ITEM(op, index) (_PyList_CAST(op)->ob_item[(index)])
  |  |  ------------------
  |  |  |  |   26|  4.38k|    (assert(PyList_Check(op)), _Py_CAST(PyListObject*, (op)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.38k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2399:42): [True: 4.38k, False: 0]
  ------------------
 2400|       |
 2401|       |        /* If we find a comprehension scope, check for a target
 2402|       |         * binding conflict with iteration variables, otherwise skip it
 2403|       |         */
 2404|  4.38k|        if (ste->ste_comprehension) {
  ------------------
  |  Branch (2404:13): [True: 1.73k, False: 2.64k]
  ------------------
 2405|  1.73k|            long target_in_scope = symtable_lookup_entry(st, ste, target_name);
 2406|  1.73k|            if (target_in_scope < 0) {
  ------------------
  |  Branch (2406:17): [True: 0, False: 1.73k]
  ------------------
 2407|      0|                return 0;
 2408|      0|            }
 2409|  1.73k|            if ((target_in_scope & DEF_COMP_ITER) &&
  ------------------
  |  |  178|  1.73k|#define DEF_COMP_ITER (2<<8)     /* this name is a comprehension iteration variable */
  ------------------
  |  Branch (2409:17): [True: 4, False: 1.72k]
  ------------------
 2410|      4|                (target_in_scope & DEF_LOCAL)) {
  ------------------
  |  |  171|      4|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
  |  Branch (2410:17): [True: 2, False: 2]
  ------------------
 2411|      2|                PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_CONFLICT, target_name);
  ------------------
  |  |   56|      2|#define NAMED_EXPR_COMP_CONFLICT \
  |  |   57|      2|"assignment expression cannot rebind comprehension iteration variable '%U'"
  ------------------
 2412|      2|                SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|      2|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      2|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2413|      2|                return 0;
 2414|      2|            }
 2415|  1.73k|            continue;
 2416|  1.73k|        }
 2417|       |
 2418|       |        /* If we find a FunctionBlock entry, add as GLOBAL/LOCAL or NONLOCAL/LOCAL */
 2419|  2.64k|        if (ste->ste_type == FunctionBlock) {
  ------------------
  |  Branch (2419:13): [True: 1.22k, False: 1.42k]
  ------------------
 2420|  1.22k|            long target_in_scope = symtable_lookup_entry(st, ste, target_name);
 2421|  1.22k|            if (target_in_scope < 0) {
  ------------------
  |  Branch (2421:17): [True: 0, False: 1.22k]
  ------------------
 2422|      0|                return 0;
 2423|      0|            }
 2424|  1.22k|            if (target_in_scope & DEF_GLOBAL) {
  ------------------
  |  |  170|  1.22k|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
  |  Branch (2424:17): [True: 0, False: 1.22k]
  ------------------
 2425|      0|                if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e)))
  ------------------
  |  |  170|      0|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                              if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e)))
  ------------------
  |  |   86|      0|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|      0|    (_Py_SourceLocation){ \
  |  |  |  |   59|      0|               .lineno = (n)->lineno, \
  |  |  |  |   60|      0|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|      0|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|      0|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2425:21): [True: 0, False: 0]
  ------------------
 2426|      0|                    return 0;
 2427|  1.22k|            } else {
 2428|  1.22k|                if (!symtable_add_def(st, target_name, DEF_NONLOCAL, LOCATION(e))) {
  ------------------
  |  |  173|  1.22k|#define DEF_NONLOCAL (2<<2)      /* nonlocal stmt */
  ------------------
                              if (!symtable_add_def(st, target_name, DEF_NONLOCAL, LOCATION(e))) {
  ------------------
  |  |   86|  1.22k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.22k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.22k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.22k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.22k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.22k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2428:21): [True: 0, False: 1.22k]
  ------------------
 2429|      0|                    return 0;
 2430|      0|                }
 2431|  1.22k|            }
 2432|  1.22k|            if (!symtable_record_directive(st, target_name, LOCATION(e))) {
  ------------------
  |  |   86|  1.22k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.22k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.22k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.22k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.22k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.22k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2432:17): [True: 0, False: 1.22k]
  ------------------
 2433|      0|                return 0;
 2434|      0|            }
 2435|       |
 2436|  1.22k|            return symtable_add_def_helper(st, target_name, DEF_LOCAL, ste, LOCATION(e));
  ------------------
  |  |  171|  1.22k|#define DEF_LOCAL 2              /* assignment in code block */
  ------------------
                          return symtable_add_def_helper(st, target_name, DEF_LOCAL, ste, LOCATION(e));
  ------------------
  |  |   86|  1.22k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  1.22k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  1.22k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  1.22k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  1.22k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  1.22k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2437|  1.22k|        }
 2438|       |        /* If we find a ModuleBlock entry, add as GLOBAL */
 2439|  1.42k|        if (ste->ste_type == ModuleBlock) {
  ------------------
  |  Branch (2439:13): [True: 488, False: 935]
  ------------------
 2440|    488|            if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e))) {
  ------------------
  |  |  170|    488|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                          if (!symtable_add_def(st, target_name, DEF_GLOBAL, LOCATION(e))) {
  ------------------
  |  |   86|    488|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    488|    (_Py_SourceLocation){ \
  |  |  |  |   59|    488|               .lineno = (n)->lineno, \
  |  |  |  |   60|    488|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    488|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    488|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2440:17): [True: 1, False: 487]
  ------------------
 2441|      1|                return 0;
 2442|      1|            }
 2443|    487|            if (!symtable_record_directive(st, target_name, LOCATION(e))) {
  ------------------
  |  |   86|    487|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    487|    (_Py_SourceLocation){ \
  |  |  |  |   59|    487|               .lineno = (n)->lineno, \
  |  |  |  |   60|    487|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    487|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    487|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (2443:17): [True: 0, False: 487]
  ------------------
 2444|      0|                return 0;
 2445|      0|            }
 2446|       |
 2447|    487|            return symtable_add_def_helper(st, target_name, DEF_GLOBAL, ste, LOCATION(e));
  ------------------
  |  |  170|    487|#define DEF_GLOBAL 1             /* global stmt */
  ------------------
                          return symtable_add_def_helper(st, target_name, DEF_GLOBAL, ste, LOCATION(e));
  ------------------
  |  |   86|    487|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|    487|    (_Py_SourceLocation){ \
  |  |  |  |   59|    487|               .lineno = (n)->lineno, \
  |  |  |  |   60|    487|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|    487|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|    487|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
 2448|    487|        }
 2449|       |        /* Disallow usage in ClassBlock and type scopes */
 2450|    935|        if (ste->ste_type == ClassBlock ||
  ------------------
  |  Branch (2450:13): [True: 0, False: 935]
  ------------------
 2451|    935|            ste->ste_type == TypeParametersBlock ||
  ------------------
  |  Branch (2451:13): [True: 0, False: 935]
  ------------------
 2452|    935|            ste->ste_type == TypeAliasBlock ||
  ------------------
  |  Branch (2452:13): [True: 0, False: 935]
  ------------------
 2453|    935|            ste->ste_type == TypeVariableBlock) {
  ------------------
  |  Branch (2453:13): [True: 0, False: 935]
  ------------------
 2454|      0|            switch (ste->ste_type) {
 2455|      0|                case ClassBlock:
  ------------------
  |  Branch (2455:17): [True: 0, False: 0]
  ------------------
 2456|      0|                    PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_IN_CLASS);
  ------------------
  |  |   44|      0|#define NAMED_EXPR_COMP_IN_CLASS \
  |  |   45|      0|"assignment expression within a comprehension cannot be used in a class body"
  ------------------
 2457|      0|                    break;
 2458|      0|                case TypeParametersBlock:
  ------------------
  |  Branch (2458:17): [True: 0, False: 0]
  ------------------
 2459|      0|                    PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_IN_TYPEPARAM);
  ------------------
  |  |   53|      0|#define NAMED_EXPR_COMP_IN_TYPEPARAM \
  |  |   54|      0|"assignment expression within a comprehension cannot be used within the definition of a generic"
  ------------------
 2460|      0|                    break;
 2461|      0|                case TypeAliasBlock:
  ------------------
  |  Branch (2461:17): [True: 0, False: 0]
  ------------------
 2462|      0|                    PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_IN_TYPEALIAS);
  ------------------
  |  |   50|      0|#define NAMED_EXPR_COMP_IN_TYPEALIAS \
  |  |   51|      0|"assignment expression within a comprehension cannot be used in a type alias"
  ------------------
 2463|      0|                    break;
 2464|      0|                case TypeVariableBlock:
  ------------------
  |  Branch (2464:17): [True: 0, False: 0]
  ------------------
 2465|      0|                    PyErr_Format(PyExc_SyntaxError, NAMED_EXPR_COMP_IN_TYPEVAR_BOUND);
  ------------------
  |  |   47|      0|#define NAMED_EXPR_COMP_IN_TYPEVAR_BOUND \
  |  |   48|      0|"assignment expression within a comprehension cannot be used in a TypeVar bound"
  ------------------
 2466|      0|                    break;
 2467|      0|                default:
  ------------------
  |  Branch (2467:17): [True: 0, False: 0]
  ------------------
 2468|      0|                    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2469|      0|            }
 2470|      0|            SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|      0|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      0|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 2471|      0|            return 0;
 2472|      0|        }
 2473|    935|    }
 2474|       |
 2475|       |    /* We should always find either a function-like block, ModuleBlock or ClassBlock
 2476|       |       and should never fall to this case
 2477|       |    */
 2478|  1.71k|    Py_UNREACHABLE();
  ------------------
  |  |  289|      0|#  define Py_UNREACHABLE() __builtin_unreachable()
  ------------------
 2479|      0|    return 0;
 2480|  1.71k|}
symtable.c:symtable_visit_genexp:
 3181|    390|{
 3182|    390|    return symtable_handle_comprehension(st, e, &_Py_STR(anon_genexpr),
  ------------------
  |  |  938|    390|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    390|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    390|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3183|    390|                                         e->v.GeneratorExp.generators,
 3184|       |                                         e->v.GeneratorExp.elt, NULL);
 3185|    390|}
symtable.c:symtable_handle_comprehension:
 3105|  3.73k|{
 3106|  3.73k|    int is_generator = (e->kind == GeneratorExp_kind);
 3107|  3.73k|    comprehension_ty outermost = ((comprehension_ty)
 3108|  3.73k|                                    asdl_seq_GET(generators, 0));
  ------------------
  |  |   82|  3.73k|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  ------------------
  |  |  |  |  302|  3.73k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  ------------------
  ------------------
 3109|       |    /* Outermost iterator is evaluated in current scope */
 3110|  3.73k|    st->st_cur->ste_comp_iter_expr++;
 3111|  3.73k|    VISIT(st, expr, outermost->iter);
  ------------------
  |  | 1748|  3.73k|    do { \
  |  | 1749|  3.73k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 11, False: 3.72k]
  |  |  ------------------
  |  | 1750|     11|            return 0; \
  |  | 1751|     11|        } \
  |  | 1752|  3.73k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 3.72k]
  |  |  ------------------
  ------------------
 3112|  3.72k|    st->st_cur->ste_comp_iter_expr--;
 3113|       |
 3114|       |    /* Non-generator comprehensions are inlined into the enclosing compilation
 3115|       |     * unit (including generator expressions), except in annotation scopes
 3116|       |     * that can see a class. */
 3117|  3.72k|    int will_inline = !is_generator && !st->st_cur->ste_can_see_class_scope;
  ------------------
  |  Branch (3117:23): [True: 3.34k, False: 386]
  |  Branch (3117:40): [True: 3.34k, False: 0]
  ------------------
 3118|  3.72k|    _Py_block_ty block = will_inline ? InlinedComprehensionBlock : FunctionBlock;
  ------------------
  |  Branch (3118:26): [True: 3.34k, False: 386]
  ------------------
 3119|       |
 3120|       |    /* Create comprehension scope for the rest */
 3121|  3.72k|    if (!scope_name ||
  ------------------
  |  Branch (3121:9): [True: 0, False: 3.72k]
  ------------------
 3122|  3.72k|        !symtable_enter_block(st, scope_name, block, (void *)e, LOCATION(e))) {
  ------------------
  |  |   86|  3.72k|#define LOCATION(x) SRC_LOCATION_FROM_AST(x)
  |  |  ------------------
  |  |  |  |   58|  3.72k|    (_Py_SourceLocation){ \
  |  |  |  |   59|  3.72k|               .lineno = (n)->lineno, \
  |  |  |  |   60|  3.72k|               .end_lineno = (n)->end_lineno, \
  |  |  |  |   61|  3.72k|               .col_offset = (n)->col_offset, \
  |  |  |  |   62|  3.72k|               .end_col_offset = (n)->end_col_offset }
  |  |  ------------------
  ------------------
  |  Branch (3122:9): [True: 0, False: 3.72k]
  ------------------
 3123|      0|        return 0;
 3124|      0|    }
 3125|  3.72k|    switch(e->kind) {
 3126|     97|        case ListComp_kind:
  ------------------
  |  Branch (3126:9): [True: 97, False: 3.62k]
  ------------------
 3127|     97|            st->st_cur->ste_comprehension = ListComprehension;
 3128|     97|            break;
 3129|  2.54k|        case SetComp_kind:
  ------------------
  |  Branch (3129:9): [True: 2.54k, False: 1.18k]
  ------------------
 3130|  2.54k|            st->st_cur->ste_comprehension = SetComprehension;
 3131|  2.54k|            break;
 3132|    699|        case DictComp_kind:
  ------------------
  |  Branch (3132:9): [True: 699, False: 3.02k]
  ------------------
 3133|    699|            st->st_cur->ste_comprehension = DictComprehension;
 3134|    699|            break;
 3135|    386|        default:
  ------------------
  |  Branch (3135:9): [True: 386, False: 3.34k]
  ------------------
 3136|    386|            st->st_cur->ste_comprehension = GeneratorExpression;
 3137|    386|            break;
 3138|  3.72k|    }
 3139|  3.72k|    if (outermost->is_async) {
  ------------------
  |  Branch (3139:9): [True: 942, False: 2.78k]
  ------------------
 3140|    942|        st->st_cur->ste_coroutine = 1;
 3141|    942|    }
 3142|       |
 3143|       |    /* Outermost iter is received as an argument for non-inlined comps */
 3144|  3.72k|    if (!will_inline && !symtable_implicit_arg(st, 0)) {
  ------------------
  |  Branch (3144:9): [True: 386, False: 3.34k]
  |  Branch (3144:25): [True: 0, False: 386]
  ------------------
 3145|      0|        symtable_exit_block(st);
 3146|      0|        return 0;
 3147|      0|    }
 3148|       |    /* Visit iteration variable target, and mark them as such */
 3149|  3.72k|    st->st_cur->ste_comp_iter_target = 1;
 3150|  3.72k|    VISIT(st, expr, outermost->target);
  ------------------
  |  | 1748|  3.72k|    do { \
  |  | 1749|  3.72k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 5, False: 3.72k]
  |  |  ------------------
  |  | 1750|      5|            return 0; \
  |  | 1751|      5|        } \
  |  | 1752|  3.72k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 3.72k]
  |  |  ------------------
  ------------------
 3151|  3.72k|    st->st_cur->ste_comp_iter_target = 0;
 3152|       |    /* Visit the rest of the comprehension body */
 3153|  3.72k|    VISIT_SEQ(st, expr, outermost->ifs);
  ------------------
  |  | 1755|  3.72k|    do { \
  |  | 1756|  3.72k|        Py_ssize_t i; \
  |  | 1757|  3.72k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|  3.93k|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  3.93k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  7.87k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 3.93k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 218, False: 3.72k]
  |  |  ------------------
  |  | 1759|    218|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    218|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    218|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|    218|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 1, False: 217]
  |  |  ------------------
  |  | 1761|    218|                return 0;                 \
  |  | 1762|    218|        } \
  |  | 1763|  3.72k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 3.72k]
  |  |  ------------------
  ------------------
 3154|  3.72k|    VISIT_SEQ_TAIL(st, comprehension, generators, 1);
  ------------------
  |  | 1766|  3.72k|    do { \
  |  | 1767|  3.72k|        Py_ssize_t i; \
  |  | 1768|  3.72k|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1769|  4.07k|        for (i = (START); i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|  4.07k|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|  8.14k|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 4.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1769:27): [True: 360, False: 3.71k]
  |  |  ------------------
  |  | 1770|    360|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|    360|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    360|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1771|    360|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1771:17): [True: 7, False: 353]
  |  |  ------------------
  |  | 1772|    360|                return 0;                 \
  |  | 1773|    360|        } \
  |  | 1774|  3.72k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1774:13): [Folded, False: 3.71k]
  |  |  ------------------
  ------------------
 3155|  3.71k|    if (value)
  ------------------
  |  Branch (3155:9): [True: 319, False: 3.39k]
  ------------------
 3156|    319|        VISIT(st, expr, value);
  ------------------
  |  | 1748|    319|    do { \
  |  | 1749|    319|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 0, False: 319]
  |  |  ------------------
  |  | 1750|      0|            return 0; \
  |  | 1751|      0|        } \
  |  | 1752|    319|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 319]
  |  |  ------------------
  ------------------
 3157|  3.71k|    VISIT(st, expr, elt);
  ------------------
  |  | 1748|  3.71k|    do { \
  |  | 1749|  3.71k|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 3, False: 3.71k]
  |  |  ------------------
  |  | 1750|      3|            return 0; \
  |  | 1751|      3|        } \
  |  | 1752|  3.71k|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 3.71k]
  |  |  ------------------
  ------------------
 3158|  3.71k|    st->st_cur->ste_generator = is_generator;
 3159|  3.71k|    int is_async = st->st_cur->ste_coroutine && !is_generator;
  ------------------
  |  Branch (3159:20): [True: 1.16k, False: 2.54k]
  |  Branch (3159:49): [True: 1.15k, False: 15]
  ------------------
 3160|  3.71k|    if (!symtable_exit_block(st)) {
  ------------------
  |  Branch (3160:9): [True: 0, False: 3.71k]
  ------------------
 3161|      0|        return 0;
 3162|      0|    }
 3163|  3.71k|    if (is_async &&
  ------------------
  |  Branch (3163:9): [True: 1.15k, False: 2.55k]
  ------------------
 3164|  1.15k|        !IS_ASYNC_DEF(st) &&
  ------------------
  |  |   92|  4.86k|#define IS_ASYNC_DEF(st) ((st)->st_cur->ste_type == FunctionBlock && (st)->st_cur->ste_coroutine)
  |  |  ------------------
  |  |  |  Branch (92:27): [True: 1.09k, False: 54]
  |  |  |  Branch (92:70): [True: 1.09k, False: 0]
  |  |  ------------------
  ------------------
 3165|     54|        st->st_cur->ste_comprehension == NoComprehension &&
  ------------------
  |  Branch (3165:9): [True: 9, False: 45]
  ------------------
 3166|      9|        !allows_top_level_await(st))
  ------------------
  |  Branch (3166:9): [True: 5, False: 4]
  ------------------
 3167|      5|    {
 3168|      5|        PyErr_SetString(PyExc_SyntaxError, "asynchronous comprehension outside of "
 3169|      5|                                           "an asynchronous function");
 3170|      5|        SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|      5|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      5|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 3171|      5|        return 0;
 3172|      5|    }
 3173|  3.70k|    if (is_async) {
  ------------------
  |  Branch (3173:9): [True: 1.14k, False: 2.55k]
  ------------------
 3174|  1.14k|        st->st_cur->ste_coroutine = 1;
 3175|  1.14k|    }
 3176|  3.70k|    return 1;
 3177|  3.71k|}
symtable.c:symtable_implicit_arg:
 2843|    386|{
 2844|    386|    PyObject *id = PyUnicode_FromFormat(".%d", pos);
 2845|    386|    if (id == NULL)
  ------------------
  |  Branch (2845:9): [True: 0, False: 386]
  ------------------
 2846|      0|        return 0;
 2847|    386|    if (!symtable_add_def(st, id, DEF_PARAM, st->st_cur->ste_loc)) {
  ------------------
  |  |  172|    386|#define DEF_PARAM (2<<1)         /* formal parameter */
  ------------------
  |  Branch (2847:9): [True: 0, False: 386]
  ------------------
 2848|      0|        Py_DECREF(id);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2849|      0|        return 0;
 2850|      0|    }
 2851|    386|    Py_DECREF(id);
  ------------------
  |  |  430|    386|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|    386|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    386|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2852|    386|    return 1;
 2853|    386|}
symtable.c:symtable_visit_comprehension:
 3078|    360|{
 3079|    360|    st->st_cur->ste_comp_iter_target = 1;
 3080|    360|    VISIT(st, expr, lc->target);
  ------------------
  |  | 1748|    360|    do { \
  |  | 1749|    360|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 1, False: 359]
  |  |  ------------------
  |  | 1750|      1|            return 0; \
  |  | 1751|      1|        } \
  |  | 1752|    360|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 359]
  |  |  ------------------
  ------------------
 3081|    359|    st->st_cur->ste_comp_iter_target = 0;
 3082|    359|    st->st_cur->ste_comp_iter_expr++;
 3083|    359|    VISIT(st, expr, lc->iter);
  ------------------
  |  | 1748|    359|    do { \
  |  | 1749|    359|        if (!symtable_visit_ ## TYPE((ST), (V))) { \
  |  |  ------------------
  |  |  |  Branch (1749:13): [True: 4, False: 355]
  |  |  ------------------
  |  | 1750|      4|            return 0; \
  |  | 1751|      4|        } \
  |  | 1752|    359|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1752:13): [Folded, False: 355]
  |  |  ------------------
  ------------------
 3084|    355|    st->st_cur->ste_comp_iter_expr--;
 3085|    355|    VISIT_SEQ(st, expr, lc->ifs);
  ------------------
  |  | 1755|    355|    do { \
  |  | 1756|    355|        Py_ssize_t i; \
  |  | 1757|    355|        asdl_ ## TYPE ## _seq *seq = (SEQ); /* avoid variable capture */ \
  |  | 1758|    449|        for (i = 0; i < asdl_seq_LEN(seq); i++) { \
  |  |  ------------------
  |  |  |  |   83|    449|#define asdl_seq_LEN(S) _Py_RVALUE(((S) == NULL ? 0 : (S)->size))
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|    898|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (302:37): [True: 0, False: 449]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (1758:21): [True: 96, False: 353]
  |  |  ------------------
  |  | 1759|     96|            TYPE ## _ty elt = (TYPE ## _ty)asdl_seq_GET(seq, i); \
  |  |  ------------------
  |  |  |  |   82|     96|#define asdl_seq_GET(S, I) _Py_RVALUE((S)->typed_elements[(I)])
  |  |  |  |  ------------------
  |  |  |  |  |  |  302|     96|#define _Py_RVALUE(EXPR) ((void)0, (EXPR))
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1760|     96|            if (!symtable_visit_ ## TYPE((ST), elt)) \
  |  |  ------------------
  |  |  |  Branch (1760:17): [True: 2, False: 94]
  |  |  ------------------
  |  | 1761|     96|                return 0;                 \
  |  | 1762|     96|        } \
  |  | 1763|    355|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1763:13): [Folded, False: 353]
  |  |  ------------------
  ------------------
 3086|    353|    if (lc->is_async) {
  ------------------
  |  Branch (3086:9): [True: 206, False: 147]
  ------------------
 3087|    206|        st->st_cur->ste_coroutine = 1;
 3088|    206|    }
 3089|    353|    return 1;
 3090|    355|}
symtable.c:symtable_visit_listcomp:
 3189|     97|{
 3190|     97|    return symtable_handle_comprehension(st, e, &_Py_STR(anon_listcomp),
  ------------------
  |  |  938|     97|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|     97|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|     97|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3191|     97|                                         e->v.ListComp.generators,
 3192|       |                                         e->v.ListComp.elt, NULL);
 3193|     97|}
symtable.c:symtable_visit_setcomp:
 3197|  2.54k|{
 3198|  2.54k|    return symtable_handle_comprehension(st, e, &_Py_STR(anon_setcomp),
  ------------------
  |  |  938|  2.54k|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|  2.54k|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|  2.54k|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3199|  2.54k|                                         e->v.SetComp.generators,
 3200|       |                                         e->v.SetComp.elt, NULL);
 3201|  2.54k|}
symtable.c:symtable_visit_dictcomp:
 3205|    703|{
 3206|    703|    return symtable_handle_comprehension(st, e, &_Py_STR(anon_dictcomp),
  ------------------
  |  |  938|    703|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|    703|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|    703|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3207|    703|                                         e->v.DictComp.generators,
 3208|    703|                                         e->v.DictComp.key,
 3209|    703|                                         e->v.DictComp.value);
 3210|    703|}
symtable.c:symtable_raise_if_comprehension_block:
 3241|      6|symtable_raise_if_comprehension_block(struct symtable *st, expr_ty e) {
 3242|      6|    _Py_comprehension_ty type = st->st_cur->ste_comprehension;
 3243|      6|    PyErr_SetString(PyExc_SyntaxError,
 3244|      6|            (type == ListComprehension) ? "'yield' inside list comprehension" :
  ------------------
  |  Branch (3244:13): [True: 4, False: 2]
  ------------------
 3245|      6|            (type == SetComprehension) ? "'yield' inside set comprehension" :
  ------------------
  |  Branch (3245:13): [True: 0, False: 2]
  ------------------
 3246|      2|            (type == DictComprehension) ? "'yield' inside dict comprehension" :
  ------------------
  |  Branch (3246:13): [True: 0, False: 2]
  ------------------
 3247|      2|            "'yield' inside generator expression");
 3248|      6|    SET_ERROR_LOCATION(st->st_filename, LOCATION(e));
  ------------------
  |  |   89|      6|    PyErr_RangedSyntaxLocationObject((FNAME), \
  |  |   90|      6|        (L).lineno, (L).col_offset + 1, (L).end_lineno, (L).end_col_offset + 1)
  ------------------
 3249|      6|    return 0;
 3250|      6|}

PySys_GetAttrString:
  103|      2|{
  104|      2|    PyThreadState *tstate = _PyThreadState_GET();
  105|      2|    PyObject *sysdict = tstate->interp->sysdict;
  106|      2|    if (sysdict == NULL) {
  ------------------
  |  Branch (106:9): [True: 0, False: 2]
  ------------------
  107|      0|        PyErr_SetString(PyExc_RuntimeError, "no sys module");
  108|      0|        return NULL;
  109|      0|    }
  110|      2|    PyObject *value;
  111|      2|    if (PyDict_GetItemStringRef(sysdict, name, &value) == 0) {
  ------------------
  |  Branch (111:9): [True: 0, False: 2]
  ------------------
  112|      0|        PyErr_Format(PyExc_RuntimeError, "lost sys.%s", name);
  113|      0|    }
  114|      2|    return value;
  115|      2|}
PySys_GetOptionalAttrString:
  138|      2|{
  139|      2|    PyThreadState *tstate = _PyThreadState_GET();
  140|      2|    PyObject *sysdict = tstate->interp->sysdict;
  141|      2|    if (sysdict == NULL) {
  ------------------
  |  Branch (141:9): [True: 0, False: 2]
  ------------------
  142|      0|        *value = NULL;
  143|      0|        return 0;
  144|      0|    }
  145|      2|    return PyDict_GetItemStringRef(sysdict, name, value);
  146|      2|}
_PySys_SetAttr:
  193|      8|{
  194|      8|    PyInterpreterState *interp = _PyInterpreterState_GET();
  195|      8|    return sys_set_object(interp, key, v);
  196|      8|}
PySys_SetObject:
  210|      6|{
  211|      6|    PyInterpreterState *interp = _PyInterpreterState_GET();
  212|      6|    return sys_set_object_str(interp, name, v);
  213|      6|}
_PySys_Audit:
  374|      5|{
  375|      5|    va_list vargs;
  376|      5|    va_start(vargs, argFormat);
  377|      5|    int res = sys_audit_tstate(tstate, event, argFormat, vargs);
  378|       |    va_end(vargs);
  379|      5|    return res;
  380|      5|}
PySys_Audit:
  384|  30.4k|{
  385|  30.4k|    PyThreadState *tstate = _PyThreadState_GET();
  386|  30.4k|    va_list vargs;
  387|  30.4k|    va_start(vargs, argFormat);
  388|  30.4k|    int res = sys_audit_tstate(tstate, event, argFormat, vargs);
  389|       |    va_end(vargs);
  390|  30.4k|    return res;
  391|  30.4k|}
_PySys_ReadPreinitWarnOptions:
 3100|      2|{
 3101|      2|    PyStatus status;
 3102|      2|    _Py_PreInitEntry entry;
 3103|       |
 3104|      2|    for (entry = _preinit_warnoptions; entry != NULL; entry = entry->next) {
  ------------------
  |  Branch (3104:40): [True: 0, False: 2]
  ------------------
 3105|      0|        status = PyWideStringList_Append(options, entry->value);
 3106|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3107|      0|            return status;
 3108|      0|        }
 3109|      0|    }
 3110|       |
 3111|      2|    _clear_preinit_entries(&_preinit_warnoptions);
 3112|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3113|      2|}
_PySys_ReadPreinitXOptions:
 3118|      2|{
 3119|      2|    PyStatus status;
 3120|      2|    _Py_PreInitEntry entry;
 3121|       |
 3122|      2|    for (entry = _preinit_xoptions; entry != NULL; entry = entry->next) {
  ------------------
  |  Branch (3122:37): [True: 0, False: 2]
  ------------------
 3123|      0|        status = PyWideStringList_Append(&config->xoptions, entry->value);
 3124|      0|        if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      0|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3125|      0|            return status;
 3126|      0|        }
 3127|      0|    }
 3128|       |
 3129|      2|    _clear_preinit_entries(&_preinit_xoptions);
 3130|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 3131|      2|}
_PySys_UpdateConfig:
 4135|      2|{
 4136|      2|    PyInterpreterState *interp = tstate->interp;
 4137|      2|    PyObject *sysdict = interp->sysdict;
 4138|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 4139|      2|    int res;
 4140|       |
 4141|      2|#define COPY_LIST(KEY, VALUE) \
 4142|      2|        SET_SYS(KEY, _PyWideStringList_AsList(&(VALUE)));
 4143|       |
 4144|      2|#define SET_SYS_FROM_WSTR(KEY, VALUE) \
 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
 4146|       |
 4147|      2|#define COPY_WSTR(SYS_ATTR, WSTR) \
 4148|      2|    if (WSTR != NULL) { \
 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
 4150|      2|    }
 4151|       |
 4152|      2|    if (config->module_search_paths_set) {
  ------------------
  |  Branch (4152:9): [True: 2, False: 0]
  ------------------
 4153|      2|        COPY_LIST("path", config->module_search_paths);
  ------------------
  |  | 4142|      2|        SET_SYS(KEY, _PyWideStringList_AsList(&(VALUE)));
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4154|      2|    }
 4155|       |
 4156|      2|    COPY_WSTR("executable", config->executable);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4157|      2|    COPY_WSTR("_base_executable", config->base_executable);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4158|      2|    COPY_WSTR("prefix", config->prefix);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4159|      2|    COPY_WSTR("base_prefix", config->base_prefix);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4160|      2|    COPY_WSTR("exec_prefix", config->exec_prefix);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4161|      2|    COPY_WSTR("base_exec_prefix", config->base_exec_prefix);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4162|      2|    COPY_WSTR("platlibdir", config->platlibdir);
  ------------------
  |  | 4148|      2|    if (WSTR != NULL) { \
  |  |  ------------------
  |  |  |  Branch (4148:9): [True: 2, False: 0]
  |  |  ------------------
  |  | 4149|      2|        SET_SYS_FROM_WSTR(SYS_ATTR, WSTR); \
  |  |  ------------------
  |  |  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  |  |  ------------------
  |  |  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4150|      2|    }
  ------------------
 4163|       |
 4164|      2|    if (config->pycache_prefix != NULL) {
  ------------------
  |  Branch (4164:9): [True: 0, False: 2]
  ------------------
 4165|      0|        SET_SYS_FROM_WSTR("pycache_prefix", config->pycache_prefix);
  ------------------
  |  | 4145|      0|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  ------------------
  |  |  |  | 3987|      0|    do {                                                   \
  |  |  |  | 3988|      0|        PyObject *v = (value);                             \
  |  |  |  | 3989|      0|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      0|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      0|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      0|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4166|      2|    } else {
 4167|      2|        if (PyDict_SetItemString(sysdict, "pycache_prefix", Py_None) < 0) {
  ------------------
  |  |  616|      2|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (4167:13): [True: 0, False: 2]
  ------------------
 4168|      0|            return -1;
 4169|      0|        }
 4170|      2|    }
 4171|       |
 4172|      2|    COPY_LIST("argv", config->argv);
  ------------------
  |  | 4142|      2|        SET_SYS(KEY, _PyWideStringList_AsList(&(VALUE)));
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4173|      2|    COPY_LIST("orig_argv", config->orig_argv);
  ------------------
  |  | 4142|      2|        SET_SYS(KEY, _PyWideStringList_AsList(&(VALUE)));
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4174|      2|    COPY_LIST("warnoptions", config->warnoptions);
  ------------------
  |  | 4142|      2|        SET_SYS(KEY, _PyWideStringList_AsList(&(VALUE)));
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4175|       |
 4176|      2|    SET_SYS("_xoptions", _PyConfig_CreateXOptionsDict(config));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4177|       |
 4178|      2|    const wchar_t *stdlibdir = _Py_GetStdlibDir();
 4179|      2|    if (stdlibdir != NULL) {
  ------------------
  |  Branch (4179:9): [True: 2, False: 0]
  ------------------
 4180|      2|        SET_SYS_FROM_WSTR("_stdlib_dir", stdlibdir);
  ------------------
  |  | 4145|      2|        SET_SYS(KEY, PyUnicode_FromWideChar(VALUE, -1));
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4181|      2|    }
 4182|      0|    else {
 4183|      0|        if (PyDict_SetItemString(sysdict, "_stdlib_dir", Py_None) < 0) {
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
  |  Branch (4183:13): [True: 0, False: 0]
  ------------------
 4184|      0|            return -1;
 4185|      0|        }
 4186|      0|    }
 4187|       |
 4188|      2|#undef SET_SYS_FROM_WSTR
 4189|      2|#undef COPY_LIST
 4190|      2|#undef COPY_WSTR
 4191|       |
 4192|       |    // replace sys.flags
 4193|      2|    PyObject *new_flags = PyStructSequence_New(&FlagsType);
 4194|      2|    if (new_flags == NULL) {
  ------------------
  |  Branch (4194:9): [True: 0, False: 2]
  ------------------
 4195|      0|        return -1;
 4196|      0|    }
 4197|      2|    if (set_flags_from_config(interp, new_flags) < 0) {
  ------------------
  |  Branch (4197:9): [True: 0, False: 2]
  ------------------
 4198|      0|        Py_DECREF(new_flags);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4199|      0|        return -1;
 4200|      0|    }
 4201|       |
 4202|      2|    res = _PySys_SetAttr(&_Py_ID(flags), new_flags);
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4203|      2|    Py_DECREF(new_flags);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4204|      2|    if (res < 0) {
  ------------------
  |  Branch (4204:9): [True: 0, False: 2]
  ------------------
 4205|      0|        return -1;
 4206|      0|    }
 4207|       |
 4208|      2|    SET_SYS("dont_write_bytecode", PyBool_FromLong(!config->write_bytecode));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4209|       |
 4210|      2|    if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4210:9): [True: 0, False: 2]
  ------------------
 4211|      0|        goto err_occurred;
 4212|      0|    }
 4213|       |
 4214|      2|    return 0;
 4215|       |
 4216|      0|err_occurred:
 4217|      0|    return -1;
 4218|      2|}
_PySys_Create:
 4323|      2|{
 4324|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (4324:5): [True: 2, False: 0]
  ------------------
 4325|       |
 4326|      2|    PyInterpreterState *interp = tstate->interp;
 4327|       |
 4328|      2|    PyObject *modules = _PyImport_InitModules(interp);
 4329|      2|    if (modules == NULL) {
  ------------------
  |  Branch (4329:9): [True: 0, False: 2]
  ------------------
 4330|      0|        goto error;
 4331|      0|    }
 4332|       |
 4333|      2|    PyObject *sysmod = _PyModule_CreateInitialized(&sysmodule, PYTHON_API_VERSION);
  ------------------
  |  |   59|      2|#define PYTHON_API_VERSION 1013
  ------------------
 4334|      2|    if (sysmod == NULL) {
  ------------------
  |  Branch (4334:9): [True: 0, False: 2]
  ------------------
 4335|      0|        return _PyStatus_ERR("failed to create a module object");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4336|      0|    }
 4337|       |#ifdef Py_GIL_DISABLED
 4338|       |    PyUnstable_Module_SetGIL(sysmod, Py_MOD_GIL_NOT_USED);
 4339|       |#endif
 4340|       |
 4341|      2|    PyObject *sysdict = PyModule_GetDict(sysmod);
 4342|      2|    if (sysdict == NULL) {
  ------------------
  |  Branch (4342:9): [True: 0, False: 2]
  ------------------
 4343|      0|        goto error;
 4344|      0|    }
 4345|      2|    interp->sysdict = Py_NewRef(sysdict);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4346|       |
 4347|      2|    interp->sysdict_copy = PyDict_Copy(sysdict);
 4348|      2|    if (interp->sysdict_copy == NULL) {
  ------------------
  |  Branch (4348:9): [True: 0, False: 2]
  ------------------
 4349|      0|        goto error;
 4350|      0|    }
 4351|       |
 4352|      2|    if (PyDict_SetItemString(sysdict, "modules", modules) < 0) {
  ------------------
  |  Branch (4352:9): [True: 0, False: 2]
  ------------------
 4353|      0|        goto error;
 4354|      0|    }
 4355|       |
 4356|      2|    PyObject *lazy_modules = _PyImport_InitLazyModules(interp); // borrowed reference
 4357|      2|    if (lazy_modules == NULL) {
  ------------------
  |  Branch (4357:9): [True: 0, False: 2]
  ------------------
 4358|      0|        goto error;
 4359|      0|    }
 4360|       |
 4361|      2|    if (PyDict_SetItemString(sysdict, "lazy_modules", lazy_modules) < 0) {
  ------------------
  |  Branch (4361:9): [True: 0, False: 2]
  ------------------
 4362|      0|        goto error;
 4363|      0|    }
 4364|       |
 4365|      2|    PyStatus status = _PySys_SetPreliminaryStderr(sysdict);
 4366|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 4367|      0|        return status;
 4368|      0|    }
 4369|       |
 4370|      2|    status = _PySys_InitCore(tstate, sysdict);
 4371|      2|    if (_PyStatus_EXCEPTION(status)) {
  ------------------
  |  |   43|      2|    ((err)._type != _PyStatus_TYPE_OK)
  |  |  ------------------
  |  |  |  Branch (43:5): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 4372|      0|        return status;
 4373|      0|    }
 4374|       |
 4375|      2|    if (_PyImport_FixupBuiltin(tstate, sysmod, "sys", modules) < 0) {
  ------------------
  |  Branch (4375:9): [True: 0, False: 2]
  ------------------
 4376|      0|        goto error;
 4377|      0|    }
 4378|       |
 4379|      2|    PyObject *monitoring = _Py_CreateMonitoringObject();
 4380|      2|    if (monitoring == NULL) {
  ------------------
  |  Branch (4380:9): [True: 0, False: 2]
  ------------------
 4381|      0|        goto error;
 4382|      0|    }
 4383|      2|    int err = PyDict_SetItemString(sysdict, "monitoring", monitoring);
 4384|      2|    Py_DECREF(monitoring);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4385|      2|    if (err < 0) {
  ------------------
  |  Branch (4385:9): [True: 0, False: 2]
  ------------------
 4386|      0|        goto error;
 4387|      0|    }
 4388|       |
 4389|      2|    PyObject *_jit = _PyModule_CreateInitialized(&_jit_module, PYTHON_API_VERSION);
  ------------------
  |  |   59|      2|#define PYTHON_API_VERSION 1013
  ------------------
 4390|      2|    if (_jit == NULL) {
  ------------------
  |  Branch (4390:9): [True: 0, False: 2]
  ------------------
 4391|      0|        goto error;
 4392|      0|    }
 4393|      2|    err = PyDict_SetItemString(sysdict, "_jit", _jit);
 4394|      2|    Py_DECREF(_jit);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4395|      2|    if (err) {
  ------------------
  |  Branch (4395:9): [True: 0, False: 2]
  ------------------
 4396|      0|        goto error;
 4397|      0|    }
 4398|       |
 4399|      2|    assert(!_PyErr_Occurred(tstate));
  ------------------
  |  Branch (4399:5): [True: 2, False: 0]
  ------------------
 4400|       |
 4401|      2|    *sysmod_p = sysmod;
 4402|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4403|       |
 4404|      0|error:
 4405|      0|    return _PyStatus_ERR("can't initialize sys module");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4406|      2|}
sysmodule.c:sys_set_object:
  171|     14|{
  172|     14|    if (key == NULL) {
  ------------------
  |  Branch (172:9): [True: 0, False: 14]
  ------------------
  173|      0|        return -1;
  174|      0|    }
  175|     14|    PyObject *sd = interp->sysdict;
  176|     14|    if (sd == NULL) {
  ------------------
  |  Branch (176:9): [True: 0, False: 14]
  ------------------
  177|      0|        PyErr_SetString(PyExc_RuntimeError, "no sys module");
  178|      0|        return -1;
  179|      0|    }
  180|     14|    if (v == NULL) {
  ------------------
  |  Branch (180:9): [True: 0, False: 14]
  ------------------
  181|      0|        if (PyDict_Pop(sd, key, NULL) < 0) {
  ------------------
  |  Branch (181:13): [True: 0, False: 0]
  ------------------
  182|      0|            return -1;
  183|      0|        }
  184|      0|        return 0;
  185|      0|    }
  186|     14|    else {
  187|     14|        return PyDict_SetItem(sd, key, v);
  188|     14|    }
  189|     14|}
sysmodule.c:sys_set_object_str:
  200|      6|{
  201|      6|    PyObject *key = v ? PyUnicode_InternFromString(name)
  ------------------
  |  Branch (201:21): [True: 6, False: 0]
  ------------------
  202|      6|                      : PyUnicode_FromString(name);
  203|      6|    int r = sys_set_object(interp, key, v);
  204|      6|    Py_XDECREF(key);
  ------------------
  |  |  524|      6|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      6|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      6|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      6|    return r;
  206|      6|}
sysmodule.c:sys_audit_tstate:
  247|  30.4k|{
  248|  30.4k|    assert(event != NULL);
  ------------------
  |  Branch (248:5): [True: 30.4k, False: 0]
  ------------------
  249|  30.4k|    assert(!argFormat || !strchr(argFormat, 'N'));
  ------------------
  |  Branch (249:5): [True: 0, False: 30.4k]
  |  Branch (249:5): [True: 30.4k, False: 0]
  ------------------
  250|       |
  251|  30.4k|    if (!ts) {
  ------------------
  |  Branch (251:9): [True: 0, False: 30.4k]
  ------------------
  252|       |        /* Audit hooks cannot be called with a NULL thread state */
  253|      0|        return 0;
  254|      0|    }
  255|       |
  256|       |    /* The current implementation cannot be called if tstate is not
  257|       |       the current Python thread state. */
  258|  30.4k|    assert(ts == _PyThreadState_GET());
  ------------------
  |  Branch (258:5): [True: 30.4k, False: 0]
  ------------------
  259|       |
  260|       |    /* Early exit when no hooks are registered */
  261|  30.4k|    PyInterpreterState *is = ts->interp;
  262|  30.4k|    if (!should_audit(is)) {
  ------------------
  |  Branch (262:9): [True: 30.4k, False: 0]
  ------------------
  263|  30.4k|        return 0;
  264|  30.4k|    }
  265|       |
  266|      0|    PyObject *eventName = NULL;
  267|      0|    PyObject *eventArgs = NULL;
  268|      0|    PyObject *hooks = NULL;
  269|      0|    PyObject *hook = NULL;
  270|      0|    int res = -1;
  271|       |
  272|      0|    int dtrace = PyDTrace_AUDIT_ENABLED();
  273|       |
  274|       |
  275|      0|    PyObject *exc = _PyErr_GetRaisedException(ts);
  276|       |
  277|       |    /* Initialize event args now */
  278|      0|    if (argFormat && argFormat[0]) {
  ------------------
  |  Branch (278:9): [True: 0, False: 0]
  |  Branch (278:22): [True: 0, False: 0]
  ------------------
  279|      0|        eventArgs = Py_VaBuildValue(argFormat, vargs);
  280|      0|        if (eventArgs && !PyTuple_Check(eventArgs)) {
  ------------------
  |  |   27|      0|                 PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
  |  |  ------------------
  |  |  |  |  760|      0|#define PyType_FastSubclass(type, flag) PyType_HasFeature((type), (flag))
  |  |  ------------------
  ------------------
  |  Branch (280:13): [True: 0, False: 0]
  |  Branch (280:26): [True: 0, False: 0]
  ------------------
  281|      0|            PyObject *argTuple = PyTuple_Pack(1, eventArgs);
  282|      0|            Py_SETREF(eventArgs, argTuple);
  ------------------
  |  |  354|      0|    do { \
  |  |  355|      0|        _Py_TYPEOF(&(dst)) _tmp_dst_ptr = &(dst); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  356|      0|        _Py_TYPEOF(dst) _tmp_old_dst = (*_tmp_dst_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  357|      0|        *_tmp_dst_ptr = (src); \
  |  |  358|      0|        Py_DECREF(_tmp_old_dst); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  359|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (359:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  283|      0|        }
  284|      0|    }
  285|      0|    else {
  286|      0|        eventArgs = PyTuple_New(0);
  287|      0|    }
  288|      0|    if (!eventArgs) {
  ------------------
  |  Branch (288:9): [True: 0, False: 0]
  ------------------
  289|      0|        goto exit;
  290|      0|    }
  291|       |
  292|       |    /* Call global hooks
  293|       |     *
  294|       |     * We don't worry about any races on hooks getting added,
  295|       |     * since that would not leave is in an inconsistent state. */
  296|      0|    _Py_AuditHookEntry *e = is->runtime->audit_hooks.head;
  297|      0|    for (; e; e = e->next) {
  ------------------
  |  Branch (297:12): [True: 0, False: 0]
  ------------------
  298|      0|        if (e->hookCFunction(event, eventArgs, e->userData) < 0) {
  ------------------
  |  Branch (298:13): [True: 0, False: 0]
  ------------------
  299|      0|            goto exit;
  300|      0|        }
  301|      0|    }
  302|       |
  303|       |    /* Dtrace USDT point */
  304|      0|    if (dtrace) {
  ------------------
  |  Branch (304:9): [True: 0, False: 0]
  ------------------
  305|      0|        PyDTrace_AUDIT(event, (void *)eventArgs);
  306|      0|    }
  307|       |
  308|       |    /* Call interpreter hooks */
  309|      0|    if (is->audit_hooks) {
  ------------------
  |  Branch (309:9): [True: 0, False: 0]
  ------------------
  310|      0|        eventName = PyUnicode_FromString(event);
  311|      0|        if (!eventName) {
  ------------------
  |  Branch (311:13): [True: 0, False: 0]
  ------------------
  312|      0|            goto exit;
  313|      0|        }
  314|       |
  315|      0|        hooks = PyObject_GetIter(is->audit_hooks);
  316|      0|        if (!hooks) {
  ------------------
  |  Branch (316:13): [True: 0, False: 0]
  ------------------
  317|      0|            goto exit;
  318|      0|        }
  319|       |
  320|       |        /* Disallow tracing in hooks unless explicitly enabled */
  321|      0|        PyThreadState_EnterTracing(ts);
  322|      0|        while ((hook = PyIter_Next(hooks)) != NULL) {
  ------------------
  |  Branch (322:16): [True: 0, False: 0]
  ------------------
  323|      0|            PyObject *o;
  324|      0|            int canTrace = PyObject_GetOptionalAttr(hook, &_Py_ID(__cantrace__), &o);
  ------------------
  |  |  936|      0|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      0|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      0|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|      0|            if (o) {
  ------------------
  |  Branch (325:17): [True: 0, False: 0]
  ------------------
  326|      0|                canTrace = PyObject_IsTrue(o);
  327|      0|                Py_DECREF(o);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|      0|            }
  329|      0|            if (canTrace < 0) {
  ------------------
  |  Branch (329:17): [True: 0, False: 0]
  ------------------
  330|      0|                break;
  331|      0|            }
  332|      0|            if (canTrace) {
  ------------------
  |  Branch (332:17): [True: 0, False: 0]
  ------------------
  333|      0|                PyThreadState_LeaveTracing(ts);
  334|      0|            }
  335|      0|            PyObject* args[2] = {eventName, eventArgs};
  336|      0|            o = _PyObject_VectorcallTstate(ts, hook, args, 2, NULL);
  337|      0|            if (canTrace) {
  ------------------
  |  Branch (337:17): [True: 0, False: 0]
  ------------------
  338|      0|                PyThreadState_EnterTracing(ts);
  339|      0|            }
  340|      0|            if (!o) {
  ------------------
  |  Branch (340:17): [True: 0, False: 0]
  ------------------
  341|      0|                break;
  342|      0|            }
  343|      0|            Py_DECREF(o);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|      0|            Py_CLEAR(hook);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  345|      0|        }
  346|      0|        PyThreadState_LeaveTracing(ts);
  347|      0|        if (_PyErr_Occurred(ts)) {
  ------------------
  |  Branch (347:13): [True: 0, False: 0]
  ------------------
  348|      0|            goto exit;
  349|      0|        }
  350|      0|    }
  351|       |
  352|      0|    res = 0;
  353|       |
  354|      0|exit:
  355|      0|    Py_XDECREF(hook);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|      0|    Py_XDECREF(hooks);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      0|    Py_XDECREF(eventName);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|      0|    Py_XDECREF(eventArgs);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|       |
  360|      0|    if (!res) {
  ------------------
  |  Branch (360:9): [True: 0, False: 0]
  ------------------
  361|      0|        _PyErr_SetRaisedException(ts, exc);
  362|      0|    }
  363|      0|    else {
  364|      0|        assert(_PyErr_Occurred(ts));
  ------------------
  |  Branch (364:9): [True: 0, False: 0]
  ------------------
  365|      0|        Py_XDECREF(exc);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|      0|    }
  367|       |
  368|      0|    return res;
  369|      0|}
sysmodule.c:should_audit:
  232|  30.7k|{
  233|       |    /* interp must not be NULL, but test it just in case for extra safety */
  234|  30.7k|    assert(interp != NULL);
  ------------------
  |  Branch (234:5): [True: 30.7k, False: 0]
  ------------------
  235|  30.7k|    if (!interp) {
  ------------------
  |  Branch (235:9): [True: 0, False: 30.7k]
  ------------------
  236|      0|        return 0;
  237|      0|    }
  238|  30.7k|    return (interp->runtime->audit_hooks.head
  ------------------
  |  Branch (238:13): [True: 0, False: 30.7k]
  ------------------
  239|  30.7k|            || interp->audit_hooks
  ------------------
  |  Branch (239:16): [True: 0, False: 30.7k]
  ------------------
  240|  30.7k|            || PyDTrace_AUDIT_ENABLED());
  ------------------
  |  Branch (240:16): [True: 0, False: 30.7k]
  ------------------
  241|  30.7k|}
sysmodule.c:_clear_preinit_entries:
 3085|      4|{
 3086|      4|    _Py_PreInitEntry current = *optionlist;
 3087|      4|    *optionlist = NULL;
 3088|       |    /* Deallocate the nodes and their contents using the default allocator */
 3089|      4|    while (current != NULL) {
  ------------------
  |  Branch (3089:12): [True: 0, False: 4]
  ------------------
 3090|      0|        _Py_PreInitEntry next = current->next;
 3091|      0|        _PyMem_DefaultRawFree(current->value);
 3092|      0|        _PyMem_DefaultRawFree(current);
 3093|      0|        current = next;
 3094|      0|    }
 3095|      4|}
sysmodule.c:sys_set_flag:
 3492|     88|{
 3493|     88|    assert(pos >= 0 && pos < (Py_ssize_t)(Py_ARRAY_LENGTH(flags_fields) - 1));
  ------------------
  |  Branch (3493:5): [True: 88, False: 0]
  |  Branch (3493:5): [True: 88, False: 0]
  ------------------
 3494|       |
 3495|     88|    PyObject *old_value = PyStructSequence_GET_ITEM(flags, pos);
  ------------------
  |  |   12|     88|#define PyStructSequence_GET_ITEM PyStructSequence_GetItem
  ------------------
 3496|     88|    PyStructSequence_SET_ITEM(flags, pos, Py_NewRef(value));
  ------------------
  |  |   11|     88|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
                  PyStructSequence_SET_ITEM(flags, pos, Py_NewRef(value));
  ------------------
  |  |  550|     88|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|     88|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3497|     88|    Py_XDECREF(old_value);
  ------------------
  |  |  524|     88|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     88|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     88|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3498|     88|}
sysmodule.c:set_flags_from_config:
 3556|      4|{
 3557|      4|    const PyPreConfig *preconfig = &interp->runtime->preconfig;
 3558|      4|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
 3559|       |
 3560|      4|    Py_ssize_t pos = 0;
 3561|      4|#define SetFlagObj(expr) \
 3562|      4|    do { \
 3563|      4|        PyObject *value = (expr); \
 3564|      4|        if (value == NULL) { \
 3565|      4|            return -1; \
 3566|      4|        } \
 3567|      4|        sys_set_flag(flags, pos, value); \
 3568|      4|        Py_DECREF(value); \
 3569|      4|        pos++; \
 3570|      4|    } while (0)
 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
 3572|       |
 3573|      4|    SetFlag(config->parser_debug);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3574|      4|    SetFlag(config->inspect);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3575|      4|    SetFlag(config->interactive);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3576|      4|    SetFlag(config->optimization_level);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3577|      4|    SetFlag(!config->write_bytecode);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3578|      4|    SetFlag(!config->user_site_directory);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3579|      4|    SetFlag(!config->site_import);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3580|      4|    SetFlag(!config->use_environment);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3581|      4|    SetFlag(config->verbose);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3582|      4|    SetFlag(config->bytes_warning);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3583|      4|    SetFlag(config->quiet);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3584|      4|    SetFlag(config->use_hash_seed == 0 || config->hash_seed != 0);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3563:28): [True: 4, False: 0]
  |  |  |  |  |  Branch (3563:28): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3585|      4|    SetFlag(config->isolated);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3586|      4|    SetFlagObj(PyBool_FromLong(config->dev_mode));
  ------------------
  |  | 3562|      4|    do { \
  |  | 3563|      4|        PyObject *value = (expr); \
  |  | 3564|      4|        if (value == NULL) { \
  |  |  ------------------
  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  ------------------
  |  | 3565|      0|            return -1; \
  |  | 3566|      0|        } \
  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  | 3568|      4|        Py_DECREF(value); \
  |  |  ------------------
  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3569|      4|        pos++; \
  |  | 3570|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 3587|      4|    SetFlag(preconfig->utf8_mode);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3588|      4|    SetFlag(config->warn_default_encoding);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3589|      4|    SetFlagObj(PyBool_FromLong(config->safe_path));
  ------------------
  |  | 3562|      4|    do { \
  |  | 3563|      4|        PyObject *value = (expr); \
  |  | 3564|      4|        if (value == NULL) { \
  |  |  ------------------
  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  ------------------
  |  | 3565|      0|            return -1; \
  |  | 3566|      0|        } \
  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  | 3568|      4|        Py_DECREF(value); \
  |  |  ------------------
  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3569|      4|        pos++; \
  |  | 3570|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 3590|      4|    SetFlag(config->int_max_str_digits);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3591|       |#ifdef Py_GIL_DISABLED
 3592|       |    if (config->enable_gil == _PyConfig_GIL_DEFAULT) {
 3593|       |        SetFlagObj(Py_NewRef(Py_None));
 3594|       |    }
 3595|       |    else {
 3596|       |        SetFlag(config->enable_gil);
 3597|       |    }
 3598|       |#else
 3599|      4|    SetFlagObj(PyLong_FromLong(1));
  ------------------
  |  | 3562|      4|    do { \
  |  | 3563|      4|        PyObject *value = (expr); \
  |  | 3564|      4|        if (value == NULL) { \
  |  |  ------------------
  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  ------------------
  |  | 3565|      0|            return -1; \
  |  | 3566|      0|        } \
  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  | 3568|      4|        Py_DECREF(value); \
  |  |  ------------------
  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3569|      4|        pos++; \
  |  | 3570|      4|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  ------------------
  ------------------
 3600|      4|#endif
 3601|      4|    SetFlag(config->thread_inherit_context);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3602|      4|    SetFlag(config->context_aware_warnings);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3603|      4|    SetFlag(config->lazy_imports);
  ------------------
  |  | 3571|      4|#define SetFlag(expr) SetFlagObj(PyLong_FromLong(expr))
  |  |  ------------------
  |  |  |  | 3562|      4|    do { \
  |  |  |  | 3563|      4|        PyObject *value = (expr); \
  |  |  |  | 3564|      4|        if (value == NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3564:13): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  |  | 3565|      0|            return -1; \
  |  |  |  | 3566|      0|        } \
  |  |  |  | 3567|      4|        sys_set_flag(flags, pos, value); \
  |  |  |  | 3568|      4|        Py_DECREF(value); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      4|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3569|      4|        pos++; \
  |  |  |  | 3570|      4|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3570:14): [Folded, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3604|      4|#undef SetFlagObj
 3605|      4|#undef SetFlag
 3606|      4|    return 0;
 3607|      4|}
sysmodule.c:sys_audit_impl:
  568|    336|{
  569|    336|    PyThreadState *tstate = _PyThreadState_GET();
  570|    336|    _Py_EnsureTstateNotNULL(tstate);
  ------------------
  |  |  214|    336|    _Py_EnsureFuncTstateNotNULL(__func__, (tstate))
  ------------------
  571|       |
  572|    336|    if (!should_audit(tstate->interp)) {
  ------------------
  |  Branch (572:9): [True: 336, False: 0]
  ------------------
  573|    336|        Py_RETURN_NONE;
  ------------------
  |  |  628|    336|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|    336|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  574|    336|    }
  575|       |
  576|      0|    int res = _PySys_Audit(tstate, event, "O", args);
  577|      0|    if (res < 0) {
  ------------------
  |  Branch (577:9): [True: 0, False: 0]
  ------------------
  578|      0|        return NULL;
  579|      0|    }
  580|       |
  581|      0|    Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
  582|      0|}
sysmodule.c:get_utf8_unicode:
  927|      4|{
  928|      4|    _Py_DECLARE_STR(utf_8, "utf-8");
  929|      4|    PyObject *ret = &_Py_STR(utf_8);
  ------------------
  |  |  938|      4|     (_Py_SINGLETON(strings.literals._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      4|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      4|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  930|      4|    return Py_NewRef(ret);
  ------------------
  |  |  550|      4|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      4|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      4|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|      4|}
sysmodule.c:sys_getfilesystemencoding_impl:
  955|      4|{
  956|      4|    PyInterpreterState *interp = _PyInterpreterState_GET();
  957|      4|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
  958|       |
  959|      4|    if (wcscmp(config->filesystem_encoding, L"utf-8") == 0) {
  ------------------
  |  Branch (959:9): [True: 4, False: 0]
  ------------------
  960|      4|        return get_utf8_unicode();
  961|      4|    }
  962|       |
  963|      0|    PyObject *u = PyUnicode_FromWideChar(config->filesystem_encoding, -1);
  964|      0|    if (u == NULL) {
  ------------------
  |  Branch (964:9): [True: 0, False: 0]
  ------------------
  965|      0|        return NULL;
  966|      0|    }
  967|      0|    _PyUnicode_InternImmortal(interp, &u);
  968|      0|    return u;
  969|      0|}
sysmodule.c:sys_getfilesystemencodeerrors_impl:
  980|      2|{
  981|      2|    PyInterpreterState *interp = _PyInterpreterState_GET();
  982|      2|    const PyConfig *config = _PyInterpreterState_GetConfig(interp);
  983|      2|    PyObject *u = PyUnicode_FromWideChar(config->filesystem_errors, -1);
  984|      2|    if (u == NULL) {
  ------------------
  |  Branch (984:9): [True: 0, False: 2]
  ------------------
  985|      0|        return NULL;
  986|      0|    }
  987|      2|    _PyUnicode_InternImmortal(interp, &u);
  988|      2|    return u;
  989|      2|}
sysmodule.c:sys__getframe_impl:
 2085|      2|{
 2086|      2|    PyThreadState *tstate = _PyThreadState_GET();
 2087|      2|    _PyInterpreterFrame *frame = tstate->current_frame;
 2088|       |
 2089|      2|    if (frame != NULL) {
  ------------------
  |  Branch (2089:9): [True: 2, False: 0]
  ------------------
 2090|      2|        while (depth > 0) {
  ------------------
  |  Branch (2090:16): [True: 0, False: 2]
  ------------------
 2091|      0|            frame = _PyFrame_GetFirstComplete(frame->previous);
 2092|      0|            if (frame == NULL) {
  ------------------
  |  Branch (2092:17): [True: 0, False: 0]
  ------------------
 2093|      0|                break;
 2094|      0|            }
 2095|      0|            --depth;
 2096|      0|        }
 2097|      2|    }
 2098|      2|    if (frame == NULL) {
  ------------------
  |  Branch (2098:9): [True: 0, False: 2]
  ------------------
 2099|      0|        _PyErr_SetString(tstate, PyExc_ValueError,
 2100|      0|                         "call stack is not deep enough");
 2101|      0|        return NULL;
 2102|      0|    }
 2103|       |
 2104|      2|    PyObject *pyFrame = Py_XNewRef((PyObject *)_PyFrame_GetFrameObject(frame));
  ------------------
  |  |  551|      2|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2105|      2|    if (pyFrame && _PySys_Audit(tstate, "sys._getframe", "(O)", pyFrame) < 0) {
  ------------------
  |  Branch (2105:9): [True: 2, False: 0]
  |  Branch (2105:20): [True: 0, False: 2]
  ------------------
 2106|      0|        Py_DECREF(pyFrame);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2107|      0|        return NULL;
 2108|      0|    }
 2109|      2|    return pyFrame;
 2110|      2|}
sysmodule.c:sys__getframemodulename_impl:
 2589|      2|{
 2590|      2|    if (PySys_Audit("sys._getframemodulename", "i", depth) < 0) {
  ------------------
  |  Branch (2590:9): [True: 0, False: 2]
  ------------------
 2591|      0|        return NULL;
 2592|      0|    }
 2593|      2|    _PyInterpreterFrame *f = _PyThreadState_GET()->current_frame;
 2594|      4|    while (f && (_PyFrame_IsIncomplete(f) || depth-- > 0)) {
  ------------------
  |  Branch (2594:12): [True: 4, False: 0]
  |  Branch (2594:18): [True: 0, False: 4]
  |  Branch (2594:46): [True: 2, False: 2]
  ------------------
 2595|      2|        f = f->previous;
 2596|      2|    }
 2597|      2|    if (f == NULL || PyStackRef_IsNull(f->f_funcobj)) {
  ------------------
  |  |  482|      2|#define PyStackRef_IsNull(ref) ((ref).bits == PyStackRef_NULL_BITS)
  |  |  ------------------
  |  |  |  |  479|      2|#define PyStackRef_NULL_BITS Py_TAG_REFCNT
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      2|#define Py_TAG_REFCNT 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (482:32): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  |  Branch (2597:9): [True: 0, False: 2]
  ------------------
 2598|      0|        Py_RETURN_NONE;
  ------------------
  |  |  628|      0|#  define Py_RETURN_NONE return Py_None
  |  |  ------------------
  |  |  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  |  |  ------------------
  ------------------
 2599|      0|    }
 2600|      2|    PyObject *func = PyStackRef_AsPyObjectBorrow(f->f_funcobj);
 2601|      2|    PyObject *r = PyFunction_GetModule(func);
 2602|      2|    if (!r) {
  ------------------
  |  Branch (2602:9): [True: 0, False: 2]
  ------------------
 2603|      0|        PyErr_Clear();
 2604|      0|        r = Py_None;
  ------------------
  |  |  616|      0|#  define Py_None (&_Py_NoneStruct)
  ------------------
 2605|      0|    }
 2606|      2|    return Py_NewRef(r);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2607|      2|}
sysmodule.c:sys_intern_impl:
 1007|     27|{
 1008|     27|    if (PyUnicode_CheckExact(s)) {
  ------------------
  |  |  104|     27|#define PyUnicode_CheckExact(op) Py_IS_TYPE((op), &PyUnicode_Type)
  |  |  ------------------
  |  |  |  |  215|     27|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|     27|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (215:32): [True: 27, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|     27|        PyInterpreterState *interp = _PyInterpreterState_GET();
 1010|     27|        Py_INCREF(s);
  ------------------
  |  |  310|     27|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|     27|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     27|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|     27|        _PyUnicode_InternMortal(interp, &s);
 1012|     27|        return s;
 1013|     27|    }
 1014|      0|    else {
 1015|      0|        PyErr_Format(PyExc_TypeError,
 1016|      0|                     "can't intern %.400s", Py_TYPE(s)->tp_name);
  ------------------
  |  |  213|      0|#  define Py_TYPE(ob) _Py_TYPE_impl(_PyObject_CAST(ob))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|       |        return NULL;
 1018|      0|    }
 1019|     27|}
sysmodule.c:sys__get_cpu_count_config_impl:
 2618|      2|{
 2619|      2|    const PyConfig *config = _Py_GetConfig();
 2620|      2|    return config->cpu_count;
 2621|      2|}
sysmodule.c:_PySys_SetPreliminaryStderr:
 4230|      2|{
 4231|      2|    PyObject *pstderr = PyFile_NewStdPrinter(fileno(stderr));
 4232|      2|    if (pstderr == NULL) {
  ------------------
  |  Branch (4232:9): [True: 0, False: 2]
  ------------------
 4233|      0|        goto error;
 4234|      0|    }
 4235|      2|    if (PyDict_SetItem(sysdict, &_Py_ID(stderr), pstderr) < 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4235:9): [True: 0, False: 2]
  ------------------
 4236|      0|        goto error;
 4237|      0|    }
 4238|      2|    if (PyDict_SetItemString(sysdict, "__stderr__", pstderr) < 0) {
  ------------------
  |  Branch (4238:9): [True: 0, False: 2]
  ------------------
 4239|      0|        goto error;
 4240|      0|    }
 4241|      2|    Py_DECREF(pstderr);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4242|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4243|       |
 4244|      0|error:
 4245|      0|    Py_XDECREF(pstderr);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4246|      0|    return _PyStatus_ERR("can't set preliminary stderr");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4247|      2|}
sysmodule.c:_PySys_InitCore:
 4004|      2|{
 4005|      2|    PyObject *version_info;
 4006|      2|    int res;
 4007|      2|    PyInterpreterState *interp = tstate->interp;
 4008|       |
 4009|       |    /* stdin/stdout/stderr are set in pylifecycle.c */
 4010|       |
 4011|      2|#define COPY_SYS_ATTR(tokey, fromkey) \
 4012|      2|        SET_SYS(tokey, PyMapping_GetItemString(sysdict, fromkey))
 4013|       |
 4014|      2|    COPY_SYS_ATTR("__displayhook__", "displayhook");
  ------------------
  |  | 4012|      2|        SET_SYS(tokey, PyMapping_GetItemString(sysdict, fromkey))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4015|      2|    COPY_SYS_ATTR("__excepthook__", "excepthook");
  ------------------
  |  | 4012|      2|        SET_SYS(tokey, PyMapping_GetItemString(sysdict, fromkey))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4016|      2|    COPY_SYS_ATTR("__breakpointhook__", "breakpointhook");
  ------------------
  |  | 4012|      2|        SET_SYS(tokey, PyMapping_GetItemString(sysdict, fromkey))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4017|      2|    COPY_SYS_ATTR("__unraisablehook__", "unraisablehook");
  ------------------
  |  | 4012|      2|        SET_SYS(tokey, PyMapping_GetItemString(sysdict, fromkey))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4018|       |
 4019|      2|#undef COPY_SYS_ATTR
 4020|       |
 4021|      2|    SET_SYS_FROM_STRING("version", Py_GetVersion());
  ------------------
  |  | 4000|      2|        SET_SYS(key, PyUnicode_FromString(value))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4022|      2|    SET_SYS("hexversion", PyLong_FromLong(PY_VERSION_HEX));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4023|      2|    SET_SYS("_git", Py_BuildValue("(szz)", "CPython", _Py_gitidentifier(),
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4024|      2|                                  _Py_gitversion()));
 4025|      2|    SET_SYS_FROM_STRING("_framework", _PYTHONFRAMEWORK);
  ------------------
  |  | 4000|      2|        SET_SYS(key, PyUnicode_FromString(value))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4026|      2|    SET_SYS("api_version", PyLong_FromLong(PYTHON_API_VERSION));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4027|      2|    SET_SYS_FROM_STRING("copyright", Py_GetCopyright());
  ------------------
  |  | 4000|      2|        SET_SYS(key, PyUnicode_FromString(value))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4028|      2|    SET_SYS_FROM_STRING("platform", Py_GetPlatform());
  ------------------
  |  | 4000|      2|        SET_SYS(key, PyUnicode_FromString(value))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4029|      2|    SET_SYS("maxsize", PyLong_FromSsize_t(PY_SSIZE_T_MAX));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4030|      2|    SET_SYS("float_info", PyFloat_GetInfo());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4031|      2|    SET_SYS("int_info", PyLong_GetInfo());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4032|       |    /* initialize hash_info */
 4033|      2|    if (_PyStructSequence_InitBuiltin(interp, &Hash_InfoType,
  ------------------
  |  Branch (4033:9): [True: 0, False: 2]
  ------------------
 4034|      2|                                      &hash_info_desc) < 0)
 4035|      0|    {
 4036|      0|        goto type_init_failed;
 4037|      0|    }
 4038|      2|    SET_SYS("hash_info", get_hash_info(tstate));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4039|      2|    SET_SYS("maxunicode", PyLong_FromLong(0x10FFFF));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4040|      2|    SET_SYS("builtin_module_names", list_builtin_module_names());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4041|      2|    SET_SYS("stdlib_module_names", list_stdlib_module_names());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4042|       |#if PY_BIG_ENDIAN
 4043|       |    SET_SYS("byteorder", &_Py_ID(big));
 4044|       |#else
 4045|      2|    SET_SYS("byteorder", &_Py_ID(little));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4046|      2|#endif
 4047|       |
 4048|       |#ifdef MS_COREDLL
 4049|       |    SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule));
 4050|       |    SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString);
 4051|       |#endif
 4052|      2|#ifdef ABIFLAGS
 4053|      2|    SET_SYS_FROM_STRING("abiflags", ABIFLAGS);
  ------------------
  |  | 4000|      2|        SET_SYS(key, PyUnicode_FromString(value))
  |  |  ------------------
  |  |  |  | 3987|      2|    do {                                                   \
  |  |  |  | 3988|      2|        PyObject *v = (value);                             \
  |  |  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3990|      0|            goto err_occurred;                             \
  |  |  |  | 3991|      0|        }                                                  \
  |  |  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  |  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  | 3995|      0|            goto err_occurred;                             \
  |  |  |  | 3996|      0|        }                                                  \
  |  |  |  | 3997|      2|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4054|      2|#endif
 4055|       |
 4056|      2|#define ENSURE_INFO_TYPE(TYPE, DESC) \
 4057|      2|    do { \
 4058|      2|        if (_PyStructSequence_InitBuiltinWithFlags( \
 4059|      2|                interp, &TYPE, &DESC, Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { \
 4060|      2|            goto type_init_failed; \
 4061|      2|        } \
 4062|      2|    } while (0)
 4063|       |
 4064|       |    /* version_info */
 4065|      2|    ENSURE_INFO_TYPE(VersionInfoType, version_info_desc);
  ------------------
  |  | 4057|      2|    do { \
  |  | 4058|      2|        if (_PyStructSequence_InitBuiltinWithFlags( \
  |  |  ------------------
  |  |  |  Branch (4058:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 4059|      2|                interp, &TYPE, &DESC, Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { \
  |  |  ------------------
  |  |  |  |  497|      2|#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
  |  |  ------------------
  |  | 4060|      0|            goto type_init_failed; \
  |  | 4061|      0|        } \
  |  | 4062|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4062:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4066|      2|    version_info = make_version_info(tstate);
 4067|      2|    SET_SYS("version_info", version_info);
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4068|       |
 4069|       |    /* implementation */
 4070|      2|    SET_SYS("implementation", make_impl_info(version_info));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4071|       |
 4072|       |    // sys.flags: updated later by _PySys_UpdateConfig()
 4073|      2|    ENSURE_INFO_TYPE(FlagsType, flags_desc);
  ------------------
  |  | 4057|      2|    do { \
  |  | 4058|      2|        if (_PyStructSequence_InitBuiltinWithFlags( \
  |  |  ------------------
  |  |  |  Branch (4058:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 4059|      2|                interp, &TYPE, &DESC, Py_TPFLAGS_DISALLOW_INSTANTIATION) < 0) { \
  |  |  ------------------
  |  |  |  |  497|      2|#define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
  |  |  ------------------
  |  | 4060|      0|            goto type_init_failed; \
  |  | 4061|      0|        } \
  |  | 4062|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (4062:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4074|      2|    SET_SYS("flags", make_flags(tstate->interp));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4075|       |
 4076|       |#if defined(MS_WINDOWS)
 4077|       |    /* getwindowsversion */
 4078|       |    ENSURE_INFO_TYPE(WindowsVersionType, windows_version_desc);
 4079|       |
 4080|       |    SET_SYS_FROM_STRING("_vpath", VPATH);
 4081|       |#endif
 4082|       |
 4083|      2|#undef ENSURE_INFO_TYPE
 4084|       |
 4085|       |    /* float repr style: 0.03 (short) vs 0.029999999999999999 (legacy) */
 4086|      2|#if _PY_SHORT_FLOAT_REPR == 1
 4087|      2|    SET_SYS("float_repr_style", &_Py_ID(short));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4088|       |#else
 4089|       |    SET_SYS("float_repr_style", &_Py_ID(legacy));
 4090|       |#endif
 4091|       |
 4092|      2|    SET_SYS("thread_info", PyThread_GetInfo());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4093|       |
 4094|      2|    SET_SYS("abi_info", make_abi_info());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4095|       |
 4096|       |    /* initialize asyncgen_hooks */
 4097|      2|    if (_PyStructSequence_InitBuiltin(interp, &AsyncGenHooksType,
  ------------------
  |  Branch (4097:9): [True: 0, False: 2]
  ------------------
 4098|      2|                                      &asyncgen_hooks_desc) < 0)
 4099|      0|    {
 4100|      0|        goto type_init_failed;
 4101|      0|    }
 4102|       |
 4103|       |#ifdef __EMSCRIPTEN__
 4104|       |    if (EmscriptenInfoType == NULL) {
 4105|       |        EmscriptenInfoType = PyStructSequence_NewType(&emscripten_info_desc);
 4106|       |        if (EmscriptenInfoType == NULL) {
 4107|       |            goto type_init_failed;
 4108|       |        }
 4109|       |    }
 4110|       |    SET_SYS("_emscripten_info", make_emscripten_info());
 4111|       |#endif
 4112|       |
 4113|       |    /* adding sys.path_hooks and sys.path_importer_cache */
 4114|      2|    SET_SYS("meta_path", PyList_New(0));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4115|      2|    SET_SYS("path_importer_cache", PyDict_New());
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4116|      2|    SET_SYS("path_hooks", PyList_New(0));
  ------------------
  |  | 3987|      2|    do {                                                   \
  |  | 3988|      2|        PyObject *v = (value);                             \
  |  | 3989|      2|        if (v == NULL) {                                   \
  |  |  ------------------
  |  |  |  Branch (3989:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3990|      0|            goto err_occurred;                             \
  |  | 3991|      0|        }                                                  \
  |  | 3992|      2|        res = PyDict_SetItemString(sysdict, key, v);       \
  |  | 3993|      2|        Py_DECREF(v);                                      \
  |  |  ------------------
  |  |  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3994|      2|        if (res < 0) {                                     \
  |  |  ------------------
  |  |  |  Branch (3994:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 3995|      0|            goto err_occurred;                             \
  |  | 3996|      0|        }                                                  \
  |  | 3997|      2|    } while (0)
  |  |  ------------------
  |  |  |  Branch (3997:14): [Folded, False: 2]
  |  |  ------------------
  ------------------
 4117|       |
 4118|      2|    if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (4118:9): [True: 0, False: 2]
  ------------------
 4119|      0|        goto err_occurred;
 4120|      0|    }
 4121|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
 4122|       |
 4123|      0|type_init_failed:
 4124|      0|    return _PyStatus_ERR("failed to initialize a type");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4125|       |
 4126|      0|err_occurred:
 4127|      0|    return _PyStatus_ERR("can't initialize sys module");
  ------------------
  |  |   27|      0|    (PyStatus){ \
  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  ------------------
  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  ------------------
  |  |   30|      0|        .err_msg = (ERR_MSG)}
  ------------------
 4128|      2|}
sysmodule.c:get_hash_info:
 1570|      2|{
 1571|      2|    PyObject *hash_info;
 1572|      2|    int field = 0;
 1573|      2|    PyHash_FuncDef *hashfunc;
 1574|      2|    hash_info = PyStructSequence_New(&Hash_InfoType);
 1575|      2|    if (hash_info == NULL) {
  ------------------
  |  Branch (1575:9): [True: 0, False: 2]
  ------------------
 1576|      0|        return NULL;
 1577|      0|    }
 1578|      2|    hashfunc = PyHash_GetFuncDef();
 1579|       |
 1580|      2|#define SET_HASH_INFO_ITEM(CALL)                             \
 1581|      2|    do {                                                     \
 1582|      2|        PyObject *item = (CALL);                             \
 1583|      2|        if (item == NULL) {                                  \
 1584|      2|            Py_CLEAR(hash_info);                             \
 1585|      2|            return NULL;                                     \
 1586|      2|        }                                                    \
 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
 1588|      2|    } while(0)
 1589|       |
 1590|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(8 * sizeof(Py_hash_t)));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1591|      2|    SET_HASH_INFO_ITEM(PyLong_FromSsize_t(PyHASH_MODULUS));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1592|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(PyHASH_INF));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1593|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(0));  // This is no longer used
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1594|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(PyHASH_IMAG));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1595|      2|    SET_HASH_INFO_ITEM(PyUnicode_FromString(hashfunc->name));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1596|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(hashfunc->hash_bits));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1597|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(hashfunc->seed_bits));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1598|      2|    SET_HASH_INFO_ITEM(PyLong_FromLong(Py_HASH_CUTOFF));
  ------------------
  |  | 1581|      2|    do {                                                     \
  |  | 1582|      2|        PyObject *item = (CALL);                             \
  |  | 1583|      2|        if (item == NULL) {                                  \
  |  |  ------------------
  |  |  |  Branch (1583:13): [True: 0, False: 2]
  |  |  ------------------
  |  | 1584|      0|            Py_CLEAR(hash_info);                             \
  |  |  ------------------
  |  |  |  |  484|      0|    do { \
  |  |  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  |  |  ------------------
  |  |  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  |  |  ------------------
  |  |  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  490|      0|        } \
  |  |  |  |  491|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1585|      0|            return NULL;                                     \
  |  | 1586|      0|        }                                                    \
  |  | 1587|      2|        PyStructSequence_SET_ITEM(hash_info, field++, item); \
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  |  | 1588|      2|    } while(0)
  |  |  ------------------
  |  |  |  Branch (1588:13): [Folded, False: 2]
  |  |  ------------------
  ------------------
 1599|       |
 1600|      2|#undef SET_HASH_INFO_ITEM
 1601|       |
 1602|      2|    return hash_info;
 1603|      2|}
sysmodule.c:list_builtin_module_names:
 2973|      2|{
 2974|      2|    PyObject *list = _PyImport_GetBuiltinModuleNames();
 2975|      2|    if (list == NULL) {
  ------------------
  |  Branch (2975:9): [True: 0, False: 2]
  ------------------
 2976|      0|        return NULL;
 2977|      0|    }
 2978|      2|    if (PyList_Sort(list) != 0) {
  ------------------
  |  Branch (2978:9): [True: 0, False: 2]
  ------------------
 2979|      0|        goto error;
 2980|      0|    }
 2981|      2|    PyObject *tuple = PyList_AsTuple(list);
 2982|      2|    Py_DECREF(list);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2983|      2|    return tuple;
 2984|       |
 2985|      0|error:
 2986|      0|    Py_DECREF(list);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2987|       |    return NULL;
 2988|      2|}
sysmodule.c:list_stdlib_module_names:
 2993|      2|{
 2994|      2|    Py_ssize_t len = Py_ARRAY_LENGTH(_Py_stdlib_module_names);
  ------------------
  |  |  221|      2|    (sizeof(array) / sizeof((array)[0]))
  ------------------
 2995|      2|    PyObject *names = PyTuple_New(len);
 2996|      2|    if (names == NULL) {
  ------------------
  |  Branch (2996:9): [True: 0, False: 2]
  ------------------
 2997|      0|        return NULL;
 2998|      0|    }
 2999|       |
 3000|    596|    for (Py_ssize_t i = 0; i < len; i++) {
  ------------------
  |  Branch (3000:28): [True: 594, False: 2]
  ------------------
 3001|    594|        PyObject *name = PyUnicode_FromString(_Py_stdlib_module_names[i]);
 3002|    594|        if (name == NULL) {
  ------------------
  |  Branch (3002:13): [True: 0, False: 594]
  ------------------
 3003|      0|            Py_DECREF(names);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3004|      0|            return NULL;
 3005|      0|        }
 3006|    594|        PyTuple_SET_ITEM(names, i, name);
  ------------------
  |  |   40|    594|    PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    594|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    594|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   PyTuple_SET_ITEM(_PyObject_CAST(op), (index), _PyObject_CAST(value))
  |  |  ------------------
  |  |  |  |  171|    594|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    594|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3007|    594|    }
 3008|       |
 3009|      2|    PyObject *set = PyObject_CallFunction((PyObject *)&PyFrozenSet_Type,
 3010|      2|                                          "(O)", names);
 3011|      2|    Py_DECREF(names);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3012|      2|    return set;
 3013|      2|}
sysmodule.c:make_version_info:
 3651|      2|{
 3652|      2|    PyObject *version_info;
 3653|      2|    char *s;
 3654|      2|    int pos = 0;
 3655|       |
 3656|      2|    version_info = PyStructSequence_New(&VersionInfoType);
 3657|      2|    if (version_info == NULL) {
  ------------------
  |  Branch (3657:9): [True: 0, False: 2]
  ------------------
 3658|      0|        return NULL;
 3659|      0|    }
 3660|       |
 3661|       |    /*
 3662|       |     * These release level checks are mutually exclusive and cover
 3663|       |     * the field, so don't get too fancy with the pre-processor!
 3664|       |     */
 3665|      2|#if PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_ALPHA
 3666|      2|    s = "alpha";
 3667|       |#elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_BETA
 3668|       |    s = "beta";
 3669|       |#elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_GAMMA
 3670|       |    s = "candidate";
 3671|       |#elif PY_RELEASE_LEVEL == PY_RELEASE_LEVEL_FINAL
 3672|       |    s = "final";
 3673|       |#endif
 3674|       |
 3675|      2|#define SetIntItem(flag) \
 3676|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyLong_FromLong(flag))
 3677|      2|#define SetStrItem(flag) \
 3678|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyUnicode_FromString(flag))
 3679|       |
 3680|      2|    SetIntItem(PY_MAJOR_VERSION);
  ------------------
  |  | 3676|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyLong_FromLong(flag))
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  ------------------
 3681|      2|    SetIntItem(PY_MINOR_VERSION);
  ------------------
  |  | 3676|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyLong_FromLong(flag))
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  ------------------
 3682|      2|    SetIntItem(PY_MICRO_VERSION);
  ------------------
  |  | 3676|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyLong_FromLong(flag))
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  ------------------
 3683|      2|    SetStrItem(s);
  ------------------
  |  | 3678|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyUnicode_FromString(flag))
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  ------------------
 3684|      2|    SetIntItem(PY_RELEASE_SERIAL);
  ------------------
  |  | 3676|      2|    PyStructSequence_SET_ITEM(version_info, pos++, PyLong_FromLong(flag))
  |  |  ------------------
  |  |  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  |  |  ------------------
  ------------------
 3685|      2|#undef SetIntItem
 3686|      2|#undef SetStrItem
 3687|       |
 3688|      2|    if (_PyErr_Occurred(tstate)) {
  ------------------
  |  Branch (3688:9): [True: 0, False: 2]
  ------------------
 3689|      0|        Py_CLEAR(version_info);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3690|      0|        return NULL;
 3691|      0|    }
 3692|      2|    return version_info;
 3693|      2|}
sysmodule.c:make_impl_info:
 3715|      2|{
 3716|      2|    int res;
 3717|      2|    PyObject *impl_info, *value, *ns;
 3718|       |
 3719|      2|    impl_info = PyDict_New();
 3720|      2|    if (impl_info == NULL)
  ------------------
  |  Branch (3720:9): [True: 0, False: 2]
  ------------------
 3721|      0|        return NULL;
 3722|       |
 3723|       |    /* populate the dict */
 3724|       |
 3725|      2|    value = PyUnicode_FromString(_PySys_ImplName);
 3726|      2|    if (value == NULL)
  ------------------
  |  Branch (3726:9): [True: 0, False: 2]
  ------------------
 3727|      0|        goto error;
 3728|      2|    res = PyDict_SetItemString(impl_info, "name", value);
 3729|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3730|      2|    if (res < 0)
  ------------------
  |  Branch (3730:9): [True: 0, False: 2]
  ------------------
 3731|      0|        goto error;
 3732|       |
 3733|      2|    value = _PySys_ImplCacheTag
  ------------------
  |  Branch (3733:13): [True: 2, False: 0]
  ------------------
 3734|      2|        ? PyUnicode_FromString(_PySys_ImplCacheTag)
 3735|      2|        : Py_NewRef(Py_None);
  ------------------
  |  |  550|      2|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3736|      2|    if (value == NULL) {
  ------------------
  |  Branch (3736:9): [True: 0, False: 2]
  ------------------
 3737|      0|        goto error;
 3738|      0|    }
 3739|      2|    res = PyDict_SetItemString(impl_info, "cache_tag", value);
 3740|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3741|      2|    if (res < 0)
  ------------------
  |  Branch (3741:9): [True: 0, False: 2]
  ------------------
 3742|      0|        goto error;
 3743|       |
 3744|      2|    res = PyDict_SetItemString(impl_info, "version", version_info);
 3745|      2|    if (res < 0)
  ------------------
  |  Branch (3745:9): [True: 0, False: 2]
  ------------------
 3746|      0|        goto error;
 3747|       |
 3748|      2|    value = PyLong_FromLong(PY_VERSION_HEX);
  ------------------
  |  |   43|      2|#define PY_VERSION_HEX _Py_PACK_FULL_VERSION( \
  |  |  ------------------
  |  |  |  |   34|      2|#define _Py_PACK_FULL_VERSION(X, Y, Z, LEVEL, SERIAL) ( \
  |  |  |  |   35|      2|    (((X) & 0xff) << 24) |                              \
  |  |  |  |   36|      2|    (((Y) & 0xff) << 16) |                              \
  |  |  |  |   37|      2|    (((Z) & 0xff) << 8) |                               \
  |  |  |  |   38|      2|    (((LEVEL) & 0xf) << 4) |                            \
  |  |  |  |   39|      2|    (((SERIAL) & 0xf) << 0))
  |  |  ------------------
  |  |   44|      2|    PY_MAJOR_VERSION,                         \
  |  |   45|      2|    PY_MINOR_VERSION,                         \
  |  |   46|      2|    PY_MICRO_VERSION,                         \
  |  |   47|      2|    PY_RELEASE_LEVEL,                         \
  |  |   48|      2|    PY_RELEASE_SERIAL)
  ------------------
 3749|      2|    if (value == NULL)
  ------------------
  |  Branch (3749:9): [True: 0, False: 2]
  ------------------
 3750|      0|        goto error;
 3751|      2|    res = PyDict_SetItemString(impl_info, "hexversion", value);
 3752|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3753|      2|    if (res < 0)
  ------------------
  |  Branch (3753:9): [True: 0, False: 2]
  ------------------
 3754|      0|        goto error;
 3755|       |
 3756|      2|#ifdef MULTIARCH
 3757|      2|    value = PyUnicode_FromString(MULTIARCH);
 3758|      2|    if (value == NULL)
  ------------------
  |  Branch (3758:9): [True: 0, False: 2]
  ------------------
 3759|      0|        goto error;
 3760|      2|    res = PyDict_SetItemString(impl_info, "_multiarch", value);
 3761|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3762|      2|    if (res < 0)
  ------------------
  |  Branch (3762:9): [True: 0, False: 2]
  ------------------
 3763|      0|        goto error;
 3764|      2|#endif
 3765|       |
 3766|       |    // PEP-734
 3767|       |#if defined(__wasi__) || defined(__EMSCRIPTEN__)
 3768|       |    // It is not enabled on WASM builds just yet
 3769|       |    value = Py_False;
 3770|       |#else
 3771|      2|    value = Py_True;
  ------------------
  |  |   26|      2|#  define Py_True _PyObject_CAST(&_Py_TrueStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3772|      2|#endif
 3773|      2|    res = PyDict_SetItemString(impl_info, "supports_isolated_interpreters", value);
 3774|      2|    if (res < 0) {
  ------------------
  |  Branch (3774:9): [True: 0, False: 2]
  ------------------
 3775|      0|        goto error;
 3776|      0|    }
 3777|       |
 3778|       |    /* dict ready */
 3779|       |
 3780|      2|    ns = _PyNamespace_New(impl_info);
 3781|      2|    Py_DECREF(impl_info);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3782|      2|    return ns;
 3783|       |
 3784|      0|error:
 3785|      0|    Py_CLEAR(impl_info);
  ------------------
  |  |  484|      0|    do { \
  |  |  485|      0|        _Py_TYPEOF(&(op)) _tmp_op_ptr = &(op); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  486|      0|        _Py_TYPEOF(op) _tmp_old_op = (*_tmp_op_ptr); \
  |  |  ------------------
  |  |  |  |  552|      0|#  define _Py_TYPEOF(expr) __typeof__(expr)
  |  |  ------------------
  |  |  487|      0|        if (_tmp_old_op != _Py_NULL) { \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  |  Branch (487:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  488|      0|            *_tmp_op_ptr = _Py_NULL; \
  |  |  ------------------
  |  |  |  |   57|      0|#  define _Py_NULL NULL
  |  |  ------------------
  |  |  489|      0|            Py_DECREF(_tmp_old_op); \
  |  |  ------------------
  |  |  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  490|      0|        } \
  |  |  491|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (491:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 3786|       |    return NULL;
 3787|      2|}
sysmodule.c:make_flags:
 3612|      2|{
 3613|      2|    PyObject *flags = PyStructSequence_New(&FlagsType);
 3614|      2|    if (flags == NULL) {
  ------------------
  |  Branch (3614:9): [True: 0, False: 2]
  ------------------
 3615|      0|        return NULL;
 3616|      0|    }
 3617|       |
 3618|      2|    if (set_flags_from_config(interp, flags) < 0) {
  ------------------
  |  Branch (3618:9): [True: 0, False: 2]
  ------------------
 3619|      0|        Py_DECREF(flags);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3620|      0|        return NULL;
 3621|      0|    }
 3622|      2|    return flags;
 3623|      2|}
sysmodule.c:make_abi_info:
 3792|      2|{
 3793|       |    // New entries should be added when needed for a supported platform,
 3794|       |    // or by core dev consensus for enabling an unsupported one.
 3795|       |
 3796|      2|    PyObject *value;
 3797|      2|    PyObject *abi_info = PyDict_New();
 3798|      2|    if (abi_info == NULL) {
  ------------------
  |  Branch (3798:9): [True: 0, False: 2]
  ------------------
 3799|      0|        return NULL;
 3800|      0|    }
 3801|       |
 3802|      2|    value = PyLong_FromLong(sizeof(void *) * 8);
 3803|      2|    if (value == NULL) {
  ------------------
  |  Branch (3803:9): [True: 0, False: 2]
  ------------------
 3804|      0|        goto error;
 3805|      0|    }
 3806|      2|    if (PyDict_SetItem(abi_info, &_Py_ID(pointer_bits), value) < 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3806:9): [True: 0, False: 2]
  ------------------
 3807|      0|        goto error;
 3808|      0|    }
 3809|      2|    Py_DECREF(value);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3810|       |
 3811|       |#ifdef Py_GIL_DISABLED
 3812|       |    value = Py_True;
 3813|       |#else
 3814|      2|    value = Py_False;
  ------------------
  |  |   25|      2|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3815|      2|#endif
 3816|      2|    if (PyDict_SetItem(abi_info, &_Py_ID(free_threaded), value) < 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3816:9): [True: 0, False: 2]
  ------------------
 3817|      0|        goto error;
 3818|      0|    }
 3819|       |
 3820|       |#ifdef Py_DEBUG
 3821|       |    value = Py_True;
 3822|       |#else
 3823|      2|    value = Py_False;
  ------------------
  |  |   25|      2|#  define Py_False _PyObject_CAST(&_Py_FalseStruct)
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3824|      2|#endif
 3825|      2|    if (PyDict_SetItem(abi_info, &_Py_ID(debug), value) < 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3825:9): [True: 0, False: 2]
  ------------------
 3826|      0|        goto error;
 3827|      0|    }
 3828|       |
 3829|       |#if PY_BIG_ENDIAN
 3830|       |    value = &_Py_ID(big);
 3831|       |#else
 3832|      2|    value = &_Py_ID(little);
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3833|      2|#endif
 3834|      2|    if (PyDict_SetItem(abi_info, &_Py_ID(byteorder), value) < 0) {
  ------------------
  |  |  936|      2|     (_Py_SINGLETON(strings.identifiers._py_ ## NAME._ascii.ob_base))
  |  |  ------------------
  |  |  |  |   18|      2|    _Py_GLOBAL_OBJECT(singletons.NAME)
  |  |  |  |  ------------------
  |  |  |  |  |  |   16|      2|    _PyRuntime.static_objects.NAME
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3834:9): [True: 0, False: 2]
  ------------------
 3835|      0|        goto error;
 3836|      0|    }
 3837|       |
 3838|      2|    PyObject *ns = _PyNamespace_New(abi_info);
 3839|      2|    Py_DECREF(abi_info);
  ------------------
  |  |  430|      2|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      2|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3840|      2|    return ns;
 3841|       |
 3842|      0|error:
 3843|      0|    Py_DECREF(abi_info);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3844|      0|    Py_XDECREF(value);
  ------------------
  |  |  524|      0|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3845|       |    return NULL;
 3846|      2|}

PyThread_init_thread:
   49|      6|{
   50|      6|    if (initialized) {
  ------------------
  |  |   45|      6|#define initialized _PyRuntime.threads.initialized
  |  |  ------------------
  |  |  |  Branch (45:21): [True: 4, False: 2]
  |  |  ------------------
  ------------------
   51|      4|        return;
   52|      4|    }
   53|      2|    initialized = 1;
  ------------------
  |  |   45|      2|#define initialized _PyRuntime.threads.initialized
  ------------------
   54|      2|    PyThread__init_thread();
   55|      2|}
PyThread_allocate_lock:
   81|     99|{
   82|     99|    if (!initialized) {
  ------------------
  |  |   45|     99|#define initialized _PyRuntime.threads.initialized
  ------------------
  |  Branch (82:9): [True: 0, False: 99]
  ------------------
   83|      0|        PyThread_init_thread();
   84|      0|    }
   85|       |
   86|     99|    PyMutex *lock = (PyMutex *)PyMem_RawMalloc(sizeof(PyMutex));
   87|     99|    if (lock) {
  ------------------
  |  Branch (87:9): [True: 99, False: 0]
  ------------------
   88|     99|        *lock = (PyMutex){0};
   89|     99|    }
   90|       |
   91|     99|    return (PyThread_type_lock)lock;
   92|     99|}
PyThread_free_lock:
   96|     93|{
   97|     93|    PyMem_RawFree(lock);
   98|     93|}
PyThread_acquire_lock_timed:
  103|  97.2k|{
  104|  97.2k|    PyTime_t timeout;  // relative timeout
  105|  97.2k|    if (microseconds >= 0) {
  ------------------
  |  Branch (105:9): [True: 97.2k, False: 0]
  ------------------
  106|       |        // bpo-41710: PyThread_acquire_lock_timed() cannot report timeout
  107|       |        // overflow to the caller, so clamp the timeout to
  108|       |        // [PyTime_MIN, PyTime_MAX].
  109|       |        //
  110|       |        // PyTime_MAX nanoseconds is around 292.3 years.
  111|       |        //
  112|       |        // _thread.Lock.acquire() and _thread.RLock.acquire() raise an
  113|       |        // OverflowError if microseconds is greater than PY_TIMEOUT_MAX.
  114|  97.2k|        timeout = _PyTime_FromMicrosecondsClamp(microseconds);
  115|  97.2k|    }
  116|      0|    else {
  117|      0|        timeout = -1;
  118|      0|    }
  119|       |
  120|  97.2k|    _PyLockFlags flags = _Py_LOCK_DONT_DETACH;
  121|  97.2k|    if (intr_flag) {
  ------------------
  |  Branch (121:9): [True: 0, False: 97.2k]
  ------------------
  122|      0|        flags |= _PY_FAIL_IF_INTERRUPTED;
  123|      0|    }
  124|       |
  125|  97.2k|    return _PyMutex_LockTimed((PyMutex *)lock, timeout, flags);
  126|  97.2k|}
PyThread_release_lock:
  130|  97.2k|{
  131|  97.2k|    PyMutex_Unlock((PyMutex *)lock);
  ------------------
  |  |   70|  97.2k|#define PyMutex_Unlock _PyMutex_Unlock
  ------------------
  132|  97.2k|}
PyThread_acquire_lock:
  143|  97.2k|{
  144|  97.2k|    return PyThread_acquire_lock_timed(lock, waitflag ? -1 : 0, /*intr_flag=*/0);
  ------------------
  |  Branch (144:46): [True: 0, False: 97.2k]
  ------------------
  145|  97.2k|}
PyThread_GetInfo:
  310|      2|{
  311|      2|    PyObject *threadinfo, *value;
  312|      2|    int pos = 0;
  313|      2|#if (defined(_POSIX_THREADS) && defined(HAVE_CONFSTR) \
  314|      2|     && defined(_CS_GNU_LIBPTHREAD_VERSION))
  315|      2|    char buffer[255];
  316|      2|    int len;
  317|      2|#endif
  318|       |
  319|      2|    PyInterpreterState *interp = _PyInterpreterState_GET();
  320|      2|    if (_PyStructSequence_InitBuiltin(interp, &ThreadInfoType, &threadinfo_desc) < 0) {
  ------------------
  |  Branch (320:9): [True: 0, False: 2]
  ------------------
  321|      0|        return NULL;
  322|      0|    }
  323|       |
  324|      2|    threadinfo = PyStructSequence_New(&ThreadInfoType);
  325|      2|    if (threadinfo == NULL)
  ------------------
  |  Branch (325:9): [True: 0, False: 2]
  ------------------
  326|      0|        return NULL;
  327|       |
  328|      2|    value = PyUnicode_FromString(PYTHREAD_NAME);
  ------------------
  |  |   64|      2|#     define PYTHREAD_NAME "pthread"
  ------------------
  329|      2|    if (value == NULL) {
  ------------------
  |  Branch (329:9): [True: 0, False: 2]
  ------------------
  330|      0|        Py_DECREF(threadinfo);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|      0|        return NULL;
  332|      0|    }
  333|      2|    PyStructSequence_SET_ITEM(threadinfo, pos++, value);
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
  334|       |
  335|       |#ifdef HAVE_PTHREAD_STUBS
  336|       |    value = Py_NewRef(Py_None);
  337|       |#else
  338|      2|    value = PyUnicode_FromString("pymutex");
  339|      2|    if (value == NULL) {
  ------------------
  |  Branch (339:9): [True: 0, False: 2]
  ------------------
  340|      0|        Py_DECREF(threadinfo);
  ------------------
  |  |  430|      0|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|      0|        return NULL;
  342|      0|    }
  343|      2|#endif
  344|      2|    PyStructSequence_SET_ITEM(threadinfo, pos++, value);
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
  345|       |
  346|      2|#if (defined(_POSIX_THREADS) && defined(HAVE_CONFSTR) \
  347|      2|     && defined(_CS_GNU_LIBPTHREAD_VERSION))
  348|      2|    value = NULL;
  349|      2|    len = confstr(_CS_GNU_LIBPTHREAD_VERSION, buffer, sizeof(buffer));
  350|      2|    if (1 < len && (size_t)len < sizeof(buffer)) {
  ------------------
  |  Branch (350:9): [True: 2, False: 0]
  |  Branch (350:20): [True: 2, False: 0]
  ------------------
  351|      2|        value = PyUnicode_DecodeFSDefaultAndSize(buffer, len-1);
  352|      2|        if (value == NULL)
  ------------------
  |  Branch (352:13): [True: 0, False: 2]
  ------------------
  353|      0|            PyErr_Clear();
  354|      2|    }
  355|      2|    if (value == NULL)
  ------------------
  |  Branch (355:9): [True: 0, False: 2]
  ------------------
  356|      0|#endif
  357|      0|    {
  358|      0|        value = Py_NewRef(Py_None);
  ------------------
  |  |  550|      0|#  define Py_NewRef(obj) _Py_NewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|      0|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      0|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|      0|    }
  360|      2|    PyStructSequence_SET_ITEM(threadinfo, pos++, value);
  ------------------
  |  |   11|      2|#define PyStructSequence_SET_ITEM PyStructSequence_SetItem
  ------------------
  361|      2|    return threadinfo;
  362|      2|}

_PyThread_cond_init:
  142|      4|{
  143|      4|    return pthread_cond_init(cond, condattr_monotonic);
  ------------------
  |  |  123|      4|#define condattr_monotonic _PyRuntime.threads._condattr_monotonic.ptr
  ------------------
  144|      4|}
PyThread_get_thread_ident_ex:
  364|  1.11M|PyThread_get_thread_ident_ex(void) {
  365|  1.11M|    volatile pthread_t threadid;
  366|  1.11M|    if (!initialized)
  ------------------
  |  |   45|  1.11M|#define initialized _PyRuntime.threads.initialized
  ------------------
  |  Branch (366:9): [True: 2, False: 1.11M]
  ------------------
  367|      2|        PyThread_init_thread();
  368|  1.11M|    threadid = pthread_self();
  369|  1.11M|    return _pthread_t_to_ident(threadid);
  370|  1.11M|}
PyThread_get_thread_ident:
  374|  1.01M|{
  375|  1.01M|    return (unsigned long) PyThread_get_thread_ident_ex();
  376|  1.01M|}
PyThread_get_thread_native_id:
  381|      2|{
  382|      2|    if (!initialized)
  ------------------
  |  |   45|      2|#define initialized _PyRuntime.threads.initialized
  ------------------
  |  Branch (382:9): [True: 0, False: 2]
  ------------------
  383|      0|        PyThread_init_thread();
  384|       |#ifdef __APPLE__
  385|       |    uint64_t native_id;
  386|       |    (void) pthread_threadid_np(NULL, &native_id);
  387|       |#elif defined(HAVE_GETTID)
  388|       |    pid_t native_id;
  389|      2|    native_id = gettid();
  390|       |#elif defined(__linux__)
  391|       |    pid_t native_id;
  392|       |    native_id = syscall(SYS_gettid);
  393|       |#elif defined(__FreeBSD__)
  394|       |    int native_id;
  395|       |    native_id = pthread_getthreadid_np();
  396|       |#elif defined(__FreeBSD_kernel__)
  397|       |    long native_id;
  398|       |    syscall(SYS_thr_self, &native_id);
  399|       |#elif defined(__OpenBSD__)
  400|       |    pid_t native_id;
  401|       |    native_id = getthrid();
  402|       |#elif defined(_AIX)
  403|       |    tid_t native_id;
  404|       |    native_id = thread_self();
  405|       |#elif defined(__NetBSD__)
  406|       |    lwpid_t native_id;
  407|       |    native_id = _lwp_self();
  408|       |#elif defined(__DragonFly__)
  409|       |    // lwp_gettid() is only unique within a process, so combine it with the pid.
  410|       |    unsigned long native_id = (unsigned long)getpid() << 32 | lwp_gettid();
  411|       |#elif defined(__sun__) && SIZEOF_LONG >= 8
  412|       |    unsigned long native_id = (unsigned long)getpid() << 32 | thr_self();
  413|       |#endif
  414|      2|    return (unsigned long) native_id;
  415|      2|}
PyThread_tss_create:
  579|      2|{
  580|      2|    assert(key != NULL);
  ------------------
  |  Branch (580:5): [True: 2, False: 0]
  ------------------
  581|       |    /* If the key has been created, function is silently skipped. */
  582|      2|    if (key->_is_initialized) {
  ------------------
  |  Branch (582:9): [True: 0, False: 2]
  ------------------
  583|      0|        return 0;
  584|      0|    }
  585|       |
  586|      2|    int fail = pthread_key_create(&(key->_key), NULL);
  587|      2|    if (fail) {
  ------------------
  |  Branch (587:9): [True: 0, False: 2]
  ------------------
  588|      0|        return -1;
  589|      0|    }
  590|      2|    key->_is_initialized = 1;
  591|      2|    return 0;
  592|      2|}
thread.c:PyThread__init_thread:
  199|      2|{
  200|       |    // The library is only initialized once in the process,
  201|       |    // regardless of how many times the Python runtime is initialized.
  202|      2|    static int lib_initialized = 0;
  203|      2|    if (!lib_initialized) {
  ------------------
  |  Branch (203:9): [True: 2, False: 0]
  ------------------
  204|      2|        lib_initialized = 1;
  205|       |#if defined(_AIX) && defined(__GNUC__)
  206|       |        extern void pthread_init(void);
  207|       |        pthread_init();
  208|       |#endif
  209|      2|    }
  210|      2|    init_condattr();
  211|      2|}
thread.c:init_condattr:
  127|      2|{
  128|      2|#ifdef CONDATTR_MONOTONIC
  129|      2|# define ca _PyRuntime.threads._condattr_monotonic.val
  130|       |    // XXX We need to check the return code?
  131|      2|    pthread_condattr_init(&ca);
  ------------------
  |  |  129|      2|# define ca _PyRuntime.threads._condattr_monotonic.val
  ------------------
  132|       |    // XXX We need to run pthread_condattr_destroy() during runtime fini.
  133|      2|    if (pthread_condattr_setclock(&ca, CLOCK_MONOTONIC) == 0) {
  ------------------
  |  |  129|      2|# define ca _PyRuntime.threads._condattr_monotonic.val
  ------------------
  |  Branch (133:9): [True: 2, False: 0]
  ------------------
  134|      2|        condattr_monotonic = &ca;  // Use monotonic clock
  ------------------
  |  |  123|      2|#define condattr_monotonic _PyRuntime.threads._condattr_monotonic.ptr
  ------------------
                      condattr_monotonic = &ca;  // Use monotonic clock
  ------------------
  |  |  129|      2|# define ca _PyRuntime.threads._condattr_monotonic.val
  ------------------
  135|      2|    }
  136|      2|# undef ca
  137|      2|#endif  // CONDATTR_MONOTONIC
  138|      2|}
thread.c:_pthread_t_to_ident:
  308|  1.11M|_pthread_t_to_ident(pthread_t value) {
  309|       |// Cast through an integer type of the same size to avoid sign-extension.
  310|  1.11M|#if SIZEOF_PTHREAD_T == SIZEOF_VOID_P
  311|  1.11M|    return (uintptr_t) value;
  312|       |#elif SIZEOF_PTHREAD_T == SIZEOF_LONG
  313|       |    return (unsigned long) value;
  314|       |#elif SIZEOF_PTHREAD_T == SIZEOF_INT
  315|       |    return (unsigned int) value;
  316|       |#elif SIZEOF_PTHREAD_T == SIZEOF_LONG_LONG
  317|       |    return (unsigned long long) value;
  318|       |#else
  319|       |#error "Unsupported SIZEOF_PTHREAD_T value"
  320|       |#endif
  321|  1.11M|}

_PyTraceBack_FromFrame:
  305|  42.9k|{
  306|  42.9k|    assert(tb_next == NULL || PyTraceBack_Check(tb_next));
  ------------------
  |  Branch (306:5): [True: 40.2k, False: 2.70k]
  |  Branch (306:5): [True: 2.70k, False: 0]
  ------------------
  307|  42.9k|    assert(frame != NULL);
  ------------------
  |  Branch (307:5): [True: 42.9k, False: 0]
  ------------------
  308|  42.9k|    int addr = _PyInterpreterFrame_LASTI(frame->f_frame) * sizeof(_Py_CODEUNIT);
  ------------------
  |  |   19|  42.9k|    ((int)((IF)->instr_ptr - _PyFrame_GetBytecode((IF))))
  ------------------
  309|  42.9k|    return tb_create_raw((PyTracebackObject *)tb_next, frame, addr, -1);
  310|  42.9k|}
PyTraceBack_Here:
  315|  42.9k|{
  316|  42.9k|    PyObject *exc = PyErr_GetRaisedException();
  317|  42.9k|    assert(PyExceptionInstance_Check(exc));
  ------------------
  |  Branch (317:5): [True: 42.9k, False: 0]
  ------------------
  318|  42.9k|    PyObject *tb = PyException_GetTraceback(exc);
  319|  42.9k|    PyObject *newtb = _PyTraceBack_FromFrame(tb, frame);
  320|  42.9k|    Py_XDECREF(tb);
  ------------------
  |  |  524|  42.9k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  321|  42.9k|    if (newtb == NULL) {
  ------------------
  |  Branch (321:9): [True: 0, False: 42.9k]
  ------------------
  322|      0|        _PyErr_ChainExceptions1(exc);
  323|      0|        return -1;
  324|      0|    }
  325|  42.9k|    PyException_SetTraceback(exc, newtb);
  326|  42.9k|    Py_XDECREF(newtb);
  ------------------
  |  |  524|  42.9k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|  42.9k|    PyErr_SetRaisedException(exc);
  328|  42.9k|    return 0;
  329|  42.9k|}
_Py_DumpTraceback_Init:
 1459|      2|{
 1460|       |#ifdef MS_WINDOWS
 1461|       |    if (pGetThreadDescription != NULL) {
 1462|       |        return;
 1463|       |    }
 1464|       |
 1465|       |    HMODULE kernelbase = GetModuleHandleW(L"kernelbase.dll");
 1466|       |    if (kernelbase != NULL) {
 1467|       |        pGetThreadDescription = (PF_GET_THREAD_DESCRIPTION)GetProcAddress(
 1468|       |                                    kernelbase, "GetThreadDescription");
 1469|       |    }
 1470|       |#endif
 1471|      2|}
traceback.c:tb_dealloc:
  235|  42.9k|{
  236|  42.9k|    PyTracebackObject *tb = _PyTracebackObject_CAST(op);
  ------------------
  |  |   66|  42.9k|#define _PyTracebackObject_CAST(op)   ((PyTracebackObject *)(op))
  ------------------
  237|  42.9k|    PyObject_GC_UnTrack(tb);
  238|  42.9k|    Py_XDECREF(tb->tb_next);
  ------------------
  |  |  524|  42.9k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|  42.9k|    Py_XDECREF(tb->tb_frame);
  ------------------
  |  |  524|  42.9k|#  define Py_XDECREF(op) Py_XDECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|  42.9k|    PyObject_GC_Del(tb);
  241|  42.9k|}
traceback.c:tb_traverse:
  245|     16|{
  246|     16|    PyTracebackObject *tb = _PyTracebackObject_CAST(op);
  ------------------
  |  |   66|     16|#define _PyTracebackObject_CAST(op)   ((PyTracebackObject *)(op))
  ------------------
  247|     16|    Py_VISIT(tb->tb_next);
  ------------------
  |  |  194|     16|    do {                                                                \
  |  |  195|     16|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 10, False: 6]
  |  |  ------------------
  |  |  196|     10|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     10|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     10|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     10|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 10]
  |  |  ------------------
  |  |  198|     10|                return vret;                                            \
  |  |  199|     10|        }                                                               \
  |  |  200|     16|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 16]
  |  |  ------------------
  ------------------
  248|     16|    Py_VISIT(tb->tb_frame);
  ------------------
  |  |  194|     16|    do {                                                                \
  |  |  195|     16|        if (op) {                                                       \
  |  |  ------------------
  |  |  |  Branch (195:13): [True: 16, False: 0]
  |  |  ------------------
  |  |  196|     16|            int vret = visit(_PyObject_CAST(op), arg);                  \
  |  |  ------------------
  |  |  |  |  171|     16|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     16|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  197|     16|            if (vret)                                                   \
  |  |  ------------------
  |  |  |  Branch (197:17): [True: 0, False: 16]
  |  |  ------------------
  |  |  198|     16|                return vret;                                            \
  |  |  199|     16|        }                                                               \
  |  |  200|     16|    } while (0)
  |  |  ------------------
  |  |  |  Branch (200:14): [Folded, False: 16]
  |  |  ------------------
  ------------------
  249|     16|    return 0;
  250|     16|}
traceback.c:tb_create_raw:
   80|  42.9k|{
   81|  42.9k|    PyTracebackObject *tb;
   82|  42.9k|    if ((next != NULL && !PyTraceBack_Check(next)) ||
  ------------------
  |  |   14|  2.70k|#define PyTraceBack_Check(v) Py_IS_TYPE((v), &PyTraceBack_Type)
  |  |  ------------------
  |  |  |  |  215|  2.70k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  2.70k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  2.70k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (82:10): [True: 2.70k, False: 40.2k]
  |  Branch (82:26): [True: 0, False: 2.70k]
  ------------------
   83|  42.9k|                    frame == NULL || !PyFrame_Check(frame)) {
  ------------------
  |  |    8|  42.9k|#define PyFrame_Check(op) Py_IS_TYPE((op), &PyFrame_Type)
  |  |  ------------------
  |  |  |  |  215|  42.9k|#  define Py_IS_TYPE(ob, type) _Py_IS_TYPE_impl(_PyObject_CAST(ob), (type))
  |  |  |  |  ------------------
  |  |  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (83:21): [True: 0, False: 42.9k]
  |  Branch (83:38): [True: 0, False: 42.9k]
  ------------------
   84|      0|        PyErr_BadInternalCall();
  ------------------
  |  |  229|      0|#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
  ------------------
   85|      0|        return NULL;
   86|      0|    }
   87|  42.9k|    tb = PyObject_GC_New(PyTracebackObject, &PyTraceBack_Type);
  ------------------
  |  |  181|  42.9k|    _Py_CAST(type*, _PyObject_GC_New(typeobj))
  |  |  ------------------
  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  ------------------
  ------------------
   88|  42.9k|    if (tb != NULL) {
  ------------------
  |  Branch (88:9): [True: 42.9k, False: 0]
  ------------------
   89|  42.9k|        tb->tb_next = (PyTracebackObject*)Py_XNewRef(next);
  ------------------
  |  |  551|  42.9k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|  42.9k|        tb->tb_frame = (PyFrameObject*)Py_XNewRef(frame);
  ------------------
  |  |  551|  42.9k|#  define Py_XNewRef(obj) _Py_XNewRef(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  42.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  42.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|  42.9k|        tb->tb_lasti = lasti;
   92|  42.9k|        tb->tb_lineno = lineno;
   93|  42.9k|        PyObject_GC_Track(tb);
   94|  42.9k|    }
   95|  42.9k|    return (PyObject *)tb;
   96|  42.9k|}

_PyTraceMalloc_Init:
  787|      2|{
  788|      2|    assert(tracemalloc_config.initialized == TRACEMALLOC_NOT_INITIALIZED);
  ------------------
  |  Branch (788:5): [True: 2, False: 0]
  ------------------
  789|       |
  790|      2|    PyMem_GetAllocator(PYMEM_DOMAIN_RAW, &allocators.raw);
  ------------------
  |  |   33|      2|#define allocators _PyRuntime.tracemalloc.allocators
  ------------------
  791|       |
  792|      2|    if (PyThread_tss_create(&tracemalloc_reentrant_key) != 0) {
  ------------------
  |  |   97|      2|#define tracemalloc_reentrant_key _PyRuntime.tracemalloc.reentrant_key
  ------------------
  |  Branch (792:9): [True: 0, False: 2]
  ------------------
  793|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  794|      0|    }
  795|       |
  796|      2|    tracemalloc_filenames = hashtable_new(hashtable_hash_filename,
  ------------------
  |  |   75|      2|#define tracemalloc_filenames _PyRuntime.tracemalloc.filenames
  ------------------
  797|      2|                                          hashtable_compare_filename,
  798|      2|                                          raw_free, NULL);
  799|       |
  800|      2|    tracemalloc_tracebacks = hashtable_new(hashtable_hash_traceback,
  ------------------
  |  |   77|      2|#define tracemalloc_tracebacks _PyRuntime.tracemalloc.tracebacks
  ------------------
  801|      2|                                           hashtable_compare_traceback,
  802|      2|                                           raw_free, NULL);
  803|       |
  804|      2|    tracemalloc_traces = tracemalloc_create_traces_table();
  ------------------
  |  |   78|      2|#define tracemalloc_traces _PyRuntime.tracemalloc.traces
  ------------------
  805|      2|    tracemalloc_domains = tracemalloc_create_domains_table();
  ------------------
  |  |   79|      2|#define tracemalloc_domains _PyRuntime.tracemalloc.domains
  ------------------
  806|       |
  807|      2|    if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL
  ------------------
  |  |   75|      2|#define tracemalloc_filenames _PyRuntime.tracemalloc.filenames
  ------------------
                  if (tracemalloc_filenames == NULL || tracemalloc_tracebacks == NULL
  ------------------
  |  |   77|      2|#define tracemalloc_tracebacks _PyRuntime.tracemalloc.tracebacks
  ------------------
  |  Branch (807:9): [True: 0, False: 2]
  |  Branch (807:42): [True: 0, False: 2]
  ------------------
  808|      2|       || tracemalloc_traces == NULL || tracemalloc_domains == NULL)
  ------------------
  |  |   78|      2|#define tracemalloc_traces _PyRuntime.tracemalloc.traces
  ------------------
                     || tracemalloc_traces == NULL || tracemalloc_domains == NULL)
  ------------------
  |  |   79|      2|#define tracemalloc_domains _PyRuntime.tracemalloc.domains
  ------------------
  |  Branch (808:11): [True: 0, False: 2]
  |  Branch (808:41): [True: 0, False: 2]
  ------------------
  809|      0|    {
  810|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  811|      0|    }
  812|       |
  813|      2|    assert(tracemalloc_empty_traceback == NULL);
  ------------------
  |  Branch (813:5): [True: 2, False: 0]
  ------------------
  814|      2|    tracemalloc_empty_traceback = raw_malloc(TRACEBACK_SIZE(1));
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
                  tracemalloc_empty_traceback = raw_malloc(TRACEBACK_SIZE(1));
  ------------------
  |  |   55|      2|        (sizeof(traceback_t) + sizeof(frame_t) * (NFRAME))
  ------------------
  815|      2|    if (tracemalloc_empty_traceback  == NULL) {
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
  |  Branch (815:9): [True: 0, False: 2]
  ------------------
  816|      0|        return _PyStatus_NO_MEMORY();
  ------------------
  |  |   33|      0|#define _PyStatus_NO_MEMORY() _PyStatus_ERR(_PyStatus_NO_MEMORY_ERRMSG)
  |  |  ------------------
  |  |  |  |   27|      0|    (PyStatus){ \
  |  |  |  |   28|      0|        ._type = _PyStatus_TYPE_ERROR, \
  |  |  |  |   29|      0|        .func = _PyStatus_GET_FUNC(), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   20|      0|#  define _PyStatus_GET_FUNC() __func__
  |  |  |  |  ------------------
  |  |  |  |   30|      0|        .err_msg = (ERR_MSG)}
  |  |  ------------------
  ------------------
  817|      0|    }
  818|       |
  819|      2|    tracemalloc_empty_traceback->nframe = 1;
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
  820|      2|    tracemalloc_empty_traceback->total_nframe = 1;
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
  821|      2|    tracemalloc_empty_traceback->frames[0].filename = UNKNOWN_FILENAME;
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
                  tracemalloc_empty_traceback->frames[0].filename = UNKNOWN_FILENAME;
  ------------------
  |  |   52|      2|#define UNKNOWN_FILENAME tracemalloc_unknown_filename
  ------------------
  822|      2|    tracemalloc_empty_traceback->frames[0].lineno = 0;
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
  823|      2|    tracemalloc_empty_traceback->hash = traceback_hash(tracemalloc_empty_traceback);
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
                  tracemalloc_empty_traceback->hash = traceback_hash(tracemalloc_empty_traceback);
  ------------------
  |  |   60|      2|#define tracemalloc_empty_traceback _PyRuntime.tracemalloc.empty_traceback
  ------------------
  824|       |
  825|      2|    tracemalloc_config.initialized = TRACEMALLOC_INITIALIZED;
  ------------------
  |  |   16|      2|#define tracemalloc_config _PyRuntime.tracemalloc.config
  ------------------
  826|      2|    return _PyStatus_OK();
  ------------------
  |  |   24|      2|    (PyStatus){._type = _PyStatus_TYPE_OK}
  ------------------
  827|      2|}
tracemalloc.c:hashtable_new:
  164|      8|{
  165|      8|    _Py_hashtable_allocator_t hashtable_alloc = {malloc, free};
  166|      8|    return _Py_hashtable_new_full(hash_func, compare_func,
  167|      8|                                  key_destroy_func, value_destroy_func,
  168|      8|                                  &hashtable_alloc);
  169|      8|}
tracemalloc.c:tracemalloc_create_traces_table:
  484|      2|{
  485|      2|    return hashtable_new(_Py_hashtable_hash_ptr,
  486|      2|                         _Py_hashtable_compare_direct,
  487|       |                         NULL, raw_free);
  488|      2|}
tracemalloc.c:tracemalloc_create_domains_table:
  501|      2|{
  502|      2|    return hashtable_new(hashtable_hash_uint,
  503|      2|                         _Py_hashtable_compare_direct,
  504|       |                         NULL,
  505|      2|                         tracemalloc_destroy_domain);
  506|      2|}
tracemalloc.c:raw_malloc:
  174|      2|{
  175|      2|    return allocators.raw.malloc(allocators.raw.ctx, size);
  ------------------
  |  |   33|      2|#define allocators _PyRuntime.tracemalloc.allocators
  ------------------
                  return allocators.raw.malloc(allocators.raw.ctx, size);
  ------------------
  |  |   33|      2|#define allocators _PyRuntime.tracemalloc.allocators
  ------------------
  176|      2|}
tracemalloc.c:traceback_hash:
  365|      2|{
  366|       |    /* code based on tuple_hash() of Objects/tupleobject.c */
  367|      2|    Py_uhash_t x, y;  /* Unsigned for defined overflow behavior. */
  368|      2|    int len = traceback->nframe;
  369|      2|    Py_uhash_t mult = PyHASH_MULTIPLIER;
  ------------------
  |  |    6|      2|#define PyHASH_MULTIPLIER 1000003UL  /* 0xf4243 */
  ------------------
  370|      2|    frame_t *frame;
  371|       |
  372|      2|    x = 0x345678UL;
  373|      2|    frame = traceback->frames;
  374|      4|    while (--len >= 0) {
  ------------------
  |  Branch (374:12): [True: 2, False: 2]
  ------------------
  375|       |        // Filenames are interned: hash the pointer
  376|      2|        y = (Py_uhash_t)Py_HashPointer(frame->filename);
  377|      2|        y ^= (Py_uhash_t)frame->lineno;
  378|      2|        frame++;
  379|       |
  380|      2|        x = (x ^ y) * mult;
  381|       |        /* the cast might truncate len; that doesn't change hash stability */
  382|      2|        mult += (Py_uhash_t)(82520UL + len + len);
  383|      2|    }
  384|      2|    x ^= traceback->total_nframe;
  385|      2|    x += 97531UL;
  386|      2|    return x;
  387|      2|}

_PyTypeCache_InitType:
  107|  1.31k|{
  108|  1.31k|    *cache_slot(type) = &empty_cache;
  109|  1.31k|}
_PyTypeCache_Insert:
  176|  4.78k|{
  177|  4.78k|    struct type_cache *cache = cache_get(type);
  178|       |    // If the cache is full, resize it before inserting the new entry.
  179|       |    // this also handles the case of empty cache where available is 0 but there are no entries.
  180|  4.78k|    if (cache->available == 0) {
  ------------------
  |  Branch (180:9): [True: 665, False: 4.11k]
  ------------------
  181|    665|        if (cache_resize(type, cache) == -1) {
  ------------------
  |  Branch (181:13): [True: 0, False: 665]
  ------------------
  182|       |            // out of memory, don't cache the value
  183|      0|            return;
  184|      0|        }
  185|    665|        cache = cache_get(type);
  186|    665|        assert(cache->available > 0);
  ------------------
  |  Branch (186:9): [True: 665, False: 0]
  ------------------
  187|    665|    }
  188|  4.78k|    assert(cache->version_tag == type->tp_version_tag);
  ------------------
  |  Branch (188:5): [True: 4.78k, False: 0]
  ------------------
  189|  4.78k|    cache_insert(cache, name, value);
  190|  4.78k|}
_PyTypeCache_Lookup:
  198|  6.09M|{
  199|  6.09M|    assert(PyUnicode_CheckExact(name) && PyUnicode_CHECK_INTERNED(name));
  ------------------
  |  Branch (199:5): [True: 6.09M, False: 0]
  |  Branch (199:5): [True: 6.09M, False: 0]
  ------------------
  200|  6.09M|    struct _PyTypeCacheLookupResult miss = {PyStackRef_NULL, 0, 0};
  201|  6.09M|    struct type_cache *cache = cache_get(type);
  202|  6.09M|    if (cache == NULL) {
  ------------------
  |  Branch (202:9): [True: 0, False: 6.09M]
  ------------------
  203|      0|        return miss;
  204|      0|    }
  205|  6.09M|    Py_hash_t hash = PyUnstable_Unicode_GET_CACHED_HASH(name);
  206|  6.09M|    assert(hash != -1);
  ------------------
  |  Branch (206:5): [True: 6.09M, False: 0]
  ------------------
  207|  6.09M|    uint32_t index = hash & cache->mask;
  208|  6.09M|    _PyStackRef out_ref;
  209|  8.50M|    for (;;) {
  210|  8.50M|        PyObject *entry_name = FT_ATOMIC_LOAD_PTR_ACQUIRE(cache->hashtable[index].name);
  ------------------
  |  |  150|  8.50M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
  211|  8.50M|        if (entry_name == name) {
  ------------------
  |  Branch (211:13): [True: 6.09M, False: 2.40M]
  ------------------
  212|       |#ifdef Py_GIL_DISABLED
  213|       |            if (!_Py_TryXGetStackRef(&cache->hashtable[index].value, &out_ref)) {
  214|       |                return miss;
  215|       |            }
  216|       |#else
  217|  6.09M|            PyObject *v = cache->hashtable[index].value;
  218|  6.09M|            out_ref = v ? PyStackRef_FromPyObjectNew(v) : PyStackRef_NULL;
  ------------------
  |  |  611|  3.30M|#define PyStackRef_FromPyObjectNew(obj) _PyStackRef_FromPyObjectNew(_PyObject_CAST(obj))
  |  |  ------------------
  |  |  |  |  171|  3.30M|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.30M|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (218:23): [True: 3.30M, False: 2.79M]
  ------------------
  219|  6.09M|#endif
  220|  6.09M|            break;
  221|  6.09M|        }
  222|  2.40M|        else if (entry_name == NULL) {
  ------------------
  |  Branch (222:18): [True: 4.78k, False: 2.40M]
  ------------------
  223|  4.78k|            return miss;
  224|  4.78k|        }
  225|  2.40M|        index = (index + 1) & cache->mask;
  226|  2.40M|    }
  227|       |    // Check the cache version against the type version tag to maintain
  228|       |    // consistency with find_name_in_mro and prevent stale cache reads
  229|  6.09M|    if (cache->version_tag != FT_ATOMIC_LOAD_UINT_RELAXED(type->tp_version_tag)) {
  ------------------
  |  |  189|  6.09M|#define FT_ATOMIC_LOAD_UINT_RELAXED(value) value
  ------------------
  |  Branch (229:9): [True: 0, False: 6.09M]
  ------------------
  230|      0|        PyStackRef_XCLOSE(out_ref);
  231|      0|        return miss;
  232|      0|    }
  233|  6.09M|    return (struct _PyTypeCacheLookupResult){out_ref, 1, cache->version_tag};
  234|  6.09M|}
_PyTypeCache_Invalidate:
  241|    181|{
  242|    181|    OBJECT_STAT_INC(type_cache_invalidations);
  ------------------
  |  |   77|    181|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  243|    181|    struct type_cache *cache = cache_get(type);
  244|    181|    cache_set(type, &empty_cache);
  245|    181|    cache_free_delayed(cache);
  246|    181|}
typecache.c:cache_slot:
   83|  6.10M|{
   84|  6.10M|    if (type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) {
  ------------------
  |  |  467|  6.10M|#define _Py_TPFLAGS_STATIC_BUILTIN (1 << 1)
  ------------------
  |  Branch (84:9): [True: 932k, False: 5.17M]
  ------------------
   85|   932k|        PyInterpreterState *interp = _PyInterpreterState_GET();
   86|   932k|        managed_static_type_state *state = _PyStaticType_GetState(interp, type);
   87|   932k|        assert(state != NULL);
  ------------------
  |  Branch (87:9): [True: 932k, False: 0]
  ------------------
   88|   932k|        return &state->_tp_cache;
   89|   932k|    }
   90|  5.17M|    return &type->_tp_cache;
   91|  6.10M|}
typecache.c:cache_get:
   95|  6.10M|{
   96|  6.10M|    return (struct type_cache *)FT_ATOMIC_LOAD_PTR_ACQUIRE(*cache_slot(type));
  ------------------
  |  |  150|  6.10M|#define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value
  ------------------
   97|  6.10M|}
typecache.c:cache_resize:
  140|    665|{
  141|    665|    uint32_t old_size = cache_size(cache);
  142|    665|    uint32_t new_size;
  143|    665|    if (cache->used == 0) {
  ------------------
  |  Branch (143:9): [True: 514, False: 151]
  ------------------
  144|       |        // the cache is the empty cache, we need to allocate a new cache with the minimum size
  145|    514|        new_size = _Py_TYPECACHE_MINSIZE;
  ------------------
  |  |   14|    514|#define _Py_TYPECACHE_MINSIZE (1 << 3)
  ------------------
  146|    514|    }
  147|    151|    else {
  148|       |        // double the cache size when resizing
  149|    151|        new_size = old_size * 2;
  150|    151|    }
  151|    665|    if (new_size > _Py_TYPECACHE_MAXSIZE) {
  ------------------
  |  |   15|    665|#define _Py_TYPECACHE_MAXSIZE (1 << 16)
  ------------------
  |  Branch (151:9): [True: 0, False: 665]
  ------------------
  152|       |        // The new size is too big, don't resize and just return.
  153|      0|        OBJECT_STAT_INC(type_cache_too_big);
  ------------------
  |  |   77|      0|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  154|      0|        return -1;
  155|      0|    }
  156|    665|    struct type_cache *new_cache = cache_allocate(new_size);
  157|    665|    if (new_cache == NULL) {
  ------------------
  |  Branch (157:9): [True: 0, False: 665]
  ------------------
  158|      0|        return -1;
  159|      0|    }
  160|    665|    OBJECT_STAT_INC(type_cache_resizes);
  ------------------
  |  |   77|    665|#define OBJECT_STAT_INC(name) ((void)0)
  ------------------
  161|  10.4k|    for (uint32_t i = 0; i < old_size; i++) {
  ------------------
  |  Branch (161:26): [True: 9.77k, False: 665]
  ------------------
  162|  9.77k|        if (cache->hashtable[i].name != NULL) {
  ------------------
  |  Branch (162:13): [True: 4.24k, False: 5.52k]
  ------------------
  163|  4.24k|            cache_insert(new_cache, cache->hashtable[i].name, cache->hashtable[i].value);
  164|  4.24k|        }
  165|  9.77k|    }
  166|    665|    new_cache->version_tag = type->tp_version_tag;
  167|    665|    cache_set(type, new_cache);
  168|    665|    cache_free_delayed(cache);
  169|    665|    return 0;
  170|    665|}
typecache.c:cache_size:
   32|  8.52k|{
   33|  8.52k|    return cache->mask + 1;
   34|  8.52k|}
typecache.c:cache_allocate:
   45|    665|{
   46|       |    // size must be a power of two
   47|    665|    assert((size & (size - 1)) == 0);
  ------------------
  |  Branch (47:5): [True: 665, False: 0]
  ------------------
   48|    665|    size_t nbytes = offsetof(struct type_cache, hashtable)
   49|    665|                    + (size_t)size * sizeof(struct type_cache_entry);
   50|    665|    struct type_cache *cache = PyMem_Calloc(1, nbytes);
   51|    665|    if (cache == NULL) {
  ------------------
  |  Branch (51:9): [True: 0, False: 665]
  ------------------
   52|      0|        return NULL;
   53|      0|    }
   54|    665|    cache->mask = size - 1;
   55|       |    // load factor of 0.75
   56|    665|    cache->available = size - (size >> 2);
   57|    665|    cache->used = 0;
   58|    665|    return cache;
   59|    665|}
typecache.c:cache_insert:
  114|  9.03k|{
  115|  9.03k|    Py_hash_t hash = PyUnstable_Unicode_GET_CACHED_HASH(name);
  116|  9.03k|    assert(hash != -1);
  ------------------
  |  Branch (116:5): [True: 9.03k, False: 0]
  ------------------
  117|  9.03k|    uint32_t index = hash & cache->mask;
  118|  18.6k|    for (;;) {
  119|  18.6k|        if (cache->hashtable[index].name == NULL) {
  ------------------
  |  Branch (119:13): [True: 9.03k, False: 9.59k]
  ------------------
  120|  9.03k|#ifndef Py_GIL_DISABLED
  121|       |            // On free-threading, all interned strings are immortal.
  122|  9.03k|            Py_INCREF(name);
  ------------------
  |  |  310|  9.03k|#  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  9.03k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  9.03k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|  9.03k|#endif
  124|  9.03k|            cache->hashtable[index].value = value;
  125|  9.03k|            FT_ATOMIC_STORE_PTR_RELEASE(cache->hashtable[index].name, name);
  ------------------
  |  |  164|  9.03k|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  126|  9.03k|            cache->used++;
  127|  9.03k|            cache->available--;
  128|  9.03k|            return;
  129|  9.03k|        }
  130|  9.59k|        else if (cache->hashtable[index].name == name) {
  ------------------
  |  Branch (130:18): [True: 0, False: 9.59k]
  ------------------
  131|       |            /* someone else added the entry before us. */
  132|      0|            return;
  133|      0|        }
  134|  9.59k|        index = (index + 1) & cache->mask;
  135|  9.59k|    }
  136|  9.03k|}
typecache.c:cache_set:
  101|    846|{
  102|    846|    FT_ATOMIC_STORE_PTR_RELEASE(*cache_slot(type), cache);
  ------------------
  |  |  164|    846|#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
  ------------------
  103|    846|}
typecache.c:cache_free_delayed:
   63|    846|{
   64|    846|    if (cache == NULL || cache == &empty_cache) {
  ------------------
  |  Branch (64:9): [True: 0, False: 846]
  |  Branch (64:26): [True: 522, False: 324]
  ------------------
   65|    522|        return;
   66|    522|    }
   67|    324|#ifndef Py_GIL_DISABLED
   68|       |    // On gil-enabled builds, the cache owns strong references to the interned strings,
   69|       |    // so we need to decref them before freeing the cache memory.
   70|  7.53k|    for (uint32_t i = 0; i < cache_size(cache); i++) {
  ------------------
  |  Branch (70:26): [True: 7.20k, False: 324]
  ------------------
   71|  7.20k|        if (cache->hashtable[i].name != NULL) {
  ------------------
  |  Branch (71:13): [True: 4.74k, False: 2.46k]
  ------------------
   72|  4.74k|            Py_DECREF(cache->hashtable[i].name);
  ------------------
  |  |  430|  4.74k|#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  4.74k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  4.74k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|  4.74k|        }
   74|  7.20k|    }
   75|    324|#endif
   76|       |    // Delay the freeing of old cache for concurrent lock-free readers
   77|    324|    _PyMem_FreeDelayed(cache, cache_nbytes(cache));
   78|    324|}
typecache.c:cache_nbytes:
   38|    324|{
   39|       |    return offsetof(struct type_cache, hashtable)
   40|    324|        + (size_t)cache_size(cache) * sizeof(struct type_cache_entry);
   41|    324|}

fuzzer.c:Py_DECREF:
  418|  11.9k|{
  419|       |    // Non-limited C API and limited C API for Python 3.9 and older access
  420|       |    // directly PyObject.ob_refcnt.
  421|  11.9k|    if (_Py_IsImmortal(op)) {
  ------------------
  |  |  137|  11.9k|#define _Py_IsImmortal(op) _Py_IsImmortal(_PyObject_CAST(op))
  |  |  ------------------
  |  |  |  |  171|  11.9k|#define _PyObject_CAST(op) _Py_CAST(PyObject*, (op))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  11.9k|#define _Py_CAST(type, expr) ((type)(expr))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (137:28): [True: 0, False: 11.9k]
  |  |  ------------------
  ------------------
  422|      0|        _Py_DECREF_IMMORTAL_STAT_INC();
  ------------------
  |  |   22|      0|#  define _Py_DECREF_IMMORTAL_STAT_INC() ((void)0)
  ------------------
  423|      0|        return;
  424|      0|    }
  425|  11.9k|    _Py_DECREF_STAT_INC();
  ------------------
  |  |   20|  11.9k|#  define _Py_DECREF_STAT_INC() ((void)0)
  ------------------
  426|  11.9k|    if (--op->ob_refcnt == 0) {
  ------------------
  |  Branch (426:9): [True: 11.9k, False: 0]
  ------------------
  427|  11.9k|        _Py_Dealloc(op);
  428|  11.9k|    }
  429|  11.9k|}
fuzzer.c:_Py_IsImmortal:
  127|  11.9k|{
  128|       |#if defined(Py_GIL_DISABLED)
  129|       |    return (_Py_atomic_load_uint32_relaxed(&op->ob_ref_local) ==
  130|       |            _Py_IMMORTAL_REFCNT_LOCAL);
  131|       |#elif SIZEOF_VOID_P > 4
  132|  11.9k|    return _Py_CAST(int32_t, op->ob_refcnt) < 0;
  ------------------
  |  |   37|  11.9k|#define _Py_CAST(type, expr) ((type)(expr))
  ------------------
  133|       |#else
  134|       |    return op->ob_refcnt >= _Py_IMMORTAL_MINIMUM_REFCNT;
  135|       |#endif
  136|  11.9k|}

